From 274b4416ec2a9dd6794207ffd7868cf7f706f866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3zsef=20Horv=C3=A1th?= Date: Mon, 17 Jul 2023 09:58:16 +0200 Subject: [PATCH 01/56] Using MailKit instead of SmtpClient (ORCH-267) (#8707) * Using MailKit instead of SmtpClient * Removing 2 more references to System.Net.Http that we hopefully don't need at all anymore * Attempting to fix Razor compilation warning about Orchard.Email's reference to System.Net.Http * Improving SmtpSettings.cshtml a bit (port number restrictions, user name box width) * Fixing encription method is not persisted * Adding migration step to migrate from EnableSsl to EncryptionMethod in SmtpSettingsPart * Code styling/simplifications * Using infoset default values instead of Migrations to keep SSL settings when upgrading to MailKit --------- Co-authored-by: Lombiq Co-authored-by: Benedek Farkas --- .../Orchard.Framework.Tests.csproj | 1 - .../Controllers/EmailAdminController.cs | 12 +- .../Handlers/SmtpSettingsPartHandler.cs | 7 +- .../Modules/Orchard.Email/Migrations.cs | 6 +- .../Models/SmtpEncryptionMethod.cs | 10 ++ .../Orchard.Email/Models/SmtpSettingsPart.cs | 29 ++-- .../Orchard.Email/Orchard.Email.csproj | 18 ++- .../Services/MissingSettingsBanner.cs | 5 +- .../Services/SmtpMessageChannel.cs | 132 +++++++++++------- .../EditorTemplates/Parts/SmtpSettings.cshtml | 74 +++++----- .../Modules/Orchard.Email/Web.config | 1 + .../Modules/Orchard.Email/packages.config | 6 +- 12 files changed, 184 insertions(+), 117 deletions(-) create mode 100644 src/Orchard.Web/Modules/Orchard.Email/Models/SmtpEncryptionMethod.cs diff --git a/src/Orchard.Tests/Orchard.Framework.Tests.csproj b/src/Orchard.Tests/Orchard.Framework.Tests.csproj index 0758a2d8bce..1b272e1ffad 100644 --- a/src/Orchard.Tests/Orchard.Framework.Tests.csproj +++ b/src/Orchard.Tests/Orchard.Framework.Tests.csproj @@ -133,7 +133,6 @@ ..\..\lib\sqlce\System.Data.SqlServerCe.dll True - ..\packages\Microsoft.AspNet.WebApi.Client.5.2.7\lib\net45\System.Net.Http.Formatting.dll diff --git a/src/Orchard.Web/Modules/Orchard.Email/Controllers/EmailAdminController.cs b/src/Orchard.Web/Modules/Orchard.Email/Controllers/EmailAdminController.cs index e5d64f49e5f..f676bfd5f85 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Controllers/EmailAdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Controllers/EmailAdminController.cs @@ -40,9 +40,9 @@ public ActionResult TestSettings(TestSmtpSettings testSettings) { smtpSettings.Address = testSettings.From; smtpSettings.Host = testSettings.Host; smtpSettings.Port = testSettings.Port; - smtpSettings.EnableSsl = testSettings.EnableSsl; + smtpSettings.AutoSelectEncryption = testSettings.AutoSelectEncryption; + smtpSettings.EncryptionMethod = testSettings.EncryptionMethod; smtpSettings.RequireCredentials = testSettings.RequireCredentials; - smtpSettings.UseDefaultCredentials = testSettings.UseDefaultCredentials; smtpSettings.UserName = testSettings.UserName; smtpSettings.Password = testSettings.Password; @@ -64,10 +64,10 @@ public ActionResult TestSettings(TestSmtpSettings testSettings) { return Json(new { error = fakeLogger.Message }); } - return Json(new {status = T("Message sent.").Text}); + return Json(new { status = T("Message sent.").Text }); } catch (Exception e) { - return Json(new {error = e.Message}); + return Json(new { error = e.Message }); } finally { var smtpChannelComponent = _smtpChannel as Component; @@ -97,9 +97,9 @@ public class TestSmtpSettings { public string ReplyTo { get; set; } public string Host { get; set; } public int Port { get; set; } - public bool EnableSsl { get; set; } + public SmtpEncryptionMethod EncryptionMethod { get; set; } + public bool AutoSelectEncryption { get; set; } public bool RequireCredentials { get; set; } - public bool UseDefaultCredentials { get; set; } public string UserName { get; set; } public string Password { get; set; } public string To { get; set; } diff --git a/src/Orchard.Web/Modules/Orchard.Email/Handlers/SmtpSettingsPartHandler.cs b/src/Orchard.Web/Modules/Orchard.Email/Handlers/SmtpSettingsPartHandler.cs index e1160ad4686..be2d200102b 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Handlers/SmtpSettingsPartHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Handlers/SmtpSettingsPartHandler.cs @@ -1,12 +1,12 @@ using System; +using System.Configuration; using System.Text; using Orchard.ContentManagement; -using Orchard.Email.Models; using Orchard.ContentManagement.Handlers; +using Orchard.Email.Models; using Orchard.Localization; using Orchard.Logging; using Orchard.Security; -using System.Configuration; namespace Orchard.Email.Handlers { public class SmtpSettingsPartHandler : ContentHandler { @@ -24,7 +24,8 @@ public SmtpSettingsPartHandler(IEncryptionService encryptionService) { OnInitializing((context, part) => { part.Port = 25; part.RequireCredentials = false; - part.EnableSsl = false; + part.AutoSelectEncryption = true; + part.EncryptionMethod = SmtpEncryptionMethod.None; }); } diff --git a/src/Orchard.Web/Modules/Orchard.Email/Migrations.cs b/src/Orchard.Web/Modules/Orchard.Email/Migrations.cs index 0409097b9dd..259974139c4 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Migrations.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Migrations.cs @@ -2,10 +2,6 @@ namespace Orchard.Email { public class Migrations : DataMigrationImpl { - - public int Create() { - - return 1; - } + public int Create() => 1; } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Email/Models/SmtpEncryptionMethod.cs b/src/Orchard.Web/Modules/Orchard.Email/Models/SmtpEncryptionMethod.cs new file mode 100644 index 00000000000..64ed03aa427 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Email/Models/SmtpEncryptionMethod.cs @@ -0,0 +1,10 @@ +namespace Orchard.Email.Models { + /// + /// Represents an enumeration for mail encryption methods. + /// + public enum SmtpEncryptionMethod { + None = 0, + SslTls = 1, + StartTls = 2 + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Email/Models/SmtpSettingsPart.cs b/src/Orchard.Web/Modules/Orchard.Email/Models/SmtpSettingsPart.cs index 3eb75d95291..b710cf88173 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Models/SmtpSettingsPart.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Models/SmtpSettingsPart.cs @@ -1,7 +1,7 @@ -using System.Configuration; +using System; +using System.Configuration; using System.Net.Configuration; using Orchard.ContentManagement; -using System; using Orchard.ContentManagement.Utilities; namespace Orchard.Email.Models { @@ -31,9 +31,23 @@ public int Port { set { this.Store(x => x.Port, value); } } - public bool EnableSsl { - get { return this.Retrieve(x => x.EnableSsl); } - set { this.Store(x => x.EnableSsl, value); } + [Obsolete($"Use {nameof(AutoSelectEncryption)} and/or {nameof(EncryptionMethod)} instead.")] + public bool EnableSsl => this.Retrieve(x => x.EnableSsl); + + public SmtpEncryptionMethod EncryptionMethod { +#pragma warning disable CS0618 // Type or member is obsolete + // Reading EnableSsl is necessary to keep the correct settings during the upgrade to MailKit. + get { return this.Retrieve(x => x.EncryptionMethod, EnableSsl ? SmtpEncryptionMethod.SslTls : SmtpEncryptionMethod.None); } +#pragma warning restore CS0618 // Type or member is obsolete + set { this.Store(x => x.EncryptionMethod, value); } + } + + public bool AutoSelectEncryption { +#pragma warning disable CS0618 // Type or member is obsolete + // Reading EnableSsl is necessary to keep the correct settings during the upgrade to MailKit. + get { return this.Retrieve(x => x.AutoSelectEncryption, !EnableSsl); } +#pragma warning restore CS0618 // Type or member is obsolete + set { this.Store(x => x.AutoSelectEncryption, value); } } public bool RequireCredentials { @@ -41,11 +55,6 @@ public bool RequireCredentials { set { this.Store(x => x.RequireCredentials, value); } } - public bool UseDefaultCredentials { - get { return this.Retrieve(x => x.UseDefaultCredentials); } - set { this.Store(x => x.UseDefaultCredentials, value); } - } - public string UserName { get { return this.Retrieve(x => x.UserName); } set { this.Store(x => x.UserName, value); } diff --git a/src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj b/src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj index f61f1f1f162..1327b1456e0 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj +++ b/src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj @@ -55,6 +55,12 @@ false + + ..\..\..\packages\Portable.BouncyCastle.1.9.0\lib\net40\BouncyCastle.Crypto.dll + + + ..\..\..\packages\MailKit.3.1.1\lib\net48\MailKit.dll + ..\..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll @@ -62,14 +68,23 @@ ..\..\..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll + + ..\..\..\packages\MimeKit.3.1.1\lib\net48\MimeKit.dll + ..\..\..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll + + ..\..\..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + False + + + @@ -104,6 +119,7 @@ + @@ -218,4 +234,4 @@ - + \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Email/Services/MissingSettingsBanner.cs b/src/Orchard.Web/Modules/Orchard.Email/Services/MissingSettingsBanner.cs index 7e22702617b..e80f239e2ff 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Services/MissingSettingsBanner.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Services/MissingSettingsBanner.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Net.Mail; using System.Web.Mvc; using Orchard.ContentManagement; using Orchard.Email.Models; @@ -24,8 +23,8 @@ public IEnumerable GetNotifications() { if (smtpSettings == null || !smtpSettings.IsValid()) { var urlHelper = new UrlHelper(workContext.HttpContext.Request.RequestContext); - var url = urlHelper.Action("Email", "Admin", new {Area = "Settings"}); - yield return new NotifyEntry {Message = T("The SMTP settings need to be configured.", url), Type = NotifyType.Warning}; + var url = urlHelper.Action("Email", "Admin", new { Area = "Settings" }); + yield return new NotifyEntry { Message = T("The SMTP settings need to be configured.", url), Type = NotifyType.Warning }; } } } diff --git a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs index 026cc8ad907..3c6437372dd 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs @@ -1,14 +1,17 @@ using System; using System.Collections.Generic; using System.Configuration; -using System.Net; +using System.Linq; using System.Net.Configuration; using System.Net.Mail; using System.Web.Mvc; +using MailKit.Security; +using MimeKit; using Orchard.ContentManagement; using Orchard.DisplayManagement; -using Orchard.Logging; using Orchard.Email.Models; +using Orchard.Logging; +using SmtpClient = MailKit.Net.Smtp.SmtpClient; namespace Orchard.Email.Services { public class SmtpMessageChannel : Component, ISmtpChannel, IDisposable { @@ -64,67 +67,55 @@ public void Process(IDictionary parameters) { Content = new MvcHtmlString(emailMessage.Body) })); - var mailMessage = new MailMessage { + var mailMessage = new MimeMessage { Subject = emailMessage.Subject, - Body = _shapeDisplay.Display(template), - IsBodyHtml = true + }; + var mailBodyBuilder = new BodyBuilder { + HtmlBody = _shapeDisplay.Display(template), }; - if (parameters.ContainsKey("Message")) { + if (parameters.TryGetValue("Message", out var possiblyMailMessage) && possiblyMailMessage is MailMessage legacyMessage) { // A full message object is provided by the sender. + if (!String.IsNullOrWhiteSpace(legacyMessage.Subject)) { + mailMessage.Subject = legacyMessage.Subject; + } - var oldMessage = mailMessage; - mailMessage = (MailMessage)parameters["Message"]; - - if (String.IsNullOrWhiteSpace(mailMessage.Subject)) - mailMessage.Subject = oldMessage.Subject; - - if (String.IsNullOrWhiteSpace(mailMessage.Body)) { - mailMessage.Body = oldMessage.Body; - mailMessage.IsBodyHtml = oldMessage.IsBodyHtml; + if (!String.IsNullOrWhiteSpace(legacyMessage.Body)) { + mailBodyBuilder.TextBody = legacyMessage.IsBodyHtml ? null : legacyMessage.Body; + mailBodyBuilder.HtmlBody = legacyMessage.IsBodyHtml ? legacyMessage.Body : null; } } - try { + mailMessage.Body = mailBodyBuilder.ToMessageBody(); - foreach (var recipient in ParseRecipients(emailMessage.Recipients)) { - mailMessage.To.Add(new MailAddress(recipient)); - } + try { + mailMessage.To.AddRange(ParseRecipients(emailMessage.Recipients)); if (!String.IsNullOrWhiteSpace(emailMessage.Cc)) { - foreach (var recipient in ParseRecipients(emailMessage.Cc)) { - mailMessage.CC.Add(new MailAddress(recipient)); - } + mailMessage.Cc.AddRange(ParseRecipients(emailMessage.Cc)); } if (!String.IsNullOrWhiteSpace(emailMessage.Bcc)) { - foreach (var recipient in ParseRecipients(emailMessage.Bcc)) { - mailMessage.Bcc.Add(new MailAddress(recipient)); - } + mailMessage.Bcc.AddRange(ParseRecipients(emailMessage.Bcc)); } + var fromAddress = default(MailboxAddress); if (!String.IsNullOrWhiteSpace(emailMessage.From)) { - mailMessage.From = new MailAddress(emailMessage.From); + fromAddress = MailboxAddress.Parse(emailMessage.From); } else { // Take 'From' address from site settings or web.config. - mailMessage.From = !String.IsNullOrWhiteSpace(_smtpSettings.Address) - ? new MailAddress(_smtpSettings.Address) - : new MailAddress(((SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp")).From); + fromAddress = !String.IsNullOrWhiteSpace(_smtpSettings.Address) + ? MailboxAddress.Parse(_smtpSettings.Address) + : MailboxAddress.Parse(((SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp")).From); } + mailMessage.From.Add(fromAddress); + if (!String.IsNullOrWhiteSpace(emailMessage.ReplyTo)) { - foreach (var recipient in ParseRecipients(emailMessage.ReplyTo)) { - mailMessage.ReplyToList.Add(new MailAddress(recipient)); - } - } - if (parameters.ContainsKey("NotifyReadEmail")) { - if (parameters["NotifyReadEmail"] is bool) { - if ((bool)(parameters["NotifyReadEmail"])) { - mailMessage.Headers.Add("Disposition-Notification-To", mailMessage.From.ToString()); - } - } + mailMessage.ReplyTo.AddRange(ParseRecipients(emailMessage.ReplyTo)); } + _smtpClientField.Value.Send(mailMessage); } catch (Exception e) { @@ -133,26 +124,51 @@ public void Process(IDictionary parameters) { } private SmtpClient CreateSmtpClient() { + var smtpConfiguration = new { + _smtpSettings.Host, + _smtpSettings.Port, + _smtpSettings.EncryptionMethod, + _smtpSettings.AutoSelectEncryption, + _smtpSettings.RequireCredentials, + _smtpSettings.UserName, + _smtpSettings.Password, + }; // If no properties are set in the dashboard, use the web.config value. if (String.IsNullOrWhiteSpace(_smtpSettings.Host)) { - return new SmtpClient(); - } + var smtpSection = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp"); + if (smtpSection.DeliveryMethod != SmtpDeliveryMethod.Network) { + throw new NotSupportedException($"Only the {SmtpDeliveryMethod.Network} delivery method is supported, but " + + $"{smtpSection.DeliveryMethod} delivery method is configured. Please check your Web.config."); + } - var smtpClient = new SmtpClient { - UseDefaultCredentials = _smtpSettings.RequireCredentials && _smtpSettings.UseDefaultCredentials - }; + smtpConfiguration = new { + smtpSection.Network.Host, + smtpSection.Network.Port, + EncryptionMethod = smtpSection.Network.EnableSsl ? SmtpEncryptionMethod.SslTls : SmtpEncryptionMethod.None, + AutoSelectEncryption = !smtpSection.Network.EnableSsl, + RequireCredentials = smtpSection.Network.DefaultCredentials || !String.IsNullOrWhiteSpace(smtpSection.Network.UserName), + smtpSection.Network.UserName, + smtpSection.Network.Password, + }; + } - if (!smtpClient.UseDefaultCredentials && !String.IsNullOrWhiteSpace(_smtpSettings.UserName)) { - smtpClient.Credentials = new NetworkCredential(_smtpSettings.UserName, _smtpSettings.Password); + var secureSocketOptions = SecureSocketOptions.Auto; + if (!smtpConfiguration.AutoSelectEncryption) { + secureSocketOptions = smtpConfiguration.EncryptionMethod switch { + SmtpEncryptionMethod.None => SecureSocketOptions.None, + SmtpEncryptionMethod.SslTls => SecureSocketOptions.SslOnConnect, + SmtpEncryptionMethod.StartTls => SecureSocketOptions.StartTls, + _ => SecureSocketOptions.None, + }; } - if (_smtpSettings.Host != null) { - smtpClient.Host = _smtpSettings.Host; + var smtpClient = new SmtpClient(); + smtpClient.Connect(smtpConfiguration.Host, smtpConfiguration.Port, secureSocketOptions); + + if (smtpConfiguration.RequireCredentials) { + smtpClient.Authenticate(smtpConfiguration.UserName, smtpConfiguration.Password); } - smtpClient.Port = _smtpSettings.Port; - smtpClient.EnableSsl = _smtpSettings.EnableSsl; - smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; return smtpClient; } @@ -160,8 +176,16 @@ private string Read(IDictionary dictionary, string key) { return dictionary.ContainsKey(key) ? dictionary[key] as string : null; } - private IEnumerable ParseRecipients(string recipients) { - return recipients.Split(new[] {',', ';'}, StringSplitOptions.RemoveEmptyEntries); + private IEnumerable ParseRecipients(string recipients) { + return recipients.Split(new[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries) + .SelectMany(address => { + if (MailboxAddress.TryParse(address, out var mailboxAddress)) { + return new[] { mailboxAddress }; + } + + Logger.Error("Invalid email address: {0}", address); + return Enumerable.Empty(); + }); } } -} \ No newline at end of file +} diff --git a/src/Orchard.Web/Modules/Orchard.Email/Views/EditorTemplates/Parts/SmtpSettings.cshtml b/src/Orchard.Web/Modules/Orchard.Email/Views/EditorTemplates/Parts/SmtpSettings.cshtml index bc4c237d437..1165d0580b0 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Views/EditorTemplates/Parts/SmtpSettings.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Email/Views/EditorTemplates/Parts/SmtpSettings.cshtml @@ -1,4 +1,5 @@ -@using System.Net.Mail +@using Orchard.Email.Models +@using System.Net.Mail @model Orchard.Email.Models.SmtpSettingsPart @{ var smtpClient = new SmtpClient(); @@ -20,15 +21,37 @@
- @Html.TextBoxFor(m => m.Port, new { placeholder = smtpClient.Port, @class = "text small" }) + @Html.TextBoxFor(m => m.Port, new { type = "number", placeholder = smtpClient.Port, min = 1, max = 65535 }) @Html.ValidationMessage("Port", "*") @T("The SMTP server port, usually 25.")
- @Html.EditorFor(m => m.EnableSsl) - - @Html.ValidationMessage("EnableSsl", "*") - @T("Check if the SMTP server requires SSL communications.") + + + @Html.ValidationMessage("EncryptionMethod", "*") + @T("The encryption method used when connecting to mail server.") +
+
+ @Html.EditorFor(m => m.AutoSelectEncryption) + + @Html.ValidationMessage("AutoSelectEncryption", "*") + @T("Check to let the system select the encryption method based on port.")
@Html.EditorFor(m => m.RequireCredentials) @@ -37,32 +60,17 @@
-
- @Html.RadioButtonFor(m => m.UseDefaultCredentials, false, new { id = "customCredentialsOption", name = "UseDefaultCredentials" }) - - @Html.ValidationMessage("UseDefaultCredentials", "*") + + @Html.TextBoxFor(m => m.UserName, new { @class = "text medium" }) + @Html.ValidationMessage("UserName", "*") + @T("The username for authentication.")
-
- @Html.RadioButtonFor(m => m.UseDefaultCredentials, true, new { id = "defaultCredentialsOptions", name = "UseDefaultCredentials" }) - - @Html.ValidationMessage("UseDefaultCredentials", "*") - @T("When this option is selected, the aplication pool or host-process identity is used to authenticate with the mail server. ") -
-
- - - @Html.TextBoxFor(m => m.UserName, new { @class = "text" }) - @Html.ValidationMessage("UserName", "*") - @T("The username for authentication.") - - - - @Html.TextBoxFor(m => m.Password, new { type = "password", @class = "text medium" }) - @Html.ValidationMessage("Password", "*") - @T("The password for authentication.") - + + @Html.TextBoxFor(m => m.Password, new { type = "password", @class = "text medium" }) + @Html.ValidationMessage("Password", "*") + @T("The password for authentication.")
@@ -106,9 +114,9 @@ from = $("#@Html.FieldIdFor(m => m.Address)"), host = $("#@Html.FieldIdFor(m => m.Host)"), port = $("#@Html.FieldIdFor(m => m.Port)"), - enableSsl = $("#@Html.FieldIdFor(m => m.EnableSsl)"), + encryptionMethod = $("#@Html.FieldIdFor(m => m.EncryptionMethod)"), + autoSelectEncryption = $("#@Html.FieldIdFor(m => m.AutoSelectEncryption)"), requireCredentials = $("#@Html.FieldIdFor(m => m.RequireCredentials)"), - useDefaultCredentials = $("input[name='@Html.NameFor(m => m.UseDefaultCredentials)']"), userName = $("#@Html.FieldIdFor(m => m.UserName)"), password = $("#@Html.FieldIdFor(m => m.Password)"), to = $("#emailtestto"), @@ -123,9 +131,9 @@ from: from.val(), host: host.val(), port: port.val(), - enableSsl: enableSsl.prop("checked"), + encryptionMethod: encryptionMethod.val(), + autoSelectEncryption: autoSelectEncryption.prop("checked"), requireCredentials: requireCredentials.prop("checked"), - useDefaultCredentials: useDefaultCredentials.filter(':checked').val(), userName: userName.val(), password: password.val(), to: to.val(), diff --git a/src/Orchard.Web/Modules/Orchard.Email/Web.config b/src/Orchard.Web/Modules/Orchard.Email/Web.config index 3cd57347867..94bd3006711 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Web.config +++ b/src/Orchard.Web/Modules/Orchard.Email/Web.config @@ -29,6 +29,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Email/packages.config b/src/Orchard.Web/Modules/Orchard.Email/packages.config index 63841a016cd..1c240b8774b 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/packages.config +++ b/src/Orchard.Web/Modules/Orchard.Email/packages.config @@ -1,9 +1,13 @@  + + - + + + \ No newline at end of file From d8bb23a4c4333d3dffbd4a1028f444f1b9f8da7d Mon Sep 17 00:00:00 2001 From: Hermes Sbicego Date: Fri, 21 Jul 2023 08:03:42 +0200 Subject: [PATCH 02/56] Update SslSettingsPartHandler.cs (#8715) Adds the OnUpdated handler in order to Invalidate the cache of the settings --- .../Handlers/SslSettingsPartHandler.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Orchard.Web/Modules/Orchard.SecureSocketsLayer/Handlers/SslSettingsPartHandler.cs b/src/Orchard.Web/Modules/Orchard.SecureSocketsLayer/Handlers/SslSettingsPartHandler.cs index ab93bdd4b98..d6e1b91f71b 100644 --- a/src/Orchard.Web/Modules/Orchard.SecureSocketsLayer/Handlers/SslSettingsPartHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.SecureSocketsLayer/Handlers/SslSettingsPartHandler.cs @@ -18,6 +18,7 @@ public SslSettingsPartHandler(ISignals signals) { Filters.Add(new ActivatingFilter("Site")); // Evict cached content when updated, removed or destroyed. + OnUpdated((context, part) => Invalidate(part)); OnPublished((context, part) => Invalidate(part)); OnRemoved((context, part) => Invalidate(part)); OnDestroyed((context, part) => Invalidate(part)); @@ -40,4 +41,4 @@ private void Invalidate(SslSettingsPart content) { _signals.Trigger("SslSettingsPart_EvictAll"); } } -} \ No newline at end of file +} From b854839a28925da1ce3fccc8aeb1a2dae7a00938 Mon Sep 17 00:00:00 2001 From: Lucio Fassio Date: Mon, 31 Jul 2023 15:29:15 +0200 Subject: [PATCH 03/56] Implements the "scale" filter to prevent image degradation (#8713) --- .../Modules/Orchard.MediaProcessing/Shapes/MediaShapes.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.MediaProcessing/Shapes/MediaShapes.cs b/src/Orchard.Web/Modules/Orchard.MediaProcessing/Shapes/MediaShapes.cs index c2d640bce76..5f53191f756 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaProcessing/Shapes/MediaShapes.cs +++ b/src/Orchard.Web/Modules/Orchard.MediaProcessing/Shapes/MediaShapes.cs @@ -22,13 +22,14 @@ public MediaShapes(Work imageProfileManager) { public ILogger Logger { get; set; } [Shape] - public void ResizeMediaUrl(dynamic Shape, dynamic Display, TextWriter Output, ContentItem ContentItem, string Path, int Width, int Height, string Mode, string Alignment, string PadColor) { + public void ResizeMediaUrl(dynamic Shape, dynamic Display, TextWriter Output, ContentItem ContentItem, string Path, int Width, int Height, string Mode, string Alignment, string PadColor, string Scale= "upscaleOnly") { var state = new Dictionary { {"Width", Width.ToString(CultureInfo.InvariantCulture)}, {"Height", Height.ToString(CultureInfo.InvariantCulture)}, {"Mode", Mode}, {"Alignment", Alignment}, {"PadColor", PadColor}, + {"Scale", Scale}, }; var filter = new FilterRecord { @@ -42,7 +43,8 @@ public void ResizeMediaUrl(dynamic Shape, dynamic Display, TextWriter Output, Co + "_h_" + Convert.ToString(Height) + "_m_" + Convert.ToString(Mode) + "_a_" + Convert.ToString(Alignment) - + "_c_" + Convert.ToString(PadColor); + + "_c_" + Convert.ToString(PadColor) + + "_s_" + Convert.ToString(Scale); MediaUrl(Shape, Display, Output, profile, Path, ContentItem, filter); } From ba0daf3cb0cd4c7b14637966e00e04cc2ff4d338 Mon Sep 17 00:00:00 2001 From: Hermes Sbicego Date: Fri, 1 Sep 2023 10:23:36 +0200 Subject: [PATCH 04/56] Improve Orchard.Layouts UX (#8721) --- .../LayoutEditor/Directives/Toolbox.js | 2 + .../Assets/Less/LayoutEditor/Toolbox.less | 51 +- .../Orchard.Layouts/Scripts/LayoutEditor.js | 2 + .../Scripts/LayoutEditor.min.js | 2 +- .../Orchard.Layouts/Styles/LayoutEditor.css | 2237 +++++++++-------- .../Styles/LayoutEditor.min.css | 2 +- 6 files changed, 1270 insertions(+), 1026 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Assets/JavaScript/LayoutEditor/Directives/Toolbox.js b/src/Orchard.Web/Modules/Orchard.Layouts/Assets/JavaScript/LayoutEditor/Directives/Toolbox.js index 2bb2f7772b4..a7c8dcb93d5 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Assets/JavaScript/LayoutEditor/Directives/Toolbox.js +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Assets/JavaScript/LayoutEditor/Directives/Toolbox.js @@ -145,6 +145,8 @@ connectWith: _(parentClasses).map(function (e) { return "#" + editorId + " " + e + ":not(.layout-container-sealed) > .layout-element-wrapper > .layout-children"; }).join(", "), placeholder: placeholderClasses, "ui-floating": floating, + helper: "clone", // We clone the element and we append it to the body because the container overflow is set to auto (see: Assets\Less\LayoutEditor\Toolbox.less) and otherwise it could not be moved with drag&drop + appendTo: "body", create: function (e, ui) { e.target.isToolbox = true; // Will indicate to connected sortables that dropped items were sent from toolbox. }, diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Assets/Less/LayoutEditor/Toolbox.less b/src/Orchard.Web/Modules/Orchard.Layouts/Assets/Less/LayoutEditor/Toolbox.less index 931abb59e65..1b21a0b1fe2 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Assets/Less/LayoutEditor/Toolbox.less +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Assets/Less/LayoutEditor/Toolbox.less @@ -1,11 +1,54 @@ @import "Variables.less"; +body { + .layout-toolbox-item { + border: 1px solid @gray-border; + background-color: #fff; + padding: (@container-padding - 3) @container-padding; + cursor: default; + list-style-type: none; + + i { + display: inline-block; + width: 16px; + font: normal normal normal 14px/1 FontAwesome; + } + + + .layout-toolbox-item { + margin-top: @container-padding / 3; + } + } +} + .layout-editor { > .layout-toolbox-wrapper { - position: relative; margin-left: @container-padding; - width: 220px; + width: 218px; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; flex-shrink: 0; + /* forcing the toolbox height to be smaller than the viewport height + so it is always visible and scrollable*/ + max-height: calc(100vh - 80px); + overflow-x: clip; + overflow-y: auto; + /* forcing the toolbox to stay sticked at the the top of its container */ + position: -webkit-sticky; + position: sticky; + top: 0; + + &::-webkit-scrollbar { + width: 2px; + } + + &::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgb(0, 0, 0, .3); + border-radius: 1px; + } + + &::-webkit-scrollbar-thumb { + background-color: rgba(0,0,0,0.3); + } > .layout-toolbox { border: 1px solid @gray-border; @@ -33,7 +76,7 @@ display: block; margin-bottom: @container-padding / 3; text-decoration: none; - + &:before { display: inline-block; width: 10px; @@ -43,7 +86,7 @@ content: "\f0d7"; } } - + &.collapsed { .layout-toolbox-group-heading:before { content: "\f0da"; diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js index 15c4306994b..236d0b9d876 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js @@ -880,6 +880,8 @@ angular connectWith: _(parentClasses).map(function (e) { return "#" + editorId + " " + e + ":not(.layout-container-sealed) > .layout-element-wrapper > .layout-children"; }).join(", "), placeholder: placeholderClasses, "ui-floating": floating, + helper: "clone", + appendTo: "body", create: function (e, ui) { e.target.isToolbox = true; // Will indicate to connected sortables that dropped items were sent from toolbox. }, diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js index 23a722064d1..70a8c5e9d47 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js @@ -1 +1 @@ -angular.module("LayoutEditor",["ngSanitize","ngResource","ui.sortable"]);var LayoutEditor;!function(e){var t=function(){var e=this;this._clipboardData={},this._isDisabled=!1,this._wasInvoked=!1,this.setData=function(t,o){e._clipboardData[t]=o,e._wasInvoked=!0},this.getData=function(t){return e._wasInvoked=!0,e._clipboardData[t]},this.disable=function(){e._isDisabled=!0,e._wasInvoked=!1,e._clipboardData={}},this.isDisabled=function(){return e._isDisabled},this.wasInvoked=function(){return e._wasInvoked}};e.Clipboard=new t,angular.module("LayoutEditor").factory("clipboard",[function(){return{setData:e.Clipboard.setData,getData:e.Clipboard.getData,disable:e.Clipboard.disable,isDisabled:e.Clipboard.isDisabled,wasInvoked:e.Clipboard.wasInvoked}}])}(LayoutEditor||(LayoutEditor={})),angular.module("LayoutEditor").factory("scopeConfigurator",["$timeout","clipboard",function(e,t){return{configureForElement:function(e,o){o.find(".layout-panel").click(function(e){e.stopPropagation()}),o.parent().keydown(function(n){var l=!1,a=!1,r=e.element;if(!r.editor.isDragging){if(!t.isDisabled()){var i=r.editor.focusedElement;if(i&&n.ctrlKey)switch(n.which){case 67:i.copy(t);break;case 88:i.cut(t);break;case 86:i.paste(t)}}if(n.ctrlKey||n.shiftKey||n.altKey||46!=n.which?n.ctrlKey||n.shiftKey||n.altKey||32!=n.which&&27!=n.which||(o.find(".layout-panel-action-properties").first().click(),l=!0):(e["delete"](r),l=!0),r.hasEditor&&(n.ctrlKey||n.shiftKey||n.altKey||13!=n.which||(o.find(".layout-panel-action-edit").first().click(),l=!0)),r.children&&(n.ctrlKey||n.shiftKey||!n.altKey||40!=n.which||(r.children.length>0&&r.children[0].setIsFocused(),l=!0),"Column"==r.type)){var c=!n.ctrlKey;37==n.which?(n.altKey&&r.expandLeft(c),n.shiftKey&&r.contractRight(c),l=!0):39==n.which&&(n.altKey&&r.contractLeft(c),n.shiftKey&&r.expandRight(c),l=!0)}r.parent&&(n.altKey&&38==n.which&&(r.parent.setIsFocused(),l=!0),"Row"==r.parent.type?n.ctrlKey||n.shiftKey||n.altKey||37!=n.which?n.ctrlKey||n.shiftKey||n.altKey||39!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||37!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||39!=n.which||(r.moveDown(),l=!0):(r.moveUp(),a=!0,l=!0):(r.parent.moveFocusNextChild(r),l=!0):(r.parent.moveFocusPrevChild(r),l=!0):n.ctrlKey||n.shiftKey||n.altKey||38!=n.which?n.ctrlKey||n.shiftKey||n.altKey||40!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||38!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||40!=n.which||(r.moveDown(),l=!0):(r.moveUp(),a=!0,l=!0):(r.parent.moveFocusNextChild(r),l=!0):(r.parent.moveFocusPrevChild(r),l=!0)),l&&n.preventDefault(),n.stopPropagation(),e.$apply(),a&&window.setTimeout(function(){e.$apply(function(){r.editor.focusedElement.setIsFocused()})},100)}}),e.element.setIsFocusedEventHandlers.push(function(){o.parent().focus()}),e["delete"]=function(e){e["delete"]()},e.element.hasEditor&&(e.edit=function(){e.$root.editElement(e.element).then(function(t){e.$apply(function(){t.cancel||(e.element.data=t.element.data,e.element.applyElementEditorModel(t.elementEditorModel),e.element.setHtml&&e.element.setHtml(t.element.html))})})})},configureForContainer:function(t,o){var n=t.element;t.getShowChildrenPlaceholder=function(){return 0===t.element.children.length&&!t.element.getIsDropTarget()},t.sortableOptions={cursor:"move",delay:150,disabled:n.getIsSealed(),distance:5,start:function(e,o){t.$apply(function(){n.setIsDropTarget(!0),n.editor.isDragging=!0}),o.placeholder.height(o.item.height()-4),o.placeholder.css("min-height",0)},stop:function(e,o){t.$apply(function(){n.editor.isDragging=!1,n.setIsDropTarget(!1)})},over:function(t,l){l.sender&&l.sender[0].isToolbox&&(l.sender[0].dropTargetTimeout&&(e.cancel(l.sender[0].dropTargetTimeout),l.sender[0].dropTargetTimeout=null),e(function(){if("Row"==n.type){var e=n.editor.dropTargetElement;e&&"Row"==e.type&&e.rollbackAddColumn()}n.setIsDropTarget(!1)}),l.sender[0].dropTargetTimeout=e(function(){if("Row"==n.type){var e=l.item.sortable.model,t=Math.floor(12/(n.children.length+1));e.width=t,e.offset=0,n.beginAddColumn(t);var a=_.max(_(o.find("> .layout-children > .layout-column:not(.ui-sortable-placeholder)")).map(function(e){return $(e).height()}));for(i=1;i<=12;i++)l.placeholder.removeClass("col-xs-"+i);l.placeholder.addClass("col-xs-"+e.width),a>0?(l.placeholder.height(a),l.placeholder.css("min-height",0)):(l.placeholder.height(0),l.placeholder.css("min-height",""))}n.setIsDropTarget(!0)},150))},receive:function(o,l){l.sender&&l.sender[0].isToolbox&&t.$apply(function(){var o=l.item.sortable.model;o&&("Row"==n.type&&n.commitAddColumn(),o.setEditor(n.editor),o.setParent(n),o.hasEditor&&t.$root.editElement(o).then(function(t){t.cancel||(o.data=t.element.data,o.applyElementEditorModel(t.elementEditorModel),o.setHtml&&o.setHtml(t.element.html)),e(function(){t.cancel?o["delete"]():o.setIsFocused(),n.setIsDropTarget(!1)})})),e(function(){n.setIsDropTarget(!1),o&&o.setIsFocused()})})}},t.click=function(e,t){e.editor.isDragging||e.setIsFocused(),t.stopPropagation()},t.getClasses=function(e){var t=["layout-element"];return e.children&&(t.push("layout-container"),e.getIsSealed()&&t.push("layout-container-sealed")),t.push("layout-"+e.type.toLowerCase()),e.dropTargetClass&&t.push(e.dropTargetClass),"Row"==e.type&&(t.push("row"),e.canAddColumn()||t.push("layout-row-full")),"Column"==e.type&&(t.push("col-xs-"+e.width),t.push("col-xs-offset-"+e.offset)),"Content"==e.type&&t.push("layout-content-"+e.contentTypeClass),e.getIsActive()&&t.push("layout-element-active"),e.getIsFocused()&&t.push("layout-element-focused"),e.getIsSelected()&&t.push("layout-element-selected"),e.getIsDropTarget()&&t.push("layout-element-droptarget"),e.isTemplated&&t.push("layout-element-templated"),t}}}}]),angular.module("LayoutEditor").directive("orcLayoutEditor",["environment",function(environment){return{restrict:"E",scope:{},controller:["$scope","$element","$attrs","$compile","clipboard",function($scope,$element,$attrs,$compile,clipboard){if(!$attrs.model)throw new Error("The 'model' attribute must evaluate to a LayoutEditor.Editor object.");$scope.element=eval($attrs.model),$scope.click=function(e,t){e.editor.isDragging||e.setIsFocused(),t.stopPropagation()},$scope.getClasses=function(e){var t=["layout-element","layout-container","layout-canvas"];return e.getIsActive()&&t.push("layout-element-active"),e.getIsFocused()&&t.push("layout-element-focused"),e.getIsSelected()&&t.push("layout-element-selected"),e.getIsDropTarget()&&t.push("layout-element-droptarget"),e.isTemplated&&t.push("layout-element-templated"),t};var layoutDesignerHost=$(".layout-designer").data("layout-designer-host");$scope.$root.layoutDesignerHost=layoutDesignerHost,layoutDesignerHost.element.on("replacecanvas",function(e,t){var o=$scope.element,n={data:t.canvas.data,htmlId:t.canvas.htmlId,htmlClass:t.canvas.htmlClass,htmlStyle:t.canvas.htmlStyle,isTemplated:t.canvas.isTemplated,children:t.canvas.children};layoutDesignerHost.editor=window.layoutEditor=new LayoutEditor.Editor(o.config,n);var l="",a=$compile(l)($scope);$(".layout-editor-holder").html(a)}),$scope.$root.editElement=function(e){var t=$scope.$root.layoutDesignerHost;return t.editElement(e)},$scope.$root.addElement=function(e){var t=$scope.$root.layoutDesignerHost;return t.addElement(e)},$(document).on("cut copy paste",function(e){if(clipboard.wasInvoked())e.originalEvent.clipboardData.setData("text/plain",clipboard.getData("text/plain")),e.originalEvent.clipboardData.setData("text/json",clipboard.getData("text/json")),e.preventDefault();else{var t=$scope.element.focusedElement;t&&($scope.$apply(function(){switch(e.type){case"copy":t.copy(e.originalEvent.clipboardData);break;case"cut":t.cut(e.originalEvent.clipboardData);break;case"paste":t.paste(e.originalEvent.clipboardData)}}),window.setTimeout(function(){$scope.$apply(function(){$scope.element.focusedElement&&$scope.element.focusedElement.setIsFocused()})},100),e.preventDefault())}clipboard.disable()})}],templateUrl:environment.templateUrl("Editor"),replace:!0,link:function(e,t){t.find(".layout-toolbar-container").click(function(e){e.stopPropagation()}),$(window).click(function(t){e.$apply(function(){e.element.activeElement=null,e.element.focusedElement=null})})}}}]),angular.module("LayoutEditor").directive("orcLayoutCanvas",["scopeConfigurator","environment",function(e,t){return{restrict:"E",scope:{element:"="},controller:["$scope","$element","$attrs",function(t,o,n){e.configureForElement(t,o),e.configureForContainer(t,o),t.sortableOptions.axis="y"}],templateUrl:t.templateUrl("Canvas"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutChild",["$compile",function(e){return{restrict:"E",scope:{element:"="},link:function(t,o){var n="",l=e(n)(t);$(o).replaceWith(l)}}}]),angular.module("LayoutEditor").directive("orcLayoutColumn",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="y"}],templateUrl:o.templateUrl("Column"),replace:!0,link:function(e,t,o){t.find(".layout-column-resize-bar").draggable({axis:"x",helper:"clone",revert:!0,start:function(t,o){e.$apply(function(){e.element.editor.isResizing=!0})},drag:function(o,n){var l=t.parent(),a=l.width()/e.element.width,r=!o.ctrlKey;if($(o.target).hasClass("layout-column-resize-bar-left")){var i=n.offset.left-l.offset().left;-a>i&&e.element.canExpandLeft(r)?e.$apply(function(){e.element.expandLeft(r)}):i>a&&e.element.canContractLeft(r)&&e.$apply(function(){e.element.contractLeft(r)})}else if($(o.target).hasClass("layout-column-resize-bar-right")){var i=n.offset.left-l.width()-l.offset().left;i>a&&e.element.canExpandRight(r)?e.$apply(function(){e.element.expandRight(r)}):-a>i&&e.element.canContractRight(r)&&e.$apply(function(){e.element.contractRight(r)})}},stop:function(t,o){e.$apply(function(){e.element.editor.isResizing=!1})}})}}}]),angular.module("LayoutEditor").directive("orcLayoutContent",["$sce","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(o,n){t.configureForElement(o,n),o.element.setHtml=function(t){o.element.html=t,o.element.htmlUnsafe=e.trustAsHtml(t)},o.element.setHtml(o.element.html)}],templateUrl:o.templateUrl("Content"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutGrid",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="y"}],templateUrl:o.templateUrl("Grid"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutRow",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="x",e.sortableOptions["ui-floating"]=!0}],templateUrl:o.templateUrl("Row"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutPopup",[function(){return{restrict:"A",link:function(e,t,o){var n=$(t),l=n.closest(".layout-popup-trigger"),a=n.closest(".layout-element");l.click(function(){n.toggle(),n.is(":visible")&&(n.position({my:o.orcLayoutPopupMy||"left top",at:o.orcLayoutPopupAt||"left bottom+4px",of:l}),n.find("input").first().focus())}),n.click(function(e){e.stopPropagation()}),a.click(function(e){n.hide()}),n.keydown(function(e){e.ctrlKey||e.shiftKey||e.altKey||27!=e.which||n.hide(),e.stopPropagation()}),n.on("cut copy paste",function(e){e.stopPropagation()})}}}]),angular.module("LayoutEditor").directive("orcLayoutToolbox",["$compile","environment",function(e,t){return{restrict:"E",controller:["$scope","$element",function(e,t){e.resetElements=function(){e.gridElements=[LayoutEditor.Grid.from({toolboxIcon:"",toolboxLabel:"Grid",toolboxDescription:"Empty grid.",children:[]})],e.rowElements=[LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (1 column)",toolboxDescription:"Row with 1 column.",children:LayoutEditor.Column.times(1)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (2 columns)",toolboxDescription:"Row with 2 columns.",children:LayoutEditor.Column.times(2)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (3 columns)",toolboxDescription:"Row with 3 columns.",children:LayoutEditor.Column.times(3)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (4 columns)",toolboxDescription:"Row with 4 columns.",children:LayoutEditor.Column.times(4)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (6 columns)",toolboxDescription:"Row with 6 columns.",children:LayoutEditor.Column.times(6)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (12 columns)",toolboxDescription:"Row with 12 columns.",children:LayoutEditor.Column.times(12)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (empty)",toolboxDescription:"Empty row.",children:[]})],e.columnElements=[LayoutEditor.Column.from({toolboxIcon:"",toolboxLabel:"Column",toolboxDescription:"Empty column.",width:1,offset:0,children:[]})],e.canvasElements=[LayoutEditor.Canvas.from({toolboxIcon:"",toolboxLabel:"Canvas",toolboxDescription:"Empty canvas.",children:[]})],e.contentElementCategories=_(e.element.config.categories).map(function(e){return{name:e.name,elements:_(e.contentTypes).map(function(e){var t=e.type,o=LayoutEditor.factories[t]||LayoutEditor.factories.Content,n={isTemplated:!1,contentType:e.id,contentTypeLabel:e.label,contentTypeClass:e.typeClass,data:null,hasEditor:e.hasEditor,html:e.html},l=o(n);return l.toolboxIcon=e.icon||"",l.toolboxLabel=e.label,l.toolboxDescription=e.description,l})}})},e.resetElements(),e.getSortableOptions=function(o){var n,l,a=t.closest(".layout-editor").attr("id"),r=!1;switch(o){case"Grid":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-container layout-grid ui-sortable-placeholder";break;case"Row":n=[".layout-grid"],l="layout-element layout-container layout-row row ui-sortable-placeholder";break;case"Column":n=[".layout-row:not(.layout-row-full)"],l="layout-element layout-container layout-column ui-sortable-placeholder",r=!0;break;case"Content":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-content ui-sortable-placeholder";break;case"Canvas":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-container layout-grid ui-sortable-placeholder"}return{cursor:"move",connectWith:_(n).map(function(e){return"#"+a+" "+e+":not(.layout-container-sealed) > .layout-element-wrapper > .layout-children"}).join(", "),placeholder:l,"ui-floating":r,create:function(e,t){e.target.isToolbox=!0},start:function(t,o){e.$apply(function(){e.element.isDragging=!0})},stop:function(t,o){e.$apply(function(){e.element.isDragging=!1,e.resetElements()})},over:function(t,o){e.$apply(function(){e.element.canvas.setIsDropTarget(!1)})}}};var o="layoutToolboxCategory_Layout_IsCollapsed";e.layoutIsCollapsed="true"===$.cookie(o),e.toggleLayoutIsCollapsed=function(t){e.layoutIsCollapsed=!e.layoutIsCollapsed,$.cookie(o,e.layoutIsCollapsed,{expires:365}),t.preventDefault(),t.stopPropagation()}}],templateUrl:t.templateUrl("Toolbox"),replace:!0,link:function(e,t){var o=t.find(".layout-toolbox");$(window).on("resize scroll",function(e){var n=t.parent().find(".layout-canvas"),l=!!n&&n.height()>o.height(),a=$(window).scrollTop();l&&a>t.offset().top+t.height()-o.height()?(o.addClass("sticky-bottom"),o.removeClass("sticky-top")):l&&a>t.offset().top?(o.addClass("sticky-top"),o.removeClass("sticky-bottom")):(o.removeClass("sticky-top"),o.removeClass("sticky-bottom"))})}}}]),angular.module("LayoutEditor").directive("orcLayoutToolboxGroup",["$compile","environment",function(e,t){return{restrict:"E",scope:{category:"="},controller:["$scope","$element",function(e,t){var o="layoutToolboxCategory_"+e.category.name+"_IsCollapsed";e.isCollapsed="true"===$.cookie(o),e.toggleIsCollapsed=function(t){e.isCollapsed=!e.isCollapsed,$.cookie(o,e.isCollapsed,{expires:365}),t.preventDefault(),t.stopPropagation()}}],templateUrl:t.templateUrl("ToolboxGroup"),replace:!0}}]); \ No newline at end of file +var LayoutEditor;angular.module("LayoutEditor",["ngSanitize","ngResource","ui.sortable"]),function(e){e.Clipboard=new function(){var e=this;this._clipboardData={},this._isDisabled=!1,this._wasInvoked=!1,this.setData=function(t,o){e._clipboardData[t]=o,e._wasInvoked=!0},this.getData=function(t){return e._wasInvoked=!0,e._clipboardData[t]},this.disable=function(){e._isDisabled=!0,e._wasInvoked=!1,e._clipboardData={}},this.isDisabled=function(){return e._isDisabled},this.wasInvoked=function(){return e._wasInvoked}},angular.module("LayoutEditor").factory("clipboard",[function(){return{setData:e.Clipboard.setData,getData:e.Clipboard.getData,disable:e.Clipboard.disable,isDisabled:e.Clipboard.isDisabled,wasInvoked:e.Clipboard.wasInvoked}}])}(LayoutEditor||(LayoutEditor={})),angular.module("LayoutEditor").factory("scopeConfigurator",["$timeout","clipboard",function(e,t){return{configureForElement:function(e,o){o.find(".layout-panel").click((function(e){e.stopPropagation()})),o.parent().keydown((function(n){var l=!1,a=!1,i=e.element;if(!i.editor.isDragging){if(!t.isDisabled()){var r=i.editor.focusedElement;if(r&&n.ctrlKey)switch(n.which){case 67:r.copy(t);break;case 88:r.cut(t);break;case 86:r.paste(t)}}if(n.ctrlKey||n.shiftKey||n.altKey||46!=n.which?n.ctrlKey||n.shiftKey||n.altKey||32!=n.which&&27!=n.which||(o.find(".layout-panel-action-properties").first().click(),l=!0):(e.delete(i),l=!0),i.hasEditor&&(n.ctrlKey||n.shiftKey||n.altKey||13!=n.which||(o.find(".layout-panel-action-edit").first().click(),l=!0)),i.children&&(n.ctrlKey||n.shiftKey||!n.altKey||40!=n.which||(i.children.length>0&&i.children[0].setIsFocused(),l=!0),"Column"==i.type)){var c=!n.ctrlKey;37==n.which?(n.altKey&&i.expandLeft(c),n.shiftKey&&i.contractRight(c),l=!0):39==n.which&&(n.altKey&&i.contractLeft(c),n.shiftKey&&i.expandRight(c),l=!0)}i.parent&&(n.altKey&&38==n.which&&(i.parent.setIsFocused(),l=!0),"Row"==i.parent.type?n.ctrlKey||n.shiftKey||n.altKey||37!=n.which?n.ctrlKey||n.shiftKey||n.altKey||39!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||37!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||39!=n.which||(i.moveDown(),l=!0):(i.moveUp(),a=!0,l=!0):(i.parent.moveFocusNextChild(i),l=!0):(i.parent.moveFocusPrevChild(i),l=!0):n.ctrlKey||n.shiftKey||n.altKey||38!=n.which?n.ctrlKey||n.shiftKey||n.altKey||40!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||38!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||40!=n.which||(i.moveDown(),l=!0):(i.moveUp(),a=!0,l=!0):(i.parent.moveFocusNextChild(i),l=!0):(i.parent.moveFocusPrevChild(i),l=!0)),l&&n.preventDefault(),n.stopPropagation(),e.$apply(),a&&window.setTimeout((function(){e.$apply((function(){i.editor.focusedElement.setIsFocused()}))}),100)}})),e.element.setIsFocusedEventHandlers.push((function(){o.parent().focus()})),e.delete=function(e){e.delete()},e.element.hasEditor&&(e.edit=function(){e.$root.editElement(e.element).then((function(t){e.$apply((function(){t.cancel||(e.element.data=t.element.data,e.element.applyElementEditorModel(t.elementEditorModel),e.element.setHtml&&e.element.setHtml(t.element.html))}))}))})},configureForContainer:function(t,o){var n=t.element;t.getShowChildrenPlaceholder=function(){return 0===t.element.children.length&&!t.element.getIsDropTarget()},t.sortableOptions={cursor:"move",delay:150,disabled:n.getIsSealed(),distance:5,start:function(e,o){t.$apply((function(){n.setIsDropTarget(!0),n.editor.isDragging=!0})),o.placeholder.height(o.item.height()-4),o.placeholder.css("min-height",0)},stop:function(e,o){t.$apply((function(){n.editor.isDragging=!1,n.setIsDropTarget(!1)}))},over:function(t,l){l.sender&&l.sender[0].isToolbox&&(l.sender[0].dropTargetTimeout&&(e.cancel(l.sender[0].dropTargetTimeout),l.sender[0].dropTargetTimeout=null),e((function(){if("Row"==n.type){var e=n.editor.dropTargetElement;e&&"Row"==e.type&&e.rollbackAddColumn()}n.setIsDropTarget(!1)})),l.sender[0].dropTargetTimeout=e((function(){if("Row"==n.type){var e=l.item.sortable.model,t=Math.floor(12/(n.children.length+1));e.width=t,e.offset=0,n.beginAddColumn(t);var a=_.max(_(o.find("> .layout-children > .layout-column:not(.ui-sortable-placeholder)")).map((function(e){return $(e).height()})));for(i=1;i<=12;i++)l.placeholder.removeClass("col-xs-"+i);l.placeholder.addClass("col-xs-"+e.width),a>0?(l.placeholder.height(a),l.placeholder.css("min-height",0)):(l.placeholder.height(0),l.placeholder.css("min-height",""))}n.setIsDropTarget(!0)}),150))},receive:function(o,l){l.sender&&l.sender[0].isToolbox&&t.$apply((function(){var o=l.item.sortable.model;o&&("Row"==n.type&&n.commitAddColumn(),o.setEditor(n.editor),o.setParent(n),o.hasEditor&&t.$root.editElement(o).then((function(t){t.cancel||(o.data=t.element.data,o.applyElementEditorModel(t.elementEditorModel),o.setHtml&&o.setHtml(t.element.html)),e((function(){t.cancel?o.delete():o.setIsFocused(),n.setIsDropTarget(!1)}))}))),e((function(){n.setIsDropTarget(!1),o&&o.setIsFocused()}))}))}},t.click=function(e,t){e.editor.isDragging||e.setIsFocused(),t.stopPropagation()},t.getClasses=function(e){var t=["layout-element"];return e.children&&(t.push("layout-container"),e.getIsSealed()&&t.push("layout-container-sealed")),t.push("layout-"+e.type.toLowerCase()),e.dropTargetClass&&t.push(e.dropTargetClass),"Row"==e.type&&(t.push("row"),e.canAddColumn()||t.push("layout-row-full")),"Column"==e.type&&(t.push("col-xs-"+e.width),t.push("col-xs-offset-"+e.offset)),"Content"==e.type&&t.push("layout-content-"+e.contentTypeClass),e.getIsActive()&&t.push("layout-element-active"),e.getIsFocused()&&t.push("layout-element-focused"),e.getIsSelected()&&t.push("layout-element-selected"),e.getIsDropTarget()&&t.push("layout-element-droptarget"),e.isTemplated&&t.push("layout-element-templated"),t}}}}]),angular.module("LayoutEditor").directive("orcLayoutEditor",["environment",function(environment){return{restrict:"E",scope:{},controller:["$scope","$element","$attrs","$compile","clipboard",function($scope,$element,$attrs,$compile,clipboard){if(!$attrs.model)throw new Error("The 'model' attribute must evaluate to a LayoutEditor.Editor object.");$scope.element=eval($attrs.model),$scope.click=function(e,t){e.editor.isDragging||e.setIsFocused(),t.stopPropagation()},$scope.getClasses=function(e){var t=["layout-element","layout-container","layout-canvas"];return e.getIsActive()&&t.push("layout-element-active"),e.getIsFocused()&&t.push("layout-element-focused"),e.getIsSelected()&&t.push("layout-element-selected"),e.getIsDropTarget()&&t.push("layout-element-droptarget"),e.isTemplated&&t.push("layout-element-templated"),t};var layoutDesignerHost=$(".layout-designer").data("layout-designer-host");$scope.$root.layoutDesignerHost=layoutDesignerHost,layoutDesignerHost.element.on("replacecanvas",(function(e,t){var o=$scope.element,n={data:t.canvas.data,htmlId:t.canvas.htmlId,htmlClass:t.canvas.htmlClass,htmlStyle:t.canvas.htmlStyle,isTemplated:t.canvas.isTemplated,children:t.canvas.children};layoutDesignerHost.editor=window.layoutEditor=new LayoutEditor.Editor(o.config,n);var l=$compile("")($scope);$(".layout-editor-holder").html(l)})),$scope.$root.editElement=function(e){return $scope.$root.layoutDesignerHost.editElement(e)},$scope.$root.addElement=function(e){return $scope.$root.layoutDesignerHost.addElement(e)},$(document).on("cut copy paste",(function(e){if(clipboard.wasInvoked())e.originalEvent.clipboardData.setData("text/plain",clipboard.getData("text/plain")),e.originalEvent.clipboardData.setData("text/json",clipboard.getData("text/json")),e.preventDefault();else{var t=$scope.element.focusedElement;t&&($scope.$apply((function(){switch(e.type){case"copy":t.copy(e.originalEvent.clipboardData);break;case"cut":t.cut(e.originalEvent.clipboardData);break;case"paste":t.paste(e.originalEvent.clipboardData)}})),window.setTimeout((function(){$scope.$apply((function(){$scope.element.focusedElement&&$scope.element.focusedElement.setIsFocused()}))}),100),e.preventDefault())}clipboard.disable()}))}],templateUrl:environment.templateUrl("Editor"),replace:!0,link:function(e,t){t.find(".layout-toolbar-container").click((function(e){e.stopPropagation()})),$(window).click((function(t){e.$apply((function(){e.element.activeElement=null,e.element.focusedElement=null}))}))}}}]),angular.module("LayoutEditor").directive("orcLayoutCanvas",["scopeConfigurator","environment",function(e,t){return{restrict:"E",scope:{element:"="},controller:["$scope","$element","$attrs",function(t,o,n){e.configureForElement(t,o),e.configureForContainer(t,o),t.sortableOptions.axis="y"}],templateUrl:t.templateUrl("Canvas"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutChild",["$compile",function(e){return{restrict:"E",scope:{element:"="},link:function(t,o){var n="",l=e(n)(t);$(o).replaceWith(l)}}}]),angular.module("LayoutEditor").directive("orcLayoutColumn",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="y"}],templateUrl:o.templateUrl("Column"),replace:!0,link:function(e,t,o){t.find(".layout-column-resize-bar").draggable({axis:"x",helper:"clone",revert:!0,start:function(t,o){e.$apply((function(){e.element.editor.isResizing=!0}))},drag:function(o,n){var l=t.parent(),a=l.width()/e.element.width,i=!o.ctrlKey;if($(o.target).hasClass("layout-column-resize-bar-left"))(r=n.offset.left-l.offset().left)<-a&&e.element.canExpandLeft(i)?e.$apply((function(){e.element.expandLeft(i)})):r>a&&e.element.canContractLeft(i)&&e.$apply((function(){e.element.contractLeft(i)}));else if($(o.target).hasClass("layout-column-resize-bar-right")){var r;(r=n.offset.left-l.width()-l.offset().left)>a&&e.element.canExpandRight(i)?e.$apply((function(){e.element.expandRight(i)})):r<-a&&e.element.canContractRight(i)&&e.$apply((function(){e.element.contractRight(i)}))}},stop:function(t,o){e.$apply((function(){e.element.editor.isResizing=!1}))}})}}}]),angular.module("LayoutEditor").directive("orcLayoutContent",["$sce","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(o,n){t.configureForElement(o,n),o.element.setHtml=function(t){o.element.html=t,o.element.htmlUnsafe=e.trustAsHtml(t)},o.element.setHtml(o.element.html)}],templateUrl:o.templateUrl("Content"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutGrid",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="y"}],templateUrl:o.templateUrl("Grid"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutRow",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="x",e.sortableOptions["ui-floating"]=!0}],templateUrl:o.templateUrl("Row"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutPopup",[function(){return{restrict:"A",link:function(e,t,o){var n=$(t),l=n.closest(".layout-popup-trigger"),a=n.closest(".layout-element");l.click((function(){n.toggle(),n.is(":visible")&&(n.position({my:o.orcLayoutPopupMy||"left top",at:o.orcLayoutPopupAt||"left bottom+4px",of:l}),n.find("input").first().focus())})),n.click((function(e){e.stopPropagation()})),a.click((function(e){n.hide()})),n.keydown((function(e){e.ctrlKey||e.shiftKey||e.altKey||27!=e.which||n.hide(),e.stopPropagation()})),n.on("cut copy paste",(function(e){e.stopPropagation()}))}}}]),angular.module("LayoutEditor").directive("orcLayoutToolbox",["$compile","environment",function(e,t){return{restrict:"E",controller:["$scope","$element",function(e,t){e.resetElements=function(){e.gridElements=[LayoutEditor.Grid.from({toolboxIcon:"",toolboxLabel:"Grid",toolboxDescription:"Empty grid.",children:[]})],e.rowElements=[LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (1 column)",toolboxDescription:"Row with 1 column.",children:LayoutEditor.Column.times(1)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (2 columns)",toolboxDescription:"Row with 2 columns.",children:LayoutEditor.Column.times(2)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (3 columns)",toolboxDescription:"Row with 3 columns.",children:LayoutEditor.Column.times(3)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (4 columns)",toolboxDescription:"Row with 4 columns.",children:LayoutEditor.Column.times(4)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (6 columns)",toolboxDescription:"Row with 6 columns.",children:LayoutEditor.Column.times(6)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (12 columns)",toolboxDescription:"Row with 12 columns.",children:LayoutEditor.Column.times(12)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (empty)",toolboxDescription:"Empty row.",children:[]})],e.columnElements=[LayoutEditor.Column.from({toolboxIcon:"",toolboxLabel:"Column",toolboxDescription:"Empty column.",width:1,offset:0,children:[]})],e.canvasElements=[LayoutEditor.Canvas.from({toolboxIcon:"",toolboxLabel:"Canvas",toolboxDescription:"Empty canvas.",children:[]})],e.contentElementCategories=_(e.element.config.categories).map((function(e){return{name:e.name,elements:_(e.contentTypes).map((function(e){var t=e.type,o=(LayoutEditor.factories[t]||LayoutEditor.factories.Content)({isTemplated:!1,contentType:e.id,contentTypeLabel:e.label,contentTypeClass:e.typeClass,data:null,hasEditor:e.hasEditor,html:e.html});return o.toolboxIcon=e.icon||"",o.toolboxLabel=e.label,o.toolboxDescription=e.description,o}))}}))},e.resetElements(),e.getSortableOptions=function(o){var n,l,a=t.closest(".layout-editor").attr("id"),i=!1;switch(o){case"Grid":case"Canvas":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-container layout-grid ui-sortable-placeholder";break;case"Row":n=[".layout-grid"],l="layout-element layout-container layout-row row ui-sortable-placeholder";break;case"Column":n=[".layout-row:not(.layout-row-full)"],l="layout-element layout-container layout-column ui-sortable-placeholder",i=!0;break;case"Content":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-content ui-sortable-placeholder"}return{cursor:"move",connectWith:_(n).map((function(e){return"#"+a+" "+e+":not(.layout-container-sealed) > .layout-element-wrapper > .layout-children"})).join(", "),placeholder:l,"ui-floating":i,helper:"clone",appendTo:"body",create:function(e,t){e.target.isToolbox=!0},start:function(t,o){e.$apply((function(){e.element.isDragging=!0}))},stop:function(t,o){e.$apply((function(){e.element.isDragging=!1,e.resetElements()}))},over:function(t,o){e.$apply((function(){e.element.canvas.setIsDropTarget(!1)}))}}};var o="layoutToolboxCategory_Layout_IsCollapsed";e.layoutIsCollapsed="true"===$.cookie(o),e.toggleLayoutIsCollapsed=function(t){e.layoutIsCollapsed=!e.layoutIsCollapsed,$.cookie(o,e.layoutIsCollapsed,{expires:365}),t.preventDefault(),t.stopPropagation()}}],templateUrl:t.templateUrl("Toolbox"),replace:!0,link:function(e,t){var o=t.find(".layout-toolbox");$(window).on("resize scroll",(function(e){var n=t.parent().find(".layout-canvas"),l=!!n&&n.height()>o.height(),a=$(window).scrollTop();l&&a>t.offset().top+t.height()-o.height()?(o.addClass("sticky-bottom"),o.removeClass("sticky-top")):l&&a>t.offset().top?(o.addClass("sticky-top"),o.removeClass("sticky-bottom")):(o.removeClass("sticky-top"),o.removeClass("sticky-bottom"))}))}}}]),angular.module("LayoutEditor").directive("orcLayoutToolboxGroup",["$compile","environment",function(e,t){return{restrict:"E",scope:{category:"="},controller:["$scope","$element",function(e,t){var o="layoutToolboxCategory_"+e.category.name+"_IsCollapsed";e.isCollapsed="true"===$.cookie(o),e.toggleIsCollapsed=function(t){e.isCollapsed=!e.isCollapsed,$.cookie(o,e.isCollapsed,{expires:365}),t.preventDefault(),t.stopPropagation()}}],templateUrl:t.templateUrl("ToolboxGroup"),replace:!0}}]); \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css index 6c1d0bf4995..67fb46d893a 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css @@ -3,310 +3,386 @@ ** Any changes made directly to this file will be overwritten next time its asset group is processed by Gulp. */ -.layout-editor-toolbar { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - position: relative; - top: 10px; -} -.layout-editor-toolbar .layout-editor-toolbar-group { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; +body .layout-toolbox-item { + border: 1px solid #e4e5e6; + background-color: #fff; + padding: 9px 12px; + cursor: default; + list-style-type: none; } -.layout-editor-toolbar .layout-editor-toolbar-group > li + li { - margin-left: 12px; + + body .layout-toolbox-item i { + display: inline-block; + width: 16px; + font: normal normal normal 14px/1 FontAwesome; + } + + body .layout-toolbox-item + .layout-toolbox-item { + margin-top: 4px; + } + +.layout-editor-toolbar { + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + position: relative; + top: 10px; } + + .layout-editor-toolbar .layout-editor-toolbar-group { + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + } + + .layout-editor-toolbar .layout-editor-toolbar-group > li + li { + margin-left: 12px; + } + .layout-editor { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - margin-top: 1em; - font-size: 14px; - -webkit-align-items: stretch; - -ms-flex-align: stretch; - align-items: stretch; -} -.layout-editor > .layout-canvas-wrapper { - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; - background-color: #f3f4f5; - border: 1px solid #e4e5e6; -} -.layout-editor > .layout-canvas-wrapper > .layout-toolbar-container { - display: none; - margin: 12px 12px 0; - min-height: 71px; -} -.layout-editor > .layout-canvas-wrapper > .layout-toolbar-container > .mce-panel { - width: 100% !important; -} -.layout-editor > .layout-canvas-wrapper .layout-content > .layout-element-wrapper .layout-content-markup > .layout-placeholder { - border: 1px dashed #ccc; - padding: 0.2em 0.4em; - background: #e8e8e8; -} -.layout-editor .layout-snippet { - background: #e8e8e8; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + margin-top: 1em; + font-size: 14px; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; } + + .layout-editor > .layout-canvas-wrapper { + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + background-color: #f3f4f5; + border: 1px solid #e4e5e6; + } + + .layout-editor > .layout-canvas-wrapper > .layout-toolbar-container { + display: none; + margin: 12px 12px 0; + min-height: 71px; + } + + .layout-editor > .layout-canvas-wrapper > .layout-toolbar-container > .mce-panel { + width: 100% !important; + } + + .layout-editor > .layout-canvas-wrapper .layout-content > .layout-element-wrapper .layout-content-markup > .layout-placeholder { + border: 1px dashed #ccc; + padding: 0.2em 0.4em; + background: #e8e8e8; + } + + .layout-editor .layout-snippet { + background: #e8e8e8; + } + .layout-editor-help-dialog { - display: none; -} -.layout-editor-help-dialog .help-row:before, -.layout-editor-help-dialog .help-row:after { - content: " "; - display: table; -} -.layout-editor-help-dialog .help-row:after { - clear: both; -} -.layout-editor-help-dialog .help-row > .help-column-full, -.layout-editor-help-dialog .help-row > .help-column-half { - margin: 0.5em 0; -} -.layout-editor-help-dialog .help-row > .help-column-half { - box-sizing: border-box; - float: left; - width: 50%; -} -.layout-editor-help-dialog .help-row > .help-column-half:nth-child(2n) { - padding-right: 10px; - clear: left; -} -.layout-editor-help-dialog .help-row + .help-row { - margin-top: 1em; -} -.layout-editor-help-dialog code { - border-radius: 4px; - background-color: #f3f4f5; - padding: 2px 4px; - font-family: monospace; -} -.layout-editor-help-dialog p { - margin-bottom: 0.5em; - line-height: 1.6em; -} -.layout-editor-help-dialog table > tbody > tr > td:first-child { - padding-right: 10px; + display: none; } + .layout-editor-help-dialog .help-row:before, + .layout-editor-help-dialog .help-row:after { + content: " "; + display: table; + } + + .layout-editor-help-dialog .help-row:after { + clear: both; + } + + .layout-editor-help-dialog .help-row > .help-column-full, + .layout-editor-help-dialog .help-row > .help-column-half { + margin: 0.5em 0; + } + + .layout-editor-help-dialog .help-row > .help-column-half { + box-sizing: border-box; + float: left; + width: 50%; + } + + .layout-editor-help-dialog .help-row > .help-column-half:nth-child(2n) { + padding-right: 10px; + clear: left; + } + + .layout-editor-help-dialog .help-row + .help-row { + margin-top: 1em; + } + + .layout-editor-help-dialog code { + border-radius: 4px; + background-color: #f3f4f5; + padding: 2px 4px; + font-family: monospace; + } + + .layout-editor-help-dialog p { + margin-bottom: 0.5em; + line-height: 1.6em; + } + + .layout-editor-help-dialog table > tbody > tr > td:first-child { + padding-right: 10px; + } + .layout-editor .layout-element { - position: relative; - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - padding: 0; -} -.layout-editor .layout-element:not(.layout-column) { - margin-left: 0; -} -.layout-editor .layout-element > .layout-element-wrapper > .layout-panel { - display: none; - position: absolute; - margin: 0; - z-index: 20; - height: 25px; - padding: 0 6px; - list-style: none; - white-space: nowrap; - line-height: 25px; - vertical-align: middle; -} -.layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-item { - display: inline-block; - height: 25px; - padding: 1px 6px 0; -} -.layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-label { - font-size: 13px; -} -.layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-action { - display: none; - width: 28px; - cursor: pointer; - text-align: center; -} -.layout-editor .layout-element > .layout-element-wrapper > .layout-panel-main { - top: -27px; - left: -2px; + position: relative; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + padding: 0; } + + .layout-editor .layout-element:not(.layout-column) { + margin-left: 0; + } + + .layout-editor .layout-element > .layout-element-wrapper > .layout-panel { + display: none; + position: absolute; + margin: 0; + z-index: 20; + height: 25px; + padding: 0 6px; + list-style: none; + white-space: nowrap; + line-height: 25px; + vertical-align: middle; + } + + .layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-item { + display: inline-block; + height: 25px; + padding: 1px 6px 0; + } + + .layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-label { + font-size: 13px; + } + + .layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-action { + display: none; + width: 28px; + cursor: pointer; + text-align: center; + } + + .layout-editor .layout-element > .layout-element-wrapper > .layout-panel-main { + top: -27px; + left: -2px; + } + .layout-editor li.layout-element { - list-style: none; + list-style: none; } + .layout-editor:not(.layout-editor-dragging) .layout-element-active, .layout-editor:not(.layout-editor-dragging) .layout-element-focused { - border-width: 2px; - border-style: solid; -} -.layout-editor:not(.layout-editor-dragging) .layout-element-active > .layout-element-wrapper, -.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper { - margin: -2px; + border-width: 2px; + border-style: solid; } + + .layout-editor:not(.layout-editor-dragging) .layout-element-active > .layout-element-wrapper, + .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper { + margin: -2px; + } + .layout-editor:not(.layout-editor-dragging) .layout-element-active { - border-color: rgba(104, 104, 104, 0.1); -} -.layout-editor:not(.layout-editor-dragging) .layout-element-active > .layout-element-wrapper > .layout-panel-main { - display: block; - z-index: 30; - background-color: rgba(104, 104, 104, 0.1); + border-color: rgba(104, 104, 104, 0.1); } + + .layout-editor:not(.layout-editor-dragging) .layout-element-active > .layout-element-wrapper > .layout-panel-main { + display: block; + z-index: 30; + background-color: rgba(104, 104, 104, 0.1); + } + .layout-editor:not(.layout-editor-dragging) .layout-element-focused { - border-color: #648721; -} -.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel { - display: block; - background-color: #648721; - color: #fefefe; -} -.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action { - display: inline-block; -} -.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action:hover { - background-color: #82b02b; -} -.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.disabled { - cursor: default; - color: rgba(254, 254, 254, 0.4); -} -.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.disabled:hover { - background-color: #648721; -} -.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.active { - color: #deff42; - background-color: #739b26; -} -.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.active:hover { - background-color: #82b02b; + border-color: #648721; } + + .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel { + display: block; + background-color: #648721; + color: #fefefe; + } + + .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action { + display: inline-block; + } + + .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action:hover { + background-color: #82b02b; + } + + .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.disabled { + cursor: default; + color: rgba(254, 254, 254, 0.4); + } + + .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.disabled:hover { + background-color: #648721; + } + + .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.active { + color: #deff42; + background-color: #739b26; + } + + .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.active:hover { + background-color: #82b02b; + } + .layout-editor:not(.layout-editor-dragging) .layout-element-selected { - background-color: rgba(100, 135, 33, 0.08); + background-color: rgba(100, 135, 33, 0.08); } + .layout-editor .ui-sortable-placeholder { - display: none; + display: none; } + .layout-editor .layout-element-droptarget { - box-shadow: inset 0 0 12px 6px rgba(100, 135, 33, 0.5); -} -.layout-editor .layout-element-droptarget .ui-sortable-placeholder { - display: block; - visibility: visible !important; - min-height: 78px; - border: 2px dashed #648721 !important; - background-color: rgba(100, 135, 33, 0.16); + box-shadow: inset 0 0 12px 6px rgba(100, 135, 33, 0.5); } + + .layout-editor .layout-element-droptarget .ui-sortable-placeholder { + display: block; + visibility: visible !important; + min-height: 78px; + border: 2px dashed #648721 !important; + background-color: rgba(100, 135, 33, 0.16); + } + .layout-editor .media-thumbnail img { - max-width: 100%; - max-height: 100%; + max-width: 100%; + max-height: 100%; } .layout-editor .layout-container > .layout-element-wrapper > .layout-container-children-placeholder { - display: none; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - margin: 11px; - min-height: 80px; - border: 1px dashed rgba(124, 124, 124, 0.4); - border-radius: 4px; - padding: 12px; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - font-size: 13px; - font-style: italic; - opacity: 0.6; - text-align: center; + display: none; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin: 11px; + min-height: 80px; + border: 1px dashed rgba(124, 124, 124, 0.4); + border-radius: 4px; + padding: 12px; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + font-size: 13px; + font-style: italic; + opacity: 0.6; + text-align: center; } + .layout-editor .layout-container > .layout-element-wrapper > .layout-children { - padding: 12px; -} -.layout-editor .layout-container > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-container) + .layout-element:not(.layout-container) { - margin-top: 12px; -} -.layout-editor .layout-container > .layout-element-wrapper > .layout-children > .ui-sortable-helper:first-child + .layout-element:not(.layout-container) { - margin-top: 0; + padding: 12px; } + + .layout-editor .layout-container > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-container) + .layout-element:not(.layout-container) { + margin-top: 12px; + } + + .layout-editor .layout-container > .layout-element-wrapper > .layout-children > .ui-sortable-helper:first-child + .layout-element:not(.layout-container) { + margin-top: 0; + } + .layout-editor .layout-container > .layout-element-wrapper.layout-container-empty > .layout-container-children-placeholder { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } + .layout-editor .layout-container > .layout-element-wrapper.layout-container-empty > .layout-children { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; } + .layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) { - border: 1px dashed rgba(124, 124, 124, 0.6); -} -.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) > .layout-element-wrapper { - margin: -1px; + border: 1px dashed rgba(124, 124, 124, 0.6); } + + .layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) > .layout-element-wrapper { + margin: -1px; + } + .layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-container + .layout-container:not(.layout-element-active) { - border-top: 0; -} -.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-container + .layout-container:not(.layout-element-active) > .layout-element-wrapper { - margin-top: 0; + border-top: 0; } + .layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-container + .layout-container:not(.layout-element-active) > .layout-element-wrapper { + margin-top: 0; + } + .layout-editor .layout-canvas #dummy { - display: none; + display: none; } .layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) { - border-top: 1px dashed rgba(124, 124, 124, 0.6) !important; -} -.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) > .layout-element-wrapper { - margin-top: -1px !important; + border-top: 1px dashed rgba(124, 124, 124, 0.6) !important; } + + .layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) > .layout-element-wrapper { + margin-top: -1px !important; + } + .layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element + .layout-element:not(.layout-element-active) { - border-left: 0 !important; -} -.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element + .layout-element:not(.layout-element-active) > .layout-element-wrapper { - margin-left: 0 !important; + border-left: 0 !important; } + .layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element + .layout-element:not(.layout-element-active) > .layout-element-wrapper { + margin-left: 0 !important; + } + .layout-editor .layout-column > .layout-element-wrapper > .layout-column-resize-bar { - display: none; - position: absolute; - z-index: 30; - top: 0; - width: 16px; - height: 100%; - cursor: col-resize; + display: none; + position: absolute; + z-index: 30; + top: 0; + width: 16px; + height: 100%; + cursor: col-resize; } + .layout-editor .layout-column > .layout-element-wrapper > .layout-column-resize-bar-left { - left: -6px; + left: -6px; } + .layout-editor .layout-column > .layout-element-wrapper > .layout-column-resize-bar-right { - right: -6px; + right: -6px; } + .layout-editor .layout-column.layout-element-focused > .layout-element-wrapper > .layout-column-resize-bar { - display: block; + display: block; } .layout-editor .layout-content, .layout-editor .layout-html { - min-height: 1em; + min-height: 1em; } -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup { - padding: 2px; - overflow-x: hidden; - line-height: normal; - /* this color is just a suggestion and can be changed based on implementation feedback */ - /* this also has bidi implications */ - /* this also has bidi implications */ - /* LTR-specific: use 'margin-right' for rtl elements */ - /* LTR-specific: use 'padding-right' for rtl elements */ - /*table[rules=none i], table[rules=groups i], table[rules=rows i], + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup { + padding: 2px; + overflow-x: hidden; + line-height: normal; + /* this color is just a suggestion and can be changed based on implementation feedback */ + /* this also has bidi implications */ + /* this also has bidi implications */ + /* LTR-specific: use 'margin-right' for rtl elements */ + /* LTR-specific: use 'padding-right' for rtl elements */ + /*table[rules=none i], table[rules=groups i], table[rules=rows i], table[rules=cols i], table[rules=all i], table[frame=void i], table[frame=above i], table[frame=below i], table[frame=hsides i], table[frame=lhs i], table[frame=rhs i], table[frame=vsides i], @@ -333,790 +409,911 @@ table[rules=cols i] > tfoot > tr > td, table[rules=cols i] > tfoot > tr > th, table[rules=all i] > tfoot > tr > td, table[rules=all i] > tfoot > tr > th { border-color: black; }*/ -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup *, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup * { - margin: 0; - padding: 0; - box-sizing: content-box; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup address, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup address, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup center, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup center, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup div, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup div, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figcaption, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figcaption, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup footer, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup footer, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup form, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup form, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup header, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup header, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hr, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hr, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup legend, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup legend, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup p, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup p, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { - display: block; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup p, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup p, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { - margin-top: 1em; - margin-bottom: 1em; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure { - margin-left: 40px; - margin-right: 40px; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup address, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup address { - font-style: italic; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { - font-family: monospace; - white-space: pre; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup cite, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup cite, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dfn, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dfn, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup em, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup em, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup i, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup i, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup var, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup var { - font-style: italic; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup b, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup b, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup strong, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup strong { - font-weight: bolder; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup code, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup code, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup kbd, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup kbd, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup samp, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup samp, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tt, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tt { - font-family: monospace; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup big, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup big { - font-size: larger; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup small, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup small { - font-size: smaller; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sub, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sub { - vertical-align: sub; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sup, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sup { - vertical-align: super; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sub, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sub, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sup, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sup { - line-height: normal; - font-size: smaller; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ruby, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ruby { - display: ruby; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rb, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rb { - display: ruby-base; - white-space: nowrap; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rt, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rt { - display: ruby-text; - white-space: nowrap; - font-size: 50%; - font-variant-east-asian: ruby; - -webkit-text-emphasis: none; - text-emphasis: none; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rbc, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rbc { - display: ruby-base-container; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rtc, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rtc { - display: ruby-text-container; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ruby, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ruby, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rb, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rb, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rt, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rt, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rbc, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rbc, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rtc, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rtc { - unicode-bidi: isolate; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :link, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :link { - color: #0000EE; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :visited, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :visited { - color: #551A8B; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :link, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :link, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :visited, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :visited { - text-decoration: underline; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup a:link[rel~=help], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup a:link[rel~=help], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup a:visited[rel~=help], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup a:visited[rel~=help], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup area:link[rel~=help], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup area:link[rel~=help], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup area:visited[rel~=help], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup area:visited[rel~=help] { - cursor: help; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :focus, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :focus { - outline: auto; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup mark, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup mark { - background: yellow; - color: black; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup abbr[title], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup abbr[title], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup acronym[title], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup acronym[title] { - text-decoration: dotted underline; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ins, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ins, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup u, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup u { - text-decoration: underline; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup del, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup del, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup s, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup s, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup strike, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup strike { - text-decoration: line-through; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blink, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blink { - text-decoration: blink; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup q::before, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup q::before { - content: open-quote; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup q::after, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup q::after { - content: close-quote; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup br::before, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup br::before { - content: '\A'; - white-space: pre; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nobr, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nobr { - white-space: nowrap; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup wbr, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup wbr { - content: '\200B'; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nobr wbr, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nobr wbr { - white-space: normal; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup article, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup article, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup aside, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup aside, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h1, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h1, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h2, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h2, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h3, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h3, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h4, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h4, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h5, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h5, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h6, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h6, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hgroup, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hgroup, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nav, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nav, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup section, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup section { - display: block; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h1, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h1 { - margin-top: 0.67em; - margin-bottom: 0.67em; - font-size: 2.00em; - font-weight: bold; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h2, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h2 { - margin-top: 0.83em; - margin-bottom: 0.83em; - font-size: 1.50em; - font-weight: bold; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h3, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h3 { - margin-top: 1.00em; - margin-bottom: 1.00em; - font-size: 1.17em; - font-weight: bold; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h4, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h4 { - margin-top: 1.33em; - margin-bottom: 1.33em; - font-size: 1.00em; - font-weight: bold; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h5, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h5 { - margin-top: 1.67em; - margin-bottom: 1.67em; - font-size: 0.83em; - font-weight: bold; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h6, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h6 { - margin-top: 2.33em; - margin-bottom: 2.33em; - font-size: 0.67em; - font-weight: bold; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dd, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dd, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dt, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dt, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { - display: block; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup li, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup li { - display: list-item; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { - margin-top: 1em; - margin-bottom: 1em; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dl, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dl, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl dl, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl dl, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl ol, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl ol, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl ul, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dl, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dl, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dl, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dl, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul { - margin-top: 0; - margin-bottom: 0; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dd, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dd { - margin-left: 40px; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { - padding-left: 40px; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol { - list-style-type: decimal; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { - list-style-type: disc; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul { - list-style-type: circle; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir ul, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol ul, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul ul, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir ul, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol ul, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul ul, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir ul, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol ul, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul dir, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul dir, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul ul, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul ul { - list-style-type: square; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table { - display: table; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup caption, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup caption { - display: table-caption; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup[hidden], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup[hidden] { - display: table-column-group; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col[hidden], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col[hidden] { - display: table-column; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead[hidden], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead[hidden] { - display: table-header-group; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody[hidden], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody[hidden] { - display: table-row-group; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot[hidden], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot[hidden] { - display: table-footer-group; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr[hidden], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr[hidden] { - display: table-row; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td[hidden], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td[hidden], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th[hidden], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th[hidden] { - display: table-cell; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup[hidden], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup[hidden], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col[hidden], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col[hidden], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead[hidden], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead[hidden], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody[hidden], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody[hidden], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot[hidden], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot[hidden], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr[hidden], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr[hidden], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td[hidden], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td[hidden], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th[hidden], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th[hidden] { - visibility: collapse; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table { - box-sizing: border-box; - border-spacing: 2px; - border-collapse: separate; - text-indent: initial; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { - padding: 1px; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { - font-weight: bold; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table > tr, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table > tr { - vertical-align: middle; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { - vertical-align: inherit; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { - border-color: gray; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr { - border-color: inherit; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup select, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup select, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup option, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup option, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup optgroup, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup optgroup, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup textarea, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup textarea, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup keygen, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup keygen { - text-indent: initial; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup textarea, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup textarea { - white-space: pre-wrap; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="radio"], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="radio"], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="checkbox"], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="checkbox"], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="reset"], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="reset"], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="button"], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="button"], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="submit"], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="submit"], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup select, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup select, -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button { - box-sizing: border-box; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="button"], -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="button"], -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button { - padding: 0.3em 0.5em; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hr, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hr { - color: gray; - border-style: inset; - border-width: 1px; - margin: 0.5em auto; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup fieldset, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup fieldset { - margin-left: 2px; - margin-right: 2px; - border: groove 2px ThreeDFace; - padding: 0.35em 0.625em 0.75em; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup legend, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup legend { - padding-left: 2px; - padding-right: 2px; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup > *:first-child, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup > *:first-child { - margin-top: 0 !important; -} -.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup > *:last-child, -.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup > *:last-child { - margin-bottom: 0 !important; -} -.layout-editor .layout-content.layout-content-image > .layout-element-wrapper > .layout-content-markup > img, -.layout-editor .layout-html.layout-content-image > .layout-element-wrapper > .layout-content-markup > img, -.layout-editor .layout-content.layout-content-vector-image > .layout-element-wrapper > .layout-content-markup > img, -.layout-editor .layout-html.layout-content-vector-image > .layout-element-wrapper > .layout-content-markup > img { - display: block; - width: 100%; - max-width: 100%; - height: auto; -} + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup *, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup * { + margin: 0; + padding: 0; + box-sizing: content-box; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup address, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup address, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup center, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup center, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup div, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup div, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figcaption, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figcaption, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup footer, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup footer, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup form, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup form, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup header, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup header, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hr, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hr, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup legend, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup legend, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup p, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup p, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { + display: block; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup p, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup p, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { + margin-top: 1em; + margin-bottom: 1em; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure { + margin-left: 40px; + margin-right: 40px; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup address, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup address { + font-style: italic; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { + font-family: monospace; + white-space: pre; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup cite, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup cite, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dfn, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dfn, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup em, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup em, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup i, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup i, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup var, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup var { + font-style: italic; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup b, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup b, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup strong, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup strong { + font-weight: bolder; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup code, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup code, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup kbd, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup kbd, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup samp, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup samp, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tt, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tt { + font-family: monospace; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup big, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup big { + font-size: larger; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup small, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup small { + font-size: smaller; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sub, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sub { + vertical-align: sub; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sup, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sup { + vertical-align: super; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sub, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sub, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sup, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sup { + line-height: normal; + font-size: smaller; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ruby, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ruby { + display: ruby; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rb, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rb { + display: ruby-base; + white-space: nowrap; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rt, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rt { + display: ruby-text; + white-space: nowrap; + font-size: 50%; + font-variant-east-asian: ruby; + -webkit-text-emphasis: none; + text-emphasis: none; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rbc, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rbc { + display: ruby-base-container; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rtc, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rtc { + display: ruby-text-container; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ruby, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ruby, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rb, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rb, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rt, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rt, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rbc, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rbc, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rtc, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rtc { + unicode-bidi: isolate; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :link, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :link { + color: #0000EE; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :visited, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :visited { + color: #551A8B; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :link, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :link, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :visited, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :visited { + text-decoration: underline; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup a:link[rel~=help], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup a:link[rel~=help], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup a:visited[rel~=help], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup a:visited[rel~=help], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup area:link[rel~=help], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup area:link[rel~=help], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup area:visited[rel~=help], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup area:visited[rel~=help] { + cursor: help; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :focus, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :focus { + outline: auto; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup mark, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup mark { + background: yellow; + color: black; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup abbr[title], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup abbr[title], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup acronym[title], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup acronym[title] { + text-decoration: dotted underline; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ins, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ins, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup u, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup u { + text-decoration: underline; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup del, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup del, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup s, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup s, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup strike, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup strike { + text-decoration: line-through; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blink, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blink { + text-decoration: blink; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup q::before, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup q::before { + content: open-quote; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup q::after, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup q::after { + content: close-quote; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup br::before, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup br::before { + content: '\A'; + white-space: pre; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nobr, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nobr { + white-space: nowrap; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup wbr, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup wbr { + content: '\200B'; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nobr wbr, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nobr wbr { + white-space: normal; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup article, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup article, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup aside, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup aside, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h1, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h1, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h2, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h2, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h3, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h3, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h4, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h4, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h5, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h5, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h6, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h6, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hgroup, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hgroup, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nav, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nav, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup section, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup section { + display: block; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h1, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h1 { + margin-top: 0.67em; + margin-bottom: 0.67em; + font-size: 2.00em; + font-weight: bold; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h2, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h2 { + margin-top: 0.83em; + margin-bottom: 0.83em; + font-size: 1.50em; + font-weight: bold; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h3, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h3 { + margin-top: 1.00em; + margin-bottom: 1.00em; + font-size: 1.17em; + font-weight: bold; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h4, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h4 { + margin-top: 1.33em; + margin-bottom: 1.33em; + font-size: 1.00em; + font-weight: bold; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h5, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h5 { + margin-top: 1.67em; + margin-bottom: 1.67em; + font-size: 0.83em; + font-weight: bold; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h6, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h6 { + margin-top: 2.33em; + margin-bottom: 2.33em; + font-size: 0.67em; + font-weight: bold; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dd, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dd, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dt, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dt, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { + display: block; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup li, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup li { + display: list-item; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { + margin-top: 1em; + margin-bottom: 1em; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dl, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dl, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl dl, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl dl, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl ol, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl ol, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl ul, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dl, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dl, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dl, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dl, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul { + margin-top: 0; + margin-bottom: 0; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dd, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dd { + margin-left: 40px; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { + padding-left: 40px; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol { + list-style-type: decimal; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { + list-style-type: disc; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul { + list-style-type: circle; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir ul, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol ul, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul ul, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir ul, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol ul, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul ul, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir ul, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol ul, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul dir, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul dir, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul ul, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul ul { + list-style-type: square; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table { + display: table; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup caption, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup caption { + display: table-caption; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup[hidden], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup[hidden] { + display: table-column-group; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col[hidden], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col[hidden] { + display: table-column; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead[hidden], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead[hidden] { + display: table-header-group; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody[hidden], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody[hidden] { + display: table-row-group; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot[hidden], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot[hidden] { + display: table-footer-group; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr[hidden], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr[hidden] { + display: table-row; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td[hidden], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td[hidden], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th[hidden], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th[hidden] { + display: table-cell; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup[hidden], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup[hidden], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col[hidden], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col[hidden], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead[hidden], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead[hidden], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody[hidden], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody[hidden], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot[hidden], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot[hidden], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr[hidden], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr[hidden], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td[hidden], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td[hidden], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th[hidden], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th[hidden] { + visibility: collapse; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table { + box-sizing: border-box; + border-spacing: 2px; + border-collapse: separate; + text-indent: initial; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { + padding: 1px; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { + font-weight: bold; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table > tr, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table > tr { + vertical-align: middle; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { + vertical-align: inherit; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { + border-color: gray; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr { + border-color: inherit; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup select, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup select, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup option, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup option, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup optgroup, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup optgroup, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup textarea, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup textarea, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup keygen, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup keygen { + text-indent: initial; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup textarea, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup textarea { + white-space: pre-wrap; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="radio"], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="radio"], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="checkbox"], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="checkbox"], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="reset"], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="reset"], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="button"], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="button"], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="submit"], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="submit"], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup select, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup select, + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button { + box-sizing: border-box; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="button"], + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="button"], + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button { + padding: 0.3em 0.5em; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hr, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hr { + color: gray; + border-style: inset; + border-width: 1px; + margin: 0.5em auto; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup fieldset, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup fieldset { + margin-left: 2px; + margin-right: 2px; + border: groove 2px ThreeDFace; + padding: 0.35em 0.625em 0.75em; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup legend, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup legend { + padding-left: 2px; + padding-right: 2px; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup > *:first-child, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup > *:first-child { + margin-top: 0 !important; + } + + .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup > *:last-child, + .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup > *:last-child { + margin-bottom: 0 !important; + } + + .layout-editor .layout-content.layout-content-image > .layout-element-wrapper > .layout-content-markup > img, + .layout-editor .layout-html.layout-content-image > .layout-element-wrapper > .layout-content-markup > img, + .layout-editor .layout-content.layout-content-vector-image > .layout-element-wrapper > .layout-content-markup > img, + .layout-editor .layout-html.layout-content-vector-image > .layout-element-wrapper > .layout-content-markup > img { + display: block; + width: 100%; + max-width: 100%; + height: auto; + } + .layout-editor .img-responsive, .layout-editor .img-responsive img { - display: block; - width: 100%; - max-width: 100%; - height: auto; + display: block; + width: 100%; + max-width: 100%; + height: auto; } .layout-editor > .layout-toolbox-wrapper { - position: relative; - margin-left: 12px; - width: 220px; - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; -} -.layout-editor > .layout-toolbox-wrapper > .layout-toolbox { - border: 1px solid #e4e5e6; - width: 220px; - min-height: 400px; - padding: 6px; - background-color: #f3f4f5; -} -.layout-editor > .layout-toolbox-wrapper > .layout-toolbox.sticky-top { - position: fixed; - top: 0; - max-height: 100%; - overflow-y: auto; -} -.layout-editor > .layout-toolbox-wrapper > .layout-toolbox.sticky-bottom { - position: absolute; - bottom: 0; -} -.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group { - margin-top: 12px; -} -.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading { - display: block; - margin-bottom: 4px; - text-decoration: none; -} -.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading:before { - display: inline-block; - width: 10px; - margin-right: 4px; - font: normal normal normal 14px/1 FontAwesome; - text-align: center; - content: "\f0d7"; -} -.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-group-heading:before { - content: "\f0da"; -} -.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-items { - display: none; -} -.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-section + .layout-toolbox-section { - margin-top: 4px; -} -.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item { - border: 1px solid #e4e5e6; - background-color: #fff; - padding: 9px 12px; - cursor: default; -} -.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item i { - display: inline-block; - width: 16px; - font: normal normal normal 14px/1 FontAwesome; -} -.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item + .layout-toolbox-item { - margin-top: 4px; -} -.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group + .layout-toolbox-group { - margin-top: 6px; + margin-left: 12px; + width: 218px; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + max-height: calc(100vh - 80px); + overflow-x: clip; + overflow-y: auto; + position: -webkit-sticky; + position: sticky; + top: 0; } + .layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar { + width: 2px; + } + + .layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); + border-radius: 1px; + } + + .layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar-thumb { + background-color: rgba(0,0,0,0.3); + } + + .layout-editor > .layout-toolbox-wrapper > .layout-toolbox { + border: 1px solid #e4e5e6; + width: 220px; + min-height: 400px; + padding: 6px; + background-color: #f3f4f5; + } + + .layout-editor > .layout-toolbox-wrapper > .layout-toolbox.sticky-top { + position: fixed; + top: 0; + max-height: 100%; + overflow-y: auto; + } + + .layout-editor > .layout-toolbox-wrapper > .layout-toolbox.sticky-bottom { + position: absolute; + bottom: 0; + } + + .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group { + margin-top: 12px; + } + + .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading { + display: block; + margin-bottom: 4px; + text-decoration: none; + } + + .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading:before { + display: inline-block; + width: 10px; + margin-right: 4px; + font: normal normal normal 14px/1 FontAwesome; + text-align: center; + content: "\f0d7"; + } + + .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-group-heading:before { + content: "\f0da"; + } + + .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-items { + display: none; + } + + .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-section + .layout-toolbox-section { + margin-top: 4px; + } + + + .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item { + border: 1px solid #e4e5e6; + background-color: #fff; + padding: 9px 12px; + cursor: default; + } + + .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item i { + display: inline-block; + width: 16px; + font: normal normal normal 14px/1 FontAwesome; + } + + .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item + .layout-toolbox-item { + margin-top: 4px; + } + + .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group + .layout-toolbox-group { + margin-top: 6px; + } + .layout-editor .layout-popup { - display: none; - position: absolute; - margin: 0; - box-shadow: 3px 3px 11px 0 rgba(50, 50, 50, 0.5); - border: 1px solid #e4e5e6; - padding: 2px 0; - background-color: #f7f7f7; - list-style: none; - z-index: 20; - color: #7c7c7c; - text-align: left; - cursor: default; - white-space: nowrap; - line-height: normal; - min-width: 300px; -} -.layout-editor .layout-popup.wide { - width: 600px; -} -.layout-editor .layout-popup .layout-popup-flex { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - padding: 2px 5px; -} -.layout-editor .layout-popup .layout-popup-flex .layout-popup-column + .layout-popup-column { - margin-left: 4px; - border-left: 1px solid rgba(128, 128, 128, 0.15); - padding-left: 4px; -} -.layout-editor .layout-popup .layout-popup-item { - padding: 4px 6px; -} -.layout-editor .layout-popup .layout-popup-label { - font-size: 0.9em; - font-weight: bold; - color: #7c7c7c; -} -.layout-editor .layout-popup .layout-popup-action:hover { - background-color: #f3f4f5; - cursor: pointer; -} -.layout-editor .layout-popup .layout-popup-input input[type='text'], -.layout-editor .layout-popup .layout-popup-input textarea { - width: 100%; -} -.layout-editor .layout-popup .layout-popup-input > label { - display: block; - font-size: 0.9em; + display: none; + position: absolute; + margin: 0; + box-shadow: 3px 3px 11px 0 rgba(50, 50, 50, 0.5); + border: 1px solid #e4e5e6; + padding: 2px 0; + background-color: #f7f7f7; + list-style: none; + z-index: 20; + color: #7c7c7c; + text-align: left; + cursor: default; + white-space: nowrap; + line-height: normal; + min-width: 300px; } + .layout-editor .layout-popup.wide { + width: 600px; + } + + .layout-editor .layout-popup .layout-popup-flex { + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + padding: 2px 5px; + } + + .layout-editor .layout-popup .layout-popup-flex .layout-popup-column + .layout-popup-column { + margin-left: 4px; + border-left: 1px solid rgba(128, 128, 128, 0.15); + padding-left: 4px; + } + + .layout-editor .layout-popup .layout-popup-item { + padding: 4px 6px; + } + + .layout-editor .layout-popup .layout-popup-label { + font-size: 0.9em; + font-weight: bold; + color: #7c7c7c; + } + + .layout-editor .layout-popup .layout-popup-action:hover { + background-color: #f3f4f5; + cursor: pointer; + } + + .layout-editor .layout-popup .layout-popup-input input[type='text'], + .layout-editor .layout-popup .layout-popup-input textarea { + width: 100%; + } + + .layout-editor .layout-popup .layout-popup-input > label { + display: block; + font-size: 0.9em; + } + /*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxheW91dEVkaXRvci5jc3MiLCJFZGl0b3IubGVzcyIsIkVsZW1lbnQubGVzcyIsIkNvbnRhaW5lci5sZXNzIiwiQ2FudmFzLmxlc3MiLCJSb3cubGVzcyIsIkNvbHVtbi5sZXNzIiwiQ29udGVudC5sZXNzIiwiUmVzZXQubGVzcyIsIlRvb2xib3gubGVzcyIsIlBvcHVwLmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFDSEE7RUFDSSxzQkFBQTtFQUFBLHFCQUFBO0VBQUEsY0FBQTtFQUNBLHVDQUFBO01BQUEsdUJBQUE7VUFBQSwrQkFBQTtFQUNBLG1CQUFBO0VBQ0EsVUFBQTtDRERIO0FDSEQ7RUFPUSxzQkFBQTtFQUFBLHFCQUFBO0VBQUEsY0FBQTtDRERQO0FDTkQ7RUFVWSxrQkFBQTtDRERYO0FDTUQ7RUFDSSxzQkFBQTtFQUFBLHFCQUFBO0VBQUEsY0FBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSw2QkFBQTtNQUFBLHdCQUFBO1VBQUEscUJBQUE7Q0RKSDtBQ0FEO0VBT1EscUJBQUE7TUFBQSxxQkFBQTtVQUFBLGFBQUE7RUFDQSwwQkFBQTtFQUNBLDBCQUFBO0NESlA7QUNMRDtFQVlZLGNBQUE7RUFDQSxvQkFBQTtFQUNBLGlCQUFBO0NESlg7QUNWRDtFQWlCZ0IsdUJBQUE7Q0RKZjtBQ2JEO0VBc0JZLHdCQUFBO0VBQ0EscUJBQUE7RUFDQSxvQkFBQTtDRE5YO0FDbEJEO0VBNkJRLG9CQUFBO0NEUlA7QUNZRDtFQUNJLGNBQUE7Q0RWSDtBQ2FPOztFQUNJLGFBQUE7RUFDQSxlQUFBO0NEVlg7QUNhTztFQUNJLFlBQUE7Q0RYWDtBQ0NEOztFQWNZLGdCQUFBO0NEWFg7QUNIRDtFQWtCWSx1QkFBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0NEWlg7QUNjVztFQUNJLG9CQUFBO0VBQ0EsWUFBQTtDRFpmO0FDWkQ7RUE2QlksZ0JBQUE7Q0RkWDtBQ2ZEO0VBa0NRLG1CQUFBO0VBQ0EsMEJBQUE7RUFDQSxpQkFBQTtFQUNBLHVCQUFBO0NEaEJQO0FDckJEO0VBeUNRLHFCQUFBO0VBQ0EsbUJBQUE7Q0RqQlA7QUN6QkQ7RUE4Q1Esb0JBQUE7Q0RsQlA7O0FFNUVEO0VBRVEsbUJBQUE7RUFDQSxjQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLFdBQUE7Q0Y4RVA7QUUzRU87RUFDSSxlQUFBO0NGNkVYO0FFdkZEO0VBZWdCLGNBQUE7RUFDQSxtQkFBQTtFQUNBLFVBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0Esa0JBQUE7RUFDQSx1QkFBQTtDRjJFZjtBRW5HRDtFQTJCb0Isc0JBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7Q0YyRW5CO0FFeEdEO0VBaUNvQixnQkFBQTtDRjBFbkI7QUUzR0Q7RUFxQ29CLGNBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxtQkFBQTtDRnlFbkI7QUVqSEQ7RUE2Q2dCLFdBQUE7RUFDQSxXQUFBO0NGdUVmO0FFckhEO0VBcURRLGlCQUFBO0NGbUVQO0FFaEVHOztFQUdRLGtCQUFBO0VBQ0Esb0JBQUE7Q0ZpRVg7QUVyRUc7O0VBT1ksYUFBQTtDRmtFZjtBRXpFRztFQWNRLHVDQUFBO0NGOERYO0FFNUVHO0VBaUJZLGVBQUE7RUFDQSxZQUFBO0VBQ0EsMkNBQUE7Q0Y4RGY7QUVqRkc7RUEyQlEsc0JBQUE7Q0Z5RFg7QUVwRkc7RUE4QlksZUFBQTtFQUNBLDBCQUFBO0VBQ0EsZUFBQTtDRnlEZjtBRXpGRztFQW1DZ0Isc0JBQUE7Q0Z5RG5CO0FFeERtQjtFQUNJLDBCQUFBO0NGMER2QjtBRXZEbUI7RUFDSSxnQkFBQTtFQUNBLGdDQUFBO0NGeUR2QjtBRXZEdUI7RUFDSSwwQkFBQTtDRnlEM0I7QUVyRG1CO0VBQ0ksZUFBQTtFQUNBLDBCQUFBO0NGdUR2QjtBRXJEdUI7RUFDSSwwQkFBQTtDRnVEM0I7QUU3R0c7RUErRFEsMkNBQUE7Q0ZpRFg7QUV4S0Q7RUE0SFEsY0FBQTtDRitDUDtBRTNLRDtFQWlJUSx1REFBQTtDRjZDUDtBRTlLRDtFQW9JWSxlQUFBO0VBQ0EsK0JBQUE7RUFDQSxpQkFBQTtFQUNBLHNDQUFBO0VBQ0EsMkNBQUE7Q0Y2Q1g7QUVyTEQ7RUErSVksZ0JBQUE7RUFDQSxpQkFBQTtDRnlDWDs7QUd6TEQ7RUFNZ0IsY0FBQTtFQUNBLCtCQUFBO01BQUEsMkJBQUE7VUFBQSx1QkFBQTtFQUNBLGFBQUE7RUFDQSxpQkFBQTtFQUNBLDRDQUFBO0VBQ0EsbUJBQUE7RUFDQSxjQUFBO0VBQ0EsZ0NBQUE7TUFBQSxzQkFBQTtVQUFBLHdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxtQkFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtDSHVMZjtBR3hNRDtFQXFCZ0IsY0FBQTtDSHNMZjtBRzNNRDtFQXlCb0IsaUJBQUE7Q0hxTG5CO0FHOU1EO0VBOEJvQixjQUFBO0NIbUxuQjtBRy9LVztFQUVRLHNCQUFBO0VBQUEscUJBQUE7RUFBQSxjQUFBO0NIZ0xuQjtBR2xMVztFQU1RLG1CQUFBO0VBQ0EsT0FBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0VBQ0EsUUFBQTtDSCtLbkI7QUd6S0c7RUFHWSw0Q0FBQTtDSHlLZjtBRzVLRztFQU1nQixhQUFBO0NIeUtuQjtBRy9LRztFQVdZLGNBQUE7Q0h1S2Y7QUdsTEc7RUFjZ0IsY0FBQTtDSHVLbkI7O0FJdk9EO0VBR1ksY0FBQTtDSndPWDs7QUt6T087RUFFUSwyREFBQTtDTDJPZjtBSzdPTztFQUlZLDRCQUFBO0NMNE9uQjtBS2hQTztFQVNRLDBCQUFBO0NMME9mO0FLblBPO0VBV1ksMEJBQUE7Q0wyT25COztBTXhQRDtFQUlnQixjQUFBO0VBQ0EsbUJBQUE7RUFDQSxZQUFBO0VBQ0EsT0FBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7Q053UGY7QU1sUUQ7RUFjZ0IsV0FBQTtDTnVQZjtBTXJRRDtFQWtCZ0IsWUFBQTtDTnNQZjtBTWxQTztFQUNJLGVBQUE7Q05vUFg7O0FPMVFEOztFQUVRLGdCQUFBO0NQNlFQO0FPL1FEOztFQU9nQixhQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFUDRRZCx5RkFBeUY7RUFDekYscUNBQXFDO0VBQ3JDLHFDQUFxQztFQUNyQyx1REFBdUQ7RUFDdkQsd0RBQXdEO0VBQ3hEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCQztDQUNGO0FPclREOztFQ0FRLFVBQUE7RUFDQSxXQUFBO0VBQ0Esd0JBQUE7Q1J5VFA7QU8zVEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VDT1EsZUFBQTtDUnNWUDtBTzdWRDs7Ozs7Ozs7Ozs7Ozs7RUNXUSxnQkFBQTtFQUNBLG1CQUFBO0NSa1dQO0FPOVdEOzs7O0VDZ0JRLGtCQUFBO0VBQ0EsbUJBQUE7Q1JvV1A7QU9yWEQ7O0VDcUJRLG1CQUFBO0NSb1dQO0FPelhEOzs7Ozs7OztFQ3lCUSx1QkFBQTtFQUNBLGlCQUFBO0NSMFdQO0FPcFlEOzs7Ozs7Ozs7O0VDOEJRLG1CQUFBO0NSa1hQO0FPaFpEOzs7O0VDa0NRLG9CQUFBO0NSb1hQO0FPdFpEOzs7Ozs7OztFQ3NDUSx1QkFBQTtDUjBYUDtBT2hhRDs7RUMwQ1Esa0JBQUE7Q1IwWFA7QU9wYUQ7O0VDOENRLG1CQUFBO0NSMFhQO0FPeGFEOztFQ2tEUSxvQkFBQTtDUjBYUDtBTzVhRDs7RUNzRFEsc0JBQUE7Q1IwWFA7QU9oYkQ7Ozs7RUMwRFEsb0JBQUE7RUFDQSxtQkFBQTtDUjRYUDtBT3ZiRDs7RUNnRVEsY0FBQTtDUjJYUDtBTzNiRDs7RUNvRVEsbUJBQUE7RUFDQSxvQkFBQTtDUjJYUDtBT2hjRDs7RUN5RVEsbUJBQUE7RUFDQSxvQkFBQTtFQUNBLGVBQUE7RUFDQSw4QkFBQTtFQUNBLDRCQUFBO1VBQUEsb0JBQUE7Q1IyWFA7QU94Y0Q7O0VDaUZRLDZCQUFBO0NSMlhQO0FPNWNEOztFQ3FGUSw2QkFBQTtDUjJYUDtBT2hkRDs7Ozs7Ozs7OztFQ3lGUSxzQkFBQTtDUm1ZUDtBTzVkRDs7RUM4RlEsZUFBQTtDUmtZUDtBT2hlRDs7RUNrR1EsZUFBQTtDUmtZUDtBT3BlRDs7OztFQ3NHUSwyQkFBQTtDUm9ZUDtBTzFlRDs7Ozs7Ozs7RUMyR1EsYUFBQTtDUnlZUDtBT3BmRDs7RUMrR1EsY0FBQTtDUnlZUDtBT3hmRDs7RUNtSFEsbUJBQUE7RUFDQSxhQUFBO0NSeVlQO0FPN2ZEOzs7O0VDd0hRLGtDQUFBO0NSMllQO0FPbmdCRDs7OztFQzRIUSwyQkFBQTtDUjZZUDtBT3pnQkQ7Ozs7OztFQ2dJUSw4QkFBQTtDUmlaUDtBT2poQkQ7O0VDb0lRLHVCQUFBO0NSaVpQO0FPcmhCRDs7RUN3SVEsb0JBQUE7Q1JpWlA7QU96aEJEOztFQzRJUSxxQkFBQTtDUmlaUDtBTzdoQkQ7O0VDZ0pRLGNBQUE7RUFDQSxpQkFBQTtDUmlaUDtBT2xpQkQ7O0VDcUpRLG9CQUFBO0NSaVpQO0FPdGlCRDs7RUN5SlEsaUJBQUE7Q1JpWlA7QU8xaUJEOztFQzZKUSxvQkFBQTtDUmlaUDtBTzlpQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUNpS1EsZUFBQTtDUnFhUDtBT3RrQkQ7O0VDcUtRLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0NScWFQO0FPN2tCRDs7RUM0S1EsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7Q1JxYVA7QU9wbEJEOztFQ21MUSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtDUnFhUDtBTzNsQkQ7O0VDMExRLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0NScWFQO0FPbG1CRDs7RUNpTVEsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7Q1JxYVA7QU96bUJEOztFQ3dNUSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtDUnFhUDtBT2huQkQ7Ozs7Ozs7Ozs7OztFQytNUSxlQUFBO0NSK2FQO0FPOW5CRDs7RUNtTlEsbUJBQUE7Q1IrYVA7QU9sb0JEOzs7Ozs7OztFQ3VOUSxnQkFBQTtFQUNBLG1CQUFBO0NScWJQO0FPN29CRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUMrTlksY0FBQTtFQUNBLGlCQUFBO0NSZ2RYO0FPaHJCRDs7RUNvT1Esa0JBQUE7Q1JnZFA7QU9wckJEOzs7Ozs7RUN3T1EsbUJBQUE7Q1JvZFA7QU81ckJEOztFQzRPUSx5QkFBQTtDUm9kUDtBT2hzQkQ7Ozs7RUNnUFEsc0JBQUE7Q1JzZFA7QU90c0JEOzs7Ozs7Ozs7Ozs7RUNzUFksd0JBQUE7Q1I4ZFg7QU9wdEJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUNrUWdCLHdCQUFBO0NSd2ZmO0FPMXZCRDs7RUNzUVEsZUFBQTtDUndmUDtBTzl2QkQ7O0VDMFFRLHVCQUFBO0NSd2ZQO0FPbHdCRDs7OztFQzhRUSw0QkFBQTtDUjBmUDtBT3h3QkQ7Ozs7RUNrUlEsc0JBQUE7Q1I0ZlA7QU85d0JEOzs7O0VDc1JRLDRCQUFBO0NSOGZQO0FPcHhCRDs7OztFQzBSUSx5QkFBQTtDUmdnQlA7QU8xeEJEOzs7O0VDOFJRLDRCQUFBO0NSa2dCUDtBT2h5QkQ7Ozs7RUNrU1EsbUJBQUE7Q1JvZ0JQO0FPdHlCRDs7Ozs7Ozs7RUNzU1Esb0JBQUE7Q1IwZ0JQO0FPaHpCRDs7Ozs7Ozs7Ozs7Ozs7OztFQzJTWSxxQkFBQTtDUnVoQlg7QU9sMEJEOztFQytTUSx1QkFBQTtFQUNBLG9CQUFBO0VBQ0EsMEJBQUE7RUFDQSxxQkFBQTtDUnVoQlA7QU96MEJEOzs7O0VDc1RRLGFBQUE7Q1J5aEJQO0FPLzBCRDs7RUMwVFEsa0JBQUE7Q1J5aEJQO0FPbjFCRDs7Ozs7Ozs7RUM4VFEsdUJBQUE7Q1IraEJQO0FPNzFCRDs7Ozs7O0VDa1VRLHdCQUFBO0NSbWlCUDtBT3IyQkQ7Ozs7OztFQ3NVUSxtQkFBQTtDUnVpQlA7QU83MkJEOzs7Ozs7OztFQzBVUSxzQkFBQTtDUjZpQlA7QU92M0JEOzs7Ozs7Ozs7Ozs7OztFQ3dXUSxxQkFBQTtDUitoQlA7QU92NEJEOztFQzRXUSxzQkFBQTtDUitoQlA7QU8zNEJEOzs7Ozs7Ozs7Ozs7OztFQ2lYUSx1QkFBQTtDUjBpQlA7QU8zNUJEOzs7O0VDcVhRLHFCQUFBO0NSNGlCUDtBT2o2QkQ7O0VDeVhRLFlBQUE7RUFDQSxvQkFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7Q1I0aUJQO0FPeDZCRDs7RUNnWVEsaUJBQUE7RUFDQSxrQkFBQTtFQUNBLDhCQUFBO0VBQ0EsK0JBQUE7Q1I0aUJQO0FPLzZCRDs7RUN1WVEsa0JBQUE7RUFDQSxtQkFBQTtDUjRpQlA7QU9wN0JEOztFQWVvQix5QkFBQTtDUHk2Qm5CO0FPeDdCRDs7RUFtQm9CLDRCQUFBO0NQeTZCbkI7QU9wNkJPOzs7O0VBRVEsZUFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLGFBQUE7Q1B3NkJmO0FPcjhCRDs7RUFtQ1EsZUFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLGFBQUE7Q1BzNkJQOztBUzc4QkQ7RUFFUSxtQkFBQTtFQUNBLGtCQUFBO0VBQ0EsYUFBQTtFQUNBLHVCQUFBO01BQUEscUJBQUE7VUFBQSxlQUFBO0NUKzhCUDtBU3A5QkQ7RUFRWSwwQkFBQTtFQUNBLGFBQUE7RUFDQSxrQkFBQTtFQUNBLGFBQUE7RUFDQSwwQkFBQTtDVCs4Qlg7QVM3OEJXO0VBQ0ksZ0JBQUE7RUFDQSxPQUFBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtDVCs4QmY7QVM1OEJXO0VBQ0ksbUJBQUE7RUFDQSxVQUFBO0NUODhCZjtBU3IrQkQ7RUEyQmdCLGlCQUFBO0NUNjhCZjtBU3grQkQ7RUE4Qm9CLGVBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0NUNjhCbkI7QVMzOEJtQjtFQUNJLHNCQUFBO0VBQ0EsWUFBQTtFQUNBLGtCQUFBO0VBQ0EsOENBQUE7RUFDQSxtQkFBQTtFQUNBLGlCQUFBO0NUNjhCdkI7QVN6OEJlO0VBRVEsaUJBQUE7Q1QwOEJ2QjtBUzU4QmU7RUFNUSxjQUFBO0NUeThCdkI7QVMzL0JEO0VBdURvQixnQkFBQTtDVHU4Qm5CO0FTOS9CRDtFQTJEb0IsMEJBQUE7RUFDQSx1QkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7Q1RzOEJuQjtBU3BnQ0Q7RUFpRXdCLHNCQUFBO0VBQ0EsWUFBQTtFQUNBLDhDQUFBO0NUczhCdkI7QVN6Z0NEO0VBdUV3QixnQkFBQTtDVHE4QnZCO0FTNWdDRDtFQTRFb0IsZ0JBQUE7Q1RtOEJuQjs7QVUvZ0NEO0VBRVEsY0FBQTtFQUNBLG1CQUFBO0VBQ0EsVUFBQTtFQUdBLGlEQUFBO0VBQ0EsMEJBQUE7RUFDQSxlQUFBO0VBQ0EsMEJBQUE7RUFDQSxpQkFBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLG9CQUFBO0VBQ0Esb0JBQUE7RUFDQSxpQkFBQTtDVmloQ1A7QVUvZ0NPO0VBQ0ksYUFBQTtDVmloQ1g7QVV0aUNEO0VBeUJZLHNCQUFBO0VBQUEscUJBQUE7RUFBQSxjQUFBO0VBQ0EsaUJBQUE7Q1ZnaENYO0FVMWlDRDtFQTZCZ0IsaUJBQUE7RUFDQSxpREFBQTtFQUNBLGtCQUFBO0NWZ2hDZjtBVS9pQ0Q7RUFvQ1ksaUJBQUE7Q1Y4Z0NYO0FVbGpDRDtFQXdDWSxpQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZUFBQTtDVjZnQ1g7QVV2akNEO0VBOENZLDBCQUFBO0VBQ0EsZ0JBQUE7Q1Y0Z0NYO0FVM2pDRDs7RUFvRGdCLFlBQUE7Q1YyZ0NmO0FVL2pDRDtFQXdEZ0IsZUFBQTtFQUNBLGlCQUFBO0NWMGdDZiIsImZpbGUiOiJMYXlvdXRFZGl0b3IuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmxheW91dC1lZGl0b3ItdG9vbGJhciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDEwcHg7XG59XG4ubGF5b3V0LWVkaXRvci10b29sYmFyIC5sYXlvdXQtZWRpdG9yLXRvb2xiYXItZ3JvdXAge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmxheW91dC1lZGl0b3ItdG9vbGJhciAubGF5b3V0LWVkaXRvci10b29sYmFyLWdyb3VwID4gbGkgKyBsaSB7XG4gIG1hcmdpbi1sZWZ0OiAxMnB4O1xufVxuLmxheW91dC1lZGl0b3Ige1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW4tdG9wOiAxZW07XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtY2FudmFzLXdyYXBwZXIge1xuICBmbGV4LWdyb3c6IDE7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNGU1ZTY7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtY2FudmFzLXdyYXBwZXIgPiAubGF5b3V0LXRvb2xiYXItY29udGFpbmVyIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgbWFyZ2luOiAxMnB4IDEycHggMDtcbiAgbWluLWhlaWdodDogNzFweDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC1jYW52YXMtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJhci1jb250YWluZXIgPiAubWNlLXBhbmVsIHtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC1jYW52YXMtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gLmxheW91dC1wbGFjZWhvbGRlciB7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCAjY2NjO1xuICBwYWRkaW5nOiAwLjJlbSAwLjRlbTtcbiAgYmFja2dyb3VuZDogI2U4ZThlODtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtc25pcHBldCB7XG4gIGJhY2tncm91bmQ6ICNlOGU4ZTg7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyAuaGVscC1yb3c6YmVmb3JlLFxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93OmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyAuaGVscC1yb3cgPiAuaGVscC1jb2x1bW4tZnVsbCxcbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyA+IC5oZWxwLWNvbHVtbi1oYWxmIHtcbiAgbWFyZ2luOiAwLjVlbSAwO1xufVxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93ID4gLmhlbHAtY29sdW1uLWhhbGYge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDUwJTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyA+IC5oZWxwLWNvbHVtbi1oYWxmOm50aC1jaGlsZCgybikge1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICBjbGVhcjogbGVmdDtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyArIC5oZWxwLXJvdyB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIGNvZGUge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjU7XG4gIHBhZGRpbmc6IDJweCA0cHg7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyBwIHtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjZlbTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIHRhYmxlID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkIHtcbiAgcGFkZGluZy1yaWdodDogMTBweDtcbn1cblxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHBhZGRpbmc6IDA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29sdW1uKSB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW46IDA7XG4gIHotaW5kZXg6IDIwO1xuICBoZWlnaHQ6IDI1cHg7XG4gIHBhZGRpbmc6IDAgNnB4O1xuICBsaXN0LXN0eWxlOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBsaW5lLWhlaWdodDogMjVweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtZWxlbWVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtaXRlbSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiAyNXB4O1xuICBwYWRkaW5nOiAxcHggNnB4IDA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWxhYmVsIHtcbiAgZm9udC1zaXplOiAxM3B4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24ge1xuICBkaXNwbGF5OiBub25lO1xuICB3aWR0aDogMjhweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwtbWFpbiB7XG4gIHRvcDogLTI3cHg7XG4gIGxlZnQ6IC0ycHg7XG59XG4ubGF5b3V0LWVkaXRvciBsaS5sYXlvdXQtZWxlbWVudCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUsXG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkIHtcbiAgYm9yZGVyLXdpZHRoOiAycHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlcixcbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XG4gIG1hcmdpbjogLTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWFjdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogcmdiYSgxMDQsIDEwNCwgMTA0LCAwLjEpO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtYWN0aXZlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsLW1haW4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgei1pbmRleDogMzA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTA0LCAxMDQsIDEwNCwgMC4xKTtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQge1xuICBib3JkZXItY29sb3I6ICM2NDg3MjE7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2NDg3MjE7XG4gIGNvbG9yOiAjZmVmZWZlO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyYjAyYjtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWFjdGlvbi5kaXNhYmxlZCB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgY29sb3I6IHJnYmEoMjU0LCAyNTQsIDI1NCwgMC40KTtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWFjdGlvbi5kaXNhYmxlZDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2NDg3MjE7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24uYWN0aXZlIHtcbiAgY29sb3I6ICNkZWZmNDI7XG4gIGJhY2tncm91bmQtY29sb3I6ICM3MzliMjY7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24uYWN0aXZlOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyYjAyYjtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LXNlbGVjdGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDEzNSwgMzMsIDAuMDgpO1xufVxuLmxheW91dC1lZGl0b3IgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0IHtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDEycHggNnB4IHJnYmEoMTAwLCAxMzUsIDMzLCAwLjUpO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDtcbiAgbWluLWhlaWdodDogNzhweDtcbiAgYm9yZGVyOiAycHggZGFzaGVkICM2NDg3MjEgIWltcG9ydGFudDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDEzNSwgMzMsIDAuMTYpO1xufVxuLmxheW91dC1lZGl0b3IgLm1lZGlhLXRodW1ibmFpbCBpbWcge1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRhaW5lci1jaGlsZHJlbi1wbGFjZWhvbGRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbjogMTFweDtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYm9yZGVyOiAxcHggZGFzaGVkIHJnYmEoMTI0LCAxMjQsIDEyNCwgMC40KTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBwYWRkaW5nOiAxMnB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIG9wYWNpdHk6IDAuNjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250YWluZXIgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4ge1xuICBwYWRkaW5nOiAxMnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250YWluZXIgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29udGFpbmVyKSArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpIHtcbiAgbWFyZ2luLXRvcDogMTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLnVpLXNvcnRhYmxlLWhlbHBlcjpmaXJzdC1jaGlsZCArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIubGF5b3V0LWNvbnRhaW5lci1lbXB0eSA+IC5sYXlvdXQtY29udGFpbmVyLWNoaWxkcmVuLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIubGF5b3V0LWNvbnRhaW5lci1lbXB0eSA+IC5sYXlvdXQtY2hpbGRyZW4ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1jb250YWluZXIubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXI6IDFweCBkYXNoZWQgcmdiYSgxMjQsIDEyNCwgMTI0LCAwLjYpO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcbiAgbWFyZ2luOiAtMXB4O1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1jb250YWluZXIgKyAubGF5b3V0LWNvbnRhaW5lcjpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXItdG9wOiAwO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1jb250YWluZXIgKyAubGF5b3V0LWNvbnRhaW5lcjpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY2FudmFzICNkdW1teSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcm93LmxheW91dC1lbGVtZW50LWZvY3VzZWQ6bm90KC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0KSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXItdG9wOiAxcHggZGFzaGVkIHJnYmEoMTI0LCAxMjQsIDEyNCwgMC42KSAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1yb3cubGF5b3V0LWVsZW1lbnQtZm9jdXNlZDpub3QoLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcbiAgbWFyZ2luLXRvcDogLTFweCAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1yb3cubGF5b3V0LWVsZW1lbnQtZm9jdXNlZDpub3QoLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50ICsgLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XG4gIGJvcmRlci1sZWZ0OiAwICFpbXBvcnRhbnQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXJvdy5sYXlvdXQtZWxlbWVudC1mb2N1c2VkOm5vdCgubGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldCkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWVsZW1lbnQgKyAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xuICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbHVtbiA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMzA7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTAwJTtcbiAgY3Vyc29yOiBjb2wtcmVzaXplO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb2x1bW4gPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXItbGVmdCB7XG4gIGxlZnQ6IC02cHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbHVtbiA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhci1yaWdodCB7XG4gIHJpZ2h0OiAtNnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb2x1bW4ubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwge1xuICBtaW4taGVpZ2h0OiAxZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB7XG4gIHBhZGRpbmc6IDJweDtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAvKiB0aGlzIGNvbG9yIGlzIGp1c3QgYSBzdWdnZXN0aW9uIGFuZCBjYW4gYmUgY2hhbmdlZCBiYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBmZWVkYmFjayAqL1xuICAvKiB0aGlzIGFsc28gaGFzIGJpZGkgaW1wbGljYXRpb25zICovXG4gIC8qIHRoaXMgYWxzbyBoYXMgYmlkaSBpbXBsaWNhdGlvbnMgKi9cbiAgLyogTFRSLXNwZWNpZmljOiB1c2UgJ21hcmdpbi1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xuICAvKiBMVFItc3BlY2lmaWM6IHVzZSAncGFkZGluZy1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xuICAvKnRhYmxlW3J1bGVzPW5vbmUgaV0sIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSwgdGFibGVbcnVsZXM9cm93cyBpXSxcbnRhYmxlW3J1bGVzPWNvbHMgaV0sIHRhYmxlW3J1bGVzPWFsbCBpXSwgdGFibGVbZnJhbWU9dm9pZCBpXSxcbnRhYmxlW2ZyYW1lPWFib3ZlIGldLCB0YWJsZVtmcmFtZT1iZWxvdyBpXSwgdGFibGVbZnJhbWU9aHNpZGVzIGldLFxudGFibGVbZnJhbWU9bGhzIGldLCB0YWJsZVtmcmFtZT1yaHMgaV0sIHRhYmxlW2ZyYW1lPXZzaWRlcyBpXSxcbnRhYmxlW2ZyYW1lPWJveCBpXSwgdGFibGVbZnJhbWU9Ym9yZGVyIGldLFxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1ub25lIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0aGVhZCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRoZWFkID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGJvZHkgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9cm93cyBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1hbGwgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRmb290ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1jb2xzIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdGZvb3QgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9YWxsIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1hbGwgaV0gPiB0Zm9vdCA+IHRyID4gdGgge1xuICAgIGJvcmRlci1jb2xvcjogYmxhY2s7XG59Ki9cbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgKixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgKiB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsb2NrcXVvdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsb2NrcXVvdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNlbnRlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY2VudGVyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXYsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpdixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZmlndXJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ2NhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ2NhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZvb3Rlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZm9vdGVyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmb3JtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmb3JtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoZWFkZXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhlYWRlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaHIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsZWdlbmQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxlZ2VuZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwbGFpbnRleHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcHJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHhtcCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ3VyZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwbGFpbnRleHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcHJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHhtcCB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ3VyZSB7XG4gIG1hcmdpbi1sZWZ0OiA0MHB4O1xuICBtYXJnaW4tcmlnaHQ6IDQwcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3Mge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxpc3RpbmcsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxpc3RpbmcsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHBsYWludGV4dCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwcmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgeG1wLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICB3aGl0ZS1zcGFjZTogcHJlO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjaXRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjaXRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZm4sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRmbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZW0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGVtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB2YXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHZhciB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3Ryb25nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBrYmQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGtiZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2FtcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2FtcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHR0IHtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYmlnLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBiaWcge1xuICBmb250LXNpemU6IGxhcmdlcjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc21hbGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNtYWxsIHtcbiAgZm9udC1zaXplOiBzbWFsbGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdWIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1YiB7XG4gIHZlcnRpY2FsLWFsaWduOiBzdWI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1cCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3VwIHtcbiAgdmVydGljYWwtYWxpZ246IHN1cGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdWIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1Yixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdXAge1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBmb250LXNpemU6IHNtYWxsZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ1YnksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ1Ynkge1xuICBkaXNwbGF5OiBydWJ5O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCByYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmIge1xuICBkaXNwbGF5OiBydWJ5LWJhc2U7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydCB7XG4gIGRpc3BsYXk6IHJ1YnktdGV4dDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZm9udC1zaXplOiA1MCU7XG4gIGZvbnQtdmFyaWFudC1lYXN0LWFzaWFuOiBydWJ5O1xuICB0ZXh0LWVtcGhhc2lzOiBub25lO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCByYmMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiYyB7XG4gIGRpc3BsYXk6IHJ1YnktYmFzZS1jb250YWluZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0Yyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnRjIHtcbiAgZGlzcGxheTogcnVieS10ZXh0LWNvbnRhaW5lcjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnVieSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnVieSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiYyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmJjLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydGMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0YyB7XG4gIHVuaWNvZGUtYmlkaTogaXNvbGF0ZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmxpbmssXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDpsaW5rIHtcbiAgY29sb3I6ICMwMDAwRUU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDp2aXNpdGVkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6dmlzaXRlZCB7XG4gIGNvbG9yOiAjNTUxQThCO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6bGluayxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmxpbmssXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDp2aXNpdGVkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6dmlzaXRlZCB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhOmxpbmtbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYTpsaW5rW3JlbH49aGVscF0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGE6dmlzaXRlZFtyZWx+PWhlbHBdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhOnZpc2l0ZWRbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYXJlYTpsaW5rW3JlbH49aGVscF0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFyZWE6bGlua1tyZWx+PWhlbHBdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhcmVhOnZpc2l0ZWRbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYXJlYTp2aXNpdGVkW3JlbH49aGVscF0ge1xuICBjdXJzb3I6IGhlbHA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDpmb2N1cyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmZvY3VzIHtcbiAgb3V0bGluZTogYXV0bztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbWFyayxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbWFyayB7XG4gIGJhY2tncm91bmQ6IHllbGxvdztcbiAgY29sb3I6IGJsYWNrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhYmJyW3RpdGxlXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYWJiclt0aXRsZV0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFjcm9ueW1bdGl0bGVdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhY3JvbnltW3RpdGxlXSB7XG4gIHRleHQtZGVjb3JhdGlvbjogZG90dGVkIHVuZGVybGluZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5zLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHUge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN0cmlrZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3RyaWtlIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsaW5rLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibGluayB7XG4gIHRleHQtZGVjb3JhdGlvbjogYmxpbms7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHE6OmJlZm9yZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcTo6YmVmb3JlIHtcbiAgY29udGVudDogb3Blbi1xdW90ZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcTo6YWZ0ZXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHE6OmFmdGVyIHtcbiAgY29udGVudDogY2xvc2UtcXVvdGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJyOjpiZWZvcmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJyOjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxBJztcbiAgd2hpdGUtc3BhY2U6IHByZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbm9icixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbm9iciB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHdicixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgd2JyIHtcbiAgY29udGVudDogJ1xcMjAwQic7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG5vYnIgd2JyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBub2JyIHdiciB7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFydGljbGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFydGljbGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFzaWRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhc2lkZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDEsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgxLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgzLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaGdyb3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoZ3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG5hdixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbmF2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzZWN0aW9uLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzZWN0aW9uIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgxLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMSB7XG4gIG1hcmdpbi10b3A6IDAuNjdlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC42N2VtO1xuICBmb250LXNpemU6IDIuMDBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMiB7XG4gIG1hcmdpbi10b3A6IDAuODNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC44M2VtO1xuICBmb250LXNpemU6IDEuNTBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgzLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMyB7XG4gIG1hcmdpbi10b3A6IDEuMDBlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS4wMGVtO1xuICBmb250LXNpemU6IDEuMTdlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNCB7XG4gIG1hcmdpbi10b3A6IDEuMzNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS4zM2VtO1xuICBmb250LXNpemU6IDEuMDBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg1LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNSB7XG4gIG1hcmdpbi10b3A6IDEuNjdlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS42N2VtO1xuICBmb250LXNpemU6IDAuODNlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNiB7XG4gIG1hcmdpbi10b3A6IDIuMzNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMi4zM2VtO1xuICBmb250LXNpemU6IDAuNjdlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGR0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsaSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGkge1xuICBkaXNwbGF5OiBsaXN0LWl0ZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHtcbiAgbWFyZ2luLXRvcDogMWVtO1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGQge1xuICBtYXJnaW4tbGVmdDogNDBweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHtcbiAgcGFkZGluZy1sZWZ0OiA0MHB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wge1xuICBsaXN0LXN0eWxlLXR5cGU6IGRlY2ltYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwge1xuICBsaXN0LXN0eWxlLXR5cGU6IGRpc2M7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHVsIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwgdWwge1xuICBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlIHtcbiAgZGlzcGxheTogdGFibGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNhcHRpb24ge1xuICBkaXNwbGF5OiB0YWJsZS1jYXB0aW9uO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sZ3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbGdyb3VwW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbGdyb3VwW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW4tZ3JvdXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW47XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aGVhZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWRbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWRbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keVtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keVtoaWRkZW5dIHtcbiAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGZvb3QsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1mb290ZXItZ3JvdXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHJbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHJbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IHRhYmxlLXJvdztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cFtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cFtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0ge1xuICB2aXNpYmlsaXR5OiBjb2xsYXBzZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXNwYWNpbmc6IDJweDtcbiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbiAgdGV4dC1pbmRlbnQ6IGluaXRpYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoIHtcbiAgcGFkZGluZzogMXB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUgPiB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUgPiB0ciB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgge1xuICB2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCB7XG4gIGJvcmRlci1jb2xvcjogZ3JheTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyIHtcbiAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNlbGVjdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2VsZWN0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9wdGlvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb3B0Z3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9wdGdyb3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBidXR0b24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGV4dGFyZWEsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRleHRhcmVhLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBrZXlnZW4sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGtleWdlbiB7XG4gIHRleHQtaW5kZW50OiBpbml0aWFsO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZXh0YXJlYSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGV4dGFyZWEge1xuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dFt0eXBlPVwicmVzZXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNlbGVjdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2VsZWN0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBidXR0b24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYnV0dG9uIHtcbiAgcGFkZGluZzogMC4zZW0gMC41ZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBociB7XG4gIGNvbG9yOiBncmF5O1xuICBib3JkZXItc3R5bGU6IGluc2V0O1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgbWFyZ2luOiAwLjVlbSBhdXRvO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWVsZHNldCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZmllbGRzZXQge1xuICBtYXJnaW4tbGVmdDogMnB4O1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgYm9yZGVyOiBncm9vdmUgMnB4IFRocmVlREZhY2U7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGVnZW5kLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsZWdlbmQge1xuICBwYWRkaW5nLWxlZnQ6IDJweDtcbiAgcGFkZGluZy1yaWdodDogMnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA+ICo6Zmlyc3QtY2hpbGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gKjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAqOmxhc3QtY2hpbGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gKjpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50LmxheW91dC1jb250ZW50LWltYWdlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gaW1nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sLmxheW91dC1jb250ZW50LWltYWdlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gaW1nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50LmxheW91dC1jb250ZW50LXZlY3Rvci1pbWFnZSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb250ZW50LW1hcmt1cCA+IGltZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbC5sYXlvdXQtY29udGVudC12ZWN0b3ItaW1hZ2UgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiBpbWcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmxheW91dC1lZGl0b3IgLmltZy1yZXNwb25zaXZlLFxuLmxheW91dC1lZGl0b3IgLmltZy1yZXNwb25zaXZlIGltZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1sZWZ0OiAxMnB4O1xuICB3aWR0aDogMjIwcHg7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNGU1ZTY7XG4gIHdpZHRoOiAyMjBweDtcbiAgbWluLWhlaWdodDogNDAwcHg7XG4gIHBhZGRpbmc6IDZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjRmNTtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3guc3RpY2t5LXRvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveC5zdGlja3ktYm90dG9tIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCB7XG4gIG1hcmdpbi10b3A6IDEycHg7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCAubGF5b3V0LXRvb2xib3gtZ3JvdXAtaGVhZGluZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIC5sYXlvdXQtdG9vbGJveC1ncm91cC1oZWFkaW5nOmJlZm9yZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDEwcHg7XG4gIG1hcmdpbi1yaWdodDogNHB4O1xuICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAxNHB4LzEgRm9udEF3ZXNvbWU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29udGVudDogXCJcXGYwZDdcIjtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwLmNvbGxhcHNlZCAubGF5b3V0LXRvb2xib3gtZ3JvdXAtaGVhZGluZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkYVwiO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAuY29sbGFwc2VkIC5sYXlvdXQtdG9vbGJveC1pdGVtcyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCAubGF5b3V0LXRvb2xib3gtc2VjdGlvbiArIC5sYXlvdXQtdG9vbGJveC1zZWN0aW9uIHtcbiAgbWFyZ2luLXRvcDogNHB4O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAgLmxheW91dC10b29sYm94LWl0ZW0ge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNWU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBwYWRkaW5nOiA5cHggMTJweDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAgLmxheW91dC10b29sYm94LWl0ZW0gaSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDE2cHg7XG4gIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIC5sYXlvdXQtdG9vbGJveC1pdGVtICsgLmxheW91dC10b29sYm94LWl0ZW0ge1xuICBtYXJnaW4tdG9wOiA0cHg7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCArIC5sYXlvdXQtdG9vbGJveC1ncm91cCB7XG4gIG1hcmdpbi10b3A6IDZweDtcbn1cblxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbWFyZ2luOiAwO1xuICAtbW96LWJveC1zaGFkb3c6IDNweCAzcHggMTFweCAwIHJnYmEoNTAsIDUwLCA1MCwgMC41KTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAzcHggM3B4IDExcHggMCByZ2JhKDUwLCA1MCwgNTAsIDAuNSk7XG4gIGJveC1zaGFkb3c6IDNweCAzcHggMTFweCAwIHJnYmEoNTAsIDUwLCA1MCwgMC41KTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U0ZTVlNjtcbiAgcGFkZGluZzogMnB4IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHotaW5kZXg6IDIwO1xuICBjb2xvcjogIzdjN2M3YztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBtaW4td2lkdGg6IDMwMHB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cC53aWRlIHtcbiAgd2lkdGg6IDYwMHB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCAubGF5b3V0LXBvcHVwLWZsZXgge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiAycHggNXB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCAubGF5b3V0LXBvcHVwLWZsZXggLmxheW91dC1wb3B1cC1jb2x1bW4gKyAubGF5b3V0LXBvcHVwLWNvbHVtbiB7XG4gIG1hcmdpbi1sZWZ0OiA0cHg7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiYSgxMjgsIDEyOCwgMTI4LCAwLjE1KTtcbiAgcGFkZGluZy1sZWZ0OiA0cHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtaXRlbSB7XG4gIHBhZGRpbmc6IDRweCA2cHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtbGFiZWwge1xuICBmb250LXNpemU6IDAuOWVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICM3YzdjN2M7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtYWN0aW9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjRmNTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCAubGF5b3V0LXBvcHVwLWlucHV0IGlucHV0W3R5cGU9J3RleHQnXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1pbnB1dCB0ZXh0YXJlYSB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCAubGF5b3V0LXBvcHVwLWlucHV0ID4gbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAwLjllbTtcbn1cbiIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3ItdG9vbGJhciB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgdG9wOiAxMHB4O1xyXG5cclxuICAgIC5sYXlvdXQtZWRpdG9yLXRvb2xiYXItZ3JvdXAge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcblxyXG4gICAgICAgID4gbGkgKyBsaSB7XHJcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMnB4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIG1hcmdpbi10b3A6IDFlbTtcclxuICAgIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZTtcclxuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xyXG5cclxuICAgID4gLmxheW91dC1jYW52YXMtd3JhcHBlciB7XHJcbiAgICAgICAgZmxleC1ncm93OiAxO1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBncmF5LWJnO1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBncmF5LWJvcmRlcjtcclxuXHJcbiAgICAgICAgPiAubGF5b3V0LXRvb2xiYXItY29udGFpbmVyIHtcclxuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICAgICAgbWFyZ2luOiBAY29udGFpbmVyLXBhZGRpbmcgQGNvbnRhaW5lci1wYWRkaW5nIDA7XHJcbiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDcxcHg7XHJcblxyXG4gICAgICAgICAgICA+IC5tY2UtcGFuZWwge1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA+IC5sYXlvdXQtcGxhY2Vob2xkZXIge1xyXG4gICAgICAgICAgICBib3JkZXI6IDFweCBkYXNoZWQgI2NjYztcclxuICAgICAgICAgICAgcGFkZGluZzogMC4yZW0gMC40ZW07XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNlOGU4ZTg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5sYXlvdXQtc25pcHBldCB7XHJcbiAgICAgICAgYmFja2dyb3VuZDogI2U4ZThlODtcclxuICAgIH1cclxufVxyXG5cclxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuXHJcbiAgICAuaGVscC1yb3cge1xyXG4gICAgICAgICY6YmVmb3JlLCAmOmFmdGVyIHtcclxuICAgICAgICAgICAgY29udGVudDogXCIgXCI7IC8vIDFcclxuICAgICAgICAgICAgZGlzcGxheTogdGFibGU7IC8vIDJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICY6YWZ0ZXIge1xyXG4gICAgICAgICAgICBjbGVhcjogYm90aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgID4gLmhlbHAtY29sdW1uLWZ1bGwsID4gLmhlbHAtY29sdW1uLWhhbGYge1xyXG4gICAgICAgICAgICBtYXJnaW46IDAuNWVtIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA+IC5oZWxwLWNvbHVtbi1oYWxmIHtcclxuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICAgICAgICAgIHdpZHRoOiA1MCU7XHJcblxyXG4gICAgICAgICAgICAmOm50aC1jaGlsZCgybikge1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMTBweDtcclxuICAgICAgICAgICAgICAgIGNsZWFyOiBsZWZ0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICArIC5oZWxwLXJvdyB7XHJcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDFlbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29kZSB7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjU7XHJcbiAgICAgICAgcGFkZGluZzogMnB4IDRweDtcclxuICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xyXG4gICAgfVxyXG5cclxuICAgIHAge1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTtcclxuICAgIH1cclxuXHJcbiAgICB0YWJsZSA+IHRib2R5ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCB7XHJcbiAgICAgICAgcGFkZGluZy1yaWdodDogMTBweDtcclxuICAgIH1cclxufVxyXG4iLCJAaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtZWxlbWVudCB7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDA7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgICAgICAgcGFkZGluZzogMDtcclxuXHJcbiAgICAgICAgLy8gV2UgZG9uJ3QgZnVjayB3aXRoIHRoZSBsZWZ0IG1hcmdpbiBvZiBjb2x1bW5zLCBiZWNhdXNlIEJvb3RzdHJhcCB1c2VzIHRoZXNlIHRvIHJlbmRlciBjb2x1bW4gb2Zmc2V0cy5cclxuICAgICAgICAmOm5vdCgubGF5b3V0LWNvbHVtbikge1xyXG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICA+IC5sYXlvdXQtcGFuZWwge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTsgLy8gU2hvd24gb25seSBpbiBhY3RpdmUgb3IgZm9jdXNlZCBzdGF0ZXMuXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAyMDtcclxuICAgICAgICAgICAgICAgIGhlaWdodDogMjVweDtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgNnB4O1xyXG4gICAgICAgICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcclxuICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMjVweDtcclxuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LXBhbmVsLWl0ZW0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDI1cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMXB4IDZweCAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1wYW5lbC1sYWJlbCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiBAZm9udC1zaXplIC0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lOyAvLyBTaG93biBvbmx5IGluIGZvY3VzZWQgc3RhdGUuXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDI4cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LXBhbmVsLW1haW4ge1xyXG4gICAgICAgICAgICAgICAgdG9wOiAtMjdweDtcclxuICAgICAgICAgICAgICAgIGxlZnQ6IC0ycHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gV2hlbiBkcmFnZ2luZyBmcm9tIHRvb2xib3gsIGVsZW1lbnRzIHdpbGwgYmUgbGkgcmF0aGVyIHRoYW4gZGl2LlxyXG4gICAgbGkubGF5b3V0LWVsZW1lbnQge1xyXG4gICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgJjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIHtcclxuXHJcbiAgICAgICAgLmxheW91dC1lbGVtZW50LWFjdGl2ZSwgLmxheW91dC1lbGVtZW50LWZvY3VzZWQge1xyXG4gICAgICAgICAgICBib3JkZXItd2lkdGg6IDJweDtcclxuICAgICAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luOiAtMnB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LWVsZW1lbnQtYWN0aXZlIHtcclxuICAgICAgICAgICAgQGFjdGl2ZS1oaWdobGlnaHQ6IGZhZGUoIzY4Njg2OCwgMTAlKTtcclxuXHJcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogQGFjdGl2ZS1oaWdobGlnaHQ7XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbC1tYWluIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOyAvLyBUbyByZXZlYWwuXHJcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAzMDtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBhY3RpdmUtaGlnaGxpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCB7XHJcbiAgICAgICAgICAgIEBmb2N1c2VkLWhpZ2hsaWdodDogIzY0ODcyMTtcclxuICAgICAgICAgICAgQGZvY3VzZWQtdGV4dDogI2ZlZmVmZTtcclxuXHJcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogQGZvY3VzZWQtaGlnaGxpZ2h0O1xyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7IC8vIFRvIHJldmVhbC5cclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBmb2N1c2VkLWhpZ2hsaWdodDtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBAZm9jdXNlZC10ZXh0O1xyXG5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1wYW5lbC1hY3Rpb24ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgLy8gVG8gcmV2ZWFsLlxyXG4gICAgICAgICAgICAgICAgICAgICY6aG92ZXIge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKEBmb2N1c2VkLWhpZ2hsaWdodCwgMTAlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICYuZGlzYWJsZWQge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBmYWRlKEBmb2N1c2VkLXRleHQsIDQwJSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBmb2N1c2VkLWhpZ2hsaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJi5hY3RpdmUge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogbGlnaHRlbihzYXR1cmF0ZShzcGluKEBmb2N1c2VkLWhpZ2hsaWdodCwgLTEwKSwgMTAwJSksIDMwJSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0ZW4oQGZvY3VzZWQtaGlnaGxpZ2h0LCA1JSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0ZW4oQGZvY3VzZWQtaGlnaGxpZ2h0LCAxMCUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LWVsZW1lbnQtc2VsZWN0ZWQge1xyXG4gICAgICAgICAgICBAc2VsZWN0ZWQtaGlnaGxpZ2h0OiAjNjQ4NzIxO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBmYWRlKEBzZWxlY3RlZC1oaWdobGlnaHQsIDglKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcclxuICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgfVxyXG5cclxuICAgIC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0IHtcclxuICAgICAgICBAZHJvcHRhcmdldC1oaWdobGlnaHQ6ICM2NDg3MjE7XHJcbiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDEycHggNnB4IGZhZGUoQGRyb3B0YXJnZXQtaGlnaGxpZ2h0LCA1MCUpO1xyXG5cclxuICAgICAgICAudWktc29ydGFibGUtcGxhY2Vob2xkZXIge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jazsgLy8gVG8gcmV2ZWFsLlxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IEBlbGVtZW50LW1pbi1oZWlnaHQgLSAycHg7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCBAZHJvcHRhcmdldC1oaWdobGlnaHQgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZmFkZShAZHJvcHRhcmdldC1oaWdobGlnaHQsIDE2JSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEEgQ1NTIGZpeCBmb3IgbWVkaWEgaXRlbSBlbGVtZW50cy5cclxuICAgIC5tZWRpYS10aHVtYm5haWwge1xyXG4gICAgICAgIGltZyB7XHJcbiAgICAgICAgICAgIG1heC13aWR0aDoxMDAlO1xyXG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJAaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtY29udGFpbmVyIHtcclxuXHJcbiAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtY29udGFpbmVyLWNoaWxkcmVuLXBsYWNlaG9sZGVyIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luOiBAY29udGFpbmVyLXBhZGRpbmcgLSAxcHg7XHJcbiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiBAZWxlbWVudC1taW4taGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIGZhZGUoQGdyYXktdGV4dCwgNDAlKTtcclxuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IEBjb250YWluZXItcGFkZGluZztcclxuICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiBAZm9udC1zaXplIC0gMTtcclxuICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcclxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNjtcclxuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWNoaWxkcmVuIHtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IEBjb250YWluZXItcGFkZGluZztcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBBbGwgYWRqYWNlbnQgbm9uLWNvbnRhaW5lciBjaGlsZHJlbiBuZWVkIHNvbWUgc3BhY2UgYmV0d2Vlbi4uLlxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29udGFpbmVyKSArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiBAY29udGVudC1zcGFjaW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIC4uLiBleGNlcHQgd2hlbiBqUXVlcnkgVUkgc29ydGFibGUgaGVscGVyIGlzIHRoZSBmaXJzdCBlbGVtZW50IChiZWNhdXNlIHRoYXQgb25lIGlzIGFic29sdXRlbHkgcG9zaXRpb25lZCBhbmQgXCJmbG9hdGluZ1wiKS5cclxuICAgICAgICAgICAgICAgID4gLnVpLXNvcnRhYmxlLWhlbHBlcjpmaXJzdC1jaGlsZCArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAmLmxheW91dC1jb250YWluZXItZW1wdHkge1xyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWNvbnRhaW5lci1jaGlsZHJlbi1wbGFjZWhvbGRlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDsgLy8gVG8gcmV2ZWFsLlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1jaGlsZHJlbiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogMDtcclxuICAgICAgICAgICAgICAgICAgICByaWdodDogMDtcclxuICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykge1xyXG4gICAgICAgIC5sYXlvdXQtY29udGFpbmVyLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4ge1xyXG4gICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIGZhZGUoQGdyYXktdGV4dCwgNjAlKTtcclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IC0xcHg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1jb250YWluZXIgKyAubGF5b3V0LWNvbnRhaW5lcjpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMDtcclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgLmxheW91dC1jYW52YXMge1xyXG4gICAgICAgICNkdW1teSB7IC8vIE9ubHkgYWRkZWQgYmVjYXVzZSBXRSBkb2Vzbid0IGNvbXBpbGUgaWYgdGhlcmUgYXJlIG5vIHJ1bGVzLlxyXG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgLmxheW91dC1yb3cge1xyXG4gICAgICAgICYubGF5b3V0LWVsZW1lbnQtZm9jdXNlZDpub3QoLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuIHtcclxuICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGJvcmRlci10b3A6IDFweCBkYXNoZWQgZmFkZShAZ3JheS10ZXh0LCA2MCUpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtMXB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50ICsgLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgLmxheW91dC1jb2x1bW4ge1xyXG4gICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICA+IC5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXIge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgIHotaW5kZXg6IDMwO1xyXG4gICAgICAgICAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDE2cHg7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgICAgICAgICBjdXJzb3I6IGNvbC1yZXNpemU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhci1sZWZ0IHtcclxuICAgICAgICAgICAgICAgIGxlZnQ6IC02cHg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhci1yaWdodCB7XHJcbiAgICAgICAgICAgICAgICByaWdodDogLTZweDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyIHtcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5AaW1wb3J0IFwiUmVzZXQubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgLmxheW91dC1jb250ZW50LCAubGF5b3V0LWh0bWwge1xyXG4gICAgICAgIG1pbi1oZWlnaHQ6IDFlbTtcclxuXHJcbiAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgIC5sYXlvdXQtY29udGVudC1tYXJrdXAge1xyXG5cclxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDJweDtcclxuICAgICAgICAgICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcclxuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgdG8gSFRNTDUgVzNDIHN0YW5kYXJkIGRlZmF1bHQgc3R5bGluZyB3aXRoaW4gY29udGVudC5cclxuICAgICAgICAgICAgICAgIC5yZXNldCgpO1xyXG5cclxuICAgICAgICAgICAgICAgID4gKjpmaXJzdC1jaGlsZCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OyAvLyBJbXBvcnRhbnQgYmVjYXVzZSBzaXRlLmNzcyBvZiB0aGUgYWRtaW4gdGhlbWUgc3R5bGVzIGhlYWRpbmcgbWFyZ2lucyB3aXRoIGEgdmVyeSBoaWdoIHNwZWNpZmljaXR5LlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgID4gKjpsYXN0LWNoaWxkIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYubGF5b3V0LWNvbnRlbnQtaW1hZ2UsICYubGF5b3V0LWNvbnRlbnQtdmVjdG9yLWltYWdlIHtcclxuICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiBpbWcge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgICAgIGhlaWdodDogYXV0bztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAuaW1nLXJlc3BvbnNpdmUsIC5pbWctcmVzcG9uc2l2ZSBpbWcge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcclxuICAgICAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICB9XHJcbn1cclxuIiwi77u/LnJlc2V0KCkge1xyXG5cclxuICAgICoge1xyXG4gICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xyXG4gICAgfVxyXG5cclxuICAgIGFkZHJlc3MsIGJsb2NrcXVvdGUsIGNlbnRlciwgZGl2LCBmaWd1cmUsIGZpZ2NhcHRpb24sIGZvb3RlciwgZm9ybSxcclxuICAgIGhlYWRlciwgaHIsIGxlZ2VuZCwgbGlzdGluZywgcCwgcGxhaW50ZXh0LCBwcmUsIHhtcCB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICB9XHJcblxyXG4gICAgYmxvY2txdW90ZSwgZmlndXJlLCBsaXN0aW5nLCBwLCBwbGFpbnRleHQsIHByZSwgeG1wIHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAxZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMWVtO1xyXG4gICAgfVxyXG5cclxuICAgIGJsb2NrcXVvdGUsIGZpZ3VyZSB7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHg7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA0MHB4O1xyXG4gICAgfVxyXG5cclxuICAgIGFkZHJlc3Mge1xyXG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcclxuICAgIH1cclxuXHJcbiAgICBsaXN0aW5nLCBwbGFpbnRleHQsIHByZSwgeG1wIHtcclxuICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7XHJcbiAgICB9XHJcblxyXG4gICAgY2l0ZSwgZGZuLCBlbSwgaSwgdmFyIHtcclxuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XHJcbiAgICB9XHJcblxyXG4gICAgYiwgc3Ryb25nIHtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGNvZGUsIGtiZCwgc2FtcCwgdHQge1xyXG4gICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XHJcbiAgICB9XHJcblxyXG4gICAgYmlnIHtcclxuICAgICAgICBmb250LXNpemU6IGxhcmdlcjtcclxuICAgIH1cclxuXHJcbiAgICBzbWFsbCB7XHJcbiAgICAgICAgZm9udC1zaXplOiBzbWFsbGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHN1YiB7XHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHN1YjtcclxuICAgIH1cclxuXHJcbiAgICBzdXAge1xyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBzdXBlcjtcclxuICAgIH1cclxuXHJcbiAgICBzdWIsIHN1cCB7XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcclxuICAgICAgICBmb250LXNpemU6IHNtYWxsZXI7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHJ1Ynkge1xyXG4gICAgICAgIGRpc3BsYXk6IHJ1Ynk7XHJcbiAgICB9XHJcblxyXG4gICAgcmIge1xyXG4gICAgICAgIGRpc3BsYXk6IHJ1YnktYmFzZTtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgfVxyXG5cclxuICAgIHJ0IHtcclxuICAgICAgICBkaXNwbGF5OiBydWJ5LXRleHQ7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgICAgICBmb250LXNpemU6IDUwJTtcclxuICAgICAgICBmb250LXZhcmlhbnQtZWFzdC1hc2lhbjogcnVieTtcclxuICAgICAgICB0ZXh0LWVtcGhhc2lzOiBub25lO1xyXG4gICAgfVxyXG5cclxuICAgIHJiYyB7XHJcbiAgICAgICAgZGlzcGxheTogcnVieS1iYXNlLWNvbnRhaW5lcjtcclxuICAgIH1cclxuXHJcbiAgICBydGMge1xyXG4gICAgICAgIGRpc3BsYXk6IHJ1YnktdGV4dC1jb250YWluZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcnVieSwgcmIsIHJ0LCByYmMsIHJ0YyB7XHJcbiAgICAgICAgdW5pY29kZS1iaWRpOiBpc29sYXRlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICA6bGluayB7XHJcbiAgICAgICAgY29sb3I6ICMwMDAwRUU7XHJcbiAgICB9XHJcblxyXG4gICAgOnZpc2l0ZWQge1xyXG4gICAgICAgIGNvbG9yOiAjNTUxQThCO1xyXG4gICAgfVxyXG5cclxuICAgIDpsaW5rLCA6dmlzaXRlZCB7XHJcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XHJcbiAgICB9XHJcblxyXG4gICAgYTpsaW5rW3JlbH49aGVscF0sIGE6dmlzaXRlZFtyZWx+PWhlbHBdLFxyXG4gICAgYXJlYTpsaW5rW3JlbH49aGVscF0sIGFyZWE6dmlzaXRlZFtyZWx+PWhlbHBdIHtcclxuICAgICAgICBjdXJzb3I6IGhlbHA7XHJcbiAgICB9XHJcblxyXG4gICAgOmZvY3VzIHtcclxuICAgICAgICBvdXRsaW5lOiBhdXRvO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcmsge1xyXG4gICAgICAgIGJhY2tncm91bmQ6IHllbGxvdztcclxuICAgICAgICBjb2xvcjogYmxhY2s7XHJcbiAgICB9XHJcbiAgICAvKiB0aGlzIGNvbG9yIGlzIGp1c3QgYSBzdWdnZXN0aW9uIGFuZCBjYW4gYmUgY2hhbmdlZCBiYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBmZWVkYmFjayAqL1xyXG4gICAgYWJiclt0aXRsZV0sIGFjcm9ueW1bdGl0bGVdIHtcclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IGRvdHRlZCB1bmRlcmxpbmU7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zLCB1IHtcclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcclxuICAgIH1cclxuXHJcbiAgICBkZWwsIHMsIHN0cmlrZSB7XHJcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XHJcbiAgICB9XHJcblxyXG4gICAgYmxpbmsge1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogYmxpbms7XHJcbiAgICB9XHJcblxyXG4gICAgcTo6YmVmb3JlIHtcclxuICAgICAgICBjb250ZW50OiBvcGVuLXF1b3RlO1xyXG4gICAgfVxyXG5cclxuICAgIHE6OmFmdGVyIHtcclxuICAgICAgICBjb250ZW50OiBjbG9zZS1xdW90ZTtcclxuICAgIH1cclxuXHJcbiAgICBicjo6YmVmb3JlIHtcclxuICAgICAgICBjb250ZW50OiAnXFxBJztcclxuICAgICAgICB3aGl0ZS1zcGFjZTogcHJlO1xyXG4gICAgfVxyXG4gICAgLyogdGhpcyBhbHNvIGhhcyBiaWRpIGltcGxpY2F0aW9ucyAqL1xyXG4gICAgbm9iciB7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgIH1cclxuXHJcbiAgICB3YnIge1xyXG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMEInO1xyXG4gICAgfVxyXG4gICAgLyogdGhpcyBhbHNvIGhhcyBiaWRpIGltcGxpY2F0aW9ucyAqL1xyXG4gICAgbm9iciB3YnIge1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XHJcbiAgICB9XHJcblxyXG4gICAgYXJ0aWNsZSwgYXNpZGUsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGhncm91cCwgbmF2LCBzZWN0aW9uIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIH1cclxuXHJcbiAgICBoMSB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMC42N2VtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuNjdlbTtcclxuICAgICAgICBmb250LXNpemU6IDIuMDBlbTtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICBoMiB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMC44M2VtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuODNlbTtcclxuICAgICAgICBmb250LXNpemU6IDEuNTBlbTtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICBoMyB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMS4wMGVtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEuMDBlbTtcclxuICAgICAgICBmb250LXNpemU6IDEuMTdlbTtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICBoNCB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMS4zM2VtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEuMzNlbTtcclxuICAgICAgICBmb250LXNpemU6IDEuMDBlbTtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICBoNSB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMS42N2VtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEuNjdlbTtcclxuICAgICAgICBmb250LXNpemU6IDAuODNlbTtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICBoNiB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMi4zM2VtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIuMzNlbTtcclxuICAgICAgICBmb250LXNpemU6IDAuNjdlbTtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICBkaXIsIGRkLCBkbCwgZHQsIG9sLCB1bCB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICB9XHJcblxyXG4gICAgbGkge1xyXG4gICAgICAgIGRpc3BsYXk6IGxpc3QtaXRlbTtcclxuICAgIH1cclxuXHJcbiAgICBkaXIsIGRsLCBvbCwgdWwge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDFlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxZW07XHJcbiAgICB9XHJcblxyXG4gICAgICAgIGRpciBkaXIsIGRpciBkbCwgZGlyIG9sLCBkaXIgdWwsXHJcbiAgICAgICAgZGwgZGlyLCBkbCBkbCwgZGwgb2wsIGRsIHVsLFxyXG4gICAgICAgIG9sIGRpciwgb2wgZGwsIG9sIG9sLCBvbCB1bCxcclxuICAgICAgICB1bCBkaXIsIHVsIGRsLCB1bCBvbCwgdWwgdWwge1xyXG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICBkZCB7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHg7XHJcbiAgICB9XHJcbiAgICAvKiBMVFItc3BlY2lmaWM6IHVzZSAnbWFyZ2luLXJpZ2h0JyBmb3IgcnRsIGVsZW1lbnRzICovXHJcbiAgICBkaXIsIG9sLCB1bCB7XHJcbiAgICAgICAgcGFkZGluZy1sZWZ0OiA0MHB4O1xyXG4gICAgfVxyXG4gICAgLyogTFRSLXNwZWNpZmljOiB1c2UgJ3BhZGRpbmctcmlnaHQnIGZvciBydGwgZWxlbWVudHMgKi9cclxuICAgIG9sIHtcclxuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IGRlY2ltYWw7XHJcbiAgICB9XHJcblxyXG4gICAgZGlyLCB1bCB7XHJcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBkaXNjO1xyXG4gICAgfVxyXG5cclxuICAgICAgICBkaXIgZGlyLCBkaXIgdWwsXHJcbiAgICAgICAgb2wgZGlyLCBvbCB1bCxcclxuICAgICAgICB1bCBkaXIsIHVsIHVsIHtcclxuICAgICAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZGlyIGRpciBkaXIsIGRpciBkaXIgdWwsXHJcbiAgICAgICAgICAgIGRpciBvbCBkaXIsIGRpciBvbCB1bCxcclxuICAgICAgICAgICAgZGlyIHVsIGRpciwgZGlyIHVsIHVsLFxyXG4gICAgICAgICAgICBvbCBkaXIgZGlyLCBvbCBkaXIgdWwsXHJcbiAgICAgICAgICAgIG9sIG9sIGRpciwgb2wgb2wgdWwsXHJcbiAgICAgICAgICAgIG9sIHVsIGRpciwgb2wgdWwgdWwsXHJcbiAgICAgICAgICAgIHVsIGRpciBkaXIsIHVsIGRpciB1bCxcclxuICAgICAgICAgICAgdWwgb2wgZGlyLCB1bCBvbCB1bCxcclxuICAgICAgICAgICAgdWwgdWwgZGlyLCB1bCB1bCB1bCB7XHJcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgIHRhYmxlIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBjYXB0aW9uIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jYXB0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbGdyb3VwLCBjb2xncm91cFtoaWRkZW5dIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jb2x1bW4tZ3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgY29sLCBjb2xbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtY29sdW1uO1xyXG4gICAgfVxyXG5cclxuICAgIHRoZWFkLCB0aGVhZFtoaWRkZW5dIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgdGJvZHksIHRib2R5W2hpZGRlbl0ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cDtcclxuICAgIH1cclxuXHJcbiAgICB0Zm9vdCwgdGZvb3RbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtZm9vdGVyLWdyb3VwO1xyXG4gICAgfVxyXG5cclxuICAgIHRyLCB0cltoaWRkZW5dIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7XHJcbiAgICB9XHJcblxyXG4gICAgdGQsIHRoLCB0ZFtoaWRkZW5dLCB0aFtoaWRkZW5dIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xyXG4gICAgfVxyXG5cclxuICAgICAgICBjb2xncm91cFtoaWRkZW5dLCBjb2xbaGlkZGVuXSwgdGhlYWRbaGlkZGVuXSwgdGJvZHlbaGlkZGVuXSxcclxuICAgICAgICB0Zm9vdFtoaWRkZW5dLCB0cltoaWRkZW5dLCB0ZFtoaWRkZW5dLCB0aFtoaWRkZW5dIHtcclxuICAgICAgICAgICAgdmlzaWJpbGl0eTogY29sbGFwc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIHRhYmxlIHtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIGJvcmRlci1zcGFjaW5nOiAycHg7XHJcbiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcclxuICAgICAgICB0ZXh0LWluZGVudDogaW5pdGlhbDtcclxuICAgIH1cclxuXHJcbiAgICB0ZCwgdGgge1xyXG4gICAgICAgIHBhZGRpbmc6IDFweDtcclxuICAgIH1cclxuXHJcbiAgICB0aCB7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhlYWQsIHRib2R5LCB0Zm9vdCwgdGFibGUgPiB0ciB7XHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICAgIH1cclxuXHJcbiAgICB0ciwgdGQsIHRoIHtcclxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDtcclxuICAgIH1cclxuXHJcbiAgICB0YWJsZSwgdGQsIHRoIHtcclxuICAgICAgICBib3JkZXItY29sb3I6IGdyYXk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhlYWQsIHRib2R5LCB0Zm9vdCwgdHIge1xyXG4gICAgICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdDtcclxuICAgIH1cclxuICAgIC8qdGFibGVbcnVsZXM9bm9uZSBpXSwgdGFibGVbcnVsZXM9Z3JvdXBzIGldLCB0YWJsZVtydWxlcz1yb3dzIGldLFxyXG50YWJsZVtydWxlcz1jb2xzIGldLCB0YWJsZVtydWxlcz1hbGwgaV0sIHRhYmxlW2ZyYW1lPXZvaWQgaV0sXHJcbnRhYmxlW2ZyYW1lPWFib3ZlIGldLCB0YWJsZVtmcmFtZT1iZWxvdyBpXSwgdGFibGVbZnJhbWU9aHNpZGVzIGldLFxyXG50YWJsZVtmcmFtZT1saHMgaV0sIHRhYmxlW2ZyYW1lPXJocyBpXSwgdGFibGVbZnJhbWU9dnNpZGVzIGldLFxyXG50YWJsZVtmcmFtZT1ib3ggaV0sIHRhYmxlW2ZyYW1lPWJvcmRlciBpXSxcclxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1yb3dzIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9cm93cyBpXSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9YWxsIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRoZWFkID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0aGVhZCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0aGVhZCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0aGVhZCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0aGVhZCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0aGVhZCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdGhlYWQgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1ub25lIGldID4gdGJvZHkgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdGJvZHkgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRib2R5ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9cm93cyBpXSA+IHRib2R5ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRib2R5ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9YWxsIGldID4gdGJvZHkgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1hbGwgaV0gPiB0Ym9keSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRmb290ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGZvb3QgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1yb3dzIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdGZvb3QgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1jb2xzIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdGZvb3QgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1hbGwgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRmb290ID4gdHIgPiB0aCB7XHJcbiAgICBib3JkZXItY29sb3I6IGJsYWNrO1xyXG59Ki9cclxuICAgIGlucHV0LCBzZWxlY3QsIG9wdGlvbiwgb3B0Z3JvdXAsIGJ1dHRvbiwgdGV4dGFyZWEsIGtleWdlbiB7XHJcbiAgICAgICAgdGV4dC1pbmRlbnQ6IGluaXRpYWw7XHJcbiAgICB9XHJcblxyXG4gICAgdGV4dGFyZWEge1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcclxuICAgIH1cclxuXHJcbiAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl0sIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSwgaW5wdXRbdHlwZT1cInJlc2V0XCJdLCBpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLFxyXG4gICAgaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSwgc2VsZWN0LCBidXR0b24ge1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICB9XHJcblxyXG4gICAgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSwgYnV0dG9uIHtcclxuICAgICAgICBwYWRkaW5nOiAwLjNlbSAwLjVlbTtcclxuICAgIH1cclxuXHJcbiAgICBociB7XHJcbiAgICAgICAgY29sb3I6IGdyYXk7XHJcbiAgICAgICAgYm9yZGVyLXN0eWxlOiBpbnNldDtcclxuICAgICAgICBib3JkZXItd2lkdGg6IDFweDtcclxuICAgICAgICBtYXJnaW46IDAuNWVtIGF1dG87XHJcbiAgICB9XHJcblxyXG4gICAgZmllbGRzZXQge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7XHJcbiAgICAgICAgYm9yZGVyOiBncm9vdmUgMnB4IFRocmVlREZhY2U7XHJcbiAgICAgICAgcGFkZGluZzogMC4zNWVtIDAuNjI1ZW0gMC43NWVtO1xyXG4gICAgfVxyXG5cclxuICAgIGxlZ2VuZCB7XHJcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7XHJcbiAgICAgICAgcGFkZGluZy1yaWdodDogMnB4O1xyXG4gICAgfVxyXG59XHJcbiIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciB7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiBAY29udGFpbmVyLXBhZGRpbmc7XHJcbiAgICAgICAgd2lkdGg6IDIyMHB4O1xyXG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xyXG5cclxuICAgICAgICA+IC5sYXlvdXQtdG9vbGJveCB7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBncmF5LWJvcmRlcjtcclxuICAgICAgICAgICAgd2lkdGg6IDIyMHB4O1xyXG4gICAgICAgICAgICBtaW4taGVpZ2h0OiA0MDBweDtcclxuICAgICAgICAgICAgcGFkZGluZzogQGNvbnRhaW5lci1wYWRkaW5nIC8gMjtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGdyYXktYmc7XHJcblxyXG4gICAgICAgICAgICAmLnN0aWNreS10b3Age1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICAgICAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICYuc3RpY2t5LWJvdHRvbSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICBib3R0b206IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC5sYXlvdXQtdG9vbGJveC1ncm91cCB7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiBAY29udGFpbmVyLXBhZGRpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgLmxheW91dC10b29sYm94LWdyb3VwLWhlYWRpbmcge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IEBjb250YWluZXItcGFkZGluZyAvIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMHB4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IEBjb250YWluZXItcGFkZGluZyAvIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjBkN1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAmLmNvbGxhcHNlZCB7XHJcbiAgICAgICAgICAgICAgICAgICAgLmxheW91dC10b29sYm94LWdyb3VwLWhlYWRpbmc6YmVmb3JlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwZGFcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC5sYXlvdXQtdG9vbGJveC1pdGVtcyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC5sYXlvdXQtdG9vbGJveC1zZWN0aW9uICsgLmxheW91dC10b29sYm94LXNlY3Rpb24ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IEBjb250YWluZXItcGFkZGluZyAvIDM7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLmxheW91dC10b29sYm94LWl0ZW0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBncmF5LWJvcmRlcjtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IChAY29udGFpbmVyLXBhZGRpbmcgLSAzKSBAY29udGFpbmVyLXBhZGRpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTZweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgKyAubGF5b3V0LXRvb2xib3gtaXRlbSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IEBjb250YWluZXItcGFkZGluZyAvIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICsgLmxheW91dC10b29sYm94LWdyb3VwIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiBAY29udGFpbmVyLXBhZGRpbmcgLyAyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgLmxheW91dC1wb3B1cCB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZTsgLy8gU2hvd24gb25seSBpbiBhY3RpdmUgb3IgZm9jdXNlZCBzdGF0ZXMuXHJcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAtbW96LWJveC1zaGFkb3c6IDNweCAzcHggMTFweCAwIHJnYmEoNTAsIDUwLCA1MCwgMC41KTtcclxuICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDNweCAzcHggMTFweCAwIHJnYmEoNTAsIDUwLCA1MCwgMC41KTtcclxuICAgICAgICBib3gtc2hhZG93OiAzcHggM3B4IDExcHggMCByZ2JhKDUwLCA1MCwgNTAsIDAuNSk7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgQGdyYXktYm9yZGVyO1xyXG4gICAgICAgIHBhZGRpbmc6IDJweCAwO1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XHJcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcclxuICAgICAgICB6LWluZGV4OiAyMDtcclxuICAgICAgICBjb2xvcjogQGdyYXktdGV4dDtcclxuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XHJcbiAgICAgICAgbWluLXdpZHRoOiAzMDBweDtcclxuXHJcbiAgICAgICAgJi53aWRlIHtcclxuICAgICAgICAgICAgd2lkdGg6IDYwMHB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1wb3B1cC1mbGV4IHtcclxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgICAgcGFkZGluZzogMnB4IDVweDtcclxuXHJcbiAgICAgICAgICAgIC5sYXlvdXQtcG9wdXAtY29sdW1uICsgLmxheW91dC1wb3B1cC1jb2x1bW4ge1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDRweDtcclxuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgZmFkZShncmF5LCAxNSUpO1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA0cHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtcG9wdXAtaXRlbSB7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDRweCA2cHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LXBvcHVwLWxhYmVsIHtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAwLjllbTtcclxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICAgICAgICAgIGNvbG9yOiBAZ3JheS10ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1wb3B1cC1hY3Rpb246aG92ZXIge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAZ3JheS1iZztcclxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1wb3B1cC1pbnB1dCB7XHJcbiAgICAgICAgICAgIGlucHV0W3R5cGU9J3RleHQnXSwgdGV4dGFyZWEge1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgID4gbGFiZWwge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDAuOWVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== */ diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css index 429a622a231..56beaf64572 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css @@ -1 +1 @@ -.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup cite,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dfn,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup em,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup i,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup var,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup cite,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dfn,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup em,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup i,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup var{font-style:italic}.layout-editor-toolbar{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;position:relative;top:10px}.layout-editor-toolbar .layout-editor-toolbar-group{display:-webkit-flex;display:-ms-flexbox;display:flex}.layout-editor-toolbar .layout-editor-toolbar-group>li+li{margin-left:12px}.layout-editor{display:-webkit-flex;display:-ms-flexbox;display:flex;margin-top:1em;font-size:14px;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.layout-editor>.layout-canvas-wrapper{-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;background-color:#f3f4f5;border:1px solid #e4e5e6}.layout-editor>.layout-canvas-wrapper>.layout-toolbar-container{display:none;margin:12px 12px 0;min-height:71px}.layout-editor>.layout-canvas-wrapper>.layout-toolbar-container>.mce-panel{width:100%!important}.layout-editor>.layout-canvas-wrapper .layout-content>.layout-element-wrapper .layout-content-markup>.layout-placeholder{border:1px dashed #ccc;padding:.2em .4em;background:#e8e8e8}.layout-editor .layout-snippet{background:#e8e8e8}.layout-editor-help-dialog{display:none}.layout-editor-help-dialog .help-row:after,.layout-editor-help-dialog .help-row:before{content:" ";display:table}.layout-editor-help-dialog .help-row:after{clear:both}.layout-editor-help-dialog .help-row>.help-column-full,.layout-editor-help-dialog .help-row>.help-column-half{margin:.5em 0}.layout-editor-help-dialog .help-row>.help-column-half{box-sizing:border-box;float:left;width:50%}.layout-editor-help-dialog .help-row>.help-column-half:nth-child(2n){padding-right:10px;clear:left}.layout-editor-help-dialog .help-row+.help-row{margin-top:1em}.layout-editor-help-dialog code{border-radius:4px;background-color:#f3f4f5;padding:2px 4px;font-family:monospace}.layout-editor-help-dialog p{margin-bottom:.5em;line-height:1.6em}.layout-editor-help-dialog table>tbody>tr>td:first-child{padding-right:10px}.layout-editor .layout-element{position:relative;margin-top:0;margin-right:0;margin-bottom:0;padding:0}.layout-editor .layout-element:not(.layout-column){margin-left:0}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel{display:none;position:absolute;margin:0;z-index:20;height:25px;padding:0 6px;list-style:none;white-space:nowrap;line-height:25px;vertical-align:middle}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-item{display:inline-block;height:25px;padding:1px 6px 0}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-label{font-size:13px}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-action{display:none;width:28px;cursor:pointer;text-align:center}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel-main{top:-27px;left:-2px}.layout-editor li.layout-element{list-style:none}.layout-editor:not(.layout-editor-dragging) .layout-element-active,.layout-editor:not(.layout-editor-dragging) .layout-element-focused{border-width:2px;border-style:solid}.layout-editor:not(.layout-editor-dragging) .layout-element-active>.layout-element-wrapper,.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper{margin:-2px}.layout-editor:not(.layout-editor-dragging) .layout-element-active{border-color:rgba(104,104,104,.1)}.layout-editor:not(.layout-editor-dragging) .layout-element-active>.layout-element-wrapper>.layout-panel-main{display:block;z-index:30;background-color:rgba(104,104,104,.1)}.layout-editor:not(.layout-editor-dragging) .layout-element-focused{border-color:#648721}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel{display:block;background-color:#648721;color:#fefefe}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action{display:inline-block}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action:hover{background-color:#82b02b}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.disabled{cursor:default;color:rgba(254,254,254,.4)}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.disabled:hover{background-color:#648721}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.active{color:#deff42;background-color:#739b26}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.active:hover{background-color:#82b02b}.layout-editor:not(.layout-editor-dragging) .layout-element-selected{background-color:rgba(100,135,33,.08)}.layout-editor .ui-sortable-placeholder{display:none}.layout-editor .layout-element-droptarget{box-shadow:inset 0 0 12px 6px rgba(100,135,33,.5)}.layout-editor .layout-element-droptarget .ui-sortable-placeholder{display:block;visibility:visible!important;min-height:78px;border:2px dashed #648721!important;background-color:rgba(100,135,33,.16)}.layout-editor .media-thumbnail img{max-width:100%;max-height:100%}.layout-editor .layout-container>.layout-element-wrapper>.layout-container-children-placeholder{display:none;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin:11px;min-height:80px;border:1px dashed rgba(124,124,124,.4);border-radius:4px;padding:12px;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;font-size:13px;font-style:italic;opacity:.6;text-align:center}.layout-editor .layout-container>.layout-element-wrapper>.layout-children{padding:12px}.layout-editor .layout-container>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-container)+.layout-element:not(.layout-container){margin-top:12px}.layout-editor .layout-container>.layout-element-wrapper>.layout-children>.ui-sortable-helper:first-child+.layout-element:not(.layout-container){margin-top:0}.layout-editor .layout-container>.layout-element-wrapper.layout-container-empty>.layout-container-children-placeholder{display:-webkit-flex;display:-ms-flexbox;display:flex}.layout-editor .layout-container>.layout-element-wrapper.layout-container-empty>.layout-children{position:absolute;top:0;right:0;bottom:0;left:0}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active){border:1px dashed rgba(124,124,124,.6)}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin:-1px}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-container+.layout-container:not(.layout-element-active){border-top:0}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-container+.layout-container:not(.layout-element-active)>.layout-element-wrapper{margin-top:0}.layout-editor .layout-canvas #dummy{display:none}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active){border-top:1px dashed rgba(124,124,124,.6)!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin-top:-1px!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element+.layout-element:not(.layout-element-active){border-left:0!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element+.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin-left:0!important}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar{display:none;position:absolute;z-index:30;top:0;width:16px;height:100%;cursor:col-resize}.layout-editor .layout-column.layout-element-focused>.layout-element-wrapper>.layout-column-resize-bar,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup center,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup div,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figcaption,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup footer,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup form,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup header,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup center,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup div,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figcaption,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup footer,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup form,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup header,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{display:block}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar-left{left:-6px}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar-right{right:-6px}.layout-editor .layout-content,.layout-editor .layout-html{min-height:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup{padding:2px;overflow-x:hidden;line-height:normal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup *,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup *{margin:0;padding:0;box-sizing:content-box}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{margin-top:1em;margin-bottom:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure{margin-left:40px;margin-right:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{font-family:monospace;white-space:pre}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup b,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup strong,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup b,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup strong{font-weight:bolder}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup code,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup kbd,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup samp,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup code,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup kbd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup samp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tt{font-family:monospace}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup big,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup big{font-size:larger}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup small,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup small{font-size:smaller}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sub{vertical-align:sub}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sup{vertical-align:super}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sup{line-height:normal;font-size:smaller}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ruby,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ruby{display:ruby}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rb{display:ruby-base;white-space:nowrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rt{display:ruby-text;white-space:nowrap;font-size:50%;font-variant-east-asian:ruby;-webkit-text-emphasis:none;text-emphasis:none}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rbc{display:ruby-base-container}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rtc{display:ruby-text-container}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup article,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup aside,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dt,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nav,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup section,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup article,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup aside,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nav,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup section,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{display:block}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ruby,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ruby{unicode-bidi:isolate}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :link{color:#00E}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :visited{color:#551A8B}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :visited{text-decoration:underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup a:link[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup a:visited[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup area:link[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup area:visited[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup a:link[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup a:visited[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup area:link[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup area:visited[rel~=help]{cursor:help}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :focus,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :focus{outline:auto}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup mark,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup mark{background:#ff0;color:#000}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup abbr[title],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup acronym[title],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup abbr[title],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup acronym[title]{text-decoration:dotted underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ins,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup u,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ins,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup u{text-decoration:underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup del,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup s,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup strike,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup del,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup s,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup strike{text-decoration:line-through}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blink,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blink{text-decoration:blink}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup q::before,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup q::before{content:open-quote}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup q::after,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup q::after{content:close-quote}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup br::before,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup br::before{content:'\A';white-space:pre}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nobr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nobr{white-space:nowrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup wbr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup wbr{content:'\200B'}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nobr wbr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nobr wbr{white-space:normal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h1{margin-top:.67em;margin-bottom:.67em;font-size:2em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h2{margin-top:.83em;margin-bottom:.83em;font-size:1.5em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h3{margin-top:1em;margin-bottom:1em;font-size:1.17em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h4{margin-top:1.33em;margin-bottom:1.33em;font-size:1em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h5{margin-top:1.67em;margin-bottom:1.67em;font-size:.83em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h6{margin-top:2.33em;margin-bottom:2.33em;font-size:.67em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup li,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup li{display:list-item}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{margin-top:1em;margin-bottom:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul{margin-top:0;margin-bottom:0}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dd{margin-left:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{padding-left:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol{list-style-type:decimal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{list-style-type:disc}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul{list-style-type:circle}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul ul{list-style-type:square}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table{display:table;box-sizing:border-box;border-spacing:2px;border-collapse:separate;text-indent:initial}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup caption,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup caption{display:table-caption}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup[hidden]{display:table-column-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col[hidden]{display:table-column}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead[hidden]{display:table-header-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody[hidden]{display:table-row-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot[hidden]{display:table-footer-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr[hidden]{display:table-row}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th[hidden]{display:table-cell}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr[hidden]{visibility:collapse}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{padding:1px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table>tr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table>tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead{vertical-align:middle}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr{vertical-align:inherit}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{border-color:gray}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr{border-color:inherit}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup keygen,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup optgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup option,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup textarea,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup keygen,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup optgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup option,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup textarea{text-indent:initial}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup textarea,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup textarea{white-space:pre-wrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=radio],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=checkbox],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=reset],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=submit],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=radio],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=checkbox],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=reset],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=submit],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup select{box-sizing:border-box}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=button]{padding:.3em .5em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hr{color:gray;border-style:inset;border-width:1px;margin:.5em auto}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup fieldset,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup fieldset{margin-left:2px;margin-right:2px;border:2px groove ThreeDFace;padding:.35em .625em .75em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup legend{padding-left:2px;padding-right:2px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup>:first-child,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup>:first-child{margin-top:0!important}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup>:last-child,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup>:last-child{margin-bottom:0!important}.layout-editor .img-responsive,.layout-editor .img-responsive img,.layout-editor .layout-content.layout-content-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-content.layout-content-vector-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-html.layout-content-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-html.layout-content-vector-image>.layout-element-wrapper>.layout-content-markup>img{display:block;width:100%;max-width:100%;height:auto}.layout-editor>.layout-toolbox-wrapper{position:relative;margin-left:12px;width:220px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox{border:1px solid #e4e5e6;width:220px;min-height:400px;padding:6px;background-color:#f3f4f5}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox.sticky-top{position:fixed;top:0;max-height:100%;overflow-y:auto}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox.sticky-bottom{position:absolute;bottom:0}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group{margin-top:12px}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item+.layout-toolbox-item,.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-section+.layout-toolbox-section{margin-top:4px}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading{display:block;margin-bottom:4px;text-decoration:none}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading:before{display:inline-block;width:10px;margin-right:4px;font:normal normal normal 14px/1 FontAwesome;text-align:center;content:"\f0d7"}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-group-heading:before{content:"\f0da"}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-items{display:none}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item{border:1px solid #e4e5e6;background-color:#fff;padding:9px 12px;cursor:default}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item i{display:inline-block;width:16px;font:normal normal normal 14px/1 FontAwesome}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group+.layout-toolbox-group{margin-top:6px}.layout-editor .layout-popup{display:none;position:absolute;margin:0;box-shadow:3px 3px 11px 0 rgba(50,50,50,.5);border:1px solid #e4e5e6;padding:2px 0;background-color:#f7f7f7;list-style:none;z-index:20;color:#7c7c7c;text-align:left;cursor:default;white-space:nowrap;line-height:normal;min-width:300px}.layout-editor .layout-popup.wide{width:600px}.layout-editor .layout-popup .layout-popup-flex{display:-webkit-flex;display:-ms-flexbox;display:flex;padding:2px 5px}.layout-editor .layout-popup .layout-popup-flex .layout-popup-column+.layout-popup-column{margin-left:4px;border-left:1px solid rgba(128,128,128,.15);padding-left:4px}.layout-editor .layout-popup .layout-popup-item{padding:4px 6px}.layout-editor .layout-popup .layout-popup-label{font-size:.9em;font-weight:700;color:#7c7c7c}.layout-editor .layout-popup .layout-popup-action:hover{background-color:#f3f4f5;cursor:pointer}.layout-editor .layout-popup .layout-popup-input input[type=text],.layout-editor .layout-popup .layout-popup-input textarea{width:100%}.layout-editor .layout-popup .layout-popup-input>label{display:block;font-size:.9em} \ No newline at end of file +body .layout-toolbox-item{border:1px solid #e4e5e6;background-color:#fff;padding:9px 12px;cursor:default;list-style-type:none}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item i,body .layout-toolbox-item i{display:inline-block;width:16px;font:14px/1 FontAwesome}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item+.layout-toolbox-item,.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-section+.layout-toolbox-section,body .layout-toolbox-item+.layout-toolbox-item{margin-top:4px}.layout-editor-toolbar{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;position:relative;top:10px}.layout-editor .layout-container>.layout-element-wrapper.layout-container-empty>.layout-container-children-placeholder,.layout-editor-toolbar .layout-editor-toolbar-group{display:-webkit-flex;display:-ms-flexbox;display:flex}.layout-editor-toolbar .layout-editor-toolbar-group>li+li{margin-left:12px}.layout-editor{display:-webkit-flex;display:-ms-flexbox;display:flex;margin-top:1em;font-size:14px;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.layout-editor>.layout-canvas-wrapper{-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;background-color:#f3f4f5;border:1px solid #e4e5e6}.layout-editor>.layout-canvas-wrapper>.layout-toolbar-container{display:none;margin:12px 12px 0;min-height:71px}.layout-editor>.layout-canvas-wrapper>.layout-toolbar-container>.mce-panel{width:100%!important}.layout-editor>.layout-canvas-wrapper .layout-content>.layout-element-wrapper .layout-content-markup>.layout-placeholder{border:1px dashed #ccc;padding:.2em .4em;background:#e8e8e8}.layout-editor .layout-snippet{background:#e8e8e8}.layout-editor .layout-canvas #dummy,.layout-editor .ui-sortable-placeholder,.layout-editor-help-dialog,.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-items{display:none}.layout-editor-help-dialog .help-row:after,.layout-editor-help-dialog .help-row:before{content:" ";display:table}.layout-editor-help-dialog .help-row:after{clear:both}.layout-editor-help-dialog .help-row>.help-column-full,.layout-editor-help-dialog .help-row>.help-column-half{margin:.5em 0}.layout-editor-help-dialog .help-row>.help-column-half{box-sizing:border-box;float:left;width:50%}.layout-editor-help-dialog .help-row>.help-column-half:nth-child(2n){padding-right:10px;clear:left}.layout-editor-help-dialog .help-row+.help-row{margin-top:1em}.layout-editor-help-dialog code{border-radius:4px;background-color:#f3f4f5;padding:2px 4px;font-family:monospace}.layout-editor-help-dialog p{margin-bottom:.5em;line-height:1.6em}.layout-editor-help-dialog table>tbody>tr>td:first-child{padding-right:10px}.layout-editor .layout-element{position:relative;margin-top:0;margin-right:0;margin-bottom:0;padding:0}.layout-editor .layout-element:not(.layout-column){margin-left:0}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel{display:none;position:absolute;margin:0;z-index:20;height:25px;padding:0 6px;list-style:none;white-space:nowrap;line-height:25px;vertical-align:middle}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-item{display:inline-block;height:25px;padding:1px 6px 0}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-label{font-size:13px}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-action{display:none;width:28px;cursor:pointer;text-align:center}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel-main{top:-27px;left:-2px}.layout-editor li.layout-element{list-style:none}.layout-editor:not(.layout-editor-dragging) .layout-element-active,.layout-editor:not(.layout-editor-dragging) .layout-element-focused{border-width:2px;border-style:solid}.layout-editor:not(.layout-editor-dragging) .layout-element-active>.layout-element-wrapper,.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper{margin:-2px}.layout-editor:not(.layout-editor-dragging) .layout-element-active{border-color:rgba(104,104,104,.1)}.layout-editor:not(.layout-editor-dragging) .layout-element-active>.layout-element-wrapper>.layout-panel-main{display:block;z-index:30;background-color:rgba(104,104,104,.1)}.layout-editor:not(.layout-editor-dragging) .layout-element-focused{border-color:#648721}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel{display:block;background-color:#648721;color:#fefefe}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action{display:inline-block}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.active:hover,.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action:hover{background-color:#82b02b}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.disabled{cursor:default;color:rgba(254,254,254,.4)}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.disabled:hover{background-color:#648721}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.active{color:#deff42;background-color:#739b26}.layout-editor:not(.layout-editor-dragging) .layout-element-selected{background-color:rgba(100,135,33,.08)}.layout-editor .layout-element-droptarget{box-shadow:inset 0 0 12px 6px rgba(100,135,33,.5)}.layout-editor .layout-element-droptarget .ui-sortable-placeholder{display:block;visibility:visible!important;min-height:78px;border:2px dashed #648721!important;background-color:rgba(100,135,33,.16)}.layout-editor .media-thumbnail img{max-width:100%;max-height:100%}.layout-editor .layout-container>.layout-element-wrapper>.layout-container-children-placeholder{display:none;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin:11px;min-height:80px;border:1px dashed rgba(124,124,124,.4);border-radius:4px;padding:12px;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;font-size:13px;font-style:italic;opacity:.6;text-align:center}.layout-editor .layout-container>.layout-element-wrapper>.layout-children{padding:12px}.layout-editor .layout-container>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-container)+.layout-element:not(.layout-container),.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group{margin-top:12px}.layout-editor .layout-container>.layout-element-wrapper>.layout-children>.ui-sortable-helper:first-child+.layout-element:not(.layout-container),.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-container+.layout-container:not(.layout-element-active)>.layout-element-wrapper{margin-top:0}.layout-editor .layout-container>.layout-element-wrapper.layout-container-empty>.layout-children{position:absolute;top:0;right:0;bottom:0;left:0}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active){border:1px dashed rgba(124,124,124,.6)}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin:-1px}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-container+.layout-container:not(.layout-element-active){border-top:0}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active){border-top:1px dashed rgba(124,124,124,.6)!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin-top:-1px!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element+.layout-element:not(.layout-element-active){border-left:0!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element+.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin-left:0!important}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar{display:none;position:absolute;z-index:30;top:0;width:16px;height:100%;cursor:col-resize}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar-left{left:-6px}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar-right{right:-6px}.layout-editor .layout-column.layout-element-focused>.layout-element-wrapper>.layout-column-resize-bar,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup article,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup aside,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup center,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup div,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dt,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figcaption,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup footer,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup form,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup header,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nav,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup section,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup article,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup aside,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup center,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup div,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figcaption,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup footer,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup form,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup header,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nav,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup section,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{display:block}.layout-editor .layout-content,.layout-editor .layout-html{min-height:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup{padding:2px;overflow-x:hidden;line-height:normal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup *,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup *{margin:0;padding:0;box-sizing:content-box}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{margin-top:1em;margin-bottom:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure{margin-left:40px;margin-right:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup cite,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dfn,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup em,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup i,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup var,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup cite,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dfn,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup em,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup i,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup var{font-style:italic}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{font-family:monospace;white-space:pre}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup b,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup strong,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup b,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup strong{font-weight:bolder}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup code,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup kbd,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup samp,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup code,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup kbd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup samp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tt{font-family:monospace}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup big,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup big{font-size:larger}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup small,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup small{font-size:smaller}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sub{vertical-align:sub}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sup{vertical-align:super}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sup{line-height:normal;font-size:smaller}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ruby,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ruby{display:ruby}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rb{display:ruby-base;white-space:nowrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rt{display:ruby-text;white-space:nowrap;font-size:50%;font-variant-east-asian:ruby;-webkit-text-emphasis:none;text-emphasis:none}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rbc{display:ruby-base-container}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rtc{display:ruby-text-container}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ruby,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ruby{unicode-bidi:isolate}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :link{color:#00e}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :visited{color:#551a8b}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ins,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup u,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ins,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup u{text-decoration:underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup a:link[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup a:visited[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup area:link[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup area:visited[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup a:link[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup a:visited[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup area:link[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup area:visited[rel~=help]{cursor:help}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :focus,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :focus{outline:auto}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup mark,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup mark{background:#ff0;color:#000}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup abbr[title],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup acronym[title],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup abbr[title],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup acronym[title]{text-decoration:dotted underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup del,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup s,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup strike,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup del,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup s,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup strike{text-decoration:line-through}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blink,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blink{text-decoration:blink}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup q::before,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup q::before{content:open-quote}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup q::after,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup q::after{content:close-quote}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup br::before,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup br::before{content:'\A';white-space:pre}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nobr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nobr{white-space:nowrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup wbr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup wbr{content:'\200B'}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nobr wbr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nobr wbr{white-space:normal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h1{margin-top:.67em;margin-bottom:.67em;font-size:2em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h2{margin-top:.83em;margin-bottom:.83em;font-size:1.5em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h3{margin-top:1em;margin-bottom:1em;font-size:1.17em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h4{margin-top:1.33em;margin-bottom:1.33em;font-size:1em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h5{margin-top:1.67em;margin-bottom:1.67em;font-size:.83em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h6{margin-top:2.33em;margin-bottom:2.33em;font-size:.67em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup li,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup li{display:list-item}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul{margin-top:0;margin-bottom:0}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dd{margin-left:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{padding-left:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol{list-style-type:decimal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{list-style-type:disc}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul{list-style-type:circle}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul ul{list-style-type:square}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table{display:table;box-sizing:border-box;border-spacing:2px;border-collapse:separate;text-indent:initial}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup caption,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup caption{display:table-caption}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup[hidden]{display:table-column-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col[hidden]{display:table-column}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead[hidden]{display:table-header-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody[hidden]{display:table-row-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot[hidden]{display:table-footer-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr[hidden]{display:table-row}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th[hidden]{display:table-cell}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr[hidden]{visibility:collapse}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{padding:1px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table>tr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table>tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead{vertical-align:middle}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr{vertical-align:inherit}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{border-color:gray}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr{border-color:inherit}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup keygen,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup optgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup option,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup textarea,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup keygen,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup optgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup option,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup textarea{text-indent:initial}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup textarea,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup textarea{white-space:pre-wrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=checkbox],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=radio],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=reset],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=submit],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=checkbox],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=radio],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=reset],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=submit],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup select{box-sizing:border-box}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=button]{padding:.3em .5em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hr{color:gray;border-style:inset;border-width:1px;margin:.5em auto}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup fieldset,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup fieldset{margin-left:2px;margin-right:2px;border:2px groove ThreeDFace;padding:.35em .625em .75em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup legend{padding-left:2px;padding-right:2px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup>:first-child,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup>:first-child{margin-top:0!important}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup>:last-child,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup>:last-child{margin-bottom:0!important}.layout-editor .img-responsive,.layout-editor .img-responsive img,.layout-editor .layout-content.layout-content-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-content.layout-content-vector-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-html.layout-content-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-html.layout-content-vector-image>.layout-element-wrapper>.layout-content-markup>img{display:block;width:100%;max-width:100%;height:auto}.layout-editor>.layout-toolbox-wrapper{margin-left:12px;width:218px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;max-height:calc(100vh - 80px);overflow-x:clip;overflow-y:auto;position:-webkit-sticky;position:sticky;top:0}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar{width:2px}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);border-radius:1px}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3)}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox{border:1px solid #e4e5e6;width:220px;min-height:400px;padding:6px;background-color:#f3f4f5}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox.sticky-top{position:fixed;top:0;max-height:100%;overflow-y:auto}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox.sticky-bottom{position:absolute;bottom:0}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading{display:block;margin-bottom:4px;text-decoration:none}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading:before{display:inline-block;width:10px;margin-right:4px;font:14px/1 FontAwesome;text-align:center;content:"\f0d7"}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-group-heading:before{content:"\f0da"}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item{border:1px solid #e4e5e6;background-color:#fff;padding:9px 12px;cursor:default}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group+.layout-toolbox-group{margin-top:6px}.layout-editor .layout-popup{display:none;position:absolute;margin:0;box-shadow:3px 3px 11px 0 rgba(50,50,50,.5);border:1px solid #e4e5e6;padding:2px 0;background-color:#f7f7f7;list-style:none;z-index:20;color:#7c7c7c;text-align:left;cursor:default;white-space:nowrap;line-height:normal;min-width:300px}.layout-editor .layout-popup.wide{width:600px}.layout-editor .layout-popup .layout-popup-flex{display:-webkit-flex;display:-ms-flexbox;display:flex;padding:2px 5px}.layout-editor .layout-popup .layout-popup-flex .layout-popup-column+.layout-popup-column{margin-left:4px;border-left:1px solid rgba(128,128,128,.15);padding-left:4px}.layout-editor .layout-popup .layout-popup-item{padding:4px 6px}.layout-editor .layout-popup .layout-popup-label{font-size:.9em;font-weight:700;color:#7c7c7c}.layout-editor .layout-popup .layout-popup-action:hover{background-color:#f3f4f5;cursor:pointer}.layout-editor .layout-popup .layout-popup-input input[type=text],.layout-editor .layout-popup .layout-popup-input textarea{width:100%}.layout-editor .layout-popup .layout-popup-input>label{display:block;font-size:.9em} \ No newline at end of file From a4be7c68cb163fdc5655a3cd94d0e44341017835 Mon Sep 17 00:00:00 2001 From: Hermes Sbicego Date: Fri, 29 Sep 2023 08:42:13 +0200 Subject: [PATCH 05/56] Fixes null culture (#8723) Fixes null culture bug and prevents to query the database if the requested culture is null or empty --- src/Orchard/Localization/Services/DefaultCultureManager.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Orchard/Localization/Services/DefaultCultureManager.cs b/src/Orchard/Localization/Services/DefaultCultureManager.cs index 16c6ade475d..90b258cb482 100644 --- a/src/Orchard/Localization/Services/DefaultCultureManager.cs +++ b/src/Orchard/Localization/Services/DefaultCultureManager.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Web; @@ -87,6 +87,9 @@ protected Dictionary GetAllCulturesByName() { }); } public CultureRecord GetCultureByName(string cultureName) { + if (string.IsNullOrWhiteSpace(cultureName)) { + return null; + } var cultures = GetAllCulturesByName(); CultureRecord result; cultures.TryGetValue(cultureName, out result); From 03884cbd6431721ffe69b03c69ba672a1cb44dc1 Mon Sep 17 00:00:00 2001 From: Andrea Piovanelli <83577153+AndreaPiovanelliLaser@users.noreply.github.com> Date: Fri, 27 Oct 2023 09:22:24 +0200 Subject: [PATCH 06/56] Lazy field loading using content item ContentManager instead of the injected one. (#8725) * Lazy field loading using content item ContentManager instead of the injected one. * Removed unused _contentManager variable --- .../Handlers/ContentPickerFieldHandler.cs | 6 ++---- .../Handlers/MediaLibraryPickerFieldHandler.cs | 7 ++----- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Handlers/ContentPickerFieldHandler.cs b/src/Orchard.Web/Modules/Orchard.ContentPicker/Handlers/ContentPickerFieldHandler.cs index 74ea52acbe6..d11d0d99bb4 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/Handlers/ContentPickerFieldHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Handlers/ContentPickerFieldHandler.cs @@ -6,14 +6,11 @@ namespace Orchard.ContentPicker.Handlers { public class ContentPickerFieldHandler : ContentHandler { - private readonly IContentManager _contentManager; private readonly IContentDefinitionManager _contentDefinitionManager; public ContentPickerFieldHandler( - IContentManager contentManager, IContentDefinitionManager contentDefinitionManager) { - _contentManager = contentManager; _contentDefinitionManager = contentDefinitionManager; } @@ -30,7 +27,8 @@ protected override void Loading(LoadContentContext context) { foreach (var field in fields) { var localField = field; - field._contentItems.Loader(() => _contentManager.GetMany(localField.Ids, VersionOptions.Published, QueryHints.Empty)); + // Using context content item's ContentManager instead of injected one to avoid lifetime scope exceptions in case of LazyFields. + field._contentItems.Loader(() => context.ContentItem.ContentManager.GetMany(localField.Ids, VersionOptions.Published, QueryHints.Empty)); } } } diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaLibraryPickerFieldHandler.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaLibraryPickerFieldHandler.cs index 8f29e137b89..06120947b9f 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaLibraryPickerFieldHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaLibraryPickerFieldHandler.cs @@ -9,16 +9,12 @@ namespace Orchard.MediaLibrary.Handlers { public class MediaLibraryPickerFieldHandler : ContentHandler { - private readonly IContentManager _contentManager; private readonly IContentDefinitionManager _contentDefinitionManager; public MediaLibraryPickerFieldHandler( - IContentManager contentManager, IContentDefinitionManager contentDefinitionManager) { - _contentManager = contentManager; _contentDefinitionManager = contentDefinitionManager; - } protected override void Loaded(LoadContentContext context) { @@ -37,7 +33,8 @@ private void InitilizeLoader(ContentItem contentItem) { foreach (var field in fields) { var localField = field; - localField._contentItems = new Lazy>(() => _contentManager.GetMany(localField.Ids, VersionOptions.Published, QueryHints.Empty).ToList()); + // Using context content item's ContentManager instead of injected one to avoid lifetime scope exceptions in case of LazyFields. + localField._contentItems = new Lazy>(() => contentItem.ContentManager.GetMany(localField.Ids, VersionOptions.Published, QueryHints.Empty).ToList()); } } } From 4e73190ae5c9ceaa2c9030e3d1fbd2ba598bcba2 Mon Sep 17 00:00:00 2001 From: Hermes Sbicego Date: Fri, 10 Nov 2023 08:49:36 +0100 Subject: [PATCH 07/56] Makes upgrade to Mailkit fully backward compatible --- .../Modules/Orchard.Email/Models/SmtpSettingsPart.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Email/Models/SmtpSettingsPart.cs b/src/Orchard.Web/Modules/Orchard.Email/Models/SmtpSettingsPart.cs index b710cf88173..d69c0c2b901 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Models/SmtpSettingsPart.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Models/SmtpSettingsPart.cs @@ -37,7 +37,7 @@ public int Port { public SmtpEncryptionMethod EncryptionMethod { #pragma warning disable CS0618 // Type or member is obsolete // Reading EnableSsl is necessary to keep the correct settings during the upgrade to MailKit. - get { return this.Retrieve(x => x.EncryptionMethod, EnableSsl ? SmtpEncryptionMethod.SslTls : SmtpEncryptionMethod.None); } + get { return this.Retrieve(x => x.EncryptionMethod, EnableSsl ? (Port == 587 ? SmtpEncryptionMethod.StartTls : SmtpEncryptionMethod.SslTls) : SmtpEncryptionMethod.None); } #pragma warning restore CS0618 // Type or member is obsolete set { this.Store(x => x.EncryptionMethod, value); } } @@ -82,4 +82,4 @@ public bool IsValid() { return true; } } -} \ No newline at end of file +} From 9644ceda1f9b077d44aaa4ffaab103c19a59ddba Mon Sep 17 00:00:00 2001 From: Hermes Sbicego Date: Fri, 17 Nov 2023 21:44:27 +0100 Subject: [PATCH 08/56] self closing divs ar not a W3C valid markup: Self-closing syntax (/>) used on a non-void HTML element. Ignoring the slash and treating as a start tag. (#8738) --- .../Orchard.MediaLibrary/Views/Media-Audio.Thumbnail.cshtml | 2 +- .../Orchard.MediaLibrary/Views/Media-Video.Thumbnail.cshtml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Media-Audio.Thumbnail.cshtml b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Media-Audio.Thumbnail.cshtml index 9eba697f41c..6e73dca6360 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Media-Audio.Thumbnail.cshtml +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Media-Audio.Thumbnail.cshtml @@ -10,4 +10,4 @@ } @* Don't render the audio tag as thumbnails or the whole file is downloaded automatically by browsers *@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Media-Video.Thumbnail.cshtml b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Media-Video.Thumbnail.cshtml index 37550c9c270..fbe03af50bd 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Media-Video.Thumbnail.cshtml +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Media-Video.Thumbnail.cshtml @@ -10,4 +10,4 @@ } @* Don't render the video tag as thumbnails or the whole file is downloaded automatically by browsers *@ -
+
From e013e00dd4e231542208b680bedc064cc730ab7a Mon Sep 17 00:00:00 2001 From: Matteo Piovanelli Date: Mon, 15 Jan 2024 17:15:33 +0100 Subject: [PATCH 09/56] Prevent TermsFilter from having to deal with empty strings (#8727) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Prevent TermsFilter from having to deal with empty strings: filter them out before parsing them to int in form, convert taxonomies to OptionGroups rather than options with no value * Update src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilter.cs Co-authored-by: Sébastien Ros --------- Co-authored-by: Sébastien Ros --- .../Orchard.Taxonomies/Projections/TermsFilter.cs | 5 ++++- .../Orchard.Taxonomies/Projections/TermsFilterForms.cs | 9 +++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilter.cs b/src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilter.cs index f07415f8bad..4a020f1ec65 100644 --- a/src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilter.cs +++ b/src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilter.cs @@ -36,7 +36,10 @@ public void ApplyFilter(dynamic context) { var termIds = (string)context.State.TermIds; if (!String.IsNullOrEmpty(termIds)) { - var ids = termIds.Split(new[] { ',' }).Select(Int32.Parse).ToArray(); + var ids = termIds.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) + // Int32.Parse throws for empty strings + .Where(x => !string.IsNullOrWhiteSpace(x)) + .Select(Int32.Parse).ToArray(); if (ids.Length == 0) { return; diff --git a/src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilterForms.cs b/src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilterForms.cs index c6cc27a4baf..8ce95cdb347 100644 --- a/src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilterForms.cs +++ b/src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilterForms.cs @@ -57,7 +57,8 @@ public void Describe(dynamic context) { ); foreach (var taxonomy in _taxonomyService.GetTaxonomies()) { - f._Terms.Add(new SelectListItem { Value = String.Empty, Text = taxonomy.Name }); + var tGroup = new SelectListGroup { Name = taxonomy.Name }; + f._Terms.Add(tGroup); foreach (var term in _taxonomyService.GetTerms(taxonomy.Id)) { var gap = new string('-', term.GetLevels()); @@ -65,7 +66,11 @@ public void Describe(dynamic context) { gap += " "; } - f._Terms.Add(new SelectListItem { Value = term.Id.ToString(), Text = gap + term.Name }); + f._Terms.Add(new SelectListItem { + Value = term.Id.ToString(), + Text = gap + term.Name, + Group = tGroup + }); } } From d943fbd83e87f6403cc407fae029682259d62fe8 Mon Sep 17 00:00:00 2001 From: Andrea Piovanelli <83577153+AndreaPiovanelliLaser@users.noreply.github.com> Date: Fri, 19 Jan 2024 10:29:52 +0100 Subject: [PATCH 10/56] Added StringComparer and forced lowercase where needed to ensure matching paths to ignore casing. (#8743) --- .../Modules/Orchard.Autoroute/Services/AutorouteService.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs index b3b90f12e36..bcc568e19b0 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs @@ -186,7 +186,7 @@ public void RemoveAliases(AutoroutePart part) { } public string GenerateUniqueSlug(AutoroutePart part, IEnumerable existingPaths) { - if (existingPaths == null || !existingPaths.Contains(part.Path)) + if (existingPaths == null || !existingPaths.Contains(part.Path, StringComparer.OrdinalIgnoreCase)) return part.Path; var version = existingPaths.Select(s => GetSlugVersion(part.Path, s)).OrderBy(i => i).LastOrDefault(); @@ -287,7 +287,8 @@ private string GetDefaultPatternIndex(string contentType, string culture) { private static int? GetSlugVersion(string path, string potentialConflictingPath) { int v; - var slugParts = potentialConflictingPath.Split(new[] { path }, StringSplitOptions.RemoveEmptyEntries); + // Matching needs to ignore case, so both paths are forced to lowercase. + var slugParts = potentialConflictingPath.ToLower().Split(new[] { path.ToLower() }, StringSplitOptions.RemoveEmptyEntries); if (slugParts.Length == 0) return 2; From 97648ed5a2a6c43074216786126ff8a207e6ac2f Mon Sep 17 00:00:00 2001 From: Matteo Piovanelli Date: Fri, 19 Jan 2024 16:41:29 +0100 Subject: [PATCH 11/56] Implemented ability to add localizations of selected terms to filter (#8730) --- .../Projections/TermsFilter.cs | 32 ++++++++++++++++--- .../Projections/TermsFilterForms.cs | 5 +++ 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilter.cs b/src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilter.cs index 4a020f1ec65..f5cff35789c 100644 --- a/src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilter.cs +++ b/src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilter.cs @@ -6,6 +6,8 @@ using Orchard.ContentManagement; using Orchard.Events; using Orchard.Localization; +using Orchard.Localization.Services; +using Orchard.Taxonomies.Drivers; namespace Orchard.Taxonomies.Projections { public interface IFilterProvider : IEventHandler { @@ -14,10 +16,13 @@ public interface IFilterProvider : IEventHandler { public class TermsFilter : IFilterProvider { private readonly ITaxonomyService _taxonomyService; + private readonly IWorkContextAccessor _workContextAccessor; private int _termsFilterId; - public TermsFilter(ITaxonomyService taxonomyService) { + public TermsFilter(ITaxonomyService taxonomyService, + IWorkContextAccessor workContextAccessor) { _taxonomyService = taxonomyService; + _workContextAccessor = workContextAccessor; T = NullLocalizer.Instance; } @@ -48,13 +53,30 @@ public void ApplyFilter(dynamic context) { int op = Convert.ToInt32(context.State.Operator); var terms = ids.Select(_taxonomyService.GetTerm).ToList(); + + bool.TryParse(context.State.TranslateTerms?.Value, out bool translateTerms); + if (translateTerms && + _workContextAccessor.GetContext().TryResolve(out var localizationService)) { + var localizedTerms = new List(); + foreach (var termPart in terms) { + localizedTerms.AddRange( + localizationService.GetLocalizations(termPart) + .Select(l => l.As())); + } + terms.AddRange(localizedTerms); + terms = terms.Distinct(new TermPartComparer()).ToList(); + } + var allChildren = new List(); + bool.TryParse(context.State.ExcludeChildren?.Value, out bool excludeChildren); foreach (var term in terms) { - bool.TryParse(context.State.ExcludeChildren?.Value, out bool excludeChildren); - if (!excludeChildren) + if (term == null) { + continue; + } + allChildren.Add(term); + if (!excludeChildren) { allChildren.AddRange(_taxonomyService.GetChildren(term)); - if (term != null) - allChildren.Add(term); + } } allChildren = allChildren.Distinct().ToList(); diff --git a/src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilterForms.cs b/src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilterForms.cs index 8ce95cdb347..6bbcd947f1c 100644 --- a/src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilterForms.cs +++ b/src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilterForms.cs @@ -53,6 +53,11 @@ public void Describe(dynamic context) { Id: "ExcludeChildren", Name: "ExcludeChildren", Title: T("Automatically exclude children terms in filtering"), Value: "true" + ), + _TranslateTerms: Shape.Checkbox( + Id: "TranslateTerms", Name: "TranslateTerms", + Title: T("Automatically include terms' localizations in filtering"), + Value: "true" ) ); From 90b104ed74234bdaaedf2b730166eddc66ad4d4c Mon Sep 17 00:00:00 2001 From: RichieOrtiz <33496769+RichieOrtiz@users.noreply.github.com> Date: Wed, 7 Feb 2024 04:09:07 -0500 Subject: [PATCH 12/56] Updated XML helper to support storing and parsing of Guid (#8717) * Updated XML helper to support storing and parsing of Guid * Adding Guid and Guid? assertions to XmlHelperTests * Restoring XmlHelper * Adding Guid and Guid? assertions to XmlHelperTests --------- Co-authored-by: Benedek Farkas --- .../ContentManagement/XmlHelperTests.cs | 60 +++++++++++++++---- src/Orchard/ContentManagement/XmlHelper.cs | 12 +++- 2 files changed, 60 insertions(+), 12 deletions(-) diff --git a/src/Orchard.Tests/ContentManagement/XmlHelperTests.cs b/src/Orchard.Tests/ContentManagement/XmlHelperTests.cs index bf1081ced42..85419fde206 100644 --- a/src/Orchard.Tests/ContentManagement/XmlHelperTests.cs +++ b/src/Orchard.Tests/ContentManagement/XmlHelperTests.cs @@ -7,6 +7,8 @@ namespace Orchard.Tests.ContentManagement { [TestFixture] public class XmlHelperTests { + private const string _testGuidString = "98f3dc0a-01c3-4975-bd52-1b4f5a678d73"; + [Test] public void AddEl() { var el = new XElement("data"); @@ -84,6 +86,14 @@ public void DateTimeToAttribute() { Assert.That(el.Attribute("foo").Value, Is.EqualTo("1970-05-21T13:55:21.934Z")); } + [Test] + public void GuidToAttribute() { + var el = new XElement("data"); + el.Attr("guid", new Guid(_testGuidString)); + + Assert.That(el.Attribute("guid").Value, Is.EqualTo(_testGuidString)); + } + [Test] public void DoubleFloatDecimalToAttribute() { var el = new XElement("data"); @@ -150,6 +160,14 @@ public void DoubleFloatDecimalToElement() { Assert.That(el.Element("decimal").Value, Is.EqualTo("12.458")); } + [Test] + public void GuidToElement() { + var el = new XElement("data"); + el.El("guid", new Guid(_testGuidString)); + + Assert.That(el.Element("guid").Value, Is.EqualTo(_testGuidString)); + } + [Test] public void ReadElement() { var el = XElement.Parse("bar"); @@ -168,12 +186,14 @@ public void SerializeObject() { ADouble = 12.345D, AFloat = 23.456F, ADecimal = 34.567M, + AGuid = new Guid(_testGuidString), ANullableInt = 42, ANullableBoolean = true, ANullableDate = new DateTime(1970, 5, 21, 13, 55, 21, 934, DateTimeKind.Utc), ANullableDouble = 12.345D, ANullableFloat = 23.456F, - ANullableDecimal = 34.567M + ANullableDecimal = 34.567M, + ANullableGuid = new Guid(_testGuidString) }; var el = new XElement("data"); el.With(target) @@ -184,12 +204,14 @@ public void SerializeObject() { .ToAttr(t => t.ADouble) .ToAttr(t => t.AFloat) .ToAttr(t => t.ADecimal) + .ToAttr(t => t.AGuid) .ToAttr(t => t.ANullableInt) .ToAttr(t => t.ANullableBoolean) .ToAttr(t => t.ANullableDate) .ToAttr(t => t.ANullableDouble) .ToAttr(t => t.ANullableFloat) - .ToAttr(t => t.ANullableDecimal); + .ToAttr(t => t.ANullableDecimal) + .ToAttr(t => t.ANullableGuid); Assert.That(el.Attr("AString"), Is.EqualTo("foo")); @@ -199,12 +221,14 @@ public void SerializeObject() { Assert.That(el.Attr("ADouble"), Is.EqualTo("12.345")); Assert.That(el.Attr("AFloat"), Is.EqualTo("23.456")); Assert.That(el.Attr("ADecimal"), Is.EqualTo("34.567")); + Assert.That(el.Attr("AGuid"), Is.EqualTo(_testGuidString)); Assert.That(el.Attr("ANullableInt"), Is.EqualTo("42")); Assert.That(el.Attr("ANullableBoolean"), Is.EqualTo("true")); Assert.That(el.Attr("ANullableDate"), Is.EqualTo("1970-05-21T13:55:21.934Z")); Assert.That(el.Attr("ANullableDouble"), Is.EqualTo("12.345")); Assert.That(el.Attr("ANullableFloat"), Is.EqualTo("23.456")); Assert.That(el.Attr("ANullableDecimal"), Is.EqualTo("34.567")); + Assert.That(el.Attr("ANullableGuid"), Is.EqualTo(_testGuidString)); } [Test] @@ -214,10 +238,10 @@ public void DeSerializeObject() { XElement.Parse( ""); + $"ANullableFloat=\"23.456\" ANullableDecimal=\"34.567\" ANullableGuid=\"{_testGuidString}\"/>"); el.With(target) .FromAttr(t => t.AString) .FromAttr(t => t.AnInt) @@ -226,12 +250,14 @@ public void DeSerializeObject() { .FromAttr(t => t.ADouble) .FromAttr(t => t.AFloat) .FromAttr(t => t.ADecimal) + .FromAttr(t => t.AGuid) .FromAttr(t => t.ANullableInt) .FromAttr(t => t.ANullableBoolean) .FromAttr(t => t.ANullableDate) .FromAttr(t => t.ANullableDouble) .FromAttr(t => t.ANullableFloat) - .FromAttr(t => t.ANullableDecimal); + .FromAttr(t => t.ANullableDecimal) + .FromAttr(t => t.ANullableGuid); Assert.That(target.AString, Is.EqualTo("foo")); Assert.That(target.AnInt, Is.EqualTo(42)); @@ -240,12 +266,14 @@ public void DeSerializeObject() { Assert.That(target.ADouble, Is.EqualTo(12.345D)); Assert.That(target.AFloat, Is.EqualTo(23.456F)); Assert.That(target.ADecimal, Is.EqualTo(34.567M)); + Assert.That(target.AGuid, Is.EqualTo(new Guid(_testGuidString))); Assert.That(target.ANullableInt, Is.EqualTo(42)); Assert.That(target.ANullableBoolean, Is.True); Assert.That(target.ANullableDate, Is.EqualTo(new DateTime(1970, 5, 21, 13, 55, 21, 934, DateTimeKind.Utc))); Assert.That(target.ANullableDouble, Is.EqualTo(12.345D)); Assert.That(target.ANullableFloat, Is.EqualTo(23.456F)); Assert.That(target.ANullableDecimal, Is.EqualTo(34.567M)); + Assert.That(target.ANullableGuid, Is.EqualTo(new Guid(_testGuidString))); } [Test] @@ -258,12 +286,14 @@ public void DeSerializeFromMissingAttributeLeavesValueIntact() { ADouble = 12.345D, AFloat = 23.456F, ADecimal = 34.567M, + AGuid = new Guid(_testGuidString), ANullableInt = 42, ANullableBoolean = true, ANullableDate = new DateTime(1970, 5, 21, 13, 55, 21, 934, DateTimeKind.Utc), ANullableDouble = 12.345D, ANullableFloat = 23.456F, - ANullableDecimal = 34.567M + ANullableDecimal = 34.567M, + ANullableGuid = new Guid(_testGuidString) }; var el = new XElement("data"); el.With(target) @@ -274,12 +304,14 @@ public void DeSerializeFromMissingAttributeLeavesValueIntact() { .FromAttr(t => t.ADouble) .FromAttr(t => t.AFloat) .FromAttr(t => t.ADecimal) + .FromAttr(t => t.AGuid) .FromAttr(t => t.ANullableInt) .FromAttr(t => t.ANullableBoolean) .FromAttr(t => t.ANullableDate) .FromAttr(t => t.ANullableDouble) .FromAttr(t => t.ANullableFloat) - .FromAttr(t => t.ANullableDecimal); + .FromAttr(t => t.ANullableDecimal) + .FromAttr(t => t.ANullableGuid); Assert.That(target.AString, Is.EqualTo("foo")); Assert.That(target.AnInt, Is.EqualTo(42)); @@ -288,12 +320,14 @@ public void DeSerializeFromMissingAttributeLeavesValueIntact() { Assert.That(target.ADouble, Is.EqualTo(12.345D)); Assert.That(target.AFloat, Is.EqualTo(23.456F)); Assert.That(target.ADecimal, Is.EqualTo(34.567M)); + Assert.That(target.AGuid, Is.EqualTo(new Guid(_testGuidString))); Assert.That(target.ANullableInt, Is.EqualTo(42)); Assert.That(target.ANullableBoolean, Is.True); Assert.That(target.ANullableDate, Is.EqualTo(new DateTime(1970, 5, 21, 13, 55, 21, 934, DateTimeKind.Utc))); Assert.That(target.ANullableDouble, Is.EqualTo(12.345D)); Assert.That(target.ANullableFloat, Is.EqualTo(23.456F)); Assert.That(target.ANullableDecimal, Is.EqualTo(34.567M)); + Assert.That(target.ANullableGuid, Is.EqualTo(new Guid(_testGuidString))); } [Test] @@ -339,7 +373,8 @@ public void NullSerializes() { .ToAttr(t => t.ANullableDate) .ToAttr(t => t.ANullableDouble) .ToAttr(t => t.ANullableFloat) - .ToAttr(t => t.ANullableDecimal); + .ToAttr(t => t.ANullableDecimal) + .ToAttr(t => t.ANullableGuid); Assert.That(el.Attr("AString"), Is.EqualTo("")); Assert.That(el.Attr("ANullableInt"), Is.EqualTo("null")); @@ -348,6 +383,7 @@ public void NullSerializes() { Assert.That(el.Attr("ANullableDouble"), Is.EqualTo("null")); Assert.That(el.Attr("ANullableFloat"), Is.EqualTo("null")); Assert.That(el.Attr("ANullableDecimal"), Is.EqualTo("null")); + Assert.That(el.Attr("ANullableGuid"), Is.EqualTo("null")); } [Test] @@ -357,7 +393,7 @@ public void DeSerializeNull() { XElement.Parse( ""); + "ANullableFloat=\"null\" ANullableDecimal=\"null\" ANullableGuid=\"null\"/>"); el.With(target) .FromAttr(t => t.AString) .FromAttr(t => t.ANullableInt) @@ -365,7 +401,8 @@ public void DeSerializeNull() { .FromAttr(t => t.ANullableDate) .FromAttr(t => t.ANullableDouble) .FromAttr(t => t.ANullableFloat) - .FromAttr(t => t.ANullableDecimal); + .FromAttr(t => t.ANullableDecimal) + .FromAttr(t => t.ANullableGuid); Assert.That(target.AString, Is.EqualTo("null")); Assert.That(target.ANullableInt, Is.Null); @@ -374,6 +411,7 @@ public void DeSerializeNull() { Assert.That(target.ANullableDouble, Is.Null); Assert.That(target.ANullableFloat, Is.Null); Assert.That(target.ANullableDecimal, Is.Null); + Assert.That(target.ANullableGuid, Is.Null); } private class Target { @@ -384,12 +422,14 @@ private class Target { public double ADouble { get; set; } public float AFloat { get; set; } public decimal ADecimal { get; set; } + public Guid AGuid { get; set; } public int? ANullableInt { get; set; } public bool? ANullableBoolean { get; set; } public DateTime? ANullableDate { get; set; } public double? ANullableDouble { get; set; } public float? ANullableFloat { get; set; } public decimal? ANullableDecimal { get; set; } + public Guid? ANullableGuid { get; set; } } } } \ No newline at end of file diff --git a/src/Orchard/ContentManagement/XmlHelper.cs b/src/Orchard/ContentManagement/XmlHelper.cs index 5c015c199aa..292e10ada08 100644 --- a/src/Orchard/ContentManagement/XmlHelper.cs +++ b/src/Orchard/ContentManagement/XmlHelper.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Globalization; using System.Linq; using System.Linq.Expressions; @@ -157,7 +157,7 @@ public static string ToString(T value) { return Convert.ToString(value); } if ((!type.IsValueType || Nullable.GetUnderlyingType(type) != null) && - value == null && + value == null && type != typeof(string)) { return "null"; @@ -214,6 +214,10 @@ public static string ToString(T value) { return decimalValue.ToString(CultureInfo.InvariantCulture); } + if (type == typeof(Guid) || type == typeof(Guid?)) { + return value == null ? "null" : value.ToString(); + } + var underlyingType = Nullable.GetUnderlyingType(type) ?? type; if (underlyingType.IsEnum) { @@ -277,6 +281,10 @@ public static T Parse(string value) { return (T)(object)decimal.Parse(value, CultureInfo.InvariantCulture); } + if (type == typeof(Guid) || type == typeof(Guid?)) { + return (T)(object)Guid.Parse(value); + } + var underlyingType = Nullable.GetUnderlyingType(type) ?? type; if (underlyingType.IsEnum) { From d46f26d4c7c15f56668f4b2dcfdd6ce44a4fddf5 Mon Sep 17 00:00:00 2001 From: Andrea Piovanelli <83577153+AndreaPiovanelli@users.noreply.github.com> Date: Wed, 21 Feb 2024 11:18:33 +0100 Subject: [PATCH 13/56] Added chain to Slug token to enable TextTokens for Autoroute configuration. (#8755) --- .../Modules/Orchard.Autoroute/Providers/SlugTokens.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Providers/SlugTokens.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Providers/SlugTokens.cs index 74896d58dd3..db4bff33f20 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Providers/SlugTokens.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Providers/SlugTokens.cs @@ -41,6 +41,7 @@ public void Evaluate(EvaluateContext context) { context.For("Content") // {Content.Slug} .Token("Slug", (content => content == null ? String.Empty : _slugService.Slugify(content))) + .Chain("Slug", "Text", (content => content == null ? String.Empty : _slugService.Slugify(content))) .Token("Path", (content => { var autoroutePart = content.As(); if (autoroutePart == null) { From eb09ab7f95fe8abd93d36c5824ab12d4a0526baf Mon Sep 17 00:00:00 2001 From: Andrea Piovanelli <83577153+AndreaPiovanelli@users.noreply.github.com> Date: Wed, 21 Feb 2024 11:21:13 +0100 Subject: [PATCH 14/56] Added data annotation to have a proper validation on MenuText length based on its maximum length on database. (#8757) --- .../Core/Navigation/ViewModels/MenuPartViewModel.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Orchard.Web/Core/Navigation/ViewModels/MenuPartViewModel.cs b/src/Orchard.Web/Core/Navigation/ViewModels/MenuPartViewModel.cs index 4c4bdb60abf..676285f6b38 100644 --- a/src/Orchard.Web/Core/Navigation/ViewModels/MenuPartViewModel.cs +++ b/src/Orchard.Web/Core/Navigation/ViewModels/MenuPartViewModel.cs @@ -1,5 +1,7 @@ using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using Orchard.ContentManagement; +using Orchard.Core.Navigation.Models; namespace Orchard.Core.Navigation.ViewModels { public class MenuPartViewModel { @@ -7,7 +9,8 @@ public class MenuPartViewModel { public int CurrentMenuId { get; set; } public bool OnMenu { get; set; } - public ContentItem ContentItem { get; set; } + public ContentItem ContentItem { get; set; } + [StringLength(MenuPartRecord.DefaultMenuTextLength)] public string MenuText { get; set; } } } \ No newline at end of file From 44bfa390bc9f465b7160a05e9b567b9a11b1c2cd Mon Sep 17 00:00:00 2001 From: Alessandro Agostini <102729761+AgostiniAlessandro@users.noreply.github.com> Date: Wed, 21 Feb 2024 11:28:09 +0100 Subject: [PATCH 15/56] Feature/maxlengthsetting (#8719) * added MaxLength setting for TextField # Conflicts: # src/Orchard.Web/Modules/Orchard.Taxonomies/Settings/TaxonomyFieldEditorEvents.cs * added MaxLength setting for TitlePart * added missing files * Removed where clause * changed title length to a constant and updated the recipe * added comment to remind people to update the migration when they change the constant introduced previously * fixed hint text for title * fixed maxLength initialization in TitlePartSettings.cshtml * MaxTitleLength constant is now Pascal case * Correction on constant spelling in TitlePartSettings shape. --------- Co-authored-by: Andrea Piovanelli --- .../Core/Common/Drivers/TextFieldDriver.cs | 11 +++++ .../Core/Common/Settings/TextFieldSettings.cs | 6 ++- .../Settings/TextFieldSettingsEvents.cs | 5 ++- .../Common/Views/Body-Large.Editor.cshtml | 13 ++++-- .../Common/Views/Body-Small.Editor.cshtml | 13 ++++-- .../Common/Views/Body-Textarea.Editor.cshtml | 7 +++- .../Core/Common/Views/Body-Wide.Editor.cshtml | 13 ++++-- .../Core/Common/Views/Body.Editor.cshtml | 12 ++++-- .../TextFieldSettingsEventsViewModel.cshtml | 8 +++- .../Fields.Common.Text.Edit.cshtml | 19 +++++++-- src/Orchard.Web/Core/Orchard.Core.csproj | 3 ++ .../Core/Title/Drivers/TitlePartDriver.cs | 11 ++++- src/Orchard.Web/Core/Title/Migrations.cs | 3 +- .../Core/Title/Settings/TitlePartSettings.cs | 19 +++++++++ .../Title/Settings/TitlePartSettingsEvents.cs | 42 +++++++++++++++++++ .../TitlePartSettings.cshtml | 12 ++++++ .../Parts.Title.TitlePart.cshtml | 10 +++-- .../Settings/TaxonomyFieldEditorEvents.cs | 17 +++++--- 18 files changed, 193 insertions(+), 31 deletions(-) create mode 100644 src/Orchard.Web/Core/Title/Settings/TitlePartSettings.cs create mode 100644 src/Orchard.Web/Core/Title/Settings/TitlePartSettingsEvents.cs create mode 100644 src/Orchard.Web/Core/Title/Views/DefinitionTemplates/TitlePartSettings.cshtml diff --git a/src/Orchard.Web/Core/Common/Drivers/TextFieldDriver.cs b/src/Orchard.Web/Core/Common/Drivers/TextFieldDriver.cs index a4e57942ab3..54936c0638e 100644 --- a/src/Orchard.Web/Core/Common/Drivers/TextFieldDriver.cs +++ b/src/Orchard.Web/Core/Common/Drivers/TextFieldDriver.cs @@ -10,6 +10,7 @@ using Orchard.Core.Common.ViewModels; using Orchard.Localization; using Orchard.Services; +using Orchard.Utility.Extensions; namespace Orchard.Core.Common.Drivers { public class TextFieldDriver : ContentFieldDriver { @@ -71,6 +72,16 @@ protected override DriverResult Editor(ContentPart part, TextField field, IUpdat if (settings.Required && String.IsNullOrWhiteSpace(field.Value)) { updater.AddModelError("Text", T("The field {0} is mandatory", T(field.DisplayName))); } + + if (settings.MaxLength > 0) { + + var value = new HtmlString(_htmlFilters.Aggregate(field.Value, (text, filter) => filter.ProcessContent(text, settings.Flavor))) + .ToString().RemoveTags(); + + if (value.Length > settings.MaxLength) { + updater.AddModelError("Text", T("The maximum allowed length for the field {0} is {1}", T(field.DisplayName), settings.MaxLength)); + } + } } return Editor(part, field, shapeHelper); diff --git a/src/Orchard.Web/Core/Common/Settings/TextFieldSettings.cs b/src/Orchard.Web/Core/Common/Settings/TextFieldSettings.cs index 651d1eb2830..311fbca0638 100644 --- a/src/Orchard.Web/Core/Common/Settings/TextFieldSettings.cs +++ b/src/Orchard.Web/Core/Common/Settings/TextFieldSettings.cs @@ -1,4 +1,5 @@ -using System.ComponentModel.DataAnnotations; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; namespace Orchard.Core.Common.Settings { @@ -8,5 +9,8 @@ public class TextFieldSettings { public bool Required { get; set; } public string Hint { get; set; } public string DefaultValue { get; set; } + [Range(0, int.MaxValue)] + [DisplayName("Maximum Length")] + public int MaxLength { get; set; } } } diff --git a/src/Orchard.Web/Core/Common/Settings/TextFieldSettingsEvents.cs b/src/Orchard.Web/Core/Common/Settings/TextFieldSettingsEvents.cs index 9ae678cb9d3..bd1017814d8 100644 --- a/src/Orchard.Web/Core/Common/Settings/TextFieldSettingsEvents.cs +++ b/src/Orchard.Web/Core/Common/Settings/TextFieldSettingsEvents.cs @@ -34,9 +34,10 @@ public override IEnumerable PartFieldEditorUpdate(ContentPart builder.WithSetting("TextFieldSettings.Hint", model.Settings.Hint); builder.WithSetting("TextFieldSettings.Required", model.Settings.Required.ToString(CultureInfo.InvariantCulture)); builder.WithSetting("TextFieldSettings.DefaultValue", model.Settings.DefaultValue); - - yield return DefinitionTemplate(model); + builder.WithSetting("TextFieldSettings.MaxLength", model.Settings.MaxLength.ToString()); } + + yield return DefinitionTemplate(model); } } } \ No newline at end of file diff --git a/src/Orchard.Web/Core/Common/Views/Body-Large.Editor.cshtml b/src/Orchard.Web/Core/Common/Views/Body-Large.Editor.cshtml index ae040e5ce52..8c437f4f34e 100644 --- a/src/Orchard.Web/Core/Common/Views/Body-Large.Editor.cshtml +++ b/src/Orchard.Web/Core/Common/Views/Body-Large.Editor.cshtml @@ -1,7 +1,14 @@ @{ - var htmlAttributes = new Dictionary { - {"class", "text large"} - }; + var htmlAttributes = (Dictionary)Model.HtmlAttributes; + + if (htmlAttributes == null) { + htmlAttributes = new Dictionary { + {"class", "text large"} + }; + } + else { + htmlAttributes["class"] = "text large"; + } if (Model.Required == true) { htmlAttributes["required"] = "required"; diff --git a/src/Orchard.Web/Core/Common/Views/Body-Small.Editor.cshtml b/src/Orchard.Web/Core/Common/Views/Body-Small.Editor.cshtml index 2952d6378e3..9c9a60556eb 100644 --- a/src/Orchard.Web/Core/Common/Views/Body-Small.Editor.cshtml +++ b/src/Orchard.Web/Core/Common/Views/Body-Small.Editor.cshtml @@ -1,7 +1,14 @@ @{ - var htmlAttributes = new Dictionary { - {"class", "text small"} - }; + var htmlAttributes = (Dictionary)Model.HtmlAttributes; + + if (htmlAttributes == null) { + htmlAttributes = new Dictionary { + {"class", "text small"} + }; + } + else { + htmlAttributes["class"] = "text small"; + } if (Model.Required == true) { htmlAttributes["required"] = "required"; diff --git a/src/Orchard.Web/Core/Common/Views/Body-Textarea.Editor.cshtml b/src/Orchard.Web/Core/Common/Views/Body-Textarea.Editor.cshtml index 98ca9d2364a..efd17e82a68 100644 --- a/src/Orchard.Web/Core/Common/Views/Body-Textarea.Editor.cshtml +++ b/src/Orchard.Web/Core/Common/Views/Body-Textarea.Editor.cshtml @@ -1,5 +1,10 @@ @{ - var htmlAttributes = new Dictionary(); + + var htmlAttributes = (Dictionary)Model.HtmlAttributes; + + if (htmlAttributes == null) { + htmlAttributes = new Dictionary(); + } if (Model.Required == true) { htmlAttributes["required"] = "required"; diff --git a/src/Orchard.Web/Core/Common/Views/Body-Wide.Editor.cshtml b/src/Orchard.Web/Core/Common/Views/Body-Wide.Editor.cshtml index 79e8fe87f7b..5bf8e2e552c 100644 --- a/src/Orchard.Web/Core/Common/Views/Body-Wide.Editor.cshtml +++ b/src/Orchard.Web/Core/Common/Views/Body-Wide.Editor.cshtml @@ -1,7 +1,14 @@ @{ - var htmlAttributes = new Dictionary { - {"class", "text medium"} - }; + var htmlAttributes = (Dictionary)Model.HtmlAttributes; + + if (htmlAttributes == null) { + htmlAttributes = new Dictionary { + {"class", "text medium"} + }; + } + else { + htmlAttributes["class"] = "text medium"; + } if (Model.Required == true) { htmlAttributes["required"] = "required"; diff --git a/src/Orchard.Web/Core/Common/Views/Body.Editor.cshtml b/src/Orchard.Web/Core/Common/Views/Body.Editor.cshtml index 1cddc06badc..9674cca2402 100644 --- a/src/Orchard.Web/Core/Common/Views/Body.Editor.cshtml +++ b/src/Orchard.Web/Core/Common/Views/Body.Editor.cshtml @@ -1,10 +1,16 @@ @using Orchard.Utility.Extensions; @{ string editorFlavor = Model.EditorFlavor; + var htmlAttributes = (Dictionary)Model.HtmlAttributes; - var htmlAttributes = new Dictionary { - {"class", editorFlavor.HtmlClassify()} - }; + if (htmlAttributes == null) { + htmlAttributes = new Dictionary { + {"class", editorFlavor.HtmlClassify()}}; + + } + else { + htmlAttributes["class"] = editorFlavor.HtmlClassify(); + } if (Model.Required == true) { htmlAttributes["required"] = "required"; diff --git a/src/Orchard.Web/Core/Common/Views/DefinitionTemplates/TextFieldSettingsEventsViewModel.cshtml b/src/Orchard.Web/Core/Common/Views/DefinitionTemplates/TextFieldSettingsEventsViewModel.cshtml index c339727a9ad..17cc56235ac 100644 --- a/src/Orchard.Web/Core/Common/Views/DefinitionTemplates/TextFieldSettingsEventsViewModel.cshtml +++ b/src/Orchard.Web/Core/Common/Views/DefinitionTemplates/TextFieldSettingsEventsViewModel.cshtml @@ -7,6 +7,12 @@ @Html.ValidationMessageFor(m => m.Settings.Flavor)
+
+ + @Html.EditorFor(m => m.Settings.MaxLength, new { htmlAttributes = new { min = 0 } }) + @T("Maximum length allowed for this field. Setting the value to 0 means unlimited length.") + @Html.ValidationMessageFor(m => m.Settings.MaxLength) +
@Html.CheckBoxFor(m => m.Settings.Required) @@ -21,4 +27,4 @@
@Display.DefinitionTemplate(TemplateName: "TextFieldDefaultValueEditor", Model: Model) -
\ No newline at end of file + diff --git a/src/Orchard.Web/Core/Common/Views/EditorTemplates/Fields.Common.Text.Edit.cshtml b/src/Orchard.Web/Core/Common/Views/EditorTemplates/Fields.Common.Text.Edit.cshtml index eb917bddc05..9265cc42a7d 100644 --- a/src/Orchard.Web/Core/Common/Views/EditorTemplates/Fields.Common.Text.Edit.cshtml +++ b/src/Orchard.Web/Core/Common/Views/EditorTemplates/Fields.Common.Text.Edit.cshtml @@ -1,15 +1,26 @@ @model Orchard.Core.Common.ViewModels.TextFieldDriverViewModel +@{ + var maxLength = Model.Settings.MaxLength > 0 ? Model.Settings.MaxLength.ToString() : ""; +}
- + @if (String.IsNullOrWhiteSpace(Model.Settings.Flavor)) { - @(Model.Settings.Required ? Html.TextBoxFor(m => m.Text, new {@class = "text", required = "required"}) : Html.TextBoxFor(m => m.Text, new {@class = "text"})) + @(Model.Settings.Required + ? Html.TextBoxFor(m => m.Text, new {@class = "text", required = "required", maxlength = maxLength}) + : Html.TextBoxFor(m => m.Text, new {@class = "text", maxlength = maxLength })) @Html.ValidationMessageFor(m => m.Text) } else { - @Display.Body_Editor(Text: Model.Text, EditorFlavor: Model.Settings.Flavor, Required: Model.Settings.Required, ContentItem: Model.ContentItem, Field: Model.Field) + + var htmlAttributes = new Dictionary { + {"maxlength", maxLength} + }; + + @Display.Body_Editor(Text: Model.Text, EditorFlavor: Model.Settings.Flavor, Required: Model.Settings.Required, + ContentItem: Model.ContentItem, Field: Model.Field, HtmlAttributes: htmlAttributes) } @if (HasText(Model.Settings.Hint)) { - @Model.Settings.Hint + @Model.Settings.Hint }
\ No newline at end of file diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj b/src/Orchard.Web/Core/Orchard.Core.csproj index fb8d4634d2f..6ad8f6f8b60 100644 --- a/src/Orchard.Web/Core/Orchard.Core.csproj +++ b/src/Orchard.Web/Core/Orchard.Core.csproj @@ -293,6 +293,8 @@ + + @@ -612,6 +614,7 @@ + 10.0 diff --git a/src/Orchard.Web/Core/Title/Drivers/TitlePartDriver.cs b/src/Orchard.Web/Core/Title/Drivers/TitlePartDriver.cs index 15147e9eed7..81fd175d257 100644 --- a/src/Orchard.Web/Core/Title/Drivers/TitlePartDriver.cs +++ b/src/Orchard.Web/Core/Title/Drivers/TitlePartDriver.cs @@ -1,7 +1,9 @@ using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement.Handlers; +using Orchard.Core.Common.Settings; using Orchard.Core.Title.Models; +using Orchard.Core.Title.Settings; using Orchard.Localization; namespace Orchard.Core.Title.Drivers { @@ -33,7 +35,14 @@ protected override DriverResult Editor(TitlePart part, dynamic shapeHelper) { } protected override DriverResult Editor(TitlePart part, IUpdateModel updater, dynamic shapeHelper) { - updater.TryUpdateModel(part, Prefix, null, null); + if (updater.TryUpdateModel(part, Prefix, null, null)){ + + var settings = part.Settings.GetModel(); + + if (settings.MaxLength > 0 && part.Title.Length > settings.MaxLength) { + updater.AddModelError("Title", T("The maximum allowed length for the title is {0}", settings.MaxLength)); + } + } return Editor(part, shapeHelper); } diff --git a/src/Orchard.Web/Core/Title/Migrations.cs b/src/Orchard.Web/Core/Title/Migrations.cs index e4e17c7e1d0..ec168f40cda 100644 --- a/src/Orchard.Web/Core/Title/Migrations.cs +++ b/src/Orchard.Web/Core/Title/Migrations.cs @@ -1,6 +1,7 @@ using Orchard.ContentManagement.MetaData; using Orchard.Core.Contents.Extensions; using Orchard.Data.Migration; +using Orchard.Core.Title.Settings; namespace Orchard.Core.Title { public class Migrations : DataMigrationImpl { @@ -9,7 +10,7 @@ public int Create() { SchemaBuilder.CreateTable("TitlePartRecord", table => table .ContentPartVersionRecord() - .Column("Title", column => column.WithLength(1024)) + .Column("Title", column => column.WithLength(TitlePartSettings.MaxTitleLength)) ); ContentDefinitionManager.AlterPartDefinition("TitlePart", builder => builder diff --git a/src/Orchard.Web/Core/Title/Settings/TitlePartSettings.cs b/src/Orchard.Web/Core/Title/Settings/TitlePartSettings.cs new file mode 100644 index 00000000000..ca58b67e16d --- /dev/null +++ b/src/Orchard.Web/Core/Title/Settings/TitlePartSettings.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel; +using System.Linq; +using System.Web; + +namespace Orchard.Core.Title.Settings { + + + public class TitlePartSettings { + // Whenever this constant is changed a new migration step must be created to update the length of the field on the DB + public const int MaxTitleLength = 1024; + [Range(0, MaxTitleLength)] + [DisplayName("Maximum Length")] + public int MaxLength {get; set;} + + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Title/Settings/TitlePartSettingsEvents.cs b/src/Orchard.Web/Core/Title/Settings/TitlePartSettingsEvents.cs new file mode 100644 index 00000000000..471de87b10f --- /dev/null +++ b/src/Orchard.Web/Core/Title/Settings/TitlePartSettingsEvents.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using Orchard.ContentManagement; +using Orchard.ContentManagement.MetaData; +using Orchard.ContentManagement.MetaData.Builders; +using Orchard.ContentManagement.MetaData.Models; +using Orchard.ContentManagement.ViewModels; + +namespace Orchard.Core.Title.Settings { + public class TitlePartSettingsEvents : ContentDefinitionEditorEventsBase { + + public override IEnumerable TypePartEditor(ContentTypePartDefinition definition) { + if (definition.PartDefinition.Name != "TitlePart") { + yield break; + } + + var settings = definition + .Settings + .GetModel() + ?? new TitlePartSettings(); + + yield return DefinitionTemplate(settings); + } + + public override IEnumerable TypePartEditorUpdate(ContentTypePartDefinitionBuilder builder, IUpdateModel updateModel) { + + if (builder.Name != "TitlePart") { + yield break; + } + + var model = new TitlePartSettings(); + + if (updateModel.TryUpdateModel(model, "TitlePartSettings", null, null)) { + builder.WithSetting("TitlePartSettings.MaxLength", model.MaxLength.ToString()); + + } + yield return DefinitionTemplate(model); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Title/Views/DefinitionTemplates/TitlePartSettings.cshtml b/src/Orchard.Web/Core/Title/Views/DefinitionTemplates/TitlePartSettings.cshtml new file mode 100644 index 00000000000..cada3a5f1ef --- /dev/null +++ b/src/Orchard.Web/Core/Title/Views/DefinitionTemplates/TitlePartSettings.cshtml @@ -0,0 +1,12 @@ +@using Orchard.Core.Title.Settings; +@model TitlePartSettings +@{ + var maxLength = TitlePartSettings.MaxTitleLength; +} + +
+ + @Html.EditorFor(m => m.MaxLength, new { htmlAttributes = new { min = 0, max = maxLength } }) + @T("Maximum length allowed for the title. Setting the value to 0 means the maximum allowed length is {0} characters.", maxLength) + @Html.ValidationMessageFor(m => m.MaxLength) +
\ No newline at end of file diff --git a/src/Orchard.Web/Core/Title/Views/EditorTemplates/Parts.Title.TitlePart.cshtml b/src/Orchard.Web/Core/Title/Views/EditorTemplates/Parts.Title.TitlePart.cshtml index c84497fd10d..e80585b8b0f 100644 --- a/src/Orchard.Web/Core/Title/Views/EditorTemplates/Parts.Title.TitlePart.cshtml +++ b/src/Orchard.Web/Core/Title/Views/EditorTemplates/Parts.Title.TitlePart.cshtml @@ -1,7 +1,11 @@ -@model Orchard.Core.Title.Models.TitlePart +@using Orchard.Core.Title.Settings +@model Orchard.Core.Title.Models.TitlePart +@{ + var maxLength = Model.Settings.GetModel().MaxLength > 0 ? Model.Settings.GetModel().MaxLength.ToString() : ""; +}
- - @Html.TextBoxFor(m => m.Title, new { @class = "text large", autofocus = "autofocus" }) + + @Html.TextBoxFor(m => m.Title, new { @class = "text large", autofocus = "autofocus", maxlength = maxLength }) @T("You must provide a title for this content item")
diff --git a/src/Orchard.Web/Modules/Orchard.Taxonomies/Settings/TaxonomyFieldEditorEvents.cs b/src/Orchard.Web/Modules/Orchard.Taxonomies/Settings/TaxonomyFieldEditorEvents.cs index 3f1e1d4d3b9..a585f101d76 100644 --- a/src/Orchard.Web/Modules/Orchard.Taxonomies/Settings/TaxonomyFieldEditorEvents.cs +++ b/src/Orchard.Web/Modules/Orchard.Taxonomies/Settings/TaxonomyFieldEditorEvents.cs @@ -4,8 +4,8 @@ using Orchard.ContentManagement.MetaData.Builders; using Orchard.ContentManagement.MetaData.Models; using Orchard.ContentManagement.ViewModels; -using Orchard.Taxonomies.Services; using Orchard.Localization; +using Orchard.Taxonomies.Services; namespace Orchard.Taxonomies.Settings { public class TaxonomyFieldEditorEvents : ContentDefinitionEditorEventsBase { @@ -20,8 +20,7 @@ public TaxonomyFieldEditorEvents(ITaxonomyService taxonomyService) { public override IEnumerable PartFieldEditor(ContentPartFieldDefinition definition) { if (definition.FieldDefinition.Name == "TaxonomyField") { - var model = definition.Settings.GetModel(); - model.Taxonomies = _taxonomyService.GetTaxonomies(); + var model = GetCurrentSettings(definition); yield return DefinitionTemplate(model); } } @@ -31,7 +30,8 @@ public override IEnumerable PartFieldEditorUpdate(ContentPart yield break; } - var model = new TaxonomyFieldSettings(); + // Init this model preventively so if the TryUpdateModel doesn't execute correctly it doesn't cause an error + var model = GetCurrentSettings(builder.Current); if (updateModel.TryUpdateModel(model, "TaxonomyFieldSettings", null, null)) { builder @@ -43,8 +43,15 @@ public override IEnumerable PartFieldEditorUpdate(ContentPart .WithSetting("TaxonomyFieldSettings.AllowCustomTerms", model.AllowCustomTerms.ToString()) .WithSetting("TaxonomyFieldSettings.Hint", model.Hint); } - + yield return DefinitionTemplate(model); } + + private TaxonomyFieldSettings GetCurrentSettings(ContentPartFieldDefinition definition) { + var model = definition.Settings.GetModel(); + model.Taxonomies = _taxonomyService.GetTaxonomies(); + return model; + } + } } \ No newline at end of file From 90dc993e83ff6ba33e309c31f77c5cdaf119278f Mon Sep 17 00:00:00 2001 From: Andrea Piovanelli <83577153+AndreaPiovanelli@users.noreply.github.com> Date: Thu, 29 Feb 2024 19:37:54 +0100 Subject: [PATCH 16/56] Using content item's ContentManager for lazy field loading instead of the injected one (#8761) --- .../Modules/Orchard.Taxonomies/Handlers/TermsPartHandler.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Taxonomies/Handlers/TermsPartHandler.cs b/src/Orchard.Web/Modules/Orchard.Taxonomies/Handlers/TermsPartHandler.cs index 2abf96d34cb..1a73399d077 100644 --- a/src/Orchard.Web/Modules/Orchard.Taxonomies/Handlers/TermsPartHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Taxonomies/Handlers/TermsPartHandler.cs @@ -65,7 +65,8 @@ private void InitializerTermsLoader(TermsPart part) { var tempField = field.Name; field.TermsField.Loader(() => { var fieldTermRecordIds = part.Record.Terms.Where(t => t.Field == tempField).Select(tci => tci.TermRecord.Id); - var terms = _contentManager.GetMany(fieldTermRecordIds, VersionOptions.Published, queryHint); + // Using context content item's ContentManager instead of injected one to avoid lifetime scope exceptions in case of LazyFields. + var terms = part.ContentItem.ContentManager.GetMany(fieldTermRecordIds, VersionOptions.Published, queryHint); return terms.ToList(); }); } @@ -73,7 +74,8 @@ private void InitializerTermsLoader(TermsPart part) { part._termParts = new LazyField>(); part._termParts.Loader(() => { var ids = part.Terms.Select(t => t.TermRecord.Id).Distinct(); - var terms = _contentManager.GetMany(ids, VersionOptions.Published, queryHint) + // Using context content item's ContentManager instead of injected one to avoid lifetime scope exceptions in case of LazyFields. + var terms = part.ContentItem.ContentManager.GetMany(ids, VersionOptions.Published, queryHint) .ToDictionary(t => t.Id, t => t); return part.Terms.Select( From c7d10fd0bea36c7279cfe870f4bce25d3d4104a7 Mon Sep 17 00:00:00 2001 From: Matteo Piovanelli Date: Thu, 29 Feb 2024 19:38:48 +0100 Subject: [PATCH 17/56] When chaining tokens, if nothing was selected in a CPF, evaluation would log (#8763) and error because it would seek an item out of the range of the array. --- .../Modules/Orchard.ContentPicker/Tokens/FieldTokens.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Tokens/FieldTokens.cs b/src/Orchard.Web/Modules/Orchard.ContentPicker/Tokens/FieldTokens.cs index f10bcfb52a8..341b15eaa1e 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/Tokens/FieldTokens.cs +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Tokens/FieldTokens.cs @@ -3,6 +3,7 @@ using Orchard.Events; using Orchard.ContentPicker.Fields; using Orchard.Localization; +using NHibernate.Util; namespace Orchard.ContentPicker.Tokens { public interface ITokenProvider : IEventHandler { @@ -28,7 +29,10 @@ public void Describe(dynamic context) { public void Evaluate(dynamic context) { context.For("ContentPickerField") .Token("Content", (Func)(field => field.Ids[0])) - .Chain("Content", "Content", (Func)(field => _contentManager.Get(field.Ids[0]))) + .Chain("Content", "Content", (Func)(field => { + var id = field.Ids.Any() ? field.Ids[0] : 0; + return _contentManager.Get(id); + })) ; } } From 35f1c8d5700303c04824d77c022b1cc78975b29c Mon Sep 17 00:00:00 2001 From: Andrea Piovanelli <83577153+AndreaPiovanelli@users.noreply.github.com> Date: Thu, 29 Feb 2024 19:39:32 +0100 Subject: [PATCH 18/56] Corrections on media resizing process (#8762) * Added checks to GetImageProfileUrl function to avoid trying to resize files with no ImagePart. If no content item is passed as a parameter, file gets to be processed anyway (throwing and logging exception is the file isn't processable - e.g. is a svg file) * Added reference to Orchard.MediaLibrary. --- .../Orchard.MediaProcessing.csproj | 6 +- .../Services/ImageProfileManager.cs | 83 +++++++++++-------- 2 files changed, 52 insertions(+), 37 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.MediaProcessing/Orchard.MediaProcessing.csproj b/src/Orchard.Web/Modules/Orchard.MediaProcessing/Orchard.MediaProcessing.csproj index a505f057e6b..624b6adfe7d 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaProcessing/Orchard.MediaProcessing.csproj +++ b/src/Orchard.Web/Modules/Orchard.MediaProcessing/Orchard.MediaProcessing.csproj @@ -123,6 +123,10 @@ {642A49D7-8752-4177-80D6-BFBBCFAD3DE0} Orchard.Forms + + {73a7688a-5bd3-4f7e-adfa-ce36c5a10e3b} + Orchard.MediaLibrary + {6f759635-13d7-4e94-bcc9-80445d63f117} Orchard.Tokens @@ -241,4 +245,4 @@
- + \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MediaProcessing/Services/ImageProfileManager.cs b/src/Orchard.Web/Modules/Orchard.MediaProcessing/Services/ImageProfileManager.cs index d1d521a41fe..2ff726644a2 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaProcessing/Services/ImageProfileManager.cs +++ b/src/Orchard.Web/Modules/Orchard.MediaProcessing/Services/ImageProfileManager.cs @@ -4,12 +4,12 @@ using System.IO; using System.Linq; using System.Net; -using System.Security.Cryptography; using System.Web; using Orchard.ContentManagement; using Orchard.FileSystems.Media; using Orchard.Forms.Services; using Orchard.Logging; +using Orchard.MediaLibrary.Models; using Orchard.MediaProcessing.Descriptors.Filter; using Orchard.MediaProcessing.Media; using Orchard.MediaProcessing.Models; @@ -44,7 +44,7 @@ public ImageProfileManager( public ILogger Logger { get; set; } - public string GetImageProfileUrl(string path, string profileName) { + public string GetImageProfileUrl(string path, string profileName) { return GetImageProfileUrl(path, profileName, null, new FilterRecord[] { }); } @@ -69,42 +69,56 @@ public string GetImageProfileUrl(string path, string profileName, ContentItem co var filePath = _fileNameProvider.GetFileName(profileName, System.Web.HttpUtility.UrlDecode(path)); bool process = false; - //after reboot the app cache is empty so we reload the image in the cache if it exists in the _Profiles folder - if (string.IsNullOrEmpty(filePath)) { - var profileFilePath = _storageProvider.Combine("_Profiles", FormatProfilePath(profileName, System.Web.HttpUtility.UrlDecode(path))); - - if (_storageProvider.FileExists(profileFilePath)) { - _fileNameProvider.UpdateFileName(profileName, System.Web.HttpUtility.UrlDecode(path), profileFilePath); - filePath = profileFilePath; + // Before checking everything else, ensure that the content item that needs to be processed has a ImagePart. + // If it's not the case (e.g. if media is a svg file), processing would throw a exception. + // If content item is null (it means it's not passed as a parameter of the ResizeMediaUrl call), + // this function processes the file like it did before this patch; + // this means it could possibly throw and log exceptions for svg files. + bool checkForProfile = (contentItem == null || contentItem.Has()); + + if (checkForProfile) { + //after reboot the app cache is empty so we reload the image in the cache if it exists in the _Profiles folder + if (string.IsNullOrEmpty(filePath)) { + var profileFilePath = _storageProvider.Combine("_Profiles", FormatProfilePath(profileName, System.Web.HttpUtility.UrlDecode(path))); + + if (_storageProvider.FileExists(profileFilePath)) { + _fileNameProvider.UpdateFileName(profileName, System.Web.HttpUtility.UrlDecode(path), profileFilePath); + filePath = profileFilePath; + } } - } - - // if the filename is not cached, process it - if (string.IsNullOrEmpty(filePath)) { - Logger.Debug("FilePath is null, processing required, profile {0} for image {1}", profileName, path); - process = true; - } + // if the filename is not cached, process it + if (string.IsNullOrEmpty(filePath)) { + Logger.Debug("FilePath is null, processing required, profile {0} for image {1}", profileName, path); + + process = true; + } // the processd file doesn't exist anymore, process it - else if (!_storageProvider.FileExists(filePath)) { - Logger.Debug("Processed file no longer exists, processing required, profile {0} for image {1}", profileName, path); + else if (!_storageProvider.FileExists(filePath)) { + Logger.Debug("Processed file no longer exists, processing required, profile {0} for image {1}", profileName, path); - process = true; - } + process = true; + } - // if the original file is more recent, process it - else { - DateTime pathLastUpdated; - if (TryGetImageLastUpdated(path, out pathLastUpdated)) { - var filePathLastUpdated = _storageProvider.GetFile(filePath).GetLastUpdated(); + // if the original file is more recent, process it + else { + DateTime pathLastUpdated; + if (TryGetImageLastUpdated(path, out pathLastUpdated)) { + var filePathLastUpdated = _storageProvider.GetFile(filePath).GetLastUpdated(); - if (pathLastUpdated > filePathLastUpdated) { - Logger.Debug("Original file more recent, processing required, profile {0} for image {1}", profileName, path); + if (pathLastUpdated > filePathLastUpdated) { + Logger.Debug("Original file more recent, processing required, profile {0} for image {1}", profileName, path); - process = true; + process = true; + } } } + } else { + // Since media with no ImagePart have no profile, filePath is null, so it's set again to its original path on the storage provider. + if (string.IsNullOrWhiteSpace(filePath)) { + filePath = _storageProvider.GetStoragePath(path); + } } // todo: regenerate the file if the profile is newer, by deleting the associated filename cache entries. @@ -117,11 +131,10 @@ public string GetImageProfileUrl(string path, string profileName, ContentItem co profilePart = _profileService.GetImageProfileByName(profileName); if (profilePart == null) return String.Empty; - } - else { + } else { profilePart = _services.ContentManager.New("ImageProfile"); profilePart.Name = profileName; - foreach (var customFilter in customFilters) { + foreach (var customFilter in customFilters) { profilePart.Filters.Add(customFilter); } } @@ -174,8 +187,7 @@ public string GetImageProfileUrl(string path, string profileName, ContentItem co // the storage provider may have altered the filepath filterContext.FilePath = newFile.GetPath(); } - } - catch(Exception e) { + } catch (Exception e) { Logger.Error(e, "A profile could not be processed: " + path); } } @@ -203,8 +215,7 @@ private Stream GetImage(string path) { try { var file = _storageProvider.GetFile(storagePath); return file.OpenRead(); - } - catch(Exception e) { + } catch (Exception e) { Logger.Error(e, "path:" + path + " storagePath:" + storagePath); } } @@ -236,7 +247,7 @@ private bool TryGetImageLastUpdated(string path, out DateTime lastUpdated) { } private string FormatProfilePath(string profileName, string path) { - + var filenameWithExtension = Path.GetFileName(path) ?? ""; var fileLocation = path.Substring(0, path.Length - filenameWithExtension.Length); From 50d416c9f2b1ebecd56bfbb0c8933768493fc89f Mon Sep 17 00:00:00 2001 From: Benedek Farkas Date: Fri, 1 Mar 2024 20:46:50 +0100 Subject: [PATCH 19/56] Projections: Consolidating Migration Update steps into Create --- .../Modules/Orchard.Projections/Migrations.cs | 42 ++++++++++++++++++- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Projections/Migrations.cs b/src/Orchard.Web/Modules/Orchard.Projections/Migrations.cs index 7c55838887c..2c751846a05 100644 --- a/src/Orchard.Web/Modules/Orchard.Projections/Migrations.cs +++ b/src/Orchard.Web/Modules/Orchard.Projections/Migrations.cs @@ -36,6 +36,7 @@ public int Create() { .Column("Id", c => c.PrimaryKey().Identity()) .Column("PropertyName") .Column("Value", c => c.WithLength(4000)) + .Column("LatestValue", c => c.WithLength(4000)) .Column("FieldIndexPartRecord_Id") ); @@ -44,6 +45,7 @@ public int Create() { .Column("Id", c => c.PrimaryKey().Identity()) .Column("PropertyName") .Column("Value") + .Column("LatestValue") .Column("FieldIndexPartRecord_Id") ); @@ -52,6 +54,7 @@ public int Create() { .Column("Id", c => c.PrimaryKey().Identity()) .Column("PropertyName") .Column("Value") + .Column("LatestValue") .Column("FieldIndexPartRecord_Id") ); @@ -60,11 +63,25 @@ public int Create() { .Column("Id", c => c.PrimaryKey().Identity()) .Column("PropertyName") .Column("Value") + .Column("LatestValue") .Column("FieldIndexPartRecord_Id") ); SchemaBuilder.CreateTable("FieldIndexPartRecord", table => table.ContentPartRecord()); + //Adds indexes for better performances in queries + SchemaBuilder.AlterTable("StringFieldIndexRecord", table => table.CreateIndex("IX_PropertyName", new string[] { "PropertyName" })); + SchemaBuilder.AlterTable("StringFieldIndexRecord", table => table.CreateIndex("IX_FieldIndexPartRecord_Id", new string[] { "FieldIndexPartRecord_Id" })); + + SchemaBuilder.AlterTable("IntegerFieldIndexRecord", table => table.CreateIndex("IX_PropertyName", new string[] { "PropertyName" })); + SchemaBuilder.AlterTable("IntegerFieldIndexRecord", table => table.CreateIndex("IX_FieldIndexPartRecord_Id", new string[] { "FieldIndexPartRecord_Id" })); + + SchemaBuilder.AlterTable("DoubleFieldIndexRecord", table => table.CreateIndex("IX_PropertyName", new string[] { "PropertyName" })); + SchemaBuilder.AlterTable("DoubleFieldIndexRecord", table => table.CreateIndex("IX_FieldIndexPartRecord_Id", new string[] { "FieldIndexPartRecord_Id" })); + + SchemaBuilder.AlterTable("DecimalFieldIndexRecord", table => table.CreateIndex("IX_PropertyName", new string[] { "PropertyName" })); + SchemaBuilder.AlterTable("DecimalFieldIndexRecord", table => table.CreateIndex("IX_FieldIndexPartRecord_Id", new string[] { "FieldIndexPartRecord_Id" })); + // Query ContentDefinitionManager.AlterTypeDefinition("Query", @@ -77,6 +94,7 @@ public int Create() { SchemaBuilder.CreateTable("QueryPartRecord", table => table .ContentPartRecord() + .Column("VersionScope", c => c.WithLength(15)) ); SchemaBuilder.CreateTable("FilterGroupRecord", @@ -118,6 +136,7 @@ public int Create() { .Column("Display") .Column("QueryPartRecord_id") .Column("GroupProperty_id") + .Column("GUIdentifier", column => column.WithLength(68)) ); SchemaBuilder.CreateTable("PropertyRecord", @@ -203,9 +222,28 @@ public int Create() { .WithPart("ProjectionPart") .WithPart("AdminMenuPart", p => p.WithSetting("AdminMenuPartTypeSettings.DefaultPosition", "5")) .Creatable() + .Listable() .DisplayedAs("Projection") ); + SchemaBuilder.CreateTable("NavigationQueryPartRecord", + table => table.ContentPartRecord() + .Column("Items") + .Column("Skip") + .Column("QueryPartRecord_id") + ); + + ContentDefinitionManager.AlterTypeDefinition("NavigationQueryMenuItem", + cfg => cfg + .WithIdentity() + .WithPart("NavigationQueryPart") + .WithPart("MenuPart") + .WithPart("CommonPart") + .DisplayedAs("Query Link") + .WithSetting("Description", "Injects menu items from a Query") + .WithSetting("Stereotype", "MenuItem") + ); + // Default Model Bindings - CommonPartRecord _memberBindingRepository.Create(new MemberBindingRecord { @@ -247,7 +285,7 @@ public int Create() { Description = T("The text from the Body part").Text }); - return 1; + return 6; } public int UpdateFrom1() { @@ -270,7 +308,7 @@ public int UpdateFrom1() { ContentDefinitionManager.AlterTypeDefinition("ProjectionPage", cfg => cfg.Listable()); - return 3; + return 2; } public int UpdateFrom2() { From ccdeeab4d6c5ad1899484ba566862b9bd5533721 Mon Sep 17 00:00:00 2001 From: Benedek Farkas Date: Fri, 8 Mar 2024 18:17:52 +0100 Subject: [PATCH 20/56] Fixing merge + code styling --- src/Orchard.Tests.Modules/Email/EmailChannelTests.cs | 10 ++-------- .../Modules/Orchard.Email/Activities/EmailActivity.cs | 2 +- .../Modules/Orchard.Email/Orchard.Email.csproj | 1 - 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/src/Orchard.Tests.Modules/Email/EmailChannelTests.cs b/src/Orchard.Tests.Modules/Email/EmailChannelTests.cs index c047b3072d6..53d594d575e 100644 --- a/src/Orchard.Tests.Modules/Email/EmailChannelTests.cs +++ b/src/Orchard.Tests.Modules/Email/EmailChannelTests.cs @@ -1,15 +1,9 @@ using System.Collections.Generic; using Autofac; -using Moq; using NUnit.Framework; -using Orchard.ContentManagement.Records; using Orchard.DisplayManagement; -using Orchard.Email.Services; -using Orchard.Messaging.Events; using Orchard.Messaging.Services; -using Orchard.Tests.Messaging; using Orchard.Tests.Modules.Stubs; -using Orchard.Tests.Utility; namespace Orchard.Tests.Modules.Email { [TestFixture] @@ -30,10 +24,10 @@ public void Init() { var container = builder.Build(); _messageService = container.Resolve(); } - + [Test] public void CanSendEmailUsingAddresses() { - _messageService.Send("Email", new Dictionary() { {"", null} }); + _messageService.Send("Email", new Dictionary() { { "", null } }); Assert.That(_smtpChannel.Processed, Is.Not.Null); } diff --git a/src/Orchard.Web/Modules/Orchard.Email/Activities/EmailActivity.cs b/src/Orchard.Web/Modules/Orchard.Email/Activities/EmailActivity.cs index 2ef62a2681e..b6f13bebd82 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Activities/EmailActivity.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Activities/EmailActivity.cs @@ -69,7 +69,7 @@ public override IEnumerable Execute(WorkflowContext workflowCon {"ReplyTo", replyTo}, {"Bcc", bcc}, {"CC", cc}, - {"NotifyReadEmail",notifyReadEmail } + {"NotifyReadEmail", notifyReadEmail } }; if (string.IsNullOrWhiteSpace(recipients)) { diff --git a/src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj b/src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj index 0419919d239..535553b9f1d 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj +++ b/src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj @@ -74,7 +74,6 @@ ..\..\..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll - ..\..\..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll From 52b40538ce45b51e66cf4a2bb165168bbbd64f97 Mon Sep 17 00:00:00 2001 From: Benedek Farkas Date: Fri, 8 Mar 2024 18:21:06 +0100 Subject: [PATCH 21/56] Resolving merge conflict in MediaLibraryPickerFieldHandler between fd3ad79dcaa47040ee94e3c511f0b18abb85893e and 03884cbd6431721ffe69b03c69ba672a1cb44dc1 --- .../Handlers/MediaLibraryPickerFieldHandler.cs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaLibraryPickerFieldHandler.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaLibraryPickerFieldHandler.cs index 77a69708b7f..8817eb5b48a 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaLibraryPickerFieldHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaLibraryPickerFieldHandler.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using Orchard.ContentManagement; using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.MetaData; @@ -11,9 +9,7 @@ namespace Orchard.MediaLibrary.Handlers { public class MediaLibraryPickerFieldHandler : ContentHandler { private readonly IContentDefinitionManager _contentDefinitionManager; - public MediaLibraryPickerFieldHandler( - IContentDefinitionManager contentDefinitionManager) { - + public MediaLibraryPickerFieldHandler(IContentDefinitionManager contentDefinitionManager) { _contentDefinitionManager = contentDefinitionManager; } @@ -34,7 +30,8 @@ private void InitilizeLoader(ContentItem contentItem) { foreach (var field in fields) { var localField = field; // Using context content item's ContentManager instead of injected one to avoid lifetime scope exceptions in case of LazyFields. - localField._contentItems = new Lazy>(() => contentItem.ContentManager.GetMany(localField.Ids, VersionOptions.Published, QueryHints.Empty).ToList()); + localField._contentItems.Loader(() => + contentItem.ContentManager.GetMany(localField.Ids, VersionOptions.Published, QueryHints.Empty).ToList()); } } } From 0e1129ec7462b9b77b5002713590ee5f0440c6ed Mon Sep 17 00:00:00 2001 From: Benedek Farkas Date: Fri, 8 Mar 2024 18:28:53 +0100 Subject: [PATCH 22/56] Re-applying change from 6ea2b8c7f49beda69fada4b037c5320a4bed34ca (Log error when Recipient emailMessage.Recipients is null) --- .../Modules/Orchard.Email/Services/SmtpMessageChannel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs index 3c6437372dd..e2d580646b8 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs @@ -57,7 +57,7 @@ public void Process(IDictionary parameters) { Cc = Read(parameters, "CC") }; - if (emailMessage.Recipients.Length == 0) { + if (string.IsNullOrWhiteSpace(emailMessage.Recipients)) { Logger.Error("Email message doesn't have any recipient"); return; } From 0fb45b445ab14fbf067f0f62cae99448af5f88ba Mon Sep 17 00:00:00 2001 From: Benedek Farkas Date: Fri, 8 Mar 2024 18:45:45 +0100 Subject: [PATCH 23/56] Re-applying FromAddress/FromName changes from 1c93e4a501f1203c9726b2725a240fd44fe3f746 --- .../Orchard.Email/Services/SmtpMessageChannel.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs index e2d580646b8..0eeb44071a8 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs @@ -52,7 +52,8 @@ public void Process(IDictionary parameters) { Subject = Read(parameters, "Subject"), Recipients = Read(parameters, "Recipients"), ReplyTo = Read(parameters, "ReplyTo"), - From = Read(parameters, "From"), + FromAddress = Read(parameters, "FromAddress"), + FromName = Read(parameters, "FromName"), Bcc = Read(parameters, "Bcc"), Cc = Read(parameters, "CC") }; @@ -100,16 +101,18 @@ public void Process(IDictionary parameters) { } var fromAddress = default(MailboxAddress); - if (!String.IsNullOrWhiteSpace(emailMessage.From)) { - fromAddress = MailboxAddress.Parse(emailMessage.From); + if (!String.IsNullOrWhiteSpace(emailMessage.FromAddress)) { + fromAddress = MailboxAddress.Parse(emailMessage.FromAddress); } else { // Take 'From' address from site settings or web.config. - fromAddress = !String.IsNullOrWhiteSpace(_smtpSettings.Address) - ? MailboxAddress.Parse(_smtpSettings.Address) + fromAddress = !String.IsNullOrWhiteSpace(_smtpSettings.FromAddress) + ? MailboxAddress.Parse(_smtpSettings.FromAddress) : MailboxAddress.Parse(((SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp")).From); } + fromAddress.Name = string.IsNullOrWhiteSpace(emailMessage.FromName) ? _smtpSettings.FromName : emailMessage.FromName; + mailMessage.From.Add(fromAddress); if (!String.IsNullOrWhiteSpace(emailMessage.ReplyTo)) { From c8c5196b18f0a7c70ac57072457d55d342f41782 Mon Sep 17 00:00:00 2001 From: Benedek Farkas Date: Fri, 8 Mar 2024 18:50:07 +0100 Subject: [PATCH 24/56] Re-applying logic to send attachments from 46c3fe6e79cf5da6d8ccf1abfcc0dc829d0e4d0f --- .../Orchard.Email/Services/SmtpMessageChannel.cs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs index 0eeb44071a8..50d1038fb60 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Configuration; +using System.IO; using System.Linq; using System.Net.Configuration; using System.Net.Mail; @@ -55,7 +56,11 @@ public void Process(IDictionary parameters) { FromAddress = Read(parameters, "FromAddress"), FromName = Read(parameters, "FromName"), Bcc = Read(parameters, "Bcc"), - Cc = Read(parameters, "CC") + Cc = Read(parameters, "CC"), + Attachments = (IEnumerable)(parameters.ContainsKey("Attachments") + ? parameters["Attachments"] + : new List() + ) }; if (string.IsNullOrWhiteSpace(emailMessage.Recipients)) { @@ -87,6 +92,15 @@ public void Process(IDictionary parameters) { } } + foreach (var attachmentPath in emailMessage.Attachments) { + if (File.Exists(attachmentPath)) { + mailBodyBuilder.Attachments.Add(attachmentPath); + } + else { + throw new FileNotFoundException(T("One or more attachments not found.").Text); + } + } + mailMessage.Body = mailBodyBuilder.ToMessageBody(); try { From 049cc6a371043d428b5edf3df5e5785b6e41f8b5 Mon Sep 17 00:00:00 2001 From: Benedek Farkas Date: Fri, 8 Mar 2024 18:51:03 +0100 Subject: [PATCH 25/56] Re-applying logic to ask for an email read notification from 7c725bf2ec8dc946e99add7c039c2dfdf663e57b --- src/Orchard.Web/Modules/Orchard.Email/Models/EmailMessage.cs | 1 + .../Modules/Orchard.Email/Services/SmtpMessageChannel.cs | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/src/Orchard.Web/Modules/Orchard.Email/Models/EmailMessage.cs b/src/Orchard.Web/Modules/Orchard.Email/Models/EmailMessage.cs index c6f5e60bac8..190b5a5ce3c 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Models/EmailMessage.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Models/EmailMessage.cs @@ -10,6 +10,7 @@ public class EmailMessage { public string FromName { get; set; } public string Bcc { get; set; } public string Cc { get; set; } + public bool NotifyReadEmail { get; set; } /// /// IEnumerable of strings representing attachments paths /// diff --git a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs index 50d1038fb60..5f35f1aa48e 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Services/SmtpMessageChannel.cs @@ -57,6 +57,7 @@ public void Process(IDictionary parameters) { FromName = Read(parameters, "FromName"), Bcc = Read(parameters, "Bcc"), Cc = Read(parameters, "CC"), + NotifyReadEmail = bool.TryParse(Read(parameters, "NotifyReadEmail"), out var notify) && notify, Attachments = (IEnumerable)(parameters.ContainsKey("Attachments") ? parameters["Attachments"] : new List() @@ -133,6 +134,10 @@ public void Process(IDictionary parameters) { mailMessage.ReplyTo.AddRange(ParseRecipients(emailMessage.ReplyTo)); } + if (emailMessage.NotifyReadEmail) { + mailMessage.Headers.Add("Disposition-Notification-To", mailMessage.From.ToString()); + } + _smtpClientField.Value.Send(mailMessage); } catch (Exception e) { From f2f3a25afa522f7b676f9422ce10c8664a640d21 Mon Sep 17 00:00:00 2001 From: Benedek Farkas Date: Fri, 8 Mar 2024 19:00:52 +0100 Subject: [PATCH 26/56] Fixing build warning --- .../Modules/Orchard.ContentPicker/Tokens/FieldTokens.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.ContentPicker/Tokens/FieldTokens.cs b/src/Orchard.Web/Modules/Orchard.ContentPicker/Tokens/FieldTokens.cs index 341b15eaa1e..4b73bded0bb 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentPicker/Tokens/FieldTokens.cs +++ b/src/Orchard.Web/Modules/Orchard.ContentPicker/Tokens/FieldTokens.cs @@ -1,9 +1,9 @@ using System; +using System.Linq; using Orchard.ContentManagement; -using Orchard.Events; using Orchard.ContentPicker.Fields; +using Orchard.Events; using Orchard.Localization; -using NHibernate.Util; namespace Orchard.ContentPicker.Tokens { public interface ITokenProvider : IEventHandler { @@ -30,7 +30,7 @@ public void Evaluate(dynamic context) { context.For("ContentPickerField") .Token("Content", (Func)(field => field.Ids[0])) .Chain("Content", "Content", (Func)(field => { - var id = field.Ids.Any() ? field.Ids[0] : 0; + var id = field.Ids.Any() ? field.Ids[0] : 0; return _contentManager.Get(id); })) ; From 358744e8c02869893a19d29004fcdc5537f7b33f Mon Sep 17 00:00:00 2001 From: Benedek Farkas Date: Fri, 8 Mar 2024 19:34:09 +0100 Subject: [PATCH 27/56] Fixing merge error in Orchard.Projections/Migrations.cs --- src/Orchard.Web/Modules/Orchard.Projections/Migrations.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Orchard.Web/Modules/Orchard.Projections/Migrations.cs b/src/Orchard.Web/Modules/Orchard.Projections/Migrations.cs index 3db80253aee..2c57885ef95 100644 --- a/src/Orchard.Web/Modules/Orchard.Projections/Migrations.cs +++ b/src/Orchard.Web/Modules/Orchard.Projections/Migrations.cs @@ -166,7 +166,6 @@ public int Create() { .Column("Display") .Column("QueryPartRecord_id") .Column("GroupProperty_id") - .Column("GUIdentifier", column => column.WithLength(68)) ); SchemaBuilder.CreateTable("PropertyRecord", From f667d00843144992b52be9725eb06c9e564e718a Mon Sep 17 00:00:00 2001 From: Benedek Farkas Date: Sat, 9 Mar 2024 11:13:19 +0100 Subject: [PATCH 28/56] Adding verbosity = minimal to msbuild commands in the compile workflow --- .github/workflows/compile.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml index ce5f1a9591b..c9fce91ef8a 100644 --- a/.github/workflows/compile.yml +++ b/.github/workflows/compile.yml @@ -28,7 +28,7 @@ jobs: uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2.0.0 - name: Compile - run: msbuild Orchard.proj /m /t:Compile /p:MvcBuildViews=true /p:TreatWarningsAsErrors=true -WarnAsError + run: msbuild Orchard.proj /m /t:Compile /v:minimal /p:MvcBuildViews=true /p:TreatWarningsAsErrors=true -WarnAsError - name: Test - run: msbuild Orchard.proj /m /t:Test + run: msbuild Orchard.proj /m /t:Test /v:minimal From bfe5671e9dd70c5237f4fa4d90129b8435b84a1c Mon Sep 17 00:00:00 2001 From: Benedek Farkas Date: Sat, 9 Mar 2024 11:22:17 +0100 Subject: [PATCH 29/56] Adding verbosity = minimal to msbuild commands in the specflow workflow too --- .github/workflows/compile.yml | 4 ++-- .github/workflows/specflow.yml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml index c9fce91ef8a..611c44a8823 100644 --- a/.github/workflows/compile.yml +++ b/.github/workflows/compile.yml @@ -28,7 +28,7 @@ jobs: uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2.0.0 - name: Compile - run: msbuild Orchard.proj /m /t:Compile /v:minimal /p:MvcBuildViews=true /p:TreatWarningsAsErrors=true -WarnAsError + run: msbuild Orchard.proj /m /v:minimal /t:Compile /p:MvcBuildViews=true /p:TreatWarningsAsErrors=true -WarnAsError - name: Test - run: msbuild Orchard.proj /m /t:Test /v:minimal + run: msbuild Orchard.proj /m /v:minimal /t:Test diff --git a/.github/workflows/specflow.yml b/.github/workflows/specflow.yml index 8e058809ebe..93ab66a64d0 100644 --- a/.github/workflows/specflow.yml +++ b/.github/workflows/specflow.yml @@ -30,10 +30,10 @@ jobs: uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2.0.0 - name: Compile - run: msbuild Orchard.proj /m /t:Compile /p:MvcBuildViews=true /p:TreatWarningsAsErrors=true -WarnAsError + run: msbuild Orchard.proj /m /v:minimal /t:Compile /p:MvcBuildViews=true /p:TreatWarningsAsErrors=true -WarnAsError - name: Test - run: msbuild Orchard.proj /m /t:Test + run: msbuild Orchard.proj /m /v:minimal /t:Test - name: Spec - run: msbuild Orchard.proj /m /t:Spec + run: msbuild Orchard.proj /m /v:minimal /t:Spec From 7226b0614299ecdcd9f1269a06bd9833a7ee4e23 Mon Sep 17 00:00:00 2001 From: Benedek Farkas Date: Sat, 9 Mar 2024 12:55:00 +0100 Subject: [PATCH 30/56] Updating rebuilt client-side assets that only changed in terms of sourceMappingURL --- .../Orchard.Azure.MediaServices/Scripts/Lib/console-shim.js | 2 +- .../Modules/Orchard.Azure.MediaServices/Scripts/Lib/dash.all.js | 2 +- .../Modules/Orchard.Azure.MediaServices/Scripts/Lib/jstree.js | 2 +- .../Orchard.Azure.MediaServices/Scripts/Lib/swfobject.js | 2 +- .../Scripts/cloudmedia-admin-common.js | 2 +- .../Scripts/cloudmedia-admin-settings.js | 2 +- .../Scripts/cloudmedia-autorefresh.js | 2 +- .../Scripts/cloudmedia-edit-asset-video.js | 2 +- .../Scripts/cloudmedia-edit-asset.js | 2 +- .../Scripts/cloudmedia-edit-cloudvideopart-direct.js | 2 +- .../Scripts/cloudmedia-edit-cloudvideopart-proxied.js | 2 +- .../Scripts/cloudmedia-edit-cloudvideopart.js | 2 +- .../Scripts/cloudmedia-metadata-cloudvideopart.js | 2 +- .../Scripts/cloudmedia-videoplayer-data.js | 2 +- .../Scripts/cloudmedia-videoplayer-injectors-alt.js | 2 +- .../Scripts/cloudmedia-videoplayer-injectors-dash.js | 2 +- .../Scripts/cloudmedia-videoplayer-injectors-html5.js | 2 +- .../Scripts/cloudmedia-videoplayer-injectors-smp.js | 2 +- .../Scripts/cloudmedia-videoplayer-injectors.js | 2 +- .../Scripts/cloudmedia-videoplayer-main.js | 2 +- .../Styles/cloudmedia-admin-asset.css | 2 +- .../Styles/cloudmedia-admin-selecttask.css | 2 +- .../Styles/cloudmedia-admin-settings.css | 2 +- .../Styles/cloudmedia-edit-assets.css | 2 +- .../Styles/cloudmedia-edit-cloudvideopart.css | 2 +- .../Orchard.Azure.MediaServices/Styles/cloudmedia-edit-jobs.css | 2 +- .../Orchard.Azure.MediaServices/Styles/cloudmedia-progress.css | 2 +- .../Orchard.Azure.MediaServices/Styles/cloudmedia-tabs.css | 2 +- .../Styles/cloudmedia-videoplayer.css | 2 +- .../Styles/menu.cloudmedia-mediaproviders.css | 2 +- .../Modules/Orchard.DynamicForms/Scripts/LayoutEditor.js | 2 +- src/Orchard.Web/Modules/Orchard.DynamicForms/Scripts/Lib.js | 2 +- .../Modules/Orchard.DynamicForms/Styles/DynamicForms-Admin.css | 2 +- .../Modules/Orchard.DynamicForms/Styles/DynamicForms.css | 2 +- src/Orchard.Web/Modules/Orchard.Layouts/Scripts/Models.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-af.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-am.js | 2 +- .../Scripts/Calendars/jquery.calendars-ar-DZ.js | 2 +- .../Scripts/Calendars/jquery.calendars-ar-EG.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-ar.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-az.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-bg.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-bs.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-ca.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-cs.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-da.js | 2 +- .../Scripts/Calendars/jquery.calendars-de-CH.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-de.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-el.js | 2 +- .../Scripts/Calendars/jquery.calendars-en-AU.js | 2 +- .../Scripts/Calendars/jquery.calendars-en-GB.js | 2 +- .../Scripts/Calendars/jquery.calendars-en-NZ.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-eo.js | 2 +- .../Scripts/Calendars/jquery.calendars-es-AR.js | 2 +- .../Scripts/Calendars/jquery.calendars-es-PE.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-es.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-et.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-eu.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-fa.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-fi.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-fo.js | 2 +- .../Scripts/Calendars/jquery.calendars-fr-CH.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-fr.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-gl.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-gu.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-he.js | 2 +- .../Scripts/Calendars/jquery.calendars-hi-IN.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-hr.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-hu.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-hy.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-id.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-is.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-it.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-ja.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-ka.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-km.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-ko.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-lt.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-lv.js | 2 +- .../Scripts/Calendars/jquery.calendars-me-ME.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-me.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-mk.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-ml.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-ms.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-mt.js | 2 +- .../Scripts/Calendars/jquery.calendars-nl-BE.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-nl.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-no.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-pl.js | 2 +- .../Scripts/Calendars/jquery.calendars-pt-BR.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-rm.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-ro.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-ru.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-sk.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-sl.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-sq.js | 2 +- .../Scripts/Calendars/jquery.calendars-sr-SR.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-sr.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-sv.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-ta.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-th.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-tr.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-tt.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-uk.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-ur.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars-vi.js | 2 +- .../Scripts/Calendars/jquery.calendars-zh-CN.js | 2 +- .../Scripts/Calendars/jquery.calendars-zh-HK.js | 2 +- .../Scripts/Calendars/jquery.calendars-zh-TW.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars.all.js | 2 +- .../Scripts/Calendars/jquery.calendars.coptic.js | 2 +- .../Scripts/Calendars/jquery.calendars.ethiopian-am.js | 2 +- .../Scripts/Calendars/jquery.calendars.ethiopian.js | 2 +- .../Scripts/Calendars/jquery.calendars.hebrew-he.js | 2 +- .../Scripts/Calendars/jquery.calendars.hebrew.js | 2 +- .../Scripts/Calendars/jquery.calendars.islamic-ar.js | 2 +- .../Scripts/Calendars/jquery.calendars.islamic-fa.js | 2 +- .../Scripts/Calendars/jquery.calendars.islamic.js | 2 +- .../Orchard.Resources/Scripts/Calendars/jquery.calendars.js | 2 +- .../Scripts/Calendars/jquery.calendars.julian.js | 2 +- .../Scripts/Calendars/jquery.calendars.lang.js | 2 +- .../Scripts/Calendars/jquery.calendars.mayan.js | 2 +- .../Scripts/Calendars/jquery.calendars.nepali-ne.js | 2 +- .../Scripts/Calendars/jquery.calendars.nepali.js | 2 +- .../Scripts/Calendars/jquery.calendars.persian-fa.js | 2 +- .../Scripts/Calendars/jquery.calendars.persian.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-af.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-am.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-ar-DZ.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-ar-EG.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-ar.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-az.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-bg.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-bs.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-ca.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-cs.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-da.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-de-CH.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-de.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-el.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-en-AU.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-en-GB.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-en-NZ.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-eo.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-es-AR.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-es-PE.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-es.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-et.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-eu.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-fa.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-fi.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-fo.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-fr-CH.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-fr.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-gl.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-gu.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-he.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-hi-IN.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-hr.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-hu.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-hy.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-id.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-is.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-it.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-ja.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-ka.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-km.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-ko.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-lt.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-lv.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-me-ME.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-me.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-mk.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-ml.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-ms.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-mt.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-nl-BE.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-nl.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-no.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-pl.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-pt-BR.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-rm.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-ro.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-ru.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-sk.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-sl.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-sq.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-sr-SR.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-sr.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-sv.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-ta.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-th.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-tr.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-tt.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-uk.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-ur.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-vi.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-zh-CN.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-zh-HK.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker-zh-TW.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker.ext.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker.full.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker.js | 2 +- .../Scripts/Calendars/jquery.calendars.picker.lang.js | 2 +- .../Scripts/Calendars/jquery.calendars.plus.js | 2 +- .../Scripts/Calendars/jquery.calendars.taiwan-zh-TW.js | 2 +- .../Scripts/Calendars/jquery.calendars.taiwan.js | 2 +- .../Scripts/Calendars/jquery.calendars.thai-th.js | 2 +- .../Scripts/Calendars/jquery.calendars.thai.js | 2 +- .../Scripts/Calendars/jquery.calendars.ummalqura-ar.js | 2 +- .../Scripts/Calendars/jquery.calendars.ummalqura.js | 2 +- .../Scripts/Calendars/jquery.calendars.validation.js | 2 +- .../Orchard.Resources/Scripts/TimeEntry/jquery.timeentry.js | 2 +- .../Modules/Orchard.Resources/Scripts/angular-resource.js | 2 +- .../Modules/Orchard.Resources/Scripts/angular-sanitize.js | 2 +- .../Modules/Orchard.Resources/Scripts/angular-sortable.js | 2 +- src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular.js | 2 +- src/Orchard.Web/Modules/Orchard.Resources/Scripts/bootstrap.js | 2 +- .../Modules/Orchard.Resources/Scripts/jquery.blockui.js | 2 +- .../Modules/Orchard.Resources/Scripts/jquery.colorbox.js | 2 +- .../Modules/Orchard.Resources/Scripts/jquery.cookie.js | 2 +- .../Modules/Orchard.Resources/Scripts/jquery.fileupload-full.js | 2 +- src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.js | 2 +- .../Modules/Orchard.Resources/Scripts/jquery.plugin.js | 2 +- .../Modules/Orchard.Resources/Scripts/jquery.utils.js | 2 +- src/Orchard.Web/Modules/Orchard.Resources/Scripts/knockout.js | 2 +- src/Orchard.Web/Modules/Orchard.Resources/Scripts/moment.js | 2 +- src/Orchard.Web/Modules/Orchard.Resources/Scripts/underscore.js | 2 +- src/Orchard.Web/Modules/Orchard.Resources/Scripts/uri.js | 2 +- .../Styles/Calendars/jquery.calendars.picker.full.css | 2 +- .../Orchard.Resources/Styles/TimeEntry/jquery.timeentry.css | 2 +- .../Modules/Orchard.Resources/Styles/jquery-datetime-editor.css | 2 +- .../Modules/Orchard.Resources/Styles/jquery.colorbox.css | 2 +- 233 files changed, 233 insertions(+), 233 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/console-shim.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/console-shim.js index d63fa030658..6c12ab50c68 100644 --- a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/console-shim.js +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/console-shim.js @@ -217,4 +217,4 @@ if (!console["count"]) console["count"] = function() {}; })(); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnNvbGUtc2hpbS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJjb25zb2xlLXNoaW0uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmVzZXJ2ZSBjb25zb2xlLXNoaW0gMS4wLjJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9rYXlhaHIvY29uc29sZS1zaGltXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTEgS2xhdXMgUmVpbWVyIDxrQGFpbGlzLmRlPlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiAoU2VlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UpXG4gKi9cbiBcbiBcbihmdW5jdGlvbigpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbGxzIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gaW4gdGhlIHNwZWNpZmllZFxuICogc2NvcGUuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuY1xuICogICAgICAgICAgICBUaGUgZnVuY3Rpb24gdG8gY2FsbC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzY29wZVxuICogICAgICAgICAgICBUaGUgc2NvcGUgdG8gY2FsbCB0aGUgZnVuY3Rpb24gaW4uXG4gKiBAcGFyYW0gey4uLip9IGFyZ3NcbiAqICAgICAgICAgICAgQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgYm91bmQgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oLi4uWypdKTogdW5kZWZpbmVkfVxuICogICAgICAgICAgICBUaGUgYm91bmQgZnVuY3Rpb24uXG4gKi9cbnZhciBiaW5kID0gZnVuY3Rpb24oZnVuYywgc2NvcGUsIGFyZ3MpXG57XG4gICAgdmFyIGZpeGVkQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIHZhciBhcmdzID0gZml4ZWRBcmdzLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTtcbiAgICAgICAgKC8qKiBAdHlwZSB7RnVuY3Rpb259ICovIGZ1bmMpLmFwcGx5KHNjb3BlLCBhcmdzKTtcbiAgICB9O1xufTtcblxuLy8gQ3JlYXRlIGNvbnNvbGUgaWYgbm90IHByZXNlbnRcbmlmICghd2luZG93W1wiY29uc29sZVwiXSkgd2luZG93LmNvbnNvbGUgPSAvKiogQHR5cGUge0NvbnNvbGV9ICovICh7fSk7XG52YXIgY29uc29sZSA9ICgvKiogQHR5cGUge09iamVjdH0gKi8gd2luZG93LmNvbnNvbGUpO1xuXG4vLyBJbXBsZW1lbnQgY29uc29sZSBsb2cgaWYgbmVlZGVkXG5pZiAoIWNvbnNvbGVbXCJsb2dcIl0pXG57XG4gICAgLy8gVXNlIGxvZzRqYXZhc2NyaXB0IGlmIHByZXNlbnRcbiAgICBpZiAod2luZG93W1wibG9nNGphdmFzY3JpcHRcIl0pXG4gICAge1xuICAgICAgICB2YXIgbG9nID0gbG9nNGphdmFzY3JpcHQuZ2V0RGVmYXVsdExvZ2dlcigpO1xuICAgICAgICBjb25zb2xlLmxvZyA9IGJpbmQobG9nLmluZm8sIGxvZyk7XG4gICAgICAgIGNvbnNvbGUuZGVidWcgPSBiaW5kKGxvZy5kZWJ1ZywgbG9nKTtcbiAgICAgICAgY29uc29sZS5pbmZvID0gYmluZChsb2cuaW5mbywgbG9nKTtcbiAgICAgICAgY29uc29sZS53YXJuID0gYmluZChsb2cud2FybiwgbG9nKTtcbiAgICAgICAgY29uc29sZS5lcnJvciA9IGJpbmQobG9nLmVycm9yLCBsb2cpO1xuICAgIH1cbiAgICBcbiAgICAvLyBVc2UgZW1wdHkgZHVtbXkgaW1wbGVtZW50YXRpb24gdG8gaWdub3JlIGxvZ2dpbmdcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zb2xlLmxvZyA9ICgvKiogQHBhcmFtIHsuLi4qfSBhcmdzICovIGZ1bmN0aW9uKGFyZ3MpIHt9KTtcbiAgICB9XG59XG5cbi8vIEltcGxlbWVudCBvdGhlciBsb2cgbGV2ZWxzIHRvIGNvbnNvbGUubG9nIGlmIG1pc3NpbmdcbmlmICghY29uc29sZVtcImRlYnVnXCJdKSBjb25zb2xlLmRlYnVnID0gY29uc29sZS5sb2c7XG5pZiAoIWNvbnNvbGVbXCJpbmZvXCJdKSBjb25zb2xlLmluZm8gPSBjb25zb2xlLmxvZztcbmlmICghY29uc29sZVtcIndhcm5cIl0pIGNvbnNvbGUud2FybiA9IGNvbnNvbGUubG9nO1xuaWYgKCFjb25zb2xlW1wiZXJyb3JcIl0pIGNvbnNvbGUuZXJyb3IgPSBjb25zb2xlLmxvZztcblxuLy8gV3JhcCB0aGUgbG9nIG1ldGhvZHMgaW4gSUUgKDw9OSkgYmVjYXVzZSB0aGVpciBhcmd1bWVudCBoYW5kbGluZyBpcyB3cm9uZ1xuLy8gVGhpcyB3cmFwcGluZyBpcyBhbHNvIGRvbmUgaWYgdGhlIF9fY29uc29sZVNoaW1UZXN0X18gc3ltYm9sIGlzIHNldC4gVGhpc1xuLy8gaXMgbmVlZGVkIGZvciB1bml0IHRlc3RpbmcuXG5pZiAod2luZG93W1wiX19jb25zb2xlU2hpbVRlc3RfX1wiXSAhPSBudWxsIHx8IFxuICAgIGV2YWwoXCIvKkBjY19vbiBAX2pzY3JpcHRfdmVyc2lvbiA8PSA5QCovXCIpKVxue1xuICAgIC8qKlxuICAgICAqIFdyYXBzIHRoZSBjYWxsIHRvIGEgcmVhbCBJRSBsb2dnaW5nIG1ldGhvZC4gTW9kaWZpZXMgdGhlIGFyZ3VtZW50cyBzb1xuICAgICAqIHBhcmFtZXRlcnMgd2hpY2ggYXJlIG5vdCByZXByZXNlbnRlZCBieSBhIHBsYWNlaG9sZGVyIGFyZSBwcm9wZXJseVxuICAgICAqIHByaW50ZWQgd2l0aCBhIHNwYWNlIGNoYXJhY3RlciBhcyBzZXBhcmF0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gey4uLip9IGFyZ3NcbiAgICAgKiAgICAgICAgICAgIFRoZSBmdW5jdGlvbiBhcmd1bWVudHMuIEZpcnN0IGFyZ3VtZW50IGlzIHRoZSBsb2cgZnVuY3Rpb25cbiAgICAgKiAgICAgICAgICAgIHRvIGNhbGwsIHRoZSBvdGhlciBhcmd1bWVudHMgYXJlIHRoZSBsb2cgYXJndW1lbnRzLlxuICAgICAqL1xuICAgIHZhciB3cmFwID0gZnVuY3Rpb24oYXJncylcbiAgICB7XG4gICAgICAgIHZhciBpLCBtYXgsIG1hdGNoLCBsb2c7XG4gICAgICAgIFxuICAgICAgICAvLyBDb252ZXJ0IGFyZ3VtZW50IGxpc3QgdG8gcmVhbCBhcnJheVxuICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEZpcnN0IGFyZ3VtZW50IGlzIHRoZSBsb2cgbWV0aG9kIHRvIGNhbGxcbiAgICAgICAgbG9nID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBcbiAgICAgICAgbWF4ID0gYXJncy5sZW5ndGg7XG4gICAgICAgIGlmIChtYXggPiAxICYmIHdpbmRvd1tcIl9fY29uc29sZVNoaW1UZXN0X19cIl0gIT09IGZhbHNlKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBXaGVuIGZpcnN0IHBhcmFtZXRlciBpcyBub3QgYSBzdHJpbmcgdGhlbiBhZGQgYSBmb3JtYXQgc3RyaW5nIHRvXG4gICAgICAgICAgICAvLyB0aGUgYXJndW1lbnQgbGlzdCBzbyB3ZSBhcmUgYWJsZSB0byBtb2RpZnkgaXQgaW4gdGhlIG5leHQgc3RvcFxuICAgICAgICAgICAgaWYgKHR5cGVvZihhcmdzWzBdKSAhPSBcInN0cmluZ1wiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFyZ3MudW5zaGlmdChcIiVvXCIpO1xuICAgICAgICAgICAgICAgIG1heCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBGb3IgZWFjaCBhZGRpdGlvbmFsIHBhcmFtZXRlciB3aGljaCBoYXMgbm8gcGxhY2Vob2xkZXIgaW4gdGhlXG4gICAgICAgICAgICAvLyBmb3JtYXQgc3RyaW5nIHdlIGFkZCBhbm90aGVyIHBsYWNlaG9sZGVyIHNlcGFyYXRlZCB3aXRoIGFcbiAgICAgICAgICAgIC8vIHNwYWNlIGNoYXJhY3Rlci5cbiAgICAgICAgICAgIG1hdGNoID0gYXJnc1swXS5tYXRjaCgvJVthLXpdL2cpO1xuICAgICAgICAgICAgZm9yIChpID0gbWF0Y2ggPyBtYXRjaC5sZW5ndGggKyAxIDogMTsgaSA8IG1heDsgaSArPSAxKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFyZ3NbMF0gKz0gXCIgJW9cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBGdW5jdGlvbi5hcHBseS5jYWxsKGxvZywgY29uc29sZSwgYXJncyk7XG4gICAgfTtcbiAgICBcbiAgICAvLyBXcmFwIHRoZSBuYXRpdmUgbG9nIG1ldGhvZHMgb2YgSUUgdG8gZml4IGFyZ3VtZW50IG91dHB1dCBwcm9ibGVtc1xuICAgIGNvbnNvbGUubG9nID0gYmluZCh3cmFwLCB3aW5kb3csIGNvbnNvbGUubG9nKTtcbiAgICBjb25zb2xlLmRlYnVnID0gYmluZCh3cmFwLCB3aW5kb3csIGNvbnNvbGUuZGVidWcpO1xuICAgIGNvbnNvbGUuaW5mbyA9IGJpbmQod3JhcCwgd2luZG93LCBjb25zb2xlLmluZm8pO1xuICAgIGNvbnNvbGUud2FybiA9IGJpbmQod3JhcCwgd2luZG93LCBjb25zb2xlLndhcm4pO1xuICAgIGNvbnNvbGUuZXJyb3IgPSBiaW5kKHdyYXAsIHdpbmRvdywgY29uc29sZS5lcnJvcik7XG59XG5cbi8vIEltcGxlbWVudCBjb25zb2xlLmFzc2VydCBpZiBtaXNzaW5nXG5pZiAoIWNvbnNvbGVbXCJhc3NlcnRcIl0pXG57XG4gICAgY29uc29sZVtcImFzc2VydFwiXSA9IGZ1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICAgICAgdmFyIGV4cHIgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGlmICghZXhwcilcbiAgICAgICAge1xuICAgICAgICAgICAgYXJnc1swXSA9IFwiQXNzZXJ0aW9uIGZhaWxlZDogXCIgKyBhcmdzWzBdO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvci5hcHBseShjb25zb2xlLCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbi8vIExpbmtpbmcgY29uc29sZS5kaXIgYW5kIGNvbnNvbGUuZGlyeG1sIHRvIHRoZSBjb25zb2xlLmxvZyBtZXRob2QgaWZcbi8vIG1pc3NpbmcuIEhvcGVmdWxseSB0aGUgYnJvd3NlciBhbHJlYWR5IGxvZ3Mgb2JqZWN0cyBhbmQgRE9NIG5vZGVzIGFzIGFcbi8vIHRyZWUuXG5pZiAoIWNvbnNvbGVbXCJkaXJcIl0pIGNvbnNvbGVbXCJkaXJcIl0gPSBjb25zb2xlLmxvZztcbmlmICghY29uc29sZVtcImRpcnhtbFwiXSkgY29uc29sZVtcImRpcnhtbFwiXSA9IGNvbnNvbGUubG9nO1xuXG4vLyBMaW5raW5nIGNvbnNvbGUuZXhjZXB0aW9uIHRvIGNvbnNvbGUuZXJyb3IuIFRoaXMgaXMgbm90IHRoZSBzYW1lIGJ1dFxuLy8gYXQgbGVhc3Qgc29tZSBlcnJvciBtZXNzYWdlIGlzIGRpc3BsYXllZC5cbmlmICghY29uc29sZVtcImV4Y2VwdGlvblwiXSkgY29uc29sZVtcImV4Y2VwdGlvblwiXSA9IGNvbnNvbGUuZXJyb3I7XG5cbi8vIEltcGxlbWVudCBjb25zb2xlLnRpbWUgYW5kIGNvbnNvbGUudGltZUVuZCBpZiBvbmUgb2YgdGhlbSBpcyBtaXNzaW5nXG5pZiAoIWNvbnNvbGVbXCJ0aW1lXCJdIHx8ICFjb25zb2xlW1widGltZUVuZFwiXSlcbntcbiAgICB2YXIgdGltZXJzID0ge307XG4gICAgY29uc29sZVtcInRpbWVcIl0gPSBmdW5jdGlvbihpZClcbiAgICB7XG4gICAgICAgIHRpbWVyc1tpZF0gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9O1xuICAgIGNvbnNvbGVbXCJ0aW1lRW5kXCJdID0gZnVuY3Rpb24oaWQpXG4gICAge1xuICAgICAgICB2YXIgc3RhcnQgPSB0aW1lcnNbaWRdO1xuICAgICAgICBpZiAoc3RhcnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGlkICsgXCI6IFwiICsgKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnQpICsgXCJtc1wiKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aW1lcnNbaWRdO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuLy8gSW1wbGVtZW50IGNvbnNvbGUudGFibGUgaWYgbWlzc2luZ1xuaWYgKCFjb25zb2xlW1widGFibGVcIl0pXG57XG4gICAgY29uc29sZVtcInRhYmxlXCJdID0gZnVuY3Rpb24oZGF0YSwgY29sdW1ucylcbiAgICB7XG4gICAgICAgIHZhciBpLCBpTWF4LCByb3csIGosIGpNYXgsIGs7XG4gICAgICAgIFxuICAgICAgICAvLyBEbyBub3RoaW5nIGlmIGRhdGEgaGFzIHdyb25nIHR5cGUgb3Igbm8gZGF0YSB3YXMgc3BlY2lmaWVkXG4gICAgICAgIGlmICghZGF0YSB8fCAhKGRhdGEgaW5zdGFuY2VvZiBBcnJheSkgfHwgIWRhdGEubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIFxuICAgICAgICAvLyBBdXRvLWNhbGN1bGF0ZSBjb2x1bW5zIGFycmF5IGlmIG5vdCBzZXRcbiAgICAgICAgaWYgKCFjb2x1bW5zIHx8ICEoY29sdW1ucyBpbnN0YW5jZW9mIEFycmF5KSlcbiAgICAgICAge1xuICAgICAgICAgICAgY29sdW1ucyA9IFtdO1xuICAgICAgICAgICAgZm9yIChrIGluIGRhdGFbMF0pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhWzBdLmhhc093blByb3BlcnR5KGspKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGZvciAoaSA9IDAsIGlNYXggPSBkYXRhLmxlbmd0aDsgaSA8IGlNYXg7IGkgKz0gMSlcbiAgICAgICAge1xuICAgICAgICAgICAgcm93ID0gW107XG4gICAgICAgICAgICBmb3IgKGogPSAwLCBqTWF4ID0gY29sdW1ucy5sZW5ndGg7IGogPCBqTWF4OyBqICs9IDEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcm93LnB1c2goZGF0YVtpXVtjb2x1bW5zW2pdXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIEZ1bmN0aW9uLmFwcGx5LmNhbGwoY29uc29sZS5sb2csIGNvbnNvbGUsIHJvdyk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG4vLyBEdW1teSBpbXBsZW1lbnRhdGlvbnMgb2Ygb3RoZXIgY29uc29sZSBmZWF0dXJlcyB0byBwcmV2ZW50IGVycm9yIG1lc3NhZ2VzXG4vLyBpbiBicm93c2VycyBub3Qgc3VwcG9ydGluZyBpdC5cbmlmICghY29uc29sZVtcImNsZWFyXCJdKSBjb25zb2xlW1wiY2xlYXJcIl0gPSBmdW5jdGlvbigpIHt9O1xuaWYgKCFjb25zb2xlW1widHJhY2VcIl0pIGNvbnNvbGVbXCJ0cmFjZVwiXSA9IGZ1bmN0aW9uKCkge307XG5pZiAoIWNvbnNvbGVbXCJncm91cFwiXSkgY29uc29sZVtcImdyb3VwXCJdID0gZnVuY3Rpb24oKSB7fTtcbmlmICghY29uc29sZVtcImdyb3VwQ29sbGFwc2VkXCJdKSBjb25zb2xlW1wiZ3JvdXBDb2xsYXBzZWRcIl0gPSBmdW5jdGlvbigpIHt9O1xuaWYgKCFjb25zb2xlW1wiZ3JvdXBFbmRcIl0pIGNvbnNvbGVbXCJncm91cEVuZFwiXSA9IGZ1bmN0aW9uKCkge307XG5pZiAoIWNvbnNvbGVbXCJ0aW1lU3RhbXBcIl0pIGNvbnNvbGVbXCJ0aW1lU3RhbXBcIl0gPSBmdW5jdGlvbigpIHt9O1xuaWYgKCFjb25zb2xlW1wicHJvZmlsZVwiXSkgY29uc29sZVtcInByb2ZpbGVcIl0gPSBmdW5jdGlvbigpIHt9O1xuaWYgKCFjb25zb2xlW1wicHJvZmlsZUVuZFwiXSkgY29uc29sZVtcInByb2ZpbGVFbmRcIl0gPSBmdW5jdGlvbigpIHt9O1xuaWYgKCFjb25zb2xlW1wiY291bnRcIl0pIGNvbnNvbGVbXCJjb3VudFwiXSA9IGZ1bmN0aW9uKCkge307XG5cbn0pKCk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnNvbGUtc2hpbS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJjb25zb2xlLXNoaW0uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQHByZXNlcnZlIGNvbnNvbGUtc2hpbSAxLjAuMlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20va2F5YWhyL2NvbnNvbGUtc2hpbVxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTEgS2xhdXMgUmVpbWVyIDxrQGFpbGlzLmRlPlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcclxuICogKFNlZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlKVxyXG4gKi9cclxuIFxyXG4gXHJcbihmdW5jdGlvbigpe1xyXG5cInVzZSBzdHJpY3RcIjtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FsbHMgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBpbiB0aGUgc3BlY2lmaWVkXHJcbiAqIHNjb3BlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXHJcbiAqICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHRvIGNhbGwuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY29wZVxyXG4gKiAgICAgICAgICAgIFRoZSBzY29wZSB0byBjYWxsIHRoZSBmdW5jdGlvbiBpbi5cclxuICogQHBhcmFtIHsuLi4qfSBhcmdzXHJcbiAqICAgICAgICAgICAgQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgYm91bmQgZnVuY3Rpb24uXHJcbiAqIEByZXR1cm5zIHtmdW5jdGlvbiguLi5bKl0pOiB1bmRlZmluZWR9XHJcbiAqICAgICAgICAgICAgVGhlIGJvdW5kIGZ1bmN0aW9uLlxyXG4gKi9cclxudmFyIGJpbmQgPSBmdW5jdGlvbihmdW5jLCBzY29wZSwgYXJncylcclxue1xyXG4gICAgdmFyIGZpeGVkQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBhcmdzID0gZml4ZWRBcmdzLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTtcclxuICAgICAgICAoLyoqIEB0eXBlIHtGdW5jdGlvbn0gKi8gZnVuYykuYXBwbHkoc2NvcGUsIGFyZ3MpO1xyXG4gICAgfTtcclxufTtcclxuXHJcbi8vIENyZWF0ZSBjb25zb2xlIGlmIG5vdCBwcmVzZW50XHJcbmlmICghd2luZG93W1wiY29uc29sZVwiXSkgd2luZG93LmNvbnNvbGUgPSAvKiogQHR5cGUge0NvbnNvbGV9ICovICh7fSk7XHJcbnZhciBjb25zb2xlID0gKC8qKiBAdHlwZSB7T2JqZWN0fSAqLyB3aW5kb3cuY29uc29sZSk7XHJcblxyXG4vLyBJbXBsZW1lbnQgY29uc29sZSBsb2cgaWYgbmVlZGVkXHJcbmlmICghY29uc29sZVtcImxvZ1wiXSlcclxue1xyXG4gICAgLy8gVXNlIGxvZzRqYXZhc2NyaXB0IGlmIHByZXNlbnRcclxuICAgIGlmICh3aW5kb3dbXCJsb2c0amF2YXNjcmlwdFwiXSlcclxuICAgIHtcclxuICAgICAgICB2YXIgbG9nID0gbG9nNGphdmFzY3JpcHQuZ2V0RGVmYXVsdExvZ2dlcigpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nID0gYmluZChsb2cuaW5mbywgbG9nKTtcclxuICAgICAgICBjb25zb2xlLmRlYnVnID0gYmluZChsb2cuZGVidWcsIGxvZyk7XHJcbiAgICAgICAgY29uc29sZS5pbmZvID0gYmluZChsb2cuaW5mbywgbG9nKTtcclxuICAgICAgICBjb25zb2xlLndhcm4gPSBiaW5kKGxvZy53YXJuLCBsb2cpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IgPSBiaW5kKGxvZy5lcnJvciwgbG9nKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gVXNlIGVtcHR5IGR1bW15IGltcGxlbWVudGF0aW9uIHRvIGlnbm9yZSBsb2dnaW5nXHJcbiAgICBlbHNlXHJcbiAgICB7XHJcbiAgICAgICAgY29uc29sZS5sb2cgPSAoLyoqIEBwYXJhbSB7Li4uKn0gYXJncyAqLyBmdW5jdGlvbihhcmdzKSB7fSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIEltcGxlbWVudCBvdGhlciBsb2cgbGV2ZWxzIHRvIGNvbnNvbGUubG9nIGlmIG1pc3NpbmdcclxuaWYgKCFjb25zb2xlW1wiZGVidWdcIl0pIGNvbnNvbGUuZGVidWcgPSBjb25zb2xlLmxvZztcclxuaWYgKCFjb25zb2xlW1wiaW5mb1wiXSkgY29uc29sZS5pbmZvID0gY29uc29sZS5sb2c7XHJcbmlmICghY29uc29sZVtcIndhcm5cIl0pIGNvbnNvbGUud2FybiA9IGNvbnNvbGUubG9nO1xyXG5pZiAoIWNvbnNvbGVbXCJlcnJvclwiXSkgY29uc29sZS5lcnJvciA9IGNvbnNvbGUubG9nO1xyXG5cclxuLy8gV3JhcCB0aGUgbG9nIG1ldGhvZHMgaW4gSUUgKDw9OSkgYmVjYXVzZSB0aGVpciBhcmd1bWVudCBoYW5kbGluZyBpcyB3cm9uZ1xyXG4vLyBUaGlzIHdyYXBwaW5nIGlzIGFsc28gZG9uZSBpZiB0aGUgX19jb25zb2xlU2hpbVRlc3RfXyBzeW1ib2wgaXMgc2V0LiBUaGlzXHJcbi8vIGlzIG5lZWRlZCBmb3IgdW5pdCB0ZXN0aW5nLlxyXG5pZiAod2luZG93W1wiX19jb25zb2xlU2hpbVRlc3RfX1wiXSAhPSBudWxsIHx8IFxyXG4gICAgZXZhbChcIi8qQGNjX29uIEBfanNjcmlwdF92ZXJzaW9uIDw9IDlAKi9cIikpXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogV3JhcHMgdGhlIGNhbGwgdG8gYSByZWFsIElFIGxvZ2dpbmcgbWV0aG9kLiBNb2RpZmllcyB0aGUgYXJndW1lbnRzIHNvXHJcbiAgICAgKiBwYXJhbWV0ZXJzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50ZWQgYnkgYSBwbGFjZWhvbGRlciBhcmUgcHJvcGVybHlcclxuICAgICAqIHByaW50ZWQgd2l0aCBhIHNwYWNlIGNoYXJhY3RlciBhcyBzZXBhcmF0b3IuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsuLi4qfSBhcmdzXHJcbiAgICAgKiAgICAgICAgICAgIFRoZSBmdW5jdGlvbiBhcmd1bWVudHMuIEZpcnN0IGFyZ3VtZW50IGlzIHRoZSBsb2cgZnVuY3Rpb25cclxuICAgICAqICAgICAgICAgICAgdG8gY2FsbCwgdGhlIG90aGVyIGFyZ3VtZW50cyBhcmUgdGhlIGxvZyBhcmd1bWVudHMuXHJcbiAgICAgKi9cclxuICAgIHZhciB3cmFwID0gZnVuY3Rpb24oYXJncylcclxuICAgIHtcclxuICAgICAgICB2YXIgaSwgbWF4LCBtYXRjaCwgbG9nO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIENvbnZlcnQgYXJndW1lbnQgbGlzdCB0byByZWFsIGFycmF5XHJcbiAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gRmlyc3QgYXJndW1lbnQgaXMgdGhlIGxvZyBtZXRob2QgdG8gY2FsbFxyXG4gICAgICAgIGxvZyA9IGFyZ3Muc2hpZnQoKTtcclxuICAgICAgICBcclxuICAgICAgICBtYXggPSBhcmdzLmxlbmd0aDtcclxuICAgICAgICBpZiAobWF4ID4gMSAmJiB3aW5kb3dbXCJfX2NvbnNvbGVTaGltVGVzdF9fXCJdICE9PSBmYWxzZSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIFdoZW4gZmlyc3QgcGFyYW1ldGVyIGlzIG5vdCBhIHN0cmluZyB0aGVuIGFkZCBhIGZvcm1hdCBzdHJpbmcgdG9cclxuICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50IGxpc3Qgc28gd2UgYXJlIGFibGUgdG8gbW9kaWZ5IGl0IGluIHRoZSBuZXh0IHN0b3BcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihhcmdzWzBdKSAhPSBcInN0cmluZ1wiKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBhcmdzLnVuc2hpZnQoXCIlb1wiKTtcclxuICAgICAgICAgICAgICAgIG1heCArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBGb3IgZWFjaCBhZGRpdGlvbmFsIHBhcmFtZXRlciB3aGljaCBoYXMgbm8gcGxhY2Vob2xkZXIgaW4gdGhlXHJcbiAgICAgICAgICAgIC8vIGZvcm1hdCBzdHJpbmcgd2UgYWRkIGFub3RoZXIgcGxhY2Vob2xkZXIgc2VwYXJhdGVkIHdpdGggYVxyXG4gICAgICAgICAgICAvLyBzcGFjZSBjaGFyYWN0ZXIuXHJcbiAgICAgICAgICAgIG1hdGNoID0gYXJnc1swXS5tYXRjaCgvJVthLXpdL2cpO1xyXG4gICAgICAgICAgICBmb3IgKGkgPSBtYXRjaCA/IG1hdGNoLmxlbmd0aCArIDEgOiAxOyBpIDwgbWF4OyBpICs9IDEpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGFyZ3NbMF0gKz0gXCIgJW9cIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBGdW5jdGlvbi5hcHBseS5jYWxsKGxvZywgY29uc29sZSwgYXJncyk7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICAvLyBXcmFwIHRoZSBuYXRpdmUgbG9nIG1ldGhvZHMgb2YgSUUgdG8gZml4IGFyZ3VtZW50IG91dHB1dCBwcm9ibGVtc1xyXG4gICAgY29uc29sZS5sb2cgPSBiaW5kKHdyYXAsIHdpbmRvdywgY29uc29sZS5sb2cpO1xyXG4gICAgY29uc29sZS5kZWJ1ZyA9IGJpbmQod3JhcCwgd2luZG93LCBjb25zb2xlLmRlYnVnKTtcclxuICAgIGNvbnNvbGUuaW5mbyA9IGJpbmQod3JhcCwgd2luZG93LCBjb25zb2xlLmluZm8pO1xyXG4gICAgY29uc29sZS53YXJuID0gYmluZCh3cmFwLCB3aW5kb3csIGNvbnNvbGUud2Fybik7XHJcbiAgICBjb25zb2xlLmVycm9yID0gYmluZCh3cmFwLCB3aW5kb3csIGNvbnNvbGUuZXJyb3IpO1xyXG59XHJcblxyXG4vLyBJbXBsZW1lbnQgY29uc29sZS5hc3NlcnQgaWYgbWlzc2luZ1xyXG5pZiAoIWNvbnNvbGVbXCJhc3NlcnRcIl0pXHJcbntcclxuICAgIGNvbnNvbGVbXCJhc3NlcnRcIl0gPSBmdW5jdGlvbigpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xyXG4gICAgICAgIHZhciBleHByID0gYXJncy5zaGlmdCgpO1xyXG4gICAgICAgIGlmICghZXhwcilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFyZ3NbMF0gPSBcIkFzc2VydGlvbiBmYWlsZWQ6IFwiICsgYXJnc1swXTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvci5hcHBseShjb25zb2xlLCBhcmdzKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG4vLyBMaW5raW5nIGNvbnNvbGUuZGlyIGFuZCBjb25zb2xlLmRpcnhtbCB0byB0aGUgY29uc29sZS5sb2cgbWV0aG9kIGlmXHJcbi8vIG1pc3NpbmcuIEhvcGVmdWxseSB0aGUgYnJvd3NlciBhbHJlYWR5IGxvZ3Mgb2JqZWN0cyBhbmQgRE9NIG5vZGVzIGFzIGFcclxuLy8gdHJlZS5cclxuaWYgKCFjb25zb2xlW1wiZGlyXCJdKSBjb25zb2xlW1wiZGlyXCJdID0gY29uc29sZS5sb2c7XHJcbmlmICghY29uc29sZVtcImRpcnhtbFwiXSkgY29uc29sZVtcImRpcnhtbFwiXSA9IGNvbnNvbGUubG9nO1xyXG5cclxuLy8gTGlua2luZyBjb25zb2xlLmV4Y2VwdGlvbiB0byBjb25zb2xlLmVycm9yLiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBidXRcclxuLy8gYXQgbGVhc3Qgc29tZSBlcnJvciBtZXNzYWdlIGlzIGRpc3BsYXllZC5cclxuaWYgKCFjb25zb2xlW1wiZXhjZXB0aW9uXCJdKSBjb25zb2xlW1wiZXhjZXB0aW9uXCJdID0gY29uc29sZS5lcnJvcjtcclxuXHJcbi8vIEltcGxlbWVudCBjb25zb2xlLnRpbWUgYW5kIGNvbnNvbGUudGltZUVuZCBpZiBvbmUgb2YgdGhlbSBpcyBtaXNzaW5nXHJcbmlmICghY29uc29sZVtcInRpbWVcIl0gfHwgIWNvbnNvbGVbXCJ0aW1lRW5kXCJdKVxyXG57XHJcbiAgICB2YXIgdGltZXJzID0ge307XHJcbiAgICBjb25zb2xlW1widGltZVwiXSA9IGZ1bmN0aW9uKGlkKVxyXG4gICAge1xyXG4gICAgICAgIHRpbWVyc1tpZF0gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIH07XHJcbiAgICBjb25zb2xlW1widGltZUVuZFwiXSA9IGZ1bmN0aW9uKGlkKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzdGFydCA9IHRpbWVyc1tpZF07XHJcbiAgICAgICAgaWYgKHN0YXJ0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coaWQgKyBcIjogXCIgKyAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydCkgKyBcIm1zXCIpO1xyXG4gICAgICAgICAgICBkZWxldGUgdGltZXJzW2lkXTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG4vLyBJbXBsZW1lbnQgY29uc29sZS50YWJsZSBpZiBtaXNzaW5nXHJcbmlmICghY29uc29sZVtcInRhYmxlXCJdKVxyXG57XHJcbiAgICBjb25zb2xlW1widGFibGVcIl0gPSBmdW5jdGlvbihkYXRhLCBjb2x1bW5zKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBpLCBpTWF4LCByb3csIGosIGpNYXgsIGs7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gRG8gbm90aGluZyBpZiBkYXRhIGhhcyB3cm9uZyB0eXBlIG9yIG5vIGRhdGEgd2FzIHNwZWNpZmllZFxyXG4gICAgICAgIGlmICghZGF0YSB8fCAhKGRhdGEgaW5zdGFuY2VvZiBBcnJheSkgfHwgIWRhdGEubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gQXV0by1jYWxjdWxhdGUgY29sdW1ucyBhcnJheSBpZiBub3Qgc2V0XHJcbiAgICAgICAgaWYgKCFjb2x1bW5zIHx8ICEoY29sdW1ucyBpbnN0YW5jZW9mIEFycmF5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbHVtbnMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChrIGluIGRhdGFbMF0pXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmICghZGF0YVswXS5oYXNPd25Qcm9wZXJ0eShrKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yIChpID0gMCwgaU1heCA9IGRhdGEubGVuZ3RoOyBpIDwgaU1heDsgaSArPSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcm93ID0gW107XHJcbiAgICAgICAgICAgIGZvciAoaiA9IDAsIGpNYXggPSBjb2x1bW5zLmxlbmd0aDsgaiA8IGpNYXg7IGogKz0gMSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcm93LnB1c2goZGF0YVtpXVtjb2x1bW5zW2pdXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIEZ1bmN0aW9uLmFwcGx5LmNhbGwoY29uc29sZS5sb2csIGNvbnNvbGUsIHJvdyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuLy8gRHVtbXkgaW1wbGVtZW50YXRpb25zIG9mIG90aGVyIGNvbnNvbGUgZmVhdHVyZXMgdG8gcHJldmVudCBlcnJvciBtZXNzYWdlc1xyXG4vLyBpbiBicm93c2VycyBub3Qgc3VwcG9ydGluZyBpdC5cclxuaWYgKCFjb25zb2xlW1wiY2xlYXJcIl0pIGNvbnNvbGVbXCJjbGVhclwiXSA9IGZ1bmN0aW9uKCkge307XHJcbmlmICghY29uc29sZVtcInRyYWNlXCJdKSBjb25zb2xlW1widHJhY2VcIl0gPSBmdW5jdGlvbigpIHt9O1xyXG5pZiAoIWNvbnNvbGVbXCJncm91cFwiXSkgY29uc29sZVtcImdyb3VwXCJdID0gZnVuY3Rpb24oKSB7fTtcclxuaWYgKCFjb25zb2xlW1wiZ3JvdXBDb2xsYXBzZWRcIl0pIGNvbnNvbGVbXCJncm91cENvbGxhcHNlZFwiXSA9IGZ1bmN0aW9uKCkge307XHJcbmlmICghY29uc29sZVtcImdyb3VwRW5kXCJdKSBjb25zb2xlW1wiZ3JvdXBFbmRcIl0gPSBmdW5jdGlvbigpIHt9O1xyXG5pZiAoIWNvbnNvbGVbXCJ0aW1lU3RhbXBcIl0pIGNvbnNvbGVbXCJ0aW1lU3RhbXBcIl0gPSBmdW5jdGlvbigpIHt9O1xyXG5pZiAoIWNvbnNvbGVbXCJwcm9maWxlXCJdKSBjb25zb2xlW1wicHJvZmlsZVwiXSA9IGZ1bmN0aW9uKCkge307XHJcbmlmICghY29uc29sZVtcInByb2ZpbGVFbmRcIl0pIGNvbnNvbGVbXCJwcm9maWxlRW5kXCJdID0gZnVuY3Rpb24oKSB7fTtcclxuaWYgKCFjb25zb2xlW1wiY291bnRcIl0pIGNvbnNvbGVbXCJjb3VudFwiXSA9IGZ1bmN0aW9uKCkge307XHJcblxyXG59KSgpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/dash.all.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/dash.all.js index e2f726b5203..6ed9dadbef5 100644 --- a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/dash.all.js +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/dash.all.js @@ -8,4 +8,4 @@ function X2JS(a,b,c){function d(a){var b=a.localName;return null==b&&(b=a.baseNa Q.all(r).then(function(a){for(n.debug.log(a),k={},k[MediaPlayer.rules.SwitchRequest.prototype.STRONG]=MediaPlayer.rules.SwitchRequest.prototype.NO_CHANGE,k[MediaPlayer.rules.SwitchRequest.prototype.WEAK]=MediaPlayer.rules.SwitchRequest.prototype.NO_CHANGE,k[MediaPlayer.rules.SwitchRequest.prototype.DEFAULT]=MediaPlayer.rules.SwitchRequest.prototype.NO_CHANGE,h=0,i=a.length;i>h;h+=1)j=a[h],j.quality!==MediaPlayer.rules.SwitchRequest.prototype.NO_CHANGE&&(k[j.priority]=Math.min(k[j.priority],j.quality));k[MediaPlayer.rules.SwitchRequest.prototype.WEAK]!==MediaPlayer.rules.SwitchRequest.prototype.NO_CHANGE&&(q=MediaPlayer.rules.SwitchRequest.prototype.WEAK,p=k[MediaPlayer.rules.SwitchRequest.prototype.WEAK]),k[MediaPlayer.rules.SwitchRequest.prototype.DEFAULT]!==MediaPlayer.rules.SwitchRequest.prototype.NO_CHANGE&&(q=MediaPlayer.rules.SwitchRequest.prototype.DEFAULT,p=k[MediaPlayer.rules.SwitchRequest.prototype.DEFAULT]),k[MediaPlayer.rules.SwitchRequest.prototype.STRONG]!==MediaPlayer.rules.SwitchRequest.prototype.NO_CHANGE&&(q=MediaPlayer.rules.SwitchRequest.prototype.STRONG,p=k[MediaPlayer.rules.SwitchRequest.prototype.STRONG]),p!==MediaPlayer.rules.SwitchRequest.prototype.NO_CHANGE&&void 0!==p&&(l=p),q!==MediaPlayer.rules.SwitchRequest.prototype.NO_CHANGE&&void 0!==q&&(m=q),n.manifestExt.getRepresentationCount(c).then(function(a){0>l&&(l=0),l>=a&&(l=a-1),m!=MediaPlayer.rules.SwitchRequest.prototype.STRONG&&m!=MediaPlayer.rules.SwitchRequest.prototype.WEAK&&(m=MediaPlayer.rules.SwitchRequest.prototype.DEFAULT),e(b,l),n.debug.log("New quality of "+l),g(b,m),n.debug.log("New confidence of "+m),o.resolve({quality:l,confidence:m})})})})})):(n.debug.log("Unchanged quality of "+l),o.resolve({quality:l,confidence:m})),o.promise},setPlaybackQuality:function(a,b){var c=d(a);b!==c&&e(a,b)},getQualityFor:function(a){return d(a)}}},MediaPlayer.dependencies.AbrController.prototype={constructor:MediaPlayer.dependencies.AbrController},MediaPlayer.dependencies.BufferController=function(){"use strict";var a,b,c,d,e=.5,f=22,g="WAITING",h="READY",i="VALIDATING",j="LOADING",k=g,l=!1,m=!1,n=!1,o=!0,p=[],q=!1,r=-1,s=!0,t=-1,u=!1,v=!1,w=!1,x=!1,y=[],z=null,A=Q.defer(),B=null,C=null,D=-1,E=0,F=0,G=null,H=0,I=!1,J=null,K=0,L=!1,M=null,N=null,O=null,P=null,R=!0,S=function(a){var b=this;b.debug.log("BufferController "+c+" setState to:"+a),k=a,null!==G&&b.fragmentController.onBufferControllerStateChange()},T=function(a,b){var c=0,d=null;R===!1&&(d=P.start,c=a.getTime()-d.getTime(),P.duration=c,P.stopreason=b,R=!0)},U=function(){var a=this.manifestModel.getValue(),b=this.manifestExt.getIsLive(a);return w=!0,Q.when(b)},V=function(){if(l&&m){var a=this;U.call(this).then(function(b){v=b,a.debug.log("BufferController begin "+c+" validation"),S.call(a,h),a.requestScheduler.startScheduling(a,rb),G=a.fragmentController.attachBufferController(a)})}},W=function(){var a;this.requestScheduler.isScheduled(this)||(q===!1&&(a=new Date,T(a,MediaPlayer.vo.metrics.PlayList.Trace.USER_REQUEST_STOP_REASON),O=this.metricsModel.addPlayList(c,a,0,MediaPlayer.vo.metrics.PlayList.INITIAL_PLAY_START_REASON)),this.debug.log("BufferController "+c+" start."),m=!0,n=!0,V.call(this))},X=function(a){var b;this.debug.log("BufferController "+c+" seek: "+a),q=!0,r=a,b=new Date,T(b,MediaPlayer.vo.metrics.PlayList.Trace.USER_REQUEST_STOP_REASON),O=this.metricsModel.addPlayList(c,b,r,MediaPlayer.vo.metrics.PlayList.SEEK_START_REASON),W.call(this)},Y=function(){k!==g&&(this.debug.log("BufferController "+c+" stop."),S.call(this,g),this.requestScheduler.stopScheduling(this),this.fragmentController.cancelPendingRequestsForModel(G),m=!1,n=!1,T(new Date,MediaPlayer.vo.metrics.PlayList.Trace.USER_REQUEST_STOP_REASON))},Z=function(a,b){var c=null;return b&&b.Representation_asArray&&b.Representation_asArray.length>0&&(c=b.Representation_asArray[a]),c},$=function(){var a=this;k===j&&(u&&(u=!1,this.videoModel.stallStream(c,u)),S.call(a,h))},_=function(a){if(this.fragmentController.isInitializationRequest(a))S.call(this,h);else{S.call(this,j);var b=this,c=b.fragmentController.getLoadingTime(b);setTimeout(function(){(M||N)&&(S.call(b,h),qb.call(b))},c)}},ab=function(a,b){this.fragmentController.isInitializationRequest(a)?hb.call(this,a,b):bb.call(this,a,b)},bb=function(a,b){var d=this;d.debug.log(c+" Bytes finished loading: "+a.url),K||isNaN(a.duration)||(K=a.duration),d.fragmentController.process(b.data).then(function(b){null!==b&&null!==z?Q.when(z.promise).then(function(){cb.call(d,b,a.quality).then(function(){A.promise.then(function(b){b.index-1!==a.index||x||(x=!0,u&&(u=!1,d.videoModel.stallStream(c,u)),S.call(d,h),d.system.notify("bufferingCompleted"))})})}):d.debug.log("No "+c+" bytes to push.")})},cb=function(a,b){var d=this,e=a==J,h=e?B:Q.defer(),i=e?y.length:y.push(h),j=Z(t,d.getData()),l=d.videoModel.getCurrentTime(),m=new Date;return d.debug.log("Push ("+c+") bytes: "+a.byteLength),R===!0&&k!==g&&-1!==t&&(R=!1,P=d.metricsModel.appendPlayListTrace(O,j.id,null,m,l,null,1,null)),Q.when(e||2>i||y[i-2].promise).then(function(){N&&fb.call(d).then(function(){return b!==t?(h.resolve(),e&&(B=null,J=null),void 0):(Q.when(C?C.promise:!0).then(function(){d.sourceBufferExt.append(N,a,d.videoModel).then(function(){e&&(B=null,J=null),d.requestScheduler.isScheduled(d)||W.call(d),I=!1,db.call(d).then(function(){h.resolve()}),N&&d.sourceBufferExt.getAllRanges(N).then(function(a){if(a&&(d.debug.log("Append "+c+" complete: "+a.length),a.length>0)){var b,e;for(d.debug.log("Number of buffered "+c+" ranges: "+a.length),b=0,e=a.length;e>b;b+=1)d.debug.log("Buffered "+c+" Range: "+a.start(b)+" - "+a.end(b))}})},function(b){b.err.code===f&&(J=a,B=h,I=!0,F=0,Y.call(d))})}),void 0)})}),h.promise},db=function(){if(!M&&!N)return Q.when(!1);var a=this,b=Q.defer(),d=ob.call(a);return a.sourceBufferExt.getBufferLength(N,d).then(function(d){H=d,a.metricsModel.addBufferLevel(c,new Date,H),eb.call(a),b.resolve()}),b.promise},eb=function(){var a=this.bufferExt.getLeastBufferLevel(),b=2*K,c=H-a;c>b&&!C?(F=0,C=Q.defer()):b>c&&C&&(C.resolve(),C=null)},fb=function(){var a,b=this,c=Q.defer(),d=0;return I?(a=function(){gb.call(b).then(function(b){d+=b,d>=K?c.resolve():setTimeout(a,1e3*K)})},a.call(b),c.promise):Q.when(!0)},gb=function(){var a,c,d=this,e=Q.defer(),f=d.videoModel.getCurrentTime(),g=0;return c=d.fragmentController.getExecutedRequestForTime(G,f),a=c&&!isNaN(c.startTime)?c.startTime:Math.floor(f),K=c&&!isNaN(c.duration)?c.duration:1,d.sourceBufferExt.getBufferRange(N,f).then(function(c){null===c&&r===f&&N.buffered.length>0&&(a=N.buffered.end(N.buffered.length-1)),g=N.buffered.start(0),d.sourceBufferExt.remove(N,g,a,E,b).then(function(){d.fragmentController.removeExecutedRequestsBeforeTime(G,a),e.resolve(a-g)})}),e.promise},hb=function(a,b){var d=this,e=b.data,f=a.quality;d.debug.log(c+" Initialization finished loading: "+a.url),d.fragmentController.process(e).then(function(b){null!==b?(p[f]=b,f===t&&cb.call(d,b,a.quality).then(function(){z.resolve()})):d.debug.log("No "+c+" bytes to push.")})},ib=function(){var a=this,b=a.manifestModel.getValue(),c=a.manifestExt.getIsLive(b);k===j&&S.call(a,h),c||a.system.notify("segmentLoadingFailed")},jb=function(a){this.debug.log(c+" Stream is complete."),T(new Date,MediaPlayer.vo.metrics.PlayList.Trace.END_OF_CONTENT_STOP_REASON),Y.call(this),A.resolve(a)},kb=function(a,b){var d,e=null,f=this.bufferExt.getTopQualityIndex(c),g=[];if(o&&(this.debug.log("Marking a special seek for initial "+c+" playback."),q||(q=!0,r=0),o=!1),s){for(z=Q.defer(),p=[],d=0;f>=d;d+=1)g.push(this.indexHandler.getInitRequest(d,M));t=b,e=Q.all(g)}else e=Q.when(null),a&&(z=Q.defer(),t=b,p[b]&&cb.call(this,p[b],b).then(function(){z.resolve()}));return e},lb=function(b){var d,e=this;if(s&&!q)e.debug.log("Data changed - loading the "+c+" fragment for time: "+a),d=e.indexHandler.getSegmentRequestForTime(a,b,M);else{var f=Q.defer(),g=e.videoModel.getCurrentTime();d=f.promise,e.sourceBufferExt.getBufferRange(N,g).then(function(a){q=!1,null!==a&&(g=a.end),e.debug.log("Loading the "+c+" fragment for time: "+g),e.indexHandler.getSegmentRequestForTime(g,b,M).then(function(a){f.resolve(a)},function(){f.reject()})},function(){f.reject()})}return s=!1,d},mb=function(a){var b=this;null!==a?b.fragmentController.isFragmentLoadedOrPending(b,a)?"complete"!==a.action?b.indexHandler.getNextSegmentRequest(t,M).then(mb.bind(b)):(Y.call(b),S.call(b,h)):(b.debug.log("Loading an "+c+" fragment: "+a.url),Q.when(C?C.promise:!0).then(function(){b.fragmentController.prepareFragmentForLoading(b,a,_,ab,ib,jb).then(function(){S.call(b,h)})})):S.call(b,h)},nb=function(){n&&(d>H&&d0?(F--,lb.call(a,t).then(mb.bind(a))):(k===i&&S.call(a,h),$.call(a))},rb=function(){var a,b=this,d=!1,f=null,g=new Date,l=b.videoModel.getCurrentTime(),m=ob.call(b);if(b.debug.log("BufferController.validate() "+c+" | state: "+k),b.debug.log(c+" Playback rate: "+b.videoModel.getElement().playbackRate),b.debug.log(c+" Working time: "+m),b.debug.log(c+" Video time: "+l),b.debug.log("Current "+c+" buffer length: "+H),nb.call(b),k===j&&e>H)u||(b.debug.log("Stalling "+c+" Buffer: "+c),T(new Date,MediaPlayer.vo.metrics.PlayList.Trace.REBUFFERING_REASON),u=!0,n=!0,b.videoModel.stallStream(c,u));else if(k===h){S.call(b,i);var o=b.manifestModel.getValue().minBufferTime;b.bufferExt.decideBufferLength(o,E,n).then(function(a){b.debug.log("Buffer time: "+a),b.setMinBufferTime(a),b.requestScheduler.adjustExecuteInterval()}),b.abrController.getPlaybackQuality(c,M).then(function(e){var h=e.quality;if(b.debug.log(c+" Playback quality: "+h),b.debug.log("Populate "+c+" buffers."),void 0!==h&&(a=h),d=h!==t,d===!0){if(b.fragmentController.abortRequestsForModel(G),f=Z(a,b.getData()),null===f||void 0===f)throw"Unexpected error!";b.manifestExt.getTimestampOffsetForPeriod(D,b.manifestModel.getValue(),h,M).then(function(a){N.timestampOffset!==a&&(N.timestampOffset=a)}),T(new Date,MediaPlayer.vo.metrics.PlayList.Trace.REPRESENTATION_SWITCH_STOP_REASON),b.metricsModel.addRepresentationSwitch(c,g,l,f.id)}return b.debug.log(d?c+" Quality changed to: "+h:"Quality didn't change."),pb.call(b,h)}).then(function(e){F=e,kb.call(b,d,a).then(function(a){if(null!==a){var d,e,f=a.length;for(e=0;f>e;e+=1)d=a[e],b.debug.log("Loading "+c+" initialization: "+d.url),b.debug.log(d),b.fragmentController.prepareFragmentForLoading(b,d,_,ab,ib,jb).then(function(){S.call(b,h)})}}),qb.call(b)})}else k===i&&S.call(b,h)};return{videoModel:void 0,metricsModel:void 0,manifestExt:void 0,manifestModel:void 0,bufferExt:void 0,sourceBufferExt:void 0,abrController:void 0,fragmentExt:void 0,indexHandler:void 0,debug:void 0,system:void 0,errHandler:void 0,initialize:function(a,b,c,d,e,f,g,h){var i=this,j=i.manifestModel.getValue(),k=i.manifestExt.getIsLive(j);i.setMediaSource(h),i.setVideoModel(e),i.setType(a),i.setPeriodIndex(b),i.setData(c).then(function(){l=!0,V.call(i)}),i.setBuffer(d),i.setScheduler(f),i.setFragmentController(g),i.indexHandler.setIsLive(k),i.manifestExt.getDurationForPeriod(b,i.manifestModel.getValue()).then(function(a){E=a,i.indexHandler.setDuration(a),i.bufferExt.decideBufferLength(j.minBufferTime,E,n).then(function(a){i.setMinBufferTime(a)})})},getType:function(){return c},setType:function(a){c=a,void 0!==this.indexHandler&&this.indexHandler.setType(a)},getPeriodIndex:function(){return D},setPeriodIndex:function(a){D=a},getVideoModel:function(){return this.videoModel},setVideoModel:function(a){this.videoModel=a},getScheduler:function(){return this.requestScheduler},setScheduler:function(a){this.requestScheduler=a},getFragmentController:function(){return this.fragmentController},setFragmentController:function(a){this.fragmentController=a},getAutoSwitchBitrate:function(){var a=this;return a.abrController.getAutoSwitchBitrate()},setAutoSwitchBitrate:function(a){var b=this;b.abrController.setAutoSwitchBitrate(a)},getData:function(){return M},setData:function(b){var d=this,e=Q.defer(),f=M;return f||(f=b),d.abrController.getPlaybackQuality(c,f).then(function(g){d.indexHandler.getCurrentTime(g.quality,f).then(function(f){s=!0,a=f,M=b,d.seek(f),d.bufferExt.updateData(M,c),e.resolve()})}),e.promise},getBuffer:function(){return N},setBuffer:function(a){N=a},getMinBufferTime:function(){return d},setMinBufferTime:function(a){d=a},setMediaSource:function(a){b=a},isReady:function(){return k===h},isBufferingCompleted:function(){return x},clearMetrics:function(){var a=this;null!==c&&""!==c&&a.metricsModel.clearCurrentMetricsForType(c)},updateBufferState:function(){var a=this;I&&J&&!L?(L=!0,cb.call(a,J,t).then(function(){L=!1})):db.call(a)},reset:function(a){var c=this;Y.call(c),c.clearMetrics(),c.fragmentController.abortRequestsForModel(G),c.fragmentController.detachBufferController(G),G=null,y=[],z=null,p=[],A=Q.defer(),a||(c.sourceBufferExt.abort(b,N),c.sourceBufferExt.removeSourceBuffer(b,N)),M=null,N=null},start:W,seek:X,stop:Y}},MediaPlayer.dependencies.BufferController.prototype={constructor:MediaPlayer.dependencies.BufferController},MediaPlayer.dependencies.BufferExtensions=function(){"use strict";var a,b,c=0,d=0,e=null,f=null,g=function(a){var b=this.metricsExt.getCurrentHttpRequest(a);return null!==b?(b.tresponse.getTime()-b.trequest.getTime())/1e3:0},h=function(){var a,b=this,g=Q.defer();return Q.when(e?b.abrController.getPlaybackQuality("audio",e):c).then(function(e){Q.when(f?b.abrController.getPlaybackQuality("video",f):d).then(function(b){a=e.quality===c&&b.quality===d,a=a||e.confidence===MediaPlayer.rules.SwitchRequest.prototype.STRONG&&b.confidence===MediaPlayer.rules.SwitchRequest.prototype.STRONG,g.resolve(a)})}),g.promise};return{system:void 0,videoModel:void 0,manifestExt:void 0,metricsExt:void 0,metricsModel:void 0,abrController:void 0,bufferMax:void 0,updateData:function(a,b){var g=a.Representation_asArray.length-1;"audio"===b?(c=g,e=a):"video"===b&&(d=g,f=a)},getTopQualityIndex:function(a){var b=null;return"audio"===a?b=c:"video"===a&&(b=d),b},decideBufferLength:function(b,c){return a=MediaPlayer.dependencies.BufferExtensions.DEFAULT_MIN_BUFFER_TIMEb?Math.max(MediaPlayer.dependencies.BufferExtensions.DEFAULT_MIN_BUFFER_TIME,b):b>=c?Math.min(c,MediaPlayer.dependencies.BufferExtensions.DEFAULT_MIN_BUFFER_TIME):Math.min(c,b),Q.when(a)},getLeastBufferLevel:function(){var a=this.metricsModel.getReadOnlyMetricsFor("video"),b=this.metricsExt.getCurrentBufferLevel(a),c=this.metricsModel.getReadOnlyMetricsFor("audio"),d=this.metricsExt.getCurrentBufferLevel(c),e=null;return e=null===b||null===d?null!==d?d.level:null!==b?b.level:null:Math.min(d.level,b.level)},getRequiredBufferLength:function(c,d,e,f){var i,j=this,k=j.metricsModel.getReadOnlyMetricsFor("video"),l=j.metricsModel.getReadOnlyMetricsFor("audio"),m=f>=MediaPlayer.dependencies.BufferExtensions.LONG_FORM_CONTENT_DURATION_THRESHOLD,n=Q.defer(),o=null;return j.bufferMax===MediaPlayer.dependencies.BufferExtensions.BUFFER_SIZE_MIN?(i=a,n.resolve(i)):j.bufferMax===MediaPlayer.dependencies.BufferExtensions.BUFFER_SIZE_INFINITY?(i=f,n.resolve(i)):j.bufferMax===MediaPlayer.dependencies.BufferExtensions.BUFFER_SIZE_REQUIRED?(b=a,e||c||(o=h.call(j)),Q.when(o).then(function(a){a&&(b=m?MediaPlayer.dependencies.BufferExtensions.BUFFER_TIME_AT_TOP_QUALITY_LONG_FORM:MediaPlayer.dependencies.BufferExtensions.BUFFER_TIME_AT_TOP_QUALITY),i=b+d+Math.max(g.call(j,k),g.call(j,l)),n.resolve(i)})):n.reject("invalid bufferMax value: "+j.bufferMax),n.promise},getBufferTarget:function(){return void 0===b?a:b}}},MediaPlayer.dependencies.BufferExtensions.BUFFER_SIZE_REQUIRED="required",MediaPlayer.dependencies.BufferExtensions.BUFFER_SIZE_MIN="min",MediaPlayer.dependencies.BufferExtensions.BUFFER_SIZE_INFINITY="infinity",MediaPlayer.dependencies.BufferExtensions.BUFFER_TIME_AT_STARTUP=1,MediaPlayer.dependencies.BufferExtensions.DEFAULT_MIN_BUFFER_TIME=8,MediaPlayer.dependencies.BufferExtensions.BUFFER_TIME_AT_TOP_QUALITY=30,MediaPlayer.dependencies.BufferExtensions.BUFFER_TIME_AT_TOP_QUALITY_LONG_FORM=300,MediaPlayer.dependencies.BufferExtensions.LONG_FORM_CONTENT_DURATION_THRESHOLD=600,MediaPlayer.dependencies.BufferExtensions.prototype.constructor=MediaPlayer.dependencies.BufferExtensions,MediaPlayer.utils.Capabilities=function(){"use strict"},MediaPlayer.utils.Capabilities.prototype={constructor:MediaPlayer.utils.Capabilities,supportsMediaSource:function(){"use strict";var a="WebKitMediaSource"in window,b="MediaSource"in window;return a||b},supportsMediaKeys:function(){"use strict";var a="WebKitMediaKeys"in window,b="MSMediaKeys"in window,c="MediaKeys"in window;return a||b||c},supportsCodec:function(a,b){"use strict";if(!(a instanceof HTMLVideoElement))throw"element must be of type HTMLVideoElement.";var c=a.canPlayType(b);return"probably"===c}},MediaPlayer.utils.Debug=function(){"use strict";var a=!0;return{eventBus:void 0,setLogToBrowserConsole:function(b){a=b},getLogToBrowserConsole:function(){return a},log:function(b){a&&console.log(b),this.eventBus.dispatchEvent({type:"log",message:b})}}},MediaPlayer.dependencies.ErrorHandler=function(){"use strict";return{eventBus:void 0,capabilityError:function(a){this.eventBus.dispatchEvent({type:"error",error:"capability",event:a})},downloadError:function(a,b,c){this.eventBus.dispatchEvent({type:"error",error:"download",event:{id:a,url:b,request:c}})},manifestError:function(a,b,c){this.eventBus.dispatchEvent({type:"error",error:"manifestError",event:{message:a,id:b,manifest:c}})},mediaSourceError:function(a){this.eventBus.dispatchEvent({type:"error",error:"mediasource",event:a})},mediaKeySessionError:function(a){this.eventBus.dispatchEvent({type:"error",error:"key_session",event:a})},mediaKeyMessageError:function(a){this.eventBus.dispatchEvent({type:"error",error:"key_message",event:a})},mediaKeySystemSelectionError:function(a){this.eventBus.dispatchEvent({type:"error",error:"key_system_selection",event:a})}}},MediaPlayer.dependencies.ErrorHandler.prototype={constructor:MediaPlayer.dependencies.ErrorHandler},MediaPlayer.utils.EventBus=function(){"use strict";var a,b=function(b,c){var d=(c?"1":"0")+b;return d in a||(a[d]=[]),a[d]},c=function(){a={}};return c(),{addEventListener:function(a,c,d){var e=b(a,d),f=e.indexOf(c);-1===f&&e.push(c)},removeEventListener:function(a,c,d){var e=b(a,d),f=e.indexOf(c);-1!==f&&e.splice(f,1)},dispatchEvent:function(a){for(var c=b(a.type,!1).slice(),d=0;dd;d++)if(a[d].getContext()==b)return a[d];return null},c=function(){for(var b=!0,c=a.length,d=0;c>d;d++)if(!a[d].isReady()){b=!1;break}return b},d=function(){for(var b=0;b0&&(b=new Uint8Array(a)),Q.when(b)},attachBufferController:function(c){if(!c)return null;var d=b(c);return d||(d=this.system.getObject("fragmentModel"),d.setContext(c),a.push(d)),d},detachBufferController:function(b){var c=a.indexOf(b);c>-1&&a.splice(c,1)},onBufferControllerStateChange:function(){c()&&d.call(this)},isFragmentLoadedOrPending:function(a,c){var d,e=b(a);return e?d=e.isFragmentLoadedOrPending(c):!1},getPendingRequests:function(a){var c=b(a);return c?c.getPendingRequests():null},getLoadingRequests:function(a){var c=b(a);return c?c.getLoadingRequests():null},isInitializationRequest:function(a){return a&&a.type&&"initialization segment"===a.type.toLowerCase()},getLoadingTime:function(a){var c=b(a);return c?c.getLoadingTime():null},getExecutedRequestForTime:function(a,b){return a?a.getExecutedRequestForTime(b):null},removeExecutedRequest:function(a,b){a&&a.removeExecutedRequest(b)},removeExecutedRequestsBeforeTime:function(a,b){a&&a.removeExecutedRequestsBeforeTime(b)},cancelPendingRequestsForModel:function(a){a&&a.cancelPendingRequests()},abortRequestsForModel:function(a){a&&a.abortRequests()},prepareFragmentForLoading:function(a,c,d,e,f,g){var h=b(a);return h&&c&&!this.isFragmentLoadedOrPending(a,c)?(h.addRequest(c),h.setCallbacks(d,e,f,g),Q.when(!0)):Q.when(null)}}},MediaPlayer.dependencies.FragmentController.prototype={constructor:MediaPlayer.dependencies.FragmentController},MediaPlayer.dependencies.FragmentLoader=function(){"use strict";var a=3,b=500,c=[],d=function(a,e){var f=new XMLHttpRequest,g=null,h=!0,i=!0,j=this;c.push(f),a.requestStartDate=new Date,a.firstByteDate=a.requestStartDate,f.open("GET",a.url,!0),f.responseType="arraybuffer",a.range&&f.setRequestHeader("Range","bytes="+a.range),f.onprogress=function(b){h&&(h=!1,(!b.lengthComputable||b.lengthComputable&&b.total!=b.loaded)&&(a.firstByteDate=new Date))},f.onload=function(){if(!(f.status<200||f.status>299)){i=!1,a.requestEndDate=new Date;var b=a.requestEndDate,c=f.response,d=a.firstByteDate.getTime()-a.requestStartDate.getTime(),e=a.requestEndDate.getTime()-a.firstByteDate.getTime(),h=a.requestEndDate.getTime()-a.requestStartDate.getTime();j.debug.log("segment loaded: ("+f.status+", "+d+"ms, "+e+"ms, "+h+"ms) "+a.url),g=j.metricsModel.addHttpRequest(a.streamType,null,a.type,a.url,null,a.range,a.requestStartDate,a.firstByteDate,a.requestEndDate,f.status,null,a.duration),j.metricsModel.appendHttpTrace(g,b,(new Date).getTime()-b.getTime(),[c.byteLength]),a.deferred.resolve({data:c,request:a})}},f.onloadend=f.onerror=function(){if(-1!==c.indexOf(f)&&(c.splice(c.indexOf(f),1),i)){i=!1,a.requestEndDate=new Date;var h=a.firstByteDate.getTime()-a.requestStartDate.getTime(),k=a.requestEndDate.getTime()-a.firstByteDate.getTime(),l=a.requestEndDate.getTime()-a.requestStartDate.getTime();j.debug.log("segment loaded: ("+f.status+", "+h+"ms, "+k+"ms, "+l+"ms) "+a.url),g=j.metricsModel.addHttpRequest(a.streamType,null,a.type,a.url,null,a.range,a.requestStartDate,a.firstByteDate,a.requestEndDate,f.status,null,a.duration),e>0?(j.debug.log("Failed loading segment: "+a.url+", retry in "+b+"ms"+" attempts: "+e),e--,setTimeout(function(){d.call(j,a,e)},b)):(j.debug.log("Failed loading segment: "+a.url+" no retry attempts left"),j.errHandler.downloadError("content",a.url,f),a.deferred.reject(f))}},f.send()};return{metricsModel:void 0,errHandler:void 0,debug:void 0,load:function(b){return b?(b.deferred=Q.defer(),d.call(this,b,a),b.deferred.promise):Q.when(null)},abort:function(){var a,b,d=c.length;for(a=0;d>a;a+=1)b=c[a],c[a]=null,b.abort(),b=null;c=[]}}},MediaPlayer.dependencies.FragmentLoader.prototype={constructor:MediaPlayer.dependencies.FragmentLoader},MediaPlayer.dependencies.FragmentModel=function(){"use strict";var a,b,c,d,e,f=[],g=[],h=[],i=5,j=function(e){var g,i=this;b.call(a,e),g=function(b,d){h.splice(h.indexOf(b),1),f.push(b),c.call(a,b,d),b.deferred=null},i.fragmentLoader.load(e).then(g.bind(a,e),d.bind(a,e))},k=function(a,b){var c=function(a,c){return a[b]c[b]?1:0};a.sort(c)},l=function(a,b){var c,d,e=a.length-1;for(d=e;d>=0;d-=1)if(c=a[d],c.url===b.url&&c.startTime===b.startTime)return!0;return!1},m=function(a){var b=f.indexOf(a);-1!==b&&f.splice(b,1)};return{system:void 0,debug:void 0,fragmentLoader:void 0,setContext:function(b){a=b},getContext:function(){return a},addRequest:function(a){a&&(g.push(a),k.call(this,g,"index"))},setCallbacks:function(a,f,g,h){b=a,e=h,d=g,c=f},isFragmentLoadedOrPending:function(a){for(var b,c=this,d=!1,e=f.length-1,i=e;i>=0;i-=1)if(b=f[i],a.startTime===b.startTime||"complete"===b.action&&a.action===b.action){if(c.debug.log(a.streamType+" Fragment already loaded for time: "+a.startTime),a.url===b.url){c.debug.log(a.streamType+" Fragment url already loaded: "+a.url),d=!0;break}m(a)}return d||(d=l.call(c,g,a)||l.call(c,h,a)),d},isReady:function(){return a.isReady()},getPendingRequests:function(){return g},getLoadingRequests:function(){return h},getLoadingTime:function(){var a,b,c=0;for(b=f.length-1;b>=0;b-=1)if(a=f[b],a.requestEndDate instanceof Date&&a.firstByteDate instanceof Date){c=a.requestEndDate.getTime()-a.firstByteDate.getTime();break}return c},getExecutedRequestForTime:function(a){var b,c=f.length-1,d=0/0,e=0/0,g=null;for(b=c;b>=0;b-=1)if(g=f[b],d=g.startTime,e=d+g.duration,!isNaN(d)&&!isNaN(e)&&a>d&&e>a)return g;return null},removeExecutedRequest:function(a){m.call(this,a)},removeExecutedRequestsBeforeTime:function(a){var b,c=f.length-1,d=0/0,e=null;for(b=c;b>=0;b-=1)e=f[b],d=e.startTime,!isNaN(d)&&a>d&&m.call(this,e)},cancelPendingRequests:function(){g=[]},abortRequests:function(){this.fragmentLoader.abort(),h=[]},executeCurrentRequest:function(){var b,c=this;if(0!==g.length&&!(h.length>=i))switch(b=g.shift(),b.action){case"complete":f.push(b),e.call(a,b);break;case"download":h.push(b),j.call(c,b);break;default:this.debug.log("Unknown request action.")}}}},MediaPlayer.dependencies.FragmentModel.prototype={constructor:MediaPlayer.dependencies.FragmentModel},MediaPlayer.dependencies.ManifestLoader=function(){"use strict";var a=3,b=500,c=null,d=function(a){var b=null;return-1!==a.indexOf("/")&&(b=a.substring(0,a.lastIndexOf("/")+1)),b},e=function(a,f){var g=d(a),h=new XMLHttpRequest,i=new Date,j=!0,k=this;this.debug.log("Start loading manifest: "+a),h.open("GET",a,!0),h.onload=function(){h.status<200||h.status>299||(j=!1,k.metricsModel.addHttpRequest("stream",null,"MPD",a,null,null,i,new Date,h.status,null,null),k.parser.parse(h.responseText,g).then(function(b){b.mpdUrl=a,c.resolve(b)},function(){c.reject(h)}))},h.onloadend=h.onerror=function(){j&&(j=!1,k.metricsModel.addHttpRequest("stream",null,"MPD",a,null,null,i,new Date,h.status,null,null),f>0?(k.debug.log("Failed loading manifest: "+a+", retry in "+b+"ms"+" attempts: "+f),f--,setTimeout(function(){e.call(k,a,f)},b)):(k.debug.log("Failed loading manifest: "+a+" no retry attempts left"),k.errHandler.downloadError("manifest",a,h),c.reject(h)))},h.send()};return{debug:void 0,parser:void 0,errHandler:void 0,metricsModel:void 0,load:function(b){return c=Q.defer(),e.call(this,b,a),c.promise}}},MediaPlayer.dependencies.ManifestLoader.prototype={constructor:MediaPlayer.dependencies.ManifestLoader},MediaPlayer.models.ManifestModel=function(){"use strict";var a;return{getValue:function(){return a},setValue:function(b){a=b}}},MediaPlayer.models.ManifestModel.prototype={constructor:MediaPlayer.models.ManifestModel},MediaPlayer.dependencies.ManifestUpdater=function(){"use strict";var a=0/0,b=null,c=null,d=function(){null!==b&&(clearInterval(b),b=null)},e=function(){d.call(this),isNaN(a)||(this.debug.log("Refresh manifest in "+a+" seconds."),b=setInterval(c.bind(this),1e3*a,this))},f=function(){var b=this,c=b.manifestModel.getValue();void 0!==c&&null!==c&&b.manifestExt.getRefreshDelay(c).then(function(c){a=c,e.call(b)})};return c=function(){var a=this,b=a.manifestModel.getValue(),c=b.mpdUrl;b.hasOwnProperty("Location")&&(c=b.Location),a.debug.log("Refresh manifest @ "+c),a.manifestLoader.load(c).then(function(b){a.manifestModel.setValue(b),a.debug.log("Manifest has been refreshed."),a.debug.log(b),f.call(a),a.system.notify("manifestUpdated")})},{debug:void 0,system:void 0,manifestModel:void 0,manifestExt:void 0,manifestLoader:void 0,setup:function(){f.call(this)},init:function(){f.call(this)},stop:function(){d.call(this)}}},MediaPlayer.dependencies.ManifestUpdater.prototype={constructor:MediaPlayer.dependencies.ManifestUpdater},MediaPlayer.dependencies.MediaSourceExtensions=function(){"use strict"},MediaPlayer.dependencies.MediaSourceExtensions.prototype={constructor:MediaPlayer.dependencies.MediaSourceExtensions,createMediaSource:function(){"use strict";var a="WebKitMediaSource"in window,b="MediaSource"in window;return b?Q.when(new MediaSource):a?Q.when(new WebKitMediaSource):null},attachMediaSource:function(a,b){"use strict";return b.setSource(window.URL.createObjectURL(a)),Q.when(!0)},detachMediaSource:function(a){"use strict";return a.setSource(""),Q.when(!0)},setDuration:function(a,b){"use strict";return a.duration=b,Q.when(a.duration)},signalEndOfStream:function(a){"use strict";return a.endOfStream(),Q.when(!0)}},MediaPlayer.models.MetricsModel=function(){"use strict";return{system:void 0,streamMetrics:{},clearCurrentMetricsForType:function(a){delete this.streamMetrics[a]},clearAllCurrentMetrics:function(){this.streamMetrics={}},getReadOnlyMetricsFor:function(a){return this.streamMetrics.hasOwnProperty(a)?this.streamMetrics[a]:null},getMetricsFor:function(a){var b;return this.streamMetrics.hasOwnProperty(a)?b=this.streamMetrics[a]:(b=this.system.getObject("metrics"),this.streamMetrics[a]=b),b},addTcpConnection:function(a,b,c,d,e,f){var g=new MediaPlayer.vo.metrics.TCPConnection;return g.tcpid=b,g.dest=c,g.topen=d,g.tclose=e,g.tconnect=f,this.getMetricsFor(a).TcpList.push(g),g},addHttpRequest:function(a,b,c,d,e,f,g,h,i,j,k,l){var m=new MediaPlayer.vo.metrics.HTTPRequest;return m.tcpid=b,m.type=c,m.url=d,m.actualurl=e,m.range=f,m.trequest=g,m.tresponse=h,m.tfinish=i,m.responsecode=j,m.interval=k,m.mediaduration=l,this.getMetricsFor(a).HttpList.push(m),m},appendHttpTrace:function(a,b,c,d){var e=new MediaPlayer.vo.metrics.HTTPRequest.Trace;return e.s=b,e.d=c,e.b=d,a.trace.push(e),e},addRepresentationSwitch:function(a,b,c,d,e){var f=new MediaPlayer.vo.metrics.RepresentationSwitch;return f.t=b,f.mt=c,f.to=d,f.lto=e,this.getMetricsFor(a).RepSwitchList.push(f),f},addBufferLevel:function(a,b,c){var d=new MediaPlayer.vo.metrics.BufferLevel;return d.t=b,d.level=c,this.getMetricsFor(a).BufferLevel.push(d),d},addPlayList:function(a,b,c,d){var e=new MediaPlayer.vo.metrics.PlayList;return e.start=b,e.mstart=c,e.starttype=d,this.getMetricsFor(a).PlayList.push(e),e},appendPlayListTrace:function(a,b,c,d,e,f,g,h){var i=new MediaPlayer.vo.metrics.PlayList.Trace;return i.representationid=b,i.subreplevel=c,i.start=d,i.mstart=e,i.duration=f,i.playbackspeed=g,i.stopreason=h,a.trace.push(i),i}}},MediaPlayer.models.MetricsModel.prototype={constructor:MediaPlayer.models.MetricsModel},MediaPlayer.dependencies.ProtectionController=function(){"use strict";var a=null,b=null,c=function(a){var b=this;b.protectionModel.removeKeySystem(a)},d=function(a,c){for(var d=this,e=0;ee;e+=1)if(g=f.start(e),h=f.end(e),null===i){if(k=Math.abs(g-b),b>=g&&h>b){i=g,j=h;continue}if(l>=k){i=g,j=h;continue}}else{if(k=g-j,!(l>=k))break;j=h}if(null!==i)return Q.when({start:i,end:j})}return Q.when(null)},getAllRanges:function(a){var b=null;try{return b=a.buffered,Q.when(b)}catch(c){return Q.when(null)}},getBufferLength:function(a,b,c){"use strict";var d=this,e=Q.defer();return d.getBufferRange(a,b,c).then(function(a){null===a?e.resolve(0):e.resolve(a.end-b)}),e.promise},waitForUpdateEnd:function(a){"use strict";var b,c=Q.defer(),d=50,e=function(){a.updating||(clearInterval(b),c.resolve(!0))},f=function(){a.removeEventListener("updateend",f,!1),c.resolve(!0)};if(a.hasOwnProperty("addEventListener"))try{a.addEventListener("updateend",f,!1)}catch(g){b=setInterval(e,d)}else b=setInterval(e,d);return c.promise},append:function(a,b){var c=Q.defer();try{"append"in a?a.append(b):"appendBuffer"in a&&a.appendBuffer(b),this.waitForUpdateEnd(a).then(function(){c.resolve()})}catch(d){c.reject({err:d,data:b})}return c.promise},remove:function(a,b,c,d,e){var f=Q.defer();try{b>=0&&d>b&&c>b&&"ended"!==e.readyState&&a.remove(b,c),this.waitForUpdateEnd(a).then(function(){f.resolve()})}catch(g){f.reject(g)}return f.promise},abort:function(a,b){"use strict";var c=Q.defer();try{"open"===a.readyState&&b.abort(),c.resolve()}catch(d){c.reject(d.description)}return c.promise}},MediaPlayer.dependencies.Stream=function(){"use strict";var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q=null,r=null,s=null,t=null,u=-1,v=null,w=-1,x=null,y=-1,z=!0,A=!1,B=!1,C=null,D=[],E=-1,F=null,G=function(){this.debug.log("Attempting play..."),A&&(this.debug.log("Do play."),this.videoModel.play())},H=function(){this.debug.log("Do pause."),this.videoModel.pause()},I=function(a){this.debug.log("Attempting seek..."),A&&(this.debug.log("Do seek: "+a),this.system.notify("setCurrentTime"),this.videoModel.setCurrentTime(a),t&&t.seek(a),v&&v.seek(a))},J=function(a){var b,c=this;if(b="msneedkey"!==a.type?a.type:q,D.push({type:b,initData:a.initData}),this.debug.log("DRM: Key required for - "+b),s&&q&&!C)try{C=c.protectionController.selectKeySystem(q,s)}catch(d){H.call(c),c.debug.log(d),c.errHandler.mediaKeySystemSelectionError(d)}C&&c.protectionController.ensureKeySession(C,b,a.initData)},K=function(a){var b=this,c=null,d=null,e=null,f=null;this.debug.log("DRM: Got a key message..."),c=a.target,d=new Uint16Array(a.message.buffer),e=String.fromCharCode.apply(null,d),f=a.destinationURL,b.protectionController.updateFromMessage(C,c,e,f).fail(function(a){H.call(b),b.debug.log(a),b.errHandler.mediaKeyMessageError(a)})},L=function(){this.debug.log("DRM: Key added.")},M=function(){var a,b=event.target;switch(a="DRM: MediaKeyError - sessionId: "+b.sessionId+" errorCode: "+b.error.code+" systemErrorCode: "+b.error.systemCode+" [",b.error.code){case 1:a+="MEDIA_KEYERR_UNKNOWN - An unspecified error occurred. This value is used for errors that don't match any of the other codes.";break;case 2:a+="MEDIA_KEYERR_CLIENT - The Key System could not be installed or updated.";break;case 3:a+="MEDIA_KEYERR_SERVICE - The message passed into update indicated an error from the license service.";break;case 4:a+="MEDIA_KEYERR_OUTPUT - There is no available output device with the required characteristics for the content protection system.";break;case 5:a+="MEDIA_KEYERR_HARDWARECHANGE - A hardware configuration change caused a content protection error.";break;case 6:a+="MEDIA_KEYERR_DOMAIN - An error occurred in a multi-device domain licensing configuration. The most common error is a failure to join the domain."}a+="]",this.debug.log(a),this.errHandler.mediaKeySessionError(a)},N=function(a){var b=Q.defer(),c=this,d=function(e){c.debug.log("MediaSource is open!"),c.debug.log(e),a.removeEventListener("sourceopen",d),a.removeEventListener("webkitsourceopen",d),b.resolve(a)};return c.debug.log("MediaSource should be closed. The actual readyState is: "+a.readyState),a.addEventListener("sourceopen",d,!1),a.addEventListener("webkitsourceopen",d,!1),c.mediaSourceExt.attachMediaSource(a,c.videoModel),c.debug.log("MediaSource attached to video. Waiting on open..."),b.promise},O=function(){var c=this;t&&t.reset(B),v&&v.reset(B),b&&c.mediaSourceExt.detachMediaSource(c.videoModel),A=!1,C=null,D=[],s=null,t=null,v=null,x=null,q=null,r=null,b=null,a=null},P=function(b,c,d,e){if(b&&c&&d)if(null===t&&null===v&&null===x){var f="No streams to play.";this.errHandler.manifestError(f,"nostreams",a),this.debug.log(f),e.reject()}else this.debug.log("MediaSource initialized!"),e.resolve(!0)},R=function(){this.debug.log("Getting MediaSource ready...");var a=Q.defer(),c=!1,d=!1,e=!1,f=this,g=f.manifestModel.getValue(),h=f.manifestExt.getIsLive(g);return f.debug.log("Gathering information for buffers. (1)"),f.manifestExt.getDuration(g,h).then(function(){f.manifestExt.getVideoData(g,E).then(function(h){return null!==h?(f.debug.log("Create video buffer."),f.manifestExt.getDataIndex(h,g,E).then(function(a){u=a,f.debug.log("Save video track: "+u)}),f.manifestExt.getCodec(h).then(function(a){return f.debug.log("Video codec: "+a),q=a,f.manifestExt.getContentProtectionData(h).then(function(c){if(f.debug.log("Video contentProtection"),c&&!f.capabilities.supportsMediaKeys())return f.errHandler.capabilityError("mediakeys"),Q.when(null);if(s=c,!f.capabilities.supportsCodec(f.videoModel.getElement(),a)){var d="Video Codec ("+a+") is not supported.";return f.errHandler.manifestError(d,"codec",g),f.debug.log(d),Q.when(null)}return f.sourceBufferExt.createSourceBuffer(b,a)})}).then(function(g){null===g?f.debug.log("No buffer was created, skipping video stream."):(t=f.system.getObject("bufferController"),t.initialize("video",E,h,g,f.videoModel,f.requestScheduler,f.fragmentController,b),f.debug.log("Video is ready!")),c=!0,P.call(f,c,d,e,a)},function(){f.errHandler.mediaSourceError("Error creating video source buffer."),c=!0,P.call(f,c,d,e,a)})):(f.debug.log("No video data."),c=!0,P.call(f,c,d,e,a)),f.manifestExt.getAudioDatas(g,E)}).then(function(h){return null!==h&&h.length>0?(f.debug.log("Have audio streams: "+h.length),f.manifestExt.getPrimaryAudioData(g,E).then(function(h){f.manifestExt.getDataIndex(h,g,E).then(function(a){w=a,f.debug.log("Save audio track: "+w)}),f.manifestExt.getCodec(h).then(function(a){return f.debug.log("Audio codec: "+a),r=a,f.manifestExt.getContentProtectionData(h).then(function(c){if(f.debug.log("Audio contentProtection"),c&&!f.capabilities.supportsMediaKeys())return f.errHandler.capabilityError("mediakeys"),Q.when(null);if(s=c,!f.capabilities.supportsCodec(f.videoModel.getElement(),a)){var d="Audio Codec ("+a+") is not supported.";return f.errHandler.manifestError(d,"codec",g),f.debug.log(d),Q.when(null)}return f.sourceBufferExt.createSourceBuffer(b,a)})}).then(function(g){null===g?f.debug.log("No buffer was created, skipping audio stream."):(v=f.system.getObject("bufferController"),v.initialize("audio",E,h,g,f.videoModel,f.requestScheduler,f.fragmentController,b),f.debug.log("Audio is ready!")),d=!0,P.call(f,c,d,e,a)},function(){f.errHandler.mediaSourceError("Error creating audio source buffer."),d=!0,P.call(f,c,d,e,a)})})):(f.debug.log("No audio streams."),d=!0,P.call(f,c,d,e,a)),f.manifestExt.getTextData(g,E)}).then(function(h){var i;null!==h?(f.manifestExt.getDataIndex(h,g,E).then(function(a){y=a,f.debug.log("Save text track: "+y)}),f.manifestExt.getMimeType(h).then(function(a){return i=a,f.sourceBufferExt.createSourceBuffer(b,i)}).then(function(b){null===b?f.debug.log("Source buffer was not created for text track"):(x=f.system.getObject("textController"),x.initialize(E,h,b,f.videoModel),b.hasOwnProperty("initialize")&&b.initialize(i,x),f.debug.log("Text is ready!"),e=!0,P.call(f,c,d,e,a))},function(b){f.debug.log("Error creating text source buffer:"),f.debug.log(b),f.errHandler.mediaSourceError("Error creating text source buffer."),e=!0,P.call(f,c,d,e,a)})):(f.debug.log("No text tracks."),e=!0,P.call(f,c,d,e,a))})}),a.promise},S=function(){var a=this,c=Q.defer(),d=a.manifestModel.getValue(),e=a.manifestExt.getIsLive(d);return a.debug.log("Getting ready for playback..."),a.manifestExt.getDurationForPeriod(E,a.manifestModel.getValue(),e).then(function(a){l=a}),a.manifestExt.getDuration(a.manifestModel.getValue(),e).then(function(c){return a.debug.log("Setting duration: "+c),a.mediaSourceExt.setDuration(b,c)}).then(function(){return a.debug.log("Duration successfully set."),a.manifestExt.getPeriodStart(a.manifestModel.getValue(),E)}).then(function(a){F=a,A=!0,c.resolve(!0)}),c.promise},T=function(){var a=this;a.debug.log("Got loadmetadata event."),c.resolve(null)},U=function(){this.debug.log("Got play event."),A&&(null!==F?(this.debug.log("Starting segment loading at offset: "+F),t&&t.seek(F),v&&v.seek(F),x&&x.seek(F)):(t&&t.start(),v&&v.start(),x&&x.start()))},V=function(){this.debug.log("Got pause event."),this.scheduleWhilePaused||ab.call(this)},W=function(a){var b=a.srcElement.error,c=b.code,d="";if(-1!==c){switch(c){case 1:d="MEDIA_ERR_ABORTED";break;case 2:d="MEDIA_ERR_NETWORK";break;case 3:d="MEDIA_ERR_DECODE";break;case 4:d="MEDIA_ERR_SRC_NOT_SUPPORTED";break;case 5:d="MEDIA_ERR_ENCRYPTED"}B=!0,this.debug.log("Video Element Error: "+d),this.debug.log(b),this.errHandler.mediaSourceError(d),this.reset()}},X=function(){this.debug.log("Got seeking event.");var a=this.videoModel.getCurrentTime();t&&t.seek(a),v&&v.seek(a)},Y=function(){this.debug.log("Seek complete."),this.videoModel.listen("seeking",h),this.videoModel.unlisten("seeked",i)},Z=function(){_.call(this)},$=function(){_.call(this)},_=function(){t&&t.updateBufferState(),v&&v.updateBufferState()},ab=function(){t&&t.stop(),v&&v.stop()},bb=function(d){var e=this;return e.debug.log("Stream start loading."),a=d,e.mediaSourceExt.createMediaSource().then(function(a){return e.debug.log("MediaSource created."),N.call(e,a)}).then(function(a){return b=a,e.debug.log("MediaSource set up."),R.call(e)}).then(function(){return e.debug.log("Start initializing playback."),S.call(e)}).then(function(){return z?(e.debug.log("Playback initialized!"),c.promise):void 0}).then(function(){e.debug.log("element loaded!"),0===E&&G.call(e)})},cb=function(){this.debug.log("Current time has changed, block programmatic seek."),this.videoModel.unlisten("seeking",h),this.videoModel.listen("seeked",i)},db=function(){t&&!t.isBufferingCompleted()||v&&!v.isBufferingCompleted()||b&&this.mediaSourceExt.signalEndOfStream(b)},eb=function(){ab.call(this)},fb=function(){var a,b,c=this,d=c.manifestModel.getValue();c.debug.log("Manifest updated... set new data on buffers."),t&&(a=t.getData(),a&&a.hasOwnProperty("id")?c.manifestExt.getDataForId(a.id,d,E).then(function(a){t.setData(a)}):c.manifestExt.getDataForIndex(u,d,E).then(function(a){t.setData(a)})),v&&(b=v.getData(),b&&b.hasOwnProperty("id")?c.manifestExt.getDataForId(b.id,d,E).then(function(a){v.setData(a)}):c.manifestExt.getDataForIndex(w,d,E).then(function(a){v.setData(a)}))};return{system:void 0,videoModel:void 0,manifestLoader:void 0,manifestModel:void 0,mediaSourceExt:void 0,sourceBufferExt:void 0,bufferExt:void 0,manifestExt:void 0,fragmentController:void 0,abrController:void 0,fragmentExt:void 0,protectionModel:void 0,protectionController:void 0,protectionExt:void 0,capabilities:void 0,debug:void 0,metricsExt:void 0,errHandler:void 0,requestScheduler:void 0,scheduleWhilePaused:void 0,setup:function(){this.system.mapHandler("manifestUpdated",void 0,fb.bind(this)),this.system.mapHandler("setCurrentTime",void 0,cb.bind(this)),this.system.mapHandler("bufferingCompleted",void 0,db.bind(this)),this.system.mapHandler("segmentLoadingFailed",void 0,eb.bind(this)),c=Q.defer(),e=U.bind(this),f=V.bind(this),g=W.bind(this),h=X.bind(this),i=Y.bind(this),k=Z.bind(this),j=$.bind(this),d=T.bind(this)},load:function(a,b){E=b,bb.call(this,a)},setVideoModel:function(a){this.videoModel=a,this.videoModel.listen("play",e),this.videoModel.listen("pause",f),this.videoModel.listen("error",g),this.videoModel.listen("seeking",h),this.videoModel.listen("timeupdate",j),this.videoModel.listen("progress",k),this.videoModel.listen("loadedmetadata",d)},initProtection:function(){m=J.bind(this),n=K.bind(this),o=L.bind(this),p=M.bind(this),this.protectionModel=this.system.getObject("protectionModel"),this.protectionModel.init(this.getVideoModel()),this.protectionController=this.system.getObject("protectionController"),this.protectionController.init(this.videoModel,this.protectionModel),this.protectionModel.listenToNeedKey(m),this.protectionModel.listenToKeyMessage(n),this.protectionModel.listenToKeyError(p),this.protectionModel.listenToKeyAdded(o)},getVideoModel:function(){return this.videoModel},getManifestExt:function(){var a=this;return a.manifestExt},setAutoPlay:function(a){z=a},getAutoPlay:function(){return z},reset:function(){H.call(this),this.videoModel.unlisten("play",e),this.videoModel.unlisten("pause",f),this.videoModel.unlisten("error",g),this.videoModel.unlisten("seeking",h),this.videoModel.unlisten("timeupdate",j),this.videoModel.unlisten("progress",k),this.videoModel.unlisten("loadedmetadata",d),O.call(this),this.protectionController&&this.protectionController.teardownKeySystem(C),this.protectionController=void 0,this.protectionModel=void 0,this.fragmentController=void 0,this.requestScheduler=void 0,c=Q.defer()},getDuration:function(){return l},setPeriodIndex:function(a){E=a},getPeriodIndex:function(){return E},getStartTime:function(){return F},play:G,seek:I,pause:H}},MediaPlayer.dependencies.Stream.prototype={constructor:MediaPlayer.dependencies.Stream},MediaPlayer.dependencies.StreamController=function(){"use strict";var a,b=[],c=4,d=3,e=!0,f=null,g=function(){a.play()},h=function(){a.pause()},i=function(b){a.seek(b)},j=function(a,b){var c=a.getElement(),d=b.getElement();return d.parentNode||c.parentNode.insertBefore(d,c),c.style.width="0px",d.style.width="100%",m(c,d),l(a),k(b),Q.when(!0)},k=function(a){a.listen("seeking",p),a.listen("progress",n),r()&&a.listen("timeupdate",o)},l=function(a){a.unlisten("seeking",p),a.unlisten("progress",n),a.unlisten("timeupdate",o)},m=function(a,b){["controls","loop","muted","playbackRate","volume"].forEach(function(c){b[c]=a[c]})},n=function(){var b=a.getVideoModel().getElement().buffered;if(b.length){var d=b.length-1,e=b.end(d),f=a.getStartTime()+a.getDuration()-e;c>f&&(a.getVideoModel().unlisten("progress",n),q())}},o=function(){if(!a.getVideoModel().getElement().seeking){var b=a.getStartTime()+a.getDuration(),c=a.getVideoModel().getCurrentTime();d>b-c&&v(a,r())}},p=function(){var b=a.getVideoModel().getCurrentTime(),c=s(b);c&&c!==a&&v(a,c,b)},q=function(){var a=r();a&&a.seek(a.getStartTime())},r=function(){var c=a.getPeriodIndex()+1;return ce;e++)if(d=b[e],c+=d.getDuration(),c>a)return d},t=function(){var a=this.system.getObject("videoModel"),b=document.createElement("video");return a.setElement(b),a},u=function(a){a.parentNode&&a.parentNode.removeChild(a)},v=function(b,c,d){b&&c&&b!==c&&Q.when(f||!0).then(function(){b.pause(),a=c,f=j(b.getVideoModel(),c.getVideoModel()),d?i(b.getVideoModel().getCurrentTime()):i(c.getStartTime()),g()})};return{system:void 0,videoModel:void 0,manifestLoader:void 0,manifestUpdater:void 0,manifestModel:void 0,mediaSourceExt:void 0,sourceBufferExt:void 0,bufferExt:void 0,manifestExt:void 0,fragmentController:void 0,abrController:void 0,fragmentExt:void 0,capabilities:void 0,debug:void 0,metricsExt:void 0,errHandler:void 0,getManifestExt:function(){return a.getManifestExt()},setAutoPlay:function(a){e=a},getAutoPlay:function(){return e},getVideoModel:function(){return this.videoModel},setVideoModel:function(a){this.videoModel=a},load:function(c){var d,f=this;f.manifestLoader.load(c).then(function(c){f.manifestModel.setValue(c),f.debug.log("Manifest has loaded."),f.debug.log(f.manifestModel.getValue()),f.manifestUpdater.init(),f.manifestExt.getPeriodCount(c).then(function(g){for(var h=0;g>h;h++)d=f.system.getObject("stream"),d.setVideoModel(0===h?f.videoModel:t.call(f)),d.initProtection(),d.setAutoPlay(e),d.load(c,h),b.push(d);a=b[0],k(a.getVideoModel())})},function(){f.reset()})},reset:function(){a&&l(a.getVideoModel());for(var c=0,d=b.length;d>c;c++){var e=b[c];e.reset(),e!==a&&u(e.getVideoModel().getElement())}b=[],this.manifestUpdater.stop(),this.manifestModel.setValue(null),f=null,a=null},play:g,seek:i,pause:h}},MediaPlayer.dependencies.StreamController.prototype={constructor:MediaPlayer.dependencies.StreamController},MediaPlayer.models.VideoModel=function(){"use strict";var a,b=[],c=function(){return b.length>0},d=function(c){null!==c&&b[c]!==!0&&(b.push(c),b[c]=!0,a.playbackRate=0)},e=function(d){if(null!==d){b[d]=!1;var e=b.indexOf(d);-1!==e&&b.splice(e,1),c()===!1&&(a.playbackRate=1)}},f=function(a,b){b?d(a):e(a)};return{system:void 0,setup:function(){},play:function(){a.play()},pause:function(){a.pause()},isPaused:function(){return a.paused},getPlaybackRate:function(){return a.playbackRate},setPlaybackRate:function(b){a.playbackRate=b},getCurrentTime:function(){return a.currentTime},setCurrentTime:function(b){a.currentTime!=b&&(a.currentTime=b)},listen:function(b,c){a.addEventListener(b,c,!1)},unlisten:function(b,c){a.removeEventListener(b,c,!1)},getElement:function(){return a},setElement:function(b){a=b},setSource:function(b){a.src=b},stallStream:f,isStalled:c}},MediaPlayer.models.VideoModel.prototype={constructor:MediaPlayer.models.VideoModel},MediaPlayer.dependencies.VideoModelExtensions=function(){"use strict";return{getDroppedFrames:function(a){var b=null!==a.webkitDroppedFrameCount,c=-1;return b&&(c=a.webkitDroppedFrameCount),c}}},MediaPlayer.dependencies.VideoModelExtensions.prototype={constructor:MediaPlayer.dependencies.VideoModelExtensions},MediaPlayer.dependencies.TextController=function(){var a,b,c="LOADING",d="READY",e=!1,f=-1,g=d,h=function(a){this.debug.log("TextController setState to:"+a),g=a},i=function(){if(e&&g===d){var b=this;h.call(b,c),b.indexHandler.getInitRequest(0,a).then(function(a){b.debug.log("Loading text track initialization: "+a.url),b.debug.log(a),b.fragmentLoader.load(a).then(k.bind(b,a),l.bind(b,a)),h.call(b,c)})}},j=function(){i.call(this)},k=function(a,c){var d=this;d.debug.log(" Text track Bytes finished loading: "+a.url),d.fragmentController.process(c.data).then(function(a){null!==a&&(d.debug.log("Push text track bytes: "+a.byteLength),d.sourceBufferExt.append(b,a,d.videoModel))})},l=function(){};return{videoModel:void 0,fragmentLoader:void 0,fragmentController:void 0,indexHandler:void 0,sourceBufferExt:void 0,debug:void 0,initialize:function(a,b,c,d){var f=this;f.setVideoModel(d),f.setPeriodIndex(a),f.setData(b),f.setBuffer(c),e=!0},getPeriodIndex:function(){return f},setPeriodIndex:function(a){f=a},getVideoModel:function(){return this.videoModel},setVideoModel:function(a){this.videoModel=a},getData:function(){return a},setData:function(b){a=b},getBuffer:function(){return b},setBuffer:function(a){b=a},reset:function(a,c){a||(this.sourceBufferExt.abort(c,b),this.sourceBufferExt.removeSourceBuffer(c,b))},start:j}},MediaPlayer.dependencies.TextController.prototype={constructor:MediaPlayer.dependencies.TextController},MediaPlayer.utils.TextTrackExtensions=function(){"use strict";return{addTextTrack:function(a,b,c,d,e){var f=a.addTextTrack("captions",c,d);f.default=e,f.mode="showing";for(var g in b){var h=b[g];f.addCue(new TextTrackCue(h.start,h.end,h.data))}return Q.when(f)},deleteCues:function(a){for(var b=a.textTracks[0],c=b.cues,d=c.length;d>=0;d--)b.removeCue(c[d]);b.mode="disabled"}}},MediaPlayer.dependencies.TextVTTSourceBuffer=function(){var a,b,c;return{system:void 0,eventBus:void 0,initialize:function(d,e){c=d,a=e.getVideoModel().getElement(),b=e.getData()},append:function(c){var d=this;d.getParser().parse(String.fromCharCode.apply(null,new Uint16Array(c))).then(function(c){var e=b.Representation_asArray[0].id,f=b.lang;d.getTextTrackExtensions().addTextTrack(a,c,e,f,!0).then(function(){d.eventBus.dispatchEvent({type:"updateend"})})})},abort:function(){this.getTextTrackExtensions().deleteCues(a)},getParser:function(){var a;return"text/vtt"===c&&(a=this.system.getObject("vttParser")),a},getTextTrackExtensions:function(){return this.system.getObject("textTrackExtensions")},addEventListener:function(a,b,c){this.eventBus.addEventListener(a,b,c)},removeEventListener:function(a,b,c){this.eventBus.removeEventListener(a,b,c)}}},MediaPlayer.dependencies.TextVTTSourceBuffer.prototype={constructor:MediaPlayer.dependencies.TextVTTSourceBuffer},MediaPlayer.utils.VTTParser=function(){"use strict";var a=function(a){var b=a.split(":"),c=b.length-1;return a=60*parseInt(b[c-1],10)+parseFloat(b[c],10),2===c&&(a+=3600*parseInt(b[0],10)),a};return{parse:function(b){var c,d=/(?:\r\n|\r|\n)/gm,e=/-->/,f=/(^[\s]+|[\s]+$)/g,g=[];b=b.split(d),c=b.length;for(var h=0;c>h;h++){var i=b[h];if(i.length>0&&"WEBVTT"!==i&&i.match(e)){var j=i.split(e),k=b[h+1];g.push({start:a(j[0].replace(f,"")),end:a(j[1].replace(f,"")),data:k})}}return Q.when(g)}}},MediaPlayer.rules.BaseRulesCollection=function(){"use strict";var a=[];return{downloadRatioRule:void 0,insufficientBufferRule:void 0,getRules:function(){return Q.when(a)},setup:function(){var a=this;a.getRules().then(function(b){b.push(a.downloadRatioRule),b.push(a.insufficientBufferRule)})}}},MediaPlayer.rules.BaseRulesCollection.prototype={constructor:MediaPlayer.rules.BaseRulesCollection},MediaPlayer.rules.DownloadRatioRule=function(){"use strict";var a=function(a,b,c){var d=this,e=Q.defer();return d.manifestExt.getRepresentationFor(a,c).then(function(a){d.manifestExt.getBandwidth(a).then(function(a){e.resolve(a/b)})}),e.promise};return{debug:void 0,manifestExt:void 0,checkIndex:function(b,c,d){var e,f,g,h,i,j,k,l,m,n,o=this,p=c.HttpList,q=.75;return o.debug.log("Checking download ratio rule..."),c?null===p||void 0===p||0===p.length?(o.debug.log("No requests made for this stream yet, bailing."),Q.when(new MediaPlayer.rules.SwitchRequest)):(e=p[p.length-1],g=(e.tfinish.getTime()-e.trequest.getTime())/1e3,f=(e.tfinish.getTime()-e.tresponse.getTime())/1e3,0>=g?(o.debug.log("Don't know how long the download of the last fragment took, bailing."),Q.when(new MediaPlayer.rules.SwitchRequest)):null===e.mediaduration||void 0===e.mediaduration||e.mediaduration<=0?(o.debug.log("Don't know the duration of the last media fragment, bailing."),Q.when(new MediaPlayer.rules.SwitchRequest)):(k=Q.defer(),i=e.mediaduration/g,h=e.mediaduration/f*q,isNaN(h)||isNaN(i)?(o.debug.log("Total time: "+g+"s"),o.debug.log("Download time: "+f+"s"),o.debug.log("The ratios are NaN, bailing."),Q.when(new MediaPlayer.rules.SwitchRequest)):(o.debug.log("Total ratio: "+i),o.debug.log("Download ratio: "+h),o.debug.log("Download ratio: "+h),isNaN(h)?(o.debug.log("Invalid ratio, bailing."),k.resolve(new MediaPlayer.rules.SwitchRequest)):1>h?(o.debug.log("Download ratio is poor."),b>0?(o.debug.log("We are not at the lowest bitrate, so switch down."),o.manifestExt.getRepresentationFor(b-1,d).then(function(a){o.manifestExt.getBandwidth(a).then(function(a){o.manifestExt.getRepresentationFor(b,d).then(function(c){o.manifestExt.getBandwidth(c).then(function(c){j=a/c,o.debug.log("Switch ratio: "+j),j>h?(o.debug.log("Things must be going pretty bad, switch all the way down."),k.resolve(new MediaPlayer.rules.SwitchRequest(0))):(o.debug.log("Things could be better, so just switch down one index."),k.resolve(new MediaPlayer.rules.SwitchRequest(b-1))) })})})})):(o.debug.log("We are at the lowest bitrate and cannot switch down, use current."),k.resolve(new MediaPlayer.rules.SwitchRequest(b)))):(o.debug.log("Download ratio is good."),o.manifestExt.getRepresentationCount(d).then(function(c){c-=1,c>b?(o.debug.log("We are not at the highest bitrate, so switch up."),o.manifestExt.getRepresentationFor(b+1,d).then(function(e){o.manifestExt.getBandwidth(e).then(function(e){o.manifestExt.getRepresentationFor(b,d).then(function(f){o.manifestExt.getBandwidth(f).then(function(f){if(j=e/f,o.debug.log("Switch ratio: "+j),h>=j)if(h>1e3)o.debug.log("Tons of bandwidth available, go all the way up."),k.resolve(new MediaPlayer.rules.SwitchRequest(c-1));else if(h>100)o.debug.log("Just enough bandwidth available, switch up one."),k.resolve(new MediaPlayer.rules.SwitchRequest(b+1));else{for(o.debug.log("Not exactly sure where to go, so do some math."),m=-1,l=[];(m+=1)m&&!(hb&&(i=MediaPlayer.rules.SwitchRequest.prototype.STRONG,g.debug.log("Apply STRONG to buffer rule.")),h?(g.debug.log("The buffer ran dry recently, switch down."),Q.when(new MediaPlayer.rules.SwitchRequest(c-1,i))):a>b?(g.debug.log("Too many dry buffer hits, quit switching bitrates."),Q.when(new MediaPlayer.rules.SwitchRequest(c,i))):Q.when(new MediaPlayer.rules.SwitchRequest(MediaPlayer.rules.SwitchRequest.prototype.NO_CHANGE,i)))))}}},MediaPlayer.rules.InsufficientBufferRule.prototype={constructor:MediaPlayer.rules.InsufficientBufferRule},MediaPlayer.rules.LimitSwitchesRule=function(){"use strict";var a=10,b=2e4,c=5,d=0;return{debug:void 0,checkIndex:function(e,f){if(d>0)return d-=1,Q.when(new MediaPlayer.rules.SwitchRequest(e,MediaPlayer.rules.SwitchRequest.prototype.STRONG));var g,h,i,j=this,k=!1,l=(new Date).getTime(),m=f.RepSwitchList.length;for(j.debug.log("Checking limit switches rule..."),i=m-1;i>=0;i-=1){if(g=f.RepSwitchList[i],h=l-g.t.getTime(),h>=b){j.debug.log("Reached time limit, bailing.");break}if(i>=a){j.debug.log("Found too many switches within validation time, force the stream to not change."),k=!0;break}}return k?(j.debug.log("Wait some time before allowing another switch."),d=c,Q.when(new MediaPlayer.rules.SwitchRequest(e,MediaPlayer.rules.SwitchRequest.prototype.STRONG))):Q.when(new MediaPlayer.rules.SwitchRequest(MediaPlayer.rules.SwitchRequest.prototype.NO_CHANGE,MediaPlayer.rules.SwitchRequest.prototype.STRONG))}}},MediaPlayer.rules.LimitSwitchesRule.prototype={constructor:MediaPlayer.rules.LimitSwitchesRule},MediaPlayer.rules.SwitchRequest=function(a,b){"use strict";this.quality=a,this.priority=b,void 0===this.quality&&(this.quality=999),void 0===this.priority&&(this.priority=.5)},MediaPlayer.rules.SwitchRequest.prototype={constructor:MediaPlayer.rules.SwitchRequest,NO_CHANGE:999,DEFAULT:.5,STRONG:1,WEAK:0},MediaPlayer.models.MetricsList=function(){"use strict";return{TcpList:[],HttpList:[],RepSwitchList:[],BufferLevel:[],PlayList:[],DroppedFrames:[]}},MediaPlayer.models.MetricsList.prototype={constructor:MediaPlayer.models.MetricsList},MediaPlayer.vo.SegmentRequest=function(){"use strict";this.action="download",this.startTime=0/0,this.streamType=null,this.type=null,this.duration=0/0,this.timescale=0/0,this.range=null,this.url=null,this.requestStartDate=null,this.firstByteDate=null,this.requestEndDate=null,this.deferred=null,this.quality=0/0,this.index=0/0},MediaPlayer.vo.SegmentRequest.prototype={constructor:MediaPlayer.vo.SegmentRequest,ACTION_DOWNLOAD:"download",ACTION_COMPLETE:"complete"},MediaPlayer.vo.metrics.BufferLevel=function(){"use strict";this.t=null,this.level=null},MediaPlayer.vo.metrics.BufferLevel.prototype={constructor:MediaPlayer.vo.metrics.BufferLevel},MediaPlayer.vo.metrics.DroppedFrames=function(){"use strict";this.time=null,this.droppedFrames=null},MediaPlayer.vo.metrics.DroppedFrames.prototype={constructor:MediaPlayer.vo.metrics.DroppedFrames},MediaPlayer.vo.metrics.HTTPRequest=function(){"use strict";this.tcpid=null,this.type=null,this.url=null,this.actualurl=null,this.range=null,this.trequest=null,this.tresponse=null,this.tfinish=null,this.responsecode=null,this.interval=null,this.mediaduration=null,this.trace=[]},MediaPlayer.vo.metrics.HTTPRequest.prototype={constructor:MediaPlayer.vo.metrics.HTTPRequest},MediaPlayer.vo.metrics.HTTPRequest.Trace=function(){"use strict";this.s=null,this.d=null,this.b=[]},MediaPlayer.vo.metrics.HTTPRequest.Trace.prototype={constructor:MediaPlayer.vo.metrics.HTTPRequest.Trace},MediaPlayer.vo.metrics.PlayList=function(){"use strict";this.start=null,this.mstart=null,this.starttype=null,this.trace=[]},MediaPlayer.vo.metrics.PlayList.Trace=function(){"use strict";this.representationid=null,this.subreplevel=null,this.start=null,this.mstart=null,this.duration=null,this.playbackspeed=null,this.stopreason=null},MediaPlayer.vo.metrics.PlayList.prototype={constructor:MediaPlayer.vo.metrics.PlayList},MediaPlayer.vo.metrics.PlayList.INITIAL_PLAY_START_REASON="initial_start",MediaPlayer.vo.metrics.PlayList.SEEK_START_REASON="seek",MediaPlayer.vo.metrics.PlayList.Trace.prototype={constructor:MediaPlayer.vo.metrics.PlayList.Trace()},MediaPlayer.vo.metrics.PlayList.Trace.USER_REQUEST_STOP_REASON="user_request",MediaPlayer.vo.metrics.PlayList.Trace.REPRESENTATION_SWITCH_STOP_REASON="representation_switch",MediaPlayer.vo.metrics.PlayList.Trace.END_OF_CONTENT_STOP_REASON="end_of_content",MediaPlayer.vo.metrics.PlayList.Trace.REBUFFERING_REASON="rebuffering",MediaPlayer.vo.metrics.RepresentationSwitch=function(){"use strict";this.t=null,this.mt=null,this.to=null,this.lto=null},MediaPlayer.vo.metrics.RepresentationSwitch.prototype={constructor:MediaPlayer.vo.metrics.RepresentationSwitch},MediaPlayer.vo.metrics.TCPConnection=function(){"use strict";this.tcpid=null,this.dest=null,this.topen=null,this.tclose=null,this.tconnect=null},MediaPlayer.vo.metrics.TCPConnection.prototype={constructor:MediaPlayer.vo.metrics.TCPConnection}; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRhc2guYWxsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZGFzaC5hbGwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBYMkpTKGEsYixjKXtmdW5jdGlvbiBkKGEpe3ZhciBiPWEubG9jYWxOYW1lO3JldHVybiBudWxsPT1iJiYoYj1hLmJhc2VOYW1lKSwobnVsbD09Ynx8XCJcIj09YikmJihiPWEubm9kZU5hbWUpLGJ9ZnVuY3Rpb24gZShhKXtyZXR1cm4gYS5wcmVmaXh9ZnVuY3Rpb24gZihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYT9hLnJlcGxhY2UoLyYvZyxcIiZhbXA7XCIpLnJlcGxhY2UoLzwvZyxcIiZsdDtcIikucmVwbGFjZSgvPi9nLFwiJmd0O1wiKS5yZXBsYWNlKC9cIi9nLFwiJnF1b3Q7XCIpLnJlcGxhY2UoLycvZyxcIiYjeDI3O1wiKS5yZXBsYWNlKC9cXC8vZyxcIiYjeDJGO1wiKTphfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGEucmVwbGFjZSgvJmFtcDsvZyxcIiZcIikucmVwbGFjZSgvJmx0Oy9nLFwiPFwiKS5yZXBsYWNlKC8mZ3Q7L2csXCI+XCIpLnJlcGxhY2UoLyZxdW90Oy9nLCdcIicpLnJlcGxhY2UoLyYjeDI3Oy9nLFwiJ1wiKS5yZXBsYWNlKC8mI3gyRjsvZyxcIi9cIil9ZnVuY3Rpb24gaChmKXtpZihmLm5vZGVUeXBlPT11LkRPQ1VNRU5UX05PREUpe3ZhciBpLGosayxsPWYuZmlyc3RDaGlsZDtmb3Ioaj0wLGs9Zi5jaGlsZE5vZGVzLmxlbmd0aDtrPmo7ais9MSlpZihmLmNoaWxkTm9kZXNbal0ubm9kZVR5cGUhPT11LkNPTU1FTlRfTk9ERSl7bD1mLmNoaWxkTm9kZXNbal07YnJlYWt9aWYoYylpPWgobCk7ZWxzZXtpPXt9O3ZhciBtPWQobCk7aVttXT1oKGwpfXJldHVybiBpfWlmKGYubm9kZVR5cGU9PXUuRUxFTUVOVF9OT0RFKXt2YXIgaT1uZXcgT2JqZWN0O2kuX19jbnQ9MDtmb3IodmFyIG49Zi5jaGlsZE5vZGVzLG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIGw9bi5pdGVtKG8pLG09ZChsKTtpZihpLl9fY250KyssbnVsbD09aVttXSlpW21dPWgobCksaVttK1wiX2FzQXJyYXlcIl09bmV3IEFycmF5KDEpLGlbbStcIl9hc0FycmF5XCJdWzBdPWlbbV07ZWxzZXtpZihudWxsIT1pW21dJiYhKGlbbV1pbnN0YW5jZW9mIEFycmF5KSl7dmFyIHA9aVttXTtpW21dPW5ldyBBcnJheSxpW21dWzBdPXAsaVttK1wiX2FzQXJyYXlcIl09aVttXX1mb3IodmFyIHE9MDtudWxsIT1pW21dW3FdOylxKys7aVttXVtxXT1oKGwpfX1mb3IodmFyIHI9MDtyPGYuYXR0cmlidXRlcy5sZW5ndGg7cisrKXt2YXIgcz1mLmF0dHJpYnV0ZXMuaXRlbShyKTtpLl9fY250Kys7Zm9yKHZhciB2PXMudmFsdWUsdz0wLHg9YS5sZW5ndGg7eD53O3crKyl7dmFyIHk9YVt3XTt5LnRlc3QuY2FsbCh0aGlzLHMudmFsdWUpJiYodj15LmNvbnZlcnRlci5jYWxsKHRoaXMscy52YWx1ZSkpfWlbYitzLm5hbWVdPXZ9dmFyIHo9ZShmKTtyZXR1cm4gbnVsbCE9eiYmXCJcIiE9eiYmKGkuX19jbnQrKyxpLl9fcHJlZml4PXopLDE9PWkuX19jbnQmJm51bGwhPWlbXCIjdGV4dFwiXSYmKGk9aVtcIiN0ZXh0XCJdKSxudWxsIT1pW1wiI3RleHRcIl0mJihpLl9fdGV4dD1pW1wiI3RleHRcIl0sdCYmKGkuX190ZXh0PWcoaS5fX3RleHQpKSxkZWxldGUgaVtcIiN0ZXh0XCJdLGRlbGV0ZSBpW1wiI3RleHRfYXNBcnJheVwiXSksbnVsbCE9aVtcIiNjZGF0YS1zZWN0aW9uXCJdJiYoaS5fX2NkYXRhPWlbXCIjY2RhdGEtc2VjdGlvblwiXSxkZWxldGUgaVtcIiNjZGF0YS1zZWN0aW9uXCJdLGRlbGV0ZSBpW1wiI2NkYXRhLXNlY3Rpb25fYXNBcnJheVwiXSksKG51bGwhPWkuX190ZXh0fHxudWxsIT1pLl9fY2RhdGEpJiYoaS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybihudWxsIT10aGlzLl9fdGV4dD90aGlzLl9fdGV4dDpcIlwiKSsobnVsbCE9dGhpcy5fX2NkYXRhP3RoaXMuX19jZGF0YTpcIlwiKX0pLGl9cmV0dXJuIGYubm9kZVR5cGU9PXUuVEVYVF9OT0RFfHxmLm5vZGVUeXBlPT11LkNEQVRBX1NFQ1RJT05fTk9ERT9mLm5vZGVWYWx1ZTpmLm5vZGVUeXBlPT11LkNPTU1FTlRfTk9ERT9udWxsOnZvaWQgMH1mdW5jdGlvbiBpKGEsYixjLGQpe3ZhciBlPVwiPFwiKyhudWxsIT1hJiZudWxsIT1hLl9fcHJlZml4P2EuX19wcmVmaXgrXCI6XCI6XCJcIikrYjtpZihudWxsIT1jKWZvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgZz1jW2ZdLGg9YVtnXTtlKz1cIiBcIitnLnN1YnN0cigxKStcIj0nXCIraCtcIidcIn1yZXR1cm4gZSs9ZD9cIi8+XCI6XCI+XCJ9ZnVuY3Rpb24gaihhLGIpe3JldHVyblwiPC9cIisobnVsbCE9YS5fX3ByZWZpeD9hLl9fcHJlZml4K1wiOlwiOlwiXCIpK2IrXCI+XCJ9ZnVuY3Rpb24gayhhLGIpe3JldHVybi0xIT09YS5pbmRleE9mKGIsYS5sZW5ndGgtYi5sZW5ndGgpfWZ1bmN0aW9uIGwoYSxiKXtyZXR1cm4gayhiLnRvU3RyaW5nKCksXCJfYXNBcnJheVwiKXx8MD09Yi50b1N0cmluZygpLmluZGV4T2YoXCJfXCIpfHxhW2JdaW5zdGFuY2VvZiBGdW5jdGlvbj8hMDohMX1mdW5jdGlvbiBtKGEpe3ZhciBiPTA7aWYoYSBpbnN0YW5jZW9mIE9iamVjdClmb3IodmFyIGMgaW4gYSlsKGEsYyl8fGIrKztyZXR1cm4gYn1mdW5jdGlvbiBuKGEpe3ZhciBiPVtdO2lmKGEgaW5zdGFuY2VvZiBPYmplY3QpZm9yKHZhciBjIGluIGEpLTE9PWMudG9TdHJpbmcoKS5pbmRleE9mKFwiX19cIikmJjA9PWMudG9TdHJpbmcoKS5pbmRleE9mKFwiX1wiKSYmYi5wdXNoKGMpO3JldHVybiBifWZ1bmN0aW9uIG8oYSl7dmFyIGI9XCJcIjtyZXR1cm4gbnVsbCE9YS5fX2NkYXRhJiYoYis9XCI8IVtDREFUQVtcIithLl9fY2RhdGErXCJdXT5cIiksbnVsbCE9YS5fX3RleHQmJihiKz10P2YoYS5fX3RleHQpOmEuX190ZXh0KSxifWZ1bmN0aW9uIHAoYSl7dmFyIGI9XCJcIjtyZXR1cm4gYSBpbnN0YW5jZW9mIE9iamVjdD9iKz1vKGEpOm51bGwhPWEmJihiKz10P2YoYSk6YSksYn1mdW5jdGlvbiBxKGEsYixjKXt2YXIgZD1cIlwiO2lmKDA9PWEubGVuZ3RoKWQrPWkoYSxiLGMsITApO2Vsc2UgZm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspZCs9aShhW2VdLGIsbihhW2VdKSwhMSksZCs9cihhW2VdKSxkKz1qKGFbZV0sYik7cmV0dXJuIGR9ZnVuY3Rpb24gcihhKXt2YXIgYj1cIlwiLGM9bShhKTtpZihjPjApZm9yKHZhciBkIGluIGEpaWYoIWwoYSxkKSl7dmFyIGU9YVtkXSxmPW4oZSk7aWYobnVsbD09ZXx8dm9pZCAwPT1lKWIrPWkoZSxkLGYsITApO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIE9iamVjdClpZihlIGluc3RhbmNlb2YgQXJyYXkpYis9cShlLGQsZik7ZWxzZXt2YXIgZz1tKGUpO2c+MHx8bnVsbCE9ZS5fX3RleHR8fG51bGwhPWUuX19jZGF0YT8oYis9aShlLGQsZiwhMSksYis9cihlKSxiKz1qKGUsZCkpOmIrPWkoZSxkLGYsITApfWVsc2UgYis9aShlLGQsZiwhMSksYis9cChlKSxiKz1qKGUsZCl9cmV0dXJuIGIrPXAoYSl9KG51bGw9PT1ifHx2b2lkIDA9PT1iKSYmKGI9XCJfXCIpLChudWxsPT09Y3x8dm9pZCAwPT09YykmJihjPSExKTt2YXIgcz1cIjEuMC4xMVwiLHQ9ITEsdT17RUxFTUVOVF9OT0RFOjEsVEVYVF9OT0RFOjMsQ0RBVEFfU0VDVElPTl9OT0RFOjQsQ09NTUVOVF9OT0RFOjgsRE9DVU1FTlRfTk9ERTo5fTt0aGlzLnBhcnNlWG1sU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiO2lmKHdpbmRvdy5ET01QYXJzZXIpe3ZhciBjPW5ldyB3aW5kb3cuRE9NUGFyc2VyO2I9Yy5wYXJzZUZyb21TdHJpbmcoYSxcInRleHQveG1sXCIpfWVsc2UgMD09YS5pbmRleE9mKFwiPD9cIikmJihhPWEuc3Vic3RyKGEuaW5kZXhPZihcIj8+XCIpKzIpKSxiPW5ldyBBY3RpdmVYT2JqZWN0KFwiTWljcm9zb2Z0LlhNTERPTVwiKSxiLmFzeW5jPVwiZmFsc2VcIixiLmxvYWRYTUwoYSk7cmV0dXJuIGJ9LHRoaXMueG1sMmpzb249ZnVuY3Rpb24oYSl7cmV0dXJuIGgoYSl9LHRoaXMueG1sX3N0cjJqc29uPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucGFyc2VYbWxTdHJpbmcoYSk7cmV0dXJuIHRoaXMueG1sMmpzb24oYil9LHRoaXMuanNvbjJ4bWxfc3RyPWZ1bmN0aW9uKGEpe3JldHVybiByKGEpfSx0aGlzLmpzb24yeG1sPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuanNvbjJ4bWxfc3RyKGEpO3JldHVybiB0aGlzLnBhcnNlWG1sU3RyaW5nKGIpfSx0aGlzLmdldFZlcnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gc30sdGhpcy5lc2NhcGVNb2RlPWZ1bmN0aW9uKGEpe3Q9YX19ZnVuY3Rpb24gT2JqZWN0SXJvbihhKXt2YXIgYjtmb3IoYj1bXSxpPTAsbGVuPWEubGVuZ3RoO2xlbj5pO2krPTEpYVtpXS5pc1Jvb3Q/Yi5wdXNoKFwicm9vdFwiKTpiLnB1c2goYVtpXS5uYW1lKTt2YXIgYz1mdW5jdGlvbihhLGIpe3ZhciBjO2lmKG51bGwhPT1hJiZudWxsIT09Yilmb3IoYyBpbiBhKWEuaGFzT3duUHJvcGVydHkoYykmJihiLmhhc093blByb3BlcnR5KGMpfHwoYltjXT1hW2NdKSl9LGQ9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGYsZyxoLGk7aWYobnVsbCE9PWEmJjAhPT1hLmxlbmd0aClmb3IoZT0wLGY9YS5sZW5ndGg7Zj5lO2UrPTEpZz1hW2VdLGIuaGFzT3duUHJvcGVydHkoZy5uYW1lKSYmKGQuaGFzT3duUHJvcGVydHkoZy5uYW1lKT9nLm1lcmdlJiYoaD1iW2cubmFtZV0saT1kW2cubmFtZV0sXCJvYmplY3RcIj09dHlwZW9mIGgmJlwib2JqZWN0XCI9PXR5cGVvZiBpP2MoaCxpKTpkW2cubmFtZV09bnVsbCE9Zy5tZXJnZUZ1bmN0aW9uP2cubWVyZ2VGdW5jdGlvbihoLGkpOmgraSk6ZFtnLm5hbWVdPWJbZy5uYW1lXSl9LGU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxmLGcsaCxpLGosayxsPWE7aWYobnVsbCE9PWwuY2hpbGRyZW4mJjAhPT1sLmNoaWxkcmVuLmxlbmd0aClmb3IoYz0wLGY9bC5jaGlsZHJlbi5sZW5ndGg7Zj5jO2MrPTEpaWYoaj1sLmNoaWxkcmVuW2NdLGIuaGFzT3duUHJvcGVydHkoai5uYW1lKSlpZihqLmlzQXJyYXkpZm9yKGk9YltqLm5hbWUrXCJfYXNBcnJheVwiXSxnPTAsaD1pLmxlbmd0aDtoPmc7Zys9MSlrPWlbZ10sZChsLnByb3BlcnRpZXMsYixrKSxlKGosayk7ZWxzZSBrPWJbai5uYW1lXSxkKGwucHJvcGVydGllcyxiLGspLGUoaixrKX0sZj1mdW5jdGlvbihjKXt2YXIgZCxnLGgsaSxqLGssbDtpZihudWxsPT09YylyZXR1cm4gYztpZihcIm9iamVjdFwiIT10eXBlb2YgYylyZXR1cm4gYztmb3IoZD0wLGc9Yi5sZW5ndGg7Zz5kO2QrPTEpXCJyb290XCI9PT1iW2RdJiYoaj1hW2RdLGs9YyxlKGosaykpO2ZvcihpIGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0eShpKSl7aWYoaD1iLmluZGV4T2YoaSksLTEhPT1oKWlmKGo9YVtoXSxqLmlzQXJyYXkpZm9yKGw9Y1tpK1wiX2FzQXJyYXlcIl0sZD0wLGc9bC5sZW5ndGg7Zz5kO2QrPTEpaz1sW2RdLGUoaixrKTtlbHNlIGs9Y1tpXSxlKGosayk7ZihjW2ldKX1yZXR1cm4gY307cmV0dXJue3J1bjpmfX1pZihmdW5jdGlvbihhKXthKHZvaWQgMCxRPXt9KX0oZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Yi5zdGFjayYmXCJvYmplY3RcIj09dHlwZW9mIGEmJm51bGwhPT1hJiZhLnN0YWNrJiYtMT09PWEuc3RhY2suaW5kZXhPZihOKSYmKGEuc3RhY2s9ZChhLnN0YWNrKStcIlxcblwiK04rXCJcXG5cIitkKGIuc3RhY2spKX1mdW5jdGlvbiBkKGEpe2Zvcih2YXIgYT1hLnNwbGl0KFwiXFxuXCIpLGI9W10sYz0wO2M8YS5sZW5ndGg7KytjKXt2YXIgZCxlPWFbY107aWYoZD0vYXQgLisgXFwoKC4qKTooXFxkKyk6XFxkK1xcKS8uZXhlYyhlKSl7dmFyIGY9ZFsyXTtkPWRbMV09PT13JiZmPj14JiZUPj1mfWVsc2UgZD0hMTshZCYmISgtMSE9PWUuaW5kZXhPZihcIihtb2R1bGUuanM6XCIpfHwtMSE9PWUuaW5kZXhPZihcIihub2RlLmpzOlwiKSkmJmIucHVzaChlKX1yZXR1cm4gYi5qb2luKFwiXFxuXCIpfWZ1bmN0aW9uIGUoKXtpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSl7dmFyIGEsYixjPUVycm9yLnByZXBhcmVTdGFja1RyYWNlO3JldHVybiBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT1mdW5jdGlvbihjLGQpe2E9ZFsxXS5nZXRGaWxlTmFtZSgpLGI9ZFsxXS5nZXRMaW5lTnVtYmVyKCl9LEVycm9yKCkuc3RhY2ssRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9Yyx3PWEsYn19ZnVuY3Rpb24gZihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGNvbnNvbGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKGIrXCIgaXMgZGVwcmVjYXRlZCwgdXNlIFwiK2MrXCIgaW5zdGVhZC5cIixFcnJvcihcIlwiKS5zdGFjayksYS5hcHBseShhLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGcoKXtmdW5jdGlvbiBhKGEpe2MmJihiPW4oYSksSChjLGZ1bmN0aW9uKGEsYyl7QShmdW5jdGlvbigpe2IucHJvbWlzZURpc3BhdGNoLmFwcGx5KGIsYyl9KX0sdm9pZCAwKSxkPWM9dm9pZCAwKX12YXIgYixjPVtdLGQ9W10sZT1LKGcucHJvdG90eXBlKSxmPUsoaC5wcm90b3R5cGUpO3JldHVybiBmLnByb21pc2VEaXNwYXRjaD1mdW5jdGlvbihhLGUsZil7dmFyIGc9Ryhhcmd1bWVudHMpO2M/KGMucHVzaChnKSxcIndoZW5cIj09PWUmJmZbMV0mJmQucHVzaChmWzFdKSk6QShmdW5jdGlvbigpe2IucHJvbWlzZURpc3BhdGNoLmFwcGx5KGIsZyl9KX0sZi52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIGM/ZjpiLnZhbHVlT2YoKX0sRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShmLGcpLGYuc3RhY2s9Zi5zdGFjay5zdWJzdHJpbmcoZi5zdGFjay5pbmRleE9mKFwiXFxuXCIpKzEpKSx6KGYpLGUucHJvbWlzZT1mLGUucmVzb2x2ZT1hLGUucmVqZWN0PWZ1bmN0aW9uKGIpe2EobShiKSl9LGUubm90aWZ5PWZ1bmN0aW9uKGEpe2MmJkgoZCxmdW5jdGlvbihiLGMpe0EoZnVuY3Rpb24oKXtjKGEpfSl9LHZvaWQgMCl9LGV9ZnVuY3Rpb24gaChhLGIsYyxkKXt2b2lkIDA9PT1iJiYoYj1mdW5jdGlvbihhKXtyZXR1cm4gbShFcnJvcihcIlByb21pc2UgZG9lcyBub3Qgc3VwcG9ydCBvcGVyYXRpb246IFwiK2EpKX0pO3ZhciBlPUsoaC5wcm90b3R5cGUpO3JldHVybiBlLnByb21pc2VEaXNwYXRjaD1mdW5jdGlvbihjLGQsZil7dmFyIGc7dHJ5e2c9YVtkXT9hW2RdLmFwcGx5KGUsZik6Yi5jYWxsKGUsZCxmKX1jYXRjaChoKXtnPW0oaCl9YyYmYyhnKX0sYyYmKGUudmFsdWVPZj1jKSxkJiYoZS5leGNlcHRpb249ZCkseihlKSxlfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGooYSk/YS52YWx1ZU9mKCk6YX1mdW5jdGlvbiBqKGEpe3JldHVybiBhJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLnByb21pc2VEaXNwYXRjaH1mdW5jdGlvbiBrKGEpe3JldHVybiFqKGkoYSkpfWZ1bmN0aW9uIGwoYSl7cmV0dXJuIGE9aShhKSxqKGEpJiZcImV4Y2VwdGlvblwiaW4gYX1mdW5jdGlvbiBtKGEpe3ZhciBhPWF8fEVycm9yKCksYj1oKHt3aGVuOmZ1bmN0aW9uKGIpe2lmKGIpe3ZhciBjPUkoUCx0aGlzKTstMSE9PWMmJihRLnNwbGljZShjLDEpLFAuc3BsaWNlKGMsMSkpfXJldHVybiBiP2IoYSk6bShhKX19LGZ1bmN0aW9uKCl7cmV0dXJuIG0oYSl9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGEpO3JldHVybiFPJiZcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiYhd2luZG93LlRvdWNoJiZ3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2coXCJTaG91bGQgYmUgZW1wdHk6XCIsUSksTz0hMCxQLnB1c2goYiksUS5wdXNoKGEpLGJ9ZnVuY3Rpb24gbihhKXtpZihqKGEpKXJldHVybiBhO2lmKChhPWkoYSkpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLnRoZW4pe3ZhciBiPWcoKTtyZXR1cm4gYS50aGVuKGIucmVzb2x2ZSxiLnJlamVjdCxiLm5vdGlmeSksYi5wcm9taXNlfXJldHVybiBoKHt3aGVuOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LGdldDpmdW5jdGlvbihiKXtyZXR1cm4gYVtiXX0scHV0OmZ1bmN0aW9uKGIsYyl7cmV0dXJuIGFbYl09YyxhfSxkZWw6ZnVuY3Rpb24oYil7cmV0dXJuIGRlbGV0ZSBhW2JdLGF9LHBvc3Q6ZnVuY3Rpb24oYixjKXtyZXR1cm4gYVtiXS5hcHBseShhLGMpfSxhcHBseTpmdW5jdGlvbihiKXtyZXR1cm4gYS5hcHBseSh2b2lkIDAsYil9LGtleXM6ZnVuY3Rpb24oKXtyZXR1cm4gTChhKX19LHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBhfSl9ZnVuY3Rpb24gbyhhLGIsZCxlKXtmdW5jdGlvbiBmKGEpe3RyeXtyZXR1cm4gYj9iKGEpOmF9Y2F0Y2goYyl7cmV0dXJuIG0oYyl9fWZ1bmN0aW9uIGgoYSl7aWYoZCl7YyhhLGspO3RyeXtyZXR1cm4gZChhKX1jYXRjaChiKXtyZXR1cm4gbShiKX19cmV0dXJuIG0oYSl9dmFyIGk9ZygpLGo9ITEsaz1uKGEpO3JldHVybiBBKGZ1bmN0aW9uKCl7ay5wcm9taXNlRGlzcGF0Y2goZnVuY3Rpb24oYSl7anx8KGo9ITAsaS5yZXNvbHZlKGYoYSkpKX0sXCJ3aGVuXCIsW2Z1bmN0aW9uKGEpe2p8fChqPSEwLGkucmVzb2x2ZShoKGEpKSl9XSl9KSxrLnByb21pc2VEaXNwYXRjaCh2b2lkIDAsXCJ3aGVuXCIsW3ZvaWQgMCxmdW5jdGlvbihhKXtpLm5vdGlmeShlP2UoYSk6YSl9XSksaS5wcm9taXNlfWZ1bmN0aW9uIHAoYSxiLGMpe3JldHVybiBvKGEsZnVuY3Rpb24oYSl7cmV0dXJuIHQoYSkudGhlbihmdW5jdGlvbihhKXtyZXR1cm4gYi5hcHBseSh2b2lkIDAsYSl9LGMpfSxjKX1mdW5jdGlvbiBxKGEsYixjKXt2YXIgZD1nKCk7cmV0dXJuIEEoZnVuY3Rpb24oKXtuKGEpLnByb21pc2VEaXNwYXRjaChkLnJlc29sdmUsYixjKX0pLGQucHJvbWlzZX1mdW5jdGlvbiByKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1HKGFyZ3VtZW50cywxKTtyZXR1cm4gcShiLGEsYyl9fWZ1bmN0aW9uIHMoYSl7dmFyIGI9Ryhhcmd1bWVudHMsMSk7cmV0dXJuIFMoYSxiKX1mdW5jdGlvbiB0KGEpe3JldHVybiBvKGEsZnVuY3Rpb24oYSl7dmFyIGI9YS5sZW5ndGg7aWYoMD09PWIpcmV0dXJuIG4oYSk7dmFyIGM9ZygpO3JldHVybiBIKGEsZnVuY3Rpb24oZCxlLGYpe2soZSk/KGFbZl09aShlKSwwPT09LS1iJiZjLnJlc29sdmUoYSkpOm8oZSxmdW5jdGlvbihkKXthW2ZdPWQsMD09PS0tYiYmYy5yZXNvbHZlKGEpfSkuZmFpbChjLnJlamVjdCl9LHZvaWQgMCksYy5wcm9taXNlfSl9ZnVuY3Rpb24gdShhLGIpe3JldHVybiBvKGEsdm9pZCAwLGIpfWZ1bmN0aW9uIHYoYSxiKXt2YXIgYz1HKGFyZ3VtZW50cywyKSxkPWcoKTtyZXR1cm4gYy5wdXNoKGQubWFrZU5vZGVSZXNvbHZlcigpKSxSKGEsYixjKS5mYWlsKGQucmVqZWN0KSxkLnByb21pc2V9dmFyIHcseD1lKCkseT1mdW5jdGlvbigpe30sej1PYmplY3QuZnJlZXplfHx5O1widW5kZWZpbmVkXCIhPXR5cGVvZiBjYWphVk0mJih6PWNhamFWTS5kZWYpO3ZhciBBO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBwcm9jZXNzKUE9cHJvY2Vzcy5uZXh0VGljaztlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHNldEltbWVkaWF0ZSlBPXNldEltbWVkaWF0ZTtlbHNlIGlmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCl7dmFyIEI9bmV3IE1lc3NhZ2VDaGFubmVsLEM9e30sRD1DO0IucG9ydDEub25tZXNzYWdlPWZ1bmN0aW9uKCl7Qz1DLm5leHQ7dmFyIGE9Qy50YXNrO2RlbGV0ZSBDLnRhc2ssYSgpfSxBPWZ1bmN0aW9uKGEpe0Q9RC5uZXh0PXt0YXNrOmF9LEIucG9ydDIucG9zdE1lc3NhZ2UoMCl9fWVsc2UgQT1mdW5jdGlvbihhKXtzZXRUaW1lb3V0KGEsMCl9O3ZhciBFO0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kPyhFPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLEU9RS5iaW5kKEUuY2FsbCkpOkU9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEuY2FsbC5hcHBseShhLGFyZ3VtZW50cyl9fTt2YXIgRixHPUUoQXJyYXkucHJvdG90eXBlLnNsaWNlKSxIPUUoQXJyYXkucHJvdG90eXBlLnJlZHVjZXx8ZnVuY3Rpb24oYSxiKXt2YXIgYz0wLGQ9dGhpcy5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDs7KXtpZihjIGluIHRoaXMpe2I9dGhpc1tjKytdO2JyZWFrfWlmKCsrYz49ZCl0aHJvdyBuZXcgVHlwZUVycm9yfWZvcig7ZD5jO2MrKyljIGluIHRoaXMmJihiPWEoYix0aGlzW2NdLGMpKTtyZXR1cm4gYn0pLEk9RShBcnJheS5wcm90b3R5cGUuaW5kZXhPZnx8ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspaWYodGhpc1tiXT09PWEpcmV0dXJuIGI7cmV0dXJuLTF9KSxKPUUoQXJyYXkucHJvdG90eXBlLm1hcHx8ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9W107cmV0dXJuIEgoYyxmdW5jdGlvbihlLGYsZyl7ZC5wdXNoKGEuY2FsbChiLGYsZyxjKSl9LHZvaWQgMCksZH0pLEs9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe31yZXR1cm4gYi5wcm90b3R5cGU9YSxuZXcgYn0sTD1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXTtmb3IoYiBpbiBhKWMucHVzaChiKTtyZXR1cm4gY30sTT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO0Y9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFJldHVyblZhbHVlP1JldHVyblZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMudmFsdWU9YX07dmFyIE49XCJGcm9tIHByZXZpb3VzIGV2ZW50OlwiO2IubmV4dFRpY2s9QSxiLmRlZmVyPWcsZy5wcm90b3R5cGUubWFrZU5vZGVSZXNvbHZlcj1mdW5jdGlvbigpe3ZhciBhPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7Yj9hLnJlamVjdChiKTphcmd1bWVudHMubGVuZ3RoPjI/YS5yZXNvbHZlKEcoYXJndW1lbnRzLDEpKTphLnJlc29sdmUoYyl9fSxiLnByb21pc2U9ZnVuY3Rpb24oYSl7dmFyIGI9ZygpO3JldHVybiBzKGEsYi5yZXNvbHZlLGIucmVqZWN0LGIubm90aWZ5KS5mYWlsKGIucmVqZWN0KSxiLnByb21pc2V9LGIubWFrZVByb21pc2U9aCxoLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbyh0aGlzLGEsYixjKX0saC5wcm90b3R5cGUudGhlblJlc29sdmU9ZnVuY3Rpb24oYSl7cmV0dXJuIG8odGhpcyxmdW5jdGlvbigpe3JldHVybiBhfSl9LEgoXCJpc1Jlc29sdmVkIGlzRnVsZmlsbGVkIGlzUmVqZWN0ZWQgZGlzcGF0Y2ggd2hlbiBzcHJlYWQgZ2V0IHB1dCBkZWwgcG9zdCBzZW5kIGludm9rZSBrZXlzIGZhcHBseSBmY2FsbCBmYmluZCBhbGwgYWxsUmVzb2x2ZWQgdGltZW91dCBkZWxheSBjYXRjaCBmaW5hbGx5IGZhaWwgZmluIHByb2dyZXNzIGVuZCBkb25lIG5mY2FsbCBuZmFwcGx5IG5mYmluZCBuY2FsbCBuYXBwbHkgbmJpbmQgbnBvc3QgbnNlbmQgbmludm9rZSBuZW5kIG5vZGVpZnlcIi5zcGxpdChcIiBcIiksZnVuY3Rpb24oYSxjKXtoLnByb3RvdHlwZVtjXT1mdW5jdGlvbigpe3JldHVybiBiW2NdLmFwcGx5KGIsW3RoaXNdLmNvbmNhdChHKGFyZ3VtZW50cykpKX19LHZvaWQgMCksaC5wcm90b3R5cGUudG9Tb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygpfSxoLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBQcm9taXNlXVwifSx6KGgucHJvdG90eXBlKSxiLm5lYXJlcj1pLGIuaXNQcm9taXNlPWosYi5pc1Jlc29sdmVkPWZ1bmN0aW9uKGEpe3JldHVybiBrKGEpfHxsKGEpfSxiLmlzRnVsZmlsbGVkPWssYi5pc1JlamVjdGVkPWw7dmFyIE8sUD1bXSxRPVtdO2IucmVqZWN0PW0sYi5yZXNvbHZlPW4sYi5tYXN0ZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIGgoe2lzRGVmOmZ1bmN0aW9uKCl7fX0sZnVuY3Rpb24oYixjKXtyZXR1cm4gcShhLGIsYyl9LGZ1bmN0aW9uKCl7cmV0dXJuIGkoYSl9KX0sYi53aGVuPW8sYi5zcHJlYWQ9cCxiLmFzeW5jPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgZjt0cnl7Zj1jW2FdKGIpfWNhdGNoKGcpe3JldHVyblwiW29iamVjdCBTdG9wSXRlcmF0aW9uXVwiPT09TShnKXx8ZyBpbnN0YW5jZW9mIEY/Zy52YWx1ZTptKGcpfXJldHVybiBvKGYsZCxlKX12YXIgYz1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkPWIuYmluZChiLFwic2VuZFwiKSxlPWIuYmluZChiLFwidGhyb3dcIik7cmV0dXJuIGQoKX19LGJbXCJyZXR1cm5cIl09ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEYoYSl9LGIucHJvbWlzZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHAoW3RoaXMsdChhcmd1bWVudHMpXSxmdW5jdGlvbihiLGMpe3JldHVybiBhLmFwcGx5KGIsYyl9KX19LGIuZGlzcGF0Y2g9cSxiLmRpc3BhdGNoZXI9cixiLmdldD1yKFwiZ2V0XCIpLGIucHV0PXIoXCJwdXRcIiksYltcImRlbGV0ZVwiXT1iLmRlbD1yKFwiZGVsXCIpO3ZhciBSPWIucG9zdD1yKFwicG9zdFwiKTtiLnNlbmQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1HKGFyZ3VtZW50cywyKTtyZXR1cm4gUihhLGIsYyl9LGIuaW52b2tlPWYoYi5zZW5kLFwiaW52b2tlXCIsXCJzZW5kXCIpO3ZhciBTPWIuZmFwcGx5PXIoXCJhcHBseVwiKTtiW1widHJ5XCJdPXMsYi5mY2FsbD1zLGIuZmJpbmQ9ZnVuY3Rpb24oYSl7dmFyIGI9Ryhhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9Yi5jb25jYXQoRyhhcmd1bWVudHMpKTtyZXR1cm4gUyhhLGMpfX0sYi5rZXlzPXIoXCJrZXlzXCIpLGIuYWxsPXQsYi5hbGxSZXNvbHZlZD1mdW5jdGlvbihhKXtyZXR1cm4gbyhhLGZ1bmN0aW9uKGEpe3JldHVybiBvKHQoSihhLGZ1bmN0aW9uKGEpe3JldHVybiBvKGEseSx5KX0pKSxmdW5jdGlvbigpe3JldHVybiBKKGEsbil9KX0pfSxiW1wiY2F0Y2hcIl09Yi5mYWlsPXUsYi5wcm9ncmVzcz1mdW5jdGlvbihhLGIpe3JldHVybiBvKGEsdm9pZCAwLHZvaWQgMCxiKX0sYltcImZpbmFsbHlcIl09Yi5maW49ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbyhhLGZ1bmN0aW9uKGEpe3JldHVybiBvKGIoKSxmdW5jdGlvbigpe3JldHVybiBhfSl9LGZ1bmN0aW9uKGEpe3JldHVybiBvKGIoKSxmdW5jdGlvbigpe3JldHVybiBtKGEpfSl9KX0sYi5kb25lPWZ1bmN0aW9uKGEsZCxlLGYpe2Q9ZHx8ZXx8Zj9vKGEsZCxlLGYpOmEsdShkLGZ1bmN0aW9uKGQpe0EoZnVuY3Rpb24oKXtpZihjKGQsYSksIWIub25lcnJvcil0aHJvdyBkO2Iub25lcnJvcihkKX0pfSl9LGIudGltZW91dD1mdW5jdGlvbihhLGIpe3ZhciBjPWcoKSxkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLnJlamVjdChFcnJvcihcIlRpbWVkIG91dCBhZnRlciBcIitiK1wiIG1zXCIpKX0sYik7cmV0dXJuIG8oYSxmdW5jdGlvbihhKXtjbGVhclRpbWVvdXQoZCksYy5yZXNvbHZlKGEpfSxmdW5jdGlvbihhKXtjbGVhclRpbWVvdXQoZCksYy5yZWplY3QoYSl9KSxjLnByb21pc2V9LGIuZGVsYXk9ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj1hLGE9dm9pZCAwKTt2YXIgYz1nKCk7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLnJlc29sdmUoYSl9LGIpLGMucHJvbWlzZX0sYi5uZmFwcGx5PWZ1bmN0aW9uKGEsYil7dmFyIGM9RyhiKSxkPWcoKTtyZXR1cm4gYy5wdXNoKGQubWFrZU5vZGVSZXNvbHZlcigpKSxTKGEsYykuZmFpbChkLnJlamVjdCksZC5wcm9taXNlfSxiLm5mY2FsbD1mdW5jdGlvbihhKXt2YXIgYj1HKGFyZ3VtZW50cywxKSxjPWcoKTtyZXR1cm4gYi5wdXNoKGMubWFrZU5vZGVSZXNvbHZlcigpKSxTKGEsYikuZmFpbChjLnJlamVjdCksYy5wcm9taXNlfSxiLm5mYmluZD1mdW5jdGlvbihhKXt2YXIgYj1HKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1iLmNvbmNhdChHKGFyZ3VtZW50cykpLGQ9ZygpO3JldHVybiBjLnB1c2goZC5tYWtlTm9kZVJlc29sdmVyKCkpLFMoYSxjKS5mYWlsKGQucmVqZWN0KSxkLnByb21pc2V9fSxiLm5wb3N0PWZ1bmN0aW9uKGEsYixjKXt2YXIgYz1HKGMpLGQ9ZygpO3JldHVybiBjLnB1c2goZC5tYWtlTm9kZVJlc29sdmVyKCkpLFIoYSxiLGMpLmZhaWwoZC5yZWplY3QpLGQucHJvbWlzZX0sYi5uc2VuZD12LGIubmludm9rZT1mKHYsXCJuaW52b2tlXCIsXCJuc2VuZFwiKSxiLm5vZGVpZnk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj8oYS50aGVuKGZ1bmN0aW9uKGEpe0EoZnVuY3Rpb24oKXtiKG51bGwsYSl9KX0sZnVuY3Rpb24oYSl7QShmdW5jdGlvbigpe2IoYSl9KX0pLHZvaWQgMCk6YX07dmFyIFQ9ZSgpfSksZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGI9e1ZFUlNJT046XCIwLjUuM1wifTtiLlN5c3RlbT1mdW5jdGlvbigpe3RoaXMuX21hcHBpbmdzPXt9LHRoaXMuX291dGxldHM9e30sdGhpcy5faGFuZGxlcnM9e30sdGhpcy5zdHJpY3RJbmplY3Rpb25zPSEwLHRoaXMuYXV0b01hcE91dGxldHM9ITEsdGhpcy5wb3N0SW5qZWN0aW9uSG9vaz1cInNldHVwXCJ9LGIuU3lzdGVtLnByb3RvdHlwZT17X2NyZWF0ZUFuZFNldHVwSW5zdGFuY2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgYjtyZXR1cm4gdGhpcy5pbmplY3RJbnRvKGMsYSksY30sX3JldHJpZXZlRnJvbUNhY2hlT3JDcmVhdGU6ZnVuY3Rpb24oYSxiKXtcInVuZGVmaW5lZFwiPT10eXBlb2YgYiYmKGI9ITEpO3ZhciBjO2lmKCF0aGlzLl9tYXBwaW5ncy5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBuZXcgRXJyb3IoMWUzKTt2YXIgZD10aGlzLl9tYXBwaW5nc1thXTtyZXR1cm4hYiYmZC5pc1NpbmdsZXRvbj8obnVsbD09ZC5vYmplY3QmJihkLm9iamVjdD10aGlzLl9jcmVhdGVBbmRTZXR1cEluc3RhbmNlKGEsZC5jbGF6eikpLGM9ZC5vYmplY3QpOmM9ZC5jbGF6ej90aGlzLl9jcmVhdGVBbmRTZXR1cEluc3RhbmNlKGEsZC5jbGF6eik6ZC5vYmplY3QsY30sbWFwT3V0bGV0OmZ1bmN0aW9uKGEsYixjKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoMTAxMCk7cmV0dXJuIGI9Ynx8XCJnbG9iYWxcIixjPWN8fGEsdGhpcy5fb3V0bGV0cy5oYXNPd25Qcm9wZXJ0eShiKXx8KHRoaXMuX291dGxldHNbYl09e30pLHRoaXMuX291dGxldHNbYl1bY109YSx0aGlzfSxnZXRPYmplY3Q6ZnVuY3Rpb24oYSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKDEwMjApO3JldHVybiB0aGlzLl9yZXRyaWV2ZUZyb21DYWNoZU9yQ3JlYXRlKGEpfSxtYXBWYWx1ZTpmdW5jdGlvbihhLGIpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcigxMDMwKTtyZXR1cm4gdGhpcy5fbWFwcGluZ3NbYV09e2NsYXp6Om51bGwsb2JqZWN0OmIsaXNTaW5nbGV0b246ITB9LHRoaXMuYXV0b01hcE91dGxldHMmJnRoaXMubWFwT3V0bGV0KGEpLHRoaXMuaGFzTWFwcGluZyhhKSYmdGhpcy5pbmplY3RJbnRvKGIsYSksdGhpc30saGFzTWFwcGluZzpmdW5jdGlvbihhKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoMTA0MCk7cmV0dXJuIHRoaXMuX21hcHBpbmdzLmhhc093blByb3BlcnR5KGEpfSxtYXBDbGFzczpmdW5jdGlvbihhLGIpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcigxMDUwKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgYil0aHJvdyBuZXcgRXJyb3IoMTA1MSk7cmV0dXJuIHRoaXMuX21hcHBpbmdzW2FdPXtjbGF6ejpiLG9iamVjdDpudWxsLGlzU2luZ2xldG9uOiExfSx0aGlzLmF1dG9NYXBPdXRsZXRzJiZ0aGlzLm1hcE91dGxldChhKSx0aGlzfSxtYXBTaW5nbGV0b246ZnVuY3Rpb24oYSxiKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoMTA2MCk7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGIpdGhyb3cgbmV3IEVycm9yKDEwNjEpO3JldHVybiB0aGlzLl9tYXBwaW5nc1thXT17Y2xheno6YixvYmplY3Q6bnVsbCxpc1NpbmdsZXRvbjohMH0sdGhpcy5hdXRvTWFwT3V0bGV0cyYmdGhpcy5tYXBPdXRsZXQoYSksdGhpc30saW5zdGFudGlhdGU6ZnVuY3Rpb24oYSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKDEwNzApO3JldHVybiB0aGlzLl9yZXRyaWV2ZUZyb21DYWNoZU9yQ3JlYXRlKGEsITApfSxpbmplY3RJbnRvOmZ1bmN0aW9uKGEsYil7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKDEwODApO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBhKXt2YXIgYz1bXTt0aGlzLl9vdXRsZXRzLmhhc093blByb3BlcnR5KFwiZ2xvYmFsXCIpJiZjLnB1c2godGhpcy5fb3V0bGV0cy5nbG9iYWwpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBiJiZ0aGlzLl9vdXRsZXRzLmhhc093blByb3BlcnR5KGIpJiZjLnB1c2godGhpcy5fb3V0bGV0c1tiXSk7Zm9yKHZhciBkIGluIGMpe3ZhciBlPWNbZF07Zm9yKHZhciBmIGluIGUpe3ZhciBnPWVbZl07KCF0aGlzLnN0cmljdEluamVjdGlvbnN8fGYgaW4gYSkmJihhW2ZdPXRoaXMuZ2V0T2JqZWN0KGcpKX19XCJzZXR1cFwiaW4gYSYmYS5zZXR1cC5jYWxsKGEpfXJldHVybiB0aGlzfSx1bm1hcDpmdW5jdGlvbihhKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoMTA5MCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9tYXBwaW5nc1thXSx0aGlzfSx1bm1hcE91dGxldDpmdW5jdGlvbihhLGIpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcigxMTAwKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgYil0aHJvdyBuZXcgRXJyb3IoMTEwMSk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9vdXRsZXRzW2FdW2JdLHRoaXN9LG1hcEhhbmRsZXI6ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoMTExMCk7cmV0dXJuIGI9Ynx8XCJnbG9iYWxcIixjPWN8fGEsXCJ1bmRlZmluZWRcIj09dHlwZW9mIGQmJihkPSExKSxcInVuZGVmaW5lZFwiPT10eXBlb2YgZSYmKGU9ITEpLHRoaXMuX2hhbmRsZXJzLmhhc093blByb3BlcnR5KGEpfHwodGhpcy5faGFuZGxlcnNbYV09e30pLHRoaXMuX2hhbmRsZXJzW2FdLmhhc093blByb3BlcnR5KGIpfHwodGhpcy5faGFuZGxlcnNbYV1bYl09W10pLHRoaXMuX2hhbmRsZXJzW2FdW2JdLnB1c2goe2hhbmRsZXI6YyxvbmVTaG90OmQscGFzc0V2ZW50OmV9KSx0aGlzfSx1bm1hcEhhbmRsZXI6ZnVuY3Rpb24oYSxiLGMpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcigxMTIwKTtpZihiPWJ8fFwiZ2xvYmFsXCIsYz1jfHxhLHRoaXMuX2hhbmRsZXJzLmhhc093blByb3BlcnR5KGEpJiZ0aGlzLl9oYW5kbGVyc1thXS5oYXNPd25Qcm9wZXJ0eShiKSl7dmFyIGQ9dGhpcy5faGFuZGxlcnNbYV1bYl07Zm9yKHZhciBlIGluIGQpe3ZhciBmPWRbZV07aWYoZi5oYW5kbGVyPT09Yyl7ZC5zcGxpY2UoZSwxKTticmVha319fXJldHVybiB0aGlzfSxub3RpZnk6ZnVuY3Rpb24oYSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKDExMzApO3ZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksYz1iLnNsaWNlKDEpO2lmKHRoaXMuX2hhbmRsZXJzLmhhc093blByb3BlcnR5KGEpKXt2YXIgZD10aGlzLl9oYW5kbGVyc1thXTtmb3IodmFyIGUgaW4gZCl7dmFyIGYsZz1kW2VdO1wiZ2xvYmFsXCIhPT1lJiYoZj10aGlzLmdldE9iamVjdChlKSk7dmFyIGgsaSxqPVtdO2ZvcihoPTAsaT1nLmxlbmd0aDtpPmg7aCsrKXt2YXIgayxsPWdbaF07az1mJiZcInN0cmluZ1wiPT10eXBlb2YgbC5oYW5kbGVyP2ZbbC5oYW5kbGVyXTpsLmhhbmRsZXIsbC5vbmVTaG90JiZqLnVuc2hpZnQoaCksbC5wYXNzRXZlbnQ/ay5hcHBseShmLGIpOmsuYXBwbHkoZixjKX1mb3IoaD0wLGk9ai5sZW5ndGg7aT5oO2grKylnLnNwbGljZShqW2hdLDEpfX1yZXR1cm4gdGhpc319LGEuZGlqb249Yn0odGhpcyksXCJ1bmRlZmluZWRcIj09dHlwZW9mIHV0aWxzKXZhciB1dGlscz17fTtcInVuZGVmaW5lZFwiPT10eXBlb2YgdXRpbHMuTWF0aCYmKHV0aWxzLk1hdGg9e30pLHV0aWxzLk1hdGgudG82NEJpdE51bWJlcj1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZTtyZXR1cm4gYz1uZXcgZ29vZy5tYXRoLkxvbmcoMCxiKSxkPW5ldyBnb29nLm1hdGguTG9uZyhhLDApLGU9Yy5hZGQoZCksZS50b051bWJlcigpfSxnb29nPXt9LGdvb2cubWF0aD17fSxnb29nLm1hdGguTG9uZz1mdW5jdGlvbihhLGIpe3RoaXMubG93Xz0wfGEsdGhpcy5oaWdoXz0wfGJ9LGdvb2cubWF0aC5Mb25nLkludENhY2hlXz17fSxnb29nLm1hdGguTG9uZy5mcm9tSW50PWZ1bmN0aW9uKGEpe2lmKGE+PS0xMjgmJjEyOD5hKXt2YXIgYj1nb29nLm1hdGguTG9uZy5JbnRDYWNoZV9bYV07aWYoYilyZXR1cm4gYn12YXIgYz1uZXcgZ29vZy5tYXRoLkxvbmcoMHxhLDA+YT8tMTowKTtyZXR1cm4gYT49LTEyOCYmMTI4PmEmJihnb29nLm1hdGguTG9uZy5JbnRDYWNoZV9bYV09YyksY30sZ29vZy5tYXRoLkxvbmcuZnJvbU51bWJlcj1mdW5jdGlvbihhKXtyZXR1cm4gaXNOYU4oYSl8fCFpc0Zpbml0ZShhKT9nb29nLm1hdGguTG9uZy5aRVJPOmE8PS1nb29nLm1hdGguTG9uZy5UV09fUFdSXzYzX0RCTF8/Z29vZy5tYXRoLkxvbmcuTUlOX1ZBTFVFOmErMT49Z29vZy5tYXRoLkxvbmcuVFdPX1BXUl82M19EQkxfP2dvb2cubWF0aC5Mb25nLk1BWF9WQUxVRTowPmE/Z29vZy5tYXRoLkxvbmcuZnJvbU51bWJlcigtYSkubmVnYXRlKCk6bmV3IGdvb2cubWF0aC5Mb25nKDB8YSVnb29nLm1hdGguTG9uZy5UV09fUFdSXzMyX0RCTF8sMHxhL2dvb2cubWF0aC5Mb25nLlRXT19QV1JfMzJfREJMXyl9LGdvb2cubWF0aC5Mb25nLmZyb21CaXRzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBnb29nLm1hdGguTG9uZyhhLGIpfSxnb29nLm1hdGguTG9uZy5mcm9tU3RyaW5nPWZ1bmN0aW9uKGEsYil7aWYoMD09YS5sZW5ndGgpdGhyb3cgRXJyb3IoXCJudW1iZXIgZm9ybWF0IGVycm9yOiBlbXB0eSBzdHJpbmdcIik7dmFyIGM9Ynx8MTA7aWYoMj5jfHxjPjM2KXRocm93IEVycm9yKFwicmFkaXggb3V0IG9mIHJhbmdlOiBcIitjKTtpZihcIi1cIj09YS5jaGFyQXQoMCkpcmV0dXJuIGdvb2cubWF0aC5Mb25nLmZyb21TdHJpbmcoYS5zdWJzdHJpbmcoMSksYykubmVnYXRlKCk7aWYoYS5pbmRleE9mKFwiLVwiKT49MCl0aHJvdyBFcnJvcignbnVtYmVyIGZvcm1hdCBlcnJvcjogaW50ZXJpb3IgXCItXCIgY2hhcmFjdGVyOiAnK2EpO2Zvcih2YXIgZD1nb29nLm1hdGguTG9uZy5mcm9tTnVtYmVyKE1hdGgucG93KGMsOCkpLGU9Z29vZy5tYXRoLkxvbmcuWkVSTyxmPTA7ZjxhLmxlbmd0aDtmKz04KXt2YXIgZz1NYXRoLm1pbig4LGEubGVuZ3RoLWYpLGg9cGFyc2VJbnQoYS5zdWJzdHJpbmcoZixmK2cpLGMpO2lmKDg+Zyl7dmFyIGk9Z29vZy5tYXRoLkxvbmcuZnJvbU51bWJlcihNYXRoLnBvdyhjLGcpKTtlPWUubXVsdGlwbHkoaSkuYWRkKGdvb2cubWF0aC5Mb25nLmZyb21OdW1iZXIoaCkpfWVsc2UgZT1lLm11bHRpcGx5KGQpLGU9ZS5hZGQoZ29vZy5tYXRoLkxvbmcuZnJvbU51bWJlcihoKSl9cmV0dXJuIGV9LGdvb2cubWF0aC5Mb25nLlRXT19QV1JfMTZfREJMXz02NTUzNixnb29nLm1hdGguTG9uZy5UV09fUFdSXzI0X0RCTF89MTw8MjQsZ29vZy5tYXRoLkxvbmcuVFdPX1BXUl8zMl9EQkxfPWdvb2cubWF0aC5Mb25nLlRXT19QV1JfMTZfREJMXypnb29nLm1hdGguTG9uZy5UV09fUFdSXzE2X0RCTF8sZ29vZy5tYXRoLkxvbmcuVFdPX1BXUl8zMV9EQkxfPWdvb2cubWF0aC5Mb25nLlRXT19QV1JfMzJfREJMXy8yLGdvb2cubWF0aC5Mb25nLlRXT19QV1JfNDhfREJMXz1nb29nLm1hdGguTG9uZy5UV09fUFdSXzMyX0RCTF8qZ29vZy5tYXRoLkxvbmcuVFdPX1BXUl8xNl9EQkxfLGdvb2cubWF0aC5Mb25nLlRXT19QV1JfNjRfREJMXz1nb29nLm1hdGguTG9uZy5UV09fUFdSXzMyX0RCTF8qZ29vZy5tYXRoLkxvbmcuVFdPX1BXUl8zMl9EQkxfLGdvb2cubWF0aC5Mb25nLlRXT19QV1JfNjNfREJMXz1nb29nLm1hdGguTG9uZy5UV09fUFdSXzY0X0RCTF8vMixnb29nLm1hdGguTG9uZy5aRVJPPWdvb2cubWF0aC5Mb25nLmZyb21JbnQoMCksZ29vZy5tYXRoLkxvbmcuT05FPWdvb2cubWF0aC5Mb25nLmZyb21JbnQoMSksZ29vZy5tYXRoLkxvbmcuTkVHX09ORT1nb29nLm1hdGguTG9uZy5mcm9tSW50KC0xKSxnb29nLm1hdGguTG9uZy5NQVhfVkFMVUU9Z29vZy5tYXRoLkxvbmcuZnJvbUJpdHMoLTEsMjE0NzQ4MzY0NyksZ29vZy5tYXRoLkxvbmcuTUlOX1ZBTFVFPWdvb2cubWF0aC5Mb25nLmZyb21CaXRzKDAsLTIxNDc0ODM2NDgpLGdvb2cubWF0aC5Mb25nLlRXT19QV1JfMjRfPWdvb2cubWF0aC5Mb25nLmZyb21JbnQoMTw8MjQpLGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS50b0ludD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvd199LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhpZ2hfKmdvb2cubWF0aC5Mb25nLlRXT19QV1JfMzJfREJMXyt0aGlzLmdldExvd0JpdHNVbnNpZ25lZCgpfSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYSl7dmFyIGI9YXx8MTA7aWYoMj5ifHxiPjM2KXRocm93IEVycm9yKFwicmFkaXggb3V0IG9mIHJhbmdlOiBcIitiKTtpZih0aGlzLmlzWmVybygpKXJldHVyblwiMFwiO2lmKHRoaXMuaXNOZWdhdGl2ZSgpKXtpZih0aGlzLmVxdWFscyhnb29nLm1hdGguTG9uZy5NSU5fVkFMVUUpKXt2YXIgYz1nb29nLm1hdGguTG9uZy5mcm9tTnVtYmVyKGIpLGQ9dGhpcy5kaXYoYyksZT1kLm11bHRpcGx5KGMpLnN1YnRyYWN0KHRoaXMpO3JldHVybiBkLnRvU3RyaW5nKGIpK2UudG9JbnQoKS50b1N0cmluZyhiKX1yZXR1cm5cIi1cIit0aGlzLm5lZ2F0ZSgpLnRvU3RyaW5nKGIpfWZvcih2YXIgZj1nb29nLm1hdGguTG9uZy5mcm9tTnVtYmVyKE1hdGgucG93KGIsNikpLGU9dGhpcyxnPVwiXCI7Oyl7dmFyIGg9ZS5kaXYoZiksaT1lLnN1YnRyYWN0KGgubXVsdGlwbHkoZikpLnRvSW50KCksaj1pLnRvU3RyaW5nKGIpO2lmKGU9aCxlLmlzWmVybygpKXJldHVybiBqK2c7Zm9yKDtqLmxlbmd0aDw2OylqPVwiMFwiK2o7Zz1cIlwiK2orZ319LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5nZXRIaWdoQml0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhpZ2hffSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUuZ2V0TG93Qml0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvd199LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5nZXRMb3dCaXRzVW5zaWduZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb3dfPj0wP3RoaXMubG93Xzpnb29nLm1hdGguTG9uZy5UV09fUFdSXzMyX0RCTF8rdGhpcy5sb3dffSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUuZ2V0TnVtQml0c0Ficz1mdW5jdGlvbigpe2lmKHRoaXMuaXNOZWdhdGl2ZSgpKXJldHVybiB0aGlzLmVxdWFscyhnb29nLm1hdGguTG9uZy5NSU5fVkFMVUUpPzY0OnRoaXMubmVnYXRlKCkuZ2V0TnVtQml0c0FicygpO2Zvcih2YXIgYT0wIT10aGlzLmhpZ2hfP3RoaXMuaGlnaF86dGhpcy5sb3dfLGI9MzE7Yj4wJiYwPT0oYSYxPDxiKTtiLS0pO3JldHVybiAwIT10aGlzLmhpZ2hfP2IrMzM6YisxfSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PXRoaXMuaGlnaF8mJjA9PXRoaXMubG93X30sZ29vZy5tYXRoLkxvbmcucHJvdG90eXBlLmlzTmVnYXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oaWdoXzwwfSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy5sb3dfKX0sZ29vZy5tYXRoLkxvbmcucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5oaWdoXz09YS5oaWdoXyYmdGhpcy5sb3dfPT1hLmxvd199LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5ub3RFcXVhbHM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaGlnaF8hPWEuaGlnaF98fHRoaXMubG93XyE9YS5sb3dffSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUubGVzc1RoYW49ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY29tcGFyZShhKTwwfSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUubGVzc1RoYW5PckVxdWFsPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNvbXBhcmUoYSk8PTB9LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5ncmVhdGVyVGhhbj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jb21wYXJlKGEpPjB9LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5ncmVhdGVyVGhhbk9yRXF1YWw9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY29tcGFyZShhKT49MH0sZ29vZy5tYXRoLkxvbmcucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oYSl7aWYodGhpcy5lcXVhbHMoYSkpcmV0dXJuIDA7dmFyIGI9dGhpcy5pc05lZ2F0aXZlKCksYz1hLmlzTmVnYXRpdmUoKTtyZXR1cm4gYiYmIWM/LTE6IWImJmM/MTp0aGlzLnN1YnRyYWN0KGEpLmlzTmVnYXRpdmUoKT8tMToxfSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUubmVnYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXF1YWxzKGdvb2cubWF0aC5Mb25nLk1JTl9WQUxVRSk/Z29vZy5tYXRoLkxvbmcuTUlOX1ZBTFVFOnRoaXMubm90KCkuYWRkKGdvb2cubWF0aC5Mb25nLk9ORSl9LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5oaWdoXz4+PjE2LGM9NjU1MzUmdGhpcy5oaWdoXyxkPXRoaXMubG93Xz4+PjE2LGU9NjU1MzUmdGhpcy5sb3dfLGY9YS5oaWdoXz4+PjE2LGc9NjU1MzUmYS5oaWdoXyxoPWEubG93Xz4+PjE2LGk9NjU1MzUmYS5sb3dfLGo9MCxrPTAsbD0wLG09MDtyZXR1cm4gbSs9ZStpLGwrPW0+Pj4xNixtJj02NTUzNSxsKz1kK2gsays9bD4+PjE2LGwmPTY1NTM1LGsrPWMrZyxqKz1rPj4+MTYsayY9NjU1MzUsais9YitmLGomPTY1NTM1LGdvb2cubWF0aC5Mb25nLmZyb21CaXRzKGw8PDE2fG0sajw8MTZ8ayl9LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5zdWJ0cmFjdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hZGQoYS5uZWdhdGUoKSl9LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5tdWx0aXBseT1mdW5jdGlvbihhKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnb29nLm1hdGguTG9uZy5aRVJPO2lmKGEuaXNaZXJvKCkpcmV0dXJuIGdvb2cubWF0aC5Mb25nLlpFUk87aWYodGhpcy5lcXVhbHMoZ29vZy5tYXRoLkxvbmcuTUlOX1ZBTFVFKSlyZXR1cm4gYS5pc09kZCgpP2dvb2cubWF0aC5Mb25nLk1JTl9WQUxVRTpnb29nLm1hdGguTG9uZy5aRVJPO2lmKGEuZXF1YWxzKGdvb2cubWF0aC5Mb25nLk1JTl9WQUxVRSkpcmV0dXJuIHRoaXMuaXNPZGQoKT9nb29nLm1hdGguTG9uZy5NSU5fVkFMVUU6Z29vZy5tYXRoLkxvbmcuWkVSTztpZih0aGlzLmlzTmVnYXRpdmUoKSlyZXR1cm4gYS5pc05lZ2F0aXZlKCk/dGhpcy5uZWdhdGUoKS5tdWx0aXBseShhLm5lZ2F0ZSgpKTp0aGlzLm5lZ2F0ZSgpLm11bHRpcGx5KGEpLm5lZ2F0ZSgpO2lmKGEuaXNOZWdhdGl2ZSgpKXJldHVybiB0aGlzLm11bHRpcGx5KGEubmVnYXRlKCkpLm5lZ2F0ZSgpO2lmKHRoaXMubGVzc1RoYW4oZ29vZy5tYXRoLkxvbmcuVFdPX1BXUl8yNF8pJiZhLmxlc3NUaGFuKGdvb2cubWF0aC5Mb25nLlRXT19QV1JfMjRfKSlyZXR1cm4gZ29vZy5tYXRoLkxvbmcuZnJvbU51bWJlcih0aGlzLnRvTnVtYmVyKCkqYS50b051bWJlcigpKTt2YXIgYj10aGlzLmhpZ2hfPj4+MTYsYz02NTUzNSZ0aGlzLmhpZ2hfLGQ9dGhpcy5sb3dfPj4+MTYsZT02NTUzNSZ0aGlzLmxvd18sZj1hLmhpZ2hfPj4+MTYsZz02NTUzNSZhLmhpZ2hfLGg9YS5sb3dfPj4+MTYsaT02NTUzNSZhLmxvd18saj0wLGs9MCxsPTAsbT0wO3JldHVybiBtKz1lKmksbCs9bT4+PjE2LG0mPTY1NTM1LGwrPWQqaSxrKz1sPj4+MTYsbCY9NjU1MzUsbCs9ZSpoLGsrPWw+Pj4xNixsJj02NTUzNSxrKz1jKmksais9az4+PjE2LGsmPTY1NTM1LGsrPWQqaCxqKz1rPj4+MTYsayY9NjU1MzUsays9ZSpnLGorPWs+Pj4xNixrJj02NTUzNSxqKz1iKmkrYypoK2QqZytlKmYsaiY9NjU1MzUsZ29vZy5tYXRoLkxvbmcuZnJvbUJpdHMobDw8MTZ8bSxqPDwxNnxrKX0sZ29vZy5tYXRoLkxvbmcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihhKXtpZihhLmlzWmVybygpKXRocm93IEVycm9yKFwiZGl2aXNpb24gYnkgemVyb1wiKTtpZih0aGlzLmlzWmVybygpKXJldHVybiBnb29nLm1hdGguTG9uZy5aRVJPO2lmKHRoaXMuZXF1YWxzKGdvb2cubWF0aC5Mb25nLk1JTl9WQUxVRSkpe2lmKGEuZXF1YWxzKGdvb2cubWF0aC5Mb25nLk9ORSl8fGEuZXF1YWxzKGdvb2cubWF0aC5Mb25nLk5FR19PTkUpKXJldHVybiBnb29nLm1hdGguTG9uZy5NSU5fVkFMVUU7aWYoYS5lcXVhbHMoZ29vZy5tYXRoLkxvbmcuTUlOX1ZBTFVFKSlyZXR1cm4gZ29vZy5tYXRoLkxvbmcuT05FO3ZhciBiPXRoaXMuc2hpZnRSaWdodCgxKSxjPWIuZGl2KGEpLnNoaWZ0TGVmdCgxKTtpZihjLmVxdWFscyhnb29nLm1hdGguTG9uZy5aRVJPKSlyZXR1cm4gYS5pc05lZ2F0aXZlKCk/Z29vZy5tYXRoLkxvbmcuT05FOmdvb2cubWF0aC5Mb25nLk5FR19PTkU7dmFyIGQ9dGhpcy5zdWJ0cmFjdChhLm11bHRpcGx5KGMpKSxlPWMuYWRkKGQuZGl2KGEpKTtyZXR1cm4gZX1pZihhLmVxdWFscyhnb29nLm1hdGguTG9uZy5NSU5fVkFMVUUpKXJldHVybiBnb29nLm1hdGguTG9uZy5aRVJPO2lmKHRoaXMuaXNOZWdhdGl2ZSgpKXJldHVybiBhLmlzTmVnYXRpdmUoKT90aGlzLm5lZ2F0ZSgpLmRpdihhLm5lZ2F0ZSgpKTp0aGlzLm5lZ2F0ZSgpLmRpdihhKS5uZWdhdGUoKTtpZihhLmlzTmVnYXRpdmUoKSlyZXR1cm4gdGhpcy5kaXYoYS5uZWdhdGUoKSkubmVnYXRlKCk7Zm9yKHZhciBmPWdvb2cubWF0aC5Mb25nLlpFUk8sZD10aGlzO2QuZ3JlYXRlclRoYW5PckVxdWFsKGEpOyl7Zm9yKHZhciBjPU1hdGgubWF4KDEsTWF0aC5mbG9vcihkLnRvTnVtYmVyKCkvYS50b051bWJlcigpKSksZz1NYXRoLmNlaWwoTWF0aC5sb2coYykvTWF0aC5MTjIpLGg9NDg+PWc/MTpNYXRoLnBvdygyLGctNDgpLGk9Z29vZy5tYXRoLkxvbmcuZnJvbU51bWJlcihjKSxqPWkubXVsdGlwbHkoYSk7ai5pc05lZ2F0aXZlKCl8fGouZ3JlYXRlclRoYW4oZCk7KWMtPWgsaT1nb29nLm1hdGguTG9uZy5mcm9tTnVtYmVyKGMpLGo9aS5tdWx0aXBseShhKTtpLmlzWmVybygpJiYoaT1nb29nLm1hdGguTG9uZy5PTkUpLGY9Zi5hZGQoaSksZD1kLnN1YnRyYWN0KGopfXJldHVybiBmfSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUubW9kdWxvPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnN1YnRyYWN0KHRoaXMuZGl2KGEpLm11bHRpcGx5KGEpKX0sZ29vZy5tYXRoLkxvbmcucHJvdG90eXBlLm5vdD1mdW5jdGlvbigpe3JldHVybiBnb29nLm1hdGguTG9uZy5mcm9tQml0cyh+dGhpcy5sb3dfLH50aGlzLmhpZ2hfKX0sZ29vZy5tYXRoLkxvbmcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5tYXRoLkxvbmcuZnJvbUJpdHModGhpcy5sb3dfJmEubG93Xyx0aGlzLmhpZ2hfJmEuaGlnaF8pfSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cubWF0aC5Mb25nLmZyb21CaXRzKHRoaXMubG93X3xhLmxvd18sdGhpcy5oaWdoX3xhLmhpZ2hfKX0sZ29vZy5tYXRoLkxvbmcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5tYXRoLkxvbmcuZnJvbUJpdHModGhpcy5sb3dfXmEubG93Xyx0aGlzLmhpZ2hfXmEuaGlnaF8pfSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUuc2hpZnRMZWZ0PWZ1bmN0aW9uKGEpe2lmKGEmPTYzLDA9PWEpcmV0dXJuIHRoaXM7dmFyIGI9dGhpcy5sb3dfO2lmKDMyPmEpe3ZhciBjPXRoaXMuaGlnaF87cmV0dXJuIGdvb2cubWF0aC5Mb25nLmZyb21CaXRzKGI8PGEsYzw8YXxiPj4+MzItYSl9cmV0dXJuIGdvb2cubWF0aC5Mb25nLmZyb21CaXRzKDAsYjw8YS0zMil9LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5zaGlmdFJpZ2h0PWZ1bmN0aW9uKGEpe2lmKGEmPTYzLDA9PWEpcmV0dXJuIHRoaXM7dmFyIGI9dGhpcy5oaWdoXztpZigzMj5hKXt2YXIgYz10aGlzLmxvd187cmV0dXJuIGdvb2cubWF0aC5Mb25nLmZyb21CaXRzKGM+Pj5hfGI8PDMyLWEsYj4+YSl9cmV0dXJuIGdvb2cubWF0aC5Mb25nLmZyb21CaXRzKGI+PmEtMzIsYj49MD8wOi0xKX0sZ29vZy5tYXRoLkxvbmcucHJvdG90eXBlLnNoaWZ0UmlnaHRVbnNpZ25lZD1mdW5jdGlvbihhKXtpZihhJj02MywwPT1hKXJldHVybiB0aGlzO3ZhciBiPXRoaXMuaGlnaF87aWYoMzI+YSl7dmFyIGM9dGhpcy5sb3dfO3JldHVybiBnb29nLm1hdGguTG9uZy5mcm9tQml0cyhjPj4+YXxiPDwzMi1hLGI+Pj5hKX1yZXR1cm4gMzI9PWE/Z29vZy5tYXRoLkxvbmcuZnJvbUJpdHMoYiwwKTpnb29nLm1hdGguTG9uZy5mcm9tQml0cyhiPj4+YS0zMiwwKX07dmFyIFVURjg9e307VVRGOC5lbmNvZGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoOysrYyl7dmFyIGQ9YS5jaGFyQ29kZUF0KGMpOzEyOD5kP2IucHVzaChkKToyMDQ4PmQ/KGIucHVzaCgxOTJ8ZD4+NiksYi5wdXNoKDEyOHw2MyZkKSk6NjU1MzY+ZD8oYi5wdXNoKDIyNHxkPj4xMiksYi5wdXNoKDEyOHw2MyZkPj42KSxiLnB1c2goMTI4fDYzJmQpKTooYi5wdXNoKDI0MHxkPj4xOCksYi5wdXNoKDEyOHw2MyZkPj4xMiksYi5wdXNoKDEyOHw2MyZkPj42KSxiLnB1c2goMTI4fDYzJmQpKX1yZXR1cm4gYn0sVVRGOC5kZWNvZGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoOyl7dmFyIGQ9YVtjKytdOzEyOD5kfHwoMjI0PmQ/KGQ9KDMxJmQpPDw2LGR8PTYzJmFbYysrXSk6MjQwPmQ/KGQ9KDE1JmQpPDwxMixkfD0oNjMmYVtjKytdKTw8NixkfD02MyZhW2MrK10pOihkPSg3JmQpPDwxOCxkfD0oNjMmYVtjKytdKTw8MTIsZHw9KDYzJmFbYysrXSk8PDYsZHw9NjMmYVtjKytdKSksYi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZCkpfXJldHVybiBiLmpvaW4oXCJcIil9O3ZhciBCQVNFNjQ9e307aWYoZnVuY3Rpb24oYil7dmFyIGM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPTAsZD1bXSxlPTB8YS5sZW5ndGgvMzswPGUtLTspe3ZhciBmPShhW2NdPDwxNikrKGFbYysxXTw8OCkrYVtjKzJdO2MrPTMsZC5wdXNoKGIuY2hhckF0KDYzJmY+PjE4KSksZC5wdXNoKGIuY2hhckF0KDYzJmY+PjEyKSksZC5wdXNoKGIuY2hhckF0KDYzJmY+PjYpKSxkLnB1c2goYi5jaGFyQXQoNjMmZikpfWlmKDI9PWEubGVuZ3RoLWMpe3ZhciBmPShhW2NdPDwxNikrKGFbYysxXTw8OCk7ZC5wdXNoKGIuY2hhckF0KDYzJmY+PjE4KSksZC5wdXNoKGIuY2hhckF0KDYzJmY+PjEyKSksZC5wdXNoKGIuY2hhckF0KDYzJmY+PjYpKSxkLnB1c2goXCI9XCIpfWVsc2UgaWYoMT09YS5sZW5ndGgtYyl7dmFyIGY9YVtjXTw8MTY7ZC5wdXNoKGIuY2hhckF0KDYzJmY+PjE4KSksZC5wdXNoKGIuY2hhckF0KDYzJmY+PjEyKSksZC5wdXNoKFwiPT1cIil9cmV0dXJuIGQuam9pbihcIlwiKX0sZD1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxjPTA7YzxiLmxlbmd0aDsrK2MpYVtiLmNoYXJDb2RlQXQoYyldPWM7cmV0dXJuIGFbXCI9XCIuY2hhckNvZGVBdCgwKV09MCxhfSgpLGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz1bXSxlPTB8YS5sZW5ndGgvNDswPGUtLTspe3ZhciBmPShkW2EuY2hhckNvZGVBdChiKV08PDE4KSsoZFthLmNoYXJDb2RlQXQoYisxKV08PDEyKSsoZFthLmNoYXJDb2RlQXQoYisyKV08PDYpK2RbYS5jaGFyQ29kZUF0KGIrMyldO2MucHVzaCgyNTUmZj4+MTYpLGMucHVzaCgyNTUmZj4+OCksYy5wdXNoKDI1NSZmKSxiKz00fXJldHVybiBjJiYoXCI9XCI9PWEuY2hhckF0KGItMik/KGMucG9wKCksYy5wb3AoKSk6XCI9XCI9PWEuY2hhckF0KGItMSkmJmMucG9wKCkpLGN9LGY9e307Zi5lbmNvZGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoOysrYyliLnB1c2goYS5jaGFyQ29kZUF0KGMpKTtyZXR1cm4gYn0sZi5kZWNvZGU9ZnVuY3Rpb24oKXtmb3IodmFyIGI9MDtiPHMubGVuZ3RoOysrYilhW2JdPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtiXSk7cmV0dXJuIGEuam9pbihcIlwiKX0sQkFTRTY0LmRlY29kZUFycmF5PWZ1bmN0aW9uKGEpe3ZhciBiPWUoYSk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGIpfSxCQVNFNjQuZW5jb2RlQVNDSUk9ZnVuY3Rpb24oYSl7dmFyIGI9Zi5lbmNvZGUoYSk7cmV0dXJuIGMoYil9LEJBU0U2NC5kZWNvZGVBU0NJST1mdW5jdGlvbihhKXt2YXIgYj1lKGEpO3JldHVybiBmLmRlY29kZShiKX0sQkFTRTY0LmVuY29kZT1mdW5jdGlvbihhKXt2YXIgYj1VVEY4LmVuY29kZShhKTtyZXR1cm4gYyhiKX0sQkFTRTY0LmRlY29kZT1mdW5jdGlvbihhKXt2YXIgYj1lKGEpO3JldHVybiBVVEY4LmRlY29kZShiKX19KFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiKSx2b2lkIDA9PT1idG9hKXZhciBidG9hPUJBU0U2NC5lbmNvZGU7aWYodm9pZCAwPT09YXRvYil2YXIgYXRvYj1CQVNFNjQuZGVjb2RlO01lZGlhUGxheWVyPWZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO3ZhciBiLGMsZCxlLGYsZz1cIjEuMC4wXCIsaD1hLGk9ITEsaj0hMSxrPSEwLGw9ITEsbT1NZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucy5CVUZGRVJfU0laRV9SRVFVSVJFRCxuPWZ1bmN0aW9uKCl7cmV0dXJuISFjJiYhIWR9LG89ZnVuY3Rpb24oKXtpZighaSl0aHJvd1wiTWVkaWFQbGF5ZXIgbm90IGluaXRpYWxpemVkIVwiO2lmKCF0aGlzLmNhcGFiaWxpdGllcy5zdXBwb3J0c01lZGlhU291cmNlKCkpcmV0dXJuIHRoaXMuZXJySGFuZGxlci5jYXBhYmlsaXR5RXJyb3IoXCJtZWRpYXNvdXJjZVwiKSx2b2lkIDA7aWYoIWN8fCFkKXRocm93XCJNaXNzaW5nIHZpZXcgb3Igc291cmNlLlwiO2o9ITAsdGhpcy5kZWJ1Zy5sb2coXCJQbGF5YmFjayBpbml0aWF0ZWQhXCIpLGU9Yi5nZXRPYmplY3QoXCJzdHJlYW1Db250cm9sbGVyXCIpLGUuc2V0VmlkZW9Nb2RlbChmKSxlLnNldEF1dG9QbGF5KGspLGUubG9hZChkKSxiLm1hcFZhbHVlKFwic2NoZWR1bGVXaGlsZVBhdXNlZFwiLGwpLGIubWFwT3V0bGV0KFwic2NoZWR1bGVXaGlsZVBhdXNlZFwiLFwic3RyZWFtXCIpLGIubWFwVmFsdWUoXCJidWZmZXJNYXhcIixtKSxiLmluamVjdEludG8odGhpcy5idWZmZXJFeHQsXCJidWZmZXJNYXhcIil9LHA9ZnVuY3Rpb24oKXtuKCkmJm8uY2FsbCh0aGlzKX07cmV0dXJuIGI9bmV3IGRpam9uLlN5c3RlbSxiLm1hcFZhbHVlKFwic3lzdGVtXCIsYiksYi5tYXBPdXRsZXQoXCJzeXN0ZW1cIiksYi5pbmplY3RJbnRvKGgpLHtkZWJ1Zzp2b2lkIDAsZXZlbnRCdXM6dm9pZCAwLGNhcGFiaWxpdGllczp2b2lkIDAsYWJyQ29udHJvbGxlcjp2b2lkIDAsbWV0cmljc01vZGVsOnZvaWQgMCxtZXRyaWNzRXh0OnZvaWQgMCxidWZmZXJFeHQ6dm9pZCAwLGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuZXZlbnRCdXMuYWRkRXZlbnRMaXN0ZW5lcihhLGIsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuZXZlbnRCdXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGIsYyl9LGdldFZlcnNpb246ZnVuY3Rpb24oKXtyZXR1cm4gZ30sc3RhcnR1cDpmdW5jdGlvbigpe2l8fChiLmluamVjdEludG8odGhpcyksaT0hMCl9LGdldERlYnVnOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVidWd9LGdldFZpZGVvTW9kZWw6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sc2V0QXV0b1BsYXk6ZnVuY3Rpb24oYSl7az1hfSxnZXRBdXRvUGxheTpmdW5jdGlvbigpe3JldHVybiBrfSxzZXRTY2hlZHVsZVdoaWxlUGF1c2VkOmZ1bmN0aW9uKGEpe2w9YX0sZ2V0U2NoZWR1bGVXaGlsZVBhdXNlZDpmdW5jdGlvbigpe3JldHVybiBsfSxzZXRCdWZmZXJNYXg6ZnVuY3Rpb24oYSl7bT1hfSxnZXRCdWZmZXJNYXg6ZnVuY3Rpb24oKXtyZXR1cm4gbX0sZ2V0TWV0cmljc0V4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1ldHJpY3NFeHR9LGdldE1ldHJpY3NGb3I6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5tZXRyaWNzTW9kZWwuZ2V0UmVhZE9ubHlNZXRyaWNzRm9yKGEpO3JldHVybiBifSxnZXRRdWFsaXR5Rm9yOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFickNvbnRyb2xsZXIuZ2V0UXVhbGl0eUZvcihhKX0sc2V0UXVhbGl0eUZvcjpmdW5jdGlvbihhLGIpe3RoaXMuYWJyQ29udHJvbGxlci5zZXRQbGF5YmFja1F1YWxpdHkoYSxiKX0sZ2V0QXV0b1N3aXRjaFF1YWxpdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hYnJDb250cm9sbGVyLmdldEF1dG9Td2l0Y2hCaXRyYXRlKCl9LHNldEF1dG9Td2l0Y2hRdWFsaXR5OmZ1bmN0aW9uKGEpe3RoaXMuYWJyQ29udHJvbGxlci5zZXRBdXRvU3dpdGNoQml0cmF0ZShhKX0sYXR0YWNoVmlldzpmdW5jdGlvbihhKXtpZighaSl0aHJvd1wiTWVkaWFQbGF5ZXIgbm90IGluaXRpYWxpemVkIVwiO2M9YSxmPW51bGwsYyYmKGY9Yi5nZXRPYmplY3QoXCJ2aWRlb01vZGVsXCIpLGYuc2V0RWxlbWVudChjKSksaiYmZSYmKGUucmVzZXQoKSxlPW51bGwsaj0hMSksbi5jYWxsKHRoaXMpJiZwLmNhbGwodGhpcyl9LGF0dGFjaFNvdXJjZTpmdW5jdGlvbihhKXtpZighaSl0aHJvd1wiTWVkaWFQbGF5ZXIgbm90IGluaXRpYWxpemVkIVwiO2Q9YSx0aGlzLnNldFF1YWxpdHlGb3IoXCJ2aWRlb1wiLDApLHRoaXMuc2V0UXVhbGl0eUZvcihcImF1ZGlvXCIsMCksaiYmZSYmKGUucmVzZXQoKSxlPW51bGwsaj0hMSksbi5jYWxsKHRoaXMpJiZwLmNhbGwodGhpcyl9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5hdHRhY2hTb3VyY2UobnVsbCksdGhpcy5hdHRhY2hWaWV3KG51bGwpfSxwbGF5Om8saXNSZWFkeTpufX0sTWVkaWFQbGF5ZXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllcn0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzPXt9LE1lZGlhUGxheWVyLnV0aWxzPXt9LE1lZGlhUGxheWVyLm1vZGVscz17fSxNZWRpYVBsYXllci52bz17fSxNZWRpYVBsYXllci52by5tZXRyaWNzPXt9LE1lZGlhUGxheWVyLnJ1bGVzPXt9LE1lZGlhUGxheWVyLmRpPXt9LE1lZGlhUGxheWVyLmRpLkNvbnRleHQ9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtyZXR1cm57c3lzdGVtOnZvaWQgMCxzZXR1cDpmdW5jdGlvbigpe3RoaXMuc3lzdGVtLmF1dG9NYXBPdXRsZXRzPSEwLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcImRlYnVnXCIsTWVkaWFQbGF5ZXIudXRpbHMuRGVidWcpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcImV2ZW50QnVzXCIsTWVkaWFQbGF5ZXIudXRpbHMuRXZlbnRCdXMpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcImNhcGFiaWxpdGllc1wiLE1lZGlhUGxheWVyLnV0aWxzLkNhcGFiaWxpdGllcyksdGhpcy5zeXN0ZW0ubWFwU2luZ2xldG9uKFwidGV4dFRyYWNrRXh0ZW5zaW9uc1wiLE1lZGlhUGxheWVyLnV0aWxzLlRleHRUcmFja0V4dGVuc2lvbnMpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcInZ0dFBhcnNlclwiLE1lZGlhUGxheWVyLnV0aWxzLlZUVFBhcnNlciksdGhpcy5zeXN0ZW0ubWFwQ2xhc3MoXCJ2aWRlb01vZGVsXCIsTWVkaWFQbGF5ZXIubW9kZWxzLlZpZGVvTW9kZWwpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcIm1hbmlmZXN0TW9kZWxcIixNZWRpYVBsYXllci5tb2RlbHMuTWFuaWZlc3RNb2RlbCksdGhpcy5zeXN0ZW0ubWFwU2luZ2xldG9uKFwibWV0cmljc01vZGVsXCIsTWVkaWFQbGF5ZXIubW9kZWxzLk1ldHJpY3NNb2RlbCksdGhpcy5zeXN0ZW0ubWFwQ2xhc3MoXCJwcm90ZWN0aW9uTW9kZWxcIixNZWRpYVBsYXllci5tb2RlbHMuUHJvdGVjdGlvbk1vZGVsKSx0aGlzLnN5c3RlbS5tYXBTaW5nbGV0b24oXCJ0ZXh0VlRUU291cmNlQnVmZmVyXCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlRleHRWVFRTb3VyY2VCdWZmZXIpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcIm1lZGlhU291cmNlRXh0XCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLk1lZGlhU291cmNlRXh0ZW5zaW9ucyksdGhpcy5zeXN0ZW0ubWFwU2luZ2xldG9uKFwic291cmNlQnVmZmVyRXh0XCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlNvdXJjZUJ1ZmZlckV4dGVuc2lvbnMpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcImJ1ZmZlckV4dFwiLE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJFeHRlbnNpb25zKSx0aGlzLnN5c3RlbS5tYXBTaW5nbGV0b24oXCJhYnJDb250cm9sbGVyXCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkFickNvbnRyb2xsZXIpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcImVyckhhbmRsZXJcIixNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuRXJyb3JIYW5kbGVyKSx0aGlzLnN5c3RlbS5tYXBTaW5nbGV0b24oXCJwcm90ZWN0aW9uRXh0XCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlByb3RlY3Rpb25FeHRlbnNpb25zKSx0aGlzLnN5c3RlbS5tYXBDbGFzcyhcInByb3RlY3Rpb25Db250cm9sbGVyXCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlByb3RlY3Rpb25Db250cm9sbGVyKSx0aGlzLnN5c3RlbS5tYXBDbGFzcyhcIm1ldHJpY3NcIixNZWRpYVBsYXllci5tb2RlbHMuTWV0cmljc0xpc3QpLHRoaXMuc3lzdGVtLm1hcENsYXNzKFwiZG93bmxvYWRSYXRpb1J1bGVcIixNZWRpYVBsYXllci5ydWxlcy5Eb3dubG9hZFJhdGlvUnVsZSksdGhpcy5zeXN0ZW0ubWFwQ2xhc3MoXCJpbnN1ZmZpY2llbnRCdWZmZXJSdWxlXCIsTWVkaWFQbGF5ZXIucnVsZXMuSW5zdWZmaWNpZW50QnVmZmVyUnVsZSksdGhpcy5zeXN0ZW0ubWFwQ2xhc3MoXCJsaW1pdFN3aXRjaGVzUnVsZVwiLE1lZGlhUGxheWVyLnJ1bGVzLkxpbWl0U3dpdGNoZXNSdWxlKSx0aGlzLnN5c3RlbS5tYXBDbGFzcyhcImFiclJ1bGVzQ29sbGVjdGlvblwiLE1lZGlhUGxheWVyLnJ1bGVzLkJhc2VSdWxlc0NvbGxlY3Rpb24pLHRoaXMuc3lzdGVtLm1hcENsYXNzKFwidGV4dENvbnRyb2xsZXJcIixNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuVGV4dENvbnRyb2xsZXIpLHRoaXMuc3lzdGVtLm1hcENsYXNzKFwiYnVmZmVyQ29udHJvbGxlclwiLE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJDb250cm9sbGVyKSx0aGlzLnN5c3RlbS5tYXBDbGFzcyhcIm1hbmlmZXN0TG9hZGVyXCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLk1hbmlmZXN0TG9hZGVyKSx0aGlzLnN5c3RlbS5tYXBDbGFzcyhcIm1hbmlmZXN0VXBkYXRlclwiLE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5NYW5pZmVzdFVwZGF0ZXIpLHRoaXMuc3lzdGVtLm1hcENsYXNzKFwiZnJhZ21lbnRDb250cm9sbGVyXCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkZyYWdtZW50Q29udHJvbGxlciksdGhpcy5zeXN0ZW0ubWFwQ2xhc3MoXCJmcmFnbWVudExvYWRlclwiLE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5GcmFnbWVudExvYWRlciksdGhpcy5zeXN0ZW0ubWFwQ2xhc3MoXCJmcmFnbWVudE1vZGVsXCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkZyYWdtZW50TW9kZWwpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcInN0cmVhbUNvbnRyb2xsZXJcIixNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuU3RyZWFtQ29udHJvbGxlciksdGhpcy5zeXN0ZW0ubWFwQ2xhc3MoXCJzdHJlYW1cIixNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuU3RyZWFtKSx0aGlzLnN5c3RlbS5tYXBDbGFzcyhcInJlcXVlc3RTY2hlZHVsZXJcIixNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuUmVxdWVzdFNjaGVkdWxlciksdGhpcy5zeXN0ZW0ubWFwU2luZ2xldG9uKFwic2NoZWR1bGVyRXh0XCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlNjaGVkdWxlckV4dGVuc2lvbnMpLHRoaXMuc3lzdGVtLm1hcENsYXNzKFwic2NoZWR1bGVyTW9kZWxcIixNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuU2NoZWR1bGVyTW9kZWwpXG59fX0sRGFzaD1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3JldHVybnttb2R1bGVzOnt9LGRlcGVuZGVuY2llczp7fSx2bzp7fSxkaTp7fX19KCksRGFzaC5kaS5EYXNoQ29udGV4dD1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3JldHVybntzeXN0ZW06dm9pZCAwLHNldHVwOmZ1bmN0aW9uKCl7RGFzaC5kaS5EYXNoQ29udGV4dC5wcm90b3R5cGUuc2V0dXAuY2FsbCh0aGlzKSx0aGlzLnN5c3RlbS5tYXBDbGFzcyhcInBhcnNlclwiLERhc2guZGVwZW5kZW5jaWVzLkRhc2hQYXJzZXIpLHRoaXMuc3lzdGVtLm1hcENsYXNzKFwiaW5kZXhIYW5kbGVyXCIsRGFzaC5kZXBlbmRlbmNpZXMuRGFzaEhhbmRsZXIpLHRoaXMuc3lzdGVtLm1hcENsYXNzKFwiYmFzZVVSTEV4dFwiLERhc2guZGVwZW5kZW5jaWVzLkJhc2VVUkxFeHRlbnNpb25zKSx0aGlzLnN5c3RlbS5tYXBDbGFzcyhcImZyYWdtZW50RXh0XCIsRGFzaC5kZXBlbmRlbmNpZXMuRnJhZ21lbnRFeHRlbnNpb25zKSx0aGlzLnN5c3RlbS5tYXBTaW5nbGV0b24oXCJtYW5pZmVzdEV4dFwiLERhc2guZGVwZW5kZW5jaWVzLkRhc2hNYW5pZmVzdEV4dGVuc2lvbnMpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcIm1ldHJpY3NFeHRcIixEYXNoLmRlcGVuZGVuY2llcy5EYXNoTWV0cmljc0V4dGVuc2lvbnMpfX19LERhc2guZGkuRGFzaENvbnRleHQucHJvdG90eXBlPW5ldyBNZWRpYVBsYXllci5kaS5Db250ZXh0LERhc2guZGkuRGFzaENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPURhc2guZGkuRGFzaENvbnRleHQsRGFzaC5kZXBlbmRlbmNpZXMuQmFzZVVSTEV4dGVuc2lvbnM9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYT1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtPW5ldyBEYXRhVmlldyhhKSxuPXt9LG89MDtcInNpZHhcIiE9PWomJm88bS5ieXRlTGVuZ3RoOyl7Zm9yKGs9bS5nZXRVaW50MzIobyksbys9NCxqPVwiXCIsZj0wOzQ+ZjtmKz0xKWw9bS5nZXRJbnQ4KG8pLGorPVN0cmluZy5mcm9tQ2hhckNvZGUobCksbys9MTtcIm1vb2ZcIiE9PWomJlwidHJhZlwiIT09aiYmXCJzaWR4XCIhPT1qP28rPWstODpcInNpZHhcIj09PWomJihvLT04KX1pZihlPW0uZ2V0VWludDMyKG8sITEpK28sZT5hLmJ5dGVMZW5ndGgpdGhyb3dcInNpZHggdGVybWluYXRlcyBhZnRlciBhcnJheSBidWZmZXJcIjtmb3Iobi52ZXJzaW9uPW0uZ2V0VWludDgobys4KSxvKz0xMixuLnRpbWVzY2FsZT1tLmdldFVpbnQzMihvKzQsITEpLG8rPTgsMD09PW4udmVyc2lvbj8obi5lYXJsaWVzdF9wcmVzZW50YXRpb25fdGltZT1tLmdldFVpbnQzMihvLCExKSxuLmZpcnN0X29mZnNldD1tLmdldFVpbnQzMihvKzQsITEpLG8rPTgpOihuLmVhcmxpZXN0X3ByZXNlbnRhdGlvbl90aW1lPXV0aWxzLk1hdGgudG82NEJpdE51bWJlcihtLmdldFVpbnQzMihvKzQsITEpLG0uZ2V0VWludDMyKG8sITEpKSxuLmZpcnN0X29mZnNldD0obS5nZXRVaW50MzIobys4LCExKTw8MzIpK20uZ2V0VWludDMyKG8rMTIsITEpLG8rPTE2KSxuLmZpcnN0X29mZnNldCs9ZSsoYnx8MCksbi5yZWZlcmVuY2VfY291bnQ9bS5nZXRVaW50MTYobysyLCExKSxvKz00LG4ucmVmZXJlbmNlcz1bXSxjPW4uZmlyc3Rfb2Zmc2V0LGQ9bi5lYXJsaWVzdF9wcmVzZW50YXRpb25fdGltZSxmPTA7ZjxuLnJlZmVyZW5jZV9jb3VudDtmKz0xKWg9bS5nZXRVaW50MzIobywhMSksZz1oPj4+MzEsaD0yMTQ3NDgzNjQ3JmgsaT1tLmdldFVpbnQzMihvKzQsITEpLG8rPTEyLG4ucmVmZXJlbmNlcy5wdXNoKHtzaXplOmgsdHlwZTpnLG9mZnNldDpjLGR1cmF0aW9uOmksdGltZTpkLHRpbWVzY2FsZTpuLnRpbWVzY2FsZX0pLGMrPWgsZCs9aTtpZihvIT09ZSl0aHJvd1wiRXJyb3I6IGZpbmFsIHBvcyBcIitvK1wiIGRpZmZlcnMgZnJvbSBTSURYIGVuZCBcIitlO3JldHVybiBufSxiPWZ1bmN0aW9uKGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsO2ZvcihlPWEuY2FsbCh0aGlzLGIsZCksZj1lLnJlZmVyZW5jZXMsZz1bXSxpPTAsaj1mLmxlbmd0aDtqPmk7aSs9MSloPW5ldyBEYXNoLnZvLlNlZ21lbnQsaC5kdXJhdGlvbj1mW2ldLmR1cmF0aW9uLGgubWVkaWE9YyxoLnN0YXJ0VGltZT1mW2ldLnRpbWUsaC50aW1lc2NhbGU9ZltpXS50aW1lc2NhbGUsaz1mW2ldLm9mZnNldCxsPWZbaV0ub2Zmc2V0K2ZbaV0uc2l6ZS0xLGgubWVkaWFSYW5nZT1rK1wiLVwiK2wsZy5wdXNoKGgpO3JldHVybiB0aGlzLmRlYnVnLmxvZyhcIlBhcnNlZCBTSURYIGJveDogXCIrZy5sZW5ndGgrXCIgc2VnbWVudHMuXCIpLFEud2hlbihnKX0sYz1mdW5jdGlvbihhLGIpe3ZhciBkLGUsZixnLGgsaSxqLGs9US5kZWZlcigpLGw9bmV3IERhdGFWaWV3KGEpLG09MCxuPVwiXCIsbz0wLHA9ITEscT10aGlzO2ZvcihxLmRlYnVnLmxvZyhcIlNlYXJjaGluZyBmb3IgaW5pdGlhbGl6YXRpb24uXCIpO1wibW9vdlwiIT09biYmbTxsLmJ5dGVMZW5ndGg7KXtmb3Iobz1sLmdldFVpbnQzMihtKSxtKz00LG49XCJcIixnPTA7ND5nO2crPTEpaD1sLmdldEludDgobSksbis9U3RyaW5nLmZyb21DaGFyQ29kZShoKSxtKz0xO1wibW9vdlwiIT09biYmKG0rPW8tOCl9cmV0dXJuIGY9bC5ieXRlTGVuZ3RoLW0sXCJtb292XCIhPT1uPyhxLmRlYnVnLmxvZyhcIkxvYWRpbmcgbW9yZSBieXRlcyB0byBmaW5kIGluaXRpYWxpemF0aW9uLlwiKSxiLnJhbmdlLnN0YXJ0PTAsYi5yYW5nZS5lbmQ9Yi5ieXRlc0xvYWRlZCtiLmJ5dGVzVG9Mb2FkLGk9bmV3IFhNTEh0dHBSZXF1ZXN0LGkub25sb2FkZW5kPWZ1bmN0aW9uKCl7cHx8ay5yZWplY3QoXCJFcnJvciBsb2FkaW5nIGluaXRpYWxpemF0aW9uLlwiKX0saS5vbmxvYWQ9ZnVuY3Rpb24oKXtwPSEwLGIuYnl0ZXNMb2FkZWQ9Yi5yYW5nZS5lbmQsYy5jYWxsKHEsaS5yZXNwb25zZSkudGhlbihmdW5jdGlvbihhKXtrLnJlc29sdmUoYSl9KX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7ay5yZWplY3QoXCJFcnJvciBsb2FkaW5nIGluaXRpYWxpemF0aW9uLlwiKX0saS5vcGVuKFwiR0VUXCIsYi51cmwpLGkucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIixpLnNldFJlcXVlc3RIZWFkZXIoXCJSYW5nZVwiLFwiYnl0ZXM9XCIrYi5yYW5nZS5zdGFydCtcIi1cIitiLnJhbmdlLmVuZCksaS5zZW5kKG51bGwpKTooZD1tLTgsZT1kK28tMSxqPWQrXCItXCIrZSxxLmRlYnVnLmxvZyhcIkZvdW5kIHRoZSBpbml0aWFsaXphdGlvbi4gIFJhbmdlOiBcIitqKSxrLnJlc29sdmUoaikpLGsucHJvbWlzZX0sZD1mdW5jdGlvbihhKXt2YXIgYj1RLmRlZmVyKCksZD1uZXcgWE1MSHR0cFJlcXVlc3QsZT0hMCxmPXRoaXMsZz17dXJsOmEscmFuZ2U6e30sc2VhcmNoaW5nOiExLGJ5dGVzTG9hZGVkOjAsYnl0ZXNUb0xvYWQ6MTUwMCxyZXF1ZXN0OmR9O3JldHVybiBmLmRlYnVnLmxvZyhcIlN0YXJ0IHNlYXJjaGluZyBmb3IgaW5pdGlhbGl6YXRpb24uXCIpLGcucmFuZ2Uuc3RhcnQ9MCxnLnJhbmdlLmVuZD1nLmJ5dGVzVG9Mb2FkLGQub25sb2FkPWZ1bmN0aW9uKCl7ZC5zdGF0dXM8MjAwfHxkLnN0YXR1cz4yOTl8fChlPSExLGcuYnl0ZXNMb2FkZWQ9Zy5yYW5nZS5lbmQsYy5jYWxsKGYsZC5yZXNwb25zZSxnKS50aGVuKGZ1bmN0aW9uKGEpe2IucmVzb2x2ZShhKX0pKX0sZC5vbmxvYWRlbmQ9ZC5vbmVycm9yPWZ1bmN0aW9uKCl7ZSYmKGU9ITEsZi5lcnJIYW5kbGVyLmRvd25sb2FkRXJyb3IoXCJpbml0aWFsaXphdGlvblwiLGcudXJsLGQpLGIucmVqZWN0KGQpKX0sZC5vcGVuKFwiR0VUXCIsZy51cmwpLGQucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIixkLnNldFJlcXVlc3RIZWFkZXIoXCJSYW5nZVwiLFwiYnl0ZXM9XCIrZy5yYW5nZS5zdGFydCtcIi1cIitnLnJhbmdlLmVuZCksZC5zZW5kKG51bGwpLGYuZGVidWcubG9nKFwiUGVyZm9ybSBpbml0IHNlYXJjaDogXCIrZy51cmwpLGIucHJvbWlzZX0sZT1mdW5jdGlvbihhLGMpe3ZhciBkLGYsZyxoLGksaixrLGwsbT1RLmRlZmVyKCksbj1uZXcgRGF0YVZpZXcoYSksbz1uZXcgWE1MSHR0cFJlcXVlc3QscD0wLHE9XCJcIixyPTAscz0hMCx0PSExLHU9dGhpcztmb3IodS5kZWJ1Zy5sb2coXCJTZWFyY2hpbmcgZm9yIFNJRFggYm94LlwiKSx1LmRlYnVnLmxvZyhjLmJ5dGVzTG9hZGVkK1wiIGJ5dGVzIGxvYWRlZC5cIik7XCJzaWR4XCIhPT1xJiZwPG4uYnl0ZUxlbmd0aDspe2ZvcihyPW4uZ2V0VWludDMyKHApLHArPTQscT1cIlwiLGk9MDs0Pmk7aSs9MSlqPW4uZ2V0SW50OChwKSxxKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGopLHArPTE7XCJzaWR4XCIhPT1xJiYocCs9ci04KX1pZihkPW4uYnl0ZUxlbmd0aC1wLFwic2lkeFwiIT09cSltLnJlamVjdCgpO2Vsc2UgaWYoci04PmQpdS5kZWJ1Zy5sb2coXCJGb3VuZCBTSURYIGJ1dCB3ZSBkb24ndCBoYXZlIGFsbCBvZiBpdC5cIiksYy5yYW5nZS5zdGFydD0wLGMucmFuZ2UuZW5kPWMuYnl0ZXNMb2FkZWQrKHItZCksby5vbmxvYWQ9ZnVuY3Rpb24oKXtvLnN0YXR1czwyMDB8fG8uc3RhdHVzPjI5OXx8KHM9ITEsYy5ieXRlc0xvYWRlZD1jLnJhbmdlLmVuZCxlLmNhbGwodSxvLnJlc3BvbnNlLGMpLnRoZW4oZnVuY3Rpb24oYSl7bS5yZXNvbHZlKGEpfSkpfSxvLm9ubG9hZGVuZD1vLm9uZXJyb3I9ZnVuY3Rpb24oKXtzJiYocz0hMSx1LmVyckhhbmRsZXIuZG93bmxvYWRFcnJvcihcIlNJRFhcIixjLnVybCxvKSxtLnJlamVjdChvKSl9LG8ub3BlbihcIkdFVFwiLGMudXJsKSxvLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCIsby5zZXRSZXF1ZXN0SGVhZGVyKFwiUmFuZ2VcIixcImJ5dGVzPVwiK2MucmFuZ2Uuc3RhcnQrXCItXCIrYy5yYW5nZS5lbmQpLG8uc2VuZChudWxsKTtlbHNlIGlmKGMucmFuZ2Uuc3RhcnQ9cC04LGMucmFuZ2UuZW5kPWMucmFuZ2Uuc3RhcnQrcix1LmRlYnVnLmxvZyhcIkZvdW5kIHRoZSBTSURYIGJveC4gIFN0YXJ0OiBcIitjLnJhbmdlLnN0YXJ0K1wiIHwgRW5kOiBcIitjLnJhbmdlLmVuZCksZj1uZXcgQXJyYXlCdWZmZXIoYy5yYW5nZS5lbmQtYy5yYW5nZS5zdGFydCksaD1uZXcgVWludDhBcnJheShmKSxnPW5ldyBVaW50OEFycmF5KGEsYy5yYW5nZS5zdGFydCxjLnJhbmdlLmVuZC1jLnJhbmdlLnN0YXJ0KSxoLnNldChnKSxrPXRoaXMucGFyc2VTSURYLmNhbGwodGhpcyxmLGMucmFuZ2Uuc3RhcnQpLGw9ay5yZWZlcmVuY2VzLG51bGwhPT1sJiZ2b2lkIDAhPT1sJiZsLmxlbmd0aD4wJiYodD0xPT09bFswXS50eXBlKSx0KXt1LmRlYnVnLmxvZyhcIkluaXRpYXRlIG11bHRpcGxlIFNJRFggbG9hZC5cIik7dmFyIHYsdyx4LHkseixBLEI9W107Zm9yKHY9MCx3PWwubGVuZ3RoO3c+djt2Kz0xKXg9bFt2XS5vZmZzZXQseT1sW3ZdLm9mZnNldCtsW3ZdLnNpemUtMSx6PXgrXCItXCIreSxCLnB1c2godGhpcy5sb2FkU2VnbWVudHMuY2FsbCh1LGMudXJsLHopKTtRLmFsbChCKS50aGVuKGZ1bmN0aW9uKGEpe2ZvcihBPVtdLHY9MCx3PWEubGVuZ3RoO3c+djt2Kz0xKUE9QS5jb25jYXQoYVt2XSk7bS5yZXNvbHZlKEEpfSxmdW5jdGlvbihhKXttLnJlamVjdChhKX0pfWVsc2UgdS5kZWJ1Zy5sb2coXCJQYXJzaW5nIHNlZ21lbnRzIGZyb20gU0lEWC5cIiksYi5jYWxsKHUsZixjLnVybCxjLnJhbmdlLnN0YXJ0KS50aGVuKGZ1bmN0aW9uKGEpe20ucmVzb2x2ZShhKX0pO3JldHVybiBtLnByb21pc2V9LGY9ZnVuY3Rpb24oYSxjKXt2YXIgZCxmPVEuZGVmZXIoKSxnPW5ldyBYTUxIdHRwUmVxdWVzdCxoPSEwLGk9dGhpcyxqPXt1cmw6YSxyYW5nZTp7fSxzZWFyY2hpbmc6ITEsYnl0ZXNMb2FkZWQ6MCxieXRlc1RvTG9hZDoxNTAwLHJlcXVlc3Q6Z307cmV0dXJuIG51bGw9PT1jPyhpLmRlYnVnLmxvZyhcIk5vIGtub3duIHJhbmdlIGZvciBTSURYIHJlcXVlc3QuXCIpLGouc2VhcmNoaW5nPSEwLGoucmFuZ2Uuc3RhcnQ9MCxqLnJhbmdlLmVuZD1qLmJ5dGVzVG9Mb2FkKTooZD1jLnNwbGl0KFwiLVwiKSxqLnJhbmdlLnN0YXJ0PXBhcnNlRmxvYXQoZFswXSksai5yYW5nZS5lbmQ9cGFyc2VGbG9hdChkWzFdKSksZy5vbmxvYWQ9ZnVuY3Rpb24oKXtnLnN0YXR1czwyMDB8fGcuc3RhdHVzPjI5OXx8KGg9ITEsai5zZWFyY2hpbmc/KGouYnl0ZXNMb2FkZWQ9ai5yYW5nZS5lbmQsZS5jYWxsKGksZy5yZXNwb25zZSxqKS50aGVuKGZ1bmN0aW9uKGEpe2YucmVzb2x2ZShhKX0pKTpiLmNhbGwoaSxnLnJlc3BvbnNlLGoudXJsLGoucmFuZ2Uuc3RhcnQpLnRoZW4oZnVuY3Rpb24oYSl7Zi5yZXNvbHZlKGEpfSkpfSxnLm9ubG9hZGVuZD1nLm9uZXJyb3I9ZnVuY3Rpb24oKXtoJiYoaD0hMSxpLmVyckhhbmRsZXIuZG93bmxvYWRFcnJvcihcIlNJRFhcIixqLnVybCxnKSxmLnJlamVjdChnKSl9LGcub3BlbihcIkdFVFwiLGoudXJsKSxnLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCIsZy5zZXRSZXF1ZXN0SGVhZGVyKFwiUmFuZ2VcIixcImJ5dGVzPVwiK2oucmFuZ2Uuc3RhcnQrXCItXCIrai5yYW5nZS5lbmQpLGcuc2VuZChudWxsKSxpLmRlYnVnLmxvZyhcIlBlcmZvcm0gU0lEWCBsb2FkOiBcIitqLnVybCksZi5wcm9taXNlfTtyZXR1cm57ZGVidWc6dm9pZCAwLGVyckhhbmRsZXI6dm9pZCAwLGxvYWRTZWdtZW50czpmLGxvYWRJbml0aWFsaXphdGlvbjpkLHBhcnNlU2VnbWVudHM6YixwYXJzZVNJRFg6YSxmaW5kU0lEWDplfX0sRGFzaC5kZXBlbmRlbmNpZXMuQmFzZVVSTEV4dGVuc2lvbnMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpEYXNoLmRlcGVuZGVuY2llcy5CYXNlVVJMRXh0ZW5zaW9uc30sRGFzaC5kZXBlbmRlbmNpZXMuRGFzaEhhbmRsZXI9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYSxiLGMsZD0tMSxlPWZ1bmN0aW9uKGEsYil7dmFyIGM9bnVsbDtyZXR1cm4gYiYmYi5SZXByZXNlbnRhdGlvbl9hc0FycmF5JiZiLlJlcHJlc2VudGF0aW9uX2FzQXJyYXkubGVuZ3RoPjAmJihjPWIuUmVwcmVzZW50YXRpb25fYXNBcnJheVthXSksY30sZj1mdW5jdGlvbihhLGIpe3ZhciBjPWIudG9TdHJpbmcoKTtyZXR1cm4gYS5zcGxpdChcIiROdW1iZXIkXCIpLmpvaW4oYyl9LGc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLnRvU3RyaW5nKCk7cmV0dXJuIGEuc3BsaXQoXCIkVGltZSRcIikuam9pbihjKX0saD1mdW5jdGlvbihhLGIpe3ZhciBjPWIudG9TdHJpbmcoKTtyZXR1cm4gYS5zcGxpdChcIiRCYW5kd2lkdGgkXCIpLmpvaW4oYyl9LGk9ZnVuY3Rpb24oYSxiKXtpZihudWxsPT09Ynx8LTE9PT1hLmluZGV4T2YoXCIkUmVwcmVzZW50YXRpb25JRCRcIikpcmV0dXJuIGE7dmFyIGM9Yi50b1N0cmluZygpO3JldHVybiBhLnNwbGl0KFwiJFJlcHJlc2VudGF0aW9uSUQkXCIpLmpvaW4oYyl9LGo9ZnVuY3Rpb24oYSxiKXt2YXIgYztyZXR1cm4gYz1hPT09Yj9hOi0xIT09YS5pbmRleE9mKFwiaHR0cDovL1wiKT9hOmIrYX0saz1mdW5jdGlvbihhLGIpe3ZhciBkPVEuZGVmZXIoKSxmPWUoYSxiKSxnPW51bGwsaz1udWxsLGw9bnVsbCxtPW51bGwsbj10aGlzO3JldHVybiBmPyhuLmRlYnVnLmxvZyhcIkdldHRpbmcgdGhlIGluaXRpYWxpemF0aW9uIHJlcXVlc3QuXCIpLGYuaGFzT3duUHJvcGVydHkoXCJTZWdtZW50VGVtcGxhdGVcIik/Zi5TZWdtZW50VGVtcGxhdGUuaGFzT3duUHJvcGVydHkoXCJpbml0aWFsaXphdGlvblwiKSYmKGs9Zi5TZWdtZW50VGVtcGxhdGUuaW5pdGlhbGl6YXRpb24saz1oKGssZi5iYW5kd2lkdGgpLGs9aShrLGYuaWQpKTpmLmhhc093blByb3BlcnR5KFwiU2VnbWVudExpc3RcIikmJmYuU2VnbWVudExpc3QuaGFzT3duUHJvcGVydHkoXCJJbml0aWFsaXphdGlvblwiKSYmZi5TZWdtZW50TGlzdC5Jbml0aWFsaXphdGlvbi5oYXNPd25Qcm9wZXJ0eShcInJhbmdlXCIpPyhrPWYuU2VnbWVudExpc3QuSW5pdGlhbGl6YXRpb24uaGFzT3duUHJvcGVydHkoXCJzb3VyY2VVUkxcIik/Zi5TZWdtZW50TGlzdC5Jbml0aWFsaXphdGlvbi5zb3VyY2VVUkw6Zi5CYXNlVVJMLG09Zi5TZWdtZW50TGlzdC5Jbml0aWFsaXphdGlvbi5yYW5nZSk6Zi5oYXNPd25Qcm9wZXJ0eShcIlNlZ21lbnRMaXN0XCIpJiZmLlNlZ21lbnRMaXN0Lmhhc093blByb3BlcnR5KFwiSW5pdGlhbGl6YXRpb25cIikmJmYuU2VnbWVudExpc3QuSW5pdGlhbGl6YXRpb24uaGFzT3duUHJvcGVydHkoXCJzb3VyY2VVUkxcIik/az1mLlNlZ21lbnRMaXN0LkluaXRpYWxpemF0aW9uLnNvdXJjZVVSTDpmLmhhc093blByb3BlcnR5KFwiU2VnbWVudEJhc2VcIikmJmYuU2VnbWVudEJhc2UuaGFzT3duUHJvcGVydHkoXCJJbml0aWFsaXphdGlvblwiKSYmZi5TZWdtZW50QmFzZS5Jbml0aWFsaXphdGlvbi5oYXNPd25Qcm9wZXJ0eShcInJhbmdlXCIpPyhrPWYuQmFzZVVSTCxtPWYuU2VnbWVudEJhc2UuSW5pdGlhbGl6YXRpb24ucmFuZ2UpOmYuaGFzT3duUHJvcGVydHkoXCJtaW1lVHlwZVwiKSYmbi5tYW5pZmVzdEV4dC5nZXRJc1RleHRUcmFjayhmLm1pbWVUeXBlKT8oaz1mLkJhc2VVUkwsbT0wKToobD1mLkJhc2VVUkwsbi5iYXNlVVJMRXh0LmxvYWRJbml0aWFsaXphdGlvbihsKS50aGVuKGZ1bmN0aW9uKGIpe24uZGVidWcubG9nKFwiR290IGFuIGluaXRpYWxpemF0aW9uLlwiKSxnPW5ldyBNZWRpYVBsYXllci52by5TZWdtZW50UmVxdWVzdCxnLnN0cmVhbVR5cGU9YyxnLnR5cGU9XCJJbml0aWFsaXphdGlvbiBTZWdtZW50XCIsZy51cmw9aihsLGYuQmFzZVVSTCksZy5yYW5nZT1iLGcucXVhbGl0eT1hLGQucmVzb2x2ZShnKX0sZnVuY3Rpb24oYSl7ZC5yZWplY3QoYSl9KSksayYmay5sZW5ndGg+MCYmKG4uZGVidWcubG9nKFwiR290IGFuIGluaXRpYWxpemF0aW9uLlwiKSxnPW5ldyBNZWRpYVBsYXllci52by5TZWdtZW50UmVxdWVzdCxnLnN0cmVhbVR5cGU9YyxnLnR5cGU9XCJJbml0aWFsaXphdGlvbiBTZWdtZW50XCIsZy51cmw9aihrLGYuQmFzZVVSTCksZy5yYW5nZT1tLGcucXVhbGl0eT1hLGQucmVzb2x2ZShnKSksZC5wcm9taXNlKTpRLnJlamVjdChcIm5vIHJlcHJlc2VuYXRpb25cIil9LGw9ZnVuY3Rpb24oYyl7dmFyIGUsZixnLGgsaSxqLGs9ITE7cmV0dXJuIHRoaXMuZGVidWcubG9nKFwiQ2hlY2tpbmcgZm9yIHN0cmVhbSBlbmQuLi5cIiksYT8odGhpcy5kZWJ1Zy5sb2coXCJMaXZlIG5ldmVyIGVuZHMhIChUT0RPKVwiKSxrPSExKTpjLmhhc093blByb3BlcnR5KFwic2VnbWVudHNcIikmJm51bGwhPT1jLnNlZ21lbnRzPyh0aGlzLmRlYnVnLmxvZyhcIlNlZ21lbnRzOiBcIitkK1wiIC8gXCIrYy5zZWdtZW50cy5sZW5ndGgpLGs9ZD49Yy5zZWdtZW50cy5sZW5ndGgpOmMuaGFzT3duUHJvcGVydHkoXCJTZWdtZW50VGVtcGxhdGVcIikmJiFjLlNlZ21lbnRUZW1wbGF0ZS5oYXNPd25Qcm9wZXJ0eShcIlNlZ21lbnRUaW1lbGluZVwiKSYmKGY9MSxpPTEsaD1iLGMuU2VnbWVudFRlbXBsYXRlLmhhc093blByb3BlcnR5KFwiZHVyYXRpb25cIikmJihlPWMuU2VnbWVudFRlbXBsYXRlLmR1cmF0aW9uLGMuU2VnbWVudFRlbXBsYXRlLmhhc093blByb3BlcnR5KFwidGltZXNjYWxlXCIpJiYoZj1jLlNlZ21lbnRUZW1wbGF0ZS50aW1lc2NhbGUpLGMuU2VnbWVudFRlbXBsYXRlLmhhc093blByb3BlcnR5KFwic3RhcnROdW1iZXJcIikmJihpPWMuU2VnbWVudFRlbXBsYXRlLnN0YXJ0TnVtYmVyKSxnPWUvZixqPWQtaSx0aGlzLmRlYnVnLmxvZyhcIlNlZ21lbnRUZW1wbGF0ZTogXCIrZytcIiAqIFwiK2orXCIgPSBcIitnKmorXCIgLyBcIitoKSxrPWcqaj49aCkpLFEud2hlbihrKX0sbT1mdW5jdGlvbihhLGMpe3ZhciBkLGUsaCxpLGosayxsLG0sbj1bXSxvPTAscD0xLHE9MTtmb3IoYS5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0TnVtYmVyXCIpJiYocD1hLnN0YXJ0TnVtYmVyKSxhLmhhc093blByb3BlcnR5KFwidGltZXNjYWxlXCIpJiYocT1hLnRpbWVzY2FsZSksZD1jLlNfYXNBcnJheSxoPTAsaT1kLmxlbmd0aDtpPmg7aCs9MSlmb3IoZT1kW2hdLGs9MCxlLmhhc093blByb3BlcnR5KFwiclwiKSYmKGs9ZS5yKSwwPmsmJihrPShiLW8vcSkvKGUuZC9xKS0xKSxqPTA7az49ajtqKz0xKWw9bmV3IERhc2gudm8uU2VnbWVudCxsLnRpbWVzY2FsZT1xLDA9PT1qJiZlLmhhc093blByb3BlcnR5KFwidFwiKT8obC5zdGFydFRpbWU9ZS50LG89ZS50KTpsLnN0YXJ0VGltZT1vLGwuZHVyYXRpb249ZS5kLG09YS5tZWRpYSxtPWYobSxwKSxtPWcobSxsLnN0YXJ0VGltZSksbC5tZWRpYT1tLG4ucHVzaChsKSxvKz1sLmR1cmF0aW9uLHArPTE7cmV0dXJuIFEud2hlbihuKX0sbj1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGc9W10saD0xO2ZvcihhLmhhc093blByb3BlcnR5KFwic3RhcnROdW1iZXJcIikmJihoPU1hdGgubWF4KGEuc3RhcnROdW1iZXIsMSkpLGY9KGgtMSkqYS5kdXJhdGlvbixiPTAsYz1hLlNlZ21lbnRVUkxfYXNBcnJheS5sZW5ndGg7Yz5iO2IrPTEpZT1hLlNlZ21lbnRVUkxfYXNBcnJheVtiXSxkPW5ldyBEYXNoLnZvLlNlZ21lbnQsZC5tZWRpYT1lLm1lZGlhLGQubWVkaWFSYW5nZT1lLm1lZGlhUmFuZ2UsZC5pbmRleD1lLmluZGV4LGQuaW5kZXhSYW5nZT1lLmluZGV4UmFuZ2UsZC50aW1lc2NhbGU9YS50aW1lc2NhbGUsZC5kdXJhdGlvbj1hLmR1cmF0aW9uLGQuc3RhcnRUaW1lPWYrYiphLmR1cmF0aW9uLGcucHVzaChkKTtyZXR1cm4gUS53aGVuKGcpfSxvPWZ1bmN0aW9uKGEpe3ZhciBiPWEuQmFzZVVSTCxjPW51bGw7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoXCJTZWdtZW50QmFzZVwiKSYmYS5TZWdtZW50QmFzZS5oYXNPd25Qcm9wZXJ0eShcImluZGV4UmFuZ2VcIikmJihjPWEuU2VnbWVudEJhc2UuaW5kZXhSYW5nZSksdGhpcy5iYXNlVVJMRXh0LmxvYWRTZWdtZW50cyhiLGMpfSxwPWZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBiPWEuaGFzT3duUHJvcGVydHkoXCJTZWdtZW50VGVtcGxhdGVcIikmJiFhLlNlZ21lbnRUZW1wbGF0ZS5oYXNPd25Qcm9wZXJ0eShcIlNlZ21lbnRUaW1lbGluZVwiKT9RLndoZW4obnVsbCk6YS5oYXNPd25Qcm9wZXJ0eShcInNlZ21lbnRzXCIpJiZudWxsIT09YS5zZWdtZW50cz9RLndoZW4oYS5zZWdtZW50cyk6YS5oYXNPd25Qcm9wZXJ0eShcIlNlZ21lbnRUZW1wbGF0ZVwiKSYmYS5TZWdtZW50VGVtcGxhdGUuaGFzT3duUHJvcGVydHkoXCJTZWdtZW50VGltZWxpbmVcIik/bS5jYWxsKHRoaXMsYS5TZWdtZW50VGVtcGxhdGUsYS5TZWdtZW50VGVtcGxhdGUuU2VnbWVudFRpbWVsaW5lKTphLmhhc093blByb3BlcnR5KFwiU2VnbWVudExpc3RcIik/bi5jYWxsKHRoaXMsYS5TZWdtZW50TGlzdCk6by5jYWxsKHRoaXMsYSl9LHE9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnPS0xO2lmKGImJmIubGVuZ3RoPjApZm9yKGY9Yi5sZW5ndGgtMTtmPj0wO2YtLSl7aWYoYz1iW2ZdLGQ9Yy5zdGFydFRpbWUvYy50aW1lc2NhbGUsZT1jLmR1cmF0aW9uL2MudGltZXNjYWxlLGErRGFzaC5kZXBlbmRlbmNpZXMuRGFzaEhhbmRsZXIuRVBTSUxPTj49ZCYmYS1EYXNoLmRlcGVuZGVuY2llcy5EYXNoSGFuZGxlci5FUFNJTE9OPD1kK2Upe2c9ZjticmVha30tMT09PWcmJmEtRGFzaC5kZXBlbmRlbmNpZXMuRGFzaEhhbmRsZXIuRVBTSUxPTj5kK2UmJihnPWYrMSl9cmV0dXJuLTE9PT1nJiYoY29uc29sZS5sb2coXCJDb3VsZG4ndCBmaWd1cmUgb3V0IGEgdGltZSFcIiksY29uc29sZS5sb2coXCJUaW1lOiBcIithKSxjb25zb2xlLmxvZyhiKSksUS53aGVuKGcpfSxyPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPS0xLGY9MSxnPTE7aWYoIWIuaGFzT3duUHJvcGVydHkoXCJkdXJhdGlvblwiKSl0aHJvd1wiRXhwZWN0ZWQgJ2R1cmF0aW9uJyBhdHRyaWJ1dGUgb24gU2VnbWVudFRlbXBsYXRlIVwiO3JldHVybiBjPWIuZHVyYXRpb24sYi5oYXNPd25Qcm9wZXJ0eShcInRpbWVzY2FsZVwiKSYmKGY9Yi50aW1lc2NhbGUpLGIuaGFzT3duUHJvcGVydHkoXCJzdGFydE51bWJlclwiKSYmKGc9Yi5zdGFydE51bWJlciksZD1jL2YsZT1NYXRoLmZsb29yKGEvZCksZSs9ZyxRLndoZW4oZSl9LHM9ZnVuY3Rpb24oYSxiLGQsZSl7dmFyIGssbCxtPW5ldyBNZWRpYVBsYXllci52by5TZWdtZW50UmVxdWVzdCxuPTEsbz0xO3JldHVybiBiLmhhc093blByb3BlcnR5KFwidGltZXNjYWxlXCIpJiYobj1iLnRpbWVzY2FsZSksYi5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0TnVtYmVyXCIpJiYobz1iLnN0YXJ0TnVtYmVyKSxsPWIuZHVyYXRpb24qYS9uLGw9TWF0aC5mbG9vcihsKSxrPWIubWVkaWEsaz1mKGssYSksaz1nKGssbCksaz1oKGssZC5iYW5kd2lkdGgpLGs9aShrLGQuaWQpLG0uc3RyZWFtVHlwZT1jLG0udHlwZT1cIk1lZGlhIFNlZ21lbnRcIixtLnVybD1qKGssZC5CYXNlVVJMKSxtLmR1cmF0aW9uPWIuZHVyYXRpb24vbixtLnRpbWVzY2FsZT1uLG0uc3RhcnRUaW1lPShhLW8pKmIuZHVyYXRpb24vbixtLnF1YWxpdHk9ZSxtLmluZGV4PWEsUS53aGVuKG0pfSx0PWZ1bmN0aW9uKGEsYixkLGUpe2lmKG51bGw9PT1ifHx2b2lkIDA9PT1iKXJldHVybiBRLndoZW4obnVsbCk7dmFyIGssbD1uZXcgTWVkaWFQbGF5ZXIudm8uU2VnbWVudFJlcXVlc3Q7cmV0dXJuIGs9aihiLm1lZGlhLGQuQmFzZVVSTCksaz1mKGssYSksaz1nKGssYi5zdGFydFRpbWUpLGs9aChrLGQuYmFuZHdpZHRoKSxrPWkoayxkLmlkKSxsLnN0cmVhbVR5cGU9YyxsLnR5cGU9XCJNZWRpYSBTZWdtZW50XCIsbC51cmw9ayxsLnJhbmdlPWIubWVkaWFSYW5nZSxsLnN0YXJ0VGltZT1iLnN0YXJ0VGltZS9iLnRpbWVzY2FsZSxsLmR1cmF0aW9uPWIuZHVyYXRpb24vYi50aW1lc2NhbGUsbC50aW1lc2NhbGU9Yi50aW1lc2NhbGUsbC5xdWFsaXR5PWUsbC5pbmRleD1hLFEud2hlbihsKX0sdT1mdW5jdGlvbihhLGIsYyl7dmFyIGYsZyxoLGk9ZShiLGMpLGo9ITEsaz10aGlzO3JldHVybiBpPyhrLmRlYnVnLmxvZyhcIkdldHRpbmcgdGhlIHJlcXVlc3QgZm9yIHRpbWU6IFwiK2EpLGY9US5kZWZlcigpLHAuY2FsbChrLGkpLnRoZW4oZnVuY3Rpb24oYil7dmFyIGM7aWYoay5kZWJ1Zy5sb2coXCJHb3Qgc2VnbWVudHMuXCIpLGsuZGVidWcubG9nKGIpLG51bGw9PT1iKXtpZighaS5oYXNPd25Qcm9wZXJ0eShcIlNlZ21lbnRUZW1wbGF0ZVwiKSl0aHJvd1wiRXhwZWN0ZWQgU2VnbWVudFRlbXBsYXRlIVwiO2o9ITAsay5kZWJ1Zy5sb2coXCJObyBzZWdtZW50cyBmb3VuZCwgc28gd2UgbXVzdCBiZSB1c2luZyBhIFNlZ21lbnRUZW1wbGF0ZS5cIiksYz1yLmNhbGwoayxhLGkuU2VnbWVudFRlbXBsYXRlKX1lbHNlIGsuZGVidWcubG9nKFwiR290IGEgbGlzdCBvZiBzZWdtZW50cywgc28gZGlnIGRlZXBlci5cIiksaS5zZWdtZW50cz1iLGo9ITEsYz1xLmNhbGwoayxhLGIpO3JldHVybiBjfSxmdW5jdGlvbigpe2YucmVqZWN0KCl9KS50aGVuKGZ1bmN0aW9uKGIpe3JldHVybiBrLmRlYnVnLmxvZyhcIkluZGV4IGZvciB0aW1lIFwiK2ErXCIgaXMgXCIrYiksZD1iLGwuY2FsbChrLGkpfSkudGhlbihmdW5jdGlvbihhKXt2YXIgYz1udWxsO3JldHVybiBrLmRlYnVnLmxvZyhcIlN0cmVhbSBmaW5pc2hlZD8gXCIrYSksYT8oZz1uZXcgTWVkaWFQbGF5ZXIudm8uU2VnbWVudFJlcXVlc3QsZy5hY3Rpb249Zy5BQ1RJT05fQ09NUExFVEUsZy5pbmRleD1kLGsuZGVidWcubG9nKFwiU2lnbmFsIGNvbXBsZXRlLlwiKSxrLmRlYnVnLmxvZyhnKSxmLnJlc29sdmUoZykpOmo/Yz1zLmNhbGwoayxkLGkuU2VnbWVudFRlbXBsYXRlLGksYik6KGg9aS5zZWdtZW50c1tkXSxjPXQuY2FsbChrLGQsaCxpLGIpKSxjfSkudGhlbihmdW5jdGlvbihhKXtrLmRlYnVnLmxvZyhcIkdvdCBhIHJlcXVlc3QuXCIpLGsuZGVidWcubG9nKGEpLGYucmVzb2x2ZShhKX0pLGYucHJvbWlzZSk6US5yZWplY3QoXCJubyByZXByZXNlbmF0aW9uXCIpfSx2PWZ1bmN0aW9uKGEsYil7dmFyIGMsZixnLGg9ZShhLGIpLGk9dGhpcztpZighaClyZXR1cm4gUS5yZWplY3QoXCJubyByZXByZXNlbmF0aW9uXCIpO2lmKGkuZGVidWcubG9nKFwiR2V0dGluZyB0aGUgbmV4dCByZXF1ZXN0LlwiKSwtMT09PWQpdGhyb3dcIllvdSBtdXN0IGNhbGwgZ2V0U2VnbWVudFJlcXVlc3RGb3JUaW1lIGZpcnN0LlwiO3JldHVybiBkKz0xLGkuZGVidWcubG9nKFwiTmV3IGluZGV4OiBcIitkKSxjPVEuZGVmZXIoKSxsLmNhbGwoaSxoKS50aGVuKGZ1bmN0aW9uKGIpe2kuZGVidWcubG9nKFwiU3RyZWFtIGZpbmlzaGVkPyBcIitiKSxiPyhmPW5ldyBNZWRpYVBsYXllci52by5TZWdtZW50UmVxdWVzdCxmLmFjdGlvbj1mLkFDVElPTl9DT01QTEVURSxmLmluZGV4PWQsaS5kZWJ1Zy5sb2coXCJTaWduYWwgY29tcGxldGUuXCIpLGkuZGVidWcubG9nKGYpLGMucmVzb2x2ZShmKSk6cC5jYWxsKGksaCkudGhlbihmdW5jdGlvbihiKXt2YXIgYztpZihpLmRlYnVnLmxvZyhcIkdvdCBzZWdtZW50cy5cIiksaS5kZWJ1Zy5sb2coYiksbnVsbD09PWIpe2lmKCFoLmhhc093blByb3BlcnR5KFwiU2VnbWVudFRlbXBsYXRlXCIpKXRocm93XCJFeHBlY3RlZCBTZWdtZW50VGVtcGxhdGUhXCI7aS5kZWJ1Zy5sb2coXCJObyBzZWdtZW50cyBmb3VuZCwgc28gd2UgbXVzdCBiZSB1c2luZyBhIFNlZ21lbnRUZW1wbGF0ZS5cIiksYz1zLmNhbGwoaSxkLGguU2VnbWVudFRlbXBsYXRlLGgsYSl9ZWxzZSBoLnNlZ21lbnRzPWIsZz1oLnNlZ21lbnRzW2RdLGM9dC5jYWxsKGksZCxnLGgsYSk7cmV0dXJuIGN9LGZ1bmN0aW9uKCl7Yy5yZWplY3QoKX0pLnRoZW4oZnVuY3Rpb24oYSl7aS5kZWJ1Zy5sb2coXCJHb3QgYSByZXF1ZXN0LlwiKSxpLmRlYnVnLmxvZyhhKSxjLnJlc29sdmUoYSl9KX0pLGMucHJvbWlzZX0sdz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZixnLGgsaT10aGlzLGo9ZShhLGIpLGs9TWF0aC5tYXgoYy1kLDApLGw9US5kZWZlcigpLG09MCxuPTE7cmV0dXJuIGo/KHAuY2FsbChpLGopLnRoZW4oZnVuY3Rpb24oYSl7aWYobnVsbD09PWF8fHZvaWQgMD09PWEpe2lmKCFqLmhhc093blByb3BlcnR5KFwiU2VnbWVudFRlbXBsYXRlXCIpKXRocm93XCJFeHBlY3RlZCBTZWdtZW50VGVtcGxhdGUhXCI7ai5TZWdtZW50VGVtcGxhdGUuaGFzT3duUHJvcGVydHkoXCJ0aW1lc2NhbGVcIikmJihuPWouU2VnbWVudFRlbXBsYXRlLnRpbWVzY2FsZSksaD1qLlNlZ21lbnRUZW1wbGF0ZS5kdXJhdGlvbixmPWgvbn1lbHNlIGc9YVswXSxnLmhhc093blByb3BlcnR5KFwidGltZXNjYWxlXCIpJiYobj1nLnRpbWVzY2FsZSksaD1nLmR1cmF0aW9uLGY9aC9uO209TWF0aC5jZWlsKGsvZiksbC5yZXNvbHZlKG0pfSxmdW5jdGlvbigpe2wucmVzb2x2ZSgwKX0pLGwucHJvbWlzZSk6US5yZWplY3QoXCJubyByZXByZXNlbmF0aW9uXCIpfSx4PWZ1bmN0aW9uKGIsYyl7dmFyIGYsZyxoLGksaj10aGlzLGs9ZShiLGMpLGw9ITEsbT0xLG49MSxvPVEuZGVmZXIoKTtyZXR1cm4gaz8oZz1kLDA+ZyYmKGw9YSxnPTApLHAuY2FsbChqLGspLnRoZW4oZnVuY3Rpb24oYSl7aWYobnVsbD09PWF8fHZvaWQgMD09PWEpe2lmKCFrLmhhc093blByb3BlcnR5KFwiU2VnbWVudFRlbXBsYXRlXCIpKXRocm93XCJFeHBlY3RlZCBTZWdtZW50VGVtcGxhdGUhXCI7aT1rLlNlZ21lbnRUZW1wbGF0ZS5kdXJhdGlvbixrLlNlZ21lbnRUZW1wbGF0ZS5oYXNPd25Qcm9wZXJ0eShcInRpbWVzY2FsZVwiKSYmKG09ay5TZWdtZW50VGVtcGxhdGUudGltZXNjYWxlKSxrLlNlZ21lbnRUZW1wbGF0ZS5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0TnVtYmVyXCIpJiYobj1rLlNlZ21lbnRUZW1wbGF0ZS5zdGFydE51bWJlciksZj1pL20qTWF0aC5tYXgoZy1uLDApfWVsc2UobHx8Zz49YS5sZW5ndGgpJiYoZz1hLmxlbmd0aC0xKSxoPWFbZ10uc3RhcnRUaW1lLGk9YVtnXS5kdXJhdGlvbixhW2ddLmhhc093blByb3BlcnR5KFwidGltZXNjYWxlXCIpJiYobT1hW2ddLnRpbWVzY2FsZSksZj1oL207by5yZXNvbHZlKGYpfSxmdW5jdGlvbigpe28ucmVqZWN0KCl9KSxvLnByb21pc2UpOlEucmVqZWN0KFwibm8gcmVwcmVzZW5hdGlvblwiKX07cmV0dXJue2RlYnVnOnZvaWQgMCxiYXNlVVJMRXh0OnZvaWQgMCxtYW5pZmVzdE1vZGVsOnZvaWQgMCxtYW5pZmVzdEV4dDp2b2lkIDAsZXJySGFuZGxlcjp2b2lkIDAsZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiBjfSxzZXRUeXBlOmZ1bmN0aW9uKGEpe2M9YX0sZ2V0SXNMaXZlOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldElzTGl2ZTpmdW5jdGlvbihiKXthPWJ9LGdldER1cmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGJ9LHNldER1cmF0aW9uOmZ1bmN0aW9uKGEpe2I9YX0sZ2V0SW5pdFJlcXVlc3Q6ayxnZXRTZWdtZW50UmVxdWVzdEZvclRpbWU6dSxnZXROZXh0U2VnbWVudFJlcXVlc3Q6dixnZXRDdXJyZW50VGltZTp4LGdldFNlZ21lbnRDb3VudEZvckR1cmF0aW9uOnd9fSxEYXNoLmRlcGVuZGVuY2llcy5EYXNoSGFuZGxlci5FUFNJTE9OPS4wMDMsRGFzaC5kZXBlbmRlbmNpZXMuRGFzaEhhbmRsZXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpEYXNoLmRlcGVuZGVuY2llcy5EYXNoSGFuZGxlcn0sRGFzaC5kZXBlbmRlbmNpZXMuRGFzaE1hbmlmZXN0RXh0ZW5zaW9ucz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwifSxEYXNoLmRlcGVuZGVuY2llcy5EYXNoTWFuaWZlc3RFeHRlbnNpb25zLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RGFzaC5kZXBlbmRlbmNpZXMuRGFzaE1hbmlmZXN0RXh0ZW5zaW9ucyxnZXRJc0F1ZGlvOmZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO3ZhciBiLGMsZCxlPWEuQ29udGVudENvbXBvbmVudF9hc0FycmF5LGY9ITEsZz0hMTtpZihlKWZvcihiPTAsYz1lLmxlbmd0aDtjPmI7Yis9MSlcImF1ZGlvXCI9PT1lW2JdLmNvbnRlbnRUeXBlJiYoZj0hMCxnPSEwKTtpZihhLmhhc093blByb3BlcnR5KFwibWltZVR5cGVcIikmJihmPS0xIT09YS5taW1lVHlwZS5pbmRleE9mKFwiYXVkaW9cIiksZz0hMCksIWcpZm9yKGI9MCxjPWEuUmVwcmVzZW50YXRpb25fYXNBcnJheS5sZW5ndGg7IWcmJmM+YjspZD1hLlJlcHJlc2VudGF0aW9uX2FzQXJyYXlbYl0sZC5oYXNPd25Qcm9wZXJ0eShcIm1pbWVUeXBlXCIpJiYoZj0tMSE9PWQubWltZVR5cGUuaW5kZXhPZihcImF1ZGlvXCIpLGc9ITApLGIrPTE7cmV0dXJuIGYmJihhLnR5cGU9XCJhdWRpb1wiKSxRLndoZW4oZil9LGdldElzVmlkZW86ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGIsYyxkLGU9YS5Db250ZW50Q29tcG9uZW50X2FzQXJyYXksZj0hMSxnPSExO2lmKGUpZm9yKGI9MCxjPWUubGVuZ3RoO2M+YjtiKz0xKVwidmlkZW9cIj09PWVbYl0uY29udGVudFR5cGUmJihmPSEwLGc9ITApO2lmKGEuaGFzT3duUHJvcGVydHkoXCJtaW1lVHlwZVwiKSYmKGY9LTEhPT1hLm1pbWVUeXBlLmluZGV4T2YoXCJ2aWRlb1wiKSxnPSEwKSwhZylmb3IoYj0wLGM9YS5SZXByZXNlbnRhdGlvbl9hc0FycmF5Lmxlbmd0aDshZyYmYz5iOylkPWEuUmVwcmVzZW50YXRpb25fYXNBcnJheVtiXSxkLmhhc093blByb3BlcnR5KFwibWltZVR5cGVcIikmJihmPS0xIT09ZC5taW1lVHlwZS5pbmRleE9mKFwidmlkZW9cIiksZz0hMCksYis9MTtyZXR1cm4gZiYmKGEudHlwZT1cInZpZGVvXCIpLFEud2hlbihmKX0sZ2V0SXNUZXh0OmZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO3ZhciBiLGMsZCxlPWEuQ29udGVudENvbXBvbmVudF9hc0FycmF5LGY9ITEsZz0hMTtpZihlKWZvcihiPTAsYz1lLmxlbmd0aDtjPmI7Yis9MSlcInRleHRcIj09PWVbYl0uY29udGVudFR5cGUmJihmPSEwLGc9ITApO2lmKGEuaGFzT3duUHJvcGVydHkoXCJtaW1lVHlwZVwiKSYmKGY9LTEhPT1hLm1pbWVUeXBlLmluZGV4T2YoXCJ0ZXh0XCIpLGc9ITApLCFnKWZvcihiPTAsYz1hLlJlcHJlc2VudGF0aW9uX2FzQXJyYXkubGVuZ3RoOyFnJiZjPmI7KWQ9YS5SZXByZXNlbnRhdGlvbl9hc0FycmF5W2JdLGQuaGFzT3duUHJvcGVydHkoXCJtaW1lVHlwZVwiKSYmKGY9LTEhPT1kLm1pbWVUeXBlLmluZGV4T2YoXCJ0ZXh0XCIpLGc9ITApLGIrPTE7cmV0dXJuIFEud2hlbihmKX0sZ2V0SXNUZXh0VHJhY2s6ZnVuY3Rpb24oYSl7cmV0dXJuXCJ0ZXh0L3Z0dFwiPT09YXx8XCJhcHBsaWNhdGlvbi90dG1sK3htbFwiPT09YX0sZ2V0SXNNYWluOmZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIFEud2hlbighMSl9LHByb2Nlc3NBZGFwdGF0aW9uOmZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO3JldHVybiB2b2lkIDAhPT1hLlJlcHJlc2VudGF0aW9uX2FzQXJyYXkmJm51bGwhPT1hLlJlcHJlc2VudGF0aW9uX2FzQXJyYXkmJmEuUmVwcmVzZW50YXRpb25fYXNBcnJheS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuYmFuZHdpZHRoLWIuYmFuZHdpZHRofSksYX0sZ2V0RGF0YUZvcklkOmZ1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZCxlLGY9Yi5QZXJpb2RfYXNBcnJheVtjXS5BZGFwdGF0aW9uU2V0X2FzQXJyYXk7Zm9yKGQ9MCxlPWYubGVuZ3RoO2U+ZDtkKz0xKWlmKGZbZF0uaGFzT3duUHJvcGVydHkoXCJpZFwiKSYmZltkXS5pZD09PWEpcmV0dXJuIFEud2hlbihmW2RdKTtyZXR1cm4gUS53aGVuKG51bGwpfSxnZXREYXRhRm9ySW5kZXg6ZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWIuUGVyaW9kX2FzQXJyYXlbY10uQWRhcHRhdGlvblNldF9hc0FycmF5O3JldHVybiBRLndoZW4oZFthXSl9LGdldERhdGFJbmRleDpmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQsZSxmPWIuUGVyaW9kX2FzQXJyYXlbY10uQWRhcHRhdGlvblNldF9hc0FycmF5O2ZvcihkPTAsZT1mLmxlbmd0aDtlPmQ7ZCs9MSlpZihmW2RdPT09YSlyZXR1cm4gUS53aGVuKGQpO3JldHVybiBRLndoZW4oLTEpfSxnZXRWaWRlb0RhdGE6ZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjt2YXIgYyxkLGU9dGhpcyxmPWEuUGVyaW9kX2FzQXJyYXlbYl0uQWRhcHRhdGlvblNldF9hc0FycmF5LGc9US5kZWZlcigpLGg9W107Zm9yKGM9MCxkPWYubGVuZ3RoO2Q+YztjKz0xKWgucHVzaCh0aGlzLmdldElzVmlkZW8oZltjXSkpO3JldHVybiBRLmFsbChoKS50aGVuKGZ1bmN0aW9uKGEpe3ZhciBiPSExO2ZvcihjPTAsZD1hLmxlbmd0aDtkPmM7Yys9MSlhW2NdPT09ITAmJihiPSEwLGcucmVzb2x2ZShlLnByb2Nlc3NBZGFwdGF0aW9uKGZbY10pKSk7Ynx8Zy5yZXNvbHZlKG51bGwpfSksZy5wcm9taXNlfSxnZXRUZXh0RGF0YTpmdW5jdGlvbihhLGIpe1widXNlIHN0cmljdFwiO3ZhciBjLGQsZT10aGlzLGY9YS5QZXJpb2RfYXNBcnJheVtiXS5BZGFwdGF0aW9uU2V0X2FzQXJyYXksZz1RLmRlZmVyKCksaD1bXTtmb3IoYz0wLGQ9Zi5sZW5ndGg7ZD5jO2MrPTEpaC5wdXNoKHRoaXMuZ2V0SXNUZXh0KGZbY10pKTtyZXR1cm4gUS5hbGwoaCkudGhlbihmdW5jdGlvbihhKXt2YXIgYj0hMTtmb3IoYz0wLGQ9YS5sZW5ndGg7ZD5jO2MrPTEpYVtjXT09PSEwJiYoYj0hMCxnLnJlc29sdmUoZS5wcm9jZXNzQWRhcHRhdGlvbihmW2NdKSkpO2J8fGcucmVzb2x2ZShudWxsKX0pLGcucHJvbWlzZX0sZ2V0QXVkaW9EYXRhczpmdW5jdGlvbihhLGIpe1widXNlIHN0cmljdFwiO3ZhciBjLGQsZT10aGlzLGY9YS5QZXJpb2RfYXNBcnJheVtiXS5BZGFwdGF0aW9uU2V0X2FzQXJyYXksZz1RLmRlZmVyKCksaD1bXTtmb3IoYz0wLGQ9Zi5sZW5ndGg7ZD5jO2MrPTEpaC5wdXNoKHRoaXMuZ2V0SXNBdWRpbyhmW2NdKSk7cmV0dXJuIFEuYWxsKGgpLnRoZW4oZnVuY3Rpb24oYSl7dmFyIGI9W107Zm9yKGM9MCxkPWEubGVuZ3RoO2Q+YztjKz0xKWFbY109PT0hMCYmYi5wdXNoKGUucHJvY2Vzc0FkYXB0YXRpb24oZltjXSkpO2cucmVzb2x2ZShiKX0pLGcucHJvbWlzZX0sZ2V0UHJpbWFyeUF1ZGlvRGF0YTpmdW5jdGlvbihhLGIpe1widXNlIHN0cmljdFwiO3ZhciBjLGQsZT1RLmRlZmVyKCksZj1bXSxnPXRoaXM7cmV0dXJuIHRoaXMuZ2V0QXVkaW9EYXRhcyhhLGIpLnRoZW4oZnVuY3Rpb24oYSl7Zm9yKGEmJjAhPT1hLmxlbmd0aHx8ZS5yZXNvbHZlKG51bGwpLGM9MCxkPWEubGVuZ3RoO2Q+YztjKz0xKWYucHVzaChnLmdldElzTWFpbihhW2NdKSk7US5hbGwoZikudGhlbihmdW5jdGlvbihiKXt2YXIgZj0hMTtmb3IoYz0wLGQ9Yi5sZW5ndGg7ZD5jO2MrPTEpYltjXT09PSEwJiYoZj0hMCxlLnJlc29sdmUoZy5wcm9jZXNzQWRhcHRhdGlvbihhW2NdKSkpO2Z8fGUucmVzb2x2ZShhWzBdKX0pfSksZS5wcm9taXNlfSxnZXRDb2RlYzpmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjt2YXIgYj1hLlJlcHJlc2VudGF0aW9uX2FzQXJyYXlbMF0sYz1iLm1pbWVUeXBlKyc7Y29kZWNzPVwiJytiLmNvZGVjcysnXCInO3JldHVybiBRLndoZW4oYyl9LGdldE1pbWVUeXBlOmZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO3JldHVybiBRLndoZW4oYS5SZXByZXNlbnRhdGlvbl9hc0FycmF5WzBdLm1pbWVUeXBlKX0sZ2V0S0lEOmZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO3JldHVybiBhJiZhLmhhc093blByb3BlcnR5KFwiY2VuYzpkZWZhdWx0X0tJRFwiKT9hW1wiY2VuYzpkZWZhdWx0X0tJRFwiXTpudWxsfSxnZXRDb250ZW50UHJvdGVjdGlvbkRhdGE6ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGEmJmEuaGFzT3duUHJvcGVydHkoXCJDb250ZW50UHJvdGVjdGlvbl9hc0FycmF5XCIpJiYwIT09YS5Db250ZW50UHJvdGVjdGlvbl9hc0FycmF5Lmxlbmd0aD9RLndoZW4oYS5Db250ZW50UHJvdGVjdGlvbl9hc0FycmF5KTpRLndoZW4obnVsbCl9LGdldFNlZ21lbnRJbmZvRm9yOmZ1bmN0aW9uKGEpe3JldHVybiBhLmhhc093blByb3BlcnR5KFwiU2VnbWVudEJhc2VcIik/YS5TZWdtZW50QmFzZTphLmhhc093blByb3BlcnR5KFwiU2VnbWVudExpc3RcIik/YS5TZWdtZW50TGlzdDphLmhhc093blByb3BlcnR5KFwiU2VnbWVudFRlbXBsYXRlXCIpP2EuU2VnbWVudFRlbXBsYXRlOm51bGx9LGdldExpdmVPZmZzZXQ6ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGI9MTU7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoXCJzdWdnZXN0ZWRQcmVzZW50YXRpb25EZWxheVwiKSYmKGI9YS5zdWdnZXN0ZWRQcmVzZW50YXRpb25EZWxheSksUS53aGVuKGIpfSxnZXRMaXZlU3RhcnQ6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxmPTEsZz0xLGg9bnVsbCxpPW51bGw7cmV0dXJuIGQ9YS5QZXJpb2RfYXNBcnJheVtiXS5BZGFwdGF0aW9uU2V0X2FzQXJyYXlbMV0uUmVwcmVzZW50YXRpb25fYXNBcnJheVswXSxkLmhhc093blByb3BlcnR5KFwiU2VnbWVudExpc3RcIik/KGg9ZC5TZWdtZW50TGlzdCxoLmhhc093blByb3BlcnR5KFwic3RhcnROdW1iZXJcIikmJihmPU1hdGgubWF4KGguc3RhcnROdW1iZXIsMSkpLGguaGFzT3duUHJvcGVydHkoXCJ0aW1lc2NhbGVcIikmJihnPWgudGltZXNjYWxlKSxjPWguZHVyYXRpb24sZT0oZi0xKSpjL2cpOmQuaGFzT3duUHJvcGVydHkoXCJTZWdtZW50VGVtcGxhdGVcIikmJihpPWQuU2VnbWVudFRlbXBsYXRlLGkuaGFzT3duUHJvcGVydHkoXCJzdGFydE51bWJlclwiKSYmKGY9TWF0aC5tYXgoaS5zdGFydE51bWJlciwxKSksaS5oYXNPd25Qcm9wZXJ0eShcInRpbWVzY2FsZVwiKSYmKGc9aS50aW1lc2NhbGUpLGM9aS5kdXJhdGlvbixlPWkuaGFzT3duUHJvcGVydHkoXCJTZWdtZW50VGltZWxpbmVcIik/aS5TZWdtZW50VGltZWxpbmUuU19hc0FycmF5WzBdLnQvZzooZi0xKSpjL2cpLFEud2hlbihlKX0sZ2V0TGl2ZUVkZ2U6ZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjt2YXIgYyxkPXRoaXMsZT1RLmRlZmVyKCksZj0wLGc9bmV3IERhdGUsaD1hLmF2YWlsYWJpbGl0eVN0YXJ0VGltZTtyZXR1cm4gZC5nZXRMaXZlT2Zmc2V0KGEpLnRoZW4oZnVuY3Rpb24oaSl7YS5oYXNPd25Qcm9wZXJ0eShcImF2YWlsYWJpbGl0eUVuZFRpbWVcIik/KGM9YS5hdmFpbGFiaWxpdHlFbmRUaW1lLGY9KGMuZ2V0VGltZSgpLWguZ2V0VGltZSgpKS8xZTMpOmY9KGcuZ2V0VGltZSgpLWguZ2V0VGltZSgpKS8xZTMsZC5nZXRMaXZlU3RhcnQoYSxiKS50aGVuKGZ1bmN0aW9uKGEpe2YrPWEsZi09aSxlLnJlc29sdmUoZil9KX0pLGUucHJvbWlzZX0sZ2V0UHJlc2VudGF0aW9uT2Zmc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPXRoaXMsZj1RLmRlZmVyKCksZz0wLGg9MTtyZXR1cm4gZS5nZXRSZXByZXNlbnRhdGlvbkZvcihhLGIpLnRoZW4oZnVuY3Rpb24oYSl7ZD1lLmdldFNlZ21lbnRJbmZvRm9yKGEpLG51bGwhPT1kJiZ2b2lkIDAhPT1kJiZkLmhhc093blByb3BlcnR5KFwicHJlc2VudGF0aW9uVGltZU9mZnNldFwiKSYmKGM9ZC5wcmVzZW50YXRpb25UaW1lT2Zmc2V0LGQuaGFzT3duUHJvcGVydHkoXCJ0aW1lc2NhbGVcIikmJihoPWQudGltZXNjYWxlKSxnPWMvaCksZi5yZXNvbHZlKGcpfSksZi5wcm9taXNlfSxnZXRJc0xpdmU6ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGI9ITEsYz1cImR5bmFtaWNcIjtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShcInR5cGVcIikmJihiPWEudHlwZT09PWMpLGJ9LGdldElzRFZSOmZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGMsZDtyZXR1cm4gYz0haXNOYU4oYS50aW1lU2hpZnRCdWZmZXJEZXB0aCksZD1iJiZjLFEud2hlbihkKX0sZ2V0SXNPbkRlbWFuZDpmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjt2YXIgYj0hMTtyZXR1cm4gYS5wcm9maWxlcyYmYS5wcm9maWxlcy5sZW5ndGg+MCYmKGI9LTEhPT1hLnByb2ZpbGVzLmluZGV4T2YoXCJ1cm46bXBlZzpkYXNoOnByb2ZpbGU6aXNvZmYtb24tZGVtYW5kOjIwMTFcIikpLFEud2hlbihiKX0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjt2YXIgYz0wLzA7cmV0dXJuIGI/Yz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk6YS5tZWRpYVByZXNlbnRhdGlvbkR1cmF0aW9uP2M9YS5tZWRpYVByZXNlbnRhdGlvbkR1cmF0aW9uOmEuYXZhaWxhYmlsaXR5RW5kVGltZSYmYS5hdmFpbGFiaWxpdHlTdGFydFRpbWUmJihjPWEuYXZhaWxhYmlsaXR5RW5kVGltZS5nZXRUaW1lKCktYS5hdmFpbGFiaWxpdHlTdGFydFRpbWUuZ2V0VGltZSgpKSxRLndoZW4oYyl9LGdldER1cmF0aW9uRm9yUGVyaW9kOmZ1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD0wLzA7cmV0dXJuIGM/ZD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk6Yi5QZXJpb2RfYXNBcnJheS5sZW5ndGg+MSYmdm9pZCAwIT09Yi5QZXJpb2RfYXNBcnJheVthXS5kdXJhdGlvbj9kPWIuUGVyaW9kX2FzQXJyYXlbYV0uZHVyYXRpb246Yi5tZWRpYVByZXNlbnRhdGlvbkR1cmF0aW9uP2Q9Yi5tZWRpYVByZXNlbnRhdGlvbkR1cmF0aW9uOmIuYXZhaWxhYmlsaXR5RW5kVGltZSYmYi5hdmFpbGFiaWxpdHlTdGFydFRpbWUmJihkPWIuYXZhaWxhYmlsaXR5RW5kVGltZS5nZXRUaW1lKCktYi5hdmFpbGFiaWxpdHlTdGFydFRpbWUuZ2V0VGltZSgpKSxRLndoZW4oZCl9LGdldEJhbmR3aWR0aDpmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtyZXR1cm4gUS53aGVuKGEuYmFuZHdpZHRoKX0sZ2V0UmVmcmVzaERlbGF5OmZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO3ZhciBiPTAvMDtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShcIm1pbmltdW1VcGRhdGVQZXJpb2RcIikmJihiPXBhcnNlRmxvYXQoYS5taW5pbXVtVXBkYXRlUGVyaW9kKSksUS53aGVuKGIpfSxnZXRSZXByZXNlbnRhdGlvbkNvdW50OmZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO3JldHVybiBRLndoZW4oYS5SZXByZXNlbnRhdGlvbl9hc0FycmF5Lmxlbmd0aCl9LGdldFJlcHJlc2VudGF0aW9uRm9yOmZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIFEud2hlbihiLlJlcHJlc2VudGF0aW9uX2FzQXJyYXlbYV0pfSxnZXRQZXJpb2RDb3VudDpmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtyZXR1cm4gUS53aGVuKGEuUGVyaW9kX2FzQXJyYXkubGVuZ3RoKX0sZ2V0VGltZXN0YW1wT2Zmc2V0Rm9yUGVyaW9kOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGY9dGhpcyxnPVEuZGVmZXIoKTtyZXR1cm4gZi5nZXRQcmVzZW50YXRpb25PZmZzZXQoYyxkKS50aGVuKGZ1bmN0aW9uKGMpe2YuZ2V0UGVyaW9kU3RhcnQoYixhKS50aGVuKGZ1bmN0aW9uKGEpe2U9YS1jLGcucmVzb2x2ZShlKX0pfSksZy5wcm9taXNlfSxnZXRQZXJpb2RTdGFydDpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT10aGlzLGY9ZS5nZXRJc0xpdmUoYSksZz1udWxsLGg9bnVsbCxpPW51bGw7Zm9yKGM9MDtiPj1jO2MrPTEpZz1hLlBlcmlvZF9hc0FycmF5W2NdLGcuaGFzT3duUHJvcGVydHkoXCJzdGFydFwiKT9kPWcuc3RhcnQ6bnVsbCE9PWgmJm51bGwhPT1pP2Q9aCtpOjAhPT1jfHxmfHwoZD0wKSxnLmhhc093blByb3BlcnR5KFwiZHVyYXRpb25cIikmJihpPWcuZHVyYXRpb24pLGg9ZDtyZXR1cm4gUS53aGVuKGQpfX0sRGFzaC5kZXBlbmRlbmNpZXMuRGFzaE1ldHJpY3NFeHRlbnNpb25zPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2ZvcihoPTA7aDxhLmxlbmd0aDtoKz0xKWZvcihjPWFbaF0sZT1jLkFkYXB0YXRpb25TZXRfYXNBcnJheSxpPTA7aTxlLmxlbmd0aDtpKz0xKWZvcihkPWVbaV0sZz1kLlJlcHJlc2VudGF0aW9uX2FzQXJyYXksaj0wO2o8Zy5sZW5ndGg7ais9MSlpZihmPWdbal0sYj09PWYuaWQpcmV0dXJuIGo7cmV0dXJuLTF9LGI9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2ZvcihoPTA7aDxhLmxlbmd0aDtoKz0xKWZvcihjPWFbaF0sZT1jLkFkYXB0YXRpb25TZXRfYXNBcnJheSxpPTA7aTxlLmxlbmd0aDtpKz0xKWZvcihkPWVbaV0sZz1kLlJlcHJlc2VudGF0aW9uX2FzQXJyYXksaj0wO2o8Zy5sZW5ndGg7ais9MSlpZihmPWdbal0sYj09PWYuaWQpcmV0dXJuIGY7cmV0dXJuIG51bGx9LGM9ZnVuY3Rpb24oYSxiKXt2YXIgYz0hMTtyZXR1cm5cInZpZGVvXCI9PT1iPyh0aGlzLm1hbmlmZXN0RXh0LmdldElzVmlkZW8oYSksXCJ2aWRlb1wiPT09YS50eXBlJiYoYz0hMCkpOlwiYXVkaW9cIj09PWI/KHRoaXMubWFuaWZlc3RFeHQuZ2V0SXNBdWRpbyhhKSxcImF1ZGlvXCI9PT1hLnR5cGUmJihjPSEwKSk6Yz0hMSxjfSxkPWZ1bmN0aW9uKGEsYil7dmFyIGQsZSxmLGcsaCxpO2ZvcihoPTA7aDxhLmxlbmd0aDtoKz0xKWZvcihkPWFbaF0sZj1kLkFkYXB0YXRpb25TZXRfYXNBcnJheSxpPTA7aTxmLmxlbmd0aDtpKz0xKWlmKGU9ZltpXSxnPWUuUmVwcmVzZW50YXRpb25fYXNBcnJheSxjLmNhbGwodGhpcyxlLGIpKXJldHVybiBnLmxlbmd0aDtyZXR1cm4tMX0sZT1mdW5jdGlvbihhKXt2YXIgYyxkPXRoaXMsZT1kLm1hbmlmZXN0TW9kZWwuZ2V0VmFsdWUoKSxmPWUuUGVyaW9kX2FzQXJyYXk7cmV0dXJuIGM9Yi5jYWxsKGQsZixhKSxudWxsPT09Yz9udWxsOmMuYmFuZHdpZHRofSxmPWZ1bmN0aW9uKGIpe3ZhciBjLGQ9dGhpcyxlPWQubWFuaWZlc3RNb2RlbC5nZXRWYWx1ZSgpLGY9ZS5QZXJpb2RfYXNBcnJheTtyZXR1cm4gYz1hLmNhbGwoZCxmLGIpfSxnPWZ1bmN0aW9uKGEpe3ZhciBiLGM9dGhpcyxlPWMubWFuaWZlc3RNb2RlbC5nZXRWYWx1ZSgpLGY9ZS5QZXJpb2RfYXNBcnJheTtyZXR1cm4gYj1kLmNhbGwodGhpcyxmLGEpfSxoPWZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hKXJldHVybiBudWxsO3ZhciBiLGMsZCxlPWEuUmVwU3dpdGNoTGlzdDtyZXR1cm4gbnVsbD09PWV8fGUubGVuZ3RoPD0wP251bGw6KGI9ZS5sZW5ndGgsYz1iLTEsZD1lW2NdKX0saT1mdW5jdGlvbihhKXtpZihudWxsPT09YSlyZXR1cm4gbnVsbDt2YXIgYixjLGQsZT1hLkJ1ZmZlckxldmVsO3JldHVybiBudWxsPT09ZXx8ZS5sZW5ndGg8PTA/bnVsbDooYj1lLmxlbmd0aCxjPWItMSxkPWVbY10pfSxqPWZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hKXJldHVybiBudWxsO3ZhciBiLGMsZCxlPWEuSHR0cExpc3Q7cmV0dXJuIG51bGw9PT1lfHxlLmxlbmd0aDw9MD9udWxsOihiPWUubGVuZ3RoLGM9Yi0xLGQ9ZVtjXSl9LGs9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7dmFyIGIsYyxkLGU9YS5Ecm9wcGVkRnJhbWVzO3JldHVybiBudWxsPT09ZXx8ZS5sZW5ndGg8PTA/bnVsbDooYj1lLmxlbmd0aCxjPWItMSxkPWVbY10pfTtyZXR1cm57bWFuaWZlc3RNb2RlbDp2b2lkIDAsbWFuaWZlc3RFeHQ6dm9pZCAwLGdldEJhbmR3aWR0aEZvclJlcHJlc2VudGF0aW9uOmUsZ2V0SW5kZXhGb3JSZXByZXNlbnRhdGlvbjpmLGdldE1heEluZGV4Rm9yQnVmZmVyVHlwZTpnLGdldEN1cnJlbnRSZXByZXNlbnRhdGlvblN3aXRjaDpoLGdldEN1cnJlbnRCdWZmZXJMZXZlbDppLGdldEN1cnJlbnRIdHRwUmVxdWVzdDpqLGdldEN1cnJlbnREcm9wcGVkRnJhbWVzOmt9fSxEYXNoLmRlcGVuZGVuY2llcy5EYXNoTWV0cmljc0V4dGVuc2lvbnMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpEYXNoLmRlcGVuZGVuY2llcy5EYXNoTWV0cmljc0V4dGVuc2lvbnN9LERhc2guZGVwZW5kZW5jaWVzLkRhc2hQYXJzZXI9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYT0zMTUzNmUzLGI9MjU5MmUzLGM9ODY0MDAsZD0zNjAwLGU9NjAsZj0vXlAoKFtcXGQuXSopWSk/KChbXFxkLl0qKU0pPygoW1xcZC5dKilEKT9UKChbXFxkLl0qKUgpPygoW1xcZC5dKilNKT8oKFtcXGQuXSopUyk/LyxnPS9eKFxcZHs0fVxcLVxcZFxcZFxcLVxcZFxcZChbdFRdW1xcZDpcXC5dKik/KShbelpdfChbK1xcLV0pKFxcZFxcZCk6KFxcZFxcZCkpPyQvLGg9L15bLStdP1swLTldK1suXT9bMC05XSooW2VFXVstK10/WzAtOV0rKT8kLyxpPVt7dHlwZTpcImR1cmF0aW9uXCIsdGVzdDpmdW5jdGlvbihhKXtyZXR1cm4gZi50ZXN0KGEpfSxjb252ZXJ0ZXI6ZnVuY3Rpb24oZyl7dmFyIGg9Zi5leGVjKGcpO3JldHVybiBwYXJzZUZsb2F0KGhbMl18fDApKmErcGFyc2VGbG9hdChoWzRdfHwwKSpiK3BhcnNlRmxvYXQoaFs2XXx8MCkqYytwYXJzZUZsb2F0KGhbOF18fDApKmQrcGFyc2VGbG9hdChoWzEwXXx8MCkqZStwYXJzZUZsb2F0KGhbMTJdfHwwKX19LHt0eXBlOlwiZGF0ZXRpbWVcIix0ZXN0OmZ1bmN0aW9uKGEpe3JldHVybiBnLnRlc3QoYSl9LGNvbnZlcnRlcjpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IERhdGUoYSl9fSx7dHlwZTpcIm51bWVyaWNcIix0ZXN0OmZ1bmN0aW9uKGEpe3JldHVybiBoLnRlc3QoYSl9LGNvbnZlcnRlcjpmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VGbG9hdChhKX19XSxqPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQ7cmV0dXJuIGQ9W3tuYW1lOlwicHJvZmlsZXNcIixtZXJnZTohMX0se25hbWU6XCJ3aWR0aFwiLG1lcmdlOiExfSx7bmFtZTpcImhlaWdodFwiLG1lcmdlOiExfSx7bmFtZTpcInNhclwiLG1lcmdlOiExfSx7bmFtZTpcImZyYW1lUmF0ZVwiLG1lcmdlOiExfSx7bmFtZTpcImF1ZGlvU2FtcGxpbmdSYXRlXCIsbWVyZ2U6ITF9LHtuYW1lOlwibWltZVR5cGVcIixtZXJnZTohMX0se25hbWU6XCJzZWdtZW50UHJvZmlsZXNcIixtZXJnZTohMX0se25hbWU6XCJjb2RlY3NcIixtZXJnZTohMX0se25hbWU6XCJtYXhpbXVtU0FQUGVyaW9kXCIsbWVyZ2U6ITF9LHtuYW1lOlwic3RhcnRzV2l0aFNhcFwiLG1lcmdlOiExfSx7bmFtZTpcIm1heFBsYXlvdXRSYXRlXCIsbWVyZ2U6ITF9LHtuYW1lOlwiY29kaW5nRGVwZW5kZW5jeVwiLG1lcmdlOiExfSx7bmFtZTpcInNjYW5UeXBlXCIsbWVyZ2U6ITF9LHtuYW1lOlwiRnJhbWVQYWNraW5nXCIsbWVyZ2U6ITB9LHtuYW1lOlwiQXVkaW9DaGFubmVsQ29uZmlndXJhdGlvblwiLG1lcmdlOiEwfSx7bmFtZTpcIkNvbnRlbnRQcm90ZWN0aW9uXCIsbWVyZ2U6ITB9XSxhPXt9LGEubmFtZT1cIkFkYXB0YXRpb25TZXRcIixhLmlzUm9vdD0hMSxhLmlzQXJyYXk9ITAsYS5wYXJlbnQ9bnVsbCxhLmNoaWxkcmVuPVtdLGEucHJvcGVydGllcz1kLGI9e30sYi5uYW1lPVwiUmVwcmVzZW50YXRpb25cIixiLmlzUm9vdD0hMSxiLmlzQXJyYXk9ITAsYi5wYXJlbnQ9YSxiLmNoaWxkcmVuPVtdLGIucHJvcGVydGllcz1kLGEuY2hpbGRyZW4ucHVzaChiKSxjPXt9LGMubmFtZT1cIlN1YlJlcHJlc2VudGF0aW9uXCIsYy5pc1Jvb3Q9ITEsYy5pc0FycmF5PSEwLGMucGFyZW50PWIsYy5jaGlsZHJlbj1bXSxjLnByb3BlcnRpZXM9ZCxiLmNoaWxkcmVuLnB1c2goYyksYX0saz1mdW5jdGlvbigpe3ZhciBhLGIsYyxkO3JldHVybiBkPVt7bmFtZTpcIlNlZ21lbnRCYXNlXCIsbWVyZ2U6ITB9LHtuYW1lOlwiU2VnbWVudFRlbXBsYXRlXCIsbWVyZ2U6ITB9LHtuYW1lOlwiU2VnbWVudExpc3RcIixtZXJnZTohMH1dLGE9e30sYS5uYW1lPVwiUGVyaW9kXCIsYS5pc1Jvb3Q9ITEsYS5pc0FycmF5PSEwLGEucGFyZW50PW51bGwsYS5jaGlsZHJlbj1bXSxhLnByb3BlcnRpZXM9ZCxiPXt9LGIubmFtZT1cIkFkYXB0YXRpb25TZXRcIixiLmlzUm9vdD0hMSxiLmlzQXJyYXk9ITAsYi5wYXJlbnQ9YSxiLmNoaWxkcmVuPVtdLGIucHJvcGVydGllcz1kLGEuY2hpbGRyZW4ucHVzaChiKSxjPXt9LGMubmFtZT1cIlJlcHJlc2VudGF0aW9uXCIsYy5pc1Jvb3Q9ITEsYy5pc0FycmF5PSEwLGMucGFyZW50PWIsYy5jaGlsZHJlbj1bXSxjLnByb3BlcnRpZXM9ZCxiLmNoaWxkcmVuLnB1c2goYyksYX0sbD1mdW5jdGlvbigpe3ZhciBhLGIsYyxkLGU7cmV0dXJuIGU9W3tuYW1lOlwiQmFzZVVSTFwiLG1lcmdlOiEwLG1lcmdlRnVuY3Rpb246ZnVuY3Rpb24oYSxiKXt2YXIgYztyZXR1cm4gYz0wPT09Yi5pbmRleE9mKFwiaHR0cDovL1wiKT9iOmErYn19XSxhPXt9LGEubmFtZT1cIm1wZFwiLGEuaXNSb290PSEwLGEuaXNBcnJheT0hMCxhLnBhcmVudD1udWxsLGEuY2hpbGRyZW49W10sYS5wcm9wZXJ0aWVzPWUsYj17fSxiLm5hbWU9XCJQZXJpb2RcIixiLmlzUm9vdD0hMSxiLmlzQXJyYXk9ITAsYi5wYXJlbnQ9bnVsbCxiLmNoaWxkcmVuPVtdLGIucHJvcGVydGllcz1lLGEuY2hpbGRyZW4ucHVzaChiKSxjPXt9LGMubmFtZT1cIkFkYXB0YXRpb25TZXRcIixjLmlzUm9vdD0hMSxjLmlzQXJyYXk9ITAsYy5wYXJlbnQ9YixjLmNoaWxkcmVuPVtdLGMucHJvcGVydGllcz1lLGIuY2hpbGRyZW4ucHVzaChjKSxkPXt9LGQubmFtZT1cIlJlcHJlc2VudGF0aW9uXCIsZC5pc1Jvb3Q9ITEsZC5pc0FycmF5PSEwLGQucGFyZW50PWMsZC5jaGlsZHJlbj1bXSxkLnByb3BlcnRpZXM9ZSxjLmNoaWxkcmVuLnB1c2goZCksYX0sbT1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiBhLnB1c2goaigpKSxhLnB1c2goaygpKSxhLnB1c2gobCgpKSxhfSxuPWZ1bmN0aW9uKGEsYil7dGhpcy5kZWJ1Zy5sb2coXCJEb2luZyBwYXJzZS5cIik7dmFyIGMsZD1uZXcgWDJKUyhpLFwiXCIsITApLGU9bmV3IE9iamVjdElyb24obSgpKTt0cnl7dGhpcy5kZWJ1Zy5sb2coXCJDb252ZXJ0aW5nIGZyb20gWE1MLlwiKSxjPWQueG1sX3N0cjJqc29uKGEpLGMuaGFzT3duUHJvcGVydHkoXCJCYXNlVVJMXCIpPyhjLkJhc2VVUkw9Yy5CYXNlVVJMX2FzQXJyYXlbMF0sMCE9PWMuQmFzZVVSTC50b1N0cmluZygpLmluZGV4T2YoXCJodHRwXCIpJiYoYy5CYXNlVVJMPWIrYy5CYXNlVVJMKSk6KHRoaXMuZGVidWcubG9nKFwiU2V0dGluZyBiYXNlVVJMOiBcIitiKSxjLkJhc2VVUkw9YiksdGhpcy5kZWJ1Zy5sb2coXCJGbGF0dGVuIG1hbmlmZXN0IHByb3BlcnRpZXMuXCIpLGUucnVuKGMpLHRoaXMuZGVidWcubG9nKFwiUGFyc2luZyBjb21wbGV0ZS5cIil9Y2F0Y2goZil7cmV0dXJuIHRoaXMuZXJySGFuZGxlci5tYW5pZmVzdEVycm9yKFwicGFyc2luZyB0aGUgbWFuaWZlc3QgZmFpbGVkXCIsXCJwYXJzZVwiLGEpLFEucmVqZWN0KGYpfXJldHVybiBRLndoZW4oYyl9O3JldHVybntkZWJ1Zzp2b2lkIDAsZXJySGFuZGxlcjp2b2lkIDAscGFyc2U6bn19LERhc2guZGVwZW5kZW5jaWVzLkRhc2hQYXJzZXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpEYXNoLmRlcGVuZGVuY2llcy5EYXNoUGFyc2VyfSxEYXNoLmRlcGVuZGVuY2llcy5GcmFnbWVudEV4dGVuc2lvbnM9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYT1mdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUsZixnLGg9US5kZWZlcigpLGk9bmV3IERhdGFWaWV3KGEpLGo9MDtcInRmZHRcIiE9PWUmJmo8aS5ieXRlTGVuZ3RoOyl7Zm9yKGQ9aS5nZXRVaW50MzIoaiksais9NCxlPVwiXCIsZj0wOzQ+ZjtmKz0xKWc9aS5nZXRJbnQ4KGopLGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoZyksais9MTtcIm1vb2ZcIiE9PWUmJlwidHJhZlwiIT09ZSYmXCJ0ZmR0XCIhPT1lJiYoais9ZC04KX1pZihqPT09aS5ieXRlTGVuZ3RoKXRocm93XCJFcnJvciBmaW5kaW5nIGxpdmUgb2Zmc2V0LlwiO3JldHVybiBjPWkuZ2V0VWludDgoaiksdGhpcy5kZWJ1Zy5sb2coXCJwb3NpdGlvbjogXCIraiksMD09PWM/KGorPTQsYj1pLmdldFVpbnQzMihqLCExKSk6KGorPWQtMTYsYj11dGlscy5NYXRoLnRvNjRCaXROdW1iZXIoaS5nZXRVaW50MzIoais0LCExKSxpLmdldFVpbnQzMihqLCExKSkpLGgucmVzb2x2ZSh7dmVyc2lvbjpjLGJhc2VfbWVkaWFfZGVjb2RlX3RpbWU6Yn0pLGgucHJvbWlzZX0sYj1mdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUsZixnLGgsaT1uZXcgRGF0YVZpZXcoYSksaj0wO1wic2lkeFwiIT09ZiYmajxpLmJ5dGVMZW5ndGg7KXtmb3IoZz1pLmdldFVpbnQzMihqKSxqKz00LGY9XCJcIixlPTA7ND5lO2UrPTEpaD1pLmdldEludDgoaiksZis9U3RyaW5nLmZyb21DaGFyQ29kZShoKSxqKz0xO1wibW9vZlwiIT09ZiYmXCJ0cmFmXCIhPT1mJiZcInNpZHhcIiE9PWY/ais9Zy04Olwic2lkeFwiPT09ZiYmKGotPTgpfXJldHVybiBiPWkuZ2V0VWludDgoais4KSxqKz0xMixjPWkuZ2V0VWludDMyKGorNCwhMSksais9OCxkPTA9PT1iP2kuZ2V0VWludDMyKGosITEpOnV0aWxzLk1hdGgudG82NEJpdE51bWJlcihpLmdldFVpbnQzMihqKzQsITEpLGkuZ2V0VWludDMyKGosITEpKSxRLndoZW4oe2VhcmxpZXN0UHJlc2VudGF0aW9uVGltZTpkLHRpbWVzY2FsZTpjfSl9LGM9ZnVuY3Rpb24oYil7dmFyIGMsZCxlLGY9US5kZWZlcigpLGc9bmV3IFhNTEh0dHBSZXF1ZXN0LGg9ITE7cmV0dXJuIGM9YixnLm9ubG9hZGVuZD1mdW5jdGlvbigpe2h8fChkPVwiRXJyb3IgbG9hZGluZyBmcmFnbWVudDogXCIrYyxmLnJlamVjdChkKSl9LGcub25sb2FkPWZ1bmN0aW9uKCl7aD0hMCxlPWEoZy5yZXNwb25zZSksZi5yZXNvbHZlKGUpfSxnLm9uZXJyb3I9ZnVuY3Rpb24oKXtkPVwiRXJyb3IgbG9hZGluZyBmcmFnbWVudDogXCIrYyxmLnJlamVjdChkKX0sZy5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiLGcub3BlbihcIkdFVFwiLGMpLGcuc2VuZChudWxsKSxmLnByb21pc2V9O3JldHVybntkZWJ1Zzp2b2lkIDAsbG9hZEZyYWdtZW50OmMscGFyc2VURkRUOmEscGFyc2VTSURYOmJ9fSxEYXNoLmRlcGVuZGVuY2llcy5GcmFnbWVudEV4dGVuc2lvbnMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpEYXNoLmRlcGVuZGVuY2llcy5GcmFnbWVudEV4dGVuc2lvbnN9LERhc2gudm8uU2VnbWVudD1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3RoaXMuaW5kZXhSYW5nZT1udWxsLHRoaXMuaW5kZXg9bnVsbCx0aGlzLm1lZGlhUmFuZ2U9bnVsbCx0aGlzLm1lZGlhPW51bGwsdGhpcy5kdXJhdGlvbj0wLzAsdGhpcy5zdGFydFRpbWU9MC8wLHRoaXMudGltZXNjYWxlPTAvMH0sRGFzaC52by5TZWdtZW50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RGFzaC52by5TZWdtZW50fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQWJyQ29udHJvbGxlcj1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhPSEwLGI9e30sYz17fSxkPWZ1bmN0aW9uKGEpe3ZhciBjO3JldHVybiBiLmhhc093blByb3BlcnR5KGEpfHwoYlthXT0wKSxjPWJbYV19LGU9ZnVuY3Rpb24oYSxjKXtiW2FdPWN9LGY9ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIGMuaGFzT3duUHJvcGVydHkoYSl8fChjW2FdPTApLGI9Y1thXX0sZz1mdW5jdGlvbihhLGIpe2NbYV09Yn07cmV0dXJue2RlYnVnOnZvaWQgMCxhYnJSdWxlc0NvbGxlY3Rpb246dm9pZCAwLG1hbmlmZXN0RXh0OnZvaWQgMCxtZXRyaWNzTW9kZWw6dm9pZCAwLGdldEF1dG9Td2l0Y2hCaXRyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldEF1dG9Td2l0Y2hCaXRyYXRlOmZ1bmN0aW9uKGIpe2E9Yn0sZ2V0TWV0cmljc0ZvcjpmdW5jdGlvbihhKXt2YXIgYj1RLmRlZmVyKCksYz10aGlzO3JldHVybiBjLm1hbmlmZXN0RXh0LmdldElzVmlkZW8oYSkudGhlbihmdW5jdGlvbihkKXtkP2IucmVzb2x2ZShjLm1ldHJpY3NNb2RlbC5nZXRNZXRyaWNzRm9yKFwidmlkZW9cIikpOmMubWFuaWZlc3RFeHQuZ2V0SXNBdWRpbyhhKS50aGVuKGZ1bmN0aW9uKGEpe2E/Yi5yZXNvbHZlKGMubWV0cmljc01vZGVsLmdldE1ldHJpY3NGb3IoXCJhdWRpb1wiKSk6Yi5yZXNvbHZlKGMubWV0cmljc01vZGVsLmdldE1ldHJpY3NGb3IoXCJzdHJlYW1cIikpfSl9KSxiLnByb21pc2V9LGdldFBsYXliYWNrUXVhbGl0eTpmdW5jdGlvbihiLGMpe3ZhciBoLGksaixrLGwsbSxuPXRoaXMsbz1RLmRlZmVyKCkscD1NZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5OT19DSEFOR0UscT1NZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5OT19DSEFOR0Uscj1bXTtyZXR1cm4gbD1kKGIpLG09ZihiKSxuLmRlYnVnLmxvZyhcIkFCUiBlbmFibGVkPyAoXCIrYStcIilcIiksYT8obi5kZWJ1Zy5sb2coXCJDaGVjayBBQlIgcnVsZXMuXCIpLG4uZ2V0TWV0cmljc0ZvcihjKS50aGVuKGZ1bmN0aW9uKGEpe24uYWJyUnVsZXNDb2xsZWN0aW9uLmdldFJ1bGVzKCkudGhlbihmdW5jdGlvbihkKXtmb3IoaD0wLGk9ZC5sZW5ndGg7aT5oO2grPTEpci5wdXNoKGRbaF0uY2hlY2tJbmRleChsLGEsYykpO1xuUS5hbGwocikudGhlbihmdW5jdGlvbihhKXtmb3Iobi5kZWJ1Zy5sb2coYSksaz17fSxrW01lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLlNUUk9OR109TWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuTk9fQ0hBTkdFLGtbTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuV0VBS109TWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuTk9fQ0hBTkdFLGtbTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuREVGQVVMVF09TWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuTk9fQ0hBTkdFLGg9MCxpPWEubGVuZ3RoO2k+aDtoKz0xKWo9YVtoXSxqLnF1YWxpdHkhPT1NZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5OT19DSEFOR0UmJihrW2oucHJpb3JpdHldPU1hdGgubWluKGtbai5wcmlvcml0eV0sai5xdWFsaXR5KSk7a1tNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5XRUFLXSE9PU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLk5PX0NIQU5HRSYmKHE9TWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuV0VBSyxwPWtbTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuV0VBS10pLGtbTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuREVGQVVMVF0hPT1NZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5OT19DSEFOR0UmJihxPU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLkRFRkFVTFQscD1rW01lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLkRFRkFVTFRdKSxrW01lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLlNUUk9OR10hPT1NZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5OT19DSEFOR0UmJihxPU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLlNUUk9ORyxwPWtbTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuU1RST05HXSkscCE9PU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLk5PX0NIQU5HRSYmdm9pZCAwIT09cCYmKGw9cCkscSE9PU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLk5PX0NIQU5HRSYmdm9pZCAwIT09cSYmKG09cSksbi5tYW5pZmVzdEV4dC5nZXRSZXByZXNlbnRhdGlvbkNvdW50KGMpLnRoZW4oZnVuY3Rpb24oYSl7MD5sJiYobD0wKSxsPj1hJiYobD1hLTEpLG0hPU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLlNUUk9ORyYmbSE9TWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuV0VBSyYmKG09TWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuREVGQVVMVCksZShiLGwpLG4uZGVidWcubG9nKFwiTmV3IHF1YWxpdHkgb2YgXCIrbCksZyhiLG0pLG4uZGVidWcubG9nKFwiTmV3IGNvbmZpZGVuY2Ugb2YgXCIrbSksby5yZXNvbHZlKHtxdWFsaXR5OmwsY29uZmlkZW5jZTptfSl9KX0pfSl9KSk6KG4uZGVidWcubG9nKFwiVW5jaGFuZ2VkIHF1YWxpdHkgb2YgXCIrbCksby5yZXNvbHZlKHtxdWFsaXR5OmwsY29uZmlkZW5jZTptfSkpLG8ucHJvbWlzZX0sc2V0UGxheWJhY2tRdWFsaXR5OmZ1bmN0aW9uKGEsYil7dmFyIGM9ZChhKTtiIT09YyYmZShhLGIpfSxnZXRRdWFsaXR5Rm9yOmZ1bmN0aW9uKGEpe3JldHVybiBkKGEpfX19LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5BYnJDb250cm9sbGVyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkFickNvbnRyb2xsZXJ9LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJDb250cm9sbGVyPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGEsYixjLGQsZT0uNSxmPTIyLGc9XCJXQUlUSU5HXCIsaD1cIlJFQURZXCIsaT1cIlZBTElEQVRJTkdcIixqPVwiTE9BRElOR1wiLGs9ZyxsPSExLG09ITEsbj0hMSxvPSEwLHA9W10scT0hMSxyPS0xLHM9ITAsdD0tMSx1PSExLHY9ITEsdz0hMSx4PSExLHk9W10sej1udWxsLEE9US5kZWZlcigpLEI9bnVsbCxDPW51bGwsRD0tMSxFPTAsRj0wLEc9bnVsbCxIPTAsST0hMSxKPW51bGwsSz0wLEw9ITEsTT1udWxsLE49bnVsbCxPPW51bGwsUD1udWxsLFI9ITAsUz1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2IuZGVidWcubG9nKFwiQnVmZmVyQ29udHJvbGxlciBcIitjK1wiIHNldFN0YXRlIHRvOlwiK2EpLGs9YSxudWxsIT09RyYmYi5mcmFnbWVudENvbnRyb2xsZXIub25CdWZmZXJDb250cm9sbGVyU3RhdGVDaGFuZ2UoKX0sVD1mdW5jdGlvbihhLGIpe3ZhciBjPTAsZD1udWxsO1I9PT0hMSYmKGQ9UC5zdGFydCxjPWEuZ2V0VGltZSgpLWQuZ2V0VGltZSgpLFAuZHVyYXRpb249YyxQLnN0b3ByZWFzb249YixSPSEwKX0sVT1mdW5jdGlvbigpe3ZhciBhPXRoaXMubWFuaWZlc3RNb2RlbC5nZXRWYWx1ZSgpLGI9dGhpcy5tYW5pZmVzdEV4dC5nZXRJc0xpdmUoYSk7cmV0dXJuIHc9ITAsUS53aGVuKGIpfSxWPWZ1bmN0aW9uKCl7aWYobCYmbSl7dmFyIGE9dGhpcztVLmNhbGwodGhpcykudGhlbihmdW5jdGlvbihiKXt2PWIsYS5kZWJ1Zy5sb2coXCJCdWZmZXJDb250cm9sbGVyIGJlZ2luIFwiK2MrXCIgdmFsaWRhdGlvblwiKSxTLmNhbGwoYSxoKSxhLnJlcXVlc3RTY2hlZHVsZXIuc3RhcnRTY2hlZHVsaW5nKGEscmIpLEc9YS5mcmFnbWVudENvbnRyb2xsZXIuYXR0YWNoQnVmZmVyQ29udHJvbGxlcihhKX0pfX0sVz1mdW5jdGlvbigpe3ZhciBhO3RoaXMucmVxdWVzdFNjaGVkdWxlci5pc1NjaGVkdWxlZCh0aGlzKXx8KHE9PT0hMSYmKGE9bmV3IERhdGUsVChhLE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUGxheUxpc3QuVHJhY2UuVVNFUl9SRVFVRVNUX1NUT1BfUkVBU09OKSxPPXRoaXMubWV0cmljc01vZGVsLmFkZFBsYXlMaXN0KGMsYSwwLE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUGxheUxpc3QuSU5JVElBTF9QTEFZX1NUQVJUX1JFQVNPTikpLHRoaXMuZGVidWcubG9nKFwiQnVmZmVyQ29udHJvbGxlciBcIitjK1wiIHN0YXJ0LlwiKSxtPSEwLG49ITAsVi5jYWxsKHRoaXMpKX0sWD1mdW5jdGlvbihhKXt2YXIgYjt0aGlzLmRlYnVnLmxvZyhcIkJ1ZmZlckNvbnRyb2xsZXIgXCIrYytcIiBzZWVrOiBcIithKSxxPSEwLHI9YSxiPW5ldyBEYXRlLFQoYixNZWRpYVBsYXllci52by5tZXRyaWNzLlBsYXlMaXN0LlRyYWNlLlVTRVJfUkVRVUVTVF9TVE9QX1JFQVNPTiksTz10aGlzLm1ldHJpY3NNb2RlbC5hZGRQbGF5TGlzdChjLGIscixNZWRpYVBsYXllci52by5tZXRyaWNzLlBsYXlMaXN0LlNFRUtfU1RBUlRfUkVBU09OKSxXLmNhbGwodGhpcyl9LFk9ZnVuY3Rpb24oKXtrIT09ZyYmKHRoaXMuZGVidWcubG9nKFwiQnVmZmVyQ29udHJvbGxlciBcIitjK1wiIHN0b3AuXCIpLFMuY2FsbCh0aGlzLGcpLHRoaXMucmVxdWVzdFNjaGVkdWxlci5zdG9wU2NoZWR1bGluZyh0aGlzKSx0aGlzLmZyYWdtZW50Q29udHJvbGxlci5jYW5jZWxQZW5kaW5nUmVxdWVzdHNGb3JNb2RlbChHKSxtPSExLG49ITEsVChuZXcgRGF0ZSxNZWRpYVBsYXllci52by5tZXRyaWNzLlBsYXlMaXN0LlRyYWNlLlVTRVJfUkVRVUVTVF9TVE9QX1JFQVNPTikpfSxaPWZ1bmN0aW9uKGEsYil7dmFyIGM9bnVsbDtyZXR1cm4gYiYmYi5SZXByZXNlbnRhdGlvbl9hc0FycmF5JiZiLlJlcHJlc2VudGF0aW9uX2FzQXJyYXkubGVuZ3RoPjAmJihjPWIuUmVwcmVzZW50YXRpb25fYXNBcnJheVthXSksY30sJD1mdW5jdGlvbigpe3ZhciBhPXRoaXM7az09PWomJih1JiYodT0hMSx0aGlzLnZpZGVvTW9kZWwuc3RhbGxTdHJlYW0oYyx1KSksUy5jYWxsKGEsaCkpfSxfPWZ1bmN0aW9uKGEpe2lmKHRoaXMuZnJhZ21lbnRDb250cm9sbGVyLmlzSW5pdGlhbGl6YXRpb25SZXF1ZXN0KGEpKVMuY2FsbCh0aGlzLGgpO2Vsc2V7Uy5jYWxsKHRoaXMsaik7dmFyIGI9dGhpcyxjPWIuZnJhZ21lbnRDb250cm9sbGVyLmdldExvYWRpbmdUaW1lKGIpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXsoTXx8TikmJihTLmNhbGwoYixoKSxxYi5jYWxsKGIpKX0sYyl9fSxhYj1mdW5jdGlvbihhLGIpe3RoaXMuZnJhZ21lbnRDb250cm9sbGVyLmlzSW5pdGlhbGl6YXRpb25SZXF1ZXN0KGEpP2hiLmNhbGwodGhpcyxhLGIpOmJiLmNhbGwodGhpcyxhLGIpfSxiYj1mdW5jdGlvbihhLGIpe3ZhciBkPXRoaXM7ZC5kZWJ1Zy5sb2coYytcIiBCeXRlcyBmaW5pc2hlZCBsb2FkaW5nOiBcIithLnVybCksS3x8aXNOYU4oYS5kdXJhdGlvbil8fChLPWEuZHVyYXRpb24pLGQuZnJhZ21lbnRDb250cm9sbGVyLnByb2Nlc3MoYi5kYXRhKS50aGVuKGZ1bmN0aW9uKGIpe251bGwhPT1iJiZudWxsIT09ej9RLndoZW4oei5wcm9taXNlKS50aGVuKGZ1bmN0aW9uKCl7Y2IuY2FsbChkLGIsYS5xdWFsaXR5KS50aGVuKGZ1bmN0aW9uKCl7QS5wcm9taXNlLnRoZW4oZnVuY3Rpb24oYil7Yi5pbmRleC0xIT09YS5pbmRleHx8eHx8KHg9ITAsdSYmKHU9ITEsZC52aWRlb01vZGVsLnN0YWxsU3RyZWFtKGMsdSkpLFMuY2FsbChkLGgpLGQuc3lzdGVtLm5vdGlmeShcImJ1ZmZlcmluZ0NvbXBsZXRlZFwiKSl9KX0pfSk6ZC5kZWJ1Zy5sb2coXCJObyBcIitjK1wiIGJ5dGVzIHRvIHB1c2guXCIpfSl9LGNiPWZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcyxlPWE9PUosaD1lP0I6US5kZWZlcigpLGk9ZT95Lmxlbmd0aDp5LnB1c2goaCksaj1aKHQsZC5nZXREYXRhKCkpLGw9ZC52aWRlb01vZGVsLmdldEN1cnJlbnRUaW1lKCksbT1uZXcgRGF0ZTtyZXR1cm4gZC5kZWJ1Zy5sb2coXCJQdXNoIChcIitjK1wiKSBieXRlczogXCIrYS5ieXRlTGVuZ3RoKSxSPT09ITAmJmshPT1nJiYtMSE9PXQmJihSPSExLFA9ZC5tZXRyaWNzTW9kZWwuYXBwZW5kUGxheUxpc3RUcmFjZShPLGouaWQsbnVsbCxtLGwsbnVsbCwxLG51bGwpKSxRLndoZW4oZXx8Mj5pfHx5W2ktMl0ucHJvbWlzZSkudGhlbihmdW5jdGlvbigpe04mJmZiLmNhbGwoZCkudGhlbihmdW5jdGlvbigpe3JldHVybiBiIT09dD8oaC5yZXNvbHZlKCksZSYmKEI9bnVsbCxKPW51bGwpLHZvaWQgMCk6KFEud2hlbihDP0MucHJvbWlzZTohMCkudGhlbihmdW5jdGlvbigpe2Quc291cmNlQnVmZmVyRXh0LmFwcGVuZChOLGEsZC52aWRlb01vZGVsKS50aGVuKGZ1bmN0aW9uKCl7ZSYmKEI9bnVsbCxKPW51bGwpLGQucmVxdWVzdFNjaGVkdWxlci5pc1NjaGVkdWxlZChkKXx8Vy5jYWxsKGQpLEk9ITEsZGIuY2FsbChkKS50aGVuKGZ1bmN0aW9uKCl7aC5yZXNvbHZlKCl9KSxOJiZkLnNvdXJjZUJ1ZmZlckV4dC5nZXRBbGxSYW5nZXMoTikudGhlbihmdW5jdGlvbihhKXtpZihhJiYoZC5kZWJ1Zy5sb2coXCJBcHBlbmQgXCIrYytcIiBjb21wbGV0ZTogXCIrYS5sZW5ndGgpLGEubGVuZ3RoPjApKXt2YXIgYixlO2ZvcihkLmRlYnVnLmxvZyhcIk51bWJlciBvZiBidWZmZXJlZCBcIitjK1wiIHJhbmdlczogXCIrYS5sZW5ndGgpLGI9MCxlPWEubGVuZ3RoO2U+YjtiKz0xKWQuZGVidWcubG9nKFwiQnVmZmVyZWQgXCIrYytcIiBSYW5nZTogXCIrYS5zdGFydChiKStcIiAtIFwiK2EuZW5kKGIpKX19KX0sZnVuY3Rpb24oYil7Yi5lcnIuY29kZT09PWYmJihKPWEsQj1oLEk9ITAsRj0wLFkuY2FsbChkKSl9KX0pLHZvaWQgMCl9KX0pLGgucHJvbWlzZX0sZGI9ZnVuY3Rpb24oKXtpZighTSYmIU4pcmV0dXJuIFEud2hlbighMSk7dmFyIGE9dGhpcyxiPVEuZGVmZXIoKSxkPW9iLmNhbGwoYSk7cmV0dXJuIGEuc291cmNlQnVmZmVyRXh0LmdldEJ1ZmZlckxlbmd0aChOLGQpLnRoZW4oZnVuY3Rpb24oZCl7SD1kLGEubWV0cmljc01vZGVsLmFkZEJ1ZmZlckxldmVsKGMsbmV3IERhdGUsSCksZWIuY2FsbChhKSxiLnJlc29sdmUoKX0pLGIucHJvbWlzZX0sZWI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJ1ZmZlckV4dC5nZXRMZWFzdEJ1ZmZlckxldmVsKCksYj0yKkssYz1ILWE7Yz5iJiYhQz8oRj0wLEM9US5kZWZlcigpKTpiPmMmJkMmJihDLnJlc29sdmUoKSxDPW51bGwpfSxmYj1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcyxjPVEuZGVmZXIoKSxkPTA7cmV0dXJuIEk/KGE9ZnVuY3Rpb24oKXtnYi5jYWxsKGIpLnRoZW4oZnVuY3Rpb24oYil7ZCs9YixkPj1LP2MucmVzb2x2ZSgpOnNldFRpbWVvdXQoYSwxZTMqSyl9KX0sYS5jYWxsKGIpLGMucHJvbWlzZSk6US53aGVuKCEwKX0sZ2I9ZnVuY3Rpb24oKXt2YXIgYSxjLGQ9dGhpcyxlPVEuZGVmZXIoKSxmPWQudmlkZW9Nb2RlbC5nZXRDdXJyZW50VGltZSgpLGc9MDtyZXR1cm4gYz1kLmZyYWdtZW50Q29udHJvbGxlci5nZXRFeGVjdXRlZFJlcXVlc3RGb3JUaW1lKEcsZiksYT1jJiYhaXNOYU4oYy5zdGFydFRpbWUpP2Muc3RhcnRUaW1lOk1hdGguZmxvb3IoZiksSz1jJiYhaXNOYU4oYy5kdXJhdGlvbik/Yy5kdXJhdGlvbjoxLGQuc291cmNlQnVmZmVyRXh0LmdldEJ1ZmZlclJhbmdlKE4sZikudGhlbihmdW5jdGlvbihjKXtudWxsPT09YyYmcj09PWYmJk4uYnVmZmVyZWQubGVuZ3RoPjAmJihhPU4uYnVmZmVyZWQuZW5kKE4uYnVmZmVyZWQubGVuZ3RoLTEpKSxnPU4uYnVmZmVyZWQuc3RhcnQoMCksZC5zb3VyY2VCdWZmZXJFeHQucmVtb3ZlKE4sZyxhLEUsYikudGhlbihmdW5jdGlvbigpe2QuZnJhZ21lbnRDb250cm9sbGVyLnJlbW92ZUV4ZWN1dGVkUmVxdWVzdHNCZWZvcmVUaW1lKEcsYSksZS5yZXNvbHZlKGEtZyl9KX0pLGUucHJvbWlzZX0saGI9ZnVuY3Rpb24oYSxiKXt2YXIgZD10aGlzLGU9Yi5kYXRhLGY9YS5xdWFsaXR5O2QuZGVidWcubG9nKGMrXCIgSW5pdGlhbGl6YXRpb24gZmluaXNoZWQgbG9hZGluZzogXCIrYS51cmwpLGQuZnJhZ21lbnRDb250cm9sbGVyLnByb2Nlc3MoZSkudGhlbihmdW5jdGlvbihiKXtudWxsIT09Yj8ocFtmXT1iLGY9PT10JiZjYi5jYWxsKGQsYixhLnF1YWxpdHkpLnRoZW4oZnVuY3Rpb24oKXt6LnJlc29sdmUoKX0pKTpkLmRlYnVnLmxvZyhcIk5vIFwiK2MrXCIgYnl0ZXMgdG8gcHVzaC5cIil9KX0saWI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5tYW5pZmVzdE1vZGVsLmdldFZhbHVlKCksYz1hLm1hbmlmZXN0RXh0LmdldElzTGl2ZShiKTtrPT09aiYmUy5jYWxsKGEsaCksY3x8YS5zeXN0ZW0ubm90aWZ5KFwic2VnbWVudExvYWRpbmdGYWlsZWRcIil9LGpiPWZ1bmN0aW9uKGEpe3RoaXMuZGVidWcubG9nKGMrXCIgU3RyZWFtIGlzIGNvbXBsZXRlLlwiKSxUKG5ldyBEYXRlLE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUGxheUxpc3QuVHJhY2UuRU5EX09GX0NPTlRFTlRfU1RPUF9SRUFTT04pLFkuY2FsbCh0aGlzKSxBLnJlc29sdmUoYSl9LGtiPWZ1bmN0aW9uKGEsYil7dmFyIGQsZT1udWxsLGY9dGhpcy5idWZmZXJFeHQuZ2V0VG9wUXVhbGl0eUluZGV4KGMpLGc9W107aWYobyYmKHRoaXMuZGVidWcubG9nKFwiTWFya2luZyBhIHNwZWNpYWwgc2VlayBmb3IgaW5pdGlhbCBcIitjK1wiIHBsYXliYWNrLlwiKSxxfHwocT0hMCxyPTApLG89ITEpLHMpe2Zvcih6PVEuZGVmZXIoKSxwPVtdLGQ9MDtmPj1kO2QrPTEpZy5wdXNoKHRoaXMuaW5kZXhIYW5kbGVyLmdldEluaXRSZXF1ZXN0KGQsTSkpO3Q9YixlPVEuYWxsKGcpfWVsc2UgZT1RLndoZW4obnVsbCksYSYmKHo9US5kZWZlcigpLHQ9YixwW2JdJiZjYi5jYWxsKHRoaXMscFtiXSxiKS50aGVuKGZ1bmN0aW9uKCl7ei5yZXNvbHZlKCl9KSk7cmV0dXJuIGV9LGxiPWZ1bmN0aW9uKGIpe3ZhciBkLGU9dGhpcztpZihzJiYhcSllLmRlYnVnLmxvZyhcIkRhdGEgY2hhbmdlZCAtIGxvYWRpbmcgdGhlIFwiK2MrXCIgZnJhZ21lbnQgZm9yIHRpbWU6IFwiK2EpLGQ9ZS5pbmRleEhhbmRsZXIuZ2V0U2VnbWVudFJlcXVlc3RGb3JUaW1lKGEsYixNKTtlbHNle3ZhciBmPVEuZGVmZXIoKSxnPWUudmlkZW9Nb2RlbC5nZXRDdXJyZW50VGltZSgpO2Q9Zi5wcm9taXNlLGUuc291cmNlQnVmZmVyRXh0LmdldEJ1ZmZlclJhbmdlKE4sZykudGhlbihmdW5jdGlvbihhKXtxPSExLG51bGwhPT1hJiYoZz1hLmVuZCksZS5kZWJ1Zy5sb2coXCJMb2FkaW5nIHRoZSBcIitjK1wiIGZyYWdtZW50IGZvciB0aW1lOiBcIitnKSxlLmluZGV4SGFuZGxlci5nZXRTZWdtZW50UmVxdWVzdEZvclRpbWUoZyxiLE0pLnRoZW4oZnVuY3Rpb24oYSl7Zi5yZXNvbHZlKGEpfSxmdW5jdGlvbigpe2YucmVqZWN0KCl9KX0sZnVuY3Rpb24oKXtmLnJlamVjdCgpfSl9cmV0dXJuIHM9ITEsZH0sbWI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztudWxsIT09YT9iLmZyYWdtZW50Q29udHJvbGxlci5pc0ZyYWdtZW50TG9hZGVkT3JQZW5kaW5nKGIsYSk/XCJjb21wbGV0ZVwiIT09YS5hY3Rpb24/Yi5pbmRleEhhbmRsZXIuZ2V0TmV4dFNlZ21lbnRSZXF1ZXN0KHQsTSkudGhlbihtYi5iaW5kKGIpKTooWS5jYWxsKGIpLFMuY2FsbChiLGgpKTooYi5kZWJ1Zy5sb2coXCJMb2FkaW5nIGFuIFwiK2MrXCIgZnJhZ21lbnQ6IFwiK2EudXJsKSxRLndoZW4oQz9DLnByb21pc2U6ITApLnRoZW4oZnVuY3Rpb24oKXtiLmZyYWdtZW50Q29udHJvbGxlci5wcmVwYXJlRnJhZ21lbnRGb3JMb2FkaW5nKGIsYSxfLGFiLGliLGpiKS50aGVuKGZ1bmN0aW9uKCl7Uy5jYWxsKGIsaCl9KX0pKTpTLmNhbGwoYixoKX0sbmI9ZnVuY3Rpb24oKXtuJiYoZD5IJiZkPEUtdGhpcy52aWRlb01vZGVsLmdldEN1cnJlbnRUaW1lKCk/dXx8KHRoaXMuZGVidWcubG9nKFwiV2FpdGluZyBmb3IgbW9yZSBcIitjK1wiIGJ1ZmZlciBiZWZvcmUgc3RhcnRpbmcgcGxheWJhY2suXCIpLHU9ITAsdGhpcy52aWRlb01vZGVsLnN0YWxsU3RyZWFtKGMsdSkpOih0aGlzLmRlYnVnLmxvZyhcIkdvdCBlbm91Z2ggXCIrYytcIiBidWZmZXIgdG8gc3RhcnQuXCIpLG49ITEsdT0hMSx0aGlzLnZpZGVvTW9kZWwuc3RhbGxTdHJlYW0oYyx1KSkpfSxvYj1mdW5jdGlvbigpe3ZhciBhPS0xO3JldHVybiBhPXRoaXMudmlkZW9Nb2RlbC5nZXRDdXJyZW50VGltZSgpfSxwYj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi52aWRlb01vZGVsLmdldFBsYXliYWNrUmF0ZSgpLGQ9SC9NYXRoLm1heChjLDEpLGU9US5kZWZlcigpO3JldHVybiBiLmJ1ZmZlckV4dC5nZXRSZXF1aXJlZEJ1ZmZlckxlbmd0aChuLGIucmVxdWVzdFNjaGVkdWxlci5nZXRFeGVjdXRlSW50ZXJ2YWwoYikvMWUzLHYsRSkudGhlbihmdW5jdGlvbihjKXtiLmluZGV4SGFuZGxlci5nZXRTZWdtZW50Q291bnRGb3JEdXJhdGlvbihhLE0sYyxkKS50aGVuKGZ1bmN0aW9uKGEpe2UucmVzb2x2ZShhKX0pfSksZS5wcm9taXNlfSxxYj1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmZyYWdtZW50Q29udHJvbGxlci5nZXRQZW5kaW5nUmVxdWVzdHMoYSksYz1hLmZyYWdtZW50Q29udHJvbGxlci5nZXRMb2FkaW5nUmVxdWVzdHMoYSksZD0oYj9iLmxlbmd0aDowKSsoYz9jLmxlbmd0aDowKTtGLWQ+MD8oRi0tLGxiLmNhbGwoYSx0KS50aGVuKG1iLmJpbmQoYSkpKTooaz09PWkmJlMuY2FsbChhLGgpLCQuY2FsbChhKSl9LHJiPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLGQ9ITEsZj1udWxsLGc9bmV3IERhdGUsbD1iLnZpZGVvTW9kZWwuZ2V0Q3VycmVudFRpbWUoKSxtPW9iLmNhbGwoYik7aWYoYi5kZWJ1Zy5sb2coXCJCdWZmZXJDb250cm9sbGVyLnZhbGlkYXRlKCkgXCIrYytcIiB8IHN0YXRlOiBcIitrKSxiLmRlYnVnLmxvZyhjK1wiIFBsYXliYWNrIHJhdGU6IFwiK2IudmlkZW9Nb2RlbC5nZXRFbGVtZW50KCkucGxheWJhY2tSYXRlKSxiLmRlYnVnLmxvZyhjK1wiIFdvcmtpbmcgdGltZTogXCIrbSksYi5kZWJ1Zy5sb2coYytcIiBWaWRlbyB0aW1lOiBcIitsKSxiLmRlYnVnLmxvZyhcIkN1cnJlbnQgXCIrYytcIiBidWZmZXIgbGVuZ3RoOiBcIitIKSxuYi5jYWxsKGIpLGs9PT1qJiZlPkgpdXx8KGIuZGVidWcubG9nKFwiU3RhbGxpbmcgXCIrYytcIiBCdWZmZXI6IFwiK2MpLFQobmV3IERhdGUsTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdC5UcmFjZS5SRUJVRkZFUklOR19SRUFTT04pLHU9ITAsbj0hMCxiLnZpZGVvTW9kZWwuc3RhbGxTdHJlYW0oYyx1KSk7ZWxzZSBpZihrPT09aCl7Uy5jYWxsKGIsaSk7dmFyIG89Yi5tYW5pZmVzdE1vZGVsLmdldFZhbHVlKCkubWluQnVmZmVyVGltZTtiLmJ1ZmZlckV4dC5kZWNpZGVCdWZmZXJMZW5ndGgobyxFLG4pLnRoZW4oZnVuY3Rpb24oYSl7Yi5kZWJ1Zy5sb2coXCJCdWZmZXIgdGltZTogXCIrYSksYi5zZXRNaW5CdWZmZXJUaW1lKGEpLGIucmVxdWVzdFNjaGVkdWxlci5hZGp1c3RFeGVjdXRlSW50ZXJ2YWwoKX0pLGIuYWJyQ29udHJvbGxlci5nZXRQbGF5YmFja1F1YWxpdHkoYyxNKS50aGVuKGZ1bmN0aW9uKGUpe3ZhciBoPWUucXVhbGl0eTtpZihiLmRlYnVnLmxvZyhjK1wiIFBsYXliYWNrIHF1YWxpdHk6IFwiK2gpLGIuZGVidWcubG9nKFwiUG9wdWxhdGUgXCIrYytcIiBidWZmZXJzLlwiKSx2b2lkIDAhPT1oJiYoYT1oKSxkPWghPT10LGQ9PT0hMCl7aWYoYi5mcmFnbWVudENvbnRyb2xsZXIuYWJvcnRSZXF1ZXN0c0Zvck1vZGVsKEcpLGY9WihhLGIuZ2V0RGF0YSgpKSxudWxsPT09Znx8dm9pZCAwPT09Zil0aHJvd1wiVW5leHBlY3RlZCBlcnJvciFcIjtiLm1hbmlmZXN0RXh0LmdldFRpbWVzdGFtcE9mZnNldEZvclBlcmlvZChELGIubWFuaWZlc3RNb2RlbC5nZXRWYWx1ZSgpLGgsTSkudGhlbihmdW5jdGlvbihhKXtOLnRpbWVzdGFtcE9mZnNldCE9PWEmJihOLnRpbWVzdGFtcE9mZnNldD1hKX0pLFQobmV3IERhdGUsTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdC5UcmFjZS5SRVBSRVNFTlRBVElPTl9TV0lUQ0hfU1RPUF9SRUFTT04pLGIubWV0cmljc01vZGVsLmFkZFJlcHJlc2VudGF0aW9uU3dpdGNoKGMsZyxsLGYuaWQpfXJldHVybiBiLmRlYnVnLmxvZyhkP2MrXCIgUXVhbGl0eSBjaGFuZ2VkIHRvOiBcIitoOlwiUXVhbGl0eSBkaWRuJ3QgY2hhbmdlLlwiKSxwYi5jYWxsKGIsaCl9KS50aGVuKGZ1bmN0aW9uKGUpe0Y9ZSxrYi5jYWxsKGIsZCxhKS50aGVuKGZ1bmN0aW9uKGEpe2lmKG51bGwhPT1hKXt2YXIgZCxlLGY9YS5sZW5ndGg7Zm9yKGU9MDtmPmU7ZSs9MSlkPWFbZV0sYi5kZWJ1Zy5sb2coXCJMb2FkaW5nIFwiK2MrXCIgaW5pdGlhbGl6YXRpb246IFwiK2QudXJsKSxiLmRlYnVnLmxvZyhkKSxiLmZyYWdtZW50Q29udHJvbGxlci5wcmVwYXJlRnJhZ21lbnRGb3JMb2FkaW5nKGIsZCxfLGFiLGliLGpiKS50aGVuKGZ1bmN0aW9uKCl7Uy5jYWxsKGIsaCl9KX19KSxxYi5jYWxsKGIpfSl9ZWxzZSBrPT09aSYmUy5jYWxsKGIsaCl9O3JldHVybnt2aWRlb01vZGVsOnZvaWQgMCxtZXRyaWNzTW9kZWw6dm9pZCAwLG1hbmlmZXN0RXh0OnZvaWQgMCxtYW5pZmVzdE1vZGVsOnZvaWQgMCxidWZmZXJFeHQ6dm9pZCAwLHNvdXJjZUJ1ZmZlckV4dDp2b2lkIDAsYWJyQ29udHJvbGxlcjp2b2lkIDAsZnJhZ21lbnRFeHQ6dm9pZCAwLGluZGV4SGFuZGxlcjp2b2lkIDAsZGVidWc6dm9pZCAwLHN5c3RlbTp2b2lkIDAsZXJySGFuZGxlcjp2b2lkIDAsaW5pdGlhbGl6ZTpmdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe3ZhciBpPXRoaXMsaj1pLm1hbmlmZXN0TW9kZWwuZ2V0VmFsdWUoKSxrPWkubWFuaWZlc3RFeHQuZ2V0SXNMaXZlKGopO2kuc2V0TWVkaWFTb3VyY2UoaCksaS5zZXRWaWRlb01vZGVsKGUpLGkuc2V0VHlwZShhKSxpLnNldFBlcmlvZEluZGV4KGIpLGkuc2V0RGF0YShjKS50aGVuKGZ1bmN0aW9uKCl7bD0hMCxWLmNhbGwoaSl9KSxpLnNldEJ1ZmZlcihkKSxpLnNldFNjaGVkdWxlcihmKSxpLnNldEZyYWdtZW50Q29udHJvbGxlcihnKSxpLmluZGV4SGFuZGxlci5zZXRJc0xpdmUoayksaS5tYW5pZmVzdEV4dC5nZXREdXJhdGlvbkZvclBlcmlvZChiLGkubWFuaWZlc3RNb2RlbC5nZXRWYWx1ZSgpKS50aGVuKGZ1bmN0aW9uKGEpe0U9YSxpLmluZGV4SGFuZGxlci5zZXREdXJhdGlvbihhKSxpLmJ1ZmZlckV4dC5kZWNpZGVCdWZmZXJMZW5ndGgoai5taW5CdWZmZXJUaW1lLEUsbikudGhlbihmdW5jdGlvbihhKXtpLnNldE1pbkJ1ZmZlclRpbWUoYSl9KX0pfSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LHNldFR5cGU6ZnVuY3Rpb24oYSl7Yz1hLHZvaWQgMCE9PXRoaXMuaW5kZXhIYW5kbGVyJiZ0aGlzLmluZGV4SGFuZGxlci5zZXRUeXBlKGEpfSxnZXRQZXJpb2RJbmRleDpmdW5jdGlvbigpe3JldHVybiBEfSxzZXRQZXJpb2RJbmRleDpmdW5jdGlvbihhKXtEPWF9LGdldFZpZGVvTW9kZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWRlb01vZGVsfSxzZXRWaWRlb01vZGVsOmZ1bmN0aW9uKGEpe3RoaXMudmlkZW9Nb2RlbD1hfSxnZXRTY2hlZHVsZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXF1ZXN0U2NoZWR1bGVyfSxzZXRTY2hlZHVsZXI6ZnVuY3Rpb24oYSl7dGhpcy5yZXF1ZXN0U2NoZWR1bGVyPWF9LGdldEZyYWdtZW50Q29udHJvbGxlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZyYWdtZW50Q29udHJvbGxlcn0sc2V0RnJhZ21lbnRDb250cm9sbGVyOmZ1bmN0aW9uKGEpe3RoaXMuZnJhZ21lbnRDb250cm9sbGVyPWF9LGdldEF1dG9Td2l0Y2hCaXRyYXRlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcztyZXR1cm4gYS5hYnJDb250cm9sbGVyLmdldEF1dG9Td2l0Y2hCaXRyYXRlKCl9LHNldEF1dG9Td2l0Y2hCaXRyYXRlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7Yi5hYnJDb250cm9sbGVyLnNldEF1dG9Td2l0Y2hCaXRyYXRlKGEpfSxnZXREYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIE19LHNldERhdGE6ZnVuY3Rpb24oYil7dmFyIGQ9dGhpcyxlPVEuZGVmZXIoKSxmPU07cmV0dXJuIGZ8fChmPWIpLGQuYWJyQ29udHJvbGxlci5nZXRQbGF5YmFja1F1YWxpdHkoYyxmKS50aGVuKGZ1bmN0aW9uKGcpe2QuaW5kZXhIYW5kbGVyLmdldEN1cnJlbnRUaW1lKGcucXVhbGl0eSxmKS50aGVuKGZ1bmN0aW9uKGYpe3M9ITAsYT1mLE09YixkLnNlZWsoZiksZC5idWZmZXJFeHQudXBkYXRlRGF0YShNLGMpLGUucmVzb2x2ZSgpfSl9KSxlLnByb21pc2V9LGdldEJ1ZmZlcjpmdW5jdGlvbigpe3JldHVybiBOfSxzZXRCdWZmZXI6ZnVuY3Rpb24oYSl7Tj1hfSxnZXRNaW5CdWZmZXJUaW1lOmZ1bmN0aW9uKCl7cmV0dXJuIGR9LHNldE1pbkJ1ZmZlclRpbWU6ZnVuY3Rpb24oYSl7ZD1hfSxzZXRNZWRpYVNvdXJjZTpmdW5jdGlvbihhKXtiPWF9LGlzUmVhZHk6ZnVuY3Rpb24oKXtyZXR1cm4gaz09PWh9LGlzQnVmZmVyaW5nQ29tcGxldGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHh9LGNsZWFyTWV0cmljczpmdW5jdGlvbigpe3ZhciBhPXRoaXM7bnVsbCE9PWMmJlwiXCIhPT1jJiZhLm1ldHJpY3NNb2RlbC5jbGVhckN1cnJlbnRNZXRyaWNzRm9yVHlwZShjKX0sdXBkYXRlQnVmZmVyU3RhdGU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO0kmJkomJiFMPyhMPSEwLGNiLmNhbGwoYSxKLHQpLnRoZW4oZnVuY3Rpb24oKXtMPSExfSkpOmRiLmNhbGwoYSl9LHJlc2V0OmZ1bmN0aW9uKGEpe3ZhciBjPXRoaXM7WS5jYWxsKGMpLGMuY2xlYXJNZXRyaWNzKCksYy5mcmFnbWVudENvbnRyb2xsZXIuYWJvcnRSZXF1ZXN0c0Zvck1vZGVsKEcpLGMuZnJhZ21lbnRDb250cm9sbGVyLmRldGFjaEJ1ZmZlckNvbnRyb2xsZXIoRyksRz1udWxsLHk9W10sej1udWxsLHA9W10sQT1RLmRlZmVyKCksYXx8KGMuc291cmNlQnVmZmVyRXh0LmFib3J0KGIsTiksYy5zb3VyY2VCdWZmZXJFeHQucmVtb3ZlU291cmNlQnVmZmVyKGIsTikpLE09bnVsbCxOPW51bGx9LHN0YXJ0Olcsc2VlazpYLHN0b3A6WX19LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJDb250cm9sbGVyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkJ1ZmZlckNvbnRyb2xsZXJ9LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJFeHRlbnNpb25zPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGEsYixjPTAsZD0wLGU9bnVsbCxmPW51bGwsZz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm1ldHJpY3NFeHQuZ2V0Q3VycmVudEh0dHBSZXF1ZXN0KGEpO3JldHVybiBudWxsIT09Yj8oYi50cmVzcG9uc2UuZ2V0VGltZSgpLWIudHJlcXVlc3QuZ2V0VGltZSgpKS8xZTM6MH0saD1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcyxnPVEuZGVmZXIoKTtyZXR1cm4gUS53aGVuKGU/Yi5hYnJDb250cm9sbGVyLmdldFBsYXliYWNrUXVhbGl0eShcImF1ZGlvXCIsZSk6YykudGhlbihmdW5jdGlvbihlKXtRLndoZW4oZj9iLmFickNvbnRyb2xsZXIuZ2V0UGxheWJhY2tRdWFsaXR5KFwidmlkZW9cIixmKTpkKS50aGVuKGZ1bmN0aW9uKGIpe2E9ZS5xdWFsaXR5PT09YyYmYi5xdWFsaXR5PT09ZCxhPWF8fGUuY29uZmlkZW5jZT09PU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLlNUUk9ORyYmYi5jb25maWRlbmNlPT09TWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuU1RST05HLGcucmVzb2x2ZShhKX0pfSksZy5wcm9taXNlfTtyZXR1cm57c3lzdGVtOnZvaWQgMCx2aWRlb01vZGVsOnZvaWQgMCxtYW5pZmVzdEV4dDp2b2lkIDAsbWV0cmljc0V4dDp2b2lkIDAsbWV0cmljc01vZGVsOnZvaWQgMCxhYnJDb250cm9sbGVyOnZvaWQgMCxidWZmZXJNYXg6dm9pZCAwLHVwZGF0ZURhdGE6ZnVuY3Rpb24oYSxiKXt2YXIgZz1hLlJlcHJlc2VudGF0aW9uX2FzQXJyYXkubGVuZ3RoLTE7XCJhdWRpb1wiPT09Yj8oYz1nLGU9YSk6XCJ2aWRlb1wiPT09YiYmKGQ9ZyxmPWEpfSxnZXRUb3BRdWFsaXR5SW5kZXg6ZnVuY3Rpb24oYSl7dmFyIGI9bnVsbDtyZXR1cm5cImF1ZGlvXCI9PT1hP2I9YzpcInZpZGVvXCI9PT1hJiYoYj1kKSxifSxkZWNpZGVCdWZmZXJMZW5ndGg6ZnVuY3Rpb24oYixjKXtyZXR1cm4gYT1NZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucy5ERUZBVUxUX01JTl9CVUZGRVJfVElNRTxjJiZjPmI/TWF0aC5tYXgoTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkJ1ZmZlckV4dGVuc2lvbnMuREVGQVVMVF9NSU5fQlVGRkVSX1RJTUUsYik6Yj49Yz9NYXRoLm1pbihjLE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJFeHRlbnNpb25zLkRFRkFVTFRfTUlOX0JVRkZFUl9USU1FKTpNYXRoLm1pbihjLGIpLFEud2hlbihhKX0sZ2V0TGVhc3RCdWZmZXJMZXZlbDpmdW5jdGlvbigpe3ZhciBhPXRoaXMubWV0cmljc01vZGVsLmdldFJlYWRPbmx5TWV0cmljc0ZvcihcInZpZGVvXCIpLGI9dGhpcy5tZXRyaWNzRXh0LmdldEN1cnJlbnRCdWZmZXJMZXZlbChhKSxjPXRoaXMubWV0cmljc01vZGVsLmdldFJlYWRPbmx5TWV0cmljc0ZvcihcImF1ZGlvXCIpLGQ9dGhpcy5tZXRyaWNzRXh0LmdldEN1cnJlbnRCdWZmZXJMZXZlbChjKSxlPW51bGw7cmV0dXJuIGU9bnVsbD09PWJ8fG51bGw9PT1kP251bGwhPT1kP2QubGV2ZWw6bnVsbCE9PWI/Yi5sZXZlbDpudWxsOk1hdGgubWluKGQubGV2ZWwsYi5sZXZlbCl9LGdldFJlcXVpcmVkQnVmZmVyTGVuZ3RoOmZ1bmN0aW9uKGMsZCxlLGYpe3ZhciBpLGo9dGhpcyxrPWoubWV0cmljc01vZGVsLmdldFJlYWRPbmx5TWV0cmljc0ZvcihcInZpZGVvXCIpLGw9ai5tZXRyaWNzTW9kZWwuZ2V0UmVhZE9ubHlNZXRyaWNzRm9yKFwiYXVkaW9cIiksbT1mPj1NZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucy5MT05HX0ZPUk1fQ09OVEVOVF9EVVJBVElPTl9USFJFU0hPTEQsbj1RLmRlZmVyKCksbz1udWxsO3JldHVybiBqLmJ1ZmZlck1heD09PU1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJFeHRlbnNpb25zLkJVRkZFUl9TSVpFX01JTj8oaT1hLG4ucmVzb2x2ZShpKSk6ai5idWZmZXJNYXg9PT1NZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucy5CVUZGRVJfU0laRV9JTkZJTklUWT8oaT1mLG4ucmVzb2x2ZShpKSk6ai5idWZmZXJNYXg9PT1NZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucy5CVUZGRVJfU0laRV9SRVFVSVJFRD8oYj1hLGV8fGN8fChvPWguY2FsbChqKSksUS53aGVuKG8pLnRoZW4oZnVuY3Rpb24oYSl7YSYmKGI9bT9NZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucy5CVUZGRVJfVElNRV9BVF9UT1BfUVVBTElUWV9MT05HX0ZPUk06TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkJ1ZmZlckV4dGVuc2lvbnMuQlVGRkVSX1RJTUVfQVRfVE9QX1FVQUxJVFkpLGk9YitkK01hdGgubWF4KGcuY2FsbChqLGspLGcuY2FsbChqLGwpKSxuLnJlc29sdmUoaSl9KSk6bi5yZWplY3QoXCJpbnZhbGlkIGJ1ZmZlck1heCB2YWx1ZTogXCIrai5idWZmZXJNYXgpLG4ucHJvbWlzZX0sZ2V0QnVmZmVyVGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWI/YTpifX19LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJFeHRlbnNpb25zLkJVRkZFUl9TSVpFX1JFUVVJUkVEPVwicmVxdWlyZWRcIixNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucy5CVUZGRVJfU0laRV9NSU49XCJtaW5cIixNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucy5CVUZGRVJfU0laRV9JTkZJTklUWT1cImluZmluaXR5XCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkJ1ZmZlckV4dGVuc2lvbnMuQlVGRkVSX1RJTUVfQVRfU1RBUlRVUD0xLE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJFeHRlbnNpb25zLkRFRkFVTFRfTUlOX0JVRkZFUl9USU1FPTgsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkJ1ZmZlckV4dGVuc2lvbnMuQlVGRkVSX1RJTUVfQVRfVE9QX1FVQUxJVFk9MzAsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkJ1ZmZlckV4dGVuc2lvbnMuQlVGRkVSX1RJTUVfQVRfVE9QX1FVQUxJVFlfTE9OR19GT1JNPTMwMCxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucy5MT05HX0ZPUk1fQ09OVEVOVF9EVVJBVElPTl9USFJFU0hPTEQ9NjAwLE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJFeHRlbnNpb25zLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1NZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucyxNZWRpYVBsYXllci51dGlscy5DYXBhYmlsaXRpZXM9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIn0sTWVkaWFQbGF5ZXIudXRpbHMuQ2FwYWJpbGl0aWVzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIudXRpbHMuQ2FwYWJpbGl0aWVzLHN1cHBvcnRzTWVkaWFTb3VyY2U6ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYT1cIldlYktpdE1lZGlhU291cmNlXCJpbiB3aW5kb3csYj1cIk1lZGlhU291cmNlXCJpbiB3aW5kb3c7cmV0dXJuIGF8fGJ9LHN1cHBvcnRzTWVkaWFLZXlzOmZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9XCJXZWJLaXRNZWRpYUtleXNcImluIHdpbmRvdyxiPVwiTVNNZWRpYUtleXNcImluIHdpbmRvdyxjPVwiTWVkaWFLZXlzXCJpbiB3aW5kb3c7cmV0dXJuIGF8fGJ8fGN9LHN1cHBvcnRzQ29kZWM6ZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjtpZighKGEgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KSl0aHJvd1wiZWxlbWVudCBtdXN0IGJlIG9mIHR5cGUgSFRNTFZpZGVvRWxlbWVudC5cIjt2YXIgYz1hLmNhblBsYXlUeXBlKGIpO3JldHVyblwicHJvYmFibHlcIj09PWN9fSxNZWRpYVBsYXllci51dGlscy5EZWJ1Zz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhPSEwO3JldHVybntldmVudEJ1czp2b2lkIDAsc2V0TG9nVG9Ccm93c2VyQ29uc29sZTpmdW5jdGlvbihiKXthPWJ9LGdldExvZ1RvQnJvd3NlckNvbnNvbGU6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sbG9nOmZ1bmN0aW9uKGIpe2EmJmNvbnNvbGUubG9nKGIpLHRoaXMuZXZlbnRCdXMuZGlzcGF0Y2hFdmVudCh7dHlwZTpcImxvZ1wiLG1lc3NhZ2U6Yn0pfX19LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5FcnJvckhhbmRsZXI9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtyZXR1cm57ZXZlbnRCdXM6dm9pZCAwLGNhcGFiaWxpdHlFcnJvcjpmdW5jdGlvbihhKXt0aGlzLmV2ZW50QnVzLmRpc3BhdGNoRXZlbnQoe3R5cGU6XCJlcnJvclwiLGVycm9yOlwiY2FwYWJpbGl0eVwiLGV2ZW50OmF9KX0sZG93bmxvYWRFcnJvcjpmdW5jdGlvbihhLGIsYyl7dGhpcy5ldmVudEJ1cy5kaXNwYXRjaEV2ZW50KHt0eXBlOlwiZXJyb3JcIixlcnJvcjpcImRvd25sb2FkXCIsZXZlbnQ6e2lkOmEsdXJsOmIscmVxdWVzdDpjfX0pfSxtYW5pZmVzdEVycm9yOmZ1bmN0aW9uKGEsYixjKXt0aGlzLmV2ZW50QnVzLmRpc3BhdGNoRXZlbnQoe3R5cGU6XCJlcnJvclwiLGVycm9yOlwibWFuaWZlc3RFcnJvclwiLGV2ZW50OnttZXNzYWdlOmEsaWQ6YixtYW5pZmVzdDpjfX0pfSxtZWRpYVNvdXJjZUVycm9yOmZ1bmN0aW9uKGEpe3RoaXMuZXZlbnRCdXMuZGlzcGF0Y2hFdmVudCh7dHlwZTpcImVycm9yXCIsZXJyb3I6XCJtZWRpYXNvdXJjZVwiLGV2ZW50OmF9KX0sbWVkaWFLZXlTZXNzaW9uRXJyb3I6ZnVuY3Rpb24oYSl7dGhpcy5ldmVudEJ1cy5kaXNwYXRjaEV2ZW50KHt0eXBlOlwiZXJyb3JcIixlcnJvcjpcImtleV9zZXNzaW9uXCIsZXZlbnQ6YX0pfSxtZWRpYUtleU1lc3NhZ2VFcnJvcjpmdW5jdGlvbihhKXt0aGlzLmV2ZW50QnVzLmRpc3BhdGNoRXZlbnQoe3R5cGU6XCJlcnJvclwiLGVycm9yOlwia2V5X21lc3NhZ2VcIixldmVudDphfSl9LG1lZGlhS2V5U3lzdGVtU2VsZWN0aW9uRXJyb3I6ZnVuY3Rpb24oYSl7dGhpcy5ldmVudEJ1cy5kaXNwYXRjaEV2ZW50KHt0eXBlOlwiZXJyb3JcIixlcnJvcjpcImtleV9zeXN0ZW1fc2VsZWN0aW9uXCIsZXZlbnQ6YX0pfX19LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5FcnJvckhhbmRsZXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuRXJyb3JIYW5kbGVyfSxNZWRpYVBsYXllci51dGlscy5FdmVudEJ1cz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhLGI9ZnVuY3Rpb24oYixjKXt2YXIgZD0oYz9cIjFcIjpcIjBcIikrYjtyZXR1cm4gZCBpbiBhfHwoYVtkXT1bXSksYVtkXX0sYz1mdW5jdGlvbigpe2E9e319O3JldHVybiBjKCkse2FkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWIoYSxkKSxmPWUuaW5kZXhPZihjKTstMT09PWYmJmUucHVzaChjKX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGMsZCl7dmFyIGU9YihhLGQpLGY9ZS5pbmRleE9mKGMpOy0xIT09ZiYmZS5zcGxpY2UoZiwxKX0sZGlzcGF0Y2hFdmVudDpmdW5jdGlvbihhKXtmb3IodmFyIGM9YihhLnR5cGUsITEpLnNsaWNlKCksZD0wO2Q8Yy5sZW5ndGg7ZCsrKWNbZF0uY2FsbCh0aGlzLGEpO3JldHVybiFhLmRlZmF1bHRQcmV2ZW50ZWR9fX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkZyYWdtZW50Q29udHJvbGxlcj1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhPVtdLGI9ZnVuY3Rpb24oYil7Zm9yKHZhciBjPWEubGVuZ3RoLGQ9MDtjPmQ7ZCsrKWlmKGFbZF0uZ2V0Q29udGV4dCgpPT1iKXJldHVybiBhW2RdO3JldHVybiBudWxsfSxjPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSEwLGM9YS5sZW5ndGgsZD0wO2M+ZDtkKyspaWYoIWFbZF0uaXNSZWFkeSgpKXtiPSExO2JyZWFrfXJldHVybiBifSxkPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspYVtiXS5leGVjdXRlQ3VycmVudFJlcXVlc3QoKX07cmV0dXJue3N5c3RlbTp2b2lkIDAsZGVidWc6dm9pZCAwLHByb2Nlc3M6ZnVuY3Rpb24oYSl7dmFyIGI9bnVsbDtyZXR1cm4gbnVsbCE9PWEmJnZvaWQgMCE9PWEmJmEuYnl0ZUxlbmd0aD4wJiYoYj1uZXcgVWludDhBcnJheShhKSksUS53aGVuKGIpfSxhdHRhY2hCdWZmZXJDb250cm9sbGVyOmZ1bmN0aW9uKGMpe2lmKCFjKXJldHVybiBudWxsO3ZhciBkPWIoYyk7cmV0dXJuIGR8fChkPXRoaXMuc3lzdGVtLmdldE9iamVjdChcImZyYWdtZW50TW9kZWxcIiksZC5zZXRDb250ZXh0KGMpLGEucHVzaChkKSksZH0sZGV0YWNoQnVmZmVyQ29udHJvbGxlcjpmdW5jdGlvbihiKXt2YXIgYz1hLmluZGV4T2YoYik7Yz4tMSYmYS5zcGxpY2UoYywxKX0sb25CdWZmZXJDb250cm9sbGVyU3RhdGVDaGFuZ2U6ZnVuY3Rpb24oKXtjKCkmJmQuY2FsbCh0aGlzKX0saXNGcmFnbWVudExvYWRlZE9yUGVuZGluZzpmdW5jdGlvbihhLGMpe3ZhciBkLGU9YihhKTtyZXR1cm4gZT9kPWUuaXNGcmFnbWVudExvYWRlZE9yUGVuZGluZyhjKTohMX0sZ2V0UGVuZGluZ1JlcXVlc3RzOmZ1bmN0aW9uKGEpe3ZhciBjPWIoYSk7cmV0dXJuIGM/Yy5nZXRQZW5kaW5nUmVxdWVzdHMoKTpudWxsfSxnZXRMb2FkaW5nUmVxdWVzdHM6ZnVuY3Rpb24oYSl7dmFyIGM9YihhKTtyZXR1cm4gYz9jLmdldExvYWRpbmdSZXF1ZXN0cygpOm51bGx9LGlzSW5pdGlhbGl6YXRpb25SZXF1ZXN0OmZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLnR5cGUmJlwiaW5pdGlhbGl6YXRpb24gc2VnbWVudFwiPT09YS50eXBlLnRvTG93ZXJDYXNlKCl9LGdldExvYWRpbmdUaW1lOmZ1bmN0aW9uKGEpe3ZhciBjPWIoYSk7cmV0dXJuIGM/Yy5nZXRMb2FkaW5nVGltZSgpOm51bGx9LGdldEV4ZWN1dGVkUmVxdWVzdEZvclRpbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT9hLmdldEV4ZWN1dGVkUmVxdWVzdEZvclRpbWUoYik6bnVsbH0scmVtb3ZlRXhlY3V0ZWRSZXF1ZXN0OmZ1bmN0aW9uKGEsYil7YSYmYS5yZW1vdmVFeGVjdXRlZFJlcXVlc3QoYil9LHJlbW92ZUV4ZWN1dGVkUmVxdWVzdHNCZWZvcmVUaW1lOmZ1bmN0aW9uKGEsYil7YSYmYS5yZW1vdmVFeGVjdXRlZFJlcXVlc3RzQmVmb3JlVGltZShiKX0sY2FuY2VsUGVuZGluZ1JlcXVlc3RzRm9yTW9kZWw6ZnVuY3Rpb24oYSl7YSYmYS5jYW5jZWxQZW5kaW5nUmVxdWVzdHMoKX0sYWJvcnRSZXF1ZXN0c0Zvck1vZGVsOmZ1bmN0aW9uKGEpe2EmJmEuYWJvcnRSZXF1ZXN0cygpfSxwcmVwYXJlRnJhZ21lbnRGb3JMb2FkaW5nOmZ1bmN0aW9uKGEsYyxkLGUsZixnKXt2YXIgaD1iKGEpO3JldHVybiBoJiZjJiYhdGhpcy5pc0ZyYWdtZW50TG9hZGVkT3JQZW5kaW5nKGEsYyk/KGguYWRkUmVxdWVzdChjKSxoLnNldENhbGxiYWNrcyhkLGUsZixnKSxRLndoZW4oITApKTpRLndoZW4obnVsbCl9fX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkZyYWdtZW50Q29udHJvbGxlci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5GcmFnbWVudENvbnRyb2xsZXJ9LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5GcmFnbWVudExvYWRlcj1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhPTMsYj01MDAsYz1bXSxkPWZ1bmN0aW9uKGEsZSl7dmFyIGY9bmV3IFhNTEh0dHBSZXF1ZXN0LGc9bnVsbCxoPSEwLGk9ITAsaj10aGlzO2MucHVzaChmKSxhLnJlcXVlc3RTdGFydERhdGU9bmV3IERhdGUsYS5maXJzdEJ5dGVEYXRlPWEucmVxdWVzdFN0YXJ0RGF0ZSxmLm9wZW4oXCJHRVRcIixhLnVybCwhMCksZi5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiLGEucmFuZ2UmJmYuc2V0UmVxdWVzdEhlYWRlcihcIlJhbmdlXCIsXCJieXRlcz1cIithLnJhbmdlKSxmLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24oYil7aCYmKGg9ITEsKCFiLmxlbmd0aENvbXB1dGFibGV8fGIubGVuZ3RoQ29tcHV0YWJsZSYmYi50b3RhbCE9Yi5sb2FkZWQpJiYoYS5maXJzdEJ5dGVEYXRlPW5ldyBEYXRlKSl9LGYub25sb2FkPWZ1bmN0aW9uKCl7aWYoIShmLnN0YXR1czwyMDB8fGYuc3RhdHVzPjI5OSkpe2k9ITEsYS5yZXF1ZXN0RW5kRGF0ZT1uZXcgRGF0ZTt2YXIgYj1hLnJlcXVlc3RFbmREYXRlLGM9Zi5yZXNwb25zZSxkPWEuZmlyc3RCeXRlRGF0ZS5nZXRUaW1lKCktYS5yZXF1ZXN0U3RhcnREYXRlLmdldFRpbWUoKSxlPWEucmVxdWVzdEVuZERhdGUuZ2V0VGltZSgpLWEuZmlyc3RCeXRlRGF0ZS5nZXRUaW1lKCksaD1hLnJlcXVlc3RFbmREYXRlLmdldFRpbWUoKS1hLnJlcXVlc3RTdGFydERhdGUuZ2V0VGltZSgpO2ouZGVidWcubG9nKFwic2VnbWVudCBsb2FkZWQ6IChcIitmLnN0YXR1cytcIiwgXCIrZCtcIm1zLCBcIitlK1wibXMsIFwiK2grXCJtcykgXCIrYS51cmwpLGc9ai5tZXRyaWNzTW9kZWwuYWRkSHR0cFJlcXVlc3QoYS5zdHJlYW1UeXBlLG51bGwsYS50eXBlLGEudXJsLG51bGwsYS5yYW5nZSxhLnJlcXVlc3RTdGFydERhdGUsYS5maXJzdEJ5dGVEYXRlLGEucmVxdWVzdEVuZERhdGUsZi5zdGF0dXMsbnVsbCxhLmR1cmF0aW9uKSxqLm1ldHJpY3NNb2RlbC5hcHBlbmRIdHRwVHJhY2UoZyxiLChuZXcgRGF0ZSkuZ2V0VGltZSgpLWIuZ2V0VGltZSgpLFtjLmJ5dGVMZW5ndGhdKSxhLmRlZmVycmVkLnJlc29sdmUoe2RhdGE6YyxyZXF1ZXN0OmF9KX19LGYub25sb2FkZW5kPWYub25lcnJvcj1mdW5jdGlvbigpe2lmKC0xIT09Yy5pbmRleE9mKGYpJiYoYy5zcGxpY2UoYy5pbmRleE9mKGYpLDEpLGkpKXtpPSExLGEucmVxdWVzdEVuZERhdGU9bmV3IERhdGU7dmFyIGg9YS5maXJzdEJ5dGVEYXRlLmdldFRpbWUoKS1hLnJlcXVlc3RTdGFydERhdGUuZ2V0VGltZSgpLGs9YS5yZXF1ZXN0RW5kRGF0ZS5nZXRUaW1lKCktYS5maXJzdEJ5dGVEYXRlLmdldFRpbWUoKSxsPWEucmVxdWVzdEVuZERhdGUuZ2V0VGltZSgpLWEucmVxdWVzdFN0YXJ0RGF0ZS5nZXRUaW1lKCk7ai5kZWJ1Zy5sb2coXCJzZWdtZW50IGxvYWRlZDogKFwiK2Yuc3RhdHVzK1wiLCBcIitoK1wibXMsIFwiK2srXCJtcywgXCIrbCtcIm1zKSBcIithLnVybCksZz1qLm1ldHJpY3NNb2RlbC5hZGRIdHRwUmVxdWVzdChhLnN0cmVhbVR5cGUsbnVsbCxhLnR5cGUsYS51cmwsbnVsbCxhLnJhbmdlLGEucmVxdWVzdFN0YXJ0RGF0ZSxhLmZpcnN0Qnl0ZURhdGUsYS5yZXF1ZXN0RW5kRGF0ZSxmLnN0YXR1cyxudWxsLGEuZHVyYXRpb24pLGU+MD8oai5kZWJ1Zy5sb2coXCJGYWlsZWQgbG9hZGluZyBzZWdtZW50OiBcIithLnVybCtcIiwgcmV0cnkgaW4gXCIrYitcIm1zXCIrXCIgYXR0ZW1wdHM6IFwiK2UpLGUtLSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5jYWxsKGosYSxlKX0sYikpOihqLmRlYnVnLmxvZyhcIkZhaWxlZCBsb2FkaW5nIHNlZ21lbnQ6IFwiK2EudXJsK1wiIG5vIHJldHJ5IGF0dGVtcHRzIGxlZnRcIiksai5lcnJIYW5kbGVyLmRvd25sb2FkRXJyb3IoXCJjb250ZW50XCIsYS51cmwsZiksYS5kZWZlcnJlZC5yZWplY3QoZikpfX0sZi5zZW5kKCl9O3JldHVybnttZXRyaWNzTW9kZWw6dm9pZCAwLGVyckhhbmRsZXI6dm9pZCAwLGRlYnVnOnZvaWQgMCxsb2FkOmZ1bmN0aW9uKGIpe3JldHVybiBiPyhiLmRlZmVycmVkPVEuZGVmZXIoKSxkLmNhbGwodGhpcyxiLGEpLGIuZGVmZXJyZWQucHJvbWlzZSk6US53aGVuKG51bGwpfSxhYm9ydDpmdW5jdGlvbigpe3ZhciBhLGIsZD1jLmxlbmd0aDtmb3IoYT0wO2Q+YTthKz0xKWI9Y1thXSxjW2FdPW51bGwsYi5hYm9ydCgpLGI9bnVsbDtjPVtdfX19LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5GcmFnbWVudExvYWRlci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5GcmFnbWVudExvYWRlcn0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkZyYWdtZW50TW9kZWw9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYSxiLGMsZCxlLGY9W10sZz1bXSxoPVtdLGk9NSxqPWZ1bmN0aW9uKGUpe3ZhciBnLGk9dGhpcztiLmNhbGwoYSxlKSxnPWZ1bmN0aW9uKGIsZCl7aC5zcGxpY2UoaC5pbmRleE9mKGIpLDEpLGYucHVzaChiKSxjLmNhbGwoYSxiLGQpLGIuZGVmZXJyZWQ9bnVsbH0saS5mcmFnbWVudExvYWRlci5sb2FkKGUpLnRoZW4oZy5iaW5kKGEsZSksZC5iaW5kKGEsZSkpfSxrPWZ1bmN0aW9uKGEsYil7dmFyIGM9ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYVtiXTxjW2JdPy0xOmFbYl0+Y1tiXT8xOjB9O2Euc29ydChjKX0sbD1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZT1hLmxlbmd0aC0xO2ZvcihkPWU7ZD49MDtkLT0xKWlmKGM9YVtkXSxjLnVybD09PWIudXJsJiZjLnN0YXJ0VGltZT09PWIuc3RhcnRUaW1lKXJldHVybiEwO3JldHVybiExfSxtPWZ1bmN0aW9uKGEpe3ZhciBiPWYuaW5kZXhPZihhKTstMSE9PWImJmYuc3BsaWNlKGIsMSl9O3JldHVybntzeXN0ZW06dm9pZCAwLGRlYnVnOnZvaWQgMCxmcmFnbWVudExvYWRlcjp2b2lkIDAsc2V0Q29udGV4dDpmdW5jdGlvbihiKXthPWJ9LGdldENvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sYWRkUmVxdWVzdDpmdW5jdGlvbihhKXthJiYoZy5wdXNoKGEpLGsuY2FsbCh0aGlzLGcsXCJpbmRleFwiKSl9LHNldENhbGxiYWNrczpmdW5jdGlvbihhLGYsZyxoKXtiPWEsZT1oLGQ9ZyxjPWZ9LGlzRnJhZ21lbnRMb2FkZWRPclBlbmRpbmc6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGM9dGhpcyxkPSExLGU9Zi5sZW5ndGgtMSxpPWU7aT49MDtpLT0xKWlmKGI9ZltpXSxhLnN0YXJ0VGltZT09PWIuc3RhcnRUaW1lfHxcImNvbXBsZXRlXCI9PT1iLmFjdGlvbiYmYS5hY3Rpb249PT1iLmFjdGlvbil7aWYoYy5kZWJ1Zy5sb2coYS5zdHJlYW1UeXBlK1wiIEZyYWdtZW50IGFscmVhZHkgbG9hZGVkIGZvciB0aW1lOiBcIithLnN0YXJ0VGltZSksYS51cmw9PT1iLnVybCl7Yy5kZWJ1Zy5sb2coYS5zdHJlYW1UeXBlK1wiIEZyYWdtZW50IHVybCBhbHJlYWR5IGxvYWRlZDogXCIrYS51cmwpLGQ9ITA7YnJlYWt9bShhKX1yZXR1cm4gZHx8KGQ9bC5jYWxsKGMsZyxhKXx8bC5jYWxsKGMsaCxhKSksZH0saXNSZWFkeTpmdW5jdGlvbigpe3JldHVybiBhLmlzUmVhZHkoKX0sZ2V0UGVuZGluZ1JlcXVlc3RzOmZ1bmN0aW9uKCl7cmV0dXJuIGd9LGdldExvYWRpbmdSZXF1ZXN0czpmdW5jdGlvbigpe3JldHVybiBofSxnZXRMb2FkaW5nVGltZTpmdW5jdGlvbigpe3ZhciBhLGIsYz0wO2ZvcihiPWYubGVuZ3RoLTE7Yj49MDtiLT0xKWlmKGE9ZltiXSxhLnJlcXVlc3RFbmREYXRlIGluc3RhbmNlb2YgRGF0ZSYmYS5maXJzdEJ5dGVEYXRlIGluc3RhbmNlb2YgRGF0ZSl7Yz1hLnJlcXVlc3RFbmREYXRlLmdldFRpbWUoKS1hLmZpcnN0Qnl0ZURhdGUuZ2V0VGltZSgpO2JyZWFrfXJldHVybiBjfSxnZXRFeGVjdXRlZFJlcXVlc3RGb3JUaW1lOmZ1bmN0aW9uKGEpe3ZhciBiLGM9Zi5sZW5ndGgtMSxkPTAvMCxlPTAvMCxnPW51bGw7Zm9yKGI9YztiPj0wO2ItPTEpaWYoZz1mW2JdLGQ9Zy5zdGFydFRpbWUsZT1kK2cuZHVyYXRpb24sIWlzTmFOKGQpJiYhaXNOYU4oZSkmJmE+ZCYmZT5hKXJldHVybiBnO3JldHVybiBudWxsfSxyZW1vdmVFeGVjdXRlZFJlcXVlc3Q6ZnVuY3Rpb24oYSl7bS5jYWxsKHRoaXMsYSl9LHJlbW92ZUV4ZWN1dGVkUmVxdWVzdHNCZWZvcmVUaW1lOmZ1bmN0aW9uKGEpe3ZhciBiLGM9Zi5sZW5ndGgtMSxkPTAvMCxlPW51bGw7Zm9yKGI9YztiPj0wO2ItPTEpZT1mW2JdLGQ9ZS5zdGFydFRpbWUsIWlzTmFOKGQpJiZhPmQmJm0uY2FsbCh0aGlzLGUpfSxjYW5jZWxQZW5kaW5nUmVxdWVzdHM6ZnVuY3Rpb24oKXtnPVtdfSxhYm9ydFJlcXVlc3RzOmZ1bmN0aW9uKCl7dGhpcy5mcmFnbWVudExvYWRlci5hYm9ydCgpLGg9W119LGV4ZWN1dGVDdXJyZW50UmVxdWVzdDpmdW5jdGlvbigpe3ZhciBiLGM9dGhpcztpZigwIT09Zy5sZW5ndGgmJiEoaC5sZW5ndGg+PWkpKXN3aXRjaChiPWcuc2hpZnQoKSxiLmFjdGlvbil7Y2FzZVwiY29tcGxldGVcIjpmLnB1c2goYiksZS5jYWxsKGEsYik7YnJlYWs7Y2FzZVwiZG93bmxvYWRcIjpoLnB1c2goYiksai5jYWxsKGMsYik7YnJlYWs7ZGVmYXVsdDp0aGlzLmRlYnVnLmxvZyhcIlVua25vd24gcmVxdWVzdCBhY3Rpb24uXCIpfX19fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuRnJhZ21lbnRNb2RlbC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5GcmFnbWVudE1vZGVsfSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuTWFuaWZlc3RMb2FkZXI9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYT0zLGI9NTAwLGM9bnVsbCxkPWZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7cmV0dXJuLTEhPT1hLmluZGV4T2YoXCIvXCIpJiYoYj1hLnN1YnN0cmluZygwLGEubGFzdEluZGV4T2YoXCIvXCIpKzEpKSxifSxlPWZ1bmN0aW9uKGEsZil7dmFyIGc9ZChhKSxoPW5ldyBYTUxIdHRwUmVxdWVzdCxpPW5ldyBEYXRlLGo9ITAsaz10aGlzO3RoaXMuZGVidWcubG9nKFwiU3RhcnQgbG9hZGluZyBtYW5pZmVzdDogXCIrYSksaC5vcGVuKFwiR0VUXCIsYSwhMCksaC5vbmxvYWQ9ZnVuY3Rpb24oKXtoLnN0YXR1czwyMDB8fGguc3RhdHVzPjI5OXx8KGo9ITEsay5tZXRyaWNzTW9kZWwuYWRkSHR0cFJlcXVlc3QoXCJzdHJlYW1cIixudWxsLFwiTVBEXCIsYSxudWxsLG51bGwsaSxuZXcgRGF0ZSxoLnN0YXR1cyxudWxsLG51bGwpLGsucGFyc2VyLnBhcnNlKGgucmVzcG9uc2VUZXh0LGcpLnRoZW4oZnVuY3Rpb24oYil7Yi5tcGRVcmw9YSxjLnJlc29sdmUoYil9LGZ1bmN0aW9uKCl7Yy5yZWplY3QoaCl9KSl9LGgub25sb2FkZW5kPWgub25lcnJvcj1mdW5jdGlvbigpe2omJihqPSExLGsubWV0cmljc01vZGVsLmFkZEh0dHBSZXF1ZXN0KFwic3RyZWFtXCIsbnVsbCxcIk1QRFwiLGEsbnVsbCxudWxsLGksbmV3IERhdGUsaC5zdGF0dXMsbnVsbCxudWxsKSxmPjA/KGsuZGVidWcubG9nKFwiRmFpbGVkIGxvYWRpbmcgbWFuaWZlc3Q6IFwiK2ErXCIsIHJldHJ5IGluIFwiK2IrXCJtc1wiK1wiIGF0dGVtcHRzOiBcIitmKSxmLS0sc2V0VGltZW91dChmdW5jdGlvbigpe2UuY2FsbChrLGEsZil9LGIpKTooay5kZWJ1Zy5sb2coXCJGYWlsZWQgbG9hZGluZyBtYW5pZmVzdDogXCIrYStcIiBubyByZXRyeSBhdHRlbXB0cyBsZWZ0XCIpLGsuZXJySGFuZGxlci5kb3dubG9hZEVycm9yKFwibWFuaWZlc3RcIixhLGgpLGMucmVqZWN0KGgpKSl9LGguc2VuZCgpfTtyZXR1cm57ZGVidWc6dm9pZCAwLHBhcnNlcjp2b2lkIDAsZXJySGFuZGxlcjp2b2lkIDAsbWV0cmljc01vZGVsOnZvaWQgMCxsb2FkOmZ1bmN0aW9uKGIpe3JldHVybiBjPVEuZGVmZXIoKSxlLmNhbGwodGhpcyxiLGEpLGMucHJvbWlzZX19fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuTWFuaWZlc3RMb2FkZXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuTWFuaWZlc3RMb2FkZXJ9LE1lZGlhUGxheWVyLm1vZGVscy5NYW5pZmVzdE1vZGVsPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE7cmV0dXJue2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldFZhbHVlOmZ1bmN0aW9uKGIpe2E9Yn19fSxNZWRpYVBsYXllci5tb2RlbHMuTWFuaWZlc3RNb2RlbC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLm1vZGVscy5NYW5pZmVzdE1vZGVsfSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuTWFuaWZlc3RVcGRhdGVyPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9MC8wLGI9bnVsbCxjPW51bGwsZD1mdW5jdGlvbigpe251bGwhPT1iJiYoY2xlYXJJbnRlcnZhbChiKSxiPW51bGwpfSxlPWZ1bmN0aW9uKCl7ZC5jYWxsKHRoaXMpLGlzTmFOKGEpfHwodGhpcy5kZWJ1Zy5sb2coXCJSZWZyZXNoIG1hbmlmZXN0IGluIFwiK2ErXCIgc2Vjb25kcy5cIiksYj1zZXRJbnRlcnZhbChjLmJpbmQodGhpcyksMWUzKmEsdGhpcykpfSxmPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPWIubWFuaWZlc3RNb2RlbC5nZXRWYWx1ZSgpO3ZvaWQgMCE9PWMmJm51bGwhPT1jJiZiLm1hbmlmZXN0RXh0LmdldFJlZnJlc2hEZWxheShjKS50aGVuKGZ1bmN0aW9uKGMpe2E9YyxlLmNhbGwoYil9KX07cmV0dXJuIGM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5tYW5pZmVzdE1vZGVsLmdldFZhbHVlKCksYz1iLm1wZFVybDtiLmhhc093blByb3BlcnR5KFwiTG9jYXRpb25cIikmJihjPWIuTG9jYXRpb24pLGEuZGVidWcubG9nKFwiUmVmcmVzaCBtYW5pZmVzdCBAIFwiK2MpLGEubWFuaWZlc3RMb2FkZXIubG9hZChjKS50aGVuKGZ1bmN0aW9uKGIpe2EubWFuaWZlc3RNb2RlbC5zZXRWYWx1ZShiKSxhLmRlYnVnLmxvZyhcIk1hbmlmZXN0IGhhcyBiZWVuIHJlZnJlc2hlZC5cIiksYS5kZWJ1Zy5sb2coYiksZi5jYWxsKGEpLGEuc3lzdGVtLm5vdGlmeShcIm1hbmlmZXN0VXBkYXRlZFwiKX0pfSx7ZGVidWc6dm9pZCAwLHN5c3RlbTp2b2lkIDAsbWFuaWZlc3RNb2RlbDp2b2lkIDAsbWFuaWZlc3RFeHQ6dm9pZCAwLG1hbmlmZXN0TG9hZGVyOnZvaWQgMCxzZXR1cDpmdW5jdGlvbigpe2YuY2FsbCh0aGlzKX0saW5pdDpmdW5jdGlvbigpe2YuY2FsbCh0aGlzKX0sc3RvcDpmdW5jdGlvbigpe2QuY2FsbCh0aGlzKX19fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuTWFuaWZlc3RVcGRhdGVyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLk1hbmlmZXN0VXBkYXRlcn0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLk1lZGlhU291cmNlRXh0ZW5zaW9ucz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwifSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuTWVkaWFTb3VyY2VFeHRlbnNpb25zLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLk1lZGlhU291cmNlRXh0ZW5zaW9ucyxjcmVhdGVNZWRpYVNvdXJjZTpmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhPVwiV2ViS2l0TWVkaWFTb3VyY2VcImluIHdpbmRvdyxiPVwiTWVkaWFTb3VyY2VcImluIHdpbmRvdztyZXR1cm4gYj9RLndoZW4obmV3IE1lZGlhU291cmNlKTphP1Eud2hlbihuZXcgV2ViS2l0TWVkaWFTb3VyY2UpOm51bGx9LGF0dGFjaE1lZGlhU291cmNlOmZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGIuc2V0U291cmNlKHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGEpKSxRLndoZW4oITApfSxkZXRhY2hNZWRpYVNvdXJjZTpmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtyZXR1cm4gYS5zZXRTb3VyY2UoXCJcIiksUS53aGVuKCEwKX0sc2V0RHVyYXRpb246ZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjtyZXR1cm4gYS5kdXJhdGlvbj1iLFEud2hlbihhLmR1cmF0aW9uKX0sc2lnbmFsRW5kT2ZTdHJlYW06ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGEuZW5kT2ZTdHJlYW0oKSxRLndoZW4oITApfX0sTWVkaWFQbGF5ZXIubW9kZWxzLk1ldHJpY3NNb2RlbD1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3JldHVybntzeXN0ZW06dm9pZCAwLHN0cmVhbU1ldHJpY3M6e30sY2xlYXJDdXJyZW50TWV0cmljc0ZvclR5cGU6ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMuc3RyZWFtTWV0cmljc1thXX0sY2xlYXJBbGxDdXJyZW50TWV0cmljczpmdW5jdGlvbigpe3RoaXMuc3RyZWFtTWV0cmljcz17fX0sZ2V0UmVhZE9ubHlNZXRyaWNzRm9yOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnN0cmVhbU1ldHJpY3MuaGFzT3duUHJvcGVydHkoYSk/dGhpcy5zdHJlYW1NZXRyaWNzW2FdOm51bGx9LGdldE1ldHJpY3NGb3I6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIHRoaXMuc3RyZWFtTWV0cmljcy5oYXNPd25Qcm9wZXJ0eShhKT9iPXRoaXMuc3RyZWFtTWV0cmljc1thXTooYj10aGlzLnN5c3RlbS5nZXRPYmplY3QoXCJtZXRyaWNzXCIpLHRoaXMuc3RyZWFtTWV0cmljc1thXT1iKSxifSxhZGRUY3BDb25uZWN0aW9uOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1uZXcgTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5UQ1BDb25uZWN0aW9uO3JldHVybiBnLnRjcGlkPWIsZy5kZXN0PWMsZy50b3Blbj1kLGcudGNsb3NlPWUsZy50Y29ubmVjdD1mLHRoaXMuZ2V0TWV0cmljc0ZvcihhKS5UY3BMaXN0LnB1c2goZyksZ30sYWRkSHR0cFJlcXVlc3Q6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGksaixrLGwpe3ZhciBtPW5ldyBNZWRpYVBsYXllci52by5tZXRyaWNzLkhUVFBSZXF1ZXN0O3JldHVybiBtLnRjcGlkPWIsbS50eXBlPWMsbS51cmw9ZCxtLmFjdHVhbHVybD1lLG0ucmFuZ2U9ZixtLnRyZXF1ZXN0PWcsbS50cmVzcG9uc2U9aCxtLnRmaW5pc2g9aSxtLnJlc3BvbnNlY29kZT1qLG0uaW50ZXJ2YWw9ayxtLm1lZGlhZHVyYXRpb249bCx0aGlzLmdldE1ldHJpY3NGb3IoYSkuSHR0cExpc3QucHVzaChtKSxtfSxhcHBlbmRIdHRwVHJhY2U6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bmV3IE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuSFRUUFJlcXVlc3QuVHJhY2U7cmV0dXJuIGUucz1iLGUuZD1jLGUuYj1kLGEudHJhY2UucHVzaChlKSxlfSxhZGRSZXByZXNlbnRhdGlvblN3aXRjaDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPW5ldyBNZWRpYVBsYXllci52by5tZXRyaWNzLlJlcHJlc2VudGF0aW9uU3dpdGNoO3JldHVybiBmLnQ9YixmLm10PWMsZi50bz1kLGYubHRvPWUsdGhpcy5nZXRNZXRyaWNzRm9yKGEpLlJlcFN3aXRjaExpc3QucHVzaChmKSxmfSxhZGRCdWZmZXJMZXZlbDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9bmV3IE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuQnVmZmVyTGV2ZWw7cmV0dXJuIGQudD1iLGQubGV2ZWw9Yyx0aGlzLmdldE1ldHJpY3NGb3IoYSkuQnVmZmVyTGV2ZWwucHVzaChkKSxkfSxhZGRQbGF5TGlzdDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1uZXcgTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdDtyZXR1cm4gZS5zdGFydD1iLGUubXN0YXJ0PWMsZS5zdGFydHR5cGU9ZCx0aGlzLmdldE1ldHJpY3NGb3IoYSkuUGxheUxpc3QucHVzaChlKSxlfSxhcHBlbmRQbGF5TGlzdFRyYWNlOmZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCl7dmFyIGk9bmV3IE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUGxheUxpc3QuVHJhY2U7cmV0dXJuIGkucmVwcmVzZW50YXRpb25pZD1iLGkuc3VicmVwbGV2ZWw9YyxpLnN0YXJ0PWQsaS5tc3RhcnQ9ZSxpLmR1cmF0aW9uPWYsaS5wbGF5YmFja3NwZWVkPWcsaS5zdG9wcmVhc29uPWgsYS50cmFjZS5wdXNoKGkpLGl9fX0sTWVkaWFQbGF5ZXIubW9kZWxzLk1ldHJpY3NNb2RlbC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLm1vZGVscy5NZXRyaWNzTW9kZWx9LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5Qcm90ZWN0aW9uQ29udHJvbGxlcj1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhPW51bGwsYj1udWxsLGM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztiLnByb3RlY3Rpb25Nb2RlbC5yZW1vdmVLZXlTeXN0ZW0oYSl9LGQ9ZnVuY3Rpb24oYSxjKXtmb3IodmFyIGQ9dGhpcyxlPTA7ZTxiLmxlbmd0aDsrK2UpZm9yKHZhciBmPTA7ZjxjLmxlbmd0aDsrK2YpaWYoYltlXS5pc1N1cHBvcnRlZChjW2ZdKSYmZC5wcm90ZWN0aW9uRXh0LnN1cHBvcnRzQ29kZWMoYltlXS5rZXlzVHlwZVN0cmluZyxhKSl7dmFyIGc9ZC5tYW5pZmVzdEV4dC5nZXRLSUQoY1tmXSk7cmV0dXJuIGd8fChnPVwidW5rbm93blwiKSxkLnByb3RlY3Rpb25Nb2RlbC5hZGRLZXlTeXN0ZW0oZyxjW2ZdLGJbZV0pLGQuZGVidWcubG9nKFwiRFJNOiBTZWxlY3RlZCBLZXkgU3lzdGVtOiBcIitiW2VdLmtleXNUeXBlU3RyaW5nK1wiIEZvciBLSUQ6IFwiK2cpLGd9dGhyb3cgbmV3IEVycm9yKFwiRFJNOiBUaGUgcHJvdGVjdGlvbiBzeXN0ZW0gZm9yIHRoaXMgY29udGVudCBpcyBub3Qgc3VwcG9ydGVkLlwiKX0sZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcyxlPW51bGwsZj1udWxsO2QucHJvdGVjdGlvbk1vZGVsLm5lZWRUb0FkZEtleVNlc3Npb24oYSkmJihmPWQucHJvdGVjdGlvbk1vZGVsLmdldEluaXREYXRhKGEpLCFmJiZjPyhmPWMsZC5kZWJ1Zy5sb2coXCJEUk06IFVzaW5nIGluaXRkYXRhIGZyb20gbmVlZHNrZXkgZXZlbnQuIGxlbmd0aDogXCIrZi5sZW5ndGgpKTpmJiZkLmRlYnVnLmxvZyhcIkRSTTogVXNpbmcgaW5pdGRhdGEgZnJvbSBwcmhlYWRlciBpbiBtcGQuIGxlbmd0aDogXCIrZi5sZW5ndGgpLGY/KGU9ZC5wcm90ZWN0aW9uTW9kZWwuYWRkS2V5U2Vzc2lvbihhLGIsZiksZC5kZWJ1Zy5sb2coXCJEUk06IEFkZGVkIEtleSBTZXNzaW9uIFtcIitlLnNlc3Npb25JZCtcIl0gZm9yIEtJRDogXCIrYStcIiB0eXBlOiBcIitiK1wiIGluaXREYXRhIGxlbmd0aDogXCIrZi5sZW5ndGgpKTpkLmRlYnVnLmxvZyhcIkRSTTogaW5pdGRhdGEgaXMgbnVsbC5cIikpfSxmPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGY9dGhpcztyZXR1cm4gZT1mLnByb3RlY3Rpb25Nb2RlbC51cGRhdGVGcm9tTWVzc2FnZShhLGMsZCksZS50aGVuKGZ1bmN0aW9uKGEpe2IudXBkYXRlKGEpfSksZX07cmV0dXJue3N5c3RlbTp2b2lkIDAsZGVidWc6dm9pZCAwLG1hbmlmZXN0RXh0OnZvaWQgMCxjYXBhYmlsaXRpZXM6dm9pZCAwLHZpZGVvTW9kZWw6dm9pZCAwLHByb3RlY3Rpb25Nb2RlbDp2b2lkIDAscHJvdGVjdGlvbkV4dDp2b2lkIDAsc2V0dXA6ZnVuY3Rpb24oKXtiPXRoaXMucHJvdGVjdGlvbkV4dC5nZXRLZXlTeXN0ZW1zKCl9LGluaXQ6ZnVuY3Rpb24oYixjKXt0aGlzLnZpZGVvTW9kZWw9Yix0aGlzLnByb3RlY3Rpb25Nb2RlbD1jLGE9dGhpcy52aWRlb01vZGVsLmdldEVsZW1lbnQoKVxufSxzZWxlY3RLZXlTeXN0ZW06ZCxlbnN1cmVLZXlTZXNzaW9uOmUsdXBkYXRlRnJvbU1lc3NhZ2U6Zix0ZWFyZG93bktleVN5c3RlbTpjfX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlByb3RlY3Rpb25Db250cm9sbGVyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlByb3RlY3Rpb25Db250cm9sbGVyfSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuUHJvdGVjdGlvbkV4dGVuc2lvbnM9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIn0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlByb3RlY3Rpb25FeHRlbnNpb25zLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlByb3RlY3Rpb25FeHRlbnNpb25zLHN1cHBvcnRzQ29kZWM6ZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjt2YXIgYz1cIldlYktpdE1lZGlhS2V5c1wiaW4gd2luZG93LGQ9XCJNU01lZGlhS2V5c1wiaW4gd2luZG93LGU9XCJNZWRpYUtleXNcImluIHdpbmRvdztyZXR1cm4gZT9NZWRpYUtleXMuaXNUeXBlU3VwcG9ydGVkKGEsYik6Yz9XZWJLaXRNZWRpYUtleXMuaXNUeXBlU3VwcG9ydGVkKGEsYik6ZD9NU01lZGlhS2V5cy5pc1R5cGVTdXBwb3J0ZWQoYSxiKTohMX0sY3JlYXRlTWVkaWFLZXlzOmZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO3ZhciBiPVwiV2ViS2l0TWVkaWFLZXlzXCJpbiB3aW5kb3csYz1cIk1TTWVkaWFLZXlzXCJpbiB3aW5kb3csZD1cIk1lZGlhS2V5c1wiaW4gd2luZG93O3JldHVybiBkP25ldyBNZWRpYUtleXMoYSk6Yj9uZXcgV2ViS2l0TWVkaWFLZXlzKGEpOmM/bmV3IE1TTWVkaWFLZXlzKGEpOm51bGx9LHNldE1lZGlhS2V5OmZ1bmN0aW9uKGEsYil7dmFyIGM9XCJXZWJLaXRTZXRNZWRpYUtleXNcImluIGEsZD1cIm1zU2V0TWVkaWFLZXlzXCJpbiBhLGU9XCJTZXRNZWRpYUtleXNcImluIGE7cmV0dXJuIGU/YS5TZXRNZWRpYUtleXMoYik6Yz9hLldlYktpdFNldE1lZGlhS2V5cyhiKTpkP2EubXNTZXRNZWRpYUtleXMoYik6KHRoaXMuZGVidWcubG9nKFwibm8gc2V0bWVkaWFrZXlzIGZ1bmN0aW9uIGluIGVsZW1lbnRcIiksdm9pZCAwKX0sY3JlYXRlU2Vzc2lvbjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEuY3JlYXRlU2Vzc2lvbihiLGMpfSxnZXRLZXlTeXN0ZW1zOmZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oYSxiKXt2YXIgYz1RLmRlZmVyKCksZD1udWxsLGU9W10sZj1uZXcgRE9NUGFyc2VyLGc9Zi5wYXJzZUZyb21TdHJpbmcoYSxcImFwcGxpY2F0aW9uL3htbFwiKTtpZighZy5nZXRFbGVtZW50c0J5VGFnTmFtZShcIkNoYWxsZW5nZVwiKVswXSlyZXR1cm4gYy5yZWplY3QoXCJEUk06IHBsYXlyZWFkeSB1cGRhdGUsIGNhbiBub3QgZmluZCBDaGFsbGVuZ2UgaW4ga2V5TWVzc2FnZVwiKSxjLnByb21pc2U7dmFyIGg9Zy5nZXRFbGVtZW50c0J5VGFnTmFtZShcIkNoYWxsZW5nZVwiKVswXS5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZTtoJiYoZD1CQVNFNjQuZGVjb2RlKGgpKTt2YXIgaT1nLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwibmFtZVwiKSxqPWcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ2YWx1ZVwiKTtpZihpLmxlbmd0aCE9ai5sZW5ndGgpcmV0dXJuIGMucmVqZWN0KFwiRFJNOiBwbGF5cmVhZHkgdXBkYXRlLCBpbnZhbGlkIGhlYWRlciBuYW1lL3ZhbHVlIHBhaXIgaW4ga2V5TWVzc2FnZVwiKSxjLnByb21pc2U7Zm9yKHZhciBrPTA7azxpLmxlbmd0aDtrKyspZVtrXT17bmFtZTppW2tdLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlLHZhbHVlOmpba10uY2hpbGROb2Rlc1swXS5ub2RlVmFsdWV9O3ZhciBsPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gbC5vbmxvYWQ9ZnVuY3Rpb24oKXsyMDA9PWwuc3RhdHVzP2MucmVzb2x2ZShuZXcgVWludDhBcnJheShsLnJlc3BvbnNlKSk6Yy5yZWplY3QoJ0RSTTogcGxheXJlYWR5IHVwZGF0ZSwgWEhSIHN0YXR1cyBpcyBcIicrbC5zdGF0dXNUZXh0KydcIiAoJytsLnN0YXR1cytcIiksIGV4cGVjdGVkIHRvIGJlIDIwMC4gcmVhZHlTdGF0ZSBpcyBcIitsLnJlYWR5U3RhdGUpfSxsLm9uYWJvcnQ9ZnVuY3Rpb24oKXtjLnJlamVjdCgnRFJNOiBwbGF5cmVhZHkgdXBkYXRlLCBYSFIgYWJvcnRlZC4gc3RhdHVzIGlzIFwiJytsLnN0YXR1c1RleHQrJ1wiICgnK2wuc3RhdHVzK1wiKSwgcmVhZHlTdGF0ZSBpcyBcIitsLnJlYWR5U3RhdGUpfSxsLm9uZXJyb3I9ZnVuY3Rpb24oKXtjLnJlamVjdCgnRFJNOiBwbGF5cmVhZHkgdXBkYXRlLCBYSFIgZXJyb3IuIHN0YXR1cyBpcyBcIicrbC5zdGF0dXNUZXh0KydcIiAoJytsLnN0YXR1cytcIiksIHJlYWR5U3RhdGUgaXMgXCIrbC5yZWFkeVN0YXRlKX0sbC5vcGVuKFwiUE9TVFwiLGIpLGwucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIixlJiZlLmZvckVhY2goZnVuY3Rpb24oYSl7bC5zZXRSZXF1ZXN0SGVhZGVyKGEubmFtZSxhLnZhbHVlKX0pLGwuc2VuZChkKSxjLnByb21pc2V9LGI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09PWEmJjA9PT1iLmxlbmd0aH0sYz1mdW5jdGlvbihhKXt2YXIgYj0wLGM9MCxkPTAsZT1uZXcgVWludDhBcnJheShbMTEyLDExNSwxMTUsMTA0LDAsMCwwLDBdKSxmPW5ldyBVaW50OEFycmF5KFsxNTQsNCwyNDAsMTIxLDE1Miw2NCw2NiwxMzQsMTcxLDE0NiwyMzAsOTEsMjI0LDEzNiw5NSwxNDldKSxnPW51bGwsaD1udWxsLGk9bnVsbCxqPW51bGw7aWYoXCJwcm9cImluIGEpZz1CQVNFNjQuZGVjb2RlQXJyYXkoYS5wcm8uX190ZXh0KTtlbHNle2lmKCEoXCJwcmhlYWRlclwiaW4gYSkpcmV0dXJuIG51bGw7Zz1CQVNFNjQuZGVjb2RlQXJyYXkoYS5wcmhlYWRlci5fX3RleHQpfXJldHVybiBjPWcubGVuZ3RoLGQ9NCtlLmxlbmd0aCtmLmxlbmd0aCs0K2MsaD1uZXcgQXJyYXlCdWZmZXIoZCksaT1uZXcgVWludDhBcnJheShoKSxqPW5ldyBEYXRhVmlldyhoKSxqLnNldFVpbnQzMihiLGQpLGIrPTQsaS5zZXQoZSxiKSxiKz1lLmxlbmd0aCxpLnNldChmLGIpLGIrPWYubGVuZ3RoLGouc2V0VWludDMyKGIsYyksYis9NCxpLnNldChnLGIpLGIrPWMsaX07cmV0dXJuW3tzY2hlbWVJZFVyaTpcInVybjp1dWlkOjlhMDRmMDc5LTk4NDAtNDI4Ni1hYjkyLWU2NWJlMDg4NWY5NVwiLGtleXNUeXBlU3RyaW5nOlwiY29tLm1pY3Jvc29mdC5wbGF5cmVhZHlcIixpc1N1cHBvcnRlZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zY2hlbWVJZFVyaT09PWEuc2NoZW1lSWRVcmkudG9Mb3dlckNhc2UoKX0sbmVlZFRvQWRkS2V5U2Vzc2lvbjpiLGdldEluaXREYXRhOmMsZ2V0VXBkYXRlOmF9LHtzY2hlbWVJZFVyaTpcInVybjptcGVnOmRhc2g6bXA0cHJvdGVjdGlvbjoyMDExXCIsa2V5c1R5cGVTdHJpbmc6XCJjb20ubWljcm9zb2Z0LnBsYXlyZWFkeVwiLGlzU3VwcG9ydGVkOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNjaGVtZUlkVXJpPT09YS5zY2hlbWVJZFVyaS50b0xvd2VyQ2FzZSgpJiZcImNlbmNcIj09PWEudmFsdWUudG9Mb3dlckNhc2UoKX0sbmVlZFRvQWRkS2V5U2Vzc2lvbjpiLGdldEluaXREYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGdldFVwZGF0ZTphfSx7c2NoZW1lSWRVcmk6XCJ1cm46dXVpZDowMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixrZXlzVHlwZVN0cmluZzpcIndlYmtpdC1vcmcudzMuY2xlYXJrZXlcIixpc1N1cHBvcnRlZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zY2hlbWVJZFVyaT09PWEuc2NoZW1lSWRVcmkudG9Mb3dlckNhc2UoKX0sbmVlZFRvQWRkS2V5U2Vzc2lvbjpmdW5jdGlvbigpe3JldHVybiEwfSxnZXRJbml0RGF0YTpmdW5jdGlvbigpe3JldHVybiBudWxsfSxnZXRVcGRhdGU6ZnVuY3Rpb24oYSl7cmV0dXJuIFEud2hlbihhKX19XX0sYWRkS2V5OmZ1bmN0aW9uKGEsYixjLGQsZSl7YS53ZWJraXRBZGRLZXkoYixjLGQsZSl9LGdlbmVyYXRlS2V5UmVxdWVzdDpmdW5jdGlvbihhLGIsYyl7YS53ZWJraXRHZW5lcmF0ZUtleVJlcXVlc3QoYixjKX0sbGlzdGVuVG9OZWVkS2V5OmZ1bmN0aW9uKGEsYil7YS5saXN0ZW4oXCJ3ZWJraXRuZWVka2V5XCIsYiksYS5saXN0ZW4oXCJtc25lZWRrZXlcIixiKSxhLmxpc3RlbihcIm5lZWRLZXlcIixiKX0sbGlzdGVuVG9LZXlFcnJvcjpmdW5jdGlvbihhLGIpe2EuYWRkRXZlbnRMaXN0ZW5lcihcIndlYmtpdGtleWVycm9yXCIsYiwhMSksYS5hZGRFdmVudExpc3RlbmVyKFwibXNrZXllcnJvclwiLGIsITEpLGEuYWRkRXZlbnRMaXN0ZW5lcihcImtleWVycm9yXCIsYiwhMSl9LGxpc3RlblRvS2V5TWVzc2FnZTpmdW5jdGlvbihhLGIpe2EuYWRkRXZlbnRMaXN0ZW5lcihcIndlYmtpdGtleW1lc3NhZ2VcIixiLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoXCJtc2tleW1lc3NhZ2VcIixiLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXltZXNzYWdlXCIsYiwhMSl9LGxpc3RlblRvS2V5QWRkZWQ6ZnVuY3Rpb24oYSxiKXthLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJraXRrZXlhZGRlZFwiLGIsITEpLGEuYWRkRXZlbnRMaXN0ZW5lcihcIm1za2V5YWRkZWRcIixiLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlhZGRlZFwiLGIsITEpfSx1bmxpc3RlblRvS2V5RXJyb3I6ZnVuY3Rpb24oYSxiKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3ZWJraXRrZXllcnJvclwiLGIpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1za2V5ZXJyb3JcIixiKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXllcnJvclwiLGIpfSx1bmxpc3RlblRvS2V5TWVzc2FnZTpmdW5jdGlvbihhLGIpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndlYmtpdGtleW1lc3NhZ2VcIixiKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtc2tleW1lc3NhZ2VcIixiKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXltZXNzYWdlXCIsYil9LHVubGlzdGVuVG9LZXlBZGRlZDpmdW5jdGlvbihhLGIpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndlYmtpdGtleWFkZGVkXCIsYiksYS5yZW1vdmVFdmVudExpc3RlbmVyKFwibXNrZXlhZGRlZFwiLGIpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWFkZGVkXCIsYil9fSxNZWRpYVBsYXllci5tb2RlbHMuUHJvdGVjdGlvbk1vZGVsPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9bnVsbCxiPW51bGwsYz1udWxsLGQ9bnVsbCxlPVtdO3JldHVybntzeXN0ZW06dm9pZCAwLHZpZGVvTW9kZWw6dm9pZCAwLHByb3RlY3Rpb25FeHQ6dm9pZCAwLHNldHVwOmZ1bmN0aW9uKCl7YT10aGlzLnZpZGVvTW9kZWwuZ2V0RWxlbWVudCgpfSxpbml0OmZ1bmN0aW9uKGIpe3RoaXMudmlkZW9Nb2RlbD1iLGE9dGhpcy52aWRlb01vZGVsLmdldEVsZW1lbnQoKX0sYWRkS2V5U2Vzc2lvbjpmdW5jdGlvbihhLGYsZyl7dmFyIGg9bnVsbDtyZXR1cm4gaD10aGlzLnByb3RlY3Rpb25FeHQuY3JlYXRlU2Vzc2lvbihlW2FdLmtleXMsZixnKSx0aGlzLnByb3RlY3Rpb25FeHQubGlzdGVuVG9LZXlBZGRlZChoLGIpLHRoaXMucHJvdGVjdGlvbkV4dC5saXN0ZW5Ub0tleUVycm9yKGgsYyksdGhpcy5wcm90ZWN0aW9uRXh0Lmxpc3RlblRvS2V5TWVzc2FnZShoLGQpLGVbYV0uaW5pdERhdGE9ZyxlW2FdLmtleVNlc3Npb25zLnB1c2goaCksaH0sYWRkS2V5U3lzdGVtOmZ1bmN0aW9uKGIsYyxkKXt2YXIgZj1udWxsO2Y9dGhpcy5wcm90ZWN0aW9uRXh0LmNyZWF0ZU1lZGlhS2V5cyhkLmtleXNUeXBlU3RyaW5nKSx0aGlzLnByb3RlY3Rpb25FeHQuc2V0TWVkaWFLZXkoYSxmKSxlW2JdPXtrSUQ6Yixjb250ZW50UHJvdGVjdGlvbjpjLGtleVN5c3RlbTpkLGtleXM6Zixpbml0RGF0YTpudWxsLGtleVNlc3Npb25zOltdfX0scmVtb3ZlS2V5U3lzdGVtOmZ1bmN0aW9uKGEpe2lmKG51bGwhPT1hJiZ2b2lkIDAhPT1lW2FdJiYwIT09ZVthXS5rZXlTZXNzaW9ucy5sZW5ndGgpe2Zvcih2YXIgZj1lW2FdLmtleVNlc3Npb25zLGc9MDtnPGYubGVuZ3RoOysrZyl0aGlzLnByb3RlY3Rpb25FeHQudW5saXN0ZW5Ub0tleUVycm9yKGZbZ10sYyksdGhpcy5wcm90ZWN0aW9uRXh0LnVubGlzdGVuVG9LZXlBZGRlZChmW2ddLGIpLHRoaXMucHJvdGVjdGlvbkV4dC51bmxpc3RlblRvS2V5TWVzc2FnZShmW2ddLGQpLGZbZ10uY2xvc2UoKTtlW2FdPXZvaWQgMH19LG5lZWRUb0FkZEtleVNlc3Npb246ZnVuY3Rpb24oYSl7dmFyIGI9bnVsbDtyZXR1cm4gYj1lW2FdLGIua2V5U3lzdGVtLm5lZWRUb0FkZEtleVNlc3Npb24oYi5pbml0RGF0YSxiLmtleVNlc3Npb25zKX0sZ2V0SW5pdERhdGE6ZnVuY3Rpb24oYSl7dmFyIGI9bnVsbDtyZXR1cm4gYj1lW2FdLGIua2V5U3lzdGVtLmdldEluaXREYXRhKGIuY29udGVudFByb3RlY3Rpb24pfSx1cGRhdGVGcm9tTWVzc2FnZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGVbYV0ua2V5U3lzdGVtLmdldFVwZGF0ZShiLGMpfSxsaXN0ZW5Ub05lZWRLZXk6ZnVuY3Rpb24oYSl7dGhpcy5wcm90ZWN0aW9uRXh0Lmxpc3RlblRvTmVlZEtleSh0aGlzLnZpZGVvTW9kZWwsYSl9LGxpc3RlblRvS2V5RXJyb3I6ZnVuY3Rpb24oYSl7Yz1hO2Zvcih2YXIgYj0wO2I8ZS5sZW5ndGg7KytiKWZvcih2YXIgZD1lW2JdLmtleVNlc3Npb25zLGY9MDtmPGQubGVuZ3RoOysrZil0aGlzLnByb3RlY3Rpb25FeHQubGlzdGVuVG9LZXlFcnJvcihkW2ZdLGEpfSxsaXN0ZW5Ub0tleU1lc3NhZ2U6ZnVuY3Rpb24oYSl7ZD1hO2Zvcih2YXIgYj0wO2I8ZS5sZW5ndGg7KytiKWZvcih2YXIgYz1lW2JdLmtleVNlc3Npb25zLGY9MDtmPGMubGVuZ3RoOysrZil0aGlzLnByb3RlY3Rpb25FeHQubGlzdGVuVG9LZXlNZXNzYWdlKGNbZl0sYSl9LGxpc3RlblRvS2V5QWRkZWQ6ZnVuY3Rpb24oYSl7Yj1hO2Zvcih2YXIgYz0wO2M8ZS5sZW5ndGg7KytjKWZvcih2YXIgZD1lW2NdLmtleVNlc3Npb25zLGY9MDtmPGQubGVuZ3RoOysrZil0aGlzLnByb3RlY3Rpb25FeHQubGlzdGVuVG9LZXlBZGRlZChkW2ZdLGEpfX19LE1lZGlhUGxheWVyLm1vZGVscy5Qcm90ZWN0aW9uTW9kZWwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5tb2RlbHMuUHJvdGVjdGlvbk1vZGVsfSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuUmVxdWVzdFNjaGVkdWxlcj1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhPVtdLGI9bnVsbCxjPW51bGwsZD1mdW5jdGlvbihhLGIpe2lmKGEmJmIpe3ZhciBjPWcoYSk7Y3x8KGM9ZS5jYWxsKHRoaXMsYSkpLGMuc2V0SXNTY2hlZHVsZWQoITApLGMuc2V0U2NoZWR1bGVkVGFzayhiKSxqLmNhbGwodGhpcyksYi5jYWxsKGEpfX0sZT1mdW5jdGlvbihiKXtpZighYilyZXR1cm4gbnVsbDt2YXIgYz10aGlzLnN5c3RlbS5nZXRPYmplY3QoXCJzY2hlZHVsZXJNb2RlbFwiKTtyZXR1cm4gYy5zZXRDb250ZXh0KGIpLGEucHVzaChjKSxjfSxmPWZ1bmN0aW9uKGIpe3ZhciBjPWEuaW5kZXhPZihiKTstMSE9PWMmJmEuc3BsaWNlKGMsMSl9LGc9ZnVuY3Rpb24oYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYVtjXS5nZXRDb250ZXh0KCk9PT1iKXJldHVybiBhW2NdO3JldHVybiBudWxsfSxoPWZ1bmN0aW9uKCl7aS5jYWxsKHRoaXMpfSxpPWZ1bmN0aW9uKCl7Zm9yKHZhciBiLGM9MDtjPGEubGVuZ3RoO2MrKyliPWFbY10sYi5nZXRJc1NjaGVkdWxlZCgpJiZiLmV4ZWN1dGVTY2hlZHVsZWRUYXNrKCl9LGo9ZnVuY3Rpb24oKXtudWxsPT09YyYmKHRoaXMuYWRqdXN0RXhlY3V0ZUludGVydmFsKCksYz1zZXRJbnRlcnZhbChoLmJpbmQodGhpcyksYikpfSxrPWZ1bmN0aW9uKGIpe3ZhciBjPWcoYik7YyYmKGYoYyksMD09PWEubGVuZ3RoJiZsLmNhbGwodGhpcykpfSxsPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChjKSxjPW51bGx9O3JldHVybntzeXN0ZW06dm9pZCAwLGRlYnVnOnZvaWQgMCxzY2hlZHVsZXJFeHQ6dm9pZCAwLGlzU2NoZWR1bGVkOmZ1bmN0aW9uKGEpe3ZhciBiPWcoYSk7cmV0dXJuISFiJiZiLmdldElzU2NoZWR1bGVkKCl9LGdldEV4ZWN1dGVJbnRlcnZhbDpmdW5jdGlvbigpe3JldHVybiBifSxhZGp1c3RFeGVjdXRlSW50ZXJ2YWw6ZnVuY3Rpb24oKXtpZighKGEubGVuZ3RoPDEpKXt2YXIgZD10aGlzLnNjaGVkdWxlckV4dC5nZXRFeGVjdXRlSW50ZXJ2YWwoYVswXS5nZXRDb250ZXh0KCkpO2IhPT1kJiYoYj1kLG51bGwhPT1jJiYodGhpcy5kZWJ1Zy5sb2coXCJDaGFuZ2luZyBleGVjdXRlIGludGVydmFsOiBcIitiKSxjbGVhckludGVydmFsKGMpLGM9c2V0SW50ZXJ2YWwoaC5iaW5kKHRoaXMpLGIpKSl9fSxzdGFydFNjaGVkdWxpbmc6ZCxzdG9wU2NoZWR1bGluZzprfX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlJlcXVlc3RTY2hlZHVsZXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuUmVxdWVzdFNjaGVkdWxlcn0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlNjaGVkdWxlckV4dGVuc2lvbnM9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIn0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlNjaGVkdWxlckV4dGVuc2lvbnMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuU2NoZWR1bGVyRXh0ZW5zaW9ucyxnZXRFeGVjdXRlSW50ZXJ2YWw6ZnVuY3Rpb24oYSl7dmFyIGI9MWUzO3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBhLmdldE1pbkJ1ZmZlclRpbWUmJihiPTFlMyphLmdldE1pbkJ1ZmZlclRpbWUoKS80LGI9TWF0aC5tYXgoYiwxZTMpKSxifX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlNjaGVkdWxlck1vZGVsPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGEsYixjPSExO3JldHVybntzeXN0ZW06dm9pZCAwLGRlYnVnOnZvaWQgMCxzY2hlZHVsZXJFeHQ6dm9pZCAwLHNldENvbnRleHQ6ZnVuY3Rpb24oYil7YT1ifSxnZXRDb250ZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldFNjaGVkdWxlZFRhc2s6ZnVuY3Rpb24oYSl7Yj1hfSxleGVjdXRlU2NoZWR1bGVkVGFzazpmdW5jdGlvbigpe2IuY2FsbChhKX0sc2V0SXNTY2hlZHVsZWQ6ZnVuY3Rpb24oYSl7Yz1hfSxnZXRJc1NjaGVkdWxlZDpmdW5jdGlvbigpe3JldHVybiBjfX19LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5TY2hlZHVsZXJNb2RlbC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5TY2hlZHVsZXJNb2RlbH0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlNvdXJjZUJ1ZmZlckV4dGVuc2lvbnM9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt0aGlzLnN5c3RlbT12b2lkIDAsdGhpcy5tYW5pZmVzdEV4dD12b2lkIDB9LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5Tb3VyY2VCdWZmZXJFeHRlbnNpb25zLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlNvdXJjZUJ1ZmZlckV4dGVuc2lvbnMsY3JlYXRlU291cmNlQnVmZmVyOmZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGM9US5kZWZlcigpLGQ9dGhpczt0cnl7Yy5yZXNvbHZlKGEuYWRkU291cmNlQnVmZmVyKGIpKX1jYXRjaChlKXtkLm1hbmlmZXN0RXh0LmdldElzVGV4dFRyYWNrKGIpP2MucmVzb2x2ZShkLnN5c3RlbS5nZXRPYmplY3QoXCJ0ZXh0VlRUU291cmNlQnVmZmVyXCIpKTpjLnJlamVjdChlLmRlc2NyaXB0aW9uKX1yZXR1cm4gYy5wcm9taXNlfSxyZW1vdmVTb3VyY2VCdWZmZXI6ZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjt2YXIgYz1RLmRlZmVyKCk7dHJ5e2MucmVzb2x2ZShhLnJlbW92ZVNvdXJjZUJ1ZmZlcihiKSl9Y2F0Y2goZCl7Yy5yZWplY3QoZC5kZXNjcmlwdGlvbil9cmV0dXJuIGMucHJvbWlzZX0sZ2V0QnVmZmVyUmFuZ2U6ZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkLGUsZj1udWxsLGc9MCxoPTAsaT1udWxsLGo9bnVsbCxrPTAsbD1jfHwuMTU7dHJ5e2Y9YS5idWZmZXJlZH1jYXRjaChtKXtyZXR1cm4gUS53aGVuKG51bGwpfWlmKG51bGwhPT1mKXtmb3IoZT0wLGQ9Zi5sZW5ndGg7ZD5lO2UrPTEpaWYoZz1mLnN0YXJ0KGUpLGg9Zi5lbmQoZSksbnVsbD09PWkpe2lmKGs9TWF0aC5hYnMoZy1iKSxiPj1nJiZoPmIpe2k9ZyxqPWg7Y29udGludWV9aWYobD49ayl7aT1nLGo9aDtjb250aW51ZX19ZWxzZXtpZihrPWctaiwhKGw+PWspKWJyZWFrO2o9aH1pZihudWxsIT09aSlyZXR1cm4gUS53aGVuKHtzdGFydDppLGVuZDpqfSl9cmV0dXJuIFEud2hlbihudWxsKX0sZ2V0QWxsUmFuZ2VzOmZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7dHJ5e3JldHVybiBiPWEuYnVmZmVyZWQsUS53aGVuKGIpfWNhdGNoKGMpe3JldHVybiBRLndoZW4obnVsbCl9fSxnZXRCdWZmZXJMZW5ndGg6ZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPXRoaXMsZT1RLmRlZmVyKCk7cmV0dXJuIGQuZ2V0QnVmZmVyUmFuZ2UoYSxiLGMpLnRoZW4oZnVuY3Rpb24oYSl7bnVsbD09PWE/ZS5yZXNvbHZlKDApOmUucmVzb2x2ZShhLmVuZC1iKX0pLGUucHJvbWlzZX0sd2FpdEZvclVwZGF0ZUVuZDpmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjt2YXIgYixjPVEuZGVmZXIoKSxkPTUwLGU9ZnVuY3Rpb24oKXthLnVwZGF0aW5nfHwoY2xlYXJJbnRlcnZhbChiKSxjLnJlc29sdmUoITApKX0sZj1mdW5jdGlvbigpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVwZGF0ZWVuZFwiLGYsITEpLGMucmVzb2x2ZSghMCl9O2lmKGEuaGFzT3duUHJvcGVydHkoXCJhZGRFdmVudExpc3RlbmVyXCIpKXRyeXthLmFkZEV2ZW50TGlzdGVuZXIoXCJ1cGRhdGVlbmRcIixmLCExKX1jYXRjaChnKXtiPXNldEludGVydmFsKGUsZCl9ZWxzZSBiPXNldEludGVydmFsKGUsZCk7cmV0dXJuIGMucHJvbWlzZX0sYXBwZW5kOmZ1bmN0aW9uKGEsYil7dmFyIGM9US5kZWZlcigpO3RyeXtcImFwcGVuZFwiaW4gYT9hLmFwcGVuZChiKTpcImFwcGVuZEJ1ZmZlclwiaW4gYSYmYS5hcHBlbmRCdWZmZXIoYiksdGhpcy53YWl0Rm9yVXBkYXRlRW5kKGEpLnRoZW4oZnVuY3Rpb24oKXtjLnJlc29sdmUoKX0pfWNhdGNoKGQpe2MucmVqZWN0KHtlcnI6ZCxkYXRhOmJ9KX1yZXR1cm4gYy5wcm9taXNlfSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1RLmRlZmVyKCk7dHJ5e2I+PTAmJmQ+YiYmYz5iJiZcImVuZGVkXCIhPT1lLnJlYWR5U3RhdGUmJmEucmVtb3ZlKGIsYyksdGhpcy53YWl0Rm9yVXBkYXRlRW5kKGEpLnRoZW4oZnVuY3Rpb24oKXtmLnJlc29sdmUoKX0pfWNhdGNoKGcpe2YucmVqZWN0KGcpfXJldHVybiBmLnByb21pc2V9LGFib3J0OmZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGM9US5kZWZlcigpO3RyeXtcIm9wZW5cIj09PWEucmVhZHlTdGF0ZSYmYi5hYm9ydCgpLGMucmVzb2x2ZSgpfWNhdGNoKGQpe2MucmVqZWN0KGQuZGVzY3JpcHRpb24pfXJldHVybiBjLnByb21pc2V9fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuU3RyZWFtPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGEsYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscT1udWxsLHI9bnVsbCxzPW51bGwsdD1udWxsLHU9LTEsdj1udWxsLHc9LTEseD1udWxsLHk9LTEsej0hMCxBPSExLEI9ITEsQz1udWxsLEQ9W10sRT0tMSxGPW51bGwsRz1mdW5jdGlvbigpe3RoaXMuZGVidWcubG9nKFwiQXR0ZW1wdGluZyBwbGF5Li4uXCIpLEEmJih0aGlzLmRlYnVnLmxvZyhcIkRvIHBsYXkuXCIpLHRoaXMudmlkZW9Nb2RlbC5wbGF5KCkpfSxIPWZ1bmN0aW9uKCl7dGhpcy5kZWJ1Zy5sb2coXCJEbyBwYXVzZS5cIiksdGhpcy52aWRlb01vZGVsLnBhdXNlKCl9LEk9ZnVuY3Rpb24oYSl7dGhpcy5kZWJ1Zy5sb2coXCJBdHRlbXB0aW5nIHNlZWsuLi5cIiksQSYmKHRoaXMuZGVidWcubG9nKFwiRG8gc2VlazogXCIrYSksdGhpcy5zeXN0ZW0ubm90aWZ5KFwic2V0Q3VycmVudFRpbWVcIiksdGhpcy52aWRlb01vZGVsLnNldEN1cnJlbnRUaW1lKGEpLHQmJnQuc2VlayhhKSx2JiZ2LnNlZWsoYSkpfSxKPWZ1bmN0aW9uKGEpe3ZhciBiLGM9dGhpcztpZihiPVwibXNuZWVka2V5XCIhPT1hLnR5cGU/YS50eXBlOnEsRC5wdXNoKHt0eXBlOmIsaW5pdERhdGE6YS5pbml0RGF0YX0pLHRoaXMuZGVidWcubG9nKFwiRFJNOiBLZXkgcmVxdWlyZWQgZm9yIC0gXCIrYikscyYmcSYmIUMpdHJ5e0M9Yy5wcm90ZWN0aW9uQ29udHJvbGxlci5zZWxlY3RLZXlTeXN0ZW0ocSxzKX1jYXRjaChkKXtILmNhbGwoYyksYy5kZWJ1Zy5sb2coZCksYy5lcnJIYW5kbGVyLm1lZGlhS2V5U3lzdGVtU2VsZWN0aW9uRXJyb3IoZCl9QyYmYy5wcm90ZWN0aW9uQ29udHJvbGxlci5lbnN1cmVLZXlTZXNzaW9uKEMsYixhLmluaXREYXRhKX0sSz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9bnVsbCxkPW51bGwsZT1udWxsLGY9bnVsbDt0aGlzLmRlYnVnLmxvZyhcIkRSTTogR290IGEga2V5IG1lc3NhZ2UuLi5cIiksYz1hLnRhcmdldCxkPW5ldyBVaW50MTZBcnJheShhLm1lc3NhZ2UuYnVmZmVyKSxlPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxkKSxmPWEuZGVzdGluYXRpb25VUkwsYi5wcm90ZWN0aW9uQ29udHJvbGxlci51cGRhdGVGcm9tTWVzc2FnZShDLGMsZSxmKS5mYWlsKGZ1bmN0aW9uKGEpe0guY2FsbChiKSxiLmRlYnVnLmxvZyhhKSxiLmVyckhhbmRsZXIubWVkaWFLZXlNZXNzYWdlRXJyb3IoYSl9KX0sTD1mdW5jdGlvbigpe3RoaXMuZGVidWcubG9nKFwiRFJNOiBLZXkgYWRkZWQuXCIpfSxNPWZ1bmN0aW9uKCl7dmFyIGEsYj1ldmVudC50YXJnZXQ7c3dpdGNoKGE9XCJEUk06IE1lZGlhS2V5RXJyb3IgLSBzZXNzaW9uSWQ6IFwiK2Iuc2Vzc2lvbklkK1wiIGVycm9yQ29kZTogXCIrYi5lcnJvci5jb2RlK1wiIHN5c3RlbUVycm9yQ29kZTogXCIrYi5lcnJvci5zeXN0ZW1Db2RlK1wiIFtcIixiLmVycm9yLmNvZGUpe2Nhc2UgMTphKz1cIk1FRElBX0tFWUVSUl9VTktOT1dOIC0gQW4gdW5zcGVjaWZpZWQgZXJyb3Igb2NjdXJyZWQuIFRoaXMgdmFsdWUgaXMgdXNlZCBmb3IgZXJyb3JzIHRoYXQgZG9uJ3QgbWF0Y2ggYW55IG9mIHRoZSBvdGhlciBjb2Rlcy5cIjticmVhaztjYXNlIDI6YSs9XCJNRURJQV9LRVlFUlJfQ0xJRU5UIC0gVGhlIEtleSBTeXN0ZW0gY291bGQgbm90IGJlIGluc3RhbGxlZCBvciB1cGRhdGVkLlwiO2JyZWFrO2Nhc2UgMzphKz1cIk1FRElBX0tFWUVSUl9TRVJWSUNFIC0gVGhlIG1lc3NhZ2UgcGFzc2VkIGludG8gdXBkYXRlIGluZGljYXRlZCBhbiBlcnJvciBmcm9tIHRoZSBsaWNlbnNlIHNlcnZpY2UuXCI7YnJlYWs7Y2FzZSA0OmErPVwiTUVESUFfS0VZRVJSX09VVFBVVCAtIFRoZXJlIGlzIG5vIGF2YWlsYWJsZSBvdXRwdXQgZGV2aWNlIHdpdGggdGhlIHJlcXVpcmVkIGNoYXJhY3RlcmlzdGljcyBmb3IgdGhlIGNvbnRlbnQgcHJvdGVjdGlvbiBzeXN0ZW0uXCI7YnJlYWs7Y2FzZSA1OmErPVwiTUVESUFfS0VZRVJSX0hBUkRXQVJFQ0hBTkdFIC0gQSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGNoYW5nZSBjYXVzZWQgYSBjb250ZW50IHByb3RlY3Rpb24gZXJyb3IuXCI7YnJlYWs7Y2FzZSA2OmErPVwiTUVESUFfS0VZRVJSX0RPTUFJTiAtIEFuIGVycm9yIG9jY3VycmVkIGluIGEgbXVsdGktZGV2aWNlIGRvbWFpbiBsaWNlbnNpbmcgY29uZmlndXJhdGlvbi4gVGhlIG1vc3QgY29tbW9uIGVycm9yIGlzIGEgZmFpbHVyZSB0byBqb2luIHRoZSBkb21haW4uXCJ9YSs9XCJdXCIsdGhpcy5kZWJ1Zy5sb2coYSksdGhpcy5lcnJIYW5kbGVyLm1lZGlhS2V5U2Vzc2lvbkVycm9yKGEpfSxOPWZ1bmN0aW9uKGEpe3ZhciBiPVEuZGVmZXIoKSxjPXRoaXMsZD1mdW5jdGlvbihlKXtjLmRlYnVnLmxvZyhcIk1lZGlhU291cmNlIGlzIG9wZW4hXCIpLGMuZGVidWcubG9nKGUpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNvdXJjZW9wZW5cIixkKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3ZWJraXRzb3VyY2VvcGVuXCIsZCksYi5yZXNvbHZlKGEpfTtyZXR1cm4gYy5kZWJ1Zy5sb2coXCJNZWRpYVNvdXJjZSBzaG91bGQgYmUgY2xvc2VkLiBUaGUgYWN0dWFsIHJlYWR5U3RhdGUgaXM6IFwiK2EucmVhZHlTdGF0ZSksYS5hZGRFdmVudExpc3RlbmVyKFwic291cmNlb3BlblwiLGQsITEpLGEuYWRkRXZlbnRMaXN0ZW5lcihcIndlYmtpdHNvdXJjZW9wZW5cIixkLCExKSxjLm1lZGlhU291cmNlRXh0LmF0dGFjaE1lZGlhU291cmNlKGEsYy52aWRlb01vZGVsKSxjLmRlYnVnLmxvZyhcIk1lZGlhU291cmNlIGF0dGFjaGVkIHRvIHZpZGVvLiAgV2FpdGluZyBvbiBvcGVuLi4uXCIpLGIucHJvbWlzZX0sTz1mdW5jdGlvbigpe3ZhciBjPXRoaXM7dCYmdC5yZXNldChCKSx2JiZ2LnJlc2V0KEIpLGImJmMubWVkaWFTb3VyY2VFeHQuZGV0YWNoTWVkaWFTb3VyY2UoYy52aWRlb01vZGVsKSxBPSExLEM9bnVsbCxEPVtdLHM9bnVsbCx0PW51bGwsdj1udWxsLHg9bnVsbCxxPW51bGwscj1udWxsLGI9bnVsbCxhPW51bGx9LFA9ZnVuY3Rpb24oYixjLGQsZSl7aWYoYiYmYyYmZClpZihudWxsPT09dCYmbnVsbD09PXYmJm51bGw9PT14KXt2YXIgZj1cIk5vIHN0cmVhbXMgdG8gcGxheS5cIjt0aGlzLmVyckhhbmRsZXIubWFuaWZlc3RFcnJvcihmLFwibm9zdHJlYW1zXCIsYSksdGhpcy5kZWJ1Zy5sb2coZiksZS5yZWplY3QoKX1lbHNlIHRoaXMuZGVidWcubG9nKFwiTWVkaWFTb3VyY2UgaW5pdGlhbGl6ZWQhXCIpLGUucmVzb2x2ZSghMCl9LFI9ZnVuY3Rpb24oKXt0aGlzLmRlYnVnLmxvZyhcIkdldHRpbmcgTWVkaWFTb3VyY2UgcmVhZHkuLi5cIik7dmFyIGE9US5kZWZlcigpLGM9ITEsZD0hMSxlPSExLGY9dGhpcyxnPWYubWFuaWZlc3RNb2RlbC5nZXRWYWx1ZSgpLGg9Zi5tYW5pZmVzdEV4dC5nZXRJc0xpdmUoZyk7cmV0dXJuIGYuZGVidWcubG9nKFwiR2F0aGVyaW5nIGluZm9ybWF0aW9uIGZvciBidWZmZXJzLiAoMSlcIiksZi5tYW5pZmVzdEV4dC5nZXREdXJhdGlvbihnLGgpLnRoZW4oZnVuY3Rpb24oKXtmLm1hbmlmZXN0RXh0LmdldFZpZGVvRGF0YShnLEUpLnRoZW4oZnVuY3Rpb24oaCl7cmV0dXJuIG51bGwhPT1oPyhmLmRlYnVnLmxvZyhcIkNyZWF0ZSB2aWRlbyBidWZmZXIuXCIpLGYubWFuaWZlc3RFeHQuZ2V0RGF0YUluZGV4KGgsZyxFKS50aGVuKGZ1bmN0aW9uKGEpe3U9YSxmLmRlYnVnLmxvZyhcIlNhdmUgdmlkZW8gdHJhY2s6IFwiK3UpfSksZi5tYW5pZmVzdEV4dC5nZXRDb2RlYyhoKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBmLmRlYnVnLmxvZyhcIlZpZGVvIGNvZGVjOiBcIithKSxxPWEsZi5tYW5pZmVzdEV4dC5nZXRDb250ZW50UHJvdGVjdGlvbkRhdGEoaCkudGhlbihmdW5jdGlvbihjKXtpZihmLmRlYnVnLmxvZyhcIlZpZGVvIGNvbnRlbnRQcm90ZWN0aW9uXCIpLGMmJiFmLmNhcGFiaWxpdGllcy5zdXBwb3J0c01lZGlhS2V5cygpKXJldHVybiBmLmVyckhhbmRsZXIuY2FwYWJpbGl0eUVycm9yKFwibWVkaWFrZXlzXCIpLFEud2hlbihudWxsKTtpZihzPWMsIWYuY2FwYWJpbGl0aWVzLnN1cHBvcnRzQ29kZWMoZi52aWRlb01vZGVsLmdldEVsZW1lbnQoKSxhKSl7dmFyIGQ9XCJWaWRlbyBDb2RlYyAoXCIrYStcIikgaXMgbm90IHN1cHBvcnRlZC5cIjtyZXR1cm4gZi5lcnJIYW5kbGVyLm1hbmlmZXN0RXJyb3IoZCxcImNvZGVjXCIsZyksZi5kZWJ1Zy5sb2coZCksUS53aGVuKG51bGwpfXJldHVybiBmLnNvdXJjZUJ1ZmZlckV4dC5jcmVhdGVTb3VyY2VCdWZmZXIoYixhKX0pfSkudGhlbihmdW5jdGlvbihnKXtudWxsPT09Zz9mLmRlYnVnLmxvZyhcIk5vIGJ1ZmZlciB3YXMgY3JlYXRlZCwgc2tpcHBpbmcgdmlkZW8gc3RyZWFtLlwiKToodD1mLnN5c3RlbS5nZXRPYmplY3QoXCJidWZmZXJDb250cm9sbGVyXCIpLHQuaW5pdGlhbGl6ZShcInZpZGVvXCIsRSxoLGcsZi52aWRlb01vZGVsLGYucmVxdWVzdFNjaGVkdWxlcixmLmZyYWdtZW50Q29udHJvbGxlcixiKSxmLmRlYnVnLmxvZyhcIlZpZGVvIGlzIHJlYWR5IVwiKSksYz0hMCxQLmNhbGwoZixjLGQsZSxhKX0sZnVuY3Rpb24oKXtmLmVyckhhbmRsZXIubWVkaWFTb3VyY2VFcnJvcihcIkVycm9yIGNyZWF0aW5nIHZpZGVvIHNvdXJjZSBidWZmZXIuXCIpLGM9ITAsUC5jYWxsKGYsYyxkLGUsYSl9KSk6KGYuZGVidWcubG9nKFwiTm8gdmlkZW8gZGF0YS5cIiksYz0hMCxQLmNhbGwoZixjLGQsZSxhKSksZi5tYW5pZmVzdEV4dC5nZXRBdWRpb0RhdGFzKGcsRSl9KS50aGVuKGZ1bmN0aW9uKGgpe3JldHVybiBudWxsIT09aCYmaC5sZW5ndGg+MD8oZi5kZWJ1Zy5sb2coXCJIYXZlIGF1ZGlvIHN0cmVhbXM6IFwiK2gubGVuZ3RoKSxmLm1hbmlmZXN0RXh0LmdldFByaW1hcnlBdWRpb0RhdGEoZyxFKS50aGVuKGZ1bmN0aW9uKGgpe2YubWFuaWZlc3RFeHQuZ2V0RGF0YUluZGV4KGgsZyxFKS50aGVuKGZ1bmN0aW9uKGEpe3c9YSxmLmRlYnVnLmxvZyhcIlNhdmUgYXVkaW8gdHJhY2s6IFwiK3cpfSksZi5tYW5pZmVzdEV4dC5nZXRDb2RlYyhoKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBmLmRlYnVnLmxvZyhcIkF1ZGlvIGNvZGVjOiBcIithKSxyPWEsZi5tYW5pZmVzdEV4dC5nZXRDb250ZW50UHJvdGVjdGlvbkRhdGEoaCkudGhlbihmdW5jdGlvbihjKXtpZihmLmRlYnVnLmxvZyhcIkF1ZGlvIGNvbnRlbnRQcm90ZWN0aW9uXCIpLGMmJiFmLmNhcGFiaWxpdGllcy5zdXBwb3J0c01lZGlhS2V5cygpKXJldHVybiBmLmVyckhhbmRsZXIuY2FwYWJpbGl0eUVycm9yKFwibWVkaWFrZXlzXCIpLFEud2hlbihudWxsKTtpZihzPWMsIWYuY2FwYWJpbGl0aWVzLnN1cHBvcnRzQ29kZWMoZi52aWRlb01vZGVsLmdldEVsZW1lbnQoKSxhKSl7dmFyIGQ9XCJBdWRpbyBDb2RlYyAoXCIrYStcIikgaXMgbm90IHN1cHBvcnRlZC5cIjtyZXR1cm4gZi5lcnJIYW5kbGVyLm1hbmlmZXN0RXJyb3IoZCxcImNvZGVjXCIsZyksZi5kZWJ1Zy5sb2coZCksUS53aGVuKG51bGwpfXJldHVybiBmLnNvdXJjZUJ1ZmZlckV4dC5jcmVhdGVTb3VyY2VCdWZmZXIoYixhKX0pfSkudGhlbihmdW5jdGlvbihnKXtudWxsPT09Zz9mLmRlYnVnLmxvZyhcIk5vIGJ1ZmZlciB3YXMgY3JlYXRlZCwgc2tpcHBpbmcgYXVkaW8gc3RyZWFtLlwiKToodj1mLnN5c3RlbS5nZXRPYmplY3QoXCJidWZmZXJDb250cm9sbGVyXCIpLHYuaW5pdGlhbGl6ZShcImF1ZGlvXCIsRSxoLGcsZi52aWRlb01vZGVsLGYucmVxdWVzdFNjaGVkdWxlcixmLmZyYWdtZW50Q29udHJvbGxlcixiKSxmLmRlYnVnLmxvZyhcIkF1ZGlvIGlzIHJlYWR5IVwiKSksZD0hMCxQLmNhbGwoZixjLGQsZSxhKX0sZnVuY3Rpb24oKXtmLmVyckhhbmRsZXIubWVkaWFTb3VyY2VFcnJvcihcIkVycm9yIGNyZWF0aW5nIGF1ZGlvIHNvdXJjZSBidWZmZXIuXCIpLGQ9ITAsUC5jYWxsKGYsYyxkLGUsYSl9KX0pKTooZi5kZWJ1Zy5sb2coXCJObyBhdWRpbyBzdHJlYW1zLlwiKSxkPSEwLFAuY2FsbChmLGMsZCxlLGEpKSxmLm1hbmlmZXN0RXh0LmdldFRleHREYXRhKGcsRSl9KS50aGVuKGZ1bmN0aW9uKGgpe3ZhciBpO251bGwhPT1oPyhmLm1hbmlmZXN0RXh0LmdldERhdGFJbmRleChoLGcsRSkudGhlbihmdW5jdGlvbihhKXt5PWEsZi5kZWJ1Zy5sb2coXCJTYXZlIHRleHQgdHJhY2s6IFwiK3kpfSksZi5tYW5pZmVzdEV4dC5nZXRNaW1lVHlwZShoKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBpPWEsZi5zb3VyY2VCdWZmZXJFeHQuY3JlYXRlU291cmNlQnVmZmVyKGIsaSl9KS50aGVuKGZ1bmN0aW9uKGIpe251bGw9PT1iP2YuZGVidWcubG9nKFwiU291cmNlIGJ1ZmZlciB3YXMgbm90IGNyZWF0ZWQgZm9yIHRleHQgdHJhY2tcIik6KHg9Zi5zeXN0ZW0uZ2V0T2JqZWN0KFwidGV4dENvbnRyb2xsZXJcIikseC5pbml0aWFsaXplKEUsaCxiLGYudmlkZW9Nb2RlbCksYi5oYXNPd25Qcm9wZXJ0eShcImluaXRpYWxpemVcIikmJmIuaW5pdGlhbGl6ZShpLHgpLGYuZGVidWcubG9nKFwiVGV4dCBpcyByZWFkeSFcIiksZT0hMCxQLmNhbGwoZixjLGQsZSxhKSl9LGZ1bmN0aW9uKGIpe2YuZGVidWcubG9nKFwiRXJyb3IgY3JlYXRpbmcgdGV4dCBzb3VyY2UgYnVmZmVyOlwiKSxmLmRlYnVnLmxvZyhiKSxmLmVyckhhbmRsZXIubWVkaWFTb3VyY2VFcnJvcihcIkVycm9yIGNyZWF0aW5nIHRleHQgc291cmNlIGJ1ZmZlci5cIiksZT0hMCxQLmNhbGwoZixjLGQsZSxhKX0pKTooZi5kZWJ1Zy5sb2coXCJObyB0ZXh0IHRyYWNrcy5cIiksZT0hMCxQLmNhbGwoZixjLGQsZSxhKSl9KX0pLGEucHJvbWlzZX0sUz1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYz1RLmRlZmVyKCksZD1hLm1hbmlmZXN0TW9kZWwuZ2V0VmFsdWUoKSxlPWEubWFuaWZlc3RFeHQuZ2V0SXNMaXZlKGQpO3JldHVybiBhLmRlYnVnLmxvZyhcIkdldHRpbmcgcmVhZHkgZm9yIHBsYXliYWNrLi4uXCIpLGEubWFuaWZlc3RFeHQuZ2V0RHVyYXRpb25Gb3JQZXJpb2QoRSxhLm1hbmlmZXN0TW9kZWwuZ2V0VmFsdWUoKSxlKS50aGVuKGZ1bmN0aW9uKGEpe2w9YX0pLGEubWFuaWZlc3RFeHQuZ2V0RHVyYXRpb24oYS5tYW5pZmVzdE1vZGVsLmdldFZhbHVlKCksZSkudGhlbihmdW5jdGlvbihjKXtyZXR1cm4gYS5kZWJ1Zy5sb2coXCJTZXR0aW5nIGR1cmF0aW9uOiBcIitjKSxhLm1lZGlhU291cmNlRXh0LnNldER1cmF0aW9uKGIsYyl9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGEuZGVidWcubG9nKFwiRHVyYXRpb24gc3VjY2Vzc2Z1bGx5IHNldC5cIiksYS5tYW5pZmVzdEV4dC5nZXRQZXJpb2RTdGFydChhLm1hbmlmZXN0TW9kZWwuZ2V0VmFsdWUoKSxFKX0pLnRoZW4oZnVuY3Rpb24oYSl7Rj1hLEE9ITAsYy5yZXNvbHZlKCEwKX0pLGMucHJvbWlzZX0sVD1mdW5jdGlvbigpe3ZhciBhPXRoaXM7YS5kZWJ1Zy5sb2coXCJHb3QgbG9hZG1ldGFkYXRhIGV2ZW50LlwiKSxjLnJlc29sdmUobnVsbCl9LFU9ZnVuY3Rpb24oKXt0aGlzLmRlYnVnLmxvZyhcIkdvdCBwbGF5IGV2ZW50LlwiKSxBJiYobnVsbCE9PUY/KHRoaXMuZGVidWcubG9nKFwiU3RhcnRpbmcgc2VnbWVudCBsb2FkaW5nIGF0IG9mZnNldDogXCIrRiksdCYmdC5zZWVrKEYpLHYmJnYuc2VlayhGKSx4JiZ4LnNlZWsoRikpOih0JiZ0LnN0YXJ0KCksdiYmdi5zdGFydCgpLHgmJnguc3RhcnQoKSkpfSxWPWZ1bmN0aW9uKCl7dGhpcy5kZWJ1Zy5sb2coXCJHb3QgcGF1c2UgZXZlbnQuXCIpLHRoaXMuc2NoZWR1bGVXaGlsZVBhdXNlZHx8YWIuY2FsbCh0aGlzKX0sVz1mdW5jdGlvbihhKXt2YXIgYj1hLnNyY0VsZW1lbnQuZXJyb3IsYz1iLmNvZGUsZD1cIlwiO2lmKC0xIT09Yyl7c3dpdGNoKGMpe2Nhc2UgMTpkPVwiTUVESUFfRVJSX0FCT1JURURcIjticmVhaztjYXNlIDI6ZD1cIk1FRElBX0VSUl9ORVRXT1JLXCI7YnJlYWs7Y2FzZSAzOmQ9XCJNRURJQV9FUlJfREVDT0RFXCI7YnJlYWs7Y2FzZSA0OmQ9XCJNRURJQV9FUlJfU1JDX05PVF9TVVBQT1JURURcIjticmVhaztjYXNlIDU6ZD1cIk1FRElBX0VSUl9FTkNSWVBURURcIn1CPSEwLHRoaXMuZGVidWcubG9nKFwiVmlkZW8gRWxlbWVudCBFcnJvcjogXCIrZCksdGhpcy5kZWJ1Zy5sb2coYiksdGhpcy5lcnJIYW5kbGVyLm1lZGlhU291cmNlRXJyb3IoZCksdGhpcy5yZXNldCgpfX0sWD1mdW5jdGlvbigpe3RoaXMuZGVidWcubG9nKFwiR290IHNlZWtpbmcgZXZlbnQuXCIpO3ZhciBhPXRoaXMudmlkZW9Nb2RlbC5nZXRDdXJyZW50VGltZSgpO3QmJnQuc2VlayhhKSx2JiZ2LnNlZWsoYSl9LFk9ZnVuY3Rpb24oKXt0aGlzLmRlYnVnLmxvZyhcIlNlZWsgY29tcGxldGUuXCIpLHRoaXMudmlkZW9Nb2RlbC5saXN0ZW4oXCJzZWVraW5nXCIsaCksdGhpcy52aWRlb01vZGVsLnVubGlzdGVuKFwic2Vla2VkXCIsaSl9LFo9ZnVuY3Rpb24oKXtfLmNhbGwodGhpcyl9LCQ9ZnVuY3Rpb24oKXtfLmNhbGwodGhpcyl9LF89ZnVuY3Rpb24oKXt0JiZ0LnVwZGF0ZUJ1ZmZlclN0YXRlKCksdiYmdi51cGRhdGVCdWZmZXJTdGF0ZSgpfSxhYj1mdW5jdGlvbigpe3QmJnQuc3RvcCgpLHYmJnYuc3RvcCgpfSxiYj1mdW5jdGlvbihkKXt2YXIgZT10aGlzO3JldHVybiBlLmRlYnVnLmxvZyhcIlN0cmVhbSBzdGFydCBsb2FkaW5nLlwiKSxhPWQsZS5tZWRpYVNvdXJjZUV4dC5jcmVhdGVNZWRpYVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24oYSl7cmV0dXJuIGUuZGVidWcubG9nKFwiTWVkaWFTb3VyY2UgY3JlYXRlZC5cIiksTi5jYWxsKGUsYSl9KS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBiPWEsZS5kZWJ1Zy5sb2coXCJNZWRpYVNvdXJjZSBzZXQgdXAuXCIpLFIuY2FsbChlKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWJ1Zy5sb2coXCJTdGFydCBpbml0aWFsaXppbmcgcGxheWJhY2suXCIpLFMuY2FsbChlKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gej8oZS5kZWJ1Zy5sb2coXCJQbGF5YmFjayBpbml0aWFsaXplZCFcIiksYy5wcm9taXNlKTp2b2lkIDB9KS50aGVuKGZ1bmN0aW9uKCl7ZS5kZWJ1Zy5sb2coXCJlbGVtZW50IGxvYWRlZCFcIiksMD09PUUmJkcuY2FsbChlKX0pfSxjYj1mdW5jdGlvbigpe3RoaXMuZGVidWcubG9nKFwiQ3VycmVudCB0aW1lIGhhcyBjaGFuZ2VkLCBibG9jayBwcm9ncmFtbWF0aWMgc2Vlay5cIiksdGhpcy52aWRlb01vZGVsLnVubGlzdGVuKFwic2Vla2luZ1wiLGgpLHRoaXMudmlkZW9Nb2RlbC5saXN0ZW4oXCJzZWVrZWRcIixpKX0sZGI9ZnVuY3Rpb24oKXt0JiYhdC5pc0J1ZmZlcmluZ0NvbXBsZXRlZCgpfHx2JiYhdi5pc0J1ZmZlcmluZ0NvbXBsZXRlZCgpfHxiJiZ0aGlzLm1lZGlhU291cmNlRXh0LnNpZ25hbEVuZE9mU3RyZWFtKGIpfSxlYj1mdW5jdGlvbigpe2FiLmNhbGwodGhpcyl9LGZiPWZ1bmN0aW9uKCl7dmFyIGEsYixjPXRoaXMsZD1jLm1hbmlmZXN0TW9kZWwuZ2V0VmFsdWUoKTtjLmRlYnVnLmxvZyhcIk1hbmlmZXN0IHVwZGF0ZWQuLi4gc2V0IG5ldyBkYXRhIG9uIGJ1ZmZlcnMuXCIpLHQmJihhPXQuZ2V0RGF0YSgpLGEmJmEuaGFzT3duUHJvcGVydHkoXCJpZFwiKT9jLm1hbmlmZXN0RXh0LmdldERhdGFGb3JJZChhLmlkLGQsRSkudGhlbihmdW5jdGlvbihhKXt0LnNldERhdGEoYSl9KTpjLm1hbmlmZXN0RXh0LmdldERhdGFGb3JJbmRleCh1LGQsRSkudGhlbihmdW5jdGlvbihhKXt0LnNldERhdGEoYSl9KSksdiYmKGI9di5nZXREYXRhKCksYiYmYi5oYXNPd25Qcm9wZXJ0eShcImlkXCIpP2MubWFuaWZlc3RFeHQuZ2V0RGF0YUZvcklkKGIuaWQsZCxFKS50aGVuKGZ1bmN0aW9uKGEpe3Yuc2V0RGF0YShhKX0pOmMubWFuaWZlc3RFeHQuZ2V0RGF0YUZvckluZGV4KHcsZCxFKS50aGVuKGZ1bmN0aW9uKGEpe3Yuc2V0RGF0YShhKX0pKX07cmV0dXJue3N5c3RlbTp2b2lkIDAsdmlkZW9Nb2RlbDp2b2lkIDAsbWFuaWZlc3RMb2FkZXI6dm9pZCAwLG1hbmlmZXN0TW9kZWw6dm9pZCAwLG1lZGlhU291cmNlRXh0OnZvaWQgMCxzb3VyY2VCdWZmZXJFeHQ6dm9pZCAwLGJ1ZmZlckV4dDp2b2lkIDAsbWFuaWZlc3RFeHQ6dm9pZCAwLGZyYWdtZW50Q29udHJvbGxlcjp2b2lkIDAsYWJyQ29udHJvbGxlcjp2b2lkIDAsZnJhZ21lbnRFeHQ6dm9pZCAwLHByb3RlY3Rpb25Nb2RlbDp2b2lkIDAscHJvdGVjdGlvbkNvbnRyb2xsZXI6dm9pZCAwLHByb3RlY3Rpb25FeHQ6dm9pZCAwLGNhcGFiaWxpdGllczp2b2lkIDAsZGVidWc6dm9pZCAwLG1ldHJpY3NFeHQ6dm9pZCAwLGVyckhhbmRsZXI6dm9pZCAwLHJlcXVlc3RTY2hlZHVsZXI6dm9pZCAwLHNjaGVkdWxlV2hpbGVQYXVzZWQ6dm9pZCAwLHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5zeXN0ZW0ubWFwSGFuZGxlcihcIm1hbmlmZXN0VXBkYXRlZFwiLHZvaWQgMCxmYi5iaW5kKHRoaXMpKSx0aGlzLnN5c3RlbS5tYXBIYW5kbGVyKFwic2V0Q3VycmVudFRpbWVcIix2b2lkIDAsY2IuYmluZCh0aGlzKSksdGhpcy5zeXN0ZW0ubWFwSGFuZGxlcihcImJ1ZmZlcmluZ0NvbXBsZXRlZFwiLHZvaWQgMCxkYi5iaW5kKHRoaXMpKSx0aGlzLnN5c3RlbS5tYXBIYW5kbGVyKFwic2VnbWVudExvYWRpbmdGYWlsZWRcIix2b2lkIDAsZWIuYmluZCh0aGlzKSksYz1RLmRlZmVyKCksZT1VLmJpbmQodGhpcyksZj1WLmJpbmQodGhpcyksZz1XLmJpbmQodGhpcyksaD1YLmJpbmQodGhpcyksaT1ZLmJpbmQodGhpcyksaz1aLmJpbmQodGhpcyksaj0kLmJpbmQodGhpcyksZD1ULmJpbmQodGhpcyl9LGxvYWQ6ZnVuY3Rpb24oYSxiKXtFPWIsYmIuY2FsbCh0aGlzLGEpfSxzZXRWaWRlb01vZGVsOmZ1bmN0aW9uKGEpe3RoaXMudmlkZW9Nb2RlbD1hLHRoaXMudmlkZW9Nb2RlbC5saXN0ZW4oXCJwbGF5XCIsZSksdGhpcy52aWRlb01vZGVsLmxpc3RlbihcInBhdXNlXCIsZiksdGhpcy52aWRlb01vZGVsLmxpc3RlbihcImVycm9yXCIsZyksdGhpcy52aWRlb01vZGVsLmxpc3RlbihcInNlZWtpbmdcIixoKSx0aGlzLnZpZGVvTW9kZWwubGlzdGVuKFwidGltZXVwZGF0ZVwiLGopLHRoaXMudmlkZW9Nb2RlbC5saXN0ZW4oXCJwcm9ncmVzc1wiLGspLHRoaXMudmlkZW9Nb2RlbC5saXN0ZW4oXCJsb2FkZWRtZXRhZGF0YVwiLGQpfSxpbml0UHJvdGVjdGlvbjpmdW5jdGlvbigpe209Si5iaW5kKHRoaXMpLG49Sy5iaW5kKHRoaXMpLG89TC5iaW5kKHRoaXMpLHA9TS5iaW5kKHRoaXMpLHRoaXMucHJvdGVjdGlvbk1vZGVsPXRoaXMuc3lzdGVtLmdldE9iamVjdChcInByb3RlY3Rpb25Nb2RlbFwiKSx0aGlzLnByb3RlY3Rpb25Nb2RlbC5pbml0KHRoaXMuZ2V0VmlkZW9Nb2RlbCgpKSx0aGlzLnByb3RlY3Rpb25Db250cm9sbGVyPXRoaXMuc3lzdGVtLmdldE9iamVjdChcInByb3RlY3Rpb25Db250cm9sbGVyXCIpLHRoaXMucHJvdGVjdGlvbkNvbnRyb2xsZXIuaW5pdCh0aGlzLnZpZGVvTW9kZWwsdGhpcy5wcm90ZWN0aW9uTW9kZWwpLHRoaXMucHJvdGVjdGlvbk1vZGVsLmxpc3RlblRvTmVlZEtleShtKSx0aGlzLnByb3RlY3Rpb25Nb2RlbC5saXN0ZW5Ub0tleU1lc3NhZ2UobiksdGhpcy5wcm90ZWN0aW9uTW9kZWwubGlzdGVuVG9LZXlFcnJvcihwKSx0aGlzLnByb3RlY3Rpb25Nb2RlbC5saXN0ZW5Ub0tleUFkZGVkKG8pfSxnZXRWaWRlb01vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9Nb2RlbH0sZ2V0TWFuaWZlc3RFeHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybiBhLm1hbmlmZXN0RXh0fSxzZXRBdXRvUGxheTpmdW5jdGlvbihhKXt6PWF9LGdldEF1dG9QbGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHp9LHJlc2V0OmZ1bmN0aW9uKCl7SC5jYWxsKHRoaXMpLHRoaXMudmlkZW9Nb2RlbC51bmxpc3RlbihcInBsYXlcIixlKSx0aGlzLnZpZGVvTW9kZWwudW5saXN0ZW4oXCJwYXVzZVwiLGYpLHRoaXMudmlkZW9Nb2RlbC51bmxpc3RlbihcImVycm9yXCIsZyksdGhpcy52aWRlb01vZGVsLnVubGlzdGVuKFwic2Vla2luZ1wiLGgpLHRoaXMudmlkZW9Nb2RlbC51bmxpc3RlbihcInRpbWV1cGRhdGVcIixqKSx0aGlzLnZpZGVvTW9kZWwudW5saXN0ZW4oXCJwcm9ncmVzc1wiLGspLHRoaXMudmlkZW9Nb2RlbC51bmxpc3RlbihcImxvYWRlZG1ldGFkYXRhXCIsZCksTy5jYWxsKHRoaXMpLHRoaXMucHJvdGVjdGlvbkNvbnRyb2xsZXImJnRoaXMucHJvdGVjdGlvbkNvbnRyb2xsZXIudGVhcmRvd25LZXlTeXN0ZW0oQyksdGhpcy5wcm90ZWN0aW9uQ29udHJvbGxlcj12b2lkIDAsdGhpcy5wcm90ZWN0aW9uTW9kZWw9dm9pZCAwLHRoaXMuZnJhZ21lbnRDb250cm9sbGVyPXZvaWQgMCx0aGlzLnJlcXVlc3RTY2hlZHVsZXI9dm9pZCAwLGM9US5kZWZlcigpfSxnZXREdXJhdGlvbjpmdW5jdGlvbigpe3JldHVybiBsfSxzZXRQZXJpb2RJbmRleDpmdW5jdGlvbihhKXtFPWF9LGdldFBlcmlvZEluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIEV9LGdldFN0YXJ0VGltZTpmdW5jdGlvbigpe3JldHVybiBGfSxwbGF5Okcsc2VlazpJLHBhdXNlOkh9fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuU3RyZWFtLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlN0cmVhbX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlN0cmVhbUNvbnRyb2xsZXI9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYSxiPVtdLGM9NCxkPTMsZT0hMCxmPW51bGwsZz1mdW5jdGlvbigpe2EucGxheSgpfSxoPWZ1bmN0aW9uKCl7YS5wYXVzZSgpfSxpPWZ1bmN0aW9uKGIpe2Euc2VlayhiKX0saj1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0RWxlbWVudCgpLGQ9Yi5nZXRFbGVtZW50KCk7cmV0dXJuIGQucGFyZW50Tm9kZXx8Yy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkLGMpLGMuc3R5bGUud2lkdGg9XCIwcHhcIixkLnN0eWxlLndpZHRoPVwiMTAwJVwiLG0oYyxkKSxsKGEpLGsoYiksUS53aGVuKCEwKX0saz1mdW5jdGlvbihhKXthLmxpc3RlbihcInNlZWtpbmdcIixwKSxhLmxpc3RlbihcInByb2dyZXNzXCIsbikscigpJiZhLmxpc3RlbihcInRpbWV1cGRhdGVcIixvKX0sbD1mdW5jdGlvbihhKXthLnVubGlzdGVuKFwic2Vla2luZ1wiLHApLGEudW5saXN0ZW4oXCJwcm9ncmVzc1wiLG4pLGEudW5saXN0ZW4oXCJ0aW1ldXBkYXRlXCIsbyl9LG09ZnVuY3Rpb24oYSxiKXtbXCJjb250cm9sc1wiLFwibG9vcFwiLFwibXV0ZWRcIixcInBsYXliYWNrUmF0ZVwiLFwidm9sdW1lXCJdLmZvckVhY2goZnVuY3Rpb24oYyl7YltjXT1hW2NdfSl9LG49ZnVuY3Rpb24oKXt2YXIgYj1hLmdldFZpZGVvTW9kZWwoKS5nZXRFbGVtZW50KCkuYnVmZmVyZWQ7aWYoYi5sZW5ndGgpe3ZhciBkPWIubGVuZ3RoLTEsZT1iLmVuZChkKSxmPWEuZ2V0U3RhcnRUaW1lKCkrYS5nZXREdXJhdGlvbigpLWU7Yz5mJiYoYS5nZXRWaWRlb01vZGVsKCkudW5saXN0ZW4oXCJwcm9ncmVzc1wiLG4pLHEoKSl9fSxvPWZ1bmN0aW9uKCl7aWYoIWEuZ2V0VmlkZW9Nb2RlbCgpLmdldEVsZW1lbnQoKS5zZWVraW5nKXt2YXIgYj1hLmdldFN0YXJ0VGltZSgpK2EuZ2V0RHVyYXRpb24oKSxjPWEuZ2V0VmlkZW9Nb2RlbCgpLmdldEN1cnJlbnRUaW1lKCk7ZD5iLWMmJnYoYSxyKCkpfX0scD1mdW5jdGlvbigpe3ZhciBiPWEuZ2V0VmlkZW9Nb2RlbCgpLmdldEN1cnJlbnRUaW1lKCksYz1zKGIpO2MmJmMhPT1hJiZ2KGEsYyxiKX0scT1mdW5jdGlvbigpe3ZhciBhPXIoKTthJiZhLnNlZWsoYS5nZXRTdGFydFRpbWUoKSl9LHI9ZnVuY3Rpb24oKXt2YXIgYz1hLmdldFBlcmlvZEluZGV4KCkrMTtyZXR1cm4gYzxiLmxlbmd0aD9iW2NdOm51bGx9LHM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPTAsZD1udWxsLGU9MCxmPWIubGVuZ3RoO2Y+ZTtlKyspaWYoZD1iW2VdLGMrPWQuZ2V0RHVyYXRpb24oKSxjPmEpcmV0dXJuIGR9LHQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnN5c3RlbS5nZXRPYmplY3QoXCJ2aWRlb01vZGVsXCIpLGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInZpZGVvXCIpO3JldHVybiBhLnNldEVsZW1lbnQoYiksYX0sdT1mdW5jdGlvbihhKXthLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhKX0sdj1mdW5jdGlvbihiLGMsZCl7YiYmYyYmYiE9PWMmJlEud2hlbihmfHwhMCkudGhlbihmdW5jdGlvbigpe2IucGF1c2UoKSxhPWMsZj1qKGIuZ2V0VmlkZW9Nb2RlbCgpLGMuZ2V0VmlkZW9Nb2RlbCgpKSxkP2koYi5nZXRWaWRlb01vZGVsKCkuZ2V0Q3VycmVudFRpbWUoKSk6aShjLmdldFN0YXJ0VGltZSgpKSxnKCl9KX07cmV0dXJue3N5c3RlbTp2b2lkIDAsdmlkZW9Nb2RlbDp2b2lkIDAsbWFuaWZlc3RMb2FkZXI6dm9pZCAwLG1hbmlmZXN0VXBkYXRlcjp2b2lkIDAsbWFuaWZlc3RNb2RlbDp2b2lkIDAsbWVkaWFTb3VyY2VFeHQ6dm9pZCAwLHNvdXJjZUJ1ZmZlckV4dDp2b2lkIDAsYnVmZmVyRXh0OnZvaWQgMCxtYW5pZmVzdEV4dDp2b2lkIDAsZnJhZ21lbnRDb250cm9sbGVyOnZvaWQgMCxhYnJDb250cm9sbGVyOnZvaWQgMCxmcmFnbWVudEV4dDp2b2lkIDAsY2FwYWJpbGl0aWVzOnZvaWQgMCxkZWJ1Zzp2b2lkIDAsbWV0cmljc0V4dDp2b2lkIDAsZXJySGFuZGxlcjp2b2lkIDAsZ2V0TWFuaWZlc3RFeHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5nZXRNYW5pZmVzdEV4dCgpfSxzZXRBdXRvUGxheTpmdW5jdGlvbihhKXtlPWF9LGdldEF1dG9QbGF5OmZ1bmN0aW9uKCl7cmV0dXJuIGV9LGdldFZpZGVvTW9kZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWRlb01vZGVsfSxzZXRWaWRlb01vZGVsOmZ1bmN0aW9uKGEpe3RoaXMudmlkZW9Nb2RlbD1hfSxsb2FkOmZ1bmN0aW9uKGMpe3ZhciBkLGY9dGhpcztmLm1hbmlmZXN0TG9hZGVyLmxvYWQoYykudGhlbihmdW5jdGlvbihjKXtmLm1hbmlmZXN0TW9kZWwuc2V0VmFsdWUoYyksZi5kZWJ1Zy5sb2coXCJNYW5pZmVzdCBoYXMgbG9hZGVkLlwiKSxmLmRlYnVnLmxvZyhmLm1hbmlmZXN0TW9kZWwuZ2V0VmFsdWUoKSksZi5tYW5pZmVzdFVwZGF0ZXIuaW5pdCgpLGYubWFuaWZlc3RFeHQuZ2V0UGVyaW9kQ291bnQoYykudGhlbihmdW5jdGlvbihnKXtmb3IodmFyIGg9MDtnPmg7aCsrKWQ9Zi5zeXN0ZW0uZ2V0T2JqZWN0KFwic3RyZWFtXCIpLGQuc2V0VmlkZW9Nb2RlbCgwPT09aD9mLnZpZGVvTW9kZWw6dC5jYWxsKGYpKSxkLmluaXRQcm90ZWN0aW9uKCksZC5zZXRBdXRvUGxheShlKSxkLmxvYWQoYyxoKSxiLnB1c2goZCk7YT1iWzBdLGsoYS5nZXRWaWRlb01vZGVsKCkpfSl9LGZ1bmN0aW9uKCl7Zi5yZXNldCgpfSl9LHJlc2V0OmZ1bmN0aW9uKCl7YSYmbChhLmdldFZpZGVvTW9kZWwoKSk7Zm9yKHZhciBjPTAsZD1iLmxlbmd0aDtkPmM7YysrKXt2YXIgZT1iW2NdO2UucmVzZXQoKSxlIT09YSYmdShlLmdldFZpZGVvTW9kZWwoKS5nZXRFbGVtZW50KCkpfWI9W10sdGhpcy5tYW5pZmVzdFVwZGF0ZXIuc3RvcCgpLHRoaXMubWFuaWZlc3RNb2RlbC5zZXRWYWx1ZShudWxsKSxmPW51bGwsYT1udWxsfSxwbGF5Omcsc2VlazppLHBhdXNlOmh9fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuU3RyZWFtQ29udHJvbGxlci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5TdHJlYW1Db250cm9sbGVyfSxNZWRpYVBsYXllci5tb2RlbHMuVmlkZW9Nb2RlbD1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhLGI9W10sYz1mdW5jdGlvbigpe3JldHVybiBiLmxlbmd0aD4wfSxkPWZ1bmN0aW9uKGMpe251bGwhPT1jJiZiW2NdIT09ITAmJihiLnB1c2goYyksYltjXT0hMCxhLnBsYXliYWNrUmF0ZT0wKX0sZT1mdW5jdGlvbihkKXtpZihudWxsIT09ZCl7YltkXT0hMTt2YXIgZT1iLmluZGV4T2YoZCk7LTEhPT1lJiZiLnNwbGljZShlLDEpLGMoKT09PSExJiYoYS5wbGF5YmFja1JhdGU9MSl9fSxmPWZ1bmN0aW9uKGEsYil7Yj9kKGEpOmUoYSl9O3JldHVybntzeXN0ZW06dm9pZCAwLHNldHVwOmZ1bmN0aW9uKCl7fSxwbGF5OmZ1bmN0aW9uKCl7YS5wbGF5KCl9LHBhdXNlOmZ1bmN0aW9uKCl7YS5wYXVzZSgpfSxpc1BhdXNlZDpmdW5jdGlvbigpe3JldHVybiBhLnBhdXNlZH0sZ2V0UGxheWJhY2tSYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGEucGxheWJhY2tSYXRlfSxzZXRQbGF5YmFja1JhdGU6ZnVuY3Rpb24oYil7YS5wbGF5YmFja1JhdGU9Yn0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gYS5jdXJyZW50VGltZX0sc2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oYil7YS5jdXJyZW50VGltZSE9YiYmKGEuY3VycmVudFRpbWU9Yil9LGxpc3RlbjpmdW5jdGlvbihiLGMpe2EuYWRkRXZlbnRMaXN0ZW5lcihiLGMsITEpfSx1bmxpc3RlbjpmdW5jdGlvbihiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsITEpfSxnZXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldEVsZW1lbnQ6ZnVuY3Rpb24oYil7YT1ifSxzZXRTb3VyY2U6ZnVuY3Rpb24oYil7YS5zcmM9Yn0sc3RhbGxTdHJlYW06Zixpc1N0YWxsZWQ6Y319LE1lZGlhUGxheWVyLm1vZGVscy5WaWRlb01vZGVsLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIubW9kZWxzLlZpZGVvTW9kZWx9LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5WaWRlb01vZGVsRXh0ZW5zaW9ucz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3JldHVybntnZXREcm9wcGVkRnJhbWVzOmZ1bmN0aW9uKGEpe3ZhciBiPW51bGwhPT1hLndlYmtpdERyb3BwZWRGcmFtZUNvdW50LGM9LTE7cmV0dXJuIGImJihjPWEud2Via2l0RHJvcHBlZEZyYW1lQ291bnQpLGN9fX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlZpZGVvTW9kZWxFeHRlbnNpb25zLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlZpZGVvTW9kZWxFeHRlbnNpb25zfSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuVGV4dENvbnRyb2xsZXI9ZnVuY3Rpb24oKXt2YXIgYSxiLGM9XCJMT0FESU5HXCIsZD1cIlJFQURZXCIsZT0hMSxmPS0xLGc9ZCxoPWZ1bmN0aW9uKGEpe3RoaXMuZGVidWcubG9nKFwiVGV4dENvbnRyb2xsZXIgc2V0U3RhdGUgdG86XCIrYSksZz1hfSxpPWZ1bmN0aW9uKCl7aWYoZSYmZz09PWQpe3ZhciBiPXRoaXM7aC5jYWxsKGIsYyksYi5pbmRleEhhbmRsZXIuZ2V0SW5pdFJlcXVlc3QoMCxhKS50aGVuKGZ1bmN0aW9uKGEpe2IuZGVidWcubG9nKFwiTG9hZGluZyB0ZXh0IHRyYWNrIGluaXRpYWxpemF0aW9uOiBcIithLnVybCksYi5kZWJ1Zy5sb2coYSksYi5mcmFnbWVudExvYWRlci5sb2FkKGEpLnRoZW4oay5iaW5kKGIsYSksbC5iaW5kKGIsYSkpLGguY2FsbChiLGMpfSl9fSxqPWZ1bmN0aW9uKCl7aS5jYWxsKHRoaXMpfSxrPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9dGhpcztkLmRlYnVnLmxvZyhcIiBUZXh0IHRyYWNrIEJ5dGVzIGZpbmlzaGVkIGxvYWRpbmc6IFwiK2EudXJsKSxkLmZyYWdtZW50Q29udHJvbGxlci5wcm9jZXNzKGMuZGF0YSkudGhlbihmdW5jdGlvbihhKXtudWxsIT09YSYmKGQuZGVidWcubG9nKFwiUHVzaCB0ZXh0IHRyYWNrIGJ5dGVzOiBcIithLmJ5dGVMZW5ndGgpLGQuc291cmNlQnVmZmVyRXh0LmFwcGVuZChiLGEsZC52aWRlb01vZGVsKSl9KX0sbD1mdW5jdGlvbigpe307cmV0dXJue3ZpZGVvTW9kZWw6dm9pZCAwLGZyYWdtZW50TG9hZGVyOnZvaWQgMCxmcmFnbWVudENvbnRyb2xsZXI6dm9pZCAwLGluZGV4SGFuZGxlcjp2b2lkIDAsc291cmNlQnVmZmVyRXh0OnZvaWQgMCxkZWJ1Zzp2b2lkIDAsaW5pdGlhbGl6ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZj10aGlzO2Yuc2V0VmlkZW9Nb2RlbChkKSxmLnNldFBlcmlvZEluZGV4KGEpLGYuc2V0RGF0YShiKSxmLnNldEJ1ZmZlcihjKSxlPSEwfSxnZXRQZXJpb2RJbmRleDpmdW5jdGlvbigpe3JldHVybiBmfSxzZXRQZXJpb2RJbmRleDpmdW5jdGlvbihhKXtmPWF9LGdldFZpZGVvTW9kZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWRlb01vZGVsfSxzZXRWaWRlb01vZGVsOmZ1bmN0aW9uKGEpe3RoaXMudmlkZW9Nb2RlbD1hfSxnZXREYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldERhdGE6ZnVuY3Rpb24oYil7YT1ifSxnZXRCdWZmZXI6ZnVuY3Rpb24oKXtyZXR1cm4gYn0sc2V0QnVmZmVyOmZ1bmN0aW9uKGEpe2I9YX0scmVzZXQ6ZnVuY3Rpb24oYSxjKXthfHwodGhpcy5zb3VyY2VCdWZmZXJFeHQuYWJvcnQoYyxiKSx0aGlzLnNvdXJjZUJ1ZmZlckV4dC5yZW1vdmVTb3VyY2VCdWZmZXIoYyxiKSl9LHN0YXJ0Omp9fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuVGV4dENvbnRyb2xsZXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuVGV4dENvbnRyb2xsZXJ9LE1lZGlhUGxheWVyLnV0aWxzLlRleHRUcmFja0V4dGVuc2lvbnM9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtyZXR1cm57YWRkVGV4dFRyYWNrOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9YS5hZGRUZXh0VHJhY2soXCJjYXB0aW9uc1wiLGMsZCk7Zi5kZWZhdWx0PWUsZi5tb2RlPVwic2hvd2luZ1wiO2Zvcih2YXIgZyBpbiBiKXt2YXIgaD1iW2ddO2YuYWRkQ3VlKG5ldyBUZXh0VHJhY2tDdWUoaC5zdGFydCxoLmVuZCxoLmRhdGEpKX1yZXR1cm4gUS53aGVuKGYpfSxkZWxldGVDdWVzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1hLnRleHRUcmFja3NbMF0sYz1iLmN1ZXMsZD1jLmxlbmd0aDtkPj0wO2QtLSliLnJlbW92ZUN1ZShjW2RdKTtiLm1vZGU9XCJkaXNhYmxlZFwifX19LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5UZXh0VlRUU291cmNlQnVmZmVyPWZ1bmN0aW9uKCl7dmFyIGEsYixjO3JldHVybntzeXN0ZW06dm9pZCAwLGV2ZW50QnVzOnZvaWQgMCxpbml0aWFsaXplOmZ1bmN0aW9uKGQsZSl7Yz1kLGE9ZS5nZXRWaWRlb01vZGVsKCkuZ2V0RWxlbWVudCgpLGI9ZS5nZXREYXRhKCl9LGFwcGVuZDpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2QuZ2V0UGFyc2VyKCkucGFyc2UoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50MTZBcnJheShjKSkpLnRoZW4oZnVuY3Rpb24oYyl7dmFyIGU9Yi5SZXByZXNlbnRhdGlvbl9hc0FycmF5WzBdLmlkLGY9Yi5sYW5nO2QuZ2V0VGV4dFRyYWNrRXh0ZW5zaW9ucygpLmFkZFRleHRUcmFjayhhLGMsZSxmLCEwKS50aGVuKGZ1bmN0aW9uKCl7ZC5ldmVudEJ1cy5kaXNwYXRjaEV2ZW50KHt0eXBlOlwidXBkYXRlZW5kXCJ9KX0pfSl9LGFib3J0OmZ1bmN0aW9uKCl7dGhpcy5nZXRUZXh0VHJhY2tFeHRlbnNpb25zKCkuZGVsZXRlQ3VlcyhhKX0sZ2V0UGFyc2VyOmZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuXCJ0ZXh0L3Z0dFwiPT09YyYmKGE9dGhpcy5zeXN0ZW0uZ2V0T2JqZWN0KFwidnR0UGFyc2VyXCIpKSxhfSxnZXRUZXh0VHJhY2tFeHRlbnNpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3lzdGVtLmdldE9iamVjdChcInRleHRUcmFja0V4dGVuc2lvbnNcIil9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuZXZlbnRCdXMuYWRkRXZlbnRMaXN0ZW5lcihhLGIsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuZXZlbnRCdXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGIsYyl9fX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlRleHRWVFRTb3VyY2VCdWZmZXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuVGV4dFZUVFNvdXJjZUJ1ZmZlcn0sTWVkaWFQbGF5ZXIudXRpbHMuVlRUUGFyc2VyPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9ZnVuY3Rpb24oYSl7dmFyIGI9YS5zcGxpdChcIjpcIiksYz1iLmxlbmd0aC0xO3JldHVybiBhPTYwKnBhcnNlSW50KGJbYy0xXSwxMCkrcGFyc2VGbG9hdChiW2NdLDEwKSwyPT09YyYmKGErPTM2MDAqcGFyc2VJbnQoYlswXSwxMCkpLGF9O3JldHVybntwYXJzZTpmdW5jdGlvbihiKXt2YXIgYyxkPS8oPzpcXHJcXG58XFxyfFxcbikvZ20sZT0vLS0+LyxmPS8oXltcXHNdK3xbXFxzXSskKS9nLGc9W107Yj1iLnNwbGl0KGQpLGM9Yi5sZW5ndGg7Zm9yKHZhciBoPTA7Yz5oO2grKyl7dmFyIGk9YltoXTtpZihpLmxlbmd0aD4wJiZcIldFQlZUVFwiIT09aSYmaS5tYXRjaChlKSl7dmFyIGo9aS5zcGxpdChlKSxrPWJbaCsxXTtnLnB1c2goe3N0YXJ0OmEoalswXS5yZXBsYWNlKGYsXCJcIikpLGVuZDphKGpbMV0ucmVwbGFjZShmLFwiXCIpKSxkYXRhOmt9KX19cmV0dXJuIFEud2hlbihnKX19fSxNZWRpYVBsYXllci5ydWxlcy5CYXNlUnVsZXNDb2xsZWN0aW9uPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9W107cmV0dXJue2Rvd25sb2FkUmF0aW9SdWxlOnZvaWQgMCxpbnN1ZmZpY2llbnRCdWZmZXJSdWxlOnZvaWQgMCxnZXRSdWxlczpmdW5jdGlvbigpe3JldHVybiBRLndoZW4oYSl9LHNldHVwOmZ1bmN0aW9uKCl7dmFyIGE9dGhpczthLmdldFJ1bGVzKCkudGhlbihmdW5jdGlvbihiKXtiLnB1c2goYS5kb3dubG9hZFJhdGlvUnVsZSksYi5wdXNoKGEuaW5zdWZmaWNpZW50QnVmZmVyUnVsZSl9KX19fSxNZWRpYVBsYXllci5ydWxlcy5CYXNlUnVsZXNDb2xsZWN0aW9uLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIucnVsZXMuQmFzZVJ1bGVzQ29sbGVjdGlvbn0sTWVkaWFQbGF5ZXIucnVsZXMuRG93bmxvYWRSYXRpb1J1bGU9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcyxlPVEuZGVmZXIoKTtyZXR1cm4gZC5tYW5pZmVzdEV4dC5nZXRSZXByZXNlbnRhdGlvbkZvcihhLGMpLnRoZW4oZnVuY3Rpb24oYSl7ZC5tYW5pZmVzdEV4dC5nZXRCYW5kd2lkdGgoYSkudGhlbihmdW5jdGlvbihhKXtlLnJlc29sdmUoYS9iKX0pfSksZS5wcm9taXNlfTtyZXR1cm57ZGVidWc6dm9pZCAwLG1hbmlmZXN0RXh0OnZvaWQgMCxjaGVja0luZGV4OmZ1bmN0aW9uKGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbixvPXRoaXMscD1jLkh0dHBMaXN0LHE9Ljc1O3JldHVybiBvLmRlYnVnLmxvZyhcIkNoZWNraW5nIGRvd25sb2FkIHJhdGlvIHJ1bGUuLi5cIiksYz9udWxsPT09cHx8dm9pZCAwPT09cHx8MD09PXAubGVuZ3RoPyhvLmRlYnVnLmxvZyhcIk5vIHJlcXVlc3RzIG1hZGUgZm9yIHRoaXMgc3RyZWFtIHlldCwgYmFpbGluZy5cIiksUS53aGVuKG5ldyBNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0KSk6KGU9cFtwLmxlbmd0aC0xXSxnPShlLnRmaW5pc2guZ2V0VGltZSgpLWUudHJlcXVlc3QuZ2V0VGltZSgpKS8xZTMsZj0oZS50ZmluaXNoLmdldFRpbWUoKS1lLnRyZXNwb25zZS5nZXRUaW1lKCkpLzFlMywwPj1nPyhvLmRlYnVnLmxvZyhcIkRvbid0IGtub3cgaG93IGxvbmcgdGhlIGRvd25sb2FkIG9mIHRoZSBsYXN0IGZyYWdtZW50IHRvb2ssIGJhaWxpbmcuXCIpLFEud2hlbihuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdCkpOm51bGw9PT1lLm1lZGlhZHVyYXRpb258fHZvaWQgMD09PWUubWVkaWFkdXJhdGlvbnx8ZS5tZWRpYWR1cmF0aW9uPD0wPyhvLmRlYnVnLmxvZyhcIkRvbid0IGtub3cgdGhlIGR1cmF0aW9uIG9mIHRoZSBsYXN0IG1lZGlhIGZyYWdtZW50LCBiYWlsaW5nLlwiKSxRLndoZW4obmV3IE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QpKTooaz1RLmRlZmVyKCksaT1lLm1lZGlhZHVyYXRpb24vZyxoPWUubWVkaWFkdXJhdGlvbi9mKnEsaXNOYU4oaCl8fGlzTmFOKGkpPyhvLmRlYnVnLmxvZyhcIlRvdGFsIHRpbWU6IFwiK2crXCJzXCIpLG8uZGVidWcubG9nKFwiRG93bmxvYWQgdGltZTogXCIrZitcInNcIiksby5kZWJ1Zy5sb2coXCJUaGUgcmF0aW9zIGFyZSBOYU4sIGJhaWxpbmcuXCIpLFEud2hlbihuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdCkpOihvLmRlYnVnLmxvZyhcIlRvdGFsIHJhdGlvOiBcIitpKSxvLmRlYnVnLmxvZyhcIkRvd25sb2FkIHJhdGlvOiBcIitoKSxvLmRlYnVnLmxvZyhcIkRvd25sb2FkIHJhdGlvOiBcIitoKSxpc05hTihoKT8oby5kZWJ1Zy5sb2coXCJJbnZhbGlkIHJhdGlvLCBiYWlsaW5nLlwiKSxrLnJlc29sdmUobmV3IE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QpKToxPmg/KG8uZGVidWcubG9nKFwiRG93bmxvYWQgcmF0aW8gaXMgcG9vci5cIiksYj4wPyhvLmRlYnVnLmxvZyhcIldlIGFyZSBub3QgYXQgdGhlIGxvd2VzdCBiaXRyYXRlLCBzbyBzd2l0Y2ggZG93bi5cIiksby5tYW5pZmVzdEV4dC5nZXRSZXByZXNlbnRhdGlvbkZvcihiLTEsZCkudGhlbihmdW5jdGlvbihhKXtvLm1hbmlmZXN0RXh0LmdldEJhbmR3aWR0aChhKS50aGVuKGZ1bmN0aW9uKGEpe28ubWFuaWZlc3RFeHQuZ2V0UmVwcmVzZW50YXRpb25Gb3IoYixkKS50aGVuKGZ1bmN0aW9uKGMpe28ubWFuaWZlc3RFeHQuZ2V0QmFuZHdpZHRoKGMpLnRoZW4oZnVuY3Rpb24oYyl7aj1hL2Msby5kZWJ1Zy5sb2coXCJTd2l0Y2ggcmF0aW86IFwiK2opLGo+aD8oby5kZWJ1Zy5sb2coXCJUaGluZ3MgbXVzdCBiZSBnb2luZyBwcmV0dHkgYmFkLCBzd2l0Y2ggYWxsIHRoZSB3YXkgZG93bi5cIiksay5yZXNvbHZlKG5ldyBNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0KDApKSk6KG8uZGVidWcubG9nKFwiVGhpbmdzIGNvdWxkIGJlIGJldHRlciwgc28ganVzdCBzd2l0Y2ggZG93biBvbmUgaW5kZXguXCIpLGsucmVzb2x2ZShuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdChiLTEpKSlcbn0pfSl9KX0pKTooby5kZWJ1Zy5sb2coXCJXZSBhcmUgYXQgdGhlIGxvd2VzdCBiaXRyYXRlIGFuZCBjYW5ub3Qgc3dpdGNoIGRvd24sIHVzZSBjdXJyZW50LlwiKSxrLnJlc29sdmUobmV3IE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QoYikpKSk6KG8uZGVidWcubG9nKFwiRG93bmxvYWQgcmF0aW8gaXMgZ29vZC5cIiksby5tYW5pZmVzdEV4dC5nZXRSZXByZXNlbnRhdGlvbkNvdW50KGQpLnRoZW4oZnVuY3Rpb24oYyl7Yy09MSxjPmI/KG8uZGVidWcubG9nKFwiV2UgYXJlIG5vdCBhdCB0aGUgaGlnaGVzdCBiaXRyYXRlLCBzbyBzd2l0Y2ggdXAuXCIpLG8ubWFuaWZlc3RFeHQuZ2V0UmVwcmVzZW50YXRpb25Gb3IoYisxLGQpLnRoZW4oZnVuY3Rpb24oZSl7by5tYW5pZmVzdEV4dC5nZXRCYW5kd2lkdGgoZSkudGhlbihmdW5jdGlvbihlKXtvLm1hbmlmZXN0RXh0LmdldFJlcHJlc2VudGF0aW9uRm9yKGIsZCkudGhlbihmdW5jdGlvbihmKXtvLm1hbmlmZXN0RXh0LmdldEJhbmR3aWR0aChmKS50aGVuKGZ1bmN0aW9uKGYpe2lmKGo9ZS9mLG8uZGVidWcubG9nKFwiU3dpdGNoIHJhdGlvOiBcIitqKSxoPj1qKWlmKGg+MWUzKW8uZGVidWcubG9nKFwiVG9ucyBvZiBiYW5kd2lkdGggYXZhaWxhYmxlLCBnbyBhbGwgdGhlIHdheSB1cC5cIiksay5yZXNvbHZlKG5ldyBNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0KGMtMSkpO2Vsc2UgaWYoaD4xMDApby5kZWJ1Zy5sb2coXCJKdXN0IGVub3VnaCBiYW5kd2lkdGggYXZhaWxhYmxlLCBzd2l0Y2ggdXAgb25lLlwiKSxrLnJlc29sdmUobmV3IE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QoYisxKSk7ZWxzZXtmb3Ioby5kZWJ1Zy5sb2coXCJOb3QgZXhhY3RseSBzdXJlIHdoZXJlIHRvIGdvLCBzbyBkbyBzb21lIG1hdGguXCIpLG09LTEsbD1bXTsobSs9MSk8YzspbC5wdXNoKGEuY2FsbChvLG0sZixkKSk7US5hbGwobCkudGhlbihmdW5jdGlvbihhKXtmb3IobT0wLG49YS5sZW5ndGg7bj5tJiYhKGg8YVttXSk7bSs9MSk7by5kZWJ1Zy5sb2coXCJDYWxjdWxhdGVkIGlkZWFsIG5ldyBxdWFsaXR5IGluZGV4IGlzOiBcIittKSxrLnJlc29sdmUobmV3IE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QobSkpfSl9ZWxzZSBvLmRlYnVnLmxvZyhcIk5vdCBlbm91Z2ggYmFuZHdpZHRoIHRvIHN3aXRjaCB1cC5cIiksay5yZXNvbHZlKG5ldyBNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0KX0pfSl9KX0pKTooby5kZWJ1Zy5sb2coXCJXZSBhcmUgYXQgdGhlIGhpZ2hlc3QgYml0cmF0ZSBhbmQgY2Fubm90IHN3aXRjaCB1cCwgdXNlIGN1cnJlbnQuXCIpLGsucmVzb2x2ZShuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdChjKSkpfSkpLGsucHJvbWlzZSkpKTooby5kZWJ1Zy5sb2coXCJObyBtZXRyaWNzLCBiYWlsaW5nLlwiKSxRLndoZW4obmV3IE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QpKX19fSxNZWRpYVBsYXllci5ydWxlcy5Eb3dubG9hZFJhdGlvUnVsZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLnJ1bGVzLkRvd25sb2FkUmF0aW9SdWxlfSxNZWRpYVBsYXllci5ydWxlcy5JbnN1ZmZpY2llbnRCdWZmZXJSdWxlPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9MCxiPTM7cmV0dXJue2RlYnVnOnZvaWQgMCxjaGVja0luZGV4OmZ1bmN0aW9uKGMsZCl7dmFyIGUsZixnPXRoaXMsaD0hMSxpPU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLkRFRkFVTFQ7cmV0dXJuIGcuZGVidWcubG9nKFwiQ2hlY2tpbmcgaW5zdWZmaWNpZW50IGJ1ZmZlciBydWxlLi4uXCIpLG51bGw9PT1kLlBsYXlMaXN0fHx2b2lkIDA9PT1kLlBsYXlMaXN0fHwwPT09ZC5QbGF5TGlzdC5sZW5ndGg/KGcuZGVidWcubG9nKFwiTm90IGVub3VnaCBpbmZvcm1hdGlvbiBmb3IgcnVsZS5cIiksUS53aGVuKG5ldyBNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0KSk6KGU9ZC5QbGF5TGlzdFtkLlBsYXlMaXN0Lmxlbmd0aC0xXSxudWxsPT09ZXx8dm9pZCAwPT09ZXx8MD09PWUudHJhY2UubGVuZ3RoPyhnLmRlYnVnLmxvZyhcIk5vdCBlbm91Z2ggaW5mb3JtYXRpb24gZm9yIHJ1bGUuXCIpLFEud2hlbihuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdCkpOihmPWUudHJhY2VbZS50cmFjZS5sZW5ndGgtMl0sbnVsbD09PWZ8fHZvaWQgMD09PWZ8fG51bGw9PT1mLnN0b3ByZWFzb258fHZvaWQgMD09PWYuc3RvcHJlYXNvbj8oZy5kZWJ1Zy5sb2coXCJOb3QgZW5vdWdoIGluZm9ybWF0aW9uIGZvciBydWxlLlwiKSxRLndoZW4obmV3IE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QpKTooZi5zdG9wcmVhc29uPT09TWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdC5UcmFjZS5SRUJVRkZFUklOR19SRUFTT04mJihoPSEwLGErPTEsZy5kZWJ1Zy5sb2coXCJOdW1iZXIgb2YgdGltZXMgdGhlIGJ1ZmZlciBoYXMgcnVuIGRyeTogXCIrYSkpLGE+YiYmKGk9TWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuU1RST05HLGcuZGVidWcubG9nKFwiQXBwbHkgU1RST05HIHRvIGJ1ZmZlciBydWxlLlwiKSksaD8oZy5kZWJ1Zy5sb2coXCJUaGUgYnVmZmVyIHJhbiBkcnkgcmVjZW50bHksIHN3aXRjaCBkb3duLlwiKSxRLndoZW4obmV3IE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QoYy0xLGkpKSk6YT5iPyhnLmRlYnVnLmxvZyhcIlRvbyBtYW55IGRyeSBidWZmZXIgaGl0cywgcXVpdCBzd2l0Y2hpbmcgYml0cmF0ZXMuXCIpLFEud2hlbihuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdChjLGkpKSk6US53aGVuKG5ldyBNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0KE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLk5PX0NIQU5HRSxpKSkpKSl9fX0sTWVkaWFQbGF5ZXIucnVsZXMuSW5zdWZmaWNpZW50QnVmZmVyUnVsZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLnJ1bGVzLkluc3VmZmljaWVudEJ1ZmZlclJ1bGV9LE1lZGlhUGxheWVyLnJ1bGVzLkxpbWl0U3dpdGNoZXNSdWxlPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9MTAsYj0yZTQsYz01LGQ9MDtyZXR1cm57ZGVidWc6dm9pZCAwLGNoZWNrSW5kZXg6ZnVuY3Rpb24oZSxmKXtpZihkPjApcmV0dXJuIGQtPTEsUS53aGVuKG5ldyBNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0KGUsTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuU1RST05HKSk7dmFyIGcsaCxpLGo9dGhpcyxrPSExLGw9KG5ldyBEYXRlKS5nZXRUaW1lKCksbT1mLlJlcFN3aXRjaExpc3QubGVuZ3RoO2ZvcihqLmRlYnVnLmxvZyhcIkNoZWNraW5nIGxpbWl0IHN3aXRjaGVzIHJ1bGUuLi5cIiksaT1tLTE7aT49MDtpLT0xKXtpZihnPWYuUmVwU3dpdGNoTGlzdFtpXSxoPWwtZy50LmdldFRpbWUoKSxoPj1iKXtqLmRlYnVnLmxvZyhcIlJlYWNoZWQgdGltZSBsaW1pdCwgYmFpbGluZy5cIik7YnJlYWt9aWYoaT49YSl7ai5kZWJ1Zy5sb2coXCJGb3VuZCB0b28gbWFueSBzd2l0Y2hlcyB3aXRoaW4gdmFsaWRhdGlvbiB0aW1lLCBmb3JjZSB0aGUgc3RyZWFtIHRvIG5vdCBjaGFuZ2UuXCIpLGs9ITA7YnJlYWt9fXJldHVybiBrPyhqLmRlYnVnLmxvZyhcIldhaXQgc29tZSB0aW1lIGJlZm9yZSBhbGxvd2luZyBhbm90aGVyIHN3aXRjaC5cIiksZD1jLFEud2hlbihuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdChlLE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLlNUUk9ORykpKTpRLndoZW4obmV3IE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QoTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuTk9fQ0hBTkdFLE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLlNUUk9ORykpfX19LE1lZGlhUGxheWVyLnJ1bGVzLkxpbWl0U3dpdGNoZXNSdWxlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIucnVsZXMuTGltaXRTd2l0Y2hlc1J1bGV9LE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3Q9ZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjt0aGlzLnF1YWxpdHk9YSx0aGlzLnByaW9yaXR5PWIsdm9pZCAwPT09dGhpcy5xdWFsaXR5JiYodGhpcy5xdWFsaXR5PTk5OSksdm9pZCAwPT09dGhpcy5wcmlvcml0eSYmKHRoaXMucHJpb3JpdHk9LjUpfSxNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdCxOT19DSEFOR0U6OTk5LERFRkFVTFQ6LjUsU1RST05HOjEsV0VBSzowfSxNZWRpYVBsYXllci5tb2RlbHMuTWV0cmljc0xpc3Q9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtyZXR1cm57VGNwTGlzdDpbXSxIdHRwTGlzdDpbXSxSZXBTd2l0Y2hMaXN0OltdLEJ1ZmZlckxldmVsOltdLFBsYXlMaXN0OltdLERyb3BwZWRGcmFtZXM6W119fSxNZWRpYVBsYXllci5tb2RlbHMuTWV0cmljc0xpc3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5tb2RlbHMuTWV0cmljc0xpc3R9LE1lZGlhUGxheWVyLnZvLlNlZ21lbnRSZXF1ZXN0PWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dGhpcy5hY3Rpb249XCJkb3dubG9hZFwiLHRoaXMuc3RhcnRUaW1lPTAvMCx0aGlzLnN0cmVhbVR5cGU9bnVsbCx0aGlzLnR5cGU9bnVsbCx0aGlzLmR1cmF0aW9uPTAvMCx0aGlzLnRpbWVzY2FsZT0wLzAsdGhpcy5yYW5nZT1udWxsLHRoaXMudXJsPW51bGwsdGhpcy5yZXF1ZXN0U3RhcnREYXRlPW51bGwsdGhpcy5maXJzdEJ5dGVEYXRlPW51bGwsdGhpcy5yZXF1ZXN0RW5kRGF0ZT1udWxsLHRoaXMuZGVmZXJyZWQ9bnVsbCx0aGlzLnF1YWxpdHk9MC8wLHRoaXMuaW5kZXg9MC8wfSxNZWRpYVBsYXllci52by5TZWdtZW50UmVxdWVzdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLnZvLlNlZ21lbnRSZXF1ZXN0LEFDVElPTl9ET1dOTE9BRDpcImRvd25sb2FkXCIsQUNUSU9OX0NPTVBMRVRFOlwiY29tcGxldGVcIn0sTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5CdWZmZXJMZXZlbD1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3RoaXMudD1udWxsLHRoaXMubGV2ZWw9bnVsbH0sTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5CdWZmZXJMZXZlbC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLnZvLm1ldHJpY3MuQnVmZmVyTGV2ZWx9LE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuRHJvcHBlZEZyYW1lcz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3RoaXMudGltZT1udWxsLHRoaXMuZHJvcHBlZEZyYW1lcz1udWxsfSxNZWRpYVBsYXllci52by5tZXRyaWNzLkRyb3BwZWRGcmFtZXMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci52by5tZXRyaWNzLkRyb3BwZWRGcmFtZXN9LE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuSFRUUFJlcXVlc3Q9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt0aGlzLnRjcGlkPW51bGwsdGhpcy50eXBlPW51bGwsdGhpcy51cmw9bnVsbCx0aGlzLmFjdHVhbHVybD1udWxsLHRoaXMucmFuZ2U9bnVsbCx0aGlzLnRyZXF1ZXN0PW51bGwsdGhpcy50cmVzcG9uc2U9bnVsbCx0aGlzLnRmaW5pc2g9bnVsbCx0aGlzLnJlc3BvbnNlY29kZT1udWxsLHRoaXMuaW50ZXJ2YWw9bnVsbCx0aGlzLm1lZGlhZHVyYXRpb249bnVsbCx0aGlzLnRyYWNlPVtdfSxNZWRpYVBsYXllci52by5tZXRyaWNzLkhUVFBSZXF1ZXN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIudm8ubWV0cmljcy5IVFRQUmVxdWVzdH0sTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5IVFRQUmVxdWVzdC5UcmFjZT1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3RoaXMucz1udWxsLHRoaXMuZD1udWxsLHRoaXMuYj1bXX0sTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5IVFRQUmVxdWVzdC5UcmFjZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLnZvLm1ldHJpY3MuSFRUUFJlcXVlc3QuVHJhY2V9LE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUGxheUxpc3Q9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt0aGlzLnN0YXJ0PW51bGwsdGhpcy5tc3RhcnQ9bnVsbCx0aGlzLnN0YXJ0dHlwZT1udWxsLHRoaXMudHJhY2U9W119LE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUGxheUxpc3QuVHJhY2U9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt0aGlzLnJlcHJlc2VudGF0aW9uaWQ9bnVsbCx0aGlzLnN1YnJlcGxldmVsPW51bGwsdGhpcy5zdGFydD1udWxsLHRoaXMubXN0YXJ0PW51bGwsdGhpcy5kdXJhdGlvbj1udWxsLHRoaXMucGxheWJhY2tzcGVlZD1udWxsLHRoaXMuc3RvcHJlYXNvbj1udWxsfSxNZWRpYVBsYXllci52by5tZXRyaWNzLlBsYXlMaXN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdH0sTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdC5JTklUSUFMX1BMQVlfU1RBUlRfUkVBU09OPVwiaW5pdGlhbF9zdGFydFwiLE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUGxheUxpc3QuU0VFS19TVEFSVF9SRUFTT049XCJzZWVrXCIsTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdC5UcmFjZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUGxheUxpc3QuVHJhY2UoKX0sTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdC5UcmFjZS5VU0VSX1JFUVVFU1RfU1RPUF9SRUFTT049XCJ1c2VyX3JlcXVlc3RcIixNZWRpYVBsYXllci52by5tZXRyaWNzLlBsYXlMaXN0LlRyYWNlLlJFUFJFU0VOVEFUSU9OX1NXSVRDSF9TVE9QX1JFQVNPTj1cInJlcHJlc2VudGF0aW9uX3N3aXRjaFwiLE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUGxheUxpc3QuVHJhY2UuRU5EX09GX0NPTlRFTlRfU1RPUF9SRUFTT049XCJlbmRfb2ZfY29udGVudFwiLE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUGxheUxpc3QuVHJhY2UuUkVCVUZGRVJJTkdfUkVBU09OPVwicmVidWZmZXJpbmdcIixNZWRpYVBsYXllci52by5tZXRyaWNzLlJlcHJlc2VudGF0aW9uU3dpdGNoPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dGhpcy50PW51bGwsdGhpcy5tdD1udWxsLHRoaXMudG89bnVsbCx0aGlzLmx0bz1udWxsfSxNZWRpYVBsYXllci52by5tZXRyaWNzLlJlcHJlc2VudGF0aW9uU3dpdGNoLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIudm8ubWV0cmljcy5SZXByZXNlbnRhdGlvblN3aXRjaH0sTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5UQ1BDb25uZWN0aW9uPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dGhpcy50Y3BpZD1udWxsLHRoaXMuZGVzdD1udWxsLHRoaXMudG9wZW49bnVsbCx0aGlzLnRjbG9zZT1udWxsLHRoaXMudGNvbm5lY3Q9bnVsbH0sTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5UQ1BDb25uZWN0aW9uLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIudm8ubWV0cmljcy5UQ1BDb25uZWN0aW9ufTsiXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRhc2guYWxsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZGFzaC5hbGwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBYMkpTKGEsYixjKXtmdW5jdGlvbiBkKGEpe3ZhciBiPWEubG9jYWxOYW1lO3JldHVybiBudWxsPT1iJiYoYj1hLmJhc2VOYW1lKSwobnVsbD09Ynx8XCJcIj09YikmJihiPWEubm9kZU5hbWUpLGJ9ZnVuY3Rpb24gZShhKXtyZXR1cm4gYS5wcmVmaXh9ZnVuY3Rpb24gZihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYT9hLnJlcGxhY2UoLyYvZyxcIiZhbXA7XCIpLnJlcGxhY2UoLzwvZyxcIiZsdDtcIikucmVwbGFjZSgvPi9nLFwiJmd0O1wiKS5yZXBsYWNlKC9cIi9nLFwiJnF1b3Q7XCIpLnJlcGxhY2UoLycvZyxcIiYjeDI3O1wiKS5yZXBsYWNlKC9cXC8vZyxcIiYjeDJGO1wiKTphfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGEucmVwbGFjZSgvJmFtcDsvZyxcIiZcIikucmVwbGFjZSgvJmx0Oy9nLFwiPFwiKS5yZXBsYWNlKC8mZ3Q7L2csXCI+XCIpLnJlcGxhY2UoLyZxdW90Oy9nLCdcIicpLnJlcGxhY2UoLyYjeDI3Oy9nLFwiJ1wiKS5yZXBsYWNlKC8mI3gyRjsvZyxcIi9cIil9ZnVuY3Rpb24gaChmKXtpZihmLm5vZGVUeXBlPT11LkRPQ1VNRU5UX05PREUpe3ZhciBpLGosayxsPWYuZmlyc3RDaGlsZDtmb3Ioaj0wLGs9Zi5jaGlsZE5vZGVzLmxlbmd0aDtrPmo7ais9MSlpZihmLmNoaWxkTm9kZXNbal0ubm9kZVR5cGUhPT11LkNPTU1FTlRfTk9ERSl7bD1mLmNoaWxkTm9kZXNbal07YnJlYWt9aWYoYylpPWgobCk7ZWxzZXtpPXt9O3ZhciBtPWQobCk7aVttXT1oKGwpfXJldHVybiBpfWlmKGYubm9kZVR5cGU9PXUuRUxFTUVOVF9OT0RFKXt2YXIgaT1uZXcgT2JqZWN0O2kuX19jbnQ9MDtmb3IodmFyIG49Zi5jaGlsZE5vZGVzLG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIGw9bi5pdGVtKG8pLG09ZChsKTtpZihpLl9fY250KyssbnVsbD09aVttXSlpW21dPWgobCksaVttK1wiX2FzQXJyYXlcIl09bmV3IEFycmF5KDEpLGlbbStcIl9hc0FycmF5XCJdWzBdPWlbbV07ZWxzZXtpZihudWxsIT1pW21dJiYhKGlbbV1pbnN0YW5jZW9mIEFycmF5KSl7dmFyIHA9aVttXTtpW21dPW5ldyBBcnJheSxpW21dWzBdPXAsaVttK1wiX2FzQXJyYXlcIl09aVttXX1mb3IodmFyIHE9MDtudWxsIT1pW21dW3FdOylxKys7aVttXVtxXT1oKGwpfX1mb3IodmFyIHI9MDtyPGYuYXR0cmlidXRlcy5sZW5ndGg7cisrKXt2YXIgcz1mLmF0dHJpYnV0ZXMuaXRlbShyKTtpLl9fY250Kys7Zm9yKHZhciB2PXMudmFsdWUsdz0wLHg9YS5sZW5ndGg7eD53O3crKyl7dmFyIHk9YVt3XTt5LnRlc3QuY2FsbCh0aGlzLHMudmFsdWUpJiYodj15LmNvbnZlcnRlci5jYWxsKHRoaXMscy52YWx1ZSkpfWlbYitzLm5hbWVdPXZ9dmFyIHo9ZShmKTtyZXR1cm4gbnVsbCE9eiYmXCJcIiE9eiYmKGkuX19jbnQrKyxpLl9fcHJlZml4PXopLDE9PWkuX19jbnQmJm51bGwhPWlbXCIjdGV4dFwiXSYmKGk9aVtcIiN0ZXh0XCJdKSxudWxsIT1pW1wiI3RleHRcIl0mJihpLl9fdGV4dD1pW1wiI3RleHRcIl0sdCYmKGkuX190ZXh0PWcoaS5fX3RleHQpKSxkZWxldGUgaVtcIiN0ZXh0XCJdLGRlbGV0ZSBpW1wiI3RleHRfYXNBcnJheVwiXSksbnVsbCE9aVtcIiNjZGF0YS1zZWN0aW9uXCJdJiYoaS5fX2NkYXRhPWlbXCIjY2RhdGEtc2VjdGlvblwiXSxkZWxldGUgaVtcIiNjZGF0YS1zZWN0aW9uXCJdLGRlbGV0ZSBpW1wiI2NkYXRhLXNlY3Rpb25fYXNBcnJheVwiXSksKG51bGwhPWkuX190ZXh0fHxudWxsIT1pLl9fY2RhdGEpJiYoaS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybihudWxsIT10aGlzLl9fdGV4dD90aGlzLl9fdGV4dDpcIlwiKSsobnVsbCE9dGhpcy5fX2NkYXRhP3RoaXMuX19jZGF0YTpcIlwiKX0pLGl9cmV0dXJuIGYubm9kZVR5cGU9PXUuVEVYVF9OT0RFfHxmLm5vZGVUeXBlPT11LkNEQVRBX1NFQ1RJT05fTk9ERT9mLm5vZGVWYWx1ZTpmLm5vZGVUeXBlPT11LkNPTU1FTlRfTk9ERT9udWxsOnZvaWQgMH1mdW5jdGlvbiBpKGEsYixjLGQpe3ZhciBlPVwiPFwiKyhudWxsIT1hJiZudWxsIT1hLl9fcHJlZml4P2EuX19wcmVmaXgrXCI6XCI6XCJcIikrYjtpZihudWxsIT1jKWZvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgZz1jW2ZdLGg9YVtnXTtlKz1cIiBcIitnLnN1YnN0cigxKStcIj0nXCIraCtcIidcIn1yZXR1cm4gZSs9ZD9cIi8+XCI6XCI+XCJ9ZnVuY3Rpb24gaihhLGIpe3JldHVyblwiPC9cIisobnVsbCE9YS5fX3ByZWZpeD9hLl9fcHJlZml4K1wiOlwiOlwiXCIpK2IrXCI+XCJ9ZnVuY3Rpb24gayhhLGIpe3JldHVybi0xIT09YS5pbmRleE9mKGIsYS5sZW5ndGgtYi5sZW5ndGgpfWZ1bmN0aW9uIGwoYSxiKXtyZXR1cm4gayhiLnRvU3RyaW5nKCksXCJfYXNBcnJheVwiKXx8MD09Yi50b1N0cmluZygpLmluZGV4T2YoXCJfXCIpfHxhW2JdaW5zdGFuY2VvZiBGdW5jdGlvbj8hMDohMX1mdW5jdGlvbiBtKGEpe3ZhciBiPTA7aWYoYSBpbnN0YW5jZW9mIE9iamVjdClmb3IodmFyIGMgaW4gYSlsKGEsYyl8fGIrKztyZXR1cm4gYn1mdW5jdGlvbiBuKGEpe3ZhciBiPVtdO2lmKGEgaW5zdGFuY2VvZiBPYmplY3QpZm9yKHZhciBjIGluIGEpLTE9PWMudG9TdHJpbmcoKS5pbmRleE9mKFwiX19cIikmJjA9PWMudG9TdHJpbmcoKS5pbmRleE9mKFwiX1wiKSYmYi5wdXNoKGMpO3JldHVybiBifWZ1bmN0aW9uIG8oYSl7dmFyIGI9XCJcIjtyZXR1cm4gbnVsbCE9YS5fX2NkYXRhJiYoYis9XCI8IVtDREFUQVtcIithLl9fY2RhdGErXCJdXT5cIiksbnVsbCE9YS5fX3RleHQmJihiKz10P2YoYS5fX3RleHQpOmEuX190ZXh0KSxifWZ1bmN0aW9uIHAoYSl7dmFyIGI9XCJcIjtyZXR1cm4gYSBpbnN0YW5jZW9mIE9iamVjdD9iKz1vKGEpOm51bGwhPWEmJihiKz10P2YoYSk6YSksYn1mdW5jdGlvbiBxKGEsYixjKXt2YXIgZD1cIlwiO2lmKDA9PWEubGVuZ3RoKWQrPWkoYSxiLGMsITApO2Vsc2UgZm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspZCs9aShhW2VdLGIsbihhW2VdKSwhMSksZCs9cihhW2VdKSxkKz1qKGFbZV0sYik7cmV0dXJuIGR9ZnVuY3Rpb24gcihhKXt2YXIgYj1cIlwiLGM9bShhKTtpZihjPjApZm9yKHZhciBkIGluIGEpaWYoIWwoYSxkKSl7dmFyIGU9YVtkXSxmPW4oZSk7aWYobnVsbD09ZXx8dm9pZCAwPT1lKWIrPWkoZSxkLGYsITApO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIE9iamVjdClpZihlIGluc3RhbmNlb2YgQXJyYXkpYis9cShlLGQsZik7ZWxzZXt2YXIgZz1tKGUpO2c+MHx8bnVsbCE9ZS5fX3RleHR8fG51bGwhPWUuX19jZGF0YT8oYis9aShlLGQsZiwhMSksYis9cihlKSxiKz1qKGUsZCkpOmIrPWkoZSxkLGYsITApfWVsc2UgYis9aShlLGQsZiwhMSksYis9cChlKSxiKz1qKGUsZCl9cmV0dXJuIGIrPXAoYSl9KG51bGw9PT1ifHx2b2lkIDA9PT1iKSYmKGI9XCJfXCIpLChudWxsPT09Y3x8dm9pZCAwPT09YykmJihjPSExKTt2YXIgcz1cIjEuMC4xMVwiLHQ9ITEsdT17RUxFTUVOVF9OT0RFOjEsVEVYVF9OT0RFOjMsQ0RBVEFfU0VDVElPTl9OT0RFOjQsQ09NTUVOVF9OT0RFOjgsRE9DVU1FTlRfTk9ERTo5fTt0aGlzLnBhcnNlWG1sU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiO2lmKHdpbmRvdy5ET01QYXJzZXIpe3ZhciBjPW5ldyB3aW5kb3cuRE9NUGFyc2VyO2I9Yy5wYXJzZUZyb21TdHJpbmcoYSxcInRleHQveG1sXCIpfWVsc2UgMD09YS5pbmRleE9mKFwiPD9cIikmJihhPWEuc3Vic3RyKGEuaW5kZXhPZihcIj8+XCIpKzIpKSxiPW5ldyBBY3RpdmVYT2JqZWN0KFwiTWljcm9zb2Z0LlhNTERPTVwiKSxiLmFzeW5jPVwiZmFsc2VcIixiLmxvYWRYTUwoYSk7cmV0dXJuIGJ9LHRoaXMueG1sMmpzb249ZnVuY3Rpb24oYSl7cmV0dXJuIGgoYSl9LHRoaXMueG1sX3N0cjJqc29uPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucGFyc2VYbWxTdHJpbmcoYSk7cmV0dXJuIHRoaXMueG1sMmpzb24oYil9LHRoaXMuanNvbjJ4bWxfc3RyPWZ1bmN0aW9uKGEpe3JldHVybiByKGEpfSx0aGlzLmpzb24yeG1sPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuanNvbjJ4bWxfc3RyKGEpO3JldHVybiB0aGlzLnBhcnNlWG1sU3RyaW5nKGIpfSx0aGlzLmdldFZlcnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gc30sdGhpcy5lc2NhcGVNb2RlPWZ1bmN0aW9uKGEpe3Q9YX19ZnVuY3Rpb24gT2JqZWN0SXJvbihhKXt2YXIgYjtmb3IoYj1bXSxpPTAsbGVuPWEubGVuZ3RoO2xlbj5pO2krPTEpYVtpXS5pc1Jvb3Q/Yi5wdXNoKFwicm9vdFwiKTpiLnB1c2goYVtpXS5uYW1lKTt2YXIgYz1mdW5jdGlvbihhLGIpe3ZhciBjO2lmKG51bGwhPT1hJiZudWxsIT09Yilmb3IoYyBpbiBhKWEuaGFzT3duUHJvcGVydHkoYykmJihiLmhhc093blByb3BlcnR5KGMpfHwoYltjXT1hW2NdKSl9LGQ9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGYsZyxoLGk7aWYobnVsbCE9PWEmJjAhPT1hLmxlbmd0aClmb3IoZT0wLGY9YS5sZW5ndGg7Zj5lO2UrPTEpZz1hW2VdLGIuaGFzT3duUHJvcGVydHkoZy5uYW1lKSYmKGQuaGFzT3duUHJvcGVydHkoZy5uYW1lKT9nLm1lcmdlJiYoaD1iW2cubmFtZV0saT1kW2cubmFtZV0sXCJvYmplY3RcIj09dHlwZW9mIGgmJlwib2JqZWN0XCI9PXR5cGVvZiBpP2MoaCxpKTpkW2cubmFtZV09bnVsbCE9Zy5tZXJnZUZ1bmN0aW9uP2cubWVyZ2VGdW5jdGlvbihoLGkpOmgraSk6ZFtnLm5hbWVdPWJbZy5uYW1lXSl9LGU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxmLGcsaCxpLGosayxsPWE7aWYobnVsbCE9PWwuY2hpbGRyZW4mJjAhPT1sLmNoaWxkcmVuLmxlbmd0aClmb3IoYz0wLGY9bC5jaGlsZHJlbi5sZW5ndGg7Zj5jO2MrPTEpaWYoaj1sLmNoaWxkcmVuW2NdLGIuaGFzT3duUHJvcGVydHkoai5uYW1lKSlpZihqLmlzQXJyYXkpZm9yKGk9YltqLm5hbWUrXCJfYXNBcnJheVwiXSxnPTAsaD1pLmxlbmd0aDtoPmc7Zys9MSlrPWlbZ10sZChsLnByb3BlcnRpZXMsYixrKSxlKGosayk7ZWxzZSBrPWJbai5uYW1lXSxkKGwucHJvcGVydGllcyxiLGspLGUoaixrKX0sZj1mdW5jdGlvbihjKXt2YXIgZCxnLGgsaSxqLGssbDtpZihudWxsPT09YylyZXR1cm4gYztpZihcIm9iamVjdFwiIT10eXBlb2YgYylyZXR1cm4gYztmb3IoZD0wLGc9Yi5sZW5ndGg7Zz5kO2QrPTEpXCJyb290XCI9PT1iW2RdJiYoaj1hW2RdLGs9YyxlKGosaykpO2ZvcihpIGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0eShpKSl7aWYoaD1iLmluZGV4T2YoaSksLTEhPT1oKWlmKGo9YVtoXSxqLmlzQXJyYXkpZm9yKGw9Y1tpK1wiX2FzQXJyYXlcIl0sZD0wLGc9bC5sZW5ndGg7Zz5kO2QrPTEpaz1sW2RdLGUoaixrKTtlbHNlIGs9Y1tpXSxlKGosayk7ZihjW2ldKX1yZXR1cm4gY307cmV0dXJue3J1bjpmfX1pZihmdW5jdGlvbihhKXthKHZvaWQgMCxRPXt9KX0oZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Yi5zdGFjayYmXCJvYmplY3RcIj09dHlwZW9mIGEmJm51bGwhPT1hJiZhLnN0YWNrJiYtMT09PWEuc3RhY2suaW5kZXhPZihOKSYmKGEuc3RhY2s9ZChhLnN0YWNrKStcIlxcblwiK04rXCJcXG5cIitkKGIuc3RhY2spKX1mdW5jdGlvbiBkKGEpe2Zvcih2YXIgYT1hLnNwbGl0KFwiXFxuXCIpLGI9W10sYz0wO2M8YS5sZW5ndGg7KytjKXt2YXIgZCxlPWFbY107aWYoZD0vYXQgLisgXFwoKC4qKTooXFxkKyk6XFxkK1xcKS8uZXhlYyhlKSl7dmFyIGY9ZFsyXTtkPWRbMV09PT13JiZmPj14JiZUPj1mfWVsc2UgZD0hMTshZCYmISgtMSE9PWUuaW5kZXhPZihcIihtb2R1bGUuanM6XCIpfHwtMSE9PWUuaW5kZXhPZihcIihub2RlLmpzOlwiKSkmJmIucHVzaChlKX1yZXR1cm4gYi5qb2luKFwiXFxuXCIpfWZ1bmN0aW9uIGUoKXtpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSl7dmFyIGEsYixjPUVycm9yLnByZXBhcmVTdGFja1RyYWNlO3JldHVybiBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT1mdW5jdGlvbihjLGQpe2E9ZFsxXS5nZXRGaWxlTmFtZSgpLGI9ZFsxXS5nZXRMaW5lTnVtYmVyKCl9LEVycm9yKCkuc3RhY2ssRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9Yyx3PWEsYn19ZnVuY3Rpb24gZihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGNvbnNvbGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKGIrXCIgaXMgZGVwcmVjYXRlZCwgdXNlIFwiK2MrXCIgaW5zdGVhZC5cIixFcnJvcihcIlwiKS5zdGFjayksYS5hcHBseShhLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGcoKXtmdW5jdGlvbiBhKGEpe2MmJihiPW4oYSksSChjLGZ1bmN0aW9uKGEsYyl7QShmdW5jdGlvbigpe2IucHJvbWlzZURpc3BhdGNoLmFwcGx5KGIsYyl9KX0sdm9pZCAwKSxkPWM9dm9pZCAwKX12YXIgYixjPVtdLGQ9W10sZT1LKGcucHJvdG90eXBlKSxmPUsoaC5wcm90b3R5cGUpO3JldHVybiBmLnByb21pc2VEaXNwYXRjaD1mdW5jdGlvbihhLGUsZil7dmFyIGc9Ryhhcmd1bWVudHMpO2M/KGMucHVzaChnKSxcIndoZW5cIj09PWUmJmZbMV0mJmQucHVzaChmWzFdKSk6QShmdW5jdGlvbigpe2IucHJvbWlzZURpc3BhdGNoLmFwcGx5KGIsZyl9KX0sZi52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIGM/ZjpiLnZhbHVlT2YoKX0sRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShmLGcpLGYuc3RhY2s9Zi5zdGFjay5zdWJzdHJpbmcoZi5zdGFjay5pbmRleE9mKFwiXFxuXCIpKzEpKSx6KGYpLGUucHJvbWlzZT1mLGUucmVzb2x2ZT1hLGUucmVqZWN0PWZ1bmN0aW9uKGIpe2EobShiKSl9LGUubm90aWZ5PWZ1bmN0aW9uKGEpe2MmJkgoZCxmdW5jdGlvbihiLGMpe0EoZnVuY3Rpb24oKXtjKGEpfSl9LHZvaWQgMCl9LGV9ZnVuY3Rpb24gaChhLGIsYyxkKXt2b2lkIDA9PT1iJiYoYj1mdW5jdGlvbihhKXtyZXR1cm4gbShFcnJvcihcIlByb21pc2UgZG9lcyBub3Qgc3VwcG9ydCBvcGVyYXRpb246IFwiK2EpKX0pO3ZhciBlPUsoaC5wcm90b3R5cGUpO3JldHVybiBlLnByb21pc2VEaXNwYXRjaD1mdW5jdGlvbihjLGQsZil7dmFyIGc7dHJ5e2c9YVtkXT9hW2RdLmFwcGx5KGUsZik6Yi5jYWxsKGUsZCxmKX1jYXRjaChoKXtnPW0oaCl9YyYmYyhnKX0sYyYmKGUudmFsdWVPZj1jKSxkJiYoZS5leGNlcHRpb249ZCkseihlKSxlfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGooYSk/YS52YWx1ZU9mKCk6YX1mdW5jdGlvbiBqKGEpe3JldHVybiBhJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLnByb21pc2VEaXNwYXRjaH1mdW5jdGlvbiBrKGEpe3JldHVybiFqKGkoYSkpfWZ1bmN0aW9uIGwoYSl7cmV0dXJuIGE9aShhKSxqKGEpJiZcImV4Y2VwdGlvblwiaW4gYX1mdW5jdGlvbiBtKGEpe3ZhciBhPWF8fEVycm9yKCksYj1oKHt3aGVuOmZ1bmN0aW9uKGIpe2lmKGIpe3ZhciBjPUkoUCx0aGlzKTstMSE9PWMmJihRLnNwbGljZShjLDEpLFAuc3BsaWNlKGMsMSkpfXJldHVybiBiP2IoYSk6bShhKX19LGZ1bmN0aW9uKCl7cmV0dXJuIG0oYSl9LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGEpO3JldHVybiFPJiZcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiYhd2luZG93LlRvdWNoJiZ3aW5kb3cuY29uc29sZSYmY29uc29sZS5sb2coXCJTaG91bGQgYmUgZW1wdHk6XCIsUSksTz0hMCxQLnB1c2goYiksUS5wdXNoKGEpLGJ9ZnVuY3Rpb24gbihhKXtpZihqKGEpKXJldHVybiBhO2lmKChhPWkoYSkpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLnRoZW4pe3ZhciBiPWcoKTtyZXR1cm4gYS50aGVuKGIucmVzb2x2ZSxiLnJlamVjdCxiLm5vdGlmeSksYi5wcm9taXNlfXJldHVybiBoKHt3aGVuOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LGdldDpmdW5jdGlvbihiKXtyZXR1cm4gYVtiXX0scHV0OmZ1bmN0aW9uKGIsYyl7cmV0dXJuIGFbYl09YyxhfSxkZWw6ZnVuY3Rpb24oYil7cmV0dXJuIGRlbGV0ZSBhW2JdLGF9LHBvc3Q6ZnVuY3Rpb24oYixjKXtyZXR1cm4gYVtiXS5hcHBseShhLGMpfSxhcHBseTpmdW5jdGlvbihiKXtyZXR1cm4gYS5hcHBseSh2b2lkIDAsYil9LGtleXM6ZnVuY3Rpb24oKXtyZXR1cm4gTChhKX19LHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBhfSl9ZnVuY3Rpb24gbyhhLGIsZCxlKXtmdW5jdGlvbiBmKGEpe3RyeXtyZXR1cm4gYj9iKGEpOmF9Y2F0Y2goYyl7cmV0dXJuIG0oYyl9fWZ1bmN0aW9uIGgoYSl7aWYoZCl7YyhhLGspO3RyeXtyZXR1cm4gZChhKX1jYXRjaChiKXtyZXR1cm4gbShiKX19cmV0dXJuIG0oYSl9dmFyIGk9ZygpLGo9ITEsaz1uKGEpO3JldHVybiBBKGZ1bmN0aW9uKCl7ay5wcm9taXNlRGlzcGF0Y2goZnVuY3Rpb24oYSl7anx8KGo9ITAsaS5yZXNvbHZlKGYoYSkpKX0sXCJ3aGVuXCIsW2Z1bmN0aW9uKGEpe2p8fChqPSEwLGkucmVzb2x2ZShoKGEpKSl9XSl9KSxrLnByb21pc2VEaXNwYXRjaCh2b2lkIDAsXCJ3aGVuXCIsW3ZvaWQgMCxmdW5jdGlvbihhKXtpLm5vdGlmeShlP2UoYSk6YSl9XSksaS5wcm9taXNlfWZ1bmN0aW9uIHAoYSxiLGMpe3JldHVybiBvKGEsZnVuY3Rpb24oYSl7cmV0dXJuIHQoYSkudGhlbihmdW5jdGlvbihhKXtyZXR1cm4gYi5hcHBseSh2b2lkIDAsYSl9LGMpfSxjKX1mdW5jdGlvbiBxKGEsYixjKXt2YXIgZD1nKCk7cmV0dXJuIEEoZnVuY3Rpb24oKXtuKGEpLnByb21pc2VEaXNwYXRjaChkLnJlc29sdmUsYixjKX0pLGQucHJvbWlzZX1mdW5jdGlvbiByKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1HKGFyZ3VtZW50cywxKTtyZXR1cm4gcShiLGEsYyl9fWZ1bmN0aW9uIHMoYSl7dmFyIGI9Ryhhcmd1bWVudHMsMSk7cmV0dXJuIFMoYSxiKX1mdW5jdGlvbiB0KGEpe3JldHVybiBvKGEsZnVuY3Rpb24oYSl7dmFyIGI9YS5sZW5ndGg7aWYoMD09PWIpcmV0dXJuIG4oYSk7dmFyIGM9ZygpO3JldHVybiBIKGEsZnVuY3Rpb24oZCxlLGYpe2soZSk/KGFbZl09aShlKSwwPT09LS1iJiZjLnJlc29sdmUoYSkpOm8oZSxmdW5jdGlvbihkKXthW2ZdPWQsMD09PS0tYiYmYy5yZXNvbHZlKGEpfSkuZmFpbChjLnJlamVjdCl9LHZvaWQgMCksYy5wcm9taXNlfSl9ZnVuY3Rpb24gdShhLGIpe3JldHVybiBvKGEsdm9pZCAwLGIpfWZ1bmN0aW9uIHYoYSxiKXt2YXIgYz1HKGFyZ3VtZW50cywyKSxkPWcoKTtyZXR1cm4gYy5wdXNoKGQubWFrZU5vZGVSZXNvbHZlcigpKSxSKGEsYixjKS5mYWlsKGQucmVqZWN0KSxkLnByb21pc2V9dmFyIHcseD1lKCkseT1mdW5jdGlvbigpe30sej1PYmplY3QuZnJlZXplfHx5O1widW5kZWZpbmVkXCIhPXR5cGVvZiBjYWphVk0mJih6PWNhamFWTS5kZWYpO3ZhciBBO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBwcm9jZXNzKUE9cHJvY2Vzcy5uZXh0VGljaztlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHNldEltbWVkaWF0ZSlBPXNldEltbWVkaWF0ZTtlbHNlIGlmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCl7dmFyIEI9bmV3IE1lc3NhZ2VDaGFubmVsLEM9e30sRD1DO0IucG9ydDEub25tZXNzYWdlPWZ1bmN0aW9uKCl7Qz1DLm5leHQ7dmFyIGE9Qy50YXNrO2RlbGV0ZSBDLnRhc2ssYSgpfSxBPWZ1bmN0aW9uKGEpe0Q9RC5uZXh0PXt0YXNrOmF9LEIucG9ydDIucG9zdE1lc3NhZ2UoMCl9fWVsc2UgQT1mdW5jdGlvbihhKXtzZXRUaW1lb3V0KGEsMCl9O3ZhciBFO0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kPyhFPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLEU9RS5iaW5kKEUuY2FsbCkpOkU9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEuY2FsbC5hcHBseShhLGFyZ3VtZW50cyl9fTt2YXIgRixHPUUoQXJyYXkucHJvdG90eXBlLnNsaWNlKSxIPUUoQXJyYXkucHJvdG90eXBlLnJlZHVjZXx8ZnVuY3Rpb24oYSxiKXt2YXIgYz0wLGQ9dGhpcy5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDs7KXtpZihjIGluIHRoaXMpe2I9dGhpc1tjKytdO2JyZWFrfWlmKCsrYz49ZCl0aHJvdyBuZXcgVHlwZUVycm9yfWZvcig7ZD5jO2MrKyljIGluIHRoaXMmJihiPWEoYix0aGlzW2NdLGMpKTtyZXR1cm4gYn0pLEk9RShBcnJheS5wcm90b3R5cGUuaW5kZXhPZnx8ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspaWYodGhpc1tiXT09PWEpcmV0dXJuIGI7cmV0dXJuLTF9KSxKPUUoQXJyYXkucHJvdG90eXBlLm1hcHx8ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9W107cmV0dXJuIEgoYyxmdW5jdGlvbihlLGYsZyl7ZC5wdXNoKGEuY2FsbChiLGYsZyxjKSl9LHZvaWQgMCksZH0pLEs9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe31yZXR1cm4gYi5wcm90b3R5cGU9YSxuZXcgYn0sTD1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXTtmb3IoYiBpbiBhKWMucHVzaChiKTtyZXR1cm4gY30sTT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO0Y9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFJldHVyblZhbHVlP1JldHVyblZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMudmFsdWU9YX07dmFyIE49XCJGcm9tIHByZXZpb3VzIGV2ZW50OlwiO2IubmV4dFRpY2s9QSxiLmRlZmVyPWcsZy5wcm90b3R5cGUubWFrZU5vZGVSZXNvbHZlcj1mdW5jdGlvbigpe3ZhciBhPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7Yj9hLnJlamVjdChiKTphcmd1bWVudHMubGVuZ3RoPjI/YS5yZXNvbHZlKEcoYXJndW1lbnRzLDEpKTphLnJlc29sdmUoYyl9fSxiLnByb21pc2U9ZnVuY3Rpb24oYSl7dmFyIGI9ZygpO3JldHVybiBzKGEsYi5yZXNvbHZlLGIucmVqZWN0LGIubm90aWZ5KS5mYWlsKGIucmVqZWN0KSxiLnByb21pc2V9LGIubWFrZVByb21pc2U9aCxoLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbyh0aGlzLGEsYixjKX0saC5wcm90b3R5cGUudGhlblJlc29sdmU9ZnVuY3Rpb24oYSl7cmV0dXJuIG8odGhpcyxmdW5jdGlvbigpe3JldHVybiBhfSl9LEgoXCJpc1Jlc29sdmVkIGlzRnVsZmlsbGVkIGlzUmVqZWN0ZWQgZGlzcGF0Y2ggd2hlbiBzcHJlYWQgZ2V0IHB1dCBkZWwgcG9zdCBzZW5kIGludm9rZSBrZXlzIGZhcHBseSBmY2FsbCBmYmluZCBhbGwgYWxsUmVzb2x2ZWQgdGltZW91dCBkZWxheSBjYXRjaCBmaW5hbGx5IGZhaWwgZmluIHByb2dyZXNzIGVuZCBkb25lIG5mY2FsbCBuZmFwcGx5IG5mYmluZCBuY2FsbCBuYXBwbHkgbmJpbmQgbnBvc3QgbnNlbmQgbmludm9rZSBuZW5kIG5vZGVpZnlcIi5zcGxpdChcIiBcIiksZnVuY3Rpb24oYSxjKXtoLnByb3RvdHlwZVtjXT1mdW5jdGlvbigpe3JldHVybiBiW2NdLmFwcGx5KGIsW3RoaXNdLmNvbmNhdChHKGFyZ3VtZW50cykpKX19LHZvaWQgMCksaC5wcm90b3R5cGUudG9Tb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygpfSxoLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBQcm9taXNlXVwifSx6KGgucHJvdG90eXBlKSxiLm5lYXJlcj1pLGIuaXNQcm9taXNlPWosYi5pc1Jlc29sdmVkPWZ1bmN0aW9uKGEpe3JldHVybiBrKGEpfHxsKGEpfSxiLmlzRnVsZmlsbGVkPWssYi5pc1JlamVjdGVkPWw7dmFyIE8sUD1bXSxRPVtdO2IucmVqZWN0PW0sYi5yZXNvbHZlPW4sYi5tYXN0ZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIGgoe2lzRGVmOmZ1bmN0aW9uKCl7fX0sZnVuY3Rpb24oYixjKXtyZXR1cm4gcShhLGIsYyl9LGZ1bmN0aW9uKCl7cmV0dXJuIGkoYSl9KX0sYi53aGVuPW8sYi5zcHJlYWQ9cCxiLmFzeW5jPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgZjt0cnl7Zj1jW2FdKGIpfWNhdGNoKGcpe3JldHVyblwiW29iamVjdCBTdG9wSXRlcmF0aW9uXVwiPT09TShnKXx8ZyBpbnN0YW5jZW9mIEY/Zy52YWx1ZTptKGcpfXJldHVybiBvKGYsZCxlKX12YXIgYz1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkPWIuYmluZChiLFwic2VuZFwiKSxlPWIuYmluZChiLFwidGhyb3dcIik7cmV0dXJuIGQoKX19LGJbXCJyZXR1cm5cIl09ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEYoYSl9LGIucHJvbWlzZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHAoW3RoaXMsdChhcmd1bWVudHMpXSxmdW5jdGlvbihiLGMpe3JldHVybiBhLmFwcGx5KGIsYyl9KX19LGIuZGlzcGF0Y2g9cSxiLmRpc3BhdGNoZXI9cixiLmdldD1yKFwiZ2V0XCIpLGIucHV0PXIoXCJwdXRcIiksYltcImRlbGV0ZVwiXT1iLmRlbD1yKFwiZGVsXCIpO3ZhciBSPWIucG9zdD1yKFwicG9zdFwiKTtiLnNlbmQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1HKGFyZ3VtZW50cywyKTtyZXR1cm4gUihhLGIsYyl9LGIuaW52b2tlPWYoYi5zZW5kLFwiaW52b2tlXCIsXCJzZW5kXCIpO3ZhciBTPWIuZmFwcGx5PXIoXCJhcHBseVwiKTtiW1widHJ5XCJdPXMsYi5mY2FsbD1zLGIuZmJpbmQ9ZnVuY3Rpb24oYSl7dmFyIGI9Ryhhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9Yi5jb25jYXQoRyhhcmd1bWVudHMpKTtyZXR1cm4gUyhhLGMpfX0sYi5rZXlzPXIoXCJrZXlzXCIpLGIuYWxsPXQsYi5hbGxSZXNvbHZlZD1mdW5jdGlvbihhKXtyZXR1cm4gbyhhLGZ1bmN0aW9uKGEpe3JldHVybiBvKHQoSihhLGZ1bmN0aW9uKGEpe3JldHVybiBvKGEseSx5KX0pKSxmdW5jdGlvbigpe3JldHVybiBKKGEsbil9KX0pfSxiW1wiY2F0Y2hcIl09Yi5mYWlsPXUsYi5wcm9ncmVzcz1mdW5jdGlvbihhLGIpe3JldHVybiBvKGEsdm9pZCAwLHZvaWQgMCxiKX0sYltcImZpbmFsbHlcIl09Yi5maW49ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbyhhLGZ1bmN0aW9uKGEpe3JldHVybiBvKGIoKSxmdW5jdGlvbigpe3JldHVybiBhfSl9LGZ1bmN0aW9uKGEpe3JldHVybiBvKGIoKSxmdW5jdGlvbigpe3JldHVybiBtKGEpfSl9KX0sYi5kb25lPWZ1bmN0aW9uKGEsZCxlLGYpe2Q9ZHx8ZXx8Zj9vKGEsZCxlLGYpOmEsdShkLGZ1bmN0aW9uKGQpe0EoZnVuY3Rpb24oKXtpZihjKGQsYSksIWIub25lcnJvcil0aHJvdyBkO2Iub25lcnJvcihkKX0pfSl9LGIudGltZW91dD1mdW5jdGlvbihhLGIpe3ZhciBjPWcoKSxkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLnJlamVjdChFcnJvcihcIlRpbWVkIG91dCBhZnRlciBcIitiK1wiIG1zXCIpKX0sYik7cmV0dXJuIG8oYSxmdW5jdGlvbihhKXtjbGVhclRpbWVvdXQoZCksYy5yZXNvbHZlKGEpfSxmdW5jdGlvbihhKXtjbGVhclRpbWVvdXQoZCksYy5yZWplY3QoYSl9KSxjLnByb21pc2V9LGIuZGVsYXk9ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj1hLGE9dm9pZCAwKTt2YXIgYz1nKCk7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLnJlc29sdmUoYSl9LGIpLGMucHJvbWlzZX0sYi5uZmFwcGx5PWZ1bmN0aW9uKGEsYil7dmFyIGM9RyhiKSxkPWcoKTtyZXR1cm4gYy5wdXNoKGQubWFrZU5vZGVSZXNvbHZlcigpKSxTKGEsYykuZmFpbChkLnJlamVjdCksZC5wcm9taXNlfSxiLm5mY2FsbD1mdW5jdGlvbihhKXt2YXIgYj1HKGFyZ3VtZW50cywxKSxjPWcoKTtyZXR1cm4gYi5wdXNoKGMubWFrZU5vZGVSZXNvbHZlcigpKSxTKGEsYikuZmFpbChjLnJlamVjdCksYy5wcm9taXNlfSxiLm5mYmluZD1mdW5jdGlvbihhKXt2YXIgYj1HKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1iLmNvbmNhdChHKGFyZ3VtZW50cykpLGQ9ZygpO3JldHVybiBjLnB1c2goZC5tYWtlTm9kZVJlc29sdmVyKCkpLFMoYSxjKS5mYWlsKGQucmVqZWN0KSxkLnByb21pc2V9fSxiLm5wb3N0PWZ1bmN0aW9uKGEsYixjKXt2YXIgYz1HKGMpLGQ9ZygpO3JldHVybiBjLnB1c2goZC5tYWtlTm9kZVJlc29sdmVyKCkpLFIoYSxiLGMpLmZhaWwoZC5yZWplY3QpLGQucHJvbWlzZX0sYi5uc2VuZD12LGIubmludm9rZT1mKHYsXCJuaW52b2tlXCIsXCJuc2VuZFwiKSxiLm5vZGVpZnk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj8oYS50aGVuKGZ1bmN0aW9uKGEpe0EoZnVuY3Rpb24oKXtiKG51bGwsYSl9KX0sZnVuY3Rpb24oYSl7QShmdW5jdGlvbigpe2IoYSl9KX0pLHZvaWQgMCk6YX07dmFyIFQ9ZSgpfSksZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGI9e1ZFUlNJT046XCIwLjUuM1wifTtiLlN5c3RlbT1mdW5jdGlvbigpe3RoaXMuX21hcHBpbmdzPXt9LHRoaXMuX291dGxldHM9e30sdGhpcy5faGFuZGxlcnM9e30sdGhpcy5zdHJpY3RJbmplY3Rpb25zPSEwLHRoaXMuYXV0b01hcE91dGxldHM9ITEsdGhpcy5wb3N0SW5qZWN0aW9uSG9vaz1cInNldHVwXCJ9LGIuU3lzdGVtLnByb3RvdHlwZT17X2NyZWF0ZUFuZFNldHVwSW5zdGFuY2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgYjtyZXR1cm4gdGhpcy5pbmplY3RJbnRvKGMsYSksY30sX3JldHJpZXZlRnJvbUNhY2hlT3JDcmVhdGU6ZnVuY3Rpb24oYSxiKXtcInVuZGVmaW5lZFwiPT10eXBlb2YgYiYmKGI9ITEpO3ZhciBjO2lmKCF0aGlzLl9tYXBwaW5ncy5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBuZXcgRXJyb3IoMWUzKTt2YXIgZD10aGlzLl9tYXBwaW5nc1thXTtyZXR1cm4hYiYmZC5pc1NpbmdsZXRvbj8obnVsbD09ZC5vYmplY3QmJihkLm9iamVjdD10aGlzLl9jcmVhdGVBbmRTZXR1cEluc3RhbmNlKGEsZC5jbGF6eikpLGM9ZC5vYmplY3QpOmM9ZC5jbGF6ej90aGlzLl9jcmVhdGVBbmRTZXR1cEluc3RhbmNlKGEsZC5jbGF6eik6ZC5vYmplY3QsY30sbWFwT3V0bGV0OmZ1bmN0aW9uKGEsYixjKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoMTAxMCk7cmV0dXJuIGI9Ynx8XCJnbG9iYWxcIixjPWN8fGEsdGhpcy5fb3V0bGV0cy5oYXNPd25Qcm9wZXJ0eShiKXx8KHRoaXMuX291dGxldHNbYl09e30pLHRoaXMuX291dGxldHNbYl1bY109YSx0aGlzfSxnZXRPYmplY3Q6ZnVuY3Rpb24oYSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKDEwMjApO3JldHVybiB0aGlzLl9yZXRyaWV2ZUZyb21DYWNoZU9yQ3JlYXRlKGEpfSxtYXBWYWx1ZTpmdW5jdGlvbihhLGIpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcigxMDMwKTtyZXR1cm4gdGhpcy5fbWFwcGluZ3NbYV09e2NsYXp6Om51bGwsb2JqZWN0OmIsaXNTaW5nbGV0b246ITB9LHRoaXMuYXV0b01hcE91dGxldHMmJnRoaXMubWFwT3V0bGV0KGEpLHRoaXMuaGFzTWFwcGluZyhhKSYmdGhpcy5pbmplY3RJbnRvKGIsYSksdGhpc30saGFzTWFwcGluZzpmdW5jdGlvbihhKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoMTA0MCk7cmV0dXJuIHRoaXMuX21hcHBpbmdzLmhhc093blByb3BlcnR5KGEpfSxtYXBDbGFzczpmdW5jdGlvbihhLGIpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcigxMDUwKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgYil0aHJvdyBuZXcgRXJyb3IoMTA1MSk7cmV0dXJuIHRoaXMuX21hcHBpbmdzW2FdPXtjbGF6ejpiLG9iamVjdDpudWxsLGlzU2luZ2xldG9uOiExfSx0aGlzLmF1dG9NYXBPdXRsZXRzJiZ0aGlzLm1hcE91dGxldChhKSx0aGlzfSxtYXBTaW5nbGV0b246ZnVuY3Rpb24oYSxiKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoMTA2MCk7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGIpdGhyb3cgbmV3IEVycm9yKDEwNjEpO3JldHVybiB0aGlzLl9tYXBwaW5nc1thXT17Y2xheno6YixvYmplY3Q6bnVsbCxpc1NpbmdsZXRvbjohMH0sdGhpcy5hdXRvTWFwT3V0bGV0cyYmdGhpcy5tYXBPdXRsZXQoYSksdGhpc30saW5zdGFudGlhdGU6ZnVuY3Rpb24oYSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKDEwNzApO3JldHVybiB0aGlzLl9yZXRyaWV2ZUZyb21DYWNoZU9yQ3JlYXRlKGEsITApfSxpbmplY3RJbnRvOmZ1bmN0aW9uKGEsYil7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKDEwODApO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBhKXt2YXIgYz1bXTt0aGlzLl9vdXRsZXRzLmhhc093blByb3BlcnR5KFwiZ2xvYmFsXCIpJiZjLnB1c2godGhpcy5fb3V0bGV0cy5nbG9iYWwpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBiJiZ0aGlzLl9vdXRsZXRzLmhhc093blByb3BlcnR5KGIpJiZjLnB1c2godGhpcy5fb3V0bGV0c1tiXSk7Zm9yKHZhciBkIGluIGMpe3ZhciBlPWNbZF07Zm9yKHZhciBmIGluIGUpe3ZhciBnPWVbZl07KCF0aGlzLnN0cmljdEluamVjdGlvbnN8fGYgaW4gYSkmJihhW2ZdPXRoaXMuZ2V0T2JqZWN0KGcpKX19XCJzZXR1cFwiaW4gYSYmYS5zZXR1cC5jYWxsKGEpfXJldHVybiB0aGlzfSx1bm1hcDpmdW5jdGlvbihhKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoMTA5MCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9tYXBwaW5nc1thXSx0aGlzfSx1bm1hcE91dGxldDpmdW5jdGlvbihhLGIpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcigxMTAwKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgYil0aHJvdyBuZXcgRXJyb3IoMTEwMSk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9vdXRsZXRzW2FdW2JdLHRoaXN9LG1hcEhhbmRsZXI6ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoMTExMCk7cmV0dXJuIGI9Ynx8XCJnbG9iYWxcIixjPWN8fGEsXCJ1bmRlZmluZWRcIj09dHlwZW9mIGQmJihkPSExKSxcInVuZGVmaW5lZFwiPT10eXBlb2YgZSYmKGU9ITEpLHRoaXMuX2hhbmRsZXJzLmhhc093blByb3BlcnR5KGEpfHwodGhpcy5faGFuZGxlcnNbYV09e30pLHRoaXMuX2hhbmRsZXJzW2FdLmhhc093blByb3BlcnR5KGIpfHwodGhpcy5faGFuZGxlcnNbYV1bYl09W10pLHRoaXMuX2hhbmRsZXJzW2FdW2JdLnB1c2goe2hhbmRsZXI6YyxvbmVTaG90OmQscGFzc0V2ZW50OmV9KSx0aGlzfSx1bm1hcEhhbmRsZXI6ZnVuY3Rpb24oYSxiLGMpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcigxMTIwKTtpZihiPWJ8fFwiZ2xvYmFsXCIsYz1jfHxhLHRoaXMuX2hhbmRsZXJzLmhhc093blByb3BlcnR5KGEpJiZ0aGlzLl9oYW5kbGVyc1thXS5oYXNPd25Qcm9wZXJ0eShiKSl7dmFyIGQ9dGhpcy5faGFuZGxlcnNbYV1bYl07Zm9yKHZhciBlIGluIGQpe3ZhciBmPWRbZV07aWYoZi5oYW5kbGVyPT09Yyl7ZC5zcGxpY2UoZSwxKTticmVha319fXJldHVybiB0aGlzfSxub3RpZnk6ZnVuY3Rpb24oYSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKDExMzApO3ZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksYz1iLnNsaWNlKDEpO2lmKHRoaXMuX2hhbmRsZXJzLmhhc093blByb3BlcnR5KGEpKXt2YXIgZD10aGlzLl9oYW5kbGVyc1thXTtmb3IodmFyIGUgaW4gZCl7dmFyIGYsZz1kW2VdO1wiZ2xvYmFsXCIhPT1lJiYoZj10aGlzLmdldE9iamVjdChlKSk7dmFyIGgsaSxqPVtdO2ZvcihoPTAsaT1nLmxlbmd0aDtpPmg7aCsrKXt2YXIgayxsPWdbaF07az1mJiZcInN0cmluZ1wiPT10eXBlb2YgbC5oYW5kbGVyP2ZbbC5oYW5kbGVyXTpsLmhhbmRsZXIsbC5vbmVTaG90JiZqLnVuc2hpZnQoaCksbC5wYXNzRXZlbnQ/ay5hcHBseShmLGIpOmsuYXBwbHkoZixjKX1mb3IoaD0wLGk9ai5sZW5ndGg7aT5oO2grKylnLnNwbGljZShqW2hdLDEpfX1yZXR1cm4gdGhpc319LGEuZGlqb249Yn0odGhpcyksXCJ1bmRlZmluZWRcIj09dHlwZW9mIHV0aWxzKXZhciB1dGlscz17fTtcInVuZGVmaW5lZFwiPT10eXBlb2YgdXRpbHMuTWF0aCYmKHV0aWxzLk1hdGg9e30pLHV0aWxzLk1hdGgudG82NEJpdE51bWJlcj1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZTtyZXR1cm4gYz1uZXcgZ29vZy5tYXRoLkxvbmcoMCxiKSxkPW5ldyBnb29nLm1hdGguTG9uZyhhLDApLGU9Yy5hZGQoZCksZS50b051bWJlcigpfSxnb29nPXt9LGdvb2cubWF0aD17fSxnb29nLm1hdGguTG9uZz1mdW5jdGlvbihhLGIpe3RoaXMubG93Xz0wfGEsdGhpcy5oaWdoXz0wfGJ9LGdvb2cubWF0aC5Mb25nLkludENhY2hlXz17fSxnb29nLm1hdGguTG9uZy5mcm9tSW50PWZ1bmN0aW9uKGEpe2lmKGE+PS0xMjgmJjEyOD5hKXt2YXIgYj1nb29nLm1hdGguTG9uZy5JbnRDYWNoZV9bYV07aWYoYilyZXR1cm4gYn12YXIgYz1uZXcgZ29vZy5tYXRoLkxvbmcoMHxhLDA+YT8tMTowKTtyZXR1cm4gYT49LTEyOCYmMTI4PmEmJihnb29nLm1hdGguTG9uZy5JbnRDYWNoZV9bYV09YyksY30sZ29vZy5tYXRoLkxvbmcuZnJvbU51bWJlcj1mdW5jdGlvbihhKXtyZXR1cm4gaXNOYU4oYSl8fCFpc0Zpbml0ZShhKT9nb29nLm1hdGguTG9uZy5aRVJPOmE8PS1nb29nLm1hdGguTG9uZy5UV09fUFdSXzYzX0RCTF8/Z29vZy5tYXRoLkxvbmcuTUlOX1ZBTFVFOmErMT49Z29vZy5tYXRoLkxvbmcuVFdPX1BXUl82M19EQkxfP2dvb2cubWF0aC5Mb25nLk1BWF9WQUxVRTowPmE/Z29vZy5tYXRoLkxvbmcuZnJvbU51bWJlcigtYSkubmVnYXRlKCk6bmV3IGdvb2cubWF0aC5Mb25nKDB8YSVnb29nLm1hdGguTG9uZy5UV09fUFdSXzMyX0RCTF8sMHxhL2dvb2cubWF0aC5Mb25nLlRXT19QV1JfMzJfREJMXyl9LGdvb2cubWF0aC5Mb25nLmZyb21CaXRzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBnb29nLm1hdGguTG9uZyhhLGIpfSxnb29nLm1hdGguTG9uZy5mcm9tU3RyaW5nPWZ1bmN0aW9uKGEsYil7aWYoMD09YS5sZW5ndGgpdGhyb3cgRXJyb3IoXCJudW1iZXIgZm9ybWF0IGVycm9yOiBlbXB0eSBzdHJpbmdcIik7dmFyIGM9Ynx8MTA7aWYoMj5jfHxjPjM2KXRocm93IEVycm9yKFwicmFkaXggb3V0IG9mIHJhbmdlOiBcIitjKTtpZihcIi1cIj09YS5jaGFyQXQoMCkpcmV0dXJuIGdvb2cubWF0aC5Mb25nLmZyb21TdHJpbmcoYS5zdWJzdHJpbmcoMSksYykubmVnYXRlKCk7aWYoYS5pbmRleE9mKFwiLVwiKT49MCl0aHJvdyBFcnJvcignbnVtYmVyIGZvcm1hdCBlcnJvcjogaW50ZXJpb3IgXCItXCIgY2hhcmFjdGVyOiAnK2EpO2Zvcih2YXIgZD1nb29nLm1hdGguTG9uZy5mcm9tTnVtYmVyKE1hdGgucG93KGMsOCkpLGU9Z29vZy5tYXRoLkxvbmcuWkVSTyxmPTA7ZjxhLmxlbmd0aDtmKz04KXt2YXIgZz1NYXRoLm1pbig4LGEubGVuZ3RoLWYpLGg9cGFyc2VJbnQoYS5zdWJzdHJpbmcoZixmK2cpLGMpO2lmKDg+Zyl7dmFyIGk9Z29vZy5tYXRoLkxvbmcuZnJvbU51bWJlcihNYXRoLnBvdyhjLGcpKTtlPWUubXVsdGlwbHkoaSkuYWRkKGdvb2cubWF0aC5Mb25nLmZyb21OdW1iZXIoaCkpfWVsc2UgZT1lLm11bHRpcGx5KGQpLGU9ZS5hZGQoZ29vZy5tYXRoLkxvbmcuZnJvbU51bWJlcihoKSl9cmV0dXJuIGV9LGdvb2cubWF0aC5Mb25nLlRXT19QV1JfMTZfREJMXz02NTUzNixnb29nLm1hdGguTG9uZy5UV09fUFdSXzI0X0RCTF89MTw8MjQsZ29vZy5tYXRoLkxvbmcuVFdPX1BXUl8zMl9EQkxfPWdvb2cubWF0aC5Mb25nLlRXT19QV1JfMTZfREJMXypnb29nLm1hdGguTG9uZy5UV09fUFdSXzE2X0RCTF8sZ29vZy5tYXRoLkxvbmcuVFdPX1BXUl8zMV9EQkxfPWdvb2cubWF0aC5Mb25nLlRXT19QV1JfMzJfREJMXy8yLGdvb2cubWF0aC5Mb25nLlRXT19QV1JfNDhfREJMXz1nb29nLm1hdGguTG9uZy5UV09fUFdSXzMyX0RCTF8qZ29vZy5tYXRoLkxvbmcuVFdPX1BXUl8xNl9EQkxfLGdvb2cubWF0aC5Mb25nLlRXT19QV1JfNjRfREJMXz1nb29nLm1hdGguTG9uZy5UV09fUFdSXzMyX0RCTF8qZ29vZy5tYXRoLkxvbmcuVFdPX1BXUl8zMl9EQkxfLGdvb2cubWF0aC5Mb25nLlRXT19QV1JfNjNfREJMXz1nb29nLm1hdGguTG9uZy5UV09fUFdSXzY0X0RCTF8vMixnb29nLm1hdGguTG9uZy5aRVJPPWdvb2cubWF0aC5Mb25nLmZyb21JbnQoMCksZ29vZy5tYXRoLkxvbmcuT05FPWdvb2cubWF0aC5Mb25nLmZyb21JbnQoMSksZ29vZy5tYXRoLkxvbmcuTkVHX09ORT1nb29nLm1hdGguTG9uZy5mcm9tSW50KC0xKSxnb29nLm1hdGguTG9uZy5NQVhfVkFMVUU9Z29vZy5tYXRoLkxvbmcuZnJvbUJpdHMoLTEsMjE0NzQ4MzY0NyksZ29vZy5tYXRoLkxvbmcuTUlOX1ZBTFVFPWdvb2cubWF0aC5Mb25nLmZyb21CaXRzKDAsLTIxNDc0ODM2NDgpLGdvb2cubWF0aC5Mb25nLlRXT19QV1JfMjRfPWdvb2cubWF0aC5Mb25nLmZyb21JbnQoMTw8MjQpLGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS50b0ludD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvd199LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhpZ2hfKmdvb2cubWF0aC5Mb25nLlRXT19QV1JfMzJfREJMXyt0aGlzLmdldExvd0JpdHNVbnNpZ25lZCgpfSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYSl7dmFyIGI9YXx8MTA7aWYoMj5ifHxiPjM2KXRocm93IEVycm9yKFwicmFkaXggb3V0IG9mIHJhbmdlOiBcIitiKTtpZih0aGlzLmlzWmVybygpKXJldHVyblwiMFwiO2lmKHRoaXMuaXNOZWdhdGl2ZSgpKXtpZih0aGlzLmVxdWFscyhnb29nLm1hdGguTG9uZy5NSU5fVkFMVUUpKXt2YXIgYz1nb29nLm1hdGguTG9uZy5mcm9tTnVtYmVyKGIpLGQ9dGhpcy5kaXYoYyksZT1kLm11bHRpcGx5KGMpLnN1YnRyYWN0KHRoaXMpO3JldHVybiBkLnRvU3RyaW5nKGIpK2UudG9JbnQoKS50b1N0cmluZyhiKX1yZXR1cm5cIi1cIit0aGlzLm5lZ2F0ZSgpLnRvU3RyaW5nKGIpfWZvcih2YXIgZj1nb29nLm1hdGguTG9uZy5mcm9tTnVtYmVyKE1hdGgucG93KGIsNikpLGU9dGhpcyxnPVwiXCI7Oyl7dmFyIGg9ZS5kaXYoZiksaT1lLnN1YnRyYWN0KGgubXVsdGlwbHkoZikpLnRvSW50KCksaj1pLnRvU3RyaW5nKGIpO2lmKGU9aCxlLmlzWmVybygpKXJldHVybiBqK2c7Zm9yKDtqLmxlbmd0aDw2OylqPVwiMFwiK2o7Zz1cIlwiK2orZ319LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5nZXRIaWdoQml0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhpZ2hffSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUuZ2V0TG93Qml0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvd199LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5nZXRMb3dCaXRzVW5zaWduZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb3dfPj0wP3RoaXMubG93Xzpnb29nLm1hdGguTG9uZy5UV09fUFdSXzMyX0RCTF8rdGhpcy5sb3dffSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUuZ2V0TnVtQml0c0Ficz1mdW5jdGlvbigpe2lmKHRoaXMuaXNOZWdhdGl2ZSgpKXJldHVybiB0aGlzLmVxdWFscyhnb29nLm1hdGguTG9uZy5NSU5fVkFMVUUpPzY0OnRoaXMubmVnYXRlKCkuZ2V0TnVtQml0c0FicygpO2Zvcih2YXIgYT0wIT10aGlzLmhpZ2hfP3RoaXMuaGlnaF86dGhpcy5sb3dfLGI9MzE7Yj4wJiYwPT0oYSYxPDxiKTtiLS0pO3JldHVybiAwIT10aGlzLmhpZ2hfP2IrMzM6YisxfSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PXRoaXMuaGlnaF8mJjA9PXRoaXMubG93X30sZ29vZy5tYXRoLkxvbmcucHJvdG90eXBlLmlzTmVnYXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oaWdoXzwwfSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy5sb3dfKX0sZ29vZy5tYXRoLkxvbmcucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5oaWdoXz09YS5oaWdoXyYmdGhpcy5sb3dfPT1hLmxvd199LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5ub3RFcXVhbHM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaGlnaF8hPWEuaGlnaF98fHRoaXMubG93XyE9YS5sb3dffSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUubGVzc1RoYW49ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY29tcGFyZShhKTwwfSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUubGVzc1RoYW5PckVxdWFsPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNvbXBhcmUoYSk8PTB9LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5ncmVhdGVyVGhhbj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jb21wYXJlKGEpPjB9LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5ncmVhdGVyVGhhbk9yRXF1YWw9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY29tcGFyZShhKT49MH0sZ29vZy5tYXRoLkxvbmcucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oYSl7aWYodGhpcy5lcXVhbHMoYSkpcmV0dXJuIDA7dmFyIGI9dGhpcy5pc05lZ2F0aXZlKCksYz1hLmlzTmVnYXRpdmUoKTtyZXR1cm4gYiYmIWM/LTE6IWImJmM/MTp0aGlzLnN1YnRyYWN0KGEpLmlzTmVnYXRpdmUoKT8tMToxfSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUubmVnYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXF1YWxzKGdvb2cubWF0aC5Mb25nLk1JTl9WQUxVRSk/Z29vZy5tYXRoLkxvbmcuTUlOX1ZBTFVFOnRoaXMubm90KCkuYWRkKGdvb2cubWF0aC5Mb25nLk9ORSl9LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5oaWdoXz4+PjE2LGM9NjU1MzUmdGhpcy5oaWdoXyxkPXRoaXMubG93Xz4+PjE2LGU9NjU1MzUmdGhpcy5sb3dfLGY9YS5oaWdoXz4+PjE2LGc9NjU1MzUmYS5oaWdoXyxoPWEubG93Xz4+PjE2LGk9NjU1MzUmYS5sb3dfLGo9MCxrPTAsbD0wLG09MDtyZXR1cm4gbSs9ZStpLGwrPW0+Pj4xNixtJj02NTUzNSxsKz1kK2gsays9bD4+PjE2LGwmPTY1NTM1LGsrPWMrZyxqKz1rPj4+MTYsayY9NjU1MzUsais9YitmLGomPTY1NTM1LGdvb2cubWF0aC5Mb25nLmZyb21CaXRzKGw8PDE2fG0sajw8MTZ8ayl9LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5zdWJ0cmFjdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hZGQoYS5uZWdhdGUoKSl9LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5tdWx0aXBseT1mdW5jdGlvbihhKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnb29nLm1hdGguTG9uZy5aRVJPO2lmKGEuaXNaZXJvKCkpcmV0dXJuIGdvb2cubWF0aC5Mb25nLlpFUk87aWYodGhpcy5lcXVhbHMoZ29vZy5tYXRoLkxvbmcuTUlOX1ZBTFVFKSlyZXR1cm4gYS5pc09kZCgpP2dvb2cubWF0aC5Mb25nLk1JTl9WQUxVRTpnb29nLm1hdGguTG9uZy5aRVJPO2lmKGEuZXF1YWxzKGdvb2cubWF0aC5Mb25nLk1JTl9WQUxVRSkpcmV0dXJuIHRoaXMuaXNPZGQoKT9nb29nLm1hdGguTG9uZy5NSU5fVkFMVUU6Z29vZy5tYXRoLkxvbmcuWkVSTztpZih0aGlzLmlzTmVnYXRpdmUoKSlyZXR1cm4gYS5pc05lZ2F0aXZlKCk/dGhpcy5uZWdhdGUoKS5tdWx0aXBseShhLm5lZ2F0ZSgpKTp0aGlzLm5lZ2F0ZSgpLm11bHRpcGx5KGEpLm5lZ2F0ZSgpO2lmKGEuaXNOZWdhdGl2ZSgpKXJldHVybiB0aGlzLm11bHRpcGx5KGEubmVnYXRlKCkpLm5lZ2F0ZSgpO2lmKHRoaXMubGVzc1RoYW4oZ29vZy5tYXRoLkxvbmcuVFdPX1BXUl8yNF8pJiZhLmxlc3NUaGFuKGdvb2cubWF0aC5Mb25nLlRXT19QV1JfMjRfKSlyZXR1cm4gZ29vZy5tYXRoLkxvbmcuZnJvbU51bWJlcih0aGlzLnRvTnVtYmVyKCkqYS50b051bWJlcigpKTt2YXIgYj10aGlzLmhpZ2hfPj4+MTYsYz02NTUzNSZ0aGlzLmhpZ2hfLGQ9dGhpcy5sb3dfPj4+MTYsZT02NTUzNSZ0aGlzLmxvd18sZj1hLmhpZ2hfPj4+MTYsZz02NTUzNSZhLmhpZ2hfLGg9YS5sb3dfPj4+MTYsaT02NTUzNSZhLmxvd18saj0wLGs9MCxsPTAsbT0wO3JldHVybiBtKz1lKmksbCs9bT4+PjE2LG0mPTY1NTM1LGwrPWQqaSxrKz1sPj4+MTYsbCY9NjU1MzUsbCs9ZSpoLGsrPWw+Pj4xNixsJj02NTUzNSxrKz1jKmksais9az4+PjE2LGsmPTY1NTM1LGsrPWQqaCxqKz1rPj4+MTYsayY9NjU1MzUsays9ZSpnLGorPWs+Pj4xNixrJj02NTUzNSxqKz1iKmkrYypoK2QqZytlKmYsaiY9NjU1MzUsZ29vZy5tYXRoLkxvbmcuZnJvbUJpdHMobDw8MTZ8bSxqPDwxNnxrKX0sZ29vZy5tYXRoLkxvbmcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihhKXtpZihhLmlzWmVybygpKXRocm93IEVycm9yKFwiZGl2aXNpb24gYnkgemVyb1wiKTtpZih0aGlzLmlzWmVybygpKXJldHVybiBnb29nLm1hdGguTG9uZy5aRVJPO2lmKHRoaXMuZXF1YWxzKGdvb2cubWF0aC5Mb25nLk1JTl9WQUxVRSkpe2lmKGEuZXF1YWxzKGdvb2cubWF0aC5Mb25nLk9ORSl8fGEuZXF1YWxzKGdvb2cubWF0aC5Mb25nLk5FR19PTkUpKXJldHVybiBnb29nLm1hdGguTG9uZy5NSU5fVkFMVUU7aWYoYS5lcXVhbHMoZ29vZy5tYXRoLkxvbmcuTUlOX1ZBTFVFKSlyZXR1cm4gZ29vZy5tYXRoLkxvbmcuT05FO3ZhciBiPXRoaXMuc2hpZnRSaWdodCgxKSxjPWIuZGl2KGEpLnNoaWZ0TGVmdCgxKTtpZihjLmVxdWFscyhnb29nLm1hdGguTG9uZy5aRVJPKSlyZXR1cm4gYS5pc05lZ2F0aXZlKCk/Z29vZy5tYXRoLkxvbmcuT05FOmdvb2cubWF0aC5Mb25nLk5FR19PTkU7dmFyIGQ9dGhpcy5zdWJ0cmFjdChhLm11bHRpcGx5KGMpKSxlPWMuYWRkKGQuZGl2KGEpKTtyZXR1cm4gZX1pZihhLmVxdWFscyhnb29nLm1hdGguTG9uZy5NSU5fVkFMVUUpKXJldHVybiBnb29nLm1hdGguTG9uZy5aRVJPO2lmKHRoaXMuaXNOZWdhdGl2ZSgpKXJldHVybiBhLmlzTmVnYXRpdmUoKT90aGlzLm5lZ2F0ZSgpLmRpdihhLm5lZ2F0ZSgpKTp0aGlzLm5lZ2F0ZSgpLmRpdihhKS5uZWdhdGUoKTtpZihhLmlzTmVnYXRpdmUoKSlyZXR1cm4gdGhpcy5kaXYoYS5uZWdhdGUoKSkubmVnYXRlKCk7Zm9yKHZhciBmPWdvb2cubWF0aC5Mb25nLlpFUk8sZD10aGlzO2QuZ3JlYXRlclRoYW5PckVxdWFsKGEpOyl7Zm9yKHZhciBjPU1hdGgubWF4KDEsTWF0aC5mbG9vcihkLnRvTnVtYmVyKCkvYS50b051bWJlcigpKSksZz1NYXRoLmNlaWwoTWF0aC5sb2coYykvTWF0aC5MTjIpLGg9NDg+PWc/MTpNYXRoLnBvdygyLGctNDgpLGk9Z29vZy5tYXRoLkxvbmcuZnJvbU51bWJlcihjKSxqPWkubXVsdGlwbHkoYSk7ai5pc05lZ2F0aXZlKCl8fGouZ3JlYXRlclRoYW4oZCk7KWMtPWgsaT1nb29nLm1hdGguTG9uZy5mcm9tTnVtYmVyKGMpLGo9aS5tdWx0aXBseShhKTtpLmlzWmVybygpJiYoaT1nb29nLm1hdGguTG9uZy5PTkUpLGY9Zi5hZGQoaSksZD1kLnN1YnRyYWN0KGopfXJldHVybiBmfSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUubW9kdWxvPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnN1YnRyYWN0KHRoaXMuZGl2KGEpLm11bHRpcGx5KGEpKX0sZ29vZy5tYXRoLkxvbmcucHJvdG90eXBlLm5vdD1mdW5jdGlvbigpe3JldHVybiBnb29nLm1hdGguTG9uZy5mcm9tQml0cyh+dGhpcy5sb3dfLH50aGlzLmhpZ2hfKX0sZ29vZy5tYXRoLkxvbmcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5tYXRoLkxvbmcuZnJvbUJpdHModGhpcy5sb3dfJmEubG93Xyx0aGlzLmhpZ2hfJmEuaGlnaF8pfSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oYSl7cmV0dXJuIGdvb2cubWF0aC5Mb25nLmZyb21CaXRzKHRoaXMubG93X3xhLmxvd18sdGhpcy5oaWdoX3xhLmhpZ2hfKX0sZ29vZy5tYXRoLkxvbmcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihhKXtyZXR1cm4gZ29vZy5tYXRoLkxvbmcuZnJvbUJpdHModGhpcy5sb3dfXmEubG93Xyx0aGlzLmhpZ2hfXmEuaGlnaF8pfSxnb29nLm1hdGguTG9uZy5wcm90b3R5cGUuc2hpZnRMZWZ0PWZ1bmN0aW9uKGEpe2lmKGEmPTYzLDA9PWEpcmV0dXJuIHRoaXM7dmFyIGI9dGhpcy5sb3dfO2lmKDMyPmEpe3ZhciBjPXRoaXMuaGlnaF87cmV0dXJuIGdvb2cubWF0aC5Mb25nLmZyb21CaXRzKGI8PGEsYzw8YXxiPj4+MzItYSl9cmV0dXJuIGdvb2cubWF0aC5Mb25nLmZyb21CaXRzKDAsYjw8YS0zMil9LGdvb2cubWF0aC5Mb25nLnByb3RvdHlwZS5zaGlmdFJpZ2h0PWZ1bmN0aW9uKGEpe2lmKGEmPTYzLDA9PWEpcmV0dXJuIHRoaXM7dmFyIGI9dGhpcy5oaWdoXztpZigzMj5hKXt2YXIgYz10aGlzLmxvd187cmV0dXJuIGdvb2cubWF0aC5Mb25nLmZyb21CaXRzKGM+Pj5hfGI8PDMyLWEsYj4+YSl9cmV0dXJuIGdvb2cubWF0aC5Mb25nLmZyb21CaXRzKGI+PmEtMzIsYj49MD8wOi0xKX0sZ29vZy5tYXRoLkxvbmcucHJvdG90eXBlLnNoaWZ0UmlnaHRVbnNpZ25lZD1mdW5jdGlvbihhKXtpZihhJj02MywwPT1hKXJldHVybiB0aGlzO3ZhciBiPXRoaXMuaGlnaF87aWYoMzI+YSl7dmFyIGM9dGhpcy5sb3dfO3JldHVybiBnb29nLm1hdGguTG9uZy5mcm9tQml0cyhjPj4+YXxiPDwzMi1hLGI+Pj5hKX1yZXR1cm4gMzI9PWE/Z29vZy5tYXRoLkxvbmcuZnJvbUJpdHMoYiwwKTpnb29nLm1hdGguTG9uZy5mcm9tQml0cyhiPj4+YS0zMiwwKX07dmFyIFVURjg9e307VVRGOC5lbmNvZGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoOysrYyl7dmFyIGQ9YS5jaGFyQ29kZUF0KGMpOzEyOD5kP2IucHVzaChkKToyMDQ4PmQ/KGIucHVzaCgxOTJ8ZD4+NiksYi5wdXNoKDEyOHw2MyZkKSk6NjU1MzY+ZD8oYi5wdXNoKDIyNHxkPj4xMiksYi5wdXNoKDEyOHw2MyZkPj42KSxiLnB1c2goMTI4fDYzJmQpKTooYi5wdXNoKDI0MHxkPj4xOCksYi5wdXNoKDEyOHw2MyZkPj4xMiksYi5wdXNoKDEyOHw2MyZkPj42KSxiLnB1c2goMTI4fDYzJmQpKX1yZXR1cm4gYn0sVVRGOC5kZWNvZGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoOyl7dmFyIGQ9YVtjKytdOzEyOD5kfHwoMjI0PmQ/KGQ9KDMxJmQpPDw2LGR8PTYzJmFbYysrXSk6MjQwPmQ/KGQ9KDE1JmQpPDwxMixkfD0oNjMmYVtjKytdKTw8NixkfD02MyZhW2MrK10pOihkPSg3JmQpPDwxOCxkfD0oNjMmYVtjKytdKTw8MTIsZHw9KDYzJmFbYysrXSk8PDYsZHw9NjMmYVtjKytdKSksYi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZCkpfXJldHVybiBiLmpvaW4oXCJcIil9O3ZhciBCQVNFNjQ9e307aWYoZnVuY3Rpb24oYil7dmFyIGM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPTAsZD1bXSxlPTB8YS5sZW5ndGgvMzswPGUtLTspe3ZhciBmPShhW2NdPDwxNikrKGFbYysxXTw8OCkrYVtjKzJdO2MrPTMsZC5wdXNoKGIuY2hhckF0KDYzJmY+PjE4KSksZC5wdXNoKGIuY2hhckF0KDYzJmY+PjEyKSksZC5wdXNoKGIuY2hhckF0KDYzJmY+PjYpKSxkLnB1c2goYi5jaGFyQXQoNjMmZikpfWlmKDI9PWEubGVuZ3RoLWMpe3ZhciBmPShhW2NdPDwxNikrKGFbYysxXTw8OCk7ZC5wdXNoKGIuY2hhckF0KDYzJmY+PjE4KSksZC5wdXNoKGIuY2hhckF0KDYzJmY+PjEyKSksZC5wdXNoKGIuY2hhckF0KDYzJmY+PjYpKSxkLnB1c2goXCI9XCIpfWVsc2UgaWYoMT09YS5sZW5ndGgtYyl7dmFyIGY9YVtjXTw8MTY7ZC5wdXNoKGIuY2hhckF0KDYzJmY+PjE4KSksZC5wdXNoKGIuY2hhckF0KDYzJmY+PjEyKSksZC5wdXNoKFwiPT1cIil9cmV0dXJuIGQuam9pbihcIlwiKX0sZD1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxjPTA7YzxiLmxlbmd0aDsrK2MpYVtiLmNoYXJDb2RlQXQoYyldPWM7cmV0dXJuIGFbXCI9XCIuY2hhckNvZGVBdCgwKV09MCxhfSgpLGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz1bXSxlPTB8YS5sZW5ndGgvNDswPGUtLTspe3ZhciBmPShkW2EuY2hhckNvZGVBdChiKV08PDE4KSsoZFthLmNoYXJDb2RlQXQoYisxKV08PDEyKSsoZFthLmNoYXJDb2RlQXQoYisyKV08PDYpK2RbYS5jaGFyQ29kZUF0KGIrMyldO2MucHVzaCgyNTUmZj4+MTYpLGMucHVzaCgyNTUmZj4+OCksYy5wdXNoKDI1NSZmKSxiKz00fXJldHVybiBjJiYoXCI9XCI9PWEuY2hhckF0KGItMik/KGMucG9wKCksYy5wb3AoKSk6XCI9XCI9PWEuY2hhckF0KGItMSkmJmMucG9wKCkpLGN9LGY9e307Zi5lbmNvZGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoOysrYyliLnB1c2goYS5jaGFyQ29kZUF0KGMpKTtyZXR1cm4gYn0sZi5kZWNvZGU9ZnVuY3Rpb24oKXtmb3IodmFyIGI9MDtiPHMubGVuZ3RoOysrYilhW2JdPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtiXSk7cmV0dXJuIGEuam9pbihcIlwiKX0sQkFTRTY0LmRlY29kZUFycmF5PWZ1bmN0aW9uKGEpe3ZhciBiPWUoYSk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGIpfSxCQVNFNjQuZW5jb2RlQVNDSUk9ZnVuY3Rpb24oYSl7dmFyIGI9Zi5lbmNvZGUoYSk7cmV0dXJuIGMoYil9LEJBU0U2NC5kZWNvZGVBU0NJST1mdW5jdGlvbihhKXt2YXIgYj1lKGEpO3JldHVybiBmLmRlY29kZShiKX0sQkFTRTY0LmVuY29kZT1mdW5jdGlvbihhKXt2YXIgYj1VVEY4LmVuY29kZShhKTtyZXR1cm4gYyhiKX0sQkFTRTY0LmRlY29kZT1mdW5jdGlvbihhKXt2YXIgYj1lKGEpO3JldHVybiBVVEY4LmRlY29kZShiKX19KFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiKSx2b2lkIDA9PT1idG9hKXZhciBidG9hPUJBU0U2NC5lbmNvZGU7aWYodm9pZCAwPT09YXRvYil2YXIgYXRvYj1CQVNFNjQuZGVjb2RlO01lZGlhUGxheWVyPWZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO3ZhciBiLGMsZCxlLGYsZz1cIjEuMC4wXCIsaD1hLGk9ITEsaj0hMSxrPSEwLGw9ITEsbT1NZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucy5CVUZGRVJfU0laRV9SRVFVSVJFRCxuPWZ1bmN0aW9uKCl7cmV0dXJuISFjJiYhIWR9LG89ZnVuY3Rpb24oKXtpZighaSl0aHJvd1wiTWVkaWFQbGF5ZXIgbm90IGluaXRpYWxpemVkIVwiO2lmKCF0aGlzLmNhcGFiaWxpdGllcy5zdXBwb3J0c01lZGlhU291cmNlKCkpcmV0dXJuIHRoaXMuZXJySGFuZGxlci5jYXBhYmlsaXR5RXJyb3IoXCJtZWRpYXNvdXJjZVwiKSx2b2lkIDA7aWYoIWN8fCFkKXRocm93XCJNaXNzaW5nIHZpZXcgb3Igc291cmNlLlwiO2o9ITAsdGhpcy5kZWJ1Zy5sb2coXCJQbGF5YmFjayBpbml0aWF0ZWQhXCIpLGU9Yi5nZXRPYmplY3QoXCJzdHJlYW1Db250cm9sbGVyXCIpLGUuc2V0VmlkZW9Nb2RlbChmKSxlLnNldEF1dG9QbGF5KGspLGUubG9hZChkKSxiLm1hcFZhbHVlKFwic2NoZWR1bGVXaGlsZVBhdXNlZFwiLGwpLGIubWFwT3V0bGV0KFwic2NoZWR1bGVXaGlsZVBhdXNlZFwiLFwic3RyZWFtXCIpLGIubWFwVmFsdWUoXCJidWZmZXJNYXhcIixtKSxiLmluamVjdEludG8odGhpcy5idWZmZXJFeHQsXCJidWZmZXJNYXhcIil9LHA9ZnVuY3Rpb24oKXtuKCkmJm8uY2FsbCh0aGlzKX07cmV0dXJuIGI9bmV3IGRpam9uLlN5c3RlbSxiLm1hcFZhbHVlKFwic3lzdGVtXCIsYiksYi5tYXBPdXRsZXQoXCJzeXN0ZW1cIiksYi5pbmplY3RJbnRvKGgpLHtkZWJ1Zzp2b2lkIDAsZXZlbnRCdXM6dm9pZCAwLGNhcGFiaWxpdGllczp2b2lkIDAsYWJyQ29udHJvbGxlcjp2b2lkIDAsbWV0cmljc01vZGVsOnZvaWQgMCxtZXRyaWNzRXh0OnZvaWQgMCxidWZmZXJFeHQ6dm9pZCAwLGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuZXZlbnRCdXMuYWRkRXZlbnRMaXN0ZW5lcihhLGIsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuZXZlbnRCdXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGIsYyl9LGdldFZlcnNpb246ZnVuY3Rpb24oKXtyZXR1cm4gZ30sc3RhcnR1cDpmdW5jdGlvbigpe2l8fChiLmluamVjdEludG8odGhpcyksaT0hMCl9LGdldERlYnVnOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVidWd9LGdldFZpZGVvTW9kZWw6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sc2V0QXV0b1BsYXk6ZnVuY3Rpb24oYSl7az1hfSxnZXRBdXRvUGxheTpmdW5jdGlvbigpe3JldHVybiBrfSxzZXRTY2hlZHVsZVdoaWxlUGF1c2VkOmZ1bmN0aW9uKGEpe2w9YX0sZ2V0U2NoZWR1bGVXaGlsZVBhdXNlZDpmdW5jdGlvbigpe3JldHVybiBsfSxzZXRCdWZmZXJNYXg6ZnVuY3Rpb24oYSl7bT1hfSxnZXRCdWZmZXJNYXg6ZnVuY3Rpb24oKXtyZXR1cm4gbX0sZ2V0TWV0cmljc0V4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1ldHJpY3NFeHR9LGdldE1ldHJpY3NGb3I6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5tZXRyaWNzTW9kZWwuZ2V0UmVhZE9ubHlNZXRyaWNzRm9yKGEpO3JldHVybiBifSxnZXRRdWFsaXR5Rm9yOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFickNvbnRyb2xsZXIuZ2V0UXVhbGl0eUZvcihhKX0sc2V0UXVhbGl0eUZvcjpmdW5jdGlvbihhLGIpe3RoaXMuYWJyQ29udHJvbGxlci5zZXRQbGF5YmFja1F1YWxpdHkoYSxiKX0sZ2V0QXV0b1N3aXRjaFF1YWxpdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hYnJDb250cm9sbGVyLmdldEF1dG9Td2l0Y2hCaXRyYXRlKCl9LHNldEF1dG9Td2l0Y2hRdWFsaXR5OmZ1bmN0aW9uKGEpe3RoaXMuYWJyQ29udHJvbGxlci5zZXRBdXRvU3dpdGNoQml0cmF0ZShhKX0sYXR0YWNoVmlldzpmdW5jdGlvbihhKXtpZighaSl0aHJvd1wiTWVkaWFQbGF5ZXIgbm90IGluaXRpYWxpemVkIVwiO2M9YSxmPW51bGwsYyYmKGY9Yi5nZXRPYmplY3QoXCJ2aWRlb01vZGVsXCIpLGYuc2V0RWxlbWVudChjKSksaiYmZSYmKGUucmVzZXQoKSxlPW51bGwsaj0hMSksbi5jYWxsKHRoaXMpJiZwLmNhbGwodGhpcyl9LGF0dGFjaFNvdXJjZTpmdW5jdGlvbihhKXtpZighaSl0aHJvd1wiTWVkaWFQbGF5ZXIgbm90IGluaXRpYWxpemVkIVwiO2Q9YSx0aGlzLnNldFF1YWxpdHlGb3IoXCJ2aWRlb1wiLDApLHRoaXMuc2V0UXVhbGl0eUZvcihcImF1ZGlvXCIsMCksaiYmZSYmKGUucmVzZXQoKSxlPW51bGwsaj0hMSksbi5jYWxsKHRoaXMpJiZwLmNhbGwodGhpcyl9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5hdHRhY2hTb3VyY2UobnVsbCksdGhpcy5hdHRhY2hWaWV3KG51bGwpfSxwbGF5Om8saXNSZWFkeTpufX0sTWVkaWFQbGF5ZXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllcn0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzPXt9LE1lZGlhUGxheWVyLnV0aWxzPXt9LE1lZGlhUGxheWVyLm1vZGVscz17fSxNZWRpYVBsYXllci52bz17fSxNZWRpYVBsYXllci52by5tZXRyaWNzPXt9LE1lZGlhUGxheWVyLnJ1bGVzPXt9LE1lZGlhUGxheWVyLmRpPXt9LE1lZGlhUGxheWVyLmRpLkNvbnRleHQ9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtyZXR1cm57c3lzdGVtOnZvaWQgMCxzZXR1cDpmdW5jdGlvbigpe3RoaXMuc3lzdGVtLmF1dG9NYXBPdXRsZXRzPSEwLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcImRlYnVnXCIsTWVkaWFQbGF5ZXIudXRpbHMuRGVidWcpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcImV2ZW50QnVzXCIsTWVkaWFQbGF5ZXIudXRpbHMuRXZlbnRCdXMpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcImNhcGFiaWxpdGllc1wiLE1lZGlhUGxheWVyLnV0aWxzLkNhcGFiaWxpdGllcyksdGhpcy5zeXN0ZW0ubWFwU2luZ2xldG9uKFwidGV4dFRyYWNrRXh0ZW5zaW9uc1wiLE1lZGlhUGxheWVyLnV0aWxzLlRleHRUcmFja0V4dGVuc2lvbnMpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcInZ0dFBhcnNlclwiLE1lZGlhUGxheWVyLnV0aWxzLlZUVFBhcnNlciksdGhpcy5zeXN0ZW0ubWFwQ2xhc3MoXCJ2aWRlb01vZGVsXCIsTWVkaWFQbGF5ZXIubW9kZWxzLlZpZGVvTW9kZWwpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcIm1hbmlmZXN0TW9kZWxcIixNZWRpYVBsYXllci5tb2RlbHMuTWFuaWZlc3RNb2RlbCksdGhpcy5zeXN0ZW0ubWFwU2luZ2xldG9uKFwibWV0cmljc01vZGVsXCIsTWVkaWFQbGF5ZXIubW9kZWxzLk1ldHJpY3NNb2RlbCksdGhpcy5zeXN0ZW0ubWFwQ2xhc3MoXCJwcm90ZWN0aW9uTW9kZWxcIixNZWRpYVBsYXllci5tb2RlbHMuUHJvdGVjdGlvbk1vZGVsKSx0aGlzLnN5c3RlbS5tYXBTaW5nbGV0b24oXCJ0ZXh0VlRUU291cmNlQnVmZmVyXCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlRleHRWVFRTb3VyY2VCdWZmZXIpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcIm1lZGlhU291cmNlRXh0XCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLk1lZGlhU291cmNlRXh0ZW5zaW9ucyksdGhpcy5zeXN0ZW0ubWFwU2luZ2xldG9uKFwic291cmNlQnVmZmVyRXh0XCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlNvdXJjZUJ1ZmZlckV4dGVuc2lvbnMpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcImJ1ZmZlckV4dFwiLE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJFeHRlbnNpb25zKSx0aGlzLnN5c3RlbS5tYXBTaW5nbGV0b24oXCJhYnJDb250cm9sbGVyXCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkFickNvbnRyb2xsZXIpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcImVyckhhbmRsZXJcIixNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuRXJyb3JIYW5kbGVyKSx0aGlzLnN5c3RlbS5tYXBTaW5nbGV0b24oXCJwcm90ZWN0aW9uRXh0XCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlByb3RlY3Rpb25FeHRlbnNpb25zKSx0aGlzLnN5c3RlbS5tYXBDbGFzcyhcInByb3RlY3Rpb25Db250cm9sbGVyXCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlByb3RlY3Rpb25Db250cm9sbGVyKSx0aGlzLnN5c3RlbS5tYXBDbGFzcyhcIm1ldHJpY3NcIixNZWRpYVBsYXllci5tb2RlbHMuTWV0cmljc0xpc3QpLHRoaXMuc3lzdGVtLm1hcENsYXNzKFwiZG93bmxvYWRSYXRpb1J1bGVcIixNZWRpYVBsYXllci5ydWxlcy5Eb3dubG9hZFJhdGlvUnVsZSksdGhpcy5zeXN0ZW0ubWFwQ2xhc3MoXCJpbnN1ZmZpY2llbnRCdWZmZXJSdWxlXCIsTWVkaWFQbGF5ZXIucnVsZXMuSW5zdWZmaWNpZW50QnVmZmVyUnVsZSksdGhpcy5zeXN0ZW0ubWFwQ2xhc3MoXCJsaW1pdFN3aXRjaGVzUnVsZVwiLE1lZGlhUGxheWVyLnJ1bGVzLkxpbWl0U3dpdGNoZXNSdWxlKSx0aGlzLnN5c3RlbS5tYXBDbGFzcyhcImFiclJ1bGVzQ29sbGVjdGlvblwiLE1lZGlhUGxheWVyLnJ1bGVzLkJhc2VSdWxlc0NvbGxlY3Rpb24pLHRoaXMuc3lzdGVtLm1hcENsYXNzKFwidGV4dENvbnRyb2xsZXJcIixNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuVGV4dENvbnRyb2xsZXIpLHRoaXMuc3lzdGVtLm1hcENsYXNzKFwiYnVmZmVyQ29udHJvbGxlclwiLE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJDb250cm9sbGVyKSx0aGlzLnN5c3RlbS5tYXBDbGFzcyhcIm1hbmlmZXN0TG9hZGVyXCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLk1hbmlmZXN0TG9hZGVyKSx0aGlzLnN5c3RlbS5tYXBDbGFzcyhcIm1hbmlmZXN0VXBkYXRlclwiLE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5NYW5pZmVzdFVwZGF0ZXIpLHRoaXMuc3lzdGVtLm1hcENsYXNzKFwiZnJhZ21lbnRDb250cm9sbGVyXCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkZyYWdtZW50Q29udHJvbGxlciksdGhpcy5zeXN0ZW0ubWFwQ2xhc3MoXCJmcmFnbWVudExvYWRlclwiLE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5GcmFnbWVudExvYWRlciksdGhpcy5zeXN0ZW0ubWFwQ2xhc3MoXCJmcmFnbWVudE1vZGVsXCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkZyYWdtZW50TW9kZWwpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcInN0cmVhbUNvbnRyb2xsZXJcIixNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuU3RyZWFtQ29udHJvbGxlciksdGhpcy5zeXN0ZW0ubWFwQ2xhc3MoXCJzdHJlYW1cIixNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuU3RyZWFtKSx0aGlzLnN5c3RlbS5tYXBDbGFzcyhcInJlcXVlc3RTY2hlZHVsZXJcIixNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuUmVxdWVzdFNjaGVkdWxlciksdGhpcy5zeXN0ZW0ubWFwU2luZ2xldG9uKFwic2NoZWR1bGVyRXh0XCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlNjaGVkdWxlckV4dGVuc2lvbnMpLHRoaXMuc3lzdGVtLm1hcENsYXNzKFwic2NoZWR1bGVyTW9kZWxcIixNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuU2NoZWR1bGVyTW9kZWwpXHJcbn19fSxEYXNoPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJue21vZHVsZXM6e30sZGVwZW5kZW5jaWVzOnt9LHZvOnt9LGRpOnt9fX0oKSxEYXNoLmRpLkRhc2hDb250ZXh0PWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJue3N5c3RlbTp2b2lkIDAsc2V0dXA6ZnVuY3Rpb24oKXtEYXNoLmRpLkRhc2hDb250ZXh0LnByb3RvdHlwZS5zZXR1cC5jYWxsKHRoaXMpLHRoaXMuc3lzdGVtLm1hcENsYXNzKFwicGFyc2VyXCIsRGFzaC5kZXBlbmRlbmNpZXMuRGFzaFBhcnNlciksdGhpcy5zeXN0ZW0ubWFwQ2xhc3MoXCJpbmRleEhhbmRsZXJcIixEYXNoLmRlcGVuZGVuY2llcy5EYXNoSGFuZGxlciksdGhpcy5zeXN0ZW0ubWFwQ2xhc3MoXCJiYXNlVVJMRXh0XCIsRGFzaC5kZXBlbmRlbmNpZXMuQmFzZVVSTEV4dGVuc2lvbnMpLHRoaXMuc3lzdGVtLm1hcENsYXNzKFwiZnJhZ21lbnRFeHRcIixEYXNoLmRlcGVuZGVuY2llcy5GcmFnbWVudEV4dGVuc2lvbnMpLHRoaXMuc3lzdGVtLm1hcFNpbmdsZXRvbihcIm1hbmlmZXN0RXh0XCIsRGFzaC5kZXBlbmRlbmNpZXMuRGFzaE1hbmlmZXN0RXh0ZW5zaW9ucyksdGhpcy5zeXN0ZW0ubWFwU2luZ2xldG9uKFwibWV0cmljc0V4dFwiLERhc2guZGVwZW5kZW5jaWVzLkRhc2hNZXRyaWNzRXh0ZW5zaW9ucyl9fX0sRGFzaC5kaS5EYXNoQ29udGV4dC5wcm90b3R5cGU9bmV3IE1lZGlhUGxheWVyLmRpLkNvbnRleHQsRGFzaC5kaS5EYXNoQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3I9RGFzaC5kaS5EYXNoQ29udGV4dCxEYXNoLmRlcGVuZGVuY2llcy5CYXNlVVJMRXh0ZW5zaW9ucz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjLGQsZSxmLGcsaCxpLGosayxsLG09bmV3IERhdGFWaWV3KGEpLG49e30sbz0wO1wic2lkeFwiIT09aiYmbzxtLmJ5dGVMZW5ndGg7KXtmb3Ioaz1tLmdldFVpbnQzMihvKSxvKz00LGo9XCJcIixmPTA7ND5mO2YrPTEpbD1tLmdldEludDgobyksais9U3RyaW5nLmZyb21DaGFyQ29kZShsKSxvKz0xO1wibW9vZlwiIT09aiYmXCJ0cmFmXCIhPT1qJiZcInNpZHhcIiE9PWo/bys9ay04Olwic2lkeFwiPT09aiYmKG8tPTgpfWlmKGU9bS5nZXRVaW50MzIobywhMSkrbyxlPmEuYnl0ZUxlbmd0aCl0aHJvd1wic2lkeCB0ZXJtaW5hdGVzIGFmdGVyIGFycmF5IGJ1ZmZlclwiO2ZvcihuLnZlcnNpb249bS5nZXRVaW50OChvKzgpLG8rPTEyLG4udGltZXNjYWxlPW0uZ2V0VWludDMyKG8rNCwhMSksbys9OCwwPT09bi52ZXJzaW9uPyhuLmVhcmxpZXN0X3ByZXNlbnRhdGlvbl90aW1lPW0uZ2V0VWludDMyKG8sITEpLG4uZmlyc3Rfb2Zmc2V0PW0uZ2V0VWludDMyKG8rNCwhMSksbys9OCk6KG4uZWFybGllc3RfcHJlc2VudGF0aW9uX3RpbWU9dXRpbHMuTWF0aC50bzY0Qml0TnVtYmVyKG0uZ2V0VWludDMyKG8rNCwhMSksbS5nZXRVaW50MzIobywhMSkpLG4uZmlyc3Rfb2Zmc2V0PShtLmdldFVpbnQzMihvKzgsITEpPDwzMikrbS5nZXRVaW50MzIobysxMiwhMSksbys9MTYpLG4uZmlyc3Rfb2Zmc2V0Kz1lKyhifHwwKSxuLnJlZmVyZW5jZV9jb3VudD1tLmdldFVpbnQxNihvKzIsITEpLG8rPTQsbi5yZWZlcmVuY2VzPVtdLGM9bi5maXJzdF9vZmZzZXQsZD1uLmVhcmxpZXN0X3ByZXNlbnRhdGlvbl90aW1lLGY9MDtmPG4ucmVmZXJlbmNlX2NvdW50O2YrPTEpaD1tLmdldFVpbnQzMihvLCExKSxnPWg+Pj4zMSxoPTIxNDc0ODM2NDcmaCxpPW0uZ2V0VWludDMyKG8rNCwhMSksbys9MTIsbi5yZWZlcmVuY2VzLnB1c2goe3NpemU6aCx0eXBlOmcsb2Zmc2V0OmMsZHVyYXRpb246aSx0aW1lOmQsdGltZXNjYWxlOm4udGltZXNjYWxlfSksYys9aCxkKz1pO2lmKG8hPT1lKXRocm93XCJFcnJvcjogZmluYWwgcG9zIFwiK28rXCIgZGlmZmVycyBmcm9tIFNJRFggZW5kIFwiK2U7cmV0dXJuIG59LGI9ZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGw7Zm9yKGU9YS5jYWxsKHRoaXMsYixkKSxmPWUucmVmZXJlbmNlcyxnPVtdLGk9MCxqPWYubGVuZ3RoO2o+aTtpKz0xKWg9bmV3IERhc2gudm8uU2VnbWVudCxoLmR1cmF0aW9uPWZbaV0uZHVyYXRpb24saC5tZWRpYT1jLGguc3RhcnRUaW1lPWZbaV0udGltZSxoLnRpbWVzY2FsZT1mW2ldLnRpbWVzY2FsZSxrPWZbaV0ub2Zmc2V0LGw9ZltpXS5vZmZzZXQrZltpXS5zaXplLTEsaC5tZWRpYVJhbmdlPWsrXCItXCIrbCxnLnB1c2goaCk7cmV0dXJuIHRoaXMuZGVidWcubG9nKFwiUGFyc2VkIFNJRFggYm94OiBcIitnLmxlbmd0aCtcIiBzZWdtZW50cy5cIiksUS53aGVuKGcpfSxjPWZ1bmN0aW9uKGEsYil7dmFyIGQsZSxmLGcsaCxpLGosaz1RLmRlZmVyKCksbD1uZXcgRGF0YVZpZXcoYSksbT0wLG49XCJcIixvPTAscD0hMSxxPXRoaXM7Zm9yKHEuZGVidWcubG9nKFwiU2VhcmNoaW5nIGZvciBpbml0aWFsaXphdGlvbi5cIik7XCJtb292XCIhPT1uJiZtPGwuYnl0ZUxlbmd0aDspe2ZvcihvPWwuZ2V0VWludDMyKG0pLG0rPTQsbj1cIlwiLGc9MDs0Pmc7Zys9MSloPWwuZ2V0SW50OChtKSxuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGgpLG0rPTE7XCJtb292XCIhPT1uJiYobSs9by04KX1yZXR1cm4gZj1sLmJ5dGVMZW5ndGgtbSxcIm1vb3ZcIiE9PW4/KHEuZGVidWcubG9nKFwiTG9hZGluZyBtb3JlIGJ5dGVzIHRvIGZpbmQgaW5pdGlhbGl6YXRpb24uXCIpLGIucmFuZ2Uuc3RhcnQ9MCxiLnJhbmdlLmVuZD1iLmJ5dGVzTG9hZGVkK2IuYnl0ZXNUb0xvYWQsaT1uZXcgWE1MSHR0cFJlcXVlc3QsaS5vbmxvYWRlbmQ9ZnVuY3Rpb24oKXtwfHxrLnJlamVjdChcIkVycm9yIGxvYWRpbmcgaW5pdGlhbGl6YXRpb24uXCIpfSxpLm9ubG9hZD1mdW5jdGlvbigpe3A9ITAsYi5ieXRlc0xvYWRlZD1iLnJhbmdlLmVuZCxjLmNhbGwocSxpLnJlc3BvbnNlKS50aGVuKGZ1bmN0aW9uKGEpe2sucmVzb2x2ZShhKX0pfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtrLnJlamVjdChcIkVycm9yIGxvYWRpbmcgaW5pdGlhbGl6YXRpb24uXCIpfSxpLm9wZW4oXCJHRVRcIixiLnVybCksaS5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiLGkuc2V0UmVxdWVzdEhlYWRlcihcIlJhbmdlXCIsXCJieXRlcz1cIitiLnJhbmdlLnN0YXJ0K1wiLVwiK2IucmFuZ2UuZW5kKSxpLnNlbmQobnVsbCkpOihkPW0tOCxlPWQrby0xLGo9ZCtcIi1cIitlLHEuZGVidWcubG9nKFwiRm91bmQgdGhlIGluaXRpYWxpemF0aW9uLiAgUmFuZ2U6IFwiK2opLGsucmVzb2x2ZShqKSksay5wcm9taXNlfSxkPWZ1bmN0aW9uKGEpe3ZhciBiPVEuZGVmZXIoKSxkPW5ldyBYTUxIdHRwUmVxdWVzdCxlPSEwLGY9dGhpcyxnPXt1cmw6YSxyYW5nZTp7fSxzZWFyY2hpbmc6ITEsYnl0ZXNMb2FkZWQ6MCxieXRlc1RvTG9hZDoxNTAwLHJlcXVlc3Q6ZH07cmV0dXJuIGYuZGVidWcubG9nKFwiU3RhcnQgc2VhcmNoaW5nIGZvciBpbml0aWFsaXphdGlvbi5cIiksZy5yYW5nZS5zdGFydD0wLGcucmFuZ2UuZW5kPWcuYnl0ZXNUb0xvYWQsZC5vbmxvYWQ9ZnVuY3Rpb24oKXtkLnN0YXR1czwyMDB8fGQuc3RhdHVzPjI5OXx8KGU9ITEsZy5ieXRlc0xvYWRlZD1nLnJhbmdlLmVuZCxjLmNhbGwoZixkLnJlc3BvbnNlLGcpLnRoZW4oZnVuY3Rpb24oYSl7Yi5yZXNvbHZlKGEpfSkpfSxkLm9ubG9hZGVuZD1kLm9uZXJyb3I9ZnVuY3Rpb24oKXtlJiYoZT0hMSxmLmVyckhhbmRsZXIuZG93bmxvYWRFcnJvcihcImluaXRpYWxpemF0aW9uXCIsZy51cmwsZCksYi5yZWplY3QoZCkpfSxkLm9wZW4oXCJHRVRcIixnLnVybCksZC5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiLGQuc2V0UmVxdWVzdEhlYWRlcihcIlJhbmdlXCIsXCJieXRlcz1cIitnLnJhbmdlLnN0YXJ0K1wiLVwiK2cucmFuZ2UuZW5kKSxkLnNlbmQobnVsbCksZi5kZWJ1Zy5sb2coXCJQZXJmb3JtIGluaXQgc2VhcmNoOiBcIitnLnVybCksYi5wcm9taXNlfSxlPWZ1bmN0aW9uKGEsYyl7dmFyIGQsZixnLGgsaSxqLGssbCxtPVEuZGVmZXIoKSxuPW5ldyBEYXRhVmlldyhhKSxvPW5ldyBYTUxIdHRwUmVxdWVzdCxwPTAscT1cIlwiLHI9MCxzPSEwLHQ9ITEsdT10aGlzO2Zvcih1LmRlYnVnLmxvZyhcIlNlYXJjaGluZyBmb3IgU0lEWCBib3guXCIpLHUuZGVidWcubG9nKGMuYnl0ZXNMb2FkZWQrXCIgYnl0ZXMgbG9hZGVkLlwiKTtcInNpZHhcIiE9PXEmJnA8bi5ieXRlTGVuZ3RoOyl7Zm9yKHI9bi5nZXRVaW50MzIocCkscCs9NCxxPVwiXCIsaT0wOzQ+aTtpKz0xKWo9bi5nZXRJbnQ4KHApLHErPVN0cmluZy5mcm9tQ2hhckNvZGUoaikscCs9MTtcInNpZHhcIiE9PXEmJihwKz1yLTgpfWlmKGQ9bi5ieXRlTGVuZ3RoLXAsXCJzaWR4XCIhPT1xKW0ucmVqZWN0KCk7ZWxzZSBpZihyLTg+ZCl1LmRlYnVnLmxvZyhcIkZvdW5kIFNJRFggYnV0IHdlIGRvbid0IGhhdmUgYWxsIG9mIGl0LlwiKSxjLnJhbmdlLnN0YXJ0PTAsYy5yYW5nZS5lbmQ9Yy5ieXRlc0xvYWRlZCsoci1kKSxvLm9ubG9hZD1mdW5jdGlvbigpe28uc3RhdHVzPDIwMHx8by5zdGF0dXM+Mjk5fHwocz0hMSxjLmJ5dGVzTG9hZGVkPWMucmFuZ2UuZW5kLGUuY2FsbCh1LG8ucmVzcG9uc2UsYykudGhlbihmdW5jdGlvbihhKXttLnJlc29sdmUoYSl9KSl9LG8ub25sb2FkZW5kPW8ub25lcnJvcj1mdW5jdGlvbigpe3MmJihzPSExLHUuZXJySGFuZGxlci5kb3dubG9hZEVycm9yKFwiU0lEWFwiLGMudXJsLG8pLG0ucmVqZWN0KG8pKX0sby5vcGVuKFwiR0VUXCIsYy51cmwpLG8ucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIixvLnNldFJlcXVlc3RIZWFkZXIoXCJSYW5nZVwiLFwiYnl0ZXM9XCIrYy5yYW5nZS5zdGFydCtcIi1cIitjLnJhbmdlLmVuZCksby5zZW5kKG51bGwpO2Vsc2UgaWYoYy5yYW5nZS5zdGFydD1wLTgsYy5yYW5nZS5lbmQ9Yy5yYW5nZS5zdGFydCtyLHUuZGVidWcubG9nKFwiRm91bmQgdGhlIFNJRFggYm94LiAgU3RhcnQ6IFwiK2MucmFuZ2Uuc3RhcnQrXCIgfCBFbmQ6IFwiK2MucmFuZ2UuZW5kKSxmPW5ldyBBcnJheUJ1ZmZlcihjLnJhbmdlLmVuZC1jLnJhbmdlLnN0YXJ0KSxoPW5ldyBVaW50OEFycmF5KGYpLGc9bmV3IFVpbnQ4QXJyYXkoYSxjLnJhbmdlLnN0YXJ0LGMucmFuZ2UuZW5kLWMucmFuZ2Uuc3RhcnQpLGguc2V0KGcpLGs9dGhpcy5wYXJzZVNJRFguY2FsbCh0aGlzLGYsYy5yYW5nZS5zdGFydCksbD1rLnJlZmVyZW5jZXMsbnVsbCE9PWwmJnZvaWQgMCE9PWwmJmwubGVuZ3RoPjAmJih0PTE9PT1sWzBdLnR5cGUpLHQpe3UuZGVidWcubG9nKFwiSW5pdGlhdGUgbXVsdGlwbGUgU0lEWCBsb2FkLlwiKTt2YXIgdix3LHgseSx6LEEsQj1bXTtmb3Iodj0wLHc9bC5sZW5ndGg7dz52O3YrPTEpeD1sW3ZdLm9mZnNldCx5PWxbdl0ub2Zmc2V0K2xbdl0uc2l6ZS0xLHo9eCtcIi1cIit5LEIucHVzaCh0aGlzLmxvYWRTZWdtZW50cy5jYWxsKHUsYy51cmwseikpO1EuYWxsKEIpLnRoZW4oZnVuY3Rpb24oYSl7Zm9yKEE9W10sdj0wLHc9YS5sZW5ndGg7dz52O3YrPTEpQT1BLmNvbmNhdChhW3ZdKTttLnJlc29sdmUoQSl9LGZ1bmN0aW9uKGEpe20ucmVqZWN0KGEpfSl9ZWxzZSB1LmRlYnVnLmxvZyhcIlBhcnNpbmcgc2VnbWVudHMgZnJvbSBTSURYLlwiKSxiLmNhbGwodSxmLGMudXJsLGMucmFuZ2Uuc3RhcnQpLnRoZW4oZnVuY3Rpb24oYSl7bS5yZXNvbHZlKGEpfSk7cmV0dXJuIG0ucHJvbWlzZX0sZj1mdW5jdGlvbihhLGMpe3ZhciBkLGY9US5kZWZlcigpLGc9bmV3IFhNTEh0dHBSZXF1ZXN0LGg9ITAsaT10aGlzLGo9e3VybDphLHJhbmdlOnt9LHNlYXJjaGluZzohMSxieXRlc0xvYWRlZDowLGJ5dGVzVG9Mb2FkOjE1MDAscmVxdWVzdDpnfTtyZXR1cm4gbnVsbD09PWM/KGkuZGVidWcubG9nKFwiTm8ga25vd24gcmFuZ2UgZm9yIFNJRFggcmVxdWVzdC5cIiksai5zZWFyY2hpbmc9ITAsai5yYW5nZS5zdGFydD0wLGoucmFuZ2UuZW5kPWouYnl0ZXNUb0xvYWQpOihkPWMuc3BsaXQoXCItXCIpLGoucmFuZ2Uuc3RhcnQ9cGFyc2VGbG9hdChkWzBdKSxqLnJhbmdlLmVuZD1wYXJzZUZsb2F0KGRbMV0pKSxnLm9ubG9hZD1mdW5jdGlvbigpe2cuc3RhdHVzPDIwMHx8Zy5zdGF0dXM+Mjk5fHwoaD0hMSxqLnNlYXJjaGluZz8oai5ieXRlc0xvYWRlZD1qLnJhbmdlLmVuZCxlLmNhbGwoaSxnLnJlc3BvbnNlLGopLnRoZW4oZnVuY3Rpb24oYSl7Zi5yZXNvbHZlKGEpfSkpOmIuY2FsbChpLGcucmVzcG9uc2Usai51cmwsai5yYW5nZS5zdGFydCkudGhlbihmdW5jdGlvbihhKXtmLnJlc29sdmUoYSl9KSl9LGcub25sb2FkZW5kPWcub25lcnJvcj1mdW5jdGlvbigpe2gmJihoPSExLGkuZXJySGFuZGxlci5kb3dubG9hZEVycm9yKFwiU0lEWFwiLGoudXJsLGcpLGYucmVqZWN0KGcpKX0sZy5vcGVuKFwiR0VUXCIsai51cmwpLGcucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIixnLnNldFJlcXVlc3RIZWFkZXIoXCJSYW5nZVwiLFwiYnl0ZXM9XCIrai5yYW5nZS5zdGFydCtcIi1cIitqLnJhbmdlLmVuZCksZy5zZW5kKG51bGwpLGkuZGVidWcubG9nKFwiUGVyZm9ybSBTSURYIGxvYWQ6IFwiK2oudXJsKSxmLnByb21pc2V9O3JldHVybntkZWJ1Zzp2b2lkIDAsZXJySGFuZGxlcjp2b2lkIDAsbG9hZFNlZ21lbnRzOmYsbG9hZEluaXRpYWxpemF0aW9uOmQscGFyc2VTZWdtZW50czpiLHBhcnNlU0lEWDphLGZpbmRTSURYOmV9fSxEYXNoLmRlcGVuZGVuY2llcy5CYXNlVVJMRXh0ZW5zaW9ucy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkRhc2guZGVwZW5kZW5jaWVzLkJhc2VVUkxFeHRlbnNpb25zfSxEYXNoLmRlcGVuZGVuY2llcy5EYXNoSGFuZGxlcj1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhLGIsYyxkPS0xLGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1udWxsO3JldHVybiBiJiZiLlJlcHJlc2VudGF0aW9uX2FzQXJyYXkmJmIuUmVwcmVzZW50YXRpb25fYXNBcnJheS5sZW5ndGg+MCYmKGM9Yi5SZXByZXNlbnRhdGlvbl9hc0FycmF5W2FdKSxjfSxmPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi50b1N0cmluZygpO3JldHVybiBhLnNwbGl0KFwiJE51bWJlciRcIikuam9pbihjKX0sZz1mdW5jdGlvbihhLGIpe3ZhciBjPWIudG9TdHJpbmcoKTtyZXR1cm4gYS5zcGxpdChcIiRUaW1lJFwiKS5qb2luKGMpfSxoPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi50b1N0cmluZygpO3JldHVybiBhLnNwbGl0KFwiJEJhbmR3aWR0aCRcIikuam9pbihjKX0saT1mdW5jdGlvbihhLGIpe2lmKG51bGw9PT1ifHwtMT09PWEuaW5kZXhPZihcIiRSZXByZXNlbnRhdGlvbklEJFwiKSlyZXR1cm4gYTt2YXIgYz1iLnRvU3RyaW5nKCk7cmV0dXJuIGEuc3BsaXQoXCIkUmVwcmVzZW50YXRpb25JRCRcIikuam9pbihjKX0saj1mdW5jdGlvbihhLGIpe3ZhciBjO3JldHVybiBjPWE9PT1iP2E6LTEhPT1hLmluZGV4T2YoXCJodHRwOi8vXCIpP2E6YithfSxrPWZ1bmN0aW9uKGEsYil7dmFyIGQ9US5kZWZlcigpLGY9ZShhLGIpLGc9bnVsbCxrPW51bGwsbD1udWxsLG09bnVsbCxuPXRoaXM7cmV0dXJuIGY/KG4uZGVidWcubG9nKFwiR2V0dGluZyB0aGUgaW5pdGlhbGl6YXRpb24gcmVxdWVzdC5cIiksZi5oYXNPd25Qcm9wZXJ0eShcIlNlZ21lbnRUZW1wbGF0ZVwiKT9mLlNlZ21lbnRUZW1wbGF0ZS5oYXNPd25Qcm9wZXJ0eShcImluaXRpYWxpemF0aW9uXCIpJiYoaz1mLlNlZ21lbnRUZW1wbGF0ZS5pbml0aWFsaXphdGlvbixrPWgoayxmLmJhbmR3aWR0aCksaz1pKGssZi5pZCkpOmYuaGFzT3duUHJvcGVydHkoXCJTZWdtZW50TGlzdFwiKSYmZi5TZWdtZW50TGlzdC5oYXNPd25Qcm9wZXJ0eShcIkluaXRpYWxpemF0aW9uXCIpJiZmLlNlZ21lbnRMaXN0LkluaXRpYWxpemF0aW9uLmhhc093blByb3BlcnR5KFwicmFuZ2VcIik/KGs9Zi5TZWdtZW50TGlzdC5Jbml0aWFsaXphdGlvbi5oYXNPd25Qcm9wZXJ0eShcInNvdXJjZVVSTFwiKT9mLlNlZ21lbnRMaXN0LkluaXRpYWxpemF0aW9uLnNvdXJjZVVSTDpmLkJhc2VVUkwsbT1mLlNlZ21lbnRMaXN0LkluaXRpYWxpemF0aW9uLnJhbmdlKTpmLmhhc093blByb3BlcnR5KFwiU2VnbWVudExpc3RcIikmJmYuU2VnbWVudExpc3QuaGFzT3duUHJvcGVydHkoXCJJbml0aWFsaXphdGlvblwiKSYmZi5TZWdtZW50TGlzdC5Jbml0aWFsaXphdGlvbi5oYXNPd25Qcm9wZXJ0eShcInNvdXJjZVVSTFwiKT9rPWYuU2VnbWVudExpc3QuSW5pdGlhbGl6YXRpb24uc291cmNlVVJMOmYuaGFzT3duUHJvcGVydHkoXCJTZWdtZW50QmFzZVwiKSYmZi5TZWdtZW50QmFzZS5oYXNPd25Qcm9wZXJ0eShcIkluaXRpYWxpemF0aW9uXCIpJiZmLlNlZ21lbnRCYXNlLkluaXRpYWxpemF0aW9uLmhhc093blByb3BlcnR5KFwicmFuZ2VcIik/KGs9Zi5CYXNlVVJMLG09Zi5TZWdtZW50QmFzZS5Jbml0aWFsaXphdGlvbi5yYW5nZSk6Zi5oYXNPd25Qcm9wZXJ0eShcIm1pbWVUeXBlXCIpJiZuLm1hbmlmZXN0RXh0LmdldElzVGV4dFRyYWNrKGYubWltZVR5cGUpPyhrPWYuQmFzZVVSTCxtPTApOihsPWYuQmFzZVVSTCxuLmJhc2VVUkxFeHQubG9hZEluaXRpYWxpemF0aW9uKGwpLnRoZW4oZnVuY3Rpb24oYil7bi5kZWJ1Zy5sb2coXCJHb3QgYW4gaW5pdGlhbGl6YXRpb24uXCIpLGc9bmV3IE1lZGlhUGxheWVyLnZvLlNlZ21lbnRSZXF1ZXN0LGcuc3RyZWFtVHlwZT1jLGcudHlwZT1cIkluaXRpYWxpemF0aW9uIFNlZ21lbnRcIixnLnVybD1qKGwsZi5CYXNlVVJMKSxnLnJhbmdlPWIsZy5xdWFsaXR5PWEsZC5yZXNvbHZlKGcpfSxmdW5jdGlvbihhKXtkLnJlamVjdChhKX0pKSxrJiZrLmxlbmd0aD4wJiYobi5kZWJ1Zy5sb2coXCJHb3QgYW4gaW5pdGlhbGl6YXRpb24uXCIpLGc9bmV3IE1lZGlhUGxheWVyLnZvLlNlZ21lbnRSZXF1ZXN0LGcuc3RyZWFtVHlwZT1jLGcudHlwZT1cIkluaXRpYWxpemF0aW9uIFNlZ21lbnRcIixnLnVybD1qKGssZi5CYXNlVVJMKSxnLnJhbmdlPW0sZy5xdWFsaXR5PWEsZC5yZXNvbHZlKGcpKSxkLnByb21pc2UpOlEucmVqZWN0KFwibm8gcmVwcmVzZW5hdGlvblwiKX0sbD1mdW5jdGlvbihjKXt2YXIgZSxmLGcsaCxpLGosaz0hMTtyZXR1cm4gdGhpcy5kZWJ1Zy5sb2coXCJDaGVja2luZyBmb3Igc3RyZWFtIGVuZC4uLlwiKSxhPyh0aGlzLmRlYnVnLmxvZyhcIkxpdmUgbmV2ZXIgZW5kcyEgKFRPRE8pXCIpLGs9ITEpOmMuaGFzT3duUHJvcGVydHkoXCJzZWdtZW50c1wiKSYmbnVsbCE9PWMuc2VnbWVudHM/KHRoaXMuZGVidWcubG9nKFwiU2VnbWVudHM6IFwiK2QrXCIgLyBcIitjLnNlZ21lbnRzLmxlbmd0aCksaz1kPj1jLnNlZ21lbnRzLmxlbmd0aCk6Yy5oYXNPd25Qcm9wZXJ0eShcIlNlZ21lbnRUZW1wbGF0ZVwiKSYmIWMuU2VnbWVudFRlbXBsYXRlLmhhc093blByb3BlcnR5KFwiU2VnbWVudFRpbWVsaW5lXCIpJiYoZj0xLGk9MSxoPWIsYy5TZWdtZW50VGVtcGxhdGUuaGFzT3duUHJvcGVydHkoXCJkdXJhdGlvblwiKSYmKGU9Yy5TZWdtZW50VGVtcGxhdGUuZHVyYXRpb24sYy5TZWdtZW50VGVtcGxhdGUuaGFzT3duUHJvcGVydHkoXCJ0aW1lc2NhbGVcIikmJihmPWMuU2VnbWVudFRlbXBsYXRlLnRpbWVzY2FsZSksYy5TZWdtZW50VGVtcGxhdGUuaGFzT3duUHJvcGVydHkoXCJzdGFydE51bWJlclwiKSYmKGk9Yy5TZWdtZW50VGVtcGxhdGUuc3RhcnROdW1iZXIpLGc9ZS9mLGo9ZC1pLHRoaXMuZGVidWcubG9nKFwiU2VnbWVudFRlbXBsYXRlOiBcIitnK1wiICogXCIraitcIiA9IFwiK2cqaitcIiAvIFwiK2gpLGs9ZypqPj1oKSksUS53aGVuKGspfSxtPWZ1bmN0aW9uKGEsYyl7dmFyIGQsZSxoLGksaixrLGwsbSxuPVtdLG89MCxwPTEscT0xO2ZvcihhLmhhc093blByb3BlcnR5KFwic3RhcnROdW1iZXJcIikmJihwPWEuc3RhcnROdW1iZXIpLGEuaGFzT3duUHJvcGVydHkoXCJ0aW1lc2NhbGVcIikmJihxPWEudGltZXNjYWxlKSxkPWMuU19hc0FycmF5LGg9MCxpPWQubGVuZ3RoO2k+aDtoKz0xKWZvcihlPWRbaF0saz0wLGUuaGFzT3duUHJvcGVydHkoXCJyXCIpJiYoaz1lLnIpLDA+ayYmKGs9KGItby9xKS8oZS5kL3EpLTEpLGo9MDtrPj1qO2orPTEpbD1uZXcgRGFzaC52by5TZWdtZW50LGwudGltZXNjYWxlPXEsMD09PWomJmUuaGFzT3duUHJvcGVydHkoXCJ0XCIpPyhsLnN0YXJ0VGltZT1lLnQsbz1lLnQpOmwuc3RhcnRUaW1lPW8sbC5kdXJhdGlvbj1lLmQsbT1hLm1lZGlhLG09ZihtLHApLG09ZyhtLGwuc3RhcnRUaW1lKSxsLm1lZGlhPW0sbi5wdXNoKGwpLG8rPWwuZHVyYXRpb24scCs9MTtyZXR1cm4gUS53aGVuKG4pfSxuPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZz1bXSxoPTE7Zm9yKGEuaGFzT3duUHJvcGVydHkoXCJzdGFydE51bWJlclwiKSYmKGg9TWF0aC5tYXgoYS5zdGFydE51bWJlciwxKSksZj0oaC0xKSphLmR1cmF0aW9uLGI9MCxjPWEuU2VnbWVudFVSTF9hc0FycmF5Lmxlbmd0aDtjPmI7Yis9MSllPWEuU2VnbWVudFVSTF9hc0FycmF5W2JdLGQ9bmV3IERhc2gudm8uU2VnbWVudCxkLm1lZGlhPWUubWVkaWEsZC5tZWRpYVJhbmdlPWUubWVkaWFSYW5nZSxkLmluZGV4PWUuaW5kZXgsZC5pbmRleFJhbmdlPWUuaW5kZXhSYW5nZSxkLnRpbWVzY2FsZT1hLnRpbWVzY2FsZSxkLmR1cmF0aW9uPWEuZHVyYXRpb24sZC5zdGFydFRpbWU9ZitiKmEuZHVyYXRpb24sZy5wdXNoKGQpO3JldHVybiBRLndoZW4oZyl9LG89ZnVuY3Rpb24oYSl7dmFyIGI9YS5CYXNlVVJMLGM9bnVsbDtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShcIlNlZ21lbnRCYXNlXCIpJiZhLlNlZ21lbnRCYXNlLmhhc093blByb3BlcnR5KFwiaW5kZXhSYW5nZVwiKSYmKGM9YS5TZWdtZW50QmFzZS5pbmRleFJhbmdlKSx0aGlzLmJhc2VVUkxFeHQubG9hZFNlZ21lbnRzKGIsYyl9LHA9ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIGI9YS5oYXNPd25Qcm9wZXJ0eShcIlNlZ21lbnRUZW1wbGF0ZVwiKSYmIWEuU2VnbWVudFRlbXBsYXRlLmhhc093blByb3BlcnR5KFwiU2VnbWVudFRpbWVsaW5lXCIpP1Eud2hlbihudWxsKTphLmhhc093blByb3BlcnR5KFwic2VnbWVudHNcIikmJm51bGwhPT1hLnNlZ21lbnRzP1Eud2hlbihhLnNlZ21lbnRzKTphLmhhc093blByb3BlcnR5KFwiU2VnbWVudFRlbXBsYXRlXCIpJiZhLlNlZ21lbnRUZW1wbGF0ZS5oYXNPd25Qcm9wZXJ0eShcIlNlZ21lbnRUaW1lbGluZVwiKT9tLmNhbGwodGhpcyxhLlNlZ21lbnRUZW1wbGF0ZSxhLlNlZ21lbnRUZW1wbGF0ZS5TZWdtZW50VGltZWxpbmUpOmEuaGFzT3duUHJvcGVydHkoXCJTZWdtZW50TGlzdFwiKT9uLmNhbGwodGhpcyxhLlNlZ21lbnRMaXN0KTpvLmNhbGwodGhpcyxhKX0scT1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9LTE7aWYoYiYmYi5sZW5ndGg+MClmb3IoZj1iLmxlbmd0aC0xO2Y+PTA7Zi0tKXtpZihjPWJbZl0sZD1jLnN0YXJ0VGltZS9jLnRpbWVzY2FsZSxlPWMuZHVyYXRpb24vYy50aW1lc2NhbGUsYStEYXNoLmRlcGVuZGVuY2llcy5EYXNoSGFuZGxlci5FUFNJTE9OPj1kJiZhLURhc2guZGVwZW5kZW5jaWVzLkRhc2hIYW5kbGVyLkVQU0lMT048PWQrZSl7Zz1mO2JyZWFrfS0xPT09ZyYmYS1EYXNoLmRlcGVuZGVuY2llcy5EYXNoSGFuZGxlci5FUFNJTE9OPmQrZSYmKGc9ZisxKX1yZXR1cm4tMT09PWcmJihjb25zb2xlLmxvZyhcIkNvdWxkbid0IGZpZ3VyZSBvdXQgYSB0aW1lIVwiKSxjb25zb2xlLmxvZyhcIlRpbWU6IFwiK2EpLGNvbnNvbGUubG9nKGIpKSxRLndoZW4oZyl9LHI9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9LTEsZj0xLGc9MTtpZighYi5oYXNPd25Qcm9wZXJ0eShcImR1cmF0aW9uXCIpKXRocm93XCJFeHBlY3RlZCAnZHVyYXRpb24nIGF0dHJpYnV0ZSBvbiBTZWdtZW50VGVtcGxhdGUhXCI7cmV0dXJuIGM9Yi5kdXJhdGlvbixiLmhhc093blByb3BlcnR5KFwidGltZXNjYWxlXCIpJiYoZj1iLnRpbWVzY2FsZSksYi5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0TnVtYmVyXCIpJiYoZz1iLnN0YXJ0TnVtYmVyKSxkPWMvZixlPU1hdGguZmxvb3IoYS9kKSxlKz1nLFEud2hlbihlKX0scz1mdW5jdGlvbihhLGIsZCxlKXt2YXIgayxsLG09bmV3IE1lZGlhUGxheWVyLnZvLlNlZ21lbnRSZXF1ZXN0LG49MSxvPTE7cmV0dXJuIGIuaGFzT3duUHJvcGVydHkoXCJ0aW1lc2NhbGVcIikmJihuPWIudGltZXNjYWxlKSxiLmhhc093blByb3BlcnR5KFwic3RhcnROdW1iZXJcIikmJihvPWIuc3RhcnROdW1iZXIpLGw9Yi5kdXJhdGlvbiphL24sbD1NYXRoLmZsb29yKGwpLGs9Yi5tZWRpYSxrPWYoayxhKSxrPWcoayxsKSxrPWgoayxkLmJhbmR3aWR0aCksaz1pKGssZC5pZCksbS5zdHJlYW1UeXBlPWMsbS50eXBlPVwiTWVkaWEgU2VnbWVudFwiLG0udXJsPWooayxkLkJhc2VVUkwpLG0uZHVyYXRpb249Yi5kdXJhdGlvbi9uLG0udGltZXNjYWxlPW4sbS5zdGFydFRpbWU9KGEtbykqYi5kdXJhdGlvbi9uLG0ucXVhbGl0eT1lLG0uaW5kZXg9YSxRLndoZW4obSl9LHQ9ZnVuY3Rpb24oYSxiLGQsZSl7aWYobnVsbD09PWJ8fHZvaWQgMD09PWIpcmV0dXJuIFEud2hlbihudWxsKTt2YXIgayxsPW5ldyBNZWRpYVBsYXllci52by5TZWdtZW50UmVxdWVzdDtyZXR1cm4gaz1qKGIubWVkaWEsZC5CYXNlVVJMKSxrPWYoayxhKSxrPWcoayxiLnN0YXJ0VGltZSksaz1oKGssZC5iYW5kd2lkdGgpLGs9aShrLGQuaWQpLGwuc3RyZWFtVHlwZT1jLGwudHlwZT1cIk1lZGlhIFNlZ21lbnRcIixsLnVybD1rLGwucmFuZ2U9Yi5tZWRpYVJhbmdlLGwuc3RhcnRUaW1lPWIuc3RhcnRUaW1lL2IudGltZXNjYWxlLGwuZHVyYXRpb249Yi5kdXJhdGlvbi9iLnRpbWVzY2FsZSxsLnRpbWVzY2FsZT1iLnRpbWVzY2FsZSxsLnF1YWxpdHk9ZSxsLmluZGV4PWEsUS53aGVuKGwpfSx1PWZ1bmN0aW9uKGEsYixjKXt2YXIgZixnLGgsaT1lKGIsYyksaj0hMSxrPXRoaXM7cmV0dXJuIGk/KGsuZGVidWcubG9nKFwiR2V0dGluZyB0aGUgcmVxdWVzdCBmb3IgdGltZTogXCIrYSksZj1RLmRlZmVyKCkscC5jYWxsKGssaSkudGhlbihmdW5jdGlvbihiKXt2YXIgYztpZihrLmRlYnVnLmxvZyhcIkdvdCBzZWdtZW50cy5cIiksay5kZWJ1Zy5sb2coYiksbnVsbD09PWIpe2lmKCFpLmhhc093blByb3BlcnR5KFwiU2VnbWVudFRlbXBsYXRlXCIpKXRocm93XCJFeHBlY3RlZCBTZWdtZW50VGVtcGxhdGUhXCI7aj0hMCxrLmRlYnVnLmxvZyhcIk5vIHNlZ21lbnRzIGZvdW5kLCBzbyB3ZSBtdXN0IGJlIHVzaW5nIGEgU2VnbWVudFRlbXBsYXRlLlwiKSxjPXIuY2FsbChrLGEsaS5TZWdtZW50VGVtcGxhdGUpfWVsc2Ugay5kZWJ1Zy5sb2coXCJHb3QgYSBsaXN0IG9mIHNlZ21lbnRzLCBzbyBkaWcgZGVlcGVyLlwiKSxpLnNlZ21lbnRzPWIsaj0hMSxjPXEuY2FsbChrLGEsYik7cmV0dXJuIGN9LGZ1bmN0aW9uKCl7Zi5yZWplY3QoKX0pLnRoZW4oZnVuY3Rpb24oYil7cmV0dXJuIGsuZGVidWcubG9nKFwiSW5kZXggZm9yIHRpbWUgXCIrYStcIiBpcyBcIitiKSxkPWIsbC5jYWxsKGssaSl9KS50aGVuKGZ1bmN0aW9uKGEpe3ZhciBjPW51bGw7cmV0dXJuIGsuZGVidWcubG9nKFwiU3RyZWFtIGZpbmlzaGVkPyBcIithKSxhPyhnPW5ldyBNZWRpYVBsYXllci52by5TZWdtZW50UmVxdWVzdCxnLmFjdGlvbj1nLkFDVElPTl9DT01QTEVURSxnLmluZGV4PWQsay5kZWJ1Zy5sb2coXCJTaWduYWwgY29tcGxldGUuXCIpLGsuZGVidWcubG9nKGcpLGYucmVzb2x2ZShnKSk6aj9jPXMuY2FsbChrLGQsaS5TZWdtZW50VGVtcGxhdGUsaSxiKTooaD1pLnNlZ21lbnRzW2RdLGM9dC5jYWxsKGssZCxoLGksYikpLGN9KS50aGVuKGZ1bmN0aW9uKGEpe2suZGVidWcubG9nKFwiR290IGEgcmVxdWVzdC5cIiksay5kZWJ1Zy5sb2coYSksZi5yZXNvbHZlKGEpfSksZi5wcm9taXNlKTpRLnJlamVjdChcIm5vIHJlcHJlc2VuYXRpb25cIil9LHY9ZnVuY3Rpb24oYSxiKXt2YXIgYyxmLGcsaD1lKGEsYiksaT10aGlzO2lmKCFoKXJldHVybiBRLnJlamVjdChcIm5vIHJlcHJlc2VuYXRpb25cIik7aWYoaS5kZWJ1Zy5sb2coXCJHZXR0aW5nIHRoZSBuZXh0IHJlcXVlc3QuXCIpLC0xPT09ZCl0aHJvd1wiWW91IG11c3QgY2FsbCBnZXRTZWdtZW50UmVxdWVzdEZvclRpbWUgZmlyc3QuXCI7cmV0dXJuIGQrPTEsaS5kZWJ1Zy5sb2coXCJOZXcgaW5kZXg6IFwiK2QpLGM9US5kZWZlcigpLGwuY2FsbChpLGgpLnRoZW4oZnVuY3Rpb24oYil7aS5kZWJ1Zy5sb2coXCJTdHJlYW0gZmluaXNoZWQ/IFwiK2IpLGI/KGY9bmV3IE1lZGlhUGxheWVyLnZvLlNlZ21lbnRSZXF1ZXN0LGYuYWN0aW9uPWYuQUNUSU9OX0NPTVBMRVRFLGYuaW5kZXg9ZCxpLmRlYnVnLmxvZyhcIlNpZ25hbCBjb21wbGV0ZS5cIiksaS5kZWJ1Zy5sb2coZiksYy5yZXNvbHZlKGYpKTpwLmNhbGwoaSxoKS50aGVuKGZ1bmN0aW9uKGIpe3ZhciBjO2lmKGkuZGVidWcubG9nKFwiR290IHNlZ21lbnRzLlwiKSxpLmRlYnVnLmxvZyhiKSxudWxsPT09Yil7aWYoIWguaGFzT3duUHJvcGVydHkoXCJTZWdtZW50VGVtcGxhdGVcIikpdGhyb3dcIkV4cGVjdGVkIFNlZ21lbnRUZW1wbGF0ZSFcIjtpLmRlYnVnLmxvZyhcIk5vIHNlZ21lbnRzIGZvdW5kLCBzbyB3ZSBtdXN0IGJlIHVzaW5nIGEgU2VnbWVudFRlbXBsYXRlLlwiKSxjPXMuY2FsbChpLGQsaC5TZWdtZW50VGVtcGxhdGUsaCxhKX1lbHNlIGguc2VnbWVudHM9YixnPWguc2VnbWVudHNbZF0sYz10LmNhbGwoaSxkLGcsaCxhKTtyZXR1cm4gY30sZnVuY3Rpb24oKXtjLnJlamVjdCgpfSkudGhlbihmdW5jdGlvbihhKXtpLmRlYnVnLmxvZyhcIkdvdCBhIHJlcXVlc3QuXCIpLGkuZGVidWcubG9nKGEpLGMucmVzb2x2ZShhKX0pfSksYy5wcm9taXNlfSx3PWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBmLGcsaCxpPXRoaXMsaj1lKGEsYiksaz1NYXRoLm1heChjLWQsMCksbD1RLmRlZmVyKCksbT0wLG49MTtyZXR1cm4gaj8ocC5jYWxsKGksaikudGhlbihmdW5jdGlvbihhKXtpZihudWxsPT09YXx8dm9pZCAwPT09YSl7aWYoIWouaGFzT3duUHJvcGVydHkoXCJTZWdtZW50VGVtcGxhdGVcIikpdGhyb3dcIkV4cGVjdGVkIFNlZ21lbnRUZW1wbGF0ZSFcIjtqLlNlZ21lbnRUZW1wbGF0ZS5oYXNPd25Qcm9wZXJ0eShcInRpbWVzY2FsZVwiKSYmKG49ai5TZWdtZW50VGVtcGxhdGUudGltZXNjYWxlKSxoPWouU2VnbWVudFRlbXBsYXRlLmR1cmF0aW9uLGY9aC9ufWVsc2UgZz1hWzBdLGcuaGFzT3duUHJvcGVydHkoXCJ0aW1lc2NhbGVcIikmJihuPWcudGltZXNjYWxlKSxoPWcuZHVyYXRpb24sZj1oL247bT1NYXRoLmNlaWwoay9mKSxsLnJlc29sdmUobSl9LGZ1bmN0aW9uKCl7bC5yZXNvbHZlKDApfSksbC5wcm9taXNlKTpRLnJlamVjdChcIm5vIHJlcHJlc2VuYXRpb25cIil9LHg9ZnVuY3Rpb24oYixjKXt2YXIgZixnLGgsaSxqPXRoaXMsaz1lKGIsYyksbD0hMSxtPTEsbj0xLG89US5kZWZlcigpO3JldHVybiBrPyhnPWQsMD5nJiYobD1hLGc9MCkscC5jYWxsKGosaykudGhlbihmdW5jdGlvbihhKXtpZihudWxsPT09YXx8dm9pZCAwPT09YSl7aWYoIWsuaGFzT3duUHJvcGVydHkoXCJTZWdtZW50VGVtcGxhdGVcIikpdGhyb3dcIkV4cGVjdGVkIFNlZ21lbnRUZW1wbGF0ZSFcIjtpPWsuU2VnbWVudFRlbXBsYXRlLmR1cmF0aW9uLGsuU2VnbWVudFRlbXBsYXRlLmhhc093blByb3BlcnR5KFwidGltZXNjYWxlXCIpJiYobT1rLlNlZ21lbnRUZW1wbGF0ZS50aW1lc2NhbGUpLGsuU2VnbWVudFRlbXBsYXRlLmhhc093blByb3BlcnR5KFwic3RhcnROdW1iZXJcIikmJihuPWsuU2VnbWVudFRlbXBsYXRlLnN0YXJ0TnVtYmVyKSxmPWkvbSpNYXRoLm1heChnLW4sMCl9ZWxzZShsfHxnPj1hLmxlbmd0aCkmJihnPWEubGVuZ3RoLTEpLGg9YVtnXS5zdGFydFRpbWUsaT1hW2ddLmR1cmF0aW9uLGFbZ10uaGFzT3duUHJvcGVydHkoXCJ0aW1lc2NhbGVcIikmJihtPWFbZ10udGltZXNjYWxlKSxmPWgvbTtvLnJlc29sdmUoZil9LGZ1bmN0aW9uKCl7by5yZWplY3QoKX0pLG8ucHJvbWlzZSk6US5yZWplY3QoXCJubyByZXByZXNlbmF0aW9uXCIpfTtyZXR1cm57ZGVidWc6dm9pZCAwLGJhc2VVUkxFeHQ6dm9pZCAwLG1hbmlmZXN0TW9kZWw6dm9pZCAwLG1hbmlmZXN0RXh0OnZvaWQgMCxlcnJIYW5kbGVyOnZvaWQgMCxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LHNldFR5cGU6ZnVuY3Rpb24oYSl7Yz1hfSxnZXRJc0xpdmU6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sc2V0SXNMaXZlOmZ1bmN0aW9uKGIpe2E9Yn0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gYn0sc2V0RHVyYXRpb246ZnVuY3Rpb24oYSl7Yj1hfSxnZXRJbml0UmVxdWVzdDprLGdldFNlZ21lbnRSZXF1ZXN0Rm9yVGltZTp1LGdldE5leHRTZWdtZW50UmVxdWVzdDp2LGdldEN1cnJlbnRUaW1lOngsZ2V0U2VnbWVudENvdW50Rm9yRHVyYXRpb246d319LERhc2guZGVwZW5kZW5jaWVzLkRhc2hIYW5kbGVyLkVQU0lMT049LjAwMyxEYXNoLmRlcGVuZGVuY2llcy5EYXNoSGFuZGxlci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkRhc2guZGVwZW5kZW5jaWVzLkRhc2hIYW5kbGVyfSxEYXNoLmRlcGVuZGVuY2llcy5EYXNoTWFuaWZlc3RFeHRlbnNpb25zPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCJ9LERhc2guZGVwZW5kZW5jaWVzLkRhc2hNYW5pZmVzdEV4dGVuc2lvbnMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpEYXNoLmRlcGVuZGVuY2llcy5EYXNoTWFuaWZlc3RFeHRlbnNpb25zLGdldElzQXVkaW86ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGIsYyxkLGU9YS5Db250ZW50Q29tcG9uZW50X2FzQXJyYXksZj0hMSxnPSExO2lmKGUpZm9yKGI9MCxjPWUubGVuZ3RoO2M+YjtiKz0xKVwiYXVkaW9cIj09PWVbYl0uY29udGVudFR5cGUmJihmPSEwLGc9ITApO2lmKGEuaGFzT3duUHJvcGVydHkoXCJtaW1lVHlwZVwiKSYmKGY9LTEhPT1hLm1pbWVUeXBlLmluZGV4T2YoXCJhdWRpb1wiKSxnPSEwKSwhZylmb3IoYj0wLGM9YS5SZXByZXNlbnRhdGlvbl9hc0FycmF5Lmxlbmd0aDshZyYmYz5iOylkPWEuUmVwcmVzZW50YXRpb25fYXNBcnJheVtiXSxkLmhhc093blByb3BlcnR5KFwibWltZVR5cGVcIikmJihmPS0xIT09ZC5taW1lVHlwZS5pbmRleE9mKFwiYXVkaW9cIiksZz0hMCksYis9MTtyZXR1cm4gZiYmKGEudHlwZT1cImF1ZGlvXCIpLFEud2hlbihmKX0sZ2V0SXNWaWRlbzpmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjt2YXIgYixjLGQsZT1hLkNvbnRlbnRDb21wb25lbnRfYXNBcnJheSxmPSExLGc9ITE7aWYoZSlmb3IoYj0wLGM9ZS5sZW5ndGg7Yz5iO2IrPTEpXCJ2aWRlb1wiPT09ZVtiXS5jb250ZW50VHlwZSYmKGY9ITAsZz0hMCk7aWYoYS5oYXNPd25Qcm9wZXJ0eShcIm1pbWVUeXBlXCIpJiYoZj0tMSE9PWEubWltZVR5cGUuaW5kZXhPZihcInZpZGVvXCIpLGc9ITApLCFnKWZvcihiPTAsYz1hLlJlcHJlc2VudGF0aW9uX2FzQXJyYXkubGVuZ3RoOyFnJiZjPmI7KWQ9YS5SZXByZXNlbnRhdGlvbl9hc0FycmF5W2JdLGQuaGFzT3duUHJvcGVydHkoXCJtaW1lVHlwZVwiKSYmKGY9LTEhPT1kLm1pbWVUeXBlLmluZGV4T2YoXCJ2aWRlb1wiKSxnPSEwKSxiKz0xO3JldHVybiBmJiYoYS50eXBlPVwidmlkZW9cIiksUS53aGVuKGYpfSxnZXRJc1RleHQ6ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGIsYyxkLGU9YS5Db250ZW50Q29tcG9uZW50X2FzQXJyYXksZj0hMSxnPSExO2lmKGUpZm9yKGI9MCxjPWUubGVuZ3RoO2M+YjtiKz0xKVwidGV4dFwiPT09ZVtiXS5jb250ZW50VHlwZSYmKGY9ITAsZz0hMCk7aWYoYS5oYXNPd25Qcm9wZXJ0eShcIm1pbWVUeXBlXCIpJiYoZj0tMSE9PWEubWltZVR5cGUuaW5kZXhPZihcInRleHRcIiksZz0hMCksIWcpZm9yKGI9MCxjPWEuUmVwcmVzZW50YXRpb25fYXNBcnJheS5sZW5ndGg7IWcmJmM+YjspZD1hLlJlcHJlc2VudGF0aW9uX2FzQXJyYXlbYl0sZC5oYXNPd25Qcm9wZXJ0eShcIm1pbWVUeXBlXCIpJiYoZj0tMSE9PWQubWltZVR5cGUuaW5kZXhPZihcInRleHRcIiksZz0hMCksYis9MTtyZXR1cm4gUS53aGVuKGYpfSxnZXRJc1RleHRUcmFjazpmdW5jdGlvbihhKXtyZXR1cm5cInRleHQvdnR0XCI9PT1hfHxcImFwcGxpY2F0aW9uL3R0bWwreG1sXCI9PT1hfSxnZXRJc01haW46ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtyZXR1cm4gUS53aGVuKCExKX0scHJvY2Vzc0FkYXB0YXRpb246ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIHZvaWQgMCE9PWEuUmVwcmVzZW50YXRpb25fYXNBcnJheSYmbnVsbCE9PWEuUmVwcmVzZW50YXRpb25fYXNBcnJheSYmYS5SZXByZXNlbnRhdGlvbl9hc0FycmF5LnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5iYW5kd2lkdGgtYi5iYW5kd2lkdGh9KSxhfSxnZXREYXRhRm9ySWQ6ZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkLGUsZj1iLlBlcmlvZF9hc0FycmF5W2NdLkFkYXB0YXRpb25TZXRfYXNBcnJheTtmb3IoZD0wLGU9Zi5sZW5ndGg7ZT5kO2QrPTEpaWYoZltkXS5oYXNPd25Qcm9wZXJ0eShcImlkXCIpJiZmW2RdLmlkPT09YSlyZXR1cm4gUS53aGVuKGZbZF0pO3JldHVybiBRLndoZW4obnVsbCl9LGdldERhdGFGb3JJbmRleDpmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9Yi5QZXJpb2RfYXNBcnJheVtjXS5BZGFwdGF0aW9uU2V0X2FzQXJyYXk7cmV0dXJuIFEud2hlbihkW2FdKX0sZ2V0RGF0YUluZGV4OmZ1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZCxlLGY9Yi5QZXJpb2RfYXNBcnJheVtjXS5BZGFwdGF0aW9uU2V0X2FzQXJyYXk7Zm9yKGQ9MCxlPWYubGVuZ3RoO2U+ZDtkKz0xKWlmKGZbZF09PT1hKXJldHVybiBRLndoZW4oZCk7cmV0dXJuIFEud2hlbigtMSl9LGdldFZpZGVvRGF0YTpmdW5jdGlvbihhLGIpe1widXNlIHN0cmljdFwiO3ZhciBjLGQsZT10aGlzLGY9YS5QZXJpb2RfYXNBcnJheVtiXS5BZGFwdGF0aW9uU2V0X2FzQXJyYXksZz1RLmRlZmVyKCksaD1bXTtmb3IoYz0wLGQ9Zi5sZW5ndGg7ZD5jO2MrPTEpaC5wdXNoKHRoaXMuZ2V0SXNWaWRlbyhmW2NdKSk7cmV0dXJuIFEuYWxsKGgpLnRoZW4oZnVuY3Rpb24oYSl7dmFyIGI9ITE7Zm9yKGM9MCxkPWEubGVuZ3RoO2Q+YztjKz0xKWFbY109PT0hMCYmKGI9ITAsZy5yZXNvbHZlKGUucHJvY2Vzc0FkYXB0YXRpb24oZltjXSkpKTtifHxnLnJlc29sdmUobnVsbCl9KSxnLnByb21pc2V9LGdldFRleHREYXRhOmZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGMsZCxlPXRoaXMsZj1hLlBlcmlvZF9hc0FycmF5W2JdLkFkYXB0YXRpb25TZXRfYXNBcnJheSxnPVEuZGVmZXIoKSxoPVtdO2ZvcihjPTAsZD1mLmxlbmd0aDtkPmM7Yys9MSloLnB1c2godGhpcy5nZXRJc1RleHQoZltjXSkpO3JldHVybiBRLmFsbChoKS50aGVuKGZ1bmN0aW9uKGEpe3ZhciBiPSExO2ZvcihjPTAsZD1hLmxlbmd0aDtkPmM7Yys9MSlhW2NdPT09ITAmJihiPSEwLGcucmVzb2x2ZShlLnByb2Nlc3NBZGFwdGF0aW9uKGZbY10pKSk7Ynx8Zy5yZXNvbHZlKG51bGwpfSksZy5wcm9taXNlfSxnZXRBdWRpb0RhdGFzOmZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGMsZCxlPXRoaXMsZj1hLlBlcmlvZF9hc0FycmF5W2JdLkFkYXB0YXRpb25TZXRfYXNBcnJheSxnPVEuZGVmZXIoKSxoPVtdO2ZvcihjPTAsZD1mLmxlbmd0aDtkPmM7Yys9MSloLnB1c2godGhpcy5nZXRJc0F1ZGlvKGZbY10pKTtyZXR1cm4gUS5hbGwoaCkudGhlbihmdW5jdGlvbihhKXt2YXIgYj1bXTtmb3IoYz0wLGQ9YS5sZW5ndGg7ZD5jO2MrPTEpYVtjXT09PSEwJiZiLnB1c2goZS5wcm9jZXNzQWRhcHRhdGlvbihmW2NdKSk7Zy5yZXNvbHZlKGIpfSksZy5wcm9taXNlfSxnZXRQcmltYXJ5QXVkaW9EYXRhOmZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGMsZCxlPVEuZGVmZXIoKSxmPVtdLGc9dGhpcztyZXR1cm4gdGhpcy5nZXRBdWRpb0RhdGFzKGEsYikudGhlbihmdW5jdGlvbihhKXtmb3IoYSYmMCE9PWEubGVuZ3RofHxlLnJlc29sdmUobnVsbCksYz0wLGQ9YS5sZW5ndGg7ZD5jO2MrPTEpZi5wdXNoKGcuZ2V0SXNNYWluKGFbY10pKTtRLmFsbChmKS50aGVuKGZ1bmN0aW9uKGIpe3ZhciBmPSExO2ZvcihjPTAsZD1iLmxlbmd0aDtkPmM7Yys9MSliW2NdPT09ITAmJihmPSEwLGUucmVzb2x2ZShnLnByb2Nlc3NBZGFwdGF0aW9uKGFbY10pKSk7Znx8ZS5yZXNvbHZlKGFbMF0pfSl9KSxlLnByb21pc2V9LGdldENvZGVjOmZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO3ZhciBiPWEuUmVwcmVzZW50YXRpb25fYXNBcnJheVswXSxjPWIubWltZVR5cGUrJztjb2RlY3M9XCInK2IuY29kZWNzKydcIic7cmV0dXJuIFEud2hlbihjKX0sZ2V0TWltZVR5cGU6ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIFEud2hlbihhLlJlcHJlc2VudGF0aW9uX2FzQXJyYXlbMF0ubWltZVR5cGUpfSxnZXRLSUQ6ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGEmJmEuaGFzT3duUHJvcGVydHkoXCJjZW5jOmRlZmF1bHRfS0lEXCIpP2FbXCJjZW5jOmRlZmF1bHRfS0lEXCJdOm51bGx9LGdldENvbnRlbnRQcm90ZWN0aW9uRGF0YTpmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtyZXR1cm4gYSYmYS5oYXNPd25Qcm9wZXJ0eShcIkNvbnRlbnRQcm90ZWN0aW9uX2FzQXJyYXlcIikmJjAhPT1hLkNvbnRlbnRQcm90ZWN0aW9uX2FzQXJyYXkubGVuZ3RoP1Eud2hlbihhLkNvbnRlbnRQcm90ZWN0aW9uX2FzQXJyYXkpOlEud2hlbihudWxsKX0sZ2V0U2VnbWVudEluZm9Gb3I6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoXCJTZWdtZW50QmFzZVwiKT9hLlNlZ21lbnRCYXNlOmEuaGFzT3duUHJvcGVydHkoXCJTZWdtZW50TGlzdFwiKT9hLlNlZ21lbnRMaXN0OmEuaGFzT3duUHJvcGVydHkoXCJTZWdtZW50VGVtcGxhdGVcIik/YS5TZWdtZW50VGVtcGxhdGU6bnVsbH0sZ2V0TGl2ZU9mZnNldDpmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjt2YXIgYj0xNTtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShcInN1Z2dlc3RlZFByZXNlbnRhdGlvbkRlbGF5XCIpJiYoYj1hLnN1Z2dlc3RlZFByZXNlbnRhdGlvbkRlbGF5KSxRLndoZW4oYil9LGdldExpdmVTdGFydDpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT0wLGY9MSxnPTEsaD1udWxsLGk9bnVsbDtyZXR1cm4gZD1hLlBlcmlvZF9hc0FycmF5W2JdLkFkYXB0YXRpb25TZXRfYXNBcnJheVsxXS5SZXByZXNlbnRhdGlvbl9hc0FycmF5WzBdLGQuaGFzT3duUHJvcGVydHkoXCJTZWdtZW50TGlzdFwiKT8oaD1kLlNlZ21lbnRMaXN0LGguaGFzT3duUHJvcGVydHkoXCJzdGFydE51bWJlclwiKSYmKGY9TWF0aC5tYXgoaC5zdGFydE51bWJlciwxKSksaC5oYXNPd25Qcm9wZXJ0eShcInRpbWVzY2FsZVwiKSYmKGc9aC50aW1lc2NhbGUpLGM9aC5kdXJhdGlvbixlPShmLTEpKmMvZyk6ZC5oYXNPd25Qcm9wZXJ0eShcIlNlZ21lbnRUZW1wbGF0ZVwiKSYmKGk9ZC5TZWdtZW50VGVtcGxhdGUsaS5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0TnVtYmVyXCIpJiYoZj1NYXRoLm1heChpLnN0YXJ0TnVtYmVyLDEpKSxpLmhhc093blByb3BlcnR5KFwidGltZXNjYWxlXCIpJiYoZz1pLnRpbWVzY2FsZSksYz1pLmR1cmF0aW9uLGU9aS5oYXNPd25Qcm9wZXJ0eShcIlNlZ21lbnRUaW1lbGluZVwiKT9pLlNlZ21lbnRUaW1lbGluZS5TX2FzQXJyYXlbMF0udC9nOihmLTEpKmMvZyksUS53aGVuKGUpfSxnZXRMaXZlRWRnZTpmdW5jdGlvbihhLGIpe1widXNlIHN0cmljdFwiO3ZhciBjLGQ9dGhpcyxlPVEuZGVmZXIoKSxmPTAsZz1uZXcgRGF0ZSxoPWEuYXZhaWxhYmlsaXR5U3RhcnRUaW1lO3JldHVybiBkLmdldExpdmVPZmZzZXQoYSkudGhlbihmdW5jdGlvbihpKXthLmhhc093blByb3BlcnR5KFwiYXZhaWxhYmlsaXR5RW5kVGltZVwiKT8oYz1hLmF2YWlsYWJpbGl0eUVuZFRpbWUsZj0oYy5nZXRUaW1lKCktaC5nZXRUaW1lKCkpLzFlMyk6Zj0oZy5nZXRUaW1lKCktaC5nZXRUaW1lKCkpLzFlMyxkLmdldExpdmVTdGFydChhLGIpLnRoZW4oZnVuY3Rpb24oYSl7Zis9YSxmLT1pLGUucmVzb2x2ZShmKX0pfSksZS5wcm9taXNlfSxnZXRQcmVzZW50YXRpb25PZmZzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9dGhpcyxmPVEuZGVmZXIoKSxnPTAsaD0xO3JldHVybiBlLmdldFJlcHJlc2VudGF0aW9uRm9yKGEsYikudGhlbihmdW5jdGlvbihhKXtkPWUuZ2V0U2VnbWVudEluZm9Gb3IoYSksbnVsbCE9PWQmJnZvaWQgMCE9PWQmJmQuaGFzT3duUHJvcGVydHkoXCJwcmVzZW50YXRpb25UaW1lT2Zmc2V0XCIpJiYoYz1kLnByZXNlbnRhdGlvblRpbWVPZmZzZXQsZC5oYXNPd25Qcm9wZXJ0eShcInRpbWVzY2FsZVwiKSYmKGg9ZC50aW1lc2NhbGUpLGc9Yy9oKSxmLnJlc29sdmUoZyl9KSxmLnByb21pc2V9LGdldElzTGl2ZTpmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjt2YXIgYj0hMSxjPVwiZHluYW1pY1wiO3JldHVybiBhLmhhc093blByb3BlcnR5KFwidHlwZVwiKSYmKGI9YS50eXBlPT09YyksYn0sZ2V0SXNEVlI6ZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjt2YXIgYyxkO3JldHVybiBjPSFpc05hTihhLnRpbWVTaGlmdEJ1ZmZlckRlcHRoKSxkPWImJmMsUS53aGVuKGQpfSxnZXRJc09uRGVtYW5kOmZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO3ZhciBiPSExO3JldHVybiBhLnByb2ZpbGVzJiZhLnByb2ZpbGVzLmxlbmd0aD4wJiYoYj0tMSE9PWEucHJvZmlsZXMuaW5kZXhPZihcInVybjptcGVnOmRhc2g6cHJvZmlsZTppc29mZi1vbi1kZW1hbmQ6MjAxMVwiKSksUS53aGVuKGIpfSxnZXREdXJhdGlvbjpmdW5jdGlvbihhLGIpe1widXNlIHN0cmljdFwiO3ZhciBjPTAvMDtyZXR1cm4gYj9jPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTphLm1lZGlhUHJlc2VudGF0aW9uRHVyYXRpb24/Yz1hLm1lZGlhUHJlc2VudGF0aW9uRHVyYXRpb246YS5hdmFpbGFiaWxpdHlFbmRUaW1lJiZhLmF2YWlsYWJpbGl0eVN0YXJ0VGltZSYmKGM9YS5hdmFpbGFiaWxpdHlFbmRUaW1lLmdldFRpbWUoKS1hLmF2YWlsYWJpbGl0eVN0YXJ0VGltZS5nZXRUaW1lKCkpLFEud2hlbihjKX0sZ2V0RHVyYXRpb25Gb3JQZXJpb2Q6ZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPTAvMDtyZXR1cm4gYz9kPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTpiLlBlcmlvZF9hc0FycmF5Lmxlbmd0aD4xJiZ2b2lkIDAhPT1iLlBlcmlvZF9hc0FycmF5W2FdLmR1cmF0aW9uP2Q9Yi5QZXJpb2RfYXNBcnJheVthXS5kdXJhdGlvbjpiLm1lZGlhUHJlc2VudGF0aW9uRHVyYXRpb24/ZD1iLm1lZGlhUHJlc2VudGF0aW9uRHVyYXRpb246Yi5hdmFpbGFiaWxpdHlFbmRUaW1lJiZiLmF2YWlsYWJpbGl0eVN0YXJ0VGltZSYmKGQ9Yi5hdmFpbGFiaWxpdHlFbmRUaW1lLmdldFRpbWUoKS1iLmF2YWlsYWJpbGl0eVN0YXJ0VGltZS5nZXRUaW1lKCkpLFEud2hlbihkKX0sZ2V0QmFuZHdpZHRoOmZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO3JldHVybiBRLndoZW4oYS5iYW5kd2lkdGgpfSxnZXRSZWZyZXNoRGVsYXk6ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGI9MC8wO3JldHVybiBhLmhhc093blByb3BlcnR5KFwibWluaW11bVVwZGF0ZVBlcmlvZFwiKSYmKGI9cGFyc2VGbG9hdChhLm1pbmltdW1VcGRhdGVQZXJpb2QpKSxRLndoZW4oYil9LGdldFJlcHJlc2VudGF0aW9uQ291bnQ6ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIFEud2hlbihhLlJlcHJlc2VudGF0aW9uX2FzQXJyYXkubGVuZ3RoKX0sZ2V0UmVwcmVzZW50YXRpb25Gb3I6ZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjtyZXR1cm4gUS53aGVuKGIuUmVwcmVzZW50YXRpb25fYXNBcnJheVthXSl9LGdldFBlcmlvZENvdW50OmZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO3JldHVybiBRLndoZW4oYS5QZXJpb2RfYXNBcnJheS5sZW5ndGgpfSxnZXRUaW1lc3RhbXBPZmZzZXRGb3JQZXJpb2Q6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZj10aGlzLGc9US5kZWZlcigpO3JldHVybiBmLmdldFByZXNlbnRhdGlvbk9mZnNldChjLGQpLnRoZW4oZnVuY3Rpb24oYyl7Zi5nZXRQZXJpb2RTdGFydChiLGEpLnRoZW4oZnVuY3Rpb24oYSl7ZT1hLWMsZy5yZXNvbHZlKGUpfSl9KSxnLnByb21pc2V9LGdldFBlcmlvZFN0YXJ0OmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPXRoaXMsZj1lLmdldElzTGl2ZShhKSxnPW51bGwsaD1udWxsLGk9bnVsbDtmb3IoYz0wO2I+PWM7Yys9MSlnPWEuUGVyaW9kX2FzQXJyYXlbY10sZy5oYXNPd25Qcm9wZXJ0eShcInN0YXJ0XCIpP2Q9Zy5zdGFydDpudWxsIT09aCYmbnVsbCE9PWk/ZD1oK2k6MCE9PWN8fGZ8fChkPTApLGcuaGFzT3duUHJvcGVydHkoXCJkdXJhdGlvblwiKSYmKGk9Zy5kdXJhdGlvbiksaD1kO3JldHVybiBRLndoZW4oZCl9fSxEYXNoLmRlcGVuZGVuY2llcy5EYXNoTWV0cmljc0V4dGVuc2lvbnM9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYT1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7Zm9yKGg9MDtoPGEubGVuZ3RoO2grPTEpZm9yKGM9YVtoXSxlPWMuQWRhcHRhdGlvblNldF9hc0FycmF5LGk9MDtpPGUubGVuZ3RoO2krPTEpZm9yKGQ9ZVtpXSxnPWQuUmVwcmVzZW50YXRpb25fYXNBcnJheSxqPTA7ajxnLmxlbmd0aDtqKz0xKWlmKGY9Z1tqXSxiPT09Zi5pZClyZXR1cm4gajtyZXR1cm4tMX0sYj1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7Zm9yKGg9MDtoPGEubGVuZ3RoO2grPTEpZm9yKGM9YVtoXSxlPWMuQWRhcHRhdGlvblNldF9hc0FycmF5LGk9MDtpPGUubGVuZ3RoO2krPTEpZm9yKGQ9ZVtpXSxnPWQuUmVwcmVzZW50YXRpb25fYXNBcnJheSxqPTA7ajxnLmxlbmd0aDtqKz0xKWlmKGY9Z1tqXSxiPT09Zi5pZClyZXR1cm4gZjtyZXR1cm4gbnVsbH0sYz1mdW5jdGlvbihhLGIpe3ZhciBjPSExO3JldHVyblwidmlkZW9cIj09PWI/KHRoaXMubWFuaWZlc3RFeHQuZ2V0SXNWaWRlbyhhKSxcInZpZGVvXCI9PT1hLnR5cGUmJihjPSEwKSk6XCJhdWRpb1wiPT09Yj8odGhpcy5tYW5pZmVzdEV4dC5nZXRJc0F1ZGlvKGEpLFwiYXVkaW9cIj09PWEudHlwZSYmKGM9ITApKTpjPSExLGN9LGQ9ZnVuY3Rpb24oYSxiKXt2YXIgZCxlLGYsZyxoLGk7Zm9yKGg9MDtoPGEubGVuZ3RoO2grPTEpZm9yKGQ9YVtoXSxmPWQuQWRhcHRhdGlvblNldF9hc0FycmF5LGk9MDtpPGYubGVuZ3RoO2krPTEpaWYoZT1mW2ldLGc9ZS5SZXByZXNlbnRhdGlvbl9hc0FycmF5LGMuY2FsbCh0aGlzLGUsYikpcmV0dXJuIGcubGVuZ3RoO3JldHVybi0xfSxlPWZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWQubWFuaWZlc3RNb2RlbC5nZXRWYWx1ZSgpLGY9ZS5QZXJpb2RfYXNBcnJheTtyZXR1cm4gYz1iLmNhbGwoZCxmLGEpLG51bGw9PT1jP251bGw6Yy5iYW5kd2lkdGh9LGY9ZnVuY3Rpb24oYil7dmFyIGMsZD10aGlzLGU9ZC5tYW5pZmVzdE1vZGVsLmdldFZhbHVlKCksZj1lLlBlcmlvZF9hc0FycmF5O3JldHVybiBjPWEuY2FsbChkLGYsYil9LGc9ZnVuY3Rpb24oYSl7dmFyIGIsYz10aGlzLGU9Yy5tYW5pZmVzdE1vZGVsLmdldFZhbHVlKCksZj1lLlBlcmlvZF9hc0FycmF5O3JldHVybiBiPWQuY2FsbCh0aGlzLGYsYSl9LGg9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7dmFyIGIsYyxkLGU9YS5SZXBTd2l0Y2hMaXN0O3JldHVybiBudWxsPT09ZXx8ZS5sZW5ndGg8PTA/bnVsbDooYj1lLmxlbmd0aCxjPWItMSxkPWVbY10pfSxpPWZ1bmN0aW9uKGEpe2lmKG51bGw9PT1hKXJldHVybiBudWxsO3ZhciBiLGMsZCxlPWEuQnVmZmVyTGV2ZWw7cmV0dXJuIG51bGw9PT1lfHxlLmxlbmd0aDw9MD9udWxsOihiPWUubGVuZ3RoLGM9Yi0xLGQ9ZVtjXSl9LGo9ZnVuY3Rpb24oYSl7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7dmFyIGIsYyxkLGU9YS5IdHRwTGlzdDtyZXR1cm4gbnVsbD09PWV8fGUubGVuZ3RoPD0wP251bGw6KGI9ZS5sZW5ndGgsYz1iLTEsZD1lW2NdKX0saz1mdW5jdGlvbihhKXtpZihudWxsPT09YSlyZXR1cm4gbnVsbDt2YXIgYixjLGQsZT1hLkRyb3BwZWRGcmFtZXM7cmV0dXJuIG51bGw9PT1lfHxlLmxlbmd0aDw9MD9udWxsOihiPWUubGVuZ3RoLGM9Yi0xLGQ9ZVtjXSl9O3JldHVybnttYW5pZmVzdE1vZGVsOnZvaWQgMCxtYW5pZmVzdEV4dDp2b2lkIDAsZ2V0QmFuZHdpZHRoRm9yUmVwcmVzZW50YXRpb246ZSxnZXRJbmRleEZvclJlcHJlc2VudGF0aW9uOmYsZ2V0TWF4SW5kZXhGb3JCdWZmZXJUeXBlOmcsZ2V0Q3VycmVudFJlcHJlc2VudGF0aW9uU3dpdGNoOmgsZ2V0Q3VycmVudEJ1ZmZlckxldmVsOmksZ2V0Q3VycmVudEh0dHBSZXF1ZXN0OmosZ2V0Q3VycmVudERyb3BwZWRGcmFtZXM6a319LERhc2guZGVwZW5kZW5jaWVzLkRhc2hNZXRyaWNzRXh0ZW5zaW9ucy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkRhc2guZGVwZW5kZW5jaWVzLkRhc2hNZXRyaWNzRXh0ZW5zaW9uc30sRGFzaC5kZXBlbmRlbmNpZXMuRGFzaFBhcnNlcj1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhPTMxNTM2ZTMsYj0yNTkyZTMsYz04NjQwMCxkPTM2MDAsZT02MCxmPS9eUCgoW1xcZC5dKilZKT8oKFtcXGQuXSopTSk/KChbXFxkLl0qKUQpP1QoKFtcXGQuXSopSCk/KChbXFxkLl0qKU0pPygoW1xcZC5dKilTKT8vLGc9L14oXFxkezR9XFwtXFxkXFxkXFwtXFxkXFxkKFt0VF1bXFxkOlxcLl0qKT8pKFt6Wl18KFsrXFwtXSkoXFxkXFxkKTooXFxkXFxkKSk/JC8saD0vXlstK10/WzAtOV0rWy5dP1swLTldKihbZUVdWy0rXT9bMC05XSspPyQvLGk9W3t0eXBlOlwiZHVyYXRpb25cIix0ZXN0OmZ1bmN0aW9uKGEpe3JldHVybiBmLnRlc3QoYSl9LGNvbnZlcnRlcjpmdW5jdGlvbihnKXt2YXIgaD1mLmV4ZWMoZyk7cmV0dXJuIHBhcnNlRmxvYXQoaFsyXXx8MCkqYStwYXJzZUZsb2F0KGhbNF18fDApKmIrcGFyc2VGbG9hdChoWzZdfHwwKSpjK3BhcnNlRmxvYXQoaFs4XXx8MCkqZCtwYXJzZUZsb2F0KGhbMTBdfHwwKSplK3BhcnNlRmxvYXQoaFsxMl18fDApfX0se3R5cGU6XCJkYXRldGltZVwiLHRlc3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGcudGVzdChhKX0sY29udmVydGVyOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgRGF0ZShhKX19LHt0eXBlOlwibnVtZXJpY1wiLHRlc3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGgudGVzdChhKX0sY29udmVydGVyOmZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUZsb2F0KGEpfX1dLGo9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZDtyZXR1cm4gZD1be25hbWU6XCJwcm9maWxlc1wiLG1lcmdlOiExfSx7bmFtZTpcIndpZHRoXCIsbWVyZ2U6ITF9LHtuYW1lOlwiaGVpZ2h0XCIsbWVyZ2U6ITF9LHtuYW1lOlwic2FyXCIsbWVyZ2U6ITF9LHtuYW1lOlwiZnJhbWVSYXRlXCIsbWVyZ2U6ITF9LHtuYW1lOlwiYXVkaW9TYW1wbGluZ1JhdGVcIixtZXJnZTohMX0se25hbWU6XCJtaW1lVHlwZVwiLG1lcmdlOiExfSx7bmFtZTpcInNlZ21lbnRQcm9maWxlc1wiLG1lcmdlOiExfSx7bmFtZTpcImNvZGVjc1wiLG1lcmdlOiExfSx7bmFtZTpcIm1heGltdW1TQVBQZXJpb2RcIixtZXJnZTohMX0se25hbWU6XCJzdGFydHNXaXRoU2FwXCIsbWVyZ2U6ITF9LHtuYW1lOlwibWF4UGxheW91dFJhdGVcIixtZXJnZTohMX0se25hbWU6XCJjb2RpbmdEZXBlbmRlbmN5XCIsbWVyZ2U6ITF9LHtuYW1lOlwic2NhblR5cGVcIixtZXJnZTohMX0se25hbWU6XCJGcmFtZVBhY2tpbmdcIixtZXJnZTohMH0se25hbWU6XCJBdWRpb0NoYW5uZWxDb25maWd1cmF0aW9uXCIsbWVyZ2U6ITB9LHtuYW1lOlwiQ29udGVudFByb3RlY3Rpb25cIixtZXJnZTohMH1dLGE9e30sYS5uYW1lPVwiQWRhcHRhdGlvblNldFwiLGEuaXNSb290PSExLGEuaXNBcnJheT0hMCxhLnBhcmVudD1udWxsLGEuY2hpbGRyZW49W10sYS5wcm9wZXJ0aWVzPWQsYj17fSxiLm5hbWU9XCJSZXByZXNlbnRhdGlvblwiLGIuaXNSb290PSExLGIuaXNBcnJheT0hMCxiLnBhcmVudD1hLGIuY2hpbGRyZW49W10sYi5wcm9wZXJ0aWVzPWQsYS5jaGlsZHJlbi5wdXNoKGIpLGM9e30sYy5uYW1lPVwiU3ViUmVwcmVzZW50YXRpb25cIixjLmlzUm9vdD0hMSxjLmlzQXJyYXk9ITAsYy5wYXJlbnQ9YixjLmNoaWxkcmVuPVtdLGMucHJvcGVydGllcz1kLGIuY2hpbGRyZW4ucHVzaChjKSxhfSxrPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQ7cmV0dXJuIGQ9W3tuYW1lOlwiU2VnbWVudEJhc2VcIixtZXJnZTohMH0se25hbWU6XCJTZWdtZW50VGVtcGxhdGVcIixtZXJnZTohMH0se25hbWU6XCJTZWdtZW50TGlzdFwiLG1lcmdlOiEwfV0sYT17fSxhLm5hbWU9XCJQZXJpb2RcIixhLmlzUm9vdD0hMSxhLmlzQXJyYXk9ITAsYS5wYXJlbnQ9bnVsbCxhLmNoaWxkcmVuPVtdLGEucHJvcGVydGllcz1kLGI9e30sYi5uYW1lPVwiQWRhcHRhdGlvblNldFwiLGIuaXNSb290PSExLGIuaXNBcnJheT0hMCxiLnBhcmVudD1hLGIuY2hpbGRyZW49W10sYi5wcm9wZXJ0aWVzPWQsYS5jaGlsZHJlbi5wdXNoKGIpLGM9e30sYy5uYW1lPVwiUmVwcmVzZW50YXRpb25cIixjLmlzUm9vdD0hMSxjLmlzQXJyYXk9ITAsYy5wYXJlbnQ9YixjLmNoaWxkcmVuPVtdLGMucHJvcGVydGllcz1kLGIuY2hpbGRyZW4ucHVzaChjKSxhfSxsPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZTtyZXR1cm4gZT1be25hbWU6XCJCYXNlVVJMXCIsbWVyZ2U6ITAsbWVyZ2VGdW5jdGlvbjpmdW5jdGlvbihhLGIpe3ZhciBjO3JldHVybiBjPTA9PT1iLmluZGV4T2YoXCJodHRwOi8vXCIpP2I6YStifX1dLGE9e30sYS5uYW1lPVwibXBkXCIsYS5pc1Jvb3Q9ITAsYS5pc0FycmF5PSEwLGEucGFyZW50PW51bGwsYS5jaGlsZHJlbj1bXSxhLnByb3BlcnRpZXM9ZSxiPXt9LGIubmFtZT1cIlBlcmlvZFwiLGIuaXNSb290PSExLGIuaXNBcnJheT0hMCxiLnBhcmVudD1udWxsLGIuY2hpbGRyZW49W10sYi5wcm9wZXJ0aWVzPWUsYS5jaGlsZHJlbi5wdXNoKGIpLGM9e30sYy5uYW1lPVwiQWRhcHRhdGlvblNldFwiLGMuaXNSb290PSExLGMuaXNBcnJheT0hMCxjLnBhcmVudD1iLGMuY2hpbGRyZW49W10sYy5wcm9wZXJ0aWVzPWUsYi5jaGlsZHJlbi5wdXNoKGMpLGQ9e30sZC5uYW1lPVwiUmVwcmVzZW50YXRpb25cIixkLmlzUm9vdD0hMSxkLmlzQXJyYXk9ITAsZC5wYXJlbnQ9YyxkLmNoaWxkcmVuPVtdLGQucHJvcGVydGllcz1lLGMuY2hpbGRyZW4ucHVzaChkKSxhfSxtPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIGEucHVzaChqKCkpLGEucHVzaChrKCkpLGEucHVzaChsKCkpLGF9LG49ZnVuY3Rpb24oYSxiKXt0aGlzLmRlYnVnLmxvZyhcIkRvaW5nIHBhcnNlLlwiKTt2YXIgYyxkPW5ldyBYMkpTKGksXCJcIiwhMCksZT1uZXcgT2JqZWN0SXJvbihtKCkpO3RyeXt0aGlzLmRlYnVnLmxvZyhcIkNvbnZlcnRpbmcgZnJvbSBYTUwuXCIpLGM9ZC54bWxfc3RyMmpzb24oYSksYy5oYXNPd25Qcm9wZXJ0eShcIkJhc2VVUkxcIik/KGMuQmFzZVVSTD1jLkJhc2VVUkxfYXNBcnJheVswXSwwIT09Yy5CYXNlVVJMLnRvU3RyaW5nKCkuaW5kZXhPZihcImh0dHBcIikmJihjLkJhc2VVUkw9YitjLkJhc2VVUkwpKToodGhpcy5kZWJ1Zy5sb2coXCJTZXR0aW5nIGJhc2VVUkw6IFwiK2IpLGMuQmFzZVVSTD1iKSx0aGlzLmRlYnVnLmxvZyhcIkZsYXR0ZW4gbWFuaWZlc3QgcHJvcGVydGllcy5cIiksZS5ydW4oYyksdGhpcy5kZWJ1Zy5sb2coXCJQYXJzaW5nIGNvbXBsZXRlLlwiKX1jYXRjaChmKXtyZXR1cm4gdGhpcy5lcnJIYW5kbGVyLm1hbmlmZXN0RXJyb3IoXCJwYXJzaW5nIHRoZSBtYW5pZmVzdCBmYWlsZWRcIixcInBhcnNlXCIsYSksUS5yZWplY3QoZil9cmV0dXJuIFEud2hlbihjKX07cmV0dXJue2RlYnVnOnZvaWQgMCxlcnJIYW5kbGVyOnZvaWQgMCxwYXJzZTpufX0sRGFzaC5kZXBlbmRlbmNpZXMuRGFzaFBhcnNlci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkRhc2guZGVwZW5kZW5jaWVzLkRhc2hQYXJzZXJ9LERhc2guZGVwZW5kZW5jaWVzLkZyYWdtZW50RXh0ZW5zaW9ucz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQsZSxmLGcsaD1RLmRlZmVyKCksaT1uZXcgRGF0YVZpZXcoYSksaj0wO1widGZkdFwiIT09ZSYmajxpLmJ5dGVMZW5ndGg7KXtmb3IoZD1pLmdldFVpbnQzMihqKSxqKz00LGU9XCJcIixmPTA7ND5mO2YrPTEpZz1pLmdldEludDgoaiksZSs9U3RyaW5nLmZyb21DaGFyQ29kZShnKSxqKz0xO1wibW9vZlwiIT09ZSYmXCJ0cmFmXCIhPT1lJiZcInRmZHRcIiE9PWUmJihqKz1kLTgpfWlmKGo9PT1pLmJ5dGVMZW5ndGgpdGhyb3dcIkVycm9yIGZpbmRpbmcgbGl2ZSBvZmZzZXQuXCI7cmV0dXJuIGM9aS5nZXRVaW50OChqKSx0aGlzLmRlYnVnLmxvZyhcInBvc2l0aW9uOiBcIitqKSwwPT09Yz8oais9NCxiPWkuZ2V0VWludDMyKGosITEpKTooais9ZC0xNixiPXV0aWxzLk1hdGgudG82NEJpdE51bWJlcihpLmdldFVpbnQzMihqKzQsITEpLGkuZ2V0VWludDMyKGosITEpKSksaC5yZXNvbHZlKHt2ZXJzaW9uOmMsYmFzZV9tZWRpYV9kZWNvZGVfdGltZTpifSksaC5wcm9taXNlfSxiPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQsZSxmLGcsaCxpPW5ldyBEYXRhVmlldyhhKSxqPTA7XCJzaWR4XCIhPT1mJiZqPGkuYnl0ZUxlbmd0aDspe2ZvcihnPWkuZ2V0VWludDMyKGopLGorPTQsZj1cIlwiLGU9MDs0PmU7ZSs9MSloPWkuZ2V0SW50OChqKSxmKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGgpLGorPTE7XCJtb29mXCIhPT1mJiZcInRyYWZcIiE9PWYmJlwic2lkeFwiIT09Zj9qKz1nLTg6XCJzaWR4XCI9PT1mJiYoai09OCl9cmV0dXJuIGI9aS5nZXRVaW50OChqKzgpLGorPTEyLGM9aS5nZXRVaW50MzIoais0LCExKSxqKz04LGQ9MD09PWI/aS5nZXRVaW50MzIoaiwhMSk6dXRpbHMuTWF0aC50bzY0Qml0TnVtYmVyKGkuZ2V0VWludDMyKGorNCwhMSksaS5nZXRVaW50MzIoaiwhMSkpLFEud2hlbih7ZWFybGllc3RQcmVzZW50YXRpb25UaW1lOmQsdGltZXNjYWxlOmN9KX0sYz1mdW5jdGlvbihiKXt2YXIgYyxkLGUsZj1RLmRlZmVyKCksZz1uZXcgWE1MSHR0cFJlcXVlc3QsaD0hMTtyZXR1cm4gYz1iLGcub25sb2FkZW5kPWZ1bmN0aW9uKCl7aHx8KGQ9XCJFcnJvciBsb2FkaW5nIGZyYWdtZW50OiBcIitjLGYucmVqZWN0KGQpKX0sZy5vbmxvYWQ9ZnVuY3Rpb24oKXtoPSEwLGU9YShnLnJlc3BvbnNlKSxmLnJlc29sdmUoZSl9LGcub25lcnJvcj1mdW5jdGlvbigpe2Q9XCJFcnJvciBsb2FkaW5nIGZyYWdtZW50OiBcIitjLGYucmVqZWN0KGQpfSxnLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCIsZy5vcGVuKFwiR0VUXCIsYyksZy5zZW5kKG51bGwpLGYucHJvbWlzZX07cmV0dXJue2RlYnVnOnZvaWQgMCxsb2FkRnJhZ21lbnQ6YyxwYXJzZVRGRFQ6YSxwYXJzZVNJRFg6Yn19LERhc2guZGVwZW5kZW5jaWVzLkZyYWdtZW50RXh0ZW5zaW9ucy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkRhc2guZGVwZW5kZW5jaWVzLkZyYWdtZW50RXh0ZW5zaW9uc30sRGFzaC52by5TZWdtZW50PWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dGhpcy5pbmRleFJhbmdlPW51bGwsdGhpcy5pbmRleD1udWxsLHRoaXMubWVkaWFSYW5nZT1udWxsLHRoaXMubWVkaWE9bnVsbCx0aGlzLmR1cmF0aW9uPTAvMCx0aGlzLnN0YXJ0VGltZT0wLzAsdGhpcy50aW1lc2NhbGU9MC8wfSxEYXNoLnZvLlNlZ21lbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpEYXNoLnZvLlNlZ21lbnR9LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5BYnJDb250cm9sbGVyPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9ITAsYj17fSxjPXt9LGQ9ZnVuY3Rpb24oYSl7dmFyIGM7cmV0dXJuIGIuaGFzT3duUHJvcGVydHkoYSl8fChiW2FdPTApLGM9YlthXX0sZT1mdW5jdGlvbihhLGMpe2JbYV09Y30sZj1mdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eShhKXx8KGNbYV09MCksYj1jW2FdfSxnPWZ1bmN0aW9uKGEsYil7Y1thXT1ifTtyZXR1cm57ZGVidWc6dm9pZCAwLGFiclJ1bGVzQ29sbGVjdGlvbjp2b2lkIDAsbWFuaWZlc3RFeHQ6dm9pZCAwLG1ldHJpY3NNb2RlbDp2b2lkIDAsZ2V0QXV0b1N3aXRjaEJpdHJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sc2V0QXV0b1N3aXRjaEJpdHJhdGU6ZnVuY3Rpb24oYil7YT1ifSxnZXRNZXRyaWNzRm9yOmZ1bmN0aW9uKGEpe3ZhciBiPVEuZGVmZXIoKSxjPXRoaXM7cmV0dXJuIGMubWFuaWZlc3RFeHQuZ2V0SXNWaWRlbyhhKS50aGVuKGZ1bmN0aW9uKGQpe2Q/Yi5yZXNvbHZlKGMubWV0cmljc01vZGVsLmdldE1ldHJpY3NGb3IoXCJ2aWRlb1wiKSk6Yy5tYW5pZmVzdEV4dC5nZXRJc0F1ZGlvKGEpLnRoZW4oZnVuY3Rpb24oYSl7YT9iLnJlc29sdmUoYy5tZXRyaWNzTW9kZWwuZ2V0TWV0cmljc0ZvcihcImF1ZGlvXCIpKTpiLnJlc29sdmUoYy5tZXRyaWNzTW9kZWwuZ2V0TWV0cmljc0ZvcihcInN0cmVhbVwiKSl9KX0pLGIucHJvbWlzZX0sZ2V0UGxheWJhY2tRdWFsaXR5OmZ1bmN0aW9uKGIsYyl7dmFyIGgsaSxqLGssbCxtLG49dGhpcyxvPVEuZGVmZXIoKSxwPU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLk5PX0NIQU5HRSxxPU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLk5PX0NIQU5HRSxyPVtdO3JldHVybiBsPWQoYiksbT1mKGIpLG4uZGVidWcubG9nKFwiQUJSIGVuYWJsZWQ/IChcIithK1wiKVwiKSxhPyhuLmRlYnVnLmxvZyhcIkNoZWNrIEFCUiBydWxlcy5cIiksbi5nZXRNZXRyaWNzRm9yKGMpLnRoZW4oZnVuY3Rpb24oYSl7bi5hYnJSdWxlc0NvbGxlY3Rpb24uZ2V0UnVsZXMoKS50aGVuKGZ1bmN0aW9uKGQpe2ZvcihoPTAsaT1kLmxlbmd0aDtpPmg7aCs9MSlyLnB1c2goZFtoXS5jaGVja0luZGV4KGwsYSxjKSk7XHJcblEuYWxsKHIpLnRoZW4oZnVuY3Rpb24oYSl7Zm9yKG4uZGVidWcubG9nKGEpLGs9e30sa1tNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5TVFJPTkddPU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLk5PX0NIQU5HRSxrW01lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLldFQUtdPU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLk5PX0NIQU5HRSxrW01lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLkRFRkFVTFRdPU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLk5PX0NIQU5HRSxoPTAsaT1hLmxlbmd0aDtpPmg7aCs9MSlqPWFbaF0sai5xdWFsaXR5IT09TWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuTk9fQ0hBTkdFJiYoa1tqLnByaW9yaXR5XT1NYXRoLm1pbihrW2oucHJpb3JpdHldLGoucXVhbGl0eSkpO2tbTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuV0VBS10hPT1NZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5OT19DSEFOR0UmJihxPU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLldFQUsscD1rW01lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLldFQUtdKSxrW01lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLkRFRkFVTFRdIT09TWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuTk9fQ0hBTkdFJiYocT1NZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5ERUZBVUxULHA9a1tNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5ERUZBVUxUXSksa1tNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5TVFJPTkddIT09TWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuTk9fQ0hBTkdFJiYocT1NZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5TVFJPTkcscD1rW01lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLlNUUk9OR10pLHAhPT1NZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5OT19DSEFOR0UmJnZvaWQgMCE9PXAmJihsPXApLHEhPT1NZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5OT19DSEFOR0UmJnZvaWQgMCE9PXEmJihtPXEpLG4ubWFuaWZlc3RFeHQuZ2V0UmVwcmVzZW50YXRpb25Db3VudChjKS50aGVuKGZ1bmN0aW9uKGEpezA+bCYmKGw9MCksbD49YSYmKGw9YS0xKSxtIT1NZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5TVFJPTkcmJm0hPU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLldFQUsmJihtPU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLkRFRkFVTFQpLGUoYixsKSxuLmRlYnVnLmxvZyhcIk5ldyBxdWFsaXR5IG9mIFwiK2wpLGcoYixtKSxuLmRlYnVnLmxvZyhcIk5ldyBjb25maWRlbmNlIG9mIFwiK20pLG8ucmVzb2x2ZSh7cXVhbGl0eTpsLGNvbmZpZGVuY2U6bX0pfSl9KX0pfSkpOihuLmRlYnVnLmxvZyhcIlVuY2hhbmdlZCBxdWFsaXR5IG9mIFwiK2wpLG8ucmVzb2x2ZSh7cXVhbGl0eTpsLGNvbmZpZGVuY2U6bX0pKSxvLnByb21pc2V9LHNldFBsYXliYWNrUXVhbGl0eTpmdW5jdGlvbihhLGIpe3ZhciBjPWQoYSk7YiE9PWMmJmUoYSxiKX0sZ2V0UXVhbGl0eUZvcjpmdW5jdGlvbihhKXtyZXR1cm4gZChhKX19fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQWJyQ29udHJvbGxlci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5BYnJDb250cm9sbGVyfSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyQ29udHJvbGxlcj1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhLGIsYyxkLGU9LjUsZj0yMixnPVwiV0FJVElOR1wiLGg9XCJSRUFEWVwiLGk9XCJWQUxJREFUSU5HXCIsaj1cIkxPQURJTkdcIixrPWcsbD0hMSxtPSExLG49ITEsbz0hMCxwPVtdLHE9ITEscj0tMSxzPSEwLHQ9LTEsdT0hMSx2PSExLHc9ITEseD0hMSx5PVtdLHo9bnVsbCxBPVEuZGVmZXIoKSxCPW51bGwsQz1udWxsLEQ9LTEsRT0wLEY9MCxHPW51bGwsSD0wLEk9ITEsSj1udWxsLEs9MCxMPSExLE09bnVsbCxOPW51bGwsTz1udWxsLFA9bnVsbCxSPSEwLFM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztiLmRlYnVnLmxvZyhcIkJ1ZmZlckNvbnRyb2xsZXIgXCIrYytcIiBzZXRTdGF0ZSB0bzpcIithKSxrPWEsbnVsbCE9PUcmJmIuZnJhZ21lbnRDb250cm9sbGVyLm9uQnVmZmVyQ29udHJvbGxlclN0YXRlQ2hhbmdlKCl9LFQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz0wLGQ9bnVsbDtSPT09ITEmJihkPVAuc3RhcnQsYz1hLmdldFRpbWUoKS1kLmdldFRpbWUoKSxQLmR1cmF0aW9uPWMsUC5zdG9wcmVhc29uPWIsUj0hMCl9LFU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm1hbmlmZXN0TW9kZWwuZ2V0VmFsdWUoKSxiPXRoaXMubWFuaWZlc3RFeHQuZ2V0SXNMaXZlKGEpO3JldHVybiB3PSEwLFEud2hlbihiKX0sVj1mdW5jdGlvbigpe2lmKGwmJm0pe3ZhciBhPXRoaXM7VS5jYWxsKHRoaXMpLnRoZW4oZnVuY3Rpb24oYil7dj1iLGEuZGVidWcubG9nKFwiQnVmZmVyQ29udHJvbGxlciBiZWdpbiBcIitjK1wiIHZhbGlkYXRpb25cIiksUy5jYWxsKGEsaCksYS5yZXF1ZXN0U2NoZWR1bGVyLnN0YXJ0U2NoZWR1bGluZyhhLHJiKSxHPWEuZnJhZ21lbnRDb250cm9sbGVyLmF0dGFjaEJ1ZmZlckNvbnRyb2xsZXIoYSl9KX19LFc9ZnVuY3Rpb24oKXt2YXIgYTt0aGlzLnJlcXVlc3RTY2hlZHVsZXIuaXNTY2hlZHVsZWQodGhpcyl8fChxPT09ITEmJihhPW5ldyBEYXRlLFQoYSxNZWRpYVBsYXllci52by5tZXRyaWNzLlBsYXlMaXN0LlRyYWNlLlVTRVJfUkVRVUVTVF9TVE9QX1JFQVNPTiksTz10aGlzLm1ldHJpY3NNb2RlbC5hZGRQbGF5TGlzdChjLGEsMCxNZWRpYVBsYXllci52by5tZXRyaWNzLlBsYXlMaXN0LklOSVRJQUxfUExBWV9TVEFSVF9SRUFTT04pKSx0aGlzLmRlYnVnLmxvZyhcIkJ1ZmZlckNvbnRyb2xsZXIgXCIrYytcIiBzdGFydC5cIiksbT0hMCxuPSEwLFYuY2FsbCh0aGlzKSl9LFg9ZnVuY3Rpb24oYSl7dmFyIGI7dGhpcy5kZWJ1Zy5sb2coXCJCdWZmZXJDb250cm9sbGVyIFwiK2MrXCIgc2VlazogXCIrYSkscT0hMCxyPWEsYj1uZXcgRGF0ZSxUKGIsTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdC5UcmFjZS5VU0VSX1JFUVVFU1RfU1RPUF9SRUFTT04pLE89dGhpcy5tZXRyaWNzTW9kZWwuYWRkUGxheUxpc3QoYyxiLHIsTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdC5TRUVLX1NUQVJUX1JFQVNPTiksVy5jYWxsKHRoaXMpfSxZPWZ1bmN0aW9uKCl7ayE9PWcmJih0aGlzLmRlYnVnLmxvZyhcIkJ1ZmZlckNvbnRyb2xsZXIgXCIrYytcIiBzdG9wLlwiKSxTLmNhbGwodGhpcyxnKSx0aGlzLnJlcXVlc3RTY2hlZHVsZXIuc3RvcFNjaGVkdWxpbmcodGhpcyksdGhpcy5mcmFnbWVudENvbnRyb2xsZXIuY2FuY2VsUGVuZGluZ1JlcXVlc3RzRm9yTW9kZWwoRyksbT0hMSxuPSExLFQobmV3IERhdGUsTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdC5UcmFjZS5VU0VSX1JFUVVFU1RfU1RPUF9SRUFTT04pKX0sWj1mdW5jdGlvbihhLGIpe3ZhciBjPW51bGw7cmV0dXJuIGImJmIuUmVwcmVzZW50YXRpb25fYXNBcnJheSYmYi5SZXByZXNlbnRhdGlvbl9hc0FycmF5Lmxlbmd0aD4wJiYoYz1iLlJlcHJlc2VudGF0aW9uX2FzQXJyYXlbYV0pLGN9LCQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2s9PT1qJiYodSYmKHU9ITEsdGhpcy52aWRlb01vZGVsLnN0YWxsU3RyZWFtKGMsdSkpLFMuY2FsbChhLGgpKX0sXz1mdW5jdGlvbihhKXtpZih0aGlzLmZyYWdtZW50Q29udHJvbGxlci5pc0luaXRpYWxpemF0aW9uUmVxdWVzdChhKSlTLmNhbGwodGhpcyxoKTtlbHNle1MuY2FsbCh0aGlzLGopO3ZhciBiPXRoaXMsYz1iLmZyYWdtZW50Q29udHJvbGxlci5nZXRMb2FkaW5nVGltZShiKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7KE18fE4pJiYoUy5jYWxsKGIsaCkscWIuY2FsbChiKSl9LGMpfX0sYWI9ZnVuY3Rpb24oYSxiKXt0aGlzLmZyYWdtZW50Q29udHJvbGxlci5pc0luaXRpYWxpemF0aW9uUmVxdWVzdChhKT9oYi5jYWxsKHRoaXMsYSxiKTpiYi5jYWxsKHRoaXMsYSxiKX0sYmI9ZnVuY3Rpb24oYSxiKXt2YXIgZD10aGlzO2QuZGVidWcubG9nKGMrXCIgQnl0ZXMgZmluaXNoZWQgbG9hZGluZzogXCIrYS51cmwpLEt8fGlzTmFOKGEuZHVyYXRpb24pfHwoSz1hLmR1cmF0aW9uKSxkLmZyYWdtZW50Q29udHJvbGxlci5wcm9jZXNzKGIuZGF0YSkudGhlbihmdW5jdGlvbihiKXtudWxsIT09YiYmbnVsbCE9PXo/US53aGVuKHoucHJvbWlzZSkudGhlbihmdW5jdGlvbigpe2NiLmNhbGwoZCxiLGEucXVhbGl0eSkudGhlbihmdW5jdGlvbigpe0EucHJvbWlzZS50aGVuKGZ1bmN0aW9uKGIpe2IuaW5kZXgtMSE9PWEuaW5kZXh8fHh8fCh4PSEwLHUmJih1PSExLGQudmlkZW9Nb2RlbC5zdGFsbFN0cmVhbShjLHUpKSxTLmNhbGwoZCxoKSxkLnN5c3RlbS5ub3RpZnkoXCJidWZmZXJpbmdDb21wbGV0ZWRcIikpfSl9KX0pOmQuZGVidWcubG9nKFwiTm8gXCIrYytcIiBieXRlcyB0byBwdXNoLlwiKX0pfSxjYj1mdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMsZT1hPT1KLGg9ZT9COlEuZGVmZXIoKSxpPWU/eS5sZW5ndGg6eS5wdXNoKGgpLGo9Wih0LGQuZ2V0RGF0YSgpKSxsPWQudmlkZW9Nb2RlbC5nZXRDdXJyZW50VGltZSgpLG09bmV3IERhdGU7cmV0dXJuIGQuZGVidWcubG9nKFwiUHVzaCAoXCIrYytcIikgYnl0ZXM6IFwiK2EuYnl0ZUxlbmd0aCksUj09PSEwJiZrIT09ZyYmLTEhPT10JiYoUj0hMSxQPWQubWV0cmljc01vZGVsLmFwcGVuZFBsYXlMaXN0VHJhY2UoTyxqLmlkLG51bGwsbSxsLG51bGwsMSxudWxsKSksUS53aGVuKGV8fDI+aXx8eVtpLTJdLnByb21pc2UpLnRoZW4oZnVuY3Rpb24oKXtOJiZmYi5jYWxsKGQpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gYiE9PXQ/KGgucmVzb2x2ZSgpLGUmJihCPW51bGwsSj1udWxsKSx2b2lkIDApOihRLndoZW4oQz9DLnByb21pc2U6ITApLnRoZW4oZnVuY3Rpb24oKXtkLnNvdXJjZUJ1ZmZlckV4dC5hcHBlbmQoTixhLGQudmlkZW9Nb2RlbCkudGhlbihmdW5jdGlvbigpe2UmJihCPW51bGwsSj1udWxsKSxkLnJlcXVlc3RTY2hlZHVsZXIuaXNTY2hlZHVsZWQoZCl8fFcuY2FsbChkKSxJPSExLGRiLmNhbGwoZCkudGhlbihmdW5jdGlvbigpe2gucmVzb2x2ZSgpfSksTiYmZC5zb3VyY2VCdWZmZXJFeHQuZ2V0QWxsUmFuZ2VzKE4pLnRoZW4oZnVuY3Rpb24oYSl7aWYoYSYmKGQuZGVidWcubG9nKFwiQXBwZW5kIFwiK2MrXCIgY29tcGxldGU6IFwiK2EubGVuZ3RoKSxhLmxlbmd0aD4wKSl7dmFyIGIsZTtmb3IoZC5kZWJ1Zy5sb2coXCJOdW1iZXIgb2YgYnVmZmVyZWQgXCIrYytcIiByYW5nZXM6IFwiK2EubGVuZ3RoKSxiPTAsZT1hLmxlbmd0aDtlPmI7Yis9MSlkLmRlYnVnLmxvZyhcIkJ1ZmZlcmVkIFwiK2MrXCIgUmFuZ2U6IFwiK2Euc3RhcnQoYikrXCIgLSBcIithLmVuZChiKSl9fSl9LGZ1bmN0aW9uKGIpe2IuZXJyLmNvZGU9PT1mJiYoSj1hLEI9aCxJPSEwLEY9MCxZLmNhbGwoZCkpfSl9KSx2b2lkIDApfSl9KSxoLnByb21pc2V9LGRiPWZ1bmN0aW9uKCl7aWYoIU0mJiFOKXJldHVybiBRLndoZW4oITEpO3ZhciBhPXRoaXMsYj1RLmRlZmVyKCksZD1vYi5jYWxsKGEpO3JldHVybiBhLnNvdXJjZUJ1ZmZlckV4dC5nZXRCdWZmZXJMZW5ndGgoTixkKS50aGVuKGZ1bmN0aW9uKGQpe0g9ZCxhLm1ldHJpY3NNb2RlbC5hZGRCdWZmZXJMZXZlbChjLG5ldyBEYXRlLEgpLGViLmNhbGwoYSksYi5yZXNvbHZlKCl9KSxiLnByb21pc2V9LGViPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5idWZmZXJFeHQuZ2V0TGVhc3RCdWZmZXJMZXZlbCgpLGI9MipLLGM9SC1hO2M+YiYmIUM/KEY9MCxDPVEuZGVmZXIoKSk6Yj5jJiZDJiYoQy5yZXNvbHZlKCksQz1udWxsKX0sZmI9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMsYz1RLmRlZmVyKCksZD0wO3JldHVybiBJPyhhPWZ1bmN0aW9uKCl7Z2IuY2FsbChiKS50aGVuKGZ1bmN0aW9uKGIpe2QrPWIsZD49Sz9jLnJlc29sdmUoKTpzZXRUaW1lb3V0KGEsMWUzKkspfSl9LGEuY2FsbChiKSxjLnByb21pc2UpOlEud2hlbighMCl9LGdiPWZ1bmN0aW9uKCl7dmFyIGEsYyxkPXRoaXMsZT1RLmRlZmVyKCksZj1kLnZpZGVvTW9kZWwuZ2V0Q3VycmVudFRpbWUoKSxnPTA7cmV0dXJuIGM9ZC5mcmFnbWVudENvbnRyb2xsZXIuZ2V0RXhlY3V0ZWRSZXF1ZXN0Rm9yVGltZShHLGYpLGE9YyYmIWlzTmFOKGMuc3RhcnRUaW1lKT9jLnN0YXJ0VGltZTpNYXRoLmZsb29yKGYpLEs9YyYmIWlzTmFOKGMuZHVyYXRpb24pP2MuZHVyYXRpb246MSxkLnNvdXJjZUJ1ZmZlckV4dC5nZXRCdWZmZXJSYW5nZShOLGYpLnRoZW4oZnVuY3Rpb24oYyl7bnVsbD09PWMmJnI9PT1mJiZOLmJ1ZmZlcmVkLmxlbmd0aD4wJiYoYT1OLmJ1ZmZlcmVkLmVuZChOLmJ1ZmZlcmVkLmxlbmd0aC0xKSksZz1OLmJ1ZmZlcmVkLnN0YXJ0KDApLGQuc291cmNlQnVmZmVyRXh0LnJlbW92ZShOLGcsYSxFLGIpLnRoZW4oZnVuY3Rpb24oKXtkLmZyYWdtZW50Q29udHJvbGxlci5yZW1vdmVFeGVjdXRlZFJlcXVlc3RzQmVmb3JlVGltZShHLGEpLGUucmVzb2x2ZShhLWcpfSl9KSxlLnByb21pc2V9LGhiPWZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpcyxlPWIuZGF0YSxmPWEucXVhbGl0eTtkLmRlYnVnLmxvZyhjK1wiIEluaXRpYWxpemF0aW9uIGZpbmlzaGVkIGxvYWRpbmc6IFwiK2EudXJsKSxkLmZyYWdtZW50Q29udHJvbGxlci5wcm9jZXNzKGUpLnRoZW4oZnVuY3Rpb24oYil7bnVsbCE9PWI/KHBbZl09YixmPT09dCYmY2IuY2FsbChkLGIsYS5xdWFsaXR5KS50aGVuKGZ1bmN0aW9uKCl7ei5yZXNvbHZlKCl9KSk6ZC5kZWJ1Zy5sb2coXCJObyBcIitjK1wiIGJ5dGVzIHRvIHB1c2guXCIpfSl9LGliPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEubWFuaWZlc3RNb2RlbC5nZXRWYWx1ZSgpLGM9YS5tYW5pZmVzdEV4dC5nZXRJc0xpdmUoYik7az09PWomJlMuY2FsbChhLGgpLGN8fGEuc3lzdGVtLm5vdGlmeShcInNlZ21lbnRMb2FkaW5nRmFpbGVkXCIpfSxqYj1mdW5jdGlvbihhKXt0aGlzLmRlYnVnLmxvZyhjK1wiIFN0cmVhbSBpcyBjb21wbGV0ZS5cIiksVChuZXcgRGF0ZSxNZWRpYVBsYXllci52by5tZXRyaWNzLlBsYXlMaXN0LlRyYWNlLkVORF9PRl9DT05URU5UX1NUT1BfUkVBU09OKSxZLmNhbGwodGhpcyksQS5yZXNvbHZlKGEpfSxrYj1mdW5jdGlvbihhLGIpe3ZhciBkLGU9bnVsbCxmPXRoaXMuYnVmZmVyRXh0LmdldFRvcFF1YWxpdHlJbmRleChjKSxnPVtdO2lmKG8mJih0aGlzLmRlYnVnLmxvZyhcIk1hcmtpbmcgYSBzcGVjaWFsIHNlZWsgZm9yIGluaXRpYWwgXCIrYytcIiBwbGF5YmFjay5cIikscXx8KHE9ITAscj0wKSxvPSExKSxzKXtmb3Ioej1RLmRlZmVyKCkscD1bXSxkPTA7Zj49ZDtkKz0xKWcucHVzaCh0aGlzLmluZGV4SGFuZGxlci5nZXRJbml0UmVxdWVzdChkLE0pKTt0PWIsZT1RLmFsbChnKX1lbHNlIGU9US53aGVuKG51bGwpLGEmJih6PVEuZGVmZXIoKSx0PWIscFtiXSYmY2IuY2FsbCh0aGlzLHBbYl0sYikudGhlbihmdW5jdGlvbigpe3oucmVzb2x2ZSgpfSkpO3JldHVybiBlfSxsYj1mdW5jdGlvbihiKXt2YXIgZCxlPXRoaXM7aWYocyYmIXEpZS5kZWJ1Zy5sb2coXCJEYXRhIGNoYW5nZWQgLSBsb2FkaW5nIHRoZSBcIitjK1wiIGZyYWdtZW50IGZvciB0aW1lOiBcIithKSxkPWUuaW5kZXhIYW5kbGVyLmdldFNlZ21lbnRSZXF1ZXN0Rm9yVGltZShhLGIsTSk7ZWxzZXt2YXIgZj1RLmRlZmVyKCksZz1lLnZpZGVvTW9kZWwuZ2V0Q3VycmVudFRpbWUoKTtkPWYucHJvbWlzZSxlLnNvdXJjZUJ1ZmZlckV4dC5nZXRCdWZmZXJSYW5nZShOLGcpLnRoZW4oZnVuY3Rpb24oYSl7cT0hMSxudWxsIT09YSYmKGc9YS5lbmQpLGUuZGVidWcubG9nKFwiTG9hZGluZyB0aGUgXCIrYytcIiBmcmFnbWVudCBmb3IgdGltZTogXCIrZyksZS5pbmRleEhhbmRsZXIuZ2V0U2VnbWVudFJlcXVlc3RGb3JUaW1lKGcsYixNKS50aGVuKGZ1bmN0aW9uKGEpe2YucmVzb2x2ZShhKX0sZnVuY3Rpb24oKXtmLnJlamVjdCgpfSl9LGZ1bmN0aW9uKCl7Zi5yZWplY3QoKX0pfXJldHVybiBzPSExLGR9LG1iPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7bnVsbCE9PWE/Yi5mcmFnbWVudENvbnRyb2xsZXIuaXNGcmFnbWVudExvYWRlZE9yUGVuZGluZyhiLGEpP1wiY29tcGxldGVcIiE9PWEuYWN0aW9uP2IuaW5kZXhIYW5kbGVyLmdldE5leHRTZWdtZW50UmVxdWVzdCh0LE0pLnRoZW4obWIuYmluZChiKSk6KFkuY2FsbChiKSxTLmNhbGwoYixoKSk6KGIuZGVidWcubG9nKFwiTG9hZGluZyBhbiBcIitjK1wiIGZyYWdtZW50OiBcIithLnVybCksUS53aGVuKEM/Qy5wcm9taXNlOiEwKS50aGVuKGZ1bmN0aW9uKCl7Yi5mcmFnbWVudENvbnRyb2xsZXIucHJlcGFyZUZyYWdtZW50Rm9yTG9hZGluZyhiLGEsXyxhYixpYixqYikudGhlbihmdW5jdGlvbigpe1MuY2FsbChiLGgpfSl9KSk6Uy5jYWxsKGIsaCl9LG5iPWZ1bmN0aW9uKCl7biYmKGQ+SCYmZDxFLXRoaXMudmlkZW9Nb2RlbC5nZXRDdXJyZW50VGltZSgpP3V8fCh0aGlzLmRlYnVnLmxvZyhcIldhaXRpbmcgZm9yIG1vcmUgXCIrYytcIiBidWZmZXIgYmVmb3JlIHN0YXJ0aW5nIHBsYXliYWNrLlwiKSx1PSEwLHRoaXMudmlkZW9Nb2RlbC5zdGFsbFN0cmVhbShjLHUpKToodGhpcy5kZWJ1Zy5sb2coXCJHb3QgZW5vdWdoIFwiK2MrXCIgYnVmZmVyIHRvIHN0YXJ0LlwiKSxuPSExLHU9ITEsdGhpcy52aWRlb01vZGVsLnN0YWxsU3RyZWFtKGMsdSkpKX0sb2I9ZnVuY3Rpb24oKXt2YXIgYT0tMTtyZXR1cm4gYT10aGlzLnZpZGVvTW9kZWwuZ2V0Q3VycmVudFRpbWUoKX0scGI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWIudmlkZW9Nb2RlbC5nZXRQbGF5YmFja1JhdGUoKSxkPUgvTWF0aC5tYXgoYywxKSxlPVEuZGVmZXIoKTtyZXR1cm4gYi5idWZmZXJFeHQuZ2V0UmVxdWlyZWRCdWZmZXJMZW5ndGgobixiLnJlcXVlc3RTY2hlZHVsZXIuZ2V0RXhlY3V0ZUludGVydmFsKGIpLzFlMyx2LEUpLnRoZW4oZnVuY3Rpb24oYyl7Yi5pbmRleEhhbmRsZXIuZ2V0U2VnbWVudENvdW50Rm9yRHVyYXRpb24oYSxNLGMsZCkudGhlbihmdW5jdGlvbihhKXtlLnJlc29sdmUoYSl9KX0pLGUucHJvbWlzZX0scWI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5mcmFnbWVudENvbnRyb2xsZXIuZ2V0UGVuZGluZ1JlcXVlc3RzKGEpLGM9YS5mcmFnbWVudENvbnRyb2xsZXIuZ2V0TG9hZGluZ1JlcXVlc3RzKGEpLGQ9KGI/Yi5sZW5ndGg6MCkrKGM/Yy5sZW5ndGg6MCk7Ri1kPjA/KEYtLSxsYi5jYWxsKGEsdCkudGhlbihtYi5iaW5kKGEpKSk6KGs9PT1pJiZTLmNhbGwoYSxoKSwkLmNhbGwoYSkpfSxyYj1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcyxkPSExLGY9bnVsbCxnPW5ldyBEYXRlLGw9Yi52aWRlb01vZGVsLmdldEN1cnJlbnRUaW1lKCksbT1vYi5jYWxsKGIpO2lmKGIuZGVidWcubG9nKFwiQnVmZmVyQ29udHJvbGxlci52YWxpZGF0ZSgpIFwiK2MrXCIgfCBzdGF0ZTogXCIrayksYi5kZWJ1Zy5sb2coYytcIiBQbGF5YmFjayByYXRlOiBcIitiLnZpZGVvTW9kZWwuZ2V0RWxlbWVudCgpLnBsYXliYWNrUmF0ZSksYi5kZWJ1Zy5sb2coYytcIiBXb3JraW5nIHRpbWU6IFwiK20pLGIuZGVidWcubG9nKGMrXCIgVmlkZW8gdGltZTogXCIrbCksYi5kZWJ1Zy5sb2coXCJDdXJyZW50IFwiK2MrXCIgYnVmZmVyIGxlbmd0aDogXCIrSCksbmIuY2FsbChiKSxrPT09aiYmZT5IKXV8fChiLmRlYnVnLmxvZyhcIlN0YWxsaW5nIFwiK2MrXCIgQnVmZmVyOiBcIitjKSxUKG5ldyBEYXRlLE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUGxheUxpc3QuVHJhY2UuUkVCVUZGRVJJTkdfUkVBU09OKSx1PSEwLG49ITAsYi52aWRlb01vZGVsLnN0YWxsU3RyZWFtKGMsdSkpO2Vsc2UgaWYoaz09PWgpe1MuY2FsbChiLGkpO3ZhciBvPWIubWFuaWZlc3RNb2RlbC5nZXRWYWx1ZSgpLm1pbkJ1ZmZlclRpbWU7Yi5idWZmZXJFeHQuZGVjaWRlQnVmZmVyTGVuZ3RoKG8sRSxuKS50aGVuKGZ1bmN0aW9uKGEpe2IuZGVidWcubG9nKFwiQnVmZmVyIHRpbWU6IFwiK2EpLGIuc2V0TWluQnVmZmVyVGltZShhKSxiLnJlcXVlc3RTY2hlZHVsZXIuYWRqdXN0RXhlY3V0ZUludGVydmFsKCl9KSxiLmFickNvbnRyb2xsZXIuZ2V0UGxheWJhY2tRdWFsaXR5KGMsTSkudGhlbihmdW5jdGlvbihlKXt2YXIgaD1lLnF1YWxpdHk7aWYoYi5kZWJ1Zy5sb2coYytcIiBQbGF5YmFjayBxdWFsaXR5OiBcIitoKSxiLmRlYnVnLmxvZyhcIlBvcHVsYXRlIFwiK2MrXCIgYnVmZmVycy5cIiksdm9pZCAwIT09aCYmKGE9aCksZD1oIT09dCxkPT09ITApe2lmKGIuZnJhZ21lbnRDb250cm9sbGVyLmFib3J0UmVxdWVzdHNGb3JNb2RlbChHKSxmPVooYSxiLmdldERhdGEoKSksbnVsbD09PWZ8fHZvaWQgMD09PWYpdGhyb3dcIlVuZXhwZWN0ZWQgZXJyb3IhXCI7Yi5tYW5pZmVzdEV4dC5nZXRUaW1lc3RhbXBPZmZzZXRGb3JQZXJpb2QoRCxiLm1hbmlmZXN0TW9kZWwuZ2V0VmFsdWUoKSxoLE0pLnRoZW4oZnVuY3Rpb24oYSl7Ti50aW1lc3RhbXBPZmZzZXQhPT1hJiYoTi50aW1lc3RhbXBPZmZzZXQ9YSl9KSxUKG5ldyBEYXRlLE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUGxheUxpc3QuVHJhY2UuUkVQUkVTRU5UQVRJT05fU1dJVENIX1NUT1BfUkVBU09OKSxiLm1ldHJpY3NNb2RlbC5hZGRSZXByZXNlbnRhdGlvblN3aXRjaChjLGcsbCxmLmlkKX1yZXR1cm4gYi5kZWJ1Zy5sb2coZD9jK1wiIFF1YWxpdHkgY2hhbmdlZCB0bzogXCIraDpcIlF1YWxpdHkgZGlkbid0IGNoYW5nZS5cIikscGIuY2FsbChiLGgpfSkudGhlbihmdW5jdGlvbihlKXtGPWUsa2IuY2FsbChiLGQsYSkudGhlbihmdW5jdGlvbihhKXtpZihudWxsIT09YSl7dmFyIGQsZSxmPWEubGVuZ3RoO2ZvcihlPTA7Zj5lO2UrPTEpZD1hW2VdLGIuZGVidWcubG9nKFwiTG9hZGluZyBcIitjK1wiIGluaXRpYWxpemF0aW9uOiBcIitkLnVybCksYi5kZWJ1Zy5sb2coZCksYi5mcmFnbWVudENvbnRyb2xsZXIucHJlcGFyZUZyYWdtZW50Rm9yTG9hZGluZyhiLGQsXyxhYixpYixqYikudGhlbihmdW5jdGlvbigpe1MuY2FsbChiLGgpfSl9fSkscWIuY2FsbChiKX0pfWVsc2Ugaz09PWkmJlMuY2FsbChiLGgpfTtyZXR1cm57dmlkZW9Nb2RlbDp2b2lkIDAsbWV0cmljc01vZGVsOnZvaWQgMCxtYW5pZmVzdEV4dDp2b2lkIDAsbWFuaWZlc3RNb2RlbDp2b2lkIDAsYnVmZmVyRXh0OnZvaWQgMCxzb3VyY2VCdWZmZXJFeHQ6dm9pZCAwLGFickNvbnRyb2xsZXI6dm9pZCAwLGZyYWdtZW50RXh0OnZvaWQgMCxpbmRleEhhbmRsZXI6dm9pZCAwLGRlYnVnOnZvaWQgMCxzeXN0ZW06dm9pZCAwLGVyckhhbmRsZXI6dm9pZCAwLGluaXRpYWxpemU6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXt2YXIgaT10aGlzLGo9aS5tYW5pZmVzdE1vZGVsLmdldFZhbHVlKCksaz1pLm1hbmlmZXN0RXh0LmdldElzTGl2ZShqKTtpLnNldE1lZGlhU291cmNlKGgpLGkuc2V0VmlkZW9Nb2RlbChlKSxpLnNldFR5cGUoYSksaS5zZXRQZXJpb2RJbmRleChiKSxpLnNldERhdGEoYykudGhlbihmdW5jdGlvbigpe2w9ITAsVi5jYWxsKGkpfSksaS5zZXRCdWZmZXIoZCksaS5zZXRTY2hlZHVsZXIoZiksaS5zZXRGcmFnbWVudENvbnRyb2xsZXIoZyksaS5pbmRleEhhbmRsZXIuc2V0SXNMaXZlKGspLGkubWFuaWZlc3RFeHQuZ2V0RHVyYXRpb25Gb3JQZXJpb2QoYixpLm1hbmlmZXN0TW9kZWwuZ2V0VmFsdWUoKSkudGhlbihmdW5jdGlvbihhKXtFPWEsaS5pbmRleEhhbmRsZXIuc2V0RHVyYXRpb24oYSksaS5idWZmZXJFeHQuZGVjaWRlQnVmZmVyTGVuZ3RoKGoubWluQnVmZmVyVGltZSxFLG4pLnRoZW4oZnVuY3Rpb24oYSl7aS5zZXRNaW5CdWZmZXJUaW1lKGEpfSl9KX0sZ2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiBjfSxzZXRUeXBlOmZ1bmN0aW9uKGEpe2M9YSx2b2lkIDAhPT10aGlzLmluZGV4SGFuZGxlciYmdGhpcy5pbmRleEhhbmRsZXIuc2V0VHlwZShhKX0sZ2V0UGVyaW9kSW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gRH0sc2V0UGVyaW9kSW5kZXg6ZnVuY3Rpb24oYSl7RD1hfSxnZXRWaWRlb01vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9Nb2RlbH0sc2V0VmlkZW9Nb2RlbDpmdW5jdGlvbihhKXt0aGlzLnZpZGVvTW9kZWw9YX0sZ2V0U2NoZWR1bGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVxdWVzdFNjaGVkdWxlcn0sc2V0U2NoZWR1bGVyOmZ1bmN0aW9uKGEpe3RoaXMucmVxdWVzdFNjaGVkdWxlcj1hfSxnZXRGcmFnbWVudENvbnRyb2xsZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcmFnbWVudENvbnRyb2xsZXJ9LHNldEZyYWdtZW50Q29udHJvbGxlcjpmdW5jdGlvbihhKXt0aGlzLmZyYWdtZW50Q29udHJvbGxlcj1hfSxnZXRBdXRvU3dpdGNoQml0cmF0ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7cmV0dXJuIGEuYWJyQ29udHJvbGxlci5nZXRBdXRvU3dpdGNoQml0cmF0ZSgpfSxzZXRBdXRvU3dpdGNoQml0cmF0ZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzO2IuYWJyQ29udHJvbGxlci5zZXRBdXRvU3dpdGNoQml0cmF0ZShhKX0sZ2V0RGF0YTpmdW5jdGlvbigpe3JldHVybiBNfSxzZXREYXRhOmZ1bmN0aW9uKGIpe3ZhciBkPXRoaXMsZT1RLmRlZmVyKCksZj1NO3JldHVybiBmfHwoZj1iKSxkLmFickNvbnRyb2xsZXIuZ2V0UGxheWJhY2tRdWFsaXR5KGMsZikudGhlbihmdW5jdGlvbihnKXtkLmluZGV4SGFuZGxlci5nZXRDdXJyZW50VGltZShnLnF1YWxpdHksZikudGhlbihmdW5jdGlvbihmKXtzPSEwLGE9ZixNPWIsZC5zZWVrKGYpLGQuYnVmZmVyRXh0LnVwZGF0ZURhdGEoTSxjKSxlLnJlc29sdmUoKX0pfSksZS5wcm9taXNlfSxnZXRCdWZmZXI6ZnVuY3Rpb24oKXtyZXR1cm4gTn0sc2V0QnVmZmVyOmZ1bmN0aW9uKGEpe049YX0sZ2V0TWluQnVmZmVyVGltZTpmdW5jdGlvbigpe3JldHVybiBkfSxzZXRNaW5CdWZmZXJUaW1lOmZ1bmN0aW9uKGEpe2Q9YX0sc2V0TWVkaWFTb3VyY2U6ZnVuY3Rpb24oYSl7Yj1hfSxpc1JlYWR5OmZ1bmN0aW9uKCl7cmV0dXJuIGs9PT1ofSxpc0J1ZmZlcmluZ0NvbXBsZXRlZDpmdW5jdGlvbigpe3JldHVybiB4fSxjbGVhck1ldHJpY3M6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO251bGwhPT1jJiZcIlwiIT09YyYmYS5tZXRyaWNzTW9kZWwuY2xlYXJDdXJyZW50TWV0cmljc0ZvclR5cGUoYyl9LHVwZGF0ZUJ1ZmZlclN0YXRlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcztJJiZKJiYhTD8oTD0hMCxjYi5jYWxsKGEsSix0KS50aGVuKGZ1bmN0aW9uKCl7TD0hMX0pKTpkYi5jYWxsKGEpfSxyZXNldDpmdW5jdGlvbihhKXt2YXIgYz10aGlzO1kuY2FsbChjKSxjLmNsZWFyTWV0cmljcygpLGMuZnJhZ21lbnRDb250cm9sbGVyLmFib3J0UmVxdWVzdHNGb3JNb2RlbChHKSxjLmZyYWdtZW50Q29udHJvbGxlci5kZXRhY2hCdWZmZXJDb250cm9sbGVyKEcpLEc9bnVsbCx5PVtdLHo9bnVsbCxwPVtdLEE9US5kZWZlcigpLGF8fChjLnNvdXJjZUJ1ZmZlckV4dC5hYm9ydChiLE4pLGMuc291cmNlQnVmZmVyRXh0LnJlbW92ZVNvdXJjZUJ1ZmZlcihiLE4pKSxNPW51bGwsTj1udWxsfSxzdGFydDpXLHNlZWs6WCxzdG9wOll9fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyQ29udHJvbGxlci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJDb250cm9sbGVyfSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhLGIsYz0wLGQ9MCxlPW51bGwsZj1udWxsLGc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5tZXRyaWNzRXh0LmdldEN1cnJlbnRIdHRwUmVxdWVzdChhKTtyZXR1cm4gbnVsbCE9PWI/KGIudHJlc3BvbnNlLmdldFRpbWUoKS1iLnRyZXF1ZXN0LmdldFRpbWUoKSkvMWUzOjB9LGg9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMsZz1RLmRlZmVyKCk7cmV0dXJuIFEud2hlbihlP2IuYWJyQ29udHJvbGxlci5nZXRQbGF5YmFja1F1YWxpdHkoXCJhdWRpb1wiLGUpOmMpLnRoZW4oZnVuY3Rpb24oZSl7US53aGVuKGY/Yi5hYnJDb250cm9sbGVyLmdldFBsYXliYWNrUXVhbGl0eShcInZpZGVvXCIsZik6ZCkudGhlbihmdW5jdGlvbihiKXthPWUucXVhbGl0eT09PWMmJmIucXVhbGl0eT09PWQsYT1hfHxlLmNvbmZpZGVuY2U9PT1NZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5TVFJPTkcmJmIuY29uZmlkZW5jZT09PU1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlLlNUUk9ORyxnLnJlc29sdmUoYSl9KX0pLGcucHJvbWlzZX07cmV0dXJue3N5c3RlbTp2b2lkIDAsdmlkZW9Nb2RlbDp2b2lkIDAsbWFuaWZlc3RFeHQ6dm9pZCAwLG1ldHJpY3NFeHQ6dm9pZCAwLG1ldHJpY3NNb2RlbDp2b2lkIDAsYWJyQ29udHJvbGxlcjp2b2lkIDAsYnVmZmVyTWF4OnZvaWQgMCx1cGRhdGVEYXRhOmZ1bmN0aW9uKGEsYil7dmFyIGc9YS5SZXByZXNlbnRhdGlvbl9hc0FycmF5Lmxlbmd0aC0xO1wiYXVkaW9cIj09PWI/KGM9ZyxlPWEpOlwidmlkZW9cIj09PWImJihkPWcsZj1hKX0sZ2V0VG9wUXVhbGl0eUluZGV4OmZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7cmV0dXJuXCJhdWRpb1wiPT09YT9iPWM6XCJ2aWRlb1wiPT09YSYmKGI9ZCksYn0sZGVjaWRlQnVmZmVyTGVuZ3RoOmZ1bmN0aW9uKGIsYyl7cmV0dXJuIGE9TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkJ1ZmZlckV4dGVuc2lvbnMuREVGQVVMVF9NSU5fQlVGRkVSX1RJTUU8YyYmYz5iP01hdGgubWF4KE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJFeHRlbnNpb25zLkRFRkFVTFRfTUlOX0JVRkZFUl9USU1FLGIpOmI+PWM/TWF0aC5taW4oYyxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucy5ERUZBVUxUX01JTl9CVUZGRVJfVElNRSk6TWF0aC5taW4oYyxiKSxRLndoZW4oYSl9LGdldExlYXN0QnVmZmVyTGV2ZWw6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm1ldHJpY3NNb2RlbC5nZXRSZWFkT25seU1ldHJpY3NGb3IoXCJ2aWRlb1wiKSxiPXRoaXMubWV0cmljc0V4dC5nZXRDdXJyZW50QnVmZmVyTGV2ZWwoYSksYz10aGlzLm1ldHJpY3NNb2RlbC5nZXRSZWFkT25seU1ldHJpY3NGb3IoXCJhdWRpb1wiKSxkPXRoaXMubWV0cmljc0V4dC5nZXRDdXJyZW50QnVmZmVyTGV2ZWwoYyksZT1udWxsO3JldHVybiBlPW51bGw9PT1ifHxudWxsPT09ZD9udWxsIT09ZD9kLmxldmVsOm51bGwhPT1iP2IubGV2ZWw6bnVsbDpNYXRoLm1pbihkLmxldmVsLGIubGV2ZWwpfSxnZXRSZXF1aXJlZEJ1ZmZlckxlbmd0aDpmdW5jdGlvbihjLGQsZSxmKXt2YXIgaSxqPXRoaXMsaz1qLm1ldHJpY3NNb2RlbC5nZXRSZWFkT25seU1ldHJpY3NGb3IoXCJ2aWRlb1wiKSxsPWoubWV0cmljc01vZGVsLmdldFJlYWRPbmx5TWV0cmljc0ZvcihcImF1ZGlvXCIpLG09Zj49TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkJ1ZmZlckV4dGVuc2lvbnMuTE9OR19GT1JNX0NPTlRFTlRfRFVSQVRJT05fVEhSRVNIT0xELG49US5kZWZlcigpLG89bnVsbDtyZXR1cm4gai5idWZmZXJNYXg9PT1NZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucy5CVUZGRVJfU0laRV9NSU4/KGk9YSxuLnJlc29sdmUoaSkpOmouYnVmZmVyTWF4PT09TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkJ1ZmZlckV4dGVuc2lvbnMuQlVGRkVSX1NJWkVfSU5GSU5JVFk/KGk9ZixuLnJlc29sdmUoaSkpOmouYnVmZmVyTWF4PT09TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkJ1ZmZlckV4dGVuc2lvbnMuQlVGRkVSX1NJWkVfUkVRVUlSRUQ/KGI9YSxlfHxjfHwobz1oLmNhbGwoaikpLFEud2hlbihvKS50aGVuKGZ1bmN0aW9uKGEpe2EmJihiPW0/TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkJ1ZmZlckV4dGVuc2lvbnMuQlVGRkVSX1RJTUVfQVRfVE9QX1FVQUxJVFlfTE9OR19GT1JNOk1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJFeHRlbnNpb25zLkJVRkZFUl9USU1FX0FUX1RPUF9RVUFMSVRZKSxpPWIrZCtNYXRoLm1heChnLmNhbGwoaixrKSxnLmNhbGwoaixsKSksbi5yZXNvbHZlKGkpfSkpOm4ucmVqZWN0KFwiaW52YWxpZCBidWZmZXJNYXggdmFsdWU6IFwiK2ouYnVmZmVyTWF4KSxuLnByb21pc2V9LGdldEJ1ZmZlclRhcmdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1iP2E6Yn19fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucy5CVUZGRVJfU0laRV9SRVFVSVJFRD1cInJlcXVpcmVkXCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkJ1ZmZlckV4dGVuc2lvbnMuQlVGRkVSX1NJWkVfTUlOPVwibWluXCIsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkJ1ZmZlckV4dGVuc2lvbnMuQlVGRkVSX1NJWkVfSU5GSU5JVFk9XCJpbmZpbml0eVwiLE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJFeHRlbnNpb25zLkJVRkZFUl9USU1FX0FUX1NUQVJUVVA9MSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucy5ERUZBVUxUX01JTl9CVUZGRVJfVElNRT04LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJFeHRlbnNpb25zLkJVRkZFUl9USU1FX0FUX1RPUF9RVUFMSVRZPTMwLE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5CdWZmZXJFeHRlbnNpb25zLkJVRkZFUl9USU1FX0FUX1RPUF9RVUFMSVRZX0xPTkdfRk9STT0zMDAsTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkJ1ZmZlckV4dGVuc2lvbnMuTE9OR19GT1JNX0NPTlRFTlRfRFVSQVRJT05fVEhSRVNIT0xEPTYwMCxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuQnVmZmVyRXh0ZW5zaW9ucy5wcm90b3R5cGUuY29uc3RydWN0b3I9TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkJ1ZmZlckV4dGVuc2lvbnMsTWVkaWFQbGF5ZXIudXRpbHMuQ2FwYWJpbGl0aWVzPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCJ9LE1lZGlhUGxheWVyLnV0aWxzLkNhcGFiaWxpdGllcy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLnV0aWxzLkNhcGFiaWxpdGllcyxzdXBwb3J0c01lZGlhU291cmNlOmZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9XCJXZWJLaXRNZWRpYVNvdXJjZVwiaW4gd2luZG93LGI9XCJNZWRpYVNvdXJjZVwiaW4gd2luZG93O3JldHVybiBhfHxifSxzdXBwb3J0c01lZGlhS2V5czpmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhPVwiV2ViS2l0TWVkaWFLZXlzXCJpbiB3aW5kb3csYj1cIk1TTWVkaWFLZXlzXCJpbiB3aW5kb3csYz1cIk1lZGlhS2V5c1wiaW4gd2luZG93O3JldHVybiBhfHxifHxjfSxzdXBwb3J0c0NvZGVjOmZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7aWYoIShhIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCkpdGhyb3dcImVsZW1lbnQgbXVzdCBiZSBvZiB0eXBlIEhUTUxWaWRlb0VsZW1lbnQuXCI7dmFyIGM9YS5jYW5QbGF5VHlwZShiKTtyZXR1cm5cInByb2JhYmx5XCI9PT1jfX0sTWVkaWFQbGF5ZXIudXRpbHMuRGVidWc9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYT0hMDtyZXR1cm57ZXZlbnRCdXM6dm9pZCAwLHNldExvZ1RvQnJvd3NlckNvbnNvbGU6ZnVuY3Rpb24oYil7YT1ifSxnZXRMb2dUb0Jyb3dzZXJDb25zb2xlOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LGxvZzpmdW5jdGlvbihiKXthJiZjb25zb2xlLmxvZyhiKSx0aGlzLmV2ZW50QnVzLmRpc3BhdGNoRXZlbnQoe3R5cGU6XCJsb2dcIixtZXNzYWdlOmJ9KX19fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuRXJyb3JIYW5kbGVyPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJue2V2ZW50QnVzOnZvaWQgMCxjYXBhYmlsaXR5RXJyb3I6ZnVuY3Rpb24oYSl7dGhpcy5ldmVudEJ1cy5kaXNwYXRjaEV2ZW50KHt0eXBlOlwiZXJyb3JcIixlcnJvcjpcImNhcGFiaWxpdHlcIixldmVudDphfSl9LGRvd25sb2FkRXJyb3I6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuZXZlbnRCdXMuZGlzcGF0Y2hFdmVudCh7dHlwZTpcImVycm9yXCIsZXJyb3I6XCJkb3dubG9hZFwiLGV2ZW50OntpZDphLHVybDpiLHJlcXVlc3Q6Y319KX0sbWFuaWZlc3RFcnJvcjpmdW5jdGlvbihhLGIsYyl7dGhpcy5ldmVudEJ1cy5kaXNwYXRjaEV2ZW50KHt0eXBlOlwiZXJyb3JcIixlcnJvcjpcIm1hbmlmZXN0RXJyb3JcIixldmVudDp7bWVzc2FnZTphLGlkOmIsbWFuaWZlc3Q6Y319KX0sbWVkaWFTb3VyY2VFcnJvcjpmdW5jdGlvbihhKXt0aGlzLmV2ZW50QnVzLmRpc3BhdGNoRXZlbnQoe3R5cGU6XCJlcnJvclwiLGVycm9yOlwibWVkaWFzb3VyY2VcIixldmVudDphfSl9LG1lZGlhS2V5U2Vzc2lvbkVycm9yOmZ1bmN0aW9uKGEpe3RoaXMuZXZlbnRCdXMuZGlzcGF0Y2hFdmVudCh7dHlwZTpcImVycm9yXCIsZXJyb3I6XCJrZXlfc2Vzc2lvblwiLGV2ZW50OmF9KX0sbWVkaWFLZXlNZXNzYWdlRXJyb3I6ZnVuY3Rpb24oYSl7dGhpcy5ldmVudEJ1cy5kaXNwYXRjaEV2ZW50KHt0eXBlOlwiZXJyb3JcIixlcnJvcjpcImtleV9tZXNzYWdlXCIsZXZlbnQ6YX0pfSxtZWRpYUtleVN5c3RlbVNlbGVjdGlvbkVycm9yOmZ1bmN0aW9uKGEpe3RoaXMuZXZlbnRCdXMuZGlzcGF0Y2hFdmVudCh7dHlwZTpcImVycm9yXCIsZXJyb3I6XCJrZXlfc3lzdGVtX3NlbGVjdGlvblwiLGV2ZW50OmF9KX19fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuRXJyb3JIYW5kbGVyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkVycm9ySGFuZGxlcn0sTWVkaWFQbGF5ZXIudXRpbHMuRXZlbnRCdXM9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYSxiPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9KGM/XCIxXCI6XCIwXCIpK2I7cmV0dXJuIGQgaW4gYXx8KGFbZF09W10pLGFbZF19LGM9ZnVuY3Rpb24oKXthPXt9fTtyZXR1cm4gYygpLHthZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1iKGEsZCksZj1lLmluZGV4T2YoYyk7LTE9PT1mJiZlLnB1c2goYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWIoYSxkKSxmPWUuaW5kZXhPZihjKTstMSE9PWYmJmUuc3BsaWNlKGYsMSl9LGRpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPWIoYS50eXBlLCExKS5zbGljZSgpLGQ9MDtkPGMubGVuZ3RoO2QrKyljW2RdLmNhbGwodGhpcyxhKTtyZXR1cm4hYS5kZWZhdWx0UHJldmVudGVkfX19LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5GcmFnbWVudENvbnRyb2xsZXI9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYT1bXSxiPWZ1bmN0aW9uKGIpe2Zvcih2YXIgYz1hLmxlbmd0aCxkPTA7Yz5kO2QrKylpZihhW2RdLmdldENvbnRleHQoKT09YilyZXR1cm4gYVtkXTtyZXR1cm4gbnVsbH0sYz1mdW5jdGlvbigpe2Zvcih2YXIgYj0hMCxjPWEubGVuZ3RoLGQ9MDtjPmQ7ZCsrKWlmKCFhW2RdLmlzUmVhZHkoKSl7Yj0hMTticmVha31yZXR1cm4gYn0sZD1mdW5jdGlvbigpe2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKWFbYl0uZXhlY3V0ZUN1cnJlbnRSZXF1ZXN0KCl9O3JldHVybntzeXN0ZW06dm9pZCAwLGRlYnVnOnZvaWQgMCxwcm9jZXNzOmZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7cmV0dXJuIG51bGwhPT1hJiZ2b2lkIDAhPT1hJiZhLmJ5dGVMZW5ndGg+MCYmKGI9bmV3IFVpbnQ4QXJyYXkoYSkpLFEud2hlbihiKX0sYXR0YWNoQnVmZmVyQ29udHJvbGxlcjpmdW5jdGlvbihjKXtpZighYylyZXR1cm4gbnVsbDt2YXIgZD1iKGMpO3JldHVybiBkfHwoZD10aGlzLnN5c3RlbS5nZXRPYmplY3QoXCJmcmFnbWVudE1vZGVsXCIpLGQuc2V0Q29udGV4dChjKSxhLnB1c2goZCkpLGR9LGRldGFjaEJ1ZmZlckNvbnRyb2xsZXI6ZnVuY3Rpb24oYil7dmFyIGM9YS5pbmRleE9mKGIpO2M+LTEmJmEuc3BsaWNlKGMsMSl9LG9uQnVmZmVyQ29udHJvbGxlclN0YXRlQ2hhbmdlOmZ1bmN0aW9uKCl7YygpJiZkLmNhbGwodGhpcyl9LGlzRnJhZ21lbnRMb2FkZWRPclBlbmRpbmc6ZnVuY3Rpb24oYSxjKXt2YXIgZCxlPWIoYSk7cmV0dXJuIGU/ZD1lLmlzRnJhZ21lbnRMb2FkZWRPclBlbmRpbmcoYyk6ITF9LGdldFBlbmRpbmdSZXF1ZXN0czpmdW5jdGlvbihhKXt2YXIgYz1iKGEpO3JldHVybiBjP2MuZ2V0UGVuZGluZ1JlcXVlc3RzKCk6bnVsbH0sZ2V0TG9hZGluZ1JlcXVlc3RzOmZ1bmN0aW9uKGEpe3ZhciBjPWIoYSk7cmV0dXJuIGM/Yy5nZXRMb2FkaW5nUmVxdWVzdHMoKTpudWxsfSxpc0luaXRpYWxpemF0aW9uUmVxdWVzdDpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS50eXBlJiZcImluaXRpYWxpemF0aW9uIHNlZ21lbnRcIj09PWEudHlwZS50b0xvd2VyQ2FzZSgpfSxnZXRMb2FkaW5nVGltZTpmdW5jdGlvbihhKXt2YXIgYz1iKGEpO3JldHVybiBjP2MuZ2V0TG9hZGluZ1RpbWUoKTpudWxsfSxnZXRFeGVjdXRlZFJlcXVlc3RGb3JUaW1lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE/YS5nZXRFeGVjdXRlZFJlcXVlc3RGb3JUaW1lKGIpOm51bGx9LHJlbW92ZUV4ZWN1dGVkUmVxdWVzdDpmdW5jdGlvbihhLGIpe2EmJmEucmVtb3ZlRXhlY3V0ZWRSZXF1ZXN0KGIpfSxyZW1vdmVFeGVjdXRlZFJlcXVlc3RzQmVmb3JlVGltZTpmdW5jdGlvbihhLGIpe2EmJmEucmVtb3ZlRXhlY3V0ZWRSZXF1ZXN0c0JlZm9yZVRpbWUoYil9LGNhbmNlbFBlbmRpbmdSZXF1ZXN0c0Zvck1vZGVsOmZ1bmN0aW9uKGEpe2EmJmEuY2FuY2VsUGVuZGluZ1JlcXVlc3RzKCl9LGFib3J0UmVxdWVzdHNGb3JNb2RlbDpmdW5jdGlvbihhKXthJiZhLmFib3J0UmVxdWVzdHMoKX0scHJlcGFyZUZyYWdtZW50Rm9yTG9hZGluZzpmdW5jdGlvbihhLGMsZCxlLGYsZyl7dmFyIGg9YihhKTtyZXR1cm4gaCYmYyYmIXRoaXMuaXNGcmFnbWVudExvYWRlZE9yUGVuZGluZyhhLGMpPyhoLmFkZFJlcXVlc3QoYyksaC5zZXRDYWxsYmFja3MoZCxlLGYsZyksUS53aGVuKCEwKSk6US53aGVuKG51bGwpfX19LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5GcmFnbWVudENvbnRyb2xsZXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuRnJhZ21lbnRDb250cm9sbGVyfSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuRnJhZ21lbnRMb2FkZXI9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYT0zLGI9NTAwLGM9W10sZD1mdW5jdGlvbihhLGUpe3ZhciBmPW5ldyBYTUxIdHRwUmVxdWVzdCxnPW51bGwsaD0hMCxpPSEwLGo9dGhpcztjLnB1c2goZiksYS5yZXF1ZXN0U3RhcnREYXRlPW5ldyBEYXRlLGEuZmlyc3RCeXRlRGF0ZT1hLnJlcXVlc3RTdGFydERhdGUsZi5vcGVuKFwiR0VUXCIsYS51cmwsITApLGYucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIixhLnJhbmdlJiZmLnNldFJlcXVlc3RIZWFkZXIoXCJSYW5nZVwiLFwiYnl0ZXM9XCIrYS5yYW5nZSksZi5vbnByb2dyZXNzPWZ1bmN0aW9uKGIpe2gmJihoPSExLCghYi5sZW5ndGhDb21wdXRhYmxlfHxiLmxlbmd0aENvbXB1dGFibGUmJmIudG90YWwhPWIubG9hZGVkKSYmKGEuZmlyc3RCeXRlRGF0ZT1uZXcgRGF0ZSkpfSxmLm9ubG9hZD1mdW5jdGlvbigpe2lmKCEoZi5zdGF0dXM8MjAwfHxmLnN0YXR1cz4yOTkpKXtpPSExLGEucmVxdWVzdEVuZERhdGU9bmV3IERhdGU7dmFyIGI9YS5yZXF1ZXN0RW5kRGF0ZSxjPWYucmVzcG9uc2UsZD1hLmZpcnN0Qnl0ZURhdGUuZ2V0VGltZSgpLWEucmVxdWVzdFN0YXJ0RGF0ZS5nZXRUaW1lKCksZT1hLnJlcXVlc3RFbmREYXRlLmdldFRpbWUoKS1hLmZpcnN0Qnl0ZURhdGUuZ2V0VGltZSgpLGg9YS5yZXF1ZXN0RW5kRGF0ZS5nZXRUaW1lKCktYS5yZXF1ZXN0U3RhcnREYXRlLmdldFRpbWUoKTtqLmRlYnVnLmxvZyhcInNlZ21lbnQgbG9hZGVkOiAoXCIrZi5zdGF0dXMrXCIsIFwiK2QrXCJtcywgXCIrZStcIm1zLCBcIitoK1wibXMpIFwiK2EudXJsKSxnPWoubWV0cmljc01vZGVsLmFkZEh0dHBSZXF1ZXN0KGEuc3RyZWFtVHlwZSxudWxsLGEudHlwZSxhLnVybCxudWxsLGEucmFuZ2UsYS5yZXF1ZXN0U3RhcnREYXRlLGEuZmlyc3RCeXRlRGF0ZSxhLnJlcXVlc3RFbmREYXRlLGYuc3RhdHVzLG51bGwsYS5kdXJhdGlvbiksai5tZXRyaWNzTW9kZWwuYXBwZW5kSHR0cFRyYWNlKGcsYiwobmV3IERhdGUpLmdldFRpbWUoKS1iLmdldFRpbWUoKSxbYy5ieXRlTGVuZ3RoXSksYS5kZWZlcnJlZC5yZXNvbHZlKHtkYXRhOmMscmVxdWVzdDphfSl9fSxmLm9ubG9hZGVuZD1mLm9uZXJyb3I9ZnVuY3Rpb24oKXtpZigtMSE9PWMuaW5kZXhPZihmKSYmKGMuc3BsaWNlKGMuaW5kZXhPZihmKSwxKSxpKSl7aT0hMSxhLnJlcXVlc3RFbmREYXRlPW5ldyBEYXRlO3ZhciBoPWEuZmlyc3RCeXRlRGF0ZS5nZXRUaW1lKCktYS5yZXF1ZXN0U3RhcnREYXRlLmdldFRpbWUoKSxrPWEucmVxdWVzdEVuZERhdGUuZ2V0VGltZSgpLWEuZmlyc3RCeXRlRGF0ZS5nZXRUaW1lKCksbD1hLnJlcXVlc3RFbmREYXRlLmdldFRpbWUoKS1hLnJlcXVlc3RTdGFydERhdGUuZ2V0VGltZSgpO2ouZGVidWcubG9nKFwic2VnbWVudCBsb2FkZWQ6IChcIitmLnN0YXR1cytcIiwgXCIraCtcIm1zLCBcIitrK1wibXMsIFwiK2wrXCJtcykgXCIrYS51cmwpLGc9ai5tZXRyaWNzTW9kZWwuYWRkSHR0cFJlcXVlc3QoYS5zdHJlYW1UeXBlLG51bGwsYS50eXBlLGEudXJsLG51bGwsYS5yYW5nZSxhLnJlcXVlc3RTdGFydERhdGUsYS5maXJzdEJ5dGVEYXRlLGEucmVxdWVzdEVuZERhdGUsZi5zdGF0dXMsbnVsbCxhLmR1cmF0aW9uKSxlPjA/KGouZGVidWcubG9nKFwiRmFpbGVkIGxvYWRpbmcgc2VnbWVudDogXCIrYS51cmwrXCIsIHJldHJ5IGluIFwiK2IrXCJtc1wiK1wiIGF0dGVtcHRzOiBcIitlKSxlLS0sc2V0VGltZW91dChmdW5jdGlvbigpe2QuY2FsbChqLGEsZSl9LGIpKTooai5kZWJ1Zy5sb2coXCJGYWlsZWQgbG9hZGluZyBzZWdtZW50OiBcIithLnVybCtcIiBubyByZXRyeSBhdHRlbXB0cyBsZWZ0XCIpLGouZXJySGFuZGxlci5kb3dubG9hZEVycm9yKFwiY29udGVudFwiLGEudXJsLGYpLGEuZGVmZXJyZWQucmVqZWN0KGYpKX19LGYuc2VuZCgpfTtyZXR1cm57bWV0cmljc01vZGVsOnZvaWQgMCxlcnJIYW5kbGVyOnZvaWQgMCxkZWJ1Zzp2b2lkIDAsbG9hZDpmdW5jdGlvbihiKXtyZXR1cm4gYj8oYi5kZWZlcnJlZD1RLmRlZmVyKCksZC5jYWxsKHRoaXMsYixhKSxiLmRlZmVycmVkLnByb21pc2UpOlEud2hlbihudWxsKX0sYWJvcnQ6ZnVuY3Rpb24oKXt2YXIgYSxiLGQ9Yy5sZW5ndGg7Zm9yKGE9MDtkPmE7YSs9MSliPWNbYV0sY1thXT1udWxsLGIuYWJvcnQoKSxiPW51bGw7Yz1bXX19fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuRnJhZ21lbnRMb2FkZXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuRnJhZ21lbnRMb2FkZXJ9LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5GcmFnbWVudE1vZGVsPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGEsYixjLGQsZSxmPVtdLGc9W10saD1bXSxpPTUsaj1mdW5jdGlvbihlKXt2YXIgZyxpPXRoaXM7Yi5jYWxsKGEsZSksZz1mdW5jdGlvbihiLGQpe2guc3BsaWNlKGguaW5kZXhPZihiKSwxKSxmLnB1c2goYiksYy5jYWxsKGEsYixkKSxiLmRlZmVycmVkPW51bGx9LGkuZnJhZ21lbnRMb2FkZXIubG9hZChlKS50aGVuKGcuYmluZChhLGUpLGQuYmluZChhLGUpKX0saz1mdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIGFbYl08Y1tiXT8tMTphW2JdPmNbYl0/MTowfTthLnNvcnQoYyl9LGw9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9YS5sZW5ndGgtMTtmb3IoZD1lO2Q+PTA7ZC09MSlpZihjPWFbZF0sYy51cmw9PT1iLnVybCYmYy5zdGFydFRpbWU9PT1iLnN0YXJ0VGltZSlyZXR1cm4hMDtyZXR1cm4hMX0sbT1mdW5jdGlvbihhKXt2YXIgYj1mLmluZGV4T2YoYSk7LTEhPT1iJiZmLnNwbGljZShiLDEpfTtyZXR1cm57c3lzdGVtOnZvaWQgMCxkZWJ1Zzp2b2lkIDAsZnJhZ21lbnRMb2FkZXI6dm9pZCAwLHNldENvbnRleHQ6ZnVuY3Rpb24oYil7YT1ifSxnZXRDb250ZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LGFkZFJlcXVlc3Q6ZnVuY3Rpb24oYSl7YSYmKGcucHVzaChhKSxrLmNhbGwodGhpcyxnLFwiaW5kZXhcIikpfSxzZXRDYWxsYmFja3M6ZnVuY3Rpb24oYSxmLGcsaCl7Yj1hLGU9aCxkPWcsYz1mfSxpc0ZyYWdtZW50TG9hZGVkT3JQZW5kaW5nOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjPXRoaXMsZD0hMSxlPWYubGVuZ3RoLTEsaT1lO2k+PTA7aS09MSlpZihiPWZbaV0sYS5zdGFydFRpbWU9PT1iLnN0YXJ0VGltZXx8XCJjb21wbGV0ZVwiPT09Yi5hY3Rpb24mJmEuYWN0aW9uPT09Yi5hY3Rpb24pe2lmKGMuZGVidWcubG9nKGEuc3RyZWFtVHlwZStcIiBGcmFnbWVudCBhbHJlYWR5IGxvYWRlZCBmb3IgdGltZTogXCIrYS5zdGFydFRpbWUpLGEudXJsPT09Yi51cmwpe2MuZGVidWcubG9nKGEuc3RyZWFtVHlwZStcIiBGcmFnbWVudCB1cmwgYWxyZWFkeSBsb2FkZWQ6IFwiK2EudXJsKSxkPSEwO2JyZWFrfW0oYSl9cmV0dXJuIGR8fChkPWwuY2FsbChjLGcsYSl8fGwuY2FsbChjLGgsYSkpLGR9LGlzUmVhZHk6ZnVuY3Rpb24oKXtyZXR1cm4gYS5pc1JlYWR5KCl9LGdldFBlbmRpbmdSZXF1ZXN0czpmdW5jdGlvbigpe3JldHVybiBnfSxnZXRMb2FkaW5nUmVxdWVzdHM6ZnVuY3Rpb24oKXtyZXR1cm4gaH0sZ2V0TG9hZGluZ1RpbWU6ZnVuY3Rpb24oKXt2YXIgYSxiLGM9MDtmb3IoYj1mLmxlbmd0aC0xO2I+PTA7Yi09MSlpZihhPWZbYl0sYS5yZXF1ZXN0RW5kRGF0ZSBpbnN0YW5jZW9mIERhdGUmJmEuZmlyc3RCeXRlRGF0ZSBpbnN0YW5jZW9mIERhdGUpe2M9YS5yZXF1ZXN0RW5kRGF0ZS5nZXRUaW1lKCktYS5maXJzdEJ5dGVEYXRlLmdldFRpbWUoKTticmVha31yZXR1cm4gY30sZ2V0RXhlY3V0ZWRSZXF1ZXN0Rm9yVGltZTpmdW5jdGlvbihhKXt2YXIgYixjPWYubGVuZ3RoLTEsZD0wLzAsZT0wLzAsZz1udWxsO2ZvcihiPWM7Yj49MDtiLT0xKWlmKGc9ZltiXSxkPWcuc3RhcnRUaW1lLGU9ZCtnLmR1cmF0aW9uLCFpc05hTihkKSYmIWlzTmFOKGUpJiZhPmQmJmU+YSlyZXR1cm4gZztyZXR1cm4gbnVsbH0scmVtb3ZlRXhlY3V0ZWRSZXF1ZXN0OmZ1bmN0aW9uKGEpe20uY2FsbCh0aGlzLGEpfSxyZW1vdmVFeGVjdXRlZFJlcXVlc3RzQmVmb3JlVGltZTpmdW5jdGlvbihhKXt2YXIgYixjPWYubGVuZ3RoLTEsZD0wLzAsZT1udWxsO2ZvcihiPWM7Yj49MDtiLT0xKWU9ZltiXSxkPWUuc3RhcnRUaW1lLCFpc05hTihkKSYmYT5kJiZtLmNhbGwodGhpcyxlKX0sY2FuY2VsUGVuZGluZ1JlcXVlc3RzOmZ1bmN0aW9uKCl7Zz1bXX0sYWJvcnRSZXF1ZXN0czpmdW5jdGlvbigpe3RoaXMuZnJhZ21lbnRMb2FkZXIuYWJvcnQoKSxoPVtdfSxleGVjdXRlQ3VycmVudFJlcXVlc3Q6ZnVuY3Rpb24oKXt2YXIgYixjPXRoaXM7aWYoMCE9PWcubGVuZ3RoJiYhKGgubGVuZ3RoPj1pKSlzd2l0Y2goYj1nLnNoaWZ0KCksYi5hY3Rpb24pe2Nhc2VcImNvbXBsZXRlXCI6Zi5wdXNoKGIpLGUuY2FsbChhLGIpO2JyZWFrO2Nhc2VcImRvd25sb2FkXCI6aC5wdXNoKGIpLGouY2FsbChjLGIpO2JyZWFrO2RlZmF1bHQ6dGhpcy5kZWJ1Zy5sb2coXCJVbmtub3duIHJlcXVlc3QgYWN0aW9uLlwiKX19fX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLkZyYWdtZW50TW9kZWwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuRnJhZ21lbnRNb2RlbH0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLk1hbmlmZXN0TG9hZGVyPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9MyxiPTUwMCxjPW51bGwsZD1mdW5jdGlvbihhKXt2YXIgYj1udWxsO3JldHVybi0xIT09YS5pbmRleE9mKFwiL1wiKSYmKGI9YS5zdWJzdHJpbmcoMCxhLmxhc3RJbmRleE9mKFwiL1wiKSsxKSksYn0sZT1mdW5jdGlvbihhLGYpe3ZhciBnPWQoYSksaD1uZXcgWE1MSHR0cFJlcXVlc3QsaT1uZXcgRGF0ZSxqPSEwLGs9dGhpczt0aGlzLmRlYnVnLmxvZyhcIlN0YXJ0IGxvYWRpbmcgbWFuaWZlc3Q6IFwiK2EpLGgub3BlbihcIkdFVFwiLGEsITApLGgub25sb2FkPWZ1bmN0aW9uKCl7aC5zdGF0dXM8MjAwfHxoLnN0YXR1cz4yOTl8fChqPSExLGsubWV0cmljc01vZGVsLmFkZEh0dHBSZXF1ZXN0KFwic3RyZWFtXCIsbnVsbCxcIk1QRFwiLGEsbnVsbCxudWxsLGksbmV3IERhdGUsaC5zdGF0dXMsbnVsbCxudWxsKSxrLnBhcnNlci5wYXJzZShoLnJlc3BvbnNlVGV4dCxnKS50aGVuKGZ1bmN0aW9uKGIpe2IubXBkVXJsPWEsYy5yZXNvbHZlKGIpfSxmdW5jdGlvbigpe2MucmVqZWN0KGgpfSkpfSxoLm9ubG9hZGVuZD1oLm9uZXJyb3I9ZnVuY3Rpb24oKXtqJiYoaj0hMSxrLm1ldHJpY3NNb2RlbC5hZGRIdHRwUmVxdWVzdChcInN0cmVhbVwiLG51bGwsXCJNUERcIixhLG51bGwsbnVsbCxpLG5ldyBEYXRlLGguc3RhdHVzLG51bGwsbnVsbCksZj4wPyhrLmRlYnVnLmxvZyhcIkZhaWxlZCBsb2FkaW5nIG1hbmlmZXN0OiBcIithK1wiLCByZXRyeSBpbiBcIitiK1wibXNcIitcIiBhdHRlbXB0czogXCIrZiksZi0tLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmNhbGwoayxhLGYpfSxiKSk6KGsuZGVidWcubG9nKFwiRmFpbGVkIGxvYWRpbmcgbWFuaWZlc3Q6IFwiK2ErXCIgbm8gcmV0cnkgYXR0ZW1wdHMgbGVmdFwiKSxrLmVyckhhbmRsZXIuZG93bmxvYWRFcnJvcihcIm1hbmlmZXN0XCIsYSxoKSxjLnJlamVjdChoKSkpfSxoLnNlbmQoKX07cmV0dXJue2RlYnVnOnZvaWQgMCxwYXJzZXI6dm9pZCAwLGVyckhhbmRsZXI6dm9pZCAwLG1ldHJpY3NNb2RlbDp2b2lkIDAsbG9hZDpmdW5jdGlvbihiKXtyZXR1cm4gYz1RLmRlZmVyKCksZS5jYWxsKHRoaXMsYixhKSxjLnByb21pc2V9fX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLk1hbmlmZXN0TG9hZGVyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLk1hbmlmZXN0TG9hZGVyfSxNZWRpYVBsYXllci5tb2RlbHMuTWFuaWZlc3RNb2RlbD1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhO3JldHVybntnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiBhfSxzZXRWYWx1ZTpmdW5jdGlvbihiKXthPWJ9fX0sTWVkaWFQbGF5ZXIubW9kZWxzLk1hbmlmZXN0TW9kZWwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5tb2RlbHMuTWFuaWZlc3RNb2RlbH0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLk1hbmlmZXN0VXBkYXRlcj1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhPTAvMCxiPW51bGwsYz1udWxsLGQ9ZnVuY3Rpb24oKXtudWxsIT09YiYmKGNsZWFySW50ZXJ2YWwoYiksYj1udWxsKX0sZT1mdW5jdGlvbigpe2QuY2FsbCh0aGlzKSxpc05hTihhKXx8KHRoaXMuZGVidWcubG9nKFwiUmVmcmVzaCBtYW5pZmVzdCBpbiBcIithK1wiIHNlY29uZHMuXCIpLGI9c2V0SW50ZXJ2YWwoYy5iaW5kKHRoaXMpLDFlMyphLHRoaXMpKX0sZj1mdW5jdGlvbigpe3ZhciBiPXRoaXMsYz1iLm1hbmlmZXN0TW9kZWwuZ2V0VmFsdWUoKTt2b2lkIDAhPT1jJiZudWxsIT09YyYmYi5tYW5pZmVzdEV4dC5nZXRSZWZyZXNoRGVsYXkoYykudGhlbihmdW5jdGlvbihjKXthPWMsZS5jYWxsKGIpfSl9O3JldHVybiBjPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEubWFuaWZlc3RNb2RlbC5nZXRWYWx1ZSgpLGM9Yi5tcGRVcmw7Yi5oYXNPd25Qcm9wZXJ0eShcIkxvY2F0aW9uXCIpJiYoYz1iLkxvY2F0aW9uKSxhLmRlYnVnLmxvZyhcIlJlZnJlc2ggbWFuaWZlc3QgQCBcIitjKSxhLm1hbmlmZXN0TG9hZGVyLmxvYWQoYykudGhlbihmdW5jdGlvbihiKXthLm1hbmlmZXN0TW9kZWwuc2V0VmFsdWUoYiksYS5kZWJ1Zy5sb2coXCJNYW5pZmVzdCBoYXMgYmVlbiByZWZyZXNoZWQuXCIpLGEuZGVidWcubG9nKGIpLGYuY2FsbChhKSxhLnN5c3RlbS5ub3RpZnkoXCJtYW5pZmVzdFVwZGF0ZWRcIil9KX0se2RlYnVnOnZvaWQgMCxzeXN0ZW06dm9pZCAwLG1hbmlmZXN0TW9kZWw6dm9pZCAwLG1hbmlmZXN0RXh0OnZvaWQgMCxtYW5pZmVzdExvYWRlcjp2b2lkIDAsc2V0dXA6ZnVuY3Rpb24oKXtmLmNhbGwodGhpcyl9LGluaXQ6ZnVuY3Rpb24oKXtmLmNhbGwodGhpcyl9LHN0b3A6ZnVuY3Rpb24oKXtkLmNhbGwodGhpcyl9fX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLk1hbmlmZXN0VXBkYXRlci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5NYW5pZmVzdFVwZGF0ZXJ9LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5NZWRpYVNvdXJjZUV4dGVuc2lvbnM9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIn0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLk1lZGlhU291cmNlRXh0ZW5zaW9ucy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5NZWRpYVNvdXJjZUV4dGVuc2lvbnMsY3JlYXRlTWVkaWFTb3VyY2U6ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYT1cIldlYktpdE1lZGlhU291cmNlXCJpbiB3aW5kb3csYj1cIk1lZGlhU291cmNlXCJpbiB3aW5kb3c7cmV0dXJuIGI/US53aGVuKG5ldyBNZWRpYVNvdXJjZSk6YT9RLndoZW4obmV3IFdlYktpdE1lZGlhU291cmNlKTpudWxsfSxhdHRhY2hNZWRpYVNvdXJjZTpmdW5jdGlvbihhLGIpe1widXNlIHN0cmljdFwiO3JldHVybiBiLnNldFNvdXJjZSh3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChhKSksUS53aGVuKCEwKX0sZGV0YWNoTWVkaWFTb3VyY2U6ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGEuc2V0U291cmNlKFwiXCIpLFEud2hlbighMCl9LHNldER1cmF0aW9uOmZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGEuZHVyYXRpb249YixRLndoZW4oYS5kdXJhdGlvbil9LHNpZ25hbEVuZE9mU3RyZWFtOmZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO3JldHVybiBhLmVuZE9mU3RyZWFtKCksUS53aGVuKCEwKX19LE1lZGlhUGxheWVyLm1vZGVscy5NZXRyaWNzTW9kZWw9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtyZXR1cm57c3lzdGVtOnZvaWQgMCxzdHJlYW1NZXRyaWNzOnt9LGNsZWFyQ3VycmVudE1ldHJpY3NGb3JUeXBlOmZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLnN0cmVhbU1ldHJpY3NbYV19LGNsZWFyQWxsQ3VycmVudE1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbU1ldHJpY3M9e319LGdldFJlYWRPbmx5TWV0cmljc0ZvcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zdHJlYW1NZXRyaWNzLmhhc093blByb3BlcnR5KGEpP3RoaXMuc3RyZWFtTWV0cmljc1thXTpudWxsfSxnZXRNZXRyaWNzRm9yOmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiB0aGlzLnN0cmVhbU1ldHJpY3MuaGFzT3duUHJvcGVydHkoYSk/Yj10aGlzLnN0cmVhbU1ldHJpY3NbYV06KGI9dGhpcy5zeXN0ZW0uZ2V0T2JqZWN0KFwibWV0cmljc1wiKSx0aGlzLnN0cmVhbU1ldHJpY3NbYV09YiksYn0sYWRkVGNwQ29ubmVjdGlvbjpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9bmV3IE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuVENQQ29ubmVjdGlvbjtyZXR1cm4gZy50Y3BpZD1iLGcuZGVzdD1jLGcudG9wZW49ZCxnLnRjbG9zZT1lLGcudGNvbm5lY3Q9Zix0aGlzLmdldE1ldHJpY3NGb3IoYSkuVGNwTGlzdC5wdXNoKGcpLGd9LGFkZEh0dHBSZXF1ZXN0OmZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpLGosayxsKXt2YXIgbT1uZXcgTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5IVFRQUmVxdWVzdDtyZXR1cm4gbS50Y3BpZD1iLG0udHlwZT1jLG0udXJsPWQsbS5hY3R1YWx1cmw9ZSxtLnJhbmdlPWYsbS50cmVxdWVzdD1nLG0udHJlc3BvbnNlPWgsbS50ZmluaXNoPWksbS5yZXNwb25zZWNvZGU9aixtLmludGVydmFsPWssbS5tZWRpYWR1cmF0aW9uPWwsdGhpcy5nZXRNZXRyaWNzRm9yKGEpLkh0dHBMaXN0LnB1c2gobSksbX0sYXBwZW5kSHR0cFRyYWNlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW5ldyBNZWRpYVBsYXllci52by5tZXRyaWNzLkhUVFBSZXF1ZXN0LlRyYWNlO3JldHVybiBlLnM9YixlLmQ9YyxlLmI9ZCxhLnRyYWNlLnB1c2goZSksZX0sYWRkUmVwcmVzZW50YXRpb25Td2l0Y2g6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1uZXcgTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5SZXByZXNlbnRhdGlvblN3aXRjaDtyZXR1cm4gZi50PWIsZi5tdD1jLGYudG89ZCxmLmx0bz1lLHRoaXMuZ2V0TWV0cmljc0ZvcihhKS5SZXBTd2l0Y2hMaXN0LnB1c2goZiksZn0sYWRkQnVmZmVyTGV2ZWw6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPW5ldyBNZWRpYVBsYXllci52by5tZXRyaWNzLkJ1ZmZlckxldmVsO3JldHVybiBkLnQ9YixkLmxldmVsPWMsdGhpcy5nZXRNZXRyaWNzRm9yKGEpLkJ1ZmZlckxldmVsLnB1c2goZCksZH0sYWRkUGxheUxpc3Q6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bmV3IE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUGxheUxpc3Q7cmV0dXJuIGUuc3RhcnQ9YixlLm1zdGFydD1jLGUuc3RhcnR0eXBlPWQsdGhpcy5nZXRNZXRyaWNzRm9yKGEpLlBsYXlMaXN0LnB1c2goZSksZX0sYXBwZW5kUGxheUxpc3RUcmFjZTpmdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe3ZhciBpPW5ldyBNZWRpYVBsYXllci52by5tZXRyaWNzLlBsYXlMaXN0LlRyYWNlO3JldHVybiBpLnJlcHJlc2VudGF0aW9uaWQ9YixpLnN1YnJlcGxldmVsPWMsaS5zdGFydD1kLGkubXN0YXJ0PWUsaS5kdXJhdGlvbj1mLGkucGxheWJhY2tzcGVlZD1nLGkuc3RvcHJlYXNvbj1oLGEudHJhY2UucHVzaChpKSxpfX19LE1lZGlhUGxheWVyLm1vZGVscy5NZXRyaWNzTW9kZWwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5tb2RlbHMuTWV0cmljc01vZGVsfSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuUHJvdGVjdGlvbkNvbnRyb2xsZXI9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYT1udWxsLGI9bnVsbCxjPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7Yi5wcm90ZWN0aW9uTW9kZWwucmVtb3ZlS2V5U3lzdGVtKGEpfSxkPWZ1bmN0aW9uKGEsYyl7Zm9yKHZhciBkPXRoaXMsZT0wO2U8Yi5sZW5ndGg7KytlKWZvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7KytmKWlmKGJbZV0uaXNTdXBwb3J0ZWQoY1tmXSkmJmQucHJvdGVjdGlvbkV4dC5zdXBwb3J0c0NvZGVjKGJbZV0ua2V5c1R5cGVTdHJpbmcsYSkpe3ZhciBnPWQubWFuaWZlc3RFeHQuZ2V0S0lEKGNbZl0pO3JldHVybiBnfHwoZz1cInVua25vd25cIiksZC5wcm90ZWN0aW9uTW9kZWwuYWRkS2V5U3lzdGVtKGcsY1tmXSxiW2VdKSxkLmRlYnVnLmxvZyhcIkRSTTogU2VsZWN0ZWQgS2V5IFN5c3RlbTogXCIrYltlXS5rZXlzVHlwZVN0cmluZytcIiBGb3IgS0lEOiBcIitnKSxnfXRocm93IG5ldyBFcnJvcihcIkRSTTogVGhlIHByb3RlY3Rpb24gc3lzdGVtIGZvciB0aGlzIGNvbnRlbnQgaXMgbm90IHN1cHBvcnRlZC5cIil9LGU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMsZT1udWxsLGY9bnVsbDtkLnByb3RlY3Rpb25Nb2RlbC5uZWVkVG9BZGRLZXlTZXNzaW9uKGEpJiYoZj1kLnByb3RlY3Rpb25Nb2RlbC5nZXRJbml0RGF0YShhKSwhZiYmYz8oZj1jLGQuZGVidWcubG9nKFwiRFJNOiBVc2luZyBpbml0ZGF0YSBmcm9tIG5lZWRza2V5IGV2ZW50LiBsZW5ndGg6IFwiK2YubGVuZ3RoKSk6ZiYmZC5kZWJ1Zy5sb2coXCJEUk06IFVzaW5nIGluaXRkYXRhIGZyb20gcHJoZWFkZXIgaW4gbXBkLiBsZW5ndGg6IFwiK2YubGVuZ3RoKSxmPyhlPWQucHJvdGVjdGlvbk1vZGVsLmFkZEtleVNlc3Npb24oYSxiLGYpLGQuZGVidWcubG9nKFwiRFJNOiBBZGRlZCBLZXkgU2Vzc2lvbiBbXCIrZS5zZXNzaW9uSWQrXCJdIGZvciBLSUQ6IFwiK2ErXCIgdHlwZTogXCIrYitcIiBpbml0RGF0YSBsZW5ndGg6IFwiK2YubGVuZ3RoKSk6ZC5kZWJ1Zy5sb2coXCJEUk06IGluaXRkYXRhIGlzIG51bGwuXCIpKX0sZj1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmPXRoaXM7cmV0dXJuIGU9Zi5wcm90ZWN0aW9uTW9kZWwudXBkYXRlRnJvbU1lc3NhZ2UoYSxjLGQpLGUudGhlbihmdW5jdGlvbihhKXtiLnVwZGF0ZShhKX0pLGV9O3JldHVybntzeXN0ZW06dm9pZCAwLGRlYnVnOnZvaWQgMCxtYW5pZmVzdEV4dDp2b2lkIDAsY2FwYWJpbGl0aWVzOnZvaWQgMCx2aWRlb01vZGVsOnZvaWQgMCxwcm90ZWN0aW9uTW9kZWw6dm9pZCAwLHByb3RlY3Rpb25FeHQ6dm9pZCAwLHNldHVwOmZ1bmN0aW9uKCl7Yj10aGlzLnByb3RlY3Rpb25FeHQuZ2V0S2V5U3lzdGVtcygpfSxpbml0OmZ1bmN0aW9uKGIsYyl7dGhpcy52aWRlb01vZGVsPWIsdGhpcy5wcm90ZWN0aW9uTW9kZWw9YyxhPXRoaXMudmlkZW9Nb2RlbC5nZXRFbGVtZW50KClcclxufSxzZWxlY3RLZXlTeXN0ZW06ZCxlbnN1cmVLZXlTZXNzaW9uOmUsdXBkYXRlRnJvbU1lc3NhZ2U6Zix0ZWFyZG93bktleVN5c3RlbTpjfX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlByb3RlY3Rpb25Db250cm9sbGVyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlByb3RlY3Rpb25Db250cm9sbGVyfSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuUHJvdGVjdGlvbkV4dGVuc2lvbnM9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIn0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlByb3RlY3Rpb25FeHRlbnNpb25zLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlByb3RlY3Rpb25FeHRlbnNpb25zLHN1cHBvcnRzQ29kZWM6ZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjt2YXIgYz1cIldlYktpdE1lZGlhS2V5c1wiaW4gd2luZG93LGQ9XCJNU01lZGlhS2V5c1wiaW4gd2luZG93LGU9XCJNZWRpYUtleXNcImluIHdpbmRvdztyZXR1cm4gZT9NZWRpYUtleXMuaXNUeXBlU3VwcG9ydGVkKGEsYik6Yz9XZWJLaXRNZWRpYUtleXMuaXNUeXBlU3VwcG9ydGVkKGEsYik6ZD9NU01lZGlhS2V5cy5pc1R5cGVTdXBwb3J0ZWQoYSxiKTohMX0sY3JlYXRlTWVkaWFLZXlzOmZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO3ZhciBiPVwiV2ViS2l0TWVkaWFLZXlzXCJpbiB3aW5kb3csYz1cIk1TTWVkaWFLZXlzXCJpbiB3aW5kb3csZD1cIk1lZGlhS2V5c1wiaW4gd2luZG93O3JldHVybiBkP25ldyBNZWRpYUtleXMoYSk6Yj9uZXcgV2ViS2l0TWVkaWFLZXlzKGEpOmM/bmV3IE1TTWVkaWFLZXlzKGEpOm51bGx9LHNldE1lZGlhS2V5OmZ1bmN0aW9uKGEsYil7dmFyIGM9XCJXZWJLaXRTZXRNZWRpYUtleXNcImluIGEsZD1cIm1zU2V0TWVkaWFLZXlzXCJpbiBhLGU9XCJTZXRNZWRpYUtleXNcImluIGE7cmV0dXJuIGU/YS5TZXRNZWRpYUtleXMoYik6Yz9hLldlYktpdFNldE1lZGlhS2V5cyhiKTpkP2EubXNTZXRNZWRpYUtleXMoYik6KHRoaXMuZGVidWcubG9nKFwibm8gc2V0bWVkaWFrZXlzIGZ1bmN0aW9uIGluIGVsZW1lbnRcIiksdm9pZCAwKX0sY3JlYXRlU2Vzc2lvbjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEuY3JlYXRlU2Vzc2lvbihiLGMpfSxnZXRLZXlTeXN0ZW1zOmZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oYSxiKXt2YXIgYz1RLmRlZmVyKCksZD1udWxsLGU9W10sZj1uZXcgRE9NUGFyc2VyLGc9Zi5wYXJzZUZyb21TdHJpbmcoYSxcImFwcGxpY2F0aW9uL3htbFwiKTtpZighZy5nZXRFbGVtZW50c0J5VGFnTmFtZShcIkNoYWxsZW5nZVwiKVswXSlyZXR1cm4gYy5yZWplY3QoXCJEUk06IHBsYXlyZWFkeSB1cGRhdGUsIGNhbiBub3QgZmluZCBDaGFsbGVuZ2UgaW4ga2V5TWVzc2FnZVwiKSxjLnByb21pc2U7dmFyIGg9Zy5nZXRFbGVtZW50c0J5VGFnTmFtZShcIkNoYWxsZW5nZVwiKVswXS5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZTtoJiYoZD1CQVNFNjQuZGVjb2RlKGgpKTt2YXIgaT1nLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwibmFtZVwiKSxqPWcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ2YWx1ZVwiKTtpZihpLmxlbmd0aCE9ai5sZW5ndGgpcmV0dXJuIGMucmVqZWN0KFwiRFJNOiBwbGF5cmVhZHkgdXBkYXRlLCBpbnZhbGlkIGhlYWRlciBuYW1lL3ZhbHVlIHBhaXIgaW4ga2V5TWVzc2FnZVwiKSxjLnByb21pc2U7Zm9yKHZhciBrPTA7azxpLmxlbmd0aDtrKyspZVtrXT17bmFtZTppW2tdLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlLHZhbHVlOmpba10uY2hpbGROb2Rlc1swXS5ub2RlVmFsdWV9O3ZhciBsPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gbC5vbmxvYWQ9ZnVuY3Rpb24oKXsyMDA9PWwuc3RhdHVzP2MucmVzb2x2ZShuZXcgVWludDhBcnJheShsLnJlc3BvbnNlKSk6Yy5yZWplY3QoJ0RSTTogcGxheXJlYWR5IHVwZGF0ZSwgWEhSIHN0YXR1cyBpcyBcIicrbC5zdGF0dXNUZXh0KydcIiAoJytsLnN0YXR1cytcIiksIGV4cGVjdGVkIHRvIGJlIDIwMC4gcmVhZHlTdGF0ZSBpcyBcIitsLnJlYWR5U3RhdGUpfSxsLm9uYWJvcnQ9ZnVuY3Rpb24oKXtjLnJlamVjdCgnRFJNOiBwbGF5cmVhZHkgdXBkYXRlLCBYSFIgYWJvcnRlZC4gc3RhdHVzIGlzIFwiJytsLnN0YXR1c1RleHQrJ1wiICgnK2wuc3RhdHVzK1wiKSwgcmVhZHlTdGF0ZSBpcyBcIitsLnJlYWR5U3RhdGUpfSxsLm9uZXJyb3I9ZnVuY3Rpb24oKXtjLnJlamVjdCgnRFJNOiBwbGF5cmVhZHkgdXBkYXRlLCBYSFIgZXJyb3IuIHN0YXR1cyBpcyBcIicrbC5zdGF0dXNUZXh0KydcIiAoJytsLnN0YXR1cytcIiksIHJlYWR5U3RhdGUgaXMgXCIrbC5yZWFkeVN0YXRlKX0sbC5vcGVuKFwiUE9TVFwiLGIpLGwucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIixlJiZlLmZvckVhY2goZnVuY3Rpb24oYSl7bC5zZXRSZXF1ZXN0SGVhZGVyKGEubmFtZSxhLnZhbHVlKX0pLGwuc2VuZChkKSxjLnByb21pc2V9LGI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09PWEmJjA9PT1iLmxlbmd0aH0sYz1mdW5jdGlvbihhKXt2YXIgYj0wLGM9MCxkPTAsZT1uZXcgVWludDhBcnJheShbMTEyLDExNSwxMTUsMTA0LDAsMCwwLDBdKSxmPW5ldyBVaW50OEFycmF5KFsxNTQsNCwyNDAsMTIxLDE1Miw2NCw2NiwxMzQsMTcxLDE0NiwyMzAsOTEsMjI0LDEzNiw5NSwxNDldKSxnPW51bGwsaD1udWxsLGk9bnVsbCxqPW51bGw7aWYoXCJwcm9cImluIGEpZz1CQVNFNjQuZGVjb2RlQXJyYXkoYS5wcm8uX190ZXh0KTtlbHNle2lmKCEoXCJwcmhlYWRlclwiaW4gYSkpcmV0dXJuIG51bGw7Zz1CQVNFNjQuZGVjb2RlQXJyYXkoYS5wcmhlYWRlci5fX3RleHQpfXJldHVybiBjPWcubGVuZ3RoLGQ9NCtlLmxlbmd0aCtmLmxlbmd0aCs0K2MsaD1uZXcgQXJyYXlCdWZmZXIoZCksaT1uZXcgVWludDhBcnJheShoKSxqPW5ldyBEYXRhVmlldyhoKSxqLnNldFVpbnQzMihiLGQpLGIrPTQsaS5zZXQoZSxiKSxiKz1lLmxlbmd0aCxpLnNldChmLGIpLGIrPWYubGVuZ3RoLGouc2V0VWludDMyKGIsYyksYis9NCxpLnNldChnLGIpLGIrPWMsaX07cmV0dXJuW3tzY2hlbWVJZFVyaTpcInVybjp1dWlkOjlhMDRmMDc5LTk4NDAtNDI4Ni1hYjkyLWU2NWJlMDg4NWY5NVwiLGtleXNUeXBlU3RyaW5nOlwiY29tLm1pY3Jvc29mdC5wbGF5cmVhZHlcIixpc1N1cHBvcnRlZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zY2hlbWVJZFVyaT09PWEuc2NoZW1lSWRVcmkudG9Mb3dlckNhc2UoKX0sbmVlZFRvQWRkS2V5U2Vzc2lvbjpiLGdldEluaXREYXRhOmMsZ2V0VXBkYXRlOmF9LHtzY2hlbWVJZFVyaTpcInVybjptcGVnOmRhc2g6bXA0cHJvdGVjdGlvbjoyMDExXCIsa2V5c1R5cGVTdHJpbmc6XCJjb20ubWljcm9zb2Z0LnBsYXlyZWFkeVwiLGlzU3VwcG9ydGVkOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNjaGVtZUlkVXJpPT09YS5zY2hlbWVJZFVyaS50b0xvd2VyQ2FzZSgpJiZcImNlbmNcIj09PWEudmFsdWUudG9Mb3dlckNhc2UoKX0sbmVlZFRvQWRkS2V5U2Vzc2lvbjpiLGdldEluaXREYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGdldFVwZGF0ZTphfSx7c2NoZW1lSWRVcmk6XCJ1cm46dXVpZDowMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixrZXlzVHlwZVN0cmluZzpcIndlYmtpdC1vcmcudzMuY2xlYXJrZXlcIixpc1N1cHBvcnRlZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zY2hlbWVJZFVyaT09PWEuc2NoZW1lSWRVcmkudG9Mb3dlckNhc2UoKX0sbmVlZFRvQWRkS2V5U2Vzc2lvbjpmdW5jdGlvbigpe3JldHVybiEwfSxnZXRJbml0RGF0YTpmdW5jdGlvbigpe3JldHVybiBudWxsfSxnZXRVcGRhdGU6ZnVuY3Rpb24oYSl7cmV0dXJuIFEud2hlbihhKX19XX0sYWRkS2V5OmZ1bmN0aW9uKGEsYixjLGQsZSl7YS53ZWJraXRBZGRLZXkoYixjLGQsZSl9LGdlbmVyYXRlS2V5UmVxdWVzdDpmdW5jdGlvbihhLGIsYyl7YS53ZWJraXRHZW5lcmF0ZUtleVJlcXVlc3QoYixjKX0sbGlzdGVuVG9OZWVkS2V5OmZ1bmN0aW9uKGEsYil7YS5saXN0ZW4oXCJ3ZWJraXRuZWVka2V5XCIsYiksYS5saXN0ZW4oXCJtc25lZWRrZXlcIixiKSxhLmxpc3RlbihcIm5lZWRLZXlcIixiKX0sbGlzdGVuVG9LZXlFcnJvcjpmdW5jdGlvbihhLGIpe2EuYWRkRXZlbnRMaXN0ZW5lcihcIndlYmtpdGtleWVycm9yXCIsYiwhMSksYS5hZGRFdmVudExpc3RlbmVyKFwibXNrZXllcnJvclwiLGIsITEpLGEuYWRkRXZlbnRMaXN0ZW5lcihcImtleWVycm9yXCIsYiwhMSl9LGxpc3RlblRvS2V5TWVzc2FnZTpmdW5jdGlvbihhLGIpe2EuYWRkRXZlbnRMaXN0ZW5lcihcIndlYmtpdGtleW1lc3NhZ2VcIixiLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoXCJtc2tleW1lc3NhZ2VcIixiLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXltZXNzYWdlXCIsYiwhMSl9LGxpc3RlblRvS2V5QWRkZWQ6ZnVuY3Rpb24oYSxiKXthLmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJraXRrZXlhZGRlZFwiLGIsITEpLGEuYWRkRXZlbnRMaXN0ZW5lcihcIm1za2V5YWRkZWRcIixiLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlhZGRlZFwiLGIsITEpfSx1bmxpc3RlblRvS2V5RXJyb3I6ZnVuY3Rpb24oYSxiKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3ZWJraXRrZXllcnJvclwiLGIpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1za2V5ZXJyb3JcIixiKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXllcnJvclwiLGIpfSx1bmxpc3RlblRvS2V5TWVzc2FnZTpmdW5jdGlvbihhLGIpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndlYmtpdGtleW1lc3NhZ2VcIixiKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtc2tleW1lc3NhZ2VcIixiKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXltZXNzYWdlXCIsYil9LHVubGlzdGVuVG9LZXlBZGRlZDpmdW5jdGlvbihhLGIpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndlYmtpdGtleWFkZGVkXCIsYiksYS5yZW1vdmVFdmVudExpc3RlbmVyKFwibXNrZXlhZGRlZFwiLGIpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWFkZGVkXCIsYil9fSxNZWRpYVBsYXllci5tb2RlbHMuUHJvdGVjdGlvbk1vZGVsPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9bnVsbCxiPW51bGwsYz1udWxsLGQ9bnVsbCxlPVtdO3JldHVybntzeXN0ZW06dm9pZCAwLHZpZGVvTW9kZWw6dm9pZCAwLHByb3RlY3Rpb25FeHQ6dm9pZCAwLHNldHVwOmZ1bmN0aW9uKCl7YT10aGlzLnZpZGVvTW9kZWwuZ2V0RWxlbWVudCgpfSxpbml0OmZ1bmN0aW9uKGIpe3RoaXMudmlkZW9Nb2RlbD1iLGE9dGhpcy52aWRlb01vZGVsLmdldEVsZW1lbnQoKX0sYWRkS2V5U2Vzc2lvbjpmdW5jdGlvbihhLGYsZyl7dmFyIGg9bnVsbDtyZXR1cm4gaD10aGlzLnByb3RlY3Rpb25FeHQuY3JlYXRlU2Vzc2lvbihlW2FdLmtleXMsZixnKSx0aGlzLnByb3RlY3Rpb25FeHQubGlzdGVuVG9LZXlBZGRlZChoLGIpLHRoaXMucHJvdGVjdGlvbkV4dC5saXN0ZW5Ub0tleUVycm9yKGgsYyksdGhpcy5wcm90ZWN0aW9uRXh0Lmxpc3RlblRvS2V5TWVzc2FnZShoLGQpLGVbYV0uaW5pdERhdGE9ZyxlW2FdLmtleVNlc3Npb25zLnB1c2goaCksaH0sYWRkS2V5U3lzdGVtOmZ1bmN0aW9uKGIsYyxkKXt2YXIgZj1udWxsO2Y9dGhpcy5wcm90ZWN0aW9uRXh0LmNyZWF0ZU1lZGlhS2V5cyhkLmtleXNUeXBlU3RyaW5nKSx0aGlzLnByb3RlY3Rpb25FeHQuc2V0TWVkaWFLZXkoYSxmKSxlW2JdPXtrSUQ6Yixjb250ZW50UHJvdGVjdGlvbjpjLGtleVN5c3RlbTpkLGtleXM6Zixpbml0RGF0YTpudWxsLGtleVNlc3Npb25zOltdfX0scmVtb3ZlS2V5U3lzdGVtOmZ1bmN0aW9uKGEpe2lmKG51bGwhPT1hJiZ2b2lkIDAhPT1lW2FdJiYwIT09ZVthXS5rZXlTZXNzaW9ucy5sZW5ndGgpe2Zvcih2YXIgZj1lW2FdLmtleVNlc3Npb25zLGc9MDtnPGYubGVuZ3RoOysrZyl0aGlzLnByb3RlY3Rpb25FeHQudW5saXN0ZW5Ub0tleUVycm9yKGZbZ10sYyksdGhpcy5wcm90ZWN0aW9uRXh0LnVubGlzdGVuVG9LZXlBZGRlZChmW2ddLGIpLHRoaXMucHJvdGVjdGlvbkV4dC51bmxpc3RlblRvS2V5TWVzc2FnZShmW2ddLGQpLGZbZ10uY2xvc2UoKTtlW2FdPXZvaWQgMH19LG5lZWRUb0FkZEtleVNlc3Npb246ZnVuY3Rpb24oYSl7dmFyIGI9bnVsbDtyZXR1cm4gYj1lW2FdLGIua2V5U3lzdGVtLm5lZWRUb0FkZEtleVNlc3Npb24oYi5pbml0RGF0YSxiLmtleVNlc3Npb25zKX0sZ2V0SW5pdERhdGE6ZnVuY3Rpb24oYSl7dmFyIGI9bnVsbDtyZXR1cm4gYj1lW2FdLGIua2V5U3lzdGVtLmdldEluaXREYXRhKGIuY29udGVudFByb3RlY3Rpb24pfSx1cGRhdGVGcm9tTWVzc2FnZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGVbYV0ua2V5U3lzdGVtLmdldFVwZGF0ZShiLGMpfSxsaXN0ZW5Ub05lZWRLZXk6ZnVuY3Rpb24oYSl7dGhpcy5wcm90ZWN0aW9uRXh0Lmxpc3RlblRvTmVlZEtleSh0aGlzLnZpZGVvTW9kZWwsYSl9LGxpc3RlblRvS2V5RXJyb3I6ZnVuY3Rpb24oYSl7Yz1hO2Zvcih2YXIgYj0wO2I8ZS5sZW5ndGg7KytiKWZvcih2YXIgZD1lW2JdLmtleVNlc3Npb25zLGY9MDtmPGQubGVuZ3RoOysrZil0aGlzLnByb3RlY3Rpb25FeHQubGlzdGVuVG9LZXlFcnJvcihkW2ZdLGEpfSxsaXN0ZW5Ub0tleU1lc3NhZ2U6ZnVuY3Rpb24oYSl7ZD1hO2Zvcih2YXIgYj0wO2I8ZS5sZW5ndGg7KytiKWZvcih2YXIgYz1lW2JdLmtleVNlc3Npb25zLGY9MDtmPGMubGVuZ3RoOysrZil0aGlzLnByb3RlY3Rpb25FeHQubGlzdGVuVG9LZXlNZXNzYWdlKGNbZl0sYSl9LGxpc3RlblRvS2V5QWRkZWQ6ZnVuY3Rpb24oYSl7Yj1hO2Zvcih2YXIgYz0wO2M8ZS5sZW5ndGg7KytjKWZvcih2YXIgZD1lW2NdLmtleVNlc3Npb25zLGY9MDtmPGQubGVuZ3RoOysrZil0aGlzLnByb3RlY3Rpb25FeHQubGlzdGVuVG9LZXlBZGRlZChkW2ZdLGEpfX19LE1lZGlhUGxheWVyLm1vZGVscy5Qcm90ZWN0aW9uTW9kZWwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5tb2RlbHMuUHJvdGVjdGlvbk1vZGVsfSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuUmVxdWVzdFNjaGVkdWxlcj1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhPVtdLGI9bnVsbCxjPW51bGwsZD1mdW5jdGlvbihhLGIpe2lmKGEmJmIpe3ZhciBjPWcoYSk7Y3x8KGM9ZS5jYWxsKHRoaXMsYSkpLGMuc2V0SXNTY2hlZHVsZWQoITApLGMuc2V0U2NoZWR1bGVkVGFzayhiKSxqLmNhbGwodGhpcyksYi5jYWxsKGEpfX0sZT1mdW5jdGlvbihiKXtpZighYilyZXR1cm4gbnVsbDt2YXIgYz10aGlzLnN5c3RlbS5nZXRPYmplY3QoXCJzY2hlZHVsZXJNb2RlbFwiKTtyZXR1cm4gYy5zZXRDb250ZXh0KGIpLGEucHVzaChjKSxjfSxmPWZ1bmN0aW9uKGIpe3ZhciBjPWEuaW5kZXhPZihiKTstMSE9PWMmJmEuc3BsaWNlKGMsMSl9LGc9ZnVuY3Rpb24oYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYVtjXS5nZXRDb250ZXh0KCk9PT1iKXJldHVybiBhW2NdO3JldHVybiBudWxsfSxoPWZ1bmN0aW9uKCl7aS5jYWxsKHRoaXMpfSxpPWZ1bmN0aW9uKCl7Zm9yKHZhciBiLGM9MDtjPGEubGVuZ3RoO2MrKyliPWFbY10sYi5nZXRJc1NjaGVkdWxlZCgpJiZiLmV4ZWN1dGVTY2hlZHVsZWRUYXNrKCl9LGo9ZnVuY3Rpb24oKXtudWxsPT09YyYmKHRoaXMuYWRqdXN0RXhlY3V0ZUludGVydmFsKCksYz1zZXRJbnRlcnZhbChoLmJpbmQodGhpcyksYikpfSxrPWZ1bmN0aW9uKGIpe3ZhciBjPWcoYik7YyYmKGYoYyksMD09PWEubGVuZ3RoJiZsLmNhbGwodGhpcykpfSxsPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChjKSxjPW51bGx9O3JldHVybntzeXN0ZW06dm9pZCAwLGRlYnVnOnZvaWQgMCxzY2hlZHVsZXJFeHQ6dm9pZCAwLGlzU2NoZWR1bGVkOmZ1bmN0aW9uKGEpe3ZhciBiPWcoYSk7cmV0dXJuISFiJiZiLmdldElzU2NoZWR1bGVkKCl9LGdldEV4ZWN1dGVJbnRlcnZhbDpmdW5jdGlvbigpe3JldHVybiBifSxhZGp1c3RFeGVjdXRlSW50ZXJ2YWw6ZnVuY3Rpb24oKXtpZighKGEubGVuZ3RoPDEpKXt2YXIgZD10aGlzLnNjaGVkdWxlckV4dC5nZXRFeGVjdXRlSW50ZXJ2YWwoYVswXS5nZXRDb250ZXh0KCkpO2IhPT1kJiYoYj1kLG51bGwhPT1jJiYodGhpcy5kZWJ1Zy5sb2coXCJDaGFuZ2luZyBleGVjdXRlIGludGVydmFsOiBcIitiKSxjbGVhckludGVydmFsKGMpLGM9c2V0SW50ZXJ2YWwoaC5iaW5kKHRoaXMpLGIpKSl9fSxzdGFydFNjaGVkdWxpbmc6ZCxzdG9wU2NoZWR1bGluZzprfX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlJlcXVlc3RTY2hlZHVsZXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuUmVxdWVzdFNjaGVkdWxlcn0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlNjaGVkdWxlckV4dGVuc2lvbnM9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIn0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlNjaGVkdWxlckV4dGVuc2lvbnMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuU2NoZWR1bGVyRXh0ZW5zaW9ucyxnZXRFeGVjdXRlSW50ZXJ2YWw6ZnVuY3Rpb24oYSl7dmFyIGI9MWUzO3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBhLmdldE1pbkJ1ZmZlclRpbWUmJihiPTFlMyphLmdldE1pbkJ1ZmZlclRpbWUoKS80LGI9TWF0aC5tYXgoYiwxZTMpKSxifX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlNjaGVkdWxlck1vZGVsPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGEsYixjPSExO3JldHVybntzeXN0ZW06dm9pZCAwLGRlYnVnOnZvaWQgMCxzY2hlZHVsZXJFeHQ6dm9pZCAwLHNldENvbnRleHQ6ZnVuY3Rpb24oYil7YT1ifSxnZXRDb250ZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldFNjaGVkdWxlZFRhc2s6ZnVuY3Rpb24oYSl7Yj1hfSxleGVjdXRlU2NoZWR1bGVkVGFzazpmdW5jdGlvbigpe2IuY2FsbChhKX0sc2V0SXNTY2hlZHVsZWQ6ZnVuY3Rpb24oYSl7Yz1hfSxnZXRJc1NjaGVkdWxlZDpmdW5jdGlvbigpe3JldHVybiBjfX19LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5TY2hlZHVsZXJNb2RlbC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5TY2hlZHVsZXJNb2RlbH0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlNvdXJjZUJ1ZmZlckV4dGVuc2lvbnM9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt0aGlzLnN5c3RlbT12b2lkIDAsdGhpcy5tYW5pZmVzdEV4dD12b2lkIDB9LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5Tb3VyY2VCdWZmZXJFeHRlbnNpb25zLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlNvdXJjZUJ1ZmZlckV4dGVuc2lvbnMsY3JlYXRlU291cmNlQnVmZmVyOmZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGM9US5kZWZlcigpLGQ9dGhpczt0cnl7Yy5yZXNvbHZlKGEuYWRkU291cmNlQnVmZmVyKGIpKX1jYXRjaChlKXtkLm1hbmlmZXN0RXh0LmdldElzVGV4dFRyYWNrKGIpP2MucmVzb2x2ZShkLnN5c3RlbS5nZXRPYmplY3QoXCJ0ZXh0VlRUU291cmNlQnVmZmVyXCIpKTpjLnJlamVjdChlLmRlc2NyaXB0aW9uKX1yZXR1cm4gYy5wcm9taXNlfSxyZW1vdmVTb3VyY2VCdWZmZXI6ZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjt2YXIgYz1RLmRlZmVyKCk7dHJ5e2MucmVzb2x2ZShhLnJlbW92ZVNvdXJjZUJ1ZmZlcihiKSl9Y2F0Y2goZCl7Yy5yZWplY3QoZC5kZXNjcmlwdGlvbil9cmV0dXJuIGMucHJvbWlzZX0sZ2V0QnVmZmVyUmFuZ2U6ZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkLGUsZj1udWxsLGc9MCxoPTAsaT1udWxsLGo9bnVsbCxrPTAsbD1jfHwuMTU7dHJ5e2Y9YS5idWZmZXJlZH1jYXRjaChtKXtyZXR1cm4gUS53aGVuKG51bGwpfWlmKG51bGwhPT1mKXtmb3IoZT0wLGQ9Zi5sZW5ndGg7ZD5lO2UrPTEpaWYoZz1mLnN0YXJ0KGUpLGg9Zi5lbmQoZSksbnVsbD09PWkpe2lmKGs9TWF0aC5hYnMoZy1iKSxiPj1nJiZoPmIpe2k9ZyxqPWg7Y29udGludWV9aWYobD49ayl7aT1nLGo9aDtjb250aW51ZX19ZWxzZXtpZihrPWctaiwhKGw+PWspKWJyZWFrO2o9aH1pZihudWxsIT09aSlyZXR1cm4gUS53aGVuKHtzdGFydDppLGVuZDpqfSl9cmV0dXJuIFEud2hlbihudWxsKX0sZ2V0QWxsUmFuZ2VzOmZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7dHJ5e3JldHVybiBiPWEuYnVmZmVyZWQsUS53aGVuKGIpfWNhdGNoKGMpe3JldHVybiBRLndoZW4obnVsbCl9fSxnZXRCdWZmZXJMZW5ndGg6ZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPXRoaXMsZT1RLmRlZmVyKCk7cmV0dXJuIGQuZ2V0QnVmZmVyUmFuZ2UoYSxiLGMpLnRoZW4oZnVuY3Rpb24oYSl7bnVsbD09PWE/ZS5yZXNvbHZlKDApOmUucmVzb2x2ZShhLmVuZC1iKX0pLGUucHJvbWlzZX0sd2FpdEZvclVwZGF0ZUVuZDpmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjt2YXIgYixjPVEuZGVmZXIoKSxkPTUwLGU9ZnVuY3Rpb24oKXthLnVwZGF0aW5nfHwoY2xlYXJJbnRlcnZhbChiKSxjLnJlc29sdmUoITApKX0sZj1mdW5jdGlvbigpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVwZGF0ZWVuZFwiLGYsITEpLGMucmVzb2x2ZSghMCl9O2lmKGEuaGFzT3duUHJvcGVydHkoXCJhZGRFdmVudExpc3RlbmVyXCIpKXRyeXthLmFkZEV2ZW50TGlzdGVuZXIoXCJ1cGRhdGVlbmRcIixmLCExKX1jYXRjaChnKXtiPXNldEludGVydmFsKGUsZCl9ZWxzZSBiPXNldEludGVydmFsKGUsZCk7cmV0dXJuIGMucHJvbWlzZX0sYXBwZW5kOmZ1bmN0aW9uKGEsYil7dmFyIGM9US5kZWZlcigpO3RyeXtcImFwcGVuZFwiaW4gYT9hLmFwcGVuZChiKTpcImFwcGVuZEJ1ZmZlclwiaW4gYSYmYS5hcHBlbmRCdWZmZXIoYiksdGhpcy53YWl0Rm9yVXBkYXRlRW5kKGEpLnRoZW4oZnVuY3Rpb24oKXtjLnJlc29sdmUoKX0pfWNhdGNoKGQpe2MucmVqZWN0KHtlcnI6ZCxkYXRhOmJ9KX1yZXR1cm4gYy5wcm9taXNlfSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1RLmRlZmVyKCk7dHJ5e2I+PTAmJmQ+YiYmYz5iJiZcImVuZGVkXCIhPT1lLnJlYWR5U3RhdGUmJmEucmVtb3ZlKGIsYyksdGhpcy53YWl0Rm9yVXBkYXRlRW5kKGEpLnRoZW4oZnVuY3Rpb24oKXtmLnJlc29sdmUoKX0pfWNhdGNoKGcpe2YucmVqZWN0KGcpfXJldHVybiBmLnByb21pc2V9LGFib3J0OmZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGM9US5kZWZlcigpO3RyeXtcIm9wZW5cIj09PWEucmVhZHlTdGF0ZSYmYi5hYm9ydCgpLGMucmVzb2x2ZSgpfWNhdGNoKGQpe2MucmVqZWN0KGQuZGVzY3JpcHRpb24pfXJldHVybiBjLnByb21pc2V9fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuU3RyZWFtPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGEsYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscT1udWxsLHI9bnVsbCxzPW51bGwsdD1udWxsLHU9LTEsdj1udWxsLHc9LTEseD1udWxsLHk9LTEsej0hMCxBPSExLEI9ITEsQz1udWxsLEQ9W10sRT0tMSxGPW51bGwsRz1mdW5jdGlvbigpe3RoaXMuZGVidWcubG9nKFwiQXR0ZW1wdGluZyBwbGF5Li4uXCIpLEEmJih0aGlzLmRlYnVnLmxvZyhcIkRvIHBsYXkuXCIpLHRoaXMudmlkZW9Nb2RlbC5wbGF5KCkpfSxIPWZ1bmN0aW9uKCl7dGhpcy5kZWJ1Zy5sb2coXCJEbyBwYXVzZS5cIiksdGhpcy52aWRlb01vZGVsLnBhdXNlKCl9LEk9ZnVuY3Rpb24oYSl7dGhpcy5kZWJ1Zy5sb2coXCJBdHRlbXB0aW5nIHNlZWsuLi5cIiksQSYmKHRoaXMuZGVidWcubG9nKFwiRG8gc2VlazogXCIrYSksdGhpcy5zeXN0ZW0ubm90aWZ5KFwic2V0Q3VycmVudFRpbWVcIiksdGhpcy52aWRlb01vZGVsLnNldEN1cnJlbnRUaW1lKGEpLHQmJnQuc2VlayhhKSx2JiZ2LnNlZWsoYSkpfSxKPWZ1bmN0aW9uKGEpe3ZhciBiLGM9dGhpcztpZihiPVwibXNuZWVka2V5XCIhPT1hLnR5cGU/YS50eXBlOnEsRC5wdXNoKHt0eXBlOmIsaW5pdERhdGE6YS5pbml0RGF0YX0pLHRoaXMuZGVidWcubG9nKFwiRFJNOiBLZXkgcmVxdWlyZWQgZm9yIC0gXCIrYikscyYmcSYmIUMpdHJ5e0M9Yy5wcm90ZWN0aW9uQ29udHJvbGxlci5zZWxlY3RLZXlTeXN0ZW0ocSxzKX1jYXRjaChkKXtILmNhbGwoYyksYy5kZWJ1Zy5sb2coZCksYy5lcnJIYW5kbGVyLm1lZGlhS2V5U3lzdGVtU2VsZWN0aW9uRXJyb3IoZCl9QyYmYy5wcm90ZWN0aW9uQ29udHJvbGxlci5lbnN1cmVLZXlTZXNzaW9uKEMsYixhLmluaXREYXRhKX0sSz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9bnVsbCxkPW51bGwsZT1udWxsLGY9bnVsbDt0aGlzLmRlYnVnLmxvZyhcIkRSTTogR290IGEga2V5IG1lc3NhZ2UuLi5cIiksYz1hLnRhcmdldCxkPW5ldyBVaW50MTZBcnJheShhLm1lc3NhZ2UuYnVmZmVyKSxlPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxkKSxmPWEuZGVzdGluYXRpb25VUkwsYi5wcm90ZWN0aW9uQ29udHJvbGxlci51cGRhdGVGcm9tTWVzc2FnZShDLGMsZSxmKS5mYWlsKGZ1bmN0aW9uKGEpe0guY2FsbChiKSxiLmRlYnVnLmxvZyhhKSxiLmVyckhhbmRsZXIubWVkaWFLZXlNZXNzYWdlRXJyb3IoYSl9KX0sTD1mdW5jdGlvbigpe3RoaXMuZGVidWcubG9nKFwiRFJNOiBLZXkgYWRkZWQuXCIpfSxNPWZ1bmN0aW9uKCl7dmFyIGEsYj1ldmVudC50YXJnZXQ7c3dpdGNoKGE9XCJEUk06IE1lZGlhS2V5RXJyb3IgLSBzZXNzaW9uSWQ6IFwiK2Iuc2Vzc2lvbklkK1wiIGVycm9yQ29kZTogXCIrYi5lcnJvci5jb2RlK1wiIHN5c3RlbUVycm9yQ29kZTogXCIrYi5lcnJvci5zeXN0ZW1Db2RlK1wiIFtcIixiLmVycm9yLmNvZGUpe2Nhc2UgMTphKz1cIk1FRElBX0tFWUVSUl9VTktOT1dOIC0gQW4gdW5zcGVjaWZpZWQgZXJyb3Igb2NjdXJyZWQuIFRoaXMgdmFsdWUgaXMgdXNlZCBmb3IgZXJyb3JzIHRoYXQgZG9uJ3QgbWF0Y2ggYW55IG9mIHRoZSBvdGhlciBjb2Rlcy5cIjticmVhaztjYXNlIDI6YSs9XCJNRURJQV9LRVlFUlJfQ0xJRU5UIC0gVGhlIEtleSBTeXN0ZW0gY291bGQgbm90IGJlIGluc3RhbGxlZCBvciB1cGRhdGVkLlwiO2JyZWFrO2Nhc2UgMzphKz1cIk1FRElBX0tFWUVSUl9TRVJWSUNFIC0gVGhlIG1lc3NhZ2UgcGFzc2VkIGludG8gdXBkYXRlIGluZGljYXRlZCBhbiBlcnJvciBmcm9tIHRoZSBsaWNlbnNlIHNlcnZpY2UuXCI7YnJlYWs7Y2FzZSA0OmErPVwiTUVESUFfS0VZRVJSX09VVFBVVCAtIFRoZXJlIGlzIG5vIGF2YWlsYWJsZSBvdXRwdXQgZGV2aWNlIHdpdGggdGhlIHJlcXVpcmVkIGNoYXJhY3RlcmlzdGljcyBmb3IgdGhlIGNvbnRlbnQgcHJvdGVjdGlvbiBzeXN0ZW0uXCI7YnJlYWs7Y2FzZSA1OmErPVwiTUVESUFfS0VZRVJSX0hBUkRXQVJFQ0hBTkdFIC0gQSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGNoYW5nZSBjYXVzZWQgYSBjb250ZW50IHByb3RlY3Rpb24gZXJyb3IuXCI7YnJlYWs7Y2FzZSA2OmErPVwiTUVESUFfS0VZRVJSX0RPTUFJTiAtIEFuIGVycm9yIG9jY3VycmVkIGluIGEgbXVsdGktZGV2aWNlIGRvbWFpbiBsaWNlbnNpbmcgY29uZmlndXJhdGlvbi4gVGhlIG1vc3QgY29tbW9uIGVycm9yIGlzIGEgZmFpbHVyZSB0byBqb2luIHRoZSBkb21haW4uXCJ9YSs9XCJdXCIsdGhpcy5kZWJ1Zy5sb2coYSksdGhpcy5lcnJIYW5kbGVyLm1lZGlhS2V5U2Vzc2lvbkVycm9yKGEpfSxOPWZ1bmN0aW9uKGEpe3ZhciBiPVEuZGVmZXIoKSxjPXRoaXMsZD1mdW5jdGlvbihlKXtjLmRlYnVnLmxvZyhcIk1lZGlhU291cmNlIGlzIG9wZW4hXCIpLGMuZGVidWcubG9nKGUpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNvdXJjZW9wZW5cIixkKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3ZWJraXRzb3VyY2VvcGVuXCIsZCksYi5yZXNvbHZlKGEpfTtyZXR1cm4gYy5kZWJ1Zy5sb2coXCJNZWRpYVNvdXJjZSBzaG91bGQgYmUgY2xvc2VkLiBUaGUgYWN0dWFsIHJlYWR5U3RhdGUgaXM6IFwiK2EucmVhZHlTdGF0ZSksYS5hZGRFdmVudExpc3RlbmVyKFwic291cmNlb3BlblwiLGQsITEpLGEuYWRkRXZlbnRMaXN0ZW5lcihcIndlYmtpdHNvdXJjZW9wZW5cIixkLCExKSxjLm1lZGlhU291cmNlRXh0LmF0dGFjaE1lZGlhU291cmNlKGEsYy52aWRlb01vZGVsKSxjLmRlYnVnLmxvZyhcIk1lZGlhU291cmNlIGF0dGFjaGVkIHRvIHZpZGVvLiAgV2FpdGluZyBvbiBvcGVuLi4uXCIpLGIucHJvbWlzZX0sTz1mdW5jdGlvbigpe3ZhciBjPXRoaXM7dCYmdC5yZXNldChCKSx2JiZ2LnJlc2V0KEIpLGImJmMubWVkaWFTb3VyY2VFeHQuZGV0YWNoTWVkaWFTb3VyY2UoYy52aWRlb01vZGVsKSxBPSExLEM9bnVsbCxEPVtdLHM9bnVsbCx0PW51bGwsdj1udWxsLHg9bnVsbCxxPW51bGwscj1udWxsLGI9bnVsbCxhPW51bGx9LFA9ZnVuY3Rpb24oYixjLGQsZSl7aWYoYiYmYyYmZClpZihudWxsPT09dCYmbnVsbD09PXYmJm51bGw9PT14KXt2YXIgZj1cIk5vIHN0cmVhbXMgdG8gcGxheS5cIjt0aGlzLmVyckhhbmRsZXIubWFuaWZlc3RFcnJvcihmLFwibm9zdHJlYW1zXCIsYSksdGhpcy5kZWJ1Zy5sb2coZiksZS5yZWplY3QoKX1lbHNlIHRoaXMuZGVidWcubG9nKFwiTWVkaWFTb3VyY2UgaW5pdGlhbGl6ZWQhXCIpLGUucmVzb2x2ZSghMCl9LFI9ZnVuY3Rpb24oKXt0aGlzLmRlYnVnLmxvZyhcIkdldHRpbmcgTWVkaWFTb3VyY2UgcmVhZHkuLi5cIik7dmFyIGE9US5kZWZlcigpLGM9ITEsZD0hMSxlPSExLGY9dGhpcyxnPWYubWFuaWZlc3RNb2RlbC5nZXRWYWx1ZSgpLGg9Zi5tYW5pZmVzdEV4dC5nZXRJc0xpdmUoZyk7cmV0dXJuIGYuZGVidWcubG9nKFwiR2F0aGVyaW5nIGluZm9ybWF0aW9uIGZvciBidWZmZXJzLiAoMSlcIiksZi5tYW5pZmVzdEV4dC5nZXREdXJhdGlvbihnLGgpLnRoZW4oZnVuY3Rpb24oKXtmLm1hbmlmZXN0RXh0LmdldFZpZGVvRGF0YShnLEUpLnRoZW4oZnVuY3Rpb24oaCl7cmV0dXJuIG51bGwhPT1oPyhmLmRlYnVnLmxvZyhcIkNyZWF0ZSB2aWRlbyBidWZmZXIuXCIpLGYubWFuaWZlc3RFeHQuZ2V0RGF0YUluZGV4KGgsZyxFKS50aGVuKGZ1bmN0aW9uKGEpe3U9YSxmLmRlYnVnLmxvZyhcIlNhdmUgdmlkZW8gdHJhY2s6IFwiK3UpfSksZi5tYW5pZmVzdEV4dC5nZXRDb2RlYyhoKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBmLmRlYnVnLmxvZyhcIlZpZGVvIGNvZGVjOiBcIithKSxxPWEsZi5tYW5pZmVzdEV4dC5nZXRDb250ZW50UHJvdGVjdGlvbkRhdGEoaCkudGhlbihmdW5jdGlvbihjKXtpZihmLmRlYnVnLmxvZyhcIlZpZGVvIGNvbnRlbnRQcm90ZWN0aW9uXCIpLGMmJiFmLmNhcGFiaWxpdGllcy5zdXBwb3J0c01lZGlhS2V5cygpKXJldHVybiBmLmVyckhhbmRsZXIuY2FwYWJpbGl0eUVycm9yKFwibWVkaWFrZXlzXCIpLFEud2hlbihudWxsKTtpZihzPWMsIWYuY2FwYWJpbGl0aWVzLnN1cHBvcnRzQ29kZWMoZi52aWRlb01vZGVsLmdldEVsZW1lbnQoKSxhKSl7dmFyIGQ9XCJWaWRlbyBDb2RlYyAoXCIrYStcIikgaXMgbm90IHN1cHBvcnRlZC5cIjtyZXR1cm4gZi5lcnJIYW5kbGVyLm1hbmlmZXN0RXJyb3IoZCxcImNvZGVjXCIsZyksZi5kZWJ1Zy5sb2coZCksUS53aGVuKG51bGwpfXJldHVybiBmLnNvdXJjZUJ1ZmZlckV4dC5jcmVhdGVTb3VyY2VCdWZmZXIoYixhKX0pfSkudGhlbihmdW5jdGlvbihnKXtudWxsPT09Zz9mLmRlYnVnLmxvZyhcIk5vIGJ1ZmZlciB3YXMgY3JlYXRlZCwgc2tpcHBpbmcgdmlkZW8gc3RyZWFtLlwiKToodD1mLnN5c3RlbS5nZXRPYmplY3QoXCJidWZmZXJDb250cm9sbGVyXCIpLHQuaW5pdGlhbGl6ZShcInZpZGVvXCIsRSxoLGcsZi52aWRlb01vZGVsLGYucmVxdWVzdFNjaGVkdWxlcixmLmZyYWdtZW50Q29udHJvbGxlcixiKSxmLmRlYnVnLmxvZyhcIlZpZGVvIGlzIHJlYWR5IVwiKSksYz0hMCxQLmNhbGwoZixjLGQsZSxhKX0sZnVuY3Rpb24oKXtmLmVyckhhbmRsZXIubWVkaWFTb3VyY2VFcnJvcihcIkVycm9yIGNyZWF0aW5nIHZpZGVvIHNvdXJjZSBidWZmZXIuXCIpLGM9ITAsUC5jYWxsKGYsYyxkLGUsYSl9KSk6KGYuZGVidWcubG9nKFwiTm8gdmlkZW8gZGF0YS5cIiksYz0hMCxQLmNhbGwoZixjLGQsZSxhKSksZi5tYW5pZmVzdEV4dC5nZXRBdWRpb0RhdGFzKGcsRSl9KS50aGVuKGZ1bmN0aW9uKGgpe3JldHVybiBudWxsIT09aCYmaC5sZW5ndGg+MD8oZi5kZWJ1Zy5sb2coXCJIYXZlIGF1ZGlvIHN0cmVhbXM6IFwiK2gubGVuZ3RoKSxmLm1hbmlmZXN0RXh0LmdldFByaW1hcnlBdWRpb0RhdGEoZyxFKS50aGVuKGZ1bmN0aW9uKGgpe2YubWFuaWZlc3RFeHQuZ2V0RGF0YUluZGV4KGgsZyxFKS50aGVuKGZ1bmN0aW9uKGEpe3c9YSxmLmRlYnVnLmxvZyhcIlNhdmUgYXVkaW8gdHJhY2s6IFwiK3cpfSksZi5tYW5pZmVzdEV4dC5nZXRDb2RlYyhoKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBmLmRlYnVnLmxvZyhcIkF1ZGlvIGNvZGVjOiBcIithKSxyPWEsZi5tYW5pZmVzdEV4dC5nZXRDb250ZW50UHJvdGVjdGlvbkRhdGEoaCkudGhlbihmdW5jdGlvbihjKXtpZihmLmRlYnVnLmxvZyhcIkF1ZGlvIGNvbnRlbnRQcm90ZWN0aW9uXCIpLGMmJiFmLmNhcGFiaWxpdGllcy5zdXBwb3J0c01lZGlhS2V5cygpKXJldHVybiBmLmVyckhhbmRsZXIuY2FwYWJpbGl0eUVycm9yKFwibWVkaWFrZXlzXCIpLFEud2hlbihudWxsKTtpZihzPWMsIWYuY2FwYWJpbGl0aWVzLnN1cHBvcnRzQ29kZWMoZi52aWRlb01vZGVsLmdldEVsZW1lbnQoKSxhKSl7dmFyIGQ9XCJBdWRpbyBDb2RlYyAoXCIrYStcIikgaXMgbm90IHN1cHBvcnRlZC5cIjtyZXR1cm4gZi5lcnJIYW5kbGVyLm1hbmlmZXN0RXJyb3IoZCxcImNvZGVjXCIsZyksZi5kZWJ1Zy5sb2coZCksUS53aGVuKG51bGwpfXJldHVybiBmLnNvdXJjZUJ1ZmZlckV4dC5jcmVhdGVTb3VyY2VCdWZmZXIoYixhKX0pfSkudGhlbihmdW5jdGlvbihnKXtudWxsPT09Zz9mLmRlYnVnLmxvZyhcIk5vIGJ1ZmZlciB3YXMgY3JlYXRlZCwgc2tpcHBpbmcgYXVkaW8gc3RyZWFtLlwiKToodj1mLnN5c3RlbS5nZXRPYmplY3QoXCJidWZmZXJDb250cm9sbGVyXCIpLHYuaW5pdGlhbGl6ZShcImF1ZGlvXCIsRSxoLGcsZi52aWRlb01vZGVsLGYucmVxdWVzdFNjaGVkdWxlcixmLmZyYWdtZW50Q29udHJvbGxlcixiKSxmLmRlYnVnLmxvZyhcIkF1ZGlvIGlzIHJlYWR5IVwiKSksZD0hMCxQLmNhbGwoZixjLGQsZSxhKX0sZnVuY3Rpb24oKXtmLmVyckhhbmRsZXIubWVkaWFTb3VyY2VFcnJvcihcIkVycm9yIGNyZWF0aW5nIGF1ZGlvIHNvdXJjZSBidWZmZXIuXCIpLGQ9ITAsUC5jYWxsKGYsYyxkLGUsYSl9KX0pKTooZi5kZWJ1Zy5sb2coXCJObyBhdWRpbyBzdHJlYW1zLlwiKSxkPSEwLFAuY2FsbChmLGMsZCxlLGEpKSxmLm1hbmlmZXN0RXh0LmdldFRleHREYXRhKGcsRSl9KS50aGVuKGZ1bmN0aW9uKGgpe3ZhciBpO251bGwhPT1oPyhmLm1hbmlmZXN0RXh0LmdldERhdGFJbmRleChoLGcsRSkudGhlbihmdW5jdGlvbihhKXt5PWEsZi5kZWJ1Zy5sb2coXCJTYXZlIHRleHQgdHJhY2s6IFwiK3kpfSksZi5tYW5pZmVzdEV4dC5nZXRNaW1lVHlwZShoKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBpPWEsZi5zb3VyY2VCdWZmZXJFeHQuY3JlYXRlU291cmNlQnVmZmVyKGIsaSl9KS50aGVuKGZ1bmN0aW9uKGIpe251bGw9PT1iP2YuZGVidWcubG9nKFwiU291cmNlIGJ1ZmZlciB3YXMgbm90IGNyZWF0ZWQgZm9yIHRleHQgdHJhY2tcIik6KHg9Zi5zeXN0ZW0uZ2V0T2JqZWN0KFwidGV4dENvbnRyb2xsZXJcIikseC5pbml0aWFsaXplKEUsaCxiLGYudmlkZW9Nb2RlbCksYi5oYXNPd25Qcm9wZXJ0eShcImluaXRpYWxpemVcIikmJmIuaW5pdGlhbGl6ZShpLHgpLGYuZGVidWcubG9nKFwiVGV4dCBpcyByZWFkeSFcIiksZT0hMCxQLmNhbGwoZixjLGQsZSxhKSl9LGZ1bmN0aW9uKGIpe2YuZGVidWcubG9nKFwiRXJyb3IgY3JlYXRpbmcgdGV4dCBzb3VyY2UgYnVmZmVyOlwiKSxmLmRlYnVnLmxvZyhiKSxmLmVyckhhbmRsZXIubWVkaWFTb3VyY2VFcnJvcihcIkVycm9yIGNyZWF0aW5nIHRleHQgc291cmNlIGJ1ZmZlci5cIiksZT0hMCxQLmNhbGwoZixjLGQsZSxhKX0pKTooZi5kZWJ1Zy5sb2coXCJObyB0ZXh0IHRyYWNrcy5cIiksZT0hMCxQLmNhbGwoZixjLGQsZSxhKSl9KX0pLGEucHJvbWlzZX0sUz1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYz1RLmRlZmVyKCksZD1hLm1hbmlmZXN0TW9kZWwuZ2V0VmFsdWUoKSxlPWEubWFuaWZlc3RFeHQuZ2V0SXNMaXZlKGQpO3JldHVybiBhLmRlYnVnLmxvZyhcIkdldHRpbmcgcmVhZHkgZm9yIHBsYXliYWNrLi4uXCIpLGEubWFuaWZlc3RFeHQuZ2V0RHVyYXRpb25Gb3JQZXJpb2QoRSxhLm1hbmlmZXN0TW9kZWwuZ2V0VmFsdWUoKSxlKS50aGVuKGZ1bmN0aW9uKGEpe2w9YX0pLGEubWFuaWZlc3RFeHQuZ2V0RHVyYXRpb24oYS5tYW5pZmVzdE1vZGVsLmdldFZhbHVlKCksZSkudGhlbihmdW5jdGlvbihjKXtyZXR1cm4gYS5kZWJ1Zy5sb2coXCJTZXR0aW5nIGR1cmF0aW9uOiBcIitjKSxhLm1lZGlhU291cmNlRXh0LnNldER1cmF0aW9uKGIsYyl9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGEuZGVidWcubG9nKFwiRHVyYXRpb24gc3VjY2Vzc2Z1bGx5IHNldC5cIiksYS5tYW5pZmVzdEV4dC5nZXRQZXJpb2RTdGFydChhLm1hbmlmZXN0TW9kZWwuZ2V0VmFsdWUoKSxFKX0pLnRoZW4oZnVuY3Rpb24oYSl7Rj1hLEE9ITAsYy5yZXNvbHZlKCEwKX0pLGMucHJvbWlzZX0sVD1mdW5jdGlvbigpe3ZhciBhPXRoaXM7YS5kZWJ1Zy5sb2coXCJHb3QgbG9hZG1ldGFkYXRhIGV2ZW50LlwiKSxjLnJlc29sdmUobnVsbCl9LFU9ZnVuY3Rpb24oKXt0aGlzLmRlYnVnLmxvZyhcIkdvdCBwbGF5IGV2ZW50LlwiKSxBJiYobnVsbCE9PUY/KHRoaXMuZGVidWcubG9nKFwiU3RhcnRpbmcgc2VnbWVudCBsb2FkaW5nIGF0IG9mZnNldDogXCIrRiksdCYmdC5zZWVrKEYpLHYmJnYuc2VlayhGKSx4JiZ4LnNlZWsoRikpOih0JiZ0LnN0YXJ0KCksdiYmdi5zdGFydCgpLHgmJnguc3RhcnQoKSkpfSxWPWZ1bmN0aW9uKCl7dGhpcy5kZWJ1Zy5sb2coXCJHb3QgcGF1c2UgZXZlbnQuXCIpLHRoaXMuc2NoZWR1bGVXaGlsZVBhdXNlZHx8YWIuY2FsbCh0aGlzKX0sVz1mdW5jdGlvbihhKXt2YXIgYj1hLnNyY0VsZW1lbnQuZXJyb3IsYz1iLmNvZGUsZD1cIlwiO2lmKC0xIT09Yyl7c3dpdGNoKGMpe2Nhc2UgMTpkPVwiTUVESUFfRVJSX0FCT1JURURcIjticmVhaztjYXNlIDI6ZD1cIk1FRElBX0VSUl9ORVRXT1JLXCI7YnJlYWs7Y2FzZSAzOmQ9XCJNRURJQV9FUlJfREVDT0RFXCI7YnJlYWs7Y2FzZSA0OmQ9XCJNRURJQV9FUlJfU1JDX05PVF9TVVBQT1JURURcIjticmVhaztjYXNlIDU6ZD1cIk1FRElBX0VSUl9FTkNSWVBURURcIn1CPSEwLHRoaXMuZGVidWcubG9nKFwiVmlkZW8gRWxlbWVudCBFcnJvcjogXCIrZCksdGhpcy5kZWJ1Zy5sb2coYiksdGhpcy5lcnJIYW5kbGVyLm1lZGlhU291cmNlRXJyb3IoZCksdGhpcy5yZXNldCgpfX0sWD1mdW5jdGlvbigpe3RoaXMuZGVidWcubG9nKFwiR290IHNlZWtpbmcgZXZlbnQuXCIpO3ZhciBhPXRoaXMudmlkZW9Nb2RlbC5nZXRDdXJyZW50VGltZSgpO3QmJnQuc2VlayhhKSx2JiZ2LnNlZWsoYSl9LFk9ZnVuY3Rpb24oKXt0aGlzLmRlYnVnLmxvZyhcIlNlZWsgY29tcGxldGUuXCIpLHRoaXMudmlkZW9Nb2RlbC5saXN0ZW4oXCJzZWVraW5nXCIsaCksdGhpcy52aWRlb01vZGVsLnVubGlzdGVuKFwic2Vla2VkXCIsaSl9LFo9ZnVuY3Rpb24oKXtfLmNhbGwodGhpcyl9LCQ9ZnVuY3Rpb24oKXtfLmNhbGwodGhpcyl9LF89ZnVuY3Rpb24oKXt0JiZ0LnVwZGF0ZUJ1ZmZlclN0YXRlKCksdiYmdi51cGRhdGVCdWZmZXJTdGF0ZSgpfSxhYj1mdW5jdGlvbigpe3QmJnQuc3RvcCgpLHYmJnYuc3RvcCgpfSxiYj1mdW5jdGlvbihkKXt2YXIgZT10aGlzO3JldHVybiBlLmRlYnVnLmxvZyhcIlN0cmVhbSBzdGFydCBsb2FkaW5nLlwiKSxhPWQsZS5tZWRpYVNvdXJjZUV4dC5jcmVhdGVNZWRpYVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24oYSl7cmV0dXJuIGUuZGVidWcubG9nKFwiTWVkaWFTb3VyY2UgY3JlYXRlZC5cIiksTi5jYWxsKGUsYSl9KS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBiPWEsZS5kZWJ1Zy5sb2coXCJNZWRpYVNvdXJjZSBzZXQgdXAuXCIpLFIuY2FsbChlKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWJ1Zy5sb2coXCJTdGFydCBpbml0aWFsaXppbmcgcGxheWJhY2suXCIpLFMuY2FsbChlKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gej8oZS5kZWJ1Zy5sb2coXCJQbGF5YmFjayBpbml0aWFsaXplZCFcIiksYy5wcm9taXNlKTp2b2lkIDB9KS50aGVuKGZ1bmN0aW9uKCl7ZS5kZWJ1Zy5sb2coXCJlbGVtZW50IGxvYWRlZCFcIiksMD09PUUmJkcuY2FsbChlKX0pfSxjYj1mdW5jdGlvbigpe3RoaXMuZGVidWcubG9nKFwiQ3VycmVudCB0aW1lIGhhcyBjaGFuZ2VkLCBibG9jayBwcm9ncmFtbWF0aWMgc2Vlay5cIiksdGhpcy52aWRlb01vZGVsLnVubGlzdGVuKFwic2Vla2luZ1wiLGgpLHRoaXMudmlkZW9Nb2RlbC5saXN0ZW4oXCJzZWVrZWRcIixpKX0sZGI9ZnVuY3Rpb24oKXt0JiYhdC5pc0J1ZmZlcmluZ0NvbXBsZXRlZCgpfHx2JiYhdi5pc0J1ZmZlcmluZ0NvbXBsZXRlZCgpfHxiJiZ0aGlzLm1lZGlhU291cmNlRXh0LnNpZ25hbEVuZE9mU3RyZWFtKGIpfSxlYj1mdW5jdGlvbigpe2FiLmNhbGwodGhpcyl9LGZiPWZ1bmN0aW9uKCl7dmFyIGEsYixjPXRoaXMsZD1jLm1hbmlmZXN0TW9kZWwuZ2V0VmFsdWUoKTtjLmRlYnVnLmxvZyhcIk1hbmlmZXN0IHVwZGF0ZWQuLi4gc2V0IG5ldyBkYXRhIG9uIGJ1ZmZlcnMuXCIpLHQmJihhPXQuZ2V0RGF0YSgpLGEmJmEuaGFzT3duUHJvcGVydHkoXCJpZFwiKT9jLm1hbmlmZXN0RXh0LmdldERhdGFGb3JJZChhLmlkLGQsRSkudGhlbihmdW5jdGlvbihhKXt0LnNldERhdGEoYSl9KTpjLm1hbmlmZXN0RXh0LmdldERhdGFGb3JJbmRleCh1LGQsRSkudGhlbihmdW5jdGlvbihhKXt0LnNldERhdGEoYSl9KSksdiYmKGI9di5nZXREYXRhKCksYiYmYi5oYXNPd25Qcm9wZXJ0eShcImlkXCIpP2MubWFuaWZlc3RFeHQuZ2V0RGF0YUZvcklkKGIuaWQsZCxFKS50aGVuKGZ1bmN0aW9uKGEpe3Yuc2V0RGF0YShhKX0pOmMubWFuaWZlc3RFeHQuZ2V0RGF0YUZvckluZGV4KHcsZCxFKS50aGVuKGZ1bmN0aW9uKGEpe3Yuc2V0RGF0YShhKX0pKX07cmV0dXJue3N5c3RlbTp2b2lkIDAsdmlkZW9Nb2RlbDp2b2lkIDAsbWFuaWZlc3RMb2FkZXI6dm9pZCAwLG1hbmlmZXN0TW9kZWw6dm9pZCAwLG1lZGlhU291cmNlRXh0OnZvaWQgMCxzb3VyY2VCdWZmZXJFeHQ6dm9pZCAwLGJ1ZmZlckV4dDp2b2lkIDAsbWFuaWZlc3RFeHQ6dm9pZCAwLGZyYWdtZW50Q29udHJvbGxlcjp2b2lkIDAsYWJyQ29udHJvbGxlcjp2b2lkIDAsZnJhZ21lbnRFeHQ6dm9pZCAwLHByb3RlY3Rpb25Nb2RlbDp2b2lkIDAscHJvdGVjdGlvbkNvbnRyb2xsZXI6dm9pZCAwLHByb3RlY3Rpb25FeHQ6dm9pZCAwLGNhcGFiaWxpdGllczp2b2lkIDAsZGVidWc6dm9pZCAwLG1ldHJpY3NFeHQ6dm9pZCAwLGVyckhhbmRsZXI6dm9pZCAwLHJlcXVlc3RTY2hlZHVsZXI6dm9pZCAwLHNjaGVkdWxlV2hpbGVQYXVzZWQ6dm9pZCAwLHNldHVwOmZ1bmN0aW9uKCl7dGhpcy5zeXN0ZW0ubWFwSGFuZGxlcihcIm1hbmlmZXN0VXBkYXRlZFwiLHZvaWQgMCxmYi5iaW5kKHRoaXMpKSx0aGlzLnN5c3RlbS5tYXBIYW5kbGVyKFwic2V0Q3VycmVudFRpbWVcIix2b2lkIDAsY2IuYmluZCh0aGlzKSksdGhpcy5zeXN0ZW0ubWFwSGFuZGxlcihcImJ1ZmZlcmluZ0NvbXBsZXRlZFwiLHZvaWQgMCxkYi5iaW5kKHRoaXMpKSx0aGlzLnN5c3RlbS5tYXBIYW5kbGVyKFwic2VnbWVudExvYWRpbmdGYWlsZWRcIix2b2lkIDAsZWIuYmluZCh0aGlzKSksYz1RLmRlZmVyKCksZT1VLmJpbmQodGhpcyksZj1WLmJpbmQodGhpcyksZz1XLmJpbmQodGhpcyksaD1YLmJpbmQodGhpcyksaT1ZLmJpbmQodGhpcyksaz1aLmJpbmQodGhpcyksaj0kLmJpbmQodGhpcyksZD1ULmJpbmQodGhpcyl9LGxvYWQ6ZnVuY3Rpb24oYSxiKXtFPWIsYmIuY2FsbCh0aGlzLGEpfSxzZXRWaWRlb01vZGVsOmZ1bmN0aW9uKGEpe3RoaXMudmlkZW9Nb2RlbD1hLHRoaXMudmlkZW9Nb2RlbC5saXN0ZW4oXCJwbGF5XCIsZSksdGhpcy52aWRlb01vZGVsLmxpc3RlbihcInBhdXNlXCIsZiksdGhpcy52aWRlb01vZGVsLmxpc3RlbihcImVycm9yXCIsZyksdGhpcy52aWRlb01vZGVsLmxpc3RlbihcInNlZWtpbmdcIixoKSx0aGlzLnZpZGVvTW9kZWwubGlzdGVuKFwidGltZXVwZGF0ZVwiLGopLHRoaXMudmlkZW9Nb2RlbC5saXN0ZW4oXCJwcm9ncmVzc1wiLGspLHRoaXMudmlkZW9Nb2RlbC5saXN0ZW4oXCJsb2FkZWRtZXRhZGF0YVwiLGQpfSxpbml0UHJvdGVjdGlvbjpmdW5jdGlvbigpe209Si5iaW5kKHRoaXMpLG49Sy5iaW5kKHRoaXMpLG89TC5iaW5kKHRoaXMpLHA9TS5iaW5kKHRoaXMpLHRoaXMucHJvdGVjdGlvbk1vZGVsPXRoaXMuc3lzdGVtLmdldE9iamVjdChcInByb3RlY3Rpb25Nb2RlbFwiKSx0aGlzLnByb3RlY3Rpb25Nb2RlbC5pbml0KHRoaXMuZ2V0VmlkZW9Nb2RlbCgpKSx0aGlzLnByb3RlY3Rpb25Db250cm9sbGVyPXRoaXMuc3lzdGVtLmdldE9iamVjdChcInByb3RlY3Rpb25Db250cm9sbGVyXCIpLHRoaXMucHJvdGVjdGlvbkNvbnRyb2xsZXIuaW5pdCh0aGlzLnZpZGVvTW9kZWwsdGhpcy5wcm90ZWN0aW9uTW9kZWwpLHRoaXMucHJvdGVjdGlvbk1vZGVsLmxpc3RlblRvTmVlZEtleShtKSx0aGlzLnByb3RlY3Rpb25Nb2RlbC5saXN0ZW5Ub0tleU1lc3NhZ2UobiksdGhpcy5wcm90ZWN0aW9uTW9kZWwubGlzdGVuVG9LZXlFcnJvcihwKSx0aGlzLnByb3RlY3Rpb25Nb2RlbC5saXN0ZW5Ub0tleUFkZGVkKG8pfSxnZXRWaWRlb01vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW9Nb2RlbH0sZ2V0TWFuaWZlc3RFeHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybiBhLm1hbmlmZXN0RXh0fSxzZXRBdXRvUGxheTpmdW5jdGlvbihhKXt6PWF9LGdldEF1dG9QbGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHp9LHJlc2V0OmZ1bmN0aW9uKCl7SC5jYWxsKHRoaXMpLHRoaXMudmlkZW9Nb2RlbC51bmxpc3RlbihcInBsYXlcIixlKSx0aGlzLnZpZGVvTW9kZWwudW5saXN0ZW4oXCJwYXVzZVwiLGYpLHRoaXMudmlkZW9Nb2RlbC51bmxpc3RlbihcImVycm9yXCIsZyksdGhpcy52aWRlb01vZGVsLnVubGlzdGVuKFwic2Vla2luZ1wiLGgpLHRoaXMudmlkZW9Nb2RlbC51bmxpc3RlbihcInRpbWV1cGRhdGVcIixqKSx0aGlzLnZpZGVvTW9kZWwudW5saXN0ZW4oXCJwcm9ncmVzc1wiLGspLHRoaXMudmlkZW9Nb2RlbC51bmxpc3RlbihcImxvYWRlZG1ldGFkYXRhXCIsZCksTy5jYWxsKHRoaXMpLHRoaXMucHJvdGVjdGlvbkNvbnRyb2xsZXImJnRoaXMucHJvdGVjdGlvbkNvbnRyb2xsZXIudGVhcmRvd25LZXlTeXN0ZW0oQyksdGhpcy5wcm90ZWN0aW9uQ29udHJvbGxlcj12b2lkIDAsdGhpcy5wcm90ZWN0aW9uTW9kZWw9dm9pZCAwLHRoaXMuZnJhZ21lbnRDb250cm9sbGVyPXZvaWQgMCx0aGlzLnJlcXVlc3RTY2hlZHVsZXI9dm9pZCAwLGM9US5kZWZlcigpfSxnZXREdXJhdGlvbjpmdW5jdGlvbigpe3JldHVybiBsfSxzZXRQZXJpb2RJbmRleDpmdW5jdGlvbihhKXtFPWF9LGdldFBlcmlvZEluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIEV9LGdldFN0YXJ0VGltZTpmdW5jdGlvbigpe3JldHVybiBGfSxwbGF5Okcsc2VlazpJLHBhdXNlOkh9fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuU3RyZWFtLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlN0cmVhbX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlN0cmVhbUNvbnRyb2xsZXI9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYSxiPVtdLGM9NCxkPTMsZT0hMCxmPW51bGwsZz1mdW5jdGlvbigpe2EucGxheSgpfSxoPWZ1bmN0aW9uKCl7YS5wYXVzZSgpfSxpPWZ1bmN0aW9uKGIpe2Euc2VlayhiKX0saj1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZ2V0RWxlbWVudCgpLGQ9Yi5nZXRFbGVtZW50KCk7cmV0dXJuIGQucGFyZW50Tm9kZXx8Yy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkLGMpLGMuc3R5bGUud2lkdGg9XCIwcHhcIixkLnN0eWxlLndpZHRoPVwiMTAwJVwiLG0oYyxkKSxsKGEpLGsoYiksUS53aGVuKCEwKX0saz1mdW5jdGlvbihhKXthLmxpc3RlbihcInNlZWtpbmdcIixwKSxhLmxpc3RlbihcInByb2dyZXNzXCIsbikscigpJiZhLmxpc3RlbihcInRpbWV1cGRhdGVcIixvKX0sbD1mdW5jdGlvbihhKXthLnVubGlzdGVuKFwic2Vla2luZ1wiLHApLGEudW5saXN0ZW4oXCJwcm9ncmVzc1wiLG4pLGEudW5saXN0ZW4oXCJ0aW1ldXBkYXRlXCIsbyl9LG09ZnVuY3Rpb24oYSxiKXtbXCJjb250cm9sc1wiLFwibG9vcFwiLFwibXV0ZWRcIixcInBsYXliYWNrUmF0ZVwiLFwidm9sdW1lXCJdLmZvckVhY2goZnVuY3Rpb24oYyl7YltjXT1hW2NdfSl9LG49ZnVuY3Rpb24oKXt2YXIgYj1hLmdldFZpZGVvTW9kZWwoKS5nZXRFbGVtZW50KCkuYnVmZmVyZWQ7aWYoYi5sZW5ndGgpe3ZhciBkPWIubGVuZ3RoLTEsZT1iLmVuZChkKSxmPWEuZ2V0U3RhcnRUaW1lKCkrYS5nZXREdXJhdGlvbigpLWU7Yz5mJiYoYS5nZXRWaWRlb01vZGVsKCkudW5saXN0ZW4oXCJwcm9ncmVzc1wiLG4pLHEoKSl9fSxvPWZ1bmN0aW9uKCl7aWYoIWEuZ2V0VmlkZW9Nb2RlbCgpLmdldEVsZW1lbnQoKS5zZWVraW5nKXt2YXIgYj1hLmdldFN0YXJ0VGltZSgpK2EuZ2V0RHVyYXRpb24oKSxjPWEuZ2V0VmlkZW9Nb2RlbCgpLmdldEN1cnJlbnRUaW1lKCk7ZD5iLWMmJnYoYSxyKCkpfX0scD1mdW5jdGlvbigpe3ZhciBiPWEuZ2V0VmlkZW9Nb2RlbCgpLmdldEN1cnJlbnRUaW1lKCksYz1zKGIpO2MmJmMhPT1hJiZ2KGEsYyxiKX0scT1mdW5jdGlvbigpe3ZhciBhPXIoKTthJiZhLnNlZWsoYS5nZXRTdGFydFRpbWUoKSl9LHI9ZnVuY3Rpb24oKXt2YXIgYz1hLmdldFBlcmlvZEluZGV4KCkrMTtyZXR1cm4gYzxiLmxlbmd0aD9iW2NdOm51bGx9LHM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPTAsZD1udWxsLGU9MCxmPWIubGVuZ3RoO2Y+ZTtlKyspaWYoZD1iW2VdLGMrPWQuZ2V0RHVyYXRpb24oKSxjPmEpcmV0dXJuIGR9LHQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnN5c3RlbS5nZXRPYmplY3QoXCJ2aWRlb01vZGVsXCIpLGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInZpZGVvXCIpO3JldHVybiBhLnNldEVsZW1lbnQoYiksYX0sdT1mdW5jdGlvbihhKXthLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhKX0sdj1mdW5jdGlvbihiLGMsZCl7YiYmYyYmYiE9PWMmJlEud2hlbihmfHwhMCkudGhlbihmdW5jdGlvbigpe2IucGF1c2UoKSxhPWMsZj1qKGIuZ2V0VmlkZW9Nb2RlbCgpLGMuZ2V0VmlkZW9Nb2RlbCgpKSxkP2koYi5nZXRWaWRlb01vZGVsKCkuZ2V0Q3VycmVudFRpbWUoKSk6aShjLmdldFN0YXJ0VGltZSgpKSxnKCl9KX07cmV0dXJue3N5c3RlbTp2b2lkIDAsdmlkZW9Nb2RlbDp2b2lkIDAsbWFuaWZlc3RMb2FkZXI6dm9pZCAwLG1hbmlmZXN0VXBkYXRlcjp2b2lkIDAsbWFuaWZlc3RNb2RlbDp2b2lkIDAsbWVkaWFTb3VyY2VFeHQ6dm9pZCAwLHNvdXJjZUJ1ZmZlckV4dDp2b2lkIDAsYnVmZmVyRXh0OnZvaWQgMCxtYW5pZmVzdEV4dDp2b2lkIDAsZnJhZ21lbnRDb250cm9sbGVyOnZvaWQgMCxhYnJDb250cm9sbGVyOnZvaWQgMCxmcmFnbWVudEV4dDp2b2lkIDAsY2FwYWJpbGl0aWVzOnZvaWQgMCxkZWJ1Zzp2b2lkIDAsbWV0cmljc0V4dDp2b2lkIDAsZXJySGFuZGxlcjp2b2lkIDAsZ2V0TWFuaWZlc3RFeHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5nZXRNYW5pZmVzdEV4dCgpfSxzZXRBdXRvUGxheTpmdW5jdGlvbihhKXtlPWF9LGdldEF1dG9QbGF5OmZ1bmN0aW9uKCl7cmV0dXJuIGV9LGdldFZpZGVvTW9kZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWRlb01vZGVsfSxzZXRWaWRlb01vZGVsOmZ1bmN0aW9uKGEpe3RoaXMudmlkZW9Nb2RlbD1hfSxsb2FkOmZ1bmN0aW9uKGMpe3ZhciBkLGY9dGhpcztmLm1hbmlmZXN0TG9hZGVyLmxvYWQoYykudGhlbihmdW5jdGlvbihjKXtmLm1hbmlmZXN0TW9kZWwuc2V0VmFsdWUoYyksZi5kZWJ1Zy5sb2coXCJNYW5pZmVzdCBoYXMgbG9hZGVkLlwiKSxmLmRlYnVnLmxvZyhmLm1hbmlmZXN0TW9kZWwuZ2V0VmFsdWUoKSksZi5tYW5pZmVzdFVwZGF0ZXIuaW5pdCgpLGYubWFuaWZlc3RFeHQuZ2V0UGVyaW9kQ291bnQoYykudGhlbihmdW5jdGlvbihnKXtmb3IodmFyIGg9MDtnPmg7aCsrKWQ9Zi5zeXN0ZW0uZ2V0T2JqZWN0KFwic3RyZWFtXCIpLGQuc2V0VmlkZW9Nb2RlbCgwPT09aD9mLnZpZGVvTW9kZWw6dC5jYWxsKGYpKSxkLmluaXRQcm90ZWN0aW9uKCksZC5zZXRBdXRvUGxheShlKSxkLmxvYWQoYyxoKSxiLnB1c2goZCk7YT1iWzBdLGsoYS5nZXRWaWRlb01vZGVsKCkpfSl9LGZ1bmN0aW9uKCl7Zi5yZXNldCgpfSl9LHJlc2V0OmZ1bmN0aW9uKCl7YSYmbChhLmdldFZpZGVvTW9kZWwoKSk7Zm9yKHZhciBjPTAsZD1iLmxlbmd0aDtkPmM7YysrKXt2YXIgZT1iW2NdO2UucmVzZXQoKSxlIT09YSYmdShlLmdldFZpZGVvTW9kZWwoKS5nZXRFbGVtZW50KCkpfWI9W10sdGhpcy5tYW5pZmVzdFVwZGF0ZXIuc3RvcCgpLHRoaXMubWFuaWZlc3RNb2RlbC5zZXRWYWx1ZShudWxsKSxmPW51bGwsYT1udWxsfSxwbGF5Omcsc2VlazppLHBhdXNlOmh9fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuU3RyZWFtQ29udHJvbGxlci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5TdHJlYW1Db250cm9sbGVyfSxNZWRpYVBsYXllci5tb2RlbHMuVmlkZW9Nb2RlbD1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhLGI9W10sYz1mdW5jdGlvbigpe3JldHVybiBiLmxlbmd0aD4wfSxkPWZ1bmN0aW9uKGMpe251bGwhPT1jJiZiW2NdIT09ITAmJihiLnB1c2goYyksYltjXT0hMCxhLnBsYXliYWNrUmF0ZT0wKX0sZT1mdW5jdGlvbihkKXtpZihudWxsIT09ZCl7YltkXT0hMTt2YXIgZT1iLmluZGV4T2YoZCk7LTEhPT1lJiZiLnNwbGljZShlLDEpLGMoKT09PSExJiYoYS5wbGF5YmFja1JhdGU9MSl9fSxmPWZ1bmN0aW9uKGEsYil7Yj9kKGEpOmUoYSl9O3JldHVybntzeXN0ZW06dm9pZCAwLHNldHVwOmZ1bmN0aW9uKCl7fSxwbGF5OmZ1bmN0aW9uKCl7YS5wbGF5KCl9LHBhdXNlOmZ1bmN0aW9uKCl7YS5wYXVzZSgpfSxpc1BhdXNlZDpmdW5jdGlvbigpe3JldHVybiBhLnBhdXNlZH0sZ2V0UGxheWJhY2tSYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGEucGxheWJhY2tSYXRlfSxzZXRQbGF5YmFja1JhdGU6ZnVuY3Rpb24oYil7YS5wbGF5YmFja1JhdGU9Yn0sZ2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gYS5jdXJyZW50VGltZX0sc2V0Q3VycmVudFRpbWU6ZnVuY3Rpb24oYil7YS5jdXJyZW50VGltZSE9YiYmKGEuY3VycmVudFRpbWU9Yil9LGxpc3RlbjpmdW5jdGlvbihiLGMpe2EuYWRkRXZlbnRMaXN0ZW5lcihiLGMsITEpfSx1bmxpc3RlbjpmdW5jdGlvbihiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsITEpfSxnZXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldEVsZW1lbnQ6ZnVuY3Rpb24oYil7YT1ifSxzZXRTb3VyY2U6ZnVuY3Rpb24oYil7YS5zcmM9Yn0sc3RhbGxTdHJlYW06Zixpc1N0YWxsZWQ6Y319LE1lZGlhUGxheWVyLm1vZGVscy5WaWRlb01vZGVsLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIubW9kZWxzLlZpZGVvTW9kZWx9LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5WaWRlb01vZGVsRXh0ZW5zaW9ucz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3JldHVybntnZXREcm9wcGVkRnJhbWVzOmZ1bmN0aW9uKGEpe3ZhciBiPW51bGwhPT1hLndlYmtpdERyb3BwZWRGcmFtZUNvdW50LGM9LTE7cmV0dXJuIGImJihjPWEud2Via2l0RHJvcHBlZEZyYW1lQ291bnQpLGN9fX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlZpZGVvTW9kZWxFeHRlbnNpb25zLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlZpZGVvTW9kZWxFeHRlbnNpb25zfSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuVGV4dENvbnRyb2xsZXI9ZnVuY3Rpb24oKXt2YXIgYSxiLGM9XCJMT0FESU5HXCIsZD1cIlJFQURZXCIsZT0hMSxmPS0xLGc9ZCxoPWZ1bmN0aW9uKGEpe3RoaXMuZGVidWcubG9nKFwiVGV4dENvbnRyb2xsZXIgc2V0U3RhdGUgdG86XCIrYSksZz1hfSxpPWZ1bmN0aW9uKCl7aWYoZSYmZz09PWQpe3ZhciBiPXRoaXM7aC5jYWxsKGIsYyksYi5pbmRleEhhbmRsZXIuZ2V0SW5pdFJlcXVlc3QoMCxhKS50aGVuKGZ1bmN0aW9uKGEpe2IuZGVidWcubG9nKFwiTG9hZGluZyB0ZXh0IHRyYWNrIGluaXRpYWxpemF0aW9uOiBcIithLnVybCksYi5kZWJ1Zy5sb2coYSksYi5mcmFnbWVudExvYWRlci5sb2FkKGEpLnRoZW4oay5iaW5kKGIsYSksbC5iaW5kKGIsYSkpLGguY2FsbChiLGMpfSl9fSxqPWZ1bmN0aW9uKCl7aS5jYWxsKHRoaXMpfSxrPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9dGhpcztkLmRlYnVnLmxvZyhcIiBUZXh0IHRyYWNrIEJ5dGVzIGZpbmlzaGVkIGxvYWRpbmc6IFwiK2EudXJsKSxkLmZyYWdtZW50Q29udHJvbGxlci5wcm9jZXNzKGMuZGF0YSkudGhlbihmdW5jdGlvbihhKXtudWxsIT09YSYmKGQuZGVidWcubG9nKFwiUHVzaCB0ZXh0IHRyYWNrIGJ5dGVzOiBcIithLmJ5dGVMZW5ndGgpLGQuc291cmNlQnVmZmVyRXh0LmFwcGVuZChiLGEsZC52aWRlb01vZGVsKSl9KX0sbD1mdW5jdGlvbigpe307cmV0dXJue3ZpZGVvTW9kZWw6dm9pZCAwLGZyYWdtZW50TG9hZGVyOnZvaWQgMCxmcmFnbWVudENvbnRyb2xsZXI6dm9pZCAwLGluZGV4SGFuZGxlcjp2b2lkIDAsc291cmNlQnVmZmVyRXh0OnZvaWQgMCxkZWJ1Zzp2b2lkIDAsaW5pdGlhbGl6ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZj10aGlzO2Yuc2V0VmlkZW9Nb2RlbChkKSxmLnNldFBlcmlvZEluZGV4KGEpLGYuc2V0RGF0YShiKSxmLnNldEJ1ZmZlcihjKSxlPSEwfSxnZXRQZXJpb2RJbmRleDpmdW5jdGlvbigpe3JldHVybiBmfSxzZXRQZXJpb2RJbmRleDpmdW5jdGlvbihhKXtmPWF9LGdldFZpZGVvTW9kZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWRlb01vZGVsfSxzZXRWaWRlb01vZGVsOmZ1bmN0aW9uKGEpe3RoaXMudmlkZW9Nb2RlbD1hfSxnZXREYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldERhdGE6ZnVuY3Rpb24oYil7YT1ifSxnZXRCdWZmZXI6ZnVuY3Rpb24oKXtyZXR1cm4gYn0sc2V0QnVmZmVyOmZ1bmN0aW9uKGEpe2I9YX0scmVzZXQ6ZnVuY3Rpb24oYSxjKXthfHwodGhpcy5zb3VyY2VCdWZmZXJFeHQuYWJvcnQoYyxiKSx0aGlzLnNvdXJjZUJ1ZmZlckV4dC5yZW1vdmVTb3VyY2VCdWZmZXIoYyxiKSl9LHN0YXJ0Omp9fSxNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuVGV4dENvbnRyb2xsZXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuVGV4dENvbnRyb2xsZXJ9LE1lZGlhUGxheWVyLnV0aWxzLlRleHRUcmFja0V4dGVuc2lvbnM9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtyZXR1cm57YWRkVGV4dFRyYWNrOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9YS5hZGRUZXh0VHJhY2soXCJjYXB0aW9uc1wiLGMsZCk7Zi5kZWZhdWx0PWUsZi5tb2RlPVwic2hvd2luZ1wiO2Zvcih2YXIgZyBpbiBiKXt2YXIgaD1iW2ddO2YuYWRkQ3VlKG5ldyBUZXh0VHJhY2tDdWUoaC5zdGFydCxoLmVuZCxoLmRhdGEpKX1yZXR1cm4gUS53aGVuKGYpfSxkZWxldGVDdWVzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1hLnRleHRUcmFja3NbMF0sYz1iLmN1ZXMsZD1jLmxlbmd0aDtkPj0wO2QtLSliLnJlbW92ZUN1ZShjW2RdKTtiLm1vZGU9XCJkaXNhYmxlZFwifX19LE1lZGlhUGxheWVyLmRlcGVuZGVuY2llcy5UZXh0VlRUU291cmNlQnVmZmVyPWZ1bmN0aW9uKCl7dmFyIGEsYixjO3JldHVybntzeXN0ZW06dm9pZCAwLGV2ZW50QnVzOnZvaWQgMCxpbml0aWFsaXplOmZ1bmN0aW9uKGQsZSl7Yz1kLGE9ZS5nZXRWaWRlb01vZGVsKCkuZ2V0RWxlbWVudCgpLGI9ZS5nZXREYXRhKCl9LGFwcGVuZDpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2QuZ2V0UGFyc2VyKCkucGFyc2UoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50MTZBcnJheShjKSkpLnRoZW4oZnVuY3Rpb24oYyl7dmFyIGU9Yi5SZXByZXNlbnRhdGlvbl9hc0FycmF5WzBdLmlkLGY9Yi5sYW5nO2QuZ2V0VGV4dFRyYWNrRXh0ZW5zaW9ucygpLmFkZFRleHRUcmFjayhhLGMsZSxmLCEwKS50aGVuKGZ1bmN0aW9uKCl7ZC5ldmVudEJ1cy5kaXNwYXRjaEV2ZW50KHt0eXBlOlwidXBkYXRlZW5kXCJ9KX0pfSl9LGFib3J0OmZ1bmN0aW9uKCl7dGhpcy5nZXRUZXh0VHJhY2tFeHRlbnNpb25zKCkuZGVsZXRlQ3VlcyhhKX0sZ2V0UGFyc2VyOmZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuXCJ0ZXh0L3Z0dFwiPT09YyYmKGE9dGhpcy5zeXN0ZW0uZ2V0T2JqZWN0KFwidnR0UGFyc2VyXCIpKSxhfSxnZXRUZXh0VHJhY2tFeHRlbnNpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3lzdGVtLmdldE9iamVjdChcInRleHRUcmFja0V4dGVuc2lvbnNcIil9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuZXZlbnRCdXMuYWRkRXZlbnRMaXN0ZW5lcihhLGIsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuZXZlbnRCdXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGIsYyl9fX0sTWVkaWFQbGF5ZXIuZGVwZW5kZW5jaWVzLlRleHRWVFRTb3VyY2VCdWZmZXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5kZXBlbmRlbmNpZXMuVGV4dFZUVFNvdXJjZUJ1ZmZlcn0sTWVkaWFQbGF5ZXIudXRpbHMuVlRUUGFyc2VyPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9ZnVuY3Rpb24oYSl7dmFyIGI9YS5zcGxpdChcIjpcIiksYz1iLmxlbmd0aC0xO3JldHVybiBhPTYwKnBhcnNlSW50KGJbYy0xXSwxMCkrcGFyc2VGbG9hdChiW2NdLDEwKSwyPT09YyYmKGErPTM2MDAqcGFyc2VJbnQoYlswXSwxMCkpLGF9O3JldHVybntwYXJzZTpmdW5jdGlvbihiKXt2YXIgYyxkPS8oPzpcXHJcXG58XFxyfFxcbikvZ20sZT0vLS0+LyxmPS8oXltcXHNdK3xbXFxzXSskKS9nLGc9W107Yj1iLnNwbGl0KGQpLGM9Yi5sZW5ndGg7Zm9yKHZhciBoPTA7Yz5oO2grKyl7dmFyIGk9YltoXTtpZihpLmxlbmd0aD4wJiZcIldFQlZUVFwiIT09aSYmaS5tYXRjaChlKSl7dmFyIGo9aS5zcGxpdChlKSxrPWJbaCsxXTtnLnB1c2goe3N0YXJ0OmEoalswXS5yZXBsYWNlKGYsXCJcIikpLGVuZDphKGpbMV0ucmVwbGFjZShmLFwiXCIpKSxkYXRhOmt9KX19cmV0dXJuIFEud2hlbihnKX19fSxNZWRpYVBsYXllci5ydWxlcy5CYXNlUnVsZXNDb2xsZWN0aW9uPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9W107cmV0dXJue2Rvd25sb2FkUmF0aW9SdWxlOnZvaWQgMCxpbnN1ZmZpY2llbnRCdWZmZXJSdWxlOnZvaWQgMCxnZXRSdWxlczpmdW5jdGlvbigpe3JldHVybiBRLndoZW4oYSl9LHNldHVwOmZ1bmN0aW9uKCl7dmFyIGE9dGhpczthLmdldFJ1bGVzKCkudGhlbihmdW5jdGlvbihiKXtiLnB1c2goYS5kb3dubG9hZFJhdGlvUnVsZSksYi5wdXNoKGEuaW5zdWZmaWNpZW50QnVmZmVyUnVsZSl9KX19fSxNZWRpYVBsYXllci5ydWxlcy5CYXNlUnVsZXNDb2xsZWN0aW9uLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIucnVsZXMuQmFzZVJ1bGVzQ29sbGVjdGlvbn0sTWVkaWFQbGF5ZXIucnVsZXMuRG93bmxvYWRSYXRpb1J1bGU9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcyxlPVEuZGVmZXIoKTtyZXR1cm4gZC5tYW5pZmVzdEV4dC5nZXRSZXByZXNlbnRhdGlvbkZvcihhLGMpLnRoZW4oZnVuY3Rpb24oYSl7ZC5tYW5pZmVzdEV4dC5nZXRCYW5kd2lkdGgoYSkudGhlbihmdW5jdGlvbihhKXtlLnJlc29sdmUoYS9iKX0pfSksZS5wcm9taXNlfTtyZXR1cm57ZGVidWc6dm9pZCAwLG1hbmlmZXN0RXh0OnZvaWQgMCxjaGVja0luZGV4OmZ1bmN0aW9uKGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbixvPXRoaXMscD1jLkh0dHBMaXN0LHE9Ljc1O3JldHVybiBvLmRlYnVnLmxvZyhcIkNoZWNraW5nIGRvd25sb2FkIHJhdGlvIHJ1bGUuLi5cIiksYz9udWxsPT09cHx8dm9pZCAwPT09cHx8MD09PXAubGVuZ3RoPyhvLmRlYnVnLmxvZyhcIk5vIHJlcXVlc3RzIG1hZGUgZm9yIHRoaXMgc3RyZWFtIHlldCwgYmFpbGluZy5cIiksUS53aGVuKG5ldyBNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0KSk6KGU9cFtwLmxlbmd0aC0xXSxnPShlLnRmaW5pc2guZ2V0VGltZSgpLWUudHJlcXVlc3QuZ2V0VGltZSgpKS8xZTMsZj0oZS50ZmluaXNoLmdldFRpbWUoKS1lLnRyZXNwb25zZS5nZXRUaW1lKCkpLzFlMywwPj1nPyhvLmRlYnVnLmxvZyhcIkRvbid0IGtub3cgaG93IGxvbmcgdGhlIGRvd25sb2FkIG9mIHRoZSBsYXN0IGZyYWdtZW50IHRvb2ssIGJhaWxpbmcuXCIpLFEud2hlbihuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdCkpOm51bGw9PT1lLm1lZGlhZHVyYXRpb258fHZvaWQgMD09PWUubWVkaWFkdXJhdGlvbnx8ZS5tZWRpYWR1cmF0aW9uPD0wPyhvLmRlYnVnLmxvZyhcIkRvbid0IGtub3cgdGhlIGR1cmF0aW9uIG9mIHRoZSBsYXN0IG1lZGlhIGZyYWdtZW50LCBiYWlsaW5nLlwiKSxRLndoZW4obmV3IE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QpKTooaz1RLmRlZmVyKCksaT1lLm1lZGlhZHVyYXRpb24vZyxoPWUubWVkaWFkdXJhdGlvbi9mKnEsaXNOYU4oaCl8fGlzTmFOKGkpPyhvLmRlYnVnLmxvZyhcIlRvdGFsIHRpbWU6IFwiK2crXCJzXCIpLG8uZGVidWcubG9nKFwiRG93bmxvYWQgdGltZTogXCIrZitcInNcIiksby5kZWJ1Zy5sb2coXCJUaGUgcmF0aW9zIGFyZSBOYU4sIGJhaWxpbmcuXCIpLFEud2hlbihuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdCkpOihvLmRlYnVnLmxvZyhcIlRvdGFsIHJhdGlvOiBcIitpKSxvLmRlYnVnLmxvZyhcIkRvd25sb2FkIHJhdGlvOiBcIitoKSxvLmRlYnVnLmxvZyhcIkRvd25sb2FkIHJhdGlvOiBcIitoKSxpc05hTihoKT8oby5kZWJ1Zy5sb2coXCJJbnZhbGlkIHJhdGlvLCBiYWlsaW5nLlwiKSxrLnJlc29sdmUobmV3IE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QpKToxPmg/KG8uZGVidWcubG9nKFwiRG93bmxvYWQgcmF0aW8gaXMgcG9vci5cIiksYj4wPyhvLmRlYnVnLmxvZyhcIldlIGFyZSBub3QgYXQgdGhlIGxvd2VzdCBiaXRyYXRlLCBzbyBzd2l0Y2ggZG93bi5cIiksby5tYW5pZmVzdEV4dC5nZXRSZXByZXNlbnRhdGlvbkZvcihiLTEsZCkudGhlbihmdW5jdGlvbihhKXtvLm1hbmlmZXN0RXh0LmdldEJhbmR3aWR0aChhKS50aGVuKGZ1bmN0aW9uKGEpe28ubWFuaWZlc3RFeHQuZ2V0UmVwcmVzZW50YXRpb25Gb3IoYixkKS50aGVuKGZ1bmN0aW9uKGMpe28ubWFuaWZlc3RFeHQuZ2V0QmFuZHdpZHRoKGMpLnRoZW4oZnVuY3Rpb24oYyl7aj1hL2Msby5kZWJ1Zy5sb2coXCJTd2l0Y2ggcmF0aW86IFwiK2opLGo+aD8oby5kZWJ1Zy5sb2coXCJUaGluZ3MgbXVzdCBiZSBnb2luZyBwcmV0dHkgYmFkLCBzd2l0Y2ggYWxsIHRoZSB3YXkgZG93bi5cIiksay5yZXNvbHZlKG5ldyBNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0KDApKSk6KG8uZGVidWcubG9nKFwiVGhpbmdzIGNvdWxkIGJlIGJldHRlciwgc28ganVzdCBzd2l0Y2ggZG93biBvbmUgaW5kZXguXCIpLGsucmVzb2x2ZShuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdChiLTEpKSlcclxufSl9KX0pfSkpOihvLmRlYnVnLmxvZyhcIldlIGFyZSBhdCB0aGUgbG93ZXN0IGJpdHJhdGUgYW5kIGNhbm5vdCBzd2l0Y2ggZG93biwgdXNlIGN1cnJlbnQuXCIpLGsucmVzb2x2ZShuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdChiKSkpKTooby5kZWJ1Zy5sb2coXCJEb3dubG9hZCByYXRpbyBpcyBnb29kLlwiKSxvLm1hbmlmZXN0RXh0LmdldFJlcHJlc2VudGF0aW9uQ291bnQoZCkudGhlbihmdW5jdGlvbihjKXtjLT0xLGM+Yj8oby5kZWJ1Zy5sb2coXCJXZSBhcmUgbm90IGF0IHRoZSBoaWdoZXN0IGJpdHJhdGUsIHNvIHN3aXRjaCB1cC5cIiksby5tYW5pZmVzdEV4dC5nZXRSZXByZXNlbnRhdGlvbkZvcihiKzEsZCkudGhlbihmdW5jdGlvbihlKXtvLm1hbmlmZXN0RXh0LmdldEJhbmR3aWR0aChlKS50aGVuKGZ1bmN0aW9uKGUpe28ubWFuaWZlc3RFeHQuZ2V0UmVwcmVzZW50YXRpb25Gb3IoYixkKS50aGVuKGZ1bmN0aW9uKGYpe28ubWFuaWZlc3RFeHQuZ2V0QmFuZHdpZHRoKGYpLnRoZW4oZnVuY3Rpb24oZil7aWYoaj1lL2Ysby5kZWJ1Zy5sb2coXCJTd2l0Y2ggcmF0aW86IFwiK2opLGg+PWopaWYoaD4xZTMpby5kZWJ1Zy5sb2coXCJUb25zIG9mIGJhbmR3aWR0aCBhdmFpbGFibGUsIGdvIGFsbCB0aGUgd2F5IHVwLlwiKSxrLnJlc29sdmUobmV3IE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QoYy0xKSk7ZWxzZSBpZihoPjEwMClvLmRlYnVnLmxvZyhcIkp1c3QgZW5vdWdoIGJhbmR3aWR0aCBhdmFpbGFibGUsIHN3aXRjaCB1cCBvbmUuXCIpLGsucmVzb2x2ZShuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdChiKzEpKTtlbHNle2ZvcihvLmRlYnVnLmxvZyhcIk5vdCBleGFjdGx5IHN1cmUgd2hlcmUgdG8gZ28sIHNvIGRvIHNvbWUgbWF0aC5cIiksbT0tMSxsPVtdOyhtKz0xKTxjOylsLnB1c2goYS5jYWxsKG8sbSxmLGQpKTtRLmFsbChsKS50aGVuKGZ1bmN0aW9uKGEpe2ZvcihtPTAsbj1hLmxlbmd0aDtuPm0mJiEoaDxhW21dKTttKz0xKTtvLmRlYnVnLmxvZyhcIkNhbGN1bGF0ZWQgaWRlYWwgbmV3IHF1YWxpdHkgaW5kZXggaXM6IFwiK20pLGsucmVzb2x2ZShuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdChtKSl9KX1lbHNlIG8uZGVidWcubG9nKFwiTm90IGVub3VnaCBiYW5kd2lkdGggdG8gc3dpdGNoIHVwLlwiKSxrLnJlc29sdmUobmV3IE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QpfSl9KX0pfSkpOihvLmRlYnVnLmxvZyhcIldlIGFyZSBhdCB0aGUgaGlnaGVzdCBiaXRyYXRlIGFuZCBjYW5ub3Qgc3dpdGNoIHVwLCB1c2UgY3VycmVudC5cIiksay5yZXNvbHZlKG5ldyBNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0KGMpKSl9KSksay5wcm9taXNlKSkpOihvLmRlYnVnLmxvZyhcIk5vIG1ldHJpY3MsIGJhaWxpbmcuXCIpLFEud2hlbihuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdCkpfX19LE1lZGlhUGxheWVyLnJ1bGVzLkRvd25sb2FkUmF0aW9SdWxlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIucnVsZXMuRG93bmxvYWRSYXRpb1J1bGV9LE1lZGlhUGxheWVyLnJ1bGVzLkluc3VmZmljaWVudEJ1ZmZlclJ1bGU9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYT0wLGI9MztyZXR1cm57ZGVidWc6dm9pZCAwLGNoZWNrSW5kZXg6ZnVuY3Rpb24oYyxkKXt2YXIgZSxmLGc9dGhpcyxoPSExLGk9TWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuREVGQVVMVDtyZXR1cm4gZy5kZWJ1Zy5sb2coXCJDaGVja2luZyBpbnN1ZmZpY2llbnQgYnVmZmVyIHJ1bGUuLi5cIiksbnVsbD09PWQuUGxheUxpc3R8fHZvaWQgMD09PWQuUGxheUxpc3R8fDA9PT1kLlBsYXlMaXN0Lmxlbmd0aD8oZy5kZWJ1Zy5sb2coXCJOb3QgZW5vdWdoIGluZm9ybWF0aW9uIGZvciBydWxlLlwiKSxRLndoZW4obmV3IE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QpKTooZT1kLlBsYXlMaXN0W2QuUGxheUxpc3QubGVuZ3RoLTFdLG51bGw9PT1lfHx2b2lkIDA9PT1lfHwwPT09ZS50cmFjZS5sZW5ndGg/KGcuZGVidWcubG9nKFwiTm90IGVub3VnaCBpbmZvcm1hdGlvbiBmb3IgcnVsZS5cIiksUS53aGVuKG5ldyBNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0KSk6KGY9ZS50cmFjZVtlLnRyYWNlLmxlbmd0aC0yXSxudWxsPT09Znx8dm9pZCAwPT09Znx8bnVsbD09PWYuc3RvcHJlYXNvbnx8dm9pZCAwPT09Zi5zdG9wcmVhc29uPyhnLmRlYnVnLmxvZyhcIk5vdCBlbm91Z2ggaW5mb3JtYXRpb24gZm9yIHJ1bGUuXCIpLFEud2hlbihuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdCkpOihmLnN0b3ByZWFzb249PT1NZWRpYVBsYXllci52by5tZXRyaWNzLlBsYXlMaXN0LlRyYWNlLlJFQlVGRkVSSU5HX1JFQVNPTiYmKGg9ITAsYSs9MSxnLmRlYnVnLmxvZyhcIk51bWJlciBvZiB0aW1lcyB0aGUgYnVmZmVyIGhhcyBydW4gZHJ5OiBcIithKSksYT5iJiYoaT1NZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5TVFJPTkcsZy5kZWJ1Zy5sb2coXCJBcHBseSBTVFJPTkcgdG8gYnVmZmVyIHJ1bGUuXCIpKSxoPyhnLmRlYnVnLmxvZyhcIlRoZSBidWZmZXIgcmFuIGRyeSByZWNlbnRseSwgc3dpdGNoIGRvd24uXCIpLFEud2hlbihuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdChjLTEsaSkpKTphPmI/KGcuZGVidWcubG9nKFwiVG9vIG1hbnkgZHJ5IGJ1ZmZlciBoaXRzLCBxdWl0IHN3aXRjaGluZyBiaXRyYXRlcy5cIiksUS53aGVuKG5ldyBNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0KGMsaSkpKTpRLndoZW4obmV3IE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QoTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuTk9fQ0hBTkdFLGkpKSkpKX19fSxNZWRpYVBsYXllci5ydWxlcy5JbnN1ZmZpY2llbnRCdWZmZXJSdWxlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIucnVsZXMuSW5zdWZmaWNpZW50QnVmZmVyUnVsZX0sTWVkaWFQbGF5ZXIucnVsZXMuTGltaXRTd2l0Y2hlc1J1bGU9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgYT0xMCxiPTJlNCxjPTUsZD0wO3JldHVybntkZWJ1Zzp2b2lkIDAsY2hlY2tJbmRleDpmdW5jdGlvbihlLGYpe2lmKGQ+MClyZXR1cm4gZC09MSxRLndoZW4obmV3IE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QoZSxNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5TVFJPTkcpKTt2YXIgZyxoLGksaj10aGlzLGs9ITEsbD0obmV3IERhdGUpLmdldFRpbWUoKSxtPWYuUmVwU3dpdGNoTGlzdC5sZW5ndGg7Zm9yKGouZGVidWcubG9nKFwiQ2hlY2tpbmcgbGltaXQgc3dpdGNoZXMgcnVsZS4uLlwiKSxpPW0tMTtpPj0wO2ktPTEpe2lmKGc9Zi5SZXBTd2l0Y2hMaXN0W2ldLGg9bC1nLnQuZ2V0VGltZSgpLGg+PWIpe2ouZGVidWcubG9nKFwiUmVhY2hlZCB0aW1lIGxpbWl0LCBiYWlsaW5nLlwiKTticmVha31pZihpPj1hKXtqLmRlYnVnLmxvZyhcIkZvdW5kIHRvbyBtYW55IHN3aXRjaGVzIHdpdGhpbiB2YWxpZGF0aW9uIHRpbWUsIGZvcmNlIHRoZSBzdHJlYW0gdG8gbm90IGNoYW5nZS5cIiksaz0hMDticmVha319cmV0dXJuIGs/KGouZGVidWcubG9nKFwiV2FpdCBzb21lIHRpbWUgYmVmb3JlIGFsbG93aW5nIGFub3RoZXIgc3dpdGNoLlwiKSxkPWMsUS53aGVuKG5ldyBNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0KGUsTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuU1RST05HKSkpOlEud2hlbihuZXcgTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdChNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LnByb3RvdHlwZS5OT19DSEFOR0UsTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdC5wcm90b3R5cGUuU1RST05HKSl9fX0sTWVkaWFQbGF5ZXIucnVsZXMuTGltaXRTd2l0Y2hlc1J1bGUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5ydWxlcy5MaW1pdFN3aXRjaGVzUnVsZX0sTWVkaWFQbGF5ZXIucnVsZXMuU3dpdGNoUmVxdWVzdD1mdW5jdGlvbihhLGIpe1widXNlIHN0cmljdFwiO3RoaXMucXVhbGl0eT1hLHRoaXMucHJpb3JpdHk9Yix2b2lkIDA9PT10aGlzLnF1YWxpdHkmJih0aGlzLnF1YWxpdHk9OTk5KSx2b2lkIDA9PT10aGlzLnByaW9yaXR5JiYodGhpcy5wcmlvcml0eT0uNSl9LE1lZGlhUGxheWVyLnJ1bGVzLlN3aXRjaFJlcXVlc3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci5ydWxlcy5Td2l0Y2hSZXF1ZXN0LE5PX0NIQU5HRTo5OTksREVGQVVMVDouNSxTVFJPTkc6MSxXRUFLOjB9LE1lZGlhUGxheWVyLm1vZGVscy5NZXRyaWNzTGlzdD1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3JldHVybntUY3BMaXN0OltdLEh0dHBMaXN0OltdLFJlcFN3aXRjaExpc3Q6W10sQnVmZmVyTGV2ZWw6W10sUGxheUxpc3Q6W10sRHJvcHBlZEZyYW1lczpbXX19LE1lZGlhUGxheWVyLm1vZGVscy5NZXRyaWNzTGlzdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLm1vZGVscy5NZXRyaWNzTGlzdH0sTWVkaWFQbGF5ZXIudm8uU2VnbWVudFJlcXVlc3Q9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt0aGlzLmFjdGlvbj1cImRvd25sb2FkXCIsdGhpcy5zdGFydFRpbWU9MC8wLHRoaXMuc3RyZWFtVHlwZT1udWxsLHRoaXMudHlwZT1udWxsLHRoaXMuZHVyYXRpb249MC8wLHRoaXMudGltZXNjYWxlPTAvMCx0aGlzLnJhbmdlPW51bGwsdGhpcy51cmw9bnVsbCx0aGlzLnJlcXVlc3RTdGFydERhdGU9bnVsbCx0aGlzLmZpcnN0Qnl0ZURhdGU9bnVsbCx0aGlzLnJlcXVlc3RFbmREYXRlPW51bGwsdGhpcy5kZWZlcnJlZD1udWxsLHRoaXMucXVhbGl0eT0wLzAsdGhpcy5pbmRleD0wLzB9LE1lZGlhUGxheWVyLnZvLlNlZ21lbnRSZXF1ZXN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIudm8uU2VnbWVudFJlcXVlc3QsQUNUSU9OX0RPV05MT0FEOlwiZG93bmxvYWRcIixBQ1RJT05fQ09NUExFVEU6XCJjb21wbGV0ZVwifSxNZWRpYVBsYXllci52by5tZXRyaWNzLkJ1ZmZlckxldmVsPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dGhpcy50PW51bGwsdGhpcy5sZXZlbD1udWxsfSxNZWRpYVBsYXllci52by5tZXRyaWNzLkJ1ZmZlckxldmVsLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIudm8ubWV0cmljcy5CdWZmZXJMZXZlbH0sTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5Ecm9wcGVkRnJhbWVzPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dGhpcy50aW1lPW51bGwsdGhpcy5kcm9wcGVkRnJhbWVzPW51bGx9LE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuRHJvcHBlZEZyYW1lcy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1lZGlhUGxheWVyLnZvLm1ldHJpY3MuRHJvcHBlZEZyYW1lc30sTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5IVFRQUmVxdWVzdD1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3RoaXMudGNwaWQ9bnVsbCx0aGlzLnR5cGU9bnVsbCx0aGlzLnVybD1udWxsLHRoaXMuYWN0dWFsdXJsPW51bGwsdGhpcy5yYW5nZT1udWxsLHRoaXMudHJlcXVlc3Q9bnVsbCx0aGlzLnRyZXNwb25zZT1udWxsLHRoaXMudGZpbmlzaD1udWxsLHRoaXMucmVzcG9uc2Vjb2RlPW51bGwsdGhpcy5pbnRlcnZhbD1udWxsLHRoaXMubWVkaWFkdXJhdGlvbj1udWxsLHRoaXMudHJhY2U9W119LE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuSFRUUFJlcXVlc3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci52by5tZXRyaWNzLkhUVFBSZXF1ZXN0fSxNZWRpYVBsYXllci52by5tZXRyaWNzLkhUVFBSZXF1ZXN0LlRyYWNlPWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dGhpcy5zPW51bGwsdGhpcy5kPW51bGwsdGhpcy5iPVtdfSxNZWRpYVBsYXllci52by5tZXRyaWNzLkhUVFBSZXF1ZXN0LlRyYWNlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIudm8ubWV0cmljcy5IVFRQUmVxdWVzdC5UcmFjZX0sTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdD1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3RoaXMuc3RhcnQ9bnVsbCx0aGlzLm1zdGFydD1udWxsLHRoaXMuc3RhcnR0eXBlPW51bGwsdGhpcy50cmFjZT1bXX0sTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdC5UcmFjZT1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3RoaXMucmVwcmVzZW50YXRpb25pZD1udWxsLHRoaXMuc3VicmVwbGV2ZWw9bnVsbCx0aGlzLnN0YXJ0PW51bGwsdGhpcy5tc3RhcnQ9bnVsbCx0aGlzLmR1cmF0aW9uPW51bGwsdGhpcy5wbGF5YmFja3NwZWVkPW51bGwsdGhpcy5zdG9wcmVhc29uPW51bGx9LE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUGxheUxpc3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci52by5tZXRyaWNzLlBsYXlMaXN0fSxNZWRpYVBsYXllci52by5tZXRyaWNzLlBsYXlMaXN0LklOSVRJQUxfUExBWV9TVEFSVF9SRUFTT049XCJpbml0aWFsX3N0YXJ0XCIsTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdC5TRUVLX1NUQVJUX1JFQVNPTj1cInNlZWtcIixNZWRpYVBsYXllci52by5tZXRyaWNzLlBsYXlMaXN0LlRyYWNlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdC5UcmFjZSgpfSxNZWRpYVBsYXllci52by5tZXRyaWNzLlBsYXlMaXN0LlRyYWNlLlVTRVJfUkVRVUVTVF9TVE9QX1JFQVNPTj1cInVzZXJfcmVxdWVzdFwiLE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUGxheUxpc3QuVHJhY2UuUkVQUkVTRU5UQVRJT05fU1dJVENIX1NUT1BfUkVBU09OPVwicmVwcmVzZW50YXRpb25fc3dpdGNoXCIsTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdC5UcmFjZS5FTkRfT0ZfQ09OVEVOVF9TVE9QX1JFQVNPTj1cImVuZF9vZl9jb250ZW50XCIsTWVkaWFQbGF5ZXIudm8ubWV0cmljcy5QbGF5TGlzdC5UcmFjZS5SRUJVRkZFUklOR19SRUFTT049XCJyZWJ1ZmZlcmluZ1wiLE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUmVwcmVzZW50YXRpb25Td2l0Y2g9ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt0aGlzLnQ9bnVsbCx0aGlzLm10PW51bGwsdGhpcy50bz1udWxsLHRoaXMubHRvPW51bGx9LE1lZGlhUGxheWVyLnZvLm1ldHJpY3MuUmVwcmVzZW50YXRpb25Td2l0Y2gucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci52by5tZXRyaWNzLlJlcHJlc2VudGF0aW9uU3dpdGNofSxNZWRpYVBsYXllci52by5tZXRyaWNzLlRDUENvbm5lY3Rpb249ZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt0aGlzLnRjcGlkPW51bGwsdGhpcy5kZXN0PW51bGwsdGhpcy50b3Blbj1udWxsLHRoaXMudGNsb3NlPW51bGwsdGhpcy50Y29ubmVjdD1udWxsfSxNZWRpYVBsYXllci52by5tZXRyaWNzLlRDUENvbm5lY3Rpb24ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNZWRpYVBsYXllci52by5tZXRyaWNzLlRDUENvbm5lY3Rpb259OyJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/jstree.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/jstree.js index 301fbc8dd62..372490cf1d2 100644 --- a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/jstree.js +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/jstree.js @@ -5802,4 +5802,4 @@ // $.jstree.defaults.plugins.push("wholerow"); })); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzdHJlZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianN0cmVlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypnbG9iYWxzIGpRdWVyeSwgZGVmaW5lLCBleHBvcnRzLCByZXF1aXJlLCB3aW5kb3csIGRvY3VtZW50ICovXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHRkZWZpbmUoWydqcXVlcnknXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcblx0XHRmYWN0b3J5KHJlcXVpcmUoJ2pxdWVyeScpKTtcblx0fVxuXHRlbHNlIHtcblx0XHRmYWN0b3J5KGpRdWVyeSk7XG5cdH1cbn0oZnVuY3Rpb24gKCQsIHVuZGVmaW5lZCkge1xuXHRcInVzZSBzdHJpY3RcIjtcbi8qIVxuICoganNUcmVlIDMuMC4wXG4gKiBodHRwOi8vanN0cmVlLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMgSXZhbiBCb3poYW5vdiAoaHR0cDovL3Zha2F0YS5jb20pXG4gKlxuICogTGljZW5zZWQgc2FtZSBhcyBqcXVlcnkgLSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlXG4gKiAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gKi9cbi8qIVxuICogaWYgdXNpbmcganNsaW50IHBsZWFzZSBhbGxvdyBmb3IgdGhlIGpRdWVyeSBnbG9iYWwgYW5kIHVzZSBmb2xsb3dpbmcgb3B0aW9uczogXG4gKiBqc2xpbnQ6IGJyb3dzZXI6IHRydWUsIGFzczogdHJ1ZSwgYml0d2lzZTogdHJ1ZSwgY29udGludWU6IHRydWUsIG5vbWVuOiB0cnVlLCBwbHVzcGx1czogdHJ1ZSwgcmVnZXhwOiB0cnVlLCB1bnBhcmFtOiB0cnVlLCB0b2RvOiB0cnVlLCB3aGl0ZTogdHJ1ZVxuICovXG5cblx0Ly8gcHJldmVudCBhbm90aGVyIGxvYWQ/IG1heWJlIHRoZXJlIGlzIGEgYmV0dGVyIHdheT9cblx0aWYoJC5qc3RyZWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvKipcblx0ICogIyMjIGpzVHJlZSBjb3JlIGZ1bmN0aW9uYWxpdHlcblx0ICovXG5cblx0Ly8gaW50ZXJuYWwgdmFyaWFibGVzXG5cdHZhciBpbnN0YW5jZV9jb3VudGVyID0gMCxcblx0XHRjY3Bfbm9kZSA9IGZhbHNlLFxuXHRcdGNjcF9tb2RlID0gZmFsc2UsXG5cdFx0Y2NwX2luc3QgPSBmYWxzZSxcblx0XHR0aGVtZXNfbG9hZGVkID0gW10sXG5cdFx0c3JjID0gJCgnc2NyaXB0Omxhc3QnKS5hdHRyKCdzcmMnKSxcblx0XHRfZCA9IGRvY3VtZW50LCBfbm9kZSA9IF9kLmNyZWF0ZUVsZW1lbnQoJ0xJJyksIF90ZW1wMSwgX3RlbXAyO1xuXG5cdF9ub2RlLnNldEF0dHJpYnV0ZSgncm9sZScsICd0cmVlaXRlbScpO1xuXHRfdGVtcDEgPSBfZC5jcmVhdGVFbGVtZW50KCdJJyk7XG5cdF90ZW1wMS5jbGFzc05hbWUgPSAnanN0cmVlLWljb24ganN0cmVlLW9jbCc7XG5cdF9ub2RlLmFwcGVuZENoaWxkKF90ZW1wMSk7XG5cdF90ZW1wMSA9IF9kLmNyZWF0ZUVsZW1lbnQoJ0EnKTtcblx0X3RlbXAxLmNsYXNzTmFtZSA9ICdqc3RyZWUtYW5jaG9yJztcblx0X3RlbXAxLnNldEF0dHJpYnV0ZSgnaHJlZicsJyMnKTtcblx0X3RlbXAyID0gX2QuY3JlYXRlRWxlbWVudCgnSScpO1xuXHRfdGVtcDIuY2xhc3NOYW1lID0gJ2pzdHJlZS1pY29uIGpzdHJlZS10aGVtZWljb24nO1xuXHRfdGVtcDEuYXBwZW5kQ2hpbGQoX3RlbXAyKTtcblx0X25vZGUuYXBwZW5kQ2hpbGQoX3RlbXAxKTtcblx0X3RlbXAxID0gX3RlbXAyID0gbnVsbDtcblxuXG5cdC8qKlxuXHQgKiBob2xkcyBhbGwganN0cmVlIHJlbGF0ZWQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMsIGluY2x1ZGluZyB0aGUgYWN0dWFsIGNsYXNzIGFuZCBtZXRob2RzIHRvIGNyZWF0ZSwgYWNjZXNzIGFuZCBtYW5pcHVsYXRlIGluc3RhbmNlcy5cblx0ICogQG5hbWUgJC5qc3RyZWVcblx0ICovXG5cdCQuanN0cmVlID0ge1xuXHRcdC8qKiBcblx0XHQgKiBzcGVjaWZpZXMgdGhlIGpzdHJlZSB2ZXJzaW9uIGluIHVzZVxuXHRcdCAqIEBuYW1lICQuanN0cmVlLnZlcnNpb25cblx0XHQgKi9cblx0XHR2ZXJzaW9uIDogJzMuMC4wLWJldGE5Jyxcblx0XHQvKipcblx0XHQgKiBob2xkcyBhbGwgdGhlIGRlZmF1bHQgb3B0aW9ucyB1c2VkIHdoZW4gY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzXG5cdFx0ICovXG5cdFx0ZGVmYXVsdHMgOiB7XG5cdFx0XHQvKipcblx0XHRcdCAqIGNvbmZpZ3VyZSB3aGljaCBwbHVnaW5zIHdpbGwgYmUgYWN0aXZlIG9uIGFuIGluc3RhbmNlLiBTaG91bGQgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncywgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGEgcGx1Z2luIG5hbWUuIFRoZSBkZWZhdWx0IGlzIGBbXWBcblx0XHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLnBsdWdpbnNcblx0XHRcdCAqL1xuXHRcdFx0cGx1Z2lucyA6IFtdXG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBzdG9yZXMgYWxsIGxvYWRlZCBqc3RyZWUgcGx1Z2lucyAodXNlZCBpbnRlcm5hbGx5KVxuXHRcdCAqIEBuYW1lICQuanN0cmVlLnBsdWdpbnNcblx0XHQgKi9cblx0XHRwbHVnaW5zIDoge30sXG5cdFx0cGF0aCA6IHNyYyAmJiBzcmMuaW5kZXhPZignLycpICE9PSAtMSA/IHNyYy5yZXBsYWNlKC9cXC9bXlxcL10rJC8sJycpIDogJydcblx0fTtcblx0LyoqXG5cdCAqIGNyZWF0ZXMgYSBqc3RyZWUgaW5zdGFuY2Vcblx0ICogQG5hbWUgJC5qc3RyZWUuY3JlYXRlKGVsIFssIG9wdGlvbnNdKVxuXHQgKiBAcGFyYW0ge0RPTUVsZW1lbnR8alF1ZXJ5fFN0cmluZ30gZWwgdGhlIGVsZW1lbnQgdG8gY3JlYXRlIHRoZSBpbnN0YW5jZSBvbiwgY2FuIGJlIGpRdWVyeSBleHRlbmRlZCBvciBhIHNlbGVjdG9yXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIG9wdGlvbnMgZm9yIHRoaXMgaW5zdGFuY2UgKGV4dGVuZHMgYCQuanN0cmVlLmRlZmF1bHRzYClcblx0ICogQHJldHVybiB7anNUcmVlfSB0aGUgbmV3IGluc3RhbmNlXG5cdCAqL1xuXHQkLmpzdHJlZS5jcmVhdGUgPSBmdW5jdGlvbiAoZWwsIG9wdGlvbnMpIHtcblx0XHR2YXIgdG1wID0gbmV3ICQuanN0cmVlLmNvcmUoKytpbnN0YW5jZV9jb3VudGVyKSxcblx0XHRcdG9wdCA9IG9wdGlvbnM7XG5cdFx0b3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUsIHt9LCAkLmpzdHJlZS5kZWZhdWx0cywgb3B0aW9ucyk7XG5cdFx0aWYob3B0ICYmIG9wdC5wbHVnaW5zKSB7XG5cdFx0XHRvcHRpb25zLnBsdWdpbnMgPSBvcHQucGx1Z2lucztcblx0XHR9XG5cdFx0JC5lYWNoKG9wdGlvbnMucGx1Z2lucywgZnVuY3Rpb24gKGksIGspIHtcblx0XHRcdGlmKGkgIT09ICdjb3JlJykge1xuXHRcdFx0XHR0bXAgPSB0bXAucGx1Z2luKGssIG9wdGlvbnNba10pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRtcC5pbml0KGVsLCBvcHRpb25zKTtcblx0XHRyZXR1cm4gdG1wO1xuXHR9O1xuXHQvKipcblx0ICogdGhlIGpzdHJlZSBjbGFzcyBjb25zdHJ1Y3RvciwgdXNlZCBvbmx5IGludGVybmFsbHlcblx0ICogQHByaXZhdGVcblx0ICogQG5hbWUgJC5qc3RyZWUuY29yZShpZClcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGlkIHRoaXMgaW5zdGFuY2UncyBpbmRleFxuXHQgKi9cblx0JC5qc3RyZWUuY29yZSA9IGZ1bmN0aW9uIChpZCkge1xuXHRcdHRoaXMuX2lkID0gaWQ7XG5cdFx0dGhpcy5fY250ID0gMDtcblx0XHR0aGlzLl9kYXRhID0ge1xuXHRcdFx0Y29yZSA6IHtcblx0XHRcdFx0dGhlbWVzIDoge1xuXHRcdFx0XHRcdG5hbWUgOiBmYWxzZSxcblx0XHRcdFx0XHRkb3RzIDogZmFsc2UsXG5cdFx0XHRcdFx0aWNvbnMgOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZWxlY3RlZCA6IFtdLFxuXHRcdFx0XHRsYXN0X2Vycm9yIDoge31cblx0XHRcdH1cblx0XHR9O1xuXHR9O1xuXHQvKipcblx0ICogZ2V0IGEgcmVmZXJlbmNlIHRvIGFuIGV4aXN0aW5nIGluc3RhbmNlXG5cdCAqXG5cdCAqIF9fRXhhbXBsZXNfX1xuXHQgKlxuXHQgKlx0Ly8gcHJvdmlkZWQgYSBjb250YWluZXIgd2l0aCBhbiBJRCBvZiBcInRyZWVcIiwgYW5kIGEgbmVzdGVkIG5vZGUgd2l0aCBhbiBJRCBvZiBcImJyYW5jaFwiXG5cdCAqXHQvLyBhbGwgb2YgdGhlcmUgd2lsbCByZXR1cm4gdGhlIHNhbWUgaW5zdGFuY2Vcblx0ICpcdCQuanN0cmVlLnJlZmVyZW5jZSgndHJlZScpO1xuXHQgKlx0JC5qc3RyZWUucmVmZXJlbmNlKCcjdHJlZScpO1xuXHQgKlx0JC5qc3RyZWUucmVmZXJlbmNlKCQoJyN0cmVlJykpO1xuXHQgKlx0JC5qc3RyZWUucmVmZXJlbmNlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlEKCd0cmVlJykpO1xuXHQgKlx0JC5qc3RyZWUucmVmZXJlbmNlKCdicmFuY2gnKTtcblx0ICpcdCQuanN0cmVlLnJlZmVyZW5jZSgnI2JyYW5jaCcpO1xuXHQgKlx0JC5qc3RyZWUucmVmZXJlbmNlKCQoJyNicmFuY2gnKSk7XG5cdCAqXHQkLmpzdHJlZS5yZWZlcmVuY2UoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SUQoJ2JyYW5jaCcpKTtcblx0ICpcblx0ICogQG5hbWUgJC5qc3RyZWUucmVmZXJlbmNlKG5lZWRsZSlcblx0ICogQHBhcmFtIHtET01FbGVtZW50fGpRdWVyeXxTdHJpbmd9IG5lZWRsZVxuXHQgKiBAcmV0dXJuIHtqc1RyZWV8bnVsbH0gdGhlIGluc3RhbmNlIG9yIGBudWxsYCBpZiBub3QgZm91bmRcblx0ICovXG5cdCQuanN0cmVlLnJlZmVyZW5jZSA9IGZ1bmN0aW9uIChuZWVkbGUpIHtcblx0XHRpZihuZWVkbGUgJiYgISQobmVlZGxlKS5sZW5ndGgpIHtcblx0XHRcdGlmKG5lZWRsZS5pZCkge1xuXHRcdFx0XHRuZWVkbGUgPSBuZWVkbGUuaWQ7XG5cdFx0XHR9XG5cdFx0XHR2YXIgdG1wID0gbnVsbDtcblx0XHRcdCQoJy5qc3RyZWUnKS5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dmFyIGluc3QgPSAkKHRoaXMpLmRhdGEoJ2pzdHJlZScpO1xuXHRcdFx0XHRpZihpbnN0ICYmIGluc3QuX21vZGVsLmRhdGFbbmVlZGxlXSkge1xuXHRcdFx0XHRcdHRtcCA9IGluc3Q7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiB0bXA7XG5cdFx0fVxuXHRcdHJldHVybiAkKG5lZWRsZSkuY2xvc2VzdCgnLmpzdHJlZScpLmRhdGEoJ2pzdHJlZScpO1xuXHR9O1xuXHQvKipcblx0ICogQ3JlYXRlIGFuIGluc3RhbmNlLCBnZXQgYW4gaW5zdGFuY2Ugb3IgaW52b2tlIGEgY29tbWFuZCBvbiBhIGluc3RhbmNlLiBcblx0ICogXG5cdCAqIElmIHRoZXJlIGlzIG5vIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBub2RlIGEgbmV3IG9uZSBpcyBjcmVhdGVkIGFuZCBgYXJnYCBpcyB1c2VkIHRvIGV4dGVuZCBgJC5qc3RyZWUuZGVmYXVsdHNgIGZvciB0aGlzIG5ldyBpbnN0YW5jZS4gVGhlcmUgd291bGQgYmUgbm8gcmV0dXJuIHZhbHVlIChjaGFpbmluZyBpcyBub3QgYnJva2VuKS5cblx0ICogXG5cdCAqIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIGluc3RhbmNlIGFuZCBgYXJnYCBpcyBhIHN0cmluZyB0aGUgY29tbWFuZCBzcGVjaWZpZWQgYnkgYGFyZ2AgaXMgZXhlY3V0ZWQgb24gdGhlIGluc3RhbmNlLCB3aXRoIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHZhbHVlIGl0IHdpbGwgYmUgcmV0dXJuZWQgKGNoYWluaW5nIGNvdWxkIGJyZWFrIGRlcGVuZGluZyBvbiBmdW5jdGlvbikuXG5cdCAqIFxuXHQgKiBJZiB0aGVyZSBpcyBhbiBleGlzdGluZyBpbnN0YW5jZSBhbmQgYGFyZ2AgaXMgbm90IGEgc3RyaW5nIHRoZSBpbnN0YW5jZSBpdHNlbGYgaXMgcmV0dXJuZWQgKHNpbWlsYXIgdG8gYCQuanN0cmVlLnJlZmVyZW5jZWApLlxuXHQgKiBcblx0ICogSW4gYW55IG90aGVyIGNhc2UgLSBub3RoaW5nIGlzIHJldHVybmVkIGFuZCBjaGFpbmluZyBpcyBub3QgYnJva2VuLlxuXHQgKlxuXHQgKiBfX0V4YW1wbGVzX19cblx0ICpcblx0ICpcdCQoJyN0cmVlMScpLmpzdHJlZSgpOyAvLyBjcmVhdGVzIGFuIGluc3RhbmNlXG5cdCAqXHQkKCcjdHJlZTInKS5qc3RyZWUoeyBwbHVnaW5zIDogW10gfSk7IC8vIGNyZWF0ZSBhbiBpbnN0YW5jZSB3aXRoIHNvbWUgb3B0aW9uc1xuXHQgKlx0JCgnI3RyZWUxJykuanN0cmVlKCdvcGVuX25vZGUnLCAnI2JyYW5jaF8xJyk7IC8vIGNhbGwgYSBtZXRob2Qgb24gYW4gZXhpc3RpbmcgaW5zdGFuY2UsIHBhc3NpbmcgYWRkaXRpb25hbCBhcmd1bWVudHNcblx0ICpcdCQoJyN0cmVlMicpLmpzdHJlZSgpOyAvLyBnZXQgYW4gZXhpc3RpbmcgaW5zdGFuY2UgKG9yIGNyZWF0ZSBhbiBpbnN0YW5jZSlcblx0ICpcdCQoJyN0cmVlMicpLmpzdHJlZSh0cnVlKTsgLy8gZ2V0IGFuIGV4aXN0aW5nIGluc3RhbmNlICh3aWxsIG5vdCBjcmVhdGUgbmV3IGluc3RhbmNlKVxuXHQgKlx0JCgnI2JyYW5jaF8xJykuanN0cmVlKCkuc2VsZWN0X25vZGUoJyNicmFuY2hfMScpOyAvLyBnZXQgYW4gaW5zdGFuY2UgKHVzaW5nIGEgbmVzdGVkIGVsZW1lbnQgYW5kIGNhbGwgYSBtZXRob2QpXG5cdCAqXG5cdCAqIEBuYW1lICQoKS5qc3RyZWUoW2FyZ10pXG5cdCAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gYXJnXG5cdCAqIEByZXR1cm4ge01peGVkfVxuXHQgKi9cblx0JC5mbi5qc3RyZWUgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdFx0Ly8gY2hlY2sgZm9yIHN0cmluZyBhcmd1bWVudFxuXHRcdHZhciBpc19tZXRob2RcdD0gKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSxcblx0XHRcdGFyZ3NcdFx0PSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxuXHRcdFx0cmVzdWx0XHRcdD0gbnVsbDtcblx0XHR0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdFx0Ly8gZ2V0IHRoZSBpbnN0YW5jZSAoaWYgdGhlcmUgaXMgb25lKSBhbmQgbWV0aG9kIChpZiBpdCBleGlzdHMpXG5cdFx0XHR2YXIgaW5zdGFuY2UgPSAkLmpzdHJlZS5yZWZlcmVuY2UodGhpcyksXG5cdFx0XHRcdG1ldGhvZCA9IGlzX21ldGhvZCAmJiBpbnN0YW5jZSA/IGluc3RhbmNlW2FyZ10gOiBudWxsO1xuXHRcdFx0Ly8gaWYgY2FsbGluZyBhIG1ldGhvZCwgYW5kIG1ldGhvZCBpcyBhdmFpbGFibGUgLSBleGVjdXRlIG9uIHRoZSBpbnN0YW5jZVxuXHRcdFx0cmVzdWx0ID0gaXNfbWV0aG9kICYmIG1ldGhvZCA/XG5cdFx0XHRcdG1ldGhvZC5hcHBseShpbnN0YW5jZSwgYXJncykgOlxuXHRcdFx0XHRudWxsO1xuXHRcdFx0Ly8gaWYgdGhlcmUgaXMgbm8gaW5zdGFuY2UgYW5kIG5vIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgLSBjcmVhdGUgb25lXG5cdFx0XHRpZighaW5zdGFuY2UgJiYgIWlzX21ldGhvZCAmJiAoYXJnID09PSB1bmRlZmluZWQgfHwgJC5pc1BsYWluT2JqZWN0KGFyZykpKSB7XG5cdFx0XHRcdCQodGhpcykuZGF0YSgnanN0cmVlJywgbmV3ICQuanN0cmVlLmNyZWF0ZSh0aGlzLCBhcmcpKTtcblx0XHRcdH1cblx0XHRcdC8vIGlmIHRoZXJlIGlzIGFuIGluc3RhbmNlIGFuZCBubyBtZXRob2QgaXMgY2FsbGVkIC0gcmV0dXJuIHRoZSBpbnN0YW5jZVxuXHRcdFx0aWYoaW5zdGFuY2UgJiYgIWlzX21ldGhvZCkge1xuXHRcdFx0XHRyZXN1bHQgPSBpbnN0YW5jZTtcblx0XHRcdH1cblx0XHRcdC8vIGlmIHRoZXJlIHdhcyBhIG1ldGhvZCBjYWxsIHdoaWNoIHJldHVybmVkIGEgcmVzdWx0IC0gYnJlYWsgYW5kIHJldHVybiB0aGUgdmFsdWVcblx0XHRcdGlmKHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly8gaWYgdGhlcmUgd2FzIGEgbWV0aG9kIGNhbGwgd2l0aCBhIHZhbGlkIHJldHVybiB2YWx1ZSAtIHJldHVybiB0aGF0LCBvdGhlcndpc2UgY29udGludWUgdGhlIGNoYWluXG5cdFx0cmV0dXJuIHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRyZXN1bHQgOiB0aGlzO1xuXHR9O1xuXHQvKipcblx0ICogdXNlZCB0byBmaW5kIGVsZW1lbnRzIGNvbnRhaW5pbmcgYW4gaW5zdGFuY2Vcblx0ICpcblx0ICogX19FeGFtcGxlc19fXG5cdCAqXG5cdCAqXHQkKCdkaXY6anN0cmVlJykuZWFjaChmdW5jdGlvbiAoKSB7XG5cdCAqXHRcdCQodGhpcykuanN0cmVlKCdkZXN0cm95Jyk7XG5cdCAqXHR9KTtcblx0ICpcblx0ICogQG5hbWUgJCgnOmpzdHJlZScpXG5cdCAqIEByZXR1cm4ge2pRdWVyeX1cblx0ICovXG5cdCQuZXhwclsnOiddLmpzdHJlZSA9ICQuZXhwci5jcmVhdGVQc2V1ZG8oZnVuY3Rpb24oc2VhcmNoKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKGEpIHtcblx0XHRcdHJldHVybiAkKGEpLmhhc0NsYXNzKCdqc3RyZWUnKSAmJlxuXHRcdFx0XHQkKGEpLmRhdGEoJ2pzdHJlZScpICE9PSB1bmRlZmluZWQ7XG5cdFx0fTtcblx0fSk7XG5cblx0LyoqXG5cdCAqIHN0b3JlcyBhbGwgZGVmYXVsdHMgZm9yIHRoZSBjb3JlXG5cdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNvcmVcblx0ICovXG5cdCQuanN0cmVlLmRlZmF1bHRzLmNvcmUgPSB7XG5cdFx0LyoqXG5cdFx0ICogZGF0YSBjb25maWd1cmF0aW9uXG5cdFx0ICogXG5cdFx0ICogSWYgbGVmdCBhcyBgZmFsc2VgIHRoZSBIVE1MIGluc2lkZSB0aGUganN0cmVlIGNvbnRhaW5lciBlbGVtZW50IGlzIHVzZWQgdG8gcG9wdWxhdGUgdGhlIHRyZWUgKHRoYXQgc2hvdWxkIGJlIGFuIHVub3JkZXJlZCBsaXN0IHdpdGggbGlzdCBpdGVtcykuXG5cdFx0ICpcblx0XHQgKiBZb3UgY2FuIGFsc28gcGFzcyBpbiBhIEhUTUwgc3RyaW5nIG9yIGEgSlNPTiBhcnJheSBoZXJlLlxuXHRcdCAqIFxuXHRcdCAqIEl0IGlzIHBvc3NpYmxlIHRvIHBhc3MgaW4gYSBzdGFuZGFyZCBqUXVlcnktbGlrZSBBSkFYIGNvbmZpZyBhbmQganN0cmVlIHdpbGwgYXV0b21hdGljYWxseSBkZXRlcm1pbmUgaWYgdGhlIHJlc3BvbnNlIGlzIEpTT04gb3IgSFRNTCBhbmQgdXNlIHRoYXQgdG8gcG9wdWxhdGUgdGhlIHRyZWUuIFxuXHRcdCAqIEluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBqUXVlcnkgYWpheCBvcHRpb25zIGhlcmUgeW91IGNhbiBzdXBweSBmdW5jdGlvbnMgZm9yIGBkYXRhYCBhbmQgYHVybGAsIHRoZSBmdW5jdGlvbnMgd2lsbCBiZSBydW4gaW4gdGhlIGN1cnJlbnQgaW5zdGFuY2UncyBzY29wZSBhbmQgYSBwYXJhbSB3aWxsIGJlIHBhc3NlZCBpbmRpY2F0aW5nIHdoaWNoIG5vZGUgaXMgYmVpbmcgbG9hZGVkLCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRob3NlIGZ1bmN0aW9ucyB3aWxsIGJlIHVzZWQuXG5cdFx0ICogXG5cdFx0ICogVGhlIGxhc3Qgb3B0aW9uIGlzIHRvIHNwZWNpZnkgYSBmdW5jdGlvbiwgdGhhdCBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIG5vZGUgYmVpbmcgbG9hZGVkIGFzIGFyZ3VtZW50IGFuZCBhIHNlY29uZCBwYXJhbSB3aGljaCBpcyBhIGZ1bmN0aW9uIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgcmVzdWx0LlxuXHRcdCAqXG5cdFx0ICogX19FeGFtcGxlc19fXG5cdFx0ICpcblx0XHQgKlx0Ly8gQUpBWFxuXHRcdCAqXHQkKCcjdHJlZScpLmpzdHJlZSh7XG5cdFx0ICpcdFx0J2NvcmUnIDoge1xuXHRcdCAqXHRcdFx0J2RhdGEnIDoge1xuXHRcdCAqXHRcdFx0XHQndXJsJyA6ICcvZ2V0L2NoaWxkcmVuLycsXG5cdFx0ICpcdFx0XHRcdCdkYXRhJyA6IGZ1bmN0aW9uIChub2RlKSB7XG5cdFx0ICpcdFx0XHRcdFx0cmV0dXJuIHsgJ2lkJyA6IG5vZGUuaWQgfTtcblx0XHQgKlx0XHRcdFx0fVxuXHRcdCAqXHRcdFx0fVxuXHRcdCAqXHRcdH0pO1xuXHRcdCAqXG5cdFx0ICpcdC8vIGRpcmVjdCBkYXRhXG5cdFx0ICpcdCQoJyN0cmVlJykuanN0cmVlKHtcblx0XHQgKlx0XHQnY29yZScgOiB7XG5cdFx0ICpcdFx0XHQnZGF0YScgOiBbXG5cdFx0ICpcdFx0XHRcdCdTaW1wbGUgcm9vdCBub2RlJyxcblx0XHQgKlx0XHRcdFx0e1xuXHRcdCAqXHRcdFx0XHRcdCdpZCcgOiAnbm9kZV8yJyxcblx0XHQgKlx0XHRcdFx0XHQndGV4dCcgOiAnUm9vdCBub2RlIHdpdGggb3B0aW9ucycsXG5cdFx0ICpcdFx0XHRcdFx0J3N0YXRlJyA6IHsgJ29wZW5lZCcgOiB0cnVlLCAnc2VsZWN0ZWQnIDogdHJ1ZSB9LFxuXHRcdCAqXHRcdFx0XHRcdCdjaGlsZHJlbicgOiBbIHsgJ3RleHQnIDogJ0NoaWxkIDEnIH0sICdDaGlsZCAyJ11cblx0XHQgKlx0XHRcdFx0fVxuXHRcdCAqXHRcdFx0XVxuXHRcdCAqXHRcdH0pO1xuXHRcdCAqXHRcblx0XHQgKlx0Ly8gZnVuY3Rpb25cblx0XHQgKlx0JCgnI3RyZWUnKS5qc3RyZWUoe1xuXHRcdCAqXHRcdCdjb3JlJyA6IHtcblx0XHQgKlx0XHRcdCdkYXRhJyA6IGZ1bmN0aW9uIChvYmosIGNhbGxiYWNrKSB7XG5cdFx0ICpcdFx0XHRcdGNhbGxiYWNrLmNhbGwodGhpcywgWydSb290IDEnLCAnUm9vdCAyJ10pO1xuXHRcdCAqXHRcdFx0fVxuXHRcdCAqXHRcdH0pO1xuXHRcdCAqIFxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNvcmUuZGF0YVxuXHRcdCAqL1xuXHRcdGRhdGFcdFx0XHQ6IGZhbHNlLFxuXHRcdC8qKlxuXHRcdCAqIGNvbmZpZ3VyZSB0aGUgdmFyaW91cyBzdHJpbmdzIHVzZWQgdGhyb3VnaG91dCB0aGUgdHJlZVxuXHRcdCAqXG5cdFx0ICogWW91IGNhbiB1c2UgYW4gb2JqZWN0IHdoZXJlIHRoZSBrZXkgaXMgdGhlIHN0cmluZyB5b3UgbmVlZCB0byByZXBsYWNlIGFuZCB0aGUgdmFsdWUgaXMgeW91ciByZXBsYWNlbWVudC5cblx0XHQgKiBBbm90aGVyIG9wdGlvbiBpcyB0byBzcGVjaWZ5IGEgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2l0aCBhbiBhcmd1bWVudCBvZiB0aGUgbmVlZGVkIHN0cmluZyBhbmQgc2hvdWxkIHJldHVybiB0aGUgcmVwbGFjZW1lbnQuXG5cdFx0ICogSWYgbGVmdCBhcyBgZmFsc2VgIG5vIHJlcGxhY2VtZW50IGlzIG1hZGUuXG5cdFx0ICpcblx0XHQgKiBfX0V4YW1wbGVzX19cblx0XHQgKlxuXHRcdCAqXHQkKCcjdHJlZScpLmpzdHJlZSh7XG5cdFx0ICpcdFx0J2NvcmUnIDoge1xuXHRcdCAqXHRcdFx0J3N0cmluZ3MnIDoge1xuXHRcdCAqXHRcdFx0XHQnTG9hZGluZy4uLicgOiAnUGxlYXNlIHdhaXQgLi4uJ1xuXHRcdCAqXHRcdFx0fVxuXHRcdCAqXHRcdH1cblx0XHQgKlx0fSk7XG5cdFx0ICpcblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5jb3JlLnN0cmluZ3Ncblx0XHQgKi9cblx0XHRzdHJpbmdzXHRcdFx0OiBmYWxzZSxcblx0XHQvKipcblx0XHQgKiBkZXRlcm1pbmVzIHdoYXQgaGFwcGVucyB3aGVuIGEgdXNlciB0cmllcyB0byBtb2RpZnkgdGhlIHN0cnVjdHVyZSBvZiB0aGUgdHJlZVxuXHRcdCAqIElmIGxlZnQgYXMgYGZhbHNlYCBhbGwgb3BlcmF0aW9ucyBsaWtlIGNyZWF0ZSwgcmVuYW1lLCBkZWxldGUsIG1vdmUgb3IgY29weSBhcmUgcHJldmVudGVkLlxuXHRcdCAqIFlvdSBjYW4gc2V0IHRoaXMgdG8gYHRydWVgIHRvIGFsbG93IGFsbCBpbnRlcmFjdGlvbnMgb3IgdXNlIGEgZnVuY3Rpb24gdG8gaGF2ZSBiZXR0ZXIgY29udHJvbC5cblx0XHQgKlxuXHRcdCAqIF9fRXhhbXBsZXNfX1xuXHRcdCAqXG5cdFx0ICpcdCQoJyN0cmVlJykuanN0cmVlKHtcblx0XHQgKlx0XHQnY29yZScgOiB7XG5cdFx0ICpcdFx0XHQnY2hlY2tfY2FsbGJhY2snIDogZnVuY3Rpb24gKG9wZXJhdGlvbiwgbm9kZSwgbm9kZV9wYXJlbnQsIG5vZGVfcG9zaXRpb24pIHtcblx0XHQgKlx0XHRcdFx0Ly8gb3BlcmF0aW9uIGNhbiBiZSAnY3JlYXRlX25vZGUnLCAncmVuYW1lX25vZGUnLCAnZGVsZXRlX25vZGUnLCAnbW92ZV9ub2RlJyBvciAnY29weV9ub2RlJ1xuXHRcdCAqXHRcdFx0XHQvLyBpbiBjYXNlIG9mICdyZW5hbWVfbm9kZScgbm9kZV9wb3NpdGlvbiBpcyBmaWxsZWQgd2l0aCB0aGUgbmV3IG5vZGUgbmFtZVxuXHRcdCAqXHRcdFx0XHRyZXR1cm4gb3BlcmF0aW9uID09PSAncmVuYW1lX25vZGUnID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdCAqXHRcdFx0fVxuXHRcdCAqXHRcdH1cblx0XHQgKlx0fSk7XG5cdFx0ICogXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY29yZS5jaGVja19jYWxsYmFja1xuXHRcdCAqL1xuXHRcdGNoZWNrX2NhbGxiYWNrXHQ6IGZhbHNlLFxuXHRcdC8qKlxuXHRcdCAqIGEgY2FsbGJhY2sgY2FsbGVkIHdpdGggYSBzaW5nbGUgb2JqZWN0IHBhcmFtZXRlciBpbiB0aGUgaW5zdGFuY2UncyBzY29wZSB3aGVuIHNvbWV0aGluZyBnb2VzIHdyb25nIChvcGVyYXRpb24gcHJldmVudGVkLCBhamF4IGZhaWxlZCwgZXRjKVxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNvcmUuZXJyb3Jcblx0XHQgKi9cblx0XHRlcnJvclx0XHRcdDogJC5ub29wLFxuXHRcdC8qKlxuXHRcdCAqIHRoZSBvcGVuIC8gY2xvc2UgYW5pbWF0aW9uIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyAtIHNldCB0aGlzIHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGUgYW5pbWF0aW9uIChkZWZhdWx0IGlzIGAyMDBgKVxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNvcmUuYW5pbWF0aW9uXG5cdFx0ICovXG5cdFx0YW5pbWF0aW9uXHRcdDogMjAwLFxuXHRcdC8qKlxuXHRcdCAqIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIG11bHRpcGxlIG5vZGVzIGNhbiBiZSBzZWxlY3RlZFxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNvcmUubXVsdGlwbGVcblx0XHQgKi9cblx0XHRtdWx0aXBsZVx0XHQ6IHRydWUsXG5cdFx0LyoqXG5cdFx0ICogdGhlbWUgY29uZmlndXJhdGlvbiBvYmplY3Rcblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5jb3JlLnRoZW1lc1xuXHRcdCAqL1xuXHRcdHRoZW1lc1x0XHRcdDoge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiB0aGUgbmFtZSBvZiB0aGUgdGhlbWUgdG8gdXNlIChpZiBsZWZ0IGFzIGBmYWxzZWAgdGhlIGRlZmF1bHQgdGhlbWUgaXMgdXNlZClcblx0XHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNvcmUudGhlbWVzLm5hbWVcblx0XHRcdCAqL1xuXHRcdFx0bmFtZVx0XHRcdDogZmFsc2UsXG5cdFx0XHQvKipcblx0XHRcdCAqIHRoZSBVUkwgb2YgdGhlIHRoZW1lJ3MgQ1NTIGZpbGUsIGxlYXZlIHRoaXMgYXMgYGZhbHNlYCBpZiB5b3UgaGF2ZSBtYW51YWxseSBpbmNsdWRlZCB0aGUgdGhlbWUgQ1NTIChyZWNvbW1lbmRlZCkuIFlvdSBjYW4gc2V0IHRoaXMgdG8gYHRydWVgIHRvbyB3aGljaCB3aWxsIHRyeSB0byBhdXRvbG9hZCB0aGUgdGhlbWUuXG5cdFx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5jb3JlLnRoZW1lcy51cmxcblx0XHRcdCAqL1xuXHRcdFx0dXJsXHRcdFx0XHQ6IGZhbHNlLFxuXHRcdFx0LyoqXG5cdFx0XHQgKiB0aGUgbG9jYXRpb24gb2YgYWxsIGpzdHJlZSB0aGVtZXMgLSBvbmx5IHVzZWQgaWYgYHVybGAgaXMgc2V0IHRvIGB0cnVlYFxuXHRcdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY29yZS50aGVtZXMuZGlyXG5cdFx0XHQgKi9cblx0XHRcdGRpclx0XHRcdFx0OiBmYWxzZSxcblx0XHRcdC8qKlxuXHRcdFx0ICogYSBib29sZWFuIGluZGljYXRpbmcgaWYgY29ubmVjdGluZyBkb3RzIGFyZSBzaG93blxuXHRcdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY29yZS50aGVtZXMuZG90c1xuXHRcdFx0ICovXG5cdFx0XHRkb3RzXHRcdFx0OiB0cnVlLFxuXHRcdFx0LyoqXG5cdFx0XHQgKiBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBub2RlIGljb25zIGFyZSBzaG93blxuXHRcdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY29yZS50aGVtZXMuaWNvbnNcblx0XHRcdCAqL1xuXHRcdFx0aWNvbnNcdFx0XHQ6IHRydWUsXG5cdFx0XHQvKipcblx0XHRcdCAqIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB0cmVlIGJhY2tncm91bmQgaXMgc3RyaXBlZFxuXHRcdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY29yZS50aGVtZXMuc3RyaXBlc1xuXHRcdFx0ICovXG5cdFx0XHRzdHJpcGVzXHRcdFx0OiBmYWxzZSxcblx0XHRcdC8qKlxuXHRcdFx0ICogYSBzdHJpbmcgKG9yIGJvb2xlYW4gYGZhbHNlYCkgc3BlY2lmeWluZyB0aGUgdGhlbWUgdmFyaWFudCB0byB1c2UgKGlmIHRoZSB0aGVtZSBzdXBwb3J0cyB2YXJpYW50cylcblx0XHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNvcmUudGhlbWVzLnZhcmlhbnRcblx0XHRcdCAqL1xuXHRcdFx0dmFyaWFudFx0XHRcdDogZmFsc2UsXG5cdFx0XHQvKipcblx0XHRcdCAqIGEgYm9vbGVhbiBzcGVjaWZ5aW5nIGlmIGEgcmVwb25zaXZlIHZlcnNpb24gb2YgdGhlIHRoZW1lIHNob3VsZCBraWNrIGluIG9uIHNtYWxsZXIgc2NyZWVucyAoaWYgdGhlIHRoZW1lIHN1cHBvcnRzIGl0KS4gRGVmYXVsdHMgdG8gYHRydWVgLlxuXHRcdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY29yZS50aGVtZXMucmVzcG9uc2l2ZVxuXHRcdFx0ICovXG5cdFx0XHRyZXNwb25zaXZlXHRcdDogdHJ1ZVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogaWYgbGVmdCBhcyBgdHJ1ZWAgYWxsIHBhcmVudHMgb2YgYWxsIHNlbGVjdGVkIG5vZGVzIHdpbGwgYmUgb3BlbmVkIG9uY2UgdGhlIHRyZWUgbG9hZHMgKHNvIHRoYXQgYWxsIHNlbGVjdGVkIG5vZGVzIGFyZSB2aXNpYmxlIHRvIHRoZSB1c2VyKVxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNvcmUuZXhwYW5kX3NlbGVjdGVkX29ubG9hZFxuXHRcdCAqL1xuXHRcdGV4cGFuZF9zZWxlY3RlZF9vbmxvYWQgOiB0cnVlXG5cdH07XG5cdCQuanN0cmVlLmNvcmUucHJvdG90eXBlID0ge1xuXHRcdC8qKlxuXHRcdCAqIHVzZWQgdG8gZGVjb3JhdGUgYW4gaW5zdGFuY2Ugd2l0aCBhIHBsdWdpbi4gVXNlZCBpbnRlcm5hbGx5LlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQG5hbWUgcGx1Z2luKGRlY28gWywgb3B0c10pXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSBkZWNvIHRoZSBwbHVnaW4gdG8gZGVjb3JhdGUgd2l0aFxuXHRcdCAqIEBwYXJhbSAge09iamVjdH0gb3B0cyBvcHRpb25zIGZvciB0aGUgcGx1Z2luXG5cdFx0ICogQHJldHVybiB7anNUcmVlfVxuXHRcdCAqL1xuXHRcdHBsdWdpbiA6IGZ1bmN0aW9uIChkZWNvLCBvcHRzKSB7XG5cdFx0XHR2YXIgQ2hpbGQgPSAkLmpzdHJlZS5wbHVnaW5zW2RlY29dO1xuXHRcdFx0aWYoQ2hpbGQpIHtcblx0XHRcdFx0dGhpcy5fZGF0YVtkZWNvXSA9IHt9O1xuXHRcdFx0XHRDaGlsZC5wcm90b3R5cGUgPSB0aGlzO1xuXHRcdFx0XHRyZXR1cm4gbmV3IENoaWxkKG9wdHMsIHRoaXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiB1c2VkIHRvIGRlY29yYXRlIGFuIGluc3RhbmNlIHdpdGggYSBwbHVnaW4uIFVzZWQgaW50ZXJuYWxseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBuYW1lIGluaXQoZWwsIG9wdG9ucylcblx0XHQgKiBAcGFyYW0ge0RPTUVsZW1lbnR8alF1ZXJ5fFN0cmluZ30gZWwgdGhlIGVsZW1lbnQgd2UgYXJlIHRyYW5zZm9ybWluZ1xuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIG9wdGlvbnMgZm9yIHRoaXMgaW5zdGFuY2Vcblx0XHQgKiBAdHJpZ2dlciBpbml0LmpzdHJlZSwgbG9hZGluZy5qc3RyZWUsIGxvYWRlZC5qc3RyZWUsIHJlYWR5LmpzdHJlZSwgY2hhbmdlZC5qc3RyZWVcblx0XHQgKi9cblx0XHRpbml0IDogZnVuY3Rpb24gKGVsLCBvcHRpb25zKSB7XG5cdFx0XHR0aGlzLl9tb2RlbCA9IHtcblx0XHRcdFx0ZGF0YSA6IHtcblx0XHRcdFx0XHQnIycgOiB7XG5cdFx0XHRcdFx0XHRpZCA6ICcjJyxcblx0XHRcdFx0XHRcdHBhcmVudCA6IG51bGwsXG5cdFx0XHRcdFx0XHRwYXJlbnRzIDogW10sXG5cdFx0XHRcdFx0XHRjaGlsZHJlbiA6IFtdLFxuXHRcdFx0XHRcdFx0Y2hpbGRyZW5fZCA6IFtdLFxuXHRcdFx0XHRcdFx0c3RhdGUgOiB7IGxvYWRlZCA6IGZhbHNlIH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNoYW5nZWQgOiBbXSxcblx0XHRcdFx0Zm9yY2VfZnVsbF9yZWRyYXcgOiBmYWxzZSxcblx0XHRcdFx0cmVkcmF3X3RpbWVvdXQgOiBmYWxzZSxcblx0XHRcdFx0ZGVmYXVsdF9zdGF0ZSA6IHtcblx0XHRcdFx0XHRsb2FkZWQgOiB0cnVlLFxuXHRcdFx0XHRcdG9wZW5lZCA6IGZhbHNlLFxuXHRcdFx0XHRcdHNlbGVjdGVkIDogZmFsc2UsXG5cdFx0XHRcdFx0ZGlzYWJsZWQgOiBmYWxzZVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHR0aGlzLmVsZW1lbnQgPSAkKGVsKS5hZGRDbGFzcygnanN0cmVlIGpzdHJlZS0nICsgdGhpcy5faWQpO1xuXHRcdFx0dGhpcy5zZXR0aW5ncyA9IG9wdGlvbnM7XG5cdFx0XHR0aGlzLmVsZW1lbnQuYmluZChcImRlc3Ryb3llZFwiLCAkLnByb3h5KHRoaXMudGVhcmRvd24sIHRoaXMpKTtcblxuXHRcdFx0dGhpcy5fZGF0YS5jb3JlLnJlYWR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9kYXRhLmNvcmUubG9hZGVkID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9kYXRhLmNvcmUucnRsID0gKHRoaXMuZWxlbWVudC5jc3MoXCJkaXJlY3Rpb25cIikgPT09IFwicnRsXCIpO1xuXHRcdFx0dGhpcy5lbGVtZW50W3RoaXMuX2RhdGEuY29yZS5ydGwgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10oXCJqc3RyZWUtcnRsXCIpO1xuXHRcdFx0dGhpcy5lbGVtZW50LmF0dHIoJ3JvbGUnLCd0cmVlJyk7XG5cblx0XHRcdHRoaXMuYmluZCgpO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiB0cmlnZ2VyZWQgYWZ0ZXIgYWxsIGV2ZW50cyBhcmUgYm91bmRcblx0XHRcdCAqIEBldmVudFxuXHRcdFx0ICogQG5hbWUgaW5pdC5qc3RyZWVcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmlnZ2VyKFwiaW5pdFwiKTtcblxuXHRcdFx0dGhpcy5fZGF0YS5jb3JlLm9yaWdpbmFsX2NvbnRhaW5lcl9odG1sID0gdGhpcy5lbGVtZW50LmZpbmQoXCIgPiB1bCA+IGxpXCIpLmNsb25lKHRydWUpO1xuXHRcdFx0dGhpcy5fZGF0YS5jb3JlLm9yaWdpbmFsX2NvbnRhaW5lcl9odG1sXG5cdFx0XHRcdC5maW5kKFwibGlcIikuYWRkQmFjaygpXG5cdFx0XHRcdC5jb250ZW50cygpLmZpbHRlcihmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5ub2RlVHlwZSA9PT0gMyAmJiAoIXRoaXMubm9kZVZhbHVlIHx8IC9eXFxzKyQvLnRlc3QodGhpcy5ub2RlVmFsdWUpKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LnJlbW92ZSgpO1xuXHRcdFx0dGhpcy5lbGVtZW50Lmh0bWwoXCI8XCIrXCJ1bCBjbGFzcz0nanN0cmVlLWNvbnRhaW5lci11bCc+PFwiK1wibGkgY2xhc3M9J2pzdHJlZS1pbml0aWFsLW5vZGUganN0cmVlLWxvYWRpbmcganN0cmVlLWxlYWYganN0cmVlLWxhc3QnPjxpIGNsYXNzPSdqc3RyZWUtaWNvbiBqc3RyZWUtb2NsJz48L2k+PFwiK1wiYSBjbGFzcz0nanN0cmVlLWFuY2hvcicgaHJlZj0nIyc+PGkgY2xhc3M9J2pzdHJlZS1pY29uIGpzdHJlZS10aGVtZWljb24taGlkZGVuJz48L2k+XCIgKyB0aGlzLmdldF9zdHJpbmcoXCJMb2FkaW5nIC4uLlwiKSArIFwiPC9hPjwvbGk+PC91bD5cIik7XG5cdFx0XHR0aGlzLl9kYXRhLmNvcmUubGlfaGVpZ2h0ID0gdGhpcy5nZXRfY29udGFpbmVyX3VsKCkuY2hpbGRyZW4oXCJsaTplcSgwKVwiKS5oZWlnaHQoKSB8fCAxODtcblx0XHRcdC8qKlxuXHRcdFx0ICogdHJpZ2dlcmVkIGFmdGVyIHRoZSBsb2FkaW5nIHRleHQgaXMgc2hvd24gYW5kIGJlZm9yZSBsb2FkaW5nIHN0YXJ0c1xuXHRcdFx0ICogQGV2ZW50XG5cdFx0XHQgKiBAbmFtZSBsb2FkaW5nLmpzdHJlZVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnRyaWdnZXIoXCJsb2FkaW5nXCIpO1xuXHRcdFx0dGhpcy5sb2FkX25vZGUoJyMnKTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIGRlc3Ryb3kgYW4gaW5zdGFuY2Vcblx0XHQgKiBAbmFtZSBkZXN0cm95KClcblx0XHQgKi9cblx0XHRkZXN0cm95IDogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhpcy5lbGVtZW50LnVuYmluZChcImRlc3Ryb3llZFwiLCB0aGlzLnRlYXJkb3duKTtcblx0XHRcdHRoaXMudGVhcmRvd24oKTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIHBhcnQgb2YgdGhlIGRlc3Ryb3lpbmcgb2YgYW4gaW5zdGFuY2UuIFVzZWQgaW50ZXJuYWxseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBuYW1lIHRlYXJkb3duKClcblx0XHQgKi9cblx0XHR0ZWFyZG93biA6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHRoaXMudW5iaW5kKCk7XG5cdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0LnJlbW92ZUNsYXNzKCdqc3RyZWUnKVxuXHRcdFx0XHQucmVtb3ZlRGF0YSgnanN0cmVlJylcblx0XHRcdFx0LmZpbmQoXCJbY2xhc3NePSdqc3RyZWUnXVwiKVxuXHRcdFx0XHRcdC5hZGRCYWNrKClcblx0XHRcdFx0XHQuYXR0cihcImNsYXNzXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuY2xhc3NOYW1lLnJlcGxhY2UoL2pzdHJlZVteIF0qfCQvaWcsJycpOyB9KTtcblx0XHRcdHRoaXMuZWxlbWVudCA9IG51bGw7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBiaW5kIGFsbCBldmVudHMuIFVzZWQgaW50ZXJuYWxseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBuYW1lIGJpbmQoKVxuXHRcdCAqL1xuXHRcdGJpbmQgOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0Lm9uKFwiZGJsY2xpY2suanN0cmVlXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGlmKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkpIHtcblx0XHRcdFx0XHRcdFx0ZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0aWYod2luZG93LmdldFNlbGVjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNlbC5jb2xsYXBzZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGlnbm9yZSkgeyB9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQub24oXCJjbGljay5qc3RyZWVcIiwgXCIuanN0cmVlLW9jbFwiLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRvZ2dsZV9ub2RlKGUudGFyZ2V0KTtcblx0XHRcdFx0XHR9LCB0aGlzKSlcblx0XHRcdFx0Lm9uKFwiY2xpY2suanN0cmVlXCIsIFwiLmpzdHJlZS1hbmNob3JcIiwgJC5wcm94eShmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0JChlLmN1cnJlbnRUYXJnZXQpLmZvY3VzKCk7XG5cdFx0XHRcdFx0XHR0aGlzLmFjdGl2YXRlX25vZGUoZS5jdXJyZW50VGFyZ2V0LCBlKTtcblx0XHRcdFx0XHR9LCB0aGlzKSlcblx0XHRcdFx0Lm9uKCdrZXlkb3duLmpzdHJlZScsICcuanN0cmVlLWFuY2hvcicsICQucHJveHkoZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdHZhciBvID0gbnVsbDtcblx0XHRcdFx0XHRcdHN3aXRjaChlLndoaWNoKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgMTM6XG5cdFx0XHRcdFx0XHRcdGNhc2UgMzI6XG5cdFx0XHRcdFx0XHRcdFx0ZS50eXBlID0gXCJjbGlja1wiO1xuXHRcdFx0XHRcdFx0XHRcdCQoZS5jdXJyZW50VGFyZ2V0KS50cmlnZ2VyKGUpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIDM3OlxuXHRcdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0XHRpZih0aGlzLmlzX29wZW4oZS5jdXJyZW50VGFyZ2V0KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5jbG9zZV9ub2RlKGUuY3VycmVudFRhcmdldCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0byA9IHRoaXMuZ2V0X3ByZXZfZG9tKGUuY3VycmVudFRhcmdldCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihvICYmIG8ubGVuZ3RoKSB7IG8uY2hpbGRyZW4oJy5qc3RyZWUtYW5jaG9yJykuZm9jdXMoKTsgfVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdFx0byA9IHRoaXMuZ2V0X3ByZXZfZG9tKGUuY3VycmVudFRhcmdldCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYobyAmJiBvLmxlbmd0aCkgeyBvLmNoaWxkcmVuKCcuanN0cmVlLWFuY2hvcicpLmZvY3VzKCk7IH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSAzOTpcblx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYodGhpcy5pc19jbG9zZWQoZS5jdXJyZW50VGFyZ2V0KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5vcGVuX25vZGUoZS5jdXJyZW50VGFyZ2V0LCBmdW5jdGlvbiAobykgeyB0aGlzLmdldF9ub2RlKG8sIHRydWUpLmNoaWxkcmVuKCcuanN0cmVlLWFuY2hvcicpLmZvY3VzKCk7IH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG8gPSB0aGlzLmdldF9uZXh0X2RvbShlLmN1cnJlbnRUYXJnZXQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYobyAmJiBvLmxlbmd0aCkgeyBvLmNoaWxkcmVuKCcuanN0cmVlLWFuY2hvcicpLmZvY3VzKCk7IH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRcdG8gPSB0aGlzLmdldF9uZXh0X2RvbShlLmN1cnJlbnRUYXJnZXQpO1xuXHRcdFx0XHRcdFx0XHRcdGlmKG8gJiYgby5sZW5ndGgpIHsgby5jaGlsZHJlbignLmpzdHJlZS1hbmNob3InKS5mb2N1cygpOyB9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdC8vIGRlbGV0ZVxuXHRcdFx0XHRcdFx0XHRjYXNlIDQ2OlxuXHRcdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0XHRvID0gdGhpcy5nZXRfbm9kZShlLmN1cnJlbnRUYXJnZXQpO1xuXHRcdFx0XHRcdFx0XHRcdGlmKG8gJiYgby5pZCAmJiBvLmlkICE9PSAnIycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG8gPSB0aGlzLmlzX3NlbGVjdGVkKG8pID8gdGhpcy5nZXRfc2VsZWN0ZWQoKSA6IG87XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyB0aGlzLmRlbGV0ZV9ub2RlKG8pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Ly8gZjJcblx0XHRcdFx0XHRcdFx0Y2FzZSAxMTM6XG5cdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRcdG8gPSB0aGlzLmdldF9ub2RlKGUuY3VycmVudFRhcmdldCk7XG5cdFx0XHRcdFx0XHRcdFx0LyohXG5cdFx0XHRcdFx0XHRcdFx0aWYobyAmJiBvLmlkICYmIG8uaWQgIT09ICcjJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gdGhpcy5lZGl0KG8pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQqL1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGUud2hpY2gpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIHRoaXMpKVxuXHRcdFx0XHQub24oXCJsb2FkX25vZGUuanN0cmVlXCIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHtcblx0XHRcdFx0XHRcdGlmKGRhdGEuc3RhdHVzKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGRhdGEubm9kZS5pZCA9PT0gJyMnICYmICF0aGlzLl9kYXRhLmNvcmUubG9hZGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLmxvYWRlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0XHRcdFx0ICogdHJpZ2dlcmVkIGFmdGVyIHRoZSByb290IG5vZGUgaXMgbG9hZGVkIGZvciB0aGUgZmlyc3QgdGltZVxuXHRcdFx0XHRcdFx0XHRcdCAqIEBldmVudFxuXHRcdFx0XHRcdFx0XHRcdCAqIEBuYW1lIGxvYWRlZC5qc3RyZWVcblx0XHRcdFx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHRcdFx0XHR0aGlzLnRyaWdnZXIoXCJsb2FkZWRcIik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYoIXRoaXMuX2RhdGEuY29yZS5yZWFkeSAmJiAhdGhpcy5nZXRfY29udGFpbmVyX3VsKCkuZmluZCgnLmpzdHJlZS1sb2FkaW5nOmVxKDApJykubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLnJlYWR5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRpZih0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZih0aGlzLnNldHRpbmdzLmNvcmUuZXhwYW5kX3NlbGVjdGVkX29ubG9hZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdG1wID0gW10sIGksIGo7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcihpID0gMCwgaiA9IHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0bXAgPSB0bXAuY29uY2F0KHRoaXMuX21vZGVsLmRhdGFbdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkW2ldXS5wYXJlbnRzKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0bXAgPSAkLnZha2F0YS5hcnJheV91bmlxdWUodG1wKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gdG1wLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMub3Blbl9ub2RlKHRtcFtpXSwgZmFsc2UsIDApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnRyaWdnZXIoJ2NoYW5nZWQnLCB7ICdhY3Rpb24nIDogJ3JlYWR5JywgJ3NlbGVjdGVkJyA6IHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCB9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0XHRcdFx0ICogdHJpZ2dlcmVkIGFmdGVyIGFsbCBub2RlcyBhcmUgZmluaXNoZWQgbG9hZGluZ1xuXHRcdFx0XHRcdFx0XHRcdCAqIEBldmVudFxuXHRcdFx0XHRcdFx0XHRcdCAqIEBuYW1lIHJlYWR5LmpzdHJlZVxuXHRcdFx0XHRcdFx0XHRcdCAqL1xuXHRcdFx0XHRcdFx0XHRcdHNldFRpbWVvdXQoJC5wcm94eShmdW5jdGlvbiAoKSB7IHRoaXMudHJpZ2dlcihcInJlYWR5XCIpOyB9LCB0aGlzKSwgMCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCB0aGlzKSlcblx0XHRcdFx0Ly8gVEhFTUUgUkVMQVRFRFxuXHRcdFx0XHQub24oXCJpbml0LmpzdHJlZVwiLCAkLnByb3h5KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHZhciBzID0gdGhpcy5zZXR0aW5ncy5jb3JlLnRoZW1lcztcblx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS50aGVtZXMuZG90c1x0XHRcdD0gcy5kb3RzO1xuXHRcdFx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5zdHJpcGVzXHRcdD0gcy5zdHJpcGVzO1xuXHRcdFx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5pY29uc1x0XHQ9IHMuaWNvbnM7XG5cdFx0XHRcdFx0XHR0aGlzLnNldF90aGVtZShzLm5hbWUgfHwgXCJkZWZhdWx0XCIsIHMudXJsKTtcblx0XHRcdFx0XHRcdHRoaXMuc2V0X3RoZW1lX3ZhcmlhbnQocy52YXJpYW50KTtcblx0XHRcdFx0XHR9LCB0aGlzKSlcblx0XHRcdFx0Lm9uKFwibG9hZGluZy5qc3RyZWVcIiwgJC5wcm94eShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHR0aGlzWyB0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmRvdHMgPyBcInNob3dfZG90c1wiIDogXCJoaWRlX2RvdHNcIiBdKCk7XG5cdFx0XHRcdFx0XHR0aGlzWyB0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmljb25zID8gXCJzaG93X2ljb25zXCIgOiBcImhpZGVfaWNvbnNcIiBdKCk7XG5cdFx0XHRcdFx0XHR0aGlzWyB0aGlzLl9kYXRhLmNvcmUudGhlbWVzLnN0cmlwZXMgPyBcInNob3dfc3RyaXBlc1wiIDogXCJoaWRlX3N0cmlwZXNcIiBdKCk7XG5cdFx0XHRcdFx0fSwgdGhpcykpXG5cdFx0XHRcdC5vbignZm9jdXMuanN0cmVlJywgJy5qc3RyZWUtYW5jaG9yJywgJC5wcm94eShmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5lbGVtZW50LmZpbmQoJy5qc3RyZWUtaG92ZXJlZCcpLm5vdChlLmN1cnJlbnRUYXJnZXQpLm1vdXNlbGVhdmUoKTtcblx0XHRcdFx0XHRcdCQoZS5jdXJyZW50VGFyZ2V0KS5tb3VzZWVudGVyKCk7XG5cdFx0XHRcdFx0fSwgdGhpcykpXG5cdFx0XHRcdC5vbignbW91c2VlbnRlci5qc3RyZWUnLCAnLmpzdHJlZS1hbmNob3InLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmhvdmVyX25vZGUoZS5jdXJyZW50VGFyZ2V0KTtcblx0XHRcdFx0XHR9LCB0aGlzKSlcblx0XHRcdFx0Lm9uKCdtb3VzZWxlYXZlLmpzdHJlZScsICcuanN0cmVlLWFuY2hvcicsICQucHJveHkoZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuZGVob3Zlcl9ub2RlKGUuY3VycmVudFRhcmdldCk7XG5cdFx0XHRcdFx0fSwgdGhpcykpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogcGFydCBvZiB0aGUgZGVzdHJveWluZyBvZiBhbiBpbnN0YW5jZS4gVXNlZCBpbnRlcm5hbGx5LlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQG5hbWUgdW5iaW5kKClcblx0XHQgKi9cblx0XHR1bmJpbmQgOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR0aGlzLmVsZW1lbnQub2ZmKCcuanN0cmVlJyk7XG5cdFx0XHQkKGRvY3VtZW50KS5vZmYoJy5qc3RyZWUtJyArIHRoaXMuX2lkKTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIHRyaWdnZXIgYW4gZXZlbnQuIFVzZWQgaW50ZXJuYWxseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBuYW1lIHRyaWdnZXIoZXYgWywgZGF0YV0pXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSBldiB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gdHJpZ2dlclxuXHRcdCAqIEBwYXJhbSAge09iamVjdH0gZGF0YSBhZGRpdGlvbmFsIGRhdGEgdG8gcGFzcyB3aXRoIHRoZSBldmVudFxuXHRcdCAqL1xuXHRcdHRyaWdnZXIgOiBmdW5jdGlvbiAoZXYsIGRhdGEpIHtcblx0XHRcdGlmKCFkYXRhKSB7XG5cdFx0XHRcdGRhdGEgPSB7fTtcblx0XHRcdH1cblx0XHRcdGRhdGEuaW5zdGFuY2UgPSB0aGlzO1xuXHRcdFx0dGhpcy5lbGVtZW50LnRyaWdnZXJIYW5kbGVyKGV2LnJlcGxhY2UoJy5qc3RyZWUnLCcnKSArICcuanN0cmVlJywgZGF0YSk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiByZXR1cm5zIHRoZSBqUXVlcnkgZXh0ZW5kZWQgaW5zdGFuY2UgY29udGFpbmVyXG5cdFx0ICogQG5hbWUgZ2V0X2NvbnRhaW5lcigpXG5cdFx0ICogQHJldHVybiB7alF1ZXJ5fVxuXHRcdCAqL1xuXHRcdGdldF9jb250YWluZXIgOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lbGVtZW50O1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogcmV0dXJucyB0aGUgalF1ZXJ5IGV4dGVuZGVkIG1haW4gVUwgbm9kZSBpbnNpZGUgdGhlIGluc3RhbmNlIGNvbnRhaW5lci4gVXNlZCBpbnRlcm5hbGx5LlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQG5hbWUgZ2V0X2NvbnRhaW5lcl91bCgpXG5cdFx0ICogQHJldHVybiB7alF1ZXJ5fVxuXHRcdCAqL1xuXHRcdGdldF9jb250YWluZXJfdWwgOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lbGVtZW50LmNoaWxkcmVuKFwidWw6ZXEoMClcIik7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBnZXRzIHN0cmluZyByZXBsYWNlbWVudHMgKGxvY2FsaXphdGlvbikuIFVzZWQgaW50ZXJuYWxseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBuYW1lIGdldF9zdHJpbmcoa2V5KVxuXHRcdCAqIEBwYXJhbSAge1N0cmluZ30ga2V5XG5cdFx0ICogQHJldHVybiB7U3RyaW5nfVxuXHRcdCAqL1xuXHRcdGdldF9zdHJpbmcgOiBmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHR2YXIgYSA9IHRoaXMuc2V0dGluZ3MuY29yZS5zdHJpbmdzO1xuXHRcdFx0aWYoJC5pc0Z1bmN0aW9uKGEpKSB7IHJldHVybiBhLmNhbGwodGhpcywga2V5KTsgfVxuXHRcdFx0aWYoYSAmJiBhW2tleV0pIHsgcmV0dXJuIGFba2V5XTsgfVxuXHRcdFx0cmV0dXJuIGtleTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIGdldHMgdGhlIGZpcnN0IGNoaWxkIG9mIGEgRE9NIG5vZGUuIFVzZWQgaW50ZXJuYWxseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBuYW1lIF9maXJzdENoaWxkKGRvbSlcblx0XHQgKiBAcGFyYW0gIHtET01FbGVtZW50fSBkb21cblx0XHQgKiBAcmV0dXJuIHtET01FbGVtZW50fVxuXHRcdCAqL1xuXHRcdF9maXJzdENoaWxkIDogZnVuY3Rpb24gKGRvbSkge1xuXHRcdFx0ZG9tID0gZG9tID8gZG9tLmZpcnN0Q2hpbGQgOiBudWxsO1xuXHRcdFx0d2hpbGUoZG9tICE9PSBudWxsICYmIGRvbS5ub2RlVHlwZSAhPT0gMSkge1xuXHRcdFx0XHRkb20gPSBkb20ubmV4dFNpYmxpbmc7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZG9tO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogZ2V0cyB0aGUgbmV4dCBzaWJsaW5nIG9mIGEgRE9NIG5vZGUuIFVzZWQgaW50ZXJuYWxseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBuYW1lIF9uZXh0U2libGluZyhkb20pXG5cdFx0ICogQHBhcmFtICB7RE9NRWxlbWVudH0gZG9tXG5cdFx0ICogQHJldHVybiB7RE9NRWxlbWVudH1cblx0XHQgKi9cblx0XHRfbmV4dFNpYmxpbmcgOiBmdW5jdGlvbiAoZG9tKSB7XG5cdFx0XHRkb20gPSBkb20gPyBkb20ubmV4dFNpYmxpbmcgOiBudWxsO1xuXHRcdFx0d2hpbGUoZG9tICE9PSBudWxsICYmIGRvbS5ub2RlVHlwZSAhPT0gMSkge1xuXHRcdFx0XHRkb20gPSBkb20ubmV4dFNpYmxpbmc7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZG9tO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogZ2V0cyB0aGUgcHJldmlvdXMgc2libGluZyBvZiBhIERPTSBub2RlLiBVc2VkIGludGVybmFsbHkuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAbmFtZSBfcHJldmlvdXNTaWJsaW5nKGRvbSlcblx0XHQgKiBAcGFyYW0gIHtET01FbGVtZW50fSBkb21cblx0XHQgKiBAcmV0dXJuIHtET01FbGVtZW50fVxuXHRcdCAqL1xuXHRcdF9wcmV2aW91c1NpYmxpbmcgOiBmdW5jdGlvbiAoZG9tKSB7XG5cdFx0XHRkb20gPSBkb20gPyBkb20ucHJldmlvdXNTaWJsaW5nIDogbnVsbDtcblx0XHRcdHdoaWxlKGRvbSAhPT0gbnVsbCAmJiBkb20ubm9kZVR5cGUgIT09IDEpIHtcblx0XHRcdFx0ZG9tID0gZG9tLnByZXZpb3VzU2libGluZztcblx0XHRcdH1cblx0XHRcdHJldHVybiBkb207XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBnZXQgdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBub2RlIChvciB0aGUgYWN0dWFsIGpRdWVyeSBleHRlbmRlZCBET00gbm9kZSkgYnkgdXNpbmcgYW55IGlucHV0IChjaGlsZCBET00gZWxlbWVudCwgSUQgc3RyaW5nLCBzZWxlY3RvciwgZXRjKVxuXHRcdCAqIEBuYW1lIGdldF9ub2RlKG9iaiBbLCBhc19kb21dKVxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmpcblx0XHQgKiBAcGFyYW0gIHtCb29sZWFufSBhc19kb21cblx0XHQgKiBAcmV0dXJuIHtPYmplY3R8alF1ZXJ5fVxuXHRcdCAqL1xuXHRcdGdldF9ub2RlIDogZnVuY3Rpb24gKG9iaiwgYXNfZG9tKSB7XG5cdFx0XHRpZihvYmogJiYgb2JqLmlkKSB7XG5cdFx0XHRcdG9iaiA9IG9iai5pZDtcblx0XHRcdH1cblx0XHRcdHZhciBkb207XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZih0aGlzLl9tb2RlbC5kYXRhW29ial0pIHtcblx0XHRcdFx0XHRvYmogPSB0aGlzLl9tb2RlbC5kYXRhW29ial07XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZigoKGRvbSA9ICQob2JqLCB0aGlzLmVsZW1lbnQpKS5sZW5ndGggfHwgKGRvbSA9ICQoJyMnICsgb2JqLCB0aGlzLmVsZW1lbnQpKS5sZW5ndGgpICYmIHRoaXMuX21vZGVsLmRhdGFbZG9tLmNsb3Nlc3QoJ2xpJykuYXR0cignaWQnKV0pIHtcblx0XHRcdFx0XHRvYmogPSB0aGlzLl9tb2RlbC5kYXRhW2RvbS5jbG9zZXN0KCdsaScpLmF0dHIoJ2lkJyldO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYoKGRvbSA9ICQob2JqLCB0aGlzLmVsZW1lbnQpKS5sZW5ndGggJiYgZG9tLmhhc0NsYXNzKCdqc3RyZWUnKSkge1xuXHRcdFx0XHRcdG9iaiA9IHRoaXMuX21vZGVsLmRhdGFbJyMnXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihhc19kb20pIHtcblx0XHRcdFx0XHRvYmogPSBvYmouaWQgPT09ICcjJyA/IHRoaXMuZWxlbWVudCA6ICQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob2JqLmlkKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG9iajtcblx0XHRcdH0gY2F0Y2ggKGV4KSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogZ2V0IHRoZSBwYXRoIHRvIGEgbm9kZSwgZWl0aGVyIGNvbnNpc3Rpbmcgb2Ygbm9kZSB0ZXh0cywgb3Igb2Ygbm9kZSBJRHMsIG9wdGlvbmFsbHkgZ2x1ZWQgdG9nZXRoZXIgKG90aGVyd2lzZSBhbiBhcnJheSlcblx0XHQgKiBAbmFtZSBnZXRfcGF0aChvYmogWywgZ2x1ZSwgaWRzXSlcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqIHRoZSBub2RlXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSBnbHVlIGlmIHlvdSB3YW50IHRoZSBwYXRoIGFzIGEgc3RyaW5nIC0gcGFzcyB0aGUgZ2x1ZSBoZXJlIChmb3IgZXhhbXBsZSAnLycpLCBpZiBhIGZhbHN5IHZhbHVlIGlzIHN1cHBsaWVkIGhlcmUsIGFuIGFycmF5IGlzIHJldHVybmVkXG5cdFx0ICogQHBhcmFtICB7Qm9vbGVhbn0gaWRzIGlmIHNldCB0byB0cnVlIGJ1aWxkIHRoZSBwYXRoIHVzaW5nIElELCBvdGhlcndpc2Ugbm9kZSB0ZXh0IGlzIHVzZWRcblx0XHQgKiBAcmV0dXJuIHttaXhlZH1cblx0XHQgKi9cblx0XHRnZXRfcGF0aCA6IGZ1bmN0aW9uIChvYmosIGdsdWUsIGlkcykge1xuXHRcdFx0b2JqID0gb2JqLnBhcmVudHMgPyBvYmogOiB0aGlzLmdldF9ub2RlKG9iaik7XG5cdFx0XHRpZighb2JqIHx8IG9iai5pZCA9PT0gJyMnIHx8ICFvYmoucGFyZW50cykge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR2YXIgaSwgaiwgcCA9IFtdO1xuXHRcdFx0cC5wdXNoKGlkcyA/IG9iai5pZCA6IG9iai50ZXh0KTtcblx0XHRcdGZvcihpID0gMCwgaiA9IG9iai5wYXJlbnRzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHRwLnB1c2goaWRzID8gb2JqLnBhcmVudHNbaV0gOiB0aGlzLmdldF90ZXh0KG9iai5wYXJlbnRzW2ldKSk7XG5cdFx0XHR9XG5cdFx0XHRwID0gcC5yZXZlcnNlKCkuc2xpY2UoMSk7XG5cdFx0XHRyZXR1cm4gZ2x1ZSA/IHAuam9pbihnbHVlKSA6IHA7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBnZXQgdGhlIG5leHQgdmlzaWJsZSBub2RlIHRoYXQgaXMgYmVsb3cgdGhlIGBvYmpgIG5vZGUuIElmIGBzdHJpY3RgIGlzIHNldCB0byBgdHJ1ZWAgb25seSBzaWJsaW5nIG5vZGVzIGFyZSByZXR1cm5lZC5cblx0XHQgKiBAbmFtZSBnZXRfbmV4dF9kb20ob2JqIFssIHN0cmljdF0pXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9ialxuXHRcdCAqIEBwYXJhbSAge0Jvb2xlYW59IHN0cmljdFxuXHRcdCAqIEByZXR1cm4ge2pRdWVyeX1cblx0XHQgKi9cblx0XHRnZXRfbmV4dF9kb20gOiBmdW5jdGlvbiAob2JqLCBzdHJpY3QpIHtcblx0XHRcdHZhciB0bXA7XG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaiwgdHJ1ZSk7XG5cdFx0XHRpZihvYmpbMF0gPT09IHRoaXMuZWxlbWVudFswXSkge1xuXHRcdFx0XHR0bXAgPSB0aGlzLl9maXJzdENoaWxkKHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpWzBdKTtcblx0XHRcdFx0cmV0dXJuIHRtcCA/ICQodG1wKSA6IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0aWYoIW9iaiB8fCAhb2JqLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpZihzdHJpY3QpIHtcblx0XHRcdFx0dG1wID0gdGhpcy5fbmV4dFNpYmxpbmcob2JqWzBdKTtcblx0XHRcdFx0cmV0dXJuIHRtcCA/ICQodG1wKSA6IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0aWYob2JqLmhhc0NsYXNzKFwianN0cmVlLW9wZW5cIikpIHtcblx0XHRcdFx0dG1wID0gdGhpcy5fZmlyc3RDaGlsZChvYmouY2hpbGRyZW4oJ3VsJylbMF0pO1xuXHRcdFx0XHRyZXR1cm4gdG1wID8gJCh0bXApIDogZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpZigodG1wID0gdGhpcy5fbmV4dFNpYmxpbmcob2JqWzBdKSkgIT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuICQodG1wKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvYmoucGFyZW50c1VudGlsKFwiLmpzdHJlZVwiLFwibGlcIikubmV4dChcImxpXCIpLmVxKDApO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogZ2V0IHRoZSBwcmV2aW91cyB2aXNpYmxlIG5vZGUgdGhhdCBpcyBhYm92ZSB0aGUgYG9iamAgbm9kZS4gSWYgYHN0cmljdGAgaXMgc2V0IHRvIGB0cnVlYCBvbmx5IHNpYmxpbmcgbm9kZXMgYXJlIHJldHVybmVkLlxuXHRcdCAqIEBuYW1lIGdldF9wcmV2X2RvbShvYmogWywgc3RyaWN0XSlcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqXG5cdFx0ICogQHBhcmFtICB7Qm9vbGVhbn0gc3RyaWN0XG5cdFx0ICogQHJldHVybiB7alF1ZXJ5fVxuXHRcdCAqL1xuXHRcdGdldF9wcmV2X2RvbSA6IGZ1bmN0aW9uIChvYmosIHN0cmljdCkge1xuXHRcdFx0dmFyIHRtcDtcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKTtcblx0XHRcdGlmKG9ialswXSA9PT0gdGhpcy5lbGVtZW50WzBdKSB7XG5cdFx0XHRcdHRtcCA9IHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpWzBdLmxhc3RDaGlsZDtcblx0XHRcdFx0cmV0dXJuIHRtcCA/ICQodG1wKSA6IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0aWYoIW9iaiB8fCAhb2JqLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpZihzdHJpY3QpIHtcblx0XHRcdFx0dG1wID0gdGhpcy5fcHJldmlvdXNTaWJsaW5nKG9ialswXSk7XG5cdFx0XHRcdHJldHVybiB0bXAgPyAkKHRtcCkgOiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmKCh0bXAgPSB0aGlzLl9wcmV2aW91c1NpYmxpbmcob2JqWzBdKSkgIT09IG51bGwpIHtcblx0XHRcdFx0b2JqID0gJCh0bXApO1xuXHRcdFx0XHR3aGlsZShvYmouaGFzQ2xhc3MoXCJqc3RyZWUtb3BlblwiKSkge1xuXHRcdFx0XHRcdG9iaiA9IG9iai5jaGlsZHJlbihcInVsOmVxKDApXCIpLmNoaWxkcmVuKFwibGk6bGFzdFwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb2JqO1xuXHRcdFx0fVxuXHRcdFx0dG1wID0gb2JqWzBdLnBhcmVudE5vZGUucGFyZW50Tm9kZTtcblx0XHRcdHJldHVybiB0bXAgJiYgdG1wLnRhZ05hbWUgPT09ICdMSScgPyAkKHRtcCkgOiBmYWxzZTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIGdldCB0aGUgcGFyZW50IElEIG9mIGEgbm9kZVxuXHRcdCAqIEBuYW1lIGdldF9wYXJlbnQob2JqKVxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmpcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9XG5cdFx0ICovXG5cdFx0Z2V0X3BhcmVudCA6IGZ1bmN0aW9uIChvYmopIHtcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdGlmKCFvYmogfHwgb2JqLmlkID09PSAnIycpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG9iai5wYXJlbnQ7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBnZXQgYSBqUXVlcnkgY29sbGVjdGlvbiBvZiBhbGwgdGhlIGNoaWxkcmVuIG9mIGEgbm9kZSAobm9kZSBtdXN0IGJlIHJlbmRlcmVkKVxuXHRcdCAqIEBuYW1lIGdldF9jaGlsZHJlbl9kb20ob2JqKVxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmpcblx0XHQgKiBAcmV0dXJuIHtqUXVlcnl9XG5cdFx0ICovXG5cdFx0Z2V0X2NoaWxkcmVuX2RvbSA6IGZ1bmN0aW9uIChvYmopIHtcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKTtcblx0XHRcdGlmKG9ialswXSA9PT0gdGhpcy5lbGVtZW50WzBdKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldF9jb250YWluZXJfdWwoKS5jaGlsZHJlbihcImxpXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYoIW9iaiB8fCAhb2JqLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb2JqLmNoaWxkcmVuKFwidWxcIikuY2hpbGRyZW4oXCJsaVwiKTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIGNoZWNrcyBpZiBhIG5vZGUgaGFzIGNoaWxkcmVuXG5cdFx0ICogQG5hbWUgaXNfcGFyZW50KG9iailcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0XHQgKi9cblx0XHRpc19wYXJlbnQgOiBmdW5jdGlvbiAob2JqKSB7XG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XG5cdFx0XHRyZXR1cm4gb2JqICYmIChvYmouc3RhdGUubG9hZGVkID09PSBmYWxzZSB8fCBvYmouY2hpbGRyZW4ubGVuZ3RoID4gMCk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBjaGVja3MgaWYgYSBub2RlIGlzIGxvYWRlZCAoaXRzIGNoaWxkcmVuIGFyZSBhdmFpbGFibGUpXG5cdFx0ICogQG5hbWUgaXNfbG9hZGVkKG9iailcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0XHQgKi9cblx0XHRpc19sb2FkZWQgOiBmdW5jdGlvbiAob2JqKSB7XG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XG5cdFx0XHRyZXR1cm4gb2JqICYmIG9iai5zdGF0ZS5sb2FkZWQ7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBjaGVjayBpZiBhIG5vZGUgaXMgY3VycmVudGx5IGxvYWRpbmcgKGZldGNoaW5nIGNoaWxkcmVuKVxuXHRcdCAqIEBuYW1lIGlzX2xvYWRpbmcob2JqKVxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmpcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxuXHRcdCAqL1xuXHRcdGlzX2xvYWRpbmcgOiBmdW5jdGlvbiAob2JqKSB7XG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaiwgdHJ1ZSk7XG5cdFx0XHRyZXR1cm4gb2JqICYmIG9iai5oYXNDbGFzcyhcImpzdHJlZS1sb2FkaW5nXCIpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogY2hlY2sgaWYgYSBub2RlIGlzIG9wZW5lZFxuXHRcdCAqIEBuYW1lIGlzX29wZW4ob2JqKVxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmpcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxuXHRcdCAqL1xuXHRcdGlzX29wZW4gOiBmdW5jdGlvbiAob2JqKSB7XG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XG5cdFx0XHRyZXR1cm4gb2JqICYmIG9iai5zdGF0ZS5vcGVuZWQ7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBjaGVjayBpZiBhIG5vZGUgaXMgaW4gYSBjbG9zZWQgc3RhdGVcblx0XHQgKiBAbmFtZSBpc19jbG9zZWQob2JqKVxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmpcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxuXHRcdCAqL1xuXHRcdGlzX2Nsb3NlZCA6IGZ1bmN0aW9uIChvYmopIHtcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdHJldHVybiBvYmogJiYgdGhpcy5pc19wYXJlbnQob2JqKSAmJiAhb2JqLnN0YXRlLm9wZW5lZDtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIGNoZWNrIGlmIGEgbm9kZSBoYXMgbm8gY2hpbGRyZW5cblx0XHQgKiBAbmFtZSBpc19sZWFmKG9iailcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0XHQgKi9cblx0XHRpc19sZWFmIDogZnVuY3Rpb24gKG9iaikge1xuXHRcdFx0cmV0dXJuICF0aGlzLmlzX3BhcmVudChvYmopO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogbG9hZHMgYSBub2RlIChmZXRjaGVzIGl0cyBjaGlsZHJlbiB1c2luZyB0aGUgYGNvcmUuZGF0YWAgc2V0dGluZykuIE11bHRpcGxlIG5vZGVzIGNhbiBiZSBwYXNzZWQgdG8gYnkgdXNpbmcgYW4gYXJyYXkuXG5cdFx0ICogQG5hbWUgbG9hZF9ub2RlKG9iaiBbLCBjYWxsYmFja10pXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9ialxuXHRcdCAqIEBwYXJhbSAge2Z1bmN0aW9ufSBjYWxsYmFjayBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIG9uY2UgbG9hZGluZyBpcyBjb25wbGV0ZSwgdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGluIHRoZSBpbnN0YW5jZSdzIHNjb3BlIGFuZCByZWNlaXZlcyB0d28gYXJndW1lbnRzIC0gdGhlIG5vZGUgYW5kIGEgYm9vbGVhbiBzdGF0dXNcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxuXHRcdCAqIEB0cmlnZ2VyIGxvYWRfbm9kZS5qc3RyZWVcblx0XHQgKi9cblx0XHRsb2FkX25vZGUgOiBmdW5jdGlvbiAob2JqLCBjYWxsYmFjaykge1xuXHRcdFx0dmFyIHQxLCB0Mjtcblx0XHRcdGlmKCQuaXNBcnJheShvYmopKSB7XG5cdFx0XHRcdG9iaiA9IG9iai5zbGljZSgpO1xuXHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IG9iai5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcblx0XHRcdFx0XHR0aGlzLmxvYWRfbm9kZShvYmpbdDFdLCBjYWxsYmFjayk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XG5cdFx0XHRpZighb2JqKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwodGhpcywgb2JqLCBmYWxzZSk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKS5hZGRDbGFzcyhcImpzdHJlZS1sb2FkaW5nXCIpO1xuXHRcdFx0dGhpcy5fbG9hZF9ub2RlKG9iaiwgJC5wcm94eShmdW5jdGlvbiAoc3RhdHVzKSB7XG5cdFx0XHRcdG9iai5zdGF0ZS5sb2FkZWQgPSBzdGF0dXM7XG5cdFx0XHRcdHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1sb2FkaW5nXCIpO1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogdHJpZ2dlcmVkIGFmdGVyIGEgbm9kZSBpcyBsb2FkZWRcblx0XHRcdFx0ICogQGV2ZW50XG5cdFx0XHRcdCAqIEBuYW1lIGxvYWRfbm9kZS5qc3RyZWVcblx0XHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGUgdGhlIG5vZGUgdGhhdCB3YXMgbG9hZGluZ1xuXHRcdFx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IHN0YXR1cyB3YXMgdGhlIG5vZGUgbG9hZGVkIHN1Y2Nlc3NmdWxseVxuXHRcdFx0XHQgKi9cblx0XHRcdFx0dGhpcy50cmlnZ2VyKCdsb2FkX25vZGUnLCB7IFwibm9kZVwiIDogb2JqLCBcInN0YXR1c1wiIDogc3RhdHVzIH0pO1xuXHRcdFx0XHRpZihjYWxsYmFjaykge1xuXHRcdFx0XHRcdGNhbGxiYWNrLmNhbGwodGhpcywgb2JqLCBzdGF0dXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCB0aGlzKSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIGhhbmRsZXMgdGhlIGFjdHVhbCBsb2FkaW5nIG9mIGEgbm9kZS4gVXNlZCBvbmx5IGludGVybmFsbHkuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAbmFtZSBfbG9hZF9ub2RlKG9iaiBbLCBjYWxsYmFja10pXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9ialxuXHRcdCAqIEBwYXJhbSAge2Z1bmN0aW9ufSBjYWxsYmFjayBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIG9uY2UgbG9hZGluZyBpcyBjb25wbGV0ZSwgdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGluIHRoZSBpbnN0YW5jZSdzIHNjb3BlIGFuZCByZWNlaXZlcyBvbmUgYXJndW1lbnQgLSBhIGJvb2xlYW4gc3RhdHVzXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0XHQgKi9cblx0XHRfbG9hZF9ub2RlIDogZnVuY3Rpb24gKG9iaiwgY2FsbGJhY2spIHtcblx0XHRcdHZhciBzID0gdGhpcy5zZXR0aW5ncy5jb3JlLmRhdGEsIHQ7XG5cdFx0XHQvLyB1c2Ugb3JpZ2luYWwgSFRNTFxuXHRcdFx0aWYoIXMpIHtcblx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwodGhpcywgb2JqLmlkID09PSAnIycgPyB0aGlzLl9hcHBlbmRfaHRtbF9kYXRhKG9iaiwgdGhpcy5fZGF0YS5jb3JlLm9yaWdpbmFsX2NvbnRhaW5lcl9odG1sLmNsb25lKHRydWUpKSA6IGZhbHNlKTtcblx0XHRcdH1cblx0XHRcdGlmKCQuaXNGdW5jdGlvbihzKSkge1xuXHRcdFx0XHRyZXR1cm4gcy5jYWxsKHRoaXMsIG9iaiwgJC5wcm94eShmdW5jdGlvbiAoZCkge1xuXHRcdFx0XHRcdHJldHVybiBkID09PSBmYWxzZSA/IGNhbGxiYWNrLmNhbGwodGhpcywgZmFsc2UpIDogY2FsbGJhY2suY2FsbCh0aGlzLCB0aGlzW3R5cGVvZiBkID09PSAnc3RyaW5nJyA/ICdfYXBwZW5kX2h0bWxfZGF0YScgOiAnX2FwcGVuZF9qc29uX2RhdGEnXShvYmosIHR5cGVvZiBkID09PSAnc3RyaW5nJyA/ICQoZCkgOiBkKSk7XG5cdFx0XHRcdH0sIHRoaXMpKTtcblx0XHRcdH1cblx0XHRcdGlmKHR5cGVvZiBzID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRpZihzLnVybCkge1xuXHRcdFx0XHRcdHMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgcyk7XG5cdFx0XHRcdFx0aWYoJC5pc0Z1bmN0aW9uKHMudXJsKSkge1xuXHRcdFx0XHRcdFx0cy51cmwgPSBzLnVybC5jYWxsKHRoaXMsIG9iaik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmKCQuaXNGdW5jdGlvbihzLmRhdGEpKSB7XG5cdFx0XHRcdFx0XHRzLmRhdGEgPSBzLmRhdGEuY2FsbCh0aGlzLCBvYmopO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gJC5hamF4KHMpXG5cdFx0XHRcdFx0XHQuZG9uZSgkLnByb3h5KGZ1bmN0aW9uIChkLHQseCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciB0eXBlID0geC5nZXRSZXNwb25zZUhlYWRlcignQ29udGVudC1UeXBlJyk7XG5cdFx0XHRcdFx0XHRcdFx0aWYodHlwZS5pbmRleE9mKCdqc29uJykgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCh0aGlzLCB0aGlzLl9hcHBlbmRfanNvbl9kYXRhKG9iaiwgZCkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlLmluZGV4T2YoJ2h0bWwnKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKHRoaXMsIHRoaXMuX2FwcGVuZF9odG1sX2RhdGEob2JqLCAkKGQpKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LCB0aGlzKSlcblx0XHRcdFx0XHRcdC5mYWlsKCQucHJveHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdGNhbGxiYWNrLmNhbGwodGhpcywgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yID0geyAnZXJyb3InIDogJ2FqYXgnLCAncGx1Z2luJyA6ICdjb3JlJywgJ2lkJyA6ICdjb3JlXzA0JywgJ3JlYXNvbicgOiAnQ291bGQgbm90IGxvYWQgbm9kZScsICdkYXRhJyA6IEpTT04uc3RyaW5naWZ5KHMpIH07XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZXR0aW5ncy5jb3JlLmVycm9yLmNhbGwodGhpcywgdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3IpO1xuXHRcdFx0XHRcdFx0XHR9LCB0aGlzKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dCA9ICgkLmlzQXJyYXkocykgfHwgJC5pc1BsYWluT2JqZWN0KHMpKSA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocykpIDogcztcblx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwodGhpcywgdGhpcy5fYXBwZW5kX2pzb25fZGF0YShvYmosIHQpKTtcblx0XHRcdH1cblx0XHRcdGlmKHR5cGVvZiBzID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCh0aGlzLCB0aGlzLl9hcHBlbmRfaHRtbF9kYXRhKG9iaiwgcykpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwodGhpcywgZmFsc2UpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogYWRkcyBhIG5vZGUgdG8gdGhlIGxpc3Qgb2Ygbm9kZXMgdG8gcmVkcmF3LiBVc2VkIG9ubHkgaW50ZXJuYWxseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBuYW1lIF9ub2RlX2NoYW5nZWQob2JqIFssIGNhbGxiYWNrXSlcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqXG5cdFx0ICovXG5cdFx0X25vZGVfY2hhbmdlZCA6IGZ1bmN0aW9uIChvYmopIHtcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdGlmKG9iaikge1xuXHRcdFx0XHR0aGlzLl9tb2RlbC5jaGFuZ2VkLnB1c2gob2JqLmlkKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIGFwcGVuZHMgSFRNTCBjb250ZW50IHRvIHRoZSB0cmVlLiBVc2VkIGludGVybmFsbHkuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAbmFtZSBfYXBwZW5kX2h0bWxfZGF0YShvYmosIGRhdGEpXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9iaiB0aGUgbm9kZSB0byBhcHBlbmQgdG9cblx0XHQgKiBAcGFyYW0gIHtTdHJpbmd9IGRhdGEgdGhlIEhUTUwgc3RyaW5nIHRvIHBhcnNlIGFuZCBhcHBlbmRcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxuXHRcdCAqIEB0cmlnZ2VyIG1vZGVsLmpzdHJlZSwgY2hhbmdlZC5qc3RyZWVcblx0XHQgKi9cblx0XHRfYXBwZW5kX2h0bWxfZGF0YSA6IGZ1bmN0aW9uIChkb20sIGRhdGEpIHtcblx0XHRcdGRvbSA9IHRoaXMuZ2V0X25vZGUoZG9tKTtcblx0XHRcdGRvbS5jaGlsZHJlbiA9IFtdO1xuXHRcdFx0ZG9tLmNoaWxkcmVuX2QgPSBbXTtcblx0XHRcdHZhciBkYXQgPSBkYXRhLmlzKCd1bCcpID8gZGF0YS5jaGlsZHJlbigpIDogZGF0YSxcblx0XHRcdFx0cGFyID0gZG9tLmlkLFxuXHRcdFx0XHRjaGQgPSBbXSxcblx0XHRcdFx0ZHBjID0gW10sXG5cdFx0XHRcdG0gPSB0aGlzLl9tb2RlbC5kYXRhLFxuXHRcdFx0XHRwID0gbVtwYXJdLFxuXHRcdFx0XHRzID0gdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmxlbmd0aCxcblx0XHRcdFx0dG1wLCBpLCBqO1xuXHRcdFx0ZGF0LmVhY2goJC5wcm94eShmdW5jdGlvbiAoaSwgdikge1xuXHRcdFx0XHR0bXAgPSB0aGlzLl9wYXJzZV9tb2RlbF9mcm9tX2h0bWwoJCh2KSwgcGFyLCBwLnBhcmVudHMuY29uY2F0KCkpO1xuXHRcdFx0XHRpZih0bXApIHtcblx0XHRcdFx0XHRjaGQucHVzaCh0bXApO1xuXHRcdFx0XHRcdGRwYy5wdXNoKHRtcCk7XG5cdFx0XHRcdFx0aWYobVt0bXBdLmNoaWxkcmVuX2QubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRkcGMgPSBkcGMuY29uY2F0KG1bdG1wXS5jaGlsZHJlbl9kKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sIHRoaXMpKTtcblx0XHRcdHAuY2hpbGRyZW4gPSBjaGQ7XG5cdFx0XHRwLmNoaWxkcmVuX2QgPSBkcGM7XG5cdFx0XHRmb3IoaSA9IDAsIGogPSBwLnBhcmVudHMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdG1bcC5wYXJlbnRzW2ldXS5jaGlsZHJlbl9kID0gbVtwLnBhcmVudHNbaV1dLmNoaWxkcmVuX2QuY29uY2F0KGRwYyk7XG5cdFx0XHR9XG5cdFx0XHQvKipcblx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIG5ldyBkYXRhIGlzIGluc2VydGVkIHRvIHRoZSB0cmVlIG1vZGVsXG5cdFx0XHQgKiBAZXZlbnRcblx0XHRcdCAqIEBuYW1lIG1vZGVsLmpzdHJlZVxuXHRcdFx0ICogQHBhcmFtIHtBcnJheX0gbm9kZXMgYW4gYXJyYXkgb2Ygbm9kZSBJRHNcblx0XHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBwYXJlbnQgdGhlIHBhcmVudCBJRCBvZiB0aGUgbm9kZXNcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmlnZ2VyKCdtb2RlbCcsIHsgXCJub2Rlc1wiIDogZHBjLCAncGFyZW50JyA6IHBhciB9KTtcblx0XHRcdGlmKHBhciAhPT0gJyMnKSB7XG5cdFx0XHRcdHRoaXMuX25vZGVfY2hhbmdlZChwYXIpO1xuXHRcdFx0XHR0aGlzLnJlZHJhdygpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLmNoaWxkcmVuKCcuanN0cmVlLWluaXRpYWwtbm9kZScpLnJlbW92ZSgpO1xuXHRcdFx0XHR0aGlzLnJlZHJhdyh0cnVlKTtcblx0XHRcdH1cblx0XHRcdGlmKHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5sZW5ndGggIT09IHMpIHtcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCdjaGFuZ2VkJywgeyAnYWN0aW9uJyA6ICdtb2RlbCcsICdzZWxlY3RlZCcgOiB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQgfSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIGFwcGVuZHMgSlNPTiBjb250ZW50IHRvIHRoZSB0cmVlLiBVc2VkIGludGVybmFsbHkuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAbmFtZSBfYXBwZW5kX2pzb25fZGF0YShvYmosIGRhdGEpXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9iaiB0aGUgbm9kZSB0byBhcHBlbmQgdG9cblx0XHQgKiBAcGFyYW0gIHtTdHJpbmd9IGRhdGEgdGhlIEpTT04gb2JqZWN0IHRvIHBhcnNlIGFuZCBhcHBlbmRcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxuXHRcdCAqL1xuXHRcdF9hcHBlbmRfanNvbl9kYXRhIDogZnVuY3Rpb24gKGRvbSwgZGF0YSkge1xuXHRcdFx0ZG9tID0gdGhpcy5nZXRfbm9kZShkb20pO1xuXHRcdFx0ZG9tLmNoaWxkcmVuID0gW107XG5cdFx0XHRkb20uY2hpbGRyZW5fZCA9IFtdO1xuXHRcdFx0dmFyIGRhdCA9IGRhdGEsXG5cdFx0XHRcdHBhciA9IGRvbS5pZCxcblx0XHRcdFx0Y2hkID0gW10sXG5cdFx0XHRcdGRwYyA9IFtdLFxuXHRcdFx0XHRtID0gdGhpcy5fbW9kZWwuZGF0YSxcblx0XHRcdFx0cCA9IG1bcGFyXSxcblx0XHRcdFx0cyA9IHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5sZW5ndGgsXG5cdFx0XHRcdHRtcCwgaSwgajtcblx0XHRcdC8vIColJEAhISFcblx0XHRcdGlmKGRhdC5kKSB7XG5cdFx0XHRcdGRhdCA9IGRhdC5kO1xuXHRcdFx0XHRpZih0eXBlb2YgZGF0ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0ZGF0ID0gSlNPTi5wYXJzZShkYXQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZighJC5pc0FycmF5KGRhdCkpIHsgZGF0ID0gW2RhdF07IH1cblx0XHRcdGlmKGRhdC5sZW5ndGggJiYgZGF0WzBdLmlkICE9PSB1bmRlZmluZWQgJiYgZGF0WzBdLnBhcmVudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vIEZsYXQgSlNPTiBzdXBwb3J0IChmb3IgZWFzeSBpbXBvcnQgZnJvbSBEQik6XG5cdFx0XHRcdC8vIDEpIGNvbnZlcnQgdG8gb2JqZWN0IChmb3JlYWNoKVxuXHRcdFx0XHRmb3IoaSA9IDAsIGogPSBkYXQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdFx0aWYoIWRhdFtpXS5jaGlsZHJlbikge1xuXHRcdFx0XHRcdFx0ZGF0W2ldLmNoaWxkcmVuID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1bZGF0W2ldLmlkXSA9IGRhdFtpXTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyAyKSBwb3B1bGF0ZSBjaGlsZHJlbiAoZm9yZWFjaClcblx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gZGF0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHRcdG1bZGF0W2ldLnBhcmVudF0uY2hpbGRyZW4ucHVzaChkYXRbaV0uaWQpO1xuXHRcdFx0XHRcdC8vIHBvcHVsYXRlIHBhcmVudC5jaGlsZHJlbl9kXG5cdFx0XHRcdFx0cC5jaGlsZHJlbl9kLnB1c2goZGF0W2ldLmlkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyAzKSBub3JtYWxpemUgJiYgcG9wdWxhdGUgcGFyZW50cyBhbmQgY2hpbGRyZW5fZCB3aXRoIHJlY3Vyc2lvblxuXHRcdFx0XHRmb3IoaSA9IDAsIGogPSBwLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHRcdHRtcCA9IHRoaXMuX3BhcnNlX21vZGVsX2Zyb21fZmxhdF9qc29uKG1bcC5jaGlsZHJlbltpXV0sIHBhciwgcC5wYXJlbnRzLmNvbmNhdCgpKTtcblx0XHRcdFx0XHRkcGMucHVzaCh0bXApO1xuXHRcdFx0XHRcdGlmKG1bdG1wXS5jaGlsZHJlbl9kLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0ZHBjID0gZHBjLmNvbmNhdChtW3RtcF0uY2hpbGRyZW5fZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vID8pIHRocmVlX3N0YXRlIHNlbGVjdGlvbiAtIHAuc3RhdGUuc2VsZWN0ZWQgJiYgdCAtIChpZiB0aHJlZV9zdGF0ZSBmb3JlYWNoKGRhdCA9PiBjaCkgLT4gZm9yZWFjaChwYXJlbnRzKSBpZihwYXJlbnQuc2VsZWN0ZWQpIGNoaWxkLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRmb3IoaSA9IDAsIGogPSBkYXQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdFx0dG1wID0gdGhpcy5fcGFyc2VfbW9kZWxfZnJvbV9qc29uKGRhdFtpXSwgcGFyLCBwLnBhcmVudHMuY29uY2F0KCkpO1xuXHRcdFx0XHRcdGlmKHRtcCkge1xuXHRcdFx0XHRcdFx0Y2hkLnB1c2godG1wKTtcblx0XHRcdFx0XHRcdGRwYy5wdXNoKHRtcCk7XG5cdFx0XHRcdFx0XHRpZihtW3RtcF0uY2hpbGRyZW5fZC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0ZHBjID0gZHBjLmNvbmNhdChtW3RtcF0uY2hpbGRyZW5fZCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHAuY2hpbGRyZW4gPSBjaGQ7XG5cdFx0XHRcdHAuY2hpbGRyZW5fZCA9IGRwYztcblx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gcC5wYXJlbnRzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHRcdG1bcC5wYXJlbnRzW2ldXS5jaGlsZHJlbl9kID0gbVtwLnBhcmVudHNbaV1dLmNoaWxkcmVuX2QuY29uY2F0KGRwYyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMudHJpZ2dlcignbW9kZWwnLCB7IFwibm9kZXNcIiA6IGRwYywgJ3BhcmVudCcgOiBwYXIgfSk7XG5cblx0XHRcdGlmKHBhciAhPT0gJyMnKSB7XG5cdFx0XHRcdHRoaXMuX25vZGVfY2hhbmdlZChwYXIpO1xuXHRcdFx0XHR0aGlzLnJlZHJhdygpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdC8vIHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLmNoaWxkcmVuKCcuanN0cmVlLWluaXRpYWwtbm9kZScpLnJlbW92ZSgpO1xuXHRcdFx0XHR0aGlzLnJlZHJhdyh0cnVlKTtcblx0XHRcdH1cblx0XHRcdGlmKHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5sZW5ndGggIT09IHMpIHtcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCdjaGFuZ2VkJywgeyAnYWN0aW9uJyA6ICdtb2RlbCcsICdzZWxlY3RlZCcgOiB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQgfSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIHBhcnNlcyBhIG5vZGUgZnJvbSBhIGpRdWVyeSBvYmplY3QgYW5kIGFwcGVuZHMgdGhlbSB0byB0aGUgaW4gbWVtb3J5IHRyZWUgbW9kZWwuIFVzZWQgaW50ZXJuYWxseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBuYW1lIF9wYXJzZV9tb2RlbF9mcm9tX2h0bWwoZCBbLCBwLCBwc10pXG5cdFx0ICogQHBhcmFtICB7alF1ZXJ5fSBkIHRoZSBqUXVlcnkgb2JqZWN0IHRvIHBhcnNlXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSBwIHRoZSBwYXJlbnQgSURcblx0XHQgKiBAcGFyYW0gIHtBcnJheX0gcHMgbGlzdCBvZiBhbGwgcGFyZW50c1xuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gdGhlIElEIG9mIHRoZSBvYmplY3QgYWRkZWQgdG8gdGhlIG1vZGVsXG5cdFx0ICovXG5cdFx0X3BhcnNlX21vZGVsX2Zyb21faHRtbCA6IGZ1bmN0aW9uIChkLCBwLCBwcykge1xuXHRcdFx0aWYoIXBzKSB7IHBzID0gW107IH1cblx0XHRcdGVsc2UgeyBwcyA9IFtdLmNvbmNhdChwcyk7IH1cblx0XHRcdGlmKHApIHsgcHMudW5zaGlmdChwKTsgfVxuXHRcdFx0dmFyIGMsIGUsIG0gPSB0aGlzLl9tb2RlbC5kYXRhLFxuXHRcdFx0XHRkYXRhID0ge1xuXHRcdFx0XHRcdGlkXHRcdFx0OiBmYWxzZSxcblx0XHRcdFx0XHR0ZXh0XHRcdDogZmFsc2UsXG5cdFx0XHRcdFx0aWNvblx0XHQ6IHRydWUsXG5cdFx0XHRcdFx0cGFyZW50XHRcdDogcCxcblx0XHRcdFx0XHRwYXJlbnRzXHRcdDogcHMsXG5cdFx0XHRcdFx0Y2hpbGRyZW5cdDogW10sXG5cdFx0XHRcdFx0Y2hpbGRyZW5fZFx0OiBbXSxcblx0XHRcdFx0XHRkYXRhXHRcdDogbnVsbCxcblx0XHRcdFx0XHRzdGF0ZVx0XHQ6IHsgfSxcblx0XHRcdFx0XHRsaV9hdHRyXHRcdDogeyBpZCA6IGZhbHNlIH0sXG5cdFx0XHRcdFx0YV9hdHRyXHRcdDogeyBocmVmIDogJyMnIH0sXG5cdFx0XHRcdFx0b3JpZ2luYWxcdDogZmFsc2Vcblx0XHRcdFx0fSwgaSwgdG1wLCB0aWQ7XG5cdFx0XHRmb3IoaSBpbiB0aGlzLl9tb2RlbC5kZWZhdWx0X3N0YXRlKSB7XG5cdFx0XHRcdGlmKHRoaXMuX21vZGVsLmRlZmF1bHRfc3RhdGUuaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0XHRkYXRhLnN0YXRlW2ldID0gdGhpcy5fbW9kZWwuZGVmYXVsdF9zdGF0ZVtpXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dG1wID0gJC52YWthdGEuYXR0cmlidXRlcyhkLCB0cnVlKTtcblx0XHRcdCQuZWFjaCh0bXAsIGZ1bmN0aW9uIChpLCB2KSB7XG5cdFx0XHRcdHYgPSAkLnRyaW0odik7XG5cdFx0XHRcdGlmKCF2Lmxlbmd0aCkgeyByZXR1cm4gdHJ1ZTsgfVxuXHRcdFx0XHRkYXRhLmxpX2F0dHJbaV0gPSB2O1xuXHRcdFx0XHRpZihpID09PSAnaWQnKSB7XG5cdFx0XHRcdFx0ZGF0YS5pZCA9IHY7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0dG1wID0gZC5jaGlsZHJlbignYScpLmVxKDApO1xuXHRcdFx0aWYodG1wLmxlbmd0aCkge1xuXHRcdFx0XHR0bXAgPSAkLnZha2F0YS5hdHRyaWJ1dGVzKHRtcCwgdHJ1ZSk7XG5cdFx0XHRcdCQuZWFjaCh0bXAsIGZ1bmN0aW9uIChpLCB2KSB7XG5cdFx0XHRcdFx0diA9ICQudHJpbSh2KTtcblx0XHRcdFx0XHRpZih2Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0ZGF0YS5hX2F0dHJbaV0gPSB2O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHR0bXAgPSBkLmNoaWxkcmVuKFwiYTplcSgwKVwiKS5sZW5ndGggPyBkLmNoaWxkcmVuKFwiYTplcSgwKVwiKS5jbG9uZSgpIDogZC5jbG9uZSgpO1xuXHRcdFx0dG1wLmNoaWxkcmVuKFwiaW5zLCBpLCB1bFwiKS5yZW1vdmUoKTtcblx0XHRcdHRtcCA9IHRtcC5odG1sKCk7XG5cdFx0XHR0bXAgPSAkKCc8ZGl2IC8+JykuaHRtbCh0bXApO1xuXHRcdFx0ZGF0YS50ZXh0ID0gdG1wLmh0bWwoKTtcblx0XHRcdHRtcCA9IGQuZGF0YSgpO1xuXHRcdFx0ZGF0YS5kYXRhID0gdG1wID8gJC5leHRlbmQodHJ1ZSwge30sIHRtcCkgOiBudWxsO1xuXHRcdFx0ZGF0YS5zdGF0ZS5vcGVuZWQgPSBkLmhhc0NsYXNzKCdqc3RyZWUtb3BlbicpO1xuXHRcdFx0ZGF0YS5zdGF0ZS5zZWxlY3RlZCA9IGQuY2hpbGRyZW4oJ2EnKS5oYXNDbGFzcygnanN0cmVlLWNsaWNrZWQnKTtcblx0XHRcdGRhdGEuc3RhdGUuZGlzYWJsZWQgPSBkLmNoaWxkcmVuKCdhJykuaGFzQ2xhc3MoJ2pzdHJlZS1kaXNhYmxlZCcpO1xuXHRcdFx0aWYoZGF0YS5kYXRhICYmIGRhdGEuZGF0YS5qc3RyZWUpIHtcblx0XHRcdFx0Zm9yKGkgaW4gZGF0YS5kYXRhLmpzdHJlZSkge1xuXHRcdFx0XHRcdGlmKGRhdGEuZGF0YS5qc3RyZWUuaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0XHRcdGRhdGEuc3RhdGVbaV0gPSBkYXRhLmRhdGEuanN0cmVlW2ldO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dG1wID0gZC5jaGlsZHJlbihcImFcIikuY2hpbGRyZW4oXCIuanN0cmVlLXRoZW1laWNvblwiKTtcblx0XHRcdGlmKHRtcC5sZW5ndGgpIHtcblx0XHRcdFx0ZGF0YS5pY29uID0gdG1wLmhhc0NsYXNzKCdqc3RyZWUtdGhlbWVpY29uLWhpZGRlbicpID8gZmFsc2UgOiB0bXAuYXR0cigncmVsJyk7XG5cdFx0XHR9XG5cdFx0XHRpZihkYXRhLnN0YXRlLmljb24pIHtcblx0XHRcdFx0ZGF0YS5pY29uID0gZGF0YS5zdGF0ZS5pY29uO1xuXHRcdFx0fVxuXHRcdFx0dG1wID0gZC5jaGlsZHJlbihcInVsXCIpLmNoaWxkcmVuKFwibGlcIik7XG5cdFx0XHRkbyB7XG5cdFx0XHRcdHRpZCA9ICdqJyArIHRoaXMuX2lkICsgJ18nICsgKCsrdGhpcy5fY250KTtcblx0XHRcdH0gd2hpbGUobVt0aWRdKTtcblx0XHRcdGRhdGEuaWQgPSBkYXRhLmxpX2F0dHIuaWQgfHwgdGlkO1xuXHRcdFx0aWYodG1wLmxlbmd0aCkge1xuXHRcdFx0XHR0bXAuZWFjaCgkLnByb3h5KGZ1bmN0aW9uIChpLCB2KSB7XG5cdFx0XHRcdFx0YyA9IHRoaXMuX3BhcnNlX21vZGVsX2Zyb21faHRtbCgkKHYpLCBkYXRhLmlkLCBwcyk7XG5cdFx0XHRcdFx0ZSA9IHRoaXMuX21vZGVsLmRhdGFbY107XG5cdFx0XHRcdFx0ZGF0YS5jaGlsZHJlbi5wdXNoKGMpO1xuXHRcdFx0XHRcdGlmKGUuY2hpbGRyZW5fZC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGRhdGEuY2hpbGRyZW5fZCA9IGRhdGEuY2hpbGRyZW5fZC5jb25jYXQoZS5jaGlsZHJlbl9kKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sIHRoaXMpKTtcblx0XHRcdFx0ZGF0YS5jaGlsZHJlbl9kID0gZGF0YS5jaGlsZHJlbl9kLmNvbmNhdChkYXRhLmNoaWxkcmVuKTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRpZihkLmhhc0NsYXNzKCdqc3RyZWUtY2xvc2VkJykpIHtcblx0XHRcdFx0XHRkYXRhLnN0YXRlLmxvYWRlZCA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZihkYXRhLmxpX2F0dHJbJ2NsYXNzJ10pIHtcblx0XHRcdFx0ZGF0YS5saV9hdHRyWydjbGFzcyddID0gZGF0YS5saV9hdHRyWydjbGFzcyddLnJlcGxhY2UoJ2pzdHJlZS1jbG9zZWQnLCcnKS5yZXBsYWNlKCdqc3RyZWUtb3BlbicsJycpO1xuXHRcdFx0fVxuXHRcdFx0aWYoZGF0YS5hX2F0dHJbJ2NsYXNzJ10pIHtcblx0XHRcdFx0ZGF0YS5hX2F0dHJbJ2NsYXNzJ10gPSBkYXRhLmFfYXR0clsnY2xhc3MnXS5yZXBsYWNlKCdqc3RyZWUtY2xpY2tlZCcsJycpLnJlcGxhY2UoJ2pzdHJlZS1kaXNhYmxlZCcsJycpO1xuXHRcdFx0fVxuXHRcdFx0bVtkYXRhLmlkXSA9IGRhdGE7XG5cdFx0XHRpZihkYXRhLnN0YXRlLnNlbGVjdGVkKSB7XG5cdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5wdXNoKGRhdGEuaWQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRhdGEuaWQ7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBwYXJzZXMgYSBub2RlIGZyb20gYSBKU09OIG9iamVjdCAodXNlZCB3aGVuIGRlYWxpbmcgd2l0aCBmbGF0IGRhdGEsIHdoaWNoIGhhcyBubyBuZXN0aW5nIG9mIGNoaWxkcmVuLCBidXQgaGFzIGlkIGFuZCBwYXJlbnQgcHJvcGVydGllcykgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGluIG1lbW9yeSB0cmVlIG1vZGVsLiBVc2VkIGludGVybmFsbHkuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAbmFtZSBfcGFyc2VfbW9kZWxfZnJvbV9mbGF0X2pzb24oZCBbLCBwLCBwc10pXG5cdFx0ICogQHBhcmFtICB7T2JqZWN0fSBkIHRoZSBKU09OIG9iamVjdCB0byBwYXJzZVxuXHRcdCAqIEBwYXJhbSAge1N0cmluZ30gcCB0aGUgcGFyZW50IElEXG5cdFx0ICogQHBhcmFtICB7QXJyYXl9IHBzIGxpc3Qgb2YgYWxsIHBhcmVudHNcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSBJRCBvZiB0aGUgb2JqZWN0IGFkZGVkIHRvIHRoZSBtb2RlbFxuXHRcdCAqL1xuXHRcdF9wYXJzZV9tb2RlbF9mcm9tX2ZsYXRfanNvbiA6IGZ1bmN0aW9uIChkLCBwLCBwcykge1xuXHRcdFx0aWYoIXBzKSB7IHBzID0gW107IH1cblx0XHRcdGVsc2UgeyBwcyA9IHBzLmNvbmNhdCgpOyB9XG5cdFx0XHRpZihwKSB7IHBzLnVuc2hpZnQocCk7IH1cblx0XHRcdHZhciB0aWQgPSBkLmlkLFxuXHRcdFx0XHRtID0gdGhpcy5fbW9kZWwuZGF0YSxcblx0XHRcdFx0ZGYgPSB0aGlzLl9tb2RlbC5kZWZhdWx0X3N0YXRlLFxuXHRcdFx0XHRpLCBqLCBjLCBlLFxuXHRcdFx0XHR0bXAgPSB7XG5cdFx0XHRcdFx0aWRcdFx0XHQ6IHRpZCxcblx0XHRcdFx0XHR0ZXh0XHRcdDogZC50ZXh0IHx8ICcnLFxuXHRcdFx0XHRcdGljb25cdFx0OiBkLmljb24gIT09IHVuZGVmaW5lZCA/IGQuaWNvbiA6IHRydWUsXG5cdFx0XHRcdFx0cGFyZW50XHRcdDogcCxcblx0XHRcdFx0XHRwYXJlbnRzXHRcdDogcHMsXG5cdFx0XHRcdFx0Y2hpbGRyZW5cdDogZC5jaGlsZHJlbiB8fCBbXSxcblx0XHRcdFx0XHRjaGlsZHJlbl9kXHQ6IGQuY2hpbGRyZW5fZCB8fCBbXSxcblx0XHRcdFx0XHRkYXRhXHRcdDogZC5kYXRhLFxuXHRcdFx0XHRcdHN0YXRlXHRcdDogeyB9LFxuXHRcdFx0XHRcdGxpX2F0dHJcdFx0OiB7IGlkIDogZmFsc2UgfSxcblx0XHRcdFx0XHRhX2F0dHJcdFx0OiB7IGhyZWYgOiAnIycgfSxcblx0XHRcdFx0XHRvcmlnaW5hbFx0OiBmYWxzZVxuXHRcdFx0XHR9O1xuXHRcdFx0Zm9yKGkgaW4gZGYpIHtcblx0XHRcdFx0aWYoZGYuaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0XHR0bXAuc3RhdGVbaV0gPSBkZltpXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYoZCAmJiBkLmRhdGEgJiYgZC5kYXRhLmpzdHJlZSAmJiBkLmRhdGEuanN0cmVlLmljb24pIHtcblx0XHRcdFx0dG1wLmljb24gPSBkLmRhdGEuanN0cmVlLmljb247XG5cdFx0XHR9XG5cdFx0XHRpZihkICYmIGQuZGF0YSkge1xuXHRcdFx0XHR0bXAuZGF0YSA9IGQuZGF0YTtcblx0XHRcdFx0aWYoZC5kYXRhLmpzdHJlZSkge1xuXHRcdFx0XHRcdGZvcihpIGluIGQuZGF0YS5qc3RyZWUpIHtcblx0XHRcdFx0XHRcdGlmKGQuZGF0YS5qc3RyZWUuaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0XHRcdFx0dG1wLnN0YXRlW2ldID0gZC5kYXRhLmpzdHJlZVtpXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmKGQgJiYgdHlwZW9mIGQuc3RhdGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGZvciAoaSBpbiBkLnN0YXRlKSB7XG5cdFx0XHRcdFx0aWYoZC5zdGF0ZS5oYXNPd25Qcm9wZXJ0eShpKSkge1xuXHRcdFx0XHRcdFx0dG1wLnN0YXRlW2ldID0gZC5zdGF0ZVtpXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmKGQgJiYgdHlwZW9mIGQubGlfYXR0ciA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0Zm9yIChpIGluIGQubGlfYXR0cikge1xuXHRcdFx0XHRcdGlmKGQubGlfYXR0ci5oYXNPd25Qcm9wZXJ0eShpKSkge1xuXHRcdFx0XHRcdFx0dG1wLmxpX2F0dHJbaV0gPSBkLmxpX2F0dHJbaV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZighdG1wLmxpX2F0dHIuaWQpIHtcblx0XHRcdFx0dG1wLmxpX2F0dHIuaWQgPSB0aWQ7XG5cdFx0XHR9XG5cdFx0XHRpZihkICYmIHR5cGVvZiBkLmFfYXR0ciA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0Zm9yIChpIGluIGQuYV9hdHRyKSB7XG5cdFx0XHRcdFx0aWYoZC5hX2F0dHIuaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0XHRcdHRtcC5hX2F0dHJbaV0gPSBkLmFfYXR0cltpXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmKGQgJiYgZC5jaGlsZHJlbiAmJiBkLmNoaWxkcmVuID09PSB0cnVlKSB7XG5cdFx0XHRcdHRtcC5zdGF0ZS5sb2FkZWQgPSBmYWxzZTtcblx0XHRcdFx0dG1wLmNoaWxkcmVuID0gW107XG5cdFx0XHRcdHRtcC5jaGlsZHJlbl9kID0gW107XG5cdFx0XHR9XG5cdFx0XHRtW3RtcC5pZF0gPSB0bXA7XG5cdFx0XHRmb3IoaSA9IDAsIGogPSB0bXAuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdGMgPSB0aGlzLl9wYXJzZV9tb2RlbF9mcm9tX2ZsYXRfanNvbihtW3RtcC5jaGlsZHJlbltpXV0sIHRtcC5pZCwgcHMpO1xuXHRcdFx0XHRlID0gbVtjXTtcblx0XHRcdFx0dG1wLmNoaWxkcmVuX2QucHVzaChjKTtcblx0XHRcdFx0aWYoZS5jaGlsZHJlbl9kLmxlbmd0aCkge1xuXHRcdFx0XHRcdHRtcC5jaGlsZHJlbl9kID0gdG1wLmNoaWxkcmVuX2QuY29uY2F0KGUuY2hpbGRyZW5fZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRlbGV0ZSBkLmRhdGE7XG5cdFx0XHRkZWxldGUgZC5jaGlsZHJlbjtcblx0XHRcdG1bdG1wLmlkXS5vcmlnaW5hbCA9IGQ7XG5cdFx0XHRpZih0bXAuc3RhdGUuc2VsZWN0ZWQpIHtcblx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLnB1c2godG1wLmlkKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0bXAuaWQ7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBwYXJzZXMgYSBub2RlIGZyb20gYSBKU09OIG9iamVjdCBhbmQgYXBwZW5kcyBpdCB0byB0aGUgaW4gbWVtb3J5IHRyZWUgbW9kZWwuIFVzZWQgaW50ZXJuYWxseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBuYW1lIF9wYXJzZV9tb2RlbF9mcm9tX2pzb24oZCBbLCBwLCBwc10pXG5cdFx0ICogQHBhcmFtICB7T2JqZWN0fSBkIHRoZSBKU09OIG9iamVjdCB0byBwYXJzZVxuXHRcdCAqIEBwYXJhbSAge1N0cmluZ30gcCB0aGUgcGFyZW50IElEXG5cdFx0ICogQHBhcmFtICB7QXJyYXl9IHBzIGxpc3Qgb2YgYWxsIHBhcmVudHNcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSBJRCBvZiB0aGUgb2JqZWN0IGFkZGVkIHRvIHRoZSBtb2RlbFxuXHRcdCAqL1xuXHRcdF9wYXJzZV9tb2RlbF9mcm9tX2pzb24gOiBmdW5jdGlvbiAoZCwgcCwgcHMpIHtcblx0XHRcdGlmKCFwcykgeyBwcyA9IFtdOyB9XG5cdFx0XHRlbHNlIHsgcHMgPSBwcy5jb25jYXQoKTsgfVxuXHRcdFx0aWYocCkgeyBwcy51bnNoaWZ0KHApOyB9XG5cdFx0XHR2YXIgdGlkID0gZmFsc2UsIGksIGosIGMsIGUsIG0gPSB0aGlzLl9tb2RlbC5kYXRhLCBkZiA9IHRoaXMuX21vZGVsLmRlZmF1bHRfc3RhdGUsIHRtcDtcblx0XHRcdGRvIHtcblx0XHRcdFx0dGlkID0gJ2onICsgdGhpcy5faWQgKyAnXycgKyAoKyt0aGlzLl9jbnQpO1xuXHRcdFx0fSB3aGlsZShtW3RpZF0pO1xuXG5cdFx0XHR0bXAgPSB7XG5cdFx0XHRcdGlkXHRcdFx0OiBmYWxzZSxcblx0XHRcdFx0dGV4dFx0XHQ6IHR5cGVvZiBkID09PSAnc3RyaW5nJyA/IGQgOiAnJyxcblx0XHRcdFx0aWNvblx0XHQ6IHR5cGVvZiBkID09PSAnb2JqZWN0JyAmJiBkLmljb24gIT09IHVuZGVmaW5lZCA/IGQuaWNvbiA6IHRydWUsXG5cdFx0XHRcdHBhcmVudFx0XHQ6IHAsXG5cdFx0XHRcdHBhcmVudHNcdFx0OiBwcyxcblx0XHRcdFx0Y2hpbGRyZW5cdDogW10sXG5cdFx0XHRcdGNoaWxkcmVuX2RcdDogW10sXG5cdFx0XHRcdGRhdGFcdFx0OiBudWxsLFxuXHRcdFx0XHRzdGF0ZVx0XHQ6IHsgfSxcblx0XHRcdFx0bGlfYXR0clx0XHQ6IHsgaWQgOiBmYWxzZSB9LFxuXHRcdFx0XHRhX2F0dHJcdFx0OiB7IGhyZWYgOiAnIycgfSxcblx0XHRcdFx0b3JpZ2luYWxcdDogZmFsc2Vcblx0XHRcdH07XG5cdFx0XHRmb3IoaSBpbiBkZikge1xuXHRcdFx0XHRpZihkZi5oYXNPd25Qcm9wZXJ0eShpKSkge1xuXHRcdFx0XHRcdHRtcC5zdGF0ZVtpXSA9IGRmW2ldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZihkICYmIGQuaWQpIHsgdG1wLmlkID0gZC5pZDsgfVxuXHRcdFx0aWYoZCAmJiBkLnRleHQpIHsgdG1wLnRleHQgPSBkLnRleHQ7IH1cblx0XHRcdGlmKGQgJiYgZC5kYXRhICYmIGQuZGF0YS5qc3RyZWUgJiYgZC5kYXRhLmpzdHJlZS5pY29uKSB7XG5cdFx0XHRcdHRtcC5pY29uID0gZC5kYXRhLmpzdHJlZS5pY29uO1xuXHRcdFx0fVxuXHRcdFx0aWYoZCAmJiBkLmRhdGEpIHtcblx0XHRcdFx0dG1wLmRhdGEgPSBkLmRhdGE7XG5cdFx0XHRcdGlmKGQuZGF0YS5qc3RyZWUpIHtcblx0XHRcdFx0XHRmb3IoaSBpbiBkLmRhdGEuanN0cmVlKSB7XG5cdFx0XHRcdFx0XHRpZihkLmRhdGEuanN0cmVlLmhhc093blByb3BlcnR5KGkpKSB7XG5cdFx0XHRcdFx0XHRcdHRtcC5zdGF0ZVtpXSA9IGQuZGF0YS5qc3RyZWVbaV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZihkICYmIHR5cGVvZiBkLnN0YXRlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRmb3IgKGkgaW4gZC5zdGF0ZSkge1xuXHRcdFx0XHRcdGlmKGQuc3RhdGUuaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0XHRcdHRtcC5zdGF0ZVtpXSA9IGQuc3RhdGVbaV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZihkICYmIHR5cGVvZiBkLmxpX2F0dHIgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGZvciAoaSBpbiBkLmxpX2F0dHIpIHtcblx0XHRcdFx0XHRpZihkLmxpX2F0dHIuaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0XHRcdHRtcC5saV9hdHRyW2ldID0gZC5saV9hdHRyW2ldO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYodG1wLmxpX2F0dHIuaWQgJiYgIXRtcC5pZCkge1xuXHRcdFx0XHR0bXAuaWQgPSB0bXAubGlfYXR0ci5pZDtcblx0XHRcdH1cblx0XHRcdGlmKCF0bXAuaWQpIHtcblx0XHRcdFx0dG1wLmlkID0gdGlkO1xuXHRcdFx0fVxuXHRcdFx0aWYoIXRtcC5saV9hdHRyLmlkKSB7XG5cdFx0XHRcdHRtcC5saV9hdHRyLmlkID0gdG1wLmlkO1xuXHRcdFx0fVxuXHRcdFx0aWYoZCAmJiB0eXBlb2YgZC5hX2F0dHIgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGZvciAoaSBpbiBkLmFfYXR0cikge1xuXHRcdFx0XHRcdGlmKGQuYV9hdHRyLmhhc093blByb3BlcnR5KGkpKSB7XG5cdFx0XHRcdFx0XHR0bXAuYV9hdHRyW2ldID0gZC5hX2F0dHJbaV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZihkICYmIGQuY2hpbGRyZW4gJiYgZC5jaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gZC5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0XHRjID0gdGhpcy5fcGFyc2VfbW9kZWxfZnJvbV9qc29uKGQuY2hpbGRyZW5baV0sIHRtcC5pZCwgcHMpO1xuXHRcdFx0XHRcdGUgPSBtW2NdO1xuXHRcdFx0XHRcdHRtcC5jaGlsZHJlbi5wdXNoKGMpO1xuXHRcdFx0XHRcdGlmKGUuY2hpbGRyZW5fZC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHRtcC5jaGlsZHJlbl9kID0gdG1wLmNoaWxkcmVuX2QuY29uY2F0KGUuY2hpbGRyZW5fZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRtcC5jaGlsZHJlbl9kID0gdG1wLmNoaWxkcmVuX2QuY29uY2F0KHRtcC5jaGlsZHJlbik7XG5cdFx0XHR9XG5cdFx0XHRpZihkICYmIGQuY2hpbGRyZW4gJiYgZC5jaGlsZHJlbiA9PT0gdHJ1ZSkge1xuXHRcdFx0XHR0bXAuc3RhdGUubG9hZGVkID0gZmFsc2U7XG5cdFx0XHRcdHRtcC5jaGlsZHJlbiA9IFtdO1xuXHRcdFx0XHR0bXAuY2hpbGRyZW5fZCA9IFtdO1xuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIGQuZGF0YTtcblx0XHRcdGRlbGV0ZSBkLmNoaWxkcmVuO1xuXHRcdFx0dG1wLm9yaWdpbmFsID0gZDtcblx0XHRcdG1bdG1wLmlkXSA9IHRtcDtcblx0XHRcdGlmKHRtcC5zdGF0ZS5zZWxlY3RlZCkge1xuXHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQucHVzaCh0bXAuaWQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRtcC5pZDtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIHJlZHJhd3MgYWxsIG5vZGVzIHRoYXQgbmVlZCB0byBiZSByZWRyYXduLiBVc2VkIGludGVybmFsbHkuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAbmFtZSBfcmVkcmF3KClcblx0XHQgKiBAdHJpZ2dlciByZWRyYXcuanN0cmVlXG5cdFx0ICovXG5cdFx0X3JlZHJhdyA6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBub2RlcyA9IHRoaXMuX21vZGVsLmZvcmNlX2Z1bGxfcmVkcmF3ID8gdGhpcy5fbW9kZWwuZGF0YVsnIyddLmNoaWxkcmVuLmNvbmNhdChbXSkgOiB0aGlzLl9tb2RlbC5jaGFuZ2VkLmNvbmNhdChbXSksXG5cdFx0XHRcdGYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdVTCcpLCB0bXAsIGksIGo7XG5cdFx0XHRmb3IoaSA9IDAsIGogPSBub2Rlcy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0dG1wID0gdGhpcy5yZWRyYXdfbm9kZShub2Rlc1tpXSwgdHJ1ZSwgdGhpcy5fbW9kZWwuZm9yY2VfZnVsbF9yZWRyYXcpO1xuXHRcdFx0XHRpZih0bXAgJiYgdGhpcy5fbW9kZWwuZm9yY2VfZnVsbF9yZWRyYXcpIHtcblx0XHRcdFx0XHRmLmFwcGVuZENoaWxkKHRtcCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmKHRoaXMuX21vZGVsLmZvcmNlX2Z1bGxfcmVkcmF3KSB7XG5cdFx0XHRcdGYuY2xhc3NOYW1lID0gdGhpcy5nZXRfY29udGFpbmVyX3VsKClbMF0uY2xhc3NOYW1lO1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuZW1wdHkoKS5hcHBlbmQoZik7XG5cdFx0XHRcdC8vdGhpcy5nZXRfY29udGFpbmVyX3VsKClbMF0uYXBwZW5kQ2hpbGQoZik7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9tb2RlbC5mb3JjZV9mdWxsX3JlZHJhdyA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fbW9kZWwuY2hhbmdlZCA9IFtdO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiB0cmlnZ2VyZWQgYWZ0ZXIgbm9kZXMgYXJlIHJlZHJhd25cblx0XHRcdCAqIEBldmVudFxuXHRcdFx0ICogQG5hbWUgcmVkcmF3LmpzdHJlZVxuXHRcdFx0ICogQHBhcmFtIHthcnJheX0gbm9kZXMgdGhlIHJlZHJhd24gbm9kZXNcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmlnZ2VyKCdyZWRyYXcnLCB7IFwibm9kZXNcIiA6IG5vZGVzIH0pO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogcmVkcmF3cyBhbGwgbm9kZXMgdGhhdCBuZWVkIHRvIGJlIHJlZHJhd24gb3Igb3B0aW9uYWxseSAtIHRoZSB3aG9sZSB0cmVlXG5cdFx0ICogQG5hbWUgcmVkcmF3KFtmdWxsXSlcblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IGZ1bGwgaWYgc2V0IHRvIGB0cnVlYCBhbGwgbm9kZXMgYXJlIHJlZHJhd24uXG5cdFx0ICovXG5cdFx0cmVkcmF3IDogZnVuY3Rpb24gKGZ1bGwpIHtcblx0XHRcdGlmKGZ1bGwpIHtcblx0XHRcdFx0dGhpcy5fbW9kZWwuZm9yY2VfZnVsbF9yZWRyYXcgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0Ly9pZih0aGlzLl9tb2RlbC5yZWRyYXdfdGltZW91dCkge1xuXHRcdFx0Ly9cdGNsZWFyVGltZW91dCh0aGlzLl9tb2RlbC5yZWRyYXdfdGltZW91dCk7XG5cdFx0XHQvL31cblx0XHRcdC8vdGhpcy5fbW9kZWwucmVkcmF3X3RpbWVvdXQgPSBzZXRUaW1lb3V0KCQucHJveHkodGhpcy5fcmVkcmF3LCB0aGlzKSwwKTtcblx0XHRcdHRoaXMuX3JlZHJhdygpO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogcmVkcmF3cyBhIHNpbmdsZSBub2RlLiBVc2VkIGludGVybmFsbHkuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAbmFtZSByZWRyYXdfbm9kZShub2RlLCBkZWVwLCBpc19jYWxsYmFjaylcblx0XHQgKiBAcGFyYW0ge21peGVkfSBub2RlIHRoZSBub2RlIHRvIHJlZHJhd1xuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gZGVlcCBzaG91bGQgY2hpbGQgbm9kZXMgYmUgcmVkcmF3biB0b29cblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IGlzX2NhbGxiYWNrIGlzIHRoaXMgYSByZWN1cnNpb24gY2FsbFxuXHRcdCAqL1xuXHRcdHJlZHJhd19ub2RlIDogZnVuY3Rpb24gKG5vZGUsIGRlZXAsIGlzX2NhbGxiYWNrKSB7XG5cdFx0XHR2YXIgb2JqID0gdGhpcy5nZXRfbm9kZShub2RlKSxcblx0XHRcdFx0cGFyID0gZmFsc2UsXG5cdFx0XHRcdGluZCA9IGZhbHNlLFxuXHRcdFx0XHRvbGQgPSBmYWxzZSxcblx0XHRcdFx0aSA9IGZhbHNlLFxuXHRcdFx0XHRqID0gZmFsc2UsXG5cdFx0XHRcdGsgPSBmYWxzZSxcblx0XHRcdFx0YyA9ICcnLFxuXHRcdFx0XHRkID0gZG9jdW1lbnQsXG5cdFx0XHRcdG0gPSB0aGlzLl9tb2RlbC5kYXRhLFxuXHRcdFx0XHRmID0gZmFsc2UsXG5cdFx0XHRcdHMgPSBmYWxzZTtcblx0XHRcdGlmKCFvYmopIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XHRpZihvYmouaWQgPT09ICcjJykgeyAgcmV0dXJuIHRoaXMucmVkcmF3KHRydWUpOyB9XG5cdFx0XHRkZWVwID0gZGVlcCB8fCBvYmouY2hpbGRyZW4ubGVuZ3RoID09PSAwO1xuXHRcdFx0bm9kZSA9IGQuZ2V0RWxlbWVudEJ5SWQob2JqLmlkKTsgLy8sIHRoaXMuZWxlbWVudCk7XG5cdFx0XHRpZighbm9kZSkge1xuXHRcdFx0XHRkZWVwID0gdHJ1ZTtcblx0XHRcdFx0Ly9ub2RlID0gZC5jcmVhdGVFbGVtZW50KCdMSScpO1xuXHRcdFx0XHRpZighaXNfY2FsbGJhY2spIHtcblx0XHRcdFx0XHRwYXIgPSBvYmoucGFyZW50ICE9PSAnIycgPyAkKCcjJyArIG9iai5wYXJlbnQsIHRoaXMuZWxlbWVudClbMF0gOiBudWxsO1xuXHRcdFx0XHRcdGlmKHBhciAhPT0gbnVsbCAmJiAoIXBhciB8fCAhbVtvYmoucGFyZW50XS5zdGF0ZS5vcGVuZWQpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGluZCA9ICQuaW5BcnJheShvYmouaWQsIHBhciA9PT0gbnVsbCA/IG1bJyMnXS5jaGlsZHJlbiA6IG1bb2JqLnBhcmVudF0uY2hpbGRyZW4pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0bm9kZSA9ICQobm9kZSk7XG5cdFx0XHRcdGlmKCFpc19jYWxsYmFjaykge1xuXHRcdFx0XHRcdHBhciA9IG5vZGUucGFyZW50KCkucGFyZW50KClbMF07XG5cdFx0XHRcdFx0aWYocGFyID09PSB0aGlzLmVsZW1lbnRbMF0pIHtcblx0XHRcdFx0XHRcdHBhciA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGluZCA9IG5vZGUuaW5kZXgoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBtW29iai5pZF0uZGF0YSA9IG5vZGUuZGF0YSgpOyAvLyB1c2Ugb25seSBub2RlJ3MgZGF0YSwgbm8gbmVlZCB0byB0b3VjaCBqcXVlcnkgc3RvcmFnZVxuXHRcdFx0XHRpZighZGVlcCAmJiBvYmouY2hpbGRyZW4ubGVuZ3RoICYmICFub2RlLmNoaWxkcmVuKCd1bCcpLmxlbmd0aCkge1xuXHRcdFx0XHRcdGRlZXAgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKCFkZWVwKSB7XG5cdFx0XHRcdFx0b2xkID0gbm9kZS5jaGlsZHJlbignVUwnKVswXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzID0gbm9kZS5hdHRyKCdhcmlhLXNlbGVjdGVkJyk7XG5cdFx0XHRcdGYgPSBub2RlLmNoaWxkcmVuKCcuanN0cmVlLWFuY2hvcicpWzBdID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXHRcdFx0XHRub2RlLnJlbW92ZSgpO1xuXHRcdFx0XHQvL25vZGUgPSBkLmNyZWF0ZUVsZW1lbnQoJ0xJJyk7XG5cdFx0XHRcdC8vbm9kZSA9IG5vZGVbMF07XG5cdFx0XHR9XG5cdFx0XHRub2RlID0gX25vZGUuY2xvbmVOb2RlKHRydWUpO1xuXHRcdFx0Ly8gbm9kZSBpcyBET00sIGRlZXAgaXMgYm9vbGVhblxuXG5cdFx0XHRjID0gJ2pzdHJlZS1ub2RlICc7XG5cdFx0XHRmb3IoaSBpbiBvYmoubGlfYXR0cikge1xuXHRcdFx0XHRpZihvYmoubGlfYXR0ci5oYXNPd25Qcm9wZXJ0eShpKSkge1xuXHRcdFx0XHRcdGlmKGkgPT09ICdpZCcpIHsgY29udGludWU7IH1cblx0XHRcdFx0XHRpZihpICE9PSAnY2xhc3MnKSB7XG5cdFx0XHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZShpLCBvYmoubGlfYXR0cltpXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0YyArPSBvYmoubGlfYXR0cltpXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmKHMgJiYgcyAhPT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZighb2JqLmNoaWxkcmVuLmxlbmd0aCAmJiBvYmouc3RhdGUubG9hZGVkKSB7XG5cdFx0XHRcdGMgKz0gJyBqc3RyZWUtbGVhZic7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0YyArPSBvYmouc3RhdGUub3BlbmVkID8gJyBqc3RyZWUtb3BlbicgOiAnIGpzdHJlZS1jbG9zZWQnO1xuXHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIG9iai5zdGF0ZS5vcGVuZWQpO1xuXHRcdFx0fVxuXHRcdFx0aWYob2JqLnBhcmVudCAhPT0gbnVsbCAmJiBtW29iai5wYXJlbnRdLmNoaWxkcmVuW21bb2JqLnBhcmVudF0uY2hpbGRyZW4ubGVuZ3RoIC0gMV0gPT09IG9iai5pZCkge1xuXHRcdFx0XHRjICs9ICcganN0cmVlLWxhc3QnO1xuXHRcdFx0fVxuXHRcdFx0bm9kZS5pZCA9IG9iai5pZDtcblx0XHRcdG5vZGUuY2xhc3NOYW1lID0gYztcblx0XHRcdGMgPSAoIG9iai5zdGF0ZS5zZWxlY3RlZCA/ICcganN0cmVlLWNsaWNrZWQnIDogJycpICsgKCBvYmouc3RhdGUuZGlzYWJsZWQgPyAnIGpzdHJlZS1kaXNhYmxlZCcgOiAnJyk7XG5cdFx0XHRmb3IoaiBpbiBvYmouYV9hdHRyKSB7XG5cdFx0XHRcdGlmKG9iai5hX2F0dHIuaGFzT3duUHJvcGVydHkoaikpIHtcblx0XHRcdFx0XHRpZihqID09PSAnaHJlZicgJiYgb2JqLmFfYXR0cltqXSA9PT0gJyMnKSB7IGNvbnRpbnVlOyB9XG5cdFx0XHRcdFx0aWYoaiAhPT0gJ2NsYXNzJykge1xuXHRcdFx0XHRcdFx0bm9kZS5jaGlsZE5vZGVzWzFdLnNldEF0dHJpYnV0ZShqLCBvYmouYV9hdHRyW2pdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRjICs9ICcgJyArIG9iai5hX2F0dHJbal07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZihjLmxlbmd0aCkge1xuXHRcdFx0XHRub2RlLmNoaWxkTm9kZXNbMV0uY2xhc3NOYW1lID0gJ2pzdHJlZS1hbmNob3IgJyArIGM7XG5cdFx0XHR9XG5cdFx0XHRpZigob2JqLmljb24gJiYgb2JqLmljb24gIT09IHRydWUpIHx8IG9iai5pY29uID09PSBmYWxzZSkge1xuXHRcdFx0XHRpZihvYmouaWNvbiA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRub2RlLmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5jbGFzc05hbWUgKz0gJyBqc3RyZWUtdGhlbWVpY29uLWhpZGRlbic7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZihvYmouaWNvbi5pbmRleE9mKCcvJykgPT09IC0xICYmIG9iai5pY29uLmluZGV4T2YoJy4nKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRub2RlLmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5jbGFzc05hbWUgKz0gJyAnICsgb2JqLmljb24gKyAnIGpzdHJlZS10aGVtZWljb24tY3VzdG9tJztcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRub2RlLmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSAndXJsKCcrb2JqLmljb24rJyknO1xuXHRcdFx0XHRcdG5vZGUuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbiA9ICdjZW50ZXIgY2VudGVyJztcblx0XHRcdFx0XHRub2RlLmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5zdHlsZS5iYWNrZ3JvdW5kU2l6ZSA9ICdhdXRvJztcblx0XHRcdFx0XHRub2RlLmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5jbGFzc05hbWUgKz0gJyBqc3RyZWUtdGhlbWVpY29uLWN1c3RvbSc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vbm9kZS5jaGlsZE5vZGVzWzFdLmFwcGVuZENoaWxkKGQuY3JlYXRlVGV4dE5vZGUob2JqLnRleHQpKTtcblx0XHRcdG5vZGUuY2hpbGROb2Rlc1sxXS5pbm5lckhUTUwgKz0gb2JqLnRleHQ7XG5cdFx0XHQvLyBpZihvYmouZGF0YSkgeyAkLmRhdGEobm9kZSwgb2JqLmRhdGEpOyB9IC8vIGFsd2F5cyB3b3JrIHdpdGggbm9kZSdzIGRhdGEsIG5vIG5lZWQgdG8gdG91Y2gganF1ZXJ5IHN0b3JlXG5cblx0XHRcdGlmKGRlZXAgJiYgb2JqLmNoaWxkcmVuLmxlbmd0aCAmJiBvYmouc3RhdGUub3BlbmVkKSB7XG5cdFx0XHRcdGsgPSBkLmNyZWF0ZUVsZW1lbnQoJ1VMJyk7XG5cdFx0XHRcdGsuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2dyb3VwJyk7XG5cdFx0XHRcdGsuY2xhc3NOYW1lID0gJ2pzdHJlZS1jaGlsZHJlbic7XG5cdFx0XHRcdGZvcihpID0gMCwgaiA9IG9iai5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0XHRrLmFwcGVuZENoaWxkKHRoaXMucmVkcmF3X25vZGUob2JqLmNoaWxkcmVuW2ldLCBkZWVwLCB0cnVlKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bm9kZS5hcHBlbmRDaGlsZChrKTtcblx0XHRcdH1cblx0XHRcdGlmKG9sZCkge1xuXHRcdFx0XHRub2RlLmFwcGVuZENoaWxkKG9sZCk7XG5cdFx0XHR9XG5cdFx0XHRpZighaXNfY2FsbGJhY2spIHtcblx0XHRcdFx0Ly8gYXBwZW5kIGJhY2sgdXNpbmcgcGFyIC8gaW5kXG5cdFx0XHRcdGlmKCFwYXIpIHtcblx0XHRcdFx0XHRwYXIgPSB0aGlzLmVsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoIXBhci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnVUwnKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRpID0gZC5jcmVhdGVFbGVtZW50KCdVTCcpO1xuXHRcdFx0XHRcdGkuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2dyb3VwJyk7XG5cdFx0XHRcdFx0aS5jbGFzc05hbWUgPSAnanN0cmVlLWNoaWxkcmVuJztcblx0XHRcdFx0XHRwYXIuYXBwZW5kQ2hpbGQoaSk7XG5cdFx0XHRcdFx0cGFyID0gaTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRwYXIgPSBwYXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ1VMJylbMF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihpbmQgPCBwYXIuY2hpbGROb2Rlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRwYXIuaW5zZXJ0QmVmb3JlKG5vZGUsIHBhci5jaGlsZE5vZGVzW2luZF0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHBhci5hcHBlbmRDaGlsZChub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihmKSB7XG5cdFx0XHRcdFx0bm9kZS5jaGlsZE5vZGVzWzFdLmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBub2RlO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogb3BlbnMgYSBub2RlLCByZXZhbGluZyBpdHMgY2hpbGRyZW4uIElmIHRoZSBub2RlIGlzIG5vdCBsb2FkZWQgaXQgd2lsbCBiZSBsb2FkZWQgYW5kIG9wZW5lZCBvbmNlIHJlYWR5LlxuXHRcdCAqIEBuYW1lIG9wZW5fbm9kZShvYmogWywgY2FsbGJhY2ssIGFuaW1hdGlvbl0pXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gb2JqIHRoZSBub2RlIHRvIG9wZW5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgbm9kZSBpcyBvcGVuZWRcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gYW5pbWF0aW9uIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIHdoZW4gb3BlbmluZyB0aGUgbm9kZSAob3ZlcnJpZGVzIHRoZSBgY29yZS5hbmltYXRpb25gIHNldHRpbmcpLiBVc2UgYGZhbHNlYCBmb3Igbm8gYW5pbWF0aW9uLlxuXHRcdCAqIEB0cmlnZ2VyIG9wZW5fbm9kZS5qc3RyZWUsIGFmdGVyX29wZW4uanN0cmVlXG5cdFx0ICovXG5cdFx0b3Blbl9ub2RlIDogZnVuY3Rpb24gKG9iaiwgY2FsbGJhY2ssIGFuaW1hdGlvbikge1xuXHRcdFx0dmFyIHQxLCB0MiwgZCwgdDtcblx0XHRcdGlmKCQuaXNBcnJheShvYmopKSB7XG5cdFx0XHRcdG9iaiA9IG9iai5zbGljZSgpO1xuXHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IG9iai5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcblx0XHRcdFx0XHR0aGlzLm9wZW5fbm9kZShvYmpbdDFdLCBjYWxsYmFjaywgYW5pbWF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdGlmKCFvYmogfHwgb2JqLmlkID09PSAnIycpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0YW5pbWF0aW9uID0gYW5pbWF0aW9uID09PSB1bmRlZmluZWQgPyB0aGlzLnNldHRpbmdzLmNvcmUuYW5pbWF0aW9uIDogYW5pbWF0aW9uO1xuXHRcdFx0aWYoIXRoaXMuaXNfY2xvc2VkKG9iaikpIHtcblx0XHRcdFx0aWYoY2FsbGJhY2spIHtcblx0XHRcdFx0XHRjYWxsYmFjay5jYWxsKHRoaXMsIG9iaiwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmKCF0aGlzLmlzX2xvYWRlZChvYmopKSB7XG5cdFx0XHRcdGlmKHRoaXMuaXNfbG9hZGluZyhvYmopKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldFRpbWVvdXQoJC5wcm94eShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5fbm9kZShvYmosIGNhbGxiYWNrLCBhbmltYXRpb24pO1xuXHRcdFx0XHRcdH0sIHRoaXMpLCA1MDApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMubG9hZF9ub2RlKG9iaiwgZnVuY3Rpb24gKG8sIG9rKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9rID8gdGhpcy5vcGVuX25vZGUobywgY2FsbGJhY2ssIGFuaW1hdGlvbikgOiAoY2FsbGJhY2sgPyBjYWxsYmFjay5jYWxsKHRoaXMsIG8sIGZhbHNlKSA6IGZhbHNlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0ZCA9IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKTtcblx0XHRcdFx0dCA9IHRoaXM7XG5cdFx0XHRcdGlmKGQubGVuZ3RoKSB7XG5cdFx0XHRcdFx0aWYob2JqLmNoaWxkcmVuLmxlbmd0aCAmJiAhdGhpcy5fZmlyc3RDaGlsZChkLmNoaWxkcmVuKCd1bCcpWzBdKSkge1xuXHRcdFx0XHRcdFx0b2JqLnN0YXRlLm9wZW5lZCA9IHRydWU7XG5cdFx0XHRcdFx0XHR0aGlzLnJlZHJhd19ub2RlKG9iaiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRkID0gdGhpcy5nZXRfbm9kZShvYmosIHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZighYW5pbWF0aW9uKSB7XG5cdFx0XHRcdFx0XHRkWzBdLmNsYXNzTmFtZSA9IGRbMF0uY2xhc3NOYW1lLnJlcGxhY2UoJ2pzdHJlZS1jbG9zZWQnLCAnanN0cmVlLW9wZW4nKTtcblx0XHRcdFx0XHRcdGRbMF0uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCB0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRkXG5cdFx0XHRcdFx0XHRcdC5jaGlsZHJlbihcInVsXCIpLmNzcyhcImRpc3BsYXlcIixcIm5vbmVcIikuZW5kKClcblx0XHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKFwianN0cmVlLWNsb3NlZFwiKS5hZGRDbGFzcyhcImpzdHJlZS1vcGVuXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsIHRydWUpXG5cdFx0XHRcdFx0XHRcdC5jaGlsZHJlbihcInVsXCIpLnN0b3AodHJ1ZSwgdHJ1ZSlcblx0XHRcdFx0XHRcdFx0XHQuc2xpZGVEb3duKGFuaW1hdGlvbiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0XHRcdHQudHJpZ2dlcihcImFmdGVyX29wZW5cIiwgeyBcIm5vZGVcIiA6IG9iaiB9KTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0b2JqLnN0YXRlLm9wZW5lZCA9IHRydWU7XG5cdFx0XHRcdGlmKGNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2suY2FsbCh0aGlzLCBvYmosIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhIG5vZGUgaXMgb3BlbmVkIChpZiB0aGVyZSBpcyBhbiBhbmltYXRpb24gaXQgd2lsbCBub3QgYmUgY29tcGxldGVkIHlldClcblx0XHRcdFx0ICogQGV2ZW50XG5cdFx0XHRcdCAqIEBuYW1lIG9wZW5fbm9kZS5qc3RyZWVcblx0XHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGUgdGhlIG9wZW5lZCBub2RlXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHR0aGlzLnRyaWdnZXIoJ29wZW5fbm9kZScsIHsgXCJub2RlXCIgOiBvYmogfSk7XG5cdFx0XHRcdGlmKCFhbmltYXRpb24gfHwgIWQubGVuZ3RoKSB7XG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0ICogdHJpZ2dlcmVkIHdoZW4gYSBub2RlIGlzIG9wZW5lZCBhbmQgdGhlIGFuaW1hdGlvbiBpcyBjb21wbGV0ZVxuXHRcdFx0XHRcdCAqIEBldmVudFxuXHRcdFx0XHRcdCAqIEBuYW1lIGFmdGVyX29wZW4uanN0cmVlXG5cdFx0XHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGUgdGhlIG9wZW5lZCBub2RlXG5cdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0dGhpcy50cmlnZ2VyKFwiYWZ0ZXJfb3BlblwiLCB7IFwibm9kZVwiIDogb2JqIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBvcGVucyBldmVyeSBwYXJlbnQgb2YgYSBub2RlIChub2RlIHNob3VsZCBiZSBsb2FkZWQpXG5cdFx0ICogQG5hbWUgX29wZW5fdG8ob2JqKVxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG9iaiB0aGUgbm9kZSB0byByZXZlYWxcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdF9vcGVuX3RvIDogZnVuY3Rpb24gKG9iaikge1xuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xuXHRcdFx0aWYoIW9iaiB8fCBvYmouaWQgPT09ICcjJykge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR2YXIgaSwgaiwgcCA9IG9iai5wYXJlbnRzO1xuXHRcdFx0Zm9yKGkgPSAwLCBqID0gcC5sZW5ndGg7IGkgPCBqOyBpKz0xKSB7XG5cdFx0XHRcdGlmKGkgIT09ICcjJykge1xuXHRcdFx0XHRcdHRoaXMub3Blbl9ub2RlKHBbaV0sIGZhbHNlLCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuICQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob2JqLmlkKSk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBjbG9zZXMgYSBub2RlLCBoaWRpbmcgaXRzIGNoaWxkcmVuXG5cdFx0ICogQG5hbWUgY2xvc2Vfbm9kZShvYmogWywgYW5pbWF0aW9uXSlcblx0XHQgKiBAcGFyYW0ge21peGVkfSBvYmogdGhlIG5vZGUgdG8gY2xvc2Vcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gYW5pbWF0aW9uIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIHdoZW4gY2xvc2luZyB0aGUgbm9kZSAob3ZlcnJpZGVzIHRoZSBgY29yZS5hbmltYXRpb25gIHNldHRpbmcpLiBVc2UgYGZhbHNlYCBmb3Igbm8gYW5pbWF0aW9uLlxuXHRcdCAqIEB0cmlnZ2VyIGNsb3NlX25vZGUuanN0cmVlLCBhZnRlcl9jbG9zZS5qc3RyZWVcblx0XHQgKi9cblx0XHRjbG9zZV9ub2RlIDogZnVuY3Rpb24gKG9iaiwgYW5pbWF0aW9uKSB7XG5cdFx0XHR2YXIgdDEsIHQyLCB0LCBkO1xuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcblx0XHRcdFx0b2JqID0gb2JqLnNsaWNlKCk7XG5cdFx0XHRcdGZvcih0MSA9IDAsIHQyID0gb2JqLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xuXHRcdFx0XHRcdHRoaXMuY2xvc2Vfbm9kZShvYmpbdDFdLCBhbmltYXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xuXHRcdFx0aWYoIW9iaiB8fCBvYmouaWQgPT09ICcjJykge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRhbmltYXRpb24gPSBhbmltYXRpb24gPT09IHVuZGVmaW5lZCA/IHRoaXMuc2V0dGluZ3MuY29yZS5hbmltYXRpb24gOiBhbmltYXRpb247XG5cdFx0XHR0ID0gdGhpcztcblx0XHRcdGQgPSB0aGlzLmdldF9ub2RlKG9iaiwgdHJ1ZSk7XG5cdFx0XHRpZihkLmxlbmd0aCkge1xuXHRcdFx0XHRpZighYW5pbWF0aW9uKSB7XG5cdFx0XHRcdFx0ZFswXS5jbGFzc05hbWUgPSBkWzBdLmNsYXNzTmFtZS5yZXBsYWNlKCdqc3RyZWUtb3BlbicsICdqc3RyZWUtY2xvc2VkJyk7XG5cdFx0XHRcdFx0ZC5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCBmYWxzZSkuY2hpbGRyZW4oJ3VsJykucmVtb3ZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0ZFxuXHRcdFx0XHRcdFx0LmNoaWxkcmVuKFwidWxcIikuYXR0cihcInN0eWxlXCIsXCJkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnRcIikuZW5kKClcblx0XHRcdFx0XHRcdC5yZW1vdmVDbGFzcyhcImpzdHJlZS1vcGVuXCIpLmFkZENsYXNzKFwianN0cmVlLWNsb3NlZFwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCBmYWxzZSlcblx0XHRcdFx0XHRcdC5jaGlsZHJlbihcInVsXCIpLnN0b3AodHJ1ZSwgdHJ1ZSkuc2xpZGVVcChhbmltYXRpb24sIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0ZC5jaGlsZHJlbigndWwnKS5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdFx0dC50cmlnZ2VyKFwiYWZ0ZXJfY2xvc2VcIiwgeyBcIm5vZGVcIiA6IG9iaiB9KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRvYmouc3RhdGUub3BlbmVkID0gZmFsc2U7XG5cdFx0XHQvKipcblx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIGEgbm9kZSBpcyBjbG9zZWQgKGlmIHRoZXJlIGlzIGFuIGFuaW1hdGlvbiBpdCB3aWxsIG5vdCBiZSBjb21wbGV0ZSB5ZXQpXG5cdFx0XHQgKiBAZXZlbnRcblx0XHRcdCAqIEBuYW1lIGNsb3NlX25vZGUuanN0cmVlXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZSB0aGUgY2xvc2VkIG5vZGVcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmlnZ2VyKCdjbG9zZV9ub2RlJyx7IFwibm9kZVwiIDogb2JqIH0pO1xuXHRcdFx0aWYoIWFuaW1hdGlvbiB8fCAhZC5sZW5ndGgpIHtcblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIGEgbm9kZSBpcyBjbG9zZWQgYW5kIHRoZSBhbmltYXRpb24gaXMgY29tcGxldGVcblx0XHRcdFx0ICogQGV2ZW50XG5cdFx0XHRcdCAqIEBuYW1lIGFmdGVyX2Nsb3NlLmpzdHJlZVxuXHRcdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZSB0aGUgY2xvc2VkIG5vZGVcblx0XHRcdFx0ICovXG5cdFx0XHRcdHRoaXMudHJpZ2dlcihcImFmdGVyX2Nsb3NlXCIsIHsgXCJub2RlXCIgOiBvYmogfSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiB0b2dnbGVzIGEgbm9kZSAtIGNsb3NpbmcgaXQgaWYgaXQgaXMgb3Blbiwgb3BlbmluZyBpdCBpZiBpdCBpcyBjbG9zZWRcblx0XHQgKiBAbmFtZSB0b2dnbGVfbm9kZShvYmopXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gb2JqIHRoZSBub2RlIHRvIHRvZ2dsZVxuXHRcdCAqL1xuXHRcdHRvZ2dsZV9ub2RlIDogZnVuY3Rpb24gKG9iaikge1xuXHRcdFx0dmFyIHQxLCB0Mjtcblx0XHRcdGlmKCQuaXNBcnJheShvYmopKSB7XG5cdFx0XHRcdG9iaiA9IG9iai5zbGljZSgpO1xuXHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IG9iai5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcblx0XHRcdFx0XHR0aGlzLnRvZ2dsZV9ub2RlKG9ialt0MV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYodGhpcy5pc19jbG9zZWQob2JqKSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5vcGVuX25vZGUob2JqKTtcblx0XHRcdH1cblx0XHRcdGlmKHRoaXMuaXNfb3BlbihvYmopKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb3NlX25vZGUob2JqKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIG9wZW5zIGFsbCBub2RlcyB3aXRoaW4gYSBub2RlIChvciB0aGUgdHJlZSksIHJldmFsaW5nIHRoZWlyIGNoaWxkcmVuLiBJZiB0aGUgbm9kZSBpcyBub3QgbG9hZGVkIGl0IHdpbGwgYmUgbG9hZGVkIGFuZCBvcGVuZWQgb25jZSByZWFkeS5cblx0XHQgKiBAbmFtZSBvcGVuX2FsbChbb2JqLCBhbmltYXRpb24sIG9yaWdpbmFsX29ial0pXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gb2JqIHRoZSBub2RlIHRvIG9wZW4gcmVjdXJzaXZlbHksIG9taXQgdG8gb3BlbiBhbGwgbm9kZXMgaW4gdGhlIHRyZWVcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gYW5pbWF0aW9uIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIHdoZW4gb3BlbmluZyB0aGUgbm9kZXMsIHRoZSBkZWZhdWx0IGlzIG5vIGFuaW1hdGlvblxuXHRcdCAqIEBwYXJhbSB7alF1ZXJ5fSByZWZlcmVuY2UgdG8gdGhlIG5vZGUgdGhhdCBzdGFydGVkIHRoZSBwcm9jZXNzIChpbnRlcm5hbCB1c2UpXG5cdFx0ICogQHRyaWdnZXIgb3Blbl9hbGwuanN0cmVlXG5cdFx0ICovXG5cdFx0b3Blbl9hbGwgOiBmdW5jdGlvbiAob2JqLCBhbmltYXRpb24sIG9yaWdpbmFsX29iaikge1xuXHRcdFx0aWYoIW9iaikgeyBvYmogPSAnIyc7IH1cblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdGlmKCFvYmopIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XHR2YXIgZG9tID0gb2JqLmlkID09PSAnIycgPyB0aGlzLmdldF9jb250YWluZXJfdWwoKSA6IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKSwgaSwgaiwgX3RoaXM7XG5cdFx0XHRpZighZG9tLmxlbmd0aCkge1xuXHRcdFx0XHRmb3IoaSA9IDAsIGogPSBvYmouY2hpbGRyZW5fZC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0XHRpZih0aGlzLmlzX2Nsb3NlZCh0aGlzLl9tb2RlbC5kYXRhW29iai5jaGlsZHJlbl9kW2ldXSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuX21vZGVsLmRhdGFbb2JqLmNoaWxkcmVuX2RbaV1dLnN0YXRlLm9wZW5lZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzLnRyaWdnZXIoJ29wZW5fYWxsJywgeyBcIm5vZGVcIiA6IG9iaiB9KTtcblx0XHRcdH1cblx0XHRcdG9yaWdpbmFsX29iaiA9IG9yaWdpbmFsX29iaiB8fCBkb207XG5cdFx0XHRfdGhpcyA9IHRoaXM7XG5cdFx0XHRkb20gPSB0aGlzLmlzX2Nsb3NlZChvYmopID8gZG9tLmZpbmQoJ2xpLmpzdHJlZS1jbG9zZWQnKS5hZGRCYWNrKCkgOiBkb20uZmluZCgnbGkuanN0cmVlLWNsb3NlZCcpO1xuXHRcdFx0ZG9tLmVhY2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRfdGhpcy5vcGVuX25vZGUoXG5cdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRmdW5jdGlvbihub2RlLCBzdGF0dXMpIHsgaWYoc3RhdHVzICYmIHRoaXMuaXNfcGFyZW50KG5vZGUpKSB7IHRoaXMub3Blbl9hbGwobm9kZSwgYW5pbWF0aW9uLCBvcmlnaW5hbF9vYmopOyB9IH0sXG5cdFx0XHRcdFx0YW5pbWF0aW9uIHx8IDBcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdFx0aWYob3JpZ2luYWxfb2JqLmZpbmQoJ2xpLmpzdHJlZS1jbG9zZWQnKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIGFuIGBvcGVuX2FsbGAgY2FsbCBjb21wbGV0ZXNcblx0XHRcdFx0ICogQGV2ZW50XG5cdFx0XHRcdCAqIEBuYW1lIG9wZW5fYWxsLmpzdHJlZVxuXHRcdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZSB0aGUgb3BlbmVkIG5vZGVcblx0XHRcdFx0ICovXG5cdFx0XHRcdHRoaXMudHJpZ2dlcignb3Blbl9hbGwnLCB7IFwibm9kZVwiIDogdGhpcy5nZXRfbm9kZShvcmlnaW5hbF9vYmopIH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogY2xvc2VzIGFsbCBub2RlcyB3aXRoaW4gYSBub2RlIChvciB0aGUgdHJlZSksIHJldmFsaW5nIHRoZWlyIGNoaWxkcmVuXG5cdFx0ICogQG5hbWUgY2xvc2VfYWxsKFtvYmosIGFuaW1hdGlvbl0pXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gb2JqIHRoZSBub2RlIHRvIGNsb3NlIHJlY3Vyc2l2ZWx5LCBvbWl0IHRvIGNsb3NlIGFsbCBub2RlcyBpbiB0aGUgdHJlZVxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSBhbmltYXRpb24gdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgd2hlbiBjbG9zaW5nIHRoZSBub2RlcywgdGhlIGRlZmF1bHQgaXMgbm8gYW5pbWF0aW9uXG5cdFx0ICogQHRyaWdnZXIgY2xvc2VfYWxsLmpzdHJlZVxuXHRcdCAqL1xuXHRcdGNsb3NlX2FsbCA6IGZ1bmN0aW9uIChvYmosIGFuaW1hdGlvbikge1xuXHRcdFx0aWYoIW9iaikgeyBvYmogPSAnIyc7IH1cblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdGlmKCFvYmopIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XHR2YXIgZG9tID0gb2JqLmlkID09PSAnIycgPyB0aGlzLmdldF9jb250YWluZXJfdWwoKSA6IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKSxcblx0XHRcdFx0X3RoaXMgPSB0aGlzLCBpLCBqO1xuXHRcdFx0aWYoIWRvbS5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gb2JqLmNoaWxkcmVuX2QubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdFx0dGhpcy5fbW9kZWwuZGF0YVtvYmouY2hpbGRyZW5fZFtpXV0uc3RhdGUub3BlbmVkID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXMudHJpZ2dlcignY2xvc2VfYWxsJywgeyBcIm5vZGVcIiA6IG9iaiB9KTtcblx0XHRcdH1cblx0XHRcdGRvbSA9IHRoaXMuaXNfb3BlbihvYmopID8gZG9tLmZpbmQoJ2xpLmpzdHJlZS1vcGVuJykuYWRkQmFjaygpIDogZG9tLmZpbmQoJ2xpLmpzdHJlZS1vcGVuJyk7XG5cdFx0XHRkb20udmFrYXRhX3JldmVyc2UoKS5lYWNoKGZ1bmN0aW9uICgpIHsgX3RoaXMuY2xvc2Vfbm9kZSh0aGlzLCBhbmltYXRpb24gfHwgMCk7IH0pO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhbiBgY2xvc2VfYWxsYCBjYWxsIGNvbXBsZXRlc1xuXHRcdFx0ICogQGV2ZW50XG5cdFx0XHQgKiBAbmFtZSBjbG9zZV9hbGwuanN0cmVlXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZSB0aGUgY2xvc2VkIG5vZGVcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmlnZ2VyKCdjbG9zZV9hbGwnLCB7IFwibm9kZVwiIDogb2JqIH0pO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogY2hlY2tzIGlmIGEgbm9kZSBpcyBkaXNhYmxlZCAobm90IHNlbGVjdGFibGUpXG5cdFx0ICogQG5hbWUgaXNfZGlzYWJsZWQob2JqKVxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmpcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxuXHRcdCAqL1xuXHRcdGlzX2Rpc2FibGVkIDogZnVuY3Rpb24gKG9iaikge1xuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xuXHRcdFx0cmV0dXJuIG9iaiAmJiBvYmouc3RhdGUgJiYgb2JqLnN0YXRlLmRpc2FibGVkO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogZW5hYmxlcyBhIG5vZGUgLSBzbyB0aGF0IGl0IGNhbiBiZSBzZWxlY3RlZFxuXHRcdCAqIEBuYW1lIGVuYWJsZV9ub2RlKG9iailcblx0XHQgKiBAcGFyYW0ge21peGVkfSBvYmogdGhlIG5vZGUgdG8gZW5hYmxlXG5cdFx0ICogQHRyaWdnZXIgZW5hYmxlX25vZGUuanN0cmVlXG5cdFx0ICovXG5cdFx0ZW5hYmxlX25vZGUgOiBmdW5jdGlvbiAob2JqKSB7XG5cdFx0XHR2YXIgdDEsIHQyO1xuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcblx0XHRcdFx0b2JqID0gb2JqLnNsaWNlKCk7XG5cdFx0XHRcdGZvcih0MSA9IDAsIHQyID0gb2JqLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xuXHRcdFx0XHRcdHRoaXMuZW5hYmxlX25vZGUob2JqW3QxXSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XG5cdFx0XHRpZighb2JqIHx8IG9iai5pZCA9PT0gJyMnKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdG9iai5zdGF0ZS5kaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5nZXRfbm9kZShvYmosdHJ1ZSkuY2hpbGRyZW4oJy5qc3RyZWUtYW5jaG9yJykucmVtb3ZlQ2xhc3MoJ2pzdHJlZS1kaXNhYmxlZCcpO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhbiBub2RlIGlzIGVuYWJsZWRcblx0XHRcdCAqIEBldmVudFxuXHRcdFx0ICogQG5hbWUgZW5hYmxlX25vZGUuanN0cmVlXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZSB0aGUgZW5hYmxlZCBub2RlXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMudHJpZ2dlcignZW5hYmxlX25vZGUnLCB7ICdub2RlJyA6IG9iaiB9KTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIGRpc2FibGVzIGEgbm9kZSAtIHNvIHRoYXQgaXQgY2FuIG5vdCBiZSBzZWxlY3RlZFxuXHRcdCAqIEBuYW1lIGRpc2FibGVfbm9kZShvYmopXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gb2JqIHRoZSBub2RlIHRvIGRpc2FibGVcblx0XHQgKiBAdHJpZ2dlciBkaXNhYmxlX25vZGUuanN0cmVlXG5cdFx0ICovXG5cdFx0ZGlzYWJsZV9ub2RlIDogZnVuY3Rpb24gKG9iaikge1xuXHRcdFx0dmFyIHQxLCB0Mjtcblx0XHRcdGlmKCQuaXNBcnJheShvYmopKSB7XG5cdFx0XHRcdG9iaiA9IG9iai5zbGljZSgpO1xuXHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IG9iai5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcblx0XHRcdFx0XHR0aGlzLmRpc2FibGVfbm9kZShvYmpbdDFdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdGlmKCFvYmogfHwgb2JqLmlkID09PSAnIycpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0b2JqLnN0YXRlLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdHRoaXMuZ2V0X25vZGUob2JqLHRydWUpLmNoaWxkcmVuKCcuanN0cmVlLWFuY2hvcicpLmFkZENsYXNzKCdqc3RyZWUtZGlzYWJsZWQnKTtcblx0XHRcdC8qKlxuXHRcdFx0ICogdHJpZ2dlcmVkIHdoZW4gYW4gbm9kZSBpcyBkaXNhYmxlZFxuXHRcdFx0ICogQGV2ZW50XG5cdFx0XHQgKiBAbmFtZSBkaXNhYmxlX25vZGUuanN0cmVlXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZSB0aGUgZGlzYWJsZWQgbm9kZVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnRyaWdnZXIoJ2Rpc2FibGVfbm9kZScsIHsgJ25vZGUnIDogb2JqIH0pO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogY2FsbGVkIHdoZW4gYSBub2RlIGlzIHNlbGVjdGVkIGJ5IHRoZSB1c2VyLiBVc2VkIGludGVybmFsbHkuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAbmFtZSBhY3RpdmF0ZV9ub2RlKG9iaiwgZSlcblx0XHQgKiBAcGFyYW0ge21peGVkfSBvYmogdGhlIG5vZGVcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gZSB0aGUgcmVsYXRlZCBldmVudFxuXHRcdCAqIEB0cmlnZ2VyIGFjdGl2YXRlX25vZGUuanN0cmVlXG5cdFx0ICovXG5cdFx0YWN0aXZhdGVfbm9kZSA6IGZ1bmN0aW9uIChvYmosIGUpIHtcblx0XHRcdGlmKHRoaXMuaXNfZGlzYWJsZWQob2JqKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpZighdGhpcy5zZXR0aW5ncy5jb3JlLm11bHRpcGxlIHx8ICghZS5tZXRhS2V5ICYmICFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkpIHx8IChlLnNoaWZ0S2V5ICYmICghdGhpcy5fZGF0YS5jb3JlLmxhc3RfY2xpY2tlZCB8fCAhdGhpcy5nZXRfcGFyZW50KG9iaikgfHwgdGhpcy5nZXRfcGFyZW50KG9iaikgIT09IHRoaXMuX2RhdGEuY29yZS5sYXN0X2NsaWNrZWQucGFyZW50ICkgKSkge1xuXHRcdFx0XHRpZighdGhpcy5zZXR0aW5ncy5jb3JlLm11bHRpcGxlICYmIChlLm1ldGFLZXkgfHwgZS5jdHJsS2V5IHx8IGUuc2hpZnRLZXkpICYmIHRoaXMuaXNfc2VsZWN0ZWQob2JqKSkge1xuXHRcdFx0XHRcdHRoaXMuZGVzZWxlY3Rfbm9kZShvYmosIGZhbHNlLCBmYWxzZSwgZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5kZXNlbGVjdF9hbGwodHJ1ZSk7XG5cdFx0XHRcdFx0dGhpcy5zZWxlY3Rfbm9kZShvYmosIGZhbHNlLCBmYWxzZSwgZSk7XG5cdFx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLmxhc3RfY2xpY2tlZCA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGlmKGUuc2hpZnRLZXkpIHtcblx0XHRcdFx0XHR2YXIgbyA9IHRoaXMuZ2V0X25vZGUob2JqKS5pZCxcblx0XHRcdFx0XHRcdGwgPSB0aGlzLl9kYXRhLmNvcmUubGFzdF9jbGlja2VkLmlkLFxuXHRcdFx0XHRcdFx0cCA9IHRoaXMuZ2V0X25vZGUodGhpcy5fZGF0YS5jb3JlLmxhc3RfY2xpY2tlZC5wYXJlbnQpLmNoaWxkcmVuLFxuXHRcdFx0XHRcdFx0YyA9IGZhbHNlLFxuXHRcdFx0XHRcdFx0aSwgajtcblx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSBwLmxlbmd0aDsgaSA8IGo7IGkgKz0gMSkge1xuXHRcdFx0XHRcdFx0Ly8gc2VwYXJhdGUgSUZzIHdvcmsgd2hlbSBvIGFuZCBsIGFyZSB0aGUgc2FtZVxuXHRcdFx0XHRcdFx0aWYocFtpXSA9PT0gbykge1xuXHRcdFx0XHRcdFx0XHRjID0gIWM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihwW2ldID09PSBsKSB7XG5cdFx0XHRcdFx0XHRcdGMgPSAhYztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmKGMgfHwgcFtpXSA9PT0gbyB8fCBwW2ldID09PSBsKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0X25vZGUocFtpXSwgZmFsc2UsIGZhbHNlLCBlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmRlc2VsZWN0X25vZGUocFtpXSwgZmFsc2UsIGZhbHNlLCBlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0aWYoIXRoaXMuaXNfc2VsZWN0ZWQob2JqKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3Rfbm9kZShvYmosIGZhbHNlLCBmYWxzZSwgZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5kZXNlbGVjdF9ub2RlKG9iaiwgZmFsc2UsIGZhbHNlLCBlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8qKlxuXHRcdFx0ICogdHJpZ2dlcmVkIHdoZW4gYW4gbm9kZSBpcyBjbGlja2VkIG9yIGludGVyY2F0ZWQgd2l0aCBieSB0aGUgdXNlclxuXHRcdFx0ICogQGV2ZW50XG5cdFx0XHQgKiBAbmFtZSBhY3RpdmF0ZV9ub2RlLmpzdHJlZVxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGVcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmlnZ2VyKCdhY3RpdmF0ZV9ub2RlJywgeyAnbm9kZScgOiB0aGlzLmdldF9ub2RlKG9iaikgfSk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBhcHBsaWVzIHRoZSBob3ZlciBzdGF0ZSBvbiBhIG5vZGUsIGNhbGxlZCB3aGVuIGEgbm9kZSBpcyBob3ZlcmVkIGJ5IHRoZSB1c2VyLiBVc2VkIGludGVybmFsbHkuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAbmFtZSBob3Zlcl9ub2RlKG9iailcblx0XHQgKiBAcGFyYW0ge21peGVkfSBvYmpcblx0XHQgKiBAdHJpZ2dlciBob3Zlcl9ub2RlLmpzdHJlZVxuXHRcdCAqL1xuXHRcdGhvdmVyX25vZGUgOiBmdW5jdGlvbiAob2JqKSB7XG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaiwgdHJ1ZSk7XG5cdFx0XHRpZighb2JqIHx8ICFvYmoubGVuZ3RoIHx8IG9iai5jaGlsZHJlbignLmpzdHJlZS1ob3ZlcmVkJykubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHZhciBvID0gdGhpcy5lbGVtZW50LmZpbmQoJy5qc3RyZWUtaG92ZXJlZCcpLCB0ID0gdGhpcy5lbGVtZW50O1xuXHRcdFx0aWYobyAmJiBvLmxlbmd0aCkgeyB0aGlzLmRlaG92ZXJfbm9kZShvKTsgfVxuXG5cdFx0XHRvYmouY2hpbGRyZW4oJy5qc3RyZWUtYW5jaG9yJykuYWRkQ2xhc3MoJ2pzdHJlZS1ob3ZlcmVkJyk7XG5cdFx0XHQvKipcblx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIGFuIG5vZGUgaXMgaG92ZXJlZFxuXHRcdFx0ICogQGV2ZW50XG5cdFx0XHQgKiBAbmFtZSBob3Zlcl9ub2RlLmpzdHJlZVxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGVcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmlnZ2VyKCdob3Zlcl9ub2RlJywgeyAnbm9kZScgOiB0aGlzLmdldF9ub2RlKG9iaikgfSk7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdC5hdHRyKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBvYmpbMF0uaWQpOyBvYmouYXR0cignYXJpYS1zZWxlY3RlZCcsIHRydWUpOyB9LCAwKTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIHJlbW92ZXMgdGhlIGhvdmVyIHN0YXRlIGZyb20gYSBub2RlY2FsbGVkIHdoZW4gYSBub2RlIGlzIG5vIGxvbmdlciBob3ZlcmVkIGJ5IHRoZSB1c2VyLiBVc2VkIGludGVybmFsbHkuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAbmFtZSBkZWhvdmVyX25vZGUob2JqKVxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG9ialxuXHRcdCAqIEB0cmlnZ2VyIGRlaG92ZXJfbm9kZS5qc3RyZWVcblx0XHQgKi9cblx0XHRkZWhvdmVyX25vZGUgOiBmdW5jdGlvbiAob2JqKSB7XG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaiwgdHJ1ZSk7XG5cdFx0XHRpZighb2JqIHx8ICFvYmoubGVuZ3RoIHx8ICFvYmouY2hpbGRyZW4oJy5qc3RyZWUtaG92ZXJlZCcpLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRvYmouYXR0cignYXJpYS1zZWxlY3RlZCcsIGZhbHNlKS5jaGlsZHJlbignLmpzdHJlZS1hbmNob3InKS5yZW1vdmVDbGFzcygnanN0cmVlLWhvdmVyZWQnKTtcblx0XHRcdC8qKlxuXHRcdFx0ICogdHJpZ2dlcmVkIHdoZW4gYW4gbm9kZSBpcyBubyBsb25nZXIgaG92ZXJlZFxuXHRcdFx0ICogQGV2ZW50XG5cdFx0XHQgKiBAbmFtZSBkZWhvdmVyX25vZGUuanN0cmVlXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnRyaWdnZXIoJ2RlaG92ZXJfbm9kZScsIHsgJ25vZGUnIDogdGhpcy5nZXRfbm9kZShvYmopIH0pO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogc2VsZWN0IGEgbm9kZVxuXHRcdCAqIEBuYW1lIHNlbGVjdF9ub2RlKG9iaiBbLCBzdXByZXNzX2V2ZW50LCBwcmV2ZW50X29wZW5dKVxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG9iaiBhbiBhcnJheSBjYW4gYmUgdXNlZCB0byBzZWxlY3QgbXVsdGlwbGUgbm9kZXNcblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IHN1cHJlc3NfZXZlbnQgaWYgc2V0IHRvIGB0cnVlYCB0aGUgYGNoYW5nZWQuanN0cmVlYCBldmVudCB3b24ndCBiZSB0cmlnZ2VyZWRcblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IHByZXZlbnRfb3BlbiBpZiBzZXQgdG8gYHRydWVgIHBhcmVudHMgb2YgdGhlIHNlbGVjdGVkIG5vZGUgd29uJ3QgYmUgb3BlbmVkXG5cdFx0ICogQHRyaWdnZXIgc2VsZWN0X25vZGUuanN0cmVlLCBjaGFuZ2VkLmpzdHJlZVxuXHRcdCAqL1xuXHRcdHNlbGVjdF9ub2RlIDogZnVuY3Rpb24gKG9iaiwgc3VwcmVzc19ldmVudCwgcHJldmVudF9vcGVuLCBlKSB7XG5cdFx0XHR2YXIgZG9tLCB0MSwgdDIsIHRoO1xuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcblx0XHRcdFx0b2JqID0gb2JqLnNsaWNlKCk7XG5cdFx0XHRcdGZvcih0MSA9IDAsIHQyID0gb2JqLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xuXHRcdFx0XHRcdHRoaXMuc2VsZWN0X25vZGUob2JqW3QxXSwgc3VwcmVzc19ldmVudCwgcHJldmVudF9vcGVuLCBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdGlmKCFvYmogfHwgb2JqLmlkID09PSAnIycpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0ZG9tID0gdGhpcy5nZXRfbm9kZShvYmosIHRydWUpO1xuXHRcdFx0aWYoIW9iai5zdGF0ZS5zZWxlY3RlZCkge1xuXHRcdFx0XHRvYmouc3RhdGUuc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQucHVzaChvYmouaWQpO1xuXHRcdFx0XHRpZighcHJldmVudF9vcGVuKSB7XG5cdFx0XHRcdFx0ZG9tID0gdGhpcy5fb3Blbl90byhvYmopO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGRvbSAmJiBkb20ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZG9tLmNoaWxkcmVuKCcuanN0cmVlLWFuY2hvcicpLmFkZENsYXNzKCdqc3RyZWUtY2xpY2tlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhbiBub2RlIGlzIHNlbGVjdGVkXG5cdFx0XHRcdCAqIEBldmVudFxuXHRcdFx0XHQgKiBAbmFtZSBzZWxlY3Rfbm9kZS5qc3RyZWVcblx0XHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGVcblx0XHRcdFx0ICogQHBhcmFtIHtBcnJheX0gc2VsZWN0ZWQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG5cdFx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCB0aGUgZXZlbnQgKGlmIGFueSkgdGhhdCB0cmlnZ2VyZWQgdGhpcyBzZWxlY3Rfbm9kZVxuXHRcdFx0XHQgKi9cblx0XHRcdFx0dGhpcy50cmlnZ2VyKCdzZWxlY3Rfbm9kZScsIHsgJ25vZGUnIDogb2JqLCAnc2VsZWN0ZWQnIDogdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLCAnZXZlbnQnIDogZSB9KTtcblx0XHRcdFx0aWYoIXN1cHJlc3NfZXZlbnQpIHtcblx0XHRcdFx0XHQvKipcblx0XHRcdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBzZWxlY3Rpb24gY2hhbmdlc1xuXHRcdFx0XHRcdCAqIEBldmVudFxuXHRcdFx0XHRcdCAqIEBuYW1lIGNoYW5nZWQuanN0cmVlXG5cdFx0XHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGVcblx0XHRcdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIHRoZSBhY3Rpb24gdGhhdCBjYXVzZWQgdGhlIHNlbGVjdGlvbiB0byBjaGFuZ2Vcblx0XHRcdFx0XHQgKiBAcGFyYW0ge0FycmF5fSBzZWxlY3RlZCB0aGUgY3VycmVudCBzZWxlY3Rpb25cblx0XHRcdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQgdGhlIGV2ZW50IChpZiBhbnkpIHRoYXQgdHJpZ2dlcmVkIHRoaXMgY2hhbmdlZCBldmVudFxuXHRcdFx0XHRcdCAqL1xuXHRcdFx0XHRcdHRoaXMudHJpZ2dlcignY2hhbmdlZCcsIHsgJ2FjdGlvbicgOiAnc2VsZWN0X25vZGUnLCAnbm9kZScgOiBvYmosICdzZWxlY3RlZCcgOiB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsICdldmVudCcgOiBlIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBkZXNlbGVjdCBhIG5vZGVcblx0XHQgKiBAbmFtZSBkZXNlbGVjdF9ub2RlKG9iaiBbLCBzdXByZXNzX2V2ZW50XSlcblx0XHQgKiBAcGFyYW0ge21peGVkfSBvYmogYW4gYXJyYXkgY2FuIGJlIHVzZWQgdG8gZGVzZWxlY3QgbXVsdGlwbGUgbm9kZXNcblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IHN1cHJlc3NfZXZlbnQgaWYgc2V0IHRvIGB0cnVlYCB0aGUgYGNoYW5nZWQuanN0cmVlYCBldmVudCB3b24ndCBiZSB0cmlnZ2VyZWRcblx0XHQgKiBAdHJpZ2dlciBkZXNlbGVjdF9ub2RlLmpzdHJlZSwgY2hhbmdlZC5qc3RyZWVcblx0XHQgKi9cblx0XHRkZXNlbGVjdF9ub2RlIDogZnVuY3Rpb24gKG9iaiwgc3VwcmVzc19ldmVudCwgZSkge1xuXHRcdFx0dmFyIHQxLCB0MiwgZG9tO1xuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcblx0XHRcdFx0b2JqID0gb2JqLnNsaWNlKCk7XG5cdFx0XHRcdGZvcih0MSA9IDAsIHQyID0gb2JqLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xuXHRcdFx0XHRcdHRoaXMuZGVzZWxlY3Rfbm9kZShvYmpbdDFdLCBzdXByZXNzX2V2ZW50LCBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdGlmKCFvYmogfHwgb2JqLmlkID09PSAnIycpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0ZG9tID0gdGhpcy5nZXRfbm9kZShvYmosIHRydWUpO1xuXHRcdFx0aWYob2JqLnN0YXRlLnNlbGVjdGVkKSB7XG5cdFx0XHRcdG9iai5zdGF0ZS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQgPSAkLnZha2F0YS5hcnJheV9yZW1vdmVfaXRlbSh0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsIG9iai5pZCk7XG5cdFx0XHRcdGlmKGRvbS5sZW5ndGgpIHtcblx0XHRcdFx0XHRkb20uY2hpbGRyZW4oJy5qc3RyZWUtYW5jaG9yJykucmVtb3ZlQ2xhc3MoJ2pzdHJlZS1jbGlja2VkJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIGFuIG5vZGUgaXMgZGVzZWxlY3RlZFxuXHRcdFx0XHQgKiBAZXZlbnRcblx0XHRcdFx0ICogQG5hbWUgZGVzZWxlY3Rfbm9kZS5qc3RyZWVcblx0XHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGVcblx0XHRcdFx0ICogQHBhcmFtIHtBcnJheX0gc2VsZWN0ZWQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG5cdFx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCB0aGUgZXZlbnQgKGlmIGFueSkgdGhhdCB0cmlnZ2VyZWQgdGhpcyBkZXNlbGVjdF9ub2RlXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHR0aGlzLnRyaWdnZXIoJ2Rlc2VsZWN0X25vZGUnLCB7ICdub2RlJyA6IG9iaiwgJ3NlbGVjdGVkJyA6IHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCwgJ2V2ZW50JyA6IGUgfSk7XG5cdFx0XHRcdGlmKCFzdXByZXNzX2V2ZW50KSB7XG5cdFx0XHRcdFx0dGhpcy50cmlnZ2VyKCdjaGFuZ2VkJywgeyAnYWN0aW9uJyA6ICdkZXNlbGVjdF9ub2RlJywgJ25vZGUnIDogb2JqLCAnc2VsZWN0ZWQnIDogdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLCAnZXZlbnQnIDogZSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogc2VsZWN0IGFsbCBub2RlcyBpbiB0aGUgdHJlZVxuXHRcdCAqIEBuYW1lIHNlbGVjdF9hbGwoW3N1cHJlc3NfZXZlbnRdKVxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gc3VwcmVzc19ldmVudCBpZiBzZXQgdG8gYHRydWVgIHRoZSBgY2hhbmdlZC5qc3RyZWVgIGV2ZW50IHdvbid0IGJlIHRyaWdnZXJlZFxuXHRcdCAqIEB0cmlnZ2VyIHNlbGVjdF9hbGwuanN0cmVlLCBjaGFuZ2VkLmpzdHJlZVxuXHRcdCAqL1xuXHRcdHNlbGVjdF9hbGwgOiBmdW5jdGlvbiAoc3VwcmVzc19ldmVudCkge1xuXHRcdFx0dmFyIHRtcCA9IHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5jb25jYXQoW10pLCBpLCBqO1xuXHRcdFx0dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkID0gdGhpcy5fbW9kZWwuZGF0YVsnIyddLmNoaWxkcmVuX2QuY29uY2F0KCk7XG5cdFx0XHRmb3IoaSA9IDAsIGogPSB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdGlmKHRoaXMuX21vZGVsLmRhdGFbdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkW2ldXSkge1xuXHRcdFx0XHRcdHRoaXMuX21vZGVsLmRhdGFbdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkW2ldXS5zdGF0ZS5zZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMucmVkcmF3KHRydWUpO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhbGwgbm9kZXMgYXJlIHNlbGVjdGVkXG5cdFx0XHQgKiBAZXZlbnRcblx0XHRcdCAqIEBuYW1lIHNlbGVjdF9hbGwuanN0cmVlXG5cdFx0XHQgKiBAcGFyYW0ge0FycmF5fSBzZWxlY3RlZCB0aGUgY3VycmVudCBzZWxlY3Rpb25cblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmlnZ2VyKCdzZWxlY3RfYWxsJywgeyAnc2VsZWN0ZWQnIDogdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkIH0pO1xuXHRcdFx0aWYoIXN1cHJlc3NfZXZlbnQpIHtcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCdjaGFuZ2VkJywgeyAnYWN0aW9uJyA6ICdzZWxlY3RfYWxsJywgJ3NlbGVjdGVkJyA6IHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCwgJ29sZF9zZWxlY3Rpb24nIDogdG1wIH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogZGVzZWxlY3QgYWxsIHNlbGVjdGVkIG5vZGVzXG5cdFx0ICogQG5hbWUgZGVzZWxlY3RfYWxsKFtzdXByZXNzX2V2ZW50XSlcblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IHN1cHJlc3NfZXZlbnQgaWYgc2V0IHRvIGB0cnVlYCB0aGUgYGNoYW5nZWQuanN0cmVlYCBldmVudCB3b24ndCBiZSB0cmlnZ2VyZWRcblx0XHQgKiBAdHJpZ2dlciBkZXNlbGVjdF9hbGwuanN0cmVlLCBjaGFuZ2VkLmpzdHJlZVxuXHRcdCAqL1xuXHRcdGRlc2VsZWN0X2FsbCA6IGZ1bmN0aW9uIChzdXByZXNzX2V2ZW50KSB7XG5cdFx0XHR2YXIgdG1wID0gdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmNvbmNhdChbXSksIGksIGo7XG5cdFx0XHRmb3IoaSA9IDAsIGogPSB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdGlmKHRoaXMuX21vZGVsLmRhdGFbdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkW2ldXSkge1xuXHRcdFx0XHRcdHRoaXMuX21vZGVsLmRhdGFbdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkW2ldXS5zdGF0ZS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQgPSBbXTtcblx0XHRcdHRoaXMuZWxlbWVudC5maW5kKCcuanN0cmVlLWNsaWNrZWQnKS5yZW1vdmVDbGFzcygnanN0cmVlLWNsaWNrZWQnKTtcblx0XHRcdC8qKlxuXHRcdFx0ICogdHJpZ2dlcmVkIHdoZW4gYWxsIG5vZGVzIGFyZSBkZXNlbGVjdGVkXG5cdFx0XHQgKiBAZXZlbnRcblx0XHRcdCAqIEBuYW1lIGRlc2VsZWN0X2FsbC5qc3RyZWVcblx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBub2RlIHRoZSBwcmV2aW91cyBzZWxlY3Rpb25cblx0XHRcdCAqIEBwYXJhbSB7QXJyYXl9IHNlbGVjdGVkIHRoZSBjdXJyZW50IHNlbGVjdGlvblxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnRyaWdnZXIoJ2Rlc2VsZWN0X2FsbCcsIHsgJ3NlbGVjdGVkJyA6IHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCwgJ25vZGUnIDogdG1wIH0pO1xuXHRcdFx0aWYoIXN1cHJlc3NfZXZlbnQpIHtcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCdjaGFuZ2VkJywgeyAnYWN0aW9uJyA6ICdkZXNlbGVjdF9hbGwnLCAnc2VsZWN0ZWQnIDogdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLCAnb2xkX3NlbGVjdGlvbicgOiB0bXAgfSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBjaGVja3MgaWYgYSBub2RlIGlzIHNlbGVjdGVkXG5cdFx0ICogQG5hbWUgaXNfc2VsZWN0ZWQob2JqKVxuXHRcdCAqIEBwYXJhbSAge21peGVkfSAgb2JqXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0XHQgKi9cblx0XHRpc19zZWxlY3RlZCA6IGZ1bmN0aW9uIChvYmopIHtcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdGlmKCFvYmogfHwgb2JqLmlkID09PSAnIycpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG9iai5zdGF0ZS5zZWxlY3RlZDtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIGdldCBhbiBhcnJheSBvZiBhbGwgc2VsZWN0ZWQgbm9kZSBJRHNcblx0XHQgKiBAbmFtZSBnZXRfc2VsZWN0ZWQoW2Z1bGxdKVxuXHRcdCAqIEBwYXJhbSAge21peGVkfSAgZnVsbCBpZiBzZXQgdG8gYHRydWVgIHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGNvbnNpc3Qgb2YgdGhlIGZ1bGwgbm9kZSBvYmplY3RzLCBvdGhlcndpc2UgLSBvbmx5IElEcyB3aWxsIGJlIHJldHVybmVkXG5cdFx0ICogQHJldHVybiB7QXJyYXl9XG5cdFx0ICovXG5cdFx0Z2V0X3NlbGVjdGVkIDogZnVuY3Rpb24gKGZ1bGwpIHtcblx0XHRcdHJldHVybiBmdWxsID8gJC5tYXAodGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLCAkLnByb3h5KGZ1bmN0aW9uIChpKSB7IHJldHVybiB0aGlzLmdldF9ub2RlKGkpOyB9LCB0aGlzKSkgOiB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQ7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBnZXRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0cmVlIHNvIHRoYXQgaXQgY2FuIGJlIHJlc3RvcmVkIGxhdGVyIHdpdGggYHNldF9zdGF0ZShzdGF0ZSlgLiBVc2VkIGludGVybmFsbHkuXG5cdFx0ICogQG5hbWUgZ2V0X3N0YXRlKClcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEByZXR1cm4ge09iamVjdH1cblx0XHQgKi9cblx0XHRnZXRfc3RhdGUgOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgc3RhdGVcdD0ge1xuXHRcdFx0XHQnY29yZScgOiB7XG5cdFx0XHRcdFx0J29wZW4nIDogW10sXG5cdFx0XHRcdFx0J3Njcm9sbCcgOiB7XG5cdFx0XHRcdFx0XHQnbGVmdCcgOiB0aGlzLmVsZW1lbnQuc2Nyb2xsTGVmdCgpLFxuXHRcdFx0XHRcdFx0J3RvcCcgOiB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wKClcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdC8qIVxuXHRcdFx0XHRcdCd0aGVtZXMnIDoge1xuXHRcdFx0XHRcdFx0J25hbWUnIDogdGhpcy5nZXRfdGhlbWUoKSxcblx0XHRcdFx0XHRcdCdpY29ucycgOiB0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmljb25zLFxuXHRcdFx0XHRcdFx0J2RvdHMnIDogdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5kb3RzXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQqL1xuXHRcdFx0XHRcdCdzZWxlY3RlZCcgOiBbXVxuXHRcdFx0XHR9XG5cdFx0XHR9LCBpO1xuXHRcdFx0Zm9yKGkgaW4gdGhpcy5fbW9kZWwuZGF0YSkge1xuXHRcdFx0XHRpZih0aGlzLl9tb2RlbC5kYXRhLmhhc093blByb3BlcnR5KGkpKSB7XG5cdFx0XHRcdFx0aWYoaSAhPT0gJyMnKSB7XG5cdFx0XHRcdFx0XHRpZih0aGlzLl9tb2RlbC5kYXRhW2ldLnN0YXRlLm9wZW5lZCkge1xuXHRcdFx0XHRcdFx0XHRzdGF0ZS5jb3JlLm9wZW4ucHVzaChpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmKHRoaXMuX21vZGVsLmRhdGFbaV0uc3RhdGUuc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdFx0c3RhdGUuY29yZS5zZWxlY3RlZC5wdXNoKGkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogc2V0cyB0aGUgc3RhdGUgb2YgdGhlIHRyZWUuIFVzZWQgaW50ZXJuYWxseS5cblx0XHQgKiBAbmFtZSBzZXRfc3RhdGUoc3RhdGUgWywgY2FsbGJhY2tdKVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIHRoZSBzdGF0ZSB0byByZXN0b3JlXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYW4gb3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBzdGF0ZSBpcyByZXN0b3JlZC5cblx0XHQgKiBAdHJpZ2dlciBzZXRfc3RhdGUuanN0cmVlXG5cdFx0ICovXG5cdFx0c2V0X3N0YXRlIDogZnVuY3Rpb24gKHN0YXRlLCBjYWxsYmFjaykge1xuXHRcdFx0aWYoc3RhdGUpIHtcblx0XHRcdFx0aWYoc3RhdGUuY29yZSkge1xuXHRcdFx0XHRcdHZhciByZXMsIG4sIHQsIF90aGlzO1xuXHRcdFx0XHRcdGlmKHN0YXRlLmNvcmUub3Blbikge1xuXHRcdFx0XHRcdFx0aWYoISQuaXNBcnJheShzdGF0ZS5jb3JlLm9wZW4pKSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBzdGF0ZS5jb3JlLm9wZW47XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2V0X3N0YXRlKHN0YXRlLCBjYWxsYmFjayk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJlcyA9IHRydWU7XG5cdFx0XHRcdFx0XHRuID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR0ID0gdGhpcztcblx0XHRcdFx0XHRcdCQuZWFjaChzdGF0ZS5jb3JlLm9wZW4uY29uY2F0KFtdKSwgZnVuY3Rpb24gKGksIHYpIHtcblx0XHRcdFx0XHRcdFx0biA9IHQuZ2V0X25vZGUodik7XG5cdFx0XHRcdFx0XHRcdGlmKG4pIHtcblx0XHRcdFx0XHRcdFx0XHRpZih0LmlzX2xvYWRlZCh2KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYodC5pc19jbG9zZWQodikpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dC5vcGVuX25vZGUodiwgZmFsc2UsIDApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYoc3RhdGUgJiYgc3RhdGUuY29yZSAmJiBzdGF0ZS5jb3JlLm9wZW4pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0JC52YWthdGEuYXJyYXlfcmVtb3ZlX2l0ZW0oc3RhdGUuY29yZS5vcGVuLCB2KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZighdC5pc19sb2FkaW5nKHYpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHQub3Blbl9ub2RlKHYsICQucHJveHkoZnVuY3Rpb24gKCkgeyB0aGlzLnNldF9zdGF0ZShzdGF0ZSwgY2FsbGJhY2spOyB9LCB0KSwgMCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyB0aGVyZSB3aWxsIGJlIHNvbWUgYXN5bmMgYWN0aXZpdHkgLSBzbyB3YWl0IGZvciBpdFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmKHJlcykge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgc3RhdGUuY29yZS5vcGVuO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNldF9zdGF0ZShzdGF0ZSwgY2FsbGJhY2spO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZihzdGF0ZS5jb3JlLnNjcm9sbCkge1xuXHRcdFx0XHRcdFx0aWYoc3RhdGUuY29yZS5zY3JvbGwgJiYgc3RhdGUuY29yZS5zY3JvbGwubGVmdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0KHN0YXRlLmNvcmUuc2Nyb2xsLmxlZnQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoc3RhdGUuY29yZS5zY3JvbGwgJiYgc3RhdGUuY29yZS5zY3JvbGwudG9wICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5lbGVtZW50LnNjcm9sbFRvcChzdGF0ZS5jb3JlLnNjcm9sbC50b3ApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZGVsZXRlIHN0YXRlLmNvcmUuc2Nyb2xsO1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRfc3RhdGUoc3RhdGUsIGNhbGxiYWNrKTtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LyohXG5cdFx0XHRcdFx0aWYoc3RhdGUuY29yZS50aGVtZXMpIHtcblx0XHRcdFx0XHRcdGlmKHN0YXRlLmNvcmUudGhlbWVzLm5hbWUpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zZXRfdGhlbWUoc3RhdGUuY29yZS50aGVtZXMubmFtZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZih0eXBlb2Ygc3RhdGUuY29yZS50aGVtZXMuZG90cyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0XHRcdFx0dGhpc1sgc3RhdGUuY29yZS50aGVtZXMuZG90cyA/IFwic2hvd19kb3RzXCIgOiBcImhpZGVfZG90c1wiIF0oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmKHR5cGVvZiBzdGF0ZS5jb3JlLnRoZW1lcy5pY29ucyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0XHRcdFx0dGhpc1sgc3RhdGUuY29yZS50aGVtZXMuaWNvbnMgPyBcInNob3dfaWNvbnNcIiA6IFwiaGlkZV9pY29uc1wiIF0oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGRlbGV0ZSBzdGF0ZS5jb3JlLnRoZW1lcztcblx0XHRcdFx0XHRcdGRlbGV0ZSBzdGF0ZS5jb3JlLm9wZW47XG5cdFx0XHRcdFx0XHR0aGlzLnNldF9zdGF0ZShzdGF0ZSwgY2FsbGJhY2spO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQqL1xuXHRcdFx0XHRcdGlmKHN0YXRlLmNvcmUuc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdF90aGlzID0gdGhpcztcblx0XHRcdFx0XHRcdHRoaXMuZGVzZWxlY3RfYWxsKCk7XG5cdFx0XHRcdFx0XHQkLmVhY2goc3RhdGUuY29yZS5zZWxlY3RlZCwgZnVuY3Rpb24gKGksIHYpIHtcblx0XHRcdFx0XHRcdFx0X3RoaXMuc2VsZWN0X25vZGUodik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGRlbGV0ZSBzdGF0ZS5jb3JlLnNlbGVjdGVkO1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRfc3RhdGUoc3RhdGUsIGNhbGxiYWNrKTtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYoJC5pc0VtcHR5T2JqZWN0KHN0YXRlLmNvcmUpKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgc3RhdGUuY29yZTtcblx0XHRcdFx0XHRcdHRoaXMuc2V0X3N0YXRlKHN0YXRlLCBjYWxsYmFjayk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKCQuaXNFbXB0eU9iamVjdChzdGF0ZSkpIHtcblx0XHRcdFx0XHRzdGF0ZSA9IG51bGw7XG5cdFx0XHRcdFx0aWYoY2FsbGJhY2spIHsgY2FsbGJhY2suY2FsbCh0aGlzKTsgfVxuXHRcdFx0XHRcdC8qKlxuXHRcdFx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIGEgYHNldF9zdGF0ZWAgY2FsbCBjb21wbGV0ZXNcblx0XHRcdFx0XHQgKiBAZXZlbnRcblx0XHRcdFx0XHQgKiBAbmFtZSBzZXRfc3RhdGUuanN0cmVlXG5cdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0dGhpcy50cmlnZ2VyKCdzZXRfc3RhdGUnKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiByZWZyZXNoZXMgdGhlIHRyZWUgLSBhbGwgbm9kZXMgYXJlIHJlbG9hZGVkIHdpdGggY2FsbHMgdG8gYGxvYWRfbm9kZWAuXG5cdFx0ICogQG5hbWUgcmVmcmVzaCgpXG5cdFx0ICogQHBhcmFtIHtCb29sZWFufSBza2lwX2xvYWRpbmcgYW4gb3B0aW9uIHRvIHNraXAgc2hvd2luZyB0aGUgbG9hZGluZyBpbmRpY2F0b3Jcblx0XHQgKiBAdHJpZ2dlciByZWZyZXNoLmpzdHJlZVxuXHRcdCAqL1xuXHRcdHJlZnJlc2ggOiBmdW5jdGlvbiAoc2tpcF9sb2FkaW5nKSB7XG5cdFx0XHR0aGlzLl9kYXRhLmNvcmUuc3RhdGUgPSB0aGlzLmdldF9zdGF0ZSgpO1xuXHRcdFx0dGhpcy5fY250ID0gMDtcblx0XHRcdHRoaXMuX21vZGVsLmRhdGEgPSB7XG5cdFx0XHRcdCcjJyA6IHtcblx0XHRcdFx0XHRpZCA6ICcjJyxcblx0XHRcdFx0XHRwYXJlbnQgOiBudWxsLFxuXHRcdFx0XHRcdHBhcmVudHMgOiBbXSxcblx0XHRcdFx0XHRjaGlsZHJlbiA6IFtdLFxuXHRcdFx0XHRcdGNoaWxkcmVuX2QgOiBbXSxcblx0XHRcdFx0XHRzdGF0ZSA6IHsgbG9hZGVkIDogZmFsc2UgfVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0dmFyIGMgPSB0aGlzLmdldF9jb250YWluZXJfdWwoKVswXS5jbGFzc05hbWU7XG5cdFx0XHRpZighc2tpcF9sb2FkaW5nKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5odG1sKFwiPFwiK1widWwgY2xhc3M9J2pzdHJlZS1jb250YWluZXItdWwnPjxcIitcImxpIGNsYXNzPSdqc3RyZWUtaW5pdGlhbC1ub2RlIGpzdHJlZS1sb2FkaW5nIGpzdHJlZS1sZWFmIGpzdHJlZS1sYXN0Jz48aSBjbGFzcz0nanN0cmVlLWljb24ganN0cmVlLW9jbCc+PC9pPjxcIitcImEgY2xhc3M9J2pzdHJlZS1hbmNob3InIGhyZWY9JyMnPjxpIGNsYXNzPSdqc3RyZWUtaWNvbiBqc3RyZWUtdGhlbWVpY29uLWhpZGRlbic+PC9pPlwiICsgdGhpcy5nZXRfc3RyaW5nKFwiTG9hZGluZyAuLi5cIikgKyBcIjwvYT48L2xpPjwvdWw+XCIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5sb2FkX25vZGUoJyMnLCBmdW5jdGlvbiAobywgcykge1xuXHRcdFx0XHRpZihzKSB7XG5cdFx0XHRcdFx0dGhpcy5nZXRfY29udGFpbmVyX3VsKClbMF0uY2xhc3NOYW1lID0gYztcblx0XHRcdFx0XHR0aGlzLnNldF9zdGF0ZSgkLmV4dGVuZCh0cnVlLCB7fSwgdGhpcy5fZGF0YS5jb3JlLnN0YXRlKSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhIGByZWZyZXNoYCBjYWxsIGNvbXBsZXRlc1xuXHRcdFx0XHRcdFx0ICogQGV2ZW50XG5cdFx0XHRcdFx0XHQgKiBAbmFtZSByZWZyZXNoLmpzdHJlZVxuXHRcdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0XHR0aGlzLnRyaWdnZXIoJ3JlZnJlc2gnKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc3RhdGUgPSBudWxsO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBzZXQgKGNoYW5nZSkgdGhlIElEIG9mIGEgbm9kZVxuXHRcdCAqIEBuYW1lIHNldF9pZChvYmosIGlkKVxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmogdGhlIG5vZGVcblx0XHQgKiBAcGFyYW0gIHtTdHJpbmd9IGlkIHRoZSBuZXcgSURcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxuXHRcdCAqL1xuXHRcdHNldF9pZCA6IGZ1bmN0aW9uIChvYmosIGlkKSB7XG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XG5cdFx0XHRpZighb2JqIHx8IG9iai5pZCA9PT0gJyMnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdFx0dmFyIGksIGosIG0gPSB0aGlzLl9tb2RlbC5kYXRhO1xuXHRcdFx0Ly8gdXBkYXRlIHBhcmVudHMgKHJlcGxhY2UgY3VycmVudCBJRCB3aXRoIG5ldyBvbmUgaW4gY2hpbGRyZW4gYW5kIGNoaWxkcmVuX2QpXG5cdFx0XHRtW29iai5wYXJlbnRdLmNoaWxkcmVuWyQuaW5BcnJheShvYmouaWQsIG1bb2JqLnBhcmVudF0uY2hpbGRyZW4pXSA9IGlkO1xuXHRcdFx0Zm9yKGkgPSAwLCBqID0gb2JqLnBhcmVudHMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdG1bb2JqLnBhcmVudHNbaV1dLmNoaWxkcmVuX2RbJC5pbkFycmF5KG9iai5pZCwgbVtvYmoucGFyZW50c1tpXV0uY2hpbGRyZW5fZCldID0gaWQ7XG5cdFx0XHR9XG5cdFx0XHQvLyB1cGRhdGUgY2hpbGRyZW4gKHJlcGxhY2UgY3VycmVudCBJRCB3aXRoIG5ldyBvbmUgaW4gcGFyZW50IGFuZCBwYXJlbnRzKVxuXHRcdFx0Zm9yKGkgPSAwLCBqID0gb2JqLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHRtW29iai5jaGlsZHJlbltpXV0ucGFyZW50ID0gaWQ7XG5cdFx0XHR9XG5cdFx0XHRmb3IoaSA9IDAsIGogPSBvYmouY2hpbGRyZW5fZC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0bVtvYmouY2hpbGRyZW5fZFtpXV0ucGFyZW50c1skLmluQXJyYXkob2JqLmlkLCBtW29iai5jaGlsZHJlbl9kW2ldXS5wYXJlbnRzKV0gPSBpZDtcblx0XHRcdH1cblx0XHRcdGkgPSAkLmluQXJyYXkob2JqLmlkLCB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQpO1xuXHRcdFx0aWYoaSAhPT0gLTEpIHsgdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkW2ldID0gaWQ7IH1cblx0XHRcdC8vIHVwZGF0ZSBtb2RlbCBhbmQgb2JqIGl0c2VsZiAob2JqLmlkLCB0aGlzLl9tb2RlbC5kYXRhW0tFWV0pXG5cdFx0XHRpID0gdGhpcy5nZXRfbm9kZShvYmouaWQsIHRydWUpO1xuXHRcdFx0aWYoaSkge1xuXHRcdFx0XHRpLmF0dHIoJ2lkJywgaWQpO1xuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIG1bb2JqLmlkXTtcblx0XHRcdG9iai5pZCA9IGlkO1xuXHRcdFx0bVtpZF0gPSBvYmo7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIGdldCB0aGUgdGV4dCB2YWx1ZSBvZiBhIG5vZGVcblx0XHQgKiBAbmFtZSBnZXRfdGV4dChvYmopXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9iaiB0aGUgbm9kZVxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ31cblx0XHQgKi9cblx0XHRnZXRfdGV4dCA6IGZ1bmN0aW9uIChvYmopIHtcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdHJldHVybiAoIW9iaiB8fCBvYmouaWQgPT09ICcjJykgPyBmYWxzZSA6IG9iai50ZXh0O1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogc2V0IHRoZSB0ZXh0IHZhbHVlIG9mIGEgbm9kZS4gVXNlZCBpbnRlcm5hbGx5LCBwbGVhc2UgdXNlIGByZW5hbWVfbm9kZShvYmosIHZhbClgLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQG5hbWUgc2V0X3RleHQob2JqLCB2YWwpXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9iaiB0aGUgbm9kZSwgeW91IGNhbiBwYXNzIGFuIGFycmF5IHRvIHNldCB0aGUgdGV4dCBvbiBtdWx0aXBsZSBub2Rlc1xuXHRcdCAqIEBwYXJhbSAge1N0cmluZ30gdmFsIHRoZSBuZXcgdGV4dCB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59XG5cdFx0ICogQHRyaWdnZXIgc2V0X3RleHQuanN0cmVlXG5cdFx0ICovXG5cdFx0c2V0X3RleHQgOiBmdW5jdGlvbiAob2JqLCB2YWwpIHtcblx0XHRcdHZhciB0MSwgdDIsIGRvbSwgdG1wO1xuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcblx0XHRcdFx0b2JqID0gb2JqLnNsaWNlKCk7XG5cdFx0XHRcdGZvcih0MSA9IDAsIHQyID0gb2JqLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xuXHRcdFx0XHRcdHRoaXMuc2V0X3RleHQob2JqW3QxXSwgdmFsKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdGlmKCFvYmogfHwgb2JqLmlkID09PSAnIycpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XHRvYmoudGV4dCA9IHZhbDtcblx0XHRcdGRvbSA9IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKTtcblx0XHRcdGlmKGRvbS5sZW5ndGgpIHtcblx0XHRcdFx0ZG9tID0gZG9tLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3I6ZXEoMClcIik7XG5cdFx0XHRcdHRtcCA9IGRvbS5jaGlsZHJlbihcIklcIikuY2xvbmUoKTtcblx0XHRcdFx0ZG9tLmh0bWwodmFsKS5wcmVwZW5kKHRtcCk7XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhIG5vZGUgdGV4dCB2YWx1ZSBpcyBjaGFuZ2VkXG5cdFx0XHRcdCAqIEBldmVudFxuXHRcdFx0XHQgKiBAbmFtZSBzZXRfdGV4dC5qc3RyZWVcblx0XHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG9ialxuXHRcdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCB0aGUgbmV3IHZhbHVlXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHR0aGlzLnRyaWdnZXIoJ3NldF90ZXh0Jyx7IFwib2JqXCIgOiBvYmosIFwidGV4dFwiIDogdmFsIH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBnZXRzIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIG5vZGUgKG9yIHRoZSB3aG9sZSB0cmVlKVxuXHRcdCAqIEBuYW1lIGdldF9qc29uKFtvYmosIG9wdGlvbnNdKVxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmpcblx0XHQgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcblx0XHQgKiBAcGFyYW0gIHtCb29sZWFufSBvcHRpb25zLm5vX3N0YXRlIGRvIG5vdCByZXR1cm4gc3RhdGUgaW5mb3JtYXRpb25cblx0XHQgKiBAcGFyYW0gIHtCb29sZWFufSBvcHRpb25zLm5vX2lkIGRvIG5vdCByZXR1cm4gSURcblx0XHQgKiBAcGFyYW0gIHtCb29sZWFufSBvcHRpb25zLm5vX2NoaWxkcmVuIGRvIG5vdCBpbmNsdWRlIGNoaWxkcmVuXG5cdFx0ICogQHBhcmFtICB7Qm9vbGVhbn0gb3B0aW9ucy5ub19kYXRhIGRvIG5vdCBpbmNsdWRlIG5vZGUgZGF0YVxuXHRcdCAqIEBwYXJhbSAge0Jvb2xlYW59IG9wdGlvbnMuZmxhdCByZXR1cm4gZmxhdCBKU09OIGluc3RlYWQgb2YgbmVzdGVkXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fVxuXHRcdCAqL1xuXHRcdGdldF9qc29uIDogZnVuY3Rpb24gKG9iaiwgb3B0aW9ucywgZmxhdCkge1xuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmogfHwgJyMnKTtcblx0XHRcdGlmKCFvYmopIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMuZmxhdCAmJiAhZmxhdCkgeyBmbGF0ID0gW107IH1cblx0XHRcdHZhciB0bXAgPSB7XG5cdFx0XHRcdCdpZCcgOiBvYmouaWQsXG5cdFx0XHRcdCd0ZXh0JyA6IG9iai50ZXh0LFxuXHRcdFx0XHQnaWNvbicgOiB0aGlzLmdldF9pY29uKG9iaiksXG5cdFx0XHRcdCdsaV9hdHRyJyA6IG9iai5saV9hdHRyLFxuXHRcdFx0XHQnYV9hdHRyJyA6IG9iai5hX2F0dHIsXG5cdFx0XHRcdCdzdGF0ZScgOiB7fSxcblx0XHRcdFx0J2RhdGEnIDogb3B0aW9ucyAmJiBvcHRpb25zLm5vX2RhdGEgPyBmYWxzZSA6IG9iai5kYXRhXG5cdFx0XHRcdC8vKCB0aGlzLmdldF9ub2RlKG9iaiwgdHJ1ZSkubGVuZ3RoID8gdGhpcy5nZXRfbm9kZShvYmosIHRydWUpLmRhdGEoKSA6IG9iai5kYXRhICksXG5cdFx0XHR9LCBpLCBqO1xuXHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLmZsYXQpIHtcblx0XHRcdFx0dG1wLnBhcmVudCA9IG9iai5wYXJlbnQ7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0dG1wLmNoaWxkcmVuID0gW107XG5cdFx0XHR9XG5cdFx0XHRpZighb3B0aW9ucyB8fCAhb3B0aW9ucy5ub19zdGF0ZSkge1xuXHRcdFx0XHRmb3IoaSBpbiBvYmouc3RhdGUpIHtcblx0XHRcdFx0XHRpZihvYmouc3RhdGUuaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0XHRcdHRtcC5zdGF0ZVtpXSA9IG9iai5zdGF0ZVtpXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy5ub19pZCkge1xuXHRcdFx0XHRkZWxldGUgdG1wLmlkO1xuXHRcdFx0XHRpZih0bXAubGlfYXR0ciAmJiB0bXAubGlfYXR0ci5pZCkge1xuXHRcdFx0XHRcdGRlbGV0ZSB0bXAubGlfYXR0ci5pZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLmZsYXQgJiYgb2JqLmlkICE9PSAnIycpIHtcblx0XHRcdFx0ZmxhdC5wdXNoKHRtcCk7XG5cdFx0XHR9XG5cdFx0XHRpZighb3B0aW9ucyB8fCAhb3B0aW9ucy5ub19jaGlsZHJlbikge1xuXHRcdFx0XHRmb3IoaSA9IDAsIGogPSBvYmouY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLmZsYXQpIHtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0X2pzb24ob2JqLmNoaWxkcmVuW2ldLCBvcHRpb25zLCBmbGF0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHR0bXAuY2hpbGRyZW4ucHVzaCh0aGlzLmdldF9qc29uKG9iai5jaGlsZHJlbltpXSwgb3B0aW9ucykpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG9wdGlvbnMgJiYgb3B0aW9ucy5mbGF0ID8gZmxhdCA6IChvYmouaWQgPT09ICcjJyA/IHRtcC5jaGlsZHJlbiA6IHRtcCk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBjcmVhdGUgYSBuZXcgbm9kZSAoZG8gbm90IGNvbmZ1c2Ugd2l0aCBsb2FkX25vZGUpXG5cdFx0ICogQG5hbWUgY3JlYXRlX25vZGUoW29iaiwgbm9kZSwgcG9zLCBjYWxsYmFjaywgaXNfbG9hZGVkXSlcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gICBwYXIgICAgICAgdGhlIHBhcmVudCBub2RlXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9ICAgbm9kZSAgICAgIHRoZSBkYXRhIGZvciB0aGUgbmV3IG5vZGUgKGEgdmFsaWQgSlNPTiBvYmplY3QsIG9yIGEgc2ltcGxlIHN0cmluZyB3aXRoIHRoZSBuYW1lKVxuXHRcdCAqIEBwYXJhbSAge21peGVkfSAgIHBvcyAgICAgICB0aGUgaW5kZXggYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBub2RlLCBcImZpcnN0XCIgYW5kIFwibGFzdFwiIGFyZSBhbHNvIHN1cHBvcnRlZCwgZGVmYXVsdCBpcyBcImxhc3RcIlxuXHRcdCAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFjayBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbmNlIHRoZSBub2RlIGlzIGNyZWF0ZWRcblx0XHQgKiBAcGFyYW0gIHtCb29sZWFufSBpc19sb2FkZWQgaW50ZXJuYWwgYXJndW1lbnQgaW5kaWNhdGluZyBpZiB0aGUgcGFyZW50IG5vZGUgd2FzIHN1Y2Nlc2Z1bGx5IGxvYWRlZFxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ30gICAgICAgICAgICB0aGUgSUQgb2YgdGhlIG5ld2x5IGNyZWF0ZSBub2RlXG5cdFx0ICogQHRyaWdnZXIgbW9kZWwuanN0cmVlLCBjcmVhdGVfbm9kZS5qc3RyZWVcblx0XHQgKi9cblx0XHRjcmVhdGVfbm9kZSA6IGZ1bmN0aW9uIChwYXIsIG5vZGUsIHBvcywgY2FsbGJhY2ssIGlzX2xvYWRlZCkge1xuXHRcdFx0cGFyID0gdGhpcy5nZXRfbm9kZShwYXIpO1xuXHRcdFx0aWYoIXBhcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRcdHBvcyA9IHBvcyA9PT0gdW5kZWZpbmVkID8gXCJsYXN0XCIgOiBwb3M7XG5cdFx0XHRpZighcG9zLnRvU3RyaW5nKCkubWF0Y2goL14oYmVmb3JlfGFmdGVyKSQvKSAmJiAhaXNfbG9hZGVkICYmICF0aGlzLmlzX2xvYWRlZChwYXIpKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmxvYWRfbm9kZShwYXIsIGZ1bmN0aW9uICgpIHsgdGhpcy5jcmVhdGVfbm9kZShwYXIsIG5vZGUsIHBvcywgY2FsbGJhY2ssIHRydWUpOyB9KTtcblx0XHRcdH1cblx0XHRcdGlmKCFub2RlKSB7IG5vZGUgPSB7IFwidGV4dFwiIDogdGhpcy5nZXRfc3RyaW5nKCdOZXcgbm9kZScpIH07IH1cblx0XHRcdGlmKG5vZGUudGV4dCA9PT0gdW5kZWZpbmVkKSB7IG5vZGUudGV4dCA9IHRoaXMuZ2V0X3N0cmluZygnTmV3IG5vZGUnKTsgfVxuXHRcdFx0dmFyIHRtcCwgZHBjLCBpLCBqO1xuXG5cdFx0XHRpZihwYXIuaWQgPT09ICcjJykge1xuXHRcdFx0XHRpZihwb3MgPT09IFwiYmVmb3JlXCIpIHsgcG9zID0gXCJmaXJzdFwiOyB9XG5cdFx0XHRcdGlmKHBvcyA9PT0gXCJhZnRlclwiKSB7IHBvcyA9IFwibGFzdFwiOyB9XG5cdFx0XHR9XG5cdFx0XHRzd2l0Y2gocG9zKSB7XG5cdFx0XHRcdGNhc2UgXCJiZWZvcmVcIjpcblx0XHRcdFx0XHR0bXAgPSB0aGlzLmdldF9ub2RlKHBhci5wYXJlbnQpO1xuXHRcdFx0XHRcdHBvcyA9ICQuaW5BcnJheShwYXIuaWQsIHRtcC5jaGlsZHJlbik7XG5cdFx0XHRcdFx0cGFyID0gdG1wO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiYWZ0ZXJcIiA6XG5cdFx0XHRcdFx0dG1wID0gdGhpcy5nZXRfbm9kZShwYXIucGFyZW50KTtcblx0XHRcdFx0XHRwb3MgPSAkLmluQXJyYXkocGFyLmlkLCB0bXAuY2hpbGRyZW4pICsgMTtcblx0XHRcdFx0XHRwYXIgPSB0bXA7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJpbnNpZGVcIjpcblx0XHRcdFx0Y2FzZSBcImZpcnN0XCI6XG5cdFx0XHRcdFx0cG9zID0gMDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImxhc3RcIjpcblx0XHRcdFx0XHRwb3MgPSBwYXIuY2hpbGRyZW4ubGVuZ3RoO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGlmKCFwb3MpIHsgcG9zID0gMDsgfVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYocG9zID4gcGFyLmNoaWxkcmVuLmxlbmd0aCkgeyBwb3MgPSBwYXIuY2hpbGRyZW4ubGVuZ3RoOyB9XG5cdFx0XHRpZighbm9kZS5pZCkgeyBub2RlLmlkID0gdHJ1ZTsgfVxuXHRcdFx0aWYoIXRoaXMuY2hlY2soXCJjcmVhdGVfbm9kZVwiLCBub2RlLCBwYXIsIHBvcykpIHtcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5jb3JlLmVycm9yLmNhbGwodGhpcywgdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3IpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpZihub2RlLmlkID09PSB0cnVlKSB7IGRlbGV0ZSBub2RlLmlkOyB9XG5cdFx0XHRub2RlID0gdGhpcy5fcGFyc2VfbW9kZWxfZnJvbV9qc29uKG5vZGUsIHBhci5pZCwgcGFyLnBhcmVudHMuY29uY2F0KCkpO1xuXHRcdFx0aWYoIW5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XHR0bXAgPSB0aGlzLmdldF9ub2RlKG5vZGUpO1xuXHRcdFx0ZHBjID0gW107XG5cdFx0XHRkcGMucHVzaChub2RlKTtcblx0XHRcdGRwYyA9IGRwYy5jb25jYXQodG1wLmNoaWxkcmVuX2QpO1xuXHRcdFx0dGhpcy50cmlnZ2VyKCdtb2RlbCcsIHsgXCJub2Rlc1wiIDogZHBjLCBcInBhcmVudFwiIDogcGFyLmlkIH0pO1xuXG5cdFx0XHRwYXIuY2hpbGRyZW5fZCA9IHBhci5jaGlsZHJlbl9kLmNvbmNhdChkcGMpO1xuXHRcdFx0Zm9yKGkgPSAwLCBqID0gcGFyLnBhcmVudHMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdHRoaXMuX21vZGVsLmRhdGFbcGFyLnBhcmVudHNbaV1dLmNoaWxkcmVuX2QgPSB0aGlzLl9tb2RlbC5kYXRhW3Bhci5wYXJlbnRzW2ldXS5jaGlsZHJlbl9kLmNvbmNhdChkcGMpO1xuXHRcdFx0fVxuXHRcdFx0bm9kZSA9IHRtcDtcblx0XHRcdHRtcCA9IFtdO1xuXHRcdFx0Zm9yKGkgPSAwLCBqID0gcGFyLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHR0bXBbaSA+PSBwb3MgPyBpKzEgOiBpXSA9IHBhci5jaGlsZHJlbltpXTtcblx0XHRcdH1cblx0XHRcdHRtcFtwb3NdID0gbm9kZS5pZDtcblx0XHRcdHBhci5jaGlsZHJlbiA9IHRtcDtcblxuXHRcdFx0dGhpcy5yZWRyYXdfbm9kZShwYXIsIHRydWUpO1xuXHRcdFx0aWYoY2FsbGJhY2spIHsgY2FsbGJhY2suY2FsbCh0aGlzLCB0aGlzLmdldF9ub2RlKG5vZGUpKTsgfVxuXHRcdFx0LyoqXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhIG5vZGUgaXMgY3JlYXRlZFxuXHRcdFx0ICogQGV2ZW50XG5cdFx0XHQgKiBAbmFtZSBjcmVhdGVfbm9kZS5qc3RyZWVcblx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBub2RlXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gcGFyZW50IHRoZSBwYXJlbnQncyBJRFxuXHRcdFx0ICogQHBhcmFtIHtOdW1iZXJ9IHBvc2l0aW9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgbmV3IG5vZGUgYW1vbmcgdGhlIHBhcmVudCdzIGNoaWxkcmVuXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMudHJpZ2dlcignY3JlYXRlX25vZGUnLCB7IFwibm9kZVwiIDogdGhpcy5nZXRfbm9kZShub2RlKSwgXCJwYXJlbnRcIiA6IHBhci5pZCwgXCJwb3NpdGlvblwiIDogcG9zIH0pO1xuXHRcdFx0cmV0dXJuIG5vZGUuaWQ7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBzZXQgdGhlIHRleHQgdmFsdWUgb2YgYSBub2RlXG5cdFx0ICogQG5hbWUgcmVuYW1lX25vZGUob2JqLCB2YWwpXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9iaiB0aGUgbm9kZSwgeW91IGNhbiBwYXNzIGFuIGFycmF5IHRvIHJlbmFtZSBtdWx0aXBsZSBub2RlcyB0byB0aGUgc2FtZSBuYW1lXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSB2YWwgdGhlIG5ldyB0ZXh0IHZhbHVlXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0XHQgKiBAdHJpZ2dlciByZW5hbWVfbm9kZS5qc3RyZWVcblx0XHQgKi9cblx0XHRyZW5hbWVfbm9kZSA6IGZ1bmN0aW9uIChvYmosIHZhbCkge1xuXHRcdFx0dmFyIHQxLCB0Miwgb2xkO1xuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcblx0XHRcdFx0b2JqID0gb2JqLnNsaWNlKCk7XG5cdFx0XHRcdGZvcih0MSA9IDAsIHQyID0gb2JqLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xuXHRcdFx0XHRcdHRoaXMucmVuYW1lX25vZGUob2JqW3QxXSwgdmFsKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdGlmKCFvYmogfHwgb2JqLmlkID09PSAnIycpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XHRvbGQgPSBvYmoudGV4dDtcblx0XHRcdGlmKCF0aGlzLmNoZWNrKFwicmVuYW1lX25vZGVcIiwgb2JqLCB0aGlzLmdldF9wYXJlbnQob2JqKSwgdmFsKSkge1xuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmNvcmUuZXJyb3IuY2FsbCh0aGlzLCB0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcik7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc2V0X3RleHQob2JqLCB2YWwpOyAvLyAuYXBwbHkodGhpcywgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcblx0XHRcdC8qKlxuXHRcdFx0ICogdHJpZ2dlcmVkIHdoZW4gYSBub2RlIGlzIHJlbmFtZWRcblx0XHRcdCAqIEBldmVudFxuXHRcdFx0ICogQG5hbWUgcmVuYW1lX25vZGUuanN0cmVlXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZVxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IHRleHQgdGhlIG5ldyB2YWx1ZVxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IG9sZCB0aGUgb2xkIHZhbHVlXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMudHJpZ2dlcigncmVuYW1lX25vZGUnLCB7IFwibm9kZVwiIDogb2JqLCBcInRleHRcIiA6IHZhbCwgXCJvbGRcIiA6IG9sZCB9KTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogcmVtb3ZlIGEgbm9kZVxuXHRcdCAqIEBuYW1lIGRlbGV0ZV9ub2RlKG9iailcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqIHRoZSBub2RlLCB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgdG8gZGVsZXRlIG11bHRpcGxlIG5vZGVzXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0XHQgKiBAdHJpZ2dlciBkZWxldGVfbm9kZS5qc3RyZWUsIGNoYW5nZWQuanN0cmVlXG5cdFx0ICovXG5cdFx0ZGVsZXRlX25vZGUgOiBmdW5jdGlvbiAob2JqKSB7XG5cdFx0XHR2YXIgdDEsIHQyLCBwYXIsIHBvcywgdG1wLCBpLCBqLCBrLCBsLCBjO1xuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcblx0XHRcdFx0b2JqID0gb2JqLnNsaWNlKCk7XG5cdFx0XHRcdGZvcih0MSA9IDAsIHQyID0gb2JqLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xuXHRcdFx0XHRcdHRoaXMuZGVsZXRlX25vZGUob2JqW3QxXSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XG5cdFx0XHRpZighb2JqIHx8IG9iai5pZCA9PT0gJyMnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdFx0cGFyID0gdGhpcy5nZXRfbm9kZShvYmoucGFyZW50KTtcblx0XHRcdHBvcyA9ICQuaW5BcnJheShvYmouaWQsIHBhci5jaGlsZHJlbik7XG5cdFx0XHRjID0gZmFsc2U7XG5cdFx0XHRpZighdGhpcy5jaGVjayhcImRlbGV0ZV9ub2RlXCIsIG9iaiwgcGFyLCBwb3MpKSB7XG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuY29yZS5lcnJvci5jYWxsKHRoaXMsIHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0aWYocG9zICE9PSAtMSkge1xuXHRcdFx0XHRwYXIuY2hpbGRyZW4gPSAkLnZha2F0YS5hcnJheV9yZW1vdmUocGFyLmNoaWxkcmVuLCBwb3MpO1xuXHRcdFx0fVxuXHRcdFx0dG1wID0gb2JqLmNoaWxkcmVuX2QuY29uY2F0KFtdKTtcblx0XHRcdHRtcC5wdXNoKG9iai5pZCk7XG5cdFx0XHRmb3IoayA9IDAsIGwgPSB0bXAubGVuZ3RoOyBrIDwgbDsgaysrKSB7XG5cdFx0XHRcdGZvcihpID0gMCwgaiA9IG9iai5wYXJlbnRzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHRcdHBvcyA9ICQuaW5BcnJheSh0bXBba10sIHRoaXMuX21vZGVsLmRhdGFbb2JqLnBhcmVudHNbaV1dLmNoaWxkcmVuX2QpO1xuXHRcdFx0XHRcdGlmKHBvcyAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdHRoaXMuX21vZGVsLmRhdGFbb2JqLnBhcmVudHNbaV1dLmNoaWxkcmVuX2QgPSAkLnZha2F0YS5hcnJheV9yZW1vdmUodGhpcy5fbW9kZWwuZGF0YVtvYmoucGFyZW50c1tpXV0uY2hpbGRyZW5fZCwgcG9zKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYodGhpcy5fbW9kZWwuZGF0YVt0bXBba11dLnN0YXRlLnNlbGVjdGVkKSB7XG5cdFx0XHRcdFx0YyA9IHRydWU7XG5cdFx0XHRcdFx0cG9zID0gJC5pbkFycmF5KHRtcFtrXSwgdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkKTtcblx0XHRcdFx0XHRpZihwb3MgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQgPSAkLnZha2F0YS5hcnJheV9yZW1vdmUodGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLCBwb3MpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0LyoqXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhIG5vZGUgaXMgZGVsZXRlZFxuXHRcdFx0ICogQGV2ZW50XG5cdFx0XHQgKiBAbmFtZSBkZWxldGVfbm9kZS5qc3RyZWVcblx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBub2RlXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gcGFyZW50IHRoZSBwYXJlbnQncyBJRFxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnRyaWdnZXIoJ2RlbGV0ZV9ub2RlJywgeyBcIm5vZGVcIiA6IG9iaiwgXCJwYXJlbnRcIiA6IHBhci5pZCB9KTtcblx0XHRcdGlmKGMpIHtcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCdjaGFuZ2VkJywgeyAnYWN0aW9uJyA6ICdkZWxldGVfbm9kZScsICdub2RlJyA6IG9iaiwgJ3NlbGVjdGVkJyA6IHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCwgJ3BhcmVudCcgOiBwYXIuaWQgfSk7XG5cdFx0XHR9XG5cdFx0XHRmb3IoayA9IDAsIGwgPSB0bXAubGVuZ3RoOyBrIDwgbDsgaysrKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLl9tb2RlbC5kYXRhW3RtcFtrXV07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnJlZHJhd19ub2RlKHBhciwgdHJ1ZSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIGNoZWNrIGlmIGFuIG9wZXJhdGlvbiBpcyBwcmVtaXR0ZWQgb24gdGhlIHRyZWUuIFVzZWQgaW50ZXJuYWxseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBuYW1lIGNoZWNrKGNoaywgb2JqLCBwYXIsIHBvcylcblx0XHQgKiBAcGFyYW0gIHtTdHJpbmd9IGNoayB0aGUgb3BlcmF0aW9uIHRvIGNoZWNrLCBjYW4gYmUgXCJjcmVhdGVfbm9kZVwiLCBcInJlbmFtZV9ub2RlXCIsIFwiZGVsZXRlX25vZGVcIiwgXCJjb3B5X25vZGVcIiBvciBcIm1vdmVfbm9kZVwiXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9iaiB0aGUgbm9kZVxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBwYXIgdGhlIHBhcmVudFxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBwb3MgdGhlIHBvc2l0aW9uIHRvIGluc2VydCBhdCwgb3IgaWYgXCJyZW5hbWVfbm9kZVwiIC0gdGhlIG5ldyBuYW1lXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0XHQgKi9cblx0XHRjaGVjayA6IGZ1bmN0aW9uIChjaGssIG9iaiwgcGFyLCBwb3MpIHtcblx0XHRcdG9iaiA9IG9iaiAmJiBvYmouaWQgPyBvYmogOiB0aGlzLmdldF9ub2RlKG9iaik7XG5cdFx0XHRwYXIgPSBwYXIgJiYgcGFyLmlkID8gcGFyIDogdGhpcy5nZXRfbm9kZShwYXIpO1xuXHRcdFx0dmFyIHRtcCA9IGNoay5tYXRjaCgvXm1vdmVfbm9kZXxjb3B5X25vZGV8Y3JlYXRlX25vZGUkL2kpID8gcGFyIDogb2JqLFxuXHRcdFx0XHRjaGMgPSB0aGlzLnNldHRpbmdzLmNvcmUuY2hlY2tfY2FsbGJhY2s7XG5cdFx0XHRpZihjaGsgPT09IFwibW92ZV9ub2RlXCIpIHtcblx0XHRcdFx0aWYob2JqLmlkID09PSBwYXIuaWQgfHwgJC5pbkFycmF5KG9iai5pZCwgcGFyLmNoaWxkcmVuKSA9PT0gcG9zIHx8ICQuaW5BcnJheShwYXIuaWQsIG9iai5jaGlsZHJlbl9kKSAhPT0gLTEpIHtcblx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvciA9IHsgJ2Vycm9yJyA6ICdjaGVjaycsICdwbHVnaW4nIDogJ2NvcmUnLCAnaWQnIDogJ2NvcmVfMDEnLCAncmVhc29uJyA6ICdNb3ZpbmcgcGFyZW50IGluc2lkZSBjaGlsZCcsICdkYXRhJyA6IEpTT04uc3RyaW5naWZ5KHsgJ2NoaycgOiBjaGssICdwb3MnIDogcG9zLCAnb2JqJyA6IG9iaiAmJiBvYmouaWQgPyBvYmouaWQgOiBmYWxzZSwgJ3BhcicgOiBwYXIgJiYgcGFyLmlkID8gcGFyLmlkIDogZmFsc2UgfSkgfTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRtcCA9IHRoaXMuZ2V0X25vZGUodG1wLCB0cnVlKTtcblx0XHRcdGlmKHRtcC5sZW5ndGgpIHsgdG1wID0gdG1wLmRhdGEoJ2pzdHJlZScpOyB9XG5cdFx0XHRpZih0bXAgJiYgdG1wLmZ1bmN0aW9ucyAmJiAodG1wLmZ1bmN0aW9uc1tjaGtdID09PSBmYWxzZSB8fCB0bXAuZnVuY3Rpb25zW2Noa10gPT09IHRydWUpKSB7XG5cdFx0XHRcdGlmKHRtcC5mdW5jdGlvbnNbY2hrXSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvciA9IHsgJ2Vycm9yJyA6ICdjaGVjaycsICdwbHVnaW4nIDogJ2NvcmUnLCAnaWQnIDogJ2NvcmVfMDInLCAncmVhc29uJyA6ICdOb2RlIGRhdGEgcHJldmVudHMgZnVuY3Rpb246ICcgKyBjaGssICdkYXRhJyA6IEpTT04uc3RyaW5naWZ5KHsgJ2NoaycgOiBjaGssICdwb3MnIDogcG9zLCAnb2JqJyA6IG9iaiAmJiBvYmouaWQgPyBvYmouaWQgOiBmYWxzZSwgJ3BhcicgOiBwYXIgJiYgcGFyLmlkID8gcGFyLmlkIDogZmFsc2UgfSkgfTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdG1wLmZ1bmN0aW9uc1tjaGtdO1xuXHRcdFx0fVxuXHRcdFx0aWYoY2hjID09PSBmYWxzZSB8fCAoJC5pc0Z1bmN0aW9uKGNoYykgJiYgY2hjLmNhbGwodGhpcywgY2hrLCBvYmosIHBhciwgcG9zKSA9PT0gZmFsc2UpIHx8IChjaGMgJiYgY2hjW2Noa10gPT09IGZhbHNlKSkge1xuXHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvciA9IHsgJ2Vycm9yJyA6ICdjaGVjaycsICdwbHVnaW4nIDogJ2NvcmUnLCAnaWQnIDogJ2NvcmVfMDMnLCAncmVhc29uJyA6ICdVc2VyIGNvbmZpZyBmb3IgY29yZS5jaGVja19jYWxsYmFjayBwcmV2ZW50cyBmdW5jdGlvbjogJyArIGNoaywgJ2RhdGEnIDogSlNPTi5zdHJpbmdpZnkoeyAnY2hrJyA6IGNoaywgJ3BvcycgOiBwb3MsICdvYmonIDogb2JqICYmIG9iai5pZCA/IG9iai5pZCA6IGZhbHNlLCAncGFyJyA6IHBhciAmJiBwYXIuaWQgPyBwYXIuaWQgOiBmYWxzZSB9KSB9O1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIGdldCB0aGUgbGFzdCBlcnJvclxuXHRcdCAqIEBuYW1lIGxhc3RfZXJyb3IoKVxuXHRcdCAqIEByZXR1cm4ge09iamVjdH1cblx0XHQgKi9cblx0XHRsYXN0X2Vycm9yIDogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogbW92ZSBhIG5vZGUgdG8gYSBuZXcgcGFyZW50XG5cdFx0ICogQG5hbWUgbW92ZV9ub2RlKG9iaiwgcGFyIFssIHBvcywgY2FsbGJhY2ssIGlzX2xvYWRlZF0pXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9iaiB0aGUgbm9kZSB0byBtb3ZlLCBwYXNzIGFuIGFycmF5IHRvIG1vdmUgbXVsdGlwbGUgbm9kZXNcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gcGFyIHRoZSBuZXcgcGFyZW50XG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IHBvcyB0aGUgcG9zaXRpb24gdG8gaW5zZXJ0IGF0IChcImZpcnN0XCIgYW5kIFwibGFzdFwiIGFyZSBzdXBwb3J0ZWQsIGFzIHdlbGwgYXMgXCJiZWZvcmVcIiBhbmQgXCJhZnRlclwiKSwgZGVmYXVsdHMgdG8gYDBgXG5cdFx0ICogQHBhcmFtICB7ZnVuY3Rpb259IGNhbGxiYWNrIGEgZnVuY3Rpb24gdG8gY2FsbCBvbmNlIHRoZSBtb3ZlIGlzIGNvbXBsZXRlZCwgcmVjZWl2ZXMgMyBhcmd1bWVudHMgLSB0aGUgbm9kZSwgdGhlIG5ldyBwYXJlbnQgYW5kIHRoZSBwb3NpdGlvblxuXHRcdCAqIEBwYXJhbSAge0Jvb2xlYW59IGludGVybmFsIHBhcmFtZXRlciBpbmRpY2F0aW5nIGlmIHRoZSBwYXJlbnQgbm9kZSBoYXMgYmVlbiBsb2FkZWRcblx0XHQgKiBAdHJpZ2dlciBtb3ZlX25vZGUuanN0cmVlXG5cdFx0ICovXG5cdFx0bW92ZV9ub2RlIDogZnVuY3Rpb24gKG9iaiwgcGFyLCBwb3MsIGNhbGxiYWNrLCBpc19sb2FkZWQpIHtcblx0XHRcdHZhciB0MSwgdDIsIG9sZF9wYXIsIG5ld19wYXIsIG9sZF9pbnMsIGlzX211bHRpLCBkcGMsIHRtcCwgaSwgaiwgaywgbCwgcDtcblx0XHRcdGlmKCQuaXNBcnJheShvYmopKSB7XG5cdFx0XHRcdG9iaiA9IG9iai5yZXZlcnNlKCkuc2xpY2UoKTtcblx0XHRcdFx0Zm9yKHQxID0gMCwgdDIgPSBvYmoubGVuZ3RoOyB0MSA8IHQyOyB0MSsrKSB7XG5cdFx0XHRcdFx0dGhpcy5tb3ZlX25vZGUob2JqW3QxXSwgcGFyLCBwb3MsIGNhbGxiYWNrLCBpc19sb2FkZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0b2JqID0gb2JqICYmIG9iai5pZCA/IG9iaiA6IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdHBhciA9IHRoaXMuZ2V0X25vZGUocGFyKTtcblx0XHRcdHBvcyA9IHBvcyA9PT0gdW5kZWZpbmVkID8gMCA6IHBvcztcblxuXHRcdFx0aWYoIXBhciB8fCAhb2JqIHx8IG9iai5pZCA9PT0gJyMnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdFx0aWYoIXBvcy50b1N0cmluZygpLm1hdGNoKC9eKGJlZm9yZXxhZnRlcikkLykgJiYgIWlzX2xvYWRlZCAmJiAhdGhpcy5pc19sb2FkZWQocGFyKSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5sb2FkX25vZGUocGFyLCBmdW5jdGlvbiAoKSB7IHRoaXMubW92ZV9ub2RlKG9iaiwgcGFyLCBwb3MsIGNhbGxiYWNrLCB0cnVlKTsgfSk7XG5cdFx0XHR9XG5cblx0XHRcdG9sZF9wYXIgPSAob2JqLnBhcmVudCB8fCAnIycpLnRvU3RyaW5nKCk7XG5cdFx0XHRuZXdfcGFyID0gKCFwb3MudG9TdHJpbmcoKS5tYXRjaCgvXihiZWZvcmV8YWZ0ZXIpJC8pIHx8IHBhci5pZCA9PT0gJyMnKSA/IHBhciA6IHRoaXMuZ2V0X25vZGUocGFyLnBhcmVudCk7XG5cdFx0XHRvbGRfaW5zID0gdGhpcy5fbW9kZWwuZGF0YVtvYmouaWRdID8gdGhpcyA6ICQuanN0cmVlLnJlZmVyZW5jZShvYmouaWQpO1xuXHRcdFx0aXNfbXVsdGkgPSAhb2xkX2lucyB8fCAhb2xkX2lucy5faWQgfHwgKHRoaXMuX2lkICE9PSBvbGRfaW5zLl9pZCk7XG5cdFx0XHRpZihpc19tdWx0aSkge1xuXHRcdFx0XHRpZih0aGlzLmNvcHlfbm9kZShvYmosIHBhciwgcG9zLCBjYWxsYmFjaywgaXNfbG9hZGVkKSkge1xuXHRcdFx0XHRcdGlmKG9sZF9pbnMpIHsgb2xkX2lucy5kZWxldGVfbm9kZShvYmopOyB9XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0Ly92YXIgbSA9IHRoaXMuX21vZGVsLmRhdGE7XG5cdFx0XHRpZihuZXdfcGFyLmlkID09PSAnIycpIHtcblx0XHRcdFx0aWYocG9zID09PSBcImJlZm9yZVwiKSB7IHBvcyA9IFwiZmlyc3RcIjsgfVxuXHRcdFx0XHRpZihwb3MgPT09IFwiYWZ0ZXJcIikgeyBwb3MgPSBcImxhc3RcIjsgfVxuXHRcdFx0fVxuXHRcdFx0c3dpdGNoKHBvcykge1xuXHRcdFx0XHRjYXNlIFwiYmVmb3JlXCI6XG5cdFx0XHRcdFx0cG9zID0gJC5pbkFycmF5KHBhci5pZCwgbmV3X3Bhci5jaGlsZHJlbik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJhZnRlclwiIDpcblx0XHRcdFx0XHRwb3MgPSAkLmluQXJyYXkocGFyLmlkLCBuZXdfcGFyLmNoaWxkcmVuKSArIDE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJpbnNpZGVcIjpcblx0XHRcdFx0Y2FzZSBcImZpcnN0XCI6XG5cdFx0XHRcdFx0cG9zID0gMDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImxhc3RcIjpcblx0XHRcdFx0XHRwb3MgPSBuZXdfcGFyLmNoaWxkcmVuLmxlbmd0aDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRpZighcG9zKSB7IHBvcyA9IDA7IH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmKHBvcyA+IG5ld19wYXIuY2hpbGRyZW4ubGVuZ3RoKSB7IHBvcyA9IG5ld19wYXIuY2hpbGRyZW4ubGVuZ3RoOyB9XG5cdFx0XHRpZighdGhpcy5jaGVjayhcIm1vdmVfbm9kZVwiLCBvYmosIG5ld19wYXIsIHBvcykpIHtcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5jb3JlLmVycm9yLmNhbGwodGhpcywgdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3IpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpZihvYmoucGFyZW50ID09PSBuZXdfcGFyLmlkKSB7XG5cdFx0XHRcdGRwYyA9IG5ld19wYXIuY2hpbGRyZW4uY29uY2F0KCk7XG5cdFx0XHRcdHRtcCA9ICQuaW5BcnJheShvYmouaWQsIGRwYyk7XG5cdFx0XHRcdGlmKHRtcCAhPT0gLTEpIHtcblx0XHRcdFx0XHRkcGMgPSAkLnZha2F0YS5hcnJheV9yZW1vdmUoZHBjLCB0bXApO1xuXHRcdFx0XHRcdGlmKHBvcyA+IHRtcCkgeyBwb3MtLTsgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRtcCA9IFtdO1xuXHRcdFx0XHRmb3IoaSA9IDAsIGogPSBkcGMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdFx0dG1wW2kgPj0gcG9zID8gaSsxIDogaV0gPSBkcGNbaV07XG5cdFx0XHRcdH1cblx0XHRcdFx0dG1wW3Bvc10gPSBvYmouaWQ7XG5cdFx0XHRcdG5ld19wYXIuY2hpbGRyZW4gPSB0bXA7XG5cdFx0XHRcdHRoaXMuX25vZGVfY2hhbmdlZChuZXdfcGFyLmlkKTtcblx0XHRcdFx0dGhpcy5yZWRyYXcobmV3X3Bhci5pZCA9PT0gJyMnKTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHQvLyBjbGVhbiBvbGQgcGFyZW50IGFuZCB1cFxuXHRcdFx0XHR0bXAgPSBvYmouY2hpbGRyZW5fZC5jb25jYXQoKTtcblx0XHRcdFx0dG1wLnB1c2gob2JqLmlkKTtcblx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gb2JqLnBhcmVudHMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdFx0ZHBjID0gW107XG5cdFx0XHRcdFx0cCA9IG9sZF9pbnMuX21vZGVsLmRhdGFbb2JqLnBhcmVudHNbaV1dLmNoaWxkcmVuX2Q7XG5cdFx0XHRcdFx0Zm9yKGsgPSAwLCBsID0gcC5sZW5ndGg7IGsgPCBsOyBrKyspIHtcblx0XHRcdFx0XHRcdGlmKCQuaW5BcnJheShwW2tdLCB0bXApID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRkcGMucHVzaChwW2tdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b2xkX2lucy5fbW9kZWwuZGF0YVtvYmoucGFyZW50c1tpXV0uY2hpbGRyZW5fZCA9IGRwYztcblx0XHRcdFx0fVxuXHRcdFx0XHRvbGRfaW5zLl9tb2RlbC5kYXRhW29sZF9wYXJdLmNoaWxkcmVuID0gJC52YWthdGEuYXJyYXlfcmVtb3ZlX2l0ZW0ob2xkX2lucy5fbW9kZWwuZGF0YVtvbGRfcGFyXS5jaGlsZHJlbiwgb2JqLmlkKTtcblxuXHRcdFx0XHQvLyBpbnNlcnQgaW50byBuZXcgcGFyZW50IGFuZCB1cFxuXHRcdFx0XHRmb3IoaSA9IDAsIGogPSBuZXdfcGFyLnBhcmVudHMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdFx0dGhpcy5fbW9kZWwuZGF0YVtuZXdfcGFyLnBhcmVudHNbaV1dLmNoaWxkcmVuX2QgPSB0aGlzLl9tb2RlbC5kYXRhW25ld19wYXIucGFyZW50c1tpXV0uY2hpbGRyZW5fZC5jb25jYXQodG1wKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkcGMgPSBbXTtcblx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gbmV3X3Bhci5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0XHRkcGNbaSA+PSBwb3MgPyBpKzEgOiBpXSA9IG5ld19wYXIuY2hpbGRyZW5baV07XG5cdFx0XHRcdH1cblx0XHRcdFx0ZHBjW3Bvc10gPSBvYmouaWQ7XG5cdFx0XHRcdG5ld19wYXIuY2hpbGRyZW4gPSBkcGM7XG5cdFx0XHRcdG5ld19wYXIuY2hpbGRyZW5fZC5wdXNoKG9iai5pZCk7XG5cdFx0XHRcdG5ld19wYXIuY2hpbGRyZW5fZCA9IG5ld19wYXIuY2hpbGRyZW5fZC5jb25jYXQob2JqLmNoaWxkcmVuX2QpO1xuXG5cdFx0XHRcdC8vIHVwZGF0ZSBvYmplY3Rcblx0XHRcdFx0b2JqLnBhcmVudCA9IG5ld19wYXIuaWQ7XG5cdFx0XHRcdHRtcCA9IG5ld19wYXIucGFyZW50cy5jb25jYXQoKTtcblx0XHRcdFx0dG1wLnVuc2hpZnQobmV3X3Bhci5pZCk7XG5cdFx0XHRcdHAgPSBvYmoucGFyZW50cy5sZW5ndGg7XG5cdFx0XHRcdG9iai5wYXJlbnRzID0gdG1wO1xuXG5cdFx0XHRcdC8vIHVwZGF0ZSBvYmplY3QgY2hpbGRyZW5cblx0XHRcdFx0dG1wID0gdG1wLmNvbmNhdCgpO1xuXHRcdFx0XHRmb3IoaSA9IDAsIGogPSBvYmouY2hpbGRyZW5fZC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0XHR0aGlzLl9tb2RlbC5kYXRhW29iai5jaGlsZHJlbl9kW2ldXS5wYXJlbnRzID0gdGhpcy5fbW9kZWwuZGF0YVtvYmouY2hpbGRyZW5fZFtpXV0ucGFyZW50cy5zbGljZSgwLHAqLTEpO1xuXHRcdFx0XHRcdEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuX21vZGVsLmRhdGFbb2JqLmNoaWxkcmVuX2RbaV1dLnBhcmVudHMsIHRtcCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLl9ub2RlX2NoYW5nZWQob2xkX3Bhcik7XG5cdFx0XHRcdHRoaXMuX25vZGVfY2hhbmdlZChuZXdfcGFyLmlkKTtcblx0XHRcdFx0dGhpcy5yZWRyYXcob2xkX3BhciA9PT0gJyMnIHx8IG5ld19wYXIuaWQgPT09ICcjJyk7XG5cdFx0XHR9XG5cdFx0XHRpZihjYWxsYmFjaykgeyBjYWxsYmFjay5jYWxsKHRoaXMsIG9iaiwgbmV3X3BhciwgcG9zKTsgfVxuXHRcdFx0LyoqXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhIG5vZGUgaXMgbW92ZWRcblx0XHRcdCAqIEBldmVudFxuXHRcdFx0ICogQG5hbWUgbW92ZV9ub2RlLmpzdHJlZVxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGVcblx0XHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBwYXJlbnQgdGhlIHBhcmVudCdzIElEXG5cdFx0XHQgKiBAcGFyYW0ge051bWJlcn0gcG9zaXRpb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBub2RlIGFtb25nIHRoZSBwYXJlbnQncyBjaGlsZHJlblxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IG9sZF9wYXJlbnQgdGhlIG9sZCBwYXJlbnQgb2YgdGhlIG5vZGVcblx0XHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNfbXVsdGkgZG8gdGhlIG5vZGUgYW5kIG5ldyBwYXJlbnQgYmVsb25nIHRvIGRpZmZlcmVudCBpbnN0YW5jZXNcblx0XHRcdCAqIEBwYXJhbSB7anNUcmVlfSBvbGRfaW5zdGFuY2UgdGhlIGluc3RhbmNlIHRoZSBub2RlIGNhbWUgZnJvbVxuXHRcdFx0ICogQHBhcmFtIHtqc1RyZWV9IG5ld19pbnN0YW5jZSB0aGUgaW5zdGFuY2Ugb2YgdGhlIG5ldyBwYXJlbnRcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmlnZ2VyKCdtb3ZlX25vZGUnLCB7IFwibm9kZVwiIDogb2JqLCBcInBhcmVudFwiIDogbmV3X3Bhci5pZCwgXCJwb3NpdGlvblwiIDogcG9zLCBcIm9sZF9wYXJlbnRcIiA6IG9sZF9wYXIsIFwiaXNfbXVsdGlcIiA6IGlzX211bHRpLCAnb2xkX2luc3RhbmNlJyA6IG9sZF9pbnMsICduZXdfaW5zdGFuY2UnIDogdGhpcyB9KTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogY29weSBhIG5vZGUgdG8gYSBuZXcgcGFyZW50XG5cdFx0ICogQG5hbWUgY29weV9ub2RlKG9iaiwgcGFyIFssIHBvcywgY2FsbGJhY2ssIGlzX2xvYWRlZF0pXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9iaiB0aGUgbm9kZSB0byBjb3B5LCBwYXNzIGFuIGFycmF5IHRvIGNvcHkgbXVsdGlwbGUgbm9kZXNcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gcGFyIHRoZSBuZXcgcGFyZW50XG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IHBvcyB0aGUgcG9zaXRpb24gdG8gaW5zZXJ0IGF0IChcImZpcnN0XCIgYW5kIFwibGFzdFwiIGFyZSBzdXBwb3J0ZWQsIGFzIHdlbGwgYXMgXCJiZWZvcmVcIiBhbmQgXCJhZnRlclwiKSwgZGVmYXVsdHMgdG8gYDBgXG5cdFx0ICogQHBhcmFtICB7ZnVuY3Rpb259IGNhbGxiYWNrIGEgZnVuY3Rpb24gdG8gY2FsbCBvbmNlIHRoZSBtb3ZlIGlzIGNvbXBsZXRlZCwgcmVjZWl2ZXMgMyBhcmd1bWVudHMgLSB0aGUgbm9kZSwgdGhlIG5ldyBwYXJlbnQgYW5kIHRoZSBwb3NpdGlvblxuXHRcdCAqIEBwYXJhbSAge0Jvb2xlYW59IGludGVybmFsIHBhcmFtZXRlciBpbmRpY2F0aW5nIGlmIHRoZSBwYXJlbnQgbm9kZSBoYXMgYmVlbiBsb2FkZWRcblx0XHQgKiBAdHJpZ2dlciBtb2RlbC5qc3RyZWUgY29weV9ub2RlLmpzdHJlZVxuXHRcdCAqL1xuXHRcdGNvcHlfbm9kZSA6IGZ1bmN0aW9uIChvYmosIHBhciwgcG9zLCBjYWxsYmFjaywgaXNfbG9hZGVkKSB7XG5cdFx0XHR2YXIgdDEsIHQyLCBkcGMsIHRtcCwgaSwgaiwgbm9kZSwgb2xkX3BhciwgbmV3X3Bhciwgb2xkX2lucywgaXNfbXVsdGk7XG5cdFx0XHRpZigkLmlzQXJyYXkob2JqKSkge1xuXHRcdFx0XHRvYmogPSBvYmoucmV2ZXJzZSgpLnNsaWNlKCk7XG5cdFx0XHRcdGZvcih0MSA9IDAsIHQyID0gb2JqLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xuXHRcdFx0XHRcdHRoaXMuY29weV9ub2RlKG9ialt0MV0sIHBhciwgcG9zLCBjYWxsYmFjaywgaXNfbG9hZGVkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdG9iaiA9IG9iaiAmJiBvYmouaWQgPyBvYmogOiB0aGlzLmdldF9ub2RlKG9iaik7XG5cdFx0XHRwYXIgPSB0aGlzLmdldF9ub2RlKHBhcik7XG5cdFx0XHRwb3MgPSBwb3MgPT09IHVuZGVmaW5lZCA/IDAgOiBwb3M7XG5cblx0XHRcdGlmKCFwYXIgfHwgIW9iaiB8fCBvYmouaWQgPT09ICcjJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRcdGlmKCFwb3MudG9TdHJpbmcoKS5tYXRjaCgvXihiZWZvcmV8YWZ0ZXIpJC8pICYmICFpc19sb2FkZWQgJiYgIXRoaXMuaXNfbG9hZGVkKHBhcikpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMubG9hZF9ub2RlKHBhciwgZnVuY3Rpb24gKCkgeyB0aGlzLmNvcHlfbm9kZShvYmosIHBhciwgcG9zLCBjYWxsYmFjaywgdHJ1ZSk7IH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRvbGRfcGFyID0gKG9iai5wYXJlbnQgfHwgJyMnKS50b1N0cmluZygpO1xuXHRcdFx0bmV3X3BhciA9ICghcG9zLnRvU3RyaW5nKCkubWF0Y2goL14oYmVmb3JlfGFmdGVyKSQvKSB8fCBwYXIuaWQgPT09ICcjJykgPyBwYXIgOiB0aGlzLmdldF9ub2RlKHBhci5wYXJlbnQpO1xuXHRcdFx0b2xkX2lucyA9IHRoaXMuX21vZGVsLmRhdGFbb2JqLmlkXSA/IHRoaXMgOiAkLmpzdHJlZS5yZWZlcmVuY2Uob2JqLmlkKTtcblx0XHRcdGlzX211bHRpID0gIW9sZF9pbnMgfHwgIW9sZF9pbnMuX2lkIHx8ICh0aGlzLl9pZCAhPT0gb2xkX2lucy5faWQpO1xuXHRcdFx0aWYobmV3X3Bhci5pZCA9PT0gJyMnKSB7XG5cdFx0XHRcdGlmKHBvcyA9PT0gXCJiZWZvcmVcIikgeyBwb3MgPSBcImZpcnN0XCI7IH1cblx0XHRcdFx0aWYocG9zID09PSBcImFmdGVyXCIpIHsgcG9zID0gXCJsYXN0XCI7IH1cblx0XHRcdH1cblx0XHRcdHN3aXRjaChwb3MpIHtcblx0XHRcdFx0Y2FzZSBcImJlZm9yZVwiOlxuXHRcdFx0XHRcdHBvcyA9ICQuaW5BcnJheShwYXIuaWQsIG5ld19wYXIuY2hpbGRyZW4pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiYWZ0ZXJcIiA6XG5cdFx0XHRcdFx0cG9zID0gJC5pbkFycmF5KHBhci5pZCwgbmV3X3Bhci5jaGlsZHJlbikgKyAxO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiaW5zaWRlXCI6XG5cdFx0XHRcdGNhc2UgXCJmaXJzdFwiOlxuXHRcdFx0XHRcdHBvcyA9IDA7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJsYXN0XCI6XG5cdFx0XHRcdFx0cG9zID0gbmV3X3Bhci5jaGlsZHJlbi5sZW5ndGg7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0aWYoIXBvcykgeyBwb3MgPSAwOyB9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZihwb3MgPiBuZXdfcGFyLmNoaWxkcmVuLmxlbmd0aCkgeyBwb3MgPSBuZXdfcGFyLmNoaWxkcmVuLmxlbmd0aDsgfVxuXHRcdFx0aWYoIXRoaXMuY2hlY2soXCJjb3B5X25vZGVcIiwgb2JqLCBuZXdfcGFyLCBwb3MpKSB7XG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuY29yZS5lcnJvci5jYWxsKHRoaXMsIHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0bm9kZSA9IG9sZF9pbnMgPyBvbGRfaW5zLmdldF9qc29uKG9iaiwgeyBub19pZCA6IHRydWUsIG5vX2RhdGEgOiB0cnVlLCBub19zdGF0ZSA6IHRydWUgfSkgOiBvYmo7XG5cdFx0XHRpZighbm9kZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRcdGlmKG5vZGUuaWQgPT09IHRydWUpIHsgZGVsZXRlIG5vZGUuaWQ7IH1cblx0XHRcdG5vZGUgPSB0aGlzLl9wYXJzZV9tb2RlbF9mcm9tX2pzb24obm9kZSwgbmV3X3Bhci5pZCwgbmV3X3Bhci5wYXJlbnRzLmNvbmNhdCgpKTtcblx0XHRcdGlmKCFub2RlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdFx0dG1wID0gdGhpcy5nZXRfbm9kZShub2RlKTtcblx0XHRcdGRwYyA9IFtdO1xuXHRcdFx0ZHBjLnB1c2gobm9kZSk7XG5cdFx0XHRkcGMgPSBkcGMuY29uY2F0KHRtcC5jaGlsZHJlbl9kKTtcblx0XHRcdHRoaXMudHJpZ2dlcignbW9kZWwnLCB7IFwibm9kZXNcIiA6IGRwYywgXCJwYXJlbnRcIiA6IG5ld19wYXIuaWQgfSk7XG5cblx0XHRcdC8vIGluc2VydCBpbnRvIG5ldyBwYXJlbnQgYW5kIHVwXG5cdFx0XHRmb3IoaSA9IDAsIGogPSBuZXdfcGFyLnBhcmVudHMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdHRoaXMuX21vZGVsLmRhdGFbbmV3X3Bhci5wYXJlbnRzW2ldXS5jaGlsZHJlbl9kID0gdGhpcy5fbW9kZWwuZGF0YVtuZXdfcGFyLnBhcmVudHNbaV1dLmNoaWxkcmVuX2QuY29uY2F0KGRwYyk7XG5cdFx0XHR9XG5cdFx0XHRkcGMgPSBbXTtcblx0XHRcdGZvcihpID0gMCwgaiA9IG5ld19wYXIuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdGRwY1tpID49IHBvcyA/IGkrMSA6IGldID0gbmV3X3Bhci5jaGlsZHJlbltpXTtcblx0XHRcdH1cblx0XHRcdGRwY1twb3NdID0gdG1wLmlkO1xuXHRcdFx0bmV3X3Bhci5jaGlsZHJlbiA9IGRwYztcblx0XHRcdG5ld19wYXIuY2hpbGRyZW5fZC5wdXNoKHRtcC5pZCk7XG5cdFx0XHRuZXdfcGFyLmNoaWxkcmVuX2QgPSBuZXdfcGFyLmNoaWxkcmVuX2QuY29uY2F0KHRtcC5jaGlsZHJlbl9kKTtcblxuXHRcdFx0dGhpcy5fbm9kZV9jaGFuZ2VkKG5ld19wYXIuaWQpO1xuXHRcdFx0dGhpcy5yZWRyYXcobmV3X3Bhci5pZCA9PT0gJyMnKTtcblx0XHRcdGlmKGNhbGxiYWNrKSB7IGNhbGxiYWNrLmNhbGwodGhpcywgdG1wLCBuZXdfcGFyLCBwb3MpOyB9XG5cdFx0XHQvKipcblx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIGEgbm9kZSBpcyBjb3BpZWRcblx0XHRcdCAqIEBldmVudFxuXHRcdFx0ICogQG5hbWUgY29weV9ub2RlLmpzdHJlZVxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGUgdGhlIGNvcGllZCBub2RlXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gb3JpZ2luYWwgdGhlIG9yaWdpbmFsIG5vZGVcblx0XHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBwYXJlbnQgdGhlIHBhcmVudCdzIElEXG5cdFx0XHQgKiBAcGFyYW0ge051bWJlcn0gcG9zaXRpb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBub2RlIGFtb25nIHRoZSBwYXJlbnQncyBjaGlsZHJlblxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IG9sZF9wYXJlbnQgdGhlIG9sZCBwYXJlbnQgb2YgdGhlIG5vZGVcblx0XHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNfbXVsdGkgZG8gdGhlIG5vZGUgYW5kIG5ldyBwYXJlbnQgYmVsb25nIHRvIGRpZmZlcmVudCBpbnN0YW5jZXNcblx0XHRcdCAqIEBwYXJhbSB7anNUcmVlfSBvbGRfaW5zdGFuY2UgdGhlIGluc3RhbmNlIHRoZSBub2RlIGNhbWUgZnJvbVxuXHRcdFx0ICogQHBhcmFtIHtqc1RyZWV9IG5ld19pbnN0YW5jZSB0aGUgaW5zdGFuY2Ugb2YgdGhlIG5ldyBwYXJlbnRcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmlnZ2VyKCdjb3B5X25vZGUnLCB7IFwibm9kZVwiIDogdG1wLCBcIm9yaWdpbmFsXCIgOiBvYmosIFwicGFyZW50XCIgOiBuZXdfcGFyLmlkLCBcInBvc2l0aW9uXCIgOiBwb3MsIFwib2xkX3BhcmVudFwiIDogb2xkX3BhciwgXCJpc19tdWx0aVwiIDogaXNfbXVsdGksICdvbGRfaW5zdGFuY2UnIDogb2xkX2lucywgJ25ld19pbnN0YW5jZScgOiB0aGlzIH0pO1xuXHRcdFx0cmV0dXJuIHRtcC5pZDtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIGN1dCBhIG5vZGUgKGEgbGF0ZXIgY2FsbCB0byBgcGFzdGUob2JqKWAgd291bGQgbW92ZSB0aGUgbm9kZSlcblx0XHQgKiBAbmFtZSBjdXQob2JqKVxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmogbXVsdGlwbGUgb2JqZWN0cyBjYW4gYmUgcGFzc2VkIHVzaW5nIGFuIGFycmF5XG5cdFx0ICogQHRyaWdnZXIgY3V0LmpzdHJlZVxuXHRcdCAqL1xuXHRcdGN1dCA6IGZ1bmN0aW9uIChvYmopIHtcblx0XHRcdGlmKCFvYmopIHsgb2JqID0gdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmNvbmNhdCgpOyB9XG5cdFx0XHRpZighJC5pc0FycmF5KG9iaikpIHsgb2JqID0gW29ial07IH1cblx0XHRcdGlmKCFvYmoubGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdFx0dmFyIHRtcCA9IFtdLCBvLCB0MSwgdDI7XG5cdFx0XHRmb3IodDEgPSAwLCB0MiA9IG9iai5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcblx0XHRcdFx0byA9IHRoaXMuZ2V0X25vZGUob2JqW3QxXSk7XG5cdFx0XHRcdGlmKG8gJiYgby5pZCAmJiBvLmlkICE9PSAnIycpIHsgdG1wLnB1c2gobyk7IH1cblx0XHRcdH1cblx0XHRcdGlmKCF0bXAubGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdFx0Y2NwX25vZGUgPSB0bXA7XG5cdFx0XHRjY3BfaW5zdCA9IHRoaXM7XG5cdFx0XHRjY3BfbW9kZSA9ICdtb3ZlX25vZGUnO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBub2RlcyBhcmUgYWRkZWQgdG8gdGhlIGJ1ZmZlciBmb3IgbW92aW5nXG5cdFx0XHQgKiBAZXZlbnRcblx0XHRcdCAqIEBuYW1lIGN1dC5qc3RyZWVcblx0XHRcdCAqIEBwYXJhbSB7QXJyYXl9IG5vZGVcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmlnZ2VyKCdjdXQnLCB7IFwibm9kZVwiIDogb2JqIH0pO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogY29weSBhIG5vZGUgKGEgbGF0ZXIgY2FsbCB0byBgcGFzdGUob2JqKWAgd291bGQgY29weSB0aGUgbm9kZSlcblx0XHQgKiBAbmFtZSBjb3B5KG9iailcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqIG11bHRpcGxlIG9iamVjdHMgY2FuIGJlIHBhc3NlZCB1c2luZyBhbiBhcnJheVxuXHRcdCAqIEB0cmlnZ2VyIGNvcHkuanN0cmVcblx0XHQgKi9cblx0XHRjb3B5IDogZnVuY3Rpb24gKG9iaikge1xuXHRcdFx0aWYoIW9iaikgeyBvYmogPSB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQuY29uY2F0KCk7IH1cblx0XHRcdGlmKCEkLmlzQXJyYXkob2JqKSkgeyBvYmogPSBbb2JqXTsgfVxuXHRcdFx0aWYoIW9iai5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XHR2YXIgdG1wID0gW10sIG8sIHQxLCB0Mjtcblx0XHRcdGZvcih0MSA9IDAsIHQyID0gb2JqLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xuXHRcdFx0XHRvID0gdGhpcy5nZXRfbm9kZShvYmpbdDFdKTtcblx0XHRcdFx0aWYobyAmJiBvLmlkICYmIG8uaWQgIT09ICcjJykgeyB0bXAucHVzaChvKTsgfVxuXHRcdFx0fVxuXHRcdFx0aWYoIXRtcC5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XHRjY3Bfbm9kZSA9IHRtcDtcblx0XHRcdGNjcF9pbnN0ID0gdGhpcztcblx0XHRcdGNjcF9tb2RlID0gJ2NvcHlfbm9kZSc7XG5cdFx0XHQvKipcblx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIG5vZGVzIGFyZSBhZGRlZCB0byB0aGUgYnVmZmVyIGZvciBjb3B5aW5nXG5cdFx0XHQgKiBAZXZlbnRcblx0XHRcdCAqIEBuYW1lIGNvcHkuanN0cmVlXG5cdFx0XHQgKiBAcGFyYW0ge0FycmF5fSBub2RlXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMudHJpZ2dlcignY29weScsIHsgXCJub2RlXCIgOiBvYmogfSk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBnZXQgdGhlIGN1cnJlbnQgYnVmZmVyIChhbnkgbm9kZXMgdGhhdCBhcmUgd2FpdGluZyBmb3IgYSBwYXN0ZSBvcGVyYXRpb24pXG5cdFx0ICogQG5hbWUgZ2V0X2J1ZmZlcigpXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSBhbiBvYmplY3QgY29uc2lzdGluZyBvZiBgbW9kZWAgKFwiY29weV9ub2RlXCIgb3IgXCJtb3ZlX25vZGVcIiksIGBub2RlYCAoYW4gYXJyYXkgb2Ygb2JqZWN0cykgYW5kIGBpbnN0YCAodGhlIGluc3RhbmNlKVxuXHRcdCAqL1xuXHRcdGdldF9idWZmZXIgOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4geyAnbW9kZScgOiBjY3BfbW9kZSwgJ25vZGUnIDogY2NwX25vZGUsICdpbnN0JyA6IGNjcF9pbnN0IH07XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBjaGVjayBpZiB0aGVyZSBpcyBzb21ldGhpbmcgaW4gdGhlIGJ1ZmZlciB0byBwYXN0ZVxuXHRcdCAqIEBuYW1lIGNhbl9wYXN0ZSgpXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0XHQgKi9cblx0XHRjYW5fcGFzdGUgOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2NwX21vZGUgIT09IGZhbHNlICYmIGNjcF9ub2RlICE9PSBmYWxzZTsgLy8gJiYgY2NwX2luc3QuX21vZGVsLmRhdGFbY2NwX25vZGVdO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogY29weSBvciBtb3ZlIHRoZSBwcmV2aW91c2x5IGN1dCBvciBjb3BpZWQgbm9kZXMgdG8gYSBuZXcgcGFyZW50XG5cdFx0ICogQG5hbWUgcGFzdGUob2JqKVxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmogdGhlIG5ldyBwYXJlbnRcblx0XHQgKiBAdHJpZ2dlciBwYXN0ZS5qc3RyZWVcblx0XHQgKi9cblx0XHRwYXN0ZSA6IGZ1bmN0aW9uIChvYmopIHtcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdGlmKCFvYmogfHwgIWNjcF9tb2RlIHx8ICFjY3BfbW9kZS5tYXRjaCgvXihjb3B5X25vZGV8bW92ZV9ub2RlKSQvKSB8fCAhY2NwX25vZGUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XHRpZih0aGlzW2NjcF9tb2RlXShjY3Bfbm9kZSwgb2JqKSkge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogdHJpZ2dlcmVkIHdoZW4gcGFzdGUgaXMgaW52b2tlZFxuXHRcdFx0XHQgKiBAZXZlbnRcblx0XHRcdFx0ICogQG5hbWUgcGFzdGUuanN0cmVlXG5cdFx0XHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBwYXJlbnQgdGhlIElEIG9mIHRoZSByZWNlaXZpbmcgbm9kZVxuXHRcdFx0XHQgKiBAcGFyYW0ge0FycmF5fSBub2RlIHRoZSBub2RlcyBpbiB0aGUgYnVmZmVyXG5cdFx0XHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBtb2RlIHRoZSBwZXJmb3JtZWQgb3BlcmF0aW9uIC0gXCJjb3B5X25vZGVcIiBvciBcIm1vdmVfbm9kZVwiXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHR0aGlzLnRyaWdnZXIoJ3Bhc3RlJywgeyBcInBhcmVudFwiIDogb2JqLmlkLCBcIm5vZGVcIiA6IGNjcF9ub2RlLCBcIm1vZGVcIiA6IGNjcF9tb2RlIH0pO1xuXHRcdFx0fVxuXHRcdFx0Y2NwX25vZGUgPSBmYWxzZTtcblx0XHRcdGNjcF9tb2RlID0gZmFsc2U7XG5cdFx0XHRjY3BfaW5zdCA9IGZhbHNlO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogcHV0IGEgbm9kZSBpbiBlZGl0IG1vZGUgKGlucHV0IGZpZWxkIHRvIHJlbmFtZSB0aGUgbm9kZSlcblx0XHQgKiBAbmFtZSBlZGl0KG9iaiBbLCBkZWZhdWx0X3RleHRdKVxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmpcblx0XHQgKiBAcGFyYW0gIHtTdHJpbmd9IGRlZmF1bHRfdGV4dCB0aGUgdGV4dCB0byBwb3B1bGF0ZSB0aGUgaW5wdXQgd2l0aCAoaWYgb21pdHRlZCB0aGUgbm9kZSB0ZXh0IHZhbHVlIGlzIHVzZWQpXG5cdFx0ICovXG5cdFx0ZWRpdCA6IGZ1bmN0aW9uIChvYmosIGRlZmF1bHRfdGV4dCkge1xuXHRcdFx0b2JqID0gdGhpcy5fb3Blbl90byhvYmopO1xuXHRcdFx0aWYoIW9iaiB8fCAhb2JqLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRcdHZhciBydGwgPSB0aGlzLl9kYXRhLmNvcmUucnRsLFxuXHRcdFx0XHR3ICA9IHRoaXMuZWxlbWVudC53aWR0aCgpLFxuXHRcdFx0XHRhICA9IG9iai5jaGlsZHJlbignLmpzdHJlZS1hbmNob3InKSxcblx0XHRcdFx0cyAgPSAkKCc8c3Bhbj4nKSxcblx0XHRcdFx0LyohXG5cdFx0XHRcdG9pID0gb2JqLmNoaWxkcmVuKFwiaTp2aXNpYmxlXCIpLFxuXHRcdFx0XHRhaSA9IGEuY2hpbGRyZW4oXCJpOnZpc2libGVcIiksXG5cdFx0XHRcdHcxID0gb2kud2lkdGgoKSAqIG9pLmxlbmd0aCxcblx0XHRcdFx0dzIgPSBhaS53aWR0aCgpICogYWkubGVuZ3RoLFxuXHRcdFx0XHQqL1xuXHRcdFx0XHR0ICA9IHR5cGVvZiBkZWZhdWx0X3RleHQgPT09ICdzdHJpbmcnID8gZGVmYXVsdF90ZXh0IDogdGhpcy5nZXRfdGV4dChvYmopLFxuXHRcdFx0XHRoMSA9ICQoXCI8XCIrXCJkaXYgLz5cIiwgeyBjc3MgOiB7IFwicG9zaXRpb25cIiA6IFwiYWJzb2x1dGVcIiwgXCJ0b3BcIiA6IFwiLTIwMHB4XCIsIFwibGVmdFwiIDogKHJ0bCA/IFwiMHB4XCIgOiBcIi0xMDAwcHhcIiksIFwidmlzaWJpbGl0eVwiIDogXCJoaWRkZW5cIiB9IH0pLmFwcGVuZFRvKFwiYm9keVwiKSxcblx0XHRcdFx0aDIgPSAkKFwiPFwiK1wiaW5wdXQgLz5cIiwge1xuXHRcdFx0XHRcdFx0XCJ2YWx1ZVwiIDogdCxcblx0XHRcdFx0XHRcdFwiY2xhc3NcIiA6IFwianN0cmVlLXJlbmFtZS1pbnB1dFwiLFxuXHRcdFx0XHRcdFx0Ly8gXCJzaXplXCIgOiB0Lmxlbmd0aCxcblx0XHRcdFx0XHRcdFwiY3NzXCIgOiB7XG5cdFx0XHRcdFx0XHRcdFwicGFkZGluZ1wiIDogXCIwXCIsXG5cdFx0XHRcdFx0XHRcdFwiYm9yZGVyXCIgOiBcIjFweCBzb2xpZCBzaWx2ZXJcIixcblx0XHRcdFx0XHRcdFx0XCJib3gtc2l6aW5nXCIgOiBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0XHRcdFx0XCJkaXNwbGF5XCIgOiBcImlubGluZS1ibG9ja1wiLFxuXHRcdFx0XHRcdFx0XHRcImhlaWdodFwiIDogKHRoaXMuX2RhdGEuY29yZS5saV9oZWlnaHQpICsgXCJweFwiLFxuXHRcdFx0XHRcdFx0XHRcImxpbmVIZWlnaHRcIiA6ICh0aGlzLl9kYXRhLmNvcmUubGlfaGVpZ2h0KSArIFwicHhcIixcblx0XHRcdFx0XHRcdFx0XCJ3aWR0aFwiIDogXCIxNTBweFwiIC8vIHdpbGwgYmUgc2V0IGEgYml0IGZ1cnRoZXIgZG93blxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFwiYmx1clwiIDogJC5wcm94eShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBpID0gcy5jaGlsZHJlbihcIi5qc3RyZWUtcmVuYW1lLWlucHV0XCIpLFxuXHRcdFx0XHRcdFx0XHRcdHYgPSBpLnZhbCgpO1xuXHRcdFx0XHRcdFx0XHRpZih2ID09PSBcIlwiKSB7IHYgPSB0OyB9XG5cdFx0XHRcdFx0XHRcdGgxLnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0XHRzLnJlcGxhY2VXaXRoKGEpO1xuXHRcdFx0XHRcdFx0XHRzLnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNldF90ZXh0KG9iaiwgdCk7XG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMucmVuYW1lX25vZGUob2JqLCB2KSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNldF90ZXh0KG9iaiwgdCk7IC8vIG1vdmUgdGhpcyB1cD8gYW5kIGZpeCAjNDgzXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sIHRoaXMpLFxuXHRcdFx0XHRcdFx0XCJrZXlkb3duXCIgOiBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGtleSA9IGV2ZW50LndoaWNoO1xuXHRcdFx0XHRcdFx0XHRpZihrZXkgPT09IDI3KSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy52YWx1ZSA9IHQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYoa2V5ID09PSAyNyB8fCBrZXkgPT09IDEzIHx8IGtleSA9PT0gMzcgfHwga2V5ID09PSAzOCB8fCBrZXkgPT09IDM5IHx8IGtleSA9PT0gNDAgfHwga2V5ID09PSAzMikge1xuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmKGtleSA9PT0gMjcgfHwga2V5ID09PSAxMykge1xuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ibHVyKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcImNsaWNrXCIgOiBmdW5jdGlvbiAoZSkgeyBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOyB9LFxuXHRcdFx0XHRcdFx0XCJtb3VzZWRvd25cIiA6IGZ1bmN0aW9uIChlKSB7IGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7IH0sXG5cdFx0XHRcdFx0XHRcImtleXVwXCIgOiBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0XHRcdFx0aDIud2lkdGgoTWF0aC5taW4oaDEudGV4dChcInBXXCIgKyB0aGlzLnZhbHVlKS53aWR0aCgpLHcpKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcImtleXByZXNzXCIgOiBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0XHRcdFx0XHRpZihldmVudC53aGljaCA9PT0gMTMpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdGZuID0ge1xuXHRcdFx0XHRcdFx0Zm9udEZhbWlseVx0XHQ6IGEuY3NzKCdmb250RmFtaWx5JylcdFx0fHwgJycsXG5cdFx0XHRcdFx0XHRmb250U2l6ZVx0XHQ6IGEuY3NzKCdmb250U2l6ZScpXHRcdFx0fHwgJycsXG5cdFx0XHRcdFx0XHRmb250V2VpZ2h0XHRcdDogYS5jc3MoJ2ZvbnRXZWlnaHQnKVx0XHR8fCAnJyxcblx0XHRcdFx0XHRcdGZvbnRTdHlsZVx0XHQ6IGEuY3NzKCdmb250U3R5bGUnKVx0XHR8fCAnJyxcblx0XHRcdFx0XHRcdGZvbnRTdHJldGNoXHRcdDogYS5jc3MoJ2ZvbnRTdHJldGNoJylcdFx0fHwgJycsXG5cdFx0XHRcdFx0XHRmb250VmFyaWFudFx0XHQ6IGEuY3NzKCdmb250VmFyaWFudCcpXHRcdHx8ICcnLFxuXHRcdFx0XHRcdFx0bGV0dGVyU3BhY2luZ1x0OiBhLmNzcygnbGV0dGVyU3BhY2luZycpXHR8fCAnJyxcblx0XHRcdFx0XHRcdHdvcmRTcGFjaW5nXHRcdDogYS5jc3MoJ3dvcmRTcGFjaW5nJylcdFx0fHwgJydcblx0XHRcdFx0fTtcblx0XHRcdHRoaXMuc2V0X3RleHQob2JqLCBcIlwiKTtcblx0XHRcdHMuYXR0cignY2xhc3MnLCBhLmF0dHIoJ2NsYXNzJykpLmFwcGVuZChhLmNvbnRlbnRzKCkuY2xvbmUoKSkuYXBwZW5kKGgyKTtcblx0XHRcdGEucmVwbGFjZVdpdGgocyk7XG5cdFx0XHRoMS5jc3MoZm4pO1xuXHRcdFx0aDIuY3NzKGZuKS53aWR0aChNYXRoLm1pbihoMS50ZXh0KFwicFdcIiArIGgyWzBdLnZhbHVlKS53aWR0aCgpLHcpKVswXS5zZWxlY3QoKTtcblx0XHR9LFxuXG5cblx0XHQvKipcblx0XHQgKiBjaGFuZ2VzIHRoZSB0aGVtZVxuXHRcdCAqIEBuYW1lIHNldF90aGVtZSh0aGVtZV9uYW1lIFssIHRoZW1lX3VybF0pXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHRoZW1lX25hbWUgdGhlIG5hbWUgb2YgdGhlIG5ldyB0aGVtZSB0byBhcHBseVxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IHRoZW1lX3VybCAgdGhlIGxvY2F0aW9uIG9mIHRoZSBDU1MgZmlsZSBmb3IgdGhpcyB0aGVtZS4gT21pdCBvciBzZXQgdG8gYGZhbHNlYCBpZiB5b3UgbWFudWFsbHkgaW5jbHVkZWQgdGhlIGZpbGUuIFNldCB0byBgdHJ1ZWAgdG8gYXV0b2xvYWQgZnJvbSB0aGUgYGNvcmUudGhlbWVzLmRpcmAgZGlyZWN0b3J5LlxuXHRcdCAqIEB0cmlnZ2VyIHNldF90aGVtZS5qc3RyZWVcblx0XHQgKi9cblx0XHRzZXRfdGhlbWUgOiBmdW5jdGlvbiAodGhlbWVfbmFtZSwgdGhlbWVfdXJsKSB7XG5cdFx0XHRpZighdGhlbWVfbmFtZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRcdGlmKHRoZW1lX3VybCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHR2YXIgZGlyID0gdGhpcy5zZXR0aW5ncy5jb3JlLnRoZW1lcy5kaXI7XG5cdFx0XHRcdGlmKCFkaXIpIHsgZGlyID0gJC5qc3RyZWUucGF0aCArICcvdGhlbWVzJzsgfVxuXHRcdFx0XHR0aGVtZV91cmwgPSBkaXIgKyAnLycgKyB0aGVtZV9uYW1lICsgJy9zdHlsZS5jc3MnO1xuXHRcdFx0fVxuXHRcdFx0aWYodGhlbWVfdXJsICYmICQuaW5BcnJheSh0aGVtZV91cmwsIHRoZW1lc19sb2FkZWQpID09PSAtMSkge1xuXHRcdFx0XHQkKCdoZWFkJykuYXBwZW5kKCc8JysnbGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIicgKyB0aGVtZV91cmwgKyAnXCIgdHlwZT1cInRleHQvY3NzXCIgLz4nKTtcblx0XHRcdFx0dGhlbWVzX2xvYWRlZC5wdXNoKHRoZW1lX3VybCk7XG5cdFx0XHR9XG5cdFx0XHRpZih0aGlzLl9kYXRhLmNvcmUudGhlbWVzLm5hbWUpIHtcblx0XHRcdFx0dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCdqc3RyZWUtJyArIHRoaXMuX2RhdGEuY29yZS50aGVtZXMubmFtZSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9kYXRhLmNvcmUudGhlbWVzLm5hbWUgPSB0aGVtZV9uYW1lO1xuXHRcdFx0dGhpcy5lbGVtZW50LmFkZENsYXNzKCdqc3RyZWUtJyArIHRoZW1lX25hbWUpO1xuXHRcdFx0dGhpcy5lbGVtZW50W3RoaXMuc2V0dGluZ3MuY29yZS50aGVtZXMucmVzcG9uc2l2ZSA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnIF0oJ2pzdHJlZS0nICsgdGhlbWVfbmFtZSArICctcmVzcG9uc2l2ZScpO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhIHRoZW1lIGlzIHNldFxuXHRcdFx0ICogQGV2ZW50XG5cdFx0XHQgKiBAbmFtZSBzZXRfdGhlbWUuanN0cmVlXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdGhlbWUgdGhlIG5ldyB0aGVtZVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnRyaWdnZXIoJ3NldF90aGVtZScsIHsgJ3RoZW1lJyA6IHRoZW1lX25hbWUgfSk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBnZXRzIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgYXBwbGllZCB0aGVtZSBuYW1lXG5cdFx0ICogQG5hbWUgZ2V0X3RoZW1lKClcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9XG5cdFx0ICovXG5cdFx0Z2V0X3RoZW1lIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5uYW1lOyB9LFxuXHRcdC8qKlxuXHRcdCAqIGNoYW5nZXMgdGhlIHRoZW1lIHZhcmlhbnQgKGlmIHRoZSB0aGVtZSBoYXMgdmFyaWFudHMpXG5cdFx0ICogQG5hbWUgc2V0X3RoZW1lX3ZhcmlhbnQodmFyaWFudF9uYW1lKVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfEJvb2xlYW59IHZhcmlhbnRfbmFtZSB0aGUgdmFyaWFudCB0byBhcHBseSAoaWYgYGZhbHNlYCBpcyB1c2VkIHRoZSBjdXJyZW50IHZhcmlhbnQgaXMgcmVtb3ZlZClcblx0XHQgKi9cblx0XHRzZXRfdGhlbWVfdmFyaWFudCA6IGZ1bmN0aW9uICh2YXJpYW50X25hbWUpIHtcblx0XHRcdGlmKHRoaXMuX2RhdGEuY29yZS50aGVtZXMudmFyaWFudCkge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2pzdHJlZS0nICsgdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5uYW1lICsgJy0nICsgdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy52YXJpYW50KTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2RhdGEuY29yZS50aGVtZXMudmFyaWFudCA9IHZhcmlhbnRfbmFtZTtcblx0XHRcdGlmKHZhcmlhbnRfbmFtZSkge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoJ2pzdHJlZS0nICsgdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5uYW1lICsgJy0nICsgdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy52YXJpYW50KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIGdldHMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBhcHBsaWVkIHRoZW1lIHZhcmlhbnRcblx0XHQgKiBAbmFtZSBnZXRfdGhlbWUoKVxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ31cblx0XHQgKi9cblx0XHRnZXRfdGhlbWVfdmFyaWFudCA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RhdGEuY29yZS50aGVtZXMudmFyaWFudDsgfSxcblx0XHQvKipcblx0XHQgKiBzaG93cyBhIHN0cmlwZWQgYmFja2dyb3VuZCBvbiB0aGUgY29udGFpbmVyIChpZiB0aGUgdGhlbWUgc3VwcG9ydHMgaXQpXG5cdFx0ICogQG5hbWUgc2hvd19zdHJpcGVzKClcblx0XHQgKi9cblx0XHRzaG93X3N0cmlwZXMgOiBmdW5jdGlvbiAoKSB7IHRoaXMuX2RhdGEuY29yZS50aGVtZXMuc3RyaXBlcyA9IHRydWU7IHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLmFkZENsYXNzKFwianN0cmVlLXN0cmlwZWRcIik7IH0sXG5cdFx0LyoqXG5cdFx0ICogaGlkZXMgdGhlIHN0cmlwZWQgYmFja2dyb3VuZCBvbiB0aGUgY29udGFpbmVyXG5cdFx0ICogQG5hbWUgaGlkZV9zdHJpcGVzKClcblx0XHQgKi9cblx0XHRoaWRlX3N0cmlwZXMgOiBmdW5jdGlvbiAoKSB7IHRoaXMuX2RhdGEuY29yZS50aGVtZXMuc3RyaXBlcyA9IGZhbHNlOyB0aGlzLmdldF9jb250YWluZXJfdWwoKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1zdHJpcGVkXCIpOyB9LFxuXHRcdC8qKlxuXHRcdCAqIHRvZ2dsZXMgdGhlIHN0cmlwZWQgYmFja2dyb3VuZCBvbiB0aGUgY29udGFpbmVyXG5cdFx0ICogQG5hbWUgdG9nZ2xlX3N0cmlwZXMoKVxuXHRcdCAqL1xuXHRcdHRvZ2dsZV9zdHJpcGVzIDogZnVuY3Rpb24gKCkgeyBpZih0aGlzLl9kYXRhLmNvcmUudGhlbWVzLnN0cmlwZXMpIHsgdGhpcy5oaWRlX3N0cmlwZXMoKTsgfSBlbHNlIHsgdGhpcy5zaG93X3N0cmlwZXMoKTsgfSB9LFxuXHRcdC8qKlxuXHRcdCAqIHNob3dzIHRoZSBjb25uZWN0aW5nIGRvdHMgKGlmIHRoZSB0aGVtZSBzdXBwb3J0cyBpdClcblx0XHQgKiBAbmFtZSBzaG93X2RvdHMoKVxuXHRcdCAqL1xuXHRcdHNob3dfZG90cyA6IGZ1bmN0aW9uICgpIHsgdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5kb3RzID0gdHJ1ZTsgdGhpcy5nZXRfY29udGFpbmVyX3VsKCkucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtbm8tZG90c1wiKTsgfSxcblx0XHQvKipcblx0XHQgKiBoaWRlcyB0aGUgY29ubmVjdGluZyBkb3RzXG5cdFx0ICogQG5hbWUgaGlkZV9kb3RzKClcblx0XHQgKi9cblx0XHRoaWRlX2RvdHMgOiBmdW5jdGlvbiAoKSB7IHRoaXMuX2RhdGEuY29yZS50aGVtZXMuZG90cyA9IGZhbHNlOyB0aGlzLmdldF9jb250YWluZXJfdWwoKS5hZGRDbGFzcyhcImpzdHJlZS1uby1kb3RzXCIpOyB9LFxuXHRcdC8qKlxuXHRcdCAqIHRvZ2dsZXMgdGhlIGNvbm5lY3RpbmcgZG90c1xuXHRcdCAqIEBuYW1lIHRvZ2dsZV9kb3RzKClcblx0XHQgKi9cblx0XHR0b2dnbGVfZG90cyA6IGZ1bmN0aW9uICgpIHsgaWYodGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5kb3RzKSB7IHRoaXMuaGlkZV9kb3RzKCk7IH0gZWxzZSB7IHRoaXMuc2hvd19kb3RzKCk7IH0gfSxcblx0XHQvKipcblx0XHQgKiBzaG93IHRoZSBub2RlIGljb25zXG5cdFx0ICogQG5hbWUgc2hvd19pY29ucygpXG5cdFx0ICovXG5cdFx0c2hvd19pY29ucyA6IGZ1bmN0aW9uICgpIHsgdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5pY29ucyA9IHRydWU7IHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLnJlbW92ZUNsYXNzKFwianN0cmVlLW5vLWljb25zXCIpOyB9LFxuXHRcdC8qKlxuXHRcdCAqIGhpZGUgdGhlIG5vZGUgaWNvbnNcblx0XHQgKiBAbmFtZSBoaWRlX2ljb25zKClcblx0XHQgKi9cblx0XHRoaWRlX2ljb25zIDogZnVuY3Rpb24gKCkgeyB0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmljb25zID0gZmFsc2U7IHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLmFkZENsYXNzKFwianN0cmVlLW5vLWljb25zXCIpOyB9LFxuXHRcdC8qKlxuXHRcdCAqIHRvZ2dsZSB0aGUgbm9kZSBpY29uc1xuXHRcdCAqIEBuYW1lIHRvZ2dsZV9pY29ucygpXG5cdFx0ICovXG5cdFx0dG9nZ2xlX2ljb25zIDogZnVuY3Rpb24gKCkgeyBpZih0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmljb25zKSB7IHRoaXMuaGlkZV9pY29ucygpOyB9IGVsc2UgeyB0aGlzLnNob3dfaWNvbnMoKTsgfSB9LFxuXHRcdC8qKlxuXHRcdCAqIHNldCB0aGUgbm9kZSBpY29uIGZvciBhIG5vZGVcblx0XHQgKiBAbmFtZSBzZXRfaWNvbihvYmosIGljb24pXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gb2JqXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IGljb24gdGhlIG5ldyBpY29uIC0gY2FuIGJlIGEgcGF0aCB0byBhbiBpY29uIG9yIGEgY2xhc3NOYW1lLCBpZiB1c2luZyBhbiBpbWFnZSB0aGF0IGlzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB1c2UgYSBgLi9gIHByZWZpeCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGV0ZWN0ZWQgYXMgYSBjbGFzc1xuXHRcdCAqL1xuXHRcdHNldF9pY29uIDogZnVuY3Rpb24gKG9iaiwgaWNvbikge1xuXHRcdFx0dmFyIHQxLCB0MiwgZG9tLCBvbGQ7XG5cdFx0XHRpZigkLmlzQXJyYXkob2JqKSkge1xuXHRcdFx0XHRvYmogPSBvYmouc2xpY2UoKTtcblx0XHRcdFx0Zm9yKHQxID0gMCwgdDIgPSBvYmoubGVuZ3RoOyB0MSA8IHQyOyB0MSsrKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRfaWNvbihvYmpbdDFdLCBpY29uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdGlmKCFvYmogfHwgb2JqLmlkID09PSAnIycpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XHRvbGQgPSBvYmouaWNvbjtcblx0XHRcdG9iai5pY29uID0gaWNvbjtcblx0XHRcdGRvbSA9IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmNoaWxkcmVuKFwiLmpzdHJlZS10aGVtZWljb25cIik7XG5cdFx0XHRpZihpY29uID09PSBmYWxzZSkge1xuXHRcdFx0XHR0aGlzLmhpZGVfaWNvbihvYmopO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZihpY29uID09PSB0cnVlKSB7XG5cdFx0XHRcdGRvbS5yZW1vdmVDbGFzcygnanN0cmVlLXRoZW1laWNvbi1jdXN0b20gJyArIG9sZCkuY3NzKFwiYmFja2dyb3VuZFwiLFwiXCIpLnJlbW92ZUF0dHIoXCJyZWxcIik7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKGljb24uaW5kZXhPZihcIi9cIikgPT09IC0xICYmIGljb24uaW5kZXhPZihcIi5cIikgPT09IC0xKSB7XG5cdFx0XHRcdGRvbS5yZW1vdmVDbGFzcyhvbGQpLmNzcyhcImJhY2tncm91bmRcIixcIlwiKTtcblx0XHRcdFx0ZG9tLmFkZENsYXNzKGljb24gKyAnIGpzdHJlZS10aGVtZWljb24tY3VzdG9tJykuYXR0cihcInJlbFwiLGljb24pO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGRvbS5yZW1vdmVDbGFzcyhvbGQpLmNzcyhcImJhY2tncm91bmRcIixcIlwiKTtcblx0XHRcdFx0ZG9tLmFkZENsYXNzKCdqc3RyZWUtdGhlbWVpY29uLWN1c3RvbScpLmNzcyhcImJhY2tncm91bmRcIiwgXCJ1cmwoJ1wiICsgaWNvbiArIFwiJykgY2VudGVyIGNlbnRlciBuby1yZXBlYXRcIikuYXR0cihcInJlbFwiLGljb24pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBnZXQgdGhlIG5vZGUgaWNvbiBmb3IgYSBub2RlXG5cdFx0ICogQG5hbWUgZ2V0X2ljb24ob2JqKVxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG9ialxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ31cblx0XHQgKi9cblx0XHRnZXRfaWNvbiA6IGZ1bmN0aW9uIChvYmopIHtcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdHJldHVybiAoIW9iaiB8fCBvYmouaWQgPT09ICcjJykgPyBmYWxzZSA6IG9iai5pY29uO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogaGlkZSB0aGUgaWNvbiBvbiBhbiBpbmRpdmlkdWFsIG5vZGVcblx0XHQgKiBAbmFtZSBoaWRlX2ljb24ob2JqKVxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG9ialxuXHRcdCAqL1xuXHRcdGhpZGVfaWNvbiA6IGZ1bmN0aW9uIChvYmopIHtcblx0XHRcdHZhciB0MSwgdDI7XG5cdFx0XHRpZigkLmlzQXJyYXkob2JqKSkge1xuXHRcdFx0XHRvYmogPSBvYmouc2xpY2UoKTtcblx0XHRcdFx0Zm9yKHQxID0gMCwgdDIgPSBvYmoubGVuZ3RoOyB0MSA8IHQyOyB0MSsrKSB7XG5cdFx0XHRcdFx0dGhpcy5oaWRlX2ljb24ob2JqW3QxXSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XG5cdFx0XHRpZighb2JqIHx8IG9iaiA9PT0gJyMnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdFx0b2JqLmljb24gPSBmYWxzZTtcblx0XHRcdHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKS5jaGlsZHJlbihcImFcIikuY2hpbGRyZW4oXCIuanN0cmVlLXRoZW1laWNvblwiKS5hZGRDbGFzcygnanN0cmVlLXRoZW1laWNvbi1oaWRkZW4nKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogc2hvdyB0aGUgaWNvbiBvbiBhbiBpbmRpdmlkdWFsIG5vZGVcblx0XHQgKiBAbmFtZSBzaG93X2ljb24ob2JqKVxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG9ialxuXHRcdCAqL1xuXHRcdHNob3dfaWNvbiA6IGZ1bmN0aW9uIChvYmopIHtcblx0XHRcdHZhciB0MSwgdDIsIGRvbTtcblx0XHRcdGlmKCQuaXNBcnJheShvYmopKSB7XG5cdFx0XHRcdG9iaiA9IG9iai5zbGljZSgpO1xuXHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IG9iai5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcblx0XHRcdFx0XHR0aGlzLnNob3dfaWNvbihvYmpbdDFdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdGlmKCFvYmogfHwgb2JqID09PSAnIycpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XHRkb20gPSB0aGlzLmdldF9ub2RlKG9iaiwgdHJ1ZSk7XG5cdFx0XHRvYmouaWNvbiA9IGRvbS5sZW5ndGggPyBkb20uY2hpbGRyZW4oXCJhXCIpLmNoaWxkcmVuKFwiLmpzdHJlZS10aGVtZWljb25cIikuYXR0cigncmVsJykgOiB0cnVlO1xuXHRcdFx0aWYoIW9iai5pY29uKSB7IG9iai5pY29uID0gdHJ1ZTsgfVxuXHRcdFx0ZG9tLmNoaWxkcmVuKFwiYVwiKS5jaGlsZHJlbihcIi5qc3RyZWUtdGhlbWVpY29uXCIpLnJlbW92ZUNsYXNzKCdqc3RyZWUtdGhlbWVpY29uLWhpZGRlbicpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIGhlbHBlcnNcblx0JC52YWthdGEgPSB7fTtcblx0Ly8gcmV2ZXJzZVxuXHQkLmZuLnZha2F0YV9yZXZlcnNlID0gW10ucmV2ZXJzZTtcblx0Ly8gY29sbGVjdCBhdHRyaWJ1dGVzXG5cdCQudmFrYXRhLmF0dHJpYnV0ZXMgPSBmdW5jdGlvbihub2RlLCB3aXRoX3ZhbHVlcykge1xuXHRcdG5vZGUgPSAkKG5vZGUpWzBdO1xuXHRcdHZhciBhdHRyID0gd2l0aF92YWx1ZXMgPyB7fSA6IFtdO1xuXHRcdGlmKG5vZGUgJiYgbm9kZS5hdHRyaWJ1dGVzKSB7XG5cdFx0XHQkLmVhY2gobm9kZS5hdHRyaWJ1dGVzLCBmdW5jdGlvbiAoaSwgdikge1xuXHRcdFx0XHRpZigkLmluQXJyYXkodi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFsnc3R5bGUnLCdjb250ZW50ZWRpdGFibGUnLCdoYXNmb2N1cycsJ3RhYmluZGV4J10pICE9PSAtMSkgeyByZXR1cm47IH1cblx0XHRcdFx0aWYodi5ub2RlVmFsdWUgIT09IG51bGwgJiYgJC50cmltKHYubm9kZVZhbHVlKSAhPT0gJycpIHtcblx0XHRcdFx0XHRpZih3aXRoX3ZhbHVlcykgeyBhdHRyW3Yubm9kZU5hbWVdID0gdi5ub2RlVmFsdWU7IH1cblx0XHRcdFx0XHRlbHNlIHsgYXR0ci5wdXNoKHYubm9kZU5hbWUpOyB9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYXR0cjtcblx0fTtcblx0JC52YWthdGEuYXJyYXlfdW5pcXVlID0gZnVuY3Rpb24oYXJyYXkpIHtcblx0XHR2YXIgYSA9IFtdLCBpLCBqLCBsO1xuXHRcdGZvcihpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Zm9yKGogPSAwOyBqIDw9IGk7IGorKykge1xuXHRcdFx0XHRpZihhcnJheVtpXSA9PT0gYXJyYXlbal0pIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYoaiA9PT0gaSkgeyBhLnB1c2goYXJyYXlbaV0pOyB9XG5cdFx0fVxuXHRcdHJldHVybiBhO1xuXHR9O1xuXHQvLyByZW1vdmUgaXRlbSBmcm9tIGFycmF5XG5cdCQudmFrYXRhLmFycmF5X3JlbW92ZSA9IGZ1bmN0aW9uKGFycmF5LCBmcm9tLCB0bykge1xuXHRcdHZhciByZXN0ID0gYXJyYXkuc2xpY2UoKHRvIHx8IGZyb20pICsgMSB8fCBhcnJheS5sZW5ndGgpO1xuXHRcdGFycmF5Lmxlbmd0aCA9IGZyb20gPCAwID8gYXJyYXkubGVuZ3RoICsgZnJvbSA6IGZyb207XG5cdFx0YXJyYXkucHVzaC5hcHBseShhcnJheSwgcmVzdCk7XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9O1xuXHQvLyByZW1vdmUgaXRlbSBmcm9tIGFycmF5XG5cdCQudmFrYXRhLmFycmF5X3JlbW92ZV9pdGVtID0gZnVuY3Rpb24oYXJyYXksIGl0ZW0pIHtcblx0XHR2YXIgdG1wID0gJC5pbkFycmF5KGl0ZW0sIGFycmF5KTtcblx0XHRyZXR1cm4gdG1wICE9PSAtMSA/ICQudmFrYXRhLmFycmF5X3JlbW92ZShhcnJheSwgdG1wKSA6IGFycmF5O1xuXHR9O1xuXHQvLyBicm93c2VyIHNuaWZmaW5nXG5cdChmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIGJyb3dzZXIgPSB7fSxcblx0XHRcdGJfbWF0Y2ggPSBmdW5jdGlvbih1YSkge1xuXHRcdFx0dWEgPSB1YS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHR2YXIgbWF0Y2ggPVx0LyhjaHJvbWUpWyBcXC9dKFtcXHcuXSspLy5leGVjKCB1YSApIHx8XG5cdFx0XHRcdFx0XHQvKHdlYmtpdClbIFxcL10oW1xcdy5dKykvLmV4ZWMoIHVhICkgfHxcblx0XHRcdFx0XHRcdC8ob3BlcmEpKD86Lip2ZXJzaW9ufClbIFxcL10oW1xcdy5dKykvLmV4ZWMoIHVhICkgfHxcblx0XHRcdFx0XHRcdC8obXNpZSkgKFtcXHcuXSspLy5leGVjKCB1YSApIHx8XG5cdFx0XHRcdFx0XHQodWEuaW5kZXhPZihcImNvbXBhdGlibGVcIikgPCAwICYmIC8obW96aWxsYSkoPzouKj8gcnY6KFtcXHcuXSspfCkvLmV4ZWMoIHVhICkpIHx8XG5cdFx0XHRcdFx0XHRbXTtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRicm93c2VyOiBtYXRjaFsxXSB8fCBcIlwiLFxuXHRcdFx0XHRcdHZlcnNpb246IG1hdGNoWzJdIHx8IFwiMFwiXG5cdFx0XHRcdH07XG5cdFx0XHR9LFxuXHRcdFx0bWF0Y2hlZCA9IGJfbWF0Y2god2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO1xuXHRcdGlmKG1hdGNoZWQuYnJvd3Nlcikge1xuXHRcdFx0YnJvd3NlclsgbWF0Y2hlZC5icm93c2VyIF0gPSB0cnVlO1xuXHRcdFx0YnJvd3Nlci52ZXJzaW9uID0gbWF0Y2hlZC52ZXJzaW9uO1xuXHRcdH1cblx0XHRpZihicm93c2VyLmNocm9tZSkge1xuXHRcdFx0YnJvd3Nlci53ZWJraXQgPSB0cnVlO1xuXHRcdH1cblx0XHRlbHNlIGlmKGJyb3dzZXIud2Via2l0KSB7XG5cdFx0XHRicm93c2VyLnNhZmFyaSA9IHRydWU7XG5cdFx0fVxuXHRcdCQudmFrYXRhLmJyb3dzZXIgPSBicm93c2VyO1xuXHR9KCkpO1xuXHRpZigkLnZha2F0YS5icm93c2VyLm1zaWUgJiYgJC52YWthdGEuYnJvd3Nlci52ZXJzaW9uIDwgOCkge1xuXHRcdCQuanN0cmVlLmRlZmF1bHRzLmNvcmUuYW5pbWF0aW9uID0gMDtcblx0fVxuXG4vKipcbiAqICMjIyBDaGVja2JveCBwbHVnaW5cbiAqXG4gKiBUaGlzIHBsdWdpbiByZW5kZXJzIGNoZWNrYm94IGljb25zIGluIGZyb250IG9mIGVhY2ggbm9kZSwgbWFraW5nIG11bHRpcGxlIHNlbGVjdGlvbiBtdWNoIGVhc2llci4gXG4gKiBJdCBhbHNvIHN1cHBvcnRzIHRyaS1zdGF0ZSBiZWhhdmlvciwgbWVhbmluZyB0aGF0IGlmIGEgbm9kZSBoYXMgYSBmZXcgb2YgaXRzIGNoaWxkcmVuIGNoZWNrZWQgaXQgd2lsbCBiZSByZW5kZXJlZCBhcyB1bmRldGVybWluZWQsIGFuZCBzdGF0ZSB3aWxsIGJlIHByb3BhZ2F0ZWQgdXAuXG4gKi9cblxuXHR2YXIgX2kgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdJJyk7XG5cdF9pLmNsYXNzTmFtZSA9ICdqc3RyZWUtaWNvbiBqc3RyZWUtY2hlY2tib3gnO1xuXHQvKipcblx0ICogc3RvcmVzIGFsbCBkZWZhdWx0cyBmb3IgdGhlIGNoZWNrYm94IHBsdWdpblxuXHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5jaGVja2JveFxuXHQgKiBAcGx1Z2luIGNoZWNrYm94XG5cdCAqL1xuXHQkLmpzdHJlZS5kZWZhdWx0cy5jaGVja2JveCA9IHtcblx0XHQvKipcblx0XHQgKiBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBjaGVja2JveGVzIHNob3VsZCBiZSB2aXNpYmxlIChjYW4gYmUgY2hhbmdlZCBhdCBhIGxhdGVyIHRpbWUgdXNpbmcgYHNob3dfY2hlY2tib3hlcygpYCBhbmQgYGhpZGVfY2hlY2tib3hlc2ApLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY2hlY2tib3gudmlzaWJsZVxuXHRcdCAqIEBwbHVnaW4gY2hlY2tib3hcblx0XHQgKi9cblx0XHR2aXNpYmxlXHRcdFx0XHQ6IHRydWUsXG5cdFx0LyoqXG5cdFx0ICogYSBib29sZWFuIGluZGljYXRpbmcgaWYgY2hlY2tib3hlcyBzaG91bGQgY2FzY2FkZSBkb3duIGFuZCBoYXZlIGFuIHVuZGV0ZXJtaW5lZCBzdGF0ZS4gRGVmYXVsdHMgdG8gYHRydWVgLlxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNoZWNrYm94LnRocmVlX3N0YXRlXG5cdFx0ICogQHBsdWdpbiBjaGVja2JveFxuXHRcdCAqL1xuXHRcdHRocmVlX3N0YXRlXHRcdFx0OiB0cnVlLFxuXHRcdC8qKlxuXHRcdCAqIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGNsaWNraW5nIGFueXdoZXJlIG9uIHRoZSBub2RlIHNob3VsZCBhY3QgYXMgY2xpY2tpbmcgb24gdGhlIGNoZWNrYm94LiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY2hlY2tib3gud2hvbGVfbm9kZVxuXHRcdCAqIEBwbHVnaW4gY2hlY2tib3hcblx0XHQgKi9cblx0XHR3aG9sZV9ub2RlXHRcdFx0OiB0cnVlLFxuXHRcdC8qKlxuXHRcdCAqIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBzZWxlY3RlZCBzdHlsZSBvZiBhIG5vZGUgc2hvdWxkIGJlIGtlcHQsIG9yIHJlbW92ZWQuIERlZmF1bHRzIHRvIGB0cnVlYC5cblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5jaGVja2JveC5rZWVwX3NlbGVjdGVkX3N0eWxlXG5cdFx0ICogQHBsdWdpbiBjaGVja2JveFxuXHRcdCAqL1xuXHRcdGtlZXBfc2VsZWN0ZWRfc3R5bGVcdDogdHJ1ZVxuXHR9O1xuXHQkLmpzdHJlZS5wbHVnaW5zLmNoZWNrYm94ID0gZnVuY3Rpb24gKG9wdGlvbnMsIHBhcmVudCkge1xuXHRcdHRoaXMuYmluZCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHBhcmVudC5iaW5kLmNhbGwodGhpcyk7XG5cdFx0XHR0aGlzLl9kYXRhLmNoZWNrYm94LnV0byA9IGZhbHNlO1xuXHRcdFx0dGhpcy5lbGVtZW50XG5cdFx0XHRcdC5vbihcImluaXQuanN0cmVlXCIsICQucHJveHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fZGF0YS5jaGVja2JveC52aXNpYmxlID0gdGhpcy5zZXR0aW5ncy5jaGVja2JveC52aXNpYmxlO1xuXHRcdFx0XHRcdFx0aWYoIXRoaXMuc2V0dGluZ3MuY2hlY2tib3gua2VlcF9zZWxlY3RlZF9zdHlsZSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoJ2pzdHJlZS1jaGVja2JveC1uby1jbGlja2VkJyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSwgdGhpcykpXG5cdFx0XHRcdC5vbihcImxvYWRpbmcuanN0cmVlXCIsICQucHJveHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0dGhpc1sgdGhpcy5fZGF0YS5jaGVja2JveC52aXNpYmxlID8gJ3Nob3dfY2hlY2tib3hlcycgOiAnaGlkZV9jaGVja2JveGVzJyBdKCk7XG5cdFx0XHRcdFx0fSwgdGhpcykpO1xuXHRcdFx0aWYodGhpcy5zZXR0aW5ncy5jaGVja2JveC50aHJlZV9zdGF0ZSkge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQub24oJ2NoYW5nZWQuanN0cmVlIG1vdmVfbm9kZS5qc3RyZWUgY29weV9ub2RlLmpzdHJlZSByZWRyYXcuanN0cmVlIG9wZW5fbm9kZS5qc3RyZWUnLCAkLnByb3h5KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5fZGF0YS5jaGVja2JveC51dG8pIHsgY2xlYXJUaW1lb3V0KHRoaXMuX2RhdGEuY2hlY2tib3gudXRvKTsgfVxuXHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNoZWNrYm94LnV0byA9IHNldFRpbWVvdXQoJC5wcm94eSh0aGlzLl91bmRldGVybWluZWQsIHRoaXMpLCA1MCk7XG5cdFx0XHRcdFx0XHR9LCB0aGlzKSlcblx0XHRcdFx0XHQub24oJ21vZGVsLmpzdHJlZScsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG0gPSB0aGlzLl9tb2RlbC5kYXRhLFxuXHRcdFx0XHRcdFx0XHRcdHAgPSBtW2RhdGEucGFyZW50XSxcblx0XHRcdFx0XHRcdFx0XHRkcGMgPSBkYXRhLm5vZGVzLFxuXHRcdFx0XHRcdFx0XHRcdGNoZCA9IFtdLFxuXHRcdFx0XHRcdFx0XHRcdGMsIGksIGosIGssIGwsIHRtcDtcblxuXHRcdFx0XHRcdFx0XHQvLyBhcHBseSBkb3duXG5cdFx0XHRcdFx0XHRcdGlmKHAuc3RhdGUuc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSBkcGMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtW2RwY1tpXV0uc3RhdGUuc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQgPSB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQuY29uY2F0KGRwYyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gZHBjLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYobVtkcGNbaV1dLnN0YXRlLnNlbGVjdGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcihrID0gMCwgbCA9IG1bZHBjW2ldXS5jaGlsZHJlbl9kLmxlbmd0aDsgayA8IGw7IGsrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1bbVtkcGNbaV1dLmNoaWxkcmVuX2Rba11dLnN0YXRlLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQgPSB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQuY29uY2F0KG1bZHBjW2ldXS5jaGlsZHJlbl9kKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBhcHBseSB1cFxuXHRcdFx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSBwLmNoaWxkcmVuX2QubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoIW1bcC5jaGlsZHJlbl9kW2ldXS5jaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNoZC5wdXNoKG1bcC5jaGlsZHJlbl9kW2ldXS5wYXJlbnQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjaGQgPSAkLnZha2F0YS5hcnJheV91bmlxdWUoY2hkKTtcblx0XHRcdFx0XHRcdFx0Zm9yKGsgPSAwLCBsID0gY2hkLmxlbmd0aDsgayA8IGw7IGsrKykge1xuXHRcdFx0XHRcdFx0XHRcdHAgPSBtW2NoZFtrXV07XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUocCAmJiBwLmlkICE9PSAnIycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGMgPSAwO1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gcC5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YyArPSBtW3AuY2hpbGRyZW5baV1dLnN0YXRlLnNlbGVjdGVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYoYyA9PT0gaikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwLnN0YXRlLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLnB1c2gocC5pZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRtcCA9IHRoaXMuZ2V0X25vZGUocCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHRtcCAmJiB0bXAubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG1wLmNoaWxkcmVuKCcuanN0cmVlLWFuY2hvcicpLmFkZENsYXNzKCdqc3RyZWUtY2xpY2tlZCcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRwID0gdGhpcy5nZXRfbm9kZShwLnBhcmVudCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCA9ICQudmFrYXRhLmFycmF5X3VuaXF1ZSh0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQpO1xuXHRcdFx0XHRcdFx0fSwgdGhpcykpXG5cdFx0XHRcdFx0Lm9uKCdzZWxlY3Rfbm9kZS5qc3RyZWUnLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBvYmogPSBkYXRhLm5vZGUsXG5cdFx0XHRcdFx0XHRcdFx0bSA9IHRoaXMuX21vZGVsLmRhdGEsXG5cdFx0XHRcdFx0XHRcdFx0cGFyID0gdGhpcy5nZXRfbm9kZShvYmoucGFyZW50KSxcblx0XHRcdFx0XHRcdFx0XHRkb20gPSB0aGlzLmdldF9ub2RlKG9iaiwgdHJ1ZSksXG5cdFx0XHRcdFx0XHRcdFx0aSwgaiwgYywgdG1wO1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQgPSAkLnZha2F0YS5hcnJheV91bmlxdWUodGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmNvbmNhdChvYmouY2hpbGRyZW5fZCkpO1xuXHRcdFx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSBvYmouY2hpbGRyZW5fZC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRtW29iai5jaGlsZHJlbl9kW2ldXS5zdGF0ZS5zZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0d2hpbGUocGFyICYmIHBhci5pZCAhPT0gJyMnKSB7XG5cdFx0XHRcdFx0XHRcdFx0YyA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gcGFyLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0YyArPSBtW3Bhci5jaGlsZHJlbltpXV0uc3RhdGUuc2VsZWN0ZWQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmKGMgPT09IGopIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhci5zdGF0ZS5zZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQucHVzaChwYXIuaWQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dG1wID0gdGhpcy5nZXRfbm9kZShwYXIsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYodG1wICYmIHRtcC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dG1wLmNoaWxkcmVuKCcuanN0cmVlLWFuY2hvcicpLmFkZENsYXNzKCdqc3RyZWUtY2xpY2tlZCcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRwYXIgPSB0aGlzLmdldF9ub2RlKHBhci5wYXJlbnQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmKGRvbS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRkb20uZmluZCgnLmpzdHJlZS1hbmNob3InKS5hZGRDbGFzcygnanN0cmVlLWNsaWNrZWQnKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSwgdGhpcykpXG5cdFx0XHRcdFx0Lm9uKCdkZXNlbGVjdF9ub2RlLmpzdHJlZScsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHtcblx0XHRcdFx0XHRcdFx0dmFyIG9iaiA9IGRhdGEubm9kZSxcblx0XHRcdFx0XHRcdFx0XHRkb20gPSB0aGlzLmdldF9ub2RlKG9iaiwgdHJ1ZSksXG5cdFx0XHRcdFx0XHRcdFx0aSwgaiwgdG1wO1xuXHRcdFx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSBvYmouY2hpbGRyZW5fZC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tb2RlbC5kYXRhW29iai5jaGlsZHJlbl9kW2ldXS5zdGF0ZS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGZvcihpID0gMCwgaiA9IG9iai5wYXJlbnRzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX21vZGVsLmRhdGFbb2JqLnBhcmVudHNbaV1dLnN0YXRlLnNlbGVjdGVkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0dG1wID0gdGhpcy5nZXRfbm9kZShvYmoucGFyZW50c1tpXSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wICYmIHRtcC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRtcC5jaGlsZHJlbignLmpzdHJlZS1hbmNob3InKS5yZW1vdmVDbGFzcygnanN0cmVlLWNsaWNrZWQnKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dG1wID0gW107XG5cdFx0XHRcdFx0XHRcdGZvcihpID0gMCwgaiA9IHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRpZigkLmluQXJyYXkodGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkW2ldLCBvYmouY2hpbGRyZW5fZCkgPT09IC0xICYmICQuaW5BcnJheSh0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWRbaV0sIG9iai5wYXJlbnRzKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRtcC5wdXNoKHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZFtpXSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCA9ICQudmFrYXRhLmFycmF5X3VuaXF1ZSh0bXApO1xuXHRcdFx0XHRcdFx0XHRpZihkb20ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZG9tLmZpbmQoJy5qc3RyZWUtYW5jaG9yJykucmVtb3ZlQ2xhc3MoJ2pzdHJlZS1jbGlja2VkJyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sIHRoaXMpKVxuXHRcdFx0XHRcdC5vbignZGVsZXRlX25vZGUuanN0cmVlJywgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgcCA9IHRoaXMuZ2V0X25vZGUoZGF0YS5wYXJlbnQpLFxuXHRcdFx0XHRcdFx0XHRcdG0gPSB0aGlzLl9tb2RlbC5kYXRhLFxuXHRcdFx0XHRcdFx0XHRcdGksIGosIGMsIHRtcDtcblx0XHRcdFx0XHRcdFx0d2hpbGUocCAmJiBwLmlkICE9PSAnIycpIHtcblx0XHRcdFx0XHRcdFx0XHRjID0gMDtcblx0XHRcdFx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSBwLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0YyArPSBtW3AuY2hpbGRyZW5baV1dLnN0YXRlLnNlbGVjdGVkO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRpZihjID09PSBqKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwLnN0YXRlLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5wdXNoKHAuaWQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dG1wID0gdGhpcy5nZXRfbm9kZShwLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHRtcCAmJiB0bXAubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRtcC5jaGlsZHJlbignLmpzdHJlZS1hbmNob3InKS5hZGRDbGFzcygnanN0cmVlLWNsaWNrZWQnKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cCA9IHRoaXMuZ2V0X25vZGUocC5wYXJlbnQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LCB0aGlzKSlcblx0XHRcdFx0XHQub24oJ21vdmVfbm9kZS5qc3RyZWUnLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBpc19tdWx0aSA9IGRhdGEuaXNfbXVsdGksXG5cdFx0XHRcdFx0XHRcdFx0b2xkX3BhciA9IGRhdGEub2xkX3BhcmVudCxcblx0XHRcdFx0XHRcdFx0XHRuZXdfcGFyID0gdGhpcy5nZXRfbm9kZShkYXRhLnBhcmVudCksXG5cdFx0XHRcdFx0XHRcdFx0bSA9IHRoaXMuX21vZGVsLmRhdGEsXG5cdFx0XHRcdFx0XHRcdFx0cCwgYywgaSwgaiwgdG1wO1xuXHRcdFx0XHRcdFx0XHRpZighaXNfbXVsdGkpIHtcblx0XHRcdFx0XHRcdFx0XHRwID0gdGhpcy5nZXRfbm9kZShvbGRfcGFyKTtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZShwICYmIHAuaWQgIT09ICcjJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0YyA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSBwLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjICs9IG1bcC5jaGlsZHJlbltpXV0uc3RhdGUuc2VsZWN0ZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihjID09PSBqKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHAuc3RhdGUuc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQucHVzaChwLmlkKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dG1wID0gdGhpcy5nZXRfbm9kZShwLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYodG1wICYmIHRtcC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0bXAuY2hpbGRyZW4oJy5qc3RyZWUtYW5jaG9yJykuYWRkQ2xhc3MoJ2pzdHJlZS1jbGlja2VkJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHAgPSB0aGlzLmdldF9ub2RlKHAucGFyZW50KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cCA9IG5ld19wYXI7XG5cdFx0XHRcdFx0XHRcdHdoaWxlKHAgJiYgcC5pZCAhPT0gJyMnKSB7XG5cdFx0XHRcdFx0XHRcdFx0YyA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gcC5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGMgKz0gbVtwLmNoaWxkcmVuW2ldXS5zdGF0ZS5zZWxlY3RlZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYoYyA9PT0gaikge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoIXAuc3RhdGUuc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cC5zdGF0ZS5zZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5wdXNoKHAuaWQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0bXAgPSB0aGlzLmdldF9ub2RlKHAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZih0bXAgJiYgdG1wLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRtcC5jaGlsZHJlbignLmpzdHJlZS1hbmNob3InKS5hZGRDbGFzcygnanN0cmVlLWNsaWNrZWQnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHAuc3RhdGUuc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cC5zdGF0ZS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQgPSAkLnZha2F0YS5hcnJheV9yZW1vdmVfaXRlbSh0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsIHAuaWQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0bXAgPSB0aGlzLmdldF9ub2RlKHAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZih0bXAgJiYgdG1wLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRtcC5jaGlsZHJlbignLmpzdHJlZS1hbmNob3InKS5yZW1vdmVDbGFzcygnanN0cmVlLWNsaWNrZWQnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRwID0gdGhpcy5nZXRfbm9kZShwLnBhcmVudCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sIHRoaXMpKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIHNldCB0aGUgdW5kZXRlcm1pbmVkIHN0YXRlIHdoZXJlIGFuZCBpZiBuZWNlc3NhcnkuIFVzZWQgaW50ZXJuYWxseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBuYW1lIF91bmRldGVybWluZWQoKVxuXHRcdCAqIEBwbHVnaW4gY2hlY2tib3hcblx0XHQgKi9cblx0XHR0aGlzLl91bmRldGVybWluZWQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgaSwgaiwgbSA9IHRoaXMuX21vZGVsLmRhdGEsIHMgPSB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsIHAgPSBbXSwgdCA9IHRoaXM7XG5cdFx0XHRmb3IoaSA9IDAsIGogPSBzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHRpZihtW3NbaV1dICYmIG1bc1tpXV0ucGFyZW50cykge1xuXHRcdFx0XHRcdHAgPSBwLmNvbmNhdChtW3NbaV1dLnBhcmVudHMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBhdHRlbXB0IGZvciBzZXJ2ZXIgc2lkZSB1bmRldGVybWluZWQgc3RhdGVcblx0XHRcdHRoaXMuZWxlbWVudC5maW5kKCcuanN0cmVlLWNsb3NlZCcpLm5vdCgnOmhhcyh1bCknKVxuXHRcdFx0XHQuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0dmFyIHRtcCA9IHQuZ2V0X25vZGUodGhpcyk7XG5cdFx0XHRcdFx0aWYoIXRtcC5zdGF0ZS5sb2FkZWQgJiYgdG1wLm9yaWdpbmFsICYmIHRtcC5vcmlnaW5hbC5zdGF0ZSAmJiB0bXAub3JpZ2luYWwuc3RhdGUudW5kZXRlcm1pbmVkICYmIHRtcC5vcmlnaW5hbC5zdGF0ZS51bmRldGVybWluZWQgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdHAucHVzaCh0bXAuaWQpO1xuXHRcdFx0XHRcdFx0cCA9IHAuY29uY2F0KHRtcC5wYXJlbnRzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0cCA9ICQudmFrYXRhLmFycmF5X3VuaXF1ZShwKTtcblx0XHRcdGkgPSAkLmluQXJyYXkoJyMnLCBwKTtcblx0XHRcdGlmKGkgIT09IC0xKSB7XG5cdFx0XHRcdHAgPSAkLnZha2F0YS5hcnJheV9yZW1vdmUocCwgaSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZWxlbWVudC5maW5kKCcuanN0cmVlLXVuZGV0ZXJtaW5lZCcpLnJlbW92ZUNsYXNzKCdqc3RyZWUtdW5kZXRlcm1pbmVkJyk7XG5cdFx0XHRmb3IoaSA9IDAsIGogPSBwLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHRpZighbVtwW2ldXS5zdGF0ZS5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdHMgPSB0aGlzLmdldF9ub2RlKHBbaV0sIHRydWUpO1xuXHRcdFx0XHRcdGlmKHMgJiYgcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHMuY2hpbGRyZW4oJ2EnKS5jaGlsZHJlbignLmpzdHJlZS1jaGVja2JveCcpLmFkZENsYXNzKCdqc3RyZWUtdW5kZXRlcm1pbmVkJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHR0aGlzLnJlZHJhd19ub2RlID0gZnVuY3Rpb24ob2JqLCBkZWVwLCBpc19jYWxsYmFjaykge1xuXHRcdFx0b2JqID0gcGFyZW50LnJlZHJhd19ub2RlLmNhbGwodGhpcywgb2JqLCBkZWVwLCBpc19jYWxsYmFjayk7XG5cdFx0XHRpZihvYmopIHtcblx0XHRcdFx0dmFyIHRtcCA9IG9iai5nZXRFbGVtZW50c0J5VGFnTmFtZSgnQScpWzBdO1xuXHRcdFx0XHR0bXAuaW5zZXJ0QmVmb3JlKF9pLmNsb25lTm9kZSgpLCB0bXAuY2hpbGROb2Rlc1swXSk7XG5cdFx0XHR9XG5cdFx0XHRpZighaXNfY2FsbGJhY2sgJiYgdGhpcy5zZXR0aW5ncy5jaGVja2JveC50aHJlZV9zdGF0ZSkge1xuXHRcdFx0XHRpZih0aGlzLl9kYXRhLmNoZWNrYm94LnV0bykgeyBjbGVhclRpbWVvdXQodGhpcy5fZGF0YS5jaGVja2JveC51dG8pOyB9XG5cdFx0XHRcdHRoaXMuX2RhdGEuY2hlY2tib3gudXRvID0gc2V0VGltZW91dCgkLnByb3h5KHRoaXMuX3VuZGV0ZXJtaW5lZCwgdGhpcyksIDUwKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvYmo7XG5cdFx0fTtcblx0XHR0aGlzLmFjdGl2YXRlX25vZGUgPSBmdW5jdGlvbiAob2JqLCBlKSB7XG5cdFx0XHRpZih0aGlzLnNldHRpbmdzLmNoZWNrYm94Lndob2xlX25vZGUgfHwgJChlLnRhcmdldCkuaGFzQ2xhc3MoJ2pzdHJlZS1jaGVja2JveCcpKSB7XG5cdFx0XHRcdGUuY3RybEtleSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcGFyZW50LmFjdGl2YXRlX25vZGUuY2FsbCh0aGlzLCBvYmosIGUpO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogc2hvdyB0aGUgbm9kZSBjaGVja2JveCBpY29uc1xuXHRcdCAqIEBuYW1lIHNob3dfY2hlY2tib3hlcygpXG5cdFx0ICogQHBsdWdpbiBjaGVja2JveFxuXHRcdCAqL1xuXHRcdHRoaXMuc2hvd19jaGVja2JveGVzID0gZnVuY3Rpb24gKCkgeyB0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmNoZWNrYm94ZXMgPSB0cnVlOyB0aGlzLmVsZW1lbnQuY2hpbGRyZW4oXCJ1bFwiKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1uby1jaGVja2JveGVzXCIpOyB9O1xuXHRcdC8qKlxuXHRcdCAqIGhpZGUgdGhlIG5vZGUgY2hlY2tib3ggaWNvbnNcblx0XHQgKiBAbmFtZSBoaWRlX2NoZWNrYm94ZXMoKVxuXHRcdCAqIEBwbHVnaW4gY2hlY2tib3hcblx0XHQgKi9cblx0XHR0aGlzLmhpZGVfY2hlY2tib3hlcyA9IGZ1bmN0aW9uICgpIHsgdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5jaGVja2JveGVzID0gZmFsc2U7IHRoaXMuZWxlbWVudC5jaGlsZHJlbihcInVsXCIpLmFkZENsYXNzKFwianN0cmVlLW5vLWNoZWNrYm94ZXNcIik7IH07XG5cdFx0LyoqXG5cdFx0ICogdG9nZ2xlIHRoZSBub2RlIGljb25zXG5cdFx0ICogQG5hbWUgdG9nZ2xlX2NoZWNrYm94ZXMoKVxuXHRcdCAqIEBwbHVnaW4gY2hlY2tib3hcblx0XHQgKi9cblx0XHR0aGlzLnRvZ2dsZV9jaGVja2JveGVzID0gZnVuY3Rpb24gKCkgeyBpZih0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmNoZWNrYm94ZXMpIHsgdGhpcy5oaWRlX2NoZWNrYm94ZXMoKTsgfSBlbHNlIHsgdGhpcy5zaG93X2NoZWNrYm94ZXMoKTsgfSB9O1xuXHR9O1xuXG5cdC8vIGluY2x1ZGUgdGhlIGNoZWNrYm94IHBsdWdpbiBieSBkZWZhdWx0XG5cdC8vICQuanN0cmVlLmRlZmF1bHRzLnBsdWdpbnMucHVzaChcImNoZWNrYm94XCIpO1xuXG4vKipcbiAqICMjIyBDb250ZXh0bWVudSBwbHVnaW5cbiAqXG4gKiBTaG93cyBhIGNvbnRleHQgbWVudSB3aGVuIGEgbm9kZSBpcyByaWdodC1jbGlja2VkLlxuICovXG4vLyBUT0RPOiBtb3ZlIGxvZ2ljIG91dHNpZGUgb2YgZnVuY3Rpb24gKyBjaGVjayBtdWx0aXBsZSBtb3ZlXG5cblx0LyoqXG5cdCAqIHN0b3JlcyBhbGwgZGVmYXVsdHMgZm9yIHRoZSBjb250ZXh0bWVudSBwbHVnaW5cblx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY29udGV4dG1lbnVcblx0ICogQHBsdWdpbiBjb250ZXh0bWVudVxuXHQgKi9cblx0JC5qc3RyZWUuZGVmYXVsdHMuY29udGV4dG1lbnUgPSB7XG5cdFx0LyoqXG5cdFx0ICogYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIG5vZGUgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gdGhlIGNvbnRleHQgbWVudSBpcyBpbnZva2VkIG9uIGl0LiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY29udGV4dG1lbnUuc2VsZWN0X25vZGVcblx0XHQgKiBAcGx1Z2luIGNvbnRleHRtZW51XG5cdFx0ICovXG5cdFx0c2VsZWN0X25vZGUgOiB0cnVlLFxuXHRcdC8qKlxuXHRcdCAqIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBtZW51IHNob3VsZCBiZSBzaG93biBhbGlnbmVkIHdpdGggdGhlIG5vZGUuIERlZmF1bHRzIHRvIGB0cnVlYCwgb3RoZXJ3aXNlIHRoZSBtb3VzZSBjb29yZGluYXRlcyBhcmUgdXNlZC5cblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5jb250ZXh0bWVudS5zaG93X2F0X25vZGVcblx0XHQgKiBAcGx1Z2luIGNvbnRleHRtZW51XG5cdFx0ICovXG5cdFx0c2hvd19hdF9ub2RlIDogdHJ1ZSxcblx0XHQvKipcblx0XHQgKiBhbiBvYmplY3Qgb2YgYWN0aW9ucywgb3IgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYSBub2RlIGFuZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBjYWxscyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBhbiBvYmplY3Qgb2YgYWN0aW9ucyBhdmFpbGFibGUgZm9yIHRoYXQgbm9kZSAoeW91IGNhbiBhbHNvIHJldHVybiB0aGUgaXRlbXMgdG9vKS5cblx0XHQgKiBcblx0XHQgKiBFYWNoIGFjdGlvbiBjb25zaXN0cyBvZiBhIGtleSAoYSB1bmlxdWUgbmFtZSkgYW5kIGEgdmFsdWUgd2hpY2ggaXMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIChvbmx5IGxhYmVsIGFuZCBhY3Rpb24gYXJlIHJlcXVpcmVkKTpcblx0XHQgKiBcblx0XHQgKiAqIGBzZXBhcmF0b3JfYmVmb3JlYCAtIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZXJlIHNob3VsZCBiZSBhIHNlcGFyYXRvciBiZWZvcmUgdGhpcyBpdGVtXG5cdFx0ICogKiBgc2VwYXJhdG9yX2FmdGVyYCAtIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZXJlIHNob3VsZCBiZSBhIHNlcGFyYXRvciBhZnRlciB0aGlzIGl0ZW1cblx0XHQgKiAqIGBfZGlzYWJsZWRgIC0gYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkXG5cdFx0ICogKiBgbGFiZWxgIC0gYSBzdHJpbmcgLSB0aGUgbmFtZSBvZiB0aGUgYWN0aW9uXG5cdFx0ICogKiBgYWN0aW9uYCAtIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgaWYgdGhpcyBpdGVtIGlzIGNob3NlblxuXHRcdCAqICogYGljb25gIC0gYSBzdHJpbmcsIGNhbiBiZSBhIHBhdGggdG8gYW4gaWNvbiBvciBhIGNsYXNzTmFtZSwgaWYgdXNpbmcgYW4gaW1hZ2UgdGhhdCBpcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgdXNlIGEgYC4vYCBwcmVmaXgsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRldGVjdGVkIGFzIGEgY2xhc3Ncblx0XHQgKiAqIGBzaG9ydGN1dGAgLSBrZXlDb2RlIHdoaWNoIHdpbGwgdHJpZ2dlciB0aGUgYWN0aW9uIGlmIHRoZSBtZW51IGlzIG9wZW4gKGZvciBleGFtcGxlIGAxMTNgIGZvciByZW5hbWUsIHdoaWNoIGVxdWFscyBGMilcblx0XHQgKiAqIGBzaG9ydGN1dF9sYWJlbGAgLSBzaG9ydGN1dCBsYWJlbCAobGlrZSBmb3IgZXhhbXBsZSBgRjJgIGZvciByZW5hbWUpXG5cdFx0ICogXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY29udGV4dG1lbnUuaXRlbXNcblx0XHQgKiBAcGx1Z2luIGNvbnRleHRtZW51XG5cdFx0ICovXG5cdFx0aXRlbXMgOiBmdW5jdGlvbiAobywgY2IpIHsgLy8gQ291bGQgYmUgYW4gb2JqZWN0IGRpcmVjdGx5XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcImNyZWF0ZVwiIDoge1xuXHRcdFx0XHRcdFwic2VwYXJhdG9yX2JlZm9yZVwiXHQ6IGZhbHNlLFxuXHRcdFx0XHRcdFwic2VwYXJhdG9yX2FmdGVyXCJcdDogdHJ1ZSxcblx0XHRcdFx0XHRcIl9kaXNhYmxlZFwiXHRcdFx0OiBmYWxzZSwgLy8odGhpcy5jaGVjayhcImNyZWF0ZV9ub2RlXCIsIGRhdGEucmVmZXJlbmNlLCB7fSwgXCJsYXN0XCIpKSxcblx0XHRcdFx0XHRcImxhYmVsXCJcdFx0XHRcdDogXCJDcmVhdGVcIixcblx0XHRcdFx0XHRcImFjdGlvblwiXHRcdFx0OiBmdW5jdGlvbiAoZGF0YSkge1xuXHRcdFx0XHRcdFx0dmFyIGluc3QgPSAkLmpzdHJlZS5yZWZlcmVuY2UoZGF0YS5yZWZlcmVuY2UpLFxuXHRcdFx0XHRcdFx0XHRvYmogPSBpbnN0LmdldF9ub2RlKGRhdGEucmVmZXJlbmNlKTtcblx0XHRcdFx0XHRcdGluc3QuY3JlYXRlX25vZGUob2JqLCB7fSwgXCJsYXN0XCIsIGZ1bmN0aW9uIChuZXdfbm9kZSkge1xuXHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgaW5zdC5lZGl0KG5ld19ub2RlKTsgfSwwKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0XCJyZW5hbWVcIiA6IHtcblx0XHRcdFx0XHRcInNlcGFyYXRvcl9iZWZvcmVcIlx0OiBmYWxzZSxcblx0XHRcdFx0XHRcInNlcGFyYXRvcl9hZnRlclwiXHQ6IGZhbHNlLFxuXHRcdFx0XHRcdFwiX2Rpc2FibGVkXCJcdFx0XHQ6IGZhbHNlLCAvLyh0aGlzLmNoZWNrKFwicmVuYW1lX25vZGVcIiwgZGF0YS5yZWZlcmVuY2UsIHRoaXMuZ2V0X3BhcmVudChkYXRhLnJlZmVyZW5jZSksIFwiXCIpKSxcblx0XHRcdFx0XHRcImxhYmVsXCJcdFx0XHRcdDogXCJSZW5hbWVcIixcblx0XHRcdFx0XHQvKlxuXHRcdFx0XHRcdFwic2hvcnRjdXRcIlx0XHRcdDogMTEzLFxuXHRcdFx0XHRcdFwic2hvcnRjdXRfbGFiZWxcIlx0OiAnRjInLFxuXHRcdFx0XHRcdFwiaWNvblwiXHRcdFx0XHQ6IFwiZ2x5cGhpY29uIGdseXBoaWNvbi1sZWFmXCIsXG5cdFx0XHRcdFx0Ki9cblx0XHRcdFx0XHRcImFjdGlvblwiXHRcdFx0OiBmdW5jdGlvbiAoZGF0YSkge1xuXHRcdFx0XHRcdFx0dmFyIGluc3QgPSAkLmpzdHJlZS5yZWZlcmVuY2UoZGF0YS5yZWZlcmVuY2UpLFxuXHRcdFx0XHRcdFx0XHRvYmogPSBpbnN0LmdldF9ub2RlKGRhdGEucmVmZXJlbmNlKTtcblx0XHRcdFx0XHRcdGluc3QuZWRpdChvYmopO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0XCJyZW1vdmVcIiA6IHtcblx0XHRcdFx0XHRcInNlcGFyYXRvcl9iZWZvcmVcIlx0OiBmYWxzZSxcblx0XHRcdFx0XHRcImljb25cIlx0XHRcdFx0OiBmYWxzZSxcblx0XHRcdFx0XHRcInNlcGFyYXRvcl9hZnRlclwiXHQ6IGZhbHNlLFxuXHRcdFx0XHRcdFwiX2Rpc2FibGVkXCJcdFx0XHQ6IGZhbHNlLCAvLyh0aGlzLmNoZWNrKFwiZGVsZXRlX25vZGVcIiwgZGF0YS5yZWZlcmVuY2UsIHRoaXMuZ2V0X3BhcmVudChkYXRhLnJlZmVyZW5jZSksIFwiXCIpKSxcblx0XHRcdFx0XHRcImxhYmVsXCJcdFx0XHRcdDogXCJEZWxldGVcIixcblx0XHRcdFx0XHRcImFjdGlvblwiXHRcdFx0OiBmdW5jdGlvbiAoZGF0YSkge1xuXHRcdFx0XHRcdFx0dmFyIGluc3QgPSAkLmpzdHJlZS5yZWZlcmVuY2UoZGF0YS5yZWZlcmVuY2UpLFxuXHRcdFx0XHRcdFx0XHRvYmogPSBpbnN0LmdldF9ub2RlKGRhdGEucmVmZXJlbmNlKTtcblx0XHRcdFx0XHRcdGlmKGluc3QuaXNfc2VsZWN0ZWQob2JqKSkge1xuXHRcdFx0XHRcdFx0XHRpbnN0LmRlbGV0ZV9ub2RlKGluc3QuZ2V0X3NlbGVjdGVkKCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGluc3QuZGVsZXRlX25vZGUob2JqKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiY2NwXCIgOiB7XG5cdFx0XHRcdFx0XCJzZXBhcmF0b3JfYmVmb3JlXCJcdDogdHJ1ZSxcblx0XHRcdFx0XHRcImljb25cIlx0XHRcdFx0OiBmYWxzZSxcblx0XHRcdFx0XHRcInNlcGFyYXRvcl9hZnRlclwiXHQ6IGZhbHNlLFxuXHRcdFx0XHRcdFwibGFiZWxcIlx0XHRcdFx0OiBcIkVkaXRcIixcblx0XHRcdFx0XHRcImFjdGlvblwiXHRcdFx0OiBmYWxzZSxcblx0XHRcdFx0XHRcInN1Ym1lbnVcIiA6IHtcblx0XHRcdFx0XHRcdFwiY3V0XCIgOiB7XG5cdFx0XHRcdFx0XHRcdFwic2VwYXJhdG9yX2JlZm9yZVwiXHQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcInNlcGFyYXRvcl9hZnRlclwiXHQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcImxhYmVsXCJcdFx0XHRcdDogXCJDdXRcIixcblx0XHRcdFx0XHRcdFx0XCJhY3Rpb25cIlx0XHRcdDogZnVuY3Rpb24gKGRhdGEpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgaW5zdCA9ICQuanN0cmVlLnJlZmVyZW5jZShkYXRhLnJlZmVyZW5jZSksXG5cdFx0XHRcdFx0XHRcdFx0XHRvYmogPSBpbnN0LmdldF9ub2RlKGRhdGEucmVmZXJlbmNlKTtcblx0XHRcdFx0XHRcdFx0XHRpZihpbnN0LmlzX3NlbGVjdGVkKG9iaikpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGluc3QuY3V0KGluc3QuZ2V0X3NlbGVjdGVkKCkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGluc3QuY3V0KG9iaik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XCJjb3B5XCIgOiB7XG5cdFx0XHRcdFx0XHRcdFwic2VwYXJhdG9yX2JlZm9yZVwiXHQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcImljb25cIlx0XHRcdFx0OiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XCJzZXBhcmF0b3JfYWZ0ZXJcIlx0OiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XCJsYWJlbFwiXHRcdFx0XHQ6IFwiQ29weVwiLFxuXHRcdFx0XHRcdFx0XHRcImFjdGlvblwiXHRcdFx0OiBmdW5jdGlvbiAoZGF0YSkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBpbnN0ID0gJC5qc3RyZWUucmVmZXJlbmNlKGRhdGEucmVmZXJlbmNlKSxcblx0XHRcdFx0XHRcdFx0XHRcdG9iaiA9IGluc3QuZ2V0X25vZGUoZGF0YS5yZWZlcmVuY2UpO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGluc3QuaXNfc2VsZWN0ZWQob2JqKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aW5zdC5jb3B5KGluc3QuZ2V0X3NlbGVjdGVkKCkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGluc3QuY29weShvYmopO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFwicGFzdGVcIiA6IHtcblx0XHRcdFx0XHRcdFx0XCJzZXBhcmF0b3JfYmVmb3JlXCJcdDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFwiaWNvblwiXHRcdFx0XHQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcIl9kaXNhYmxlZFwiXHRcdFx0OiBmdW5jdGlvbiAoZGF0YSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAhJC5qc3RyZWUucmVmZXJlbmNlKGRhdGEucmVmZXJlbmNlKS5jYW5fcGFzdGUoKTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XCJzZXBhcmF0b3JfYWZ0ZXJcIlx0OiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XCJsYWJlbFwiXHRcdFx0XHQ6IFwiUGFzdGVcIixcblx0XHRcdFx0XHRcdFx0XCJhY3Rpb25cIlx0XHRcdDogZnVuY3Rpb24gKGRhdGEpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgaW5zdCA9ICQuanN0cmVlLnJlZmVyZW5jZShkYXRhLnJlZmVyZW5jZSksXG5cdFx0XHRcdFx0XHRcdFx0XHRvYmogPSBpbnN0LmdldF9ub2RlKGRhdGEucmVmZXJlbmNlKTtcblx0XHRcdFx0XHRcdFx0XHRpbnN0LnBhc3RlKG9iaik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHR9O1xuXG5cdCQuanN0cmVlLnBsdWdpbnMuY29udGV4dG1lbnUgPSBmdW5jdGlvbiAob3B0aW9ucywgcGFyZW50KSB7XG5cdFx0dGhpcy5iaW5kID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cGFyZW50LmJpbmQuY2FsbCh0aGlzKTtcblxuXHRcdFx0dGhpcy5lbGVtZW50XG5cdFx0XHRcdC5vbihcImNvbnRleHRtZW51LmpzdHJlZVwiLCBcIi5qc3RyZWUtYW5jaG9yXCIsICQucHJveHkoZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdGlmKCF0aGlzLmlzX2xvYWRpbmcoZS5jdXJyZW50VGFyZ2V0KSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNob3dfY29udGV4dG1lbnUoZS5jdXJyZW50VGFyZ2V0LCBlLnBhZ2VYLCBlLnBhZ2VZLCBlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCB0aGlzKSlcblx0XHRcdFx0Lm9uKFwiY2xpY2suanN0cmVlXCIsIFwiLmpzdHJlZS1hbmNob3JcIiwgJC5wcm94eShmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0aWYodGhpcy5fZGF0YS5jb250ZXh0bWVudS52aXNpYmxlKSB7XG5cdFx0XHRcdFx0XHRcdCQudmFrYXRhLmNvbnRleHQuaGlkZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIHRoaXMpKTtcblx0XHRcdC8qXG5cdFx0XHRpZighKCdvbmNvbnRleHRtZW51JyBpbiBkb2N1bWVudC5ib2R5KSAmJiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuYm9keSkpIHtcblx0XHRcdFx0dmFyIGVsID0gbnVsbCwgdG0gPSBudWxsO1xuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQub24oXCJ0b3VjaHN0YXJ0XCIsIFwiLmpzdHJlZS1hbmNob3JcIiwgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdGVsID0gZS5jdXJyZW50VGFyZ2V0O1xuXHRcdFx0XHRcdFx0dG0gPSArbmV3IERhdGUoKTtcblx0XHRcdFx0XHRcdCQoZG9jdW1lbnQpLm9uZShcInRvdWNoZW5kXCIsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRcdGUudGFyZ2V0ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLm9yaWdpbmFsRXZlbnQudGFyZ2V0VG91Y2hlc1swXS5wYWdlWCAtIHdpbmRvdy5wYWdlWE9mZnNldCwgZS5vcmlnaW5hbEV2ZW50LnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgLSB3aW5kb3cucGFnZVlPZmZzZXQpO1xuXHRcdFx0XHRcdFx0XHRlLmN1cnJlbnRUYXJnZXQgPSBlLnRhcmdldDtcblx0XHRcdFx0XHRcdFx0dG0gPSAoKCsobmV3IERhdGUoKSkpIC0gdG0pO1xuXHRcdFx0XHRcdFx0XHRpZihlLnRhcmdldCA9PT0gZWwgJiYgdG0gPiA2MDAgJiYgdG0gPCAxMDAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRcdCQoZWwpLnRyaWdnZXIoJ2NvbnRleHRtZW51JywgZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZWwgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHR0bSA9IG51bGw7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdCovXG5cdFx0XHQkKGRvY3VtZW50KS5vbihcImNvbnRleHRfaGlkZS52YWthdGFcIiwgJC5wcm94eShmdW5jdGlvbiAoKSB7IHRoaXMuX2RhdGEuY29udGV4dG1lbnUudmlzaWJsZSA9IGZhbHNlOyB9LCB0aGlzKSk7XG5cdFx0fTtcblx0XHR0aGlzLnRlYXJkb3duID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYodGhpcy5fZGF0YS5jb250ZXh0bWVudS52aXNpYmxlKSB7XG5cdFx0XHRcdCQudmFrYXRhLmNvbnRleHQuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdFx0cGFyZW50LnRlYXJkb3duLmNhbGwodGhpcyk7XG5cdFx0fTtcblxuXHRcdC8qKlxuXHRcdCAqIHByZXBhcmUgYW5kIHNob3cgdGhlIGNvbnRleHQgbWVudSBmb3IgYSBub2RlXG5cdFx0ICogQG5hbWUgc2hvd19jb250ZXh0bWVudShvYmogWywgeCwgeV0pXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gb2JqIHRoZSBub2RlXG5cdFx0ICogQHBhcmFtIHtOdW1iZXJ9IHggdGhlIHgtY29vcmRpbmF0ZSByZWxhdGl2ZSB0byB0aGUgZG9jdW1lbnQgdG8gc2hvdyB0aGUgbWVudSBhdFxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSB5IHRoZSB5LWNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIGRvY3VtZW50IHRvIHNob3cgdGhlIG1lbnUgYXRcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gZSB0aGUgZXZlbnQgaWYgYXZhaWxhYmxlIHRoYXQgdHJpZ2dlcmVkIHRoZSBjb250ZXh0bWVudVxuXHRcdCAqIEBwbHVnaW4gY29udGV4dG1lbnVcblx0XHQgKiBAdHJpZ2dlciBzaG93X2NvbnRleHRtZW51LmpzdHJlZVxuXHRcdCAqL1xuXHRcdHRoaXMuc2hvd19jb250ZXh0bWVudSA9IGZ1bmN0aW9uIChvYmosIHgsIHksIGUpIHtcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcblx0XHRcdGlmKCFvYmogfHwgb2JqLmlkID09PSAnIycpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XHR2YXIgcyA9IHRoaXMuc2V0dGluZ3MuY29udGV4dG1lbnUsXG5cdFx0XHRcdGQgPSB0aGlzLmdldF9ub2RlKG9iaiwgdHJ1ZSksXG5cdFx0XHRcdGEgPSBkLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIiksXG5cdFx0XHRcdG8gPSBmYWxzZSxcblx0XHRcdFx0aSA9IGZhbHNlO1xuXHRcdFx0aWYocy5zaG93X2F0X25vZGUgfHwgeCA9PT0gdW5kZWZpbmVkIHx8IHkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRvID0gYS5vZmZzZXQoKTtcblx0XHRcdFx0eCA9IG8ubGVmdDtcblx0XHRcdFx0eSA9IG8udG9wICsgdGhpcy5fZGF0YS5jb3JlLmxpX2hlaWdodDtcblx0XHRcdH1cblx0XHRcdGlmKHRoaXMuc2V0dGluZ3MuY29udGV4dG1lbnUuc2VsZWN0X25vZGUgJiYgIXRoaXMuaXNfc2VsZWN0ZWQob2JqKSkge1xuXHRcdFx0XHR0aGlzLmRlc2VsZWN0X2FsbCgpO1xuXHRcdFx0XHR0aGlzLnNlbGVjdF9ub2RlKG9iaiwgZmFsc2UsIGZhbHNlLCBlKTtcblx0XHRcdH1cblxuXHRcdFx0aSA9IHMuaXRlbXM7XG5cdFx0XHRpZigkLmlzRnVuY3Rpb24oaSkpIHtcblx0XHRcdFx0aSA9IGkuY2FsbCh0aGlzLCBvYmosICQucHJveHkoZnVuY3Rpb24gKGkpIHtcblx0XHRcdFx0XHR0aGlzLl9zaG93X2NvbnRleHRtZW51KG9iaiwgeCwgeSwgaSk7XG5cdFx0XHRcdH0sIHRoaXMpKTtcblx0XHRcdH1cblx0XHRcdGlmKCQuaXNQbGFpbk9iamVjdChpKSkge1xuXHRcdFx0XHR0aGlzLl9zaG93X2NvbnRleHRtZW51KG9iaiwgeCwgeSwgaSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBzaG93IHRoZSBwcmVwYXJlZCBjb250ZXh0IG1lbnUgZm9yIGEgbm9kZVxuXHRcdCAqIEBuYW1lIF9zaG93X2NvbnRleHRtZW51KG9iaiwgeCwgeSwgaSlcblx0XHQgKiBAcGFyYW0ge21peGVkfSBvYmogdGhlIG5vZGVcblx0XHQgKiBAcGFyYW0ge051bWJlcn0geCB0aGUgeC1jb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSBkb2N1bWVudCB0byBzaG93IHRoZSBtZW51IGF0XG5cdFx0ICogQHBhcmFtIHtOdW1iZXJ9IHkgdGhlIHktY29vcmRpbmF0ZSByZWxhdGl2ZSB0byB0aGUgZG9jdW1lbnQgdG8gc2hvdyB0aGUgbWVudSBhdFxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSBpIHRoZSBvYmplY3Qgb2YgaXRlbXMgdG8gc2hvd1xuXHRcdCAqIEBwbHVnaW4gY29udGV4dG1lbnVcblx0XHQgKiBAdHJpZ2dlciBzaG93X2NvbnRleHRtZW51LmpzdHJlZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdFx0dGhpcy5fc2hvd19jb250ZXh0bWVudSA9IGZ1bmN0aW9uIChvYmosIHgsIHksIGkpIHtcblx0XHRcdHZhciBkID0gdGhpcy5nZXRfbm9kZShvYmosIHRydWUpLFxuXHRcdFx0XHRhID0gZC5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpO1xuXHRcdFx0JChkb2N1bWVudCkub25lKFwiY29udGV4dF9zaG93LnZha2F0YVwiLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7XG5cdFx0XHRcdHZhciBjbHMgPSAnanN0cmVlLWNvbnRleHRtZW51IGpzdHJlZS0nICsgdGhpcy5nZXRfdGhlbWUoKSArICctY29udGV4dG1lbnUnO1xuXHRcdFx0XHQkKGRhdGEuZWxlbWVudCkuYWRkQ2xhc3MoY2xzKTtcblx0XHRcdH0sIHRoaXMpKTtcblx0XHRcdHRoaXMuX2RhdGEuY29udGV4dG1lbnUudmlzaWJsZSA9IHRydWU7XG5cdFx0XHQkLnZha2F0YS5jb250ZXh0LnNob3coYSwgeyAneCcgOiB4LCAneScgOiB5IH0sIGkpO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiB0aGUgY29udGV4dG1lbnUgaXMgc2hvd24gZm9yIGEgbm9kZVxuXHRcdFx0ICogQGV2ZW50XG5cdFx0XHQgKiBAbmFtZSBzaG93X2NvbnRleHRtZW51LmpzdHJlZVxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGUgdGhlIG5vZGVcblx0XHRcdCAqIEBwYXJhbSB7TnVtYmVyfSB4IHRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIG1lbnUgcmVsYXRpdmUgdG8gdGhlIGRvY3VtZW50XG5cdFx0XHQgKiBAcGFyYW0ge051bWJlcn0geSB0aGUgeS1jb29yZGluYXRlIG9mIHRoZSBtZW51IHJlbGF0aXZlIHRvIHRoZSBkb2N1bWVudFxuXHRcdFx0ICogQHBsdWdpbiBjb250ZXh0bWVudVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnRyaWdnZXIoJ3Nob3dfY29udGV4dG1lbnUnLCB7IFwibm9kZVwiIDogb2JqLCBcInhcIiA6IHgsIFwieVwiIDogeSB9KTtcblx0XHR9O1xuXHR9O1xuXG5cdC8vIGNvbnRleHRtZW51IGhlbHBlclxuXHQoZnVuY3Rpb24gKCQpIHtcblx0XHR2YXIgcmlnaHRfdG9fbGVmdCA9IGZhbHNlLFxuXHRcdFx0dmFrYXRhX2NvbnRleHQgPSB7XG5cdFx0XHRcdGVsZW1lbnRcdFx0OiBmYWxzZSxcblx0XHRcdFx0cmVmZXJlbmNlXHQ6IGZhbHNlLFxuXHRcdFx0XHRwb3NpdGlvbl94XHQ6IDAsXG5cdFx0XHRcdHBvc2l0aW9uX3lcdDogMCxcblx0XHRcdFx0aXRlbXNcdFx0OiBbXSxcblx0XHRcdFx0aHRtbFx0XHQ6IFwiXCIsXG5cdFx0XHRcdGlzX3Zpc2libGVcdDogZmFsc2Vcblx0XHRcdH07XG5cblx0XHQkLnZha2F0YS5jb250ZXh0ID0ge1xuXHRcdFx0c2V0dGluZ3MgOiB7XG5cdFx0XHRcdGhpZGVfb25tb3VzZWxlYXZlXHQ6IDAsXG5cdFx0XHRcdGljb25zXHRcdFx0XHQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRfdHJpZ2dlciA6IGZ1bmN0aW9uIChldmVudF9uYW1lKSB7XG5cdFx0XHRcdCQoZG9jdW1lbnQpLnRyaWdnZXJIYW5kbGVyKFwiY29udGV4dF9cIiArIGV2ZW50X25hbWUgKyBcIi52YWthdGFcIiwge1xuXHRcdFx0XHRcdFwicmVmZXJlbmNlXCJcdDogdmFrYXRhX2NvbnRleHQucmVmZXJlbmNlLFxuXHRcdFx0XHRcdFwiZWxlbWVudFwiXHQ6IHZha2F0YV9jb250ZXh0LmVsZW1lbnQsXG5cdFx0XHRcdFx0XCJwb3NpdGlvblwiXHQ6IHtcblx0XHRcdFx0XHRcdFwieFwiIDogdmFrYXRhX2NvbnRleHQucG9zaXRpb25feCxcblx0XHRcdFx0XHRcdFwieVwiIDogdmFrYXRhX2NvbnRleHQucG9zaXRpb25feVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0X2V4ZWN1dGUgOiBmdW5jdGlvbiAoaSkge1xuXHRcdFx0XHRpID0gdmFrYXRhX2NvbnRleHQuaXRlbXNbaV07XG5cdFx0XHRcdHJldHVybiBpICYmICghaS5fZGlzYWJsZWQgfHwgKCQuaXNGdW5jdGlvbihpLl9kaXNhYmxlZCkgJiYgIWkuX2Rpc2FibGVkKHsgXCJpdGVtXCIgOiBpLCBcInJlZmVyZW5jZVwiIDogdmFrYXRhX2NvbnRleHQucmVmZXJlbmNlLCBcImVsZW1lbnRcIiA6IHZha2F0YV9jb250ZXh0LmVsZW1lbnQgfSkpKSAmJiBpLmFjdGlvbiA/IGkuYWN0aW9uLmNhbGwobnVsbCwge1xuXHRcdFx0XHRcdFx0XHRcIml0ZW1cIlx0XHQ6IGksXG5cdFx0XHRcdFx0XHRcdFwicmVmZXJlbmNlXCJcdDogdmFrYXRhX2NvbnRleHQucmVmZXJlbmNlLFxuXHRcdFx0XHRcdFx0XHRcImVsZW1lbnRcIlx0OiB2YWthdGFfY29udGV4dC5lbGVtZW50LFxuXHRcdFx0XHRcdFx0XHRcInBvc2l0aW9uXCJcdDoge1xuXHRcdFx0XHRcdFx0XHRcdFwieFwiIDogdmFrYXRhX2NvbnRleHQucG9zaXRpb25feCxcblx0XHRcdFx0XHRcdFx0XHRcInlcIiA6IHZha2F0YV9jb250ZXh0LnBvc2l0aW9uX3lcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSkgOiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHRfcGFyc2UgOiBmdW5jdGlvbiAobywgaXNfY2FsbGJhY2spIHtcblx0XHRcdFx0aWYoIW8pIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XHRcdGlmKCFpc19jYWxsYmFjaykge1xuXHRcdFx0XHRcdHZha2F0YV9jb250ZXh0Lmh0bWxcdFx0PSBcIlwiO1xuXHRcdFx0XHRcdHZha2F0YV9jb250ZXh0Lml0ZW1zXHQ9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBzdHIgPSBcIlwiLFxuXHRcdFx0XHRcdHNlcCA9IGZhbHNlLFxuXHRcdFx0XHRcdHRtcDtcblxuXHRcdFx0XHRpZihpc19jYWxsYmFjaykgeyBzdHIgKz0gXCI8XCIrXCJ1bD5cIjsgfVxuXHRcdFx0XHQkLmVhY2gobywgZnVuY3Rpb24gKGksIHZhbCkge1xuXHRcdFx0XHRcdGlmKCF2YWwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5pdGVtcy5wdXNoKHZhbCk7XG5cdFx0XHRcdFx0aWYoIXNlcCAmJiB2YWwuc2VwYXJhdG9yX2JlZm9yZSkge1xuXHRcdFx0XHRcdFx0c3RyICs9IFwiPFwiK1wibGkgY2xhc3M9J3Zha2F0YS1jb250ZXh0LXNlcGFyYXRvcic+PFwiK1wiYSBocmVmPScjJyBcIiArICgkLnZha2F0YS5jb250ZXh0LnNldHRpbmdzLmljb25zID8gJycgOiAnc3R5bGU9XCJtYXJnaW4tbGVmdDowcHg7XCInKSArIFwiPiYjMTYwOzxcIitcIi9hPjxcIitcIi9saT5cIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c2VwID0gZmFsc2U7XG5cdFx0XHRcdFx0c3RyICs9IFwiPFwiK1wibGkgY2xhc3M9J1wiICsgKHZhbC5fY2xhc3MgfHwgXCJcIikgKyAodmFsLl9kaXNhYmxlZCA9PT0gdHJ1ZSB8fCAoJC5pc0Z1bmN0aW9uKHZhbC5fZGlzYWJsZWQpICYmIHZhbC5fZGlzYWJsZWQoeyBcIml0ZW1cIiA6IHZhbCwgXCJyZWZlcmVuY2VcIiA6IHZha2F0YV9jb250ZXh0LnJlZmVyZW5jZSwgXCJlbGVtZW50XCIgOiB2YWthdGFfY29udGV4dC5lbGVtZW50IH0pKSA/IFwiIHZha2F0YS1jb250ZXh0bWVudS1kaXNhYmxlZCBcIiA6IFwiXCIpICsgXCInIFwiKyh2YWwuc2hvcnRjdXQ/XCIgZGF0YS1zaG9ydGN1dD0nXCIrdmFsLnNob3J0Y3V0K1wiJyBcIjonJykrXCI+XCI7XG5cdFx0XHRcdFx0c3RyICs9IFwiPFwiK1wiYSBocmVmPScjJyByZWw9J1wiICsgKHZha2F0YV9jb250ZXh0Lml0ZW1zLmxlbmd0aCAtIDEpICsgXCInPlwiO1xuXHRcdFx0XHRcdGlmKCQudmFrYXRhLmNvbnRleHQuc2V0dGluZ3MuaWNvbnMpIHtcblx0XHRcdFx0XHRcdHN0ciArPSBcIjxcIitcImkgXCI7XG5cdFx0XHRcdFx0XHRpZih2YWwuaWNvbikge1xuXHRcdFx0XHRcdFx0XHRpZih2YWwuaWNvbi5pbmRleE9mKFwiL1wiKSAhPT0gLTEgfHwgdmFsLmljb24uaW5kZXhPZihcIi5cIikgIT09IC0xKSB7IHN0ciArPSBcIiBzdHlsZT0nYmFja2dyb3VuZDp1cmwoXFxcIlwiICsgdmFsLmljb24gKyBcIlxcXCIpIGNlbnRlciBjZW50ZXIgbm8tcmVwZWF0JyBcIjsgfVxuXHRcdFx0XHRcdFx0XHRlbHNlIHsgc3RyICs9IFwiIGNsYXNzPSdcIiArIHZhbC5pY29uICsgXCInIFwiOyB9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRzdHIgKz0gXCI+PFwiK1wiL2k+PFwiK1wic3BhbiBjbGFzcz0ndmFrYXRhLWNvbnRleHRtZW51LXNlcCc+JiMxNjA7PFwiK1wiL3NwYW4+XCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHN0ciArPSB2YWwubGFiZWwgKyAodmFsLnNob3J0Y3V0PycgPHNwYW4gY2xhc3M9XCJ2YWthdGEtY29udGV4dG1lbnUtc2hvcnRjdXQgdmFrYXRhLWNvbnRleHRtZW51LXNob3J0Y3V0LScrdmFsLnNob3J0Y3V0KydcIj4nKyAodmFsLnNob3J0Y3V0X2xhYmVsIHx8ICcnKSArJzwvc3Bhbj4nOicnKSArIFwiPFwiK1wiL2E+XCI7XG5cdFx0XHRcdFx0aWYodmFsLnN1Ym1lbnUpIHtcblx0XHRcdFx0XHRcdHRtcCA9ICQudmFrYXRhLmNvbnRleHQuX3BhcnNlKHZhbC5zdWJtZW51LCB0cnVlKTtcblx0XHRcdFx0XHRcdGlmKHRtcCkgeyBzdHIgKz0gdG1wOyB9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHN0ciArPSBcIjxcIitcIi9saT5cIjtcblx0XHRcdFx0XHRpZih2YWwuc2VwYXJhdG9yX2FmdGVyKSB7XG5cdFx0XHRcdFx0XHRzdHIgKz0gXCI8XCIrXCJsaSBjbGFzcz0ndmFrYXRhLWNvbnRleHQtc2VwYXJhdG9yJz48XCIrXCJhIGhyZWY9JyMnIFwiICsgKCQudmFrYXRhLmNvbnRleHQuc2V0dGluZ3MuaWNvbnMgPyAnJyA6ICdzdHlsZT1cIm1hcmdpbi1sZWZ0OjBweDtcIicpICsgXCI+JiMxNjA7PFwiK1wiL2E+PFwiK1wiL2xpPlwiO1xuXHRcdFx0XHRcdFx0c2VwID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzdHIgID0gc3RyLnJlcGxhY2UoLzxsaSBjbGFzc1xcPSd2YWthdGEtY29udGV4dC1zZXBhcmF0b3InXFw+PFxcL2xpXFw+JC8sXCJcIik7XG5cdFx0XHRcdGlmKGlzX2NhbGxiYWNrKSB7IHN0ciArPSBcIjwvdWw+XCI7IH1cblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIHRyaWdnZXJlZCBvbiB0aGUgZG9jdW1lbnQgd2hlbiB0aGUgY29udGV4dG1lbnUgaXMgcGFyc2VkIChIVE1MIGlzIGJ1aWx0KVxuXHRcdFx0XHQgKiBAZXZlbnRcblx0XHRcdFx0ICogQHBsdWdpbiBjb250ZXh0bWVudVxuXHRcdFx0XHQgKiBAbmFtZSBjb250ZXh0X3BhcnNlLnZha2F0YVxuXHRcdFx0XHQgKiBAcGFyYW0ge2pRdWVyeX0gcmVmZXJlbmNlIHRoZSBlbGVtZW50IHRoYXQgd2FzIHJpZ2h0IGNsaWNrZWRcblx0XHRcdFx0ICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgdGhlIERPTSBlbGVtZW50IG9mIHRoZSBtZW51IGl0c2VsZlxuXHRcdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gcG9zaXRpb24gdGhlIHggJiB5IGNvb3JkaW5hdGVzIG9mIHRoZSBtZW51XG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRpZighaXNfY2FsbGJhY2spIHsgdmFrYXRhX2NvbnRleHQuaHRtbCA9IHN0cjsgJC52YWthdGEuY29udGV4dC5fdHJpZ2dlcihcInBhcnNlXCIpOyB9XG5cdFx0XHRcdHJldHVybiBzdHIubGVuZ3RoID4gMTAgPyBzdHIgOiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHRfc2hvd19zdWJtZW51IDogZnVuY3Rpb24gKG8pIHtcblx0XHRcdFx0byA9ICQobyk7XG5cdFx0XHRcdGlmKCFvLmxlbmd0aCB8fCAhby5jaGlsZHJlbihcInVsXCIpLmxlbmd0aCkgeyByZXR1cm47IH1cblx0XHRcdFx0dmFyIGUgPSBvLmNoaWxkcmVuKFwidWxcIiksXG5cdFx0XHRcdFx0eCA9IG8ub2Zmc2V0KCkubGVmdCArIG8ub3V0ZXJXaWR0aCgpLFxuXHRcdFx0XHRcdHkgPSBvLm9mZnNldCgpLnRvcCxcblx0XHRcdFx0XHR3ID0gZS53aWR0aCgpLFxuXHRcdFx0XHRcdGggPSBlLmhlaWdodCgpLFxuXHRcdFx0XHRcdGR3ID0gJCh3aW5kb3cpLndpZHRoKCkgKyAkKHdpbmRvdykuc2Nyb2xsTGVmdCgpLFxuXHRcdFx0XHRcdGRoID0gJCh3aW5kb3cpLmhlaWdodCgpICsgJCh3aW5kb3cpLnNjcm9sbFRvcCgpO1xuXHRcdFx0XHQvLyDQvNC+0LbQtSDQtNCwINGB0LUg0YHQv9C10YHRgtC4INC1INC10LTQvdCwINC/0YDQvtCy0LXRgNC60LAgLSDQtNCw0LvQuCDQvdGP0LzQsCDQvdGP0LrQvtC5INC+0YIg0LrQu9Cw0YHQvtCy0LXRgtC1INCy0LXRh9C1INC90LDQs9C+0YDQtVxuXHRcdFx0XHRpZihyaWdodF90b19sZWZ0KSB7XG5cdFx0XHRcdFx0b1t4IC0gKHcgKyAxMCArIG8ub3V0ZXJXaWR0aCgpKSA8IDAgPyBcImFkZENsYXNzXCIgOiBcInJlbW92ZUNsYXNzXCJdKFwidmFrYXRhLWNvbnRleHQtbGVmdFwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRvW3ggKyB3ICsgMTAgPiBkdyA/IFwiYWRkQ2xhc3NcIiA6IFwicmVtb3ZlQ2xhc3NcIl0oXCJ2YWthdGEtY29udGV4dC1yaWdodFwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZih5ICsgaCArIDEwID4gZGgpIHtcblx0XHRcdFx0XHRlLmNzcyhcImJvdHRvbVwiLFwiLTFweFwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlLnNob3coKTtcblx0XHRcdH0sXG5cdFx0XHRzaG93IDogZnVuY3Rpb24gKHJlZmVyZW5jZSwgcG9zaXRpb24sIGRhdGEpIHtcblx0XHRcdFx0dmFyIG8sIGUsIHgsIHksIHcsIGgsIGR3LCBkaCwgY29uZCA9IHRydWU7XG5cdFx0XHRcdGlmKHZha2F0YV9jb250ZXh0LmVsZW1lbnQgJiYgdmFrYXRhX2NvbnRleHQuZWxlbWVudC5sZW5ndGgpIHtcblx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5lbGVtZW50LndpZHRoKCcnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzd2l0Y2goY29uZCkge1xuXHRcdFx0XHRcdGNhc2UgKCFwb3NpdGlvbiAmJiAhcmVmZXJlbmNlKTpcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRjYXNlICghIXBvc2l0aW9uICYmICEhcmVmZXJlbmNlKTpcblx0XHRcdFx0XHRcdHZha2F0YV9jb250ZXh0LnJlZmVyZW5jZVx0PSByZWZlcmVuY2U7XG5cdFx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5wb3NpdGlvbl94XHQ9IHBvc2l0aW9uLng7XG5cdFx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5wb3NpdGlvbl95XHQ9IHBvc2l0aW9uLnk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICghcG9zaXRpb24gJiYgISFyZWZlcmVuY2UpOlxuXHRcdFx0XHRcdFx0dmFrYXRhX2NvbnRleHQucmVmZXJlbmNlXHQ9IHJlZmVyZW5jZTtcblx0XHRcdFx0XHRcdG8gPSByZWZlcmVuY2Uub2Zmc2V0KCk7XG5cdFx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5wb3NpdGlvbl94XHQ9IG8ubGVmdCArIHJlZmVyZW5jZS5vdXRlckhlaWdodCgpO1xuXHRcdFx0XHRcdFx0dmFrYXRhX2NvbnRleHQucG9zaXRpb25feVx0PSBvLnRvcDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgKCEhcG9zaXRpb24gJiYgIXJlZmVyZW5jZSk6XG5cdFx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5wb3NpdGlvbl94XHQ9IHBvc2l0aW9uLng7XG5cdFx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5wb3NpdGlvbl95XHQ9IHBvc2l0aW9uLnk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZighIXJlZmVyZW5jZSAmJiAhZGF0YSAmJiAkKHJlZmVyZW5jZSkuZGF0YSgndmFrYXRhX2NvbnRleHRtZW51JykpIHtcblx0XHRcdFx0XHRkYXRhID0gJChyZWZlcmVuY2UpLmRhdGEoJ3Zha2F0YV9jb250ZXh0bWVudScpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKCQudmFrYXRhLmNvbnRleHQuX3BhcnNlKGRhdGEpKSB7XG5cdFx0XHRcdFx0dmFrYXRhX2NvbnRleHQuZWxlbWVudC5odG1sKHZha2F0YV9jb250ZXh0Lmh0bWwpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKHZha2F0YV9jb250ZXh0Lml0ZW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdGUgPSB2YWthdGFfY29udGV4dC5lbGVtZW50O1xuXHRcdFx0XHRcdHggPSB2YWthdGFfY29udGV4dC5wb3NpdGlvbl94O1xuXHRcdFx0XHRcdHkgPSB2YWthdGFfY29udGV4dC5wb3NpdGlvbl95O1xuXHRcdFx0XHRcdHcgPSBlLndpZHRoKCk7XG5cdFx0XHRcdFx0aCA9IGUuaGVpZ2h0KCk7XG5cdFx0XHRcdFx0ZHcgPSAkKHdpbmRvdykud2lkdGgoKSArICQod2luZG93KS5zY3JvbGxMZWZ0KCk7XG5cdFx0XHRcdFx0ZGggPSAkKHdpbmRvdykuaGVpZ2h0KCkgKyAkKHdpbmRvdykuc2Nyb2xsVG9wKCk7XG5cdFx0XHRcdFx0aWYocmlnaHRfdG9fbGVmdCkge1xuXHRcdFx0XHRcdFx0eCAtPSBlLm91dGVyV2lkdGgoKTtcblx0XHRcdFx0XHRcdGlmKHggPCAkKHdpbmRvdykuc2Nyb2xsTGVmdCgpICsgMjApIHtcblx0XHRcdFx0XHRcdFx0eCA9ICQod2luZG93KS5zY3JvbGxMZWZ0KCkgKyAyMDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYoeCArIHcgKyAyMCA+IGR3KSB7XG5cdFx0XHRcdFx0XHR4ID0gZHcgLSAodyArIDIwKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYoeSArIGggKyAyMCA+IGRoKSB7XG5cdFx0XHRcdFx0XHR5ID0gZGggLSAoaCArIDIwKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5lbGVtZW50XG5cdFx0XHRcdFx0XHQuY3NzKHsgXCJsZWZ0XCIgOiB4LCBcInRvcFwiIDogeSB9KVxuXHRcdFx0XHRcdFx0LnNob3coKVxuXHRcdFx0XHRcdFx0LmZpbmQoJ2E6ZXEoMCknKS5mb2N1cygpLnBhcmVudCgpLmFkZENsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIik7XG5cdFx0XHRcdFx0dmFrYXRhX2NvbnRleHQuaXNfdmlzaWJsZSA9IHRydWU7XG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0ICogdHJpZ2dlcmVkIG9uIHRoZSBkb2N1bWVudCB3aGVuIHRoZSBjb250ZXh0bWVudSBpcyBzaG93blxuXHRcdFx0XHRcdCAqIEBldmVudFxuXHRcdFx0XHRcdCAqIEBwbHVnaW4gY29udGV4dG1lbnVcblx0XHRcdFx0XHQgKiBAbmFtZSBjb250ZXh0X3Nob3cudmFrYXRhXG5cdFx0XHRcdFx0ICogQHBhcmFtIHtqUXVlcnl9IHJlZmVyZW5jZSB0aGUgZWxlbWVudCB0aGF0IHdhcyByaWdodCBjbGlja2VkXG5cdFx0XHRcdFx0ICogQHBhcmFtIHtqUXVlcnl9IGVsZW1lbnQgdGhlIERPTSBlbGVtZW50IG9mIHRoZSBtZW51IGl0c2VsZlxuXHRcdFx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBwb3NpdGlvbiB0aGUgeCAmIHkgY29vcmRpbmF0ZXMgb2YgdGhlIG1lbnVcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkLnZha2F0YS5jb250ZXh0Ll90cmlnZ2VyKFwic2hvd1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGhpZGUgOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmKHZha2F0YV9jb250ZXh0LmlzX3Zpc2libGUpIHtcblx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5lbGVtZW50LmhpZGUoKS5maW5kKFwidWxcIikuaGlkZSgpLmVuZCgpLmZpbmQoJzpmb2N1cycpLmJsdXIoKTtcblx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5pc192aXNpYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0ICogdHJpZ2dlcmVkIG9uIHRoZSBkb2N1bWVudCB3aGVuIHRoZSBjb250ZXh0bWVudSBpcyBoaWRkZW5cblx0XHRcdFx0XHQgKiBAZXZlbnRcblx0XHRcdFx0XHQgKiBAcGx1Z2luIGNvbnRleHRtZW51XG5cdFx0XHRcdFx0ICogQG5hbWUgY29udGV4dF9oaWRlLnZha2F0YVxuXHRcdFx0XHRcdCAqIEBwYXJhbSB7alF1ZXJ5fSByZWZlcmVuY2UgdGhlIGVsZW1lbnQgdGhhdCB3YXMgcmlnaHQgY2xpY2tlZFxuXHRcdFx0XHRcdCAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IHRoZSBET00gZWxlbWVudCBvZiB0aGUgbWVudSBpdHNlbGZcblx0XHRcdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gcG9zaXRpb24gdGhlIHggJiB5IGNvb3JkaW5hdGVzIG9mIHRoZSBtZW51XG5cdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0JC52YWthdGEuY29udGV4dC5fdHJpZ2dlcihcImhpZGVcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdCQoZnVuY3Rpb24gKCkge1xuXHRcdFx0cmlnaHRfdG9fbGVmdCA9ICQoXCJib2R5XCIpLmNzcyhcImRpcmVjdGlvblwiKSA9PT0gXCJydGxcIjtcblx0XHRcdHZhciB0byA9IGZhbHNlO1xuXG5cdFx0XHR2YWthdGFfY29udGV4dC5lbGVtZW50ID0gJChcIjx1bCBjbGFzcz0ndmFrYXRhLWNvbnRleHQnPjwvdWw+XCIpO1xuXHRcdFx0dmFrYXRhX2NvbnRleHQuZWxlbWVudFxuXHRcdFx0XHQub24oXCJtb3VzZWVudGVyXCIsIFwibGlcIiwgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG5cdFx0XHRcdFx0aWYoJC5jb250YWlucyh0aGlzLCBlLnJlbGF0ZWRUYXJnZXQpKSB7XG5cdFx0XHRcdFx0XHQvLyDQv9GA0LXQvNCw0YXQvdCw0YLQviDQt9Cw0YDQsNC00LggZGVsZWdhdGUgbW91c2VsZWF2ZSDQv9C+LdC00L7Qu9GDXG5cdFx0XHRcdFx0XHQvLyAkKHRoaXMpLmZpbmQoXCIudmFrYXRhLWNvbnRleHQtaG92ZXJcIikucmVtb3ZlQ2xhc3MoXCJ2YWthdGEtY29udGV4dC1ob3ZlclwiKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZih0bykgeyBjbGVhclRpbWVvdXQodG8pOyB9XG5cdFx0XHRcdFx0dmFrYXRhX2NvbnRleHQuZWxlbWVudC5maW5kKFwiLnZha2F0YS1jb250ZXh0LWhvdmVyXCIpLnJlbW92ZUNsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIikuZW5kKCk7XG5cblx0XHRcdFx0XHQkKHRoaXMpXG5cdFx0XHRcdFx0XHQuc2libGluZ3MoKS5maW5kKFwidWxcIikuaGlkZSgpLmVuZCgpLmVuZCgpXG5cdFx0XHRcdFx0XHQucGFyZW50c1VudGlsKFwiLnZha2F0YS1jb250ZXh0XCIsIFwibGlcIikuYWRkQmFjaygpLmFkZENsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIik7XG5cdFx0XHRcdFx0JC52YWthdGEuY29udGV4dC5fc2hvd19zdWJtZW51KHRoaXMpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQvLyDRgtC10YHRgtC+0LLQviAtINC00LDQu9C4INC90LUg0L3QsNGC0L7QstCw0YDQstCwP1xuXHRcdFx0XHQub24oXCJtb3VzZWxlYXZlXCIsIFwibGlcIiwgZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRpZigkLmNvbnRhaW5zKHRoaXMsIGUucmVsYXRlZFRhcmdldCkpIHsgcmV0dXJuOyB9XG5cdFx0XHRcdFx0JCh0aGlzKS5maW5kKFwiLnZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmFkZEJhY2soKS5yZW1vdmVDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQub24oXCJtb3VzZWxlYXZlXCIsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0JCh0aGlzKS5maW5kKFwiLnZha2F0YS1jb250ZXh0LWhvdmVyXCIpLnJlbW92ZUNsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIik7XG5cdFx0XHRcdFx0aWYoJC52YWthdGEuY29udGV4dC5zZXR0aW5ncy5oaWRlX29ubW91c2VsZWF2ZSkge1xuXHRcdFx0XHRcdFx0dG8gPSBzZXRUaW1lb3V0KFxuXHRcdFx0XHRcdFx0XHQoZnVuY3Rpb24gKHQpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gKCkgeyAkLnZha2F0YS5jb250ZXh0LmhpZGUoKTsgfTtcblx0XHRcdFx0XHRcdFx0fSh0aGlzKSksICQudmFrYXRhLmNvbnRleHQuc2V0dGluZ3MuaGlkZV9vbm1vdXNlbGVhdmUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0Lm9uKFwiY2xpY2tcIiwgXCJhXCIsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQub24oXCJtb3VzZXVwXCIsIFwiYVwiLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdGlmKCEkKHRoaXMpLmJsdXIoKS5wYXJlbnQoKS5oYXNDbGFzcyhcInZha2F0YS1jb250ZXh0LWRpc2FibGVkXCIpICYmICQudmFrYXRhLmNvbnRleHQuX2V4ZWN1dGUoJCh0aGlzKS5hdHRyKFwicmVsXCIpKSAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdCQudmFrYXRhLmNvbnRleHQuaGlkZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0Lm9uKCdrZXlkb3duJywgJ2EnLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0dmFyIG8gPSBudWxsO1xuXHRcdFx0XHRcdFx0c3dpdGNoKGUud2hpY2gpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSAxMzpcblx0XHRcdFx0XHRcdFx0Y2FzZSAzMjpcblx0XHRcdFx0XHRcdFx0XHRlLnR5cGUgPSBcIm1vdXNldXBcIjtcblx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdFx0JChlLmN1cnJlbnRUYXJnZXQpLnRyaWdnZXIoZSk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgMzc6XG5cdFx0XHRcdFx0XHRcdFx0aWYodmFrYXRhX2NvbnRleHQuaXNfdmlzaWJsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFrYXRhX2NvbnRleHQuZWxlbWVudC5maW5kKFwiLnZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmxhc3QoKS5wYXJlbnRzKFwibGk6ZXEoMClcIikuZmluZChcInVsXCIpLmhpZGUoKS5maW5kKFwiLnZha2F0YS1jb250ZXh0LWhvdmVyXCIpLnJlbW92ZUNsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIikuZW5kKCkuZW5kKCkuY2hpbGRyZW4oJ2EnKS5mb2N1cygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgMzg6XG5cdFx0XHRcdFx0XHRcdFx0aWYodmFrYXRhX2NvbnRleHQuaXNfdmlzaWJsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0byA9IHZha2F0YV9jb250ZXh0LmVsZW1lbnQuZmluZChcInVsOnZpc2libGVcIikuYWRkQmFjaygpLmxhc3QoKS5jaGlsZHJlbihcIi52YWthdGEtY29udGV4dC1ob3ZlclwiKS5yZW1vdmVDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpLnByZXZBbGwoXCJsaTpub3QoLnZha2F0YS1jb250ZXh0LXNlcGFyYXRvcilcIikuZmlyc3QoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKCFvLmxlbmd0aCkgeyBvID0gdmFrYXRhX2NvbnRleHQuZWxlbWVudC5maW5kKFwidWw6dmlzaWJsZVwiKS5hZGRCYWNrKCkubGFzdCgpLmNoaWxkcmVuKFwibGk6bm90KC52YWthdGEtY29udGV4dC1zZXBhcmF0b3IpXCIpLmxhc3QoKTsgfVxuXHRcdFx0XHRcdFx0XHRcdFx0by5hZGRDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmNoaWxkcmVuKCdhJykuZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIDM5OlxuXHRcdFx0XHRcdFx0XHRcdGlmKHZha2F0YV9jb250ZXh0LmlzX3Zpc2libGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZha2F0YV9jb250ZXh0LmVsZW1lbnQuZmluZChcIi52YWthdGEtY29udGV4dC1ob3ZlclwiKS5sYXN0KCkuY2hpbGRyZW4oXCJ1bFwiKS5zaG93KCkuY2hpbGRyZW4oXCJsaTpub3QoLnZha2F0YS1jb250ZXh0LXNlcGFyYXRvcilcIikucmVtb3ZlQ2xhc3MoXCJ2YWthdGEtY29udGV4dC1ob3ZlclwiKS5maXJzdCgpLmFkZENsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIikuY2hpbGRyZW4oJ2EnKS5mb2N1cygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdFx0XHRcdFx0aWYodmFrYXRhX2NvbnRleHQuaXNfdmlzaWJsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0byA9IHZha2F0YV9jb250ZXh0LmVsZW1lbnQuZmluZChcInVsOnZpc2libGVcIikuYWRkQmFjaygpLmxhc3QoKS5jaGlsZHJlbihcIi52YWthdGEtY29udGV4dC1ob3ZlclwiKS5yZW1vdmVDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpLm5leHRBbGwoXCJsaTpub3QoLnZha2F0YS1jb250ZXh0LXNlcGFyYXRvcilcIikuZmlyc3QoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKCFvLmxlbmd0aCkgeyBvID0gdmFrYXRhX2NvbnRleHQuZWxlbWVudC5maW5kKFwidWw6dmlzaWJsZVwiKS5hZGRCYWNrKCkubGFzdCgpLmNoaWxkcmVuKFwibGk6bm90KC52YWthdGEtY29udGV4dC1zZXBhcmF0b3IpXCIpLmZpcnN0KCk7IH1cblx0XHRcdFx0XHRcdFx0XHRcdG8uYWRkQ2xhc3MoXCJ2YWthdGEtY29udGV4dC1ob3ZlclwiKS5jaGlsZHJlbignYScpLmZvY3VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSAyNzpcblx0XHRcdFx0XHRcdFx0XHQkLnZha2F0YS5jb250ZXh0LmhpZGUoKTtcblx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhlLndoaWNoKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQub24oJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHR2YXIgYSA9IHZha2F0YV9jb250ZXh0LmVsZW1lbnQuZmluZCgnLnZha2F0YS1jb250ZXh0bWVudS1zaG9ydGN1dC0nICsgZS53aGljaCkucGFyZW50KCk7XG5cdFx0XHRcdFx0aWYoYS5wYXJlbnQoKS5ub3QoJy52YWthdGEtY29udGV4dC1kaXNhYmxlZCcpKSB7XG5cdFx0XHRcdFx0XHRhLm1vdXNldXAoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5hcHBlbmRUbyhcImJvZHlcIik7XG5cblx0XHRcdCQoZG9jdW1lbnQpXG5cdFx0XHRcdC5vbihcIm1vdXNlZG93blwiLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdGlmKHZha2F0YV9jb250ZXh0LmlzX3Zpc2libGUgJiYgISQuY29udGFpbnModmFrYXRhX2NvbnRleHQuZWxlbWVudFswXSwgZS50YXJnZXQpKSB7ICQudmFrYXRhLmNvbnRleHQuaGlkZSgpOyB9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5vbihcImNvbnRleHRfc2hvdy52YWthdGFcIiwgZnVuY3Rpb24gKGUsIGRhdGEpIHtcblx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5lbGVtZW50LmZpbmQoXCJsaTpoYXModWwpXCIpLmNoaWxkcmVuKFwiYVwiKS5hZGRDbGFzcyhcInZha2F0YS1jb250ZXh0LXBhcmVudFwiKTtcblx0XHRcdFx0XHRpZihyaWdodF90b19sZWZ0KSB7XG5cdFx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5lbGVtZW50LmFkZENsYXNzKFwidmFrYXRhLWNvbnRleHQtcnRsXCIpLmNzcyhcImRpcmVjdGlvblwiLCBcInJ0bFwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gYWxzbyBhcHBseSBhIFJUTCBjbGFzcz9cblx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5lbGVtZW50LmZpbmQoXCJ1bFwiKS5oaWRlKCkuZW5kKCk7XG5cdFx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9KCQpKTtcblx0Ly8gJC5qc3RyZWUuZGVmYXVsdHMucGx1Z2lucy5wdXNoKFwiY29udGV4dG1lbnVcIik7XG5cbi8qKlxuICogIyMjIERyYWcnbidkcm9wIHBsdWdpblxuICpcbiAqIEVuYWJsZXMgZHJhZ2dpbmcgYW5kIGRyb3BwaW5nIG9mIG5vZGVzIGluIHRoZSB0cmVlLCByZXN1bHRpbmcgaW4gYSBtb3ZlIG9yIGNvcHkgb3BlcmF0aW9ucy5cbiAqL1xuXG5cdC8qKlxuXHQgKiBzdG9yZXMgYWxsIGRlZmF1bHRzIGZvciB0aGUgZHJhZyduJ2Ryb3AgcGx1Z2luXG5cdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmRuZFxuXHQgKiBAcGx1Z2luIGRuZFxuXHQgKi9cblx0JC5qc3RyZWUuZGVmYXVsdHMuZG5kID0ge1xuXHRcdC8qKlxuXHRcdCAqIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGEgY29weSBzaG91bGQgYmUgcG9zc2libGUgd2hpbGUgZHJhZ2dpbmcgKGJ5IHByZXNzaW50IHRoZSBtZXRhIGtleSBvciBDdHJsKS4gRGVmYXVsdHMgdG8gYHRydWVgLlxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmRuZC5jb3B5XG5cdFx0ICogQHBsdWdpbiBkbmRcblx0XHQgKi9cblx0XHRjb3B5IDogdHJ1ZSxcblx0XHQvKipcblx0XHQgKiBhIG51bWJlciBpbmRpY2F0aW5nIGhvdyBsb25nIGEgbm9kZSBzaG91bGQgcmVtYWluIGhvdmVyZWQgd2hpbGUgZHJhZ2dpbmcgdG8gYmUgb3BlbmVkLiBEZWZhdWx0cyB0byBgNTAwYC5cblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5kbmQub3Blbl90aW1lb3V0XG5cdFx0ICogQHBsdWdpbiBkbmRcblx0XHQgKi9cblx0XHRvcGVuX3RpbWVvdXQgOiA1MDAsXG5cdFx0LyoqXG5cdFx0ICogYSBmdW5jdGlvbiBpbnZva2VkIGVhY2ggdGltZSBhIG5vZGUgaXMgYWJvdXQgdG8gYmUgZHJhZ2dlZCwgaW52b2tlZCBpbiB0aGUgdHJlZSdzIHNjb3BlIGFuZCByZWNlaXZlcyB0aGUgbm9kZSBhcyBhbiBhcmd1bWVudCAtIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgZHJhZ2dpbmdcblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5kbmQuaXNfZHJhZ2dhYmxlXG5cdFx0ICogQHBsdWdpbiBkbmRcblx0XHQgKi9cblx0XHRpc19kcmFnZ2FibGUgOiB0cnVlLFxuXHRcdC8qKlxuXHRcdCAqIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGNoZWNrcyBzaG91bGQgY29uc3RhbnRseSBiZSBtYWRlIHdoaWxlIHRoZSB1c2VyIGlzIGRyYWdnaW5nIHRoZSBub2RlIChhcyBvcHBvc2VkIHRvIGNoZWNraW5nIG9ubHkgb24gZHJvcCksIGRlZmF1bHQgaXMgYHRydWVgXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuZG5kLmNoZWNrX3doaWxlX2RyYWdnaW5nXG5cdFx0ICogQHBsdWdpbiBkbmRcblx0XHQgKi9cblx0XHRjaGVja193aGlsZV9kcmFnZ2luZyA6IHRydWVcblx0fTtcblx0Ly8gVE9ETzogbm93IGNoZWNrIHdvcmtzIGJ5IGNoZWNraW5nIGZvciBlYWNoIG5vZGUgaW5kaXZpZHVhbGx5LCBob3cgYWJvdXQgbWF4X2NoaWxkcmVuLCB1bmlxdWUsIGV0Yz9cblx0Ly8gVE9ETzogZHJvcCBzb21ld2hlcmUgZWxzZSAtIG1heWJlIGRlbW8gb25seT9cblx0JC5qc3RyZWUucGx1Z2lucy5kbmQgPSBmdW5jdGlvbiAob3B0aW9ucywgcGFyZW50KSB7XG5cdFx0dGhpcy5iaW5kID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cGFyZW50LmJpbmQuY2FsbCh0aGlzKTtcblxuXHRcdFx0dGhpcy5lbGVtZW50XG5cdFx0XHRcdC5vbignbW91c2Vkb3duIHRvdWNoc3RhcnQnLCAnLmpzdHJlZS1hbmNob3InLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0dmFyIG9iaiA9IHRoaXMuZ2V0X25vZGUoZS50YXJnZXQpLFxuXHRcdFx0XHRcdFx0bWx0ID0gdGhpcy5pc19zZWxlY3RlZChvYmopID8gdGhpcy5nZXRfc2VsZWN0ZWQoKS5sZW5ndGggOiAxO1xuXHRcdFx0XHRcdGlmKG9iaiAmJiBvYmouaWQgJiYgb2JqLmlkICE9PSBcIiNcIiAmJiAoZS53aGljaCA9PT0gMSB8fCBlLnR5cGUgPT09IFwidG91Y2hzdGFydFwiKSAmJlxuXHRcdFx0XHRcdFx0KHRoaXMuc2V0dGluZ3MuZG5kLmlzX2RyYWdnYWJsZSA9PT0gdHJ1ZSB8fCAoJC5pc0Z1bmN0aW9uKHRoaXMuc2V0dGluZ3MuZG5kLmlzX2RyYWdnYWJsZSkgJiYgdGhpcy5zZXR0aW5ncy5kbmQuaXNfZHJhZ2dhYmxlLmNhbGwodGhpcywgb2JqKSkpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLmVsZW1lbnQudHJpZ2dlcignbW91c2Vkb3duLmpzdHJlZScpO1xuXHRcdFx0XHRcdFx0cmV0dXJuICQudmFrYXRhLmRuZC5zdGFydChlLCB7ICdqc3RyZWUnIDogdHJ1ZSwgJ29yaWdpbicgOiB0aGlzLCAnb2JqJyA6IHRoaXMuZ2V0X25vZGUob2JqLHRydWUpLCAnbm9kZXMnIDogbWx0ID4gMSA/IHRoaXMuZ2V0X3NlbGVjdGVkKCkgOiBbb2JqLmlkXSB9LCAnPGRpdiBpZD1cImpzdHJlZS1kbmRcIiBjbGFzcz1cImpzdHJlZS0nICsgdGhpcy5nZXRfdGhlbWUoKSArICdcIj48aSBjbGFzcz1cImpzdHJlZS1pY29uIGpzdHJlZS1lclwiPjwvaT4nICsgKG1sdCA+IDEgPyBtbHQgKyAnICcgKyB0aGlzLmdldF9zdHJpbmcoJ25vZGVzJykgOiB0aGlzLmdldF90ZXh0KGUuY3VycmVudFRhcmdldCwgdHJ1ZSkpICsgJzxpbnMgY2xhc3M9XCJqc3RyZWUtY29weVwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPis8L2lucz48L2Rpdj4nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sIHRoaXMpKTtcblx0XHR9O1xuXHR9O1xuXG5cdCQoZnVuY3Rpb24oKSB7XG5cdFx0Ly8gYmluZCBvbmx5IG9uY2UgZm9yIGFsbCBpbnN0YW5jZXNcblx0XHR2YXIgbGFzdG12ID0gZmFsc2UsXG5cdFx0XHRsYXN0ZXIgPSBmYWxzZSxcblx0XHRcdG9wZW50byA9IGZhbHNlLFxuXHRcdFx0bWFya2VyID0gJCgnPGRpdiBpZD1cImpzdHJlZS1tYXJrZXJcIj4mIzE2MDs8L2Rpdj4nKS5oaWRlKCkuYXBwZW5kVG8oJ2JvZHknKTtcblxuXHRcdCQoZG9jdW1lbnQpXG5cdFx0XHQuYmluZCgnZG5kX3N0YXJ0LnZha2F0YScsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XG5cdFx0XHRcdGxhc3RtdiA9IGZhbHNlO1xuXHRcdFx0fSlcblx0XHRcdC5iaW5kKCdkbmRfbW92ZS52YWthdGEnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xuXHRcdFx0XHRpZihvcGVudG8pIHsgY2xlYXJUaW1lb3V0KG9wZW50byk7IH1cblx0XHRcdFx0aWYoIWRhdGEuZGF0YS5qc3RyZWUpIHsgcmV0dXJuOyB9XG5cblx0XHRcdFx0Ly8gaWYgd2UgYXJlIGhvdmVyaW5nIHRoZSBtYXJrZXIgaW1hZ2UgZG8gbm90aGluZyAoY2FuIGhhcHBlbiBvbiBcImluc2lkZVwiIGRyYWdzKVxuXHRcdFx0XHRpZihkYXRhLmV2ZW50LnRhcmdldC5pZCAmJiBkYXRhLmV2ZW50LnRhcmdldC5pZCA9PT0gJ2pzdHJlZS1tYXJrZXInKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGlucyA9ICQuanN0cmVlLnJlZmVyZW5jZShkYXRhLmV2ZW50LnRhcmdldCksXG5cdFx0XHRcdFx0cmVmID0gZmFsc2UsXG5cdFx0XHRcdFx0b2ZmID0gZmFsc2UsXG5cdFx0XHRcdFx0cmVsID0gZmFsc2UsXG5cdFx0XHRcdFx0bCwgdCwgaCwgcCwgaSwgbywgb2ssIHQxLCB0Miwgb3AsIHBzLCBwcjtcblx0XHRcdFx0Ly8gaWYgd2UgYXJlIG92ZXIgYW4gaW5zdGFuY2Vcblx0XHRcdFx0aWYoaW5zICYmIGlucy5fZGF0YSAmJiBpbnMuX2RhdGEuZG5kKSB7XG5cdFx0XHRcdFx0bWFya2VyLmF0dHIoJ2NsYXNzJywgJ2pzdHJlZS0nICsgaW5zLmdldF90aGVtZSgpKTtcblx0XHRcdFx0XHRkYXRhLmhlbHBlclxuXHRcdFx0XHRcdFx0LmNoaWxkcmVuKCkuYXR0cignY2xhc3MnLCAnanN0cmVlLScgKyBpbnMuZ2V0X3RoZW1lKCkpXG5cdFx0XHRcdFx0XHQuZmluZCgnLmpzdHJlZS1jb3B5OmVxKDApJylbIGRhdGEuZGF0YS5vcmlnaW4gJiYgZGF0YS5kYXRhLm9yaWdpbi5zZXR0aW5ncy5kbmQuY29weSAmJiAoZGF0YS5ldmVudC5tZXRhS2V5IHx8IGRhdGEuZXZlbnQuY3RybEtleSkgPyAnc2hvdycgOiAnaGlkZScgXSgpO1xuXG5cblx0XHRcdFx0XHQvLyBpZiBhcmUgaG92ZXJpbmcgdGhlIGNvbnRhaW5lciBpdHNlbGYgYWRkIGEgbmV3IHJvb3Qgbm9kZVxuXHRcdFx0XHRcdGlmKCAoZGF0YS5ldmVudC50YXJnZXQgPT09IGlucy5lbGVtZW50WzBdIHx8IGRhdGEuZXZlbnQudGFyZ2V0ID09PSBpbnMuZ2V0X2NvbnRhaW5lcl91bCgpWzBdKSAmJiBpbnMuZ2V0X2NvbnRhaW5lcl91bCgpLmNoaWxkcmVuKCkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRvayA9IHRydWU7XG5cdFx0XHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IGRhdGEuZGF0YS5ub2Rlcy5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcblx0XHRcdFx0XHRcdFx0b2sgPSBvayAmJiBpbnMuY2hlY2soIChkYXRhLmRhdGEub3JpZ2luICYmIGRhdGEuZGF0YS5vcmlnaW4uc2V0dGluZ3MuZG5kLmNvcHkgJiYgKGRhdGEuZXZlbnQubWV0YUtleSB8fCBkYXRhLmV2ZW50LmN0cmxLZXkpID8gXCJjb3B5X25vZGVcIiA6IFwibW92ZV9ub2RlXCIpLCAoZGF0YS5kYXRhLm9yaWdpbiAmJiBkYXRhLmRhdGEub3JpZ2luICE9PSBpbnMgPyBkYXRhLmRhdGEub3JpZ2luLmdldF9ub2RlKGRhdGEuZGF0YS5ub2Rlc1t0MV0pIDogZGF0YS5kYXRhLm5vZGVzW3QxXSksICcjJywgJ2xhc3QnKTtcblx0XHRcdFx0XHRcdFx0aWYoIW9rKSB7IGJyZWFrOyB9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihvaykge1xuXHRcdFx0XHRcdFx0XHRsYXN0bXYgPSB7ICdpbnMnIDogaW5zLCAncGFyJyA6ICcjJywgJ3BvcycgOiAnbGFzdCcgfTtcblx0XHRcdFx0XHRcdFx0bWFya2VyLmhpZGUoKTtcblx0XHRcdFx0XHRcdFx0ZGF0YS5oZWxwZXIuZmluZCgnLmpzdHJlZS1pY29uOmVxKDApJykucmVtb3ZlQ2xhc3MoJ2pzdHJlZS1lcicpLmFkZENsYXNzKCdqc3RyZWUtb2snKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdC8vIGlmIHdlIGFyZSBob3ZlcmluZyBhIHRyZWUgbm9kZVxuXHRcdFx0XHRcdFx0cmVmID0gJChkYXRhLmV2ZW50LnRhcmdldCkuY2xvc2VzdCgnYScpO1xuXHRcdFx0XHRcdFx0aWYocmVmICYmIHJlZi5sZW5ndGggJiYgcmVmLnBhcmVudCgpLmlzKCcuanN0cmVlLWNsb3NlZCwgLmpzdHJlZS1vcGVuLCAuanN0cmVlLWxlYWYnKSkge1xuXHRcdFx0XHRcdFx0XHRvZmYgPSByZWYub2Zmc2V0KCk7XG5cdFx0XHRcdFx0XHRcdHJlbCA9IGRhdGEuZXZlbnQucGFnZVkgLSBvZmYudG9wO1xuXHRcdFx0XHRcdFx0XHRoID0gcmVmLmhlaWdodCgpO1xuXHRcdFx0XHRcdFx0XHRpZihyZWwgPCBoIC8gMykge1xuXHRcdFx0XHRcdFx0XHRcdG8gPSBbJ2InLCAnaScsICdhJ107XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZWxzZSBpZihyZWwgPiBoIC0gaCAvIDMpIHtcblx0XHRcdFx0XHRcdFx0XHRvID0gWydhJywgJ2knLCAnYiddO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG8gPSByZWwgPiBoIC8gMiA/IFsnaScsICdhJywgJ2InXSA6IFsnaScsICdiJywgJ2EnXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQkLmVhY2gobywgZnVuY3Rpb24gKGosIHYpIHtcblx0XHRcdFx0XHRcdFx0XHRzd2l0Y2godikge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAnYic6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGwgPSBvZmYubGVmdCAtIDY7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHQgPSBvZmYudG9wIC0gNTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cCA9IGlucy5nZXRfcGFyZW50KHJlZik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGkgPSByZWYucGFyZW50KCkuaW5kZXgoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlICdpJzpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bCA9IG9mZi5sZWZ0IC0gMjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dCA9IG9mZi50b3AgLSA1ICsgaCAvIDIgKyAxO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwID0gcmVmLnBhcmVudCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlICdhJzpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bCA9IG9mZi5sZWZ0IC0gNjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dCA9IG9mZi50b3AgLSA1ICsgaDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cCA9IGlucy5nZXRfcGFyZW50KHJlZik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGkgPSByZWYucGFyZW50KCkuaW5kZXgoKSArIDE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvKiFcblx0XHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBtb3ZpbmcgaW5zaWRlLCBidXQgdGhlIG5vZGUgaXMgbm90IHlldCBsb2FkZWQ/XG5cdFx0XHRcdFx0XHRcdFx0Ly8gdGhlIGNoZWNrIHdpbGwgd29yayBhbnl3YXksIGFzIHdoZW4gbW92aW5nIHRoZSBub2RlIHdpbGwgYmUgbG9hZGVkIGZpcnN0IGFuZCBjaGVja2VkIGFnYWluXG5cdFx0XHRcdFx0XHRcdFx0aWYodiA9PT0gJ2knICYmICFpbnMuaXNfbG9hZGVkKHApKSB7IH1cblx0XHRcdFx0XHRcdFx0XHQqL1xuXHRcdFx0XHRcdFx0XHRcdG9rID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IGRhdGEuZGF0YS5ub2Rlcy5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9wID0gZGF0YS5kYXRhLm9yaWdpbiAmJiBkYXRhLmRhdGEub3JpZ2luLnNldHRpbmdzLmRuZC5jb3B5ICYmIChkYXRhLmV2ZW50Lm1ldGFLZXkgfHwgZGF0YS5ldmVudC5jdHJsS2V5KSA/IFwiY29weV9ub2RlXCIgOiBcIm1vdmVfbm9kZVwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0cHMgPSBpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYob3AgPT09IFwibW92ZV9ub2RlXCIgJiYgdiA9PT0gJ2EnICYmIChkYXRhLmRhdGEub3JpZ2luICYmIGRhdGEuZGF0YS5vcmlnaW4gPT09IGlucykgJiYgcCA9PT0gaW5zLmdldF9wYXJlbnQoZGF0YS5kYXRhLm5vZGVzW3QxXSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHIgPSBpbnMuZ2V0X25vZGUocCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHBzID4gJC5pbkFycmF5KGRhdGEuZGF0YS5ub2Rlc1t0MV0sIHByLmNoaWxkcmVuKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBzIC09IDE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdG9rID0gb2sgJiYgKCAoaW5zICYmIGlucy5zZXR0aW5ncyAmJiBpbnMuc2V0dGluZ3MuZG5kICYmIGlucy5zZXR0aW5ncy5kbmQuY2hlY2tfd2hpbGVfZHJhZ2dpbmcgPT09IGZhbHNlKSB8fCBpbnMuY2hlY2sob3AsIChkYXRhLmRhdGEub3JpZ2luICYmIGRhdGEuZGF0YS5vcmlnaW4gIT09IGlucyA/IGRhdGEuZGF0YS5vcmlnaW4uZ2V0X25vZGUoZGF0YS5kYXRhLm5vZGVzW3QxXSkgOiBkYXRhLmRhdGEubm9kZXNbdDFdKSwgcCwgcHMpICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZighb2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoaW5zICYmIGlucy5sYXN0X2Vycm9yKSB7IGxhc3RlciA9IGlucy5sYXN0X2Vycm9yKCk7IH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmKG9rKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZih2ID09PSAnaScgJiYgcmVmLnBhcmVudCgpLmlzKCcuanN0cmVlLWNsb3NlZCcpICYmIGlucy5zZXR0aW5ncy5kbmQub3Blbl90aW1lb3V0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9wZW50byA9IHNldFRpbWVvdXQoKGZ1bmN0aW9uICh4LCB6KSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHgub3Blbl9ub2RlKHopOyB9OyB9KGlucywgcmVmKSksIGlucy5zZXR0aW5ncy5kbmQub3Blbl90aW1lb3V0KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGxhc3RtdiA9IHsgJ2lucycgOiBpbnMsICdwYXInIDogcCwgJ3BvcycgOiBpIH07XG5cdFx0XHRcdFx0XHRcdFx0XHRtYXJrZXIuY3NzKHsgJ2xlZnQnIDogbCArICdweCcsICd0b3AnIDogdCArICdweCcgfSkuc2hvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS5oZWxwZXIuZmluZCgnLmpzdHJlZS1pY29uOmVxKDApJykucmVtb3ZlQ2xhc3MoJ2pzdHJlZS1lcicpLmFkZENsYXNzKCdqc3RyZWUtb2snKTtcblx0XHRcdFx0XHRcdFx0XHRcdGxhc3RlciA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdFx0byA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0aWYobyA9PT0gdHJ1ZSkgeyByZXR1cm47IH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0bGFzdG12ID0gZmFsc2U7XG5cdFx0XHRcdGRhdGEuaGVscGVyLmZpbmQoJy5qc3RyZWUtaWNvbicpLnJlbW92ZUNsYXNzKCdqc3RyZWUtb2snKS5hZGRDbGFzcygnanN0cmVlLWVyJyk7XG5cdFx0XHRcdG1hcmtlci5oaWRlKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmJpbmQoJ2RuZF9zY3JvbGwudmFrYXRhJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcblx0XHRcdFx0aWYoIWRhdGEuZGF0YS5qc3RyZWUpIHsgcmV0dXJuOyB9XG5cdFx0XHRcdG1hcmtlci5oaWRlKCk7XG5cdFx0XHRcdGxhc3RtdiA9IGZhbHNlO1xuXHRcdFx0XHRkYXRhLmhlbHBlci5maW5kKCcuanN0cmVlLWljb246ZXEoMCknKS5yZW1vdmVDbGFzcygnanN0cmVlLW9rJykuYWRkQ2xhc3MoJ2pzdHJlZS1lcicpO1xuXHRcdFx0fSlcblx0XHRcdC5iaW5kKCdkbmRfc3RvcC52YWthdGEnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xuXHRcdFx0XHRpZihvcGVudG8pIHsgY2xlYXJUaW1lb3V0KG9wZW50byk7IH1cblx0XHRcdFx0aWYoIWRhdGEuZGF0YS5qc3RyZWUpIHsgcmV0dXJuOyB9XG5cdFx0XHRcdG1hcmtlci5oaWRlKCk7XG5cdFx0XHRcdHZhciBpLCBqLCBub2RlcyA9IFtdO1xuXHRcdFx0XHRpZihsYXN0bXYpIHtcblx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSBkYXRhLmRhdGEubm9kZXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdFx0XHRub2Rlc1tpXSA9IGRhdGEuZGF0YS5vcmlnaW4gPyBkYXRhLmRhdGEub3JpZ2luLmdldF9ub2RlKGRhdGEuZGF0YS5ub2Rlc1tpXSkgOiBkYXRhLmRhdGEubm9kZXNbaV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGxhc3Rtdi5pbnNbIGRhdGEuZGF0YS5vcmlnaW4gJiYgZGF0YS5kYXRhLm9yaWdpbi5zZXR0aW5ncy5kbmQuY29weSAmJiAoZGF0YS5ldmVudC5tZXRhS2V5IHx8IGRhdGEuZXZlbnQuY3RybEtleSkgPyAnY29weV9ub2RlJyA6ICdtb3ZlX25vZGUnIF0obm9kZXMsIGxhc3Rtdi5wYXIsIGxhc3Rtdi5wb3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGkgPSAkKGRhdGEuZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCcuanN0cmVlJyk7XG5cdFx0XHRcdFx0aWYoaS5sZW5ndGggJiYgbGFzdGVyICYmIGxhc3Rlci5lcnJvciAmJiBsYXN0ZXIuZXJyb3IgPT09ICdjaGVjaycpIHtcblx0XHRcdFx0XHRcdGkgPSBpLmpzdHJlZSh0cnVlKTtcblx0XHRcdFx0XHRcdGlmKGkpIHtcblx0XHRcdFx0XHRcdFx0aS5zZXR0aW5ncy5jb3JlLmVycm9yLmNhbGwodGhpcywgbGFzdGVyKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuYmluZCgna2V5dXAga2V5ZG93bicsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XG5cdFx0XHRcdGRhdGEgPSAkLnZha2F0YS5kbmQuX2dldCgpO1xuXHRcdFx0XHRpZihkYXRhLmRhdGEgJiYgZGF0YS5kYXRhLmpzdHJlZSkge1xuXHRcdFx0XHRcdGRhdGEuaGVscGVyLmZpbmQoJy5qc3RyZWUtY29weTplcSgwKScpWyBkYXRhLmRhdGEub3JpZ2luICYmIGRhdGEuZGF0YS5vcmlnaW4uc2V0dGluZ3MuZG5kLmNvcHkgJiYgKGUubWV0YUtleSB8fCBlLmN0cmxLZXkpID8gJ3Nob3cnIDogJ2hpZGUnIF0oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH0pO1xuXG5cdC8vIGhlbHBlcnNcblx0KGZ1bmN0aW9uICgkKSB7XG5cdFx0JC5mbi52YWthdGFfcmV2ZXJzZSA9IFtdLnJldmVyc2U7XG5cdFx0Ly8gcHJpdmF0ZSB2YXJpYWJsZVxuXHRcdHZhciB2YWthdGFfZG5kID0ge1xuXHRcdFx0ZWxlbWVudFx0OiBmYWxzZSxcblx0XHRcdGlzX2Rvd25cdDogZmFsc2UsXG5cdFx0XHRpc19kcmFnXHQ6IGZhbHNlLFxuXHRcdFx0aGVscGVyXHQ6IGZhbHNlLFxuXHRcdFx0aGVscGVyX3c6IDAsXG5cdFx0XHRkYXRhXHQ6IGZhbHNlLFxuXHRcdFx0aW5pdF94XHQ6IDAsXG5cdFx0XHRpbml0X3lcdDogMCxcblx0XHRcdHNjcm9sbF9sOiAwLFxuXHRcdFx0c2Nyb2xsX3Q6IDAsXG5cdFx0XHRzY3JvbGxfZTogZmFsc2UsXG5cdFx0XHRzY3JvbGxfaTogZmFsc2Vcblx0XHR9O1xuXHRcdCQudmFrYXRhLmRuZCA9IHtcblx0XHRcdHNldHRpbmdzIDoge1xuXHRcdFx0XHRzY3JvbGxfc3BlZWRcdFx0OiAxMCxcblx0XHRcdFx0c2Nyb2xsX3Byb3hpbWl0eVx0OiAyMCxcblx0XHRcdFx0aGVscGVyX2xlZnRcdFx0XHQ6IDUsXG5cdFx0XHRcdGhlbHBlcl90b3BcdFx0XHQ6IDEwLFxuXHRcdFx0XHR0aHJlc2hvbGRcdFx0XHQ6IDVcblx0XHRcdH0sXG5cdFx0XHRfdHJpZ2dlciA6IGZ1bmN0aW9uIChldmVudF9uYW1lLCBlKSB7XG5cdFx0XHRcdHZhciBkYXRhID0gJC52YWthdGEuZG5kLl9nZXQoKTtcblx0XHRcdFx0ZGF0YS5ldmVudCA9IGU7XG5cdFx0XHRcdCQoZG9jdW1lbnQpLnRyaWdnZXJIYW5kbGVyKFwiZG5kX1wiICsgZXZlbnRfbmFtZSArIFwiLnZha2F0YVwiLCBkYXRhKTtcblx0XHRcdH0sXG5cdFx0XHRfZ2V0IDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFwiZGF0YVwiXHRcdDogdmFrYXRhX2RuZC5kYXRhLFxuXHRcdFx0XHRcdFwiZWxlbWVudFwiXHQ6IHZha2F0YV9kbmQuZWxlbWVudCxcblx0XHRcdFx0XHRcImhlbHBlclwiXHQ6IHZha2F0YV9kbmQuaGVscGVyXG5cdFx0XHRcdH07XG5cdFx0XHR9LFxuXHRcdFx0X2NsZWFuIDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZih2YWthdGFfZG5kLmhlbHBlcikgeyB2YWthdGFfZG5kLmhlbHBlci5yZW1vdmUoKTsgfVxuXHRcdFx0XHRpZih2YWthdGFfZG5kLnNjcm9sbF9pKSB7IGNsZWFySW50ZXJ2YWwodmFrYXRhX2RuZC5zY3JvbGxfaSk7IHZha2F0YV9kbmQuc2Nyb2xsX2kgPSBmYWxzZTsgfVxuXHRcdFx0XHR2YWthdGFfZG5kID0ge1xuXHRcdFx0XHRcdGVsZW1lbnRcdDogZmFsc2UsXG5cdFx0XHRcdFx0aXNfZG93blx0OiBmYWxzZSxcblx0XHRcdFx0XHRpc19kcmFnXHQ6IGZhbHNlLFxuXHRcdFx0XHRcdGhlbHBlclx0OiBmYWxzZSxcblx0XHRcdFx0XHRoZWxwZXJfdzogMCxcblx0XHRcdFx0XHRkYXRhXHQ6IGZhbHNlLFxuXHRcdFx0XHRcdGluaXRfeFx0OiAwLFxuXHRcdFx0XHRcdGluaXRfeVx0OiAwLFxuXHRcdFx0XHRcdHNjcm9sbF9sOiAwLFxuXHRcdFx0XHRcdHNjcm9sbF90OiAwLFxuXHRcdFx0XHRcdHNjcm9sbF9lOiBmYWxzZSxcblx0XHRcdFx0XHRzY3JvbGxfaTogZmFsc2Vcblx0XHRcdFx0fTtcblx0XHRcdFx0JChkb2N1bWVudCkub2ZmKFwibW91c2Vtb3ZlIHRvdWNobW92ZVwiLCAkLnZha2F0YS5kbmQuZHJhZyk7XG5cdFx0XHRcdCQoZG9jdW1lbnQpLm9mZihcIm1vdXNldXAgdG91Y2hlbmRcIiwgJC52YWthdGEuZG5kLnN0b3ApO1xuXHRcdFx0fSxcblx0XHRcdF9zY3JvbGwgOiBmdW5jdGlvbiAoaW5pdF9vbmx5KSB7XG5cdFx0XHRcdGlmKCF2YWthdGFfZG5kLnNjcm9sbF9lIHx8ICghdmFrYXRhX2RuZC5zY3JvbGxfbCAmJiAhdmFrYXRhX2RuZC5zY3JvbGxfdCkpIHtcblx0XHRcdFx0XHRpZih2YWthdGFfZG5kLnNjcm9sbF9pKSB7IGNsZWFySW50ZXJ2YWwodmFrYXRhX2RuZC5zY3JvbGxfaSk7IHZha2F0YV9kbmQuc2Nyb2xsX2kgPSBmYWxzZTsgfVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZighdmFrYXRhX2RuZC5zY3JvbGxfaSkge1xuXHRcdFx0XHRcdHZha2F0YV9kbmQuc2Nyb2xsX2kgPSBzZXRJbnRlcnZhbCgkLnZha2F0YS5kbmQuX3Njcm9sbCwgMTAwKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoaW5pdF9vbmx5ID09PSB0cnVlKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdFx0XHRcdHZhciBpID0gdmFrYXRhX2RuZC5zY3JvbGxfZS5zY3JvbGxUb3AoKSxcblx0XHRcdFx0XHRqID0gdmFrYXRhX2RuZC5zY3JvbGxfZS5zY3JvbGxMZWZ0KCk7XG5cdFx0XHRcdHZha2F0YV9kbmQuc2Nyb2xsX2Uuc2Nyb2xsVG9wKGkgKyB2YWthdGFfZG5kLnNjcm9sbF90ICogJC52YWthdGEuZG5kLnNldHRpbmdzLnNjcm9sbF9zcGVlZCk7XG5cdFx0XHRcdHZha2F0YV9kbmQuc2Nyb2xsX2Uuc2Nyb2xsTGVmdChqICsgdmFrYXRhX2RuZC5zY3JvbGxfbCAqICQudmFrYXRhLmRuZC5zZXR0aW5ncy5zY3JvbGxfc3BlZWQpO1xuXHRcdFx0XHRpZihpICE9PSB2YWthdGFfZG5kLnNjcm9sbF9lLnNjcm9sbFRvcCgpIHx8IGogIT09IHZha2F0YV9kbmQuc2Nyb2xsX2Uuc2Nyb2xsTGVmdCgpKSB7XG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0ICogdHJpZ2dlcmVkIG9uIHRoZSBkb2N1bWVudCB3aGVuIGEgZHJhZyBjYXVzZXMgYW4gZWxlbWVudCB0byBzY3JvbGxcblx0XHRcdFx0XHQgKiBAZXZlbnRcblx0XHRcdFx0XHQgKiBAcGx1Z2luIGRuZFxuXHRcdFx0XHRcdCAqIEBuYW1lIGRuZF9zY3JvbGwudmFrYXRhXG5cdFx0XHRcdFx0ICogQHBhcmFtIHtNaXhlZH0gZGF0YSBhbnkgZGF0YSBzdXBwbGllZCB3aXRoIHRoZSBjYWxsIHRvICQudmFrYXRhLmRuZC5zdGFydFxuXHRcdFx0XHRcdCAqIEBwYXJhbSB7RE9NfSBlbGVtZW50IHRoZSBET00gZWxlbWVudCBiZWluZyBkcmFnZ2VkXG5cdFx0XHRcdFx0ICogQHBhcmFtIHtqUXVlcnl9IGhlbHBlciB0aGUgaGVscGVyIHNob3duIG5leHQgdG8gdGhlIG1vdXNlXG5cdFx0XHRcdFx0ICogQHBhcmFtIHtqUXVlcnl9IGV2ZW50IHRoZSBlbGVtZW50IHRoYXQgaXMgc2Nyb2xsaW5nXG5cdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0JC52YWthdGEuZG5kLl90cmlnZ2VyKFwic2Nyb2xsXCIsIHZha2F0YV9kbmQuc2Nyb2xsX2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c3RhcnQgOiBmdW5jdGlvbiAoZSwgZGF0YSwgaHRtbCkge1xuXHRcdFx0XHRpZihlLnR5cGUgPT09IFwidG91Y2hzdGFydFwiICYmIGUub3JpZ2luYWxFdmVudCAmJiBlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXMgJiYgZS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdKSB7XG5cdFx0XHRcdFx0ZS5wYWdlWCA9IGUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWDtcblx0XHRcdFx0XHRlLnBhZ2VZID0gZS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZO1xuXHRcdFx0XHRcdGUudGFyZ2V0ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVggLSB3aW5kb3cucGFnZVhPZmZzZXQsIGUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWSAtIHdpbmRvdy5wYWdlWU9mZnNldCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYodmFrYXRhX2RuZC5pc19kcmFnKSB7ICQudmFrYXRhLmRuZC5zdG9wKHt9KTsgfVxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGUuY3VycmVudFRhcmdldC51bnNlbGVjdGFibGUgPSBcIm9uXCI7XG5cdFx0XHRcdFx0ZS5jdXJyZW50VGFyZ2V0Lm9uc2VsZWN0c3RhcnQgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9O1xuXHRcdFx0XHRcdGlmKGUuY3VycmVudFRhcmdldC5zdHlsZSkgeyBlLmN1cnJlbnRUYXJnZXQuc3R5bGUuTW96VXNlclNlbGVjdCA9IFwibm9uZVwiOyB9XG5cdFx0XHRcdH0gY2F0Y2goaWdub3JlKSB7IH1cblx0XHRcdFx0dmFrYXRhX2RuZC5pbml0X3hcdD0gZS5wYWdlWDtcblx0XHRcdFx0dmFrYXRhX2RuZC5pbml0X3lcdD0gZS5wYWdlWTtcblx0XHRcdFx0dmFrYXRhX2RuZC5kYXRhXHRcdD0gZGF0YTtcblx0XHRcdFx0dmFrYXRhX2RuZC5pc19kb3duXHQ9IHRydWU7XG5cdFx0XHRcdHZha2F0YV9kbmQuZWxlbWVudFx0PSBlLmN1cnJlbnRUYXJnZXQ7XG5cdFx0XHRcdGlmKGh0bWwgIT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0dmFrYXRhX2RuZC5oZWxwZXIgPSAkKFwiPGRpdiBpZD0ndmFrYXRhLWRuZCc+PC9kaXY+XCIpLmh0bWwoaHRtbCkuY3NzKHtcblx0XHRcdFx0XHRcdFwiZGlzcGxheVwiXHRcdDogXCJibG9ja1wiLFxuXHRcdFx0XHRcdFx0XCJtYXJnaW5cIlx0XHQ6IFwiMFwiLFxuXHRcdFx0XHRcdFx0XCJwYWRkaW5nXCJcdFx0OiBcIjBcIixcblx0XHRcdFx0XHRcdFwicG9zaXRpb25cIlx0XHQ6IFwiYWJzb2x1dGVcIixcblx0XHRcdFx0XHRcdFwidG9wXCJcdFx0XHQ6IFwiLTIwMDBweFwiLFxuXHRcdFx0XHRcdFx0XCJsaW5lSGVpZ2h0XCJcdDogXCIxNnB4XCIsXG5cdFx0XHRcdFx0XHRcInpJbmRleFwiXHRcdDogXCIxMDAwMFwiXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JChkb2N1bWVudCkuYmluZChcIm1vdXNlbW92ZSB0b3VjaG1vdmVcIiwgJC52YWthdGEuZG5kLmRyYWcpO1xuXHRcdFx0XHQkKGRvY3VtZW50KS5iaW5kKFwibW91c2V1cCB0b3VjaGVuZFwiLCAkLnZha2F0YS5kbmQuc3RvcCk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHRkcmFnIDogZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0aWYoZS50eXBlID09PSBcInRvdWNobW92ZVwiICYmIGUub3JpZ2luYWxFdmVudCAmJiBlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXMgJiYgZS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdKSB7XG5cdFx0XHRcdFx0ZS5wYWdlWCA9IGUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWDtcblx0XHRcdFx0XHRlLnBhZ2VZID0gZS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZO1xuXHRcdFx0XHRcdGUudGFyZ2V0ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVggLSB3aW5kb3cucGFnZVhPZmZzZXQsIGUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWSAtIHdpbmRvdy5wYWdlWU9mZnNldCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoIXZha2F0YV9kbmQuaXNfZG93bikgeyByZXR1cm47IH1cblx0XHRcdFx0aWYoIXZha2F0YV9kbmQuaXNfZHJhZykge1xuXHRcdFx0XHRcdGlmKFxuXHRcdFx0XHRcdFx0TWF0aC5hYnMoZS5wYWdlWCAtIHZha2F0YV9kbmQuaW5pdF94KSA+ICQudmFrYXRhLmRuZC5zZXR0aW5ncy50aHJlc2hvbGQgfHxcblx0XHRcdFx0XHRcdE1hdGguYWJzKGUucGFnZVkgLSB2YWthdGFfZG5kLmluaXRfeSkgPiAkLnZha2F0YS5kbmQuc2V0dGluZ3MudGhyZXNob2xkXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRpZih2YWthdGFfZG5kLmhlbHBlcikge1xuXHRcdFx0XHRcdFx0XHR2YWthdGFfZG5kLmhlbHBlci5hcHBlbmRUbyhcImJvZHlcIik7XG5cdFx0XHRcdFx0XHRcdHZha2F0YV9kbmQuaGVscGVyX3cgPSB2YWthdGFfZG5kLmhlbHBlci5vdXRlcldpZHRoKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2YWthdGFfZG5kLmlzX2RyYWcgPSB0cnVlO1xuXHRcdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0XHQgKiB0cmlnZ2VyZWQgb24gdGhlIGRvY3VtZW50IHdoZW4gYSBkcmFnIHN0YXJ0c1xuXHRcdFx0XHRcdFx0ICogQGV2ZW50XG5cdFx0XHRcdFx0XHQgKiBAcGx1Z2luIGRuZFxuXHRcdFx0XHRcdFx0ICogQG5hbWUgZG5kX3N0YXJ0LnZha2F0YVxuXHRcdFx0XHRcdFx0ICogQHBhcmFtIHtNaXhlZH0gZGF0YSBhbnkgZGF0YSBzdXBwbGllZCB3aXRoIHRoZSBjYWxsIHRvICQudmFrYXRhLmRuZC5zdGFydFxuXHRcdFx0XHRcdFx0ICogQHBhcmFtIHtET019IGVsZW1lbnQgdGhlIERPTSBlbGVtZW50IGJlaW5nIGRyYWdnZWRcblx0XHRcdFx0XHRcdCAqIEBwYXJhbSB7alF1ZXJ5fSBoZWxwZXIgdGhlIGhlbHBlciBzaG93biBuZXh0IHRvIHRoZSBtb3VzZVxuXHRcdFx0XHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IHRoZSBldmVudCB0aGF0IGNhdXNlZCB0aGUgc3RhcnQgKHByb2JhYmx5IG1vdXNlbW92ZSlcblx0XHRcdFx0XHRcdCAqL1xuXHRcdFx0XHRcdFx0JC52YWthdGEuZG5kLl90cmlnZ2VyKFwic3RhcnRcIiwgZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2UgeyByZXR1cm47IH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBkICA9IGZhbHNlLCB3ICA9IGZhbHNlLFxuXHRcdFx0XHRcdGRoID0gZmFsc2UsIHdoID0gZmFsc2UsXG5cdFx0XHRcdFx0ZHcgPSBmYWxzZSwgd3cgPSBmYWxzZSxcblx0XHRcdFx0XHRkdCA9IGZhbHNlLCBkbCA9IGZhbHNlLFxuXHRcdFx0XHRcdGh0ID0gZmFsc2UsIGhsID0gZmFsc2U7XG5cblx0XHRcdFx0dmFrYXRhX2RuZC5zY3JvbGxfdCA9IDA7XG5cdFx0XHRcdHZha2F0YV9kbmQuc2Nyb2xsX2wgPSAwO1xuXHRcdFx0XHR2YWthdGFfZG5kLnNjcm9sbF9lID0gZmFsc2U7XG5cdFx0XHRcdCQoZS50YXJnZXQpXG5cdFx0XHRcdFx0LnBhcmVudHNVbnRpbChcImJvZHlcIikuYWRkQmFjaygpLnZha2F0YV9yZXZlcnNlKClcblx0XHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVyblx0KC9eYXV0b3xzY3JvbGwkLykudGVzdCgkKHRoaXMpLmNzcyhcIm92ZXJmbG93XCIpKSAmJlxuXHRcdFx0XHRcdFx0XHRcdCh0aGlzLnNjcm9sbEhlaWdodCA+IHRoaXMub2Zmc2V0SGVpZ2h0IHx8IHRoaXMuc2Nyb2xsV2lkdGggPiB0aGlzLm9mZnNldFdpZHRoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5lYWNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHZhciB0ID0gJCh0aGlzKSwgbyA9IHQub2Zmc2V0KCk7XG5cdFx0XHRcdFx0XHRpZih0aGlzLnNjcm9sbEhlaWdodCA+IHRoaXMub2Zmc2V0SGVpZ2h0KSB7XG5cdFx0XHRcdFx0XHRcdGlmKG8udG9wICsgdC5oZWlnaHQoKSAtIGUucGFnZVkgPCAkLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3Byb3hpbWl0eSlcdHsgdmFrYXRhX2RuZC5zY3JvbGxfdCA9IDE7IH1cblx0XHRcdFx0XHRcdFx0aWYoZS5wYWdlWSAtIG8udG9wIDwgJC52YWthdGEuZG5kLnNldHRpbmdzLnNjcm9sbF9wcm94aW1pdHkpXHRcdFx0XHR7IHZha2F0YV9kbmQuc2Nyb2xsX3QgPSAtMTsgfVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYodGhpcy5zY3JvbGxXaWR0aCA+IHRoaXMub2Zmc2V0V2lkdGgpIHtcblx0XHRcdFx0XHRcdFx0aWYoby5sZWZ0ICsgdC53aWR0aCgpIC0gZS5wYWdlWCA8ICQudmFrYXRhLmRuZC5zZXR0aW5ncy5zY3JvbGxfcHJveGltaXR5KVx0eyB2YWthdGFfZG5kLnNjcm9sbF9sID0gMTsgfVxuXHRcdFx0XHRcdFx0XHRpZihlLnBhZ2VYIC0gby5sZWZ0IDwgJC52YWthdGEuZG5kLnNldHRpbmdzLnNjcm9sbF9wcm94aW1pdHkpXHRcdFx0XHR7IHZha2F0YV9kbmQuc2Nyb2xsX2wgPSAtMTsgfVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYodmFrYXRhX2RuZC5zY3JvbGxfdCB8fCB2YWthdGFfZG5kLnNjcm9sbF9sKSB7XG5cdFx0XHRcdFx0XHRcdHZha2F0YV9kbmQuc2Nyb2xsX2UgPSAkKHRoaXMpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYoIXZha2F0YV9kbmQuc2Nyb2xsX2UpIHtcblx0XHRcdFx0XHRkICA9ICQoZG9jdW1lbnQpOyB3ID0gJCh3aW5kb3cpO1xuXHRcdFx0XHRcdGRoID0gZC5oZWlnaHQoKTsgd2ggPSB3LmhlaWdodCgpO1xuXHRcdFx0XHRcdGR3ID0gZC53aWR0aCgpOyB3dyA9IHcud2lkdGgoKTtcblx0XHRcdFx0XHRkdCA9IGQuc2Nyb2xsVG9wKCk7IGRsID0gZC5zY3JvbGxMZWZ0KCk7XG5cdFx0XHRcdFx0aWYoZGggPiB3aCAmJiBlLnBhZ2VZIC0gZHQgPCAkLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3Byb3hpbWl0eSlcdFx0eyB2YWthdGFfZG5kLnNjcm9sbF90ID0gLTE7ICB9XG5cdFx0XHRcdFx0aWYoZGggPiB3aCAmJiB3aCAtIChlLnBhZ2VZIC0gZHQpIDwgJC52YWthdGEuZG5kLnNldHRpbmdzLnNjcm9sbF9wcm94aW1pdHkpXHR7IHZha2F0YV9kbmQuc2Nyb2xsX3QgPSAxOyB9XG5cdFx0XHRcdFx0aWYoZHcgPiB3dyAmJiBlLnBhZ2VYIC0gZGwgPCAkLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3Byb3hpbWl0eSlcdFx0eyB2YWthdGFfZG5kLnNjcm9sbF9sID0gLTE7IH1cblx0XHRcdFx0XHRpZihkdyA+IHd3ICYmIHd3IC0gKGUucGFnZVggLSBkbCkgPCAkLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3Byb3hpbWl0eSlcdHsgdmFrYXRhX2RuZC5zY3JvbGxfbCA9IDE7IH1cblx0XHRcdFx0XHRpZih2YWthdGFfZG5kLnNjcm9sbF90IHx8IHZha2F0YV9kbmQuc2Nyb2xsX2wpIHtcblx0XHRcdFx0XHRcdHZha2F0YV9kbmQuc2Nyb2xsX2UgPSBkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZih2YWthdGFfZG5kLnNjcm9sbF9lKSB7ICQudmFrYXRhLmRuZC5fc2Nyb2xsKHRydWUpOyB9XG5cblx0XHRcdFx0aWYodmFrYXRhX2RuZC5oZWxwZXIpIHtcblx0XHRcdFx0XHRodCA9IHBhcnNlSW50KGUucGFnZVkgKyAkLnZha2F0YS5kbmQuc2V0dGluZ3MuaGVscGVyX3RvcCwgMTApO1xuXHRcdFx0XHRcdGhsID0gcGFyc2VJbnQoZS5wYWdlWCArICQudmFrYXRhLmRuZC5zZXR0aW5ncy5oZWxwZXJfbGVmdCwgMTApO1xuXHRcdFx0XHRcdGlmKGRoICYmIGh0ICsgMjUgPiBkaCkgeyBodCA9IGRoIC0gNTA7IH1cblx0XHRcdFx0XHRpZihkdyAmJiBobCArIHZha2F0YV9kbmQuaGVscGVyX3cgPiBkdykgeyBobCA9IGR3IC0gKHZha2F0YV9kbmQuaGVscGVyX3cgKyAyKTsgfVxuXHRcdFx0XHRcdHZha2F0YV9kbmQuaGVscGVyLmNzcyh7XG5cdFx0XHRcdFx0XHRsZWZ0XHQ6IGhsICsgXCJweFwiLFxuXHRcdFx0XHRcdFx0dG9wXHRcdDogaHQgKyBcInB4XCJcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogdHJpZ2dlcmVkIG9uIHRoZSBkb2N1bWVudCB3aGVuIGEgZHJhZyBpcyBpbiBwcm9ncmVzc1xuXHRcdFx0XHQgKiBAZXZlbnRcblx0XHRcdFx0ICogQHBsdWdpbiBkbmRcblx0XHRcdFx0ICogQG5hbWUgZG5kX21vdmUudmFrYXRhXG5cdFx0XHRcdCAqIEBwYXJhbSB7TWl4ZWR9IGRhdGEgYW55IGRhdGEgc3VwcGxpZWQgd2l0aCB0aGUgY2FsbCB0byAkLnZha2F0YS5kbmQuc3RhcnRcblx0XHRcdFx0ICogQHBhcmFtIHtET019IGVsZW1lbnQgdGhlIERPTSBlbGVtZW50IGJlaW5nIGRyYWdnZWRcblx0XHRcdFx0ICogQHBhcmFtIHtqUXVlcnl9IGhlbHBlciB0aGUgaGVscGVyIHNob3duIG5leHQgdG8gdGhlIG1vdXNlXG5cdFx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCB0aGUgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyB0byB0cmlnZ2VyIChtb3N0IGxpa2VseSBtb3VzZW1vdmUpXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHQkLnZha2F0YS5kbmQuX3RyaWdnZXIoXCJtb3ZlXCIsIGUpO1xuXHRcdFx0fSxcblx0XHRcdHN0b3AgOiBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRpZihlLnR5cGUgPT09IFwidG91Y2hlbmRcIiAmJiBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzICYmIGUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXSkge1xuXHRcdFx0XHRcdGUucGFnZVggPSBlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVg7XG5cdFx0XHRcdFx0ZS5wYWdlWSA9IGUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWTtcblx0XHRcdFx0XHRlLnRhcmdldCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYIC0gd2luZG93LnBhZ2VYT2Zmc2V0LCBlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVkgLSB3aW5kb3cucGFnZVlPZmZzZXQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKHZha2F0YV9kbmQuaXNfZHJhZykge1xuXHRcdFx0XHRcdC8qKlxuXHRcdFx0XHRcdCAqIHRyaWdnZXJlZCBvbiB0aGUgZG9jdW1lbnQgd2hlbiBhIGRyYWcgc3RvcHMgKHRoZSBkcmFnZ2VkIGVsZW1lbnQgaXMgZHJvcHBlZClcblx0XHRcdFx0XHQgKiBAZXZlbnRcblx0XHRcdFx0XHQgKiBAcGx1Z2luIGRuZFxuXHRcdFx0XHRcdCAqIEBuYW1lIGRuZF9zdG9wLnZha2F0YVxuXHRcdFx0XHRcdCAqIEBwYXJhbSB7TWl4ZWR9IGRhdGEgYW55IGRhdGEgc3VwcGxpZWQgd2l0aCB0aGUgY2FsbCB0byAkLnZha2F0YS5kbmQuc3RhcnRcblx0XHRcdFx0XHQgKiBAcGFyYW0ge0RPTX0gZWxlbWVudCB0aGUgRE9NIGVsZW1lbnQgYmVpbmcgZHJhZ2dlZFxuXHRcdFx0XHRcdCAqIEBwYXJhbSB7alF1ZXJ5fSBoZWxwZXIgdGhlIGhlbHBlciBzaG93biBuZXh0IHRvIHRoZSBtb3VzZVxuXHRcdFx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCB0aGUgZXZlbnQgdGhhdCBjYXVzZWQgdGhlIHN0b3Bcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkLnZha2F0YS5kbmQuX3RyaWdnZXIoXCJzdG9wXCIsIGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCQudmFrYXRhLmRuZC5fY2xlYW4oKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9KGpRdWVyeSkpO1xuXG5cdC8vIGluY2x1ZGUgdGhlIGRuZCBwbHVnaW4gYnkgZGVmYXVsdFxuXHQvLyAkLmpzdHJlZS5kZWZhdWx0cy5wbHVnaW5zLnB1c2goXCJkbmRcIik7XG5cblxuLyoqXG4gKiAjIyMgU2VhcmNoIHBsdWdpblxuICpcbiAqIEFkZHMgc2VhcmNoIGZ1bmN0aW9uYWxpdHkgdG8ganNUcmVlLlxuICovXG5cblx0LyoqXG5cdCAqIHN0b3JlcyBhbGwgZGVmYXVsdHMgZm9yIHRoZSBzZWFyY2ggcGx1Z2luXG5cdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLnNlYXJjaFxuXHQgKiBAcGx1Z2luIHNlYXJjaFxuXHQgKi9cblx0JC5qc3RyZWUuZGVmYXVsdHMuc2VhcmNoID0ge1xuXHRcdC8qKlxuXHRcdCAqIGEgalF1ZXJ5LWxpa2UgQUpBWCBjb25maWcsIHdoaWNoIGpzdHJlZSB1c2VzIGlmIGEgc2VydmVyIHNob3VsZCBiZSBxdWVyaWVkIGZvciByZXN1bHRzLiBcblx0XHQgKiBcblx0XHQgKiBBIGBzdHJgICh3aGljaCBpcyB0aGUgc2VhcmNoIHN0cmluZykgcGFyYW1ldGVyIHdpbGwgYmUgYWRkZWQgd2l0aCB0aGUgcmVxdWVzdC4gVGhlIGV4cGVjdGVkIHJlc3VsdCBpcyBhIEpTT04gYXJyYXkgd2l0aCBub2RlcyB0aGF0IG5lZWQgdG8gYmUgb3BlbmVkIHNvIHRoYXQgbWF0Y2hpbmcgbm9kZXMgd2lsbCBiZSByZXZlYWxlZC5cblx0XHQgKiBMZWF2ZSB0aGlzIHNldHRpbmcgYXMgYGZhbHNlYCB0byBub3QgcXVlcnkgdGhlIHNlcnZlci5cblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5zZWFyY2guYWpheFxuXHRcdCAqIEBwbHVnaW4gc2VhcmNoXG5cdFx0ICovXG5cdFx0YWpheCA6IGZhbHNlLFxuXHRcdC8qKlxuXHRcdCAqIEluZGljYXRlcyBpZiB0aGUgc2VhcmNoIHNob3VsZCBiZSBmdXp6eSBvciBub3QgKHNob3VsZCBgY2huZDNgIG1hdGNoIGBjaGlsZCBub2RlIDNgKS4gRGVmYXVsdCBpcyBgdHJ1ZWAuXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuc2VhcmNoLmZ1enp5XG5cdFx0ICogQHBsdWdpbiBzZWFyY2hcblx0XHQgKi9cblx0XHRmdXp6eSA6IHRydWUsXG5cdFx0LyoqXG5cdFx0ICogSW5kaWNhdGVzIGlmIHRoZSBzZWFyY2ggc2hvdWxkIGJlIGNhc2Ugc2Vuc2l0aXZlLiBEZWZhdWx0IGlzIGBmYWxzZWAuXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuc2VhcmNoLmNhc2Vfc2Vuc2l0aXZlXG5cdFx0ICogQHBsdWdpbiBzZWFyY2hcblx0XHQgKi9cblx0XHRjYXNlX3NlbnNpdGl2ZSA6IGZhbHNlLFxuXHRcdC8qKlxuXHRcdCAqIEluZGljYXRlcyBpZiB0aGUgdHJlZSBzaG91bGQgYmUgZmlsdGVyZWQgdG8gc2hvdyBvbmx5IG1hdGNoaW5nIG5vZGVzIChrZWVwIGluIG1pbmQgdGhpcyBjYW4gYmUgYSBoZWF2eSBvbiBsYXJnZSB0cmVlcyBpbiBvbGQgYnJvd3NlcnMpLiBEZWZhdWx0IGlzIGBmYWxzZWAuXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuc2VhcmNoLnNob3dfb25seV9tYXRjaGVzXG5cdFx0ICogQHBsdWdpbiBzZWFyY2hcblx0XHQgKi9cblx0XHRzaG93X29ubHlfbWF0Y2hlcyA6IGZhbHNlLFxuXHRcdC8qKlxuXHRcdCAqIEluZGljYXRlcyBpZiBhbGwgbm9kZXMgb3BlbmVkIHRvIHJldmVhbCB0aGUgc2VhcmNoIHJlc3VsdCwgc2hvdWxkIGJlIGNsb3NlZCB3aGVuIHRoZSBzZWFyY2ggaXMgY2xlYXJlZCBvciBhIG5ldyBzZWFyY2ggaXMgcGVyZm9ybWVkLiBEZWZhdWx0IGlzIGB0cnVlYC5cblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5zZWFyY2guY2xvc2Vfb3BlbmVkX29uY2xlYXJcblx0XHQgKiBAcGx1Z2luIHNlYXJjaFxuXHRcdCAqL1xuXHRcdGNsb3NlX29wZW5lZF9vbmNsZWFyIDogdHJ1ZVxuXHR9O1xuXG5cdCQuanN0cmVlLnBsdWdpbnMuc2VhcmNoID0gZnVuY3Rpb24gKG9wdGlvbnMsIHBhcmVudCkge1xuXHRcdHRoaXMuYmluZCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHBhcmVudC5iaW5kLmNhbGwodGhpcyk7XG5cblx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLnN0ciA9IFwiXCI7XG5cdFx0XHR0aGlzLl9kYXRhLnNlYXJjaC5kb20gPSAkKCk7XG5cdFx0XHR0aGlzLl9kYXRhLnNlYXJjaC5yZXMgPSBbXTtcblx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLm9wbiA9IFtdO1xuXHRcdFx0dGhpcy5fZGF0YS5zZWFyY2guc2xuID0gbnVsbDtcblxuXHRcdFx0aWYodGhpcy5zZXR0aW5ncy5zZWFyY2guc2hvd19vbmx5X21hdGNoZXMpIHtcblx0XHRcdFx0dGhpcy5lbGVtZW50XG5cdFx0XHRcdFx0Lm9uKFwic2VhcmNoLmpzdHJlZVwiLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xuXHRcdFx0XHRcdFx0aWYoZGF0YS5ub2Rlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0JCh0aGlzKS5maW5kKFwibGlcIikuaGlkZSgpLmZpbHRlcignLmpzdHJlZS1sYXN0JykuZmlsdGVyKGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5uZXh0U2libGluZzsgfSkucmVtb3ZlQ2xhc3MoJ2pzdHJlZS1sYXN0Jyk7XG5cdFx0XHRcdFx0XHRcdGRhdGEubm9kZXMucGFyZW50c1VudGlsKFwiLmpzdHJlZVwiKS5hZGRCYWNrKCkuc2hvdygpXG5cdFx0XHRcdFx0XHRcdFx0LmZpbHRlcihcInVsXCIpLmVhY2goZnVuY3Rpb24gKCkgeyAkKHRoaXMpLmNoaWxkcmVuKFwibGk6dmlzaWJsZVwiKS5lcSgtMSkuYWRkQ2xhc3MoXCJqc3RyZWUtbGFzdFwiKTsgfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQub24oXCJjbGVhcl9zZWFyY2guanN0cmVlXCIsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XG5cdFx0XHRcdFx0XHRpZihkYXRhLm5vZGVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHQkKHRoaXMpLmZpbmQoXCJsaVwiKS5jc3MoXCJkaXNwbGF5XCIsXCJcIikuZmlsdGVyKCcuanN0cmVlLWxhc3QnKS5maWx0ZXIoZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLm5leHRTaWJsaW5nOyB9KS5yZW1vdmVDbGFzcygnanN0cmVlLWxhc3QnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIHVzZWQgdG8gc2VhcmNoIHRoZSB0cmVlIG5vZGVzIGZvciBhIGdpdmVuIHN0cmluZ1xuXHRcdCAqIEBuYW1lIHNlYXJjaChzdHIgWywgc2tpcF9hc3luY10pXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc2VhcmNoIHN0cmluZ1xuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gc2tpcF9hc3luYyBpZiBzZXQgdG8gdHJ1ZSBzZXJ2ZXIgd2lsbCBub3QgYmUgcXVlcmllZCBldmVuIGlmIGNvbmZpZ3VyZWRcblx0XHQgKiBAcGx1Z2luIHNlYXJjaFxuXHRcdCAqIEB0cmlnZ2VyIHNlYXJjaC5qc3RyZWVcblx0XHQgKi9cblx0XHR0aGlzLnNlYXJjaCA9IGZ1bmN0aW9uIChzdHIsIHNraXBfYXN5bmMpIHtcblx0XHRcdGlmKHN0ciA9PT0gZmFsc2UgfHwgJC50cmltKHN0cikgPT09IFwiXCIpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xlYXJfc2VhcmNoKCk7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcyA9IHRoaXMuc2V0dGluZ3Muc2VhcmNoLFxuXHRcdFx0XHRhID0gcy5hamF4ID8gJC5leHRlbmQoe30sIHMuYWpheCkgOiBmYWxzZSxcblx0XHRcdFx0ZiA9IG51bGwsXG5cdFx0XHRcdHIgPSBbXSxcblx0XHRcdFx0cCA9IFtdLCBpLCBqO1xuXHRcdFx0aWYodGhpcy5fZGF0YS5zZWFyY2gucmVzLmxlbmd0aCkge1xuXHRcdFx0XHR0aGlzLmNsZWFyX3NlYXJjaCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYoIXNraXBfYXN5bmMgJiYgYSAhPT0gZmFsc2UpIHtcblx0XHRcdFx0aWYoIWEuZGF0YSkgeyBhLmRhdGEgPSB7fTsgfVxuXHRcdFx0XHRhLmRhdGEuc3RyID0gc3RyO1xuXHRcdFx0XHRyZXR1cm4gJC5hamF4KGEpXG5cdFx0XHRcdFx0LmZhaWwoJC5wcm94eShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvciA9IHsgJ2Vycm9yJyA6ICdhamF4JywgJ3BsdWdpbicgOiAnc2VhcmNoJywgJ2lkJyA6ICdzZWFyY2hfMDEnLCAncmVhc29uJyA6ICdDb3VsZCBub3QgbG9hZCBzZWFyY2ggcGFyZW50cycsICdkYXRhJyA6IEpTT04uc3RyaW5naWZ5KGEpIH07XG5cdFx0XHRcdFx0XHR0aGlzLnNldHRpbmdzLmNvcmUuZXJyb3IuY2FsbCh0aGlzLCB0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcik7XG5cdFx0XHRcdFx0fSwgdGhpcykpXG5cdFx0XHRcdFx0LmRvbmUoJC5wcm94eShmdW5jdGlvbiAoZCkge1xuXHRcdFx0XHRcdFx0aWYoZCAmJiBkLmQpIHsgZCA9IGQuZDsgfVxuXHRcdFx0XHRcdFx0dGhpcy5fZGF0YS5zZWFyY2guc2xuID0gISQuaXNBcnJheShkKSA/IFtdIDogZDtcblx0XHRcdFx0XHRcdHRoaXMuX3NlYXJjaF9sb2FkKHN0cik7XG5cdFx0XHRcdFx0fSwgdGhpcykpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fZGF0YS5zZWFyY2guc3RyID0gc3RyO1xuXHRcdFx0dGhpcy5fZGF0YS5zZWFyY2guZG9tID0gJCgpO1xuXHRcdFx0dGhpcy5fZGF0YS5zZWFyY2gucmVzID0gW107XG5cdFx0XHR0aGlzLl9kYXRhLnNlYXJjaC5vcG4gPSBbXTtcblxuXHRcdFx0ZiA9IG5ldyAkLnZha2F0YS5zZWFyY2goc3RyLCB0cnVlLCB7IGNhc2VTZW5zaXRpdmUgOiBzLmNhc2Vfc2Vuc2l0aXZlLCBmdXp6eSA6IHMuZnV6enkgfSk7XG5cblx0XHRcdCQuZWFjaCh0aGlzLl9tb2RlbC5kYXRhLCBmdW5jdGlvbiAoaSwgdikge1xuXHRcdFx0XHRpZih2LnRleHQgJiYgZi5zZWFyY2godi50ZXh0KS5pc01hdGNoKSB7XG5cdFx0XHRcdFx0ci5wdXNoKGkpO1xuXHRcdFx0XHRcdHAgPSBwLmNvbmNhdCh2LnBhcmVudHMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGlmKHIubGVuZ3RoKSB7XG5cdFx0XHRcdHAgPSAkLnZha2F0YS5hcnJheV91bmlxdWUocCk7XG5cdFx0XHRcdHRoaXMuX3NlYXJjaF9vcGVuKHApO1xuXHRcdFx0XHRmb3IoaSA9IDAsIGogPSByLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHRcdGYgPSB0aGlzLmdldF9ub2RlKHJbaV0sIHRydWUpO1xuXHRcdFx0XHRcdGlmKGYpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLmRvbSA9IHRoaXMuX2RhdGEuc2VhcmNoLmRvbS5hZGQoZik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLnJlcyA9IHI7XG5cdFx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLmRvbS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLmFkZENsYXNzKCdqc3RyZWUtc2VhcmNoJyk7XG5cdFx0XHR9XG5cdFx0XHQvKipcblx0XHRcdCAqIHRyaWdnZXJlZCBhZnRlciBzZWFyY2ggaXMgY29tcGxldGVcblx0XHRcdCAqIEBldmVudFxuXHRcdFx0ICogQG5hbWUgc2VhcmNoLmpzdHJlZVxuXHRcdFx0ICogQHBhcmFtIHtqUXVlcnl9IG5vZGVzIGEgalF1ZXJ5IGNvbGxlY3Rpb24gb2YgbWF0Y2hpbmcgbm9kZXNcblx0XHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgdGhlIHNlYXJjaCBzdHJpbmdcblx0XHRcdCAqIEBwYXJhbSB7QXJyYXl9IHJlcyBhIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyByZXByZXNlaW5nIHRoZSBtYXRjaGluZyBub2Rlc1xuXHRcdFx0ICogQHBsdWdpbiBzZWFyY2hcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmlnZ2VyKCdzZWFyY2gnLCB7IG5vZGVzIDogdGhpcy5fZGF0YS5zZWFyY2guZG9tLCBzdHIgOiBzdHIsIHJlcyA6IHRoaXMuX2RhdGEuc2VhcmNoLnJlcyB9KTtcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIHVzZWQgdG8gY2xlYXIgdGhlIGxhc3Qgc2VhcmNoIChyZW1vdmVzIGNsYXNzZXMgYW5kIHNob3dzIGFsbCBub2RlcyBpZiBmaWx0ZXJpbmcgaXMgb24pXG5cdFx0ICogQG5hbWUgY2xlYXJfc2VhcmNoKClcblx0XHQgKiBAcGx1Z2luIHNlYXJjaFxuXHRcdCAqIEB0cmlnZ2VyIGNsZWFyX3NlYXJjaC5qc3RyZWVcblx0XHQgKi9cblx0XHR0aGlzLmNsZWFyX3NlYXJjaCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLmRvbS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLnJlbW92ZUNsYXNzKFwianN0cmVlLXNlYXJjaFwiKTtcblx0XHRcdGlmKHRoaXMuc2V0dGluZ3Muc2VhcmNoLmNsb3NlX29wZW5lZF9vbmNsZWFyKSB7XG5cdFx0XHRcdHRoaXMuY2xvc2Vfbm9kZSh0aGlzLl9kYXRhLnNlYXJjaC5vcG4sIDApO1xuXHRcdFx0fVxuXHRcdFx0LyoqXG5cdFx0XHQgKiB0cmlnZ2VyZWQgYWZ0ZXIgc2VhcmNoIGlzIGNvbXBsZXRlXG5cdFx0XHQgKiBAZXZlbnRcblx0XHRcdCAqIEBuYW1lIGNsZWFyX3NlYXJjaC5qc3RyZWVcblx0XHRcdCAqIEBwYXJhbSB7alF1ZXJ5fSBub2RlcyBhIGpRdWVyeSBjb2xsZWN0aW9uIG9mIG1hdGNoaW5nIG5vZGVzICh0aGUgcmVzdWx0IGZyb20gdGhlIGxhc3Qgc2VhcmNoKVxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc2VhcmNoIHN0cmluZyAodGhlIGxhc3Qgc2VhcmNoIHN0cmluZylcblx0XHRcdCAqIEBwYXJhbSB7QXJyYXl9IHJlcyBhIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyByZXByZXNlaW5nIHRoZSBtYXRjaGluZyBub2RlcyAodGhlIHJlc3VsdCBmcm9tIHRoZSBsYXN0IHNlYXJjaClcblx0XHRcdCAqIEBwbHVnaW4gc2VhcmNoXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMudHJpZ2dlcignY2xlYXJfc2VhcmNoJywgeyAnbm9kZXMnIDogdGhpcy5fZGF0YS5zZWFyY2guZG9tLCBzdHIgOiB0aGlzLl9kYXRhLnNlYXJjaC5zdHIsIHJlcyA6IHRoaXMuX2RhdGEuc2VhcmNoLnJlcyB9KTtcblx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLnN0ciA9IFwiXCI7XG5cdFx0XHR0aGlzLl9kYXRhLnNlYXJjaC5yZXMgPSBbXTtcblx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLm9wbiA9IFtdO1xuXHRcdFx0dGhpcy5fZGF0YS5zZWFyY2guZG9tID0gJCgpO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogb3BlbnMgbm9kZXMgdGhhdCBuZWVkIHRvIGJlIG9wZW5lZCB0byByZXZlYWwgdGhlIHNlYXJjaCByZXN1bHRzLiBVc2VkIG9ubHkgaW50ZXJuYWxseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBuYW1lIF9zZWFyY2hfb3BlbihkKVxuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IGQgYW4gYXJyYXkgb2Ygbm9kZSBJRHNcblx0XHQgKiBAcGx1Z2luIHNlYXJjaFxuXHRcdCAqL1xuXHRcdHRoaXMuX3NlYXJjaF9vcGVuID0gZnVuY3Rpb24gKGQpIHtcblx0XHRcdHZhciB0ID0gdGhpcztcblx0XHRcdCQuZWFjaChkLmNvbmNhdChbXSksIGZ1bmN0aW9uIChpLCB2KSB7XG5cdFx0XHRcdHYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh2KTtcblx0XHRcdFx0aWYodikge1xuXHRcdFx0XHRcdGlmKHQuaXNfY2xvc2VkKHYpKSB7XG5cdFx0XHRcdFx0XHR0Ll9kYXRhLnNlYXJjaC5vcG4ucHVzaCh2LmlkKTtcblx0XHRcdFx0XHRcdHQub3Blbl9ub2RlKHYsIGZ1bmN0aW9uICgpIHsgdC5fc2VhcmNoX29wZW4oZCk7IH0sIDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiBsb2FkcyBub2RlcyB0aGF0IG5lZWQgdG8gYmUgb3BlbmVkIHRvIHJldmVhbCB0aGUgc2VhcmNoIHJlc3VsdHMuIFVzZWQgb25seSBpbnRlcm5hbGx5LlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQG5hbWUgX3NlYXJjaF9sb2FkKGQsIHN0cilcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gc3RyIHRoZSBzZWFyY2ggc3RyaW5nXG5cdFx0ICogQHBsdWdpbiBzZWFyY2hcblx0XHQgKi9cblx0XHR0aGlzLl9zZWFyY2hfbG9hZCA9IGZ1bmN0aW9uIChzdHIpIHtcblx0XHRcdHZhciByZXMgPSB0cnVlLFxuXHRcdFx0XHR0ID0gdGhpcyxcblx0XHRcdFx0bSA9IHQuX21vZGVsLmRhdGE7XG5cdFx0XHRpZigkLmlzQXJyYXkodGhpcy5fZGF0YS5zZWFyY2guc2xuKSkge1xuXHRcdFx0XHRpZighdGhpcy5fZGF0YS5zZWFyY2guc2xuLmxlbmd0aCkge1xuXHRcdFx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLnNsbiA9IG51bGw7XG5cdFx0XHRcdFx0dGhpcy5zZWFyY2goc3RyLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHQkLmVhY2godGhpcy5fZGF0YS5zZWFyY2guc2xuLCBmdW5jdGlvbiAoaSwgdikge1xuXHRcdFx0XHRcdFx0aWYobVt2XSkge1xuXHRcdFx0XHRcdFx0XHQkLnZha2F0YS5hcnJheV9yZW1vdmVfaXRlbSh0Ll9kYXRhLnNlYXJjaC5zbG4sIHYpO1xuXHRcdFx0XHRcdFx0XHRpZighbVt2XS5zdGF0ZS5sb2FkZWQpIHtcblx0XHRcdFx0XHRcdFx0XHR0LmxvYWRfbm9kZSh2LCBmdW5jdGlvbiAobywgcykgeyBpZihzKSB7IHQuX3NlYXJjaF9sb2FkKHN0cik7IH0gfSk7XG5cdFx0XHRcdFx0XHRcdFx0cmVzID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRpZihyZXMpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLnNsbiA9IFtdO1xuXHRcdFx0XHRcdFx0dGhpcy5fc2VhcmNoX2xvYWQoc3RyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9O1xuXG5cdC8vIGhlbHBlcnNcblx0KGZ1bmN0aW9uICgkKSB7XG5cdFx0Ly8gZnJvbSBodHRwOi8va2lyby5tZS9wcm9qZWN0cy9mdXNlLmh0bWxcblx0XHQkLnZha2F0YS5zZWFyY2ggPSBmdW5jdGlvbihwYXR0ZXJuLCB0eHQsIG9wdGlvbnMpIHtcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHRcdFx0aWYob3B0aW9ucy5mdXp6eSAhPT0gZmFsc2UpIHtcblx0XHRcdFx0b3B0aW9ucy5mdXp6eSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRwYXR0ZXJuID0gb3B0aW9ucy5jYXNlU2Vuc2l0aXZlID8gcGF0dGVybiA6IHBhdHRlcm4udG9Mb3dlckNhc2UoKTtcblx0XHRcdHZhciBNQVRDSF9MT0NBVElPTlx0PSBvcHRpb25zLmxvY2F0aW9uIHx8IDAsXG5cdFx0XHRcdE1BVENIX0RJU1RBTkNFXHQ9IG9wdGlvbnMuZGlzdGFuY2UgfHwgMTAwLFxuXHRcdFx0XHRNQVRDSF9USFJFU0hPTERcdD0gb3B0aW9ucy50aHJlc2hvbGQgfHwgMC42LFxuXHRcdFx0XHRwYXR0ZXJuTGVuID0gcGF0dGVybi5sZW5ndGgsXG5cdFx0XHRcdG1hdGNobWFzaywgcGF0dGVybl9hbHBoYWJldCwgbWF0Y2hfYml0YXBTY29yZSwgc2VhcmNoO1xuXHRcdFx0aWYocGF0dGVybkxlbiA+IDMyKSB7XG5cdFx0XHRcdG9wdGlvbnMuZnV6enkgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGlmKG9wdGlvbnMuZnV6enkpIHtcblx0XHRcdFx0bWF0Y2htYXNrID0gMSA8PCAocGF0dGVybkxlbiAtIDEpO1xuXHRcdFx0XHRwYXR0ZXJuX2FscGhhYmV0ID0gKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHR2YXIgbWFzayA9IHt9LFxuXHRcdFx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IHBhdHRlcm5MZW47IGkrKykge1xuXHRcdFx0XHRcdFx0bWFza1twYXR0ZXJuLmNoYXJBdChpKV0gPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgcGF0dGVybkxlbjsgaSsrKSB7XG5cdFx0XHRcdFx0XHRtYXNrW3BhdHRlcm4uY2hhckF0KGkpXSB8PSAxIDw8IChwYXR0ZXJuTGVuIC0gaSAtIDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbWFzaztcblx0XHRcdFx0fSgpKTtcblx0XHRcdFx0bWF0Y2hfYml0YXBTY29yZSA9IGZ1bmN0aW9uIChlLCB4KSB7XG5cdFx0XHRcdFx0dmFyIGFjY3VyYWN5ID0gZSAvIHBhdHRlcm5MZW4sXG5cdFx0XHRcdFx0XHRwcm94aW1pdHkgPSBNYXRoLmFicyhNQVRDSF9MT0NBVElPTiAtIHgpO1xuXHRcdFx0XHRcdGlmKCFNQVRDSF9ESVNUQU5DRSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHByb3hpbWl0eSA/IDEuMCA6IGFjY3VyYWN5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gYWNjdXJhY3kgKyAocHJveGltaXR5IC8gTUFUQ0hfRElTVEFOQ0UpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0c2VhcmNoID0gZnVuY3Rpb24gKHRleHQpIHtcblx0XHRcdFx0dGV4dCA9IG9wdGlvbnMuY2FzZVNlbnNpdGl2ZSA/IHRleHQgOiB0ZXh0LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdGlmKHBhdHRlcm4gPT09IHRleHQgfHwgdGV4dC5pbmRleE9mKHBhdHRlcm4pICE9PSAtMSkge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRpc01hdGNoOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2NvcmU6IDBcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKCFvcHRpb25zLmZ1enp5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGlzTWF0Y2g6IGZhbHNlLFxuXHRcdFx0XHRcdFx0c2NvcmU6IDFcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBpLCBqLFxuXHRcdFx0XHRcdHRleHRMZW4gPSB0ZXh0Lmxlbmd0aCxcblx0XHRcdFx0XHRzY29yZVRocmVzaG9sZCA9IE1BVENIX1RIUkVTSE9MRCxcblx0XHRcdFx0XHRiZXN0TG9jID0gdGV4dC5pbmRleE9mKHBhdHRlcm4sIE1BVENIX0xPQ0FUSU9OKSxcblx0XHRcdFx0XHRiaW5NaW4sIGJpbk1pZCxcblx0XHRcdFx0XHRiaW5NYXggPSBwYXR0ZXJuTGVuICsgdGV4dExlbixcblx0XHRcdFx0XHRsYXN0UmQsIHN0YXJ0LCBmaW5pc2gsIHJkLCBjaGFyTWF0Y2gsXG5cdFx0XHRcdFx0c2NvcmUgPSAxLFxuXHRcdFx0XHRcdGxvY2F0aW9ucyA9IFtdO1xuXHRcdFx0XHRpZiAoYmVzdExvYyAhPT0gLTEpIHtcblx0XHRcdFx0XHRzY29yZVRocmVzaG9sZCA9IE1hdGgubWluKG1hdGNoX2JpdGFwU2NvcmUoMCwgYmVzdExvYyksIHNjb3JlVGhyZXNob2xkKTtcblx0XHRcdFx0XHRiZXN0TG9jID0gdGV4dC5sYXN0SW5kZXhPZihwYXR0ZXJuLCBNQVRDSF9MT0NBVElPTiArIHBhdHRlcm5MZW4pO1xuXHRcdFx0XHRcdGlmIChiZXN0TG9jICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0c2NvcmVUaHJlc2hvbGQgPSBNYXRoLm1pbihtYXRjaF9iaXRhcFNjb3JlKDAsIGJlc3RMb2MpLCBzY29yZVRocmVzaG9sZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJlc3RMb2MgPSAtMTtcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IHBhdHRlcm5MZW47IGkrKykge1xuXHRcdFx0XHRcdGJpbk1pbiA9IDA7XG5cdFx0XHRcdFx0YmluTWlkID0gYmluTWF4O1xuXHRcdFx0XHRcdHdoaWxlIChiaW5NaW4gPCBiaW5NaWQpIHtcblx0XHRcdFx0XHRcdGlmIChtYXRjaF9iaXRhcFNjb3JlKGksIE1BVENIX0xPQ0FUSU9OICsgYmluTWlkKSA8PSBzY29yZVRocmVzaG9sZCkge1xuXHRcdFx0XHRcdFx0XHRiaW5NaW4gPSBiaW5NaWQ7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRiaW5NYXggPSBiaW5NaWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRiaW5NaWQgPSBNYXRoLmZsb29yKChiaW5NYXggLSBiaW5NaW4pIC8gMiArIGJpbk1pbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJpbk1heCA9IGJpbk1pZDtcblx0XHRcdFx0XHRzdGFydCA9IE1hdGgubWF4KDEsIE1BVENIX0xPQ0FUSU9OIC0gYmluTWlkICsgMSk7XG5cdFx0XHRcdFx0ZmluaXNoID0gTWF0aC5taW4oTUFUQ0hfTE9DQVRJT04gKyBiaW5NaWQsIHRleHRMZW4pICsgcGF0dGVybkxlbjtcblx0XHRcdFx0XHRyZCA9IG5ldyBBcnJheShmaW5pc2ggKyAyKTtcblx0XHRcdFx0XHRyZFtmaW5pc2ggKyAxXSA9ICgxIDw8IGkpIC0gMTtcblx0XHRcdFx0XHRmb3IgKGogPSBmaW5pc2g7IGogPj0gc3RhcnQ7IGotLSkge1xuXHRcdFx0XHRcdFx0Y2hhck1hdGNoID0gcGF0dGVybl9hbHBoYWJldFt0ZXh0LmNoYXJBdChqIC0gMSldO1xuXHRcdFx0XHRcdFx0aWYgKGkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0cmRbal0gPSAoKHJkW2ogKyAxXSA8PCAxKSB8IDEpICYgY2hhck1hdGNoO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmRbal0gPSAoKHJkW2ogKyAxXSA8PCAxKSB8IDEpICYgY2hhck1hdGNoIHwgKCgobGFzdFJkW2ogKyAxXSB8IGxhc3RSZFtqXSkgPDwgMSkgfCAxKSB8IGxhc3RSZFtqICsgMV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAocmRbal0gJiBtYXRjaG1hc2spIHtcblx0XHRcdFx0XHRcdFx0c2NvcmUgPSBtYXRjaF9iaXRhcFNjb3JlKGksIGogLSAxKTtcblx0XHRcdFx0XHRcdFx0aWYgKHNjb3JlIDw9IHNjb3JlVGhyZXNob2xkKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2NvcmVUaHJlc2hvbGQgPSBzY29yZTtcblx0XHRcdFx0XHRcdFx0XHRiZXN0TG9jID0gaiAtIDE7XG5cdFx0XHRcdFx0XHRcdFx0bG9jYXRpb25zLnB1c2goYmVzdExvYyk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGJlc3RMb2MgPiBNQVRDSF9MT0NBVElPTikge1xuXHRcdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBNYXRoLm1heCgxLCAyICogTUFUQ0hfTE9DQVRJT04gLSBiZXN0TG9jKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChtYXRjaF9iaXRhcFNjb3JlKGkgKyAxLCBNQVRDSF9MT0NBVElPTikgPiBzY29yZVRocmVzaG9sZCkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGxhc3RSZCA9IHJkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aXNNYXRjaDogYmVzdExvYyA+PSAwLFxuXHRcdFx0XHRcdHNjb3JlOiBzY29yZVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblx0XHRcdHJldHVybiB0eHQgPT09IHRydWUgPyB7ICdzZWFyY2gnIDogc2VhcmNoIH0gOiBzZWFyY2godHh0KTtcblx0XHR9O1xuXHR9KGpRdWVyeSkpO1xuXG5cdC8vIGluY2x1ZGUgdGhlIHNlYXJjaCBwbHVnaW4gYnkgZGVmYXVsdFxuXHQvLyAkLmpzdHJlZS5kZWZhdWx0cy5wbHVnaW5zLnB1c2goXCJzZWFyY2hcIik7XG5cbi8qKlxuICogIyMjIFNvcnQgcGx1Z2luXG4gKlxuICogQXV0bWF0aWNhbGx5IHNvcnRzIGFsbCBzaWJsaW5ncyBpbiB0aGUgdHJlZSBhY2NvcmRpbmcgdG8gYSBzb3J0aW5nIGZ1bmN0aW9uLlxuICovXG5cblx0LyoqXG5cdCAqIHRoZSBzZXR0aW5ncyBmdW5jdGlvbiB1c2VkIHRvIHNvcnQgdGhlIG5vZGVzLlxuXHQgKiBJdCBpcyBleGVjdXRlZCBpbiB0aGUgdHJlZSdzIGNvbnRleHQsIGFjY2VwdHMgdHdvIG5vZGVzIGFzIGFyZ3VtZW50cyBhbmQgc2hvdWxkIHJldHVybiBgMWAgb3IgYC0xYC5cblx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuc29ydFxuXHQgKiBAcGx1Z2luIHNvcnRcblx0ICovXG5cdCQuanN0cmVlLmRlZmF1bHRzLnNvcnQgPSBmdW5jdGlvbiAoYSwgYikge1xuXHRcdC8vcmV0dXJuIHRoaXMuZ2V0X3R5cGUoYSkgPT09IHRoaXMuZ2V0X3R5cGUoYikgPyAodGhpcy5nZXRfdGV4dChhKSA+IHRoaXMuZ2V0X3RleHQoYikgPyAxIDogLTEpIDogdGhpcy5nZXRfdHlwZShhKSA+PSB0aGlzLmdldF90eXBlKGIpO1xuXHRcdHJldHVybiB0aGlzLmdldF90ZXh0KGEpID4gdGhpcy5nZXRfdGV4dChiKSA/IDEgOiAtMTtcblx0fTtcblx0JC5qc3RyZWUucGx1Z2lucy5zb3J0ID0gZnVuY3Rpb24gKG9wdGlvbnMsIHBhcmVudCkge1xuXHRcdHRoaXMuYmluZCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHBhcmVudC5iaW5kLmNhbGwodGhpcyk7XG5cdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0Lm9uKFwibW9kZWwuanN0cmVlXCIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHtcblx0XHRcdFx0XHRcdHRoaXMuc29ydChkYXRhLnBhcmVudCwgdHJ1ZSk7XG5cdFx0XHRcdFx0fSwgdGhpcykpXG5cdFx0XHRcdC5vbihcInJlbmFtZV9ub2RlLmpzdHJlZSBjcmVhdGVfbm9kZS5qc3RyZWVcIiwgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkge1xuXHRcdFx0XHRcdFx0dGhpcy5zb3J0KGRhdGEucGFyZW50IHx8IGRhdGEubm9kZS5wYXJlbnQsIGZhbHNlKTtcblx0XHRcdFx0XHRcdHRoaXMucmVkcmF3X25vZGUoZGF0YS5wYXJlbnQgfHwgZGF0YS5ub2RlLnBhcmVudCwgdHJ1ZSk7XG5cdFx0XHRcdFx0fSwgdGhpcykpXG5cdFx0XHRcdC5vbihcIm1vdmVfbm9kZS5qc3RyZWUgY29weV9ub2RlLmpzdHJlZVwiLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNvcnQoZGF0YS5wYXJlbnQsIGZhbHNlKTtcblx0XHRcdFx0XHRcdHRoaXMucmVkcmF3X25vZGUoZGF0YS5wYXJlbnQsIHRydWUpO1xuXHRcdFx0XHRcdH0sIHRoaXMpKTtcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIHVzZWQgdG8gc29ydCBhIG5vZGUncyBjaGlsZHJlblxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQG5hbWUgc29ydChvYmogWywgZGVlcF0pXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9iaiB0aGUgbm9kZVxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gZGVlcCBpZiBzZXQgdG8gYHRydWVgIG5vZGVzIGFyZSBzb3J0ZWQgcmVjdXJzaXZlbHkuXG5cdFx0ICogQHBsdWdpbiBzb3J0XG5cdFx0ICogQHRyaWdnZXIgc2VhcmNoLmpzdHJlZVxuXHRcdCAqL1xuXHRcdHRoaXMuc29ydCA9IGZ1bmN0aW9uIChvYmosIGRlZXApIHtcblx0XHRcdHZhciBpLCBqO1xuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xuXHRcdFx0aWYob2JqICYmIG9iai5jaGlsZHJlbiAmJiBvYmouY2hpbGRyZW4ubGVuZ3RoKSB7XG5cdFx0XHRcdG9iai5jaGlsZHJlbi5zb3J0KCQucHJveHkodGhpcy5zZXR0aW5ncy5zb3J0LCB0aGlzKSk7XG5cdFx0XHRcdGlmKGRlZXApIHtcblx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSBvYmouY2hpbGRyZW5fZC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0XHRcdHRoaXMuc29ydChvYmouY2hpbGRyZW5fZFtpXSwgZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH07XG5cblx0Ly8gaW5jbHVkZSB0aGUgc29ydCBwbHVnaW4gYnkgZGVmYXVsdFxuXHQvLyAkLmpzdHJlZS5kZWZhdWx0cy5wbHVnaW5zLnB1c2goXCJzb3J0XCIpO1xuXG4vKipcbiAqICMjIyBTdGF0ZSBwbHVnaW5cbiAqXG4gKiBTYXZlcyB0aGUgc3RhdGUgb2YgdGhlIHRyZWUgKHNlbGVjdGVkIG5vZGVzLCBvcGVuZWQgbm9kZXMpIG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgdXNpbmcgYXZhaWxhYmxlIG9wdGlvbnMgKGxvY2FsU3RvcmFnZSwgY29va2llcywgZXRjKVxuICovXG5cblx0dmFyIHRvID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBzdG9yZXMgYWxsIGRlZmF1bHRzIGZvciB0aGUgc3RhdGUgcGx1Z2luXG5cdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLnN0YXRlXG5cdCAqIEBwbHVnaW4gc3RhdGVcblx0ICovXG5cdCQuanN0cmVlLmRlZmF1bHRzLnN0YXRlID0ge1xuXHRcdC8qKlxuXHRcdCAqIEEgc3RyaW5nIGZvciB0aGUga2V5IHRvIHVzZSB3aGVuIHNhdmluZyB0aGUgY3VycmVudCB0cmVlIChjaGFuZ2UgaWYgdXNpbmcgbXVsdGlwbGUgdHJlZXMgaW4geW91ciBwcm9qZWN0KS4gRGVmYXVsdHMgdG8gYGpzdHJlZWAuXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuc3RhdGUua2V5XG5cdFx0ICogQHBsdWdpbiBzdGF0ZVxuXHRcdCAqL1xuXHRcdGtleVx0XHQ6ICdqc3RyZWUnLFxuXHRcdC8qKlxuXHRcdCAqIEEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZXZlbnRzIHRoYXQgdHJpZ2dlciBhIHN0YXRlIHNhdmUuIERlZmF1bHRzIHRvIGBjaGFuZ2VkLmpzdHJlZSBvcGVuX25vZGUuanN0cmVlIGNsb3NlX25vZGUuanN0cmVlYC5cblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5zdGF0ZS5ldmVudHNcblx0XHQgKiBAcGx1Z2luIHN0YXRlXG5cdFx0ICovXG5cdFx0ZXZlbnRzXHQ6ICdjaGFuZ2VkLmpzdHJlZSBvcGVuX25vZGUuanN0cmVlIGNsb3NlX25vZGUuanN0cmVlJyxcblx0XHQvKipcblx0XHQgKiBUaW1lIGluIG1pbGxpc2Vjb25kcyBhZnRlciB3aGljaCB0aGUgc3RhdGUgd2lsbCBleHBpcmUuIERlZmF1bHRzIHRvICdmYWxzZScgbWVhbmluZyAtIG5vIGV4cGlyZS5cblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5zdGF0ZS50dGxcblx0XHQgKiBAcGx1Z2luIHN0YXRlXG5cdFx0ICovXG5cdFx0dHRsXHRcdDogZmFsc2UsXG5cdFx0LyoqXG5cdFx0ICogQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gcmVzdG9yaW5nIHN0YXRlIHdpdGggb25lIGFyZ3VtZW50IC0gdGhlIHN0YXRlIG9iamVjdC4gQ2FuIGJlIHVzZWQgdG8gY2xlYXIgdW53YW50ZWQgcGFydHMgb2YgdGhlIHN0YXRlLlxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLnN0YXRlLmZpbHRlclxuXHRcdCAqIEBwbHVnaW4gc3RhdGVcblx0XHQgKi9cblx0XHRmaWx0ZXJcdDogZmFsc2Vcblx0fTtcblx0JC5qc3RyZWUucGx1Z2lucy5zdGF0ZSA9IGZ1bmN0aW9uIChvcHRpb25zLCBwYXJlbnQpIHtcblx0XHR0aGlzLmJpbmQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRwYXJlbnQuYmluZC5jYWxsKHRoaXMpO1xuXHRcdFx0dmFyIGJpbmQgPSAkLnByb3h5KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhpcy5lbGVtZW50Lm9uKHRoaXMuc2V0dGluZ3Muc3RhdGUuZXZlbnRzLCAkLnByb3h5KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRpZih0bykgeyBjbGVhclRpbWVvdXQodG8pOyB9XG5cdFx0XHRcdFx0dG8gPSBzZXRUaW1lb3V0KCQucHJveHkoZnVuY3Rpb24gKCkgeyB0aGlzLnNhdmVfc3RhdGUoKTsgfSwgdGhpcyksIDEwMCk7XG5cdFx0XHRcdH0sIHRoaXMpKTtcblx0XHRcdH0sIHRoaXMpO1xuXHRcdFx0dGhpcy5lbGVtZW50XG5cdFx0XHRcdC5vbihcInJlYWR5LmpzdHJlZVwiLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmVsZW1lbnQub25lKFwicmVzdG9yZV9zdGF0ZS5qc3RyZWVcIiwgYmluZCk7XG5cdFx0XHRcdFx0XHRpZighdGhpcy5yZXN0b3JlX3N0YXRlKCkpIHsgYmluZCgpOyB9XG5cdFx0XHRcdFx0fSwgdGhpcykpO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogc2F2ZSB0aGUgc3RhdGVcblx0XHQgKiBAbmFtZSBzYXZlX3N0YXRlKClcblx0XHQgKiBAcGx1Z2luIHN0YXRlXG5cdFx0ICovXG5cdFx0dGhpcy5zYXZlX3N0YXRlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIHN0ID0geyAnc3RhdGUnIDogdGhpcy5nZXRfc3RhdGUoKSwgJ3R0bCcgOiB0aGlzLnNldHRpbmdzLnN0YXRlLnR0bCwgJ3NlYycgOiArKG5ldyBEYXRlKCkpIH07XG5cdFx0XHQkLnZha2F0YS5zdG9yYWdlLnNldCh0aGlzLnNldHRpbmdzLnN0YXRlLmtleSwgSlNPTi5zdHJpbmdpZnkoc3QpKTtcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIHJlc3RvcmUgdGhlIHN0YXRlIGZyb20gdGhlIHVzZXIncyBjb21wdXRlclxuXHRcdCAqIEBuYW1lIHJlc3RvcmVfc3RhdGUoKVxuXHRcdCAqIEBwbHVnaW4gc3RhdGVcblx0XHQgKi9cblx0XHR0aGlzLnJlc3RvcmVfc3RhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgayA9ICQudmFrYXRhLnN0b3JhZ2UuZ2V0KHRoaXMuc2V0dGluZ3Muc3RhdGUua2V5KTtcblx0XHRcdGlmKCEhaykgeyB0cnkgeyBrID0gSlNPTi5wYXJzZShrKTsgfSBjYXRjaChleCkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXHRcdFx0aWYoISFrICYmIGsudHRsICYmIGsuc2VjICYmICsobmV3IERhdGUoKSkgLSBrLnNlYyA+IGsudHRsKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdFx0aWYoISFrICYmIGsuc3RhdGUpIHsgayA9IGsuc3RhdGU7IH1cblx0XHRcdGlmKCEhayAmJiAkLmlzRnVuY3Rpb24odGhpcy5zZXR0aW5ncy5zdGF0ZS5maWx0ZXIpKSB7IGsgPSB0aGlzLnNldHRpbmdzLnN0YXRlLmZpbHRlci5jYWxsKHRoaXMsIGspOyB9XG5cdFx0XHRpZighIWspIHtcblx0XHRcdFx0dGhpcy5lbGVtZW50Lm9uZShcInNldF9zdGF0ZS5qc3RyZWVcIiwgZnVuY3Rpb24gKGUsIGRhdGEpIHsgZGF0YS5pbnN0YW5jZS50cmlnZ2VyKCdyZXN0b3JlX3N0YXRlJywgeyAnc3RhdGUnIDogJC5leHRlbmQodHJ1ZSwge30sIGspIH0pOyB9KTtcblx0XHRcdFx0dGhpcy5zZXRfc3RhdGUoayk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cdFx0LyoqXG5cdFx0ICogY2xlYXIgdGhlIHN0YXRlIG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXJcblx0XHQgKiBAbmFtZSBjbGVhcl9zdGF0ZSgpXG5cdFx0ICogQHBsdWdpbiBzdGF0ZVxuXHRcdCAqL1xuXHRcdHRoaXMuY2xlYXJfc3RhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gJC52YWthdGEuc3RvcmFnZS5kZWwodGhpcy5zZXR0aW5ncy5zdGF0ZS5rZXkpO1xuXHRcdH07XG5cdH07XG5cblx0KGZ1bmN0aW9uICgkLCB1bmRlZmluZWQpIHtcblx0XHQkLnZha2F0YS5zdG9yYWdlID0ge1xuXHRcdFx0Ly8gc2ltcGx5IHNwZWNpZnlpbmcgdGhlIGZ1bmN0aW9ucyBpbiBGRiB0aHJvd3MgYW4gZXJyb3Jcblx0XHRcdHNldCA6IGZ1bmN0aW9uIChrZXksIHZhbCkgeyByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsKTsgfSxcblx0XHRcdGdldCA6IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpOyB9LFxuXHRcdFx0ZGVsIDogZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7IH1cblx0XHR9O1xuXHR9KGpRdWVyeSkpO1xuXG5cdC8vIGluY2x1ZGUgdGhlIHN0YXRlIHBsdWdpbiBieSBkZWZhdWx0XG5cdC8vICQuanN0cmVlLmRlZmF1bHRzLnBsdWdpbnMucHVzaChcInN0YXRlXCIpO1xuXG4vKipcbiAqICMjIyBUeXBlcyBwbHVnaW5cbiAqXG4gKiBNYWtlcyBpdCBwb3NzaWJsZSB0byBhZGQgcHJlZGVmaW5lZCB0eXBlcyBmb3IgZ3JvdXBzIG9mIG5vZGVzLCB3aGljaCBtYWtlIGl0IHBvc3NpYmxlIHRvIGVhc2lseSBjb250cm9sIG5lc3RpbmcgcnVsZXMgYW5kIGljb24gZm9yIGVhY2ggZ3JvdXAuXG4gKi9cblxuXHQvKipcblx0ICogQW4gb2JqZWN0IHN0b3JpbmcgYWxsIHR5cGVzIGFzIGtleSB2YWx1ZSBwYWlycywgd2hlcmUgdGhlIGtleSBpcyB0aGUgdHlwZSBuYW1lIGFuZCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IHRoYXQgY291bGQgY29udGFpbiBmb2xsb3dpbmcga2V5cyAoYWxsIG9wdGlvbmFsKS5cblx0ICogXG5cdCAqICogYG1heF9jaGlsZHJlbmAgdGhlIG1heGltdW0gbnVtYmVyIG9mIGltbWVkaWF0ZSBjaGlsZHJlbiB0aGlzIG5vZGUgdHlwZSBjYW4gaGF2ZS4gRG8gbm90IHNwZWNpZnkgb3Igc2V0IHRvIGAtMWAgZm9yIHVubGltaXRlZC5cblx0ICogKiBgbWF4X2RlcHRoYCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbmVzdGluZyB0aGlzIG5vZGUgdHlwZSBjYW4gaGF2ZS4gQSB2YWx1ZSBvZiBgMWAgd291bGQgbWVhbiB0aGF0IHRoZSBub2RlIGNhbiBoYXZlIGNoaWxkcmVuLCBidXQgbm8gZ3JhbmRjaGlsZHJlbi4gRG8gbm90IHNwZWNpZnkgb3Igc2V0IHRvIGAtMWAgZm9yIHVubGltaXRlZC5cblx0ICogKiBgdmFsaWRfY2hpbGRyZW5gIGFuIGFycmF5IG9mIG5vZGUgdHlwZSBzdHJpbmdzLCB0aGF0IG5vZGVzIG9mIHRoaXMgdHlwZSBjYW4gaGF2ZSBhcyBjaGlsZHJlbi4gRG8gbm90IHNwZWNpZnkgb3Igc2V0IHRvIGAtMWAgZm9yIG5vIGxpbWl0cy5cblx0ICogKiBgaWNvbmAgYSBzdHJpbmcgLSBjYW4gYmUgYSBwYXRoIHRvIGFuIGljb24gb3IgYSBjbGFzc05hbWUsIGlmIHVzaW5nIGFuIGltYWdlIHRoYXQgaXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHVzZSBhIGAuL2AgcHJlZml4LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBkZXRlY3RlZCBhcyBhIGNsYXNzLiBPbWl0IHRvIHVzZSB0aGUgZGVmYXVsdCBpY29uIGZyb20geW91ciB0aGVtZS5cblx0ICpcblx0ICogVGhlcmUgYXJlIHR3byBwcmVkZWZpbmVkIHR5cGVzOlxuXHQgKiBcblx0ICogKiBgI2AgcmVwcmVzZW50cyB0aGUgcm9vdCBvZiB0aGUgdHJlZSwgZm9yIGV4YW1wbGUgYG1heF9jaGlsZHJlbmAgd291bGQgY29udHJvbCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygcm9vdCBub2Rlcy5cblx0ICogKiBgZGVmYXVsdGAgcmVwcmVzZW50cyB0aGUgZGVmYXVsdCBub2RlIC0gYW55IHNldHRpbmdzIGhlcmUgd2lsbCBiZSBhcHBsaWVkIHRvIGFsbCBub2RlcyB0aGF0IGRvIG5vdCBoYXZlIGEgdHlwZSBzcGVjaWZpZWQuXG5cdCAqIFxuXHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy50eXBlc1xuXHQgKiBAcGx1Z2luIHR5cGVzXG5cdCAqL1xuXHQkLmpzdHJlZS5kZWZhdWx0cy50eXBlcyA9IHtcblx0XHQnIycgOiB7fSxcblx0XHQnZGVmYXVsdCcgOiB7fVxuXHR9O1xuXG5cdCQuanN0cmVlLnBsdWdpbnMudHlwZXMgPSBmdW5jdGlvbiAob3B0aW9ucywgcGFyZW50KSB7XG5cdFx0dGhpcy5pbml0ID0gZnVuY3Rpb24gKGVsLCBvcHRpb25zKSB7XG5cdFx0XHR2YXIgaSwgajtcblx0XHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy50eXBlcyAmJiBvcHRpb25zLnR5cGVzWydkZWZhdWx0J10pIHtcblx0XHRcdFx0Zm9yKGkgaW4gb3B0aW9ucy50eXBlcykge1xuXHRcdFx0XHRcdGlmKGkgIT09IFwiZGVmYXVsdFwiICYmIGkgIT09IFwiI1wiICYmIG9wdGlvbnMudHlwZXMuaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0XHRcdGZvcihqIGluIG9wdGlvbnMudHlwZXNbJ2RlZmF1bHQnXSkge1xuXHRcdFx0XHRcdFx0XHRpZihvcHRpb25zLnR5cGVzWydkZWZhdWx0J10uaGFzT3duUHJvcGVydHkoaikgJiYgb3B0aW9ucy50eXBlc1tpXVtqXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy50eXBlc1tpXVtqXSA9IG9wdGlvbnMudHlwZXNbJ2RlZmF1bHQnXVtqXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cGFyZW50LmluaXQuY2FsbCh0aGlzLCBlbCwgb3B0aW9ucyk7XG5cdFx0XHR0aGlzLl9tb2RlbC5kYXRhWycjJ10udHlwZSA9ICcjJztcblx0XHR9O1xuXHRcdHRoaXMuYmluZCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHBhcmVudC5iaW5kLmNhbGwodGhpcyk7XG5cdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0Lm9uKCdtb2RlbC5qc3RyZWUnLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7XG5cdFx0XHRcdFx0XHR2YXIgbSA9IHRoaXMuX21vZGVsLmRhdGEsXG5cdFx0XHRcdFx0XHRcdGRwYyA9IGRhdGEubm9kZXMsXG5cdFx0XHRcdFx0XHRcdHQgPSB0aGlzLnNldHRpbmdzLnR5cGVzLFxuXHRcdFx0XHRcdFx0XHRpLCBqLCBjID0gJ2RlZmF1bHQnO1xuXHRcdFx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gZHBjLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRjID0gJ2RlZmF1bHQnO1xuXHRcdFx0XHRcdFx0XHRpZihtW2RwY1tpXV0ub3JpZ2luYWwgJiYgbVtkcGNbaV1dLm9yaWdpbmFsLnR5cGUgJiYgdFttW2RwY1tpXV0ub3JpZ2luYWwudHlwZV0pIHtcblx0XHRcdFx0XHRcdFx0XHRjID0gbVtkcGNbaV1dLm9yaWdpbmFsLnR5cGU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYobVtkcGNbaV1dLmRhdGEgJiYgbVtkcGNbaV1dLmRhdGEuanN0cmVlICYmIG1bZHBjW2ldXS5kYXRhLmpzdHJlZS50eXBlICYmIHRbbVtkcGNbaV1dLmRhdGEuanN0cmVlLnR5cGVdKSB7XG5cdFx0XHRcdFx0XHRcdFx0YyA9IG1bZHBjW2ldXS5kYXRhLmpzdHJlZS50eXBlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdG1bZHBjW2ldXS50eXBlID0gYztcblx0XHRcdFx0XHRcdFx0aWYobVtkcGNbaV1dLmljb24gPT09IHRydWUgJiYgdFtjXS5pY29uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRtW2RwY1tpXV0uaWNvbiA9IHRbY10uaWNvbjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIHRoaXMpKTtcblx0XHR9O1xuXHRcdHRoaXMuZ2V0X2pzb24gPSBmdW5jdGlvbiAob2JqLCBvcHRpb25zLCBmbGF0KSB7XG5cdFx0XHR2YXIgaSwgaixcblx0XHRcdFx0bSA9IHRoaXMuX21vZGVsLmRhdGEsXG5cdFx0XHRcdG9wdCA9IG9wdGlvbnMgPyAkLmV4dGVuZCh0cnVlLCB7fSwgb3B0aW9ucywge25vX2lkOmZhbHNlfSkgOiB7fSxcblx0XHRcdFx0dG1wID0gcGFyZW50LmdldF9qc29uLmNhbGwodGhpcywgb2JqLCBvcHQsIGZsYXQpO1xuXHRcdFx0aWYodG1wID09PSBmYWxzZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRcdGlmKCQuaXNBcnJheSh0bXApKSB7XG5cdFx0XHRcdGZvcihpID0gMCwgaiA9IHRtcC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0XHR0bXBbaV0udHlwZSA9IHRtcFtpXS5pZCAmJiBtW3RtcFtpXS5pZF0gJiYgbVt0bXBbaV0uaWRdLnR5cGUgPyBtW3RtcFtpXS5pZF0udHlwZSA6IFwiZGVmYXVsdFwiO1xuXHRcdFx0XHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy5ub19pZCkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHRtcFtpXS5pZDtcblx0XHRcdFx0XHRcdGlmKHRtcFtpXS5saV9hdHRyICYmIHRtcFtpXS5saV9hdHRyLmlkKSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSB0bXBbaV0ubGlfYXR0ci5pZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHR0bXAudHlwZSA9IHRtcC5pZCAmJiBtW3RtcC5pZF0gJiYgbVt0bXAuaWRdLnR5cGUgPyBtW3RtcC5pZF0udHlwZSA6IFwiZGVmYXVsdFwiO1xuXHRcdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMubm9faWQpIHtcblx0XHRcdFx0XHR0bXAgPSB0aGlzLl9kZWxldGVfaWRzKHRtcCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0bXA7XG5cdFx0fTtcblx0XHR0aGlzLl9kZWxldGVfaWRzID0gZnVuY3Rpb24gKHRtcCkge1xuXHRcdFx0aWYoJC5pc0FycmF5KHRtcCkpIHtcblx0XHRcdFx0Zm9yKHZhciBpID0gMCwgaiA9IHRtcC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0XHR0bXBbaV0gPSB0aGlzLl9kZWxldGVfaWRzKHRtcFtpXSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRtcDtcblx0XHRcdH1cblx0XHRcdGRlbGV0ZSB0bXAuaWQ7XG5cdFx0XHRpZih0bXAubGlfYXR0ciAmJiB0bXAubGlfYXR0ci5pZCkge1xuXHRcdFx0XHRkZWxldGUgdG1wLmxpX2F0dHIuaWQ7XG5cdFx0XHR9XG5cdFx0XHRpZih0bXAuY2hpbGRyZW4gJiYgJC5pc0FycmF5KHRtcC5jaGlsZHJlbikpIHtcblx0XHRcdFx0dG1wLmNoaWxkcmVuID0gdGhpcy5fZGVsZXRlX2lkcyh0bXAuY2hpbGRyZW4pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRtcDtcblx0XHR9O1xuXHRcdHRoaXMuY2hlY2sgPSBmdW5jdGlvbiAoY2hrLCBvYmosIHBhciwgcG9zKSB7XG5cdFx0XHRpZihwYXJlbnQuY2hlY2suY2FsbCh0aGlzLCBjaGssIG9iaiwgcGFyLCBwb3MpID09PSBmYWxzZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRcdG9iaiA9IG9iaiAmJiBvYmouaWQgPyBvYmogOiB0aGlzLmdldF9ub2RlKG9iaik7XG5cdFx0XHRwYXIgPSBwYXIgJiYgcGFyLmlkID8gcGFyIDogdGhpcy5nZXRfbm9kZShwYXIpO1xuXHRcdFx0dmFyIG0gPSBvYmogJiYgb2JqLmlkID8gJC5qc3RyZWUucmVmZXJlbmNlKG9iai5pZCkgOiBudWxsLCB0bXAsIGQsIGksIGo7XG5cdFx0XHRtID0gbSAmJiBtLl9tb2RlbCAmJiBtLl9tb2RlbC5kYXRhID8gbS5fbW9kZWwuZGF0YSA6IG51bGw7XG5cdFx0XHRzd2l0Y2goY2hrKSB7XG5cdFx0XHRcdGNhc2UgXCJjcmVhdGVfbm9kZVwiOlxuXHRcdFx0XHRjYXNlIFwibW92ZV9ub2RlXCI6XG5cdFx0XHRcdGNhc2UgXCJjb3B5X25vZGVcIjpcblx0XHRcdFx0XHRpZihjaGsgIT09ICdtb3ZlX25vZGUnIHx8ICQuaW5BcnJheShvYmouaWQsIHBhci5jaGlsZHJlbikgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHR0bXAgPSB0aGlzLmdldF9ydWxlcyhwYXIpO1xuXHRcdFx0XHRcdFx0aWYodG1wLm1heF9jaGlsZHJlbiAhPT0gdW5kZWZpbmVkICYmIHRtcC5tYXhfY2hpbGRyZW4gIT09IC0xICYmIHRtcC5tYXhfY2hpbGRyZW4gPT09IHBhci5jaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3IgPSB7ICdlcnJvcicgOiAnY2hlY2snLCAncGx1Z2luJyA6ICd0eXBlcycsICdpZCcgOiAndHlwZXNfMDEnLCAncmVhc29uJyA6ICdtYXhfY2hpbGRyZW4gcHJldmVudHMgZnVuY3Rpb246ICcgKyBjaGssICdkYXRhJyA6IEpTT04uc3RyaW5naWZ5KHsgJ2NoaycgOiBjaGssICdwb3MnIDogcG9zLCAnb2JqJyA6IG9iaiAmJiBvYmouaWQgPyBvYmouaWQgOiBmYWxzZSwgJ3BhcicgOiBwYXIgJiYgcGFyLmlkID8gcGFyLmlkIDogZmFsc2UgfSkgfTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYodG1wLnZhbGlkX2NoaWxkcmVuICE9PSB1bmRlZmluZWQgJiYgdG1wLnZhbGlkX2NoaWxkcmVuICE9PSAtMSAmJiAkLmluQXJyYXkob2JqLnR5cGUsIHRtcC52YWxpZF9jaGlsZHJlbikgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yID0geyAnZXJyb3InIDogJ2NoZWNrJywgJ3BsdWdpbicgOiAndHlwZXMnLCAnaWQnIDogJ3R5cGVzXzAyJywgJ3JlYXNvbicgOiAndmFsaWRfY2hpbGRyZW4gcHJldmVudHMgZnVuY3Rpb246ICcgKyBjaGssICdkYXRhJyA6IEpTT04uc3RyaW5naWZ5KHsgJ2NoaycgOiBjaGssICdwb3MnIDogcG9zLCAnb2JqJyA6IG9iaiAmJiBvYmouaWQgPyBvYmouaWQgOiBmYWxzZSwgJ3BhcicgOiBwYXIgJiYgcGFyLmlkID8gcGFyLmlkIDogZmFsc2UgfSkgfTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYobSAmJiBvYmouY2hpbGRyZW5fZCAmJiBvYmoucGFyZW50cykge1xuXHRcdFx0XHRcdFx0XHRkID0gMDtcblx0XHRcdFx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gb2JqLmNoaWxkcmVuX2QubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZCA9IE1hdGgubWF4KGQsIG1bb2JqLmNoaWxkcmVuX2RbaV1dLnBhcmVudHMubGVuZ3RoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRkID0gZCAtIG9iai5wYXJlbnRzLmxlbmd0aCArIDE7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihkIDw9IDAgfHwgZCA9PT0gdW5kZWZpbmVkKSB7IGQgPSAxOyB9XG5cdFx0XHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0XHRcdGlmKHRtcC5tYXhfZGVwdGggIT09IHVuZGVmaW5lZCAmJiB0bXAubWF4X2RlcHRoICE9PSAtMSAmJiB0bXAubWF4X2RlcHRoIDwgZCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yID0geyAnZXJyb3InIDogJ2NoZWNrJywgJ3BsdWdpbicgOiAndHlwZXMnLCAnaWQnIDogJ3R5cGVzXzAzJywgJ3JlYXNvbicgOiAnbWF4X2RlcHRoIHByZXZlbnRzIGZ1bmN0aW9uOiAnICsgY2hrLCAnZGF0YScgOiBKU09OLnN0cmluZ2lmeSh7ICdjaGsnIDogY2hrLCAncG9zJyA6IHBvcywgJ29iaicgOiBvYmogJiYgb2JqLmlkID8gb2JqLmlkIDogZmFsc2UsICdwYXInIDogcGFyICYmIHBhci5pZCA/IHBhci5pZCA6IGZhbHNlIH0pIH07XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHBhciA9IHRoaXMuZ2V0X25vZGUocGFyLnBhcmVudCk7XG5cdFx0XHRcdFx0XHRcdHRtcCA9IHRoaXMuZ2V0X3J1bGVzKHBhcik7XG5cdFx0XHRcdFx0XHRcdGQrKztcblx0XHRcdFx0XHRcdH0gd2hpbGUocGFyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIHVzZWQgdG8gcmV0cmlldmUgdGhlIHR5cGUgc2V0dGluZ3Mgb2JqZWN0IGZvciBhIG5vZGVcblx0XHQgKiBAbmFtZSBnZXRfcnVsZXMob2JqKVxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG9iaiB0aGUgbm9kZSB0byBmaW5kIHRoZSBydWxlcyBmb3Jcblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdFx0ICogQHBsdWdpbiB0eXBlc1xuXHRcdCAqL1xuXHRcdHRoaXMuZ2V0X3J1bGVzID0gZnVuY3Rpb24gKG9iaikge1xuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xuXHRcdFx0aWYoIW9iaikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRcdHZhciB0bXAgPSB0aGlzLmdldF90eXBlKG9iaiwgdHJ1ZSk7XG5cdFx0XHRpZih0bXAubWF4X2RlcHRoID09PSB1bmRlZmluZWQpIHsgdG1wLm1heF9kZXB0aCA9IC0xOyB9XG5cdFx0XHRpZih0bXAubWF4X2NoaWxkcmVuID09PSB1bmRlZmluZWQpIHsgdG1wLm1heF9jaGlsZHJlbiA9IC0xOyB9XG5cdFx0XHRpZih0bXAudmFsaWRfY2hpbGRyZW4gPT09IHVuZGVmaW5lZCkgeyB0bXAudmFsaWRfY2hpbGRyZW4gPSAtMTsgfVxuXHRcdFx0cmV0dXJuIHRtcDtcblx0XHR9O1xuXHRcdC8qKlxuXHRcdCAqIHVzZWQgdG8gcmV0cmlldmUgdGhlIHR5cGUgc3RyaW5nIG9yIHNldHRpbmdzIG9iamVjdCBmb3IgYSBub2RlXG5cdFx0ICogQG5hbWUgZ2V0X3R5cGUob2JqIFssIHJ1bGVzXSlcblx0XHQgKiBAcGFyYW0ge21peGVkfSBvYmogdGhlIG5vZGUgdG8gZmluZCB0aGUgcnVsZXMgZm9yXG5cdFx0ICogQHBhcmFtIHtCb29sZWFufSBydWxlcyBpZiBzZXQgdG8gYHRydWVgIGluc3RlYWQgb2YgYSBzdHJpbmcgdGhlIHNldHRpbmdzIG9iamVjdCB3aWxsIGJlIHJldHVybmVkXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfE9iamVjdH1cblx0XHQgKiBAcGx1Z2luIHR5cGVzXG5cdFx0ICovXG5cdFx0dGhpcy5nZXRfdHlwZSA9IGZ1bmN0aW9uIChvYmosIHJ1bGVzKSB7XG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XG5cdFx0XHRyZXR1cm4gKCFvYmopID8gZmFsc2UgOiAoIHJ1bGVzID8gJC5leHRlbmQoeyAndHlwZScgOiBvYmoudHlwZSB9LCB0aGlzLnNldHRpbmdzLnR5cGVzW29iai50eXBlXSkgOiBvYmoudHlwZSk7XG5cdFx0fTtcblx0XHQvKipcblx0XHQgKiB1c2VkIHRvIGNoYW5nZSBhIG5vZGUncyB0eXBlXG5cdFx0ICogQG5hbWUgc2V0X3R5cGUob2JqLCB0eXBlKVxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG9iaiB0aGUgbm9kZSB0byBjaGFuZ2Vcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSB0aGUgbmV3IHR5cGVcblx0XHQgKiBAcGx1Z2luIHR5cGVzXG5cdFx0ICovXG5cdFx0dGhpcy5zZXRfdHlwZSA9IGZ1bmN0aW9uIChvYmosIHR5cGUpIHtcblx0XHRcdHZhciB0LCB0MSwgdDIsIG9sZF90eXBlLCBvbGRfaWNvbjtcblx0XHRcdGlmKCQuaXNBcnJheShvYmopKSB7XG5cdFx0XHRcdG9iaiA9IG9iai5zbGljZSgpO1xuXHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IG9iai5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcblx0XHRcdFx0XHR0aGlzLnNldF90eXBlKG9ialt0MV0sIHR5cGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0dCA9IHRoaXMuc2V0dGluZ3MudHlwZXM7XG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XG5cdFx0XHRpZighdFt0eXBlXSB8fCAhb2JqKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdFx0b2xkX3R5cGUgPSBvYmoudHlwZTtcblx0XHRcdG9sZF9pY29uID0gdGhpcy5nZXRfaWNvbihvYmopO1xuXHRcdFx0b2JqLnR5cGUgPSB0eXBlO1xuXHRcdFx0aWYob2xkX2ljb24gPT09IHRydWUgfHwgKHRbb2xkX3R5cGVdICYmIHRbb2xkX3R5cGVdLmljb24gJiYgb2xkX2ljb24gPT09IHRbb2xkX3R5cGVdLmljb24pKSB7XG5cdFx0XHRcdHRoaXMuc2V0X2ljb24ob2JqLCB0W3R5cGVdLmljb24gIT09IHVuZGVmaW5lZCA/IHRbdHlwZV0uaWNvbiA6IHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fTtcblx0fTtcblx0Ly8gaW5jbHVkZSB0aGUgdHlwZXMgcGx1Z2luIGJ5IGRlZmF1bHRcblx0Ly8gJC5qc3RyZWUuZGVmYXVsdHMucGx1Z2lucy5wdXNoKFwidHlwZXNcIik7XG5cbi8qKlxuICogIyMjIFVuaXF1ZSBwbHVnaW5cbiAqXG4gKiBFbmZvcmNlcyB0aGF0IG5vIG5vZGVzIHdpdGggdGhlIHNhbWUgbmFtZSBjYW4gY29leGlzdCBhcyBzaWJsaW5ncy5cbiAqL1xuXG5cdCQuanN0cmVlLnBsdWdpbnMudW5pcXVlID0gZnVuY3Rpb24gKG9wdGlvbnMsIHBhcmVudCkge1xuXHRcdHRoaXMuY2hlY2sgPSBmdW5jdGlvbiAoY2hrLCBvYmosIHBhciwgcG9zKSB7XG5cdFx0XHRpZihwYXJlbnQuY2hlY2suY2FsbCh0aGlzLCBjaGssIG9iaiwgcGFyLCBwb3MpID09PSBmYWxzZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRcdG9iaiA9IG9iaiAmJiBvYmouaWQgPyBvYmogOiB0aGlzLmdldF9ub2RlKG9iaik7XG5cdFx0XHRwYXIgPSBwYXIgJiYgcGFyLmlkID8gcGFyIDogdGhpcy5nZXRfbm9kZShwYXIpO1xuXHRcdFx0aWYoIXBhciB8fCAhcGFyLmNoaWxkcmVuKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0XHR2YXIgbiA9IGNoayA9PT0gXCJyZW5hbWVfbm9kZVwiID8gcG9zIDogb2JqLnRleHQsXG5cdFx0XHRcdGMgPSBbXSxcblx0XHRcdFx0bSA9IHRoaXMuX21vZGVsLmRhdGEsIGksIGo7XG5cdFx0XHRmb3IoaSA9IDAsIGogPSBwYXIuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdFx0XHRcdGMucHVzaChtW3Bhci5jaGlsZHJlbltpXV0udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHRzd2l0Y2goY2hrKSB7XG5cdFx0XHRcdGNhc2UgXCJkZWxldGVfbm9kZVwiOlxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRjYXNlIFwicmVuYW1lX25vZGVcIjpcblx0XHRcdFx0Y2FzZSBcImNvcHlfbm9kZVwiOlxuXHRcdFx0XHRcdGkgPSAoJC5pbkFycmF5KG4sIGMpID09PSAtMSk7XG5cdFx0XHRcdFx0aWYoIWkpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yID0geyAnZXJyb3InIDogJ2NoZWNrJywgJ3BsdWdpbicgOiAndW5pcXVlJywgJ2lkJyA6ICd1bmlxdWVfMDEnLCAncmVhc29uJyA6ICdDaGlsZCB3aXRoIG5hbWUgJyArIG4gKyAnIGFscmVhZHkgZXhpc3RzLiBQcmV2ZW50aW5nOiAnICsgY2hrLCAnZGF0YScgOiBKU09OLnN0cmluZ2lmeSh7ICdjaGsnIDogY2hrLCAncG9zJyA6IHBvcywgJ29iaicgOiBvYmogJiYgb2JqLmlkID8gb2JqLmlkIDogZmFsc2UsICdwYXInIDogcGFyICYmIHBhci5pZCA/IHBhci5pZCA6IGZhbHNlIH0pIH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0XHRjYXNlIFwibW92ZV9ub2RlXCI6XG5cdFx0XHRcdFx0aSA9IChvYmoucGFyZW50ID09PSBwYXIuaWQgfHwgJC5pbkFycmF5KG4sIGMpID09PSAtMSk7XG5cdFx0XHRcdFx0aWYoIWkpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yID0geyAnZXJyb3InIDogJ2NoZWNrJywgJ3BsdWdpbicgOiAndW5pcXVlJywgJ2lkJyA6ICd1bmlxdWVfMDEnLCAncmVhc29uJyA6ICdDaGlsZCB3aXRoIG5hbWUgJyArIG4gKyAnIGFscmVhZHkgZXhpc3RzLiBQcmV2ZW50aW5nOiAnICsgY2hrLCAnZGF0YScgOiBKU09OLnN0cmluZ2lmeSh7ICdjaGsnIDogY2hrLCAncG9zJyA6IHBvcywgJ29iaicgOiBvYmogJiYgb2JqLmlkID8gb2JqLmlkIDogZmFsc2UsICdwYXInIDogcGFyICYmIHBhci5pZCA/IHBhci5pZCA6IGZhbHNlIH0pIH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fTtcblx0fTtcblxuXHQvLyBpbmNsdWRlIHRoZSB1bmlxdWUgcGx1Z2luIGJ5IGRlZmF1bHRcblx0Ly8gJC5qc3RyZWUuZGVmYXVsdHMucGx1Z2lucy5wdXNoKFwidW5pcXVlXCIpO1xuXG5cbi8qKlxuICogIyMjIFdob2xlcm93IHBsdWdpblxuICpcbiAqIE1ha2VzIGVhY2ggbm9kZSBhcHBlYXIgYmxvY2sgbGV2ZWwuIE1ha2luZyBzZWxlY3Rpb24gZWFzaWVyLiBNYXkgY2F1c2Ugc2xvdyBkb3duIGZvciBsYXJnZSB0cmVlcyBpbiBvbGQgYnJvd3NlcnMuXG4gKi9cblxuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7XG5cdGRpdi5zZXRBdHRyaWJ1dGUoJ3Vuc2VsZWN0YWJsZScsJ29uJyk7XG5cdGRpdi5jbGFzc05hbWUgPSAnanN0cmVlLXdob2xlcm93Jztcblx0ZGl2LmlubmVySFRNTCA9ICcmIzE2MDsnO1xuXHQkLmpzdHJlZS5wbHVnaW5zLndob2xlcm93ID0gZnVuY3Rpb24gKG9wdGlvbnMsIHBhcmVudCkge1xuXHRcdHRoaXMuYmluZCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHBhcmVudC5iaW5kLmNhbGwodGhpcyk7XG5cblx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHQub24oJ2xvYWRpbmcnLCAkLnByb3h5KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGRpdi5zdHlsZS5oZWlnaHQgPSB0aGlzLl9kYXRhLmNvcmUubGlfaGVpZ2h0ICsgJ3B4Jztcblx0XHRcdFx0XHR9LCB0aGlzKSlcblx0XHRcdFx0Lm9uKCdyZWFkeS5qc3RyZWUgc2V0X3N0YXRlLmpzdHJlZScsICQucHJveHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0dGhpcy5oaWRlX2RvdHMoKTtcblx0XHRcdFx0XHR9LCB0aGlzKSlcblx0XHRcdFx0Lm9uKFwicmVhZHkuanN0cmVlXCIsICQucHJveHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0dGhpcy5nZXRfY29udGFpbmVyX3VsKCkuYWRkQ2xhc3MoJ2pzdHJlZS13aG9sZXJvdy11bCcpO1xuXHRcdFx0XHRcdH0sIHRoaXMpKVxuXHRcdFx0XHQub24oXCJkZXNlbGVjdF9hbGwuanN0cmVlXCIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHtcblx0XHRcdFx0XHRcdHRoaXMuZWxlbWVudC5maW5kKCcuanN0cmVlLXdob2xlcm93LWNsaWNrZWQnKS5yZW1vdmVDbGFzcygnanN0cmVlLXdob2xlcm93LWNsaWNrZWQnKTtcblx0XHRcdFx0XHR9LCB0aGlzKSlcblx0XHRcdFx0Lm9uKFwiY2hhbmdlZC5qc3RyZWVcIiwgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkge1xuXHRcdFx0XHRcdFx0dGhpcy5lbGVtZW50LmZpbmQoJy5qc3RyZWUtd2hvbGVyb3ctY2xpY2tlZCcpLnJlbW92ZUNsYXNzKCdqc3RyZWUtd2hvbGVyb3ctY2xpY2tlZCcpO1xuXHRcdFx0XHRcdFx0dmFyIHRtcCA9IGZhbHNlLCBpLCBqO1xuXHRcdFx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gZGF0YS5zZWxlY3RlZC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0dG1wID0gdGhpcy5nZXRfbm9kZShkYXRhLnNlbGVjdGVkW2ldLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0aWYodG1wICYmIHRtcC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHR0bXAuY2hpbGRyZW4oJy5qc3RyZWUtd2hvbGVyb3cnKS5hZGRDbGFzcygnanN0cmVlLXdob2xlcm93LWNsaWNrZWQnKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIHRoaXMpKVxuXHRcdFx0XHQub24oXCJvcGVuX25vZGUuanN0cmVlXCIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0X25vZGUoZGF0YS5ub2RlLCB0cnVlKS5maW5kKCcuanN0cmVlLWNsaWNrZWQnKS5wYXJlbnQoKS5jaGlsZHJlbignLmpzdHJlZS13aG9sZXJvdycpLmFkZENsYXNzKCdqc3RyZWUtd2hvbGVyb3ctY2xpY2tlZCcpO1xuXHRcdFx0XHRcdH0sIHRoaXMpKVxuXHRcdFx0XHQub24oXCJob3Zlcl9ub2RlLmpzdHJlZSBkZWhvdmVyX25vZGUuanN0cmVlXCIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0X25vZGUoZGF0YS5ub2RlLCB0cnVlKS5jaGlsZHJlbignLmpzdHJlZS13aG9sZXJvdycpW2UudHlwZSA9PT0gXCJob3Zlcl9ub2RlXCI/XCJhZGRDbGFzc1wiOlwicmVtb3ZlQ2xhc3NcIl0oJ2pzdHJlZS13aG9sZXJvdy1ob3ZlcmVkJyk7XG5cdFx0XHRcdFx0fSwgdGhpcykpXG5cdFx0XHRcdC5vbihcImNvbnRleHRtZW51LmpzdHJlZVwiLCBcIi5qc3RyZWUtd2hvbGVyb3dcIiwgJC5wcm94eShmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0JChlLmN1cnJlbnRUYXJnZXQpLmNsb3Nlc3QoXCJsaVwiKS5jaGlsZHJlbihcImE6ZXEoMClcIikudHJpZ2dlcignY29udGV4dG1lbnUnLGUpO1xuXHRcdFx0XHRcdH0sIHRoaXMpKVxuXHRcdFx0XHQub24oXCJjbGljay5qc3RyZWVcIiwgXCIuanN0cmVlLXdob2xlcm93XCIsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0dmFyIHRtcCA9ICQuRXZlbnQoJ2NsaWNrJywgeyBtZXRhS2V5IDogZS5tZXRhS2V5LCBjdHJsS2V5IDogZS5jdHJsS2V5LCBhbHRLZXkgOiBlLmFsdEtleSwgc2hpZnRLZXkgOiBlLnNoaWZ0S2V5IH0pO1xuXHRcdFx0XHRcdFx0JChlLmN1cnJlbnRUYXJnZXQpLmNsb3Nlc3QoXCJsaVwiKS5jaGlsZHJlbihcImE6ZXEoMClcIikudHJpZ2dlcih0bXApLmZvY3VzKCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0Lm9uKFwiY2xpY2suanN0cmVlXCIsIFwiLmpzdHJlZS1sZWFmID4gLmpzdHJlZS1vY2xcIiwgJC5wcm94eShmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdHZhciB0bXAgPSAkLkV2ZW50KCdjbGljaycsIHsgbWV0YUtleSA6IGUubWV0YUtleSwgY3RybEtleSA6IGUuY3RybEtleSwgYWx0S2V5IDogZS5hbHRLZXksIHNoaWZ0S2V5IDogZS5zaGlmdEtleSB9KTtcblx0XHRcdFx0XHRcdCQoZS5jdXJyZW50VGFyZ2V0KS5jbG9zZXN0KFwibGlcIikuY2hpbGRyZW4oXCJhOmVxKDApXCIpLnRyaWdnZXIodG1wKS5mb2N1cygpO1xuXHRcdFx0XHRcdH0sIHRoaXMpKVxuXHRcdFx0XHQub24oXCJtb3VzZW92ZXIuanN0cmVlXCIsIFwiLmpzdHJlZS13aG9sZXJvdywgLmpzdHJlZS1pY29uXCIsICQucHJveHkoZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR0aGlzLmhvdmVyX25vZGUoZS5jdXJyZW50VGFyZ2V0KTtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9LCB0aGlzKSlcblx0XHRcdFx0Lm9uKFwibW91c2VsZWF2ZS5qc3RyZWVcIiwgXCIuanN0cmVlLW5vZGVcIiwgJC5wcm94eShmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5kZWhvdmVyX25vZGUoZS5jdXJyZW50VGFyZ2V0KTtcblx0XHRcdFx0XHR9LCB0aGlzKSk7XG5cdFx0fTtcblx0XHR0aGlzLnRlYXJkb3duID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYodGhpcy5zZXR0aW5ncy53aG9sZXJvdykge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuZmluZChcIi5qc3RyZWUtd2hvbGVyb3dcIikucmVtb3ZlKCk7XG5cdFx0XHR9XG5cdFx0XHRwYXJlbnQudGVhcmRvd24uY2FsbCh0aGlzKTtcblx0XHR9O1xuXHRcdHRoaXMucmVkcmF3X25vZGUgPSBmdW5jdGlvbihvYmosIGRlZXAsIGNhbGxiYWNrKSB7XG5cdFx0XHRvYmogPSBwYXJlbnQucmVkcmF3X25vZGUuY2FsbCh0aGlzLCBvYmosIGRlZXAsIGNhbGxiYWNrKTtcblx0XHRcdGlmKG9iaikge1xuXHRcdFx0XHR2YXIgdG1wID0gZGl2LmNsb25lTm9kZSh0cnVlKTtcblx0XHRcdFx0Ly90bXAuc3R5bGUuaGVpZ2h0ID0gdGhpcy5fZGF0YS5jb3JlLmxpX2hlaWdodCArICdweCc7XG5cdFx0XHRcdGlmKCQuaW5BcnJheShvYmouaWQsIHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCkgIT09IC0xKSB7IHRtcC5jbGFzc05hbWUgKz0gJyBqc3RyZWUtd2hvbGVyb3ctY2xpY2tlZCc7IH1cblx0XHRcdFx0b2JqLmluc2VydEJlZm9yZSh0bXAsIG9iai5jaGlsZE5vZGVzWzBdKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvYmo7XG5cdFx0fTtcblx0fTtcblx0Ly8gaW5jbHVkZSB0aGUgd2hvbGVyb3cgcGx1Z2luIGJ5IGRlZmF1bHRcblx0Ly8gJC5qc3RyZWUuZGVmYXVsdHMucGx1Z2lucy5wdXNoKFwid2hvbGVyb3dcIik7XG5cbn0pKTsiXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzdHJlZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianN0cmVlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypnbG9iYWxzIGpRdWVyeSwgZGVmaW5lLCBleHBvcnRzLCByZXF1aXJlLCB3aW5kb3csIGRvY3VtZW50ICovXHJcbihmdW5jdGlvbiAoZmFjdG9yeSkge1xyXG5cdFwidXNlIHN0cmljdFwiO1xyXG5cdGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuXHRcdGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcclxuXHR9XHJcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcclxuXHRcdGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpO1xyXG5cdH1cclxuXHRlbHNlIHtcclxuXHRcdGZhY3RvcnkoalF1ZXJ5KTtcclxuXHR9XHJcbn0oZnVuY3Rpb24gKCQsIHVuZGVmaW5lZCkge1xyXG5cdFwidXNlIHN0cmljdFwiO1xyXG4vKiFcclxuICoganNUcmVlIDMuMC4wXHJcbiAqIGh0dHA6Ly9qc3RyZWUuY29tL1xyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMgSXZhbiBCb3poYW5vdiAoaHR0cDovL3Zha2F0YS5jb20pXHJcbiAqXHJcbiAqIExpY2Vuc2VkIHNhbWUgYXMganF1ZXJ5IC0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZVxyXG4gKiAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXHJcbiAqL1xyXG4vKiFcclxuICogaWYgdXNpbmcganNsaW50IHBsZWFzZSBhbGxvdyBmb3IgdGhlIGpRdWVyeSBnbG9iYWwgYW5kIHVzZSBmb2xsb3dpbmcgb3B0aW9uczogXHJcbiAqIGpzbGludDogYnJvd3NlcjogdHJ1ZSwgYXNzOiB0cnVlLCBiaXR3aXNlOiB0cnVlLCBjb250aW51ZTogdHJ1ZSwgbm9tZW46IHRydWUsIHBsdXNwbHVzOiB0cnVlLCByZWdleHA6IHRydWUsIHVucGFyYW06IHRydWUsIHRvZG86IHRydWUsIHdoaXRlOiB0cnVlXHJcbiAqL1xyXG5cclxuXHQvLyBwcmV2ZW50IGFub3RoZXIgbG9hZD8gbWF5YmUgdGhlcmUgaXMgYSBiZXR0ZXIgd2F5P1xyXG5cdGlmKCQuanN0cmVlKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiAjIyMganNUcmVlIGNvcmUgZnVuY3Rpb25hbGl0eVxyXG5cdCAqL1xyXG5cclxuXHQvLyBpbnRlcm5hbCB2YXJpYWJsZXNcclxuXHR2YXIgaW5zdGFuY2VfY291bnRlciA9IDAsXHJcblx0XHRjY3Bfbm9kZSA9IGZhbHNlLFxyXG5cdFx0Y2NwX21vZGUgPSBmYWxzZSxcclxuXHRcdGNjcF9pbnN0ID0gZmFsc2UsXHJcblx0XHR0aGVtZXNfbG9hZGVkID0gW10sXHJcblx0XHRzcmMgPSAkKCdzY3JpcHQ6bGFzdCcpLmF0dHIoJ3NyYycpLFxyXG5cdFx0X2QgPSBkb2N1bWVudCwgX25vZGUgPSBfZC5jcmVhdGVFbGVtZW50KCdMSScpLCBfdGVtcDEsIF90ZW1wMjtcclxuXHJcblx0X25vZGUuc2V0QXR0cmlidXRlKCdyb2xlJywgJ3RyZWVpdGVtJyk7XHJcblx0X3RlbXAxID0gX2QuY3JlYXRlRWxlbWVudCgnSScpO1xyXG5cdF90ZW1wMS5jbGFzc05hbWUgPSAnanN0cmVlLWljb24ganN0cmVlLW9jbCc7XHJcblx0X25vZGUuYXBwZW5kQ2hpbGQoX3RlbXAxKTtcclxuXHRfdGVtcDEgPSBfZC5jcmVhdGVFbGVtZW50KCdBJyk7XHJcblx0X3RlbXAxLmNsYXNzTmFtZSA9ICdqc3RyZWUtYW5jaG9yJztcclxuXHRfdGVtcDEuc2V0QXR0cmlidXRlKCdocmVmJywnIycpO1xyXG5cdF90ZW1wMiA9IF9kLmNyZWF0ZUVsZW1lbnQoJ0knKTtcclxuXHRfdGVtcDIuY2xhc3NOYW1lID0gJ2pzdHJlZS1pY29uIGpzdHJlZS10aGVtZWljb24nO1xyXG5cdF90ZW1wMS5hcHBlbmRDaGlsZChfdGVtcDIpO1xyXG5cdF9ub2RlLmFwcGVuZENoaWxkKF90ZW1wMSk7XHJcblx0X3RlbXAxID0gX3RlbXAyID0gbnVsbDtcclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIGhvbGRzIGFsbCBqc3RyZWUgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcywgaW5jbHVkaW5nIHRoZSBhY3R1YWwgY2xhc3MgYW5kIG1ldGhvZHMgdG8gY3JlYXRlLCBhY2Nlc3MgYW5kIG1hbmlwdWxhdGUgaW5zdGFuY2VzLlxyXG5cdCAqIEBuYW1lICQuanN0cmVlXHJcblx0ICovXHJcblx0JC5qc3RyZWUgPSB7XHJcblx0XHQvKiogXHJcblx0XHQgKiBzcGVjaWZpZXMgdGhlIGpzdHJlZSB2ZXJzaW9uIGluIHVzZVxyXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUudmVyc2lvblxyXG5cdFx0ICovXHJcblx0XHR2ZXJzaW9uIDogJzMuMC4wLWJldGE5JyxcclxuXHRcdC8qKlxyXG5cdFx0ICogaG9sZHMgYWxsIHRoZSBkZWZhdWx0IG9wdGlvbnMgdXNlZCB3aGVuIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcclxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzXHJcblx0XHQgKi9cclxuXHRcdGRlZmF1bHRzIDoge1xyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogY29uZmlndXJlIHdoaWNoIHBsdWdpbnMgd2lsbCBiZSBhY3RpdmUgb24gYW4gaW5zdGFuY2UuIFNob3VsZCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzLCB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgYSBwbHVnaW4gbmFtZS4gVGhlIGRlZmF1bHQgaXMgYFtdYFxyXG5cdFx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5wbHVnaW5zXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRwbHVnaW5zIDogW11cclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIHN0b3JlcyBhbGwgbG9hZGVkIGpzdHJlZSBwbHVnaW5zICh1c2VkIGludGVybmFsbHkpXHJcblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5wbHVnaW5zXHJcblx0XHQgKi9cclxuXHRcdHBsdWdpbnMgOiB7fSxcclxuXHRcdHBhdGggOiBzcmMgJiYgc3JjLmluZGV4T2YoJy8nKSAhPT0gLTEgPyBzcmMucmVwbGFjZSgvXFwvW15cXC9dKyQvLCcnKSA6ICcnXHJcblx0fTtcclxuXHQvKipcclxuXHQgKiBjcmVhdGVzIGEganN0cmVlIGluc3RhbmNlXHJcblx0ICogQG5hbWUgJC5qc3RyZWUuY3JlYXRlKGVsIFssIG9wdGlvbnNdKVxyXG5cdCAqIEBwYXJhbSB7RE9NRWxlbWVudHxqUXVlcnl8U3RyaW5nfSBlbCB0aGUgZWxlbWVudCB0byBjcmVhdGUgdGhlIGluc3RhbmNlIG9uLCBjYW4gYmUgalF1ZXJ5IGV4dGVuZGVkIG9yIGEgc2VsZWN0b3JcclxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBvcHRpb25zIGZvciB0aGlzIGluc3RhbmNlIChleHRlbmRzIGAkLmpzdHJlZS5kZWZhdWx0c2ApXHJcblx0ICogQHJldHVybiB7anNUcmVlfSB0aGUgbmV3IGluc3RhbmNlXHJcblx0ICovXHJcblx0JC5qc3RyZWUuY3JlYXRlID0gZnVuY3Rpb24gKGVsLCBvcHRpb25zKSB7XHJcblx0XHR2YXIgdG1wID0gbmV3ICQuanN0cmVlLmNvcmUoKytpbnN0YW5jZV9jb3VudGVyKSxcclxuXHRcdFx0b3B0ID0gb3B0aW9ucztcclxuXHRcdG9wdGlvbnMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgJC5qc3RyZWUuZGVmYXVsdHMsIG9wdGlvbnMpO1xyXG5cdFx0aWYob3B0ICYmIG9wdC5wbHVnaW5zKSB7XHJcblx0XHRcdG9wdGlvbnMucGx1Z2lucyA9IG9wdC5wbHVnaW5zO1xyXG5cdFx0fVxyXG5cdFx0JC5lYWNoKG9wdGlvbnMucGx1Z2lucywgZnVuY3Rpb24gKGksIGspIHtcclxuXHRcdFx0aWYoaSAhPT0gJ2NvcmUnKSB7XHJcblx0XHRcdFx0dG1wID0gdG1wLnBsdWdpbihrLCBvcHRpb25zW2tdKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0bXAuaW5pdChlbCwgb3B0aW9ucyk7XHJcblx0XHRyZXR1cm4gdG1wO1xyXG5cdH07XHJcblx0LyoqXHJcblx0ICogdGhlIGpzdHJlZSBjbGFzcyBjb25zdHJ1Y3RvciwgdXNlZCBvbmx5IGludGVybmFsbHlcclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqIEBuYW1lICQuanN0cmVlLmNvcmUoaWQpXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGlkIHRoaXMgaW5zdGFuY2UncyBpbmRleFxyXG5cdCAqL1xyXG5cdCQuanN0cmVlLmNvcmUgPSBmdW5jdGlvbiAoaWQpIHtcclxuXHRcdHRoaXMuX2lkID0gaWQ7XHJcblx0XHR0aGlzLl9jbnQgPSAwO1xyXG5cdFx0dGhpcy5fZGF0YSA9IHtcclxuXHRcdFx0Y29yZSA6IHtcclxuXHRcdFx0XHR0aGVtZXMgOiB7XHJcblx0XHRcdFx0XHRuYW1lIDogZmFsc2UsXHJcblx0XHRcdFx0XHRkb3RzIDogZmFsc2UsXHJcblx0XHRcdFx0XHRpY29ucyA6IGZhbHNlXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRzZWxlY3RlZCA6IFtdLFxyXG5cdFx0XHRcdGxhc3RfZXJyb3IgOiB7fVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdH07XHJcblx0LyoqXHJcblx0ICogZ2V0IGEgcmVmZXJlbmNlIHRvIGFuIGV4aXN0aW5nIGluc3RhbmNlXHJcblx0ICpcclxuXHQgKiBfX0V4YW1wbGVzX19cclxuXHQgKlxyXG5cdCAqXHQvLyBwcm92aWRlZCBhIGNvbnRhaW5lciB3aXRoIGFuIElEIG9mIFwidHJlZVwiLCBhbmQgYSBuZXN0ZWQgbm9kZSB3aXRoIGFuIElEIG9mIFwiYnJhbmNoXCJcclxuXHQgKlx0Ly8gYWxsIG9mIHRoZXJlIHdpbGwgcmV0dXJuIHRoZSBzYW1lIGluc3RhbmNlXHJcblx0ICpcdCQuanN0cmVlLnJlZmVyZW5jZSgndHJlZScpO1xyXG5cdCAqXHQkLmpzdHJlZS5yZWZlcmVuY2UoJyN0cmVlJyk7XHJcblx0ICpcdCQuanN0cmVlLnJlZmVyZW5jZSgkKCcjdHJlZScpKTtcclxuXHQgKlx0JC5qc3RyZWUucmVmZXJlbmNlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlEKCd0cmVlJykpO1xyXG5cdCAqXHQkLmpzdHJlZS5yZWZlcmVuY2UoJ2JyYW5jaCcpO1xyXG5cdCAqXHQkLmpzdHJlZS5yZWZlcmVuY2UoJyNicmFuY2gnKTtcclxuXHQgKlx0JC5qc3RyZWUucmVmZXJlbmNlKCQoJyNicmFuY2gnKSk7XHJcblx0ICpcdCQuanN0cmVlLnJlZmVyZW5jZShkb2N1bWVudC5nZXRFbGVtZW50QnlJRCgnYnJhbmNoJykpO1xyXG5cdCAqXHJcblx0ICogQG5hbWUgJC5qc3RyZWUucmVmZXJlbmNlKG5lZWRsZSlcclxuXHQgKiBAcGFyYW0ge0RPTUVsZW1lbnR8alF1ZXJ5fFN0cmluZ30gbmVlZGxlXHJcblx0ICogQHJldHVybiB7anNUcmVlfG51bGx9IHRoZSBpbnN0YW5jZSBvciBgbnVsbGAgaWYgbm90IGZvdW5kXHJcblx0ICovXHJcblx0JC5qc3RyZWUucmVmZXJlbmNlID0gZnVuY3Rpb24gKG5lZWRsZSkge1xyXG5cdFx0aWYobmVlZGxlICYmICEkKG5lZWRsZSkubGVuZ3RoKSB7XHJcblx0XHRcdGlmKG5lZWRsZS5pZCkge1xyXG5cdFx0XHRcdG5lZWRsZSA9IG5lZWRsZS5pZDtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgdG1wID0gbnVsbDtcclxuXHRcdFx0JCgnLmpzdHJlZScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdHZhciBpbnN0ID0gJCh0aGlzKS5kYXRhKCdqc3RyZWUnKTtcclxuXHRcdFx0XHRpZihpbnN0ICYmIGluc3QuX21vZGVsLmRhdGFbbmVlZGxlXSkge1xyXG5cdFx0XHRcdFx0dG1wID0gaW5zdDtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRyZXR1cm4gdG1wO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuICQobmVlZGxlKS5jbG9zZXN0KCcuanN0cmVlJykuZGF0YSgnanN0cmVlJyk7XHJcblx0fTtcclxuXHQvKipcclxuXHQgKiBDcmVhdGUgYW4gaW5zdGFuY2UsIGdldCBhbiBpbnN0YW5jZSBvciBpbnZva2UgYSBjb21tYW5kIG9uIGEgaW5zdGFuY2UuIFxyXG5cdCAqIFxyXG5cdCAqIElmIHRoZXJlIGlzIG5vIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBub2RlIGEgbmV3IG9uZSBpcyBjcmVhdGVkIGFuZCBgYXJnYCBpcyB1c2VkIHRvIGV4dGVuZCBgJC5qc3RyZWUuZGVmYXVsdHNgIGZvciB0aGlzIG5ldyBpbnN0YW5jZS4gVGhlcmUgd291bGQgYmUgbm8gcmV0dXJuIHZhbHVlIChjaGFpbmluZyBpcyBub3QgYnJva2VuKS5cclxuXHQgKiBcclxuXHQgKiBJZiB0aGVyZSBpcyBhbiBleGlzdGluZyBpbnN0YW5jZSBhbmQgYGFyZ2AgaXMgYSBzdHJpbmcgdGhlIGNvbW1hbmQgc3BlY2lmaWVkIGJ5IGBhcmdgIGlzIGV4ZWN1dGVkIG9uIHRoZSBpbnN0YW5jZSwgd2l0aCBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSBpdCB3aWxsIGJlIHJldHVybmVkIChjaGFpbmluZyBjb3VsZCBicmVhayBkZXBlbmRpbmcgb24gZnVuY3Rpb24pLlxyXG5cdCAqIFxyXG5cdCAqIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIGluc3RhbmNlIGFuZCBgYXJnYCBpcyBub3QgYSBzdHJpbmcgdGhlIGluc3RhbmNlIGl0c2VsZiBpcyByZXR1cm5lZCAoc2ltaWxhciB0byBgJC5qc3RyZWUucmVmZXJlbmNlYCkuXHJcblx0ICogXHJcblx0ICogSW4gYW55IG90aGVyIGNhc2UgLSBub3RoaW5nIGlzIHJldHVybmVkIGFuZCBjaGFpbmluZyBpcyBub3QgYnJva2VuLlxyXG5cdCAqXHJcblx0ICogX19FeGFtcGxlc19fXHJcblx0ICpcclxuXHQgKlx0JCgnI3RyZWUxJykuanN0cmVlKCk7IC8vIGNyZWF0ZXMgYW4gaW5zdGFuY2VcclxuXHQgKlx0JCgnI3RyZWUyJykuanN0cmVlKHsgcGx1Z2lucyA6IFtdIH0pOyAvLyBjcmVhdGUgYW4gaW5zdGFuY2Ugd2l0aCBzb21lIG9wdGlvbnNcclxuXHQgKlx0JCgnI3RyZWUxJykuanN0cmVlKCdvcGVuX25vZGUnLCAnI2JyYW5jaF8xJyk7IC8vIGNhbGwgYSBtZXRob2Qgb24gYW4gZXhpc3RpbmcgaW5zdGFuY2UsIHBhc3NpbmcgYWRkaXRpb25hbCBhcmd1bWVudHNcclxuXHQgKlx0JCgnI3RyZWUyJykuanN0cmVlKCk7IC8vIGdldCBhbiBleGlzdGluZyBpbnN0YW5jZSAob3IgY3JlYXRlIGFuIGluc3RhbmNlKVxyXG5cdCAqXHQkKCcjdHJlZTInKS5qc3RyZWUodHJ1ZSk7IC8vIGdldCBhbiBleGlzdGluZyBpbnN0YW5jZSAod2lsbCBub3QgY3JlYXRlIG5ldyBpbnN0YW5jZSlcclxuXHQgKlx0JCgnI2JyYW5jaF8xJykuanN0cmVlKCkuc2VsZWN0X25vZGUoJyNicmFuY2hfMScpOyAvLyBnZXQgYW4gaW5zdGFuY2UgKHVzaW5nIGEgbmVzdGVkIGVsZW1lbnQgYW5kIGNhbGwgYSBtZXRob2QpXHJcblx0ICpcclxuXHQgKiBAbmFtZSAkKCkuanN0cmVlKFthcmddKVxyXG5cdCAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gYXJnXHJcblx0ICogQHJldHVybiB7TWl4ZWR9XHJcblx0ICovXHJcblx0JC5mbi5qc3RyZWUgPSBmdW5jdGlvbiAoYXJnKSB7XHJcblx0XHQvLyBjaGVjayBmb3Igc3RyaW5nIGFyZ3VtZW50XHJcblx0XHR2YXIgaXNfbWV0aG9kXHQ9ICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyksXHJcblx0XHRcdGFyZ3NcdFx0PSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxyXG5cdFx0XHRyZXN1bHRcdFx0PSBudWxsO1xyXG5cdFx0dGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0Ly8gZ2V0IHRoZSBpbnN0YW5jZSAoaWYgdGhlcmUgaXMgb25lKSBhbmQgbWV0aG9kIChpZiBpdCBleGlzdHMpXHJcblx0XHRcdHZhciBpbnN0YW5jZSA9ICQuanN0cmVlLnJlZmVyZW5jZSh0aGlzKSxcclxuXHRcdFx0XHRtZXRob2QgPSBpc19tZXRob2QgJiYgaW5zdGFuY2UgPyBpbnN0YW5jZVthcmddIDogbnVsbDtcclxuXHRcdFx0Ly8gaWYgY2FsbGluZyBhIG1ldGhvZCwgYW5kIG1ldGhvZCBpcyBhdmFpbGFibGUgLSBleGVjdXRlIG9uIHRoZSBpbnN0YW5jZVxyXG5cdFx0XHRyZXN1bHQgPSBpc19tZXRob2QgJiYgbWV0aG9kID9cclxuXHRcdFx0XHRtZXRob2QuYXBwbHkoaW5zdGFuY2UsIGFyZ3MpIDpcclxuXHRcdFx0XHRudWxsO1xyXG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBubyBpbnN0YW5jZSBhbmQgbm8gbWV0aG9kIGlzIGJlaW5nIGNhbGxlZCAtIGNyZWF0ZSBvbmVcclxuXHRcdFx0aWYoIWluc3RhbmNlICYmICFpc19tZXRob2QgJiYgKGFyZyA9PT0gdW5kZWZpbmVkIHx8ICQuaXNQbGFpbk9iamVjdChhcmcpKSkge1xyXG5cdFx0XHRcdCQodGhpcykuZGF0YSgnanN0cmVlJywgbmV3ICQuanN0cmVlLmNyZWF0ZSh0aGlzLCBhcmcpKTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBhbiBpbnN0YW5jZSBhbmQgbm8gbWV0aG9kIGlzIGNhbGxlZCAtIHJldHVybiB0aGUgaW5zdGFuY2VcclxuXHRcdFx0aWYoaW5zdGFuY2UgJiYgIWlzX21ldGhvZCkge1xyXG5cdFx0XHRcdHJlc3VsdCA9IGluc3RhbmNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIGlmIHRoZXJlIHdhcyBhIG1ldGhvZCBjYWxsIHdoaWNoIHJldHVybmVkIGEgcmVzdWx0IC0gYnJlYWsgYW5kIHJldHVybiB0aGUgdmFsdWVcclxuXHRcdFx0aWYocmVzdWx0ICE9PSBudWxsICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdC8vIGlmIHRoZXJlIHdhcyBhIG1ldGhvZCBjYWxsIHdpdGggYSB2YWxpZCByZXR1cm4gdmFsdWUgLSByZXR1cm4gdGhhdCwgb3RoZXJ3aXNlIGNvbnRpbnVlIHRoZSBjaGFpblxyXG5cdFx0cmV0dXJuIHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdHJlc3VsdCA6IHRoaXM7XHJcblx0fTtcclxuXHQvKipcclxuXHQgKiB1c2VkIHRvIGZpbmQgZWxlbWVudHMgY29udGFpbmluZyBhbiBpbnN0YW5jZVxyXG5cdCAqXHJcblx0ICogX19FeGFtcGxlc19fXHJcblx0ICpcclxuXHQgKlx0JCgnZGl2OmpzdHJlZScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG5cdCAqXHRcdCQodGhpcykuanN0cmVlKCdkZXN0cm95Jyk7XHJcblx0ICpcdH0pO1xyXG5cdCAqXHJcblx0ICogQG5hbWUgJCgnOmpzdHJlZScpXHJcblx0ICogQHJldHVybiB7alF1ZXJ5fVxyXG5cdCAqL1xyXG5cdCQuZXhwclsnOiddLmpzdHJlZSA9ICQuZXhwci5jcmVhdGVQc2V1ZG8oZnVuY3Rpb24oc2VhcmNoKSB7XHJcblx0XHRyZXR1cm4gZnVuY3Rpb24oYSkge1xyXG5cdFx0XHRyZXR1cm4gJChhKS5oYXNDbGFzcygnanN0cmVlJykgJiZcclxuXHRcdFx0XHQkKGEpLmRhdGEoJ2pzdHJlZScpICE9PSB1bmRlZmluZWQ7XHJcblx0XHR9O1xyXG5cdH0pO1xyXG5cclxuXHQvKipcclxuXHQgKiBzdG9yZXMgYWxsIGRlZmF1bHRzIGZvciB0aGUgY29yZVxyXG5cdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNvcmVcclxuXHQgKi9cclxuXHQkLmpzdHJlZS5kZWZhdWx0cy5jb3JlID0ge1xyXG5cdFx0LyoqXHJcblx0XHQgKiBkYXRhIGNvbmZpZ3VyYXRpb25cclxuXHRcdCAqIFxyXG5cdFx0ICogSWYgbGVmdCBhcyBgZmFsc2VgIHRoZSBIVE1MIGluc2lkZSB0aGUganN0cmVlIGNvbnRhaW5lciBlbGVtZW50IGlzIHVzZWQgdG8gcG9wdWxhdGUgdGhlIHRyZWUgKHRoYXQgc2hvdWxkIGJlIGFuIHVub3JkZXJlZCBsaXN0IHdpdGggbGlzdCBpdGVtcykuXHJcblx0XHQgKlxyXG5cdFx0ICogWW91IGNhbiBhbHNvIHBhc3MgaW4gYSBIVE1MIHN0cmluZyBvciBhIEpTT04gYXJyYXkgaGVyZS5cclxuXHRcdCAqIFxyXG5cdFx0ICogSXQgaXMgcG9zc2libGUgdG8gcGFzcyBpbiBhIHN0YW5kYXJkIGpRdWVyeS1saWtlIEFKQVggY29uZmlnIGFuZCBqc3RyZWUgd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVybWluZSBpZiB0aGUgcmVzcG9uc2UgaXMgSlNPTiBvciBIVE1MIGFuZCB1c2UgdGhhdCB0byBwb3B1bGF0ZSB0aGUgdHJlZS4gXHJcblx0XHQgKiBJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgalF1ZXJ5IGFqYXggb3B0aW9ucyBoZXJlIHlvdSBjYW4gc3VwcHkgZnVuY3Rpb25zIGZvciBgZGF0YWAgYW5kIGB1cmxgLCB0aGUgZnVuY3Rpb25zIHdpbGwgYmUgcnVuIGluIHRoZSBjdXJyZW50IGluc3RhbmNlJ3Mgc2NvcGUgYW5kIGEgcGFyYW0gd2lsbCBiZSBwYXNzZWQgaW5kaWNhdGluZyB3aGljaCBub2RlIGlzIGJlaW5nIGxvYWRlZCwgdGhlIHJldHVybiB2YWx1ZSBvZiB0aG9zZSBmdW5jdGlvbnMgd2lsbCBiZSB1c2VkLlxyXG5cdFx0ICogXHJcblx0XHQgKiBUaGUgbGFzdCBvcHRpb24gaXMgdG8gc3BlY2lmeSBhIGZ1bmN0aW9uLCB0aGF0IGZ1bmN0aW9uIHdpbGwgcmVjZWl2ZSB0aGUgbm9kZSBiZWluZyBsb2FkZWQgYXMgYXJndW1lbnQgYW5kIGEgc2Vjb25kIHBhcmFtIHdoaWNoIGlzIGEgZnVuY3Rpb24gd2hpY2ggc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSByZXN1bHQuXHJcblx0XHQgKlxyXG5cdFx0ICogX19FeGFtcGxlc19fXHJcblx0XHQgKlxyXG5cdFx0ICpcdC8vIEFKQVhcclxuXHRcdCAqXHQkKCcjdHJlZScpLmpzdHJlZSh7XHJcblx0XHQgKlx0XHQnY29yZScgOiB7XHJcblx0XHQgKlx0XHRcdCdkYXRhJyA6IHtcclxuXHRcdCAqXHRcdFx0XHQndXJsJyA6ICcvZ2V0L2NoaWxkcmVuLycsXHJcblx0XHQgKlx0XHRcdFx0J2RhdGEnIDogZnVuY3Rpb24gKG5vZGUpIHtcclxuXHRcdCAqXHRcdFx0XHRcdHJldHVybiB7ICdpZCcgOiBub2RlLmlkIH07XHJcblx0XHQgKlx0XHRcdFx0fVxyXG5cdFx0ICpcdFx0XHR9XHJcblx0XHQgKlx0XHR9KTtcclxuXHRcdCAqXHJcblx0XHQgKlx0Ly8gZGlyZWN0IGRhdGFcclxuXHRcdCAqXHQkKCcjdHJlZScpLmpzdHJlZSh7XHJcblx0XHQgKlx0XHQnY29yZScgOiB7XHJcblx0XHQgKlx0XHRcdCdkYXRhJyA6IFtcclxuXHRcdCAqXHRcdFx0XHQnU2ltcGxlIHJvb3Qgbm9kZScsXHJcblx0XHQgKlx0XHRcdFx0e1xyXG5cdFx0ICpcdFx0XHRcdFx0J2lkJyA6ICdub2RlXzInLFxyXG5cdFx0ICpcdFx0XHRcdFx0J3RleHQnIDogJ1Jvb3Qgbm9kZSB3aXRoIG9wdGlvbnMnLFxyXG5cdFx0ICpcdFx0XHRcdFx0J3N0YXRlJyA6IHsgJ29wZW5lZCcgOiB0cnVlLCAnc2VsZWN0ZWQnIDogdHJ1ZSB9LFxyXG5cdFx0ICpcdFx0XHRcdFx0J2NoaWxkcmVuJyA6IFsgeyAndGV4dCcgOiAnQ2hpbGQgMScgfSwgJ0NoaWxkIDInXVxyXG5cdFx0ICpcdFx0XHRcdH1cclxuXHRcdCAqXHRcdFx0XVxyXG5cdFx0ICpcdFx0fSk7XHJcblx0XHQgKlx0XHJcblx0XHQgKlx0Ly8gZnVuY3Rpb25cclxuXHRcdCAqXHQkKCcjdHJlZScpLmpzdHJlZSh7XHJcblx0XHQgKlx0XHQnY29yZScgOiB7XHJcblx0XHQgKlx0XHRcdCdkYXRhJyA6IGZ1bmN0aW9uIChvYmosIGNhbGxiYWNrKSB7XHJcblx0XHQgKlx0XHRcdFx0Y2FsbGJhY2suY2FsbCh0aGlzLCBbJ1Jvb3QgMScsICdSb290IDInXSk7XHJcblx0XHQgKlx0XHRcdH1cclxuXHRcdCAqXHRcdH0pO1xyXG5cdFx0ICogXHJcblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5jb3JlLmRhdGFcclxuXHRcdCAqL1xyXG5cdFx0ZGF0YVx0XHRcdDogZmFsc2UsXHJcblx0XHQvKipcclxuXHRcdCAqIGNvbmZpZ3VyZSB0aGUgdmFyaW91cyBzdHJpbmdzIHVzZWQgdGhyb3VnaG91dCB0aGUgdHJlZVxyXG5cdFx0ICpcclxuXHRcdCAqIFlvdSBjYW4gdXNlIGFuIG9iamVjdCB3aGVyZSB0aGUga2V5IGlzIHRoZSBzdHJpbmcgeW91IG5lZWQgdG8gcmVwbGFjZSBhbmQgdGhlIHZhbHVlIGlzIHlvdXIgcmVwbGFjZW1lbnQuXHJcblx0XHQgKiBBbm90aGVyIG9wdGlvbiBpcyB0byBzcGVjaWZ5IGEgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2l0aCBhbiBhcmd1bWVudCBvZiB0aGUgbmVlZGVkIHN0cmluZyBhbmQgc2hvdWxkIHJldHVybiB0aGUgcmVwbGFjZW1lbnQuXHJcblx0XHQgKiBJZiBsZWZ0IGFzIGBmYWxzZWAgbm8gcmVwbGFjZW1lbnQgaXMgbWFkZS5cclxuXHRcdCAqXHJcblx0XHQgKiBfX0V4YW1wbGVzX19cclxuXHRcdCAqXHJcblx0XHQgKlx0JCgnI3RyZWUnKS5qc3RyZWUoe1xyXG5cdFx0ICpcdFx0J2NvcmUnIDoge1xyXG5cdFx0ICpcdFx0XHQnc3RyaW5ncycgOiB7XHJcblx0XHQgKlx0XHRcdFx0J0xvYWRpbmcuLi4nIDogJ1BsZWFzZSB3YWl0IC4uLidcclxuXHRcdCAqXHRcdFx0fVxyXG5cdFx0ICpcdFx0fVxyXG5cdFx0ICpcdH0pO1xyXG5cdFx0ICpcclxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNvcmUuc3RyaW5nc1xyXG5cdFx0ICovXHJcblx0XHRzdHJpbmdzXHRcdFx0OiBmYWxzZSxcclxuXHRcdC8qKlxyXG5cdFx0ICogZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMgd2hlbiBhIHVzZXIgdHJpZXMgdG8gbW9kaWZ5IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHRyZWVcclxuXHRcdCAqIElmIGxlZnQgYXMgYGZhbHNlYCBhbGwgb3BlcmF0aW9ucyBsaWtlIGNyZWF0ZSwgcmVuYW1lLCBkZWxldGUsIG1vdmUgb3IgY29weSBhcmUgcHJldmVudGVkLlxyXG5cdFx0ICogWW91IGNhbiBzZXQgdGhpcyB0byBgdHJ1ZWAgdG8gYWxsb3cgYWxsIGludGVyYWN0aW9ucyBvciB1c2UgYSBmdW5jdGlvbiB0byBoYXZlIGJldHRlciBjb250cm9sLlxyXG5cdFx0ICpcclxuXHRcdCAqIF9fRXhhbXBsZXNfX1xyXG5cdFx0ICpcclxuXHRcdCAqXHQkKCcjdHJlZScpLmpzdHJlZSh7XHJcblx0XHQgKlx0XHQnY29yZScgOiB7XHJcblx0XHQgKlx0XHRcdCdjaGVja19jYWxsYmFjaycgOiBmdW5jdGlvbiAob3BlcmF0aW9uLCBub2RlLCBub2RlX3BhcmVudCwgbm9kZV9wb3NpdGlvbikge1xyXG5cdFx0ICpcdFx0XHRcdC8vIG9wZXJhdGlvbiBjYW4gYmUgJ2NyZWF0ZV9ub2RlJywgJ3JlbmFtZV9ub2RlJywgJ2RlbGV0ZV9ub2RlJywgJ21vdmVfbm9kZScgb3IgJ2NvcHlfbm9kZSdcclxuXHRcdCAqXHRcdFx0XHQvLyBpbiBjYXNlIG9mICdyZW5hbWVfbm9kZScgbm9kZV9wb3NpdGlvbiBpcyBmaWxsZWQgd2l0aCB0aGUgbmV3IG5vZGUgbmFtZVxyXG5cdFx0ICpcdFx0XHRcdHJldHVybiBvcGVyYXRpb24gPT09ICdyZW5hbWVfbm9kZScgPyB0cnVlIDogZmFsc2U7XHJcblx0XHQgKlx0XHRcdH1cclxuXHRcdCAqXHRcdH1cclxuXHRcdCAqXHR9KTtcclxuXHRcdCAqIFxyXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY29yZS5jaGVja19jYWxsYmFja1xyXG5cdFx0ICovXHJcblx0XHRjaGVja19jYWxsYmFja1x0OiBmYWxzZSxcclxuXHRcdC8qKlxyXG5cdFx0ICogYSBjYWxsYmFjayBjYWxsZWQgd2l0aCBhIHNpbmdsZSBvYmplY3QgcGFyYW1ldGVyIGluIHRoZSBpbnN0YW5jZSdzIHNjb3BlIHdoZW4gc29tZXRoaW5nIGdvZXMgd3JvbmcgKG9wZXJhdGlvbiBwcmV2ZW50ZWQsIGFqYXggZmFpbGVkLCBldGMpXHJcblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5jb3JlLmVycm9yXHJcblx0XHQgKi9cclxuXHRcdGVycm9yXHRcdFx0OiAkLm5vb3AsXHJcblx0XHQvKipcclxuXHRcdCAqIHRoZSBvcGVuIC8gY2xvc2UgYW5pbWF0aW9uIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyAtIHNldCB0aGlzIHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGUgYW5pbWF0aW9uIChkZWZhdWx0IGlzIGAyMDBgKVxyXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY29yZS5hbmltYXRpb25cclxuXHRcdCAqL1xyXG5cdFx0YW5pbWF0aW9uXHRcdDogMjAwLFxyXG5cdFx0LyoqXHJcblx0XHQgKiBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBtdWx0aXBsZSBub2RlcyBjYW4gYmUgc2VsZWN0ZWRcclxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNvcmUubXVsdGlwbGVcclxuXHRcdCAqL1xyXG5cdFx0bXVsdGlwbGVcdFx0OiB0cnVlLFxyXG5cdFx0LyoqXHJcblx0XHQgKiB0aGVtZSBjb25maWd1cmF0aW9uIG9iamVjdFxyXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY29yZS50aGVtZXNcclxuXHRcdCAqL1xyXG5cdFx0dGhlbWVzXHRcdFx0OiB7XHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiB0aGUgbmFtZSBvZiB0aGUgdGhlbWUgdG8gdXNlIChpZiBsZWZ0IGFzIGBmYWxzZWAgdGhlIGRlZmF1bHQgdGhlbWUgaXMgdXNlZClcclxuXHRcdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY29yZS50aGVtZXMubmFtZVxyXG5cdFx0XHQgKi9cclxuXHRcdFx0bmFtZVx0XHRcdDogZmFsc2UsXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiB0aGUgVVJMIG9mIHRoZSB0aGVtZSdzIENTUyBmaWxlLCBsZWF2ZSB0aGlzIGFzIGBmYWxzZWAgaWYgeW91IGhhdmUgbWFudWFsbHkgaW5jbHVkZWQgdGhlIHRoZW1lIENTUyAocmVjb21tZW5kZWQpLiBZb3UgY2FuIHNldCB0aGlzIHRvIGB0cnVlYCB0b28gd2hpY2ggd2lsbCB0cnkgdG8gYXV0b2xvYWQgdGhlIHRoZW1lLlxyXG5cdFx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5jb3JlLnRoZW1lcy51cmxcclxuXHRcdFx0ICovXHJcblx0XHRcdHVybFx0XHRcdFx0OiBmYWxzZSxcclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIHRoZSBsb2NhdGlvbiBvZiBhbGwganN0cmVlIHRoZW1lcyAtIG9ubHkgdXNlZCBpZiBgdXJsYCBpcyBzZXQgdG8gYHRydWVgXHJcblx0XHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNvcmUudGhlbWVzLmRpclxyXG5cdFx0XHQgKi9cclxuXHRcdFx0ZGlyXHRcdFx0XHQ6IGZhbHNlLFxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogYSBib29sZWFuIGluZGljYXRpbmcgaWYgY29ubmVjdGluZyBkb3RzIGFyZSBzaG93blxyXG5cdFx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5jb3JlLnRoZW1lcy5kb3RzXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRkb3RzXHRcdFx0OiB0cnVlLFxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogYSBib29sZWFuIGluZGljYXRpbmcgaWYgbm9kZSBpY29ucyBhcmUgc2hvd25cclxuXHRcdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY29yZS50aGVtZXMuaWNvbnNcclxuXHRcdFx0ICovXHJcblx0XHRcdGljb25zXHRcdFx0OiB0cnVlLFxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHRyZWUgYmFja2dyb3VuZCBpcyBzdHJpcGVkXHJcblx0XHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNvcmUudGhlbWVzLnN0cmlwZXNcclxuXHRcdFx0ICovXHJcblx0XHRcdHN0cmlwZXNcdFx0XHQ6IGZhbHNlLFxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogYSBzdHJpbmcgKG9yIGJvb2xlYW4gYGZhbHNlYCkgc3BlY2lmeWluZyB0aGUgdGhlbWUgdmFyaWFudCB0byB1c2UgKGlmIHRoZSB0aGVtZSBzdXBwb3J0cyB2YXJpYW50cylcclxuXHRcdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY29yZS50aGVtZXMudmFyaWFudFxyXG5cdFx0XHQgKi9cclxuXHRcdFx0dmFyaWFudFx0XHRcdDogZmFsc2UsXHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiBhIGJvb2xlYW4gc3BlY2lmeWluZyBpZiBhIHJlcG9uc2l2ZSB2ZXJzaW9uIG9mIHRoZSB0aGVtZSBzaG91bGQga2ljayBpbiBvbiBzbWFsbGVyIHNjcmVlbnMgKGlmIHRoZSB0aGVtZSBzdXBwb3J0cyBpdCkuIERlZmF1bHRzIHRvIGB0cnVlYC5cclxuXHRcdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY29yZS50aGVtZXMucmVzcG9uc2l2ZVxyXG5cdFx0XHQgKi9cclxuXHRcdFx0cmVzcG9uc2l2ZVx0XHQ6IHRydWVcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGlmIGxlZnQgYXMgYHRydWVgIGFsbCBwYXJlbnRzIG9mIGFsbCBzZWxlY3RlZCBub2RlcyB3aWxsIGJlIG9wZW5lZCBvbmNlIHRoZSB0cmVlIGxvYWRzIChzbyB0aGF0IGFsbCBzZWxlY3RlZCBub2RlcyBhcmUgdmlzaWJsZSB0byB0aGUgdXNlcilcclxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNvcmUuZXhwYW5kX3NlbGVjdGVkX29ubG9hZFxyXG5cdFx0ICovXHJcblx0XHRleHBhbmRfc2VsZWN0ZWRfb25sb2FkIDogdHJ1ZVxyXG5cdH07XHJcblx0JC5qc3RyZWUuY29yZS5wcm90b3R5cGUgPSB7XHJcblx0XHQvKipcclxuXHRcdCAqIHVzZWQgdG8gZGVjb3JhdGUgYW4gaW5zdGFuY2Ugd2l0aCBhIHBsdWdpbi4gVXNlZCBpbnRlcm5hbGx5LlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqIEBuYW1lIHBsdWdpbihkZWNvIFssIG9wdHNdKVxyXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSBkZWNvIHRoZSBwbHVnaW4gdG8gZGVjb3JhdGUgd2l0aFxyXG5cdFx0ICogQHBhcmFtICB7T2JqZWN0fSBvcHRzIG9wdGlvbnMgZm9yIHRoZSBwbHVnaW5cclxuXHRcdCAqIEByZXR1cm4ge2pzVHJlZX1cclxuXHRcdCAqL1xyXG5cdFx0cGx1Z2luIDogZnVuY3Rpb24gKGRlY28sIG9wdHMpIHtcclxuXHRcdFx0dmFyIENoaWxkID0gJC5qc3RyZWUucGx1Z2luc1tkZWNvXTtcclxuXHRcdFx0aWYoQ2hpbGQpIHtcclxuXHRcdFx0XHR0aGlzLl9kYXRhW2RlY29dID0ge307XHJcblx0XHRcdFx0Q2hpbGQucHJvdG90eXBlID0gdGhpcztcclxuXHRcdFx0XHRyZXR1cm4gbmV3IENoaWxkKG9wdHMsIHRoaXMpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogdXNlZCB0byBkZWNvcmF0ZSBhbiBpbnN0YW5jZSB3aXRoIGEgcGx1Z2luLiBVc2VkIGludGVybmFsbHkuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICogQG5hbWUgaW5pdChlbCwgb3B0b25zKVxyXG5cdFx0ICogQHBhcmFtIHtET01FbGVtZW50fGpRdWVyeXxTdHJpbmd9IGVsIHRoZSBlbGVtZW50IHdlIGFyZSB0cmFuc2Zvcm1pbmdcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIG9wdGlvbnMgZm9yIHRoaXMgaW5zdGFuY2VcclxuXHRcdCAqIEB0cmlnZ2VyIGluaXQuanN0cmVlLCBsb2FkaW5nLmpzdHJlZSwgbG9hZGVkLmpzdHJlZSwgcmVhZHkuanN0cmVlLCBjaGFuZ2VkLmpzdHJlZVxyXG5cdFx0ICovXHJcblx0XHRpbml0IDogZnVuY3Rpb24gKGVsLCBvcHRpb25zKSB7XHJcblx0XHRcdHRoaXMuX21vZGVsID0ge1xyXG5cdFx0XHRcdGRhdGEgOiB7XHJcblx0XHRcdFx0XHQnIycgOiB7XHJcblx0XHRcdFx0XHRcdGlkIDogJyMnLFxyXG5cdFx0XHRcdFx0XHRwYXJlbnQgOiBudWxsLFxyXG5cdFx0XHRcdFx0XHRwYXJlbnRzIDogW10sXHJcblx0XHRcdFx0XHRcdGNoaWxkcmVuIDogW10sXHJcblx0XHRcdFx0XHRcdGNoaWxkcmVuX2QgOiBbXSxcclxuXHRcdFx0XHRcdFx0c3RhdGUgOiB7IGxvYWRlZCA6IGZhbHNlIH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGNoYW5nZWQgOiBbXSxcclxuXHRcdFx0XHRmb3JjZV9mdWxsX3JlZHJhdyA6IGZhbHNlLFxyXG5cdFx0XHRcdHJlZHJhd190aW1lb3V0IDogZmFsc2UsXHJcblx0XHRcdFx0ZGVmYXVsdF9zdGF0ZSA6IHtcclxuXHRcdFx0XHRcdGxvYWRlZCA6IHRydWUsXHJcblx0XHRcdFx0XHRvcGVuZWQgOiBmYWxzZSxcclxuXHRcdFx0XHRcdHNlbGVjdGVkIDogZmFsc2UsXHJcblx0XHRcdFx0XHRkaXNhYmxlZCA6IGZhbHNlXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0dGhpcy5lbGVtZW50ID0gJChlbCkuYWRkQ2xhc3MoJ2pzdHJlZSBqc3RyZWUtJyArIHRoaXMuX2lkKTtcclxuXHRcdFx0dGhpcy5zZXR0aW5ncyA9IG9wdGlvbnM7XHJcblx0XHRcdHRoaXMuZWxlbWVudC5iaW5kKFwiZGVzdHJveWVkXCIsICQucHJveHkodGhpcy50ZWFyZG93biwgdGhpcykpO1xyXG5cclxuXHRcdFx0dGhpcy5fZGF0YS5jb3JlLnJlYWR5ID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuX2RhdGEuY29yZS5sb2FkZWQgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5fZGF0YS5jb3JlLnJ0bCA9ICh0aGlzLmVsZW1lbnQuY3NzKFwiZGlyZWN0aW9uXCIpID09PSBcInJ0bFwiKTtcclxuXHRcdFx0dGhpcy5lbGVtZW50W3RoaXMuX2RhdGEuY29yZS5ydGwgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10oXCJqc3RyZWUtcnRsXCIpO1xyXG5cdFx0XHR0aGlzLmVsZW1lbnQuYXR0cigncm9sZScsJ3RyZWUnKTtcclxuXHJcblx0XHRcdHRoaXMuYmluZCgpO1xyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogdHJpZ2dlcmVkIGFmdGVyIGFsbCBldmVudHMgYXJlIGJvdW5kXHJcblx0XHRcdCAqIEBldmVudFxyXG5cdFx0XHQgKiBAbmFtZSBpbml0LmpzdHJlZVxyXG5cdFx0XHQgKi9cclxuXHRcdFx0dGhpcy50cmlnZ2VyKFwiaW5pdFwiKTtcclxuXHJcblx0XHRcdHRoaXMuX2RhdGEuY29yZS5vcmlnaW5hbF9jb250YWluZXJfaHRtbCA9IHRoaXMuZWxlbWVudC5maW5kKFwiID4gdWwgPiBsaVwiKS5jbG9uZSh0cnVlKTtcclxuXHRcdFx0dGhpcy5fZGF0YS5jb3JlLm9yaWdpbmFsX2NvbnRhaW5lcl9odG1sXHJcblx0XHRcdFx0LmZpbmQoXCJsaVwiKS5hZGRCYWNrKClcclxuXHRcdFx0XHQuY29udGVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5ub2RlVHlwZSA9PT0gMyAmJiAoIXRoaXMubm9kZVZhbHVlIHx8IC9eXFxzKyQvLnRlc3QodGhpcy5ub2RlVmFsdWUpKTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC5yZW1vdmUoKTtcclxuXHRcdFx0dGhpcy5lbGVtZW50Lmh0bWwoXCI8XCIrXCJ1bCBjbGFzcz0nanN0cmVlLWNvbnRhaW5lci11bCc+PFwiK1wibGkgY2xhc3M9J2pzdHJlZS1pbml0aWFsLW5vZGUganN0cmVlLWxvYWRpbmcganN0cmVlLWxlYWYganN0cmVlLWxhc3QnPjxpIGNsYXNzPSdqc3RyZWUtaWNvbiBqc3RyZWUtb2NsJz48L2k+PFwiK1wiYSBjbGFzcz0nanN0cmVlLWFuY2hvcicgaHJlZj0nIyc+PGkgY2xhc3M9J2pzdHJlZS1pY29uIGpzdHJlZS10aGVtZWljb24taGlkZGVuJz48L2k+XCIgKyB0aGlzLmdldF9zdHJpbmcoXCJMb2FkaW5nIC4uLlwiKSArIFwiPC9hPjwvbGk+PC91bD5cIik7XHJcblx0XHRcdHRoaXMuX2RhdGEuY29yZS5saV9oZWlnaHQgPSB0aGlzLmdldF9jb250YWluZXJfdWwoKS5jaGlsZHJlbihcImxpOmVxKDApXCIpLmhlaWdodCgpIHx8IDE4O1xyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogdHJpZ2dlcmVkIGFmdGVyIHRoZSBsb2FkaW5nIHRleHQgaXMgc2hvd24gYW5kIGJlZm9yZSBsb2FkaW5nIHN0YXJ0c1xyXG5cdFx0XHQgKiBAZXZlbnRcclxuXHRcdFx0ICogQG5hbWUgbG9hZGluZy5qc3RyZWVcclxuXHRcdFx0ICovXHJcblx0XHRcdHRoaXMudHJpZ2dlcihcImxvYWRpbmdcIik7XHJcblx0XHRcdHRoaXMubG9hZF9ub2RlKCcjJyk7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBkZXN0cm95IGFuIGluc3RhbmNlXHJcblx0XHQgKiBAbmFtZSBkZXN0cm95KClcclxuXHRcdCAqL1xyXG5cdFx0ZGVzdHJveSA6IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0dGhpcy5lbGVtZW50LnVuYmluZChcImRlc3Ryb3llZFwiLCB0aGlzLnRlYXJkb3duKTtcclxuXHRcdFx0dGhpcy50ZWFyZG93bigpO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogcGFydCBvZiB0aGUgZGVzdHJveWluZyBvZiBhbiBpbnN0YW5jZS4gVXNlZCBpbnRlcm5hbGx5LlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqIEBuYW1lIHRlYXJkb3duKClcclxuXHRcdCAqL1xyXG5cdFx0dGVhcmRvd24gOiBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHRoaXMudW5iaW5kKCk7XHJcblx0XHRcdHRoaXMuZWxlbWVudFxyXG5cdFx0XHRcdC5yZW1vdmVDbGFzcygnanN0cmVlJylcclxuXHRcdFx0XHQucmVtb3ZlRGF0YSgnanN0cmVlJylcclxuXHRcdFx0XHQuZmluZChcIltjbGFzc149J2pzdHJlZSddXCIpXHJcblx0XHRcdFx0XHQuYWRkQmFjaygpXHJcblx0XHRcdFx0XHQuYXR0cihcImNsYXNzXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuY2xhc3NOYW1lLnJlcGxhY2UoL2pzdHJlZVteIF0qfCQvaWcsJycpOyB9KTtcclxuXHRcdFx0dGhpcy5lbGVtZW50ID0gbnVsbDtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGJpbmQgYWxsIGV2ZW50cy4gVXNlZCBpbnRlcm5hbGx5LlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqIEBuYW1lIGJpbmQoKVxyXG5cdFx0ICovXHJcblx0XHRiaW5kIDogZnVuY3Rpb24gKCkge1xyXG5cdFx0XHR0aGlzLmVsZW1lbnRcclxuXHRcdFx0XHQub24oXCJkYmxjbGljay5qc3RyZWVcIiwgZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0XHRpZihkb2N1bWVudC5zZWxlY3Rpb24gJiYgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KSB7XHJcblx0XHRcdFx0XHRcdFx0ZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0aWYod2luZG93LmdldFNlbGVjdGlvbikge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuXHRcdFx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2VsLmNvbGxhcHNlKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIChpZ25vcmUpIHsgfVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHQub24oXCJjbGljay5qc3RyZWVcIiwgXCIuanN0cmVlLW9jbFwiLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMudG9nZ2xlX25vZGUoZS50YXJnZXQpO1xyXG5cdFx0XHRcdFx0fSwgdGhpcykpXHJcblx0XHRcdFx0Lm9uKFwiY2xpY2suanN0cmVlXCIsIFwiLmpzdHJlZS1hbmNob3JcIiwgJC5wcm94eShmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHRcdCQoZS5jdXJyZW50VGFyZ2V0KS5mb2N1cygpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmFjdGl2YXRlX25vZGUoZS5jdXJyZW50VGFyZ2V0LCBlKTtcclxuXHRcdFx0XHRcdH0sIHRoaXMpKVxyXG5cdFx0XHRcdC5vbigna2V5ZG93bi5qc3RyZWUnLCAnLmpzdHJlZS1hbmNob3InLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdFx0XHRcdHZhciBvID0gbnVsbDtcclxuXHRcdFx0XHRcdFx0c3dpdGNoKGUud2hpY2gpIHtcclxuXHRcdFx0XHRcdFx0XHRjYXNlIDEzOlxyXG5cdFx0XHRcdFx0XHRcdGNhc2UgMzI6XHJcblx0XHRcdFx0XHRcdFx0XHRlLnR5cGUgPSBcImNsaWNrXCI7XHJcblx0XHRcdFx0XHRcdFx0XHQkKGUuY3VycmVudFRhcmdldCkudHJpZ2dlcihlKTtcclxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdGNhc2UgMzc6XHJcblx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZih0aGlzLmlzX29wZW4oZS5jdXJyZW50VGFyZ2V0KSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmNsb3NlX25vZGUoZS5jdXJyZW50VGFyZ2V0KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRvID0gdGhpcy5nZXRfcHJldl9kb20oZS5jdXJyZW50VGFyZ2V0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYobyAmJiBvLmxlbmd0aCkgeyBvLmNoaWxkcmVuKCcuanN0cmVlLWFuY2hvcicpLmZvY3VzKCk7IH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdGNhc2UgMzg6XHJcblx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHRcdFx0XHRvID0gdGhpcy5nZXRfcHJldl9kb20oZS5jdXJyZW50VGFyZ2V0KTtcclxuXHRcdFx0XHRcdFx0XHRcdGlmKG8gJiYgby5sZW5ndGgpIHsgby5jaGlsZHJlbignLmpzdHJlZS1hbmNob3InKS5mb2N1cygpOyB9XHJcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRjYXNlIDM5OlxyXG5cdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYodGhpcy5pc19jbG9zZWQoZS5jdXJyZW50VGFyZ2V0KSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9wZW5fbm9kZShlLmN1cnJlbnRUYXJnZXQsIGZ1bmN0aW9uIChvKSB7IHRoaXMuZ2V0X25vZGUobywgdHJ1ZSkuY2hpbGRyZW4oJy5qc3RyZWUtYW5jaG9yJykuZm9jdXMoKTsgfSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0byA9IHRoaXMuZ2V0X25leHRfZG9tKGUuY3VycmVudFRhcmdldCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKG8gJiYgby5sZW5ndGgpIHsgby5jaGlsZHJlbignLmpzdHJlZS1hbmNob3InKS5mb2N1cygpOyB9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRjYXNlIDQwOlxyXG5cdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0byA9IHRoaXMuZ2V0X25leHRfZG9tKGUuY3VycmVudFRhcmdldCk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZihvICYmIG8ubGVuZ3RoKSB7IG8uY2hpbGRyZW4oJy5qc3RyZWUtYW5jaG9yJykuZm9jdXMoKTsgfVxyXG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0Ly8gZGVsZXRlXHJcblx0XHRcdFx0XHRcdFx0Y2FzZSA0NjpcclxuXHRcdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdFx0XHRcdG8gPSB0aGlzLmdldF9ub2RlKGUuY3VycmVudFRhcmdldCk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZihvICYmIG8uaWQgJiYgby5pZCAhPT0gJyMnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdG8gPSB0aGlzLmlzX3NlbGVjdGVkKG8pID8gdGhpcy5nZXRfc2VsZWN0ZWQoKSA6IG87XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHRoaXMuZGVsZXRlX25vZGUobyk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHQvLyBmMlxyXG5cdFx0XHRcdFx0XHRcdGNhc2UgMTEzOlxyXG5cdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0byA9IHRoaXMuZ2V0X25vZGUoZS5jdXJyZW50VGFyZ2V0KTtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYobyAmJiBvLmlkICYmIG8uaWQgIT09ICcjJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyB0aGlzLmVkaXQobyk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHQqL1xyXG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKGUud2hpY2gpO1xyXG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sIHRoaXMpKVxyXG5cdFx0XHRcdC5vbihcImxvYWRfbm9kZS5qc3RyZWVcIiwgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG5cdFx0XHRcdFx0XHRpZihkYXRhLnN0YXR1cykge1xyXG5cdFx0XHRcdFx0XHRcdGlmKGRhdGEubm9kZS5pZCA9PT0gJyMnICYmICF0aGlzLl9kYXRhLmNvcmUubG9hZGVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUubG9hZGVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdC8qKlxyXG5cdFx0XHRcdFx0XHRcdFx0ICogdHJpZ2dlcmVkIGFmdGVyIHRoZSByb290IG5vZGUgaXMgbG9hZGVkIGZvciB0aGUgZmlyc3QgdGltZVxyXG5cdFx0XHRcdFx0XHRcdFx0ICogQGV2ZW50XHJcblx0XHRcdFx0XHRcdFx0XHQgKiBAbmFtZSBsb2FkZWQuanN0cmVlXHJcblx0XHRcdFx0XHRcdFx0XHQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMudHJpZ2dlcihcImxvYWRlZFwiKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYoIXRoaXMuX2RhdGEuY29yZS5yZWFkeSAmJiAhdGhpcy5nZXRfY29udGFpbmVyX3VsKCkuZmluZCgnLmpzdHJlZS1sb2FkaW5nOmVxKDApJykubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUucmVhZHkgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYodGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZih0aGlzLnNldHRpbmdzLmNvcmUuZXhwYW5kX3NlbGVjdGVkX29ubG9hZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB0bXAgPSBbXSwgaSwgajtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0bXAgPSB0bXAuY29uY2F0KHRoaXMuX21vZGVsLmRhdGFbdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkW2ldXS5wYXJlbnRzKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dG1wID0gJC52YWthdGEuYXJyYXlfdW5pcXVlKHRtcCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gdG1wLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5vcGVuX25vZGUodG1wW2ldLCBmYWxzZSwgMCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudHJpZ2dlcignY2hhbmdlZCcsIHsgJ2FjdGlvbicgOiAncmVhZHknLCAnc2VsZWN0ZWQnIDogdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkIH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0LyoqXHJcblx0XHRcdFx0XHRcdFx0XHQgKiB0cmlnZ2VyZWQgYWZ0ZXIgYWxsIG5vZGVzIGFyZSBmaW5pc2hlZCBsb2FkaW5nXHJcblx0XHRcdFx0XHRcdFx0XHQgKiBAZXZlbnRcclxuXHRcdFx0XHRcdFx0XHRcdCAqIEBuYW1lIHJlYWR5LmpzdHJlZVxyXG5cdFx0XHRcdFx0XHRcdFx0ICovXHJcblx0XHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KCQucHJveHkoZnVuY3Rpb24gKCkgeyB0aGlzLnRyaWdnZXIoXCJyZWFkeVwiKTsgfSwgdGhpcyksIDApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSwgdGhpcykpXHJcblx0XHRcdFx0Ly8gVEhFTUUgUkVMQVRFRFxyXG5cdFx0XHRcdC5vbihcImluaXQuanN0cmVlXCIsICQucHJveHkoZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0XHR2YXIgcyA9IHRoaXMuc2V0dGluZ3MuY29yZS50aGVtZXM7XHJcblx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS50aGVtZXMuZG90c1x0XHRcdD0gcy5kb3RzO1xyXG5cdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUudGhlbWVzLnN0cmlwZXNcdFx0PSBzLnN0cmlwZXM7XHJcblx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS50aGVtZXMuaWNvbnNcdFx0PSBzLmljb25zO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldF90aGVtZShzLm5hbWUgfHwgXCJkZWZhdWx0XCIsIHMudXJsKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRfdGhlbWVfdmFyaWFudChzLnZhcmlhbnQpO1xyXG5cdFx0XHRcdFx0fSwgdGhpcykpXHJcblx0XHRcdFx0Lm9uKFwibG9hZGluZy5qc3RyZWVcIiwgJC5wcm94eShmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRcdHRoaXNbIHRoaXMuX2RhdGEuY29yZS50aGVtZXMuZG90cyA/IFwic2hvd19kb3RzXCIgOiBcImhpZGVfZG90c1wiIF0oKTtcclxuXHRcdFx0XHRcdFx0dGhpc1sgdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5pY29ucyA/IFwic2hvd19pY29uc1wiIDogXCJoaWRlX2ljb25zXCIgXSgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzWyB0aGlzLl9kYXRhLmNvcmUudGhlbWVzLnN0cmlwZXMgPyBcInNob3dfc3RyaXBlc1wiIDogXCJoaWRlX3N0cmlwZXNcIiBdKCk7XHJcblx0XHRcdFx0XHR9LCB0aGlzKSlcclxuXHRcdFx0XHQub24oJ2ZvY3VzLmpzdHJlZScsICcuanN0cmVlLWFuY2hvcicsICQucHJveHkoZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5lbGVtZW50LmZpbmQoJy5qc3RyZWUtaG92ZXJlZCcpLm5vdChlLmN1cnJlbnRUYXJnZXQpLm1vdXNlbGVhdmUoKTtcclxuXHRcdFx0XHRcdFx0JChlLmN1cnJlbnRUYXJnZXQpLm1vdXNlZW50ZXIoKTtcclxuXHRcdFx0XHRcdH0sIHRoaXMpKVxyXG5cdFx0XHRcdC5vbignbW91c2VlbnRlci5qc3RyZWUnLCAnLmpzdHJlZS1hbmNob3InLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuaG92ZXJfbm9kZShlLmN1cnJlbnRUYXJnZXQpO1xyXG5cdFx0XHRcdFx0fSwgdGhpcykpXHJcblx0XHRcdFx0Lm9uKCdtb3VzZWxlYXZlLmpzdHJlZScsICcuanN0cmVlLWFuY2hvcicsICQucHJveHkoZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5kZWhvdmVyX25vZGUoZS5jdXJyZW50VGFyZ2V0KTtcclxuXHRcdFx0XHRcdH0sIHRoaXMpKTtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIHBhcnQgb2YgdGhlIGRlc3Ryb3lpbmcgb2YgYW4gaW5zdGFuY2UuIFVzZWQgaW50ZXJuYWxseS5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKiBAbmFtZSB1bmJpbmQoKVxyXG5cdFx0ICovXHJcblx0XHR1bmJpbmQgOiBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHRoaXMuZWxlbWVudC5vZmYoJy5qc3RyZWUnKTtcclxuXHRcdFx0JChkb2N1bWVudCkub2ZmKCcuanN0cmVlLScgKyB0aGlzLl9pZCk7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiB0cmlnZ2VyIGFuIGV2ZW50LiBVc2VkIGludGVybmFsbHkuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICogQG5hbWUgdHJpZ2dlcihldiBbLCBkYXRhXSlcclxuXHRcdCAqIEBwYXJhbSAge1N0cmluZ30gZXYgdGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIHRyaWdnZXJcclxuXHRcdCAqIEBwYXJhbSAge09iamVjdH0gZGF0YSBhZGRpdGlvbmFsIGRhdGEgdG8gcGFzcyB3aXRoIHRoZSBldmVudFxyXG5cdFx0ICovXHJcblx0XHR0cmlnZ2VyIDogZnVuY3Rpb24gKGV2LCBkYXRhKSB7XHJcblx0XHRcdGlmKCFkYXRhKSB7XHJcblx0XHRcdFx0ZGF0YSA9IHt9O1xyXG5cdFx0XHR9XHJcblx0XHRcdGRhdGEuaW5zdGFuY2UgPSB0aGlzO1xyXG5cdFx0XHR0aGlzLmVsZW1lbnQudHJpZ2dlckhhbmRsZXIoZXYucmVwbGFjZSgnLmpzdHJlZScsJycpICsgJy5qc3RyZWUnLCBkYXRhKTtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIHJldHVybnMgdGhlIGpRdWVyeSBleHRlbmRlZCBpbnN0YW5jZSBjb250YWluZXJcclxuXHRcdCAqIEBuYW1lIGdldF9jb250YWluZXIoKVxyXG5cdFx0ICogQHJldHVybiB7alF1ZXJ5fVxyXG5cdFx0ICovXHJcblx0XHRnZXRfY29udGFpbmVyIDogZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5lbGVtZW50O1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogcmV0dXJucyB0aGUgalF1ZXJ5IGV4dGVuZGVkIG1haW4gVUwgbm9kZSBpbnNpZGUgdGhlIGluc3RhbmNlIGNvbnRhaW5lci4gVXNlZCBpbnRlcm5hbGx5LlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqIEBuYW1lIGdldF9jb250YWluZXJfdWwoKVxyXG5cdFx0ICogQHJldHVybiB7alF1ZXJ5fVxyXG5cdFx0ICovXHJcblx0XHRnZXRfY29udGFpbmVyX3VsIDogZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5lbGVtZW50LmNoaWxkcmVuKFwidWw6ZXEoMClcIik7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBnZXRzIHN0cmluZyByZXBsYWNlbWVudHMgKGxvY2FsaXphdGlvbikuIFVzZWQgaW50ZXJuYWxseS5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKiBAbmFtZSBnZXRfc3RyaW5nKGtleSlcclxuXHRcdCAqIEBwYXJhbSAge1N0cmluZ30ga2V5XHJcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9XHJcblx0XHQgKi9cclxuXHRcdGdldF9zdHJpbmcgOiBmdW5jdGlvbiAoa2V5KSB7XHJcblx0XHRcdHZhciBhID0gdGhpcy5zZXR0aW5ncy5jb3JlLnN0cmluZ3M7XHJcblx0XHRcdGlmKCQuaXNGdW5jdGlvbihhKSkgeyByZXR1cm4gYS5jYWxsKHRoaXMsIGtleSk7IH1cclxuXHRcdFx0aWYoYSAmJiBhW2tleV0pIHsgcmV0dXJuIGFba2V5XTsgfVxyXG5cdFx0XHRyZXR1cm4ga2V5O1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogZ2V0cyB0aGUgZmlyc3QgY2hpbGQgb2YgYSBET00gbm9kZS4gVXNlZCBpbnRlcm5hbGx5LlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqIEBuYW1lIF9maXJzdENoaWxkKGRvbSlcclxuXHRcdCAqIEBwYXJhbSAge0RPTUVsZW1lbnR9IGRvbVxyXG5cdFx0ICogQHJldHVybiB7RE9NRWxlbWVudH1cclxuXHRcdCAqL1xyXG5cdFx0X2ZpcnN0Q2hpbGQgOiBmdW5jdGlvbiAoZG9tKSB7XHJcblx0XHRcdGRvbSA9IGRvbSA/IGRvbS5maXJzdENoaWxkIDogbnVsbDtcclxuXHRcdFx0d2hpbGUoZG9tICE9PSBudWxsICYmIGRvbS5ub2RlVHlwZSAhPT0gMSkge1xyXG5cdFx0XHRcdGRvbSA9IGRvbS5uZXh0U2libGluZztcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZG9tO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogZ2V0cyB0aGUgbmV4dCBzaWJsaW5nIG9mIGEgRE9NIG5vZGUuIFVzZWQgaW50ZXJuYWxseS5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKiBAbmFtZSBfbmV4dFNpYmxpbmcoZG9tKVxyXG5cdFx0ICogQHBhcmFtICB7RE9NRWxlbWVudH0gZG9tXHJcblx0XHQgKiBAcmV0dXJuIHtET01FbGVtZW50fVxyXG5cdFx0ICovXHJcblx0XHRfbmV4dFNpYmxpbmcgOiBmdW5jdGlvbiAoZG9tKSB7XHJcblx0XHRcdGRvbSA9IGRvbSA/IGRvbS5uZXh0U2libGluZyA6IG51bGw7XHJcblx0XHRcdHdoaWxlKGRvbSAhPT0gbnVsbCAmJiBkb20ubm9kZVR5cGUgIT09IDEpIHtcclxuXHRcdFx0XHRkb20gPSBkb20ubmV4dFNpYmxpbmc7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGRvbTtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGdldHMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgYSBET00gbm9kZS4gVXNlZCBpbnRlcm5hbGx5LlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqIEBuYW1lIF9wcmV2aW91c1NpYmxpbmcoZG9tKVxyXG5cdFx0ICogQHBhcmFtICB7RE9NRWxlbWVudH0gZG9tXHJcblx0XHQgKiBAcmV0dXJuIHtET01FbGVtZW50fVxyXG5cdFx0ICovXHJcblx0XHRfcHJldmlvdXNTaWJsaW5nIDogZnVuY3Rpb24gKGRvbSkge1xyXG5cdFx0XHRkb20gPSBkb20gPyBkb20ucHJldmlvdXNTaWJsaW5nIDogbnVsbDtcclxuXHRcdFx0d2hpbGUoZG9tICE9PSBudWxsICYmIGRvbS5ub2RlVHlwZSAhPT0gMSkge1xyXG5cdFx0XHRcdGRvbSA9IGRvbS5wcmV2aW91c1NpYmxpbmc7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGRvbTtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGdldCB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIG5vZGUgKG9yIHRoZSBhY3R1YWwgalF1ZXJ5IGV4dGVuZGVkIERPTSBub2RlKSBieSB1c2luZyBhbnkgaW5wdXQgKGNoaWxkIERPTSBlbGVtZW50LCBJRCBzdHJpbmcsIHNlbGVjdG9yLCBldGMpXHJcblx0XHQgKiBAbmFtZSBnZXRfbm9kZShvYmogWywgYXNfZG9tXSlcclxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmpcclxuXHRcdCAqIEBwYXJhbSAge0Jvb2xlYW59IGFzX2RvbVxyXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fGpRdWVyeX1cclxuXHRcdCAqL1xyXG5cdFx0Z2V0X25vZGUgOiBmdW5jdGlvbiAob2JqLCBhc19kb20pIHtcclxuXHRcdFx0aWYob2JqICYmIG9iai5pZCkge1xyXG5cdFx0XHRcdG9iaiA9IG9iai5pZDtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgZG9tO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGlmKHRoaXMuX21vZGVsLmRhdGFbb2JqXSkge1xyXG5cdFx0XHRcdFx0b2JqID0gdGhpcy5fbW9kZWwuZGF0YVtvYmpdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGlmKCgoZG9tID0gJChvYmosIHRoaXMuZWxlbWVudCkpLmxlbmd0aCB8fCAoZG9tID0gJCgnIycgKyBvYmosIHRoaXMuZWxlbWVudCkpLmxlbmd0aCkgJiYgdGhpcy5fbW9kZWwuZGF0YVtkb20uY2xvc2VzdCgnbGknKS5hdHRyKCdpZCcpXSkge1xyXG5cdFx0XHRcdFx0b2JqID0gdGhpcy5fbW9kZWwuZGF0YVtkb20uY2xvc2VzdCgnbGknKS5hdHRyKCdpZCcpXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBpZigoZG9tID0gJChvYmosIHRoaXMuZWxlbWVudCkpLmxlbmd0aCAmJiBkb20uaGFzQ2xhc3MoJ2pzdHJlZScpKSB7XHJcblx0XHRcdFx0XHRvYmogPSB0aGlzLl9tb2RlbC5kYXRhWycjJ107XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYoYXNfZG9tKSB7XHJcblx0XHRcdFx0XHRvYmogPSBvYmouaWQgPT09ICcjJyA/IHRoaXMuZWxlbWVudCA6ICQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob2JqLmlkKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBvYmo7XHJcblx0XHRcdH0gY2F0Y2ggKGV4KSB7IHJldHVybiBmYWxzZTsgfVxyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogZ2V0IHRoZSBwYXRoIHRvIGEgbm9kZSwgZWl0aGVyIGNvbnNpc3Rpbmcgb2Ygbm9kZSB0ZXh0cywgb3Igb2Ygbm9kZSBJRHMsIG9wdGlvbmFsbHkgZ2x1ZWQgdG9nZXRoZXIgKG90aGVyd2lzZSBhbiBhcnJheSlcclxuXHRcdCAqIEBuYW1lIGdldF9wYXRoKG9iaiBbLCBnbHVlLCBpZHNdKVxyXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9iaiB0aGUgbm9kZVxyXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSBnbHVlIGlmIHlvdSB3YW50IHRoZSBwYXRoIGFzIGEgc3RyaW5nIC0gcGFzcyB0aGUgZ2x1ZSBoZXJlIChmb3IgZXhhbXBsZSAnLycpLCBpZiBhIGZhbHN5IHZhbHVlIGlzIHN1cHBsaWVkIGhlcmUsIGFuIGFycmF5IGlzIHJldHVybmVkXHJcblx0XHQgKiBAcGFyYW0gIHtCb29sZWFufSBpZHMgaWYgc2V0IHRvIHRydWUgYnVpbGQgdGhlIHBhdGggdXNpbmcgSUQsIG90aGVyd2lzZSBub2RlIHRleHQgaXMgdXNlZFxyXG5cdFx0ICogQHJldHVybiB7bWl4ZWR9XHJcblx0XHQgKi9cclxuXHRcdGdldF9wYXRoIDogZnVuY3Rpb24gKG9iaiwgZ2x1ZSwgaWRzKSB7XHJcblx0XHRcdG9iaiA9IG9iai5wYXJlbnRzID8gb2JqIDogdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRpZighb2JqIHx8IG9iai5pZCA9PT0gJyMnIHx8ICFvYmoucGFyZW50cykge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgaSwgaiwgcCA9IFtdO1xyXG5cdFx0XHRwLnB1c2goaWRzID8gb2JqLmlkIDogb2JqLnRleHQpO1xyXG5cdFx0XHRmb3IoaSA9IDAsIGogPSBvYmoucGFyZW50cy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHRwLnB1c2goaWRzID8gb2JqLnBhcmVudHNbaV0gOiB0aGlzLmdldF90ZXh0KG9iai5wYXJlbnRzW2ldKSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cCA9IHAucmV2ZXJzZSgpLnNsaWNlKDEpO1xyXG5cdFx0XHRyZXR1cm4gZ2x1ZSA/IHAuam9pbihnbHVlKSA6IHA7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBnZXQgdGhlIG5leHQgdmlzaWJsZSBub2RlIHRoYXQgaXMgYmVsb3cgdGhlIGBvYmpgIG5vZGUuIElmIGBzdHJpY3RgIGlzIHNldCB0byBgdHJ1ZWAgb25seSBzaWJsaW5nIG5vZGVzIGFyZSByZXR1cm5lZC5cclxuXHRcdCAqIEBuYW1lIGdldF9uZXh0X2RvbShvYmogWywgc3RyaWN0XSlcclxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmpcclxuXHRcdCAqIEBwYXJhbSAge0Jvb2xlYW59IHN0cmljdFxyXG5cdFx0ICogQHJldHVybiB7alF1ZXJ5fVxyXG5cdFx0ICovXHJcblx0XHRnZXRfbmV4dF9kb20gOiBmdW5jdGlvbiAob2JqLCBzdHJpY3QpIHtcclxuXHRcdFx0dmFyIHRtcDtcclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmosIHRydWUpO1xyXG5cdFx0XHRpZihvYmpbMF0gPT09IHRoaXMuZWxlbWVudFswXSkge1xyXG5cdFx0XHRcdHRtcCA9IHRoaXMuX2ZpcnN0Q2hpbGQodGhpcy5nZXRfY29udGFpbmVyX3VsKClbMF0pO1xyXG5cdFx0XHRcdHJldHVybiB0bXAgPyAkKHRtcCkgOiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZighb2JqIHx8ICFvYmoubGVuZ3RoKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKHN0cmljdCkge1xyXG5cdFx0XHRcdHRtcCA9IHRoaXMuX25leHRTaWJsaW5nKG9ialswXSk7XHJcblx0XHRcdFx0cmV0dXJuIHRtcCA/ICQodG1wKSA6IGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKG9iai5oYXNDbGFzcyhcImpzdHJlZS1vcGVuXCIpKSB7XHJcblx0XHRcdFx0dG1wID0gdGhpcy5fZmlyc3RDaGlsZChvYmouY2hpbGRyZW4oJ3VsJylbMF0pO1xyXG5cdFx0XHRcdHJldHVybiB0bXAgPyAkKHRtcCkgOiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZigodG1wID0gdGhpcy5fbmV4dFNpYmxpbmcob2JqWzBdKSkgIT09IG51bGwpIHtcclxuXHRcdFx0XHRyZXR1cm4gJCh0bXApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBvYmoucGFyZW50c1VudGlsKFwiLmpzdHJlZVwiLFwibGlcIikubmV4dChcImxpXCIpLmVxKDApO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogZ2V0IHRoZSBwcmV2aW91cyB2aXNpYmxlIG5vZGUgdGhhdCBpcyBhYm92ZSB0aGUgYG9iamAgbm9kZS4gSWYgYHN0cmljdGAgaXMgc2V0IHRvIGB0cnVlYCBvbmx5IHNpYmxpbmcgbm9kZXMgYXJlIHJldHVybmVkLlxyXG5cdFx0ICogQG5hbWUgZ2V0X3ByZXZfZG9tKG9iaiBbLCBzdHJpY3RdKVxyXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9ialxyXG5cdFx0ICogQHBhcmFtICB7Qm9vbGVhbn0gc3RyaWN0XHJcblx0XHQgKiBAcmV0dXJuIHtqUXVlcnl9XHJcblx0XHQgKi9cclxuXHRcdGdldF9wcmV2X2RvbSA6IGZ1bmN0aW9uIChvYmosIHN0cmljdCkge1xyXG5cdFx0XHR2YXIgdG1wO1xyXG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaiwgdHJ1ZSk7XHJcblx0XHRcdGlmKG9ialswXSA9PT0gdGhpcy5lbGVtZW50WzBdKSB7XHJcblx0XHRcdFx0dG1wID0gdGhpcy5nZXRfY29udGFpbmVyX3VsKClbMF0ubGFzdENoaWxkO1xyXG5cdFx0XHRcdHJldHVybiB0bXAgPyAkKHRtcCkgOiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZighb2JqIHx8ICFvYmoubGVuZ3RoKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKHN0cmljdCkge1xyXG5cdFx0XHRcdHRtcCA9IHRoaXMuX3ByZXZpb3VzU2libGluZyhvYmpbMF0pO1xyXG5cdFx0XHRcdHJldHVybiB0bXAgPyAkKHRtcCkgOiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZigodG1wID0gdGhpcy5fcHJldmlvdXNTaWJsaW5nKG9ialswXSkpICE9PSBudWxsKSB7XHJcblx0XHRcdFx0b2JqID0gJCh0bXApO1xyXG5cdFx0XHRcdHdoaWxlKG9iai5oYXNDbGFzcyhcImpzdHJlZS1vcGVuXCIpKSB7XHJcblx0XHRcdFx0XHRvYmogPSBvYmouY2hpbGRyZW4oXCJ1bDplcSgwKVwiKS5jaGlsZHJlbihcImxpOmxhc3RcIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBvYmo7XHJcblx0XHRcdH1cclxuXHRcdFx0dG1wID0gb2JqWzBdLnBhcmVudE5vZGUucGFyZW50Tm9kZTtcclxuXHRcdFx0cmV0dXJuIHRtcCAmJiB0bXAudGFnTmFtZSA9PT0gJ0xJJyA/ICQodG1wKSA6IGZhbHNlO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogZ2V0IHRoZSBwYXJlbnQgSUQgb2YgYSBub2RlXHJcblx0XHQgKiBAbmFtZSBnZXRfcGFyZW50KG9iailcclxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmpcclxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0Z2V0X3BhcmVudCA6IGZ1bmN0aW9uIChvYmopIHtcclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRpZighb2JqIHx8IG9iai5pZCA9PT0gJyMnKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBvYmoucGFyZW50O1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogZ2V0IGEgalF1ZXJ5IGNvbGxlY3Rpb24gb2YgYWxsIHRoZSBjaGlsZHJlbiBvZiBhIG5vZGUgKG5vZGUgbXVzdCBiZSByZW5kZXJlZClcclxuXHRcdCAqIEBuYW1lIGdldF9jaGlsZHJlbl9kb20ob2JqKVxyXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9ialxyXG5cdFx0ICogQHJldHVybiB7alF1ZXJ5fVxyXG5cdFx0ICovXHJcblx0XHRnZXRfY2hpbGRyZW5fZG9tIDogZnVuY3Rpb24gKG9iaikge1xyXG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaiwgdHJ1ZSk7XHJcblx0XHRcdGlmKG9ialswXSA9PT0gdGhpcy5lbGVtZW50WzBdKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLmNoaWxkcmVuKFwibGlcIik7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoIW9iaiB8fCAhb2JqLmxlbmd0aCkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gb2JqLmNoaWxkcmVuKFwidWxcIikuY2hpbGRyZW4oXCJsaVwiKTtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGNoZWNrcyBpZiBhIG5vZGUgaGFzIGNoaWxkcmVuXHJcblx0XHQgKiBAbmFtZSBpc19wYXJlbnQob2JqKVxyXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9ialxyXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0aXNfcGFyZW50IDogZnVuY3Rpb24gKG9iaikge1xyXG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XHJcblx0XHRcdHJldHVybiBvYmogJiYgKG9iai5zdGF0ZS5sb2FkZWQgPT09IGZhbHNlIHx8IG9iai5jaGlsZHJlbi5sZW5ndGggPiAwKTtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGNoZWNrcyBpZiBhIG5vZGUgaXMgbG9hZGVkIChpdHMgY2hpbGRyZW4gYXJlIGF2YWlsYWJsZSlcclxuXHRcdCAqIEBuYW1lIGlzX2xvYWRlZChvYmopXHJcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqXHJcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRpc19sb2FkZWQgOiBmdW5jdGlvbiAob2JqKSB7XHJcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcclxuXHRcdFx0cmV0dXJuIG9iaiAmJiBvYmouc3RhdGUubG9hZGVkO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogY2hlY2sgaWYgYSBub2RlIGlzIGN1cnJlbnRseSBsb2FkaW5nIChmZXRjaGluZyBjaGlsZHJlbilcclxuXHRcdCAqIEBuYW1lIGlzX2xvYWRpbmcob2JqKVxyXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9ialxyXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0aXNfbG9hZGluZyA6IGZ1bmN0aW9uIChvYmopIHtcclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmosIHRydWUpO1xyXG5cdFx0XHRyZXR1cm4gb2JqICYmIG9iai5oYXNDbGFzcyhcImpzdHJlZS1sb2FkaW5nXCIpO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogY2hlY2sgaWYgYSBub2RlIGlzIG9wZW5lZFxyXG5cdFx0ICogQG5hbWUgaXNfb3BlbihvYmopXHJcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqXHJcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRpc19vcGVuIDogZnVuY3Rpb24gKG9iaikge1xyXG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XHJcblx0XHRcdHJldHVybiBvYmogJiYgb2JqLnN0YXRlLm9wZW5lZDtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGNoZWNrIGlmIGEgbm9kZSBpcyBpbiBhIGNsb3NlZCBzdGF0ZVxyXG5cdFx0ICogQG5hbWUgaXNfY2xvc2VkKG9iailcclxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmpcclxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59XHJcblx0XHQgKi9cclxuXHRcdGlzX2Nsb3NlZCA6IGZ1bmN0aW9uIChvYmopIHtcclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRyZXR1cm4gb2JqICYmIHRoaXMuaXNfcGFyZW50KG9iaikgJiYgIW9iai5zdGF0ZS5vcGVuZWQ7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBjaGVjayBpZiBhIG5vZGUgaGFzIG5vIGNoaWxkcmVuXHJcblx0XHQgKiBAbmFtZSBpc19sZWFmKG9iailcclxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmpcclxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59XHJcblx0XHQgKi9cclxuXHRcdGlzX2xlYWYgOiBmdW5jdGlvbiAob2JqKSB7XHJcblx0XHRcdHJldHVybiAhdGhpcy5pc19wYXJlbnQob2JqKTtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGxvYWRzIGEgbm9kZSAoZmV0Y2hlcyBpdHMgY2hpbGRyZW4gdXNpbmcgdGhlIGBjb3JlLmRhdGFgIHNldHRpbmcpLiBNdWx0aXBsZSBub2RlcyBjYW4gYmUgcGFzc2VkIHRvIGJ5IHVzaW5nIGFuIGFycmF5LlxyXG5cdFx0ICogQG5hbWUgbG9hZF9ub2RlKG9iaiBbLCBjYWxsYmFja10pXHJcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqXHJcblx0XHQgKiBAcGFyYW0gIHtmdW5jdGlvbn0gY2FsbGJhY2sgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBvbmNlIGxvYWRpbmcgaXMgY29ucGxldGUsIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZCBpbiB0aGUgaW5zdGFuY2UncyBzY29wZSBhbmQgcmVjZWl2ZXMgdHdvIGFyZ3VtZW50cyAtIHRoZSBub2RlIGFuZCBhIGJvb2xlYW4gc3RhdHVzXHJcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxyXG5cdFx0ICogQHRyaWdnZXIgbG9hZF9ub2RlLmpzdHJlZVxyXG5cdFx0ICovXHJcblx0XHRsb2FkX25vZGUgOiBmdW5jdGlvbiAob2JqLCBjYWxsYmFjaykge1xyXG5cdFx0XHR2YXIgdDEsIHQyO1xyXG5cdFx0XHRpZigkLmlzQXJyYXkob2JqKSkge1xyXG5cdFx0XHRcdG9iaiA9IG9iai5zbGljZSgpO1xyXG5cdFx0XHRcdGZvcih0MSA9IDAsIHQyID0gb2JqLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xyXG5cdFx0XHRcdFx0dGhpcy5sb2FkX25vZGUob2JqW3QxXSwgY2FsbGJhY2spO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XHJcblx0XHRcdGlmKCFvYmopIHtcclxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKHRoaXMsIG9iaiwgZmFsc2UpO1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmdldF9ub2RlKG9iaiwgdHJ1ZSkuYWRkQ2xhc3MoXCJqc3RyZWUtbG9hZGluZ1wiKTtcclxuXHRcdFx0dGhpcy5fbG9hZF9ub2RlKG9iaiwgJC5wcm94eShmdW5jdGlvbiAoc3RhdHVzKSB7XHJcblx0XHRcdFx0b2JqLnN0YXRlLmxvYWRlZCA9IHN0YXR1cztcclxuXHRcdFx0XHR0aGlzLmdldF9ub2RlKG9iaiwgdHJ1ZSkucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtbG9hZGluZ1wiKTtcclxuXHRcdFx0XHQvKipcclxuXHRcdFx0XHQgKiB0cmlnZ2VyZWQgYWZ0ZXIgYSBub2RlIGlzIGxvYWRlZFxyXG5cdFx0XHRcdCAqIEBldmVudFxyXG5cdFx0XHRcdCAqIEBuYW1lIGxvYWRfbm9kZS5qc3RyZWVcclxuXHRcdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZSB0aGUgbm9kZSB0aGF0IHdhcyBsb2FkaW5nXHJcblx0XHRcdFx0ICogQHBhcmFtIHtCb29sZWFufSBzdGF0dXMgd2FzIHRoZSBub2RlIGxvYWRlZCBzdWNjZXNzZnVsbHlcclxuXHRcdFx0XHQgKi9cclxuXHRcdFx0XHR0aGlzLnRyaWdnZXIoJ2xvYWRfbm9kZScsIHsgXCJub2RlXCIgOiBvYmosIFwic3RhdHVzXCIgOiBzdGF0dXMgfSk7XHJcblx0XHRcdFx0aWYoY2FsbGJhY2spIHtcclxuXHRcdFx0XHRcdGNhbGxiYWNrLmNhbGwodGhpcywgb2JqLCBzdGF0dXMpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSwgdGhpcykpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGhhbmRsZXMgdGhlIGFjdHVhbCBsb2FkaW5nIG9mIGEgbm9kZS4gVXNlZCBvbmx5IGludGVybmFsbHkuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICogQG5hbWUgX2xvYWRfbm9kZShvYmogWywgY2FsbGJhY2tdKVxyXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9ialxyXG5cdFx0ICogQHBhcmFtICB7ZnVuY3Rpb259IGNhbGxiYWNrIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgb25jZSBsb2FkaW5nIGlzIGNvbnBsZXRlLCB0aGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgaW4gdGhlIGluc3RhbmNlJ3Mgc2NvcGUgYW5kIHJlY2VpdmVzIG9uZSBhcmd1bWVudCAtIGEgYm9vbGVhbiBzdGF0dXNcclxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59XHJcblx0XHQgKi9cclxuXHRcdF9sb2FkX25vZGUgOiBmdW5jdGlvbiAob2JqLCBjYWxsYmFjaykge1xyXG5cdFx0XHR2YXIgcyA9IHRoaXMuc2V0dGluZ3MuY29yZS5kYXRhLCB0O1xyXG5cdFx0XHQvLyB1c2Ugb3JpZ2luYWwgSFRNTFxyXG5cdFx0XHRpZighcykge1xyXG5cdFx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKHRoaXMsIG9iai5pZCA9PT0gJyMnID8gdGhpcy5fYXBwZW5kX2h0bWxfZGF0YShvYmosIHRoaXMuX2RhdGEuY29yZS5vcmlnaW5hbF9jb250YWluZXJfaHRtbC5jbG9uZSh0cnVlKSkgOiBmYWxzZSk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoJC5pc0Z1bmN0aW9uKHMpKSB7XHJcblx0XHRcdFx0cmV0dXJuIHMuY2FsbCh0aGlzLCBvYmosICQucHJveHkoZnVuY3Rpb24gKGQpIHtcclxuXHRcdFx0XHRcdHJldHVybiBkID09PSBmYWxzZSA/IGNhbGxiYWNrLmNhbGwodGhpcywgZmFsc2UpIDogY2FsbGJhY2suY2FsbCh0aGlzLCB0aGlzW3R5cGVvZiBkID09PSAnc3RyaW5nJyA/ICdfYXBwZW5kX2h0bWxfZGF0YScgOiAnX2FwcGVuZF9qc29uX2RhdGEnXShvYmosIHR5cGVvZiBkID09PSAnc3RyaW5nJyA/ICQoZCkgOiBkKSk7XHJcblx0XHRcdFx0fSwgdGhpcykpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKHR5cGVvZiBzID09PSAnb2JqZWN0Jykge1xyXG5cdFx0XHRcdGlmKHMudXJsKSB7XHJcblx0XHRcdFx0XHRzID0gJC5leHRlbmQodHJ1ZSwge30sIHMpO1xyXG5cdFx0XHRcdFx0aWYoJC5pc0Z1bmN0aW9uKHMudXJsKSkge1xyXG5cdFx0XHRcdFx0XHRzLnVybCA9IHMudXJsLmNhbGwodGhpcywgb2JqKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmKCQuaXNGdW5jdGlvbihzLmRhdGEpKSB7XHJcblx0XHRcdFx0XHRcdHMuZGF0YSA9IHMuZGF0YS5jYWxsKHRoaXMsIG9iaik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gJC5hamF4KHMpXHJcblx0XHRcdFx0XHRcdC5kb25lKCQucHJveHkoZnVuY3Rpb24gKGQsdCx4KSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdHlwZSA9IHguZ2V0UmVzcG9uc2VIZWFkZXIoJ0NvbnRlbnQtVHlwZScpO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYodHlwZS5pbmRleE9mKCdqc29uJykgIT09IC0xKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKHRoaXMsIHRoaXMuX2FwcGVuZF9qc29uX2RhdGEob2JqLCBkKSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlLmluZGV4T2YoJ2h0bWwnKSAhPT0gLTEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwodGhpcywgdGhpcy5fYXBwZW5kX2h0bWxfZGF0YShvYmosICQoZCkpKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9LCB0aGlzKSlcclxuXHRcdFx0XHRcdFx0LmZhaWwoJC5wcm94eShmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjYWxsYmFjay5jYWxsKHRoaXMsIGZhbHNlKTtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yID0geyAnZXJyb3InIDogJ2FqYXgnLCAncGx1Z2luJyA6ICdjb3JlJywgJ2lkJyA6ICdjb3JlXzA0JywgJ3JlYXNvbicgOiAnQ291bGQgbm90IGxvYWQgbm9kZScsICdkYXRhJyA6IEpTT04uc3RyaW5naWZ5KHMpIH07XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNldHRpbmdzLmNvcmUuZXJyb3IuY2FsbCh0aGlzLCB0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcik7XHJcblx0XHRcdFx0XHRcdFx0fSwgdGhpcykpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0ID0gKCQuaXNBcnJheShzKSB8fCAkLmlzUGxhaW5PYmplY3QocykpID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzKSkgOiBzO1xyXG5cdFx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKHRoaXMsIHRoaXMuX2FwcGVuZF9qc29uX2RhdGEob2JqLCB0KSk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYodHlwZW9mIHMgPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwodGhpcywgdGhpcy5fYXBwZW5kX2h0bWxfZGF0YShvYmosIHMpKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCh0aGlzLCBmYWxzZSk7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBhZGRzIGEgbm9kZSB0byB0aGUgbGlzdCBvZiBub2RlcyB0byByZWRyYXcuIFVzZWQgb25seSBpbnRlcm5hbGx5LlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqIEBuYW1lIF9ub2RlX2NoYW5nZWQob2JqIFssIGNhbGxiYWNrXSlcclxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmpcclxuXHRcdCAqL1xyXG5cdFx0X25vZGVfY2hhbmdlZCA6IGZ1bmN0aW9uIChvYmopIHtcclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRpZihvYmopIHtcclxuXHRcdFx0XHR0aGlzLl9tb2RlbC5jaGFuZ2VkLnB1c2gob2JqLmlkKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogYXBwZW5kcyBIVE1MIGNvbnRlbnQgdG8gdGhlIHRyZWUuIFVzZWQgaW50ZXJuYWxseS5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKiBAbmFtZSBfYXBwZW5kX2h0bWxfZGF0YShvYmosIGRhdGEpXHJcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqIHRoZSBub2RlIHRvIGFwcGVuZCB0b1xyXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSBkYXRhIHRoZSBIVE1MIHN0cmluZyB0byBwYXJzZSBhbmQgYXBwZW5kXHJcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxyXG5cdFx0ICogQHRyaWdnZXIgbW9kZWwuanN0cmVlLCBjaGFuZ2VkLmpzdHJlZVxyXG5cdFx0ICovXHJcblx0XHRfYXBwZW5kX2h0bWxfZGF0YSA6IGZ1bmN0aW9uIChkb20sIGRhdGEpIHtcclxuXHRcdFx0ZG9tID0gdGhpcy5nZXRfbm9kZShkb20pO1xyXG5cdFx0XHRkb20uY2hpbGRyZW4gPSBbXTtcclxuXHRcdFx0ZG9tLmNoaWxkcmVuX2QgPSBbXTtcclxuXHRcdFx0dmFyIGRhdCA9IGRhdGEuaXMoJ3VsJykgPyBkYXRhLmNoaWxkcmVuKCkgOiBkYXRhLFxyXG5cdFx0XHRcdHBhciA9IGRvbS5pZCxcclxuXHRcdFx0XHRjaGQgPSBbXSxcclxuXHRcdFx0XHRkcGMgPSBbXSxcclxuXHRcdFx0XHRtID0gdGhpcy5fbW9kZWwuZGF0YSxcclxuXHRcdFx0XHRwID0gbVtwYXJdLFxyXG5cdFx0XHRcdHMgPSB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQubGVuZ3RoLFxyXG5cdFx0XHRcdHRtcCwgaSwgajtcclxuXHRcdFx0ZGF0LmVhY2goJC5wcm94eShmdW5jdGlvbiAoaSwgdikge1xyXG5cdFx0XHRcdHRtcCA9IHRoaXMuX3BhcnNlX21vZGVsX2Zyb21faHRtbCgkKHYpLCBwYXIsIHAucGFyZW50cy5jb25jYXQoKSk7XHJcblx0XHRcdFx0aWYodG1wKSB7XHJcblx0XHRcdFx0XHRjaGQucHVzaCh0bXApO1xyXG5cdFx0XHRcdFx0ZHBjLnB1c2godG1wKTtcclxuXHRcdFx0XHRcdGlmKG1bdG1wXS5jaGlsZHJlbl9kLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRkcGMgPSBkcGMuY29uY2F0KG1bdG1wXS5jaGlsZHJlbl9kKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sIHRoaXMpKTtcclxuXHRcdFx0cC5jaGlsZHJlbiA9IGNoZDtcclxuXHRcdFx0cC5jaGlsZHJlbl9kID0gZHBjO1xyXG5cdFx0XHRmb3IoaSA9IDAsIGogPSBwLnBhcmVudHMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0bVtwLnBhcmVudHNbaV1dLmNoaWxkcmVuX2QgPSBtW3AucGFyZW50c1tpXV0uY2hpbGRyZW5fZC5jb25jYXQoZHBjKTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogdHJpZ2dlcmVkIHdoZW4gbmV3IGRhdGEgaXMgaW5zZXJ0ZWQgdG8gdGhlIHRyZWUgbW9kZWxcclxuXHRcdFx0ICogQGV2ZW50XHJcblx0XHRcdCAqIEBuYW1lIG1vZGVsLmpzdHJlZVxyXG5cdFx0XHQgKiBAcGFyYW0ge0FycmF5fSBub2RlcyBhbiBhcnJheSBvZiBub2RlIElEc1xyXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gcGFyZW50IHRoZSBwYXJlbnQgSUQgb2YgdGhlIG5vZGVzXHJcblx0XHRcdCAqL1xyXG5cdFx0XHR0aGlzLnRyaWdnZXIoJ21vZGVsJywgeyBcIm5vZGVzXCIgOiBkcGMsICdwYXJlbnQnIDogcGFyIH0pO1xyXG5cdFx0XHRpZihwYXIgIT09ICcjJykge1xyXG5cdFx0XHRcdHRoaXMuX25vZGVfY2hhbmdlZChwYXIpO1xyXG5cdFx0XHRcdHRoaXMucmVkcmF3KCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5nZXRfY29udGFpbmVyX3VsKCkuY2hpbGRyZW4oJy5qc3RyZWUtaW5pdGlhbC1ub2RlJykucmVtb3ZlKCk7XHJcblx0XHRcdFx0dGhpcy5yZWRyYXcodHJ1ZSk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYodGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmxlbmd0aCAhPT0gcykge1xyXG5cdFx0XHRcdHRoaXMudHJpZ2dlcignY2hhbmdlZCcsIHsgJ2FjdGlvbicgOiAnbW9kZWwnLCAnc2VsZWN0ZWQnIDogdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkIH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogYXBwZW5kcyBKU09OIGNvbnRlbnQgdG8gdGhlIHRyZWUuIFVzZWQgaW50ZXJuYWxseS5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKiBAbmFtZSBfYXBwZW5kX2pzb25fZGF0YShvYmosIGRhdGEpXHJcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqIHRoZSBub2RlIHRvIGFwcGVuZCB0b1xyXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSBkYXRhIHRoZSBKU09OIG9iamVjdCB0byBwYXJzZSBhbmQgYXBwZW5kXHJcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRfYXBwZW5kX2pzb25fZGF0YSA6IGZ1bmN0aW9uIChkb20sIGRhdGEpIHtcclxuXHRcdFx0ZG9tID0gdGhpcy5nZXRfbm9kZShkb20pO1xyXG5cdFx0XHRkb20uY2hpbGRyZW4gPSBbXTtcclxuXHRcdFx0ZG9tLmNoaWxkcmVuX2QgPSBbXTtcclxuXHRcdFx0dmFyIGRhdCA9IGRhdGEsXHJcblx0XHRcdFx0cGFyID0gZG9tLmlkLFxyXG5cdFx0XHRcdGNoZCA9IFtdLFxyXG5cdFx0XHRcdGRwYyA9IFtdLFxyXG5cdFx0XHRcdG0gPSB0aGlzLl9tb2RlbC5kYXRhLFxyXG5cdFx0XHRcdHAgPSBtW3Bhcl0sXHJcblx0XHRcdFx0cyA9IHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5sZW5ndGgsXHJcblx0XHRcdFx0dG1wLCBpLCBqO1xyXG5cdFx0XHQvLyAqJSRAISEhXHJcblx0XHRcdGlmKGRhdC5kKSB7XHJcblx0XHRcdFx0ZGF0ID0gZGF0LmQ7XHJcblx0XHRcdFx0aWYodHlwZW9mIGRhdCA9PT0gXCJzdHJpbmdcIikge1xyXG5cdFx0XHRcdFx0ZGF0ID0gSlNPTi5wYXJzZShkYXQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZighJC5pc0FycmF5KGRhdCkpIHsgZGF0ID0gW2RhdF07IH1cclxuXHRcdFx0aWYoZGF0Lmxlbmd0aCAmJiBkYXRbMF0uaWQgIT09IHVuZGVmaW5lZCAmJiBkYXRbMF0ucGFyZW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHQvLyBGbGF0IEpTT04gc3VwcG9ydCAoZm9yIGVhc3kgaW1wb3J0IGZyb20gREIpOlxyXG5cdFx0XHRcdC8vIDEpIGNvbnZlcnQgdG8gb2JqZWN0IChmb3JlYWNoKVxyXG5cdFx0XHRcdGZvcihpID0gMCwgaiA9IGRhdC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHRcdGlmKCFkYXRbaV0uY2hpbGRyZW4pIHtcclxuXHRcdFx0XHRcdFx0ZGF0W2ldLmNoaWxkcmVuID0gW107XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRtW2RhdFtpXS5pZF0gPSBkYXRbaV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIDIpIHBvcHVsYXRlIGNoaWxkcmVuIChmb3JlYWNoKVxyXG5cdFx0XHRcdGZvcihpID0gMCwgaiA9IGRhdC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHRcdG1bZGF0W2ldLnBhcmVudF0uY2hpbGRyZW4ucHVzaChkYXRbaV0uaWQpO1xyXG5cdFx0XHRcdFx0Ly8gcG9wdWxhdGUgcGFyZW50LmNoaWxkcmVuX2RcclxuXHRcdFx0XHRcdHAuY2hpbGRyZW5fZC5wdXNoKGRhdFtpXS5pZCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIDMpIG5vcm1hbGl6ZSAmJiBwb3B1bGF0ZSBwYXJlbnRzIGFuZCBjaGlsZHJlbl9kIHdpdGggcmVjdXJzaW9uXHJcblx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gcC5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHRcdHRtcCA9IHRoaXMuX3BhcnNlX21vZGVsX2Zyb21fZmxhdF9qc29uKG1bcC5jaGlsZHJlbltpXV0sIHBhciwgcC5wYXJlbnRzLmNvbmNhdCgpKTtcclxuXHRcdFx0XHRcdGRwYy5wdXNoKHRtcCk7XHJcblx0XHRcdFx0XHRpZihtW3RtcF0uY2hpbGRyZW5fZC5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0ZHBjID0gZHBjLmNvbmNhdChtW3RtcF0uY2hpbGRyZW5fZCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vID8pIHRocmVlX3N0YXRlIHNlbGVjdGlvbiAtIHAuc3RhdGUuc2VsZWN0ZWQgJiYgdCAtIChpZiB0aHJlZV9zdGF0ZSBmb3JlYWNoKGRhdCA9PiBjaCkgLT4gZm9yZWFjaChwYXJlbnRzKSBpZihwYXJlbnQuc2VsZWN0ZWQpIGNoaWxkLnNlbGVjdGVkID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRmb3IoaSA9IDAsIGogPSBkYXQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0XHR0bXAgPSB0aGlzLl9wYXJzZV9tb2RlbF9mcm9tX2pzb24oZGF0W2ldLCBwYXIsIHAucGFyZW50cy5jb25jYXQoKSk7XHJcblx0XHRcdFx0XHRpZih0bXApIHtcclxuXHRcdFx0XHRcdFx0Y2hkLnB1c2godG1wKTtcclxuXHRcdFx0XHRcdFx0ZHBjLnB1c2godG1wKTtcclxuXHRcdFx0XHRcdFx0aWYobVt0bXBdLmNoaWxkcmVuX2QubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0ZHBjID0gZHBjLmNvbmNhdChtW3RtcF0uY2hpbGRyZW5fZCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cC5jaGlsZHJlbiA9IGNoZDtcclxuXHRcdFx0XHRwLmNoaWxkcmVuX2QgPSBkcGM7XHJcblx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gcC5wYXJlbnRzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdFx0bVtwLnBhcmVudHNbaV1dLmNoaWxkcmVuX2QgPSBtW3AucGFyZW50c1tpXV0uY2hpbGRyZW5fZC5jb25jYXQoZHBjKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy50cmlnZ2VyKCdtb2RlbCcsIHsgXCJub2Rlc1wiIDogZHBjLCAncGFyZW50JyA6IHBhciB9KTtcclxuXHJcblx0XHRcdGlmKHBhciAhPT0gJyMnKSB7XHJcblx0XHRcdFx0dGhpcy5fbm9kZV9jaGFuZ2VkKHBhcik7XHJcblx0XHRcdFx0dGhpcy5yZWRyYXcoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyB0aGlzLmdldF9jb250YWluZXJfdWwoKS5jaGlsZHJlbignLmpzdHJlZS1pbml0aWFsLW5vZGUnKS5yZW1vdmUoKTtcclxuXHRcdFx0XHR0aGlzLnJlZHJhdyh0cnVlKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZih0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQubGVuZ3RoICE9PSBzKSB7XHJcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCdjaGFuZ2VkJywgeyAnYWN0aW9uJyA6ICdtb2RlbCcsICdzZWxlY3RlZCcgOiB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQgfSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBwYXJzZXMgYSBub2RlIGZyb20gYSBqUXVlcnkgb2JqZWN0IGFuZCBhcHBlbmRzIHRoZW0gdG8gdGhlIGluIG1lbW9yeSB0cmVlIG1vZGVsLiBVc2VkIGludGVybmFsbHkuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICogQG5hbWUgX3BhcnNlX21vZGVsX2Zyb21faHRtbChkIFssIHAsIHBzXSlcclxuXHRcdCAqIEBwYXJhbSAge2pRdWVyeX0gZCB0aGUgalF1ZXJ5IG9iamVjdCB0byBwYXJzZVxyXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSBwIHRoZSBwYXJlbnQgSURcclxuXHRcdCAqIEBwYXJhbSAge0FycmF5fSBwcyBsaXN0IG9mIGFsbCBwYXJlbnRzXHJcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSBJRCBvZiB0aGUgb2JqZWN0IGFkZGVkIHRvIHRoZSBtb2RlbFxyXG5cdFx0ICovXHJcblx0XHRfcGFyc2VfbW9kZWxfZnJvbV9odG1sIDogZnVuY3Rpb24gKGQsIHAsIHBzKSB7XHJcblx0XHRcdGlmKCFwcykgeyBwcyA9IFtdOyB9XHJcblx0XHRcdGVsc2UgeyBwcyA9IFtdLmNvbmNhdChwcyk7IH1cclxuXHRcdFx0aWYocCkgeyBwcy51bnNoaWZ0KHApOyB9XHJcblx0XHRcdHZhciBjLCBlLCBtID0gdGhpcy5fbW9kZWwuZGF0YSxcclxuXHRcdFx0XHRkYXRhID0ge1xyXG5cdFx0XHRcdFx0aWRcdFx0XHQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0dGV4dFx0XHQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0aWNvblx0XHQ6IHRydWUsXHJcblx0XHRcdFx0XHRwYXJlbnRcdFx0OiBwLFxyXG5cdFx0XHRcdFx0cGFyZW50c1x0XHQ6IHBzLFxyXG5cdFx0XHRcdFx0Y2hpbGRyZW5cdDogW10sXHJcblx0XHRcdFx0XHRjaGlsZHJlbl9kXHQ6IFtdLFxyXG5cdFx0XHRcdFx0ZGF0YVx0XHQ6IG51bGwsXHJcblx0XHRcdFx0XHRzdGF0ZVx0XHQ6IHsgfSxcclxuXHRcdFx0XHRcdGxpX2F0dHJcdFx0OiB7IGlkIDogZmFsc2UgfSxcclxuXHRcdFx0XHRcdGFfYXR0clx0XHQ6IHsgaHJlZiA6ICcjJyB9LFxyXG5cdFx0XHRcdFx0b3JpZ2luYWxcdDogZmFsc2VcclxuXHRcdFx0XHR9LCBpLCB0bXAsIHRpZDtcclxuXHRcdFx0Zm9yKGkgaW4gdGhpcy5fbW9kZWwuZGVmYXVsdF9zdGF0ZSkge1xyXG5cdFx0XHRcdGlmKHRoaXMuX21vZGVsLmRlZmF1bHRfc3RhdGUuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuXHRcdFx0XHRcdGRhdGEuc3RhdGVbaV0gPSB0aGlzLl9tb2RlbC5kZWZhdWx0X3N0YXRlW2ldO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHR0bXAgPSAkLnZha2F0YS5hdHRyaWJ1dGVzKGQsIHRydWUpO1xyXG5cdFx0XHQkLmVhY2godG1wLCBmdW5jdGlvbiAoaSwgdikge1xyXG5cdFx0XHRcdHYgPSAkLnRyaW0odik7XHJcblx0XHRcdFx0aWYoIXYubGVuZ3RoKSB7IHJldHVybiB0cnVlOyB9XHJcblx0XHRcdFx0ZGF0YS5saV9hdHRyW2ldID0gdjtcclxuXHRcdFx0XHRpZihpID09PSAnaWQnKSB7XHJcblx0XHRcdFx0XHRkYXRhLmlkID0gdjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHR0bXAgPSBkLmNoaWxkcmVuKCdhJykuZXEoMCk7XHJcblx0XHRcdGlmKHRtcC5sZW5ndGgpIHtcclxuXHRcdFx0XHR0bXAgPSAkLnZha2F0YS5hdHRyaWJ1dGVzKHRtcCwgdHJ1ZSk7XHJcblx0XHRcdFx0JC5lYWNoKHRtcCwgZnVuY3Rpb24gKGksIHYpIHtcclxuXHRcdFx0XHRcdHYgPSAkLnRyaW0odik7XHJcblx0XHRcdFx0XHRpZih2Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRkYXRhLmFfYXR0cltpXSA9IHY7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dG1wID0gZC5jaGlsZHJlbihcImE6ZXEoMClcIikubGVuZ3RoID8gZC5jaGlsZHJlbihcImE6ZXEoMClcIikuY2xvbmUoKSA6IGQuY2xvbmUoKTtcclxuXHRcdFx0dG1wLmNoaWxkcmVuKFwiaW5zLCBpLCB1bFwiKS5yZW1vdmUoKTtcclxuXHRcdFx0dG1wID0gdG1wLmh0bWwoKTtcclxuXHRcdFx0dG1wID0gJCgnPGRpdiAvPicpLmh0bWwodG1wKTtcclxuXHRcdFx0ZGF0YS50ZXh0ID0gdG1wLmh0bWwoKTtcclxuXHRcdFx0dG1wID0gZC5kYXRhKCk7XHJcblx0XHRcdGRhdGEuZGF0YSA9IHRtcCA/ICQuZXh0ZW5kKHRydWUsIHt9LCB0bXApIDogbnVsbDtcclxuXHRcdFx0ZGF0YS5zdGF0ZS5vcGVuZWQgPSBkLmhhc0NsYXNzKCdqc3RyZWUtb3BlbicpO1xyXG5cdFx0XHRkYXRhLnN0YXRlLnNlbGVjdGVkID0gZC5jaGlsZHJlbignYScpLmhhc0NsYXNzKCdqc3RyZWUtY2xpY2tlZCcpO1xyXG5cdFx0XHRkYXRhLnN0YXRlLmRpc2FibGVkID0gZC5jaGlsZHJlbignYScpLmhhc0NsYXNzKCdqc3RyZWUtZGlzYWJsZWQnKTtcclxuXHRcdFx0aWYoZGF0YS5kYXRhICYmIGRhdGEuZGF0YS5qc3RyZWUpIHtcclxuXHRcdFx0XHRmb3IoaSBpbiBkYXRhLmRhdGEuanN0cmVlKSB7XHJcblx0XHRcdFx0XHRpZihkYXRhLmRhdGEuanN0cmVlLmhhc093blByb3BlcnR5KGkpKSB7XHJcblx0XHRcdFx0XHRcdGRhdGEuc3RhdGVbaV0gPSBkYXRhLmRhdGEuanN0cmVlW2ldO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHR0bXAgPSBkLmNoaWxkcmVuKFwiYVwiKS5jaGlsZHJlbihcIi5qc3RyZWUtdGhlbWVpY29uXCIpO1xyXG5cdFx0XHRpZih0bXAubGVuZ3RoKSB7XHJcblx0XHRcdFx0ZGF0YS5pY29uID0gdG1wLmhhc0NsYXNzKCdqc3RyZWUtdGhlbWVpY29uLWhpZGRlbicpID8gZmFsc2UgOiB0bXAuYXR0cigncmVsJyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoZGF0YS5zdGF0ZS5pY29uKSB7XHJcblx0XHRcdFx0ZGF0YS5pY29uID0gZGF0YS5zdGF0ZS5pY29uO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRtcCA9IGQuY2hpbGRyZW4oXCJ1bFwiKS5jaGlsZHJlbihcImxpXCIpO1xyXG5cdFx0XHRkbyB7XHJcblx0XHRcdFx0dGlkID0gJ2onICsgdGhpcy5faWQgKyAnXycgKyAoKyt0aGlzLl9jbnQpO1xyXG5cdFx0XHR9IHdoaWxlKG1bdGlkXSk7XHJcblx0XHRcdGRhdGEuaWQgPSBkYXRhLmxpX2F0dHIuaWQgfHwgdGlkO1xyXG5cdFx0XHRpZih0bXAubGVuZ3RoKSB7XHJcblx0XHRcdFx0dG1wLmVhY2goJC5wcm94eShmdW5jdGlvbiAoaSwgdikge1xyXG5cdFx0XHRcdFx0YyA9IHRoaXMuX3BhcnNlX21vZGVsX2Zyb21faHRtbCgkKHYpLCBkYXRhLmlkLCBwcyk7XHJcblx0XHRcdFx0XHRlID0gdGhpcy5fbW9kZWwuZGF0YVtjXTtcclxuXHRcdFx0XHRcdGRhdGEuY2hpbGRyZW4ucHVzaChjKTtcclxuXHRcdFx0XHRcdGlmKGUuY2hpbGRyZW5fZC5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0ZGF0YS5jaGlsZHJlbl9kID0gZGF0YS5jaGlsZHJlbl9kLmNvbmNhdChlLmNoaWxkcmVuX2QpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sIHRoaXMpKTtcclxuXHRcdFx0XHRkYXRhLmNoaWxkcmVuX2QgPSBkYXRhLmNoaWxkcmVuX2QuY29uY2F0KGRhdGEuY2hpbGRyZW4pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGlmKGQuaGFzQ2xhc3MoJ2pzdHJlZS1jbG9zZWQnKSkge1xyXG5cdFx0XHRcdFx0ZGF0YS5zdGF0ZS5sb2FkZWQgPSBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoZGF0YS5saV9hdHRyWydjbGFzcyddKSB7XHJcblx0XHRcdFx0ZGF0YS5saV9hdHRyWydjbGFzcyddID0gZGF0YS5saV9hdHRyWydjbGFzcyddLnJlcGxhY2UoJ2pzdHJlZS1jbG9zZWQnLCcnKS5yZXBsYWNlKCdqc3RyZWUtb3BlbicsJycpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKGRhdGEuYV9hdHRyWydjbGFzcyddKSB7XHJcblx0XHRcdFx0ZGF0YS5hX2F0dHJbJ2NsYXNzJ10gPSBkYXRhLmFfYXR0clsnY2xhc3MnXS5yZXBsYWNlKCdqc3RyZWUtY2xpY2tlZCcsJycpLnJlcGxhY2UoJ2pzdHJlZS1kaXNhYmxlZCcsJycpO1xyXG5cdFx0XHR9XHJcblx0XHRcdG1bZGF0YS5pZF0gPSBkYXRhO1xyXG5cdFx0XHRpZihkYXRhLnN0YXRlLnNlbGVjdGVkKSB7XHJcblx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLnB1c2goZGF0YS5pZCk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGRhdGEuaWQ7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBwYXJzZXMgYSBub2RlIGZyb20gYSBKU09OIG9iamVjdCAodXNlZCB3aGVuIGRlYWxpbmcgd2l0aCBmbGF0IGRhdGEsIHdoaWNoIGhhcyBubyBuZXN0aW5nIG9mIGNoaWxkcmVuLCBidXQgaGFzIGlkIGFuZCBwYXJlbnQgcHJvcGVydGllcykgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGluIG1lbW9yeSB0cmVlIG1vZGVsLiBVc2VkIGludGVybmFsbHkuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICogQG5hbWUgX3BhcnNlX21vZGVsX2Zyb21fZmxhdF9qc29uKGQgWywgcCwgcHNdKVxyXG5cdFx0ICogQHBhcmFtICB7T2JqZWN0fSBkIHRoZSBKU09OIG9iamVjdCB0byBwYXJzZVxyXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSBwIHRoZSBwYXJlbnQgSURcclxuXHRcdCAqIEBwYXJhbSAge0FycmF5fSBwcyBsaXN0IG9mIGFsbCBwYXJlbnRzXHJcblx0XHQgKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSBJRCBvZiB0aGUgb2JqZWN0IGFkZGVkIHRvIHRoZSBtb2RlbFxyXG5cdFx0ICovXHJcblx0XHRfcGFyc2VfbW9kZWxfZnJvbV9mbGF0X2pzb24gOiBmdW5jdGlvbiAoZCwgcCwgcHMpIHtcclxuXHRcdFx0aWYoIXBzKSB7IHBzID0gW107IH1cclxuXHRcdFx0ZWxzZSB7IHBzID0gcHMuY29uY2F0KCk7IH1cclxuXHRcdFx0aWYocCkgeyBwcy51bnNoaWZ0KHApOyB9XHJcblx0XHRcdHZhciB0aWQgPSBkLmlkLFxyXG5cdFx0XHRcdG0gPSB0aGlzLl9tb2RlbC5kYXRhLFxyXG5cdFx0XHRcdGRmID0gdGhpcy5fbW9kZWwuZGVmYXVsdF9zdGF0ZSxcclxuXHRcdFx0XHRpLCBqLCBjLCBlLFxyXG5cdFx0XHRcdHRtcCA9IHtcclxuXHRcdFx0XHRcdGlkXHRcdFx0OiB0aWQsXHJcblx0XHRcdFx0XHR0ZXh0XHRcdDogZC50ZXh0IHx8ICcnLFxyXG5cdFx0XHRcdFx0aWNvblx0XHQ6IGQuaWNvbiAhPT0gdW5kZWZpbmVkID8gZC5pY29uIDogdHJ1ZSxcclxuXHRcdFx0XHRcdHBhcmVudFx0XHQ6IHAsXHJcblx0XHRcdFx0XHRwYXJlbnRzXHRcdDogcHMsXHJcblx0XHRcdFx0XHRjaGlsZHJlblx0OiBkLmNoaWxkcmVuIHx8IFtdLFxyXG5cdFx0XHRcdFx0Y2hpbGRyZW5fZFx0OiBkLmNoaWxkcmVuX2QgfHwgW10sXHJcblx0XHRcdFx0XHRkYXRhXHRcdDogZC5kYXRhLFxyXG5cdFx0XHRcdFx0c3RhdGVcdFx0OiB7IH0sXHJcblx0XHRcdFx0XHRsaV9hdHRyXHRcdDogeyBpZCA6IGZhbHNlIH0sXHJcblx0XHRcdFx0XHRhX2F0dHJcdFx0OiB7IGhyZWYgOiAnIycgfSxcclxuXHRcdFx0XHRcdG9yaWdpbmFsXHQ6IGZhbHNlXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0Zm9yKGkgaW4gZGYpIHtcclxuXHRcdFx0XHRpZihkZi5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG5cdFx0XHRcdFx0dG1wLnN0YXRlW2ldID0gZGZbaV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmKGQgJiYgZC5kYXRhICYmIGQuZGF0YS5qc3RyZWUgJiYgZC5kYXRhLmpzdHJlZS5pY29uKSB7XHJcblx0XHRcdFx0dG1wLmljb24gPSBkLmRhdGEuanN0cmVlLmljb247XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoZCAmJiBkLmRhdGEpIHtcclxuXHRcdFx0XHR0bXAuZGF0YSA9IGQuZGF0YTtcclxuXHRcdFx0XHRpZihkLmRhdGEuanN0cmVlKSB7XHJcblx0XHRcdFx0XHRmb3IoaSBpbiBkLmRhdGEuanN0cmVlKSB7XHJcblx0XHRcdFx0XHRcdGlmKGQuZGF0YS5qc3RyZWUuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuXHRcdFx0XHRcdFx0XHR0bXAuc3RhdGVbaV0gPSBkLmRhdGEuanN0cmVlW2ldO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmKGQgJiYgdHlwZW9mIGQuc3RhdGUgPT09ICdvYmplY3QnKSB7XHJcblx0XHRcdFx0Zm9yIChpIGluIGQuc3RhdGUpIHtcclxuXHRcdFx0XHRcdGlmKGQuc3RhdGUuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuXHRcdFx0XHRcdFx0dG1wLnN0YXRlW2ldID0gZC5zdGF0ZVtpXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoZCAmJiB0eXBlb2YgZC5saV9hdHRyID09PSAnb2JqZWN0Jykge1xyXG5cdFx0XHRcdGZvciAoaSBpbiBkLmxpX2F0dHIpIHtcclxuXHRcdFx0XHRcdGlmKGQubGlfYXR0ci5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG5cdFx0XHRcdFx0XHR0bXAubGlfYXR0cltpXSA9IGQubGlfYXR0cltpXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoIXRtcC5saV9hdHRyLmlkKSB7XHJcblx0XHRcdFx0dG1wLmxpX2F0dHIuaWQgPSB0aWQ7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoZCAmJiB0eXBlb2YgZC5hX2F0dHIgPT09ICdvYmplY3QnKSB7XHJcblx0XHRcdFx0Zm9yIChpIGluIGQuYV9hdHRyKSB7XHJcblx0XHRcdFx0XHRpZihkLmFfYXR0ci5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG5cdFx0XHRcdFx0XHR0bXAuYV9hdHRyW2ldID0gZC5hX2F0dHJbaV07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmKGQgJiYgZC5jaGlsZHJlbiAmJiBkLmNoaWxkcmVuID09PSB0cnVlKSB7XHJcblx0XHRcdFx0dG1wLnN0YXRlLmxvYWRlZCA9IGZhbHNlO1xyXG5cdFx0XHRcdHRtcC5jaGlsZHJlbiA9IFtdO1xyXG5cdFx0XHRcdHRtcC5jaGlsZHJlbl9kID0gW107XHJcblx0XHRcdH1cclxuXHRcdFx0bVt0bXAuaWRdID0gdG1wO1xyXG5cdFx0XHRmb3IoaSA9IDAsIGogPSB0bXAuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0YyA9IHRoaXMuX3BhcnNlX21vZGVsX2Zyb21fZmxhdF9qc29uKG1bdG1wLmNoaWxkcmVuW2ldXSwgdG1wLmlkLCBwcyk7XHJcblx0XHRcdFx0ZSA9IG1bY107XHJcblx0XHRcdFx0dG1wLmNoaWxkcmVuX2QucHVzaChjKTtcclxuXHRcdFx0XHRpZihlLmNoaWxkcmVuX2QubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHR0bXAuY2hpbGRyZW5fZCA9IHRtcC5jaGlsZHJlbl9kLmNvbmNhdChlLmNoaWxkcmVuX2QpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRkZWxldGUgZC5kYXRhO1xyXG5cdFx0XHRkZWxldGUgZC5jaGlsZHJlbjtcclxuXHRcdFx0bVt0bXAuaWRdLm9yaWdpbmFsID0gZDtcclxuXHRcdFx0aWYodG1wLnN0YXRlLnNlbGVjdGVkKSB7XHJcblx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLnB1c2godG1wLmlkKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdG1wLmlkO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogcGFyc2VzIGEgbm9kZSBmcm9tIGEgSlNPTiBvYmplY3QgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGluIG1lbW9yeSB0cmVlIG1vZGVsLiBVc2VkIGludGVybmFsbHkuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICogQG5hbWUgX3BhcnNlX21vZGVsX2Zyb21fanNvbihkIFssIHAsIHBzXSlcclxuXHRcdCAqIEBwYXJhbSAge09iamVjdH0gZCB0aGUgSlNPTiBvYmplY3QgdG8gcGFyc2VcclxuXHRcdCAqIEBwYXJhbSAge1N0cmluZ30gcCB0aGUgcGFyZW50IElEXHJcblx0XHQgKiBAcGFyYW0gIHtBcnJheX0gcHMgbGlzdCBvZiBhbGwgcGFyZW50c1xyXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSB0aGUgSUQgb2YgdGhlIG9iamVjdCBhZGRlZCB0byB0aGUgbW9kZWxcclxuXHRcdCAqL1xyXG5cdFx0X3BhcnNlX21vZGVsX2Zyb21fanNvbiA6IGZ1bmN0aW9uIChkLCBwLCBwcykge1xyXG5cdFx0XHRpZighcHMpIHsgcHMgPSBbXTsgfVxyXG5cdFx0XHRlbHNlIHsgcHMgPSBwcy5jb25jYXQoKTsgfVxyXG5cdFx0XHRpZihwKSB7IHBzLnVuc2hpZnQocCk7IH1cclxuXHRcdFx0dmFyIHRpZCA9IGZhbHNlLCBpLCBqLCBjLCBlLCBtID0gdGhpcy5fbW9kZWwuZGF0YSwgZGYgPSB0aGlzLl9tb2RlbC5kZWZhdWx0X3N0YXRlLCB0bXA7XHJcblx0XHRcdGRvIHtcclxuXHRcdFx0XHR0aWQgPSAnaicgKyB0aGlzLl9pZCArICdfJyArICgrK3RoaXMuX2NudCk7XHJcblx0XHRcdH0gd2hpbGUobVt0aWRdKTtcclxuXHJcblx0XHRcdHRtcCA9IHtcclxuXHRcdFx0XHRpZFx0XHRcdDogZmFsc2UsXHJcblx0XHRcdFx0dGV4dFx0XHQ6IHR5cGVvZiBkID09PSAnc3RyaW5nJyA/IGQgOiAnJyxcclxuXHRcdFx0XHRpY29uXHRcdDogdHlwZW9mIGQgPT09ICdvYmplY3QnICYmIGQuaWNvbiAhPT0gdW5kZWZpbmVkID8gZC5pY29uIDogdHJ1ZSxcclxuXHRcdFx0XHRwYXJlbnRcdFx0OiBwLFxyXG5cdFx0XHRcdHBhcmVudHNcdFx0OiBwcyxcclxuXHRcdFx0XHRjaGlsZHJlblx0OiBbXSxcclxuXHRcdFx0XHRjaGlsZHJlbl9kXHQ6IFtdLFxyXG5cdFx0XHRcdGRhdGFcdFx0OiBudWxsLFxyXG5cdFx0XHRcdHN0YXRlXHRcdDogeyB9LFxyXG5cdFx0XHRcdGxpX2F0dHJcdFx0OiB7IGlkIDogZmFsc2UgfSxcclxuXHRcdFx0XHRhX2F0dHJcdFx0OiB7IGhyZWYgOiAnIycgfSxcclxuXHRcdFx0XHRvcmlnaW5hbFx0OiBmYWxzZVxyXG5cdFx0XHR9O1xyXG5cdFx0XHRmb3IoaSBpbiBkZikge1xyXG5cdFx0XHRcdGlmKGRmLmhhc093blByb3BlcnR5KGkpKSB7XHJcblx0XHRcdFx0XHR0bXAuc3RhdGVbaV0gPSBkZltpXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoZCAmJiBkLmlkKSB7IHRtcC5pZCA9IGQuaWQ7IH1cclxuXHRcdFx0aWYoZCAmJiBkLnRleHQpIHsgdG1wLnRleHQgPSBkLnRleHQ7IH1cclxuXHRcdFx0aWYoZCAmJiBkLmRhdGEgJiYgZC5kYXRhLmpzdHJlZSAmJiBkLmRhdGEuanN0cmVlLmljb24pIHtcclxuXHRcdFx0XHR0bXAuaWNvbiA9IGQuZGF0YS5qc3RyZWUuaWNvbjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZihkICYmIGQuZGF0YSkge1xyXG5cdFx0XHRcdHRtcC5kYXRhID0gZC5kYXRhO1xyXG5cdFx0XHRcdGlmKGQuZGF0YS5qc3RyZWUpIHtcclxuXHRcdFx0XHRcdGZvcihpIGluIGQuZGF0YS5qc3RyZWUpIHtcclxuXHRcdFx0XHRcdFx0aWYoZC5kYXRhLmpzdHJlZS5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG5cdFx0XHRcdFx0XHRcdHRtcC5zdGF0ZVtpXSA9IGQuZGF0YS5qc3RyZWVbaV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoZCAmJiB0eXBlb2YgZC5zdGF0ZSA9PT0gJ29iamVjdCcpIHtcclxuXHRcdFx0XHRmb3IgKGkgaW4gZC5zdGF0ZSkge1xyXG5cdFx0XHRcdFx0aWYoZC5zdGF0ZS5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG5cdFx0XHRcdFx0XHR0bXAuc3RhdGVbaV0gPSBkLnN0YXRlW2ldO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZihkICYmIHR5cGVvZiBkLmxpX2F0dHIgPT09ICdvYmplY3QnKSB7XHJcblx0XHRcdFx0Zm9yIChpIGluIGQubGlfYXR0cikge1xyXG5cdFx0XHRcdFx0aWYoZC5saV9hdHRyLmhhc093blByb3BlcnR5KGkpKSB7XHJcblx0XHRcdFx0XHRcdHRtcC5saV9hdHRyW2ldID0gZC5saV9hdHRyW2ldO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZih0bXAubGlfYXR0ci5pZCAmJiAhdG1wLmlkKSB7XHJcblx0XHRcdFx0dG1wLmlkID0gdG1wLmxpX2F0dHIuaWQ7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoIXRtcC5pZCkge1xyXG5cdFx0XHRcdHRtcC5pZCA9IHRpZDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZighdG1wLmxpX2F0dHIuaWQpIHtcclxuXHRcdFx0XHR0bXAubGlfYXR0ci5pZCA9IHRtcC5pZDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZihkICYmIHR5cGVvZiBkLmFfYXR0ciA9PT0gJ29iamVjdCcpIHtcclxuXHRcdFx0XHRmb3IgKGkgaW4gZC5hX2F0dHIpIHtcclxuXHRcdFx0XHRcdGlmKGQuYV9hdHRyLmhhc093blByb3BlcnR5KGkpKSB7XHJcblx0XHRcdFx0XHRcdHRtcC5hX2F0dHJbaV0gPSBkLmFfYXR0cltpXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoZCAmJiBkLmNoaWxkcmVuICYmIGQuY2hpbGRyZW4ubGVuZ3RoKSB7XHJcblx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gZC5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHRcdGMgPSB0aGlzLl9wYXJzZV9tb2RlbF9mcm9tX2pzb24oZC5jaGlsZHJlbltpXSwgdG1wLmlkLCBwcyk7XHJcblx0XHRcdFx0XHRlID0gbVtjXTtcclxuXHRcdFx0XHRcdHRtcC5jaGlsZHJlbi5wdXNoKGMpO1xyXG5cdFx0XHRcdFx0aWYoZS5jaGlsZHJlbl9kLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHR0bXAuY2hpbGRyZW5fZCA9IHRtcC5jaGlsZHJlbl9kLmNvbmNhdChlLmNoaWxkcmVuX2QpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0bXAuY2hpbGRyZW5fZCA9IHRtcC5jaGlsZHJlbl9kLmNvbmNhdCh0bXAuY2hpbGRyZW4pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKGQgJiYgZC5jaGlsZHJlbiAmJiBkLmNoaWxkcmVuID09PSB0cnVlKSB7XHJcblx0XHRcdFx0dG1wLnN0YXRlLmxvYWRlZCA9IGZhbHNlO1xyXG5cdFx0XHRcdHRtcC5jaGlsZHJlbiA9IFtdO1xyXG5cdFx0XHRcdHRtcC5jaGlsZHJlbl9kID0gW107XHJcblx0XHRcdH1cclxuXHRcdFx0ZGVsZXRlIGQuZGF0YTtcclxuXHRcdFx0ZGVsZXRlIGQuY2hpbGRyZW47XHJcblx0XHRcdHRtcC5vcmlnaW5hbCA9IGQ7XHJcblx0XHRcdG1bdG1wLmlkXSA9IHRtcDtcclxuXHRcdFx0aWYodG1wLnN0YXRlLnNlbGVjdGVkKSB7XHJcblx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLnB1c2godG1wLmlkKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdG1wLmlkO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogcmVkcmF3cyBhbGwgbm9kZXMgdGhhdCBuZWVkIHRvIGJlIHJlZHJhd24uIFVzZWQgaW50ZXJuYWxseS5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKiBAbmFtZSBfcmVkcmF3KClcclxuXHRcdCAqIEB0cmlnZ2VyIHJlZHJhdy5qc3RyZWVcclxuXHRcdCAqL1xyXG5cdFx0X3JlZHJhdyA6IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0dmFyIG5vZGVzID0gdGhpcy5fbW9kZWwuZm9yY2VfZnVsbF9yZWRyYXcgPyB0aGlzLl9tb2RlbC5kYXRhWycjJ10uY2hpbGRyZW4uY29uY2F0KFtdKSA6IHRoaXMuX21vZGVsLmNoYW5nZWQuY29uY2F0KFtdKSxcclxuXHRcdFx0XHRmID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVUwnKSwgdG1wLCBpLCBqO1xyXG5cdFx0XHRmb3IoaSA9IDAsIGogPSBub2Rlcy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHR0bXAgPSB0aGlzLnJlZHJhd19ub2RlKG5vZGVzW2ldLCB0cnVlLCB0aGlzLl9tb2RlbC5mb3JjZV9mdWxsX3JlZHJhdyk7XHJcblx0XHRcdFx0aWYodG1wICYmIHRoaXMuX21vZGVsLmZvcmNlX2Z1bGxfcmVkcmF3KSB7XHJcblx0XHRcdFx0XHRmLmFwcGVuZENoaWxkKHRtcCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmKHRoaXMuX21vZGVsLmZvcmNlX2Z1bGxfcmVkcmF3KSB7XHJcblx0XHRcdFx0Zi5jbGFzc05hbWUgPSB0aGlzLmdldF9jb250YWluZXJfdWwoKVswXS5jbGFzc05hbWU7XHJcblx0XHRcdFx0dGhpcy5lbGVtZW50LmVtcHR5KCkuYXBwZW5kKGYpO1xyXG5cdFx0XHRcdC8vdGhpcy5nZXRfY29udGFpbmVyX3VsKClbMF0uYXBwZW5kQ2hpbGQoZik7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5fbW9kZWwuZm9yY2VfZnVsbF9yZWRyYXcgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5fbW9kZWwuY2hhbmdlZCA9IFtdO1xyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogdHJpZ2dlcmVkIGFmdGVyIG5vZGVzIGFyZSByZWRyYXduXHJcblx0XHRcdCAqIEBldmVudFxyXG5cdFx0XHQgKiBAbmFtZSByZWRyYXcuanN0cmVlXHJcblx0XHRcdCAqIEBwYXJhbSB7YXJyYXl9IG5vZGVzIHRoZSByZWRyYXduIG5vZGVzXHJcblx0XHRcdCAqL1xyXG5cdFx0XHR0aGlzLnRyaWdnZXIoJ3JlZHJhdycsIHsgXCJub2Rlc1wiIDogbm9kZXMgfSk7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiByZWRyYXdzIGFsbCBub2RlcyB0aGF0IG5lZWQgdG8gYmUgcmVkcmF3biBvciBvcHRpb25hbGx5IC0gdGhlIHdob2xlIHRyZWVcclxuXHRcdCAqIEBuYW1lIHJlZHJhdyhbZnVsbF0pXHJcblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IGZ1bGwgaWYgc2V0IHRvIGB0cnVlYCBhbGwgbm9kZXMgYXJlIHJlZHJhd24uXHJcblx0XHQgKi9cclxuXHRcdHJlZHJhdyA6IGZ1bmN0aW9uIChmdWxsKSB7XHJcblx0XHRcdGlmKGZ1bGwpIHtcclxuXHRcdFx0XHR0aGlzLl9tb2RlbC5mb3JjZV9mdWxsX3JlZHJhdyA9IHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9pZih0aGlzLl9tb2RlbC5yZWRyYXdfdGltZW91dCkge1xyXG5cdFx0XHQvL1x0Y2xlYXJUaW1lb3V0KHRoaXMuX21vZGVsLnJlZHJhd190aW1lb3V0KTtcclxuXHRcdFx0Ly99XHJcblx0XHRcdC8vdGhpcy5fbW9kZWwucmVkcmF3X3RpbWVvdXQgPSBzZXRUaW1lb3V0KCQucHJveHkodGhpcy5fcmVkcmF3LCB0aGlzKSwwKTtcclxuXHRcdFx0dGhpcy5fcmVkcmF3KCk7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiByZWRyYXdzIGEgc2luZ2xlIG5vZGUuIFVzZWQgaW50ZXJuYWxseS5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKiBAbmFtZSByZWRyYXdfbm9kZShub2RlLCBkZWVwLCBpc19jYWxsYmFjaylcclxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG5vZGUgdGhlIG5vZGUgdG8gcmVkcmF3XHJcblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IGRlZXAgc2hvdWxkIGNoaWxkIG5vZGVzIGJlIHJlZHJhd24gdG9vXHJcblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IGlzX2NhbGxiYWNrIGlzIHRoaXMgYSByZWN1cnNpb24gY2FsbFxyXG5cdFx0ICovXHJcblx0XHRyZWRyYXdfbm9kZSA6IGZ1bmN0aW9uIChub2RlLCBkZWVwLCBpc19jYWxsYmFjaykge1xyXG5cdFx0XHR2YXIgb2JqID0gdGhpcy5nZXRfbm9kZShub2RlKSxcclxuXHRcdFx0XHRwYXIgPSBmYWxzZSxcclxuXHRcdFx0XHRpbmQgPSBmYWxzZSxcclxuXHRcdFx0XHRvbGQgPSBmYWxzZSxcclxuXHRcdFx0XHRpID0gZmFsc2UsXHJcblx0XHRcdFx0aiA9IGZhbHNlLFxyXG5cdFx0XHRcdGsgPSBmYWxzZSxcclxuXHRcdFx0XHRjID0gJycsXHJcblx0XHRcdFx0ZCA9IGRvY3VtZW50LFxyXG5cdFx0XHRcdG0gPSB0aGlzLl9tb2RlbC5kYXRhLFxyXG5cdFx0XHRcdGYgPSBmYWxzZSxcclxuXHRcdFx0XHRzID0gZmFsc2U7XHJcblx0XHRcdGlmKCFvYmopIHsgcmV0dXJuIGZhbHNlOyB9XHJcblx0XHRcdGlmKG9iai5pZCA9PT0gJyMnKSB7ICByZXR1cm4gdGhpcy5yZWRyYXcodHJ1ZSk7IH1cclxuXHRcdFx0ZGVlcCA9IGRlZXAgfHwgb2JqLmNoaWxkcmVuLmxlbmd0aCA9PT0gMDtcclxuXHRcdFx0bm9kZSA9IGQuZ2V0RWxlbWVudEJ5SWQob2JqLmlkKTsgLy8sIHRoaXMuZWxlbWVudCk7XHJcblx0XHRcdGlmKCFub2RlKSB7XHJcblx0XHRcdFx0ZGVlcCA9IHRydWU7XHJcblx0XHRcdFx0Ly9ub2RlID0gZC5jcmVhdGVFbGVtZW50KCdMSScpO1xyXG5cdFx0XHRcdGlmKCFpc19jYWxsYmFjaykge1xyXG5cdFx0XHRcdFx0cGFyID0gb2JqLnBhcmVudCAhPT0gJyMnID8gJCgnIycgKyBvYmoucGFyZW50LCB0aGlzLmVsZW1lbnQpWzBdIDogbnVsbDtcclxuXHRcdFx0XHRcdGlmKHBhciAhPT0gbnVsbCAmJiAoIXBhciB8fCAhbVtvYmoucGFyZW50XS5zdGF0ZS5vcGVuZWQpKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGluZCA9ICQuaW5BcnJheShvYmouaWQsIHBhciA9PT0gbnVsbCA/IG1bJyMnXS5jaGlsZHJlbiA6IG1bb2JqLnBhcmVudF0uY2hpbGRyZW4pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRub2RlID0gJChub2RlKTtcclxuXHRcdFx0XHRpZighaXNfY2FsbGJhY2spIHtcclxuXHRcdFx0XHRcdHBhciA9IG5vZGUucGFyZW50KCkucGFyZW50KClbMF07XHJcblx0XHRcdFx0XHRpZihwYXIgPT09IHRoaXMuZWxlbWVudFswXSkge1xyXG5cdFx0XHRcdFx0XHRwYXIgPSBudWxsO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aW5kID0gbm9kZS5pbmRleCgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBtW29iai5pZF0uZGF0YSA9IG5vZGUuZGF0YSgpOyAvLyB1c2Ugb25seSBub2RlJ3MgZGF0YSwgbm8gbmVlZCB0byB0b3VjaCBqcXVlcnkgc3RvcmFnZVxyXG5cdFx0XHRcdGlmKCFkZWVwICYmIG9iai5jaGlsZHJlbi5sZW5ndGggJiYgIW5vZGUuY2hpbGRyZW4oJ3VsJykubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRkZWVwID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoIWRlZXApIHtcclxuXHRcdFx0XHRcdG9sZCA9IG5vZGUuY2hpbGRyZW4oJ1VMJylbMF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHMgPSBub2RlLmF0dHIoJ2FyaWEtc2VsZWN0ZWQnKTtcclxuXHRcdFx0XHRmID0gbm9kZS5jaGlsZHJlbignLmpzdHJlZS1hbmNob3InKVswXSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuXHRcdFx0XHRub2RlLnJlbW92ZSgpO1xyXG5cdFx0XHRcdC8vbm9kZSA9IGQuY3JlYXRlRWxlbWVudCgnTEknKTtcclxuXHRcdFx0XHQvL25vZGUgPSBub2RlWzBdO1xyXG5cdFx0XHR9XHJcblx0XHRcdG5vZGUgPSBfbm9kZS5jbG9uZU5vZGUodHJ1ZSk7XHJcblx0XHRcdC8vIG5vZGUgaXMgRE9NLCBkZWVwIGlzIGJvb2xlYW5cclxuXHJcblx0XHRcdGMgPSAnanN0cmVlLW5vZGUgJztcclxuXHRcdFx0Zm9yKGkgaW4gb2JqLmxpX2F0dHIpIHtcclxuXHRcdFx0XHRpZihvYmoubGlfYXR0ci5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG5cdFx0XHRcdFx0aWYoaSA9PT0gJ2lkJykgeyBjb250aW51ZTsgfVxyXG5cdFx0XHRcdFx0aWYoaSAhPT0gJ2NsYXNzJykge1xyXG5cdFx0XHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZShpLCBvYmoubGlfYXR0cltpXSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0YyArPSBvYmoubGlfYXR0cltpXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYocyAmJiBzICE9PSBcImZhbHNlXCIpIHtcclxuXHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIHRydWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKCFvYmouY2hpbGRyZW4ubGVuZ3RoICYmIG9iai5zdGF0ZS5sb2FkZWQpIHtcclxuXHRcdFx0XHRjICs9ICcganN0cmVlLWxlYWYnO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGMgKz0gb2JqLnN0YXRlLm9wZW5lZCA/ICcganN0cmVlLW9wZW4nIDogJyBqc3RyZWUtY2xvc2VkJztcclxuXHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIG9iai5zdGF0ZS5vcGVuZWQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKG9iai5wYXJlbnQgIT09IG51bGwgJiYgbVtvYmoucGFyZW50XS5jaGlsZHJlblttW29iai5wYXJlbnRdLmNoaWxkcmVuLmxlbmd0aCAtIDFdID09PSBvYmouaWQpIHtcclxuXHRcdFx0XHRjICs9ICcganN0cmVlLWxhc3QnO1xyXG5cdFx0XHR9XHJcblx0XHRcdG5vZGUuaWQgPSBvYmouaWQ7XHJcblx0XHRcdG5vZGUuY2xhc3NOYW1lID0gYztcclxuXHRcdFx0YyA9ICggb2JqLnN0YXRlLnNlbGVjdGVkID8gJyBqc3RyZWUtY2xpY2tlZCcgOiAnJykgKyAoIG9iai5zdGF0ZS5kaXNhYmxlZCA/ICcganN0cmVlLWRpc2FibGVkJyA6ICcnKTtcclxuXHRcdFx0Zm9yKGogaW4gb2JqLmFfYXR0cikge1xyXG5cdFx0XHRcdGlmKG9iai5hX2F0dHIuaGFzT3duUHJvcGVydHkoaikpIHtcclxuXHRcdFx0XHRcdGlmKGogPT09ICdocmVmJyAmJiBvYmouYV9hdHRyW2pdID09PSAnIycpIHsgY29udGludWU7IH1cclxuXHRcdFx0XHRcdGlmKGogIT09ICdjbGFzcycpIHtcclxuXHRcdFx0XHRcdFx0bm9kZS5jaGlsZE5vZGVzWzFdLnNldEF0dHJpYnV0ZShqLCBvYmouYV9hdHRyW2pdKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRjICs9ICcgJyArIG9iai5hX2F0dHJbal07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmKGMubGVuZ3RoKSB7XHJcblx0XHRcdFx0bm9kZS5jaGlsZE5vZGVzWzFdLmNsYXNzTmFtZSA9ICdqc3RyZWUtYW5jaG9yICcgKyBjO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKChvYmouaWNvbiAmJiBvYmouaWNvbiAhPT0gdHJ1ZSkgfHwgb2JqLmljb24gPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0aWYob2JqLmljb24gPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRub2RlLmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5jbGFzc05hbWUgKz0gJyBqc3RyZWUtdGhlbWVpY29uLWhpZGRlbic7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgaWYob2JqLmljb24uaW5kZXhPZignLycpID09PSAtMSAmJiBvYmouaWNvbi5pbmRleE9mKCcuJykgPT09IC0xKSB7XHJcblx0XHRcdFx0XHRub2RlLmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5jbGFzc05hbWUgKz0gJyAnICsgb2JqLmljb24gKyAnIGpzdHJlZS10aGVtZWljb24tY3VzdG9tJztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRub2RlLmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSAndXJsKCcrb2JqLmljb24rJyknO1xyXG5cdFx0XHRcdFx0bm9kZS5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0uc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uID0gJ2NlbnRlciBjZW50ZXInO1xyXG5cdFx0XHRcdFx0bm9kZS5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0uc3R5bGUuYmFja2dyb3VuZFNpemUgPSAnYXV0byc7XHJcblx0XHRcdFx0XHRub2RlLmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5jbGFzc05hbWUgKz0gJyBqc3RyZWUtdGhlbWVpY29uLWN1c3RvbSc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vbm9kZS5jaGlsZE5vZGVzWzFdLmFwcGVuZENoaWxkKGQuY3JlYXRlVGV4dE5vZGUob2JqLnRleHQpKTtcclxuXHRcdFx0bm9kZS5jaGlsZE5vZGVzWzFdLmlubmVySFRNTCArPSBvYmoudGV4dDtcclxuXHRcdFx0Ly8gaWYob2JqLmRhdGEpIHsgJC5kYXRhKG5vZGUsIG9iai5kYXRhKTsgfSAvLyBhbHdheXMgd29yayB3aXRoIG5vZGUncyBkYXRhLCBubyBuZWVkIHRvIHRvdWNoIGpxdWVyeSBzdG9yZVxyXG5cclxuXHRcdFx0aWYoZGVlcCAmJiBvYmouY2hpbGRyZW4ubGVuZ3RoICYmIG9iai5zdGF0ZS5vcGVuZWQpIHtcclxuXHRcdFx0XHRrID0gZC5jcmVhdGVFbGVtZW50KCdVTCcpO1xyXG5cdFx0XHRcdGsuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2dyb3VwJyk7XHJcblx0XHRcdFx0ay5jbGFzc05hbWUgPSAnanN0cmVlLWNoaWxkcmVuJztcclxuXHRcdFx0XHRmb3IoaSA9IDAsIGogPSBvYmouY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0XHRrLmFwcGVuZENoaWxkKHRoaXMucmVkcmF3X25vZGUob2JqLmNoaWxkcmVuW2ldLCBkZWVwLCB0cnVlKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdG5vZGUuYXBwZW5kQ2hpbGQoayk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYob2xkKSB7XHJcblx0XHRcdFx0bm9kZS5hcHBlbmRDaGlsZChvbGQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKCFpc19jYWxsYmFjaykge1xyXG5cdFx0XHRcdC8vIGFwcGVuZCBiYWNrIHVzaW5nIHBhciAvIGluZFxyXG5cdFx0XHRcdGlmKCFwYXIpIHtcclxuXHRcdFx0XHRcdHBhciA9IHRoaXMuZWxlbWVudFswXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoIXBhci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnVUwnKS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdGkgPSBkLmNyZWF0ZUVsZW1lbnQoJ1VMJyk7XHJcblx0XHRcdFx0XHRpLnNldEF0dHJpYnV0ZSgncm9sZScsICdncm91cCcpO1xyXG5cdFx0XHRcdFx0aS5jbGFzc05hbWUgPSAnanN0cmVlLWNoaWxkcmVuJztcclxuXHRcdFx0XHRcdHBhci5hcHBlbmRDaGlsZChpKTtcclxuXHRcdFx0XHRcdHBhciA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0cGFyID0gcGFyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdVTCcpWzBdO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYoaW5kIDwgcGFyLmNoaWxkTm9kZXMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRwYXIuaW5zZXJ0QmVmb3JlKG5vZGUsIHBhci5jaGlsZE5vZGVzW2luZF0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdHBhci5hcHBlbmRDaGlsZChub2RlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoZikge1xyXG5cdFx0XHRcdFx0bm9kZS5jaGlsZE5vZGVzWzFdLmZvY3VzKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBub2RlO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogb3BlbnMgYSBub2RlLCByZXZhbGluZyBpdHMgY2hpbGRyZW4uIElmIHRoZSBub2RlIGlzIG5vdCBsb2FkZWQgaXQgd2lsbCBiZSBsb2FkZWQgYW5kIG9wZW5lZCBvbmNlIHJlYWR5LlxyXG5cdFx0ICogQG5hbWUgb3Blbl9ub2RlKG9iaiBbLCBjYWxsYmFjaywgYW5pbWF0aW9uXSlcclxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG9iaiB0aGUgbm9kZSB0byBvcGVuXHJcblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgbm9kZSBpcyBvcGVuZWRcclxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSBhbmltYXRpb24gdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgd2hlbiBvcGVuaW5nIHRoZSBub2RlIChvdmVycmlkZXMgdGhlIGBjb3JlLmFuaW1hdGlvbmAgc2V0dGluZykuIFVzZSBgZmFsc2VgIGZvciBubyBhbmltYXRpb24uXHJcblx0XHQgKiBAdHJpZ2dlciBvcGVuX25vZGUuanN0cmVlLCBhZnRlcl9vcGVuLmpzdHJlZVxyXG5cdFx0ICovXHJcblx0XHRvcGVuX25vZGUgOiBmdW5jdGlvbiAob2JqLCBjYWxsYmFjaywgYW5pbWF0aW9uKSB7XHJcblx0XHRcdHZhciB0MSwgdDIsIGQsIHQ7XHJcblx0XHRcdGlmKCQuaXNBcnJheShvYmopKSB7XHJcblx0XHRcdFx0b2JqID0gb2JqLnNsaWNlKCk7XHJcblx0XHRcdFx0Zm9yKHQxID0gMCwgdDIgPSBvYmoubGVuZ3RoOyB0MSA8IHQyOyB0MSsrKSB7XHJcblx0XHRcdFx0XHR0aGlzLm9wZW5fbm9kZShvYmpbdDFdLCBjYWxsYmFjaywgYW5pbWF0aW9uKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRpZighb2JqIHx8IG9iai5pZCA9PT0gJyMnKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGFuaW1hdGlvbiA9IGFuaW1hdGlvbiA9PT0gdW5kZWZpbmVkID8gdGhpcy5zZXR0aW5ncy5jb3JlLmFuaW1hdGlvbiA6IGFuaW1hdGlvbjtcclxuXHRcdFx0aWYoIXRoaXMuaXNfY2xvc2VkKG9iaikpIHtcclxuXHRcdFx0XHRpZihjYWxsYmFjaykge1xyXG5cdFx0XHRcdFx0Y2FsbGJhY2suY2FsbCh0aGlzLCBvYmosIGZhbHNlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKCF0aGlzLmlzX2xvYWRlZChvYmopKSB7XHJcblx0XHRcdFx0aWYodGhpcy5pc19sb2FkaW5nKG9iaikpIHtcclxuXHRcdFx0XHRcdHJldHVybiBzZXRUaW1lb3V0KCQucHJveHkoZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5fbm9kZShvYmosIGNhbGxiYWNrLCBhbmltYXRpb24pO1xyXG5cdFx0XHRcdFx0fSwgdGhpcyksIDUwMCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMubG9hZF9ub2RlKG9iaiwgZnVuY3Rpb24gKG8sIG9rKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gb2sgPyB0aGlzLm9wZW5fbm9kZShvLCBjYWxsYmFjaywgYW5pbWF0aW9uKSA6IChjYWxsYmFjayA/IGNhbGxiYWNrLmNhbGwodGhpcywgbywgZmFsc2UpIDogZmFsc2UpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGQgPSB0aGlzLmdldF9ub2RlKG9iaiwgdHJ1ZSk7XHJcblx0XHRcdFx0dCA9IHRoaXM7XHJcblx0XHRcdFx0aWYoZC5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdGlmKG9iai5jaGlsZHJlbi5sZW5ndGggJiYgIXRoaXMuX2ZpcnN0Q2hpbGQoZC5jaGlsZHJlbigndWwnKVswXSkpIHtcclxuXHRcdFx0XHRcdFx0b2JqLnN0YXRlLm9wZW5lZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVkcmF3X25vZGUob2JqLCB0cnVlKTtcclxuXHRcdFx0XHRcdFx0ZCA9IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmKCFhbmltYXRpb24pIHtcclxuXHRcdFx0XHRcdFx0ZFswXS5jbGFzc05hbWUgPSBkWzBdLmNsYXNzTmFtZS5yZXBsYWNlKCdqc3RyZWUtY2xvc2VkJywgJ2pzdHJlZS1vcGVuJyk7XHJcblx0XHRcdFx0XHRcdGRbMF0uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCB0cnVlKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRkXHJcblx0XHRcdFx0XHRcdFx0LmNoaWxkcmVuKFwidWxcIikuY3NzKFwiZGlzcGxheVwiLFwibm9uZVwiKS5lbmQoKVxyXG5cdFx0XHRcdFx0XHRcdC5yZW1vdmVDbGFzcyhcImpzdHJlZS1jbG9zZWRcIikuYWRkQ2xhc3MoXCJqc3RyZWUtb3BlblwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCB0cnVlKVxyXG5cdFx0XHRcdFx0XHRcdC5jaGlsZHJlbihcInVsXCIpLnN0b3AodHJ1ZSwgdHJ1ZSlcclxuXHRcdFx0XHRcdFx0XHRcdC5zbGlkZURvd24oYW5pbWF0aW9uLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3R5bGUuZGlzcGxheSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHQudHJpZ2dlcihcImFmdGVyX29wZW5cIiwgeyBcIm5vZGVcIiA6IG9iaiB9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRvYmouc3RhdGUub3BlbmVkID0gdHJ1ZTtcclxuXHRcdFx0XHRpZihjYWxsYmFjaykge1xyXG5cdFx0XHRcdFx0Y2FsbGJhY2suY2FsbCh0aGlzLCBvYmosIHRydWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvKipcclxuXHRcdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhIG5vZGUgaXMgb3BlbmVkIChpZiB0aGVyZSBpcyBhbiBhbmltYXRpb24gaXQgd2lsbCBub3QgYmUgY29tcGxldGVkIHlldClcclxuXHRcdFx0XHQgKiBAZXZlbnRcclxuXHRcdFx0XHQgKiBAbmFtZSBvcGVuX25vZGUuanN0cmVlXHJcblx0XHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGUgdGhlIG9wZW5lZCBub2RlXHJcblx0XHRcdFx0ICovXHJcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCdvcGVuX25vZGUnLCB7IFwibm9kZVwiIDogb2JqIH0pO1xyXG5cdFx0XHRcdGlmKCFhbmltYXRpb24gfHwgIWQubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHQvKipcclxuXHRcdFx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIGEgbm9kZSBpcyBvcGVuZWQgYW5kIHRoZSBhbmltYXRpb24gaXMgY29tcGxldGVcclxuXHRcdFx0XHRcdCAqIEBldmVudFxyXG5cdFx0XHRcdFx0ICogQG5hbWUgYWZ0ZXJfb3Blbi5qc3RyZWVcclxuXHRcdFx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBub2RlIHRoZSBvcGVuZWQgbm9kZVxyXG5cdFx0XHRcdFx0ICovXHJcblx0XHRcdFx0XHR0aGlzLnRyaWdnZXIoXCJhZnRlcl9vcGVuXCIsIHsgXCJub2RlXCIgOiBvYmogfSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBvcGVucyBldmVyeSBwYXJlbnQgb2YgYSBub2RlIChub2RlIHNob3VsZCBiZSBsb2FkZWQpXHJcblx0XHQgKiBAbmFtZSBfb3Blbl90byhvYmopXHJcblx0XHQgKiBAcGFyYW0ge21peGVkfSBvYmogdGhlIG5vZGUgdG8gcmV2ZWFsXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHRfb3Blbl90byA6IGZ1bmN0aW9uIChvYmopIHtcclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRpZighb2JqIHx8IG9iai5pZCA9PT0gJyMnKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBpLCBqLCBwID0gb2JqLnBhcmVudHM7XHJcblx0XHRcdGZvcihpID0gMCwgaiA9IHAubGVuZ3RoOyBpIDwgajsgaSs9MSkge1xyXG5cdFx0XHRcdGlmKGkgIT09ICcjJykge1xyXG5cdFx0XHRcdFx0dGhpcy5vcGVuX25vZGUocFtpXSwgZmFsc2UsIDApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gJChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvYmouaWQpKTtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGNsb3NlcyBhIG5vZGUsIGhpZGluZyBpdHMgY2hpbGRyZW5cclxuXHRcdCAqIEBuYW1lIGNsb3NlX25vZGUob2JqIFssIGFuaW1hdGlvbl0pXHJcblx0XHQgKiBAcGFyYW0ge21peGVkfSBvYmogdGhlIG5vZGUgdG8gY2xvc2VcclxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSBhbmltYXRpb24gdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgd2hlbiBjbG9zaW5nIHRoZSBub2RlIChvdmVycmlkZXMgdGhlIGBjb3JlLmFuaW1hdGlvbmAgc2V0dGluZykuIFVzZSBgZmFsc2VgIGZvciBubyBhbmltYXRpb24uXHJcblx0XHQgKiBAdHJpZ2dlciBjbG9zZV9ub2RlLmpzdHJlZSwgYWZ0ZXJfY2xvc2UuanN0cmVlXHJcblx0XHQgKi9cclxuXHRcdGNsb3NlX25vZGUgOiBmdW5jdGlvbiAob2JqLCBhbmltYXRpb24pIHtcclxuXHRcdFx0dmFyIHQxLCB0MiwgdCwgZDtcclxuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcclxuXHRcdFx0XHRvYmogPSBvYmouc2xpY2UoKTtcclxuXHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IG9iai5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcclxuXHRcdFx0XHRcdHRoaXMuY2xvc2Vfbm9kZShvYmpbdDFdLCBhbmltYXRpb24pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XHJcblx0XHRcdGlmKCFvYmogfHwgb2JqLmlkID09PSAnIycpIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdFx0YW5pbWF0aW9uID0gYW5pbWF0aW9uID09PSB1bmRlZmluZWQgPyB0aGlzLnNldHRpbmdzLmNvcmUuYW5pbWF0aW9uIDogYW5pbWF0aW9uO1xyXG5cdFx0XHR0ID0gdGhpcztcclxuXHRcdFx0ZCA9IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKTtcclxuXHRcdFx0aWYoZC5sZW5ndGgpIHtcclxuXHRcdFx0XHRpZighYW5pbWF0aW9uKSB7XHJcblx0XHRcdFx0XHRkWzBdLmNsYXNzTmFtZSA9IGRbMF0uY2xhc3NOYW1lLnJlcGxhY2UoJ2pzdHJlZS1vcGVuJywgJ2pzdHJlZS1jbG9zZWQnKTtcclxuXHRcdFx0XHRcdGQuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwgZmFsc2UpLmNoaWxkcmVuKCd1bCcpLnJlbW92ZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdGRcclxuXHRcdFx0XHRcdFx0LmNoaWxkcmVuKFwidWxcIikuYXR0cihcInN0eWxlXCIsXCJkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnRcIikuZW5kKClcclxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKFwianN0cmVlLW9wZW5cIikuYWRkQ2xhc3MoXCJqc3RyZWUtY2xvc2VkXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsIGZhbHNlKVxyXG5cdFx0XHRcdFx0XHQuY2hpbGRyZW4oXCJ1bFwiKS5zdG9wKHRydWUsIHRydWUpLnNsaWRlVXAoYW5pbWF0aW9uLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRkLmNoaWxkcmVuKCd1bCcpLnJlbW92ZSgpO1xyXG5cdFx0XHRcdFx0XHRcdHQudHJpZ2dlcihcImFmdGVyX2Nsb3NlXCIsIHsgXCJub2RlXCIgOiBvYmogfSk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRvYmouc3RhdGUub3BlbmVkID0gZmFsc2U7XHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhIG5vZGUgaXMgY2xvc2VkIChpZiB0aGVyZSBpcyBhbiBhbmltYXRpb24gaXQgd2lsbCBub3QgYmUgY29tcGxldGUgeWV0KVxyXG5cdFx0XHQgKiBAZXZlbnRcclxuXHRcdFx0ICogQG5hbWUgY2xvc2Vfbm9kZS5qc3RyZWVcclxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGUgdGhlIGNsb3NlZCBub2RlXHJcblx0XHRcdCAqL1xyXG5cdFx0XHR0aGlzLnRyaWdnZXIoJ2Nsb3NlX25vZGUnLHsgXCJub2RlXCIgOiBvYmogfSk7XHJcblx0XHRcdGlmKCFhbmltYXRpb24gfHwgIWQubGVuZ3RoKSB7XHJcblx0XHRcdFx0LyoqXHJcblx0XHRcdFx0ICogdHJpZ2dlcmVkIHdoZW4gYSBub2RlIGlzIGNsb3NlZCBhbmQgdGhlIGFuaW1hdGlvbiBpcyBjb21wbGV0ZVxyXG5cdFx0XHRcdCAqIEBldmVudFxyXG5cdFx0XHRcdCAqIEBuYW1lIGFmdGVyX2Nsb3NlLmpzdHJlZVxyXG5cdFx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBub2RlIHRoZSBjbG9zZWQgbm9kZVxyXG5cdFx0XHRcdCAqL1xyXG5cdFx0XHRcdHRoaXMudHJpZ2dlcihcImFmdGVyX2Nsb3NlXCIsIHsgXCJub2RlXCIgOiBvYmogfSk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIHRvZ2dsZXMgYSBub2RlIC0gY2xvc2luZyBpdCBpZiBpdCBpcyBvcGVuLCBvcGVuaW5nIGl0IGlmIGl0IGlzIGNsb3NlZFxyXG5cdFx0ICogQG5hbWUgdG9nZ2xlX25vZGUob2JqKVxyXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gb2JqIHRoZSBub2RlIHRvIHRvZ2dsZVxyXG5cdFx0ICovXHJcblx0XHR0b2dnbGVfbm9kZSA6IGZ1bmN0aW9uIChvYmopIHtcclxuXHRcdFx0dmFyIHQxLCB0MjtcclxuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcclxuXHRcdFx0XHRvYmogPSBvYmouc2xpY2UoKTtcclxuXHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IG9iai5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcclxuXHRcdFx0XHRcdHRoaXMudG9nZ2xlX25vZGUob2JqW3QxXSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKHRoaXMuaXNfY2xvc2VkKG9iaikpIHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5vcGVuX25vZGUob2JqKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZih0aGlzLmlzX29wZW4ob2JqKSkge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb3NlX25vZGUob2JqKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogb3BlbnMgYWxsIG5vZGVzIHdpdGhpbiBhIG5vZGUgKG9yIHRoZSB0cmVlKSwgcmV2YWxpbmcgdGhlaXIgY2hpbGRyZW4uIElmIHRoZSBub2RlIGlzIG5vdCBsb2FkZWQgaXQgd2lsbCBiZSBsb2FkZWQgYW5kIG9wZW5lZCBvbmNlIHJlYWR5LlxyXG5cdFx0ICogQG5hbWUgb3Blbl9hbGwoW29iaiwgYW5pbWF0aW9uLCBvcmlnaW5hbF9vYmpdKVxyXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gb2JqIHRoZSBub2RlIHRvIG9wZW4gcmVjdXJzaXZlbHksIG9taXQgdG8gb3BlbiBhbGwgbm9kZXMgaW4gdGhlIHRyZWVcclxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSBhbmltYXRpb24gdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgd2hlbiBvcGVuaW5nIHRoZSBub2RlcywgdGhlIGRlZmF1bHQgaXMgbm8gYW5pbWF0aW9uXHJcblx0XHQgKiBAcGFyYW0ge2pRdWVyeX0gcmVmZXJlbmNlIHRvIHRoZSBub2RlIHRoYXQgc3RhcnRlZCB0aGUgcHJvY2VzcyAoaW50ZXJuYWwgdXNlKVxyXG5cdFx0ICogQHRyaWdnZXIgb3Blbl9hbGwuanN0cmVlXHJcblx0XHQgKi9cclxuXHRcdG9wZW5fYWxsIDogZnVuY3Rpb24gKG9iaiwgYW5pbWF0aW9uLCBvcmlnaW5hbF9vYmopIHtcclxuXHRcdFx0aWYoIW9iaikgeyBvYmogPSAnIyc7IH1cclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRpZighb2JqKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cdFx0XHR2YXIgZG9tID0gb2JqLmlkID09PSAnIycgPyB0aGlzLmdldF9jb250YWluZXJfdWwoKSA6IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKSwgaSwgaiwgX3RoaXM7XHJcblx0XHRcdGlmKCFkb20ubGVuZ3RoKSB7XHJcblx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gb2JqLmNoaWxkcmVuX2QubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0XHRpZih0aGlzLmlzX2Nsb3NlZCh0aGlzLl9tb2RlbC5kYXRhW29iai5jaGlsZHJlbl9kW2ldXSkpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5fbW9kZWwuZGF0YVtvYmouY2hpbGRyZW5fZFtpXV0uc3RhdGUub3BlbmVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMudHJpZ2dlcignb3Blbl9hbGwnLCB7IFwibm9kZVwiIDogb2JqIH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdG9yaWdpbmFsX29iaiA9IG9yaWdpbmFsX29iaiB8fCBkb207XHJcblx0XHRcdF90aGlzID0gdGhpcztcclxuXHRcdFx0ZG9tID0gdGhpcy5pc19jbG9zZWQob2JqKSA/IGRvbS5maW5kKCdsaS5qc3RyZWUtY2xvc2VkJykuYWRkQmFjaygpIDogZG9tLmZpbmQoJ2xpLmpzdHJlZS1jbG9zZWQnKTtcclxuXHRcdFx0ZG9tLmVhY2goZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdF90aGlzLm9wZW5fbm9kZShcclxuXHRcdFx0XHRcdHRoaXMsXHJcblx0XHRcdFx0XHRmdW5jdGlvbihub2RlLCBzdGF0dXMpIHsgaWYoc3RhdHVzICYmIHRoaXMuaXNfcGFyZW50KG5vZGUpKSB7IHRoaXMub3Blbl9hbGwobm9kZSwgYW5pbWF0aW9uLCBvcmlnaW5hbF9vYmopOyB9IH0sXHJcblx0XHRcdFx0XHRhbmltYXRpb24gfHwgMFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRpZihvcmlnaW5hbF9vYmouZmluZCgnbGkuanN0cmVlLWNsb3NlZCcpLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRcdC8qKlxyXG5cdFx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIGFuIGBvcGVuX2FsbGAgY2FsbCBjb21wbGV0ZXNcclxuXHRcdFx0XHQgKiBAZXZlbnRcclxuXHRcdFx0XHQgKiBAbmFtZSBvcGVuX2FsbC5qc3RyZWVcclxuXHRcdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZSB0aGUgb3BlbmVkIG5vZGVcclxuXHRcdFx0XHQgKi9cclxuXHRcdFx0XHR0aGlzLnRyaWdnZXIoJ29wZW5fYWxsJywgeyBcIm5vZGVcIiA6IHRoaXMuZ2V0X25vZGUob3JpZ2luYWxfb2JqKSB9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogY2xvc2VzIGFsbCBub2RlcyB3aXRoaW4gYSBub2RlIChvciB0aGUgdHJlZSksIHJldmFsaW5nIHRoZWlyIGNoaWxkcmVuXHJcblx0XHQgKiBAbmFtZSBjbG9zZV9hbGwoW29iaiwgYW5pbWF0aW9uXSlcclxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG9iaiB0aGUgbm9kZSB0byBjbG9zZSByZWN1cnNpdmVseSwgb21pdCB0byBjbG9zZSBhbGwgbm9kZXMgaW4gdGhlIHRyZWVcclxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSBhbmltYXRpb24gdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgd2hlbiBjbG9zaW5nIHRoZSBub2RlcywgdGhlIGRlZmF1bHQgaXMgbm8gYW5pbWF0aW9uXHJcblx0XHQgKiBAdHJpZ2dlciBjbG9zZV9hbGwuanN0cmVlXHJcblx0XHQgKi9cclxuXHRcdGNsb3NlX2FsbCA6IGZ1bmN0aW9uIChvYmosIGFuaW1hdGlvbikge1xyXG5cdFx0XHRpZighb2JqKSB7IG9iaiA9ICcjJzsgfVxyXG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XHJcblx0XHRcdGlmKCFvYmopIHsgcmV0dXJuIGZhbHNlOyB9XHJcblx0XHRcdHZhciBkb20gPSBvYmouaWQgPT09ICcjJyA/IHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpIDogdGhpcy5nZXRfbm9kZShvYmosIHRydWUpLFxyXG5cdFx0XHRcdF90aGlzID0gdGhpcywgaSwgajtcclxuXHRcdFx0aWYoIWRvbS5sZW5ndGgpIHtcclxuXHRcdFx0XHRmb3IoaSA9IDAsIGogPSBvYmouY2hpbGRyZW5fZC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHRcdHRoaXMuX21vZGVsLmRhdGFbb2JqLmNoaWxkcmVuX2RbaV1dLnN0YXRlLm9wZW5lZCA9IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy50cmlnZ2VyKCdjbG9zZV9hbGwnLCB7IFwibm9kZVwiIDogb2JqIH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGRvbSA9IHRoaXMuaXNfb3BlbihvYmopID8gZG9tLmZpbmQoJ2xpLmpzdHJlZS1vcGVuJykuYWRkQmFjaygpIDogZG9tLmZpbmQoJ2xpLmpzdHJlZS1vcGVuJyk7XHJcblx0XHRcdGRvbS52YWthdGFfcmV2ZXJzZSgpLmVhY2goZnVuY3Rpb24gKCkgeyBfdGhpcy5jbG9zZV9ub2RlKHRoaXMsIGFuaW1hdGlvbiB8fCAwKTsgfSk7XHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhbiBgY2xvc2VfYWxsYCBjYWxsIGNvbXBsZXRlc1xyXG5cdFx0XHQgKiBAZXZlbnRcclxuXHRcdFx0ICogQG5hbWUgY2xvc2VfYWxsLmpzdHJlZVxyXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZSB0aGUgY2xvc2VkIG5vZGVcclxuXHRcdFx0ICovXHJcblx0XHRcdHRoaXMudHJpZ2dlcignY2xvc2VfYWxsJywgeyBcIm5vZGVcIiA6IG9iaiB9KTtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGNoZWNrcyBpZiBhIG5vZGUgaXMgZGlzYWJsZWQgKG5vdCBzZWxlY3RhYmxlKVxyXG5cdFx0ICogQG5hbWUgaXNfZGlzYWJsZWQob2JqKVxyXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9ialxyXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cclxuXHRcdCAqL1xyXG5cdFx0aXNfZGlzYWJsZWQgOiBmdW5jdGlvbiAob2JqKSB7XHJcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcclxuXHRcdFx0cmV0dXJuIG9iaiAmJiBvYmouc3RhdGUgJiYgb2JqLnN0YXRlLmRpc2FibGVkO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogZW5hYmxlcyBhIG5vZGUgLSBzbyB0aGF0IGl0IGNhbiBiZSBzZWxlY3RlZFxyXG5cdFx0ICogQG5hbWUgZW5hYmxlX25vZGUob2JqKVxyXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gb2JqIHRoZSBub2RlIHRvIGVuYWJsZVxyXG5cdFx0ICogQHRyaWdnZXIgZW5hYmxlX25vZGUuanN0cmVlXHJcblx0XHQgKi9cclxuXHRcdGVuYWJsZV9ub2RlIDogZnVuY3Rpb24gKG9iaikge1xyXG5cdFx0XHR2YXIgdDEsIHQyO1xyXG5cdFx0XHRpZigkLmlzQXJyYXkob2JqKSkge1xyXG5cdFx0XHRcdG9iaiA9IG9iai5zbGljZSgpO1xyXG5cdFx0XHRcdGZvcih0MSA9IDAsIHQyID0gb2JqLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xyXG5cdFx0XHRcdFx0dGhpcy5lbmFibGVfbm9kZShvYmpbdDFdKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRpZighb2JqIHx8IG9iai5pZCA9PT0gJyMnKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdG9iai5zdGF0ZS5kaXNhYmxlZCA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmdldF9ub2RlKG9iaix0cnVlKS5jaGlsZHJlbignLmpzdHJlZS1hbmNob3InKS5yZW1vdmVDbGFzcygnanN0cmVlLWRpc2FibGVkJyk7XHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhbiBub2RlIGlzIGVuYWJsZWRcclxuXHRcdFx0ICogQGV2ZW50XHJcblx0XHRcdCAqIEBuYW1lIGVuYWJsZV9ub2RlLmpzdHJlZVxyXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZSB0aGUgZW5hYmxlZCBub2RlXHJcblx0XHRcdCAqL1xyXG5cdFx0XHR0aGlzLnRyaWdnZXIoJ2VuYWJsZV9ub2RlJywgeyAnbm9kZScgOiBvYmogfSk7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBkaXNhYmxlcyBhIG5vZGUgLSBzbyB0aGF0IGl0IGNhbiBub3QgYmUgc2VsZWN0ZWRcclxuXHRcdCAqIEBuYW1lIGRpc2FibGVfbm9kZShvYmopXHJcblx0XHQgKiBAcGFyYW0ge21peGVkfSBvYmogdGhlIG5vZGUgdG8gZGlzYWJsZVxyXG5cdFx0ICogQHRyaWdnZXIgZGlzYWJsZV9ub2RlLmpzdHJlZVxyXG5cdFx0ICovXHJcblx0XHRkaXNhYmxlX25vZGUgOiBmdW5jdGlvbiAob2JqKSB7XHJcblx0XHRcdHZhciB0MSwgdDI7XHJcblx0XHRcdGlmKCQuaXNBcnJheShvYmopKSB7XHJcblx0XHRcdFx0b2JqID0gb2JqLnNsaWNlKCk7XHJcblx0XHRcdFx0Zm9yKHQxID0gMCwgdDIgPSBvYmoubGVuZ3RoOyB0MSA8IHQyOyB0MSsrKSB7XHJcblx0XHRcdFx0XHR0aGlzLmRpc2FibGVfbm9kZShvYmpbdDFdKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRpZighb2JqIHx8IG9iai5pZCA9PT0gJyMnKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdG9iai5zdGF0ZS5kaXNhYmxlZCA9IHRydWU7XHJcblx0XHRcdHRoaXMuZ2V0X25vZGUob2JqLHRydWUpLmNoaWxkcmVuKCcuanN0cmVlLWFuY2hvcicpLmFkZENsYXNzKCdqc3RyZWUtZGlzYWJsZWQnKTtcclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIGFuIG5vZGUgaXMgZGlzYWJsZWRcclxuXHRcdFx0ICogQGV2ZW50XHJcblx0XHRcdCAqIEBuYW1lIGRpc2FibGVfbm9kZS5qc3RyZWVcclxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGUgdGhlIGRpc2FibGVkIG5vZGVcclxuXHRcdFx0ICovXHJcblx0XHRcdHRoaXMudHJpZ2dlcignZGlzYWJsZV9ub2RlJywgeyAnbm9kZScgOiBvYmogfSk7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBjYWxsZWQgd2hlbiBhIG5vZGUgaXMgc2VsZWN0ZWQgYnkgdGhlIHVzZXIuIFVzZWQgaW50ZXJuYWxseS5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKiBAbmFtZSBhY3RpdmF0ZV9ub2RlKG9iaiwgZSlcclxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG9iaiB0aGUgbm9kZVxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGUgdGhlIHJlbGF0ZWQgZXZlbnRcclxuXHRcdCAqIEB0cmlnZ2VyIGFjdGl2YXRlX25vZGUuanN0cmVlXHJcblx0XHQgKi9cclxuXHRcdGFjdGl2YXRlX25vZGUgOiBmdW5jdGlvbiAob2JqLCBlKSB7XHJcblx0XHRcdGlmKHRoaXMuaXNfZGlzYWJsZWQob2JqKSkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZighdGhpcy5zZXR0aW5ncy5jb3JlLm11bHRpcGxlIHx8ICghZS5tZXRhS2V5ICYmICFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkpIHx8IChlLnNoaWZ0S2V5ICYmICghdGhpcy5fZGF0YS5jb3JlLmxhc3RfY2xpY2tlZCB8fCAhdGhpcy5nZXRfcGFyZW50KG9iaikgfHwgdGhpcy5nZXRfcGFyZW50KG9iaikgIT09IHRoaXMuX2RhdGEuY29yZS5sYXN0X2NsaWNrZWQucGFyZW50ICkgKSkge1xyXG5cdFx0XHRcdGlmKCF0aGlzLnNldHRpbmdzLmNvcmUubXVsdGlwbGUgJiYgKGUubWV0YUtleSB8fCBlLmN0cmxLZXkgfHwgZS5zaGlmdEtleSkgJiYgdGhpcy5pc19zZWxlY3RlZChvYmopKSB7XHJcblx0XHRcdFx0XHR0aGlzLmRlc2VsZWN0X25vZGUob2JqLCBmYWxzZSwgZmFsc2UsIGUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMuZGVzZWxlY3RfYWxsKHRydWUpO1xyXG5cdFx0XHRcdFx0dGhpcy5zZWxlY3Rfbm9kZShvYmosIGZhbHNlLCBmYWxzZSwgZSk7XHJcblx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUubGFzdF9jbGlja2VkID0gdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRpZihlLnNoaWZ0S2V5KSB7XHJcblx0XHRcdFx0XHR2YXIgbyA9IHRoaXMuZ2V0X25vZGUob2JqKS5pZCxcclxuXHRcdFx0XHRcdFx0bCA9IHRoaXMuX2RhdGEuY29yZS5sYXN0X2NsaWNrZWQuaWQsXHJcblx0XHRcdFx0XHRcdHAgPSB0aGlzLmdldF9ub2RlKHRoaXMuX2RhdGEuY29yZS5sYXN0X2NsaWNrZWQucGFyZW50KS5jaGlsZHJlbixcclxuXHRcdFx0XHRcdFx0YyA9IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRpLCBqO1xyXG5cdFx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gcC5sZW5ndGg7IGkgPCBqOyBpICs9IDEpIHtcclxuXHRcdFx0XHRcdFx0Ly8gc2VwYXJhdGUgSUZzIHdvcmsgd2hlbSBvIGFuZCBsIGFyZSB0aGUgc2FtZVxyXG5cdFx0XHRcdFx0XHRpZihwW2ldID09PSBvKSB7XHJcblx0XHRcdFx0XHRcdFx0YyA9ICFjO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmKHBbaV0gPT09IGwpIHtcclxuXHRcdFx0XHRcdFx0XHRjID0gIWM7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYoYyB8fCBwW2ldID09PSBvIHx8IHBbaV0gPT09IGwpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdF9ub2RlKHBbaV0sIGZhbHNlLCBmYWxzZSwgZSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZXNlbGVjdF9ub2RlKHBbaV0sIGZhbHNlLCBmYWxzZSwgZSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRpZighdGhpcy5pc19zZWxlY3RlZChvYmopKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0X25vZGUob2JqLCBmYWxzZSwgZmFsc2UsIGUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuZGVzZWxlY3Rfbm9kZShvYmosIGZhbHNlLCBmYWxzZSwgZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhbiBub2RlIGlzIGNsaWNrZWQgb3IgaW50ZXJjYXRlZCB3aXRoIGJ5IHRoZSB1c2VyXHJcblx0XHRcdCAqIEBldmVudFxyXG5cdFx0XHQgKiBAbmFtZSBhY3RpdmF0ZV9ub2RlLmpzdHJlZVxyXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZVxyXG5cdFx0XHQgKi9cclxuXHRcdFx0dGhpcy50cmlnZ2VyKCdhY3RpdmF0ZV9ub2RlJywgeyAnbm9kZScgOiB0aGlzLmdldF9ub2RlKG9iaikgfSk7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBhcHBsaWVzIHRoZSBob3ZlciBzdGF0ZSBvbiBhIG5vZGUsIGNhbGxlZCB3aGVuIGEgbm9kZSBpcyBob3ZlcmVkIGJ5IHRoZSB1c2VyLiBVc2VkIGludGVybmFsbHkuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICogQG5hbWUgaG92ZXJfbm9kZShvYmopXHJcblx0XHQgKiBAcGFyYW0ge21peGVkfSBvYmpcclxuXHRcdCAqIEB0cmlnZ2VyIGhvdmVyX25vZGUuanN0cmVlXHJcblx0XHQgKi9cclxuXHRcdGhvdmVyX25vZGUgOiBmdW5jdGlvbiAob2JqKSB7XHJcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKTtcclxuXHRcdFx0aWYoIW9iaiB8fCAhb2JqLmxlbmd0aCB8fCBvYmouY2hpbGRyZW4oJy5qc3RyZWUtaG92ZXJlZCcpLmxlbmd0aCkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgbyA9IHRoaXMuZWxlbWVudC5maW5kKCcuanN0cmVlLWhvdmVyZWQnKSwgdCA9IHRoaXMuZWxlbWVudDtcclxuXHRcdFx0aWYobyAmJiBvLmxlbmd0aCkgeyB0aGlzLmRlaG92ZXJfbm9kZShvKTsgfVxyXG5cclxuXHRcdFx0b2JqLmNoaWxkcmVuKCcuanN0cmVlLWFuY2hvcicpLmFkZENsYXNzKCdqc3RyZWUtaG92ZXJlZCcpO1xyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogdHJpZ2dlcmVkIHdoZW4gYW4gbm9kZSBpcyBob3ZlcmVkXHJcblx0XHRcdCAqIEBldmVudFxyXG5cdFx0XHQgKiBAbmFtZSBob3Zlcl9ub2RlLmpzdHJlZVxyXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZVxyXG5cdFx0XHQgKi9cclxuXHRcdFx0dGhpcy50cmlnZ2VyKCdob3Zlcl9ub2RlJywgeyAnbm9kZScgOiB0aGlzLmdldF9ub2RlKG9iaikgfSk7XHJcblx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0LmF0dHIoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIG9ialswXS5pZCk7IG9iai5hdHRyKCdhcmlhLXNlbGVjdGVkJywgdHJ1ZSk7IH0sIDApO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogcmVtb3ZlcyB0aGUgaG92ZXIgc3RhdGUgZnJvbSBhIG5vZGVjYWxsZWQgd2hlbiBhIG5vZGUgaXMgbm8gbG9uZ2VyIGhvdmVyZWQgYnkgdGhlIHVzZXIuIFVzZWQgaW50ZXJuYWxseS5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKiBAbmFtZSBkZWhvdmVyX25vZGUob2JqKVxyXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gb2JqXHJcblx0XHQgKiBAdHJpZ2dlciBkZWhvdmVyX25vZGUuanN0cmVlXHJcblx0XHQgKi9cclxuXHRcdGRlaG92ZXJfbm9kZSA6IGZ1bmN0aW9uIChvYmopIHtcclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmosIHRydWUpO1xyXG5cdFx0XHRpZighb2JqIHx8ICFvYmoubGVuZ3RoIHx8ICFvYmouY2hpbGRyZW4oJy5qc3RyZWUtaG92ZXJlZCcpLmxlbmd0aCkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRvYmouYXR0cignYXJpYS1zZWxlY3RlZCcsIGZhbHNlKS5jaGlsZHJlbignLmpzdHJlZS1hbmNob3InKS5yZW1vdmVDbGFzcygnanN0cmVlLWhvdmVyZWQnKTtcclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIGFuIG5vZGUgaXMgbm8gbG9uZ2VyIGhvdmVyZWRcclxuXHRcdFx0ICogQGV2ZW50XHJcblx0XHRcdCAqIEBuYW1lIGRlaG92ZXJfbm9kZS5qc3RyZWVcclxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGVcclxuXHRcdFx0ICovXHJcblx0XHRcdHRoaXMudHJpZ2dlcignZGVob3Zlcl9ub2RlJywgeyAnbm9kZScgOiB0aGlzLmdldF9ub2RlKG9iaikgfSk7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBzZWxlY3QgYSBub2RlXHJcblx0XHQgKiBAbmFtZSBzZWxlY3Rfbm9kZShvYmogWywgc3VwcmVzc19ldmVudCwgcHJldmVudF9vcGVuXSlcclxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG9iaiBhbiBhcnJheSBjYW4gYmUgdXNlZCB0byBzZWxlY3QgbXVsdGlwbGUgbm9kZXNcclxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gc3VwcmVzc19ldmVudCBpZiBzZXQgdG8gYHRydWVgIHRoZSBgY2hhbmdlZC5qc3RyZWVgIGV2ZW50IHdvbid0IGJlIHRyaWdnZXJlZFxyXG5cdFx0ICogQHBhcmFtIHtCb29sZWFufSBwcmV2ZW50X29wZW4gaWYgc2V0IHRvIGB0cnVlYCBwYXJlbnRzIG9mIHRoZSBzZWxlY3RlZCBub2RlIHdvbid0IGJlIG9wZW5lZFxyXG5cdFx0ICogQHRyaWdnZXIgc2VsZWN0X25vZGUuanN0cmVlLCBjaGFuZ2VkLmpzdHJlZVxyXG5cdFx0ICovXHJcblx0XHRzZWxlY3Rfbm9kZSA6IGZ1bmN0aW9uIChvYmosIHN1cHJlc3NfZXZlbnQsIHByZXZlbnRfb3BlbiwgZSkge1xyXG5cdFx0XHR2YXIgZG9tLCB0MSwgdDIsIHRoO1xyXG5cdFx0XHRpZigkLmlzQXJyYXkob2JqKSkge1xyXG5cdFx0XHRcdG9iaiA9IG9iai5zbGljZSgpO1xyXG5cdFx0XHRcdGZvcih0MSA9IDAsIHQyID0gb2JqLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xyXG5cdFx0XHRcdFx0dGhpcy5zZWxlY3Rfbm9kZShvYmpbdDFdLCBzdXByZXNzX2V2ZW50LCBwcmV2ZW50X29wZW4sIGUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XHJcblx0XHRcdGlmKCFvYmogfHwgb2JqLmlkID09PSAnIycpIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdFx0ZG9tID0gdGhpcy5nZXRfbm9kZShvYmosIHRydWUpO1xyXG5cdFx0XHRpZighb2JqLnN0YXRlLnNlbGVjdGVkKSB7XHJcblx0XHRcdFx0b2JqLnN0YXRlLnNlbGVjdGVkID0gdHJ1ZTtcclxuXHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQucHVzaChvYmouaWQpO1xyXG5cdFx0XHRcdGlmKCFwcmV2ZW50X29wZW4pIHtcclxuXHRcdFx0XHRcdGRvbSA9IHRoaXMuX29wZW5fdG8ob2JqKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoZG9tICYmIGRvbS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdGRvbS5jaGlsZHJlbignLmpzdHJlZS1hbmNob3InKS5hZGRDbGFzcygnanN0cmVlLWNsaWNrZWQnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0LyoqXHJcblx0XHRcdFx0ICogdHJpZ2dlcmVkIHdoZW4gYW4gbm9kZSBpcyBzZWxlY3RlZFxyXG5cdFx0XHRcdCAqIEBldmVudFxyXG5cdFx0XHRcdCAqIEBuYW1lIHNlbGVjdF9ub2RlLmpzdHJlZVxyXG5cdFx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBub2RlXHJcblx0XHRcdFx0ICogQHBhcmFtIHtBcnJheX0gc2VsZWN0ZWQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXHJcblx0XHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IHRoZSBldmVudCAoaWYgYW55KSB0aGF0IHRyaWdnZXJlZCB0aGlzIHNlbGVjdF9ub2RlXHJcblx0XHRcdFx0ICovXHJcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCdzZWxlY3Rfbm9kZScsIHsgJ25vZGUnIDogb2JqLCAnc2VsZWN0ZWQnIDogdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLCAnZXZlbnQnIDogZSB9KTtcclxuXHRcdFx0XHRpZighc3VwcmVzc19ldmVudCkge1xyXG5cdFx0XHRcdFx0LyoqXHJcblx0XHRcdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBzZWxlY3Rpb24gY2hhbmdlc1xyXG5cdFx0XHRcdFx0ICogQGV2ZW50XHJcblx0XHRcdFx0XHQgKiBAbmFtZSBjaGFuZ2VkLmpzdHJlZVxyXG5cdFx0XHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGVcclxuXHRcdFx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gdGhlIGFjdGlvbiB0aGF0IGNhdXNlZCB0aGUgc2VsZWN0aW9uIHRvIGNoYW5nZVxyXG5cdFx0XHRcdFx0ICogQHBhcmFtIHtBcnJheX0gc2VsZWN0ZWQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXHJcblx0XHRcdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQgdGhlIGV2ZW50IChpZiBhbnkpIHRoYXQgdHJpZ2dlcmVkIHRoaXMgY2hhbmdlZCBldmVudFxyXG5cdFx0XHRcdFx0ICovXHJcblx0XHRcdFx0XHR0aGlzLnRyaWdnZXIoJ2NoYW5nZWQnLCB7ICdhY3Rpb24nIDogJ3NlbGVjdF9ub2RlJywgJ25vZGUnIDogb2JqLCAnc2VsZWN0ZWQnIDogdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLCAnZXZlbnQnIDogZSB9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGRlc2VsZWN0IGEgbm9kZVxyXG5cdFx0ICogQG5hbWUgZGVzZWxlY3Rfbm9kZShvYmogWywgc3VwcmVzc19ldmVudF0pXHJcblx0XHQgKiBAcGFyYW0ge21peGVkfSBvYmogYW4gYXJyYXkgY2FuIGJlIHVzZWQgdG8gZGVzZWxlY3QgbXVsdGlwbGUgbm9kZXNcclxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gc3VwcmVzc19ldmVudCBpZiBzZXQgdG8gYHRydWVgIHRoZSBgY2hhbmdlZC5qc3RyZWVgIGV2ZW50IHdvbid0IGJlIHRyaWdnZXJlZFxyXG5cdFx0ICogQHRyaWdnZXIgZGVzZWxlY3Rfbm9kZS5qc3RyZWUsIGNoYW5nZWQuanN0cmVlXHJcblx0XHQgKi9cclxuXHRcdGRlc2VsZWN0X25vZGUgOiBmdW5jdGlvbiAob2JqLCBzdXByZXNzX2V2ZW50LCBlKSB7XHJcblx0XHRcdHZhciB0MSwgdDIsIGRvbTtcclxuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcclxuXHRcdFx0XHRvYmogPSBvYmouc2xpY2UoKTtcclxuXHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IG9iai5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcclxuXHRcdFx0XHRcdHRoaXMuZGVzZWxlY3Rfbm9kZShvYmpbdDFdLCBzdXByZXNzX2V2ZW50LCBlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRpZighb2JqIHx8IG9iai5pZCA9PT0gJyMnKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGRvbSA9IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKTtcclxuXHRcdFx0aWYob2JqLnN0YXRlLnNlbGVjdGVkKSB7XHJcblx0XHRcdFx0b2JqLnN0YXRlLnNlbGVjdGVkID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkID0gJC52YWthdGEuYXJyYXlfcmVtb3ZlX2l0ZW0odGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLCBvYmouaWQpO1xyXG5cdFx0XHRcdGlmKGRvbS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdGRvbS5jaGlsZHJlbignLmpzdHJlZS1hbmNob3InKS5yZW1vdmVDbGFzcygnanN0cmVlLWNsaWNrZWQnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0LyoqXHJcblx0XHRcdFx0ICogdHJpZ2dlcmVkIHdoZW4gYW4gbm9kZSBpcyBkZXNlbGVjdGVkXHJcblx0XHRcdFx0ICogQGV2ZW50XHJcblx0XHRcdFx0ICogQG5hbWUgZGVzZWxlY3Rfbm9kZS5qc3RyZWVcclxuXHRcdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZVxyXG5cdFx0XHRcdCAqIEBwYXJhbSB7QXJyYXl9IHNlbGVjdGVkIHRoZSBjdXJyZW50IHNlbGVjdGlvblxyXG5cdFx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCB0aGUgZXZlbnQgKGlmIGFueSkgdGhhdCB0cmlnZ2VyZWQgdGhpcyBkZXNlbGVjdF9ub2RlXHJcblx0XHRcdFx0ICovXHJcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCdkZXNlbGVjdF9ub2RlJywgeyAnbm9kZScgOiBvYmosICdzZWxlY3RlZCcgOiB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsICdldmVudCcgOiBlIH0pO1xyXG5cdFx0XHRcdGlmKCFzdXByZXNzX2V2ZW50KSB7XHJcblx0XHRcdFx0XHR0aGlzLnRyaWdnZXIoJ2NoYW5nZWQnLCB7ICdhY3Rpb24nIDogJ2Rlc2VsZWN0X25vZGUnLCAnbm9kZScgOiBvYmosICdzZWxlY3RlZCcgOiB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsICdldmVudCcgOiBlIH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogc2VsZWN0IGFsbCBub2RlcyBpbiB0aGUgdHJlZVxyXG5cdFx0ICogQG5hbWUgc2VsZWN0X2FsbChbc3VwcmVzc19ldmVudF0pXHJcblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IHN1cHJlc3NfZXZlbnQgaWYgc2V0IHRvIGB0cnVlYCB0aGUgYGNoYW5nZWQuanN0cmVlYCBldmVudCB3b24ndCBiZSB0cmlnZ2VyZWRcclxuXHRcdCAqIEB0cmlnZ2VyIHNlbGVjdF9hbGwuanN0cmVlLCBjaGFuZ2VkLmpzdHJlZVxyXG5cdFx0ICovXHJcblx0XHRzZWxlY3RfYWxsIDogZnVuY3Rpb24gKHN1cHJlc3NfZXZlbnQpIHtcclxuXHRcdFx0dmFyIHRtcCA9IHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5jb25jYXQoW10pLCBpLCBqO1xyXG5cdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQgPSB0aGlzLl9tb2RlbC5kYXRhWycjJ10uY2hpbGRyZW5fZC5jb25jYXQoKTtcclxuXHRcdFx0Zm9yKGkgPSAwLCBqID0gdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdGlmKHRoaXMuX21vZGVsLmRhdGFbdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkW2ldXSkge1xyXG5cdFx0XHRcdFx0dGhpcy5fbW9kZWwuZGF0YVt0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWRbaV1dLnN0YXRlLnNlbGVjdGVkID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5yZWRyYXcodHJ1ZSk7XHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhbGwgbm9kZXMgYXJlIHNlbGVjdGVkXHJcblx0XHRcdCAqIEBldmVudFxyXG5cdFx0XHQgKiBAbmFtZSBzZWxlY3RfYWxsLmpzdHJlZVxyXG5cdFx0XHQgKiBAcGFyYW0ge0FycmF5fSBzZWxlY3RlZCB0aGUgY3VycmVudCBzZWxlY3Rpb25cclxuXHRcdFx0ICovXHJcblx0XHRcdHRoaXMudHJpZ2dlcignc2VsZWN0X2FsbCcsIHsgJ3NlbGVjdGVkJyA6IHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCB9KTtcclxuXHRcdFx0aWYoIXN1cHJlc3NfZXZlbnQpIHtcclxuXHRcdFx0XHR0aGlzLnRyaWdnZXIoJ2NoYW5nZWQnLCB7ICdhY3Rpb24nIDogJ3NlbGVjdF9hbGwnLCAnc2VsZWN0ZWQnIDogdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLCAnb2xkX3NlbGVjdGlvbicgOiB0bXAgfSk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGRlc2VsZWN0IGFsbCBzZWxlY3RlZCBub2Rlc1xyXG5cdFx0ICogQG5hbWUgZGVzZWxlY3RfYWxsKFtzdXByZXNzX2V2ZW50XSlcclxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gc3VwcmVzc19ldmVudCBpZiBzZXQgdG8gYHRydWVgIHRoZSBgY2hhbmdlZC5qc3RyZWVgIGV2ZW50IHdvbid0IGJlIHRyaWdnZXJlZFxyXG5cdFx0ICogQHRyaWdnZXIgZGVzZWxlY3RfYWxsLmpzdHJlZSwgY2hhbmdlZC5qc3RyZWVcclxuXHRcdCAqL1xyXG5cdFx0ZGVzZWxlY3RfYWxsIDogZnVuY3Rpb24gKHN1cHJlc3NfZXZlbnQpIHtcclxuXHRcdFx0dmFyIHRtcCA9IHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5jb25jYXQoW10pLCBpLCBqO1xyXG5cdFx0XHRmb3IoaSA9IDAsIGogPSB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0aWYodGhpcy5fbW9kZWwuZGF0YVt0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWRbaV1dKSB7XHJcblx0XHRcdFx0XHR0aGlzLl9tb2RlbC5kYXRhW3RoaXMuX2RhdGEuY29yZS5zZWxlY3RlZFtpXV0uc3RhdGUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkID0gW107XHJcblx0XHRcdHRoaXMuZWxlbWVudC5maW5kKCcuanN0cmVlLWNsaWNrZWQnKS5yZW1vdmVDbGFzcygnanN0cmVlLWNsaWNrZWQnKTtcclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIGFsbCBub2RlcyBhcmUgZGVzZWxlY3RlZFxyXG5cdFx0XHQgKiBAZXZlbnRcclxuXHRcdFx0ICogQG5hbWUgZGVzZWxlY3RfYWxsLmpzdHJlZVxyXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZSB0aGUgcHJldmlvdXMgc2VsZWN0aW9uXHJcblx0XHRcdCAqIEBwYXJhbSB7QXJyYXl9IHNlbGVjdGVkIHRoZSBjdXJyZW50IHNlbGVjdGlvblxyXG5cdFx0XHQgKi9cclxuXHRcdFx0dGhpcy50cmlnZ2VyKCdkZXNlbGVjdF9hbGwnLCB7ICdzZWxlY3RlZCcgOiB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsICdub2RlJyA6IHRtcCB9KTtcclxuXHRcdFx0aWYoIXN1cHJlc3NfZXZlbnQpIHtcclxuXHRcdFx0XHR0aGlzLnRyaWdnZXIoJ2NoYW5nZWQnLCB7ICdhY3Rpb24nIDogJ2Rlc2VsZWN0X2FsbCcsICdzZWxlY3RlZCcgOiB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsICdvbGRfc2VsZWN0aW9uJyA6IHRtcCB9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogY2hlY2tzIGlmIGEgbm9kZSBpcyBzZWxlY3RlZFxyXG5cdFx0ICogQG5hbWUgaXNfc2VsZWN0ZWQob2JqKVxyXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9ICBvYmpcclxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59XHJcblx0XHQgKi9cclxuXHRcdGlzX3NlbGVjdGVkIDogZnVuY3Rpb24gKG9iaikge1xyXG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XHJcblx0XHRcdGlmKCFvYmogfHwgb2JqLmlkID09PSAnIycpIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG9iai5zdGF0ZS5zZWxlY3RlZDtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGdldCBhbiBhcnJheSBvZiBhbGwgc2VsZWN0ZWQgbm9kZSBJRHNcclxuXHRcdCAqIEBuYW1lIGdldF9zZWxlY3RlZChbZnVsbF0pXHJcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gIGZ1bGwgaWYgc2V0IHRvIGB0cnVlYCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb25zaXN0IG9mIHRoZSBmdWxsIG5vZGUgb2JqZWN0cywgb3RoZXJ3aXNlIC0gb25seSBJRHMgd2lsbCBiZSByZXR1cm5lZFxyXG5cdFx0ICogQHJldHVybiB7QXJyYXl9XHJcblx0XHQgKi9cclxuXHRcdGdldF9zZWxlY3RlZCA6IGZ1bmN0aW9uIChmdWxsKSB7XHJcblx0XHRcdHJldHVybiBmdWxsID8gJC5tYXAodGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLCAkLnByb3h5KGZ1bmN0aW9uIChpKSB7IHJldHVybiB0aGlzLmdldF9ub2RlKGkpOyB9LCB0aGlzKSkgOiB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQ7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBnZXRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0cmVlIHNvIHRoYXQgaXQgY2FuIGJlIHJlc3RvcmVkIGxhdGVyIHdpdGggYHNldF9zdGF0ZShzdGF0ZSlgLiBVc2VkIGludGVybmFsbHkuXHJcblx0XHQgKiBAbmFtZSBnZXRfc3RhdGUoKVxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqIEByZXR1cm4ge09iamVjdH1cclxuXHRcdCAqL1xyXG5cdFx0Z2V0X3N0YXRlIDogZnVuY3Rpb24gKCkge1xyXG5cdFx0XHR2YXIgc3RhdGVcdD0ge1xyXG5cdFx0XHRcdCdjb3JlJyA6IHtcclxuXHRcdFx0XHRcdCdvcGVuJyA6IFtdLFxyXG5cdFx0XHRcdFx0J3Njcm9sbCcgOiB7XHJcblx0XHRcdFx0XHRcdCdsZWZ0JyA6IHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0KCksXHJcblx0XHRcdFx0XHRcdCd0b3AnIDogdGhpcy5lbGVtZW50LnNjcm9sbFRvcCgpXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0LyohXHJcblx0XHRcdFx0XHQndGhlbWVzJyA6IHtcclxuXHRcdFx0XHRcdFx0J25hbWUnIDogdGhpcy5nZXRfdGhlbWUoKSxcclxuXHRcdFx0XHRcdFx0J2ljb25zJyA6IHRoaXMuX2RhdGEuY29yZS50aGVtZXMuaWNvbnMsXHJcblx0XHRcdFx0XHRcdCdkb3RzJyA6IHRoaXMuX2RhdGEuY29yZS50aGVtZXMuZG90c1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdCovXHJcblx0XHRcdFx0XHQnc2VsZWN0ZWQnIDogW11cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sIGk7XHJcblx0XHRcdGZvcihpIGluIHRoaXMuX21vZGVsLmRhdGEpIHtcclxuXHRcdFx0XHRpZih0aGlzLl9tb2RlbC5kYXRhLmhhc093blByb3BlcnR5KGkpKSB7XHJcblx0XHRcdFx0XHRpZihpICE9PSAnIycpIHtcclxuXHRcdFx0XHRcdFx0aWYodGhpcy5fbW9kZWwuZGF0YVtpXS5zdGF0ZS5vcGVuZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRzdGF0ZS5jb3JlLm9wZW4ucHVzaChpKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZih0aGlzLl9tb2RlbC5kYXRhW2ldLnN0YXRlLnNlbGVjdGVkKSB7XHJcblx0XHRcdFx0XHRcdFx0c3RhdGUuY29yZS5zZWxlY3RlZC5wdXNoKGkpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBzdGF0ZTtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIHNldHMgdGhlIHN0YXRlIG9mIHRoZSB0cmVlLiBVc2VkIGludGVybmFsbHkuXHJcblx0XHQgKiBAbmFtZSBzZXRfc3RhdGUoc3RhdGUgWywgY2FsbGJhY2tdKVxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSB0aGUgc3RhdGUgdG8gcmVzdG9yZVxyXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYW4gb3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBzdGF0ZSBpcyByZXN0b3JlZC5cclxuXHRcdCAqIEB0cmlnZ2VyIHNldF9zdGF0ZS5qc3RyZWVcclxuXHRcdCAqL1xyXG5cdFx0c2V0X3N0YXRlIDogZnVuY3Rpb24gKHN0YXRlLCBjYWxsYmFjaykge1xyXG5cdFx0XHRpZihzdGF0ZSkge1xyXG5cdFx0XHRcdGlmKHN0YXRlLmNvcmUpIHtcclxuXHRcdFx0XHRcdHZhciByZXMsIG4sIHQsIF90aGlzO1xyXG5cdFx0XHRcdFx0aWYoc3RhdGUuY29yZS5vcGVuKSB7XHJcblx0XHRcdFx0XHRcdGlmKCEkLmlzQXJyYXkoc3RhdGUuY29yZS5vcGVuKSkge1xyXG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBzdGF0ZS5jb3JlLm9wZW47XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zZXRfc3RhdGUoc3RhdGUsIGNhbGxiYWNrKTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmVzID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0biA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHR0ID0gdGhpcztcclxuXHRcdFx0XHRcdFx0JC5lYWNoKHN0YXRlLmNvcmUub3Blbi5jb25jYXQoW10pLCBmdW5jdGlvbiAoaSwgdikge1xyXG5cdFx0XHRcdFx0XHRcdG4gPSB0LmdldF9ub2RlKHYpO1xyXG5cdFx0XHRcdFx0XHRcdGlmKG4pIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmKHQuaXNfbG9hZGVkKHYpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHQuaXNfY2xvc2VkKHYpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dC5vcGVuX25vZGUodiwgZmFsc2UsIDApO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHN0YXRlICYmIHN0YXRlLmNvcmUgJiYgc3RhdGUuY29yZS5vcGVuKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0JC52YWthdGEuYXJyYXlfcmVtb3ZlX2l0ZW0oc3RhdGUuY29yZS5vcGVuLCB2KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKCF0LmlzX2xvYWRpbmcodikpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0Lm9wZW5fbm9kZSh2LCAkLnByb3h5KGZ1bmN0aW9uICgpIHsgdGhpcy5zZXRfc3RhdGUoc3RhdGUsIGNhbGxiYWNrKTsgfSwgdCksIDApO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHRoZXJlIHdpbGwgYmUgc29tZSBhc3luYyBhY3Rpdml0eSAtIHNvIHdhaXQgZm9yIGl0XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJlcyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdGlmKHJlcykge1xyXG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBzdGF0ZS5jb3JlLm9wZW47XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zZXRfc3RhdGUoc3RhdGUsIGNhbGxiYWNrKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZihzdGF0ZS5jb3JlLnNjcm9sbCkge1xyXG5cdFx0XHRcdFx0XHRpZihzdGF0ZS5jb3JlLnNjcm9sbCAmJiBzdGF0ZS5jb3JlLnNjcm9sbC5sZWZ0ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmVsZW1lbnQuc2Nyb2xsTGVmdChzdGF0ZS5jb3JlLnNjcm9sbC5sZWZ0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZihzdGF0ZS5jb3JlLnNjcm9sbCAmJiBzdGF0ZS5jb3JlLnNjcm9sbC50b3AgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZWxlbWVudC5zY3JvbGxUb3Aoc3RhdGUuY29yZS5zY3JvbGwudG9wKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRkZWxldGUgc3RhdGUuY29yZS5zY3JvbGw7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0X3N0YXRlKHN0YXRlLCBjYWxsYmFjayk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8qIVxyXG5cdFx0XHRcdFx0aWYoc3RhdGUuY29yZS50aGVtZXMpIHtcclxuXHRcdFx0XHRcdFx0aWYoc3RhdGUuY29yZS50aGVtZXMubmFtZSkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2V0X3RoZW1lKHN0YXRlLmNvcmUudGhlbWVzLm5hbWUpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmKHR5cGVvZiBzdGF0ZS5jb3JlLnRoZW1lcy5kb3RzICE9PSAndW5kZWZpbmVkJykge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXNbIHN0YXRlLmNvcmUudGhlbWVzLmRvdHMgPyBcInNob3dfZG90c1wiIDogXCJoaWRlX2RvdHNcIiBdKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYodHlwZW9mIHN0YXRlLmNvcmUudGhlbWVzLmljb25zICE9PSAndW5kZWZpbmVkJykge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXNbIHN0YXRlLmNvcmUudGhlbWVzLmljb25zID8gXCJzaG93X2ljb25zXCIgOiBcImhpZGVfaWNvbnNcIiBdKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0ZGVsZXRlIHN0YXRlLmNvcmUudGhlbWVzO1xyXG5cdFx0XHRcdFx0XHRkZWxldGUgc3RhdGUuY29yZS5vcGVuO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldF9zdGF0ZShzdGF0ZSwgY2FsbGJhY2spO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQqL1xyXG5cdFx0XHRcdFx0aWYoc3RhdGUuY29yZS5zZWxlY3RlZCkge1xyXG5cdFx0XHRcdFx0XHRfdGhpcyA9IHRoaXM7XHJcblx0XHRcdFx0XHRcdHRoaXMuZGVzZWxlY3RfYWxsKCk7XHJcblx0XHRcdFx0XHRcdCQuZWFjaChzdGF0ZS5jb3JlLnNlbGVjdGVkLCBmdW5jdGlvbiAoaSwgdikge1xyXG5cdFx0XHRcdFx0XHRcdF90aGlzLnNlbGVjdF9ub2RlKHYpO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIHN0YXRlLmNvcmUuc2VsZWN0ZWQ7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0X3N0YXRlKHN0YXRlLCBjYWxsYmFjayk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmKCQuaXNFbXB0eU9iamVjdChzdGF0ZS5jb3JlKSkge1xyXG5cdFx0XHRcdFx0XHRkZWxldGUgc3RhdGUuY29yZTtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRfc3RhdGUoc3RhdGUsIGNhbGxiYWNrKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZigkLmlzRW1wdHlPYmplY3Qoc3RhdGUpKSB7XHJcblx0XHRcdFx0XHRzdGF0ZSA9IG51bGw7XHJcblx0XHRcdFx0XHRpZihjYWxsYmFjaykgeyBjYWxsYmFjay5jYWxsKHRoaXMpOyB9XHJcblx0XHRcdFx0XHQvKipcclxuXHRcdFx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIGEgYHNldF9zdGF0ZWAgY2FsbCBjb21wbGV0ZXNcclxuXHRcdFx0XHRcdCAqIEBldmVudFxyXG5cdFx0XHRcdFx0ICogQG5hbWUgc2V0X3N0YXRlLmpzdHJlZVxyXG5cdFx0XHRcdFx0ICovXHJcblx0XHRcdFx0XHR0aGlzLnRyaWdnZXIoJ3NldF9zdGF0ZScpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiByZWZyZXNoZXMgdGhlIHRyZWUgLSBhbGwgbm9kZXMgYXJlIHJlbG9hZGVkIHdpdGggY2FsbHMgdG8gYGxvYWRfbm9kZWAuXHJcblx0XHQgKiBAbmFtZSByZWZyZXNoKClcclxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gc2tpcF9sb2FkaW5nIGFuIG9wdGlvbiB0byBza2lwIHNob3dpbmcgdGhlIGxvYWRpbmcgaW5kaWNhdG9yXHJcblx0XHQgKiBAdHJpZ2dlciByZWZyZXNoLmpzdHJlZVxyXG5cdFx0ICovXHJcblx0XHRyZWZyZXNoIDogZnVuY3Rpb24gKHNraXBfbG9hZGluZykge1xyXG5cdFx0XHR0aGlzLl9kYXRhLmNvcmUuc3RhdGUgPSB0aGlzLmdldF9zdGF0ZSgpO1xyXG5cdFx0XHR0aGlzLl9jbnQgPSAwO1xyXG5cdFx0XHR0aGlzLl9tb2RlbC5kYXRhID0ge1xyXG5cdFx0XHRcdCcjJyA6IHtcclxuXHRcdFx0XHRcdGlkIDogJyMnLFxyXG5cdFx0XHRcdFx0cGFyZW50IDogbnVsbCxcclxuXHRcdFx0XHRcdHBhcmVudHMgOiBbXSxcclxuXHRcdFx0XHRcdGNoaWxkcmVuIDogW10sXHJcblx0XHRcdFx0XHRjaGlsZHJlbl9kIDogW10sXHJcblx0XHRcdFx0XHRzdGF0ZSA6IHsgbG9hZGVkIDogZmFsc2UgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHRcdFx0dmFyIGMgPSB0aGlzLmdldF9jb250YWluZXJfdWwoKVswXS5jbGFzc05hbWU7XHJcblx0XHRcdGlmKCFza2lwX2xvYWRpbmcpIHtcclxuXHRcdFx0XHR0aGlzLmVsZW1lbnQuaHRtbChcIjxcIitcInVsIGNsYXNzPSdqc3RyZWUtY29udGFpbmVyLXVsJz48XCIrXCJsaSBjbGFzcz0nanN0cmVlLWluaXRpYWwtbm9kZSBqc3RyZWUtbG9hZGluZyBqc3RyZWUtbGVhZiBqc3RyZWUtbGFzdCc+PGkgY2xhc3M9J2pzdHJlZS1pY29uIGpzdHJlZS1vY2wnPjwvaT48XCIrXCJhIGNsYXNzPSdqc3RyZWUtYW5jaG9yJyBocmVmPScjJz48aSBjbGFzcz0nanN0cmVlLWljb24ganN0cmVlLXRoZW1laWNvbi1oaWRkZW4nPjwvaT5cIiArIHRoaXMuZ2V0X3N0cmluZyhcIkxvYWRpbmcgLi4uXCIpICsgXCI8L2E+PC9saT48L3VsPlwiKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmxvYWRfbm9kZSgnIycsIGZ1bmN0aW9uIChvLCBzKSB7XHJcblx0XHRcdFx0aWYocykge1xyXG5cdFx0XHRcdFx0dGhpcy5nZXRfY29udGFpbmVyX3VsKClbMF0uY2xhc3NOYW1lID0gYztcclxuXHRcdFx0XHRcdHRoaXMuc2V0X3N0YXRlKCQuZXh0ZW5kKHRydWUsIHt9LCB0aGlzLl9kYXRhLmNvcmUuc3RhdGUpLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRcdC8qKlxyXG5cdFx0XHRcdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhIGByZWZyZXNoYCBjYWxsIGNvbXBsZXRlc1xyXG5cdFx0XHRcdFx0XHQgKiBAZXZlbnRcclxuXHRcdFx0XHRcdFx0ICogQG5hbWUgcmVmcmVzaC5qc3RyZWVcclxuXHRcdFx0XHRcdFx0ICovXHJcblx0XHRcdFx0XHRcdHRoaXMudHJpZ2dlcigncmVmcmVzaCcpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5zdGF0ZSA9IG51bGw7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogc2V0IChjaGFuZ2UpIHRoZSBJRCBvZiBhIG5vZGVcclxuXHRcdCAqIEBuYW1lIHNldF9pZChvYmosIGlkKVxyXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9iaiB0aGUgbm9kZVxyXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSBpZCB0aGUgbmV3IElEXHJcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRzZXRfaWQgOiBmdW5jdGlvbiAob2JqLCBpZCkge1xyXG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XHJcblx0XHRcdGlmKCFvYmogfHwgb2JqLmlkID09PSAnIycpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblx0XHRcdHZhciBpLCBqLCBtID0gdGhpcy5fbW9kZWwuZGF0YTtcclxuXHRcdFx0Ly8gdXBkYXRlIHBhcmVudHMgKHJlcGxhY2UgY3VycmVudCBJRCB3aXRoIG5ldyBvbmUgaW4gY2hpbGRyZW4gYW5kIGNoaWxkcmVuX2QpXHJcblx0XHRcdG1bb2JqLnBhcmVudF0uY2hpbGRyZW5bJC5pbkFycmF5KG9iai5pZCwgbVtvYmoucGFyZW50XS5jaGlsZHJlbildID0gaWQ7XHJcblx0XHRcdGZvcihpID0gMCwgaiA9IG9iai5wYXJlbnRzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdG1bb2JqLnBhcmVudHNbaV1dLmNoaWxkcmVuX2RbJC5pbkFycmF5KG9iai5pZCwgbVtvYmoucGFyZW50c1tpXV0uY2hpbGRyZW5fZCldID0gaWQ7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gdXBkYXRlIGNoaWxkcmVuIChyZXBsYWNlIGN1cnJlbnQgSUQgd2l0aCBuZXcgb25lIGluIHBhcmVudCBhbmQgcGFyZW50cylcclxuXHRcdFx0Zm9yKGkgPSAwLCBqID0gb2JqLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdG1bb2JqLmNoaWxkcmVuW2ldXS5wYXJlbnQgPSBpZDtcclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IoaSA9IDAsIGogPSBvYmouY2hpbGRyZW5fZC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHRtW29iai5jaGlsZHJlbl9kW2ldXS5wYXJlbnRzWyQuaW5BcnJheShvYmouaWQsIG1bb2JqLmNoaWxkcmVuX2RbaV1dLnBhcmVudHMpXSA9IGlkO1xyXG5cdFx0XHR9XHJcblx0XHRcdGkgPSAkLmluQXJyYXkob2JqLmlkLCB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQpO1xyXG5cdFx0XHRpZihpICE9PSAtMSkgeyB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWRbaV0gPSBpZDsgfVxyXG5cdFx0XHQvLyB1cGRhdGUgbW9kZWwgYW5kIG9iaiBpdHNlbGYgKG9iai5pZCwgdGhpcy5fbW9kZWwuZGF0YVtLRVldKVxyXG5cdFx0XHRpID0gdGhpcy5nZXRfbm9kZShvYmouaWQsIHRydWUpO1xyXG5cdFx0XHRpZihpKSB7XHJcblx0XHRcdFx0aS5hdHRyKCdpZCcsIGlkKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRkZWxldGUgbVtvYmouaWRdO1xyXG5cdFx0XHRvYmouaWQgPSBpZDtcclxuXHRcdFx0bVtpZF0gPSBvYmo7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogZ2V0IHRoZSB0ZXh0IHZhbHVlIG9mIGEgbm9kZVxyXG5cdFx0ICogQG5hbWUgZ2V0X3RleHQob2JqKVxyXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9iaiB0aGUgbm9kZVxyXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRnZXRfdGV4dCA6IGZ1bmN0aW9uIChvYmopIHtcclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRyZXR1cm4gKCFvYmogfHwgb2JqLmlkID09PSAnIycpID8gZmFsc2UgOiBvYmoudGV4dDtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIHNldCB0aGUgdGV4dCB2YWx1ZSBvZiBhIG5vZGUuIFVzZWQgaW50ZXJuYWxseSwgcGxlYXNlIHVzZSBgcmVuYW1lX25vZGUob2JqLCB2YWwpYC5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKiBAbmFtZSBzZXRfdGV4dChvYmosIHZhbClcclxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmogdGhlIG5vZGUsIHlvdSBjYW4gcGFzcyBhbiBhcnJheSB0byBzZXQgdGhlIHRleHQgb24gbXVsdGlwbGUgbm9kZXNcclxuXHRcdCAqIEBwYXJhbSAge1N0cmluZ30gdmFsIHRoZSBuZXcgdGV4dCB2YWx1ZVxyXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cclxuXHRcdCAqIEB0cmlnZ2VyIHNldF90ZXh0LmpzdHJlZVxyXG5cdFx0ICovXHJcblx0XHRzZXRfdGV4dCA6IGZ1bmN0aW9uIChvYmosIHZhbCkge1xyXG5cdFx0XHR2YXIgdDEsIHQyLCBkb20sIHRtcDtcclxuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcclxuXHRcdFx0XHRvYmogPSBvYmouc2xpY2UoKTtcclxuXHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IG9iai5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcclxuXHRcdFx0XHRcdHRoaXMuc2V0X3RleHQob2JqW3QxXSwgdmFsKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRpZighb2JqIHx8IG9iai5pZCA9PT0gJyMnKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cdFx0XHRvYmoudGV4dCA9IHZhbDtcclxuXHRcdFx0ZG9tID0gdGhpcy5nZXRfbm9kZShvYmosIHRydWUpO1xyXG5cdFx0XHRpZihkb20ubGVuZ3RoKSB7XHJcblx0XHRcdFx0ZG9tID0gZG9tLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3I6ZXEoMClcIik7XHJcblx0XHRcdFx0dG1wID0gZG9tLmNoaWxkcmVuKFwiSVwiKS5jbG9uZSgpO1xyXG5cdFx0XHRcdGRvbS5odG1sKHZhbCkucHJlcGVuZCh0bXApO1xyXG5cdFx0XHRcdC8qKlxyXG5cdFx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIGEgbm9kZSB0ZXh0IHZhbHVlIGlzIGNoYW5nZWRcclxuXHRcdFx0XHQgKiBAZXZlbnRcclxuXHRcdFx0XHQgKiBAbmFtZSBzZXRfdGV4dC5qc3RyZWVcclxuXHRcdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gb2JqXHJcblx0XHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IHRleHQgdGhlIG5ldyB2YWx1ZVxyXG5cdFx0XHRcdCAqL1xyXG5cdFx0XHRcdHRoaXMudHJpZ2dlcignc2V0X3RleHQnLHsgXCJvYmpcIiA6IG9iaiwgXCJ0ZXh0XCIgOiB2YWwgfSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBnZXRzIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIG5vZGUgKG9yIHRoZSB3aG9sZSB0cmVlKVxyXG5cdFx0ICogQG5hbWUgZ2V0X2pzb24oW29iaiwgb3B0aW9uc10pXHJcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqXHJcblx0XHQgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcclxuXHRcdCAqIEBwYXJhbSAge0Jvb2xlYW59IG9wdGlvbnMubm9fc3RhdGUgZG8gbm90IHJldHVybiBzdGF0ZSBpbmZvcm1hdGlvblxyXG5cdFx0ICogQHBhcmFtICB7Qm9vbGVhbn0gb3B0aW9ucy5ub19pZCBkbyBub3QgcmV0dXJuIElEXHJcblx0XHQgKiBAcGFyYW0gIHtCb29sZWFufSBvcHRpb25zLm5vX2NoaWxkcmVuIGRvIG5vdCBpbmNsdWRlIGNoaWxkcmVuXHJcblx0XHQgKiBAcGFyYW0gIHtCb29sZWFufSBvcHRpb25zLm5vX2RhdGEgZG8gbm90IGluY2x1ZGUgbm9kZSBkYXRhXHJcblx0XHQgKiBAcGFyYW0gIHtCb29sZWFufSBvcHRpb25zLmZsYXQgcmV0dXJuIGZsYXQgSlNPTiBpbnN0ZWFkIG9mIG5lc3RlZFxyXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fVxyXG5cdFx0ICovXHJcblx0XHRnZXRfanNvbiA6IGZ1bmN0aW9uIChvYmosIG9wdGlvbnMsIGZsYXQpIHtcclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmogfHwgJyMnKTtcclxuXHRcdFx0aWYoIW9iaikgeyByZXR1cm4gZmFsc2U7IH1cclxuXHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLmZsYXQgJiYgIWZsYXQpIHsgZmxhdCA9IFtdOyB9XHJcblx0XHRcdHZhciB0bXAgPSB7XHJcblx0XHRcdFx0J2lkJyA6IG9iai5pZCxcclxuXHRcdFx0XHQndGV4dCcgOiBvYmoudGV4dCxcclxuXHRcdFx0XHQnaWNvbicgOiB0aGlzLmdldF9pY29uKG9iaiksXHJcblx0XHRcdFx0J2xpX2F0dHInIDogb2JqLmxpX2F0dHIsXHJcblx0XHRcdFx0J2FfYXR0cicgOiBvYmouYV9hdHRyLFxyXG5cdFx0XHRcdCdzdGF0ZScgOiB7fSxcclxuXHRcdFx0XHQnZGF0YScgOiBvcHRpb25zICYmIG9wdGlvbnMubm9fZGF0YSA/IGZhbHNlIDogb2JqLmRhdGFcclxuXHRcdFx0XHQvLyggdGhpcy5nZXRfbm9kZShvYmosIHRydWUpLmxlbmd0aCA/IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKS5kYXRhKCkgOiBvYmouZGF0YSApLFxyXG5cdFx0XHR9LCBpLCBqO1xyXG5cdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMuZmxhdCkge1xyXG5cdFx0XHRcdHRtcC5wYXJlbnQgPSBvYmoucGFyZW50O1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdHRtcC5jaGlsZHJlbiA9IFtdO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKCFvcHRpb25zIHx8ICFvcHRpb25zLm5vX3N0YXRlKSB7XHJcblx0XHRcdFx0Zm9yKGkgaW4gb2JqLnN0YXRlKSB7XHJcblx0XHRcdFx0XHRpZihvYmouc3RhdGUuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuXHRcdFx0XHRcdFx0dG1wLnN0YXRlW2ldID0gb2JqLnN0YXRlW2ldO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMubm9faWQpIHtcclxuXHRcdFx0XHRkZWxldGUgdG1wLmlkO1xyXG5cdFx0XHRcdGlmKHRtcC5saV9hdHRyICYmIHRtcC5saV9hdHRyLmlkKSB7XHJcblx0XHRcdFx0XHRkZWxldGUgdG1wLmxpX2F0dHIuaWQ7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy5mbGF0ICYmIG9iai5pZCAhPT0gJyMnKSB7XHJcblx0XHRcdFx0ZmxhdC5wdXNoKHRtcCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9fY2hpbGRyZW4pIHtcclxuXHRcdFx0XHRmb3IoaSA9IDAsIGogPSBvYmouY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMuZmxhdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmdldF9qc29uKG9iai5jaGlsZHJlbltpXSwgb3B0aW9ucywgZmxhdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0dG1wLmNoaWxkcmVuLnB1c2godGhpcy5nZXRfanNvbihvYmouY2hpbGRyZW5baV0sIG9wdGlvbnMpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG9wdGlvbnMgJiYgb3B0aW9ucy5mbGF0ID8gZmxhdCA6IChvYmouaWQgPT09ICcjJyA/IHRtcC5jaGlsZHJlbiA6IHRtcCk7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBjcmVhdGUgYSBuZXcgbm9kZSAoZG8gbm90IGNvbmZ1c2Ugd2l0aCBsb2FkX25vZGUpXHJcblx0XHQgKiBAbmFtZSBjcmVhdGVfbm9kZShbb2JqLCBub2RlLCBwb3MsIGNhbGxiYWNrLCBpc19sb2FkZWRdKVxyXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9ICAgcGFyICAgICAgIHRoZSBwYXJlbnQgbm9kZVxyXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9ICAgbm9kZSAgICAgIHRoZSBkYXRhIGZvciB0aGUgbmV3IG5vZGUgKGEgdmFsaWQgSlNPTiBvYmplY3QsIG9yIGEgc2ltcGxlIHN0cmluZyB3aXRoIHRoZSBuYW1lKVxyXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9ICAgcG9zICAgICAgIHRoZSBpbmRleCBhdCB3aGljaCB0byBpbnNlcnQgdGhlIG5vZGUsIFwiZmlyc3RcIiBhbmQgXCJsYXN0XCIgYXJlIGFsc28gc3VwcG9ydGVkLCBkZWZhdWx0IGlzIFwibGFzdFwiXHJcblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb25jZSB0aGUgbm9kZSBpcyBjcmVhdGVkXHJcblx0XHQgKiBAcGFyYW0gIHtCb29sZWFufSBpc19sb2FkZWQgaW50ZXJuYWwgYXJndW1lbnQgaW5kaWNhdGluZyBpZiB0aGUgcGFyZW50IG5vZGUgd2FzIHN1Y2Nlc2Z1bGx5IGxvYWRlZFxyXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfSAgICAgICAgICAgIHRoZSBJRCBvZiB0aGUgbmV3bHkgY3JlYXRlIG5vZGVcclxuXHRcdCAqIEB0cmlnZ2VyIG1vZGVsLmpzdHJlZSwgY3JlYXRlX25vZGUuanN0cmVlXHJcblx0XHQgKi9cclxuXHRcdGNyZWF0ZV9ub2RlIDogZnVuY3Rpb24gKHBhciwgbm9kZSwgcG9zLCBjYWxsYmFjaywgaXNfbG9hZGVkKSB7XHJcblx0XHRcdHBhciA9IHRoaXMuZ2V0X25vZGUocGFyKTtcclxuXHRcdFx0aWYoIXBhcikgeyByZXR1cm4gZmFsc2U7IH1cclxuXHRcdFx0cG9zID0gcG9zID09PSB1bmRlZmluZWQgPyBcImxhc3RcIiA6IHBvcztcclxuXHRcdFx0aWYoIXBvcy50b1N0cmluZygpLm1hdGNoKC9eKGJlZm9yZXxhZnRlcikkLykgJiYgIWlzX2xvYWRlZCAmJiAhdGhpcy5pc19sb2FkZWQocGFyKSkge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmxvYWRfbm9kZShwYXIsIGZ1bmN0aW9uICgpIHsgdGhpcy5jcmVhdGVfbm9kZShwYXIsIG5vZGUsIHBvcywgY2FsbGJhY2ssIHRydWUpOyB9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZighbm9kZSkgeyBub2RlID0geyBcInRleHRcIiA6IHRoaXMuZ2V0X3N0cmluZygnTmV3IG5vZGUnKSB9OyB9XHJcblx0XHRcdGlmKG5vZGUudGV4dCA9PT0gdW5kZWZpbmVkKSB7IG5vZGUudGV4dCA9IHRoaXMuZ2V0X3N0cmluZygnTmV3IG5vZGUnKTsgfVxyXG5cdFx0XHR2YXIgdG1wLCBkcGMsIGksIGo7XHJcblxyXG5cdFx0XHRpZihwYXIuaWQgPT09ICcjJykge1xyXG5cdFx0XHRcdGlmKHBvcyA9PT0gXCJiZWZvcmVcIikgeyBwb3MgPSBcImZpcnN0XCI7IH1cclxuXHRcdFx0XHRpZihwb3MgPT09IFwiYWZ0ZXJcIikgeyBwb3MgPSBcImxhc3RcIjsgfVxyXG5cdFx0XHR9XHJcblx0XHRcdHN3aXRjaChwb3MpIHtcclxuXHRcdFx0XHRjYXNlIFwiYmVmb3JlXCI6XHJcblx0XHRcdFx0XHR0bXAgPSB0aGlzLmdldF9ub2RlKHBhci5wYXJlbnQpO1xyXG5cdFx0XHRcdFx0cG9zID0gJC5pbkFycmF5KHBhci5pZCwgdG1wLmNoaWxkcmVuKTtcclxuXHRcdFx0XHRcdHBhciA9IHRtcDtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJhZnRlclwiIDpcclxuXHRcdFx0XHRcdHRtcCA9IHRoaXMuZ2V0X25vZGUocGFyLnBhcmVudCk7XHJcblx0XHRcdFx0XHRwb3MgPSAkLmluQXJyYXkocGFyLmlkLCB0bXAuY2hpbGRyZW4pICsgMTtcclxuXHRcdFx0XHRcdHBhciA9IHRtcDtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJpbnNpZGVcIjpcclxuXHRcdFx0XHRjYXNlIFwiZmlyc3RcIjpcclxuXHRcdFx0XHRcdHBvcyA9IDA7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwibGFzdFwiOlxyXG5cdFx0XHRcdFx0cG9zID0gcGFyLmNoaWxkcmVuLmxlbmd0aDtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRpZighcG9zKSB7IHBvcyA9IDA7IH1cclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKHBvcyA+IHBhci5jaGlsZHJlbi5sZW5ndGgpIHsgcG9zID0gcGFyLmNoaWxkcmVuLmxlbmd0aDsgfVxyXG5cdFx0XHRpZighbm9kZS5pZCkgeyBub2RlLmlkID0gdHJ1ZTsgfVxyXG5cdFx0XHRpZighdGhpcy5jaGVjayhcImNyZWF0ZV9ub2RlXCIsIG5vZGUsIHBhciwgcG9zKSkge1xyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuY29yZS5lcnJvci5jYWxsKHRoaXMsIHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYobm9kZS5pZCA9PT0gdHJ1ZSkgeyBkZWxldGUgbm9kZS5pZDsgfVxyXG5cdFx0XHRub2RlID0gdGhpcy5fcGFyc2VfbW9kZWxfZnJvbV9qc29uKG5vZGUsIHBhci5pZCwgcGFyLnBhcmVudHMuY29uY2F0KCkpO1xyXG5cdFx0XHRpZighbm9kZSkgeyByZXR1cm4gZmFsc2U7IH1cclxuXHRcdFx0dG1wID0gdGhpcy5nZXRfbm9kZShub2RlKTtcclxuXHRcdFx0ZHBjID0gW107XHJcblx0XHRcdGRwYy5wdXNoKG5vZGUpO1xyXG5cdFx0XHRkcGMgPSBkcGMuY29uY2F0KHRtcC5jaGlsZHJlbl9kKTtcclxuXHRcdFx0dGhpcy50cmlnZ2VyKCdtb2RlbCcsIHsgXCJub2Rlc1wiIDogZHBjLCBcInBhcmVudFwiIDogcGFyLmlkIH0pO1xyXG5cclxuXHRcdFx0cGFyLmNoaWxkcmVuX2QgPSBwYXIuY2hpbGRyZW5fZC5jb25jYXQoZHBjKTtcclxuXHRcdFx0Zm9yKGkgPSAwLCBqID0gcGFyLnBhcmVudHMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0dGhpcy5fbW9kZWwuZGF0YVtwYXIucGFyZW50c1tpXV0uY2hpbGRyZW5fZCA9IHRoaXMuX21vZGVsLmRhdGFbcGFyLnBhcmVudHNbaV1dLmNoaWxkcmVuX2QuY29uY2F0KGRwYyk7XHJcblx0XHRcdH1cclxuXHRcdFx0bm9kZSA9IHRtcDtcclxuXHRcdFx0dG1wID0gW107XHJcblx0XHRcdGZvcihpID0gMCwgaiA9IHBhci5jaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHR0bXBbaSA+PSBwb3MgPyBpKzEgOiBpXSA9IHBhci5jaGlsZHJlbltpXTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0bXBbcG9zXSA9IG5vZGUuaWQ7XHJcblx0XHRcdHBhci5jaGlsZHJlbiA9IHRtcDtcclxuXHJcblx0XHRcdHRoaXMucmVkcmF3X25vZGUocGFyLCB0cnVlKTtcclxuXHRcdFx0aWYoY2FsbGJhY2spIHsgY2FsbGJhY2suY2FsbCh0aGlzLCB0aGlzLmdldF9ub2RlKG5vZGUpKTsgfVxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogdHJpZ2dlcmVkIHdoZW4gYSBub2RlIGlzIGNyZWF0ZWRcclxuXHRcdFx0ICogQGV2ZW50XHJcblx0XHRcdCAqIEBuYW1lIGNyZWF0ZV9ub2RlLmpzdHJlZVxyXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gbm9kZVxyXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gcGFyZW50IHRoZSBwYXJlbnQncyBJRFxyXG5cdFx0XHQgKiBAcGFyYW0ge051bWJlcn0gcG9zaXRpb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBuZXcgbm9kZSBhbW9uZyB0aGUgcGFyZW50J3MgY2hpbGRyZW5cclxuXHRcdFx0ICovXHJcblx0XHRcdHRoaXMudHJpZ2dlcignY3JlYXRlX25vZGUnLCB7IFwibm9kZVwiIDogdGhpcy5nZXRfbm9kZShub2RlKSwgXCJwYXJlbnRcIiA6IHBhci5pZCwgXCJwb3NpdGlvblwiIDogcG9zIH0pO1xyXG5cdFx0XHRyZXR1cm4gbm9kZS5pZDtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIHNldCB0aGUgdGV4dCB2YWx1ZSBvZiBhIG5vZGVcclxuXHRcdCAqIEBuYW1lIHJlbmFtZV9ub2RlKG9iaiwgdmFsKVxyXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9iaiB0aGUgbm9kZSwgeW91IGNhbiBwYXNzIGFuIGFycmF5IHRvIHJlbmFtZSBtdWx0aXBsZSBub2RlcyB0byB0aGUgc2FtZSBuYW1lXHJcblx0XHQgKiBAcGFyYW0gIHtTdHJpbmd9IHZhbCB0aGUgbmV3IHRleHQgdmFsdWVcclxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59XHJcblx0XHQgKiBAdHJpZ2dlciByZW5hbWVfbm9kZS5qc3RyZWVcclxuXHRcdCAqL1xyXG5cdFx0cmVuYW1lX25vZGUgOiBmdW5jdGlvbiAob2JqLCB2YWwpIHtcclxuXHRcdFx0dmFyIHQxLCB0Miwgb2xkO1xyXG5cdFx0XHRpZigkLmlzQXJyYXkob2JqKSkge1xyXG5cdFx0XHRcdG9iaiA9IG9iai5zbGljZSgpO1xyXG5cdFx0XHRcdGZvcih0MSA9IDAsIHQyID0gb2JqLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xyXG5cdFx0XHRcdFx0dGhpcy5yZW5hbWVfbm9kZShvYmpbdDFdLCB2YWwpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XHJcblx0XHRcdGlmKCFvYmogfHwgb2JqLmlkID09PSAnIycpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblx0XHRcdG9sZCA9IG9iai50ZXh0O1xyXG5cdFx0XHRpZighdGhpcy5jaGVjayhcInJlbmFtZV9ub2RlXCIsIG9iaiwgdGhpcy5nZXRfcGFyZW50KG9iaiksIHZhbCkpIHtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmNvcmUuZXJyb3IuY2FsbCh0aGlzLCB0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcik7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuc2V0X3RleHQob2JqLCB2YWwpOyAvLyAuYXBwbHkodGhpcywgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIGEgbm9kZSBpcyByZW5hbWVkXHJcblx0XHRcdCAqIEBldmVudFxyXG5cdFx0XHQgKiBAbmFtZSByZW5hbWVfbm9kZS5qc3RyZWVcclxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGVcclxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IHRleHQgdGhlIG5ldyB2YWx1ZVxyXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gb2xkIHRoZSBvbGQgdmFsdWVcclxuXHRcdFx0ICovXHJcblx0XHRcdHRoaXMudHJpZ2dlcigncmVuYW1lX25vZGUnLCB7IFwibm9kZVwiIDogb2JqLCBcInRleHRcIiA6IHZhbCwgXCJvbGRcIiA6IG9sZCB9KTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiByZW1vdmUgYSBub2RlXHJcblx0XHQgKiBAbmFtZSBkZWxldGVfbm9kZShvYmopXHJcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqIHRoZSBub2RlLCB5b3UgY2FuIHBhc3MgYW4gYXJyYXkgdG8gZGVsZXRlIG11bHRpcGxlIG5vZGVzXHJcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxyXG5cdFx0ICogQHRyaWdnZXIgZGVsZXRlX25vZGUuanN0cmVlLCBjaGFuZ2VkLmpzdHJlZVxyXG5cdFx0ICovXHJcblx0XHRkZWxldGVfbm9kZSA6IGZ1bmN0aW9uIChvYmopIHtcclxuXHRcdFx0dmFyIHQxLCB0MiwgcGFyLCBwb3MsIHRtcCwgaSwgaiwgaywgbCwgYztcclxuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcclxuXHRcdFx0XHRvYmogPSBvYmouc2xpY2UoKTtcclxuXHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IG9iai5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcclxuXHRcdFx0XHRcdHRoaXMuZGVsZXRlX25vZGUob2JqW3QxXSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcclxuXHRcdFx0aWYoIW9iaiB8fCBvYmouaWQgPT09ICcjJykgeyByZXR1cm4gZmFsc2U7IH1cclxuXHRcdFx0cGFyID0gdGhpcy5nZXRfbm9kZShvYmoucGFyZW50KTtcclxuXHRcdFx0cG9zID0gJC5pbkFycmF5KG9iai5pZCwgcGFyLmNoaWxkcmVuKTtcclxuXHRcdFx0YyA9IGZhbHNlO1xyXG5cdFx0XHRpZighdGhpcy5jaGVjayhcImRlbGV0ZV9ub2RlXCIsIG9iaiwgcGFyLCBwb3MpKSB7XHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5jb3JlLmVycm9yLmNhbGwodGhpcywgdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3IpO1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZihwb3MgIT09IC0xKSB7XHJcblx0XHRcdFx0cGFyLmNoaWxkcmVuID0gJC52YWthdGEuYXJyYXlfcmVtb3ZlKHBhci5jaGlsZHJlbiwgcG9zKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0bXAgPSBvYmouY2hpbGRyZW5fZC5jb25jYXQoW10pO1xyXG5cdFx0XHR0bXAucHVzaChvYmouaWQpO1xyXG5cdFx0XHRmb3IoayA9IDAsIGwgPSB0bXAubGVuZ3RoOyBrIDwgbDsgaysrKSB7XHJcblx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gb2JqLnBhcmVudHMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0XHRwb3MgPSAkLmluQXJyYXkodG1wW2tdLCB0aGlzLl9tb2RlbC5kYXRhW29iai5wYXJlbnRzW2ldXS5jaGlsZHJlbl9kKTtcclxuXHRcdFx0XHRcdGlmKHBvcyAhPT0gLTEpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5fbW9kZWwuZGF0YVtvYmoucGFyZW50c1tpXV0uY2hpbGRyZW5fZCA9ICQudmFrYXRhLmFycmF5X3JlbW92ZSh0aGlzLl9tb2RlbC5kYXRhW29iai5wYXJlbnRzW2ldXS5jaGlsZHJlbl9kLCBwb3MpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZih0aGlzLl9tb2RlbC5kYXRhW3RtcFtrXV0uc3RhdGUuc2VsZWN0ZWQpIHtcclxuXHRcdFx0XHRcdGMgPSB0cnVlO1xyXG5cdFx0XHRcdFx0cG9zID0gJC5pbkFycmF5KHRtcFtrXSwgdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkKTtcclxuXHRcdFx0XHRcdGlmKHBvcyAhPT0gLTEpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkID0gJC52YWthdGEuYXJyYXlfcmVtb3ZlKHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCwgcG9zKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIGEgbm9kZSBpcyBkZWxldGVkXHJcblx0XHRcdCAqIEBldmVudFxyXG5cdFx0XHQgKiBAbmFtZSBkZWxldGVfbm9kZS5qc3RyZWVcclxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGVcclxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IHBhcmVudCB0aGUgcGFyZW50J3MgSURcclxuXHRcdFx0ICovXHJcblx0XHRcdHRoaXMudHJpZ2dlcignZGVsZXRlX25vZGUnLCB7IFwibm9kZVwiIDogb2JqLCBcInBhcmVudFwiIDogcGFyLmlkIH0pO1xyXG5cdFx0XHRpZihjKSB7XHJcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCdjaGFuZ2VkJywgeyAnYWN0aW9uJyA6ICdkZWxldGVfbm9kZScsICdub2RlJyA6IG9iaiwgJ3NlbGVjdGVkJyA6IHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCwgJ3BhcmVudCcgOiBwYXIuaWQgfSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yKGsgPSAwLCBsID0gdG1wLmxlbmd0aDsgayA8IGw7IGsrKykge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLl9tb2RlbC5kYXRhW3RtcFtrXV07XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5yZWRyYXdfbm9kZShwYXIsIHRydWUpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGNoZWNrIGlmIGFuIG9wZXJhdGlvbiBpcyBwcmVtaXR0ZWQgb24gdGhlIHRyZWUuIFVzZWQgaW50ZXJuYWxseS5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKiBAbmFtZSBjaGVjayhjaGssIG9iaiwgcGFyLCBwb3MpXHJcblx0XHQgKiBAcGFyYW0gIHtTdHJpbmd9IGNoayB0aGUgb3BlcmF0aW9uIHRvIGNoZWNrLCBjYW4gYmUgXCJjcmVhdGVfbm9kZVwiLCBcInJlbmFtZV9ub2RlXCIsIFwiZGVsZXRlX25vZGVcIiwgXCJjb3B5X25vZGVcIiBvciBcIm1vdmVfbm9kZVwiXHJcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqIHRoZSBub2RlXHJcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gcGFyIHRoZSBwYXJlbnRcclxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBwb3MgdGhlIHBvc2l0aW9uIHRvIGluc2VydCBhdCwgb3IgaWYgXCJyZW5hbWVfbm9kZVwiIC0gdGhlIG5ldyBuYW1lXHJcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRjaGVjayA6IGZ1bmN0aW9uIChjaGssIG9iaiwgcGFyLCBwb3MpIHtcclxuXHRcdFx0b2JqID0gb2JqICYmIG9iai5pZCA/IG9iaiA6IHRoaXMuZ2V0X25vZGUob2JqKTtcclxuXHRcdFx0cGFyID0gcGFyICYmIHBhci5pZCA/IHBhciA6IHRoaXMuZ2V0X25vZGUocGFyKTtcclxuXHRcdFx0dmFyIHRtcCA9IGNoay5tYXRjaCgvXm1vdmVfbm9kZXxjb3B5X25vZGV8Y3JlYXRlX25vZGUkL2kpID8gcGFyIDogb2JqLFxyXG5cdFx0XHRcdGNoYyA9IHRoaXMuc2V0dGluZ3MuY29yZS5jaGVja19jYWxsYmFjaztcclxuXHRcdFx0aWYoY2hrID09PSBcIm1vdmVfbm9kZVwiKSB7XHJcblx0XHRcdFx0aWYob2JqLmlkID09PSBwYXIuaWQgfHwgJC5pbkFycmF5KG9iai5pZCwgcGFyLmNoaWxkcmVuKSA9PT0gcG9zIHx8ICQuaW5BcnJheShwYXIuaWQsIG9iai5jaGlsZHJlbl9kKSAhPT0gLTEpIHtcclxuXHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yID0geyAnZXJyb3InIDogJ2NoZWNrJywgJ3BsdWdpbicgOiAnY29yZScsICdpZCcgOiAnY29yZV8wMScsICdyZWFzb24nIDogJ01vdmluZyBwYXJlbnQgaW5zaWRlIGNoaWxkJywgJ2RhdGEnIDogSlNPTi5zdHJpbmdpZnkoeyAnY2hrJyA6IGNoaywgJ3BvcycgOiBwb3MsICdvYmonIDogb2JqICYmIG9iai5pZCA/IG9iai5pZCA6IGZhbHNlLCAncGFyJyA6IHBhciAmJiBwYXIuaWQgPyBwYXIuaWQgOiBmYWxzZSB9KSB9O1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHR0bXAgPSB0aGlzLmdldF9ub2RlKHRtcCwgdHJ1ZSk7XHJcblx0XHRcdGlmKHRtcC5sZW5ndGgpIHsgdG1wID0gdG1wLmRhdGEoJ2pzdHJlZScpOyB9XHJcblx0XHRcdGlmKHRtcCAmJiB0bXAuZnVuY3Rpb25zICYmICh0bXAuZnVuY3Rpb25zW2Noa10gPT09IGZhbHNlIHx8IHRtcC5mdW5jdGlvbnNbY2hrXSA9PT0gdHJ1ZSkpIHtcclxuXHRcdFx0XHRpZih0bXAuZnVuY3Rpb25zW2Noa10gPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvciA9IHsgJ2Vycm9yJyA6ICdjaGVjaycsICdwbHVnaW4nIDogJ2NvcmUnLCAnaWQnIDogJ2NvcmVfMDInLCAncmVhc29uJyA6ICdOb2RlIGRhdGEgcHJldmVudHMgZnVuY3Rpb246ICcgKyBjaGssICdkYXRhJyA6IEpTT04uc3RyaW5naWZ5KHsgJ2NoaycgOiBjaGssICdwb3MnIDogcG9zLCAnb2JqJyA6IG9iaiAmJiBvYmouaWQgPyBvYmouaWQgOiBmYWxzZSwgJ3BhcicgOiBwYXIgJiYgcGFyLmlkID8gcGFyLmlkIDogZmFsc2UgfSkgfTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHRtcC5mdW5jdGlvbnNbY2hrXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZihjaGMgPT09IGZhbHNlIHx8ICgkLmlzRnVuY3Rpb24oY2hjKSAmJiBjaGMuY2FsbCh0aGlzLCBjaGssIG9iaiwgcGFyLCBwb3MpID09PSBmYWxzZSkgfHwgKGNoYyAmJiBjaGNbY2hrXSA9PT0gZmFsc2UpKSB7XHJcblx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3IgPSB7ICdlcnJvcicgOiAnY2hlY2snLCAncGx1Z2luJyA6ICdjb3JlJywgJ2lkJyA6ICdjb3JlXzAzJywgJ3JlYXNvbicgOiAnVXNlciBjb25maWcgZm9yIGNvcmUuY2hlY2tfY2FsbGJhY2sgcHJldmVudHMgZnVuY3Rpb246ICcgKyBjaGssICdkYXRhJyA6IEpTT04uc3RyaW5naWZ5KHsgJ2NoaycgOiBjaGssICdwb3MnIDogcG9zLCAnb2JqJyA6IG9iaiAmJiBvYmouaWQgPyBvYmouaWQgOiBmYWxzZSwgJ3BhcicgOiBwYXIgJiYgcGFyLmlkID8gcGFyLmlkIDogZmFsc2UgfSkgfTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBnZXQgdGhlIGxhc3QgZXJyb3JcclxuXHRcdCAqIEBuYW1lIGxhc3RfZXJyb3IoKVxyXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fVxyXG5cdFx0ICovXHJcblx0XHRsYXN0X2Vycm9yIDogZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3I7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBtb3ZlIGEgbm9kZSB0byBhIG5ldyBwYXJlbnRcclxuXHRcdCAqIEBuYW1lIG1vdmVfbm9kZShvYmosIHBhciBbLCBwb3MsIGNhbGxiYWNrLCBpc19sb2FkZWRdKVxyXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9iaiB0aGUgbm9kZSB0byBtb3ZlLCBwYXNzIGFuIGFycmF5IHRvIG1vdmUgbXVsdGlwbGUgbm9kZXNcclxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBwYXIgdGhlIG5ldyBwYXJlbnRcclxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBwb3MgdGhlIHBvc2l0aW9uIHRvIGluc2VydCBhdCAoXCJmaXJzdFwiIGFuZCBcImxhc3RcIiBhcmUgc3VwcG9ydGVkLCBhcyB3ZWxsIGFzIFwiYmVmb3JlXCIgYW5kIFwiYWZ0ZXJcIiksIGRlZmF1bHRzIHRvIGAwYFxyXG5cdFx0ICogQHBhcmFtICB7ZnVuY3Rpb259IGNhbGxiYWNrIGEgZnVuY3Rpb24gdG8gY2FsbCBvbmNlIHRoZSBtb3ZlIGlzIGNvbXBsZXRlZCwgcmVjZWl2ZXMgMyBhcmd1bWVudHMgLSB0aGUgbm9kZSwgdGhlIG5ldyBwYXJlbnQgYW5kIHRoZSBwb3NpdGlvblxyXG5cdFx0ICogQHBhcmFtICB7Qm9vbGVhbn0gaW50ZXJuYWwgcGFyYW1ldGVyIGluZGljYXRpbmcgaWYgdGhlIHBhcmVudCBub2RlIGhhcyBiZWVuIGxvYWRlZFxyXG5cdFx0ICogQHRyaWdnZXIgbW92ZV9ub2RlLmpzdHJlZVxyXG5cdFx0ICovXHJcblx0XHRtb3ZlX25vZGUgOiBmdW5jdGlvbiAob2JqLCBwYXIsIHBvcywgY2FsbGJhY2ssIGlzX2xvYWRlZCkge1xyXG5cdFx0XHR2YXIgdDEsIHQyLCBvbGRfcGFyLCBuZXdfcGFyLCBvbGRfaW5zLCBpc19tdWx0aSwgZHBjLCB0bXAsIGksIGosIGssIGwsIHA7XHJcblx0XHRcdGlmKCQuaXNBcnJheShvYmopKSB7XHJcblx0XHRcdFx0b2JqID0gb2JqLnJldmVyc2UoKS5zbGljZSgpO1xyXG5cdFx0XHRcdGZvcih0MSA9IDAsIHQyID0gb2JqLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xyXG5cdFx0XHRcdFx0dGhpcy5tb3ZlX25vZGUob2JqW3QxXSwgcGFyLCBwb3MsIGNhbGxiYWNrLCBpc19sb2FkZWQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRvYmogPSBvYmogJiYgb2JqLmlkID8gb2JqIDogdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRwYXIgPSB0aGlzLmdldF9ub2RlKHBhcik7XHJcblx0XHRcdHBvcyA9IHBvcyA9PT0gdW5kZWZpbmVkID8gMCA6IHBvcztcclxuXHJcblx0XHRcdGlmKCFwYXIgfHwgIW9iaiB8fCBvYmouaWQgPT09ICcjJykgeyByZXR1cm4gZmFsc2U7IH1cclxuXHRcdFx0aWYoIXBvcy50b1N0cmluZygpLm1hdGNoKC9eKGJlZm9yZXxhZnRlcikkLykgJiYgIWlzX2xvYWRlZCAmJiAhdGhpcy5pc19sb2FkZWQocGFyKSkge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmxvYWRfbm9kZShwYXIsIGZ1bmN0aW9uICgpIHsgdGhpcy5tb3ZlX25vZGUob2JqLCBwYXIsIHBvcywgY2FsbGJhY2ssIHRydWUpOyB9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0b2xkX3BhciA9IChvYmoucGFyZW50IHx8ICcjJykudG9TdHJpbmcoKTtcclxuXHRcdFx0bmV3X3BhciA9ICghcG9zLnRvU3RyaW5nKCkubWF0Y2goL14oYmVmb3JlfGFmdGVyKSQvKSB8fCBwYXIuaWQgPT09ICcjJykgPyBwYXIgOiB0aGlzLmdldF9ub2RlKHBhci5wYXJlbnQpO1xyXG5cdFx0XHRvbGRfaW5zID0gdGhpcy5fbW9kZWwuZGF0YVtvYmouaWRdID8gdGhpcyA6ICQuanN0cmVlLnJlZmVyZW5jZShvYmouaWQpO1xyXG5cdFx0XHRpc19tdWx0aSA9ICFvbGRfaW5zIHx8ICFvbGRfaW5zLl9pZCB8fCAodGhpcy5faWQgIT09IG9sZF9pbnMuX2lkKTtcclxuXHRcdFx0aWYoaXNfbXVsdGkpIHtcclxuXHRcdFx0XHRpZih0aGlzLmNvcHlfbm9kZShvYmosIHBhciwgcG9zLCBjYWxsYmFjaywgaXNfbG9hZGVkKSkge1xyXG5cdFx0XHRcdFx0aWYob2xkX2lucykgeyBvbGRfaW5zLmRlbGV0ZV9ub2RlKG9iaik7IH1cclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly92YXIgbSA9IHRoaXMuX21vZGVsLmRhdGE7XHJcblx0XHRcdGlmKG5ld19wYXIuaWQgPT09ICcjJykge1xyXG5cdFx0XHRcdGlmKHBvcyA9PT0gXCJiZWZvcmVcIikgeyBwb3MgPSBcImZpcnN0XCI7IH1cclxuXHRcdFx0XHRpZihwb3MgPT09IFwiYWZ0ZXJcIikgeyBwb3MgPSBcImxhc3RcIjsgfVxyXG5cdFx0XHR9XHJcblx0XHRcdHN3aXRjaChwb3MpIHtcclxuXHRcdFx0XHRjYXNlIFwiYmVmb3JlXCI6XHJcblx0XHRcdFx0XHRwb3MgPSAkLmluQXJyYXkocGFyLmlkLCBuZXdfcGFyLmNoaWxkcmVuKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJhZnRlclwiIDpcclxuXHRcdFx0XHRcdHBvcyA9ICQuaW5BcnJheShwYXIuaWQsIG5ld19wYXIuY2hpbGRyZW4pICsgMTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJpbnNpZGVcIjpcclxuXHRcdFx0XHRjYXNlIFwiZmlyc3RcIjpcclxuXHRcdFx0XHRcdHBvcyA9IDA7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwibGFzdFwiOlxyXG5cdFx0XHRcdFx0cG9zID0gbmV3X3Bhci5jaGlsZHJlbi5sZW5ndGg7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0aWYoIXBvcykgeyBwb3MgPSAwOyB9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0XHRpZihwb3MgPiBuZXdfcGFyLmNoaWxkcmVuLmxlbmd0aCkgeyBwb3MgPSBuZXdfcGFyLmNoaWxkcmVuLmxlbmd0aDsgfVxyXG5cdFx0XHRpZighdGhpcy5jaGVjayhcIm1vdmVfbm9kZVwiLCBvYmosIG5ld19wYXIsIHBvcykpIHtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmNvcmUuZXJyb3IuY2FsbCh0aGlzLCB0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcik7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKG9iai5wYXJlbnQgPT09IG5ld19wYXIuaWQpIHtcclxuXHRcdFx0XHRkcGMgPSBuZXdfcGFyLmNoaWxkcmVuLmNvbmNhdCgpO1xyXG5cdFx0XHRcdHRtcCA9ICQuaW5BcnJheShvYmouaWQsIGRwYyk7XHJcblx0XHRcdFx0aWYodG1wICE9PSAtMSkge1xyXG5cdFx0XHRcdFx0ZHBjID0gJC52YWthdGEuYXJyYXlfcmVtb3ZlKGRwYywgdG1wKTtcclxuXHRcdFx0XHRcdGlmKHBvcyA+IHRtcCkgeyBwb3MtLTsgfVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0bXAgPSBbXTtcclxuXHRcdFx0XHRmb3IoaSA9IDAsIGogPSBkcGMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0XHR0bXBbaSA+PSBwb3MgPyBpKzEgOiBpXSA9IGRwY1tpXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dG1wW3Bvc10gPSBvYmouaWQ7XHJcblx0XHRcdFx0bmV3X3Bhci5jaGlsZHJlbiA9IHRtcDtcclxuXHRcdFx0XHR0aGlzLl9ub2RlX2NoYW5nZWQobmV3X3Bhci5pZCk7XHJcblx0XHRcdFx0dGhpcy5yZWRyYXcobmV3X3Bhci5pZCA9PT0gJyMnKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBjbGVhbiBvbGQgcGFyZW50IGFuZCB1cFxyXG5cdFx0XHRcdHRtcCA9IG9iai5jaGlsZHJlbl9kLmNvbmNhdCgpO1xyXG5cdFx0XHRcdHRtcC5wdXNoKG9iai5pZCk7XHJcblx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gb2JqLnBhcmVudHMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0XHRkcGMgPSBbXTtcclxuXHRcdFx0XHRcdHAgPSBvbGRfaW5zLl9tb2RlbC5kYXRhW29iai5wYXJlbnRzW2ldXS5jaGlsZHJlbl9kO1xyXG5cdFx0XHRcdFx0Zm9yKGsgPSAwLCBsID0gcC5sZW5ndGg7IGsgPCBsOyBrKyspIHtcclxuXHRcdFx0XHRcdFx0aWYoJC5pbkFycmF5KHBba10sIHRtcCkgPT09IC0xKSB7XHJcblx0XHRcdFx0XHRcdFx0ZHBjLnB1c2gocFtrXSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdG9sZF9pbnMuX21vZGVsLmRhdGFbb2JqLnBhcmVudHNbaV1dLmNoaWxkcmVuX2QgPSBkcGM7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdG9sZF9pbnMuX21vZGVsLmRhdGFbb2xkX3Bhcl0uY2hpbGRyZW4gPSAkLnZha2F0YS5hcnJheV9yZW1vdmVfaXRlbShvbGRfaW5zLl9tb2RlbC5kYXRhW29sZF9wYXJdLmNoaWxkcmVuLCBvYmouaWQpO1xyXG5cclxuXHRcdFx0XHQvLyBpbnNlcnQgaW50byBuZXcgcGFyZW50IGFuZCB1cFxyXG5cdFx0XHRcdGZvcihpID0gMCwgaiA9IG5ld19wYXIucGFyZW50cy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHRcdHRoaXMuX21vZGVsLmRhdGFbbmV3X3Bhci5wYXJlbnRzW2ldXS5jaGlsZHJlbl9kID0gdGhpcy5fbW9kZWwuZGF0YVtuZXdfcGFyLnBhcmVudHNbaV1dLmNoaWxkcmVuX2QuY29uY2F0KHRtcCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGRwYyA9IFtdO1xyXG5cdFx0XHRcdGZvcihpID0gMCwgaiA9IG5ld19wYXIuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0XHRkcGNbaSA+PSBwb3MgPyBpKzEgOiBpXSA9IG5ld19wYXIuY2hpbGRyZW5baV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGRwY1twb3NdID0gb2JqLmlkO1xyXG5cdFx0XHRcdG5ld19wYXIuY2hpbGRyZW4gPSBkcGM7XHJcblx0XHRcdFx0bmV3X3Bhci5jaGlsZHJlbl9kLnB1c2gob2JqLmlkKTtcclxuXHRcdFx0XHRuZXdfcGFyLmNoaWxkcmVuX2QgPSBuZXdfcGFyLmNoaWxkcmVuX2QuY29uY2F0KG9iai5jaGlsZHJlbl9kKTtcclxuXHJcblx0XHRcdFx0Ly8gdXBkYXRlIG9iamVjdFxyXG5cdFx0XHRcdG9iai5wYXJlbnQgPSBuZXdfcGFyLmlkO1xyXG5cdFx0XHRcdHRtcCA9IG5ld19wYXIucGFyZW50cy5jb25jYXQoKTtcclxuXHRcdFx0XHR0bXAudW5zaGlmdChuZXdfcGFyLmlkKTtcclxuXHRcdFx0XHRwID0gb2JqLnBhcmVudHMubGVuZ3RoO1xyXG5cdFx0XHRcdG9iai5wYXJlbnRzID0gdG1wO1xyXG5cclxuXHRcdFx0XHQvLyB1cGRhdGUgb2JqZWN0IGNoaWxkcmVuXHJcblx0XHRcdFx0dG1wID0gdG1wLmNvbmNhdCgpO1xyXG5cdFx0XHRcdGZvcihpID0gMCwgaiA9IG9iai5jaGlsZHJlbl9kLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdFx0dGhpcy5fbW9kZWwuZGF0YVtvYmouY2hpbGRyZW5fZFtpXV0ucGFyZW50cyA9IHRoaXMuX21vZGVsLmRhdGFbb2JqLmNoaWxkcmVuX2RbaV1dLnBhcmVudHMuc2xpY2UoMCxwKi0xKTtcclxuXHRcdFx0XHRcdEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuX21vZGVsLmRhdGFbb2JqLmNoaWxkcmVuX2RbaV1dLnBhcmVudHMsIHRtcCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR0aGlzLl9ub2RlX2NoYW5nZWQob2xkX3Bhcik7XHJcblx0XHRcdFx0dGhpcy5fbm9kZV9jaGFuZ2VkKG5ld19wYXIuaWQpO1xyXG5cdFx0XHRcdHRoaXMucmVkcmF3KG9sZF9wYXIgPT09ICcjJyB8fCBuZXdfcGFyLmlkID09PSAnIycpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKGNhbGxiYWNrKSB7IGNhbGxiYWNrLmNhbGwodGhpcywgb2JqLCBuZXdfcGFyLCBwb3MpOyB9XHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhIG5vZGUgaXMgbW92ZWRcclxuXHRcdFx0ICogQGV2ZW50XHJcblx0XHRcdCAqIEBuYW1lIG1vdmVfbm9kZS5qc3RyZWVcclxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IG5vZGVcclxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IHBhcmVudCB0aGUgcGFyZW50J3MgSURcclxuXHRcdFx0ICogQHBhcmFtIHtOdW1iZXJ9IHBvc2l0aW9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgbm9kZSBhbW9uZyB0aGUgcGFyZW50J3MgY2hpbGRyZW5cclxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IG9sZF9wYXJlbnQgdGhlIG9sZCBwYXJlbnQgb2YgdGhlIG5vZGVcclxuXHRcdFx0ICogQHBhcmFtIHtCb29sZWFufSBpc19tdWx0aSBkbyB0aGUgbm9kZSBhbmQgbmV3IHBhcmVudCBiZWxvbmcgdG8gZGlmZmVyZW50IGluc3RhbmNlc1xyXG5cdFx0XHQgKiBAcGFyYW0ge2pzVHJlZX0gb2xkX2luc3RhbmNlIHRoZSBpbnN0YW5jZSB0aGUgbm9kZSBjYW1lIGZyb21cclxuXHRcdFx0ICogQHBhcmFtIHtqc1RyZWV9IG5ld19pbnN0YW5jZSB0aGUgaW5zdGFuY2Ugb2YgdGhlIG5ldyBwYXJlbnRcclxuXHRcdFx0ICovXHJcblx0XHRcdHRoaXMudHJpZ2dlcignbW92ZV9ub2RlJywgeyBcIm5vZGVcIiA6IG9iaiwgXCJwYXJlbnRcIiA6IG5ld19wYXIuaWQsIFwicG9zaXRpb25cIiA6IHBvcywgXCJvbGRfcGFyZW50XCIgOiBvbGRfcGFyLCBcImlzX211bHRpXCIgOiBpc19tdWx0aSwgJ29sZF9pbnN0YW5jZScgOiBvbGRfaW5zLCAnbmV3X2luc3RhbmNlJyA6IHRoaXMgfSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogY29weSBhIG5vZGUgdG8gYSBuZXcgcGFyZW50XHJcblx0XHQgKiBAbmFtZSBjb3B5X25vZGUob2JqLCBwYXIgWywgcG9zLCBjYWxsYmFjaywgaXNfbG9hZGVkXSlcclxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmogdGhlIG5vZGUgdG8gY29weSwgcGFzcyBhbiBhcnJheSB0byBjb3B5IG11bHRpcGxlIG5vZGVzXHJcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gcGFyIHRoZSBuZXcgcGFyZW50XHJcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gcG9zIHRoZSBwb3NpdGlvbiB0byBpbnNlcnQgYXQgKFwiZmlyc3RcIiBhbmQgXCJsYXN0XCIgYXJlIHN1cHBvcnRlZCwgYXMgd2VsbCBhcyBcImJlZm9yZVwiIGFuZCBcImFmdGVyXCIpLCBkZWZhdWx0cyB0byBgMGBcclxuXHRcdCAqIEBwYXJhbSAge2Z1bmN0aW9ufSBjYWxsYmFjayBhIGZ1bmN0aW9uIHRvIGNhbGwgb25jZSB0aGUgbW92ZSBpcyBjb21wbGV0ZWQsIHJlY2VpdmVzIDMgYXJndW1lbnRzIC0gdGhlIG5vZGUsIHRoZSBuZXcgcGFyZW50IGFuZCB0aGUgcG9zaXRpb25cclxuXHRcdCAqIEBwYXJhbSAge0Jvb2xlYW59IGludGVybmFsIHBhcmFtZXRlciBpbmRpY2F0aW5nIGlmIHRoZSBwYXJlbnQgbm9kZSBoYXMgYmVlbiBsb2FkZWRcclxuXHRcdCAqIEB0cmlnZ2VyIG1vZGVsLmpzdHJlZSBjb3B5X25vZGUuanN0cmVlXHJcblx0XHQgKi9cclxuXHRcdGNvcHlfbm9kZSA6IGZ1bmN0aW9uIChvYmosIHBhciwgcG9zLCBjYWxsYmFjaywgaXNfbG9hZGVkKSB7XHJcblx0XHRcdHZhciB0MSwgdDIsIGRwYywgdG1wLCBpLCBqLCBub2RlLCBvbGRfcGFyLCBuZXdfcGFyLCBvbGRfaW5zLCBpc19tdWx0aTtcclxuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcclxuXHRcdFx0XHRvYmogPSBvYmoucmV2ZXJzZSgpLnNsaWNlKCk7XHJcblx0XHRcdFx0Zm9yKHQxID0gMCwgdDIgPSBvYmoubGVuZ3RoOyB0MSA8IHQyOyB0MSsrKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNvcHlfbm9kZShvYmpbdDFdLCBwYXIsIHBvcywgY2FsbGJhY2ssIGlzX2xvYWRlZCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdG9iaiA9IG9iaiAmJiBvYmouaWQgPyBvYmogOiB0aGlzLmdldF9ub2RlKG9iaik7XHJcblx0XHRcdHBhciA9IHRoaXMuZ2V0X25vZGUocGFyKTtcclxuXHRcdFx0cG9zID0gcG9zID09PSB1bmRlZmluZWQgPyAwIDogcG9zO1xyXG5cclxuXHRcdFx0aWYoIXBhciB8fCAhb2JqIHx8IG9iai5pZCA9PT0gJyMnKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cdFx0XHRpZighcG9zLnRvU3RyaW5nKCkubWF0Y2goL14oYmVmb3JlfGFmdGVyKSQvKSAmJiAhaXNfbG9hZGVkICYmICF0aGlzLmlzX2xvYWRlZChwYXIpKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMubG9hZF9ub2RlKHBhciwgZnVuY3Rpb24gKCkgeyB0aGlzLmNvcHlfbm9kZShvYmosIHBhciwgcG9zLCBjYWxsYmFjaywgdHJ1ZSk7IH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRvbGRfcGFyID0gKG9iai5wYXJlbnQgfHwgJyMnKS50b1N0cmluZygpO1xyXG5cdFx0XHRuZXdfcGFyID0gKCFwb3MudG9TdHJpbmcoKS5tYXRjaCgvXihiZWZvcmV8YWZ0ZXIpJC8pIHx8IHBhci5pZCA9PT0gJyMnKSA/IHBhciA6IHRoaXMuZ2V0X25vZGUocGFyLnBhcmVudCk7XHJcblx0XHRcdG9sZF9pbnMgPSB0aGlzLl9tb2RlbC5kYXRhW29iai5pZF0gPyB0aGlzIDogJC5qc3RyZWUucmVmZXJlbmNlKG9iai5pZCk7XHJcblx0XHRcdGlzX211bHRpID0gIW9sZF9pbnMgfHwgIW9sZF9pbnMuX2lkIHx8ICh0aGlzLl9pZCAhPT0gb2xkX2lucy5faWQpO1xyXG5cdFx0XHRpZihuZXdfcGFyLmlkID09PSAnIycpIHtcclxuXHRcdFx0XHRpZihwb3MgPT09IFwiYmVmb3JlXCIpIHsgcG9zID0gXCJmaXJzdFwiOyB9XHJcblx0XHRcdFx0aWYocG9zID09PSBcImFmdGVyXCIpIHsgcG9zID0gXCJsYXN0XCI7IH1cclxuXHRcdFx0fVxyXG5cdFx0XHRzd2l0Y2gocG9zKSB7XHJcblx0XHRcdFx0Y2FzZSBcImJlZm9yZVwiOlxyXG5cdFx0XHRcdFx0cG9zID0gJC5pbkFycmF5KHBhci5pZCwgbmV3X3Bhci5jaGlsZHJlbik7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiYWZ0ZXJcIiA6XHJcblx0XHRcdFx0XHRwb3MgPSAkLmluQXJyYXkocGFyLmlkLCBuZXdfcGFyLmNoaWxkcmVuKSArIDE7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiaW5zaWRlXCI6XHJcblx0XHRcdFx0Y2FzZSBcImZpcnN0XCI6XHJcblx0XHRcdFx0XHRwb3MgPSAwO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcImxhc3RcIjpcclxuXHRcdFx0XHRcdHBvcyA9IG5ld19wYXIuY2hpbGRyZW4ubGVuZ3RoO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGlmKCFwb3MpIHsgcG9zID0gMDsgfVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYocG9zID4gbmV3X3Bhci5jaGlsZHJlbi5sZW5ndGgpIHsgcG9zID0gbmV3X3Bhci5jaGlsZHJlbi5sZW5ndGg7IH1cclxuXHRcdFx0aWYoIXRoaXMuY2hlY2soXCJjb3B5X25vZGVcIiwgb2JqLCBuZXdfcGFyLCBwb3MpKSB7XHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5jb3JlLmVycm9yLmNhbGwodGhpcywgdGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3IpO1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRub2RlID0gb2xkX2lucyA/IG9sZF9pbnMuZ2V0X2pzb24ob2JqLCB7IG5vX2lkIDogdHJ1ZSwgbm9fZGF0YSA6IHRydWUsIG5vX3N0YXRlIDogdHJ1ZSB9KSA6IG9iajtcclxuXHRcdFx0aWYoIW5vZGUpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblx0XHRcdGlmKG5vZGUuaWQgPT09IHRydWUpIHsgZGVsZXRlIG5vZGUuaWQ7IH1cclxuXHRcdFx0bm9kZSA9IHRoaXMuX3BhcnNlX21vZGVsX2Zyb21fanNvbihub2RlLCBuZXdfcGFyLmlkLCBuZXdfcGFyLnBhcmVudHMuY29uY2F0KCkpO1xyXG5cdFx0XHRpZighbm9kZSkgeyByZXR1cm4gZmFsc2U7IH1cclxuXHRcdFx0dG1wID0gdGhpcy5nZXRfbm9kZShub2RlKTtcclxuXHRcdFx0ZHBjID0gW107XHJcblx0XHRcdGRwYy5wdXNoKG5vZGUpO1xyXG5cdFx0XHRkcGMgPSBkcGMuY29uY2F0KHRtcC5jaGlsZHJlbl9kKTtcclxuXHRcdFx0dGhpcy50cmlnZ2VyKCdtb2RlbCcsIHsgXCJub2Rlc1wiIDogZHBjLCBcInBhcmVudFwiIDogbmV3X3Bhci5pZCB9KTtcclxuXHJcblx0XHRcdC8vIGluc2VydCBpbnRvIG5ldyBwYXJlbnQgYW5kIHVwXHJcblx0XHRcdGZvcihpID0gMCwgaiA9IG5ld19wYXIucGFyZW50cy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHR0aGlzLl9tb2RlbC5kYXRhW25ld19wYXIucGFyZW50c1tpXV0uY2hpbGRyZW5fZCA9IHRoaXMuX21vZGVsLmRhdGFbbmV3X3Bhci5wYXJlbnRzW2ldXS5jaGlsZHJlbl9kLmNvbmNhdChkcGMpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGRwYyA9IFtdO1xyXG5cdFx0XHRmb3IoaSA9IDAsIGogPSBuZXdfcGFyLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdGRwY1tpID49IHBvcyA/IGkrMSA6IGldID0gbmV3X3Bhci5jaGlsZHJlbltpXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRkcGNbcG9zXSA9IHRtcC5pZDtcclxuXHRcdFx0bmV3X3Bhci5jaGlsZHJlbiA9IGRwYztcclxuXHRcdFx0bmV3X3Bhci5jaGlsZHJlbl9kLnB1c2godG1wLmlkKTtcclxuXHRcdFx0bmV3X3Bhci5jaGlsZHJlbl9kID0gbmV3X3Bhci5jaGlsZHJlbl9kLmNvbmNhdCh0bXAuY2hpbGRyZW5fZCk7XHJcblxyXG5cdFx0XHR0aGlzLl9ub2RlX2NoYW5nZWQobmV3X3Bhci5pZCk7XHJcblx0XHRcdHRoaXMucmVkcmF3KG5ld19wYXIuaWQgPT09ICcjJyk7XHJcblx0XHRcdGlmKGNhbGxiYWNrKSB7IGNhbGxiYWNrLmNhbGwodGhpcywgdG1wLCBuZXdfcGFyLCBwb3MpOyB9XHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhIG5vZGUgaXMgY29waWVkXHJcblx0XHRcdCAqIEBldmVudFxyXG5cdFx0XHQgKiBAbmFtZSBjb3B5X25vZGUuanN0cmVlXHJcblx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBub2RlIHRoZSBjb3BpZWQgbm9kZVxyXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gb3JpZ2luYWwgdGhlIG9yaWdpbmFsIG5vZGVcclxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IHBhcmVudCB0aGUgcGFyZW50J3MgSURcclxuXHRcdFx0ICogQHBhcmFtIHtOdW1iZXJ9IHBvc2l0aW9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgbm9kZSBhbW9uZyB0aGUgcGFyZW50J3MgY2hpbGRyZW5cclxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IG9sZF9wYXJlbnQgdGhlIG9sZCBwYXJlbnQgb2YgdGhlIG5vZGVcclxuXHRcdFx0ICogQHBhcmFtIHtCb29sZWFufSBpc19tdWx0aSBkbyB0aGUgbm9kZSBhbmQgbmV3IHBhcmVudCBiZWxvbmcgdG8gZGlmZmVyZW50IGluc3RhbmNlc1xyXG5cdFx0XHQgKiBAcGFyYW0ge2pzVHJlZX0gb2xkX2luc3RhbmNlIHRoZSBpbnN0YW5jZSB0aGUgbm9kZSBjYW1lIGZyb21cclxuXHRcdFx0ICogQHBhcmFtIHtqc1RyZWV9IG5ld19pbnN0YW5jZSB0aGUgaW5zdGFuY2Ugb2YgdGhlIG5ldyBwYXJlbnRcclxuXHRcdFx0ICovXHJcblx0XHRcdHRoaXMudHJpZ2dlcignY29weV9ub2RlJywgeyBcIm5vZGVcIiA6IHRtcCwgXCJvcmlnaW5hbFwiIDogb2JqLCBcInBhcmVudFwiIDogbmV3X3Bhci5pZCwgXCJwb3NpdGlvblwiIDogcG9zLCBcIm9sZF9wYXJlbnRcIiA6IG9sZF9wYXIsIFwiaXNfbXVsdGlcIiA6IGlzX211bHRpLCAnb2xkX2luc3RhbmNlJyA6IG9sZF9pbnMsICduZXdfaW5zdGFuY2UnIDogdGhpcyB9KTtcclxuXHRcdFx0cmV0dXJuIHRtcC5pZDtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGN1dCBhIG5vZGUgKGEgbGF0ZXIgY2FsbCB0byBgcGFzdGUob2JqKWAgd291bGQgbW92ZSB0aGUgbm9kZSlcclxuXHRcdCAqIEBuYW1lIGN1dChvYmopXHJcblx0XHQgKiBAcGFyYW0gIHttaXhlZH0gb2JqIG11bHRpcGxlIG9iamVjdHMgY2FuIGJlIHBhc3NlZCB1c2luZyBhbiBhcnJheVxyXG5cdFx0ICogQHRyaWdnZXIgY3V0LmpzdHJlZVxyXG5cdFx0ICovXHJcblx0XHRjdXQgOiBmdW5jdGlvbiAob2JqKSB7XHJcblx0XHRcdGlmKCFvYmopIHsgb2JqID0gdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmNvbmNhdCgpOyB9XHJcblx0XHRcdGlmKCEkLmlzQXJyYXkob2JqKSkgeyBvYmogPSBbb2JqXTsgfVxyXG5cdFx0XHRpZighb2JqLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH1cclxuXHRcdFx0dmFyIHRtcCA9IFtdLCBvLCB0MSwgdDI7XHJcblx0XHRcdGZvcih0MSA9IDAsIHQyID0gb2JqLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xyXG5cdFx0XHRcdG8gPSB0aGlzLmdldF9ub2RlKG9ialt0MV0pO1xyXG5cdFx0XHRcdGlmKG8gJiYgby5pZCAmJiBvLmlkICE9PSAnIycpIHsgdG1wLnB1c2gobyk7IH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZighdG1wLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH1cclxuXHRcdFx0Y2NwX25vZGUgPSB0bXA7XHJcblx0XHRcdGNjcF9pbnN0ID0gdGhpcztcclxuXHRcdFx0Y2NwX21vZGUgPSAnbW92ZV9ub2RlJztcclxuXHRcdFx0LyoqXHJcblx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIG5vZGVzIGFyZSBhZGRlZCB0byB0aGUgYnVmZmVyIGZvciBtb3ZpbmdcclxuXHRcdFx0ICogQGV2ZW50XHJcblx0XHRcdCAqIEBuYW1lIGN1dC5qc3RyZWVcclxuXHRcdFx0ICogQHBhcmFtIHtBcnJheX0gbm9kZVxyXG5cdFx0XHQgKi9cclxuXHRcdFx0dGhpcy50cmlnZ2VyKCdjdXQnLCB7IFwibm9kZVwiIDogb2JqIH0pO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogY29weSBhIG5vZGUgKGEgbGF0ZXIgY2FsbCB0byBgcGFzdGUob2JqKWAgd291bGQgY29weSB0aGUgbm9kZSlcclxuXHRcdCAqIEBuYW1lIGNvcHkob2JqKVxyXG5cdFx0ICogQHBhcmFtICB7bWl4ZWR9IG9iaiBtdWx0aXBsZSBvYmplY3RzIGNhbiBiZSBwYXNzZWQgdXNpbmcgYW4gYXJyYXlcclxuXHRcdCAqIEB0cmlnZ2VyIGNvcHkuanN0cmVcclxuXHRcdCAqL1xyXG5cdFx0Y29weSA6IGZ1bmN0aW9uIChvYmopIHtcclxuXHRcdFx0aWYoIW9iaikgeyBvYmogPSB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQuY29uY2F0KCk7IH1cclxuXHRcdFx0aWYoISQuaXNBcnJheShvYmopKSB7IG9iaiA9IFtvYmpdOyB9XHJcblx0XHRcdGlmKCFvYmoubGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cdFx0XHR2YXIgdG1wID0gW10sIG8sIHQxLCB0MjtcclxuXHRcdFx0Zm9yKHQxID0gMCwgdDIgPSBvYmoubGVuZ3RoOyB0MSA8IHQyOyB0MSsrKSB7XHJcblx0XHRcdFx0byA9IHRoaXMuZ2V0X25vZGUob2JqW3QxXSk7XHJcblx0XHRcdFx0aWYobyAmJiBvLmlkICYmIG8uaWQgIT09ICcjJykgeyB0bXAucHVzaChvKTsgfVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmKCF0bXAubGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cdFx0XHRjY3Bfbm9kZSA9IHRtcDtcclxuXHRcdFx0Y2NwX2luc3QgPSB0aGlzO1xyXG5cdFx0XHRjY3BfbW9kZSA9ICdjb3B5X25vZGUnO1xyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogdHJpZ2dlcmVkIHdoZW4gbm9kZXMgYXJlIGFkZGVkIHRvIHRoZSBidWZmZXIgZm9yIGNvcHlpbmdcclxuXHRcdFx0ICogQGV2ZW50XHJcblx0XHRcdCAqIEBuYW1lIGNvcHkuanN0cmVlXHJcblx0XHRcdCAqIEBwYXJhbSB7QXJyYXl9IG5vZGVcclxuXHRcdFx0ICovXHJcblx0XHRcdHRoaXMudHJpZ2dlcignY29weScsIHsgXCJub2RlXCIgOiBvYmogfSk7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBnZXQgdGhlIGN1cnJlbnQgYnVmZmVyIChhbnkgbm9kZXMgdGhhdCBhcmUgd2FpdGluZyBmb3IgYSBwYXN0ZSBvcGVyYXRpb24pXHJcblx0XHQgKiBAbmFtZSBnZXRfYnVmZmVyKClcclxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gYW4gb2JqZWN0IGNvbnNpc3Rpbmcgb2YgYG1vZGVgIChcImNvcHlfbm9kZVwiIG9yIFwibW92ZV9ub2RlXCIpLCBgbm9kZWAgKGFuIGFycmF5IG9mIG9iamVjdHMpIGFuZCBgaW5zdGAgKHRoZSBpbnN0YW5jZSlcclxuXHRcdCAqL1xyXG5cdFx0Z2V0X2J1ZmZlciA6IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0cmV0dXJuIHsgJ21vZGUnIDogY2NwX21vZGUsICdub2RlJyA6IGNjcF9ub2RlLCAnaW5zdCcgOiBjY3BfaW5zdCB9O1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogY2hlY2sgaWYgdGhlcmUgaXMgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgdG8gcGFzdGVcclxuXHRcdCAqIEBuYW1lIGNhbl9wYXN0ZSgpXHJcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxyXG5cdFx0ICovXHJcblx0XHRjYW5fcGFzdGUgOiBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHJldHVybiBjY3BfbW9kZSAhPT0gZmFsc2UgJiYgY2NwX25vZGUgIT09IGZhbHNlOyAvLyAmJiBjY3BfaW5zdC5fbW9kZWwuZGF0YVtjY3Bfbm9kZV07XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBjb3B5IG9yIG1vdmUgdGhlIHByZXZpb3VzbHkgY3V0IG9yIGNvcGllZCBub2RlcyB0byBhIG5ldyBwYXJlbnRcclxuXHRcdCAqIEBuYW1lIHBhc3RlKG9iailcclxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmogdGhlIG5ldyBwYXJlbnRcclxuXHRcdCAqIEB0cmlnZ2VyIHBhc3RlLmpzdHJlZVxyXG5cdFx0ICovXHJcblx0XHRwYXN0ZSA6IGZ1bmN0aW9uIChvYmopIHtcclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRpZighb2JqIHx8ICFjY3BfbW9kZSB8fCAhY2NwX21vZGUubWF0Y2goL14oY29weV9ub2RlfG1vdmVfbm9kZSkkLykgfHwgIWNjcF9ub2RlKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cdFx0XHRpZih0aGlzW2NjcF9tb2RlXShjY3Bfbm9kZSwgb2JqKSkge1xyXG5cdFx0XHRcdC8qKlxyXG5cdFx0XHRcdCAqIHRyaWdnZXJlZCB3aGVuIHBhc3RlIGlzIGludm9rZWRcclxuXHRcdFx0XHQgKiBAZXZlbnRcclxuXHRcdFx0XHQgKiBAbmFtZSBwYXN0ZS5qc3RyZWVcclxuXHRcdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gcGFyZW50IHRoZSBJRCBvZiB0aGUgcmVjZWl2aW5nIG5vZGVcclxuXHRcdFx0XHQgKiBAcGFyYW0ge0FycmF5fSBub2RlIHRoZSBub2RlcyBpbiB0aGUgYnVmZmVyXHJcblx0XHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IG1vZGUgdGhlIHBlcmZvcm1lZCBvcGVyYXRpb24gLSBcImNvcHlfbm9kZVwiIG9yIFwibW92ZV9ub2RlXCJcclxuXHRcdFx0XHQgKi9cclxuXHRcdFx0XHR0aGlzLnRyaWdnZXIoJ3Bhc3RlJywgeyBcInBhcmVudFwiIDogb2JqLmlkLCBcIm5vZGVcIiA6IGNjcF9ub2RlLCBcIm1vZGVcIiA6IGNjcF9tb2RlIH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNjcF9ub2RlID0gZmFsc2U7XHJcblx0XHRcdGNjcF9tb2RlID0gZmFsc2U7XHJcblx0XHRcdGNjcF9pbnN0ID0gZmFsc2U7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBwdXQgYSBub2RlIGluIGVkaXQgbW9kZSAoaW5wdXQgZmllbGQgdG8gcmVuYW1lIHRoZSBub2RlKVxyXG5cdFx0ICogQG5hbWUgZWRpdChvYmogWywgZGVmYXVsdF90ZXh0XSlcclxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmpcclxuXHRcdCAqIEBwYXJhbSAge1N0cmluZ30gZGVmYXVsdF90ZXh0IHRoZSB0ZXh0IHRvIHBvcHVsYXRlIHRoZSBpbnB1dCB3aXRoIChpZiBvbWl0dGVkIHRoZSBub2RlIHRleHQgdmFsdWUgaXMgdXNlZClcclxuXHRcdCAqL1xyXG5cdFx0ZWRpdCA6IGZ1bmN0aW9uIChvYmosIGRlZmF1bHRfdGV4dCkge1xyXG5cdFx0XHRvYmogPSB0aGlzLl9vcGVuX3RvKG9iaik7XHJcblx0XHRcdGlmKCFvYmogfHwgIW9iai5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblx0XHRcdHZhciBydGwgPSB0aGlzLl9kYXRhLmNvcmUucnRsLFxyXG5cdFx0XHRcdHcgID0gdGhpcy5lbGVtZW50LndpZHRoKCksXHJcblx0XHRcdFx0YSAgPSBvYmouY2hpbGRyZW4oJy5qc3RyZWUtYW5jaG9yJyksXHJcblx0XHRcdFx0cyAgPSAkKCc8c3Bhbj4nKSxcclxuXHRcdFx0XHQvKiFcclxuXHRcdFx0XHRvaSA9IG9iai5jaGlsZHJlbihcImk6dmlzaWJsZVwiKSxcclxuXHRcdFx0XHRhaSA9IGEuY2hpbGRyZW4oXCJpOnZpc2libGVcIiksXHJcblx0XHRcdFx0dzEgPSBvaS53aWR0aCgpICogb2kubGVuZ3RoLFxyXG5cdFx0XHRcdHcyID0gYWkud2lkdGgoKSAqIGFpLmxlbmd0aCxcclxuXHRcdFx0XHQqL1xyXG5cdFx0XHRcdHQgID0gdHlwZW9mIGRlZmF1bHRfdGV4dCA9PT0gJ3N0cmluZycgPyBkZWZhdWx0X3RleHQgOiB0aGlzLmdldF90ZXh0KG9iaiksXHJcblx0XHRcdFx0aDEgPSAkKFwiPFwiK1wiZGl2IC8+XCIsIHsgY3NzIDogeyBcInBvc2l0aW9uXCIgOiBcImFic29sdXRlXCIsIFwidG9wXCIgOiBcIi0yMDBweFwiLCBcImxlZnRcIiA6IChydGwgPyBcIjBweFwiIDogXCItMTAwMHB4XCIpLCBcInZpc2liaWxpdHlcIiA6IFwiaGlkZGVuXCIgfSB9KS5hcHBlbmRUbyhcImJvZHlcIiksXHJcblx0XHRcdFx0aDIgPSAkKFwiPFwiK1wiaW5wdXQgLz5cIiwge1xyXG5cdFx0XHRcdFx0XHRcInZhbHVlXCIgOiB0LFxyXG5cdFx0XHRcdFx0XHRcImNsYXNzXCIgOiBcImpzdHJlZS1yZW5hbWUtaW5wdXRcIixcclxuXHRcdFx0XHRcdFx0Ly8gXCJzaXplXCIgOiB0Lmxlbmd0aCxcclxuXHRcdFx0XHRcdFx0XCJjc3NcIiA6IHtcclxuXHRcdFx0XHRcdFx0XHRcInBhZGRpbmdcIiA6IFwiMFwiLFxyXG5cdFx0XHRcdFx0XHRcdFwiYm9yZGVyXCIgOiBcIjFweCBzb2xpZCBzaWx2ZXJcIixcclxuXHRcdFx0XHRcdFx0XHRcImJveC1zaXppbmdcIiA6IFwiYm9yZGVyLWJveFwiLFxyXG5cdFx0XHRcdFx0XHRcdFwiZGlzcGxheVwiIDogXCJpbmxpbmUtYmxvY2tcIixcclxuXHRcdFx0XHRcdFx0XHRcImhlaWdodFwiIDogKHRoaXMuX2RhdGEuY29yZS5saV9oZWlnaHQpICsgXCJweFwiLFxyXG5cdFx0XHRcdFx0XHRcdFwibGluZUhlaWdodFwiIDogKHRoaXMuX2RhdGEuY29yZS5saV9oZWlnaHQpICsgXCJweFwiLFxyXG5cdFx0XHRcdFx0XHRcdFwid2lkdGhcIiA6IFwiMTUwcHhcIiAvLyB3aWxsIGJlIHNldCBhIGJpdCBmdXJ0aGVyIGRvd25cclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XCJibHVyXCIgOiAkLnByb3h5KGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgaSA9IHMuY2hpbGRyZW4oXCIuanN0cmVlLXJlbmFtZS1pbnB1dFwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdHYgPSBpLnZhbCgpO1xyXG5cdFx0XHRcdFx0XHRcdGlmKHYgPT09IFwiXCIpIHsgdiA9IHQ7IH1cclxuXHRcdFx0XHRcdFx0XHRoMS5yZW1vdmUoKTtcclxuXHRcdFx0XHRcdFx0XHRzLnJlcGxhY2VXaXRoKGEpO1xyXG5cdFx0XHRcdFx0XHRcdHMucmVtb3ZlKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zZXRfdGV4dChvYmosIHQpO1xyXG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMucmVuYW1lX25vZGUob2JqLCB2KSA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2V0X3RleHQob2JqLCB0KTsgLy8gbW92ZSB0aGlzIHVwPyBhbmQgZml4ICM0ODNcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0sIHRoaXMpLFxyXG5cdFx0XHRcdFx0XHRcImtleWRvd25cIiA6IGZ1bmN0aW9uIChldmVudCkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBrZXkgPSBldmVudC53aGljaDtcclxuXHRcdFx0XHRcdFx0XHRpZihrZXkgPT09IDI3KSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnZhbHVlID0gdDtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYoa2V5ID09PSAyNyB8fCBrZXkgPT09IDEzIHx8IGtleSA9PT0gMzcgfHwga2V5ID09PSAzOCB8fCBrZXkgPT09IDM5IHx8IGtleSA9PT0gNDAgfHwga2V5ID09PSAzMikge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGlmKGtleSA9PT0gMjcgfHwga2V5ID09PSAxMykge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYmx1cigpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XCJjbGlja1wiIDogZnVuY3Rpb24gKGUpIHsgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsgfSxcclxuXHRcdFx0XHRcdFx0XCJtb3VzZWRvd25cIiA6IGZ1bmN0aW9uIChlKSB7IGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7IH0sXHJcblx0XHRcdFx0XHRcdFwia2V5dXBcIiA6IGZ1bmN0aW9uIChldmVudCkge1xyXG5cdFx0XHRcdFx0XHRcdGgyLndpZHRoKE1hdGgubWluKGgxLnRleHQoXCJwV1wiICsgdGhpcy52YWx1ZSkud2lkdGgoKSx3KSk7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFwia2V5cHJlc3NcIiA6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0aWYoZXZlbnQud2hpY2ggPT09IDEzKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KSxcclxuXHRcdFx0XHRmbiA9IHtcclxuXHRcdFx0XHRcdFx0Zm9udEZhbWlseVx0XHQ6IGEuY3NzKCdmb250RmFtaWx5JylcdFx0fHwgJycsXHJcblx0XHRcdFx0XHRcdGZvbnRTaXplXHRcdDogYS5jc3MoJ2ZvbnRTaXplJylcdFx0XHR8fCAnJyxcclxuXHRcdFx0XHRcdFx0Zm9udFdlaWdodFx0XHQ6IGEuY3NzKCdmb250V2VpZ2h0JylcdFx0fHwgJycsXHJcblx0XHRcdFx0XHRcdGZvbnRTdHlsZVx0XHQ6IGEuY3NzKCdmb250U3R5bGUnKVx0XHR8fCAnJyxcclxuXHRcdFx0XHRcdFx0Zm9udFN0cmV0Y2hcdFx0OiBhLmNzcygnZm9udFN0cmV0Y2gnKVx0XHR8fCAnJyxcclxuXHRcdFx0XHRcdFx0Zm9udFZhcmlhbnRcdFx0OiBhLmNzcygnZm9udFZhcmlhbnQnKVx0XHR8fCAnJyxcclxuXHRcdFx0XHRcdFx0bGV0dGVyU3BhY2luZ1x0OiBhLmNzcygnbGV0dGVyU3BhY2luZycpXHR8fCAnJyxcclxuXHRcdFx0XHRcdFx0d29yZFNwYWNpbmdcdFx0OiBhLmNzcygnd29yZFNwYWNpbmcnKVx0XHR8fCAnJ1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdHRoaXMuc2V0X3RleHQob2JqLCBcIlwiKTtcclxuXHRcdFx0cy5hdHRyKCdjbGFzcycsIGEuYXR0cignY2xhc3MnKSkuYXBwZW5kKGEuY29udGVudHMoKS5jbG9uZSgpKS5hcHBlbmQoaDIpO1xyXG5cdFx0XHRhLnJlcGxhY2VXaXRoKHMpO1xyXG5cdFx0XHRoMS5jc3MoZm4pO1xyXG5cdFx0XHRoMi5jc3MoZm4pLndpZHRoKE1hdGgubWluKGgxLnRleHQoXCJwV1wiICsgaDJbMF0udmFsdWUpLndpZHRoKCksdykpWzBdLnNlbGVjdCgpO1xyXG5cdFx0fSxcclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBjaGFuZ2VzIHRoZSB0aGVtZVxyXG5cdFx0ICogQG5hbWUgc2V0X3RoZW1lKHRoZW1lX25hbWUgWywgdGhlbWVfdXJsXSlcclxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSB0aGVtZV9uYW1lIHRoZSBuYW1lIG9mIHRoZSBuZXcgdGhlbWUgdG8gYXBwbHlcclxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IHRoZW1lX3VybCAgdGhlIGxvY2F0aW9uIG9mIHRoZSBDU1MgZmlsZSBmb3IgdGhpcyB0aGVtZS4gT21pdCBvciBzZXQgdG8gYGZhbHNlYCBpZiB5b3UgbWFudWFsbHkgaW5jbHVkZWQgdGhlIGZpbGUuIFNldCB0byBgdHJ1ZWAgdG8gYXV0b2xvYWQgZnJvbSB0aGUgYGNvcmUudGhlbWVzLmRpcmAgZGlyZWN0b3J5LlxyXG5cdFx0ICogQHRyaWdnZXIgc2V0X3RoZW1lLmpzdHJlZVxyXG5cdFx0ICovXHJcblx0XHRzZXRfdGhlbWUgOiBmdW5jdGlvbiAodGhlbWVfbmFtZSwgdGhlbWVfdXJsKSB7XHJcblx0XHRcdGlmKCF0aGVtZV9uYW1lKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cdFx0XHRpZih0aGVtZV91cmwgPT09IHRydWUpIHtcclxuXHRcdFx0XHR2YXIgZGlyID0gdGhpcy5zZXR0aW5ncy5jb3JlLnRoZW1lcy5kaXI7XHJcblx0XHRcdFx0aWYoIWRpcikgeyBkaXIgPSAkLmpzdHJlZS5wYXRoICsgJy90aGVtZXMnOyB9XHJcblx0XHRcdFx0dGhlbWVfdXJsID0gZGlyICsgJy8nICsgdGhlbWVfbmFtZSArICcvc3R5bGUuY3NzJztcclxuXHRcdFx0fVxyXG5cdFx0XHRpZih0aGVtZV91cmwgJiYgJC5pbkFycmF5KHRoZW1lX3VybCwgdGhlbWVzX2xvYWRlZCkgPT09IC0xKSB7XHJcblx0XHRcdFx0JCgnaGVhZCcpLmFwcGVuZCgnPCcrJ2xpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCInICsgdGhlbWVfdXJsICsgJ1wiIHR5cGU9XCJ0ZXh0L2Nzc1wiIC8+Jyk7XHJcblx0XHRcdFx0dGhlbWVzX2xvYWRlZC5wdXNoKHRoZW1lX3VybCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYodGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5uYW1lKSB7XHJcblx0XHRcdFx0dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCdqc3RyZWUtJyArIHRoaXMuX2RhdGEuY29yZS50aGVtZXMubmFtZSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5uYW1lID0gdGhlbWVfbmFtZTtcclxuXHRcdFx0dGhpcy5lbGVtZW50LmFkZENsYXNzKCdqc3RyZWUtJyArIHRoZW1lX25hbWUpO1xyXG5cdFx0XHR0aGlzLmVsZW1lbnRbdGhpcy5zZXR0aW5ncy5jb3JlLnRoZW1lcy5yZXNwb25zaXZlID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcycgXSgnanN0cmVlLScgKyB0aGVtZV9uYW1lICsgJy1yZXNwb25zaXZlJyk7XHJcblx0XHRcdC8qKlxyXG5cdFx0XHQgKiB0cmlnZ2VyZWQgd2hlbiBhIHRoZW1lIGlzIHNldFxyXG5cdFx0XHQgKiBAZXZlbnRcclxuXHRcdFx0ICogQG5hbWUgc2V0X3RoZW1lLmpzdHJlZVxyXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gdGhlbWUgdGhlIG5ldyB0aGVtZVxyXG5cdFx0XHQgKi9cclxuXHRcdFx0dGhpcy50cmlnZ2VyKCdzZXRfdGhlbWUnLCB7ICd0aGVtZScgOiB0aGVtZV9uYW1lIH0pO1xyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogZ2V0cyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGFwcGxpZWQgdGhlbWUgbmFtZVxyXG5cdFx0ICogQG5hbWUgZ2V0X3RoZW1lKClcclxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0Z2V0X3RoZW1lIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5uYW1lOyB9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBjaGFuZ2VzIHRoZSB0aGVtZSB2YXJpYW50IChpZiB0aGUgdGhlbWUgaGFzIHZhcmlhbnRzKVxyXG5cdFx0ICogQG5hbWUgc2V0X3RoZW1lX3ZhcmlhbnQodmFyaWFudF9uYW1lKVxyXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd8Qm9vbGVhbn0gdmFyaWFudF9uYW1lIHRoZSB2YXJpYW50IHRvIGFwcGx5IChpZiBgZmFsc2VgIGlzIHVzZWQgdGhlIGN1cnJlbnQgdmFyaWFudCBpcyByZW1vdmVkKVxyXG5cdFx0ICovXHJcblx0XHRzZXRfdGhlbWVfdmFyaWFudCA6IGZ1bmN0aW9uICh2YXJpYW50X25hbWUpIHtcclxuXHRcdFx0aWYodGhpcy5fZGF0YS5jb3JlLnRoZW1lcy52YXJpYW50KSB7XHJcblx0XHRcdFx0dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCdqc3RyZWUtJyArIHRoaXMuX2RhdGEuY29yZS50aGVtZXMubmFtZSArICctJyArIHRoaXMuX2RhdGEuY29yZS50aGVtZXMudmFyaWFudCk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5fZGF0YS5jb3JlLnRoZW1lcy52YXJpYW50ID0gdmFyaWFudF9uYW1lO1xyXG5cdFx0XHRpZih2YXJpYW50X25hbWUpIHtcclxuXHRcdFx0XHR0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoJ2pzdHJlZS0nICsgdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5uYW1lICsgJy0nICsgdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy52YXJpYW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICogZ2V0cyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGFwcGxpZWQgdGhlbWUgdmFyaWFudFxyXG5cdFx0ICogQG5hbWUgZ2V0X3RoZW1lKClcclxuXHRcdCAqIEByZXR1cm4ge1N0cmluZ31cclxuXHRcdCAqL1xyXG5cdFx0Z2V0X3RoZW1lX3ZhcmlhbnQgOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kYXRhLmNvcmUudGhlbWVzLnZhcmlhbnQ7IH0sXHJcblx0XHQvKipcclxuXHRcdCAqIHNob3dzIGEgc3RyaXBlZCBiYWNrZ3JvdW5kIG9uIHRoZSBjb250YWluZXIgKGlmIHRoZSB0aGVtZSBzdXBwb3J0cyBpdClcclxuXHRcdCAqIEBuYW1lIHNob3dfc3RyaXBlcygpXHJcblx0XHQgKi9cclxuXHRcdHNob3dfc3RyaXBlcyA6IGZ1bmN0aW9uICgpIHsgdGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5zdHJpcGVzID0gdHJ1ZTsgdGhpcy5nZXRfY29udGFpbmVyX3VsKCkuYWRkQ2xhc3MoXCJqc3RyZWUtc3RyaXBlZFwiKTsgfSxcclxuXHRcdC8qKlxyXG5cdFx0ICogaGlkZXMgdGhlIHN0cmlwZWQgYmFja2dyb3VuZCBvbiB0aGUgY29udGFpbmVyXHJcblx0XHQgKiBAbmFtZSBoaWRlX3N0cmlwZXMoKVxyXG5cdFx0ICovXHJcblx0XHRoaWRlX3N0cmlwZXMgOiBmdW5jdGlvbiAoKSB7IHRoaXMuX2RhdGEuY29yZS50aGVtZXMuc3RyaXBlcyA9IGZhbHNlOyB0aGlzLmdldF9jb250YWluZXJfdWwoKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1zdHJpcGVkXCIpOyB9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiB0b2dnbGVzIHRoZSBzdHJpcGVkIGJhY2tncm91bmQgb24gdGhlIGNvbnRhaW5lclxyXG5cdFx0ICogQG5hbWUgdG9nZ2xlX3N0cmlwZXMoKVxyXG5cdFx0ICovXHJcblx0XHR0b2dnbGVfc3RyaXBlcyA6IGZ1bmN0aW9uICgpIHsgaWYodGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5zdHJpcGVzKSB7IHRoaXMuaGlkZV9zdHJpcGVzKCk7IH0gZWxzZSB7IHRoaXMuc2hvd19zdHJpcGVzKCk7IH0gfSxcclxuXHRcdC8qKlxyXG5cdFx0ICogc2hvd3MgdGhlIGNvbm5lY3RpbmcgZG90cyAoaWYgdGhlIHRoZW1lIHN1cHBvcnRzIGl0KVxyXG5cdFx0ICogQG5hbWUgc2hvd19kb3RzKClcclxuXHRcdCAqL1xyXG5cdFx0c2hvd19kb3RzIDogZnVuY3Rpb24gKCkgeyB0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmRvdHMgPSB0cnVlOyB0aGlzLmdldF9jb250YWluZXJfdWwoKS5yZW1vdmVDbGFzcyhcImpzdHJlZS1uby1kb3RzXCIpOyB9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBoaWRlcyB0aGUgY29ubmVjdGluZyBkb3RzXHJcblx0XHQgKiBAbmFtZSBoaWRlX2RvdHMoKVxyXG5cdFx0ICovXHJcblx0XHRoaWRlX2RvdHMgOiBmdW5jdGlvbiAoKSB7IHRoaXMuX2RhdGEuY29yZS50aGVtZXMuZG90cyA9IGZhbHNlOyB0aGlzLmdldF9jb250YWluZXJfdWwoKS5hZGRDbGFzcyhcImpzdHJlZS1uby1kb3RzXCIpOyB9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiB0b2dnbGVzIHRoZSBjb25uZWN0aW5nIGRvdHNcclxuXHRcdCAqIEBuYW1lIHRvZ2dsZV9kb3RzKClcclxuXHRcdCAqL1xyXG5cdFx0dG9nZ2xlX2RvdHMgOiBmdW5jdGlvbiAoKSB7IGlmKHRoaXMuX2RhdGEuY29yZS50aGVtZXMuZG90cykgeyB0aGlzLmhpZGVfZG90cygpOyB9IGVsc2UgeyB0aGlzLnNob3dfZG90cygpOyB9IH0sXHJcblx0XHQvKipcclxuXHRcdCAqIHNob3cgdGhlIG5vZGUgaWNvbnNcclxuXHRcdCAqIEBuYW1lIHNob3dfaWNvbnMoKVxyXG5cdFx0ICovXHJcblx0XHRzaG93X2ljb25zIDogZnVuY3Rpb24gKCkgeyB0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmljb25zID0gdHJ1ZTsgdGhpcy5nZXRfY29udGFpbmVyX3VsKCkucmVtb3ZlQ2xhc3MoXCJqc3RyZWUtbm8taWNvbnNcIik7IH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGhpZGUgdGhlIG5vZGUgaWNvbnNcclxuXHRcdCAqIEBuYW1lIGhpZGVfaWNvbnMoKVxyXG5cdFx0ICovXHJcblx0XHRoaWRlX2ljb25zIDogZnVuY3Rpb24gKCkgeyB0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmljb25zID0gZmFsc2U7IHRoaXMuZ2V0X2NvbnRhaW5lcl91bCgpLmFkZENsYXNzKFwianN0cmVlLW5vLWljb25zXCIpOyB9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiB0b2dnbGUgdGhlIG5vZGUgaWNvbnNcclxuXHRcdCAqIEBuYW1lIHRvZ2dsZV9pY29ucygpXHJcblx0XHQgKi9cclxuXHRcdHRvZ2dsZV9pY29ucyA6IGZ1bmN0aW9uICgpIHsgaWYodGhpcy5fZGF0YS5jb3JlLnRoZW1lcy5pY29ucykgeyB0aGlzLmhpZGVfaWNvbnMoKTsgfSBlbHNlIHsgdGhpcy5zaG93X2ljb25zKCk7IH0gfSxcclxuXHRcdC8qKlxyXG5cdFx0ICogc2V0IHRoZSBub2RlIGljb24gZm9yIGEgbm9kZVxyXG5cdFx0ICogQG5hbWUgc2V0X2ljb24ob2JqLCBpY29uKVxyXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gb2JqXHJcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gaWNvbiB0aGUgbmV3IGljb24gLSBjYW4gYmUgYSBwYXRoIHRvIGFuIGljb24gb3IgYSBjbGFzc05hbWUsIGlmIHVzaW5nIGFuIGltYWdlIHRoYXQgaXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHVzZSBhIGAuL2AgcHJlZml4LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBkZXRlY3RlZCBhcyBhIGNsYXNzXHJcblx0XHQgKi9cclxuXHRcdHNldF9pY29uIDogZnVuY3Rpb24gKG9iaiwgaWNvbikge1xyXG5cdFx0XHR2YXIgdDEsIHQyLCBkb20sIG9sZDtcclxuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcclxuXHRcdFx0XHRvYmogPSBvYmouc2xpY2UoKTtcclxuXHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IG9iai5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcclxuXHRcdFx0XHRcdHRoaXMuc2V0X2ljb24ob2JqW3QxXSwgaWNvbik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcclxuXHRcdFx0aWYoIW9iaiB8fCBvYmouaWQgPT09ICcjJykgeyByZXR1cm4gZmFsc2U7IH1cclxuXHRcdFx0b2xkID0gb2JqLmljb247XHJcblx0XHRcdG9iai5pY29uID0gaWNvbjtcclxuXHRcdFx0ZG9tID0gdGhpcy5nZXRfbm9kZShvYmosIHRydWUpLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuY2hpbGRyZW4oXCIuanN0cmVlLXRoZW1laWNvblwiKTtcclxuXHRcdFx0aWYoaWNvbiA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHR0aGlzLmhpZGVfaWNvbihvYmopO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYoaWNvbiA9PT0gdHJ1ZSkge1xyXG5cdFx0XHRcdGRvbS5yZW1vdmVDbGFzcygnanN0cmVlLXRoZW1laWNvbi1jdXN0b20gJyArIG9sZCkuY3NzKFwiYmFja2dyb3VuZFwiLFwiXCIpLnJlbW92ZUF0dHIoXCJyZWxcIik7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZihpY29uLmluZGV4T2YoXCIvXCIpID09PSAtMSAmJiBpY29uLmluZGV4T2YoXCIuXCIpID09PSAtMSkge1xyXG5cdFx0XHRcdGRvbS5yZW1vdmVDbGFzcyhvbGQpLmNzcyhcImJhY2tncm91bmRcIixcIlwiKTtcclxuXHRcdFx0XHRkb20uYWRkQ2xhc3MoaWNvbiArICcganN0cmVlLXRoZW1laWNvbi1jdXN0b20nKS5hdHRyKFwicmVsXCIsaWNvbik7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0ZG9tLnJlbW92ZUNsYXNzKG9sZCkuY3NzKFwiYmFja2dyb3VuZFwiLFwiXCIpO1xyXG5cdFx0XHRcdGRvbS5hZGRDbGFzcygnanN0cmVlLXRoZW1laWNvbi1jdXN0b20nKS5jc3MoXCJiYWNrZ3JvdW5kXCIsIFwidXJsKCdcIiArIGljb24gKyBcIicpIGNlbnRlciBjZW50ZXIgbm8tcmVwZWF0XCIpLmF0dHIoXCJyZWxcIixpY29uKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGdldCB0aGUgbm9kZSBpY29uIGZvciBhIG5vZGVcclxuXHRcdCAqIEBuYW1lIGdldF9pY29uKG9iailcclxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG9ialxyXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfVxyXG5cdFx0ICovXHJcblx0XHRnZXRfaWNvbiA6IGZ1bmN0aW9uIChvYmopIHtcclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRyZXR1cm4gKCFvYmogfHwgb2JqLmlkID09PSAnIycpID8gZmFsc2UgOiBvYmouaWNvbjtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIGhpZGUgdGhlIGljb24gb24gYW4gaW5kaXZpZHVhbCBub2RlXHJcblx0XHQgKiBAbmFtZSBoaWRlX2ljb24ob2JqKVxyXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gb2JqXHJcblx0XHQgKi9cclxuXHRcdGhpZGVfaWNvbiA6IGZ1bmN0aW9uIChvYmopIHtcclxuXHRcdFx0dmFyIHQxLCB0MjtcclxuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcclxuXHRcdFx0XHRvYmogPSBvYmouc2xpY2UoKTtcclxuXHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IG9iai5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcclxuXHRcdFx0XHRcdHRoaXMuaGlkZV9pY29uKG9ialt0MV0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XHJcblx0XHRcdGlmKCFvYmogfHwgb2JqID09PSAnIycpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblx0XHRcdG9iai5pY29uID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKS5jaGlsZHJlbihcImFcIikuY2hpbGRyZW4oXCIuanN0cmVlLXRoZW1laWNvblwiKS5hZGRDbGFzcygnanN0cmVlLXRoZW1laWNvbi1oaWRkZW4nKTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9LFxyXG5cdFx0LyoqXHJcblx0XHQgKiBzaG93IHRoZSBpY29uIG9uIGFuIGluZGl2aWR1YWwgbm9kZVxyXG5cdFx0ICogQG5hbWUgc2hvd19pY29uKG9iailcclxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG9ialxyXG5cdFx0ICovXHJcblx0XHRzaG93X2ljb24gOiBmdW5jdGlvbiAob2JqKSB7XHJcblx0XHRcdHZhciB0MSwgdDIsIGRvbTtcclxuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcclxuXHRcdFx0XHRvYmogPSBvYmouc2xpY2UoKTtcclxuXHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IG9iai5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcclxuXHRcdFx0XHRcdHRoaXMuc2hvd19pY29uKG9ialt0MV0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XHJcblx0XHRcdGlmKCFvYmogfHwgb2JqID09PSAnIycpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblx0XHRcdGRvbSA9IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKTtcclxuXHRcdFx0b2JqLmljb24gPSBkb20ubGVuZ3RoID8gZG9tLmNoaWxkcmVuKFwiYVwiKS5jaGlsZHJlbihcIi5qc3RyZWUtdGhlbWVpY29uXCIpLmF0dHIoJ3JlbCcpIDogdHJ1ZTtcclxuXHRcdFx0aWYoIW9iai5pY29uKSB7IG9iai5pY29uID0gdHJ1ZTsgfVxyXG5cdFx0XHRkb20uY2hpbGRyZW4oXCJhXCIpLmNoaWxkcmVuKFwiLmpzdHJlZS10aGVtZWljb25cIikucmVtb3ZlQ2xhc3MoJ2pzdHJlZS10aGVtZWljb24taGlkZGVuJyk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8vIGhlbHBlcnNcclxuXHQkLnZha2F0YSA9IHt9O1xyXG5cdC8vIHJldmVyc2VcclxuXHQkLmZuLnZha2F0YV9yZXZlcnNlID0gW10ucmV2ZXJzZTtcclxuXHQvLyBjb2xsZWN0IGF0dHJpYnV0ZXNcclxuXHQkLnZha2F0YS5hdHRyaWJ1dGVzID0gZnVuY3Rpb24obm9kZSwgd2l0aF92YWx1ZXMpIHtcclxuXHRcdG5vZGUgPSAkKG5vZGUpWzBdO1xyXG5cdFx0dmFyIGF0dHIgPSB3aXRoX3ZhbHVlcyA/IHt9IDogW107XHJcblx0XHRpZihub2RlICYmIG5vZGUuYXR0cmlidXRlcykge1xyXG5cdFx0XHQkLmVhY2gobm9kZS5hdHRyaWJ1dGVzLCBmdW5jdGlvbiAoaSwgdikge1xyXG5cdFx0XHRcdGlmKCQuaW5BcnJheSh2Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksWydzdHlsZScsJ2NvbnRlbnRlZGl0YWJsZScsJ2hhc2ZvY3VzJywndGFiaW5kZXgnXSkgIT09IC0xKSB7IHJldHVybjsgfVxyXG5cdFx0XHRcdGlmKHYubm9kZVZhbHVlICE9PSBudWxsICYmICQudHJpbSh2Lm5vZGVWYWx1ZSkgIT09ICcnKSB7XHJcblx0XHRcdFx0XHRpZih3aXRoX3ZhbHVlcykgeyBhdHRyW3Yubm9kZU5hbWVdID0gdi5ub2RlVmFsdWU7IH1cclxuXHRcdFx0XHRcdGVsc2UgeyBhdHRyLnB1c2godi5ub2RlTmFtZSk7IH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGF0dHI7XHJcblx0fTtcclxuXHQkLnZha2F0YS5hcnJheV91bmlxdWUgPSBmdW5jdGlvbihhcnJheSkge1xyXG5cdFx0dmFyIGEgPSBbXSwgaSwgaiwgbDtcclxuXHRcdGZvcihpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHRmb3IoaiA9IDA7IGogPD0gaTsgaisrKSB7XHJcblx0XHRcdFx0aWYoYXJyYXlbaV0gPT09IGFycmF5W2pdKSB7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoaiA9PT0gaSkgeyBhLnB1c2goYXJyYXlbaV0pOyB9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gYTtcclxuXHR9O1xyXG5cdC8vIHJlbW92ZSBpdGVtIGZyb20gYXJyYXlcclxuXHQkLnZha2F0YS5hcnJheV9yZW1vdmUgPSBmdW5jdGlvbihhcnJheSwgZnJvbSwgdG8pIHtcclxuXHRcdHZhciByZXN0ID0gYXJyYXkuc2xpY2UoKHRvIHx8IGZyb20pICsgMSB8fCBhcnJheS5sZW5ndGgpO1xyXG5cdFx0YXJyYXkubGVuZ3RoID0gZnJvbSA8IDAgPyBhcnJheS5sZW5ndGggKyBmcm9tIDogZnJvbTtcclxuXHRcdGFycmF5LnB1c2guYXBwbHkoYXJyYXksIHJlc3QpO1xyXG5cdFx0cmV0dXJuIGFycmF5O1xyXG5cdH07XHJcblx0Ly8gcmVtb3ZlIGl0ZW0gZnJvbSBhcnJheVxyXG5cdCQudmFrYXRhLmFycmF5X3JlbW92ZV9pdGVtID0gZnVuY3Rpb24oYXJyYXksIGl0ZW0pIHtcclxuXHRcdHZhciB0bXAgPSAkLmluQXJyYXkoaXRlbSwgYXJyYXkpO1xyXG5cdFx0cmV0dXJuIHRtcCAhPT0gLTEgPyAkLnZha2F0YS5hcnJheV9yZW1vdmUoYXJyYXksIHRtcCkgOiBhcnJheTtcclxuXHR9O1xyXG5cdC8vIGJyb3dzZXIgc25pZmZpbmdcclxuXHQoZnVuY3Rpb24gKCkge1xyXG5cdFx0dmFyIGJyb3dzZXIgPSB7fSxcclxuXHRcdFx0Yl9tYXRjaCA9IGZ1bmN0aW9uKHVhKSB7XHJcblx0XHRcdHVhID0gdWEudG9Mb3dlckNhc2UoKTtcclxuXHJcblx0XHRcdHZhciBtYXRjaCA9XHQvKGNocm9tZSlbIFxcL10oW1xcdy5dKykvLmV4ZWMoIHVhICkgfHxcclxuXHRcdFx0XHRcdFx0Lyh3ZWJraXQpWyBcXC9dKFtcXHcuXSspLy5leGVjKCB1YSApIHx8XHJcblx0XHRcdFx0XHRcdC8ob3BlcmEpKD86Lip2ZXJzaW9ufClbIFxcL10oW1xcdy5dKykvLmV4ZWMoIHVhICkgfHxcclxuXHRcdFx0XHRcdFx0Lyhtc2llKSAoW1xcdy5dKykvLmV4ZWMoIHVhICkgfHxcclxuXHRcdFx0XHRcdFx0KHVhLmluZGV4T2YoXCJjb21wYXRpYmxlXCIpIDwgMCAmJiAvKG1vemlsbGEpKD86Lio/IHJ2OihbXFx3Ll0rKXwpLy5leGVjKCB1YSApKSB8fFxyXG5cdFx0XHRcdFx0XHRbXTtcclxuXHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0YnJvd3NlcjogbWF0Y2hbMV0gfHwgXCJcIixcclxuXHRcdFx0XHRcdHZlcnNpb246IG1hdGNoWzJdIHx8IFwiMFwiXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fSxcclxuXHRcdFx0bWF0Y2hlZCA9IGJfbWF0Y2god2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG5cdFx0aWYobWF0Y2hlZC5icm93c2VyKSB7XHJcblx0XHRcdGJyb3dzZXJbIG1hdGNoZWQuYnJvd3NlciBdID0gdHJ1ZTtcclxuXHRcdFx0YnJvd3Nlci52ZXJzaW9uID0gbWF0Y2hlZC52ZXJzaW9uO1xyXG5cdFx0fVxyXG5cdFx0aWYoYnJvd3Nlci5jaHJvbWUpIHtcclxuXHRcdFx0YnJvd3Nlci53ZWJraXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZihicm93c2VyLndlYmtpdCkge1xyXG5cdFx0XHRicm93c2VyLnNhZmFyaSA9IHRydWU7XHJcblx0XHR9XHJcblx0XHQkLnZha2F0YS5icm93c2VyID0gYnJvd3NlcjtcclxuXHR9KCkpO1xyXG5cdGlmKCQudmFrYXRhLmJyb3dzZXIubXNpZSAmJiAkLnZha2F0YS5icm93c2VyLnZlcnNpb24gPCA4KSB7XHJcblx0XHQkLmpzdHJlZS5kZWZhdWx0cy5jb3JlLmFuaW1hdGlvbiA9IDA7XHJcblx0fVxyXG5cclxuLyoqXHJcbiAqICMjIyBDaGVja2JveCBwbHVnaW5cclxuICpcclxuICogVGhpcyBwbHVnaW4gcmVuZGVycyBjaGVja2JveCBpY29ucyBpbiBmcm9udCBvZiBlYWNoIG5vZGUsIG1ha2luZyBtdWx0aXBsZSBzZWxlY3Rpb24gbXVjaCBlYXNpZXIuIFxyXG4gKiBJdCBhbHNvIHN1cHBvcnRzIHRyaS1zdGF0ZSBiZWhhdmlvciwgbWVhbmluZyB0aGF0IGlmIGEgbm9kZSBoYXMgYSBmZXcgb2YgaXRzIGNoaWxkcmVuIGNoZWNrZWQgaXQgd2lsbCBiZSByZW5kZXJlZCBhcyB1bmRldGVybWluZWQsIGFuZCBzdGF0ZSB3aWxsIGJlIHByb3BhZ2F0ZWQgdXAuXHJcbiAqL1xyXG5cclxuXHR2YXIgX2kgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdJJyk7XHJcblx0X2kuY2xhc3NOYW1lID0gJ2pzdHJlZS1pY29uIGpzdHJlZS1jaGVja2JveCc7XHJcblx0LyoqXHJcblx0ICogc3RvcmVzIGFsbCBkZWZhdWx0cyBmb3IgdGhlIGNoZWNrYm94IHBsdWdpblxyXG5cdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNoZWNrYm94XHJcblx0ICogQHBsdWdpbiBjaGVja2JveFxyXG5cdCAqL1xyXG5cdCQuanN0cmVlLmRlZmF1bHRzLmNoZWNrYm94ID0ge1xyXG5cdFx0LyoqXHJcblx0XHQgKiBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBjaGVja2JveGVzIHNob3VsZCBiZSB2aXNpYmxlIChjYW4gYmUgY2hhbmdlZCBhdCBhIGxhdGVyIHRpbWUgdXNpbmcgYHNob3dfY2hlY2tib3hlcygpYCBhbmQgYGhpZGVfY2hlY2tib3hlc2ApLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXHJcblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5jaGVja2JveC52aXNpYmxlXHJcblx0XHQgKiBAcGx1Z2luIGNoZWNrYm94XHJcblx0XHQgKi9cclxuXHRcdHZpc2libGVcdFx0XHRcdDogdHJ1ZSxcclxuXHRcdC8qKlxyXG5cdFx0ICogYSBib29sZWFuIGluZGljYXRpbmcgaWYgY2hlY2tib3hlcyBzaG91bGQgY2FzY2FkZSBkb3duIGFuZCBoYXZlIGFuIHVuZGV0ZXJtaW5lZCBzdGF0ZS4gRGVmYXVsdHMgdG8gYHRydWVgLlxyXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuY2hlY2tib3gudGhyZWVfc3RhdGVcclxuXHRcdCAqIEBwbHVnaW4gY2hlY2tib3hcclxuXHRcdCAqL1xyXG5cdFx0dGhyZWVfc3RhdGVcdFx0XHQ6IHRydWUsXHJcblx0XHQvKipcclxuXHRcdCAqIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGNsaWNraW5nIGFueXdoZXJlIG9uIHRoZSBub2RlIHNob3VsZCBhY3QgYXMgY2xpY2tpbmcgb24gdGhlIGNoZWNrYm94LiBEZWZhdWx0cyB0byBgdHJ1ZWAuXHJcblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5jaGVja2JveC53aG9sZV9ub2RlXHJcblx0XHQgKiBAcGx1Z2luIGNoZWNrYm94XHJcblx0XHQgKi9cclxuXHRcdHdob2xlX25vZGVcdFx0XHQ6IHRydWUsXHJcblx0XHQvKipcclxuXHRcdCAqIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBzZWxlY3RlZCBzdHlsZSBvZiBhIG5vZGUgc2hvdWxkIGJlIGtlcHQsIG9yIHJlbW92ZWQuIERlZmF1bHRzIHRvIGB0cnVlYC5cclxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNoZWNrYm94LmtlZXBfc2VsZWN0ZWRfc3R5bGVcclxuXHRcdCAqIEBwbHVnaW4gY2hlY2tib3hcclxuXHRcdCAqL1xyXG5cdFx0a2VlcF9zZWxlY3RlZF9zdHlsZVx0OiB0cnVlXHJcblx0fTtcclxuXHQkLmpzdHJlZS5wbHVnaW5zLmNoZWNrYm94ID0gZnVuY3Rpb24gKG9wdGlvbnMsIHBhcmVudCkge1xyXG5cdFx0dGhpcy5iaW5kID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRwYXJlbnQuYmluZC5jYWxsKHRoaXMpO1xyXG5cdFx0XHR0aGlzLl9kYXRhLmNoZWNrYm94LnV0byA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmVsZW1lbnRcclxuXHRcdFx0XHQub24oXCJpbml0LmpzdHJlZVwiLCAkLnByb3h5KGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5fZGF0YS5jaGVja2JveC52aXNpYmxlID0gdGhpcy5zZXR0aW5ncy5jaGVja2JveC52aXNpYmxlO1xyXG5cdFx0XHRcdFx0XHRpZighdGhpcy5zZXR0aW5ncy5jaGVja2JveC5rZWVwX3NlbGVjdGVkX3N0eWxlKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5lbGVtZW50LmFkZENsYXNzKCdqc3RyZWUtY2hlY2tib3gtbm8tY2xpY2tlZCcpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LCB0aGlzKSlcclxuXHRcdFx0XHQub24oXCJsb2FkaW5nLmpzdHJlZVwiLCAkLnByb3h5KGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdFx0dGhpc1sgdGhpcy5fZGF0YS5jaGVja2JveC52aXNpYmxlID8gJ3Nob3dfY2hlY2tib3hlcycgOiAnaGlkZV9jaGVja2JveGVzJyBdKCk7XHJcblx0XHRcdFx0XHR9LCB0aGlzKSk7XHJcblx0XHRcdGlmKHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGhyZWVfc3RhdGUpIHtcclxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcclxuXHRcdFx0XHRcdC5vbignY2hhbmdlZC5qc3RyZWUgbW92ZV9ub2RlLmpzdHJlZSBjb3B5X25vZGUuanN0cmVlIHJlZHJhdy5qc3RyZWUgb3Blbl9ub2RlLmpzdHJlZScsICQucHJveHkoZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMuX2RhdGEuY2hlY2tib3gudXRvKSB7IGNsZWFyVGltZW91dCh0aGlzLl9kYXRhLmNoZWNrYm94LnV0byk7IH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNoZWNrYm94LnV0byA9IHNldFRpbWVvdXQoJC5wcm94eSh0aGlzLl91bmRldGVybWluZWQsIHRoaXMpLCA1MCk7XHJcblx0XHRcdFx0XHRcdH0sIHRoaXMpKVxyXG5cdFx0XHRcdFx0Lm9uKCdtb2RlbC5qc3RyZWUnLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIG0gPSB0aGlzLl9tb2RlbC5kYXRhLFxyXG5cdFx0XHRcdFx0XHRcdFx0cCA9IG1bZGF0YS5wYXJlbnRdLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZHBjID0gZGF0YS5ub2RlcyxcclxuXHRcdFx0XHRcdFx0XHRcdGNoZCA9IFtdLFxyXG5cdFx0XHRcdFx0XHRcdFx0YywgaSwgaiwgaywgbCwgdG1wO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvLyBhcHBseSBkb3duXHJcblx0XHRcdFx0XHRcdFx0aWYocC5zdGF0ZS5zZWxlY3RlZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gZHBjLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRtW2RwY1tpXV0uc3RhdGUuc2VsZWN0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkID0gdGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmNvbmNhdChkcGMpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZvcihpID0gMCwgaiA9IGRwYy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYobVtkcGNbaV1dLnN0YXRlLnNlbGVjdGVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKGsgPSAwLCBsID0gbVtkcGNbaV1dLmNoaWxkcmVuX2QubGVuZ3RoOyBrIDwgbDsgaysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtW21bZHBjW2ldXS5jaGlsZHJlbl9kW2tdXS5zdGF0ZS5zZWxlY3RlZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCA9IHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZC5jb25jYXQobVtkcGNbaV1dLmNoaWxkcmVuX2QpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvLyBhcHBseSB1cFxyXG5cdFx0XHRcdFx0XHRcdGZvcihpID0gMCwgaiA9IHAuY2hpbGRyZW5fZC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmKCFtW3AuY2hpbGRyZW5fZFtpXV0uY2hpbGRyZW4ubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNoZC5wdXNoKG1bcC5jaGlsZHJlbl9kW2ldXS5wYXJlbnQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRjaGQgPSAkLnZha2F0YS5hcnJheV91bmlxdWUoY2hkKTtcclxuXHRcdFx0XHRcdFx0XHRmb3IoayA9IDAsIGwgPSBjaGQubGVuZ3RoOyBrIDwgbDsgaysrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRwID0gbVtjaGRba11dO1xyXG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUocCAmJiBwLmlkICE9PSAnIycpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YyA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcihpID0gMCwgaiA9IHAuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0YyArPSBtW3AuY2hpbGRyZW5baV1dLnN0YXRlLnNlbGVjdGVkO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGMgPT09IGopIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwLnN0YXRlLnNlbGVjdGVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQucHVzaChwLmlkKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0bXAgPSB0aGlzLmdldF9ub2RlKHAsIHRydWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHRtcCAmJiB0bXAubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0bXAuY2hpbGRyZW4oJy5qc3RyZWUtYW5jaG9yJykuYWRkQ2xhc3MoJ2pzdHJlZS1jbGlja2VkJyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdHAgPSB0aGlzLmdldF9ub2RlKHAucGFyZW50KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkID0gJC52YWthdGEuYXJyYXlfdW5pcXVlKHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCk7XHJcblx0XHRcdFx0XHRcdH0sIHRoaXMpKVxyXG5cdFx0XHRcdFx0Lm9uKCdzZWxlY3Rfbm9kZS5qc3RyZWUnLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIG9iaiA9IGRhdGEubm9kZSxcclxuXHRcdFx0XHRcdFx0XHRcdG0gPSB0aGlzLl9tb2RlbC5kYXRhLFxyXG5cdFx0XHRcdFx0XHRcdFx0cGFyID0gdGhpcy5nZXRfbm9kZShvYmoucGFyZW50KSxcclxuXHRcdFx0XHRcdFx0XHRcdGRvbSA9IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKSxcclxuXHRcdFx0XHRcdFx0XHRcdGksIGosIGMsIHRtcDtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQgPSAkLnZha2F0YS5hcnJheV91bmlxdWUodGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLmNvbmNhdChvYmouY2hpbGRyZW5fZCkpO1xyXG5cdFx0XHRcdFx0XHRcdGZvcihpID0gMCwgaiA9IG9iai5jaGlsZHJlbl9kLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0bVtvYmouY2hpbGRyZW5fZFtpXV0uc3RhdGUuc2VsZWN0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR3aGlsZShwYXIgJiYgcGFyLmlkICE9PSAnIycpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGMgPSAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gcGFyLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjICs9IG1bcGFyLmNoaWxkcmVuW2ldXS5zdGF0ZS5zZWxlY3RlZDtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmKGMgPT09IGopIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGFyLnN0YXRlLnNlbGVjdGVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLnB1c2gocGFyLmlkKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dG1wID0gdGhpcy5nZXRfbm9kZShwYXIsIHRydWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZih0bXAgJiYgdG1wLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRtcC5jaGlsZHJlbignLmpzdHJlZS1hbmNob3InKS5hZGRDbGFzcygnanN0cmVlLWNsaWNrZWQnKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0cGFyID0gdGhpcy5nZXRfbm9kZShwYXIucGFyZW50KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYoZG9tLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZG9tLmZpbmQoJy5qc3RyZWUtYW5jaG9yJykuYWRkQ2xhc3MoJ2pzdHJlZS1jbGlja2VkJyk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9LCB0aGlzKSlcclxuXHRcdFx0XHRcdC5vbignZGVzZWxlY3Rfbm9kZS5qc3RyZWUnLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIG9iaiA9IGRhdGEubm9kZSxcclxuXHRcdFx0XHRcdFx0XHRcdGRvbSA9IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKSxcclxuXHRcdFx0XHRcdFx0XHRcdGksIGosIHRtcDtcclxuXHRcdFx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSBvYmouY2hpbGRyZW5fZC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX21vZGVsLmRhdGFbb2JqLmNoaWxkcmVuX2RbaV1dLnN0YXRlLnNlbGVjdGVkID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGZvcihpID0gMCwgaiA9IG9iai5wYXJlbnRzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fbW9kZWwuZGF0YVtvYmoucGFyZW50c1tpXV0uc3RhdGUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRcdHRtcCA9IHRoaXMuZ2V0X25vZGUob2JqLnBhcmVudHNbaV0sIHRydWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wICYmIHRtcC5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dG1wLmNoaWxkcmVuKCcuanN0cmVlLWFuY2hvcicpLnJlbW92ZUNsYXNzKCdqc3RyZWUtY2xpY2tlZCcpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0bXAgPSBbXTtcclxuXHRcdFx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZigkLmluQXJyYXkodGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkW2ldLCBvYmouY2hpbGRyZW5fZCkgPT09IC0xICYmICQuaW5BcnJheSh0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWRbaV0sIG9iai5wYXJlbnRzKSA9PT0gLTEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dG1wLnB1c2godGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkW2ldKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkID0gJC52YWthdGEuYXJyYXlfdW5pcXVlKHRtcCk7XHJcblx0XHRcdFx0XHRcdFx0aWYoZG9tLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZG9tLmZpbmQoJy5qc3RyZWUtYW5jaG9yJykucmVtb3ZlQ2xhc3MoJ2pzdHJlZS1jbGlja2VkJyk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9LCB0aGlzKSlcclxuXHRcdFx0XHRcdC5vbignZGVsZXRlX25vZGUuanN0cmVlJywgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBwID0gdGhpcy5nZXRfbm9kZShkYXRhLnBhcmVudCksXHJcblx0XHRcdFx0XHRcdFx0XHRtID0gdGhpcy5fbW9kZWwuZGF0YSxcclxuXHRcdFx0XHRcdFx0XHRcdGksIGosIGMsIHRtcDtcclxuXHRcdFx0XHRcdFx0XHR3aGlsZShwICYmIHAuaWQgIT09ICcjJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0YyA9IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSBwLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjICs9IG1bcC5jaGlsZHJlbltpXV0uc3RhdGUuc2VsZWN0ZWQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRpZihjID09PSBqKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHAuc3RhdGUuc2VsZWN0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQucHVzaChwLmlkKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dG1wID0gdGhpcy5nZXRfbm9kZShwLCB0cnVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYodG1wICYmIHRtcC5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0bXAuY2hpbGRyZW4oJy5qc3RyZWUtYW5jaG9yJykuYWRkQ2xhc3MoJ2pzdHJlZS1jbGlja2VkJyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdHAgPSB0aGlzLmdldF9ub2RlKHAucGFyZW50KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0sIHRoaXMpKVxyXG5cdFx0XHRcdFx0Lm9uKCdtb3ZlX25vZGUuanN0cmVlJywgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBpc19tdWx0aSA9IGRhdGEuaXNfbXVsdGksXHJcblx0XHRcdFx0XHRcdFx0XHRvbGRfcGFyID0gZGF0YS5vbGRfcGFyZW50LFxyXG5cdFx0XHRcdFx0XHRcdFx0bmV3X3BhciA9IHRoaXMuZ2V0X25vZGUoZGF0YS5wYXJlbnQpLFxyXG5cdFx0XHRcdFx0XHRcdFx0bSA9IHRoaXMuX21vZGVsLmRhdGEsXHJcblx0XHRcdFx0XHRcdFx0XHRwLCBjLCBpLCBqLCB0bXA7XHJcblx0XHRcdFx0XHRcdFx0aWYoIWlzX211bHRpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRwID0gdGhpcy5nZXRfbm9kZShvbGRfcGFyKTtcclxuXHRcdFx0XHRcdFx0XHRcdHdoaWxlKHAgJiYgcC5pZCAhPT0gJyMnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGMgPSAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSBwLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGMgKz0gbVtwLmNoaWxkcmVuW2ldXS5zdGF0ZS5zZWxlY3RlZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZihjID09PSBqKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cC5zdGF0ZS5zZWxlY3RlZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLnNlbGVjdGVkLnB1c2gocC5pZCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dG1wID0gdGhpcy5nZXRfbm9kZShwLCB0cnVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZih0bXAgJiYgdG1wLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG1wLmNoaWxkcmVuKCcuanN0cmVlLWFuY2hvcicpLmFkZENsYXNzKCdqc3RyZWUtY2xpY2tlZCcpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRwID0gdGhpcy5nZXRfbm9kZShwLnBhcmVudCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHAgPSBuZXdfcGFyO1xyXG5cdFx0XHRcdFx0XHRcdHdoaWxlKHAgJiYgcC5pZCAhPT0gJyMnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdGZvcihpID0gMCwgaiA9IHAuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGMgKz0gbVtwLmNoaWxkcmVuW2ldXS5zdGF0ZS5zZWxlY3RlZDtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmKGMgPT09IGopIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYoIXAuc3RhdGUuc2VsZWN0ZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwLnN0YXRlLnNlbGVjdGVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQucHVzaChwLmlkKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0bXAgPSB0aGlzLmdldF9ub2RlKHAsIHRydWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHRtcCAmJiB0bXAubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0bXAuY2hpbGRyZW4oJy5qc3RyZWUtYW5jaG9yJykuYWRkQ2xhc3MoJ2pzdHJlZS1jbGlja2VkJyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYocC5zdGF0ZS5zZWxlY3RlZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHAuc3RhdGUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQgPSAkLnZha2F0YS5hcnJheV9yZW1vdmVfaXRlbSh0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQsIHAuaWQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRtcCA9IHRoaXMuZ2V0X25vZGUocCwgdHJ1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYodG1wICYmIHRtcC5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRtcC5jaGlsZHJlbignLmpzdHJlZS1hbmNob3InKS5yZW1vdmVDbGFzcygnanN0cmVlLWNsaWNrZWQnKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdHAgPSB0aGlzLmdldF9ub2RlKHAucGFyZW50KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0sIHRoaXMpKTtcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHRcdC8qKlxyXG5cdFx0ICogc2V0IHRoZSB1bmRldGVybWluZWQgc3RhdGUgd2hlcmUgYW5kIGlmIG5lY2Vzc2FyeS4gVXNlZCBpbnRlcm5hbGx5LlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqIEBuYW1lIF91bmRldGVybWluZWQoKVxyXG5cdFx0ICogQHBsdWdpbiBjaGVja2JveFxyXG5cdFx0ICovXHJcblx0XHR0aGlzLl91bmRldGVybWluZWQgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHZhciBpLCBqLCBtID0gdGhpcy5fbW9kZWwuZGF0YSwgcyA9IHRoaXMuX2RhdGEuY29yZS5zZWxlY3RlZCwgcCA9IFtdLCB0ID0gdGhpcztcclxuXHRcdFx0Zm9yKGkgPSAwLCBqID0gcy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHRpZihtW3NbaV1dICYmIG1bc1tpXV0ucGFyZW50cykge1xyXG5cdFx0XHRcdFx0cCA9IHAuY29uY2F0KG1bc1tpXV0ucGFyZW50cyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIGF0dGVtcHQgZm9yIHNlcnZlciBzaWRlIHVuZGV0ZXJtaW5lZCBzdGF0ZVxyXG5cdFx0XHR0aGlzLmVsZW1lbnQuZmluZCgnLmpzdHJlZS1jbG9zZWQnKS5ub3QoJzpoYXModWwpJylcclxuXHRcdFx0XHQuZWFjaChmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHR2YXIgdG1wID0gdC5nZXRfbm9kZSh0aGlzKTtcclxuXHRcdFx0XHRcdGlmKCF0bXAuc3RhdGUubG9hZGVkICYmIHRtcC5vcmlnaW5hbCAmJiB0bXAub3JpZ2luYWwuc3RhdGUgJiYgdG1wLm9yaWdpbmFsLnN0YXRlLnVuZGV0ZXJtaW5lZCAmJiB0bXAub3JpZ2luYWwuc3RhdGUudW5kZXRlcm1pbmVkID09PSB0cnVlKSB7XHJcblx0XHRcdFx0XHRcdHAucHVzaCh0bXAuaWQpO1xyXG5cdFx0XHRcdFx0XHRwID0gcC5jb25jYXQodG1wLnBhcmVudHMpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRwID0gJC52YWthdGEuYXJyYXlfdW5pcXVlKHApO1xyXG5cdFx0XHRpID0gJC5pbkFycmF5KCcjJywgcCk7XHJcblx0XHRcdGlmKGkgIT09IC0xKSB7XHJcblx0XHRcdFx0cCA9ICQudmFrYXRhLmFycmF5X3JlbW92ZShwLCBpKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5lbGVtZW50LmZpbmQoJy5qc3RyZWUtdW5kZXRlcm1pbmVkJykucmVtb3ZlQ2xhc3MoJ2pzdHJlZS11bmRldGVybWluZWQnKTtcclxuXHRcdFx0Zm9yKGkgPSAwLCBqID0gcC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHRpZighbVtwW2ldXS5zdGF0ZS5zZWxlY3RlZCkge1xyXG5cdFx0XHRcdFx0cyA9IHRoaXMuZ2V0X25vZGUocFtpXSwgdHJ1ZSk7XHJcblx0XHRcdFx0XHRpZihzICYmIHMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdHMuY2hpbGRyZW4oJ2EnKS5jaGlsZHJlbignLmpzdHJlZS1jaGVja2JveCcpLmFkZENsYXNzKCdqc3RyZWUtdW5kZXRlcm1pbmVkJyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdFx0dGhpcy5yZWRyYXdfbm9kZSA9IGZ1bmN0aW9uKG9iaiwgZGVlcCwgaXNfY2FsbGJhY2spIHtcclxuXHRcdFx0b2JqID0gcGFyZW50LnJlZHJhd19ub2RlLmNhbGwodGhpcywgb2JqLCBkZWVwLCBpc19jYWxsYmFjayk7XHJcblx0XHRcdGlmKG9iaikge1xyXG5cdFx0XHRcdHZhciB0bXAgPSBvYmouZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ0EnKVswXTtcclxuXHRcdFx0XHR0bXAuaW5zZXJ0QmVmb3JlKF9pLmNsb25lTm9kZSgpLCB0bXAuY2hpbGROb2Rlc1swXSk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoIWlzX2NhbGxiYWNrICYmIHRoaXMuc2V0dGluZ3MuY2hlY2tib3gudGhyZWVfc3RhdGUpIHtcclxuXHRcdFx0XHRpZih0aGlzLl9kYXRhLmNoZWNrYm94LnV0bykgeyBjbGVhclRpbWVvdXQodGhpcy5fZGF0YS5jaGVja2JveC51dG8pOyB9XHJcblx0XHRcdFx0dGhpcy5fZGF0YS5jaGVja2JveC51dG8gPSBzZXRUaW1lb3V0KCQucHJveHkodGhpcy5fdW5kZXRlcm1pbmVkLCB0aGlzKSwgNTApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBvYmo7XHJcblx0XHR9O1xyXG5cdFx0dGhpcy5hY3RpdmF0ZV9ub2RlID0gZnVuY3Rpb24gKG9iaiwgZSkge1xyXG5cdFx0XHRpZih0aGlzLnNldHRpbmdzLmNoZWNrYm94Lndob2xlX25vZGUgfHwgJChlLnRhcmdldCkuaGFzQ2xhc3MoJ2pzdHJlZS1jaGVja2JveCcpKSB7XHJcblx0XHRcdFx0ZS5jdHJsS2V5ID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gcGFyZW50LmFjdGl2YXRlX25vZGUuY2FsbCh0aGlzLCBvYmosIGUpO1xyXG5cdFx0fTtcclxuXHRcdC8qKlxyXG5cdFx0ICogc2hvdyB0aGUgbm9kZSBjaGVja2JveCBpY29uc1xyXG5cdFx0ICogQG5hbWUgc2hvd19jaGVja2JveGVzKClcclxuXHRcdCAqIEBwbHVnaW4gY2hlY2tib3hcclxuXHRcdCAqL1xyXG5cdFx0dGhpcy5zaG93X2NoZWNrYm94ZXMgPSBmdW5jdGlvbiAoKSB7IHRoaXMuX2RhdGEuY29yZS50aGVtZXMuY2hlY2tib3hlcyA9IHRydWU7IHRoaXMuZWxlbWVudC5jaGlsZHJlbihcInVsXCIpLnJlbW92ZUNsYXNzKFwianN0cmVlLW5vLWNoZWNrYm94ZXNcIik7IH07XHJcblx0XHQvKipcclxuXHRcdCAqIGhpZGUgdGhlIG5vZGUgY2hlY2tib3ggaWNvbnNcclxuXHRcdCAqIEBuYW1lIGhpZGVfY2hlY2tib3hlcygpXHJcblx0XHQgKiBAcGx1Z2luIGNoZWNrYm94XHJcblx0XHQgKi9cclxuXHRcdHRoaXMuaGlkZV9jaGVja2JveGVzID0gZnVuY3Rpb24gKCkgeyB0aGlzLl9kYXRhLmNvcmUudGhlbWVzLmNoZWNrYm94ZXMgPSBmYWxzZTsgdGhpcy5lbGVtZW50LmNoaWxkcmVuKFwidWxcIikuYWRkQ2xhc3MoXCJqc3RyZWUtbm8tY2hlY2tib3hlc1wiKTsgfTtcclxuXHRcdC8qKlxyXG5cdFx0ICogdG9nZ2xlIHRoZSBub2RlIGljb25zXHJcblx0XHQgKiBAbmFtZSB0b2dnbGVfY2hlY2tib3hlcygpXHJcblx0XHQgKiBAcGx1Z2luIGNoZWNrYm94XHJcblx0XHQgKi9cclxuXHRcdHRoaXMudG9nZ2xlX2NoZWNrYm94ZXMgPSBmdW5jdGlvbiAoKSB7IGlmKHRoaXMuX2RhdGEuY29yZS50aGVtZXMuY2hlY2tib3hlcykgeyB0aGlzLmhpZGVfY2hlY2tib3hlcygpOyB9IGVsc2UgeyB0aGlzLnNob3dfY2hlY2tib3hlcygpOyB9IH07XHJcblx0fTtcclxuXHJcblx0Ly8gaW5jbHVkZSB0aGUgY2hlY2tib3ggcGx1Z2luIGJ5IGRlZmF1bHRcclxuXHQvLyAkLmpzdHJlZS5kZWZhdWx0cy5wbHVnaW5zLnB1c2goXCJjaGVja2JveFwiKTtcclxuXHJcbi8qKlxyXG4gKiAjIyMgQ29udGV4dG1lbnUgcGx1Z2luXHJcbiAqXHJcbiAqIFNob3dzIGEgY29udGV4dCBtZW51IHdoZW4gYSBub2RlIGlzIHJpZ2h0LWNsaWNrZWQuXHJcbiAqL1xyXG4vLyBUT0RPOiBtb3ZlIGxvZ2ljIG91dHNpZGUgb2YgZnVuY3Rpb24gKyBjaGVjayBtdWx0aXBsZSBtb3ZlXHJcblxyXG5cdC8qKlxyXG5cdCAqIHN0b3JlcyBhbGwgZGVmYXVsdHMgZm9yIHRoZSBjb250ZXh0bWVudSBwbHVnaW5cclxuXHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5jb250ZXh0bWVudVxyXG5cdCAqIEBwbHVnaW4gY29udGV4dG1lbnVcclxuXHQgKi9cclxuXHQkLmpzdHJlZS5kZWZhdWx0cy5jb250ZXh0bWVudSA9IHtcclxuXHRcdC8qKlxyXG5cdFx0ICogYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIG5vZGUgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gdGhlIGNvbnRleHQgbWVudSBpcyBpbnZva2VkIG9uIGl0LiBEZWZhdWx0cyB0byBgdHJ1ZWAuXHJcblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5jb250ZXh0bWVudS5zZWxlY3Rfbm9kZVxyXG5cdFx0ICogQHBsdWdpbiBjb250ZXh0bWVudVxyXG5cdFx0ICovXHJcblx0XHRzZWxlY3Rfbm9kZSA6IHRydWUsXHJcblx0XHQvKipcclxuXHRcdCAqIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBtZW51IHNob3VsZCBiZSBzaG93biBhbGlnbmVkIHdpdGggdGhlIG5vZGUuIERlZmF1bHRzIHRvIGB0cnVlYCwgb3RoZXJ3aXNlIHRoZSBtb3VzZSBjb29yZGluYXRlcyBhcmUgdXNlZC5cclxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmNvbnRleHRtZW51LnNob3dfYXRfbm9kZVxyXG5cdFx0ICogQHBsdWdpbiBjb250ZXh0bWVudVxyXG5cdFx0ICovXHJcblx0XHRzaG93X2F0X25vZGUgOiB0cnVlLFxyXG5cdFx0LyoqXHJcblx0XHQgKiBhbiBvYmplY3Qgb2YgYWN0aW9ucywgb3IgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYSBub2RlIGFuZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBjYWxscyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBhbiBvYmplY3Qgb2YgYWN0aW9ucyBhdmFpbGFibGUgZm9yIHRoYXQgbm9kZSAoeW91IGNhbiBhbHNvIHJldHVybiB0aGUgaXRlbXMgdG9vKS5cclxuXHRcdCAqIFxyXG5cdFx0ICogRWFjaCBhY3Rpb24gY29uc2lzdHMgb2YgYSBrZXkgKGEgdW5pcXVlIG5hbWUpIGFuZCBhIHZhbHVlIHdoaWNoIGlzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyAob25seSBsYWJlbCBhbmQgYWN0aW9uIGFyZSByZXF1aXJlZCk6XHJcblx0XHQgKiBcclxuXHRcdCAqICogYHNlcGFyYXRvcl9iZWZvcmVgIC0gYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlcmUgc2hvdWxkIGJlIGEgc2VwYXJhdG9yIGJlZm9yZSB0aGlzIGl0ZW1cclxuXHRcdCAqICogYHNlcGFyYXRvcl9hZnRlcmAgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGVyZSBzaG91bGQgYmUgYSBzZXBhcmF0b3IgYWZ0ZXIgdGhpcyBpdGVtXHJcblx0XHQgKiAqIGBfZGlzYWJsZWRgIC0gYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIGRpc2FibGVkXHJcblx0XHQgKiAqIGBsYWJlbGAgLSBhIHN0cmluZyAtIHRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cclxuXHRcdCAqICogYGFjdGlvbmAgLSBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGlmIHRoaXMgaXRlbSBpcyBjaG9zZW5cclxuXHRcdCAqICogYGljb25gIC0gYSBzdHJpbmcsIGNhbiBiZSBhIHBhdGggdG8gYW4gaWNvbiBvciBhIGNsYXNzTmFtZSwgaWYgdXNpbmcgYW4gaW1hZ2UgdGhhdCBpcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgdXNlIGEgYC4vYCBwcmVmaXgsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRldGVjdGVkIGFzIGEgY2xhc3NcclxuXHRcdCAqICogYHNob3J0Y3V0YCAtIGtleUNvZGUgd2hpY2ggd2lsbCB0cmlnZ2VyIHRoZSBhY3Rpb24gaWYgdGhlIG1lbnUgaXMgb3BlbiAoZm9yIGV4YW1wbGUgYDExM2AgZm9yIHJlbmFtZSwgd2hpY2ggZXF1YWxzIEYyKVxyXG5cdFx0ICogKiBgc2hvcnRjdXRfbGFiZWxgIC0gc2hvcnRjdXQgbGFiZWwgKGxpa2UgZm9yIGV4YW1wbGUgYEYyYCBmb3IgcmVuYW1lKVxyXG5cdFx0ICogXHJcblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5jb250ZXh0bWVudS5pdGVtc1xyXG5cdFx0ICogQHBsdWdpbiBjb250ZXh0bWVudVxyXG5cdFx0ICovXHJcblx0XHRpdGVtcyA6IGZ1bmN0aW9uIChvLCBjYikgeyAvLyBDb3VsZCBiZSBhbiBvYmplY3QgZGlyZWN0bHlcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcImNyZWF0ZVwiIDoge1xyXG5cdFx0XHRcdFx0XCJzZXBhcmF0b3JfYmVmb3JlXCJcdDogZmFsc2UsXHJcblx0XHRcdFx0XHRcInNlcGFyYXRvcl9hZnRlclwiXHQ6IHRydWUsXHJcblx0XHRcdFx0XHRcIl9kaXNhYmxlZFwiXHRcdFx0OiBmYWxzZSwgLy8odGhpcy5jaGVjayhcImNyZWF0ZV9ub2RlXCIsIGRhdGEucmVmZXJlbmNlLCB7fSwgXCJsYXN0XCIpKSxcclxuXHRcdFx0XHRcdFwibGFiZWxcIlx0XHRcdFx0OiBcIkNyZWF0ZVwiLFxyXG5cdFx0XHRcdFx0XCJhY3Rpb25cIlx0XHRcdDogZnVuY3Rpb24gKGRhdGEpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGluc3QgPSAkLmpzdHJlZS5yZWZlcmVuY2UoZGF0YS5yZWZlcmVuY2UpLFxyXG5cdFx0XHRcdFx0XHRcdG9iaiA9IGluc3QuZ2V0X25vZGUoZGF0YS5yZWZlcmVuY2UpO1xyXG5cdFx0XHRcdFx0XHRpbnN0LmNyZWF0ZV9ub2RlKG9iaiwge30sIFwibGFzdFwiLCBmdW5jdGlvbiAobmV3X25vZGUpIHtcclxuXHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgaW5zdC5lZGl0KG5ld19ub2RlKTsgfSwwKTtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRcInJlbmFtZVwiIDoge1xyXG5cdFx0XHRcdFx0XCJzZXBhcmF0b3JfYmVmb3JlXCJcdDogZmFsc2UsXHJcblx0XHRcdFx0XHRcInNlcGFyYXRvcl9hZnRlclwiXHQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XCJfZGlzYWJsZWRcIlx0XHRcdDogZmFsc2UsIC8vKHRoaXMuY2hlY2soXCJyZW5hbWVfbm9kZVwiLCBkYXRhLnJlZmVyZW5jZSwgdGhpcy5nZXRfcGFyZW50KGRhdGEucmVmZXJlbmNlKSwgXCJcIikpLFxyXG5cdFx0XHRcdFx0XCJsYWJlbFwiXHRcdFx0XHQ6IFwiUmVuYW1lXCIsXHJcblx0XHRcdFx0XHQvKlxyXG5cdFx0XHRcdFx0XCJzaG9ydGN1dFwiXHRcdFx0OiAxMTMsXHJcblx0XHRcdFx0XHRcInNob3J0Y3V0X2xhYmVsXCJcdDogJ0YyJyxcclxuXHRcdFx0XHRcdFwiaWNvblwiXHRcdFx0XHQ6IFwiZ2x5cGhpY29uIGdseXBoaWNvbi1sZWFmXCIsXHJcblx0XHRcdFx0XHQqL1xyXG5cdFx0XHRcdFx0XCJhY3Rpb25cIlx0XHRcdDogZnVuY3Rpb24gKGRhdGEpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGluc3QgPSAkLmpzdHJlZS5yZWZlcmVuY2UoZGF0YS5yZWZlcmVuY2UpLFxyXG5cdFx0XHRcdFx0XHRcdG9iaiA9IGluc3QuZ2V0X25vZGUoZGF0YS5yZWZlcmVuY2UpO1xyXG5cdFx0XHRcdFx0XHRpbnN0LmVkaXQob2JqKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdFwicmVtb3ZlXCIgOiB7XHJcblx0XHRcdFx0XHRcInNlcGFyYXRvcl9iZWZvcmVcIlx0OiBmYWxzZSxcclxuXHRcdFx0XHRcdFwiaWNvblwiXHRcdFx0XHQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XCJzZXBhcmF0b3JfYWZ0ZXJcIlx0OiBmYWxzZSxcclxuXHRcdFx0XHRcdFwiX2Rpc2FibGVkXCJcdFx0XHQ6IGZhbHNlLCAvLyh0aGlzLmNoZWNrKFwiZGVsZXRlX25vZGVcIiwgZGF0YS5yZWZlcmVuY2UsIHRoaXMuZ2V0X3BhcmVudChkYXRhLnJlZmVyZW5jZSksIFwiXCIpKSxcclxuXHRcdFx0XHRcdFwibGFiZWxcIlx0XHRcdFx0OiBcIkRlbGV0ZVwiLFxyXG5cdFx0XHRcdFx0XCJhY3Rpb25cIlx0XHRcdDogZnVuY3Rpb24gKGRhdGEpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGluc3QgPSAkLmpzdHJlZS5yZWZlcmVuY2UoZGF0YS5yZWZlcmVuY2UpLFxyXG5cdFx0XHRcdFx0XHRcdG9iaiA9IGluc3QuZ2V0X25vZGUoZGF0YS5yZWZlcmVuY2UpO1xyXG5cdFx0XHRcdFx0XHRpZihpbnN0LmlzX3NlbGVjdGVkKG9iaikpIHtcclxuXHRcdFx0XHRcdFx0XHRpbnN0LmRlbGV0ZV9ub2RlKGluc3QuZ2V0X3NlbGVjdGVkKCkpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGluc3QuZGVsZXRlX25vZGUob2JqKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0XCJjY3BcIiA6IHtcclxuXHRcdFx0XHRcdFwic2VwYXJhdG9yX2JlZm9yZVwiXHQ6IHRydWUsXHJcblx0XHRcdFx0XHRcImljb25cIlx0XHRcdFx0OiBmYWxzZSxcclxuXHRcdFx0XHRcdFwic2VwYXJhdG9yX2FmdGVyXCJcdDogZmFsc2UsXHJcblx0XHRcdFx0XHRcImxhYmVsXCJcdFx0XHRcdDogXCJFZGl0XCIsXHJcblx0XHRcdFx0XHRcImFjdGlvblwiXHRcdFx0OiBmYWxzZSxcclxuXHRcdFx0XHRcdFwic3VibWVudVwiIDoge1xyXG5cdFx0XHRcdFx0XHRcImN1dFwiIDoge1xyXG5cdFx0XHRcdFx0XHRcdFwic2VwYXJhdG9yX2JlZm9yZVwiXHQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFwic2VwYXJhdG9yX2FmdGVyXCJcdDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XCJsYWJlbFwiXHRcdFx0XHQ6IFwiQ3V0XCIsXHJcblx0XHRcdFx0XHRcdFx0XCJhY3Rpb25cIlx0XHRcdDogZnVuY3Rpb24gKGRhdGEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBpbnN0ID0gJC5qc3RyZWUucmVmZXJlbmNlKGRhdGEucmVmZXJlbmNlKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0b2JqID0gaW5zdC5nZXRfbm9kZShkYXRhLnJlZmVyZW5jZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZihpbnN0LmlzX3NlbGVjdGVkKG9iaikpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aW5zdC5jdXQoaW5zdC5nZXRfc2VsZWN0ZWQoKSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aW5zdC5jdXQob2JqKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFwiY29weVwiIDoge1xyXG5cdFx0XHRcdFx0XHRcdFwic2VwYXJhdG9yX2JlZm9yZVwiXHQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFwiaWNvblwiXHRcdFx0XHQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFwic2VwYXJhdG9yX2FmdGVyXCJcdDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XCJsYWJlbFwiXHRcdFx0XHQ6IFwiQ29weVwiLFxyXG5cdFx0XHRcdFx0XHRcdFwiYWN0aW9uXCJcdFx0XHQ6IGZ1bmN0aW9uIChkYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgaW5zdCA9ICQuanN0cmVlLnJlZmVyZW5jZShkYXRhLnJlZmVyZW5jZSksXHJcblx0XHRcdFx0XHRcdFx0XHRcdG9iaiA9IGluc3QuZ2V0X25vZGUoZGF0YS5yZWZlcmVuY2UpO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYoaW5zdC5pc19zZWxlY3RlZChvYmopKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGluc3QuY29weShpbnN0LmdldF9zZWxlY3RlZCgpKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpbnN0LmNvcHkob2JqKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFwicGFzdGVcIiA6IHtcclxuXHRcdFx0XHRcdFx0XHRcInNlcGFyYXRvcl9iZWZvcmVcIlx0OiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcImljb25cIlx0XHRcdFx0OiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcIl9kaXNhYmxlZFwiXHRcdFx0OiBmdW5jdGlvbiAoZGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuICEkLmpzdHJlZS5yZWZlcmVuY2UoZGF0YS5yZWZlcmVuY2UpLmNhbl9wYXN0ZSgpO1xyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XCJzZXBhcmF0b3JfYWZ0ZXJcIlx0OiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcImxhYmVsXCJcdFx0XHRcdDogXCJQYXN0ZVwiLFxyXG5cdFx0XHRcdFx0XHRcdFwiYWN0aW9uXCJcdFx0XHQ6IGZ1bmN0aW9uIChkYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgaW5zdCA9ICQuanN0cmVlLnJlZmVyZW5jZShkYXRhLnJlZmVyZW5jZSksXHJcblx0XHRcdFx0XHRcdFx0XHRcdG9iaiA9IGluc3QuZ2V0X25vZGUoZGF0YS5yZWZlcmVuY2UpO1xyXG5cdFx0XHRcdFx0XHRcdFx0aW5zdC5wYXN0ZShvYmopO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQkLmpzdHJlZS5wbHVnaW5zLmNvbnRleHRtZW51ID0gZnVuY3Rpb24gKG9wdGlvbnMsIHBhcmVudCkge1xyXG5cdFx0dGhpcy5iaW5kID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRwYXJlbnQuYmluZC5jYWxsKHRoaXMpO1xyXG5cclxuXHRcdFx0dGhpcy5lbGVtZW50XHJcblx0XHRcdFx0Lm9uKFwiY29udGV4dG1lbnUuanN0cmVlXCIsIFwiLmpzdHJlZS1hbmNob3JcIiwgJC5wcm94eShmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHRcdGlmKCF0aGlzLmlzX2xvYWRpbmcoZS5jdXJyZW50VGFyZ2V0KSkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2hvd19jb250ZXh0bWVudShlLmN1cnJlbnRUYXJnZXQsIGUucGFnZVgsIGUucGFnZVksIGUpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LCB0aGlzKSlcclxuXHRcdFx0XHQub24oXCJjbGljay5qc3RyZWVcIiwgXCIuanN0cmVlLWFuY2hvclwiLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdFx0XHRcdGlmKHRoaXMuX2RhdGEuY29udGV4dG1lbnUudmlzaWJsZSkge1xyXG5cdFx0XHRcdFx0XHRcdCQudmFrYXRhLmNvbnRleHQuaGlkZSgpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LCB0aGlzKSk7XHJcblx0XHRcdC8qXHJcblx0XHRcdGlmKCEoJ29uY29udGV4dG1lbnUnIGluIGRvY3VtZW50LmJvZHkpICYmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5ib2R5KSkge1xyXG5cdFx0XHRcdHZhciBlbCA9IG51bGwsIHRtID0gbnVsbDtcclxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcclxuXHRcdFx0XHRcdC5vbihcInRvdWNoc3RhcnRcIiwgXCIuanN0cmVlLWFuY2hvclwiLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdFx0XHRlbCA9IGUuY3VycmVudFRhcmdldDtcclxuXHRcdFx0XHRcdFx0dG0gPSArbmV3IERhdGUoKTtcclxuXHRcdFx0XHRcdFx0JChkb2N1bWVudCkub25lKFwidG91Y2hlbmRcIiwgZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHRcdFx0XHRlLnRhcmdldCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5vcmlnaW5hbEV2ZW50LnRhcmdldFRvdWNoZXNbMF0ucGFnZVggLSB3aW5kb3cucGFnZVhPZmZzZXQsIGUub3JpZ2luYWxFdmVudC50YXJnZXRUb3VjaGVzWzBdLnBhZ2VZIC0gd2luZG93LnBhZ2VZT2Zmc2V0KTtcclxuXHRcdFx0XHRcdFx0XHRlLmN1cnJlbnRUYXJnZXQgPSBlLnRhcmdldDtcclxuXHRcdFx0XHRcdFx0XHR0bSA9ICgoKyhuZXcgRGF0ZSgpKSkgLSB0bSk7XHJcblx0XHRcdFx0XHRcdFx0aWYoZS50YXJnZXQgPT09IGVsICYmIHRtID4gNjAwICYmIHRtIDwgMTAwMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0JChlbCkudHJpZ2dlcignY29udGV4dG1lbnUnLCBlKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0ZWwgPSBudWxsO1xyXG5cdFx0XHRcdFx0XHRcdHRtID0gbnVsbDtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHQqL1xyXG5cdFx0XHQkKGRvY3VtZW50KS5vbihcImNvbnRleHRfaGlkZS52YWthdGFcIiwgJC5wcm94eShmdW5jdGlvbiAoKSB7IHRoaXMuX2RhdGEuY29udGV4dG1lbnUudmlzaWJsZSA9IGZhbHNlOyB9LCB0aGlzKSk7XHJcblx0XHR9O1xyXG5cdFx0dGhpcy50ZWFyZG93biA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0aWYodGhpcy5fZGF0YS5jb250ZXh0bWVudS52aXNpYmxlKSB7XHJcblx0XHRcdFx0JC52YWthdGEuY29udGV4dC5oaWRlKCk7XHJcblx0XHRcdH1cclxuXHRcdFx0cGFyZW50LnRlYXJkb3duLmNhbGwodGhpcyk7XHJcblx0XHR9O1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogcHJlcGFyZSBhbmQgc2hvdyB0aGUgY29udGV4dCBtZW51IGZvciBhIG5vZGVcclxuXHRcdCAqIEBuYW1lIHNob3dfY29udGV4dG1lbnUob2JqIFssIHgsIHldKVxyXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gb2JqIHRoZSBub2RlXHJcblx0XHQgKiBAcGFyYW0ge051bWJlcn0geCB0aGUgeC1jb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSBkb2N1bWVudCB0byBzaG93IHRoZSBtZW51IGF0XHJcblx0XHQgKiBAcGFyYW0ge051bWJlcn0geSB0aGUgeS1jb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSBkb2N1bWVudCB0byBzaG93IHRoZSBtZW51IGF0XHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gZSB0aGUgZXZlbnQgaWYgYXZhaWxhYmxlIHRoYXQgdHJpZ2dlcmVkIHRoZSBjb250ZXh0bWVudVxyXG5cdFx0ICogQHBsdWdpbiBjb250ZXh0bWVudVxyXG5cdFx0ICogQHRyaWdnZXIgc2hvd19jb250ZXh0bWVudS5qc3RyZWVcclxuXHRcdCAqL1xyXG5cdFx0dGhpcy5zaG93X2NvbnRleHRtZW51ID0gZnVuY3Rpb24gKG9iaiwgeCwgeSwgZSkge1xyXG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XHJcblx0XHRcdGlmKCFvYmogfHwgb2JqLmlkID09PSAnIycpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblx0XHRcdHZhciBzID0gdGhpcy5zZXR0aW5ncy5jb250ZXh0bWVudSxcclxuXHRcdFx0XHRkID0gdGhpcy5nZXRfbm9kZShvYmosIHRydWUpLFxyXG5cdFx0XHRcdGEgPSBkLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIiksXHJcblx0XHRcdFx0byA9IGZhbHNlLFxyXG5cdFx0XHRcdGkgPSBmYWxzZTtcclxuXHRcdFx0aWYocy5zaG93X2F0X25vZGUgfHwgeCA9PT0gdW5kZWZpbmVkIHx8IHkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdG8gPSBhLm9mZnNldCgpO1xyXG5cdFx0XHRcdHggPSBvLmxlZnQ7XHJcblx0XHRcdFx0eSA9IG8udG9wICsgdGhpcy5fZGF0YS5jb3JlLmxpX2hlaWdodDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZih0aGlzLnNldHRpbmdzLmNvbnRleHRtZW51LnNlbGVjdF9ub2RlICYmICF0aGlzLmlzX3NlbGVjdGVkKG9iaikpIHtcclxuXHRcdFx0XHR0aGlzLmRlc2VsZWN0X2FsbCgpO1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0X25vZGUob2JqLCBmYWxzZSwgZmFsc2UsIGUpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpID0gcy5pdGVtcztcclxuXHRcdFx0aWYoJC5pc0Z1bmN0aW9uKGkpKSB7XHJcblx0XHRcdFx0aSA9IGkuY2FsbCh0aGlzLCBvYmosICQucHJveHkoZnVuY3Rpb24gKGkpIHtcclxuXHRcdFx0XHRcdHRoaXMuX3Nob3dfY29udGV4dG1lbnUob2JqLCB4LCB5LCBpKTtcclxuXHRcdFx0XHR9LCB0aGlzKSk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoJC5pc1BsYWluT2JqZWN0KGkpKSB7XHJcblx0XHRcdFx0dGhpcy5fc2hvd19jb250ZXh0bWVudShvYmosIHgsIHksIGkpO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdFx0LyoqXHJcblx0XHQgKiBzaG93IHRoZSBwcmVwYXJlZCBjb250ZXh0IG1lbnUgZm9yIGEgbm9kZVxyXG5cdFx0ICogQG5hbWUgX3Nob3dfY29udGV4dG1lbnUob2JqLCB4LCB5LCBpKVxyXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gb2JqIHRoZSBub2RlXHJcblx0XHQgKiBAcGFyYW0ge051bWJlcn0geCB0aGUgeC1jb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSBkb2N1bWVudCB0byBzaG93IHRoZSBtZW51IGF0XHJcblx0XHQgKiBAcGFyYW0ge051bWJlcn0geSB0aGUgeS1jb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSBkb2N1bWVudCB0byBzaG93IHRoZSBtZW51IGF0XHJcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gaSB0aGUgb2JqZWN0IG9mIGl0ZW1zIHRvIHNob3dcclxuXHRcdCAqIEBwbHVnaW4gY29udGV4dG1lbnVcclxuXHRcdCAqIEB0cmlnZ2VyIHNob3dfY29udGV4dG1lbnUuanN0cmVlXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICovXHJcblx0XHR0aGlzLl9zaG93X2NvbnRleHRtZW51ID0gZnVuY3Rpb24gKG9iaiwgeCwgeSwgaSkge1xyXG5cdFx0XHR2YXIgZCA9IHRoaXMuZ2V0X25vZGUob2JqLCB0cnVlKSxcclxuXHRcdFx0XHRhID0gZC5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpO1xyXG5cdFx0XHQkKGRvY3VtZW50KS5vbmUoXCJjb250ZXh0X3Nob3cudmFrYXRhXCIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuXHRcdFx0XHR2YXIgY2xzID0gJ2pzdHJlZS1jb250ZXh0bWVudSBqc3RyZWUtJyArIHRoaXMuZ2V0X3RoZW1lKCkgKyAnLWNvbnRleHRtZW51JztcclxuXHRcdFx0XHQkKGRhdGEuZWxlbWVudCkuYWRkQ2xhc3MoY2xzKTtcclxuXHRcdFx0fSwgdGhpcykpO1xyXG5cdFx0XHR0aGlzLl9kYXRhLmNvbnRleHRtZW51LnZpc2libGUgPSB0cnVlO1xyXG5cdFx0XHQkLnZha2F0YS5jb250ZXh0LnNob3coYSwgeyAneCcgOiB4LCAneScgOiB5IH0sIGkpO1xyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogdHJpZ2dlcmVkIHdoZW4gdGhlIGNvbnRleHRtZW51IGlzIHNob3duIGZvciBhIG5vZGVcclxuXHRcdFx0ICogQGV2ZW50XHJcblx0XHRcdCAqIEBuYW1lIHNob3dfY29udGV4dG1lbnUuanN0cmVlXHJcblx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBub2RlIHRoZSBub2RlXHJcblx0XHRcdCAqIEBwYXJhbSB7TnVtYmVyfSB4IHRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIG1lbnUgcmVsYXRpdmUgdG8gdGhlIGRvY3VtZW50XHJcblx0XHRcdCAqIEBwYXJhbSB7TnVtYmVyfSB5IHRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIG1lbnUgcmVsYXRpdmUgdG8gdGhlIGRvY3VtZW50XHJcblx0XHRcdCAqIEBwbHVnaW4gY29udGV4dG1lbnVcclxuXHRcdFx0ICovXHJcblx0XHRcdHRoaXMudHJpZ2dlcignc2hvd19jb250ZXh0bWVudScsIHsgXCJub2RlXCIgOiBvYmosIFwieFwiIDogeCwgXCJ5XCIgOiB5IH0pO1xyXG5cdFx0fTtcclxuXHR9O1xyXG5cclxuXHQvLyBjb250ZXh0bWVudSBoZWxwZXJcclxuXHQoZnVuY3Rpb24gKCQpIHtcclxuXHRcdHZhciByaWdodF90b19sZWZ0ID0gZmFsc2UsXHJcblx0XHRcdHZha2F0YV9jb250ZXh0ID0ge1xyXG5cdFx0XHRcdGVsZW1lbnRcdFx0OiBmYWxzZSxcclxuXHRcdFx0XHRyZWZlcmVuY2VcdDogZmFsc2UsXHJcblx0XHRcdFx0cG9zaXRpb25feFx0OiAwLFxyXG5cdFx0XHRcdHBvc2l0aW9uX3lcdDogMCxcclxuXHRcdFx0XHRpdGVtc1x0XHQ6IFtdLFxyXG5cdFx0XHRcdGh0bWxcdFx0OiBcIlwiLFxyXG5cdFx0XHRcdGlzX3Zpc2libGVcdDogZmFsc2VcclxuXHRcdFx0fTtcclxuXHJcblx0XHQkLnZha2F0YS5jb250ZXh0ID0ge1xyXG5cdFx0XHRzZXR0aW5ncyA6IHtcclxuXHRcdFx0XHRoaWRlX29ubW91c2VsZWF2ZVx0OiAwLFxyXG5cdFx0XHRcdGljb25zXHRcdFx0XHQ6IHRydWVcclxuXHRcdFx0fSxcclxuXHRcdFx0X3RyaWdnZXIgOiBmdW5jdGlvbiAoZXZlbnRfbmFtZSkge1xyXG5cdFx0XHRcdCQoZG9jdW1lbnQpLnRyaWdnZXJIYW5kbGVyKFwiY29udGV4dF9cIiArIGV2ZW50X25hbWUgKyBcIi52YWthdGFcIiwge1xyXG5cdFx0XHRcdFx0XCJyZWZlcmVuY2VcIlx0OiB2YWthdGFfY29udGV4dC5yZWZlcmVuY2UsXHJcblx0XHRcdFx0XHRcImVsZW1lbnRcIlx0OiB2YWthdGFfY29udGV4dC5lbGVtZW50LFxyXG5cdFx0XHRcdFx0XCJwb3NpdGlvblwiXHQ6IHtcclxuXHRcdFx0XHRcdFx0XCJ4XCIgOiB2YWthdGFfY29udGV4dC5wb3NpdGlvbl94LFxyXG5cdFx0XHRcdFx0XHRcInlcIiA6IHZha2F0YV9jb250ZXh0LnBvc2l0aW9uX3lcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0X2V4ZWN1dGUgOiBmdW5jdGlvbiAoaSkge1xyXG5cdFx0XHRcdGkgPSB2YWthdGFfY29udGV4dC5pdGVtc1tpXTtcclxuXHRcdFx0XHRyZXR1cm4gaSAmJiAoIWkuX2Rpc2FibGVkIHx8ICgkLmlzRnVuY3Rpb24oaS5fZGlzYWJsZWQpICYmICFpLl9kaXNhYmxlZCh7IFwiaXRlbVwiIDogaSwgXCJyZWZlcmVuY2VcIiA6IHZha2F0YV9jb250ZXh0LnJlZmVyZW5jZSwgXCJlbGVtZW50XCIgOiB2YWthdGFfY29udGV4dC5lbGVtZW50IH0pKSkgJiYgaS5hY3Rpb24gPyBpLmFjdGlvbi5jYWxsKG51bGwsIHtcclxuXHRcdFx0XHRcdFx0XHRcIml0ZW1cIlx0XHQ6IGksXHJcblx0XHRcdFx0XHRcdFx0XCJyZWZlcmVuY2VcIlx0OiB2YWthdGFfY29udGV4dC5yZWZlcmVuY2UsXHJcblx0XHRcdFx0XHRcdFx0XCJlbGVtZW50XCJcdDogdmFrYXRhX2NvbnRleHQuZWxlbWVudCxcclxuXHRcdFx0XHRcdFx0XHRcInBvc2l0aW9uXCJcdDoge1xyXG5cdFx0XHRcdFx0XHRcdFx0XCJ4XCIgOiB2YWthdGFfY29udGV4dC5wb3NpdGlvbl94LFxyXG5cdFx0XHRcdFx0XHRcdFx0XCJ5XCIgOiB2YWthdGFfY29udGV4dC5wb3NpdGlvbl95XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KSA6IGZhbHNlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRfcGFyc2UgOiBmdW5jdGlvbiAobywgaXNfY2FsbGJhY2spIHtcclxuXHRcdFx0XHRpZighbykgeyByZXR1cm4gZmFsc2U7IH1cclxuXHRcdFx0XHRpZighaXNfY2FsbGJhY2spIHtcclxuXHRcdFx0XHRcdHZha2F0YV9jb250ZXh0Lmh0bWxcdFx0PSBcIlwiO1xyXG5cdFx0XHRcdFx0dmFrYXRhX2NvbnRleHQuaXRlbXNcdD0gW107XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBzdHIgPSBcIlwiLFxyXG5cdFx0XHRcdFx0c2VwID0gZmFsc2UsXHJcblx0XHRcdFx0XHR0bXA7XHJcblxyXG5cdFx0XHRcdGlmKGlzX2NhbGxiYWNrKSB7IHN0ciArPSBcIjxcIitcInVsPlwiOyB9XHJcblx0XHRcdFx0JC5lYWNoKG8sIGZ1bmN0aW9uIChpLCB2YWwpIHtcclxuXHRcdFx0XHRcdGlmKCF2YWwpIHsgcmV0dXJuIHRydWU7IH1cclxuXHRcdFx0XHRcdHZha2F0YV9jb250ZXh0Lml0ZW1zLnB1c2godmFsKTtcclxuXHRcdFx0XHRcdGlmKCFzZXAgJiYgdmFsLnNlcGFyYXRvcl9iZWZvcmUpIHtcclxuXHRcdFx0XHRcdFx0c3RyICs9IFwiPFwiK1wibGkgY2xhc3M9J3Zha2F0YS1jb250ZXh0LXNlcGFyYXRvcic+PFwiK1wiYSBocmVmPScjJyBcIiArICgkLnZha2F0YS5jb250ZXh0LnNldHRpbmdzLmljb25zID8gJycgOiAnc3R5bGU9XCJtYXJnaW4tbGVmdDowcHg7XCInKSArIFwiPiYjMTYwOzxcIitcIi9hPjxcIitcIi9saT5cIjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHNlcCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0c3RyICs9IFwiPFwiK1wibGkgY2xhc3M9J1wiICsgKHZhbC5fY2xhc3MgfHwgXCJcIikgKyAodmFsLl9kaXNhYmxlZCA9PT0gdHJ1ZSB8fCAoJC5pc0Z1bmN0aW9uKHZhbC5fZGlzYWJsZWQpICYmIHZhbC5fZGlzYWJsZWQoeyBcIml0ZW1cIiA6IHZhbCwgXCJyZWZlcmVuY2VcIiA6IHZha2F0YV9jb250ZXh0LnJlZmVyZW5jZSwgXCJlbGVtZW50XCIgOiB2YWthdGFfY29udGV4dC5lbGVtZW50IH0pKSA/IFwiIHZha2F0YS1jb250ZXh0bWVudS1kaXNhYmxlZCBcIiA6IFwiXCIpICsgXCInIFwiKyh2YWwuc2hvcnRjdXQ/XCIgZGF0YS1zaG9ydGN1dD0nXCIrdmFsLnNob3J0Y3V0K1wiJyBcIjonJykrXCI+XCI7XHJcblx0XHRcdFx0XHRzdHIgKz0gXCI8XCIrXCJhIGhyZWY9JyMnIHJlbD0nXCIgKyAodmFrYXRhX2NvbnRleHQuaXRlbXMubGVuZ3RoIC0gMSkgKyBcIic+XCI7XHJcblx0XHRcdFx0XHRpZigkLnZha2F0YS5jb250ZXh0LnNldHRpbmdzLmljb25zKSB7XHJcblx0XHRcdFx0XHRcdHN0ciArPSBcIjxcIitcImkgXCI7XHJcblx0XHRcdFx0XHRcdGlmKHZhbC5pY29uKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYodmFsLmljb24uaW5kZXhPZihcIi9cIikgIT09IC0xIHx8IHZhbC5pY29uLmluZGV4T2YoXCIuXCIpICE9PSAtMSkgeyBzdHIgKz0gXCIgc3R5bGU9J2JhY2tncm91bmQ6dXJsKFxcXCJcIiArIHZhbC5pY29uICsgXCJcXFwiKSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdCcgXCI7IH1cclxuXHRcdFx0XHRcdFx0XHRlbHNlIHsgc3RyICs9IFwiIGNsYXNzPSdcIiArIHZhbC5pY29uICsgXCInIFwiOyB9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0c3RyICs9IFwiPjxcIitcIi9pPjxcIitcInNwYW4gY2xhc3M9J3Zha2F0YS1jb250ZXh0bWVudS1zZXAnPiYjMTYwOzxcIitcIi9zcGFuPlwiO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0c3RyICs9IHZhbC5sYWJlbCArICh2YWwuc2hvcnRjdXQ/JyA8c3BhbiBjbGFzcz1cInZha2F0YS1jb250ZXh0bWVudS1zaG9ydGN1dCB2YWthdGEtY29udGV4dG1lbnUtc2hvcnRjdXQtJyt2YWwuc2hvcnRjdXQrJ1wiPicrICh2YWwuc2hvcnRjdXRfbGFiZWwgfHwgJycpICsnPC9zcGFuPic6JycpICsgXCI8XCIrXCIvYT5cIjtcclxuXHRcdFx0XHRcdGlmKHZhbC5zdWJtZW51KSB7XHJcblx0XHRcdFx0XHRcdHRtcCA9ICQudmFrYXRhLmNvbnRleHQuX3BhcnNlKHZhbC5zdWJtZW51LCB0cnVlKTtcclxuXHRcdFx0XHRcdFx0aWYodG1wKSB7IHN0ciArPSB0bXA7IH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHN0ciArPSBcIjxcIitcIi9saT5cIjtcclxuXHRcdFx0XHRcdGlmKHZhbC5zZXBhcmF0b3JfYWZ0ZXIpIHtcclxuXHRcdFx0XHRcdFx0c3RyICs9IFwiPFwiK1wibGkgY2xhc3M9J3Zha2F0YS1jb250ZXh0LXNlcGFyYXRvcic+PFwiK1wiYSBocmVmPScjJyBcIiArICgkLnZha2F0YS5jb250ZXh0LnNldHRpbmdzLmljb25zID8gJycgOiAnc3R5bGU9XCJtYXJnaW4tbGVmdDowcHg7XCInKSArIFwiPiYjMTYwOzxcIitcIi9hPjxcIitcIi9saT5cIjtcclxuXHRcdFx0XHRcdFx0c2VwID0gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRzdHIgID0gc3RyLnJlcGxhY2UoLzxsaSBjbGFzc1xcPSd2YWthdGEtY29udGV4dC1zZXBhcmF0b3InXFw+PFxcL2xpXFw+JC8sXCJcIik7XHJcblx0XHRcdFx0aWYoaXNfY2FsbGJhY2spIHsgc3RyICs9IFwiPC91bD5cIjsgfVxyXG5cdFx0XHRcdC8qKlxyXG5cdFx0XHRcdCAqIHRyaWdnZXJlZCBvbiB0aGUgZG9jdW1lbnQgd2hlbiB0aGUgY29udGV4dG1lbnUgaXMgcGFyc2VkIChIVE1MIGlzIGJ1aWx0KVxyXG5cdFx0XHRcdCAqIEBldmVudFxyXG5cdFx0XHRcdCAqIEBwbHVnaW4gY29udGV4dG1lbnVcclxuXHRcdFx0XHQgKiBAbmFtZSBjb250ZXh0X3BhcnNlLnZha2F0YVxyXG5cdFx0XHRcdCAqIEBwYXJhbSB7alF1ZXJ5fSByZWZlcmVuY2UgdGhlIGVsZW1lbnQgdGhhdCB3YXMgcmlnaHQgY2xpY2tlZFxyXG5cdFx0XHRcdCAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IHRoZSBET00gZWxlbWVudCBvZiB0aGUgbWVudSBpdHNlbGZcclxuXHRcdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gcG9zaXRpb24gdGhlIHggJiB5IGNvb3JkaW5hdGVzIG9mIHRoZSBtZW51XHJcblx0XHRcdFx0ICovXHJcblx0XHRcdFx0aWYoIWlzX2NhbGxiYWNrKSB7IHZha2F0YV9jb250ZXh0Lmh0bWwgPSBzdHI7ICQudmFrYXRhLmNvbnRleHQuX3RyaWdnZXIoXCJwYXJzZVwiKTsgfVxyXG5cdFx0XHRcdHJldHVybiBzdHIubGVuZ3RoID4gMTAgPyBzdHIgOiBmYWxzZTtcclxuXHRcdFx0fSxcclxuXHRcdFx0X3Nob3dfc3VibWVudSA6IGZ1bmN0aW9uIChvKSB7XHJcblx0XHRcdFx0byA9ICQobyk7XHJcblx0XHRcdFx0aWYoIW8ubGVuZ3RoIHx8ICFvLmNoaWxkcmVuKFwidWxcIikubGVuZ3RoKSB7IHJldHVybjsgfVxyXG5cdFx0XHRcdHZhciBlID0gby5jaGlsZHJlbihcInVsXCIpLFxyXG5cdFx0XHRcdFx0eCA9IG8ub2Zmc2V0KCkubGVmdCArIG8ub3V0ZXJXaWR0aCgpLFxyXG5cdFx0XHRcdFx0eSA9IG8ub2Zmc2V0KCkudG9wLFxyXG5cdFx0XHRcdFx0dyA9IGUud2lkdGgoKSxcclxuXHRcdFx0XHRcdGggPSBlLmhlaWdodCgpLFxyXG5cdFx0XHRcdFx0ZHcgPSAkKHdpbmRvdykud2lkdGgoKSArICQod2luZG93KS5zY3JvbGxMZWZ0KCksXHJcblx0XHRcdFx0XHRkaCA9ICQod2luZG93KS5oZWlnaHQoKSArICQod2luZG93KS5zY3JvbGxUb3AoKTtcclxuXHRcdFx0XHQvLyDQvNC+0LbQtSDQtNCwINGB0LUg0YHQv9C10YHRgtC4INC1INC10LTQvdCwINC/0YDQvtCy0LXRgNC60LAgLSDQtNCw0LvQuCDQvdGP0LzQsCDQvdGP0LrQvtC5INC+0YIg0LrQu9Cw0YHQvtCy0LXRgtC1INCy0LXRh9C1INC90LDQs9C+0YDQtVxyXG5cdFx0XHRcdGlmKHJpZ2h0X3RvX2xlZnQpIHtcclxuXHRcdFx0XHRcdG9beCAtICh3ICsgMTAgKyBvLm91dGVyV2lkdGgoKSkgPCAwID8gXCJhZGRDbGFzc1wiIDogXCJyZW1vdmVDbGFzc1wiXShcInZha2F0YS1jb250ZXh0LWxlZnRcIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0b1t4ICsgdyArIDEwID4gZHcgPyBcImFkZENsYXNzXCIgOiBcInJlbW92ZUNsYXNzXCJdKFwidmFrYXRhLWNvbnRleHQtcmlnaHRcIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKHkgKyBoICsgMTAgPiBkaCkge1xyXG5cdFx0XHRcdFx0ZS5jc3MoXCJib3R0b21cIixcIi0xcHhcIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGUuc2hvdygpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRzaG93IDogZnVuY3Rpb24gKHJlZmVyZW5jZSwgcG9zaXRpb24sIGRhdGEpIHtcclxuXHRcdFx0XHR2YXIgbywgZSwgeCwgeSwgdywgaCwgZHcsIGRoLCBjb25kID0gdHJ1ZTtcclxuXHRcdFx0XHRpZih2YWthdGFfY29udGV4dC5lbGVtZW50ICYmIHZha2F0YV9jb250ZXh0LmVsZW1lbnQubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5lbGVtZW50LndpZHRoKCcnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0c3dpdGNoKGNvbmQpIHtcclxuXHRcdFx0XHRcdGNhc2UgKCFwb3NpdGlvbiAmJiAhcmVmZXJlbmNlKTpcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0Y2FzZSAoISFwb3NpdGlvbiAmJiAhIXJlZmVyZW5jZSk6XHJcblx0XHRcdFx0XHRcdHZha2F0YV9jb250ZXh0LnJlZmVyZW5jZVx0PSByZWZlcmVuY2U7XHJcblx0XHRcdFx0XHRcdHZha2F0YV9jb250ZXh0LnBvc2l0aW9uX3hcdD0gcG9zaXRpb24ueDtcclxuXHRcdFx0XHRcdFx0dmFrYXRhX2NvbnRleHQucG9zaXRpb25feVx0PSBwb3NpdGlvbi55O1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgKCFwb3NpdGlvbiAmJiAhIXJlZmVyZW5jZSk6XHJcblx0XHRcdFx0XHRcdHZha2F0YV9jb250ZXh0LnJlZmVyZW5jZVx0PSByZWZlcmVuY2U7XHJcblx0XHRcdFx0XHRcdG8gPSByZWZlcmVuY2Uub2Zmc2V0KCk7XHJcblx0XHRcdFx0XHRcdHZha2F0YV9jb250ZXh0LnBvc2l0aW9uX3hcdD0gby5sZWZ0ICsgcmVmZXJlbmNlLm91dGVySGVpZ2h0KCk7XHJcblx0XHRcdFx0XHRcdHZha2F0YV9jb250ZXh0LnBvc2l0aW9uX3lcdD0gby50b3A7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSAoISFwb3NpdGlvbiAmJiAhcmVmZXJlbmNlKTpcclxuXHRcdFx0XHRcdFx0dmFrYXRhX2NvbnRleHQucG9zaXRpb25feFx0PSBwb3NpdGlvbi54O1xyXG5cdFx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5wb3NpdGlvbl95XHQ9IHBvc2l0aW9uLnk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZighIXJlZmVyZW5jZSAmJiAhZGF0YSAmJiAkKHJlZmVyZW5jZSkuZGF0YSgndmFrYXRhX2NvbnRleHRtZW51JykpIHtcclxuXHRcdFx0XHRcdGRhdGEgPSAkKHJlZmVyZW5jZSkuZGF0YSgndmFrYXRhX2NvbnRleHRtZW51Jyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKCQudmFrYXRhLmNvbnRleHQuX3BhcnNlKGRhdGEpKSB7XHJcblx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5lbGVtZW50Lmh0bWwodmFrYXRhX2NvbnRleHQuaHRtbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKHZha2F0YV9jb250ZXh0Lml0ZW1zLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0ZSA9IHZha2F0YV9jb250ZXh0LmVsZW1lbnQ7XHJcblx0XHRcdFx0XHR4ID0gdmFrYXRhX2NvbnRleHQucG9zaXRpb25feDtcclxuXHRcdFx0XHRcdHkgPSB2YWthdGFfY29udGV4dC5wb3NpdGlvbl95O1xyXG5cdFx0XHRcdFx0dyA9IGUud2lkdGgoKTtcclxuXHRcdFx0XHRcdGggPSBlLmhlaWdodCgpO1xyXG5cdFx0XHRcdFx0ZHcgPSAkKHdpbmRvdykud2lkdGgoKSArICQod2luZG93KS5zY3JvbGxMZWZ0KCk7XHJcblx0XHRcdFx0XHRkaCA9ICQod2luZG93KS5oZWlnaHQoKSArICQod2luZG93KS5zY3JvbGxUb3AoKTtcclxuXHRcdFx0XHRcdGlmKHJpZ2h0X3RvX2xlZnQpIHtcclxuXHRcdFx0XHRcdFx0eCAtPSBlLm91dGVyV2lkdGgoKTtcclxuXHRcdFx0XHRcdFx0aWYoeCA8ICQod2luZG93KS5zY3JvbGxMZWZ0KCkgKyAyMCkge1xyXG5cdFx0XHRcdFx0XHRcdHggPSAkKHdpbmRvdykuc2Nyb2xsTGVmdCgpICsgMjA7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmKHggKyB3ICsgMjAgPiBkdykge1xyXG5cdFx0XHRcdFx0XHR4ID0gZHcgLSAodyArIDIwKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmKHkgKyBoICsgMjAgPiBkaCkge1xyXG5cdFx0XHRcdFx0XHR5ID0gZGggLSAoaCArIDIwKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5lbGVtZW50XHJcblx0XHRcdFx0XHRcdC5jc3MoeyBcImxlZnRcIiA6IHgsIFwidG9wXCIgOiB5IH0pXHJcblx0XHRcdFx0XHRcdC5zaG93KClcclxuXHRcdFx0XHRcdFx0LmZpbmQoJ2E6ZXEoMCknKS5mb2N1cygpLnBhcmVudCgpLmFkZENsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIik7XHJcblx0XHRcdFx0XHR2YWthdGFfY29udGV4dC5pc192aXNpYmxlID0gdHJ1ZTtcclxuXHRcdFx0XHRcdC8qKlxyXG5cdFx0XHRcdFx0ICogdHJpZ2dlcmVkIG9uIHRoZSBkb2N1bWVudCB3aGVuIHRoZSBjb250ZXh0bWVudSBpcyBzaG93blxyXG5cdFx0XHRcdFx0ICogQGV2ZW50XHJcblx0XHRcdFx0XHQgKiBAcGx1Z2luIGNvbnRleHRtZW51XHJcblx0XHRcdFx0XHQgKiBAbmFtZSBjb250ZXh0X3Nob3cudmFrYXRhXHJcblx0XHRcdFx0XHQgKiBAcGFyYW0ge2pRdWVyeX0gcmVmZXJlbmNlIHRoZSBlbGVtZW50IHRoYXQgd2FzIHJpZ2h0IGNsaWNrZWRcclxuXHRcdFx0XHRcdCAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IHRoZSBET00gZWxlbWVudCBvZiB0aGUgbWVudSBpdHNlbGZcclxuXHRcdFx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBwb3NpdGlvbiB0aGUgeCAmIHkgY29vcmRpbmF0ZXMgb2YgdGhlIG1lbnVcclxuXHRcdFx0XHRcdCAqL1xyXG5cdFx0XHRcdFx0JC52YWthdGEuY29udGV4dC5fdHJpZ2dlcihcInNob3dcIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRoaWRlIDogZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdGlmKHZha2F0YV9jb250ZXh0LmlzX3Zpc2libGUpIHtcclxuXHRcdFx0XHRcdHZha2F0YV9jb250ZXh0LmVsZW1lbnQuaGlkZSgpLmZpbmQoXCJ1bFwiKS5oaWRlKCkuZW5kKCkuZmluZCgnOmZvY3VzJykuYmx1cigpO1xyXG5cdFx0XHRcdFx0dmFrYXRhX2NvbnRleHQuaXNfdmlzaWJsZSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0LyoqXHJcblx0XHRcdFx0XHQgKiB0cmlnZ2VyZWQgb24gdGhlIGRvY3VtZW50IHdoZW4gdGhlIGNvbnRleHRtZW51IGlzIGhpZGRlblxyXG5cdFx0XHRcdFx0ICogQGV2ZW50XHJcblx0XHRcdFx0XHQgKiBAcGx1Z2luIGNvbnRleHRtZW51XHJcblx0XHRcdFx0XHQgKiBAbmFtZSBjb250ZXh0X2hpZGUudmFrYXRhXHJcblx0XHRcdFx0XHQgKiBAcGFyYW0ge2pRdWVyeX0gcmVmZXJlbmNlIHRoZSBlbGVtZW50IHRoYXQgd2FzIHJpZ2h0IGNsaWNrZWRcclxuXHRcdFx0XHRcdCAqIEBwYXJhbSB7alF1ZXJ5fSBlbGVtZW50IHRoZSBET00gZWxlbWVudCBvZiB0aGUgbWVudSBpdHNlbGZcclxuXHRcdFx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBwb3NpdGlvbiB0aGUgeCAmIHkgY29vcmRpbmF0ZXMgb2YgdGhlIG1lbnVcclxuXHRcdFx0XHRcdCAqL1xyXG5cdFx0XHRcdFx0JC52YWthdGEuY29udGV4dC5fdHJpZ2dlcihcImhpZGVcIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdFx0JChmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHJpZ2h0X3RvX2xlZnQgPSAkKFwiYm9keVwiKS5jc3MoXCJkaXJlY3Rpb25cIikgPT09IFwicnRsXCI7XHJcblx0XHRcdHZhciB0byA9IGZhbHNlO1xyXG5cclxuXHRcdFx0dmFrYXRhX2NvbnRleHQuZWxlbWVudCA9ICQoXCI8dWwgY2xhc3M9J3Zha2F0YS1jb250ZXh0Jz48L3VsPlwiKTtcclxuXHRcdFx0dmFrYXRhX2NvbnRleHQuZWxlbWVudFxyXG5cdFx0XHRcdC5vbihcIm1vdXNlZW50ZXJcIiwgXCJsaVwiLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuXHJcblx0XHRcdFx0XHRpZigkLmNvbnRhaW5zKHRoaXMsIGUucmVsYXRlZFRhcmdldCkpIHtcclxuXHRcdFx0XHRcdFx0Ly8g0L/RgNC10LzQsNGF0L3QsNGC0L4g0LfQsNGA0LDQtNC4IGRlbGVnYXRlIG1vdXNlbGVhdmUg0L/Qvi3QtNC+0LvRg1xyXG5cdFx0XHRcdFx0XHQvLyAkKHRoaXMpLmZpbmQoXCIudmFrYXRhLWNvbnRleHQtaG92ZXJcIikucmVtb3ZlQ2xhc3MoXCJ2YWthdGEtY29udGV4dC1ob3ZlclwiKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmKHRvKSB7IGNsZWFyVGltZW91dCh0byk7IH1cclxuXHRcdFx0XHRcdHZha2F0YV9jb250ZXh0LmVsZW1lbnQuZmluZChcIi52YWthdGEtY29udGV4dC1ob3ZlclwiKS5yZW1vdmVDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmVuZCgpO1xyXG5cclxuXHRcdFx0XHRcdCQodGhpcylcclxuXHRcdFx0XHRcdFx0LnNpYmxpbmdzKCkuZmluZChcInVsXCIpLmhpZGUoKS5lbmQoKS5lbmQoKVxyXG5cdFx0XHRcdFx0XHQucGFyZW50c1VudGlsKFwiLnZha2F0YS1jb250ZXh0XCIsIFwibGlcIikuYWRkQmFjaygpLmFkZENsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIik7XHJcblx0XHRcdFx0XHQkLnZha2F0YS5jb250ZXh0Ll9zaG93X3N1Ym1lbnUodGhpcyk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQvLyDRgtC10YHRgtC+0LLQviAtINC00LDQu9C4INC90LUg0L3QsNGC0L7QstCw0YDQstCwP1xyXG5cdFx0XHRcdC5vbihcIm1vdXNlbGVhdmVcIiwgXCJsaVwiLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdFx0aWYoJC5jb250YWlucyh0aGlzLCBlLnJlbGF0ZWRUYXJnZXQpKSB7IHJldHVybjsgfVxyXG5cdFx0XHRcdFx0JCh0aGlzKS5maW5kKFwiLnZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmFkZEJhY2soKS5yZW1vdmVDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpO1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdFx0Lm9uKFwibW91c2VsZWF2ZVwiLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdFx0JCh0aGlzKS5maW5kKFwiLnZha2F0YS1jb250ZXh0LWhvdmVyXCIpLnJlbW92ZUNsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIik7XHJcblx0XHRcdFx0XHRpZigkLnZha2F0YS5jb250ZXh0LnNldHRpbmdzLmhpZGVfb25tb3VzZWxlYXZlKSB7XHJcblx0XHRcdFx0XHRcdHRvID0gc2V0VGltZW91dChcclxuXHRcdFx0XHRcdFx0XHQoZnVuY3Rpb24gKHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbiAoKSB7ICQudmFrYXRhLmNvbnRleHQuaGlkZSgpOyB9O1xyXG5cdFx0XHRcdFx0XHRcdH0odGhpcykpLCAkLnZha2F0YS5jb250ZXh0LnNldHRpbmdzLmhpZGVfb25tb3VzZWxlYXZlKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC5vbihcImNsaWNrXCIsIFwiYVwiLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdFx0Lm9uKFwibW91c2V1cFwiLCBcImFcIiwgZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHRcdGlmKCEkKHRoaXMpLmJsdXIoKS5wYXJlbnQoKS5oYXNDbGFzcyhcInZha2F0YS1jb250ZXh0LWRpc2FibGVkXCIpICYmICQudmFrYXRhLmNvbnRleHQuX2V4ZWN1dGUoJCh0aGlzKS5hdHRyKFwicmVsXCIpKSAhPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdFx0JC52YWthdGEuY29udGV4dC5oaWRlKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQub24oJ2tleWRvd24nLCAnYScsIGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdFx0XHRcdHZhciBvID0gbnVsbDtcclxuXHRcdFx0XHRcdFx0c3dpdGNoKGUud2hpY2gpIHtcclxuXHRcdFx0XHRcdFx0XHRjYXNlIDEzOlxyXG5cdFx0XHRcdFx0XHRcdGNhc2UgMzI6XHJcblx0XHRcdFx0XHRcdFx0XHRlLnR5cGUgPSBcIm1vdXNldXBcIjtcclxuXHRcdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdFx0XHRcdCQoZS5jdXJyZW50VGFyZ2V0KS50cmlnZ2VyKGUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0Y2FzZSAzNzpcclxuXHRcdFx0XHRcdFx0XHRcdGlmKHZha2F0YV9jb250ZXh0LmlzX3Zpc2libGUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFrYXRhX2NvbnRleHQuZWxlbWVudC5maW5kKFwiLnZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmxhc3QoKS5wYXJlbnRzKFwibGk6ZXEoMClcIikuZmluZChcInVsXCIpLmhpZGUoKS5maW5kKFwiLnZha2F0YS1jb250ZXh0LWhvdmVyXCIpLnJlbW92ZUNsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIikuZW5kKCkuZW5kKCkuY2hpbGRyZW4oJ2EnKS5mb2N1cygpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRjYXNlIDM4OlxyXG5cdFx0XHRcdFx0XHRcdFx0aWYodmFrYXRhX2NvbnRleHQuaXNfdmlzaWJsZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRvID0gdmFrYXRhX2NvbnRleHQuZWxlbWVudC5maW5kKFwidWw6dmlzaWJsZVwiKS5hZGRCYWNrKCkubGFzdCgpLmNoaWxkcmVuKFwiLnZha2F0YS1jb250ZXh0LWhvdmVyXCIpLnJlbW92ZUNsYXNzKFwidmFrYXRhLWNvbnRleHQtaG92ZXJcIikucHJldkFsbChcImxpOm5vdCgudmFrYXRhLWNvbnRleHQtc2VwYXJhdG9yKVwiKS5maXJzdCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZighby5sZW5ndGgpIHsgbyA9IHZha2F0YV9jb250ZXh0LmVsZW1lbnQuZmluZChcInVsOnZpc2libGVcIikuYWRkQmFjaygpLmxhc3QoKS5jaGlsZHJlbihcImxpOm5vdCgudmFrYXRhLWNvbnRleHQtc2VwYXJhdG9yKVwiKS5sYXN0KCk7IH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0by5hZGRDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmNoaWxkcmVuKCdhJykuZm9jdXMoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0Y2FzZSAzOTpcclxuXHRcdFx0XHRcdFx0XHRcdGlmKHZha2F0YV9jb250ZXh0LmlzX3Zpc2libGUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFrYXRhX2NvbnRleHQuZWxlbWVudC5maW5kKFwiLnZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmxhc3QoKS5jaGlsZHJlbihcInVsXCIpLnNob3coKS5jaGlsZHJlbihcImxpOm5vdCgudmFrYXRhLWNvbnRleHQtc2VwYXJhdG9yKVwiKS5yZW1vdmVDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmZpcnN0KCkuYWRkQ2xhc3MoXCJ2YWthdGEtY29udGV4dC1ob3ZlclwiKS5jaGlsZHJlbignYScpLmZvY3VzKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdGNhc2UgNDA6XHJcblx0XHRcdFx0XHRcdFx0XHRpZih2YWthdGFfY29udGV4dC5pc192aXNpYmxlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdG8gPSB2YWthdGFfY29udGV4dC5lbGVtZW50LmZpbmQoXCJ1bDp2aXNpYmxlXCIpLmFkZEJhY2soKS5sYXN0KCkuY2hpbGRyZW4oXCIudmFrYXRhLWNvbnRleHQtaG92ZXJcIikucmVtb3ZlQ2xhc3MoXCJ2YWthdGEtY29udGV4dC1ob3ZlclwiKS5uZXh0QWxsKFwibGk6bm90KC52YWthdGEtY29udGV4dC1zZXBhcmF0b3IpXCIpLmZpcnN0KCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmKCFvLmxlbmd0aCkgeyBvID0gdmFrYXRhX2NvbnRleHQuZWxlbWVudC5maW5kKFwidWw6dmlzaWJsZVwiKS5hZGRCYWNrKCkubGFzdCgpLmNoaWxkcmVuKFwibGk6bm90KC52YWthdGEtY29udGV4dC1zZXBhcmF0b3IpXCIpLmZpcnN0KCk7IH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0by5hZGRDbGFzcyhcInZha2F0YS1jb250ZXh0LWhvdmVyXCIpLmNoaWxkcmVuKCdhJykuZm9jdXMoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0Y2FzZSAyNzpcclxuXHRcdFx0XHRcdFx0XHRcdCQudmFrYXRhLmNvbnRleHQuaGlkZSgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0XHRcdC8vY29uc29sZS5sb2coZS53aGljaCk7XHJcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHQub24oJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0dmFyIGEgPSB2YWthdGFfY29udGV4dC5lbGVtZW50LmZpbmQoJy52YWthdGEtY29udGV4dG1lbnUtc2hvcnRjdXQtJyArIGUud2hpY2gpLnBhcmVudCgpO1xyXG5cdFx0XHRcdFx0aWYoYS5wYXJlbnQoKS5ub3QoJy52YWthdGEtY29udGV4dC1kaXNhYmxlZCcpKSB7XHJcblx0XHRcdFx0XHRcdGEubW91c2V1cCgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdFx0LmFwcGVuZFRvKFwiYm9keVwiKTtcclxuXHJcblx0XHRcdCQoZG9jdW1lbnQpXHJcblx0XHRcdFx0Lm9uKFwibW91c2Vkb3duXCIsIGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdFx0XHRpZih2YWthdGFfY29udGV4dC5pc192aXNpYmxlICYmICEkLmNvbnRhaW5zKHZha2F0YV9jb250ZXh0LmVsZW1lbnRbMF0sIGUudGFyZ2V0KSkgeyAkLnZha2F0YS5jb250ZXh0LmhpZGUoKTsgfVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdFx0Lm9uKFwiY29udGV4dF9zaG93LnZha2F0YVwiLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG5cdFx0XHRcdFx0dmFrYXRhX2NvbnRleHQuZWxlbWVudC5maW5kKFwibGk6aGFzKHVsKVwiKS5jaGlsZHJlbihcImFcIikuYWRkQ2xhc3MoXCJ2YWthdGEtY29udGV4dC1wYXJlbnRcIik7XHJcblx0XHRcdFx0XHRpZihyaWdodF90b19sZWZ0KSB7XHJcblx0XHRcdFx0XHRcdHZha2F0YV9jb250ZXh0LmVsZW1lbnQuYWRkQ2xhc3MoXCJ2YWthdGEtY29udGV4dC1ydGxcIikuY3NzKFwiZGlyZWN0aW9uXCIsIFwicnRsXCIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ly8gYWxzbyBhcHBseSBhIFJUTCBjbGFzcz9cclxuXHRcdFx0XHRcdHZha2F0YV9jb250ZXh0LmVsZW1lbnQuZmluZChcInVsXCIpLmhpZGUoKS5lbmQoKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH0oJCkpO1xyXG5cdC8vICQuanN0cmVlLmRlZmF1bHRzLnBsdWdpbnMucHVzaChcImNvbnRleHRtZW51XCIpO1xyXG5cclxuLyoqXHJcbiAqICMjIyBEcmFnJ24nZHJvcCBwbHVnaW5cclxuICpcclxuICogRW5hYmxlcyBkcmFnZ2luZyBhbmQgZHJvcHBpbmcgb2Ygbm9kZXMgaW4gdGhlIHRyZWUsIHJlc3VsdGluZyBpbiBhIG1vdmUgb3IgY29weSBvcGVyYXRpb25zLlxyXG4gKi9cclxuXHJcblx0LyoqXHJcblx0ICogc3RvcmVzIGFsbCBkZWZhdWx0cyBmb3IgdGhlIGRyYWcnbidkcm9wIHBsdWdpblxyXG5cdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmRuZFxyXG5cdCAqIEBwbHVnaW4gZG5kXHJcblx0ICovXHJcblx0JC5qc3RyZWUuZGVmYXVsdHMuZG5kID0ge1xyXG5cdFx0LyoqXHJcblx0XHQgKiBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBhIGNvcHkgc2hvdWxkIGJlIHBvc3NpYmxlIHdoaWxlIGRyYWdnaW5nIChieSBwcmVzc2ludCB0aGUgbWV0YSBrZXkgb3IgQ3RybCkuIERlZmF1bHRzIHRvIGB0cnVlYC5cclxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLmRuZC5jb3B5XHJcblx0XHQgKiBAcGx1Z2luIGRuZFxyXG5cdFx0ICovXHJcblx0XHRjb3B5IDogdHJ1ZSxcclxuXHRcdC8qKlxyXG5cdFx0ICogYSBudW1iZXIgaW5kaWNhdGluZyBob3cgbG9uZyBhIG5vZGUgc2hvdWxkIHJlbWFpbiBob3ZlcmVkIHdoaWxlIGRyYWdnaW5nIHRvIGJlIG9wZW5lZC4gRGVmYXVsdHMgdG8gYDUwMGAuXHJcblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5kbmQub3Blbl90aW1lb3V0XHJcblx0XHQgKiBAcGx1Z2luIGRuZFxyXG5cdFx0ICovXHJcblx0XHRvcGVuX3RpbWVvdXQgOiA1MDAsXHJcblx0XHQvKipcclxuXHRcdCAqIGEgZnVuY3Rpb24gaW52b2tlZCBlYWNoIHRpbWUgYSBub2RlIGlzIGFib3V0IHRvIGJlIGRyYWdnZWQsIGludm9rZWQgaW4gdGhlIHRyZWUncyBzY29wZSBhbmQgcmVjZWl2ZXMgdGhlIG5vZGUgYXMgYW4gYXJndW1lbnQgLSByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGRyYWdnaW5nXHJcblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5kbmQuaXNfZHJhZ2dhYmxlXHJcblx0XHQgKiBAcGx1Z2luIGRuZFxyXG5cdFx0ICovXHJcblx0XHRpc19kcmFnZ2FibGUgOiB0cnVlLFxyXG5cdFx0LyoqXHJcblx0XHQgKiBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBjaGVja3Mgc2hvdWxkIGNvbnN0YW50bHkgYmUgbWFkZSB3aGlsZSB0aGUgdXNlciBpcyBkcmFnZ2luZyB0aGUgbm9kZSAoYXMgb3Bwb3NlZCB0byBjaGVja2luZyBvbmx5IG9uIGRyb3ApLCBkZWZhdWx0IGlzIGB0cnVlYFxyXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuZG5kLmNoZWNrX3doaWxlX2RyYWdnaW5nXHJcblx0XHQgKiBAcGx1Z2luIGRuZFxyXG5cdFx0ICovXHJcblx0XHRjaGVja193aGlsZV9kcmFnZ2luZyA6IHRydWVcclxuXHR9O1xyXG5cdC8vIFRPRE86IG5vdyBjaGVjayB3b3JrcyBieSBjaGVja2luZyBmb3IgZWFjaCBub2RlIGluZGl2aWR1YWxseSwgaG93IGFib3V0IG1heF9jaGlsZHJlbiwgdW5pcXVlLCBldGM/XHJcblx0Ly8gVE9ETzogZHJvcCBzb21ld2hlcmUgZWxzZSAtIG1heWJlIGRlbW8gb25seT9cclxuXHQkLmpzdHJlZS5wbHVnaW5zLmRuZCA9IGZ1bmN0aW9uIChvcHRpb25zLCBwYXJlbnQpIHtcclxuXHRcdHRoaXMuYmluZCA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0cGFyZW50LmJpbmQuY2FsbCh0aGlzKTtcclxuXHJcblx0XHRcdHRoaXMuZWxlbWVudFxyXG5cdFx0XHRcdC5vbignbW91c2Vkb3duIHRvdWNoc3RhcnQnLCAnLmpzdHJlZS1hbmNob3InLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdFx0XHR2YXIgb2JqID0gdGhpcy5nZXRfbm9kZShlLnRhcmdldCksXHJcblx0XHRcdFx0XHRcdG1sdCA9IHRoaXMuaXNfc2VsZWN0ZWQob2JqKSA/IHRoaXMuZ2V0X3NlbGVjdGVkKCkubGVuZ3RoIDogMTtcclxuXHRcdFx0XHRcdGlmKG9iaiAmJiBvYmouaWQgJiYgb2JqLmlkICE9PSBcIiNcIiAmJiAoZS53aGljaCA9PT0gMSB8fCBlLnR5cGUgPT09IFwidG91Y2hzdGFydFwiKSAmJlxyXG5cdFx0XHRcdFx0XHQodGhpcy5zZXR0aW5ncy5kbmQuaXNfZHJhZ2dhYmxlID09PSB0cnVlIHx8ICgkLmlzRnVuY3Rpb24odGhpcy5zZXR0aW5ncy5kbmQuaXNfZHJhZ2dhYmxlKSAmJiB0aGlzLnNldHRpbmdzLmRuZC5pc19kcmFnZ2FibGUuY2FsbCh0aGlzLCBvYmopKSlcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmVsZW1lbnQudHJpZ2dlcignbW91c2Vkb3duLmpzdHJlZScpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gJC52YWthdGEuZG5kLnN0YXJ0KGUsIHsgJ2pzdHJlZScgOiB0cnVlLCAnb3JpZ2luJyA6IHRoaXMsICdvYmonIDogdGhpcy5nZXRfbm9kZShvYmosdHJ1ZSksICdub2RlcycgOiBtbHQgPiAxID8gdGhpcy5nZXRfc2VsZWN0ZWQoKSA6IFtvYmouaWRdIH0sICc8ZGl2IGlkPVwianN0cmVlLWRuZFwiIGNsYXNzPVwianN0cmVlLScgKyB0aGlzLmdldF90aGVtZSgpICsgJ1wiPjxpIGNsYXNzPVwianN0cmVlLWljb24ganN0cmVlLWVyXCI+PC9pPicgKyAobWx0ID4gMSA/IG1sdCArICcgJyArIHRoaXMuZ2V0X3N0cmluZygnbm9kZXMnKSA6IHRoaXMuZ2V0X3RleHQoZS5jdXJyZW50VGFyZ2V0LCB0cnVlKSkgKyAnPGlucyBjbGFzcz1cImpzdHJlZS1jb3B5XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+KzwvaW5zPjwvZGl2PicpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sIHRoaXMpKTtcclxuXHRcdH07XHJcblx0fTtcclxuXHJcblx0JChmdW5jdGlvbigpIHtcclxuXHRcdC8vIGJpbmQgb25seSBvbmNlIGZvciBhbGwgaW5zdGFuY2VzXHJcblx0XHR2YXIgbGFzdG12ID0gZmFsc2UsXHJcblx0XHRcdGxhc3RlciA9IGZhbHNlLFxyXG5cdFx0XHRvcGVudG8gPSBmYWxzZSxcclxuXHRcdFx0bWFya2VyID0gJCgnPGRpdiBpZD1cImpzdHJlZS1tYXJrZXJcIj4mIzE2MDs8L2Rpdj4nKS5oaWRlKCkuYXBwZW5kVG8oJ2JvZHknKTtcclxuXHJcblx0XHQkKGRvY3VtZW50KVxyXG5cdFx0XHQuYmluZCgnZG5kX3N0YXJ0LnZha2F0YScsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcblx0XHRcdFx0bGFzdG12ID0gZmFsc2U7XHJcblx0XHRcdH0pXHJcblx0XHRcdC5iaW5kKCdkbmRfbW92ZS52YWthdGEnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG5cdFx0XHRcdGlmKG9wZW50bykgeyBjbGVhclRpbWVvdXQob3BlbnRvKTsgfVxyXG5cdFx0XHRcdGlmKCFkYXRhLmRhdGEuanN0cmVlKSB7IHJldHVybjsgfVxyXG5cclxuXHRcdFx0XHQvLyBpZiB3ZSBhcmUgaG92ZXJpbmcgdGhlIG1hcmtlciBpbWFnZSBkbyBub3RoaW5nIChjYW4gaGFwcGVuIG9uIFwiaW5zaWRlXCIgZHJhZ3MpXHJcblx0XHRcdFx0aWYoZGF0YS5ldmVudC50YXJnZXQuaWQgJiYgZGF0YS5ldmVudC50YXJnZXQuaWQgPT09ICdqc3RyZWUtbWFya2VyJykge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dmFyIGlucyA9ICQuanN0cmVlLnJlZmVyZW5jZShkYXRhLmV2ZW50LnRhcmdldCksXHJcblx0XHRcdFx0XHRyZWYgPSBmYWxzZSxcclxuXHRcdFx0XHRcdG9mZiA9IGZhbHNlLFxyXG5cdFx0XHRcdFx0cmVsID0gZmFsc2UsXHJcblx0XHRcdFx0XHRsLCB0LCBoLCBwLCBpLCBvLCBvaywgdDEsIHQyLCBvcCwgcHMsIHByO1xyXG5cdFx0XHRcdC8vIGlmIHdlIGFyZSBvdmVyIGFuIGluc3RhbmNlXHJcblx0XHRcdFx0aWYoaW5zICYmIGlucy5fZGF0YSAmJiBpbnMuX2RhdGEuZG5kKSB7XHJcblx0XHRcdFx0XHRtYXJrZXIuYXR0cignY2xhc3MnLCAnanN0cmVlLScgKyBpbnMuZ2V0X3RoZW1lKCkpO1xyXG5cdFx0XHRcdFx0ZGF0YS5oZWxwZXJcclxuXHRcdFx0XHRcdFx0LmNoaWxkcmVuKCkuYXR0cignY2xhc3MnLCAnanN0cmVlLScgKyBpbnMuZ2V0X3RoZW1lKCkpXHJcblx0XHRcdFx0XHRcdC5maW5kKCcuanN0cmVlLWNvcHk6ZXEoMCknKVsgZGF0YS5kYXRhLm9yaWdpbiAmJiBkYXRhLmRhdGEub3JpZ2luLnNldHRpbmdzLmRuZC5jb3B5ICYmIChkYXRhLmV2ZW50Lm1ldGFLZXkgfHwgZGF0YS5ldmVudC5jdHJsS2V5KSA/ICdzaG93JyA6ICdoaWRlJyBdKCk7XHJcblxyXG5cclxuXHRcdFx0XHRcdC8vIGlmIGFyZSBob3ZlcmluZyB0aGUgY29udGFpbmVyIGl0c2VsZiBhZGQgYSBuZXcgcm9vdCBub2RlXHJcblx0XHRcdFx0XHRpZiggKGRhdGEuZXZlbnQudGFyZ2V0ID09PSBpbnMuZWxlbWVudFswXSB8fCBkYXRhLmV2ZW50LnRhcmdldCA9PT0gaW5zLmdldF9jb250YWluZXJfdWwoKVswXSkgJiYgaW5zLmdldF9jb250YWluZXJfdWwoKS5jaGlsZHJlbigpLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRvayA9IHRydWU7XHJcblx0XHRcdFx0XHRcdGZvcih0MSA9IDAsIHQyID0gZGF0YS5kYXRhLm5vZGVzLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xyXG5cdFx0XHRcdFx0XHRcdG9rID0gb2sgJiYgaW5zLmNoZWNrKCAoZGF0YS5kYXRhLm9yaWdpbiAmJiBkYXRhLmRhdGEub3JpZ2luLnNldHRpbmdzLmRuZC5jb3B5ICYmIChkYXRhLmV2ZW50Lm1ldGFLZXkgfHwgZGF0YS5ldmVudC5jdHJsS2V5KSA/IFwiY29weV9ub2RlXCIgOiBcIm1vdmVfbm9kZVwiKSwgKGRhdGEuZGF0YS5vcmlnaW4gJiYgZGF0YS5kYXRhLm9yaWdpbiAhPT0gaW5zID8gZGF0YS5kYXRhLm9yaWdpbi5nZXRfbm9kZShkYXRhLmRhdGEubm9kZXNbdDFdKSA6IGRhdGEuZGF0YS5ub2Rlc1t0MV0pLCAnIycsICdsYXN0Jyk7XHJcblx0XHRcdFx0XHRcdFx0aWYoIW9rKSB7IGJyZWFrOyB9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYob2spIHtcclxuXHRcdFx0XHRcdFx0XHRsYXN0bXYgPSB7ICdpbnMnIDogaW5zLCAncGFyJyA6ICcjJywgJ3BvcycgOiAnbGFzdCcgfTtcclxuXHRcdFx0XHRcdFx0XHRtYXJrZXIuaGlkZSgpO1xyXG5cdFx0XHRcdFx0XHRcdGRhdGEuaGVscGVyLmZpbmQoJy5qc3RyZWUtaWNvbjplcSgwKScpLnJlbW92ZUNsYXNzKCdqc3RyZWUtZXInKS5hZGRDbGFzcygnanN0cmVlLW9rJyk7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0Ly8gaWYgd2UgYXJlIGhvdmVyaW5nIGEgdHJlZSBub2RlXHJcblx0XHRcdFx0XHRcdHJlZiA9ICQoZGF0YS5ldmVudC50YXJnZXQpLmNsb3Nlc3QoJ2EnKTtcclxuXHRcdFx0XHRcdFx0aWYocmVmICYmIHJlZi5sZW5ndGggJiYgcmVmLnBhcmVudCgpLmlzKCcuanN0cmVlLWNsb3NlZCwgLmpzdHJlZS1vcGVuLCAuanN0cmVlLWxlYWYnKSkge1xyXG5cdFx0XHRcdFx0XHRcdG9mZiA9IHJlZi5vZmZzZXQoKTtcclxuXHRcdFx0XHRcdFx0XHRyZWwgPSBkYXRhLmV2ZW50LnBhZ2VZIC0gb2ZmLnRvcDtcclxuXHRcdFx0XHRcdFx0XHRoID0gcmVmLmhlaWdodCgpO1xyXG5cdFx0XHRcdFx0XHRcdGlmKHJlbCA8IGggLyAzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRvID0gWydiJywgJ2knLCAnYSddO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRlbHNlIGlmKHJlbCA+IGggLSBoIC8gMykge1xyXG5cdFx0XHRcdFx0XHRcdFx0byA9IFsnYScsICdpJywgJ2InXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRvID0gcmVsID4gaCAvIDIgPyBbJ2knLCAnYScsICdiJ10gOiBbJ2knLCAnYicsICdhJ107XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdCQuZWFjaChvLCBmdW5jdGlvbiAoaiwgdikge1xyXG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoKHYpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAnYic6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bCA9IG9mZi5sZWZ0IC0gNjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ID0gb2ZmLnRvcCAtIDU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cCA9IGlucy5nZXRfcGFyZW50KHJlZik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aSA9IHJlZi5wYXJlbnQoKS5pbmRleCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlICdpJzpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsID0gb2ZmLmxlZnQgLSAyO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHQgPSBvZmYudG9wIC0gNSArIGggLyAyICsgMTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwID0gcmVmLnBhcmVudCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGkgPSAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlICdhJzpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsID0gb2ZmLmxlZnQgLSA2O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHQgPSBvZmYudG9wIC0gNSArIGg7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cCA9IGlucy5nZXRfcGFyZW50KHJlZik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aSA9IHJlZi5wYXJlbnQoKS5pbmRleCgpICsgMTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdC8qIVxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogbW92aW5nIGluc2lkZSwgYnV0IHRoZSBub2RlIGlzIG5vdCB5ZXQgbG9hZGVkP1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gdGhlIGNoZWNrIHdpbGwgd29yayBhbnl3YXksIGFzIHdoZW4gbW92aW5nIHRoZSBub2RlIHdpbGwgYmUgbG9hZGVkIGZpcnN0IGFuZCBjaGVja2VkIGFnYWluXHJcblx0XHRcdFx0XHRcdFx0XHRpZih2ID09PSAnaScgJiYgIWlucy5pc19sb2FkZWQocCkpIHsgfVxyXG5cdFx0XHRcdFx0XHRcdFx0Ki9cclxuXHRcdFx0XHRcdFx0XHRcdG9rID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdGZvcih0MSA9IDAsIHQyID0gZGF0YS5kYXRhLm5vZGVzLmxlbmd0aDsgdDEgPCB0MjsgdDErKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRvcCA9IGRhdGEuZGF0YS5vcmlnaW4gJiYgZGF0YS5kYXRhLm9yaWdpbi5zZXR0aW5ncy5kbmQuY29weSAmJiAoZGF0YS5ldmVudC5tZXRhS2V5IHx8IGRhdGEuZXZlbnQuY3RybEtleSkgPyBcImNvcHlfbm9kZVwiIDogXCJtb3ZlX25vZGVcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cHMgPSBpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZihvcCA9PT0gXCJtb3ZlX25vZGVcIiAmJiB2ID09PSAnYScgJiYgKGRhdGEuZGF0YS5vcmlnaW4gJiYgZGF0YS5kYXRhLm9yaWdpbiA9PT0gaW5zKSAmJiBwID09PSBpbnMuZ2V0X3BhcmVudChkYXRhLmRhdGEubm9kZXNbdDFdKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByID0gaW5zLmdldF9ub2RlKHApO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHBzID4gJC5pbkFycmF5KGRhdGEuZGF0YS5ub2Rlc1t0MV0sIHByLmNoaWxkcmVuKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHMgLT0gMTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0b2sgPSBvayAmJiAoIChpbnMgJiYgaW5zLnNldHRpbmdzICYmIGlucy5zZXR0aW5ncy5kbmQgJiYgaW5zLnNldHRpbmdzLmRuZC5jaGVja193aGlsZV9kcmFnZ2luZyA9PT0gZmFsc2UpIHx8IGlucy5jaGVjayhvcCwgKGRhdGEuZGF0YS5vcmlnaW4gJiYgZGF0YS5kYXRhLm9yaWdpbiAhPT0gaW5zID8gZGF0YS5kYXRhLm9yaWdpbi5nZXRfbm9kZShkYXRhLmRhdGEubm9kZXNbdDFdKSA6IGRhdGEuZGF0YS5ub2Rlc1t0MV0pLCBwLCBwcykgKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYoIW9rKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoaW5zICYmIGlucy5sYXN0X2Vycm9yKSB7IGxhc3RlciA9IGlucy5sYXN0X2Vycm9yKCk7IH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYob2spIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYodiA9PT0gJ2knICYmIHJlZi5wYXJlbnQoKS5pcygnLmpzdHJlZS1jbG9zZWQnKSAmJiBpbnMuc2V0dGluZ3MuZG5kLm9wZW5fdGltZW91dCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9wZW50byA9IHNldFRpbWVvdXQoKGZ1bmN0aW9uICh4LCB6KSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHgub3Blbl9ub2RlKHopOyB9OyB9KGlucywgcmVmKSksIGlucy5zZXR0aW5ncy5kbmQub3Blbl90aW1lb3V0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsYXN0bXYgPSB7ICdpbnMnIDogaW5zLCAncGFyJyA6IHAsICdwb3MnIDogaSB9O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXJrZXIuY3NzKHsgJ2xlZnQnIDogbCArICdweCcsICd0b3AnIDogdCArICdweCcgfSkuc2hvdygpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLmhlbHBlci5maW5kKCcuanN0cmVlLWljb246ZXEoMCknKS5yZW1vdmVDbGFzcygnanN0cmVlLWVyJykuYWRkQ2xhc3MoJ2pzdHJlZS1vaycpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRsYXN0ZXIgPSB7fTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0byA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRpZihvID09PSB0cnVlKSB7IHJldHVybjsgfVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGxhc3RtdiA9IGZhbHNlO1xyXG5cdFx0XHRcdGRhdGEuaGVscGVyLmZpbmQoJy5qc3RyZWUtaWNvbicpLnJlbW92ZUNsYXNzKCdqc3RyZWUtb2snKS5hZGRDbGFzcygnanN0cmVlLWVyJyk7XHJcblx0XHRcdFx0bWFya2VyLmhpZGUoKTtcclxuXHRcdFx0fSlcclxuXHRcdFx0LmJpbmQoJ2RuZF9zY3JvbGwudmFrYXRhJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuXHRcdFx0XHRpZighZGF0YS5kYXRhLmpzdHJlZSkgeyByZXR1cm47IH1cclxuXHRcdFx0XHRtYXJrZXIuaGlkZSgpO1xyXG5cdFx0XHRcdGxhc3RtdiA9IGZhbHNlO1xyXG5cdFx0XHRcdGRhdGEuaGVscGVyLmZpbmQoJy5qc3RyZWUtaWNvbjplcSgwKScpLnJlbW92ZUNsYXNzKCdqc3RyZWUtb2snKS5hZGRDbGFzcygnanN0cmVlLWVyJyk7XHJcblx0XHRcdH0pXHJcblx0XHRcdC5iaW5kKCdkbmRfc3RvcC52YWthdGEnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG5cdFx0XHRcdGlmKG9wZW50bykgeyBjbGVhclRpbWVvdXQob3BlbnRvKTsgfVxyXG5cdFx0XHRcdGlmKCFkYXRhLmRhdGEuanN0cmVlKSB7IHJldHVybjsgfVxyXG5cdFx0XHRcdG1hcmtlci5oaWRlKCk7XHJcblx0XHRcdFx0dmFyIGksIGosIG5vZGVzID0gW107XHJcblx0XHRcdFx0aWYobGFzdG12KSB7XHJcblx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSBkYXRhLmRhdGEubm9kZXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdG5vZGVzW2ldID0gZGF0YS5kYXRhLm9yaWdpbiA/IGRhdGEuZGF0YS5vcmlnaW4uZ2V0X25vZGUoZGF0YS5kYXRhLm5vZGVzW2ldKSA6IGRhdGEuZGF0YS5ub2Rlc1tpXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGxhc3Rtdi5pbnNbIGRhdGEuZGF0YS5vcmlnaW4gJiYgZGF0YS5kYXRhLm9yaWdpbi5zZXR0aW5ncy5kbmQuY29weSAmJiAoZGF0YS5ldmVudC5tZXRhS2V5IHx8IGRhdGEuZXZlbnQuY3RybEtleSkgPyAnY29weV9ub2RlJyA6ICdtb3ZlX25vZGUnIF0obm9kZXMsIGxhc3Rtdi5wYXIsIGxhc3Rtdi5wb3MpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdGkgPSAkKGRhdGEuZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCcuanN0cmVlJyk7XHJcblx0XHRcdFx0XHRpZihpLmxlbmd0aCAmJiBsYXN0ZXIgJiYgbGFzdGVyLmVycm9yICYmIGxhc3Rlci5lcnJvciA9PT0gJ2NoZWNrJykge1xyXG5cdFx0XHRcdFx0XHRpID0gaS5qc3RyZWUodHJ1ZSk7XHJcblx0XHRcdFx0XHRcdGlmKGkpIHtcclxuXHRcdFx0XHRcdFx0XHRpLnNldHRpbmdzLmNvcmUuZXJyb3IuY2FsbCh0aGlzLCBsYXN0ZXIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0XHQuYmluZCgna2V5dXAga2V5ZG93bicsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcblx0XHRcdFx0ZGF0YSA9ICQudmFrYXRhLmRuZC5fZ2V0KCk7XHJcblx0XHRcdFx0aWYoZGF0YS5kYXRhICYmIGRhdGEuZGF0YS5qc3RyZWUpIHtcclxuXHRcdFx0XHRcdGRhdGEuaGVscGVyLmZpbmQoJy5qc3RyZWUtY29weTplcSgwKScpWyBkYXRhLmRhdGEub3JpZ2luICYmIGRhdGEuZGF0YS5vcmlnaW4uc2V0dGluZ3MuZG5kLmNvcHkgJiYgKGUubWV0YUtleSB8fCBlLmN0cmxLZXkpID8gJ3Nob3cnIDogJ2hpZGUnIF0oKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdH0pO1xyXG5cclxuXHQvLyBoZWxwZXJzXHJcblx0KGZ1bmN0aW9uICgkKSB7XHJcblx0XHQkLmZuLnZha2F0YV9yZXZlcnNlID0gW10ucmV2ZXJzZTtcclxuXHRcdC8vIHByaXZhdGUgdmFyaWFibGVcclxuXHRcdHZhciB2YWthdGFfZG5kID0ge1xyXG5cdFx0XHRlbGVtZW50XHQ6IGZhbHNlLFxyXG5cdFx0XHRpc19kb3duXHQ6IGZhbHNlLFxyXG5cdFx0XHRpc19kcmFnXHQ6IGZhbHNlLFxyXG5cdFx0XHRoZWxwZXJcdDogZmFsc2UsXHJcblx0XHRcdGhlbHBlcl93OiAwLFxyXG5cdFx0XHRkYXRhXHQ6IGZhbHNlLFxyXG5cdFx0XHRpbml0X3hcdDogMCxcclxuXHRcdFx0aW5pdF95XHQ6IDAsXHJcblx0XHRcdHNjcm9sbF9sOiAwLFxyXG5cdFx0XHRzY3JvbGxfdDogMCxcclxuXHRcdFx0c2Nyb2xsX2U6IGZhbHNlLFxyXG5cdFx0XHRzY3JvbGxfaTogZmFsc2VcclxuXHRcdH07XHJcblx0XHQkLnZha2F0YS5kbmQgPSB7XHJcblx0XHRcdHNldHRpbmdzIDoge1xyXG5cdFx0XHRcdHNjcm9sbF9zcGVlZFx0XHQ6IDEwLFxyXG5cdFx0XHRcdHNjcm9sbF9wcm94aW1pdHlcdDogMjAsXHJcblx0XHRcdFx0aGVscGVyX2xlZnRcdFx0XHQ6IDUsXHJcblx0XHRcdFx0aGVscGVyX3RvcFx0XHRcdDogMTAsXHJcblx0XHRcdFx0dGhyZXNob2xkXHRcdFx0OiA1XHJcblx0XHRcdH0sXHJcblx0XHRcdF90cmlnZ2VyIDogZnVuY3Rpb24gKGV2ZW50X25hbWUsIGUpIHtcclxuXHRcdFx0XHR2YXIgZGF0YSA9ICQudmFrYXRhLmRuZC5fZ2V0KCk7XHJcblx0XHRcdFx0ZGF0YS5ldmVudCA9IGU7XHJcblx0XHRcdFx0JChkb2N1bWVudCkudHJpZ2dlckhhbmRsZXIoXCJkbmRfXCIgKyBldmVudF9uYW1lICsgXCIudmFrYXRhXCIsIGRhdGEpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRfZ2V0IDogZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRcImRhdGFcIlx0XHQ6IHZha2F0YV9kbmQuZGF0YSxcclxuXHRcdFx0XHRcdFwiZWxlbWVudFwiXHQ6IHZha2F0YV9kbmQuZWxlbWVudCxcclxuXHRcdFx0XHRcdFwiaGVscGVyXCJcdDogdmFrYXRhX2RuZC5oZWxwZXJcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRfY2xlYW4gOiBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0aWYodmFrYXRhX2RuZC5oZWxwZXIpIHsgdmFrYXRhX2RuZC5oZWxwZXIucmVtb3ZlKCk7IH1cclxuXHRcdFx0XHRpZih2YWthdGFfZG5kLnNjcm9sbF9pKSB7IGNsZWFySW50ZXJ2YWwodmFrYXRhX2RuZC5zY3JvbGxfaSk7IHZha2F0YV9kbmQuc2Nyb2xsX2kgPSBmYWxzZTsgfVxyXG5cdFx0XHRcdHZha2F0YV9kbmQgPSB7XHJcblx0XHRcdFx0XHRlbGVtZW50XHQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0aXNfZG93blx0OiBmYWxzZSxcclxuXHRcdFx0XHRcdGlzX2RyYWdcdDogZmFsc2UsXHJcblx0XHRcdFx0XHRoZWxwZXJcdDogZmFsc2UsXHJcblx0XHRcdFx0XHRoZWxwZXJfdzogMCxcclxuXHRcdFx0XHRcdGRhdGFcdDogZmFsc2UsXHJcblx0XHRcdFx0XHRpbml0X3hcdDogMCxcclxuXHRcdFx0XHRcdGluaXRfeVx0OiAwLFxyXG5cdFx0XHRcdFx0c2Nyb2xsX2w6IDAsXHJcblx0XHRcdFx0XHRzY3JvbGxfdDogMCxcclxuXHRcdFx0XHRcdHNjcm9sbF9lOiBmYWxzZSxcclxuXHRcdFx0XHRcdHNjcm9sbF9pOiBmYWxzZVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0JChkb2N1bWVudCkub2ZmKFwibW91c2Vtb3ZlIHRvdWNobW92ZVwiLCAkLnZha2F0YS5kbmQuZHJhZyk7XHJcblx0XHRcdFx0JChkb2N1bWVudCkub2ZmKFwibW91c2V1cCB0b3VjaGVuZFwiLCAkLnZha2F0YS5kbmQuc3RvcCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdF9zY3JvbGwgOiBmdW5jdGlvbiAoaW5pdF9vbmx5KSB7XHJcblx0XHRcdFx0aWYoIXZha2F0YV9kbmQuc2Nyb2xsX2UgfHwgKCF2YWthdGFfZG5kLnNjcm9sbF9sICYmICF2YWthdGFfZG5kLnNjcm9sbF90KSkge1xyXG5cdFx0XHRcdFx0aWYodmFrYXRhX2RuZC5zY3JvbGxfaSkgeyBjbGVhckludGVydmFsKHZha2F0YV9kbmQuc2Nyb2xsX2kpOyB2YWthdGFfZG5kLnNjcm9sbF9pID0gZmFsc2U7IH1cclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoIXZha2F0YV9kbmQuc2Nyb2xsX2kpIHtcclxuXHRcdFx0XHRcdHZha2F0YV9kbmQuc2Nyb2xsX2kgPSBzZXRJbnRlcnZhbCgkLnZha2F0YS5kbmQuX3Njcm9sbCwgMTAwKTtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoaW5pdF9vbmx5ID09PSB0cnVlKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cclxuXHRcdFx0XHR2YXIgaSA9IHZha2F0YV9kbmQuc2Nyb2xsX2Uuc2Nyb2xsVG9wKCksXHJcblx0XHRcdFx0XHRqID0gdmFrYXRhX2RuZC5zY3JvbGxfZS5zY3JvbGxMZWZ0KCk7XHJcblx0XHRcdFx0dmFrYXRhX2RuZC5zY3JvbGxfZS5zY3JvbGxUb3AoaSArIHZha2F0YV9kbmQuc2Nyb2xsX3QgKiAkLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3NwZWVkKTtcclxuXHRcdFx0XHR2YWthdGFfZG5kLnNjcm9sbF9lLnNjcm9sbExlZnQoaiArIHZha2F0YV9kbmQuc2Nyb2xsX2wgKiAkLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3NwZWVkKTtcclxuXHRcdFx0XHRpZihpICE9PSB2YWthdGFfZG5kLnNjcm9sbF9lLnNjcm9sbFRvcCgpIHx8IGogIT09IHZha2F0YV9kbmQuc2Nyb2xsX2Uuc2Nyb2xsTGVmdCgpKSB7XHJcblx0XHRcdFx0XHQvKipcclxuXHRcdFx0XHRcdCAqIHRyaWdnZXJlZCBvbiB0aGUgZG9jdW1lbnQgd2hlbiBhIGRyYWcgY2F1c2VzIGFuIGVsZW1lbnQgdG8gc2Nyb2xsXHJcblx0XHRcdFx0XHQgKiBAZXZlbnRcclxuXHRcdFx0XHRcdCAqIEBwbHVnaW4gZG5kXHJcblx0XHRcdFx0XHQgKiBAbmFtZSBkbmRfc2Nyb2xsLnZha2F0YVxyXG5cdFx0XHRcdFx0ICogQHBhcmFtIHtNaXhlZH0gZGF0YSBhbnkgZGF0YSBzdXBwbGllZCB3aXRoIHRoZSBjYWxsIHRvICQudmFrYXRhLmRuZC5zdGFydFxyXG5cdFx0XHRcdFx0ICogQHBhcmFtIHtET019IGVsZW1lbnQgdGhlIERPTSBlbGVtZW50IGJlaW5nIGRyYWdnZWRcclxuXHRcdFx0XHRcdCAqIEBwYXJhbSB7alF1ZXJ5fSBoZWxwZXIgdGhlIGhlbHBlciBzaG93biBuZXh0IHRvIHRoZSBtb3VzZVxyXG5cdFx0XHRcdFx0ICogQHBhcmFtIHtqUXVlcnl9IGV2ZW50IHRoZSBlbGVtZW50IHRoYXQgaXMgc2Nyb2xsaW5nXHJcblx0XHRcdFx0XHQgKi9cclxuXHRcdFx0XHRcdCQudmFrYXRhLmRuZC5fdHJpZ2dlcihcInNjcm9sbFwiLCB2YWthdGFfZG5kLnNjcm9sbF9lKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHN0YXJ0IDogZnVuY3Rpb24gKGUsIGRhdGEsIGh0bWwpIHtcclxuXHRcdFx0XHRpZihlLnR5cGUgPT09IFwidG91Y2hzdGFydFwiICYmIGUub3JpZ2luYWxFdmVudCAmJiBlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXMgJiYgZS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdKSB7XHJcblx0XHRcdFx0XHRlLnBhZ2VYID0gZS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYO1xyXG5cdFx0XHRcdFx0ZS5wYWdlWSA9IGUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWTtcclxuXHRcdFx0XHRcdGUudGFyZ2V0ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVggLSB3aW5kb3cucGFnZVhPZmZzZXQsIGUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWSAtIHdpbmRvdy5wYWdlWU9mZnNldCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKHZha2F0YV9kbmQuaXNfZHJhZykgeyAkLnZha2F0YS5kbmQuc3RvcCh7fSk7IH1cclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0ZS5jdXJyZW50VGFyZ2V0LnVuc2VsZWN0YWJsZSA9IFwib25cIjtcclxuXHRcdFx0XHRcdGUuY3VycmVudFRhcmdldC5vbnNlbGVjdHN0YXJ0ID0gZnVuY3Rpb24oKSB7IHJldHVybiBmYWxzZTsgfTtcclxuXHRcdFx0XHRcdGlmKGUuY3VycmVudFRhcmdldC5zdHlsZSkgeyBlLmN1cnJlbnRUYXJnZXQuc3R5bGUuTW96VXNlclNlbGVjdCA9IFwibm9uZVwiOyB9XHJcblx0XHRcdFx0fSBjYXRjaChpZ25vcmUpIHsgfVxyXG5cdFx0XHRcdHZha2F0YV9kbmQuaW5pdF94XHQ9IGUucGFnZVg7XHJcblx0XHRcdFx0dmFrYXRhX2RuZC5pbml0X3lcdD0gZS5wYWdlWTtcclxuXHRcdFx0XHR2YWthdGFfZG5kLmRhdGFcdFx0PSBkYXRhO1xyXG5cdFx0XHRcdHZha2F0YV9kbmQuaXNfZG93blx0PSB0cnVlO1xyXG5cdFx0XHRcdHZha2F0YV9kbmQuZWxlbWVudFx0PSBlLmN1cnJlbnRUYXJnZXQ7XHJcblx0XHRcdFx0aWYoaHRtbCAhPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdHZha2F0YV9kbmQuaGVscGVyID0gJChcIjxkaXYgaWQ9J3Zha2F0YS1kbmQnPjwvZGl2PlwiKS5odG1sKGh0bWwpLmNzcyh7XHJcblx0XHRcdFx0XHRcdFwiZGlzcGxheVwiXHRcdDogXCJibG9ja1wiLFxyXG5cdFx0XHRcdFx0XHRcIm1hcmdpblwiXHRcdDogXCIwXCIsXHJcblx0XHRcdFx0XHRcdFwicGFkZGluZ1wiXHRcdDogXCIwXCIsXHJcblx0XHRcdFx0XHRcdFwicG9zaXRpb25cIlx0XHQ6IFwiYWJzb2x1dGVcIixcclxuXHRcdFx0XHRcdFx0XCJ0b3BcIlx0XHRcdDogXCItMjAwMHB4XCIsXHJcblx0XHRcdFx0XHRcdFwibGluZUhlaWdodFwiXHQ6IFwiMTZweFwiLFxyXG5cdFx0XHRcdFx0XHRcInpJbmRleFwiXHRcdDogXCIxMDAwMFwiXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0JChkb2N1bWVudCkuYmluZChcIm1vdXNlbW92ZSB0b3VjaG1vdmVcIiwgJC52YWthdGEuZG5kLmRyYWcpO1xyXG5cdFx0XHRcdCQoZG9jdW1lbnQpLmJpbmQoXCJtb3VzZXVwIHRvdWNoZW5kXCIsICQudmFrYXRhLmRuZC5zdG9wKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH0sXHJcblx0XHRcdGRyYWcgOiBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdGlmKGUudHlwZSA9PT0gXCJ0b3VjaG1vdmVcIiAmJiBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzICYmIGUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXSkge1xyXG5cdFx0XHRcdFx0ZS5wYWdlWCA9IGUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWDtcclxuXHRcdFx0XHRcdGUucGFnZVkgPSBlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVk7XHJcblx0XHRcdFx0XHRlLnRhcmdldCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYIC0gd2luZG93LnBhZ2VYT2Zmc2V0LCBlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVkgLSB3aW5kb3cucGFnZVlPZmZzZXQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZighdmFrYXRhX2RuZC5pc19kb3duKSB7IHJldHVybjsgfVxyXG5cdFx0XHRcdGlmKCF2YWthdGFfZG5kLmlzX2RyYWcpIHtcclxuXHRcdFx0XHRcdGlmKFxyXG5cdFx0XHRcdFx0XHRNYXRoLmFicyhlLnBhZ2VYIC0gdmFrYXRhX2RuZC5pbml0X3gpID4gJC52YWthdGEuZG5kLnNldHRpbmdzLnRocmVzaG9sZCB8fFxyXG5cdFx0XHRcdFx0XHRNYXRoLmFicyhlLnBhZ2VZIC0gdmFrYXRhX2RuZC5pbml0X3kpID4gJC52YWthdGEuZG5kLnNldHRpbmdzLnRocmVzaG9sZFxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGlmKHZha2F0YV9kbmQuaGVscGVyKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFrYXRhX2RuZC5oZWxwZXIuYXBwZW5kVG8oXCJib2R5XCIpO1xyXG5cdFx0XHRcdFx0XHRcdHZha2F0YV9kbmQuaGVscGVyX3cgPSB2YWthdGFfZG5kLmhlbHBlci5vdXRlcldpZHRoKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0dmFrYXRhX2RuZC5pc19kcmFnID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0LyoqXHJcblx0XHRcdFx0XHRcdCAqIHRyaWdnZXJlZCBvbiB0aGUgZG9jdW1lbnQgd2hlbiBhIGRyYWcgc3RhcnRzXHJcblx0XHRcdFx0XHRcdCAqIEBldmVudFxyXG5cdFx0XHRcdFx0XHQgKiBAcGx1Z2luIGRuZFxyXG5cdFx0XHRcdFx0XHQgKiBAbmFtZSBkbmRfc3RhcnQudmFrYXRhXHJcblx0XHRcdFx0XHRcdCAqIEBwYXJhbSB7TWl4ZWR9IGRhdGEgYW55IGRhdGEgc3VwcGxpZWQgd2l0aCB0aGUgY2FsbCB0byAkLnZha2F0YS5kbmQuc3RhcnRcclxuXHRcdFx0XHRcdFx0ICogQHBhcmFtIHtET019IGVsZW1lbnQgdGhlIERPTSBlbGVtZW50IGJlaW5nIGRyYWdnZWRcclxuXHRcdFx0XHRcdFx0ICogQHBhcmFtIHtqUXVlcnl9IGhlbHBlciB0aGUgaGVscGVyIHNob3duIG5leHQgdG8gdGhlIG1vdXNlXHJcblx0XHRcdFx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCB0aGUgZXZlbnQgdGhhdCBjYXVzZWQgdGhlIHN0YXJ0IChwcm9iYWJseSBtb3VzZW1vdmUpXHJcblx0XHRcdFx0XHRcdCAqL1xyXG5cdFx0XHRcdFx0XHQkLnZha2F0YS5kbmQuX3RyaWdnZXIoXCJzdGFydFwiLCBlKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2UgeyByZXR1cm47IH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHZhciBkICA9IGZhbHNlLCB3ICA9IGZhbHNlLFxyXG5cdFx0XHRcdFx0ZGggPSBmYWxzZSwgd2ggPSBmYWxzZSxcclxuXHRcdFx0XHRcdGR3ID0gZmFsc2UsIHd3ID0gZmFsc2UsXHJcblx0XHRcdFx0XHRkdCA9IGZhbHNlLCBkbCA9IGZhbHNlLFxyXG5cdFx0XHRcdFx0aHQgPSBmYWxzZSwgaGwgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0dmFrYXRhX2RuZC5zY3JvbGxfdCA9IDA7XHJcblx0XHRcdFx0dmFrYXRhX2RuZC5zY3JvbGxfbCA9IDA7XHJcblx0XHRcdFx0dmFrYXRhX2RuZC5zY3JvbGxfZSA9IGZhbHNlO1xyXG5cdFx0XHRcdCQoZS50YXJnZXQpXHJcblx0XHRcdFx0XHQucGFyZW50c1VudGlsKFwiYm9keVwiKS5hZGRCYWNrKCkudmFrYXRhX3JldmVyc2UoKVxyXG5cdFx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRcdHJldHVyblx0KC9eYXV0b3xzY3JvbGwkLykudGVzdCgkKHRoaXMpLmNzcyhcIm92ZXJmbG93XCIpKSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0KHRoaXMuc2Nyb2xsSGVpZ2h0ID4gdGhpcy5vZmZzZXRIZWlnaHQgfHwgdGhpcy5zY3JvbGxXaWR0aCA+IHRoaXMub2Zmc2V0V2lkdGgpO1xyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdC5lYWNoKGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdFx0dmFyIHQgPSAkKHRoaXMpLCBvID0gdC5vZmZzZXQoKTtcclxuXHRcdFx0XHRcdFx0aWYodGhpcy5zY3JvbGxIZWlnaHQgPiB0aGlzLm9mZnNldEhlaWdodCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmKG8udG9wICsgdC5oZWlnaHQoKSAtIGUucGFnZVkgPCAkLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3Byb3hpbWl0eSlcdHsgdmFrYXRhX2RuZC5zY3JvbGxfdCA9IDE7IH1cclxuXHRcdFx0XHRcdFx0XHRpZihlLnBhZ2VZIC0gby50b3AgPCAkLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3Byb3hpbWl0eSlcdFx0XHRcdHsgdmFrYXRhX2RuZC5zY3JvbGxfdCA9IC0xOyB9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYodGhpcy5zY3JvbGxXaWR0aCA+IHRoaXMub2Zmc2V0V2lkdGgpIHtcclxuXHRcdFx0XHRcdFx0XHRpZihvLmxlZnQgKyB0LndpZHRoKCkgLSBlLnBhZ2VYIDwgJC52YWthdGEuZG5kLnNldHRpbmdzLnNjcm9sbF9wcm94aW1pdHkpXHR7IHZha2F0YV9kbmQuc2Nyb2xsX2wgPSAxOyB9XHJcblx0XHRcdFx0XHRcdFx0aWYoZS5wYWdlWCAtIG8ubGVmdCA8ICQudmFrYXRhLmRuZC5zZXR0aW5ncy5zY3JvbGxfcHJveGltaXR5KVx0XHRcdFx0eyB2YWthdGFfZG5kLnNjcm9sbF9sID0gLTE7IH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZih2YWthdGFfZG5kLnNjcm9sbF90IHx8IHZha2F0YV9kbmQuc2Nyb2xsX2wpIHtcclxuXHRcdFx0XHRcdFx0XHR2YWthdGFfZG5kLnNjcm9sbF9lID0gJCh0aGlzKTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRpZighdmFrYXRhX2RuZC5zY3JvbGxfZSkge1xyXG5cdFx0XHRcdFx0ZCAgPSAkKGRvY3VtZW50KTsgdyA9ICQod2luZG93KTtcclxuXHRcdFx0XHRcdGRoID0gZC5oZWlnaHQoKTsgd2ggPSB3LmhlaWdodCgpO1xyXG5cdFx0XHRcdFx0ZHcgPSBkLndpZHRoKCk7IHd3ID0gdy53aWR0aCgpO1xyXG5cdFx0XHRcdFx0ZHQgPSBkLnNjcm9sbFRvcCgpOyBkbCA9IGQuc2Nyb2xsTGVmdCgpO1xyXG5cdFx0XHRcdFx0aWYoZGggPiB3aCAmJiBlLnBhZ2VZIC0gZHQgPCAkLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3Byb3hpbWl0eSlcdFx0eyB2YWthdGFfZG5kLnNjcm9sbF90ID0gLTE7ICB9XHJcblx0XHRcdFx0XHRpZihkaCA+IHdoICYmIHdoIC0gKGUucGFnZVkgLSBkdCkgPCAkLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3Byb3hpbWl0eSlcdHsgdmFrYXRhX2RuZC5zY3JvbGxfdCA9IDE7IH1cclxuXHRcdFx0XHRcdGlmKGR3ID4gd3cgJiYgZS5wYWdlWCAtIGRsIDwgJC52YWthdGEuZG5kLnNldHRpbmdzLnNjcm9sbF9wcm94aW1pdHkpXHRcdHsgdmFrYXRhX2RuZC5zY3JvbGxfbCA9IC0xOyB9XHJcblx0XHRcdFx0XHRpZihkdyA+IHd3ICYmIHd3IC0gKGUucGFnZVggLSBkbCkgPCAkLnZha2F0YS5kbmQuc2V0dGluZ3Muc2Nyb2xsX3Byb3hpbWl0eSlcdHsgdmFrYXRhX2RuZC5zY3JvbGxfbCA9IDE7IH1cclxuXHRcdFx0XHRcdGlmKHZha2F0YV9kbmQuc2Nyb2xsX3QgfHwgdmFrYXRhX2RuZC5zY3JvbGxfbCkge1xyXG5cdFx0XHRcdFx0XHR2YWthdGFfZG5kLnNjcm9sbF9lID0gZDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYodmFrYXRhX2RuZC5zY3JvbGxfZSkgeyAkLnZha2F0YS5kbmQuX3Njcm9sbCh0cnVlKTsgfVxyXG5cclxuXHRcdFx0XHRpZih2YWthdGFfZG5kLmhlbHBlcikge1xyXG5cdFx0XHRcdFx0aHQgPSBwYXJzZUludChlLnBhZ2VZICsgJC52YWthdGEuZG5kLnNldHRpbmdzLmhlbHBlcl90b3AsIDEwKTtcclxuXHRcdFx0XHRcdGhsID0gcGFyc2VJbnQoZS5wYWdlWCArICQudmFrYXRhLmRuZC5zZXR0aW5ncy5oZWxwZXJfbGVmdCwgMTApO1xyXG5cdFx0XHRcdFx0aWYoZGggJiYgaHQgKyAyNSA+IGRoKSB7IGh0ID0gZGggLSA1MDsgfVxyXG5cdFx0XHRcdFx0aWYoZHcgJiYgaGwgKyB2YWthdGFfZG5kLmhlbHBlcl93ID4gZHcpIHsgaGwgPSBkdyAtICh2YWthdGFfZG5kLmhlbHBlcl93ICsgMik7IH1cclxuXHRcdFx0XHRcdHZha2F0YV9kbmQuaGVscGVyLmNzcyh7XHJcblx0XHRcdFx0XHRcdGxlZnRcdDogaGwgKyBcInB4XCIsXHJcblx0XHRcdFx0XHRcdHRvcFx0XHQ6IGh0ICsgXCJweFwiXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0LyoqXHJcblx0XHRcdFx0ICogdHJpZ2dlcmVkIG9uIHRoZSBkb2N1bWVudCB3aGVuIGEgZHJhZyBpcyBpbiBwcm9ncmVzc1xyXG5cdFx0XHRcdCAqIEBldmVudFxyXG5cdFx0XHRcdCAqIEBwbHVnaW4gZG5kXHJcblx0XHRcdFx0ICogQG5hbWUgZG5kX21vdmUudmFrYXRhXHJcblx0XHRcdFx0ICogQHBhcmFtIHtNaXhlZH0gZGF0YSBhbnkgZGF0YSBzdXBwbGllZCB3aXRoIHRoZSBjYWxsIHRvICQudmFrYXRhLmRuZC5zdGFydFxyXG5cdFx0XHRcdCAqIEBwYXJhbSB7RE9NfSBlbGVtZW50IHRoZSBET00gZWxlbWVudCBiZWluZyBkcmFnZ2VkXHJcblx0XHRcdFx0ICogQHBhcmFtIHtqUXVlcnl9IGhlbHBlciB0aGUgaGVscGVyIHNob3duIG5leHQgdG8gdGhlIG1vdXNlXHJcblx0XHRcdFx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IHRoZSBldmVudCB0aGF0IGNhdXNlZCB0aGlzIHRvIHRyaWdnZXIgKG1vc3QgbGlrZWx5IG1vdXNlbW92ZSlcclxuXHRcdFx0XHQgKi9cclxuXHRcdFx0XHQkLnZha2F0YS5kbmQuX3RyaWdnZXIoXCJtb3ZlXCIsIGUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRzdG9wIDogZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHRpZihlLnR5cGUgPT09IFwidG91Y2hlbmRcIiAmJiBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzICYmIGUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXSkge1xyXG5cdFx0XHRcdFx0ZS5wYWdlWCA9IGUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWDtcclxuXHRcdFx0XHRcdGUucGFnZVkgPSBlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVk7XHJcblx0XHRcdFx0XHRlLnRhcmdldCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYIC0gd2luZG93LnBhZ2VYT2Zmc2V0LCBlLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVkgLSB3aW5kb3cucGFnZVlPZmZzZXQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZih2YWthdGFfZG5kLmlzX2RyYWcpIHtcclxuXHRcdFx0XHRcdC8qKlxyXG5cdFx0XHRcdFx0ICogdHJpZ2dlcmVkIG9uIHRoZSBkb2N1bWVudCB3aGVuIGEgZHJhZyBzdG9wcyAodGhlIGRyYWdnZWQgZWxlbWVudCBpcyBkcm9wcGVkKVxyXG5cdFx0XHRcdFx0ICogQGV2ZW50XHJcblx0XHRcdFx0XHQgKiBAcGx1Z2luIGRuZFxyXG5cdFx0XHRcdFx0ICogQG5hbWUgZG5kX3N0b3AudmFrYXRhXHJcblx0XHRcdFx0XHQgKiBAcGFyYW0ge01peGVkfSBkYXRhIGFueSBkYXRhIHN1cHBsaWVkIHdpdGggdGhlIGNhbGwgdG8gJC52YWthdGEuZG5kLnN0YXJ0XHJcblx0XHRcdFx0XHQgKiBAcGFyYW0ge0RPTX0gZWxlbWVudCB0aGUgRE9NIGVsZW1lbnQgYmVpbmcgZHJhZ2dlZFxyXG5cdFx0XHRcdFx0ICogQHBhcmFtIHtqUXVlcnl9IGhlbHBlciB0aGUgaGVscGVyIHNob3duIG5leHQgdG8gdGhlIG1vdXNlXHJcblx0XHRcdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQgdGhlIGV2ZW50IHRoYXQgY2F1c2VkIHRoZSBzdG9wXHJcblx0XHRcdFx0XHQgKi9cclxuXHRcdFx0XHRcdCQudmFrYXRhLmRuZC5fdHJpZ2dlcihcInN0b3BcIiwgZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCQudmFrYXRhLmRuZC5fY2xlYW4oKTtcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHR9KGpRdWVyeSkpO1xyXG5cclxuXHQvLyBpbmNsdWRlIHRoZSBkbmQgcGx1Z2luIGJ5IGRlZmF1bHRcclxuXHQvLyAkLmpzdHJlZS5kZWZhdWx0cy5wbHVnaW5zLnB1c2goXCJkbmRcIik7XHJcblxyXG5cclxuLyoqXHJcbiAqICMjIyBTZWFyY2ggcGx1Z2luXHJcbiAqXHJcbiAqIEFkZHMgc2VhcmNoIGZ1bmN0aW9uYWxpdHkgdG8ganNUcmVlLlxyXG4gKi9cclxuXHJcblx0LyoqXHJcblx0ICogc3RvcmVzIGFsbCBkZWZhdWx0cyBmb3IgdGhlIHNlYXJjaCBwbHVnaW5cclxuXHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5zZWFyY2hcclxuXHQgKiBAcGx1Z2luIHNlYXJjaFxyXG5cdCAqL1xyXG5cdCQuanN0cmVlLmRlZmF1bHRzLnNlYXJjaCA9IHtcclxuXHRcdC8qKlxyXG5cdFx0ICogYSBqUXVlcnktbGlrZSBBSkFYIGNvbmZpZywgd2hpY2gganN0cmVlIHVzZXMgaWYgYSBzZXJ2ZXIgc2hvdWxkIGJlIHF1ZXJpZWQgZm9yIHJlc3VsdHMuIFxyXG5cdFx0ICogXHJcblx0XHQgKiBBIGBzdHJgICh3aGljaCBpcyB0aGUgc2VhcmNoIHN0cmluZykgcGFyYW1ldGVyIHdpbGwgYmUgYWRkZWQgd2l0aCB0aGUgcmVxdWVzdC4gVGhlIGV4cGVjdGVkIHJlc3VsdCBpcyBhIEpTT04gYXJyYXkgd2l0aCBub2RlcyB0aGF0IG5lZWQgdG8gYmUgb3BlbmVkIHNvIHRoYXQgbWF0Y2hpbmcgbm9kZXMgd2lsbCBiZSByZXZlYWxlZC5cclxuXHRcdCAqIExlYXZlIHRoaXMgc2V0dGluZyBhcyBgZmFsc2VgIHRvIG5vdCBxdWVyeSB0aGUgc2VydmVyLlxyXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuc2VhcmNoLmFqYXhcclxuXHRcdCAqIEBwbHVnaW4gc2VhcmNoXHJcblx0XHQgKi9cclxuXHRcdGFqYXggOiBmYWxzZSxcclxuXHRcdC8qKlxyXG5cdFx0ICogSW5kaWNhdGVzIGlmIHRoZSBzZWFyY2ggc2hvdWxkIGJlIGZ1enp5IG9yIG5vdCAoc2hvdWxkIGBjaG5kM2AgbWF0Y2ggYGNoaWxkIG5vZGUgM2ApLiBEZWZhdWx0IGlzIGB0cnVlYC5cclxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLnNlYXJjaC5mdXp6eVxyXG5cdFx0ICogQHBsdWdpbiBzZWFyY2hcclxuXHRcdCAqL1xyXG5cdFx0ZnV6enkgOiB0cnVlLFxyXG5cdFx0LyoqXHJcblx0XHQgKiBJbmRpY2F0ZXMgaWYgdGhlIHNlYXJjaCBzaG91bGQgYmUgY2FzZSBzZW5zaXRpdmUuIERlZmF1bHQgaXMgYGZhbHNlYC5cclxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLnNlYXJjaC5jYXNlX3NlbnNpdGl2ZVxyXG5cdFx0ICogQHBsdWdpbiBzZWFyY2hcclxuXHRcdCAqL1xyXG5cdFx0Y2FzZV9zZW5zaXRpdmUgOiBmYWxzZSxcclxuXHRcdC8qKlxyXG5cdFx0ICogSW5kaWNhdGVzIGlmIHRoZSB0cmVlIHNob3VsZCBiZSBmaWx0ZXJlZCB0byBzaG93IG9ubHkgbWF0Y2hpbmcgbm9kZXMgKGtlZXAgaW4gbWluZCB0aGlzIGNhbiBiZSBhIGhlYXZ5IG9uIGxhcmdlIHRyZWVzIGluIG9sZCBicm93c2VycykuIERlZmF1bHQgaXMgYGZhbHNlYC5cclxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLnNlYXJjaC5zaG93X29ubHlfbWF0Y2hlc1xyXG5cdFx0ICogQHBsdWdpbiBzZWFyY2hcclxuXHRcdCAqL1xyXG5cdFx0c2hvd19vbmx5X21hdGNoZXMgOiBmYWxzZSxcclxuXHRcdC8qKlxyXG5cdFx0ICogSW5kaWNhdGVzIGlmIGFsbCBub2RlcyBvcGVuZWQgdG8gcmV2ZWFsIHRoZSBzZWFyY2ggcmVzdWx0LCBzaG91bGQgYmUgY2xvc2VkIHdoZW4gdGhlIHNlYXJjaCBpcyBjbGVhcmVkIG9yIGEgbmV3IHNlYXJjaCBpcyBwZXJmb3JtZWQuIERlZmF1bHQgaXMgYHRydWVgLlxyXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuc2VhcmNoLmNsb3NlX29wZW5lZF9vbmNsZWFyXHJcblx0XHQgKiBAcGx1Z2luIHNlYXJjaFxyXG5cdFx0ICovXHJcblx0XHRjbG9zZV9vcGVuZWRfb25jbGVhciA6IHRydWVcclxuXHR9O1xyXG5cclxuXHQkLmpzdHJlZS5wbHVnaW5zLnNlYXJjaCA9IGZ1bmN0aW9uIChvcHRpb25zLCBwYXJlbnQpIHtcclxuXHRcdHRoaXMuYmluZCA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0cGFyZW50LmJpbmQuY2FsbCh0aGlzKTtcclxuXHJcblx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLnN0ciA9IFwiXCI7XHJcblx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLmRvbSA9ICQoKTtcclxuXHRcdFx0dGhpcy5fZGF0YS5zZWFyY2gucmVzID0gW107XHJcblx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLm9wbiA9IFtdO1xyXG5cdFx0XHR0aGlzLl9kYXRhLnNlYXJjaC5zbG4gPSBudWxsO1xyXG5cclxuXHRcdFx0aWYodGhpcy5zZXR0aW5ncy5zZWFyY2guc2hvd19vbmx5X21hdGNoZXMpIHtcclxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcclxuXHRcdFx0XHRcdC5vbihcInNlYXJjaC5qc3RyZWVcIiwgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuXHRcdFx0XHRcdFx0aWYoZGF0YS5ub2Rlcy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHQkKHRoaXMpLmZpbmQoXCJsaVwiKS5oaWRlKCkuZmlsdGVyKCcuanN0cmVlLWxhc3QnKS5maWx0ZXIoZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLm5leHRTaWJsaW5nOyB9KS5yZW1vdmVDbGFzcygnanN0cmVlLWxhc3QnKTtcclxuXHRcdFx0XHRcdFx0XHRkYXRhLm5vZGVzLnBhcmVudHNVbnRpbChcIi5qc3RyZWVcIikuYWRkQmFjaygpLnNob3coKVxyXG5cdFx0XHRcdFx0XHRcdFx0LmZpbHRlcihcInVsXCIpLmVhY2goZnVuY3Rpb24gKCkgeyAkKHRoaXMpLmNoaWxkcmVuKFwibGk6dmlzaWJsZVwiKS5lcSgtMSkuYWRkQ2xhc3MoXCJqc3RyZWUtbGFzdFwiKTsgfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHQub24oXCJjbGVhcl9zZWFyY2guanN0cmVlXCIsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcblx0XHRcdFx0XHRcdGlmKGRhdGEubm9kZXMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0JCh0aGlzKS5maW5kKFwibGlcIikuY3NzKFwiZGlzcGxheVwiLFwiXCIpLmZpbHRlcignLmpzdHJlZS1sYXN0JykuZmlsdGVyKGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5uZXh0U2libGluZzsgfSkucmVtb3ZlQ2xhc3MoJ2pzdHJlZS1sYXN0Jyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdFx0LyoqXHJcblx0XHQgKiB1c2VkIHRvIHNlYXJjaCB0aGUgdHJlZSBub2RlcyBmb3IgYSBnaXZlbiBzdHJpbmdcclxuXHRcdCAqIEBuYW1lIHNlYXJjaChzdHIgWywgc2tpcF9hc3luY10pXHJcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gc3RyIHRoZSBzZWFyY2ggc3RyaW5nXHJcblx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IHNraXBfYXN5bmMgaWYgc2V0IHRvIHRydWUgc2VydmVyIHdpbGwgbm90IGJlIHF1ZXJpZWQgZXZlbiBpZiBjb25maWd1cmVkXHJcblx0XHQgKiBAcGx1Z2luIHNlYXJjaFxyXG5cdFx0ICogQHRyaWdnZXIgc2VhcmNoLmpzdHJlZVxyXG5cdFx0ICovXHJcblx0XHR0aGlzLnNlYXJjaCA9IGZ1bmN0aW9uIChzdHIsIHNraXBfYXN5bmMpIHtcclxuXHRcdFx0aWYoc3RyID09PSBmYWxzZSB8fCAkLnRyaW0oc3RyKSA9PT0gXCJcIikge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNsZWFyX3NlYXJjaCgpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBzID0gdGhpcy5zZXR0aW5ncy5zZWFyY2gsXHJcblx0XHRcdFx0YSA9IHMuYWpheCA/ICQuZXh0ZW5kKHt9LCBzLmFqYXgpIDogZmFsc2UsXHJcblx0XHRcdFx0ZiA9IG51bGwsXHJcblx0XHRcdFx0ciA9IFtdLFxyXG5cdFx0XHRcdHAgPSBbXSwgaSwgajtcclxuXHRcdFx0aWYodGhpcy5fZGF0YS5zZWFyY2gucmVzLmxlbmd0aCkge1xyXG5cdFx0XHRcdHRoaXMuY2xlYXJfc2VhcmNoKCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoIXNraXBfYXN5bmMgJiYgYSAhPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRpZighYS5kYXRhKSB7IGEuZGF0YSA9IHt9OyB9XHJcblx0XHRcdFx0YS5kYXRhLnN0ciA9IHN0cjtcclxuXHRcdFx0XHRyZXR1cm4gJC5hamF4KGEpXHJcblx0XHRcdFx0XHQuZmFpbCgkLnByb3h5KGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5fZGF0YS5jb3JlLmxhc3RfZXJyb3IgPSB7ICdlcnJvcicgOiAnYWpheCcsICdwbHVnaW4nIDogJ3NlYXJjaCcsICdpZCcgOiAnc2VhcmNoXzAxJywgJ3JlYXNvbicgOiAnQ291bGQgbm90IGxvYWQgc2VhcmNoIHBhcmVudHMnLCAnZGF0YScgOiBKU09OLnN0cmluZ2lmeShhKSB9O1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldHRpbmdzLmNvcmUuZXJyb3IuY2FsbCh0aGlzLCB0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvcik7XHJcblx0XHRcdFx0XHR9LCB0aGlzKSlcclxuXHRcdFx0XHRcdC5kb25lKCQucHJveHkoZnVuY3Rpb24gKGQpIHtcclxuXHRcdFx0XHRcdFx0aWYoZCAmJiBkLmQpIHsgZCA9IGQuZDsgfVxyXG5cdFx0XHRcdFx0XHR0aGlzLl9kYXRhLnNlYXJjaC5zbG4gPSAhJC5pc0FycmF5KGQpID8gW10gOiBkO1xyXG5cdFx0XHRcdFx0XHR0aGlzLl9zZWFyY2hfbG9hZChzdHIpO1xyXG5cdFx0XHRcdFx0fSwgdGhpcykpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLnN0ciA9IHN0cjtcclxuXHRcdFx0dGhpcy5fZGF0YS5zZWFyY2guZG9tID0gJCgpO1xyXG5cdFx0XHR0aGlzLl9kYXRhLnNlYXJjaC5yZXMgPSBbXTtcclxuXHRcdFx0dGhpcy5fZGF0YS5zZWFyY2gub3BuID0gW107XHJcblxyXG5cdFx0XHRmID0gbmV3ICQudmFrYXRhLnNlYXJjaChzdHIsIHRydWUsIHsgY2FzZVNlbnNpdGl2ZSA6IHMuY2FzZV9zZW5zaXRpdmUsIGZ1enp5IDogcy5mdXp6eSB9KTtcclxuXHJcblx0XHRcdCQuZWFjaCh0aGlzLl9tb2RlbC5kYXRhLCBmdW5jdGlvbiAoaSwgdikge1xyXG5cdFx0XHRcdGlmKHYudGV4dCAmJiBmLnNlYXJjaCh2LnRleHQpLmlzTWF0Y2gpIHtcclxuXHRcdFx0XHRcdHIucHVzaChpKTtcclxuXHRcdFx0XHRcdHAgPSBwLmNvbmNhdCh2LnBhcmVudHMpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdGlmKHIubGVuZ3RoKSB7XHJcblx0XHRcdFx0cCA9ICQudmFrYXRhLmFycmF5X3VuaXF1ZShwKTtcclxuXHRcdFx0XHR0aGlzLl9zZWFyY2hfb3BlbihwKTtcclxuXHRcdFx0XHRmb3IoaSA9IDAsIGogPSByLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdFx0ZiA9IHRoaXMuZ2V0X25vZGUocltpXSwgdHJ1ZSk7XHJcblx0XHRcdFx0XHRpZihmKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLmRvbSA9IHRoaXMuX2RhdGEuc2VhcmNoLmRvbS5hZGQoZik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLnJlcyA9IHI7XHJcblx0XHRcdFx0dGhpcy5fZGF0YS5zZWFyY2guZG9tLmNoaWxkcmVuKFwiLmpzdHJlZS1hbmNob3JcIikuYWRkQ2xhc3MoJ2pzdHJlZS1zZWFyY2gnKTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogdHJpZ2dlcmVkIGFmdGVyIHNlYXJjaCBpcyBjb21wbGV0ZVxyXG5cdFx0XHQgKiBAZXZlbnRcclxuXHRcdFx0ICogQG5hbWUgc2VhcmNoLmpzdHJlZVxyXG5cdFx0XHQgKiBAcGFyYW0ge2pRdWVyeX0gbm9kZXMgYSBqUXVlcnkgY29sbGVjdGlvbiBvZiBtYXRjaGluZyBub2Rlc1xyXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ30gc3RyIHRoZSBzZWFyY2ggc3RyaW5nXHJcblx0XHRcdCAqIEBwYXJhbSB7QXJyYXl9IHJlcyBhIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyByZXByZXNlaW5nIHRoZSBtYXRjaGluZyBub2Rlc1xyXG5cdFx0XHQgKiBAcGx1Z2luIHNlYXJjaFxyXG5cdFx0XHQgKi9cclxuXHRcdFx0dGhpcy50cmlnZ2VyKCdzZWFyY2gnLCB7IG5vZGVzIDogdGhpcy5fZGF0YS5zZWFyY2guZG9tLCBzdHIgOiBzdHIsIHJlcyA6IHRoaXMuX2RhdGEuc2VhcmNoLnJlcyB9KTtcclxuXHRcdH07XHJcblx0XHQvKipcclxuXHRcdCAqIHVzZWQgdG8gY2xlYXIgdGhlIGxhc3Qgc2VhcmNoIChyZW1vdmVzIGNsYXNzZXMgYW5kIHNob3dzIGFsbCBub2RlcyBpZiBmaWx0ZXJpbmcgaXMgb24pXHJcblx0XHQgKiBAbmFtZSBjbGVhcl9zZWFyY2goKVxyXG5cdFx0ICogQHBsdWdpbiBzZWFyY2hcclxuXHRcdCAqIEB0cmlnZ2VyIGNsZWFyX3NlYXJjaC5qc3RyZWVcclxuXHRcdCAqL1xyXG5cdFx0dGhpcy5jbGVhcl9zZWFyY2ggPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLmRvbS5jaGlsZHJlbihcIi5qc3RyZWUtYW5jaG9yXCIpLnJlbW92ZUNsYXNzKFwianN0cmVlLXNlYXJjaFwiKTtcclxuXHRcdFx0aWYodGhpcy5zZXR0aW5ncy5zZWFyY2guY2xvc2Vfb3BlbmVkX29uY2xlYXIpIHtcclxuXHRcdFx0XHR0aGlzLmNsb3NlX25vZGUodGhpcy5fZGF0YS5zZWFyY2gub3BuLCAwKTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvKipcclxuXHRcdFx0ICogdHJpZ2dlcmVkIGFmdGVyIHNlYXJjaCBpcyBjb21wbGV0ZVxyXG5cdFx0XHQgKiBAZXZlbnRcclxuXHRcdFx0ICogQG5hbWUgY2xlYXJfc2VhcmNoLmpzdHJlZVxyXG5cdFx0XHQgKiBAcGFyYW0ge2pRdWVyeX0gbm9kZXMgYSBqUXVlcnkgY29sbGVjdGlvbiBvZiBtYXRjaGluZyBub2RlcyAodGhlIHJlc3VsdCBmcm9tIHRoZSBsYXN0IHNlYXJjaClcclxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc2VhcmNoIHN0cmluZyAodGhlIGxhc3Qgc2VhcmNoIHN0cmluZylcclxuXHRcdFx0ICogQHBhcmFtIHtBcnJheX0gcmVzIGEgY29sbGVjdGlvbiBvZiBvYmplY3RzIHJlcHJlc2VpbmcgdGhlIG1hdGNoaW5nIG5vZGVzICh0aGUgcmVzdWx0IGZyb20gdGhlIGxhc3Qgc2VhcmNoKVxyXG5cdFx0XHQgKiBAcGx1Z2luIHNlYXJjaFxyXG5cdFx0XHQgKi9cclxuXHRcdFx0dGhpcy50cmlnZ2VyKCdjbGVhcl9zZWFyY2gnLCB7ICdub2RlcycgOiB0aGlzLl9kYXRhLnNlYXJjaC5kb20sIHN0ciA6IHRoaXMuX2RhdGEuc2VhcmNoLnN0ciwgcmVzIDogdGhpcy5fZGF0YS5zZWFyY2gucmVzIH0pO1xyXG5cdFx0XHR0aGlzLl9kYXRhLnNlYXJjaC5zdHIgPSBcIlwiO1xyXG5cdFx0XHR0aGlzLl9kYXRhLnNlYXJjaC5yZXMgPSBbXTtcclxuXHRcdFx0dGhpcy5fZGF0YS5zZWFyY2gub3BuID0gW107XHJcblx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLmRvbSA9ICQoKTtcclxuXHRcdH07XHJcblx0XHQvKipcclxuXHRcdCAqIG9wZW5zIG5vZGVzIHRoYXQgbmVlZCB0byBiZSBvcGVuZWQgdG8gcmV2ZWFsIHRoZSBzZWFyY2ggcmVzdWx0cy4gVXNlZCBvbmx5IGludGVybmFsbHkuXHJcblx0XHQgKiBAcHJpdmF0ZVxyXG5cdFx0ICogQG5hbWUgX3NlYXJjaF9vcGVuKGQpXHJcblx0XHQgKiBAcGFyYW0ge0FycmF5fSBkIGFuIGFycmF5IG9mIG5vZGUgSURzXHJcblx0XHQgKiBAcGx1Z2luIHNlYXJjaFxyXG5cdFx0ICovXHJcblx0XHR0aGlzLl9zZWFyY2hfb3BlbiA9IGZ1bmN0aW9uIChkKSB7XHJcblx0XHRcdHZhciB0ID0gdGhpcztcclxuXHRcdFx0JC5lYWNoKGQuY29uY2F0KFtdKSwgZnVuY3Rpb24gKGksIHYpIHtcclxuXHRcdFx0XHR2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodik7XHJcblx0XHRcdFx0aWYodikge1xyXG5cdFx0XHRcdFx0aWYodC5pc19jbG9zZWQodikpIHtcclxuXHRcdFx0XHRcdFx0dC5fZGF0YS5zZWFyY2gub3BuLnB1c2godi5pZCk7XHJcblx0XHRcdFx0XHRcdHQub3Blbl9ub2RlKHYsIGZ1bmN0aW9uICgpIHsgdC5fc2VhcmNoX29wZW4oZCk7IH0sIDApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9O1xyXG5cdFx0LyoqXHJcblx0XHQgKiBsb2FkcyBub2RlcyB0aGF0IG5lZWQgdG8gYmUgb3BlbmVkIHRvIHJldmVhbCB0aGUgc2VhcmNoIHJlc3VsdHMuIFVzZWQgb25seSBpbnRlcm5hbGx5LlxyXG5cdFx0ICogQHByaXZhdGVcclxuXHRcdCAqIEBuYW1lIF9zZWFyY2hfbG9hZChkLCBzdHIpXHJcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gc3RyIHRoZSBzZWFyY2ggc3RyaW5nXHJcblx0XHQgKiBAcGx1Z2luIHNlYXJjaFxyXG5cdFx0ICovXHJcblx0XHR0aGlzLl9zZWFyY2hfbG9hZCA9IGZ1bmN0aW9uIChzdHIpIHtcclxuXHRcdFx0dmFyIHJlcyA9IHRydWUsXHJcblx0XHRcdFx0dCA9IHRoaXMsXHJcblx0XHRcdFx0bSA9IHQuX21vZGVsLmRhdGE7XHJcblx0XHRcdGlmKCQuaXNBcnJheSh0aGlzLl9kYXRhLnNlYXJjaC5zbG4pKSB7XHJcblx0XHRcdFx0aWYoIXRoaXMuX2RhdGEuc2VhcmNoLnNsbi5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdHRoaXMuX2RhdGEuc2VhcmNoLnNsbiA9IG51bGw7XHJcblx0XHRcdFx0XHR0aGlzLnNlYXJjaChzdHIsIHRydWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdCQuZWFjaCh0aGlzLl9kYXRhLnNlYXJjaC5zbG4sIGZ1bmN0aW9uIChpLCB2KSB7XHJcblx0XHRcdFx0XHRcdGlmKG1bdl0pIHtcclxuXHRcdFx0XHRcdFx0XHQkLnZha2F0YS5hcnJheV9yZW1vdmVfaXRlbSh0Ll9kYXRhLnNlYXJjaC5zbG4sIHYpO1xyXG5cdFx0XHRcdFx0XHRcdGlmKCFtW3ZdLnN0YXRlLmxvYWRlZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dC5sb2FkX25vZGUodiwgZnVuY3Rpb24gKG8sIHMpIHsgaWYocykgeyB0Ll9zZWFyY2hfbG9hZChzdHIpOyB9IH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0cmVzID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdGlmKHJlcykge1xyXG5cdFx0XHRcdFx0XHR0aGlzLl9kYXRhLnNlYXJjaC5zbG4gPSBbXTtcclxuXHRcdFx0XHRcdFx0dGhpcy5fc2VhcmNoX2xvYWQoc3RyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fTtcclxuXHJcblx0Ly8gaGVscGVyc1xyXG5cdChmdW5jdGlvbiAoJCkge1xyXG5cdFx0Ly8gZnJvbSBodHRwOi8va2lyby5tZS9wcm9qZWN0cy9mdXNlLmh0bWxcclxuXHRcdCQudmFrYXRhLnNlYXJjaCA9IGZ1bmN0aW9uKHBhdHRlcm4sIHR4dCwgb3B0aW9ucykge1xyXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHRcdFx0aWYob3B0aW9ucy5mdXp6eSAhPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRvcHRpb25zLmZ1enp5ID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRwYXR0ZXJuID0gb3B0aW9ucy5jYXNlU2Vuc2l0aXZlID8gcGF0dGVybiA6IHBhdHRlcm4udG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0dmFyIE1BVENIX0xPQ0FUSU9OXHQ9IG9wdGlvbnMubG9jYXRpb24gfHwgMCxcclxuXHRcdFx0XHRNQVRDSF9ESVNUQU5DRVx0PSBvcHRpb25zLmRpc3RhbmNlIHx8IDEwMCxcclxuXHRcdFx0XHRNQVRDSF9USFJFU0hPTERcdD0gb3B0aW9ucy50aHJlc2hvbGQgfHwgMC42LFxyXG5cdFx0XHRcdHBhdHRlcm5MZW4gPSBwYXR0ZXJuLmxlbmd0aCxcclxuXHRcdFx0XHRtYXRjaG1hc2ssIHBhdHRlcm5fYWxwaGFiZXQsIG1hdGNoX2JpdGFwU2NvcmUsIHNlYXJjaDtcclxuXHRcdFx0aWYocGF0dGVybkxlbiA+IDMyKSB7XHJcblx0XHRcdFx0b3B0aW9ucy5mdXp6eSA9IGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKG9wdGlvbnMuZnV6enkpIHtcclxuXHRcdFx0XHRtYXRjaG1hc2sgPSAxIDw8IChwYXR0ZXJuTGVuIC0gMSk7XHJcblx0XHRcdFx0cGF0dGVybl9hbHBoYWJldCA9IChmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHR2YXIgbWFzayA9IHt9LFxyXG5cdFx0XHRcdFx0XHRpID0gMDtcclxuXHRcdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuTGVuOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0bWFza1twYXR0ZXJuLmNoYXJBdChpKV0gPSAwO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IHBhdHRlcm5MZW47IGkrKykge1xyXG5cdFx0XHRcdFx0XHRtYXNrW3BhdHRlcm4uY2hhckF0KGkpXSB8PSAxIDw8IChwYXR0ZXJuTGVuIC0gaSAtIDEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIG1hc2s7XHJcblx0XHRcdFx0fSgpKTtcclxuXHRcdFx0XHRtYXRjaF9iaXRhcFNjb3JlID0gZnVuY3Rpb24gKGUsIHgpIHtcclxuXHRcdFx0XHRcdHZhciBhY2N1cmFjeSA9IGUgLyBwYXR0ZXJuTGVuLFxyXG5cdFx0XHRcdFx0XHRwcm94aW1pdHkgPSBNYXRoLmFicyhNQVRDSF9MT0NBVElPTiAtIHgpO1xyXG5cdFx0XHRcdFx0aWYoIU1BVENIX0RJU1RBTkNFKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBwcm94aW1pdHkgPyAxLjAgOiBhY2N1cmFjeTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiBhY2N1cmFjeSArIChwcm94aW1pdHkgLyBNQVRDSF9ESVNUQU5DRSk7XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0XHRzZWFyY2ggPSBmdW5jdGlvbiAodGV4dCkge1xyXG5cdFx0XHRcdHRleHQgPSBvcHRpb25zLmNhc2VTZW5zaXRpdmUgPyB0ZXh0IDogdGV4dC50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdGlmKHBhdHRlcm4gPT09IHRleHQgfHwgdGV4dC5pbmRleE9mKHBhdHRlcm4pICE9PSAtMSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0aXNNYXRjaDogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0c2NvcmU6IDBcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKCFvcHRpb25zLmZ1enp5KSB7XHJcblx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRpc01hdGNoOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0c2NvcmU6IDFcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBpLCBqLFxyXG5cdFx0XHRcdFx0dGV4dExlbiA9IHRleHQubGVuZ3RoLFxyXG5cdFx0XHRcdFx0c2NvcmVUaHJlc2hvbGQgPSBNQVRDSF9USFJFU0hPTEQsXHJcblx0XHRcdFx0XHRiZXN0TG9jID0gdGV4dC5pbmRleE9mKHBhdHRlcm4sIE1BVENIX0xPQ0FUSU9OKSxcclxuXHRcdFx0XHRcdGJpbk1pbiwgYmluTWlkLFxyXG5cdFx0XHRcdFx0YmluTWF4ID0gcGF0dGVybkxlbiArIHRleHRMZW4sXHJcblx0XHRcdFx0XHRsYXN0UmQsIHN0YXJ0LCBmaW5pc2gsIHJkLCBjaGFyTWF0Y2gsXHJcblx0XHRcdFx0XHRzY29yZSA9IDEsXHJcblx0XHRcdFx0XHRsb2NhdGlvbnMgPSBbXTtcclxuXHRcdFx0XHRpZiAoYmVzdExvYyAhPT0gLTEpIHtcclxuXHRcdFx0XHRcdHNjb3JlVGhyZXNob2xkID0gTWF0aC5taW4obWF0Y2hfYml0YXBTY29yZSgwLCBiZXN0TG9jKSwgc2NvcmVUaHJlc2hvbGQpO1xyXG5cdFx0XHRcdFx0YmVzdExvYyA9IHRleHQubGFzdEluZGV4T2YocGF0dGVybiwgTUFUQ0hfTE9DQVRJT04gKyBwYXR0ZXJuTGVuKTtcclxuXHRcdFx0XHRcdGlmIChiZXN0TG9jICE9PSAtMSkge1xyXG5cdFx0XHRcdFx0XHRzY29yZVRocmVzaG9sZCA9IE1hdGgubWluKG1hdGNoX2JpdGFwU2NvcmUoMCwgYmVzdExvYyksIHNjb3JlVGhyZXNob2xkKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YmVzdExvYyA9IC0xO1xyXG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuTGVuOyBpKyspIHtcclxuXHRcdFx0XHRcdGJpbk1pbiA9IDA7XHJcblx0XHRcdFx0XHRiaW5NaWQgPSBiaW5NYXg7XHJcblx0XHRcdFx0XHR3aGlsZSAoYmluTWluIDwgYmluTWlkKSB7XHJcblx0XHRcdFx0XHRcdGlmIChtYXRjaF9iaXRhcFNjb3JlKGksIE1BVENIX0xPQ0FUSU9OICsgYmluTWlkKSA8PSBzY29yZVRocmVzaG9sZCkge1xyXG5cdFx0XHRcdFx0XHRcdGJpbk1pbiA9IGJpbk1pZDtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRiaW5NYXggPSBiaW5NaWQ7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0YmluTWlkID0gTWF0aC5mbG9vcigoYmluTWF4IC0gYmluTWluKSAvIDIgKyBiaW5NaW4pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YmluTWF4ID0gYmluTWlkO1xyXG5cdFx0XHRcdFx0c3RhcnQgPSBNYXRoLm1heCgxLCBNQVRDSF9MT0NBVElPTiAtIGJpbk1pZCArIDEpO1xyXG5cdFx0XHRcdFx0ZmluaXNoID0gTWF0aC5taW4oTUFUQ0hfTE9DQVRJT04gKyBiaW5NaWQsIHRleHRMZW4pICsgcGF0dGVybkxlbjtcclxuXHRcdFx0XHRcdHJkID0gbmV3IEFycmF5KGZpbmlzaCArIDIpO1xyXG5cdFx0XHRcdFx0cmRbZmluaXNoICsgMV0gPSAoMSA8PCBpKSAtIDE7XHJcblx0XHRcdFx0XHRmb3IgKGogPSBmaW5pc2g7IGogPj0gc3RhcnQ7IGotLSkge1xyXG5cdFx0XHRcdFx0XHRjaGFyTWF0Y2ggPSBwYXR0ZXJuX2FscGhhYmV0W3RleHQuY2hhckF0KGogLSAxKV07XHJcblx0XHRcdFx0XHRcdGlmIChpID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0cmRbal0gPSAoKHJkW2ogKyAxXSA8PCAxKSB8IDEpICYgY2hhck1hdGNoO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHJkW2pdID0gKChyZFtqICsgMV0gPDwgMSkgfCAxKSAmIGNoYXJNYXRjaCB8ICgoKGxhc3RSZFtqICsgMV0gfCBsYXN0UmRbal0pIDw8IDEpIHwgMSkgfCBsYXN0UmRbaiArIDFdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChyZFtqXSAmIG1hdGNobWFzaykge1xyXG5cdFx0XHRcdFx0XHRcdHNjb3JlID0gbWF0Y2hfYml0YXBTY29yZShpLCBqIC0gMSk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHNjb3JlIDw9IHNjb3JlVGhyZXNob2xkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzY29yZVRocmVzaG9sZCA9IHNjb3JlO1xyXG5cdFx0XHRcdFx0XHRcdFx0YmVzdExvYyA9IGogLSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0bG9jYXRpb25zLnB1c2goYmVzdExvYyk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoYmVzdExvYyA+IE1BVENIX0xPQ0FUSU9OKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gTWF0aC5tYXgoMSwgMiAqIE1BVENIX0xPQ0FUSU9OIC0gYmVzdExvYyk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChtYXRjaF9iaXRhcFNjb3JlKGkgKyAxLCBNQVRDSF9MT0NBVElPTikgPiBzY29yZVRocmVzaG9sZCkge1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGxhc3RSZCA9IHJkO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0aXNNYXRjaDogYmVzdExvYyA+PSAwLFxyXG5cdFx0XHRcdFx0c2NvcmU6IHNjb3JlXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fTtcclxuXHRcdFx0cmV0dXJuIHR4dCA9PT0gdHJ1ZSA/IHsgJ3NlYXJjaCcgOiBzZWFyY2ggfSA6IHNlYXJjaCh0eHQpO1xyXG5cdFx0fTtcclxuXHR9KGpRdWVyeSkpO1xyXG5cclxuXHQvLyBpbmNsdWRlIHRoZSBzZWFyY2ggcGx1Z2luIGJ5IGRlZmF1bHRcclxuXHQvLyAkLmpzdHJlZS5kZWZhdWx0cy5wbHVnaW5zLnB1c2goXCJzZWFyY2hcIik7XHJcblxyXG4vKipcclxuICogIyMjIFNvcnQgcGx1Z2luXHJcbiAqXHJcbiAqIEF1dG1hdGljYWxseSBzb3J0cyBhbGwgc2libGluZ3MgaW4gdGhlIHRyZWUgYWNjb3JkaW5nIHRvIGEgc29ydGluZyBmdW5jdGlvbi5cclxuICovXHJcblxyXG5cdC8qKlxyXG5cdCAqIHRoZSBzZXR0aW5ncyBmdW5jdGlvbiB1c2VkIHRvIHNvcnQgdGhlIG5vZGVzLlxyXG5cdCAqIEl0IGlzIGV4ZWN1dGVkIGluIHRoZSB0cmVlJ3MgY29udGV4dCwgYWNjZXB0cyB0d28gbm9kZXMgYXMgYXJndW1lbnRzIGFuZCBzaG91bGQgcmV0dXJuIGAxYCBvciBgLTFgLlxyXG5cdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLnNvcnRcclxuXHQgKiBAcGx1Z2luIHNvcnRcclxuXHQgKi9cclxuXHQkLmpzdHJlZS5kZWZhdWx0cy5zb3J0ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuXHRcdC8vcmV0dXJuIHRoaXMuZ2V0X3R5cGUoYSkgPT09IHRoaXMuZ2V0X3R5cGUoYikgPyAodGhpcy5nZXRfdGV4dChhKSA+IHRoaXMuZ2V0X3RleHQoYikgPyAxIDogLTEpIDogdGhpcy5nZXRfdHlwZShhKSA+PSB0aGlzLmdldF90eXBlKGIpO1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0X3RleHQoYSkgPiB0aGlzLmdldF90ZXh0KGIpID8gMSA6IC0xO1xyXG5cdH07XHJcblx0JC5qc3RyZWUucGx1Z2lucy5zb3J0ID0gZnVuY3Rpb24gKG9wdGlvbnMsIHBhcmVudCkge1xyXG5cdFx0dGhpcy5iaW5kID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRwYXJlbnQuYmluZC5jYWxsKHRoaXMpO1xyXG5cdFx0XHR0aGlzLmVsZW1lbnRcclxuXHRcdFx0XHQub24oXCJtb2RlbC5qc3RyZWVcIiwgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNvcnQoZGF0YS5wYXJlbnQsIHRydWUpO1xyXG5cdFx0XHRcdFx0fSwgdGhpcykpXHJcblx0XHRcdFx0Lm9uKFwicmVuYW1lX25vZGUuanN0cmVlIGNyZWF0ZV9ub2RlLmpzdHJlZVwiLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc29ydChkYXRhLnBhcmVudCB8fCBkYXRhLm5vZGUucGFyZW50LCBmYWxzZSk7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVkcmF3X25vZGUoZGF0YS5wYXJlbnQgfHwgZGF0YS5ub2RlLnBhcmVudCwgdHJ1ZSk7XHJcblx0XHRcdFx0XHR9LCB0aGlzKSlcclxuXHRcdFx0XHQub24oXCJtb3ZlX25vZGUuanN0cmVlIGNvcHlfbm9kZS5qc3RyZWVcIiwgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNvcnQoZGF0YS5wYXJlbnQsIGZhbHNlKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZWRyYXdfbm9kZShkYXRhLnBhcmVudCwgdHJ1ZSk7XHJcblx0XHRcdFx0XHR9LCB0aGlzKSk7XHJcblx0XHR9O1xyXG5cdFx0LyoqXHJcblx0XHQgKiB1c2VkIHRvIHNvcnQgYSBub2RlJ3MgY2hpbGRyZW5cclxuXHRcdCAqIEBwcml2YXRlXHJcblx0XHQgKiBAbmFtZSBzb3J0KG9iaiBbLCBkZWVwXSlcclxuXHRcdCAqIEBwYXJhbSAge21peGVkfSBvYmogdGhlIG5vZGVcclxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gZGVlcCBpZiBzZXQgdG8gYHRydWVgIG5vZGVzIGFyZSBzb3J0ZWQgcmVjdXJzaXZlbHkuXHJcblx0XHQgKiBAcGx1Z2luIHNvcnRcclxuXHRcdCAqIEB0cmlnZ2VyIHNlYXJjaC5qc3RyZWVcclxuXHRcdCAqL1xyXG5cdFx0dGhpcy5zb3J0ID0gZnVuY3Rpb24gKG9iaiwgZGVlcCkge1xyXG5cdFx0XHR2YXIgaSwgajtcclxuXHRcdFx0b2JqID0gdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRpZihvYmogJiYgb2JqLmNoaWxkcmVuICYmIG9iai5jaGlsZHJlbi5sZW5ndGgpIHtcclxuXHRcdFx0XHRvYmouY2hpbGRyZW4uc29ydCgkLnByb3h5KHRoaXMuc2V0dGluZ3Muc29ydCwgdGhpcykpO1xyXG5cdFx0XHRcdGlmKGRlZXApIHtcclxuXHRcdFx0XHRcdGZvcihpID0gMCwgaiA9IG9iai5jaGlsZHJlbl9kLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNvcnQob2JqLmNoaWxkcmVuX2RbaV0sIGZhbHNlKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fTtcclxuXHJcblx0Ly8gaW5jbHVkZSB0aGUgc29ydCBwbHVnaW4gYnkgZGVmYXVsdFxyXG5cdC8vICQuanN0cmVlLmRlZmF1bHRzLnBsdWdpbnMucHVzaChcInNvcnRcIik7XHJcblxyXG4vKipcclxuICogIyMjIFN0YXRlIHBsdWdpblxyXG4gKlxyXG4gKiBTYXZlcyB0aGUgc3RhdGUgb2YgdGhlIHRyZWUgKHNlbGVjdGVkIG5vZGVzLCBvcGVuZWQgbm9kZXMpIG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgdXNpbmcgYXZhaWxhYmxlIG9wdGlvbnMgKGxvY2FsU3RvcmFnZSwgY29va2llcywgZXRjKVxyXG4gKi9cclxuXHJcblx0dmFyIHRvID0gZmFsc2U7XHJcblx0LyoqXHJcblx0ICogc3RvcmVzIGFsbCBkZWZhdWx0cyBmb3IgdGhlIHN0YXRlIHBsdWdpblxyXG5cdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLnN0YXRlXHJcblx0ICogQHBsdWdpbiBzdGF0ZVxyXG5cdCAqL1xyXG5cdCQuanN0cmVlLmRlZmF1bHRzLnN0YXRlID0ge1xyXG5cdFx0LyoqXHJcblx0XHQgKiBBIHN0cmluZyBmb3IgdGhlIGtleSB0byB1c2Ugd2hlbiBzYXZpbmcgdGhlIGN1cnJlbnQgdHJlZSAoY2hhbmdlIGlmIHVzaW5nIG11bHRpcGxlIHRyZWVzIGluIHlvdXIgcHJvamVjdCkuIERlZmF1bHRzIHRvIGBqc3RyZWVgLlxyXG5cdFx0ICogQG5hbWUgJC5qc3RyZWUuZGVmYXVsdHMuc3RhdGUua2V5XHJcblx0XHQgKiBAcGx1Z2luIHN0YXRlXHJcblx0XHQgKi9cclxuXHRcdGtleVx0XHQ6ICdqc3RyZWUnLFxyXG5cdFx0LyoqXHJcblx0XHQgKiBBIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGV2ZW50cyB0aGF0IHRyaWdnZXIgYSBzdGF0ZSBzYXZlLiBEZWZhdWx0cyB0byBgY2hhbmdlZC5qc3RyZWUgb3Blbl9ub2RlLmpzdHJlZSBjbG9zZV9ub2RlLmpzdHJlZWAuXHJcblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5zdGF0ZS5ldmVudHNcclxuXHRcdCAqIEBwbHVnaW4gc3RhdGVcclxuXHRcdCAqL1xyXG5cdFx0ZXZlbnRzXHQ6ICdjaGFuZ2VkLmpzdHJlZSBvcGVuX25vZGUuanN0cmVlIGNsb3NlX25vZGUuanN0cmVlJyxcclxuXHRcdC8qKlxyXG5cdFx0ICogVGltZSBpbiBtaWxsaXNlY29uZHMgYWZ0ZXIgd2hpY2ggdGhlIHN0YXRlIHdpbGwgZXhwaXJlLiBEZWZhdWx0cyB0byAnZmFsc2UnIG1lYW5pbmcgLSBubyBleHBpcmUuXHJcblx0XHQgKiBAbmFtZSAkLmpzdHJlZS5kZWZhdWx0cy5zdGF0ZS50dGxcclxuXHRcdCAqIEBwbHVnaW4gc3RhdGVcclxuXHRcdCAqL1xyXG5cdFx0dHRsXHRcdDogZmFsc2UsXHJcblx0XHQvKipcclxuXHRcdCAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHByaW9yIHRvIHJlc3RvcmluZyBzdGF0ZSB3aXRoIG9uZSBhcmd1bWVudCAtIHRoZSBzdGF0ZSBvYmplY3QuIENhbiBiZSB1c2VkIHRvIGNsZWFyIHVud2FudGVkIHBhcnRzIG9mIHRoZSBzdGF0ZS5cclxuXHRcdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLnN0YXRlLmZpbHRlclxyXG5cdFx0ICogQHBsdWdpbiBzdGF0ZVxyXG5cdFx0ICovXHJcblx0XHRmaWx0ZXJcdDogZmFsc2VcclxuXHR9O1xyXG5cdCQuanN0cmVlLnBsdWdpbnMuc3RhdGUgPSBmdW5jdGlvbiAob3B0aW9ucywgcGFyZW50KSB7XHJcblx0XHR0aGlzLmJpbmQgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHBhcmVudC5iaW5kLmNhbGwodGhpcyk7XHJcblx0XHRcdHZhciBiaW5kID0gJC5wcm94eShmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0dGhpcy5lbGVtZW50Lm9uKHRoaXMuc2V0dGluZ3Muc3RhdGUuZXZlbnRzLCAkLnByb3h5KGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdGlmKHRvKSB7IGNsZWFyVGltZW91dCh0byk7IH1cclxuXHRcdFx0XHRcdHRvID0gc2V0VGltZW91dCgkLnByb3h5KGZ1bmN0aW9uICgpIHsgdGhpcy5zYXZlX3N0YXRlKCk7IH0sIHRoaXMpLCAxMDApO1xyXG5cdFx0XHRcdH0sIHRoaXMpKTtcclxuXHRcdFx0fSwgdGhpcyk7XHJcblx0XHRcdHRoaXMuZWxlbWVudFxyXG5cdFx0XHRcdC5vbihcInJlYWR5LmpzdHJlZVwiLCAkLnByb3h5KGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuZWxlbWVudC5vbmUoXCJyZXN0b3JlX3N0YXRlLmpzdHJlZVwiLCBiaW5kKTtcclxuXHRcdFx0XHRcdFx0aWYoIXRoaXMucmVzdG9yZV9zdGF0ZSgpKSB7IGJpbmQoKTsgfVxyXG5cdFx0XHRcdFx0fSwgdGhpcykpO1xyXG5cdFx0fTtcclxuXHRcdC8qKlxyXG5cdFx0ICogc2F2ZSB0aGUgc3RhdGVcclxuXHRcdCAqIEBuYW1lIHNhdmVfc3RhdGUoKVxyXG5cdFx0ICogQHBsdWdpbiBzdGF0ZVxyXG5cdFx0ICovXHJcblx0XHR0aGlzLnNhdmVfc3RhdGUgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHZhciBzdCA9IHsgJ3N0YXRlJyA6IHRoaXMuZ2V0X3N0YXRlKCksICd0dGwnIDogdGhpcy5zZXR0aW5ncy5zdGF0ZS50dGwsICdzZWMnIDogKyhuZXcgRGF0ZSgpKSB9O1xyXG5cdFx0XHQkLnZha2F0YS5zdG9yYWdlLnNldCh0aGlzLnNldHRpbmdzLnN0YXRlLmtleSwgSlNPTi5zdHJpbmdpZnkoc3QpKTtcclxuXHRcdH07XHJcblx0XHQvKipcclxuXHRcdCAqIHJlc3RvcmUgdGhlIHN0YXRlIGZyb20gdGhlIHVzZXIncyBjb21wdXRlclxyXG5cdFx0ICogQG5hbWUgcmVzdG9yZV9zdGF0ZSgpXHJcblx0XHQgKiBAcGx1Z2luIHN0YXRlXHJcblx0XHQgKi9cclxuXHRcdHRoaXMucmVzdG9yZV9zdGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0dmFyIGsgPSAkLnZha2F0YS5zdG9yYWdlLmdldCh0aGlzLnNldHRpbmdzLnN0YXRlLmtleSk7XHJcblx0XHRcdGlmKCEhaykgeyB0cnkgeyBrID0gSlNPTi5wYXJzZShrKTsgfSBjYXRjaChleCkgeyByZXR1cm4gZmFsc2U7IH0gfVxyXG5cdFx0XHRpZighIWsgJiYgay50dGwgJiYgay5zZWMgJiYgKyhuZXcgRGF0ZSgpKSAtIGsuc2VjID4gay50dGwpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblx0XHRcdGlmKCEhayAmJiBrLnN0YXRlKSB7IGsgPSBrLnN0YXRlOyB9XHJcblx0XHRcdGlmKCEhayAmJiAkLmlzRnVuY3Rpb24odGhpcy5zZXR0aW5ncy5zdGF0ZS5maWx0ZXIpKSB7IGsgPSB0aGlzLnNldHRpbmdzLnN0YXRlLmZpbHRlci5jYWxsKHRoaXMsIGspOyB9XHJcblx0XHRcdGlmKCEhaykge1xyXG5cdFx0XHRcdHRoaXMuZWxlbWVudC5vbmUoXCJzZXRfc3RhdGUuanN0cmVlXCIsIGZ1bmN0aW9uIChlLCBkYXRhKSB7IGRhdGEuaW5zdGFuY2UudHJpZ2dlcigncmVzdG9yZV9zdGF0ZScsIHsgJ3N0YXRlJyA6ICQuZXh0ZW5kKHRydWUsIHt9LCBrKSB9KTsgfSk7XHJcblx0XHRcdFx0dGhpcy5zZXRfc3RhdGUoayk7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fTtcclxuXHRcdC8qKlxyXG5cdFx0ICogY2xlYXIgdGhlIHN0YXRlIG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXJcclxuXHRcdCAqIEBuYW1lIGNsZWFyX3N0YXRlKClcclxuXHRcdCAqIEBwbHVnaW4gc3RhdGVcclxuXHRcdCAqL1xyXG5cdFx0dGhpcy5jbGVhcl9zdGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0cmV0dXJuICQudmFrYXRhLnN0b3JhZ2UuZGVsKHRoaXMuc2V0dGluZ3Muc3RhdGUua2V5KTtcclxuXHRcdH07XHJcblx0fTtcclxuXHJcblx0KGZ1bmN0aW9uICgkLCB1bmRlZmluZWQpIHtcclxuXHRcdCQudmFrYXRhLnN0b3JhZ2UgPSB7XHJcblx0XHRcdC8vIHNpbXBseSBzcGVjaWZ5aW5nIHRoZSBmdW5jdGlvbnMgaW4gRkYgdGhyb3dzIGFuIGVycm9yXHJcblx0XHRcdHNldCA6IGZ1bmN0aW9uIChrZXksIHZhbCkgeyByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsKTsgfSxcclxuXHRcdFx0Z2V0IDogZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7IH0sXHJcblx0XHRcdGRlbCA6IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpOyB9XHJcblx0XHR9O1xyXG5cdH0oalF1ZXJ5KSk7XHJcblxyXG5cdC8vIGluY2x1ZGUgdGhlIHN0YXRlIHBsdWdpbiBieSBkZWZhdWx0XHJcblx0Ly8gJC5qc3RyZWUuZGVmYXVsdHMucGx1Z2lucy5wdXNoKFwic3RhdGVcIik7XHJcblxyXG4vKipcclxuICogIyMjIFR5cGVzIHBsdWdpblxyXG4gKlxyXG4gKiBNYWtlcyBpdCBwb3NzaWJsZSB0byBhZGQgcHJlZGVmaW5lZCB0eXBlcyBmb3IgZ3JvdXBzIG9mIG5vZGVzLCB3aGljaCBtYWtlIGl0IHBvc3NpYmxlIHRvIGVhc2lseSBjb250cm9sIG5lc3RpbmcgcnVsZXMgYW5kIGljb24gZm9yIGVhY2ggZ3JvdXAuXHJcbiAqL1xyXG5cclxuXHQvKipcclxuXHQgKiBBbiBvYmplY3Qgc3RvcmluZyBhbGwgdHlwZXMgYXMga2V5IHZhbHVlIHBhaXJzLCB3aGVyZSB0aGUga2V5IGlzIHRoZSB0eXBlIG5hbWUgYW5kIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBjb3VsZCBjb250YWluIGZvbGxvd2luZyBrZXlzIChhbGwgb3B0aW9uYWwpLlxyXG5cdCAqIFxyXG5cdCAqICogYG1heF9jaGlsZHJlbmAgdGhlIG1heGltdW0gbnVtYmVyIG9mIGltbWVkaWF0ZSBjaGlsZHJlbiB0aGlzIG5vZGUgdHlwZSBjYW4gaGF2ZS4gRG8gbm90IHNwZWNpZnkgb3Igc2V0IHRvIGAtMWAgZm9yIHVubGltaXRlZC5cclxuXHQgKiAqIGBtYXhfZGVwdGhgIHRoZSBtYXhpbXVtIG51bWJlciBvZiBuZXN0aW5nIHRoaXMgbm9kZSB0eXBlIGNhbiBoYXZlLiBBIHZhbHVlIG9mIGAxYCB3b3VsZCBtZWFuIHRoYXQgdGhlIG5vZGUgY2FuIGhhdmUgY2hpbGRyZW4sIGJ1dCBubyBncmFuZGNoaWxkcmVuLiBEbyBub3Qgc3BlY2lmeSBvciBzZXQgdG8gYC0xYCBmb3IgdW5saW1pdGVkLlxyXG5cdCAqICogYHZhbGlkX2NoaWxkcmVuYCBhbiBhcnJheSBvZiBub2RlIHR5cGUgc3RyaW5ncywgdGhhdCBub2RlcyBvZiB0aGlzIHR5cGUgY2FuIGhhdmUgYXMgY2hpbGRyZW4uIERvIG5vdCBzcGVjaWZ5IG9yIHNldCB0byBgLTFgIGZvciBubyBsaW1pdHMuXHJcblx0ICogKiBgaWNvbmAgYSBzdHJpbmcgLSBjYW4gYmUgYSBwYXRoIHRvIGFuIGljb24gb3IgYSBjbGFzc05hbWUsIGlmIHVzaW5nIGFuIGltYWdlIHRoYXQgaXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHVzZSBhIGAuL2AgcHJlZml4LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBkZXRlY3RlZCBhcyBhIGNsYXNzLiBPbWl0IHRvIHVzZSB0aGUgZGVmYXVsdCBpY29uIGZyb20geW91ciB0aGVtZS5cclxuXHQgKlxyXG5cdCAqIFRoZXJlIGFyZSB0d28gcHJlZGVmaW5lZCB0eXBlczpcclxuXHQgKiBcclxuXHQgKiAqIGAjYCByZXByZXNlbnRzIHRoZSByb290IG9mIHRoZSB0cmVlLCBmb3IgZXhhbXBsZSBgbWF4X2NoaWxkcmVuYCB3b3VsZCBjb250cm9sIHRoZSBtYXhpbXVtIG51bWJlciBvZiByb290IG5vZGVzLlxyXG5cdCAqICogYGRlZmF1bHRgIHJlcHJlc2VudHMgdGhlIGRlZmF1bHQgbm9kZSAtIGFueSBzZXR0aW5ncyBoZXJlIHdpbGwgYmUgYXBwbGllZCB0byBhbGwgbm9kZXMgdGhhdCBkbyBub3QgaGF2ZSBhIHR5cGUgc3BlY2lmaWVkLlxyXG5cdCAqIFxyXG5cdCAqIEBuYW1lICQuanN0cmVlLmRlZmF1bHRzLnR5cGVzXHJcblx0ICogQHBsdWdpbiB0eXBlc1xyXG5cdCAqL1xyXG5cdCQuanN0cmVlLmRlZmF1bHRzLnR5cGVzID0ge1xyXG5cdFx0JyMnIDoge30sXHJcblx0XHQnZGVmYXVsdCcgOiB7fVxyXG5cdH07XHJcblxyXG5cdCQuanN0cmVlLnBsdWdpbnMudHlwZXMgPSBmdW5jdGlvbiAob3B0aW9ucywgcGFyZW50KSB7XHJcblx0XHR0aGlzLmluaXQgPSBmdW5jdGlvbiAoZWwsIG9wdGlvbnMpIHtcclxuXHRcdFx0dmFyIGksIGo7XHJcblx0XHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy50eXBlcyAmJiBvcHRpb25zLnR5cGVzWydkZWZhdWx0J10pIHtcclxuXHRcdFx0XHRmb3IoaSBpbiBvcHRpb25zLnR5cGVzKSB7XHJcblx0XHRcdFx0XHRpZihpICE9PSBcImRlZmF1bHRcIiAmJiBpICE9PSBcIiNcIiAmJiBvcHRpb25zLnR5cGVzLmhhc093blByb3BlcnR5KGkpKSB7XHJcblx0XHRcdFx0XHRcdGZvcihqIGluIG9wdGlvbnMudHlwZXNbJ2RlZmF1bHQnXSkge1xyXG5cdFx0XHRcdFx0XHRcdGlmKG9wdGlvbnMudHlwZXNbJ2RlZmF1bHQnXS5oYXNPd25Qcm9wZXJ0eShqKSAmJiBvcHRpb25zLnR5cGVzW2ldW2pdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbnMudHlwZXNbaV1bal0gPSBvcHRpb25zLnR5cGVzWydkZWZhdWx0J11bal07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHBhcmVudC5pbml0LmNhbGwodGhpcywgZWwsIG9wdGlvbnMpO1xyXG5cdFx0XHR0aGlzLl9tb2RlbC5kYXRhWycjJ10udHlwZSA9ICcjJztcclxuXHRcdH07XHJcblx0XHR0aGlzLmJpbmQgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHBhcmVudC5iaW5kLmNhbGwodGhpcyk7XHJcblx0XHRcdHRoaXMuZWxlbWVudFxyXG5cdFx0XHRcdC5vbignbW9kZWwuanN0cmVlJywgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG5cdFx0XHRcdFx0XHR2YXIgbSA9IHRoaXMuX21vZGVsLmRhdGEsXHJcblx0XHRcdFx0XHRcdFx0ZHBjID0gZGF0YS5ub2RlcyxcclxuXHRcdFx0XHRcdFx0XHR0ID0gdGhpcy5zZXR0aW5ncy50eXBlcyxcclxuXHRcdFx0XHRcdFx0XHRpLCBqLCBjID0gJ2RlZmF1bHQnO1xyXG5cdFx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSBkcGMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0YyA9ICdkZWZhdWx0JztcclxuXHRcdFx0XHRcdFx0XHRpZihtW2RwY1tpXV0ub3JpZ2luYWwgJiYgbVtkcGNbaV1dLm9yaWdpbmFsLnR5cGUgJiYgdFttW2RwY1tpXV0ub3JpZ2luYWwudHlwZV0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdGMgPSBtW2RwY1tpXV0ub3JpZ2luYWwudHlwZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYobVtkcGNbaV1dLmRhdGEgJiYgbVtkcGNbaV1dLmRhdGEuanN0cmVlICYmIG1bZHBjW2ldXS5kYXRhLmpzdHJlZS50eXBlICYmIHRbbVtkcGNbaV1dLmRhdGEuanN0cmVlLnR5cGVdKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjID0gbVtkcGNbaV1dLmRhdGEuanN0cmVlLnR5cGU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdG1bZHBjW2ldXS50eXBlID0gYztcclxuXHRcdFx0XHRcdFx0XHRpZihtW2RwY1tpXV0uaWNvbiA9PT0gdHJ1ZSAmJiB0W2NdLmljb24gIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0bVtkcGNbaV1dLmljb24gPSB0W2NdLmljb247XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LCB0aGlzKSk7XHJcblx0XHR9O1xyXG5cdFx0dGhpcy5nZXRfanNvbiA9IGZ1bmN0aW9uIChvYmosIG9wdGlvbnMsIGZsYXQpIHtcclxuXHRcdFx0dmFyIGksIGosXHJcblx0XHRcdFx0bSA9IHRoaXMuX21vZGVsLmRhdGEsXHJcblx0XHRcdFx0b3B0ID0gb3B0aW9ucyA/ICQuZXh0ZW5kKHRydWUsIHt9LCBvcHRpb25zLCB7bm9faWQ6ZmFsc2V9KSA6IHt9LFxyXG5cdFx0XHRcdHRtcCA9IHBhcmVudC5nZXRfanNvbi5jYWxsKHRoaXMsIG9iaiwgb3B0LCBmbGF0KTtcclxuXHRcdFx0aWYodG1wID09PSBmYWxzZSkgeyByZXR1cm4gZmFsc2U7IH1cclxuXHRcdFx0aWYoJC5pc0FycmF5KHRtcCkpIHtcclxuXHRcdFx0XHRmb3IoaSA9IDAsIGogPSB0bXAubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcblx0XHRcdFx0XHR0bXBbaV0udHlwZSA9IHRtcFtpXS5pZCAmJiBtW3RtcFtpXS5pZF0gJiYgbVt0bXBbaV0uaWRdLnR5cGUgPyBtW3RtcFtpXS5pZF0udHlwZSA6IFwiZGVmYXVsdFwiO1xyXG5cdFx0XHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLm5vX2lkKSB7XHJcblx0XHRcdFx0XHRcdGRlbGV0ZSB0bXBbaV0uaWQ7XHJcblx0XHRcdFx0XHRcdGlmKHRtcFtpXS5saV9hdHRyICYmIHRtcFtpXS5saV9hdHRyLmlkKSB7XHJcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIHRtcFtpXS5saV9hdHRyLmlkO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdHRtcC50eXBlID0gdG1wLmlkICYmIG1bdG1wLmlkXSAmJiBtW3RtcC5pZF0udHlwZSA/IG1bdG1wLmlkXS50eXBlIDogXCJkZWZhdWx0XCI7XHJcblx0XHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLm5vX2lkKSB7XHJcblx0XHRcdFx0XHR0bXAgPSB0aGlzLl9kZWxldGVfaWRzKHRtcCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0bXA7XHJcblx0XHR9O1xyXG5cdFx0dGhpcy5fZGVsZXRlX2lkcyA9IGZ1bmN0aW9uICh0bXApIHtcclxuXHRcdFx0aWYoJC5pc0FycmF5KHRtcCkpIHtcclxuXHRcdFx0XHRmb3IodmFyIGkgPSAwLCBqID0gdG1wLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdFx0dG1wW2ldID0gdGhpcy5fZGVsZXRlX2lkcyh0bXBbaV0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gdG1wO1xyXG5cdFx0XHR9XHJcblx0XHRcdGRlbGV0ZSB0bXAuaWQ7XHJcblx0XHRcdGlmKHRtcC5saV9hdHRyICYmIHRtcC5saV9hdHRyLmlkKSB7XHJcblx0XHRcdFx0ZGVsZXRlIHRtcC5saV9hdHRyLmlkO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKHRtcC5jaGlsZHJlbiAmJiAkLmlzQXJyYXkodG1wLmNoaWxkcmVuKSkge1xyXG5cdFx0XHRcdHRtcC5jaGlsZHJlbiA9IHRoaXMuX2RlbGV0ZV9pZHModG1wLmNoaWxkcmVuKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdG1wO1xyXG5cdFx0fTtcclxuXHRcdHRoaXMuY2hlY2sgPSBmdW5jdGlvbiAoY2hrLCBvYmosIHBhciwgcG9zKSB7XHJcblx0XHRcdGlmKHBhcmVudC5jaGVjay5jYWxsKHRoaXMsIGNoaywgb2JqLCBwYXIsIHBvcykgPT09IGZhbHNlKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cdFx0XHRvYmogPSBvYmogJiYgb2JqLmlkID8gb2JqIDogdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRwYXIgPSBwYXIgJiYgcGFyLmlkID8gcGFyIDogdGhpcy5nZXRfbm9kZShwYXIpO1xyXG5cdFx0XHR2YXIgbSA9IG9iaiAmJiBvYmouaWQgPyAkLmpzdHJlZS5yZWZlcmVuY2Uob2JqLmlkKSA6IG51bGwsIHRtcCwgZCwgaSwgajtcclxuXHRcdFx0bSA9IG0gJiYgbS5fbW9kZWwgJiYgbS5fbW9kZWwuZGF0YSA/IG0uX21vZGVsLmRhdGEgOiBudWxsO1xyXG5cdFx0XHRzd2l0Y2goY2hrKSB7XHJcblx0XHRcdFx0Y2FzZSBcImNyZWF0ZV9ub2RlXCI6XHJcblx0XHRcdFx0Y2FzZSBcIm1vdmVfbm9kZVwiOlxyXG5cdFx0XHRcdGNhc2UgXCJjb3B5X25vZGVcIjpcclxuXHRcdFx0XHRcdGlmKGNoayAhPT0gJ21vdmVfbm9kZScgfHwgJC5pbkFycmF5KG9iai5pZCwgcGFyLmNoaWxkcmVuKSA9PT0gLTEpIHtcclxuXHRcdFx0XHRcdFx0dG1wID0gdGhpcy5nZXRfcnVsZXMocGFyKTtcclxuXHRcdFx0XHRcdFx0aWYodG1wLm1heF9jaGlsZHJlbiAhPT0gdW5kZWZpbmVkICYmIHRtcC5tYXhfY2hpbGRyZW4gIT09IC0xICYmIHRtcC5tYXhfY2hpbGRyZW4gPT09IHBhci5jaGlsZHJlbi5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvciA9IHsgJ2Vycm9yJyA6ICdjaGVjaycsICdwbHVnaW4nIDogJ3R5cGVzJywgJ2lkJyA6ICd0eXBlc18wMScsICdyZWFzb24nIDogJ21heF9jaGlsZHJlbiBwcmV2ZW50cyBmdW5jdGlvbjogJyArIGNoaywgJ2RhdGEnIDogSlNPTi5zdHJpbmdpZnkoeyAnY2hrJyA6IGNoaywgJ3BvcycgOiBwb3MsICdvYmonIDogb2JqICYmIG9iai5pZCA/IG9iai5pZCA6IGZhbHNlLCAncGFyJyA6IHBhciAmJiBwYXIuaWQgPyBwYXIuaWQgOiBmYWxzZSB9KSB9O1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZih0bXAudmFsaWRfY2hpbGRyZW4gIT09IHVuZGVmaW5lZCAmJiB0bXAudmFsaWRfY2hpbGRyZW4gIT09IC0xICYmICQuaW5BcnJheShvYmoudHlwZSwgdG1wLnZhbGlkX2NoaWxkcmVuKSA9PT0gLTEpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLl9kYXRhLmNvcmUubGFzdF9lcnJvciA9IHsgJ2Vycm9yJyA6ICdjaGVjaycsICdwbHVnaW4nIDogJ3R5cGVzJywgJ2lkJyA6ICd0eXBlc18wMicsICdyZWFzb24nIDogJ3ZhbGlkX2NoaWxkcmVuIHByZXZlbnRzIGZ1bmN0aW9uOiAnICsgY2hrLCAnZGF0YScgOiBKU09OLnN0cmluZ2lmeSh7ICdjaGsnIDogY2hrLCAncG9zJyA6IHBvcywgJ29iaicgOiBvYmogJiYgb2JqLmlkID8gb2JqLmlkIDogZmFsc2UsICdwYXInIDogcGFyICYmIHBhci5pZCA/IHBhci5pZCA6IGZhbHNlIH0pIH07XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmKG0gJiYgb2JqLmNoaWxkcmVuX2QgJiYgb2JqLnBhcmVudHMpIHtcclxuXHRcdFx0XHRcdFx0XHRkID0gMDtcclxuXHRcdFx0XHRcdFx0XHRmb3IoaSA9IDAsIGogPSBvYmouY2hpbGRyZW5fZC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdGQgPSBNYXRoLm1heChkLCBtW29iai5jaGlsZHJlbl9kW2ldXS5wYXJlbnRzLmxlbmd0aCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGQgPSBkIC0gb2JqLnBhcmVudHMubGVuZ3RoICsgMTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZihkIDw9IDAgfHwgZCA9PT0gdW5kZWZpbmVkKSB7IGQgPSAxOyB9XHJcblx0XHRcdFx0XHRcdGRvIHtcclxuXHRcdFx0XHRcdFx0XHRpZih0bXAubWF4X2RlcHRoICE9PSB1bmRlZmluZWQgJiYgdG1wLm1heF9kZXB0aCAhPT0gLTEgJiYgdG1wLm1heF9kZXB0aCA8IGQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yID0geyAnZXJyb3InIDogJ2NoZWNrJywgJ3BsdWdpbicgOiAndHlwZXMnLCAnaWQnIDogJ3R5cGVzXzAzJywgJ3JlYXNvbicgOiAnbWF4X2RlcHRoIHByZXZlbnRzIGZ1bmN0aW9uOiAnICsgY2hrLCAnZGF0YScgOiBKU09OLnN0cmluZ2lmeSh7ICdjaGsnIDogY2hrLCAncG9zJyA6IHBvcywgJ29iaicgOiBvYmogJiYgb2JqLmlkID8gb2JqLmlkIDogZmFsc2UsICdwYXInIDogcGFyICYmIHBhci5pZCA/IHBhci5pZCA6IGZhbHNlIH0pIH07XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHBhciA9IHRoaXMuZ2V0X25vZGUocGFyLnBhcmVudCk7XHJcblx0XHRcdFx0XHRcdFx0dG1wID0gdGhpcy5nZXRfcnVsZXMocGFyKTtcclxuXHRcdFx0XHRcdFx0XHRkKys7XHJcblx0XHRcdFx0XHRcdH0gd2hpbGUocGFyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fTtcclxuXHRcdC8qKlxyXG5cdFx0ICogdXNlZCB0byByZXRyaWV2ZSB0aGUgdHlwZSBzZXR0aW5ncyBvYmplY3QgZm9yIGEgbm9kZVxyXG5cdFx0ICogQG5hbWUgZ2V0X3J1bGVzKG9iailcclxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG9iaiB0aGUgbm9kZSB0byBmaW5kIHRoZSBydWxlcyBmb3JcclxuXHRcdCAqIEByZXR1cm4ge09iamVjdH1cclxuXHRcdCAqIEBwbHVnaW4gdHlwZXNcclxuXHRcdCAqL1xyXG5cdFx0dGhpcy5nZXRfcnVsZXMgPSBmdW5jdGlvbiAob2JqKSB7XHJcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcclxuXHRcdFx0aWYoIW9iaikgeyByZXR1cm4gZmFsc2U7IH1cclxuXHRcdFx0dmFyIHRtcCA9IHRoaXMuZ2V0X3R5cGUob2JqLCB0cnVlKTtcclxuXHRcdFx0aWYodG1wLm1heF9kZXB0aCA9PT0gdW5kZWZpbmVkKSB7IHRtcC5tYXhfZGVwdGggPSAtMTsgfVxyXG5cdFx0XHRpZih0bXAubWF4X2NoaWxkcmVuID09PSB1bmRlZmluZWQpIHsgdG1wLm1heF9jaGlsZHJlbiA9IC0xOyB9XHJcblx0XHRcdGlmKHRtcC52YWxpZF9jaGlsZHJlbiA9PT0gdW5kZWZpbmVkKSB7IHRtcC52YWxpZF9jaGlsZHJlbiA9IC0xOyB9XHJcblx0XHRcdHJldHVybiB0bXA7XHJcblx0XHR9O1xyXG5cdFx0LyoqXHJcblx0XHQgKiB1c2VkIHRvIHJldHJpZXZlIHRoZSB0eXBlIHN0cmluZyBvciBzZXR0aW5ncyBvYmplY3QgZm9yIGEgbm9kZVxyXG5cdFx0ICogQG5hbWUgZ2V0X3R5cGUob2JqIFssIHJ1bGVzXSlcclxuXHRcdCAqIEBwYXJhbSB7bWl4ZWR9IG9iaiB0aGUgbm9kZSB0byBmaW5kIHRoZSBydWxlcyBmb3JcclxuXHRcdCAqIEBwYXJhbSB7Qm9vbGVhbn0gcnVsZXMgaWYgc2V0IHRvIGB0cnVlYCBpbnN0ZWFkIG9mIGEgc3RyaW5nIHRoZSBzZXR0aW5ncyBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZFxyXG5cdFx0ICogQHJldHVybiB7U3RyaW5nfE9iamVjdH1cclxuXHRcdCAqIEBwbHVnaW4gdHlwZXNcclxuXHRcdCAqL1xyXG5cdFx0dGhpcy5nZXRfdHlwZSA9IGZ1bmN0aW9uIChvYmosIHJ1bGVzKSB7XHJcblx0XHRcdG9iaiA9IHRoaXMuZ2V0X25vZGUob2JqKTtcclxuXHRcdFx0cmV0dXJuICghb2JqKSA/IGZhbHNlIDogKCBydWxlcyA/ICQuZXh0ZW5kKHsgJ3R5cGUnIDogb2JqLnR5cGUgfSwgdGhpcy5zZXR0aW5ncy50eXBlc1tvYmoudHlwZV0pIDogb2JqLnR5cGUpO1xyXG5cdFx0fTtcclxuXHRcdC8qKlxyXG5cdFx0ICogdXNlZCB0byBjaGFuZ2UgYSBub2RlJ3MgdHlwZVxyXG5cdFx0ICogQG5hbWUgc2V0X3R5cGUob2JqLCB0eXBlKVxyXG5cdFx0ICogQHBhcmFtIHttaXhlZH0gb2JqIHRoZSBub2RlIHRvIGNoYW5nZVxyXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgdGhlIG5ldyB0eXBlXHJcblx0XHQgKiBAcGx1Z2luIHR5cGVzXHJcblx0XHQgKi9cclxuXHRcdHRoaXMuc2V0X3R5cGUgPSBmdW5jdGlvbiAob2JqLCB0eXBlKSB7XHJcblx0XHRcdHZhciB0LCB0MSwgdDIsIG9sZF90eXBlLCBvbGRfaWNvbjtcclxuXHRcdFx0aWYoJC5pc0FycmF5KG9iaikpIHtcclxuXHRcdFx0XHRvYmogPSBvYmouc2xpY2UoKTtcclxuXHRcdFx0XHRmb3IodDEgPSAwLCB0MiA9IG9iai5sZW5ndGg7IHQxIDwgdDI7IHQxKyspIHtcclxuXHRcdFx0XHRcdHRoaXMuc2V0X3R5cGUob2JqW3QxXSwgdHlwZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdHQgPSB0aGlzLnNldHRpbmdzLnR5cGVzO1xyXG5cdFx0XHRvYmogPSB0aGlzLmdldF9ub2RlKG9iaik7XHJcblx0XHRcdGlmKCF0W3R5cGVdIHx8ICFvYmopIHsgcmV0dXJuIGZhbHNlOyB9XHJcblx0XHRcdG9sZF90eXBlID0gb2JqLnR5cGU7XHJcblx0XHRcdG9sZF9pY29uID0gdGhpcy5nZXRfaWNvbihvYmopO1xyXG5cdFx0XHRvYmoudHlwZSA9IHR5cGU7XHJcblx0XHRcdGlmKG9sZF9pY29uID09PSB0cnVlIHx8ICh0W29sZF90eXBlXSAmJiB0W29sZF90eXBlXS5pY29uICYmIG9sZF9pY29uID09PSB0W29sZF90eXBlXS5pY29uKSkge1xyXG5cdFx0XHRcdHRoaXMuc2V0X2ljb24ob2JqLCB0W3R5cGVdLmljb24gIT09IHVuZGVmaW5lZCA/IHRbdHlwZV0uaWNvbiA6IHRydWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fTtcclxuXHR9O1xyXG5cdC8vIGluY2x1ZGUgdGhlIHR5cGVzIHBsdWdpbiBieSBkZWZhdWx0XHJcblx0Ly8gJC5qc3RyZWUuZGVmYXVsdHMucGx1Z2lucy5wdXNoKFwidHlwZXNcIik7XHJcblxyXG4vKipcclxuICogIyMjIFVuaXF1ZSBwbHVnaW5cclxuICpcclxuICogRW5mb3JjZXMgdGhhdCBubyBub2RlcyB3aXRoIHRoZSBzYW1lIG5hbWUgY2FuIGNvZXhpc3QgYXMgc2libGluZ3MuXHJcbiAqL1xyXG5cclxuXHQkLmpzdHJlZS5wbHVnaW5zLnVuaXF1ZSA9IGZ1bmN0aW9uIChvcHRpb25zLCBwYXJlbnQpIHtcclxuXHRcdHRoaXMuY2hlY2sgPSBmdW5jdGlvbiAoY2hrLCBvYmosIHBhciwgcG9zKSB7XHJcblx0XHRcdGlmKHBhcmVudC5jaGVjay5jYWxsKHRoaXMsIGNoaywgb2JqLCBwYXIsIHBvcykgPT09IGZhbHNlKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cdFx0XHRvYmogPSBvYmogJiYgb2JqLmlkID8gb2JqIDogdGhpcy5nZXRfbm9kZShvYmopO1xyXG5cdFx0XHRwYXIgPSBwYXIgJiYgcGFyLmlkID8gcGFyIDogdGhpcy5nZXRfbm9kZShwYXIpO1xyXG5cdFx0XHRpZighcGFyIHx8ICFwYXIuY2hpbGRyZW4pIHsgcmV0dXJuIHRydWU7IH1cclxuXHRcdFx0dmFyIG4gPSBjaGsgPT09IFwicmVuYW1lX25vZGVcIiA/IHBvcyA6IG9iai50ZXh0LFxyXG5cdFx0XHRcdGMgPSBbXSxcclxuXHRcdFx0XHRtID0gdGhpcy5fbW9kZWwuZGF0YSwgaSwgajtcclxuXHRcdFx0Zm9yKGkgPSAwLCBqID0gcGFyLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG5cdFx0XHRcdGMucHVzaChtW3Bhci5jaGlsZHJlbltpXV0udGV4dCk7XHJcblx0XHRcdH1cclxuXHRcdFx0c3dpdGNoKGNoaykge1xyXG5cdFx0XHRcdGNhc2UgXCJkZWxldGVfbm9kZVwiOlxyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0Y2FzZSBcInJlbmFtZV9ub2RlXCI6XHJcblx0XHRcdFx0Y2FzZSBcImNvcHlfbm9kZVwiOlxyXG5cdFx0XHRcdFx0aSA9ICgkLmluQXJyYXkobiwgYykgPT09IC0xKTtcclxuXHRcdFx0XHRcdGlmKCFpKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yID0geyAnZXJyb3InIDogJ2NoZWNrJywgJ3BsdWdpbicgOiAndW5pcXVlJywgJ2lkJyA6ICd1bmlxdWVfMDEnLCAncmVhc29uJyA6ICdDaGlsZCB3aXRoIG5hbWUgJyArIG4gKyAnIGFscmVhZHkgZXhpc3RzLiBQcmV2ZW50aW5nOiAnICsgY2hrLCAnZGF0YScgOiBKU09OLnN0cmluZ2lmeSh7ICdjaGsnIDogY2hrLCAncG9zJyA6IHBvcywgJ29iaicgOiBvYmogJiYgb2JqLmlkID8gb2JqLmlkIDogZmFsc2UsICdwYXInIDogcGFyICYmIHBhci5pZCA/IHBhci5pZCA6IGZhbHNlIH0pIH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gaTtcclxuXHRcdFx0XHRjYXNlIFwibW92ZV9ub2RlXCI6XHJcblx0XHRcdFx0XHRpID0gKG9iai5wYXJlbnQgPT09IHBhci5pZCB8fCAkLmluQXJyYXkobiwgYykgPT09IC0xKTtcclxuXHRcdFx0XHRcdGlmKCFpKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuX2RhdGEuY29yZS5sYXN0X2Vycm9yID0geyAnZXJyb3InIDogJ2NoZWNrJywgJ3BsdWdpbicgOiAndW5pcXVlJywgJ2lkJyA6ICd1bmlxdWVfMDEnLCAncmVhc29uJyA6ICdDaGlsZCB3aXRoIG5hbWUgJyArIG4gKyAnIGFscmVhZHkgZXhpc3RzLiBQcmV2ZW50aW5nOiAnICsgY2hrLCAnZGF0YScgOiBKU09OLnN0cmluZ2lmeSh7ICdjaGsnIDogY2hrLCAncG9zJyA6IHBvcywgJ29iaicgOiBvYmogJiYgb2JqLmlkID8gb2JqLmlkIDogZmFsc2UsICdwYXInIDogcGFyICYmIHBhci5pZCA/IHBhci5pZCA6IGZhbHNlIH0pIH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gaTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH07XHJcblx0fTtcclxuXHJcblx0Ly8gaW5jbHVkZSB0aGUgdW5pcXVlIHBsdWdpbiBieSBkZWZhdWx0XHJcblx0Ly8gJC5qc3RyZWUuZGVmYXVsdHMucGx1Z2lucy5wdXNoKFwidW5pcXVlXCIpO1xyXG5cclxuXHJcbi8qKlxyXG4gKiAjIyMgV2hvbGVyb3cgcGx1Z2luXHJcbiAqXHJcbiAqIE1ha2VzIGVhY2ggbm9kZSBhcHBlYXIgYmxvY2sgbGV2ZWwuIE1ha2luZyBzZWxlY3Rpb24gZWFzaWVyLiBNYXkgY2F1c2Ugc2xvdyBkb3duIGZvciBsYXJnZSB0cmVlcyBpbiBvbGQgYnJvd3NlcnMuXHJcbiAqL1xyXG5cclxuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblx0ZGl2LnNldEF0dHJpYnV0ZSgndW5zZWxlY3RhYmxlJywnb24nKTtcclxuXHRkaXYuY2xhc3NOYW1lID0gJ2pzdHJlZS13aG9sZXJvdyc7XHJcblx0ZGl2LmlubmVySFRNTCA9ICcmIzE2MDsnO1xyXG5cdCQuanN0cmVlLnBsdWdpbnMud2hvbGVyb3cgPSBmdW5jdGlvbiAob3B0aW9ucywgcGFyZW50KSB7XHJcblx0XHR0aGlzLmJpbmQgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHBhcmVudC5iaW5kLmNhbGwodGhpcyk7XHJcblxyXG5cdFx0XHR0aGlzLmVsZW1lbnRcclxuXHRcdFx0XHQub24oJ2xvYWRpbmcnLCAkLnByb3h5KGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdFx0ZGl2LnN0eWxlLmhlaWdodCA9IHRoaXMuX2RhdGEuY29yZS5saV9oZWlnaHQgKyAncHgnO1xyXG5cdFx0XHRcdFx0fSwgdGhpcykpXHJcblx0XHRcdFx0Lm9uKCdyZWFkeS5qc3RyZWUgc2V0X3N0YXRlLmpzdHJlZScsICQucHJveHkoZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmhpZGVfZG90cygpO1xyXG5cdFx0XHRcdFx0fSwgdGhpcykpXHJcblx0XHRcdFx0Lm9uKFwicmVhZHkuanN0cmVlXCIsICQucHJveHkoZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmdldF9jb250YWluZXJfdWwoKS5hZGRDbGFzcygnanN0cmVlLXdob2xlcm93LXVsJyk7XHJcblx0XHRcdFx0XHR9LCB0aGlzKSlcclxuXHRcdFx0XHQub24oXCJkZXNlbGVjdF9hbGwuanN0cmVlXCIsICQucHJveHkoZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5lbGVtZW50LmZpbmQoJy5qc3RyZWUtd2hvbGVyb3ctY2xpY2tlZCcpLnJlbW92ZUNsYXNzKCdqc3RyZWUtd2hvbGVyb3ctY2xpY2tlZCcpO1xyXG5cdFx0XHRcdFx0fSwgdGhpcykpXHJcblx0XHRcdFx0Lm9uKFwiY2hhbmdlZC5qc3RyZWVcIiwgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmVsZW1lbnQuZmluZCgnLmpzdHJlZS13aG9sZXJvdy1jbGlja2VkJykucmVtb3ZlQ2xhc3MoJ2pzdHJlZS13aG9sZXJvdy1jbGlja2VkJyk7XHJcblx0XHRcdFx0XHRcdHZhciB0bXAgPSBmYWxzZSwgaSwgajtcclxuXHRcdFx0XHRcdFx0Zm9yKGkgPSAwLCBqID0gZGF0YS5zZWxlY3RlZC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHR0bXAgPSB0aGlzLmdldF9ub2RlKGRhdGEuc2VsZWN0ZWRbaV0sIHRydWUpO1xyXG5cdFx0XHRcdFx0XHRcdGlmKHRtcCAmJiB0bXAubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0bXAuY2hpbGRyZW4oJy5qc3RyZWUtd2hvbGVyb3cnKS5hZGRDbGFzcygnanN0cmVlLXdob2xlcm93LWNsaWNrZWQnKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sIHRoaXMpKVxyXG5cdFx0XHRcdC5vbihcIm9wZW5fbm9kZS5qc3RyZWVcIiwgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmdldF9ub2RlKGRhdGEubm9kZSwgdHJ1ZSkuZmluZCgnLmpzdHJlZS1jbGlja2VkJykucGFyZW50KCkuY2hpbGRyZW4oJy5qc3RyZWUtd2hvbGVyb3cnKS5hZGRDbGFzcygnanN0cmVlLXdob2xlcm93LWNsaWNrZWQnKTtcclxuXHRcdFx0XHRcdH0sIHRoaXMpKVxyXG5cdFx0XHRcdC5vbihcImhvdmVyX25vZGUuanN0cmVlIGRlaG92ZXJfbm9kZS5qc3RyZWVcIiwgJC5wcm94eShmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmdldF9ub2RlKGRhdGEubm9kZSwgdHJ1ZSkuY2hpbGRyZW4oJy5qc3RyZWUtd2hvbGVyb3cnKVtlLnR5cGUgPT09IFwiaG92ZXJfbm9kZVwiP1wiYWRkQ2xhc3NcIjpcInJlbW92ZUNsYXNzXCJdKCdqc3RyZWUtd2hvbGVyb3ctaG92ZXJlZCcpO1xyXG5cdFx0XHRcdFx0fSwgdGhpcykpXHJcblx0XHRcdFx0Lm9uKFwiY29udGV4dG1lbnUuanN0cmVlXCIsIFwiLmpzdHJlZS13aG9sZXJvd1wiLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdFx0JChlLmN1cnJlbnRUYXJnZXQpLmNsb3Nlc3QoXCJsaVwiKS5jaGlsZHJlbihcImE6ZXEoMClcIikudHJpZ2dlcignY29udGV4dG1lbnUnLGUpO1xyXG5cdFx0XHRcdFx0fSwgdGhpcykpXHJcblx0XHRcdFx0Lm9uKFwiY2xpY2suanN0cmVlXCIsIFwiLmpzdHJlZS13aG9sZXJvd1wiLCBmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHRcdFx0XHR2YXIgdG1wID0gJC5FdmVudCgnY2xpY2snLCB7IG1ldGFLZXkgOiBlLm1ldGFLZXksIGN0cmxLZXkgOiBlLmN0cmxLZXksIGFsdEtleSA6IGUuYWx0S2V5LCBzaGlmdEtleSA6IGUuc2hpZnRLZXkgfSk7XHJcblx0XHRcdFx0XHRcdCQoZS5jdXJyZW50VGFyZ2V0KS5jbG9zZXN0KFwibGlcIikuY2hpbGRyZW4oXCJhOmVxKDApXCIpLnRyaWdnZXIodG1wKS5mb2N1cygpO1xyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHQub24oXCJjbGljay5qc3RyZWVcIiwgXCIuanN0cmVlLWxlYWYgPiAuanN0cmVlLW9jbFwiLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdFx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcblx0XHRcdFx0XHRcdHZhciB0bXAgPSAkLkV2ZW50KCdjbGljaycsIHsgbWV0YUtleSA6IGUubWV0YUtleSwgY3RybEtleSA6IGUuY3RybEtleSwgYWx0S2V5IDogZS5hbHRLZXksIHNoaWZ0S2V5IDogZS5zaGlmdEtleSB9KTtcclxuXHRcdFx0XHRcdFx0JChlLmN1cnJlbnRUYXJnZXQpLmNsb3Nlc3QoXCJsaVwiKS5jaGlsZHJlbihcImE6ZXEoMClcIikudHJpZ2dlcih0bXApLmZvY3VzKCk7XHJcblx0XHRcdFx0XHR9LCB0aGlzKSlcclxuXHRcdFx0XHQub24oXCJtb3VzZW92ZXIuanN0cmVlXCIsIFwiLmpzdHJlZS13aG9sZXJvdywgLmpzdHJlZS1pY29uXCIsICQucHJveHkoZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5ob3Zlcl9ub2RlKGUuY3VycmVudFRhcmdldCk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH0sIHRoaXMpKVxyXG5cdFx0XHRcdC5vbihcIm1vdXNlbGVhdmUuanN0cmVlXCIsIFwiLmpzdHJlZS1ub2RlXCIsICQucHJveHkoZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5kZWhvdmVyX25vZGUoZS5jdXJyZW50VGFyZ2V0KTtcclxuXHRcdFx0XHRcdH0sIHRoaXMpKTtcclxuXHRcdH07XHJcblx0XHR0aGlzLnRlYXJkb3duID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRpZih0aGlzLnNldHRpbmdzLndob2xlcm93KSB7XHJcblx0XHRcdFx0dGhpcy5lbGVtZW50LmZpbmQoXCIuanN0cmVlLXdob2xlcm93XCIpLnJlbW92ZSgpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHBhcmVudC50ZWFyZG93bi5jYWxsKHRoaXMpO1xyXG5cdFx0fTtcclxuXHRcdHRoaXMucmVkcmF3X25vZGUgPSBmdW5jdGlvbihvYmosIGRlZXAsIGNhbGxiYWNrKSB7XHJcblx0XHRcdG9iaiA9IHBhcmVudC5yZWRyYXdfbm9kZS5jYWxsKHRoaXMsIG9iaiwgZGVlcCwgY2FsbGJhY2spO1xyXG5cdFx0XHRpZihvYmopIHtcclxuXHRcdFx0XHR2YXIgdG1wID0gZGl2LmNsb25lTm9kZSh0cnVlKTtcclxuXHRcdFx0XHQvL3RtcC5zdHlsZS5oZWlnaHQgPSB0aGlzLl9kYXRhLmNvcmUubGlfaGVpZ2h0ICsgJ3B4JztcclxuXHRcdFx0XHRpZigkLmluQXJyYXkob2JqLmlkLCB0aGlzLl9kYXRhLmNvcmUuc2VsZWN0ZWQpICE9PSAtMSkgeyB0bXAuY2xhc3NOYW1lICs9ICcganN0cmVlLXdob2xlcm93LWNsaWNrZWQnOyB9XHJcblx0XHRcdFx0b2JqLmluc2VydEJlZm9yZSh0bXAsIG9iai5jaGlsZE5vZGVzWzBdKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gb2JqO1xyXG5cdFx0fTtcclxuXHR9O1xyXG5cdC8vIGluY2x1ZGUgdGhlIHdob2xlcm93IHBsdWdpbiBieSBkZWZhdWx0XHJcblx0Ly8gJC5qc3RyZWUuZGVmYXVsdHMucGx1Z2lucy5wdXNoKFwid2hvbGVyb3dcIik7XHJcblxyXG59KSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/swfobject.js b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/swfobject.js index e8b454e044c..296625bf455 100644 --- a/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/swfobject.js +++ b/src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/swfobject.js @@ -7,4 +7,4 @@ is released under the MIT License */ var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab .layout-element-wrapper .layout-content-markup > .form-field-element.form-field-element-enumeration ol { list-style: none; } -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR5bmFtaWNGb3Jtcy1BZG1pbi5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7Ozs7O0lBS0ksWUFBWTtDQUNmOztBQUVEO0lBQ0ksaUJBQWlCO0NBQ3BCIiwiZmlsZSI6IkR5bmFtaWNGb3Jtcy1BZG1pbi5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gLmZvcm0tZmllbGQtZWxlbWVudCBpbnB1dFt0eXBlPVwidGV4dFwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAuZm9ybS1maWVsZC1lbGVtZW50IGlucHV0W3R5cGU9XCJwYXNzd29yZFwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAuZm9ybS1maWVsZC1lbGVtZW50IGlucHV0W3R5cGU9XCJlbWFpbFwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAuZm9ybS1maWVsZC1lbGVtZW50IGlucHV0W3R5cGU9XCJ0ZWxcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gLmZvcm0tZmllbGQtZWxlbWVudCB0ZXh0YXJlYSB7XG4gICAgd2lkdGg6IDEwMCU7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAuZm9ybS1maWVsZC1lbGVtZW50LmZvcm0tZmllbGQtZWxlbWVudC1lbnVtZXJhdGlvbiBvbCB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbn0iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */ +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR5bmFtaWNGb3Jtcy1BZG1pbi5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7Ozs7O0lBS0ksWUFBWTtDQUNmOztBQUVEO0lBQ0ksaUJBQWlCO0NBQ3BCIiwiZmlsZSI6IkR5bmFtaWNGb3Jtcy1BZG1pbi5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gLmZvcm0tZmllbGQtZWxlbWVudCBpbnB1dFt0eXBlPVwidGV4dFwiXSxcclxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA+IC5mb3JtLWZpZWxkLWVsZW1lbnQgaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdLFxyXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gLmZvcm0tZmllbGQtZWxlbWVudCBpbnB1dFt0eXBlPVwiZW1haWxcIl0sXHJcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAuZm9ybS1maWVsZC1lbGVtZW50IGlucHV0W3R5cGU9XCJ0ZWxcIl0sXHJcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAuZm9ybS1maWVsZC1lbGVtZW50IHRleHRhcmVhIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG59XHJcblxyXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gLmZvcm0tZmllbGQtZWxlbWVudC5mb3JtLWZpZWxkLWVsZW1lbnQtZW51bWVyYXRpb24gb2wge1xyXG4gICAgbGlzdC1zdHlsZTogbm9uZTtcclxufSJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== */ diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Styles/DynamicForms.css b/src/Orchard.Web/Modules/Orchard.DynamicForms/Styles/DynamicForms.css index b8a8a6cbaee..ae23dd3453f 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Styles/DynamicForms.css +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Styles/DynamicForms.css @@ -28,4 +28,4 @@ .form-field-element { margin: 0.8em 0 0 0; } -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR5bmFtaWNGb3Jtcy5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7Z0VBQ2dFO0FBQ2hFOzs7SUFHSSxXQUFXO0lBQ1gsbUJBQW1CO0lBQ25CLHFCQUFxQjtDQUN4Qjs7QUFFRDtnRUFDZ0U7QUFDaEU7S0FDSyx5QkFBeUI7Q0FDN0I7O0FBRUQ7S0FDSyxlQUFlO0NBQ25COztBQUVEO2dFQUNnRTtBQUNoRTtJQUNJLG9CQUFvQjtDQUN2QiIsImZpbGUiOiJEeW5hbWljRm9ybXMuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyogRm9ybXNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi5keW5hbWljLWZvcm0gaW5wdXRbdHlwZT0ndGV4dCddLFxuLmR5bmFtaWMtZm9ybSBpbnB1dC50ZXh0LFxuLmR5bmFtaWMtZm9ybSB0ZXh0YXJlYS50ZXh0IHtcbiAgICB3aWR0aDogOTklO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjhlbTtcbn1cblxuLyogVmFsaWRhdGlvblxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLmlucHV0LXZhbGlkYXRpb24tZXJyb3IsIGlucHV0LnRleHQuaW5wdXQtdmFsaWRhdGlvbi1lcnJvciB7XG4gICAgIGJvcmRlcjoxcHggc29saWQgIzk5MDgwODtcbn1cblxuLmZpZWxkLXZhbGlkYXRpb24tZXJyb3Ige1xuICAgICBjb2xvcjogIzk5MDgwODtcbn1cblxuLyogRWxlbWVudHNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi5mb3JtLWZpZWxkLWVsZW1lbnQge1xuICAgIG1hcmdpbjogMC44ZW0gMCAwIDA7XG59Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */ +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR5bmFtaWNGb3Jtcy5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7Z0VBQ2dFO0FBQ2hFOzs7SUFHSSxXQUFXO0lBQ1gsbUJBQW1CO0lBQ25CLHFCQUFxQjtDQUN4Qjs7QUFFRDtnRUFDZ0U7QUFDaEU7S0FDSyx5QkFBeUI7Q0FDN0I7O0FBRUQ7S0FDSyxlQUFlO0NBQ25COztBQUVEO2dFQUNnRTtBQUNoRTtJQUNJLG9CQUFvQjtDQUN2QiIsImZpbGUiOiJEeW5hbWljRm9ybXMuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyogRm9ybXNcclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4uZHluYW1pYy1mb3JtIGlucHV0W3R5cGU9J3RleHQnXSxcclxuLmR5bmFtaWMtZm9ybSBpbnB1dC50ZXh0LFxyXG4uZHluYW1pYy1mb3JtIHRleHRhcmVhLnRleHQge1xyXG4gICAgd2lkdGg6IDk5JTtcclxuICAgIGxpbmUtaGVpZ2h0OiAxLjVlbTtcclxuICAgIG1hcmdpbi1ib3R0b206IDAuOGVtO1xyXG59XHJcblxyXG4vKiBWYWxpZGF0aW9uXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLmlucHV0LXZhbGlkYXRpb24tZXJyb3IsIGlucHV0LnRleHQuaW5wdXQtdmFsaWRhdGlvbi1lcnJvciB7XHJcbiAgICAgYm9yZGVyOjFweCBzb2xpZCAjOTkwODA4O1xyXG59XHJcblxyXG4uZmllbGQtdmFsaWRhdGlvbi1lcnJvciB7XHJcbiAgICAgY29sb3I6ICM5OTA4MDg7XHJcbn1cclxuXHJcbi8qIEVsZW1lbnRzXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLmZvcm0tZmllbGQtZWxlbWVudCB7XHJcbiAgICBtYXJnaW46IDAuOGVtIDAgMCAwO1xyXG59Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */ diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/Models.js b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/Models.js index ba66ec8ba89..87349cbd607 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/Models.js +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/Models.js @@ -1038,4 +1038,4 @@ var LayoutEditor; }; })(LayoutEditor || (LayoutEditor = {})); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1vZGVscy5qcyIsIkhlbHBlcnMuanMiLCJFZGl0b3IuanMiLCJSZWN5Y2xlQmluLmpzIiwiRWxlbWVudC5qcyIsIkNvbnRhaW5lci5qcyIsIkNhbnZhcy5qcyIsIkdyaWQuanMiLCJSb3cuanMiLCJDb2x1bW4uanMiLCJDb250ZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDdE5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzdSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzVKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJNb2RlbHMuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsInZhciBMYXlvdXRFZGl0b3I7XG4oZnVuY3Rpb24gKExheW91dEVkaXRvcikge1xuXG4gICAgQXJyYXkucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcbiAgICAgICAgdGhpcy5zcGxpY2UodG8sIDAsIHRoaXMuc3BsaWNlKGZyb20sIDEpWzBdKTtcbiAgICB9O1xuXG4gICAgTGF5b3V0RWRpdG9yLmNoaWxkcmVuRnJvbSA9IGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICByZXR1cm4gXyh2YWx1ZXMpLm1hcChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIExheW91dEVkaXRvci5lbGVtZW50RnJvbSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICB2YXIgcmVnaXN0ZXJGYWN0b3J5ID0gTGF5b3V0RWRpdG9yLnJlZ2lzdGVyRmFjdG9yeSA9IGZ1bmN0aW9uKHR5cGUsIGZhY3RvcnkpIHtcbiAgICAgICAgdmFyIGZhY3RvcmllcyA9IExheW91dEVkaXRvci5mYWN0b3JpZXMgPSBMYXlvdXRFZGl0b3IuZmFjdG9yaWVzIHx8IHt9O1xuICAgICAgICBmYWN0b3JpZXNbdHlwZV0gPSBmYWN0b3J5O1xuICAgIH07XG5cbiAgICByZWdpc3RlckZhY3RvcnkoXCJDYW52YXNcIiwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBMYXlvdXRFZGl0b3IuQ2FudmFzLmZyb20odmFsdWUpOyB9KTtcbiAgICByZWdpc3RlckZhY3RvcnkoXCJHcmlkXCIsIGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiBMYXlvdXRFZGl0b3IuR3JpZC5mcm9tKHZhbHVlKTsgfSk7XG4gICAgcmVnaXN0ZXJGYWN0b3J5KFwiUm93XCIsIGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiBMYXlvdXRFZGl0b3IuUm93LmZyb20odmFsdWUpOyB9KTtcbiAgICByZWdpc3RlckZhY3RvcnkoXCJDb2x1bW5cIiwgZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIExheW91dEVkaXRvci5Db2x1bW4uZnJvbSh2YWx1ZSk7IH0pO1xuICAgIHJlZ2lzdGVyRmFjdG9yeShcIkNvbnRlbnRcIiwgZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIExheW91dEVkaXRvci5Db250ZW50LmZyb20odmFsdWUpOyB9KTtcblxuICAgIExheW91dEVkaXRvci5lbGVtZW50RnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgZmFjdG9yeSA9IExheW91dEVkaXRvci5mYWN0b3JpZXNbdmFsdWUudHlwZV07XG5cbiAgICAgICAgaWYgKCFmYWN0b3J5KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZWxlbWVudCB3aXRoIHR5cGUgXFxcIlwiICsgdmFsdWUudHlwZSArIFwiXFxcIiB3YXMgZm91bmQuXCIpO1xuXG4gICAgICAgIHZhciBlbGVtZW50ID0gZmFjdG9yeSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH07XG5cbiAgICBMYXlvdXRFZGl0b3Iuc2V0TW9kZWwgPSBmdW5jdGlvbiAoZWxlbWVudFNlbGVjdG9yLCBtb2RlbCkge1xuICAgICAgICAkKGVsZW1lbnRTZWxlY3Rvcikuc2NvcGUoKS5lbGVtZW50ID0gbW9kZWw7XG4gICAgfTtcblxuICAgIExheW91dEVkaXRvci5nZXRNb2RlbCA9IGZ1bmN0aW9uIChlbGVtZW50U2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuICQoZWxlbWVudFNlbGVjdG9yKS5zY29wZSgpLmVsZW1lbnQ7XG4gICAgfTtcblxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyIsInZhciBMYXlvdXRFZGl0b3I7XG4oZnVuY3Rpb24gKExheW91dEVkaXRvcikge1xuXG4gICAgTGF5b3V0RWRpdG9yLkVkaXRvciA9IGZ1bmN0aW9uIChjb25maWcsIGNhbnZhc0RhdGEpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMuY2FudmFzID0gTGF5b3V0RWRpdG9yLkNhbnZhcy5mcm9tKGNhbnZhc0RhdGEpO1xuICAgICAgICB0aGlzLmluaXRpYWxTdGF0ZSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY2FudmFzLnRvT2JqZWN0KCkpO1xuICAgICAgICB0aGlzLmFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5kcm9wVGFyZ2V0RWxlbWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUmVzaXppbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWN5Y2xlQmluID0gbmV3IExheW91dEVkaXRvci5SZWN5Y2xlQmluKCk7XG5cbiAgICAgICAgdGhpcy5yZXNldFRvb2xib3hFbGVtZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMudG9vbGJveEVsZW1lbnRzID0gW1xuICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5Sb3cuZnJvbSh7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY2FudmFzLnRvT2JqZWN0KCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbFN0YXRlICE9IGN1cnJlbnRTdGF0ZTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnJlc2V0VG9vbGJveEVsZW1lbnRzKCk7XG4gICAgICAgIHRoaXMuY2FudmFzLnNldEVkaXRvcih0aGlzKTtcbiAgICB9O1xuXG59KShMYXlvdXRFZGl0b3IgfHwgKExheW91dEVkaXRvciA9IHt9KSk7XG4iLCJ2YXIgTGF5b3V0RWRpdG9yO1xuKGZ1bmN0aW9uIChMYXlvdXRFZGl0b3IpIHtcblxuICAgIExheW91dEVkaXRvci5SZWN5Y2xlQmluID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gW107XG5cbiAgICAgICAgdGhpcy5hZGQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy50b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJSZWN5Y2xlQmluXCIsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudHNbaV07XG4gICAgICAgICAgICAgICAgdmFyIGR0byA9IGVsZW1lbnQudG9PYmplY3QoKTtcbiAgICAgICAgICAgICAgICByZXN1bHQuY2hpbGRyZW4ucHVzaChkdG8pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgIH07XG5cbn0pKExheW91dEVkaXRvciB8fCAoTGF5b3V0RWRpdG9yID0ge30pKTtcbiIsInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwgZGF0YSwgaHRtbElkLCBodG1sQ2xhc3MsIGh0bWxTdHlsZSwgaXNUZW1wbGF0ZWQsIHJ1bGUpIHtcclxuICAgICAgICBpZiAoIXR5cGUpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlciAndHlwZScgaXMgcmVxdWlyZWQuXCIpO1xyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuaHRtbElkID0gaHRtbElkO1xyXG4gICAgICAgIHRoaXMuaHRtbENsYXNzID0gaHRtbENsYXNzO1xyXG4gICAgICAgIHRoaXMuaHRtbFN0eWxlID0gaHRtbFN0eWxlO1xyXG4gICAgICAgIHRoaXMuaXNUZW1wbGF0ZWQgPSBpc1RlbXBsYXRlZDtcclxuICAgICAgICB0aGlzLnJ1bGUgPSBydWxlO1xyXG5cclxuICAgICAgICB0aGlzLnRlbXBsYXRlU3R5bGVzID0ge307XHJcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNldElzRm9jdXNlZEV2ZW50SGFuZGxlcnMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRFZGl0b3IgPSBmdW5jdGlvbiAoZWRpdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yO1xyXG4gICAgICAgICAgICBpZiAoISF0aGlzLmNoaWxkcmVuICYmIF8uaXNBcnJheSh0aGlzLmNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICAgICAgXyh0aGlzLmNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnNldEVkaXRvcihlZGl0b3IpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNldFBhcmVudCA9IGZ1bmN0aW9uKHBhcmVudEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5vbkNoaWxkQWRkZWQodGhpcyk7XHJcblxyXG4gICAgICAgICAgICB2YXIgY3VycmVudEFuY2VzdG9yID0gcGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgd2hpbGUgKCEhY3VycmVudEFuY2VzdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50QW5jZXN0b3Iub25EZXNjZW5kYW50QWRkZWQodGhpcywgcGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50QW5jZXN0b3IgPSBjdXJyZW50QW5jZXN0b3IucGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRJc1RlbXBsYXRlZCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzVGVtcGxhdGVkID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMuY2hpbGRyZW4gJiYgXy5pc0FycmF5KHRoaXMuY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgICAgICAgICBfKHRoaXMuY2hpbGRyZW4pLmVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc2V0SXNUZW1wbGF0ZWQodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmFwcGx5RWxlbWVudEVkaXRvck1vZGVsID0gZnVuY3Rpb24oKSB7IC8qIFZpcnR1YWwgKi8gfTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRJc0FjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmVkaXRvcilcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yLmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMgJiYgIXRoaXMuZ2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRJc0FjdGl2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZWRpdG9yKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3IuaXNEcmFnZ2luZyB8fCB0aGlzLmVkaXRvci5pc1Jlc2l6aW5nKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuYWN0aXZlRWxlbWVudCA9IHRoaXM7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmFjdGl2ZUVsZW1lbnQgPSB0aGlzLnBhcmVudDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmdldElzRm9jdXNlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmVkaXRvcilcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yLmZvY3VzZWRFbGVtZW50ID09PSB0aGlzO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SXNGb2N1c2VkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZWRpdG9yKVxyXG4gICAgICAgICAgICBcdHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoaWxkcmVuICYmIHRoaXMuaXNUZW1wbGF0ZWQpXHJcbiAgICAgICAgICAgIFx0cmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3IuaXNEcmFnZ2luZyB8fCB0aGlzLmVkaXRvci5pc1Jlc2l6aW5nKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lZGl0b3IuZm9jdXNlZEVsZW1lbnQgPSB0aGlzO1xyXG4gICAgICAgICAgICBfKHRoaXMuc2V0SXNGb2N1c2VkRXZlbnRIYW5kbGVycykuZWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0SXNTZWxlY3RlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0SXNGb2N1c2VkKCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICghIXRoaXMuY2hpbGRyZW4gJiYgXy5pc0FycmF5KHRoaXMuY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXyh0aGlzLmNoaWxkcmVuKS5hbnkoZnVuY3Rpb24oY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQuZ2V0SXNTZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmdldElzRHJvcFRhcmdldCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmVkaXRvcilcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yLmRyb3BUYXJnZXRFbGVtZW50ID09PSB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRJc0Ryb3BUYXJnZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmVkaXRvcilcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuZHJvcFRhcmdldEVsZW1lbnQgPSB0aGlzO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5kcm9wVGFyZ2V0RWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5EZWxldGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGVtcGxhdGVkIHx8ICF0aGlzLnBhcmVudClcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5kZWxldGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5EZWxldGUoKSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQuZGVsZXRlQ2hpbGQodGhpcyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5Nb3ZlVXAgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGVtcGxhdGVkIHx8ICF0aGlzLnBhcmVudClcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmNhbk1vdmVDaGlsZFVwKHRoaXMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMubW92ZVVwID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuTW92ZVVwKCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Lm1vdmVDaGlsZFVwKHRoaXMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuTW92ZURvd24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGVtcGxhdGVkIHx8ICF0aGlzLnBhcmVudClcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmNhbk1vdmVDaGlsZERvd24odGhpcyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5tb3ZlRG93biA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbk1vdmVEb3duKCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Lm1vdmVDaGlsZERvd24odGhpcyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5lbGVtZW50VG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXHJcbiAgICAgICAgICAgICAgICBodG1sSWQ6IHRoaXMuaHRtbElkLFxyXG4gICAgICAgICAgICAgICAgaHRtbENsYXNzOiB0aGlzLmh0bWxDbGFzcyxcclxuICAgICAgICAgICAgICAgIGh0bWxTdHlsZTogdGhpcy5odG1sU3R5bGUsXHJcbiAgICAgICAgICAgICAgICBpc1RlbXBsYXRlZDogdGhpcy5pc1RlbXBsYXRlZCxcclxuICAgICAgICAgICAgICAgIHJ1bGU6IHRoaXMucnVsZSxcclxuICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB0aGlzLmNvbnRlbnRUeXBlLFxyXG4gICAgICAgICAgICAgICAgaGFzRWRpdG9yOiB0aGlzLmhhc0VkaXRvclxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0RWRpdG9yT2JqZWN0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7fTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnRvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5lbGVtZW50VG9PYmplY3QoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAoY2xpcGJvYXJkRGF0YSkge1xyXG4gICAgICAgICAgICB2YXIgdGV4dCA9IHRoaXMuZ2V0SW5uZXJUZXh0KCk7XHJcbiAgICAgICAgICAgIGNsaXBib2FyZERhdGEuc2V0RGF0YShcInRleHQvcGxhaW5cIiwgdGV4dCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMudG9PYmplY3QoKTtcclxuICAgICAgICAgICAgdmFyIGpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCBcIlxcdFwiKTtcclxuICAgICAgICAgICAgY2xpcGJvYXJkRGF0YS5zZXREYXRhKFwidGV4dC9qc29uXCIsIGpzb24pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY3V0ID0gZnVuY3Rpb24gKGNsaXBib2FyZERhdGEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FuRGVsZXRlKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29weShjbGlwYm9hcmREYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnBhc3RlID0gZnVuY3Rpb24gKGNsaXBib2FyZERhdGEpIHtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5wYXJlbnQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5wYXN0ZShjbGlwYm9hcmREYXRhKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmdldFRlbXBsYXRlU3R5bGVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc3R5bGVzID0gdGhpcy50ZW1wbGF0ZVN0eWxlcyB8fCB7fTtcclxuICAgICAgICAgICAgdmFyIGNzcyA9IFwiXCI7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBzdHlsZXMpIHtcclxuICAgICAgICAgICAgICAgIGNzcyArPSBwcm9wZXJ0eSArIFwiOlwiICsgc3R5bGVzW3Byb3BlcnR5XSArIFwiO1wiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gY3NzO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG59KShMYXlvdXRFZGl0b3IgfHwgKExheW91dEVkaXRvciA9IHt9KSk7IiwidmFyIExheW91dEVkaXRvcjtcclxuKGZ1bmN0aW9uIChMYXlvdXRFZGl0b3IpIHtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuQ29udGFpbmVyID0gZnVuY3Rpb24gKGFsbG93ZWRDaGlsZFR5cGVzLCBjaGlsZHJlbikge1xyXG5cclxuICAgICAgICB0aGlzLmFsbG93ZWRDaGlsZFR5cGVzID0gYWxsb3dlZENoaWxkVHlwZXM7XHJcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG4gICAgICAgIHRoaXMuaXNDb250YWluZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyVGVtcGxhdGVTdHlsZXMgPSB7fTtcclxuXHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLm9uQ2hpbGRBZGRlZCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7IC8qIFZpcnR1YWwgKi8gfTtcclxuICAgICAgICB0aGlzLm9uRGVzY2VuZGFudEFkZGVkID0gZnVuY3Rpb24gKGVsZW1lbnQsIHBhcmVudEVsZW1lbnQpIHsgLyogVmlydHVhbCAqLyB9O1xyXG5cclxuICAgICAgICB0aGlzLnNldENoaWxkcmVuID0gZnVuY3Rpb24gKGNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgICAgICAgICAgXyh0aGlzLmNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGQuc2V0UGFyZW50KHNlbGYpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNldENoaWxkcmVuKGNoaWxkcmVuKTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRJc1NlYWxlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF8odGhpcy5jaGlsZHJlbikuYW55KGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLmlzVGVtcGxhdGVkO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgX2Jhc2VTZXRJc0ZvY3VzZWQgPSB0aGlzLnNldElzRm9jdXNlZDtcclxuICAgICAgICB0aGlzLnNldElzRm9jdXNlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0SXNTZWFsZWQoKSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgX2Jhc2VTZXRJc0ZvY3VzZWQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmFkZENoaWxkID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmICghXyh0aGlzLmNoaWxkcmVuKS5jb250YWlucyhjaGlsZCkgJiYgKF8odGhpcy5hbGxvd2VkQ2hpbGRUeXBlcykuY29udGFpbnMoY2hpbGQudHlwZSkgfHwgY2hpbGQuaXNDb250YWluYWJsZSkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xyXG4gICAgICAgICAgICBjaGlsZC5zZXRFZGl0b3IodGhpcy5lZGl0b3IpO1xyXG4gICAgICAgICAgICBjaGlsZC5zZXRJc1RlbXBsYXRlZChmYWxzZSk7XHJcbiAgICAgICAgICAgIGNoaWxkLnNldFBhcmVudCh0aGlzKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmRlbGV0ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjaGlsZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5yZWN5Y2xlQmluLmFkZChjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0SXNBY3RpdmUoKSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5hY3RpdmVFbGVtZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5nZXRJc0ZvY3VzZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBkZWxldGVkIGNoaWxkIHdhcyBmb2N1c2VkLCB0cnkgdG8gc2V0IG5ldyBmb2N1cyB0byB0aGUgbW9zdCBhcHByb3ByaWF0ZSBzaWJsaW5nIG9yIHBhcmVudC5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiBpbmRleClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpbmRleF0uc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2luZGV4IC0gMV0uc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5tb3ZlRm9jdXNQcmV2Q2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoIDwgMilcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNoaWxkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baW5kZXggLSAxXS5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm1vdmVGb2N1c05leHRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPCAyKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY2hpbGQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2luZGV4ICsgMV0uc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnNlcnRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZCwgYWZ0ZXJDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIV8odGhpcy5jaGlsZHJlbikuY29udGFpbnMoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBNYXRoLm1heChfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoYWZ0ZXJDaGlsZCksIDApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXggKyAxLCAwLCBjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5zZXRFZGl0b3IodGhpcy5lZGl0b3IpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMubW92ZUNoaWxkVXAgPSBmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbk1vdmVDaGlsZFVwKGNoaWxkKSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNoaWxkKTtcclxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5tb3ZlKGluZGV4LCBpbmRleCAtIDEpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMubW92ZUNoaWxkRG93biA9IGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuTW92ZUNoaWxkRG93bihjaGlsZCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjaGlsZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ubW92ZShpbmRleCwgaW5kZXggKyAxKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNhbk1vdmVDaGlsZFVwID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjaGlsZCk7XHJcbiAgICAgICAgICAgIHJldHVybiBpbmRleCA+IDA7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5Nb3ZlQ2hpbGREb3duID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjaGlsZCk7XHJcbiAgICAgICAgICAgIHJldHVybiBpbmRleCA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNoaWxkcmVuVG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfKHRoaXMuY2hpbGRyZW4pLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZC50b09iamVjdCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmdldElubmVyVGV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF8odGhpcy5jaGlsZHJlbikucmVkdWNlKGZ1bmN0aW9uIChtZW1vLCBjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lbW8gKyBcIlxcblwiICsgY2hpbGQuZ2V0SW5uZXJUZXh0KCk7XHJcbiAgICAgICAgICAgIH0sIFwiXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wYXN0ZSA9IGZ1bmN0aW9uIChjbGlwYm9hcmREYXRhKSB7XHJcbiAgICAgICAgICAgIHZhciBqc29uID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwidGV4dC9qc29uXCIpO1xyXG4gICAgICAgICAgICBpZiAoISFqc29uKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoanNvbik7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBMYXlvdXRFZGl0b3IuZWxlbWVudEZyb20oZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhc3RlQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXN0ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmIChfKHRoaXMuYWxsb3dlZENoaWxkVHlwZXMpLmNvbnRhaW5zKGNoaWxkLnR5cGUpIHx8IGNoaWxkLmlzQ29udGFpbmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGQuc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoISF0aGlzLnBhcmVudClcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnBhc3RlQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRDb250YWluZXJUZW1wbGF0ZVN0eWxlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHN0eWxlcyA9IHRoaXMuY29udGFpbmVyVGVtcGxhdGVTdHlsZXMgfHwge307XHJcbiAgICAgICAgICAgIHZhciBjc3MgPSBcIlwiO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gc3R5bGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjc3MgKz0gcHJvcGVydHkgKyBcIjpcIiArIHN0eWxlc1twcm9wZXJ0eV0gKyBcIjtcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNzcztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyIsInZhciBMYXlvdXRFZGl0b3I7XG4oZnVuY3Rpb24gKExheW91dEVkaXRvcikge1xuXG4gICAgTGF5b3V0RWRpdG9yLkNhbnZhcyA9IGZ1bmN0aW9uIChkYXRhLCBodG1sSWQsIGh0bWxDbGFzcywgaHRtbFN0eWxlLCBpc1RlbXBsYXRlZCwgcnVsZSwgY2hpbGRyZW4pIHtcbiAgICAgICAgTGF5b3V0RWRpdG9yLkVsZW1lbnQuY2FsbCh0aGlzLCBcIkNhbnZhc1wiLCBkYXRhLCBodG1sSWQsIGh0bWxDbGFzcywgaHRtbFN0eWxlLCBpc1RlbXBsYXRlZCwgcnVsZSk7XG4gICAgICAgIExheW91dEVkaXRvci5Db250YWluZXIuY2FsbCh0aGlzLCBbXCJDYW52YXNcIiwgXCJHcmlkXCIsIFwiQ29udGVudFwiXSwgY2hpbGRyZW4pO1xuXG4gICAgICAgIHRoaXMuaXNDb250YWluYWJsZSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy50b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmVsZW1lbnRUb09iamVjdCgpO1xuICAgICAgICAgICAgcmVzdWx0LmNoaWxkcmVuID0gdGhpcy5jaGlsZHJlblRvT2JqZWN0KCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBMYXlvdXRFZGl0b3IuQ2FudmFzLmZyb20gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBMYXlvdXRFZGl0b3IuQ2FudmFzKFxuICAgICAgICAgICAgdmFsdWUuZGF0YSxcbiAgICAgICAgICAgIHZhbHVlLmh0bWxJZCxcbiAgICAgICAgICAgIHZhbHVlLmh0bWxDbGFzcyxcbiAgICAgICAgICAgIHZhbHVlLmh0bWxTdHlsZSxcbiAgICAgICAgICAgIHZhbHVlLmlzVGVtcGxhdGVkLFxuICAgICAgICAgICAgdmFsdWUucnVsZSxcbiAgICAgICAgICAgIExheW91dEVkaXRvci5jaGlsZHJlbkZyb20odmFsdWUuY2hpbGRyZW4pKTtcblxuICAgICAgICByZXN1bHQudG9vbGJveEljb24gPSB2YWx1ZS50b29sYm94SWNvbjtcbiAgICAgICAgcmVzdWx0LnRvb2xib3hMYWJlbCA9IHZhbHVlLnRvb2xib3hMYWJlbDtcbiAgICAgICAgcmVzdWx0LnRvb2xib3hEZXNjcmlwdGlvbiA9IHZhbHVlLnRvb2xib3hEZXNjcmlwdGlvbjtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbn0pKExheW91dEVkaXRvciB8fCAoTGF5b3V0RWRpdG9yID0ge30pKTtcbiIsInZhciBMYXlvdXRFZGl0b3I7XG4oZnVuY3Rpb24gKExheW91dEVkaXRvcikge1xuXG4gICAgTGF5b3V0RWRpdG9yLkdyaWQgPSBmdW5jdGlvbiAoZGF0YSwgaHRtbElkLCBodG1sQ2xhc3MsIGh0bWxTdHlsZSwgaXNUZW1wbGF0ZWQsIHJ1bGUsIGNoaWxkcmVuKSB7XG4gICAgICAgIExheW91dEVkaXRvci5FbGVtZW50LmNhbGwodGhpcywgXCJHcmlkXCIsIGRhdGEsIGh0bWxJZCwgaHRtbENsYXNzLCBodG1sU3R5bGUsIGlzVGVtcGxhdGVkLCBydWxlKTtcbiAgICAgICAgTGF5b3V0RWRpdG9yLkNvbnRhaW5lci5jYWxsKHRoaXMsIFtcIlJvd1wiXSwgY2hpbGRyZW4pO1xuXG4gICAgICAgIHRoaXMudG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5lbGVtZW50VG9PYmplY3QoKTtcbiAgICAgICAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW5Ub09iamVjdCgpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgTGF5b3V0RWRpdG9yLkdyaWQuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExheW91dEVkaXRvci5HcmlkKFxuICAgICAgICAgICAgdmFsdWUuZGF0YSxcbiAgICAgICAgICAgIHZhbHVlLmh0bWxJZCxcbiAgICAgICAgICAgIHZhbHVlLmh0bWxDbGFzcyxcbiAgICAgICAgICAgIHZhbHVlLmh0bWxTdHlsZSxcbiAgICAgICAgICAgIHZhbHVlLmlzVGVtcGxhdGVkLFxuICAgICAgICAgICAgdmFsdWUucnVsZSxcbiAgICAgICAgICAgIExheW91dEVkaXRvci5jaGlsZHJlbkZyb20odmFsdWUuY2hpbGRyZW4pKTtcbiAgICAgICAgcmVzdWx0LnRvb2xib3hJY29uID0gdmFsdWUudG9vbGJveEljb247XG4gICAgICAgIHJlc3VsdC50b29sYm94TGFiZWwgPSB2YWx1ZS50b29sYm94TGFiZWw7XG4gICAgICAgIHJlc3VsdC50b29sYm94RGVzY3JpcHRpb24gPSB2YWx1ZS50b29sYm94RGVzY3JpcHRpb247XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyIsInZhciBMYXlvdXRFZGl0b3I7XG4oZnVuY3Rpb24gKExheW91dEVkaXRvcikge1xuXG4gICAgTGF5b3V0RWRpdG9yLlJvdyA9IGZ1bmN0aW9uIChkYXRhLCBodG1sSWQsIGh0bWxDbGFzcywgaHRtbFN0eWxlLCBpc1RlbXBsYXRlZCwgcnVsZSwgY2hpbGRyZW4pIHtcbiAgICAgICAgTGF5b3V0RWRpdG9yLkVsZW1lbnQuY2FsbCh0aGlzLCBcIlJvd1wiLCBkYXRhLCBodG1sSWQsIGh0bWxDbGFzcywgaHRtbFN0eWxlLCBpc1RlbXBsYXRlZCwgcnVsZSk7XG4gICAgICAgIExheW91dEVkaXRvci5Db250YWluZXIuY2FsbCh0aGlzLCBbXCJDb2x1bW5cIl0sIGNoaWxkcmVuKTtcblxuICAgICAgICB2YXIgX3NlbGYgPSB0aGlzO1xuXG4gICAgICAgIGZ1bmN0aW9uIF9nZXRUb3RhbENvbHVtbnNXaWR0aCgpIHtcbiAgICAgICAgICAgIHJldHVybiBfKF9zZWxmLmNoaWxkcmVuKS5yZWR1Y2UoZnVuY3Rpb24gKG1lbW8sIGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lbW8gKyBjaGlsZC5vZmZzZXQgKyBjaGlsZC53aWR0aDtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW1wbGVtZW50cyBhIHNpbXBsZSBhbGdvcml0aG0gdG8gZGlzdHJpYnV0ZSBzcGFjZSAoZWl0aGVyIHBvc2l0aXZlIG9yIG5lZ2F0aXZlKVxuICAgICAgICAvLyBiZXR3ZWVuIHRoZSBjaGlsZCBjb2x1bW5zIG9mIHRoZSByb3cuIE5lZ2F0aXZlIHNwYWNlIGlzIGRpc3RyaWJ1dGVkIHdoZW4gbWFraW5nXG4gICAgICAgIC8vIHJvb20gZm9yIGEgbmV3IGNvbHVtbiAoZS5jLiBjbGlwYm9hcmQgcGFzdGUgb3IgZHJvcHBpbmcgZnJvbSB0aGUgdG9vbGJveCkgd2hpbGVcbiAgICAgICAgLy8gcG9zaXRpdmUgc3BhY2UgaXMgZGlzdHJpYnV0ZWQgd2hlbiBmaWxsaW5nIHRoZSBncmFwIG9mIGEgcmVtb3ZlZCBjb2x1bW4uXG4gICAgICAgIGZ1bmN0aW9uIF9kaXN0cmlidXRlU3BhY2Uoc3BhY2UpIHtcbiAgICAgICAgICAgIGlmIChzcGFjZSA9PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHVuZGlzdHJpYnV0ZWRTcGFjZSA9IHNwYWNlO1xuXG4gICAgICAgICAgICBpZiAodW5kaXN0cmlidXRlZFNwYWNlIDwgMCkge1xuICAgICAgICAgICAgICAgIHZhciB2YWNhbnRTcGFjZSA9IDEyIC0gX2dldFRvdGFsQ29sdW1uc1dpZHRoKCk7XG4gICAgICAgICAgICAgICAgdW5kaXN0cmlidXRlZFNwYWNlICs9IHZhY2FudFNwYWNlO1xuICAgICAgICAgICAgICAgIGlmICh1bmRpc3RyaWJ1dGVkU3BhY2UgPiAwKVxuICAgICAgICAgICAgICAgICAgICB1bmRpc3RyaWJ1dGVkU3BhY2UgPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiBzcGFjZSBpcyBuZWdhdGl2ZSwgdHJ5IHRvIGRlY3JlYXNlIG9mZnNldHMgZmlyc3QuXG4gICAgICAgICAgICB3aGlsZSAodW5kaXN0cmlidXRlZFNwYWNlIDwgMCAmJiBfKF9zZWxmLmNoaWxkcmVuKS5hbnkoZnVuY3Rpb24gKGNvbHVtbikgeyByZXR1cm4gY29sdW1uLm9mZnNldCA+IDA7IH0pKSB7IC8vIFdoaWxlIHRoZXJlIGlzIHN0aWxsIG9mZnNldCBsZWZ0IHRvIHJlbW92ZS5cbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgX3NlbGYuY2hpbGRyZW4ubGVuZ3RoICYmIHVuZGlzdHJpYnV0ZWRTcGFjZSA8IDA7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gX3NlbGYuY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ub2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLm9mZnNldC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5kaXN0cmlidXRlZFNwYWNlKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGhhc1dpZHRoKGNvbHVtbikge1xuICAgICAgICAgICAgICAgIGlmICh1bmRpc3RyaWJ1dGVkU3BhY2UgPiAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLndpZHRoIDwgMTI7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodW5kaXN0cmlidXRlZFNwYWNlIDwgMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi53aWR0aCA+IDE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBUcnkgdG8gZGlzdHJpYnV0ZSByZW1haW5pbmcgc3BhY2UgKGNvdWxkIGJlIG5lZ2F0aXZlIG9yIHBvc2l0aXZlKSB1c2luZyB3aWR0aHMuXG4gICAgICAgICAgICB3aGlsZSAodW5kaXN0cmlidXRlZFNwYWNlICE9IDApIHtcbiAgICAgICAgICAgICAgICAvLyBBbnkgbW9yZSBjb2x1bW4gd2lkdGggYXZhaWxhYmxlIGZvciBkaXN0cmlidXRpb24/XG4gICAgICAgICAgICAgICAgaWYgKCFfKF9zZWxmLmNoaWxkcmVuKS5hbnkoaGFzV2lkdGgpKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgX3NlbGYuY2hpbGRyZW4ubGVuZ3RoICYmIHVuZGlzdHJpYnV0ZWRTcGFjZSAhPSAwOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbiA9IF9zZWxmLmNoaWxkcmVuW2kgJSBfc2VsZi5jaGlsZHJlbi5sZW5ndGhdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzV2lkdGgoY29sdW1uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhID0gdW5kaXN0cmlidXRlZFNwYWNlIC8gTWF0aC5hYnModW5kaXN0cmlidXRlZFNwYWNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi53aWR0aCArPSBkZWx0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGlzdHJpYnV0ZWRTcGFjZSAtPSBkZWx0YTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1bmRpc3RyaWJ1dGVkU3BhY2UgPT0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfaXNBZGRpbmdDb2x1bW4gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNhbkFkZENvbHVtbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA8IDEyO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYmVnaW5BZGRDb2x1bW4gPSBmdW5jdGlvbiAobmV3Q29sdW1uV2lkdGgpIHtcbiAgICAgICAgICAgIGlmICghIV9pc0FkZGluZ0NvbHVtbilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2x1bW4gYWRkIG9wZXJhdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzLlwiKVxuICAgICAgICAgICAgXyh0aGlzLmNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4uYmVnaW5DaGFuZ2UoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKF9kaXN0cmlidXRlU3BhY2UoLW5ld0NvbHVtbldpZHRoKSkge1xuICAgICAgICAgICAgICAgIF9pc0FkZGluZ0NvbHVtbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfKHRoaXMuY2hpbGRyZW4pLmVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICAgICAgICAgIGNvbHVtbi5yb2xsYmFja0NoYW5nZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jb21taXRBZGRDb2x1bW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIV9pc0FkZGluZ0NvbHVtbilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb2x1bW4gYWRkIG9wZXJhdGlvbiBpbiBwcm9ncmVzcy5cIilcbiAgICAgICAgICAgIF8odGhpcy5jaGlsZHJlbikuZWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uLmNvbW1pdENoYW5nZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfaXNBZGRpbmdDb2x1bW4gPSBmYWxzZTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnJvbGxiYWNrQWRkQ29sdW1uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFfaXNBZGRpbmdDb2x1bW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29sdW1uIGFkZCBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MuXCIpXG4gICAgICAgICAgICBfKHRoaXMuY2hpbGRyZW4pLmVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICAgICAgICAgIGNvbHVtbi5yb2xsYmFja0NoYW5nZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfaXNBZGRpbmdDb2x1bW4gPSBmYWxzZTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgX2Jhc2VEZWxldGVDaGlsZCA9IHRoaXMuZGVsZXRlQ2hpbGQ7XG4gICAgICAgIHRoaXMuZGVsZXRlQ2hpbGQgPSBmdW5jdGlvbiAoY29sdW1uKSB7IFxuICAgICAgICAgICAgdmFyIHdpZHRoID0gY29sdW1uLndpZHRoO1xuICAgICAgICAgICAgX2Jhc2VEZWxldGVDaGlsZC5jYWxsKHRoaXMsIGNvbHVtbik7XG4gICAgICAgICAgICBfZGlzdHJpYnV0ZVNwYWNlKHdpZHRoKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmNhbkNvbnRyYWN0Q29sdW1uUmlnaHQgPSBmdW5jdGlvbiAoY29sdW1uLCBjb25uZWN0QWRqYWNlbnQpIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi53aWR0aCA+IDE7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jb250cmFjdENvbHVtblJpZ2h0ID0gZnVuY3Rpb24gKGNvbHVtbiwgY29ubmVjdEFkamFjZW50KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuQ29udHJhY3RDb2x1bW5SaWdodChjb2x1bW4sIGNvbm5lY3RBZGphY2VudCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi53aWR0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLndpZHRoLS07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IGluZGV4ICsgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRDb2x1bW4gPSB0aGlzLmNoaWxkcmVuW2luZGV4ICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdEFkamFjZW50ICYmIG5leHRDb2x1bW4ub2Zmc2V0ID09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENvbHVtbi53aWR0aCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRDb2x1bW4ub2Zmc2V0Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jYW5FeHBhbmRDb2x1bW5SaWdodCA9IGZ1bmN0aW9uIChjb2x1bW4sIGNvbm5lY3RBZGphY2VudCkge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNvbHVtbik7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ud2lkdGggPj0gMTIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiBpbmRleCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRDb2x1bW4gPSB0aGlzLmNoaWxkcmVuW2luZGV4ICsgMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0QWRqYWNlbnQgJiYgbmV4dENvbHVtbi5vZmZzZXQgPT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0Q29sdW1uLndpZHRoID4gMTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRDb2x1bW4ub2Zmc2V0ID4gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9nZXRUb3RhbENvbHVtbnNXaWR0aCgpIDwgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5leHBhbmRDb2x1bW5SaWdodCA9IGZ1bmN0aW9uIChjb2x1bW4sIGNvbm5lY3RBZGphY2VudCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbkV4cGFuZENvbHVtblJpZ2h0KGNvbHVtbiwgY29ubmVjdEFkamFjZW50KSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiBpbmRleCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRDb2x1bW4gPSB0aGlzLmNoaWxkcmVuW2luZGV4ICsgMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0QWRqYWNlbnQgJiYgbmV4dENvbHVtbi5vZmZzZXQgPT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRDb2x1bW4ud2lkdGgtLTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENvbHVtbi5vZmZzZXQtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29sdW1uLndpZHRoKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jYW5FeHBhbmRDb2x1bW5MZWZ0ID0gZnVuY3Rpb24gKGNvbHVtbiwgY29ubmVjdEFkamFjZW50KSB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi53aWR0aCA+PSAxMilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZDb2x1bW4gPSB0aGlzLmNoaWxkcmVuW2luZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0QWRqYWNlbnQgJiYgY29sdW1uLm9mZnNldCA9PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZDb2x1bW4ud2lkdGggPiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLm9mZnNldCA+IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5leHBhbmRDb2x1bW5MZWZ0ID0gZnVuY3Rpb24gKGNvbHVtbiwgY29ubmVjdEFkamFjZW50KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuRXhwYW5kQ29sdW1uTGVmdChjb2x1bW4sIGNvbm5lY3RBZGphY2VudCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJldkNvbHVtbiA9IHRoaXMuY2hpbGRyZW5baW5kZXggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3RBZGphY2VudCAmJiBjb2x1bW4ub2Zmc2V0ID09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2Q29sdW1uLndpZHRoLS07XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5vZmZzZXQtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4ub2Zmc2V0LS07XG4gICAgICAgICAgICAgICAgY29sdW1uLndpZHRoKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jYW5Db250cmFjdENvbHVtbkxlZnQgPSBmdW5jdGlvbiAoY29sdW1uLCBjb25uZWN0QWRqYWNlbnQpIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi53aWR0aCA+IDE7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jb250cmFjdENvbHVtbkxlZnQgPSBmdW5jdGlvbiAoY29sdW1uLCBjb25uZWN0QWRqYWNlbnQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5Db250cmFjdENvbHVtbkxlZnQoY29sdW1uLCBjb25uZWN0QWRqYWNlbnQpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNvbHVtbik7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZDb2x1bW4gPSB0aGlzLmNoaWxkcmVuW2luZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0QWRqYWNlbnQgJiYgY29sdW1uLm9mZnNldCA9PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldkNvbHVtbi53aWR0aCsrO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4ub2Zmc2V0Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLm9mZnNldCsrO1xuICAgICAgICAgICAgICAgIGNvbHVtbi53aWR0aC0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZXZlbkNvbHVtbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIHZhciBldmVuV2lkdGggPSBNYXRoLmZsb29yKDEyIC8gdGhpcy5jaGlsZHJlbi5sZW5ndGgpO1xuICAgICAgICAgICAgXyh0aGlzLmNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4ud2lkdGggPSBldmVuV2lkdGg7XG4gICAgICAgICAgICAgICAgY29sdW1uLm9mZnNldCA9IDA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdmFyIHJlc3QgPSAxMiAlIHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHJlc3QgPiAwKVxuICAgICAgICAgICAgICAgIF9kaXN0cmlidXRlU3BhY2UocmVzdCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIF9iYXNlUGFzdGVDaGlsZCA9IHRoaXMucGFzdGVDaGlsZDtcbiAgICAgICAgdGhpcy5wYXN0ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PSBcIkNvbHVtblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmVnaW5BZGRDb2x1bW4oY2hpbGQud2lkdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbWl0QWRkQ29sdW1uKCk7XG4gICAgICAgICAgICAgICAgICAgIF9iYXNlUGFzdGVDaGlsZC5jYWxsKHRoaXMsIGNoaWxkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCEhdGhpcy5wYXJlbnQpXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQucGFzdGVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuZWxlbWVudFRvT2JqZWN0KCk7XG4gICAgICAgICAgICByZXN1bHQuY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuVG9PYmplY3QoKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIExheW91dEVkaXRvci5Sb3cuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExheW91dEVkaXRvci5Sb3coXG4gICAgICAgICAgICB2YWx1ZS5kYXRhLFxuICAgICAgICAgICAgdmFsdWUuaHRtbElkLFxuICAgICAgICAgICAgdmFsdWUuaHRtbENsYXNzLFxuICAgICAgICAgICAgdmFsdWUuaHRtbFN0eWxlLFxuICAgICAgICAgICAgdmFsdWUuaXNUZW1wbGF0ZWQsXG4gICAgICAgICAgICB2YWx1ZS5ydWxlLFxuICAgICAgICAgICAgTGF5b3V0RWRpdG9yLmNoaWxkcmVuRnJvbSh2YWx1ZS5jaGlsZHJlbikpO1xuICAgICAgICByZXN1bHQudG9vbGJveEljb24gPSB2YWx1ZS50b29sYm94SWNvbjtcbiAgICAgICAgcmVzdWx0LnRvb2xib3hMYWJlbCA9IHZhbHVlLnRvb2xib3hMYWJlbDtcbiAgICAgICAgcmVzdWx0LnRvb2xib3hEZXNjcmlwdGlvbiA9IHZhbHVlLnRvb2xib3hEZXNjcmlwdGlvbjtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG59KShMYXlvdXRFZGl0b3IgfHwgKExheW91dEVkaXRvciA9IHt9KSk7IiwidmFyIExheW91dEVkaXRvcjtcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XG4gICAgTGF5b3V0RWRpdG9yLkNvbHVtbiA9IGZ1bmN0aW9uIChkYXRhLCBodG1sSWQsIGh0bWxDbGFzcywgaHRtbFN0eWxlLCBpc1RlbXBsYXRlZCwgd2lkdGgsIG9mZnNldCwgY29sbGFwc2libGUsIHJ1bGUsIGNoaWxkcmVuKSB7XG4gICAgICAgIExheW91dEVkaXRvci5FbGVtZW50LmNhbGwodGhpcywgXCJDb2x1bW5cIiwgZGF0YSwgaHRtbElkLCBodG1sQ2xhc3MsIGh0bWxTdHlsZSwgaXNUZW1wbGF0ZWQsIHJ1bGUpO1xuICAgICAgICBMYXlvdXRFZGl0b3IuQ29udGFpbmVyLmNhbGwodGhpcywgW1wiR3JpZFwiLCBcIkNvbnRlbnRcIl0sIGNoaWxkcmVuKTtcblxuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICB0aGlzLmNvbGxhcHNpYmxlID0gY29sbGFwc2libGU7XG5cbiAgICAgICAgdmFyIF9oYXNQZW5kaW5nQ2hhbmdlID0gZmFsc2U7XG4gICAgICAgIHZhciBfb3JpZ1dpZHRoID0gMDtcbiAgICAgICAgdmFyIF9vcmlnT2Zmc2V0ID0gMDtcblxuICAgICAgICB0aGlzLmJlZ2luQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCEhX2hhc1BlbmRpbmdDaGFuZ2UpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29sdW1uIGFscmVhZHkgaGFzIGEgcGVuZGluZyBjaGFuZ2UuXCIpO1xuICAgICAgICAgICAgX2hhc1BlbmRpbmdDaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgX29yaWdXaWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgICAgICBfb3JpZ09mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY29tbWl0Q2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFfaGFzUGVuZGluZ0NoYW5nZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2x1bW4gaGFzIG5vIHBlbmRpbmcgY2hhbmdlLlwiKTtcbiAgICAgICAgICAgIF9vcmlnV2lkdGggPSAwO1xuICAgICAgICAgICAgX29yaWdPZmZzZXQgPSAwO1xuICAgICAgICAgICAgX2hhc1BlbmRpbmdDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnJvbGxiYWNrQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFfaGFzUGVuZGluZ0NoYW5nZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2x1bW4gaGFzIG5vIHBlbmRpbmcgY2hhbmdlLlwiKTtcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSBfb3JpZ1dpZHRoO1xuICAgICAgICAgICAgdGhpcy5vZmZzZXQgPSBfb3JpZ09mZnNldDtcbiAgICAgICAgICAgIF9vcmlnV2lkdGggPSAwO1xuICAgICAgICAgICAgX29yaWdPZmZzZXQgPSAwO1xuICAgICAgICAgICAgX2hhc1BlbmRpbmdDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmNhblNwbGl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNUZW1wbGF0ZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2lkdGggPiAxO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc3BsaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuU3BsaXQoKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIHZhciBuZXdDb2x1bW5XaWR0aCA9IE1hdGguZmxvb3IodGhpcy53aWR0aCAvIDIpO1xuICAgICAgICAgICAgdmFyIG5ld0NvbHVtbiA9IExheW91dEVkaXRvci5Db2x1bW4uZnJvbSh7XG4gICAgICAgICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICAgICAgICBodG1sSWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgaHRtbENsYXNzOiBudWxsLFxuICAgICAgICAgICAgICAgIGh0bWxTdHlsZTogbnVsbCxcbiAgICAgICAgICAgICAgICB3aWR0aDogbmV3Q29sdW1uV2lkdGgsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLndpZHRoIC0gbmV3Q29sdW1uV2lkdGg7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5pbnNlcnRDaGlsZChuZXdDb2x1bW4sIHRoaXMpO1xuICAgICAgICAgICAgbmV3Q29sdW1uLnNldElzRm9jdXNlZCgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY2FuQ29udHJhY3RSaWdodCA9IGZ1bmN0aW9uIChjb25uZWN0QWRqYWNlbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGVtcGxhdGVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jYW5Db250cmFjdENvbHVtblJpZ2h0KHRoaXMsIGNvbm5lY3RBZGphY2VudCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jb250cmFjdFJpZ2h0ID0gZnVuY3Rpb24gKGNvbm5lY3RBZGphY2VudCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbkNvbnRyYWN0UmlnaHQoY29ubmVjdEFkamFjZW50KSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5jb250cmFjdENvbHVtblJpZ2h0KHRoaXMsIGNvbm5lY3RBZGphY2VudCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jYW5FeHBhbmRSaWdodCA9IGZ1bmN0aW9uIChjb25uZWN0QWRqYWNlbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGVtcGxhdGVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jYW5FeHBhbmRDb2x1bW5SaWdodCh0aGlzLCBjb25uZWN0QWRqYWNlbnQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZXhwYW5kUmlnaHQgPSBmdW5jdGlvbiAoY29ubmVjdEFkamFjZW50KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuRXhwYW5kUmlnaHQoY29ubmVjdEFkamFjZW50KSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5leHBhbmRDb2x1bW5SaWdodCh0aGlzLCBjb25uZWN0QWRqYWNlbnQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY2FuRXhwYW5kTGVmdCA9IGZ1bmN0aW9uIChjb25uZWN0QWRqYWNlbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGVtcGxhdGVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jYW5FeHBhbmRDb2x1bW5MZWZ0KHRoaXMsIGNvbm5lY3RBZGphY2VudCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5leHBhbmRMZWZ0ID0gZnVuY3Rpb24gKGNvbm5lY3RBZGphY2VudCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbkV4cGFuZExlZnQoY29ubmVjdEFkamFjZW50KSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5leHBhbmRDb2x1bW5MZWZ0KHRoaXMsIGNvbm5lY3RBZGphY2VudCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jYW5Db250cmFjdExlZnQgPSBmdW5jdGlvbiAoY29ubmVjdEFkamFjZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1RlbXBsYXRlZClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuY2FuQ29udHJhY3RDb2x1bW5MZWZ0KHRoaXMsIGNvbm5lY3RBZGphY2VudCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jb250cmFjdExlZnQgPSBmdW5jdGlvbiAoY29ubmVjdEFkamFjZW50KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuQ29udHJhY3RMZWZ0KGNvbm5lY3RBZGphY2VudCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuY29udHJhY3RDb2x1bW5MZWZ0KHRoaXMsIGNvbm5lY3RBZGphY2VudCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy50b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmVsZW1lbnRUb09iamVjdCgpO1xuICAgICAgICAgICAgcmVzdWx0LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgICAgIHJlc3VsdC5vZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICAgICAgICAgIHJlc3VsdC5jb2xsYXBzaWJsZSA9IHRoaXMuY29sbGFwc2libGU7XG4gICAgICAgICAgICByZXN1bHQuY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuVG9PYmplY3QoKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIExheW91dEVkaXRvci5Db2x1bW4uZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExheW91dEVkaXRvci5Db2x1bW4oXG4gICAgICAgICAgICB2YWx1ZS5kYXRhLFxuICAgICAgICAgICAgdmFsdWUuaHRtbElkLFxuICAgICAgICAgICAgdmFsdWUuaHRtbENsYXNzLFxuICAgICAgICAgICAgdmFsdWUuaHRtbFN0eWxlLFxuICAgICAgICAgICAgdmFsdWUuaXNUZW1wbGF0ZWQsXG4gICAgICAgICAgICB2YWx1ZS53aWR0aCxcbiAgICAgICAgICAgIHZhbHVlLm9mZnNldCxcbiAgICAgICAgICAgIHZhbHVlLmNvbGxhcHNpYmxlLFxuICAgICAgICAgICAgdmFsdWUucnVsZSxcbiAgICAgICAgICAgIExheW91dEVkaXRvci5jaGlsZHJlbkZyb20odmFsdWUuY2hpbGRyZW4pKTtcbiAgICAgICAgcmVzdWx0LnRvb2xib3hJY29uID0gdmFsdWUudG9vbGJveEljb247XG4gICAgICAgIHJlc3VsdC50b29sYm94TGFiZWwgPSB2YWx1ZS50b29sYm94TGFiZWw7XG4gICAgICAgIHJlc3VsdC50b29sYm94RGVzY3JpcHRpb24gPSB2YWx1ZS50b29sYm94RGVzY3JpcHRpb247XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIExheW91dEVkaXRvci5Db2x1bW4udGltZXMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIF8udGltZXModmFsdWUsIGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICByZXR1cm4gTGF5b3V0RWRpdG9yLkNvbHVtbi5mcm9tKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgICAgIGh0bWxJZDogbnVsbCxcbiAgICAgICAgICAgICAgICBodG1sQ2xhc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgaXNUZW1wbGF0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAxMiAvIHZhbHVlLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICAgICAgICBjb2xsYXBzaWJsZTogbnVsbCxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyIsInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkNvbnRlbnQgPSBmdW5jdGlvbiAoZGF0YSwgaHRtbElkLCBodG1sQ2xhc3MsIGh0bWxTdHlsZSwgaXNUZW1wbGF0ZWQsIGNvbnRlbnRUeXBlLCBjb250ZW50VHlwZUxhYmVsLCBjb250ZW50VHlwZUNsYXNzLCBodG1sLCBoYXNFZGl0b3IsIHJ1bGUpIHtcclxuICAgICAgICBMYXlvdXRFZGl0b3IuRWxlbWVudC5jYWxsKHRoaXMsIFwiQ29udGVudFwiLCBkYXRhLCBodG1sSWQsIGh0bWxDbGFzcywgaHRtbFN0eWxlLCBpc1RlbXBsYXRlZCwgcnVsZSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRUeXBlTGFiZWwgPSBjb250ZW50VHlwZUxhYmVsO1xyXG4gICAgICAgIHRoaXMuY29udGVudFR5cGVDbGFzcyA9IGNvbnRlbnRUeXBlQ2xhc3M7XHJcbiAgICAgICAgdGhpcy5odG1sID0gaHRtbDtcclxuICAgICAgICB0aGlzLmhhc0VkaXRvciA9IGhhc0VkaXRvcjtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRJbm5lclRleHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAkKCQucGFyc2VIVE1MKFwiPGRpdj5cIiArIHRoaXMuaHRtbCArIFwiPC9kaXY+XCIpKS50ZXh0KCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBDb250ZW50IGRpcmVjdGl2ZS5cclxuICAgICAgICB0aGlzLnNldEh0bWwgPSBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgICAgICAgICB0aGlzLmh0bWwgPSBodG1sO1xyXG4gICAgICAgICAgICB0aGlzLmh0bWxVbnNhZmUgPSBodG1sO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGJhc2VUb09iamVjdCA9IHRoaXMudG9PYmplY3Q7XHJcbiAgICAgICAgdGhpcy50b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJhc2VUb09iamVjdCgpO1xyXG4gICAgICAgICAgICByZXN1bHQuY29udGVudFR5cGVMYWJlbCA9IHRoaXMuY29udGVudFR5cGVMYWJlbDtcclxuICAgICAgICAgICAgcmVzdWx0LmNvbnRlbnRUeXBlQ2xhc3MgPSB0aGlzLmNvbnRlbnRUeXBlQ2xhc3M7XHJcbiAgICAgICAgICAgIHJlc3VsdC5odG1sID0gdGhpcy5odG1sO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SHRtbChodG1sKTtcclxuICAgIH07XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkNvbnRlbnQuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgTGF5b3V0RWRpdG9yLkNvbnRlbnQoXHJcbiAgICAgICAgICAgIHZhbHVlLmRhdGEsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWxJZCxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbENsYXNzLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sU3R5bGUsXHJcbiAgICAgICAgICAgIHZhbHVlLmlzVGVtcGxhdGVkLFxyXG4gICAgICAgICAgICB2YWx1ZS5jb250ZW50VHlwZSxcclxuICAgICAgICAgICAgdmFsdWUuY29udGVudFR5cGVMYWJlbCxcclxuICAgICAgICAgICAgdmFsdWUuY29udGVudFR5cGVDbGFzcyxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbCxcclxuICAgICAgICAgICAgdmFsdWUuaGFzRWRpdG9yLFxyXG4gICAgICAgICAgICB2YWx1ZS5ydWxlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcblxyXG59KShMYXlvdXRFZGl0b3IgfHwgKExheW91dEVkaXRvciA9IHt9KSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1vZGVscy5qcyIsIkhlbHBlcnMuanMiLCJFZGl0b3IuanMiLCJSZWN5Y2xlQmluLmpzIiwiRWxlbWVudC5qcyIsIkNvbnRhaW5lci5qcyIsIkNhbnZhcy5qcyIsIkdyaWQuanMiLCJSb3cuanMiLCJDb2x1bW4uanMiLCJDb250ZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDdE5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzdSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzVKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJNb2RlbHMuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgQXJyYXkucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcclxuICAgICAgICB0aGlzLnNwbGljZSh0bywgMCwgdGhpcy5zcGxpY2UoZnJvbSwgMSlbMF0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuY2hpbGRyZW5Gcm9tID0gZnVuY3Rpb24odmFsdWVzKSB7XHJcbiAgICAgICAgcmV0dXJuIF8odmFsdWVzKS5tYXAoZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIExheW91dEVkaXRvci5lbGVtZW50RnJvbSh2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciByZWdpc3RlckZhY3RvcnkgPSBMYXlvdXRFZGl0b3IucmVnaXN0ZXJGYWN0b3J5ID0gZnVuY3Rpb24odHlwZSwgZmFjdG9yeSkge1xyXG4gICAgICAgIHZhciBmYWN0b3JpZXMgPSBMYXlvdXRFZGl0b3IuZmFjdG9yaWVzID0gTGF5b3V0RWRpdG9yLmZhY3RvcmllcyB8fCB7fTtcclxuICAgICAgICBmYWN0b3JpZXNbdHlwZV0gPSBmYWN0b3J5O1xyXG4gICAgfTtcclxuXHJcbiAgICByZWdpc3RlckZhY3RvcnkoXCJDYW52YXNcIiwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBMYXlvdXRFZGl0b3IuQ2FudmFzLmZyb20odmFsdWUpOyB9KTtcclxuICAgIHJlZ2lzdGVyRmFjdG9yeShcIkdyaWRcIiwgZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIExheW91dEVkaXRvci5HcmlkLmZyb20odmFsdWUpOyB9KTtcclxuICAgIHJlZ2lzdGVyRmFjdG9yeShcIlJvd1wiLCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHZhbHVlKTsgfSk7XHJcbiAgICByZWdpc3RlckZhY3RvcnkoXCJDb2x1bW5cIiwgZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIExheW91dEVkaXRvci5Db2x1bW4uZnJvbSh2YWx1ZSk7IH0pO1xyXG4gICAgcmVnaXN0ZXJGYWN0b3J5KFwiQ29udGVudFwiLCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gTGF5b3V0RWRpdG9yLkNvbnRlbnQuZnJvbSh2YWx1ZSk7IH0pO1xyXG5cclxuICAgIExheW91dEVkaXRvci5lbGVtZW50RnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciBmYWN0b3J5ID0gTGF5b3V0RWRpdG9yLmZhY3Rvcmllc1t2YWx1ZS50eXBlXTtcclxuXHJcbiAgICAgICAgaWYgKCFmYWN0b3J5KVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBlbGVtZW50IHdpdGggdHlwZSBcXFwiXCIgKyB2YWx1ZS50eXBlICsgXCJcXFwiIHdhcyBmb3VuZC5cIik7XHJcblxyXG4gICAgICAgIHZhciBlbGVtZW50ID0gZmFjdG9yeSh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9O1xyXG5cclxuICAgIExheW91dEVkaXRvci5zZXRNb2RlbCA9IGZ1bmN0aW9uIChlbGVtZW50U2VsZWN0b3IsIG1vZGVsKSB7XHJcbiAgICAgICAgJChlbGVtZW50U2VsZWN0b3IpLnNjb3BlKCkuZWxlbWVudCA9IG1vZGVsO1xyXG4gICAgfTtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoZWxlbWVudFNlbGVjdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuICQoZWxlbWVudFNlbGVjdG9yKS5zY29wZSgpLmVsZW1lbnQ7XHJcbiAgICB9O1xyXG5cclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyIsInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkVkaXRvciA9IGZ1bmN0aW9uIChjb25maWcsIGNhbnZhc0RhdGEpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcclxuICAgICAgICB0aGlzLmNhbnZhcyA9IExheW91dEVkaXRvci5DYW52YXMuZnJvbShjYW52YXNEYXRhKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxTdGF0ZSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY2FudmFzLnRvT2JqZWN0KCkpO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kcm9wVGFyZ2V0RWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc1Jlc2l6aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZWN5Y2xlQmluID0gbmV3IExheW91dEVkaXRvci5SZWN5Y2xlQmluKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXRUb29sYm94RWxlbWVudHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9vbGJveEVsZW1lbnRzID0gW1xyXG4gICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNhbnZhcy50b09iamVjdCgpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbFN0YXRlICE9IGN1cnJlbnRTdGF0ZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnJlc2V0VG9vbGJveEVsZW1lbnRzKCk7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2V0RWRpdG9yKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcbn0pKExheW91dEVkaXRvciB8fCAoTGF5b3V0RWRpdG9yID0ge30pKTtcclxuIiwidmFyIExheW91dEVkaXRvcjtcclxuKGZ1bmN0aW9uIChMYXlvdXRFZGl0b3IpIHtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuUmVjeWNsZUJpbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnRzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuYWRkID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy50b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwiUmVjeWNsZUJpblwiLFxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBkdG8gPSBlbGVtZW50LnRvT2JqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuY2hpbGRyZW4ucHVzaChkdG8pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpO1xyXG4iLCJ2YXIgTGF5b3V0RWRpdG9yO1xyXG4oZnVuY3Rpb24gKExheW91dEVkaXRvcikge1xyXG5cclxuICAgIExheW91dEVkaXRvci5FbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUsIGRhdGEsIGh0bWxJZCwgaHRtbENsYXNzLCBodG1sU3R5bGUsIGlzVGVtcGxhdGVkLCBydWxlKSB7XHJcbiAgICAgICAgaWYgKCF0eXBlKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgJ3R5cGUnIGlzIHJlcXVpcmVkLlwiKTtcclxuXHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLmh0bWxJZCA9IGh0bWxJZDtcclxuICAgICAgICB0aGlzLmh0bWxDbGFzcyA9IGh0bWxDbGFzcztcclxuICAgICAgICB0aGlzLmh0bWxTdHlsZSA9IGh0bWxTdHlsZTtcclxuICAgICAgICB0aGlzLmlzVGVtcGxhdGVkID0gaXNUZW1wbGF0ZWQ7XHJcbiAgICAgICAgdGhpcy5ydWxlID0gcnVsZTtcclxuXHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVN0eWxlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuZWRpdG9yID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzZWRFdmVudEhhbmRsZXJzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuc2V0RWRpdG9yID0gZnVuY3Rpb24gKGVkaXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5jaGlsZHJlbiAmJiBfLmlzQXJyYXkodGhpcy5jaGlsZHJlbikpIHtcclxuICAgICAgICAgICAgICAgIF8odGhpcy5jaGlsZHJlbikuZWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZC5zZXRFZGl0b3IoZWRpdG9yKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQYXJlbnQgPSBmdW5jdGlvbihwYXJlbnRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQub25DaGlsZEFkZGVkKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRBbmNlc3RvciA9IHBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHdoaWxlICghIWN1cnJlbnRBbmNlc3Rvcikge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEFuY2VzdG9yLm9uRGVzY2VuZGFudEFkZGVkKHRoaXMsIHBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEFuY2VzdG9yID0gY3VycmVudEFuY2VzdG9yLnBhcmVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SXNUZW1wbGF0ZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1RlbXBsYXRlZCA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoISF0aGlzLmNoaWxkcmVuICYmIF8uaXNBcnJheSh0aGlzLmNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICAgICAgXyh0aGlzLmNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnNldElzVGVtcGxhdGVkKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5hcHBseUVsZW1lbnRFZGl0b3JNb2RlbCA9IGZ1bmN0aW9uKCkgeyAvKiBWaXJ0dWFsICovIH07XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0SXNBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lZGl0b3IpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5hY3RpdmVFbGVtZW50ID09PSB0aGlzICYmICF0aGlzLmdldElzRm9jdXNlZCgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SXNBY3RpdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmVkaXRvcilcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yLmlzRHJhZ2dpbmcgfHwgdGhpcy5lZGl0b3IuaXNSZXNpemluZylcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmFjdGl2ZUVsZW1lbnQgPSB0aGlzO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5hY3RpdmVFbGVtZW50ID0gdGhpcy5wYXJlbnQ7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRJc0ZvY3VzZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lZGl0b3IpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5mb2N1c2VkRWxlbWVudCA9PT0gdGhpcztcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNldElzRm9jdXNlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmVkaXRvcilcclxuICAgICAgICAgICAgXHRyZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGlsZHJlbiAmJiB0aGlzLmlzVGVtcGxhdGVkKVxyXG4gICAgICAgICAgICBcdHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yLmlzRHJhZ2dpbmcgfHwgdGhpcy5lZGl0b3IuaXNSZXNpemluZylcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmZvY3VzZWRFbGVtZW50ID0gdGhpcztcclxuICAgICAgICAgICAgXyh0aGlzLnNldElzRm9jdXNlZEV2ZW50SGFuZGxlcnMpLmVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlLlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmdldElzU2VsZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdldElzRm9jdXNlZCgpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoISF0aGlzLmNoaWxkcmVuICYmIF8uaXNBcnJheSh0aGlzLmNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8odGhpcy5jaGlsZHJlbikuYW55KGZ1bmN0aW9uKGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLmdldElzU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRJc0Ryb3BUYXJnZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lZGl0b3IpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5kcm9wVGFyZ2V0RWxlbWVudCA9PT0gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SXNEcm9wVGFyZ2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lZGl0b3IpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmRyb3BUYXJnZXRFbGVtZW50ID0gdGhpcztcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuZHJvcFRhcmdldEVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuRGVsZXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1RlbXBsYXRlZCB8fCAhdGhpcy5wYXJlbnQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZGVsZXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuRGVsZXRlKCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmRlbGV0ZUNoaWxkKHRoaXMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuTW92ZVVwID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1RlbXBsYXRlZCB8fCAhdGhpcy5wYXJlbnQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jYW5Nb3ZlQ2hpbGRVcCh0aGlzKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm1vdmVVcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbk1vdmVVcCgpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5tb3ZlQ2hpbGRVcCh0aGlzKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNhbk1vdmVEb3duID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1RlbXBsYXRlZCB8fCAhdGhpcy5wYXJlbnQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jYW5Nb3ZlQ2hpbGREb3duKHRoaXMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMubW92ZURvd24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5Nb3ZlRG93bigpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5tb3ZlQ2hpbGREb3duKHRoaXMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZWxlbWVudFRvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxyXG4gICAgICAgICAgICAgICAgaHRtbElkOiB0aGlzLmh0bWxJZCxcclxuICAgICAgICAgICAgICAgIGh0bWxDbGFzczogdGhpcy5odG1sQ2xhc3MsXHJcbiAgICAgICAgICAgICAgICBodG1sU3R5bGU6IHRoaXMuaHRtbFN0eWxlLFxyXG4gICAgICAgICAgICAgICAgaXNUZW1wbGF0ZWQ6IHRoaXMuaXNUZW1wbGF0ZWQsXHJcbiAgICAgICAgICAgICAgICBydWxlOiB0aGlzLnJ1bGUsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogdGhpcy5jb250ZW50VHlwZSxcclxuICAgICAgICAgICAgICAgIGhhc0VkaXRvcjogdGhpcy5oYXNFZGl0b3JcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmdldEVkaXRvck9iamVjdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge307XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy50b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuZWxlbWVudFRvT2JqZWN0KCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jb3B5ID0gZnVuY3Rpb24gKGNsaXBib2FyZERhdGEpIHtcclxuICAgICAgICAgICAgdmFyIHRleHQgPSB0aGlzLmdldElubmVyVGV4dCgpO1xyXG4gICAgICAgICAgICBjbGlwYm9hcmREYXRhLnNldERhdGEoXCJ0ZXh0L3BsYWluXCIsIHRleHQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLnRvT2JqZWN0KCk7XHJcbiAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgXCJcXHRcIik7XHJcbiAgICAgICAgICAgIGNsaXBib2FyZERhdGEuc2V0RGF0YShcInRleHQvanNvblwiLCBqc29uKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmN1dCA9IGZ1bmN0aW9uIChjbGlwYm9hcmREYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbkRlbGV0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvcHkoY2xpcGJvYXJkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXN0ZSA9IGZ1bmN0aW9uIChjbGlwYm9hcmREYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMucGFyZW50KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQucGFzdGUoY2xpcGJvYXJkRGF0YSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZVN0eWxlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHN0eWxlcyA9IHRoaXMudGVtcGxhdGVTdHlsZXMgfHwge307XHJcbiAgICAgICAgICAgIHZhciBjc3MgPSBcIlwiO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gc3R5bGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjc3MgKz0gcHJvcGVydHkgKyBcIjpcIiArIHN0eWxlc1twcm9wZXJ0eV0gKyBcIjtcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNzcztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyIsInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkNvbnRhaW5lciA9IGZ1bmN0aW9uIChhbGxvd2VkQ2hpbGRUeXBlcywgY2hpbGRyZW4pIHtcclxuXHJcbiAgICAgICAgdGhpcy5hbGxvd2VkQ2hpbGRUeXBlcyA9IGFsbG93ZWRDaGlsZFR5cGVzO1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgICAgICB0aGlzLmlzQ29udGFpbmVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lclRlbXBsYXRlU3R5bGVzID0ge307XHJcblxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5vbkNoaWxkQWRkZWQgPSBmdW5jdGlvbiAoZWxlbWVudCkgeyAvKiBWaXJ0dWFsICovIH07XHJcbiAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRBZGRlZCA9IGZ1bmN0aW9uIChlbGVtZW50LCBwYXJlbnRFbGVtZW50KSB7IC8qIFZpcnR1YWwgKi8gfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xyXG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICAgICAgICAgIF8odGhpcy5jaGlsZHJlbikuZWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkLnNldFBhcmVudChzZWxmKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRDaGlsZHJlbihjaGlsZHJlbik7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0SXNTZWFsZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfKHRoaXMuY2hpbGRyZW4pLmFueShmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZC5pc1RlbXBsYXRlZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIF9iYXNlU2V0SXNGb2N1c2VkID0gdGhpcy5zZXRJc0ZvY3VzZWQ7XHJcbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdldElzU2VhbGVkKCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIF9iYXNlU2V0SXNGb2N1c2VkLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIV8odGhpcy5jaGlsZHJlbikuY29udGFpbnMoY2hpbGQpICYmIChfKHRoaXMuYWxsb3dlZENoaWxkVHlwZXMpLmNvbnRhaW5zKGNoaWxkLnR5cGUpIHx8IGNoaWxkLmlzQ29udGFpbmFibGUpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgY2hpbGQuc2V0RWRpdG9yKHRoaXMuZWRpdG9yKTtcclxuICAgICAgICAgICAgY2hpbGQuc2V0SXNUZW1wbGF0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBjaGlsZC5zZXRQYXJlbnQodGhpcyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5kZWxldGVDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY2hpbGQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IucmVjeWNsZUJpbi5hZGQoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldElzQWN0aXZlKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuYWN0aXZlRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0SXNGb2N1c2VkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZGVsZXRlZCBjaGlsZCB3YXMgZm9jdXNlZCwgdHJ5IHRvIHNldCBuZXcgZm9jdXMgdG8gdGhlIG1vc3QgYXBwcm9wcmlhdGUgc2libGluZyBvciBwYXJlbnQuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gaW5kZXgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baW5kZXhdLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluZGV4ID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpbmRleCAtIDFdLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMubW92ZUZvY3VzUHJldkNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA8IDIpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjaGlsZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2luZGV4IC0gMV0uc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5tb3ZlRm9jdXNOZXh0Q2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoIDwgMilcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNoaWxkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpbmRleCArIDFdLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuaW5zZXJ0Q2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQsIGFmdGVyQ2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCFfKHRoaXMuY2hpbGRyZW4pLmNvbnRhaW5zKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gTWF0aC5tYXgoXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGFmdGVyQ2hpbGQpLCAwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4ICsgMSwgMCwgY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGQuc2V0RWRpdG9yKHRoaXMuZWRpdG9yKTtcclxuICAgICAgICAgICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm1vdmVDaGlsZFVwID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5Nb3ZlQ2hpbGRVcChjaGlsZCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjaGlsZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ubW92ZShpbmRleCwgaW5kZXggLSAxKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm1vdmVDaGlsZERvd24gPSBmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbk1vdmVDaGlsZERvd24oY2hpbGQpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY2hpbGQpO1xyXG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLm1vdmUoaW5kZXgsIGluZGV4ICsgMSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5Nb3ZlQ2hpbGRVcCA9IGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY2hpbGQpO1xyXG4gICAgICAgICAgICByZXR1cm4gaW5kZXggPiAwO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuTW92ZUNoaWxkRG93biA9IGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY2hpbGQpO1xyXG4gICAgICAgICAgICByZXR1cm4gaW5kZXggPCB0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jaGlsZHJlblRvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXyh0aGlzLmNoaWxkcmVuKS5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQudG9PYmplY3QoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRJbm5lclRleHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfKHRoaXMuY2hpbGRyZW4pLnJlZHVjZShmdW5jdGlvbiAobWVtbywgY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtZW1vICsgXCJcXG5cIiArIGNoaWxkLmdldElubmVyVGV4dCgpO1xyXG4gICAgICAgICAgICB9LCBcIlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGFzdGUgPSBmdW5jdGlvbiAoY2xpcGJvYXJkRGF0YSkge1xyXG4gICAgICAgICAgICB2YXIganNvbiA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHQvanNvblwiKTtcclxuICAgICAgICAgICAgaWYgKCEhanNvbikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKGpzb24pO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gTGF5b3V0RWRpdG9yLmVsZW1lbnRGcm9tKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXN0ZUNoaWxkKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMucGFzdGVDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoXyh0aGlzLmFsbG93ZWRDaGlsZFR5cGVzKS5jb250YWlucyhjaGlsZC50eXBlKSB8fCBjaGlsZC5pc0NvbnRhaW5hYmxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZENoaWxkKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIGNoaWxkLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCEhdGhpcy5wYXJlbnQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5wYXN0ZUNoaWxkKGNoaWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0Q29udGFpbmVyVGVtcGxhdGVTdHlsZXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBzdHlsZXMgPSB0aGlzLmNvbnRhaW5lclRlbXBsYXRlU3R5bGVzIHx8IHt9O1xyXG4gICAgICAgICAgICB2YXIgY3NzID0gXCJcIjtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIHN0eWxlcykge1xyXG4gICAgICAgICAgICAgICAgY3NzICs9IHByb3BlcnR5ICsgXCI6XCIgKyBzdHlsZXNbcHJvcGVydHldICsgXCI7XCI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjc3M7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbn0pKExheW91dEVkaXRvciB8fCAoTGF5b3V0RWRpdG9yID0ge30pKTsiLCJ2YXIgTGF5b3V0RWRpdG9yO1xyXG4oZnVuY3Rpb24gKExheW91dEVkaXRvcikge1xyXG5cclxuICAgIExheW91dEVkaXRvci5DYW52YXMgPSBmdW5jdGlvbiAoZGF0YSwgaHRtbElkLCBodG1sQ2xhc3MsIGh0bWxTdHlsZSwgaXNUZW1wbGF0ZWQsIHJ1bGUsIGNoaWxkcmVuKSB7XHJcbiAgICAgICAgTGF5b3V0RWRpdG9yLkVsZW1lbnQuY2FsbCh0aGlzLCBcIkNhbnZhc1wiLCBkYXRhLCBodG1sSWQsIGh0bWxDbGFzcywgaHRtbFN0eWxlLCBpc1RlbXBsYXRlZCwgcnVsZSk7XHJcbiAgICAgICAgTGF5b3V0RWRpdG9yLkNvbnRhaW5lci5jYWxsKHRoaXMsIFtcIkNhbnZhc1wiLCBcIkdyaWRcIiwgXCJDb250ZW50XCJdLCBjaGlsZHJlbik7XHJcblxyXG4gICAgICAgIHRoaXMuaXNDb250YWluYWJsZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMudG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmVsZW1lbnRUb09iamVjdCgpO1xyXG4gICAgICAgICAgICByZXN1bHQuY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuVG9PYmplY3QoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuQ2FudmFzLmZyb20gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExheW91dEVkaXRvci5DYW52YXMoXHJcbiAgICAgICAgICAgIHZhbHVlLmRhdGEsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWxJZCxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbENsYXNzLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sU3R5bGUsXHJcbiAgICAgICAgICAgIHZhbHVlLmlzVGVtcGxhdGVkLFxyXG4gICAgICAgICAgICB2YWx1ZS5ydWxlLFxyXG4gICAgICAgICAgICBMYXlvdXRFZGl0b3IuY2hpbGRyZW5Gcm9tKHZhbHVlLmNoaWxkcmVuKSk7XHJcblxyXG4gICAgICAgIHJlc3VsdC50b29sYm94SWNvbiA9IHZhbHVlLnRvb2xib3hJY29uO1xyXG4gICAgICAgIHJlc3VsdC50b29sYm94TGFiZWwgPSB2YWx1ZS50b29sYm94TGFiZWw7XHJcbiAgICAgICAgcmVzdWx0LnRvb2xib3hEZXNjcmlwdGlvbiA9IHZhbHVlLnRvb2xib3hEZXNjcmlwdGlvbjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcblxyXG59KShMYXlvdXRFZGl0b3IgfHwgKExheW91dEVkaXRvciA9IHt9KSk7XHJcbiIsInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkdyaWQgPSBmdW5jdGlvbiAoZGF0YSwgaHRtbElkLCBodG1sQ2xhc3MsIGh0bWxTdHlsZSwgaXNUZW1wbGF0ZWQsIHJ1bGUsIGNoaWxkcmVuKSB7XHJcbiAgICAgICAgTGF5b3V0RWRpdG9yLkVsZW1lbnQuY2FsbCh0aGlzLCBcIkdyaWRcIiwgZGF0YSwgaHRtbElkLCBodG1sQ2xhc3MsIGh0bWxTdHlsZSwgaXNUZW1wbGF0ZWQsIHJ1bGUpO1xyXG4gICAgICAgIExheW91dEVkaXRvci5Db250YWluZXIuY2FsbCh0aGlzLCBbXCJSb3dcIl0sIGNoaWxkcmVuKTtcclxuXHJcbiAgICAgICAgdGhpcy50b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuZWxlbWVudFRvT2JqZWN0KCk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW5Ub09iamVjdCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIExheW91dEVkaXRvci5HcmlkLmZyb20gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExheW91dEVkaXRvci5HcmlkKFxyXG4gICAgICAgICAgICB2YWx1ZS5kYXRhLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sSWQsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWxDbGFzcyxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbFN0eWxlLFxyXG4gICAgICAgICAgICB2YWx1ZS5pc1RlbXBsYXRlZCxcclxuICAgICAgICAgICAgdmFsdWUucnVsZSxcclxuICAgICAgICAgICAgTGF5b3V0RWRpdG9yLmNoaWxkcmVuRnJvbSh2YWx1ZS5jaGlsZHJlbikpO1xyXG4gICAgICAgIHJlc3VsdC50b29sYm94SWNvbiA9IHZhbHVlLnRvb2xib3hJY29uO1xyXG4gICAgICAgIHJlc3VsdC50b29sYm94TGFiZWwgPSB2YWx1ZS50b29sYm94TGFiZWw7XHJcbiAgICAgICAgcmVzdWx0LnRvb2xib3hEZXNjcmlwdGlvbiA9IHZhbHVlLnRvb2xib3hEZXNjcmlwdGlvbjtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbn0pKExheW91dEVkaXRvciB8fCAoTGF5b3V0RWRpdG9yID0ge30pKTsiLCJ2YXIgTGF5b3V0RWRpdG9yO1xyXG4oZnVuY3Rpb24gKExheW91dEVkaXRvcikge1xyXG5cclxuICAgIExheW91dEVkaXRvci5Sb3cgPSBmdW5jdGlvbiAoZGF0YSwgaHRtbElkLCBodG1sQ2xhc3MsIGh0bWxTdHlsZSwgaXNUZW1wbGF0ZWQsIHJ1bGUsIGNoaWxkcmVuKSB7XHJcbiAgICAgICAgTGF5b3V0RWRpdG9yLkVsZW1lbnQuY2FsbCh0aGlzLCBcIlJvd1wiLCBkYXRhLCBodG1sSWQsIGh0bWxDbGFzcywgaHRtbFN0eWxlLCBpc1RlbXBsYXRlZCwgcnVsZSk7XHJcbiAgICAgICAgTGF5b3V0RWRpdG9yLkNvbnRhaW5lci5jYWxsKHRoaXMsIFtcIkNvbHVtblwiXSwgY2hpbGRyZW4pO1xyXG5cclxuICAgICAgICB2YXIgX3NlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBfZ2V0VG90YWxDb2x1bW5zV2lkdGgoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfKF9zZWxmLmNoaWxkcmVuKS5yZWR1Y2UoZnVuY3Rpb24gKG1lbW8sIGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWVtbyArIGNoaWxkLm9mZnNldCArIGNoaWxkLndpZHRoO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEltcGxlbWVudHMgYSBzaW1wbGUgYWxnb3JpdGhtIHRvIGRpc3RyaWJ1dGUgc3BhY2UgKGVpdGhlciBwb3NpdGl2ZSBvciBuZWdhdGl2ZSlcclxuICAgICAgICAvLyBiZXR3ZWVuIHRoZSBjaGlsZCBjb2x1bW5zIG9mIHRoZSByb3cuIE5lZ2F0aXZlIHNwYWNlIGlzIGRpc3RyaWJ1dGVkIHdoZW4gbWFraW5nXHJcbiAgICAgICAgLy8gcm9vbSBmb3IgYSBuZXcgY29sdW1uIChlLmMuIGNsaXBib2FyZCBwYXN0ZSBvciBkcm9wcGluZyBmcm9tIHRoZSB0b29sYm94KSB3aGlsZVxyXG4gICAgICAgIC8vIHBvc2l0aXZlIHNwYWNlIGlzIGRpc3RyaWJ1dGVkIHdoZW4gZmlsbGluZyB0aGUgZ3JhcCBvZiBhIHJlbW92ZWQgY29sdW1uLlxyXG4gICAgICAgIGZ1bmN0aW9uIF9kaXN0cmlidXRlU3BhY2Uoc3BhY2UpIHtcclxuICAgICAgICAgICAgaWYgKHNwYWNlID09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgdW5kaXN0cmlidXRlZFNwYWNlID0gc3BhY2U7XHJcblxyXG4gICAgICAgICAgICBpZiAodW5kaXN0cmlidXRlZFNwYWNlIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhY2FudFNwYWNlID0gMTIgLSBfZ2V0VG90YWxDb2x1bW5zV2lkdGgoKTtcclxuICAgICAgICAgICAgICAgIHVuZGlzdHJpYnV0ZWRTcGFjZSArPSB2YWNhbnRTcGFjZTtcclxuICAgICAgICAgICAgICAgIGlmICh1bmRpc3RyaWJ1dGVkU3BhY2UgPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgIHVuZGlzdHJpYnV0ZWRTcGFjZSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIElmIHNwYWNlIGlzIG5lZ2F0aXZlLCB0cnkgdG8gZGVjcmVhc2Ugb2Zmc2V0cyBmaXJzdC5cclxuICAgICAgICAgICAgd2hpbGUgKHVuZGlzdHJpYnV0ZWRTcGFjZSA8IDAgJiYgXyhfc2VsZi5jaGlsZHJlbikuYW55KGZ1bmN0aW9uIChjb2x1bW4pIHsgcmV0dXJuIGNvbHVtbi5vZmZzZXQgPiAwOyB9KSkgeyAvLyBXaGlsZSB0aGVyZSBpcyBzdGlsbCBvZmZzZXQgbGVmdCB0byByZW1vdmUuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgX3NlbGYuY2hpbGRyZW4ubGVuZ3RoICYmIHVuZGlzdHJpYnV0ZWRTcGFjZSA8IDA7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW4gPSBfc2VsZi5jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLm9mZnNldCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLm9mZnNldC0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRpc3RyaWJ1dGVkU3BhY2UrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGhhc1dpZHRoKGNvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuZGlzdHJpYnV0ZWRTcGFjZSA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi53aWR0aCA8IDEyO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodW5kaXN0cmlidXRlZFNwYWNlIDwgMClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLndpZHRoID4gMTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gVHJ5IHRvIGRpc3RyaWJ1dGUgcmVtYWluaW5nIHNwYWNlIChjb3VsZCBiZSBuZWdhdGl2ZSBvciBwb3NpdGl2ZSkgdXNpbmcgd2lkdGhzLlxyXG4gICAgICAgICAgICB3aGlsZSAodW5kaXN0cmlidXRlZFNwYWNlICE9IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIEFueSBtb3JlIGNvbHVtbiB3aWR0aCBhdmFpbGFibGUgZm9yIGRpc3RyaWJ1dGlvbj9cclxuICAgICAgICAgICAgICAgIGlmICghXyhfc2VsZi5jaGlsZHJlbikuYW55KGhhc1dpZHRoKSlcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBfc2VsZi5jaGlsZHJlbi5sZW5ndGggJiYgdW5kaXN0cmlidXRlZFNwYWNlICE9IDA7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW4gPSBfc2VsZi5jaGlsZHJlbltpICUgX3NlbGYuY2hpbGRyZW4ubGVuZ3RoXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzV2lkdGgoY29sdW1uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSB1bmRpc3RyaWJ1dGVkU3BhY2UgLyBNYXRoLmFicyh1bmRpc3RyaWJ1dGVkU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4ud2lkdGggKz0gZGVsdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGlzdHJpYnV0ZWRTcGFjZSAtPSBkZWx0YTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdW5kaXN0cmlidXRlZFNwYWNlID09IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgX2lzQWRkaW5nQ29sdW1uID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuY2FuQWRkQ29sdW1uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGggPCAxMjtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmJlZ2luQWRkQ29sdW1uID0gZnVuY3Rpb24gKG5ld0NvbHVtbldpZHRoKSB7XHJcbiAgICAgICAgICAgIGlmICghIV9pc0FkZGluZ0NvbHVtbilcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbHVtbiBhZGQgb3BlcmF0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXCIpXHJcbiAgICAgICAgICAgIF8odGhpcy5jaGlsZHJlbikuZWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4uYmVnaW5DaGFuZ2UoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChfZGlzdHJpYnV0ZVNwYWNlKC1uZXdDb2x1bW5XaWR0aCkpIHtcclxuICAgICAgICAgICAgICAgIF9pc0FkZGluZ0NvbHVtbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfKHRoaXMuY2hpbGRyZW4pLmVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLnJvbGxiYWNrQ2hhbmdlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jb21taXRBZGRDb2x1bW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghX2lzQWRkaW5nQ29sdW1uKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29sdW1uIGFkZCBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MuXCIpXHJcbiAgICAgICAgICAgIF8odGhpcy5jaGlsZHJlbikuZWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4uY29tbWl0Q2hhbmdlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBfaXNBZGRpbmdDb2x1bW4gPSBmYWxzZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnJvbGxiYWNrQWRkQ29sdW1uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIV9pc0FkZGluZ0NvbHVtbilcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbHVtbiBhZGQgb3BlcmF0aW9uIGluIHByb2dyZXNzLlwiKVxyXG4gICAgICAgICAgICBfKHRoaXMuY2hpbGRyZW4pLmVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLnJvbGxiYWNrQ2hhbmdlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBfaXNBZGRpbmdDb2x1bW4gPSBmYWxzZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgX2Jhc2VEZWxldGVDaGlsZCA9IHRoaXMuZGVsZXRlQ2hpbGQ7XHJcbiAgICAgICAgdGhpcy5kZWxldGVDaGlsZCA9IGZ1bmN0aW9uIChjb2x1bW4pIHsgXHJcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IGNvbHVtbi53aWR0aDtcclxuICAgICAgICAgICAgX2Jhc2VEZWxldGVDaGlsZC5jYWxsKHRoaXMsIGNvbHVtbik7XHJcbiAgICAgICAgICAgIF9kaXN0cmlidXRlU3BhY2Uod2lkdGgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuQ29udHJhY3RDb2x1bW5SaWdodCA9IGZ1bmN0aW9uIChjb2x1bW4sIGNvbm5lY3RBZGphY2VudCkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY29sdW1uKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLndpZHRoID4gMTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY29udHJhY3RDb2x1bW5SaWdodCA9IGZ1bmN0aW9uIChjb2x1bW4sIGNvbm5lY3RBZGphY2VudCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuQ29udHJhY3RDb2x1bW5SaWdodChjb2x1bW4sIGNvbm5lY3RBZGphY2VudCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY29sdW1uKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ud2lkdGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLndpZHRoLS07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gaW5kZXggKyAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0Q29sdW1uID0gdGhpcy5jaGlsZHJlbltpbmRleCArIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdEFkamFjZW50ICYmIG5leHRDb2x1bW4ub2Zmc2V0ID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Q29sdW1uLndpZHRoKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRDb2x1bW4ub2Zmc2V0Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5FeHBhbmRDb2x1bW5SaWdodCA9IGZ1bmN0aW9uIChjb2x1bW4sIGNvbm5lY3RBZGphY2VudCkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY29sdW1uKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ud2lkdGggPj0gMTIpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gaW5kZXggKyAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRDb2x1bW4gPSB0aGlzLmNoaWxkcmVuW2luZGV4ICsgMV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3RBZGphY2VudCAmJiBuZXh0Q29sdW1uLm9mZnNldCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dENvbHVtbi53aWR0aCA+IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dENvbHVtbi5vZmZzZXQgPiAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9nZXRUb3RhbENvbHVtbnNXaWR0aCgpIDwgMTI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZXhwYW5kQ29sdW1uUmlnaHQgPSBmdW5jdGlvbiAoY29sdW1uLCBjb25uZWN0QWRqYWNlbnQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbkV4cGFuZENvbHVtblJpZ2h0KGNvbHVtbiwgY29ubmVjdEFkamFjZW50KSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjb2x1bW4pO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gaW5kZXggKyAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRDb2x1bW4gPSB0aGlzLmNoaWxkcmVuW2luZGV4ICsgMV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3RBZGphY2VudCAmJiBuZXh0Q29sdW1uLm9mZnNldCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Q29sdW1uLndpZHRoLS07XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Q29sdW1uLm9mZnNldC0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29sdW1uLndpZHRoKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNhbkV4cGFuZENvbHVtbkxlZnQgPSBmdW5jdGlvbiAoY29sdW1uLCBjb25uZWN0QWRqYWNlbnQpIHtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNvbHVtbik7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLndpZHRoID49IDEyKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcHJldkNvbHVtbiA9IHRoaXMuY2hpbGRyZW5baW5kZXggLSAxXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdEFkamFjZW50ICYmIGNvbHVtbi5vZmZzZXQgPT0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZDb2x1bW4ud2lkdGggPiAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5vZmZzZXQgPiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmV4cGFuZENvbHVtbkxlZnQgPSBmdW5jdGlvbiAoY29sdW1uLCBjb25uZWN0QWRqYWNlbnQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbkV4cGFuZENvbHVtbkxlZnQoY29sdW1uLCBjb25uZWN0QWRqYWNlbnQpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNvbHVtbik7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZDb2x1bW4gPSB0aGlzLmNoaWxkcmVuW2luZGV4IC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3RBZGphY2VudCAmJiBjb2x1bW4ub2Zmc2V0ID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZDb2x1bW4ud2lkdGgtLTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5vZmZzZXQtLTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4ub2Zmc2V0LS07XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4ud2lkdGgrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuQ29udHJhY3RDb2x1bW5MZWZ0ID0gZnVuY3Rpb24gKGNvbHVtbiwgY29ubmVjdEFkamFjZW50KSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjb2x1bW4pO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4ud2lkdGggPiAxO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jb250cmFjdENvbHVtbkxlZnQgPSBmdW5jdGlvbiAoY29sdW1uLCBjb25uZWN0QWRqYWNlbnQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbkNvbnRyYWN0Q29sdW1uTGVmdChjb2x1bW4sIGNvbm5lY3RBZGphY2VudCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY29sdW1uKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcHJldkNvbHVtbiA9IHRoaXMuY2hpbGRyZW5baW5kZXggLSAxXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdEFkamFjZW50ICYmIGNvbHVtbi5vZmZzZXQgPT0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldkNvbHVtbi53aWR0aCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLm9mZnNldCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5vZmZzZXQrKztcclxuICAgICAgICAgICAgICAgIGNvbHVtbi53aWR0aC0tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVuQ29sdW1ucyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICB2YXIgZXZlbldpZHRoID0gTWF0aC5mbG9vcigxMiAvIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcclxuICAgICAgICAgICAgXyh0aGlzLmNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbHVtbi53aWR0aCA9IGV2ZW5XaWR0aDtcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5vZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciByZXN0ID0gMTIgJSB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKHJlc3QgPiAwKVxyXG4gICAgICAgICAgICAgICAgX2Rpc3RyaWJ1dGVTcGFjZShyZXN0KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgX2Jhc2VQYXN0ZUNoaWxkID0gdGhpcy5wYXN0ZUNoaWxkO1xyXG4gICAgICAgIHRoaXMucGFzdGVDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PSBcIkNvbHVtblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5iZWdpbkFkZENvbHVtbihjaGlsZC53aWR0aCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1pdEFkZENvbHVtbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9iYXNlUGFzdGVDaGlsZC5jYWxsKHRoaXMsIGNoaWxkKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCEhdGhpcy5wYXJlbnQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5wYXN0ZUNoaWxkKGNoaWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmVsZW1lbnRUb09iamVjdCgpO1xyXG4gICAgICAgICAgICByZXN1bHQuY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuVG9PYmplY3QoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuUm93LmZyb20gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExheW91dEVkaXRvci5Sb3coXHJcbiAgICAgICAgICAgIHZhbHVlLmRhdGEsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWxJZCxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbENsYXNzLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sU3R5bGUsXHJcbiAgICAgICAgICAgIHZhbHVlLmlzVGVtcGxhdGVkLFxyXG4gICAgICAgICAgICB2YWx1ZS5ydWxlLFxyXG4gICAgICAgICAgICBMYXlvdXRFZGl0b3IuY2hpbGRyZW5Gcm9tKHZhbHVlLmNoaWxkcmVuKSk7XHJcbiAgICAgICAgcmVzdWx0LnRvb2xib3hJY29uID0gdmFsdWUudG9vbGJveEljb247XHJcbiAgICAgICAgcmVzdWx0LnRvb2xib3hMYWJlbCA9IHZhbHVlLnRvb2xib3hMYWJlbDtcclxuICAgICAgICByZXN1bHQudG9vbGJveERlc2NyaXB0aW9uID0gdmFsdWUudG9vbGJveERlc2NyaXB0aW9uO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG5cclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyIsInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XHJcbiAgICBMYXlvdXRFZGl0b3IuQ29sdW1uID0gZnVuY3Rpb24gKGRhdGEsIGh0bWxJZCwgaHRtbENsYXNzLCBodG1sU3R5bGUsIGlzVGVtcGxhdGVkLCB3aWR0aCwgb2Zmc2V0LCBjb2xsYXBzaWJsZSwgcnVsZSwgY2hpbGRyZW4pIHtcclxuICAgICAgICBMYXlvdXRFZGl0b3IuRWxlbWVudC5jYWxsKHRoaXMsIFwiQ29sdW1uXCIsIGRhdGEsIGh0bWxJZCwgaHRtbENsYXNzLCBodG1sU3R5bGUsIGlzVGVtcGxhdGVkLCBydWxlKTtcclxuICAgICAgICBMYXlvdXRFZGl0b3IuQ29udGFpbmVyLmNhbGwodGhpcywgW1wiR3JpZFwiLCBcIkNvbnRlbnRcIl0sIGNoaWxkcmVuKTtcclxuXHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xyXG4gICAgICAgIHRoaXMuY29sbGFwc2libGUgPSBjb2xsYXBzaWJsZTtcclxuXHJcbiAgICAgICAgdmFyIF9oYXNQZW5kaW5nQ2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIF9vcmlnV2lkdGggPSAwO1xyXG4gICAgICAgIHZhciBfb3JpZ09mZnNldCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuYmVnaW5DaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghIV9oYXNQZW5kaW5nQ2hhbmdlKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29sdW1uIGFscmVhZHkgaGFzIGEgcGVuZGluZyBjaGFuZ2UuXCIpO1xyXG4gICAgICAgICAgICBfaGFzUGVuZGluZ0NoYW5nZSA9IHRydWU7XHJcbiAgICAgICAgICAgIF9vcmlnV2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgICAgICBfb3JpZ09mZnNldCA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY29tbWl0Q2hhbmdlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIV9oYXNQZW5kaW5nQ2hhbmdlKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29sdW1uIGhhcyBubyBwZW5kaW5nIGNoYW5nZS5cIik7XHJcbiAgICAgICAgICAgIF9vcmlnV2lkdGggPSAwO1xyXG4gICAgICAgICAgICBfb3JpZ09mZnNldCA9IDA7XHJcbiAgICAgICAgICAgIF9oYXNQZW5kaW5nQ2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5yb2xsYmFja0NoYW5nZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCFfaGFzUGVuZGluZ0NoYW5nZSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbHVtbiBoYXMgbm8gcGVuZGluZyBjaGFuZ2UuXCIpO1xyXG4gICAgICAgICAgICB0aGlzLndpZHRoID0gX29yaWdXaWR0aDtcclxuICAgICAgICAgICAgdGhpcy5vZmZzZXQgPSBfb3JpZ09mZnNldDtcclxuICAgICAgICAgICAgX29yaWdXaWR0aCA9IDA7XHJcbiAgICAgICAgICAgIF9vcmlnT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgX2hhc1BlbmRpbmdDaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNhblNwbGl0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1RlbXBsYXRlZClcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2lkdGggPiAxO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc3BsaXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5TcGxpdCgpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdmFyIG5ld0NvbHVtbldpZHRoID0gTWF0aC5mbG9vcih0aGlzLndpZHRoIC8gMik7XHJcbiAgICAgICAgICAgIHZhciBuZXdDb2x1bW4gPSBMYXlvdXRFZGl0b3IuQ29sdW1uLmZyb20oe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogbnVsbCxcclxuICAgICAgICAgICAgICAgIGh0bWxJZDogbnVsbCxcclxuICAgICAgICAgICAgICAgIGh0bWxDbGFzczogbnVsbCxcclxuICAgICAgICAgICAgICAgIGh0bWxTdHlsZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBuZXdDb2x1bW5XaWR0aCxcclxuICAgICAgICAgICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLndpZHRoIC0gbmV3Q29sdW1uV2lkdGg7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Lmluc2VydENoaWxkKG5ld0NvbHVtbiwgdGhpcyk7XHJcbiAgICAgICAgICAgIG5ld0NvbHVtbi5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNhbkNvbnRyYWN0UmlnaHQgPSBmdW5jdGlvbiAoY29ubmVjdEFkamFjZW50KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGVtcGxhdGVkKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuY2FuQ29udHJhY3RDb2x1bW5SaWdodCh0aGlzLCBjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY29udHJhY3RSaWdodCA9IGZ1bmN0aW9uIChjb25uZWN0QWRqYWNlbnQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbkNvbnRyYWN0UmlnaHQoY29ubmVjdEFkamFjZW50KSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQuY29udHJhY3RDb2x1bW5SaWdodCh0aGlzLCBjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuRXhwYW5kUmlnaHQgPSBmdW5jdGlvbiAoY29ubmVjdEFkamFjZW50KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGVtcGxhdGVkKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuY2FuRXhwYW5kQ29sdW1uUmlnaHQodGhpcywgY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmV4cGFuZFJpZ2h0ID0gZnVuY3Rpb24gKGNvbm5lY3RBZGphY2VudCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuRXhwYW5kUmlnaHQoY29ubmVjdEFkamFjZW50KSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQuZXhwYW5kQ29sdW1uUmlnaHQodGhpcywgY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNhbkV4cGFuZExlZnQgPSBmdW5jdGlvbiAoY29ubmVjdEFkamFjZW50KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGVtcGxhdGVkKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuY2FuRXhwYW5kQ29sdW1uTGVmdCh0aGlzLCBjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZXhwYW5kTGVmdCA9IGZ1bmN0aW9uIChjb25uZWN0QWRqYWNlbnQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbkV4cGFuZExlZnQoY29ubmVjdEFkamFjZW50KSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQuZXhwYW5kQ29sdW1uTGVmdCh0aGlzLCBjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuQ29udHJhY3RMZWZ0ID0gZnVuY3Rpb24gKGNvbm5lY3RBZGphY2VudCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1RlbXBsYXRlZClcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmNhbkNvbnRyYWN0Q29sdW1uTGVmdCh0aGlzLCBjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY29udHJhY3RMZWZ0ID0gZnVuY3Rpb24gKGNvbm5lY3RBZGphY2VudCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuQ29udHJhY3RMZWZ0KGNvbm5lY3RBZGphY2VudCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmNvbnRyYWN0Q29sdW1uTGVmdCh0aGlzLCBjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMudG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmVsZW1lbnRUb09iamVjdCgpO1xyXG4gICAgICAgICAgICByZXN1bHQud2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgICAgICByZXN1bHQub2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jb2xsYXBzaWJsZSA9IHRoaXMuY29sbGFwc2libGU7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW5Ub09iamVjdCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIExheW91dEVkaXRvci5Db2x1bW4uZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgTGF5b3V0RWRpdG9yLkNvbHVtbihcclxuICAgICAgICAgICAgdmFsdWUuZGF0YSxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbElkLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sQ2xhc3MsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWxTdHlsZSxcclxuICAgICAgICAgICAgdmFsdWUuaXNUZW1wbGF0ZWQsXHJcbiAgICAgICAgICAgIHZhbHVlLndpZHRoLFxyXG4gICAgICAgICAgICB2YWx1ZS5vZmZzZXQsXHJcbiAgICAgICAgICAgIHZhbHVlLmNvbGxhcHNpYmxlLFxyXG4gICAgICAgICAgICB2YWx1ZS5ydWxlLFxyXG4gICAgICAgICAgICBMYXlvdXRFZGl0b3IuY2hpbGRyZW5Gcm9tKHZhbHVlLmNoaWxkcmVuKSk7XHJcbiAgICAgICAgcmVzdWx0LnRvb2xib3hJY29uID0gdmFsdWUudG9vbGJveEljb247XHJcbiAgICAgICAgcmVzdWx0LnRvb2xib3hMYWJlbCA9IHZhbHVlLnRvb2xib3hMYWJlbDtcclxuICAgICAgICByZXN1bHQudG9vbGJveERlc2NyaXB0aW9uID0gdmFsdWUudG9vbGJveERlc2NyaXB0aW9uO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIExheW91dEVkaXRvci5Db2x1bW4udGltZXMgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gXy50aW1lcyh2YWx1ZSwgZnVuY3Rpb24gKG4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIExheW91dEVkaXRvci5Db2x1bW4uZnJvbSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgaHRtbElkOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgaHRtbENsYXNzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgaXNUZW1wbGF0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEyIC8gdmFsdWUsXHJcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgICAgICAgICAgICBjb2xsYXBzaWJsZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbn0pKExheW91dEVkaXRvciB8fCAoTGF5b3V0RWRpdG9yID0ge30pKTsiLCJ2YXIgTGF5b3V0RWRpdG9yO1xyXG4oZnVuY3Rpb24gKExheW91dEVkaXRvcikge1xyXG5cclxuICAgIExheW91dEVkaXRvci5Db250ZW50ID0gZnVuY3Rpb24gKGRhdGEsIGh0bWxJZCwgaHRtbENsYXNzLCBodG1sU3R5bGUsIGlzVGVtcGxhdGVkLCBjb250ZW50VHlwZSwgY29udGVudFR5cGVMYWJlbCwgY29udGVudFR5cGVDbGFzcywgaHRtbCwgaGFzRWRpdG9yLCBydWxlKSB7XHJcbiAgICAgICAgTGF5b3V0RWRpdG9yLkVsZW1lbnQuY2FsbCh0aGlzLCBcIkNvbnRlbnRcIiwgZGF0YSwgaHRtbElkLCBodG1sQ2xhc3MsIGh0bWxTdHlsZSwgaXNUZW1wbGF0ZWQsIHJ1bGUpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGU7XHJcbiAgICAgICAgdGhpcy5jb250ZW50VHlwZUxhYmVsID0gY29udGVudFR5cGVMYWJlbDtcclxuICAgICAgICB0aGlzLmNvbnRlbnRUeXBlQ2xhc3MgPSBjb250ZW50VHlwZUNsYXNzO1xyXG4gICAgICAgIHRoaXMuaHRtbCA9IGh0bWw7XHJcbiAgICAgICAgdGhpcy5oYXNFZGl0b3IgPSBoYXNFZGl0b3I7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0SW5uZXJUZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJCgkLnBhcnNlSFRNTChcIjxkaXY+XCIgKyB0aGlzLmh0bWwgKyBcIjwvZGl2PlwiKSkudGV4dCgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgQ29udGVudCBkaXJlY3RpdmUuXHJcbiAgICAgICAgdGhpcy5zZXRIdG1sID0gZnVuY3Rpb24gKGh0bWwpIHtcclxuICAgICAgICAgICAgdGhpcy5odG1sID0gaHRtbDtcclxuICAgICAgICAgICAgdGhpcy5odG1sVW5zYWZlID0gaHRtbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBiYXNlVG9PYmplY3QgPSB0aGlzLnRvT2JqZWN0O1xyXG4gICAgICAgIHRoaXMudG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiYXNlVG9PYmplY3QoKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNvbnRlbnRUeXBlTGFiZWwgPSB0aGlzLmNvbnRlbnRUeXBlTGFiZWw7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jb250ZW50VHlwZUNsYXNzID0gdGhpcy5jb250ZW50VHlwZUNsYXNzO1xyXG4gICAgICAgICAgICByZXN1bHQuaHRtbCA9IHRoaXMuaHRtbDtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNldEh0bWwoaHRtbCk7XHJcbiAgICB9O1xyXG5cclxuICAgIExheW91dEVkaXRvci5Db250ZW50LmZyb20gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExheW91dEVkaXRvci5Db250ZW50KFxyXG4gICAgICAgICAgICB2YWx1ZS5kYXRhLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sSWQsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWxDbGFzcyxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbFN0eWxlLFxyXG4gICAgICAgICAgICB2YWx1ZS5pc1RlbXBsYXRlZCxcclxuICAgICAgICAgICAgdmFsdWUuY29udGVudFR5cGUsXHJcbiAgICAgICAgICAgIHZhbHVlLmNvbnRlbnRUeXBlTGFiZWwsXHJcbiAgICAgICAgICAgIHZhbHVlLmNvbnRlbnRUeXBlQ2xhc3MsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWwsXHJcbiAgICAgICAgICAgIHZhbHVlLmhhc0VkaXRvcixcclxuICAgICAgICAgICAgdmFsdWUucnVsZSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG5cclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-af.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-af.js index 6c9ccb76bf4..2ae7da2eb11 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-af.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-af.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtYWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtYWYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBBZnJpa2FhbnMgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBSZW5pZXIgUHJldG9yaXVzIGFuZCBSdWVkaWdlciBUaGllZGUuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FmJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyaWUnLCdGZWJydWFyaWUnLCdNYWFydCcsJ0FwcmlsJywnTWVpJywnSnVuaWUnLFxuXHRcdCdKdWxpZScsJ0F1Z3VzdHVzJywnU2VwdGVtYmVyJywnT2t0b2JlcicsJ05vdmVtYmVyJywnRGVzZW1iZXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywgJ0ZlYicsICdNcnQnLCAnQXByJywgJ01laScsICdKdW4nLFxuXHRcdCdKdWwnLCAnQXVnJywgJ1NlcCcsICdPa3QnLCAnTm92JywgJ0RlcyddLFxuXHRcdGRheU5hbWVzOiBbJ1NvbmRhZycsICdNYWFuZGFnJywgJ0RpbnNkYWcnLCAnV29lbnNkYWcnLCAnRG9uZGVyZGFnJywgJ1ZyeWRhZycsICdTYXRlcmRhZyddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU29uJywgJ01hYW4nLCAnRGlucycsICdXb2VucycsICdEb24nLCAnVnJ5JywgJ1NhdCddLFxuXHRcdGRheU5hbWVzTWluOiBbJ1NvJywnTWEnLCdEaScsJ1dvJywnRG8nLCdWcicsJ1NhJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYWYnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FmJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtYWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtYWYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEFmcmlrYWFucyBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgUmVuaWVyIFByZXRvcml1cyBhbmQgUnVlZGlnZXIgVGhpZWRlLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYWYnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW51YXJpZScsJ0ZlYnJ1YXJpZScsJ01hYXJ0JywnQXByaWwnLCdNZWknLCdKdW5pZScsXHJcblx0XHQnSnVsaWUnLCdBdWd1c3R1cycsJ1NlcHRlbWJlcicsJ09rdG9iZXInLCdOb3ZlbWJlcicsJ0Rlc2VtYmVyJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywgJ0ZlYicsICdNcnQnLCAnQXByJywgJ01laScsICdKdW4nLFxyXG5cdFx0J0p1bCcsICdBdWcnLCAnU2VwJywgJ09rdCcsICdOb3YnLCAnRGVzJ10sXHJcblx0XHRkYXlOYW1lczogWydTb25kYWcnLCAnTWFhbmRhZycsICdEaW5zZGFnJywgJ1dvZW5zZGFnJywgJ0RvbmRlcmRhZycsICdWcnlkYWcnLCAnU2F0ZXJkYWcnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU29uJywgJ01hYW4nLCAnRGlucycsICdXb2VucycsICdEb24nLCAnVnJ5JywgJ1NhdCddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnU28nLCdNYScsJ0RpJywnV28nLCdEbycsJ1ZyJywnU2EnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydhZiddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydhZiddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-am.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-am.js index d0764fedc20..7c9e47749aa 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-am.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-am.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtYW0uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtYW0uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBBbWhhcmljICjhiqDhiJvhiK3hipspIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIExleXUgU2lzYXkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FtJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsn4YyD4YqV4YuL4YiqJywn4Y2I4Yml4Yit4YuL4YiqJywn4Yib4Yit4Ym9Jywn4Yqg4Y2V4Yiq4YiNJywn4Yic4YutJywn4YyB4YqVJyxcblx0XHQn4YyB4YiL4YutJywn4Yqm4YyI4Yi14Ym1Jywn4Yi04Y2V4Ym04Yid4Ymg4YitJywn4Yqm4Yqt4Ym24Ymg4YitJywn4YqW4Yms4Yid4Ymg4YitJywn4Yuy4Yi04Yid4Ymg4YitJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ+GMg+GKleGLiycsICfhjYjhiaXhiK0nLCAn4Yib4Yit4Ym9JywgJ+GKoOGNleGIqicsICfhiJzhi60nLCAn4YyB4YqVJyxcblx0XHQn4YyB4YiL4YutJywgJ+GKpuGMiOGItScsICfhiLThjZXhibQnLCAn4Yqm4Yqt4Ym2JywgJ+GKluGJrOGInScsICfhi7LhiLThiJ0nXSxcblx0XHRkYXlOYW1lczogWyfhiLDhipXhi7Thi60nLCAn4YiY4YqV4Yu04YutJywgJ+GJteGLqeGIteGLtOGLrScsICfhi4zhipXhiLXhi7Thi60nLCAn4Ymw4Yit4Yiw4Yu04YutJywgJ+GNjeGIq+GLreGLtOGLrScsICfhiLPhibDhiK3hi7Thi60nXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+GIsOGKleGLtCcsICfhiJjhipXhi7QnLCAn4Ym14Yup4Yi1JywgJ+GLjOGKleGItScsICfhibDhiK3hiLAnLCAn4Y2N4Yir4YutJywgJ+GIs+GJsOGIrSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ+GIsOGKlScsICfhiJjhipUnLCAn4Ym14YupJywgJ+GLjOGKlScsICfhibDhiK0nLCAn4Y2N4YirJywgJ+GIs+GJsCddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FtJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydhbSddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtYW0uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtYW0uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEFtaGFyaWMgKOGKoOGIm+GIreGKmykgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBMZXl1IFNpc2F5LiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYW0nXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWyfhjIPhipXhi4vhiKonLCfhjYjhiaXhiK3hi4vhiKonLCfhiJvhiK3hib0nLCfhiqDhjZXhiKrhiI0nLCfhiJzhi60nLCfhjIHhipUnLFxyXG5cdFx0J+GMgeGIi+GLrScsJ+GKpuGMiOGIteGJtScsJ+GItOGNleGJtOGIneGJoOGIrScsJ+GKpuGKreGJtuGJoOGIrScsJ+GKluGJrOGIneGJoOGIrScsJ+GLsuGItOGIneGJoOGIrSddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ+GMg+GKleGLiycsICfhjYjhiaXhiK0nLCAn4Yib4Yit4Ym9JywgJ+GKoOGNleGIqicsICfhiJzhi60nLCAn4YyB4YqVJyxcclxuXHRcdCfhjIHhiIvhi60nLCAn4Yqm4YyI4Yi1JywgJ+GItOGNleGJtCcsICfhiqbhiq3hibYnLCAn4YqW4Yms4YidJywgJ+GLsuGItOGInSddLFxyXG5cdFx0ZGF5TmFtZXM6IFsn4Yiw4YqV4Yu04YutJywgJ+GImOGKleGLtOGLrScsICfhibXhi6nhiLXhi7Thi60nLCAn4YuM4YqV4Yi14Yu04YutJywgJ+GJsOGIreGIsOGLtOGLrScsICfhjY3hiKvhi63hi7Thi60nLCAn4Yiz4Ymw4Yit4Yu04YutJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+GIsOGKleGLtCcsICfhiJjhipXhi7QnLCAn4Ym14Yup4Yi1JywgJ+GLjOGKleGItScsICfhibDhiK3hiLAnLCAn4Y2N4Yir4YutJywgJ+GIs+GJsOGIrSddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn4Yiw4YqVJywgJ+GImOGKlScsICfhibXhi6knLCAn4YuM4YqVJywgJ+GJsOGIrScsICfhjY3hiKsnLCAn4Yiz4YmwJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYW0nXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYW0nXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ar-DZ.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ar-DZ.js index 018dc3a7d0a..b5f182391d4 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ar-DZ.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ar-DZ.js @@ -26,4 +26,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtYXItRFouanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLWFyLURaLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQWxnZXJpYW4gKGFuZCBUdW5pc2lhbikgQXJhYmljIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIE1vaGFtZWQgQ2hlcmlmIEJPVUNIRUxBR0hFTSAtLSBjaGVyaWZib3VjaGVsYWdoZW1AeWFob28uZnIgKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXItRFonXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWyfYrNin2YbZgdmKJywgJ9mB2YrZgdix2YonLCAn2YXYp9ix2LMnLCAn2KPZgdix2YrZhCcsICfZhdin2YonLCAn2KzZiNin2YYnLFxuXHRcdCfYrNmI2YrZhNmK2KknLCAn2KPZiNiqJywgJ9iz2KjYqtmF2KjYsScsJ9ij2YPYqtmI2KjYsScsICfZhtmI2YHZhdio2LEnLCAn2K/Zitiz2YXYqNixJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJzEwJywgJzExJywgJzEyJ10sXG5cdFx0ZGF5TmFtZXM6IFsn2KfZhNij2K3YrycsICfYp9mE2KfYq9mG2YrZhicsICfYp9mE2KvZhNin2KvYp9ihJywgJ9in2YTYo9ix2KjYudin2KEnLCAn2KfZhNiu2YXZitizJywgJ9in2YTYrNmF2LnYqScsICfYp9mE2LPYqNiqJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfYp9mE2KPYrdivJywgJ9in2YTYp9ir2YbZitmGJywgJ9in2YTYq9mE2KfYq9in2KEnLCAn2KfZhNij2LHYqNi52KfYoScsICfYp9mE2K7ZhdmK2LMnLCAn2KfZhNis2YXYudipJywgJ9in2YTYs9io2KonXSxcblx0XHRkYXlOYW1lc01pbjogWyfYp9mE2KPYrdivJywgJ9in2YTYp9ir2YbZitmGJywgJ9in2YTYq9mE2KfYq9in2KEnLCAn2KfZhNij2LHYqNi52KfYoScsICfYp9mE2K7ZhdmK2LMnLCAn2KfZhNis2YXYudipJywgJ9in2YTYs9io2KonXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDYsXG5cdFx0aXNSVEw6IHRydWVcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FyLURaJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydhci1EWiddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtYXItRFouanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLWFyLURaLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBBbGdlcmlhbiAoYW5kIFR1bmlzaWFuKSBBcmFiaWMgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBNb2hhbWVkIENoZXJpZiBCT1VDSEVMQUdIRU0gLS0gY2hlcmlmYm91Y2hlbGFnaGVtQHlhaG9vLmZyICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydhci1EWiddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ9is2KfZhtmB2YonLCAn2YHZitmB2LHZiicsICfZhdin2LHYsycsICfYo9mB2LHZitmEJywgJ9mF2KfZiicsICfYrNmI2KfZhicsXHJcblx0XHQn2KzZiNmK2YTZitipJywgJ9ij2YjYqicsICfYs9io2KrZhdio2LEnLCfYo9mD2KrZiNio2LEnLCAn2YbZiNmB2YXYqNixJywgJ9iv2YrYs9mF2KjYsSddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJzEwJywgJzExJywgJzEyJ10sXHJcblx0XHRkYXlOYW1lczogWyfYp9mE2KPYrdivJywgJ9in2YTYp9ir2YbZitmGJywgJ9in2YTYq9mE2KfYq9in2KEnLCAn2KfZhNij2LHYqNi52KfYoScsICfYp9mE2K7ZhdmK2LMnLCAn2KfZhNis2YXYudipJywgJ9in2YTYs9io2KonXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn2KfZhNij2K3YrycsICfYp9mE2KfYq9mG2YrZhicsICfYp9mE2KvZhNin2KvYp9ihJywgJ9in2YTYo9ix2KjYudin2KEnLCAn2KfZhNiu2YXZitizJywgJ9in2YTYrNmF2LnYqScsICfYp9mE2LPYqNiqJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfYp9mE2KPYrdivJywgJ9in2YTYp9ir2YbZitmGJywgJ9in2YTYq9mE2KfYq9in2KEnLCAn2KfZhNij2LHYqNi52KfYoScsICfYp9mE2K7ZhdmK2LMnLCAn2KfZhNis2YXYudipJywgJ9in2YTYs9io2KonXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiA2LFxyXG5cdFx0aXNSVEw6IHRydWVcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FyLURaJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FyLURaJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ar-EG.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ar-EG.js index 87cbae9d0c7..ecbedf3fe5f 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ar-EG.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ar-EG.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtYXItRUcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtYXItRUcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBBcmFiaWMgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgTWFobW91ZCBLaGFsZWQgLS0gbWFobW91ZC5raGFsZWRAYmFkcml0LmNvbVxuICAgTk9URTogbW9udGhOYW1lcyBhcmUgdGhlIG5ldyBtb250aHMgbmFtZXMgKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXItRUcnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWyfZitmG2KfZitixJywgJ9mB2KjYsdin2YrYsScsICfZhdin2LHYsycsICfYpdio2LHZitmEJywgJ9mF2KfZitmIJywgJ9mK2YjZhtmK2KknLFxuXHRcdCfZitmI2YTZitmIJywgJ9ij2LrYs9i32LMnLCAn2LPYqNiq2YXYqNixJywgJ9ij2YPYqtmI2KjYsScsICfZhtmI2YHZhdio2LEnLCAn2K/Zitiz2YXYqNixJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJzEwJywgJzExJywgJzEyJ10sXG5cdFx0ZGF5TmFtZXM6ICBbJ9in2YTYo9it2K8nLCAn2KfZhNin2KvZhtmK2YYnLCAn2KfZhNir2YTYp9ir2KfYoScsICfYp9mE2KPYsdio2LnYp9ihJywgJ9in2YTYrtmF2YrYsycsICfYp9mE2KzZhdi52KknLCAn2KfZhNiz2KjYqiddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn2KPYrdivJywgJ9in2KvZhtmK2YYnLCAn2KvZhNin2KvYp9ihJywgJ9ij2LHYqNi52KfYoScsICfYrtmF2YrYsycsICfYrNmF2LnYqScsICfYs9io2KonXSxcblx0XHRkYXlOYW1lc01pbjogWyfYo9it2K8nLCAn2KfYq9mG2YrZhicsICfYq9mE2KfYq9in2KEnLCAn2KPYsdio2LnYp9ihJywgJ9iu2YXZitizJywgJ9is2YXYudipJywgJ9iz2KjYqiddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogNixcblx0XHRpc1JUTDogdHJ1ZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXItRUcnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FyLUVHJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtYXItRUcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtYXItRUcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEFyYWJpYyBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIE1haG1vdWQgS2hhbGVkIC0tIG1haG1vdWQua2hhbGVkQGJhZHJpdC5jb21cclxuICAgTk9URTogbW9udGhOYW1lcyBhcmUgdGhlIG5ldyBtb250aHMgbmFtZXMgKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FyLUVHJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn2YrZhtin2YrYsScsICfZgdio2LHYp9mK2LEnLCAn2YXYp9ix2LMnLCAn2KXYqNix2YrZhCcsICfZhdin2YrZiCcsICfZitmI2YbZitipJyxcclxuXHRcdCfZitmI2YTZitmIJywgJ9ij2LrYs9i32LMnLCAn2LPYqNiq2YXYqNixJywgJ9ij2YPYqtmI2KjYsScsICfZhtmI2YHZhdio2LEnLCAn2K/Zitiz2YXYqNixJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnMTAnLCAnMTEnLCAnMTInXSxcclxuXHRcdGRheU5hbWVzOiAgWyfYp9mE2KPYrdivJywgJ9in2YTYp9ir2YbZitmGJywgJ9in2YTYq9mE2KfYq9in2KEnLCAn2KfZhNij2LHYqNi52KfYoScsICfYp9mE2K7ZhdmK2LMnLCAn2KfZhNis2YXYudipJywgJ9in2YTYs9io2KonXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn2KPYrdivJywgJ9in2KvZhtmK2YYnLCAn2KvZhNin2KvYp9ihJywgJ9ij2LHYqNi52KfYoScsICfYrtmF2YrYsycsICfYrNmF2LnYqScsICfYs9io2KonXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ9ij2K3YrycsICfYp9ir2YbZitmGJywgJ9ir2YTYp9ir2KfYoScsICfYo9ix2KjYudin2KEnLCAn2K7ZhdmK2LMnLCAn2KzZhdi52KknLCAn2LPYqNiqJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogNixcclxuXHRcdGlzUlRMOiB0cnVlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydhci1FRyddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydhci1FRyddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ar.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ar.js index c3a6f968513..673f1f5fd52 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ar.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ar.js @@ -28,4 +28,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtYXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy1hci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEFyYWJpYyBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBLaGFsZWQgQWwgSG9yYW5pIC0tINiu2KfZhNivINin2YTYrdmI2LHYp9mG2YogLS0ga29rby5kd0BnbWFpbC5jb20uICovXG4vKiBOT1RFOiBtb250aE5hbWVzIGFyZSB0aGUgb3JpZ2luYWwgbW9udGhzIG5hbWVzIGFuZCB0aGV5IGFyZSB0aGUgQXJhYmljIG5hbWVzLFxuICAgbm90IHRoZSBuZXcgbW9udGhzIG5hbWUg2YHYqNix2KfZitixIC0g2YrZhtin2YrYsSBhbmQgdGhlcmUgaXNuJ3QgYW55IEFyYWJpYyByb290cyBmb3IgdGhlc2UgbW9udGhzICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FyJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsn2YPYp9mG2YjZhiDYp9mE2KvYp9mG2YonLCAn2LTYqNin2LcnLCAn2KLYsNin2LEnLCAn2YbZitiz2KfZhicsICfYotiw2KfYsScsICfYrdiy2YrYsdin2YYnLFxuXHRcdCfYqtmF2YjYsicsICfYotioJywgJ9ij2YrZhNmI2YQnLCAn2KrYtNix2YrZhiDYp9mE2KPZiNmEJywgJ9iq2LTYsdmK2YYg2KfZhNir2KfZhtmKJywgJ9mD2KfZhtmI2YYg2KfZhNij2YjZhCddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWycxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICcxMCcsICcxMScsICcxMiddLFxuXHRcdGRheU5hbWVzOiBbJ9in2YTYo9it2K8nLCAn2KfZhNin2KvZhtmK2YYnLCAn2KfZhNir2YTYp9ir2KfYoScsICfYp9mE2KPYsdio2LnYp9ihJywgJ9in2YTYrtmF2YrYsycsICfYp9mE2KzZhdi52KknLCAn2KfZhNiz2KjYqiddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn2KfZhNij2K3YrycsICfYp9mE2KfYq9mG2YrZhicsICfYp9mE2KvZhNin2KvYp9ihJywgJ9in2YTYo9ix2KjYudin2KEnLCAn2KfZhNiu2YXZitizJywgJ9in2YTYrNmF2LnYqScsICfYp9mE2LPYqNiqJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn2KfZhNij2K3YrycsICfYp9mE2KfYq9mG2YrZhicsICfYp9mE2KvZhNin2KvYp9ihJywgJ9in2YTYo9ix2KjYudin2KEnLCAn2KfZhNiu2YXZitizJywgJ9in2YTYrNmF2LnYqScsICfYp9mE2LPYqNiqJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiA2LFxuXHRcdGlzUlRMOiB0cnVlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydhciddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXInXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtYXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy1hci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgQXJhYmljIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgS2hhbGVkIEFsIEhvcmFuaSAtLSDYrtin2YTYryDYp9mE2K3ZiNix2KfZhtmKIC0tIGtva28uZHdAZ21haWwuY29tLiAqL1xyXG4vKiBOT1RFOiBtb250aE5hbWVzIGFyZSB0aGUgb3JpZ2luYWwgbW9udGhzIG5hbWVzIGFuZCB0aGV5IGFyZSB0aGUgQXJhYmljIG5hbWVzLFxyXG4gICBub3QgdGhlIG5ldyBtb250aHMgbmFtZSDZgdio2LHYp9mK2LEgLSDZitmG2KfZitixIGFuZCB0aGVyZSBpc24ndCBhbnkgQXJhYmljIHJvb3RzIGZvciB0aGVzZSBtb250aHMgKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FyJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn2YPYp9mG2YjZhiDYp9mE2KvYp9mG2YonLCAn2LTYqNin2LcnLCAn2KLYsNin2LEnLCAn2YbZitiz2KfZhicsICfYotiw2KfYsScsICfYrdiy2YrYsdin2YYnLFxyXG5cdFx0J9iq2YXZiNiyJywgJ9ii2KgnLCAn2KPZitmE2YjZhCcsICfYqti02LHZitmGINin2YTYo9mI2YQnLCAn2KrYtNix2YrZhiDYp9mE2KvYp9mG2YonLCAn2YPYp9mG2YjZhiDYp9mE2KPZiNmEJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnMTAnLCAnMTEnLCAnMTInXSxcclxuXHRcdGRheU5hbWVzOiBbJ9in2YTYo9it2K8nLCAn2KfZhNin2KvZhtmK2YYnLCAn2KfZhNir2YTYp9ir2KfYoScsICfYp9mE2KPYsdio2LnYp9ihJywgJ9in2YTYrtmF2YrYsycsICfYp9mE2KzZhdi52KknLCAn2KfZhNiz2KjYqiddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfYp9mE2KPYrdivJywgJ9in2YTYp9ir2YbZitmGJywgJ9in2YTYq9mE2KfYq9in2KEnLCAn2KfZhNij2LHYqNi52KfYoScsICfYp9mE2K7ZhdmK2LMnLCAn2KfZhNis2YXYudipJywgJ9in2YTYs9io2KonXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ9in2YTYo9it2K8nLCAn2KfZhNin2KvZhtmK2YYnLCAn2KfZhNir2YTYp9ir2KfYoScsICfYp9mE2KPYsdio2LnYp9ihJywgJ9in2YTYrtmF2YrYsycsICfYp9mE2KzZhdi52KknLCAn2KfZhNiz2KjYqiddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDYsXHJcblx0XHRpc1JUTDogdHJ1ZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXInXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXInXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-az.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-az.js index 945de710b57..45294248b90 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-az.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-az.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtYXouanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtYXouanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBBemVyYmFpamFuaSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEphbWlsIE5hamFmb3YgKG5lY2Vmb3YzM0BnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydheiddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ1lhbnZhcicsJ0ZldnJhbCcsJ01hcnQnLCdBcHJlbCcsJ01heScsJ8SweXVuJyxcblx0XHQnxLB5dWwnLCdBdnF1c3QnLCdTZW50eWFicicsJ09rdHlhYnInLCdOb3lhYnInLCdEZWthYnInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnWWFuJywnRmV2JywnTWFyJywnQXByJywnTWF5JywnxLB5dW4nLFxuXHRcdCfEsHl1bCcsJ0F2cScsJ1NlbicsJ09rdCcsJ05veScsJ0RlayddLFxuXHRcdGRheU5hbWVzOiBbJ0JhemFyJywnQmF6YXIgZXJ0yZlzaScsJ8OHyZlyxZ/JmW5iyZkgYXjFn2FtxLEnLCfDh8mZcsWfyZluYsmZJywnQ8O8bcmZIGF4xZ9hbcSxJywnQ8O8bcmZJywnxZ7JmW5iyZknXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0InLCdCZScsJ8OHYScsJ8OHJywnQ2EnLCdDJywnxZ4nXSxcblx0XHRkYXlOYW1lc01pbjogWydCJywnQicsJ8OHJywn0KEnLCfDhycsJ0MnLCfFniddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2F6J10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydheiddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtYXouanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtYXouanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEF6ZXJiYWlqYW5pIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBKYW1pbCBOYWphZm92IChuZWNlZm92MzNAZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2F6J10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnWWFudmFyJywnRmV2cmFsJywnTWFydCcsJ0FwcmVsJywnTWF5JywnxLB5dW4nLFxyXG5cdFx0J8SweXVsJywnQXZxdXN0JywnU2VudHlhYnInLCdPa3R5YWJyJywnTm95YWJyJywnRGVrYWJyJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnWWFuJywnRmV2JywnTWFyJywnQXByJywnTWF5JywnxLB5dW4nLFxyXG5cdFx0J8SweXVsJywnQXZxJywnU2VuJywnT2t0JywnTm95JywnRGVrJ10sXHJcblx0XHRkYXlOYW1lczogWydCYXphcicsJ0JhemFyIGVydMmZc2knLCfDh8mZcsWfyZluYsmZIGF4xZ9hbcSxJywnw4fJmXLFn8mZbmLJmScsJ0PDvG3JmSBheMWfYW3EsScsJ0PDvG3JmScsJ8WeyZluYsmZJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0InLCdCZScsJ8OHYScsJ8OHJywnQ2EnLCdDJywnxZ4nXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ0InLCdCJywnw4cnLCfQoScsJ8OHJywnQycsJ8WeJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXonXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXonXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-bg.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-bg.js index 481cb81eaa2..09143c9cc4c 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-bg.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-bg.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtYmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtYmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBCdWxnYXJpYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBTdG95YW4gS3lvc2V2IChodHRwOi8vc3Zlc3Qub3JnKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYmcnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG4gICAgICAgIG1vbnRoTmFtZXM6IFsn0K/QvdGD0LDRgNC4Jywn0KTQtdCy0YDRg9Cw0YDQuCcsJ9Cc0LDRgNGCJywn0JDQv9GA0LjQuycsJ9Cc0LDQuScsJ9Cu0L3QuCcsXG4gICAgICAgICfQrtC70LgnLCfQkNCy0LPRg9GB0YInLCfQodC10L/RgtC10LzQstGA0LgnLCfQntC60YLQvtC80LLRgNC4Jywn0J3QvtC10LzQstGA0LgnLCfQlNC10LrQtdC80LLRgNC4J10sXG4gICAgICAgIG1vbnRoTmFtZXNTaG9ydDogWyfQr9C90YMnLCfQpNC10LInLCfQnNCw0YAnLCfQkNC/0YAnLCfQnNCw0LknLCfQrtC90LgnLFxuICAgICAgICAn0K7Qu9C4Jywn0JDQstCzJywn0KHQtdC/Jywn0J7QutGCJywn0J3QvtCyJywn0JTQtdC6J10sXG4gICAgICAgIGRheU5hbWVzOiBbJ9Cd0LXQtNC10LvRjycsJ9Cf0L7QvdC10LTQtdC70L3QuNC6Jywn0JLRgtC+0YDQvdC40LonLCfQodGA0Y/QtNCwJywn0KfQtdGC0LLRitGA0YLRitC6Jywn0J/QtdGC0YrQuicsJ9Ch0YrQsdC+0YLQsCddLFxuICAgICAgICBkYXlOYW1lc1Nob3J0OiBbJ9Cd0LXQtCcsJ9Cf0L7QvScsJ9CS0YLQvicsJ9Ch0YDRjycsJ9Cn0LXRgicsJ9Cf0LXRgicsJ9Ch0YrQsSddLFxuICAgICAgICBkYXlOYW1lc01pbjogWyfQndC1Jywn0J/QvicsJ9CS0YInLCfQodGAJywn0KfQtScsJ9Cf0LUnLCfQodGKJ10sXG4gICAgICAgIGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5Jyxcblx0XHRmaXJzdERheTogMSxcbiAgICAgICAgaXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydiZyddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYmcnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtYmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtYmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEJ1bGdhcmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgU3RveWFuIEt5b3NldiAoaHR0cDovL3N2ZXN0Lm9yZykuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydiZyddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcbiAgICAgICAgbW9udGhOYW1lczogWyfQr9C90YPQsNGA0LgnLCfQpNC10LLRgNGD0LDRgNC4Jywn0JzQsNGA0YInLCfQkNC/0YDQuNC7Jywn0JzQsNC5Jywn0K7QvdC4JyxcclxuICAgICAgICAn0K7Qu9C4Jywn0JDQstCz0YPRgdGCJywn0KHQtdC/0YLQtdC80LLRgNC4Jywn0J7QutGC0L7QvNCy0YDQuCcsJ9Cd0L7QtdC80LLRgNC4Jywn0JTQtdC60LXQvNCy0YDQuCddLFxyXG4gICAgICAgIG1vbnRoTmFtZXNTaG9ydDogWyfQr9C90YMnLCfQpNC10LInLCfQnNCw0YAnLCfQkNC/0YAnLCfQnNCw0LknLCfQrtC90LgnLFxyXG4gICAgICAgICfQrtC70LgnLCfQkNCy0LMnLCfQodC10L8nLCfQntC60YInLCfQndC+0LInLCfQlNC10LonXSxcclxuICAgICAgICBkYXlOYW1lczogWyfQndC10LTQtdC70Y8nLCfQn9C+0L3QtdC00LXQu9C90LjQuicsJ9CS0YLQvtGA0L3QuNC6Jywn0KHRgNGP0LTQsCcsJ9Cn0LXRgtCy0YrRgNGC0YrQuicsJ9Cf0LXRgtGK0LonLCfQodGK0LHQvtGC0LAnXSxcclxuICAgICAgICBkYXlOYW1lc1Nob3J0OiBbJ9Cd0LXQtCcsJ9Cf0L7QvScsJ9CS0YLQvicsJ9Ch0YDRjycsJ9Cn0LXRgicsJ9Cf0LXRgicsJ9Ch0YrQsSddLFxyXG4gICAgICAgIGRheU5hbWVzTWluOiBbJ9Cd0LUnLCfQn9C+Jywn0JLRgicsJ9Ch0YAnLCfQp9C1Jywn0J/QtScsJ9Ch0YonXSxcclxuICAgICAgICBkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuICAgICAgICBpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2JnJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2JnJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-bs.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-bs.js index b8cb6cda81c..8c065928f25 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-bs.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-bs.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtYnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtYnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBCb3NuaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIEtlbmFuIEtvbmpvLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydicyddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcicsJ0ZlYnJ1YXInLCdNYXJ0JywnQXByaWwnLCdNYWonLCdKdW5pJyxcblx0XHQnSnVsaScsJ0F1Z3VzdCcsJ1NlcHRlbWJhcicsJ09rdG9iYXInLCdOb3ZlbWJhcicsJ0RlY2VtYmFyJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01haicsJ0p1bicsXG5cdFx0J0p1bCcsJ0F1ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RlYyddLFxuXHRcdGRheU5hbWVzOiBbJ05lZGVsamEnLCdQb25lZGVsamFrJywnVXRvcmFrJywnU3JpamVkYScsJ8SMZXR2cnRhaycsJ1BldGFrJywnU3Vib3RhJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydOZWQnLCdQb24nLCdVdG8nLCdTcmknLCfEjGV0JywnUGV0JywnU3ViJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnTmUnLCdQbycsJ1V0JywnU3InLCfEjGUnLCdQZScsJ1N1J10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2JzJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydicyddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtYnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtYnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEJvc25pYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBLZW5hbiBLb25qby4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2JzJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyJywnRmVicnVhcicsJ01hcnQnLCdBcHJpbCcsJ01haicsJ0p1bmknLFxyXG5cdFx0J0p1bGknLCdBdWd1c3QnLCdTZXB0ZW1iYXInLCdPa3RvYmFyJywnTm92ZW1iYXInLCdEZWNlbWJhciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01haicsJ0p1bicsXHJcblx0XHQnSnVsJywnQXVnJywnU2VwJywnT2t0JywnTm92JywnRGVjJ10sXHJcblx0XHRkYXlOYW1lczogWydOZWRlbGphJywnUG9uZWRlbGphaycsJ1V0b3JhaycsJ1NyaWplZGEnLCfEjGV0dnJ0YWsnLCdQZXRhaycsJ1N1Ym90YSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydOZWQnLCdQb24nLCdVdG8nLCdTcmknLCfEjGV0JywnUGV0JywnU3ViJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydOZScsJ1BvJywnVXQnLCdTcicsJ8SMZScsJ1BlJywnU3UnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYnMnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYnMnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ca.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ca.js index 9885759e9e6..370f438a379 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ca.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ca.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtY2EuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtY2EuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBDYXRhbGFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXRlcnM6IChqb2FuLmxlb25AZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snY2EnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydHZW5lcicsJ0ZlYnJlcicsJ01hciZjY2VkaWw7JywnQWJyaWwnLCdNYWlnJywnSnVueScsXG5cdFx0J0p1bGlvbCcsJ0Fnb3N0JywnU2V0ZW1icmUnLCdPY3R1YnJlJywnTm92ZW1icmUnLCdEZXNlbWJyZSddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydHZW4nLCdGZWInLCdNYXInLCdBYnInLCdNYWknLCdKdW4nLFxuXHRcdCdKdWwnLCdBZ28nLCdTZXQnLCdPY3QnLCdOb3YnLCdEZXMnXSxcblx0XHRkYXlOYW1lczogWydEaXVtZW5nZScsJ0RpbGx1bnMnLCdEaW1hcnRzJywnRGltZWNyZXMnLCdEaWpvdXMnLCdEaXZlbmRyZXMnLCdEaXNzYWJ0ZSddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRHVnJywnRGxuJywnRG10JywnRG1jJywnRGpzJywnRHZuJywnRHNiJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnRGcnLCdEbCcsJ0R0JywnRGMnLCdEaicsJ0R2JywnRHMnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydjYSddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snY2EnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtY2EuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtY2EuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIENhdGFsYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0ZXJzOiAoam9hbi5sZW9uQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydjYSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0dlbmVyJywnRmVicmVyJywnTWFyJmNjZWRpbDsnLCdBYnJpbCcsJ01haWcnLCdKdW55JyxcclxuXHRcdCdKdWxpb2wnLCdBZ29zdCcsJ1NldGVtYnJlJywnT2N0dWJyZScsJ05vdmVtYnJlJywnRGVzZW1icmUnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydHZW4nLCdGZWInLCdNYXInLCdBYnInLCdNYWknLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ0FnbycsJ1NldCcsJ09jdCcsJ05vdicsJ0RlcyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnRGl1bWVuZ2UnLCdEaWxsdW5zJywnRGltYXJ0cycsJ0RpbWVjcmVzJywnRGlqb3VzJywnRGl2ZW5kcmVzJywnRGlzc2FidGUnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRHVnJywnRGxuJywnRG10JywnRG1jJywnRGpzJywnRHZuJywnRHNiJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydEZycsJ0RsJywnRHQnLCdEYycsJ0RqJywnRHYnLCdEcyddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2NhJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2NhJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-cs.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-cs.js index 86863a17752..2fb7b2e02f5 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-cs.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-cs.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtY3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtY3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBDemVjaCBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IFRvbWFzIE11bGxlciAodG9tYXNAdG9tYXMtbXVsbGVyLm5ldCkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2NzJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnbGVkZW4nLCfDum5vcicsJ2LFmWV6ZW4nLCdkdWJlbicsJ2t2xJt0ZW4nLCfEjWVydmVuJyxcbiAgICAgICAgJ8SNZXJ2ZW5lYycsJ3NycGVuJywnesOhxZnDrScsJ8WZw61qZW4nLCdsaXN0b3BhZCcsJ3Byb3NpbmVjJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ2xlZCcsJ8O6bm8nLCdixZllJywnZHViJywna3bEmycsJ8SNZXInLFxuXHRcdCfEjXZjJywnc3JwJywnesOhxZknLCfFmcOtaicsJ2xpcycsJ3BybyddLFxuXHRcdGRheU5hbWVzOiBbJ25lZMSbbGUnLCAncG9uZMSbbMOtJywgJ8O6dGVyw70nLCAnc3TFmWVkYScsICfEjXR2cnRlaycsICdww6F0ZWsnLCAnc29ib3RhJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyduZScsICdwbycsICfDunQnLCAnc3QnLCAnxI10JywgJ3DDoScsICdzbyddLFxuXHRcdGRheU5hbWVzTWluOiBbJ25lJywncG8nLCfDunQnLCdzdCcsJ8SNdCcsJ3DDoScsJ3NvJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snY3MnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2NzJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtY3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtY3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEN6ZWNoIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBUb21hcyBNdWxsZXIgKHRvbWFzQHRvbWFzLW11bGxlci5uZXQpLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snY3MnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydsZWRlbicsJ8O6bm9yJywnYsWZZXplbicsJ2R1YmVuJywna3bEm3RlbicsJ8SNZXJ2ZW4nLFxyXG4gICAgICAgICfEjWVydmVuZWMnLCdzcnBlbicsJ3rDocWZw60nLCfFmcOtamVuJywnbGlzdG9wYWQnLCdwcm9zaW5lYyddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ2xlZCcsJ8O6bm8nLCdixZllJywnZHViJywna3bEmycsJ8SNZXInLFxyXG5cdFx0J8SNdmMnLCdzcnAnLCd6w6HFmScsJ8WZw61qJywnbGlzJywncHJvJ10sXHJcblx0XHRkYXlOYW1lczogWyduZWTEm2xlJywgJ3BvbmTEm2zDrScsICfDunRlcsO9JywgJ3N0xZllZGEnLCAnxI10dnJ0ZWsnLCAncMOhdGVrJywgJ3NvYm90YSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyduZScsICdwbycsICfDunQnLCAnc3QnLCAnxI10JywgJ3DDoScsICdzbyddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnbmUnLCdwbycsJ8O6dCcsJ3N0JywnxI10JywncMOhJywnc28nXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydjcyddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydjcyddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-da.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-da.js index 05266367ad7..15f7eab5939 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-da.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-da.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZGEuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZGEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBEYW5pc2ggbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBKYW4gQ2hyaXN0ZW5zZW4gKCBkZWxldGVzdHVmZkBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydkYSddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcbiAgICAgICAgbW9udGhOYW1lczogWydKYW51YXInLCdGZWJydWFyJywnTWFydHMnLCdBcHJpbCcsJ01haicsJ0p1bmknLFxuICAgICAgICAnSnVsaScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09rdG9iZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sXG4gICAgICAgIG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWonLCdKdW4nLFxuICAgICAgICAnSnVsJywnQXVnJywnU2VwJywnT2t0JywnTm92JywnRGVjJ10sXG5cdFx0ZGF5TmFtZXM6IFsnU8O4bmRhZycsJ01hbmRhZycsJ1RpcnNkYWcnLCdPbnNkYWcnLCdUb3JzZGFnJywnRnJlZGFnJywnTMO4cmRhZyddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU8O4bicsJ01hbicsJ1RpcicsJ09ucycsJ1RvcicsJ0ZyZScsJ0zDuHInXSxcblx0XHRkYXlOYW1lc01pbjogWydTw7gnLCdNYScsJ1RpJywnT24nLCdUbycsJ0ZyJywnTMO4J10sXG4gICAgICAgIGRhdGVGb3JtYXQ6ICdkZC1tbS15eXl5Jyxcblx0XHRmaXJzdERheTogMCxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2RhJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydkYSddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZGEuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZGEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIERhbmlzaCBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgSmFuIENocmlzdGVuc2VuICggZGVsZXRlc3R1ZmZAZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2RhJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuICAgICAgICBtb250aE5hbWVzOiBbJ0phbnVhcicsJ0ZlYnJ1YXInLCdNYXJ0cycsJ0FwcmlsJywnTWFqJywnSnVuaScsXHJcbiAgICAgICAgJ0p1bGknLCdBdWd1c3QnLCdTZXB0ZW1iZXInLCdPa3RvYmVyJywnTm92ZW1iZXInLCdEZWNlbWJlciddLFxyXG4gICAgICAgIG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWonLCdKdW4nLFxyXG4gICAgICAgICdKdWwnLCdBdWcnLCdTZXAnLCdPa3QnLCdOb3YnLCdEZWMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ1PDuG5kYWcnLCdNYW5kYWcnLCdUaXJzZGFnJywnT25zZGFnJywnVG9yc2RhZycsJ0ZyZWRhZycsJ0zDuHJkYWcnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU8O4bicsJ01hbicsJ1RpcicsJ09ucycsJ1RvcicsJ0ZyZScsJ0zDuHInXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ1PDuCcsJ01hJywnVGknLCdPbicsJ1RvJywnRnInLCdMw7gnXSxcclxuICAgICAgICBkYXRlRm9ybWF0OiAnZGQtbW0teXl5eScsXHJcblx0XHRmaXJzdERheTogMCxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZGEnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZGEnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-de-CH.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-de-CH.js index e939d354b06..05ac89153e0 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-de-CH.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-de-CH.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZGUtQ0guanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZGUtQ0guanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBTd2lzcy1HZXJtYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBEb3VnbGFzIEpvc2UgJiBKdWVyZyBNZWllci4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZGUtQ0gnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydKYW51YXInLCdGZWJydWFyJywnTcOkcnonLCdBcHJpbCcsJ01haScsJ0p1bmknLFxuXHRcdCdKdWxpJywnQXVndXN0JywnU2VwdGVtYmVyJywnT2t0b2JlcicsJ05vdmVtYmVyJywnRGV6ZW1iZXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTcOkcicsJ0FwcicsJ01haScsJ0p1bicsXG5cdFx0J0p1bCcsJ0F1ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RleiddLFxuXHRcdGRheU5hbWVzOiBbJ1Nvbm50YWcnLCdNb250YWcnLCdEaWVuc3RhZycsJ01pdHR3b2NoJywnRG9ubmVyc3RhZycsJ0ZyZWl0YWcnLCdTYW1zdGFnJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydTbycsJ01vJywnRGknLCdNaScsJ0RvJywnRnInLCdTYSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ1NvJywnTW8nLCdEaScsJ01pJywnRG8nLCdGcicsJ1NhJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZGUtQ0gnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2RlLUNIJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZGUtQ0guanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZGUtQ0guanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFN3aXNzLUdlcm1hbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgRG91Z2xhcyBKb3NlICYgSnVlcmcgTWVpZXIuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydkZS1DSCddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcicsJ0ZlYnJ1YXInLCdNw6RyeicsJ0FwcmlsJywnTWFpJywnSnVuaScsXHJcblx0XHQnSnVsaScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09rdG9iZXInLCdOb3ZlbWJlcicsJ0RlemVtYmVyJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTcOkcicsJ0FwcicsJ01haScsJ0p1bicsXHJcblx0XHQnSnVsJywnQXVnJywnU2VwJywnT2t0JywnTm92JywnRGV6J10sXHJcblx0XHRkYXlOYW1lczogWydTb25udGFnJywnTW9udGFnJywnRGllbnN0YWcnLCdNaXR0d29jaCcsJ0Rvbm5lcnN0YWcnLCdGcmVpdGFnJywnU2Ftc3RhZyddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydTbycsJ01vJywnRGknLCdNaScsJ0RvJywnRnInLCdTYSddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnU28nLCdNbycsJ0RpJywnTWknLCdEbycsJ0ZyJywnU2EnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydkZS1DSCddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydkZS1DSCddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-de.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-de.js index d2214dda357..8e821fee872 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-de.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-de.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBHZXJtYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBNaWxpYW4gV29sZmYgKG1haWxAbWlsaWFudy5kZSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2RlJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyJywnRmVicnVhcicsJ03DpHJ6JywnQXByaWwnLCdNYWknLCdKdW5pJyxcblx0XHQnSnVsaScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09rdG9iZXInLCdOb3ZlbWJlcicsJ0RlemVtYmVyJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ03DpHInLCdBcHInLCdNYWknLCdKdW4nLFxuXHRcdCdKdWwnLCdBdWcnLCdTZXAnLCdPa3QnLCdOb3YnLCdEZXonXSxcblx0XHRkYXlOYW1lczogWydTb25udGFnJywnTW9udGFnJywnRGllbnN0YWcnLCdNaXR0d29jaCcsJ0Rvbm5lcnN0YWcnLCdGcmVpdGFnJywnU2Ftc3RhZyddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU28nLCdNbycsJ0RpJywnTWknLCdEbycsJ0ZyJywnU2EnXSxcblx0XHRkYXlOYW1lc01pbjogWydTbycsJ01vJywnRGknLCdNaScsJ0RvJywnRnInLCdTYSddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2RlJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydkZSddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEdlcm1hbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTWlsaWFuIFdvbGZmIChtYWlsQG1pbGlhbncuZGUpLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZGUnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW51YXInLCdGZWJydWFyJywnTcOkcnonLCdBcHJpbCcsJ01haScsJ0p1bmknLFxyXG5cdFx0J0p1bGknLCdBdWd1c3QnLCdTZXB0ZW1iZXInLCdPa3RvYmVyJywnTm92ZW1iZXInLCdEZXplbWJlciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ03DpHInLCdBcHInLCdNYWknLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ0F1ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RleiddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnU29ubnRhZycsJ01vbnRhZycsJ0RpZW5zdGFnJywnTWl0dHdvY2gnLCdEb25uZXJzdGFnJywnRnJlaXRhZycsJ1NhbXN0YWcnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU28nLCdNbycsJ0RpJywnTWknLCdEbycsJ0ZyJywnU2EnXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ1NvJywnTW8nLCdEaScsJ01pJywnRG8nLCdGcicsJ1NhJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZGUnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZGUnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-el.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-el.js index 38400955f8c..70880552d93 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-el.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-el.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZWwuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBHcmVlayBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEFsZXggQ2ljb3ZpYyAoaHR0cDovL3d3dy5hbGV4Y2ljb3ZpYy5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbCddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ86ZzrHOvc6/z4XOrM+BzrnOv8+CJywnzqbOtc6yz4HOv8+FzqzPgc65zr/PgicsJ86czqzPgc+EzrnOv8+CJywnzpHPgM+Bzq/Ou865zr/PgicsJ86czqzOuc6/z4InLCfOmc6/z43Ovc65zr/PgicsXG5cdFx0J86Zzr/Pjc67zrnOv8+CJywnzpHPjc6zzr/Phc+Dz4TOv8+CJywnzqPOtc+Az4TOrc68zrLPgc65zr/PgicsJ86fzrrPhM+OzrLPgc65zr/PgicsJ86dzr/Orc68zrLPgc65zr/PgicsJ86UzrXOus6tzrzOss+BzrnOv8+CJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ86ZzrHOvScsJ86mzrXOsicsJ86czrHPgScsJ86Rz4DPgScsJ86czrHOuScsJ86Zzr/Phc69Jyxcblx0XHQnzpnOv8+FzrsnLCfOkc+FzrMnLCfOo861z4AnLCfOn866z4QnLCfOnc6/zrUnLCfOlM61zronXSxcblx0XHRkYXlOYW1lczogWyfOms+Fz4HOuc6xzrrOricsJ86UzrXPhc+Ezq3Pgc6xJywnzqTPgc6vz4TOtycsJ86kzrXPhM6sz4HPhM63JywnzqDOrc68z4DPhM63JywnzqDOsc+BzrHPg866zrXPhc6uJywnzqPOrM6yzrLOsc+Ezr8nXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ86az4XPgScsJ86UzrXPhScsJ86kz4HOuScsJ86kzrXPhCcsJ86gzrXOvCcsJ86gzrHPgScsJ86jzrHOsiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ86az4UnLCfOlM61JywnzqTPgScsJ86kzrUnLCfOoM61JywnzqDOsScsJ86jzrEnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbCddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZWwnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZWwuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEdyZWVrIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBBbGV4IENpY292aWMgKGh0dHA6Ly93d3cuYWxleGNpY292aWMuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VsJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnzpnOsc69zr/Phc6sz4HOuc6/z4InLCfOps61zrLPgc6/z4XOrM+BzrnOv8+CJywnzpzOrM+Bz4TOuc6/z4InLCfOkc+Az4HOr867zrnOv8+CJywnzpzOrM65zr/PgicsJ86Zzr/Pjc69zrnOv8+CJyxcclxuXHRcdCfOmc6/z43Ou865zr/PgicsJ86Rz43Os86/z4XPg8+Ezr/PgicsJ86jzrXPgM+Ezq3OvM6yz4HOuc6/z4InLCfOn866z4TPjs6yz4HOuc6/z4InLCfOnc6/zq3OvM6yz4HOuc6/z4InLCfOlM61zrrOrc68zrLPgc65zr/PgiddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ86ZzrHOvScsJ86mzrXOsicsJ86czrHPgScsJ86Rz4DPgScsJ86czrHOuScsJ86Zzr/Phc69JyxcclxuXHRcdCfOmc6/z4XOuycsJ86Rz4XOsycsJ86jzrXPgCcsJ86fzrrPhCcsJ86dzr/OtScsJ86UzrXOuiddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnzprPhc+BzrnOsc66zq4nLCfOlM61z4XPhM6tz4HOsScsJ86kz4HOr8+EzrcnLCfOpM61z4TOrM+Bz4TOtycsJ86gzq3OvM+Az4TOtycsJ86gzrHPgc6xz4POus61z4XOricsJ86jzqzOss6yzrHPhM6/J10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ86az4XPgScsJ86UzrXPhScsJ86kz4HOuScsJ86kzrXPhCcsJ86gzrXOvCcsJ86gzrHPgScsJ86jzrHOsiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnzprPhScsJ86UzrUnLCfOpM+BJywnzqTOtScsJ86gzrUnLCfOoM6xJywnzqPOsSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VsJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VsJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-en-AU.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-en-AU.js index 558259230ec..f0800855a7c 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-en-AU.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-en-AU.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZW4tQVUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZW4tQVUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBFbmdsaXNoL0F1c3RyYWxpYSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBCYXNlZCBvbiBlbi1HQi4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZW4tQVUnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydKYW51YXJ5JywnRmVicnVhcnknLCdNYXJjaCcsJ0FwcmlsJywnTWF5JywnSnVuZScsXG5cdFx0J0p1bHknLCdBdWd1c3QnLCdTZXB0ZW1iZXInLCdPY3RvYmVyJywnTm92ZW1iZXInLCdEZWNlbWJlciddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsXG5cdFx0J0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG5cdFx0ZGF5TmFtZXM6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxuXHRcdGRheU5hbWVzTWluOiBbJ1N1JywnTW8nLCdUdScsJ1dlJywnVGgnLCdGcicsJ1NhJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZW4tQVUnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VuLUFVJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZW4tQVUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZW4tQVUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEVuZ2xpc2gvQXVzdHJhbGlhIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgQmFzZWQgb24gZW4tR0IuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbi1BVSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcnknLCdGZWJydWFyeScsJ01hcmNoJywnQXByaWwnLCdNYXknLCdKdW5lJyxcclxuXHRcdCdKdWx5JywnQXVndXN0JywnU2VwdGVtYmVyJywnT2N0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXInXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsXHJcblx0XHQnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnU3UnLCdNbycsJ1R1JywnV2UnLCdUaCcsJ0ZyJywnU2EnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbi1BVSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbi1BVSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-en-GB.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-en-GB.js index 5db12cc3e28..36d3de130c0 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-en-GB.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-en-GB.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZW4tR0IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZW4tR0IuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBFbmdsaXNoL1VLIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFN0dWFydC4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZW4tR0InXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydKYW51YXJ5JywnRmVicnVhcnknLCdNYXJjaCcsJ0FwcmlsJywnTWF5JywnSnVuZScsXG5cdFx0J0p1bHknLCdBdWd1c3QnLCdTZXB0ZW1iZXInLCdPY3RvYmVyJywnTm92ZW1iZXInLCdEZWNlbWJlciddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsXG5cdFx0J0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG5cdFx0ZGF5TmFtZXM6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxuXHRcdGRheU5hbWVzTWluOiBbJ1N1JywnTW8nLCdUdScsJ1dlJywnVGgnLCdGcicsJ1NhJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZW4tR0InXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VuLUdCJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZW4tR0IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZW4tR0IuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEVuZ2xpc2gvVUsgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBTdHVhcnQuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbi1HQiddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcnknLCdGZWJydWFyeScsJ01hcmNoJywnQXByaWwnLCdNYXknLCdKdW5lJyxcclxuXHRcdCdKdWx5JywnQXVndXN0JywnU2VwdGVtYmVyJywnT2N0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXInXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsXHJcblx0XHQnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnU3UnLCdNbycsJ1R1JywnV2UnLCdUaCcsJ0ZyJywnU2EnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbi1HQiddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbi1HQiddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-en-NZ.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-en-NZ.js index e595b25eee3..4cd390ed2ea 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-en-NZ.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-en-NZ.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZW4tTlouanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZW4tTlouanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBFbmdsaXNoL05ldyBaZWFsYW5kIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIEJhc2VkIG9uIGVuLUdCLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbi1OWiddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcnknLCdGZWJydWFyeScsJ01hcmNoJywnQXByaWwnLCdNYXknLCdKdW5lJyxcblx0XHQnSnVseScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09jdG9iZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcblx0XHQnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXSxcblx0XHRkYXlOYW1lczogWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnU3UnLCdNbycsJ1R1JywnV2UnLCdUaCcsJ0ZyJywnU2EnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbi1OWiddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZW4tTlonXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZW4tTlouanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZW4tTlouanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEVuZ2xpc2gvTmV3IFplYWxhbmQgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBCYXNlZCBvbiBlbi1HQi4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VuLU5aJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyeScsJ0ZlYnJ1YXJ5JywnTWFyY2gnLCdBcHJpbCcsJ01heScsJ0p1bmUnLFxyXG5cdFx0J0p1bHknLCdBdWd1c3QnLCdTZXB0ZW1iZXInLCdPY3RvYmVyJywnTm92ZW1iZXInLCdEZWNlbWJlciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcclxuXHRcdCdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXHJcblx0XHRkYXlOYW1lc01pbjogWydTdScsJ01vJywnVHUnLCdXZScsJ1RoJywnRnInLCdTYSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VuLU5aJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VuLU5aJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-eo.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-eo.js index f39056f1f5f..eaa148fad08 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-eo.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-eo.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZW8uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZW8uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBFc3BlcmFudG8gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBPbGl2aWVyIE0uIChvbGl2aWVyd2ViQGlmcmFuY2UuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZW8nXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydKYW51YXJvJywnRmVicnVhcm8nLCdNYXJ0bycsJ0FwcmlsbycsJ01ham8nLCdKdW5pbycsXG5cdFx0J0p1bGlvJywnQcWtZ3VzdG8nLCdTZXB0ZW1icm8nLCdPa3RvYnJvJywnTm92ZW1icm8nLCdEZWNlbWJybyddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWonLCdKdW4nLFxuXHRcdCdKdWwnLCdBxa1nJywnU2VwJywnT2t0JywnTm92JywnRGVjJ10sXG5cdFx0ZGF5TmFtZXM6IFsnRGltYW7EiW8nLCdMdW5kbycsJ01hcmRvJywnTWVya3JlZG8nLCfEtGHFrWRvJywnVmVuZHJlZG8nLCdTYWJhdG8nXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0RpbScsJ0x1bicsJ01hcicsJ01lcicsJ8S0YcWtJywnVmVuJywnU2FiJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnRGknLCdMdScsJ01hJywnTWUnLCfEtGEnLCdWZScsJ1NhJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAwLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZW8nXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VvJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZW8uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZW8uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEVzcGVyYW50byBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgT2xpdmllciBNLiAob2xpdmllcndlYkBpZnJhbmNlLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbyddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcm8nLCdGZWJydWFybycsJ01hcnRvJywnQXByaWxvJywnTWFqbycsJ0p1bmlvJyxcclxuXHRcdCdKdWxpbycsJ0HFrWd1c3RvJywnU2VwdGVtYnJvJywnT2t0b2JybycsJ05vdmVtYnJvJywnRGVjZW1icm8nXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWonLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ0HFrWcnLCdTZXAnLCdPa3QnLCdOb3YnLCdEZWMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ0RpbWFuxIlvJywnTHVuZG8nLCdNYXJkbycsJ01lcmtyZWRvJywnxLRhxa1kbycsJ1ZlbmRyZWRvJywnU2FiYXRvJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0RpbScsJ0x1bicsJ01hcicsJ01lcicsJ8S0YcWtJywnVmVuJywnU2FiJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydEaScsJ0x1JywnTWEnLCdNZScsJ8S0YScsJ1ZlJywnU2EnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbyddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbyddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-es-AR.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-es-AR.js index a1ca8292829..c444f5df02d 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-es-AR.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-es-AR.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZXMtQVIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZXMtQVIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBTcGFuaXNoL0FyZ2VudGluYSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEVzdGViYW4gQWNvc3RhIFZpbGxhZmFuZSAoZXN0ZWJhbi5hY29zdGFAZ2xvYmFudC5jb20pIG9mIEdsb2JhbnQgKGh0dHA6Ly93d3cuZ2xvYmFudC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlcy1BUiddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0VuZXJvJywnRmVicmVybycsJ01hcnpvJywnQWJyaWwnLCdNYXlvJywnSnVuaW8nLFxuXHRcdCdKdWxpbycsJ0Fnb3N0bycsJ1NlcHRpZW1icmUnLCdPY3R1YnJlJywnTm92aWVtYnJlJywnRGljaWVtYnJlJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0VuZScsJ0ZlYicsJ01hcicsJ0FicicsJ01heScsJ0p1bicsXG5cdFx0J0p1bCcsJ0FnbycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RpYyddLFxuXHRcdGRheU5hbWVzOiBbJ0RvbWluZ28nLCdMdW5lcycsJ01hcnRlcycsJ01pw6lyY29sZXMnLCdKdWV2ZXMnLCdWaWVybmVzJywnU8OhYmFkbyddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRG9tJywnTHVuJywnTWFyJywnTWnDqScsJ0p1dicsJ1ZpZScsJ1PDoWInXSxcblx0XHRkYXlOYW1lc01pbjogWydEbycsJ0x1JywnTWEnLCdNaScsJ0p1JywnVmknLCdTw6EnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDAsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlcy1BUiddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXMtQVInXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZXMtQVIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZXMtQVIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFNwYW5pc2gvQXJnZW50aW5hIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBFc3RlYmFuIEFjb3N0YSBWaWxsYWZhbmUgKGVzdGViYW4uYWNvc3RhQGdsb2JhbnQuY29tKSBvZiBHbG9iYW50IChodHRwOi8vd3d3Lmdsb2JhbnQuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VzLUFSJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnRW5lcm8nLCdGZWJyZXJvJywnTWFyem8nLCdBYnJpbCcsJ01heW8nLCdKdW5pbycsXHJcblx0XHQnSnVsaW8nLCdBZ29zdG8nLCdTZXB0aWVtYnJlJywnT2N0dWJyZScsJ05vdmllbWJyZScsJ0RpY2llbWJyZSddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0VuZScsJ0ZlYicsJ01hcicsJ0FicicsJ01heScsJ0p1bicsXHJcblx0XHQnSnVsJywnQWdvJywnU2VwJywnT2N0JywnTm92JywnRGljJ10sXHJcblx0XHRkYXlOYW1lczogWydEb21pbmdvJywnTHVuZXMnLCdNYXJ0ZXMnLCdNacOpcmNvbGVzJywnSnVldmVzJywnVmllcm5lcycsJ1PDoWJhZG8nXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRG9tJywnTHVuJywnTWFyJywnTWnDqScsJ0p1dicsJ1ZpZScsJ1PDoWInXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ0RvJywnTHUnLCdNYScsJ01pJywnSnUnLCdWaScsJ1PDoSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDAsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VzLUFSJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VzLUFSJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-es-PE.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-es-PE.js index ea61610340f..7e062935a2f 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-es-PE.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-es-PE.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZXMtUEUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZXMtUEUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBTcGFuaXNoL1BlcsO6IGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgRmlzY2hlciBUaXJhZG8gKGZpc2hkZXZAZ2xvYmFudC5jb20pIG9mIEFTSVggKGh0dHA6Ly93d3cuYXNpeG9ubGluZS5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlcy1QRSddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0VuZXJvJywnRmVicmVybycsJ01hcnpvJywnQWJyaWwnLCdNYXlvJywnSnVuaW8nLFxuXHRcdCdKdWxpbycsJ0Fnb3N0bycsJ1NlcHRpZW1icmUnLCdPY3R1YnJlJywnTm92aWVtYnJlJywnRGljaWVtYnJlJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0VuZScsJ0ZlYicsJ01hcicsJ0FicicsJ01heScsJ0p1bicsXG5cdFx0J0p1bCcsJ0FnbycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RpYyddLFxuXHRcdGRheU5hbWVzOiBbJ0RvbWluZ28nLCdMdW5lcycsJ01hcnRlcycsJ01pw6lyY29sZXMnLCdKdWV2ZXMnLCdWaWVybmVzJywnU8OhYmFkbyddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRG9tJywnTHVuJywnTWFyJywnTWnDqScsJ0p1ZScsJ1ZpZScsJ1NhYiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ0RvJywnTHUnLCdNYScsJ01pJywnSnUnLCdWaScsJ1NhJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAwLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXMtUEUnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VzLVBFJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZXMtUEUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZXMtUEUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFNwYW5pc2gvUGVyw7ogbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEZpc2NoZXIgVGlyYWRvIChmaXNoZGV2QGdsb2JhbnQuY29tKSBvZiBBU0lYIChodHRwOi8vd3d3LmFzaXhvbmxpbmUuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VzLVBFJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnRW5lcm8nLCdGZWJyZXJvJywnTWFyem8nLCdBYnJpbCcsJ01heW8nLCdKdW5pbycsXHJcblx0XHQnSnVsaW8nLCdBZ29zdG8nLCdTZXB0aWVtYnJlJywnT2N0dWJyZScsJ05vdmllbWJyZScsJ0RpY2llbWJyZSddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0VuZScsJ0ZlYicsJ01hcicsJ0FicicsJ01heScsJ0p1bicsXHJcblx0XHQnSnVsJywnQWdvJywnU2VwJywnT2N0JywnTm92JywnRGljJ10sXHJcblx0XHRkYXlOYW1lczogWydEb21pbmdvJywnTHVuZXMnLCdNYXJ0ZXMnLCdNacOpcmNvbGVzJywnSnVldmVzJywnVmllcm5lcycsJ1PDoWJhZG8nXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRG9tJywnTHVuJywnTWFyJywnTWnDqScsJ0p1ZScsJ1ZpZScsJ1NhYiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnRG8nLCdMdScsJ01hJywnTWknLCdKdScsJ1ZpJywnU2EnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlcy1QRSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlcy1QRSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-es.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-es.js index 67876da4fdc..130d59df437 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-es.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-es.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBTcGFuaXNoIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFRyYWR1Y2lkbyBwb3IgVmVzdGVyICh4dmVzdGVyQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VzJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnRW5lcm8nLCdGZWJyZXJvJywnTWFyem8nLCdBYnJpbCcsJ01heW8nLCdKdW5pbycsXG5cdFx0J0p1bGlvJywnQWdvc3RvJywnU2VwdGllbWJyZScsJ09jdHVicmUnLCdOb3ZpZW1icmUnLCdEaWNpZW1icmUnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnRW5lJywnRmViJywnTWFyJywnQWJyJywnTWF5JywnSnVuJyxcblx0XHQnSnVsJywnQWdvJywnU2VwJywnT2N0JywnTm92JywnRGljJ10sXG5cdFx0ZGF5TmFtZXM6IFsnRG9taW5nbycsJ0x1bmVzJywnTWFydGVzJywnTWnDqXJjb2xlcycsJ0p1ZXZlcycsJ1ZpZXJuZXMnLCdTw6FiYWRvJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydEb20nLCdMdW4nLCdNYXInLCdNacOpJywnSnV2JywnVmllJywnU8OhYiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ0RvJywnTHUnLCdNYScsJ01pJywnSnUnLCdWaScsJ1PDoSddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VzJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlcyddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFNwYW5pc2ggbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBUcmFkdWNpZG8gcG9yIFZlc3RlciAoeHZlc3RlckBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXMnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydFbmVybycsJ0ZlYnJlcm8nLCdNYXJ6bycsJ0FicmlsJywnTWF5bycsJ0p1bmlvJyxcclxuXHRcdCdKdWxpbycsJ0Fnb3N0bycsJ1NlcHRpZW1icmUnLCdPY3R1YnJlJywnTm92aWVtYnJlJywnRGljaWVtYnJlJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnRW5lJywnRmViJywnTWFyJywnQWJyJywnTWF5JywnSnVuJyxcclxuXHRcdCdKdWwnLCdBZ28nLCdTZXAnLCdPY3QnLCdOb3YnLCdEaWMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ0RvbWluZ28nLCdMdW5lcycsJ01hcnRlcycsJ01pw6lyY29sZXMnLCdKdWV2ZXMnLCdWaWVybmVzJywnU8OhYmFkbyddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydEb20nLCdMdW4nLCdNYXInLCdNacOpJywnSnV2JywnVmllJywnU8OhYiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnRG8nLCdMdScsJ01hJywnTWknLCdKdScsJ1ZpJywnU8OhJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXMnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXMnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-et.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-et.js index 39135763a63..24604b4db02 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-et.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-et.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBFc3RvbmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IE1hcnQgU8O1bWVybWFhIChtcnRzLnB5ZGV2IGF0IGdtYWlsIGNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2V0J10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFhbnVhcicsJ1ZlZWJydWFyJywnTcOkcnRzJywnQXByaWxsJywnTWFpJywnSnV1bmknLCBcblx0XHRcdCdKdXVsaScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09rdG9vYmVyJywnTm92ZW1iZXInLCdEZXRzZW1iZXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFhbicsICdWZWVicicsICdNw6RydHMnLCAnQXByJywgJ01haScsICdKdXVuaScsXG5cdFx0XHQnSnV1bGknLCAnQXVnJywgJ1NlcHQnLCAnT2t0JywgJ05vdicsICdEZXRzJ10sXG5cdFx0ZGF5TmFtZXM6IFsnUMO8aGFww6RldicsICdFc21hc3DDpGV2JywgJ1RlaXNpcMOkZXYnLCAnS29sbWFww6RldicsICdOZWxqYXDDpGV2JywgJ1JlZWRlJywgJ0xhdXDDpGV2J10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydQw7xoYXAnLCAnRXNtYXNwJywgJ1RlaXNpcCcsICdLb2xtYXAnLCAnTmVsamFwJywgJ1JlZWRlJywgJ0xhdXAnXSxcblx0XHRkYXlOYW1lc01pbjogWydQJywnRScsJ1QnLCdLJywnTicsJ1InLCdMJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXQnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2V0J107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEVzdG9uaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBNYXJ0IFPDtW1lcm1hYSAobXJ0cy5weWRldiBhdCBnbWFpbCBjb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXQnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYWFudWFyJywnVmVlYnJ1YXInLCdNw6RydHMnLCdBcHJpbGwnLCdNYWknLCdKdXVuaScsIFxyXG5cdFx0XHQnSnV1bGknLCdBdWd1c3QnLCdTZXB0ZW1iZXInLCdPa3Rvb2JlcicsJ05vdmVtYmVyJywnRGV0c2VtYmVyJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFhbicsICdWZWVicicsICdNw6RydHMnLCAnQXByJywgJ01haScsICdKdXVuaScsXHJcblx0XHRcdCdKdXVsaScsICdBdWcnLCAnU2VwdCcsICdPa3QnLCAnTm92JywgJ0RldHMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ1DDvGhhcMOkZXYnLCAnRXNtYXNww6RldicsICdUZWlzaXDDpGV2JywgJ0tvbG1hcMOkZXYnLCAnTmVsamFww6RldicsICdSZWVkZScsICdMYXVww6RldiddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydQw7xoYXAnLCAnRXNtYXNwJywgJ1RlaXNpcCcsICdLb2xtYXAnLCAnTmVsamFwJywgJ1JlZWRlJywgJ0xhdXAnXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ1AnLCdFJywnVCcsJ0snLCdOJywnUicsJ0wnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydldCddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydldCddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-eu.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-eu.js index 33730bd6a1c..4a03fbf9edf 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-eu.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-eu.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZXUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZXUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBCYXNxdWUgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgS2FycmlrYXMtZWsgaXR6dWxpYSAoa2FycmlrYXNAa2FycmlrYXMuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXUnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydVcnRhcnJpbGEnLCdPdHNhaWxhJywnTWFydHhvYScsJ0FwaXJpbGEnLCdNYWlhdHphJywnRWthaW5hJyxcblx0XHQnVXp0YWlsYScsJ0FidXp0dWEnLCdJcmFpbGEnLCdVcnJpYScsJ0F6YXJvYScsJ0FiZW5kdWEnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnVXJ0JywnT3RzJywnTWFyJywnQXBpJywnTWFpJywnRWthJyxcblx0XHQnVXp0JywnQWJ1JywnSXJhJywnVXJyJywnQXphJywnQWJlJ10sXG5cdFx0ZGF5TmFtZXM6IFsnSWdhbmRlYScsJ0FzdGVsZWhlbmEnLCdBc3RlYXJ0ZWEnLCdBc3RlYXprZW5hJywnT3N0ZWd1bmEnLCdPc3RpcmFsYScsJ0xhcnVuYmF0YSddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnSWdhJywnQXN0JywnQXN0JywnQXN0JywnT3N0JywnT3N0JywnTGFyJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnSWcnLCdBcycsJ0FzJywnQXMnLCdPcycsJ09zJywnTGEnXSxcblx0XHRkYXRlRm9ybWF0OiAneXl5eS9tbS9kZCcsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydldSddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXUnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZXUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZXUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEJhc3F1ZSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIEthcnJpa2FzLWVrIGl0enVsaWEgKGthcnJpa2FzQGthcnJpa2FzLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydldSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ1VydGFycmlsYScsJ090c2FpbGEnLCdNYXJ0eG9hJywnQXBpcmlsYScsJ01haWF0emEnLCdFa2FpbmEnLFxyXG5cdFx0J1V6dGFpbGEnLCdBYnV6dHVhJywnSXJhaWxhJywnVXJyaWEnLCdBemFyb2EnLCdBYmVuZHVhJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnVXJ0JywnT3RzJywnTWFyJywnQXBpJywnTWFpJywnRWthJyxcclxuXHRcdCdVenQnLCdBYnUnLCdJcmEnLCdVcnInLCdBemEnLCdBYmUnXSxcclxuXHRcdGRheU5hbWVzOiBbJ0lnYW5kZWEnLCdBc3RlbGVoZW5hJywnQXN0ZWFydGVhJywnQXN0ZWF6a2VuYScsJ09zdGVndW5hJywnT3N0aXJhbGEnLCdMYXJ1bmJhdGEnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnSWdhJywnQXN0JywnQXN0JywnQXN0JywnT3N0JywnT3N0JywnTGFyJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydJZycsJ0FzJywnQXMnLCdBcycsJ09zJywnT3MnLCdMYSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXkvbW0vZGQnLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2V1J10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2V1J107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fa.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fa.js index baff8c6e3f9..609c23fb870 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fa.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fa.js @@ -26,4 +26,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZmEuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLWZhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRmFyc2kvUGVyc2lhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBKYXZhZCBNb3dsYW5lemhhZCAtLSBqbW93bGFAZ21haWwuY29tICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZhJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsn2YHYsdmI2LHYr9mK2YYnLCfYp9ix2K/Zitio2YfYtNiqJywn2K7Ysdiv2KfYrycsJ9iq2YrYsScsJ9mF2LHYr9in2K8nLCfYtNmH2LHZitmI2LEnLFxuXHRcdCfZhdmH2LEnLCfYotio2KfZhicsJ9ii2LDYsScsJ9iv2YonLCfYqNmH2YXZhicsJ9in2LPZgdmG2K8nXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnMScsJzInLCczJywnNCcsJzUnLCc2JywnNycsJzgnLCc5JywnMTAnLCcxMScsJzEyJ10sXG5cdFx0ZGF5TmFtZXM6IFsn2Yraqdi02YbYqNmHJywn2K/ZiNi02YbYqNmHJywn2LPZh+KAjNi02YbYqNmHJywn2obZh9in2LHYtNmG2KjZhycsJ9m+2YbYrNi02YbYqNmHJywn2KzZhdi52YcnLCfYtNmG2KjZhyddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn2YonLCfYrycsJ9izJywn2oYnLCfZvicsJ9isJywgJ9i0J10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn2YonLCfYrycsJ9izJywn2oYnLCfZvicsJ9isJywgJ9i0J10sXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXkvbW0vZGQnLFxuXHRcdGZpcnN0RGF5OiA2LFxuXHRcdGlzUlRMOiB0cnVlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmYSddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZmEnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZmEuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLWZhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBGYXJzaS9QZXJzaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgSmF2YWQgTW93bGFuZXpoYWQgLS0gam1vd2xhQGdtYWlsLmNvbSAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZmEnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWyfZgdix2YjYsdiv2YrZhicsJ9in2LHYr9mK2KjZh9i02KonLCfYrtix2K/Yp9ivJywn2KrZitixJywn2YXYsdiv2KfYrycsJ9i02YfYsdmK2YjYsScsXHJcblx0XHQn2YXZh9ixJywn2KLYqNin2YYnLCfYotiw2LEnLCfYr9mKJywn2KjZh9mF2YYnLCfYp9iz2YHZhtivJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnMScsJzInLCczJywnNCcsJzUnLCc2JywnNycsJzgnLCc5JywnMTAnLCcxMScsJzEyJ10sXHJcblx0XHRkYXlOYW1lczogWyfZitqp2LTZhtio2YcnLCfYr9mI2LTZhtio2YcnLCfYs9mH4oCM2LTZhtio2YcnLCfahtmH2KfYsdi02YbYqNmHJywn2b7Zhtis2LTZhtio2YcnLCfYrNmF2LnZhycsJ9i02YbYqNmHJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9mKJywn2K8nLCfYsycsJ9qGJywn2b4nLCfYrCcsICfYtCddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn2YonLCfYrycsJ9izJywn2oYnLCfZvicsJ9isJywgJ9i0J10sXHJcblx0XHRkYXRlRm9ybWF0OiAneXl5eS9tbS9kZCcsXHJcblx0XHRmaXJzdERheTogNixcclxuXHRcdGlzUlRMOiB0cnVlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmYSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmYSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fi.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fi.js index 556c30e8cf7..5a3848fb0dc 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fi.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fi.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZmkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZmkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBGaW5uaXNoIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgSGFycmkgS2lscGnDtiAoaGFycmlraWxwaW9AZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZmknXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG4gICAgICAgIG1vbnRoTmFtZXM6IFsnVGFtbWlrdXUnLCdIZWxtaWt1dScsJ01hYWxpc2t1dScsJ0h1aHRpa3V1JywnVG91a29rdXUnLCdLZXMmYXVtbDtrdXUnLFxuICAgICAgICAnSGVpbiZhdW1sO2t1dScsJ0Vsb2t1dScsJ1N5eXNrdXUnLCdMb2tha3V1JywnTWFycmFza3V1JywnSm91bHVrdXUnXSxcbiAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ1RhbW1pJywnSGVsbWknLCdNYWFsaXMnLCdIdWh0aScsJ1RvdWtvJywnS2VzJmF1bWw7JyxcbiAgICAgICAgJ0hlaW4mYXVtbDsnLCdFbG8nLCdTeXlzJywnTG9rYScsJ01hcnJhcycsJ0pvdWx1J10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydTdScsJ01hJywnVGknLCdLZScsJ1RvJywnUGUnLCdTdSddLFxuXHRcdGRheU5hbWVzOiBbJ1N1bm51bnRhaScsJ01hYW5hbnRhaScsJ1RpaXN0YWknLCdLZXNraXZpaWtrbycsJ1RvcnN0YWknLCdQZXJqYW50YWknLCdMYXVhbnRhaSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ1N1JywnTWEnLCdUaScsJ0tlJywnVG8nLCdQZScsJ0xhJ10sXG4gICAgICAgIGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZpJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmaSddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZmkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZmkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEZpbm5pc2ggbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEhhcnJpIEtpbHBpw7YgKGhhcnJpa2lscGlvQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmaSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcbiAgICAgICAgbW9udGhOYW1lczogWydUYW1taWt1dScsJ0hlbG1pa3V1JywnTWFhbGlza3V1JywnSHVodGlrdXUnLCdUb3Vrb2t1dScsJ0tlcyZhdW1sO2t1dScsXHJcbiAgICAgICAgJ0hlaW4mYXVtbDtrdXUnLCdFbG9rdXUnLCdTeXlza3V1JywnTG9rYWt1dScsJ01hcnJhc2t1dScsJ0pvdWx1a3V1J10sXHJcbiAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ1RhbW1pJywnSGVsbWknLCdNYWFsaXMnLCdIdWh0aScsJ1RvdWtvJywnS2VzJmF1bWw7JyxcclxuICAgICAgICAnSGVpbiZhdW1sOycsJ0VsbycsJ1N5eXMnLCdMb2thJywnTWFycmFzJywnSm91bHUnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU3UnLCdNYScsJ1RpJywnS2UnLCdUbycsJ1BlJywnU3UnXSxcclxuXHRcdGRheU5hbWVzOiBbJ1N1bm51bnRhaScsJ01hYW5hbnRhaScsJ1RpaXN0YWknLCdLZXNraXZpaWtrbycsJ1RvcnN0YWknLCdQZXJqYW50YWknLCdMYXVhbnRhaSddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnU3UnLCdNYScsJ1RpJywnS2UnLCdUbycsJ1BlJywnTGEnXSxcclxuICAgICAgICBkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZmknXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZmknXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fo.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fo.js index b577db7d56a..27e0792fc76 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fo.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fo.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZm8uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZm8uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBGYXJvZXNlIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgU3ZlcnJpIE1vaHIgT2xzZW4sIHN2ZXJyaW1vQGdtYWlsLmNvbSAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmbyddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW5za3VyJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydKYW51YXInLCdGZWJydWFyJywnTWFycycsJ0FwcsOtbCcsJ01laScsJ0p1bmknLFxuXHRcdCdKdWxpJywnQXVndXN0JywnU2VwdGVtYmVyJywnT2t0b2JlcicsJ05vdmVtYmVyJywnRGVzZW1iZXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTWFyJywnQXByJywnTWVpJywnSnVuJyxcblx0XHQnSnVsJywnQXVnJywnU2VwJywnT2t0JywnTm92JywnRGVzJ10sXG5cdFx0ZGF5TmFtZXM6IFsnU3VubnVkYWd1cicsJ03DoW5hZGFndXInLCdUw71zZGFndXInLCdNaWt1ZGFndXInLCdIw7NzZGFndXInLCdGcsOtZ2dqYWRhZ3VyJywnTGV5YXJkYWd1ciddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU3VuJywnTcOhbicsJ1TDvXMnLCdNaWsnLCdIw7NzJywnRnLDrScsJ0xleSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ1N1JywnTcOhJywnVMO9JywnTWknLCdIw7MnLCdGcicsJ0xlJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLW1tLXl5eXknLFxuXHRcdGZpcnN0RGF5OiAwLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZm8nXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZvJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZm8uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZm8uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEZhcm9lc2UgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IFN2ZXJyaSBNb2hyIE9sc2VuLCBzdmVycmltb0BnbWFpbC5jb20gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZvJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuc2t1cicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcicsJ0ZlYnJ1YXInLCdNYXJzJywnQXByw61sJywnTWVpJywnSnVuaScsXHJcblx0XHQnSnVsaScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09rdG9iZXInLCdOb3ZlbWJlcicsJ0Rlc2VtYmVyJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTWFyJywnQXByJywnTWVpJywnSnVuJyxcclxuXHRcdCdKdWwnLCdBdWcnLCdTZXAnLCdPa3QnLCdOb3YnLCdEZXMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ1N1bm51ZGFndXInLCdNw6FuYWRhZ3VyJywnVMO9c2RhZ3VyJywnTWlrdWRhZ3VyJywnSMOzc2RhZ3VyJywnRnLDrWdnamFkYWd1cicsJ0xleWFyZGFndXInXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU3VuJywnTcOhbicsJ1TDvXMnLCdNaWsnLCdIw7NzJywnRnLDrScsJ0xleSddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnU3UnLCdNw6EnLCdUw70nLCdNaScsJ0jDsycsJ0ZyJywnTGUnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC1tbS15eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmbyddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmbyddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fr-CH.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fr-CH.js index 6e74282d4fa..c41269122b0 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fr-CH.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fr-CH.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZnItQ0guanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZnItQ0guanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBTd2lzcyBGcmVuY2ggbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBNYXJ0aW4gVm9lbGtsZSAobWFydGluLnZvZWxrbGVAZS10Yy5jaCkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZyLUNIJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudmllcicsJ0bDqXZyaWVyJywnTWFycycsJ0F2cmlsJywnTWFpJywnSnVpbicsXG5cdFx0J0p1aWxsZXQnLCdBb8O7dCcsJ1NlcHRlbWJyZScsJ09jdG9icmUnLCdOb3ZlbWJyZScsJ0TDqWNlbWJyZSddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGw6l2JywnTWFyJywnQXZyJywnTWFpJywnSnVuJyxcblx0XHQnSnVsJywnQW/DuycsJ1NlcCcsJ09jdCcsJ05vdicsJ0TDqWMnXSxcblx0XHRkYXlOYW1lczogWydEaW1hbmNoZScsJ0x1bmRpJywnTWFyZGknLCdNZXJjcmVkaScsJ0pldWRpJywnVmVuZHJlZGknLCdTYW1lZGknXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0RpbScsJ0x1bicsJ01hcicsJ01lcicsJ0pldScsJ1ZlbicsJ1NhbSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ0RpJywnTHUnLCdNYScsJ01lJywnSmUnLCdWZScsJ1NhJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZnItQ0gnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZyLUNIJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZnItQ0guanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZnItQ0guanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFN3aXNzIEZyZW5jaCBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTWFydGluIFZvZWxrbGUgKG1hcnRpbi52b2Vsa2xlQGUtdGMuY2gpLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZnItQ0gnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW52aWVyJywnRsOpdnJpZXInLCdNYXJzJywnQXZyaWwnLCdNYWknLCdKdWluJyxcclxuXHRcdCdKdWlsbGV0JywnQW/Du3QnLCdTZXB0ZW1icmUnLCdPY3RvYnJlJywnTm92ZW1icmUnLCdEw6ljZW1icmUnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGw6l2JywnTWFyJywnQXZyJywnTWFpJywnSnVuJyxcclxuXHRcdCdKdWwnLCdBb8O7JywnU2VwJywnT2N0JywnTm92JywnRMOpYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnRGltYW5jaGUnLCdMdW5kaScsJ01hcmRpJywnTWVyY3JlZGknLCdKZXVkaScsJ1ZlbmRyZWRpJywnU2FtZWRpJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0RpbScsJ0x1bicsJ01hcicsJ01lcicsJ0pldScsJ1ZlbicsJ1NhbSddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnRGknLCdMdScsJ01hJywnTWUnLCdKZScsJ1ZlJywnU2EnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmci1DSCddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmci1DSCddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fr.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fr.js index a7fc2c3dfdf..1e8747d5d4e 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fr.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fr.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZnIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZnIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBGcmVuY2ggbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgU3TDqXBoYW5lIE5haG1hbmkgKHNob2xieUBzaG9sYnkubmV0KS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZnInXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydKYW52aWVyJywnRsOpdnJpZXInLCdNYXJzJywnQXZyaWwnLCdNYWknLCdKdWluJyxcblx0XHQnSnVpbGxldCcsJ0Fvw7t0JywnU2VwdGVtYnJlJywnT2N0b2JyZScsJ05vdmVtYnJlJywnRMOpY2VtYnJlJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0bDqXYnLCdNYXInLCdBdnInLCdNYWknLCdKdW4nLFxuXHRcdCdKdWwnLCdBb8O7JywnU2VwJywnT2N0JywnTm92JywnRMOpYyddLFxuXHRcdGRheU5hbWVzOiBbJ0RpbWFuY2hlJywnTHVuZGknLCdNYXJkaScsJ01lcmNyZWRpJywnSmV1ZGknLCdWZW5kcmVkaScsJ1NhbWVkaSddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRGltJywnTHVuJywnTWFyJywnTWVyJywnSmV1JywnVmVuJywnU2FtJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnRGknLCdMdScsJ01hJywnTWUnLCdKZScsJ1ZlJywnU2EnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmciddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZnInXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZnIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZnIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEZyZW5jaCBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFN0w6lwaGFuZSBOYWhtYW5pIChzaG9sYnlAc2hvbGJ5Lm5ldCkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmciddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnZpZXInLCdGw6l2cmllcicsJ01hcnMnLCdBdnJpbCcsJ01haScsJ0p1aW4nLFxyXG5cdFx0J0p1aWxsZXQnLCdBb8O7dCcsJ1NlcHRlbWJyZScsJ09jdG9icmUnLCdOb3ZlbWJyZScsJ0TDqWNlbWJyZSddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0bDqXYnLCdNYXInLCdBdnInLCdNYWknLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ0Fvw7snLCdTZXAnLCdPY3QnLCdOb3YnLCdEw6ljJ10sXHJcblx0XHRkYXlOYW1lczogWydEaW1hbmNoZScsJ0x1bmRpJywnTWFyZGknLCdNZXJjcmVkaScsJ0pldWRpJywnVmVuZHJlZGknLCdTYW1lZGknXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRGltJywnTHVuJywnTWFyJywnTWVyJywnSmV1JywnVmVuJywnU2FtJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydEaScsJ0x1JywnTWEnLCdNZScsJ0plJywnVmUnLCdTYSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZyJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZyJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-gl.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-gl.js index 41bd6e7019b..295101109b9 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-gl.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-gl.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZ2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZ2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBJbmljaWFjaW9uIGVuIGdhbGVnbyBwYXJhIGEgZXh0ZW5zacOzbiAnVUkgZGF0ZSBwaWNrZXInIHBhcmEgalF1ZXJ5LlxuICAgVHJhZHVjaWRvIHBvciBNYW51ZWwgKE1jTnVlbEBnbXgubmV0KS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZ2wnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydYYW5laXJvJywnRmVicmVpcm8nLCdNYXJ6bycsJ0FicmlsJywnTWFpbycsJ1h1w7FvJyxcblx0XHQnWHVsbG8nLCdBZ29zdG8nLCdTZXRlbWJybycsJ091dHVicm8nLCdOb3ZlbWJybycsJ0RlY2VtYnJvJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ1hhbicsJ0ZlYicsJ01hcicsJ0FicicsJ01haScsJ1h1w7EnLFxuXHRcdCdYdWwnLCdBZ28nLCdTZXQnLCdPdXQnLCdOb3YnLCdEZWMnXSxcblx0XHRkYXlOYW1lczogWydEb21pbmdvJywnTHVucycsJ01hcnRlcycsJ03DqXJjb3JlcycsJ1hvdmVzJywnVmVucmVzJywnU8OhYmFkbyddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRG9tJywnTHVuJywnTWFyJywnTcOpcicsJ1hvdicsJ1ZlbicsJ1PDoWInXSxcblx0XHRkYXlOYW1lc01pbjogWydEbycsJ0x1JywnTWEnLCdNZScsJ1hvJywnVmUnLCdTw6EnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydnbCddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZ2wnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZ2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZ2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEluaWNpYWNpb24gZW4gZ2FsZWdvIHBhcmEgYSBleHRlbnNpw7NuICdVSSBkYXRlIHBpY2tlcicgcGFyYSBqUXVlcnkuXHJcbiAgIFRyYWR1Y2lkbyBwb3IgTWFudWVsIChNY051ZWxAZ214Lm5ldCkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydnbCddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ1hhbmVpcm8nLCdGZWJyZWlybycsJ01hcnpvJywnQWJyaWwnLCdNYWlvJywnWHXDsW8nLFxyXG5cdFx0J1h1bGxvJywnQWdvc3RvJywnU2V0ZW1icm8nLCdPdXR1YnJvJywnTm92ZW1icm8nLCdEZWNlbWJybyddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ1hhbicsJ0ZlYicsJ01hcicsJ0FicicsJ01haScsJ1h1w7EnLFxyXG5cdFx0J1h1bCcsJ0FnbycsJ1NldCcsJ091dCcsJ05vdicsJ0RlYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnRG9taW5nbycsJ0x1bnMnLCdNYXJ0ZXMnLCdNw6lyY29yZXMnLCdYb3ZlcycsJ1ZlbnJlcycsJ1PDoWJhZG8nXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRG9tJywnTHVuJywnTWFyJywnTcOpcicsJ1hvdicsJ1ZlbicsJ1PDoWInXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ0RvJywnTHUnLCdNYScsJ01lJywnWG8nLCdWZScsJ1PDoSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2dsJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2dsJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-gu.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-gu.js index 4bf5e73f889..3c69d93d367 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-gu.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-gu.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZ3UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZ3UuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBHdWphcmF0aSAo4KqX4KuB4Kqc4Kqw4Kq+4Kqk4KuAKSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBOYXltZXNoIE1pc3RyeSAobmF5bWVzaEB5YWhvby5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydndSddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ+CqnOCqvuCqqOCrjeCqr+CrgeCqhuCqsOCrgCcsJ+Cqq+Crh+CqrOCrjeCqsOCrgeCqhuCqsOCrgCcsJ+CqruCqvuCqsOCrjeCqmicsJ+Cqj+CqquCrjeCqsOCqv+CqsicsJ+CqruCrhycsJ+CqnOCrguCqqCcsXG5cdFx0J+CqnOCrgeCqsuCqvuCqiCcsJ+CqkeCql+CquOCrjeCqnycsJ+CquOCqquCrjeCqn+Crh+CqruCrjeCqrOCqsCcsJ+CqkeCqleCrjeCqn+Cri+CqrOCqsCcsJ+CqqOCqteCrh+CqruCrjeCqrOCqsCcsJ+CqoeCqv+CquOCrh+CqruCrjeCqrOCqsCddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfgqpzgqr7gqqjgq43gqq/gq4EnLCfgqqvgq4fgqqzgq43gqrDgq4EnLCfgqq7gqr7gqrDgq43gqponLCfgqo/gqqrgq43gqrDgqr/gqrInLCfgqq7gq4cnLCfgqpzgq4LgqqgnLFxuXHRcdCfgqpzgq4HgqrLgqr7gqognLCfgqpHgqpfgqrjgq43gqp8nLCfgqrjgqqrgq43gqp/gq4cnLCfgqpHgqpXgq43gqp/gq4snLCfgqqjgqrXgq4cnLCfgqqHgqr/gqrjgq4cnXSxcblx0XHRkYXlOYW1lczogWyfgqrDgqrXgqr/gqrXgqr7gqrAnLCfgqrjgq4vgqq7gqrXgqr7gqrAnLCfgqq7gqoLgqpfgqrPgqrXgqr7gqrAnLCfgqqzgq4HgqqfgqrXgqr7gqrAnLCfgqpfgq4HgqrDgq4HgqrXgqr7gqrAnLCfgqrbgq4HgqpXgq43gqrDgqrXgqr7gqrAnLCfgqrbgqqjgqr/gqrXgqr7gqrAnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+CqsOCqteCqvycsJ+CquOCri+CqricsJ+CqruCqguCql+CqsycsJ+CqrOCrgeCqpycsJ+Cql+CrgeCqsOCrgScsJ+CqtuCrgeCqleCrjeCqsCcsJ+CqtuCqqOCqvyddLFxuXHRcdGRheU5hbWVzTWluOiBbJ+CqsCcsJ+CquOCriycsJ+CqruCqgicsJ+CqrOCrgScsJ+Cql+CrgScsJ+CqtuCrgScsJ+CqtiddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC1NLXl5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZ3UnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2d1J107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtZ3UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtZ3UuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEd1amFyYXRpICjgqpfgq4HgqpzgqrDgqr7gqqTgq4ApIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgTmF5bWVzaCBNaXN0cnkgKG5heW1lc2hAeWFob28uY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2d1J10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn4Kqc4Kq+4Kqo4KuN4Kqv4KuB4KqG4Kqw4KuAJywn4Kqr4KuH4Kqs4KuN4Kqw4KuB4KqG4Kqw4KuAJywn4Kqu4Kq+4Kqw4KuN4KqaJywn4KqP4Kqq4KuN4Kqw4Kq/4KqyJywn4Kqu4KuHJywn4Kqc4KuC4KqoJyxcclxuXHRcdCfgqpzgq4HgqrLgqr7gqognLCfgqpHgqpfgqrjgq43gqp8nLCfgqrjgqqrgq43gqp/gq4fgqq7gq43gqqzgqrAnLCfgqpHgqpXgq43gqp/gq4vgqqzgqrAnLCfgqqjgqrXgq4fgqq7gq43gqqzgqrAnLCfgqqHgqr/gqrjgq4fgqq7gq43gqqzgqrAnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfgqpzgqr7gqqjgq43gqq/gq4EnLCfgqqvgq4fgqqzgq43gqrDgq4EnLCfgqq7gqr7gqrDgq43gqponLCfgqo/gqqrgq43gqrDgqr/gqrInLCfgqq7gq4cnLCfgqpzgq4LgqqgnLFxyXG5cdFx0J+CqnOCrgeCqsuCqvuCqiCcsJ+CqkeCql+CquOCrjeCqnycsJ+CquOCqquCrjeCqn+CrhycsJ+CqkeCqleCrjeCqn+CriycsJ+CqqOCqteCrhycsJ+CqoeCqv+CquOCrhyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsn4Kqw4Kq14Kq/4Kq14Kq+4KqwJywn4Kq44KuL4Kqu4Kq14Kq+4KqwJywn4Kqu4KqC4KqX4Kqz4Kq14Kq+4KqwJywn4Kqs4KuB4Kqn4Kq14Kq+4KqwJywn4KqX4KuB4Kqw4KuB4Kq14Kq+4KqwJywn4Kq24KuB4KqV4KuN4Kqw4Kq14Kq+4KqwJywn4Kq24Kqo4Kq/4Kq14Kq+4KqwJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+CqsOCqteCqvycsJ+CquOCri+CqricsJ+CqruCqguCql+CqsycsJ+CqrOCrgeCqpycsJ+Cql+CrgeCqsOCrgScsJ+CqtuCrgeCqleCrjeCqsCcsJ+CqtuCqqOCqvyddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn4KqwJywn4Kq44KuLJywn4Kqu4KqCJywn4Kqs4KuBJywn4KqX4KuBJywn4Kq24KuBJywn4Kq2J10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQtTS15eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydndSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydndSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-he.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-he.js index 4d08ce45cbc..8b00e296fca 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-he.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-he.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtaGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtaGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBIZWJyZXcgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBBbWlyIEhhcmRvbiAoYWhhcmRvbiBhdCBnbWFpbCBkb3QgY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaGUnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWyfXmdeg15XXkNeoJywn16TXkdeo15XXkNeoJywn157XqNelJywn15DXpNeo15nXnCcsJ9ee15DXmScsJ9eZ15XXoNeZJyxcblx0XHQn15nXldec15knLCfXkNeV15LXldeh15gnLCfXodek15jXnteR16gnLCfXkNeV16fXmNeV15HXqCcsJ9eg15XXkdee15HXqCcsJ9eT16bXnteR16gnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnMScsJzInLCczJywnNCcsJzUnLCc2Jyxcblx0XHQnNycsJzgnLCc5JywnMTAnLCcxMScsJzEyJ10sXG5cdFx0ZGF5TmFtZXM6IFsn16jXkNep15XXnycsJ9ep16DXmScsJ9ep15zXmdep15knLCfXqNeR15nXoteZJywn15fXnteZ16nXmScsJ9ep15nXqdeZJywn16nXkdeqJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfXkFxcJycsJ9eRXFwnJywn15JcXCcnLCfXk1xcJycsJ9eUXFwnJywn15VcXCcnLCfXqdeR16onXSxcblx0XHRkYXlOYW1lc01pbjogWyfXkFxcJycsJ9eRXFwnJywn15JcXCcnLCfXk1xcJycsJ9eUXFwnJywn15VcXCcnLCfXqdeR16onXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDAsXG5cdFx0aXNSVEw6IHRydWVcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2hlJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydoZSddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtaGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtaGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEhlYnJldyBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgQW1pciBIYXJkb24gKGFoYXJkb24gYXQgZ21haWwgZG90IGNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydoZSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ9eZ16DXldeQ16gnLCfXpNeR16jXldeQ16gnLCfXnteo16UnLCfXkNek16jXmdecJywn157XkNeZJywn15nXldeg15knLFxyXG5cdFx0J9eZ15XXnNeZJywn15DXldeS15XXodeYJywn16HXpNeY157XkdeoJywn15DXlden15jXldeR16gnLCfXoNeV15HXnteR16gnLCfXk9em157XkdeoJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnMScsJzInLCczJywnNCcsJzUnLCc2JyxcclxuXHRcdCc3JywnOCcsJzknLCcxMCcsJzExJywnMTInXSxcclxuXHRcdGRheU5hbWVzOiBbJ9eo15DXqdeV158nLCfXqdeg15knLCfXqdec15nXqdeZJywn16jXkdeZ16LXmScsJ9eX157Xmdep15knLCfXqdeZ16nXmScsJ9ep15HXqiddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfXkFxcJycsJ9eRXFwnJywn15JcXCcnLCfXk1xcJycsJ9eUXFwnJywn15VcXCcnLCfXqdeR16onXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ9eQXFwnJywn15FcXCcnLCfXklxcJycsJ9eTXFwnJywn15RcXCcnLCfXlVxcJycsJ9ep15HXqiddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDAsXHJcblx0XHRpc1JUTDogdHJ1ZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaGUnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaGUnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hi-IN.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hi-IN.js index 53c7ac7da5b..615720177e7 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hi-IN.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hi-IN.js @@ -25,4 +25,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtaGktSU4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy1oaS1JTi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEhpbmRpIElORElBIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgUGF3YW4gS3VtYXIgU2luZ2guICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2hpLUlOJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsn4KSc4KSo4KS14KSw4KWAJywnIOCkq+CksOCkteCksOClgCcsICfgpK7gpL7gpLDgpY3gpJonLCAn4KSF4KSq4KWN4KSw4KWI4KSyJywgJ+CkruCkiCcsICfgpJzgpYLgpKgnLCfgpJzgpYHgpLLgpL7gpIgnLCAn4KSF4KSX4KS44KWN4KSkJywgJ+CkuOCkv+CkpOCkruCljeCkrOCksCcsICfgpIXgpJXgpY3gpJ/gpYLgpKzgpLAnLCAn4KSo4KS14KSu4KWN4KSs4KSwJywgJ+CkpuCkv+CkuOCkruCljeCkrOCksCddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfgpJzgpKgnLCAn4KSr4KSwJywgJ+CkruCkvuCksOCljeCkmicsJ+CkheCkquCljeCksOCliCcsICfgpK7gpIgnLCAn4KSc4KWC4KSoJywn4KSc4KWB4KSy4KS+4KSIJywgJ+CkheCklycsICfgpLjgpL/gpKQnLCAn4KSF4KSV4KWN4KSf4KWCJywgJ+CkqOCktScsICfgpKbgpL/gpLgnXSxcblx0XHRkYXlOYW1lczogWyfgpLDgpLXgpL/gpLXgpL7gpLAnLCAn4KS44KWL4KSu4KS14KS+4KSwJywgJ+CkruCkguCkl+CksuCkteCkvuCksCcsICfgpKzgpYHgpKfgpLXgpL7gpLAnLCAn4KSX4KWB4KSw4KWB4KS14KS+4KSwJywgJ+CktuClgeCkleCljeCksOCkteCkvuCksCcsICfgpLbgpKjgpL/gpLXgpL7gpLAnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+CksOCkteCkvycsICfgpLjgpYvgpK4nLCAn4KSu4KSC4KSX4KSyJywgJ+CkrOClgeCkpycsICfgpJfgpYHgpLDgpYEnLCAn4KS24KWB4KSV4KWN4KSwJywgJ+CktuCkqOCkvyddLFxuXHRcdGRheU5hbWVzTWluOiBbJ+CksCcsJ+CkuOCliycsJ+CkruCkgicsJ+CkrOClgScsJ+Ckl+ClgScsJ+CktuClgScsJ+CktiddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2hpLUlOJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydoaS1JTiddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtaGktSU4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy1oaS1JTi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgSGluZGkgSU5ESUEgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IFBhd2FuIEt1bWFyIFNpbmdoLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaGktSU4nXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWyfgpJzgpKjgpLXgpLDgpYAnLCcg4KSr4KSw4KS14KSw4KWAJywgJ+CkruCkvuCksOCljeCkmicsICfgpIXgpKrgpY3gpLDgpYjgpLInLCAn4KSu4KSIJywgJ+CknOClguCkqCcsJ+CknOClgeCksuCkvuCkiCcsICfgpIXgpJfgpLjgpY3gpKQnLCAn4KS44KS/4KSk4KSu4KWN4KSs4KSwJywgJ+CkheCkleCljeCkn+ClguCkrOCksCcsICfgpKjgpLXgpK7gpY3gpKzgpLAnLCAn4KSm4KS/4KS44KSu4KWN4KSs4KSwJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn4KSc4KSoJywgJ+Ckq+CksCcsICfgpK7gpL7gpLDgpY3gpJonLCfgpIXgpKrgpY3gpLDgpYgnLCAn4KSu4KSIJywgJ+CknOClguCkqCcsJ+CknOClgeCksuCkvuCkiCcsICfgpIXgpJcnLCAn4KS44KS/4KSkJywgJ+CkheCkleCljeCkn+ClgicsICfgpKjgpLUnLCAn4KSm4KS/4KS4J10sXHJcblx0XHRkYXlOYW1lczogWyfgpLDgpLXgpL/gpLXgpL7gpLAnLCAn4KS44KWL4KSu4KS14KS+4KSwJywgJ+CkruCkguCkl+CksuCkteCkvuCksCcsICfgpKzgpYHgpKfgpLXgpL7gpLAnLCAn4KSX4KWB4KSw4KWB4KS14KS+4KSwJywgJ+CktuClgeCkleCljeCksOCkteCkvuCksCcsICfgpLbgpKjgpL/gpLXgpL7gpLAnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn4KSw4KS14KS/JywgJ+CkuOCli+CkricsICfgpK7gpILgpJfgpLInLCAn4KSs4KWB4KSnJywgJ+Ckl+ClgeCksOClgScsICfgpLbgpYHgpJXgpY3gpLAnLCAn4KS24KSo4KS/J10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfgpLAnLCfgpLjgpYsnLCfgpK7gpIInLCfgpKzgpYEnLCfgpJfgpYEnLCfgpLbgpYEnLCfgpLYnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydoaS1JTiddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydoaS1JTiddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hr.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hr.js index bc0b96b8175..46656bb57db 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hr.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hr.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtaHIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtaHIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBDcm9hdGlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IFZqZWtvc2xhdiBOZXNlay4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaHInXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydTaWplxI1hbmonLCdWZWxqYcSNYScsJ0/FvnVqYWsnLCdUcmF2YW5qJywnU3ZpYmFuaicsJ0xpcGFuaicsXG5cdFx0J1NycGFuaicsJ0tvbG92b3onLCdSdWphbicsJ0xpc3RvcGFkJywnU3R1ZGVuaScsJ1Byb3NpbmFjJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ1NpaicsJ1ZlbGonLCdPxb51JywnVHJhJywnU3ZpJywnTGlwJyxcblx0XHQnU3JwJywnS29sJywnUnVqJywnTGlzJywnU3R1JywnUHJvJ10sXG5cdFx0ZGF5TmFtZXM6IFsnTmVkamVsamEnLCdQb25lZGplbGphaycsJ1V0b3JhaycsJ1NyaWplZGEnLCfEjGV0dnJ0YWsnLCdQZXRhaycsJ1N1Ym90YSddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnTmVkJywnUG9uJywnVXRvJywnU3JpJywnxIxldCcsJ1BldCcsJ1N1YiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ05lJywnUG8nLCdVdCcsJ1NyJywnxIxlJywnUGUnLCdTdSddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5LicsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydociddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaHInXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtaHIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtaHIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIENyb2F0aWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBWamVrb3NsYXYgTmVzZWsuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydociddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ1NpamXEjWFuaicsJ1ZlbGphxI1hJywnT8W+dWphaycsJ1RyYXZhbmonLCdTdmliYW5qJywnTGlwYW5qJyxcclxuXHRcdCdTcnBhbmonLCdLb2xvdm96JywnUnVqYW4nLCdMaXN0b3BhZCcsJ1N0dWRlbmknLCdQcm9zaW5hYyddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ1NpaicsJ1ZlbGonLCdPxb51JywnVHJhJywnU3ZpJywnTGlwJyxcclxuXHRcdCdTcnAnLCdLb2wnLCdSdWonLCdMaXMnLCdTdHUnLCdQcm8nXSxcclxuXHRcdGRheU5hbWVzOiBbJ05lZGplbGphJywnUG9uZWRqZWxqYWsnLCdVdG9yYWsnLCdTcmlqZWRhJywnxIxldHZydGFrJywnUGV0YWsnLCdTdWJvdGEnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnTmVkJywnUG9uJywnVXRvJywnU3JpJywnxIxldCcsJ1BldCcsJ1N1YiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnTmUnLCdQbycsJ1V0JywnU3InLCfEjGUnLCdQZScsJ1N1J10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eS4nLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2hyJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2hyJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hu.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hu.js index ce09e873ab3..83354636eef 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hu.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hu.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtaHUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtaHUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBIdW5nYXJpYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBJc3R2YW4gS2FyYXN6aSAoanF1ZXJ5Y2FsZW5kYXJAc3BhbS5yYXN6aS5odSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2h1J10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudcOhcicsICdGZWJydcOhcicsICdNw6FyY2l1cycsICfDgXByaWxpcycsICdNw6FqdXMnLCAnSsO6bml1cycsXG5cdFx0J0rDumxpdXMnLCAnQXVndXN6dHVzJywgJ1N6ZXB0ZW1iZXInLCAnT2t0w7NiZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywgJ0ZlYicsICdNw6FyJywgJ8OBcHInLCAnTcOhaicsICdKw7puJyxcblx0XHQnSsO6bCcsICdBdWcnLCAnU3plcCcsICdPa3QnLCAnTm92JywgJ0RlYyddLFxuXHRcdGRheU5hbWVzOiBbJ1Zhc8Ohcm5hcCcsICdIw6l0ZsO2JywgJ0tlZGQnLCAnU3plcmRhJywgJ0Nzw7x0w7ZydMO2aycsICdQw6ludGVrJywgJ1N6b21iYXQnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ1ZhcycsICdIw6l0JywgJ0tlZCcsICdTemUnLCAnQ3PDvCcsICdQw6luJywgJ1N6byddLFxuXHRcdGRheU5hbWVzTWluOiBbJ1YnLCAnSCcsICdLJywgJ1N6ZScsICdDcycsICdQJywgJ1N6byddLFxuXHRcdGRhdGVGb3JtYXQ6ICd5eXl5LW1tLWRkJyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2h1J10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydodSddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtaHUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtaHUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEh1bmdhcmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgSXN0dmFuIEthcmFzemkgKGpxdWVyeWNhbGVuZGFyQHNwYW0ucmFzemkuaHUpLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaHUnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW51w6FyJywgJ0ZlYnJ1w6FyJywgJ03DoXJjaXVzJywgJ8OBcHJpbGlzJywgJ03DoWp1cycsICdKw7puaXVzJyxcclxuXHRcdCdKw7psaXVzJywgJ0F1Z3VzenR1cycsICdTemVwdGVtYmVyJywgJ09rdMOzYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywgJ0ZlYicsICdNw6FyJywgJ8OBcHInLCAnTcOhaicsICdKw7puJyxcclxuXHRcdCdKw7psJywgJ0F1ZycsICdTemVwJywgJ09rdCcsICdOb3YnLCAnRGVjJ10sXHJcblx0XHRkYXlOYW1lczogWydWYXPDoXJuYXAnLCAnSMOpdGbDticsICdLZWRkJywgJ1N6ZXJkYScsICdDc8O8dMO2cnTDtmsnLCAnUMOpbnRlaycsICdTem9tYmF0J10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ1ZhcycsICdIw6l0JywgJ0tlZCcsICdTemUnLCAnQ3PDvCcsICdQw6luJywgJ1N6byddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnVicsICdIJywgJ0snLCAnU3plJywgJ0NzJywgJ1AnLCAnU3pvJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAneXl5eS1tbS1kZCcsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaHUnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaHUnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hy.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hy.js index e6553506555..6e8af7408d7 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hy.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hy.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtaHkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtaHkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBBcm1lbmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IExldm9uIFpha2FyeWFuIChsZXZvbi56YWthcnlhbkBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydoeSddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ9WA1bjWgtW21b7VodaAJywn1ZPVpdW/1oDVvtWh1oAnLCfVhNWh1oDVvycsJ9Sx1brWgNWr1awnLCfVhNWh1bXVq9W9Jywn1YDVuNaC1bbVq9W9Jyxcblx0XHQn1YDVuNaC1azVq9W9Jywn1ZXVo9W41b3Vv9W41b0nLCfVjdWl1brVv9Wl1bTVotWl1oAnLCfVgNW41a/Vv9Wl1bTVotWl1oAnLCfVhtW41bXVpdW01aLVpdaAJywn1LTVpdWv1b/VpdW01aLVpdaAJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ9WA1bjWgtW21b4nLCfVk9Wl1b/WgCcsJ9WE1aHWgNW/Jywn1LHVutaAJywn1YTVodW11avVvScsJ9WA1bjWgtW21avVvScsXG5cdFx0J9WA1bjWgtWsJywn1ZXVo9W9Jywn1Y3VpdW6Jywn1YDVuNWvJywn1YbVuNW1Jywn1LTVpdWvJ10sXG5cdFx0ZGF5TmFtZXM6IFsn1a/Vq9aA1aHVr9WrJywn1aXVr9W41oLVt9Wh1aLVqdWrJywn1aXWgNWl1oTVt9Wh1aLVqdWrJywn1bnVuNaA1aXWhNW31aHVotWp1asnLCfVsNWr1bbVo9W31aHVotWp1asnLCfVuNaC1oDVotWh1aknLCfVt9Wh1aLVodWpJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfVr9Wr1oAnLCfVpdaA1a8nLCfVpdaA1oQnLCfVudaA1oQnLCfVsNW21aMnLCfVuNaC1oDVoicsJ9W31aLVqSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ9Wv1avWgCcsJ9Wl1oDVrycsJ9Wl1oDWhCcsJ9W51oDWhCcsJ9Ww1bbVoycsJ9W41oLWgNWiJywn1bfVotWpJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaHknXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2h5J107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtaHkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtaHkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEFybWVuaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBMZXZvbiBaYWthcnlhbiAobGV2b24uemFrYXJ5YW5AZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2h5J10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn1YDVuNaC1bbVvtWh1oAnLCfVk9Wl1b/WgNW+1aHWgCcsJ9WE1aHWgNW/Jywn1LHVutaA1avVrCcsJ9WE1aHVtdWr1b0nLCfVgNW41oLVttWr1b0nLFxyXG5cdFx0J9WA1bjWgtWs1avVvScsJ9WV1aPVuNW91b/VuNW9Jywn1Y3VpdW61b/VpdW01aLVpdaAJywn1YDVuNWv1b/VpdW01aLVpdaAJywn1YbVuNW11aXVtNWi1aXWgCcsJ9S01aXVr9W/1aXVtNWi1aXWgCddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ9WA1bjWgtW21b4nLCfVk9Wl1b/WgCcsJ9WE1aHWgNW/Jywn1LHVutaAJywn1YTVodW11avVvScsJ9WA1bjWgtW21avVvScsXHJcblx0XHQn1YDVuNaC1awnLCfVldWj1b0nLCfVjdWl1bonLCfVgNW41a8nLCfVhtW41bUnLCfUtNWl1a8nXSxcclxuXHRcdGRheU5hbWVzOiBbJ9Wv1avWgNWh1a/VqycsJ9Wl1a/VuNaC1bfVodWi1anVqycsJ9Wl1oDVpdaE1bfVodWi1anVqycsJ9W51bjWgNWl1oTVt9Wh1aLVqdWrJywn1bDVq9W21aPVt9Wh1aLVqdWrJywn1bjWgtaA1aLVodWpJywn1bfVodWi1aHVqSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfVr9Wr1oAnLCfVpdaA1a8nLCfVpdaA1oQnLCfVudaA1oQnLCfVsNW21aMnLCfVuNaC1oDVoicsJ9W31aLVqSddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn1a/Vq9aAJywn1aXWgNWvJywn1aXWgNaEJywn1bnWgNaEJywn1bDVttWjJywn1bjWgtaA1aInLCfVt9Wi1aknXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydoeSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydoeSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-id.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-id.js index 7cb59f6491b..80689d69603 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-id.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-id.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtaWQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtaWQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBJbmRvbmVzaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgRGVkZW4gRmF0aHVyYWhtYW4gKGRlZGVuZkBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydpZCddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcmknLCdGZWJydWFyaScsJ01hcmV0JywnQXByaWwnLCdNZWknLCdKdW5pJyxcblx0XHQnSnVsaScsJ0FndXN0dXMnLCdTZXB0ZW1iZXInLCdPa3RvYmVyJywnTm9wZW1iZXInLCdEZXNlbWJlciddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNZWknLCdKdW4nLFxuXHRcdCdKdWwnLCdBZ3VzJywnU2VwJywnT2t0JywnTm9wJywnRGVzJ10sXG5cdFx0ZGF5TmFtZXM6IFsnTWluZ2d1JywnU2VuaW4nLCdTZWxhc2EnLCdSYWJ1JywnS2FtaXMnLCdKdW1hdCcsJ1NhYnR1J10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydNaW4nLCdTZW4nLCdTZWwnLCdSYWInLCdrYW0nLCdKdW0nLCdTYWInXSxcblx0XHRkYXlOYW1lc01pbjogWydNZycsJ1NuJywnU2wnLCdSYicsJ0ttJywnam0nLCdTYiddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMCxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2lkJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydpZCddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtaWQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtaWQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEluZG9uZXNpYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IERlZGVuIEZhdGh1cmFobWFuIChkZWRlbmZAZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2lkJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyaScsJ0ZlYnJ1YXJpJywnTWFyZXQnLCdBcHJpbCcsJ01laScsJ0p1bmknLFxyXG5cdFx0J0p1bGknLCdBZ3VzdHVzJywnU2VwdGVtYmVyJywnT2t0b2JlcicsJ05vcGVtYmVyJywnRGVzZW1iZXInXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNZWknLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ0FndXMnLCdTZXAnLCdPa3QnLCdOb3AnLCdEZXMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ01pbmdndScsJ1NlbmluJywnU2VsYXNhJywnUmFidScsJ0thbWlzJywnSnVtYXQnLCdTYWJ0dSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydNaW4nLCdTZW4nLCdTZWwnLCdSYWInLCdrYW0nLCdKdW0nLCdTYWInXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ01nJywnU24nLCdTbCcsJ1JiJywnS20nLCdqbScsJ1NiJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMCxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaWQnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaWQnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-is.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-is.js index 6ddedeed5ac..bc81a34cd8e 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-is.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-is.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtaXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtaXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBJY2VsYW5kaWMgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBIYXVrdXIgSC4gVGhvcnNzb24gKGhhdWt1ckBlc2tpbGwuaXMpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydpcyddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0phbsO6YXInLCdGZWJyw7phcicsJ01hcnMnLCdBcHLDrWwnLCdNYcOtJywnSsO6bsOtJyxcblx0XHQnSsO6bMOtJywnw4Fnw7pzdCcsJ1NlcHRlbWJlcicsJ09rdMOzYmVyJywnTsOzdmVtYmVyJywnRGVzZW1iZXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTWFyJywnQXByJywnTWHDrScsJ0rDum4nLFxuXHRcdCdKw7psJywnw4Fnw7onLCdTZXAnLCdPa3QnLCdOw7N2JywnRGVzJ10sXG5cdFx0ZGF5TmFtZXM6IFsnU3VubnVkYWd1cicsJ03DoW51ZGFndXInLCfDnnJpw7BqdWRhZ3VyJywnTWnDsHZpa3VkYWd1cicsJ0ZpbW10dWRhZ3VyJywnRsO2c3R1ZGFndXInLCdMYXVnYXJkYWd1ciddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU3VuJywnTcOhbicsJ8OecmknLCdNacOwJywnRmltJywnRsO2cycsJ0xhdSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ1N1JywnTcOhJywnw55yJywnTWknLCdGaScsJ0bDticsJ0xhJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAwLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaXMnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2lzJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtaXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtaXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEljZWxhbmRpYyBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgSGF1a3VyIEguIFRob3Jzc29uIChoYXVrdXJAZXNraWxsLmlzKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2lzJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnSmFuw7phcicsJ0ZlYnLDumFyJywnTWFycycsJ0FwcsOtbCcsJ01hw60nLCdKw7puw60nLFxyXG5cdFx0J0rDumzDrScsJ8OBZ8O6c3QnLCdTZXB0ZW1iZXInLCdPa3TDs2JlcicsJ07Ds3ZlbWJlcicsJ0Rlc2VtYmVyJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTWFyJywnQXByJywnTWHDrScsJ0rDum4nLFxyXG5cdFx0J0rDumwnLCfDgWfDuicsJ1NlcCcsJ09rdCcsJ07Ds3YnLCdEZXMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ1N1bm51ZGFndXInLCdNw6FudWRhZ3VyJywnw55yacOwanVkYWd1cicsJ01pw7B2aWt1ZGFndXInLCdGaW1tdHVkYWd1cicsJ0bDtnN0dWRhZ3VyJywnTGF1Z2FyZGFndXInXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU3VuJywnTcOhbicsJ8OecmknLCdNacOwJywnRmltJywnRsO2cycsJ0xhdSddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnU3UnLCdNw6EnLCfDnnInLCdNaScsJ0ZpJywnRsO2JywnTGEnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydpcyddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydpcyddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-it.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-it.js index 742bbfb32bb..2bd8396ed7f 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-it.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-it.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtaXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtaXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBJdGFsaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgQXBhZWxsYSAoYXBhZWxsYUBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydpdCddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0dlbm5haW8nLCdGZWJicmFpbycsJ01hcnpvJywnQXByaWxlJywnTWFnZ2lvJywnR2l1Z25vJyxcblx0XHQnTHVnbGlvJywnQWdvc3RvJywnU2V0dGVtYnJlJywnT3R0b2JyZScsJ05vdmVtYnJlJywnRGljZW1icmUnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnR2VuJywnRmViJywnTWFyJywnQXByJywnTWFnJywnR2l1Jyxcblx0XHQnTHVnJywnQWdvJywnU2V0JywnT3R0JywnTm92JywnRGljJ10sXG5cdFx0ZGF5TmFtZXM6IFsnRG9tZW5pY2EnLCdMdW5lZMOsJywnTWFydGVkw6wnLCdNZXJjb2xlZMOsJywnR2lvdmVkw6wnLCdWZW5lcmTDrCcsJ1NhYmF0byddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRG9tJywnTHVuJywnTWFyJywnTWVyJywnR2lvJywnVmVuJywnU2FiJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnRG8nLCdMdScsJ01hJywnTWUnLCdHaW8nLCdWZScsJ1NhJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaXQnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2l0J107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtaXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtaXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEl0YWxpYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEFwYWVsbGEgKGFwYWVsbGFAZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2l0J10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnR2VubmFpbycsJ0ZlYmJyYWlvJywnTWFyem8nLCdBcHJpbGUnLCdNYWdnaW8nLCdHaXVnbm8nLFxyXG5cdFx0J0x1Z2xpbycsJ0Fnb3N0bycsJ1NldHRlbWJyZScsJ090dG9icmUnLCdOb3ZlbWJyZScsJ0RpY2VtYnJlJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnR2VuJywnRmViJywnTWFyJywnQXByJywnTWFnJywnR2l1JyxcclxuXHRcdCdMdWcnLCdBZ28nLCdTZXQnLCdPdHQnLCdOb3YnLCdEaWMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ0RvbWVuaWNhJywnTHVuZWTDrCcsJ01hcnRlZMOsJywnTWVyY29sZWTDrCcsJ0dpb3ZlZMOsJywnVmVuZXJkw6wnLCdTYWJhdG8nXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRG9tJywnTHVuJywnTWFyJywnTWVyJywnR2lvJywnVmVuJywnU2FiJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydEbycsJ0x1JywnTWEnLCdNZScsJ0dpbycsJ1ZlJywnU2EnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydpdCddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydpdCddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ja.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ja.js index 605547be340..208dfc4b66c 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ja.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ja.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtamEuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtamEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBKYXBhbmVzZSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEtlbnRhcm8gU0FUTyAoa2VudGFyb0ByYW52aXMuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snamEnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWycx5pyIJywnMuaciCcsJzPmnIgnLCc05pyIJywnNeaciCcsJzbmnIgnLFxuXHRcdCc35pyIJywnOOaciCcsJznmnIgnLCcxMOaciCcsJzEx5pyIJywnMTLmnIgnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnMeaciCcsJzLmnIgnLCcz5pyIJywnNOaciCcsJzXmnIgnLCc25pyIJyxcblx0XHQnN+aciCcsJzjmnIgnLCc55pyIJywnMTDmnIgnLCcxMeaciCcsJzEy5pyIJ10sXG5cdFx0ZGF5TmFtZXM6IFsn5pel5puc5pelJywn5pyI5puc5pelJywn54Gr5puc5pelJywn5rC05puc5pelJywn5pyo5puc5pelJywn6YeR5puc5pelJywn5Zyf5puc5pelJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfml6UnLCfmnIgnLCfngasnLCfmsLQnLCfmnKgnLCfph5EnLCflnJ8nXSxcblx0XHRkYXlOYW1lc01pbjogWyfml6UnLCfmnIgnLCfngasnLCfmsLQnLCfmnKgnLCfph5EnLCflnJ8nXSxcblx0XHRkYXRlRm9ybWF0OiAneXl5eS9tbS9kZCcsXG5cdFx0Zmlyc3REYXk6IDAsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydqYSddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snamEnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtamEuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtamEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEphcGFuZXNlIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBLZW50YXJvIFNBVE8gKGtlbnRhcm9AcmFudmlzLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydqYSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJzHmnIgnLCcy5pyIJywnM+aciCcsJzTmnIgnLCc15pyIJywnNuaciCcsXHJcblx0XHQnN+aciCcsJzjmnIgnLCc55pyIJywnMTDmnIgnLCcxMeaciCcsJzEy5pyIJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnMeaciCcsJzLmnIgnLCcz5pyIJywnNOaciCcsJzXmnIgnLCc25pyIJyxcclxuXHRcdCc35pyIJywnOOaciCcsJznmnIgnLCcxMOaciCcsJzEx5pyIJywnMTLmnIgnXSxcclxuXHRcdGRheU5hbWVzOiBbJ+aXpeabnOaXpScsJ+aciOabnOaXpScsJ+eBq+abnOaXpScsJ+awtOabnOaXpScsJ+acqOabnOaXpScsJ+mHkeabnOaXpScsJ+Wcn+abnOaXpSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfml6UnLCfmnIgnLCfngasnLCfmsLQnLCfmnKgnLCfph5EnLCflnJ8nXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ+aXpScsJ+aciCcsJ+eBqycsJ+awtCcsJ+acqCcsJ+mHkScsJ+WcnyddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXkvbW0vZGQnLFxyXG5cdFx0Zmlyc3REYXk6IDAsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2phJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2phJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ka.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ka.js index a60b99d294e..51801aabb52 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ka.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ka.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMta2EuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMta2EuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBHZW9yZ2lhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBBbmRyZWkgR29yYnVzaGtpbi4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sna2EnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWyfhg5jhg5Dhg5zhg5Xhg5Dhg6Dhg5gnLCfhg5fhg5Thg5Hhg5Thg6Dhg5Xhg5Dhg5rhg5gnLCfhg5vhg5Dhg6Dhg6Lhg5gnLCfhg5Dhg57hg6Dhg5jhg5rhg5gnLCfhg5vhg5Dhg5jhg6Hhg5gnLCfhg5jhg5Xhg5zhg5jhg6Hhg5gnLFxuXHRcdCfhg5jhg5Xhg5rhg5jhg6Hhg5gnLCfhg5Dhg5Lhg5Xhg5jhg6Hhg6Lhg50nLCfhg6Hhg5Thg6Xhg6Lhg5Thg5vhg5Hhg5Thg6Dhg5gnLCfhg53hg6Xhg6Lhg53hg5vhg5Hhg5Thg6Dhg5gnLCfhg5zhg53hg5Thg5vhg5Hhg5Thg6Dhg5gnLCfhg5Phg5Thg5nhg5Thg5vhg5Hhg5Thg6Dhg5gnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn4YOY4YOQ4YOcJywgJ+GDl+GDlOGDkScsICfhg5vhg5Dhg6AnLCAn4YOQ4YOe4YOgJywgJ+GDm+GDkOGDmOGDoeGDmCcsICfhg5jhg5Xhg5wnLFxuXHRcdCfhg5jhg5Xhg5onLCAn4YOQ4YOS4YOVJywgJ+GDoeGDlOGDpScsICfhg53hg6Xhg6InLCAn4YOc4YOd4YOUJywgJ+GDk+GDlOGDmSddLFxuXHRcdGRheU5hbWVzOiBbJ+GDmeGDleGDmOGDoOGDkCcsICfhg53hg6Dhg6jhg5Dhg5Hhg5Dhg5fhg5gnLCAn4YOh4YOQ4YOb4YOo4YOQ4YOR4YOQ4YOX4YOYJywgJ+GDneGDl+GDruGDqOGDkOGDkeGDkOGDl+GDmCcsICfhg67hg6Phg5fhg6jhg5Dhg5Hhg5Dhg5fhg5gnLCAn4YOe4YOQ4YOg4YOQ4YOh4YOZ4YOU4YOV4YOYJywgJ+GDqOGDkOGDkeGDkOGDl+GDmCddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn4YOZ4YOVJywgJ+GDneGDoOGDqCcsICfhg6Hhg5Dhg5snLCAn4YOd4YOX4YOuJywgJ+GDruGDo+GDlycsICfhg57hg5Dhg6AnLCAn4YOo4YOQ4YORJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn4YOZ4YOVJywn4YOd4YOgJywn4YOh4YObJywn4YOd4YOXJywgJ+GDruGDqCcsICfhg57hg6AnLCfhg6jhg5EnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydrYSddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sna2EnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMta2EuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMta2EuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEdlb3JnaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgQW5kcmVpIEdvcmJ1c2hraW4uICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydrYSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ+GDmOGDkOGDnOGDleGDkOGDoOGDmCcsJ+GDl+GDlOGDkeGDlOGDoOGDleGDkOGDmuGDmCcsJ+GDm+GDkOGDoOGDouGDmCcsJ+GDkOGDnuGDoOGDmOGDmuGDmCcsJ+GDm+GDkOGDmOGDoeGDmCcsJ+GDmOGDleGDnOGDmOGDoeGDmCcsXHJcblx0XHQn4YOY4YOV4YOa4YOY4YOh4YOYJywn4YOQ4YOS4YOV4YOY4YOh4YOi4YOdJywn4YOh4YOU4YOl4YOi4YOU4YOb4YOR4YOU4YOg4YOYJywn4YOd4YOl4YOi4YOd4YOb4YOR4YOU4YOg4YOYJywn4YOc4YOd4YOU4YOb4YOR4YOU4YOg4YOYJywn4YOT4YOU4YOZ4YOU4YOb4YOR4YOU4YOg4YOYJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn4YOY4YOQ4YOcJywgJ+GDl+GDlOGDkScsICfhg5vhg5Dhg6AnLCAn4YOQ4YOe4YOgJywgJ+GDm+GDkOGDmOGDoeGDmCcsICfhg5jhg5Xhg5wnLFxyXG5cdFx0J+GDmOGDleGDmicsICfhg5Dhg5Lhg5UnLCAn4YOh4YOU4YOlJywgJ+GDneGDpeGDoicsICfhg5zhg53hg5QnLCAn4YOT4YOU4YOZJ10sXHJcblx0XHRkYXlOYW1lczogWyfhg5nhg5Xhg5jhg6Dhg5AnLCAn4YOd4YOg4YOo4YOQ4YOR4YOQ4YOX4YOYJywgJ+GDoeGDkOGDm+GDqOGDkOGDkeGDkOGDl+GDmCcsICfhg53hg5fhg67hg6jhg5Dhg5Hhg5Dhg5fhg5gnLCAn4YOu4YOj4YOX4YOo4YOQ4YOR4YOQ4YOX4YOYJywgJ+GDnuGDkOGDoOGDkOGDoeGDmeGDlOGDleGDmCcsICfhg6jhg5Dhg5Hhg5Dhg5fhg5gnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn4YOZ4YOVJywgJ+GDneGDoOGDqCcsICfhg6Hhg5Dhg5snLCAn4YOd4YOX4YOuJywgJ+GDruGDo+GDlycsICfhg57hg5Dhg6AnLCAn4YOo4YOQ4YORJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfhg5nhg5UnLCfhg53hg6AnLCfhg6Hhg5snLCfhg53hg5cnLCAn4YOu4YOoJywgJ+GDnuGDoCcsJ+GDqOGDkSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2thJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2thJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-km.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-km.js index 43fe903d114..2efa0e94948 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-km.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-km.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMta20uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMta20uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBLaG1lciBpbml0aWFsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgU292aWNoZXQgVGVwIChzb3ZpY2hldC50ZXBAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sna20nXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWyfhnoHhn4LigIvhnpjhnoDhnprhnrYnLCfhnoHhn4LigIvhnoDhnrvhnpjhn5Lhnpfhn4gnLCfhnoHhn4LigIvhnpjhnrfhnpPhnrYnLCfhnoHhn4LigIvhnpjhn4Hhnp/hnrYnLCfhnoHhn4LigIvhnqfhnp/hnpfhnrYnLCfhnoHhn4LigIvhnpjhnrfhnpDhnrvhnpPhnrYnLFxuXHRcdCfhnoHhn4LigIvhnoDhnoDhn5LhnoDhnorhnrYnLCfhnoHhn4LigIvhnp/hnrjhnqDhnrYnLCfhnoHhn4LigIvhnoDhnonhn5LhnonhnrYnLCfhnoHhn4LigIvhno/hnrvhnpvhnrYnLCfhnoHhn4LigIvhnpzhnrfhnoXhn5LhnobhnrfhnoDhnrYnLCfhnoHhn4LigIvhnpLhn5LhnpPhnrwnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn4Z6Y4Z6AJywgJ+GegOGeuycsICfhnpjhnrfhnpPhnrYnLCAn4Z6Y4Z+BJywgJ+Gep+GenycsICfhnpjhnrfhnpDhnrsnLFxuXHRcdCfhnoDhnoDhn5LhnoAnLCAn4Z6f4Z64JywgJ+GegOGeieGfkuGeieGeticsICfhno/hnrvhnpvhnrYnLCAn4Z6c4Z634Z6F4Z+S4Z6G4Z63JywgJ+GekuGfkuGek+GevCddLFxuXHRcdGRheU5hbWVzOiBbJ+GekOGfkuGehOGfg+KAi+GeouGetuGekeGet+Gej+GfkuGemScsICfhnpDhn5LhnoThn4PigIvhnoXhnpPhn5LhnpEnLCAn4Z6Q4Z+S4Z6E4Z+D4oCL4Z6i4Z6E4Z+S4Z6C4Z624Z6aJywgJ+GekOGfkuGehOGfg+KAi+GeluGeu+GekicsICfhnpDhn5LhnoThn4PigIvhnpbhn5LhnprhnqDhnp/hn5LhnpThno/hn5Lhno/hnrfhn40nLCAn4Z6Q4Z+S4Z6E4Z+D4oCL4Z6f4Z674Z6A4Z+S4Z6aJywgJ+GekOGfkuGehOGfg+KAi+Gen+GfheGemuGfjSddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn4Z6i4Z62JywgJ+GeheGek+GfkuGekScsICfhnqLhnoThn5LhnoInLCAn4Z6W4Z674Z6SJywgJ+GeluGfkuGemuGeoCcsICfhnp/hnrsnLCAn4Z6f4Z+F4Z6a4Z+NJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn4Z6i4Z62Jywn4Z6FJywn4Z6iJywn4Z6W4Z67Jywn4Z6W4Z+S4Z6aJywn4Z6f4Z67Jywn4Z6fJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sna20nXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ttJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMta20uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMta20uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEtobWVyIGluaXRpYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IFNvdmljaGV0IFRlcCAoc292aWNoZXQudGVwQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydrbSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ+GegeGfguKAi+GemOGegOGemuGeticsJ+GegeGfguKAi+GegOGeu+GemOGfkuGel+GfiCcsJ+GegeGfguKAi+GemOGet+Gek+GeticsJ+GegeGfguKAi+GemOGfgeGen+GeticsJ+GegeGfguKAi+Gep+Gen+Gel+GeticsJ+GegeGfguKAi+GemOGet+GekOGeu+Gek+GeticsXHJcblx0XHQn4Z6B4Z+C4oCL4Z6A4Z6A4Z+S4Z6A4Z6K4Z62Jywn4Z6B4Z+C4oCL4Z6f4Z644Z6g4Z62Jywn4Z6B4Z+C4oCL4Z6A4Z6J4Z+S4Z6J4Z62Jywn4Z6B4Z+C4oCL4Z6P4Z674Z6b4Z62Jywn4Z6B4Z+C4oCL4Z6c4Z634Z6F4Z+S4Z6G4Z634Z6A4Z62Jywn4Z6B4Z+C4oCL4Z6S4Z+S4Z6T4Z68J10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn4Z6Y4Z6AJywgJ+GegOGeuycsICfhnpjhnrfhnpPhnrYnLCAn4Z6Y4Z+BJywgJ+Gep+GenycsICfhnpjhnrfhnpDhnrsnLFxyXG5cdFx0J+GegOGegOGfkuGegCcsICfhnp/hnrgnLCAn4Z6A4Z6J4Z+S4Z6J4Z62JywgJ+Gej+Geu+Gem+GeticsICfhnpzhnrfhnoXhn5LhnobhnrcnLCAn4Z6S4Z+S4Z6T4Z68J10sXHJcblx0XHRkYXlOYW1lczogWyfhnpDhn5LhnoThn4PigIvhnqLhnrbhnpHhnrfhno/hn5LhnpknLCAn4Z6Q4Z+S4Z6E4Z+D4oCL4Z6F4Z6T4Z+S4Z6RJywgJ+GekOGfkuGehOGfg+KAi+GeouGehOGfkuGeguGetuGemicsICfhnpDhn5LhnoThn4PigIvhnpbhnrvhnpInLCAn4Z6Q4Z+S4Z6E4Z+D4oCL4Z6W4Z+S4Z6a4Z6g4Z6f4Z+S4Z6U4Z6P4Z+S4Z6P4Z634Z+NJywgJ+GekOGfkuGehOGfg+KAi+Gen+Geu+GegOGfkuGemicsICfhnpDhn5LhnoThn4PigIvhnp/hn4Xhnprhn40nXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn4Z6i4Z62JywgJ+GeheGek+GfkuGekScsICfhnqLhnoThn5LhnoInLCAn4Z6W4Z674Z6SJywgJ+GeluGfkuGemuGeoCcsICfhnp/hnrsnLCAn4Z6f4Z+F4Z6a4Z+NJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfhnqLhnrYnLCfhnoUnLCfhnqInLCfhnpbhnrsnLCfhnpbhn5LhnponLCfhnp/hnrsnLCfhnp8nXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydrbSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydrbSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ko.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ko.js index dfb2eb9166e..355ff87bbcd 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ko.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ko.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMta28uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMta28uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBLb3JlYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBEYWVLd29uIEthbmcgKG5jcmFzaC5ka0BnbWFpbC5jb20pLCBFZGl0ZWQgYnkgR2VuaWUuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2tvJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnMeyblCcsJzLsm5QnLCcz7JuUJywnNOyblCcsJzXsm5QnLCc27JuUJyxcblx0XHQnN+yblCcsJzjsm5QnLCc57JuUJywnMTDsm5QnLCcxMeyblCcsJzEy7JuUJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJzHsm5QnLCcy7JuUJywnM+yblCcsJzTsm5QnLCc17JuUJywnNuyblCcsXG5cdFx0Jzfsm5QnLCc47JuUJywnOeyblCcsJzEw7JuUJywnMTHsm5QnLCcxMuyblCddLFxuXHRcdGRheU5hbWVzOiBbJ+ydvOyalOydvCcsJ+yblOyalOydvCcsJ+2ZlOyalOydvCcsJ+yImOyalOydvCcsJ+uqqeyalOydvCcsJ+q4iOyalOydvCcsJ+2GoOyalOydvCddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn7J28Jywn7JuUJywn7ZmUJywn7IiYJywn66qpJywn6riIJywn7YagJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn7J28Jywn7JuUJywn7ZmUJywn7IiYJywn66qpJywn6riIJywn7YagJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXktbW0tZGQnLFxuXHRcdGZpcnN0RGF5OiAwLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sna28nXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2tvJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMta28uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMta28uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEtvcmVhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgRGFlS3dvbiBLYW5nIChuY3Jhc2guZGtAZ21haWwuY29tKSwgRWRpdGVkIGJ5IEdlbmllLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sna28nXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWycx7JuUJywnMuyblCcsJzPsm5QnLCc07JuUJywnNeyblCcsJzbsm5QnLFxyXG5cdFx0Jzfsm5QnLCc47JuUJywnOeyblCcsJzEw7JuUJywnMTHsm5QnLCcxMuyblCddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJzHsm5QnLCcy7JuUJywnM+yblCcsJzTsm5QnLCc17JuUJywnNuyblCcsXHJcblx0XHQnN+yblCcsJzjsm5QnLCc57JuUJywnMTDsm5QnLCcxMeyblCcsJzEy7JuUJ10sXHJcblx0XHRkYXlOYW1lczogWyfsnbzsmpTsnbwnLCfsm5TsmpTsnbwnLCftmZTsmpTsnbwnLCfsiJjsmpTsnbwnLCfrqqnsmpTsnbwnLCfquIjsmpTsnbwnLCfthqDsmpTsnbwnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn7J28Jywn7JuUJywn7ZmUJywn7IiYJywn66qpJywn6riIJywn7YagJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfsnbwnLCfsm5QnLCftmZQnLCfsiJgnLCfrqqknLCfquIgnLCfthqAnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICd5eXl5LW1tLWRkJyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydrbyddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydrbyddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-lt.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-lt.js index b27769c1267..7538cff1a51 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-lt.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-lt.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbHQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBMaXRodWFuaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIEFydHVyYXMgUGFsZWljaWthcyA8YXJ0dXJhc0BhdmFsb24ubHQ+LiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydsdCddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ1NhdXNpcycsJ1Zhc2FyaXMnLCdLb3ZhcycsJ0JhbGFuZGlzJywnR2VndcW+xJcnLCdCaXLFvmVsaXMnLFxuXHRcdCdMaWVwYScsJ1J1Z3Bqxat0aXMnLCdSdWdzxJdqaXMnLCdTcGFsaXMnLCdMYXBrcml0aXMnLCdHcnVvZGlzJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ1NhdScsJ1ZhcycsJ0tvdicsJ0JhbCcsJ0dlZycsJ0JpcicsXG5cdFx0J0xpZScsJ1J1Z3AnLCdSdWdzJywnU3BhJywnTGFwJywnR3J1J10sXG5cdFx0ZGF5TmFtZXM6IFsnc2VrbWFkaWVuaXMnLCdwaXJtYWRpZW5pcycsJ2FudHJhZGllbmlzJywndHJlxI1pYWRpZW5pcycsJ2tldHZpcnRhZGllbmlzJywncGVua3RhZGllbmlzJywnxaFlxaF0YWRpZW5pcyddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnc2VrJywncGlyJywnYW50JywndHJlJywna2V0JywncGVuJywnxaFlxaEnXSxcblx0XHRkYXlOYW1lc01pbjogWydTZScsJ1ByJywnQW4nLCdUcicsJ0tlJywnUGUnLCfFoGUnXSxcblx0XHRkYXRlRm9ybWF0OiAneXl5eS1tbS1kZCcsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydsdCddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbHQnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbHQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIExpdGh1YW5pYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBBcnR1cmFzIFBhbGVpY2lrYXMgPGFydHVyYXNAYXZhbG9uLmx0Pi4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2x0J10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnU2F1c2lzJywnVmFzYXJpcycsJ0tvdmFzJywnQmFsYW5kaXMnLCdHZWd1xb7ElycsJ0JpcsW+ZWxpcycsXHJcblx0XHQnTGllcGEnLCdSdWdwasWrdGlzJywnUnVnc8SXamlzJywnU3BhbGlzJywnTGFwa3JpdGlzJywnR3J1b2RpcyddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ1NhdScsJ1ZhcycsJ0tvdicsJ0JhbCcsJ0dlZycsJ0JpcicsXHJcblx0XHQnTGllJywnUnVncCcsJ1J1Z3MnLCdTcGEnLCdMYXAnLCdHcnUnXSxcclxuXHRcdGRheU5hbWVzOiBbJ3Nla21hZGllbmlzJywncGlybWFkaWVuaXMnLCdhbnRyYWRpZW5pcycsJ3RyZcSNaWFkaWVuaXMnLCdrZXR2aXJ0YWRpZW5pcycsJ3Blbmt0YWRpZW5pcycsJ8WhZcWhdGFkaWVuaXMnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnc2VrJywncGlyJywnYW50JywndHJlJywna2V0JywncGVuJywnxaFlxaEnXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ1NlJywnUHInLCdBbicsJ1RyJywnS2UnLCdQZScsJ8WgZSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXktbW0tZGQnLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2x0J10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2x0J107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-lv.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-lv.js index e6ad65ee74d..67e1b4f1334 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-lv.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-lv.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbHYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbHYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBMYXR2aWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIEFydHVyYXMgUGFsZWljaWthcyA8YXJ0dXJhcy5wYWxlaWNpa2FzQG1ldGFzaXRlLm5ldD4uICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2x2J10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudsSBcmlzJywnRmVicnXEgXJpcycsJ01hcnRzJywnQXByxKtsaXMnLCdNYWlqcycsJ0rFq25panMnLFxuXHRcdCdKxatsaWpzJywnQXVndXN0cycsJ1NlcHRlbWJyaXMnLCdPa3RvYnJpcycsJ05vdmVtYnJpcycsJ0RlY2VtYnJpcyddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWknLCdKxatuJyxcblx0XHQnSsWrbCcsJ0F1ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RlYyddLFxuXHRcdGRheU5hbWVzOiBbJ3N2xJN0ZGllbmEnLCdwaXJtZGllbmEnLCdvdHJkaWVuYScsJ3RyZcWhZGllbmEnLCdjZXR1cnRkaWVuYScsJ3BpZWt0ZGllbmEnLCdzZXN0ZGllbmEnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ3N2dCcsJ3BybScsJ290cicsJ3RyZScsJ2N0cicsJ3BrdCcsJ3NzdCddLFxuXHRcdGRheU5hbWVzTWluOiBbJ1N2JywnUHInLCdPdCcsJ1RyJywnQ3QnLCdQaycsJ1NzJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLW1tLXl5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbHYnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2x2J107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbHYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbHYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIExhdHZpYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBBcnR1cmFzIFBhbGVpY2lrYXMgPGFydHVyYXMucGFsZWljaWthc0BtZXRhc2l0ZS5uZXQ+LiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbHYnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW52xIFyaXMnLCdGZWJydcSBcmlzJywnTWFydHMnLCdBcHLEq2xpcycsJ01haWpzJywnSsWrbmlqcycsXHJcblx0XHQnSsWrbGlqcycsJ0F1Z3VzdHMnLCdTZXB0ZW1icmlzJywnT2t0b2JyaXMnLCdOb3ZlbWJyaXMnLCdEZWNlbWJyaXMnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWknLCdKxatuJyxcclxuXHRcdCdKxatsJywnQXVnJywnU2VwJywnT2t0JywnTm92JywnRGVjJ10sXHJcblx0XHRkYXlOYW1lczogWydzdsSTdGRpZW5hJywncGlybWRpZW5hJywnb3RyZGllbmEnLCd0cmXFoWRpZW5hJywnY2V0dXJ0ZGllbmEnLCdwaWVrdGRpZW5hJywnc2VzdGRpZW5hJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ3N2dCcsJ3BybScsJ290cicsJ3RyZScsJ2N0cicsJ3BrdCcsJ3NzdCddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnU3YnLCdQcicsJ090JywnVHInLCdDdCcsJ1BrJywnU3MnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC1tbS15eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydsdiddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydsdiddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-me-ME.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-me-ME.js index 362f4efb522..8ee9c5e755b 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-me-ME.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-me-ME.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbWUtTUUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbWUtTUUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBNb250ZW5lZ3JpbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBCeSBNaWxvxaEgTWlsb8WhZXZpxIcgLSBmbGVrYSBkLm8uby4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWUtTUUnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWphbnNraScsXG5cdFx0ZXBvY2hzOiBbJ3BuZScsICduZSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyJywnRmVicnVhcicsJ01hcnQnLCdBcHJpbCcsJ01haicsJ0p1bicsXG5cdFx0J0p1bCcsJ0F2Z3VzdCcsJ1NlcHRlbWJhcicsJ09rdG9iYXInLCdOb3ZlbWJhcicsJ0RlY2VtYmFyJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYWonLCAnSnVuJyxcblx0XHQnSnVsJywgJ0F2ZycsICdTZXAnLCAnT2t0JywgJ05vdicsICdEZWMnXSxcblx0XHRkYXlOYW1lczogWydOZcSRZWxqYScsICdQb25lxJFlbGphaycsICdVdG9yYWsnLCAnU3JpamVkYScsICfEjGV0dnJ0YWsnLCAnUGV0YWsnLCAnU3Vib3RhJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydOZcSRJywgJ1BvbicsICdVdG8nLCAnU3JpJywgJ8SMZXQnLCAnUGV0JywgJ1N1YiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ05lJywnUG8nLCdVdCcsJ1NyJywnxIxlJywnUGUnLCdTdSddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21lLU1FJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtZS1NRSddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbWUtTUUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbWUtTUUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIE1vbnRlbmVncmluIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgQnkgTWlsb8WhIE1pbG/FoWV2acSHIC0gZmxla2EgZC5vLm8uICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtZS1NRSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlqYW5za2knLFxyXG5cdFx0ZXBvY2hzOiBbJ3BuZScsICduZSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW51YXInLCdGZWJydWFyJywnTWFydCcsJ0FwcmlsJywnTWFqJywnSnVuJyxcclxuXHRcdCdKdWwnLCdBdmd1c3QnLCdTZXB0ZW1iYXInLCdPa3RvYmFyJywnTm92ZW1iYXInLCdEZWNlbWJhciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYWonLCAnSnVuJyxcclxuXHRcdCdKdWwnLCAnQXZnJywgJ1NlcCcsICdPa3QnLCAnTm92JywgJ0RlYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnTmXEkWVsamEnLCAnUG9uZcSRZWxqYWsnLCAnVXRvcmFrJywgJ1NyaWplZGEnLCAnxIxldHZydGFrJywgJ1BldGFrJywgJ1N1Ym90YSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydOZcSRJywgJ1BvbicsICdVdG8nLCAnU3JpJywgJ8SMZXQnLCAnUGV0JywgJ1N1YiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnTmUnLCdQbycsJ1V0JywnU3InLCfEjGUnLCdQZScsJ1N1J10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWUtTUUnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWUtTUUnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-me.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-me.js index 383f3c34f1c..a2b8a34b5a5 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-me.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-me.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBNb250ZW5lZ3JpbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBCeSBNaWxvxaEgTWlsb8WhZXZpxIcgLSBmbGVrYSBkLm8uby4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWUnXSA9IHtcblx0XHRuYW1lOiAn0JPRgNC10LPQvtGA0LjRmNCw0L3RgdC60LgnLFxuXHRcdGVwb2NoczogWyfQv9C90LUnLCAn0L3QtSddLFxuXHRcdG1vbnRoTmFtZXM6IFsn0IjQsNC90YPQsNGAJywn0KTQtdCx0YDRg9Cw0YAnLCfQnNCw0YDRgicsJ9CQ0L/RgNC40LsnLCfQnNCw0ZgnLCfQiNGD0L0nLFxuXHRcdCfQiNGD0LsnLCfQkNCy0LPRg9GB0YInLCfQodC10L/RgtC10LzQsdCw0YAnLCfQntC60YLQvtCx0LDRgCcsJ9Cd0L7QstC10LzQsdCw0YAnLCfQlNC10YbQtdC80LHQsNGAJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ9CI0LDQvScsICfQpNC10LEnLCAn0JzQsNGAJywgJ9CQ0L/RgCcsICfQnNCw0ZgnLCAn0IjRg9C9Jyxcblx0XHQn0IjRg9C7JywgJ9CQ0LLQsycsICfQodC10L8nLCAn0J7QutGCJywgJ9Cd0L7QsicsICfQlNC10YYnXSxcblx0XHRkYXlOYW1lczogWyfQndC10ZLQtdGZ0LAnLCAn0J/QvtC90LXRktC10ZnQsNC6JywgJ9Cj0YLQvtGA0LDQuicsICfQodGA0LjRmNC10LTQsCcsICfQp9C10YLQstGA0YLQsNC6JywgJ9Cf0LXRgtCw0LonLCAn0KHRg9Cx0L7RgtCwJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfQndC10ZInLCAn0J/QvtC9JywgJ9Cj0YLQvicsICfQodGA0LgnLCAn0KfQtdGCJywgJ9Cf0LXRgicsICfQodGD0LEnXSxcblx0XHRkYXlOYW1lc01pbjogWyfQndC1Jywn0J/QvicsJ9Cj0YInLCfQodGAJywn0KfQtScsJ9Cf0LUnLCfQodGDJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWUnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21lJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIE1vbnRlbmVncmluIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgQnkgTWlsb8WhIE1pbG/FoWV2acSHIC0gZmxla2EgZC5vLm8uICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtZSddID0ge1xyXG5cdFx0bmFtZTogJ9CT0YDQtdCz0L7RgNC40ZjQsNC90YHQutC4JyxcclxuXHRcdGVwb2NoczogWyfQv9C90LUnLCAn0L3QtSddLFxyXG5cdFx0bW9udGhOYW1lczogWyfQiNCw0L3Rg9Cw0YAnLCfQpNC10LHRgNGD0LDRgCcsJ9Cc0LDRgNGCJywn0JDQv9GA0LjQuycsJ9Cc0LDRmCcsJ9CI0YPQvScsXHJcblx0XHQn0IjRg9C7Jywn0JDQstCz0YPRgdGCJywn0KHQtdC/0YLQtdC80LHQsNGAJywn0J7QutGC0L7QsdCw0YAnLCfQndC+0LLQtdC80LHQsNGAJywn0JTQtdGG0LXQvNCx0LDRgCddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ9CI0LDQvScsICfQpNC10LEnLCAn0JzQsNGAJywgJ9CQ0L/RgCcsICfQnNCw0ZgnLCAn0IjRg9C9JyxcclxuXHRcdCfQiNGD0LsnLCAn0JDQstCzJywgJ9Ch0LXQvycsICfQntC60YInLCAn0J3QvtCyJywgJ9CU0LXRhiddLFxyXG5cdFx0ZGF5TmFtZXM6IFsn0J3QtdGS0LXRmdCwJywgJ9Cf0L7QvdC10ZLQtdGZ0LDQuicsICfQo9GC0L7RgNCw0LonLCAn0KHRgNC40ZjQtdC00LAnLCAn0KfQtdGC0LLRgNGC0LDQuicsICfQn9C10YLQsNC6JywgJ9Ch0YPQsdC+0YLQsCddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfQndC10ZInLCAn0J/QvtC9JywgJ9Cj0YLQvicsICfQodGA0LgnLCAn0KfQtdGCJywgJ9Cf0LXRgicsICfQodGD0LEnXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ9Cd0LUnLCfQn9C+Jywn0KPRgicsJ9Ch0YAnLCfQp9C1Jywn0J/QtScsJ9Ch0YMnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtZSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtZSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-mk.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-mk.js index 15164ceb95f..925c522c9f4 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-mk.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-mk.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbWsuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbWsuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICDQnNCw0LrQtdC00L7QvdGB0LrQuCBNSyBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBIYWphbiBTZWxtYW5pIChoYWphbiBbYXRdIGxpdmUgW2RvdF0gY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWsnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWyfQiNCw0L3Rg9Cw0YDQuCcsJ9Ck0LXQstGA0YPQsNGA0LgnLCfQnNCw0YDRgicsJ9CQ0L/RgNC40LsnLCfQnNCw0ZgnLCfQiNGD0L3QuCcsXG5cdFx0J9CI0YPQu9C4Jywn0JDQstCz0YPRgdGCJywn0KHQtdC/0YLQtdC80LLRgNC4Jywn0J7QutGC0L7QvNCy0YDQuCcsJ9Cd0L7QtdC80LLRgNC4Jywn0JTQtdC60LXQvNCy0YDQuCddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfQiNCw0L0nLCAn0KTQtdCyJywgJ9Cc0LDRgCcsICfQkNC/0YAnLCAn0JzQsNGYJywgJ9CI0YPQvScsXG5cdFx0J9CI0YPQuycsICfQkNCy0LMnLCAn0KHQtdC/JywgJ9Ce0LrRgicsICfQndC+0LInLCAn0JTQtdC6J10sXG5cdFx0ZGF5TmFtZXM6IFsn0J3QtdC00LXQu9CwJywgJ9Cf0L7QvdC10LTQtdC70L3QuNC6JywgJ9CS0YLQvtGA0L3QuNC6JywgJ9Ch0YDQtdC00LAnLCAn0KfQtdGC0LLRgNGC0L7QuicsICfQn9C10YLQvtC6JywgJ9Ch0LDQsdC+0YLQsCddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn0J3QtdC0JywgJ9Cf0L7QvScsICfQktGC0L4nLCAn0KHRgNC1JywgJ9Cn0LXRgicsICfQn9C10YInLCAn0KHQsNCxJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn0J3QtScsJ9Cf0L4nLCfQktGCJywn0KHRgCcsJ9Cn0LUnLCfQn9C1Jywn0KHQsCddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21rJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtayddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbWsuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbWsuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgINCc0LDQutC10LTQvtC90YHQutC4IE1LIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgSGFqYW4gU2VsbWFuaSAoaGFqYW4gW2F0XSBsaXZlIFtkb3RdIGNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtayddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ9CI0LDQvdGD0LDRgNC4Jywn0KTQtdCy0YDRg9Cw0YDQuCcsJ9Cc0LDRgNGCJywn0JDQv9GA0LjQuycsJ9Cc0LDRmCcsJ9CI0YPQvdC4JyxcclxuXHRcdCfQiNGD0LvQuCcsJ9CQ0LLQs9GD0YHRgicsJ9Ch0LXQv9GC0LXQvNCy0YDQuCcsJ9Ce0LrRgtC+0LzQstGA0LgnLCfQndC+0LXQvNCy0YDQuCcsJ9CU0LXQutC10LzQstGA0LgnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfQiNCw0L0nLCAn0KTQtdCyJywgJ9Cc0LDRgCcsICfQkNC/0YAnLCAn0JzQsNGYJywgJ9CI0YPQvScsXHJcblx0XHQn0IjRg9C7JywgJ9CQ0LLQsycsICfQodC10L8nLCAn0J7QutGCJywgJ9Cd0L7QsicsICfQlNC10LonXSxcclxuXHRcdGRheU5hbWVzOiBbJ9Cd0LXQtNC10LvQsCcsICfQn9C+0L3QtdC00LXQu9C90LjQuicsICfQktGC0L7RgNC90LjQuicsICfQodGA0LXQtNCwJywgJ9Cn0LXRgtCy0YDRgtC+0LonLCAn0J/QtdGC0L7QuicsICfQodCw0LHQvtGC0LAnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn0J3QtdC0JywgJ9Cf0L7QvScsICfQktGC0L4nLCAn0KHRgNC1JywgJ9Cn0LXRgicsICfQn9C10YInLCAn0KHQsNCxJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfQndC1Jywn0J/QvicsJ9CS0YInLCfQodGAJywn0KfQtScsJ9Cf0LUnLCfQodCwJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWsnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWsnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ml.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ml.js index 1949a90a26d..4645adaea15 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ml.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ml.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbWwuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBNYWxheWFsYW0gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgU2FqaSBOZWRpeWFuY2hhdGggKHNhamk4OUBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtbCddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ+C0nOC0qOC1geC0teC0sOC0vycsJ+C0q+C1huC0rOC1jeC0sOC1geC0teC0sOC0vycsJ+C0ruC0vuC0sOC1jeKAjeC0muC1jeC0muC1jScsJ+C0j+C0quC1jeC0sOC0v+C0suC1jeKAjScsJ+C0ruC1h+C0r+C1jScsJ+C0nOC1guC0o+C1jeKAjScsXG5cdFx0J+C0nOC1guC0suC1iCcsJ+C0huC0l+C0uOC1jeC0seC1jeC0seC1jScsJ+C0uOC1huC0quC1jeC0seC1jeC0seC0guC0rOC0sOC1jeKAjScsJ+C0kuC0leC1jeC0n+C1i+C0rOC0sOC1jeKAjScsJ+C0qOC0teC0guC0rOC0sOC1jeKAjScsJ+C0oeC0v+C0uOC0guC0rOC0sOC1jeKAjSddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfgtJzgtKjgtYEnLCAn4LSr4LWG4LSs4LWNJywgJ+C0ruC0vuC0sOC1jeKAjScsICfgtI/gtKrgtY3gtLDgtL8nLCAn4LSu4LWH4LSv4LWNJywgJ+C0nOC1guC0o+C1jeKAjScsXG5cdFx0J+C0nOC1guC0suC0vicsICfgtIbgtJcnLCAn4LS44LWG4LSq4LWNJywgJ+C0kuC0leC1jeC0n+C1iycsICfgtKjgtLXgtIInLCAn4LSh4LS/4LS4J10sXG5cdFx0ZGF5TmFtZXM6IFsn4LSe4LS+4LSv4LSw4LWN4oCNJywgJ+C0pOC0v+C0meC1jeC0leC0s+C1jeKAjScsICfgtJrgtYrgtLXgtY3gtLUnLCAn4LSs4LWB4LSn4LSo4LWN4oCNJywgJ+C0teC1jeC0r+C0vuC0tOC0gicsICfgtLXgtYbgtLPgtY3gtLPgtL8nLCAn4LS24LSo4LS/J10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfgtJ7gtL7gtK8nLCAn4LSk4LS/4LSZ4LWN4LSVJywgJ+C0muC1iuC0teC1jeC0tScsICfgtKzgtYHgtKcnLCAn4LS14LWN4LSv4LS+4LS04LSCJywgJ+C0teC1huC0s+C1jeC0s+C0vycsICfgtLbgtKjgtL8nXSxcblx0XHRkYXlOYW1lc01pbjogWyfgtJ7gtL4nLCfgtKTgtL8nLCfgtJrgtYonLCfgtKzgtYEnLCfgtLXgtY3gtK/gtL4nLCfgtLXgtYYnLCfgtLYnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtbCddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWwnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbWwuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIE1hbGF5YWxhbSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFNhamkgTmVkaXlhbmNoYXRoIChzYWppODlAZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21sJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn4LSc4LSo4LWB4LS14LSw4LS/Jywn4LSr4LWG4LSs4LWN4LSw4LWB4LS14LSw4LS/Jywn4LSu4LS+4LSw4LWN4oCN4LSa4LWN4LSa4LWNJywn4LSP4LSq4LWN4LSw4LS/4LSy4LWN4oCNJywn4LSu4LWH4LSv4LWNJywn4LSc4LWC4LSj4LWN4oCNJyxcclxuXHRcdCfgtJzgtYLgtLLgtYgnLCfgtIbgtJfgtLjgtY3gtLHgtY3gtLHgtY0nLCfgtLjgtYbgtKrgtY3gtLHgtY3gtLHgtILgtKzgtLDgtY3igI0nLCfgtJLgtJXgtY3gtJ/gtYvgtKzgtLDgtY3igI0nLCfgtKjgtLXgtILgtKzgtLDgtY3igI0nLCfgtKHgtL/gtLjgtILgtKzgtLDgtY3igI0nXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfgtJzgtKjgtYEnLCAn4LSr4LWG4LSs4LWNJywgJ+C0ruC0vuC0sOC1jeKAjScsICfgtI/gtKrgtY3gtLDgtL8nLCAn4LSu4LWH4LSv4LWNJywgJ+C0nOC1guC0o+C1jeKAjScsXHJcblx0XHQn4LSc4LWC4LSy4LS+JywgJ+C0huC0lycsICfgtLjgtYbgtKrgtY0nLCAn4LSS4LSV4LWN4LSf4LWLJywgJ+C0qOC0teC0gicsICfgtKHgtL/gtLgnXSxcclxuXHRcdGRheU5hbWVzOiBbJ+C0nuC0vuC0r+C0sOC1jeKAjScsICfgtKTgtL/gtJngtY3gtJXgtLPgtY3igI0nLCAn4LSa4LWK4LS14LWN4LS1JywgJ+C0rOC1geC0p+C0qOC1jeKAjScsICfgtLXgtY3gtK/gtL7gtLTgtIInLCAn4LS14LWG4LSz4LWN4LSz4LS/JywgJ+C0tuC0qOC0vyddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfgtJ7gtL7gtK8nLCAn4LSk4LS/4LSZ4LWN4LSVJywgJ+C0muC1iuC0teC1jeC0tScsICfgtKzgtYHgtKcnLCAn4LS14LWN4LSv4LS+4LS04LSCJywgJ+C0teC1huC0s+C1jeC0s+C0vycsICfgtLbgtKjgtL8nXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ+C0nuC0vicsJ+C0pOC0vycsJ+C0muC1iicsJ+C0rOC1gScsJ+C0teC1jeC0r+C0vicsJ+C0teC1hicsJ+C0tiddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21sJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21sJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ms.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ms.js index ff11e12722d..f1bc7590181 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ms.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ms.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBNYWxheXNpYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBNb2hkIE5hd2F3aSBNb2hhbWFkIEphbWlsaSAobmF3YXdpQHJvbmdnZW5nLm5ldCkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21zJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyaScsJ0ZlYnJ1YXJpJywnTWFjJywnQXByaWwnLCdNZWknLCdKdW4nLFxuXHRcdCdKdWxhaScsJ09nb3MnLCdTZXB0ZW1iZXInLCdPa3RvYmVyJywnTm92ZW1iZXInLCdEaXNlbWJlciddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYWMnLCdBcHInLCdNZWknLCdKdW4nLFxuXHRcdCdKdWwnLCdPZ28nLCdTZXAnLCdPa3QnLCdOb3YnLCdEaXMnXSxcblx0XHRkYXlOYW1lczogWydBaGFkJywnSXNuaW4nLCdTZWxhc2EnLCdSYWJ1JywnS2hhbWlzJywnSnVtYWF0JywnU2FidHUnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0FoYScsJ0lzbicsJ1NlbCcsJ1JhYicsJ0toYScsJ0p1bScsJ1NhYiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ0FoJywnSXMnLCdTZScsJ1JhJywnS2gnLCdKdScsJ1NhJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAwLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbXMnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21zJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIE1hbGF5c2lhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTW9oZCBOYXdhd2kgTW9oYW1hZCBKYW1pbGkgKG5hd2F3aUByb25nZ2VuZy5uZXQpLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbXMnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW51YXJpJywnRmVicnVhcmknLCdNYWMnLCdBcHJpbCcsJ01laScsJ0p1bicsXHJcblx0XHQnSnVsYWknLCdPZ29zJywnU2VwdGVtYmVyJywnT2t0b2JlcicsJ05vdmVtYmVyJywnRGlzZW1iZXInXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYWMnLCdBcHInLCdNZWknLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ09nbycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RpcyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnQWhhZCcsJ0lzbmluJywnU2VsYXNhJywnUmFidScsJ0toYW1pcycsJ0p1bWFhdCcsJ1NhYnR1J10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0FoYScsJ0lzbicsJ1NlbCcsJ1JhYicsJ0toYScsJ0p1bScsJ1NhYiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnQWgnLCdJcycsJ1NlJywnUmEnLCdLaCcsJ0p1JywnU2EnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtcyddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtcyddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-mt.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-mt.js index 1b377990951..0db8f33bfec 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-mt.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-mt.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBNYWx0ZXNlIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgQ2hyaXRpYW4gU2NpYmVycmFzICh1dWY2NDI5QGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ210J10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFubmFyJywnRnJhcicsJ01hcnp1JywnQXByaWwnLCdNZWpqdScsJ8SgdW5qdScsXG5cdFx0J0x1bGp1JywnQXdpc3N1JywnU2V0dGVtYnJ1JywnT3R0dWJydScsJ05vdmVtYnJ1JywnRGnEi2VtYnJ1J10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGcmEnLCAnTWFyJywgJ0FwcicsICdNZWonLCAnxKB1bicsXG5cdFx0J0x1bCcsICdBd2knLCAnU2V0JywgJ090dCcsICdOb3YnLCAnRGnEiyddLFxuXHRcdGRheU5hbWVzOiBbJ0lsLcSmYWRkJywgJ0l0LVRuZWpuJywgJ0l0LVRsaWV0YScsICdMLUVyYmfEp2EnLCAnSWwtxKZhbWlzJywgJ0lsLcSgaW1nxKdhJywgJ0lzLVNpYnQnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ8SmYWQnLCAnVG5lJywgJ1RsaScsICdFcmInLCAnxKZhbScsICfEoGltJywgJ1NpYiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ8SmJywnVCcsJ1QnLCdFJywnxKYnLCfEoCcsJ1MnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtdCddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbXQnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIE1hbHRlc2UgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IENocml0aWFuIFNjaWJlcnJhcyAodXVmNjQyOUBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbXQnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW5uYXInLCdGcmFyJywnTWFyenUnLCdBcHJpbCcsJ01lamp1JywnxKB1bmp1JyxcclxuXHRcdCdMdWxqdScsJ0F3aXNzdScsJ1NldHRlbWJydScsJ090dHVicnUnLCdOb3ZlbWJydScsJ0RpxItlbWJydSddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGcmEnLCAnTWFyJywgJ0FwcicsICdNZWonLCAnxKB1bicsXHJcblx0XHQnTHVsJywgJ0F3aScsICdTZXQnLCAnT3R0JywgJ05vdicsICdEacSLJ10sXHJcblx0XHRkYXlOYW1lczogWydJbC3EpmFkZCcsICdJdC1UbmVqbicsICdJdC1UbGlldGEnLCAnTC1FcmJnxKdhJywgJ0lsLcSmYW1pcycsICdJbC3EoGltZ8SnYScsICdJcy1TaWJ0J10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ8SmYWQnLCAnVG5lJywgJ1RsaScsICdFcmInLCAnxKZhbScsICfEoGltJywgJ1NpYiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnxKYnLCdUJywnVCcsJ0UnLCfEpicsJ8SgJywnUyddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ210J10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ210J107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-nl-BE.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-nl-BE.js index 16c4949e438..267ae4923a9 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-nl-BE.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-nl-BE.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbmwtQkUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbmwtQkUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBEdXRjaC9CZWxnaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTWF0aGlhcyBCeW5lbnMgPGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlLz4uICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ25sLUJFJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnamFudWFyaScsICdmZWJydWFyaScsICdtYWFydCcsICdhcHJpbCcsICdtZWknLCAnanVuaScsXG5cdFx0J2p1bGknLCAnYXVndXN0dXMnLCAnc2VwdGVtYmVyJywgJ29rdG9iZXInLCAnbm92ZW1iZXInLCAnZGVjZW1iZXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnamFuJywgJ2ZlYicsICdtYWEnLCAnYXByJywgJ21laScsICdqdW4nLFxuXHRcdCdqdWwnLCAnYXVnJywgJ3NlcCcsICdva3QnLCAnbm92JywgJ2RlYyddLFxuXHRcdGRheU5hbWVzOiBbJ3pvbmRhZycsICdtYWFuZGFnJywgJ2RpbnNkYWcnLCAnd29lbnNkYWcnLCAnZG9uZGVyZGFnJywgJ3ZyaWpkYWcnLCAnemF0ZXJkYWcnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ3pvbicsICdtYWEnLCAnZGluJywgJ3dvZScsICdkb24nLCAndnJpJywgJ3phdCddLFxuXHRcdGRheU5hbWVzTWluOiBbJ3pvJywgJ21hJywgJ2RpJywgJ3dvJywgJ2RvJywgJ3ZyJywgJ3phJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbmwtQkUnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ25sLUJFJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbmwtQkUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbmwtQkUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIER1dGNoL0JlbGdpYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IE1hdGhpYXMgQnluZW5zIDxodHRwOi8vbWF0aGlhc2J5bmVucy5iZS8+LiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbmwtQkUnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydqYW51YXJpJywgJ2ZlYnJ1YXJpJywgJ21hYXJ0JywgJ2FwcmlsJywgJ21laScsICdqdW5pJyxcclxuXHRcdCdqdWxpJywgJ2F1Z3VzdHVzJywgJ3NlcHRlbWJlcicsICdva3RvYmVyJywgJ25vdmVtYmVyJywgJ2RlY2VtYmVyJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnamFuJywgJ2ZlYicsICdtYWEnLCAnYXByJywgJ21laScsICdqdW4nLFxyXG5cdFx0J2p1bCcsICdhdWcnLCAnc2VwJywgJ29rdCcsICdub3YnLCAnZGVjJ10sXHJcblx0XHRkYXlOYW1lczogWyd6b25kYWcnLCAnbWFhbmRhZycsICdkaW5zZGFnJywgJ3dvZW5zZGFnJywgJ2RvbmRlcmRhZycsICd2cmlqZGFnJywgJ3phdGVyZGFnJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ3pvbicsICdtYWEnLCAnZGluJywgJ3dvZScsICdkb24nLCAndnJpJywgJ3phdCddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnem8nLCAnbWEnLCAnZGknLCAnd28nLCAnZG8nLCAndnInLCAnemEnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydubC1CRSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydubC1CRSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-nl.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-nl.js index a9c8190b652..618bb2b053e 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-nl.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-nl.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbmwuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbmwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBEdXRjaCBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IE1hdGhpYXMgQnluZW5zIDxodHRwOi8vbWF0aGlhc2J5bmVucy5iZS8+LiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydubCddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ2phbnVhcmknLCAnZmVicnVhcmknLCAnbWFhcnQnLCAnYXByaWwnLCAnbWVpJywgJ2p1bmknLFxuXHRcdCdqdWxpJywgJ2F1Z3VzdHVzJywgJ3NlcHRlbWJlcicsICdva3RvYmVyJywgJ25vdmVtYmVyJywgJ2RlY2VtYmVyJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ2phbicsICdmZWInLCAnbWFhJywgJ2FwcicsICdtZWknLCAnanVuJyxcblx0XHQnanVsJywgJ2F1ZycsICdzZXAnLCAnb2t0JywgJ25vdicsICdkZWMnXSxcblx0XHRkYXlOYW1lczogWyd6b25kYWcnLCAnbWFhbmRhZycsICdkaW5zZGFnJywgJ3dvZW5zZGFnJywgJ2RvbmRlcmRhZycsICd2cmlqZGFnJywgJ3phdGVyZGFnJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyd6b24nLCAnbWFhJywgJ2RpbicsICd3b2UnLCAnZG9uJywgJ3ZyaScsICd6YXQnXSxcblx0XHRkYXlOYW1lc01pbjogWyd6bycsICdtYScsICdkaScsICd3bycsICdkbycsICd2cicsICd6YSddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC1tbS15eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ25sJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydubCddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbmwuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbmwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIER1dGNoIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBNYXRoaWFzIEJ5bmVucyA8aHR0cDovL21hdGhpYXNieW5lbnMuYmUvPi4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ25sJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnamFudWFyaScsICdmZWJydWFyaScsICdtYWFydCcsICdhcHJpbCcsICdtZWknLCAnanVuaScsXHJcblx0XHQnanVsaScsICdhdWd1c3R1cycsICdzZXB0ZW1iZXInLCAnb2t0b2JlcicsICdub3ZlbWJlcicsICdkZWNlbWJlciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ2phbicsICdmZWInLCAnbWFhJywgJ2FwcicsICdtZWknLCAnanVuJyxcclxuXHRcdCdqdWwnLCAnYXVnJywgJ3NlcCcsICdva3QnLCAnbm92JywgJ2RlYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnem9uZGFnJywgJ21hYW5kYWcnLCAnZGluc2RhZycsICd3b2Vuc2RhZycsICdkb25kZXJkYWcnLCAndnJpamRhZycsICd6YXRlcmRhZyddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyd6b24nLCAnbWFhJywgJ2RpbicsICd3b2UnLCAnZG9uJywgJ3ZyaScsICd6YXQnXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ3pvJywgJ21hJywgJ2RpJywgJ3dvJywgJ2RvJywgJ3ZyJywgJ3phJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQtbW0teXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbmwnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbmwnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-no.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-no.js index 2040830d431..dd5a9f781d6 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-no.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-no.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbm8uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbm8uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBOb3J3ZWdpYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBOYWltZGpvbiBUYWtoaXJvdiAobmFpbWRqb25AZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbm8nXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydKYW51YXInLCdGZWJydWFyJywnTWFycycsJ0FwcmlsJywnTWFpJywnSnVuaScsXG5cdFx0J0p1bGknLCdBdWd1c3QnLCdTZXB0ZW1iZXInLCdPa3RvYmVyJywnTm92ZW1iZXInLCdEZXNlbWJlciddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWknLCdKdW4nLFxuXHRcdCdKdWwnLCdBdWcnLCdTZXAnLCdPa3QnLCdOb3YnLCdEZXMnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ1PDuG4nLCdNYW4nLCdUaXInLCdPbnMnLCdUb3InLCdGcmUnLCdMw7hyJ10sXG5cdFx0ZGF5TmFtZXM6IFsnU8O4bmRhZycsJ01hbmRhZycsJ1RpcnNkYWcnLCdPbnNkYWcnLCdUb3JzZGFnJywnRnJlZGFnJywnTMO4cmRhZyddLFxuXHRcdGRheU5hbWVzTWluOiBbJ1PDuCcsJ01hJywnVGknLCdPbicsJ1RvJywnRnInLCdMw7gnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydubyddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbm8nXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtbm8uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtbm8uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIE5vcndlZ2lhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTmFpbWRqb24gVGFraGlyb3YgKG5haW1kam9uQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydubyddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcicsJ0ZlYnJ1YXInLCdNYXJzJywnQXByaWwnLCdNYWknLCdKdW5pJyxcclxuXHRcdCdKdWxpJywnQXVndXN0JywnU2VwdGVtYmVyJywnT2t0b2JlcicsJ05vdmVtYmVyJywnRGVzZW1iZXInXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWknLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ0F1ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RlcyddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydTw7huJywnTWFuJywnVGlyJywnT25zJywnVG9yJywnRnJlJywnTMO4ciddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnU8O4bmRhZycsJ01hbmRhZycsJ1RpcnNkYWcnLCdPbnNkYWcnLCdUb3JzZGFnJywnRnJlZGFnJywnTMO4cmRhZyddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnU8O4JywnTWEnLCdUaScsJ09uJywnVG8nLCdGcicsJ0zDuCddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ25vJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ25vJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-pl.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-pl.js index 11556ec1c63..39924f3032f 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-pl.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-pl.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtcGwuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtcGwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBQb2xpc2ggbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBKYWNlayBXeXNvY2tpIChqYWNlay53eXNvY2tpQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3BsJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnU3R5Y3plxYQnLCdMdXR5JywnTWFyemVjJywnS3dpZWNpZcWEJywnTWFqJywnQ3plcndpZWMnLFxuXHRcdCdMaXBpZWMnLCdTaWVycGllxYQnLCdXcnplc2llxYQnLCdQYcW6ZHppZXJuaWsnLCdMaXN0b3BhZCcsJ0dydWR6aWXFhCddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydTdHknLCdMdScsJ01hcicsJ0t3JywnTWFqJywnQ3plJyxcblx0XHQnTGlwJywnU2llJywnV3J6JywnUGEnLCdMaXMnLCdHcnUnXSxcblx0XHRkYXlOYW1lczogWydOaWVkemllbGEnLCdQb25pZWR6aWFsZWsnLCdXdG9yZWsnLCfFmnJvZGEnLCdDendhcnRlaycsJ1BpxIV0ZWsnLCdTb2JvdGEnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ05pZScsJ1BuJywnV3QnLCfFmnInLCdDencnLCdQdCcsJ1NvJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnTicsJ1BuJywnV3QnLCfFmnInLCdDeicsJ1B0JywnU28nXSxcblx0XHRkYXRlRm9ybWF0OiAneXl5eS1tbS1kZCcsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydwbCddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncGwnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtcGwuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtcGwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFBvbGlzaCBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgSmFjZWsgV3lzb2NraSAoamFjZWsud3lzb2NraUBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncGwnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydTdHljemXFhCcsJ0x1dHknLCdNYXJ6ZWMnLCdLd2llY2llxYQnLCdNYWonLCdDemVyd2llYycsXHJcblx0XHQnTGlwaWVjJywnU2llcnBpZcWEJywnV3J6ZXNpZcWEJywnUGHFumR6aWVybmlrJywnTGlzdG9wYWQnLCdHcnVkemllxYQnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydTdHknLCdMdScsJ01hcicsJ0t3JywnTWFqJywnQ3plJyxcclxuXHRcdCdMaXAnLCdTaWUnLCdXcnonLCdQYScsJ0xpcycsJ0dydSddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnTmllZHppZWxhJywnUG9uaWVkemlhbGVrJywnV3RvcmVrJywnxZpyb2RhJywnQ3p3YXJ0ZWsnLCdQacSFdGVrJywnU29ib3RhJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ05pZScsJ1BuJywnV3QnLCfFmnInLCdDencnLCdQdCcsJ1NvJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydOJywnUG4nLCdXdCcsJ8WacicsJ0N6JywnUHQnLCdTbyddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXktbW0tZGQnLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3BsJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3BsJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-pt-BR.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-pt-BR.js index cb9aa24ac8a..f037448f736 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-pt-BR.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-pt-BR.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtcHQtQlIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtcHQtQlIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBCcmF6aWxpYW4gUG9ydHVndWVzZSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IExlb25pbGRvIENvc3RhIFNpbHZhIChsZW9jc2lsdmFAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncHQtQlInXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydKYW5laXJvJywnRmV2ZXJlaXJvJywnTWFyw6dvJywnQWJyaWwnLCdNYWlvJywnSnVuaG8nLFxuXHRcdCdKdWxobycsJ0Fnb3N0bycsJ1NldGVtYnJvJywnT3V0dWJybycsJ05vdmVtYnJvJywnRGV6ZW1icm8nXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmV2JywnTWFyJywnQWJyJywnTWFpJywnSnVuJyxcblx0XHQnSnVsJywnQWdvJywnU2V0JywnT3V0JywnTm92JywnRGV6J10sXG5cdFx0ZGF5TmFtZXM6IFsnRG9taW5nbycsJ1NlZ3VuZGEtZmVpcmEnLCdUZXLDp2EtZmVpcmEnLCdRdWFydGEtZmVpcmEnLCdRdWludGEtZmVpcmEnLCdTZXh0YS1mZWlyYScsJ1PDoWJhZG8nXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0RvbScsJ1NlZycsJ1RlcicsJ1F1YScsJ1F1aScsJ1NleCcsJ1PDoWInXSxcblx0XHRkYXlOYW1lc01pbjogWydEb20nLCdTZWcnLCdUZXInLCdRdWEnLCdRdWknLCdTZXgnLCdTw6FiJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAwLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncHQtQlInXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3B0LUJSJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtcHQtQlIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtcHQtQlIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEJyYXppbGlhbiBQb3J0dWd1ZXNlIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBMZW9uaWxkbyBDb3N0YSBTaWx2YSAobGVvY3NpbHZhQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydwdC1CUiddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbmVpcm8nLCdGZXZlcmVpcm8nLCdNYXLDp28nLCdBYnJpbCcsJ01haW8nLCdKdW5obycsXHJcblx0XHQnSnVsaG8nLCdBZ29zdG8nLCdTZXRlbWJybycsJ091dHVicm8nLCdOb3ZlbWJybycsJ0RlemVtYnJvJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmV2JywnTWFyJywnQWJyJywnTWFpJywnSnVuJyxcclxuXHRcdCdKdWwnLCdBZ28nLCdTZXQnLCdPdXQnLCdOb3YnLCdEZXonXSxcclxuXHRcdGRheU5hbWVzOiBbJ0RvbWluZ28nLCdTZWd1bmRhLWZlaXJhJywnVGVyw6dhLWZlaXJhJywnUXVhcnRhLWZlaXJhJywnUXVpbnRhLWZlaXJhJywnU2V4dGEtZmVpcmEnLCdTw6FiYWRvJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0RvbScsJ1NlZycsJ1RlcicsJ1F1YScsJ1F1aScsJ1NleCcsJ1PDoWInXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ0RvbScsJ1NlZycsJ1RlcicsJ1F1YScsJ1F1aScsJ1NleCcsJ1PDoWInXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydwdC1CUiddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydwdC1CUiddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-rm.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-rm.js index afe06574a07..4d9e6051fb0 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-rm.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-rm.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtcm0uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtcm0uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBSb21hbnNoIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFl2b25uZSBHaWVuYWwgKHl2b25uZS5naWVuYWxAZWR1Y2EuY2gpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydybSddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ1NjaGFuZXInLCdGYXZyZXInLCdNYXJzJywnQXZyaWdsJywnTWF0ZycsJ1plcmNsYWR1cicsXG5cdFx0J0ZhbmFkdXInLCdBdnVzdCcsJ1NldHRlbWJlcicsJ09jdG9iZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ1NjaGEnLCdGZXYnLCdNYXInLCdBdnInLCdNYXRnJywnWmVyJyxcblx0XHQnRmFuJywnQXZ1JywnU2V0dCcsJ09jdCcsJ05vdicsJ0RlYyddLFxuXHRcdGRheU5hbWVzOiBbJ0R1bWVuZ2lhJywnR2xpbmRlc2RpJywnTWFyZGknLCdNZXNlbW5hJywnR2lldmdpYScsJ1ZlbmRlcmRpJywnU29uZGEnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0R1bScsJ0dsaScsJ01hcicsJ01lcycsJ0dpZScsJ1ZlbicsJ1NvbSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ0R1JywnR2wnLCdNYScsJ01lJywnR2knLCdWZScsJ1NvJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncm0nXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3JtJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtcm0uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtcm0uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFJvbWFuc2ggbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBZdm9ubmUgR2llbmFsICh5dm9ubmUuZ2llbmFsQGVkdWNhLmNoKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3JtJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnU2NoYW5lcicsJ0ZhdnJlcicsJ01hcnMnLCdBdnJpZ2wnLCdNYXRnJywnWmVyY2xhZHVyJyxcclxuXHRcdCdGYW5hZHVyJywnQXZ1c3QnLCdTZXR0ZW1iZXInLCdPY3RvYmVyJywnTm92ZW1iZXInLCdEZWNlbWJlciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ1NjaGEnLCdGZXYnLCdNYXInLCdBdnInLCdNYXRnJywnWmVyJyxcclxuXHRcdCdGYW4nLCdBdnUnLCdTZXR0JywnT2N0JywnTm92JywnRGVjJ10sXHJcblx0XHRkYXlOYW1lczogWydEdW1lbmdpYScsJ0dsaW5kZXNkaScsJ01hcmRpJywnTWVzZW1uYScsJ0dpZXZnaWEnLCdWZW5kZXJkaScsJ1NvbmRhJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0R1bScsJ0dsaScsJ01hcicsJ01lcycsJ0dpZScsJ1ZlbicsJ1NvbSddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnRHUnLCdHbCcsJ01hJywnTWUnLCdHaScsJ1ZlJywnU28nXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydybSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydybSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ro.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ro.js index 137e54895b3..da30f617a7b 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ro.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ro.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtcm8uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtcm8uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBSb21hbmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEVkbW9uZCBMLiAobGxfZWRtb25kQHdhbGxhLmNvbSkgYW5kIElvbnV0IEcuIFN0YW4gKGlvbnV0Lmcuc3RhbkBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydybyddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0lhbnVhcmllJywnRmVicnVhcmllJywnTWFydGllJywnQXByaWxpZScsJ01haScsJ0l1bmllJyxcblx0XHQnSXVsaWUnLCdBdWd1c3QnLCdTZXB0ZW1icmllJywnT2N0b21icmllJywnTm9pZW1icmllJywnRGVjZW1icmllJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0lhbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYWknLCAnSXVuJyxcblx0XHQnSXVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vaScsICdEZWMnXSxcblx0XHRkYXlOYW1lczogWydEdW1pbmljxIMnLCAnTHVuaScsICdNYXJ0aScsICdNaWVyY3VyaScsICdKb2knLCAnVmluZXJpJywgJ1PDom1ixIN0xIMnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0R1bScsICdMdW4nLCAnTWFyJywgJ01pZScsICdKb2knLCAnVmluJywgJ1PDom0nXSxcblx0XHRkYXlOYW1lc01pbjogWydEdScsJ0x1JywnTWEnLCdNaScsJ0pvJywnVmknLCdTw6InXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydybyddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncm8nXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtcm8uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtcm8uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFJvbWFuaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBFZG1vbmQgTC4gKGxsX2VkbW9uZEB3YWxsYS5jb20pIGFuZCBJb251dCBHLiBTdGFuIChpb251dC5nLnN0YW5AZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3JvJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnSWFudWFyaWUnLCdGZWJydWFyaWUnLCdNYXJ0aWUnLCdBcHJpbGllJywnTWFpJywnSXVuaWUnLFxyXG5cdFx0J0l1bGllJywnQXVndXN0JywnU2VwdGVtYnJpZScsJ09jdG9tYnJpZScsJ05vaWVtYnJpZScsJ0RlY2VtYnJpZSddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0lhbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYWknLCAnSXVuJyxcclxuXHRcdCdJdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm9pJywgJ0RlYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnRHVtaW5pY8SDJywgJ0x1bmknLCAnTWFydGknLCAnTWllcmN1cmknLCAnSm9pJywgJ1ZpbmVyaScsICdTw6JtYsSDdMSDJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0R1bScsICdMdW4nLCAnTWFyJywgJ01pZScsICdKb2knLCAnVmluJywgJ1PDom0nXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ0R1JywnTHUnLCdNYScsJ01pJywnSm8nLCdWaScsJ1PDoiddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3JvJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3JvJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ru.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ru.js index be7049c9acb..7cb33bb43c3 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ru.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ru.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtcnUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtcnUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBSdXNzaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgQW5kcmV3IFN0cm9tbm92IChzdHJvbW5vdkBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydydSddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ9Cv0L3QstCw0YDRjCcsJ9Ck0LXQstGA0LDQu9GMJywn0JzQsNGA0YInLCfQkNC/0YDQtdC70YwnLCfQnNCw0LknLCfQmNGO0L3RjCcsXG5cdFx0J9CY0Y7Qu9GMJywn0JDQstCz0YPRgdGCJywn0KHQtdC90YLRj9Cx0YDRjCcsJ9Ce0LrRgtGP0LHRgNGMJywn0J3QvtGP0LHRgNGMJywn0JTQtdC60LDQsdGA0YwnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn0K/QvdCyJywn0KTQtdCyJywn0JzQsNGAJywn0JDQv9GAJywn0JzQsNC5Jywn0JjRjtC9Jyxcblx0XHQn0JjRjtC7Jywn0JDQstCzJywn0KHQtdC9Jywn0J7QutGCJywn0J3QvtGPJywn0JTQtdC6J10sXG5cdFx0ZGF5TmFtZXM6IFsn0LLQvtGB0LrRgNC10YHQtdC90YzQtScsJ9C/0L7QvdC10LTQtdC70YzQvdC40LonLCfQstGC0L7RgNC90LjQuicsJ9GB0YDQtdC00LAnLCfRh9C10YLQstC10YDQsycsJ9C/0Y/RgtC90LjRhtCwJywn0YHRg9Cx0LHQvtGC0LAnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9Cy0YHQuicsJ9C/0L3QtCcsJ9Cy0YLRgCcsJ9GB0YDQtCcsJ9GH0YLQsicsJ9C/0YLQvScsJ9GB0LHRgiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ9CS0YEnLCfQn9C9Jywn0JLRgicsJ9Ch0YAnLCfQp9GCJywn0J/RgicsJ9Ch0LEnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydydSddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncnUnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtcnUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtcnUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFJ1c3NpYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEFuZHJldyBTdHJvbW5vdiAoc3Ryb21ub3ZAZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3J1J10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn0K/QvdCy0LDRgNGMJywn0KTQtdCy0YDQsNC70YwnLCfQnNCw0YDRgicsJ9CQ0L/RgNC10LvRjCcsJ9Cc0LDQuScsJ9CY0Y7QvdGMJyxcclxuXHRcdCfQmNGO0LvRjCcsJ9CQ0LLQs9GD0YHRgicsJ9Ch0LXQvdGC0Y/QsdGA0YwnLCfQntC60YLRj9Cx0YDRjCcsJ9Cd0L7Rj9Cx0YDRjCcsJ9CU0LXQutCw0LHRgNGMJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn0K/QvdCyJywn0KTQtdCyJywn0JzQsNGAJywn0JDQv9GAJywn0JzQsNC5Jywn0JjRjtC9JyxcclxuXHRcdCfQmNGO0LsnLCfQkNCy0LMnLCfQodC10L0nLCfQntC60YInLCfQndC+0Y8nLCfQlNC10LonXSxcclxuXHRcdGRheU5hbWVzOiBbJ9Cy0L7RgdC60YDQtdGB0LXQvdGM0LUnLCfQv9C+0L3QtdC00LXQu9GM0L3QuNC6Jywn0LLRgtC+0YDQvdC40LonLCfRgdGA0LXQtNCwJywn0YfQtdGC0LLQtdGA0LMnLCfQv9GP0YLQvdC40YbQsCcsJ9GB0YPQsdCx0L7RgtCwJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9Cy0YHQuicsJ9C/0L3QtCcsJ9Cy0YLRgCcsJ9GB0YDQtCcsJ9GH0YLQsicsJ9C/0YLQvScsJ9GB0LHRgiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn0JLRgScsJ9Cf0L0nLCfQktGCJywn0KHRgCcsJ9Cn0YInLCfQn9GCJywn0KHQsSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3J1J10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3J1J107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sk.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sk.js index 849937c53e6..6e05bb3fbfa 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sk.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sk.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtc2suanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtc2suanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBTbG92YWsgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBWb2p0ZWNoIFJpbmlrICh2b2p0b0BobW0uc2spLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzayddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0phbnXDoXInLCdGZWJydcOhcicsJ01hcmVjJywnQXByw61sJywnTcOhaicsJ0rDum4nLFxuXHRcdCdKw7psJywnQXVndXN0JywnU2VwdGVtYmVyJywnT2t0w7NiZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ03DoWonLCdKw7puJyxcblx0XHQnSsO6bCcsJ0F1ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RlYyddLFxuXHRcdGRheU5hbWVzOiBbJ05lZGVsXFwnYScsJ1BvbmRlbG9rJywnVXRvcm9rJywnU3RyZWRhJywnxaB0dnJ0b2snLCdQaWF0b2snLCdTb2JvdGEnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ05lZCcsJ1BvbicsJ1V0bycsJ1N0cicsJ8WgdHYnLCdQaWEnLCdTb2InXSxcblx0XHRkYXlOYW1lc01pbjogWydOZScsJ1BvJywnVXQnLCdTdCcsJ8WgdCcsJ1BpYScsJ1NvJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxuXHRcdGZpcnN0RGF5OiAwLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc2snXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NrJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtc2suanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtc2suanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFNsb3ZhayBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgVm9qdGVjaCBSaW5payAodm9qdG9AaG1tLnNrKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NrJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudcOhcicsJ0ZlYnJ1w6FyJywnTWFyZWMnLCdBcHLDrWwnLCdNw6FqJywnSsO6bicsXHJcblx0XHQnSsO6bCcsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09rdMOzYmVyJywnTm92ZW1iZXInLCdEZWNlbWJlciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ03DoWonLCdKw7puJyxcclxuXHRcdCdKw7psJywnQXVnJywnU2VwJywnT2t0JywnTm92JywnRGVjJ10sXHJcblx0XHRkYXlOYW1lczogWydOZWRlbFxcJ2EnLCdQb25kZWxvaycsJ1V0b3JvaycsJ1N0cmVkYScsJ8WgdHZydG9rJywnUGlhdG9rJywnU29ib3RhJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ05lZCcsJ1BvbicsJ1V0bycsJ1N0cicsJ8WgdHYnLCdQaWEnLCdTb2InXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ05lJywnUG8nLCdVdCcsJ1N0JywnxaB0JywnUGlhJywnU28nXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzayddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzayddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sl.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sl.js index 135d9e66e52..6c92e5776c9 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sl.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sl.js @@ -28,4 +28,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtc2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy1zbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFNsb3ZlbmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEpha2EgSmFuY2FyIChqYWthQGt1YmplLm9yZykuICovXG4vKiBjID0gJiN4MTBEOywgcyA9ICYjeDE2MTsgeiA9ICYjeDE3RTsgQyA9ICYjeDEwQzsgUyA9ICYjeDE2MDsgWiA9ICYjeDE3RDsgKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc2wnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydKYW51YXInLCdGZWJydWFyJywnTWFyZWMnLCdBcHJpbCcsJ01haicsJ0p1bmlqJyxcblx0XHQnSnVsaWonLCdBdmd1c3QnLCdTZXB0ZW1iZXInLCdPa3RvYmVyJywnTm92ZW1iZXInLCdEZWNlbWJlciddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWonLCdKdW4nLFxuXHRcdCdKdWwnLCdBdmcnLCdTZXAnLCdPa3QnLCdOb3YnLCdEZWMnXSxcblx0XHRkYXlOYW1lczogWydOZWRlbGphJywnUG9uZWRlbGplaycsJ1RvcmVrJywnU3JlZGEnLCcmI3gxMEM7ZXRydGVrJywnUGV0ZWsnLCdTb2JvdGEnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ05lZCcsJ1BvbicsJ1RvcicsJ1NyZScsJyYjeDEwQztldCcsJ1BldCcsJ1NvYiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ05lJywnUG8nLCdUbycsJ1NyJywnJiN4MTBDO2UnLCdQZScsJ1NvJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc2wnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NsJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtc2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy1zbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgU2xvdmVuaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBKYWthIEphbmNhciAoamFrYUBrdWJqZS5vcmcpLiAqL1xyXG4vKiBjID0gJiN4MTBEOywgcyA9ICYjeDE2MTsgeiA9ICYjeDE3RTsgQyA9ICYjeDEwQzsgUyA9ICYjeDE2MDsgWiA9ICYjeDE3RDsgKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NsJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyJywnRmVicnVhcicsJ01hcmVjJywnQXByaWwnLCdNYWonLCdKdW5paicsXHJcblx0XHQnSnVsaWonLCdBdmd1c3QnLCdTZXB0ZW1iZXInLCdPa3RvYmVyJywnTm92ZW1iZXInLCdEZWNlbWJlciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01haicsJ0p1bicsXHJcblx0XHQnSnVsJywnQXZnJywnU2VwJywnT2t0JywnTm92JywnRGVjJ10sXHJcblx0XHRkYXlOYW1lczogWydOZWRlbGphJywnUG9uZWRlbGplaycsJ1RvcmVrJywnU3JlZGEnLCcmI3gxMEM7ZXRydGVrJywnUGV0ZWsnLCdTb2JvdGEnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnTmVkJywnUG9uJywnVG9yJywnU3JlJywnJiN4MTBDO2V0JywnUGV0JywnU29iJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydOZScsJ1BvJywnVG8nLCdTcicsJyYjeDEwQztlJywnUGUnLCdTbyddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NsJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NsJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sq.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sq.js index 32a23167c8a..28545ebe2db 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sq.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sq.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtc3EuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtc3EuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBBbGJhbmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEZsYWtyb24gQnl0eXFpIChmbGFrcm9uQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NxJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFuYXInLCdTaGt1cnQnLCdNYXJzJywnUHJpbGwnLCdNYWonLCdRZXJzaG9yJyxcblx0XHQnS29ycmlrJywnR3VzaHQnLCdTaHRhdG9yJywnVGV0b3InLCdOw6tudG9yJywnRGhqZXRvciddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdTaGsnLCdNYXInLCdQcmknLCdNYWonLCdRZXInLFxuXHRcdCdLb3InLCdHdXMnLCdTaHQnLCdUZXQnLCdOw6tuJywnRGhqJ10sXG5cdFx0ZGF5TmFtZXM6IFsnRSBEaWVsJywnRSBIw6tuw6snLCdFIE1hcnTDqycsJ0UgTcOrcmt1csOrJywnRSBFbmp0ZScsJ0UgUHJlbXRlJywnRSBTaHR1bmUnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0RpJywnSMOrJywnTWEnLCdNw6snLCdFbicsJ1ByJywnU2gnXSxcblx0XHRkYXlOYW1lc01pbjogWydEaScsJ0jDqycsJ01hJywnTcOrJywnRW4nLCdQcicsJ1NoJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3EnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NxJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtc3EuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtc3EuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEFsYmFuaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBGbGFrcm9uIEJ5dHlxaSAoZmxha3JvbkBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3EnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW5hcicsJ1Noa3VydCcsJ01hcnMnLCdQcmlsbCcsJ01haicsJ1FlcnNob3InLFxyXG5cdFx0J0tvcnJpaycsJ0d1c2h0JywnU2h0YXRvcicsJ1RldG9yJywnTsOrbnRvcicsJ0RoamV0b3InXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdTaGsnLCdNYXInLCdQcmknLCdNYWonLCdRZXInLFxyXG5cdFx0J0tvcicsJ0d1cycsJ1NodCcsJ1RldCcsJ07Dq24nLCdEaGonXSxcclxuXHRcdGRheU5hbWVzOiBbJ0UgRGllbCcsJ0UgSMOrbsOrJywnRSBNYXJ0w6snLCdFIE3Dq3JrdXLDqycsJ0UgRW5qdGUnLCdFIFByZW10ZScsJ0UgU2h0dW5lJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0RpJywnSMOrJywnTWEnLCdNw6snLCdFbicsJ1ByJywnU2gnXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ0RpJywnSMOrJywnTWEnLCdNw6snLCdFbicsJ1ByJywnU2gnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzcSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzcSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sr-SR.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sr-SR.js index 041b86ae2ca..bb90cc16135 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sr-SR.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sr-SR.js @@ -26,4 +26,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtc3ItU1IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLXNyLVNSLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU2VyYmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IERlamFuIERpbWnEhy4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3ItU1InXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydKYW51YXInLCdGZWJydWFyJywnTWFydCcsJ0FwcmlsJywnTWFqJywnSnVuJyxcblx0XHQnSnVsJywnQXZndXN0JywnU2VwdGVtYmFyJywnT2t0b2JhcicsJ05vdmVtYmFyJywnRGVjZW1iYXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTWFyJywnQXByJywnTWFqJywnSnVuJywnSnVsJywnQXZnJywnU2VwJywnT2t0JywnTm92JywnRGVjJ10sXG5cdFx0ZGF5TmFtZXM6IFsnTmVkZWxqYScsJ1BvbmVkZWxqYWsnLCdVdG9yYWsnLCdTcmVkYScsJ8SMZXR2cnRhaycsJ1BldGFrJywnU3Vib3RhJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydOZWQnLCdQb24nLCdVdG8nLCdTcmUnLCfEjGV0JywnUGV0JywnU3ViJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnTmUnLCdQbycsJ1V0JywnU3InLCfEjGUnLCdQZScsJ1N1J10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3ItU1InXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NyLVNSJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtc3ItU1IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLXNyLVNSLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTZXJiaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBEZWphbiBEaW1pxIcuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzci1TUiddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcicsJ0ZlYnJ1YXInLCdNYXJ0JywnQXByaWwnLCdNYWonLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ0F2Z3VzdCcsJ1NlcHRlbWJhcicsJ09rdG9iYXInLCdOb3ZlbWJhcicsJ0RlY2VtYmFyJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTWFyJywnQXByJywnTWFqJywnSnVuJywnSnVsJywnQXZnJywnU2VwJywnT2t0JywnTm92JywnRGVjJ10sXHJcblx0XHRkYXlOYW1lczogWydOZWRlbGphJywnUG9uZWRlbGphaycsJ1V0b3JhaycsJ1NyZWRhJywnxIxldHZydGFrJywnUGV0YWsnLCdTdWJvdGEnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnTmVkJywnUG9uJywnVXRvJywnU3JlJywnxIxldCcsJ1BldCcsJ1N1YiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnTmUnLCdQbycsJ1V0JywnU3InLCfEjGUnLCdQZScsJ1N1J10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3ItU1InXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3ItU1InXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sr.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sr.js index fca62dc1b16..f099b2ea7b9 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sr.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sr.js @@ -26,4 +26,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtc3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLXNyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU2VyYmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IERlamFuIERpbWnEhy4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3InXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWyfQiNCw0L3Rg9Cw0YAnLCfQpNC10LHRgNGD0LDRgCcsJ9Cc0LDRgNGCJywn0JDQv9GA0LjQuycsJ9Cc0LDRmCcsJ9CI0YPQvScsXG5cdFx0J9CI0YPQuycsJ9CQ0LLQs9GD0YHRgicsJ9Ch0LXQv9GC0LXQvNCx0LDRgCcsJ9Ce0LrRgtC+0LHQsNGAJywn0J3QvtCy0LXQvNCx0LDRgCcsJ9CU0LXRhtC10LzQsdCw0YAnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn0IjQsNC9Jywn0KTQtdCxJywn0JzQsNGAJywn0JDQv9GAJywn0JzQsNGYJywn0IjRg9C9Jywn0IjRg9C7Jywn0JDQstCzJywn0KHQtdC/Jywn0J7QutGCJywn0J3QvtCyJywn0JTQtdGGJ10sXG5cdFx0ZGF5TmFtZXM6IFsn0J3QtdC00LXRmdCwJywn0J/QvtC90LXQtNC10ZnQsNC6Jywn0KPRgtC+0YDQsNC6Jywn0KHRgNC10LTQsCcsJ9Cn0LXRgtCy0YDRgtCw0LonLCfQn9C10YLQsNC6Jywn0KHRg9Cx0L7RgtCwJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfQndC10LQnLCfQn9C+0L0nLCfQo9GC0L4nLCfQodGA0LUnLCfQp9C10YInLCfQn9C10YInLCfQodGD0LEnXSxcblx0XHRkYXlOYW1lc01pbjogWyfQndC1Jywn0J/QvicsJ9Cj0YInLCfQodGAJywn0KfQtScsJ9Cf0LUnLCfQodGDJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3InXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NyJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtc3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLXNyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTZXJiaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBEZWphbiBEaW1pxIcuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzciddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ9CI0LDQvdGD0LDRgCcsJ9Ck0LXQsdGA0YPQsNGAJywn0JzQsNGA0YInLCfQkNC/0YDQuNC7Jywn0JzQsNGYJywn0IjRg9C9JyxcclxuXHRcdCfQiNGD0LsnLCfQkNCy0LPRg9GB0YInLCfQodC10L/RgtC10LzQsdCw0YAnLCfQntC60YLQvtCx0LDRgCcsJ9Cd0L7QstC10LzQsdCw0YAnLCfQlNC10YbQtdC80LHQsNGAJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn0IjQsNC9Jywn0KTQtdCxJywn0JzQsNGAJywn0JDQv9GAJywn0JzQsNGYJywn0IjRg9C9Jywn0IjRg9C7Jywn0JDQstCzJywn0KHQtdC/Jywn0J7QutGCJywn0J3QvtCyJywn0JTQtdGGJ10sXHJcblx0XHRkYXlOYW1lczogWyfQndC10LTQtdGZ0LAnLCfQn9C+0L3QtdC00LXRmdCw0LonLCfQo9GC0L7RgNCw0LonLCfQodGA0LXQtNCwJywn0KfQtdGC0LLRgNGC0LDQuicsJ9Cf0LXRgtCw0LonLCfQodGD0LHQvtGC0LAnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn0J3QtdC0Jywn0J/QvtC9Jywn0KPRgtC+Jywn0KHRgNC1Jywn0KfQtdGCJywn0J/QtdGCJywn0KHRg9CxJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfQndC1Jywn0J/QvicsJ9Cj0YInLCfQodGAJywn0KfQtScsJ9Cf0LUnLCfQodGDJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3InXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3InXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sv.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sv.js index ca8d0bbd543..688be8ed3e1 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sv.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sv.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtc3YuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtc3YuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBTd2VkaXNoIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgQW5kZXJzIEVrZGFobCAoYW5kZXJzQG5vbWFkaXouc2UpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzdiddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcbiAgICAgICAgbW9udGhOYW1lczogWydKYW51YXJpJywnRmVicnVhcmknLCdNYXJzJywnQXByaWwnLCdNYWonLCdKdW5pJyxcbiAgICAgICAgJ0p1bGknLCdBdWd1c3RpJywnU2VwdGVtYmVyJywnT2t0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXInXSxcbiAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01haicsJ0p1bicsXG4gICAgICAgICdKdWwnLCdBdWcnLCdTZXAnLCdPa3QnLCdOb3YnLCdEZWMnXSxcblx0XHRkYXlOYW1lczogWydTw7ZuZGFnJywnTcOlbmRhZycsJ1Rpc2RhZycsJ09uc2RhZycsJ1RvcnNkYWcnLCdGcmVkYWcnLCdMw7ZyZGFnJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydTw7ZuJywnTcOlbicsJ1RpcycsJ09ucycsJ1RvcicsJ0ZyZScsJ0zDtnInXSxcblx0XHRkYXlOYW1lc01pbjogWydTw7YnLCdNw6UnLCdUaScsJ09uJywnVG8nLCdGcicsJ0zDtiddLFxuICAgICAgICBkYXRlRm9ybWF0OiAneXl5eS1tbS1kZCcsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzdiddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3YnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtc3YuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtc3YuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFN3ZWRpc2ggbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEFuZGVycyBFa2RhaGwgKGFuZGVyc0Bub21hZGl6LnNlKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3N2J10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuICAgICAgICBtb250aE5hbWVzOiBbJ0phbnVhcmknLCdGZWJydWFyaScsJ01hcnMnLCdBcHJpbCcsJ01haicsJ0p1bmknLFxyXG4gICAgICAgICdKdWxpJywnQXVndXN0aScsJ1NlcHRlbWJlcicsJ09rdG9iZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sXHJcbiAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01haicsJ0p1bicsXHJcbiAgICAgICAgJ0p1bCcsJ0F1ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RlYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnU8O2bmRhZycsJ03DpW5kYWcnLCdUaXNkYWcnLCdPbnNkYWcnLCdUb3JzZGFnJywnRnJlZGFnJywnTMO2cmRhZyddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydTw7ZuJywnTcOlbicsJ1RpcycsJ09ucycsJ1RvcicsJ0ZyZScsJ0zDtnInXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ1PDticsJ03DpScsJ1RpJywnT24nLCdUbycsJ0ZyJywnTMO2J10sXHJcbiAgICAgICAgZGF0ZUZvcm1hdDogJ3l5eXktbW0tZGQnLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3N2J10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3N2J107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ta.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ta.js index b2edab3c250..c60c2562c6e 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ta.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ta.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtdGEuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtdGEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBUYW1pbCAoVVRGLTgpIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgUyBBIFN1cmVzaGt1bWFyIChzYXNrdW1hckBsaXZlLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3RhJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsn4K6k4K+IJywn4K6u4K6+4K6a4K6/Jywn4K6q4K6Z4K+N4K6V4K+B4K6p4K6/Jywn4K6a4K6/4K6k4K+N4K6k4K6/4K6w4K+IJywn4K614K+I4K6V4K6+4K6a4K6/Jywn4K6G4K6p4K6/Jyxcblx0XHQn4K6G4K6f4K6/Jywn4K6G4K614K6j4K6/Jywn4K6q4K+B4K6w4K6f4K+N4K6f4K6+4K6a4K6/Jywn4K6Q4K6q4K+N4K6q4K6a4K6/Jywn4K6V4K6+4K6w4K+N4K6k4K+N4K6k4K6/4K6V4K+IJywn4K6u4K6+4K6w4K+N4K6V4K604K6/J10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ+CupOCviCcsJ+CuruCuvuCumuCuvycsJ+CuquCumeCvjScsJ+CumuCuv+CupOCvjScsJ+CuteCviOCuleCuvicsJ+CuhuCuqeCuvycsXG5cdFx0J+CuhuCun+CuvycsJ+CuhuCutScsJ+CuquCvgeCusCcsJ+CukOCuquCvjScsJ+CuleCuvuCusOCvjScsJ+CuruCuvuCusOCvjSddLFxuXHRcdGRheU5hbWVzOiBbJ+CunuCuvuCur+Cuv+CuseCvjeCuseCvgeCuleCvjeCuleCuv+CutOCuruCviCcsJ+CupOCuv+CumeCvjeCuleCun+CvjeCuleCuv+CutOCuruCviCcsJ+CumuCvhuCuteCvjeCuteCuvuCur+CvjeCuleCvjeCuleCuv+CutOCuruCviCcsJ+CuquCvgeCupOCuqeCvjeCuleCuv+CutOCuruCviCcsJ+CuteCuv+Cur+CuvuCutOCuleCvjeCuleCuv+CutOCuruCviCcsJ+CuteCvhuCus+CvjeCus+Cuv+CuleCvjeCuleCuv+CutOCuruCviCcsJ+CumuCuqeCuv+CuleCvjeCuleCuv+CutOCuruCviCddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn4K6e4K6+4K6v4K6/4K6x4K+BJywn4K6k4K6/4K6Z4K+N4K6V4K6z4K+NJywn4K6a4K+G4K614K+N4K614K6+4K6v4K+NJywn4K6q4K+B4K6k4K6p4K+NJywn4K614K6/4K6v4K6+4K604K6p4K+NJywn4K614K+G4K6z4K+N4K6z4K6/Jywn4K6a4K6p4K6/J10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn4K6e4K6+Jywn4K6k4K6/Jywn4K6a4K+GJywn4K6q4K+BJywn4K614K6/Jywn4K614K+GJywn4K6aJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndGEnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3RhJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtdGEuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtdGEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFRhbWlsIChVVEYtOCkgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IFMgQSBTdXJlc2hrdW1hciAoc2Fza3VtYXJAbGl2ZS5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndGEnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWyfgrqTgr4gnLCfgrq7grr7grprgrr8nLCfgrqrgrpngr43grpXgr4Hgrqngrr8nLCfgrprgrr/grqTgr43grqTgrr/grrDgr4gnLCfgrrXgr4jgrpXgrr7grprgrr8nLCfgrobgrqngrr8nLFxyXG5cdFx0J+CuhuCun+CuvycsJ+CuhuCuteCuo+CuvycsJ+CuquCvgeCusOCun+CvjeCun+CuvuCumuCuvycsJ+CukOCuquCvjeCuquCumuCuvycsJ+CuleCuvuCusOCvjeCupOCvjeCupOCuv+CuleCviCcsJ+CuruCuvuCusOCvjeCuleCutOCuvyddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ+CupOCviCcsJ+CuruCuvuCumuCuvycsJ+CuquCumeCvjScsJ+CumuCuv+CupOCvjScsJ+CuteCviOCuleCuvicsJ+CuhuCuqeCuvycsXHJcblx0XHQn4K6G4K6f4K6/Jywn4K6G4K61Jywn4K6q4K+B4K6wJywn4K6Q4K6q4K+NJywn4K6V4K6+4K6w4K+NJywn4K6u4K6+4K6w4K+NJ10sXHJcblx0XHRkYXlOYW1lczogWyfgrp7grr7grq/grr/grrHgr43grrHgr4HgrpXgr43grpXgrr/grrTgrq7gr4gnLCfgrqTgrr/grpngr43grpXgrp/gr43grpXgrr/grrTgrq7gr4gnLCfgrprgr4bgrrXgr43grrXgrr7grq/gr43grpXgr43grpXgrr/grrTgrq7gr4gnLCfgrqrgr4HgrqTgrqngr43grpXgrr/grrTgrq7gr4gnLCfgrrXgrr/grq/grr7grrTgrpXgr43grpXgrr/grrTgrq7gr4gnLCfgrrXgr4bgrrPgr43grrPgrr/grpXgr43grpXgrr/grrTgrq7gr4gnLCfgrprgrqngrr/grpXgr43grpXgrr/grrTgrq7gr4gnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn4K6e4K6+4K6v4K6/4K6x4K+BJywn4K6k4K6/4K6Z4K+N4K6V4K6z4K+NJywn4K6a4K+G4K614K+N4K614K6+4K6v4K+NJywn4K6q4K+B4K6k4K6p4K+NJywn4K614K6/4K6v4K6+4K604K6p4K+NJywn4K614K+G4K6z4K+N4K6z4K6/Jywn4K6a4K6p4K6/J10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfgrp7grr4nLCfgrqTgrr8nLCfgrprgr4YnLCfgrqrgr4EnLCfgrrXgrr8nLCfgrrXgr4YnLCfgrponXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd0YSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd0YSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-th.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-th.js index 27c2a464567..5f72ddffe94 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-th.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-th.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtdGguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBUaGFpIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgcGlwbyAocGlwb0BzaXhoZWFkLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3RoJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsn4Lih4LiB4Lij4Liy4LiE4LihJywn4LiB4Li44Lih4Lig4Liy4Lie4Lix4LiZ4LiY4LmMJywn4Lih4Li14LiZ4Liy4LiE4LihJywn4LmA4Lih4Lip4Liy4Lii4LiZJywn4Lie4Lik4Lip4Lig4Liy4LiE4LihJywn4Lih4Li04LiW4Li44LiZ4Liy4Lii4LiZJyxcblx0XHQn4LiB4Lij4LiB4LiO4Liy4LiE4LihJywn4Liq4Li04LiH4Lir4Liy4LiE4LihJywn4LiB4Lix4LiZ4Lii4Liy4Lii4LiZJywn4LiV4Li44Lil4Liy4LiE4LihJywn4Lie4Lik4Lio4LiI4Li04LiB4Liy4Lii4LiZJywn4LiY4Lix4LiZ4Lin4Liy4LiE4LihJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ+C4oS7guIQuJywn4LiBLuC4ni4nLCfguKHguLUu4LiELicsJ+C5gOC4oS7guKIuJywn4LieLuC4hC4nLCfguKHguLQu4LiiLicsXG5cdFx0J+C4gS7guIQuJywn4LiqLuC4hC4nLCfguIEu4LiiLicsJ+C4lS7guIQuJywn4LieLuC4oi4nLCfguJgu4LiELiddLFxuXHRcdGRheU5hbWVzOiBbJ+C4reC4suC4l+C4tOC4leC4ouC5jCcsJ+C4iOC4seC4meC4l+C4o+C5jCcsJ+C4reC4seC4h+C4hOC4suC4oycsJ+C4nuC4uOC4mCcsJ+C4nuC4pOC4q+C4seC4quC4muC4lOC4tScsJ+C4qOC4uOC4geC4o+C5jCcsJ+C5gOC4quC4suC4o+C5jCddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn4Lit4LiyLicsJ+C4iC4nLCfguK0uJywn4LieLicsJ+C4nuC4pC4nLCfguKguJywn4LiqLiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ+C4reC4si4nLCfguIguJywn4LitLicsJ+C4ni4nLCfguJ7guKQuJywn4LioLicsJ+C4qi4nXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDAsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd0aCddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndGgnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtdGguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFRoYWkgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IHBpcG8gKHBpcG9Ac2l4aGVhZC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndGgnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWyfguKHguIHguKPguLLguITguKEnLCfguIHguLjguKHguKDguLLguJ7guLHguJnguJjguYwnLCfguKHguLXguJnguLLguITguKEnLCfguYDguKHguKnguLLguKLguJknLCfguJ7guKTguKnguKDguLLguITguKEnLCfguKHguLTguJbguLjguJnguLLguKLguJknLFxyXG5cdFx0J+C4geC4o+C4geC4juC4suC4hOC4oScsJ+C4quC4tOC4h+C4q+C4suC4hOC4oScsJ+C4geC4seC4meC4ouC4suC4ouC4mScsJ+C4leC4uOC4peC4suC4hOC4oScsJ+C4nuC4pOC4qOC4iOC4tOC4geC4suC4ouC4mScsJ+C4mOC4seC4meC4p+C4suC4hOC4oSddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ+C4oS7guIQuJywn4LiBLuC4ni4nLCfguKHguLUu4LiELicsJ+C5gOC4oS7guKIuJywn4LieLuC4hC4nLCfguKHguLQu4LiiLicsXHJcblx0XHQn4LiBLuC4hC4nLCfguKou4LiELicsJ+C4gS7guKIuJywn4LiVLuC4hC4nLCfguJ4u4LiiLicsJ+C4mC7guIQuJ10sXHJcblx0XHRkYXlOYW1lczogWyfguK3guLLguJfguLTguJXguKLguYwnLCfguIjguLHguJnguJfguKPguYwnLCfguK3guLHguIfguITguLLguKMnLCfguJ7guLjguJgnLCfguJ7guKTguKvguLHguKrguJrguJTguLUnLCfguKjguLjguIHguKPguYwnLCfguYDguKrguLLguKPguYwnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn4Lit4LiyLicsJ+C4iC4nLCfguK0uJywn4LieLicsJ+C4nuC4pC4nLCfguKguJywn4LiqLiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn4Lit4LiyLicsJ+C4iC4nLCfguK0uJywn4LieLicsJ+C4nuC4pC4nLCfguKguJywn4LiqLiddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDAsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3RoJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3RoJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-tr.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-tr.js index cf8426ff08c..d4d2be14d54 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-tr.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-tr.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtdHIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtdHIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBUdXJraXNoIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgSXp6ZXQgRW1yZSBFcmthbiAoa2FyYUBrYXJhbGFtYWxhci5uZXQpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd0ciddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ09jYWsnLCfFnnViYXQnLCdNYXJ0JywnTmlzYW4nLCdNYXnEsXMnLCdIYXppcmFuJyxcblx0XHQnVGVtbXV6JywnQcSfdXN0b3MnLCdFeWzDvGwnLCdFa2ltJywnS2FzxLFtJywnQXJhbMSxayddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydPY2EnLCfFnnViJywnTWFyJywnTmlzJywnTWF5JywnSGF6Jyxcblx0XHQnVGVtJywnQcSfdScsJ0V5bCcsJ0VraScsJ0thcycsJ0FyYSddLFxuXHRcdGRheU5hbWVzOiBbJ1BhemFyJywnUGF6YXJ0ZXNpJywnU2FsxLEnLCfDh2FyxZ9hbWJhJywnUGVyxZ9lbWJlJywnQ3VtYScsJ0N1bWFydGVzaSddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnUHonLCdQdCcsJ1NhJywnw4dhJywnUGUnLCdDdScsJ0N0J10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnUHonLCdQdCcsJ1NhJywnw4dhJywnUGUnLCdDdScsJ0N0J10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndHInXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3RyJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtdHIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtdHIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFR1cmtpc2ggbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEl6emV0IEVtcmUgRXJrYW4gKGthcmFAa2FyYWxhbWFsYXIubmV0KS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3RyJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnT2NhaycsJ8WedWJhdCcsJ01hcnQnLCdOaXNhbicsJ01hecSxcycsJ0hhemlyYW4nLFxyXG5cdFx0J1RlbW11eicsJ0HEn3VzdG9zJywnRXlsw7xsJywnRWtpbScsJ0thc8SxbScsJ0FyYWzEsWsnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydPY2EnLCfFnnViJywnTWFyJywnTmlzJywnTWF5JywnSGF6JyxcclxuXHRcdCdUZW0nLCdBxJ91JywnRXlsJywnRWtpJywnS2FzJywnQXJhJ10sXHJcblx0XHRkYXlOYW1lczogWydQYXphcicsJ1BhemFydGVzaScsJ1NhbMSxJywnw4dhcsWfYW1iYScsJ1BlcsWfZW1iZScsJ0N1bWEnLCdDdW1hcnRlc2knXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnUHonLCdQdCcsJ1NhJywnw4dhJywnUGUnLCdDdScsJ0N0J10sXHJcblx0XHRkYXlOYW1lc01pbjogWydQeicsJ1B0JywnU2EnLCfDh2EnLCdQZScsJ0N1JywnQ3QnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd0ciddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd0ciddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-tt.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-tt.js index e989ef7f78f..cac79af89f5 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-tt.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-tt.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtdHQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtdHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBUYXRhciBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5INCY0YDQtdC6INCl0LDSl9C40LXQsiAoa2hhemlyZWtAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndHQnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWyfQk9GL0L3QstCw0YAnLCfQpNC10LLRgNCw0LvRjCcsJ9Cc0LDRgNGCJywn0JDQv9GA0LXQu9GMJywn0JzQsNC5Jywn0JjRjtC90YwnLFxuXHRcdCfQmNGO0LvRjCcsJ9CQ0LLQs9GD0YHRgicsJ9Ch0LXQvdGC0Y/QsdGA0YwnLCfQntC60YLRj9Cx0YDRjCcsJ9Cd0L7Rj9Cx0YDRjCcsJ9CU0LXQutCw0LHRgNGMJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ9CT0YvQudC9Jywn0KTQtdCyJywn0JzQsNGAJywn0JDQv9GAJywn0JzQsNC5Jywn0JjRjtC9Jyxcblx0XHQn0JjRjtC7Jywn0JDQstCzJywn0KHQtdC9Jywn0J7QutGCJywn0J3QvtGPJywn0JTQtdC6J10sXG5cdFx0ZGF5TmFtZXM6IFsn0Y/QutGI05nQvNCx0LUnLCfQtNKv0YjTmdC80LHQtScsJ9GB0LjRiNOZ0LzQsdC1Jywn0YfTmdGA0YjTmdC80LHQtScsJ9C/05nQvdKX0LXRiNOZ0LzQsdC1Jywn0pfQvtC80LPQsCcsJ9GI0LjQvNCx05knXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9GP0LrRiCcsJ9C00q/RiCcsJ9GB0LjRiCcsJ9GH05nRgCcsJ9C/05nQvScsJ9KX0L7QvCcsJ9GI0LjQvCddLFxuXHRcdGRheU5hbWVzTWluOiBbJ9Cv0LonLCfQlNKvJywn0KHQuCcsJ9Cn05knLCfQn9OZJywn0pbQvicsJ9Co0LgnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd0dCddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndHQnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtdHQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtdHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFRhdGFyIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSDQmNGA0LXQuiDQpdCw0pfQuNC10LIgKGtoYXppcmVrQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd0dCddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ9CT0YvQvdCy0LDRgCcsJ9Ck0LXQstGA0LDQu9GMJywn0JzQsNGA0YInLCfQkNC/0YDQtdC70YwnLCfQnNCw0LknLCfQmNGO0L3RjCcsXHJcblx0XHQn0JjRjtC70YwnLCfQkNCy0LPRg9GB0YInLCfQodC10L3RgtGP0LHRgNGMJywn0J7QutGC0Y/QsdGA0YwnLCfQndC+0Y/QsdGA0YwnLCfQlNC10LrQsNCx0YDRjCddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ9CT0YvQudC9Jywn0KTQtdCyJywn0JzQsNGAJywn0JDQv9GAJywn0JzQsNC5Jywn0JjRjtC9JyxcclxuXHRcdCfQmNGO0LsnLCfQkNCy0LMnLCfQodC10L0nLCfQntC60YInLCfQndC+0Y8nLCfQlNC10LonXSxcclxuXHRcdGRheU5hbWVzOiBbJ9GP0LrRiNOZ0LzQsdC1Jywn0LTSr9GI05nQvNCx0LUnLCfRgdC40YjTmdC80LHQtScsJ9GH05nRgNGI05nQvNCx0LUnLCfQv9OZ0L3Sl9C10YjTmdC80LHQtScsJ9KX0L7QvNCz0LAnLCfRiNC40LzQsdOZJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9GP0LrRiCcsJ9C00q/RiCcsJ9GB0LjRiCcsJ9GH05nRgCcsJ9C/05nQvScsJ9KX0L7QvCcsJ9GI0LjQvCddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn0K/QuicsJ9CU0q8nLCfQodC4Jywn0KfTmScsJ9Cf05knLCfSltC+Jywn0KjQuCddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3R0J10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3R0J107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-uk.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-uk.js index 7f6280dbc68..a190ee2c294 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-uk.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-uk.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtdWsuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtdWsuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBVa3JhaW5pYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBNYXhpbSBEcm9nb2JpdHNraXkgKG1heGRhb0BnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd1ayddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ9Ch0ZbRh9C10L3RjCcsJ9Cb0Y7RgtC40LknLCfQkdC10YDQtdC30LXQvdGMJywn0JrQstGW0YLQtdC90YwnLCfQotGA0LDQstC10L3RjCcsJ9Cn0LXRgNCy0LXQvdGMJyxcblx0XHQn0JvQuNC/0LXQvdGMJywn0KHQtdGA0L/QtdC90YwnLCfQktC10YDQtdGB0LXQvdGMJywn0JbQvtCy0YLQtdC90YwnLCfQm9C40YHRgtC+0L/QsNC0Jywn0JPRgNGD0LTQtdC90YwnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn0KHRltGHJywn0JvRjtGCJywn0JHQtdGAJywn0JrQstGWJywn0KLRgNCwJywn0KfQtdGAJyxcblx0XHQn0JvQuNC/Jywn0KHQtdGAJywn0JLQtdGAJywn0JbQvtCyJywn0JvQuNGBJywn0JPRgNGDJ10sXG5cdFx0ZGF5TmFtZXM6IFsn0L3QtdC00ZbQu9GPJywn0L/QvtC90LXQtNGW0LvQvtC6Jywn0LLRltCy0YLQvtGA0L7QuicsJ9GB0LXRgNC10LTQsCcsJ9GH0LXRgtCy0LXRgCcsJ9C/XFwn0Y/RgtC90LjRhtGPJywn0YHRg9Cx0L7RgtCwJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfQvdC10LQnLCfQv9C90LQnLCfQstGW0LInLCfRgdGA0LQnLCfRh9GC0LInLCfQv9GC0L0nLCfRgdCx0YInXSxcblx0XHRkYXlOYW1lc01pbjogWyfQndC0Jywn0J/QvScsJ9CS0YInLCfQodGAJywn0KfRgicsJ9Cf0YInLCfQodCxJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndWsnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3VrJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtdWsuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtdWsuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFVrcmFpbmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTWF4aW0gRHJvZ29iaXRza2l5IChtYXhkYW9AZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3VrJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn0KHRltGH0LXQvdGMJywn0JvRjtGC0LjQuScsJ9CR0LXRgNC10LfQtdC90YwnLCfQmtCy0ZbRgtC10L3RjCcsJ9Ci0YDQsNCy0LXQvdGMJywn0KfQtdGA0LLQtdC90YwnLFxyXG5cdFx0J9Cb0LjQv9C10L3RjCcsJ9Ch0LXRgNC/0LXQvdGMJywn0JLQtdGA0LXRgdC10L3RjCcsJ9CW0L7QstGC0LXQvdGMJywn0JvQuNGB0YLQvtC/0LDQtCcsJ9CT0YDRg9C00LXQvdGMJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn0KHRltGHJywn0JvRjtGCJywn0JHQtdGAJywn0JrQstGWJywn0KLRgNCwJywn0KfQtdGAJyxcclxuXHRcdCfQm9C40L8nLCfQodC10YAnLCfQktC10YAnLCfQltC+0LInLCfQm9C40YEnLCfQk9GA0YMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ9C90LXQtNGW0LvRjycsJ9C/0L7QvdC10LTRltC70L7QuicsJ9Cy0ZbQstGC0L7RgNC+0LonLCfRgdC10YDQtdC00LAnLCfRh9C10YLQstC10YAnLCfQv1xcJ9GP0YLQvdC40YbRjycsJ9GB0YPQsdC+0YLQsCddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfQvdC10LQnLCfQv9C90LQnLCfQstGW0LInLCfRgdGA0LQnLCfRh9GC0LInLCfQv9GC0L0nLCfRgdCx0YInXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ9Cd0LQnLCfQn9C9Jywn0JLRgicsJ9Ch0YAnLCfQp9GCJywn0J/RgicsJ9Ch0LEnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd1ayddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd1ayddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ur.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ur.js index 1ff94612c13..23d26a60dc3 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ur.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ur.js @@ -29,4 +29,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtdXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLXVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgVXJkdSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBNYW5zb29yIE11bmliIC0tIG1hbnNvb3JtdW5pYkBnbWFpbC5jb20gPGh0dHA6Ly93d3cubWFuc29vci5jby5uci9tYW5zb29yLmh0bWw+XG4gICBUaGFua3MgdG8gSGFiaWIgQWhtZWQsIE9iYWlkVWxsYWggQW53YXIuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3VyJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsn2KzZhtmI2LHbjCcsJ9mB2LHZiNix24wnLCfZhdin2LHahicsJ9in2b7YsduM2YQnLCfZhdim24wnLCfYrNmI2YYnLFxuXHRcdCfYrNmI2YTYp9im24wnLCfYp9qv2LPYqicsJ9iz2KrZhdio2LEnLCfYp9qp2KrZiNio2LEnLCfZhtmI2YXYqNixJywn2K/Ys9mF2KjYsSddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWycxJywnMicsJzMnLCc0JywnNScsJzYnLFxuXHRcdCc3JywnOCcsJzknLCcxMCcsJzExJywnMTInXSxcblx0XHRkYXlOYW1lczogWyfYp9iq2YjYp9ixJywn2b7ZitixJywn2YXZhtqv2YQnLCfYqNiv2r4nLCfYrNmF2LnYsdin2KonLCfYrNmF2LnbgScsJ9uB2YHYqtuBJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfYp9iq2YjYp9ixJywn2b7ZitixJywn2YXZhtqv2YQnLCfYqNiv2r4nLCfYrNmF2LnYsdin2KonLCfYrNmF2LnbgScsJ9uB2YHYqtuBJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn2KfYqtmI2KfYsScsJ9m+2YrYsScsJ9mF2Ybar9mEJywn2KjYr9q+Jywn2KzZhdi52LHYp9iqJywn2KzZhdi524EnLCfbgdmB2KrbgSddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMCxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogdHJ1ZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndXInXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3VyJ107XG5cdH1cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtdXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLXVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBVcmR1IGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgTWFuc29vciBNdW5pYiAtLSBtYW5zb29ybXVuaWJAZ21haWwuY29tIDxodHRwOi8vd3d3Lm1hbnNvb3IuY28ubnIvbWFuc29vci5odG1sPlxyXG4gICBUaGFua3MgdG8gSGFiaWIgQWhtZWQsIE9iYWlkVWxsYWggQW53YXIuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd1ciddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ9is2YbZiNix24wnLCfZgdix2YjYsduMJywn2YXYp9ix2oYnLCfYp9m+2LHbjNmEJywn2YXYptuMJywn2KzZiNmGJyxcclxuXHRcdCfYrNmI2YTYp9im24wnLCfYp9qv2LPYqicsJ9iz2KrZhdio2LEnLCfYp9qp2KrZiNio2LEnLCfZhtmI2YXYqNixJywn2K/Ys9mF2KjYsSddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJzEnLCcyJywnMycsJzQnLCc1JywnNicsXHJcblx0XHQnNycsJzgnLCc5JywnMTAnLCcxMScsJzEyJ10sXHJcblx0XHRkYXlOYW1lczogWyfYp9iq2YjYp9ixJywn2b7ZitixJywn2YXZhtqv2YQnLCfYqNiv2r4nLCfYrNmF2LnYsdin2KonLCfYrNmF2LnbgScsJ9uB2YHYqtuBJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9in2KrZiNin2LEnLCfZvtmK2LEnLCfZhdmG2q/ZhCcsJ9io2K/avicsJ9is2YXYudix2KfYqicsJ9is2YXYuduBJywn24HZgdiq24EnXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ9in2KrZiNin2LEnLCfZvtmK2LEnLCfZhdmG2q/ZhCcsJ9io2K/avicsJ9is2YXYudix2KfYqicsJ9is2YXYuduBJywn24HZgdiq24EnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogdHJ1ZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndXInXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndXInXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-vi.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-vi.js index 7ef510ed7ce..86a1196b46b 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-vi.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-vi.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtdmkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtdmkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBWaWV0bmFtZXNlIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFRyYW5zbGF0ZWQgYnkgTGUgVGhhbmggSHV5IChsdGhhbmhodXlAY2l0LmN0dS5lZHUudm4pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd2aSddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ1Row6FuZyBN4buZdCcsICdUaMOhbmcgSGFpJywgJ1Row6FuZyBCYScsICdUaMOhbmcgVMawJywgJ1Row6FuZyBOxINtJywgJ1Row6FuZyBTw6F1Jyxcblx0XHQnVGjDoW5nIELhuqN5JywgJ1Row6FuZyBUw6FtJywgJ1Row6FuZyBDaMOtbicsICdUaMOhbmcgTcaw4budaScsICdUaMOhbmcgTcaw4budaSBN4buZdCcsICdUaMOhbmcgTcaw4budaSBIYWknXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnVGjDoW5nIDEnLCAnVGjDoW5nIDInLCAnVGjDoW5nIDMnLCAnVGjDoW5nIDQnLCAnVGjDoW5nIDUnLCAnVGjDoW5nIDYnLFxuXHRcdCdUaMOhbmcgNycsICdUaMOhbmcgOCcsICdUaMOhbmcgOScsICdUaMOhbmcgMTAnLCAnVGjDoW5nIDExJywgJ1Row6FuZyAxMiddLFxuXHRcdGRheU5hbWVzOiBbJ0No4bunIE5o4bqtdCcsICdUaOG7qSBIYWknLCAnVGjhu6kgQmEnLCAnVGjhu6kgVMawJywgJ1Ro4bupIE7Eg20nLCAnVGjhu6kgU8OhdScsICdUaOG7qSBC4bqjeSddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnQ04nLCAnVDInLCAnVDMnLCAnVDQnLCAnVDUnLCAnVDYnLCAnVDcnXSxcblx0XHRkYXlOYW1lc01pbjogWydDTicsICdUMicsICdUMycsICdUNCcsICdUNScsICdUNicsICdUNyddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMCxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3ZpJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd2aSddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtdmkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtdmkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFZpZXRuYW1lc2UgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBUcmFuc2xhdGVkIGJ5IExlIFRoYW5oIEh1eSAobHRoYW5oaHV5QGNpdC5jdHUuZWR1LnZuKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3ZpJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnVGjDoW5nIE3hu5l0JywgJ1Row6FuZyBIYWknLCAnVGjDoW5nIEJhJywgJ1Row6FuZyBUxrAnLCAnVGjDoW5nIE7Eg20nLCAnVGjDoW5nIFPDoXUnLFxyXG5cdFx0J1Row6FuZyBC4bqjeScsICdUaMOhbmcgVMOhbScsICdUaMOhbmcgQ2jDrW4nLCAnVGjDoW5nIE3GsOG7nWknLCAnVGjDoW5nIE3GsOG7nWkgTeG7mXQnLCAnVGjDoW5nIE3GsOG7nWkgSGFpJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnVGjDoW5nIDEnLCAnVGjDoW5nIDInLCAnVGjDoW5nIDMnLCAnVGjDoW5nIDQnLCAnVGjDoW5nIDUnLCAnVGjDoW5nIDYnLFxyXG5cdFx0J1Row6FuZyA3JywgJ1Row6FuZyA4JywgJ1Row6FuZyA5JywgJ1Row6FuZyAxMCcsICdUaMOhbmcgMTEnLCAnVGjDoW5nIDEyJ10sXHJcblx0XHRkYXlOYW1lczogWydDaOG7pyBOaOG6rXQnLCAnVGjhu6kgSGFpJywgJ1Ro4bupIEJhJywgJ1Ro4bupIFTGsCcsICdUaOG7qSBOxINtJywgJ1Ro4bupIFPDoXUnLCAnVGjhu6kgQuG6o3knXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnQ04nLCAnVDInLCAnVDMnLCAnVDQnLCAnVDUnLCAnVDYnLCAnVDcnXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ0NOJywgJ1QyJywgJ1QzJywgJ1Q0JywgJ1Q1JywgJ1Q2JywgJ1Q3J10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMCxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndmknXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndmknXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-zh-CN.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-zh-CN.js index b92c61a7c0f..391f074fe7e 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-zh-CN.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-zh-CN.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtemgtQ04uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtemgtQ04uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBTaW1wbGlmaWVkIENoaW5lc2UgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBDbG91ZHJlYW0gKGNsb3VkcmVhbUBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd6aC1DTiddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ+S4gOaciCcsJ+S6jOaciCcsJ+S4ieaciCcsJ+Wbm+aciCcsJ+S6lOaciCcsJ+WFreaciCcsXG5cdFx0J+S4g+aciCcsJ+WFq+aciCcsJ+S5neaciCcsJ+WNgeaciCcsJ+WNgeS4gOaciCcsJ+WNgeS6jOaciCddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfkuIAnLCfkuownLCfkuIknLCflm5snLCfkupQnLCflha0nLFxuXHRcdCfkuIMnLCflhasnLCfkuZ0nLCfljYEnLCfljYHkuIAnLCfljYHkuownXSxcblx0XHRkYXlOYW1lczogWyfmmJ/mnJ/ml6UnLCfmmJ/mnJ/kuIAnLCfmmJ/mnJ/kuownLCfmmJ/mnJ/kuIknLCfmmJ/mnJ/lm5snLCfmmJ/mnJ/kupQnLCfmmJ/mnJ/lha0nXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+WRqOaXpScsJ+WRqOS4gCcsJ+WRqOS6jCcsJ+WRqOS4iScsJ+WRqOWbmycsJ+WRqOS6lCcsJ+WRqOWFrSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ+aXpScsJ+S4gCcsJ+S6jCcsJ+S4iScsJ+WbmycsJ+S6lCcsJ+WFrSddLFxuXHRcdGRhdGVGb3JtYXQ6ICd5eXl5LW1tLWRkJyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3poLUNOJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd6aC1DTiddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtemgtQ04uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtemgtQ04uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFNpbXBsaWZpZWQgQ2hpbmVzZSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgQ2xvdWRyZWFtIChjbG91ZHJlYW1AZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3poLUNOJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn5LiA5pyIJywn5LqM5pyIJywn5LiJ5pyIJywn5Zub5pyIJywn5LqU5pyIJywn5YWt5pyIJyxcclxuXHRcdCfkuIPmnIgnLCflhavmnIgnLCfkuZ3mnIgnLCfljYHmnIgnLCfljYHkuIDmnIgnLCfljYHkuozmnIgnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfkuIAnLCfkuownLCfkuIknLCflm5snLCfkupQnLCflha0nLFxyXG5cdFx0J+S4gycsJ+WFqycsJ+S5nScsJ+WNgScsJ+WNgeS4gCcsJ+WNgeS6jCddLFxyXG5cdFx0ZGF5TmFtZXM6IFsn5pif5pyf5pelJywn5pif5pyf5LiAJywn5pif5pyf5LqMJywn5pif5pyf5LiJJywn5pif5pyf5ZubJywn5pif5pyf5LqUJywn5pif5pyf5YWtJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+WRqOaXpScsJ+WRqOS4gCcsJ+WRqOS6jCcsJ+WRqOS4iScsJ+WRqOWbmycsJ+WRqOS6lCcsJ+WRqOWFrSddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn5pelJywn5LiAJywn5LqMJywn5LiJJywn5ZubJywn5LqUJywn5YWtJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAneXl5eS1tbS1kZCcsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snemgtQ04nXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snemgtQ04nXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-zh-HK.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-zh-HK.js index 583f47e7a22..b856acda173 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-zh-HK.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-zh-HK.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtemgtSEsuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtemgtSEsuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBIb25nIEtvbmcgIENoaW5lc2UgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBTQ0NZIChzYW11ZWxjeWNoYW5AZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snemgtSEsnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWyfkuIDmnIgnLCfkuozmnIgnLCfkuInmnIgnLCflm5vmnIgnLCfkupTmnIgnLCflha3mnIgnLFxuXHRcdCfkuIPmnIgnLCflhavmnIgnLCfkuZ3mnIgnLCfljYHmnIgnLCfljYHkuIDmnIgnLCfljYHkuozmnIgnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn5LiAJywn5LqMJywn5LiJJywn5ZubJywn5LqUJywn5YWtJyxcblx0XHQn5LiDJywn5YWrJywn5LmdJywn5Y2BJywn5Y2B5LiAJywn5Y2B5LqMJ10sXG5cdFx0ZGF5TmFtZXM6IFsn5pif5pyf5pelJywn5pif5pyf5LiAJywn5pif5pyf5LqMJywn5pif5pyf5LiJJywn5pif5pyf5ZubJywn5pif5pyf5LqUJywn5pif5pyf5YWtJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyflkajml6UnLCflkajkuIAnLCflkajkuownLCflkajkuIknLCflkajlm5snLCflkajkupQnLCflkajlha0nXSxcblx0XHRkYXlOYW1lc01pbjogWyfml6UnLCfkuIAnLCfkuownLCfkuIknLCflm5snLCfkupQnLCflha0nXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQtbW0teXl5eScsXG5cdFx0Zmlyc3REYXk6IDAsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd6aC1ISyddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snemgtSEsnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtemgtSEsuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtemgtSEsuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEhvbmcgS29uZyAgQ2hpbmVzZSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgU0NDWSAoc2FtdWVsY3ljaGFuQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd6aC1ISyddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ+S4gOaciCcsJ+S6jOaciCcsJ+S4ieaciCcsJ+Wbm+aciCcsJ+S6lOaciCcsJ+WFreaciCcsXHJcblx0XHQn5LiD5pyIJywn5YWr5pyIJywn5Lmd5pyIJywn5Y2B5pyIJywn5Y2B5LiA5pyIJywn5Y2B5LqM5pyIJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn5LiAJywn5LqMJywn5LiJJywn5ZubJywn5LqUJywn5YWtJyxcclxuXHRcdCfkuIMnLCflhasnLCfkuZ0nLCfljYEnLCfljYHkuIAnLCfljYHkuownXSxcclxuXHRcdGRheU5hbWVzOiBbJ+aYn+acn+aXpScsJ+aYn+acn+S4gCcsJ+aYn+acn+S6jCcsJ+aYn+acn+S4iScsJ+aYn+acn+WbmycsJ+aYn+acn+S6lCcsJ+aYn+acn+WFrSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyflkajml6UnLCflkajkuIAnLCflkajkuownLCflkajkuIknLCflkajlm5snLCflkajkupQnLCflkajlha0nXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ+aXpScsJ+S4gCcsJ+S6jCcsJ+S4iScsJ+WbmycsJ+S6lCcsJ+WFrSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLW1tLXl5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDAsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3poLUhLJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3poLUhLJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-zh-TW.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-zh-TW.js index 0836ceda94d..2ab1dae9ea8 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-zh-TW.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-zh-TW.js @@ -27,4 +27,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtemgtVFcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtemgtVFcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBUcmFkaXRpb25hbCBDaGluZXNlIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgUmVzc29sIChyZXNzb2xAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snemgtVFcnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWyfkuIDmnIgnLCfkuozmnIgnLCfkuInmnIgnLCflm5vmnIgnLCfkupTmnIgnLCflha3mnIgnLFxuXHRcdCfkuIPmnIgnLCflhavmnIgnLCfkuZ3mnIgnLCfljYHmnIgnLCfljYHkuIDmnIgnLCfljYHkuozmnIgnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn5LiAJywn5LqMJywn5LiJJywn5ZubJywn5LqUJywn5YWtJyxcblx0XHQn5LiDJywn5YWrJywn5LmdJywn5Y2BJywn5Y2B5LiAJywn5Y2B5LqMJ10sXG5cdFx0ZGF5TmFtZXM6IFsn5pif5pyf5pelJywn5pif5pyf5LiAJywn5pif5pyf5LqMJywn5pif5pyf5LiJJywn5pif5pyf5ZubJywn5pif5pyf5LqUJywn5pif5pyf5YWtJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyflkajml6UnLCflkajkuIAnLCflkajkuownLCflkajkuIknLCflkajlm5snLCflkajkupQnLCflkajlha0nXSxcblx0XHRkYXlOYW1lc01pbjogWyfml6UnLCfkuIAnLCfkuownLCfkuIknLCflm5snLCfkupQnLCflha0nXSxcblx0XHRkYXRlRm9ybWF0OiAneXl5eS9tbS9kZCcsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd6aC1UVyddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snemgtVFcnXTtcblx0fVxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMtemgtVFcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMtemgtVFcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFRyYWRpdGlvbmFsIENoaW5lc2UgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IFJlc3NvbCAocmVzc29sQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd6aC1UVyddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ+S4gOaciCcsJ+S6jOaciCcsJ+S4ieaciCcsJ+Wbm+aciCcsJ+S6lOaciCcsJ+WFreaciCcsXHJcblx0XHQn5LiD5pyIJywn5YWr5pyIJywn5Lmd5pyIJywn5Y2B5pyIJywn5Y2B5LiA5pyIJywn5Y2B5LqM5pyIJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn5LiAJywn5LqMJywn5LiJJywn5ZubJywn5LqUJywn5YWtJyxcclxuXHRcdCfkuIMnLCflhasnLCfkuZ0nLCfljYEnLCfljYHkuIAnLCfljYHkuownXSxcclxuXHRcdGRheU5hbWVzOiBbJ+aYn+acn+aXpScsJ+aYn+acn+S4gCcsJ+aYn+acn+S6jCcsJ+aYn+acn+S4iScsJ+aYn+acn+WbmycsJ+aYn+acn+S6lCcsJ+aYn+acn+WFrSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyflkajml6UnLCflkajkuIAnLCflkajkuownLCflkajkuIknLCflkajlm5snLCflkajkupQnLCflkajlha0nXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ+aXpScsJ+S4gCcsJ+S6jCcsJ+S4iScsJ+WbmycsJ+S6lCcsJ+WFrSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXkvbW0vZGQnLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3poLVRXJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3poLVRXJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.all.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.all.js index 6e65200ad7c..ea28878b8ee 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.all.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.all.js @@ -3110,4 +3110,4 @@ })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuYWxsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy5hbGwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBDYWxlbmRhcnMgZm9yIGpRdWVyeSB2Mi4wLjEuXG4gICBXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpIEF1Z3VzdCAyMDA5LlxuICAgQXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvbGljZW5jZS5odG1sKSBsaWNlbnNlLiBcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xuXG4oZnVuY3Rpb24oJCkgeyAvLyBIaWRlIHNjb3BlLCBubyAkIGNvbmZsaWN0XG5cblx0ZnVuY3Rpb24gQ2FsZW5kYXJzKCkge1xuXHRcdHRoaXMucmVnaW9uYWxPcHRpb25zID0gW107XG5cdFx0dGhpcy5yZWdpb25hbE9wdGlvbnNbJyddID0ge1xuXHRcdFx0aW52YWxpZENhbGVuZGFyOiAnQ2FsZW5kYXIgezB9IG5vdCBmb3VuZCcsXG5cdFx0XHRpbnZhbGlkRGF0ZTogJ0ludmFsaWQgezB9IGRhdGUnLFxuXHRcdFx0aW52YWxpZE1vbnRoOiAnSW52YWxpZCB7MH0gbW9udGgnLFxuXHRcdFx0aW52YWxpZFllYXI6ICdJbnZhbGlkIHswfSB5ZWFyJyxcblx0XHRcdGRpZmZlcmVudENhbGVuZGFyczogJ0Nhbm5vdCBtaXggezB9IGFuZCB7MX0gZGF0ZXMnXG5cdFx0fTtcblx0XHR0aGlzLmxvY2FsID0gdGhpcy5yZWdpb25hbE9wdGlvbnNbJyddO1xuXHRcdHRoaXMuY2FsZW5kYXJzID0ge307XG5cdFx0dGhpcy5fbG9jYWxDYWxzID0ge307XG5cdH1cblxuXHQvKiogQ3JlYXRlIHRoZSBjYWxlbmRhcnMgcGx1Z2luLlxuXHRcdDxwPlByb3ZpZGVzIHN1cHBvcnQgZm9yIHZhcmlvdXMgd29ybGQgY2FsZW5kYXJzIGluIGEgY29uc2lzdGVudCBtYW5uZXIuPC9wPlxuXHQgXHRAY2xhc3MgQ2FsZW5kYXJzXG5cdFx0QGV4YW1wbGUgJC5jYWxlbmRhcnMuaW5zdGFuY2UoJ2p1bGlhbicpLm5ld0RhdGUoMjAxNCwgMTIsIDI1KSAqL1xuXHQkLmV4dGVuZChDYWxlbmRhcnMucHJvdG90eXBlLCB7XG5cblx0XHQvKiogT2J0YWluIGEgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24gYW5kIGxvY2FsaXNhdGlvbi5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNcblx0XHRcdEBwYXJhbSBbbmFtZT0nZ3JlZ29yaWFuJ10ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyLCBlLmcuICdncmVnb3JpYW4nLCAncGVyc2lhbicsICdpc2xhbWljJy5cblx0XHRcdEBwYXJhbSBbbGFuZ3VhZ2U9JyddIHtzdHJpbmd9IFRoZSBsYW5ndWFnZSBjb2RlIHRvIHVzZSBmb3IgbG9jYWxpc2F0aW9uIChkZWZhdWx0IGlzIEVuZ2xpc2gpLlxuXHRcdFx0QHJldHVybiB7Q2FsZW5kYXJ9IFRoZSBjYWxlbmRhciBhbmQgbG9jYWxpc2F0aW9uLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBjYWxlbmRhciBub3QgZm91bmQuICovXG5cdFx0aW5zdGFuY2U6IGZ1bmN0aW9uKG5hbWUsIGxhbmd1YWdlKSB7XG5cdFx0XHRuYW1lID0gKG5hbWUgfHwgJ2dyZWdvcmlhbicpLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRsYW5ndWFnZSA9IGxhbmd1YWdlIHx8ICcnO1xuXHRcdFx0dmFyIGNhbCA9IHRoaXMuX2xvY2FsQ2Fsc1tuYW1lICsgJy0nICsgbGFuZ3VhZ2VdO1xuXHRcdFx0aWYgKCFjYWwgJiYgdGhpcy5jYWxlbmRhcnNbbmFtZV0pIHtcblx0XHRcdFx0Y2FsID0gbmV3IHRoaXMuY2FsZW5kYXJzW25hbWVdKGxhbmd1YWdlKTtcblx0XHRcdFx0dGhpcy5fbG9jYWxDYWxzW25hbWUgKyAnLScgKyBsYW5ndWFnZV0gPSBjYWw7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWNhbCkge1xuXHRcdFx0XHR0aHJvdyAodGhpcy5sb2NhbC5pbnZhbGlkQ2FsZW5kYXIgfHwgdGhpcy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRDYWxlbmRhcikuXG5cdFx0XHRcdFx0cmVwbGFjZSgvXFx7MFxcfS8sIG5hbWUpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGNhbDtcblx0XHR9LFxuXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIC0gZm9yIHRvZGF5IGlmIG5vIG90aGVyIHBhcmFtZXRlcnMgZ2l2ZW4uXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb3B5IG9yIHRoZSB5ZWFyIGZvciB0aGUgZGF0ZS5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCBmb3IgdGhlIGRhdGUuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSBmb3IgdGhlIGRhdGUuXG5cdFx0XHRAcGFyYW0gW2NhbGVuZGFyPSdncmVnb3JpYW4nXSB7QmFzZUNhbGVuZGFyfHN0cmluZ30gVGhlIHVuZGVybHlpbmcgY2FsZW5kYXIgb3IgdGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyLlxuXHRcdFx0QHBhcmFtIFtsYW5ndWFnZT0nJ10ge3N0cmluZ30gVGhlIGxhbmd1YWdlIHRvIHVzZSBmb3IgbG9jYWxpc2F0aW9uIChkZWZhdWx0IEVuZ2xpc2gpLlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBuZXcgZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlLiAqL1xuXHRcdG5ld0RhdGU6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXksIGNhbGVuZGFyLCBsYW5ndWFnZSkge1xuXHRcdFx0Y2FsZW5kYXIgPSAoeWVhciAhPSBudWxsICYmIHllYXIueWVhciA/IHllYXIuY2FsZW5kYXIoKSA6ICh0eXBlb2YgY2FsZW5kYXIgPT09ICdzdHJpbmcnID9cblx0XHRcdFx0dGhpcy5pbnN0YW5jZShjYWxlbmRhciwgbGFuZ3VhZ2UpIDogY2FsZW5kYXIpKSB8fCB0aGlzLmluc3RhbmNlKCk7XG5cdFx0XHRyZXR1cm4gY2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcblx0XHR9XG5cdH0pO1xuXG5cdC8qKiBHZW5lcmljIGRhdGUsIGJhc2VkIG9uIGEgcGFydGljdWxhciBjYWxlbmRhci5cblx0XHRAY2xhc3MgQ0RhdGVcblx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIHVuZGVybHlpbmcgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24uXG5cdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIHllYXIgZm9yIHRoaXMgZGF0ZS5cblx0XHRAcGFyYW0gbW9udGgge251bWJlcn0gVGhlIG1vbnRoIGZvciB0aGlzIGRhdGUuXG5cdFx0QHBhcmFtIGRheSB7bnVtYmVyfSBUaGUgZGF5IGZvciB0aGlzIGRhdGUuXG5cdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBkYXRlIG9iamVjdC5cblx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZS4gKi9cblx0ZnVuY3Rpb24gQ0RhdGUoY2FsZW5kYXIsIHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHR0aGlzLl9jYWxlbmRhciA9IGNhbGVuZGFyO1xuXHRcdHRoaXMuX3llYXIgPSB5ZWFyO1xuXHRcdHRoaXMuX21vbnRoID0gbW9udGg7XG5cdFx0dGhpcy5fZGF5ID0gZGF5O1xuXHRcdGlmICh0aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbCA9PT0gMCAmJlxuXHRcdFx0XHQhdGhpcy5fY2FsZW5kYXIuaXNWYWxpZCh0aGlzLl95ZWFyLCB0aGlzLl9tb250aCwgdGhpcy5fZGF5KSkge1xuXHRcdFx0dGhyb3cgKCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZERhdGUpLlxuXHRcdFx0XHRyZXBsYWNlKC9cXHswXFx9LywgdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIFBhZCBhIG51bWVyaWMgdmFsdWUgd2l0aCBsZWFkaW5nIHplcm9lcy5cblx0XHRAcHJpdmF0ZVxuXHRcdEBwYXJhbSB2YWx1ZSB7bnVtYmVyfSBUaGUgbnVtYmVyIHRvIGZvcm1hdC5cblx0XHRAcGFyYW0gbGVuZ3RoIHtudW1iZXJ9IFRoZSBtaW5pbXVtIGxlbmd0aC5cblx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgbnVtYmVyLiAqL1xuXHRmdW5jdGlvbiBwYWQodmFsdWUsIGxlbmd0aCkge1xuXHRcdHZhbHVlID0gJycgKyB2YWx1ZTtcblx0XHRyZXR1cm4gJzAwMDAwMCcuc3Vic3RyaW5nKDAsIGxlbmd0aCAtIHZhbHVlLmxlbmd0aCkgKyB2YWx1ZTtcblx0fVxuXG5cdCQuZXh0ZW5kKENEYXRlLnByb3RvdHlwZSwge1xuXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcGFyYW0gW3llYXJdIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvcHkgb3IgdGhlIHllYXIgZm9yIHRoZSBkYXRlIChkZWZhdWx0IHRoaXMgZGF0ZSkuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggZm9yIHRoZSBkYXRlLlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgZm9yIHRoZSBkYXRlLlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBuZXcgZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlLiAqL1xuXHRcdG5ld0RhdGU6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5uZXdEYXRlKCh5ZWFyID09IG51bGwgPyB0aGlzIDogeWVhciksIG1vbnRoLCBkYXkpO1xuXHRcdH0sXG5cblx0XHQvKiogU2V0IG9yIHJldHJpZXZlIHRoZSB5ZWFyIGZvciB0aGlzIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcblx0XHRcdEBwYXJhbSBbeWVhcl0ge251bWJlcn0gVGhlIHllYXIgZm9yIHRoZSBkYXRlLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfENEYXRlfSBUaGUgZGF0ZSdzIHllYXIgKGlmIG5vIHBhcmFtZXRlcikgb3IgdGhlIHVwZGF0ZWQgZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlLiAqL1xuXHRcdHllYXI6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHJldHVybiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCA/IHRoaXMuX3llYXIgOiB0aGlzLnNldCh5ZWFyLCAneScpKTtcblx0XHR9LFxuXG5cdFx0LyoqIFNldCBvciByZXRyaWV2ZSB0aGUgbW9udGggZm9yIHRoaXMgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIGZvciB0aGUgZGF0ZS5cblx0XHRcdEByZXR1cm4ge251bWJlcnxDRGF0ZX0gVGhlIGRhdGUncyBtb250aCAoaWYgbm8gcGFyYW1ldGVyKSBvciB0aGUgdXBkYXRlZCBkYXRlLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUuICovXG5cdFx0bW9udGg6IGZ1bmN0aW9uKG1vbnRoKSB7XG5cdFx0XHRyZXR1cm4gKGFyZ3VtZW50cy5sZW5ndGggPT09IDAgPyB0aGlzLl9tb250aCA6IHRoaXMuc2V0KG1vbnRoLCAnbScpKTtcblx0XHR9LFxuXG5cdFx0LyoqIFNldCBvciByZXRyaWV2ZSB0aGUgZGF5IGZvciB0aGlzIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IGZvciB0aGUgZGF0ZS5cblx0XHRcdEByZXR1cm4ge251bWJlcnxDRGF0YX0gVGhlIGRhdGUncyBkYXkgKGlmIG5vIHBhcmFtZXRlcikgb3IgdGhlIHVwZGF0ZWQgZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlLiAqL1xuXHRcdGRheTogZnVuY3Rpb24oZGF5KSB7XG5cdFx0XHRyZXR1cm4gKGFyZ3VtZW50cy5sZW5ndGggPT09IDAgPyB0aGlzLl9kYXkgOiB0aGlzLnNldChkYXksICdkJykpO1xuXHRcdH0sXG5cblx0XHQvKiogU2V0IG5ldyB2YWx1ZXMgZm9yIHRoaXMgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIHllYXIgZm9yIHRoZSBkYXRlLlxuXHRcdFx0QHBhcmFtIG1vbnRoIHtudW1iZXJ9IFRoZSBtb250aCBmb3IgdGhlIGRhdGUuXG5cdFx0XHRAcGFyYW0gZGF5IHtudW1iZXJ9IFRoZSBkYXkgZm9yIHRoZSBkYXRlLlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSB1cGRhdGVkIGRhdGUuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZS4gKi9cblx0XHRkYXRlOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHRpZiAoIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQoeWVhciwgbW9udGgsIGRheSkpIHtcblx0XHRcdFx0dGhyb3cgKCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZERhdGUpLlxuXHRcdFx0XHRcdHJlcGxhY2UoL1xcezBcXH0vLCB0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3llYXIgPSB5ZWFyO1xuXHRcdFx0dGhpcy5fbW9udGggPSBtb250aDtcblx0XHRcdHRoaXMuX2RheSA9IGRheTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGluIGEgbGVhcCB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGlzIGEgbGVhcCB5ZWFyLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LiAqL1xuXHRcdGxlYXBZZWFyOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5sZWFwWWVhcih0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBlcG9jaCBkZXNpZ25hdG9yIGZvciB0aGlzIGRhdGUsIGUuZy4gQkNFIG9yIENFLlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBjdXJyZW50IGVwb2NoLiAqL1xuXHRcdGVwb2NoOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5lcG9jaCh0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqIEZvcm1hdCB0aGUgeWVhciwgaWYgbm90IGEgc2ltcGxlIHNlcXVlbnRpYWwgbnVtYmVyLlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgeWVhci4gKi9cblx0XHRmb3JtYXRZZWFyOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5mb3JtYXRZZWFyKHRoaXMpO1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIG1vbnRoIG9mIHRoZSB5ZWFyIGZvciB0aGlzIGRhdGUsXG5cdFx0XHRpLmUuIHRoZSBtb250aCdzIHBvc2l0aW9uIHdpdGhpbiBhIG51bWJlcmVkIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG1vbnRoIG9mIHRoZSB5ZWFyOiA8Y29kZT5taW5Nb250aDwvY29kZT4gdG8gbW9udGhzIHBlciB5ZWFyLiAqL1xuXHRcdG1vbnRoT2ZZZWFyOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5tb250aE9mWWVhcih0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSB3ZWVrIG9mIHRoZSB5ZWFyIGZvciB0aGlzIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIHdlZWsgb2YgdGhlIHllYXI6IDEgdG8gd2Vla3MgcGVyIHllYXIuICovXG5cdFx0d2Vla09mWWVhcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla09mWWVhcih0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGUgeWVhciBmb3IgdGhpcyBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIHllYXIuICovXG5cdFx0ZGF5c0luWWVhcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luWWVhcih0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBkYXkgb2YgdGhlIHllYXIgZm9yIHRoaXMgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZGF5IG9mIHRoZSB5ZWFyOiAxIHRvIGRheXMgcGVyIHllYXIuICovXG5cdFx0ZGF5T2ZZZWFyOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZlllYXIodGhpcyk7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhlIG1vbnRoIGZvciB0aGlzIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzLiAqL1xuXHRcdGRheXNJbk1vbnRoOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5kYXlzSW5Nb250aCh0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBkYXkgb2YgdGhlIHdlZWsgZm9yIHRoaXMgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZGF5IG9mIHRoZSB3ZWVrOiAwIHRvIG51bWJlciBvZiBkYXlzIC0gMS4gKi9cblx0XHRkYXlPZldlZWs6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mV2Vlayh0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBhIHdlZWsgZGF5LlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBhIHdlZWsgZGF5LCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LiAqL1xuXHRcdHdlZWtEYXk6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtEYXkodGhpcyk7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHJldHVybiB7b2JqZWN0fSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIC0gY29udGVudHMgZGVwZW5kcyBvbiBjYWxlbmRhci4gKi9cblx0XHRleHRyYUluZm86IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmV4dHJhSW5mbyh0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqIEFkZCBwZXJpb2QocykgdG8gYSBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcGVyaW9kcyB0byBhZGp1c3QgYnkuXG5cdFx0XHRAcGFyYW0gcGVyaW9kIHtzdHJpbmd9IE9uZSBvZiAneScgZm9yIHllYXIsICdtJyBmb3IgbW9udGgsICd3JyBmb3Igd2VlaywgJ2QnIGZvciBkYXkuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIHVwZGF0ZWQgZGF0ZS4gKi9cblx0XHRhZGQ6IGZ1bmN0aW9uKG9mZnNldCwgcGVyaW9kKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuYWRkKHRoaXMsIG9mZnNldCwgcGVyaW9kKTtcblx0XHR9LFxuXG5cdFx0LyoqIFNldCBhIHBvcnRpb24gb2YgdGhlIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcblx0XHRcdEBwYXJhbSB2YWx1ZSB7bnVtYmVyfSBUaGUgbmV3IHZhbHVlIGZvciB0aGUgcGVyaW9kLlxuXHRcdFx0QHBhcmFtIHBlcmlvZCB7c3RyaW5nfSBPbmUgb2YgJ3knIGZvciB5ZWFyLCAnbScgZm9yIG1vbnRoLCAnZCcgZm9yIGRheS5cblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgdXBkYXRlZCBkYXRlLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBub3QgYSB2YWxpZCBkYXRlLiAqL1xuXHRcdHNldDogZnVuY3Rpb24odmFsdWUsIHBlcmlvZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnNldCh0aGlzLCB2YWx1ZSwgcGVyaW9kKTtcblx0XHR9LFxuXG5cdFx0LyoqIENvbXBhcmUgdGhpcyBkYXRlIHRvIGFub3RoZXIgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgb3RoZXIgZGF0ZS5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gLTEgaWYgdGhpcyBkYXRlIGlzIGJlZm9yZSB0aGUgb3RoZXIgZGF0ZSxcblx0XHRcdFx0XHQwIGlmIHRoZXkgYXJlIGVxdWFsLCBvciArMSBpZiB0aGlzIGRhdGUgaXMgYWZ0ZXIgdGhlIG90aGVyIGRhdGUuICovXG5cdFx0Y29tcGFyZVRvOiBmdW5jdGlvbihkYXRlKSB7XG5cdFx0XHRpZiAodGhpcy5fY2FsZW5kYXIubmFtZSAhPT0gZGF0ZS5fY2FsZW5kYXIubmFtZSkge1xuXHRcdFx0XHR0aHJvdyAoJC5jYWxlbmRhcnMubG9jYWwuZGlmZmVyZW50Q2FsZW5kYXJzIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uZGlmZmVyZW50Q2FsZW5kYXJzKS5cblx0XHRcdFx0XHRyZXBsYWNlKC9cXHswXFx9LywgdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSkucmVwbGFjZSgvXFx7MVxcfS8sIGRhdGUuX2NhbGVuZGFyLmxvY2FsLm5hbWUpO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGMgPSAodGhpcy5feWVhciAhPT0gZGF0ZS5feWVhciA/IHRoaXMuX3llYXIgLSBkYXRlLl95ZWFyIDpcblx0XHRcdFx0dGhpcy5fbW9udGggIT09IGRhdGUuX21vbnRoID8gdGhpcy5tb250aE9mWWVhcigpIC0gZGF0ZS5tb250aE9mWWVhcigpIDpcblx0XHRcdFx0dGhpcy5fZGF5IC0gZGF0ZS5fZGF5KTtcblx0XHRcdHJldHVybiAoYyA9PT0gMCA/IDAgOiAoYyA8IDAgPyAtMSA6ICsxKSk7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgY2FsZW5kYXIgYmFja2luZyB0aGlzIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcblx0XHRcdEByZXR1cm4ge0Jhc2VDYWxlbmRhcn0gVGhlIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uLiAqL1xuXHRcdGNhbGVuZGFyOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhcjtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBKdWxpYW4gZGF0ZSBlcXVpdmFsZW50IGZvciB0aGlzIGRhdGUsXG5cdFx0XHRpLmUuIGRheXMgc2luY2UgSmFudWFyeSAxLCA0NzEzIEJDRSBHcmVlbndpY2ggbm9vbi5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZXF1aXZhbGVudCBKdWxpYW4gZGF0ZS4gKi9cblx0XHR0b0pEOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci50b0pEKHRoaXMpO1xuXHRcdH0sXG5cblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgZnJvbSBhIEp1bGlhbiBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcGFyYW0gamQge251bWJlcn0gVGhlIEp1bGlhbiBkYXRlIHRvIGNvbnZlcnQuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIGVxdWl2YWxlbnQgZGF0ZS4gKi9cblx0XHRmcm9tSkQ6IGZ1bmN0aW9uKGpkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZnJvbUpEKGpkKTtcblx0XHR9LFxuXG5cdFx0LyoqIENvbnZlcnQgdGhpcyBkYXRlIHRvIGEgc3RhbmRhcmQgKEdyZWdvcmlhbikgSmF2YVNjcmlwdCBEYXRlLlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcmV0dXJuIHtEYXRlfSBUaGUgZXF1aXZhbGVudCBKYXZhU2NyaXB0IGRhdGUuICovXG5cdFx0dG9KU0RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnRvSlNEYXRlKHRoaXMpO1xuXHRcdH0sXG5cblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgZnJvbSBhIHN0YW5kYXJkIChHcmVnb3JpYW4pIEphdmFTY3JpcHQgRGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHBhcmFtIGpzZCB7RGF0ZX0gVGhlIEphdmFTY3JpcHQgZGF0ZSB0byBjb252ZXJ0LlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXG5cdFx0ZnJvbUpTRGF0ZTogZnVuY3Rpb24oanNkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZnJvbUpTRGF0ZShqc2QpO1xuXHRcdH0sXG5cblx0XHQvKiogQ29udmVydCB0byBhIHN0cmluZyBmb3IgZGlzcGxheS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGlzIGRhdGUgYXMgYSBzdHJpbmcuICovXG5cdFx0dG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuICh0aGlzLnllYXIoKSA8IDAgPyAnLScgOiAnJykgKyBwYWQoTWF0aC5hYnModGhpcy55ZWFyKCkpLCA0KSArXG5cdFx0XHRcdCctJyArIHBhZCh0aGlzLm1vbnRoKCksIDIpICsgJy0nICsgcGFkKHRoaXMuZGF5KCksIDIpO1xuXHRcdH1cblx0fSk7XG5cblx0LyoqIEJhc2ljIGZ1bmN0aW9uYWxpdHkgZm9yIGFsbCBjYWxlbmRhcnMuXG5cdFx0T3RoZXIgY2FsZW5kYXJzIHNob3VsZCBleHRlbmQgdGhpczpcblx0XHQ8cHJlPk90aGVyQ2FsZW5kYXIucHJvdG90eXBlID0gbmV3IEJhc2VDYWxlbmRhcjs8L3ByZT5cblx0XHRAY2xhc3MgQmFzZUNhbGVuZGFyICovXG5cdGZ1bmN0aW9uIEJhc2VDYWxlbmRhcigpIHtcblx0XHR0aGlzLnNob3J0WWVhckN1dG9mZiA9ICcrMTAnO1xuXHR9XG5cblx0JC5leHRlbmQoQmFzZUNhbGVuZGFyLnByb3RvdHlwZSwge1xuXHRcdF92YWxpZGF0ZUxldmVsOiAwLCAvLyBcIlN0YWNrXCIgdG8gdHVybiB2YWxpZGF0aW9uIG9uL29mZlxuXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIHdpdGhpbiB0aGlzIGNhbGVuZGFyIC0gdG9kYXkgaWYgbm8gcGFyYW1ldGVycyBnaXZlbi5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGR1cGxpY2F0ZSBvciB0aGUgeWVhciBmb3IgdGhlIGRhdGUuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggZm9yIHRoZSBkYXRlLlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgZm9yIHRoZSBkYXRlLlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBuZXcgZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgbm90IGEgdmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdG5ld0RhdGU6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdGlmICh5ZWFyID09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMudG9kYXkoKTtcblx0XHRcdH1cblx0XHRcdGlmICh5ZWFyLnllYXIpIHtcblx0XHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSxcblx0XHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcblx0XHRcdFx0ZGF5ID0geWVhci5kYXkoKTtcblx0XHRcdFx0bW9udGggPSB5ZWFyLm1vbnRoKCk7XG5cdFx0XHRcdHllYXIgPSB5ZWFyLnllYXIoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBuZXcgQ0RhdGUodGhpcywgeWVhciwgbW9udGgsIGRheSk7XG5cdFx0fSxcblxuXHRcdC8qKiBDcmVhdGUgYSBuZXcgZGF0ZSBmb3IgdG9kYXkuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVG9kYXkncyBkYXRlLiAqL1xuXHRcdHRvZGF5OiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmZyb21KU0RhdGUobmV3IERhdGUoKSk7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgZXBvY2ggZGVzaWduYXRvciBmb3IgdGhpcyBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgY3VycmVudCBlcG9jaC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0ZXBvY2g6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksXG5cdFx0XHRcdCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZFllYXIpO1xuXHRcdFx0cmV0dXJuIChkYXRlLnllYXIoKSA8IDAgPyB0aGlzLmxvY2FsLmVwb2Noc1swXSA6IHRoaXMubG9jYWwuZXBvY2hzWzFdKTtcblx0XHR9LFxuXG5cdFx0LyoqIEZvcm1hdCB0aGUgeWVhciwgaWYgbm90IGEgc2ltcGxlIHNlcXVlbnRpYWwgbnVtYmVyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBmb3JtYXQgb3IgdGhlIHllYXIgdG8gZm9ybWF0LlxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHllYXIuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdGZvcm1hdFllYXI6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksXG5cdFx0XHRcdCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZFllYXIpO1xuXHRcdFx0cmV0dXJuIChkYXRlLnllYXIoKSA8IDAgPyAnLScgOiAnJykgKyBwYWQoTWF0aC5hYnMoZGF0ZS55ZWFyKCkpLCA0KVxuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBtb250aHMgaW4gYSB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIG1vbnRocy5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0bW9udGhzSW5ZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XG5cdFx0XHR0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkWWVhcik7XG5cdFx0XHRyZXR1cm4gMTI7XG5cdFx0fSxcblxuXHRcdC8qKiBDYWxjdWxhdGUgdGhlIG1vbnRoJ3Mgb3JkaW5hbCBwb3NpdGlvbiB3aXRoaW4gdGhlIHllYXIgLVxuXHRcdFx0Zm9yIHRob3NlIGNhbGVuZGFycyB0aGF0IGRvbid0IHN0YXJ0IGF0IG1vbnRoIDEhXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gbW9udGgge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBvcmRpbmFsIHBvc2l0aW9uLCBzdGFydGluZyBmcm9tIDxjb2RlPm1pbk1vbnRoPC9jb2RlPi5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyL21vbnRoIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0bW9udGhPZlllYXI6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCB0aGlzLm1pbkRheSxcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZE1vbnRoIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZE1vbnRoKTtcblx0XHRcdHJldHVybiAoZGF0ZS5tb250aCgpICsgdGhpcy5tb250aHNJblllYXIoZGF0ZSkgLSB0aGlzLmZpcnN0TW9udGgpICVcblx0XHRcdFx0dGhpcy5tb250aHNJblllYXIoZGF0ZSkgKyB0aGlzLm1pbk1vbnRoO1xuXHRcdH0sXG5cblx0XHQvKiogQ2FsY3VsYXRlIGFjdHVhbCBtb250aCBmcm9tIG9yZGluYWwgcG9zaXRpb24sIHN0YXJ0aW5nIGZyb20gbWluTW9udGguXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7bnVtYmVyfSBUaGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIG9yZCB7bnVtYmVyfSBUaGUgbW9udGgncyBvcmRpbmFsIHBvc2l0aW9uLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbW9udGgncyBudW1iZXIuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhci9tb250aC4gKi9cblx0XHRmcm9tTW9udGhPZlllYXI6IGZ1bmN0aW9uKHllYXIsIG9yZCkge1xuXHRcdFx0dmFyIG0gPSAob3JkICsgdGhpcy5maXJzdE1vbnRoIC0gMiAqIHRoaXMubWluTW9udGgpICVcblx0XHRcdFx0dGhpcy5tb250aHNJblllYXIoeWVhcikgKyB0aGlzLm1pbk1vbnRoO1xuXHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgbSwgdGhpcy5taW5EYXksXG5cdFx0XHRcdCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRNb250aCB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRNb250aCk7XG5cdFx0XHRyZXR1cm4gbTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBhIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cy5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0ZGF5c0luWWVhcjogZnVuY3Rpb24oeWVhcikge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkWWVhcik7XG5cdFx0XHRyZXR1cm4gKHRoaXMubGVhcFllYXIoZGF0ZSkgPyAzNjYgOiAzNjUpO1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIGRheSBvZiB0aGUgeWVhciBmb3IgYSBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gY29udmVydCBvciB0aGUgeWVhciB0byBjb252ZXJ0LlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGNvbnZlcnQuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBjb252ZXJ0LlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZGF5IG9mIHRoZSB5ZWFyLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRkYXlPZlllYXI6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSxcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSk7XG5cdFx0XHRyZXR1cm4gZGF0ZS50b0pEKCkgLSB0aGlzLm5ld0RhdGUoZGF0ZS55ZWFyKCksXG5cdFx0XHRcdHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGRhdGUueWVhcigpLCB0aGlzLm1pbk1vbnRoKSwgdGhpcy5taW5EYXkpLnRvSkQoKSArIDE7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSB3ZWVrLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMuICovXG5cdFx0ZGF5c0luV2VlazogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gNztcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBkYXkgb2YgdGhlIHdlZWsgZm9yIGEgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGRheSBvZiB0aGUgd2VlazogMCB0byBudW1iZXIgb2YgZGF5cyAtIDEuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdGRheU9mV2VlazogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgZGF5LFxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcblx0XHRcdHJldHVybiAoTWF0aC5mbG9vcih0aGlzLnRvSkQoZGF0ZSkpICsgMikgJSB0aGlzLmRheXNJbldlZWsoKTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7b2JqZWN0fSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIC0gY29udGVudHMgZGVwZW5kcyBvbiBjYWxlbmRhci5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0ZXh0cmFJbmZvOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHR0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgZGF5LFxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9LFxuXG5cdFx0LyoqIEFkZCBwZXJpb2QocykgdG8gYSBkYXRlLlxuXHRcdFx0Q2F0ZXIgZm9yIG5vIHllYXIgemVyby5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZX0gVGhlIHN0YXJ0aW5nIGRhdGUuXG5cdFx0XHRAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcGVyaW9kcyB0byBhZGp1c3QgYnkuXG5cdFx0XHRAcGFyYW0gcGVyaW9kIHtzdHJpbmd9IE9uZSBvZiAneScgZm9yIHllYXIsICdtJyBmb3IgbW9udGgsICd3JyBmb3Igd2VlaywgJ2QnIGZvciBkYXkuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIHVwZGF0ZWQgZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRhZGQ6IGZ1bmN0aW9uKGRhdGUsIG9mZnNldCwgcGVyaW9kKSB7XG5cdFx0XHR0aGlzLl92YWxpZGF0ZShkYXRlLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSk7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY29ycmVjdEFkZChkYXRlLCB0aGlzLl9hZGQoZGF0ZSwgb2Zmc2V0LCBwZXJpb2QpLCBvZmZzZXQsIHBlcmlvZCk7XG5cdFx0fSxcblxuXHRcdC8qKiBBZGQgcGVyaW9kKHMpIHRvIGEgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBzdGFydGluZyBkYXRlLlxuXHRcdFx0QHBhcmFtIG9mZnNldCB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHBlcmlvZHMgdG8gYWRqdXN0IGJ5LlxuXHRcdFx0QHBhcmFtIHBlcmlvZCB7c3RyaW5nfSBPbmUgb2YgJ3knIGZvciB5ZWFyLCAnbScgZm9yIG1vbnRoLCAndycgZm9yIHdlZWssICdkJyBmb3IgZGF5LlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSB1cGRhdGVkIGRhdGUuICovXG5cdFx0X2FkZDogZnVuY3Rpb24oZGF0ZSwgb2Zmc2V0LCBwZXJpb2QpIHtcblx0XHRcdHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKztcblx0XHRcdGlmIChwZXJpb2QgPT09ICdkJyB8fCBwZXJpb2QgPT09ICd3Jykge1xuXHRcdFx0XHR2YXIgamQgPSBkYXRlLnRvSkQoKSArIG9mZnNldCAqIChwZXJpb2QgPT09ICd3JyA/IHRoaXMuZGF5c0luV2VlaygpIDogMSk7XG5cdFx0XHRcdHZhciBkID0gZGF0ZS5jYWxlbmRhcigpLmZyb21KRChqZCk7XG5cdFx0XHRcdHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLTtcblx0XHRcdFx0cmV0dXJuIFtkLnllYXIoKSwgZC5tb250aCgpLCBkLmRheSgpXTtcblx0XHRcdH1cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHZhciB5ID0gZGF0ZS55ZWFyKCkgKyAocGVyaW9kID09PSAneScgPyBvZmZzZXQgOiAwKTtcblx0XHRcdFx0dmFyIG0gPSBkYXRlLm1vbnRoT2ZZZWFyKCkgKyAocGVyaW9kID09PSAnbScgPyBvZmZzZXQgOiAwKTtcblx0XHRcdFx0dmFyIGQgPSBkYXRlLmRheSgpOy8vICsgKHBlcmlvZCA9PT0gJ2QnID8gb2Zmc2V0IDogMCkgK1xuXHRcdFx0XHRcdC8vKHBlcmlvZCA9PT0gJ3cnID8gb2Zmc2V0ICogdGhpcy5kYXlzSW5XZWVrKCkgOiAwKTtcblx0XHRcdFx0dmFyIHJlc3luY1llYXJNb250aCA9IGZ1bmN0aW9uKGNhbGVuZGFyKSB7XG5cdFx0XHRcdFx0d2hpbGUgKG0gPCBjYWxlbmRhci5taW5Nb250aCkge1xuXHRcdFx0XHRcdFx0eS0tO1xuXHRcdFx0XHRcdFx0bSArPSBjYWxlbmRhci5tb250aHNJblllYXIoeSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciB5ZWFyTW9udGhzID0gY2FsZW5kYXIubW9udGhzSW5ZZWFyKHkpO1xuXHRcdFx0XHRcdHdoaWxlIChtID4geWVhck1vbnRocyAtIDEgKyBjYWxlbmRhci5taW5Nb250aCkge1xuXHRcdFx0XHRcdFx0eSsrO1xuXHRcdFx0XHRcdFx0bSAtPSB5ZWFyTW9udGhzO1xuXHRcdFx0XHRcdFx0eWVhck1vbnRocyA9IGNhbGVuZGFyLm1vbnRoc0luWWVhcih5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChwZXJpb2QgPT09ICd5Jykge1xuXHRcdFx0XHRcdGlmIChkYXRlLm1vbnRoKCkgIT09IHRoaXMuZnJvbU1vbnRoT2ZZZWFyKHksIG0pKSB7IC8vIEhlYnJld1xuXHRcdFx0XHRcdFx0bSA9IHRoaXMubmV3RGF0ZSh5LCBkYXRlLm1vbnRoKCksIHRoaXMubWluRGF5KS5tb250aE9mWWVhcigpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtID0gTWF0aC5taW4obSwgdGhpcy5tb250aHNJblllYXIoeSkpO1xuXHRcdFx0XHRcdGQgPSBNYXRoLm1pbihkLCB0aGlzLmRheXNJbk1vbnRoKHksIHRoaXMuZnJvbU1vbnRoT2ZZZWFyKHksIG0pKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAocGVyaW9kID09PSAnbScpIHtcblx0XHRcdFx0XHRyZXN5bmNZZWFyTW9udGgodGhpcyk7XG5cdFx0XHRcdFx0ZCA9IE1hdGgubWluKGQsIHRoaXMuZGF5c0luTW9udGgoeSwgdGhpcy5mcm9tTW9udGhPZlllYXIoeSwgbSkpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgeW1kID0gW3ksIHRoaXMuZnJvbU1vbnRoT2ZZZWFyKHksIG0pLCBkXTtcblx0XHRcdFx0dGhpcy5fdmFsaWRhdGVMZXZlbC0tO1xuXHRcdFx0XHRyZXR1cm4geW1kO1xuXHRcdFx0fVxuXHRcdFx0Y2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhpcy5fdmFsaWRhdGVMZXZlbC0tO1xuXHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogQ29ycmVjdCBhIGNhbmRpZGF0ZSBkYXRlIGFmdGVyIGFkZGluZyBwZXJpb2QocykgdG8gYSBkYXRlLlxuXHRcdFx0SGFuZGxlIG5vIHllYXIgemVybyBpZiBuZWNlc3NhcnkuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgc3RhcnRpbmcgZGF0ZS5cblx0XHRcdEBwYXJhbSB5bWQge251bWJlcltdfSBUaGUgYWRkZWQgZGF0ZS5cblx0XHRcdEBwYXJhbSBvZmZzZXQge251bWJlcn0gVGhlIG51bWJlciBvZiBwZXJpb2RzIHRvIGFkanVzdCBieS5cblx0XHRcdEBwYXJhbSBwZXJpb2Qge3N0cmluZ30gT25lIG9mICd5JyBmb3IgeWVhciwgJ20nIGZvciBtb250aCwgJ3cnIGZvciB3ZWVrLCAnZCcgZm9yIGRheS5cblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgdXBkYXRlZCBkYXRlLiAqL1xuXHRcdF9jb3JyZWN0QWRkOiBmdW5jdGlvbihkYXRlLCB5bWQsIG9mZnNldCwgcGVyaW9kKSB7XG5cdFx0XHRpZiAoIXRoaXMuaGFzWWVhclplcm8gJiYgKHBlcmlvZCA9PT0gJ3knIHx8IHBlcmlvZCA9PT0gJ20nKSkge1xuXHRcdFx0XHRpZiAoeW1kWzBdID09PSAwIHx8IC8vIEluIHllYXIgemVyb1xuXHRcdFx0XHRcdFx0KGRhdGUueWVhcigpID4gMCkgIT09ICh5bWRbMF0gPiAwKSkgeyAvLyBDcm9zc2VkIHllYXIgemVyb1xuXHRcdFx0XHRcdHZhciBhZGogPSB7eTogWzEsIDEsICd5J10sIG06IFsxLCB0aGlzLm1vbnRoc0luWWVhcigtMSksICdtJ10sXG5cdFx0XHRcdFx0XHR3OiBbdGhpcy5kYXlzSW5XZWVrKCksIHRoaXMuZGF5c0luWWVhcigtMSksICdkJ10sXG5cdFx0XHRcdFx0XHRkOiBbMSwgdGhpcy5kYXlzSW5ZZWFyKC0xKSwgJ2QnXX1bcGVyaW9kXTtcblx0XHRcdFx0XHR2YXIgZGlyID0gKG9mZnNldCA8IDAgPyAtMSA6ICsxKTtcblx0XHRcdFx0XHR5bWQgPSB0aGlzLl9hZGQoZGF0ZSwgb2Zmc2V0ICogYWRqWzBdICsgZGlyICogYWRqWzFdLCBhZGpbMl0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGF0ZS5kYXRlKHltZFswXSwgeW1kWzFdLCB5bWRbMl0pO1xuXHRcdH0sXG5cblx0XHQvKiogU2V0IGEgcG9ydGlvbiBvZiB0aGUgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZX0gVGhlIHN0YXJ0aW5nIGRhdGUuXG5cdFx0XHRAcGFyYW0gdmFsdWUge251bWJlcn0gVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIHBlcmlvZC5cblx0XHRcdEBwYXJhbSBwZXJpb2Qge3N0cmluZ30gT25lIG9mICd5JyBmb3IgeWVhciwgJ20nIGZvciBtb250aCwgJ2QnIGZvciBkYXkuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIHVwZGF0ZWQgZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0c2V0OiBmdW5jdGlvbihkYXRlLCB2YWx1ZSwgcGVyaW9kKSB7XG5cdFx0XHR0aGlzLl92YWxpZGF0ZShkYXRlLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSk7XG5cdFx0XHR2YXIgeSA9IChwZXJpb2QgPT09ICd5JyA/IHZhbHVlIDogZGF0ZS55ZWFyKCkpO1xuXHRcdFx0dmFyIG0gPSAocGVyaW9kID09PSAnbScgPyB2YWx1ZSA6IGRhdGUubW9udGgoKSk7XG5cdFx0XHR2YXIgZCA9IChwZXJpb2QgPT09ICdkJyA/IHZhbHVlIDogZGF0ZS5kYXkoKSk7XG5cdFx0XHRpZiAocGVyaW9kID09PSAneScgfHwgcGVyaW9kID09PSAnbScpIHtcblx0XHRcdFx0ZCA9IE1hdGgubWluKGQsIHRoaXMuZGF5c0luTW9udGgoeSwgbSkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRhdGUuZGF0ZSh5LCBtLCBkKTtcblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIGEgZGF0ZSBpcyB2YWxpZCBmb3IgdGhpcyBjYWxlbmRhci5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gbW9udGgge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gZGF5IHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGEgdmFsaWQgZGF0ZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC4gKi9cblx0XHRpc1ZhbGlkOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHR0aGlzLl92YWxpZGF0ZUxldmVsKys7XG5cdFx0XHR2YXIgdmFsaWQgPSAodGhpcy5oYXNZZWFyWmVybyB8fCB5ZWFyICE9PSAwKTtcblx0XHRcdGlmICh2YWxpZCkge1xuXHRcdFx0XHR2YXIgZGF0ZSA9IHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgdGhpcy5taW5EYXkpO1xuXHRcdFx0XHR2YWxpZCA9IChtb250aCA+PSB0aGlzLm1pbk1vbnRoICYmIG1vbnRoIC0gdGhpcy5taW5Nb250aCA8IHRoaXMubW9udGhzSW5ZZWFyKGRhdGUpKSAmJlxuXHRcdFx0XHRcdChkYXkgPj0gdGhpcy5taW5EYXkgJiYgZGF5IC0gdGhpcy5taW5EYXkgPCB0aGlzLmRheXNJbk1vbnRoKGRhdGUpKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLTtcblx0XHRcdHJldHVybiB2YWxpZDtcblx0XHR9LFxuXG5cdFx0LyoqIENvbnZlcnQgdGhlIGRhdGUgdG8gYSBzdGFuZGFyZCAoR3JlZ29yaWFuKSBKYXZhU2NyaXB0IERhdGUuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb252ZXJ0IG9yIHRoZSB5ZWFyIHRvIGNvbnZlcnQuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gY29udmVydC5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGNvbnZlcnQuXG5cdFx0XHRAcmV0dXJuIHtEYXRlfSBUaGUgZXF1aXZhbGVudCBKYXZhU2NyaXB0IGRhdGUuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdHRvSlNEYXRlOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksXG5cdFx0XHRcdCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZERhdGUpO1xuXHRcdFx0cmV0dXJuICQuY2FsZW5kYXJzLmluc3RhbmNlKCkuZnJvbUpEKHRoaXMudG9KRChkYXRlKSkudG9KU0RhdGUoKTtcblx0XHR9LFxuXG5cdFx0LyoqIENvbnZlcnQgdGhlIGRhdGUgZnJvbSBhIHN0YW5kYXJkIChHcmVnb3JpYW4pIEphdmFTY3JpcHQgRGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSBqc2Qge0RhdGV9IFRoZSBKYXZhU2NyaXB0IGRhdGUuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIGVxdWl2YWxlbnQgY2FsZW5kYXIgZGF0ZS4gKi9cblx0XHRmcm9tSlNEYXRlOiBmdW5jdGlvbihqc2QpIHtcblx0XHRcdHJldHVybiB0aGlzLmZyb21KRCgkLmNhbGVuZGFycy5pbnN0YW5jZSgpLmZyb21KU0RhdGUoanNkKS50b0pEKCkpO1xuXHRcdH0sXG5cblx0XHQvKiogQ2hlY2sgdGhhdCBhIGNhbmRpZGF0ZSBkYXRlIGlzIGZyb20gdGhlIHNhbWUgY2FsZW5kYXIgYW5kIGlzIHZhbGlkLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIHZhbGlkYXRlIG9yIHRoZSB5ZWFyIHRvIHZhbGlkYXRlLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIHZhbGlkYXRlLlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gdmFsaWRhdGUuXG5cdFx0XHRAcGFyYW0gZXJyb3Ige3N0cmluZ30gUnJyb3IgbWVzc2FnZSBpZiBpbnZhbGlkLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBkaWZmZXJlbnQgY2FsZW5kYXJzIHVzZWQgb3IgaW52YWxpZCBkYXRlLiAqL1xuXHRcdF92YWxpZGF0ZTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSwgZXJyb3IpIHtcblx0XHRcdGlmICh5ZWFyLnllYXIpIHtcblx0XHRcdFx0aWYgKHRoaXMuX3ZhbGlkYXRlTGV2ZWwgPT09IDAgJiYgdGhpcy5uYW1lICE9PSB5ZWFyLmNhbGVuZGFyKCkubmFtZSkge1xuXHRcdFx0XHRcdHRocm93ICgkLmNhbGVuZGFycy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnMgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5kaWZmZXJlbnRDYWxlbmRhcnMpLlxuXHRcdFx0XHRcdFx0cmVwbGFjZSgvXFx7MFxcfS8sIHRoaXMubG9jYWwubmFtZSkucmVwbGFjZSgvXFx7MVxcfS8sIHllYXIuY2FsZW5kYXIoKS5sb2NhbC5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4geWVhcjtcblx0XHRcdH1cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKztcblx0XHRcdFx0aWYgKHRoaXMuX3ZhbGlkYXRlTGV2ZWwgPT09IDEgJiYgIXRoaXMuaXNWYWxpZCh5ZWFyLCBtb250aCwgZGF5KSkge1xuXHRcdFx0XHRcdHRocm93IGVycm9yLnJlcGxhY2UoL1xcezBcXH0vLCB0aGlzLmxvY2FsLm5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBkYXRlID0gdGhpcy5uZXdEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xuXHRcdFx0XHR0aGlzLl92YWxpZGF0ZUxldmVsLS07XG5cdFx0XHRcdHJldHVybiBkYXRlO1xuXHRcdFx0fVxuXHRcdFx0Y2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhpcy5fdmFsaWRhdGVMZXZlbC0tO1xuXHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0LyoqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBQcm9sZXB0aWMgR3JlZ29yaWFuIENhbGVuZGFyLlxuXHRcdFNlZSA8YSBocmVmPVwiOmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JlZ29yaWFuX2NhbGVuZGFyXCI+aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HcmVnb3JpYW5fY2FsZW5kYXI8L2E+XG5cdFx0YW5kIDxhIGhyZWY9XCJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Byb2xlcHRpY19HcmVnb3JpYW5fY2FsZW5kYXJcIj5odHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Byb2xlcHRpY19HcmVnb3JpYW5fY2FsZW5kYXI8L2E+LlxuXHRcdEBjbGFzcyBHcmVnb3JpYW5DYWxlbmRhclxuXHRcdEBhdWdtZW50cyBCYXNlQ2FsZW5kYXJcblx0XHRAcGFyYW0gW2xhbmd1YWdlPScnXSB7c3RyaW5nfSBUaGUgbGFuZ3VhZ2UgY29kZSAoZGVmYXVsdCBFbmdsaXNoKSBmb3IgbG9jYWxpc2F0aW9uLiAqL1xuXHRmdW5jdGlvbiBHcmVnb3JpYW5DYWxlbmRhcihsYW5ndWFnZSkge1xuXHRcdHRoaXMubG9jYWwgPSB0aGlzLnJlZ2lvbmFsT3B0aW9uc1tsYW5ndWFnZV0gfHwgdGhpcy5yZWdpb25hbE9wdGlvbnNbJyddO1xuXHR9XG5cblx0R3JlZ29yaWFuQ2FsZW5kYXIucHJvdG90eXBlID0gbmV3IEJhc2VDYWxlbmRhcjtcblxuXHQkLmV4dGVuZChHcmVnb3JpYW5DYWxlbmRhci5wcm90b3R5cGUsIHtcblx0XHQvKiogVGhlIGNhbGVuZGFyIG5hbWUuXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXIgKi9cblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHQgLyoqIEp1bGlhbiBkYXRlIG9mIHN0YXJ0IG9mIEdyZWdvcmlhbiBlcG9jaDogMSBKYW51YXJ5IDAwMDEgQ0UuXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXIgKi9cblx0XHRqZEVwb2NoOiAxNzIxNDI1LjUsXG5cdFx0IC8qKiBEYXlzIHBlciBtb250aCBpbiBhIGNvbW1vbiB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyICovXG5cdFx0ZGF5c1Blck1vbnRoOiBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0sXG5cdFx0IC8qKiA8Y29kZT50cnVlPC9jb2RlPiBpZiBoYXMgYSB5ZWFyIHplcm8sIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXIgKi9cblx0XHRoYXNZZWFyWmVybzogZmFsc2UsXG5cdFx0LyoqIFRoZSBtaW5pbXVtIG1vbnRoIG51bWJlci5cblx0XHRcdEBtZW1iZXJvZiBHcmVnb3JpYW5DYWxlbmRhciAqL1xuXHRcdG1pbk1vbnRoOiAxLFxuXHRcdC8qKiBUaGUgZmlyc3QgbW9udGggaW4gdGhlIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXIgKi9cblx0XHRmaXJzdE1vbnRoOiAxLFxuXHRcdCAvKiogVGhlIG1pbmltdW0gZGF5IG51bWJlci5cblx0XHRcdEBtZW1iZXJvZiBHcmVnb3JpYW5DYWxlbmRhciAqL1xuXHRcdG1pbkRheTogMSxcblxuXHRcdC8qKiBMb2NhbGlzYXRpb25zIGZvciB0aGUgcGx1Z2luLlxuXHRcdFx0RW50cmllcyBhcmUgb2JqZWN0cyBpbmRleGVkIGJ5IHRoZSBsYW5ndWFnZSBjb2RlICgnJyBiZWluZyB0aGUgZGVmYXVsdCBVUy9FbmdsaXNoKS5cblx0XHRcdEVhY2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMuXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXJcblx0XHRcdEBwcm9wZXJ0eSBuYW1lIHtzdHJpbmd9IFRoZSBjYWxlbmRhciBuYW1lLlxuXHRcdFx0QHByb3BlcnR5IGVwb2NocyB7c3RyaW5nW119IFRoZSBlcG9jaCBuYW1lcy5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNNaW4ge3N0cmluZ1tdfSBUaGUgbWluaW1hbCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cblx0XHRcdEBwcm9wZXJ0eSBkYXRlRm9ybWF0IHtzdHJpbmd9IFRoZSBkYXRlIGZvcm1hdCBmb3IgdGhpcyBjYWxlbmRhci5cblx0XHRcdFx0XHRTZWUgdGhlIG9wdGlvbnMgb24gPGEgaHJlZj1cIkJhc2VDYWxlbmRhci5odG1sI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4gZm9yIGRldGFpbHMuXG5cdFx0XHRAcHJvcGVydHkgZmlyc3REYXkge251bWJlcn0gVGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBzdGFydGluZyBhdCAwLlxuXHRcdFx0QHByb3BlcnR5IGlzUlRMIHtudW1iZXJ9IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgbG9jYWxpc2F0aW9uIHJlYWRzIHJpZ2h0LXRvLWxlZnQuICovXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7IC8vIExvY2FsaXNhdGlvbnNcblx0XHRcdCcnOiB7XG5cdFx0XHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdFx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0XHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsXG5cdFx0XHRcdCdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddLFxuXHRcdFx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXSxcblx0XHRcdFx0ZGF5TmFtZXM6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXSxcblx0XHRcdFx0ZGF5TmFtZXNTaG9ydDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcblx0XHRcdFx0ZGF5TmFtZXNNaW46IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcblx0XHRcdFx0ZGF0ZUZvcm1hdDogJ21tL2RkL3l5eXknLFxuXHRcdFx0XHRmaXJzdERheTogMCxcblx0XHRcdFx0aXNSVEw6IGZhbHNlXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGluIGEgbGVhcCB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGlzIGEgbGVhcCB5ZWFyLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRsZWFwWWVhcjogZnVuY3Rpb24oeWVhcikge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkWWVhcik7XG5cdFx0XHR2YXIgeWVhciA9IGRhdGUueWVhcigpICsgKGRhdGUueWVhcigpIDwgMCA/IDEgOiAwKTsgLy8gTm8geWVhciB6ZXJvXG5cdFx0XHRyZXR1cm4geWVhciAlIDQgPT09IDAgJiYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCk7XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgdGhlIHdlZWsgb2YgdGhlIHllYXIgZm9yIGEgZGF0ZSAtIElTTyA4NjAxLlxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSB3ZWVrIG9mIHRoZSB5ZWFyLCBzdGFydGluZyBmcm9tIDEuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdHdlZWtPZlllYXI6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdC8vIEZpbmQgVGh1cnNkYXkgb2YgdGhpcyB3ZWVrIHN0YXJ0aW5nIG9uIE1vbmRheVxuXHRcdFx0dmFyIGNoZWNrRGF0ZSA9IHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcblx0XHRcdGNoZWNrRGF0ZS5hZGQoNCAtIChjaGVja0RhdGUuZGF5T2ZXZWVrKCkgfHwgNyksICdkJyk7XG5cdFx0XHRyZXR1cm4gTWF0aC5mbG9vcigoY2hlY2tEYXRlLmRheU9mWWVhcigpIC0gMSkgLyA3KSArIDE7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aC5cblx0XHRcdEBtZW1iZXJvZiBHcmVnb3JpYW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciBvZiB0aGUgbW9udGguXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGguXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIG1vbnRoLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIG1vbnRoL3llYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRkYXlzSW5Nb250aDogZnVuY3Rpb24oeWVhciwgbW9udGgpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIHRoaXMubWluRGF5LFxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkTW9udGggfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkTW9udGgpO1xuXHRcdFx0cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW2RhdGUubW9udGgoKSAtIDFdICtcblx0XHRcdFx0KGRhdGUubW9udGgoKSA9PT0gMiAmJiB0aGlzLmxlYXBZZWFyKGRhdGUueWVhcigpKSA/IDEgOiAwKTtcblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBhIHdlZWsgZGF5LlxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBhIHdlZWsgZGF5LCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHR3ZWVrRGF5OiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHRyZXR1cm4gKHRoaXMuZGF5T2ZXZWVrKHllYXIsIG1vbnRoLCBkYXkpIHx8IDcpIDwgNjtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBKdWxpYW4gZGF0ZSBlcXVpdmFsZW50IGZvciB0aGlzIGRhdGUsXG5cdFx0XHRpLmUuIGRheXMgc2luY2UgSmFudWFyeSAxLCA0NzEzIEJDRSBHcmVlbndpY2ggbm9vbi5cblx0XHRcdEBtZW1iZXJvZiBHcmVnb3JpYW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gY29udmVydCBvciB0aGUgeWVhciB0byBjb252ZXJ0LlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGNvbnZlcnQuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBjb252ZXJ0LlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZXF1aXZhbGVudCBKdWxpYW4gZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0dG9KRDogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgZGF5LFxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcblx0XHRcdHllYXIgPSBkYXRlLnllYXIoKTtcblx0XHRcdG1vbnRoID0gZGF0ZS5tb250aCgpO1xuXHRcdFx0ZGF5ID0gZGF0ZS5kYXkoKTtcblx0XHRcdGlmICh5ZWFyIDwgMCkgeyB5ZWFyKys7IH0gLy8gTm8geWVhciB6ZXJvXG5cdFx0XHQvLyBKZWFuIE1lZXVzIGFsZ29yaXRobSwgXCJBc3Ryb25vbWljYWwgQWxnb3JpdGhtc1wiLCAxOTkxXG5cdFx0XHRpZiAobW9udGggPCAzKSB7XG5cdFx0XHRcdG1vbnRoICs9IDEyO1xuXHRcdFx0XHR5ZWFyLS07XG5cdFx0XHR9XG5cdFx0XHR2YXIgYSA9IE1hdGguZmxvb3IoeWVhciAvIDEwMCk7XG5cdFx0XHR2YXIgYiA9IDIgLSBhICsgTWF0aC5mbG9vcihhIC8gNCk7XG5cdFx0XHRyZXR1cm4gTWF0aC5mbG9vcigzNjUuMjUgKiAoeWVhciArIDQ3MTYpKSArXG5cdFx0XHRcdE1hdGguZmxvb3IoMzAuNjAwMSAqIChtb250aCArIDEpKSArIGRheSArIGIgLSAxNTI0LjU7XG5cdFx0fSxcblxuXHRcdC8qKiBDcmVhdGUgYSBuZXcgZGF0ZSBmcm9tIGEgSnVsaWFuIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSBqZCB7bnVtYmVyfSBUaGUgSnVsaWFuIGRhdGUgdG8gY29udmVydC5cblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgZXF1aXZhbGVudCBkYXRlLiAqL1xuXHRcdGZyb21KRDogZnVuY3Rpb24oamQpIHtcblx0XHRcdC8vIEplYW4gTWVldXMgYWxnb3JpdGhtLCBcIkFzdHJvbm9taWNhbCBBbGdvcml0aG1zXCIsIDE5OTFcblx0XHRcdHZhciB6ID0gTWF0aC5mbG9vcihqZCArIDAuNSk7XG5cdFx0XHR2YXIgYSA9IE1hdGguZmxvb3IoKHogLSAxODY3MjE2LjI1KSAvIDM2NTI0LjI1KTtcblx0XHRcdGEgPSB6ICsgMSArIGEgLSBNYXRoLmZsb29yKGEgLyA0KTtcblx0XHRcdHZhciBiID0gYSArIDE1MjQ7XG5cdFx0XHR2YXIgYyA9IE1hdGguZmxvb3IoKGIgLSAxMjIuMSkgLyAzNjUuMjUpO1xuXHRcdFx0dmFyIGQgPSBNYXRoLmZsb29yKDM2NS4yNSAqIGMpO1xuXHRcdFx0dmFyIGUgPSBNYXRoLmZsb29yKChiIC0gZCkgLyAzMC42MDAxKTtcblx0XHRcdHZhciBkYXkgPSBiIC0gZCAtIE1hdGguZmxvb3IoZSAqIDMwLjYwMDEpO1xuXHRcdFx0dmFyIG1vbnRoID0gZSAtIChlID4gMTMuNSA/IDEzIDogMSk7XG5cdFx0XHR2YXIgeWVhciA9IGMgLSAobW9udGggPiAyLjUgPyA0NzE2IDogNDcxNSk7XG5cdFx0XHRpZiAoeWVhciA8PSAwKSB7IHllYXItLTsgfSAvLyBObyB5ZWFyIHplcm9cblx0XHRcdHJldHVybiB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSk7XG5cdFx0fSxcblxuXHRcdC8qKiBDb252ZXJ0IHRoaXMgZGF0ZSB0byBhIHN0YW5kYXJkIChHcmVnb3JpYW4pIEphdmFTY3JpcHQgRGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBHcmVnb3JpYW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gY29udmVydCBvciB0aGUgeWVhciB0byBjb252ZXJ0LlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGNvbnZlcnQuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBjb252ZXJ0LlxuXHRcdFx0QHJldHVybiB7RGF0ZX0gVGhlIGVxdWl2YWxlbnQgSmF2YVNjcmlwdCBkYXRlLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHR0b0pTRGF0ZTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgZGF5LFxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcblx0XHRcdHZhciBqc2QgPSBuZXcgRGF0ZShkYXRlLnllYXIoKSwgZGF0ZS5tb250aCgpIC0gMSwgZGF0ZS5kYXkoKSk7XG5cdFx0XHRqc2Quc2V0SG91cnMoMCk7XG5cdFx0XHRqc2Quc2V0TWludXRlcygwKTtcblx0XHRcdGpzZC5zZXRTZWNvbmRzKDApO1xuXHRcdFx0anNkLnNldE1pbGxpc2Vjb25kcygwKTtcblx0XHRcdC8vIEhvdXJzIG1heSBiZSBub24temVybyBvbiBkYXlsaWdodCBzYXZpbmcgY3V0LW92ZXI6XG5cdFx0XHQvLyA+IDEyIHdoZW4gbWlkbmlnaHQgY2hhbmdlb3ZlciwgYnV0IHRoZW4gY2Fubm90IGdlbmVyYXRlXG5cdFx0XHQvLyBtaWRuaWdodCBkYXRldGltZSwgc28ganVtcCB0byAxQU0sIG90aGVyd2lzZSByZXNldC5cblx0XHRcdGpzZC5zZXRIb3Vycyhqc2QuZ2V0SG91cnMoKSA+IDEyID8ganNkLmdldEhvdXJzKCkgKyAyIDogMCk7XG5cdFx0XHRyZXR1cm4ganNkO1xuXHRcdH0sXG5cblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgZnJvbSBhIHN0YW5kYXJkIChHcmVnb3JpYW4pIEphdmFTY3JpcHQgRGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBHcmVnb3JpYW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIGpzZCB7RGF0ZX0gVGhlIEphdmFTY3JpcHQgZGF0ZSB0byBjb252ZXJ0LlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXG5cdFx0ZnJvbUpTRGF0ZTogZnVuY3Rpb24oanNkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5uZXdEYXRlKGpzZC5nZXRGdWxsWWVhcigpLCBqc2QuZ2V0TW9udGgoKSArIDEsIGpzZC5nZXREYXRlKCkpO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gU2luZ2xldG9uIG1hbmFnZXJcblx0JC5jYWxlbmRhcnMgPSBuZXcgQ2FsZW5kYXJzKCk7XG5cblx0Ly8gRGF0ZSB0ZW1wbGF0ZVxuXHQkLmNhbGVuZGFycy5jZGF0ZSA9IENEYXRlO1xuXG5cdC8vIEJhc2UgY2FsZW5kYXIgdGVtcGxhdGVcblx0JC5jYWxlbmRhcnMuYmFzZUNhbGVuZGFyID0gQmFzZUNhbGVuZGFyO1xuXG5cdC8vIEdyZWdvcmlhbiBjYWxlbmRhciBpbXBsZW1lbnRhdGlvblxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuID0gR3JlZ29yaWFuQ2FsZW5kYXI7XG5cbn0pKGpRdWVyeSk7XG4vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBDYWxlbmRhcnMgZXh0cmFzIGZvciBqUXVlcnkgdjIuMC4xLlxuICAgV3JpdHRlbiBieSBLZWl0aCBXb29kIChrYndvb2R7YXR9aWluZXQuY29tLmF1KSBBdWd1c3QgMjAwOS5cbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cblxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxuXG5cdCQuZXh0ZW5kKCQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10sIHtcblx0XHRpbnZhbGlkQXJndW1lbnRzOiAnSW52YWxpZCBhcmd1bWVudHMnLFxuXHRcdGludmFsaWRGb3JtYXQ6ICdDYW5ub3QgZm9ybWF0IGEgZGF0ZSBmcm9tIGFub3RoZXIgY2FsZW5kYXInLFxuXHRcdG1pc3NpbmdOdW1iZXJBdDogJ01pc3NpbmcgbnVtYmVyIGF0IHBvc2l0aW9uIHswfScsXG5cdFx0dW5rbm93bk5hbWVBdDogJ1Vua25vd24gbmFtZSBhdCBwb3NpdGlvbiB7MH0nLFxuXHRcdHVuZXhwZWN0ZWRMaXRlcmFsQXQ6ICdVbmV4cGVjdGVkIGxpdGVyYWwgYXQgcG9zaXRpb24gezB9Jyxcblx0XHR1bmV4cGVjdGVkVGV4dDogJ0FkZGl0aW9uYWwgdGV4dCBmb3VuZCBhdCBlbmQnXG5cdH0pO1xuXHQkLmNhbGVuZGFycy5sb2NhbCA9ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ107XG5cblx0JC5leHRlbmQoJC5jYWxlbmRhcnMuY2RhdGUucHJvdG90eXBlLCB7XG5cblx0XHQvKiogRm9ybWF0IHRoaXMgZGF0ZS5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHBhcmFtIFtmb3JtYXRdIHtzdHJpbmd9IFRoZSBkYXRlIGZvcm1hdCB0byB1c2UgKHNlZSA8YSBocmVmPVwiQmFzZUNhbGVuZGFyLmh0bWwjZm9ybWF0RGF0ZVwiPjxjb2RlPmZvcm1hdERhdGU8L2NvZGU+PC9hPikuXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgZGF0ZS4gKi9cblx0XHRmb3JtYXREYXRlOiBmdW5jdGlvbihmb3JtYXQpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5mb3JtYXREYXRlKGZvcm1hdCB8fCAnJywgdGhpcyk7XG5cdFx0fVxuXHR9KTtcblxuXHQkLmV4dGVuZCgkLmNhbGVuZGFycy5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLCB7XG5cblx0XHRVTklYX0VQT0NIOiAkLmNhbGVuZGFycy5pbnN0YW5jZSgpLm5ld0RhdGUoMTk3MCwgMSwgMSkudG9KRCgpLFxuXHRcdFNFQ1NfUEVSX0RBWTogMjQgKiA2MCAqIDYwLFxuXHRcdFRJQ0tTX0VQT0NIOiAkLmNhbGVuZGFycy5pbnN0YW5jZSgpLmpkRXBvY2gsIC8vIDEgSmFudWFyeSAwMDAxIENFXG5cdFx0VElDS1NfUEVSX0RBWTogMjQgKiA2MCAqIDYwICogMTAwMDAwMDAsXG5cblx0XHQvKiogRGF0ZSBmb3JtIGZvciBBVE9NIChSRkMgMzMzOS9JU08gODYwMSkuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXG5cdFx0QVRPTTogJ3l5eXktbW0tZGQnLFxuXHRcdC8qKiBEYXRlIGZvcm0gZm9yIGNvb2tpZXMuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXG5cdFx0Q09PS0lFOiAnRCwgZGQgTSB5eXl5Jyxcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBmdWxsIGRhdGUuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXG5cdFx0RlVMTDogJ0RELCBNTSBkLCB5eXl5Jyxcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBJU08gODYwMS5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXIgKi9cblx0XHRJU09fODYwMTogJ3l5eXktbW0tZGQnLFxuXHRcdC8qKiBEYXRlIGZvcm0gZm9yIEp1bGlhbiBkYXRlLlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xuXHRcdEpVTElBTjogJ0onLFxuXHRcdC8qKiBEYXRlIGZvcm0gZm9yIFJGQyA4MjIuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXG5cdFx0UkZDXzgyMjogJ0QsIGQgTSB5eScsXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgUkZDIDg1MC5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXIgKi9cblx0XHRSRkNfODUwOiAnREQsIGRkLU0teXknLFxuXHRcdC8qKiBEYXRlIGZvcm0gZm9yIFJGQyAxMDM2LlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xuXHRcdFJGQ18xMDM2OiAnRCwgZCBNIHl5Jyxcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBSRkMgMTEyMy5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXIgKi9cblx0XHRSRkNfMTEyMzogJ0QsIGQgTSB5eXl5Jyxcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBSRkMgMjgyMi5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXIgKi9cblx0XHRSRkNfMjgyMjogJ0QsIGQgTSB5eXl5Jyxcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBSU1MgKFJGQyA4MjIpLlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xuXHRcdFJTUzogJ0QsIGQgTSB5eScsXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgV2luZG93cyB0aWNrcy5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXIgKi9cblx0XHRUSUNLUzogJyEnLFxuXHRcdC8qKiBEYXRlIGZvcm0gZm9yIFVuaXggdGltZXN0YW1wLlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xuXHRcdFRJTUVTVEFNUDogJ0AnLFxuXHRcdC8qKiBEYXRlIGZvcm0gZm9yIFczYyAoSVNPIDg2MDEpLlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xuXHRcdFczQzogJ3l5eXktbW0tZGQnLFxuXG5cdFx0LyoqIEZvcm1hdCBhIGRhdGUgb2JqZWN0IGludG8gYSBzdHJpbmcgdmFsdWUuXG5cdFx0XHRUaGUgZm9ybWF0IGNhbiBiZSBjb21iaW5hdGlvbnMgb2YgdGhlIGZvbGxvd2luZzpcblx0XHRcdDx1bD5cblx0XHRcdDxsaT5kICAtIGRheSBvZiBtb250aCAobm8gbGVhZGluZyB6ZXJvKTwvbGk+XG5cdFx0XHQ8bGk+ZGQgLSBkYXkgb2YgbW9udGggKHR3byBkaWdpdCk8L2xpPlxuXHRcdFx0PGxpPm8gIC0gZGF5IG9mIHllYXIgKG5vIGxlYWRpbmcgemVyb3MpPC9saT5cblx0XHRcdDxsaT5vbyAtIGRheSBvZiB5ZWFyICh0aHJlZSBkaWdpdCk8L2xpPlxuXHRcdFx0PGxpPkQgIC0gZGF5IG5hbWUgc2hvcnQ8L2xpPlxuXHRcdFx0PGxpPkREIC0gZGF5IG5hbWUgbG9uZzwvbGk+XG5cdFx0XHQ8bGk+dyAgLSB3ZWVrIG9mIHllYXIgKG5vIGxlYWRpbmcgemVybyk8L2xpPlxuXHRcdFx0PGxpPnd3IC0gd2VlayBvZiB5ZWFyICh0d28gZGlnaXQpPC9saT5cblx0XHRcdDxsaT5tICAtIG1vbnRoIG9mIHllYXIgKG5vIGxlYWRpbmcgemVybyk8L2xpPlxuXHRcdFx0PGxpPm1tIC0gbW9udGggb2YgeWVhciAodHdvIGRpZ2l0KTwvbGk+XG5cdFx0XHQ8bGk+TSAgLSBtb250aCBuYW1lIHNob3J0PC9saT5cblx0XHRcdDxsaT5NTSAtIG1vbnRoIG5hbWUgbG9uZzwvbGk+XG5cdFx0XHQ8bGk+eXkgLSB5ZWFyICh0d28gZGlnaXQpPC9saT5cblx0XHRcdDxsaT55eXl5IC0geWVhciAoZm91ciBkaWdpdCk8L2xpPlxuXHRcdFx0PGxpPllZWVkgLSBmb3JtYXR0ZWQgeWVhcjwvbGk+XG5cdFx0XHQ8bGk+SiAgLSBKdWxpYW4gZGF0ZSAoZGF5cyBzaW5jZSBKYW51YXJ5IDEsIDQ3MTMgQkNFIEdyZWVud2ljaCBub29uKTwvbGk+XG5cdFx0XHQ8bGk+QCAgLSBVbml4IHRpbWVzdGFtcCAocyBzaW5jZSAwMS8wMS8xOTcwKTwvbGk+XG5cdFx0XHQ8bGk+ISAgLSBXaW5kb3dzIHRpY2tzICgxMDBucyBzaW5jZSAwMS8wMS8wMDAxKTwvbGk+XG5cdFx0XHQ8bGk+Jy4uLicgLSBsaXRlcmFsIHRleHQ8L2xpPlxuXHRcdFx0PGxpPicnIC0gc2luZ2xlIHF1b3RlPC9saT5cblx0XHRcdDwvdWw+XG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0gW2Zvcm1hdF0ge3N0cmluZ30gVGhlIGRlc2lyZWQgZm9ybWF0IG9mIHRoZSBkYXRlIChkZWZhdWx0cyB0byBjYWxlbmRhciBmb3JtYXQpLlxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgZGF0ZSB2YWx1ZSB0byBmb3JtYXQuXG5cdFx0XHRAcGFyYW0gW3NldHRpbmdzXSB7b2JqZWN0fSBBZGRpdGlvbiBvcHRpb25zLCB3aG9zZSBhdHRyaWJ1dGVzIGluY2x1ZGU6XG5cdFx0XHRAcHJvcGVydHkgW2RheU5hbWVzU2hvcnRdIHtzdHJpbmdbXX0gQWJicmV2aWF0ZWQgbmFtZXMgb2YgdGhlIGRheXMgZnJvbSBTdW5kYXkuXG5cdFx0XHRAcHJvcGVydHkgW2RheU5hbWVzXSB7c3RyaW5nW119IE5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5LlxuXHRcdFx0QHByb3BlcnR5IFttb250aE5hbWVzU2hvcnRdIHtzdHJpbmdbXX0gQWJicmV2aWF0ZWQgbmFtZXMgb2YgdGhlIG1vbnRocy5cblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhOYW1lc10ge3N0cmluZ1tdfSBOYW1lcyBvZiB0aGUgbW9udGhzLlxuXHRcdFx0QHByb3BlcnR5IFtjYWxjdWxhdGVXZWVrXSB7Q2FsZW5kYXJzUGlja2VyQ2FsY3VsYXRlV2Vla30gRnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdlZWsgb2YgdGhlIHllYXIuXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBkYXRlIGluIHRoZSBhYm92ZSBmb3JtYXQuXG5cdFx0XHRAdGhyb3dzIEVycm9ycyBpZiB0aGUgZGF0ZSBpcyBmcm9tIGEgZGlmZmVyZW50IGNhbGVuZGFyLiAqL1xuXHRcdGZvcm1hdERhdGU6IGZ1bmN0aW9uKGZvcm1hdCwgZGF0ZSwgc2V0dGluZ3MpIHtcblx0XHRcdGlmICh0eXBlb2YgZm9ybWF0ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRzZXR0aW5ncyA9IGRhdGU7XG5cdFx0XHRcdGRhdGUgPSBmb3JtYXQ7XG5cdFx0XHRcdGZvcm1hdCA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFkYXRlKSB7XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdH1cblx0XHRcdGlmIChkYXRlLmNhbGVuZGFyKCkgIT09IHRoaXMpIHtcblx0XHRcdFx0dGhyb3cgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZEZvcm1hdCB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRGb3JtYXQ7XG5cdFx0XHR9XG5cdFx0XHRmb3JtYXQgPSBmb3JtYXQgfHwgdGhpcy5sb2NhbC5kYXRlRm9ybWF0O1xuXHRcdFx0c2V0dGluZ3MgPSBzZXR0aW5ncyB8fCB7fTtcblx0XHRcdHZhciBkYXlOYW1lc1Nob3J0ID0gc2V0dGluZ3MuZGF5TmFtZXNTaG9ydCB8fCB0aGlzLmxvY2FsLmRheU5hbWVzU2hvcnQ7XG5cdFx0XHR2YXIgZGF5TmFtZXMgPSBzZXR0aW5ncy5kYXlOYW1lcyB8fCB0aGlzLmxvY2FsLmRheU5hbWVzO1xuXHRcdFx0dmFyIG1vbnRoTmFtZXNTaG9ydCA9IHNldHRpbmdzLm1vbnRoTmFtZXNTaG9ydCB8fCB0aGlzLmxvY2FsLm1vbnRoTmFtZXNTaG9ydDtcblx0XHRcdHZhciBtb250aE5hbWVzID0gc2V0dGluZ3MubW9udGhOYW1lcyB8fCB0aGlzLmxvY2FsLm1vbnRoTmFtZXM7XG5cdFx0XHR2YXIgY2FsY3VsYXRlV2VlayA9IHNldHRpbmdzLmNhbGN1bGF0ZVdlZWsgfHwgdGhpcy5sb2NhbC5jYWxjdWxhdGVXZWVrO1xuXHRcdFx0Ly8gQ2hlY2sgd2hldGhlciBhIGZvcm1hdCBjaGFyYWN0ZXIgaXMgZG91YmxlZFxuXHRcdFx0dmFyIGRvdWJsZWQgPSBmdW5jdGlvbihtYXRjaCwgc3RlcCkge1xuXHRcdFx0XHR2YXIgbWF0Y2hlcyA9IDE7XG5cdFx0XHRcdHdoaWxlIChpRm9ybWF0ICsgbWF0Y2hlcyA8IGZvcm1hdC5sZW5ndGggJiYgZm9ybWF0LmNoYXJBdChpRm9ybWF0ICsgbWF0Y2hlcykgPT09IG1hdGNoKSB7XG5cdFx0XHRcdFx0bWF0Y2hlcysrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlGb3JtYXQgKz0gbWF0Y2hlcyAtIDE7XG5cdFx0XHRcdHJldHVybiBNYXRoLmZsb29yKG1hdGNoZXMgLyAoc3RlcCB8fCAxKSkgPiAxO1xuXHRcdFx0fTtcblx0XHRcdC8vIEZvcm1hdCBhIG51bWJlciwgd2l0aCBsZWFkaW5nIHplcm9lcyBpZiBuZWNlc3Nhcnlcblx0XHRcdHZhciBmb3JtYXROdW1iZXIgPSBmdW5jdGlvbihtYXRjaCwgdmFsdWUsIGxlbiwgc3RlcCkge1xuXHRcdFx0XHR2YXIgbnVtID0gJycgKyB2YWx1ZTtcblx0XHRcdFx0aWYgKGRvdWJsZWQobWF0Y2gsIHN0ZXApKSB7XG5cdFx0XHRcdFx0d2hpbGUgKG51bS5sZW5ndGggPCBsZW4pIHtcblx0XHRcdFx0XHRcdG51bSA9ICcwJyArIG51bTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG51bTtcblx0XHRcdH07XG5cdFx0XHQvLyBGb3JtYXQgYSBuYW1lLCBzaG9ydCBvciBsb25nIGFzIHJlcXVlc3RlZFxuXHRcdFx0dmFyIGZvcm1hdE5hbWUgPSBmdW5jdGlvbihtYXRjaCwgdmFsdWUsIHNob3J0TmFtZXMsIGxvbmdOYW1lcykge1xuXHRcdFx0XHRyZXR1cm4gKGRvdWJsZWQobWF0Y2gpID8gbG9uZ05hbWVzW3ZhbHVlXSA6IHNob3J0TmFtZXNbdmFsdWVdKTtcblx0XHRcdH07XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHR2YXIgbGl0ZXJhbCA9IGZhbHNlO1xuXHRcdFx0Zm9yICh2YXIgaUZvcm1hdCA9IDA7IGlGb3JtYXQgPCBmb3JtYXQubGVuZ3RoOyBpRm9ybWF0KyspIHtcblx0XHRcdFx0aWYgKGxpdGVyYWwpIHtcblx0XHRcdFx0XHRpZiAoZm9ybWF0LmNoYXJBdChpRm9ybWF0KSA9PT0gXCInXCIgJiYgIWRvdWJsZWQoXCInXCIpKSB7XG5cdFx0XHRcdFx0XHRsaXRlcmFsID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0b3V0cHV0ICs9IGZvcm1hdC5jaGFyQXQoaUZvcm1hdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHN3aXRjaCAoZm9ybWF0LmNoYXJBdChpRm9ybWF0KSkge1xuXHRcdFx0XHRcdFx0Y2FzZSAnZCc6IG91dHB1dCArPSBmb3JtYXROdW1iZXIoJ2QnLCBkYXRlLmRheSgpLCAyKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdEJzogb3V0cHV0ICs9IGZvcm1hdE5hbWUoJ0QnLCBkYXRlLmRheU9mV2VlaygpLFxuXHRcdFx0XHRcdFx0XHRkYXlOYW1lc1Nob3J0LCBkYXlOYW1lcyk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnbyc6IG91dHB1dCArPSBmb3JtYXROdW1iZXIoJ28nLCBkYXRlLmRheU9mWWVhcigpLCAzKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICd3Jzogb3V0cHV0ICs9IGZvcm1hdE51bWJlcigndycsIGRhdGUud2Vla09mWWVhcigpLCAyKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdtJzogb3V0cHV0ICs9IGZvcm1hdE51bWJlcignbScsIGRhdGUubW9udGgoKSwgMik7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnTSc6IG91dHB1dCArPSBmb3JtYXROYW1lKCdNJywgZGF0ZS5tb250aCgpIC0gdGhpcy5taW5Nb250aCxcblx0XHRcdFx0XHRcdFx0bW9udGhOYW1lc1Nob3J0LCBtb250aE5hbWVzKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICd5Jzpcblx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IChkb3VibGVkKCd5JywgMikgPyBkYXRlLnllYXIoKSA6XG5cdFx0XHRcdFx0XHRcdFx0KGRhdGUueWVhcigpICUgMTAwIDwgMTAgPyAnMCcgOiAnJykgKyBkYXRlLnllYXIoKSAlIDEwMCk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnWSc6XG5cdFx0XHRcdFx0XHRcdGRvdWJsZWQoJ1knLCAyKTtcblx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IGRhdGUuZm9ybWF0WWVhcigpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0onOiBvdXRwdXQgKz0gZGF0ZS50b0pEKCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnQCc6IG91dHB1dCArPSAoZGF0ZS50b0pEKCkgLSB0aGlzLlVOSVhfRVBPQ0gpICogdGhpcy5TRUNTX1BFUl9EQVk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnISc6IG91dHB1dCArPSAoZGF0ZS50b0pEKCkgLSB0aGlzLlRJQ0tTX0VQT0NIKSAqIHRoaXMuVElDS1NfUEVSX0RBWTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiJ1wiOlxuXHRcdFx0XHRcdFx0XHRpZiAoZG91YmxlZChcIidcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRvdXRwdXQgKz0gXCInXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bGl0ZXJhbCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRvdXRwdXQgKz0gZm9ybWF0LmNoYXJBdChpRm9ybWF0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBvdXRwdXQ7XG5cdFx0fSxcblxuXHRcdC8qKiBQYXJzZSBhIHN0cmluZyB2YWx1ZSBpbnRvIGEgZGF0ZSBvYmplY3QuXG5cdFx0XHRTZWUgPGEgaHJlZj1cIiNmb3JtYXREYXRlXCI+PGNvZGU+Zm9ybWF0RGF0ZTwvY29kZT48L2E+IGZvciB0aGUgcG9zc2libGUgZm9ybWF0cywgcGx1czpcblx0XHRcdDx1bD5cblx0XHRcdDxsaT4qIC0gaWdub3JlIHJlc3Qgb2Ygc3RyaW5nPC9saT5cblx0XHRcdDwvdWw+XG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0gZm9ybWF0IHtzdHJpbmd9IFRoZSBleHBlY3RlZCBmb3JtYXQgb2YgdGhlIGRhdGUgKCcnIGZvciBkZWZhdWx0IGNhbGVuZGFyIGZvcm1hdCkuXG5cdFx0XHRAcGFyYW0gdmFsdWUge3N0cmluZ30gVGhlIGRhdGUgaW4gdGhlIGFib3ZlIGZvcm1hdC5cblx0XHRcdEBwYXJhbSBbc2V0dGluZ3NdIHtvYmplY3R9IEFkZGl0aW9uYWwgb3B0aW9ucyB3aG9zZSBhdHRyaWJ1dGVzIGluY2x1ZGU6XG5cdFx0XHRAcHJvcGVydHkgW3Nob3J0WWVhckN1dG9mZl0ge251bWJlcn0gVGhlIGN1dG9mZiB5ZWFyIGZvciBkZXRlcm1pbmluZyB0aGUgY2VudHVyeS5cblx0XHRcdEBwcm9wZXJ0eSBbZGF5TmFtZXNTaG9ydF0ge3N0cmluZ1tdfSBBYmJyZXZpYXRlZCBuYW1lcyBvZiB0aGUgZGF5cyBmcm9tIFN1bmRheS5cblx0XHRcdEBwcm9wZXJ0eSBbZGF5TmFtZXNdIHtzdHJpbmdbXX0gTmFtZXMgb2YgdGhlIGRheXMgZnJvbSBTdW5kYXkuXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoTmFtZXNTaG9ydF0ge3N0cmluZ1tdfSBBYmJyZXZpYXRlZCBuYW1lcyBvZiB0aGUgbW9udGhzLlxuXHRcdFx0QHByb3BlcnR5IFttb250aE5hbWVzXSB7c3RyaW5nW119IE5hbWVzIG9mIHRoZSBtb250aHMuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIGV4dHJhY3RlZCBkYXRlIHZhbHVlIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIHZhbHVlIGlzIGJsYW5rLlxuXHRcdFx0QHRocm93cyBFcnJvcnMgaWYgdGhlIGZvcm1hdCBhbmQvb3IgdmFsdWUgYXJlIG1pc3NpbmcsXG5cdFx0XHRcdFx0aWYgdGhlIHZhbHVlIGRvZXNuJ3QgbWF0Y2ggdGhlIGZvcm1hdCwgb3IgaWYgdGhlIGRhdGUgaXMgaW52YWxpZC4gKi9cblx0XHRwYXJzZURhdGU6IGZ1bmN0aW9uKGZvcm1hdCwgdmFsdWUsIHNldHRpbmdzKSB7XG5cdFx0XHRpZiAodmFsdWUgPT0gbnVsbCkge1xuXHRcdFx0XHR0aHJvdyAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkQXJndW1lbnRzIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZEFyZ3VtZW50cztcblx0XHRcdH1cblx0XHRcdHZhbHVlID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyB2YWx1ZS50b1N0cmluZygpIDogdmFsdWUgKyAnJyk7XG5cdFx0XHRpZiAodmFsdWUgPT09ICcnKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0Zm9ybWF0ID0gZm9ybWF0IHx8IHRoaXMubG9jYWwuZGF0ZUZvcm1hdDtcblx0XHRcdHNldHRpbmdzID0gc2V0dGluZ3MgfHwge307XG5cdFx0XHR2YXIgc2hvcnRZZWFyQ3V0b2ZmID0gc2V0dGluZ3Muc2hvcnRZZWFyQ3V0b2ZmIHx8IHRoaXMuc2hvcnRZZWFyQ3V0b2ZmO1xuXHRcdFx0c2hvcnRZZWFyQ3V0b2ZmID0gKHR5cGVvZiBzaG9ydFllYXJDdXRvZmYgIT09ICdzdHJpbmcnID8gc2hvcnRZZWFyQ3V0b2ZmIDpcblx0XHRcdFx0dGhpcy50b2RheSgpLnllYXIoKSAlIDEwMCArIHBhcnNlSW50KHNob3J0WWVhckN1dG9mZiwgMTApKTtcblx0XHRcdHZhciBkYXlOYW1lc1Nob3J0ID0gc2V0dGluZ3MuZGF5TmFtZXNTaG9ydCB8fCB0aGlzLmxvY2FsLmRheU5hbWVzU2hvcnQ7XG5cdFx0XHR2YXIgZGF5TmFtZXMgPSBzZXR0aW5ncy5kYXlOYW1lcyB8fCB0aGlzLmxvY2FsLmRheU5hbWVzO1xuXHRcdFx0dmFyIG1vbnRoTmFtZXNTaG9ydCA9IHNldHRpbmdzLm1vbnRoTmFtZXNTaG9ydCB8fCB0aGlzLmxvY2FsLm1vbnRoTmFtZXNTaG9ydDtcblx0XHRcdHZhciBtb250aE5hbWVzID0gc2V0dGluZ3MubW9udGhOYW1lcyB8fCB0aGlzLmxvY2FsLm1vbnRoTmFtZXM7XG5cdFx0XHR2YXIgamQgPSAtMTtcblx0XHRcdHZhciB5ZWFyID0gLTE7XG5cdFx0XHR2YXIgbW9udGggPSAtMTtcblx0XHRcdHZhciBkYXkgPSAtMTtcblx0XHRcdHZhciBkb3kgPSAtMTtcblx0XHRcdHZhciBzaG9ydFllYXIgPSBmYWxzZTtcblx0XHRcdHZhciBsaXRlcmFsID0gZmFsc2U7XG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIGEgZm9ybWF0IGNoYXJhY3RlciBpcyBkb3VibGVkXG5cdFx0XHR2YXIgZG91YmxlZCA9IGZ1bmN0aW9uKG1hdGNoLCBzdGVwKSB7XG5cdFx0XHRcdHZhciBtYXRjaGVzID0gMTtcblx0XHRcdFx0d2hpbGUgKGlGb3JtYXQgKyBtYXRjaGVzIDwgZm9ybWF0Lmxlbmd0aCAmJiBmb3JtYXQuY2hhckF0KGlGb3JtYXQgKyBtYXRjaGVzKSA9PT0gbWF0Y2gpIHtcblx0XHRcdFx0XHRtYXRjaGVzKys7XG5cdFx0XHRcdH1cblx0XHRcdFx0aUZvcm1hdCArPSBtYXRjaGVzIC0gMTtcblx0XHRcdFx0cmV0dXJuIE1hdGguZmxvb3IobWF0Y2hlcyAvIChzdGVwIHx8IDEpKSA+IDE7XG5cdFx0XHR9O1xuXHRcdFx0Ly8gRXh0cmFjdCBhIG51bWJlciBmcm9tIHRoZSBzdHJpbmcgdmFsdWVcblx0XHRcdHZhciBnZXROdW1iZXIgPSBmdW5jdGlvbihtYXRjaCwgc3RlcCkge1xuXHRcdFx0XHR2YXIgaXNEb3VibGVkID0gZG91YmxlZChtYXRjaCwgc3RlcCk7XG5cdFx0XHRcdHZhciBzaXplID0gWzIsIDMsIGlzRG91YmxlZCA/IDQgOiAyLCBpc0RvdWJsZWQgPyA0IDogMiwgMTAsIDExLCAyMF1bJ295WUpAIScuaW5kZXhPZihtYXRjaCkgKyAxXTtcblx0XHRcdFx0dmFyIGRpZ2l0cyA9IG5ldyBSZWdFeHAoJ14tP1xcXFxkezEsJyArIHNpemUgKyAnfScpO1xuXHRcdFx0XHR2YXIgbnVtID0gdmFsdWUuc3Vic3RyaW5nKGlWYWx1ZSkubWF0Y2goZGlnaXRzKTtcblx0XHRcdFx0aWYgKCFudW0pIHtcblx0XHRcdFx0XHR0aHJvdyAoJC5jYWxlbmRhcnMubG9jYWwubWlzc2luZ051bWJlckF0IHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10ubWlzc2luZ051bWJlckF0KS5cblx0XHRcdFx0XHRcdHJlcGxhY2UoL1xcezBcXH0vLCBpVmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlWYWx1ZSArPSBudW1bMF0ubGVuZ3RoO1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQobnVtWzBdLCAxMCk7XG5cdFx0XHR9O1xuXHRcdFx0Ly8gRXh0cmFjdCBhIG5hbWUgZnJvbSB0aGUgc3RyaW5nIHZhbHVlIGFuZCBjb252ZXJ0IHRvIGFuIGluZGV4XG5cdFx0XHR2YXIgY2FsZW5kYXIgPSB0aGlzO1xuXHRcdFx0dmFyIGdldE5hbWUgPSBmdW5jdGlvbihtYXRjaCwgc2hvcnROYW1lcywgbG9uZ05hbWVzLCBzdGVwKSB7XG5cdFx0XHRcdHZhciBuYW1lcyA9IChkb3VibGVkKG1hdGNoLCBzdGVwKSA/IGxvbmdOYW1lcyA6IHNob3J0TmFtZXMpO1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlLnN1YnN0cihpVmFsdWUsIG5hbWVzW2ldLmxlbmd0aCkudG9Mb3dlckNhc2UoKSA9PT0gbmFtZXNbaV0udG9Mb3dlckNhc2UoKSkge1xuXHRcdFx0XHRcdFx0aVZhbHVlICs9IG5hbWVzW2ldLmxlbmd0aDtcblx0XHRcdFx0XHRcdHJldHVybiBpICsgY2FsZW5kYXIubWluTW9udGg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRocm93ICgkLmNhbGVuZGFycy5sb2NhbC51bmtub3duTmFtZUF0IHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10udW5rbm93bk5hbWVBdCkuXG5cdFx0XHRcdFx0cmVwbGFjZSgvXFx7MFxcfS8sIGlWYWx1ZSk7XG5cdFx0XHR9O1xuXHRcdFx0Ly8gQ29uZmlybSB0aGF0IGEgbGl0ZXJhbCBjaGFyYWN0ZXIgbWF0Y2hlcyB0aGUgc3RyaW5nIHZhbHVlXG5cdFx0XHR2YXIgY2hlY2tMaXRlcmFsID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICh2YWx1ZS5jaGFyQXQoaVZhbHVlKSAhPT0gZm9ybWF0LmNoYXJBdChpRm9ybWF0KSkge1xuXHRcdFx0XHRcdHRocm93ICgkLmNhbGVuZGFycy5sb2NhbC51bmV4cGVjdGVkTGl0ZXJhbEF0IHx8XG5cdFx0XHRcdFx0XHQkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLnVuZXhwZWN0ZWRMaXRlcmFsQXQpLnJlcGxhY2UoL1xcezBcXH0vLCBpVmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlWYWx1ZSsrO1xuXHRcdFx0fTtcblx0XHRcdHZhciBpVmFsdWUgPSAwO1xuXHRcdFx0Zm9yICh2YXIgaUZvcm1hdCA9IDA7IGlGb3JtYXQgPCBmb3JtYXQubGVuZ3RoOyBpRm9ybWF0KyspIHtcblx0XHRcdFx0aWYgKGxpdGVyYWwpIHtcblx0XHRcdFx0XHRpZiAoZm9ybWF0LmNoYXJBdChpRm9ybWF0KSA9PT0gXCInXCIgJiYgIWRvdWJsZWQoXCInXCIpKSB7XG5cdFx0XHRcdFx0XHRsaXRlcmFsID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0Y2hlY2tMaXRlcmFsKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHN3aXRjaCAoZm9ybWF0LmNoYXJBdChpRm9ybWF0KSkge1xuXHRcdFx0XHRcdFx0Y2FzZSAnZCc6IGRheSA9IGdldE51bWJlcignZCcpOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0QnOiBnZXROYW1lKCdEJywgZGF5TmFtZXNTaG9ydCwgZGF5TmFtZXMpOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ28nOiBkb3kgPSBnZXROdW1iZXIoJ28nKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICd3JzogZ2V0TnVtYmVyKCd3Jyk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnbSc6IG1vbnRoID0gZ2V0TnVtYmVyKCdtJyk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnTSc6IG1vbnRoID0gZ2V0TmFtZSgnTScsIG1vbnRoTmFtZXNTaG9ydCwgbW9udGhOYW1lcyk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAneSc6XG5cdFx0XHRcdFx0XHRcdHZhciBpU2F2ZSA9IGlGb3JtYXQ7XG5cdFx0XHRcdFx0XHRcdHNob3J0WWVhciA9ICFkb3VibGVkKCd5JywgMik7XG5cdFx0XHRcdFx0XHRcdGlGb3JtYXQgPSBpU2F2ZTtcblx0XHRcdFx0XHRcdFx0eWVhciA9IGdldE51bWJlcigneScsIDIpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ1knOiB5ZWFyID0gZ2V0TnVtYmVyKCdZJywgMik7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnSic6XG5cdFx0XHRcdFx0XHRcdGpkID0gZ2V0TnVtYmVyKCdKJykgKyAwLjU7XG5cdFx0XHRcdFx0XHRcdGlmICh2YWx1ZS5jaGFyQXQoaVZhbHVlKSA9PT0gJy4nKSB7XG5cdFx0XHRcdFx0XHRcdFx0aVZhbHVlKys7XG5cdFx0XHRcdFx0XHRcdFx0Z2V0TnVtYmVyKCdKJyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdAJzogamQgPSBnZXROdW1iZXIoJ0AnKSAvIHRoaXMuU0VDU19QRVJfREFZICsgdGhpcy5VTklYX0VQT0NIOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJyEnOiBqZCA9IGdldE51bWJlcignIScpIC8gdGhpcy5USUNLU19QRVJfREFZICsgdGhpcy5USUNLU19FUE9DSDsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICcqJzogaVZhbHVlID0gdmFsdWUubGVuZ3RoOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCInXCI6XG5cdFx0XHRcdFx0XHRcdGlmIChkb3VibGVkKFwiJ1wiKSkge1xuXHRcdFx0XHRcdFx0XHRcdGNoZWNrTGl0ZXJhbCgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGxpdGVyYWwgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDogY2hlY2tMaXRlcmFsKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoaVZhbHVlIDwgdmFsdWUubGVuZ3RoKSB7XG5cdFx0XHRcdHRocm93ICQuY2FsZW5kYXJzLmxvY2FsLnVuZXhwZWN0ZWRUZXh0IHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10udW5leHBlY3RlZFRleHQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoeWVhciA9PT0gLTEpIHtcblx0XHRcdFx0eWVhciA9IHRoaXMudG9kYXkoKS55ZWFyKCk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmICh5ZWFyIDwgMTAwICYmIHNob3J0WWVhcikge1xuXHRcdFx0XHR5ZWFyICs9IChzaG9ydFllYXJDdXRvZmYgPT09IC0xID8gMTkwMCA6IHRoaXMudG9kYXkoKS55ZWFyKCkgLVxuXHRcdFx0XHRcdHRoaXMudG9kYXkoKS55ZWFyKCkgJSAxMDAgLSAoeWVhciA8PSBzaG9ydFllYXJDdXRvZmYgPyAwIDogMTAwKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZG95ID4gLTEpIHtcblx0XHRcdFx0bW9udGggPSAxO1xuXHRcdFx0XHRkYXkgPSBkb3k7XG5cdFx0XHRcdGZvciAodmFyIGRpbSA9IHRoaXMuZGF5c0luTW9udGgoeWVhciwgbW9udGgpOyBkYXkgPiBkaW07IGRpbSA9IHRoaXMuZGF5c0luTW9udGgoeWVhciwgbW9udGgpKSB7XG5cdFx0XHRcdFx0bW9udGgrKztcblx0XHRcdFx0XHRkYXkgLT0gZGltO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gKGpkID4gLTEgPyB0aGlzLmZyb21KRChqZCkgOiB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSkpO1xuXHRcdH0sXG5cblx0XHQvKiogQSBkYXRlIG1heSBiZSBzcGVjaWZpZWQgYXMgYW4gZXhhY3QgdmFsdWUgb3IgYSByZWxhdGl2ZSBvbmUuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0gZGF0ZVNwZWMge0NEYXRlfG51bWJlcnxzdHJpbmd9IFRoZSBkYXRlIGFzIGFuIG9iamVjdCBvciBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdCBvclxuXHRcdFx0XHRcdGFuIG9mZnNldCAtIG51bWVyaWMgZGF5cyBmcm9tIHRvZGF5LCBvciBzdHJpbmcgYW1vdW50cyBhbmQgcGVyaW9kcywgZS5nLiAnKzFtICsydycuXG5cdFx0XHRAcGFyYW0gZGVmYXVsdERhdGUge0NEYXRlfSBUaGUgZGF0ZSB0byB1c2UgaWYgbm8gb3RoZXIgc3VwcGxpZWQsIG1heSBiZSA8Y29kZT5udWxsPC9jb2RlPi5cblx0XHRcdEBwYXJhbSBjdXJyZW50RGF0ZSB7Q0RhdGV9IFRoZSBjdXJyZW50IGRhdGUgYXMgYSBwb3NzaWJsZSBiYXNpcyBmb3IgcmVsYXRpdmUgZGF0ZXMsXG5cdFx0XHRcdFx0aWYgPGNvZGU+bnVsbDwvY29kZT4gdG9kYXkgaXMgdXNlZCAob3B0aW9uYWwpXG5cdFx0XHRAcGFyYW0gW2RhdGVGb3JtYXRdIHtzdHJpbmd9IFRoZSBleHBlY3RlZCBkYXRlIGZvcm1hdCAtIHNlZSA8YSBocmVmPVwiI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4uXG5cdFx0XHRAcGFyYW0gW3NldHRpbmdzXSB7b2JqZWN0fSBBZGRpdGlvbmFsIG9wdGlvbnMgd2hvc2UgYXR0cmlidXRlcyBpbmNsdWRlOlxuXHRcdFx0QHByb3BlcnR5IFtzaG9ydFllYXJDdXRvZmZdIHtudW1iZXJ9IFRoZSBjdXRvZmYgeWVhciBmb3IgZGV0ZXJtaW5pbmcgdGhlIGNlbnR1cnkuXG5cdFx0XHRAcHJvcGVydHkgW2RheU5hbWVzU2hvcnRdIHtzdHJpbmdbXX0gQWJicmV2aWF0ZWQgbmFtZXMgb2YgdGhlIGRheXMgZnJvbSBTdW5kYXkuXG5cdFx0XHRAcHJvcGVydHkgW2RheU5hbWVzXSB7c3RyaW5nW119IE5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5LlxuXHRcdFx0QHByb3BlcnR5IFttb250aE5hbWVzU2hvcnRdIHtzdHJpbmdbXX0gQWJicmV2aWF0ZWQgbmFtZXMgb2YgdGhlIG1vbnRocy5cblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhOYW1lc10ge3N0cmluZ1tdfSBOYW1lcyBvZiB0aGUgbW9udGhzLlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBkZWNvZGVkIGRhdGUuICovXG5cdFx0ZGV0ZXJtaW5lRGF0ZTogZnVuY3Rpb24oZGF0ZVNwZWMsIGRlZmF1bHREYXRlLCBjdXJyZW50RGF0ZSwgZGF0ZUZvcm1hdCwgc2V0dGluZ3MpIHtcblx0XHRcdGlmIChjdXJyZW50RGF0ZSAmJiB0eXBlb2YgY3VycmVudERhdGUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdHNldHRpbmdzID0gZGF0ZUZvcm1hdDtcblx0XHRcdFx0ZGF0ZUZvcm1hdCA9IGN1cnJlbnREYXRlO1xuXHRcdFx0XHRjdXJyZW50RGF0ZSA9IG51bGw7XG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIGRhdGVGb3JtYXQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHNldHRpbmdzID0gZGF0ZUZvcm1hdDtcblx0XHRcdFx0ZGF0ZUZvcm1hdCA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGNhbGVuZGFyID0gdGhpcztcblx0XHRcdHZhciBvZmZzZXRTdHJpbmcgPSBmdW5jdGlvbihvZmZzZXQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRyZXR1cm4gY2FsZW5kYXIucGFyc2VEYXRlKGRhdGVGb3JtYXQsIG9mZnNldCwgc2V0dGluZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0Ly8gSWdub3JlXG5cdFx0XHRcdH1cblx0XHRcdFx0b2Zmc2V0ID0gb2Zmc2V0LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHZhciBkYXRlID0gKG9mZnNldC5tYXRjaCgvXmMvKSAmJiBjdXJyZW50RGF0ZSA/XG5cdFx0XHRcdFx0Y3VycmVudERhdGUubmV3RGF0ZSgpIDogbnVsbCkgfHwgY2FsZW5kYXIudG9kYXkoKTtcblx0XHRcdFx0dmFyIHBhdHRlcm4gPSAvKFsrLV0/WzAtOV0rKVxccyooZHx3fG18eSk/L2c7XG5cdFx0XHRcdHZhciBtYXRjaGVzID0gcGF0dGVybi5leGVjKG9mZnNldCk7XG5cdFx0XHRcdHdoaWxlIChtYXRjaGVzKSB7XG5cdFx0XHRcdFx0ZGF0ZS5hZGQocGFyc2VJbnQobWF0Y2hlc1sxXSwgMTApLCBtYXRjaGVzWzJdIHx8ICdkJyk7XG5cdFx0XHRcdFx0bWF0Y2hlcyA9IHBhdHRlcm4uZXhlYyhvZmZzZXQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBkYXRlO1xuXHRcdFx0fTtcblx0XHRcdGRlZmF1bHREYXRlID0gKGRlZmF1bHREYXRlID8gZGVmYXVsdERhdGUubmV3RGF0ZSgpIDogbnVsbCk7XG5cdFx0XHRkYXRlU3BlYyA9IChkYXRlU3BlYyA9PSBudWxsID8gZGVmYXVsdERhdGUgOlxuXHRcdFx0XHQodHlwZW9mIGRhdGVTcGVjID09PSAnc3RyaW5nJyA/IG9mZnNldFN0cmluZyhkYXRlU3BlYykgOiAodHlwZW9mIGRhdGVTcGVjID09PSAnbnVtYmVyJyA/XG5cdFx0XHRcdChpc05hTihkYXRlU3BlYykgfHwgZGF0ZVNwZWMgPT09IEluZmluaXR5IHx8IGRhdGVTcGVjID09PSAtSW5maW5pdHkgPyBkZWZhdWx0RGF0ZSA6XG5cdFx0XHRcdGNhbGVuZGFyLnRvZGF5KCkuYWRkKGRhdGVTcGVjLCAnZCcpKSA6IGNhbGVuZGFyLm5ld0RhdGUoZGF0ZVNwZWMpKSkpO1xuXHRcdFx0cmV0dXJuIGRhdGVTcGVjO1xuXHRcdH1cblx0fSk7XG5cbn0pKGpRdWVyeSk7XG4vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBDYWxlbmRhcnMgZGF0ZSBwaWNrZXIgZm9yIGpRdWVyeSB2Mi4wLjEuXG4gICBXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpIEF1Z3VzdCAyMDA5LlxuICAgQXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvbGljZW5jZS5odG1sKSBsaWNlbnNlLiBcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xuXG4oZnVuY3Rpb24oJCkgeyAvLyBIaWRlIHNjb3BlLCBubyAkIGNvbmZsaWN0XG5cblx0dmFyIHBsdWdpbk5hbWUgPSAnY2FsZW5kYXJzUGlja2VyJztcblxuXG5cdC8qKiBDcmVhdGUgdGhlIGNhbGVuZGFycyBkYXRlcGlja2VyIHBsdWdpbi5cblx0XHQ8cD5TZXRzIGFuIGlucHV0IGZpZWxkIHRvIHBvcHVwIGEgY2FsZW5kYXIgZm9yIGRhdGUgZW50cnksXG5cdFx0XHRvciBhIDxjb2RlPmRpdjwvY29kZT4gb3IgPGNvZGU+c3BhbjwvY29kZT4gdG8gc2hvdyBhbiBpbmxpbmUgY2FsZW5kYXIuPC9wPlxuXHRcdDxwPkV4cGVjdHMgSFRNTCBsaWtlOjwvcD5cblx0XHQ8cHJlPiZsdDtpbnB1dCB0eXBlPVwidGV4dFwiPiBvciAmbHQ7ZGl2PiZsdDsvZGl2PjwvcHJlPlxuXHRcdDxwPlByb3ZpZGUgaW5saW5lIGNvbmZpZ3VyYXRpb24gbGlrZTo8L3A+XG5cdFx0PHByZT4mbHQ7aW5wdXQgdHlwZT1cInRleHRcIiBkYXRhLWNhbGVuZGFyc1BpY2tlcj1cIm5hbWU6ICd2YWx1ZSdcIi8+PC9wcmU+XG5cdCBcdEBjbGFzcyBDYWxlbmRhcnNQaWNrZXJcblx0XHRAYXVnbWVudHMgSlFQbHVnaW5cblx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5jYWxlbmRhcnNQaWNrZXIoKVxuICQoc2VsZWN0b3IpLmNhbGVuZGFyc1BpY2tlcih7bWluRGF0ZTogMCwgbWF4RGF0ZTogJysxbSArMXcnfSkgKi9cblx0JC5KUVBsdWdpbi5jcmVhdGVQbHVnaW4oe1xuXHRcblx0XHQvKiogVGhlIG5hbWUgb2YgdGhlIHBsdWdpbi5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXIgKi9cblx0XHRuYW1lOiBwbHVnaW5OYW1lLFxuXHRcdFxuXHRcdC8qKiBEZWZhdWx0IHRlbXBsYXRlIGZvciBnZW5lcmF0aW5nIGEgZGF0ZXBpY2tlci5cblx0XHRcdEluc2VydCBhbnl3aGVyZTpcblx0XHRcdDx1bD5cblx0XHRcdDxsaT4ne2wxMG46bmFtZX0nIHRvIGluc2VydCBsb2NhbGlzZWQgdmFsdWUgZm9yIG5hbWUsPC9saT5cblx0XHRcdDxsaT4ne2xpbms6bmFtZX0nIHRvIGluc2VydCBhIGxpbmsgdHJpZ2dlciBmb3IgY29tbWFuZCBuYW1lLDwvbGk+XG5cdFx0XHQ8bGk+J3tidXR0b246bmFtZX0nIHRvIGluc2VydCBhIGJ1dHRvbiB0cmlnZ2VyIGZvciBjb21tYW5kIG5hbWUsPC9saT5cblx0XHRcdDxsaT4ne3BvcHVwOnN0YXJ0fS4uLntwb3B1cDplbmR9JyB0byBtYXJrIGEgc2VjdGlvbiBmb3IgaW5jbHVzaW9uIGluIGEgcG9wdXAgZGF0ZXBpY2tlciBvbmx5LDwvbGk+XG5cdFx0XHQ8bGk+J3tpbmxpbmU6c3RhcnR9Li4ue2lubGluZTplbmR9JyB0byBtYXJrIGEgc2VjdGlvbiBmb3IgaW5jbHVzaW9uIGluIGFuIGlubGluZSBkYXRlcGlja2VyIG9ubHkuPC9saT5cblx0XHRcdDwvdWw+XG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJvcGVydHkgcGlja2VyIHtzdHJpbmd9IE92ZXJhbGwgc3RydWN0dXJlOiAne21vbnRoc30nIHRvIGluc2VydCBjYWxlbmRhciBtb250aHMuXG5cdFx0XHRAcHJvcGVydHkgbW9udGhSb3cge3N0cmluZ30gT25lIHJvdyBvZiBtb250aHM6ICd7bW9udGhzfScgdG8gaW5zZXJ0IGNhbGVuZGFyIG1vbnRocy5cblx0XHRcdEBwcm9wZXJ0eSBtb250aCB7c3RyaW5nfSBBIHNpbmdsZSBtb250aDogJ3ttb250aEhlYWRlcjxlbT46ZGF0ZUZvcm1hdDwvZW0+fScgdG8gaW5zZXJ0IHRoZSBtb250aCBoZWFkZXIgLVxuXHRcdFx0XHRcdFx0PGVtPmRhdGVGb3JtYXQ8L2VtPiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gJ01NIHl5eXknLFxuXHRcdFx0XHRcdFx0J3t3ZWVrSGVhZGVyfScgdG8gaW5zZXJ0IGEgd2VlayBoZWFkZXIsICd7d2Vla3N9JyB0byBpbnNlcnQgdGhlIG1vbnRoJ3Mgd2Vla3MuXG5cdFx0XHRAcHJvcGVydHkgd2Vla0hlYWRlciB7c3RyaW5nfSBBIHdlZWsgaGVhZGVyOiAne2RheXN9JyB0byBpbnNlcnQgaW5kaXZpZHVhbCBkYXkgbmFtZXMuXG5cdFx0XHRAcHJvcGVydHkgZGF5SGVhZGVyIHtzdHJpbmd9IEluZGl2aWR1YWwgZGF5IGhlYWRlcjogJ3tkYXl9JyB0byBpbnNlcnQgZGF5IG5hbWUuXG5cdFx0XHRAcHJvcGVydHkgd2VlayB7c3RyaW5nfSBPbmUgd2VlayBvZiB0aGUgbW9udGg6ICd7ZGF5c30nIHRvIGluc2VydCB0aGUgd2VlaydzIGRheXMsXG5cdFx0XHRcdFx0XHQne3dlZWtPZlllYXJ9JyB0byBpbnNlcnQgd2VlayBvZiB5ZWFyLlxuXHRcdFx0QHByb3BlcnR5IGRheSB7c3RyaW5nfSBBbiBpbmRpdmlkdWFsIGRheTogJ3tkYXl9JyB0byBpbnNlcnQgZGF5IHZhbHVlLlxuXHRcdFx0QHByb3BlcnR5IG1vbnRoU2VsZWN0b3Ige3N0cmluZ30galF1ZXJ5IHNlbGVjdG9yLCByZWxhdGl2ZSB0byBwaWNrZXIsIGZvciBhIHNpbmdsZSBtb250aC5cblx0XHRcdEBwcm9wZXJ0eSBkYXlTZWxlY3RvciB7c3RyaW5nfSBqUXVlcnkgc2VsZWN0b3IsIHJlbGF0aXZlIHRvIHBpY2tlciwgZm9yIGluZGl2aWR1YWwgZGF5cy5cblx0XHRcdEBwcm9wZXJ0eSBydGxDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgcmlnaHQtdG8tbGVmdCAoUlRMKSBsYW5ndWFnZXMuXG5cdFx0XHRAcHJvcGVydHkgbXVsdGlDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgbXVsdGktbW9udGggZGF0ZXBpY2tlcnMuXG5cdFx0XHRAcHJvcGVydHkgZGVmYXVsdENsYXNzIHtzdHJpbmd9IENsYXNzIGZvciBzZWxlY3RhYmxlIGRhdGVzLlxuXHRcdFx0QHByb3BlcnR5IHNlbGVjdGVkQ2xhc3Mge3N0cmluZ30gQ2xhc3MgZm9yIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlcy5cblx0XHRcdEBwcm9wZXJ0eSBoaWdobGlnaHRlZENsYXNzIHtzdHJpbmd9IENsYXNzIGZvciBoaWdobGlnaHRlZCBkYXRlcy5cblx0XHRcdEBwcm9wZXJ0eSB0b2RheUNsYXNzIHtzdHJpbmd9IENsYXNzIGZvciB0b2RheS5cblx0XHRcdEBwcm9wZXJ0eSBvdGhlck1vbnRoQ2xhc3Mge3N0cmluZ30gQ2xhc3MgZm9yIGRheXMgZnJvbSBvdGhlciBtb250aHMuXG5cdFx0XHRAcHJvcGVydHkgd2Vla2VuZENsYXNzIHtzdHJpbmd9IENsYXNzIGZvciBkYXlzIG9uIHdlZWtlbmRzLlxuXHRcdFx0QHByb3BlcnR5IGNvbW1hbmRDbGFzcyB7c3RyaW5nfSBDbGFzcyBwcmVmaXggZm9yIGNvbW1hbmRzLlxuXHRcdFx0QHByb3BlcnR5IGNvbW1hbmRCdXR0b25DbGFzcyB7c3RyaW5nfSBFeHRyYSBjbGFzcyhlcykgZm9yIGNvbW1hbmRzIHRoYXQgYXJlIGJ1dHRvbnMuXG5cdFx0XHRAcHJvcGVydHkgY29tbWFuZExpbmtDbGFzcyB7c3RyaW5nfSBFeHRyYSBjbGFzcyhlcykgZm9yIGNvbW1hbmRzIHRoYXQgYXJlIGxpbmtzLlxuXHRcdFx0QHByb3BlcnR5IGRpc2FibGVkQ2xhc3Mge3N0cmluZ30gQ2xhc3MgZm9yIGRpc2FibGVkIGNvbW1hbmRzLiAqL1xuXHRcdGRlZmF1bHRSZW5kZXJlcjoge1xuXHRcdFx0cGlja2VyOiAnPGRpdiBjbGFzcz1cImNhbGVuZGFyc1wiPicgK1xuXHRcdFx0JzxkaXYgY2xhc3M9XCJjYWxlbmRhcnMtbmF2XCI+e2xpbms6cHJldn17bGluazp0b2RheX17bGluazpuZXh0fTwvZGl2Pnttb250aHN9JyArXG5cdFx0XHQne3BvcHVwOnN0YXJ0fTxkaXYgY2xhc3M9XCJjYWxlbmRhcnMtY3RybFwiPntsaW5rOmNsZWFyfXtsaW5rOmNsb3NlfTwvZGl2Pntwb3B1cDplbmR9JyArXG5cdFx0XHQnPGRpdiBjbGFzcz1cImNhbGVuZGFycy1jbGVhci1maXhcIj48L2Rpdj48L2Rpdj4nLFxuXHRcdFx0bW9udGhSb3c6ICc8ZGl2IGNsYXNzPVwiY2FsZW5kYXJzLW1vbnRoLXJvd1wiPnttb250aHN9PC9kaXY+Jyxcblx0XHRcdG1vbnRoOiAnPGRpdiBjbGFzcz1cImNhbGVuZGFycy1tb250aFwiPjxkaXYgY2xhc3M9XCJjYWxlbmRhcnMtbW9udGgtaGVhZGVyXCI+e21vbnRoSGVhZGVyfTwvZGl2PicgK1xuXHRcdFx0Jzx0YWJsZT48dGhlYWQ+e3dlZWtIZWFkZXJ9PC90aGVhZD48dGJvZHk+e3dlZWtzfTwvdGJvZHk+PC90YWJsZT48L2Rpdj4nLFxuXHRcdFx0d2Vla0hlYWRlcjogJzx0cj57ZGF5c308L3RyPicsXG5cdFx0XHRkYXlIZWFkZXI6ICc8dGg+e2RheX08L3RoPicsXG5cdFx0XHR3ZWVrOiAnPHRyPntkYXlzfTwvdHI+Jyxcblx0XHRcdGRheTogJzx0ZD57ZGF5fTwvdGQ+Jyxcblx0XHRcdG1vbnRoU2VsZWN0b3I6ICcuY2FsZW5kYXJzLW1vbnRoJyxcblx0XHRcdGRheVNlbGVjdG9yOiAndGQnLFxuXHRcdFx0cnRsQ2xhc3M6ICdjYWxlbmRhcnMtcnRsJyxcblx0XHRcdG11bHRpQ2xhc3M6ICdjYWxlbmRhcnMtbXVsdGknLFxuXHRcdFx0ZGVmYXVsdENsYXNzOiAnJyxcblx0XHRcdHNlbGVjdGVkQ2xhc3M6ICdjYWxlbmRhcnMtc2VsZWN0ZWQnLFxuXHRcdFx0aGlnaGxpZ2h0ZWRDbGFzczogJ2NhbGVuZGFycy1oaWdobGlnaHQnLFxuXHRcdFx0dG9kYXlDbGFzczogJ2NhbGVuZGFycy10b2RheScsXG5cdFx0XHRvdGhlck1vbnRoQ2xhc3M6ICdjYWxlbmRhcnMtb3RoZXItbW9udGgnLFxuXHRcdFx0d2Vla2VuZENsYXNzOiAnY2FsZW5kYXJzLXdlZWtlbmQnLFxuXHRcdFx0Y29tbWFuZENsYXNzOiAnY2FsZW5kYXJzLWNtZCcsXG5cdFx0XHRjb21tYW5kQnV0dG9uQ2xhc3M6ICcnLFxuXHRcdFx0Y29tbWFuZExpbmtDbGFzczogJycsXG5cdFx0XHRkaXNhYmxlZENsYXNzOiAnY2FsZW5kYXJzLWRpc2FibGVkJ1xuXHRcdH0sXG5cdFxuXHRcdC8qKiBDb21tYW5kIGFjdGlvbnMgdGhhdCBtYXkgYmUgYWRkZWQgdG8gYSBsYXlvdXQgYnkgbmFtZS5cblx0XHRcdDx1bD5cblx0XHRcdDxsaT5wcmV2IC0gU2hvdyB0aGUgcHJldmlvdXMgbW9udGggKGJhc2VkIG9uIDxjb2RlPm1vbnRoc1RvU3RlcDwvY29kZT4gb3B0aW9uKSAtIDxlbT5QYWdlVXA8L2VtPjwvbGk+XG5cdFx0XHQ8bGk+cHJldkp1bXAgLSBTaG93IHRoZSBwcmV2aW91cyB5ZWFyIChiYXNlZCBvbiA8Y29kZT5tb250aHNUb0p1bXA8L2NvZGU+IG9wdGlvbikgLSA8ZW0+Q3RybCtQYWdlVXA8L2VtPjwvbGk+XG5cdFx0XHQ8bGk+bmV4dCAtIFNob3cgdGhlIG5leHQgbW9udGggKGJhc2VkIG9uIDxjb2RlPm1vbnRoc1RvU3RlcDwvY29kZT4gb3B0aW9uKSAtIDxlbT5QYWdlRG93bjwvZW0+PC9saT5cblx0XHRcdDxsaT5uZXh0SnVtcCAtIFNob3cgdGhlIG5leHQgeWVhciAoYmFzZWQgb24gPGNvZGU+bW9udGhzVG9KdW1wPC9jb2RlPiBvcHRpb24pIC0gPGVtPkN0cmwrUGFnZURvd248L2VtPjwvbGk+XG5cdFx0XHQ8bGk+Y3VycmVudCAtIFNob3cgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBtb250aCBvciB0b2RheSdzIGlmIG5vbmUgc2VsZWN0ZWQgLSA8ZW0+Q3RybCtIb21lPC9lbT48L2xpPlxuXHRcdFx0PGxpPnRvZGF5IC0gU2hvdyB0b2RheSdzIG1vbnRoIC0gPGVtPkN0cmwrSG9tZTwvZW0+PC9saT5cblx0XHRcdDxsaT5jbGVhciAtIEVyYXNlIHRoZSBkYXRlIGFuZCBjbG9zZSB0aGUgZGF0ZXBpY2tlciBwb3B1cCAtIDxlbT5DdHJsK0VuZDwvZW0+PC9saT5cblx0XHRcdDxsaT5jbG9zZSAtIENsb3NlIHRoZSBkYXRlcGlja2VyIHBvcHVwIC0gPGVtPkVzYzwvZW0+PC9saT5cblx0XHRcdDxsaT5wcmV2V2VlayAtIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgcHJldmlvdXMgd2VlayAtIDxlbT5DdHJsK1VwPC9lbT48L2xpPlxuXHRcdFx0PGxpPnByZXZEYXkgLSBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHByZXZpb3VzIGRheSAtIDxlbT5DdHJsK0xlZnQ8L2VtPjwvbGk+XG5cdFx0XHQ8bGk+bmV4dERheSAtIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgbmV4dCBkYXkgLSA8ZW0+Q3RybCtSaWdodDwvZW0+PC9saT5cblx0XHRcdDxsaT5uZXh0V2VlayAtIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgbmV4dCB3ZWVrIC0gPGVtPkN0cmwrRG93bjwvZW0+PC9saT5cblx0XHRcdDwvdWw+XG5cdFx0XHRUaGUgY29tbWFuZCBuYW1lIGlzIHRoZSBrZXkgbmFtZSBhbmQgaXMgdXNlZCB0byBhZGQgdGhlIGNvbW1hbmQgdG8gYSBsYXlvdXRcblx0XHRcdHdpdGggJ3tidXR0b246bmFtZX0nIG9yICd7bGluazpuYW1lfScuIEVhY2ggaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcy5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcm9wZXJ0eSB0ZXh0IHtzdHJpbmd9IFRoZSBmaWVsZCBpbiB0aGUgcmVnaW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBkaXNwbGF5ZWQgdGV4dC5cblx0XHRcdEBwcm9wZXJ0eSBzdGF0dXMge3N0cmluZ30gVGhlIGZpZWxkIGluIHRoZSByZWdpb25hbCBzZXR0aW5ncyBmb3IgdGhlIHN0YXR1cyB0ZXh0LlxuXHRcdFx0QHByb3BlcnR5IGtleXN0cm9rZSB7b2JqZWN0fSBUaGUga2V5c3Ryb2tlIHRvIHRyaWdnZXIgdGhlIGFjdGlvbiwgd2l0aCBhdHRyaWJ1dGVzOlxuXHRcdFx0XHQ8Y29kZT5rZXlDb2RlPC9jb2RlPiB7bnVtYmVyfSB0aGUgY29kZSBmb3IgdGhlIGtleXN0cm9rZSxcblx0XHRcdFx0PGNvZGU+Y3RybEtleTwvY29kZT4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIDxlbT5DdHJsPC9lbT4gaXMgcmVxdWlyZWQsXG5cdFx0XHRcdDxjb2RlPmFsdEtleTwvY29kZT4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIDxlbT5BbHQ8L2VtPiBpcyByZXF1aXJlZCxcblx0XHRcdFx0PGNvZGU+c2hpZnRLZXk8L2NvZGU+IHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiA8ZW0+U2hpZnQ8L2VtPiBpcyByZXF1aXJlZC5cblx0XHRcdEBwcm9wZXJ0eSBlbmFibGVkIHtDYWxlbmRhcnNQaWNrZXJDb21tYW5kRW5hYmxlZH0gVGhlIGZ1bmN0aW9uIHRoYXQgaW5kaWNhdGVzIHRoZSBjb21tYW5kIGlzIGVuYWJsZWQuXG5cdFx0XHRAcHJvcGVydHkgZGF0ZSB7Q2FsZW5kYXJzUGlja2VyQ29tbWFuZERhdGV9IFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGRhdGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWN0aW9uLlxuXHRcdFx0QHByb3BlcnR5IGFjdGlvbiB7Q2FsZW5kYXJzUGlja2VyQ29tbWFuZEFjdGlvbn0gVGhlIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0aGUgYWN0aW9uLiAqL1xuXHRcdGNvbW1hbmRzOiB7XG5cdFx0XHRwcmV2OiB7dGV4dDogJ3ByZXZUZXh0Jywgc3RhdHVzOiAncHJldlN0YXR1cycsIC8vIFByZXZpb3VzIG1vbnRoXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDMzfSwgLy8gUGFnZSB1cFxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0dmFyIG1pbkRhdGUgPSBpbnN0LmN1ck1pbkRhdGUoKTtcblx0XHRcdFx0XHRyZXR1cm4gKCFtaW5EYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdFx0YWRkKDEgLSBpbnN0Lm9wdGlvbnMubW9udGhzVG9TdGVwIC0gaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKS5cblx0XHRcdFx0XHRcdGRheShpbnN0Lm9wdGlvbnMuY2FsZW5kYXIubWluRGF5KS5hZGQoLTEsICdkJykuY29tcGFyZVRvKG1pbkRhdGUpICE9PSAtMSk7IH0sXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXG5cdFx0XHRcdFx0XHRhZGQoLWluc3Qub3B0aW9ucy5tb250aHNUb1N0ZXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpOyB9LFxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdFx0XHRwbHVnaW4uY2hhbmdlTW9udGgodGhpcywgLWluc3Qub3B0aW9ucy5tb250aHNUb1N0ZXApOyB9XG5cdFx0XHR9LFxuXHRcdFx0cHJldkp1bXA6IHt0ZXh0OiAncHJldkp1bXBUZXh0Jywgc3RhdHVzOiAncHJldkp1bXBTdGF0dXMnLCAvLyBQcmV2aW91cyB5ZWFyXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDMzLCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIFBhZ2UgdXBcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XG5cdFx0XHRcdFx0cmV0dXJuICghbWluRGF0ZSB8fCBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cblx0XHRcdFx0XHRcdGFkZCgxIC0gaW5zdC5vcHRpb25zLm1vbnRoc1RvSnVtcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXG5cdFx0XHRcdFx0XHRkYXkoaW5zdC5vcHRpb25zLmNhbGVuZGFyLm1pbkRheSkuYWRkKC0xLCAnZCcpLmNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpOyB9LFxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdFx0YWRkKC1pbnN0Lm9wdGlvbnMubW9udGhzVG9KdW1wIC0gaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKS5cblx0XHRcdFx0XHRcdGRheShpbnN0Lm9wdGlvbnMuY2FsZW5kYXIubWluRGF5KTsgfSxcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0cGx1Z2luLmNoYW5nZU1vbnRoKHRoaXMsIC1pbnN0Lm9wdGlvbnMubW9udGhzVG9KdW1wKTsgfVxuXHRcdFx0fSxcblx0XHRcdG5leHQ6IHt0ZXh0OiAnbmV4dFRleHQnLCBzdGF0dXM6ICduZXh0U3RhdHVzJywgLy8gTmV4dCBtb250aFxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzNH0sIC8vIFBhZ2UgZG93blxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xuXHRcdFx0XHRcdHJldHVybiAoIW1heERhdGUgfHwgaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXG5cdFx0XHRcdFx0XHRhZGQoaW5zdC5vcHRpb25zLm1vbnRoc1RvU3RlcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXG5cdFx0XHRcdFx0XHRkYXkoaW5zdC5vcHRpb25zLmNhbGVuZGFyLm1pbkRheSkuY29tcGFyZVRvKG1heERhdGUpICE9PSArMSk7IH0sXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXG5cdFx0XHRcdFx0XHRhZGQoaW5zdC5vcHRpb25zLm1vbnRoc1RvU3RlcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXG5cdFx0XHRcdFx0XHRkYXkoaW5zdC5vcHRpb25zLmNhbGVuZGFyLm1pbkRheSk7IH0sXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHBsdWdpbi5jaGFuZ2VNb250aCh0aGlzLCBpbnN0Lm9wdGlvbnMubW9udGhzVG9TdGVwKTsgfVxuXHRcdFx0fSxcblx0XHRcdG5leHRKdW1wOiB7dGV4dDogJ25leHRKdW1wVGV4dCcsIHN0YXR1czogJ25leHRKdW1wU3RhdHVzJywgLy8gTmV4dCB5ZWFyXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDM0LCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIFBhZ2UgZG93blxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xuXHRcdFx0XHRcdHJldHVybiAoIW1heERhdGUgfHwgaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXG5cdFx0XHRcdFx0XHRhZGQoaW5zdC5vcHRpb25zLm1vbnRoc1RvSnVtcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXG5cdFx0XHRcdFx0XHRkYXkoaW5zdC5vcHRpb25zLmNhbGVuZGFyLm1pbkRheSkuY29tcGFyZVRvKG1heERhdGUpICE9PSArMSk7XHR9LFxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdFx0YWRkKGluc3Qub3B0aW9ucy5tb250aHNUb0p1bXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpOyB9LFxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdFx0XHRwbHVnaW4uY2hhbmdlTW9udGgodGhpcywgaW5zdC5vcHRpb25zLm1vbnRoc1RvSnVtcCk7IH1cblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50OiB7dGV4dDogJ2N1cnJlbnRUZXh0Jywgc3RhdHVzOiAnY3VycmVudFN0YXR1cycsIC8vIEN1cnJlbnQgbW9udGhcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzYsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgSG9tZVxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0dmFyIG1pbkRhdGUgPSBpbnN0LmN1ck1pbkRhdGUoKTtcblx0XHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XG5cdFx0XHRcdFx0dmFyIGN1ckRhdGUgPSBpbnN0LnNlbGVjdGVkRGF0ZXNbMF0gfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCk7XG5cdFx0XHRcdFx0cmV0dXJuICghbWluRGF0ZSB8fCBjdXJEYXRlLmNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpICYmXG5cdFx0XHRcdFx0XHQoIW1heERhdGUgfHwgY3VyRGF0ZS5jb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKTsgfSxcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHJldHVybiBpbnN0LnNlbGVjdGVkRGF0ZXNbMF0gfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCk7IH0sXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBjdXJEYXRlID0gaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpO1xuXHRcdFx0XHRcdHBsdWdpbi5zaG93TW9udGgodGhpcywgY3VyRGF0ZS55ZWFyKCksIGN1ckRhdGUubW9udGgoKSk7IH1cblx0XHRcdH0sXG5cdFx0XHR0b2RheToge3RleHQ6ICd0b2RheVRleHQnLCBzdGF0dXM6ICd0b2RheVN0YXR1cycsIC8vIFRvZGF5J3MgbW9udGhcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzYsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgSG9tZVxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0dmFyIG1pbkRhdGUgPSBpbnN0LmN1ck1pbkRhdGUoKTtcblx0XHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XG5cdFx0XHRcdFx0cmV0dXJuICghbWluRGF0ZSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKS5jb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKSAmJlxuXHRcdFx0XHRcdFx0KCFtYXhEYXRlIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpLmNvbXBhcmVUbyhtYXhEYXRlKSAhPT0gKzEpOyB9LFxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKTsgfSxcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7IHBsdWdpbi5zaG93TW9udGgodGhpcyk7IH1cblx0XHRcdH0sXG5cdFx0XHRjbGVhcjoge3RleHQ6ICdjbGVhclRleHQnLCBzdGF0dXM6ICdjbGVhclN0YXR1cycsIC8vIENsZWFyIHRoZSBkYXRlcGlja2VyXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDM1LCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIEVuZFxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiB0cnVlOyB9LFxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiBudWxsOyB9LFxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHsgcGx1Z2luLmNsZWFyKHRoaXMpOyB9XG5cdFx0XHR9LFxuXHRcdFx0Y2xvc2U6IHt0ZXh0OiAnY2xvc2VUZXh0Jywgc3RhdHVzOiAnY2xvc2VTdGF0dXMnLCAvLyBDbG9zZSB0aGUgZGF0ZXBpY2tlclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAyN30sIC8vIEVzY2FwZVxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiB0cnVlOyB9LFxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiBudWxsOyB9LFxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHsgcGx1Z2luLmhpZGUodGhpcyk7IH1cblx0XHRcdH0sXG5cdFx0XHRwcmV2V2Vlazoge3RleHQ6ICdwcmV2V2Vla1RleHQnLCBzdGF0dXM6ICdwcmV2V2Vla1N0YXR1cycsIC8vIFByZXZpb3VzIHdlZWtcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzgsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgVXBcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XG5cdFx0XHRcdFx0cmV0dXJuICghbWluRGF0ZSB8fCBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cblx0XHRcdFx0XHRcdGFkZCgtaW5zdC5vcHRpb25zLmNhbGVuZGFyLmRheXNJbldlZWsoKSwgJ2QnKS5jb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKTsgfSxcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXG5cdFx0XHRcdFx0YWRkKC1pbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGF5c0luV2VlaygpLCAnZCcpOyB9LFxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHsgcGx1Z2luLmNoYW5nZURheSh0aGlzLCAtaW5zdC5vcHRpb25zLmNhbGVuZGFyLmRheXNJbldlZWsoKSk7IH1cblx0XHRcdH0sXG5cdFx0XHRwcmV2RGF5OiB7dGV4dDogJ3ByZXZEYXlUZXh0Jywgc3RhdHVzOiAncHJldkRheVN0YXR1cycsIC8vIFByZXZpb3VzIGRheVxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzNywgY3RybEtleTogdHJ1ZX0sIC8vIEN0cmwgKyBMZWZ0XG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuY3VyTWluRGF0ZSgpO1xuXHRcdFx0XHRcdHJldHVybiAoIW1pbkRhdGUgfHwgaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuYWRkKC0xLCAnZCcpLlxuXHRcdFx0XHRcdFx0Y29tcGFyZVRvKG1pbkRhdGUpICE9PSAtMSk7IH0sXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHsgcmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZCgtMSwgJ2QnKTsgfSxcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7IHBsdWdpbi5jaGFuZ2VEYXkodGhpcywgLTEpOyB9XG5cdFx0XHR9LFxuXHRcdFx0bmV4dERheToge3RleHQ6ICduZXh0RGF5VGV4dCcsIHN0YXR1czogJ25leHREYXlTdGF0dXMnLCAvLyBOZXh0IGRheVxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzOSwgY3RybEtleTogdHJ1ZX0sIC8vIEN0cmwgKyBSaWdodFxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xuXHRcdFx0XHRcdHJldHVybiAoIW1heERhdGUgfHwgaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuYWRkKDEsICdkJykuXG5cdFx0XHRcdFx0XHRjb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKTsgfSxcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuYWRkKDEsICdkJyk7IH0sXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkgeyBwbHVnaW4uY2hhbmdlRGF5KHRoaXMsIDEpOyB9XG5cdFx0XHR9LFxuXHRcdFx0bmV4dFdlZWs6IHt0ZXh0OiAnbmV4dFdlZWtUZXh0Jywgc3RhdHVzOiAnbmV4dFdlZWtTdGF0dXMnLCAvLyBOZXh0IHdlZWtcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogNDAsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgRG93blxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xuXHRcdFx0XHRcdHJldHVybiAoIW1heERhdGUgfHwgaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXG5cdFx0XHRcdFx0XHRhZGQoaW5zdC5vcHRpb25zLmNhbGVuZGFyLmRheXNJbldlZWsoKSwgJ2QnKS5jb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKTsgfSxcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXG5cdFx0XHRcdFx0YWRkKGluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCksICdkJyk7IH0sXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkgeyBwbHVnaW4uY2hhbmdlRGF5KHRoaXMsIGluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCkpOyB9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciBhIGNvbW1hbmQgaXMgZW5hYmxlZC5cblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJDb21tYW5kRW5hYmxlZFxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGNvbW1hbmQgaXMgZW5hYmxlZCwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEBleGFtcGxlIGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcblx0cmV0dXJuICEhaW5zdC5jdXJNaW5EYXRlKCk7XG4gfSAqL1xuXG5cdFx0LyoqIENhbGN1bGF0ZSB0aGUgcmVwcmVzZW50YXRpdmUgZGF0ZSBmb3IgYSBjb21tYW5kLlxuXHRcdFx0QGNhbGxiYWNrIENhbGVuZGFyc1BpY2tlckNvbW1hbmREYXRlXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEByZXR1cm4ge0NEYXRlfSBBIGRhdGUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgY29tbWFuZC5cblx0XHRcdEBleGFtcGxlIGRhdGU6IGZ1bmN0aW9uKGluc3QpIHtcblx0cmV0dXJuIGluc3QuY3VyTWluRGF0ZSgpO1xuIH0gKi9cblxuXHRcdC8qKiBQZXJmb3JtIHRoZSBhY3Rpb24gZm9yIGEgY29tbWFuZC5cblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJDb21tYW5kQWN0aW9uXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBleGFtcGxlIGRhdGU6IGZ1bmN0aW9uKGluc3QpIHtcblx0JC5kYXRlcGljay5zZXREYXRlKGluc3QuZWxlbSwgaW5zdC5jdXJNaW5EYXRlKCkpO1xuIH0gKi9cblxuXHRcdC8qKiBDYWxjdWxhdGUgdGhlIHdlZWsgb2YgdGhlIHllYXIgZm9yIGEgZGF0ZS5cblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJDYWxjdWxhdGVXZWVrXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBkYXRlIHRvIGV2YWx1YXRlLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgd2VlayBvZiB0aGUgeWVhci5cblx0XHRcdEBleGFtcGxlIGNhbGN1bGF0ZVdlZWs6IGZ1bmN0aW9uKGRhdGUpIHtcblx0dmFyIHN0YXJ0WWVhciA9ICQuY2FsZW5kYXJzLm5ld0RhdGUoZGF0ZS55ZWFyKCksIDEsIDEpO1xuXHRyZXR1cm4gTWF0aC5mbG9vcigoZGF0ZS5kYXlPZlllYXIoKSAtIHN0YXJ0WWVhci5kYXlPZlllYXIoKSkgLyA3KSArIDE7XG4gfSAqL1xuXG5cdFx0LyoqIFByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgYW4gaW5kaXZpZHVhbCBkYXRlIHNob3duIGluIHRoZSBjYWxlbmRhci5cblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJPbkRhdGVcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZX0gVGhlIGRhdGUgdG8gZXZhbHVhdGUuXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IEluZm9ybWF0aW9uIGFib3V0IHRoYXQgZGF0ZSwgd2l0aCB0aGUgcHJvcGVydGllcyBhYm92ZS5cblx0XHRcdEBwcm9wZXJ0eSBzZWxlY3RhYmxlIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGRhdGUgY2FuIGJlIHNlbGVjdGVkLlxuXHRcdFx0QHByb3BlcnR5IGRhdGVDbGFzcyB7c3RyaW5nfSBDbGFzcyhlcykgdG8gYmUgYXBwbGllZCB0byB0aGUgZGF0ZS5cblx0XHRcdEBwcm9wZXJ0eSBjb250ZW50IHtzdHJpbmd9IFRoZSBkYXRlIGNlbGwgY29udGVudC5cblx0XHRcdEBwcm9wZXJ0eSB0b29sdGlwIHtzdHJpbmd9IEEgcG9wdXAgdG9vbHRpcCBmb3IgdGhlIGRhdGUuXG5cdFx0XHRAZXhhbXBsZSBvbkRhdGU6IGZ1bmN0aW9uKGRhdGUpIHtcblx0cmV0dXJuIHtzZWxlY3RhYmxlOiBkYXRlLmRheSgpID4gMCAmJiBkYXRlLmRheSgpICZsdDsgNSxcblx0XHRkYXRlQ2xhc3M6IGRhdGUuZGF5KCkgPT09IDQgPyAnbGFzdC1kYXknIDogJyd9O1xuIH0gKi9cblxuXHRcdC8qKiBVcGRhdGUgdGhlIGRhdGVwaWNrZXIgZGlzcGxheS5cblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJPblNob3dcblx0XHRcdEBwYXJhbSBwaWNrZXIge2pRdWVyeX0gVGhlIGRhdGVwaWNrZXIgPGNvZGU+ZGl2PC9jb2RlPiB0byBiZSBzaG93bi5cblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QGV4YW1wbGUgb25TaG93OiBmdW5jdGlvbihwaWNrZXIsIGluc3QpIHtcblx0cGlja2VyLmFwcGVuZCgnJmx0O2J1dHRvbiB0eXBlPVwiYnV0dG9uXCI+SGkmbHQ7L2J1dHRvbj4nKS5cblx0XHRmaW5kKCdidXR0b246bGFzdCcpLmNsaWNrKGZ1bmN0aW9uKCkge1xuXHRcdFx0YWxlcnQoJ0hpIScpO1xuXHRcdH0pO1xuIH0gKi9cblxuXHRcdC8qKiBSZWFjdCB0byBuYXZpZ2F0aW5nIHRocm91Z2ggdGhlIG1vbnRocy95ZWFycy5cblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJPbkNoYW5nZU1vbnRoWWVhclxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIG5ldyB5ZWFyLlxuXHRcdFx0QHBhcmFtIG1vbnRoIHtudW1iZXJ9IFRoZSBuZXcgbW9udGggKDEgdG8gMTIpLlxuXHRcdFx0QGV4YW1wbGUgb25DaGFuZ2VNb250aFllYXI6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XG5cdGFsZXJ0KCdOb3cgaW4gJyArIG1vbnRoICsgJy8nICsgeWVhcik7XG4gfSAqL1xuXHRcdFx0XG5cdFx0LyoqIERhdGVwaWNrZXIgb24gc2VsZWN0IGNhbGxiYWNrLlxuXHRcdFx0VHJpZ2dlcmVkIHdoZW4gYSBkYXRlIGlzIHNlbGVjdGVkLlxuXHRcdFx0QGNhbGxiYWNrIENhbGVuZGFyc1BpY2tlck9uU2VsZWN0XG5cdFx0XHRAcGFyYW0gZGF0ZXMge0NEYXRlW119IFRoZSBzZWxlY3RlZCBkYXRlKHMpLlxuXHRcdFx0QGV4YW1wbGUgb25TZWxlY3Q6IGZ1bmN0aW9uKGRhdGVzKSB7XG4gXHRhbGVydCgnU2VsZWN0ZWQgJyArIGRhdGVzKTtcbiB9ICovXG5cdFx0XHRcblx0XHQvKiogRGF0ZXBpY2tlciBvbiBjbG9zZSBjYWxsYmFjay5cblx0XHRcdFRyaWdnZXJlZCB3aGVuIGEgcG9wdXAgY2FsZW5kYXIgaXMgY2xvc2VkLlxuXHRcdFx0QGNhbGxiYWNrIENhbGVuZGFyc1BpY2tlck9uQ2xvc2Vcblx0XHRcdEBwYXJhbSBkYXRlcyB7Q0RhdGVbXX0gVGhlIHNlbGVjdGVkIGRhdGUocykuXG5cdFx0XHRAZXhhbXBsZSBvbkNsb3NlOiBmdW5jdGlvbihkYXRlcykge1xuIFx0YWxlcnQoJ1NlbGVjdGVkICcgKyBkYXRlcyk7XG4gfSAqL1xuXHRcdFxuXHRcdC8qKiBEZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGx1Z2luLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByb3BlcnR5IFtjYWxlbmRhcj0kLmNhbGVuZGFycy5pbnN0YW5jZSgpXSB7Q2FsZW5kYXJ9IFRoZSBjYWxlbmRhciBmb3IgdGhpcyBkYXRlcGlja2VyLlxuXHRcdFx0QHByb3BlcnR5IFtwaWNrZXJDbGFzcz0nJ10ge3N0cmluZ30gQ1NTIGNsYXNzIHRvIGFkZCB0byB0aGlzIGluc3RhbmNlIG9mIHRoZSBkYXRlcGlja2VyLlxuXHRcdFx0QHByb3BlcnR5IFtzaG93T25Gb2N1cz10cnVlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gZm9yIHBvcHVwIG9uIGZvY3VzLCA8Y29kZT5mYWxzZTwvY29kZT4gZm9yIG5vdC5cblx0XHRcdEBwcm9wZXJ0eSBbc2hvd1RyaWdnZXI9bnVsbF0ge3N0cmluZ3xFbGVtZW50fGpRdWVyeX0gRWxlbWVudCB0byBiZSBjbG9uZWQgZm9yIGEgdHJpZ2dlciwgPGNvZGU+bnVsbDwvY29kZT4gZm9yIG5vbmUuXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dBbmltPSdzaG93J10ge3N0cmluZ30gTmFtZSBvZiBqUXVlcnkgYW5pbWF0aW9uIGZvciBwb3B1cCwgJycgZm9yIG5vIGFuaW1hdGlvbi5cblx0XHRcdEBwcm9wZXJ0eSBbc2hvd09wdGlvbnM9bnVsbF0ge29iamVjdH0gT3B0aW9ucyBmb3IgZW5oYW5jZWQgYW5pbWF0aW9ucy5cblx0XHRcdEBwcm9wZXJ0eSBbc2hvd1NwZWVkPSdub3JtYWwnXSB7c3RyaW5nfSBEdXJhdGlvbiBvZiBkaXNwbGF5L2Nsb3N1cmUuXG5cdFx0XHRAcHJvcGVydHkgW3BvcHVwQ29udGFpbmVyPW51bGxdIHtzdHJpbmd8RWxlbWVudHxqUXVlcnl9IFRoZSBlbGVtZW50IHRvIHdoaWNoIGEgcG9wdXAgY2FsZW5kYXIgaXMgYWRkZWQsIDxjb2RlPm51bGw8L2NvZGU+IGZvciBib2R5LlxuXHRcdFx0QHByb3BlcnR5IFthbGlnbm1lbnQ9J2JvdHRvbSddIHtzdHJpbmd9IEFsaWdubWVudCBvZiBwb3B1cCAtIHdpdGggbm9taW5hdGVkIGNvcm5lciBvZiBpbnB1dDpcblx0XHRcdFx0XHRcdCd0b3AnIG9yICdib3R0b20nIGFsaWducyBkZXBlbmRpbmcgb24gbGFuZ3VhZ2UgZGlyZWN0aW9uLFxuXHRcdFx0XHRcdFx0J3RvcExlZnQnLCAndG9wUmlnaHQnLCAnYm90dG9tTGVmdCcsICdib3R0b21SaWdodCcuXG5cdFx0XHRAcHJvcGVydHkgW2ZpeGVkV2Vla3M9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBhbHdheXMgc2hvdyA2IHdlZWtzLCA8Y29kZT5mYWxzZTwvY29kZT4gdG8gb25seSBzaG93IGFzIG1hbnkgYXMgYXJlIG5lZWRlZC5cblx0XHRcdEBwcm9wZXJ0eSBbZmlyc3REYXk9bnVsbF0ge251bWJlcn0gRmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCAwID0gU3VuZGF5LCAxID0gTW9uZGF5LCBldGMuLCA8Y29kZT5udWxsPC9jb2RlPiBmb3IgPGNvZGU+Y2FsZW5kYXI8L2NvZGU+IGRlZmF1bHQuXG5cdFx0XHRAcHJvcGVydHkgW2NhbGN1bGF0ZVdlZWs9bnVsbF0ge0NhbGVuZGFyc1BpY2tlckNhbGN1bGF0ZVdlZWt9IENhbGN1bGF0ZSB3ZWVrIG9mIHRoZSB5ZWFyIGZyb20gYSBkYXRlLCA8Y29kZT5udWxsPC9jb2RlPiBmb3IgPGNvZGU+Y2FsZW5kYXI8L2NvZGU+IGRlZmF1bHQuXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoc1RvU2hvdz0xXSB7bnVtYmVyfG51bWJlcltdfSBIb3cgbWFueSBtb250aHMgdG8gc2hvdywgY29scyBvciBbcm93cywgY29sc10uXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoc09mZnNldD0wXSB7bnVtYmVyfSBIb3cgbWFueSBtb250aHMgdG8gb2Zmc2V0IHRoZSBwcmltYXJ5IG1vbnRoIGJ5O1xuXHRcdFx0XHRcdFx0bWF5IGJlIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgZGF0ZSBhbmQgcmV0dXJucyB0aGUgb2Zmc2V0LlxuXHRcdFx0QHByb3BlcnR5IFttb250aHNUb1N0ZXA9MV0ge251bWJlcn0gSG93IG1hbnkgbW9udGhzIHRvIG1vdmUgd2hlbiBwcmV2L25leHQgY2xpY2tlZC5cblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhzVG9KdW1wPTEyXSB7bnVtYmVyfSBIb3cgbWFueSBtb250aHMgdG8gbW92ZSB3aGVuIGxhcmdlIHByZXYvbmV4dCBjbGlja2VkLlxuXHRcdFx0QHByb3BlcnR5IFt1c2VNb3VzZVdoZWVsPXRydWVdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byB1c2UgbW91c2V3aGVlbCBpZiBhdmFpbGFibGUsIDxjb2RlPmZhbHNlPC9jb2RlPiB0byBuZXZlciB1c2UgaXQuXG5cdFx0XHRAcHJvcGVydHkgW2NoYW5nZU1vbnRoPXRydWVdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBjaGFuZ2UgbW9udGgveWVhciB2aWEgZHJvcC1kb3duLCA8Y29kZT5mYWxzZTwvY29kZT4gZm9yIG5hdmlnYXRpb24gb25seS5cblx0XHRcdEBwcm9wZXJ0eSBbeWVhclJhbmdlPSdjLTEwOmMrMTAnXSB7c3RyaW5nfSBSYW5nZSBvZiB5ZWFycyB0byBzaG93IGluIGRyb3AtZG93bjogJ2FueScgZm9yIGRpcmVjdCB0ZXh0IGVudHJ5XG5cdFx0XHRcdFx0XHRvciAnc3RhcnQ6ZW5kJywgd2hlcmUgc3RhcnQvZW5kIGFyZSAnKy1ubicgZm9yIHJlbGF0aXZlIHRvIHRvZGF5XG5cdFx0XHRcdFx0XHRvciAnYystbm4nIGZvciByZWxhdGl2ZSB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGVcblx0XHRcdFx0XHRcdG9yICdubm5uJyBmb3IgYW4gYWJzb2x1dGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBbc2hvd090aGVyTW9udGhzPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gc2hvdyBkYXRlcyBmcm9tIG90aGVyIG1vbnRocywgPGNvZGU+ZmFsc2U8L2NvZGU+IHRvIG5vdCBzaG93IHRoZW0uXG5cdFx0XHRAcHJvcGVydHkgW3NlbGVjdE90aGVyTW9udGhzPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gYWxsb3cgc2VsZWN0aW9uIG9mIGRhdGVzIGZyb20gb3RoZXIgbW9udGhzIHRvby5cblx0XHRcdEBwcm9wZXJ0eSBbZGVmYXVsdERhdGU9bnVsbF0ge3N0cmluZ3xudW1iZXJ8Q0RhdGV9IERhdGUgdG8gc2hvdyBpZiBubyBvdGhlciBzZWxlY3RlZC5cblx0XHRcdEBwcm9wZXJ0eSBbc2VsZWN0RGVmYXVsdERhdGU9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBwcmUtc2VsZWN0IHRoZSBkZWZhdWx0IGRhdGUgaWYgbm8gb3RoZXIgaXMgY2hvc2VuLlxuXHRcdFx0QHByb3BlcnR5IFttaW5EYXRlPW51bGxdIHtzdHJpbmd8bnVtYmVyfENEYXRlfSBUaGUgbWluaW11bSBzZWxlY3RhYmxlIGRhdGUuXG5cdFx0XHRAcHJvcGVydHkgW21heERhdGU9bnVsbF0ge3N0cmluZ3xudW1iZXJ8Q0RhdGV9IFRoZSBtYXhpbXVtIHNlbGVjdGFibGUgZGF0ZS5cblx0XHRcdEBwcm9wZXJ0eSBbZGF0ZUZvcm1hdD0nbW0vZGQveXl5eSddIHtzdHJpbmd9IEZvcm1hdCBmb3IgZGF0ZXMuXG5cdFx0XHRAcHJvcGVydHkgW2F1dG9TaXplPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gc2l6ZSB0aGUgaW5wdXQgZmllbGQgYWNjb3JkaW5nIHRvIHRoZSBkYXRlIGZvcm1hdC5cblx0XHRcdEBwcm9wZXJ0eSBbcmFuZ2VTZWxlY3Q9ZmFsc2VdIHtib29sZWFufSBBbGxvd3MgZm9yIHNlbGVjdGluZyBhIGRhdGUgcmFuZ2Ugb24gb25lIGRhdGUgcGlja2VyLlxuXHRcdFx0QHByb3BlcnR5IFtyYW5nZVNlcGFyYXRvcj0nIC0gJ10ge3N0cmluZ30gVGV4dCBiZXR3ZWVuIHR3byBkYXRlcyBpbiBhIHJhbmdlLlxuXHRcdFx0QHByb3BlcnR5IFttdWx0aVNlbGVjdD0wXSB7bnVtYmVyfSBNYXhpbXVtIG51bWJlciBvZiBzZWxlY3RhYmxlIGRhdGVzLCB6ZXJvIGZvciBzaW5nbGUgc2VsZWN0LlxuXHRcdFx0QHByb3BlcnR5IFttdWx0aVNlcGFyYXRvcj0nLCddIHtzdHJpbmd9IFRleHQgYmV0d2VlbiBtdWx0aXBsZSBkYXRlcy5cblx0XHRcdEBwcm9wZXJ0eSBbb25EYXRlPW51bGxdIHtDYWxlbmRhcnNQaWNrZXJPbkRhdGV9IENhbGxiYWNrIGFzIGEgZGF0ZSBpcyBhZGRlZCB0byB0aGUgZGF0ZXBpY2tlci5cblx0XHRcdEBwcm9wZXJ0eSBbb25TaG93PW51bGxdIHtDYWxlbmRhcnNQaWNrZXJPblNob3d9IENhbGxiYWNrIGp1c3QgYmVmb3JlIGEgZGF0ZXBpY2tlciBpcyBzaG93bi5cblx0XHRcdEBwcm9wZXJ0eSBbb25DaGFuZ2VNb250aFllYXI9bnVsbF0ge0NhbGVuZGFyc1BpY2tlck9uQ2hhbmdlTW9udGhZZWFyfSBDYWxsYmFjayB3aGVuIGEgbmV3IG1vbnRoL3llYXIgaXMgc2VsZWN0ZWQuXG5cdFx0XHRAcHJvcGVydHkgW29uU2VsZWN0PW51bGxdIHtDYWxlbmRhcnNQaWNrZXJPblNlbGVjdH0gQ2FsbGJhY2sgd2hlbiBhIGRhdGUgaXMgc2VsZWN0ZWQuXG5cdFx0XHRAcHJvcGVydHkgW29uQ2xvc2U9bnVsbF0ge0NhbGVuZGFyc1BpY2tlck9uQ2xvc2V9IENhbGxiYWNrIHdoZW4gYSBkYXRlcGlja2VyIGlzIGNsb3NlZC5cblx0XHRcdEBwcm9wZXJ0eSBbYWx0RmllbGQ9bnVsbF0ge3N0cmluZ3xFbGVtZW50fGpRdWVyeX0gQWx0ZXJuYXRlIGZpZWxkIHRvIHVwZGF0ZSBpbiBzeW5jaCB3aXRoIHRoZSBkYXRlcGlja2VyLlxuXHRcdFx0QHByb3BlcnR5IFthbHRGb3JtYXQ9bnVsbF0ge3N0cmluZ30gRGF0ZSBmb3JtYXQgZm9yIGFsdGVybmF0ZSBmaWVsZCwgZGVmYXVsdHMgdG8gPGNvZGU+ZGF0ZUZvcm1hdDwvY29kZT4uXG5cdFx0XHRAcHJvcGVydHkgW2NvbnN0cmFpbklucHV0PXRydWVdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBjb25zdHJhaW4gdHlwZWQgaW5wdXQgdG8gPGNvZGU+ZGF0ZUZvcm1hdDwvY29kZT4gYWxsb3dlZCBjaGFyYWN0ZXJzLlxuXHRcdFx0QHByb3BlcnR5IFtjb21tYW5kc0FzRGF0ZUZvcm1hdD1mYWxzZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGFwcGx5XG5cdFx0XHRcdFx0XHQ8Y29kZT48YSBocmVmPVwiI2Zvcm1hdERhdGVcIj5mb3JtYXREYXRlPC9hPjwvY29kZT4gdG8gdGhlIGNvbW1hbmQgdGV4dHMuXG5cdFx0XHRAcHJvcGVydHkgW2NvbW1hbmRzPXRoaXMuY29tbWFuZHNdIHtvYmplY3R9IENvbW1hbmQgYWN0aW9ucyB0aGF0IG1heSBiZSBhZGRlZCB0byBhIGxheW91dCBieSBuYW1lLiAqL1xuXHRcdGRlZmF1bHRPcHRpb25zOiB7XG5cdFx0XHRjYWxlbmRhcjogJC5jYWxlbmRhcnMuaW5zdGFuY2UoKSxcblx0XHRcdHBpY2tlckNsYXNzOiAnJyxcblx0XHRcdHNob3dPbkZvY3VzOiB0cnVlLFxuXHRcdFx0c2hvd1RyaWdnZXI6IG51bGwsXG5cdFx0XHRzaG93QW5pbTogJ3Nob3cnLFxuXHRcdFx0c2hvd09wdGlvbnM6IHt9LFxuXHRcdFx0c2hvd1NwZWVkOiAnbm9ybWFsJyxcblx0XHRcdHBvcHVwQ29udGFpbmVyOiBudWxsLFxuXHRcdFx0YWxpZ25tZW50OiAnYm90dG9tJyxcblx0XHRcdGZpeGVkV2Vla3M6IGZhbHNlLFxuXHRcdFx0Zmlyc3REYXk6IG51bGwsXG5cdFx0XHRjYWxjdWxhdGVXZWVrOiBudWxsLFxuXHRcdFx0bW9udGhzVG9TaG93OiAxLFxuXHRcdFx0bW9udGhzT2Zmc2V0OiAwLFxuXHRcdFx0bW9udGhzVG9TdGVwOiAxLFxuXHRcdFx0bW9udGhzVG9KdW1wOiAxMixcblx0XHRcdHVzZU1vdXNlV2hlZWw6IHRydWUsXG5cdFx0XHRjaGFuZ2VNb250aDogdHJ1ZSxcblx0XHRcdHllYXJSYW5nZTogJ2MtMTA6YysxMCcsXG5cdFx0XHRzaG93T3RoZXJNb250aHM6IGZhbHNlLFxuXHRcdFx0c2VsZWN0T3RoZXJNb250aHM6IGZhbHNlLFxuXHRcdFx0ZGVmYXVsdERhdGU6IG51bGwsXG5cdFx0XHRzZWxlY3REZWZhdWx0RGF0ZTogZmFsc2UsXG5cdFx0XHRtaW5EYXRlOiBudWxsLFxuXHRcdFx0bWF4RGF0ZTogbnVsbCxcblx0XHRcdGRhdGVGb3JtYXQ6IG51bGwsXG5cdFx0XHRhdXRvU2l6ZTogZmFsc2UsXG5cdFx0XHRyYW5nZVNlbGVjdDogZmFsc2UsXG5cdFx0XHRyYW5nZVNlcGFyYXRvcjogJyAtICcsXG5cdFx0XHRtdWx0aVNlbGVjdDogMCxcblx0XHRcdG11bHRpU2VwYXJhdG9yOiAnLCcsXG5cdFx0XHRvbkRhdGU6IG51bGwsXG5cdFx0XHRvblNob3c6IG51bGwsXG5cdFx0XHRvbkNoYW5nZU1vbnRoWWVhcjogbnVsbCxcblx0XHRcdG9uU2VsZWN0OiBudWxsLFxuXHRcdFx0b25DbG9zZTogbnVsbCxcblx0XHRcdGFsdEZpZWxkOiBudWxsLFxuXHRcdFx0YWx0Rm9ybWF0OiBudWxsLFxuXHRcdFx0Y29uc3RyYWluSW5wdXQ6IHRydWUsXG5cdFx0XHRjb21tYW5kc0FzRGF0ZUZvcm1hdDogZmFsc2UsXG5cdFx0XHRjb21tYW5kczoge30gLy8gdGhpcy5jb21tYW5kc1xuXHRcdH0sXG5cblx0XHQvKiogTG9jYWxpc2F0aW9ucyBmb3IgdGhlIHBsdWdpbi5cblx0XHRcdEVudHJpZXMgYXJlIG9iamVjdHMgaW5kZXhlZCBieSB0aGUgbGFuZ3VhZ2UgY29kZSAoJycgYmVpbmcgdGhlIGRlZmF1bHQgVVMvRW5nbGlzaCkuXG5cdFx0XHRFYWNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByb3BlcnR5IFtyZW5kZXJlcj10aGlzLmRlZmF1bHRSZW5kZXJlcl0ge3N0cmluZ30gVGhlIHJlbmRlcmluZyB0ZW1wbGF0ZXMuXG5cdFx0XHRAcHJvcGVydHkgW3ByZXZUZXh0PScmbHQ7UHJldiddIHtzdHJpbmd9IFRleHQgZm9yIHRoZSBwcmV2aW91cyBtb250aCBjb21tYW5kLlxuXHRcdFx0QHByb3BlcnR5IFtwcmV2U3RhdHVzPSdTaG93IHRoZSBwcmV2aW91cyBtb250aCddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgcHJldmlvdXMgbW9udGggY29tbWFuZC5cblx0XHRcdEBwcm9wZXJ0eSBbcHJldkp1bXBUZXh0PScmbHQ7Jmx0OyddIHtzdHJpbmd9IFRleHQgZm9yIHRoZSBwcmV2aW91cyB5ZWFyIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW3ByZXZKdW1wU3RhdHVzPSdTaG93IHRoZSBwcmV2aW91cyB5ZWFyJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSBwcmV2aW91cyB5ZWFyIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW25leHRUZXh0PSdOZXh0Jmd0OyddIHtzdHJpbmd9IFRleHQgZm9yIHRoZSBuZXh0IG1vbnRoIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW25leHRTdGF0dXM9J1Nob3cgdGhlIG5leHQgbW9udGgnXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3IgdGhlIG5leHQgbW9udGggY29tbWFuZC5cblx0XHRcdEBwcm9wZXJ0eSBbbmV4dEp1bXBUZXh0PScmZ3Q7Jmd0OyddIHtzdHJpbmd9IFRleHQgZm9yIHRoZSBuZXh0IHllYXIgY29tbWFuZC5cblx0XHRcdEBwcm9wZXJ0eSBbbmV4dEp1bXBTdGF0dXM9J1Nob3cgdGhlIG5leHQgeWVhciddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgbmV4dCB5ZWFyIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW2N1cnJlbnRUZXh0PSdDdXJyZW50J10ge3N0cmluZ30gVGV4dCBmb3IgdGhlIGN1cnJlbnQgbW9udGggY29tbWFuZC5cblx0XHRcdEBwcm9wZXJ0eSBbY3VycmVudFN0YXR1cz0nU2hvdyB0aGUgY3VycmVudCBtb250aCddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgY3VycmVudCBtb250aCBjb21tYW5kLlxuXHRcdFx0QHByb3BlcnR5IFt0b2RheVRleHQ9J1RvZGF5J10ge3N0cmluZ30gVGV4dCBmb3IgdGhlIHRvZGF5J3MgbW9udGggY29tbWFuZC5cblx0XHRcdEBwcm9wZXJ0eSBbdG9kYXlTdGF0dXM9J1Nob3cgdG9kYXlcXCdzIG1vbnRoJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSB0b2RheSdzIG1vbnRoIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW2NsZWFyVGV4dD0nQ2xlYXInXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgY2xlYXIgY29tbWFuZC5cblx0XHRcdEBwcm9wZXJ0eSBbY2xlYXJTdGF0dXM9J0NsZWFyIGFsbCB0aGUgZGF0ZXMnXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3IgdGhlIGNsZWFyIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW2Nsb3NlVGV4dD0nQ2xvc2UnXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgY2xvc2UgY29tbWFuZC5cblx0XHRcdEBwcm9wZXJ0eSBbY2xvc2VTdGF0dXM9J0Nsb3NlIHRoZSBkYXRlcGlja2VyJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSBjbG9zZSBjb21tYW5kLlxuXHRcdFx0QHByb3BlcnR5IFt5ZWFyU3RhdHVzPSdDaGFuZ2UgdGhlIHllYXInXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3IgeWVhciBzZWxlY3Rpb24uXG5cdFx0XHRAcHJvcGVydHkgW2VhcmxpZXJUZXh0PScmIzE2MDsmIzE2MDvilrInXSB7c3RyaW5nfSBUZXh0IGZvciBlYXJsaWVyIHllYXJzLlxuXHRcdFx0QHByb3BlcnR5IFtsYXRlclRleHQ9JyYjMTYwOyYjMTYwO+KWvCddIHtzdHJpbmd9IFRleHQgZm9yIGxhdGVyIHllYXJzLlxuXHRcdFx0QHByb3BlcnR5IFttb250aFN0YXR1cz0nQ2hhbmdlIHRoZSBtb250aCddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciBtb250aCBzZWxlY3Rpb24uXG5cdFx0XHRAcHJvcGVydHkgW3dlZWtUZXh0PSdXayddIHtzdHJpbmd9IFRleHQgZm9yIHdlZWsgb2YgdGhlIHllYXIgY29sdW1uIGhlYWRlci5cblx0XHRcdEBwcm9wZXJ0eSBbd2Vla1N0YXR1cz0nV2VlayBvZiB0aGUgeWVhciddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB3ZWVrIG9mIHRoZSB5ZWFyIGNvbHVtbiBoZWFkZXIuXG5cdFx0XHRAcHJvcGVydHkgW2RheVN0YXR1cz0nU2VsZWN0IERELCYjMTYwO00mIzE2MDtkLCYjMTYwO3l5eXknXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3Igc2VsZWN0YWJsZSBkYXlzLlxuXHRcdFx0QHByb3BlcnR5IFtkZWZhdWx0U3RhdHVzPSdTZWxlY3QgYSBkYXRlJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgc2hvd24gYnkgZGVmYXVsdC5cblx0XHRcdEBwcm9wZXJ0eSBbaXNSVEw9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBsYW5ndWFnZSBpcyByaWdodC10by1sZWZ0LiAqL1xuXHRcdHJlZ2lvbmFsT3B0aW9uczogeyAvLyBBdmFpbGFibGUgcmVnaW9uYWwgc2V0dGluZ3MsIGluZGV4ZWQgYnkgbGFuZ3VhZ2UvY291bnRyeSBjb2RlXG5cdFx0XHQnJzogeyAvLyBEZWZhdWx0IHJlZ2lvbmFsIHNldHRpbmdzIC0gRW5nbGlzaC9VU1xuXHRcdFx0XHRyZW5kZXJlcjoge30sIC8vIHRoaXMuZGVmYXVsdFJlbmRlcmVyXG5cdFx0XHRcdHByZXZUZXh0OiAnJmx0O1ByZXYnLFxuXHRcdFx0XHRwcmV2U3RhdHVzOiAnU2hvdyB0aGUgcHJldmlvdXMgbW9udGgnLFxuXHRcdFx0XHRwcmV2SnVtcFRleHQ6ICcmbHQ7Jmx0OycsXG5cdFx0XHRcdHByZXZKdW1wU3RhdHVzOiAnU2hvdyB0aGUgcHJldmlvdXMgeWVhcicsXG5cdFx0XHRcdG5leHRUZXh0OiAnTmV4dCZndDsnLFxuXHRcdFx0XHRuZXh0U3RhdHVzOiAnU2hvdyB0aGUgbmV4dCBtb250aCcsXG5cdFx0XHRcdG5leHRKdW1wVGV4dDogJyZndDsmZ3Q7Jyxcblx0XHRcdFx0bmV4dEp1bXBTdGF0dXM6ICdTaG93IHRoZSBuZXh0IHllYXInLFxuXHRcdFx0XHRjdXJyZW50VGV4dDogJ0N1cnJlbnQnLFxuXHRcdFx0XHRjdXJyZW50U3RhdHVzOiAnU2hvdyB0aGUgY3VycmVudCBtb250aCcsXG5cdFx0XHRcdHRvZGF5VGV4dDogJ1RvZGF5Jyxcblx0XHRcdFx0dG9kYXlTdGF0dXM6ICdTaG93IHRvZGF5XFwncyBtb250aCcsXG5cdFx0XHRcdGNsZWFyVGV4dDogJ0NsZWFyJyxcblx0XHRcdFx0Y2xlYXJTdGF0dXM6ICdDbGVhciBhbGwgdGhlIGRhdGVzJyxcblx0XHRcdFx0Y2xvc2VUZXh0OiAnQ2xvc2UnLFxuXHRcdFx0XHRjbG9zZVN0YXR1czogJ0Nsb3NlIHRoZSBkYXRlcGlja2VyJyxcblx0XHRcdFx0eWVhclN0YXR1czogJ0NoYW5nZSB0aGUgeWVhcicsXG5cdFx0XHRcdGVhcmxpZXJUZXh0OiAnJiMxNjA7JiMxNjA74payJyxcblx0XHRcdFx0bGF0ZXJUZXh0OiAnJiMxNjA7JiMxNjA74pa8Jyxcblx0XHRcdFx0bW9udGhTdGF0dXM6ICdDaGFuZ2UgdGhlIG1vbnRoJyxcblx0XHRcdFx0d2Vla1RleHQ6ICdXaycsXG5cdFx0XHRcdHdlZWtTdGF0dXM6ICdXZWVrIG9mIHRoZSB5ZWFyJyxcblx0XHRcdFx0ZGF5U3RhdHVzOiAnU2VsZWN0IERELCBNIGQsIHl5eXknLFxuXHRcdFx0XHRkZWZhdWx0U3RhdHVzOiAnU2VsZWN0IGEgZGF0ZScsXG5cdFx0XHRcdGlzUlRMOiBmYWxzZVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0XG5cdFx0LyoqIE5hbWVzIG9mIGdldHRlciBtZXRob2RzIC0gdGhvc2UgdGhhdCBjYW4ndCBiZSBjaGFpbmVkLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlciAqL1xuXHRcdF9nZXR0ZXJzOiBbJ2dldERhdGUnLCAnaXNEaXNhYmxlZCcsICdpc1NlbGVjdGFibGUnLCAncmV0cmlldmVEYXRlJ10sXG5cblx0XHRfZGlzYWJsZWQ6IFtdLFxuXHRcdFxuXHRcdF9wb3B1cENsYXNzOiAnY2FsZW5kYXJzLXBvcHVwJywgLy8gTWFya2VyIGZvciBwb3B1cCBkaXZpc2lvblxuXHRcdF90cmlnZ2VyQ2xhc3M6ICdjYWxlbmRhcnMtdHJpZ2dlcicsIC8vIE1hcmtlciBmb3IgdHJpZ2dlciBlbGVtZW50XG5cdFx0X2Rpc2FibGVDbGFzczogJ2NhbGVuZGFycy1kaXNhYmxlJywgLy8gTWFya2VyIGZvciBkaXNhYmxlZCBlbGVtZW50XG5cdFx0X21vbnRoWWVhckNsYXNzOiAnY2FsZW5kYXJzLW1vbnRoLXllYXInLCAvLyBNYXJrZXIgZm9yIG1vbnRoL3llYXIgaW5wdXRzXG5cdFx0X2N1ck1vbnRoQ2xhc3M6ICdjYWxlbmRhcnMtbW9udGgtJywgLy8gTWFya2VyIGZvciBjdXJyZW50IG1vbnRoL3llYXJcblx0XHRfYW55WWVhckNsYXNzOiAnY2FsZW5kYXJzLWFueS15ZWFyJywgLy8gTWFya2VyIGZvciB5ZWFyIGRpcmVjdCBpbnB1dFxuXHRcdF9jdXJEb1dDbGFzczogJ2NhbGVuZGFycy1kb3ctJywgLy8gTWFya2VyIGZvciBkYXkgb2Ygd2Vla1xuXG5cdFx0X2luaXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5kZWZhdWx0T3B0aW9ucy5jb21tYW5kcyA9IHRoaXMuY29tbWFuZHM7XG5cdFx0XHR0aGlzLnJlZ2lvbmFsT3B0aW9uc1snJ10ucmVuZGVyZXIgPSB0aGlzLmRlZmF1bHRSZW5kZXJlcjtcblx0XHRcdHRoaXMuX3N1cGVyKCk7XG5cdFx0fSxcblxuXHRcdF9pbnN0U2V0dGluZ3M6IGZ1bmN0aW9uKGVsZW0sIG9wdGlvbnMpIHtcblx0XHRcdHJldHVybiB7c2VsZWN0ZWREYXRlczogW10sIGRyYXdEYXRlOiBudWxsLCBwaWNraW5nUmFuZ2U6IGZhbHNlLFxuXHRcdFx0XHRpbmxpbmU6ICgkLmluQXJyYXkoZWxlbVswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBbJ2RpdicsICdzcGFuJ10pID4gLTEpLFxuXHRcdFx0XHRnZXQ6IGZ1bmN0aW9uKG5hbWUpIHsgLy8gR2V0IGEgc2V0dGluZyB2YWx1ZSwgY29tcHV0aW5nIGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdGlmICgkLmluQXJyYXkobmFtZSwgWydkZWZhdWx0RGF0ZScsICdtaW5EYXRlJywgJ21heERhdGUnXSkgPiAtMSkgeyAvLyBEZWNvZGUgZGF0ZSBzZXR0aW5nc1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5jYWxlbmRhci5kZXRlcm1pbmVEYXRlKHRoaXMub3B0aW9uc1tuYW1lXSwgbnVsbCxcblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZERhdGVzWzBdLCB0aGlzLmdldCgnZGF0ZUZvcm1hdCcpLCB0aGlzLmdldENvbmZpZygpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKG5hbWUgPT09ICdkYXRlRm9ybWF0Jykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5kYXRlRm9ybWF0IHx8IHRoaXMub3B0aW9ucy5jYWxlbmRhci5sb2NhbC5kYXRlRm9ybWF0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zW25hbWVdO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRjdXJNaW5EYXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gKHRoaXMucGlja2luZ1JhbmdlID8gdGhpcy5zZWxlY3RlZERhdGVzWzBdIDogdGhpcy5nZXQoJ21pbkRhdGUnKSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGdldENvbmZpZzogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtkYXlOYW1lc1Nob3J0OiB0aGlzLm9wdGlvbnMuZGF5TmFtZXNTaG9ydCwgZGF5TmFtZXM6IHRoaXMub3B0aW9ucy5kYXlOYW1lcyxcblx0XHRcdFx0XHRcdG1vbnRoTmFtZXNTaG9ydDogdGhpcy5vcHRpb25zLm1vbnRoTmFtZXNTaG9ydCwgbW9udGhOYW1lczogdGhpcy5vcHRpb25zLm1vbnRoTmFtZXMsXG5cdFx0XHRcdFx0XHRjYWxjdWxhdGVXZWVrOiB0aGlzLm9wdGlvbnMuY2FsY3VsYXRlV2Vlaywgc2hvcnRZZWFyQ3V0b2ZmOiB0aGlzLm9wdGlvbnMuc2hvcnRZZWFyQ3V0b2ZmfTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0X3Bvc3RBdHRhY2g6IGZ1bmN0aW9uKGVsZW0sIGluc3QpIHtcblx0XHRcdGlmIChpbnN0LmlubGluZSkge1xuXHRcdFx0XHRpbnN0LmRyYXdEYXRlID0gcGx1Z2luLl9jaGVja01pbk1heCgoaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8XG5cdFx0XHRcdFx0aW5zdC5nZXQoJ2RlZmF1bHREYXRlJykgfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCkpLm5ld0RhdGUoKSwgaW5zdCk7XG5cdFx0XHRcdGluc3QucHJldkRhdGUgPSBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlKGVsZW1bMF0pO1xuXHRcdFx0XHRpZiAoJC5mbi5tb3VzZXdoZWVsKSB7XG5cdFx0XHRcdFx0ZWxlbS5tb3VzZXdoZWVsKHRoaXMuX2RvTW91c2VXaGVlbCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9hdHRhY2htZW50cyhlbGVtLCBpbnN0KTtcblx0XHRcdFx0ZWxlbS5vbigna2V5ZG93bi4nICsgaW5zdC5uYW1lLCB0aGlzLl9rZXlEb3duKS5vbigna2V5cHJlc3MuJyArIGluc3QubmFtZSwgdGhpcy5fa2V5UHJlc3MpLlxuXHRcdFx0XHRcdG9uKCdrZXl1cC4nICsgaW5zdC5uYW1lLCB0aGlzLl9rZXlVcCk7XG5cdFx0XHRcdGlmIChlbGVtLmF0dHIoJ2Rpc2FibGVkJykpIHtcblx0XHRcdFx0XHR0aGlzLmRpc2FibGUoZWxlbVswXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0X29wdGlvbnNDaGFuZ2VkOiBmdW5jdGlvbihlbGVtLCBpbnN0LCBvcHRpb25zKSB7XG5cdFx0XHRpZiAob3B0aW9ucy5jYWxlbmRhciAmJiBvcHRpb25zLmNhbGVuZGFyICE9PSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIpIHtcblx0XHRcdFx0dmFyIGRpc2NhcmREYXRlID0gZnVuY3Rpb24obmFtZSkge1xuXHRcdFx0XHRcdHJldHVybiAodHlwZW9mIGluc3Qub3B0aW9uc1tuYW1lXSA9PT0gJ29iamVjdCcgPyBudWxsIDogaW5zdC5vcHRpb25zW25hbWVdKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0b3B0aW9ucyA9ICQuZXh0ZW5kKHtkZWZhdWx0RGF0ZTogZGlzY2FyZERhdGUoJ2RlZmF1bHREYXRlJyksXG5cdFx0XHRcdFx0bWluRGF0ZTogZGlzY2FyZERhdGUoJ21pbkRhdGUnKSwgbWF4RGF0ZTogZGlzY2FyZERhdGUoJ21heERhdGUnKX0sIG9wdGlvbnMpO1xuXHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXMgPSBbXTtcblx0XHRcdFx0aW5zdC5kcmF3RGF0ZSA9IG51bGw7XG5cdFx0XHR9XG5cdFx0XHR2YXIgZGF0ZXMgPSBpbnN0LnNlbGVjdGVkRGF0ZXM7XG5cdFx0XHQkLmV4dGVuZChpbnN0Lm9wdGlvbnMsIG9wdGlvbnMpO1xuXHRcdFx0dGhpcy5zZXREYXRlKGVsZW1bMF0sIGRhdGVzLCBudWxsLCBmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRpbnN0LnBpY2tpbmdSYW5nZSA9IGZhbHNlO1xuXHRcdFx0dmFyIGNhbGVuZGFyID0gaW5zdC5vcHRpb25zLmNhbGVuZGFyO1xuXHRcdFx0dmFyIGRlZmF1bHREYXRlID0gaW5zdC5nZXQoJ2RlZmF1bHREYXRlJyk7XG5cdFx0XHRpbnN0LmRyYXdEYXRlID0gdGhpcy5fY2hlY2tNaW5NYXgoKGRlZmF1bHREYXRlID8gZGVmYXVsdERhdGUgOiBpbnN0LmRyYXdEYXRlKSB8fFxuXHRcdFx0XHRkZWZhdWx0RGF0ZSB8fCBjYWxlbmRhci50b2RheSgpLCBpbnN0KS5uZXdEYXRlKCk7XG5cdFx0XHRpZiAoIWluc3QuaW5saW5lKSB7XG5cdFx0XHRcdHRoaXMuX2F0dGFjaG1lbnRzKGVsZW0sIGluc3QpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGluc3QuaW5saW5lIHx8IGluc3QuZGl2KSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZShlbGVtWzBdKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIEF0dGFjaCBldmVudHMgYW5kIHRyaWdnZXIsIGlmIG5lY2Vzc2FyeS5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZWxlbSB7alF1ZXJ5fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy4gKi9cblx0XHRfYXR0YWNobWVudHM6IGZ1bmN0aW9uKGVsZW0sIGluc3QpIHtcblx0XHRcdGVsZW0ub2ZmKCdmb2N1cy4nICsgaW5zdC5uYW1lKTtcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMuc2hvd09uRm9jdXMpIHtcblx0XHRcdFx0ZWxlbS5vbignZm9jdXMuJyArIGluc3QubmFtZSwgdGhpcy5zaG93KTtcblx0XHRcdH1cblx0XHRcdGlmIChpbnN0LnRyaWdnZXIpIHtcblx0XHRcdFx0aW5zdC50cmlnZ2VyLnJlbW92ZSgpO1xuXHRcdFx0fVxuXHRcdFx0dmFyIHRyaWdnZXIgPSBpbnN0Lm9wdGlvbnMuc2hvd1RyaWdnZXI7XG5cdFx0XHRpbnN0LnRyaWdnZXIgPSAoIXRyaWdnZXIgPyAkKFtdKSA6XG5cdFx0XHRcdCQodHJpZ2dlcikuY2xvbmUoKS5yZW1vdmVBdHRyKCdpZCcpLmFkZENsYXNzKHRoaXMuX3RyaWdnZXJDbGFzcylcblx0XHRcdFx0XHRbaW5zdC5vcHRpb25zLmlzUlRMID8gJ2luc2VydEJlZm9yZScgOiAnaW5zZXJ0QWZ0ZXInXShlbGVtKS5cblx0XHRcdFx0XHRjbGljayhmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICghcGx1Z2luLmlzRGlzYWJsZWQoZWxlbVswXSkpIHtcblx0XHRcdFx0XHRcdFx0cGx1Z2luW3BsdWdpbi5jdXJJbnN0ID09PSBpbnN0ID8gJ2hpZGUnIDogJ3Nob3cnXShlbGVtWzBdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSk7XG5cdFx0XHR0aGlzLl9hdXRvU2l6ZShlbGVtLCBpbnN0KTtcblx0XHRcdHZhciBkYXRlcyA9IHRoaXMuX2V4dHJhY3REYXRlcyhpbnN0LCBlbGVtLnZhbCgpKTtcblx0XHRcdGlmIChkYXRlcykge1xuXHRcdFx0XHR0aGlzLnNldERhdGUoZWxlbVswXSwgZGF0ZXMsIG51bGwsIHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGRlZmF1bHREYXRlID0gaW5zdC5nZXQoJ2RlZmF1bHREYXRlJyk7XG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLnNlbGVjdERlZmF1bHREYXRlICYmIGRlZmF1bHREYXRlICYmIGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0dGhpcy5zZXREYXRlKGVsZW1bMF0sIChkZWZhdWx0RGF0ZSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKSkubmV3RGF0ZSgpKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIEFwcGx5IHRoZSBtYXhpbXVtIGxlbmd0aCBmb3IgdGhlIGRhdGUgZm9ybWF0LlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBlbGVtIHtqUXVlcnl9IFRoZSBjb250cm9sIHRvIGFmZmVjdC5cblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLiAqL1xuXHRcdF9hdXRvU2l6ZTogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xuXHRcdFx0aWYgKGluc3Qub3B0aW9ucy5hdXRvU2l6ZSAmJiAhaW5zdC5pbmxpbmUpIHtcblx0XHRcdFx0dmFyIGNhbGVuZGFyID0gaW5zdC5vcHRpb25zLmNhbGVuZGFyO1xuXHRcdFx0XHR2YXIgZGF0ZSA9IGNhbGVuZGFyLm5ld0RhdGUoMjAwOSwgMTAsIDIwKTsgLy8gRW5zdXJlIGRvdWJsZSBkaWdpdHNcblx0XHRcdFx0dmFyIGRhdGVGb3JtYXQgPSBpbnN0LmdldCgnZGF0ZUZvcm1hdCcpO1xuXHRcdFx0XHRpZiAoZGF0ZUZvcm1hdC5tYXRjaCgvW0RNXS8pKSB7XG5cdFx0XHRcdFx0dmFyIGZpbmRNYXggPSBmdW5jdGlvbihuYW1lcykge1xuXHRcdFx0XHRcdFx0dmFyIG1heCA9IDA7XG5cdFx0XHRcdFx0XHR2YXIgbWF4SSA9IDA7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChuYW1lc1tpXS5sZW5ndGggPiBtYXgpIHtcblx0XHRcdFx0XHRcdFx0XHRtYXggPSBuYW1lc1tpXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdFx0bWF4SSA9IGk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBtYXhJO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0ZGF0ZS5tb250aChmaW5kTWF4KGNhbGVuZGFyLmxvY2FsW2RhdGVGb3JtYXQubWF0Y2goL01NLykgPyAvLyBMb25nZXN0IG1vbnRoXG5cdFx0XHRcdFx0XHQnbW9udGhOYW1lcycgOiAnbW9udGhOYW1lc1Nob3J0J10pICsgMSk7XG5cdFx0XHRcdFx0ZGF0ZS5kYXkoZmluZE1heChjYWxlbmRhci5sb2NhbFtkYXRlRm9ybWF0Lm1hdGNoKC9ERC8pID8gLy8gTG9uZ2VzdCBkYXlcblx0XHRcdFx0XHRcdCdkYXlOYW1lcycgOiAnZGF5TmFtZXNTaG9ydCddKSArIDIwIC0gZGF0ZS5kYXlPZldlZWsoKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5zdC5lbGVtLmF0dHIoJ3NpemUnLCBkYXRlLmZvcm1hdERhdGUoZGF0ZUZvcm1hdCkubGVuZ3RoKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0X3ByZURlc3Ryb3k6IGZ1bmN0aW9uKGVsZW0sIGluc3QpIHtcblx0XHRcdGlmIChpbnN0LnRyaWdnZXIpIHtcblx0XHRcdFx0aW5zdC50cmlnZ2VyLnJlbW92ZSgpO1xuXHRcdFx0fVxuXHRcdFx0ZWxlbS5lbXB0eSgpLm9mZignLicgKyBpbnN0Lm5hbWUpO1xuXHRcdFx0aWYgKGluc3QuaW5saW5lICYmICQuZm4ubW91c2V3aGVlbCkge1xuXHRcdFx0XHRlbGVtLnVubW91c2V3aGVlbCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFpbnN0LmlubGluZSAmJiBpbnN0Lm9wdGlvbnMuYXV0b1NpemUpIHtcblx0XHRcdFx0ZWxlbS5yZW1vdmVBdHRyKCdzaXplJyk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBBcHBseSBtdWx0aXBsZSBldmVudCBmdW5jdGlvbnMuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZm5zIHtmdW5jdGlvbn0gVGhlIGZ1bmN0aW9ucyB0byBhcHBseS5cblx0XHRcdEBleGFtcGxlIG9uU2hvdzogbXVsdGlwbGVFdmVudHMoZm4xLCBmbjIsIC4uLikgKi9cblx0XHRtdWx0aXBsZUV2ZW50czogZnVuY3Rpb24oZm5zKSB7XG5cdFx0XHR2YXIgZnVuY3MgPSBhcmd1bWVudHM7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oYXJncykge1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmNzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0ZnVuY3NbaV0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0LyoqIEVuYWJsZSB0aGUgY29udHJvbC5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnZW5hYmxlJykgKi9cblx0XHRlbmFibGU6IGZ1bmN0aW9uKGVsZW0pIHtcblx0XHRcdGVsZW0gPSAkKGVsZW0pO1xuXHRcdFx0aWYgKCFlbGVtLmhhc0NsYXNzKHRoaXMuX2dldE1hcmtlcigpKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoaW5zdC5pbmxpbmUpIHtcblx0XHRcdFx0ZWxlbS5jaGlsZHJlbignLicgKyB0aGlzLl9kaXNhYmxlQ2xhc3MpLnJlbW92ZSgpLmVuZCgpLlxuXHRcdFx0XHRcdGZpbmQoJ2J1dHRvbixzZWxlY3QnKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKS5lbmQoKS5cblx0XHRcdFx0XHRmaW5kKCdhJykuYXR0cignaHJlZicsICdqYXZhc2NyaXB0OnZvaWQoMCknKTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRlbGVtLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuXHRcdFx0XHRpbnN0LnRyaWdnZXIuZmlsdGVyKCdidXR0b24uJyArIHRoaXMuX3RyaWdnZXJDbGFzcykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSkuZW5kKCkuXG5cdFx0XHRcdFx0ZmlsdGVyKCdpbWcuJyArIHRoaXMuX3RyaWdnZXJDbGFzcykuY3NzKHtvcGFjaXR5OiAnMS4wJywgY3Vyc29yOiAnJ30pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fZGlzYWJsZWQgPSAkLm1hcCh0aGlzLl9kaXNhYmxlZCxcblx0XHRcdFx0ZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuICh2YWx1ZSA9PT0gZWxlbVswXSA/IG51bGwgOiB2YWx1ZSk7IH0pOyAvLyBEZWxldGUgZW50cnlcblx0XHR9LFxuXG5cdFx0LyoqIERpc2FibGUgdGhlIGNvbnRyb2wuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuZGF0ZXBpY2soJ2Rpc2FibGUnKSAqL1xuXHRcdGRpc2FibGU6IGZ1bmN0aW9uKGVsZW0pIHtcblx0XHRcdGVsZW0gPSAkKGVsZW0pO1xuXHRcdFx0aWYgKCFlbGVtLmhhc0NsYXNzKHRoaXMuX2dldE1hcmtlcigpKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoaW5zdC5pbmxpbmUpIHtcblx0XHRcdFx0dmFyIGlubGluZSA9IGVsZW0uY2hpbGRyZW4oJzpsYXN0Jyk7XG5cdFx0XHRcdHZhciBvZmZzZXQgPSBpbmxpbmUub2Zmc2V0KCk7XG5cdFx0XHRcdHZhciByZWxPZmZzZXQgPSB7bGVmdDogMCwgdG9wOiAwfTtcblx0XHRcdFx0aW5saW5lLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICgkKHRoaXMpLmNzcygncG9zaXRpb24nKSA9PT0gJ3JlbGF0aXZlJykge1xuXHRcdFx0XHRcdFx0cmVsT2Zmc2V0ID0gJCh0aGlzKS5vZmZzZXQoKTtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR2YXIgekluZGV4ID0gZWxlbS5jc3MoJ3pJbmRleCcpO1xuXHRcdFx0XHR6SW5kZXggPSAoekluZGV4ID09PSAnYXV0bycgPyAwIDogcGFyc2VJbnQoekluZGV4LCAxMCkpICsgMTtcblx0XHRcdFx0ZWxlbS5wcmVwZW5kKCc8ZGl2IGNsYXNzPVwiJyArIHRoaXMuX2Rpc2FibGVDbGFzcyArICdcIiBzdHlsZT1cIicgK1xuXHRcdFx0XHRcdCd3aWR0aDogJyArIGlubGluZS5vdXRlcldpZHRoKCkgKyAncHg7IGhlaWdodDogJyArIGlubGluZS5vdXRlckhlaWdodCgpICtcblx0XHRcdFx0XHQncHg7IGxlZnQ6ICcgKyAob2Zmc2V0LmxlZnQgLSByZWxPZmZzZXQubGVmdCkgKyAncHg7IHRvcDogJyArXG5cdFx0XHRcdFx0KG9mZnNldC50b3AgLSByZWxPZmZzZXQudG9wKSArICdweDsgei1pbmRleDogJyArIHpJbmRleCArICdcIj48L2Rpdj4nKS5cblx0XHRcdFx0XHRmaW5kKCdidXR0b24sc2VsZWN0JykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKS5lbmQoKS5cblx0XHRcdFx0XHRmaW5kKCdhJykucmVtb3ZlQXR0cignaHJlZicpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGVsZW0ucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcblx0XHRcdFx0aW5zdC50cmlnZ2VyLmZpbHRlcignYnV0dG9uLicgKyB0aGlzLl90cmlnZ2VyQ2xhc3MpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSkuZW5kKCkuXG5cdFx0XHRcdFx0ZmlsdGVyKCdpbWcuJyArIHRoaXMuX3RyaWdnZXJDbGFzcykuY3NzKHtvcGFjaXR5OiAnMC41JywgY3Vyc29yOiAnZGVmYXVsdCd9KTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2Rpc2FibGVkID0gJC5tYXAodGhpcy5fZGlzYWJsZWQsXG5cdFx0XHRcdGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiAodmFsdWUgPT09IGVsZW1bMF0gPyBudWxsIDogdmFsdWUpOyB9KTsgLy8gRGVsZXRlIGVudHJ5XG5cdFx0XHR0aGlzLl9kaXNhYmxlZC5wdXNoKGVsZW1bMF0pO1xuXHRcdH0sXG5cblx0XHQvKiogSXMgdGhlIGZpcnN0IGZpZWxkIGluIGEgalF1ZXJ5IGNvbGxlY3Rpb24gZGlzYWJsZWQgYXMgYSBkYXRlcGlja2VyP1xuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBkaXNhYmxlZCwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIGVuYWJsZWQuXG5cdFx0XHRAZXhhbXBsZSBpZiAoJChzZWxlY3RvcikuZGF0ZXBpY2soJ2lzRGlzYWJsZWQnKSkgey4uLn0gKi9cblx0XHRpc0Rpc2FibGVkOiBmdW5jdGlvbihlbGVtKSB7XG5cdFx0XHRyZXR1cm4gKGVsZW0gJiYgJC5pbkFycmF5KGVsZW0sIHRoaXMuX2Rpc2FibGVkKSA+IC0xKTtcblx0XHR9LFxuXG5cdFx0LyoqIFNob3cgYSBwb3B1cCBkYXRlcGlja2VyLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIGVsZW0ge0V2ZW50fEVsZW1lbnR9IGEgZm9jdXMgZXZlbnQgb3IgdGhlIGNvbnRyb2wgdG8gdXNlLlxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuZGF0ZXBpY2soJ3Nob3cnKSAqL1xuXHRcdHNob3c6IGZ1bmN0aW9uKGVsZW0pIHtcblx0XHRcdGVsZW0gPSAkKGVsZW0udGFyZ2V0IHx8IGVsZW0pO1xuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAocGx1Z2luLmN1ckluc3QgPT09IGluc3QpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBsdWdpbi5jdXJJbnN0KSB7XG5cdFx0XHRcdHBsdWdpbi5oaWRlKHBsdWdpbi5jdXJJbnN0LCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XG5cdFx0XHRcdC8vIFJldHJpZXZlIGV4aXN0aW5nIGRhdGUocylcblx0XHRcdFx0aW5zdC5sYXN0VmFsID0gbnVsbDtcblx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzID0gcGx1Z2luLl9leHRyYWN0RGF0ZXMoaW5zdCwgZWxlbS52YWwoKSk7XG5cdFx0XHRcdGluc3QucGlja2luZ1JhbmdlID0gZmFsc2U7XG5cdFx0XHRcdGluc3QuZHJhd0RhdGUgPSBwbHVnaW4uX2NoZWNrTWluTWF4KChpbnN0LnNlbGVjdGVkRGF0ZXNbMF0gfHxcblx0XHRcdFx0XHRpbnN0LmdldCgnZGVmYXVsdERhdGUnKSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKSkubmV3RGF0ZSgpLCBpbnN0KTtcblx0XHRcdFx0aW5zdC5wcmV2RGF0ZSA9IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpO1xuXHRcdFx0XHRwbHVnaW4uY3VySW5zdCA9IGluc3Q7XG5cdFx0XHRcdC8vIEdlbmVyYXRlIGNvbnRlbnRcblx0XHRcdFx0cGx1Z2luLl91cGRhdGUoZWxlbVswXSwgdHJ1ZSk7XG5cdFx0XHRcdC8vIEFkanVzdCBwb3NpdGlvbiBiZWZvcmUgc2hvd2luZ1xuXHRcdFx0XHR2YXIgb2Zmc2V0ID0gcGx1Z2luLl9jaGVja09mZnNldChpbnN0KTtcblx0XHRcdFx0aW5zdC5kaXYuY3NzKHtsZWZ0OiBvZmZzZXQubGVmdCwgdG9wOiBvZmZzZXQudG9wfSk7XG5cdFx0XHRcdC8vIEFuZCBkaXNwbGF5XG5cdFx0XHRcdHZhciBzaG93QW5pbSA9IGluc3Qub3B0aW9ucy5zaG93QW5pbTtcblx0XHRcdFx0dmFyIHNob3dTcGVlZCA9IGluc3Qub3B0aW9ucy5zaG93U3BlZWQ7XG5cdFx0XHRcdHNob3dTcGVlZCA9IChzaG93U3BlZWQgPT09ICdub3JtYWwnICYmICQudWkgJiZcblx0XHRcdFx0XHRwYXJzZUludCgkLnVpLnZlcnNpb24uc3Vic3RyaW5nKDIpKSA+PSA4ID8gJ19kZWZhdWx0JyA6IHNob3dTcGVlZCk7XG5cdFx0XHRcdGlmICgkLmVmZmVjdHMgJiYgKCQuZWZmZWN0c1tzaG93QW5pbV0gfHwgKCQuZWZmZWN0cy5lZmZlY3QgJiYgJC5lZmZlY3RzLmVmZmVjdFtzaG93QW5pbV0pKSkge1xuXHRcdFx0XHRcdHZhciBkYXRhID0gaW5zdC5kaXYuZGF0YSgpOyAvLyBVcGRhdGUgb2xkIGVmZmVjdHMgZGF0YVxuXHRcdFx0XHRcdGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG5cdFx0XHRcdFx0XHRpZiAoa2V5Lm1hdGNoKC9eZWNcXC5zdG9yYWdlXFwuLykpIHtcblx0XHRcdFx0XHRcdFx0ZGF0YVtrZXldID0gaW5zdC5fbWFpbkRpdi5jc3Moa2V5LnJlcGxhY2UoL2VjXFwuc3RvcmFnZVxcLi8sICcnKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGluc3QuZGl2LmRhdGEoZGF0YSkuc2hvdyhzaG93QW5pbSwgaW5zdC5vcHRpb25zLnNob3dPcHRpb25zLCBzaG93U3BlZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGluc3QuZGl2W3Nob3dBbmltIHx8ICdzaG93J10oc2hvd0FuaW0gPyBzaG93U3BlZWQgOiAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogRXh0cmFjdCBwb3NzaWJsZSBkYXRlcyBmcm9tIGEgc3RyaW5nLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QHBhcmFtIHRleHQge3N0cmluZ30gVGhlIHRleHQgdG8gZXh0cmFjdCBmcm9tLlxuXHRcdFx0QHJldHVybiB7Q0RhdGVbXX0gVGhlIGV4dHJhY3RlZCBkYXRlcy4gKi9cblx0XHRfZXh0cmFjdERhdGVzOiBmdW5jdGlvbihpbnN0LCBkYXRlc1RleHQpIHtcblx0XHRcdGlmIChkYXRlc1RleHQgPT09IGluc3QubGFzdFZhbCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpbnN0Lmxhc3RWYWwgPSBkYXRlc1RleHQ7XG5cdFx0XHRkYXRlc1RleHQgPSBkYXRlc1RleHQuc3BsaXQoaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0ID8gaW5zdC5vcHRpb25zLm11bHRpU2VwYXJhdG9yIDpcblx0XHRcdFx0KGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCA/IGluc3Qub3B0aW9ucy5yYW5nZVNlcGFyYXRvciA6ICdcXHgwMCcpKTtcblx0XHRcdHZhciBkYXRlcyA9IFtdO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkYXRlc1RleHQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR2YXIgZGF0ZSA9IGluc3Qub3B0aW9ucy5jYWxlbmRhci5wYXJzZURhdGUoaW5zdC5nZXQoJ2RhdGVGb3JtYXQnKSwgZGF0ZXNUZXh0W2ldKTtcblx0XHRcdFx0XHRpZiAoZGF0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGZvdW5kID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGRhdGVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChkYXRlc1tqXS5jb21wYXJlVG8oZGF0ZSkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICghZm91bmQpIHtcblx0XHRcdFx0XHRcdFx0ZGF0ZXMucHVzaChkYXRlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2F0Y2ggKGUpIHtcblx0XHRcdFx0XHQvLyBJZ25vcmVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGF0ZXMuc3BsaWNlKGluc3Qub3B0aW9ucy5tdWx0aVNlbGVjdCB8fCAoaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0ID8gMiA6IDEpLCBkYXRlcy5sZW5ndGgpO1xuXHRcdFx0aWYgKGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCAmJiBkYXRlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0ZGF0ZXNbMV0gPSBkYXRlc1swXTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBkYXRlcztcblx0XHR9LFxuXG5cdFx0LyoqIFVwZGF0ZSB0aGUgZGF0ZXBpY2tlciBkaXNwbGF5LlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBlbGVtIHtFdmVudHxFbGVtZW50fSBhIGZvY3VzIGV2ZW50IG9yIHRoZSBjb250cm9sIHRvIHVzZS5cblx0XHRcdEBwYXJhbSBoaWRkZW4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGluaXRpYWxseSBoaWRlIHRoZSBkYXRlcGlja2VyLiAqL1xuXHRcdF91cGRhdGU6IGZ1bmN0aW9uKGVsZW0sIGhpZGRlbikge1xuXHRcdFx0ZWxlbSA9ICQoZWxlbS50YXJnZXQgfHwgZWxlbSk7XG5cdFx0XHR2YXIgaW5zdCA9IHBsdWdpbi5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XG5cdFx0XHRcdGlmIChpbnN0LmlubGluZSB8fCBwbHVnaW4uY3VySW5zdCA9PT0gaW5zdCkge1xuXHRcdFx0XHRcdGlmICgkLmlzRnVuY3Rpb24oaW5zdC5vcHRpb25zLm9uQ2hhbmdlTW9udGhZZWFyKSAmJiAoIWluc3QucHJldkRhdGUgfHxcblx0XHRcdFx0XHRcdFx0aW5zdC5wcmV2RGF0ZS55ZWFyKCkgIT09IGluc3QuZHJhd0RhdGUueWVhcigpIHx8XG5cdFx0XHRcdFx0XHRcdGluc3QucHJldkRhdGUubW9udGgoKSAhPT0gaW5zdC5kcmF3RGF0ZS5tb250aCgpKSkge1xuXHRcdFx0XHRcdFx0aW5zdC5vcHRpb25zLm9uQ2hhbmdlTW9udGhZZWFyLmFwcGx5KGVsZW1bMF0sXG5cdFx0XHRcdFx0XHRcdFtpbnN0LmRyYXdEYXRlLnllYXIoKSwgaW5zdC5kcmF3RGF0ZS5tb250aCgpXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChpbnN0LmlubGluZSkge1xuXHRcdFx0XHRcdHZhciBpbmRleCA9ICQoJ2EsIDppbnB1dCcsIGVsZW0pLmluZGV4KCQoJzpmb2N1cycsIGVsZW0pKTtcblx0XHRcdFx0XHRlbGVtLmh0bWwodGhpcy5fZ2VuZXJhdGVDb250ZW50KGVsZW1bMF0sIGluc3QpKTtcblx0XHRcdFx0XHR2YXIgZm9jdXMgPSBlbGVtLmZpbmQoJ2EsIDppbnB1dCcpO1xuXHRcdFx0XHRcdGZvY3VzLmVxKE1hdGgubWF4KE1hdGgubWluKGluZGV4LCBmb2N1cy5sZW5ndGggLSAxKSwgMCkpLmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAocGx1Z2luLmN1ckluc3QgPT09IGluc3QpIHtcblx0XHRcdFx0XHRpZiAoIWluc3QuZGl2KSB7XG5cdFx0XHRcdFx0XHRpbnN0LmRpdiA9ICQoJzxkaXY+PC9kaXY+JykuYWRkQ2xhc3ModGhpcy5fcG9wdXBDbGFzcykuXG5cdFx0XHRcdFx0XHRcdGNzcyh7ZGlzcGxheTogKGhpZGRlbiA/ICdub25lJyA6ICdzdGF0aWMnKSwgcG9zaXRpb246ICdhYnNvbHV0ZScsXG5cdFx0XHRcdFx0XHRcdFx0bGVmdDogZWxlbS5vZmZzZXQoKS5sZWZ0LCB0b3A6IGVsZW0ub2Zmc2V0KCkudG9wICsgZWxlbS5vdXRlckhlaWdodCgpfSkuXG5cdFx0XHRcdFx0XHRcdGFwcGVuZFRvKCQoaW5zdC5vcHRpb25zLnBvcHVwQ29udGFpbmVyIHx8ICdib2R5JykpO1xuXHRcdFx0XHRcdFx0aWYgKCQuZm4ubW91c2V3aGVlbCkge1xuXHRcdFx0XHRcdFx0XHRpbnN0LmRpdi5tb3VzZXdoZWVsKHRoaXMuX2RvTW91c2VXaGVlbCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGluc3QuZGl2Lmh0bWwodGhpcy5fZ2VuZXJhdGVDb250ZW50KGVsZW1bMF0sIGluc3QpKTtcblx0XHRcdFx0XHRlbGVtLmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIFVwZGF0ZSB0aGUgaW5wdXQgZmllbGQgYW5kIGFueSBhbHRlcm5hdGUgZmllbGQgd2l0aCB0aGUgY3VycmVudCBkYXRlcy5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gdXNlLlxuXHRcdFx0QHBhcmFtIGtleVVwIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBjb21pbmcgZnJvbSA8Y29kZT5rZXlVcDwvY29kZT4gcHJvY2Vzc2luZyAoaW50ZXJuYWwpLiAqL1xuXHRcdF91cGRhdGVJbnB1dDogZnVuY3Rpb24oZWxlbSwga2V5VXApIHtcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSA9ICcnO1xuXHRcdFx0XHR2YXIgYWx0VmFsdWUgPSAnJztcblx0XHRcdFx0dmFyIHNlcCA9IChpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgPyBpbnN0Lm9wdGlvbnMubXVsdGlTZXBhcmF0b3IgOlxuXHRcdFx0XHRcdGluc3Qub3B0aW9ucy5yYW5nZVNlcGFyYXRvcik7XG5cdFx0XHRcdHZhciBjYWxlbmRhciA9IGluc3Qub3B0aW9ucy5jYWxlbmRhcjtcblx0XHRcdFx0dmFyIGRhdGVGb3JtYXQgPSBpbnN0LmdldCgnZGF0ZUZvcm1hdCcpO1xuXHRcdFx0XHR2YXIgYWx0Rm9ybWF0ID0gaW5zdC5vcHRpb25zLmFsdEZvcm1hdCB8fCBkYXRlRm9ybWF0O1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhbHVlICs9IChrZXlVcCA/ICcnIDogKGkgPiAwID8gc2VwIDogJycpICtcblx0XHRcdFx0XHRcdGNhbGVuZGFyLmZvcm1hdERhdGUoZGF0ZUZvcm1hdCwgaW5zdC5zZWxlY3RlZERhdGVzW2ldKSk7XG5cdFx0XHRcdFx0YWx0VmFsdWUgKz0gKGkgPiAwID8gc2VwIDogJycpICtcblx0XHRcdFx0XHRcdGNhbGVuZGFyLmZvcm1hdERhdGUoYWx0Rm9ybWF0LCBpbnN0LnNlbGVjdGVkRGF0ZXNbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaW5zdC5pbmxpbmUgJiYgIWtleVVwKSB7XG5cdFx0XHRcdFx0JChlbGVtKS52YWwodmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCQoaW5zdC5vcHRpb25zLmFsdEZpZWxkKS52YWwoYWx0VmFsdWUpO1xuXHRcdFx0XHRpZiAoJC5pc0Z1bmN0aW9uKGluc3Qub3B0aW9ucy5vblNlbGVjdCkgJiYgIWtleVVwICYmICFpbnN0LmluU2VsZWN0KSB7XG5cdFx0XHRcdFx0aW5zdC5pblNlbGVjdCA9IHRydWU7IC8vIFByZXZlbnQgZW5kbGVzcyBsb29wc1xuXHRcdFx0XHRcdGluc3Qub3B0aW9ucy5vblNlbGVjdC5hcHBseShlbGVtLCBbaW5zdC5zZWxlY3RlZERhdGVzXSk7XG5cdFx0XHRcdFx0aW5zdC5pblNlbGVjdCA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiBsZWZ0IGFuZCB0b3AgYm9yZGVycyBmb3IgYW4gZWxlbWVudC5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZWxlbSB7alF1ZXJ5fSBUaGUgZWxlbWVudCBvZiBpbnRlcmVzdC5cblx0XHRcdEByZXR1cm4ge251bWJlcltdfSBUaGUgbGVmdCBhbmQgdG9wIGJvcmRlcnMuICovXG5cdFx0X2dldEJvcmRlcnM6IGZ1bmN0aW9uKGVsZW0pIHtcblx0XHRcdHZhciBjb252ZXJ0ID0gZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHt0aGluOiAxLCBtZWRpdW06IDMsIHRoaWNrOiA1fVt2YWx1ZV0gfHwgdmFsdWU7XG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIFtwYXJzZUZsb2F0KGNvbnZlcnQoZWxlbS5jc3MoJ2JvcmRlci1sZWZ0LXdpZHRoJykpKSxcblx0XHRcdFx0cGFyc2VGbG9hdChjb252ZXJ0KGVsZW0uY3NzKCdib3JkZXItdG9wLXdpZHRoJykpKV07XG5cdFx0fSxcblxuXHRcdC8qKiBDaGVjayBwb3NpdGlvbmluZyB0byByZW1haW4gb24gdGhlIHNjcmVlbi5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEByZXR1cm4ge29iamVjdH0gVGhlIHVwZGF0ZWQgb2Zmc2V0IGZvciB0aGUgZGF0ZXBpY2tlci4gKi9cblx0XHRfY2hlY2tPZmZzZXQ6IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdHZhciBiYXNlID0gKGluc3QuZWxlbS5pcygnOmhpZGRlbicpICYmIGluc3QudHJpZ2dlciA/IGluc3QudHJpZ2dlciA6IGluc3QuZWxlbSk7XG5cdFx0XHR2YXIgb2Zmc2V0ID0gYmFzZS5vZmZzZXQoKTtcblx0XHRcdHZhciBicm93c2VyV2lkdGggPSAkKHdpbmRvdykud2lkdGgoKTtcblx0XHRcdHZhciBicm93c2VySGVpZ2h0ID0gJCh3aW5kb3cpLmhlaWdodCgpO1xuXHRcdFx0aWYgKGJyb3dzZXJXaWR0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gb2Zmc2V0O1xuXHRcdFx0fVxuXHRcdFx0dmFyIGlzRml4ZWQgPSBmYWxzZTtcblx0XHRcdCQoaW5zdC5lbGVtKS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0aXNGaXhlZCB8PSAkKHRoaXMpLmNzcygncG9zaXRpb24nKSA9PT0gJ2ZpeGVkJztcblx0XHRcdFx0cmV0dXJuICFpc0ZpeGVkO1xuXHRcdFx0fSk7XG5cdFx0XHR2YXIgc2Nyb2xsWCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdDtcblx0XHRcdHZhciBzY3JvbGxZID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDtcblx0XHRcdHZhciBhYm92ZSA9IG9mZnNldC50b3AgLSAoaXNGaXhlZCA/IHNjcm9sbFkgOiAwKSAtIGluc3QuZGl2Lm91dGVySGVpZ2h0KCk7XG5cdFx0XHR2YXIgYmVsb3cgPSBvZmZzZXQudG9wIC0gKGlzRml4ZWQgPyBzY3JvbGxZIDogMCkgKyBiYXNlLm91dGVySGVpZ2h0KCk7XG5cdFx0XHR2YXIgYWxpZ25MID0gb2Zmc2V0LmxlZnQgLSAoaXNGaXhlZCA/IHNjcm9sbFggOiAwKTtcblx0XHRcdHZhciBhbGlnblIgPSBvZmZzZXQubGVmdCAtIChpc0ZpeGVkID8gc2Nyb2xsWCA6IDApICsgYmFzZS5vdXRlcldpZHRoKCkgLSBpbnN0LmRpdi5vdXRlcldpZHRoKCk7XG5cdFx0XHR2YXIgdG9vV2lkZSA9IChvZmZzZXQubGVmdCAtIHNjcm9sbFggKyBpbnN0LmRpdi5vdXRlcldpZHRoKCkpID4gYnJvd3NlcldpZHRoO1xuXHRcdFx0dmFyIHRvb0hpZ2ggPSAob2Zmc2V0LnRvcCAtIHNjcm9sbFkgKyBpbnN0LmVsZW0ub3V0ZXJIZWlnaHQoKSArXG5cdFx0XHRcdGluc3QuZGl2Lm91dGVySGVpZ2h0KCkpID4gYnJvd3NlckhlaWdodDtcblx0XHRcdGluc3QuZGl2LmNzcygncG9zaXRpb24nLCBpc0ZpeGVkID8gJ2ZpeGVkJyA6ICdhYnNvbHV0ZScpO1xuXHRcdFx0dmFyIGFsaWdubWVudCA9IGluc3Qub3B0aW9ucy5hbGlnbm1lbnQ7XG5cdFx0XHRpZiAoYWxpZ25tZW50ID09PSAndG9wTGVmdCcpIHtcblx0XHRcdFx0b2Zmc2V0ID0ge2xlZnQ6IGFsaWduTCwgdG9wOiBhYm92ZX07XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChhbGlnbm1lbnQgPT09ICd0b3BSaWdodCcpIHtcblx0XHRcdFx0b2Zmc2V0ID0ge2xlZnQ6IGFsaWduUiwgdG9wOiBhYm92ZX07XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChhbGlnbm1lbnQgPT09ICdib3R0b21MZWZ0Jykge1xuXHRcdFx0XHRvZmZzZXQgPSB7bGVmdDogYWxpZ25MLCB0b3A6IGJlbG93fTtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKGFsaWdubWVudCA9PT0gJ2JvdHRvbVJpZ2h0Jykge1xuXHRcdFx0XHRvZmZzZXQgPSB7bGVmdDogYWxpZ25SLCB0b3A6IGJlbG93fTtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKGFsaWdubWVudCA9PT0gJ3RvcCcpIHtcblx0XHRcdFx0b2Zmc2V0ID0ge2xlZnQ6IChpbnN0Lm9wdGlvbnMuaXNSVEwgfHwgdG9vV2lkZSA/IGFsaWduUiA6IGFsaWduTCksIHRvcDogYWJvdmV9O1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7IC8vIGJvdHRvbVxuXHRcdFx0XHRvZmZzZXQgPSB7bGVmdDogKGluc3Qub3B0aW9ucy5pc1JUTCB8fCB0b29XaWRlID8gYWxpZ25SIDogYWxpZ25MKSxcblx0XHRcdFx0XHR0b3A6ICh0b29IaWdoID8gYWJvdmUgOiBiZWxvdyl9O1xuXHRcdFx0fVxuXHRcdFx0b2Zmc2V0LmxlZnQgPSBNYXRoLm1heCgoaXNGaXhlZCA/IDAgOiBzY3JvbGxYKSwgb2Zmc2V0LmxlZnQpO1xuXHRcdFx0b2Zmc2V0LnRvcCA9IE1hdGgubWF4KChpc0ZpeGVkID8gMCA6IHNjcm9sbFkpLCBvZmZzZXQudG9wKTtcblx0XHRcdHJldHVybiBvZmZzZXQ7XG5cdFx0fSxcblxuXHRcdC8qKiBDbG9zZSBkYXRlIHBpY2tlciBpZiBjbGlja2VkIGVsc2V3aGVyZS5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZXZlbnQge01vdXNlRXZlbnR9IFRoZSBtb3VzZSBjbGljayB0byBjaGVjay4gKi9cblx0XHRfY2hlY2tFeHRlcm5hbENsaWNrOiBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0aWYgKCFwbHVnaW4uY3VySW5zdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR2YXIgZWxlbSA9ICQoZXZlbnQudGFyZ2V0KTtcblx0XHRcdGlmIChlbGVtLmNsb3Nlc3QoJy4nICsgcGx1Z2luLl9wb3B1cENsYXNzICsgJywuJyArIHBsdWdpbi5fdHJpZ2dlckNsYXNzKS5sZW5ndGggPT09IDAgJiZcblx0XHRcdFx0XHQhZWxlbS5oYXNDbGFzcyhwbHVnaW4uX2dldE1hcmtlcigpKSkge1xuXHRcdFx0XHRwbHVnaW4uaGlkZShwbHVnaW4uY3VySW5zdCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBIaWRlIGEgcG9wdXAgZGF0ZXBpY2tlci5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fG9iamVjdH0gVGhlIGNvbnRyb2wgdG8gdXNlIG9yIHRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QHBhcmFtIGltbWVkaWF0ZSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gY2xvc2UgaW1tZWRpYXRlbHkgd2l0aG91dCBhbmltYXRpb24gKGludGVybmFsKS5cblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdoaWRlJykgKi9cblx0XHRoaWRlOiBmdW5jdGlvbihlbGVtLCBpbW1lZGlhdGUpIHtcblx0XHRcdGlmICghZWxlbSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XG5cdFx0XHRcdGluc3QgPSBlbGVtO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGluc3QgJiYgaW5zdCA9PT0gcGx1Z2luLmN1ckluc3QpIHtcblx0XHRcdFx0dmFyIHNob3dBbmltID0gKGltbWVkaWF0ZSA/ICcnIDogaW5zdC5vcHRpb25zLnNob3dBbmltKTtcblx0XHRcdFx0dmFyIHNob3dTcGVlZCA9IGluc3Qub3B0aW9ucy5zaG93U3BlZWQ7XG5cdFx0XHRcdHNob3dTcGVlZCA9IChzaG93U3BlZWQgPT09ICdub3JtYWwnICYmICQudWkgJiZcblx0XHRcdFx0XHRwYXJzZUludCgkLnVpLnZlcnNpb24uc3Vic3RyaW5nKDIpKSA+PSA4ID8gJ19kZWZhdWx0JyA6IHNob3dTcGVlZCk7XG5cdFx0XHRcdHZhciBwb3N0UHJvY2VzcyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICghaW5zdC5kaXYpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aW5zdC5kaXYucmVtb3ZlKCk7XG5cdFx0XHRcdFx0aW5zdC5kaXYgPSBudWxsO1xuXHRcdFx0XHRcdHBsdWdpbi5jdXJJbnN0ID0gbnVsbDtcblx0XHRcdFx0XHRpZiAoJC5pc0Z1bmN0aW9uKGluc3Qub3B0aW9ucy5vbkNsb3NlKSkge1xuXHRcdFx0XHRcdFx0aW5zdC5vcHRpb25zLm9uQ2xvc2UuYXBwbHkoZWxlbSwgW2luc3Quc2VsZWN0ZWREYXRlc10pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0aW5zdC5kaXYuc3RvcCgpO1xuXHRcdFx0XHRpZiAoJC5lZmZlY3RzICYmICgkLmVmZmVjdHNbc2hvd0FuaW1dIHx8ICgkLmVmZmVjdHMuZWZmZWN0ICYmICQuZWZmZWN0cy5lZmZlY3Rbc2hvd0FuaW1dKSkpIHtcblx0XHRcdFx0XHRpbnN0LmRpdi5oaWRlKHNob3dBbmltLCBpbnN0Lm9wdGlvbnMuc2hvd09wdGlvbnMsIHNob3dTcGVlZCwgcG9zdFByb2Nlc3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHZhciBoaWRlQW5pbSA9IChzaG93QW5pbSA9PT0gJ3NsaWRlRG93bicgPyAnc2xpZGVVcCcgOlxuXHRcdFx0XHRcdFx0KHNob3dBbmltID09PSAnZmFkZUluJyA/ICdmYWRlT3V0JyA6ICdoaWRlJykpO1xuXHRcdFx0XHRcdGluc3QuZGl2W2hpZGVBbmltXSgoc2hvd0FuaW0gPyBzaG93U3BlZWQgOiAnJyksIHBvc3RQcm9jZXNzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXNob3dBbmltKSB7XG5cdFx0XHRcdFx0cG9zdFByb2Nlc3MoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogSGFuZGxlIGtleXN0cm9rZXMgaW4gdGhlIGRhdGVwaWNrZXIuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGV2ZW50IHtLZXlFdmVudH0gVGhlIGtleXN0cm9rZS5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIG5vdCBoYW5kbGVkLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgaGFuZGxlZC4gKi9cblx0XHRfa2V5RG93bjogZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdHZhciBlbGVtID0gKGV2ZW50LmRhdGEgJiYgZXZlbnQuZGF0YS5lbGVtKSB8fCBldmVudC50YXJnZXQ7XG5cdFx0XHR2YXIgaW5zdCA9IHBsdWdpbi5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdHZhciBoYW5kbGVkID0gZmFsc2U7XG5cdFx0XHRpZiAoaW5zdC5pbmxpbmUgfHwgaW5zdC5kaXYpIHtcblx0XHRcdFx0aWYgKGV2ZW50LmtleUNvZGUgPT09IDkpIHsgLy8gVGFiIC0gY2xvc2Vcblx0XHRcdFx0XHRwbHVnaW4uaGlkZShlbGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSAxMykgeyAvLyBFbnRlciAtIHNlbGVjdFxuXHRcdFx0XHRcdHBsdWdpbi5zZWxlY3REYXRlKGVsZW0sXG5cdFx0XHRcdFx0XHQkKCdhLicgKyBpbnN0Lm9wdGlvbnMucmVuZGVyZXIuaGlnaGxpZ2h0ZWRDbGFzcywgaW5zdC5kaXYpWzBdKTtcblx0XHRcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHsgLy8gQ29tbWFuZCBrZXlzdHJva2VzXG5cdFx0XHRcdFx0dmFyIGNvbW1hbmRzID0gaW5zdC5vcHRpb25zLmNvbW1hbmRzO1xuXHRcdFx0XHRcdGZvciAodmFyIG5hbWUgaW4gY29tbWFuZHMpIHtcblx0XHRcdFx0XHRcdHZhciBjb21tYW5kID0gY29tbWFuZHNbbmFtZV07XG5cdFx0XHRcdFx0XHRpZiAoY29tbWFuZC5rZXlzdHJva2Uua2V5Q29kZSA9PT0gZXZlbnQua2V5Q29kZSAmJlxuXHRcdFx0XHRcdFx0XHRcdCEhY29tbWFuZC5rZXlzdHJva2UuY3RybEtleSA9PT0gISEoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJlxuXHRcdFx0XHRcdFx0XHRcdCEhY29tbWFuZC5rZXlzdHJva2UuYWx0S2V5ID09PSBldmVudC5hbHRLZXkgJiZcblx0XHRcdFx0XHRcdFx0XHQhIWNvbW1hbmQua2V5c3Ryb2tlLnNoaWZ0S2V5ID09PSBldmVudC5zaGlmdEtleSkge1xuXHRcdFx0XHRcdFx0XHRwbHVnaW4ucGVyZm9ybUFjdGlvbihlbGVtLCBuYW1lKTtcblx0XHRcdFx0XHRcdFx0aGFuZGxlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7IC8vIFNob3cgb24gJ2N1cnJlbnQnIGtleXN0cm9rZVxuXHRcdFx0XHR2YXIgY29tbWFuZCA9IGluc3Qub3B0aW9ucy5jb21tYW5kcy5jdXJyZW50O1xuXHRcdFx0XHRpZiAoY29tbWFuZC5rZXlzdHJva2Uua2V5Q29kZSA9PT0gZXZlbnQua2V5Q29kZSAmJlxuXHRcdFx0XHRcdFx0ISFjb21tYW5kLmtleXN0cm9rZS5jdHJsS2V5ID09PSAhIShldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmXG5cdFx0XHRcdFx0XHQhIWNvbW1hbmQua2V5c3Ryb2tlLmFsdEtleSA9PT0gZXZlbnQuYWx0S2V5ICYmXG5cdFx0XHRcdFx0XHQhIWNvbW1hbmQua2V5c3Ryb2tlLnNoaWZ0S2V5ID09PSBldmVudC5zaGlmdEtleSkge1xuXHRcdFx0XHRcdHBsdWdpbi5zaG93KGVsZW0pO1xuXHRcdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpbnN0LmN0cmxLZXkgPSAoKGV2ZW50LmtleUNvZGUgPCA0OCAmJiBldmVudC5rZXlDb2RlICE9PSAzMikgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KTtcblx0XHRcdGlmIChoYW5kbGVkKSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuICFoYW5kbGVkO1xuXHRcdH0sXG5cblx0XHQvKiogRmlsdGVyIGtleXN0cm9rZXMgaW4gdGhlIGRhdGVwaWNrZXIuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGV2ZW50IHtLZXlFdmVudH0gVGhlIGtleXN0cm9rZS5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGFsbG93ZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QgYWxsb3dlZC4gKi9cblx0XHRfa2V5UHJlc3M6IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHR2YXIgaW5zdCA9IHBsdWdpbi5fZ2V0SW5zdCgoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLmVsZW0pIHx8IGV2ZW50LnRhcmdldCk7XG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSAmJiBpbnN0Lm9wdGlvbnMuY29uc3RyYWluSW5wdXQpIHtcblx0XHRcdFx0dmFyIGNoID0gU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5rZXlDb2RlIHx8IGV2ZW50LmNoYXJDb2RlKTtcblx0XHRcdFx0dmFyIGFsbG93ZWRDaGFycyA9IHBsdWdpbi5fYWxsb3dlZENoYXJzKGluc3QpO1xuXHRcdFx0XHRyZXR1cm4gKGV2ZW50Lm1ldGFLZXkgfHwgaW5zdC5jdHJsS2V5IHx8IGNoIDwgJyAnIHx8XG5cdFx0XHRcdFx0IWFsbG93ZWRDaGFycyB8fCBhbGxvd2VkQ2hhcnMuaW5kZXhPZihjaCkgPiAtMSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgYWxsb3dlZCBieSB0aGUgZGF0ZSBmb3JtYXQuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBzZXQgb2YgYWxsb3dlZCBjaGFyYWN0ZXJzLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBhbnl0aGluZyBhbGxvd2VkLiAqL1xuXHRcdF9hbGxvd2VkQ2hhcnM6IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdHZhciBhbGxvd2VkQ2hhcnMgPSAoaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0ID8gaW5zdC5vcHRpb25zLm11bHRpU2VwYXJhdG9yIDpcblx0XHRcdFx0KGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCA/IGluc3Qub3B0aW9ucy5yYW5nZVNlcGFyYXRvciA6ICcnKSk7XG5cdFx0XHR2YXIgbGl0ZXJhbCA9IGZhbHNlO1xuXHRcdFx0dmFyIGhhc051bSA9IGZhbHNlO1xuXHRcdFx0dmFyIGRhdGVGb3JtYXQgPSBpbnN0LmdldCgnZGF0ZUZvcm1hdCcpO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkYXRlRm9ybWF0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBjaCA9IGRhdGVGb3JtYXQuY2hhckF0KGkpO1xuXHRcdFx0XHRpZiAobGl0ZXJhbCkge1xuXHRcdFx0XHRcdGlmIChjaCA9PT0gXCInXCIgJiYgZGF0ZUZvcm1hdC5jaGFyQXQoaSArIDEpICE9PSBcIidcIikge1xuXHRcdFx0XHRcdFx0bGl0ZXJhbCA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGFsbG93ZWRDaGFycyArPSBjaDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0c3dpdGNoIChjaCkge1xuXHRcdFx0XHRcdFx0Y2FzZSAnZCc6IGNhc2UgJ20nOiBjYXNlICdvJzogY2FzZSAndyc6XG5cdFx0XHRcdFx0XHRcdGFsbG93ZWRDaGFycyArPSAoaGFzTnVtID8gJycgOiAnMDEyMzQ1Njc4OScpOyBoYXNOdW0gPSB0cnVlOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ3knOiBjYXNlICdAJzogY2FzZSAnISc6XG5cdFx0XHRcdFx0XHRcdGFsbG93ZWRDaGFycyArPSAoaGFzTnVtID8gJycgOiAnMDEyMzQ1Njc4OScpICsgJy0nOyBoYXNOdW0gPSB0cnVlOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0onOlxuXHRcdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gKGhhc051bSA/ICcnIDogJzAxMjM0NTY3ODknKSArICctLic7IGhhc051bSA9IHRydWU7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnRCc6IGNhc2UgJ00nOiBjYXNlICdZJzpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7IC8vIEFjY2VwdCBhbnl0aGluZ1xuXHRcdFx0XHRcdFx0Y2FzZSBcIidcIjpcblx0XHRcdFx0XHRcdFx0aWYgKGRhdGVGb3JtYXQuY2hhckF0KGkgKyAxKSA9PT0gXCInXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gXCInXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bGl0ZXJhbCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gY2g7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYWxsb3dlZENoYXJzO1xuXHRcdH0sXG5cblx0XHQvKiogU3luY2hyb25pc2UgZGF0ZXBpY2tlciB3aXRoIHRoZSBmaWVsZC5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZXZlbnQge0tleUV2ZW50fSBUaGUga2V5c3Ryb2tlLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYWxsb3dlZCwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdCBhbGxvd2VkLiAqL1xuXHRcdF9rZXlVcDogZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdHZhciBlbGVtID0gKGV2ZW50LmRhdGEgJiYgZXZlbnQuZGF0YS5lbGVtKSB8fCBldmVudC50YXJnZXQ7XG5cdFx0XHR2YXIgaW5zdCA9IHBsdWdpbi5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpICYmICFpbnN0LmN0cmxLZXkgJiYgaW5zdC5sYXN0VmFsICE9PSBpbnN0LmVsZW0udmFsKCkpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR2YXIgZGF0ZXMgPSBwbHVnaW4uX2V4dHJhY3REYXRlcyhpbnN0LCBpbnN0LmVsZW0udmFsKCkpO1xuXHRcdFx0XHRcdGlmIChkYXRlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRwbHVnaW4uc2V0RGF0ZShlbGVtLCBkYXRlcywgbnVsbCwgdHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGNhdGNoIChldmVudCkge1xuXHRcdFx0XHRcdC8vIElnbm9yZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0LyoqIEluY3JlbWVudC9kZWNyZW1lbnQgbW9udGgveWVhciBvbiBtb3VzZSB3aGVlbCBhY3Rpdml0eS5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZXZlbnQge2V2ZW50fSBUaGUgbW91c2Ugd2hlZWwgZXZlbnQuXG5cdFx0XHRAcGFyYW0gZGVsdGEge251bWJlcn0gVGhlIGFtb3VudCBvZiBjaGFuZ2UuICovXG5cdFx0X2RvTW91c2VXaGVlbDogZnVuY3Rpb24oZXZlbnQsIGRlbHRhKSB7XG5cdFx0XHR2YXIgZWxlbSA9IChwbHVnaW4uY3VySW5zdCAmJiBwbHVnaW4uY3VySW5zdC5lbGVtWzBdKSB8fFxuXHRcdFx0XHQkKGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnLicgKyBwbHVnaW4uX2dldE1hcmtlcigpKVswXTtcblx0XHRcdGlmIChwbHVnaW4uaXNEaXNhYmxlZChlbGVtKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR2YXIgaW5zdCA9IHBsdWdpbi5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMudXNlTW91c2VXaGVlbCkge1xuXHRcdFx0XHRkZWx0YSA9IChkZWx0YSA8IDAgPyAtMSA6ICsxKTtcblx0XHRcdFx0cGx1Z2luLmNoYW5nZU1vbnRoKGVsZW0sIC1pbnN0Lm9wdGlvbnNbZXZlbnQuY3RybEtleSA/ICdtb250aHNUb0p1bXAnIDogJ21vbnRoc1RvU3RlcCddICogZGVsdGEpO1xuXHRcdFx0fVxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9LFxuXG5cdFx0LyoqIENsZWFyIGFuIGlucHV0IGFuZCBjbG9zZSBhIHBvcHVwIGRhdGVwaWNrZXIuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gdXNlLlxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuZGF0ZXBpY2soJ2NsZWFyJykgKi9cblx0XHRjbGVhcjogZnVuY3Rpb24oZWxlbSkge1xuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcblx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzID0gW107XG5cdFx0XHRcdHRoaXMuaGlkZShlbGVtKTtcblx0XHRcdFx0dmFyIGRlZmF1bHREYXRlID0gaW5zdC5nZXQoJ2RlZmF1bHREYXRlJyk7XG5cdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMuc2VsZWN0RGVmYXVsdERhdGUgJiYgZGVmYXVsdERhdGUpIHtcblx0XHRcdFx0XHR0aGlzLnNldERhdGUoZWxlbSwgKGRlZmF1bHREYXRlIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpKS5uZXdEYXRlKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUlucHV0KGVsZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgc2VsZWN0ZWQgZGF0ZShzKSBmb3IgYSBkYXRlcGlja2VyLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZVtdfSBUaGUgc2VsZWN0ZWQgZGF0ZShzKS5cblx0XHRcdEBleGFtcGxlIHZhciBkYXRlcyA9ICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdnZXREYXRlJykgKi9cblx0XHRnZXREYXRlOiBmdW5jdGlvbihlbGVtKSB7XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRyZXR1cm4gKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkgPyBpbnN0LnNlbGVjdGVkRGF0ZXMgOiBbXSk7XG5cdFx0fSxcblxuXHRcdC8qKiBTZXQgdGhlIHNlbGVjdGVkIGRhdGUocykgZm9yIGEgZGF0ZXBpY2tlci5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSB0aGUgY29udHJvbCB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIGRhdGVzIHtDRGF0ZXxudW1iZXJ8c3RyaW5nfGFycmF5fSB0aGUgc2VsZWN0ZWQgZGF0ZShzKS5cblx0XHRcdEBwYXJhbSBbZW5kRGF0ZV0ge0NEYXRlfG51bWJlcnxzdHJpbmd9IHRoZSBlbmRpbmcgZGF0ZSBmb3IgYSByYW5nZS5cblx0XHRcdEBwYXJhbSBba2V5VXBdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBjb21pbmcgZnJvbSA8Y29kZT5rZXlVcDwvY29kZT4gcHJvY2Vzc2luZyAoaW50ZXJuYWwpLlxuXHRcdFx0QHBhcmFtIFtzZXRPcHRdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBjb21pbmcgZnJvbSBvcHRpb24gcHJvY2Vzc2luZyAoaW50ZXJuYWwpLlxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuZGF0ZXBpY2soJ3NldERhdGUnLCBuZXcgRGF0ZSgyMDE0LCAxMi0xLCAyNSkpXG4gJChzZWxlY3RvcikuZGF0ZXBpY2soJ3NldERhdGUnLCAnMTIvMjUvMjAxNCcsICcwMS8wMS8yMDE1JylcbiAkKHNlbGVjdG9yKS5kYXRlcGljaygnc2V0RGF0ZScsIFtkYXRlMSwgZGF0ZTIsIGRhdGUzXSkgKi9cblx0XHRzZXREYXRlOiBmdW5jdGlvbihlbGVtLCBkYXRlcywgZW5kRGF0ZSwga2V5VXAsIHNldE9wdCkge1xuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcblx0XHRcdFx0aWYgKCEkLmlzQXJyYXkoZGF0ZXMpKSB7XG5cdFx0XHRcdFx0ZGF0ZXMgPSBbZGF0ZXNdO1xuXHRcdFx0XHRcdGlmIChlbmREYXRlKSB7XG5cdFx0XHRcdFx0XHRkYXRlcy5wdXNoKGVuZERhdGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuZ2V0KCdtaW5EYXRlJyk7XG5cdFx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcblx0XHRcdFx0dmFyIGN1ckRhdGUgPSBpbnN0LnNlbGVjdGVkRGF0ZXNbMF07XG5cdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IFtdO1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRhdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGRhdGUgPSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGV0ZXJtaW5lRGF0ZShcblx0XHRcdFx0XHRcdGRhdGVzW2ldLCBudWxsLCBjdXJEYXRlLCBpbnN0LmdldCgnZGF0ZUZvcm1hdCcpLCBpbnN0LmdldENvbmZpZygpKTtcblx0XHRcdFx0XHRpZiAoZGF0ZSkge1xuXHRcdFx0XHRcdFx0aWYgKCghbWluRGF0ZSB8fCBkYXRlLmNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpICYmXG5cdFx0XHRcdFx0XHRcdFx0KCFtYXhEYXRlIHx8IGRhdGUuY29tcGFyZVRvKG1heERhdGUpICE9PSArMSkpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGZvdW5kID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGluc3Quc2VsZWN0ZWREYXRlc1tqXS5jb21wYXJlVG8oZGF0ZSkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoIWZvdW5kKSB7XG5cdFx0XHRcdFx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzLnB1c2goZGF0ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzLnNwbGljZShpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgfHxcblx0XHRcdFx0XHQoaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0ID8gMiA6IDEpLCBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoKTtcblx0XHRcdFx0aWYgKGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCkge1xuXHRcdFx0XHRcdHN3aXRjaCAoaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Y2FzZSAxOiBpbnN0LnNlbGVjdGVkRGF0ZXNbMV0gPSBpbnN0LnNlbGVjdGVkRGF0ZXNbMF07IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAyOiBpbnN0LnNlbGVjdGVkRGF0ZXNbMV0gPVxuXHRcdFx0XHRcdFx0XHQoaW5zdC5zZWxlY3RlZERhdGVzWzBdLmNvbXBhcmVUbyhpbnN0LnNlbGVjdGVkRGF0ZXNbMV0pID09PSArMSA/XG5cdFx0XHRcdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlc1swXSA6IGluc3Quc2VsZWN0ZWREYXRlc1sxXSk7IGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpbnN0LnBpY2tpbmdSYW5nZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluc3QucHJldkRhdGUgPSAoaW5zdC5kcmF3RGF0ZSA/IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpIDogbnVsbCk7XG5cdFx0XHRcdGluc3QuZHJhd0RhdGUgPSB0aGlzLl9jaGVja01pbk1heCgoaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8XG5cdFx0XHRcdFx0aW5zdC5nZXQoJ2RlZmF1bHREYXRlJykgfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCkpLm5ld0RhdGUoKSwgaW5zdCk7XG5cdFx0XHRcdGlmICghc2V0T3B0KSB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlKGVsZW0pO1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUlucHV0KGVsZW0sIGtleVVwKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgYSBkYXRlIGlzIHNlbGVjdGFibGUgZm9yIHRoaXMgZGF0ZXBpY2tlci5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gY2hlY2suXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV8c3RyaW5nfG51bWJlcn0gVGhlIGRhdGUgdG8gY2hlY2suXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBzZWxlY3RhYmxlLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QGV4YW1wbGUgdmFyIHNlbGVjdGFibGUgPSAkKHNlbGVjdG9yKS5kYXRlcGljaygnaXNTZWxlY3RhYmxlJywgZGF0ZSkgKi9cblx0XHRpc1NlbGVjdGFibGU6IGZ1bmN0aW9uKGVsZW0sIGRhdGUpIHtcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdGlmICgkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0ZGF0ZSA9IGluc3Qub3B0aW9ucy5jYWxlbmRhci5kZXRlcm1pbmVEYXRlKGRhdGUsXG5cdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlc1swXSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKSwgbnVsbCxcblx0XHRcdFx0aW5zdC5vcHRpb25zLmRhdGVGb3JtYXQsIGluc3QuZ2V0Q29uZmlnKCkpO1xuXHRcdFx0cmV0dXJuIHRoaXMuX2lzU2VsZWN0YWJsZShlbGVtLCBkYXRlLCBpbnN0Lm9wdGlvbnMub25EYXRlLFxuXHRcdFx0XHRpbnN0LmdldCgnbWluRGF0ZScpLCBpbnN0LmdldCgnbWF4RGF0ZScpKTtcblx0XHR9LFxuXG5cdFx0LyoqIEludGVybmFsbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYSBkYXRlIGlzIHNlbGVjdGFibGUgZm9yIHRoaXMgZGF0ZXBpY2tlci5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gdGhlIGNvbnRyb2wgdG8gY2hlY2suXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBkYXRlIHRvIGNoZWNrLlxuXHRcdFx0QHBhcmFtIG9uRGF0ZSB7ZnVuY3Rpb258Ym9vbGVhbn0gQW55IDxjb2RlPm9uRGF0ZTwvY29kZT4gY2FsbGJhY2sgb3IgPGNvZGU+Y2FsbGJhY2suc2VsZWN0YWJsZTwvY29kZT4uXG5cdFx0XHRAcGFyYW0gbWluRGF0ZSB7Q0RhdGV9IFRoZSBtaW5pbXVtIGFsbG93ZWQgZGF0ZS5cblx0XHRcdEBwYXJhbSBtYXhEYXRlIHtDRGF0ZX0gVGhlIG1heGltdW0gYWxsb3dlZCBkYXRlLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgc2VsZWN0YWJsZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC4gKi9cblx0XHRfaXNTZWxlY3RhYmxlOiBmdW5jdGlvbihlbGVtLCBkYXRlLCBvbkRhdGUsIG1pbkRhdGUsIG1heERhdGUpIHtcblx0XHRcdHZhciBkYXRlSW5mbyA9ICh0eXBlb2Ygb25EYXRlID09PSAnYm9vbGVhbicgPyB7c2VsZWN0YWJsZTogb25EYXRlfSA6XG5cdFx0XHRcdCghJC5pc0Z1bmN0aW9uKG9uRGF0ZSkgPyB7fSA6IG9uRGF0ZS5hcHBseShlbGVtLCBbZGF0ZSwgdHJ1ZV0pKSk7XG5cdFx0XHRyZXR1cm4gKGRhdGVJbmZvLnNlbGVjdGFibGUgIT09IGZhbHNlKSAmJlxuXHRcdFx0XHQoIW1pbkRhdGUgfHwgZGF0ZS50b0pEKCkgPj0gbWluRGF0ZS50b0pEKCkpICYmICghbWF4RGF0ZSB8fCBkYXRlLnRvSkQoKSA8PSBtYXhEYXRlLnRvSkQoKSk7XG5cdFx0fSxcblxuXHRcdC8qKiBQZXJmb3JtIGEgbmFtZWQgYWN0aW9uIGZvciBhIGRhdGVwaWNrZXIuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZWxlbSB7ZWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxuXHRcdFx0QHBhcmFtIGFjdGlvbiB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uLiAqL1xuXHRcdHBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uKGVsZW0sIGFjdGlvbikge1xuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkgJiYgIXRoaXMuaXNEaXNhYmxlZChlbGVtKSkge1xuXHRcdFx0XHR2YXIgY29tbWFuZHMgPSBpbnN0Lm9wdGlvbnMuY29tbWFuZHM7XG5cdFx0XHRcdGlmIChjb21tYW5kc1thY3Rpb25dICYmIGNvbW1hbmRzW2FjdGlvbl0uZW5hYmxlZC5hcHBseShlbGVtLCBbaW5zdF0pKSB7XG5cdFx0XHRcdFx0Y29tbWFuZHNbYWN0aW9uXS5hY3Rpb24uYXBwbHkoZWxlbSwgW2luc3RdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogU2V0IHRoZSBjdXJyZW50bHkgc2hvd24gbW9udGgsIGRlZmF1bHRpbmcgdG8gdG9kYXkncy5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXG5cdFx0XHRAcGFyYW0gW3llYXJdIHtudW1iZXJ9IFRoZSB5ZWFyIHRvIHNob3cuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gc2hvdyAoMS0xMikuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBzaG93LlxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuZGF0ZXBpY2soJ3Nob3dNb250aCcsIDIwMTQsIDEyLCAyNSkgKi9cblx0XHRzaG93TW9udGg6IGZ1bmN0aW9uKGVsZW0sIHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpICYmIChkYXkgIT0gbnVsbCB8fFxuXHRcdFx0XHRcdChpbnN0LmRyYXdEYXRlLnllYXIoKSAhPT0geWVhciB8fCBpbnN0LmRyYXdEYXRlLm1vbnRoKCkgIT09IG1vbnRoKSkpIHtcblx0XHRcdFx0aW5zdC5wcmV2RGF0ZSA9IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpO1xuXHRcdFx0XHR2YXIgY2FsZW5kYXIgPSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXI7XG5cdFx0XHRcdHZhciBzaG93ID0gdGhpcy5fY2hlY2tNaW5NYXgoKHllYXIgIT0gbnVsbCA/XG5cdFx0XHRcdFx0Y2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBtb250aCwgMSkgOiBjYWxlbmRhci50b2RheSgpKSwgaW5zdCk7XG5cdFx0XHRcdGluc3QuZHJhd0RhdGUuZGF0ZShzaG93LnllYXIoKSwgc2hvdy5tb250aCgpLCBcblx0XHRcdFx0XHQoZGF5ICE9IG51bGwgPyBkYXkgOiBNYXRoLm1pbihpbnN0LmRyYXdEYXRlLmRheSgpLFxuXHRcdFx0XHRcdGNhbGVuZGFyLmRheXNJbk1vbnRoKHNob3cueWVhcigpLCBzaG93Lm1vbnRoKCkpKSkpO1xuXHRcdFx0XHR0aGlzLl91cGRhdGUoZWxlbSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBBZGp1c3QgdGhlIGN1cnJlbnRseSBzaG93biBtb250aC5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXG5cdFx0XHRAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgbW9udGhzIHRvIGNoYW5nZSBieS5cblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdjaGFuZ2VNb250aCcsIDIpKi9cblx0XHRjaGFuZ2VNb250aDogZnVuY3Rpb24oZWxlbSwgb2Zmc2V0KSB7XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xuXHRcdFx0XHR2YXIgZGF0ZSA9IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZChvZmZzZXQsICdtJyk7XG5cdFx0XHRcdHRoaXMuc2hvd01vbnRoKGVsZW0sIGRhdGUueWVhcigpLCBkYXRlLm1vbnRoKCkpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogQWRqdXN0IHRoZSBjdXJyZW50bHkgc2hvd24gZGF5LlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGFmZmVjdC5cblx0XHRcdEBwYXJhbSBvZmZzZXQge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzIHRvIGNoYW5nZSBieS5cblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdjaGFuZ2VEYXknLCA3KSovXG5cdFx0Y2hhbmdlRGF5OiBmdW5jdGlvbihlbGVtLCBvZmZzZXQpIHtcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XG5cdFx0XHRcdHZhciBkYXRlID0gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuYWRkKG9mZnNldCwgJ2QnKTtcblx0XHRcdFx0dGhpcy5zaG93TW9udGgoZWxlbSwgZGF0ZS55ZWFyKCksIGRhdGUubW9udGgoKSwgZGF0ZS5kYXkoKSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBSZXN0cmljdCBhIGRhdGUgdG8gdGhlIG1pbmltdW0vbWF4aW11bSBzcGVjaWZpZWQuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgZGF0ZSB0byBjaGVjay5cblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLiAqL1xuXHRcdF9jaGVja01pbk1heDogZnVuY3Rpb24oZGF0ZSwgaW5zdCkge1xuXHRcdFx0dmFyIG1pbkRhdGUgPSBpbnN0LmdldCgnbWluRGF0ZScpO1xuXHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xuXHRcdFx0ZGF0ZSA9IChtaW5EYXRlICYmIGRhdGUuY29tcGFyZVRvKG1pbkRhdGUpID09PSAtMSA/IG1pbkRhdGUubmV3RGF0ZSgpIDogZGF0ZSk7XG5cdFx0XHRkYXRlID0gKG1heERhdGUgJiYgZGF0ZS5jb21wYXJlVG8obWF4RGF0ZSkgPT09ICsxID8gbWF4RGF0ZS5uZXdEYXRlKCkgOiBkYXRlKTtcblx0XHRcdHJldHVybiBkYXRlO1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIGRhdGUgYXNzb2NpYXRlZCB3aXRoIGFuIGVudHJ5IGluIHRoZSBkYXRlcGlja2VyLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gdGFyZ2V0IHtFbGVtZW50fSBUaGUgc2VsZWN0ZWQgZGF0ZXBpY2tlciBlbGVtZW50LlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBjb3JyZXNwb25kaW5nIGRhdGUsIG9yIDxjb2RlPm51bGw8L2NvZGU+Llx0XHRcdFxuXHRcdFx0QGV4YW1wbGUgdmFyIGRhdGUgPSAkKHNlbGVjdG9yKS5kYXRlcGljaygncmV0cmlldmVEYXRlJywgJCgnZGl2LmRhdGVwaWNrLXBvcHVwIGE6Y29udGFpbnMoMTApJylbMF0pICovXG5cdFx0cmV0cmlldmVEYXRlOiBmdW5jdGlvbihlbGVtLCB0YXJnZXQpIHtcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdHJldHVybiAoJC5pc0VtcHR5T2JqZWN0KGluc3QpID8gbnVsbCA6IGluc3Qub3B0aW9ucy5jYWxlbmRhci5mcm9tSkQoXG5cdFx0XHRcdHBhcnNlRmxvYXQodGFyZ2V0LmNsYXNzTmFtZS5yZXBsYWNlKC9eLipqZChcXGQrXFwuNSkuKiQvLCAnJDEnKSkpKTtcblx0XHR9LFxuXG5cdFx0LyoqIFNlbGVjdCBhIGRhdGUgZm9yIHRoaXMgZGF0ZXBpY2tlci5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIHRhcmdldCB7RWxlbWVudH0gVGhlIHNlbGVjdGVkIGRhdGVwaWNrZXIgZWxlbWVudC5cblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdzZWxlY3REYXRlJywgJCgnZGl2LmRhdGVwaWNrLXBvcHVwIGE6Y29udGFpbnMoMTApJylbMF0pICovXG5cdFx0c2VsZWN0RGF0ZTogZnVuY3Rpb24oZWxlbSwgdGFyZ2V0KSB7XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSAmJiAhdGhpcy5pc0Rpc2FibGVkKGVsZW0pKSB7XG5cdFx0XHRcdHZhciBkYXRlID0gdGhpcy5yZXRyaWV2ZURhdGUoZWxlbSwgdGFyZ2V0KTtcblx0XHRcdFx0aWYgKGluc3Qub3B0aW9ucy5tdWx0aVNlbGVjdCkge1xuXHRcdFx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoZGF0ZS5jb21wYXJlVG8oaW5zdC5zZWxlY3RlZERhdGVzW2ldKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXMuc3BsaWNlKGksIDEpO1xuXHRcdFx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIWZvdW5kICYmIGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGggPCBpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QpIHtcblx0XHRcdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcy5wdXNoKGRhdGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QpIHtcblx0XHRcdFx0XHRpZiAoaW5zdC5waWNraW5nUmFuZ2UpIHtcblx0XHRcdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlc1sxXSA9IGRhdGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzID0gW2RhdGUsIGRhdGVdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpbnN0LnBpY2tpbmdSYW5nZSA9ICFpbnN0LnBpY2tpbmdSYW5nZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXMgPSBbZGF0ZV07XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5zdC5wcmV2RGF0ZSA9IGluc3QuZHJhd0RhdGUgPSBkYXRlLm5ld0RhdGUoKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlSW5wdXQoZWxlbSk7XG5cdFx0XHRcdGlmIChpbnN0LmlubGluZSB8fCBpbnN0LnBpY2tpbmdSYW5nZSB8fCBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoIDxcblx0XHRcdFx0XHRcdChpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgfHwgKGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCA/IDIgOiAxKSkpIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGUoZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5oaWRlKGVsZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBHZW5lcmF0ZSB0aGUgZGF0ZXBpY2tlciBjb250ZW50IGZvciB0aGlzIGNvbnRyb2wuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGFmZmVjdC5cblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QHJldHVybiB7alF1ZXJ5fSBUaGUgZGF0ZXBpY2tlciBjb250ZW50ICovXG5cdFx0X2dlbmVyYXRlQ29udGVudDogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xuXHRcdFx0dmFyIG1vbnRoc1RvU2hvdyA9IGluc3Qub3B0aW9ucy5tb250aHNUb1Nob3c7XG5cdFx0XHRtb250aHNUb1Nob3cgPSAoJC5pc0FycmF5KG1vbnRoc1RvU2hvdykgPyBtb250aHNUb1Nob3cgOiBbMSwgbW9udGhzVG9TaG93XSk7XG5cdFx0XHRpbnN0LmRyYXdEYXRlID0gdGhpcy5fY2hlY2tNaW5NYXgoXG5cdFx0XHRcdGluc3QuZHJhd0RhdGUgfHwgaW5zdC5nZXQoJ2RlZmF1bHREYXRlJykgfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCksIGluc3QpO1xuXHRcdFx0dmFyIGRyYXdEYXRlID0gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuYWRkKC1pbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpO1xuXHRcdFx0Ly8gR2VuZXJhdGUgbW9udGhzXG5cdFx0XHR2YXIgbW9udGhSb3dzID0gJyc7XG5cdFx0XHRmb3IgKHZhciByb3cgPSAwOyByb3cgPCBtb250aHNUb1Nob3dbMF07IHJvdysrKSB7XG5cdFx0XHRcdHZhciBtb250aHMgPSAnJztcblx0XHRcdFx0Zm9yICh2YXIgY29sID0gMDsgY29sIDwgbW9udGhzVG9TaG93WzFdOyBjb2wrKykge1xuXHRcdFx0XHRcdG1vbnRocyArPSB0aGlzLl9nZW5lcmF0ZU1vbnRoKGVsZW0sIGluc3QsIGRyYXdEYXRlLnllYXIoKSxcblx0XHRcdFx0XHRcdGRyYXdEYXRlLm1vbnRoKCksIGluc3Qub3B0aW9ucy5jYWxlbmRhciwgaW5zdC5vcHRpb25zLnJlbmRlcmVyLCAocm93ID09PSAwICYmIGNvbCA9PT0gMCkpO1xuXHRcdFx0XHRcdGRyYXdEYXRlLmFkZCgxLCAnbScpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1vbnRoUm93cyArPSB0aGlzLl9wcmVwYXJlKGluc3Qub3B0aW9ucy5yZW5kZXJlci5tb250aFJvdywgaW5zdCkucmVwbGFjZSgvXFx7bW9udGhzXFx9LywgbW9udGhzKTtcblx0XHRcdH1cblx0XHRcdHZhciBwaWNrZXIgPSB0aGlzLl9wcmVwYXJlKGluc3Qub3B0aW9ucy5yZW5kZXJlci5waWNrZXIsIGluc3QpLnJlcGxhY2UoL1xce21vbnRoc1xcfS8sIG1vbnRoUm93cykuXG5cdFx0XHRcdHJlcGxhY2UoL1xce3dlZWtIZWFkZXJcXH0vZywgdGhpcy5fZ2VuZXJhdGVEYXlIZWFkZXJzKGluc3QsIGluc3Qub3B0aW9ucy5jYWxlbmRhciwgaW5zdC5vcHRpb25zLnJlbmRlcmVyKSk7XG5cdFx0XHQvLyBBZGQgY29tbWFuZHNcblx0XHRcdHZhciBhZGRDb21tYW5kID0gZnVuY3Rpb24odHlwZSwgb3BlbiwgY2xvc2UsIG5hbWUsIGNsYXNzZXMpIHtcblx0XHRcdFx0aWYgKHBpY2tlci5pbmRleE9mKCd7JyArIHR5cGUgKyAnOicgKyBuYW1lICsgJ30nKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGNvbW1hbmQgPSBpbnN0Lm9wdGlvbnMuY29tbWFuZHNbbmFtZV07XG5cdFx0XHRcdHZhciBkYXRlID0gKGluc3Qub3B0aW9ucy5jb21tYW5kc0FzRGF0ZUZvcm1hdCA/IGNvbW1hbmQuZGF0ZS5hcHBseShlbGVtLCBbaW5zdF0pIDogbnVsbCk7XG5cdFx0XHRcdHBpY2tlciA9IHBpY2tlci5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFx7JyArIHR5cGUgKyAnOicgKyBuYW1lICsgJ1xcXFx9JywgJ2cnKSxcblx0XHRcdFx0XHQnPCcgKyBvcGVuICsgKGNvbW1hbmQuc3RhdHVzID8gJyB0aXRsZT1cIicgKyBpbnN0Lm9wdGlvbnNbY29tbWFuZC5zdGF0dXNdICsgJ1wiJyA6ICcnKSArXG5cdFx0XHRcdFx0JyBjbGFzcz1cIicgKyBpbnN0Lm9wdGlvbnMucmVuZGVyZXIuY29tbWFuZENsYXNzICsgJyAnICtcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMucmVuZGVyZXIuY29tbWFuZENsYXNzICsgJy0nICsgbmFtZSArICcgJyArIGNsYXNzZXMgK1xuXHRcdFx0XHRcdChjb21tYW5kLmVuYWJsZWQoaW5zdCkgPyAnJyA6ICcgJyArIGluc3Qub3B0aW9ucy5yZW5kZXJlci5kaXNhYmxlZENsYXNzKSArICdcIj4nICtcblx0XHRcdFx0XHQoZGF0ZSA/IGRhdGUuZm9ybWF0RGF0ZShpbnN0Lm9wdGlvbnNbY29tbWFuZC50ZXh0XSkgOlxuXHRcdFx0XHRcdGluc3Qub3B0aW9uc1tjb21tYW5kLnRleHRdKSArICc8LycgKyBjbG9zZSArICc+Jyk7XG5cdFx0XHR9O1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBpbnN0Lm9wdGlvbnMuY29tbWFuZHMpIHtcblx0XHRcdFx0YWRkQ29tbWFuZCgnYnV0dG9uJywgJ2J1dHRvbiB0eXBlPVwiYnV0dG9uXCInLCAnYnV0dG9uJywgbmFtZSxcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMucmVuZGVyZXIuY29tbWFuZEJ1dHRvbkNsYXNzKTtcblx0XHRcdFx0YWRkQ29tbWFuZCgnbGluaycsICdhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIicsICdhJywgbmFtZSxcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMucmVuZGVyZXIuY29tbWFuZExpbmtDbGFzcyk7XG5cdFx0XHR9XG5cdFx0XHRwaWNrZXIgPSAkKHBpY2tlcik7XG5cdFx0XHRpZiAobW9udGhzVG9TaG93WzFdID4gMSkge1xuXHRcdFx0XHR2YXIgY291bnQgPSAwO1xuXHRcdFx0XHQkKGluc3Qub3B0aW9ucy5yZW5kZXJlci5tb250aFNlbGVjdG9yLCBwaWNrZXIpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIG50aCA9ICsrY291bnQgJSBtb250aHNUb1Nob3dbMV07XG5cdFx0XHRcdFx0JCh0aGlzKS5hZGRDbGFzcyhudGggPT09IDEgPyAnZmlyc3QnIDogKG50aCA9PT0gMCA/ICdsYXN0JyA6ICcnKSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQWRkIGRhdGVwaWNrZXIgYmVoYXZpb3VyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0XHRmdW5jdGlvbiByZW1vdmVIaWdobGlnaHQoKSB7XG5cdFx0XHRcdChpbnN0LmlubGluZSA/ICQodGhpcykuY2xvc2VzdCgnLicgKyBzZWxmLl9nZXRNYXJrZXIoKSkgOiBpbnN0LmRpdikuXG5cdFx0XHRcdFx0ZmluZChpbnN0Lm9wdGlvbnMucmVuZGVyZXIuZGF5U2VsZWN0b3IgKyAnIGEnKS5cblx0XHRcdFx0XHRyZW1vdmVDbGFzcyhpbnN0Lm9wdGlvbnMucmVuZGVyZXIuaGlnaGxpZ2h0ZWRDbGFzcyk7XG5cdFx0XHR9XG5cdFx0XHRwaWNrZXIuZmluZChpbnN0Lm9wdGlvbnMucmVuZGVyZXIuZGF5U2VsZWN0b3IgKyAnIGEnKS5ob3Zlcihcblx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJlbW92ZUhpZ2hsaWdodC5hcHBseSh0aGlzKTtcblx0XHRcdFx0XHRcdCQodGhpcykuYWRkQ2xhc3MoaW5zdC5vcHRpb25zLnJlbmRlcmVyLmhpZ2hsaWdodGVkQ2xhc3MpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cmVtb3ZlSGlnaGxpZ2h0KS5cblx0XHRcdFx0Y2xpY2soZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0c2VsZi5zZWxlY3REYXRlKGVsZW0sIHRoaXMpO1xuXHRcdFx0XHR9KS5lbmQoKS5cblx0XHRcdFx0ZmluZCgnc2VsZWN0LicgKyB0aGlzLl9tb250aFllYXJDbGFzcyArICc6bm90KC4nICsgdGhpcy5fYW55WWVhckNsYXNzICsgJyknKS5cblx0XHRcdFx0Y2hhbmdlKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBtb250aFllYXIgPSAkKHRoaXMpLnZhbCgpLnNwbGl0KCcvJyk7XG5cdFx0XHRcdFx0c2VsZi5zaG93TW9udGgoZWxlbSwgcGFyc2VJbnQobW9udGhZZWFyWzFdLCAxMCksIHBhcnNlSW50KG1vbnRoWWVhclswXSwgMTApKTtcblx0XHRcdFx0fSkuZW5kKCkuXG5cdFx0XHRcdGZpbmQoJ3NlbGVjdC4nICsgdGhpcy5fYW55WWVhckNsYXNzKS5jbGljayhmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkKHRoaXMpLmNzcygndmlzaWJpbGl0eScsICdoaWRkZW4nKS5cblx0XHRcdFx0XHRcdG5leHQoJ2lucHV0JykuY3NzKHtsZWZ0OiB0aGlzLm9mZnNldExlZnQsIHRvcDogdGhpcy5vZmZzZXRUb3AsXG5cdFx0XHRcdFx0XHR3aWR0aDogdGhpcy5vZmZzZXRXaWR0aCwgaGVpZ2h0OiB0aGlzLm9mZnNldEhlaWdodH0pLnNob3coKS5mb2N1cygpO1xuXHRcdFx0XHR9KS5lbmQoKS5cblx0XHRcdFx0ZmluZCgnaW5wdXQuJyArIHNlbGYuX21vbnRoWWVhckNsYXNzKS5jaGFuZ2UoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHZhciB5ZWFyID0gcGFyc2VJbnQoJCh0aGlzKS52YWwoKSwgMTApO1xuXHRcdFx0XHRcdFx0eWVhciA9IChpc05hTih5ZWFyKSA/IGluc3QuZHJhd0RhdGUueWVhcigpIDogeWVhcik7XG5cdFx0XHRcdFx0XHRzZWxmLnNob3dNb250aChlbGVtLCB5ZWFyLCBpbnN0LmRyYXdEYXRlLm1vbnRoKCksIGluc3QuZHJhd0RhdGUuZGF5KCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0YWxlcnQoZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5rZXlkb3duKGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7IC8vIEVudGVyXG5cdFx0XHRcdFx0XHQkKGV2ZW50LmVsZW0pLmNoYW5nZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSAyNykgeyAvLyBFc2NhcGVcblx0XHRcdFx0XHRcdCQoZXZlbnQuZWxlbSkuaGlkZSgpLnByZXYoJ3NlbGVjdCcpLmNzcygndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0XHRpbnN0LmVsZW0uZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0Ly8gQWRkIGtleWJvYXJkIGhhbmRsaW5nXG5cdFx0XHR2YXIgZGF0YSA9IHtlbGVtOiBpbnN0LmVsZW1bMF19O1xuXHRcdFx0cGlja2VyLmtleWRvd24oZGF0YSwgdGhpcy5fa2V5RG93bikua2V5cHJlc3MoZGF0YSwgdGhpcy5fa2V5UHJlc3MpLmtleXVwKGRhdGEsIHRoaXMuX2tleVVwKTtcblx0XHRcdC8vIEFkZCBjb21tYW5kIGJlaGF2aW91clxuXHRcdFx0cGlja2VyLmZpbmQoJy4nICsgaW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRDbGFzcykuY2xpY2soZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCEkKHRoaXMpLmhhc0NsYXNzKGluc3Qub3B0aW9ucy5yZW5kZXJlci5kaXNhYmxlZENsYXNzKSkge1xuXHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IHRoaXMuY2xhc3NOYW1lLnJlcGxhY2UoXG5cdFx0XHRcdFx0XHRcdG5ldyBSZWdFeHAoJ14uKicgKyBpbnN0Lm9wdGlvbnMucmVuZGVyZXIuY29tbWFuZENsYXNzICsgJy0oW14gXSspLiokJyksICckMScpO1xuXHRcdFx0XHRcdFx0cGx1Z2luLnBlcmZvcm1BY3Rpb24oZWxlbSwgYWN0aW9uKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0Ly8gQWRkIGNsYXNzZXNcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMuaXNSVEwpIHtcblx0XHRcdFx0cGlja2VyLmFkZENsYXNzKGluc3Qub3B0aW9ucy5yZW5kZXJlci5ydGxDbGFzcyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAobW9udGhzVG9TaG93WzBdICogbW9udGhzVG9TaG93WzFdID4gMSkge1xuXHRcdFx0XHRwaWNrZXIuYWRkQ2xhc3MoaW5zdC5vcHRpb25zLnJlbmRlcmVyLm11bHRpQ2xhc3MpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGluc3Qub3B0aW9ucy5waWNrZXJDbGFzcykge1xuXHRcdFx0XHRwaWNrZXIuYWRkQ2xhc3MoaW5zdC5vcHRpb25zLnBpY2tlckNsYXNzKTtcblx0XHRcdH1cblx0XHRcdC8vIFJlc2l6ZVxuXHRcdFx0JCgnYm9keScpLmFwcGVuZChwaWNrZXIpO1xuXHRcdFx0dmFyIHdpZHRoID0gMDtcblx0XHRcdHBpY2tlci5maW5kKGluc3Qub3B0aW9ucy5yZW5kZXJlci5tb250aFNlbGVjdG9yKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR3aWR0aCArPSAkKHRoaXMpLm91dGVyV2lkdGgoKTtcblx0XHRcdH0pO1xuXHRcdFx0cGlja2VyLndpZHRoKHdpZHRoIC8gbW9udGhzVG9TaG93WzBdKTtcblx0XHRcdC8vIFByZS1zaG93IGN1c3RvbWlzYXRpb25cblx0XHRcdGlmICgkLmlzRnVuY3Rpb24oaW5zdC5vcHRpb25zLm9uU2hvdykpIHtcblx0XHRcdFx0aW5zdC5vcHRpb25zLm9uU2hvdy5hcHBseShlbGVtLCBbcGlja2VyLCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIsIGluc3RdKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwaWNrZXI7XG5cdFx0fSxcblxuXHRcdC8qKiBHZW5lcmF0ZSB0aGUgY29udGVudCBmb3IgYSBzaW5nbGUgbW9udGguXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGFmZmVjdC5cblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIHllYXIgdG8gZ2VuZXJhdGUuXG5cdFx0XHRAcGFyYW0gbW9udGgge251bWJlcn0gVGhlIG1vbnRoIHRvIGdlbmVyYXRlLlxuXHRcdFx0QHBhcmFtIGNhbGVuZGFyIHtCYXNlQ2FsZW5kYXJ9IFRoZSBjdXJyZW50IGNhbGVuZGFyLlxuXHRcdFx0QHBhcmFtIHJlbmRlcmVyIHtvYmplY3R9IFRoZSByZW5kZXJpbmcgdGVtcGxhdGVzLlxuXHRcdFx0QHBhcmFtIGZpcnN0IHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBmaXJzdCBvZiBtdWx0aXBsZSBtb250aHMuXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBtb250aCBjb250ZW50LiAqL1xuXHRcdF9nZW5lcmF0ZU1vbnRoOiBmdW5jdGlvbihlbGVtLCBpbnN0LCB5ZWFyLCBtb250aCwgY2FsZW5kYXIsIHJlbmRlcmVyLCBmaXJzdCkge1xuXHRcdFx0dmFyIGRheXNJbk1vbnRoID0gY2FsZW5kYXIuZGF5c0luTW9udGgoeWVhciwgbW9udGgpO1xuXHRcdFx0dmFyIG1vbnRoc1RvU2hvdyA9IGluc3Qub3B0aW9ucy5tb250aHNUb1Nob3c7XG5cdFx0XHRtb250aHNUb1Nob3cgPSAoJC5pc0FycmF5KG1vbnRoc1RvU2hvdykgPyBtb250aHNUb1Nob3cgOiBbMSwgbW9udGhzVG9TaG93XSk7XG5cdFx0XHR2YXIgZml4ZWRXZWVrcyA9IGluc3Qub3B0aW9ucy5maXhlZFdlZWtzIHx8IChtb250aHNUb1Nob3dbMF0gKiBtb250aHNUb1Nob3dbMV0gPiAxKTtcblx0XHRcdHZhciBmaXJzdERheSA9IGluc3Qub3B0aW9ucy5maXJzdERheTtcblx0XHRcdGZpcnN0RGF5ID0gKGZpcnN0RGF5ID09IG51bGwgPyBjYWxlbmRhci5sb2NhbC5maXJzdERheSA6IGZpcnN0RGF5KTtcblx0XHRcdHZhciBsZWFkRGF5cyA9IChjYWxlbmRhci5kYXlPZldlZWsoeWVhciwgbW9udGgsIGNhbGVuZGFyLm1pbkRheSkgLVxuXHRcdFx0XHRmaXJzdERheSArIGNhbGVuZGFyLmRheXNJbldlZWsoKSkgJSBjYWxlbmRhci5kYXlzSW5XZWVrKCk7XG5cdFx0XHR2YXIgbnVtV2Vla3MgPSAoZml4ZWRXZWVrcyA/IDYgOiBNYXRoLmNlaWwoKGxlYWREYXlzICsgZGF5c0luTW9udGgpIC8gY2FsZW5kYXIuZGF5c0luV2VlaygpKSk7XG5cdFx0XHR2YXIgc2VsZWN0T3RoZXJNb250aHMgPSBpbnN0Lm9wdGlvbnMuc2VsZWN0T3RoZXJNb250aHMgJiYgaW5zdC5vcHRpb25zLnNob3dPdGhlck1vbnRocztcblx0XHRcdHZhciBtaW5EYXRlID0gKGluc3QucGlja2luZ1JhbmdlID8gaW5zdC5zZWxlY3RlZERhdGVzWzBdIDogaW5zdC5nZXQoJ21pbkRhdGUnKSk7XG5cdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XG5cdFx0XHR2YXIgc2hvd1dlZWtzID0gcmVuZGVyZXIud2Vlay5pbmRleE9mKCd7d2Vla09mWWVhcn0nKSA+IC0xO1xuXHRcdFx0dmFyIHRvZGF5ID0gY2FsZW5kYXIudG9kYXkoKTtcblx0XHRcdHZhciBkcmF3RGF0ZSA9IGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbW9udGgsIGNhbGVuZGFyLm1pbkRheSk7XG5cdFx0XHRkcmF3RGF0ZS5hZGQoLWxlYWREYXlzIC0gKGZpeGVkV2Vla3MgJiZcblx0XHRcdFx0KGRyYXdEYXRlLmRheU9mV2VlaygpID09PSBmaXJzdERheSB8fCBkcmF3RGF0ZS5kYXlzSW5Nb250aCgpIDwgY2FsZW5kYXIuZGF5c0luV2VlaygpKT9cblx0XHRcdFx0Y2FsZW5kYXIuZGF5c0luV2VlaygpIDogMCksICdkJyk7XG5cdFx0XHR2YXIgamQgPSBkcmF3RGF0ZS50b0pEKCk7XG5cdFx0XHQvLyBHZW5lcmF0ZSB3ZWVrc1xuXHRcdFx0dmFyIHdlZWtzID0gJyc7XG5cdFx0XHRmb3IgKHZhciB3ZWVrID0gMDsgd2VlayA8IG51bVdlZWtzOyB3ZWVrKyspIHtcblx0XHRcdFx0dmFyIHdlZWtPZlllYXIgPSAoIXNob3dXZWVrcyA/ICcnIDogJzxzcGFuIGNsYXNzPVwiamQnICsgamQgKyAnXCI+JyArXG5cdFx0XHRcdFx0KCQuaXNGdW5jdGlvbihpbnN0Lm9wdGlvbnMuY2FsY3VsYXRlV2VlaykgP1xuXHRcdFx0XHRcdGluc3Qub3B0aW9ucy5jYWxjdWxhdGVXZWVrKGRyYXdEYXRlKSA6IGRyYXdEYXRlLndlZWtPZlllYXIoKSkgKyAnPC9zcGFuPicpO1xuXHRcdFx0XHR2YXIgZGF5cyA9ICcnO1xuXHRcdFx0XHRmb3IgKHZhciBkYXkgPSAwOyBkYXkgPCBjYWxlbmRhci5kYXlzSW5XZWVrKCk7IGRheSsrKSB7XG5cdFx0XHRcdFx0dmFyIHNlbGVjdGVkID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYgKGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCAmJiBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0ZWQgPSAoZHJhd0RhdGUuY29tcGFyZVRvKGluc3Quc2VsZWN0ZWREYXRlc1swXSkgIT09IC0xICYmXG5cdFx0XHRcdFx0XHRcdGRyYXdEYXRlLmNvbXBhcmVUbyhpbnN0LnNlbGVjdGVkRGF0ZXNbMV0pICE9PSArMSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRpZiAoaW5zdC5zZWxlY3RlZERhdGVzW2ldLmNvbXBhcmVUbyhkcmF3RGF0ZSkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRzZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dmFyIGRhdGVJbmZvID0gKCEkLmlzRnVuY3Rpb24oaW5zdC5vcHRpb25zLm9uRGF0ZSkgPyB7fSA6XG5cdFx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMub25EYXRlLmFwcGx5KGVsZW0sIFtkcmF3RGF0ZSwgZHJhd0RhdGUubW9udGgoKSA9PT0gbW9udGhdKSk7XG5cdFx0XHRcdFx0dmFyIHNlbGVjdGFibGUgPSAoc2VsZWN0T3RoZXJNb250aHMgfHwgZHJhd0RhdGUubW9udGgoKSA9PT0gbW9udGgpICYmXG5cdFx0XHRcdFx0XHR0aGlzLl9pc1NlbGVjdGFibGUoZWxlbSwgZHJhd0RhdGUsIGRhdGVJbmZvLnNlbGVjdGFibGUsIG1pbkRhdGUsIG1heERhdGUpO1xuXHRcdFx0XHRcdGRheXMgKz0gdGhpcy5fcHJlcGFyZShyZW5kZXJlci5kYXksIGluc3QpLnJlcGxhY2UoL1xce2RheVxcfS9nLFxuXHRcdFx0XHRcdFx0KHNlbGVjdGFibGUgPyAnPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiJyA6ICc8c3BhbicpICtcblx0XHRcdFx0XHRcdCcgY2xhc3M9XCJqZCcgKyBqZCArICcgJyArIChkYXRlSW5mby5kYXRlQ2xhc3MgfHwgJycpICtcblx0XHRcdFx0XHRcdChzZWxlY3RlZCAmJiAoc2VsZWN0T3RoZXJNb250aHMgfHwgZHJhd0RhdGUubW9udGgoKSA9PT0gbW9udGgpID9cblx0XHRcdFx0XHRcdCcgJyArIHJlbmRlcmVyLnNlbGVjdGVkQ2xhc3MgOiAnJykgK1xuXHRcdFx0XHRcdFx0KHNlbGVjdGFibGUgPyAnICcgKyByZW5kZXJlci5kZWZhdWx0Q2xhc3MgOiAnJykgK1xuXHRcdFx0XHRcdFx0KGRyYXdEYXRlLndlZWtEYXkoKSA/ICcnIDogJyAnICsgcmVuZGVyZXIud2Vla2VuZENsYXNzKSArXG5cdFx0XHRcdFx0XHQoZHJhd0RhdGUubW9udGgoKSA9PT0gbW9udGggPyAnJyA6ICcgJyArIHJlbmRlcmVyLm90aGVyTW9udGhDbGFzcykgK1xuXHRcdFx0XHRcdFx0KGRyYXdEYXRlLmNvbXBhcmVUbyh0b2RheSkgPT09IDAgJiYgZHJhd0RhdGUubW9udGgoKSA9PT0gbW9udGggP1xuXHRcdFx0XHRcdFx0JyAnICsgcmVuZGVyZXIudG9kYXlDbGFzcyA6ICcnKSArXG5cdFx0XHRcdFx0XHQoZHJhd0RhdGUuY29tcGFyZVRvKGluc3QuZHJhd0RhdGUpID09PSAwICYmIGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoID9cblx0XHRcdFx0XHRcdCcgJyArIHJlbmRlcmVyLmhpZ2hsaWdodGVkQ2xhc3MgOiAnJykgKyAnXCInICtcblx0XHRcdFx0XHRcdChkYXRlSW5mby50aXRsZSB8fCAoaW5zdC5vcHRpb25zLmRheVN0YXR1cyAmJiBzZWxlY3RhYmxlKSA/ICcgdGl0bGU9XCInICtcblx0XHRcdFx0XHRcdChkYXRlSW5mby50aXRsZSB8fCBkcmF3RGF0ZS5mb3JtYXREYXRlKGluc3Qub3B0aW9ucy5kYXlTdGF0dXMpKSArICdcIicgOiAnJykgKyAnPicgK1xuXHRcdFx0XHRcdFx0KGluc3Qub3B0aW9ucy5zaG93T3RoZXJNb250aHMgfHwgZHJhd0RhdGUubW9udGgoKSA9PT0gbW9udGggP1xuXHRcdFx0XHRcdFx0ZGF0ZUluZm8uY29udGVudCB8fCBkcmF3RGF0ZS5kYXkoKSA6ICcmIzE2MDsnKSArXG5cdFx0XHRcdFx0XHQoc2VsZWN0YWJsZSA/ICc8L2E+JyA6ICc8L3NwYW4+JykpO1xuXHRcdFx0XHRcdGRyYXdEYXRlLmFkZCgxLCAnZCcpO1xuXHRcdFx0XHRcdGpkKys7XG5cdFx0XHRcdH1cblx0XHRcdFx0d2Vla3MgKz0gdGhpcy5fcHJlcGFyZShyZW5kZXJlci53ZWVrLCBpbnN0KS5yZXBsYWNlKC9cXHtkYXlzXFx9L2csIGRheXMpLlxuXHRcdFx0XHRcdHJlcGxhY2UoL1xce3dlZWtPZlllYXJcXH0vZywgd2Vla09mWWVhcik7XG5cdFx0XHR9XG5cdFx0XHR2YXIgbW9udGhIZWFkZXIgPSB0aGlzLl9wcmVwYXJlKHJlbmRlcmVyLm1vbnRoLCBpbnN0KS5tYXRjaCgvXFx7bW9udGhIZWFkZXIoOlteXFx9XSspP1xcfS8pO1xuXHRcdFx0bW9udGhIZWFkZXIgPSAobW9udGhIZWFkZXJbMF0ubGVuZ3RoIDw9IDEzID8gJ01NIHl5eXknIDpcblx0XHRcdFx0bW9udGhIZWFkZXJbMF0uc3Vic3RyaW5nKDEzLCBtb250aEhlYWRlclswXS5sZW5ndGggLSAxKSk7XG5cdFx0XHRtb250aEhlYWRlciA9IChmaXJzdCA/IHRoaXMuX2dlbmVyYXRlTW9udGhTZWxlY3Rpb24oXG5cdFx0XHRcdGluc3QsIHllYXIsIG1vbnRoLCBtaW5EYXRlLCBtYXhEYXRlLCBtb250aEhlYWRlciwgY2FsZW5kYXIsIHJlbmRlcmVyKSA6XG5cdFx0XHRcdGNhbGVuZGFyLmZvcm1hdERhdGUobW9udGhIZWFkZXIsIGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbW9udGgsIGNhbGVuZGFyLm1pbkRheSkpKTtcblx0XHRcdHZhciB3ZWVrSGVhZGVyID0gdGhpcy5fcHJlcGFyZShyZW5kZXJlci53ZWVrSGVhZGVyLCBpbnN0KS5cblx0XHRcdFx0cmVwbGFjZSgvXFx7ZGF5c1xcfS9nLCB0aGlzLl9nZW5lcmF0ZURheUhlYWRlcnMoaW5zdCwgY2FsZW5kYXIsIHJlbmRlcmVyKSk7XG5cdFx0XHRyZXR1cm4gdGhpcy5fcHJlcGFyZShyZW5kZXJlci5tb250aCwgaW5zdCkucmVwbGFjZSgvXFx7bW9udGhIZWFkZXIoOlteXFx9XSspP1xcfS9nLCBtb250aEhlYWRlcikuXG5cdFx0XHRcdHJlcGxhY2UoL1xce3dlZWtIZWFkZXJcXH0vZywgd2Vla0hlYWRlcikucmVwbGFjZSgvXFx7d2Vla3NcXH0vZywgd2Vla3MpO1xuXHRcdH0sXG5cblx0XHQvKiogR2VuZXJhdGUgdGhlIEhUTUwgZm9yIHRoZSBkYXkgaGVhZGVycy5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY3VycmVudCBjYWxlbmRhci5cblx0XHRcdEBwYXJhbSByZW5kZXJlciB7b2JqZWN0fSBUaGUgcmVuZGVyaW5nIHRlbXBsYXRlcy5cblx0XHRcdEByZXR1cm4ge3N0cmluZ30gQSB3ZWVrJ3Mgd29ydGggb2YgZGF5IGhlYWRlcnMuICovXG5cdFx0X2dlbmVyYXRlRGF5SGVhZGVyczogZnVuY3Rpb24oaW5zdCwgY2FsZW5kYXIsIHJlbmRlcmVyKSB7XG5cdFx0XHR2YXIgZmlyc3REYXkgPSBpbnN0Lm9wdGlvbnMuZmlyc3REYXk7XG5cdFx0XHRmaXJzdERheSA9IChmaXJzdERheSA9PSBudWxsID8gY2FsZW5kYXIubG9jYWwuZmlyc3REYXkgOiBmaXJzdERheSk7XG5cdFx0XHR2YXIgaGVhZGVyID0gJyc7XG5cdFx0XHRmb3IgKHZhciBkYXkgPSAwOyBkYXkgPCBjYWxlbmRhci5kYXlzSW5XZWVrKCk7IGRheSsrKSB7XG5cdFx0XHRcdHZhciBkb3cgPSAoZGF5ICsgZmlyc3REYXkpICUgY2FsZW5kYXIuZGF5c0luV2VlaygpO1xuXHRcdFx0XHRoZWFkZXIgKz0gdGhpcy5fcHJlcGFyZShyZW5kZXJlci5kYXlIZWFkZXIsIGluc3QpLnJlcGxhY2UoL1xce2RheVxcfS9nLFxuXHRcdFx0XHRcdCc8c3BhbiBjbGFzcz1cIicgKyB0aGlzLl9jdXJEb1dDbGFzcyArIGRvdyArICdcIiB0aXRsZT1cIicgK1xuXHRcdFx0XHRcdGNhbGVuZGFyLmxvY2FsLmRheU5hbWVzW2Rvd10gKyAnXCI+JyArIGNhbGVuZGFyLmxvY2FsLmRheU5hbWVzTWluW2Rvd10gKyAnPC9zcGFuPicpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGhlYWRlcjtcblx0XHR9LFxuXG5cdFx0LyoqIEdlbmVyYXRlIHNlbGVjdGlvbiBjb250cm9scyBmb3IgbW9udGguXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAcGFyYW0geWVhciB7bnVtYmVyfSBUaGUgeWVhciB0byBnZW5lcmF0ZS5cblx0XHRcdEBwYXJhbSBtb250aCB7bnVtYmVyfSBUaGUgbW9udGggdG8gZ2VuZXJhdGUuXG5cdFx0XHRAcGFyYW0gbWluRGF0ZSB7Q0RhdGV9IFRoZSBtaW5pbXVtIGRhdGUgYWxsb3dlZC5cblx0XHRcdEBwYXJhbSBtYXhEYXRlIHtDRGF0ZX0gVGhlIG1heGltdW0gZGF0ZSBhbGxvd2VkLlxuXHRcdFx0QHBhcmFtIG1vbnRoSGVhZGVyIHtzdHJpbmd9IFRoZSBtb250aC95ZWFyIGZvcm1hdC5cblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY3VycmVudCBjYWxlbmRhci5cblx0XHRcdEByZXR1cm4ge3N0cmluZ30gVGhlIG1vbnRoIHNlbGVjdGlvbiBjb250ZW50LiAqL1xuXHRcdF9nZW5lcmF0ZU1vbnRoU2VsZWN0aW9uOiBmdW5jdGlvbihpbnN0LCB5ZWFyLCBtb250aCwgbWluRGF0ZSwgbWF4RGF0ZSwgbW9udGhIZWFkZXIsIGNhbGVuZGFyKSB7XG5cdFx0XHRpZiAoIWluc3Qub3B0aW9ucy5jaGFuZ2VNb250aCkge1xuXHRcdFx0XHRyZXR1cm4gY2FsZW5kYXIuZm9ybWF0RGF0ZShtb250aEhlYWRlciwgY2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBtb250aCwgMSkpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gTW9udGhzXG5cdFx0XHR2YXIgbW9udGhOYW1lcyA9IGNhbGVuZGFyLmxvY2FsW1xuXHRcdFx0XHQnbW9udGhOYW1lcycgKyAobW9udGhIZWFkZXIubWF0Y2goL21tL2kpID8gJycgOiAnU2hvcnQnKV07XG5cdFx0XHR2YXIgaHRtbCA9IG1vbnRoSGVhZGVyLnJlcGxhY2UoL20rL2ksICdcXFxceDJFJykucmVwbGFjZSgveSsvaSwgJ1xcXFx4MkYnKTtcblx0XHRcdHZhciBzZWxlY3RvciA9ICc8c2VsZWN0IGNsYXNzPVwiJyArIHRoaXMuX21vbnRoWWVhckNsYXNzICtcblx0XHRcdFx0J1wiIHRpdGxlPVwiJyArIGluc3Qub3B0aW9ucy5tb250aFN0YXR1cyArICdcIj4nO1xuXHRcdFx0dmFyIG1heE1vbnRoID0gY2FsZW5kYXIubW9udGhzSW5ZZWFyKHllYXIpICsgY2FsZW5kYXIubWluTW9udGg7XG5cdFx0XHRmb3IgKHZhciBtID0gY2FsZW5kYXIubWluTW9udGg7IG0gPCBtYXhNb250aDsgbSsrKSB7XG5cdFx0XHRcdGlmICgoIW1pbkRhdGUgfHwgY2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBtLFxuXHRcdFx0XHRcdFx0Y2FsZW5kYXIuZGF5c0luTW9udGgoeWVhciwgbSkgLSAxICsgY2FsZW5kYXIubWluRGF5KS5cblx0XHRcdFx0XHRcdGNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpICYmXG5cdFx0XHRcdFx0XHQoIW1heERhdGUgfHwgY2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBtLCBjYWxlbmRhci5taW5EYXkpLlxuXHRcdFx0XHRcdFx0Y29tcGFyZVRvKG1heERhdGUpICE9PSArMSkpIHtcblx0XHRcdFx0XHRzZWxlY3RvciArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBtICsgJy8nICsgeWVhciArICdcIicgK1xuXHRcdFx0XHRcdFx0KG1vbnRoID09PSBtID8gJyBzZWxlY3RlZD1cInNlbGVjdGVkXCInIDogJycpICsgJz4nICtcblx0XHRcdFx0XHRcdG1vbnRoTmFtZXNbbSAtIGNhbGVuZGFyLm1pbk1vbnRoXSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRzZWxlY3RvciArPSAnPC9zZWxlY3Q+Jztcblx0XHRcdGh0bWwgPSBodG1sLnJlcGxhY2UoL1xcXFx4MkUvLCBzZWxlY3Rvcik7XG5cdFx0XHQvLyBZZWFyc1xuXHRcdFx0dmFyIHllYXJSYW5nZSA9IGluc3Qub3B0aW9ucy55ZWFyUmFuZ2U7XG5cdFx0XHRpZiAoeWVhclJhbmdlID09PSAnYW55Jykge1xuXHRcdFx0XHRzZWxlY3RvciA9ICc8c2VsZWN0IGNsYXNzPVwiJyArIHRoaXMuX21vbnRoWWVhckNsYXNzICsgJyAnICsgdGhpcy5fYW55WWVhckNsYXNzICtcblx0XHRcdFx0XHQnXCIgdGl0bGU9XCInICsgaW5zdC5vcHRpb25zLnllYXJTdGF0dXMgKyAnXCI+JyArXG5cdFx0XHRcdFx0JzxvcHRpb24+JyArIHllYXIgKyAnPC9vcHRpb24+PC9zZWxlY3Q+JyArXG5cdFx0XHRcdFx0JzxpbnB1dCBjbGFzcz1cIicgKyB0aGlzLl9tb250aFllYXJDbGFzcyArICcgJyArIHRoaXMuX2N1ck1vbnRoQ2xhc3MgK1xuXHRcdFx0XHRcdG1vbnRoICsgJ1wiIHZhbHVlPVwiJyArIHllYXIgKyAnXCI+Jztcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHR5ZWFyUmFuZ2UgPSB5ZWFyUmFuZ2Uuc3BsaXQoJzonKTtcblx0XHRcdFx0dmFyIHRvZGF5WWVhciA9IGNhbGVuZGFyLnRvZGF5KCkueWVhcigpO1xuXHRcdFx0XHR2YXIgc3RhcnQgPSAoeWVhclJhbmdlWzBdLm1hdGNoKCdjWystXS4qJykgPyB5ZWFyICsgcGFyc2VJbnQoeWVhclJhbmdlWzBdLnN1YnN0cmluZygxKSwgMTApIDpcblx0XHRcdFx0XHQoKHllYXJSYW5nZVswXS5tYXRjaCgnWystXS4qJykgPyB0b2RheVllYXIgOiAwKSArIHBhcnNlSW50KHllYXJSYW5nZVswXSwgMTApKSk7XG5cdFx0XHRcdHZhciBlbmQgPSAoeWVhclJhbmdlWzFdLm1hdGNoKCdjWystXS4qJykgPyB5ZWFyICsgcGFyc2VJbnQoeWVhclJhbmdlWzFdLnN1YnN0cmluZygxKSwgMTApIDpcblx0XHRcdFx0XHQoKHllYXJSYW5nZVsxXS5tYXRjaCgnWystXS4qJykgPyB0b2RheVllYXIgOiAwKSArIHBhcnNlSW50KHllYXJSYW5nZVsxXSwgMTApKSk7XG5cdFx0XHRcdHNlbGVjdG9yID0gJzxzZWxlY3QgY2xhc3M9XCInICsgdGhpcy5fbW9udGhZZWFyQ2xhc3MgK1xuXHRcdFx0XHRcdCdcIiB0aXRsZT1cIicgKyBpbnN0Lm9wdGlvbnMueWVhclN0YXR1cyArICdcIj4nO1xuXHRcdFx0XHRzdGFydCA9IGNhbGVuZGFyLm5ld0RhdGUoc3RhcnQgKyAxLCBjYWxlbmRhci5maXJzdE1vbnRoLCBjYWxlbmRhci5taW5EYXkpLmFkZCgtMSwgJ2QnKTtcblx0XHRcdFx0ZW5kID0gY2FsZW5kYXIubmV3RGF0ZShlbmQsIGNhbGVuZGFyLmZpcnN0TW9udGgsIGNhbGVuZGFyLm1pbkRheSk7XG5cdFx0XHRcdHZhciBhZGRZZWFyID0gZnVuY3Rpb24oeSwgeURpc3BsYXkpIHtcblx0XHRcdFx0XHRpZiAoeSAhPT0gMCB8fCBjYWxlbmRhci5oYXNZZWFyWmVybykge1xuXHRcdFx0XHRcdFx0c2VsZWN0b3IgKz0gJzxvcHRpb24gdmFsdWU9XCInICtcblx0XHRcdFx0XHRcdFx0TWF0aC5taW4obW9udGgsIGNhbGVuZGFyLm1vbnRoc0luWWVhcih5KSAtIDEgKyBjYWxlbmRhci5taW5Nb250aCkgK1xuXHRcdFx0XHRcdFx0XHQnLycgKyB5ICsgJ1wiJyArICh5ZWFyID09PSB5ID8gJyBzZWxlY3RlZD1cInNlbGVjdGVkXCInIDogJycpICsgJz4nICtcblx0XHRcdFx0XHRcdFx0KHlEaXNwbGF5IHx8IHkpICsgJzwvb3B0aW9uPic7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoc3RhcnQudG9KRCgpIDwgZW5kLnRvSkQoKSkge1xuXHRcdFx0XHRcdHN0YXJ0ID0gKG1pbkRhdGUgJiYgbWluRGF0ZS5jb21wYXJlVG8oc3RhcnQpID09PSArMSA/IG1pbkRhdGUgOiBzdGFydCkueWVhcigpO1xuXHRcdFx0XHRcdGVuZCA9IChtYXhEYXRlICYmIG1heERhdGUuY29tcGFyZVRvKGVuZCkgPT09IC0xID8gbWF4RGF0ZSA6IGVuZCkueWVhcigpO1xuXHRcdFx0XHRcdHZhciBlYXJsaWVyTGF0ZXIgPSBNYXRoLmZsb29yKChlbmQgLSBzdGFydCkgLyAyKTtcblx0XHRcdFx0XHRpZiAoIW1pbkRhdGUgfHwgbWluRGF0ZS55ZWFyKCkgPCBzdGFydCkge1xuXHRcdFx0XHRcdFx0YWRkWWVhcihzdGFydCAtIGVhcmxpZXJMYXRlciwgaW5zdC5vcHRpb25zLmVhcmxpZXJUZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Zm9yICh2YXIgeSA9IHN0YXJ0OyB5IDw9IGVuZDsgeSsrKSB7XG5cdFx0XHRcdFx0XHRhZGRZZWFyKHkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIW1heERhdGUgfHwgbWF4RGF0ZS55ZWFyKCkgPiBlbmQpIHtcblx0XHRcdFx0XHRcdGFkZFllYXIoZW5kICsgZWFybGllckxhdGVyLCBpbnN0Lm9wdGlvbnMubGF0ZXJUZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0c3RhcnQgPSAobWF4RGF0ZSAmJiBtYXhEYXRlLmNvbXBhcmVUbyhzdGFydCkgPT09IC0xID8gbWF4RGF0ZSA6IHN0YXJ0KS55ZWFyKCk7XG5cdFx0XHRcdFx0ZW5kID0gKG1pbkRhdGUgJiYgbWluRGF0ZS5jb21wYXJlVG8oZW5kKSA9PT0gKzEgPyBtaW5EYXRlIDogZW5kKS55ZWFyKCk7XG5cdFx0XHRcdFx0dmFyIGVhcmxpZXJMYXRlciA9IE1hdGguZmxvb3IoKHN0YXJ0IC0gZW5kKSAvIDIpO1xuXHRcdFx0XHRcdGlmICghbWF4RGF0ZSB8fCBtYXhEYXRlLnllYXIoKSA+IHN0YXJ0KSB7XG5cdFx0XHRcdFx0XHRhZGRZZWFyKHN0YXJ0ICsgZWFybGllckxhdGVyLCBpbnN0Lm9wdGlvbnMuZWFybGllclRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRmb3IgKHZhciB5ID0gc3RhcnQ7IHkgPj0gZW5kOyB5LS0pIHtcblx0XHRcdFx0XHRcdGFkZFllYXIoeSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICghbWluRGF0ZSB8fCBtaW5EYXRlLnllYXIoKSA8IGVuZCkge1xuXHRcdFx0XHRcdFx0YWRkWWVhcihlbmQgLSBlYXJsaWVyTGF0ZXIsIGluc3Qub3B0aW9ucy5sYXRlclRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzZWxlY3RvciArPSAnPC9zZWxlY3Q+Jztcblx0XHRcdH1cblx0XHRcdGh0bWwgPSBodG1sLnJlcGxhY2UoL1xcXFx4MkYvLCBzZWxlY3Rvcik7XG5cdFx0XHRyZXR1cm4gaHRtbDtcblx0XHR9LFxuXG5cdFx0LyoqIFByZXBhcmUgYSByZW5kZXIgdGVtcGxhdGUgZm9yIHVzZS5cblx0XHRcdEV4Y2x1ZGUgcG9wdXAvaW5saW5lIHNlY3Rpb25zIHRoYXQgYXJlIG5vdCBhcHBsaWNhYmxlLlxuXHRcdFx0TG9jYWxpc2UgdGV4dCBvZiB0aGUgZm9ybToge2wxMG46bmFtZX0uXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIHRleHQge3N0cmluZ30gVGhlIHRleHQgdG8gbG9jYWxpc2UuXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEByZXR1cm4ge3N0cmluZ30gVGhlIGxvY2FsaXNlZCB0ZXh0LiAqL1xuXHRcdF9wcmVwYXJlOiBmdW5jdGlvbih0ZXh0LCBpbnN0KSB7XG5cdFx0XHR2YXIgcmVwbGFjZVNlY3Rpb24gPSBmdW5jdGlvbih0eXBlLCByZXRhaW4pIHtcblx0XHRcdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdFx0XHR2YXIgc3RhcnQgPSB0ZXh0LmluZGV4T2YoJ3snICsgdHlwZSArICc6c3RhcnR9Jyk7XG5cdFx0XHRcdFx0aWYgKHN0YXJ0ID09PSAtMSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR2YXIgZW5kID0gdGV4dC5zdWJzdHJpbmcoc3RhcnQpLmluZGV4T2YoJ3snICsgdHlwZSArICc6ZW5kfScpO1xuXHRcdFx0XHRcdGlmIChlbmQgPiAtMSkge1xuXHRcdFx0XHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIHN0YXJ0KSArXG5cdFx0XHRcdFx0XHRcdChyZXRhaW4gPyB0ZXh0LnN1YnN0cihzdGFydCArIHR5cGUubGVuZ3RoICsgOCwgZW5kIC0gdHlwZS5sZW5ndGggLSA4KSA6ICcnKSArXG5cdFx0XHRcdFx0XHRcdHRleHQuc3Vic3RyaW5nKHN0YXJ0ICsgZW5kICsgdHlwZS5sZW5ndGggKyA2KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRyZXBsYWNlU2VjdGlvbignaW5saW5lJywgaW5zdC5pbmxpbmUpO1xuXHRcdFx0cmVwbGFjZVNlY3Rpb24oJ3BvcHVwJywgIWluc3QuaW5saW5lKTtcblx0XHRcdHZhciBwYXR0ZXJuID0gL1xce2wxMG46KFteXFx9XSspXFx9Lztcblx0XHRcdHZhciBtYXRjaGVzID0gbnVsbDtcblx0XHRcdHdoaWxlIChtYXRjaGVzID0gcGF0dGVybi5leGVjKHRleHQpKSB7XG5cdFx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UobWF0Y2hlc1swXSwgaW5zdC5vcHRpb25zW21hdGNoZXNbMV1dKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0ZXh0O1xuXHRcdH1cblx0fSk7XG5cblx0dmFyIHBsdWdpbiA9ICQuY2FsZW5kYXJzUGlja2VyOyAvLyBTaW5nbGV0b24gaW5zdGFuY2VcblxuXHQkKGZ1bmN0aW9uKCkge1xuXHRcdCQoZG9jdW1lbnQpLm9uKCdtb3VzZWRvd24uJyArIHBsdWdpbk5hbWUsIHBsdWdpbi5fY2hlY2tFeHRlcm5hbENsaWNrKS5cblx0XHRcdG9uKCdyZXNpemUuJyArIHBsdWdpbk5hbWUsIGZ1bmN0aW9uKCkgeyBwbHVnaW4uaGlkZShwbHVnaW4uY3VySW5zdCk7IH0pO1xuXHR9KTtcblxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuYWxsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy5hbGwuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIENhbGVuZGFycyBmb3IgalF1ZXJ5IHYyLjAuMS5cclxuICAgV3JpdHRlbiBieSBLZWl0aCBXb29kIChrYndvb2R7YXR9aWluZXQuY29tLmF1KSBBdWd1c3QgMjAwOS5cclxuICAgQXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvbGljZW5jZS5odG1sKSBsaWNlbnNlLiBcclxuICAgUGxlYXNlIGF0dHJpYnV0ZSB0aGUgYXV0aG9yIGlmIHlvdSB1c2UgaXQuICovXHJcblxyXG4oZnVuY3Rpb24oJCkgeyAvLyBIaWRlIHNjb3BlLCBubyAkIGNvbmZsaWN0XHJcblxyXG5cdGZ1bmN0aW9uIENhbGVuZGFycygpIHtcclxuXHRcdHRoaXMucmVnaW9uYWxPcHRpb25zID0gW107XHJcblx0XHR0aGlzLnJlZ2lvbmFsT3B0aW9uc1snJ10gPSB7XHJcblx0XHRcdGludmFsaWRDYWxlbmRhcjogJ0NhbGVuZGFyIHswfSBub3QgZm91bmQnLFxyXG5cdFx0XHRpbnZhbGlkRGF0ZTogJ0ludmFsaWQgezB9IGRhdGUnLFxyXG5cdFx0XHRpbnZhbGlkTW9udGg6ICdJbnZhbGlkIHswfSBtb250aCcsXHJcblx0XHRcdGludmFsaWRZZWFyOiAnSW52YWxpZCB7MH0geWVhcicsXHJcblx0XHRcdGRpZmZlcmVudENhbGVuZGFyczogJ0Nhbm5vdCBtaXggezB9IGFuZCB7MX0gZGF0ZXMnXHJcblx0XHR9O1xyXG5cdFx0dGhpcy5sb2NhbCA9IHRoaXMucmVnaW9uYWxPcHRpb25zWycnXTtcclxuXHRcdHRoaXMuY2FsZW5kYXJzID0ge307XHJcblx0XHR0aGlzLl9sb2NhbENhbHMgPSB7fTtcclxuXHR9XHJcblxyXG5cdC8qKiBDcmVhdGUgdGhlIGNhbGVuZGFycyBwbHVnaW4uXHJcblx0XHQ8cD5Qcm92aWRlcyBzdXBwb3J0IGZvciB2YXJpb3VzIHdvcmxkIGNhbGVuZGFycyBpbiBhIGNvbnNpc3RlbnQgbWFubmVyLjwvcD5cclxuXHQgXHRAY2xhc3MgQ2FsZW5kYXJzXHJcblx0XHRAZXhhbXBsZSAkLmNhbGVuZGFycy5pbnN0YW5jZSgnanVsaWFuJykubmV3RGF0ZSgyMDE0LCAxMiwgMjUpICovXHJcblx0JC5leHRlbmQoQ2FsZW5kYXJzLnByb3RvdHlwZSwge1xyXG5cclxuXHRcdC8qKiBPYnRhaW4gYSBjYWxlbmRhciBpbXBsZW1lbnRhdGlvbiBhbmQgbG9jYWxpc2F0aW9uLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzXHJcblx0XHRcdEBwYXJhbSBbbmFtZT0nZ3JlZ29yaWFuJ10ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyLCBlLmcuICdncmVnb3JpYW4nLCAncGVyc2lhbicsICdpc2xhbWljJy5cclxuXHRcdFx0QHBhcmFtIFtsYW5ndWFnZT0nJ10ge3N0cmluZ30gVGhlIGxhbmd1YWdlIGNvZGUgdG8gdXNlIGZvciBsb2NhbGlzYXRpb24gKGRlZmF1bHQgaXMgRW5nbGlzaCkuXHJcblx0XHRcdEByZXR1cm4ge0NhbGVuZGFyfSBUaGUgY2FsZW5kYXIgYW5kIGxvY2FsaXNhdGlvbi5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBjYWxlbmRhciBub3QgZm91bmQuICovXHJcblx0XHRpbnN0YW5jZTogZnVuY3Rpb24obmFtZSwgbGFuZ3VhZ2UpIHtcclxuXHRcdFx0bmFtZSA9IChuYW1lIHx8ICdncmVnb3JpYW4nKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRsYW5ndWFnZSA9IGxhbmd1YWdlIHx8ICcnO1xyXG5cdFx0XHR2YXIgY2FsID0gdGhpcy5fbG9jYWxDYWxzW25hbWUgKyAnLScgKyBsYW5ndWFnZV07XHJcblx0XHRcdGlmICghY2FsICYmIHRoaXMuY2FsZW5kYXJzW25hbWVdKSB7XHJcblx0XHRcdFx0Y2FsID0gbmV3IHRoaXMuY2FsZW5kYXJzW25hbWVdKGxhbmd1YWdlKTtcclxuXHRcdFx0XHR0aGlzLl9sb2NhbENhbHNbbmFtZSArICctJyArIGxhbmd1YWdlXSA9IGNhbDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIWNhbCkge1xyXG5cdFx0XHRcdHRocm93ICh0aGlzLmxvY2FsLmludmFsaWRDYWxlbmRhciB8fCB0aGlzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZENhbGVuZGFyKS5cclxuXHRcdFx0XHRcdHJlcGxhY2UoL1xcezBcXH0vLCBuYW1lKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gY2FsO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgLSBmb3IgdG9kYXkgaWYgbm8gb3RoZXIgcGFyYW1ldGVycyBnaXZlbi5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1xyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb3B5IG9yIHRoZSB5ZWFyIGZvciB0aGUgZGF0ZS5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIGZvciB0aGUgZGF0ZS5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgZm9yIHRoZSBkYXRlLlxyXG5cdFx0XHRAcGFyYW0gW2NhbGVuZGFyPSdncmVnb3JpYW4nXSB7QmFzZUNhbGVuZGFyfHN0cmluZ30gVGhlIHVuZGVybHlpbmcgY2FsZW5kYXIgb3IgdGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyLlxyXG5cdFx0XHRAcGFyYW0gW2xhbmd1YWdlPScnXSB7c3RyaW5nfSBUaGUgbGFuZ3VhZ2UgdG8gdXNlIGZvciBsb2NhbGlzYXRpb24gKGRlZmF1bHQgRW5nbGlzaCkuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgbmV3IGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlLiAqL1xyXG5cdFx0bmV3RGF0ZTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSwgY2FsZW5kYXIsIGxhbmd1YWdlKSB7XHJcblx0XHRcdGNhbGVuZGFyID0gKHllYXIgIT0gbnVsbCAmJiB5ZWFyLnllYXIgPyB5ZWFyLmNhbGVuZGFyKCkgOiAodHlwZW9mIGNhbGVuZGFyID09PSAnc3RyaW5nJyA/XHJcblx0XHRcdFx0dGhpcy5pbnN0YW5jZShjYWxlbmRhciwgbGFuZ3VhZ2UpIDogY2FsZW5kYXIpKSB8fCB0aGlzLmluc3RhbmNlKCk7XHJcblx0XHRcdHJldHVybiBjYWxlbmRhci5uZXdEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHQvKiogR2VuZXJpYyBkYXRlLCBiYXNlZCBvbiBhIHBhcnRpY3VsYXIgY2FsZW5kYXIuXHJcblx0XHRAY2xhc3MgQ0RhdGVcclxuXHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgdW5kZXJseWluZyBjYWxlbmRhciBpbXBsZW1lbnRhdGlvbi5cclxuXHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSB5ZWFyIGZvciB0aGlzIGRhdGUuXHJcblx0XHRAcGFyYW0gbW9udGgge251bWJlcn0gVGhlIG1vbnRoIGZvciB0aGlzIGRhdGUuXHJcblx0XHRAcGFyYW0gZGF5IHtudW1iZXJ9IFRoZSBkYXkgZm9yIHRoaXMgZGF0ZS5cclxuXHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgZGF0ZSBvYmplY3QuXHJcblx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZS4gKi9cclxuXHRmdW5jdGlvbiBDRGF0ZShjYWxlbmRhciwgeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0dGhpcy5fY2FsZW5kYXIgPSBjYWxlbmRhcjtcclxuXHRcdHRoaXMuX3llYXIgPSB5ZWFyO1xyXG5cdFx0dGhpcy5fbW9udGggPSBtb250aDtcclxuXHRcdHRoaXMuX2RheSA9IGRheTtcclxuXHRcdGlmICh0aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbCA9PT0gMCAmJlxyXG5cdFx0XHRcdCF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHRoaXMuX3llYXIsIHRoaXMuX21vbnRoLCB0aGlzLl9kYXkpKSB7XHJcblx0XHRcdHRocm93ICgkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKS5cclxuXHRcdFx0XHRyZXBsYWNlKC9cXHswXFx9LywgdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKiogUGFkIGEgbnVtZXJpYyB2YWx1ZSB3aXRoIGxlYWRpbmcgemVyb2VzLlxyXG5cdFx0QHByaXZhdGVcclxuXHRcdEBwYXJhbSB2YWx1ZSB7bnVtYmVyfSBUaGUgbnVtYmVyIHRvIGZvcm1hdC5cclxuXHRcdEBwYXJhbSBsZW5ndGgge251bWJlcn0gVGhlIG1pbmltdW0gbGVuZ3RoLlxyXG5cdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIG51bWJlci4gKi9cclxuXHRmdW5jdGlvbiBwYWQodmFsdWUsIGxlbmd0aCkge1xyXG5cdFx0dmFsdWUgPSAnJyArIHZhbHVlO1xyXG5cdFx0cmV0dXJuICcwMDAwMDAnLnN1YnN0cmluZygwLCBsZW5ndGggLSB2YWx1ZS5sZW5ndGgpICsgdmFsdWU7XHJcblx0fVxyXG5cclxuXHQkLmV4dGVuZChDRGF0ZS5wcm90b3R5cGUsIHtcclxuXHJcblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcGFyYW0gW3llYXJdIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvcHkgb3IgdGhlIHllYXIgZm9yIHRoZSBkYXRlIChkZWZhdWx0IHRoaXMgZGF0ZSkuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCBmb3IgdGhlIGRhdGUuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IGZvciB0aGUgZGF0ZS5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBuZXcgZGF0ZS5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUuICovXHJcblx0XHRuZXdEYXRlOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5uZXdEYXRlKCh5ZWFyID09IG51bGwgPyB0aGlzIDogeWVhciksIG1vbnRoLCBkYXkpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU2V0IG9yIHJldHJpZXZlIHRoZSB5ZWFyIGZvciB0aGlzIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcGFyYW0gW3llYXJdIHtudW1iZXJ9IFRoZSB5ZWFyIGZvciB0aGUgZGF0ZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfENEYXRlfSBUaGUgZGF0ZSdzIHllYXIgKGlmIG5vIHBhcmFtZXRlcikgb3IgdGhlIHVwZGF0ZWQgZGF0ZS5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUuICovXHJcblx0XHR5ZWFyOiBmdW5jdGlvbih5ZWFyKSB7XHJcblx0XHRcdHJldHVybiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCA/IHRoaXMuX3llYXIgOiB0aGlzLnNldCh5ZWFyLCAneScpKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFNldCBvciByZXRyaWV2ZSB0aGUgbW9udGggZm9yIHRoaXMgZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCBmb3IgdGhlIGRhdGUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcnxDRGF0ZX0gVGhlIGRhdGUncyBtb250aCAoaWYgbm8gcGFyYW1ldGVyKSBvciB0aGUgdXBkYXRlZCBkYXRlLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZS4gKi9cclxuXHRcdG1vbnRoOiBmdW5jdGlvbihtb250aCkge1xyXG5cdFx0XHRyZXR1cm4gKGFyZ3VtZW50cy5sZW5ndGggPT09IDAgPyB0aGlzLl9tb250aCA6IHRoaXMuc2V0KG1vbnRoLCAnbScpKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFNldCBvciByZXRyaWV2ZSB0aGUgZGF5IGZvciB0aGlzIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSBmb3IgdGhlIGRhdGUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcnxDRGF0YX0gVGhlIGRhdGUncyBkYXkgKGlmIG5vIHBhcmFtZXRlcikgb3IgdGhlIHVwZGF0ZWQgZGF0ZS5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUuICovXHJcblx0XHRkYXk6IGZ1bmN0aW9uKGRheSkge1xyXG5cdFx0XHRyZXR1cm4gKGFyZ3VtZW50cy5sZW5ndGggPT09IDAgPyB0aGlzLl9kYXkgOiB0aGlzLnNldChkYXksICdkJykpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU2V0IG5ldyB2YWx1ZXMgZm9yIHRoaXMgZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSB5ZWFyIGZvciB0aGUgZGF0ZS5cclxuXHRcdFx0QHBhcmFtIG1vbnRoIHtudW1iZXJ9IFRoZSBtb250aCBmb3IgdGhlIGRhdGUuXHJcblx0XHRcdEBwYXJhbSBkYXkge251bWJlcn0gVGhlIGRheSBmb3IgdGhlIGRhdGUuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgdXBkYXRlZCBkYXRlLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZS4gKi9cclxuXHRcdGRhdGU6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcclxuXHRcdFx0aWYgKCF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHllYXIsIG1vbnRoLCBkYXkpKSB7XHJcblx0XHRcdFx0dGhyb3cgKCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZERhdGUpLlxyXG5cdFx0XHRcdFx0cmVwbGFjZSgvXFx7MFxcfS8sIHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuX3llYXIgPSB5ZWFyO1xyXG5cdFx0XHR0aGlzLl9tb250aCA9IG1vbnRoO1xyXG5cdFx0XHR0aGlzLl9kYXkgPSBkYXk7XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGluIGEgbGVhcCB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBpcyBhIGxlYXAgeWVhciwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC4gKi9cclxuXHRcdGxlYXBZZWFyOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmxlYXBZZWFyKHRoaXMpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIGVwb2NoIGRlc2lnbmF0b3IgZm9yIHRoaXMgZGF0ZSwgZS5nLiBCQ0Ugb3IgQ0UuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBjdXJyZW50IGVwb2NoLiAqL1xyXG5cdFx0ZXBvY2g6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZXBvY2godGhpcyk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBGb3JtYXQgdGhlIHllYXIsIGlmIG5vdCBhIHNpbXBsZSBzZXF1ZW50aWFsIG51bWJlci5cclxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXHJcblx0XHRcdEByZXR1cm4ge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB5ZWFyLiAqL1xyXG5cdFx0Zm9ybWF0WWVhcjogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5mb3JtYXRZZWFyKHRoaXMpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG1vbnRoIG9mIHRoZSB5ZWFyIGZvciB0aGlzIGRhdGUsXHJcblx0XHRcdGkuZS4gdGhlIG1vbnRoJ3MgcG9zaXRpb24gd2l0aGluIGEgbnVtYmVyZWQgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG1vbnRoIG9mIHRoZSB5ZWFyOiA8Y29kZT5taW5Nb250aDwvY29kZT4gdG8gbW9udGhzIHBlciB5ZWFyLiAqL1xyXG5cdFx0bW9udGhPZlllYXI6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIubW9udGhPZlllYXIodGhpcyk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgd2VlayBvZiB0aGUgeWVhciBmb3IgdGhpcyBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgd2VlayBvZiB0aGUgeWVhcjogMSB0byB3ZWVrcyBwZXIgeWVhci4gKi9cclxuXHRcdHdlZWtPZlllYXI6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla09mWWVhcih0aGlzKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGUgeWVhciBmb3IgdGhpcyBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyB5ZWFyLiAqL1xyXG5cdFx0ZGF5c0luWWVhcjogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5kYXlzSW5ZZWFyKHRoaXMpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIGRheSBvZiB0aGUgeWVhciBmb3IgdGhpcyBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZGF5IG9mIHRoZSB5ZWFyOiAxIHRvIGRheXMgcGVyIHllYXIuICovXHJcblx0XHRkYXlPZlllYXI6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZZZWFyKHRoaXMpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoZSBtb250aCBmb3IgdGhpcyBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMuICovXHJcblx0XHRkYXlzSW5Nb250aDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5kYXlzSW5Nb250aCh0aGlzKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBkYXkgb2YgdGhlIHdlZWsgZm9yIHRoaXMgZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGRheSBvZiB0aGUgd2VlazogMCB0byBudW1iZXIgb2YgZGF5cyAtIDEuICovXHJcblx0XHRkYXlPZldlZWs6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZXZWVrKHRoaXMpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGEgd2VlayBkYXkuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBhIHdlZWsgZGF5LCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LiAqL1xyXG5cdFx0d2Vla0RheTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci53ZWVrRGF5KHRoaXMpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gLSBjb250ZW50cyBkZXBlbmRzIG9uIGNhbGVuZGFyLiAqL1xyXG5cdFx0ZXh0cmFJbmZvOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmV4dHJhSW5mbyh0aGlzKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEFkZCBwZXJpb2QocykgdG8gYSBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHBhcmFtIG9mZnNldCB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHBlcmlvZHMgdG8gYWRqdXN0IGJ5LlxyXG5cdFx0XHRAcGFyYW0gcGVyaW9kIHtzdHJpbmd9IE9uZSBvZiAneScgZm9yIHllYXIsICdtJyBmb3IgbW9udGgsICd3JyBmb3Igd2VlaywgJ2QnIGZvciBkYXkuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgdXBkYXRlZCBkYXRlLiAqL1xyXG5cdFx0YWRkOiBmdW5jdGlvbihvZmZzZXQsIHBlcmlvZCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuYWRkKHRoaXMsIG9mZnNldCwgcGVyaW9kKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFNldCBhIHBvcnRpb24gb2YgdGhlIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcGFyYW0gdmFsdWUge251bWJlcn0gVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIHBlcmlvZC5cclxuXHRcdFx0QHBhcmFtIHBlcmlvZCB7c3RyaW5nfSBPbmUgb2YgJ3knIGZvciB5ZWFyLCAnbScgZm9yIG1vbnRoLCAnZCcgZm9yIGRheS5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSB1cGRhdGVkIGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgbm90IGEgdmFsaWQgZGF0ZS4gKi9cclxuXHRcdHNldDogZnVuY3Rpb24odmFsdWUsIHBlcmlvZCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuc2V0KHRoaXMsIHZhbHVlLCBwZXJpb2QpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ29tcGFyZSB0aGlzIGRhdGUgdG8gYW5vdGhlciBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgb3RoZXIgZGF0ZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSAtMSBpZiB0aGlzIGRhdGUgaXMgYmVmb3JlIHRoZSBvdGhlciBkYXRlLFxyXG5cdFx0XHRcdFx0MCBpZiB0aGV5IGFyZSBlcXVhbCwgb3IgKzEgaWYgdGhpcyBkYXRlIGlzIGFmdGVyIHRoZSBvdGhlciBkYXRlLiAqL1xyXG5cdFx0Y29tcGFyZVRvOiBmdW5jdGlvbihkYXRlKSB7XHJcblx0XHRcdGlmICh0aGlzLl9jYWxlbmRhci5uYW1lICE9PSBkYXRlLl9jYWxlbmRhci5uYW1lKSB7XHJcblx0XHRcdFx0dGhyb3cgKCQuY2FsZW5kYXJzLmxvY2FsLmRpZmZlcmVudENhbGVuZGFycyB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmRpZmZlcmVudENhbGVuZGFycykuXHJcblx0XHRcdFx0XHRyZXBsYWNlKC9cXHswXFx9LywgdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSkucmVwbGFjZSgvXFx7MVxcfS8sIGRhdGUuX2NhbGVuZGFyLmxvY2FsLm5hbWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBjID0gKHRoaXMuX3llYXIgIT09IGRhdGUuX3llYXIgPyB0aGlzLl95ZWFyIC0gZGF0ZS5feWVhciA6XHJcblx0XHRcdFx0dGhpcy5fbW9udGggIT09IGRhdGUuX21vbnRoID8gdGhpcy5tb250aE9mWWVhcigpIC0gZGF0ZS5tb250aE9mWWVhcigpIDpcclxuXHRcdFx0XHR0aGlzLl9kYXkgLSBkYXRlLl9kYXkpO1xyXG5cdFx0XHRyZXR1cm4gKGMgPT09IDAgPyAwIDogKGMgPCAwID8gLTEgOiArMSkpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIGNhbGVuZGFyIGJhY2tpbmcgdGhpcyBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHJldHVybiB7QmFzZUNhbGVuZGFyfSBUaGUgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24uICovXHJcblx0XHRjYWxlbmRhcjogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhcjtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBKdWxpYW4gZGF0ZSBlcXVpdmFsZW50IGZvciB0aGlzIGRhdGUsXHJcblx0XHRcdGkuZS4gZGF5cyBzaW5jZSBKYW51YXJ5IDEsIDQ3MTMgQkNFIEdyZWVud2ljaCBub29uLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZXF1aXZhbGVudCBKdWxpYW4gZGF0ZS4gKi9cclxuXHRcdHRvSkQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIudG9KRCh0aGlzKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIGZyb20gYSBKdWxpYW4gZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXHJcblx0XHRcdEBwYXJhbSBqZCB7bnVtYmVyfSBUaGUgSnVsaWFuIGRhdGUgdG8gY29udmVydC5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXHJcblx0XHRmcm9tSkQ6IGZ1bmN0aW9uKGpkKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5mcm9tSkQoamQpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ29udmVydCB0aGlzIGRhdGUgdG8gYSBzdGFuZGFyZCAoR3JlZ29yaWFuKSBKYXZhU2NyaXB0IERhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcmV0dXJuIHtEYXRlfSBUaGUgZXF1aXZhbGVudCBKYXZhU2NyaXB0IGRhdGUuICovXHJcblx0XHR0b0pTRGF0ZTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci50b0pTRGF0ZSh0aGlzKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIGZyb20gYSBzdGFuZGFyZCAoR3JlZ29yaWFuKSBKYXZhU2NyaXB0IERhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcGFyYW0ganNkIHtEYXRlfSBUaGUgSmF2YVNjcmlwdCBkYXRlIHRvIGNvbnZlcnQuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgZXF1aXZhbGVudCBkYXRlLiAqL1xyXG5cdFx0ZnJvbUpTRGF0ZTogZnVuY3Rpb24oanNkKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5mcm9tSlNEYXRlKGpzZCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDb252ZXJ0IHRvIGEgc3RyaW5nIGZvciBkaXNwbGF5LlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGlzIGRhdGUgYXMgYSBzdHJpbmcuICovXHJcblx0XHR0b1N0cmluZzogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiAodGhpcy55ZWFyKCkgPCAwID8gJy0nIDogJycpICsgcGFkKE1hdGguYWJzKHRoaXMueWVhcigpKSwgNCkgK1xyXG5cdFx0XHRcdCctJyArIHBhZCh0aGlzLm1vbnRoKCksIDIpICsgJy0nICsgcGFkKHRoaXMuZGF5KCksIDIpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHQvKiogQmFzaWMgZnVuY3Rpb25hbGl0eSBmb3IgYWxsIGNhbGVuZGFycy5cclxuXHRcdE90aGVyIGNhbGVuZGFycyBzaG91bGQgZXh0ZW5kIHRoaXM6XHJcblx0XHQ8cHJlPk90aGVyQ2FsZW5kYXIucHJvdG90eXBlID0gbmV3IEJhc2VDYWxlbmRhcjs8L3ByZT5cclxuXHRcdEBjbGFzcyBCYXNlQ2FsZW5kYXIgKi9cclxuXHRmdW5jdGlvbiBCYXNlQ2FsZW5kYXIoKSB7XHJcblx0XHR0aGlzLnNob3J0WWVhckN1dG9mZiA9ICcrMTAnO1xyXG5cdH1cclxuXHJcblx0JC5leHRlbmQoQmFzZUNhbGVuZGFyLnByb3RvdHlwZSwge1xyXG5cdFx0X3ZhbGlkYXRlTGV2ZWw6IDAsIC8vIFwiU3RhY2tcIiB0byB0dXJuIHZhbGlkYXRpb24gb24vb2ZmXHJcblxyXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIHdpdGhpbiB0aGlzIGNhbGVuZGFyIC0gdG9kYXkgaWYgbm8gcGFyYW1ldGVycyBnaXZlbi5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBkdXBsaWNhdGUgb3IgdGhlIHllYXIgZm9yIHRoZSBkYXRlLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggZm9yIHRoZSBkYXRlLlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSBmb3IgdGhlIGRhdGUuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgbmV3IGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgbm90IGEgdmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0bmV3RGF0ZTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHRpZiAoeWVhciA9PSBudWxsKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMudG9kYXkoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoeWVhci55ZWFyKSB7XHJcblx0XHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSxcclxuXHRcdFx0XHRcdCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZERhdGUpO1xyXG5cdFx0XHRcdGRheSA9IHllYXIuZGF5KCk7XHJcblx0XHRcdFx0bW9udGggPSB5ZWFyLm1vbnRoKCk7XHJcblx0XHRcdFx0eWVhciA9IHllYXIueWVhcigpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBuZXcgQ0RhdGUodGhpcywgeWVhciwgbW9udGgsIGRheSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDcmVhdGUgYSBuZXcgZGF0ZSBmb3IgdG9kYXkuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRvZGF5J3MgZGF0ZS4gKi9cclxuXHRcdHRvZGF5OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZnJvbUpTRGF0ZShuZXcgRGF0ZSgpKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBlcG9jaCBkZXNpZ25hdG9yIGZvciB0aGlzIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBjdXJyZW50IGVwb2NoLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZXBvY2g6IGZ1bmN0aW9uKHllYXIpIHtcclxuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcclxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhciB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRZZWFyKTtcclxuXHRcdFx0cmV0dXJuIChkYXRlLnllYXIoKSA8IDAgPyB0aGlzLmxvY2FsLmVwb2Noc1swXSA6IHRoaXMubG9jYWwuZXBvY2hzWzFdKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEZvcm1hdCB0aGUgeWVhciwgaWYgbm90IGEgc2ltcGxlIHNlcXVlbnRpYWwgbnVtYmVyXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZm9ybWF0IG9yIHRoZSB5ZWFyIHRvIGZvcm1hdC5cclxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHllYXIuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRmb3JtYXRZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksXHJcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkWWVhcik7XHJcblx0XHRcdHJldHVybiAoZGF0ZS55ZWFyKCkgPCAwID8gJy0nIDogJycpICsgcGFkKE1hdGguYWJzKGRhdGUueWVhcigpKSwgNClcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgbW9udGhzIGluIGEgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBtb250aHMuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRtb250aHNJblllYXI6IGZ1bmN0aW9uKHllYXIpIHtcclxuXHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksXHJcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkWWVhcik7XHJcblx0XHRcdHJldHVybiAxMjtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENhbGN1bGF0ZSB0aGUgbW9udGgncyBvcmRpbmFsIHBvc2l0aW9uIHdpdGhpbiB0aGUgeWVhciAtXHJcblx0XHRcdGZvciB0aG9zZSBjYWxlbmRhcnMgdGhhdCBkb24ndCBzdGFydCBhdCBtb250aCAxIVxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIG1vbnRoIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBvcmRpbmFsIHBvc2l0aW9uLCBzdGFydGluZyBmcm9tIDxjb2RlPm1pbk1vbnRoPC9jb2RlPi5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIvbW9udGggb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdG1vbnRoT2ZZZWFyOiBmdW5jdGlvbih5ZWFyLCBtb250aCkge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCB0aGlzLm1pbkRheSxcclxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkTW9udGggfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkTW9udGgpO1xyXG5cdFx0XHRyZXR1cm4gKGRhdGUubW9udGgoKSArIHRoaXMubW9udGhzSW5ZZWFyKGRhdGUpIC0gdGhpcy5maXJzdE1vbnRoKSAlXHJcblx0XHRcdFx0dGhpcy5tb250aHNJblllYXIoZGF0ZSkgKyB0aGlzLm1pbk1vbnRoO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ2FsY3VsYXRlIGFjdHVhbCBtb250aCBmcm9tIG9yZGluYWwgcG9zaXRpb24sIHN0YXJ0aW5nIGZyb20gbWluTW9udGguXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIG9yZCB7bnVtYmVyfSBUaGUgbW9udGgncyBvcmRpbmFsIHBvc2l0aW9uLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBtb250aCdzIG51bWJlci5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIvbW9udGguICovXHJcblx0XHRmcm9tTW9udGhPZlllYXI6IGZ1bmN0aW9uKHllYXIsIG9yZCkge1xyXG5cdFx0XHR2YXIgbSA9IChvcmQgKyB0aGlzLmZpcnN0TW9udGggLSAyICogdGhpcy5taW5Nb250aCkgJVxyXG5cdFx0XHRcdHRoaXMubW9udGhzSW5ZZWFyKHllYXIpICsgdGhpcy5taW5Nb250aDtcclxuXHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgbSwgdGhpcy5taW5EYXksXHJcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZE1vbnRoIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZE1vbnRoKTtcclxuXHRcdFx0cmV0dXJuIG07XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRkYXlzSW5ZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksXHJcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkWWVhcik7XHJcblx0XHRcdHJldHVybiAodGhpcy5sZWFwWWVhcihkYXRlKSA/IDM2NiA6IDM2NSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgZGF5IG9mIHRoZSB5ZWFyIGZvciBhIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gY29udmVydCBvciB0aGUgeWVhciB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gY29udmVydC5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gY29udmVydC5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZGF5IG9mIHRoZSB5ZWFyLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZGF5T2ZZZWFyOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSxcclxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcclxuXHRcdFx0cmV0dXJuIGRhdGUudG9KRCgpIC0gdGhpcy5uZXdEYXRlKGRhdGUueWVhcigpLFxyXG5cdFx0XHRcdHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGRhdGUueWVhcigpLCB0aGlzLm1pbk1vbnRoKSwgdGhpcy5taW5EYXkpLnRvSkQoKSArIDE7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSB3ZWVrLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzLiAqL1xyXG5cdFx0ZGF5c0luV2VlazogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiA3O1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIGRheSBvZiB0aGUgd2VlayBmb3IgYSBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGRheSBvZiB0aGUgd2VlazogMCB0byBudW1iZXIgb2YgZGF5cyAtIDEuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRkYXlPZldlZWs6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcclxuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgZGF5LFxyXG5cdFx0XHRcdCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZERhdGUpO1xyXG5cdFx0XHRyZXR1cm4gKE1hdGguZmxvb3IodGhpcy50b0pEKGRhdGUpKSArIDIpICUgdGhpcy5kYXlzSW5XZWVrKCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGEgZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gLSBjb250ZW50cyBkZXBlbmRzIG9uIGNhbGVuZGFyLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZXh0cmFJbmZvOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksXHJcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSk7XHJcblx0XHRcdHJldHVybiB7fTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEFkZCBwZXJpb2QocykgdG8gYSBkYXRlLlxyXG5cdFx0XHRDYXRlciBmb3Igbm8geWVhciB6ZXJvLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZX0gVGhlIHN0YXJ0aW5nIGRhdGUuXHJcblx0XHRcdEBwYXJhbSBvZmZzZXQge251bWJlcn0gVGhlIG51bWJlciBvZiBwZXJpb2RzIHRvIGFkanVzdCBieS5cclxuXHRcdFx0QHBhcmFtIHBlcmlvZCB7c3RyaW5nfSBPbmUgb2YgJ3knIGZvciB5ZWFyLCAnbScgZm9yIG1vbnRoLCAndycgZm9yIHdlZWssICdkJyBmb3IgZGF5LlxyXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIHVwZGF0ZWQgZGF0ZS5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0YWRkOiBmdW5jdGlvbihkYXRlLCBvZmZzZXQsIHBlcmlvZCkge1xyXG5cdFx0XHR0aGlzLl92YWxpZGF0ZShkYXRlLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcclxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcclxuXHRcdFx0cmV0dXJuIHRoaXMuX2NvcnJlY3RBZGQoZGF0ZSwgdGhpcy5fYWRkKGRhdGUsIG9mZnNldCwgcGVyaW9kKSwgb2Zmc2V0LCBwZXJpb2QpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQWRkIHBlcmlvZChzKSB0byBhIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgc3RhcnRpbmcgZGF0ZS5cclxuXHRcdFx0QHBhcmFtIG9mZnNldCB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHBlcmlvZHMgdG8gYWRqdXN0IGJ5LlxyXG5cdFx0XHRAcGFyYW0gcGVyaW9kIHtzdHJpbmd9IE9uZSBvZiAneScgZm9yIHllYXIsICdtJyBmb3IgbW9udGgsICd3JyBmb3Igd2VlaywgJ2QnIGZvciBkYXkuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgdXBkYXRlZCBkYXRlLiAqL1xyXG5cdFx0X2FkZDogZnVuY3Rpb24oZGF0ZSwgb2Zmc2V0LCBwZXJpb2QpIHtcclxuXHRcdFx0dGhpcy5fdmFsaWRhdGVMZXZlbCsrO1xyXG5cdFx0XHRpZiAocGVyaW9kID09PSAnZCcgfHwgcGVyaW9kID09PSAndycpIHtcclxuXHRcdFx0XHR2YXIgamQgPSBkYXRlLnRvSkQoKSArIG9mZnNldCAqIChwZXJpb2QgPT09ICd3JyA/IHRoaXMuZGF5c0luV2VlaygpIDogMSk7XHJcblx0XHRcdFx0dmFyIGQgPSBkYXRlLmNhbGVuZGFyKCkuZnJvbUpEKGpkKTtcclxuXHRcdFx0XHR0aGlzLl92YWxpZGF0ZUxldmVsLS07XHJcblx0XHRcdFx0cmV0dXJuIFtkLnllYXIoKSwgZC5tb250aCgpLCBkLmRheSgpXTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhciB5ID0gZGF0ZS55ZWFyKCkgKyAocGVyaW9kID09PSAneScgPyBvZmZzZXQgOiAwKTtcclxuXHRcdFx0XHR2YXIgbSA9IGRhdGUubW9udGhPZlllYXIoKSArIChwZXJpb2QgPT09ICdtJyA/IG9mZnNldCA6IDApO1xyXG5cdFx0XHRcdHZhciBkID0gZGF0ZS5kYXkoKTsvLyArIChwZXJpb2QgPT09ICdkJyA/IG9mZnNldCA6IDApICtcclxuXHRcdFx0XHRcdC8vKHBlcmlvZCA9PT0gJ3cnID8gb2Zmc2V0ICogdGhpcy5kYXlzSW5XZWVrKCkgOiAwKTtcclxuXHRcdFx0XHR2YXIgcmVzeW5jWWVhck1vbnRoID0gZnVuY3Rpb24oY2FsZW5kYXIpIHtcclxuXHRcdFx0XHRcdHdoaWxlIChtIDwgY2FsZW5kYXIubWluTW9udGgpIHtcclxuXHRcdFx0XHRcdFx0eS0tO1xyXG5cdFx0XHRcdFx0XHRtICs9IGNhbGVuZGFyLm1vbnRoc0luWWVhcih5KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHZhciB5ZWFyTW9udGhzID0gY2FsZW5kYXIubW9udGhzSW5ZZWFyKHkpO1xyXG5cdFx0XHRcdFx0d2hpbGUgKG0gPiB5ZWFyTW9udGhzIC0gMSArIGNhbGVuZGFyLm1pbk1vbnRoKSB7XHJcblx0XHRcdFx0XHRcdHkrKztcclxuXHRcdFx0XHRcdFx0bSAtPSB5ZWFyTW9udGhzO1xyXG5cdFx0XHRcdFx0XHR5ZWFyTW9udGhzID0gY2FsZW5kYXIubW9udGhzSW5ZZWFyKHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0aWYgKHBlcmlvZCA9PT0gJ3knKSB7XHJcblx0XHRcdFx0XHRpZiAoZGF0ZS5tb250aCgpICE9PSB0aGlzLmZyb21Nb250aE9mWWVhcih5LCBtKSkgeyAvLyBIZWJyZXdcclxuXHRcdFx0XHRcdFx0bSA9IHRoaXMubmV3RGF0ZSh5LCBkYXRlLm1vbnRoKCksIHRoaXMubWluRGF5KS5tb250aE9mWWVhcigpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0bSA9IE1hdGgubWluKG0sIHRoaXMubW9udGhzSW5ZZWFyKHkpKTtcclxuXHRcdFx0XHRcdGQgPSBNYXRoLm1pbihkLCB0aGlzLmRheXNJbk1vbnRoKHksIHRoaXMuZnJvbU1vbnRoT2ZZZWFyKHksIG0pKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgaWYgKHBlcmlvZCA9PT0gJ20nKSB7XHJcblx0XHRcdFx0XHRyZXN5bmNZZWFyTW9udGgodGhpcyk7XHJcblx0XHRcdFx0XHRkID0gTWF0aC5taW4oZCwgdGhpcy5kYXlzSW5Nb250aCh5LCB0aGlzLmZyb21Nb250aE9mWWVhcih5LCBtKSkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgeW1kID0gW3ksIHRoaXMuZnJvbU1vbnRoT2ZZZWFyKHksIG0pLCBkXTtcclxuXHRcdFx0XHR0aGlzLl92YWxpZGF0ZUxldmVsLS07XHJcblx0XHRcdFx0cmV0dXJuIHltZDtcclxuXHRcdFx0fVxyXG5cdFx0XHRjYXRjaCAoZSkge1xyXG5cdFx0XHRcdHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLTtcclxuXHRcdFx0XHR0aHJvdyBlO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDb3JyZWN0IGEgY2FuZGlkYXRlIGRhdGUgYWZ0ZXIgYWRkaW5nIHBlcmlvZChzKSB0byBhIGRhdGUuXHJcblx0XHRcdEhhbmRsZSBubyB5ZWFyIHplcm8gaWYgbmVjZXNzYXJ5LlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZX0gVGhlIHN0YXJ0aW5nIGRhdGUuXHJcblx0XHRcdEBwYXJhbSB5bWQge251bWJlcltdfSBUaGUgYWRkZWQgZGF0ZS5cclxuXHRcdFx0QHBhcmFtIG9mZnNldCB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHBlcmlvZHMgdG8gYWRqdXN0IGJ5LlxyXG5cdFx0XHRAcGFyYW0gcGVyaW9kIHtzdHJpbmd9IE9uZSBvZiAneScgZm9yIHllYXIsICdtJyBmb3IgbW9udGgsICd3JyBmb3Igd2VlaywgJ2QnIGZvciBkYXkuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgdXBkYXRlZCBkYXRlLiAqL1xyXG5cdFx0X2NvcnJlY3RBZGQ6IGZ1bmN0aW9uKGRhdGUsIHltZCwgb2Zmc2V0LCBwZXJpb2QpIHtcclxuXHRcdFx0aWYgKCF0aGlzLmhhc1llYXJaZXJvICYmIChwZXJpb2QgPT09ICd5JyB8fCBwZXJpb2QgPT09ICdtJykpIHtcclxuXHRcdFx0XHRpZiAoeW1kWzBdID09PSAwIHx8IC8vIEluIHllYXIgemVyb1xyXG5cdFx0XHRcdFx0XHQoZGF0ZS55ZWFyKCkgPiAwKSAhPT0gKHltZFswXSA+IDApKSB7IC8vIENyb3NzZWQgeWVhciB6ZXJvXHJcblx0XHRcdFx0XHR2YXIgYWRqID0ge3k6IFsxLCAxLCAneSddLCBtOiBbMSwgdGhpcy5tb250aHNJblllYXIoLTEpLCAnbSddLFxyXG5cdFx0XHRcdFx0XHR3OiBbdGhpcy5kYXlzSW5XZWVrKCksIHRoaXMuZGF5c0luWWVhcigtMSksICdkJ10sXHJcblx0XHRcdFx0XHRcdGQ6IFsxLCB0aGlzLmRheXNJblllYXIoLTEpLCAnZCddfVtwZXJpb2RdO1xyXG5cdFx0XHRcdFx0dmFyIGRpciA9IChvZmZzZXQgPCAwID8gLTEgOiArMSk7XHJcblx0XHRcdFx0XHR5bWQgPSB0aGlzLl9hZGQoZGF0ZSwgb2Zmc2V0ICogYWRqWzBdICsgZGlyICogYWRqWzFdLCBhZGpbMl0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZGF0ZS5kYXRlKHltZFswXSwgeW1kWzFdLCB5bWRbMl0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU2V0IGEgcG9ydGlvbiBvZiB0aGUgZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBzdGFydGluZyBkYXRlLlxyXG5cdFx0XHRAcGFyYW0gdmFsdWUge251bWJlcn0gVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIHBlcmlvZC5cclxuXHRcdFx0QHBhcmFtIHBlcmlvZCB7c3RyaW5nfSBPbmUgb2YgJ3knIGZvciB5ZWFyLCAnbScgZm9yIG1vbnRoLCAnZCcgZm9yIGRheS5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSB1cGRhdGVkIGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRzZXQ6IGZ1bmN0aW9uKGRhdGUsIHZhbHVlLCBwZXJpb2QpIHtcclxuXHRcdFx0dGhpcy5fdmFsaWRhdGUoZGF0ZSwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksXHJcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSk7XHJcblx0XHRcdHZhciB5ID0gKHBlcmlvZCA9PT0gJ3knID8gdmFsdWUgOiBkYXRlLnllYXIoKSk7XHJcblx0XHRcdHZhciBtID0gKHBlcmlvZCA9PT0gJ20nID8gdmFsdWUgOiBkYXRlLm1vbnRoKCkpO1xyXG5cdFx0XHR2YXIgZCA9IChwZXJpb2QgPT09ICdkJyA/IHZhbHVlIDogZGF0ZS5kYXkoKSk7XHJcblx0XHRcdGlmIChwZXJpb2QgPT09ICd5JyB8fCBwZXJpb2QgPT09ICdtJykge1xyXG5cdFx0XHRcdGQgPSBNYXRoLm1pbihkLCB0aGlzLmRheXNJbk1vbnRoKHksIG0pKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZGF0ZS5kYXRlKHksIG0sIGQpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgYSBkYXRlIGlzIHZhbGlkIGZvciB0aGlzIGNhbGVuZGFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBtb250aCB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIGRheSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGEgdmFsaWQgZGF0ZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC4gKi9cclxuXHRcdGlzVmFsaWQ6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcclxuXHRcdFx0dGhpcy5fdmFsaWRhdGVMZXZlbCsrO1xyXG5cdFx0XHR2YXIgdmFsaWQgPSAodGhpcy5oYXNZZWFyWmVybyB8fCB5ZWFyICE9PSAwKTtcclxuXHRcdFx0aWYgKHZhbGlkKSB7XHJcblx0XHRcdFx0dmFyIGRhdGUgPSB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIHRoaXMubWluRGF5KTtcclxuXHRcdFx0XHR2YWxpZCA9IChtb250aCA+PSB0aGlzLm1pbk1vbnRoICYmIG1vbnRoIC0gdGhpcy5taW5Nb250aCA8IHRoaXMubW9udGhzSW5ZZWFyKGRhdGUpKSAmJlxyXG5cdFx0XHRcdFx0KGRheSA+PSB0aGlzLm1pbkRheSAmJiBkYXkgLSB0aGlzLm1pbkRheSA8IHRoaXMuZGF5c0luTW9udGgoZGF0ZSkpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLTtcclxuXHRcdFx0cmV0dXJuIHZhbGlkO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ29udmVydCB0aGUgZGF0ZSB0byBhIHN0YW5kYXJkIChHcmVnb3JpYW4pIEphdmFTY3JpcHQgRGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb252ZXJ0IG9yIHRoZSB5ZWFyIHRvIGNvbnZlcnQuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcmV0dXJuIHtEYXRlfSBUaGUgZXF1aXZhbGVudCBKYXZhU2NyaXB0IGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR0b0pTRGF0ZTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksXHJcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSk7XHJcblx0XHRcdHJldHVybiAkLmNhbGVuZGFycy5pbnN0YW5jZSgpLmZyb21KRCh0aGlzLnRvSkQoZGF0ZSkpLnRvSlNEYXRlKCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDb252ZXJ0IHRoZSBkYXRlIGZyb20gYSBzdGFuZGFyZCAoR3JlZ29yaWFuKSBKYXZhU2NyaXB0IERhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIGpzZCB7RGF0ZX0gVGhlIEphdmFTY3JpcHQgZGF0ZS5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGNhbGVuZGFyIGRhdGUuICovXHJcblx0XHRmcm9tSlNEYXRlOiBmdW5jdGlvbihqc2QpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZnJvbUpEKCQuY2FsZW5kYXJzLmluc3RhbmNlKCkuZnJvbUpTRGF0ZShqc2QpLnRvSkQoKSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDaGVjayB0aGF0IGEgY2FuZGlkYXRlIGRhdGUgaXMgZnJvbSB0aGUgc2FtZSBjYWxlbmRhciBhbmQgaXMgdmFsaWQuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gdmFsaWRhdGUgb3IgdGhlIHllYXIgdG8gdmFsaWRhdGUuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byB2YWxpZGF0ZS5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gdmFsaWRhdGUuXHJcblx0XHRcdEBwYXJhbSBlcnJvciB7c3RyaW5nfSBScnJvciBtZXNzYWdlIGlmIGludmFsaWQuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgZGlmZmVyZW50IGNhbGVuZGFycyB1c2VkIG9yIGludmFsaWQgZGF0ZS4gKi9cclxuXHRcdF92YWxpZGF0ZTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSwgZXJyb3IpIHtcclxuXHRcdFx0aWYgKHllYXIueWVhcikge1xyXG5cdFx0XHRcdGlmICh0aGlzLl92YWxpZGF0ZUxldmVsID09PSAwICYmIHRoaXMubmFtZSAhPT0geWVhci5jYWxlbmRhcigpLm5hbWUpIHtcclxuXHRcdFx0XHRcdHRocm93ICgkLmNhbGVuZGFycy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnMgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5kaWZmZXJlbnRDYWxlbmRhcnMpLlxyXG5cdFx0XHRcdFx0XHRyZXBsYWNlKC9cXHswXFx9LywgdGhpcy5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cXHsxXFx9LywgeWVhci5jYWxlbmRhcigpLmxvY2FsLm5hbWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4geWVhcjtcclxuXHRcdFx0fVxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKztcclxuXHRcdFx0XHRpZiAodGhpcy5fdmFsaWRhdGVMZXZlbCA9PT0gMSAmJiAhdGhpcy5pc1ZhbGlkKHllYXIsIG1vbnRoLCBkYXkpKSB7XHJcblx0XHRcdFx0XHR0aHJvdyBlcnJvci5yZXBsYWNlKC9cXHswXFx9LywgdGhpcy5sb2NhbC5uYW1lKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIGRhdGUgPSB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSk7XHJcblx0XHRcdFx0dGhpcy5fdmFsaWRhdGVMZXZlbC0tO1xyXG5cdFx0XHRcdHJldHVybiBkYXRlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNhdGNoIChlKSB7XHJcblx0XHRcdFx0dGhpcy5fdmFsaWRhdGVMZXZlbC0tO1xyXG5cdFx0XHRcdHRocm93IGU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0LyoqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBQcm9sZXB0aWMgR3JlZ29yaWFuIENhbGVuZGFyLlxyXG5cdFx0U2VlIDxhIGhyZWY9XCI6aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HcmVnb3JpYW5fY2FsZW5kYXJcIj5odHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dyZWdvcmlhbl9jYWxlbmRhcjwvYT5cclxuXHRcdGFuZCA8YSBocmVmPVwiaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qcm9sZXB0aWNfR3JlZ29yaWFuX2NhbGVuZGFyXCI+aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qcm9sZXB0aWNfR3JlZ29yaWFuX2NhbGVuZGFyPC9hPi5cclxuXHRcdEBjbGFzcyBHcmVnb3JpYW5DYWxlbmRhclxyXG5cdFx0QGF1Z21lbnRzIEJhc2VDYWxlbmRhclxyXG5cdFx0QHBhcmFtIFtsYW5ndWFnZT0nJ10ge3N0cmluZ30gVGhlIGxhbmd1YWdlIGNvZGUgKGRlZmF1bHQgRW5nbGlzaCkgZm9yIGxvY2FsaXNhdGlvbi4gKi9cclxuXHRmdW5jdGlvbiBHcmVnb3JpYW5DYWxlbmRhcihsYW5ndWFnZSkge1xyXG5cdFx0dGhpcy5sb2NhbCA9IHRoaXMucmVnaW9uYWxPcHRpb25zW2xhbmd1YWdlXSB8fCB0aGlzLnJlZ2lvbmFsT3B0aW9uc1snJ107XHJcblx0fVxyXG5cclxuXHRHcmVnb3JpYW5DYWxlbmRhci5wcm90b3R5cGUgPSBuZXcgQmFzZUNhbGVuZGFyO1xyXG5cclxuXHQkLmV4dGVuZChHcmVnb3JpYW5DYWxlbmRhci5wcm90b3R5cGUsIHtcclxuXHRcdC8qKiBUaGUgY2FsZW5kYXIgbmFtZS5cclxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyICovXHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdCAvKiogSnVsaWFuIGRhdGUgb2Ygc3RhcnQgb2YgR3JlZ29yaWFuIGVwb2NoOiAxIEphbnVhcnkgMDAwMSBDRS5cclxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyICovXHJcblx0XHRqZEVwb2NoOiAxNzIxNDI1LjUsXHJcblx0XHQgLyoqIERheXMgcGVyIG1vbnRoIGluIGEgY29tbW9uIHllYXIuXHJcblx0XHRcdEBtZW1iZXJvZiBHcmVnb3JpYW5DYWxlbmRhciAqL1xyXG5cdFx0ZGF5c1Blck1vbnRoOiBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0sXHJcblx0XHQgLyoqIDxjb2RlPnRydWU8L2NvZGU+IGlmIGhhcyBhIHllYXIgemVybywgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyICovXHJcblx0XHRoYXNZZWFyWmVybzogZmFsc2UsXHJcblx0XHQvKiogVGhlIG1pbmltdW0gbW9udGggbnVtYmVyLlxyXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXIgKi9cclxuXHRcdG1pbk1vbnRoOiAxLFxyXG5cdFx0LyoqIFRoZSBmaXJzdCBtb250aCBpbiB0aGUgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyICovXHJcblx0XHRmaXJzdE1vbnRoOiAxLFxyXG5cdFx0IC8qKiBUaGUgbWluaW11bSBkYXkgbnVtYmVyLlxyXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXIgKi9cclxuXHRcdG1pbkRheTogMSxcclxuXHJcblx0XHQvKiogTG9jYWxpc2F0aW9ucyBmb3IgdGhlIHBsdWdpbi5cclxuXHRcdFx0RW50cmllcyBhcmUgb2JqZWN0cyBpbmRleGVkIGJ5IHRoZSBsYW5ndWFnZSBjb2RlICgnJyBiZWluZyB0aGUgZGVmYXVsdCBVUy9FbmdsaXNoKS5cclxuXHRcdFx0RWFjaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcy5cclxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyXHJcblx0XHRcdEBwcm9wZXJ0eSBuYW1lIHtzdHJpbmd9IFRoZSBjYWxlbmRhciBuYW1lLlxyXG5cdFx0XHRAcHJvcGVydHkgZXBvY2hzIHtzdHJpbmdbXX0gVGhlIGVwb2NoIG5hbWVzLlxyXG5cdFx0XHRAcHJvcGVydHkgbW9udGhOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBtb250aHMgb2YgdGhlIHllYXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cclxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lc1Nob3J0IHtzdHJpbmdbXX0gVGhlIHNob3J0IG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNNaW4ge3N0cmluZ1tdfSBUaGUgbWluaW1hbCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cclxuXHRcdFx0QHByb3BlcnR5IGRhdGVGb3JtYXQge3N0cmluZ30gVGhlIGRhdGUgZm9ybWF0IGZvciB0aGlzIGNhbGVuZGFyLlxyXG5cdFx0XHRcdFx0U2VlIHRoZSBvcHRpb25zIG9uIDxhIGhyZWY9XCJCYXNlQ2FsZW5kYXIuaHRtbCNmb3JtYXREYXRlXCI+PGNvZGU+Zm9ybWF0RGF0ZTwvY29kZT48L2E+IGZvciBkZXRhaWxzLlxyXG5cdFx0XHRAcHJvcGVydHkgZmlyc3REYXkge251bWJlcn0gVGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBzdGFydGluZyBhdCAwLlxyXG5cdFx0XHRAcHJvcGVydHkgaXNSVEwge251bWJlcn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBsb2NhbGlzYXRpb24gcmVhZHMgcmlnaHQtdG8tbGVmdC4gKi9cclxuXHRcdHJlZ2lvbmFsT3B0aW9uczogeyAvLyBMb2NhbGlzYXRpb25zXHJcblx0XHRcdCcnOiB7XHJcblx0XHRcdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRcdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0XHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsXHJcblx0XHRcdFx0J0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10sXHJcblx0XHRcdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXHJcblx0XHRcdFx0ZGF5TmFtZXM6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXSxcclxuXHRcdFx0XHRkYXlOYW1lc1Nob3J0OiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxyXG5cdFx0XHRcdGRheU5hbWVzTWluOiBbJ1N1JywgJ01vJywgJ1R1JywgJ1dlJywgJ1RoJywgJ0ZyJywgJ1NhJ10sXHJcblx0XHRcdFx0ZGF0ZUZvcm1hdDogJ21tL2RkL3l5eXknLFxyXG5cdFx0XHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0XHRcdGlzUlRMOiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGluIGEgbGVhcCB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGlzIGEgbGVhcCB5ZWFyLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0bGVhcFllYXI6IGZ1bmN0aW9uKHllYXIpIHtcclxuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcclxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhciB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRZZWFyKTtcclxuXHRcdFx0dmFyIHllYXIgPSBkYXRlLnllYXIoKSArIChkYXRlLnllYXIoKSA8IDAgPyAxIDogMCk7IC8vIE5vIHllYXIgemVyb1xyXG5cdFx0XHRyZXR1cm4geWVhciAlIDQgPT09IDAgJiYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgdGhlIHdlZWsgb2YgdGhlIHllYXIgZm9yIGEgZGF0ZSAtIElTTyA4NjAxLlxyXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgd2VlayBvZiB0aGUgeWVhciwgc3RhcnRpbmcgZnJvbSAxLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0d2Vla09mWWVhcjogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHQvLyBGaW5kIFRodXJzZGF5IG9mIHRoaXMgd2VlayBzdGFydGluZyBvbiBNb25kYXlcclxuXHRcdFx0dmFyIGNoZWNrRGF0ZSA9IHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcclxuXHRcdFx0Y2hlY2tEYXRlLmFkZCg0IC0gKGNoZWNrRGF0ZS5kYXlPZldlZWsoKSB8fCA3KSwgJ2QnKTtcclxuXHRcdFx0cmV0dXJuIE1hdGguZmxvb3IoKGNoZWNrRGF0ZS5kYXlPZlllYXIoKSAtIDEpIC8gNykgKyAxO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgbW9udGguXHJcblx0XHRcdEBtZW1iZXJvZiBHcmVnb3JpYW5DYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIG9mIHRoZSBtb250aC5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIG1vbnRoLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgbW9udGgveWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZGF5c0luTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIHRoaXMubWluRGF5LFxyXG5cdFx0XHRcdCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRNb250aCB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRNb250aCk7XHJcblx0XHRcdHJldHVybiB0aGlzLmRheXNQZXJNb250aFtkYXRlLm1vbnRoKCkgLSAxXSArXHJcblx0XHRcdFx0KGRhdGUubW9udGgoKSA9PT0gMiAmJiB0aGlzLmxlYXBZZWFyKGRhdGUueWVhcigpKSA/IDEgOiAwKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBhIHdlZWsgZGF5LlxyXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYSB3ZWVrIGRheSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdHdlZWtEYXk6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcclxuXHRcdFx0cmV0dXJuICh0aGlzLmRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KSB8fCA3KSA8IDY7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgSnVsaWFuIGRhdGUgZXF1aXZhbGVudCBmb3IgdGhpcyBkYXRlLFxyXG5cdFx0XHRpLmUuIGRheXMgc2luY2UgSmFudWFyeSAxLCA0NzEzIEJDRSBHcmVlbndpY2ggbm9vbi5cclxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvbnZlcnQgb3IgdGhlIHllYXIgdG8gY29udmVydC5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGNvbnZlcnQuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGNvbnZlcnQuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGVxdWl2YWxlbnQgSnVsaWFuIGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR0b0pEOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSxcclxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcclxuXHRcdFx0eWVhciA9IGRhdGUueWVhcigpO1xyXG5cdFx0XHRtb250aCA9IGRhdGUubW9udGgoKTtcclxuXHRcdFx0ZGF5ID0gZGF0ZS5kYXkoKTtcclxuXHRcdFx0aWYgKHllYXIgPCAwKSB7IHllYXIrKzsgfSAvLyBObyB5ZWFyIHplcm9cclxuXHRcdFx0Ly8gSmVhbiBNZWV1cyBhbGdvcml0aG0sIFwiQXN0cm9ub21pY2FsIEFsZ29yaXRobXNcIiwgMTk5MVxyXG5cdFx0XHRpZiAobW9udGggPCAzKSB7XHJcblx0XHRcdFx0bW9udGggKz0gMTI7XHJcblx0XHRcdFx0eWVhci0tO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBhID0gTWF0aC5mbG9vcih5ZWFyIC8gMTAwKTtcclxuXHRcdFx0dmFyIGIgPSAyIC0gYSArIE1hdGguZmxvb3IoYSAvIDQpO1xyXG5cdFx0XHRyZXR1cm4gTWF0aC5mbG9vcigzNjUuMjUgKiAoeWVhciArIDQ3MTYpKSArXHJcblx0XHRcdFx0TWF0aC5mbG9vcigzMC42MDAxICogKG1vbnRoICsgMSkpICsgZGF5ICsgYiAtIDE1MjQuNTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIGZyb20gYSBKdWxpYW4gZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSBqZCB7bnVtYmVyfSBUaGUgSnVsaWFuIGRhdGUgdG8gY29udmVydC5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXHJcblx0XHRmcm9tSkQ6IGZ1bmN0aW9uKGpkKSB7XHJcblx0XHRcdC8vIEplYW4gTWVldXMgYWxnb3JpdGhtLCBcIkFzdHJvbm9taWNhbCBBbGdvcml0aG1zXCIsIDE5OTFcclxuXHRcdFx0dmFyIHogPSBNYXRoLmZsb29yKGpkICsgMC41KTtcclxuXHRcdFx0dmFyIGEgPSBNYXRoLmZsb29yKCh6IC0gMTg2NzIxNi4yNSkgLyAzNjUyNC4yNSk7XHJcblx0XHRcdGEgPSB6ICsgMSArIGEgLSBNYXRoLmZsb29yKGEgLyA0KTtcclxuXHRcdFx0dmFyIGIgPSBhICsgMTUyNDtcclxuXHRcdFx0dmFyIGMgPSBNYXRoLmZsb29yKChiIC0gMTIyLjEpIC8gMzY1LjI1KTtcclxuXHRcdFx0dmFyIGQgPSBNYXRoLmZsb29yKDM2NS4yNSAqIGMpO1xyXG5cdFx0XHR2YXIgZSA9IE1hdGguZmxvb3IoKGIgLSBkKSAvIDMwLjYwMDEpO1xyXG5cdFx0XHR2YXIgZGF5ID0gYiAtIGQgLSBNYXRoLmZsb29yKGUgKiAzMC42MDAxKTtcclxuXHRcdFx0dmFyIG1vbnRoID0gZSAtIChlID4gMTMuNSA/IDEzIDogMSk7XHJcblx0XHRcdHZhciB5ZWFyID0gYyAtIChtb250aCA+IDIuNSA/IDQ3MTYgOiA0NzE1KTtcclxuXHRcdFx0aWYgKHllYXIgPD0gMCkgeyB5ZWFyLS07IH0gLy8gTm8geWVhciB6ZXJvXHJcblx0XHRcdHJldHVybiB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDb252ZXJ0IHRoaXMgZGF0ZSB0byBhIHN0YW5kYXJkIChHcmVnb3JpYW4pIEphdmFTY3JpcHQgRGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvbnZlcnQgb3IgdGhlIHllYXIgdG8gY29udmVydC5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGNvbnZlcnQuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGNvbnZlcnQuXHJcblx0XHRcdEByZXR1cm4ge0RhdGV9IFRoZSBlcXVpdmFsZW50IEphdmFTY3JpcHQgZGF0ZS5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdHRvSlNEYXRlOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSxcclxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcclxuXHRcdFx0dmFyIGpzZCA9IG5ldyBEYXRlKGRhdGUueWVhcigpLCBkYXRlLm1vbnRoKCkgLSAxLCBkYXRlLmRheSgpKTtcclxuXHRcdFx0anNkLnNldEhvdXJzKDApO1xyXG5cdFx0XHRqc2Quc2V0TWludXRlcygwKTtcclxuXHRcdFx0anNkLnNldFNlY29uZHMoMCk7XHJcblx0XHRcdGpzZC5zZXRNaWxsaXNlY29uZHMoMCk7XHJcblx0XHRcdC8vIEhvdXJzIG1heSBiZSBub24temVybyBvbiBkYXlsaWdodCBzYXZpbmcgY3V0LW92ZXI6XHJcblx0XHRcdC8vID4gMTIgd2hlbiBtaWRuaWdodCBjaGFuZ2VvdmVyLCBidXQgdGhlbiBjYW5ub3QgZ2VuZXJhdGVcclxuXHRcdFx0Ly8gbWlkbmlnaHQgZGF0ZXRpbWUsIHNvIGp1bXAgdG8gMUFNLCBvdGhlcndpc2UgcmVzZXQuXHJcblx0XHRcdGpzZC5zZXRIb3Vycyhqc2QuZ2V0SG91cnMoKSA+IDEyID8ganNkLmdldEhvdXJzKCkgKyAyIDogMCk7XHJcblx0XHRcdHJldHVybiBqc2Q7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDcmVhdGUgYSBuZXcgZGF0ZSBmcm9tIGEgc3RhbmRhcmQgKEdyZWdvcmlhbikgSmF2YVNjcmlwdCBEYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIGpzZCB7RGF0ZX0gVGhlIEphdmFTY3JpcHQgZGF0ZSB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIGVxdWl2YWxlbnQgZGF0ZS4gKi9cclxuXHRcdGZyb21KU0RhdGU6IGZ1bmN0aW9uKGpzZCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5uZXdEYXRlKGpzZC5nZXRGdWxsWWVhcigpLCBqc2QuZ2V0TW9udGgoKSArIDEsIGpzZC5nZXREYXRlKCkpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHQvLyBTaW5nbGV0b24gbWFuYWdlclxyXG5cdCQuY2FsZW5kYXJzID0gbmV3IENhbGVuZGFycygpO1xyXG5cclxuXHQvLyBEYXRlIHRlbXBsYXRlXHJcblx0JC5jYWxlbmRhcnMuY2RhdGUgPSBDRGF0ZTtcclxuXHJcblx0Ly8gQmFzZSBjYWxlbmRhciB0ZW1wbGF0ZVxyXG5cdCQuY2FsZW5kYXJzLmJhc2VDYWxlbmRhciA9IEJhc2VDYWxlbmRhcjtcclxuXHJcblx0Ly8gR3JlZ29yaWFuIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uXHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbiA9IEdyZWdvcmlhbkNhbGVuZGFyO1xyXG5cclxufSkoalF1ZXJ5KTtcclxuLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBDYWxlbmRhcnMgZXh0cmFzIGZvciBqUXVlcnkgdjIuMC4xLlxyXG4gICBXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpIEF1Z3VzdCAyMDA5LlxyXG4gICBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCAoaHR0cDovL2tlaXRoLXdvb2QubmFtZS9saWNlbmNlLmh0bWwpIGxpY2Vuc2UuIFxyXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cclxuXHJcbihmdW5jdGlvbigkKSB7IC8vIEhpZGUgc2NvcGUsIG5vICQgY29uZmxpY3RcclxuXHJcblx0JC5leHRlbmQoJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXSwge1xyXG5cdFx0aW52YWxpZEFyZ3VtZW50czogJ0ludmFsaWQgYXJndW1lbnRzJyxcclxuXHRcdGludmFsaWRGb3JtYXQ6ICdDYW5ub3QgZm9ybWF0IGEgZGF0ZSBmcm9tIGFub3RoZXIgY2FsZW5kYXInLFxyXG5cdFx0bWlzc2luZ051bWJlckF0OiAnTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gezB9JyxcclxuXHRcdHVua25vd25OYW1lQXQ6ICdVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gezB9JyxcclxuXHRcdHVuZXhwZWN0ZWRMaXRlcmFsQXQ6ICdVbmV4cGVjdGVkIGxpdGVyYWwgYXQgcG9zaXRpb24gezB9JyxcclxuXHRcdHVuZXhwZWN0ZWRUZXh0OiAnQWRkaXRpb25hbCB0ZXh0IGZvdW5kIGF0IGVuZCdcclxuXHR9KTtcclxuXHQkLmNhbGVuZGFycy5sb2NhbCA9ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ107XHJcblxyXG5cdCQuZXh0ZW5kKCQuY2FsZW5kYXJzLmNkYXRlLnByb3RvdHlwZSwge1xyXG5cclxuXHRcdC8qKiBGb3JtYXQgdGhpcyBkYXRlLlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcGFyYW0gW2Zvcm1hdF0ge3N0cmluZ30gVGhlIGRhdGUgZm9ybWF0IHRvIHVzZSAoc2VlIDxhIGhyZWY9XCJCYXNlQ2FsZW5kYXIuaHRtbCNmb3JtYXREYXRlXCI+PGNvZGU+Zm9ybWF0RGF0ZTwvY29kZT48L2E+KS5cclxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGRhdGUuICovXHJcblx0XHRmb3JtYXREYXRlOiBmdW5jdGlvbihmb3JtYXQpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZvcm1hdERhdGUoZm9ybWF0IHx8ICcnLCB0aGlzKTtcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0JC5leHRlbmQoJC5jYWxlbmRhcnMuYmFzZUNhbGVuZGFyLnByb3RvdHlwZSwge1xyXG5cclxuXHRcdFVOSVhfRVBPQ0g6ICQuY2FsZW5kYXJzLmluc3RhbmNlKCkubmV3RGF0ZSgxOTcwLCAxLCAxKS50b0pEKCksXHJcblx0XHRTRUNTX1BFUl9EQVk6IDI0ICogNjAgKiA2MCxcclxuXHRcdFRJQ0tTX0VQT0NIOiAkLmNhbGVuZGFycy5pbnN0YW5jZSgpLmpkRXBvY2gsIC8vIDEgSmFudWFyeSAwMDAxIENFXHJcblx0XHRUSUNLU19QRVJfREFZOiAyNCAqIDYwICogNjAgKiAxMDAwMDAwMCxcclxuXHJcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBBVE9NIChSRkMgMzMzOS9JU08gODYwMSkuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xyXG5cdFx0QVRPTTogJ3l5eXktbW0tZGQnLFxyXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgY29va2llcy5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXHJcblx0XHRDT09LSUU6ICdELCBkZCBNIHl5eXknLFxyXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgZnVsbCBkYXRlLlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXIgKi9cclxuXHRcdEZVTEw6ICdERCwgTU0gZCwgeXl5eScsXHJcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBJU08gODYwMS5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXHJcblx0XHRJU09fODYwMTogJ3l5eXktbW0tZGQnLFxyXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgSnVsaWFuIGRhdGUuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xyXG5cdFx0SlVMSUFOOiAnSicsXHJcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBSRkMgODIyLlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXIgKi9cclxuXHRcdFJGQ184MjI6ICdELCBkIE0geXknLFxyXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgUkZDIDg1MC5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXHJcblx0XHRSRkNfODUwOiAnREQsIGRkLU0teXknLFxyXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgUkZDIDEwMzYuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xyXG5cdFx0UkZDXzEwMzY6ICdELCBkIE0geXknLFxyXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgUkZDIDExMjMuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xyXG5cdFx0UkZDXzExMjM6ICdELCBkIE0geXl5eScsXHJcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBSRkMgMjgyMi5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXHJcblx0XHRSRkNfMjgyMjogJ0QsIGQgTSB5eXl5JyxcclxuXHRcdC8qKiBEYXRlIGZvcm0gZm9yIFJTUyAoUkZDIDgyMikuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xyXG5cdFx0UlNTOiAnRCwgZCBNIHl5JyxcclxuXHRcdC8qKiBEYXRlIGZvcm0gZm9yIFdpbmRvd3MgdGlja3MuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xyXG5cdFx0VElDS1M6ICchJyxcclxuXHRcdC8qKiBEYXRlIGZvcm0gZm9yIFVuaXggdGltZXN0YW1wLlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXIgKi9cclxuXHRcdFRJTUVTVEFNUDogJ0AnLFxyXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgVzNjIChJU08gODYwMSkuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xyXG5cdFx0VzNDOiAneXl5eS1tbS1kZCcsXHJcblxyXG5cdFx0LyoqIEZvcm1hdCBhIGRhdGUgb2JqZWN0IGludG8gYSBzdHJpbmcgdmFsdWUuXHJcblx0XHRcdFRoZSBmb3JtYXQgY2FuIGJlIGNvbWJpbmF0aW9ucyBvZiB0aGUgZm9sbG93aW5nOlxyXG5cdFx0XHQ8dWw+XHJcblx0XHRcdDxsaT5kICAtIGRheSBvZiBtb250aCAobm8gbGVhZGluZyB6ZXJvKTwvbGk+XHJcblx0XHRcdDxsaT5kZCAtIGRheSBvZiBtb250aCAodHdvIGRpZ2l0KTwvbGk+XHJcblx0XHRcdDxsaT5vICAtIGRheSBvZiB5ZWFyIChubyBsZWFkaW5nIHplcm9zKTwvbGk+XHJcblx0XHRcdDxsaT5vbyAtIGRheSBvZiB5ZWFyICh0aHJlZSBkaWdpdCk8L2xpPlxyXG5cdFx0XHQ8bGk+RCAgLSBkYXkgbmFtZSBzaG9ydDwvbGk+XHJcblx0XHRcdDxsaT5ERCAtIGRheSBuYW1lIGxvbmc8L2xpPlxyXG5cdFx0XHQ8bGk+dyAgLSB3ZWVrIG9mIHllYXIgKG5vIGxlYWRpbmcgemVybyk8L2xpPlxyXG5cdFx0XHQ8bGk+d3cgLSB3ZWVrIG9mIHllYXIgKHR3byBkaWdpdCk8L2xpPlxyXG5cdFx0XHQ8bGk+bSAgLSBtb250aCBvZiB5ZWFyIChubyBsZWFkaW5nIHplcm8pPC9saT5cclxuXHRcdFx0PGxpPm1tIC0gbW9udGggb2YgeWVhciAodHdvIGRpZ2l0KTwvbGk+XHJcblx0XHRcdDxsaT5NICAtIG1vbnRoIG5hbWUgc2hvcnQ8L2xpPlxyXG5cdFx0XHQ8bGk+TU0gLSBtb250aCBuYW1lIGxvbmc8L2xpPlxyXG5cdFx0XHQ8bGk+eXkgLSB5ZWFyICh0d28gZGlnaXQpPC9saT5cclxuXHRcdFx0PGxpPnl5eXkgLSB5ZWFyIChmb3VyIGRpZ2l0KTwvbGk+XHJcblx0XHRcdDxsaT5ZWVlZIC0gZm9ybWF0dGVkIHllYXI8L2xpPlxyXG5cdFx0XHQ8bGk+SiAgLSBKdWxpYW4gZGF0ZSAoZGF5cyBzaW5jZSBKYW51YXJ5IDEsIDQ3MTMgQkNFIEdyZWVud2ljaCBub29uKTwvbGk+XHJcblx0XHRcdDxsaT5AICAtIFVuaXggdGltZXN0YW1wIChzIHNpbmNlIDAxLzAxLzE5NzApPC9saT5cclxuXHRcdFx0PGxpPiEgIC0gV2luZG93cyB0aWNrcyAoMTAwbnMgc2luY2UgMDEvMDEvMDAwMSk8L2xpPlxyXG5cdFx0XHQ8bGk+Jy4uLicgLSBsaXRlcmFsIHRleHQ8L2xpPlxyXG5cdFx0XHQ8bGk+JycgLSBzaW5nbGUgcXVvdGU8L2xpPlxyXG5cdFx0XHQ8L3VsPlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIFtmb3JtYXRdIHtzdHJpbmd9IFRoZSBkZXNpcmVkIGZvcm1hdCBvZiB0aGUgZGF0ZSAoZGVmYXVsdHMgdG8gY2FsZW5kYXIgZm9ybWF0KS5cclxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgZGF0ZSB2YWx1ZSB0byBmb3JtYXQuXHJcblx0XHRcdEBwYXJhbSBbc2V0dGluZ3NdIHtvYmplY3R9IEFkZGl0aW9uIG9wdGlvbnMsIHdob3NlIGF0dHJpYnV0ZXMgaW5jbHVkZTpcclxuXHRcdFx0QHByb3BlcnR5IFtkYXlOYW1lc1Nob3J0XSB7c3RyaW5nW119IEFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5LlxyXG5cdFx0XHRAcHJvcGVydHkgW2RheU5hbWVzXSB7c3RyaW5nW119IE5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5LlxyXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoTmFtZXNTaG9ydF0ge3N0cmluZ1tdfSBBYmJyZXZpYXRlZCBuYW1lcyBvZiB0aGUgbW9udGhzLlxyXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoTmFtZXNdIHtzdHJpbmdbXX0gTmFtZXMgb2YgdGhlIG1vbnRocy5cclxuXHRcdFx0QHByb3BlcnR5IFtjYWxjdWxhdGVXZWVrXSB7Q2FsZW5kYXJzUGlja2VyQ2FsY3VsYXRlV2Vla30gRnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdlZWsgb2YgdGhlIHllYXIuXHJcblx0XHRcdEByZXR1cm4ge3N0cmluZ30gVGhlIGRhdGUgaW4gdGhlIGFib3ZlIGZvcm1hdC5cclxuXHRcdFx0QHRocm93cyBFcnJvcnMgaWYgdGhlIGRhdGUgaXMgZnJvbSBhIGRpZmZlcmVudCBjYWxlbmRhci4gKi9cclxuXHRcdGZvcm1hdERhdGU6IGZ1bmN0aW9uKGZvcm1hdCwgZGF0ZSwgc2V0dGluZ3MpIHtcclxuXHRcdFx0aWYgKHR5cGVvZiBmb3JtYXQgIT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdFx0c2V0dGluZ3MgPSBkYXRlO1xyXG5cdFx0XHRcdGRhdGUgPSBmb3JtYXQ7XHJcblx0XHRcdFx0Zm9ybWF0ID0gJyc7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCFkYXRlKSB7XHJcblx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChkYXRlLmNhbGVuZGFyKCkgIT09IHRoaXMpIHtcclxuXHRcdFx0XHR0aHJvdyAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRm9ybWF0IHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZEZvcm1hdDtcclxuXHRcdFx0fVxyXG5cdFx0XHRmb3JtYXQgPSBmb3JtYXQgfHwgdGhpcy5sb2NhbC5kYXRlRm9ybWF0O1xyXG5cdFx0XHRzZXR0aW5ncyA9IHNldHRpbmdzIHx8IHt9O1xyXG5cdFx0XHR2YXIgZGF5TmFtZXNTaG9ydCA9IHNldHRpbmdzLmRheU5hbWVzU2hvcnQgfHwgdGhpcy5sb2NhbC5kYXlOYW1lc1Nob3J0O1xyXG5cdFx0XHR2YXIgZGF5TmFtZXMgPSBzZXR0aW5ncy5kYXlOYW1lcyB8fCB0aGlzLmxvY2FsLmRheU5hbWVzO1xyXG5cdFx0XHR2YXIgbW9udGhOYW1lc1Nob3J0ID0gc2V0dGluZ3MubW9udGhOYW1lc1Nob3J0IHx8IHRoaXMubG9jYWwubW9udGhOYW1lc1Nob3J0O1xyXG5cdFx0XHR2YXIgbW9udGhOYW1lcyA9IHNldHRpbmdzLm1vbnRoTmFtZXMgfHwgdGhpcy5sb2NhbC5tb250aE5hbWVzO1xyXG5cdFx0XHR2YXIgY2FsY3VsYXRlV2VlayA9IHNldHRpbmdzLmNhbGN1bGF0ZVdlZWsgfHwgdGhpcy5sb2NhbC5jYWxjdWxhdGVXZWVrO1xyXG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIGEgZm9ybWF0IGNoYXJhY3RlciBpcyBkb3VibGVkXHJcblx0XHRcdHZhciBkb3VibGVkID0gZnVuY3Rpb24obWF0Y2gsIHN0ZXApIHtcclxuXHRcdFx0XHR2YXIgbWF0Y2hlcyA9IDE7XHJcblx0XHRcdFx0d2hpbGUgKGlGb3JtYXQgKyBtYXRjaGVzIDwgZm9ybWF0Lmxlbmd0aCAmJiBmb3JtYXQuY2hhckF0KGlGb3JtYXQgKyBtYXRjaGVzKSA9PT0gbWF0Y2gpIHtcclxuXHRcdFx0XHRcdG1hdGNoZXMrKztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aUZvcm1hdCArPSBtYXRjaGVzIC0gMTtcclxuXHRcdFx0XHRyZXR1cm4gTWF0aC5mbG9vcihtYXRjaGVzIC8gKHN0ZXAgfHwgMSkpID4gMTtcclxuXHRcdFx0fTtcclxuXHRcdFx0Ly8gRm9ybWF0IGEgbnVtYmVyLCB3aXRoIGxlYWRpbmcgemVyb2VzIGlmIG5lY2Vzc2FyeVxyXG5cdFx0XHR2YXIgZm9ybWF0TnVtYmVyID0gZnVuY3Rpb24obWF0Y2gsIHZhbHVlLCBsZW4sIHN0ZXApIHtcclxuXHRcdFx0XHR2YXIgbnVtID0gJycgKyB2YWx1ZTtcclxuXHRcdFx0XHRpZiAoZG91YmxlZChtYXRjaCwgc3RlcCkpIHtcclxuXHRcdFx0XHRcdHdoaWxlIChudW0ubGVuZ3RoIDwgbGVuKSB7XHJcblx0XHRcdFx0XHRcdG51bSA9ICcwJyArIG51bTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIG51bTtcclxuXHRcdFx0fTtcclxuXHRcdFx0Ly8gRm9ybWF0IGEgbmFtZSwgc2hvcnQgb3IgbG9uZyBhcyByZXF1ZXN0ZWRcclxuXHRcdFx0dmFyIGZvcm1hdE5hbWUgPSBmdW5jdGlvbihtYXRjaCwgdmFsdWUsIHNob3J0TmFtZXMsIGxvbmdOYW1lcykge1xyXG5cdFx0XHRcdHJldHVybiAoZG91YmxlZChtYXRjaCkgPyBsb25nTmFtZXNbdmFsdWVdIDogc2hvcnROYW1lc1t2YWx1ZV0pO1xyXG5cdFx0XHR9O1xyXG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XHJcblx0XHRcdHZhciBsaXRlcmFsID0gZmFsc2U7XHJcblx0XHRcdGZvciAodmFyIGlGb3JtYXQgPSAwOyBpRm9ybWF0IDwgZm9ybWF0Lmxlbmd0aDsgaUZvcm1hdCsrKSB7XHJcblx0XHRcdFx0aWYgKGxpdGVyYWwpIHtcclxuXHRcdFx0XHRcdGlmIChmb3JtYXQuY2hhckF0KGlGb3JtYXQpID09PSBcIidcIiAmJiAhZG91YmxlZChcIidcIikpIHtcclxuXHRcdFx0XHRcdFx0bGl0ZXJhbCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdG91dHB1dCArPSBmb3JtYXQuY2hhckF0KGlGb3JtYXQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdHN3aXRjaCAoZm9ybWF0LmNoYXJBdChpRm9ybWF0KSkge1xyXG5cdFx0XHRcdFx0XHRjYXNlICdkJzogb3V0cHV0ICs9IGZvcm1hdE51bWJlcignZCcsIGRhdGUuZGF5KCksIDIpOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAnRCc6IG91dHB1dCArPSBmb3JtYXROYW1lKCdEJywgZGF0ZS5kYXlPZldlZWsoKSxcclxuXHRcdFx0XHRcdFx0XHRkYXlOYW1lc1Nob3J0LCBkYXlOYW1lcyk7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdvJzogb3V0cHV0ICs9IGZvcm1hdE51bWJlcignbycsIGRhdGUuZGF5T2ZZZWFyKCksIDMpOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAndyc6IG91dHB1dCArPSBmb3JtYXROdW1iZXIoJ3cnLCBkYXRlLndlZWtPZlllYXIoKSwgMik7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdtJzogb3V0cHV0ICs9IGZvcm1hdE51bWJlcignbScsIGRhdGUubW9udGgoKSwgMik7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdNJzogb3V0cHV0ICs9IGZvcm1hdE5hbWUoJ00nLCBkYXRlLm1vbnRoKCkgLSB0aGlzLm1pbk1vbnRoLFxyXG5cdFx0XHRcdFx0XHRcdG1vbnRoTmFtZXNTaG9ydCwgbW9udGhOYW1lcyk7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICd5JzpcclxuXHRcdFx0XHRcdFx0XHRvdXRwdXQgKz0gKGRvdWJsZWQoJ3knLCAyKSA/IGRhdGUueWVhcigpIDpcclxuXHRcdFx0XHRcdFx0XHRcdChkYXRlLnllYXIoKSAlIDEwMCA8IDEwID8gJzAnIDogJycpICsgZGF0ZS55ZWFyKCkgJSAxMDApO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdZJzpcclxuXHRcdFx0XHRcdFx0XHRkb3VibGVkKCdZJywgMik7XHJcblx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IGRhdGUuZm9ybWF0WWVhcigpO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdKJzogb3V0cHV0ICs9IGRhdGUudG9KRCgpOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAnQCc6IG91dHB1dCArPSAoZGF0ZS50b0pEKCkgLSB0aGlzLlVOSVhfRVBPQ0gpICogdGhpcy5TRUNTX1BFUl9EQVk7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICchJzogb3V0cHV0ICs9IChkYXRlLnRvSkQoKSAtIHRoaXMuVElDS1NfRVBPQ0gpICogdGhpcy5USUNLU19QRVJfREFZOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSBcIidcIjpcclxuXHRcdFx0XHRcdFx0XHRpZiAoZG91YmxlZChcIidcIikpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG91dHB1dCArPSBcIidcIjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRsaXRlcmFsID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IGZvcm1hdC5jaGFyQXQoaUZvcm1hdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBvdXRwdXQ7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBQYXJzZSBhIHN0cmluZyB2YWx1ZSBpbnRvIGEgZGF0ZSBvYmplY3QuXHJcblx0XHRcdFNlZSA8YSBocmVmPVwiI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4gZm9yIHRoZSBwb3NzaWJsZSBmb3JtYXRzLCBwbHVzOlxyXG5cdFx0XHQ8dWw+XHJcblx0XHRcdDxsaT4qIC0gaWdub3JlIHJlc3Qgb2Ygc3RyaW5nPC9saT5cclxuXHRcdFx0PC91bD5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSBmb3JtYXQge3N0cmluZ30gVGhlIGV4cGVjdGVkIGZvcm1hdCBvZiB0aGUgZGF0ZSAoJycgZm9yIGRlZmF1bHQgY2FsZW5kYXIgZm9ybWF0KS5cclxuXHRcdFx0QHBhcmFtIHZhbHVlIHtzdHJpbmd9IFRoZSBkYXRlIGluIHRoZSBhYm92ZSBmb3JtYXQuXHJcblx0XHRcdEBwYXJhbSBbc2V0dGluZ3NdIHtvYmplY3R9IEFkZGl0aW9uYWwgb3B0aW9ucyB3aG9zZSBhdHRyaWJ1dGVzIGluY2x1ZGU6XHJcblx0XHRcdEBwcm9wZXJ0eSBbc2hvcnRZZWFyQ3V0b2ZmXSB7bnVtYmVyfSBUaGUgY3V0b2ZmIHllYXIgZm9yIGRldGVybWluaW5nIHRoZSBjZW50dXJ5LlxyXG5cdFx0XHRAcHJvcGVydHkgW2RheU5hbWVzU2hvcnRdIHtzdHJpbmdbXX0gQWJicmV2aWF0ZWQgbmFtZXMgb2YgdGhlIGRheXMgZnJvbSBTdW5kYXkuXHJcblx0XHRcdEBwcm9wZXJ0eSBbZGF5TmFtZXNdIHtzdHJpbmdbXX0gTmFtZXMgb2YgdGhlIGRheXMgZnJvbSBTdW5kYXkuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhOYW1lc1Nob3J0XSB7c3RyaW5nW119IEFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBtb250aHMuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhOYW1lc10ge3N0cmluZ1tdfSBOYW1lcyBvZiB0aGUgbW9udGhzLlxyXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIGV4dHJhY3RlZCBkYXRlIHZhbHVlIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIHZhbHVlIGlzIGJsYW5rLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9ycyBpZiB0aGUgZm9ybWF0IGFuZC9vciB2YWx1ZSBhcmUgbWlzc2luZyxcclxuXHRcdFx0XHRcdGlmIHRoZSB2YWx1ZSBkb2Vzbid0IG1hdGNoIHRoZSBmb3JtYXQsIG9yIGlmIHRoZSBkYXRlIGlzIGludmFsaWQuICovXHJcblx0XHRwYXJzZURhdGU6IGZ1bmN0aW9uKGZvcm1hdCwgdmFsdWUsIHNldHRpbmdzKSB7XHJcblx0XHRcdGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcblx0XHRcdFx0dGhyb3cgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZEFyZ3VtZW50cyB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRBcmd1bWVudHM7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFsdWUgPSAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlLnRvU3RyaW5nKCkgOiB2YWx1ZSArICcnKTtcclxuXHRcdFx0aWYgKHZhbHVlID09PSAnJykge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvcm1hdCA9IGZvcm1hdCB8fCB0aGlzLmxvY2FsLmRhdGVGb3JtYXQ7XHJcblx0XHRcdHNldHRpbmdzID0gc2V0dGluZ3MgfHwge307XHJcblx0XHRcdHZhciBzaG9ydFllYXJDdXRvZmYgPSBzZXR0aW5ncy5zaG9ydFllYXJDdXRvZmYgfHwgdGhpcy5zaG9ydFllYXJDdXRvZmY7XHJcblx0XHRcdHNob3J0WWVhckN1dG9mZiA9ICh0eXBlb2Ygc2hvcnRZZWFyQ3V0b2ZmICE9PSAnc3RyaW5nJyA/IHNob3J0WWVhckN1dG9mZiA6XHJcblx0XHRcdFx0dGhpcy50b2RheSgpLnllYXIoKSAlIDEwMCArIHBhcnNlSW50KHNob3J0WWVhckN1dG9mZiwgMTApKTtcclxuXHRcdFx0dmFyIGRheU5hbWVzU2hvcnQgPSBzZXR0aW5ncy5kYXlOYW1lc1Nob3J0IHx8IHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydDtcclxuXHRcdFx0dmFyIGRheU5hbWVzID0gc2V0dGluZ3MuZGF5TmFtZXMgfHwgdGhpcy5sb2NhbC5kYXlOYW1lcztcclxuXHRcdFx0dmFyIG1vbnRoTmFtZXNTaG9ydCA9IHNldHRpbmdzLm1vbnRoTmFtZXNTaG9ydCB8fCB0aGlzLmxvY2FsLm1vbnRoTmFtZXNTaG9ydDtcclxuXHRcdFx0dmFyIG1vbnRoTmFtZXMgPSBzZXR0aW5ncy5tb250aE5hbWVzIHx8IHRoaXMubG9jYWwubW9udGhOYW1lcztcclxuXHRcdFx0dmFyIGpkID0gLTE7XHJcblx0XHRcdHZhciB5ZWFyID0gLTE7XHJcblx0XHRcdHZhciBtb250aCA9IC0xO1xyXG5cdFx0XHR2YXIgZGF5ID0gLTE7XHJcblx0XHRcdHZhciBkb3kgPSAtMTtcclxuXHRcdFx0dmFyIHNob3J0WWVhciA9IGZhbHNlO1xyXG5cdFx0XHR2YXIgbGl0ZXJhbCA9IGZhbHNlO1xyXG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIGEgZm9ybWF0IGNoYXJhY3RlciBpcyBkb3VibGVkXHJcblx0XHRcdHZhciBkb3VibGVkID0gZnVuY3Rpb24obWF0Y2gsIHN0ZXApIHtcclxuXHRcdFx0XHR2YXIgbWF0Y2hlcyA9IDE7XHJcblx0XHRcdFx0d2hpbGUgKGlGb3JtYXQgKyBtYXRjaGVzIDwgZm9ybWF0Lmxlbmd0aCAmJiBmb3JtYXQuY2hhckF0KGlGb3JtYXQgKyBtYXRjaGVzKSA9PT0gbWF0Y2gpIHtcclxuXHRcdFx0XHRcdG1hdGNoZXMrKztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aUZvcm1hdCArPSBtYXRjaGVzIC0gMTtcclxuXHRcdFx0XHRyZXR1cm4gTWF0aC5mbG9vcihtYXRjaGVzIC8gKHN0ZXAgfHwgMSkpID4gMTtcclxuXHRcdFx0fTtcclxuXHRcdFx0Ly8gRXh0cmFjdCBhIG51bWJlciBmcm9tIHRoZSBzdHJpbmcgdmFsdWVcclxuXHRcdFx0dmFyIGdldE51bWJlciA9IGZ1bmN0aW9uKG1hdGNoLCBzdGVwKSB7XHJcblx0XHRcdFx0dmFyIGlzRG91YmxlZCA9IGRvdWJsZWQobWF0Y2gsIHN0ZXApO1xyXG5cdFx0XHRcdHZhciBzaXplID0gWzIsIDMsIGlzRG91YmxlZCA/IDQgOiAyLCBpc0RvdWJsZWQgPyA0IDogMiwgMTAsIDExLCAyMF1bJ295WUpAIScuaW5kZXhPZihtYXRjaCkgKyAxXTtcclxuXHRcdFx0XHR2YXIgZGlnaXRzID0gbmV3IFJlZ0V4cCgnXi0/XFxcXGR7MSwnICsgc2l6ZSArICd9Jyk7XHJcblx0XHRcdFx0dmFyIG51bSA9IHZhbHVlLnN1YnN0cmluZyhpVmFsdWUpLm1hdGNoKGRpZ2l0cyk7XHJcblx0XHRcdFx0aWYgKCFudW0pIHtcclxuXHRcdFx0XHRcdHRocm93ICgkLmNhbGVuZGFycy5sb2NhbC5taXNzaW5nTnVtYmVyQXQgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5taXNzaW5nTnVtYmVyQXQpLlxyXG5cdFx0XHRcdFx0XHRyZXBsYWNlKC9cXHswXFx9LywgaVZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aVZhbHVlICs9IG51bVswXS5sZW5ndGg7XHJcblx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KG51bVswXSwgMTApO1xyXG5cdFx0XHR9O1xyXG5cdFx0XHQvLyBFeHRyYWN0IGEgbmFtZSBmcm9tIHRoZSBzdHJpbmcgdmFsdWUgYW5kIGNvbnZlcnQgdG8gYW4gaW5kZXhcclxuXHRcdFx0dmFyIGNhbGVuZGFyID0gdGhpcztcclxuXHRcdFx0dmFyIGdldE5hbWUgPSBmdW5jdGlvbihtYXRjaCwgc2hvcnROYW1lcywgbG9uZ05hbWVzLCBzdGVwKSB7XHJcblx0XHRcdFx0dmFyIG5hbWVzID0gKGRvdWJsZWQobWF0Y2gsIHN0ZXApID8gbG9uZ05hbWVzIDogc2hvcnROYW1lcyk7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0aWYgKHZhbHVlLnN1YnN0cihpVmFsdWUsIG5hbWVzW2ldLmxlbmd0aCkudG9Mb3dlckNhc2UoKSA9PT0gbmFtZXNbaV0udG9Mb3dlckNhc2UoKSkge1xyXG5cdFx0XHRcdFx0XHRpVmFsdWUgKz0gbmFtZXNbaV0ubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gaSArIGNhbGVuZGFyLm1pbk1vbnRoO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aHJvdyAoJC5jYWxlbmRhcnMubG9jYWwudW5rbm93bk5hbWVBdCB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLnVua25vd25OYW1lQXQpLlxyXG5cdFx0XHRcdFx0cmVwbGFjZSgvXFx7MFxcfS8sIGlWYWx1ZSk7XHJcblx0XHRcdH07XHJcblx0XHRcdC8vIENvbmZpcm0gdGhhdCBhIGxpdGVyYWwgY2hhcmFjdGVyIG1hdGNoZXMgdGhlIHN0cmluZyB2YWx1ZVxyXG5cdFx0XHR2YXIgY2hlY2tMaXRlcmFsID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0aWYgKHZhbHVlLmNoYXJBdChpVmFsdWUpICE9PSBmb3JtYXQuY2hhckF0KGlGb3JtYXQpKSB7XHJcblx0XHRcdFx0XHR0aHJvdyAoJC5jYWxlbmRhcnMubG9jYWwudW5leHBlY3RlZExpdGVyYWxBdCB8fFxyXG5cdFx0XHRcdFx0XHQkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLnVuZXhwZWN0ZWRMaXRlcmFsQXQpLnJlcGxhY2UoL1xcezBcXH0vLCBpVmFsdWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpVmFsdWUrKztcclxuXHRcdFx0fTtcclxuXHRcdFx0dmFyIGlWYWx1ZSA9IDA7XHJcblx0XHRcdGZvciAodmFyIGlGb3JtYXQgPSAwOyBpRm9ybWF0IDwgZm9ybWF0Lmxlbmd0aDsgaUZvcm1hdCsrKSB7XHJcblx0XHRcdFx0aWYgKGxpdGVyYWwpIHtcclxuXHRcdFx0XHRcdGlmIChmb3JtYXQuY2hhckF0KGlGb3JtYXQpID09PSBcIidcIiAmJiAhZG91YmxlZChcIidcIikpIHtcclxuXHRcdFx0XHRcdFx0bGl0ZXJhbCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdGNoZWNrTGl0ZXJhbCgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdHN3aXRjaCAoZm9ybWF0LmNoYXJBdChpRm9ybWF0KSkge1xyXG5cdFx0XHRcdFx0XHRjYXNlICdkJzogZGF5ID0gZ2V0TnVtYmVyKCdkJyk7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdEJzogZ2V0TmFtZSgnRCcsIGRheU5hbWVzU2hvcnQsIGRheU5hbWVzKTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ28nOiBkb3kgPSBnZXROdW1iZXIoJ28nKTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ3cnOiBnZXROdW1iZXIoJ3cnKTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ20nOiBtb250aCA9IGdldE51bWJlcignbScpOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAnTSc6IG1vbnRoID0gZ2V0TmFtZSgnTScsIG1vbnRoTmFtZXNTaG9ydCwgbW9udGhOYW1lcyk7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICd5JzpcclxuXHRcdFx0XHRcdFx0XHR2YXIgaVNhdmUgPSBpRm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdHNob3J0WWVhciA9ICFkb3VibGVkKCd5JywgMik7XHJcblx0XHRcdFx0XHRcdFx0aUZvcm1hdCA9IGlTYXZlO1xyXG5cdFx0XHRcdFx0XHRcdHllYXIgPSBnZXROdW1iZXIoJ3knLCAyKTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAnWSc6IHllYXIgPSBnZXROdW1iZXIoJ1knLCAyKTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ0onOlxyXG5cdFx0XHRcdFx0XHRcdGpkID0gZ2V0TnVtYmVyKCdKJykgKyAwLjU7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHZhbHVlLmNoYXJBdChpVmFsdWUpID09PSAnLicpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlWYWx1ZSsrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Z2V0TnVtYmVyKCdKJyk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdAJzogamQgPSBnZXROdW1iZXIoJ0AnKSAvIHRoaXMuU0VDU19QRVJfREFZICsgdGhpcy5VTklYX0VQT0NIOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAnISc6IGpkID0gZ2V0TnVtYmVyKCchJykgLyB0aGlzLlRJQ0tTX1BFUl9EQVkgKyB0aGlzLlRJQ0tTX0VQT0NIOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAnKic6IGlWYWx1ZSA9IHZhbHVlLmxlbmd0aDsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgXCInXCI6XHJcblx0XHRcdFx0XHRcdFx0aWYgKGRvdWJsZWQoXCInXCIpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjaGVja0xpdGVyYWwoKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRsaXRlcmFsID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGRlZmF1bHQ6IGNoZWNrTGl0ZXJhbCgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoaVZhbHVlIDwgdmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0dGhyb3cgJC5jYWxlbmRhcnMubG9jYWwudW5leHBlY3RlZFRleHQgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS51bmV4cGVjdGVkVGV4dDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoeWVhciA9PT0gLTEpIHtcclxuXHRcdFx0XHR5ZWFyID0gdGhpcy50b2RheSgpLnllYXIoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmICh5ZWFyIDwgMTAwICYmIHNob3J0WWVhcikge1xyXG5cdFx0XHRcdHllYXIgKz0gKHNob3J0WWVhckN1dG9mZiA9PT0gLTEgPyAxOTAwIDogdGhpcy50b2RheSgpLnllYXIoKSAtXHJcblx0XHRcdFx0XHR0aGlzLnRvZGF5KCkueWVhcigpICUgMTAwIC0gKHllYXIgPD0gc2hvcnRZZWFyQ3V0b2ZmID8gMCA6IDEwMCkpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChkb3kgPiAtMSkge1xyXG5cdFx0XHRcdG1vbnRoID0gMTtcclxuXHRcdFx0XHRkYXkgPSBkb3k7XHJcblx0XHRcdFx0Zm9yICh2YXIgZGltID0gdGhpcy5kYXlzSW5Nb250aCh5ZWFyLCBtb250aCk7IGRheSA+IGRpbTsgZGltID0gdGhpcy5kYXlzSW5Nb250aCh5ZWFyLCBtb250aCkpIHtcclxuXHRcdFx0XHRcdG1vbnRoKys7XHJcblx0XHRcdFx0XHRkYXkgLT0gZGltO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gKGpkID4gLTEgPyB0aGlzLmZyb21KRChqZCkgOiB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSkpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQSBkYXRlIG1heSBiZSBzcGVjaWZpZWQgYXMgYW4gZXhhY3QgdmFsdWUgb3IgYSByZWxhdGl2ZSBvbmUuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0gZGF0ZVNwZWMge0NEYXRlfG51bWJlcnxzdHJpbmd9IFRoZSBkYXRlIGFzIGFuIG9iamVjdCBvciBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdCBvclxyXG5cdFx0XHRcdFx0YW4gb2Zmc2V0IC0gbnVtZXJpYyBkYXlzIGZyb20gdG9kYXksIG9yIHN0cmluZyBhbW91bnRzIGFuZCBwZXJpb2RzLCBlLmcuICcrMW0gKzJ3Jy5cclxuXHRcdFx0QHBhcmFtIGRlZmF1bHREYXRlIHtDRGF0ZX0gVGhlIGRhdGUgdG8gdXNlIGlmIG5vIG90aGVyIHN1cHBsaWVkLCBtYXkgYmUgPGNvZGU+bnVsbDwvY29kZT4uXHJcblx0XHRcdEBwYXJhbSBjdXJyZW50RGF0ZSB7Q0RhdGV9IFRoZSBjdXJyZW50IGRhdGUgYXMgYSBwb3NzaWJsZSBiYXNpcyBmb3IgcmVsYXRpdmUgZGF0ZXMsXHJcblx0XHRcdFx0XHRpZiA8Y29kZT5udWxsPC9jb2RlPiB0b2RheSBpcyB1c2VkIChvcHRpb25hbClcclxuXHRcdFx0QHBhcmFtIFtkYXRlRm9ybWF0XSB7c3RyaW5nfSBUaGUgZXhwZWN0ZWQgZGF0ZSBmb3JtYXQgLSBzZWUgPGEgaHJlZj1cIiNmb3JtYXREYXRlXCI+PGNvZGU+Zm9ybWF0RGF0ZTwvY29kZT48L2E+LlxyXG5cdFx0XHRAcGFyYW0gW3NldHRpbmdzXSB7b2JqZWN0fSBBZGRpdGlvbmFsIG9wdGlvbnMgd2hvc2UgYXR0cmlidXRlcyBpbmNsdWRlOlxyXG5cdFx0XHRAcHJvcGVydHkgW3Nob3J0WWVhckN1dG9mZl0ge251bWJlcn0gVGhlIGN1dG9mZiB5ZWFyIGZvciBkZXRlcm1pbmluZyB0aGUgY2VudHVyeS5cclxuXHRcdFx0QHByb3BlcnR5IFtkYXlOYW1lc1Nob3J0XSB7c3RyaW5nW119IEFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5LlxyXG5cdFx0XHRAcHJvcGVydHkgW2RheU5hbWVzXSB7c3RyaW5nW119IE5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5LlxyXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoTmFtZXNTaG9ydF0ge3N0cmluZ1tdfSBBYmJyZXZpYXRlZCBuYW1lcyBvZiB0aGUgbW9udGhzLlxyXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoTmFtZXNdIHtzdHJpbmdbXX0gTmFtZXMgb2YgdGhlIG1vbnRocy5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBkZWNvZGVkIGRhdGUuICovXHJcblx0XHRkZXRlcm1pbmVEYXRlOiBmdW5jdGlvbihkYXRlU3BlYywgZGVmYXVsdERhdGUsIGN1cnJlbnREYXRlLCBkYXRlRm9ybWF0LCBzZXR0aW5ncykge1xyXG5cdFx0XHRpZiAoY3VycmVudERhdGUgJiYgdHlwZW9mIGN1cnJlbnREYXRlICE9PSAnb2JqZWN0Jykge1xyXG5cdFx0XHRcdHNldHRpbmdzID0gZGF0ZUZvcm1hdDtcclxuXHRcdFx0XHRkYXRlRm9ybWF0ID0gY3VycmVudERhdGU7XHJcblx0XHRcdFx0Y3VycmVudERhdGUgPSBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0eXBlb2YgZGF0ZUZvcm1hdCAhPT0gJ3N0cmluZycpIHtcclxuXHRcdFx0XHRzZXR0aW5ncyA9IGRhdGVGb3JtYXQ7XHJcblx0XHRcdFx0ZGF0ZUZvcm1hdCA9ICcnO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBjYWxlbmRhciA9IHRoaXM7XHJcblx0XHRcdHZhciBvZmZzZXRTdHJpbmcgPSBmdW5jdGlvbihvZmZzZXQpIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGNhbGVuZGFyLnBhcnNlRGF0ZShkYXRlRm9ybWF0LCBvZmZzZXQsIHNldHRpbmdzKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRcdC8vIElnbm9yZVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRvZmZzZXQgPSBvZmZzZXQudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0XHR2YXIgZGF0ZSA9IChvZmZzZXQubWF0Y2goL15jLykgJiYgY3VycmVudERhdGUgP1xyXG5cdFx0XHRcdFx0Y3VycmVudERhdGUubmV3RGF0ZSgpIDogbnVsbCkgfHwgY2FsZW5kYXIudG9kYXkoKTtcclxuXHRcdFx0XHR2YXIgcGF0dGVybiA9IC8oWystXT9bMC05XSspXFxzKihkfHd8bXx5KT8vZztcclxuXHRcdFx0XHR2YXIgbWF0Y2hlcyA9IHBhdHRlcm4uZXhlYyhvZmZzZXQpO1xyXG5cdFx0XHRcdHdoaWxlIChtYXRjaGVzKSB7XHJcblx0XHRcdFx0XHRkYXRlLmFkZChwYXJzZUludChtYXRjaGVzWzFdLCAxMCksIG1hdGNoZXNbMl0gfHwgJ2QnKTtcclxuXHRcdFx0XHRcdG1hdGNoZXMgPSBwYXR0ZXJuLmV4ZWMob2Zmc2V0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGRhdGU7XHJcblx0XHRcdH07XHJcblx0XHRcdGRlZmF1bHREYXRlID0gKGRlZmF1bHREYXRlID8gZGVmYXVsdERhdGUubmV3RGF0ZSgpIDogbnVsbCk7XHJcblx0XHRcdGRhdGVTcGVjID0gKGRhdGVTcGVjID09IG51bGwgPyBkZWZhdWx0RGF0ZSA6XHJcblx0XHRcdFx0KHR5cGVvZiBkYXRlU3BlYyA9PT0gJ3N0cmluZycgPyBvZmZzZXRTdHJpbmcoZGF0ZVNwZWMpIDogKHR5cGVvZiBkYXRlU3BlYyA9PT0gJ251bWJlcicgP1xyXG5cdFx0XHRcdChpc05hTihkYXRlU3BlYykgfHwgZGF0ZVNwZWMgPT09IEluZmluaXR5IHx8IGRhdGVTcGVjID09PSAtSW5maW5pdHkgPyBkZWZhdWx0RGF0ZSA6XHJcblx0XHRcdFx0Y2FsZW5kYXIudG9kYXkoKS5hZGQoZGF0ZVNwZWMsICdkJykpIDogY2FsZW5kYXIubmV3RGF0ZShkYXRlU3BlYykpKSk7XHJcblx0XHRcdHJldHVybiBkYXRlU3BlYztcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcbn0pKGpRdWVyeSk7XHJcbi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgQ2FsZW5kYXJzIGRhdGUgcGlja2VyIGZvciBqUXVlcnkgdjIuMC4xLlxyXG4gICBXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpIEF1Z3VzdCAyMDA5LlxyXG4gICBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCAoaHR0cDovL2tlaXRoLXdvb2QubmFtZS9saWNlbmNlLmh0bWwpIGxpY2Vuc2UuIFxyXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cclxuXHJcbihmdW5jdGlvbigkKSB7IC8vIEhpZGUgc2NvcGUsIG5vICQgY29uZmxpY3RcclxuXHJcblx0dmFyIHBsdWdpbk5hbWUgPSAnY2FsZW5kYXJzUGlja2VyJztcclxuXHJcblxyXG5cdC8qKiBDcmVhdGUgdGhlIGNhbGVuZGFycyBkYXRlcGlja2VyIHBsdWdpbi5cclxuXHRcdDxwPlNldHMgYW4gaW5wdXQgZmllbGQgdG8gcG9wdXAgYSBjYWxlbmRhciBmb3IgZGF0ZSBlbnRyeSxcclxuXHRcdFx0b3IgYSA8Y29kZT5kaXY8L2NvZGU+IG9yIDxjb2RlPnNwYW48L2NvZGU+IHRvIHNob3cgYW4gaW5saW5lIGNhbGVuZGFyLjwvcD5cclxuXHRcdDxwPkV4cGVjdHMgSFRNTCBsaWtlOjwvcD5cclxuXHRcdDxwcmU+Jmx0O2lucHV0IHR5cGU9XCJ0ZXh0XCI+IG9yICZsdDtkaXY+Jmx0Oy9kaXY+PC9wcmU+XHJcblx0XHQ8cD5Qcm92aWRlIGlubGluZSBjb25maWd1cmF0aW9uIGxpa2U6PC9wPlxyXG5cdFx0PHByZT4mbHQ7aW5wdXQgdHlwZT1cInRleHRcIiBkYXRhLWNhbGVuZGFyc1BpY2tlcj1cIm5hbWU6ICd2YWx1ZSdcIi8+PC9wcmU+XHJcblx0IFx0QGNsYXNzIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0QGF1Z21lbnRzIEpRUGx1Z2luXHJcblx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5jYWxlbmRhcnNQaWNrZXIoKVxyXG4gJChzZWxlY3RvcikuY2FsZW5kYXJzUGlja2VyKHttaW5EYXRlOiAwLCBtYXhEYXRlOiAnKzFtICsxdyd9KSAqL1xyXG5cdCQuSlFQbHVnaW4uY3JlYXRlUGx1Z2luKHtcclxuXHRcclxuXHRcdC8qKiBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyICovXHJcblx0XHRuYW1lOiBwbHVnaW5OYW1lLFxyXG5cdFx0XHJcblx0XHQvKiogRGVmYXVsdCB0ZW1wbGF0ZSBmb3IgZ2VuZXJhdGluZyBhIGRhdGVwaWNrZXIuXHJcblx0XHRcdEluc2VydCBhbnl3aGVyZTpcclxuXHRcdFx0PHVsPlxyXG5cdFx0XHQ8bGk+J3tsMTBuOm5hbWV9JyB0byBpbnNlcnQgbG9jYWxpc2VkIHZhbHVlIGZvciBuYW1lLDwvbGk+XHJcblx0XHRcdDxsaT4ne2xpbms6bmFtZX0nIHRvIGluc2VydCBhIGxpbmsgdHJpZ2dlciBmb3IgY29tbWFuZCBuYW1lLDwvbGk+XHJcblx0XHRcdDxsaT4ne2J1dHRvbjpuYW1lfScgdG8gaW5zZXJ0IGEgYnV0dG9uIHRyaWdnZXIgZm9yIGNvbW1hbmQgbmFtZSw8L2xpPlxyXG5cdFx0XHQ8bGk+J3twb3B1cDpzdGFydH0uLi57cG9wdXA6ZW5kfScgdG8gbWFyayBhIHNlY3Rpb24gZm9yIGluY2x1c2lvbiBpbiBhIHBvcHVwIGRhdGVwaWNrZXIgb25seSw8L2xpPlxyXG5cdFx0XHQ8bGk+J3tpbmxpbmU6c3RhcnR9Li4ue2lubGluZTplbmR9JyB0byBtYXJrIGEgc2VjdGlvbiBmb3IgaW5jbHVzaW9uIGluIGFuIGlubGluZSBkYXRlcGlja2VyIG9ubHkuPC9saT5cclxuXHRcdFx0PC91bD5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJvcGVydHkgcGlja2VyIHtzdHJpbmd9IE92ZXJhbGwgc3RydWN0dXJlOiAne21vbnRoc30nIHRvIGluc2VydCBjYWxlbmRhciBtb250aHMuXHJcblx0XHRcdEBwcm9wZXJ0eSBtb250aFJvdyB7c3RyaW5nfSBPbmUgcm93IG9mIG1vbnRoczogJ3ttb250aHN9JyB0byBpbnNlcnQgY2FsZW5kYXIgbW9udGhzLlxyXG5cdFx0XHRAcHJvcGVydHkgbW9udGgge3N0cmluZ30gQSBzaW5nbGUgbW9udGg6ICd7bW9udGhIZWFkZXI8ZW0+OmRhdGVGb3JtYXQ8L2VtPn0nIHRvIGluc2VydCB0aGUgbW9udGggaGVhZGVyIC1cclxuXHRcdFx0XHRcdFx0PGVtPmRhdGVGb3JtYXQ8L2VtPiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gJ01NIHl5eXknLFxyXG5cdFx0XHRcdFx0XHQne3dlZWtIZWFkZXJ9JyB0byBpbnNlcnQgYSB3ZWVrIGhlYWRlciwgJ3t3ZWVrc30nIHRvIGluc2VydCB0aGUgbW9udGgncyB3ZWVrcy5cclxuXHRcdFx0QHByb3BlcnR5IHdlZWtIZWFkZXIge3N0cmluZ30gQSB3ZWVrIGhlYWRlcjogJ3tkYXlzfScgdG8gaW5zZXJ0IGluZGl2aWR1YWwgZGF5IG5hbWVzLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5SGVhZGVyIHtzdHJpbmd9IEluZGl2aWR1YWwgZGF5IGhlYWRlcjogJ3tkYXl9JyB0byBpbnNlcnQgZGF5IG5hbWUuXHJcblx0XHRcdEBwcm9wZXJ0eSB3ZWVrIHtzdHJpbmd9IE9uZSB3ZWVrIG9mIHRoZSBtb250aDogJ3tkYXlzfScgdG8gaW5zZXJ0IHRoZSB3ZWVrJ3MgZGF5cyxcclxuXHRcdFx0XHRcdFx0J3t3ZWVrT2ZZZWFyfScgdG8gaW5zZXJ0IHdlZWsgb2YgeWVhci5cclxuXHRcdFx0QHByb3BlcnR5IGRheSB7c3RyaW5nfSBBbiBpbmRpdmlkdWFsIGRheTogJ3tkYXl9JyB0byBpbnNlcnQgZGF5IHZhbHVlLlxyXG5cdFx0XHRAcHJvcGVydHkgbW9udGhTZWxlY3RvciB7c3RyaW5nfSBqUXVlcnkgc2VsZWN0b3IsIHJlbGF0aXZlIHRvIHBpY2tlciwgZm9yIGEgc2luZ2xlIG1vbnRoLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5U2VsZWN0b3Ige3N0cmluZ30galF1ZXJ5IHNlbGVjdG9yLCByZWxhdGl2ZSB0byBwaWNrZXIsIGZvciBpbmRpdmlkdWFsIGRheXMuXHJcblx0XHRcdEBwcm9wZXJ0eSBydGxDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgcmlnaHQtdG8tbGVmdCAoUlRMKSBsYW5ndWFnZXMuXHJcblx0XHRcdEBwcm9wZXJ0eSBtdWx0aUNsYXNzIHtzdHJpbmd9IENsYXNzIGZvciBtdWx0aS1tb250aCBkYXRlcGlja2Vycy5cclxuXHRcdFx0QHByb3BlcnR5IGRlZmF1bHRDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3Igc2VsZWN0YWJsZSBkYXRlcy5cclxuXHRcdFx0QHByb3BlcnR5IHNlbGVjdGVkQ2xhc3Mge3N0cmluZ30gQ2xhc3MgZm9yIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlcy5cclxuXHRcdFx0QHByb3BlcnR5IGhpZ2hsaWdodGVkQ2xhc3Mge3N0cmluZ30gQ2xhc3MgZm9yIGhpZ2hsaWdodGVkIGRhdGVzLlxyXG5cdFx0XHRAcHJvcGVydHkgdG9kYXlDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgdG9kYXkuXHJcblx0XHRcdEBwcm9wZXJ0eSBvdGhlck1vbnRoQ2xhc3Mge3N0cmluZ30gQ2xhc3MgZm9yIGRheXMgZnJvbSBvdGhlciBtb250aHMuXHJcblx0XHRcdEBwcm9wZXJ0eSB3ZWVrZW5kQ2xhc3Mge3N0cmluZ30gQ2xhc3MgZm9yIGRheXMgb24gd2Vla2VuZHMuXHJcblx0XHRcdEBwcm9wZXJ0eSBjb21tYW5kQ2xhc3Mge3N0cmluZ30gQ2xhc3MgcHJlZml4IGZvciBjb21tYW5kcy5cclxuXHRcdFx0QHByb3BlcnR5IGNvbW1hbmRCdXR0b25DbGFzcyB7c3RyaW5nfSBFeHRyYSBjbGFzcyhlcykgZm9yIGNvbW1hbmRzIHRoYXQgYXJlIGJ1dHRvbnMuXHJcblx0XHRcdEBwcm9wZXJ0eSBjb21tYW5kTGlua0NsYXNzIHtzdHJpbmd9IEV4dHJhIGNsYXNzKGVzKSBmb3IgY29tbWFuZHMgdGhhdCBhcmUgbGlua3MuXHJcblx0XHRcdEBwcm9wZXJ0eSBkaXNhYmxlZENsYXNzIHtzdHJpbmd9IENsYXNzIGZvciBkaXNhYmxlZCBjb21tYW5kcy4gKi9cclxuXHRcdGRlZmF1bHRSZW5kZXJlcjoge1xyXG5cdFx0XHRwaWNrZXI6ICc8ZGl2IGNsYXNzPVwiY2FsZW5kYXJzXCI+JyArXHJcblx0XHRcdCc8ZGl2IGNsYXNzPVwiY2FsZW5kYXJzLW5hdlwiPntsaW5rOnByZXZ9e2xpbms6dG9kYXl9e2xpbms6bmV4dH08L2Rpdj57bW9udGhzfScgK1xyXG5cdFx0XHQne3BvcHVwOnN0YXJ0fTxkaXYgY2xhc3M9XCJjYWxlbmRhcnMtY3RybFwiPntsaW5rOmNsZWFyfXtsaW5rOmNsb3NlfTwvZGl2Pntwb3B1cDplbmR9JyArXHJcblx0XHRcdCc8ZGl2IGNsYXNzPVwiY2FsZW5kYXJzLWNsZWFyLWZpeFwiPjwvZGl2PjwvZGl2PicsXHJcblx0XHRcdG1vbnRoUm93OiAnPGRpdiBjbGFzcz1cImNhbGVuZGFycy1tb250aC1yb3dcIj57bW9udGhzfTwvZGl2PicsXHJcblx0XHRcdG1vbnRoOiAnPGRpdiBjbGFzcz1cImNhbGVuZGFycy1tb250aFwiPjxkaXYgY2xhc3M9XCJjYWxlbmRhcnMtbW9udGgtaGVhZGVyXCI+e21vbnRoSGVhZGVyfTwvZGl2PicgK1xyXG5cdFx0XHQnPHRhYmxlPjx0aGVhZD57d2Vla0hlYWRlcn08L3RoZWFkPjx0Ym9keT57d2Vla3N9PC90Ym9keT48L3RhYmxlPjwvZGl2PicsXHJcblx0XHRcdHdlZWtIZWFkZXI6ICc8dHI+e2RheXN9PC90cj4nLFxyXG5cdFx0XHRkYXlIZWFkZXI6ICc8dGg+e2RheX08L3RoPicsXHJcblx0XHRcdHdlZWs6ICc8dHI+e2RheXN9PC90cj4nLFxyXG5cdFx0XHRkYXk6ICc8dGQ+e2RheX08L3RkPicsXHJcblx0XHRcdG1vbnRoU2VsZWN0b3I6ICcuY2FsZW5kYXJzLW1vbnRoJyxcclxuXHRcdFx0ZGF5U2VsZWN0b3I6ICd0ZCcsXHJcblx0XHRcdHJ0bENsYXNzOiAnY2FsZW5kYXJzLXJ0bCcsXHJcblx0XHRcdG11bHRpQ2xhc3M6ICdjYWxlbmRhcnMtbXVsdGknLFxyXG5cdFx0XHRkZWZhdWx0Q2xhc3M6ICcnLFxyXG5cdFx0XHRzZWxlY3RlZENsYXNzOiAnY2FsZW5kYXJzLXNlbGVjdGVkJyxcclxuXHRcdFx0aGlnaGxpZ2h0ZWRDbGFzczogJ2NhbGVuZGFycy1oaWdobGlnaHQnLFxyXG5cdFx0XHR0b2RheUNsYXNzOiAnY2FsZW5kYXJzLXRvZGF5JyxcclxuXHRcdFx0b3RoZXJNb250aENsYXNzOiAnY2FsZW5kYXJzLW90aGVyLW1vbnRoJyxcclxuXHRcdFx0d2Vla2VuZENsYXNzOiAnY2FsZW5kYXJzLXdlZWtlbmQnLFxyXG5cdFx0XHRjb21tYW5kQ2xhc3M6ICdjYWxlbmRhcnMtY21kJyxcclxuXHRcdFx0Y29tbWFuZEJ1dHRvbkNsYXNzOiAnJyxcclxuXHRcdFx0Y29tbWFuZExpbmtDbGFzczogJycsXHJcblx0XHRcdGRpc2FibGVkQ2xhc3M6ICdjYWxlbmRhcnMtZGlzYWJsZWQnXHJcblx0XHR9LFxyXG5cdFxyXG5cdFx0LyoqIENvbW1hbmQgYWN0aW9ucyB0aGF0IG1heSBiZSBhZGRlZCB0byBhIGxheW91dCBieSBuYW1lLlxyXG5cdFx0XHQ8dWw+XHJcblx0XHRcdDxsaT5wcmV2IC0gU2hvdyB0aGUgcHJldmlvdXMgbW9udGggKGJhc2VkIG9uIDxjb2RlPm1vbnRoc1RvU3RlcDwvY29kZT4gb3B0aW9uKSAtIDxlbT5QYWdlVXA8L2VtPjwvbGk+XHJcblx0XHRcdDxsaT5wcmV2SnVtcCAtIFNob3cgdGhlIHByZXZpb3VzIHllYXIgKGJhc2VkIG9uIDxjb2RlPm1vbnRoc1RvSnVtcDwvY29kZT4gb3B0aW9uKSAtIDxlbT5DdHJsK1BhZ2VVcDwvZW0+PC9saT5cclxuXHRcdFx0PGxpPm5leHQgLSBTaG93IHRoZSBuZXh0IG1vbnRoIChiYXNlZCBvbiA8Y29kZT5tb250aHNUb1N0ZXA8L2NvZGU+IG9wdGlvbikgLSA8ZW0+UGFnZURvd248L2VtPjwvbGk+XHJcblx0XHRcdDxsaT5uZXh0SnVtcCAtIFNob3cgdGhlIG5leHQgeWVhciAoYmFzZWQgb24gPGNvZGU+bW9udGhzVG9KdW1wPC9jb2RlPiBvcHRpb24pIC0gPGVtPkN0cmwrUGFnZURvd248L2VtPjwvbGk+XHJcblx0XHRcdDxsaT5jdXJyZW50IC0gU2hvdyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG1vbnRoIG9yIHRvZGF5J3MgaWYgbm9uZSBzZWxlY3RlZCAtIDxlbT5DdHJsK0hvbWU8L2VtPjwvbGk+XHJcblx0XHRcdDxsaT50b2RheSAtIFNob3cgdG9kYXkncyBtb250aCAtIDxlbT5DdHJsK0hvbWU8L2VtPjwvbGk+XHJcblx0XHRcdDxsaT5jbGVhciAtIEVyYXNlIHRoZSBkYXRlIGFuZCBjbG9zZSB0aGUgZGF0ZXBpY2tlciBwb3B1cCAtIDxlbT5DdHJsK0VuZDwvZW0+PC9saT5cclxuXHRcdFx0PGxpPmNsb3NlIC0gQ2xvc2UgdGhlIGRhdGVwaWNrZXIgcG9wdXAgLSA8ZW0+RXNjPC9lbT48L2xpPlxyXG5cdFx0XHQ8bGk+cHJldldlZWsgLSBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHByZXZpb3VzIHdlZWsgLSA8ZW0+Q3RybCtVcDwvZW0+PC9saT5cclxuXHRcdFx0PGxpPnByZXZEYXkgLSBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHByZXZpb3VzIGRheSAtIDxlbT5DdHJsK0xlZnQ8L2VtPjwvbGk+XHJcblx0XHRcdDxsaT5uZXh0RGF5IC0gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBuZXh0IGRheSAtIDxlbT5DdHJsK1JpZ2h0PC9lbT48L2xpPlxyXG5cdFx0XHQ8bGk+bmV4dFdlZWsgLSBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgd2VlayAtIDxlbT5DdHJsK0Rvd248L2VtPjwvbGk+XHJcblx0XHRcdDwvdWw+XHJcblx0XHRcdFRoZSBjb21tYW5kIG5hbWUgaXMgdGhlIGtleSBuYW1lIGFuZCBpcyB1c2VkIHRvIGFkZCB0aGUgY29tbWFuZCB0byBhIGxheW91dFxyXG5cdFx0XHR3aXRoICd7YnV0dG9uOm5hbWV9JyBvciAne2xpbms6bmFtZX0nLiBFYWNoIGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByb3BlcnR5IHRleHQge3N0cmluZ30gVGhlIGZpZWxkIGluIHRoZSByZWdpb25hbCBzZXR0aW5ncyBmb3IgdGhlIGRpc3BsYXllZCB0ZXh0LlxyXG5cdFx0XHRAcHJvcGVydHkgc3RhdHVzIHtzdHJpbmd9IFRoZSBmaWVsZCBpbiB0aGUgcmVnaW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBzdGF0dXMgdGV4dC5cclxuXHRcdFx0QHByb3BlcnR5IGtleXN0cm9rZSB7b2JqZWN0fSBUaGUga2V5c3Ryb2tlIHRvIHRyaWdnZXIgdGhlIGFjdGlvbiwgd2l0aCBhdHRyaWJ1dGVzOlxyXG5cdFx0XHRcdDxjb2RlPmtleUNvZGU8L2NvZGU+IHtudW1iZXJ9IHRoZSBjb2RlIGZvciB0aGUga2V5c3Ryb2tlLFxyXG5cdFx0XHRcdDxjb2RlPmN0cmxLZXk8L2NvZGU+IHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiA8ZW0+Q3RybDwvZW0+IGlzIHJlcXVpcmVkLFxyXG5cdFx0XHRcdDxjb2RlPmFsdEtleTwvY29kZT4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIDxlbT5BbHQ8L2VtPiBpcyByZXF1aXJlZCxcclxuXHRcdFx0XHQ8Y29kZT5zaGlmdEtleTwvY29kZT4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIDxlbT5TaGlmdDwvZW0+IGlzIHJlcXVpcmVkLlxyXG5cdFx0XHRAcHJvcGVydHkgZW5hYmxlZCB7Q2FsZW5kYXJzUGlja2VyQ29tbWFuZEVuYWJsZWR9IFRoZSBmdW5jdGlvbiB0aGF0IGluZGljYXRlcyB0aGUgY29tbWFuZCBpcyBlbmFibGVkLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF0ZSB7Q2FsZW5kYXJzUGlja2VyQ29tbWFuZERhdGV9IFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGRhdGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWN0aW9uLlxyXG5cdFx0XHRAcHJvcGVydHkgYWN0aW9uIHtDYWxlbmRhcnNQaWNrZXJDb21tYW5kQWN0aW9ufSBUaGUgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIHRoZSBhY3Rpb24uICovXHJcblx0XHRjb21tYW5kczoge1xyXG5cdFx0XHRwcmV2OiB7dGV4dDogJ3ByZXZUZXh0Jywgc3RhdHVzOiAncHJldlN0YXR1cycsIC8vIFByZXZpb3VzIG1vbnRoXHJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzN9LCAvLyBQYWdlIHVwXHJcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xyXG5cdFx0XHRcdFx0dmFyIG1pbkRhdGUgPSBpbnN0LmN1ck1pbkRhdGUoKTtcclxuXHRcdFx0XHRcdHJldHVybiAoIW1pbkRhdGUgfHwgaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXHJcblx0XHRcdFx0XHRcdGFkZCgxIC0gaW5zdC5vcHRpb25zLm1vbnRoc1RvU3RlcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXHJcblx0XHRcdFx0XHRcdGRheShpbnN0Lm9wdGlvbnMuY2FsZW5kYXIubWluRGF5KS5hZGQoLTEsICdkJykuY29tcGFyZVRvKG1pbkRhdGUpICE9PSAtMSk7IH0sXHJcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxyXG5cdFx0XHRcdFx0XHRhZGQoLWluc3Qub3B0aW9ucy5tb250aHNUb1N0ZXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxyXG5cdFx0XHRcdFx0XHRkYXkoaW5zdC5vcHRpb25zLmNhbGVuZGFyLm1pbkRheSk7IH0sXHJcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHRwbHVnaW4uY2hhbmdlTW9udGgodGhpcywgLWluc3Qub3B0aW9ucy5tb250aHNUb1N0ZXApOyB9XHJcblx0XHRcdH0sXHJcblx0XHRcdHByZXZKdW1wOiB7dGV4dDogJ3ByZXZKdW1wVGV4dCcsIHN0YXR1czogJ3ByZXZKdW1wU3RhdHVzJywgLy8gUHJldmlvdXMgeWVhclxyXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDMzLCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIFBhZ2UgdXBcclxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuY3VyTWluRGF0ZSgpO1xyXG5cdFx0XHRcdFx0cmV0dXJuICghbWluRGF0ZSB8fCBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cclxuXHRcdFx0XHRcdFx0YWRkKDEgLSBpbnN0Lm9wdGlvbnMubW9udGhzVG9KdW1wIC0gaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKS5cclxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpLmFkZCgtMSwgJ2QnKS5jb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKTsgfSxcclxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXHJcblx0XHRcdFx0XHRcdGFkZCgtaW5zdC5vcHRpb25zLm1vbnRoc1RvSnVtcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXHJcblx0XHRcdFx0XHRcdGRheShpbnN0Lm9wdGlvbnMuY2FsZW5kYXIubWluRGF5KTsgfSxcclxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHBsdWdpbi5jaGFuZ2VNb250aCh0aGlzLCAtaW5zdC5vcHRpb25zLm1vbnRoc1RvSnVtcCk7IH1cclxuXHRcdFx0fSxcclxuXHRcdFx0bmV4dDoge3RleHQ6ICduZXh0VGV4dCcsIHN0YXR1czogJ25leHRTdGF0dXMnLCAvLyBOZXh0IG1vbnRoXHJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzR9LCAvLyBQYWdlIGRvd25cclxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XHJcblx0XHRcdFx0XHRyZXR1cm4gKCFtYXhEYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxyXG5cdFx0XHRcdFx0XHRhZGQoaW5zdC5vcHRpb25zLm1vbnRoc1RvU3RlcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXHJcblx0XHRcdFx0XHRcdGRheShpbnN0Lm9wdGlvbnMuY2FsZW5kYXIubWluRGF5KS5jb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKTsgfSxcclxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXHJcblx0XHRcdFx0XHRcdGFkZChpbnN0Lm9wdGlvbnMubW9udGhzVG9TdGVwIC0gaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKS5cclxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpOyB9LFxyXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkge1xyXG5cdFx0XHRcdFx0cGx1Z2luLmNoYW5nZU1vbnRoKHRoaXMsIGluc3Qub3B0aW9ucy5tb250aHNUb1N0ZXApOyB9XHJcblx0XHRcdH0sXHJcblx0XHRcdG5leHRKdW1wOiB7dGV4dDogJ25leHRKdW1wVGV4dCcsIHN0YXR1czogJ25leHRKdW1wU3RhdHVzJywgLy8gTmV4dCB5ZWFyXHJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzQsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgUGFnZSBkb3duXHJcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xyXG5cdFx0XHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xyXG5cdFx0XHRcdFx0cmV0dXJuICghbWF4RGF0ZSB8fCBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cclxuXHRcdFx0XHRcdFx0YWRkKGluc3Qub3B0aW9ucy5tb250aHNUb0p1bXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxyXG5cdFx0XHRcdFx0XHRkYXkoaW5zdC5vcHRpb25zLmNhbGVuZGFyLm1pbkRheSkuY29tcGFyZVRvKG1heERhdGUpICE9PSArMSk7XHR9LFxyXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHJldHVybiBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cclxuXHRcdFx0XHRcdFx0YWRkKGluc3Qub3B0aW9ucy5tb250aHNUb0p1bXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxyXG5cdFx0XHRcdFx0XHRkYXkoaW5zdC5vcHRpb25zLmNhbGVuZGFyLm1pbkRheSk7IH0sXHJcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHRwbHVnaW4uY2hhbmdlTW9udGgodGhpcywgaW5zdC5vcHRpb25zLm1vbnRoc1RvSnVtcCk7IH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Y3VycmVudDoge3RleHQ6ICdjdXJyZW50VGV4dCcsIHN0YXR1czogJ2N1cnJlbnRTdGF0dXMnLCAvLyBDdXJyZW50IG1vbnRoXHJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzYsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgSG9tZVxyXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XHJcblx0XHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XHJcblx0XHRcdFx0XHR2YXIgY3VyRGF0ZSA9IGluc3Quc2VsZWN0ZWREYXRlc1swXSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKTtcclxuXHRcdFx0XHRcdHJldHVybiAoIW1pbkRhdGUgfHwgY3VyRGF0ZS5jb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKSAmJlxyXG5cdFx0XHRcdFx0XHQoIW1heERhdGUgfHwgY3VyRGF0ZS5jb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKTsgfSxcclxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpOyB9LFxyXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkge1xyXG5cdFx0XHRcdFx0dmFyIGN1ckRhdGUgPSBpbnN0LnNlbGVjdGVkRGF0ZXNbMF0gfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCk7XHJcblx0XHRcdFx0XHRwbHVnaW4uc2hvd01vbnRoKHRoaXMsIGN1ckRhdGUueWVhcigpLCBjdXJEYXRlLm1vbnRoKCkpOyB9XHJcblx0XHRcdH0sXHJcblx0XHRcdHRvZGF5OiB7dGV4dDogJ3RvZGF5VGV4dCcsIHN0YXR1czogJ3RvZGF5U3RhdHVzJywgLy8gVG9kYXkncyBtb250aFxyXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDM2LCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIEhvbWVcclxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuY3VyTWluRGF0ZSgpO1xyXG5cdFx0XHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xyXG5cdFx0XHRcdFx0cmV0dXJuICghbWluRGF0ZSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKS5jb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKSAmJlxyXG5cdFx0XHRcdFx0XHQoIW1heERhdGUgfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCkuY29tcGFyZVRvKG1heERhdGUpICE9PSArMSk7IH0sXHJcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCk7IH0sXHJcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7IHBsdWdpbi5zaG93TW9udGgodGhpcyk7IH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Y2xlYXI6IHt0ZXh0OiAnY2xlYXJUZXh0Jywgc3RhdHVzOiAnY2xlYXJTdGF0dXMnLCAvLyBDbGVhciB0aGUgZGF0ZXBpY2tlclxyXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDM1LCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIEVuZFxyXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHsgcmV0dXJuIHRydWU7IH0sXHJcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gbnVsbDsgfSxcclxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHsgcGx1Z2luLmNsZWFyKHRoaXMpOyB9XHJcblx0XHRcdH0sXHJcblx0XHRcdGNsb3NlOiB7dGV4dDogJ2Nsb3NlVGV4dCcsIHN0YXR1czogJ2Nsb3NlU3RhdHVzJywgLy8gQ2xvc2UgdGhlIGRhdGVwaWNrZXJcclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAyN30sIC8vIEVzY2FwZVxyXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHsgcmV0dXJuIHRydWU7IH0sXHJcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gbnVsbDsgfSxcclxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHsgcGx1Z2luLmhpZGUodGhpcyk7IH1cclxuXHRcdFx0fSxcclxuXHRcdFx0cHJldldlZWs6IHt0ZXh0OiAncHJldldlZWtUZXh0Jywgc3RhdHVzOiAncHJldldlZWtTdGF0dXMnLCAvLyBQcmV2aW91cyB3ZWVrXHJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzgsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgVXBcclxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuY3VyTWluRGF0ZSgpO1xyXG5cdFx0XHRcdFx0cmV0dXJuICghbWluRGF0ZSB8fCBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cclxuXHRcdFx0XHRcdFx0YWRkKC1pbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGF5c0luV2VlaygpLCAnZCcpLmNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpOyB9LFxyXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHsgcmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxyXG5cdFx0XHRcdFx0YWRkKC1pbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGF5c0luV2VlaygpLCAnZCcpOyB9LFxyXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkgeyBwbHVnaW4uY2hhbmdlRGF5KHRoaXMsIC1pbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGF5c0luV2VlaygpKTsgfVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRwcmV2RGF5OiB7dGV4dDogJ3ByZXZEYXlUZXh0Jywgc3RhdHVzOiAncHJldkRheVN0YXR1cycsIC8vIFByZXZpb3VzIGRheVxyXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDM3LCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIExlZnRcclxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuY3VyTWluRGF0ZSgpO1xyXG5cdFx0XHRcdFx0cmV0dXJuICghbWluRGF0ZSB8fCBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5hZGQoLTEsICdkJykuXHJcblx0XHRcdFx0XHRcdGNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpOyB9LFxyXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHsgcmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZCgtMSwgJ2QnKTsgfSxcclxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHsgcGx1Z2luLmNoYW5nZURheSh0aGlzLCAtMSk7IH1cclxuXHRcdFx0fSxcclxuXHRcdFx0bmV4dERheToge3RleHQ6ICduZXh0RGF5VGV4dCcsIHN0YXR1czogJ25leHREYXlTdGF0dXMnLCAvLyBOZXh0IGRheVxyXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDM5LCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIFJpZ2h0XHJcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xyXG5cdFx0XHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xyXG5cdFx0XHRcdFx0cmV0dXJuICghbWF4RGF0ZSB8fCBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5hZGQoMSwgJ2QnKS5cclxuXHRcdFx0XHRcdFx0Y29tcGFyZVRvKG1heERhdGUpICE9PSArMSk7IH0sXHJcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuYWRkKDEsICdkJyk7IH0sXHJcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7IHBsdWdpbi5jaGFuZ2VEYXkodGhpcywgMSk7IH1cclxuXHRcdFx0fSxcclxuXHRcdFx0bmV4dFdlZWs6IHt0ZXh0OiAnbmV4dFdlZWtUZXh0Jywgc3RhdHVzOiAnbmV4dFdlZWtTdGF0dXMnLCAvLyBOZXh0IHdlZWtcclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiA0MCwgY3RybEtleTogdHJ1ZX0sIC8vIEN0cmwgKyBEb3duXHJcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xyXG5cdFx0XHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xyXG5cdFx0XHRcdFx0cmV0dXJuICghbWF4RGF0ZSB8fCBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cclxuXHRcdFx0XHRcdFx0YWRkKGluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCksICdkJykuY29tcGFyZVRvKG1heERhdGUpICE9PSArMSk7IH0sXHJcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXHJcblx0XHRcdFx0XHRhZGQoaW5zdC5vcHRpb25zLmNhbGVuZGFyLmRheXNJbldlZWsoKSwgJ2QnKTsgfSxcclxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHsgcGx1Z2luLmNoYW5nZURheSh0aGlzLCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGF5c0luV2VlaygpKTsgfVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciBhIGNvbW1hbmQgaXMgZW5hYmxlZC5cclxuXHRcdFx0QGNhbGxiYWNrIENhbGVuZGFyc1BpY2tlckNvbW1hbmRFbmFibGVkXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGNvbW1hbmQgaXMgZW5hYmxlZCwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QGV4YW1wbGUgZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xyXG5cdHJldHVybiAhIWluc3QuY3VyTWluRGF0ZSgpO1xyXG4gfSAqL1xyXG5cclxuXHRcdC8qKiBDYWxjdWxhdGUgdGhlIHJlcHJlc2VudGF0aXZlIGRhdGUgZm9yIGEgY29tbWFuZC5cclxuXHRcdFx0QGNhbGxiYWNrIENhbGVuZGFyc1BpY2tlckNvbW1hbmREYXRlXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gQSBkYXRlIGFwcHJvcHJpYXRlIGZvciB0aGlzIGNvbW1hbmQuXHJcblx0XHRcdEBleGFtcGxlIGRhdGU6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRyZXR1cm4gaW5zdC5jdXJNaW5EYXRlKCk7XHJcbiB9ICovXHJcblxyXG5cdFx0LyoqIFBlcmZvcm0gdGhlIGFjdGlvbiBmb3IgYSBjb21tYW5kLlxyXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyQ29tbWFuZEFjdGlvblxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QGV4YW1wbGUgZGF0ZTogZnVuY3Rpb24oaW5zdCkge1xyXG5cdCQuZGF0ZXBpY2suc2V0RGF0ZShpbnN0LmVsZW0sIGluc3QuY3VyTWluRGF0ZSgpKTtcclxuIH0gKi9cclxuXHJcblx0XHQvKiogQ2FsY3VsYXRlIHRoZSB3ZWVrIG9mIHRoZSB5ZWFyIGZvciBhIGRhdGUuXHJcblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJDYWxjdWxhdGVXZWVrXHJcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZX0gVGhlIGRhdGUgdG8gZXZhbHVhdGUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIHdlZWsgb2YgdGhlIHllYXIuXHJcblx0XHRcdEBleGFtcGxlIGNhbGN1bGF0ZVdlZWs6IGZ1bmN0aW9uKGRhdGUpIHtcclxuXHR2YXIgc3RhcnRZZWFyID0gJC5jYWxlbmRhcnMubmV3RGF0ZShkYXRlLnllYXIoKSwgMSwgMSk7XHJcblx0cmV0dXJuIE1hdGguZmxvb3IoKGRhdGUuZGF5T2ZZZWFyKCkgLSBzdGFydFllYXIuZGF5T2ZZZWFyKCkpIC8gNykgKyAxO1xyXG4gfSAqL1xyXG5cclxuXHRcdC8qKiBQcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IGFuIGluZGl2aWR1YWwgZGF0ZSBzaG93biBpbiB0aGUgY2FsZW5kYXIuXHJcblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJPbkRhdGVcclxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgZGF0ZSB0byBldmFsdWF0ZS5cclxuXHRcdFx0QHJldHVybiB7b2JqZWN0fSBJbmZvcm1hdGlvbiBhYm91dCB0aGF0IGRhdGUsIHdpdGggdGhlIHByb3BlcnRpZXMgYWJvdmUuXHJcblx0XHRcdEBwcm9wZXJ0eSBzZWxlY3RhYmxlIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGRhdGUgY2FuIGJlIHNlbGVjdGVkLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF0ZUNsYXNzIHtzdHJpbmd9IENsYXNzKGVzKSB0byBiZSBhcHBsaWVkIHRvIHRoZSBkYXRlLlxyXG5cdFx0XHRAcHJvcGVydHkgY29udGVudCB7c3RyaW5nfSBUaGUgZGF0ZSBjZWxsIGNvbnRlbnQuXHJcblx0XHRcdEBwcm9wZXJ0eSB0b29sdGlwIHtzdHJpbmd9IEEgcG9wdXAgdG9vbHRpcCBmb3IgdGhlIGRhdGUuXHJcblx0XHRcdEBleGFtcGxlIG9uRGF0ZTogZnVuY3Rpb24oZGF0ZSkge1xyXG5cdHJldHVybiB7c2VsZWN0YWJsZTogZGF0ZS5kYXkoKSA+IDAgJiYgZGF0ZS5kYXkoKSAmbHQ7IDUsXHJcblx0XHRkYXRlQ2xhc3M6IGRhdGUuZGF5KCkgPT09IDQgPyAnbGFzdC1kYXknIDogJyd9O1xyXG4gfSAqL1xyXG5cclxuXHRcdC8qKiBVcGRhdGUgdGhlIGRhdGVwaWNrZXIgZGlzcGxheS5cclxuXHRcdFx0QGNhbGxiYWNrIENhbGVuZGFyc1BpY2tlck9uU2hvd1xyXG5cdFx0XHRAcGFyYW0gcGlja2VyIHtqUXVlcnl9IFRoZSBkYXRlcGlja2VyIDxjb2RlPmRpdjwvY29kZT4gdG8gYmUgc2hvd24uXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAZXhhbXBsZSBvblNob3c6IGZ1bmN0aW9uKHBpY2tlciwgaW5zdCkge1xyXG5cdHBpY2tlci5hcHBlbmQoJyZsdDtidXR0b24gdHlwZT1cImJ1dHRvblwiPkhpJmx0Oy9idXR0b24+JykuXHJcblx0XHRmaW5kKCdidXR0b246bGFzdCcpLmNsaWNrKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRhbGVydCgnSGkhJyk7XHJcblx0XHR9KTtcclxuIH0gKi9cclxuXHJcblx0XHQvKiogUmVhY3QgdG8gbmF2aWdhdGluZyB0aHJvdWdoIHRoZSBtb250aHMveWVhcnMuXHJcblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJPbkNoYW5nZU1vbnRoWWVhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7bnVtYmVyfSBUaGUgbmV3IHllYXIuXHJcblx0XHRcdEBwYXJhbSBtb250aCB7bnVtYmVyfSBUaGUgbmV3IG1vbnRoICgxIHRvIDEyKS5cclxuXHRcdFx0QGV4YW1wbGUgb25DaGFuZ2VNb250aFllYXI6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XHJcblx0YWxlcnQoJ05vdyBpbiAnICsgbW9udGggKyAnLycgKyB5ZWFyKTtcclxuIH0gKi9cclxuXHRcdFx0XHJcblx0XHQvKiogRGF0ZXBpY2tlciBvbiBzZWxlY3QgY2FsbGJhY2suXHJcblx0XHRcdFRyaWdnZXJlZCB3aGVuIGEgZGF0ZSBpcyBzZWxlY3RlZC5cclxuXHRcdFx0QGNhbGxiYWNrIENhbGVuZGFyc1BpY2tlck9uU2VsZWN0XHJcblx0XHRcdEBwYXJhbSBkYXRlcyB7Q0RhdGVbXX0gVGhlIHNlbGVjdGVkIGRhdGUocykuXHJcblx0XHRcdEBleGFtcGxlIG9uU2VsZWN0OiBmdW5jdGlvbihkYXRlcykge1xyXG4gXHRhbGVydCgnU2VsZWN0ZWQgJyArIGRhdGVzKTtcclxuIH0gKi9cclxuXHRcdFx0XHJcblx0XHQvKiogRGF0ZXBpY2tlciBvbiBjbG9zZSBjYWxsYmFjay5cclxuXHRcdFx0VHJpZ2dlcmVkIHdoZW4gYSBwb3B1cCBjYWxlbmRhciBpcyBjbG9zZWQuXHJcblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJPbkNsb3NlXHJcblx0XHRcdEBwYXJhbSBkYXRlcyB7Q0RhdGVbXX0gVGhlIHNlbGVjdGVkIGRhdGUocykuXHJcblx0XHRcdEBleGFtcGxlIG9uQ2xvc2U6IGZ1bmN0aW9uKGRhdGVzKSB7XHJcbiBcdGFsZXJ0KCdTZWxlY3RlZCAnICsgZGF0ZXMpO1xyXG4gfSAqL1xyXG5cdFx0XHJcblx0XHQvKiogRGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIHBsdWdpbi5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJvcGVydHkgW2NhbGVuZGFyPSQuY2FsZW5kYXJzLmluc3RhbmNlKCldIHtDYWxlbmRhcn0gVGhlIGNhbGVuZGFyIGZvciB0aGlzIGRhdGVwaWNrZXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBbcGlja2VyQ2xhc3M9JyddIHtzdHJpbmd9IENTUyBjbGFzcyB0byBhZGQgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUgZGF0ZXBpY2tlci5cclxuXHRcdFx0QHByb3BlcnR5IFtzaG93T25Gb2N1cz10cnVlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gZm9yIHBvcHVwIG9uIGZvY3VzLCA8Y29kZT5mYWxzZTwvY29kZT4gZm9yIG5vdC5cclxuXHRcdFx0QHByb3BlcnR5IFtzaG93VHJpZ2dlcj1udWxsXSB7c3RyaW5nfEVsZW1lbnR8alF1ZXJ5fSBFbGVtZW50IHRvIGJlIGNsb25lZCBmb3IgYSB0cmlnZ2VyLCA8Y29kZT5udWxsPC9jb2RlPiBmb3Igbm9uZS5cclxuXHRcdFx0QHByb3BlcnR5IFtzaG93QW5pbT0nc2hvdyddIHtzdHJpbmd9IE5hbWUgb2YgalF1ZXJ5IGFuaW1hdGlvbiBmb3IgcG9wdXAsICcnIGZvciBubyBhbmltYXRpb24uXHJcblx0XHRcdEBwcm9wZXJ0eSBbc2hvd09wdGlvbnM9bnVsbF0ge29iamVjdH0gT3B0aW9ucyBmb3IgZW5oYW5jZWQgYW5pbWF0aW9ucy5cclxuXHRcdFx0QHByb3BlcnR5IFtzaG93U3BlZWQ9J25vcm1hbCddIHtzdHJpbmd9IER1cmF0aW9uIG9mIGRpc3BsYXkvY2xvc3VyZS5cclxuXHRcdFx0QHByb3BlcnR5IFtwb3B1cENvbnRhaW5lcj1udWxsXSB7c3RyaW5nfEVsZW1lbnR8alF1ZXJ5fSBUaGUgZWxlbWVudCB0byB3aGljaCBhIHBvcHVwIGNhbGVuZGFyIGlzIGFkZGVkLCA8Y29kZT5udWxsPC9jb2RlPiBmb3IgYm9keS5cclxuXHRcdFx0QHByb3BlcnR5IFthbGlnbm1lbnQ9J2JvdHRvbSddIHtzdHJpbmd9IEFsaWdubWVudCBvZiBwb3B1cCAtIHdpdGggbm9taW5hdGVkIGNvcm5lciBvZiBpbnB1dDpcclxuXHRcdFx0XHRcdFx0J3RvcCcgb3IgJ2JvdHRvbScgYWxpZ25zIGRlcGVuZGluZyBvbiBsYW5ndWFnZSBkaXJlY3Rpb24sXHJcblx0XHRcdFx0XHRcdCd0b3BMZWZ0JywgJ3RvcFJpZ2h0JywgJ2JvdHRvbUxlZnQnLCAnYm90dG9tUmlnaHQnLlxyXG5cdFx0XHRAcHJvcGVydHkgW2ZpeGVkV2Vla3M9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBhbHdheXMgc2hvdyA2IHdlZWtzLCA8Y29kZT5mYWxzZTwvY29kZT4gdG8gb25seSBzaG93IGFzIG1hbnkgYXMgYXJlIG5lZWRlZC5cclxuXHRcdFx0QHByb3BlcnR5IFtmaXJzdERheT1udWxsXSB7bnVtYmVyfSBGaXJzdCBkYXkgb2YgdGhlIHdlZWssIDAgPSBTdW5kYXksIDEgPSBNb25kYXksIGV0Yy4sIDxjb2RlPm51bGw8L2NvZGU+IGZvciA8Y29kZT5jYWxlbmRhcjwvY29kZT4gZGVmYXVsdC5cclxuXHRcdFx0QHByb3BlcnR5IFtjYWxjdWxhdGVXZWVrPW51bGxdIHtDYWxlbmRhcnNQaWNrZXJDYWxjdWxhdGVXZWVrfSBDYWxjdWxhdGUgd2VlayBvZiB0aGUgeWVhciBmcm9tIGEgZGF0ZSwgPGNvZGU+bnVsbDwvY29kZT4gZm9yIDxjb2RlPmNhbGVuZGFyPC9jb2RlPiBkZWZhdWx0LlxyXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoc1RvU2hvdz0xXSB7bnVtYmVyfG51bWJlcltdfSBIb3cgbWFueSBtb250aHMgdG8gc2hvdywgY29scyBvciBbcm93cywgY29sc10uXHJcblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhzT2Zmc2V0PTBdIHtudW1iZXJ9IEhvdyBtYW55IG1vbnRocyB0byBvZmZzZXQgdGhlIHByaW1hcnkgbW9udGggYnk7XHJcblx0XHRcdFx0XHRcdG1heSBiZSBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIGRhdGUgYW5kIHJldHVybnMgdGhlIG9mZnNldC5cclxuXHRcdFx0QHByb3BlcnR5IFttb250aHNUb1N0ZXA9MV0ge251bWJlcn0gSG93IG1hbnkgbW9udGhzIHRvIG1vdmUgd2hlbiBwcmV2L25leHQgY2xpY2tlZC5cclxuXHRcdFx0QHByb3BlcnR5IFttb250aHNUb0p1bXA9MTJdIHtudW1iZXJ9IEhvdyBtYW55IG1vbnRocyB0byBtb3ZlIHdoZW4gbGFyZ2UgcHJldi9uZXh0IGNsaWNrZWQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbdXNlTW91c2VXaGVlbD10cnVlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gdXNlIG1vdXNld2hlZWwgaWYgYXZhaWxhYmxlLCA8Y29kZT5mYWxzZTwvY29kZT4gdG8gbmV2ZXIgdXNlIGl0LlxyXG5cdFx0XHRAcHJvcGVydHkgW2NoYW5nZU1vbnRoPXRydWVdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBjaGFuZ2UgbW9udGgveWVhciB2aWEgZHJvcC1kb3duLCA8Y29kZT5mYWxzZTwvY29kZT4gZm9yIG5hdmlnYXRpb24gb25seS5cclxuXHRcdFx0QHByb3BlcnR5IFt5ZWFyUmFuZ2U9J2MtMTA6YysxMCddIHtzdHJpbmd9IFJhbmdlIG9mIHllYXJzIHRvIHNob3cgaW4gZHJvcC1kb3duOiAnYW55JyBmb3IgZGlyZWN0IHRleHQgZW50cnlcclxuXHRcdFx0XHRcdFx0b3IgJ3N0YXJ0OmVuZCcsIHdoZXJlIHN0YXJ0L2VuZCBhcmUgJystbm4nIGZvciByZWxhdGl2ZSB0byB0b2RheVxyXG5cdFx0XHRcdFx0XHRvciAnYystbm4nIGZvciByZWxhdGl2ZSB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGVcclxuXHRcdFx0XHRcdFx0b3IgJ25ubm4nIGZvciBhbiBhYnNvbHV0ZSB5ZWFyLlxyXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dPdGhlck1vbnRocz1mYWxzZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIHNob3cgZGF0ZXMgZnJvbSBvdGhlciBtb250aHMsIDxjb2RlPmZhbHNlPC9jb2RlPiB0byBub3Qgc2hvdyB0aGVtLlxyXG5cdFx0XHRAcHJvcGVydHkgW3NlbGVjdE90aGVyTW9udGhzPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gYWxsb3cgc2VsZWN0aW9uIG9mIGRhdGVzIGZyb20gb3RoZXIgbW9udGhzIHRvby5cclxuXHRcdFx0QHByb3BlcnR5IFtkZWZhdWx0RGF0ZT1udWxsXSB7c3RyaW5nfG51bWJlcnxDRGF0ZX0gRGF0ZSB0byBzaG93IGlmIG5vIG90aGVyIHNlbGVjdGVkLlxyXG5cdFx0XHRAcHJvcGVydHkgW3NlbGVjdERlZmF1bHREYXRlPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gcHJlLXNlbGVjdCB0aGUgZGVmYXVsdCBkYXRlIGlmIG5vIG90aGVyIGlzIGNob3Nlbi5cclxuXHRcdFx0QHByb3BlcnR5IFttaW5EYXRlPW51bGxdIHtzdHJpbmd8bnVtYmVyfENEYXRlfSBUaGUgbWluaW11bSBzZWxlY3RhYmxlIGRhdGUuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbWF4RGF0ZT1udWxsXSB7c3RyaW5nfG51bWJlcnxDRGF0ZX0gVGhlIG1heGltdW0gc2VsZWN0YWJsZSBkYXRlLlxyXG5cdFx0XHRAcHJvcGVydHkgW2RhdGVGb3JtYXQ9J21tL2RkL3l5eXknXSB7c3RyaW5nfSBGb3JtYXQgZm9yIGRhdGVzLlxyXG5cdFx0XHRAcHJvcGVydHkgW2F1dG9TaXplPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gc2l6ZSB0aGUgaW5wdXQgZmllbGQgYWNjb3JkaW5nIHRvIHRoZSBkYXRlIGZvcm1hdC5cclxuXHRcdFx0QHByb3BlcnR5IFtyYW5nZVNlbGVjdD1mYWxzZV0ge2Jvb2xlYW59IEFsbG93cyBmb3Igc2VsZWN0aW5nIGEgZGF0ZSByYW5nZSBvbiBvbmUgZGF0ZSBwaWNrZXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBbcmFuZ2VTZXBhcmF0b3I9JyAtICddIHtzdHJpbmd9IFRleHQgYmV0d2VlbiB0d28gZGF0ZXMgaW4gYSByYW5nZS5cclxuXHRcdFx0QHByb3BlcnR5IFttdWx0aVNlbGVjdD0wXSB7bnVtYmVyfSBNYXhpbXVtIG51bWJlciBvZiBzZWxlY3RhYmxlIGRhdGVzLCB6ZXJvIGZvciBzaW5nbGUgc2VsZWN0LlxyXG5cdFx0XHRAcHJvcGVydHkgW211bHRpU2VwYXJhdG9yPScsJ10ge3N0cmluZ30gVGV4dCBiZXR3ZWVuIG11bHRpcGxlIGRhdGVzLlxyXG5cdFx0XHRAcHJvcGVydHkgW29uRGF0ZT1udWxsXSB7Q2FsZW5kYXJzUGlja2VyT25EYXRlfSBDYWxsYmFjayBhcyBhIGRhdGUgaXMgYWRkZWQgdG8gdGhlIGRhdGVwaWNrZXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBbb25TaG93PW51bGxdIHtDYWxlbmRhcnNQaWNrZXJPblNob3d9IENhbGxiYWNrIGp1c3QgYmVmb3JlIGEgZGF0ZXBpY2tlciBpcyBzaG93bi5cclxuXHRcdFx0QHByb3BlcnR5IFtvbkNoYW5nZU1vbnRoWWVhcj1udWxsXSB7Q2FsZW5kYXJzUGlja2VyT25DaGFuZ2VNb250aFllYXJ9IENhbGxiYWNrIHdoZW4gYSBuZXcgbW9udGgveWVhciBpcyBzZWxlY3RlZC5cclxuXHRcdFx0QHByb3BlcnR5IFtvblNlbGVjdD1udWxsXSB7Q2FsZW5kYXJzUGlja2VyT25TZWxlY3R9IENhbGxiYWNrIHdoZW4gYSBkYXRlIGlzIHNlbGVjdGVkLlxyXG5cdFx0XHRAcHJvcGVydHkgW29uQ2xvc2U9bnVsbF0ge0NhbGVuZGFyc1BpY2tlck9uQ2xvc2V9IENhbGxiYWNrIHdoZW4gYSBkYXRlcGlja2VyIGlzIGNsb3NlZC5cclxuXHRcdFx0QHByb3BlcnR5IFthbHRGaWVsZD1udWxsXSB7c3RyaW5nfEVsZW1lbnR8alF1ZXJ5fSBBbHRlcm5hdGUgZmllbGQgdG8gdXBkYXRlIGluIHN5bmNoIHdpdGggdGhlIGRhdGVwaWNrZXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBbYWx0Rm9ybWF0PW51bGxdIHtzdHJpbmd9IERhdGUgZm9ybWF0IGZvciBhbHRlcm5hdGUgZmllbGQsIGRlZmF1bHRzIHRvIDxjb2RlPmRhdGVGb3JtYXQ8L2NvZGU+LlxyXG5cdFx0XHRAcHJvcGVydHkgW2NvbnN0cmFpbklucHV0PXRydWVdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBjb25zdHJhaW4gdHlwZWQgaW5wdXQgdG8gPGNvZGU+ZGF0ZUZvcm1hdDwvY29kZT4gYWxsb3dlZCBjaGFyYWN0ZXJzLlxyXG5cdFx0XHRAcHJvcGVydHkgW2NvbW1hbmRzQXNEYXRlRm9ybWF0PWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gYXBwbHlcclxuXHRcdFx0XHRcdFx0PGNvZGU+PGEgaHJlZj1cIiNmb3JtYXREYXRlXCI+Zm9ybWF0RGF0ZTwvYT48L2NvZGU+IHRvIHRoZSBjb21tYW5kIHRleHRzLlxyXG5cdFx0XHRAcHJvcGVydHkgW2NvbW1hbmRzPXRoaXMuY29tbWFuZHNdIHtvYmplY3R9IENvbW1hbmQgYWN0aW9ucyB0aGF0IG1heSBiZSBhZGRlZCB0byBhIGxheW91dCBieSBuYW1lLiAqL1xyXG5cdFx0ZGVmYXVsdE9wdGlvbnM6IHtcclxuXHRcdFx0Y2FsZW5kYXI6ICQuY2FsZW5kYXJzLmluc3RhbmNlKCksXHJcblx0XHRcdHBpY2tlckNsYXNzOiAnJyxcclxuXHRcdFx0c2hvd09uRm9jdXM6IHRydWUsXHJcblx0XHRcdHNob3dUcmlnZ2VyOiBudWxsLFxyXG5cdFx0XHRzaG93QW5pbTogJ3Nob3cnLFxyXG5cdFx0XHRzaG93T3B0aW9uczoge30sXHJcblx0XHRcdHNob3dTcGVlZDogJ25vcm1hbCcsXHJcblx0XHRcdHBvcHVwQ29udGFpbmVyOiBudWxsLFxyXG5cdFx0XHRhbGlnbm1lbnQ6ICdib3R0b20nLFxyXG5cdFx0XHRmaXhlZFdlZWtzOiBmYWxzZSxcclxuXHRcdFx0Zmlyc3REYXk6IG51bGwsXHJcblx0XHRcdGNhbGN1bGF0ZVdlZWs6IG51bGwsXHJcblx0XHRcdG1vbnRoc1RvU2hvdzogMSxcclxuXHRcdFx0bW9udGhzT2Zmc2V0OiAwLFxyXG5cdFx0XHRtb250aHNUb1N0ZXA6IDEsXHJcblx0XHRcdG1vbnRoc1RvSnVtcDogMTIsXHJcblx0XHRcdHVzZU1vdXNlV2hlZWw6IHRydWUsXHJcblx0XHRcdGNoYW5nZU1vbnRoOiB0cnVlLFxyXG5cdFx0XHR5ZWFyUmFuZ2U6ICdjLTEwOmMrMTAnLFxyXG5cdFx0XHRzaG93T3RoZXJNb250aHM6IGZhbHNlLFxyXG5cdFx0XHRzZWxlY3RPdGhlck1vbnRoczogZmFsc2UsXHJcblx0XHRcdGRlZmF1bHREYXRlOiBudWxsLFxyXG5cdFx0XHRzZWxlY3REZWZhdWx0RGF0ZTogZmFsc2UsXHJcblx0XHRcdG1pbkRhdGU6IG51bGwsXHJcblx0XHRcdG1heERhdGU6IG51bGwsXHJcblx0XHRcdGRhdGVGb3JtYXQ6IG51bGwsXHJcblx0XHRcdGF1dG9TaXplOiBmYWxzZSxcclxuXHRcdFx0cmFuZ2VTZWxlY3Q6IGZhbHNlLFxyXG5cdFx0XHRyYW5nZVNlcGFyYXRvcjogJyAtICcsXHJcblx0XHRcdG11bHRpU2VsZWN0OiAwLFxyXG5cdFx0XHRtdWx0aVNlcGFyYXRvcjogJywnLFxyXG5cdFx0XHRvbkRhdGU6IG51bGwsXHJcblx0XHRcdG9uU2hvdzogbnVsbCxcclxuXHRcdFx0b25DaGFuZ2VNb250aFllYXI6IG51bGwsXHJcblx0XHRcdG9uU2VsZWN0OiBudWxsLFxyXG5cdFx0XHRvbkNsb3NlOiBudWxsLFxyXG5cdFx0XHRhbHRGaWVsZDogbnVsbCxcclxuXHRcdFx0YWx0Rm9ybWF0OiBudWxsLFxyXG5cdFx0XHRjb25zdHJhaW5JbnB1dDogdHJ1ZSxcclxuXHRcdFx0Y29tbWFuZHNBc0RhdGVGb3JtYXQ6IGZhbHNlLFxyXG5cdFx0XHRjb21tYW5kczoge30gLy8gdGhpcy5jb21tYW5kc1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogTG9jYWxpc2F0aW9ucyBmb3IgdGhlIHBsdWdpbi5cclxuXHRcdFx0RW50cmllcyBhcmUgb2JqZWN0cyBpbmRleGVkIGJ5IHRoZSBsYW5ndWFnZSBjb2RlICgnJyBiZWluZyB0aGUgZGVmYXVsdCBVUy9FbmdsaXNoKS5cclxuXHRcdFx0RWFjaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcy5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJvcGVydHkgW3JlbmRlcmVyPXRoaXMuZGVmYXVsdFJlbmRlcmVyXSB7c3RyaW5nfSBUaGUgcmVuZGVyaW5nIHRlbXBsYXRlcy5cclxuXHRcdFx0QHByb3BlcnR5IFtwcmV2VGV4dD0nJmx0O1ByZXYnXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgcHJldmlvdXMgbW9udGggY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFtwcmV2U3RhdHVzPSdTaG93IHRoZSBwcmV2aW91cyBtb250aCddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgcHJldmlvdXMgbW9udGggY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFtwcmV2SnVtcFRleHQ9JyZsdDsmbHQ7J10ge3N0cmluZ30gVGV4dCBmb3IgdGhlIHByZXZpb3VzIHllYXIgY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFtwcmV2SnVtcFN0YXR1cz0nU2hvdyB0aGUgcHJldmlvdXMgeWVhciddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgcHJldmlvdXMgeWVhciBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW25leHRUZXh0PSdOZXh0Jmd0OyddIHtzdHJpbmd9IFRleHQgZm9yIHRoZSBuZXh0IG1vbnRoIGNvbW1hbmQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbmV4dFN0YXR1cz0nU2hvdyB0aGUgbmV4dCBtb250aCddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgbmV4dCBtb250aCBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW25leHRKdW1wVGV4dD0nJmd0OyZndDsnXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgbmV4dCB5ZWFyIGNvbW1hbmQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbmV4dEp1bXBTdGF0dXM9J1Nob3cgdGhlIG5leHQgeWVhciddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgbmV4dCB5ZWFyIGNvbW1hbmQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbY3VycmVudFRleHQ9J0N1cnJlbnQnXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgY3VycmVudCBtb250aCBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW2N1cnJlbnRTdGF0dXM9J1Nob3cgdGhlIGN1cnJlbnQgbW9udGgnXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3IgdGhlIGN1cnJlbnQgbW9udGggY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFt0b2RheVRleHQ9J1RvZGF5J10ge3N0cmluZ30gVGV4dCBmb3IgdGhlIHRvZGF5J3MgbW9udGggY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFt0b2RheVN0YXR1cz0nU2hvdyB0b2RheVxcJ3MgbW9udGgnXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3IgdGhlIHRvZGF5J3MgbW9udGggY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFtjbGVhclRleHQ9J0NsZWFyJ10ge3N0cmluZ30gVGV4dCBmb3IgdGhlIGNsZWFyIGNvbW1hbmQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbY2xlYXJTdGF0dXM9J0NsZWFyIGFsbCB0aGUgZGF0ZXMnXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3IgdGhlIGNsZWFyIGNvbW1hbmQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbY2xvc2VUZXh0PSdDbG9zZSddIHtzdHJpbmd9IFRleHQgZm9yIHRoZSBjbG9zZSBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW2Nsb3NlU3RhdHVzPSdDbG9zZSB0aGUgZGF0ZXBpY2tlciddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgY2xvc2UgY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFt5ZWFyU3RhdHVzPSdDaGFuZ2UgdGhlIHllYXInXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3IgeWVhciBzZWxlY3Rpb24uXHJcblx0XHRcdEBwcm9wZXJ0eSBbZWFybGllclRleHQ9JyYjMTYwOyYjMTYwO+KWsiddIHtzdHJpbmd9IFRleHQgZm9yIGVhcmxpZXIgeWVhcnMuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbGF0ZXJUZXh0PScmIzE2MDsmIzE2MDvilrwnXSB7c3RyaW5nfSBUZXh0IGZvciBsYXRlciB5ZWFycy5cclxuXHRcdFx0QHByb3BlcnR5IFttb250aFN0YXR1cz0nQ2hhbmdlIHRoZSBtb250aCddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciBtb250aCBzZWxlY3Rpb24uXHJcblx0XHRcdEBwcm9wZXJ0eSBbd2Vla1RleHQ9J1drJ10ge3N0cmluZ30gVGV4dCBmb3Igd2VlayBvZiB0aGUgeWVhciBjb2x1bW4gaGVhZGVyLlxyXG5cdFx0XHRAcHJvcGVydHkgW3dlZWtTdGF0dXM9J1dlZWsgb2YgdGhlIHllYXInXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3Igd2VlayBvZiB0aGUgeWVhciBjb2x1bW4gaGVhZGVyLlxyXG5cdFx0XHRAcHJvcGVydHkgW2RheVN0YXR1cz0nU2VsZWN0IERELCYjMTYwO00mIzE2MDtkLCYjMTYwO3l5eXknXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3Igc2VsZWN0YWJsZSBkYXlzLlxyXG5cdFx0XHRAcHJvcGVydHkgW2RlZmF1bHRTdGF0dXM9J1NlbGVjdCBhIGRhdGUnXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBzaG93biBieSBkZWZhdWx0LlxyXG5cdFx0XHRAcHJvcGVydHkgW2lzUlRMPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgbGFuZ3VhZ2UgaXMgcmlnaHQtdG8tbGVmdC4gKi9cclxuXHRcdHJlZ2lvbmFsT3B0aW9uczogeyAvLyBBdmFpbGFibGUgcmVnaW9uYWwgc2V0dGluZ3MsIGluZGV4ZWQgYnkgbGFuZ3VhZ2UvY291bnRyeSBjb2RlXHJcblx0XHRcdCcnOiB7IC8vIERlZmF1bHQgcmVnaW9uYWwgc2V0dGluZ3MgLSBFbmdsaXNoL1VTXHJcblx0XHRcdFx0cmVuZGVyZXI6IHt9LCAvLyB0aGlzLmRlZmF1bHRSZW5kZXJlclxyXG5cdFx0XHRcdHByZXZUZXh0OiAnJmx0O1ByZXYnLFxyXG5cdFx0XHRcdHByZXZTdGF0dXM6ICdTaG93IHRoZSBwcmV2aW91cyBtb250aCcsXHJcblx0XHRcdFx0cHJldkp1bXBUZXh0OiAnJmx0OyZsdDsnLFxyXG5cdFx0XHRcdHByZXZKdW1wU3RhdHVzOiAnU2hvdyB0aGUgcHJldmlvdXMgeWVhcicsXHJcblx0XHRcdFx0bmV4dFRleHQ6ICdOZXh0Jmd0OycsXHJcblx0XHRcdFx0bmV4dFN0YXR1czogJ1Nob3cgdGhlIG5leHQgbW9udGgnLFxyXG5cdFx0XHRcdG5leHRKdW1wVGV4dDogJyZndDsmZ3Q7JyxcclxuXHRcdFx0XHRuZXh0SnVtcFN0YXR1czogJ1Nob3cgdGhlIG5leHQgeWVhcicsXHJcblx0XHRcdFx0Y3VycmVudFRleHQ6ICdDdXJyZW50JyxcclxuXHRcdFx0XHRjdXJyZW50U3RhdHVzOiAnU2hvdyB0aGUgY3VycmVudCBtb250aCcsXHJcblx0XHRcdFx0dG9kYXlUZXh0OiAnVG9kYXknLFxyXG5cdFx0XHRcdHRvZGF5U3RhdHVzOiAnU2hvdyB0b2RheVxcJ3MgbW9udGgnLFxyXG5cdFx0XHRcdGNsZWFyVGV4dDogJ0NsZWFyJyxcclxuXHRcdFx0XHRjbGVhclN0YXR1czogJ0NsZWFyIGFsbCB0aGUgZGF0ZXMnLFxyXG5cdFx0XHRcdGNsb3NlVGV4dDogJ0Nsb3NlJyxcclxuXHRcdFx0XHRjbG9zZVN0YXR1czogJ0Nsb3NlIHRoZSBkYXRlcGlja2VyJyxcclxuXHRcdFx0XHR5ZWFyU3RhdHVzOiAnQ2hhbmdlIHRoZSB5ZWFyJyxcclxuXHRcdFx0XHRlYXJsaWVyVGV4dDogJyYjMTYwOyYjMTYwO+KWsicsXHJcblx0XHRcdFx0bGF0ZXJUZXh0OiAnJiMxNjA7JiMxNjA74pa8JyxcclxuXHRcdFx0XHRtb250aFN0YXR1czogJ0NoYW5nZSB0aGUgbW9udGgnLFxyXG5cdFx0XHRcdHdlZWtUZXh0OiAnV2snLFxyXG5cdFx0XHRcdHdlZWtTdGF0dXM6ICdXZWVrIG9mIHRoZSB5ZWFyJyxcclxuXHRcdFx0XHRkYXlTdGF0dXM6ICdTZWxlY3QgREQsIE0gZCwgeXl5eScsXHJcblx0XHRcdFx0ZGVmYXVsdFN0YXR1czogJ1NlbGVjdCBhIGRhdGUnLFxyXG5cdFx0XHRcdGlzUlRMOiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHQvKiogTmFtZXMgb2YgZ2V0dGVyIG1ldGhvZHMgLSB0aG9zZSB0aGF0IGNhbid0IGJlIGNoYWluZWQuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXIgKi9cclxuXHRcdF9nZXR0ZXJzOiBbJ2dldERhdGUnLCAnaXNEaXNhYmxlZCcsICdpc1NlbGVjdGFibGUnLCAncmV0cmlldmVEYXRlJ10sXHJcblxyXG5cdFx0X2Rpc2FibGVkOiBbXSxcclxuXHRcdFxyXG5cdFx0X3BvcHVwQ2xhc3M6ICdjYWxlbmRhcnMtcG9wdXAnLCAvLyBNYXJrZXIgZm9yIHBvcHVwIGRpdmlzaW9uXHJcblx0XHRfdHJpZ2dlckNsYXNzOiAnY2FsZW5kYXJzLXRyaWdnZXInLCAvLyBNYXJrZXIgZm9yIHRyaWdnZXIgZWxlbWVudFxyXG5cdFx0X2Rpc2FibGVDbGFzczogJ2NhbGVuZGFycy1kaXNhYmxlJywgLy8gTWFya2VyIGZvciBkaXNhYmxlZCBlbGVtZW50XHJcblx0XHRfbW9udGhZZWFyQ2xhc3M6ICdjYWxlbmRhcnMtbW9udGgteWVhcicsIC8vIE1hcmtlciBmb3IgbW9udGgveWVhciBpbnB1dHNcclxuXHRcdF9jdXJNb250aENsYXNzOiAnY2FsZW5kYXJzLW1vbnRoLScsIC8vIE1hcmtlciBmb3IgY3VycmVudCBtb250aC95ZWFyXHJcblx0XHRfYW55WWVhckNsYXNzOiAnY2FsZW5kYXJzLWFueS15ZWFyJywgLy8gTWFya2VyIGZvciB5ZWFyIGRpcmVjdCBpbnB1dFxyXG5cdFx0X2N1ckRvV0NsYXNzOiAnY2FsZW5kYXJzLWRvdy0nLCAvLyBNYXJrZXIgZm9yIGRheSBvZiB3ZWVrXHJcblxyXG5cdFx0X2luaXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR0aGlzLmRlZmF1bHRPcHRpb25zLmNvbW1hbmRzID0gdGhpcy5jb21tYW5kcztcclxuXHRcdFx0dGhpcy5yZWdpb25hbE9wdGlvbnNbJyddLnJlbmRlcmVyID0gdGhpcy5kZWZhdWx0UmVuZGVyZXI7XHJcblx0XHRcdHRoaXMuX3N1cGVyKCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdF9pbnN0U2V0dGluZ3M6IGZ1bmN0aW9uKGVsZW0sIG9wdGlvbnMpIHtcclxuXHRcdFx0cmV0dXJuIHtzZWxlY3RlZERhdGVzOiBbXSwgZHJhd0RhdGU6IG51bGwsIHBpY2tpbmdSYW5nZTogZmFsc2UsXHJcblx0XHRcdFx0aW5saW5lOiAoJC5pbkFycmF5KGVsZW1bMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgWydkaXYnLCAnc3BhbiddKSA+IC0xKSxcclxuXHRcdFx0XHRnZXQ6IGZ1bmN0aW9uKG5hbWUpIHsgLy8gR2V0IGEgc2V0dGluZyB2YWx1ZSwgY29tcHV0aW5nIGlmIG5lY2Vzc2FyeVxyXG5cdFx0XHRcdFx0aWYgKCQuaW5BcnJheShuYW1lLCBbJ2RlZmF1bHREYXRlJywgJ21pbkRhdGUnLCAnbWF4RGF0ZSddKSA+IC0xKSB7IC8vIERlY29kZSBkYXRlIHNldHRpbmdzXHJcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm9wdGlvbnMuY2FsZW5kYXIuZGV0ZXJtaW5lRGF0ZSh0aGlzLm9wdGlvbnNbbmFtZV0sIG51bGwsXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZERhdGVzWzBdLCB0aGlzLmdldCgnZGF0ZUZvcm1hdCcpLCB0aGlzLmdldENvbmZpZygpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChuYW1lID09PSAnZGF0ZUZvcm1hdCcpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5kYXRlRm9ybWF0IHx8IHRoaXMub3B0aW9ucy5jYWxlbmRhci5sb2NhbC5kYXRlRm9ybWF0O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub3B0aW9uc1tuYW1lXTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGN1ck1pbkRhdGU6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuICh0aGlzLnBpY2tpbmdSYW5nZSA/IHRoaXMuc2VsZWN0ZWREYXRlc1swXSA6IHRoaXMuZ2V0KCdtaW5EYXRlJykpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0Z2V0Q29uZmlnOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHJldHVybiB7ZGF5TmFtZXNTaG9ydDogdGhpcy5vcHRpb25zLmRheU5hbWVzU2hvcnQsIGRheU5hbWVzOiB0aGlzLm9wdGlvbnMuZGF5TmFtZXMsXHJcblx0XHRcdFx0XHRcdG1vbnRoTmFtZXNTaG9ydDogdGhpcy5vcHRpb25zLm1vbnRoTmFtZXNTaG9ydCwgbW9udGhOYW1lczogdGhpcy5vcHRpb25zLm1vbnRoTmFtZXMsXHJcblx0XHRcdFx0XHRcdGNhbGN1bGF0ZVdlZWs6IHRoaXMub3B0aW9ucy5jYWxjdWxhdGVXZWVrLCBzaG9ydFllYXJDdXRvZmY6IHRoaXMub3B0aW9ucy5zaG9ydFllYXJDdXRvZmZ9O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHRcdH0sXHJcblxyXG5cdFx0X3Bvc3RBdHRhY2g6IGZ1bmN0aW9uKGVsZW0sIGluc3QpIHtcclxuXHRcdFx0aWYgKGluc3QuaW5saW5lKSB7XHJcblx0XHRcdFx0aW5zdC5kcmF3RGF0ZSA9IHBsdWdpbi5fY2hlY2tNaW5NYXgoKGluc3Quc2VsZWN0ZWREYXRlc1swXSB8fFxyXG5cdFx0XHRcdFx0aW5zdC5nZXQoJ2RlZmF1bHREYXRlJykgfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCkpLm5ld0RhdGUoKSwgaW5zdCk7XHJcblx0XHRcdFx0aW5zdC5wcmV2RGF0ZSA9IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpO1xyXG5cdFx0XHRcdHRoaXMuX3VwZGF0ZShlbGVtWzBdKTtcclxuXHRcdFx0XHRpZiAoJC5mbi5tb3VzZXdoZWVsKSB7XHJcblx0XHRcdFx0XHRlbGVtLm1vdXNld2hlZWwodGhpcy5fZG9Nb3VzZVdoZWVsKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5fYXR0YWNobWVudHMoZWxlbSwgaW5zdCk7XHJcblx0XHRcdFx0ZWxlbS5vbigna2V5ZG93bi4nICsgaW5zdC5uYW1lLCB0aGlzLl9rZXlEb3duKS5vbigna2V5cHJlc3MuJyArIGluc3QubmFtZSwgdGhpcy5fa2V5UHJlc3MpLlxyXG5cdFx0XHRcdFx0b24oJ2tleXVwLicgKyBpbnN0Lm5hbWUsIHRoaXMuX2tleVVwKTtcclxuXHRcdFx0XHRpZiAoZWxlbS5hdHRyKCdkaXNhYmxlZCcpKSB7XHJcblx0XHRcdFx0XHR0aGlzLmRpc2FibGUoZWxlbVswXSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdF9vcHRpb25zQ2hhbmdlZDogZnVuY3Rpb24oZWxlbSwgaW5zdCwgb3B0aW9ucykge1xyXG5cdFx0XHRpZiAob3B0aW9ucy5jYWxlbmRhciAmJiBvcHRpb25zLmNhbGVuZGFyICE9PSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIpIHtcclxuXHRcdFx0XHR2YXIgZGlzY2FyZERhdGUgPSBmdW5jdGlvbihuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gKHR5cGVvZiBpbnN0Lm9wdGlvbnNbbmFtZV0gPT09ICdvYmplY3QnID8gbnVsbCA6IGluc3Qub3B0aW9uc1tuYW1lXSk7XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRvcHRpb25zID0gJC5leHRlbmQoe2RlZmF1bHREYXRlOiBkaXNjYXJkRGF0ZSgnZGVmYXVsdERhdGUnKSxcclxuXHRcdFx0XHRcdG1pbkRhdGU6IGRpc2NhcmREYXRlKCdtaW5EYXRlJyksIG1heERhdGU6IGRpc2NhcmREYXRlKCdtYXhEYXRlJyl9LCBvcHRpb25zKTtcclxuXHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXMgPSBbXTtcclxuXHRcdFx0XHRpbnN0LmRyYXdEYXRlID0gbnVsbDtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgZGF0ZXMgPSBpbnN0LnNlbGVjdGVkRGF0ZXM7XHJcblx0XHRcdCQuZXh0ZW5kKGluc3Qub3B0aW9ucywgb3B0aW9ucyk7XHJcblx0XHRcdHRoaXMuc2V0RGF0ZShlbGVtWzBdLCBkYXRlcywgbnVsbCwgZmFsc2UsIHRydWUpO1xyXG5cdFx0XHRpbnN0LnBpY2tpbmdSYW5nZSA9IGZhbHNlO1xyXG5cdFx0XHR2YXIgY2FsZW5kYXIgPSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXI7XHJcblx0XHRcdHZhciBkZWZhdWx0RGF0ZSA9IGluc3QuZ2V0KCdkZWZhdWx0RGF0ZScpO1xyXG5cdFx0XHRpbnN0LmRyYXdEYXRlID0gdGhpcy5fY2hlY2tNaW5NYXgoKGRlZmF1bHREYXRlID8gZGVmYXVsdERhdGUgOiBpbnN0LmRyYXdEYXRlKSB8fFxyXG5cdFx0XHRcdGRlZmF1bHREYXRlIHx8IGNhbGVuZGFyLnRvZGF5KCksIGluc3QpLm5ld0RhdGUoKTtcclxuXHRcdFx0aWYgKCFpbnN0LmlubGluZSkge1xyXG5cdFx0XHRcdHRoaXMuX2F0dGFjaG1lbnRzKGVsZW0sIGluc3QpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChpbnN0LmlubGluZSB8fCBpbnN0LmRpdikge1xyXG5cdFx0XHRcdHRoaXMuX3VwZGF0ZShlbGVtWzBdKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQXR0YWNoIGV2ZW50cyBhbmQgdHJpZ2dlciwgaWYgbmVjZXNzYXJ5LlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtqUXVlcnl9IFRoZSBjb250cm9sIHRvIGFmZmVjdC5cclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuICovXHJcblx0XHRfYXR0YWNobWVudHM6IGZ1bmN0aW9uKGVsZW0sIGluc3QpIHtcclxuXHRcdFx0ZWxlbS5vZmYoJ2ZvY3VzLicgKyBpbnN0Lm5hbWUpO1xyXG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLnNob3dPbkZvY3VzKSB7XHJcblx0XHRcdFx0ZWxlbS5vbignZm9jdXMuJyArIGluc3QubmFtZSwgdGhpcy5zaG93KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoaW5zdC50cmlnZ2VyKSB7XHJcblx0XHRcdFx0aW5zdC50cmlnZ2VyLnJlbW92ZSgpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciB0cmlnZ2VyID0gaW5zdC5vcHRpb25zLnNob3dUcmlnZ2VyO1xyXG5cdFx0XHRpbnN0LnRyaWdnZXIgPSAoIXRyaWdnZXIgPyAkKFtdKSA6XHJcblx0XHRcdFx0JCh0cmlnZ2VyKS5jbG9uZSgpLnJlbW92ZUF0dHIoJ2lkJykuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKVxyXG5cdFx0XHRcdFx0W2luc3Qub3B0aW9ucy5pc1JUTCA/ICdpbnNlcnRCZWZvcmUnIDogJ2luc2VydEFmdGVyJ10oZWxlbSkuXHJcblx0XHRcdFx0XHRjbGljayhmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0aWYgKCFwbHVnaW4uaXNEaXNhYmxlZChlbGVtWzBdKSkge1xyXG5cdFx0XHRcdFx0XHRcdHBsdWdpbltwbHVnaW4uY3VySW5zdCA9PT0gaW5zdCA/ICdoaWRlJyA6ICdzaG93J10oZWxlbVswXSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pKTtcclxuXHRcdFx0dGhpcy5fYXV0b1NpemUoZWxlbSwgaW5zdCk7XHJcblx0XHRcdHZhciBkYXRlcyA9IHRoaXMuX2V4dHJhY3REYXRlcyhpbnN0LCBlbGVtLnZhbCgpKTtcclxuXHRcdFx0aWYgKGRhdGVzKSB7XHJcblx0XHRcdFx0dGhpcy5zZXREYXRlKGVsZW1bMF0sIGRhdGVzLCBudWxsLCB0cnVlKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgZGVmYXVsdERhdGUgPSBpbnN0LmdldCgnZGVmYXVsdERhdGUnKTtcclxuXHRcdFx0aWYgKGluc3Qub3B0aW9ucy5zZWxlY3REZWZhdWx0RGF0ZSAmJiBkZWZhdWx0RGF0ZSAmJiBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdFx0dGhpcy5zZXREYXRlKGVsZW1bMF0sIChkZWZhdWx0RGF0ZSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKSkubmV3RGF0ZSgpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQXBwbHkgdGhlIG1heGltdW0gbGVuZ3RoIGZvciB0aGUgZGF0ZSBmb3JtYXQuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGVsZW0ge2pRdWVyeX0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy4gKi9cclxuXHRcdF9hdXRvU2l6ZTogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xyXG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLmF1dG9TaXplICYmICFpbnN0LmlubGluZSkge1xyXG5cdFx0XHRcdHZhciBjYWxlbmRhciA9IGluc3Qub3B0aW9ucy5jYWxlbmRhcjtcclxuXHRcdFx0XHR2YXIgZGF0ZSA9IGNhbGVuZGFyLm5ld0RhdGUoMjAwOSwgMTAsIDIwKTsgLy8gRW5zdXJlIGRvdWJsZSBkaWdpdHNcclxuXHRcdFx0XHR2YXIgZGF0ZUZvcm1hdCA9IGluc3QuZ2V0KCdkYXRlRm9ybWF0Jyk7XHJcblx0XHRcdFx0aWYgKGRhdGVGb3JtYXQubWF0Y2goL1tETV0vKSkge1xyXG5cdFx0XHRcdFx0dmFyIGZpbmRNYXggPSBmdW5jdGlvbihuYW1lcykge1xyXG5cdFx0XHRcdFx0XHR2YXIgbWF4ID0gMDtcclxuXHRcdFx0XHRcdFx0dmFyIG1heEkgPSAwO1xyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKG5hbWVzW2ldLmxlbmd0aCA+IG1heCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0bWF4ID0gbmFtZXNbaV0ubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRcdFx0bWF4SSA9IGk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHJldHVybiBtYXhJO1xyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGRhdGUubW9udGgoZmluZE1heChjYWxlbmRhci5sb2NhbFtkYXRlRm9ybWF0Lm1hdGNoKC9NTS8pID8gLy8gTG9uZ2VzdCBtb250aFxyXG5cdFx0XHRcdFx0XHQnbW9udGhOYW1lcycgOiAnbW9udGhOYW1lc1Nob3J0J10pICsgMSk7XHJcblx0XHRcdFx0XHRkYXRlLmRheShmaW5kTWF4KGNhbGVuZGFyLmxvY2FsW2RhdGVGb3JtYXQubWF0Y2goL0RELykgPyAvLyBMb25nZXN0IGRheVxyXG5cdFx0XHRcdFx0XHQnZGF5TmFtZXMnIDogJ2RheU5hbWVzU2hvcnQnXSkgKyAyMCAtIGRhdGUuZGF5T2ZXZWVrKCkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpbnN0LmVsZW0uYXR0cignc2l6ZScsIGRhdGUuZm9ybWF0RGF0ZShkYXRlRm9ybWF0KS5sZW5ndGgpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdF9wcmVEZXN0cm95OiBmdW5jdGlvbihlbGVtLCBpbnN0KSB7XHJcblx0XHRcdGlmIChpbnN0LnRyaWdnZXIpIHtcclxuXHRcdFx0XHRpbnN0LnRyaWdnZXIucmVtb3ZlKCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxlbS5lbXB0eSgpLm9mZignLicgKyBpbnN0Lm5hbWUpO1xyXG5cdFx0XHRpZiAoaW5zdC5pbmxpbmUgJiYgJC5mbi5tb3VzZXdoZWVsKSB7XHJcblx0XHRcdFx0ZWxlbS51bm1vdXNld2hlZWwoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIWluc3QuaW5saW5lICYmIGluc3Qub3B0aW9ucy5hdXRvU2l6ZSkge1xyXG5cdFx0XHRcdGVsZW0ucmVtb3ZlQXR0cignc2l6ZScpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBBcHBseSBtdWx0aXBsZSBldmVudCBmdW5jdGlvbnMuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIGZucyB7ZnVuY3Rpb259IFRoZSBmdW5jdGlvbnMgdG8gYXBwbHkuXHJcblx0XHRcdEBleGFtcGxlIG9uU2hvdzogbXVsdGlwbGVFdmVudHMoZm4xLCBmbjIsIC4uLikgKi9cclxuXHRcdG11bHRpcGxlRXZlbnRzOiBmdW5jdGlvbihmbnMpIHtcclxuXHRcdFx0dmFyIGZ1bmNzID0gYXJndW1lbnRzO1xyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oYXJncykge1xyXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3MubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGZ1bmNzW2ldLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRW5hYmxlIHRoZSBjb250cm9sLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXHJcblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdlbmFibGUnKSAqL1xyXG5cdFx0ZW5hYmxlOiBmdW5jdGlvbihlbGVtKSB7XHJcblx0XHRcdGVsZW0gPSAkKGVsZW0pO1xyXG5cdFx0XHRpZiAoIWVsZW0uaGFzQ2xhc3ModGhpcy5fZ2V0TWFya2VyKCkpKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKGluc3QuaW5saW5lKSB7XHJcblx0XHRcdFx0ZWxlbS5jaGlsZHJlbignLicgKyB0aGlzLl9kaXNhYmxlQ2xhc3MpLnJlbW92ZSgpLmVuZCgpLlxyXG5cdFx0XHRcdFx0ZmluZCgnYnV0dG9uLHNlbGVjdCcpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpLmVuZCgpLlxyXG5cdFx0XHRcdFx0ZmluZCgnYScpLmF0dHIoJ2hyZWYnLCAnamF2YXNjcmlwdDp2b2lkKDApJyk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0ZWxlbS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcclxuXHRcdFx0XHRpbnN0LnRyaWdnZXIuZmlsdGVyKCdidXR0b24uJyArIHRoaXMuX3RyaWdnZXJDbGFzcykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSkuZW5kKCkuXHJcblx0XHRcdFx0XHRmaWx0ZXIoJ2ltZy4nICsgdGhpcy5fdHJpZ2dlckNsYXNzKS5jc3Moe29wYWNpdHk6ICcxLjAnLCBjdXJzb3I6ICcnfSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5fZGlzYWJsZWQgPSAkLm1hcCh0aGlzLl9kaXNhYmxlZCxcclxuXHRcdFx0XHRmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gKHZhbHVlID09PSBlbGVtWzBdID8gbnVsbCA6IHZhbHVlKTsgfSk7IC8vIERlbGV0ZSBlbnRyeVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGlzYWJsZSB0aGUgY29udHJvbC5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxyXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnZGlzYWJsZScpICovXHJcblx0XHRkaXNhYmxlOiBmdW5jdGlvbihlbGVtKSB7XHJcblx0XHRcdGVsZW0gPSAkKGVsZW0pO1xyXG5cdFx0XHRpZiAoIWVsZW0uaGFzQ2xhc3ModGhpcy5fZ2V0TWFya2VyKCkpKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKGluc3QuaW5saW5lKSB7XHJcblx0XHRcdFx0dmFyIGlubGluZSA9IGVsZW0uY2hpbGRyZW4oJzpsYXN0Jyk7XHJcblx0XHRcdFx0dmFyIG9mZnNldCA9IGlubGluZS5vZmZzZXQoKTtcclxuXHRcdFx0XHR2YXIgcmVsT2Zmc2V0ID0ge2xlZnQ6IDAsIHRvcDogMH07XHJcblx0XHRcdFx0aW5saW5lLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0aWYgKCQodGhpcykuY3NzKCdwb3NpdGlvbicpID09PSAncmVsYXRpdmUnKSB7XHJcblx0XHRcdFx0XHRcdHJlbE9mZnNldCA9ICQodGhpcykub2Zmc2V0KCk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHR2YXIgekluZGV4ID0gZWxlbS5jc3MoJ3pJbmRleCcpO1xyXG5cdFx0XHRcdHpJbmRleCA9ICh6SW5kZXggPT09ICdhdXRvJyA/IDAgOiBwYXJzZUludCh6SW5kZXgsIDEwKSkgKyAxO1xyXG5cdFx0XHRcdGVsZW0ucHJlcGVuZCgnPGRpdiBjbGFzcz1cIicgKyB0aGlzLl9kaXNhYmxlQ2xhc3MgKyAnXCIgc3R5bGU9XCInICtcclxuXHRcdFx0XHRcdCd3aWR0aDogJyArIGlubGluZS5vdXRlcldpZHRoKCkgKyAncHg7IGhlaWdodDogJyArIGlubGluZS5vdXRlckhlaWdodCgpICtcclxuXHRcdFx0XHRcdCdweDsgbGVmdDogJyArIChvZmZzZXQubGVmdCAtIHJlbE9mZnNldC5sZWZ0KSArICdweDsgdG9wOiAnICtcclxuXHRcdFx0XHRcdChvZmZzZXQudG9wIC0gcmVsT2Zmc2V0LnRvcCkgKyAncHg7IHotaW5kZXg6ICcgKyB6SW5kZXggKyAnXCI+PC9kaXY+JykuXHJcblx0XHRcdFx0XHRmaW5kKCdidXR0b24sc2VsZWN0JykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKS5lbmQoKS5cclxuXHRcdFx0XHRcdGZpbmQoJ2EnKS5yZW1vdmVBdHRyKCdocmVmJyk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0ZWxlbS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xyXG5cdFx0XHRcdGluc3QudHJpZ2dlci5maWx0ZXIoJ2J1dHRvbi4nICsgdGhpcy5fdHJpZ2dlckNsYXNzKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpLmVuZCgpLlxyXG5cdFx0XHRcdFx0ZmlsdGVyKCdpbWcuJyArIHRoaXMuX3RyaWdnZXJDbGFzcykuY3NzKHtvcGFjaXR5OiAnMC41JywgY3Vyc29yOiAnZGVmYXVsdCd9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLl9kaXNhYmxlZCA9ICQubWFwKHRoaXMuX2Rpc2FibGVkLFxyXG5cdFx0XHRcdGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiAodmFsdWUgPT09IGVsZW1bMF0gPyBudWxsIDogdmFsdWUpOyB9KTsgLy8gRGVsZXRlIGVudHJ5XHJcblx0XHRcdHRoaXMuX2Rpc2FibGVkLnB1c2goZWxlbVswXSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBJcyB0aGUgZmlyc3QgZmllbGQgaW4gYSBqUXVlcnkgY29sbGVjdGlvbiBkaXNhYmxlZCBhcyBhIGRhdGVwaWNrZXI/XHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGRpc2FibGVkLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgZW5hYmxlZC5cclxuXHRcdFx0QGV4YW1wbGUgaWYgKCQoc2VsZWN0b3IpLmRhdGVwaWNrKCdpc0Rpc2FibGVkJykpIHsuLi59ICovXHJcblx0XHRpc0Rpc2FibGVkOiBmdW5jdGlvbihlbGVtKSB7XHJcblx0XHRcdHJldHVybiAoZWxlbSAmJiAkLmluQXJyYXkoZWxlbSwgdGhpcy5fZGlzYWJsZWQpID4gLTEpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU2hvdyBhIHBvcHVwIGRhdGVwaWNrZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0V2ZW50fEVsZW1lbnR9IGEgZm9jdXMgZXZlbnQgb3IgdGhlIGNvbnRyb2wgdG8gdXNlLlxyXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnc2hvdycpICovXHJcblx0XHRzaG93OiBmdW5jdGlvbihlbGVtKSB7XHJcblx0XHRcdGVsZW0gPSAkKGVsZW0udGFyZ2V0IHx8IGVsZW0pO1xyXG5cdFx0XHR2YXIgaW5zdCA9IHBsdWdpbi5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKHBsdWdpbi5jdXJJbnN0ID09PSBpbnN0KSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChwbHVnaW4uY3VySW5zdCkge1xyXG5cdFx0XHRcdHBsdWdpbi5oaWRlKHBsdWdpbi5jdXJJbnN0LCB0cnVlKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xyXG5cdFx0XHRcdC8vIFJldHJpZXZlIGV4aXN0aW5nIGRhdGUocylcclxuXHRcdFx0XHRpbnN0Lmxhc3RWYWwgPSBudWxsO1xyXG5cdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IHBsdWdpbi5fZXh0cmFjdERhdGVzKGluc3QsIGVsZW0udmFsKCkpO1xyXG5cdFx0XHRcdGluc3QucGlja2luZ1JhbmdlID0gZmFsc2U7XHJcblx0XHRcdFx0aW5zdC5kcmF3RGF0ZSA9IHBsdWdpbi5fY2hlY2tNaW5NYXgoKGluc3Quc2VsZWN0ZWREYXRlc1swXSB8fFxyXG5cdFx0XHRcdFx0aW5zdC5nZXQoJ2RlZmF1bHREYXRlJykgfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCkpLm5ld0RhdGUoKSwgaW5zdCk7XHJcblx0XHRcdFx0aW5zdC5wcmV2RGF0ZSA9IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpO1xyXG5cdFx0XHRcdHBsdWdpbi5jdXJJbnN0ID0gaW5zdDtcclxuXHRcdFx0XHQvLyBHZW5lcmF0ZSBjb250ZW50XHJcblx0XHRcdFx0cGx1Z2luLl91cGRhdGUoZWxlbVswXSwgdHJ1ZSk7XHJcblx0XHRcdFx0Ly8gQWRqdXN0IHBvc2l0aW9uIGJlZm9yZSBzaG93aW5nXHJcblx0XHRcdFx0dmFyIG9mZnNldCA9IHBsdWdpbi5fY2hlY2tPZmZzZXQoaW5zdCk7XHJcblx0XHRcdFx0aW5zdC5kaXYuY3NzKHtsZWZ0OiBvZmZzZXQubGVmdCwgdG9wOiBvZmZzZXQudG9wfSk7XHJcblx0XHRcdFx0Ly8gQW5kIGRpc3BsYXlcclxuXHRcdFx0XHR2YXIgc2hvd0FuaW0gPSBpbnN0Lm9wdGlvbnMuc2hvd0FuaW07XHJcblx0XHRcdFx0dmFyIHNob3dTcGVlZCA9IGluc3Qub3B0aW9ucy5zaG93U3BlZWQ7XHJcblx0XHRcdFx0c2hvd1NwZWVkID0gKHNob3dTcGVlZCA9PT0gJ25vcm1hbCcgJiYgJC51aSAmJlxyXG5cdFx0XHRcdFx0cGFyc2VJbnQoJC51aS52ZXJzaW9uLnN1YnN0cmluZygyKSkgPj0gOCA/ICdfZGVmYXVsdCcgOiBzaG93U3BlZWQpO1xyXG5cdFx0XHRcdGlmICgkLmVmZmVjdHMgJiYgKCQuZWZmZWN0c1tzaG93QW5pbV0gfHwgKCQuZWZmZWN0cy5lZmZlY3QgJiYgJC5lZmZlY3RzLmVmZmVjdFtzaG93QW5pbV0pKSkge1xyXG5cdFx0XHRcdFx0dmFyIGRhdGEgPSBpbnN0LmRpdi5kYXRhKCk7IC8vIFVwZGF0ZSBvbGQgZWZmZWN0cyBkYXRhXHJcblx0XHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoa2V5Lm1hdGNoKC9eZWNcXC5zdG9yYWdlXFwuLykpIHtcclxuXHRcdFx0XHRcdFx0XHRkYXRhW2tleV0gPSBpbnN0Ll9tYWluRGl2LmNzcyhrZXkucmVwbGFjZSgvZWNcXC5zdG9yYWdlXFwuLywgJycpKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aW5zdC5kaXYuZGF0YShkYXRhKS5zaG93KHNob3dBbmltLCBpbnN0Lm9wdGlvbnMuc2hvd09wdGlvbnMsIHNob3dTcGVlZCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0aW5zdC5kaXZbc2hvd0FuaW0gfHwgJ3Nob3cnXShzaG93QW5pbSA/IHNob3dTcGVlZCA6IDApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRXh0cmFjdCBwb3NzaWJsZSBkYXRlcyBmcm9tIGEgc3RyaW5nLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgdGV4dCB0byBleHRyYWN0IGZyb20uXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlW119IFRoZSBleHRyYWN0ZWQgZGF0ZXMuICovXHJcblx0XHRfZXh0cmFjdERhdGVzOiBmdW5jdGlvbihpbnN0LCBkYXRlc1RleHQpIHtcclxuXHRcdFx0aWYgKGRhdGVzVGV4dCA9PT0gaW5zdC5sYXN0VmFsKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGluc3QubGFzdFZhbCA9IGRhdGVzVGV4dDtcclxuXHRcdFx0ZGF0ZXNUZXh0ID0gZGF0ZXNUZXh0LnNwbGl0KGluc3Qub3B0aW9ucy5tdWx0aVNlbGVjdCA/IGluc3Qub3B0aW9ucy5tdWx0aVNlcGFyYXRvciA6XHJcblx0XHRcdFx0KGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCA/IGluc3Qub3B0aW9ucy5yYW5nZVNlcGFyYXRvciA6ICdcXHgwMCcpKTtcclxuXHRcdFx0dmFyIGRhdGVzID0gW107XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0ZXNUZXh0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHZhciBkYXRlID0gaW5zdC5vcHRpb25zLmNhbGVuZGFyLnBhcnNlRGF0ZShpbnN0LmdldCgnZGF0ZUZvcm1hdCcpLCBkYXRlc1RleHRbaV0pO1xyXG5cdFx0XHRcdFx0aWYgKGRhdGUpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGZvdW5kID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgZGF0ZXMubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoZGF0ZXNbal0uY29tcGFyZVRvKGRhdGUpID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKCFmb3VuZCkge1xyXG5cdFx0XHRcdFx0XHRcdGRhdGVzLnB1c2goZGF0ZSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRcdC8vIElnbm9yZVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRkYXRlcy5zcGxpY2UoaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0IHx8IChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgPyAyIDogMSksIGRhdGVzLmxlbmd0aCk7XHJcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgJiYgZGF0ZXMubGVuZ3RoID09PSAxKSB7XHJcblx0XHRcdFx0ZGF0ZXNbMV0gPSBkYXRlc1swXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZGF0ZXM7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBVcGRhdGUgdGhlIGRhdGVwaWNrZXIgZGlzcGxheS5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RXZlbnR8RWxlbWVudH0gYSBmb2N1cyBldmVudCBvciB0aGUgY29udHJvbCB0byB1c2UuXHJcblx0XHRcdEBwYXJhbSBoaWRkZW4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGluaXRpYWxseSBoaWRlIHRoZSBkYXRlcGlja2VyLiAqL1xyXG5cdFx0X3VwZGF0ZTogZnVuY3Rpb24oZWxlbSwgaGlkZGVuKSB7XHJcblx0XHRcdGVsZW0gPSAkKGVsZW0udGFyZ2V0IHx8IGVsZW0pO1xyXG5cdFx0XHR2YXIgaW5zdCA9IHBsdWdpbi5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcclxuXHRcdFx0XHRpZiAoaW5zdC5pbmxpbmUgfHwgcGx1Z2luLmN1ckluc3QgPT09IGluc3QpIHtcclxuXHRcdFx0XHRcdGlmICgkLmlzRnVuY3Rpb24oaW5zdC5vcHRpb25zLm9uQ2hhbmdlTW9udGhZZWFyKSAmJiAoIWluc3QucHJldkRhdGUgfHxcclxuXHRcdFx0XHRcdFx0XHRpbnN0LnByZXZEYXRlLnllYXIoKSAhPT0gaW5zdC5kcmF3RGF0ZS55ZWFyKCkgfHxcclxuXHRcdFx0XHRcdFx0XHRpbnN0LnByZXZEYXRlLm1vbnRoKCkgIT09IGluc3QuZHJhd0RhdGUubW9udGgoKSkpIHtcclxuXHRcdFx0XHRcdFx0aW5zdC5vcHRpb25zLm9uQ2hhbmdlTW9udGhZZWFyLmFwcGx5KGVsZW1bMF0sXHJcblx0XHRcdFx0XHRcdFx0W2luc3QuZHJhd0RhdGUueWVhcigpLCBpbnN0LmRyYXdEYXRlLm1vbnRoKCldKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGluc3QuaW5saW5lKSB7XHJcblx0XHRcdFx0XHR2YXIgaW5kZXggPSAkKCdhLCA6aW5wdXQnLCBlbGVtKS5pbmRleCgkKCc6Zm9jdXMnLCBlbGVtKSk7XHJcblx0XHRcdFx0XHRlbGVtLmh0bWwodGhpcy5fZ2VuZXJhdGVDb250ZW50KGVsZW1bMF0sIGluc3QpKTtcclxuXHRcdFx0XHRcdHZhciBmb2N1cyA9IGVsZW0uZmluZCgnYSwgOmlucHV0Jyk7XHJcblx0XHRcdFx0XHRmb2N1cy5lcShNYXRoLm1heChNYXRoLm1pbihpbmRleCwgZm9jdXMubGVuZ3RoIC0gMSksIDApKS5mb2N1cygpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGlmIChwbHVnaW4uY3VySW5zdCA9PT0gaW5zdCkge1xyXG5cdFx0XHRcdFx0aWYgKCFpbnN0LmRpdikge1xyXG5cdFx0XHRcdFx0XHRpbnN0LmRpdiA9ICQoJzxkaXY+PC9kaXY+JykuYWRkQ2xhc3ModGhpcy5fcG9wdXBDbGFzcykuXHJcblx0XHRcdFx0XHRcdFx0Y3NzKHtkaXNwbGF5OiAoaGlkZGVuID8gJ25vbmUnIDogJ3N0YXRpYycpLCBwb3NpdGlvbjogJ2Fic29sdXRlJyxcclxuXHRcdFx0XHRcdFx0XHRcdGxlZnQ6IGVsZW0ub2Zmc2V0KCkubGVmdCwgdG9wOiBlbGVtLm9mZnNldCgpLnRvcCArIGVsZW0ub3V0ZXJIZWlnaHQoKX0pLlxyXG5cdFx0XHRcdFx0XHRcdGFwcGVuZFRvKCQoaW5zdC5vcHRpb25zLnBvcHVwQ29udGFpbmVyIHx8ICdib2R5JykpO1xyXG5cdFx0XHRcdFx0XHRpZiAoJC5mbi5tb3VzZXdoZWVsKSB7XHJcblx0XHRcdFx0XHRcdFx0aW5zdC5kaXYubW91c2V3aGVlbCh0aGlzLl9kb01vdXNlV2hlZWwpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpbnN0LmRpdi5odG1sKHRoaXMuX2dlbmVyYXRlQ29udGVudChlbGVtWzBdLCBpbnN0KSk7XHJcblx0XHRcdFx0XHRlbGVtLmZvY3VzKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBVcGRhdGUgdGhlIGlucHV0IGZpZWxkIGFuZCBhbnkgYWx0ZXJuYXRlIGZpZWxkIHdpdGggdGhlIGN1cnJlbnQgZGF0ZXMuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIHVzZS5cclxuXHRcdFx0QHBhcmFtIGtleVVwIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBjb21pbmcgZnJvbSA8Y29kZT5rZXlVcDwvY29kZT4gcHJvY2Vzc2luZyAoaW50ZXJuYWwpLiAqL1xyXG5cdFx0X3VwZGF0ZUlucHV0OiBmdW5jdGlvbihlbGVtLCBrZXlVcCkge1xyXG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XHJcblx0XHRcdFx0dmFyIHZhbHVlID0gJyc7XHJcblx0XHRcdFx0dmFyIGFsdFZhbHVlID0gJyc7XHJcblx0XHRcdFx0dmFyIHNlcCA9IChpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgPyBpbnN0Lm9wdGlvbnMubXVsdGlTZXBhcmF0b3IgOlxyXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLnJhbmdlU2VwYXJhdG9yKTtcclxuXHRcdFx0XHR2YXIgY2FsZW5kYXIgPSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXI7XHJcblx0XHRcdFx0dmFyIGRhdGVGb3JtYXQgPSBpbnN0LmdldCgnZGF0ZUZvcm1hdCcpO1xyXG5cdFx0XHRcdHZhciBhbHRGb3JtYXQgPSBpbnN0Lm9wdGlvbnMuYWx0Rm9ybWF0IHx8IGRhdGVGb3JtYXQ7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdHZhbHVlICs9IChrZXlVcCA/ICcnIDogKGkgPiAwID8gc2VwIDogJycpICtcclxuXHRcdFx0XHRcdFx0Y2FsZW5kYXIuZm9ybWF0RGF0ZShkYXRlRm9ybWF0LCBpbnN0LnNlbGVjdGVkRGF0ZXNbaV0pKTtcclxuXHRcdFx0XHRcdGFsdFZhbHVlICs9IChpID4gMCA/IHNlcCA6ICcnKSArXHJcblx0XHRcdFx0XHRcdGNhbGVuZGFyLmZvcm1hdERhdGUoYWx0Rm9ybWF0LCBpbnN0LnNlbGVjdGVkRGF0ZXNbaV0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoIWluc3QuaW5saW5lICYmICFrZXlVcCkge1xyXG5cdFx0XHRcdFx0JChlbGVtKS52YWwodmFsdWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQkKGluc3Qub3B0aW9ucy5hbHRGaWVsZCkudmFsKGFsdFZhbHVlKTtcclxuXHRcdFx0XHRpZiAoJC5pc0Z1bmN0aW9uKGluc3Qub3B0aW9ucy5vblNlbGVjdCkgJiYgIWtleVVwICYmICFpbnN0LmluU2VsZWN0KSB7XHJcblx0XHRcdFx0XHRpbnN0LmluU2VsZWN0ID0gdHJ1ZTsgLy8gUHJldmVudCBlbmRsZXNzIGxvb3BzXHJcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMub25TZWxlY3QuYXBwbHkoZWxlbSwgW2luc3Quc2VsZWN0ZWREYXRlc10pO1xyXG5cdFx0XHRcdFx0aW5zdC5pblNlbGVjdCA9IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIHNpemUgb2YgbGVmdCBhbmQgdG9wIGJvcmRlcnMgZm9yIGFuIGVsZW1lbnQuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGVsZW0ge2pRdWVyeX0gVGhlIGVsZW1lbnQgb2YgaW50ZXJlc3QuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcltdfSBUaGUgbGVmdCBhbmQgdG9wIGJvcmRlcnMuICovXHJcblx0XHRfZ2V0Qm9yZGVyczogZnVuY3Rpb24oZWxlbSkge1xyXG5cdFx0XHR2YXIgY29udmVydCA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcblx0XHRcdFx0cmV0dXJuIHt0aGluOiAxLCBtZWRpdW06IDMsIHRoaWNrOiA1fVt2YWx1ZV0gfHwgdmFsdWU7XHJcblx0XHRcdH07XHJcblx0XHRcdHJldHVybiBbcGFyc2VGbG9hdChjb252ZXJ0KGVsZW0uY3NzKCdib3JkZXItbGVmdC13aWR0aCcpKSksXHJcblx0XHRcdFx0cGFyc2VGbG9hdChjb252ZXJ0KGVsZW0uY3NzKCdib3JkZXItdG9wLXdpZHRoJykpKV07XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDaGVjayBwb3NpdGlvbmluZyB0byByZW1haW4gb24gdGhlIHNjcmVlbi5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QHJldHVybiB7b2JqZWN0fSBUaGUgdXBkYXRlZCBvZmZzZXQgZm9yIHRoZSBkYXRlcGlja2VyLiAqL1xyXG5cdFx0X2NoZWNrT2Zmc2V0OiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdHZhciBiYXNlID0gKGluc3QuZWxlbS5pcygnOmhpZGRlbicpICYmIGluc3QudHJpZ2dlciA/IGluc3QudHJpZ2dlciA6IGluc3QuZWxlbSk7XHJcblx0XHRcdHZhciBvZmZzZXQgPSBiYXNlLm9mZnNldCgpO1xyXG5cdFx0XHR2YXIgYnJvd3NlcldpZHRoID0gJCh3aW5kb3cpLndpZHRoKCk7XHJcblx0XHRcdHZhciBicm93c2VySGVpZ2h0ID0gJCh3aW5kb3cpLmhlaWdodCgpO1xyXG5cdFx0XHRpZiAoYnJvd3NlcldpZHRoID09PSAwKSB7XHJcblx0XHRcdFx0cmV0dXJuIG9mZnNldDtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgaXNGaXhlZCA9IGZhbHNlO1xyXG5cdFx0XHQkKGluc3QuZWxlbSkucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0aXNGaXhlZCB8PSAkKHRoaXMpLmNzcygncG9zaXRpb24nKSA9PT0gJ2ZpeGVkJztcclxuXHRcdFx0XHRyZXR1cm4gIWlzRml4ZWQ7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHR2YXIgc2Nyb2xsWCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdDtcclxuXHRcdFx0dmFyIHNjcm9sbFkgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wO1xyXG5cdFx0XHR2YXIgYWJvdmUgPSBvZmZzZXQudG9wIC0gKGlzRml4ZWQgPyBzY3JvbGxZIDogMCkgLSBpbnN0LmRpdi5vdXRlckhlaWdodCgpO1xyXG5cdFx0XHR2YXIgYmVsb3cgPSBvZmZzZXQudG9wIC0gKGlzRml4ZWQgPyBzY3JvbGxZIDogMCkgKyBiYXNlLm91dGVySGVpZ2h0KCk7XHJcblx0XHRcdHZhciBhbGlnbkwgPSBvZmZzZXQubGVmdCAtIChpc0ZpeGVkID8gc2Nyb2xsWCA6IDApO1xyXG5cdFx0XHR2YXIgYWxpZ25SID0gb2Zmc2V0LmxlZnQgLSAoaXNGaXhlZCA/IHNjcm9sbFggOiAwKSArIGJhc2Uub3V0ZXJXaWR0aCgpIC0gaW5zdC5kaXYub3V0ZXJXaWR0aCgpO1xyXG5cdFx0XHR2YXIgdG9vV2lkZSA9IChvZmZzZXQubGVmdCAtIHNjcm9sbFggKyBpbnN0LmRpdi5vdXRlcldpZHRoKCkpID4gYnJvd3NlcldpZHRoO1xyXG5cdFx0XHR2YXIgdG9vSGlnaCA9IChvZmZzZXQudG9wIC0gc2Nyb2xsWSArIGluc3QuZWxlbS5vdXRlckhlaWdodCgpICtcclxuXHRcdFx0XHRpbnN0LmRpdi5vdXRlckhlaWdodCgpKSA+IGJyb3dzZXJIZWlnaHQ7XHJcblx0XHRcdGluc3QuZGl2LmNzcygncG9zaXRpb24nLCBpc0ZpeGVkID8gJ2ZpeGVkJyA6ICdhYnNvbHV0ZScpO1xyXG5cdFx0XHR2YXIgYWxpZ25tZW50ID0gaW5zdC5vcHRpb25zLmFsaWdubWVudDtcclxuXHRcdFx0aWYgKGFsaWdubWVudCA9PT0gJ3RvcExlZnQnKSB7XHJcblx0XHRcdFx0b2Zmc2V0ID0ge2xlZnQ6IGFsaWduTCwgdG9wOiBhYm92ZX07XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAoYWxpZ25tZW50ID09PSAndG9wUmlnaHQnKSB7XHJcblx0XHRcdFx0b2Zmc2V0ID0ge2xlZnQ6IGFsaWduUiwgdG9wOiBhYm92ZX07XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAoYWxpZ25tZW50ID09PSAnYm90dG9tTGVmdCcpIHtcclxuXHRcdFx0XHRvZmZzZXQgPSB7bGVmdDogYWxpZ25MLCB0b3A6IGJlbG93fTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmIChhbGlnbm1lbnQgPT09ICdib3R0b21SaWdodCcpIHtcclxuXHRcdFx0XHRvZmZzZXQgPSB7bGVmdDogYWxpZ25SLCB0b3A6IGJlbG93fTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmIChhbGlnbm1lbnQgPT09ICd0b3AnKSB7XHJcblx0XHRcdFx0b2Zmc2V0ID0ge2xlZnQ6IChpbnN0Lm9wdGlvbnMuaXNSVEwgfHwgdG9vV2lkZSA/IGFsaWduUiA6IGFsaWduTCksIHRvcDogYWJvdmV9O1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgeyAvLyBib3R0b21cclxuXHRcdFx0XHRvZmZzZXQgPSB7bGVmdDogKGluc3Qub3B0aW9ucy5pc1JUTCB8fCB0b29XaWRlID8gYWxpZ25SIDogYWxpZ25MKSxcclxuXHRcdFx0XHRcdHRvcDogKHRvb0hpZ2ggPyBhYm92ZSA6IGJlbG93KX07XHJcblx0XHRcdH1cclxuXHRcdFx0b2Zmc2V0LmxlZnQgPSBNYXRoLm1heCgoaXNGaXhlZCA/IDAgOiBzY3JvbGxYKSwgb2Zmc2V0LmxlZnQpO1xyXG5cdFx0XHRvZmZzZXQudG9wID0gTWF0aC5tYXgoKGlzRml4ZWQgPyAwIDogc2Nyb2xsWSksIG9mZnNldC50b3ApO1xyXG5cdFx0XHRyZXR1cm4gb2Zmc2V0O1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ2xvc2UgZGF0ZSBwaWNrZXIgaWYgY2xpY2tlZCBlbHNld2hlcmUuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGV2ZW50IHtNb3VzZUV2ZW50fSBUaGUgbW91c2UgY2xpY2sgdG8gY2hlY2suICovXHJcblx0XHRfY2hlY2tFeHRlcm5hbENsaWNrOiBmdW5jdGlvbihldmVudCkge1xyXG5cdFx0XHRpZiAoIXBsdWdpbi5jdXJJbnN0KSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBlbGVtID0gJChldmVudC50YXJnZXQpO1xyXG5cdFx0XHRpZiAoZWxlbS5jbG9zZXN0KCcuJyArIHBsdWdpbi5fcG9wdXBDbGFzcyArICcsLicgKyBwbHVnaW4uX3RyaWdnZXJDbGFzcykubGVuZ3RoID09PSAwICYmXHJcblx0XHRcdFx0XHQhZWxlbS5oYXNDbGFzcyhwbHVnaW4uX2dldE1hcmtlcigpKSkge1xyXG5cdFx0XHRcdHBsdWdpbi5oaWRlKHBsdWdpbi5jdXJJbnN0KTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogSGlkZSBhIHBvcHVwIGRhdGVwaWNrZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR8b2JqZWN0fSBUaGUgY29udHJvbCB0byB1c2Ugb3IgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBwYXJhbSBpbW1lZGlhdGUge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGNsb3NlIGltbWVkaWF0ZWx5IHdpdGhvdXQgYW5pbWF0aW9uIChpbnRlcm5hbCkuXHJcblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdoaWRlJykgKi9cclxuXHRcdGhpZGU6IGZ1bmN0aW9uKGVsZW0sIGltbWVkaWF0ZSkge1xyXG5cdFx0XHRpZiAoIWVsZW0pIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XHJcblx0XHRcdFx0aW5zdCA9IGVsZW07XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGluc3QgJiYgaW5zdCA9PT0gcGx1Z2luLmN1ckluc3QpIHtcclxuXHRcdFx0XHR2YXIgc2hvd0FuaW0gPSAoaW1tZWRpYXRlID8gJycgOiBpbnN0Lm9wdGlvbnMuc2hvd0FuaW0pO1xyXG5cdFx0XHRcdHZhciBzaG93U3BlZWQgPSBpbnN0Lm9wdGlvbnMuc2hvd1NwZWVkO1xyXG5cdFx0XHRcdHNob3dTcGVlZCA9IChzaG93U3BlZWQgPT09ICdub3JtYWwnICYmICQudWkgJiZcclxuXHRcdFx0XHRcdHBhcnNlSW50KCQudWkudmVyc2lvbi5zdWJzdHJpbmcoMikpID49IDggPyAnX2RlZmF1bHQnIDogc2hvd1NwZWVkKTtcclxuXHRcdFx0XHR2YXIgcG9zdFByb2Nlc3MgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdGlmICghaW5zdC5kaXYpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aW5zdC5kaXYucmVtb3ZlKCk7XHJcblx0XHRcdFx0XHRpbnN0LmRpdiA9IG51bGw7XHJcblx0XHRcdFx0XHRwbHVnaW4uY3VySW5zdCA9IG51bGw7XHJcblx0XHRcdFx0XHRpZiAoJC5pc0Z1bmN0aW9uKGluc3Qub3B0aW9ucy5vbkNsb3NlKSkge1xyXG5cdFx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMub25DbG9zZS5hcHBseShlbGVtLCBbaW5zdC5zZWxlY3RlZERhdGVzXSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRpbnN0LmRpdi5zdG9wKCk7XHJcblx0XHRcdFx0aWYgKCQuZWZmZWN0cyAmJiAoJC5lZmZlY3RzW3Nob3dBbmltXSB8fCAoJC5lZmZlY3RzLmVmZmVjdCAmJiAkLmVmZmVjdHMuZWZmZWN0W3Nob3dBbmltXSkpKSB7XHJcblx0XHRcdFx0XHRpbnN0LmRpdi5oaWRlKHNob3dBbmltLCBpbnN0Lm9wdGlvbnMuc2hvd09wdGlvbnMsIHNob3dTcGVlZCwgcG9zdFByb2Nlc3MpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdHZhciBoaWRlQW5pbSA9IChzaG93QW5pbSA9PT0gJ3NsaWRlRG93bicgPyAnc2xpZGVVcCcgOlxyXG5cdFx0XHRcdFx0XHQoc2hvd0FuaW0gPT09ICdmYWRlSW4nID8gJ2ZhZGVPdXQnIDogJ2hpZGUnKSk7XHJcblx0XHRcdFx0XHRpbnN0LmRpdltoaWRlQW5pbV0oKHNob3dBbmltID8gc2hvd1NwZWVkIDogJycpLCBwb3N0UHJvY2Vzcyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICghc2hvd0FuaW0pIHtcclxuXHRcdFx0XHRcdHBvc3RQcm9jZXNzKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBIYW5kbGUga2V5c3Ryb2tlcyBpbiB0aGUgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZXZlbnQge0tleUV2ZW50fSBUaGUga2V5c3Ryb2tlLlxyXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBub3QgaGFuZGxlZCwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIGhhbmRsZWQuICovXHJcblx0XHRfa2V5RG93bjogZnVuY3Rpb24oZXZlbnQpIHtcclxuXHRcdFx0dmFyIGVsZW0gPSAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLmVsZW0pIHx8IGV2ZW50LnRhcmdldDtcclxuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdHZhciBoYW5kbGVkID0gZmFsc2U7XHJcblx0XHRcdGlmIChpbnN0LmlubGluZSB8fCBpbnN0LmRpdikge1xyXG5cdFx0XHRcdGlmIChldmVudC5rZXlDb2RlID09PSA5KSB7IC8vIFRhYiAtIGNsb3NlXHJcblx0XHRcdFx0XHRwbHVnaW4uaGlkZShlbGVtKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMTMpIHsgLy8gRW50ZXIgLSBzZWxlY3RcclxuXHRcdFx0XHRcdHBsdWdpbi5zZWxlY3REYXRlKGVsZW0sXHJcblx0XHRcdFx0XHRcdCQoJ2EuJyArIGluc3Qub3B0aW9ucy5yZW5kZXJlci5oaWdobGlnaHRlZENsYXNzLCBpbnN0LmRpdilbMF0pO1xyXG5cdFx0XHRcdFx0aGFuZGxlZCA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgeyAvLyBDb21tYW5kIGtleXN0cm9rZXNcclxuXHRcdFx0XHRcdHZhciBjb21tYW5kcyA9IGluc3Qub3B0aW9ucy5jb21tYW5kcztcclxuXHRcdFx0XHRcdGZvciAodmFyIG5hbWUgaW4gY29tbWFuZHMpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGNvbW1hbmQgPSBjb21tYW5kc1tuYW1lXTtcclxuXHRcdFx0XHRcdFx0aWYgKGNvbW1hbmQua2V5c3Ryb2tlLmtleUNvZGUgPT09IGV2ZW50LmtleUNvZGUgJiZcclxuXHRcdFx0XHRcdFx0XHRcdCEhY29tbWFuZC5rZXlzdHJva2UuY3RybEtleSA9PT0gISEoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0ISFjb21tYW5kLmtleXN0cm9rZS5hbHRLZXkgPT09IGV2ZW50LmFsdEtleSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0ISFjb21tYW5kLmtleXN0cm9rZS5zaGlmdEtleSA9PT0gZXZlbnQuc2hpZnRLZXkpIHtcclxuXHRcdFx0XHRcdFx0XHRwbHVnaW4ucGVyZm9ybUFjdGlvbihlbGVtLCBuYW1lKTtcclxuXHRcdFx0XHRcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHsgLy8gU2hvdyBvbiAnY3VycmVudCcga2V5c3Ryb2tlXHJcblx0XHRcdFx0dmFyIGNvbW1hbmQgPSBpbnN0Lm9wdGlvbnMuY29tbWFuZHMuY3VycmVudDtcclxuXHRcdFx0XHRpZiAoY29tbWFuZC5rZXlzdHJva2Uua2V5Q29kZSA9PT0gZXZlbnQua2V5Q29kZSAmJlxyXG5cdFx0XHRcdFx0XHQhIWNvbW1hbmQua2V5c3Ryb2tlLmN0cmxLZXkgPT09ICEhKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiZcclxuXHRcdFx0XHRcdFx0ISFjb21tYW5kLmtleXN0cm9rZS5hbHRLZXkgPT09IGV2ZW50LmFsdEtleSAmJlxyXG5cdFx0XHRcdFx0XHQhIWNvbW1hbmQua2V5c3Ryb2tlLnNoaWZ0S2V5ID09PSBldmVudC5zaGlmdEtleSkge1xyXG5cdFx0XHRcdFx0cGx1Z2luLnNob3coZWxlbSk7XHJcblx0XHRcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aW5zdC5jdHJsS2V5ID0gKChldmVudC5rZXlDb2RlIDwgNDggJiYgZXZlbnQua2V5Q29kZSAhPT0gMzIpIHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSk7XHJcblx0XHRcdGlmIChoYW5kbGVkKSB7XHJcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gIWhhbmRsZWQ7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBGaWx0ZXIga2V5c3Ryb2tlcyBpbiB0aGUgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZXZlbnQge0tleUV2ZW50fSBUaGUga2V5c3Ryb2tlLlxyXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBhbGxvd2VkLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90IGFsbG93ZWQuICovXHJcblx0XHRfa2V5UHJlc3M6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblx0XHRcdHZhciBpbnN0ID0gcGx1Z2luLl9nZXRJbnN0KChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuZWxlbSkgfHwgZXZlbnQudGFyZ2V0KTtcclxuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkgJiYgaW5zdC5vcHRpb25zLmNvbnN0cmFpbklucHV0KSB7XHJcblx0XHRcdFx0dmFyIGNoID0gU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5rZXlDb2RlIHx8IGV2ZW50LmNoYXJDb2RlKTtcclxuXHRcdFx0XHR2YXIgYWxsb3dlZENoYXJzID0gcGx1Z2luLl9hbGxvd2VkQ2hhcnMoaW5zdCk7XHJcblx0XHRcdFx0cmV0dXJuIChldmVudC5tZXRhS2V5IHx8IGluc3QuY3RybEtleSB8fCBjaCA8ICcgJyB8fFxyXG5cdFx0XHRcdFx0IWFsbG93ZWRDaGFycyB8fCBhbGxvd2VkQ2hhcnMuaW5kZXhPZihjaCkgPiAtMSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIGFsbG93ZWQgYnkgdGhlIGRhdGUgZm9ybWF0LlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBzZXQgb2YgYWxsb3dlZCBjaGFyYWN0ZXJzLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBhbnl0aGluZyBhbGxvd2VkLiAqL1xyXG5cdFx0X2FsbG93ZWRDaGFyczogZnVuY3Rpb24oaW5zdCkge1xyXG5cdFx0XHR2YXIgYWxsb3dlZENoYXJzID0gKGluc3Qub3B0aW9ucy5tdWx0aVNlbGVjdCA/IGluc3Qub3B0aW9ucy5tdWx0aVNlcGFyYXRvciA6XHJcblx0XHRcdFx0KGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCA/IGluc3Qub3B0aW9ucy5yYW5nZVNlcGFyYXRvciA6ICcnKSk7XHJcblx0XHRcdHZhciBsaXRlcmFsID0gZmFsc2U7XHJcblx0XHRcdHZhciBoYXNOdW0gPSBmYWxzZTtcclxuXHRcdFx0dmFyIGRhdGVGb3JtYXQgPSBpbnN0LmdldCgnZGF0ZUZvcm1hdCcpO1xyXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRhdGVGb3JtYXQubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHR2YXIgY2ggPSBkYXRlRm9ybWF0LmNoYXJBdChpKTtcclxuXHRcdFx0XHRpZiAobGl0ZXJhbCkge1xyXG5cdFx0XHRcdFx0aWYgKGNoID09PSBcIidcIiAmJiBkYXRlRm9ybWF0LmNoYXJBdChpICsgMSkgIT09IFwiJ1wiKSB7XHJcblx0XHRcdFx0XHRcdGxpdGVyYWwgPSBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gY2g7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0c3dpdGNoIChjaCkge1xyXG5cdFx0XHRcdFx0XHRjYXNlICdkJzogY2FzZSAnbSc6IGNhc2UgJ28nOiBjYXNlICd3JzpcclxuXHRcdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gKGhhc051bSA/ICcnIDogJzAxMjM0NTY3ODknKTsgaGFzTnVtID0gdHJ1ZTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ3knOiBjYXNlICdAJzogY2FzZSAnISc6XHJcblx0XHRcdFx0XHRcdFx0YWxsb3dlZENoYXJzICs9IChoYXNOdW0gPyAnJyA6ICcwMTIzNDU2Nzg5JykgKyAnLSc7IGhhc051bSA9IHRydWU7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdKJzpcclxuXHRcdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gKGhhc051bSA/ICcnIDogJzAxMjM0NTY3ODknKSArICctLic7IGhhc051bSA9IHRydWU7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdEJzogY2FzZSAnTSc6IGNhc2UgJ1knOlxyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBudWxsOyAvLyBBY2NlcHQgYW55dGhpbmdcclxuXHRcdFx0XHRcdFx0Y2FzZSBcIidcIjpcclxuXHRcdFx0XHRcdFx0XHRpZiAoZGF0ZUZvcm1hdC5jaGFyQXQoaSArIDEpID09PSBcIidcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0YWxsb3dlZENoYXJzICs9IFwiJ1wiO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGxpdGVyYWwgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gY2g7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBhbGxvd2VkQ2hhcnM7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBTeW5jaHJvbmlzZSBkYXRlcGlja2VyIHdpdGggdGhlIGZpZWxkLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBldmVudCB7S2V5RXZlbnR9IFRoZSBrZXlzdHJva2UuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGFsbG93ZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QgYWxsb3dlZC4gKi9cclxuXHRcdF9rZXlVcDogZnVuY3Rpb24oZXZlbnQpIHtcclxuXHRcdFx0dmFyIGVsZW0gPSAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLmVsZW0pIHx8IGV2ZW50LnRhcmdldDtcclxuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpICYmICFpbnN0LmN0cmxLZXkgJiYgaW5zdC5sYXN0VmFsICE9PSBpbnN0LmVsZW0udmFsKCkpIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0dmFyIGRhdGVzID0gcGx1Z2luLl9leHRyYWN0RGF0ZXMoaW5zdCwgaW5zdC5lbGVtLnZhbCgpKTtcclxuXHRcdFx0XHRcdGlmIChkYXRlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdHBsdWdpbi5zZXREYXRlKGVsZW0sIGRhdGVzLCBudWxsLCB0cnVlKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y2F0Y2ggKGV2ZW50KSB7XHJcblx0XHRcdFx0XHQvLyBJZ25vcmVcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBJbmNyZW1lbnQvZGVjcmVtZW50IG1vbnRoL3llYXIgb24gbW91c2Ugd2hlZWwgYWN0aXZpdHkuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGV2ZW50IHtldmVudH0gVGhlIG1vdXNlIHdoZWVsIGV2ZW50LlxyXG5cdFx0XHRAcGFyYW0gZGVsdGEge251bWJlcn0gVGhlIGFtb3VudCBvZiBjaGFuZ2UuICovXHJcblx0XHRfZG9Nb3VzZVdoZWVsOiBmdW5jdGlvbihldmVudCwgZGVsdGEpIHtcclxuXHRcdFx0dmFyIGVsZW0gPSAocGx1Z2luLmN1ckluc3QgJiYgcGx1Z2luLmN1ckluc3QuZWxlbVswXSkgfHxcclxuXHRcdFx0XHQkKGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnLicgKyBwbHVnaW4uX2dldE1hcmtlcigpKVswXTtcclxuXHRcdFx0aWYgKHBsdWdpbi5pc0Rpc2FibGVkKGVsZW0pKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBpbnN0ID0gcGx1Z2luLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLnVzZU1vdXNlV2hlZWwpIHtcclxuXHRcdFx0XHRkZWx0YSA9IChkZWx0YSA8IDAgPyAtMSA6ICsxKTtcclxuXHRcdFx0XHRwbHVnaW4uY2hhbmdlTW9udGgoZWxlbSwgLWluc3Qub3B0aW9uc1tldmVudC5jdHJsS2V5ID8gJ21vbnRoc1RvSnVtcCcgOiAnbW9udGhzVG9TdGVwJ10gKiBkZWx0YSk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENsZWFyIGFuIGlucHV0IGFuZCBjbG9zZSBhIHBvcHVwIGRhdGVwaWNrZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIHVzZS5cclxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuZGF0ZXBpY2soJ2NsZWFyJykgKi9cclxuXHRcdGNsZWFyOiBmdW5jdGlvbihlbGVtKSB7XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcclxuXHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXMgPSBbXTtcclxuXHRcdFx0XHR0aGlzLmhpZGUoZWxlbSk7XHJcblx0XHRcdFx0dmFyIGRlZmF1bHREYXRlID0gaW5zdC5nZXQoJ2RlZmF1bHREYXRlJyk7XHJcblx0XHRcdFx0aWYgKGluc3Qub3B0aW9ucy5zZWxlY3REZWZhdWx0RGF0ZSAmJiBkZWZhdWx0RGF0ZSkge1xyXG5cdFx0XHRcdFx0dGhpcy5zZXREYXRlKGVsZW0sIChkZWZhdWx0RGF0ZSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKSkubmV3RGF0ZSgpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVJbnB1dChlbGVtKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBzZWxlY3RlZCBkYXRlKHMpIGZvciBhIGRhdGVwaWNrZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlW119IFRoZSBzZWxlY3RlZCBkYXRlKHMpLlxyXG5cdFx0XHRAZXhhbXBsZSB2YXIgZGF0ZXMgPSAkKHNlbGVjdG9yKS5kYXRlcGljaygnZ2V0RGF0ZScpICovXHJcblx0XHRnZXREYXRlOiBmdW5jdGlvbihlbGVtKSB7XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0cmV0dXJuICghJC5pc0VtcHR5T2JqZWN0KGluc3QpID8gaW5zdC5zZWxlY3RlZERhdGVzIDogW10pO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU2V0IHRoZSBzZWxlY3RlZCBkYXRlKHMpIGZvciBhIGRhdGVwaWNrZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IHRoZSBjb250cm9sIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBkYXRlcyB7Q0RhdGV8bnVtYmVyfHN0cmluZ3xhcnJheX0gdGhlIHNlbGVjdGVkIGRhdGUocykuXHJcblx0XHRcdEBwYXJhbSBbZW5kRGF0ZV0ge0NEYXRlfG51bWJlcnxzdHJpbmd9IHRoZSBlbmRpbmcgZGF0ZSBmb3IgYSByYW5nZS5cclxuXHRcdFx0QHBhcmFtIFtrZXlVcF0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGNvbWluZyBmcm9tIDxjb2RlPmtleVVwPC9jb2RlPiBwcm9jZXNzaW5nIChpbnRlcm5hbCkuXHJcblx0XHRcdEBwYXJhbSBbc2V0T3B0XSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgY29taW5nIGZyb20gb3B0aW9uIHByb2Nlc3NpbmcgKGludGVybmFsKS5cclxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuZGF0ZXBpY2soJ3NldERhdGUnLCBuZXcgRGF0ZSgyMDE0LCAxMi0xLCAyNSkpXHJcbiAkKHNlbGVjdG9yKS5kYXRlcGljaygnc2V0RGF0ZScsICcxMi8yNS8yMDE0JywgJzAxLzAxLzIwMTUnKVxyXG4gJChzZWxlY3RvcikuZGF0ZXBpY2soJ3NldERhdGUnLCBbZGF0ZTEsIGRhdGUyLCBkYXRlM10pICovXHJcblx0XHRzZXREYXRlOiBmdW5jdGlvbihlbGVtLCBkYXRlcywgZW5kRGF0ZSwga2V5VXAsIHNldE9wdCkge1xyXG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XHJcblx0XHRcdFx0aWYgKCEkLmlzQXJyYXkoZGF0ZXMpKSB7XHJcblx0XHRcdFx0XHRkYXRlcyA9IFtkYXRlc107XHJcblx0XHRcdFx0XHRpZiAoZW5kRGF0ZSkge1xyXG5cdFx0XHRcdFx0XHRkYXRlcy5wdXNoKGVuZERhdGUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuZ2V0KCdtaW5EYXRlJyk7XHJcblx0XHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xyXG5cdFx0XHRcdHZhciBjdXJEYXRlID0gaW5zdC5zZWxlY3RlZERhdGVzWzBdO1xyXG5cdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IFtdO1xyXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0ZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdHZhciBkYXRlID0gaW5zdC5vcHRpb25zLmNhbGVuZGFyLmRldGVybWluZURhdGUoXHJcblx0XHRcdFx0XHRcdGRhdGVzW2ldLCBudWxsLCBjdXJEYXRlLCBpbnN0LmdldCgnZGF0ZUZvcm1hdCcpLCBpbnN0LmdldENvbmZpZygpKTtcclxuXHRcdFx0XHRcdGlmIChkYXRlKSB7XHJcblx0XHRcdFx0XHRcdGlmICgoIW1pbkRhdGUgfHwgZGF0ZS5jb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0KCFtYXhEYXRlIHx8IGRhdGUuY29tcGFyZVRvKG1heERhdGUpICE9PSArMSkpIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGluc3Quc2VsZWN0ZWREYXRlc1tqXS5jb21wYXJlVG8oZGF0ZSkgPT09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKCFmb3VuZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzLnB1c2goZGF0ZSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcy5zcGxpY2UoaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0IHx8XHJcblx0XHRcdFx0XHQoaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0ID8gMiA6IDEpLCBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoKTtcclxuXHRcdFx0XHRpZiAoaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0KSB7XHJcblx0XHRcdFx0XHRzd2l0Y2ggKGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0Y2FzZSAxOiBpbnN0LnNlbGVjdGVkRGF0ZXNbMV0gPSBpbnN0LnNlbGVjdGVkRGF0ZXNbMF07IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlIDI6IGluc3Quc2VsZWN0ZWREYXRlc1sxXSA9XHJcblx0XHRcdFx0XHRcdFx0KGluc3Quc2VsZWN0ZWREYXRlc1swXS5jb21wYXJlVG8oaW5zdC5zZWxlY3RlZERhdGVzWzFdKSA9PT0gKzEgP1xyXG5cdFx0XHRcdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlc1swXSA6IGluc3Quc2VsZWN0ZWREYXRlc1sxXSk7IGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aW5zdC5waWNraW5nUmFuZ2UgPSBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aW5zdC5wcmV2RGF0ZSA9IChpbnN0LmRyYXdEYXRlID8gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkgOiBudWxsKTtcclxuXHRcdFx0XHRpbnN0LmRyYXdEYXRlID0gdGhpcy5fY2hlY2tNaW5NYXgoKGluc3Quc2VsZWN0ZWREYXRlc1swXSB8fFxyXG5cdFx0XHRcdFx0aW5zdC5nZXQoJ2RlZmF1bHREYXRlJykgfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCkpLm5ld0RhdGUoKSwgaW5zdCk7XHJcblx0XHRcdFx0aWYgKCFzZXRPcHQpIHtcclxuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZShlbGVtKTtcclxuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUlucHV0KGVsZW0sIGtleVVwKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIGEgZGF0ZSBpcyBzZWxlY3RhYmxlIGZvciB0aGlzIGRhdGVwaWNrZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGNoZWNrLlxyXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV8c3RyaW5nfG51bWJlcn0gVGhlIGRhdGUgdG8gY2hlY2suXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHNlbGVjdGFibGUsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXHJcblx0XHRcdEBleGFtcGxlIHZhciBzZWxlY3RhYmxlID0gJChzZWxlY3RvcikuZGF0ZXBpY2soJ2lzU2VsZWN0YWJsZScsIGRhdGUpICovXHJcblx0XHRpc1NlbGVjdGFibGU6IGZ1bmN0aW9uKGVsZW0sIGRhdGUpIHtcclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGRhdGUgPSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGV0ZXJtaW5lRGF0ZShkYXRlLFxyXG5cdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlc1swXSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKSwgbnVsbCxcclxuXHRcdFx0XHRpbnN0Lm9wdGlvbnMuZGF0ZUZvcm1hdCwgaW5zdC5nZXRDb25maWcoKSk7XHJcblx0XHRcdHJldHVybiB0aGlzLl9pc1NlbGVjdGFibGUoZWxlbSwgZGF0ZSwgaW5zdC5vcHRpb25zLm9uRGF0ZSxcclxuXHRcdFx0XHRpbnN0LmdldCgnbWluRGF0ZScpLCBpbnN0LmdldCgnbWF4RGF0ZScpKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEludGVybmFsbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYSBkYXRlIGlzIHNlbGVjdGFibGUgZm9yIHRoaXMgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gdGhlIGNvbnRyb2wgdG8gY2hlY2suXHJcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZX0gVGhlIGRhdGUgdG8gY2hlY2suXHJcblx0XHRcdEBwYXJhbSBvbkRhdGUge2Z1bmN0aW9ufGJvb2xlYW59IEFueSA8Y29kZT5vbkRhdGU8L2NvZGU+IGNhbGxiYWNrIG9yIDxjb2RlPmNhbGxiYWNrLnNlbGVjdGFibGU8L2NvZGU+LlxyXG5cdFx0XHRAcGFyYW0gbWluRGF0ZSB7Q0RhdGV9IFRoZSBtaW5pbXVtIGFsbG93ZWQgZGF0ZS5cclxuXHRcdFx0QHBhcmFtIG1heERhdGUge0NEYXRlfSBUaGUgbWF4aW11bSBhbGxvd2VkIGRhdGUuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHNlbGVjdGFibGUsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuICovXHJcblx0XHRfaXNTZWxlY3RhYmxlOiBmdW5jdGlvbihlbGVtLCBkYXRlLCBvbkRhdGUsIG1pbkRhdGUsIG1heERhdGUpIHtcclxuXHRcdFx0dmFyIGRhdGVJbmZvID0gKHR5cGVvZiBvbkRhdGUgPT09ICdib29sZWFuJyA/IHtzZWxlY3RhYmxlOiBvbkRhdGV9IDpcclxuXHRcdFx0XHQoISQuaXNGdW5jdGlvbihvbkRhdGUpID8ge30gOiBvbkRhdGUuYXBwbHkoZWxlbSwgW2RhdGUsIHRydWVdKSkpO1xyXG5cdFx0XHRyZXR1cm4gKGRhdGVJbmZvLnNlbGVjdGFibGUgIT09IGZhbHNlKSAmJlxyXG5cdFx0XHRcdCghbWluRGF0ZSB8fCBkYXRlLnRvSkQoKSA+PSBtaW5EYXRlLnRvSkQoKSkgJiYgKCFtYXhEYXRlIHx8IGRhdGUudG9KRCgpIDw9IG1heERhdGUudG9KRCgpKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFBlcmZvcm0gYSBuYW1lZCBhY3Rpb24gZm9yIGEgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7ZWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxyXG5cdFx0XHRAcGFyYW0gYWN0aW9uIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24uICovXHJcblx0XHRwZXJmb3JtQWN0aW9uOiBmdW5jdGlvbihlbGVtLCBhY3Rpb24pIHtcclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSAmJiAhdGhpcy5pc0Rpc2FibGVkKGVsZW0pKSB7XHJcblx0XHRcdFx0dmFyIGNvbW1hbmRzID0gaW5zdC5vcHRpb25zLmNvbW1hbmRzO1xyXG5cdFx0XHRcdGlmIChjb21tYW5kc1thY3Rpb25dICYmIGNvbW1hbmRzW2FjdGlvbl0uZW5hYmxlZC5hcHBseShlbGVtLCBbaW5zdF0pKSB7XHJcblx0XHRcdFx0XHRjb21tYW5kc1thY3Rpb25dLmFjdGlvbi5hcHBseShlbGVtLCBbaW5zdF0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU2V0IHRoZSBjdXJyZW50bHkgc2hvd24gbW9udGgsIGRlZmF1bHRpbmcgdG8gdG9kYXkncy5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxyXG5cdFx0XHRAcGFyYW0gW3llYXJdIHtudW1iZXJ9IFRoZSB5ZWFyIHRvIHNob3cuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBzaG93ICgxLTEyKS5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gc2hvdy5cclxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuZGF0ZXBpY2soJ3Nob3dNb250aCcsIDIwMTQsIDEyLCAyNSkgKi9cclxuXHRcdHNob3dNb250aDogZnVuY3Rpb24oZWxlbSwgeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpICYmIChkYXkgIT0gbnVsbCB8fFxyXG5cdFx0XHRcdFx0KGluc3QuZHJhd0RhdGUueWVhcigpICE9PSB5ZWFyIHx8IGluc3QuZHJhd0RhdGUubW9udGgoKSAhPT0gbW9udGgpKSkge1xyXG5cdFx0XHRcdGluc3QucHJldkRhdGUgPSBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKTtcclxuXHRcdFx0XHR2YXIgY2FsZW5kYXIgPSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXI7XHJcblx0XHRcdFx0dmFyIHNob3cgPSB0aGlzLl9jaGVja01pbk1heCgoeWVhciAhPSBudWxsID9cclxuXHRcdFx0XHRcdGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbW9udGgsIDEpIDogY2FsZW5kYXIudG9kYXkoKSksIGluc3QpO1xyXG5cdFx0XHRcdGluc3QuZHJhd0RhdGUuZGF0ZShzaG93LnllYXIoKSwgc2hvdy5tb250aCgpLCBcclxuXHRcdFx0XHRcdChkYXkgIT0gbnVsbCA/IGRheSA6IE1hdGgubWluKGluc3QuZHJhd0RhdGUuZGF5KCksXHJcblx0XHRcdFx0XHRjYWxlbmRhci5kYXlzSW5Nb250aChzaG93LnllYXIoKSwgc2hvdy5tb250aCgpKSkpKTtcclxuXHRcdFx0XHR0aGlzLl91cGRhdGUoZWxlbSk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEFkanVzdCB0aGUgY3VycmVudGx5IHNob3duIG1vbnRoLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXHJcblx0XHRcdEBwYXJhbSBvZmZzZXQge251bWJlcn0gVGhlIG51bWJlciBvZiBtb250aHMgdG8gY2hhbmdlIGJ5LlxyXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnY2hhbmdlTW9udGgnLCAyKSovXHJcblx0XHRjaGFuZ2VNb250aDogZnVuY3Rpb24oZWxlbSwgb2Zmc2V0KSB7XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcclxuXHRcdFx0XHR2YXIgZGF0ZSA9IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZChvZmZzZXQsICdtJyk7XHJcblx0XHRcdFx0dGhpcy5zaG93TW9udGgoZWxlbSwgZGF0ZS55ZWFyKCksIGRhdGUubW9udGgoKSk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEFkanVzdCB0aGUgY3VycmVudGx5IHNob3duIGRheS5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxyXG5cdFx0XHRAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cyB0byBjaGFuZ2UgYnkuXHJcblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdjaGFuZ2VEYXknLCA3KSovXHJcblx0XHRjaGFuZ2VEYXk6IGZ1bmN0aW9uKGVsZW0sIG9mZnNldCkge1xyXG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XHJcblx0XHRcdFx0dmFyIGRhdGUgPSBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5hZGQob2Zmc2V0LCAnZCcpO1xyXG5cdFx0XHRcdHRoaXMuc2hvd01vbnRoKGVsZW0sIGRhdGUueWVhcigpLCBkYXRlLm1vbnRoKCksIGRhdGUuZGF5KCkpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXN0cmljdCBhIGRhdGUgdG8gdGhlIG1pbmltdW0vbWF4aW11bSBzcGVjaWZpZWQuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgZGF0ZSB0byBjaGVjay5cclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuICovXHJcblx0XHRfY2hlY2tNaW5NYXg6IGZ1bmN0aW9uKGRhdGUsIGluc3QpIHtcclxuXHRcdFx0dmFyIG1pbkRhdGUgPSBpbnN0LmdldCgnbWluRGF0ZScpO1xyXG5cdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XHJcblx0XHRcdGRhdGUgPSAobWluRGF0ZSAmJiBkYXRlLmNvbXBhcmVUbyhtaW5EYXRlKSA9PT0gLTEgPyBtaW5EYXRlLm5ld0RhdGUoKSA6IGRhdGUpO1xyXG5cdFx0XHRkYXRlID0gKG1heERhdGUgJiYgZGF0ZS5jb21wYXJlVG8obWF4RGF0ZSkgPT09ICsxID8gbWF4RGF0ZS5uZXdEYXRlKCkgOiBkYXRlKTtcclxuXHRcdFx0cmV0dXJuIGRhdGU7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgZGF0ZSBhc3NvY2lhdGVkIHdpdGggYW4gZW50cnkgaW4gdGhlIGRhdGVwaWNrZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSB0YXJnZXQge0VsZW1lbnR9IFRoZSBzZWxlY3RlZCBkYXRlcGlja2VyIGVsZW1lbnQuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgY29ycmVzcG9uZGluZyBkYXRlLCBvciA8Y29kZT5udWxsPC9jb2RlPi5cdFx0XHRcclxuXHRcdFx0QGV4YW1wbGUgdmFyIGRhdGUgPSAkKHNlbGVjdG9yKS5kYXRlcGljaygncmV0cmlldmVEYXRlJywgJCgnZGl2LmRhdGVwaWNrLXBvcHVwIGE6Y29udGFpbnMoMTApJylbMF0pICovXHJcblx0XHRyZXRyaWV2ZURhdGU6IGZ1bmN0aW9uKGVsZW0sIHRhcmdldCkge1xyXG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdHJldHVybiAoJC5pc0VtcHR5T2JqZWN0KGluc3QpID8gbnVsbCA6IGluc3Qub3B0aW9ucy5jYWxlbmRhci5mcm9tSkQoXHJcblx0XHRcdFx0cGFyc2VGbG9hdCh0YXJnZXQuY2xhc3NOYW1lLnJlcGxhY2UoL14uKmpkKFxcZCtcXC41KS4qJC8sICckMScpKSkpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU2VsZWN0IGEgZGF0ZSBmb3IgdGhpcyBkYXRlcGlja2VyLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gdGFyZ2V0IHtFbGVtZW50fSBUaGUgc2VsZWN0ZWQgZGF0ZXBpY2tlciBlbGVtZW50LlxyXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnc2VsZWN0RGF0ZScsICQoJ2Rpdi5kYXRlcGljay1wb3B1cCBhOmNvbnRhaW5zKDEwKScpWzBdKSAqL1xyXG5cdFx0c2VsZWN0RGF0ZTogZnVuY3Rpb24oZWxlbSwgdGFyZ2V0KSB7XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkgJiYgIXRoaXMuaXNEaXNhYmxlZChlbGVtKSkge1xyXG5cdFx0XHRcdHZhciBkYXRlID0gdGhpcy5yZXRyaWV2ZURhdGUoZWxlbSwgdGFyZ2V0KTtcclxuXHRcdFx0XHRpZiAoaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0KSB7XHJcblx0XHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdGlmIChkYXRlLmNvbXBhcmVUbyhpbnN0LnNlbGVjdGVkRGF0ZXNbaV0pID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICghZm91bmQgJiYgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aCA8IGluc3Qub3B0aW9ucy5tdWx0aVNlbGVjdCkge1xyXG5cdFx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXMucHVzaChkYXRlKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBpZiAoaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0KSB7XHJcblx0XHRcdFx0XHRpZiAoaW5zdC5waWNraW5nUmFuZ2UpIHtcclxuXHRcdFx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzWzFdID0gZGF0ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXMgPSBbZGF0ZSwgZGF0ZV07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpbnN0LnBpY2tpbmdSYW5nZSA9ICFpbnN0LnBpY2tpbmdSYW5nZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXMgPSBbZGF0ZV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGluc3QucHJldkRhdGUgPSBpbnN0LmRyYXdEYXRlID0gZGF0ZS5uZXdEYXRlKCk7XHJcblx0XHRcdFx0dGhpcy5fdXBkYXRlSW5wdXQoZWxlbSk7XHJcblx0XHRcdFx0aWYgKGluc3QuaW5saW5lIHx8IGluc3QucGlja2luZ1JhbmdlIHx8IGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGggPFxyXG5cdFx0XHRcdFx0XHQoaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0IHx8IChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgPyAyIDogMSkpKSB7XHJcblx0XHRcdFx0XHR0aGlzLl91cGRhdGUoZWxlbSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5oaWRlKGVsZW0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogR2VuZXJhdGUgdGhlIGRhdGVwaWNrZXIgY29udGVudCBmb3IgdGhpcyBjb250cm9sLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAcmV0dXJuIHtqUXVlcnl9IFRoZSBkYXRlcGlja2VyIGNvbnRlbnQgKi9cclxuXHRcdF9nZW5lcmF0ZUNvbnRlbnQ6IGZ1bmN0aW9uKGVsZW0sIGluc3QpIHtcclxuXHRcdFx0dmFyIG1vbnRoc1RvU2hvdyA9IGluc3Qub3B0aW9ucy5tb250aHNUb1Nob3c7XHJcblx0XHRcdG1vbnRoc1RvU2hvdyA9ICgkLmlzQXJyYXkobW9udGhzVG9TaG93KSA/IG1vbnRoc1RvU2hvdyA6IFsxLCBtb250aHNUb1Nob3ddKTtcclxuXHRcdFx0aW5zdC5kcmF3RGF0ZSA9IHRoaXMuX2NoZWNrTWluTWF4KFxyXG5cdFx0XHRcdGluc3QuZHJhd0RhdGUgfHwgaW5zdC5nZXQoJ2RlZmF1bHREYXRlJykgfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCksIGluc3QpO1xyXG5cdFx0XHR2YXIgZHJhd0RhdGUgPSBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5hZGQoLWluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJyk7XHJcblx0XHRcdC8vIEdlbmVyYXRlIG1vbnRoc1xyXG5cdFx0XHR2YXIgbW9udGhSb3dzID0gJyc7XHJcblx0XHRcdGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IG1vbnRoc1RvU2hvd1swXTsgcm93KyspIHtcclxuXHRcdFx0XHR2YXIgbW9udGhzID0gJyc7XHJcblx0XHRcdFx0Zm9yICh2YXIgY29sID0gMDsgY29sIDwgbW9udGhzVG9TaG93WzFdOyBjb2wrKykge1xyXG5cdFx0XHRcdFx0bW9udGhzICs9IHRoaXMuX2dlbmVyYXRlTW9udGgoZWxlbSwgaW5zdCwgZHJhd0RhdGUueWVhcigpLFxyXG5cdFx0XHRcdFx0XHRkcmF3RGF0ZS5tb250aCgpLCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIsIGluc3Qub3B0aW9ucy5yZW5kZXJlciwgKHJvdyA9PT0gMCAmJiBjb2wgPT09IDApKTtcclxuXHRcdFx0XHRcdGRyYXdEYXRlLmFkZCgxLCAnbScpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRtb250aFJvd3MgKz0gdGhpcy5fcHJlcGFyZShpbnN0Lm9wdGlvbnMucmVuZGVyZXIubW9udGhSb3csIGluc3QpLnJlcGxhY2UoL1xce21vbnRoc1xcfS8sIG1vbnRocyk7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIHBpY2tlciA9IHRoaXMuX3ByZXBhcmUoaW5zdC5vcHRpb25zLnJlbmRlcmVyLnBpY2tlciwgaW5zdCkucmVwbGFjZSgvXFx7bW9udGhzXFx9LywgbW9udGhSb3dzKS5cclxuXHRcdFx0XHRyZXBsYWNlKC9cXHt3ZWVrSGVhZGVyXFx9L2csIHRoaXMuX2dlbmVyYXRlRGF5SGVhZGVycyhpbnN0LCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIsIGluc3Qub3B0aW9ucy5yZW5kZXJlcikpO1xyXG5cdFx0XHQvLyBBZGQgY29tbWFuZHNcclxuXHRcdFx0dmFyIGFkZENvbW1hbmQgPSBmdW5jdGlvbih0eXBlLCBvcGVuLCBjbG9zZSwgbmFtZSwgY2xhc3Nlcykge1xyXG5cdFx0XHRcdGlmIChwaWNrZXIuaW5kZXhPZigneycgKyB0eXBlICsgJzonICsgbmFtZSArICd9JykgPT09IC0xKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBjb21tYW5kID0gaW5zdC5vcHRpb25zLmNvbW1hbmRzW25hbWVdO1xyXG5cdFx0XHRcdHZhciBkYXRlID0gKGluc3Qub3B0aW9ucy5jb21tYW5kc0FzRGF0ZUZvcm1hdCA/IGNvbW1hbmQuZGF0ZS5hcHBseShlbGVtLCBbaW5zdF0pIDogbnVsbCk7XHJcblx0XHRcdFx0cGlja2VyID0gcGlja2VyLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXHsnICsgdHlwZSArICc6JyArIG5hbWUgKyAnXFxcXH0nLCAnZycpLFxyXG5cdFx0XHRcdFx0JzwnICsgb3BlbiArIChjb21tYW5kLnN0YXR1cyA/ICcgdGl0bGU9XCInICsgaW5zdC5vcHRpb25zW2NvbW1hbmQuc3RhdHVzXSArICdcIicgOiAnJykgK1xyXG5cdFx0XHRcdFx0JyBjbGFzcz1cIicgKyBpbnN0Lm9wdGlvbnMucmVuZGVyZXIuY29tbWFuZENsYXNzICsgJyAnICtcclxuXHRcdFx0XHRcdGluc3Qub3B0aW9ucy5yZW5kZXJlci5jb21tYW5kQ2xhc3MgKyAnLScgKyBuYW1lICsgJyAnICsgY2xhc3NlcyArXHJcblx0XHRcdFx0XHQoY29tbWFuZC5lbmFibGVkKGluc3QpID8gJycgOiAnICcgKyBpbnN0Lm9wdGlvbnMucmVuZGVyZXIuZGlzYWJsZWRDbGFzcykgKyAnXCI+JyArXHJcblx0XHRcdFx0XHQoZGF0ZSA/IGRhdGUuZm9ybWF0RGF0ZShpbnN0Lm9wdGlvbnNbY29tbWFuZC50ZXh0XSkgOlxyXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zW2NvbW1hbmQudGV4dF0pICsgJzwvJyArIGNsb3NlICsgJz4nKTtcclxuXHRcdFx0fTtcclxuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBpbnN0Lm9wdGlvbnMuY29tbWFuZHMpIHtcclxuXHRcdFx0XHRhZGRDb21tYW5kKCdidXR0b24nLCAnYnV0dG9uIHR5cGU9XCJidXR0b25cIicsICdidXR0b24nLCBuYW1lLFxyXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRCdXR0b25DbGFzcyk7XHJcblx0XHRcdFx0YWRkQ29tbWFuZCgnbGluaycsICdhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIicsICdhJywgbmFtZSxcclxuXHRcdFx0XHRcdGluc3Qub3B0aW9ucy5yZW5kZXJlci5jb21tYW5kTGlua0NsYXNzKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRwaWNrZXIgPSAkKHBpY2tlcik7XHJcblx0XHRcdGlmIChtb250aHNUb1Nob3dbMV0gPiAxKSB7XHJcblx0XHRcdFx0dmFyIGNvdW50ID0gMDtcclxuXHRcdFx0XHQkKGluc3Qub3B0aW9ucy5yZW5kZXJlci5tb250aFNlbGVjdG9yLCBwaWNrZXIpLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHR2YXIgbnRoID0gKytjb3VudCAlIG1vbnRoc1RvU2hvd1sxXTtcclxuXHRcdFx0XHRcdCQodGhpcykuYWRkQ2xhc3MobnRoID09PSAxID8gJ2ZpcnN0JyA6IChudGggPT09IDAgPyAnbGFzdCcgOiAnJykpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIEFkZCBkYXRlcGlja2VyIGJlaGF2aW91clxyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XHJcblx0XHRcdGZ1bmN0aW9uIHJlbW92ZUhpZ2hsaWdodCgpIHtcclxuXHRcdFx0XHQoaW5zdC5pbmxpbmUgPyAkKHRoaXMpLmNsb3Nlc3QoJy4nICsgc2VsZi5fZ2V0TWFya2VyKCkpIDogaW5zdC5kaXYpLlxyXG5cdFx0XHRcdFx0ZmluZChpbnN0Lm9wdGlvbnMucmVuZGVyZXIuZGF5U2VsZWN0b3IgKyAnIGEnKS5cclxuXHRcdFx0XHRcdHJlbW92ZUNsYXNzKGluc3Qub3B0aW9ucy5yZW5kZXJlci5oaWdobGlnaHRlZENsYXNzKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRwaWNrZXIuZmluZChpbnN0Lm9wdGlvbnMucmVuZGVyZXIuZGF5U2VsZWN0b3IgKyAnIGEnKS5ob3ZlcihcclxuXHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRyZW1vdmVIaWdobGlnaHQuYXBwbHkodGhpcyk7XHJcblx0XHRcdFx0XHRcdCQodGhpcykuYWRkQ2xhc3MoaW5zdC5vcHRpb25zLnJlbmRlcmVyLmhpZ2hsaWdodGVkQ2xhc3MpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHJlbW92ZUhpZ2hsaWdodCkuXHJcblx0XHRcdFx0Y2xpY2soZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRzZWxmLnNlbGVjdERhdGUoZWxlbSwgdGhpcyk7XHJcblx0XHRcdFx0fSkuZW5kKCkuXHJcblx0XHRcdFx0ZmluZCgnc2VsZWN0LicgKyB0aGlzLl9tb250aFllYXJDbGFzcyArICc6bm90KC4nICsgdGhpcy5fYW55WWVhckNsYXNzICsgJyknKS5cclxuXHRcdFx0XHRjaGFuZ2UoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHR2YXIgbW9udGhZZWFyID0gJCh0aGlzKS52YWwoKS5zcGxpdCgnLycpO1xyXG5cdFx0XHRcdFx0c2VsZi5zaG93TW9udGgoZWxlbSwgcGFyc2VJbnQobW9udGhZZWFyWzFdLCAxMCksIHBhcnNlSW50KG1vbnRoWWVhclswXSwgMTApKTtcclxuXHRcdFx0XHR9KS5lbmQoKS5cclxuXHRcdFx0XHRmaW5kKCdzZWxlY3QuJyArIHRoaXMuX2FueVllYXJDbGFzcykuY2xpY2soZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHQkKHRoaXMpLmNzcygndmlzaWJpbGl0eScsICdoaWRkZW4nKS5cclxuXHRcdFx0XHRcdFx0bmV4dCgnaW5wdXQnKS5jc3Moe2xlZnQ6IHRoaXMub2Zmc2V0TGVmdCwgdG9wOiB0aGlzLm9mZnNldFRvcCxcclxuXHRcdFx0XHRcdFx0d2lkdGg6IHRoaXMub2Zmc2V0V2lkdGgsIGhlaWdodDogdGhpcy5vZmZzZXRIZWlnaHR9KS5zaG93KCkuZm9jdXMoKTtcclxuXHRcdFx0XHR9KS5lbmQoKS5cclxuXHRcdFx0XHRmaW5kKCdpbnB1dC4nICsgc2VsZi5fbW9udGhZZWFyQ2xhc3MpLmNoYW5nZShmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdHZhciB5ZWFyID0gcGFyc2VJbnQoJCh0aGlzKS52YWwoKSwgMTApO1xyXG5cdFx0XHRcdFx0XHR5ZWFyID0gKGlzTmFOKHllYXIpID8gaW5zdC5kcmF3RGF0ZS55ZWFyKCkgOiB5ZWFyKTtcclxuXHRcdFx0XHRcdFx0c2VsZi5zaG93TW9udGgoZWxlbSwgeWVhciwgaW5zdC5kcmF3RGF0ZS5tb250aCgpLCBpbnN0LmRyYXdEYXRlLmRheSgpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGNhdGNoIChlKSB7XHJcblx0XHRcdFx0XHRcdGFsZXJ0KGUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pLmtleWRvd24oZnVuY3Rpb24oZXZlbnQpIHtcclxuXHRcdFx0XHRcdGlmIChldmVudC5rZXlDb2RlID09PSAxMykgeyAvLyBFbnRlclxyXG5cdFx0XHRcdFx0XHQkKGV2ZW50LmVsZW0pLmNoYW5nZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMjcpIHsgLy8gRXNjYXBlXHJcblx0XHRcdFx0XHRcdCQoZXZlbnQuZWxlbSkuaGlkZSgpLnByZXYoJ3NlbGVjdCcpLmNzcygndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7XHJcblx0XHRcdFx0XHRcdGluc3QuZWxlbS5mb2N1cygpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHQvLyBBZGQga2V5Ym9hcmQgaGFuZGxpbmdcclxuXHRcdFx0dmFyIGRhdGEgPSB7ZWxlbTogaW5zdC5lbGVtWzBdfTtcclxuXHRcdFx0cGlja2VyLmtleWRvd24oZGF0YSwgdGhpcy5fa2V5RG93bikua2V5cHJlc3MoZGF0YSwgdGhpcy5fa2V5UHJlc3MpLmtleXVwKGRhdGEsIHRoaXMuX2tleVVwKTtcclxuXHRcdFx0Ly8gQWRkIGNvbW1hbmQgYmVoYXZpb3VyXHJcblx0XHRcdHBpY2tlci5maW5kKCcuJyArIGluc3Qub3B0aW9ucy5yZW5kZXJlci5jb21tYW5kQ2xhc3MpLmNsaWNrKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0aWYgKCEkKHRoaXMpLmhhc0NsYXNzKGluc3Qub3B0aW9ucy5yZW5kZXJlci5kaXNhYmxlZENsYXNzKSkge1xyXG5cdFx0XHRcdFx0XHR2YXIgYWN0aW9uID0gdGhpcy5jbGFzc05hbWUucmVwbGFjZShcclxuXHRcdFx0XHRcdFx0XHRuZXcgUmVnRXhwKCdeLionICsgaW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRDbGFzcyArICctKFteIF0rKS4qJCcpLCAnJDEnKTtcclxuXHRcdFx0XHRcdFx0cGx1Z2luLnBlcmZvcm1BY3Rpb24oZWxlbSwgYWN0aW9uKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0Ly8gQWRkIGNsYXNzZXNcclxuXHRcdFx0aWYgKGluc3Qub3B0aW9ucy5pc1JUTCkge1xyXG5cdFx0XHRcdHBpY2tlci5hZGRDbGFzcyhpbnN0Lm9wdGlvbnMucmVuZGVyZXIucnRsQ2xhc3MpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChtb250aHNUb1Nob3dbMF0gKiBtb250aHNUb1Nob3dbMV0gPiAxKSB7XHJcblx0XHRcdFx0cGlja2VyLmFkZENsYXNzKGluc3Qub3B0aW9ucy5yZW5kZXJlci5tdWx0aUNsYXNzKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLnBpY2tlckNsYXNzKSB7XHJcblx0XHRcdFx0cGlja2VyLmFkZENsYXNzKGluc3Qub3B0aW9ucy5waWNrZXJDbGFzcyk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gUmVzaXplXHJcblx0XHRcdCQoJ2JvZHknKS5hcHBlbmQocGlja2VyKTtcclxuXHRcdFx0dmFyIHdpZHRoID0gMDtcclxuXHRcdFx0cGlja2VyLmZpbmQoaW5zdC5vcHRpb25zLnJlbmRlcmVyLm1vbnRoU2VsZWN0b3IpLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0d2lkdGggKz0gJCh0aGlzKS5vdXRlcldpZHRoKCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRwaWNrZXIud2lkdGgod2lkdGggLyBtb250aHNUb1Nob3dbMF0pO1xyXG5cdFx0XHQvLyBQcmUtc2hvdyBjdXN0b21pc2F0aW9uXHJcblx0XHRcdGlmICgkLmlzRnVuY3Rpb24oaW5zdC5vcHRpb25zLm9uU2hvdykpIHtcclxuXHRcdFx0XHRpbnN0Lm9wdGlvbnMub25TaG93LmFwcGx5KGVsZW0sIFtwaWNrZXIsIGluc3Qub3B0aW9ucy5jYWxlbmRhciwgaW5zdF0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBwaWNrZXI7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBHZW5lcmF0ZSB0aGUgY29udGVudCBmb3IgYSBzaW5nbGUgbW9udGguXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGFmZmVjdC5cclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSB5ZWFyIHRvIGdlbmVyYXRlLlxyXG5cdFx0XHRAcGFyYW0gbW9udGgge251bWJlcn0gVGhlIG1vbnRoIHRvIGdlbmVyYXRlLlxyXG5cdFx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIGN1cnJlbnQgY2FsZW5kYXIuXHJcblx0XHRcdEBwYXJhbSByZW5kZXJlciB7b2JqZWN0fSBUaGUgcmVuZGVyaW5nIHRlbXBsYXRlcy5cclxuXHRcdFx0QHBhcmFtIGZpcnN0IHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBmaXJzdCBvZiBtdWx0aXBsZSBtb250aHMuXHJcblx0XHRcdEByZXR1cm4ge3N0cmluZ30gVGhlIG1vbnRoIGNvbnRlbnQuICovXHJcblx0XHRfZ2VuZXJhdGVNb250aDogZnVuY3Rpb24oZWxlbSwgaW5zdCwgeWVhciwgbW9udGgsIGNhbGVuZGFyLCByZW5kZXJlciwgZmlyc3QpIHtcclxuXHRcdFx0dmFyIGRheXNJbk1vbnRoID0gY2FsZW5kYXIuZGF5c0luTW9udGgoeWVhciwgbW9udGgpO1xyXG5cdFx0XHR2YXIgbW9udGhzVG9TaG93ID0gaW5zdC5vcHRpb25zLm1vbnRoc1RvU2hvdztcclxuXHRcdFx0bW9udGhzVG9TaG93ID0gKCQuaXNBcnJheShtb250aHNUb1Nob3cpID8gbW9udGhzVG9TaG93IDogWzEsIG1vbnRoc1RvU2hvd10pO1xyXG5cdFx0XHR2YXIgZml4ZWRXZWVrcyA9IGluc3Qub3B0aW9ucy5maXhlZFdlZWtzIHx8IChtb250aHNUb1Nob3dbMF0gKiBtb250aHNUb1Nob3dbMV0gPiAxKTtcclxuXHRcdFx0dmFyIGZpcnN0RGF5ID0gaW5zdC5vcHRpb25zLmZpcnN0RGF5O1xyXG5cdFx0XHRmaXJzdERheSA9IChmaXJzdERheSA9PSBudWxsID8gY2FsZW5kYXIubG9jYWwuZmlyc3REYXkgOiBmaXJzdERheSk7XHJcblx0XHRcdHZhciBsZWFkRGF5cyA9IChjYWxlbmRhci5kYXlPZldlZWsoeWVhciwgbW9udGgsIGNhbGVuZGFyLm1pbkRheSkgLVxyXG5cdFx0XHRcdGZpcnN0RGF5ICsgY2FsZW5kYXIuZGF5c0luV2VlaygpKSAlIGNhbGVuZGFyLmRheXNJbldlZWsoKTtcclxuXHRcdFx0dmFyIG51bVdlZWtzID0gKGZpeGVkV2Vla3MgPyA2IDogTWF0aC5jZWlsKChsZWFkRGF5cyArIGRheXNJbk1vbnRoKSAvIGNhbGVuZGFyLmRheXNJbldlZWsoKSkpO1xyXG5cdFx0XHR2YXIgc2VsZWN0T3RoZXJNb250aHMgPSBpbnN0Lm9wdGlvbnMuc2VsZWN0T3RoZXJNb250aHMgJiYgaW5zdC5vcHRpb25zLnNob3dPdGhlck1vbnRocztcclxuXHRcdFx0dmFyIG1pbkRhdGUgPSAoaW5zdC5waWNraW5nUmFuZ2UgPyBpbnN0LnNlbGVjdGVkRGF0ZXNbMF0gOiBpbnN0LmdldCgnbWluRGF0ZScpKTtcclxuXHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xyXG5cdFx0XHR2YXIgc2hvd1dlZWtzID0gcmVuZGVyZXIud2Vlay5pbmRleE9mKCd7d2Vla09mWWVhcn0nKSA+IC0xO1xyXG5cdFx0XHR2YXIgdG9kYXkgPSBjYWxlbmRhci50b2RheSgpO1xyXG5cdFx0XHR2YXIgZHJhd0RhdGUgPSBjYWxlbmRhci5uZXdEYXRlKHllYXIsIG1vbnRoLCBjYWxlbmRhci5taW5EYXkpO1xyXG5cdFx0XHRkcmF3RGF0ZS5hZGQoLWxlYWREYXlzIC0gKGZpeGVkV2Vla3MgJiZcclxuXHRcdFx0XHQoZHJhd0RhdGUuZGF5T2ZXZWVrKCkgPT09IGZpcnN0RGF5IHx8IGRyYXdEYXRlLmRheXNJbk1vbnRoKCkgPCBjYWxlbmRhci5kYXlzSW5XZWVrKCkpP1xyXG5cdFx0XHRcdGNhbGVuZGFyLmRheXNJbldlZWsoKSA6IDApLCAnZCcpO1xyXG5cdFx0XHR2YXIgamQgPSBkcmF3RGF0ZS50b0pEKCk7XHJcblx0XHRcdC8vIEdlbmVyYXRlIHdlZWtzXHJcblx0XHRcdHZhciB3ZWVrcyA9ICcnO1xyXG5cdFx0XHRmb3IgKHZhciB3ZWVrID0gMDsgd2VlayA8IG51bVdlZWtzOyB3ZWVrKyspIHtcclxuXHRcdFx0XHR2YXIgd2Vla09mWWVhciA9ICghc2hvd1dlZWtzID8gJycgOiAnPHNwYW4gY2xhc3M9XCJqZCcgKyBqZCArICdcIj4nICtcclxuXHRcdFx0XHRcdCgkLmlzRnVuY3Rpb24oaW5zdC5vcHRpb25zLmNhbGN1bGF0ZVdlZWspID9cclxuXHRcdFx0XHRcdGluc3Qub3B0aW9ucy5jYWxjdWxhdGVXZWVrKGRyYXdEYXRlKSA6IGRyYXdEYXRlLndlZWtPZlllYXIoKSkgKyAnPC9zcGFuPicpO1xyXG5cdFx0XHRcdHZhciBkYXlzID0gJyc7XHJcblx0XHRcdFx0Zm9yICh2YXIgZGF5ID0gMDsgZGF5IDwgY2FsZW5kYXIuZGF5c0luV2VlaygpOyBkYXkrKykge1xyXG5cdFx0XHRcdFx0dmFyIHNlbGVjdGVkID0gZmFsc2U7XHJcblx0XHRcdFx0XHRpZiAoaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0ICYmIGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdHNlbGVjdGVkID0gKGRyYXdEYXRlLmNvbXBhcmVUbyhpbnN0LnNlbGVjdGVkRGF0ZXNbMF0pICE9PSAtMSAmJlxyXG5cdFx0XHRcdFx0XHRcdGRyYXdEYXRlLmNvbXBhcmVUbyhpbnN0LnNlbGVjdGVkRGF0ZXNbMV0pICE9PSArMSlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChpbnN0LnNlbGVjdGVkRGF0ZXNbaV0uY29tcGFyZVRvKGRyYXdEYXRlKSA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR2YXIgZGF0ZUluZm8gPSAoISQuaXNGdW5jdGlvbihpbnN0Lm9wdGlvbnMub25EYXRlKSA/IHt9IDpcclxuXHRcdFx0XHRcdFx0aW5zdC5vcHRpb25zLm9uRGF0ZS5hcHBseShlbGVtLCBbZHJhd0RhdGUsIGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoXSkpO1xyXG5cdFx0XHRcdFx0dmFyIHNlbGVjdGFibGUgPSAoc2VsZWN0T3RoZXJNb250aHMgfHwgZHJhd0RhdGUubW9udGgoKSA9PT0gbW9udGgpICYmXHJcblx0XHRcdFx0XHRcdHRoaXMuX2lzU2VsZWN0YWJsZShlbGVtLCBkcmF3RGF0ZSwgZGF0ZUluZm8uc2VsZWN0YWJsZSwgbWluRGF0ZSwgbWF4RGF0ZSk7XHJcblx0XHRcdFx0XHRkYXlzICs9IHRoaXMuX3ByZXBhcmUocmVuZGVyZXIuZGF5LCBpbnN0KS5yZXBsYWNlKC9cXHtkYXlcXH0vZyxcclxuXHRcdFx0XHRcdFx0KHNlbGVjdGFibGUgPyAnPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiJyA6ICc8c3BhbicpICtcclxuXHRcdFx0XHRcdFx0JyBjbGFzcz1cImpkJyArIGpkICsgJyAnICsgKGRhdGVJbmZvLmRhdGVDbGFzcyB8fCAnJykgK1xyXG5cdFx0XHRcdFx0XHQoc2VsZWN0ZWQgJiYgKHNlbGVjdE90aGVyTW9udGhzIHx8IGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoKSA/XHJcblx0XHRcdFx0XHRcdCcgJyArIHJlbmRlcmVyLnNlbGVjdGVkQ2xhc3MgOiAnJykgK1xyXG5cdFx0XHRcdFx0XHQoc2VsZWN0YWJsZSA/ICcgJyArIHJlbmRlcmVyLmRlZmF1bHRDbGFzcyA6ICcnKSArXHJcblx0XHRcdFx0XHRcdChkcmF3RGF0ZS53ZWVrRGF5KCkgPyAnJyA6ICcgJyArIHJlbmRlcmVyLndlZWtlbmRDbGFzcykgK1xyXG5cdFx0XHRcdFx0XHQoZHJhd0RhdGUubW9udGgoKSA9PT0gbW9udGggPyAnJyA6ICcgJyArIHJlbmRlcmVyLm90aGVyTW9udGhDbGFzcykgK1xyXG5cdFx0XHRcdFx0XHQoZHJhd0RhdGUuY29tcGFyZVRvKHRvZGF5KSA9PT0gMCAmJiBkcmF3RGF0ZS5tb250aCgpID09PSBtb250aCA/XHJcblx0XHRcdFx0XHRcdCcgJyArIHJlbmRlcmVyLnRvZGF5Q2xhc3MgOiAnJykgK1xyXG5cdFx0XHRcdFx0XHQoZHJhd0RhdGUuY29tcGFyZVRvKGluc3QuZHJhd0RhdGUpID09PSAwICYmIGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoID9cclxuXHRcdFx0XHRcdFx0JyAnICsgcmVuZGVyZXIuaGlnaGxpZ2h0ZWRDbGFzcyA6ICcnKSArICdcIicgK1xyXG5cdFx0XHRcdFx0XHQoZGF0ZUluZm8udGl0bGUgfHwgKGluc3Qub3B0aW9ucy5kYXlTdGF0dXMgJiYgc2VsZWN0YWJsZSkgPyAnIHRpdGxlPVwiJyArXHJcblx0XHRcdFx0XHRcdChkYXRlSW5mby50aXRsZSB8fCBkcmF3RGF0ZS5mb3JtYXREYXRlKGluc3Qub3B0aW9ucy5kYXlTdGF0dXMpKSArICdcIicgOiAnJykgKyAnPicgK1xyXG5cdFx0XHRcdFx0XHQoaW5zdC5vcHRpb25zLnNob3dPdGhlck1vbnRocyB8fCBkcmF3RGF0ZS5tb250aCgpID09PSBtb250aCA/XHJcblx0XHRcdFx0XHRcdGRhdGVJbmZvLmNvbnRlbnQgfHwgZHJhd0RhdGUuZGF5KCkgOiAnJiMxNjA7JykgK1xyXG5cdFx0XHRcdFx0XHQoc2VsZWN0YWJsZSA/ICc8L2E+JyA6ICc8L3NwYW4+JykpO1xyXG5cdFx0XHRcdFx0ZHJhd0RhdGUuYWRkKDEsICdkJyk7XHJcblx0XHRcdFx0XHRqZCsrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR3ZWVrcyArPSB0aGlzLl9wcmVwYXJlKHJlbmRlcmVyLndlZWssIGluc3QpLnJlcGxhY2UoL1xce2RheXNcXH0vZywgZGF5cykuXHJcblx0XHRcdFx0XHRyZXBsYWNlKC9cXHt3ZWVrT2ZZZWFyXFx9L2csIHdlZWtPZlllYXIpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBtb250aEhlYWRlciA9IHRoaXMuX3ByZXBhcmUocmVuZGVyZXIubW9udGgsIGluc3QpLm1hdGNoKC9cXHttb250aEhlYWRlcig6W15cXH1dKyk/XFx9Lyk7XHJcblx0XHRcdG1vbnRoSGVhZGVyID0gKG1vbnRoSGVhZGVyWzBdLmxlbmd0aCA8PSAxMyA/ICdNTSB5eXl5JyA6XHJcblx0XHRcdFx0bW9udGhIZWFkZXJbMF0uc3Vic3RyaW5nKDEzLCBtb250aEhlYWRlclswXS5sZW5ndGggLSAxKSk7XHJcblx0XHRcdG1vbnRoSGVhZGVyID0gKGZpcnN0ID8gdGhpcy5fZ2VuZXJhdGVNb250aFNlbGVjdGlvbihcclxuXHRcdFx0XHRpbnN0LCB5ZWFyLCBtb250aCwgbWluRGF0ZSwgbWF4RGF0ZSwgbW9udGhIZWFkZXIsIGNhbGVuZGFyLCByZW5kZXJlcikgOlxyXG5cdFx0XHRcdGNhbGVuZGFyLmZvcm1hdERhdGUobW9udGhIZWFkZXIsIGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbW9udGgsIGNhbGVuZGFyLm1pbkRheSkpKTtcclxuXHRcdFx0dmFyIHdlZWtIZWFkZXIgPSB0aGlzLl9wcmVwYXJlKHJlbmRlcmVyLndlZWtIZWFkZXIsIGluc3QpLlxyXG5cdFx0XHRcdHJlcGxhY2UoL1xce2RheXNcXH0vZywgdGhpcy5fZ2VuZXJhdGVEYXlIZWFkZXJzKGluc3QsIGNhbGVuZGFyLCByZW5kZXJlcikpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fcHJlcGFyZShyZW5kZXJlci5tb250aCwgaW5zdCkucmVwbGFjZSgvXFx7bW9udGhIZWFkZXIoOlteXFx9XSspP1xcfS9nLCBtb250aEhlYWRlcikuXHJcblx0XHRcdFx0cmVwbGFjZSgvXFx7d2Vla0hlYWRlclxcfS9nLCB3ZWVrSGVhZGVyKS5yZXBsYWNlKC9cXHt3ZWVrc1xcfS9nLCB3ZWVrcyk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBHZW5lcmF0ZSB0aGUgSFRNTCBmb3IgdGhlIGRheSBoZWFkZXJzLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIGN1cnJlbnQgY2FsZW5kYXIuXHJcblx0XHRcdEBwYXJhbSByZW5kZXJlciB7b2JqZWN0fSBUaGUgcmVuZGVyaW5nIHRlbXBsYXRlcy5cclxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBBIHdlZWsncyB3b3J0aCBvZiBkYXkgaGVhZGVycy4gKi9cclxuXHRcdF9nZW5lcmF0ZURheUhlYWRlcnM6IGZ1bmN0aW9uKGluc3QsIGNhbGVuZGFyLCByZW5kZXJlcikge1xyXG5cdFx0XHR2YXIgZmlyc3REYXkgPSBpbnN0Lm9wdGlvbnMuZmlyc3REYXk7XHJcblx0XHRcdGZpcnN0RGF5ID0gKGZpcnN0RGF5ID09IG51bGwgPyBjYWxlbmRhci5sb2NhbC5maXJzdERheSA6IGZpcnN0RGF5KTtcclxuXHRcdFx0dmFyIGhlYWRlciA9ICcnO1xyXG5cdFx0XHRmb3IgKHZhciBkYXkgPSAwOyBkYXkgPCBjYWxlbmRhci5kYXlzSW5XZWVrKCk7IGRheSsrKSB7XHJcblx0XHRcdFx0dmFyIGRvdyA9IChkYXkgKyBmaXJzdERheSkgJSBjYWxlbmRhci5kYXlzSW5XZWVrKCk7XHJcblx0XHRcdFx0aGVhZGVyICs9IHRoaXMuX3ByZXBhcmUocmVuZGVyZXIuZGF5SGVhZGVyLCBpbnN0KS5yZXBsYWNlKC9cXHtkYXlcXH0vZyxcclxuXHRcdFx0XHRcdCc8c3BhbiBjbGFzcz1cIicgKyB0aGlzLl9jdXJEb1dDbGFzcyArIGRvdyArICdcIiB0aXRsZT1cIicgK1xyXG5cdFx0XHRcdFx0Y2FsZW5kYXIubG9jYWwuZGF5TmFtZXNbZG93XSArICdcIj4nICsgY2FsZW5kYXIubG9jYWwuZGF5TmFtZXNNaW5bZG93XSArICc8L3NwYW4+Jyk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGhlYWRlcjtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEdlbmVyYXRlIHNlbGVjdGlvbiBjb250cm9scyBmb3IgbW9udGguXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSB5ZWFyIHRvIGdlbmVyYXRlLlxyXG5cdFx0XHRAcGFyYW0gbW9udGgge251bWJlcn0gVGhlIG1vbnRoIHRvIGdlbmVyYXRlLlxyXG5cdFx0XHRAcGFyYW0gbWluRGF0ZSB7Q0RhdGV9IFRoZSBtaW5pbXVtIGRhdGUgYWxsb3dlZC5cclxuXHRcdFx0QHBhcmFtIG1heERhdGUge0NEYXRlfSBUaGUgbWF4aW11bSBkYXRlIGFsbG93ZWQuXHJcblx0XHRcdEBwYXJhbSBtb250aEhlYWRlciB7c3RyaW5nfSBUaGUgbW9udGgveWVhciBmb3JtYXQuXHJcblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY3VycmVudCBjYWxlbmRhci5cclxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgbW9udGggc2VsZWN0aW9uIGNvbnRlbnQuICovXHJcblx0XHRfZ2VuZXJhdGVNb250aFNlbGVjdGlvbjogZnVuY3Rpb24oaW5zdCwgeWVhciwgbW9udGgsIG1pbkRhdGUsIG1heERhdGUsIG1vbnRoSGVhZGVyLCBjYWxlbmRhcikge1xyXG5cdFx0XHRpZiAoIWluc3Qub3B0aW9ucy5jaGFuZ2VNb250aCkge1xyXG5cdFx0XHRcdHJldHVybiBjYWxlbmRhci5mb3JtYXREYXRlKG1vbnRoSGVhZGVyLCBjYWxlbmRhci5uZXdEYXRlKHllYXIsIG1vbnRoLCAxKSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gTW9udGhzXHJcblx0XHRcdHZhciBtb250aE5hbWVzID0gY2FsZW5kYXIubG9jYWxbXHJcblx0XHRcdFx0J21vbnRoTmFtZXMnICsgKG1vbnRoSGVhZGVyLm1hdGNoKC9tbS9pKSA/ICcnIDogJ1Nob3J0JyldO1xyXG5cdFx0XHR2YXIgaHRtbCA9IG1vbnRoSGVhZGVyLnJlcGxhY2UoL20rL2ksICdcXFxceDJFJykucmVwbGFjZSgveSsvaSwgJ1xcXFx4MkYnKTtcclxuXHRcdFx0dmFyIHNlbGVjdG9yID0gJzxzZWxlY3QgY2xhc3M9XCInICsgdGhpcy5fbW9udGhZZWFyQ2xhc3MgK1xyXG5cdFx0XHRcdCdcIiB0aXRsZT1cIicgKyBpbnN0Lm9wdGlvbnMubW9udGhTdGF0dXMgKyAnXCI+JztcclxuXHRcdFx0dmFyIG1heE1vbnRoID0gY2FsZW5kYXIubW9udGhzSW5ZZWFyKHllYXIpICsgY2FsZW5kYXIubWluTW9udGg7XHJcblx0XHRcdGZvciAodmFyIG0gPSBjYWxlbmRhci5taW5Nb250aDsgbSA8IG1heE1vbnRoOyBtKyspIHtcclxuXHRcdFx0XHRpZiAoKCFtaW5EYXRlIHx8IGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbSxcclxuXHRcdFx0XHRcdFx0Y2FsZW5kYXIuZGF5c0luTW9udGgoeWVhciwgbSkgLSAxICsgY2FsZW5kYXIubWluRGF5KS5cclxuXHRcdFx0XHRcdFx0Y29tcGFyZVRvKG1pbkRhdGUpICE9PSAtMSkgJiZcclxuXHRcdFx0XHRcdFx0KCFtYXhEYXRlIHx8IGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbSwgY2FsZW5kYXIubWluRGF5KS5cclxuXHRcdFx0XHRcdFx0Y29tcGFyZVRvKG1heERhdGUpICE9PSArMSkpIHtcclxuXHRcdFx0XHRcdHNlbGVjdG9yICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIG0gKyAnLycgKyB5ZWFyICsgJ1wiJyArXHJcblx0XHRcdFx0XHRcdChtb250aCA9PT0gbSA/ICcgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJyA6ICcnKSArICc+JyArXHJcblx0XHRcdFx0XHRcdG1vbnRoTmFtZXNbbSAtIGNhbGVuZGFyLm1pbk1vbnRoXSArICc8L29wdGlvbj4nO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRzZWxlY3RvciArPSAnPC9zZWxlY3Q+JztcclxuXHRcdFx0aHRtbCA9IGh0bWwucmVwbGFjZSgvXFxcXHgyRS8sIHNlbGVjdG9yKTtcclxuXHRcdFx0Ly8gWWVhcnNcclxuXHRcdFx0dmFyIHllYXJSYW5nZSA9IGluc3Qub3B0aW9ucy55ZWFyUmFuZ2U7XHJcblx0XHRcdGlmICh5ZWFyUmFuZ2UgPT09ICdhbnknKSB7XHJcblx0XHRcdFx0c2VsZWN0b3IgPSAnPHNlbGVjdCBjbGFzcz1cIicgKyB0aGlzLl9tb250aFllYXJDbGFzcyArICcgJyArIHRoaXMuX2FueVllYXJDbGFzcyArXHJcblx0XHRcdFx0XHQnXCIgdGl0bGU9XCInICsgaW5zdC5vcHRpb25zLnllYXJTdGF0dXMgKyAnXCI+JyArXHJcblx0XHRcdFx0XHQnPG9wdGlvbj4nICsgeWVhciArICc8L29wdGlvbj48L3NlbGVjdD4nICtcclxuXHRcdFx0XHRcdCc8aW5wdXQgY2xhc3M9XCInICsgdGhpcy5fbW9udGhZZWFyQ2xhc3MgKyAnICcgKyB0aGlzLl9jdXJNb250aENsYXNzICtcclxuXHRcdFx0XHRcdG1vbnRoICsgJ1wiIHZhbHVlPVwiJyArIHllYXIgKyAnXCI+JztcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHR5ZWFyUmFuZ2UgPSB5ZWFyUmFuZ2Uuc3BsaXQoJzonKTtcclxuXHRcdFx0XHR2YXIgdG9kYXlZZWFyID0gY2FsZW5kYXIudG9kYXkoKS55ZWFyKCk7XHJcblx0XHRcdFx0dmFyIHN0YXJ0ID0gKHllYXJSYW5nZVswXS5tYXRjaCgnY1srLV0uKicpID8geWVhciArIHBhcnNlSW50KHllYXJSYW5nZVswXS5zdWJzdHJpbmcoMSksIDEwKSA6XHJcblx0XHRcdFx0XHQoKHllYXJSYW5nZVswXS5tYXRjaCgnWystXS4qJykgPyB0b2RheVllYXIgOiAwKSArIHBhcnNlSW50KHllYXJSYW5nZVswXSwgMTApKSk7XHJcblx0XHRcdFx0dmFyIGVuZCA9ICh5ZWFyUmFuZ2VbMV0ubWF0Y2goJ2NbKy1dLionKSA/IHllYXIgKyBwYXJzZUludCh5ZWFyUmFuZ2VbMV0uc3Vic3RyaW5nKDEpLCAxMCkgOlxyXG5cdFx0XHRcdFx0KCh5ZWFyUmFuZ2VbMV0ubWF0Y2goJ1srLV0uKicpID8gdG9kYXlZZWFyIDogMCkgKyBwYXJzZUludCh5ZWFyUmFuZ2VbMV0sIDEwKSkpO1xyXG5cdFx0XHRcdHNlbGVjdG9yID0gJzxzZWxlY3QgY2xhc3M9XCInICsgdGhpcy5fbW9udGhZZWFyQ2xhc3MgK1xyXG5cdFx0XHRcdFx0J1wiIHRpdGxlPVwiJyArIGluc3Qub3B0aW9ucy55ZWFyU3RhdHVzICsgJ1wiPic7XHJcblx0XHRcdFx0c3RhcnQgPSBjYWxlbmRhci5uZXdEYXRlKHN0YXJ0ICsgMSwgY2FsZW5kYXIuZmlyc3RNb250aCwgY2FsZW5kYXIubWluRGF5KS5hZGQoLTEsICdkJyk7XHJcblx0XHRcdFx0ZW5kID0gY2FsZW5kYXIubmV3RGF0ZShlbmQsIGNhbGVuZGFyLmZpcnN0TW9udGgsIGNhbGVuZGFyLm1pbkRheSk7XHJcblx0XHRcdFx0dmFyIGFkZFllYXIgPSBmdW5jdGlvbih5LCB5RGlzcGxheSkge1xyXG5cdFx0XHRcdFx0aWYgKHkgIT09IDAgfHwgY2FsZW5kYXIuaGFzWWVhclplcm8pIHtcclxuXHRcdFx0XHRcdFx0c2VsZWN0b3IgKz0gJzxvcHRpb24gdmFsdWU9XCInICtcclxuXHRcdFx0XHRcdFx0XHRNYXRoLm1pbihtb250aCwgY2FsZW5kYXIubW9udGhzSW5ZZWFyKHkpIC0gMSArIGNhbGVuZGFyLm1pbk1vbnRoKSArXHJcblx0XHRcdFx0XHRcdFx0Jy8nICsgeSArICdcIicgKyAoeWVhciA9PT0geSA/ICcgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJyA6ICcnKSArICc+JyArXHJcblx0XHRcdFx0XHRcdFx0KHlEaXNwbGF5IHx8IHkpICsgJzwvb3B0aW9uPic7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRpZiAoc3RhcnQudG9KRCgpIDwgZW5kLnRvSkQoKSkge1xyXG5cdFx0XHRcdFx0c3RhcnQgPSAobWluRGF0ZSAmJiBtaW5EYXRlLmNvbXBhcmVUbyhzdGFydCkgPT09ICsxID8gbWluRGF0ZSA6IHN0YXJ0KS55ZWFyKCk7XHJcblx0XHRcdFx0XHRlbmQgPSAobWF4RGF0ZSAmJiBtYXhEYXRlLmNvbXBhcmVUbyhlbmQpID09PSAtMSA/IG1heERhdGUgOiBlbmQpLnllYXIoKTtcclxuXHRcdFx0XHRcdHZhciBlYXJsaWVyTGF0ZXIgPSBNYXRoLmZsb29yKChlbmQgLSBzdGFydCkgLyAyKTtcclxuXHRcdFx0XHRcdGlmICghbWluRGF0ZSB8fCBtaW5EYXRlLnllYXIoKSA8IHN0YXJ0KSB7XHJcblx0XHRcdFx0XHRcdGFkZFllYXIoc3RhcnQgLSBlYXJsaWVyTGF0ZXIsIGluc3Qub3B0aW9ucy5lYXJsaWVyVGV4dCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRmb3IgKHZhciB5ID0gc3RhcnQ7IHkgPD0gZW5kOyB5KyspIHtcclxuXHRcdFx0XHRcdFx0YWRkWWVhcih5KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICghbWF4RGF0ZSB8fCBtYXhEYXRlLnllYXIoKSA+IGVuZCkge1xyXG5cdFx0XHRcdFx0XHRhZGRZZWFyKGVuZCArIGVhcmxpZXJMYXRlciwgaW5zdC5vcHRpb25zLmxhdGVyVGV4dCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0c3RhcnQgPSAobWF4RGF0ZSAmJiBtYXhEYXRlLmNvbXBhcmVUbyhzdGFydCkgPT09IC0xID8gbWF4RGF0ZSA6IHN0YXJ0KS55ZWFyKCk7XHJcblx0XHRcdFx0XHRlbmQgPSAobWluRGF0ZSAmJiBtaW5EYXRlLmNvbXBhcmVUbyhlbmQpID09PSArMSA/IG1pbkRhdGUgOiBlbmQpLnllYXIoKTtcclxuXHRcdFx0XHRcdHZhciBlYXJsaWVyTGF0ZXIgPSBNYXRoLmZsb29yKChzdGFydCAtIGVuZCkgLyAyKTtcclxuXHRcdFx0XHRcdGlmICghbWF4RGF0ZSB8fCBtYXhEYXRlLnllYXIoKSA+IHN0YXJ0KSB7XHJcblx0XHRcdFx0XHRcdGFkZFllYXIoc3RhcnQgKyBlYXJsaWVyTGF0ZXIsIGluc3Qub3B0aW9ucy5lYXJsaWVyVGV4dCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRmb3IgKHZhciB5ID0gc3RhcnQ7IHkgPj0gZW5kOyB5LS0pIHtcclxuXHRcdFx0XHRcdFx0YWRkWWVhcih5KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICghbWluRGF0ZSB8fCBtaW5EYXRlLnllYXIoKSA8IGVuZCkge1xyXG5cdFx0XHRcdFx0XHRhZGRZZWFyKGVuZCAtIGVhcmxpZXJMYXRlciwgaW5zdC5vcHRpb25zLmxhdGVyVGV4dCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHNlbGVjdG9yICs9ICc8L3NlbGVjdD4nO1xyXG5cdFx0XHR9XHJcblx0XHRcdGh0bWwgPSBodG1sLnJlcGxhY2UoL1xcXFx4MkYvLCBzZWxlY3Rvcik7XHJcblx0XHRcdHJldHVybiBodG1sO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUHJlcGFyZSBhIHJlbmRlciB0ZW1wbGF0ZSBmb3IgdXNlLlxyXG5cdFx0XHRFeGNsdWRlIHBvcHVwL2lubGluZSBzZWN0aW9ucyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZS5cclxuXHRcdFx0TG9jYWxpc2UgdGV4dCBvZiB0aGUgZm9ybToge2wxMG46bmFtZX0uXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIHRleHQge3N0cmluZ30gVGhlIHRleHQgdG8gbG9jYWxpc2UuXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBsb2NhbGlzZWQgdGV4dC4gKi9cclxuXHRcdF9wcmVwYXJlOiBmdW5jdGlvbih0ZXh0LCBpbnN0KSB7XHJcblx0XHRcdHZhciByZXBsYWNlU2VjdGlvbiA9IGZ1bmN0aW9uKHR5cGUsIHJldGFpbikge1xyXG5cdFx0XHRcdHdoaWxlICh0cnVlKSB7XHJcblx0XHRcdFx0XHR2YXIgc3RhcnQgPSB0ZXh0LmluZGV4T2YoJ3snICsgdHlwZSArICc6c3RhcnR9Jyk7XHJcblx0XHRcdFx0XHRpZiAoc3RhcnQgPT09IC0xKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHZhciBlbmQgPSB0ZXh0LnN1YnN0cmluZyhzdGFydCkuaW5kZXhPZigneycgKyB0eXBlICsgJzplbmR9Jyk7XHJcblx0XHRcdFx0XHRpZiAoZW5kID4gLTEpIHtcclxuXHRcdFx0XHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIHN0YXJ0KSArXHJcblx0XHRcdFx0XHRcdFx0KHJldGFpbiA/IHRleHQuc3Vic3RyKHN0YXJ0ICsgdHlwZS5sZW5ndGggKyA4LCBlbmQgLSB0eXBlLmxlbmd0aCAtIDgpIDogJycpICtcclxuXHRcdFx0XHRcdFx0XHR0ZXh0LnN1YnN0cmluZyhzdGFydCArIGVuZCArIHR5cGUubGVuZ3RoICsgNik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cdFx0XHRyZXBsYWNlU2VjdGlvbignaW5saW5lJywgaW5zdC5pbmxpbmUpO1xyXG5cdFx0XHRyZXBsYWNlU2VjdGlvbigncG9wdXAnLCAhaW5zdC5pbmxpbmUpO1xyXG5cdFx0XHR2YXIgcGF0dGVybiA9IC9cXHtsMTBuOihbXlxcfV0rKVxcfS87XHJcblx0XHRcdHZhciBtYXRjaGVzID0gbnVsbDtcclxuXHRcdFx0d2hpbGUgKG1hdGNoZXMgPSBwYXR0ZXJuLmV4ZWModGV4dCkpIHtcclxuXHRcdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKG1hdGNoZXNbMF0sIGluc3Qub3B0aW9uc1ttYXRjaGVzWzFdXSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRleHQ7XHJcblx0XHR9XHJcblx0fSk7XHJcblxyXG5cdHZhciBwbHVnaW4gPSAkLmNhbGVuZGFyc1BpY2tlcjsgLy8gU2luZ2xldG9uIGluc3RhbmNlXHJcblxyXG5cdCQoZnVuY3Rpb24oKSB7XHJcblx0XHQkKGRvY3VtZW50KS5vbignbW91c2Vkb3duLicgKyBwbHVnaW5OYW1lLCBwbHVnaW4uX2NoZWNrRXh0ZXJuYWxDbGljaykuXHJcblx0XHRcdG9uKCdyZXNpemUuJyArIHBsdWdpbk5hbWUsIGZ1bmN0aW9uKCkgeyBwbHVnaW4uaGlkZShwbHVnaW4uY3VySW5zdCk7IH0pO1xyXG5cdH0pO1xyXG5cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.coptic.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.coptic.js index 8b8e44f18fb..7b7ee240398 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.coptic.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.coptic.js @@ -172,4 +172,4 @@ $.calendars.calendars.coptic = CopticCalendar; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuY29wdGljLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMuY29wdGljLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQ29wdGljIGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxuICAgV3JpdHRlbiBieSBLZWl0aCBXb29kIChrYndvb2R7YXR9aWluZXQuY29tLmF1KSBGZWJydWFyeSAyMDEwLlxuICAgQXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvbGljZW5jZS5odG1sKSBsaWNlbnNlLiBcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xuXG4oZnVuY3Rpb24oJCkgeyAvLyBIaWRlIHNjb3BlLCBubyAkIGNvbmZsaWN0XG5cblx0LyoqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBDb3B0aWMgY2FsZW5kYXIuXG5cdFx0U2VlIDxhIGhyZWY9XCJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvcHRpY19jYWxlbmRhclwiPmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29wdGljX2NhbGVuZGFyPC9hPi5cblx0XHRTZWUgYWxzbyBDYWxlbmRyaWNhbCBDYWxjdWxhdGlvbnM6IFRoZSBNaWxsZW5uaXVtIEVkaXRpb25cblx0XHQoPGEgaHJlZj1cImh0dHA6Ly9lbXIuY3MuaWl0LmVkdS9ob21lL3JlaW5nb2xkL2NhbGVuZGFyLWJvb2svaW5kZXguc2h0bWxcIj5odHRwOi8vZW1yLmNzLmlpdC5lZHUvaG9tZS9yZWluZ29sZC9jYWxlbmRhci1ib29rL2luZGV4LnNodG1sPC9hPikuXG5cdFx0QGNsYXNzIENvcHRpY0NhbGVuZGFyXG5cdFx0QHBhcmFtIFtsYW5ndWFnZT0nJ10ge3N0cmluZ30gVGhlIGxhbmd1YWdlIGNvZGUgKGRlZmF1bHQgRW5nbGlzaCkgZm9yIGxvY2FsaXNhdGlvbi4gKi9cblx0ZnVuY3Rpb24gQ29wdGljQ2FsZW5kYXIobGFuZ3VhZ2UpIHtcblx0XHR0aGlzLmxvY2FsID0gdGhpcy5yZWdpb25hbE9wdGlvbnNbbGFuZ3VhZ2UgfHwgJyddIHx8IHRoaXMucmVnaW9uYWxPcHRpb25zWycnXTtcblx0fVxuXG5cdENvcHRpY0NhbGVuZGFyLnByb3RvdHlwZSA9IG5ldyAkLmNhbGVuZGFycy5iYXNlQ2FsZW5kYXI7XG5cblx0JC5leHRlbmQoQ29wdGljQ2FsZW5kYXIucHJvdG90eXBlLCB7XG5cdFx0LyoqIFRoZSBjYWxlbmRhciBuYW1lLlxuXHRcdFx0QG1lbWJlcm9mIENvcHRpY0NhbGVuZGFyICovXG5cdFx0bmFtZTogJ0NvcHRpYycsXG5cdFx0LyoqIEp1bGlhbiBkYXRlIG9mIHN0YXJ0IG9mIENvcHRpYyBlcG9jaDogMjkgQXVndXN0IDI4NCBDRSAoR3JlZ29yaWFuKS5cblx0XHRcdEBtZW1iZXJvZiBDb3B0aWNDYWxlbmRhciAqL1xuXHRcdGpkRXBvY2g6IDE4MjUwMjkuNSxcblx0XHQvKiogRGF5cyBwZXIgbW9udGggaW4gYSBjb21tb24geWVhci5cblx0XHRcdEBtZW1iZXJvZiBDb3B0aWNDYWxlbmRhciAqL1xuXHRcdGRheXNQZXJNb250aDogWzMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDVdLFxuXHRcdC8qKiA8Y29kZT50cnVlPC9jb2RlPiBpZiBoYXMgYSB5ZWFyIHplcm8sIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXG5cdFx0XHRAbWVtYmVyb2YgQ29wdGljQ2FsZW5kYXIgKi9cblx0XHRoYXNZZWFyWmVybzogZmFsc2UsXG5cdFx0LyoqIFRoZSBtaW5pbXVtIG1vbnRoIG51bWJlci5cblx0XHRcdEBtZW1iZXJvZiBDb3B0aWNDYWxlbmRhciAqL1xuXHRcdG1pbk1vbnRoOiAxLFxuXHRcdC8qKiBUaGUgZmlyc3QgbW9udGggaW4gdGhlIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgQ29wdGljQ2FsZW5kYXIgKi9cblx0XHRmaXJzdE1vbnRoOiAxLFxuXHRcdC8qKiBUaGUgbWluaW11bSBkYXkgbnVtYmVyLlxuXHRcdFx0QG1lbWJlcm9mIENvcHRpY0NhbGVuZGFyICovXG5cdFx0bWluRGF5OiAxLFxuXG5cdFx0LyoqIExvY2FsaXNhdGlvbnMgZm9yIHRoZSBwbHVnaW4uXG5cdFx0XHRFbnRyaWVzIGFyZSBvYmplY3RzIGluZGV4ZWQgYnkgdGhlIGxhbmd1YWdlIGNvZGUgKCcnIGJlaW5nIHRoZSBkZWZhdWx0IFVTL0VuZ2xpc2gpLlxuXHRcdFx0RWFjaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcy5cblx0XHRcdEBtZW1iZXJvZiBDb3B0aWNDYWxlbmRhclxuXHRcdFx0QHByb3BlcnR5IG5hbWUge3N0cmluZ30gVGhlIGNhbGVuZGFyIG5hbWUuXG5cdFx0XHRAcHJvcGVydHkgZXBvY2hzIHtzdHJpbmdbXX0gVGhlIGVwb2NoIG5hbWVzLlxuXHRcdFx0QHByb3BlcnR5IG1vbnRoTmFtZXMge3N0cmluZ1tdfSBUaGUgbG9uZyBuYW1lcyBvZiB0aGUgbW9udGhzIG9mIHRoZSB5ZWFyLlxuXHRcdFx0QHByb3BlcnR5IG1vbnRoTmFtZXNTaG9ydCB7c3RyaW5nW119IFRoZSBzaG9ydCBuYW1lcyBvZiB0aGUgbW9udGhzIG9mIHRoZSB5ZWFyLlxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNTaG9ydCB7c3RyaW5nW119IFRoZSBzaG9ydCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lc01pbiB7c3RyaW5nW119IFRoZSBtaW5pbWFsIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxuXHRcdFx0QHByb3BlcnR5IGRhdGVGb3JtYXQge3N0cmluZ30gVGhlIGRhdGUgZm9ybWF0IGZvciB0aGlzIGNhbGVuZGFyLlxuXHRcdFx0XHRcdFNlZSB0aGUgb3B0aW9ucyBvbiA8YSBocmVmPVwiQmFzZUNhbGVuZGFyLmh0bWwjZm9ybWF0RGF0ZVwiPjxjb2RlPmZvcm1hdERhdGU8L2NvZGU+PC9hPiBmb3IgZGV0YWlscy5cblx0XHRcdEBwcm9wZXJ0eSBmaXJzdERheSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWssIHN0YXJ0aW5nIGF0IDAuXG5cdFx0XHRAcHJvcGVydHkgaXNSVEwge251bWJlcn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBsb2NhbGlzYXRpb24gcmVhZHMgcmlnaHQtdG8tbGVmdC4gKi9cblx0XHRyZWdpb25hbE9wdGlvbnM6IHsgLy8gTG9jYWxpc2F0aW9uc1xuXHRcdFx0Jyc6IHtcblx0XHRcdFx0bmFtZTogJ0NvcHRpYycsXG5cdFx0XHRcdGVwb2NoczogWydCQU0nLCAnQU0nXSxcblx0XHRcdFx0bW9udGhOYW1lczogWydUaG91dCcsICdQYW9waScsICdIYXRob3InLCAnS29pYWsnLCAnVG9iaScsICdNZXNoaXInLFxuXHRcdFx0XHQnUGFyZW1oYXQnLCAnUGFyZW1vdWRlJywgJ1Bhc2hvbnMnLCAnUGFvbmknLCAnRXBpcCcsICdNZXNvcmknLCAnUGkgS29naSBFbmF2b3QnXSxcblx0XHRcdFx0bW9udGhOYW1lc1Nob3J0OiBbJ1RobycsICdQYW8nLCAnSGF0aCcsICdLb2knLCAnVG9iJywgJ01lc2gnLFxuXHRcdFx0XHQnUGF0JywgJ1BhZCcsICdQYXNoJywgJ1BhbycsICdFcGknLCAnTWVzbycsICdQaUsnXSxcblx0XHRcdFx0ZGF5TmFtZXM6IFsnVGt5cmlha2EnLCAnUGVzbmF1JywgJ1BzaG9tZW50JywgJ1BlZnRvb3UnLCAnUHRpb3UnLCAnUHNvb3UnLCAnUHNhYmJhdG9uJ10sXG5cdFx0XHRcdGRheU5hbWVzU2hvcnQ6IFsnVGt5JywgJ1BlcycsICdQc2gnLCAnUGVmJywgJ1B0aScsICdQc28nLCAnUHNhJ10sXG5cdFx0XHRcdGRheU5hbWVzTWluOiBbJ1RrJywgJ1BlcycsICdQc2gnLCAnUGVmJywgJ1B0JywgJ1BzbycsICdQc2EnXSxcblx0XHRcdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdFx0XHRmaXJzdERheTogMCxcblx0XHRcdFx0aXNSVEw6IGZhbHNlXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgaW4gYSBsZWFwIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgQ29wdGljQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgaXMgYSBsZWFwIHllYXIsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdGxlYXBZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIHRoaXMubWluTW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhcik7XG5cdFx0XHR2YXIgeWVhciA9IGRhdGUueWVhcigpICsgKGRhdGUueWVhcigpIDwgMCA/IDEgOiAwKTsgLy8gTm8geWVhciB6ZXJvXG5cdFx0XHRyZXR1cm4geWVhciAlIDQgPT09IDMgfHwgeWVhciAlIDQgPT09IC0xO1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBtb250aHMgaW4gYSB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIENvcHRpY0NhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgbW9udGhzLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRtb250aHNJblllYXI6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHRoaXMuX3ZhbGlkYXRlKHllYXIsIHRoaXMubWluTW9udGgsIHRoaXMubWluRGF5LFxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhciB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRZZWFyKTtcblx0XHRcdHJldHVybiAxMztcblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB0aGUgd2VlayBvZiB0aGUgeWVhciBmb3IgYSBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIENvcHRpY0NhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyKSB0aGUgbW9udGggdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSB3ZWVrIG9mIHRoZSB5ZWFyLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHR3ZWVrT2ZZZWFyOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHQvLyBGaW5kIFN1bmRheSBvZiB0aGlzIHdlZWsgc3RhcnRpbmcgb24gU3VuZGF5XG5cdFx0XHR2YXIgY2hlY2tEYXRlID0gdGhpcy5uZXdEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xuXHRcdFx0Y2hlY2tEYXRlLmFkZCgtY2hlY2tEYXRlLmRheU9mV2VlaygpLCAnZCcpO1xuXHRcdFx0cmV0dXJuIE1hdGguZmxvb3IoKGNoZWNrRGF0ZS5kYXlPZlllYXIoKSAtIDEpIC8gNykgKyAxO1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgbW9udGguXG5cdFx0XHRAbWVtYmVyb2YgQ29wdGljQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgb2YgdGhlIG1vbnRoLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBtb250aC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBtb250aC95ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0ZGF5c0luTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZE1vbnRoKTtcblx0XHRcdHJldHVybiB0aGlzLmRheXNQZXJNb250aFtkYXRlLm1vbnRoKCkgLSAxXSArXG5cdFx0XHRcdChkYXRlLm1vbnRoKCkgPT09IDEzICYmIHRoaXMubGVhcFllYXIoZGF0ZS55ZWFyKCkpID8gMSA6IDApO1xuXHRcdH0sXG5cblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGEgd2VlayBkYXkuXG5cdFx0XHRAbWVtYmVyb2YgQ29wdGljQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBtb250aCB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBkYXkge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYSB3ZWVrIGRheSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0d2Vla0RheTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0cmV0dXJuICh0aGlzLmRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KSB8fCA3KSA8IDY7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgSnVsaWFuIGRhdGUgZXF1aXZhbGVudCBmb3IgdGhpcyBkYXRlLFxuXHRcdFx0aS5lLiBkYXlzIHNpbmNlIEphbnVhcnkgMSwgNDcxMyBCQ0UgR3JlZW53aWNoIG5vb24uXG5cdFx0XHRAbWVtYmVyb2YgQ29wdGljQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvbnZlcnQgb3IgdGhlIHllYXIgdG8gY29udmVydC5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXIpIHRoZSBtb250aCB0byBjb252ZXJ0LlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gY29udmVydC5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGVxdWl2YWxlbnQgSnVsaWFuIGRhdGUuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdHRvSkQ6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUpO1xuXHRcdFx0eWVhciA9IGRhdGUueWVhcigpO1xuXHRcdFx0aWYgKHllYXIgPCAwKSB7IHllYXIrKzsgfSAvLyBObyB5ZWFyIHplcm9cblx0XHRcdHJldHVybiBkYXRlLmRheSgpICsgKGRhdGUubW9udGgoKSAtIDEpICogMzAgK1xuXHRcdFx0XHQoeWVhciAtIDEpICogMzY1ICsgTWF0aC5mbG9vcih5ZWFyIC8gNCkgKyB0aGlzLmpkRXBvY2ggLSAxO1xuXHRcdH0sXG5cblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgZnJvbSBhIEp1bGlhbiBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIENvcHRpY0NhbGVuZGFyXG5cdFx0XHRAcGFyYW0gamQge251bWJlcn0gVGhlIEp1bGlhbiBkYXRlIHRvIGNvbnZlcnQuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIGVxdWl2YWxlbnQgZGF0ZS4gKi9cblx0XHRmcm9tSkQ6IGZ1bmN0aW9uKGpkKSB7XG5cdFx0XHR2YXIgYyA9IE1hdGguZmxvb3IoamQpICsgMC41IC0gdGhpcy5qZEVwb2NoO1xuXHRcdFx0dmFyIHllYXIgPSBNYXRoLmZsb29yKChjIC0gTWF0aC5mbG9vcigoYyArIDM2NikgLyAxNDYxKSkgLyAzNjUpICsgMTtcblx0XHRcdGlmICh5ZWFyIDw9IDApIHsgeWVhci0tOyB9IC8vIE5vIHllYXIgemVyb1xuXHRcdFx0YyA9IE1hdGguZmxvb3IoamQpICsgMC41IC0gdGhpcy5uZXdEYXRlKHllYXIsIDEsIDEpLnRvSkQoKTtcblx0XHRcdHZhciBtb250aCA9IE1hdGguZmxvb3IoYyAvIDMwKSArIDE7XG5cdFx0XHR2YXIgZGF5ID0gYyAtIChtb250aCAtIDEpICogMzAgKyAxO1xuXHRcdFx0cmV0dXJuIHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIENvcHRpYyBjYWxlbmRhciBpbXBsZW1lbnRhdGlvblxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuY29wdGljID0gQ29wdGljQ2FsZW5kYXI7XG5cbn0pKGpRdWVyeSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuY29wdGljLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMuY29wdGljLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBDb3B0aWMgY2FsZW5kYXIgZm9yIGpRdWVyeSB2Mi4wLjEuXHJcbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgRmVicnVhcnkgMjAxMC5cclxuICAgQXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvbGljZW5jZS5odG1sKSBsaWNlbnNlLiBcclxuICAgUGxlYXNlIGF0dHJpYnV0ZSB0aGUgYXV0aG9yIGlmIHlvdSB1c2UgaXQuICovXHJcblxyXG4oZnVuY3Rpb24oJCkgeyAvLyBIaWRlIHNjb3BlLCBubyAkIGNvbmZsaWN0XHJcblxyXG5cdC8qKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ29wdGljIGNhbGVuZGFyLlxyXG5cdFx0U2VlIDxhIGhyZWY9XCJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvcHRpY19jYWxlbmRhclwiPmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29wdGljX2NhbGVuZGFyPC9hPi5cclxuXHRcdFNlZSBhbHNvIENhbGVuZHJpY2FsIENhbGN1bGF0aW9uczogVGhlIE1pbGxlbm5pdW0gRWRpdGlvblxyXG5cdFx0KDxhIGhyZWY9XCJodHRwOi8vZW1yLmNzLmlpdC5lZHUvaG9tZS9yZWluZ29sZC9jYWxlbmRhci1ib29rL2luZGV4LnNodG1sXCI+aHR0cDovL2Vtci5jcy5paXQuZWR1L2hvbWUvcmVpbmdvbGQvY2FsZW5kYXItYm9vay9pbmRleC5zaHRtbDwvYT4pLlxyXG5cdFx0QGNsYXNzIENvcHRpY0NhbGVuZGFyXHJcblx0XHRAcGFyYW0gW2xhbmd1YWdlPScnXSB7c3RyaW5nfSBUaGUgbGFuZ3VhZ2UgY29kZSAoZGVmYXVsdCBFbmdsaXNoKSBmb3IgbG9jYWxpc2F0aW9uLiAqL1xyXG5cdGZ1bmN0aW9uIENvcHRpY0NhbGVuZGFyKGxhbmd1YWdlKSB7XHJcblx0XHR0aGlzLmxvY2FsID0gdGhpcy5yZWdpb25hbE9wdGlvbnNbbGFuZ3VhZ2UgfHwgJyddIHx8IHRoaXMucmVnaW9uYWxPcHRpb25zWycnXTtcclxuXHR9XHJcblxyXG5cdENvcHRpY0NhbGVuZGFyLnByb3RvdHlwZSA9IG5ldyAkLmNhbGVuZGFycy5iYXNlQ2FsZW5kYXI7XHJcblxyXG5cdCQuZXh0ZW5kKENvcHRpY0NhbGVuZGFyLnByb3RvdHlwZSwge1xyXG5cdFx0LyoqIFRoZSBjYWxlbmRhciBuYW1lLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ29wdGljQ2FsZW5kYXIgKi9cclxuXHRcdG5hbWU6ICdDb3B0aWMnLFxyXG5cdFx0LyoqIEp1bGlhbiBkYXRlIG9mIHN0YXJ0IG9mIENvcHRpYyBlcG9jaDogMjkgQXVndXN0IDI4NCBDRSAoR3JlZ29yaWFuKS5cclxuXHRcdFx0QG1lbWJlcm9mIENvcHRpY0NhbGVuZGFyICovXHJcblx0XHRqZEVwb2NoOiAxODI1MDI5LjUsXHJcblx0XHQvKiogRGF5cyBwZXIgbW9udGggaW4gYSBjb21tb24geWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIENvcHRpY0NhbGVuZGFyICovXHJcblx0XHRkYXlzUGVyTW9udGg6IFszMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCA1XSxcclxuXHRcdC8qKiA8Y29kZT50cnVlPC9jb2RlPiBpZiBoYXMgYSB5ZWFyIHplcm8sIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXHJcblx0XHRcdEBtZW1iZXJvZiBDb3B0aWNDYWxlbmRhciAqL1xyXG5cdFx0aGFzWWVhclplcm86IGZhbHNlLFxyXG5cdFx0LyoqIFRoZSBtaW5pbXVtIG1vbnRoIG51bWJlci5cclxuXHRcdFx0QG1lbWJlcm9mIENvcHRpY0NhbGVuZGFyICovXHJcblx0XHRtaW5Nb250aDogMSxcclxuXHRcdC8qKiBUaGUgZmlyc3QgbW9udGggaW4gdGhlIHllYXIuXHJcblx0XHRcdEBtZW1iZXJvZiBDb3B0aWNDYWxlbmRhciAqL1xyXG5cdFx0Zmlyc3RNb250aDogMSxcclxuXHRcdC8qKiBUaGUgbWluaW11bSBkYXkgbnVtYmVyLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ29wdGljQ2FsZW5kYXIgKi9cclxuXHRcdG1pbkRheTogMSxcclxuXHJcblx0XHQvKiogTG9jYWxpc2F0aW9ucyBmb3IgdGhlIHBsdWdpbi5cclxuXHRcdFx0RW50cmllcyBhcmUgb2JqZWN0cyBpbmRleGVkIGJ5IHRoZSBsYW5ndWFnZSBjb2RlICgnJyBiZWluZyB0aGUgZGVmYXVsdCBVUy9FbmdsaXNoKS5cclxuXHRcdFx0RWFjaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcy5cclxuXHRcdFx0QG1lbWJlcm9mIENvcHRpY0NhbGVuZGFyXHJcblx0XHRcdEBwcm9wZXJ0eSBuYW1lIHtzdHJpbmd9IFRoZSBjYWxlbmRhciBuYW1lLlxyXG5cdFx0XHRAcHJvcGVydHkgZXBvY2hzIHtzdHJpbmdbXX0gVGhlIGVwb2NoIG5hbWVzLlxyXG5cdFx0XHRAcHJvcGVydHkgbW9udGhOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBtb250aHMgb2YgdGhlIHllYXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cclxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lc1Nob3J0IHtzdHJpbmdbXX0gVGhlIHNob3J0IG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNNaW4ge3N0cmluZ1tdfSBUaGUgbWluaW1hbCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cclxuXHRcdFx0QHByb3BlcnR5IGRhdGVGb3JtYXQge3N0cmluZ30gVGhlIGRhdGUgZm9ybWF0IGZvciB0aGlzIGNhbGVuZGFyLlxyXG5cdFx0XHRcdFx0U2VlIHRoZSBvcHRpb25zIG9uIDxhIGhyZWY9XCJCYXNlQ2FsZW5kYXIuaHRtbCNmb3JtYXREYXRlXCI+PGNvZGU+Zm9ybWF0RGF0ZTwvY29kZT48L2E+IGZvciBkZXRhaWxzLlxyXG5cdFx0XHRAcHJvcGVydHkgZmlyc3REYXkge251bWJlcn0gVGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBzdGFydGluZyBhdCAwLlxyXG5cdFx0XHRAcHJvcGVydHkgaXNSVEwge251bWJlcn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBsb2NhbGlzYXRpb24gcmVhZHMgcmlnaHQtdG8tbGVmdC4gKi9cclxuXHRcdHJlZ2lvbmFsT3B0aW9uczogeyAvLyBMb2NhbGlzYXRpb25zXHJcblx0XHRcdCcnOiB7XHJcblx0XHRcdFx0bmFtZTogJ0NvcHRpYycsXHJcblx0XHRcdFx0ZXBvY2hzOiBbJ0JBTScsICdBTSddLFxyXG5cdFx0XHRcdG1vbnRoTmFtZXM6IFsnVGhvdXQnLCAnUGFvcGknLCAnSGF0aG9yJywgJ0tvaWFrJywgJ1RvYmknLCAnTWVzaGlyJyxcclxuXHRcdFx0XHQnUGFyZW1oYXQnLCAnUGFyZW1vdWRlJywgJ1Bhc2hvbnMnLCAnUGFvbmknLCAnRXBpcCcsICdNZXNvcmknLCAnUGkgS29naSBFbmF2b3QnXSxcclxuXHRcdFx0XHRtb250aE5hbWVzU2hvcnQ6IFsnVGhvJywgJ1BhbycsICdIYXRoJywgJ0tvaScsICdUb2InLCAnTWVzaCcsXHJcblx0XHRcdFx0J1BhdCcsICdQYWQnLCAnUGFzaCcsICdQYW8nLCAnRXBpJywgJ01lc28nLCAnUGlLJ10sXHJcblx0XHRcdFx0ZGF5TmFtZXM6IFsnVGt5cmlha2EnLCAnUGVzbmF1JywgJ1BzaG9tZW50JywgJ1BlZnRvb3UnLCAnUHRpb3UnLCAnUHNvb3UnLCAnUHNhYmJhdG9uJ10sXHJcblx0XHRcdFx0ZGF5TmFtZXNTaG9ydDogWydUa3knLCAnUGVzJywgJ1BzaCcsICdQZWYnLCAnUHRpJywgJ1BzbycsICdQc2EnXSxcclxuXHRcdFx0XHRkYXlOYW1lc01pbjogWydUaycsICdQZXMnLCAnUHNoJywgJ1BlZicsICdQdCcsICdQc28nLCAnUHNhJ10sXHJcblx0XHRcdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0XHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0XHRcdGlzUlRMOiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgaW4gYSBsZWFwIHllYXIuXHJcblx0XHRcdEBtZW1iZXJvZiBDb3B0aWNDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgaXMgYSBsZWFwIHllYXIsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRsZWFwWWVhcjogZnVuY3Rpb24oeWVhcikge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIHRoaXMubWluTW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhcik7XHJcblx0XHRcdHZhciB5ZWFyID0gZGF0ZS55ZWFyKCkgKyAoZGF0ZS55ZWFyKCkgPCAwID8gMSA6IDApOyAvLyBObyB5ZWFyIHplcm9cclxuXHRcdFx0cmV0dXJuIHllYXIgJSA0ID09PSAzIHx8IHllYXIgJSA0ID09PSAtMTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgbW9udGhzIGluIGEgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIENvcHRpY0NhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIG1vbnRocy5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdG1vbnRoc0luWWVhcjogZnVuY3Rpb24oeWVhcikge1xyXG5cdFx0XHR0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcclxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhciB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRZZWFyKTtcclxuXHRcdFx0cmV0dXJuIDEzO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHRoZSB3ZWVrIG9mIHRoZSB5ZWFyIGZvciBhIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDb3B0aWNDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXIpIHRoZSBtb250aCB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSB3ZWVrIG9mIHRoZSB5ZWFyLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0d2Vla09mWWVhcjogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHQvLyBGaW5kIFN1bmRheSBvZiB0aGlzIHdlZWsgc3RhcnRpbmcgb24gU3VuZGF5XHJcblx0XHRcdHZhciBjaGVja0RhdGUgPSB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSk7XHJcblx0XHRcdGNoZWNrRGF0ZS5hZGQoLWNoZWNrRGF0ZS5kYXlPZldlZWsoKSwgJ2QnKTtcclxuXHRcdFx0cmV0dXJuIE1hdGguZmxvb3IoKGNoZWNrRGF0ZS5kYXlPZlllYXIoKSAtIDEpIC8gNykgKyAxO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgbW9udGguXHJcblx0XHRcdEBtZW1iZXJvZiBDb3B0aWNDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIG9mIHRoZSBtb250aC5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIG1vbnRoLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgbW9udGgveWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZGF5c0luTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkTW9udGgpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbZGF0ZS5tb250aCgpIC0gMV0gK1xyXG5cdFx0XHRcdChkYXRlLm1vbnRoKCkgPT09IDEzICYmIHRoaXMubGVhcFllYXIoZGF0ZS55ZWFyKCkpID8gMSA6IDApO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGEgd2VlayBkYXkuXHJcblx0XHRcdEBtZW1iZXJvZiBDb3B0aWNDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBtb250aCB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIGRheSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGEgd2VlayBkYXksIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR3ZWVrRGF5OiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHJldHVybiAodGhpcy5kYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSkgfHwgNykgPCA2O1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIEp1bGlhbiBkYXRlIGVxdWl2YWxlbnQgZm9yIHRoaXMgZGF0ZSxcclxuXHRcdFx0aS5lLiBkYXlzIHNpbmNlIEphbnVhcnkgMSwgNDcxMyBCQ0UgR3JlZW53aWNoIG5vb24uXHJcblx0XHRcdEBtZW1iZXJvZiBDb3B0aWNDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb252ZXJ0IG9yIHRoZSB5ZWFyIHRvIGNvbnZlcnQuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXIpIHRoZSBtb250aCB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBlcXVpdmFsZW50IEp1bGlhbiBkYXRlLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0dG9KRDogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlKTtcclxuXHRcdFx0eWVhciA9IGRhdGUueWVhcigpO1xyXG5cdFx0XHRpZiAoeWVhciA8IDApIHsgeWVhcisrOyB9IC8vIE5vIHllYXIgemVyb1xyXG5cdFx0XHRyZXR1cm4gZGF0ZS5kYXkoKSArIChkYXRlLm1vbnRoKCkgLSAxKSAqIDMwICtcclxuXHRcdFx0XHQoeWVhciAtIDEpICogMzY1ICsgTWF0aC5mbG9vcih5ZWFyIC8gNCkgKyB0aGlzLmpkRXBvY2ggLSAxO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgZnJvbSBhIEp1bGlhbiBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ29wdGljQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIGpkIHtudW1iZXJ9IFRoZSBKdWxpYW4gZGF0ZSB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIGVxdWl2YWxlbnQgZGF0ZS4gKi9cclxuXHRcdGZyb21KRDogZnVuY3Rpb24oamQpIHtcclxuXHRcdFx0dmFyIGMgPSBNYXRoLmZsb29yKGpkKSArIDAuNSAtIHRoaXMuamRFcG9jaDtcclxuXHRcdFx0dmFyIHllYXIgPSBNYXRoLmZsb29yKChjIC0gTWF0aC5mbG9vcigoYyArIDM2NikgLyAxNDYxKSkgLyAzNjUpICsgMTtcclxuXHRcdFx0aWYgKHllYXIgPD0gMCkgeyB5ZWFyLS07IH0gLy8gTm8geWVhciB6ZXJvXHJcblx0XHRcdGMgPSBNYXRoLmZsb29yKGpkKSArIDAuNSAtIHRoaXMubmV3RGF0ZSh5ZWFyLCAxLCAxKS50b0pEKCk7XHJcblx0XHRcdHZhciBtb250aCA9IE1hdGguZmxvb3IoYyAvIDMwKSArIDE7XHJcblx0XHRcdHZhciBkYXkgPSBjIC0gKG1vbnRoIC0gMSkgKiAzMCArIDE7XHJcblx0XHRcdHJldHVybiB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSk7XHJcblx0XHR9XHJcblx0fSk7XHJcblxyXG5cdC8vIENvcHRpYyBjYWxlbmRhciBpbXBsZW1lbnRhdGlvblxyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5jb3B0aWMgPSBDb3B0aWNDYWxlbmRhcjtcclxuXHJcbn0pKGpRdWVyeSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ethiopian-am.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ethiopian-am.js index b2629c46aaf..37f8280e3e2 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ethiopian-am.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ethiopian-am.js @@ -23,4 +23,4 @@ }; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuZXRoaW9waWFuLWFtLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy5ldGhpb3BpYW4tYW0uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBBbWhhcmljIGxvY2FsaXNhdGlvbiBmb3IgRXRoaW9waWFuIGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxuICAgV3JpdHRlbiBieSBUZXdvZHJvcyBaZW5hIEZlYnJ1YXJ5IDIwMTAuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZXRoaW9waWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FtJ10gPSB7XG5cdFx0bmFtZTogJ+GLqOGKouGJteGLruGMteGLqyDhi5jhiJjhipUg4Yqg4YmG4Yyj4Yyg4YitJyxcblx0XHRlcG9jaHM6IFsnQkVFJywgJ0VFJ10sXG5cdFx0bW9udGhOYW1lczogWyfhiJjhiLXhiqjhiKjhiJ0nLCAn4Yyl4YmF4Yid4Ym1JywgJ+GKheGLs+GIrScsICfhibPhiIXhiKPhiKUnLCAn4Yyl4YitJywgJ+GLqOGKq+GJsuGJtScsXG5cdFx0J+GImOGMi+GJouGJtScsICfhiJrhi6vhi53hi6snLCAn4YyN4YqV4Ymm4Ym1JywgJ+GIsOGKlCcsICfhiJDhiJ3hiIwnLCAn4YqQ4YiQ4Yi0JywgJ+GMs+GMieGInCddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfhiJjhiLXhiqgnLCAn4Yyl4YmF4YidJywgJ+GKheGLs+GIrScsICfhibPhiIXhiKMnLCAn4Yyl4YitJywgJ+GLqOGKq+GJsicsXG5cdFx0J+GImOGMi+GJoicsICfhiJrhi6vhi50nLCAn4YyN4YqV4YmmJywgJ+GIsOGKlCcsICfhiJDhiJ3hiIwnLCAn4YqQ4YiQ4Yi0JywgJ+GMs+GMieGInCddLFxuXHRcdGRheU5hbWVzOiBbJ+GKpeGIkeGLtScsICfhiLDhip4nLCAn4Yib4Yqt4Yiw4YqeJywgJ+GIqOGJoeGLlScsICfhiJPhiJnhiLUnLCAn4YuT4Yit4YmlJywgJ+GJheGLs+GInCddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn4Yql4YiR4Yu1JywgJ+GIsOGKnicsICfhiJvhiq3hiLAnLCAn4Yio4Ymh4YuVJywgJ+GIk+GImeGItScsICfhi5PhiK3hiaUnLCAn4YmF4Yuz4YicJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn4Yql4YiRJywgJ+GIsOGKnicsICfhiJvhiq0nLCAn4Yio4YmhJywgJ+GIkOGImScsICfhi5PhiK0nLCAn4YmF4YuzJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAwLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuZXRoaW9waWFuLWFtLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy5ldGhpb3BpYW4tYW0uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEFtaGFyaWMgbG9jYWxpc2F0aW9uIGZvciBFdGhpb3BpYW4gY2FsZW5kYXIgZm9yIGpRdWVyeSB2Mi4wLjEuXHJcbiAgIFdyaXR0ZW4gYnkgVGV3b2Ryb3MgWmVuYSBGZWJydWFyeSAyMDEwLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ldGhpb3BpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYW0nXSA9IHtcclxuXHRcdG5hbWU6ICfhi6jhiqLhibXhi67hjLXhi6sg4YuY4YiY4YqVIOGKoOGJhuGMo+GMoOGIrScsXHJcblx0XHRlcG9jaHM6IFsnQkVFJywgJ0VFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ+GImOGIteGKqOGIqOGInScsICfhjKXhiYXhiJ3hibUnLCAn4YqF4Yuz4YitJywgJ+GJs+GIheGIo+GIpScsICfhjKXhiK0nLCAn4Yuo4Yqr4Ymy4Ym1JyxcclxuXHRcdCfhiJjhjIvhiaLhibUnLCAn4Yia4Yur4Yud4YurJywgJ+GMjeGKleGJpuGJtScsICfhiLDhipQnLCAn4YiQ4Yid4YiMJywgJ+GKkOGIkOGItCcsICfhjLPhjInhiJwnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfhiJjhiLXhiqgnLCAn4Yyl4YmF4YidJywgJ+GKheGLs+GIrScsICfhibPhiIXhiKMnLCAn4Yyl4YitJywgJ+GLqOGKq+GJsicsXHJcblx0XHQn4YiY4YyL4YmiJywgJ+GImuGLq+GLnScsICfhjI3hipXhiaYnLCAn4Yiw4YqUJywgJ+GIkOGIneGIjCcsICfhipDhiJDhiLQnLCAn4Yyz4YyJ4YicJ10sXHJcblx0XHRkYXlOYW1lczogWyfhiqXhiJHhi7UnLCAn4Yiw4YqeJywgJ+GIm+GKreGIsOGKnicsICfhiKjhiaHhi5UnLCAn4YiT4YiZ4Yi1JywgJ+GLk+GIreGJpScsICfhiYXhi7PhiJwnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn4Yql4YiR4Yu1JywgJ+GIsOGKnicsICfhiJvhiq3hiLAnLCAn4Yio4Ymh4YuVJywgJ+GIk+GImeGItScsICfhi5PhiK3hiaUnLCAn4YmF4Yuz4YicJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfhiqXhiJEnLCAn4Yiw4YqeJywgJ+GIm+GKrScsICfhiKjhiaEnLCAn4YiQ4YiZJywgJ+GLk+GIrScsICfhiYXhi7MnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ethiopian.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ethiopian.js index 6a1b05e77b3..efff3afb411 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ethiopian.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ethiopian.js @@ -172,4 +172,4 @@ $.calendars.calendars.ethiopian = EthiopianCalendar; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuZXRoaW9waWFuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMuZXRoaW9waWFuLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRXRoaW9waWFuIGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxuICAgV3JpdHRlbiBieSBLZWl0aCBXb29kIChrYndvb2R7YXR9aWluZXQuY29tLmF1KSBGZWJydWFyeSAyMDEwLlxuICAgQXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvbGljZW5jZS5odG1sKSBsaWNlbnNlLiBcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xuXG4oZnVuY3Rpb24oJCkgeyAvLyBIaWRlIHNjb3BlLCBubyAkIGNvbmZsaWN0XG5cblx0LyoqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBFdGhpb3BpYW4gY2FsZW5kYXIuXG5cdFx0U2VlIDxhIGhyZWY9XCJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V0aGlvcGlhbl9jYWxlbmRhclwiPmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXRoaW9waWFuX2NhbGVuZGFyPC9hPi5cblx0XHRTZWUgYWxzbyBDYWxlbmRyaWNhbCBDYWxjdWxhdGlvbnM6IFRoZSBNaWxsZW5uaXVtIEVkaXRpb25cblx0XHQoPGEgaHJlZj1cImh0dHA6Ly9lbXIuY3MuaWl0LmVkdS9ob21lL3JlaW5nb2xkL2NhbGVuZGFyLWJvb2svaW5kZXguc2h0bWxcIj5odHRwOi8vZW1yLmNzLmlpdC5lZHUvaG9tZS9yZWluZ29sZC9jYWxlbmRhci1ib29rL2luZGV4LnNodG1sPC9hPikuXG5cdFx0QGNsYXNzIEV0aGlvcGlhbkNhbGVuZGFyXG5cdFx0QHBhcmFtIFtsYW5ndWFnZT0nJ10ge3N0cmluZ30gVGhlIGxhbmd1YWdlIGNvZGUgKGRlZmF1bHQgRW5nbGlzaCkgZm9yIGxvY2FsaXNhdGlvbi4gKi9cblx0ZnVuY3Rpb24gRXRoaW9waWFuQ2FsZW5kYXIobGFuZ3VhZ2UpIHtcblx0XHR0aGlzLmxvY2FsID0gdGhpcy5yZWdpb25hbE9wdGlvbnNbbGFuZ3VhZ2UgfHwgJyddIHx8IHRoaXMucmVnaW9uYWxPcHRpb25zWycnXTtcblx0fVxuXG5cdEV0aGlvcGlhbkNhbGVuZGFyLnByb3RvdHlwZSA9IG5ldyAkLmNhbGVuZGFycy5iYXNlQ2FsZW5kYXI7XG5cblx0JC5leHRlbmQoRXRoaW9waWFuQ2FsZW5kYXIucHJvdG90eXBlLCB7XG5cdFx0LyoqIFRoZSBjYWxlbmRhciBuYW1lLlxuXHRcdFx0QG1lbWJlcm9mIEV0aGlvcGlhbkNhbGVuZGFyICovXG5cdFx0bmFtZTogJ0V0aGlvcGlhbicsXG5cdFx0LyoqIEp1bGlhbiBkYXRlIG9mIHN0YXJ0IG9mIEV0aGlvcGlhbiBlcG9jaDogMjcgQXVndXN0IDggQ0UgKEdyZWdvcmlhbikuXG5cdFx0XHRAbWVtYmVyb2YgRXRoaW9waWFuQ2FsZW5kYXIgKi9cblx0XHRqZEVwb2NoOiAxNzI0MjIwLjUsXG5cdFx0LyoqIERheXMgcGVyIG1vbnRoIGluIGEgY29tbW9uIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgRXRoaW9waWFuQ2FsZW5kYXIgKi9cblx0XHRkYXlzUGVyTW9udGg6IFszMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCA1XSxcblx0XHQvKiogPGNvZGU+dHJ1ZTwvY29kZT4gaWYgaGFzIGEgeWVhciB6ZXJvLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QG1lbWJlcm9mIEV0aGlvcGlhbkNhbGVuZGFyICovXG5cdFx0aGFzWWVhclplcm86IGZhbHNlLFxuXHRcdC8qKiBUaGUgbWluaW11bSBtb250aCBudW1iZXIuXG5cdFx0XHRAbWVtYmVyb2YgRXRoaW9waWFuQ2FsZW5kYXIgKi9cblx0XHRtaW5Nb250aDogMSxcblx0XHQvKiogVGhlIGZpcnN0IG1vbnRoIGluIHRoZSB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIEV0aGlvcGlhbkNhbGVuZGFyICovXG5cdFx0Zmlyc3RNb250aDogMSxcblx0XHQvKiogVGhlIG1pbmltdW0gZGF5IG51bWJlci5cblx0XHRcdEBtZW1iZXJvZiBFdGhpb3BpYW5DYWxlbmRhciAqL1xuXHRcdG1pbkRheTogMSxcblxuXHRcdC8qKiBMb2NhbGlzYXRpb25zIGZvciB0aGUgcGx1Z2luLlxuXHRcdFx0RW50cmllcyBhcmUgb2JqZWN0cyBpbmRleGVkIGJ5IHRoZSBsYW5ndWFnZSBjb2RlICgnJyBiZWluZyB0aGUgZGVmYXVsdCBVUy9FbmdsaXNoKS5cblx0XHRcdEVhY2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMuXG5cdFx0XHRAbWVtYmVyb2YgRXRoaW9waWFuQ2FsZW5kYXJcblx0XHRcdEBwcm9wZXJ0eSBuYW1lIHtzdHJpbmd9IFRoZSBjYWxlbmRhciBuYW1lLlxuXHRcdFx0QHByb3BlcnR5IGVwb2NocyB7c3RyaW5nW119IFRoZSBlcG9jaCBuYW1lcy5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNNaW4ge3N0cmluZ1tdfSBUaGUgbWluaW1hbCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cblx0XHRcdEBwcm9wZXJ0eSBkYXRlRm9ybWF0IHtzdHJpbmd9IFRoZSBkYXRlIGZvcm1hdCBmb3IgdGhpcyBjYWxlbmRhci5cblx0XHRcdFx0XHRTZWUgdGhlIG9wdGlvbnMgb24gPGEgaHJlZj1cIkJhc2VDYWxlbmRhci5odG1sI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4gZm9yIGRldGFpbHMuXG5cdFx0XHRAcHJvcGVydHkgZmlyc3REYXkge251bWJlcn0gVGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBzdGFydGluZyBhdCAwLlxuXHRcdFx0QHByb3BlcnR5IGlzUlRMIHtudW1iZXJ9IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgbG9jYWxpc2F0aW9uIHJlYWRzIHJpZ2h0LXRvLWxlZnQuICovXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7IC8vIExvY2FsaXNhdGlvbnNcblx0XHRcdCcnOiB7XG5cdFx0XHRcdG5hbWU6ICdFdGhpb3BpYW4nLFxuXHRcdFx0XHRlcG9jaHM6IFsnQkVFJywgJ0VFJ10sXG5cdFx0XHRcdG1vbnRoTmFtZXM6IFsnTWVza2VyZW0nLCAnVGlrZW1ldCcsICdIaWRhcicsICdUYWhlc2FzJywgJ1RpcicsICdZZWthdGl0Jyxcblx0XHRcdFx0J01lZ2FiaXQnLCAnTWlhemlhJywgJ0dlbmJvdCcsICdTZW5lJywgJ0hhbWxlJywgJ05laGFzZScsICdQYWd1bWUnXSxcblx0XHRcdFx0bW9udGhOYW1lc1Nob3J0OiBbJ01lcycsICdUaWsnLCAnSGlkJywgJ1RhaCcsICdUaXInLCAnWWVrJyxcblx0XHRcdFx0J01lZycsICdNaWEnLCAnR2VuJywgJ1NlbicsICdIYW0nLCAnTmVoJywgJ1BhZyddLFxuXHRcdFx0XHRkYXlOYW1lczogWydFaHVkJywgJ1NlZ25vJywgJ01ha3NlZ25vJywgJ0lyb2InLCAnSGFtdXMnLCAnQXJiJywgJ0tpZGFtZSddLFxuXHRcdFx0XHRkYXlOYW1lc1Nob3J0OiBbJ0VodScsICdTZWcnLCAnTWFrJywgJ0lybycsICdIYW0nLCAnQXJiJywgJ0tpZCddLFxuXHRcdFx0XHRkYXlOYW1lc01pbjogWydFaCcsICdTZScsICdNYScsICdJcicsICdIYScsICdBcicsICdLaSddLFxuXHRcdFx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0XHRcdGZpcnN0RGF5OiAwLFxuXHRcdFx0XHRpc1JUTDogZmFsc2Vcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBpbiBhIGxlYXAgeWVhci5cblx0XHRcdEBtZW1iZXJvZiBFdGhpb3BpYW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBpcyBhIGxlYXAgeWVhciwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0bGVhcFllYXI6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyKTtcblx0XHRcdHZhciB5ZWFyID0gZGF0ZS55ZWFyKCkgKyAoZGF0ZS55ZWFyKCkgPCAwID8gMSA6IDApOyAvLyBObyB5ZWFyIHplcm9cblx0XHRcdHJldHVybiB5ZWFyICUgNCA9PT0gMyB8fCB5ZWFyICUgNCA9PT0gLTE7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIG1vbnRocyBpbiBhIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgRXRoaW9waWFuQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBtb250aHMuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdG1vbnRoc0luWWVhcjogZnVuY3Rpb24oeWVhcikge1xuXHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksXG5cdFx0XHRcdCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZFllYXIpO1xuXHRcdFx0cmV0dXJuIDEzO1xuXHRcdH0sXG5cblx0XHQvKiogRGV0ZXJtaW5lIHRoZSB3ZWVrIG9mIHRoZSB5ZWFyIGZvciBhIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgRXRoaW9waWFuQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIHdlZWsgb2YgdGhlIHllYXIuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdHdlZWtPZlllYXI6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdC8vIEZpbmQgU3VuZGF5IG9mIHRoaXMgd2VlayBzdGFydGluZyBvbiBTdW5kYXlcblx0XHRcdHZhciBjaGVja0RhdGUgPSB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSk7XG5cdFx0XHRjaGVja0RhdGUuYWRkKC1jaGVja0RhdGUuZGF5T2ZXZWVrKCksICdkJyk7XG5cdFx0XHRyZXR1cm4gTWF0aC5mbG9vcigoY2hlY2tEYXRlLmRheU9mWWVhcigpIC0gMSkgLyA3KSArIDE7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aC5cblx0XHRcdEBtZW1iZXJvZiBFdGhpb3BpYW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciBvZiB0aGUgbW9udGguXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGguXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIG1vbnRoLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIG1vbnRoL3llYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRkYXlzSW5Nb250aDogZnVuY3Rpb24oeWVhciwgbW9udGgpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkTW9udGgpO1xuXHRcdFx0cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW2RhdGUubW9udGgoKSAtIDFdICtcblx0XHRcdFx0KGRhdGUubW9udGgoKSA9PT0gMTMgJiYgdGhpcy5sZWFwWWVhcihkYXRlLnllYXIoKSkgPyAxIDogMCk7XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgYSB3ZWVrIGRheS5cblx0XHRcdEBtZW1iZXJvZiBFdGhpb3BpYW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYSB3ZWVrIGRheSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0d2Vla0RheTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0cmV0dXJuICh0aGlzLmRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KSB8fCA3KSA8IDY7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgSnVsaWFuIGRhdGUgZXF1aXZhbGVudCBmb3IgdGhpcyBkYXRlLFxuXHRcdFx0aS5lLiBkYXlzIHNpbmNlIEphbnVhcnkgMSwgNDcxMyBCQ0UgR3JlZW53aWNoIG5vb24uXG5cdFx0XHRAbWVtYmVyb2YgRXRoaW9waWFuQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvbnZlcnQgb3IgdGhlIHllYXIgdG8gY29udmVydC5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBjb252ZXJ0LlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gY29udmVydC5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGVxdWl2YWxlbnQgSnVsaWFuIGRhdGUuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdHRvSkQ6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUpO1xuXHRcdFx0eWVhciA9IGRhdGUueWVhcigpO1xuXHRcdFx0aWYgKHllYXIgPCAwKSB7IHllYXIrKzsgfSAvLyBObyB5ZWFyIHplcm9cblx0XHRcdHJldHVybiBkYXRlLmRheSgpICsgKGRhdGUubW9udGgoKSAtIDEpICogMzAgK1xuXHRcdFx0XHQoeWVhciAtIDEpICogMzY1ICsgTWF0aC5mbG9vcih5ZWFyIC8gNCkgKyB0aGlzLmpkRXBvY2ggLSAxO1xuXHRcdH0sXG5cblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgZnJvbSBhIEp1bGlhbiBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIEV0aGlvcGlhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0gamQge251bWJlcn0gdGhlIEp1bGlhbiBkYXRlIHRvIGNvbnZlcnQuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gdGhlIGVxdWl2YWxlbnQgZGF0ZS4gKi9cblx0XHRmcm9tSkQ6IGZ1bmN0aW9uKGpkKSB7XG5cdFx0XHR2YXIgYyA9IE1hdGguZmxvb3IoamQpICsgMC41IC0gdGhpcy5qZEVwb2NoO1xuXHRcdFx0dmFyIHllYXIgPSBNYXRoLmZsb29yKChjIC0gTWF0aC5mbG9vcigoYyArIDM2NikgLyAxNDYxKSkgLyAzNjUpICsgMTtcblx0XHRcdGlmICh5ZWFyIDw9IDApIHsgeWVhci0tOyB9IC8vIE5vIHllYXIgemVyb1xuXHRcdFx0YyA9IE1hdGguZmxvb3IoamQpICsgMC41IC0gdGhpcy5uZXdEYXRlKHllYXIsIDEsIDEpLnRvSkQoKTtcblx0XHRcdHZhciBtb250aCA9IE1hdGguZmxvb3IoYyAvIDMwKSArIDE7XG5cdFx0XHR2YXIgZGF5ID0gYyAtIChtb250aCAtIDEpICogMzAgKyAxO1xuXHRcdFx0cmV0dXJuIHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIEV0aGlvcGlhbiBjYWxlbmRhciBpbXBsZW1lbnRhdGlvblxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZXRoaW9waWFuID0gRXRoaW9waWFuQ2FsZW5kYXI7XG5cbn0pKGpRdWVyeSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuZXRoaW9waWFuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMuZXRoaW9waWFuLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBFdGhpb3BpYW4gY2FsZW5kYXIgZm9yIGpRdWVyeSB2Mi4wLjEuXHJcbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgRmVicnVhcnkgMjAxMC5cclxuICAgQXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvbGljZW5jZS5odG1sKSBsaWNlbnNlLiBcclxuICAgUGxlYXNlIGF0dHJpYnV0ZSB0aGUgYXV0aG9yIGlmIHlvdSB1c2UgaXQuICovXHJcblxyXG4oZnVuY3Rpb24oJCkgeyAvLyBIaWRlIHNjb3BlLCBubyAkIGNvbmZsaWN0XHJcblxyXG5cdC8qKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgRXRoaW9waWFuIGNhbGVuZGFyLlxyXG5cdFx0U2VlIDxhIGhyZWY9XCJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V0aGlvcGlhbl9jYWxlbmRhclwiPmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXRoaW9waWFuX2NhbGVuZGFyPC9hPi5cclxuXHRcdFNlZSBhbHNvIENhbGVuZHJpY2FsIENhbGN1bGF0aW9uczogVGhlIE1pbGxlbm5pdW0gRWRpdGlvblxyXG5cdFx0KDxhIGhyZWY9XCJodHRwOi8vZW1yLmNzLmlpdC5lZHUvaG9tZS9yZWluZ29sZC9jYWxlbmRhci1ib29rL2luZGV4LnNodG1sXCI+aHR0cDovL2Vtci5jcy5paXQuZWR1L2hvbWUvcmVpbmdvbGQvY2FsZW5kYXItYm9vay9pbmRleC5zaHRtbDwvYT4pLlxyXG5cdFx0QGNsYXNzIEV0aGlvcGlhbkNhbGVuZGFyXHJcblx0XHRAcGFyYW0gW2xhbmd1YWdlPScnXSB7c3RyaW5nfSBUaGUgbGFuZ3VhZ2UgY29kZSAoZGVmYXVsdCBFbmdsaXNoKSBmb3IgbG9jYWxpc2F0aW9uLiAqL1xyXG5cdGZ1bmN0aW9uIEV0aGlvcGlhbkNhbGVuZGFyKGxhbmd1YWdlKSB7XHJcblx0XHR0aGlzLmxvY2FsID0gdGhpcy5yZWdpb25hbE9wdGlvbnNbbGFuZ3VhZ2UgfHwgJyddIHx8IHRoaXMucmVnaW9uYWxPcHRpb25zWycnXTtcclxuXHR9XHJcblxyXG5cdEV0aGlvcGlhbkNhbGVuZGFyLnByb3RvdHlwZSA9IG5ldyAkLmNhbGVuZGFycy5iYXNlQ2FsZW5kYXI7XHJcblxyXG5cdCQuZXh0ZW5kKEV0aGlvcGlhbkNhbGVuZGFyLnByb3RvdHlwZSwge1xyXG5cdFx0LyoqIFRoZSBjYWxlbmRhciBuYW1lLlxyXG5cdFx0XHRAbWVtYmVyb2YgRXRoaW9waWFuQ2FsZW5kYXIgKi9cclxuXHRcdG5hbWU6ICdFdGhpb3BpYW4nLFxyXG5cdFx0LyoqIEp1bGlhbiBkYXRlIG9mIHN0YXJ0IG9mIEV0aGlvcGlhbiBlcG9jaDogMjcgQXVndXN0IDggQ0UgKEdyZWdvcmlhbikuXHJcblx0XHRcdEBtZW1iZXJvZiBFdGhpb3BpYW5DYWxlbmRhciAqL1xyXG5cdFx0amRFcG9jaDogMTcyNDIyMC41LFxyXG5cdFx0LyoqIERheXMgcGVyIG1vbnRoIGluIGEgY29tbW9uIHllYXIuXHJcblx0XHRcdEBtZW1iZXJvZiBFdGhpb3BpYW5DYWxlbmRhciAqL1xyXG5cdFx0ZGF5c1Blck1vbnRoOiBbMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgNV0sXHJcblx0XHQvKiogPGNvZGU+dHJ1ZTwvY29kZT4gaWYgaGFzIGEgeWVhciB6ZXJvLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxyXG5cdFx0XHRAbWVtYmVyb2YgRXRoaW9waWFuQ2FsZW5kYXIgKi9cclxuXHRcdGhhc1llYXJaZXJvOiBmYWxzZSxcclxuXHRcdC8qKiBUaGUgbWluaW11bSBtb250aCBudW1iZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBFdGhpb3BpYW5DYWxlbmRhciAqL1xyXG5cdFx0bWluTW9udGg6IDEsXHJcblx0XHQvKiogVGhlIGZpcnN0IG1vbnRoIGluIHRoZSB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgRXRoaW9waWFuQ2FsZW5kYXIgKi9cclxuXHRcdGZpcnN0TW9udGg6IDEsXHJcblx0XHQvKiogVGhlIG1pbmltdW0gZGF5IG51bWJlci5cclxuXHRcdFx0QG1lbWJlcm9mIEV0aGlvcGlhbkNhbGVuZGFyICovXHJcblx0XHRtaW5EYXk6IDEsXHJcblxyXG5cdFx0LyoqIExvY2FsaXNhdGlvbnMgZm9yIHRoZSBwbHVnaW4uXHJcblx0XHRcdEVudHJpZXMgYXJlIG9iamVjdHMgaW5kZXhlZCBieSB0aGUgbGFuZ3VhZ2UgY29kZSAoJycgYmVpbmcgdGhlIGRlZmF1bHQgVVMvRW5nbGlzaCkuXHJcblx0XHRcdEVhY2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMuXHJcblx0XHRcdEBtZW1iZXJvZiBFdGhpb3BpYW5DYWxlbmRhclxyXG5cdFx0XHRAcHJvcGVydHkgbmFtZSB7c3RyaW5nfSBUaGUgY2FsZW5kYXIgbmFtZS5cclxuXHRcdFx0QHByb3BlcnR5IGVwb2NocyB7c3RyaW5nW119IFRoZSBlcG9jaCBuYW1lcy5cclxuXHRcdFx0QHByb3BlcnR5IG1vbnRoTmFtZXMge3N0cmluZ1tdfSBUaGUgbG9uZyBuYW1lcyBvZiB0aGUgbW9udGhzIG9mIHRoZSB5ZWFyLlxyXG5cdFx0XHRAcHJvcGVydHkgbW9udGhOYW1lc1Nob3J0IHtzdHJpbmdbXX0gVGhlIHNob3J0IG5hbWVzIG9mIHRoZSBtb250aHMgb2YgdGhlIHllYXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNTaG9ydCB7c3RyaW5nW119IFRoZSBzaG9ydCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cclxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzTWluIHtzdHJpbmdbXX0gVGhlIG1pbmltYWwgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXRlRm9ybWF0IHtzdHJpbmd9IFRoZSBkYXRlIGZvcm1hdCBmb3IgdGhpcyBjYWxlbmRhci5cclxuXHRcdFx0XHRcdFNlZSB0aGUgb3B0aW9ucyBvbiA8YSBocmVmPVwiQmFzZUNhbGVuZGFyLmh0bWwjZm9ybWF0RGF0ZVwiPjxjb2RlPmZvcm1hdERhdGU8L2NvZGU+PC9hPiBmb3IgZGV0YWlscy5cclxuXHRcdFx0QHByb3BlcnR5IGZpcnN0RGF5IHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlaywgc3RhcnRpbmcgYXQgMC5cclxuXHRcdFx0QHByb3BlcnR5IGlzUlRMIHtudW1iZXJ9IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgbG9jYWxpc2F0aW9uIHJlYWRzIHJpZ2h0LXRvLWxlZnQuICovXHJcblx0XHRyZWdpb25hbE9wdGlvbnM6IHsgLy8gTG9jYWxpc2F0aW9uc1xyXG5cdFx0XHQnJzoge1xyXG5cdFx0XHRcdG5hbWU6ICdFdGhpb3BpYW4nLFxyXG5cdFx0XHRcdGVwb2NoczogWydCRUUnLCAnRUUnXSxcclxuXHRcdFx0XHRtb250aE5hbWVzOiBbJ01lc2tlcmVtJywgJ1Rpa2VtZXQnLCAnSGlkYXInLCAnVGFoZXNhcycsICdUaXInLCAnWWVrYXRpdCcsXHJcblx0XHRcdFx0J01lZ2FiaXQnLCAnTWlhemlhJywgJ0dlbmJvdCcsICdTZW5lJywgJ0hhbWxlJywgJ05laGFzZScsICdQYWd1bWUnXSxcclxuXHRcdFx0XHRtb250aE5hbWVzU2hvcnQ6IFsnTWVzJywgJ1RpaycsICdIaWQnLCAnVGFoJywgJ1RpcicsICdZZWsnLFxyXG5cdFx0XHRcdCdNZWcnLCAnTWlhJywgJ0dlbicsICdTZW4nLCAnSGFtJywgJ05laCcsICdQYWcnXSxcclxuXHRcdFx0XHRkYXlOYW1lczogWydFaHVkJywgJ1NlZ25vJywgJ01ha3NlZ25vJywgJ0lyb2InLCAnSGFtdXMnLCAnQXJiJywgJ0tpZGFtZSddLFxyXG5cdFx0XHRcdGRheU5hbWVzU2hvcnQ6IFsnRWh1JywgJ1NlZycsICdNYWsnLCAnSXJvJywgJ0hhbScsICdBcmInLCAnS2lkJ10sXHJcblx0XHRcdFx0ZGF5TmFtZXNNaW46IFsnRWgnLCAnU2UnLCAnTWEnLCAnSXInLCAnSGEnLCAnQXInLCAnS2knXSxcclxuXHRcdFx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRcdFx0Zmlyc3REYXk6IDAsXHJcblx0XHRcdFx0aXNSVEw6IGZhbHNlXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBpbiBhIGxlYXAgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIEV0aGlvcGlhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBpcyBhIGxlYXAgeWVhciwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdGxlYXBZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyKTtcclxuXHRcdFx0dmFyIHllYXIgPSBkYXRlLnllYXIoKSArIChkYXRlLnllYXIoKSA8IDAgPyAxIDogMCk7IC8vIE5vIHllYXIgemVyb1xyXG5cdFx0XHRyZXR1cm4geWVhciAlIDQgPT09IDMgfHwgeWVhciAlIDQgPT09IC0xO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBtb250aHMgaW4gYSB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgRXRoaW9waWFuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgbW9udGhzLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0bW9udGhzSW5ZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XHJcblx0XHRcdHRoaXMuX3ZhbGlkYXRlKHllYXIsIHRoaXMubWluTW9udGgsIHRoaXMubWluRGF5LFxyXG5cdFx0XHRcdCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZFllYXIpO1xyXG5cdFx0XHRyZXR1cm4gMTM7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgdGhlIHdlZWsgb2YgdGhlIHllYXIgZm9yIGEgZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIEV0aGlvcGlhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIHdlZWsgb2YgdGhlIHllYXIuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR3ZWVrT2ZZZWFyOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdC8vIEZpbmQgU3VuZGF5IG9mIHRoaXMgd2VlayBzdGFydGluZyBvbiBTdW5kYXlcclxuXHRcdFx0dmFyIGNoZWNrRGF0ZSA9IHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcclxuXHRcdFx0Y2hlY2tEYXRlLmFkZCgtY2hlY2tEYXRlLmRheU9mV2VlaygpLCAnZCcpO1xyXG5cdFx0XHRyZXR1cm4gTWF0aC5mbG9vcigoY2hlY2tEYXRlLmRheU9mWWVhcigpIC0gMSkgLyA3KSArIDE7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aC5cclxuXHRcdFx0QG1lbWJlcm9mIEV0aGlvcGlhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgb2YgdGhlIG1vbnRoLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGguXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgbW9udGguXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBtb250aC95ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRkYXlzSW5Nb250aDogZnVuY3Rpb24oeWVhciwgbW9udGgpIHtcclxuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRNb250aCk7XHJcblx0XHRcdHJldHVybiB0aGlzLmRheXNQZXJNb250aFtkYXRlLm1vbnRoKCkgLSAxXSArXHJcblx0XHRcdFx0KGRhdGUubW9udGgoKSA9PT0gMTMgJiYgdGhpcy5sZWFwWWVhcihkYXRlLnllYXIoKSkgPyAxIDogMCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgYSB3ZWVrIGRheS5cclxuXHRcdFx0QG1lbWJlcm9mIEV0aGlvcGlhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGEgd2VlayBkYXksIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR3ZWVrRGF5OiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHJldHVybiAodGhpcy5kYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSkgfHwgNykgPCA2O1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIEp1bGlhbiBkYXRlIGVxdWl2YWxlbnQgZm9yIHRoaXMgZGF0ZSxcclxuXHRcdFx0aS5lLiBkYXlzIHNpbmNlIEphbnVhcnkgMSwgNDcxMyBCQ0UgR3JlZW53aWNoIG5vb24uXHJcblx0XHRcdEBtZW1iZXJvZiBFdGhpb3BpYW5DYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb252ZXJ0IG9yIHRoZSB5ZWFyIHRvIGNvbnZlcnQuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBlcXVpdmFsZW50IEp1bGlhbiBkYXRlLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0dG9KRDogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlKTtcclxuXHRcdFx0eWVhciA9IGRhdGUueWVhcigpO1xyXG5cdFx0XHRpZiAoeWVhciA8IDApIHsgeWVhcisrOyB9IC8vIE5vIHllYXIgemVyb1xyXG5cdFx0XHRyZXR1cm4gZGF0ZS5kYXkoKSArIChkYXRlLm1vbnRoKCkgLSAxKSAqIDMwICtcclxuXHRcdFx0XHQoeWVhciAtIDEpICogMzY1ICsgTWF0aC5mbG9vcih5ZWFyIC8gNCkgKyB0aGlzLmpkRXBvY2ggLSAxO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgZnJvbSBhIEp1bGlhbiBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgRXRoaW9waWFuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIGpkIHtudW1iZXJ9IHRoZSBKdWxpYW4gZGF0ZSB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gdGhlIGVxdWl2YWxlbnQgZGF0ZS4gKi9cclxuXHRcdGZyb21KRDogZnVuY3Rpb24oamQpIHtcclxuXHRcdFx0dmFyIGMgPSBNYXRoLmZsb29yKGpkKSArIDAuNSAtIHRoaXMuamRFcG9jaDtcclxuXHRcdFx0dmFyIHllYXIgPSBNYXRoLmZsb29yKChjIC0gTWF0aC5mbG9vcigoYyArIDM2NikgLyAxNDYxKSkgLyAzNjUpICsgMTtcclxuXHRcdFx0aWYgKHllYXIgPD0gMCkgeyB5ZWFyLS07IH0gLy8gTm8geWVhciB6ZXJvXHJcblx0XHRcdGMgPSBNYXRoLmZsb29yKGpkKSArIDAuNSAtIHRoaXMubmV3RGF0ZSh5ZWFyLCAxLCAxKS50b0pEKCk7XHJcblx0XHRcdHZhciBtb250aCA9IE1hdGguZmxvb3IoYyAvIDMwKSArIDE7XHJcblx0XHRcdHZhciBkYXkgPSBjIC0gKG1vbnRoIC0gMSkgKiAzMCArIDE7XHJcblx0XHRcdHJldHVybiB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSk7XHJcblx0XHR9XHJcblx0fSk7XHJcblxyXG5cdC8vIEV0aGlvcGlhbiBjYWxlbmRhciBpbXBsZW1lbnRhdGlvblxyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ldGhpb3BpYW4gPSBFdGhpb3BpYW5DYWxlbmRhcjtcclxuXHJcbn0pKGpRdWVyeSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.hebrew-he.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.hebrew-he.js index a45edc23fa4..5078f0a4780 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.hebrew-he.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.hebrew-he.js @@ -23,4 +23,4 @@ }; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuaGVicmV3LWhlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy5oZWJyZXctaGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBIZWJyZXcgbG9jYWxpc2F0aW9uIGZvciBIZWJyZXcgY2FsZW5kYXIgZm9yIGpRdWVyeSB2Mi4wLjEuXG4gICBBbWlyIEhhcmRvbiAoYWhhcmRvbiBhdCBnbWFpbCBkb3QgY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5oZWJyZXcucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaGUnXSA9IHtcblx0XHRuYW1lOiAn15TXnNeV15cg15TXoteR16jXmScsXG5cdFx0ZXBvY2hzOiBbJ0JBTScsICdBTSddLFxuXHRcdG1vbnRoTmFtZXM6IFsn15nXoNeV15DXqCcsJ9ek15HXqNeV15DXqCcsJ9ee16jXpScsJ9eQ16TXqNeZ15wnLCfXnteQ15knLCfXmdeV16DXmScsXG5cdFx0J9eZ15XXnNeZJywn15DXldeS15XXodeYJywn16HXpNeY157XkdeoJywn15DXlden15jXldeR16gnLCfXoNeV15HXnteR16gnLCfXk9em157XkdeoJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJzEnLCcyJywnMycsJzQnLCc1JywnNicsXG5cdFx0JzcnLCc4JywnOScsJzEwJywnMTEnLCcxMiddLFxuXHRcdGRheU5hbWVzOiBbJ9eo15DXqdeV158nLCfXqdeg15knLCfXqdec15nXqdeZJywn16jXkdeZ16LXmScsJ9eX157Xmdep15knLCfXqdeZ16nXmScsJ9ep15HXqiddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn15BcXCcnLCfXkVxcJycsJ9eSXFwnJywn15NcXCcnLCfXlFxcJycsJ9eVXFwnJywn16nXkdeqJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn15BcXCcnLCfXkVxcJycsJ9eSXFwnJywn15NcXCcnLCfXlFxcJycsJ9eVXFwnJywn16nXkdeqJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAwLFxuXHRcdGlzUlRMOiB0cnVlXG5cdH07XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuaGVicmV3LWhlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy5oZWJyZXctaGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEhlYnJldyBsb2NhbGlzYXRpb24gZm9yIEhlYnJldyBjYWxlbmRhciBmb3IgalF1ZXJ5IHYyLjAuMS5cclxuICAgQW1pciBIYXJkb24gKGFoYXJkb24gYXQgZ21haWwgZG90IGNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmhlYnJldy5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydoZSddID0ge1xyXG5cdFx0bmFtZTogJ9eU15zXldeXINeU16LXkdeo15knLFxyXG5cdFx0ZXBvY2hzOiBbJ0JBTScsICdBTSddLFxyXG5cdFx0bW9udGhOYW1lczogWyfXmdeg15XXkNeoJywn16TXkdeo15XXkNeoJywn157XqNelJywn15DXpNeo15nXnCcsJ9ee15DXmScsJ9eZ15XXoNeZJyxcclxuXHRcdCfXmdeV15zXmScsJ9eQ15XXkteV16HXmCcsJ9eh16TXmNee15HXqCcsJ9eQ15XXp9eY15XXkdeoJywn16DXldeR157XkdeoJywn15PXptee15HXqCddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJzEnLCcyJywnMycsJzQnLCc1JywnNicsXHJcblx0XHQnNycsJzgnLCc5JywnMTAnLCcxMScsJzEyJ10sXHJcblx0XHRkYXlOYW1lczogWyfXqNeQ16nXldefJywn16nXoNeZJywn16nXnNeZ16nXmScsJ9eo15HXmdei15knLCfXl9ee15nXqdeZJywn16nXmdep15knLCfXqdeR16onXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn15BcXCcnLCfXkVxcJycsJ9eSXFwnJywn15NcXCcnLCfXlFxcJycsJ9eVXFwnJywn16nXkdeqJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfXkFxcJycsJ9eRXFwnJywn15JcXCcnLCfXk1xcJycsJ9eUXFwnJywn15VcXCcnLCfXqdeR16onXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IHRydWVcclxuXHR9O1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.hebrew.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.hebrew.js index 9c67b5fe6f0..1b43b2692e3 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.hebrew.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.hebrew.js @@ -262,4 +262,4 @@ $.calendars.calendars.hebrew = HebrewCalendar; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuaGVicmV3LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMuaGVicmV3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgSGVicmV3IGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxuICAgV3JpdHRlbiBieSBLZWl0aCBXb29kIChrYndvb2R7YXR9aWluZXQuY29tLmF1KSBBdWd1c3QgMjAwOS5cbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cblxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxuXG5cdC8qKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgSGVicmV3IGNpdmlsIGNhbGVuZGFyLlxuXHRcdEJhc2VkIG9uIGNvZGUgZnJvbSA8YSBocmVmPVwiaHR0cDovL3d3dy5mb3VybWlsYWIuY2gvZG9jdW1lbnRzL2NhbGVuZGFyL1wiPmh0dHA6Ly93d3cuZm91cm1pbGFiLmNoL2RvY3VtZW50cy9jYWxlbmRhci88L2E+LlxuXHRcdFNlZSBhbHNvIDxhIGhyZWY9XCJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hlYnJld19jYWxlbmRhclwiPmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGVicmV3X2NhbGVuZGFyPC9hPi5cblx0XHRAY2xhc3MgSGVicmV3Q2FsZW5kYXJcblx0XHRAcGFyYW0gW2xhbmd1YWdlPScnXSB7c3RyaW5nfSBUaGUgbGFuZ3VhZ2UgY29kZSAoZGVmYXVsdCBFbmdsaXNoKSBmb3IgbG9jYWxpc2F0aW9uLiAqL1xuXHRmdW5jdGlvbiBIZWJyZXdDYWxlbmRhcihsYW5ndWFnZSkge1xuXHRcdHRoaXMubG9jYWwgPSB0aGlzLnJlZ2lvbmFsT3B0aW9uc1tsYW5ndWFnZSB8fCAnJ10gfHwgdGhpcy5yZWdpb25hbE9wdGlvbnNbJyddO1xuXHR9XG5cblx0SGVicmV3Q2FsZW5kYXIucHJvdG90eXBlID0gbmV3ICQuY2FsZW5kYXJzLmJhc2VDYWxlbmRhcjtcblxuXHQkLmV4dGVuZChIZWJyZXdDYWxlbmRhci5wcm90b3R5cGUsIHtcblx0XHQvKiogVGhlIGNhbGVuZGFyIG5hbWUuXG5cdFx0XHRAbWVtYmVyb2YgSGVicmV3Q2FsZW5kYXIgKi9cblx0XHRuYW1lOiAnSGVicmV3Jyxcblx0XHQvKiogSnVsaWFuIGRhdGUgb2Ygc3RhcnQgb2YgSGVicmV3IGVwb2NoOiA3IE9jdG9iZXIgMzc2MSBCQ0UuXG5cdFx0XHRAbWVtYmVyb2YgSGVicmV3Q2FsZW5kYXIgKi9cblx0XHRqZEVwb2NoOiAzNDc5OTUuNSxcblx0XHQvKiogRGF5cyBwZXIgbW9udGggaW4gYSBjb21tb24geWVhci5cblx0XHRcdEBtZW1iZXJvZiBIZWJyZXdDYWxlbmRhciAqL1xuXHRcdGRheXNQZXJNb250aDogWzMwLCAyOSwgMzAsIDI5LCAzMCwgMjksIDMwLCAyOSwgMzAsIDI5LCAzMCwgMjksIDI5XSxcblx0XHQvKiogPGNvZGU+dHJ1ZTwvY29kZT4gaWYgaGFzIGEgeWVhciB6ZXJvLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QG1lbWJlcm9mIEhlYnJld0NhbGVuZGFyICovXG5cdFx0aGFzWWVhclplcm86IGZhbHNlLFxuXHRcdC8qKiBUaGUgbWluaW11bSBtb250aCBudW1iZXIuXG5cdFx0XHRAbWVtYmVyb2YgSGVicmV3Q2FsZW5kYXIgKi9cblx0XHRtaW5Nb250aDogMSxcblx0XHQvKiogVGhlIGZpcnN0IG1vbnRoIGluIHRoZSB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIEhlYnJld0NhbGVuZGFyICovXG5cdFx0Zmlyc3RNb250aDogNyxcblx0XHQvKiogVGhlIG1pbmltdW0gZGF5IG51bWJlci5cblx0XHRcdEBtZW1iZXJvZiBIZWJyZXdDYWxlbmRhciAqL1xuXHRcdG1pbkRheTogMSxcblxuXHRcdC8qKiBMb2NhbGlzYXRpb25zIGZvciB0aGUgcGx1Z2luLlxuXHRcdFx0RW50cmllcyBhcmUgb2JqZWN0cyBpbmRleGVkIGJ5IHRoZSBsYW5ndWFnZSBjb2RlICgnJyBiZWluZyB0aGUgZGVmYXVsdCBVUy9FbmdsaXNoKS5cblx0XHRcdEVhY2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMuXG5cdFx0XHRAbWVtYmVyb2YgSGVicmV3Q2FsZW5kYXJcblx0XHRcdEBwcm9wZXJ0eSBuYW1lIHtzdHJpbmd9IFRoZSBjYWxlbmRhciBuYW1lLlxuXHRcdFx0QHByb3BlcnR5IGVwb2NocyB7c3RyaW5nW119IFRoZSBlcG9jaCBuYW1lcy5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNNaW4ge3N0cmluZ1tdfSBUaGUgbWluaW1hbCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cblx0XHRcdEBwcm9wZXJ0eSBkYXRlRm9ybWF0IHtzdHJpbmd9IFRoZSBkYXRlIGZvcm1hdCBmb3IgdGhpcyBjYWxlbmRhci5cblx0XHRcdFx0XHRTZWUgdGhlIG9wdGlvbnMgb24gPGEgaHJlZj1cIkJhc2VDYWxlbmRhci5odG1sI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4gZm9yIGRldGFpbHMuXG5cdFx0XHRAcHJvcGVydHkgZmlyc3REYXkge251bWJlcn0gVGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBzdGFydGluZyBhdCAwLlxuXHRcdFx0QHByb3BlcnR5IGlzUlRMIHtudW1iZXJ9IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgbG9jYWxpc2F0aW9uIHJlYWRzIHJpZ2h0LXRvLWxlZnQuICovXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7IC8vIExvY2FsaXNhdGlvbnNcblx0XHRcdCcnOiB7XG5cdFx0XHRcdG5hbWU6ICdIZWJyZXcnLFxuXHRcdFx0XHRlcG9jaHM6IFsnQkFNJywgJ0FNJ10sXG5cdFx0XHRcdG1vbnRoTmFtZXM6IFsnTmlzYW4nLCAnSXlhcicsICdTaXZhbicsICdUYW1tdXonLCAnQXYnLCAnRWx1bCcsXG5cdFx0XHRcdCdUaXNocmVpJywgJ0NoZXNodmFuJywgJ0tpc2xldicsICdUZXZldCcsICdTaGV2YXQnLCAnQWRhcicsICdBZGFyIElJJ10sXG5cdFx0XHRcdG1vbnRoTmFtZXNTaG9ydDogWydOaXMnLCAnSXlhJywgJ1NpdicsICdUYW0nLCAnQXYnLCAnRWx1JywgJ1RpcycsICdDaGUnLCAnS2lzJywgJ1RldicsICdTaGUnLCAnQWRhJywgJ0FkMiddLFxuXHRcdFx0XHRkYXlOYW1lczogWydZb20gUmlzaG9uJywgJ1lvbSBTaGVuaScsICdZb20gU2hsaXNoaScsICdZb20gUmV2aVxcJ2knLCAnWW9tIENoYW1pc2hpJywgJ1lvbSBTaGlzaGknLCAnWW9tIFNoYWJiYXQnXSxcblx0XHRcdFx0ZGF5TmFtZXNTaG9ydDogWydSaXMnLCAnU2hlJywgJ1NobCcsICdSZXYnLCAnQ2hhJywgJ1NoaScsICdTaGEnXSxcblx0XHRcdFx0ZGF5TmFtZXNNaW46IFsnUmknLCdTaGUnLCdTaGwnLCdSZScsJ0NoJywnU2hpJywnU2hhJ10sXG5cdFx0XHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRcdFx0Zmlyc3REYXk6IDAsXG5cdFx0XHRcdGlzUlRMOiBmYWxzZVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGluIGEgbGVhcCB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIEhlYnJld0NhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGlzIGEgbGVhcCB5ZWFyLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRsZWFwWWVhcjogZnVuY3Rpb24oeWVhcikge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuX2xlYXBZZWFyKGRhdGUueWVhcigpKTtcblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBpbiBhIGxlYXAgeWVhci5cblx0XHRcdEBtZW1iZXJvZiBIZWJyZXdDYWxlbmRhclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGlzIGEgbGVhcCB5ZWFyLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRfbGVhcFllYXI6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHllYXIgPSAoeWVhciA8IDAgPyB5ZWFyICsgMSA6IHllYXIpO1xuXHRcdFx0cmV0dXJuIG1vZCh5ZWFyICogNyArIDEsIDE5KSA8IDc7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIG1vbnRocyBpbiBhIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgSGVicmV3Q2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBtb250aHMuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdG1vbnRoc0luWWVhcjogZnVuY3Rpb24oeWVhcikge1xuXHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyKTtcblx0XHRcdHJldHVybiB0aGlzLl9sZWFwWWVhcih5ZWFyLnllYXIgPyB5ZWFyLnllYXIoKSA6IHllYXIpID8gMTMgOiAxMjtcblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB0aGUgd2VlayBvZiB0aGUgeWVhciBmb3IgYSBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIEhlYnJld0NhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSB3ZWVrIG9mIHRoZSB5ZWFyLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHR3ZWVrT2ZZZWFyOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHQvLyBGaW5kIFN1bmRheSBvZiB0aGlzIHdlZWsgc3RhcnRpbmcgb24gU3VuZGF5XG5cdFx0XHR2YXIgY2hlY2tEYXRlID0gdGhpcy5uZXdEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xuXHRcdFx0Y2hlY2tEYXRlLmFkZCgtY2hlY2tEYXRlLmRheU9mV2VlaygpLCAnZCcpO1xuXHRcdFx0cmV0dXJuIE1hdGguZmxvb3IoKGNoZWNrRGF0ZS5kYXlPZlllYXIoKSAtIDEpIC8gNykgKyAxO1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgeWVhci5cblx0XHRcdEBtZW1iZXJvZiBIZWJyZXdDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdGRheXNJblllYXI6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyKTtcblx0XHRcdHllYXIgPSBkYXRlLnllYXIoKTtcblx0XHRcdHJldHVybiB0aGlzLnRvSkQoKHllYXIgPT09IC0xID8gKzEgOiB5ZWFyICsgMSksIDcsIDEpIC0gdGhpcy50b0pEKHllYXIsIDcsIDEpO1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgbW9udGguXG5cdFx0XHRAbWVtYmVyb2YgSGVicmV3Q2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgb2YgdGhlIG1vbnRoLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBtb250aC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBtb250aC95ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0ZGF5c0luTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XG5cdFx0XHRpZiAoeWVhci55ZWFyKSB7XG5cdFx0XHRcdG1vbnRoID0geWVhci5tb250aCgpO1xuXHRcdFx0XHR5ZWFyID0geWVhci55ZWFyKCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRNb250aCk7XG5cdFx0XHRyZXR1cm4gKG1vbnRoID09PSAxMiAmJiB0aGlzLmxlYXBZZWFyKHllYXIpID8gMzAgOiAvLyBBZGFyIElcblx0XHRcdFx0XHQobW9udGggPT09IDggJiYgbW9kKHRoaXMuZGF5c0luWWVhcih5ZWFyKSwgMTApID09PSA1ID8gMzAgOiAvLyBDaGVzaHZhbiBpbiBzaGxlbWFoIHllYXJcblx0XHRcdFx0XHQobW9udGggPT09IDkgJiYgbW9kKHRoaXMuZGF5c0luWWVhcih5ZWFyKSwgMTApID09PSAzID8gMjkgOiAvLyBLaXNsZXYgaW4gY2hhc2VyYWggeWVhclxuXHRcdFx0XHRcdHRoaXMuZGF5c1Blck1vbnRoW21vbnRoIC0gMV0pKSk7XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgYSB3ZWVrIGRheS5cblx0XHRcdEBtZW1iZXJvZiBIZWJyZXdDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYSB3ZWVrIGRheSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0d2Vla0RheTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZGF5T2ZXZWVrKHllYXIsIG1vbnRoLCBkYXkpICE9PSA2O1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBhIGRhdGUgLSB5ZWFyIHR5cGUuXG5cdFx0XHRAbWVtYmVyb2YgSGVicmV3Q2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge29iamVjdH0gQWRkaXRpb25hbCBpbmZvcm1hdGlvbiAtIGNvbnRlbnRzIGRlcGVuZHMgb24gY2FsZW5kYXIuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdGV4dHJhSW5mbzogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgZGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSk7XG5cdFx0XHRyZXR1cm4ge3llYXJUeXBlOiAodGhpcy5sZWFwWWVhcihkYXRlKSA/ICdlbWJvbGlzbWljJyA6ICdjb21tb24nKSArICcgJyArXG5cdFx0XHRcdFsnZGVmaWNpZW50JywgJ3JlZ3VsYXInLCAnY29tcGxldGUnXVt0aGlzLmRheXNJblllYXIoZGF0ZSkgJSAxMCAtIDNdfTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBKdWxpYW4gZGF0ZSBlcXVpdmFsZW50IGZvciB0aGlzIGRhdGUsXG5cdFx0XHRpLmUuIGRheXMgc2luY2UgSmFudWFyeSAxLCA0NzEzIEJDRSBHcmVlbndpY2ggbm9vbi5cblx0XHRcdEBtZW1iZXJvZiBIZWJyZXdDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlKXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvbnZlcnQgb3IgdGhlIHllYXIgdG8gY29udmVydC5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBjb252ZXJ0LlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gY29udmVydC5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGVxdWl2YWxlbnQgSnVsaWFuIGRhdGUuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdHRvSkQ6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUpO1xuXHRcdFx0eWVhciA9IGRhdGUueWVhcigpO1xuXHRcdFx0bW9udGggPSBkYXRlLm1vbnRoKCk7XG5cdFx0XHRkYXkgPSBkYXRlLmRheSgpO1xuXHRcdFx0dmFyIGFkalllYXIgPSAoeWVhciA8PSAwID8geWVhciArIDEgOiB5ZWFyKTtcblx0XHRcdHZhciBqZCA9IHRoaXMuamRFcG9jaCArIHRoaXMuX2RlbGF5MShhZGpZZWFyKSArXG5cdFx0XHRcdHRoaXMuX2RlbGF5MihhZGpZZWFyKSArIGRheSArIDE7XG5cdFx0XHRpZiAobW9udGggPCA3KSB7XG5cdFx0XHRcdGZvciAodmFyIG0gPSA3OyBtIDw9IHRoaXMubW9udGhzSW5ZZWFyKHllYXIpOyBtKyspIHtcblx0XHRcdFx0XHRqZCArPSB0aGlzLmRheXNJbk1vbnRoKHllYXIsIG0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAodmFyIG0gPSAxOyBtIDwgbW9udGg7IG0rKykge1xuXHRcdFx0XHRcdGpkICs9IHRoaXMuZGF5c0luTW9udGgoeWVhciwgbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRmb3IgKHZhciBtID0gNzsgbSA8IG1vbnRoOyBtKyspIHtcblx0XHRcdFx0XHRqZCArPSB0aGlzLmRheXNJbk1vbnRoKHllYXIsIG0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gamQ7XG5cdFx0fSxcblxuXHRcdC8qKiBUZXN0IGZvciBkZWxheSBvZiBzdGFydCBvZiBuZXcgeWVhciBhbmQgdG8gYXZvaWRcblx0XHRcdFN1bmRheSwgV2VkbmVzZGF5LCBvciBGcmlkYXkgYXMgc3RhcnQgb2YgdGhlIG5ldyB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIEhlYnJld0NhbGVuZGFyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGRheXMgdG8gb2Zmc2V0IGJ5LiAqL1xuXHRcdF9kZWxheTE6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHZhciBtb250aHMgPSBNYXRoLmZsb29yKCgyMzUgKiB5ZWFyIC0gMjM0KSAvIDE5KTtcblx0XHRcdHZhciBwYXJ0cyA9IDEyMDg0ICsgMTM3NTMgKiBtb250aHM7XG5cdFx0XHR2YXIgZGF5ID0gbW9udGhzICogMjkgKyBNYXRoLmZsb29yKHBhcnRzIC8gMjU5MjApO1xuXHRcdFx0aWYgKG1vZCgzICogKGRheSArIDEpLCA3KSA8IDMpIHtcblx0XHRcdFx0ZGF5Kys7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGF5O1xuXHRcdH0sXG5cblx0XHQvKiogQ2hlY2sgZm9yIGRlbGF5IGluIHN0YXJ0IG9mIG5ldyB5ZWFyIGR1ZSB0byBsZW5ndGggb2YgYWRqYWNlbnQgeWVhcnMuXG5cdFx0XHRAbWVtYmVyb2YgSGVicmV3Q2FsZW5kYXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0geWVhciB7bnVtYmVyfSBUaGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZGF5cyB0byBvZmZzZXQgYnkuICovXG5cdFx0X2RlbGF5MjogZnVuY3Rpb24oeWVhcikge1xuXHRcdFx0dmFyIGxhc3QgPSB0aGlzLl9kZWxheTEoeWVhciAtIDEpO1xuXHRcdFx0dmFyIHByZXNlbnQgPSB0aGlzLl9kZWxheTEoeWVhcik7XG5cdFx0XHR2YXIgbmV4dCA9IHRoaXMuX2RlbGF5MSh5ZWFyICsgMSk7XG5cdFx0XHRyZXR1cm4gKChuZXh0IC0gcHJlc2VudCkgPT09IDM1NiA/IDIgOiAoKHByZXNlbnQgLSBsYXN0KSA9PT0gMzgyID8gMSA6IDApKTtcblx0XHR9LFxuXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIGZyb20gYSBKdWxpYW4gZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBIZWJyZXdDYWxlbmRhclxuXHRcdFx0QHBhcmFtIGpkIHtudW1iZXJ9IFRoZSBKdWxpYW4gZGF0ZSB0byBjb252ZXJ0LlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXG5cdFx0ZnJvbUpEOiBmdW5jdGlvbihqZCkge1xuXHRcdFx0amQgPSBNYXRoLmZsb29yKGpkKSArIDAuNTtcblx0XHRcdHZhciB5ZWFyID0gTWF0aC5mbG9vcigoKGpkIC0gdGhpcy5qZEVwb2NoKSAqIDk4NDk2LjApIC8gMzU5NzUzNTEuMCkgLSAxO1xuXHRcdFx0d2hpbGUgKGpkID49IHRoaXMudG9KRCgoeWVhciA9PT0gLTEgPyArMSA6IHllYXIgKyAxKSwgNywgMSkpIHtcblx0XHRcdFx0eWVhcisrO1xuXHRcdFx0fVxuXHRcdFx0dmFyIG1vbnRoID0gKGpkIDwgdGhpcy50b0pEKHllYXIsIDEsIDEpKSA/IDcgOiAxO1xuXHRcdFx0d2hpbGUgKGpkID4gdGhpcy50b0pEKHllYXIsIG1vbnRoLCB0aGlzLmRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSkpIHtcblx0XHRcdFx0bW9udGgrKztcblx0XHRcdH1cblx0XHRcdHZhciBkYXkgPSBqZCAtIHRoaXMudG9KRCh5ZWFyLCBtb250aCwgMSkgKyAxO1xuXHRcdFx0cmV0dXJuIHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIE1vZHVsdXMgZnVuY3Rpb24gd2hpY2ggd29ya3MgZm9yIG5vbi1pbnRlZ2Vycy5cblx0ZnVuY3Rpb24gbW9kKGEsIGIpIHtcblx0XHRyZXR1cm4gYSAtIChiICogTWF0aC5mbG9vcihhIC8gYikpO1xuXHR9XG5cblx0Ly8gSGVicmV3IGNhbGVuZGFyIGltcGxlbWVudGF0aW9uXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5oZWJyZXcgPSBIZWJyZXdDYWxlbmRhcjtcblxufSkoalF1ZXJ5KTsiXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuaGVicmV3LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMuaGVicmV3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBIZWJyZXcgY2FsZW5kYXIgZm9yIGpRdWVyeSB2Mi4wLjEuXHJcbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgQXVndXN0IDIwMDkuXHJcbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXHJcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xyXG5cclxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxyXG5cclxuXHQvKiogSW1wbGVtZW50YXRpb24gb2YgdGhlIEhlYnJldyBjaXZpbCBjYWxlbmRhci5cclxuXHRcdEJhc2VkIG9uIGNvZGUgZnJvbSA8YSBocmVmPVwiaHR0cDovL3d3dy5mb3VybWlsYWIuY2gvZG9jdW1lbnRzL2NhbGVuZGFyL1wiPmh0dHA6Ly93d3cuZm91cm1pbGFiLmNoL2RvY3VtZW50cy9jYWxlbmRhci88L2E+LlxyXG5cdFx0U2VlIGFsc28gPGEgaHJlZj1cImh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGVicmV3X2NhbGVuZGFyXCI+aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IZWJyZXdfY2FsZW5kYXI8L2E+LlxyXG5cdFx0QGNsYXNzIEhlYnJld0NhbGVuZGFyXHJcblx0XHRAcGFyYW0gW2xhbmd1YWdlPScnXSB7c3RyaW5nfSBUaGUgbGFuZ3VhZ2UgY29kZSAoZGVmYXVsdCBFbmdsaXNoKSBmb3IgbG9jYWxpc2F0aW9uLiAqL1xyXG5cdGZ1bmN0aW9uIEhlYnJld0NhbGVuZGFyKGxhbmd1YWdlKSB7XHJcblx0XHR0aGlzLmxvY2FsID0gdGhpcy5yZWdpb25hbE9wdGlvbnNbbGFuZ3VhZ2UgfHwgJyddIHx8IHRoaXMucmVnaW9uYWxPcHRpb25zWycnXTtcclxuXHR9XHJcblxyXG5cdEhlYnJld0NhbGVuZGFyLnByb3RvdHlwZSA9IG5ldyAkLmNhbGVuZGFycy5iYXNlQ2FsZW5kYXI7XHJcblxyXG5cdCQuZXh0ZW5kKEhlYnJld0NhbGVuZGFyLnByb3RvdHlwZSwge1xyXG5cdFx0LyoqIFRoZSBjYWxlbmRhciBuYW1lLlxyXG5cdFx0XHRAbWVtYmVyb2YgSGVicmV3Q2FsZW5kYXIgKi9cclxuXHRcdG5hbWU6ICdIZWJyZXcnLFxyXG5cdFx0LyoqIEp1bGlhbiBkYXRlIG9mIHN0YXJ0IG9mIEhlYnJldyBlcG9jaDogNyBPY3RvYmVyIDM3NjEgQkNFLlxyXG5cdFx0XHRAbWVtYmVyb2YgSGVicmV3Q2FsZW5kYXIgKi9cclxuXHRcdGpkRXBvY2g6IDM0Nzk5NS41LFxyXG5cdFx0LyoqIERheXMgcGVyIG1vbnRoIGluIGEgY29tbW9uIHllYXIuXHJcblx0XHRcdEBtZW1iZXJvZiBIZWJyZXdDYWxlbmRhciAqL1xyXG5cdFx0ZGF5c1Blck1vbnRoOiBbMzAsIDI5LCAzMCwgMjksIDMwLCAyOSwgMzAsIDI5LCAzMCwgMjksIDMwLCAyOSwgMjldLFxyXG5cdFx0LyoqIDxjb2RlPnRydWU8L2NvZGU+IGlmIGhhcyBhIHllYXIgemVybywgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QG1lbWJlcm9mIEhlYnJld0NhbGVuZGFyICovXHJcblx0XHRoYXNZZWFyWmVybzogZmFsc2UsXHJcblx0XHQvKiogVGhlIG1pbmltdW0gbW9udGggbnVtYmVyLlxyXG5cdFx0XHRAbWVtYmVyb2YgSGVicmV3Q2FsZW5kYXIgKi9cclxuXHRcdG1pbk1vbnRoOiAxLFxyXG5cdFx0LyoqIFRoZSBmaXJzdCBtb250aCBpbiB0aGUgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIEhlYnJld0NhbGVuZGFyICovXHJcblx0XHRmaXJzdE1vbnRoOiA3LFxyXG5cdFx0LyoqIFRoZSBtaW5pbXVtIGRheSBudW1iZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBIZWJyZXdDYWxlbmRhciAqL1xyXG5cdFx0bWluRGF5OiAxLFxyXG5cclxuXHRcdC8qKiBMb2NhbGlzYXRpb25zIGZvciB0aGUgcGx1Z2luLlxyXG5cdFx0XHRFbnRyaWVzIGFyZSBvYmplY3RzIGluZGV4ZWQgYnkgdGhlIGxhbmd1YWdlIGNvZGUgKCcnIGJlaW5nIHRoZSBkZWZhdWx0IFVTL0VuZ2xpc2gpLlxyXG5cdFx0XHRFYWNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLlxyXG5cdFx0XHRAbWVtYmVyb2YgSGVicmV3Q2FsZW5kYXJcclxuXHRcdFx0QHByb3BlcnR5IG5hbWUge3N0cmluZ30gVGhlIGNhbGVuZGFyIG5hbWUuXHJcblx0XHRcdEBwcm9wZXJ0eSBlcG9jaHMge3N0cmluZ1tdfSBUaGUgZXBvY2ggbmFtZXMuXHJcblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cclxuXHRcdFx0QHByb3BlcnR5IG1vbnRoTmFtZXNTaG9ydCB7c3RyaW5nW119IFRoZSBzaG9ydCBuYW1lcyBvZiB0aGUgbW9udGhzIG9mIHRoZSB5ZWFyLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXMge3N0cmluZ1tdfSBUaGUgbG9uZyBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cclxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lc01pbiB7c3RyaW5nW119IFRoZSBtaW5pbWFsIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF0ZUZvcm1hdCB7c3RyaW5nfSBUaGUgZGF0ZSBmb3JtYXQgZm9yIHRoaXMgY2FsZW5kYXIuXHJcblx0XHRcdFx0XHRTZWUgdGhlIG9wdGlvbnMgb24gPGEgaHJlZj1cIkJhc2VDYWxlbmRhci5odG1sI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4gZm9yIGRldGFpbHMuXHJcblx0XHRcdEBwcm9wZXJ0eSBmaXJzdERheSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWssIHN0YXJ0aW5nIGF0IDAuXHJcblx0XHRcdEBwcm9wZXJ0eSBpc1JUTCB7bnVtYmVyfSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGxvY2FsaXNhdGlvbiByZWFkcyByaWdodC10by1sZWZ0LiAqL1xyXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7IC8vIExvY2FsaXNhdGlvbnNcclxuXHRcdFx0Jyc6IHtcclxuXHRcdFx0XHRuYW1lOiAnSGVicmV3JyxcclxuXHRcdFx0XHRlcG9jaHM6IFsnQkFNJywgJ0FNJ10sXHJcblx0XHRcdFx0bW9udGhOYW1lczogWydOaXNhbicsICdJeWFyJywgJ1NpdmFuJywgJ1RhbW11eicsICdBdicsICdFbHVsJyxcclxuXHRcdFx0XHQnVGlzaHJlaScsICdDaGVzaHZhbicsICdLaXNsZXYnLCAnVGV2ZXQnLCAnU2hldmF0JywgJ0FkYXInLCAnQWRhciBJSSddLFxyXG5cdFx0XHRcdG1vbnRoTmFtZXNTaG9ydDogWydOaXMnLCAnSXlhJywgJ1NpdicsICdUYW0nLCAnQXYnLCAnRWx1JywgJ1RpcycsICdDaGUnLCAnS2lzJywgJ1RldicsICdTaGUnLCAnQWRhJywgJ0FkMiddLFxyXG5cdFx0XHRcdGRheU5hbWVzOiBbJ1lvbSBSaXNob24nLCAnWW9tIFNoZW5pJywgJ1lvbSBTaGxpc2hpJywgJ1lvbSBSZXZpXFwnaScsICdZb20gQ2hhbWlzaGknLCAnWW9tIFNoaXNoaScsICdZb20gU2hhYmJhdCddLFxyXG5cdFx0XHRcdGRheU5hbWVzU2hvcnQ6IFsnUmlzJywgJ1NoZScsICdTaGwnLCAnUmV2JywgJ0NoYScsICdTaGknLCAnU2hhJ10sXHJcblx0XHRcdFx0ZGF5TmFtZXNNaW46IFsnUmknLCdTaGUnLCdTaGwnLCdSZScsJ0NoJywnU2hpJywnU2hhJ10sXHJcblx0XHRcdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0XHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0XHRcdGlzUlRMOiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgaW4gYSBsZWFwIHllYXIuXHJcblx0XHRcdEBtZW1iZXJvZiBIZWJyZXdDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgaXMgYSBsZWFwIHllYXIsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRsZWFwWWVhcjogZnVuY3Rpb24oeWVhcikge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIHRoaXMubWluTW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhcik7XHJcblx0XHRcdHJldHVybiB0aGlzLl9sZWFwWWVhcihkYXRlLnllYXIoKSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgaW4gYSBsZWFwIHllYXIuXHJcblx0XHRcdEBtZW1iZXJvZiBIZWJyZXdDYWxlbmRhclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0geWVhciB7bnVtYmVyfSBUaGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGlzIGEgbGVhcCB5ZWFyLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0X2xlYXBZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XHJcblx0XHRcdHllYXIgPSAoeWVhciA8IDAgPyB5ZWFyICsgMSA6IHllYXIpO1xyXG5cdFx0XHRyZXR1cm4gbW9kKHllYXIgKiA3ICsgMSwgMTkpIDwgNztcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgbW9udGhzIGluIGEgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIEhlYnJld0NhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIG1vbnRocy5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdG1vbnRoc0luWWVhcjogZnVuY3Rpb24oeWVhcikge1xyXG5cdFx0XHR0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fbGVhcFllYXIoeWVhci55ZWFyID8geWVhci55ZWFyKCkgOiB5ZWFyKSA/IDEzIDogMTI7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgdGhlIHdlZWsgb2YgdGhlIHllYXIgZm9yIGEgZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIEhlYnJld0NhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIHdlZWsgb2YgdGhlIHllYXIuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR3ZWVrT2ZZZWFyOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdC8vIEZpbmQgU3VuZGF5IG9mIHRoaXMgd2VlayBzdGFydGluZyBvbiBTdW5kYXlcclxuXHRcdFx0dmFyIGNoZWNrRGF0ZSA9IHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcclxuXHRcdFx0Y2hlY2tEYXRlLmFkZCgtY2hlY2tEYXRlLmRheU9mV2VlaygpLCAnZCcpO1xyXG5cdFx0XHRyZXR1cm4gTWF0aC5mbG9vcigoY2hlY2tEYXRlLmRheU9mWWVhcigpIC0gMSkgLyA3KSArIDE7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgSGVicmV3Q2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cy5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdGRheXNJblllYXI6IGZ1bmN0aW9uKHllYXIpIHtcclxuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIpO1xyXG5cdFx0XHR5ZWFyID0gZGF0ZS55ZWFyKCk7XHJcblx0XHRcdHJldHVybiB0aGlzLnRvSkQoKHllYXIgPT09IC0xID8gKzEgOiB5ZWFyICsgMSksIDcsIDEpIC0gdGhpcy50b0pEKHllYXIsIDcsIDEpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgbW9udGguXHJcblx0XHRcdEBtZW1iZXJvZiBIZWJyZXdDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIG9mIHRoZSBtb250aC5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIG1vbnRoLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgbW9udGgveWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZGF5c0luTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XHJcblx0XHRcdGlmICh5ZWFyLnllYXIpIHtcclxuXHRcdFx0XHRtb250aCA9IHllYXIubW9udGgoKTtcclxuXHRcdFx0XHR5ZWFyID0geWVhci55ZWFyKCk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkTW9udGgpO1xyXG5cdFx0XHRyZXR1cm4gKG1vbnRoID09PSAxMiAmJiB0aGlzLmxlYXBZZWFyKHllYXIpID8gMzAgOiAvLyBBZGFyIElcclxuXHRcdFx0XHRcdChtb250aCA9PT0gOCAmJiBtb2QodGhpcy5kYXlzSW5ZZWFyKHllYXIpLCAxMCkgPT09IDUgPyAzMCA6IC8vIENoZXNodmFuIGluIHNobGVtYWggeWVhclxyXG5cdFx0XHRcdFx0KG1vbnRoID09PSA5ICYmIG1vZCh0aGlzLmRheXNJblllYXIoeWVhciksIDEwKSA9PT0gMyA/IDI5IDogLy8gS2lzbGV2IGluIGNoYXNlcmFoIHllYXJcclxuXHRcdFx0XHRcdHRoaXMuZGF5c1Blck1vbnRoW21vbnRoIC0gMV0pKSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgYSB3ZWVrIGRheS5cclxuXHRcdFx0QG1lbWJlcm9mIEhlYnJld0NhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGEgd2VlayBkYXksIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR3ZWVrRGF5OiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KSAhPT0gNjtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBkYXRlIC0geWVhciB0eXBlLlxyXG5cdFx0XHRAbWVtYmVyb2YgSGVicmV3Q2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7b2JqZWN0fSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIC0gY29udGVudHMgZGVwZW5kcyBvbiBjYWxlbmRhci5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdGV4dHJhSW5mbzogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlKTtcclxuXHRcdFx0cmV0dXJuIHt5ZWFyVHlwZTogKHRoaXMubGVhcFllYXIoZGF0ZSkgPyAnZW1ib2xpc21pYycgOiAnY29tbW9uJykgKyAnICcgK1xyXG5cdFx0XHRcdFsnZGVmaWNpZW50JywgJ3JlZ3VsYXInLCAnY29tcGxldGUnXVt0aGlzLmRheXNJblllYXIoZGF0ZSkgJSAxMCAtIDNdfTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBKdWxpYW4gZGF0ZSBlcXVpdmFsZW50IGZvciB0aGlzIGRhdGUsXHJcblx0XHRcdGkuZS4gZGF5cyBzaW5jZSBKYW51YXJ5IDEsIDQ3MTMgQkNFIEdyZWVud2ljaCBub29uLlxyXG5cdFx0XHRAbWVtYmVyb2YgSGVicmV3Q2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlKXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvbnZlcnQgb3IgdGhlIHllYXIgdG8gY29udmVydC5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGNvbnZlcnQuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGNvbnZlcnQuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGVxdWl2YWxlbnQgSnVsaWFuIGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR0b0pEOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUpO1xyXG5cdFx0XHR5ZWFyID0gZGF0ZS55ZWFyKCk7XHJcblx0XHRcdG1vbnRoID0gZGF0ZS5tb250aCgpO1xyXG5cdFx0XHRkYXkgPSBkYXRlLmRheSgpO1xyXG5cdFx0XHR2YXIgYWRqWWVhciA9ICh5ZWFyIDw9IDAgPyB5ZWFyICsgMSA6IHllYXIpO1xyXG5cdFx0XHR2YXIgamQgPSB0aGlzLmpkRXBvY2ggKyB0aGlzLl9kZWxheTEoYWRqWWVhcikgK1xyXG5cdFx0XHRcdHRoaXMuX2RlbGF5MihhZGpZZWFyKSArIGRheSArIDE7XHJcblx0XHRcdGlmIChtb250aCA8IDcpIHtcclxuXHRcdFx0XHRmb3IgKHZhciBtID0gNzsgbSA8PSB0aGlzLm1vbnRoc0luWWVhcih5ZWFyKTsgbSsrKSB7XHJcblx0XHRcdFx0XHRqZCArPSB0aGlzLmRheXNJbk1vbnRoKHllYXIsIG0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRmb3IgKHZhciBtID0gMTsgbSA8IG1vbnRoOyBtKyspIHtcclxuXHRcdFx0XHRcdGpkICs9IHRoaXMuZGF5c0luTW9udGgoeWVhciwgbSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGZvciAodmFyIG0gPSA3OyBtIDwgbW9udGg7IG0rKykge1xyXG5cdFx0XHRcdFx0amQgKz0gdGhpcy5kYXlzSW5Nb250aCh5ZWFyLCBtKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGpkO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogVGVzdCBmb3IgZGVsYXkgb2Ygc3RhcnQgb2YgbmV3IHllYXIgYW5kIHRvIGF2b2lkXHJcblx0XHRcdFN1bmRheSwgV2VkbmVzZGF5LCBvciBGcmlkYXkgYXMgc3RhcnQgb2YgdGhlIG5ldyB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgSGVicmV3Q2FsZW5kYXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZGF5cyB0byBvZmZzZXQgYnkuICovXHJcblx0XHRfZGVsYXkxOiBmdW5jdGlvbih5ZWFyKSB7XHJcblx0XHRcdHZhciBtb250aHMgPSBNYXRoLmZsb29yKCgyMzUgKiB5ZWFyIC0gMjM0KSAvIDE5KTtcclxuXHRcdFx0dmFyIHBhcnRzID0gMTIwODQgKyAxMzc1MyAqIG1vbnRocztcclxuXHRcdFx0dmFyIGRheSA9IG1vbnRocyAqIDI5ICsgTWF0aC5mbG9vcihwYXJ0cyAvIDI1OTIwKTtcclxuXHRcdFx0aWYgKG1vZCgzICogKGRheSArIDEpLCA3KSA8IDMpIHtcclxuXHRcdFx0XHRkYXkrKztcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZGF5O1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ2hlY2sgZm9yIGRlbGF5IGluIHN0YXJ0IG9mIG5ldyB5ZWFyIGR1ZSB0byBsZW5ndGggb2YgYWRqYWNlbnQgeWVhcnMuXHJcblx0XHRcdEBtZW1iZXJvZiBIZWJyZXdDYWxlbmRhclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0geWVhciB7bnVtYmVyfSBUaGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBkYXlzIHRvIG9mZnNldCBieS4gKi9cclxuXHRcdF9kZWxheTI6IGZ1bmN0aW9uKHllYXIpIHtcclxuXHRcdFx0dmFyIGxhc3QgPSB0aGlzLl9kZWxheTEoeWVhciAtIDEpO1xyXG5cdFx0XHR2YXIgcHJlc2VudCA9IHRoaXMuX2RlbGF5MSh5ZWFyKTtcclxuXHRcdFx0dmFyIG5leHQgPSB0aGlzLl9kZWxheTEoeWVhciArIDEpO1xyXG5cdFx0XHRyZXR1cm4gKChuZXh0IC0gcHJlc2VudCkgPT09IDM1NiA/IDIgOiAoKHByZXNlbnQgLSBsYXN0KSA9PT0gMzgyID8gMSA6IDApKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIGZyb20gYSBKdWxpYW4gZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIEhlYnJld0NhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSBqZCB7bnVtYmVyfSBUaGUgSnVsaWFuIGRhdGUgdG8gY29udmVydC5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXHJcblx0XHRmcm9tSkQ6IGZ1bmN0aW9uKGpkKSB7XHJcblx0XHRcdGpkID0gTWF0aC5mbG9vcihqZCkgKyAwLjU7XHJcblx0XHRcdHZhciB5ZWFyID0gTWF0aC5mbG9vcigoKGpkIC0gdGhpcy5qZEVwb2NoKSAqIDk4NDk2LjApIC8gMzU5NzUzNTEuMCkgLSAxO1xyXG5cdFx0XHR3aGlsZSAoamQgPj0gdGhpcy50b0pEKCh5ZWFyID09PSAtMSA/ICsxIDogeWVhciArIDEpLCA3LCAxKSkge1xyXG5cdFx0XHRcdHllYXIrKztcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgbW9udGggPSAoamQgPCB0aGlzLnRvSkQoeWVhciwgMSwgMSkpID8gNyA6IDE7XHJcblx0XHRcdHdoaWxlIChqZCA+IHRoaXMudG9KRCh5ZWFyLCBtb250aCwgdGhpcy5kYXlzSW5Nb250aCh5ZWFyLCBtb250aCkpKSB7XHJcblx0XHRcdFx0bW9udGgrKztcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgZGF5ID0gamQgLSB0aGlzLnRvSkQoeWVhciwgbW9udGgsIDEpICsgMTtcclxuXHRcdFx0cmV0dXJuIHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0Ly8gTW9kdWx1cyBmdW5jdGlvbiB3aGljaCB3b3JrcyBmb3Igbm9uLWludGVnZXJzLlxyXG5cdGZ1bmN0aW9uIG1vZChhLCBiKSB7XHJcblx0XHRyZXR1cm4gYSAtIChiICogTWF0aC5mbG9vcihhIC8gYikpO1xyXG5cdH1cclxuXHJcblx0Ly8gSGVicmV3IGNhbGVuZGFyIGltcGxlbWVudGF0aW9uXHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmhlYnJldyA9IEhlYnJld0NhbGVuZGFyO1xyXG5cclxufSkoalF1ZXJ5KTsiXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.islamic-ar.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.islamic-ar.js index 3eefd402d64..6ffb3ee5696 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.islamic-ar.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.islamic-ar.js @@ -22,4 +22,4 @@ isRTL: true }; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuaXNsYW1pYy1hci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLmlzbGFtaWMtYXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBBcmFiaWMgbG9jYWxpc2F0aW9uIGZvciBJc2xhbWljIGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxuICAgV3JpdHRlbiBieSBLZWl0aCBXb29kIChrYndvb2R7YXR9aWluZXQuY29tLmF1KSBBdWd1c3QgMjAwOS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5pc2xhbWljLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FyJ10gPSB7XG5cdFx0bmFtZTogJ0lzbGFtaWMnLFxuXHRcdGVwb2NoczogWydCQU0nLCAnQU0nXSxcblx0XHRtb250aE5hbWVzOiBbJ9mF2K3YsdmR2YUnLCAn2LXZgdixJywgJ9ix2KjZiti5INin2YTYo9mI2YQnLCAn2LHYqNmK2Lkg2KfZhNii2K7YsSDYo9mIINix2KjZiti5INin2YTYq9in2YbZiicsICfYrNmF2KfYr9mJINin2YTYp9mI2YQnLCAn2KzZhdin2K/ZiSDYp9mE2KLYrtixINij2Ygg2KzZhdin2K/ZiSDYp9mE2KvYp9mG2YonLFxuXHRcdCfYsdis2KgnLCAn2LTYudio2KfZhicsICfYsdmF2LbYp9mGJywgJ9i02YjZkdin2YQnLCAn2LDZiCDYp9mE2YLYudiv2KknLCAn2LDZiCDYp9mE2K3YrNipJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ9mF2K3YsdmR2YUnLCAn2LXZgdixJywgJ9ix2KjZiti5INin2YTYo9mI2YQnLCAn2LHYqNmK2Lkg2KfZhNii2K7YsSDYo9mIINix2KjZiti5INin2YTYq9in2YbZiicsICfYrNmF2KfYr9mJINin2YTYp9mI2YQnLCAn2KzZhdin2K/ZiSDYp9mE2KLYrtixINij2Ygg2KzZhdin2K/ZiSDYp9mE2KvYp9mG2YonLFxuXHRcdCfYsdis2KgnLCAn2LTYudio2KfZhicsICfYsdmF2LbYp9mGJywgJ9i02YjZkdin2YQnLCAn2LDZiCDYp9mE2YLYudiv2KknLCAn2LDZiCDYp9mE2K3YrNipJ10sXG5cdFx0ZGF5TmFtZXM6IFsn2YrZiNmFINin2YTYo9it2K8nLCAn2YrZiNmFINin2YTYpdir2YbZitmGJywgJ9mK2YjZhSDYp9mE2KvZhNin2KvYp9ihJywgJ9mK2YjZhSDYp9mE2KPYsdio2LnYp9ihJywgJ9mK2YjZhSDYp9mE2K7ZhdmK2LMnLCAn2YrZiNmFINin2YTYrNmF2LnYqScsICfZitmI2YUg2KfZhNiz2KjYqiddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn2YrZiNmFINin2YTYo9it2K8nLCAn2YrZiNmFINin2YTYpdir2YbZitmGJywgJ9mK2YjZhSDYp9mE2KvZhNin2KvYp9ihJywgJ9mK2YjZhSDYp9mE2KPYsdio2LnYp9ihJywgJ9mK2YjZhSDYp9mE2K7ZhdmK2LMnLCAn2YrZiNmFINin2YTYrNmF2LnYqScsICfZitmI2YUg2KfZhNiz2KjYqiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ9mK2YjZhSDYp9mE2KPYrdivJywgJ9mK2YjZhSDYp9mE2KXYq9mG2YrZhicsICfZitmI2YUg2KfZhNir2YTYp9ir2KfYoScsICfZitmI2YUg2KfZhNij2LHYqNi52KfYoScsICfZitmI2YUg2KfZhNiu2YXZitizJywgJ9mK2YjZhSDYp9mE2KzZhdi52KknLCAn2YrZiNmFINin2YTYs9io2KonXSxcblx0XHRkYXRlRm9ybWF0OiAneXl5eS9tbS9kZCcsXG5cdFx0Zmlyc3REYXk6IDYsXG5cdFx0aXNSVEw6IHRydWVcblx0fTtcbn0pKGpRdWVyeSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuaXNsYW1pYy1hci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLmlzbGFtaWMtYXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEFyYWJpYyBsb2NhbGlzYXRpb24gZm9yIElzbGFtaWMgY2FsZW5kYXIgZm9yIGpRdWVyeSB2Mi4wLjEuXHJcbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgQXVndXN0IDIwMDkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmlzbGFtaWMucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXInXSA9IHtcclxuXHRcdG5hbWU6ICdJc2xhbWljJyxcclxuXHRcdGVwb2NoczogWydCQU0nLCAnQU0nXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn2YXYrdix2ZHZhScsICfYtdmB2LEnLCAn2LHYqNmK2Lkg2KfZhNij2YjZhCcsICfYsdio2YrYuSDYp9mE2KLYrtixINij2Ygg2LHYqNmK2Lkg2KfZhNir2KfZhtmKJywgJ9is2YXYp9iv2Ykg2KfZhNin2YjZhCcsICfYrNmF2KfYr9mJINin2YTYotiu2LEg2KPZiCDYrNmF2KfYr9mJINin2YTYq9in2YbZiicsXHJcblx0XHQn2LHYrNioJywgJ9i02LnYqNin2YYnLCAn2LHZhdi22KfZhicsICfYtNmI2ZHYp9mEJywgJ9iw2Ygg2KfZhNmC2LnYr9ipJywgJ9iw2Ygg2KfZhNit2KzYqSddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ9mF2K3YsdmR2YUnLCAn2LXZgdixJywgJ9ix2KjZiti5INin2YTYo9mI2YQnLCAn2LHYqNmK2Lkg2KfZhNii2K7YsSDYo9mIINix2KjZiti5INin2YTYq9in2YbZiicsICfYrNmF2KfYr9mJINin2YTYp9mI2YQnLCAn2KzZhdin2K/ZiSDYp9mE2KLYrtixINij2Ygg2KzZhdin2K/ZiSDYp9mE2KvYp9mG2YonLFxyXG5cdFx0J9ix2KzYqCcsICfYtNi52KjYp9mGJywgJ9ix2YXYttin2YYnLCAn2LTZiNmR2KfZhCcsICfYsNmIINin2YTZgti52K/YqScsICfYsNmIINin2YTYrdis2KknXSxcclxuXHRcdGRheU5hbWVzOiBbJ9mK2YjZhSDYp9mE2KPYrdivJywgJ9mK2YjZhSDYp9mE2KXYq9mG2YrZhicsICfZitmI2YUg2KfZhNir2YTYp9ir2KfYoScsICfZitmI2YUg2KfZhNij2LHYqNi52KfYoScsICfZitmI2YUg2KfZhNiu2YXZitizJywgJ9mK2YjZhSDYp9mE2KzZhdi52KknLCAn2YrZiNmFINin2YTYs9io2KonXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn2YrZiNmFINin2YTYo9it2K8nLCAn2YrZiNmFINin2YTYpdir2YbZitmGJywgJ9mK2YjZhSDYp9mE2KvZhNin2KvYp9ihJywgJ9mK2YjZhSDYp9mE2KPYsdio2LnYp9ihJywgJ9mK2YjZhSDYp9mE2K7ZhdmK2LMnLCAn2YrZiNmFINin2YTYrNmF2LnYqScsICfZitmI2YUg2KfZhNiz2KjYqiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn2YrZiNmFINin2YTYo9it2K8nLCAn2YrZiNmFINin2YTYpdir2YbZitmGJywgJ9mK2YjZhSDYp9mE2KvZhNin2KvYp9ihJywgJ9mK2YjZhSDYp9mE2KPYsdio2LnYp9ihJywgJ9mK2YjZhSDYp9mE2K7ZhdmK2LMnLCAn2YrZiNmFINin2YTYrNmF2LnYqScsICfZitmI2YUg2KfZhNiz2KjYqiddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXkvbW0vZGQnLFxyXG5cdFx0Zmlyc3REYXk6IDYsXHJcblx0XHRpc1JUTDogdHJ1ZVxyXG5cdH07XHJcbn0pKGpRdWVyeSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.islamic-fa.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.islamic-fa.js index 62c8fd9fb58..1461a14d68b 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.islamic-fa.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.islamic-fa.js @@ -22,4 +22,4 @@ isRTL: true }; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuaXNsYW1pYy1mYS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLmlzbGFtaWMtZmEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBGYXJzaS9QZXJzaWFuIGxvY2FsaXNhdGlvbiBmb3IgSXNsYW1pYyBjYWxlbmRhciBmb3IgalF1ZXJ5IHYyLjAuMS5cbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgQXVndXN0IDIwMDkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuaXNsYW1pYy5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmYSddID0ge1xuXHRcdG5hbWU6ICdJc2xhbWljJyxcblx0XHRlcG9jaHM6IFsnQkFNJywgJ0FNJ10sXG5cdFx0bW9udGhOYW1lczogWyfZhdit2LHZkdmFJywgJ9i12YHYsScsICfYsdio2YrYuSDYp9mE2KPZiNmEJywgJ9ix2KjZiti5INin2YTYotiu2LEg2KPZiCDYsdio2YrYuSDYp9mE2KvYp9mG2YonLCAn2KzZhdin2K/ZiSDYp9mE2KfZiNmEJywgJ9is2YXYp9iv2Ykg2KfZhNii2K7YsSDYo9mIINis2YXYp9iv2Ykg2KfZhNir2KfZhtmKJyxcblx0XHQn2LHYrNioJywgJ9i02LnYqNin2YYnLCAn2LHZhdi22KfZhicsICfYtNmI2ZHYp9mEJywgJ9iw2Ygg2KfZhNmC2LnYr9ipJywgJ9iw2Ygg2KfZhNit2KzYqSddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfZhdit2LHZkdmFJywgJ9i12YHYsScsICfYsdio2YrYuSDYp9mE2KPZiNmEJywgJ9ix2KjZiti5INin2YTYotiu2LEg2KPZiCDYsdio2YrYuSDYp9mE2KvYp9mG2YonLCAn2KzZhdin2K/ZiSDYp9mE2KfZiNmEJywgJ9is2YXYp9iv2Ykg2KfZhNii2K7YsSDYo9mIINis2YXYp9iv2Ykg2KfZhNir2KfZhtmKJyxcblx0XHQn2LHYrNioJywgJ9i02LnYqNin2YYnLCAn2LHZhdi22KfZhicsICfYtNmI2ZHYp9mEJywgJ9iw2Ygg2KfZhNmC2LnYr9ipJywgJ9iw2Ygg2KfZhNit2KzYqSddLFxuXHRcdGRheU5hbWVzOiBbJ9mK2YjZhSDYp9mE2KPYrdivJywgJ9mK2YjZhSDYp9mE2KXYq9mG2YrZhicsICfZitmI2YUg2KfZhNir2YTYp9ir2KfYoScsICfZitmI2YUg2KfZhNij2LHYqNi52KfYoScsICfZitmI2YUg2KfZhNiu2YXZitizJywgJ9mK2YjZhSDYp9mE2KzZhdi52KknLCAn2YrZiNmFINin2YTYs9io2KonXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9mK2YjZhSDYp9mE2KPYrdivJywgJ9mK2YjZhSDYp9mE2KXYq9mG2YrZhicsICfZitmI2YUg2KfZhNir2YTYp9ir2KfYoScsICfZitmI2YUg2KfZhNij2LHYqNi52KfYoScsICfZitmI2YUg2KfZhNiu2YXZitizJywgJ9mK2YjZhSDYp9mE2KzZhdi52KknLCAn2YrZiNmFINin2YTYs9io2KonXSxcblx0XHRkYXlOYW1lc01pbjogWyfZitmI2YUg2KfZhNij2K3YrycsICfZitmI2YUg2KfZhNil2KvZhtmK2YYnLCAn2YrZiNmFINin2YTYq9mE2KfYq9in2KEnLCAn2YrZiNmFINin2YTYo9ix2KjYudin2KEnLCAn2YrZiNmFINin2YTYrtmF2YrYsycsICfZitmI2YUg2KfZhNis2YXYudipJywgJ9mK2YjZhSDYp9mE2LPYqNiqJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXkvbW0vZGQnLFxuXHRcdGZpcnN0RGF5OiA2LFxuXHRcdGlzUlRMOiB0cnVlXG5cdH07XG59KShqUXVlcnkpOyJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuaXNsYW1pYy1mYS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLmlzbGFtaWMtZmEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEZhcnNpL1BlcnNpYW4gbG9jYWxpc2F0aW9uIGZvciBJc2xhbWljIGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxyXG4gICBXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpIEF1Z3VzdCAyMDA5LiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5pc2xhbWljLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZhJ10gPSB7XHJcblx0XHRuYW1lOiAnSXNsYW1pYycsXHJcblx0XHRlcG9jaHM6IFsnQkFNJywgJ0FNJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ9mF2K3YsdmR2YUnLCAn2LXZgdixJywgJ9ix2KjZiti5INin2YTYo9mI2YQnLCAn2LHYqNmK2Lkg2KfZhNii2K7YsSDYo9mIINix2KjZiti5INin2YTYq9in2YbZiicsICfYrNmF2KfYr9mJINin2YTYp9mI2YQnLCAn2KzZhdin2K/ZiSDYp9mE2KLYrtixINij2Ygg2KzZhdin2K/ZiSDYp9mE2KvYp9mG2YonLFxyXG5cdFx0J9ix2KzYqCcsICfYtNi52KjYp9mGJywgJ9ix2YXYttin2YYnLCAn2LTZiNmR2KfZhCcsICfYsNmIINin2YTZgti52K/YqScsICfYsNmIINin2YTYrdis2KknXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfZhdit2LHZkdmFJywgJ9i12YHYsScsICfYsdio2YrYuSDYp9mE2KPZiNmEJywgJ9ix2KjZiti5INin2YTYotiu2LEg2KPZiCDYsdio2YrYuSDYp9mE2KvYp9mG2YonLCAn2KzZhdin2K/ZiSDYp9mE2KfZiNmEJywgJ9is2YXYp9iv2Ykg2KfZhNii2K7YsSDYo9mIINis2YXYp9iv2Ykg2KfZhNir2KfZhtmKJyxcclxuXHRcdCfYsdis2KgnLCAn2LTYudio2KfZhicsICfYsdmF2LbYp9mGJywgJ9i02YjZkdin2YQnLCAn2LDZiCDYp9mE2YLYudiv2KknLCAn2LDZiCDYp9mE2K3YrNipJ10sXHJcblx0XHRkYXlOYW1lczogWyfZitmI2YUg2KfZhNij2K3YrycsICfZitmI2YUg2KfZhNil2KvZhtmK2YYnLCAn2YrZiNmFINin2YTYq9mE2KfYq9in2KEnLCAn2YrZiNmFINin2YTYo9ix2KjYudin2KEnLCAn2YrZiNmFINin2YTYrtmF2YrYsycsICfZitmI2YUg2KfZhNis2YXYudipJywgJ9mK2YjZhSDYp9mE2LPYqNiqJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9mK2YjZhSDYp9mE2KPYrdivJywgJ9mK2YjZhSDYp9mE2KXYq9mG2YrZhicsICfZitmI2YUg2KfZhNir2YTYp9ir2KfYoScsICfZitmI2YUg2KfZhNij2LHYqNi52KfYoScsICfZitmI2YUg2KfZhNiu2YXZitizJywgJ9mK2YjZhSDYp9mE2KzZhdi52KknLCAn2YrZiNmFINin2YTYs9io2KonXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ9mK2YjZhSDYp9mE2KPYrdivJywgJ9mK2YjZhSDYp9mE2KXYq9mG2YrZhicsICfZitmI2YUg2KfZhNir2YTYp9ir2KfYoScsICfZitmI2YUg2KfZhNij2LHYqNi52KfYoScsICfZitmI2YUg2KfZhNiu2YXZitizJywgJ9mK2YjZhSDYp9mE2KzZhdi52KknLCAn2YrZiNmFINin2YTYs9io2KonXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICd5eXl5L21tL2RkJyxcclxuXHRcdGZpcnN0RGF5OiA2LFxyXG5cdFx0aXNSVEw6IHRydWVcclxuXHR9O1xyXG59KShqUXVlcnkpOyJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.islamic.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.islamic.js index e5a5ffe81a5..58cdbe02fc0 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.islamic.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.islamic.js @@ -169,4 +169,4 @@ $.calendars.calendars.islamic = IslamicCalendar; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuaXNsYW1pYy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLmlzbGFtaWMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBJc2xhbWljIGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxuICAgV3JpdHRlbiBieSBLZWl0aCBXb29kIChrYndvb2R7YXR9aWluZXQuY29tLmF1KSBBdWd1c3QgMjAwOS5cbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cblxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxuXG5cdC8qKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgSXNsYW1pYyBvciAnMTYgY2l2aWwnIGNhbGVuZGFyLlxuXHRcdEJhc2VkIG9uIGNvZGUgZnJvbSA8YSBocmVmPVwiaHR0cDovL3d3dy5pcmFuY2hhbWJlci5jb20vY2FsZW5kYXIvY29udmVydGVyL2lyYW5pYW5fY2FsZW5kYXJfY29udmVydGVyLnBocFwiPmh0dHA6Ly93d3cuaXJhbmNoYW1iZXIuY29tL2NhbGVuZGFyL2NvbnZlcnRlci9pcmFuaWFuX2NhbGVuZGFyX2NvbnZlcnRlci5waHA8L2E+LlxuXHRcdFNlZSBhbHNvIDxhIGhyZWY9XCJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lzbGFtaWNfY2FsZW5kYXJcIj5odHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lzbGFtaWNfY2FsZW5kYXI8L2E+LlxuXHRcdEBjbGFzcyBJc2xhbWljQ2FsZW5kYXJcblx0XHRAcGFyYW0gW2xhbmd1YWdlPScnXSB7c3RyaW5nfSBUaGUgbGFuZ3VhZ2UgY29kZSAoZGVmYXVsdCBFbmdsaXNoKSBmb3IgbG9jYWxpc2F0aW9uLiAqL1xuXHRmdW5jdGlvbiBJc2xhbWljQ2FsZW5kYXIobGFuZ3VhZ2UpIHtcblx0XHR0aGlzLmxvY2FsID0gdGhpcy5yZWdpb25hbE9wdGlvbnNbbGFuZ3VhZ2UgfHwgJyddIHx8IHRoaXMucmVnaW9uYWxPcHRpb25zWycnXTtcblx0fVxuXG5cdElzbGFtaWNDYWxlbmRhci5wcm90b3R5cGUgPSBuZXcgJC5jYWxlbmRhcnMuYmFzZUNhbGVuZGFyO1xuXG5cdCQuZXh0ZW5kKElzbGFtaWNDYWxlbmRhci5wcm90b3R5cGUsIHtcblx0XHQvKiogVGhlIGNhbGVuZGFyIG5hbWUuXG5cdFx0XHRAbWVtYmVyb2YgSXNsYW1pY0NhbGVuZGFyICovXG5cdFx0bmFtZTogJ0lzbGFtaWMnLFxuXHRcdC8qKiBKdWxpYW4gZGF0ZSBvZiBzdGFydCBvZiBJc2xhbWljIGVwb2NoOiAxNiBKdWx5IDYyMiBDRS5cblx0XHRcdEBtZW1iZXJvZiBJc2xhbWljQ2FsZW5kYXIgKi9cblx0XHRqZEVwb2NoOiAxOTQ4NDM5LjUsXG5cdFx0LyoqIERheXMgcGVyIG1vbnRoIGluIGEgY29tbW9uIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgSXNsYW1pY0NhbGVuZGFyICovXG5cdFx0ZGF5c1Blck1vbnRoOiBbMzAsIDI5LCAzMCwgMjksIDMwLCAyOSwgMzAsIDI5LCAzMCwgMjksIDMwLCAyOV0sXG5cdFx0LyoqIDxjb2RlPnRydWU8L2NvZGU+IGlmIGhhcyBhIHllYXIgemVybywgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEBtZW1iZXJvZiBJc2xhbWljQ2FsZW5kYXIgKi9cblx0XHRoYXNZZWFyWmVybzogZmFsc2UsXG5cdFx0LyoqIFRoZSBtaW5pbXVtIG1vbnRoIG51bWJlci5cblx0XHRcdEBtZW1iZXJvZiBJc2xhbWljQ2FsZW5kYXIgKi9cblx0XHRtaW5Nb250aDogMSxcblx0XHQvKiogVGhlIGZpcnN0IG1vbnRoIGluIHRoZSB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIElzbGFtaWNDYWxlbmRhciAqL1xuXHRcdGZpcnN0TW9udGg6IDEsXG5cdFx0LyoqIFRoZSBtaW5pbXVtIGRheSBudW1iZXIuXG5cdFx0XHRAbWVtYmVyb2YgSXNsYW1pY0NhbGVuZGFyICovXG5cdFx0bWluRGF5OiAxLFxuXG5cdFx0LyoqIExvY2FsaXNhdGlvbnMgZm9yIHRoZSBwbHVnaW4uXG5cdFx0XHRFbnRyaWVzIGFyZSBvYmplY3RzIGluZGV4ZWQgYnkgdGhlIGxhbmd1YWdlIGNvZGUgKCcnIGJlaW5nIHRoZSBkZWZhdWx0IFVTL0VuZ2xpc2gpLlxuXHRcdFx0RWFjaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcy5cblx0XHRcdEBtZW1iZXJvZiBJc2xhbWljQ2FsZW5kYXJcblx0XHRcdEBwcm9wZXJ0eSBuYW1lIHtzdHJpbmd9IFRoZSBjYWxlbmRhciBuYW1lLlxuXHRcdFx0QHByb3BlcnR5IGVwb2NocyB7c3RyaW5nW119IFRoZSBlcG9jaCBuYW1lcy5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNNaW4ge3N0cmluZ1tdfSBUaGUgbWluaW1hbCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cblx0XHRcdEBwcm9wZXJ0eSBkYXRlRm9ybWF0IHtzdHJpbmd9IFRoZSBkYXRlIGZvcm1hdCBmb3IgdGhpcyBjYWxlbmRhci5cblx0XHRcdFx0XHRTZWUgdGhlIG9wdGlvbnMgb24gPGEgaHJlZj1cIkJhc2VDYWxlbmRhci5odG1sI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4gZm9yIGRldGFpbHMuXG5cdFx0XHRAcHJvcGVydHkgZmlyc3REYXkge251bWJlcn0gVGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBzdGFydGluZyBhdCAwLlxuXHRcdFx0QHByb3BlcnR5IGlzUlRMIHtudW1iZXJ9IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgbG9jYWxpc2F0aW9uIHJlYWRzIHJpZ2h0LXRvLWxlZnQuICovXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7IC8vIExvY2FsaXNhdGlvbnNcblx0XHRcdCcnOiB7XG5cdFx0XHRcdG5hbWU6ICdJc2xhbWljJyxcblx0XHRcdFx0ZXBvY2hzOiBbJ0JIJywgJ0FIJ10sXG5cdFx0XHRcdG1vbnRoTmFtZXM6IFsnTXVoYXJyYW0nLCAnU2FmYXInLCAnUmFiaVxcJyBhbC1hd3dhbCcsICdSYWJpXFwnIGFsLXRoYW5pJywgJ0p1bWFkYSBhbC1hd3dhbCcsICdKdW1hZGEgYWwtdGhhbmknLFxuXHRcdFx0XHQnUmFqYWInLCAnU2hhXFwnYWJhbicsICdSYW1hZGFuJywgJ1NoYXd3YWwnLCAnRGh1IGFsLVFpXFwnZGFoJywgJ0RodSBhbC1IaWpqYWgnXSxcblx0XHRcdFx0bW9udGhOYW1lc1Nob3J0OiBbJ011aCcsICdTYWYnLCAnUmFiMScsICdSYWIyJywgJ0p1bTEnLCAnSnVtMicsICdSYWonLCAnU2hhXFwnJywgJ1JhbScsICdTaGF3JywgJ0RodVEnLCAnRGh1SCddLFxuXHRcdFx0XHRkYXlOYW1lczogWydZYXdtIGFsLWFoYWQnLCAnWWF3bSBhbC1pdGhuYXluJywgJ1lhd20gYXRoLXRodWxhYXRoYWFcXCcnLFxuXHRcdFx0XHQnWWF3bSBhbC1hcmJpXFwnYWFcXCcnLCAnWWF3bSBhbC1raGFtxKtzJywgJ1lhd20gYWwtanVtXFwnYScsICdZYXdtIGFzLXNhYnQnXSxcblx0XHRcdFx0ZGF5TmFtZXNTaG9ydDogWydBaGEnLCAnSXRoJywgJ1RodScsICdBcmInLCAnS2hhJywgJ0p1bScsICdTYWInXSxcblx0XHRcdFx0ZGF5TmFtZXNNaW46IFsnQWgnLCdJdCcsJ1RoJywnQXInLCdLaCcsJ0p1JywnU2EnXSxcblx0XHRcdFx0ZGF0ZUZvcm1hdDogJ3l5eXkvbW0vZGQnLFxuXHRcdFx0XHRmaXJzdERheTogNixcblx0XHRcdFx0aXNSVEw6IGZhbHNlXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgaW4gYSBsZWFwIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgSXNsYW1pY0NhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGlzIGEgbGVhcCB5ZWFyLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRsZWFwWWVhcjogZnVuY3Rpb24oeWVhcikge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIpO1xuXHRcdFx0cmV0dXJuIChkYXRlLnllYXIoKSAqIDExICsgMTQpICUgMzAgPCAxMTtcblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB0aGUgd2VlayBvZiB0aGUgeWVhciBmb3IgYSBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIElzbGFtaWNDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgd2VlayBvZiB0aGUgeWVhci5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0d2Vla09mWWVhcjogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0Ly8gRmluZCBTdW5kYXkgb2YgdGhpcyB3ZWVrIHN0YXJ0aW5nIG9uIFN1bmRheVxuXHRcdFx0dmFyIGNoZWNrRGF0ZSA9IHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcblx0XHRcdGNoZWNrRGF0ZS5hZGQoLWNoZWNrRGF0ZS5kYXlPZldlZWsoKSwgJ2QnKTtcblx0XHRcdHJldHVybiBNYXRoLmZsb29yKChjaGVja0RhdGUuZGF5T2ZZZWFyKCkgLSAxKSAvIDcpICsgMTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBhIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgSXNsYW1pY0NhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cy5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0ZGF5c0luWWVhcjogZnVuY3Rpb24oeWVhcikge1xuXHRcdFx0cmV0dXJuICh0aGlzLmxlYXBZZWFyKHllYXIpID8gMzU1IDogMzU0KTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBhIG1vbnRoLlxuXHRcdFx0QG1lbWJlcm9mIElzbGFtaWNDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciBvZiB0aGUgbW9udGguXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGguXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIG1vbnRoLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIG1vbnRoL3llYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRkYXlzSW5Nb250aDogZnVuY3Rpb24oeWVhciwgbW9udGgpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkTW9udGgpO1xuXHRcdFx0cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW2RhdGUubW9udGgoKSAtIDFdICtcblx0XHRcdFx0KGRhdGUubW9udGgoKSA9PT0gMTIgJiYgdGhpcy5sZWFwWWVhcihkYXRlLnllYXIoKSkgPyAxIDogMCk7XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgYSB3ZWVrIGRheS5cblx0XHRcdEBtZW1iZXJvZiBJc2xhbWljQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGEgd2VlayBkYXksIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdHdlZWtEYXk6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdHJldHVybiB0aGlzLmRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KSAhPT0gNTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBKdWxpYW4gZGF0ZSBlcXVpdmFsZW50IGZvciB0aGlzIGRhdGUsXG5cdFx0XHRpLmUuIGRheXMgc2luY2UgSmFudWFyeSAxLCA0NzEzIEJDRSBHcmVlbndpY2ggbm9vbi5cblx0XHRcdEBtZW1iZXJvZiBJc2xhbWljQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvbnZlcnQgb3IgdGhlIHllYXIgdG8gY29udmVydC5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBjb252ZXJ0LlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gY29udmVydC5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGVxdWl2YWxlbnQgSnVsaWFuIGRhdGUuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdHRvSkQ6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUpO1xuXHRcdFx0eWVhciA9IGRhdGUueWVhcigpO1xuXHRcdFx0bW9udGggPSBkYXRlLm1vbnRoKCk7XG5cdFx0XHRkYXkgPSBkYXRlLmRheSgpO1xuXHRcdFx0eWVhciA9ICh5ZWFyIDw9IDAgPyB5ZWFyICsgMSA6IHllYXIpO1xuXHRcdFx0cmV0dXJuIGRheSArIE1hdGguY2VpbCgyOS41ICogKG1vbnRoIC0gMSkpICsgKHllYXIgLSAxKSAqIDM1NCArXG5cdFx0XHRcdE1hdGguZmxvb3IoKDMgKyAoMTEgKiB5ZWFyKSkgLyAzMCkgKyB0aGlzLmpkRXBvY2ggLSAxO1xuXHRcdH0sXG5cblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgZnJvbSBhIEp1bGlhbiBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIElzbGFtaWNDYWxlbmRhclxuXHRcdFx0QHBhcmFtIGpkIHtudW1iZXJ9IFRoZSBKdWxpYW4gZGF0ZSB0byBjb252ZXJ0LlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXG5cdFx0ZnJvbUpEOiBmdW5jdGlvbihqZCkge1xuXHRcdFx0amQgPSBNYXRoLmZsb29yKGpkKSArIDAuNTtcblx0XHRcdHZhciB5ZWFyID0gTWF0aC5mbG9vcigoMzAgKiAoamQgLSB0aGlzLmpkRXBvY2gpICsgMTA2NDYpIC8gMTA2MzEpO1xuXHRcdFx0eWVhciA9ICh5ZWFyIDw9IDAgPyB5ZWFyIC0gMSA6IHllYXIpO1xuXHRcdFx0dmFyIG1vbnRoID0gTWF0aC5taW4oMTIsIE1hdGguY2VpbCgoamQgLSAyOSAtIHRoaXMudG9KRCh5ZWFyLCAxLCAxKSkgLyAyOS41KSArIDEpO1xuXHRcdFx0dmFyIGRheSA9IGpkIC0gdGhpcy50b0pEKHllYXIsIG1vbnRoLCAxKSArIDE7XG5cdFx0XHRyZXR1cm4gdGhpcy5uZXdEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gSXNsYW1pYyAoMTYgY2l2aWwpIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5pc2xhbWljID0gSXNsYW1pY0NhbGVuZGFyO1xuXG59KShqUXVlcnkpOyJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuaXNsYW1pYy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLmlzbGFtaWMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIElzbGFtaWMgY2FsZW5kYXIgZm9yIGpRdWVyeSB2Mi4wLjEuXHJcbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgQXVndXN0IDIwMDkuXHJcbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXHJcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xyXG5cclxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxyXG5cclxuXHQvKiogSW1wbGVtZW50YXRpb24gb2YgdGhlIElzbGFtaWMgb3IgJzE2IGNpdmlsJyBjYWxlbmRhci5cclxuXHRcdEJhc2VkIG9uIGNvZGUgZnJvbSA8YSBocmVmPVwiaHR0cDovL3d3dy5pcmFuY2hhbWJlci5jb20vY2FsZW5kYXIvY29udmVydGVyL2lyYW5pYW5fY2FsZW5kYXJfY29udmVydGVyLnBocFwiPmh0dHA6Ly93d3cuaXJhbmNoYW1iZXIuY29tL2NhbGVuZGFyL2NvbnZlcnRlci9pcmFuaWFuX2NhbGVuZGFyX2NvbnZlcnRlci5waHA8L2E+LlxyXG5cdFx0U2VlIGFsc28gPGEgaHJlZj1cImh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSXNsYW1pY19jYWxlbmRhclwiPmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSXNsYW1pY19jYWxlbmRhcjwvYT4uXHJcblx0XHRAY2xhc3MgSXNsYW1pY0NhbGVuZGFyXHJcblx0XHRAcGFyYW0gW2xhbmd1YWdlPScnXSB7c3RyaW5nfSBUaGUgbGFuZ3VhZ2UgY29kZSAoZGVmYXVsdCBFbmdsaXNoKSBmb3IgbG9jYWxpc2F0aW9uLiAqL1xyXG5cdGZ1bmN0aW9uIElzbGFtaWNDYWxlbmRhcihsYW5ndWFnZSkge1xyXG5cdFx0dGhpcy5sb2NhbCA9IHRoaXMucmVnaW9uYWxPcHRpb25zW2xhbmd1YWdlIHx8ICcnXSB8fCB0aGlzLnJlZ2lvbmFsT3B0aW9uc1snJ107XHJcblx0fVxyXG5cclxuXHRJc2xhbWljQ2FsZW5kYXIucHJvdG90eXBlID0gbmV3ICQuY2FsZW5kYXJzLmJhc2VDYWxlbmRhcjtcclxuXHJcblx0JC5leHRlbmQoSXNsYW1pY0NhbGVuZGFyLnByb3RvdHlwZSwge1xyXG5cdFx0LyoqIFRoZSBjYWxlbmRhciBuYW1lLlxyXG5cdFx0XHRAbWVtYmVyb2YgSXNsYW1pY0NhbGVuZGFyICovXHJcblx0XHRuYW1lOiAnSXNsYW1pYycsXHJcblx0XHQvKiogSnVsaWFuIGRhdGUgb2Ygc3RhcnQgb2YgSXNsYW1pYyBlcG9jaDogMTYgSnVseSA2MjIgQ0UuXHJcblx0XHRcdEBtZW1iZXJvZiBJc2xhbWljQ2FsZW5kYXIgKi9cclxuXHRcdGpkRXBvY2g6IDE5NDg0MzkuNSxcclxuXHRcdC8qKiBEYXlzIHBlciBtb250aCBpbiBhIGNvbW1vbiB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgSXNsYW1pY0NhbGVuZGFyICovXHJcblx0XHRkYXlzUGVyTW9udGg6IFszMCwgMjksIDMwLCAyOSwgMzAsIDI5LCAzMCwgMjksIDMwLCAyOSwgMzAsIDI5XSxcclxuXHRcdC8qKiA8Y29kZT50cnVlPC9jb2RlPiBpZiBoYXMgYSB5ZWFyIHplcm8sIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXHJcblx0XHRcdEBtZW1iZXJvZiBJc2xhbWljQ2FsZW5kYXIgKi9cclxuXHRcdGhhc1llYXJaZXJvOiBmYWxzZSxcclxuXHRcdC8qKiBUaGUgbWluaW11bSBtb250aCBudW1iZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBJc2xhbWljQ2FsZW5kYXIgKi9cclxuXHRcdG1pbk1vbnRoOiAxLFxyXG5cdFx0LyoqIFRoZSBmaXJzdCBtb250aCBpbiB0aGUgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIElzbGFtaWNDYWxlbmRhciAqL1xyXG5cdFx0Zmlyc3RNb250aDogMSxcclxuXHRcdC8qKiBUaGUgbWluaW11bSBkYXkgbnVtYmVyLlxyXG5cdFx0XHRAbWVtYmVyb2YgSXNsYW1pY0NhbGVuZGFyICovXHJcblx0XHRtaW5EYXk6IDEsXHJcblxyXG5cdFx0LyoqIExvY2FsaXNhdGlvbnMgZm9yIHRoZSBwbHVnaW4uXHJcblx0XHRcdEVudHJpZXMgYXJlIG9iamVjdHMgaW5kZXhlZCBieSB0aGUgbGFuZ3VhZ2UgY29kZSAoJycgYmVpbmcgdGhlIGRlZmF1bHQgVVMvRW5nbGlzaCkuXHJcblx0XHRcdEVhY2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMuXHJcblx0XHRcdEBtZW1iZXJvZiBJc2xhbWljQ2FsZW5kYXJcclxuXHRcdFx0QHByb3BlcnR5IG5hbWUge3N0cmluZ30gVGhlIGNhbGVuZGFyIG5hbWUuXHJcblx0XHRcdEBwcm9wZXJ0eSBlcG9jaHMge3N0cmluZ1tdfSBUaGUgZXBvY2ggbmFtZXMuXHJcblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cclxuXHRcdFx0QHByb3BlcnR5IG1vbnRoTmFtZXNTaG9ydCB7c3RyaW5nW119IFRoZSBzaG9ydCBuYW1lcyBvZiB0aGUgbW9udGhzIG9mIHRoZSB5ZWFyLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXMge3N0cmluZ1tdfSBUaGUgbG9uZyBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cclxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lc01pbiB7c3RyaW5nW119IFRoZSBtaW5pbWFsIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF0ZUZvcm1hdCB7c3RyaW5nfSBUaGUgZGF0ZSBmb3JtYXQgZm9yIHRoaXMgY2FsZW5kYXIuXHJcblx0XHRcdFx0XHRTZWUgdGhlIG9wdGlvbnMgb24gPGEgaHJlZj1cIkJhc2VDYWxlbmRhci5odG1sI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4gZm9yIGRldGFpbHMuXHJcblx0XHRcdEBwcm9wZXJ0eSBmaXJzdERheSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWssIHN0YXJ0aW5nIGF0IDAuXHJcblx0XHRcdEBwcm9wZXJ0eSBpc1JUTCB7bnVtYmVyfSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGxvY2FsaXNhdGlvbiByZWFkcyByaWdodC10by1sZWZ0LiAqL1xyXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7IC8vIExvY2FsaXNhdGlvbnNcclxuXHRcdFx0Jyc6IHtcclxuXHRcdFx0XHRuYW1lOiAnSXNsYW1pYycsXHJcblx0XHRcdFx0ZXBvY2hzOiBbJ0JIJywgJ0FIJ10sXHJcblx0XHRcdFx0bW9udGhOYW1lczogWydNdWhhcnJhbScsICdTYWZhcicsICdSYWJpXFwnIGFsLWF3d2FsJywgJ1JhYmlcXCcgYWwtdGhhbmknLCAnSnVtYWRhIGFsLWF3d2FsJywgJ0p1bWFkYSBhbC10aGFuaScsXHJcblx0XHRcdFx0J1JhamFiJywgJ1NoYVxcJ2FiYW4nLCAnUmFtYWRhbicsICdTaGF3d2FsJywgJ0RodSBhbC1RaVxcJ2RhaCcsICdEaHUgYWwtSGlqamFoJ10sXHJcblx0XHRcdFx0bW9udGhOYW1lc1Nob3J0OiBbJ011aCcsICdTYWYnLCAnUmFiMScsICdSYWIyJywgJ0p1bTEnLCAnSnVtMicsICdSYWonLCAnU2hhXFwnJywgJ1JhbScsICdTaGF3JywgJ0RodVEnLCAnRGh1SCddLFxyXG5cdFx0XHRcdGRheU5hbWVzOiBbJ1lhd20gYWwtYWhhZCcsICdZYXdtIGFsLWl0aG5heW4nLCAnWWF3bSBhdGgtdGh1bGFhdGhhYVxcJycsXHJcblx0XHRcdFx0J1lhd20gYWwtYXJiaVxcJ2FhXFwnJywgJ1lhd20gYWwta2hhbcSrcycsICdZYXdtIGFsLWp1bVxcJ2EnLCAnWWF3bSBhcy1zYWJ0J10sXHJcblx0XHRcdFx0ZGF5TmFtZXNTaG9ydDogWydBaGEnLCAnSXRoJywgJ1RodScsICdBcmInLCAnS2hhJywgJ0p1bScsICdTYWInXSxcclxuXHRcdFx0XHRkYXlOYW1lc01pbjogWydBaCcsJ0l0JywnVGgnLCdBcicsJ0toJywnSnUnLCdTYSddLFxyXG5cdFx0XHRcdGRhdGVGb3JtYXQ6ICd5eXl5L21tL2RkJyxcclxuXHRcdFx0XHRmaXJzdERheTogNixcclxuXHRcdFx0XHRpc1JUTDogZmFsc2VcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGluIGEgbGVhcCB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgSXNsYW1pY0NhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBpcyBhIGxlYXAgeWVhciwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdGxlYXBZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyKTtcclxuXHRcdFx0cmV0dXJuIChkYXRlLnllYXIoKSAqIDExICsgMTQpICUgMzAgPCAxMTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB0aGUgd2VlayBvZiB0aGUgeWVhciBmb3IgYSBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgSXNsYW1pY0NhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIHdlZWsgb2YgdGhlIHllYXIuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR3ZWVrT2ZZZWFyOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdC8vIEZpbmQgU3VuZGF5IG9mIHRoaXMgd2VlayBzdGFydGluZyBvbiBTdW5kYXlcclxuXHRcdFx0dmFyIGNoZWNrRGF0ZSA9IHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcclxuXHRcdFx0Y2hlY2tEYXRlLmFkZCgtY2hlY2tEYXRlLmRheU9mV2VlaygpLCAnZCcpO1xyXG5cdFx0XHRyZXR1cm4gTWF0aC5mbG9vcigoY2hlY2tEYXRlLmRheU9mWWVhcigpIC0gMSkgLyA3KSArIDE7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgSXNsYW1pY0NhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRkYXlzSW5ZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XHJcblx0XHRcdHJldHVybiAodGhpcy5sZWFwWWVhcih5ZWFyKSA/IDM1NSA6IDM1NCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aC5cclxuXHRcdFx0QG1lbWJlcm9mIElzbGFtaWNDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIG9mIHRoZSBtb250aC5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIG1vbnRoLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgbW9udGgveWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZGF5c0luTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkTW9udGgpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbZGF0ZS5tb250aCgpIC0gMV0gK1xyXG5cdFx0XHRcdChkYXRlLm1vbnRoKCkgPT09IDEyICYmIHRoaXMubGVhcFllYXIoZGF0ZS55ZWFyKCkpID8gMSA6IDApO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGEgd2VlayBkYXkuXHJcblx0XHRcdEBtZW1iZXJvZiBJc2xhbWljQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYSB3ZWVrIGRheSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdHdlZWtEYXk6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZGF5T2ZXZWVrKHllYXIsIG1vbnRoLCBkYXkpICE9PSA1O1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIEp1bGlhbiBkYXRlIGVxdWl2YWxlbnQgZm9yIHRoaXMgZGF0ZSxcclxuXHRcdFx0aS5lLiBkYXlzIHNpbmNlIEphbnVhcnkgMSwgNDcxMyBCQ0UgR3JlZW53aWNoIG5vb24uXHJcblx0XHRcdEBtZW1iZXJvZiBJc2xhbWljQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gY29udmVydCBvciB0aGUgeWVhciB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gY29udmVydC5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gY29udmVydC5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZXF1aXZhbGVudCBKdWxpYW4gZGF0ZS5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdHRvSkQ6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcclxuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgZGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSk7XHJcblx0XHRcdHllYXIgPSBkYXRlLnllYXIoKTtcclxuXHRcdFx0bW9udGggPSBkYXRlLm1vbnRoKCk7XHJcblx0XHRcdGRheSA9IGRhdGUuZGF5KCk7XHJcblx0XHRcdHllYXIgPSAoeWVhciA8PSAwID8geWVhciArIDEgOiB5ZWFyKTtcclxuXHRcdFx0cmV0dXJuIGRheSArIE1hdGguY2VpbCgyOS41ICogKG1vbnRoIC0gMSkpICsgKHllYXIgLSAxKSAqIDM1NCArXHJcblx0XHRcdFx0TWF0aC5mbG9vcigoMyArICgxMSAqIHllYXIpKSAvIDMwKSArIHRoaXMuamRFcG9jaCAtIDE7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDcmVhdGUgYSBuZXcgZGF0ZSBmcm9tIGEgSnVsaWFuIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBJc2xhbWljQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIGpkIHtudW1iZXJ9IFRoZSBKdWxpYW4gZGF0ZSB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIGVxdWl2YWxlbnQgZGF0ZS4gKi9cclxuXHRcdGZyb21KRDogZnVuY3Rpb24oamQpIHtcclxuXHRcdFx0amQgPSBNYXRoLmZsb29yKGpkKSArIDAuNTtcclxuXHRcdFx0dmFyIHllYXIgPSBNYXRoLmZsb29yKCgzMCAqIChqZCAtIHRoaXMuamRFcG9jaCkgKyAxMDY0NikgLyAxMDYzMSk7XHJcblx0XHRcdHllYXIgPSAoeWVhciA8PSAwID8geWVhciAtIDEgOiB5ZWFyKTtcclxuXHRcdFx0dmFyIG1vbnRoID0gTWF0aC5taW4oMTIsIE1hdGguY2VpbCgoamQgLSAyOSAtIHRoaXMudG9KRCh5ZWFyLCAxLCAxKSkgLyAyOS41KSArIDEpO1xyXG5cdFx0XHR2YXIgZGF5ID0gamQgLSB0aGlzLnRvSkQoeWVhciwgbW9udGgsIDEpICsgMTtcclxuXHRcdFx0cmV0dXJuIHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0Ly8gSXNsYW1pYyAoMTYgY2l2aWwpIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uXHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmlzbGFtaWMgPSBJc2xhbWljQ2FsZW5kYXI7XHJcblxyXG59KShqUXVlcnkpOyJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.js index a5510857857..b7575d2e5c1 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.js @@ -861,4 +861,4 @@ })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBDYWxlbmRhcnMgZm9yIGpRdWVyeSB2Mi4wLjEuXG4gICBXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpIEF1Z3VzdCAyMDA5LlxuICAgQXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvbGljZW5jZS5odG1sKSBsaWNlbnNlLiBcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xuXG4oZnVuY3Rpb24oJCkgeyAvLyBIaWRlIHNjb3BlLCBubyAkIGNvbmZsaWN0XG5cblx0ZnVuY3Rpb24gQ2FsZW5kYXJzKCkge1xuXHRcdHRoaXMucmVnaW9uYWxPcHRpb25zID0gW107XG5cdFx0dGhpcy5yZWdpb25hbE9wdGlvbnNbJyddID0ge1xuXHRcdFx0aW52YWxpZENhbGVuZGFyOiAnQ2FsZW5kYXIgezB9IG5vdCBmb3VuZCcsXG5cdFx0XHRpbnZhbGlkRGF0ZTogJ0ludmFsaWQgezB9IGRhdGUnLFxuXHRcdFx0aW52YWxpZE1vbnRoOiAnSW52YWxpZCB7MH0gbW9udGgnLFxuXHRcdFx0aW52YWxpZFllYXI6ICdJbnZhbGlkIHswfSB5ZWFyJyxcblx0XHRcdGRpZmZlcmVudENhbGVuZGFyczogJ0Nhbm5vdCBtaXggezB9IGFuZCB7MX0gZGF0ZXMnXG5cdFx0fTtcblx0XHR0aGlzLmxvY2FsID0gdGhpcy5yZWdpb25hbE9wdGlvbnNbJyddO1xuXHRcdHRoaXMuY2FsZW5kYXJzID0ge307XG5cdFx0dGhpcy5fbG9jYWxDYWxzID0ge307XG5cdH1cblxuXHQvKiogQ3JlYXRlIHRoZSBjYWxlbmRhcnMgcGx1Z2luLlxuXHRcdDxwPlByb3ZpZGVzIHN1cHBvcnQgZm9yIHZhcmlvdXMgd29ybGQgY2FsZW5kYXJzIGluIGEgY29uc2lzdGVudCBtYW5uZXIuPC9wPlxuXHQgXHRAY2xhc3MgQ2FsZW5kYXJzXG5cdFx0QGV4YW1wbGUgJC5jYWxlbmRhcnMuaW5zdGFuY2UoJ2p1bGlhbicpLm5ld0RhdGUoMjAxNCwgMTIsIDI1KSAqL1xuXHQkLmV4dGVuZChDYWxlbmRhcnMucHJvdG90eXBlLCB7XG5cblx0XHQvKiogT2J0YWluIGEgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24gYW5kIGxvY2FsaXNhdGlvbi5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNcblx0XHRcdEBwYXJhbSBbbmFtZT0nZ3JlZ29yaWFuJ10ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyLCBlLmcuICdncmVnb3JpYW4nLCAncGVyc2lhbicsICdpc2xhbWljJy5cblx0XHRcdEBwYXJhbSBbbGFuZ3VhZ2U9JyddIHtzdHJpbmd9IFRoZSBsYW5ndWFnZSBjb2RlIHRvIHVzZSBmb3IgbG9jYWxpc2F0aW9uIChkZWZhdWx0IGlzIEVuZ2xpc2gpLlxuXHRcdFx0QHJldHVybiB7Q2FsZW5kYXJ9IFRoZSBjYWxlbmRhciBhbmQgbG9jYWxpc2F0aW9uLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBjYWxlbmRhciBub3QgZm91bmQuICovXG5cdFx0aW5zdGFuY2U6IGZ1bmN0aW9uKG5hbWUsIGxhbmd1YWdlKSB7XG5cdFx0XHRuYW1lID0gKG5hbWUgfHwgJ2dyZWdvcmlhbicpLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRsYW5ndWFnZSA9IGxhbmd1YWdlIHx8ICcnO1xuXHRcdFx0dmFyIGNhbCA9IHRoaXMuX2xvY2FsQ2Fsc1tuYW1lICsgJy0nICsgbGFuZ3VhZ2VdO1xuXHRcdFx0aWYgKCFjYWwgJiYgdGhpcy5jYWxlbmRhcnNbbmFtZV0pIHtcblx0XHRcdFx0Y2FsID0gbmV3IHRoaXMuY2FsZW5kYXJzW25hbWVdKGxhbmd1YWdlKTtcblx0XHRcdFx0dGhpcy5fbG9jYWxDYWxzW25hbWUgKyAnLScgKyBsYW5ndWFnZV0gPSBjYWw7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWNhbCkge1xuXHRcdFx0XHR0aHJvdyAodGhpcy5sb2NhbC5pbnZhbGlkQ2FsZW5kYXIgfHwgdGhpcy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRDYWxlbmRhcikuXG5cdFx0XHRcdFx0cmVwbGFjZSgvXFx7MFxcfS8sIG5hbWUpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGNhbDtcblx0XHR9LFxuXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIC0gZm9yIHRvZGF5IGlmIG5vIG90aGVyIHBhcmFtZXRlcnMgZ2l2ZW4uXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb3B5IG9yIHRoZSB5ZWFyIGZvciB0aGUgZGF0ZS5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCBmb3IgdGhlIGRhdGUuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSBmb3IgdGhlIGRhdGUuXG5cdFx0XHRAcGFyYW0gW2NhbGVuZGFyPSdncmVnb3JpYW4nXSB7QmFzZUNhbGVuZGFyfHN0cmluZ30gVGhlIHVuZGVybHlpbmcgY2FsZW5kYXIgb3IgdGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyLlxuXHRcdFx0QHBhcmFtIFtsYW5ndWFnZT0nJ10ge3N0cmluZ30gVGhlIGxhbmd1YWdlIHRvIHVzZSBmb3IgbG9jYWxpc2F0aW9uIChkZWZhdWx0IEVuZ2xpc2gpLlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBuZXcgZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlLiAqL1xuXHRcdG5ld0RhdGU6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXksIGNhbGVuZGFyLCBsYW5ndWFnZSkge1xuXHRcdFx0Y2FsZW5kYXIgPSAoeWVhciAhPSBudWxsICYmIHllYXIueWVhciA/IHllYXIuY2FsZW5kYXIoKSA6ICh0eXBlb2YgY2FsZW5kYXIgPT09ICdzdHJpbmcnID9cblx0XHRcdFx0dGhpcy5pbnN0YW5jZShjYWxlbmRhciwgbGFuZ3VhZ2UpIDogY2FsZW5kYXIpKSB8fCB0aGlzLmluc3RhbmNlKCk7XG5cdFx0XHRyZXR1cm4gY2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcblx0XHR9XG5cdH0pO1xuXG5cdC8qKiBHZW5lcmljIGRhdGUsIGJhc2VkIG9uIGEgcGFydGljdWxhciBjYWxlbmRhci5cblx0XHRAY2xhc3MgQ0RhdGVcblx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIHVuZGVybHlpbmcgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24uXG5cdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIHllYXIgZm9yIHRoaXMgZGF0ZS5cblx0XHRAcGFyYW0gbW9udGgge251bWJlcn0gVGhlIG1vbnRoIGZvciB0aGlzIGRhdGUuXG5cdFx0QHBhcmFtIGRheSB7bnVtYmVyfSBUaGUgZGF5IGZvciB0aGlzIGRhdGUuXG5cdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBkYXRlIG9iamVjdC5cblx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZS4gKi9cblx0ZnVuY3Rpb24gQ0RhdGUoY2FsZW5kYXIsIHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHR0aGlzLl9jYWxlbmRhciA9IGNhbGVuZGFyO1xuXHRcdHRoaXMuX3llYXIgPSB5ZWFyO1xuXHRcdHRoaXMuX21vbnRoID0gbW9udGg7XG5cdFx0dGhpcy5fZGF5ID0gZGF5O1xuXHRcdGlmICh0aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbCA9PT0gMCAmJlxuXHRcdFx0XHQhdGhpcy5fY2FsZW5kYXIuaXNWYWxpZCh0aGlzLl95ZWFyLCB0aGlzLl9tb250aCwgdGhpcy5fZGF5KSkge1xuXHRcdFx0dGhyb3cgKCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZERhdGUpLlxuXHRcdFx0XHRyZXBsYWNlKC9cXHswXFx9LywgdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIFBhZCBhIG51bWVyaWMgdmFsdWUgd2l0aCBsZWFkaW5nIHplcm9lcy5cblx0XHRAcHJpdmF0ZVxuXHRcdEBwYXJhbSB2YWx1ZSB7bnVtYmVyfSBUaGUgbnVtYmVyIHRvIGZvcm1hdC5cblx0XHRAcGFyYW0gbGVuZ3RoIHtudW1iZXJ9IFRoZSBtaW5pbXVtIGxlbmd0aC5cblx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgbnVtYmVyLiAqL1xuXHRmdW5jdGlvbiBwYWQodmFsdWUsIGxlbmd0aCkge1xuXHRcdHZhbHVlID0gJycgKyB2YWx1ZTtcblx0XHRyZXR1cm4gJzAwMDAwMCcuc3Vic3RyaW5nKDAsIGxlbmd0aCAtIHZhbHVlLmxlbmd0aCkgKyB2YWx1ZTtcblx0fVxuXG5cdCQuZXh0ZW5kKENEYXRlLnByb3RvdHlwZSwge1xuXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcGFyYW0gW3llYXJdIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvcHkgb3IgdGhlIHllYXIgZm9yIHRoZSBkYXRlIChkZWZhdWx0IHRoaXMgZGF0ZSkuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggZm9yIHRoZSBkYXRlLlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgZm9yIHRoZSBkYXRlLlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBuZXcgZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlLiAqL1xuXHRcdG5ld0RhdGU6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5uZXdEYXRlKCh5ZWFyID09IG51bGwgPyB0aGlzIDogeWVhciksIG1vbnRoLCBkYXkpO1xuXHRcdH0sXG5cblx0XHQvKiogU2V0IG9yIHJldHJpZXZlIHRoZSB5ZWFyIGZvciB0aGlzIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcblx0XHRcdEBwYXJhbSBbeWVhcl0ge251bWJlcn0gVGhlIHllYXIgZm9yIHRoZSBkYXRlLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfENEYXRlfSBUaGUgZGF0ZSdzIHllYXIgKGlmIG5vIHBhcmFtZXRlcikgb3IgdGhlIHVwZGF0ZWQgZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlLiAqL1xuXHRcdHllYXI6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHJldHVybiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCA/IHRoaXMuX3llYXIgOiB0aGlzLnNldCh5ZWFyLCAneScpKTtcblx0XHR9LFxuXG5cdFx0LyoqIFNldCBvciByZXRyaWV2ZSB0aGUgbW9udGggZm9yIHRoaXMgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIGZvciB0aGUgZGF0ZS5cblx0XHRcdEByZXR1cm4ge251bWJlcnxDRGF0ZX0gVGhlIGRhdGUncyBtb250aCAoaWYgbm8gcGFyYW1ldGVyKSBvciB0aGUgdXBkYXRlZCBkYXRlLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUuICovXG5cdFx0bW9udGg6IGZ1bmN0aW9uKG1vbnRoKSB7XG5cdFx0XHRyZXR1cm4gKGFyZ3VtZW50cy5sZW5ndGggPT09IDAgPyB0aGlzLl9tb250aCA6IHRoaXMuc2V0KG1vbnRoLCAnbScpKTtcblx0XHR9LFxuXG5cdFx0LyoqIFNldCBvciByZXRyaWV2ZSB0aGUgZGF5IGZvciB0aGlzIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IGZvciB0aGUgZGF0ZS5cblx0XHRcdEByZXR1cm4ge251bWJlcnxDRGF0YX0gVGhlIGRhdGUncyBkYXkgKGlmIG5vIHBhcmFtZXRlcikgb3IgdGhlIHVwZGF0ZWQgZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlLiAqL1xuXHRcdGRheTogZnVuY3Rpb24oZGF5KSB7XG5cdFx0XHRyZXR1cm4gKGFyZ3VtZW50cy5sZW5ndGggPT09IDAgPyB0aGlzLl9kYXkgOiB0aGlzLnNldChkYXksICdkJykpO1xuXHRcdH0sXG5cblx0XHQvKiogU2V0IG5ldyB2YWx1ZXMgZm9yIHRoaXMgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIHllYXIgZm9yIHRoZSBkYXRlLlxuXHRcdFx0QHBhcmFtIG1vbnRoIHtudW1iZXJ9IFRoZSBtb250aCBmb3IgdGhlIGRhdGUuXG5cdFx0XHRAcGFyYW0gZGF5IHtudW1iZXJ9IFRoZSBkYXkgZm9yIHRoZSBkYXRlLlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSB1cGRhdGVkIGRhdGUuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZS4gKi9cblx0XHRkYXRlOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHRpZiAoIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQoeWVhciwgbW9udGgsIGRheSkpIHtcblx0XHRcdFx0dGhyb3cgKCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZERhdGUpLlxuXHRcdFx0XHRcdHJlcGxhY2UoL1xcezBcXH0vLCB0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3llYXIgPSB5ZWFyO1xuXHRcdFx0dGhpcy5fbW9udGggPSBtb250aDtcblx0XHRcdHRoaXMuX2RheSA9IGRheTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGluIGEgbGVhcCB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGlzIGEgbGVhcCB5ZWFyLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LiAqL1xuXHRcdGxlYXBZZWFyOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5sZWFwWWVhcih0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBlcG9jaCBkZXNpZ25hdG9yIGZvciB0aGlzIGRhdGUsIGUuZy4gQkNFIG9yIENFLlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBjdXJyZW50IGVwb2NoLiAqL1xuXHRcdGVwb2NoOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5lcG9jaCh0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqIEZvcm1hdCB0aGUgeWVhciwgaWYgbm90IGEgc2ltcGxlIHNlcXVlbnRpYWwgbnVtYmVyLlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgeWVhci4gKi9cblx0XHRmb3JtYXRZZWFyOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5mb3JtYXRZZWFyKHRoaXMpO1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIG1vbnRoIG9mIHRoZSB5ZWFyIGZvciB0aGlzIGRhdGUsXG5cdFx0XHRpLmUuIHRoZSBtb250aCdzIHBvc2l0aW9uIHdpdGhpbiBhIG51bWJlcmVkIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG1vbnRoIG9mIHRoZSB5ZWFyOiA8Y29kZT5taW5Nb250aDwvY29kZT4gdG8gbW9udGhzIHBlciB5ZWFyLiAqL1xuXHRcdG1vbnRoT2ZZZWFyOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5tb250aE9mWWVhcih0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSB3ZWVrIG9mIHRoZSB5ZWFyIGZvciB0aGlzIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIHdlZWsgb2YgdGhlIHllYXI6IDEgdG8gd2Vla3MgcGVyIHllYXIuICovXG5cdFx0d2Vla09mWWVhcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla09mWWVhcih0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGUgeWVhciBmb3IgdGhpcyBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIHllYXIuICovXG5cdFx0ZGF5c0luWWVhcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luWWVhcih0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBkYXkgb2YgdGhlIHllYXIgZm9yIHRoaXMgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZGF5IG9mIHRoZSB5ZWFyOiAxIHRvIGRheXMgcGVyIHllYXIuICovXG5cdFx0ZGF5T2ZZZWFyOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZlllYXIodGhpcyk7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhlIG1vbnRoIGZvciB0aGlzIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzLiAqL1xuXHRcdGRheXNJbk1vbnRoOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5kYXlzSW5Nb250aCh0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBkYXkgb2YgdGhlIHdlZWsgZm9yIHRoaXMgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZGF5IG9mIHRoZSB3ZWVrOiAwIHRvIG51bWJlciBvZiBkYXlzIC0gMS4gKi9cblx0XHRkYXlPZldlZWs6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mV2Vlayh0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBhIHdlZWsgZGF5LlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBhIHdlZWsgZGF5LCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LiAqL1xuXHRcdHdlZWtEYXk6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtEYXkodGhpcyk7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHJldHVybiB7b2JqZWN0fSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIC0gY29udGVudHMgZGVwZW5kcyBvbiBjYWxlbmRhci4gKi9cblx0XHRleHRyYUluZm86IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmV4dHJhSW5mbyh0aGlzKTtcblx0XHR9LFxuXG5cdFx0LyoqIEFkZCBwZXJpb2QocykgdG8gYSBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcGVyaW9kcyB0byBhZGp1c3QgYnkuXG5cdFx0XHRAcGFyYW0gcGVyaW9kIHtzdHJpbmd9IE9uZSBvZiAneScgZm9yIHllYXIsICdtJyBmb3IgbW9udGgsICd3JyBmb3Igd2VlaywgJ2QnIGZvciBkYXkuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIHVwZGF0ZWQgZGF0ZS4gKi9cblx0XHRhZGQ6IGZ1bmN0aW9uKG9mZnNldCwgcGVyaW9kKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuYWRkKHRoaXMsIG9mZnNldCwgcGVyaW9kKTtcblx0XHR9LFxuXG5cdFx0LyoqIFNldCBhIHBvcnRpb24gb2YgdGhlIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcblx0XHRcdEBwYXJhbSB2YWx1ZSB7bnVtYmVyfSBUaGUgbmV3IHZhbHVlIGZvciB0aGUgcGVyaW9kLlxuXHRcdFx0QHBhcmFtIHBlcmlvZCB7c3RyaW5nfSBPbmUgb2YgJ3knIGZvciB5ZWFyLCAnbScgZm9yIG1vbnRoLCAnZCcgZm9yIGRheS5cblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgdXBkYXRlZCBkYXRlLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBub3QgYSB2YWxpZCBkYXRlLiAqL1xuXHRcdHNldDogZnVuY3Rpb24odmFsdWUsIHBlcmlvZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnNldCh0aGlzLCB2YWx1ZSwgcGVyaW9kKTtcblx0XHR9LFxuXG5cdFx0LyoqIENvbXBhcmUgdGhpcyBkYXRlIHRvIGFub3RoZXIgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgb3RoZXIgZGF0ZS5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gLTEgaWYgdGhpcyBkYXRlIGlzIGJlZm9yZSB0aGUgb3RoZXIgZGF0ZSxcblx0XHRcdFx0XHQwIGlmIHRoZXkgYXJlIGVxdWFsLCBvciArMSBpZiB0aGlzIGRhdGUgaXMgYWZ0ZXIgdGhlIG90aGVyIGRhdGUuICovXG5cdFx0Y29tcGFyZVRvOiBmdW5jdGlvbihkYXRlKSB7XG5cdFx0XHRpZiAodGhpcy5fY2FsZW5kYXIubmFtZSAhPT0gZGF0ZS5fY2FsZW5kYXIubmFtZSkge1xuXHRcdFx0XHR0aHJvdyAoJC5jYWxlbmRhcnMubG9jYWwuZGlmZmVyZW50Q2FsZW5kYXJzIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uZGlmZmVyZW50Q2FsZW5kYXJzKS5cblx0XHRcdFx0XHRyZXBsYWNlKC9cXHswXFx9LywgdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSkucmVwbGFjZSgvXFx7MVxcfS8sIGRhdGUuX2NhbGVuZGFyLmxvY2FsLm5hbWUpO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGMgPSAodGhpcy5feWVhciAhPT0gZGF0ZS5feWVhciA/IHRoaXMuX3llYXIgLSBkYXRlLl95ZWFyIDpcblx0XHRcdFx0dGhpcy5fbW9udGggIT09IGRhdGUuX21vbnRoID8gdGhpcy5tb250aE9mWWVhcigpIC0gZGF0ZS5tb250aE9mWWVhcigpIDpcblx0XHRcdFx0dGhpcy5fZGF5IC0gZGF0ZS5fZGF5KTtcblx0XHRcdHJldHVybiAoYyA9PT0gMCA/IDAgOiAoYyA8IDAgPyAtMSA6ICsxKSk7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgY2FsZW5kYXIgYmFja2luZyB0aGlzIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcblx0XHRcdEByZXR1cm4ge0Jhc2VDYWxlbmRhcn0gVGhlIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uLiAqL1xuXHRcdGNhbGVuZGFyOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhcjtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBKdWxpYW4gZGF0ZSBlcXVpdmFsZW50IGZvciB0aGlzIGRhdGUsXG5cdFx0XHRpLmUuIGRheXMgc2luY2UgSmFudWFyeSAxLCA0NzEzIEJDRSBHcmVlbndpY2ggbm9vbi5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZXF1aXZhbGVudCBKdWxpYW4gZGF0ZS4gKi9cblx0XHR0b0pEOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci50b0pEKHRoaXMpO1xuXHRcdH0sXG5cblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgZnJvbSBhIEp1bGlhbiBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcGFyYW0gamQge251bWJlcn0gVGhlIEp1bGlhbiBkYXRlIHRvIGNvbnZlcnQuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIGVxdWl2YWxlbnQgZGF0ZS4gKi9cblx0XHRmcm9tSkQ6IGZ1bmN0aW9uKGpkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZnJvbUpEKGpkKTtcblx0XHR9LFxuXG5cdFx0LyoqIENvbnZlcnQgdGhpcyBkYXRlIHRvIGEgc3RhbmRhcmQgKEdyZWdvcmlhbikgSmF2YVNjcmlwdCBEYXRlLlxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXG5cdFx0XHRAcmV0dXJuIHtEYXRlfSBUaGUgZXF1aXZhbGVudCBKYXZhU2NyaXB0IGRhdGUuICovXG5cdFx0dG9KU0RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnRvSlNEYXRlKHRoaXMpO1xuXHRcdH0sXG5cblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgZnJvbSBhIHN0YW5kYXJkIChHcmVnb3JpYW4pIEphdmFTY3JpcHQgRGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHBhcmFtIGpzZCB7RGF0ZX0gVGhlIEphdmFTY3JpcHQgZGF0ZSB0byBjb252ZXJ0LlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXG5cdFx0ZnJvbUpTRGF0ZTogZnVuY3Rpb24oanNkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZnJvbUpTRGF0ZShqc2QpO1xuXHRcdH0sXG5cblx0XHQvKiogQ29udmVydCB0byBhIHN0cmluZyBmb3IgZGlzcGxheS5cblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGlzIGRhdGUgYXMgYSBzdHJpbmcuICovXG5cdFx0dG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuICh0aGlzLnllYXIoKSA8IDAgPyAnLScgOiAnJykgKyBwYWQoTWF0aC5hYnModGhpcy55ZWFyKCkpLCA0KSArXG5cdFx0XHRcdCctJyArIHBhZCh0aGlzLm1vbnRoKCksIDIpICsgJy0nICsgcGFkKHRoaXMuZGF5KCksIDIpO1xuXHRcdH1cblx0fSk7XG5cblx0LyoqIEJhc2ljIGZ1bmN0aW9uYWxpdHkgZm9yIGFsbCBjYWxlbmRhcnMuXG5cdFx0T3RoZXIgY2FsZW5kYXJzIHNob3VsZCBleHRlbmQgdGhpczpcblx0XHQ8cHJlPk90aGVyQ2FsZW5kYXIucHJvdG90eXBlID0gbmV3IEJhc2VDYWxlbmRhcjs8L3ByZT5cblx0XHRAY2xhc3MgQmFzZUNhbGVuZGFyICovXG5cdGZ1bmN0aW9uIEJhc2VDYWxlbmRhcigpIHtcblx0XHR0aGlzLnNob3J0WWVhckN1dG9mZiA9ICcrMTAnO1xuXHR9XG5cblx0JC5leHRlbmQoQmFzZUNhbGVuZGFyLnByb3RvdHlwZSwge1xuXHRcdF92YWxpZGF0ZUxldmVsOiAwLCAvLyBcIlN0YWNrXCIgdG8gdHVybiB2YWxpZGF0aW9uIG9uL29mZlxuXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIHdpdGhpbiB0aGlzIGNhbGVuZGFyIC0gdG9kYXkgaWYgbm8gcGFyYW1ldGVycyBnaXZlbi5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGR1cGxpY2F0ZSBvciB0aGUgeWVhciBmb3IgdGhlIGRhdGUuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggZm9yIHRoZSBkYXRlLlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgZm9yIHRoZSBkYXRlLlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBuZXcgZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgbm90IGEgdmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdG5ld0RhdGU6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdGlmICh5ZWFyID09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMudG9kYXkoKTtcblx0XHRcdH1cblx0XHRcdGlmICh5ZWFyLnllYXIpIHtcblx0XHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSxcblx0XHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcblx0XHRcdFx0ZGF5ID0geWVhci5kYXkoKTtcblx0XHRcdFx0bW9udGggPSB5ZWFyLm1vbnRoKCk7XG5cdFx0XHRcdHllYXIgPSB5ZWFyLnllYXIoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBuZXcgQ0RhdGUodGhpcywgeWVhciwgbW9udGgsIGRheSk7XG5cdFx0fSxcblxuXHRcdC8qKiBDcmVhdGUgYSBuZXcgZGF0ZSBmb3IgdG9kYXkuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVG9kYXkncyBkYXRlLiAqL1xuXHRcdHRvZGF5OiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmZyb21KU0RhdGUobmV3IERhdGUoKSk7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgZXBvY2ggZGVzaWduYXRvciBmb3IgdGhpcyBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgY3VycmVudCBlcG9jaC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0ZXBvY2g6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksXG5cdFx0XHRcdCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZFllYXIpO1xuXHRcdFx0cmV0dXJuIChkYXRlLnllYXIoKSA8IDAgPyB0aGlzLmxvY2FsLmVwb2Noc1swXSA6IHRoaXMubG9jYWwuZXBvY2hzWzFdKTtcblx0XHR9LFxuXG5cdFx0LyoqIEZvcm1hdCB0aGUgeWVhciwgaWYgbm90IGEgc2ltcGxlIHNlcXVlbnRpYWwgbnVtYmVyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBmb3JtYXQgb3IgdGhlIHllYXIgdG8gZm9ybWF0LlxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHllYXIuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdGZvcm1hdFllYXI6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksXG5cdFx0XHRcdCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZFllYXIpO1xuXHRcdFx0cmV0dXJuIChkYXRlLnllYXIoKSA8IDAgPyAnLScgOiAnJykgKyBwYWQoTWF0aC5hYnMoZGF0ZS55ZWFyKCkpLCA0KVxuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBtb250aHMgaW4gYSB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIG1vbnRocy5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0bW9udGhzSW5ZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XG5cdFx0XHR0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkWWVhcik7XG5cdFx0XHRyZXR1cm4gMTI7XG5cdFx0fSxcblxuXHRcdC8qKiBDYWxjdWxhdGUgdGhlIG1vbnRoJ3Mgb3JkaW5hbCBwb3NpdGlvbiB3aXRoaW4gdGhlIHllYXIgLVxuXHRcdFx0Zm9yIHRob3NlIGNhbGVuZGFycyB0aGF0IGRvbid0IHN0YXJ0IGF0IG1vbnRoIDEhXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gbW9udGgge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBvcmRpbmFsIHBvc2l0aW9uLCBzdGFydGluZyBmcm9tIDxjb2RlPm1pbk1vbnRoPC9jb2RlPi5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyL21vbnRoIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0bW9udGhPZlllYXI6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCB0aGlzLm1pbkRheSxcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZE1vbnRoIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZE1vbnRoKTtcblx0XHRcdHJldHVybiAoZGF0ZS5tb250aCgpICsgdGhpcy5tb250aHNJblllYXIoZGF0ZSkgLSB0aGlzLmZpcnN0TW9udGgpICVcblx0XHRcdFx0dGhpcy5tb250aHNJblllYXIoZGF0ZSkgKyB0aGlzLm1pbk1vbnRoO1xuXHRcdH0sXG5cblx0XHQvKiogQ2FsY3VsYXRlIGFjdHVhbCBtb250aCBmcm9tIG9yZGluYWwgcG9zaXRpb24sIHN0YXJ0aW5nIGZyb20gbWluTW9udGguXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7bnVtYmVyfSBUaGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIG9yZCB7bnVtYmVyfSBUaGUgbW9udGgncyBvcmRpbmFsIHBvc2l0aW9uLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbW9udGgncyBudW1iZXIuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhci9tb250aC4gKi9cblx0XHRmcm9tTW9udGhPZlllYXI6IGZ1bmN0aW9uKHllYXIsIG9yZCkge1xuXHRcdFx0dmFyIG0gPSAob3JkICsgdGhpcy5maXJzdE1vbnRoIC0gMiAqIHRoaXMubWluTW9udGgpICVcblx0XHRcdFx0dGhpcy5tb250aHNJblllYXIoeWVhcikgKyB0aGlzLm1pbk1vbnRoO1xuXHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgbSwgdGhpcy5taW5EYXksXG5cdFx0XHRcdCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRNb250aCB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRNb250aCk7XG5cdFx0XHRyZXR1cm4gbTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBhIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cy5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0ZGF5c0luWWVhcjogZnVuY3Rpb24oeWVhcikge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkWWVhcik7XG5cdFx0XHRyZXR1cm4gKHRoaXMubGVhcFllYXIoZGF0ZSkgPyAzNjYgOiAzNjUpO1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIGRheSBvZiB0aGUgeWVhciBmb3IgYSBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gY29udmVydCBvciB0aGUgeWVhciB0byBjb252ZXJ0LlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGNvbnZlcnQuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBjb252ZXJ0LlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZGF5IG9mIHRoZSB5ZWFyLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRkYXlPZlllYXI6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSxcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSk7XG5cdFx0XHRyZXR1cm4gZGF0ZS50b0pEKCkgLSB0aGlzLm5ld0RhdGUoZGF0ZS55ZWFyKCksXG5cdFx0XHRcdHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGRhdGUueWVhcigpLCB0aGlzLm1pbk1vbnRoKSwgdGhpcy5taW5EYXkpLnRvSkQoKSArIDE7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSB3ZWVrLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMuICovXG5cdFx0ZGF5c0luV2VlazogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gNztcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBkYXkgb2YgdGhlIHdlZWsgZm9yIGEgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGRheSBvZiB0aGUgd2VlazogMCB0byBudW1iZXIgb2YgZGF5cyAtIDEuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdGRheU9mV2VlazogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgZGF5LFxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcblx0XHRcdHJldHVybiAoTWF0aC5mbG9vcih0aGlzLnRvSkQoZGF0ZSkpICsgMikgJSB0aGlzLmRheXNJbldlZWsoKTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7b2JqZWN0fSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIC0gY29udGVudHMgZGVwZW5kcyBvbiBjYWxlbmRhci5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0ZXh0cmFJbmZvOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHR0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgZGF5LFxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9LFxuXG5cdFx0LyoqIEFkZCBwZXJpb2QocykgdG8gYSBkYXRlLlxuXHRcdFx0Q2F0ZXIgZm9yIG5vIHllYXIgemVyby5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZX0gVGhlIHN0YXJ0aW5nIGRhdGUuXG5cdFx0XHRAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgcGVyaW9kcyB0byBhZGp1c3QgYnkuXG5cdFx0XHRAcGFyYW0gcGVyaW9kIHtzdHJpbmd9IE9uZSBvZiAneScgZm9yIHllYXIsICdtJyBmb3IgbW9udGgsICd3JyBmb3Igd2VlaywgJ2QnIGZvciBkYXkuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIHVwZGF0ZWQgZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRhZGQ6IGZ1bmN0aW9uKGRhdGUsIG9mZnNldCwgcGVyaW9kKSB7XG5cdFx0XHR0aGlzLl92YWxpZGF0ZShkYXRlLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSk7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY29ycmVjdEFkZChkYXRlLCB0aGlzLl9hZGQoZGF0ZSwgb2Zmc2V0LCBwZXJpb2QpLCBvZmZzZXQsIHBlcmlvZCk7XG5cdFx0fSxcblxuXHRcdC8qKiBBZGQgcGVyaW9kKHMpIHRvIGEgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBzdGFydGluZyBkYXRlLlxuXHRcdFx0QHBhcmFtIG9mZnNldCB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHBlcmlvZHMgdG8gYWRqdXN0IGJ5LlxuXHRcdFx0QHBhcmFtIHBlcmlvZCB7c3RyaW5nfSBPbmUgb2YgJ3knIGZvciB5ZWFyLCAnbScgZm9yIG1vbnRoLCAndycgZm9yIHdlZWssICdkJyBmb3IgZGF5LlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSB1cGRhdGVkIGRhdGUuICovXG5cdFx0X2FkZDogZnVuY3Rpb24oZGF0ZSwgb2Zmc2V0LCBwZXJpb2QpIHtcblx0XHRcdHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKztcblx0XHRcdGlmIChwZXJpb2QgPT09ICdkJyB8fCBwZXJpb2QgPT09ICd3Jykge1xuXHRcdFx0XHR2YXIgamQgPSBkYXRlLnRvSkQoKSArIG9mZnNldCAqIChwZXJpb2QgPT09ICd3JyA/IHRoaXMuZGF5c0luV2VlaygpIDogMSk7XG5cdFx0XHRcdHZhciBkID0gZGF0ZS5jYWxlbmRhcigpLmZyb21KRChqZCk7XG5cdFx0XHRcdHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLTtcblx0XHRcdFx0cmV0dXJuIFtkLnllYXIoKSwgZC5tb250aCgpLCBkLmRheSgpXTtcblx0XHRcdH1cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHZhciB5ID0gZGF0ZS55ZWFyKCkgKyAocGVyaW9kID09PSAneScgPyBvZmZzZXQgOiAwKTtcblx0XHRcdFx0dmFyIG0gPSBkYXRlLm1vbnRoT2ZZZWFyKCkgKyAocGVyaW9kID09PSAnbScgPyBvZmZzZXQgOiAwKTtcblx0XHRcdFx0dmFyIGQgPSBkYXRlLmRheSgpOy8vICsgKHBlcmlvZCA9PT0gJ2QnID8gb2Zmc2V0IDogMCkgK1xuXHRcdFx0XHRcdC8vKHBlcmlvZCA9PT0gJ3cnID8gb2Zmc2V0ICogdGhpcy5kYXlzSW5XZWVrKCkgOiAwKTtcblx0XHRcdFx0dmFyIHJlc3luY1llYXJNb250aCA9IGZ1bmN0aW9uKGNhbGVuZGFyKSB7XG5cdFx0XHRcdFx0d2hpbGUgKG0gPCBjYWxlbmRhci5taW5Nb250aCkge1xuXHRcdFx0XHRcdFx0eS0tO1xuXHRcdFx0XHRcdFx0bSArPSBjYWxlbmRhci5tb250aHNJblllYXIoeSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciB5ZWFyTW9udGhzID0gY2FsZW5kYXIubW9udGhzSW5ZZWFyKHkpO1xuXHRcdFx0XHRcdHdoaWxlIChtID4geWVhck1vbnRocyAtIDEgKyBjYWxlbmRhci5taW5Nb250aCkge1xuXHRcdFx0XHRcdFx0eSsrO1xuXHRcdFx0XHRcdFx0bSAtPSB5ZWFyTW9udGhzO1xuXHRcdFx0XHRcdFx0eWVhck1vbnRocyA9IGNhbGVuZGFyLm1vbnRoc0luWWVhcih5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChwZXJpb2QgPT09ICd5Jykge1xuXHRcdFx0XHRcdGlmIChkYXRlLm1vbnRoKCkgIT09IHRoaXMuZnJvbU1vbnRoT2ZZZWFyKHksIG0pKSB7IC8vIEhlYnJld1xuXHRcdFx0XHRcdFx0bSA9IHRoaXMubmV3RGF0ZSh5LCBkYXRlLm1vbnRoKCksIHRoaXMubWluRGF5KS5tb250aE9mWWVhcigpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtID0gTWF0aC5taW4obSwgdGhpcy5tb250aHNJblllYXIoeSkpO1xuXHRcdFx0XHRcdGQgPSBNYXRoLm1pbihkLCB0aGlzLmRheXNJbk1vbnRoKHksIHRoaXMuZnJvbU1vbnRoT2ZZZWFyKHksIG0pKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAocGVyaW9kID09PSAnbScpIHtcblx0XHRcdFx0XHRyZXN5bmNZZWFyTW9udGgodGhpcyk7XG5cdFx0XHRcdFx0ZCA9IE1hdGgubWluKGQsIHRoaXMuZGF5c0luTW9udGgoeSwgdGhpcy5mcm9tTW9udGhPZlllYXIoeSwgbSkpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgeW1kID0gW3ksIHRoaXMuZnJvbU1vbnRoT2ZZZWFyKHksIG0pLCBkXTtcblx0XHRcdFx0dGhpcy5fdmFsaWRhdGVMZXZlbC0tO1xuXHRcdFx0XHRyZXR1cm4geW1kO1xuXHRcdFx0fVxuXHRcdFx0Y2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhpcy5fdmFsaWRhdGVMZXZlbC0tO1xuXHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogQ29ycmVjdCBhIGNhbmRpZGF0ZSBkYXRlIGFmdGVyIGFkZGluZyBwZXJpb2QocykgdG8gYSBkYXRlLlxuXHRcdFx0SGFuZGxlIG5vIHllYXIgemVybyBpZiBuZWNlc3NhcnkuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgc3RhcnRpbmcgZGF0ZS5cblx0XHRcdEBwYXJhbSB5bWQge251bWJlcltdfSBUaGUgYWRkZWQgZGF0ZS5cblx0XHRcdEBwYXJhbSBvZmZzZXQge251bWJlcn0gVGhlIG51bWJlciBvZiBwZXJpb2RzIHRvIGFkanVzdCBieS5cblx0XHRcdEBwYXJhbSBwZXJpb2Qge3N0cmluZ30gT25lIG9mICd5JyBmb3IgeWVhciwgJ20nIGZvciBtb250aCwgJ3cnIGZvciB3ZWVrLCAnZCcgZm9yIGRheS5cblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgdXBkYXRlZCBkYXRlLiAqL1xuXHRcdF9jb3JyZWN0QWRkOiBmdW5jdGlvbihkYXRlLCB5bWQsIG9mZnNldCwgcGVyaW9kKSB7XG5cdFx0XHRpZiAoIXRoaXMuaGFzWWVhclplcm8gJiYgKHBlcmlvZCA9PT0gJ3knIHx8IHBlcmlvZCA9PT0gJ20nKSkge1xuXHRcdFx0XHRpZiAoeW1kWzBdID09PSAwIHx8IC8vIEluIHllYXIgemVyb1xuXHRcdFx0XHRcdFx0KGRhdGUueWVhcigpID4gMCkgIT09ICh5bWRbMF0gPiAwKSkgeyAvLyBDcm9zc2VkIHllYXIgemVyb1xuXHRcdFx0XHRcdHZhciBhZGogPSB7eTogWzEsIDEsICd5J10sIG06IFsxLCB0aGlzLm1vbnRoc0luWWVhcigtMSksICdtJ10sXG5cdFx0XHRcdFx0XHR3OiBbdGhpcy5kYXlzSW5XZWVrKCksIHRoaXMuZGF5c0luWWVhcigtMSksICdkJ10sXG5cdFx0XHRcdFx0XHRkOiBbMSwgdGhpcy5kYXlzSW5ZZWFyKC0xKSwgJ2QnXX1bcGVyaW9kXTtcblx0XHRcdFx0XHR2YXIgZGlyID0gKG9mZnNldCA8IDAgPyAtMSA6ICsxKTtcblx0XHRcdFx0XHR5bWQgPSB0aGlzLl9hZGQoZGF0ZSwgb2Zmc2V0ICogYWRqWzBdICsgZGlyICogYWRqWzFdLCBhZGpbMl0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGF0ZS5kYXRlKHltZFswXSwgeW1kWzFdLCB5bWRbMl0pO1xuXHRcdH0sXG5cblx0XHQvKiogU2V0IGEgcG9ydGlvbiBvZiB0aGUgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZX0gVGhlIHN0YXJ0aW5nIGRhdGUuXG5cdFx0XHRAcGFyYW0gdmFsdWUge251bWJlcn0gVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIHBlcmlvZC5cblx0XHRcdEBwYXJhbSBwZXJpb2Qge3N0cmluZ30gT25lIG9mICd5JyBmb3IgeWVhciwgJ20nIGZvciBtb250aCwgJ2QnIGZvciBkYXkuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIHVwZGF0ZWQgZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0c2V0OiBmdW5jdGlvbihkYXRlLCB2YWx1ZSwgcGVyaW9kKSB7XG5cdFx0XHR0aGlzLl92YWxpZGF0ZShkYXRlLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSk7XG5cdFx0XHR2YXIgeSA9IChwZXJpb2QgPT09ICd5JyA/IHZhbHVlIDogZGF0ZS55ZWFyKCkpO1xuXHRcdFx0dmFyIG0gPSAocGVyaW9kID09PSAnbScgPyB2YWx1ZSA6IGRhdGUubW9udGgoKSk7XG5cdFx0XHR2YXIgZCA9IChwZXJpb2QgPT09ICdkJyA/IHZhbHVlIDogZGF0ZS5kYXkoKSk7XG5cdFx0XHRpZiAocGVyaW9kID09PSAneScgfHwgcGVyaW9kID09PSAnbScpIHtcblx0XHRcdFx0ZCA9IE1hdGgubWluKGQsIHRoaXMuZGF5c0luTW9udGgoeSwgbSkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRhdGUuZGF0ZSh5LCBtLCBkKTtcblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIGEgZGF0ZSBpcyB2YWxpZCBmb3IgdGhpcyBjYWxlbmRhci5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gbW9udGgge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gZGF5IHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGEgdmFsaWQgZGF0ZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC4gKi9cblx0XHRpc1ZhbGlkOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHR0aGlzLl92YWxpZGF0ZUxldmVsKys7XG5cdFx0XHR2YXIgdmFsaWQgPSAodGhpcy5oYXNZZWFyWmVybyB8fCB5ZWFyICE9PSAwKTtcblx0XHRcdGlmICh2YWxpZCkge1xuXHRcdFx0XHR2YXIgZGF0ZSA9IHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgdGhpcy5taW5EYXkpO1xuXHRcdFx0XHR2YWxpZCA9IChtb250aCA+PSB0aGlzLm1pbk1vbnRoICYmIG1vbnRoIC0gdGhpcy5taW5Nb250aCA8IHRoaXMubW9udGhzSW5ZZWFyKGRhdGUpKSAmJlxuXHRcdFx0XHRcdChkYXkgPj0gdGhpcy5taW5EYXkgJiYgZGF5IC0gdGhpcy5taW5EYXkgPCB0aGlzLmRheXNJbk1vbnRoKGRhdGUpKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLTtcblx0XHRcdHJldHVybiB2YWxpZDtcblx0XHR9LFxuXG5cdFx0LyoqIENvbnZlcnQgdGhlIGRhdGUgdG8gYSBzdGFuZGFyZCAoR3JlZ29yaWFuKSBKYXZhU2NyaXB0IERhdGUuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb252ZXJ0IG9yIHRoZSB5ZWFyIHRvIGNvbnZlcnQuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gY29udmVydC5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGNvbnZlcnQuXG5cdFx0XHRAcmV0dXJuIHtEYXRlfSBUaGUgZXF1aXZhbGVudCBKYXZhU2NyaXB0IGRhdGUuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdHRvSlNEYXRlOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksXG5cdFx0XHRcdCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZERhdGUpO1xuXHRcdFx0cmV0dXJuICQuY2FsZW5kYXJzLmluc3RhbmNlKCkuZnJvbUpEKHRoaXMudG9KRChkYXRlKSkudG9KU0RhdGUoKTtcblx0XHR9LFxuXG5cdFx0LyoqIENvbnZlcnQgdGhlIGRhdGUgZnJvbSBhIHN0YW5kYXJkIChHcmVnb3JpYW4pIEphdmFTY3JpcHQgRGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSBqc2Qge0RhdGV9IFRoZSBKYXZhU2NyaXB0IGRhdGUuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIGVxdWl2YWxlbnQgY2FsZW5kYXIgZGF0ZS4gKi9cblx0XHRmcm9tSlNEYXRlOiBmdW5jdGlvbihqc2QpIHtcblx0XHRcdHJldHVybiB0aGlzLmZyb21KRCgkLmNhbGVuZGFycy5pbnN0YW5jZSgpLmZyb21KU0RhdGUoanNkKS50b0pEKCkpO1xuXHRcdH0sXG5cblx0XHQvKiogQ2hlY2sgdGhhdCBhIGNhbmRpZGF0ZSBkYXRlIGlzIGZyb20gdGhlIHNhbWUgY2FsZW5kYXIgYW5kIGlzIHZhbGlkLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIHZhbGlkYXRlIG9yIHRoZSB5ZWFyIHRvIHZhbGlkYXRlLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIHZhbGlkYXRlLlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gdmFsaWRhdGUuXG5cdFx0XHRAcGFyYW0gZXJyb3Ige3N0cmluZ30gUnJyb3IgbWVzc2FnZSBpZiBpbnZhbGlkLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBkaWZmZXJlbnQgY2FsZW5kYXJzIHVzZWQgb3IgaW52YWxpZCBkYXRlLiAqL1xuXHRcdF92YWxpZGF0ZTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSwgZXJyb3IpIHtcblx0XHRcdGlmICh5ZWFyLnllYXIpIHtcblx0XHRcdFx0aWYgKHRoaXMuX3ZhbGlkYXRlTGV2ZWwgPT09IDAgJiYgdGhpcy5uYW1lICE9PSB5ZWFyLmNhbGVuZGFyKCkubmFtZSkge1xuXHRcdFx0XHRcdHRocm93ICgkLmNhbGVuZGFycy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnMgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5kaWZmZXJlbnRDYWxlbmRhcnMpLlxuXHRcdFx0XHRcdFx0cmVwbGFjZSgvXFx7MFxcfS8sIHRoaXMubG9jYWwubmFtZSkucmVwbGFjZSgvXFx7MVxcfS8sIHllYXIuY2FsZW5kYXIoKS5sb2NhbC5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4geWVhcjtcblx0XHRcdH1cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKztcblx0XHRcdFx0aWYgKHRoaXMuX3ZhbGlkYXRlTGV2ZWwgPT09IDEgJiYgIXRoaXMuaXNWYWxpZCh5ZWFyLCBtb250aCwgZGF5KSkge1xuXHRcdFx0XHRcdHRocm93IGVycm9yLnJlcGxhY2UoL1xcezBcXH0vLCB0aGlzLmxvY2FsLm5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBkYXRlID0gdGhpcy5uZXdEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xuXHRcdFx0XHR0aGlzLl92YWxpZGF0ZUxldmVsLS07XG5cdFx0XHRcdHJldHVybiBkYXRlO1xuXHRcdFx0fVxuXHRcdFx0Y2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhpcy5fdmFsaWRhdGVMZXZlbC0tO1xuXHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0LyoqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBQcm9sZXB0aWMgR3JlZ29yaWFuIENhbGVuZGFyLlxuXHRcdFNlZSA8YSBocmVmPVwiOmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JlZ29yaWFuX2NhbGVuZGFyXCI+aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HcmVnb3JpYW5fY2FsZW5kYXI8L2E+XG5cdFx0YW5kIDxhIGhyZWY9XCJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Byb2xlcHRpY19HcmVnb3JpYW5fY2FsZW5kYXJcIj5odHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Byb2xlcHRpY19HcmVnb3JpYW5fY2FsZW5kYXI8L2E+LlxuXHRcdEBjbGFzcyBHcmVnb3JpYW5DYWxlbmRhclxuXHRcdEBhdWdtZW50cyBCYXNlQ2FsZW5kYXJcblx0XHRAcGFyYW0gW2xhbmd1YWdlPScnXSB7c3RyaW5nfSBUaGUgbGFuZ3VhZ2UgY29kZSAoZGVmYXVsdCBFbmdsaXNoKSBmb3IgbG9jYWxpc2F0aW9uLiAqL1xuXHRmdW5jdGlvbiBHcmVnb3JpYW5DYWxlbmRhcihsYW5ndWFnZSkge1xuXHRcdHRoaXMubG9jYWwgPSB0aGlzLnJlZ2lvbmFsT3B0aW9uc1tsYW5ndWFnZV0gfHwgdGhpcy5yZWdpb25hbE9wdGlvbnNbJyddO1xuXHR9XG5cblx0R3JlZ29yaWFuQ2FsZW5kYXIucHJvdG90eXBlID0gbmV3IEJhc2VDYWxlbmRhcjtcblxuXHQkLmV4dGVuZChHcmVnb3JpYW5DYWxlbmRhci5wcm90b3R5cGUsIHtcblx0XHQvKiogVGhlIGNhbGVuZGFyIG5hbWUuXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXIgKi9cblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHQgLyoqIEp1bGlhbiBkYXRlIG9mIHN0YXJ0IG9mIEdyZWdvcmlhbiBlcG9jaDogMSBKYW51YXJ5IDAwMDEgQ0UuXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXIgKi9cblx0XHRqZEVwb2NoOiAxNzIxNDI1LjUsXG5cdFx0IC8qKiBEYXlzIHBlciBtb250aCBpbiBhIGNvbW1vbiB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyICovXG5cdFx0ZGF5c1Blck1vbnRoOiBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0sXG5cdFx0IC8qKiA8Y29kZT50cnVlPC9jb2RlPiBpZiBoYXMgYSB5ZWFyIHplcm8sIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXIgKi9cblx0XHRoYXNZZWFyWmVybzogZmFsc2UsXG5cdFx0LyoqIFRoZSBtaW5pbXVtIG1vbnRoIG51bWJlci5cblx0XHRcdEBtZW1iZXJvZiBHcmVnb3JpYW5DYWxlbmRhciAqL1xuXHRcdG1pbk1vbnRoOiAxLFxuXHRcdC8qKiBUaGUgZmlyc3QgbW9udGggaW4gdGhlIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXIgKi9cblx0XHRmaXJzdE1vbnRoOiAxLFxuXHRcdCAvKiogVGhlIG1pbmltdW0gZGF5IG51bWJlci5cblx0XHRcdEBtZW1iZXJvZiBHcmVnb3JpYW5DYWxlbmRhciAqL1xuXHRcdG1pbkRheTogMSxcblxuXHRcdC8qKiBMb2NhbGlzYXRpb25zIGZvciB0aGUgcGx1Z2luLlxuXHRcdFx0RW50cmllcyBhcmUgb2JqZWN0cyBpbmRleGVkIGJ5IHRoZSBsYW5ndWFnZSBjb2RlICgnJyBiZWluZyB0aGUgZGVmYXVsdCBVUy9FbmdsaXNoKS5cblx0XHRcdEVhY2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMuXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXJcblx0XHRcdEBwcm9wZXJ0eSBuYW1lIHtzdHJpbmd9IFRoZSBjYWxlbmRhciBuYW1lLlxuXHRcdFx0QHByb3BlcnR5IGVwb2NocyB7c3RyaW5nW119IFRoZSBlcG9jaCBuYW1lcy5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNNaW4ge3N0cmluZ1tdfSBUaGUgbWluaW1hbCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cblx0XHRcdEBwcm9wZXJ0eSBkYXRlRm9ybWF0IHtzdHJpbmd9IFRoZSBkYXRlIGZvcm1hdCBmb3IgdGhpcyBjYWxlbmRhci5cblx0XHRcdFx0XHRTZWUgdGhlIG9wdGlvbnMgb24gPGEgaHJlZj1cIkJhc2VDYWxlbmRhci5odG1sI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4gZm9yIGRldGFpbHMuXG5cdFx0XHRAcHJvcGVydHkgZmlyc3REYXkge251bWJlcn0gVGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBzdGFydGluZyBhdCAwLlxuXHRcdFx0QHByb3BlcnR5IGlzUlRMIHtudW1iZXJ9IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgbG9jYWxpc2F0aW9uIHJlYWRzIHJpZ2h0LXRvLWxlZnQuICovXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7IC8vIExvY2FsaXNhdGlvbnNcblx0XHRcdCcnOiB7XG5cdFx0XHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdFx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0XHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsXG5cdFx0XHRcdCdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddLFxuXHRcdFx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXSxcblx0XHRcdFx0ZGF5TmFtZXM6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXSxcblx0XHRcdFx0ZGF5TmFtZXNTaG9ydDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcblx0XHRcdFx0ZGF5TmFtZXNNaW46IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcblx0XHRcdFx0ZGF0ZUZvcm1hdDogJ21tL2RkL3l5eXknLFxuXHRcdFx0XHRmaXJzdERheTogMCxcblx0XHRcdFx0aXNSVEw6IGZhbHNlXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGluIGEgbGVhcCB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGlzIGEgbGVhcCB5ZWFyLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRsZWFwWWVhcjogZnVuY3Rpb24oeWVhcikge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkWWVhcik7XG5cdFx0XHR2YXIgeWVhciA9IGRhdGUueWVhcigpICsgKGRhdGUueWVhcigpIDwgMCA/IDEgOiAwKTsgLy8gTm8geWVhciB6ZXJvXG5cdFx0XHRyZXR1cm4geWVhciAlIDQgPT09IDAgJiYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCk7XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgdGhlIHdlZWsgb2YgdGhlIHllYXIgZm9yIGEgZGF0ZSAtIElTTyA4NjAxLlxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSB3ZWVrIG9mIHRoZSB5ZWFyLCBzdGFydGluZyBmcm9tIDEuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdHdlZWtPZlllYXI6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdC8vIEZpbmQgVGh1cnNkYXkgb2YgdGhpcyB3ZWVrIHN0YXJ0aW5nIG9uIE1vbmRheVxuXHRcdFx0dmFyIGNoZWNrRGF0ZSA9IHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcblx0XHRcdGNoZWNrRGF0ZS5hZGQoNCAtIChjaGVja0RhdGUuZGF5T2ZXZWVrKCkgfHwgNyksICdkJyk7XG5cdFx0XHRyZXR1cm4gTWF0aC5mbG9vcigoY2hlY2tEYXRlLmRheU9mWWVhcigpIC0gMSkgLyA3KSArIDE7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aC5cblx0XHRcdEBtZW1iZXJvZiBHcmVnb3JpYW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciBvZiB0aGUgbW9udGguXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGguXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIG1vbnRoLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIG1vbnRoL3llYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRkYXlzSW5Nb250aDogZnVuY3Rpb24oeWVhciwgbW9udGgpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIHRoaXMubWluRGF5LFxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkTW9udGggfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkTW9udGgpO1xuXHRcdFx0cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW2RhdGUubW9udGgoKSAtIDFdICtcblx0XHRcdFx0KGRhdGUubW9udGgoKSA9PT0gMiAmJiB0aGlzLmxlYXBZZWFyKGRhdGUueWVhcigpKSA/IDEgOiAwKTtcblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBhIHdlZWsgZGF5LlxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBhIHdlZWsgZGF5LCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHR3ZWVrRGF5OiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHRyZXR1cm4gKHRoaXMuZGF5T2ZXZWVrKHllYXIsIG1vbnRoLCBkYXkpIHx8IDcpIDwgNjtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBKdWxpYW4gZGF0ZSBlcXVpdmFsZW50IGZvciB0aGlzIGRhdGUsXG5cdFx0XHRpLmUuIGRheXMgc2luY2UgSmFudWFyeSAxLCA0NzEzIEJDRSBHcmVlbndpY2ggbm9vbi5cblx0XHRcdEBtZW1iZXJvZiBHcmVnb3JpYW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gY29udmVydCBvciB0aGUgeWVhciB0byBjb252ZXJ0LlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGNvbnZlcnQuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBjb252ZXJ0LlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZXF1aXZhbGVudCBKdWxpYW4gZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0dG9KRDogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgZGF5LFxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcblx0XHRcdHllYXIgPSBkYXRlLnllYXIoKTtcblx0XHRcdG1vbnRoID0gZGF0ZS5tb250aCgpO1xuXHRcdFx0ZGF5ID0gZGF0ZS5kYXkoKTtcblx0XHRcdGlmICh5ZWFyIDwgMCkgeyB5ZWFyKys7IH0gLy8gTm8geWVhciB6ZXJvXG5cdFx0XHQvLyBKZWFuIE1lZXVzIGFsZ29yaXRobSwgXCJBc3Ryb25vbWljYWwgQWxnb3JpdGhtc1wiLCAxOTkxXG5cdFx0XHRpZiAobW9udGggPCAzKSB7XG5cdFx0XHRcdG1vbnRoICs9IDEyO1xuXHRcdFx0XHR5ZWFyLS07XG5cdFx0XHR9XG5cdFx0XHR2YXIgYSA9IE1hdGguZmxvb3IoeWVhciAvIDEwMCk7XG5cdFx0XHR2YXIgYiA9IDIgLSBhICsgTWF0aC5mbG9vcihhIC8gNCk7XG5cdFx0XHRyZXR1cm4gTWF0aC5mbG9vcigzNjUuMjUgKiAoeWVhciArIDQ3MTYpKSArXG5cdFx0XHRcdE1hdGguZmxvb3IoMzAuNjAwMSAqIChtb250aCArIDEpKSArIGRheSArIGIgLSAxNTI0LjU7XG5cdFx0fSxcblxuXHRcdC8qKiBDcmVhdGUgYSBuZXcgZGF0ZSBmcm9tIGEgSnVsaWFuIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSBqZCB7bnVtYmVyfSBUaGUgSnVsaWFuIGRhdGUgdG8gY29udmVydC5cblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgZXF1aXZhbGVudCBkYXRlLiAqL1xuXHRcdGZyb21KRDogZnVuY3Rpb24oamQpIHtcblx0XHRcdC8vIEplYW4gTWVldXMgYWxnb3JpdGhtLCBcIkFzdHJvbm9taWNhbCBBbGdvcml0aG1zXCIsIDE5OTFcblx0XHRcdHZhciB6ID0gTWF0aC5mbG9vcihqZCArIDAuNSk7XG5cdFx0XHR2YXIgYSA9IE1hdGguZmxvb3IoKHogLSAxODY3MjE2LjI1KSAvIDM2NTI0LjI1KTtcblx0XHRcdGEgPSB6ICsgMSArIGEgLSBNYXRoLmZsb29yKGEgLyA0KTtcblx0XHRcdHZhciBiID0gYSArIDE1MjQ7XG5cdFx0XHR2YXIgYyA9IE1hdGguZmxvb3IoKGIgLSAxMjIuMSkgLyAzNjUuMjUpO1xuXHRcdFx0dmFyIGQgPSBNYXRoLmZsb29yKDM2NS4yNSAqIGMpO1xuXHRcdFx0dmFyIGUgPSBNYXRoLmZsb29yKChiIC0gZCkgLyAzMC42MDAxKTtcblx0XHRcdHZhciBkYXkgPSBiIC0gZCAtIE1hdGguZmxvb3IoZSAqIDMwLjYwMDEpO1xuXHRcdFx0dmFyIG1vbnRoID0gZSAtIChlID4gMTMuNSA/IDEzIDogMSk7XG5cdFx0XHR2YXIgeWVhciA9IGMgLSAobW9udGggPiAyLjUgPyA0NzE2IDogNDcxNSk7XG5cdFx0XHRpZiAoeWVhciA8PSAwKSB7IHllYXItLTsgfSAvLyBObyB5ZWFyIHplcm9cblx0XHRcdHJldHVybiB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSk7XG5cdFx0fSxcblxuXHRcdC8qKiBDb252ZXJ0IHRoaXMgZGF0ZSB0byBhIHN0YW5kYXJkIChHcmVnb3JpYW4pIEphdmFTY3JpcHQgRGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBHcmVnb3JpYW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gY29udmVydCBvciB0aGUgeWVhciB0byBjb252ZXJ0LlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGNvbnZlcnQuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBjb252ZXJ0LlxuXHRcdFx0QHJldHVybiB7RGF0ZX0gVGhlIGVxdWl2YWxlbnQgSmF2YVNjcmlwdCBkYXRlLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHR0b0pTRGF0ZTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgZGF5LFxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcblx0XHRcdHZhciBqc2QgPSBuZXcgRGF0ZShkYXRlLnllYXIoKSwgZGF0ZS5tb250aCgpIC0gMSwgZGF0ZS5kYXkoKSk7XG5cdFx0XHRqc2Quc2V0SG91cnMoMCk7XG5cdFx0XHRqc2Quc2V0TWludXRlcygwKTtcblx0XHRcdGpzZC5zZXRTZWNvbmRzKDApO1xuXHRcdFx0anNkLnNldE1pbGxpc2Vjb25kcygwKTtcblx0XHRcdC8vIEhvdXJzIG1heSBiZSBub24temVybyBvbiBkYXlsaWdodCBzYXZpbmcgY3V0LW92ZXI6XG5cdFx0XHQvLyA+IDEyIHdoZW4gbWlkbmlnaHQgY2hhbmdlb3ZlciwgYnV0IHRoZW4gY2Fubm90IGdlbmVyYXRlXG5cdFx0XHQvLyBtaWRuaWdodCBkYXRldGltZSwgc28ganVtcCB0byAxQU0sIG90aGVyd2lzZSByZXNldC5cblx0XHRcdGpzZC5zZXRIb3Vycyhqc2QuZ2V0SG91cnMoKSA+IDEyID8ganNkLmdldEhvdXJzKCkgKyAyIDogMCk7XG5cdFx0XHRyZXR1cm4ganNkO1xuXHRcdH0sXG5cblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgZnJvbSBhIHN0YW5kYXJkIChHcmVnb3JpYW4pIEphdmFTY3JpcHQgRGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBHcmVnb3JpYW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIGpzZCB7RGF0ZX0gVGhlIEphdmFTY3JpcHQgZGF0ZSB0byBjb252ZXJ0LlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXG5cdFx0ZnJvbUpTRGF0ZTogZnVuY3Rpb24oanNkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5uZXdEYXRlKGpzZC5nZXRGdWxsWWVhcigpLCBqc2QuZ2V0TW9udGgoKSArIDEsIGpzZC5nZXREYXRlKCkpO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gU2luZ2xldG9uIG1hbmFnZXJcblx0JC5jYWxlbmRhcnMgPSBuZXcgQ2FsZW5kYXJzKCk7XG5cblx0Ly8gRGF0ZSB0ZW1wbGF0ZVxuXHQkLmNhbGVuZGFycy5jZGF0ZSA9IENEYXRlO1xuXG5cdC8vIEJhc2UgY2FsZW5kYXIgdGVtcGxhdGVcblx0JC5jYWxlbmRhcnMuYmFzZUNhbGVuZGFyID0gQmFzZUNhbGVuZGFyO1xuXG5cdC8vIEdyZWdvcmlhbiBjYWxlbmRhciBpbXBsZW1lbnRhdGlvblxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuID0gR3JlZ29yaWFuQ2FsZW5kYXI7XG5cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIENhbGVuZGFycyBmb3IgalF1ZXJ5IHYyLjAuMS5cclxuICAgV3JpdHRlbiBieSBLZWl0aCBXb29kIChrYndvb2R7YXR9aWluZXQuY29tLmF1KSBBdWd1c3QgMjAwOS5cclxuICAgQXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvbGljZW5jZS5odG1sKSBsaWNlbnNlLiBcclxuICAgUGxlYXNlIGF0dHJpYnV0ZSB0aGUgYXV0aG9yIGlmIHlvdSB1c2UgaXQuICovXHJcblxyXG4oZnVuY3Rpb24oJCkgeyAvLyBIaWRlIHNjb3BlLCBubyAkIGNvbmZsaWN0XHJcblxyXG5cdGZ1bmN0aW9uIENhbGVuZGFycygpIHtcclxuXHRcdHRoaXMucmVnaW9uYWxPcHRpb25zID0gW107XHJcblx0XHR0aGlzLnJlZ2lvbmFsT3B0aW9uc1snJ10gPSB7XHJcblx0XHRcdGludmFsaWRDYWxlbmRhcjogJ0NhbGVuZGFyIHswfSBub3QgZm91bmQnLFxyXG5cdFx0XHRpbnZhbGlkRGF0ZTogJ0ludmFsaWQgezB9IGRhdGUnLFxyXG5cdFx0XHRpbnZhbGlkTW9udGg6ICdJbnZhbGlkIHswfSBtb250aCcsXHJcblx0XHRcdGludmFsaWRZZWFyOiAnSW52YWxpZCB7MH0geWVhcicsXHJcblx0XHRcdGRpZmZlcmVudENhbGVuZGFyczogJ0Nhbm5vdCBtaXggezB9IGFuZCB7MX0gZGF0ZXMnXHJcblx0XHR9O1xyXG5cdFx0dGhpcy5sb2NhbCA9IHRoaXMucmVnaW9uYWxPcHRpb25zWycnXTtcclxuXHRcdHRoaXMuY2FsZW5kYXJzID0ge307XHJcblx0XHR0aGlzLl9sb2NhbENhbHMgPSB7fTtcclxuXHR9XHJcblxyXG5cdC8qKiBDcmVhdGUgdGhlIGNhbGVuZGFycyBwbHVnaW4uXHJcblx0XHQ8cD5Qcm92aWRlcyBzdXBwb3J0IGZvciB2YXJpb3VzIHdvcmxkIGNhbGVuZGFycyBpbiBhIGNvbnNpc3RlbnQgbWFubmVyLjwvcD5cclxuXHQgXHRAY2xhc3MgQ2FsZW5kYXJzXHJcblx0XHRAZXhhbXBsZSAkLmNhbGVuZGFycy5pbnN0YW5jZSgnanVsaWFuJykubmV3RGF0ZSgyMDE0LCAxMiwgMjUpICovXHJcblx0JC5leHRlbmQoQ2FsZW5kYXJzLnByb3RvdHlwZSwge1xyXG5cclxuXHRcdC8qKiBPYnRhaW4gYSBjYWxlbmRhciBpbXBsZW1lbnRhdGlvbiBhbmQgbG9jYWxpc2F0aW9uLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzXHJcblx0XHRcdEBwYXJhbSBbbmFtZT0nZ3JlZ29yaWFuJ10ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyLCBlLmcuICdncmVnb3JpYW4nLCAncGVyc2lhbicsICdpc2xhbWljJy5cclxuXHRcdFx0QHBhcmFtIFtsYW5ndWFnZT0nJ10ge3N0cmluZ30gVGhlIGxhbmd1YWdlIGNvZGUgdG8gdXNlIGZvciBsb2NhbGlzYXRpb24gKGRlZmF1bHQgaXMgRW5nbGlzaCkuXHJcblx0XHRcdEByZXR1cm4ge0NhbGVuZGFyfSBUaGUgY2FsZW5kYXIgYW5kIGxvY2FsaXNhdGlvbi5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBjYWxlbmRhciBub3QgZm91bmQuICovXHJcblx0XHRpbnN0YW5jZTogZnVuY3Rpb24obmFtZSwgbGFuZ3VhZ2UpIHtcclxuXHRcdFx0bmFtZSA9IChuYW1lIHx8ICdncmVnb3JpYW4nKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRsYW5ndWFnZSA9IGxhbmd1YWdlIHx8ICcnO1xyXG5cdFx0XHR2YXIgY2FsID0gdGhpcy5fbG9jYWxDYWxzW25hbWUgKyAnLScgKyBsYW5ndWFnZV07XHJcblx0XHRcdGlmICghY2FsICYmIHRoaXMuY2FsZW5kYXJzW25hbWVdKSB7XHJcblx0XHRcdFx0Y2FsID0gbmV3IHRoaXMuY2FsZW5kYXJzW25hbWVdKGxhbmd1YWdlKTtcclxuXHRcdFx0XHR0aGlzLl9sb2NhbENhbHNbbmFtZSArICctJyArIGxhbmd1YWdlXSA9IGNhbDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIWNhbCkge1xyXG5cdFx0XHRcdHRocm93ICh0aGlzLmxvY2FsLmludmFsaWRDYWxlbmRhciB8fCB0aGlzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZENhbGVuZGFyKS5cclxuXHRcdFx0XHRcdHJlcGxhY2UoL1xcezBcXH0vLCBuYW1lKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gY2FsO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgLSBmb3IgdG9kYXkgaWYgbm8gb3RoZXIgcGFyYW1ldGVycyBnaXZlbi5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1xyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb3B5IG9yIHRoZSB5ZWFyIGZvciB0aGUgZGF0ZS5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIGZvciB0aGUgZGF0ZS5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgZm9yIHRoZSBkYXRlLlxyXG5cdFx0XHRAcGFyYW0gW2NhbGVuZGFyPSdncmVnb3JpYW4nXSB7QmFzZUNhbGVuZGFyfHN0cmluZ30gVGhlIHVuZGVybHlpbmcgY2FsZW5kYXIgb3IgdGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyLlxyXG5cdFx0XHRAcGFyYW0gW2xhbmd1YWdlPScnXSB7c3RyaW5nfSBUaGUgbGFuZ3VhZ2UgdG8gdXNlIGZvciBsb2NhbGlzYXRpb24gKGRlZmF1bHQgRW5nbGlzaCkuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgbmV3IGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlLiAqL1xyXG5cdFx0bmV3RGF0ZTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSwgY2FsZW5kYXIsIGxhbmd1YWdlKSB7XHJcblx0XHRcdGNhbGVuZGFyID0gKHllYXIgIT0gbnVsbCAmJiB5ZWFyLnllYXIgPyB5ZWFyLmNhbGVuZGFyKCkgOiAodHlwZW9mIGNhbGVuZGFyID09PSAnc3RyaW5nJyA/XHJcblx0XHRcdFx0dGhpcy5pbnN0YW5jZShjYWxlbmRhciwgbGFuZ3VhZ2UpIDogY2FsZW5kYXIpKSB8fCB0aGlzLmluc3RhbmNlKCk7XHJcblx0XHRcdHJldHVybiBjYWxlbmRhci5uZXdEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHQvKiogR2VuZXJpYyBkYXRlLCBiYXNlZCBvbiBhIHBhcnRpY3VsYXIgY2FsZW5kYXIuXHJcblx0XHRAY2xhc3MgQ0RhdGVcclxuXHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgdW5kZXJseWluZyBjYWxlbmRhciBpbXBsZW1lbnRhdGlvbi5cclxuXHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSB5ZWFyIGZvciB0aGlzIGRhdGUuXHJcblx0XHRAcGFyYW0gbW9udGgge251bWJlcn0gVGhlIG1vbnRoIGZvciB0aGlzIGRhdGUuXHJcblx0XHRAcGFyYW0gZGF5IHtudW1iZXJ9IFRoZSBkYXkgZm9yIHRoaXMgZGF0ZS5cclxuXHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgZGF0ZSBvYmplY3QuXHJcblx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZS4gKi9cclxuXHRmdW5jdGlvbiBDRGF0ZShjYWxlbmRhciwgeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0dGhpcy5fY2FsZW5kYXIgPSBjYWxlbmRhcjtcclxuXHRcdHRoaXMuX3llYXIgPSB5ZWFyO1xyXG5cdFx0dGhpcy5fbW9udGggPSBtb250aDtcclxuXHRcdHRoaXMuX2RheSA9IGRheTtcclxuXHRcdGlmICh0aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbCA9PT0gMCAmJlxyXG5cdFx0XHRcdCF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHRoaXMuX3llYXIsIHRoaXMuX21vbnRoLCB0aGlzLl9kYXkpKSB7XHJcblx0XHRcdHRocm93ICgkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKS5cclxuXHRcdFx0XHRyZXBsYWNlKC9cXHswXFx9LywgdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKiogUGFkIGEgbnVtZXJpYyB2YWx1ZSB3aXRoIGxlYWRpbmcgemVyb2VzLlxyXG5cdFx0QHByaXZhdGVcclxuXHRcdEBwYXJhbSB2YWx1ZSB7bnVtYmVyfSBUaGUgbnVtYmVyIHRvIGZvcm1hdC5cclxuXHRcdEBwYXJhbSBsZW5ndGgge251bWJlcn0gVGhlIG1pbmltdW0gbGVuZ3RoLlxyXG5cdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIG51bWJlci4gKi9cclxuXHRmdW5jdGlvbiBwYWQodmFsdWUsIGxlbmd0aCkge1xyXG5cdFx0dmFsdWUgPSAnJyArIHZhbHVlO1xyXG5cdFx0cmV0dXJuICcwMDAwMDAnLnN1YnN0cmluZygwLCBsZW5ndGggLSB2YWx1ZS5sZW5ndGgpICsgdmFsdWU7XHJcblx0fVxyXG5cclxuXHQkLmV4dGVuZChDRGF0ZS5wcm90b3R5cGUsIHtcclxuXHJcblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcGFyYW0gW3llYXJdIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvcHkgb3IgdGhlIHllYXIgZm9yIHRoZSBkYXRlIChkZWZhdWx0IHRoaXMgZGF0ZSkuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCBmb3IgdGhlIGRhdGUuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IGZvciB0aGUgZGF0ZS5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBuZXcgZGF0ZS5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUuICovXHJcblx0XHRuZXdEYXRlOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5uZXdEYXRlKCh5ZWFyID09IG51bGwgPyB0aGlzIDogeWVhciksIG1vbnRoLCBkYXkpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU2V0IG9yIHJldHJpZXZlIHRoZSB5ZWFyIGZvciB0aGlzIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcGFyYW0gW3llYXJdIHtudW1iZXJ9IFRoZSB5ZWFyIGZvciB0aGUgZGF0ZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfENEYXRlfSBUaGUgZGF0ZSdzIHllYXIgKGlmIG5vIHBhcmFtZXRlcikgb3IgdGhlIHVwZGF0ZWQgZGF0ZS5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUuICovXHJcblx0XHR5ZWFyOiBmdW5jdGlvbih5ZWFyKSB7XHJcblx0XHRcdHJldHVybiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCA/IHRoaXMuX3llYXIgOiB0aGlzLnNldCh5ZWFyLCAneScpKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFNldCBvciByZXRyaWV2ZSB0aGUgbW9udGggZm9yIHRoaXMgZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCBmb3IgdGhlIGRhdGUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcnxDRGF0ZX0gVGhlIGRhdGUncyBtb250aCAoaWYgbm8gcGFyYW1ldGVyKSBvciB0aGUgdXBkYXRlZCBkYXRlLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZS4gKi9cclxuXHRcdG1vbnRoOiBmdW5jdGlvbihtb250aCkge1xyXG5cdFx0XHRyZXR1cm4gKGFyZ3VtZW50cy5sZW5ndGggPT09IDAgPyB0aGlzLl9tb250aCA6IHRoaXMuc2V0KG1vbnRoLCAnbScpKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFNldCBvciByZXRyaWV2ZSB0aGUgZGF5IGZvciB0aGlzIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSBmb3IgdGhlIGRhdGUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcnxDRGF0YX0gVGhlIGRhdGUncyBkYXkgKGlmIG5vIHBhcmFtZXRlcikgb3IgdGhlIHVwZGF0ZWQgZGF0ZS5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUuICovXHJcblx0XHRkYXk6IGZ1bmN0aW9uKGRheSkge1xyXG5cdFx0XHRyZXR1cm4gKGFyZ3VtZW50cy5sZW5ndGggPT09IDAgPyB0aGlzLl9kYXkgOiB0aGlzLnNldChkYXksICdkJykpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU2V0IG5ldyB2YWx1ZXMgZm9yIHRoaXMgZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSB5ZWFyIGZvciB0aGUgZGF0ZS5cclxuXHRcdFx0QHBhcmFtIG1vbnRoIHtudW1iZXJ9IFRoZSBtb250aCBmb3IgdGhlIGRhdGUuXHJcblx0XHRcdEBwYXJhbSBkYXkge251bWJlcn0gVGhlIGRheSBmb3IgdGhlIGRhdGUuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgdXBkYXRlZCBkYXRlLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZS4gKi9cclxuXHRcdGRhdGU6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcclxuXHRcdFx0aWYgKCF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHllYXIsIG1vbnRoLCBkYXkpKSB7XHJcblx0XHRcdFx0dGhyb3cgKCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZERhdGUpLlxyXG5cdFx0XHRcdFx0cmVwbGFjZSgvXFx7MFxcfS8sIHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuX3llYXIgPSB5ZWFyO1xyXG5cdFx0XHR0aGlzLl9tb250aCA9IG1vbnRoO1xyXG5cdFx0XHR0aGlzLl9kYXkgPSBkYXk7XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGluIGEgbGVhcCB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBpcyBhIGxlYXAgeWVhciwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC4gKi9cclxuXHRcdGxlYXBZZWFyOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmxlYXBZZWFyKHRoaXMpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIGVwb2NoIGRlc2lnbmF0b3IgZm9yIHRoaXMgZGF0ZSwgZS5nLiBCQ0Ugb3IgQ0UuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBjdXJyZW50IGVwb2NoLiAqL1xyXG5cdFx0ZXBvY2g6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZXBvY2godGhpcyk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBGb3JtYXQgdGhlIHllYXIsIGlmIG5vdCBhIHNpbXBsZSBzZXF1ZW50aWFsIG51bWJlci5cclxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXHJcblx0XHRcdEByZXR1cm4ge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB5ZWFyLiAqL1xyXG5cdFx0Zm9ybWF0WWVhcjogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5mb3JtYXRZZWFyKHRoaXMpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG1vbnRoIG9mIHRoZSB5ZWFyIGZvciB0aGlzIGRhdGUsXHJcblx0XHRcdGkuZS4gdGhlIG1vbnRoJ3MgcG9zaXRpb24gd2l0aGluIGEgbnVtYmVyZWQgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG1vbnRoIG9mIHRoZSB5ZWFyOiA8Y29kZT5taW5Nb250aDwvY29kZT4gdG8gbW9udGhzIHBlciB5ZWFyLiAqL1xyXG5cdFx0bW9udGhPZlllYXI6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIubW9udGhPZlllYXIodGhpcyk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgd2VlayBvZiB0aGUgeWVhciBmb3IgdGhpcyBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgd2VlayBvZiB0aGUgeWVhcjogMSB0byB3ZWVrcyBwZXIgeWVhci4gKi9cclxuXHRcdHdlZWtPZlllYXI6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla09mWWVhcih0aGlzKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGUgeWVhciBmb3IgdGhpcyBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyB5ZWFyLiAqL1xyXG5cdFx0ZGF5c0luWWVhcjogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5kYXlzSW5ZZWFyKHRoaXMpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIGRheSBvZiB0aGUgeWVhciBmb3IgdGhpcyBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZGF5IG9mIHRoZSB5ZWFyOiAxIHRvIGRheXMgcGVyIHllYXIuICovXHJcblx0XHRkYXlPZlllYXI6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZZZWFyKHRoaXMpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoZSBtb250aCBmb3IgdGhpcyBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMuICovXHJcblx0XHRkYXlzSW5Nb250aDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5kYXlzSW5Nb250aCh0aGlzKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBkYXkgb2YgdGhlIHdlZWsgZm9yIHRoaXMgZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGRheSBvZiB0aGUgd2VlazogMCB0byBudW1iZXIgb2YgZGF5cyAtIDEuICovXHJcblx0XHRkYXlPZldlZWs6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZXZWVrKHRoaXMpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGEgd2VlayBkYXkuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBhIHdlZWsgZGF5LCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LiAqL1xyXG5cdFx0d2Vla0RheTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci53ZWVrRGF5KHRoaXMpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gLSBjb250ZW50cyBkZXBlbmRzIG9uIGNhbGVuZGFyLiAqL1xyXG5cdFx0ZXh0cmFJbmZvOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmV4dHJhSW5mbyh0aGlzKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEFkZCBwZXJpb2QocykgdG8gYSBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHBhcmFtIG9mZnNldCB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHBlcmlvZHMgdG8gYWRqdXN0IGJ5LlxyXG5cdFx0XHRAcGFyYW0gcGVyaW9kIHtzdHJpbmd9IE9uZSBvZiAneScgZm9yIHllYXIsICdtJyBmb3IgbW9udGgsICd3JyBmb3Igd2VlaywgJ2QnIGZvciBkYXkuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgdXBkYXRlZCBkYXRlLiAqL1xyXG5cdFx0YWRkOiBmdW5jdGlvbihvZmZzZXQsIHBlcmlvZCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuYWRkKHRoaXMsIG9mZnNldCwgcGVyaW9kKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFNldCBhIHBvcnRpb24gb2YgdGhlIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcGFyYW0gdmFsdWUge251bWJlcn0gVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIHBlcmlvZC5cclxuXHRcdFx0QHBhcmFtIHBlcmlvZCB7c3RyaW5nfSBPbmUgb2YgJ3knIGZvciB5ZWFyLCAnbScgZm9yIG1vbnRoLCAnZCcgZm9yIGRheS5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSB1cGRhdGVkIGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgbm90IGEgdmFsaWQgZGF0ZS4gKi9cclxuXHRcdHNldDogZnVuY3Rpb24odmFsdWUsIHBlcmlvZCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuc2V0KHRoaXMsIHZhbHVlLCBwZXJpb2QpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ29tcGFyZSB0aGlzIGRhdGUgdG8gYW5vdGhlciBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgb3RoZXIgZGF0ZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSAtMSBpZiB0aGlzIGRhdGUgaXMgYmVmb3JlIHRoZSBvdGhlciBkYXRlLFxyXG5cdFx0XHRcdFx0MCBpZiB0aGV5IGFyZSBlcXVhbCwgb3IgKzEgaWYgdGhpcyBkYXRlIGlzIGFmdGVyIHRoZSBvdGhlciBkYXRlLiAqL1xyXG5cdFx0Y29tcGFyZVRvOiBmdW5jdGlvbihkYXRlKSB7XHJcblx0XHRcdGlmICh0aGlzLl9jYWxlbmRhci5uYW1lICE9PSBkYXRlLl9jYWxlbmRhci5uYW1lKSB7XHJcblx0XHRcdFx0dGhyb3cgKCQuY2FsZW5kYXJzLmxvY2FsLmRpZmZlcmVudENhbGVuZGFycyB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmRpZmZlcmVudENhbGVuZGFycykuXHJcblx0XHRcdFx0XHRyZXBsYWNlKC9cXHswXFx9LywgdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSkucmVwbGFjZSgvXFx7MVxcfS8sIGRhdGUuX2NhbGVuZGFyLmxvY2FsLm5hbWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBjID0gKHRoaXMuX3llYXIgIT09IGRhdGUuX3llYXIgPyB0aGlzLl95ZWFyIC0gZGF0ZS5feWVhciA6XHJcblx0XHRcdFx0dGhpcy5fbW9udGggIT09IGRhdGUuX21vbnRoID8gdGhpcy5tb250aE9mWWVhcigpIC0gZGF0ZS5tb250aE9mWWVhcigpIDpcclxuXHRcdFx0XHR0aGlzLl9kYXkgLSBkYXRlLl9kYXkpO1xyXG5cdFx0XHRyZXR1cm4gKGMgPT09IDAgPyAwIDogKGMgPCAwID8gLTEgOiArMSkpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIGNhbGVuZGFyIGJhY2tpbmcgdGhpcyBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHJldHVybiB7QmFzZUNhbGVuZGFyfSBUaGUgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24uICovXHJcblx0XHRjYWxlbmRhcjogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhcjtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBKdWxpYW4gZGF0ZSBlcXVpdmFsZW50IGZvciB0aGlzIGRhdGUsXHJcblx0XHRcdGkuZS4gZGF5cyBzaW5jZSBKYW51YXJ5IDEsIDQ3MTMgQkNFIEdyZWVud2ljaCBub29uLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZXF1aXZhbGVudCBKdWxpYW4gZGF0ZS4gKi9cclxuXHRcdHRvSkQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIudG9KRCh0aGlzKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIGZyb20gYSBKdWxpYW4gZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIENEYXRlXHJcblx0XHRcdEBwYXJhbSBqZCB7bnVtYmVyfSBUaGUgSnVsaWFuIGRhdGUgdG8gY29udmVydC5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXHJcblx0XHRmcm9tSkQ6IGZ1bmN0aW9uKGpkKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5mcm9tSkQoamQpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ29udmVydCB0aGlzIGRhdGUgdG8gYSBzdGFuZGFyZCAoR3JlZ29yaWFuKSBKYXZhU2NyaXB0IERhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcmV0dXJuIHtEYXRlfSBUaGUgZXF1aXZhbGVudCBKYXZhU2NyaXB0IGRhdGUuICovXHJcblx0XHR0b0pTRGF0ZTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci50b0pTRGF0ZSh0aGlzKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIGZyb20gYSBzdGFuZGFyZCAoR3JlZ29yaWFuKSBKYXZhU2NyaXB0IERhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcGFyYW0ganNkIHtEYXRlfSBUaGUgSmF2YVNjcmlwdCBkYXRlIHRvIGNvbnZlcnQuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgZXF1aXZhbGVudCBkYXRlLiAqL1xyXG5cdFx0ZnJvbUpTRGF0ZTogZnVuY3Rpb24oanNkKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLl9jYWxlbmRhci5mcm9tSlNEYXRlKGpzZCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDb252ZXJ0IHRvIGEgc3RyaW5nIGZvciBkaXNwbGF5LlxyXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcclxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGlzIGRhdGUgYXMgYSBzdHJpbmcuICovXHJcblx0XHR0b1N0cmluZzogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiAodGhpcy55ZWFyKCkgPCAwID8gJy0nIDogJycpICsgcGFkKE1hdGguYWJzKHRoaXMueWVhcigpKSwgNCkgK1xyXG5cdFx0XHRcdCctJyArIHBhZCh0aGlzLm1vbnRoKCksIDIpICsgJy0nICsgcGFkKHRoaXMuZGF5KCksIDIpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHQvKiogQmFzaWMgZnVuY3Rpb25hbGl0eSBmb3IgYWxsIGNhbGVuZGFycy5cclxuXHRcdE90aGVyIGNhbGVuZGFycyBzaG91bGQgZXh0ZW5kIHRoaXM6XHJcblx0XHQ8cHJlPk90aGVyQ2FsZW5kYXIucHJvdG90eXBlID0gbmV3IEJhc2VDYWxlbmRhcjs8L3ByZT5cclxuXHRcdEBjbGFzcyBCYXNlQ2FsZW5kYXIgKi9cclxuXHRmdW5jdGlvbiBCYXNlQ2FsZW5kYXIoKSB7XHJcblx0XHR0aGlzLnNob3J0WWVhckN1dG9mZiA9ICcrMTAnO1xyXG5cdH1cclxuXHJcblx0JC5leHRlbmQoQmFzZUNhbGVuZGFyLnByb3RvdHlwZSwge1xyXG5cdFx0X3ZhbGlkYXRlTGV2ZWw6IDAsIC8vIFwiU3RhY2tcIiB0byB0dXJuIHZhbGlkYXRpb24gb24vb2ZmXHJcblxyXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIHdpdGhpbiB0aGlzIGNhbGVuZGFyIC0gdG9kYXkgaWYgbm8gcGFyYW1ldGVycyBnaXZlbi5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBkdXBsaWNhdGUgb3IgdGhlIHllYXIgZm9yIHRoZSBkYXRlLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggZm9yIHRoZSBkYXRlLlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSBmb3IgdGhlIGRhdGUuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgbmV3IGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgbm90IGEgdmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0bmV3RGF0ZTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHRpZiAoeWVhciA9PSBudWxsKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMudG9kYXkoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoeWVhci55ZWFyKSB7XHJcblx0XHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSxcclxuXHRcdFx0XHRcdCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZERhdGUpO1xyXG5cdFx0XHRcdGRheSA9IHllYXIuZGF5KCk7XHJcblx0XHRcdFx0bW9udGggPSB5ZWFyLm1vbnRoKCk7XHJcblx0XHRcdFx0eWVhciA9IHllYXIueWVhcigpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBuZXcgQ0RhdGUodGhpcywgeWVhciwgbW9udGgsIGRheSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDcmVhdGUgYSBuZXcgZGF0ZSBmb3IgdG9kYXkuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRvZGF5J3MgZGF0ZS4gKi9cclxuXHRcdHRvZGF5OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZnJvbUpTRGF0ZShuZXcgRGF0ZSgpKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBlcG9jaCBkZXNpZ25hdG9yIGZvciB0aGlzIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBjdXJyZW50IGVwb2NoLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZXBvY2g6IGZ1bmN0aW9uKHllYXIpIHtcclxuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcclxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhciB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRZZWFyKTtcclxuXHRcdFx0cmV0dXJuIChkYXRlLnllYXIoKSA8IDAgPyB0aGlzLmxvY2FsLmVwb2Noc1swXSA6IHRoaXMubG9jYWwuZXBvY2hzWzFdKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEZvcm1hdCB0aGUgeWVhciwgaWYgbm90IGEgc2ltcGxlIHNlcXVlbnRpYWwgbnVtYmVyXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZm9ybWF0IG9yIHRoZSB5ZWFyIHRvIGZvcm1hdC5cclxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHllYXIuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRmb3JtYXRZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksXHJcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkWWVhcik7XHJcblx0XHRcdHJldHVybiAoZGF0ZS55ZWFyKCkgPCAwID8gJy0nIDogJycpICsgcGFkKE1hdGguYWJzKGRhdGUueWVhcigpKSwgNClcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgbW9udGhzIGluIGEgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBtb250aHMuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRtb250aHNJblllYXI6IGZ1bmN0aW9uKHllYXIpIHtcclxuXHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksXHJcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkWWVhcik7XHJcblx0XHRcdHJldHVybiAxMjtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENhbGN1bGF0ZSB0aGUgbW9udGgncyBvcmRpbmFsIHBvc2l0aW9uIHdpdGhpbiB0aGUgeWVhciAtXHJcblx0XHRcdGZvciB0aG9zZSBjYWxlbmRhcnMgdGhhdCBkb24ndCBzdGFydCBhdCBtb250aCAxIVxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIG1vbnRoIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBvcmRpbmFsIHBvc2l0aW9uLCBzdGFydGluZyBmcm9tIDxjb2RlPm1pbk1vbnRoPC9jb2RlPi5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIvbW9udGggb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdG1vbnRoT2ZZZWFyOiBmdW5jdGlvbih5ZWFyLCBtb250aCkge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCB0aGlzLm1pbkRheSxcclxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkTW9udGggfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkTW9udGgpO1xyXG5cdFx0XHRyZXR1cm4gKGRhdGUubW9udGgoKSArIHRoaXMubW9udGhzSW5ZZWFyKGRhdGUpIC0gdGhpcy5maXJzdE1vbnRoKSAlXHJcblx0XHRcdFx0dGhpcy5tb250aHNJblllYXIoZGF0ZSkgKyB0aGlzLm1pbk1vbnRoO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ2FsY3VsYXRlIGFjdHVhbCBtb250aCBmcm9tIG9yZGluYWwgcG9zaXRpb24sIHN0YXJ0aW5nIGZyb20gbWluTW9udGguXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIG9yZCB7bnVtYmVyfSBUaGUgbW9udGgncyBvcmRpbmFsIHBvc2l0aW9uLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBtb250aCdzIG51bWJlci5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIvbW9udGguICovXHJcblx0XHRmcm9tTW9udGhPZlllYXI6IGZ1bmN0aW9uKHllYXIsIG9yZCkge1xyXG5cdFx0XHR2YXIgbSA9IChvcmQgKyB0aGlzLmZpcnN0TW9udGggLSAyICogdGhpcy5taW5Nb250aCkgJVxyXG5cdFx0XHRcdHRoaXMubW9udGhzSW5ZZWFyKHllYXIpICsgdGhpcy5taW5Nb250aDtcclxuXHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgbSwgdGhpcy5taW5EYXksXHJcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZE1vbnRoIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZE1vbnRoKTtcclxuXHRcdFx0cmV0dXJuIG07XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRkYXlzSW5ZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksXHJcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkWWVhcik7XHJcblx0XHRcdHJldHVybiAodGhpcy5sZWFwWWVhcihkYXRlKSA/IDM2NiA6IDM2NSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgZGF5IG9mIHRoZSB5ZWFyIGZvciBhIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gY29udmVydCBvciB0aGUgeWVhciB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gY29udmVydC5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gY29udmVydC5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZGF5IG9mIHRoZSB5ZWFyLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZGF5T2ZZZWFyOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSxcclxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcclxuXHRcdFx0cmV0dXJuIGRhdGUudG9KRCgpIC0gdGhpcy5uZXdEYXRlKGRhdGUueWVhcigpLFxyXG5cdFx0XHRcdHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGRhdGUueWVhcigpLCB0aGlzLm1pbk1vbnRoKSwgdGhpcy5taW5EYXkpLnRvSkQoKSArIDE7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSB3ZWVrLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzLiAqL1xyXG5cdFx0ZGF5c0luV2VlazogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiA3O1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIGRheSBvZiB0aGUgd2VlayBmb3IgYSBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGRheSBvZiB0aGUgd2VlazogMCB0byBudW1iZXIgb2YgZGF5cyAtIDEuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRkYXlPZldlZWs6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcclxuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgZGF5LFxyXG5cdFx0XHRcdCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlIHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZERhdGUpO1xyXG5cdFx0XHRyZXR1cm4gKE1hdGguZmxvb3IodGhpcy50b0pEKGRhdGUpKSArIDIpICUgdGhpcy5kYXlzSW5XZWVrKCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGEgZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gLSBjb250ZW50cyBkZXBlbmRzIG9uIGNhbGVuZGFyLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZXh0cmFJbmZvOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksXHJcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSk7XHJcblx0XHRcdHJldHVybiB7fTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEFkZCBwZXJpb2QocykgdG8gYSBkYXRlLlxyXG5cdFx0XHRDYXRlciBmb3Igbm8geWVhciB6ZXJvLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZX0gVGhlIHN0YXJ0aW5nIGRhdGUuXHJcblx0XHRcdEBwYXJhbSBvZmZzZXQge251bWJlcn0gVGhlIG51bWJlciBvZiBwZXJpb2RzIHRvIGFkanVzdCBieS5cclxuXHRcdFx0QHBhcmFtIHBlcmlvZCB7c3RyaW5nfSBPbmUgb2YgJ3knIGZvciB5ZWFyLCAnbScgZm9yIG1vbnRoLCAndycgZm9yIHdlZWssICdkJyBmb3IgZGF5LlxyXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIHVwZGF0ZWQgZGF0ZS5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0YWRkOiBmdW5jdGlvbihkYXRlLCBvZmZzZXQsIHBlcmlvZCkge1xyXG5cdFx0XHR0aGlzLl92YWxpZGF0ZShkYXRlLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcclxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcclxuXHRcdFx0cmV0dXJuIHRoaXMuX2NvcnJlY3RBZGQoZGF0ZSwgdGhpcy5fYWRkKGRhdGUsIG9mZnNldCwgcGVyaW9kKSwgb2Zmc2V0LCBwZXJpb2QpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQWRkIHBlcmlvZChzKSB0byBhIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgc3RhcnRpbmcgZGF0ZS5cclxuXHRcdFx0QHBhcmFtIG9mZnNldCB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHBlcmlvZHMgdG8gYWRqdXN0IGJ5LlxyXG5cdFx0XHRAcGFyYW0gcGVyaW9kIHtzdHJpbmd9IE9uZSBvZiAneScgZm9yIHllYXIsICdtJyBmb3IgbW9udGgsICd3JyBmb3Igd2VlaywgJ2QnIGZvciBkYXkuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgdXBkYXRlZCBkYXRlLiAqL1xyXG5cdFx0X2FkZDogZnVuY3Rpb24oZGF0ZSwgb2Zmc2V0LCBwZXJpb2QpIHtcclxuXHRcdFx0dGhpcy5fdmFsaWRhdGVMZXZlbCsrO1xyXG5cdFx0XHRpZiAocGVyaW9kID09PSAnZCcgfHwgcGVyaW9kID09PSAndycpIHtcclxuXHRcdFx0XHR2YXIgamQgPSBkYXRlLnRvSkQoKSArIG9mZnNldCAqIChwZXJpb2QgPT09ICd3JyA/IHRoaXMuZGF5c0luV2VlaygpIDogMSk7XHJcblx0XHRcdFx0dmFyIGQgPSBkYXRlLmNhbGVuZGFyKCkuZnJvbUpEKGpkKTtcclxuXHRcdFx0XHR0aGlzLl92YWxpZGF0ZUxldmVsLS07XHJcblx0XHRcdFx0cmV0dXJuIFtkLnllYXIoKSwgZC5tb250aCgpLCBkLmRheSgpXTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHZhciB5ID0gZGF0ZS55ZWFyKCkgKyAocGVyaW9kID09PSAneScgPyBvZmZzZXQgOiAwKTtcclxuXHRcdFx0XHR2YXIgbSA9IGRhdGUubW9udGhPZlllYXIoKSArIChwZXJpb2QgPT09ICdtJyA/IG9mZnNldCA6IDApO1xyXG5cdFx0XHRcdHZhciBkID0gZGF0ZS5kYXkoKTsvLyArIChwZXJpb2QgPT09ICdkJyA/IG9mZnNldCA6IDApICtcclxuXHRcdFx0XHRcdC8vKHBlcmlvZCA9PT0gJ3cnID8gb2Zmc2V0ICogdGhpcy5kYXlzSW5XZWVrKCkgOiAwKTtcclxuXHRcdFx0XHR2YXIgcmVzeW5jWWVhck1vbnRoID0gZnVuY3Rpb24oY2FsZW5kYXIpIHtcclxuXHRcdFx0XHRcdHdoaWxlIChtIDwgY2FsZW5kYXIubWluTW9udGgpIHtcclxuXHRcdFx0XHRcdFx0eS0tO1xyXG5cdFx0XHRcdFx0XHRtICs9IGNhbGVuZGFyLm1vbnRoc0luWWVhcih5KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHZhciB5ZWFyTW9udGhzID0gY2FsZW5kYXIubW9udGhzSW5ZZWFyKHkpO1xyXG5cdFx0XHRcdFx0d2hpbGUgKG0gPiB5ZWFyTW9udGhzIC0gMSArIGNhbGVuZGFyLm1pbk1vbnRoKSB7XHJcblx0XHRcdFx0XHRcdHkrKztcclxuXHRcdFx0XHRcdFx0bSAtPSB5ZWFyTW9udGhzO1xyXG5cdFx0XHRcdFx0XHR5ZWFyTW9udGhzID0gY2FsZW5kYXIubW9udGhzSW5ZZWFyKHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0aWYgKHBlcmlvZCA9PT0gJ3knKSB7XHJcblx0XHRcdFx0XHRpZiAoZGF0ZS5tb250aCgpICE9PSB0aGlzLmZyb21Nb250aE9mWWVhcih5LCBtKSkgeyAvLyBIZWJyZXdcclxuXHRcdFx0XHRcdFx0bSA9IHRoaXMubmV3RGF0ZSh5LCBkYXRlLm1vbnRoKCksIHRoaXMubWluRGF5KS5tb250aE9mWWVhcigpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0bSA9IE1hdGgubWluKG0sIHRoaXMubW9udGhzSW5ZZWFyKHkpKTtcclxuXHRcdFx0XHRcdGQgPSBNYXRoLm1pbihkLCB0aGlzLmRheXNJbk1vbnRoKHksIHRoaXMuZnJvbU1vbnRoT2ZZZWFyKHksIG0pKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgaWYgKHBlcmlvZCA9PT0gJ20nKSB7XHJcblx0XHRcdFx0XHRyZXN5bmNZZWFyTW9udGgodGhpcyk7XHJcblx0XHRcdFx0XHRkID0gTWF0aC5taW4oZCwgdGhpcy5kYXlzSW5Nb250aCh5LCB0aGlzLmZyb21Nb250aE9mWWVhcih5LCBtKSkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgeW1kID0gW3ksIHRoaXMuZnJvbU1vbnRoT2ZZZWFyKHksIG0pLCBkXTtcclxuXHRcdFx0XHR0aGlzLl92YWxpZGF0ZUxldmVsLS07XHJcblx0XHRcdFx0cmV0dXJuIHltZDtcclxuXHRcdFx0fVxyXG5cdFx0XHRjYXRjaCAoZSkge1xyXG5cdFx0XHRcdHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLTtcclxuXHRcdFx0XHR0aHJvdyBlO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDb3JyZWN0IGEgY2FuZGlkYXRlIGRhdGUgYWZ0ZXIgYWRkaW5nIHBlcmlvZChzKSB0byBhIGRhdGUuXHJcblx0XHRcdEhhbmRsZSBubyB5ZWFyIHplcm8gaWYgbmVjZXNzYXJ5LlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZX0gVGhlIHN0YXJ0aW5nIGRhdGUuXHJcblx0XHRcdEBwYXJhbSB5bWQge251bWJlcltdfSBUaGUgYWRkZWQgZGF0ZS5cclxuXHRcdFx0QHBhcmFtIG9mZnNldCB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHBlcmlvZHMgdG8gYWRqdXN0IGJ5LlxyXG5cdFx0XHRAcGFyYW0gcGVyaW9kIHtzdHJpbmd9IE9uZSBvZiAneScgZm9yIHllYXIsICdtJyBmb3IgbW9udGgsICd3JyBmb3Igd2VlaywgJ2QnIGZvciBkYXkuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgdXBkYXRlZCBkYXRlLiAqL1xyXG5cdFx0X2NvcnJlY3RBZGQ6IGZ1bmN0aW9uKGRhdGUsIHltZCwgb2Zmc2V0LCBwZXJpb2QpIHtcclxuXHRcdFx0aWYgKCF0aGlzLmhhc1llYXJaZXJvICYmIChwZXJpb2QgPT09ICd5JyB8fCBwZXJpb2QgPT09ICdtJykpIHtcclxuXHRcdFx0XHRpZiAoeW1kWzBdID09PSAwIHx8IC8vIEluIHllYXIgemVyb1xyXG5cdFx0XHRcdFx0XHQoZGF0ZS55ZWFyKCkgPiAwKSAhPT0gKHltZFswXSA+IDApKSB7IC8vIENyb3NzZWQgeWVhciB6ZXJvXHJcblx0XHRcdFx0XHR2YXIgYWRqID0ge3k6IFsxLCAxLCAneSddLCBtOiBbMSwgdGhpcy5tb250aHNJblllYXIoLTEpLCAnbSddLFxyXG5cdFx0XHRcdFx0XHR3OiBbdGhpcy5kYXlzSW5XZWVrKCksIHRoaXMuZGF5c0luWWVhcigtMSksICdkJ10sXHJcblx0XHRcdFx0XHRcdGQ6IFsxLCB0aGlzLmRheXNJblllYXIoLTEpLCAnZCddfVtwZXJpb2RdO1xyXG5cdFx0XHRcdFx0dmFyIGRpciA9IChvZmZzZXQgPCAwID8gLTEgOiArMSk7XHJcblx0XHRcdFx0XHR5bWQgPSB0aGlzLl9hZGQoZGF0ZSwgb2Zmc2V0ICogYWRqWzBdICsgZGlyICogYWRqWzFdLCBhZGpbMl0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZGF0ZS5kYXRlKHltZFswXSwgeW1kWzFdLCB5bWRbMl0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU2V0IGEgcG9ydGlvbiBvZiB0aGUgZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBzdGFydGluZyBkYXRlLlxyXG5cdFx0XHRAcGFyYW0gdmFsdWUge251bWJlcn0gVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIHBlcmlvZC5cclxuXHRcdFx0QHBhcmFtIHBlcmlvZCB7c3RyaW5nfSBPbmUgb2YgJ3knIGZvciB5ZWFyLCAnbScgZm9yIG1vbnRoLCAnZCcgZm9yIGRheS5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSB1cGRhdGVkIGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRzZXQ6IGZ1bmN0aW9uKGRhdGUsIHZhbHVlLCBwZXJpb2QpIHtcclxuXHRcdFx0dGhpcy5fdmFsaWRhdGUoZGF0ZSwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksXHJcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSk7XHJcblx0XHRcdHZhciB5ID0gKHBlcmlvZCA9PT0gJ3knID8gdmFsdWUgOiBkYXRlLnllYXIoKSk7XHJcblx0XHRcdHZhciBtID0gKHBlcmlvZCA9PT0gJ20nID8gdmFsdWUgOiBkYXRlLm1vbnRoKCkpO1xyXG5cdFx0XHR2YXIgZCA9IChwZXJpb2QgPT09ICdkJyA/IHZhbHVlIDogZGF0ZS5kYXkoKSk7XHJcblx0XHRcdGlmIChwZXJpb2QgPT09ICd5JyB8fCBwZXJpb2QgPT09ICdtJykge1xyXG5cdFx0XHRcdGQgPSBNYXRoLm1pbihkLCB0aGlzLmRheXNJbk1vbnRoKHksIG0pKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZGF0ZS5kYXRlKHksIG0sIGQpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgYSBkYXRlIGlzIHZhbGlkIGZvciB0aGlzIGNhbGVuZGFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBtb250aCB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIGRheSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGEgdmFsaWQgZGF0ZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC4gKi9cclxuXHRcdGlzVmFsaWQ6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcclxuXHRcdFx0dGhpcy5fdmFsaWRhdGVMZXZlbCsrO1xyXG5cdFx0XHR2YXIgdmFsaWQgPSAodGhpcy5oYXNZZWFyWmVybyB8fCB5ZWFyICE9PSAwKTtcclxuXHRcdFx0aWYgKHZhbGlkKSB7XHJcblx0XHRcdFx0dmFyIGRhdGUgPSB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIHRoaXMubWluRGF5KTtcclxuXHRcdFx0XHR2YWxpZCA9IChtb250aCA+PSB0aGlzLm1pbk1vbnRoICYmIG1vbnRoIC0gdGhpcy5taW5Nb250aCA8IHRoaXMubW9udGhzSW5ZZWFyKGRhdGUpKSAmJlxyXG5cdFx0XHRcdFx0KGRheSA+PSB0aGlzLm1pbkRheSAmJiBkYXkgLSB0aGlzLm1pbkRheSA8IHRoaXMuZGF5c0luTW9udGgoZGF0ZSkpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLTtcclxuXHRcdFx0cmV0dXJuIHZhbGlkO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ29udmVydCB0aGUgZGF0ZSB0byBhIHN0YW5kYXJkIChHcmVnb3JpYW4pIEphdmFTY3JpcHQgRGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb252ZXJ0IG9yIHRoZSB5ZWFyIHRvIGNvbnZlcnQuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcmV0dXJuIHtEYXRlfSBUaGUgZXF1aXZhbGVudCBKYXZhU2NyaXB0IGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR0b0pTRGF0ZTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksXHJcblx0XHRcdFx0JC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSk7XHJcblx0XHRcdHJldHVybiAkLmNhbGVuZGFycy5pbnN0YW5jZSgpLmZyb21KRCh0aGlzLnRvSkQoZGF0ZSkpLnRvSlNEYXRlKCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDb252ZXJ0IHRoZSBkYXRlIGZyb20gYSBzdGFuZGFyZCAoR3JlZ29yaWFuKSBKYXZhU2NyaXB0IERhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIGpzZCB7RGF0ZX0gVGhlIEphdmFTY3JpcHQgZGF0ZS5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGNhbGVuZGFyIGRhdGUuICovXHJcblx0XHRmcm9tSlNEYXRlOiBmdW5jdGlvbihqc2QpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZnJvbUpEKCQuY2FsZW5kYXJzLmluc3RhbmNlKCkuZnJvbUpTRGF0ZShqc2QpLnRvSkQoKSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDaGVjayB0aGF0IGEgY2FuZGlkYXRlIGRhdGUgaXMgZnJvbSB0aGUgc2FtZSBjYWxlbmRhciBhbmQgaXMgdmFsaWQuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gdmFsaWRhdGUgb3IgdGhlIHllYXIgdG8gdmFsaWRhdGUuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byB2YWxpZGF0ZS5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gdmFsaWRhdGUuXHJcblx0XHRcdEBwYXJhbSBlcnJvciB7c3RyaW5nfSBScnJvciBtZXNzYWdlIGlmIGludmFsaWQuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgZGlmZmVyZW50IGNhbGVuZGFycyB1c2VkIG9yIGludmFsaWQgZGF0ZS4gKi9cclxuXHRcdF92YWxpZGF0ZTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSwgZXJyb3IpIHtcclxuXHRcdFx0aWYgKHllYXIueWVhcikge1xyXG5cdFx0XHRcdGlmICh0aGlzLl92YWxpZGF0ZUxldmVsID09PSAwICYmIHRoaXMubmFtZSAhPT0geWVhci5jYWxlbmRhcigpLm5hbWUpIHtcclxuXHRcdFx0XHRcdHRocm93ICgkLmNhbGVuZGFycy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnMgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5kaWZmZXJlbnRDYWxlbmRhcnMpLlxyXG5cdFx0XHRcdFx0XHRyZXBsYWNlKC9cXHswXFx9LywgdGhpcy5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cXHsxXFx9LywgeWVhci5jYWxlbmRhcigpLmxvY2FsLm5hbWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4geWVhcjtcclxuXHRcdFx0fVxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHRoaXMuX3ZhbGlkYXRlTGV2ZWwrKztcclxuXHRcdFx0XHRpZiAodGhpcy5fdmFsaWRhdGVMZXZlbCA9PT0gMSAmJiAhdGhpcy5pc1ZhbGlkKHllYXIsIG1vbnRoLCBkYXkpKSB7XHJcblx0XHRcdFx0XHR0aHJvdyBlcnJvci5yZXBsYWNlKC9cXHswXFx9LywgdGhpcy5sb2NhbC5uYW1lKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIGRhdGUgPSB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSk7XHJcblx0XHRcdFx0dGhpcy5fdmFsaWRhdGVMZXZlbC0tO1xyXG5cdFx0XHRcdHJldHVybiBkYXRlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNhdGNoIChlKSB7XHJcblx0XHRcdFx0dGhpcy5fdmFsaWRhdGVMZXZlbC0tO1xyXG5cdFx0XHRcdHRocm93IGU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0LyoqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBQcm9sZXB0aWMgR3JlZ29yaWFuIENhbGVuZGFyLlxyXG5cdFx0U2VlIDxhIGhyZWY9XCI6aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HcmVnb3JpYW5fY2FsZW5kYXJcIj5odHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dyZWdvcmlhbl9jYWxlbmRhcjwvYT5cclxuXHRcdGFuZCA8YSBocmVmPVwiaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qcm9sZXB0aWNfR3JlZ29yaWFuX2NhbGVuZGFyXCI+aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qcm9sZXB0aWNfR3JlZ29yaWFuX2NhbGVuZGFyPC9hPi5cclxuXHRcdEBjbGFzcyBHcmVnb3JpYW5DYWxlbmRhclxyXG5cdFx0QGF1Z21lbnRzIEJhc2VDYWxlbmRhclxyXG5cdFx0QHBhcmFtIFtsYW5ndWFnZT0nJ10ge3N0cmluZ30gVGhlIGxhbmd1YWdlIGNvZGUgKGRlZmF1bHQgRW5nbGlzaCkgZm9yIGxvY2FsaXNhdGlvbi4gKi9cclxuXHRmdW5jdGlvbiBHcmVnb3JpYW5DYWxlbmRhcihsYW5ndWFnZSkge1xyXG5cdFx0dGhpcy5sb2NhbCA9IHRoaXMucmVnaW9uYWxPcHRpb25zW2xhbmd1YWdlXSB8fCB0aGlzLnJlZ2lvbmFsT3B0aW9uc1snJ107XHJcblx0fVxyXG5cclxuXHRHcmVnb3JpYW5DYWxlbmRhci5wcm90b3R5cGUgPSBuZXcgQmFzZUNhbGVuZGFyO1xyXG5cclxuXHQkLmV4dGVuZChHcmVnb3JpYW5DYWxlbmRhci5wcm90b3R5cGUsIHtcclxuXHRcdC8qKiBUaGUgY2FsZW5kYXIgbmFtZS5cclxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyICovXHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdCAvKiogSnVsaWFuIGRhdGUgb2Ygc3RhcnQgb2YgR3JlZ29yaWFuIGVwb2NoOiAxIEphbnVhcnkgMDAwMSBDRS5cclxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyICovXHJcblx0XHRqZEVwb2NoOiAxNzIxNDI1LjUsXHJcblx0XHQgLyoqIERheXMgcGVyIG1vbnRoIGluIGEgY29tbW9uIHllYXIuXHJcblx0XHRcdEBtZW1iZXJvZiBHcmVnb3JpYW5DYWxlbmRhciAqL1xyXG5cdFx0ZGF5c1Blck1vbnRoOiBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0sXHJcblx0XHQgLyoqIDxjb2RlPnRydWU8L2NvZGU+IGlmIGhhcyBhIHllYXIgemVybywgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyICovXHJcblx0XHRoYXNZZWFyWmVybzogZmFsc2UsXHJcblx0XHQvKiogVGhlIG1pbmltdW0gbW9udGggbnVtYmVyLlxyXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXIgKi9cclxuXHRcdG1pbk1vbnRoOiAxLFxyXG5cdFx0LyoqIFRoZSBmaXJzdCBtb250aCBpbiB0aGUgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyICovXHJcblx0XHRmaXJzdE1vbnRoOiAxLFxyXG5cdFx0IC8qKiBUaGUgbWluaW11bSBkYXkgbnVtYmVyLlxyXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXIgKi9cclxuXHRcdG1pbkRheTogMSxcclxuXHJcblx0XHQvKiogTG9jYWxpc2F0aW9ucyBmb3IgdGhlIHBsdWdpbi5cclxuXHRcdFx0RW50cmllcyBhcmUgb2JqZWN0cyBpbmRleGVkIGJ5IHRoZSBsYW5ndWFnZSBjb2RlICgnJyBiZWluZyB0aGUgZGVmYXVsdCBVUy9FbmdsaXNoKS5cclxuXHRcdFx0RWFjaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcy5cclxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyXHJcblx0XHRcdEBwcm9wZXJ0eSBuYW1lIHtzdHJpbmd9IFRoZSBjYWxlbmRhciBuYW1lLlxyXG5cdFx0XHRAcHJvcGVydHkgZXBvY2hzIHtzdHJpbmdbXX0gVGhlIGVwb2NoIG5hbWVzLlxyXG5cdFx0XHRAcHJvcGVydHkgbW9udGhOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBtb250aHMgb2YgdGhlIHllYXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cclxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lc1Nob3J0IHtzdHJpbmdbXX0gVGhlIHNob3J0IG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNNaW4ge3N0cmluZ1tdfSBUaGUgbWluaW1hbCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cclxuXHRcdFx0QHByb3BlcnR5IGRhdGVGb3JtYXQge3N0cmluZ30gVGhlIGRhdGUgZm9ybWF0IGZvciB0aGlzIGNhbGVuZGFyLlxyXG5cdFx0XHRcdFx0U2VlIHRoZSBvcHRpb25zIG9uIDxhIGhyZWY9XCJCYXNlQ2FsZW5kYXIuaHRtbCNmb3JtYXREYXRlXCI+PGNvZGU+Zm9ybWF0RGF0ZTwvY29kZT48L2E+IGZvciBkZXRhaWxzLlxyXG5cdFx0XHRAcHJvcGVydHkgZmlyc3REYXkge251bWJlcn0gVGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBzdGFydGluZyBhdCAwLlxyXG5cdFx0XHRAcHJvcGVydHkgaXNSVEwge251bWJlcn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBsb2NhbGlzYXRpb24gcmVhZHMgcmlnaHQtdG8tbGVmdC4gKi9cclxuXHRcdHJlZ2lvbmFsT3B0aW9uczogeyAvLyBMb2NhbGlzYXRpb25zXHJcblx0XHRcdCcnOiB7XHJcblx0XHRcdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRcdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0XHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsXHJcblx0XHRcdFx0J0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10sXHJcblx0XHRcdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXHJcblx0XHRcdFx0ZGF5TmFtZXM6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXSxcclxuXHRcdFx0XHRkYXlOYW1lc1Nob3J0OiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxyXG5cdFx0XHRcdGRheU5hbWVzTWluOiBbJ1N1JywgJ01vJywgJ1R1JywgJ1dlJywgJ1RoJywgJ0ZyJywgJ1NhJ10sXHJcblx0XHRcdFx0ZGF0ZUZvcm1hdDogJ21tL2RkL3l5eXknLFxyXG5cdFx0XHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0XHRcdGlzUlRMOiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGluIGEgbGVhcCB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGlzIGEgbGVhcCB5ZWFyLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0bGVhcFllYXI6IGZ1bmN0aW9uKHllYXIpIHtcclxuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSxcclxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhciB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRZZWFyKTtcclxuXHRcdFx0dmFyIHllYXIgPSBkYXRlLnllYXIoKSArIChkYXRlLnllYXIoKSA8IDAgPyAxIDogMCk7IC8vIE5vIHllYXIgemVyb1xyXG5cdFx0XHRyZXR1cm4geWVhciAlIDQgPT09IDAgJiYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgdGhlIHdlZWsgb2YgdGhlIHllYXIgZm9yIGEgZGF0ZSAtIElTTyA4NjAxLlxyXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgd2VlayBvZiB0aGUgeWVhciwgc3RhcnRpbmcgZnJvbSAxLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0d2Vla09mWWVhcjogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHQvLyBGaW5kIFRodXJzZGF5IG9mIHRoaXMgd2VlayBzdGFydGluZyBvbiBNb25kYXlcclxuXHRcdFx0dmFyIGNoZWNrRGF0ZSA9IHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcclxuXHRcdFx0Y2hlY2tEYXRlLmFkZCg0IC0gKGNoZWNrRGF0ZS5kYXlPZldlZWsoKSB8fCA3KSwgJ2QnKTtcclxuXHRcdFx0cmV0dXJuIE1hdGguZmxvb3IoKGNoZWNrRGF0ZS5kYXlPZlllYXIoKSAtIDEpIC8gNykgKyAxO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgbW9udGguXHJcblx0XHRcdEBtZW1iZXJvZiBHcmVnb3JpYW5DYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIG9mIHRoZSBtb250aC5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIG1vbnRoLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgbW9udGgveWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZGF5c0luTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIHRoaXMubWluRGF5LFxyXG5cdFx0XHRcdCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRNb250aCB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRNb250aCk7XHJcblx0XHRcdHJldHVybiB0aGlzLmRheXNQZXJNb250aFtkYXRlLm1vbnRoKCkgLSAxXSArXHJcblx0XHRcdFx0KGRhdGUubW9udGgoKSA9PT0gMiAmJiB0aGlzLmxlYXBZZWFyKGRhdGUueWVhcigpKSA/IDEgOiAwKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBhIHdlZWsgZGF5LlxyXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYSB3ZWVrIGRheSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdHdlZWtEYXk6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcclxuXHRcdFx0cmV0dXJuICh0aGlzLmRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KSB8fCA3KSA8IDY7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgSnVsaWFuIGRhdGUgZXF1aXZhbGVudCBmb3IgdGhpcyBkYXRlLFxyXG5cdFx0XHRpLmUuIGRheXMgc2luY2UgSmFudWFyeSAxLCA0NzEzIEJDRSBHcmVlbndpY2ggbm9vbi5cclxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvbnZlcnQgb3IgdGhlIHllYXIgdG8gY29udmVydC5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGNvbnZlcnQuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGNvbnZlcnQuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGVxdWl2YWxlbnQgSnVsaWFuIGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR0b0pEOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSxcclxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcclxuXHRcdFx0eWVhciA9IGRhdGUueWVhcigpO1xyXG5cdFx0XHRtb250aCA9IGRhdGUubW9udGgoKTtcclxuXHRcdFx0ZGF5ID0gZGF0ZS5kYXkoKTtcclxuXHRcdFx0aWYgKHllYXIgPCAwKSB7IHllYXIrKzsgfSAvLyBObyB5ZWFyIHplcm9cclxuXHRcdFx0Ly8gSmVhbiBNZWV1cyBhbGdvcml0aG0sIFwiQXN0cm9ub21pY2FsIEFsZ29yaXRobXNcIiwgMTk5MVxyXG5cdFx0XHRpZiAobW9udGggPCAzKSB7XHJcblx0XHRcdFx0bW9udGggKz0gMTI7XHJcblx0XHRcdFx0eWVhci0tO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBhID0gTWF0aC5mbG9vcih5ZWFyIC8gMTAwKTtcclxuXHRcdFx0dmFyIGIgPSAyIC0gYSArIE1hdGguZmxvb3IoYSAvIDQpO1xyXG5cdFx0XHRyZXR1cm4gTWF0aC5mbG9vcigzNjUuMjUgKiAoeWVhciArIDQ3MTYpKSArXHJcblx0XHRcdFx0TWF0aC5mbG9vcigzMC42MDAxICogKG1vbnRoICsgMSkpICsgZGF5ICsgYiAtIDE1MjQuNTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIGZyb20gYSBKdWxpYW4gZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSBqZCB7bnVtYmVyfSBUaGUgSnVsaWFuIGRhdGUgdG8gY29udmVydC5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXHJcblx0XHRmcm9tSkQ6IGZ1bmN0aW9uKGpkKSB7XHJcblx0XHRcdC8vIEplYW4gTWVldXMgYWxnb3JpdGhtLCBcIkFzdHJvbm9taWNhbCBBbGdvcml0aG1zXCIsIDE5OTFcclxuXHRcdFx0dmFyIHogPSBNYXRoLmZsb29yKGpkICsgMC41KTtcclxuXHRcdFx0dmFyIGEgPSBNYXRoLmZsb29yKCh6IC0gMTg2NzIxNi4yNSkgLyAzNjUyNC4yNSk7XHJcblx0XHRcdGEgPSB6ICsgMSArIGEgLSBNYXRoLmZsb29yKGEgLyA0KTtcclxuXHRcdFx0dmFyIGIgPSBhICsgMTUyNDtcclxuXHRcdFx0dmFyIGMgPSBNYXRoLmZsb29yKChiIC0gMTIyLjEpIC8gMzY1LjI1KTtcclxuXHRcdFx0dmFyIGQgPSBNYXRoLmZsb29yKDM2NS4yNSAqIGMpO1xyXG5cdFx0XHR2YXIgZSA9IE1hdGguZmxvb3IoKGIgLSBkKSAvIDMwLjYwMDEpO1xyXG5cdFx0XHR2YXIgZGF5ID0gYiAtIGQgLSBNYXRoLmZsb29yKGUgKiAzMC42MDAxKTtcclxuXHRcdFx0dmFyIG1vbnRoID0gZSAtIChlID4gMTMuNSA/IDEzIDogMSk7XHJcblx0XHRcdHZhciB5ZWFyID0gYyAtIChtb250aCA+IDIuNSA/IDQ3MTYgOiA0NzE1KTtcclxuXHRcdFx0aWYgKHllYXIgPD0gMCkgeyB5ZWFyLS07IH0gLy8gTm8geWVhciB6ZXJvXHJcblx0XHRcdHJldHVybiB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDb252ZXJ0IHRoaXMgZGF0ZSB0byBhIHN0YW5kYXJkIChHcmVnb3JpYW4pIEphdmFTY3JpcHQgRGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIEdyZWdvcmlhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvbnZlcnQgb3IgdGhlIHllYXIgdG8gY29udmVydC5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGNvbnZlcnQuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGNvbnZlcnQuXHJcblx0XHRcdEByZXR1cm4ge0RhdGV9IFRoZSBlcXVpdmFsZW50IEphdmFTY3JpcHQgZGF0ZS5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdHRvSlNEYXRlOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSxcclxuXHRcdFx0XHQkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtcclxuXHRcdFx0dmFyIGpzZCA9IG5ldyBEYXRlKGRhdGUueWVhcigpLCBkYXRlLm1vbnRoKCkgLSAxLCBkYXRlLmRheSgpKTtcclxuXHRcdFx0anNkLnNldEhvdXJzKDApO1xyXG5cdFx0XHRqc2Quc2V0TWludXRlcygwKTtcclxuXHRcdFx0anNkLnNldFNlY29uZHMoMCk7XHJcblx0XHRcdGpzZC5zZXRNaWxsaXNlY29uZHMoMCk7XHJcblx0XHRcdC8vIEhvdXJzIG1heSBiZSBub24temVybyBvbiBkYXlsaWdodCBzYXZpbmcgY3V0LW92ZXI6XHJcblx0XHRcdC8vID4gMTIgd2hlbiBtaWRuaWdodCBjaGFuZ2VvdmVyLCBidXQgdGhlbiBjYW5ub3QgZ2VuZXJhdGVcclxuXHRcdFx0Ly8gbWlkbmlnaHQgZGF0ZXRpbWUsIHNvIGp1bXAgdG8gMUFNLCBvdGhlcndpc2UgcmVzZXQuXHJcblx0XHRcdGpzZC5zZXRIb3Vycyhqc2QuZ2V0SG91cnMoKSA+IDEyID8ganNkLmdldEhvdXJzKCkgKyAyIDogMCk7XHJcblx0XHRcdHJldHVybiBqc2Q7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDcmVhdGUgYSBuZXcgZGF0ZSBmcm9tIGEgc3RhbmRhcmQgKEdyZWdvcmlhbikgSmF2YVNjcmlwdCBEYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgR3JlZ29yaWFuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIGpzZCB7RGF0ZX0gVGhlIEphdmFTY3JpcHQgZGF0ZSB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIGVxdWl2YWxlbnQgZGF0ZS4gKi9cclxuXHRcdGZyb21KU0RhdGU6IGZ1bmN0aW9uKGpzZCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5uZXdEYXRlKGpzZC5nZXRGdWxsWWVhcigpLCBqc2QuZ2V0TW9udGgoKSArIDEsIGpzZC5nZXREYXRlKCkpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHQvLyBTaW5nbGV0b24gbWFuYWdlclxyXG5cdCQuY2FsZW5kYXJzID0gbmV3IENhbGVuZGFycygpO1xyXG5cclxuXHQvLyBEYXRlIHRlbXBsYXRlXHJcblx0JC5jYWxlbmRhcnMuY2RhdGUgPSBDRGF0ZTtcclxuXHJcblx0Ly8gQmFzZSBjYWxlbmRhciB0ZW1wbGF0ZVxyXG5cdCQuY2FsZW5kYXJzLmJhc2VDYWxlbmRhciA9IEJhc2VDYWxlbmRhcjtcclxuXHJcblx0Ly8gR3JlZ29yaWFuIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uXHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbiA9IEdyZWdvcmlhbkNhbGVuZGFyO1xyXG5cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.julian.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.julian.js index 36cdf097bbb..0a8b18aecd4 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.julian.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.julian.js @@ -171,4 +171,4 @@ $.calendars.calendars.julian = JulianCalendar; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuanVsaWFuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLmp1bGlhbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEp1bGlhbiBjYWxlbmRhciBmb3IgalF1ZXJ5IHYyLjAuMS5cbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgQXVndXN0IDIwMDkuXG4gICBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCAoaHR0cDovL2tlaXRoLXdvb2QubmFtZS9saWNlbmNlLmh0bWwpIGxpY2Vuc2UuIFxuICAgUGxlYXNlIGF0dHJpYnV0ZSB0aGUgYXV0aG9yIGlmIHlvdSB1c2UgaXQuICovXG5cbihmdW5jdGlvbigkKSB7IC8vIEhpZGUgc2NvcGUsIG5vICQgY29uZmxpY3RcblxuXHQvKiogSW1wbGVtZW50YXRpb24gb2YgdGhlIEp1bGlhbiBjYWxlbmRhci5cblx0XHRCYXNlZCBvbiBjb2RlIGZyb20gPGEgaHJlZj1cImh0dHA6Ly93d3cuZm91cm1pbGFiLmNoL2RvY3VtZW50cy9jYWxlbmRhci9cIj5odHRwOi8vd3d3LmZvdXJtaWxhYi5jaC9kb2N1bWVudHMvY2FsZW5kYXIvPC9hPi5cblx0XHRTZWUgYWxzbyA8YSBocmVmPVwiaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9KdWxpYW5fY2FsZW5kYXJcIj5odHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0p1bGlhbl9jYWxlbmRhcjwvYT4uXG5cdFx0QGNsYXNzIEp1bGlhbkNhbGVuZGFyXG5cdFx0QGF1Z21lbnRzIEJhc2VDYWxlbmRhclxuXHRcdEBwYXJhbSBbbGFuZ3VhZ2U9JyddIHtzdHJpbmd9IFRoZSBsYW5ndWFnZSBjb2RlIChkZWZhdWx0IEVuZ2xpc2gpIGZvciBsb2NhbGlzYXRpb24uICovXG5cdGZ1bmN0aW9uIEp1bGlhbkNhbGVuZGFyKGxhbmd1YWdlKSB7XG5cdFx0dGhpcy5sb2NhbCA9IHRoaXMucmVnaW9uYWxPcHRpb25zW2xhbmd1YWdlIHx8ICcnXSB8fCB0aGlzLnJlZ2lvbmFsT3B0aW9uc1snJ107XG5cdH1cblxuXHRKdWxpYW5DYWxlbmRhci5wcm90b3R5cGUgPSBuZXcgJC5jYWxlbmRhcnMuYmFzZUNhbGVuZGFyO1xuXG5cdCQuZXh0ZW5kKEp1bGlhbkNhbGVuZGFyLnByb3RvdHlwZSwge1xuXHRcdC8qKiBUaGUgY2FsZW5kYXIgbmFtZS5cblx0XHRcdEBtZW1iZXJvZiBKdWxpYW5DYWxlbmRhciAqL1xuXHRcdG5hbWU6ICdKdWxpYW4nLFxuXHRcdC8qKiBKdWxpYW4gZGF0ZSBvZiBzdGFydCBvZiBQZXJzaWFuIGVwb2NoOiAxIEphbnVhcnkgMDAwMSBBRCA9IDMwIERlY2VtYmVyIDAwMDEgQkNFLlxuXHRcdFx0QG1lbWJlcm9mIEp1bGlhbkNhbGVuZGFyICovXG5cdFx0amRFcG9jaDogMTcyMTQyMy41LFxuXHRcdC8qKiBEYXlzIHBlciBtb250aCBpbiBhIGNvbW1vbiB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIEp1bGlhbkNhbGVuZGFyICovXG5cdFx0ZGF5c1Blck1vbnRoOiBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0sXG5cdFx0LyoqIDxjb2RlPnRydWU8L2NvZGU+IGlmIGhhcyBhIHllYXIgemVybywgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEBtZW1iZXJvZiBKdWxpYW5DYWxlbmRhciAqL1xuXHRcdGhhc1llYXJaZXJvOiBmYWxzZSxcblx0XHQvKiogVGhlIG1pbmltdW0gbW9udGggbnVtYmVyLlxuXHRcdFx0QG1lbWJlcm9mIEp1bGlhbkNhbGVuZGFyICovXG5cdFx0bWluTW9udGg6IDEsXG5cdFx0LyoqIFRoZSBmaXJzdCBtb250aCBpbiB0aGUgeWVhci5cblx0XHRcdEBtZW1iZXJvZiBKdWxpYW5DYWxlbmRhciAqL1xuXHRcdGZpcnN0TW9udGg6IDEsXG5cdFx0LyoqIFRoZSBtaW5pbXVtIGRheSBudW1iZXIuXG5cdFx0XHRAbWVtYmVyb2YgSnVsaWFuQ2FsZW5kYXIgKi9cblx0XHRtaW5EYXk6IDEsXG5cblx0XHQvKiogTG9jYWxpc2F0aW9ucyBmb3IgdGhlIHBsdWdpbi5cblx0XHRcdEVudHJpZXMgYXJlIG9iamVjdHMgaW5kZXhlZCBieSB0aGUgbGFuZ3VhZ2UgY29kZSAoJycgYmVpbmcgdGhlIGRlZmF1bHQgVVMvRW5nbGlzaCkuXG5cdFx0XHRFYWNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLlxuXHRcdFx0QG1lbWJlcm9mIEp1bGlhbkNhbGVuZGFyXG5cdFx0XHRAcHJvcGVydHkgbmFtZSB7c3RyaW5nfSBUaGUgY2FsZW5kYXIgbmFtZS5cblx0XHRcdEBwcm9wZXJ0eSBlcG9jaHMge3N0cmluZ1tdfSBUaGUgZXBvY2ggbmFtZXMuXG5cdFx0XHRAcHJvcGVydHkgbW9udGhOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBtb250aHMgb2YgdGhlIHllYXIuXG5cdFx0XHRAcHJvcGVydHkgbW9udGhOYW1lc1Nob3J0IHtzdHJpbmdbXX0gVGhlIHNob3J0IG5hbWVzIG9mIHRoZSBtb250aHMgb2YgdGhlIHllYXIuXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXMge3N0cmluZ1tdfSBUaGUgbG9uZyBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lc1Nob3J0IHtzdHJpbmdbXX0gVGhlIHNob3J0IG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzTWluIHtzdHJpbmdbXX0gVGhlIG1pbmltYWwgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXG5cdFx0XHRAcHJvcGVydHkgZGF0ZUZvcm1hdCB7c3RyaW5nfSBUaGUgZGF0ZSBmb3JtYXQgZm9yIHRoaXMgY2FsZW5kYXIuXG5cdFx0XHRcdFx0U2VlIHRoZSBvcHRpb25zIG9uIDxhIGhyZWY9XCJCYXNlQ2FsZW5kYXIuaHRtbCNmb3JtYXREYXRlXCI+PGNvZGU+Zm9ybWF0RGF0ZTwvY29kZT48L2E+IGZvciBkZXRhaWxzLlxuXHRcdFx0QHByb3BlcnR5IGZpcnN0RGF5IHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlaywgc3RhcnRpbmcgYXQgMC5cblx0XHRcdEBwcm9wZXJ0eSBpc1JUTCB7bnVtYmVyfSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGxvY2FsaXNhdGlvbiByZWFkcyByaWdodC10by1sZWZ0LiAqL1xuXHRcdHJlZ2lvbmFsT3B0aW9uczogeyAvLyBMb2NhbGlzYXRpb25zXG5cdFx0XHQnJzoge1xuXHRcdFx0XHRuYW1lOiAnSnVsaWFuJyxcblx0XHRcdFx0ZXBvY2hzOiBbJ0JDJywgJ0FEJ10sXG5cdFx0XHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsXG5cdFx0XHRcdCdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddLFxuXHRcdFx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXSxcblx0XHRcdFx0ZGF5TmFtZXM6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXSxcblx0XHRcdFx0ZGF5TmFtZXNTaG9ydDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcblx0XHRcdFx0ZGF5TmFtZXNNaW46IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcblx0XHRcdFx0ZGF0ZUZvcm1hdDogJ21tL2RkL3l5eXknLFxuXHRcdFx0XHRmaXJzdERheTogMCxcblx0XHRcdFx0aXNSVEw6IGZhbHNlXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgaW4gYSBsZWFwIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgSnVsaWFuQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgaXMgYSBsZWFwIHllYXIsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdGxlYXBZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIHRoaXMubWluTW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhcik7XG5cdFx0XHR2YXIgeWVhciA9IChkYXRlLnllYXIoKSA8IDAgPyBkYXRlLnllYXIoKSArIDEgOiBkYXRlLnllYXIoKSk7IC8vIE5vIHllYXIgemVyb1xuXHRcdFx0cmV0dXJuICh5ZWFyICUgNCkgPT09IDA7XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgdGhlIHdlZWsgb2YgdGhlIHllYXIgZm9yIGEgZGF0ZSAtIElTTyA4NjAxLlxuXHRcdFx0QG1lbWJlcm9mIEp1bGlhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSB3ZWVrIG9mIHRoZSB5ZWFyLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHR3ZWVrT2ZZZWFyOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHQvLyBGaW5kIFRodXJzZGF5IG9mIHRoaXMgd2VlayBzdGFydGluZyBvbiBNb25kYXlcblx0XHRcdHZhciBjaGVja0RhdGUgPSB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSk7XG5cdFx0XHRjaGVja0RhdGUuYWRkKDQgLSAoY2hlY2tEYXRlLmRheU9mV2VlaygpIHx8IDcpLCAnZCcpO1xuXHRcdFx0cmV0dXJuIE1hdGguZmxvb3IoKGNoZWNrRGF0ZS5kYXlPZlllYXIoKSAtIDEpIC8gNykgKyAxO1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgbW9udGguXG5cdFx0XHRAbWVtYmVyb2YgSnVsaWFuQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgb2YgdGhlIG1vbnRoLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBtb250aC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBtb250aC95ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0ZGF5c0luTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZE1vbnRoKTtcblx0XHRcdHJldHVybiB0aGlzLmRheXNQZXJNb250aFtkYXRlLm1vbnRoKCkgLSAxXSArXG5cdFx0XHRcdChkYXRlLm1vbnRoKCkgPT09IDIgJiYgdGhpcy5sZWFwWWVhcihkYXRlLnllYXIoKSkgPyAxIDogMCk7XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgYSB3ZWVrIGRheS5cblx0XHRcdEBtZW1iZXJvZiBKdWxpYW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBhIHdlZWsgZGF5LCBmYWxzZSBpZiBub3QuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdHdlZWtEYXk6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdHJldHVybiAodGhpcy5kYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSkgfHwgNykgPCA2O1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIEp1bGlhbiBkYXRlIGVxdWl2YWxlbnQgZm9yIHRoaXMgZGF0ZSxcblx0XHRcdGkuZS4gZGF5cyBzaW5jZSBKYW51YXJ5IDEsIDQ3MTMgQkNFIEdyZWVud2ljaCBub29uLlxuXHRcdFx0QG1lbWJlcm9mIEp1bGlhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb252ZXJ0IG9yIHRoZSB5ZWFyIHRvIGNvbnZlcnQuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gY29udmVydC5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGNvbnZlcnQuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBlcXVpdmFsZW50IEp1bGlhbiBkYXRlLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHR0b0pEOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlKTtcblx0XHRcdHllYXIgPSBkYXRlLnllYXIoKTtcblx0XHRcdG1vbnRoID0gZGF0ZS5tb250aCgpO1xuXHRcdFx0ZGF5ID0gZGF0ZS5kYXkoKTtcblx0XHRcdGlmICh5ZWFyIDwgMCkgeyB5ZWFyKys7IH0gLy8gTm8geWVhciB6ZXJvXG5cdFx0XHQvLyBKZWFuIE1lZXVzIGFsZ29yaXRobSwgXCJBc3Ryb25vbWljYWwgQWxnb3JpdGhtc1wiLCAxOTkxXG5cdFx0XHRpZiAobW9udGggPD0gMikge1xuXHRcdFx0XHR5ZWFyLS07XG5cdFx0XHRcdG1vbnRoICs9IDEyO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIE1hdGguZmxvb3IoMzY1LjI1ICogKHllYXIgKyA0NzE2KSkgK1xuXHRcdFx0XHRNYXRoLmZsb29yKDMwLjYwMDEgKiAobW9udGggKyAxKSkgKyBkYXkgLSAxNTI0LjU7XG5cdFx0fSxcblxuXHRcdC8qKiBDcmVhdGUgYSBuZXcgZGF0ZSBmcm9tIGEgSnVsaWFuIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgSnVsaWFuQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSBqZCB7bnVtYmVyfSBUaGUgSnVsaWFuIGRhdGUgdG8gY29udmVydC5cblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgZXF1aXZhbGVudCBkYXRlLiAqL1xuXHRcdGZyb21KRDogZnVuY3Rpb24oamQpIHtcblx0XHRcdC8vIEplYW4gTWVldXMgYWxnb3JpdGhtLCBcIkFzdHJvbm9taWNhbCBBbGdvcml0aG1zXCIsIDE5OTFcblx0XHRcdHZhciBhID0gTWF0aC5mbG9vcihqZCArIDAuNSk7XG5cdFx0XHR2YXIgYiA9IGEgKyAxNTI0O1xuXHRcdFx0dmFyIGMgPSBNYXRoLmZsb29yKChiIC0gMTIyLjEpIC8gMzY1LjI1KTtcblx0XHRcdHZhciBkID0gTWF0aC5mbG9vcigzNjUuMjUgKiBjKTtcblx0XHRcdHZhciBlID0gTWF0aC5mbG9vcigoYiAtIGQpIC8gMzAuNjAwMSk7XG5cdFx0XHR2YXIgbW9udGggPSBlIC0gTWF0aC5mbG9vcihlIDwgMTQgPyAxIDogMTMpO1xuXHRcdFx0dmFyIHllYXIgPSBjIC0gTWF0aC5mbG9vcihtb250aCA+IDIgPyA0NzE2IDogNDcxNSk7XG5cdFx0XHR2YXIgZGF5ID0gYiAtIGQgLSBNYXRoLmZsb29yKDMwLjYwMDEgKiBlKTtcblx0XHRcdGlmICh5ZWFyIDw9IDApIHsgeWVhci0tOyB9IC8vIE5vIHllYXIgemVyb1xuXHRcdFx0cmV0dXJuIHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIEp1bGlhbiBjYWxlbmRhciBpbXBsZW1lbnRhdGlvblxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuID0gSnVsaWFuQ2FsZW5kYXI7XG5cbn0pKGpRdWVyeSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMuanVsaWFuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLmp1bGlhbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgSnVsaWFuIGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxyXG4gICBXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpIEF1Z3VzdCAyMDA5LlxyXG4gICBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCAoaHR0cDovL2tlaXRoLXdvb2QubmFtZS9saWNlbmNlLmh0bWwpIGxpY2Vuc2UuIFxyXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cclxuXHJcbihmdW5jdGlvbigkKSB7IC8vIEhpZGUgc2NvcGUsIG5vICQgY29uZmxpY3RcclxuXHJcblx0LyoqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBKdWxpYW4gY2FsZW5kYXIuXHJcblx0XHRCYXNlZCBvbiBjb2RlIGZyb20gPGEgaHJlZj1cImh0dHA6Ly93d3cuZm91cm1pbGFiLmNoL2RvY3VtZW50cy9jYWxlbmRhci9cIj5odHRwOi8vd3d3LmZvdXJtaWxhYi5jaC9kb2N1bWVudHMvY2FsZW5kYXIvPC9hPi5cclxuXHRcdFNlZSBhbHNvIDxhIGhyZWY9XCJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0p1bGlhbl9jYWxlbmRhclwiPmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSnVsaWFuX2NhbGVuZGFyPC9hPi5cclxuXHRcdEBjbGFzcyBKdWxpYW5DYWxlbmRhclxyXG5cdFx0QGF1Z21lbnRzIEJhc2VDYWxlbmRhclxyXG5cdFx0QHBhcmFtIFtsYW5ndWFnZT0nJ10ge3N0cmluZ30gVGhlIGxhbmd1YWdlIGNvZGUgKGRlZmF1bHQgRW5nbGlzaCkgZm9yIGxvY2FsaXNhdGlvbi4gKi9cclxuXHRmdW5jdGlvbiBKdWxpYW5DYWxlbmRhcihsYW5ndWFnZSkge1xyXG5cdFx0dGhpcy5sb2NhbCA9IHRoaXMucmVnaW9uYWxPcHRpb25zW2xhbmd1YWdlIHx8ICcnXSB8fCB0aGlzLnJlZ2lvbmFsT3B0aW9uc1snJ107XHJcblx0fVxyXG5cclxuXHRKdWxpYW5DYWxlbmRhci5wcm90b3R5cGUgPSBuZXcgJC5jYWxlbmRhcnMuYmFzZUNhbGVuZGFyO1xyXG5cclxuXHQkLmV4dGVuZChKdWxpYW5DYWxlbmRhci5wcm90b3R5cGUsIHtcclxuXHRcdC8qKiBUaGUgY2FsZW5kYXIgbmFtZS5cclxuXHRcdFx0QG1lbWJlcm9mIEp1bGlhbkNhbGVuZGFyICovXHJcblx0XHRuYW1lOiAnSnVsaWFuJyxcclxuXHRcdC8qKiBKdWxpYW4gZGF0ZSBvZiBzdGFydCBvZiBQZXJzaWFuIGVwb2NoOiAxIEphbnVhcnkgMDAwMSBBRCA9IDMwIERlY2VtYmVyIDAwMDEgQkNFLlxyXG5cdFx0XHRAbWVtYmVyb2YgSnVsaWFuQ2FsZW5kYXIgKi9cclxuXHRcdGpkRXBvY2g6IDE3MjE0MjMuNSxcclxuXHRcdC8qKiBEYXlzIHBlciBtb250aCBpbiBhIGNvbW1vbiB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgSnVsaWFuQ2FsZW5kYXIgKi9cclxuXHRcdGRheXNQZXJNb250aDogWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdLFxyXG5cdFx0LyoqIDxjb2RlPnRydWU8L2NvZGU+IGlmIGhhcyBhIHllYXIgemVybywgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QG1lbWJlcm9mIEp1bGlhbkNhbGVuZGFyICovXHJcblx0XHRoYXNZZWFyWmVybzogZmFsc2UsXHJcblx0XHQvKiogVGhlIG1pbmltdW0gbW9udGggbnVtYmVyLlxyXG5cdFx0XHRAbWVtYmVyb2YgSnVsaWFuQ2FsZW5kYXIgKi9cclxuXHRcdG1pbk1vbnRoOiAxLFxyXG5cdFx0LyoqIFRoZSBmaXJzdCBtb250aCBpbiB0aGUgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIEp1bGlhbkNhbGVuZGFyICovXHJcblx0XHRmaXJzdE1vbnRoOiAxLFxyXG5cdFx0LyoqIFRoZSBtaW5pbXVtIGRheSBudW1iZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBKdWxpYW5DYWxlbmRhciAqL1xyXG5cdFx0bWluRGF5OiAxLFxyXG5cclxuXHRcdC8qKiBMb2NhbGlzYXRpb25zIGZvciB0aGUgcGx1Z2luLlxyXG5cdFx0XHRFbnRyaWVzIGFyZSBvYmplY3RzIGluZGV4ZWQgYnkgdGhlIGxhbmd1YWdlIGNvZGUgKCcnIGJlaW5nIHRoZSBkZWZhdWx0IFVTL0VuZ2xpc2gpLlxyXG5cdFx0XHRFYWNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLlxyXG5cdFx0XHRAbWVtYmVyb2YgSnVsaWFuQ2FsZW5kYXJcclxuXHRcdFx0QHByb3BlcnR5IG5hbWUge3N0cmluZ30gVGhlIGNhbGVuZGFyIG5hbWUuXHJcblx0XHRcdEBwcm9wZXJ0eSBlcG9jaHMge3N0cmluZ1tdfSBUaGUgZXBvY2ggbmFtZXMuXHJcblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cclxuXHRcdFx0QHByb3BlcnR5IG1vbnRoTmFtZXNTaG9ydCB7c3RyaW5nW119IFRoZSBzaG9ydCBuYW1lcyBvZiB0aGUgbW9udGhzIG9mIHRoZSB5ZWFyLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXMge3N0cmluZ1tdfSBUaGUgbG9uZyBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cclxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lc01pbiB7c3RyaW5nW119IFRoZSBtaW5pbWFsIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF0ZUZvcm1hdCB7c3RyaW5nfSBUaGUgZGF0ZSBmb3JtYXQgZm9yIHRoaXMgY2FsZW5kYXIuXHJcblx0XHRcdFx0XHRTZWUgdGhlIG9wdGlvbnMgb24gPGEgaHJlZj1cIkJhc2VDYWxlbmRhci5odG1sI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4gZm9yIGRldGFpbHMuXHJcblx0XHRcdEBwcm9wZXJ0eSBmaXJzdERheSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWssIHN0YXJ0aW5nIGF0IDAuXHJcblx0XHRcdEBwcm9wZXJ0eSBpc1JUTCB7bnVtYmVyfSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGxvY2FsaXNhdGlvbiByZWFkcyByaWdodC10by1sZWZ0LiAqL1xyXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7IC8vIExvY2FsaXNhdGlvbnNcclxuXHRcdFx0Jyc6IHtcclxuXHRcdFx0XHRuYW1lOiAnSnVsaWFuJyxcclxuXHRcdFx0XHRlcG9jaHM6IFsnQkMnLCAnQUQnXSxcclxuXHRcdFx0XHRtb250aE5hbWVzOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLFxyXG5cdFx0XHRcdCdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddLFxyXG5cdFx0XHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLFxyXG5cdFx0XHRcdGRheU5hbWVzOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J10sXHJcblx0XHRcdFx0ZGF5TmFtZXNTaG9ydDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcclxuXHRcdFx0XHRkYXlOYW1lc01pbjogWydTdScsICdNbycsICdUdScsICdXZScsICdUaCcsICdGcicsICdTYSddLFxyXG5cdFx0XHRcdGRhdGVGb3JtYXQ6ICdtbS9kZC95eXl5JyxcclxuXHRcdFx0XHRmaXJzdERheTogMCxcclxuXHRcdFx0XHRpc1JUTDogZmFsc2VcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGluIGEgbGVhcCB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgSnVsaWFuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGlzIGEgbGVhcCB5ZWFyLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0bGVhcFllYXI6IGZ1bmN0aW9uKHllYXIpIHtcclxuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIpO1xyXG5cdFx0XHR2YXIgeWVhciA9IChkYXRlLnllYXIoKSA8IDAgPyBkYXRlLnllYXIoKSArIDEgOiBkYXRlLnllYXIoKSk7IC8vIE5vIHllYXIgemVyb1xyXG5cdFx0XHRyZXR1cm4gKHllYXIgJSA0KSA9PT0gMDtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB0aGUgd2VlayBvZiB0aGUgeWVhciBmb3IgYSBkYXRlIC0gSVNPIDg2MDEuXHJcblx0XHRcdEBtZW1iZXJvZiBKdWxpYW5DYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSB3ZWVrIG9mIHRoZSB5ZWFyLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0d2Vla09mWWVhcjogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHQvLyBGaW5kIFRodXJzZGF5IG9mIHRoaXMgd2VlayBzdGFydGluZyBvbiBNb25kYXlcclxuXHRcdFx0dmFyIGNoZWNrRGF0ZSA9IHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcclxuXHRcdFx0Y2hlY2tEYXRlLmFkZCg0IC0gKGNoZWNrRGF0ZS5kYXlPZldlZWsoKSB8fCA3KSwgJ2QnKTtcclxuXHRcdFx0cmV0dXJuIE1hdGguZmxvb3IoKGNoZWNrRGF0ZS5kYXlPZlllYXIoKSAtIDEpIC8gNykgKyAxO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgbW9udGguXHJcblx0XHRcdEBtZW1iZXJvZiBKdWxpYW5DYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIG9mIHRoZSBtb250aC5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIG1vbnRoLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgbW9udGgveWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZGF5c0luTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkTW9udGgpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbZGF0ZS5tb250aCgpIC0gMV0gK1xyXG5cdFx0XHRcdChkYXRlLm1vbnRoKCkgPT09IDIgJiYgdGhpcy5sZWFwWWVhcihkYXRlLnllYXIoKSkgPyAxIDogMCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgYSB3ZWVrIGRheS5cclxuXHRcdFx0QG1lbWJlcm9mIEp1bGlhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYSB3ZWVrIGRheSwgZmFsc2UgaWYgbm90LlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0d2Vla0RheTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHRyZXR1cm4gKHRoaXMuZGF5T2ZXZWVrKHllYXIsIG1vbnRoLCBkYXkpIHx8IDcpIDwgNjtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBKdWxpYW4gZGF0ZSBlcXVpdmFsZW50IGZvciB0aGlzIGRhdGUsXHJcblx0XHRcdGkuZS4gZGF5cyBzaW5jZSBKYW51YXJ5IDEsIDQ3MTMgQkNFIEdyZWVud2ljaCBub29uLlxyXG5cdFx0XHRAbWVtYmVyb2YgSnVsaWFuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gY29udmVydCBvciB0aGUgeWVhciB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gY29udmVydC5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gY29udmVydC5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZXF1aXZhbGVudCBKdWxpYW4gZGF0ZS5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdHRvSkQ6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcclxuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgZGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSk7XHJcblx0XHRcdHllYXIgPSBkYXRlLnllYXIoKTtcclxuXHRcdFx0bW9udGggPSBkYXRlLm1vbnRoKCk7XHJcblx0XHRcdGRheSA9IGRhdGUuZGF5KCk7XHJcblx0XHRcdGlmICh5ZWFyIDwgMCkgeyB5ZWFyKys7IH0gLy8gTm8geWVhciB6ZXJvXHJcblx0XHRcdC8vIEplYW4gTWVldXMgYWxnb3JpdGhtLCBcIkFzdHJvbm9taWNhbCBBbGdvcml0aG1zXCIsIDE5OTFcclxuXHRcdFx0aWYgKG1vbnRoIDw9IDIpIHtcclxuXHRcdFx0XHR5ZWFyLS07XHJcblx0XHRcdFx0bW9udGggKz0gMTI7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIE1hdGguZmxvb3IoMzY1LjI1ICogKHllYXIgKyA0NzE2KSkgK1xyXG5cdFx0XHRcdE1hdGguZmxvb3IoMzAuNjAwMSAqIChtb250aCArIDEpKSArIGRheSAtIDE1MjQuNTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIGZyb20gYSBKdWxpYW4gZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIEp1bGlhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSBqZCB7bnVtYmVyfSBUaGUgSnVsaWFuIGRhdGUgdG8gY29udmVydC5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXHJcblx0XHRmcm9tSkQ6IGZ1bmN0aW9uKGpkKSB7XHJcblx0XHRcdC8vIEplYW4gTWVldXMgYWxnb3JpdGhtLCBcIkFzdHJvbm9taWNhbCBBbGdvcml0aG1zXCIsIDE5OTFcclxuXHRcdFx0dmFyIGEgPSBNYXRoLmZsb29yKGpkICsgMC41KTtcclxuXHRcdFx0dmFyIGIgPSBhICsgMTUyNDtcclxuXHRcdFx0dmFyIGMgPSBNYXRoLmZsb29yKChiIC0gMTIyLjEpIC8gMzY1LjI1KTtcclxuXHRcdFx0dmFyIGQgPSBNYXRoLmZsb29yKDM2NS4yNSAqIGMpO1xyXG5cdFx0XHR2YXIgZSA9IE1hdGguZmxvb3IoKGIgLSBkKSAvIDMwLjYwMDEpO1xyXG5cdFx0XHR2YXIgbW9udGggPSBlIC0gTWF0aC5mbG9vcihlIDwgMTQgPyAxIDogMTMpO1xyXG5cdFx0XHR2YXIgeWVhciA9IGMgLSBNYXRoLmZsb29yKG1vbnRoID4gMiA/IDQ3MTYgOiA0NzE1KTtcclxuXHRcdFx0dmFyIGRheSA9IGIgLSBkIC0gTWF0aC5mbG9vcigzMC42MDAxICogZSk7XHJcblx0XHRcdGlmICh5ZWFyIDw9IDApIHsgeWVhci0tOyB9IC8vIE5vIHllYXIgemVyb1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5uZXdEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHQvLyBKdWxpYW4gY2FsZW5kYXIgaW1wbGVtZW50YXRpb25cclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuID0gSnVsaWFuQ2FsZW5kYXI7XHJcblxyXG59KShqUXVlcnkpOyJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.lang.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.lang.js index 77c64e59414..78994631ce7 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.lang.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.lang.js @@ -1709,4 +1709,4 @@ } })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMubGFuZy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMubGFuZy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIENhbGVuZGFycyBsb2NhbGlzYXRpb25zIGZvciBqUXVlcnkgdjIuMC4xLlxuICAgV3JpdHRlbiBieSBLZWl0aCBXb29kIChrYndvb2R7YXR9aWluZXQuY29tLmF1KSBBdWd1c3QgMjAwOS5cbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cbi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEFmcmlrYWFucyBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IFJlbmllciBQcmV0b3JpdXMgYW5kIFJ1ZWRpZ2VyIFRoaWVkZS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYWYnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydKYW51YXJpZScsJ0ZlYnJ1YXJpZScsJ01hYXJ0JywnQXByaWwnLCdNZWknLCdKdW5pZScsXG5cdFx0J0p1bGllJywnQXVndXN0dXMnLCdTZXB0ZW1iZXInLCdPa3RvYmVyJywnTm92ZW1iZXInLCdEZXNlbWJlciddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCAnRmViJywgJ01ydCcsICdBcHInLCAnTWVpJywgJ0p1bicsXG5cdFx0J0p1bCcsICdBdWcnLCAnU2VwJywgJ09rdCcsICdOb3YnLCAnRGVzJ10sXG5cdFx0ZGF5TmFtZXM6IFsnU29uZGFnJywgJ01hYW5kYWcnLCAnRGluc2RhZycsICdXb2Vuc2RhZycsICdEb25kZXJkYWcnLCAnVnJ5ZGFnJywgJ1NhdGVyZGFnJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydTb24nLCAnTWFhbicsICdEaW5zJywgJ1dvZW5zJywgJ0RvbicsICdWcnknLCAnU2F0J10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnU28nLCdNYScsJ0RpJywnV28nLCdEbycsJ1ZyJywnU2EnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydhZiddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYWYnXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEFtaGFyaWMgKOGKoOGIm+GIreGKmykgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgTGV5dSBTaXNheS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYW0nXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWyfhjIPhipXhi4vhiKonLCfhjYjhiaXhiK3hi4vhiKonLCfhiJvhiK3hib0nLCfhiqDhjZXhiKrhiI0nLCfhiJzhi60nLCfhjIHhipUnLFxuXHRcdCfhjIHhiIvhi60nLCfhiqbhjIjhiLXhibUnLCfhiLThjZXhibThiJ3hiaDhiK0nLCfhiqbhiq3hibbhiaDhiK0nLCfhipbhiazhiJ3hiaDhiK0nLCfhi7LhiLThiJ3hiaDhiK0nXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn4YyD4YqV4YuLJywgJ+GNiOGJpeGIrScsICfhiJvhiK3hib0nLCAn4Yqg4Y2V4YiqJywgJ+GInOGLrScsICfhjIHhipUnLFxuXHRcdCfhjIHhiIvhi60nLCAn4Yqm4YyI4Yi1JywgJ+GItOGNleGJtCcsICfhiqbhiq3hibYnLCAn4YqW4Yms4YidJywgJ+GLsuGItOGInSddLFxuXHRcdGRheU5hbWVzOiBbJ+GIsOGKleGLtOGLrScsICfhiJjhipXhi7Thi60nLCAn4Ym14Yup4Yi14Yu04YutJywgJ+GLjOGKleGIteGLtOGLrScsICfhibDhiK3hiLDhi7Thi60nLCAn4Y2N4Yir4Yut4Yu04YutJywgJ+GIs+GJsOGIreGLtOGLrSddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn4Yiw4YqV4Yu0JywgJ+GImOGKleGLtCcsICfhibXhi6nhiLUnLCAn4YuM4YqV4Yi1JywgJ+GJsOGIreGIsCcsICfhjY3hiKvhi60nLCAn4Yiz4Ymw4YitJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn4Yiw4YqVJywgJ+GImOGKlScsICfhibXhi6knLCAn4YuM4YqVJywgJ+GJsOGIrScsICfhjY3hiKsnLCAn4Yiz4YmwJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYW0nXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FtJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBBbGdlcmlhbiAoYW5kIFR1bmlzaWFuKSBBcmFiaWMgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgTW9oYW1lZCBDaGVyaWYgQk9VQ0hFTEFHSEVNIC0tIGNoZXJpZmJvdWNoZWxhZ2hlbUB5YWhvby5mciAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydhci1EWiddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ9is2KfZhtmB2YonLCAn2YHZitmB2LHZiicsICfZhdin2LHYsycsICfYo9mB2LHZitmEJywgJ9mF2KfZiicsICfYrNmI2KfZhicsXG5cdFx0J9is2YjZitmE2YrYqScsICfYo9mI2KonLCAn2LPYqNiq2YXYqNixJywn2KPZg9iq2YjYqNixJywgJ9mG2YjZgdmF2KjYsScsICfYr9mK2LPZhdio2LEnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnMTAnLCAnMTEnLCAnMTInXSxcblx0XHRkYXlOYW1lczogWyfYp9mE2KPYrdivJywgJ9in2YTYp9ir2YbZitmGJywgJ9in2YTYq9mE2KfYq9in2KEnLCAn2KfZhNij2LHYqNi52KfYoScsICfYp9mE2K7ZhdmK2LMnLCAn2KfZhNis2YXYudipJywgJ9in2YTYs9io2KonXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9in2YTYo9it2K8nLCAn2KfZhNin2KvZhtmK2YYnLCAn2KfZhNir2YTYp9ir2KfYoScsICfYp9mE2KPYsdio2LnYp9ihJywgJ9in2YTYrtmF2YrYsycsICfYp9mE2KzZhdi52KknLCAn2KfZhNiz2KjYqiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ9in2YTYo9it2K8nLCAn2KfZhNin2KvZhtmK2YYnLCAn2KfZhNir2YTYp9ir2KfYoScsICfYp9mE2KPYsdio2LnYp9ihJywgJ9in2YTYrtmF2YrYsycsICfYp9mE2KzZhdi52KknLCAn2KfZhNiz2KjYqiddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogNixcblx0XHRpc1JUTDogdHJ1ZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXItRFonXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FyLURaJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBBcmFiaWMgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgTWFobW91ZCBLaGFsZWQgLS0gbWFobW91ZC5raGFsZWRAYmFkcml0LmNvbVxuICAgTk9URTogbW9udGhOYW1lcyBhcmUgdGhlIG5ldyBtb250aHMgbmFtZXMgKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXItRUcnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWyfZitmG2KfZitixJywgJ9mB2KjYsdin2YrYsScsICfZhdin2LHYsycsICfYpdio2LHZitmEJywgJ9mF2KfZitmIJywgJ9mK2YjZhtmK2KknLFxuXHRcdCfZitmI2YTZitmIJywgJ9ij2LrYs9i32LMnLCAn2LPYqNiq2YXYqNixJywgJ9ij2YPYqtmI2KjYsScsICfZhtmI2YHZhdio2LEnLCAn2K/Zitiz2YXYqNixJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJzEwJywgJzExJywgJzEyJ10sXG5cdFx0ZGF5TmFtZXM6ICBbJ9in2YTYo9it2K8nLCAn2KfZhNin2KvZhtmK2YYnLCAn2KfZhNir2YTYp9ir2KfYoScsICfYp9mE2KPYsdio2LnYp9ihJywgJ9in2YTYrtmF2YrYsycsICfYp9mE2KzZhdi52KknLCAn2KfZhNiz2KjYqiddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn2KPYrdivJywgJ9in2KvZhtmK2YYnLCAn2KvZhNin2KvYp9ihJywgJ9ij2LHYqNi52KfYoScsICfYrtmF2YrYsycsICfYrNmF2LnYqScsICfYs9io2KonXSxcblx0XHRkYXlOYW1lc01pbjogWyfYo9it2K8nLCAn2KfYq9mG2YrZhicsICfYq9mE2KfYq9in2KEnLCAn2KPYsdio2LnYp9ihJywgJ9iu2YXZitizJywgJ9is2YXYudipJywgJ9iz2KjYqiddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogNixcblx0XHRpc1JUTDogdHJ1ZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXItRUcnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FyLUVHJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBBcmFiaWMgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgS2hhbGVkIEFsIEhvcmFuaSAtLSDYrtin2YTYryDYp9mE2K3ZiNix2KfZhtmKIC0tIGtva28uZHdAZ21haWwuY29tLiAqL1xuLyogTk9URTogbW9udGhOYW1lcyBhcmUgdGhlIG9yaWdpbmFsIG1vbnRocyBuYW1lcyBhbmQgdGhleSBhcmUgdGhlIEFyYWJpYyBuYW1lcyxcbiAgIG5vdCB0aGUgbmV3IG1vbnRocyBuYW1lINmB2KjYsdin2YrYsSAtINmK2YbYp9mK2LEgYW5kIHRoZXJlIGlzbid0IGFueSBBcmFiaWMgcm9vdHMgZm9yIHRoZXNlIG1vbnRocyAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydhciddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ9mD2KfZhtmI2YYg2KfZhNir2KfZhtmKJywgJ9i02KjYp9i3JywgJ9ii2LDYp9ixJywgJ9mG2YrYs9in2YYnLCAn2KLYsNin2LEnLCAn2K3YstmK2LHYp9mGJyxcblx0XHQn2KrZhdmI2LInLCAn2KLYqCcsICfYo9mK2YTZiNmEJywgJ9iq2LTYsdmK2YYg2KfZhNij2YjZhCcsICfYqti02LHZitmGINin2YTYq9in2YbZiicsICfZg9in2YbZiNmGINin2YTYo9mI2YQnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnMTAnLCAnMTEnLCAnMTInXSxcblx0XHRkYXlOYW1lczogWyfYp9mE2KPYrdivJywgJ9in2YTYp9ir2YbZitmGJywgJ9in2YTYq9mE2KfYq9in2KEnLCAn2KfZhNij2LHYqNi52KfYoScsICfYp9mE2K7ZhdmK2LMnLCAn2KfZhNis2YXYudipJywgJ9in2YTYs9io2KonXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9in2YTYo9it2K8nLCAn2KfZhNin2KvZhtmK2YYnLCAn2KfZhNir2YTYp9ir2KfYoScsICfYp9mE2KPYsdio2LnYp9ihJywgJ9in2YTYrtmF2YrYsycsICfYp9mE2KzZhdi52KknLCAn2KfZhNiz2KjYqiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ9in2YTYo9it2K8nLCAn2KfZhNin2KvZhtmK2YYnLCAn2KfZhNir2YTYp9ir2KfYoScsICfYp9mE2KPYsdio2LnYp9ihJywgJ9in2YTYrtmF2YrYsycsICfYp9mE2KzZhdi52KknLCAn2KfZhNiz2KjYqiddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogNixcblx0XHRpc1JUTDogdHJ1ZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXInXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FyJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBBemVyYmFpamFuaSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEphbWlsIE5hamFmb3YgKG5lY2Vmb3YzM0BnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydheiddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ1lhbnZhcicsJ0ZldnJhbCcsJ01hcnQnLCdBcHJlbCcsJ01heScsJ8SweXVuJyxcblx0XHQnxLB5dWwnLCdBdnF1c3QnLCdTZW50eWFicicsJ09rdHlhYnInLCdOb3lhYnInLCdEZWthYnInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnWWFuJywnRmV2JywnTWFyJywnQXByJywnTWF5JywnxLB5dW4nLFxuXHRcdCfEsHl1bCcsJ0F2cScsJ1NlbicsJ09rdCcsJ05veScsJ0RlayddLFxuXHRcdGRheU5hbWVzOiBbJ0JhemFyJywnQmF6YXIgZXJ0yZlzaScsJ8OHyZlyxZ/JmW5iyZkgYXjFn2FtxLEnLCfDh8mZcsWfyZluYsmZJywnQ8O8bcmZIGF4xZ9hbcSxJywnQ8O8bcmZJywnxZ7JmW5iyZknXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0InLCdCZScsJ8OHYScsJ8OHJywnQ2EnLCdDJywnxZ4nXSxcblx0XHRkYXlOYW1lc01pbjogWydCJywnQicsJ8OHJywn0KEnLCfDhycsJ0MnLCfFniddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2F6J10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydheiddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQnVsZ2FyaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgU3RveWFuIEt5b3NldiAoaHR0cDovL3N2ZXN0Lm9yZykuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2JnJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuICAgICAgICBtb250aE5hbWVzOiBbJ9Cv0L3Rg9Cw0YDQuCcsJ9Ck0LXQstGA0YPQsNGA0LgnLCfQnNCw0YDRgicsJ9CQ0L/RgNC40LsnLCfQnNCw0LknLCfQrtC90LgnLFxuICAgICAgICAn0K7Qu9C4Jywn0JDQstCz0YPRgdGCJywn0KHQtdC/0YLQtdC80LLRgNC4Jywn0J7QutGC0L7QvNCy0YDQuCcsJ9Cd0L7QtdC80LLRgNC4Jywn0JTQtdC60LXQvNCy0YDQuCddLFxuICAgICAgICBtb250aE5hbWVzU2hvcnQ6IFsn0K/QvdGDJywn0KTQtdCyJywn0JzQsNGAJywn0JDQv9GAJywn0JzQsNC5Jywn0K7QvdC4JyxcbiAgICAgICAgJ9Cu0LvQuCcsJ9CQ0LLQsycsJ9Ch0LXQvycsJ9Ce0LrRgicsJ9Cd0L7QsicsJ9CU0LXQuiddLFxuICAgICAgICBkYXlOYW1lczogWyfQndC10LTQtdC70Y8nLCfQn9C+0L3QtdC00LXQu9C90LjQuicsJ9CS0YLQvtGA0L3QuNC6Jywn0KHRgNGP0LTQsCcsJ9Cn0LXRgtCy0YrRgNGC0YrQuicsJ9Cf0LXRgtGK0LonLCfQodGK0LHQvtGC0LAnXSxcbiAgICAgICAgZGF5TmFtZXNTaG9ydDogWyfQndC10LQnLCfQn9C+0L0nLCfQktGC0L4nLCfQodGA0Y8nLCfQp9C10YInLCfQn9C10YInLCfQodGK0LEnXSxcbiAgICAgICAgZGF5TmFtZXNNaW46IFsn0J3QtScsJ9Cf0L4nLCfQktGCJywn0KHRgCcsJ9Cn0LUnLCfQn9C1Jywn0KHRiiddLFxuICAgICAgICBkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG4gICAgICAgIGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYmcnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2JnJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBCb3NuaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIEtlbmFuIEtvbmpvLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydicyddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcicsJ0ZlYnJ1YXInLCdNYXJ0JywnQXByaWwnLCdNYWonLCdKdW5pJyxcblx0XHQnSnVsaScsJ0F1Z3VzdCcsJ1NlcHRlbWJhcicsJ09rdG9iYXInLCdOb3ZlbWJhcicsJ0RlY2VtYmFyJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01haicsJ0p1bicsXG5cdFx0J0p1bCcsJ0F1ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RlYyddLFxuXHRcdGRheU5hbWVzOiBbJ05lZGVsamEnLCdQb25lZGVsamFrJywnVXRvcmFrJywnU3JpamVkYScsJ8SMZXR2cnRhaycsJ1BldGFrJywnU3Vib3RhJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydOZWQnLCdQb24nLCdVdG8nLCdTcmknLCfEjGV0JywnUGV0JywnU3ViJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnTmUnLCdQbycsJ1V0JywnU3InLCfEjGUnLCdQZScsJ1N1J10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2JzJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydicyddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQ2F0YWxhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0ZXJzOiAoam9hbi5sZW9uQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2NhJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnR2VuZXInLCdGZWJyZXInLCdNYXImY2NlZGlsOycsJ0FicmlsJywnTWFpZycsJ0p1bnknLFxuXHRcdCdKdWxpb2wnLCdBZ29zdCcsJ1NldGVtYnJlJywnT2N0dWJyZScsJ05vdmVtYnJlJywnRGVzZW1icmUnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnR2VuJywnRmViJywnTWFyJywnQWJyJywnTWFpJywnSnVuJyxcblx0XHQnSnVsJywnQWdvJywnU2V0JywnT2N0JywnTm92JywnRGVzJ10sXG5cdFx0ZGF5TmFtZXM6IFsnRGl1bWVuZ2UnLCdEaWxsdW5zJywnRGltYXJ0cycsJ0RpbWVjcmVzJywnRGlqb3VzJywnRGl2ZW5kcmVzJywnRGlzc2FidGUnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0R1ZycsJ0RsbicsJ0RtdCcsJ0RtYycsJ0RqcycsJ0R2bicsJ0RzYiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ0RnJywnRGwnLCdEdCcsJ0RjJywnRGonLCdEdicsJ0RzJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snY2EnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2NhJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBDemVjaCBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IFRvbWFzIE11bGxlciAodG9tYXNAdG9tYXMtbXVsbGVyLm5ldCkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2NzJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnbGVkZW4nLCfDum5vcicsJ2LFmWV6ZW4nLCdkdWJlbicsJ2t2xJt0ZW4nLCfEjWVydmVuJyxcbiAgICAgICAgJ8SNZXJ2ZW5lYycsJ3NycGVuJywnesOhxZnDrScsJ8WZw61qZW4nLCdsaXN0b3BhZCcsJ3Byb3NpbmVjJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ2xlZCcsJ8O6bm8nLCdixZllJywnZHViJywna3bEmycsJ8SNZXInLFxuXHRcdCfEjXZjJywnc3JwJywnesOhxZknLCfFmcOtaicsJ2xpcycsJ3BybyddLFxuXHRcdGRheU5hbWVzOiBbJ25lZMSbbGUnLCAncG9uZMSbbMOtJywgJ8O6dGVyw70nLCAnc3TFmWVkYScsICfEjXR2cnRlaycsICdww6F0ZWsnLCAnc29ib3RhJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyduZScsICdwbycsICfDunQnLCAnc3QnLCAnxI10JywgJ3DDoScsICdzbyddLFxuXHRcdGRheU5hbWVzTWluOiBbJ25lJywncG8nLCfDunQnLCdzdCcsJ8SNdCcsJ3DDoScsJ3NvJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snY3MnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2NzJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBEYW5pc2ggbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBKYW4gQ2hyaXN0ZW5zZW4gKCBkZWxldGVzdHVmZkBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydkYSddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcbiAgICAgICAgbW9udGhOYW1lczogWydKYW51YXInLCdGZWJydWFyJywnTWFydHMnLCdBcHJpbCcsJ01haicsJ0p1bmknLFxuICAgICAgICAnSnVsaScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09rdG9iZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sXG4gICAgICAgIG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWonLCdKdW4nLFxuICAgICAgICAnSnVsJywnQXVnJywnU2VwJywnT2t0JywnTm92JywnRGVjJ10sXG5cdFx0ZGF5TmFtZXM6IFsnU8O4bmRhZycsJ01hbmRhZycsJ1RpcnNkYWcnLCdPbnNkYWcnLCdUb3JzZGFnJywnRnJlZGFnJywnTMO4cmRhZyddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU8O4bicsJ01hbicsJ1RpcicsJ09ucycsJ1RvcicsJ0ZyZScsJ0zDuHInXSxcblx0XHRkYXlOYW1lc01pbjogWydTw7gnLCdNYScsJ1RpJywnT24nLCdUbycsJ0ZyJywnTMO4J10sXG4gICAgICAgIGRhdGVGb3JtYXQ6ICdkZC1tbS15eXl5Jyxcblx0XHRmaXJzdERheTogMCxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2RhJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydkYSddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU3dpc3MtR2VybWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgRG91Z2xhcyBKb3NlICYgSnVlcmcgTWVpZXIuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2RlLUNIJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyJywnRmVicnVhcicsJ03DpHJ6JywnQXByaWwnLCdNYWknLCdKdW5pJyxcblx0XHQnSnVsaScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09rdG9iZXInLCdOb3ZlbWJlcicsJ0RlemVtYmVyJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ03DpHInLCdBcHInLCdNYWknLCdKdW4nLFxuXHRcdCdKdWwnLCdBdWcnLCdTZXAnLCdPa3QnLCdOb3YnLCdEZXonXSxcblx0XHRkYXlOYW1lczogWydTb25udGFnJywnTW9udGFnJywnRGllbnN0YWcnLCdNaXR0d29jaCcsJ0Rvbm5lcnN0YWcnLCdGcmVpdGFnJywnU2Ftc3RhZyddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU28nLCdNbycsJ0RpJywnTWknLCdEbycsJ0ZyJywnU2EnXSxcblx0XHRkYXlOYW1lc01pbjogWydTbycsJ01vJywnRGknLCdNaScsJ0RvJywnRnInLCdTYSddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2RlLUNIJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydkZS1DSCddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgR2VybWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTWlsaWFuIFdvbGZmIChtYWlsQG1pbGlhbncuZGUpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydkZSddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcicsJ0ZlYnJ1YXInLCdNw6RyeicsJ0FwcmlsJywnTWFpJywnSnVuaScsXG5cdFx0J0p1bGknLCdBdWd1c3QnLCdTZXB0ZW1iZXInLCdPa3RvYmVyJywnTm92ZW1iZXInLCdEZXplbWJlciddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNw6RyJywnQXByJywnTWFpJywnSnVuJyxcblx0XHQnSnVsJywnQXVnJywnU2VwJywnT2t0JywnTm92JywnRGV6J10sXG5cdFx0ZGF5TmFtZXM6IFsnU29ubnRhZycsJ01vbnRhZycsJ0RpZW5zdGFnJywnTWl0dHdvY2gnLCdEb25uZXJzdGFnJywnRnJlaXRhZycsJ1NhbXN0YWcnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ1NvJywnTW8nLCdEaScsJ01pJywnRG8nLCdGcicsJ1NhJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnU28nLCdNbycsJ0RpJywnTWknLCdEbycsJ0ZyJywnU2EnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydkZSddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZGUnXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEdyZWVrIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgQWxleCBDaWNvdmljIChodHRwOi8vd3d3LmFsZXhjaWNvdmljLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VsJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnzpnOsc69zr/Phc6sz4HOuc6/z4InLCfOps61zrLPgc6/z4XOrM+BzrnOv8+CJywnzpzOrM+Bz4TOuc6/z4InLCfOkc+Az4HOr867zrnOv8+CJywnzpzOrM65zr/PgicsJ86Zzr/Pjc69zrnOv8+CJyxcblx0XHQnzpnOv8+NzrvOuc6/z4InLCfOkc+NzrPOv8+Fz4PPhM6/z4InLCfOo861z4DPhM6tzrzOss+BzrnOv8+CJywnzp/Ous+Ez47Oss+BzrnOv8+CJywnzp3Ov86tzrzOss+BzrnOv8+CJywnzpTOtc66zq3OvM6yz4HOuc6/z4InXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnzpnOsc69JywnzqbOtc6yJywnzpzOsc+BJywnzpHPgM+BJywnzpzOsc65JywnzpnOv8+Fzr0nLFxuXHRcdCfOmc6/z4XOuycsJ86Rz4XOsycsJ86jzrXPgCcsJ86fzrrPhCcsJ86dzr/OtScsJ86UzrXOuiddLFxuXHRcdGRheU5hbWVzOiBbJ86az4XPgc65zrHOus6uJywnzpTOtc+Fz4TOrc+BzrEnLCfOpM+Bzq/PhM63JywnzqTOtc+EzqzPgc+EzrcnLCfOoM6tzrzPgM+EzrcnLCfOoM6xz4HOsc+DzrrOtc+Fzq4nLCfOo86szrLOss6xz4TOvyddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnzprPhc+BJywnzpTOtc+FJywnzqTPgc65JywnzqTOtc+EJywnzqDOtc68JywnzqDOsc+BJywnzqPOsc6yJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnzprPhScsJ86UzrUnLCfOpM+BJywnzqTOtScsJ86gzrUnLCfOoM6xJywnzqPOsSddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VsJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbCddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRW5nbGlzaC9BdXN0cmFsaWEgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgQmFzZWQgb24gZW4tR0IuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VuLUFVJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyeScsJ0ZlYnJ1YXJ5JywnTWFyY2gnLCdBcHJpbCcsJ01heScsJ0p1bmUnLFxuXHRcdCdKdWx5JywnQXVndXN0JywnU2VwdGVtYmVyJywnT2N0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLFxuXHRcdCdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLFxuXHRcdGRheU5hbWVzOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcblx0XHRkYXlOYW1lc01pbjogWydTdScsJ01vJywnVHUnLCdXZScsJ1RoJywnRnInLCdTYSddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VuLUFVJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbi1BVSddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRW5nbGlzaC9VSyBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBTdHVhcnQuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VuLUdCJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyeScsJ0ZlYnJ1YXJ5JywnTWFyY2gnLCdBcHJpbCcsJ01heScsJ0p1bmUnLFxuXHRcdCdKdWx5JywnQXVndXN0JywnU2VwdGVtYmVyJywnT2N0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLFxuXHRcdCdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLFxuXHRcdGRheU5hbWVzOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcblx0XHRkYXlOYW1lc01pbjogWydTdScsJ01vJywnVHUnLCdXZScsJ1RoJywnRnInLCdTYSddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VuLUdCJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbi1HQiddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRW5nbGlzaC9OZXcgWmVhbGFuZCBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBCYXNlZCBvbiBlbi1HQi4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZW4tTlonXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydKYW51YXJ5JywnRmVicnVhcnknLCdNYXJjaCcsJ0FwcmlsJywnTWF5JywnSnVuZScsXG5cdFx0J0p1bHknLCdBdWd1c3QnLCdTZXB0ZW1iZXInLCdPY3RvYmVyJywnTm92ZW1iZXInLCdEZWNlbWJlciddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsXG5cdFx0J0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG5cdFx0ZGF5TmFtZXM6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxuXHRcdGRheU5hbWVzTWluOiBbJ1N1JywnTW8nLCdUdScsJ1dlJywnVGgnLCdGcicsJ1NhJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZW4tTlonXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VuLU5aJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBFc3BlcmFudG8gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBPbGl2aWVyIE0uIChvbGl2aWVyd2ViQGlmcmFuY2UuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZW8nXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydKYW51YXJvJywnRmVicnVhcm8nLCdNYXJ0bycsJ0FwcmlsbycsJ01ham8nLCdKdW5pbycsXG5cdFx0J0p1bGlvJywnQcWtZ3VzdG8nLCdTZXB0ZW1icm8nLCdPa3RvYnJvJywnTm92ZW1icm8nLCdEZWNlbWJybyddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWonLCdKdW4nLFxuXHRcdCdKdWwnLCdBxa1nJywnU2VwJywnT2t0JywnTm92JywnRGVjJ10sXG5cdFx0ZGF5TmFtZXM6IFsnRGltYW7EiW8nLCdMdW5kbycsJ01hcmRvJywnTWVya3JlZG8nLCfEtGHFrWRvJywnVmVuZHJlZG8nLCdTYWJhdG8nXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0RpbScsJ0x1bicsJ01hcicsJ01lcicsJ8S0YcWtJywnVmVuJywnU2FiJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnRGknLCdMdScsJ01hJywnTWUnLCfEtGEnLCdWZScsJ1NhJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAwLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZW8nXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VvJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBTcGFuaXNoL0FyZ2VudGluYSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEVzdGViYW4gQWNvc3RhIFZpbGxhZmFuZSAoZXN0ZWJhbi5hY29zdGFAZ2xvYmFudC5jb20pIG9mIEdsb2JhbnQgKGh0dHA6Ly93d3cuZ2xvYmFudC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlcy1BUiddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0VuZXJvJywnRmVicmVybycsJ01hcnpvJywnQWJyaWwnLCdNYXlvJywnSnVuaW8nLFxuXHRcdCdKdWxpbycsJ0Fnb3N0bycsJ1NlcHRpZW1icmUnLCdPY3R1YnJlJywnTm92aWVtYnJlJywnRGljaWVtYnJlJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0VuZScsJ0ZlYicsJ01hcicsJ0FicicsJ01heScsJ0p1bicsXG5cdFx0J0p1bCcsJ0FnbycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RpYyddLFxuXHRcdGRheU5hbWVzOiBbJ0RvbWluZ28nLCdMdW5lcycsJ01hcnRlcycsJ01pw6lyY29sZXMnLCdKdWV2ZXMnLCdWaWVybmVzJywnU8OhYmFkbyddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRG9tJywnTHVuJywnTWFyJywnTWnDqScsJ0p1dicsJ1ZpZScsJ1PDoWInXSxcblx0XHRkYXlOYW1lc01pbjogWydEbycsJ0x1JywnTWEnLCdNaScsJ0p1JywnVmknLCdTw6EnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDAsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlcy1BUiddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXMtQVInXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFNwYW5pc2gvUGVyw7ogbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBGaXNjaGVyIFRpcmFkbyAoZmlzaGRldkBnbG9iYW50LmNvbSkgb2YgQVNJWCAoaHR0cDovL3d3dy5hc2l4b25saW5lLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VzLVBFJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnRW5lcm8nLCdGZWJyZXJvJywnTWFyem8nLCdBYnJpbCcsJ01heW8nLCdKdW5pbycsXG5cdFx0J0p1bGlvJywnQWdvc3RvJywnU2VwdGllbWJyZScsJ09jdHVicmUnLCdOb3ZpZW1icmUnLCdEaWNpZW1icmUnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnRW5lJywnRmViJywnTWFyJywnQWJyJywnTWF5JywnSnVuJyxcblx0XHQnSnVsJywnQWdvJywnU2VwJywnT2N0JywnTm92JywnRGljJ10sXG5cdFx0ZGF5TmFtZXM6IFsnRG9taW5nbycsJ0x1bmVzJywnTWFydGVzJywnTWnDqXJjb2xlcycsJ0p1ZXZlcycsJ1ZpZXJuZXMnLCdTw6FiYWRvJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydEb20nLCdMdW4nLCdNYXInLCdNacOpJywnSnVlJywnVmllJywnU2FiJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnRG8nLCdMdScsJ01hJywnTWknLCdKdScsJ1ZpJywnU2EnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDAsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlcy1QRSddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXMtUEUnXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFNwYW5pc2ggbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgVHJhZHVjaWRvIHBvciBWZXN0ZXIgKHh2ZXN0ZXJAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXMnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydFbmVybycsJ0ZlYnJlcm8nLCdNYXJ6bycsJ0FicmlsJywnTWF5bycsJ0p1bmlvJyxcblx0XHQnSnVsaW8nLCdBZ29zdG8nLCdTZXB0aWVtYnJlJywnT2N0dWJyZScsJ05vdmllbWJyZScsJ0RpY2llbWJyZSddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydFbmUnLCdGZWInLCdNYXInLCdBYnInLCdNYXknLCdKdW4nLFxuXHRcdCdKdWwnLCdBZ28nLCdTZXAnLCdPY3QnLCdOb3YnLCdEaWMnXSxcblx0XHRkYXlOYW1lczogWydEb21pbmdvJywnTHVuZXMnLCdNYXJ0ZXMnLCdNacOpcmNvbGVzJywnSnVldmVzJywnVmllcm5lcycsJ1PDoWJhZG8nXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0RvbScsJ0x1bicsJ01hcicsJ01pw6knLCdKdXYnLCdWaWUnLCdTw6FiJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnRG8nLCdMdScsJ01hJywnTWknLCdKdScsJ1ZpJywnU8OhJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXMnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VzJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBFc3RvbmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IE1hcnQgU8O1bWVybWFhIChtcnRzLnB5ZGV2IGF0IGdtYWlsIGNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2V0J10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFhbnVhcicsJ1ZlZWJydWFyJywnTcOkcnRzJywnQXByaWxsJywnTWFpJywnSnV1bmknLCBcblx0XHRcdCdKdXVsaScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09rdG9vYmVyJywnTm92ZW1iZXInLCdEZXRzZW1iZXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFhbicsICdWZWVicicsICdNw6RydHMnLCAnQXByJywgJ01haScsICdKdXVuaScsXG5cdFx0XHQnSnV1bGknLCAnQXVnJywgJ1NlcHQnLCAnT2t0JywgJ05vdicsICdEZXRzJ10sXG5cdFx0ZGF5TmFtZXM6IFsnUMO8aGFww6RldicsICdFc21hc3DDpGV2JywgJ1RlaXNpcMOkZXYnLCAnS29sbWFww6RldicsICdOZWxqYXDDpGV2JywgJ1JlZWRlJywgJ0xhdXDDpGV2J10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydQw7xoYXAnLCAnRXNtYXNwJywgJ1RlaXNpcCcsICdLb2xtYXAnLCAnTmVsamFwJywgJ1JlZWRlJywgJ0xhdXAnXSxcblx0XHRkYXlOYW1lc01pbjogWydQJywnRScsJ1QnLCdLJywnTicsJ1InLCdMJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXQnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2V0J107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBCYXNxdWUgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgS2FycmlrYXMtZWsgaXR6dWxpYSAoa2FycmlrYXNAa2FycmlrYXMuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXUnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydVcnRhcnJpbGEnLCdPdHNhaWxhJywnTWFydHhvYScsJ0FwaXJpbGEnLCdNYWlhdHphJywnRWthaW5hJyxcblx0XHQnVXp0YWlsYScsJ0FidXp0dWEnLCdJcmFpbGEnLCdVcnJpYScsJ0F6YXJvYScsJ0FiZW5kdWEnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnVXJ0JywnT3RzJywnTWFyJywnQXBpJywnTWFpJywnRWthJyxcblx0XHQnVXp0JywnQWJ1JywnSXJhJywnVXJyJywnQXphJywnQWJlJ10sXG5cdFx0ZGF5TmFtZXM6IFsnSWdhbmRlYScsJ0FzdGVsZWhlbmEnLCdBc3RlYXJ0ZWEnLCdBc3RlYXprZW5hJywnT3N0ZWd1bmEnLCdPc3RpcmFsYScsJ0xhcnVuYmF0YSddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnSWdhJywnQXN0JywnQXN0JywnQXN0JywnT3N0JywnT3N0JywnTGFyJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnSWcnLCdBcycsJ0FzJywnQXMnLCdPcycsJ09zJywnTGEnXSxcblx0XHRkYXRlRm9ybWF0OiAneXl5eS9tbS9kZCcsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydldSddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXUnXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEZhcnNpL1BlcnNpYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgSmF2YWQgTW93bGFuZXpoYWQgLS0gam1vd2xhQGdtYWlsLmNvbSAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmYSddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ9mB2LHZiNix2K/ZitmGJywn2KfYsdiv2YrYqNmH2LTYqicsJ9iu2LHYr9in2K8nLCfYqtmK2LEnLCfZhdix2K/Yp9ivJywn2LTZh9ix2YrZiNixJyxcblx0XHQn2YXZh9ixJywn2KLYqNin2YYnLCfYotiw2LEnLCfYr9mKJywn2KjZh9mF2YYnLCfYp9iz2YHZhtivJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJzEnLCcyJywnMycsJzQnLCc1JywnNicsJzcnLCc4JywnOScsJzEwJywnMTEnLCcxMiddLFxuXHRcdGRheU5hbWVzOiBbJ9mK2qnYtNmG2KjZhycsJ9iv2YjYtNmG2KjZhycsJ9iz2YfigIzYtNmG2KjZhycsJ9qG2YfYp9ix2LTZhtio2YcnLCfZvtmG2KzYtNmG2KjZhycsJ9is2YXYudmHJywn2LTZhtio2YcnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9mKJywn2K8nLCfYsycsJ9qGJywn2b4nLCfYrCcsICfYtCddLFxuXHRcdGRheU5hbWVzTWluOiBbJ9mKJywn2K8nLCfYsycsJ9qGJywn2b4nLCfYrCcsICfYtCddLFxuXHRcdGRhdGVGb3JtYXQ6ICd5eXl5L21tL2RkJyxcblx0XHRmaXJzdERheTogNixcblx0XHRpc1JUTDogdHJ1ZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZmEnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZhJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBGaW5uaXNoIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgSGFycmkgS2lscGnDtiAoaGFycmlraWxwaW9AZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZmknXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG4gICAgICAgIG1vbnRoTmFtZXM6IFsnVGFtbWlrdXUnLCdIZWxtaWt1dScsJ01hYWxpc2t1dScsJ0h1aHRpa3V1JywnVG91a29rdXUnLCdLZXMmYXVtbDtrdXUnLFxuICAgICAgICAnSGVpbiZhdW1sO2t1dScsJ0Vsb2t1dScsJ1N5eXNrdXUnLCdMb2tha3V1JywnTWFycmFza3V1JywnSm91bHVrdXUnXSxcbiAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ1RhbW1pJywnSGVsbWknLCdNYWFsaXMnLCdIdWh0aScsJ1RvdWtvJywnS2VzJmF1bWw7JyxcbiAgICAgICAgJ0hlaW4mYXVtbDsnLCdFbG8nLCdTeXlzJywnTG9rYScsJ01hcnJhcycsJ0pvdWx1J10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydTdScsJ01hJywnVGknLCdLZScsJ1RvJywnUGUnLCdTdSddLFxuXHRcdGRheU5hbWVzOiBbJ1N1bm51bnRhaScsJ01hYW5hbnRhaScsJ1RpaXN0YWknLCdLZXNraXZpaWtrbycsJ1RvcnN0YWknLCdQZXJqYW50YWknLCdMYXVhbnRhaSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ1N1JywnTWEnLCdUaScsJ0tlJywnVG8nLCdQZScsJ0xhJ10sXG4gICAgICAgIGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZpJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmaSddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRmFyb2VzZSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IFN2ZXJyaSBNb2hyIE9sc2VuLCBzdmVycmltb0BnbWFpbC5jb20gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZm8nXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuc2t1cicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyJywnRmVicnVhcicsJ01hcnMnLCdBcHLDrWwnLCdNZWknLCdKdW5pJyxcblx0XHQnSnVsaScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09rdG9iZXInLCdOb3ZlbWJlcicsJ0Rlc2VtYmVyJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01laScsJ0p1bicsXG5cdFx0J0p1bCcsJ0F1ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RlcyddLFxuXHRcdGRheU5hbWVzOiBbJ1N1bm51ZGFndXInLCdNw6FuYWRhZ3VyJywnVMO9c2RhZ3VyJywnTWlrdWRhZ3VyJywnSMOzc2RhZ3VyJywnRnLDrWdnamFkYWd1cicsJ0xleWFyZGFndXInXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ1N1bicsJ03DoW4nLCdUw71zJywnTWlrJywnSMOzcycsJ0Zyw60nLCdMZXknXSxcblx0XHRkYXlOYW1lc01pbjogWydTdScsJ03DoScsJ1TDvScsJ01pJywnSMOzJywnRnInLCdMZSddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC1tbS15eXl5Jyxcblx0XHRmaXJzdERheTogMCxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZvJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmbyddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU3dpc3MgRnJlbmNoIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTWFydGluIFZvZWxrbGUgKG1hcnRpbi52b2Vsa2xlQGUtdGMuY2gpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmci1DSCddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0phbnZpZXInLCdGw6l2cmllcicsJ01hcnMnLCdBdnJpbCcsJ01haScsJ0p1aW4nLFxuXHRcdCdKdWlsbGV0JywnQW/Du3QnLCdTZXB0ZW1icmUnLCdPY3RvYnJlJywnTm92ZW1icmUnLCdEw6ljZW1icmUnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRsOpdicsJ01hcicsJ0F2cicsJ01haScsJ0p1bicsXG5cdFx0J0p1bCcsJ0Fvw7snLCdTZXAnLCdPY3QnLCdOb3YnLCdEw6ljJ10sXG5cdFx0ZGF5TmFtZXM6IFsnRGltYW5jaGUnLCdMdW5kaScsJ01hcmRpJywnTWVyY3JlZGknLCdKZXVkaScsJ1ZlbmRyZWRpJywnU2FtZWRpJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydEaW0nLCdMdW4nLCdNYXInLCdNZXInLCdKZXUnLCdWZW4nLCdTYW0nXSxcblx0XHRkYXlOYW1lc01pbjogWydEaScsJ0x1JywnTWEnLCdNZScsJ0plJywnVmUnLCdTYSddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZyLUNIJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmci1DSCddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRnJlbmNoIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFN0w6lwaGFuZSBOYWhtYW5pIChzaG9sYnlAc2hvbGJ5Lm5ldCkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZyJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudmllcicsJ0bDqXZyaWVyJywnTWFycycsJ0F2cmlsJywnTWFpJywnSnVpbicsXG5cdFx0J0p1aWxsZXQnLCdBb8O7dCcsJ1NlcHRlbWJyZScsJ09jdG9icmUnLCdOb3ZlbWJyZScsJ0TDqWNlbWJyZSddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGw6l2JywnTWFyJywnQXZyJywnTWFpJywnSnVuJyxcblx0XHQnSnVsJywnQW/DuycsJ1NlcCcsJ09jdCcsJ05vdicsJ0TDqWMnXSxcblx0XHRkYXlOYW1lczogWydEaW1hbmNoZScsJ0x1bmRpJywnTWFyZGknLCdNZXJjcmVkaScsJ0pldWRpJywnVmVuZHJlZGknLCdTYW1lZGknXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0RpbScsJ0x1bicsJ01hcicsJ01lcicsJ0pldScsJ1ZlbicsJ1NhbSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ0RpJywnTHUnLCdNYScsJ01lJywnSmUnLCdWZScsJ1NhJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZnInXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZyJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBJbmljaWFjaW9uIGVuIGdhbGVnbyBwYXJhIGEgZXh0ZW5zacOzbiAnVUkgZGF0ZSBwaWNrZXInIHBhcmEgalF1ZXJ5LlxuICAgVHJhZHVjaWRvIHBvciBNYW51ZWwgKE1jTnVlbEBnbXgubmV0KS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZ2wnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydYYW5laXJvJywnRmVicmVpcm8nLCdNYXJ6bycsJ0FicmlsJywnTWFpbycsJ1h1w7FvJyxcblx0XHQnWHVsbG8nLCdBZ29zdG8nLCdTZXRlbWJybycsJ091dHVicm8nLCdOb3ZlbWJybycsJ0RlY2VtYnJvJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ1hhbicsJ0ZlYicsJ01hcicsJ0FicicsJ01haScsJ1h1w7EnLFxuXHRcdCdYdWwnLCdBZ28nLCdTZXQnLCdPdXQnLCdOb3YnLCdEZWMnXSxcblx0XHRkYXlOYW1lczogWydEb21pbmdvJywnTHVucycsJ01hcnRlcycsJ03DqXJjb3JlcycsJ1hvdmVzJywnVmVucmVzJywnU8OhYmFkbyddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRG9tJywnTHVuJywnTWFyJywnTcOpcicsJ1hvdicsJ1ZlbicsJ1PDoWInXSxcblx0XHRkYXlOYW1lc01pbjogWydEbycsJ0x1JywnTWEnLCdNZScsJ1hvJywnVmUnLCdTw6EnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydnbCddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZ2wnXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEd1amFyYXRpICjgqpfgq4HgqpzgqrDgqr7gqqTgq4ApIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIE5heW1lc2ggTWlzdHJ5IChuYXltZXNoQHlhaG9vLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2d1J10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsn4Kqc4Kq+4Kqo4KuN4Kqv4KuB4KqG4Kqw4KuAJywn4Kqr4KuH4Kqs4KuN4Kqw4KuB4KqG4Kqw4KuAJywn4Kqu4Kq+4Kqw4KuN4KqaJywn4KqP4Kqq4KuN4Kqw4Kq/4KqyJywn4Kqu4KuHJywn4Kqc4KuC4KqoJyxcblx0XHQn4Kqc4KuB4Kqy4Kq+4KqIJywn4KqR4KqX4Kq44KuN4KqfJywn4Kq44Kqq4KuN4Kqf4KuH4Kqu4KuN4Kqs4KqwJywn4KqR4KqV4KuN4Kqf4KuL4Kqs4KqwJywn4Kqo4Kq14KuH4Kqu4KuN4Kqs4KqwJywn4Kqh4Kq/4Kq44KuH4Kqu4KuN4Kqs4KqwJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ+CqnOCqvuCqqOCrjeCqr+CrgScsJ+Cqq+Crh+CqrOCrjeCqsOCrgScsJ+CqruCqvuCqsOCrjeCqmicsJ+Cqj+CqquCrjeCqsOCqv+CqsicsJ+CqruCrhycsJ+CqnOCrguCqqCcsXG5cdFx0J+CqnOCrgeCqsuCqvuCqiCcsJ+CqkeCql+CquOCrjeCqnycsJ+CquOCqquCrjeCqn+CrhycsJ+CqkeCqleCrjeCqn+CriycsJ+CqqOCqteCrhycsJ+CqoeCqv+CquOCrhyddLFxuXHRcdGRheU5hbWVzOiBbJ+CqsOCqteCqv+CqteCqvuCqsCcsJ+CquOCri+CqruCqteCqvuCqsCcsJ+CqruCqguCql+Cqs+CqteCqvuCqsCcsJ+CqrOCrgeCqp+CqteCqvuCqsCcsJ+Cql+CrgeCqsOCrgeCqteCqvuCqsCcsJ+CqtuCrgeCqleCrjeCqsOCqteCqvuCqsCcsJ+CqtuCqqOCqv+CqteCqvuCqsCddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn4Kqw4Kq14Kq/Jywn4Kq44KuL4KquJywn4Kqu4KqC4KqX4KqzJywn4Kqs4KuB4KqnJywn4KqX4KuB4Kqw4KuBJywn4Kq24KuB4KqV4KuN4KqwJywn4Kq24Kqo4Kq/J10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn4KqwJywn4Kq44KuLJywn4Kqu4KqCJywn4Kqs4KuBJywn4KqX4KuBJywn4Kq24KuBJywn4Kq2J10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLU0teXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydndSddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZ3UnXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEhlYnJldyBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEFtaXIgSGFyZG9uIChhaGFyZG9uIGF0IGdtYWlsIGRvdCBjb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydoZSddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ9eZ16DXldeQ16gnLCfXpNeR16jXldeQ16gnLCfXnteo16UnLCfXkNek16jXmdecJywn157XkNeZJywn15nXldeg15knLFxuXHRcdCfXmdeV15zXmScsJ9eQ15XXkteV16HXmCcsJ9eh16TXmNee15HXqCcsJ9eQ15XXp9eY15XXkdeoJywn16DXldeR157XkdeoJywn15PXptee15HXqCddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWycxJywnMicsJzMnLCc0JywnNScsJzYnLFxuXHRcdCc3JywnOCcsJzknLCcxMCcsJzExJywnMTInXSxcblx0XHRkYXlOYW1lczogWyfXqNeQ16nXldefJywn16nXoNeZJywn16nXnNeZ16nXmScsJ9eo15HXmdei15knLCfXl9ee15nXqdeZJywn16nXmdep15knLCfXqdeR16onXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9eQXFwnJywn15FcXCcnLCfXklxcJycsJ9eTXFwnJywn15RcXCcnLCfXlVxcJycsJ9ep15HXqiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ9eQXFwnJywn15FcXCcnLCfXklxcJycsJ9eTXFwnJywn15RcXCcnLCfXlVxcJycsJ9ep15HXqiddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMCxcblx0XHRpc1JUTDogdHJ1ZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaGUnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2hlJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBIaW5kaSBJTkRJQSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IFBhd2FuIEt1bWFyIFNpbmdoLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydoaS1JTiddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ+CknOCkqOCkteCksOClgCcsJyDgpKvgpLDgpLXgpLDgpYAnLCAn4KSu4KS+4KSw4KWN4KSaJywgJ+CkheCkquCljeCksOCliOCksicsICfgpK7gpIgnLCAn4KSc4KWC4KSoJywn4KSc4KWB4KSy4KS+4KSIJywgJ+CkheCkl+CkuOCljeCkpCcsICfgpLjgpL/gpKTgpK7gpY3gpKzgpLAnLCAn4KSF4KSV4KWN4KSf4KWC4KSs4KSwJywgJ+CkqOCkteCkruCljeCkrOCksCcsICfgpKbgpL/gpLjgpK7gpY3gpKzgpLAnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn4KSc4KSoJywgJ+Ckq+CksCcsICfgpK7gpL7gpLDgpY3gpJonLCfgpIXgpKrgpY3gpLDgpYgnLCAn4KSu4KSIJywgJ+CknOClguCkqCcsJ+CknOClgeCksuCkvuCkiCcsICfgpIXgpJcnLCAn4KS44KS/4KSkJywgJ+CkheCkleCljeCkn+ClgicsICfgpKjgpLUnLCAn4KSm4KS/4KS4J10sXG5cdFx0ZGF5TmFtZXM6IFsn4KSw4KS14KS/4KS14KS+4KSwJywgJ+CkuOCli+CkruCkteCkvuCksCcsICfgpK7gpILgpJfgpLLgpLXgpL7gpLAnLCAn4KSs4KWB4KSn4KS14KS+4KSwJywgJ+Ckl+ClgeCksOClgeCkteCkvuCksCcsICfgpLbgpYHgpJXgpY3gpLDgpLXgpL7gpLAnLCAn4KS24KSo4KS/4KS14KS+4KSwJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfgpLDgpLXgpL8nLCAn4KS44KWL4KSuJywgJ+CkruCkguCkl+CksicsICfgpKzgpYHgpKcnLCAn4KSX4KWB4KSw4KWBJywgJ+CktuClgeCkleCljeCksCcsICfgpLbgpKjgpL8nXSxcblx0XHRkYXlOYW1lc01pbjogWyfgpLAnLCfgpLjgpYsnLCfgpK7gpIInLCfgpKzgpYEnLCfgpJfgpYEnLCfgpLbgpYEnLCfgpLYnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydoaS1JTiddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaGktSU4nXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIENyb2F0aWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgVmpla29zbGF2IE5lc2VrLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydociddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ1NpamXEjWFuaicsJ1ZlbGphxI1hJywnT8W+dWphaycsJ1RyYXZhbmonLCdTdmliYW5qJywnTGlwYW5qJyxcblx0XHQnU3JwYW5qJywnS29sb3ZveicsJ1J1amFuJywnTGlzdG9wYWQnLCdTdHVkZW5pJywnUHJvc2luYWMnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnU2lqJywnVmVsaicsJ0/FvnUnLCdUcmEnLCdTdmknLCdMaXAnLFxuXHRcdCdTcnAnLCdLb2wnLCdSdWonLCdMaXMnLCdTdHUnLCdQcm8nXSxcblx0XHRkYXlOYW1lczogWydOZWRqZWxqYScsJ1BvbmVkamVsamFrJywnVXRvcmFrJywnU3JpamVkYScsJ8SMZXR2cnRhaycsJ1BldGFrJywnU3Vib3RhJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydOZWQnLCdQb24nLCdVdG8nLCdTcmknLCfEjGV0JywnUGV0JywnU3ViJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnTmUnLCdQbycsJ1V0JywnU3InLCfEjGUnLCdQZScsJ1N1J10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXkuJyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2hyJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydociddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgSHVuZ2FyaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgSXN0dmFuIEthcmFzemkgKGpxdWVyeWNhbGVuZGFyQHNwYW0ucmFzemkuaHUpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydodSddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0phbnXDoXInLCAnRmVicnXDoXInLCAnTcOhcmNpdXMnLCAnw4FwcmlsaXMnLCAnTcOhanVzJywgJ0rDum5pdXMnLFxuXHRcdCdKw7psaXVzJywgJ0F1Z3VzenR1cycsICdTemVwdGVtYmVyJywgJ09rdMOzYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGZWInLCAnTcOhcicsICfDgXByJywgJ03DoWonLCAnSsO6bicsXG5cdFx0J0rDumwnLCAnQXVnJywgJ1N6ZXAnLCAnT2t0JywgJ05vdicsICdEZWMnXSxcblx0XHRkYXlOYW1lczogWydWYXPDoXJuYXAnLCAnSMOpdGbDticsICdLZWRkJywgJ1N6ZXJkYScsICdDc8O8dMO2cnTDtmsnLCAnUMOpbnRlaycsICdTem9tYmF0J10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydWYXMnLCAnSMOpdCcsICdLZWQnLCAnU3plJywgJ0Nzw7wnLCAnUMOpbicsICdTem8nXSxcblx0XHRkYXlOYW1lc01pbjogWydWJywgJ0gnLCAnSycsICdTemUnLCAnQ3MnLCAnUCcsICdTem8nXSxcblx0XHRkYXRlRm9ybWF0OiAneXl5eS1tbS1kZCcsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydodSddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaHUnXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEFybWVuaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTGV2b24gWmFrYXJ5YW4gKGxldm9uLnpha2FyeWFuQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2h5J10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsn1YDVuNaC1bbVvtWh1oAnLCfVk9Wl1b/WgNW+1aHWgCcsJ9WE1aHWgNW/Jywn1LHVutaA1avVrCcsJ9WE1aHVtdWr1b0nLCfVgNW41oLVttWr1b0nLFxuXHRcdCfVgNW41oLVrNWr1b0nLCfVldWj1bjVvdW/1bjVvScsJ9WN1aXVutW/1aXVtNWi1aXWgCcsJ9WA1bjVr9W/1aXVtNWi1aXWgCcsJ9WG1bjVtdWl1bTVotWl1oAnLCfUtNWl1a/Vv9Wl1bTVotWl1oAnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn1YDVuNaC1bbVvicsJ9WT1aXVv9aAJywn1YTVodaA1b8nLCfUsdW61oAnLCfVhNWh1bXVq9W9Jywn1YDVuNaC1bbVq9W9Jyxcblx0XHQn1YDVuNaC1awnLCfVldWj1b0nLCfVjdWl1bonLCfVgNW41a8nLCfVhtW41bUnLCfUtNWl1a8nXSxcblx0XHRkYXlOYW1lczogWyfVr9Wr1oDVodWv1asnLCfVpdWv1bjWgtW31aHVotWp1asnLCfVpdaA1aXWhNW31aHVotWp1asnLCfVudW41oDVpdaE1bfVodWi1anVqycsJ9Ww1avVttWj1bfVodWi1anVqycsJ9W41oLWgNWi1aHVqScsJ9W31aHVotWh1aknXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9Wv1avWgCcsJ9Wl1oDVrycsJ9Wl1oDWhCcsJ9W51oDWhCcsJ9Ww1bbVoycsJ9W41oLWgNWiJywn1bfVotWpJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn1a/Vq9aAJywn1aXWgNWvJywn1aXWgNaEJywn1bnWgNaEJywn1bDVttWjJywn1bjWgtaA1aInLCfVt9Wi1aknXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydoeSddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaHknXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEluZG9uZXNpYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBEZWRlbiBGYXRodXJhaG1hbiAoZGVkZW5mQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2lkJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyaScsJ0ZlYnJ1YXJpJywnTWFyZXQnLCdBcHJpbCcsJ01laScsJ0p1bmknLFxuXHRcdCdKdWxpJywnQWd1c3R1cycsJ1NlcHRlbWJlcicsJ09rdG9iZXInLCdOb3BlbWJlcicsJ0Rlc2VtYmVyJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01laScsJ0p1bicsXG5cdFx0J0p1bCcsJ0FndXMnLCdTZXAnLCdPa3QnLCdOb3AnLCdEZXMnXSxcblx0XHRkYXlOYW1lczogWydNaW5nZ3UnLCdTZW5pbicsJ1NlbGFzYScsJ1JhYnUnLCdLYW1pcycsJ0p1bWF0JywnU2FidHUnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ01pbicsJ1NlbicsJ1NlbCcsJ1JhYicsJ2thbScsJ0p1bScsJ1NhYiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ01nJywnU24nLCdTbCcsJ1JiJywnS20nLCdqbScsJ1NiJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAwLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaWQnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2lkJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBJY2VsYW5kaWMgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBIYXVrdXIgSC4gVGhvcnNzb24gKGhhdWt1ckBlc2tpbGwuaXMpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydpcyddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0phbsO6YXInLCdGZWJyw7phcicsJ01hcnMnLCdBcHLDrWwnLCdNYcOtJywnSsO6bsOtJyxcblx0XHQnSsO6bMOtJywnw4Fnw7pzdCcsJ1NlcHRlbWJlcicsJ09rdMOzYmVyJywnTsOzdmVtYmVyJywnRGVzZW1iZXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTWFyJywnQXByJywnTWHDrScsJ0rDum4nLFxuXHRcdCdKw7psJywnw4Fnw7onLCdTZXAnLCdPa3QnLCdOw7N2JywnRGVzJ10sXG5cdFx0ZGF5TmFtZXM6IFsnU3VubnVkYWd1cicsJ03DoW51ZGFndXInLCfDnnJpw7BqdWRhZ3VyJywnTWnDsHZpa3VkYWd1cicsJ0ZpbW10dWRhZ3VyJywnRsO2c3R1ZGFndXInLCdMYXVnYXJkYWd1ciddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU3VuJywnTcOhbicsJ8OecmknLCdNacOwJywnRmltJywnRsO2cycsJ0xhdSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ1N1JywnTcOhJywnw55yJywnTWknLCdGaScsJ0bDticsJ0xhJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAwLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaXMnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2lzJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBJdGFsaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgQXBhZWxsYSAoYXBhZWxsYUBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydpdCddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0dlbm5haW8nLCdGZWJicmFpbycsJ01hcnpvJywnQXByaWxlJywnTWFnZ2lvJywnR2l1Z25vJyxcblx0XHQnTHVnbGlvJywnQWdvc3RvJywnU2V0dGVtYnJlJywnT3R0b2JyZScsJ05vdmVtYnJlJywnRGljZW1icmUnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnR2VuJywnRmViJywnTWFyJywnQXByJywnTWFnJywnR2l1Jyxcblx0XHQnTHVnJywnQWdvJywnU2V0JywnT3R0JywnTm92JywnRGljJ10sXG5cdFx0ZGF5TmFtZXM6IFsnRG9tZW5pY2EnLCdMdW5lZMOsJywnTWFydGVkw6wnLCdNZXJjb2xlZMOsJywnR2lvdmVkw6wnLCdWZW5lcmTDrCcsJ1NhYmF0byddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRG9tJywnTHVuJywnTWFyJywnTWVyJywnR2lvJywnVmVuJywnU2FiJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnRG8nLCdMdScsJ01hJywnTWUnLCdHaW8nLCdWZScsJ1NhJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaXQnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2l0J107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBKYXBhbmVzZSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEtlbnRhcm8gU0FUTyAoa2VudGFyb0ByYW52aXMuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snamEnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWycx5pyIJywnMuaciCcsJzPmnIgnLCc05pyIJywnNeaciCcsJzbmnIgnLFxuXHRcdCc35pyIJywnOOaciCcsJznmnIgnLCcxMOaciCcsJzEx5pyIJywnMTLmnIgnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnMeaciCcsJzLmnIgnLCcz5pyIJywnNOaciCcsJzXmnIgnLCc25pyIJyxcblx0XHQnN+aciCcsJzjmnIgnLCc55pyIJywnMTDmnIgnLCcxMeaciCcsJzEy5pyIJ10sXG5cdFx0ZGF5TmFtZXM6IFsn5pel5puc5pelJywn5pyI5puc5pelJywn54Gr5puc5pelJywn5rC05puc5pelJywn5pyo5puc5pelJywn6YeR5puc5pelJywn5Zyf5puc5pelJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfml6UnLCfmnIgnLCfngasnLCfmsLQnLCfmnKgnLCfph5EnLCflnJ8nXSxcblx0XHRkYXlOYW1lc01pbjogWyfml6UnLCfmnIgnLCfngasnLCfmsLQnLCfmnKgnLCfph5EnLCflnJ8nXSxcblx0XHRkYXRlRm9ybWF0OiAneXl5eS9tbS9kZCcsXG5cdFx0Zmlyc3REYXk6IDAsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydqYSddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snamEnXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEdlb3JnaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIEFuZHJlaSBHb3JidXNoa2luLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydrYSddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ+GDmOGDkOGDnOGDleGDkOGDoOGDmCcsJ+GDl+GDlOGDkeGDlOGDoOGDleGDkOGDmuGDmCcsJ+GDm+GDkOGDoOGDouGDmCcsJ+GDkOGDnuGDoOGDmOGDmuGDmCcsJ+GDm+GDkOGDmOGDoeGDmCcsJ+GDmOGDleGDnOGDmOGDoeGDmCcsXG5cdFx0J+GDmOGDleGDmuGDmOGDoeGDmCcsJ+GDkOGDkuGDleGDmOGDoeGDouGDnScsJ+GDoeGDlOGDpeGDouGDlOGDm+GDkeGDlOGDoOGDmCcsJ+GDneGDpeGDouGDneGDm+GDkeGDlOGDoOGDmCcsJ+GDnOGDneGDlOGDm+GDkeGDlOGDoOGDmCcsJ+GDk+GDlOGDmeGDlOGDm+GDkeGDlOGDoOGDmCddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfhg5jhg5Dhg5wnLCAn4YOX4YOU4YORJywgJ+GDm+GDkOGDoCcsICfhg5Dhg57hg6AnLCAn4YOb4YOQ4YOY4YOh4YOYJywgJ+GDmOGDleGDnCcsXG5cdFx0J+GDmOGDleGDmicsICfhg5Dhg5Lhg5UnLCAn4YOh4YOU4YOlJywgJ+GDneGDpeGDoicsICfhg5zhg53hg5QnLCAn4YOT4YOU4YOZJ10sXG5cdFx0ZGF5TmFtZXM6IFsn4YOZ4YOV4YOY4YOg4YOQJywgJ+GDneGDoOGDqOGDkOGDkeGDkOGDl+GDmCcsICfhg6Hhg5Dhg5vhg6jhg5Dhg5Hhg5Dhg5fhg5gnLCAn4YOd4YOX4YOu4YOo4YOQ4YOR4YOQ4YOX4YOYJywgJ+GDruGDo+GDl+GDqOGDkOGDkeGDkOGDl+GDmCcsICfhg57hg5Dhg6Dhg5Dhg6Hhg5nhg5Thg5Xhg5gnLCAn4YOo4YOQ4YOR4YOQ4YOX4YOYJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfhg5nhg5UnLCAn4YOd4YOg4YOoJywgJ+GDoeGDkOGDmycsICfhg53hg5fhg64nLCAn4YOu4YOj4YOXJywgJ+GDnuGDkOGDoCcsICfhg6jhg5Dhg5EnXSxcblx0XHRkYXlOYW1lc01pbjogWyfhg5nhg5UnLCfhg53hg6AnLCfhg6Hhg5snLCfhg53hg5cnLCAn4YOu4YOoJywgJ+GDnuGDoCcsJ+GDqOGDkSddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2thJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydrYSddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgS2htZXIgaW5pdGlhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IFNvdmljaGV0IFRlcCAoc292aWNoZXQudGVwQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ttJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsn4Z6B4Z+C4oCL4Z6Y4Z6A4Z6a4Z62Jywn4Z6B4Z+C4oCL4Z6A4Z674Z6Y4Z+S4Z6X4Z+IJywn4Z6B4Z+C4oCL4Z6Y4Z634Z6T4Z62Jywn4Z6B4Z+C4oCL4Z6Y4Z+B4Z6f4Z62Jywn4Z6B4Z+C4oCL4Z6n4Z6f4Z6X4Z62Jywn4Z6B4Z+C4oCL4Z6Y4Z634Z6Q4Z674Z6T4Z62Jyxcblx0XHQn4Z6B4Z+C4oCL4Z6A4Z6A4Z+S4Z6A4Z6K4Z62Jywn4Z6B4Z+C4oCL4Z6f4Z644Z6g4Z62Jywn4Z6B4Z+C4oCL4Z6A4Z6J4Z+S4Z6J4Z62Jywn4Z6B4Z+C4oCL4Z6P4Z674Z6b4Z62Jywn4Z6B4Z+C4oCL4Z6c4Z634Z6F4Z+S4Z6G4Z634Z6A4Z62Jywn4Z6B4Z+C4oCL4Z6S4Z+S4Z6T4Z68J10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ+GemOGegCcsICfhnoDhnrsnLCAn4Z6Y4Z634Z6T4Z62JywgJ+GemOGfgScsICfhnqfhnp8nLCAn4Z6Y4Z634Z6Q4Z67Jyxcblx0XHQn4Z6A4Z6A4Z+S4Z6AJywgJ+Gen+GeuCcsICfhnoDhnonhn5LhnonhnrYnLCAn4Z6P4Z674Z6b4Z62JywgJ+GenOGet+GeheGfkuGehuGetycsICfhnpLhn5LhnpPhnrwnXSxcblx0XHRkYXlOYW1lczogWyfhnpDhn5LhnoThn4PigIvhnqLhnrbhnpHhnrfhno/hn5LhnpknLCAn4Z6Q4Z+S4Z6E4Z+D4oCL4Z6F4Z6T4Z+S4Z6RJywgJ+GekOGfkuGehOGfg+KAi+GeouGehOGfkuGeguGetuGemicsICfhnpDhn5LhnoThn4PigIvhnpbhnrvhnpInLCAn4Z6Q4Z+S4Z6E4Z+D4oCL4Z6W4Z+S4Z6a4Z6g4Z6f4Z+S4Z6U4Z6P4Z+S4Z6P4Z634Z+NJywgJ+GekOGfkuGehOGfg+KAi+Gen+Geu+GegOGfkuGemicsICfhnpDhn5LhnoThn4PigIvhnp/hn4Xhnprhn40nXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+GeouGeticsICfhnoXhnpPhn5LhnpEnLCAn4Z6i4Z6E4Z+S4Z6CJywgJ+GeluGeu+GekicsICfhnpbhn5LhnprhnqAnLCAn4Z6f4Z67JywgJ+Gen+GfheGemuGfjSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ+GeouGeticsJ+GehScsJ+GeoicsJ+GeluGeuycsJ+GeluGfkuGemicsJ+Gen+GeuycsJ+GenyddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ttJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydrbSddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgS29yZWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgRGFlS3dvbiBLYW5nIChuY3Jhc2guZGtAZ21haWwuY29tKSwgRWRpdGVkIGJ5IEdlbmllLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydrbyddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJzHsm5QnLCcy7JuUJywnM+yblCcsJzTsm5QnLCc17JuUJywnNuyblCcsXG5cdFx0Jzfsm5QnLCc47JuUJywnOeyblCcsJzEw7JuUJywnMTHsm5QnLCcxMuyblCddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWycx7JuUJywnMuyblCcsJzPsm5QnLCc07JuUJywnNeyblCcsJzbsm5QnLFxuXHRcdCc37JuUJywnOOyblCcsJznsm5QnLCcxMOyblCcsJzEx7JuUJywnMTLsm5QnXSxcblx0XHRkYXlOYW1lczogWyfsnbzsmpTsnbwnLCfsm5TsmpTsnbwnLCftmZTsmpTsnbwnLCfsiJjsmpTsnbwnLCfrqqnsmpTsnbwnLCfquIjsmpTsnbwnLCfthqDsmpTsnbwnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+ydvCcsJ+yblCcsJ+2ZlCcsJ+yImCcsJ+uqqScsJ+q4iCcsJ+2GoCddLFxuXHRcdGRheU5hbWVzTWluOiBbJ+ydvCcsJ+yblCcsJ+2ZlCcsJ+yImCcsJ+uqqScsJ+q4iCcsJ+2GoCddLFxuXHRcdGRhdGVGb3JtYXQ6ICd5eXl5LW1tLWRkJyxcblx0XHRmaXJzdERheTogMCxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2tvJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydrbyddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTGl0aHVhbmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBBcnR1cmFzIFBhbGVpY2lrYXMgPGFydHVyYXNAYXZhbG9uLmx0Pi4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbHQnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydTYXVzaXMnLCdWYXNhcmlzJywnS292YXMnLCdCYWxhbmRpcycsJ0dlZ3XFvsSXJywnQmlyxb5lbGlzJyxcblx0XHQnTGllcGEnLCdSdWdwasWrdGlzJywnUnVnc8SXamlzJywnU3BhbGlzJywnTGFwa3JpdGlzJywnR3J1b2RpcyddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydTYXUnLCdWYXMnLCdLb3YnLCdCYWwnLCdHZWcnLCdCaXInLFxuXHRcdCdMaWUnLCdSdWdwJywnUnVncycsJ1NwYScsJ0xhcCcsJ0dydSddLFxuXHRcdGRheU5hbWVzOiBbJ3Nla21hZGllbmlzJywncGlybWFkaWVuaXMnLCdhbnRyYWRpZW5pcycsJ3RyZcSNaWFkaWVuaXMnLCdrZXR2aXJ0YWRpZW5pcycsJ3Blbmt0YWRpZW5pcycsJ8WhZcWhdGFkaWVuaXMnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ3NlaycsJ3BpcicsJ2FudCcsJ3RyZScsJ2tldCcsJ3BlbicsJ8WhZcWhJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnU2UnLCdQcicsJ0FuJywnVHInLCdLZScsJ1BlJywnxaBlJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXktbW0tZGQnLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbHQnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2x0J107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBMYXR2aWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIEFydHVyYXMgUGFsZWljaWthcyA8YXJ0dXJhcy5wYWxlaWNpa2FzQG1ldGFzaXRlLm5ldD4uICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2x2J10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudsSBcmlzJywnRmVicnXEgXJpcycsJ01hcnRzJywnQXByxKtsaXMnLCdNYWlqcycsJ0rFq25panMnLFxuXHRcdCdKxatsaWpzJywnQXVndXN0cycsJ1NlcHRlbWJyaXMnLCdPa3RvYnJpcycsJ05vdmVtYnJpcycsJ0RlY2VtYnJpcyddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWknLCdKxatuJyxcblx0XHQnSsWrbCcsJ0F1ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RlYyddLFxuXHRcdGRheU5hbWVzOiBbJ3N2xJN0ZGllbmEnLCdwaXJtZGllbmEnLCdvdHJkaWVuYScsJ3RyZcWhZGllbmEnLCdjZXR1cnRkaWVuYScsJ3BpZWt0ZGllbmEnLCdzZXN0ZGllbmEnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ3N2dCcsJ3BybScsJ290cicsJ3RyZScsJ2N0cicsJ3BrdCcsJ3NzdCddLFxuXHRcdGRheU5hbWVzTWluOiBbJ1N2JywnUHInLCdPdCcsJ1RyJywnQ3QnLCdQaycsJ1NzJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLW1tLXl5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbHYnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2x2J107XG5cdH1cbn0pKGpRdWVyeSk7XG4vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBNb250ZW5lZ3JpbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBCeSBNaWxvxaEgTWlsb8WhZXZpxIcgLSBmbGVrYSBkLm8uby4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWUtTUUnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWphbnNraScsXG5cdFx0ZXBvY2hzOiBbJ3BuZScsICduZSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyJywnRmVicnVhcicsJ01hcnQnLCdBcHJpbCcsJ01haicsJ0p1bicsXG5cdFx0J0p1bCcsJ0F2Z3VzdCcsJ1NlcHRlbWJhcicsJ09rdG9iYXInLCdOb3ZlbWJhcicsJ0RlY2VtYmFyJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYWonLCAnSnVuJyxcblx0XHQnSnVsJywgJ0F2ZycsICdTZXAnLCAnT2t0JywgJ05vdicsICdEZWMnXSxcblx0XHRkYXlOYW1lczogWydOZcSRZWxqYScsICdQb25lxJFlbGphaycsICdVdG9yYWsnLCAnU3JpamVkYScsICfEjGV0dnJ0YWsnLCAnUGV0YWsnLCAnU3Vib3RhJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydOZcSRJywgJ1BvbicsICdVdG8nLCAnU3JpJywgJ8SMZXQnLCAnUGV0JywgJ1N1YiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ05lJywnUG8nLCdVdCcsJ1NyJywnxIxlJywnUGUnLCdTdSddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21lLU1FJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtZS1NRSddO1xuXHR9XG59KShqUXVlcnkpO1xuLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTW9udGVuZWdyaW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgQnkgTWlsb8WhIE1pbG/FoWV2acSHIC0gZmxla2EgZC5vLm8uICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21lJ10gPSB7XG5cdFx0bmFtZTogJ9CT0YDQtdCz0L7RgNC40ZjQsNC90YHQutC4Jyxcblx0XHRlcG9jaHM6IFsn0L/QvdC1JywgJ9C90LUnXSxcblx0XHRtb250aE5hbWVzOiBbJ9CI0LDQvdGD0LDRgCcsJ9Ck0LXQsdGA0YPQsNGAJywn0JzQsNGA0YInLCfQkNC/0YDQuNC7Jywn0JzQsNGYJywn0IjRg9C9Jyxcblx0XHQn0IjRg9C7Jywn0JDQstCz0YPRgdGCJywn0KHQtdC/0YLQtdC80LHQsNGAJywn0J7QutGC0L7QsdCw0YAnLCfQndC+0LLQtdC80LHQsNGAJywn0JTQtdGG0LXQvNCx0LDRgCddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfQiNCw0L0nLCAn0KTQtdCxJywgJ9Cc0LDRgCcsICfQkNC/0YAnLCAn0JzQsNGYJywgJ9CI0YPQvScsXG5cdFx0J9CI0YPQuycsICfQkNCy0LMnLCAn0KHQtdC/JywgJ9Ce0LrRgicsICfQndC+0LInLCAn0JTQtdGGJ10sXG5cdFx0ZGF5TmFtZXM6IFsn0J3QtdGS0LXRmdCwJywgJ9Cf0L7QvdC10ZLQtdGZ0LDQuicsICfQo9GC0L7RgNCw0LonLCAn0KHRgNC40ZjQtdC00LAnLCAn0KfQtdGC0LLRgNGC0LDQuicsICfQn9C10YLQsNC6JywgJ9Ch0YPQsdC+0YLQsCddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn0J3QtdGSJywgJ9Cf0L7QvScsICfQo9GC0L4nLCAn0KHRgNC4JywgJ9Cn0LXRgicsICfQn9C10YInLCAn0KHRg9CxJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn0J3QtScsJ9Cf0L4nLCfQo9GCJywn0KHRgCcsJ9Cn0LUnLCfQn9C1Jywn0KHRgyddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21lJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtZSddO1xuXHR9XG59KShqUXVlcnkpO1xuLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAg0JzQsNC60LXQtNC+0L3RgdC60LggTUsgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgSGFqYW4gU2VsbWFuaSAoaGFqYW4gW2F0XSBsaXZlIFtkb3RdIGNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21rJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsn0IjQsNC90YPQsNGA0LgnLCfQpNC10LLRgNGD0LDRgNC4Jywn0JzQsNGA0YInLCfQkNC/0YDQuNC7Jywn0JzQsNGYJywn0IjRg9C90LgnLFxuXHRcdCfQiNGD0LvQuCcsJ9CQ0LLQs9GD0YHRgicsJ9Ch0LXQv9GC0LXQvNCy0YDQuCcsJ9Ce0LrRgtC+0LzQstGA0LgnLCfQndC+0LXQvNCy0YDQuCcsJ9CU0LXQutC10LzQstGA0LgnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn0IjQsNC9JywgJ9Ck0LXQsicsICfQnNCw0YAnLCAn0JDQv9GAJywgJ9Cc0LDRmCcsICfQiNGD0L0nLFxuXHRcdCfQiNGD0LsnLCAn0JDQstCzJywgJ9Ch0LXQvycsICfQntC60YInLCAn0J3QvtCyJywgJ9CU0LXQuiddLFxuXHRcdGRheU5hbWVzOiBbJ9Cd0LXQtNC10LvQsCcsICfQn9C+0L3QtdC00LXQu9C90LjQuicsICfQktGC0L7RgNC90LjQuicsICfQodGA0LXQtNCwJywgJ9Cn0LXRgtCy0YDRgtC+0LonLCAn0J/QtdGC0L7QuicsICfQodCw0LHQvtGC0LAnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9Cd0LXQtCcsICfQn9C+0L0nLCAn0JLRgtC+JywgJ9Ch0YDQtScsICfQp9C10YInLCAn0J/QtdGCJywgJ9Ch0LDQsSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ9Cd0LUnLCfQn9C+Jywn0JLRgicsJ9Ch0YAnLCfQp9C1Jywn0J/QtScsJ9Ch0LAnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtayddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWsnXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIE1hbGF5YWxhbSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBTYWppIE5lZGl5YW5jaGF0aCAoc2FqaTg5QGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21sJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsn4LSc4LSo4LWB4LS14LSw4LS/Jywn4LSr4LWG4LSs4LWN4LSw4LWB4LS14LSw4LS/Jywn4LSu4LS+4LSw4LWN4oCN4LSa4LWN4LSa4LWNJywn4LSP4LSq4LWN4LSw4LS/4LSy4LWN4oCNJywn4LSu4LWH4LSv4LWNJywn4LSc4LWC4LSj4LWN4oCNJyxcblx0XHQn4LSc4LWC4LSy4LWIJywn4LSG4LSX4LS44LWN4LSx4LWN4LSx4LWNJywn4LS44LWG4LSq4LWN4LSx4LWN4LSx4LSC4LSs4LSw4LWN4oCNJywn4LSS4LSV4LWN4LSf4LWL4LSs4LSw4LWN4oCNJywn4LSo4LS14LSC4LSs4LSw4LWN4oCNJywn4LSh4LS/4LS44LSC4LSs4LSw4LWN4oCNJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ+C0nOC0qOC1gScsICfgtKvgtYbgtKzgtY0nLCAn4LSu4LS+4LSw4LWN4oCNJywgJ+C0j+C0quC1jeC0sOC0vycsICfgtK7gtYfgtK/gtY0nLCAn4LSc4LWC4LSj4LWN4oCNJyxcblx0XHQn4LSc4LWC4LSy4LS+JywgJ+C0huC0lycsICfgtLjgtYbgtKrgtY0nLCAn4LSS4LSV4LWN4LSf4LWLJywgJ+C0qOC0teC0gicsICfgtKHgtL/gtLgnXSxcblx0XHRkYXlOYW1lczogWyfgtJ7gtL7gtK/gtLDgtY3igI0nLCAn4LSk4LS/4LSZ4LWN4LSV4LSz4LWN4oCNJywgJ+C0muC1iuC0teC1jeC0tScsICfgtKzgtYHgtKfgtKjgtY3igI0nLCAn4LS14LWN4LSv4LS+4LS04LSCJywgJ+C0teC1huC0s+C1jeC0s+C0vycsICfgtLbgtKjgtL8nXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+C0nuC0vuC0rycsICfgtKTgtL/gtJngtY3gtJUnLCAn4LSa4LWK4LS14LWN4LS1JywgJ+C0rOC1geC0pycsICfgtLXgtY3gtK/gtL7gtLTgtIInLCAn4LS14LWG4LSz4LWN4LSz4LS/JywgJ+C0tuC0qOC0vyddLFxuXHRcdGRheU5hbWVzTWluOiBbJ+C0nuC0vicsJ+C0pOC0vycsJ+C0muC1iicsJ+C0rOC1gScsJ+C0teC1jeC0r+C0vicsJ+C0teC1hicsJ+C0tiddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21sJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtbCddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTWFsYXlzaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTW9oZCBOYXdhd2kgTW9oYW1hZCBKYW1pbGkgKG5hd2F3aUByb25nZ2VuZy5uZXQpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtcyddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcmknLCdGZWJydWFyaScsJ01hYycsJ0FwcmlsJywnTWVpJywnSnVuJyxcblx0XHQnSnVsYWknLCdPZ29zJywnU2VwdGVtYmVyJywnT2t0b2JlcicsJ05vdmVtYmVyJywnRGlzZW1iZXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTWFjJywnQXByJywnTWVpJywnSnVuJyxcblx0XHQnSnVsJywnT2dvJywnU2VwJywnT2t0JywnTm92JywnRGlzJ10sXG5cdFx0ZGF5TmFtZXM6IFsnQWhhZCcsJ0lzbmluJywnU2VsYXNhJywnUmFidScsJ0toYW1pcycsJ0p1bWFhdCcsJ1NhYnR1J10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydBaGEnLCdJc24nLCdTZWwnLCdSYWInLCdLaGEnLCdKdW0nLCdTYWInXSxcblx0XHRkYXlOYW1lc01pbjogWydBaCcsJ0lzJywnU2UnLCdSYScsJ0toJywnSnUnLCdTYSddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMCxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21zJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtcyddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTWFsdGVzZSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IENocml0aWFuIFNjaWJlcnJhcyAodXVmNjQyOUBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtdCddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0phbm5hcicsJ0ZyYXInLCdNYXJ6dScsJ0FwcmlsJywnTWVqanUnLCfEoHVuanUnLFxuXHRcdCdMdWxqdScsJ0F3aXNzdScsJ1NldHRlbWJydScsJ090dHVicnUnLCdOb3ZlbWJydScsJ0RpxItlbWJydSddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCAnRnJhJywgJ01hcicsICdBcHInLCAnTWVqJywgJ8SgdW4nLFxuXHRcdCdMdWwnLCAnQXdpJywgJ1NldCcsICdPdHQnLCAnTm92JywgJ0RpxIsnXSxcblx0XHRkYXlOYW1lczogWydJbC3EpmFkZCcsICdJdC1UbmVqbicsICdJdC1UbGlldGEnLCAnTC1FcmJnxKdhJywgJ0lsLcSmYW1pcycsICdJbC3EoGltZ8SnYScsICdJcy1TaWJ0J10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfEpmFkJywgJ1RuZScsICdUbGknLCAnRXJiJywgJ8SmYW0nLCAnxKBpbScsICdTaWInXSxcblx0XHRkYXlOYW1lc01pbjogWyfEpicsJ1QnLCdUJywnRScsJ8SmJywnxKAnLCdTJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbXQnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ210J107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBEdXRjaC9CZWxnaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTWF0aGlhcyBCeW5lbnMgPGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlLz4uICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ25sLUJFJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnamFudWFyaScsICdmZWJydWFyaScsICdtYWFydCcsICdhcHJpbCcsICdtZWknLCAnanVuaScsXG5cdFx0J2p1bGknLCAnYXVndXN0dXMnLCAnc2VwdGVtYmVyJywgJ29rdG9iZXInLCAnbm92ZW1iZXInLCAnZGVjZW1iZXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnamFuJywgJ2ZlYicsICdtYWEnLCAnYXByJywgJ21laScsICdqdW4nLFxuXHRcdCdqdWwnLCAnYXVnJywgJ3NlcCcsICdva3QnLCAnbm92JywgJ2RlYyddLFxuXHRcdGRheU5hbWVzOiBbJ3pvbmRhZycsICdtYWFuZGFnJywgJ2RpbnNkYWcnLCAnd29lbnNkYWcnLCAnZG9uZGVyZGFnJywgJ3ZyaWpkYWcnLCAnemF0ZXJkYWcnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ3pvbicsICdtYWEnLCAnZGluJywgJ3dvZScsICdkb24nLCAndnJpJywgJ3phdCddLFxuXHRcdGRheU5hbWVzTWluOiBbJ3pvJywgJ21hJywgJ2RpJywgJ3dvJywgJ2RvJywgJ3ZyJywgJ3phJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbmwtQkUnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ25sLUJFJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBEdXRjaCBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IE1hdGhpYXMgQnluZW5zIDxodHRwOi8vbWF0aGlhc2J5bmVucy5iZS8+LiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydubCddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ2phbnVhcmknLCAnZmVicnVhcmknLCAnbWFhcnQnLCAnYXByaWwnLCAnbWVpJywgJ2p1bmknLFxuXHRcdCdqdWxpJywgJ2F1Z3VzdHVzJywgJ3NlcHRlbWJlcicsICdva3RvYmVyJywgJ25vdmVtYmVyJywgJ2RlY2VtYmVyJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ2phbicsICdmZWInLCAnbWFhJywgJ2FwcicsICdtZWknLCAnanVuJyxcblx0XHQnanVsJywgJ2F1ZycsICdzZXAnLCAnb2t0JywgJ25vdicsICdkZWMnXSxcblx0XHRkYXlOYW1lczogWyd6b25kYWcnLCAnbWFhbmRhZycsICdkaW5zZGFnJywgJ3dvZW5zZGFnJywgJ2RvbmRlcmRhZycsICd2cmlqZGFnJywgJ3phdGVyZGFnJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyd6b24nLCAnbWFhJywgJ2RpbicsICd3b2UnLCAnZG9uJywgJ3ZyaScsICd6YXQnXSxcblx0XHRkYXlOYW1lc01pbjogWyd6bycsICdtYScsICdkaScsICd3bycsICdkbycsICd2cicsICd6YSddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC1tbS15eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ25sJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydubCddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTm9yd2VnaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTmFpbWRqb24gVGFraGlyb3YgKG5haW1kam9uQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ25vJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyJywnRmVicnVhcicsJ01hcnMnLCdBcHJpbCcsJ01haScsJ0p1bmknLFxuXHRcdCdKdWxpJywnQXVndXN0JywnU2VwdGVtYmVyJywnT2t0b2JlcicsJ05vdmVtYmVyJywnRGVzZW1iZXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTWFyJywnQXByJywnTWFpJywnSnVuJyxcblx0XHQnSnVsJywnQXVnJywnU2VwJywnT2t0JywnTm92JywnRGVzJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydTw7huJywnTWFuJywnVGlyJywnT25zJywnVG9yJywnRnJlJywnTMO4ciddLFxuXHRcdGRheU5hbWVzOiBbJ1PDuG5kYWcnLCdNYW5kYWcnLCdUaXJzZGFnJywnT25zZGFnJywnVG9yc2RhZycsJ0ZyZWRhZycsJ0zDuHJkYWcnXSxcblx0XHRkYXlOYW1lc01pbjogWydTw7gnLCdNYScsJ1RpJywnT24nLCdUbycsJ0ZyJywnTMO4J10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbm8nXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ25vJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBQb2xpc2ggbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBKYWNlayBXeXNvY2tpIChqYWNlay53eXNvY2tpQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3BsJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnU3R5Y3plxYQnLCdMdXR5JywnTWFyemVjJywnS3dpZWNpZcWEJywnTWFqJywnQ3plcndpZWMnLFxuXHRcdCdMaXBpZWMnLCdTaWVycGllxYQnLCdXcnplc2llxYQnLCdQYcW6ZHppZXJuaWsnLCdMaXN0b3BhZCcsJ0dydWR6aWXFhCddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydTdHknLCdMdScsJ01hcicsJ0t3JywnTWFqJywnQ3plJyxcblx0XHQnTGlwJywnU2llJywnV3J6JywnUGEnLCdMaXMnLCdHcnUnXSxcblx0XHRkYXlOYW1lczogWydOaWVkemllbGEnLCdQb25pZWR6aWFsZWsnLCdXdG9yZWsnLCfFmnJvZGEnLCdDendhcnRlaycsJ1BpxIV0ZWsnLCdTb2JvdGEnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ05pZScsJ1BuJywnV3QnLCfFmnInLCdDencnLCdQdCcsJ1NvJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnTicsJ1BuJywnV3QnLCfFmnInLCdDeicsJ1B0JywnU28nXSxcblx0XHRkYXRlRm9ybWF0OiAneXl5eS1tbS1kZCcsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydwbCddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncGwnXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEJyYXppbGlhbiBQb3J0dWd1ZXNlIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTGVvbmlsZG8gQ29zdGEgU2lsdmEgKGxlb2NzaWx2YUBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydwdC1CUiddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0phbmVpcm8nLCdGZXZlcmVpcm8nLCdNYXLDp28nLCdBYnJpbCcsJ01haW8nLCdKdW5obycsXG5cdFx0J0p1bGhvJywnQWdvc3RvJywnU2V0ZW1icm8nLCdPdXR1YnJvJywnTm92ZW1icm8nLCdEZXplbWJybyddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZXYnLCdNYXInLCdBYnInLCdNYWknLCdKdW4nLFxuXHRcdCdKdWwnLCdBZ28nLCdTZXQnLCdPdXQnLCdOb3YnLCdEZXonXSxcblx0XHRkYXlOYW1lczogWydEb21pbmdvJywnU2VndW5kYS1mZWlyYScsJ1RlcsOnYS1mZWlyYScsJ1F1YXJ0YS1mZWlyYScsJ1F1aW50YS1mZWlyYScsJ1NleHRhLWZlaXJhJywnU8OhYmFkbyddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRG9tJywnU2VnJywnVGVyJywnUXVhJywnUXVpJywnU2V4JywnU8OhYiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ0RvbScsJ1NlZycsJ1RlcicsJ1F1YScsJ1F1aScsJ1NleCcsJ1PDoWInXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDAsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydwdC1CUiddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncHQtQlInXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFJvbWFuc2ggbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgWXZvbm5lIEdpZW5hbCAoeXZvbm5lLmdpZW5hbEBlZHVjYS5jaCkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3JtJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnU2NoYW5lcicsJ0ZhdnJlcicsJ01hcnMnLCdBdnJpZ2wnLCdNYXRnJywnWmVyY2xhZHVyJyxcblx0XHQnRmFuYWR1cicsJ0F2dXN0JywnU2V0dGVtYmVyJywnT2N0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnU2NoYScsJ0ZldicsJ01hcicsJ0F2cicsJ01hdGcnLCdaZXInLFxuXHRcdCdGYW4nLCdBdnUnLCdTZXR0JywnT2N0JywnTm92JywnRGVjJ10sXG5cdFx0ZGF5TmFtZXM6IFsnRHVtZW5naWEnLCdHbGluZGVzZGknLCdNYXJkaScsJ01lc2VtbmEnLCdHaWV2Z2lhJywnVmVuZGVyZGknLCdTb25kYSddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRHVtJywnR2xpJywnTWFyJywnTWVzJywnR2llJywnVmVuJywnU29tJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnRHUnLCdHbCcsJ01hJywnTWUnLCdHaScsJ1ZlJywnU28nXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydybSddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncm0nXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFJvbWFuaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgRWRtb25kIEwuIChsbF9lZG1vbmRAd2FsbGEuY29tKSBhbmQgSW9udXQgRy4gU3RhbiAoaW9udXQuZy5zdGFuQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3JvJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSWFudWFyaWUnLCdGZWJydWFyaWUnLCdNYXJ0aWUnLCdBcHJpbGllJywnTWFpJywnSXVuaWUnLFxuXHRcdCdJdWxpZScsJ0F1Z3VzdCcsJ1NlcHRlbWJyaWUnLCdPY3RvbWJyaWUnLCdOb2llbWJyaWUnLCdEZWNlbWJyaWUnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSWFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01haScsICdJdW4nLFxuXHRcdCdJdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm9pJywgJ0RlYyddLFxuXHRcdGRheU5hbWVzOiBbJ0R1bWluaWPEgycsICdMdW5pJywgJ01hcnRpJywgJ01pZXJjdXJpJywgJ0pvaScsICdWaW5lcmknLCAnU8OibWLEg3TEgyddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRHVtJywgJ0x1bicsICdNYXInLCAnTWllJywgJ0pvaScsICdWaW4nLCAnU8OibSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ0R1JywnTHUnLCdNYScsJ01pJywnSm8nLCdWaScsJ1PDoiddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3JvJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydybyddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgUnVzc2lhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEFuZHJldyBTdHJvbW5vdiAoc3Ryb21ub3ZAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncnUnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWyfQr9C90LLQsNGA0YwnLCfQpNC10LLRgNCw0LvRjCcsJ9Cc0LDRgNGCJywn0JDQv9GA0LXQu9GMJywn0JzQsNC5Jywn0JjRjtC90YwnLFxuXHRcdCfQmNGO0LvRjCcsJ9CQ0LLQs9GD0YHRgicsJ9Ch0LXQvdGC0Y/QsdGA0YwnLCfQntC60YLRj9Cx0YDRjCcsJ9Cd0L7Rj9Cx0YDRjCcsJ9CU0LXQutCw0LHRgNGMJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ9Cv0L3QsicsJ9Ck0LXQsicsJ9Cc0LDRgCcsJ9CQ0L/RgCcsJ9Cc0LDQuScsJ9CY0Y7QvScsXG5cdFx0J9CY0Y7QuycsJ9CQ0LLQsycsJ9Ch0LXQvScsJ9Ce0LrRgicsJ9Cd0L7RjycsJ9CU0LXQuiddLFxuXHRcdGRheU5hbWVzOiBbJ9Cy0L7RgdC60YDQtdGB0LXQvdGM0LUnLCfQv9C+0L3QtdC00LXQu9GM0L3QuNC6Jywn0LLRgtC+0YDQvdC40LonLCfRgdGA0LXQtNCwJywn0YfQtdGC0LLQtdGA0LMnLCfQv9GP0YLQvdC40YbQsCcsJ9GB0YPQsdCx0L7RgtCwJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfQstGB0LonLCfQv9C90LQnLCfQstGC0YAnLCfRgdGA0LQnLCfRh9GC0LInLCfQv9GC0L0nLCfRgdCx0YInXSxcblx0XHRkYXlOYW1lc01pbjogWyfQktGBJywn0J/QvScsJ9CS0YInLCfQodGAJywn0KfRgicsJ9Cf0YInLCfQodCxJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncnUnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3J1J107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBTbG92YWsgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBWb2p0ZWNoIFJpbmlrICh2b2p0b0BobW0uc2spLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzayddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0phbnXDoXInLCdGZWJydcOhcicsJ01hcmVjJywnQXByw61sJywnTcOhaicsJ0rDum4nLFxuXHRcdCdKw7psJywnQXVndXN0JywnU2VwdGVtYmVyJywnT2t0w7NiZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ03DoWonLCdKw7puJyxcblx0XHQnSsO6bCcsJ0F1ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RlYyddLFxuXHRcdGRheU5hbWVzOiBbJ05lZGVsXFwnYScsJ1BvbmRlbG9rJywnVXRvcm9rJywnU3RyZWRhJywnxaB0dnJ0b2snLCdQaWF0b2snLCdTb2JvdGEnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ05lZCcsJ1BvbicsJ1V0bycsJ1N0cicsJ8WgdHYnLCdQaWEnLCdTb2InXSxcblx0XHRkYXlOYW1lc01pbjogWydOZScsJ1BvJywnVXQnLCdTdCcsJ8WgdCcsJ1BpYScsJ1NvJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxuXHRcdGZpcnN0RGF5OiAwLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc2snXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NrJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBTbG92ZW5pYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBKYWthIEphbmNhciAoamFrYUBrdWJqZS5vcmcpLiAqL1xuLyogYyA9ICYjeDEwRDssIHMgPSAmI3gxNjE7IHogPSAmI3gxN0U7IEMgPSAmI3gxMEM7IFMgPSAmI3gxNjA7IFogPSAmI3gxN0Q7ICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NsJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyJywnRmVicnVhcicsJ01hcmVjJywnQXByaWwnLCdNYWonLCdKdW5paicsXG5cdFx0J0p1bGlqJywnQXZndXN0JywnU2VwdGVtYmVyJywnT2t0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTWFyJywnQXByJywnTWFqJywnSnVuJyxcblx0XHQnSnVsJywnQXZnJywnU2VwJywnT2t0JywnTm92JywnRGVjJ10sXG5cdFx0ZGF5TmFtZXM6IFsnTmVkZWxqYScsJ1BvbmVkZWxqZWsnLCdUb3JlaycsJ1NyZWRhJywnJiN4MTBDO2V0cnRlaycsJ1BldGVrJywnU29ib3RhJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydOZWQnLCdQb24nLCdUb3InLCdTcmUnLCcmI3gxMEM7ZXQnLCdQZXQnLCdTb2InXSxcblx0XHRkYXlOYW1lc01pbjogWydOZScsJ1BvJywnVG8nLCdTcicsJyYjeDEwQztlJywnUGUnLCdTbyddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NsJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzbCddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQWxiYW5pYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBGbGFrcm9uIEJ5dHlxaSAoZmxha3JvbkBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzcSddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ0phbmFyJywnU2hrdXJ0JywnTWFycycsJ1ByaWxsJywnTWFqJywnUWVyc2hvcicsXG5cdFx0J0tvcnJpaycsJ0d1c2h0JywnU2h0YXRvcicsJ1RldG9yJywnTsOrbnRvcicsJ0RoamV0b3InXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnU2hrJywnTWFyJywnUHJpJywnTWFqJywnUWVyJyxcblx0XHQnS29yJywnR3VzJywnU2h0JywnVGV0JywnTsOrbicsJ0RoaiddLFxuXHRcdGRheU5hbWVzOiBbJ0UgRGllbCcsJ0UgSMOrbsOrJywnRSBNYXJ0w6snLCdFIE3Dq3JrdXLDqycsJ0UgRW5qdGUnLCdFIFByZW10ZScsJ0UgU2h0dW5lJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydEaScsJ0jDqycsJ01hJywnTcOrJywnRW4nLCdQcicsJ1NoJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnRGknLCdIw6snLCdNYScsJ03DqycsJ0VuJywnUHInLCdTaCddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NxJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzcSddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU2VyYmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IERlamFuIERpbWnEhy4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3ItU1InXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydKYW51YXInLCdGZWJydWFyJywnTWFydCcsJ0FwcmlsJywnTWFqJywnSnVuJyxcblx0XHQnSnVsJywnQXZndXN0JywnU2VwdGVtYmFyJywnT2t0b2JhcicsJ05vdmVtYmFyJywnRGVjZW1iYXInXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTWFyJywnQXByJywnTWFqJywnSnVuJywnSnVsJywnQXZnJywnU2VwJywnT2t0JywnTm92JywnRGVjJ10sXG5cdFx0ZGF5TmFtZXM6IFsnTmVkZWxqYScsJ1BvbmVkZWxqYWsnLCdVdG9yYWsnLCdTcmVkYScsJ8SMZXR2cnRhaycsJ1BldGFrJywnU3Vib3RhJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydOZWQnLCdQb24nLCdVdG8nLCdTcmUnLCfEjGV0JywnUGV0JywnU3ViJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnTmUnLCdQbycsJ1V0JywnU3InLCfEjGUnLCdQZScsJ1N1J10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3ItU1InXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NyLVNSJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBTZXJiaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgRGVqYW4gRGltacSHLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzciddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ9CI0LDQvdGD0LDRgCcsJ9Ck0LXQsdGA0YPQsNGAJywn0JzQsNGA0YInLCfQkNC/0YDQuNC7Jywn0JzQsNGYJywn0IjRg9C9Jyxcblx0XHQn0IjRg9C7Jywn0JDQstCz0YPRgdGCJywn0KHQtdC/0YLQtdC80LHQsNGAJywn0J7QutGC0L7QsdCw0YAnLCfQndC+0LLQtdC80LHQsNGAJywn0JTQtdGG0LXQvNCx0LDRgCddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfQiNCw0L0nLCfQpNC10LEnLCfQnNCw0YAnLCfQkNC/0YAnLCfQnNCw0ZgnLCfQiNGD0L0nLCfQiNGD0LsnLCfQkNCy0LMnLCfQodC10L8nLCfQntC60YInLCfQndC+0LInLCfQlNC10YYnXSxcblx0XHRkYXlOYW1lczogWyfQndC10LTQtdGZ0LAnLCfQn9C+0L3QtdC00LXRmdCw0LonLCfQo9GC0L7RgNCw0LonLCfQodGA0LXQtNCwJywn0KfQtdGC0LLRgNGC0LDQuicsJ9Cf0LXRgtCw0LonLCfQodGD0LHQvtGC0LAnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9Cd0LXQtCcsJ9Cf0L7QvScsJ9Cj0YLQvicsJ9Ch0YDQtScsJ9Cn0LXRgicsJ9Cf0LXRgicsJ9Ch0YPQsSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ9Cd0LUnLCfQn9C+Jywn0KPRgicsJ9Ch0YAnLCfQp9C1Jywn0J/QtScsJ9Ch0YMnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzciddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3InXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFN3ZWRpc2ggbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBBbmRlcnMgRWtkYWhsIChhbmRlcnNAbm9tYWRpei5zZSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3N2J10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuICAgICAgICBtb250aE5hbWVzOiBbJ0phbnVhcmknLCdGZWJydWFyaScsJ01hcnMnLCdBcHJpbCcsJ01haicsJ0p1bmknLFxuICAgICAgICAnSnVsaScsJ0F1Z3VzdGknLCdTZXB0ZW1iZXInLCdPa3RvYmVyJywnTm92ZW1iZXInLCdEZWNlbWJlciddLFxuICAgICAgICBtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTWFyJywnQXByJywnTWFqJywnSnVuJyxcbiAgICAgICAgJ0p1bCcsJ0F1ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RlYyddLFxuXHRcdGRheU5hbWVzOiBbJ1PDtm5kYWcnLCdNw6VuZGFnJywnVGlzZGFnJywnT25zZGFnJywnVG9yc2RhZycsJ0ZyZWRhZycsJ0zDtnJkYWcnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ1PDtm4nLCdNw6VuJywnVGlzJywnT25zJywnVG9yJywnRnJlJywnTMO2ciddLFxuXHRcdGRheU5hbWVzTWluOiBbJ1PDticsJ03DpScsJ1RpJywnT24nLCdUbycsJ0ZyJywnTMO2J10sXG4gICAgICAgIGRhdGVGb3JtYXQ6ICd5eXl5LW1tLWRkJyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3N2J10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzdiddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgVGFtaWwgKFVURi04KSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IFMgQSBTdXJlc2hrdW1hciAoc2Fza3VtYXJAbGl2ZS5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd0YSddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ+CupOCviCcsJ+CuruCuvuCumuCuvycsJ+CuquCumeCvjeCuleCvgeCuqeCuvycsJ+CumuCuv+CupOCvjeCupOCuv+CusOCviCcsJ+CuteCviOCuleCuvuCumuCuvycsJ+CuhuCuqeCuvycsXG5cdFx0J+CuhuCun+CuvycsJ+CuhuCuteCuo+CuvycsJ+CuquCvgeCusOCun+CvjeCun+CuvuCumuCuvycsJ+CukOCuquCvjeCuquCumuCuvycsJ+CuleCuvuCusOCvjeCupOCvjeCupOCuv+CuleCviCcsJ+CuruCuvuCusOCvjeCuleCutOCuvyddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfgrqTgr4gnLCfgrq7grr7grprgrr8nLCfgrqrgrpngr40nLCfgrprgrr/grqTgr40nLCfgrrXgr4jgrpXgrr4nLCfgrobgrqngrr8nLFxuXHRcdCfgrobgrp/grr8nLCfgrobgrrUnLCfgrqrgr4HgrrAnLCfgrpDgrqrgr40nLCfgrpXgrr7grrDgr40nLCfgrq7grr7grrDgr40nXSxcblx0XHRkYXlOYW1lczogWyfgrp7grr7grq/grr/grrHgr43grrHgr4HgrpXgr43grpXgrr/grrTgrq7gr4gnLCfgrqTgrr/grpngr43grpXgrp/gr43grpXgrr/grrTgrq7gr4gnLCfgrprgr4bgrrXgr43grrXgrr7grq/gr43grpXgr43grpXgrr/grrTgrq7gr4gnLCfgrqrgr4HgrqTgrqngr43grpXgrr/grrTgrq7gr4gnLCfgrrXgrr/grq/grr7grrTgrpXgr43grpXgrr/grrTgrq7gr4gnLCfgrrXgr4bgrrPgr43grrPgrr/grpXgr43grpXgrr/grrTgrq7gr4gnLCfgrprgrqngrr/grpXgr43grpXgrr/grrTgrq7gr4gnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+CunuCuvuCur+Cuv+CuseCvgScsJ+CupOCuv+CumeCvjeCuleCus+CvjScsJ+CumuCvhuCuteCvjeCuteCuvuCur+CvjScsJ+CuquCvgeCupOCuqeCvjScsJ+CuteCuv+Cur+CuvuCutOCuqeCvjScsJ+CuteCvhuCus+CvjeCus+CuvycsJ+CumuCuqeCuvyddLFxuXHRcdGRheU5hbWVzTWluOiBbJ+CunuCuvicsJ+CupOCuvycsJ+CumuCvhicsJ+CuquCvgScsJ+CuteCuvycsJ+CuteCvhicsJ+CumiddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3RhJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd0YSddO1xuXHR9XG59KShqUXVlcnkpO1xuLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgVGhhaSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IHBpcG8gKHBpcG9Ac2l4aGVhZC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd0aCddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ+C4oeC4geC4o+C4suC4hOC4oScsJ+C4geC4uOC4oeC4oOC4suC4nuC4seC4meC4mOC5jCcsJ+C4oeC4teC4meC4suC4hOC4oScsJ+C5gOC4oeC4qeC4suC4ouC4mScsJ+C4nuC4pOC4qeC4oOC4suC4hOC4oScsJ+C4oeC4tOC4luC4uOC4meC4suC4ouC4mScsXG5cdFx0J+C4geC4o+C4geC4juC4suC4hOC4oScsJ+C4quC4tOC4h+C4q+C4suC4hOC4oScsJ+C4geC4seC4meC4ouC4suC4ouC4mScsJ+C4leC4uOC4peC4suC4hOC4oScsJ+C4nuC4pOC4qOC4iOC4tOC4geC4suC4ouC4mScsJ+C4mOC4seC4meC4p+C4suC4hOC4oSddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfguKEu4LiELicsJ+C4gS7guJ4uJywn4Lih4Li1LuC4hC4nLCfguYDguKEu4LiiLicsJ+C4ni7guIQuJywn4Lih4Li0LuC4oi4nLFxuXHRcdCfguIEu4LiELicsJ+C4qi7guIQuJywn4LiBLuC4oi4nLCfguJUu4LiELicsJ+C4ni7guKIuJywn4LiYLuC4hC4nXSxcblx0XHRkYXlOYW1lczogWyfguK3guLLguJfguLTguJXguKLguYwnLCfguIjguLHguJnguJfguKPguYwnLCfguK3guLHguIfguITguLLguKMnLCfguJ7guLjguJgnLCfguJ7guKTguKvguLHguKrguJrguJTguLUnLCfguKjguLjguIHguKPguYwnLCfguYDguKrguLLguKPguYwnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+C4reC4si4nLCfguIguJywn4LitLicsJ+C4ni4nLCfguJ7guKQuJywn4LioLicsJ+C4qi4nXSxcblx0XHRkYXlOYW1lc01pbjogWyfguK3guLIuJywn4LiILicsJ+C4rS4nLCfguJ4uJywn4Lie4LikLicsJ+C4qC4nLCfguKouJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxuXHRcdGZpcnN0RGF5OiAwLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndGgnXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3RoJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBUdXJraXNoIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgSXp6ZXQgRW1yZSBFcmthbiAoa2FyYUBrYXJhbGFtYWxhci5uZXQpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd0ciddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ09jYWsnLCfFnnViYXQnLCdNYXJ0JywnTmlzYW4nLCdNYXnEsXMnLCdIYXppcmFuJyxcblx0XHQnVGVtbXV6JywnQcSfdXN0b3MnLCdFeWzDvGwnLCdFa2ltJywnS2FzxLFtJywnQXJhbMSxayddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydPY2EnLCfFnnViJywnTWFyJywnTmlzJywnTWF5JywnSGF6Jyxcblx0XHQnVGVtJywnQcSfdScsJ0V5bCcsJ0VraScsJ0thcycsJ0FyYSddLFxuXHRcdGRheU5hbWVzOiBbJ1BhemFyJywnUGF6YXJ0ZXNpJywnU2FsxLEnLCfDh2FyxZ9hbWJhJywnUGVyxZ9lbWJlJywnQ3VtYScsJ0N1bWFydGVzaSddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnUHonLCdQdCcsJ1NhJywnw4dhJywnUGUnLCdDdScsJ0N0J10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnUHonLCdQdCcsJ1NhJywnw4dhJywnUGUnLCdDdScsJ0N0J10sXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndHInXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3RyJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBUYXRhciBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5INCY0YDQtdC6INCl0LDSl9C40LXQsiAoa2hhemlyZWtAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndHQnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWyfQk9GL0L3QstCw0YAnLCfQpNC10LLRgNCw0LvRjCcsJ9Cc0LDRgNGCJywn0JDQv9GA0LXQu9GMJywn0JzQsNC5Jywn0JjRjtC90YwnLFxuXHRcdCfQmNGO0LvRjCcsJ9CQ0LLQs9GD0YHRgicsJ9Ch0LXQvdGC0Y/QsdGA0YwnLCfQntC60YLRj9Cx0YDRjCcsJ9Cd0L7Rj9Cx0YDRjCcsJ9CU0LXQutCw0LHRgNGMJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ9CT0YvQudC9Jywn0KTQtdCyJywn0JzQsNGAJywn0JDQv9GAJywn0JzQsNC5Jywn0JjRjtC9Jyxcblx0XHQn0JjRjtC7Jywn0JDQstCzJywn0KHQtdC9Jywn0J7QutGCJywn0J3QvtGPJywn0JTQtdC6J10sXG5cdFx0ZGF5TmFtZXM6IFsn0Y/QutGI05nQvNCx0LUnLCfQtNKv0YjTmdC80LHQtScsJ9GB0LjRiNOZ0LzQsdC1Jywn0YfTmdGA0YjTmdC80LHQtScsJ9C/05nQvdKX0LXRiNOZ0LzQsdC1Jywn0pfQvtC80LPQsCcsJ9GI0LjQvNCx05knXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9GP0LrRiCcsJ9C00q/RiCcsJ9GB0LjRiCcsJ9GH05nRgCcsJ9C/05nQvScsJ9KX0L7QvCcsJ9GI0LjQvCddLFxuXHRcdGRheU5hbWVzTWluOiBbJ9Cv0LonLCfQlNKvJywn0KHQuCcsJ9Cn05knLCfQn9OZJywn0pbQvicsJ9Co0LgnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd0dCddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndHQnXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFVrcmFpbmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IE1heGltIERyb2dvYml0c2tpeSAobWF4ZGFvQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3VrJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsn0KHRltGH0LXQvdGMJywn0JvRjtGC0LjQuScsJ9CR0LXRgNC10LfQtdC90YwnLCfQmtCy0ZbRgtC10L3RjCcsJ9Ci0YDQsNCy0LXQvdGMJywn0KfQtdGA0LLQtdC90YwnLFxuXHRcdCfQm9C40L/QtdC90YwnLCfQodC10YDQv9C10L3RjCcsJ9CS0LXRgNC10YHQtdC90YwnLCfQltC+0LLRgtC10L3RjCcsJ9Cb0LjRgdGC0L7Qv9Cw0LQnLCfQk9GA0YPQtNC10L3RjCddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfQodGW0YcnLCfQm9GO0YInLCfQkdC10YAnLCfQmtCy0ZYnLCfQotGA0LAnLCfQp9C10YAnLFxuXHRcdCfQm9C40L8nLCfQodC10YAnLCfQktC10YAnLCfQltC+0LInLCfQm9C40YEnLCfQk9GA0YMnXSxcblx0XHRkYXlOYW1lczogWyfQvdC10LTRltC70Y8nLCfQv9C+0L3QtdC00ZbQu9C+0LonLCfQstGW0LLRgtC+0YDQvtC6Jywn0YHQtdGA0LXQtNCwJywn0YfQtdGC0LLQtdGAJywn0L9cXCfRj9GC0L3QuNGG0Y8nLCfRgdGD0LHQvtGC0LAnXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9C90LXQtCcsJ9C/0L3QtCcsJ9Cy0ZbQsicsJ9GB0YDQtCcsJ9GH0YLQsicsJ9C/0YLQvScsJ9GB0LHRgiddLFxuXHRcdGRheU5hbWVzTWluOiBbJ9Cd0LQnLCfQn9C9Jywn0JLRgicsJ9Ch0YAnLCfQp9GCJywn0J/RgicsJ9Ch0LEnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd1ayddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndWsnXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFVyZHUgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgTWFuc29vciBNdW5pYiAtLSBtYW5zb29ybXVuaWJAZ21haWwuY29tIDxodHRwOi8vd3d3Lm1hbnNvb3IuY28ubnIvbWFuc29vci5odG1sPlxuICAgVGhhbmtzIHRvIEhhYmliIEFobWVkLCBPYmFpZFVsbGFoIEFud2FyLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd1ciddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ9is2YbZiNix24wnLCfZgdix2YjYsduMJywn2YXYp9ix2oYnLCfYp9m+2LHbjNmEJywn2YXYptuMJywn2KzZiNmGJyxcblx0XHQn2KzZiNmE2KfYptuMJywn2Kfar9iz2KonLCfYs9iq2YXYqNixJywn2Kfaqdiq2YjYqNixJywn2YbZiNmF2KjYsScsJ9iv2LPZhdio2LEnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnMScsJzInLCczJywnNCcsJzUnLCc2Jyxcblx0XHQnNycsJzgnLCc5JywnMTAnLCcxMScsJzEyJ10sXG5cdFx0ZGF5TmFtZXM6IFsn2KfYqtmI2KfYsScsJ9m+2YrYsScsJ9mF2Ybar9mEJywn2KjYr9q+Jywn2KzZhdi52LHYp9iqJywn2KzZhdi524EnLCfbgdmB2KrbgSddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn2KfYqtmI2KfYsScsJ9m+2YrYsScsJ9mF2Ybar9mEJywn2KjYr9q+Jywn2KzZhdi52LHYp9iqJywn2KzZhdi524EnLCfbgdmB2KrbgSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ9in2KrZiNin2LEnLCfZvtmK2LEnLCfZhdmG2q/ZhCcsJ9io2K/avicsJ9is2YXYudix2KfYqicsJ9is2YXYuduBJywn24HZgdiq24EnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDAsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IHRydWVcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3VyJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd1ciddO1xuXHR9XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgVmlldG5hbWVzZSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBUcmFuc2xhdGVkIGJ5IExlIFRoYW5oIEh1eSAobHRoYW5oaHV5QGNpdC5jdHUuZWR1LnZuKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndmknXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWydUaMOhbmcgTeG7mXQnLCAnVGjDoW5nIEhhaScsICdUaMOhbmcgQmEnLCAnVGjDoW5nIFTGsCcsICdUaMOhbmcgTsSDbScsICdUaMOhbmcgU8OhdScsXG5cdFx0J1Row6FuZyBC4bqjeScsICdUaMOhbmcgVMOhbScsICdUaMOhbmcgQ2jDrW4nLCAnVGjDoW5nIE3GsOG7nWknLCAnVGjDoW5nIE3GsOG7nWkgTeG7mXQnLCAnVGjDoW5nIE3GsOG7nWkgSGFpJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ1Row6FuZyAxJywgJ1Row6FuZyAyJywgJ1Row6FuZyAzJywgJ1Row6FuZyA0JywgJ1Row6FuZyA1JywgJ1Row6FuZyA2Jyxcblx0XHQnVGjDoW5nIDcnLCAnVGjDoW5nIDgnLCAnVGjDoW5nIDknLCAnVGjDoW5nIDEwJywgJ1Row6FuZyAxMScsICdUaMOhbmcgMTInXSxcblx0XHRkYXlOYW1lczogWydDaOG7pyBOaOG6rXQnLCAnVGjhu6kgSGFpJywgJ1Ro4bupIEJhJywgJ1Ro4bupIFTGsCcsICdUaOG7qSBOxINtJywgJ1Ro4bupIFPDoXUnLCAnVGjhu6kgQuG6o3knXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0NOJywgJ1QyJywgJ1QzJywgJ1Q0JywgJ1Q1JywgJ1Q2JywgJ1Q3J10sXG5cdFx0ZGF5TmFtZXNNaW46IFsnQ04nLCAnVDInLCAnVDMnLCAnVDQnLCAnVDUnLCAnVDYnLCAnVDcnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDAsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd2aSddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndmknXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFNpbXBsaWZpZWQgQ2hpbmVzZSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IENsb3VkcmVhbSAoY2xvdWRyZWFtQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3poLUNOJ10gPSB7XG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxuXHRcdG1vbnRoTmFtZXM6IFsn5LiA5pyIJywn5LqM5pyIJywn5LiJ5pyIJywn5Zub5pyIJywn5LqU5pyIJywn5YWt5pyIJyxcblx0XHQn5LiD5pyIJywn5YWr5pyIJywn5Lmd5pyIJywn5Y2B5pyIJywn5Y2B5LiA5pyIJywn5Y2B5LqM5pyIJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ+S4gCcsJ+S6jCcsJ+S4iScsJ+WbmycsJ+S6lCcsJ+WFrScsXG5cdFx0J+S4gycsJ+WFqycsJ+S5nScsJ+WNgScsJ+WNgeS4gCcsJ+WNgeS6jCddLFxuXHRcdGRheU5hbWVzOiBbJ+aYn+acn+aXpScsJ+aYn+acn+S4gCcsJ+aYn+acn+S6jCcsJ+aYn+acn+S4iScsJ+aYn+acn+WbmycsJ+aYn+acn+S6lCcsJ+aYn+acn+WFrSddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn5ZGo5pelJywn5ZGo5LiAJywn5ZGo5LqMJywn5ZGo5LiJJywn5ZGo5ZubJywn5ZGo5LqUJywn5ZGo5YWtJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn5pelJywn5LiAJywn5LqMJywn5LiJJywn5ZubJywn5LqUJywn5YWtJ10sXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXktbW0tZGQnLFxuXHRcdGZpcnN0RGF5OiAxLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snemgtQ04nXSA9XG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3poLUNOJ107XG5cdH1cbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBIb25nIEtvbmcgIENoaW5lc2UgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBTQ0NZIChzYW11ZWxjeWNoYW5AZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snemgtSEsnXSA9IHtcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXG5cdFx0bW9udGhOYW1lczogWyfkuIDmnIgnLCfkuozmnIgnLCfkuInmnIgnLCflm5vmnIgnLCfkupTmnIgnLCflha3mnIgnLFxuXHRcdCfkuIPmnIgnLCflhavmnIgnLCfkuZ3mnIgnLCfljYHmnIgnLCfljYHkuIDmnIgnLCfljYHkuozmnIgnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn5LiAJywn5LqMJywn5LiJJywn5ZubJywn5LqUJywn5YWtJyxcblx0XHQn5LiDJywn5YWrJywn5LmdJywn5Y2BJywn5Y2B5LiAJywn5Y2B5LqMJ10sXG5cdFx0ZGF5TmFtZXM6IFsn5pif5pyf5pelJywn5pif5pyf5LiAJywn5pif5pyf5LqMJywn5pif5pyf5LiJJywn5pif5pyf5ZubJywn5pif5pyf5LqUJywn5pif5pyf5YWtJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyflkajml6UnLCflkajkuIAnLCflkajkuownLCflkajkuIknLCflkajlm5snLCflkajkupQnLCflkajlha0nXSxcblx0XHRkYXlOYW1lc01pbjogWyfml6UnLCfkuIAnLCfkuownLCfkuIknLCflm5snLCfkupQnLCflha0nXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQtbW0teXl5eScsXG5cdFx0Zmlyc3REYXk6IDAsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd6aC1ISyddID1cblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snemgtSEsnXTtcblx0fVxufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFRyYWRpdGlvbmFsIENoaW5lc2UgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBSZXNzb2wgKHJlc3NvbEBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd6aC1UVyddID0ge1xuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcblx0XHRtb250aE5hbWVzOiBbJ+S4gOaciCcsJ+S6jOaciCcsJ+S4ieaciCcsJ+Wbm+aciCcsJ+S6lOaciCcsJ+WFreaciCcsXG5cdFx0J+S4g+aciCcsJ+WFq+aciCcsJ+S5neaciCcsJ+WNgeaciCcsJ+WNgeS4gOaciCcsJ+WNgeS6jOaciCddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfkuIAnLCfkuownLCfkuIknLCflm5snLCfkupQnLCflha0nLFxuXHRcdCfkuIMnLCflhasnLCfkuZ0nLCfljYEnLCfljYHkuIAnLCfljYHkuownXSxcblx0XHRkYXlOYW1lczogWyfmmJ/mnJ/ml6UnLCfmmJ/mnJ/kuIAnLCfmmJ/mnJ/kuownLCfmmJ/mnJ/kuIknLCfmmJ/mnJ/lm5snLCfmmJ/mnJ/kupQnLCfmmJ/mnJ/lha0nXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+WRqOaXpScsJ+WRqOS4gCcsJ+WRqOS6jCcsJ+WRqOS4iScsJ+WRqOWbmycsJ+WRqOS6lCcsJ+WRqOWFrSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ+aXpScsJ+S4gCcsJ+S6jCcsJ+S4iScsJ+WbmycsJ+S6lCcsJ+WFrSddLFxuXHRcdGRhdGVGb3JtYXQ6ICd5eXl5L21tL2RkJyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3poLVRXJ10gPVxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd6aC1UVyddO1xuXHR9XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMubGFuZy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMubGFuZy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgQ2FsZW5kYXJzIGxvY2FsaXNhdGlvbnMgZm9yIGpRdWVyeSB2Mi4wLjEuXHJcbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgQXVndXN0IDIwMDkuXHJcbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXHJcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xyXG4vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEFmcmlrYWFucyBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgUmVuaWVyIFByZXRvcml1cyBhbmQgUnVlZGlnZXIgVGhpZWRlLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYWYnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW51YXJpZScsJ0ZlYnJ1YXJpZScsJ01hYXJ0JywnQXByaWwnLCdNZWknLCdKdW5pZScsXHJcblx0XHQnSnVsaWUnLCdBdWd1c3R1cycsJ1NlcHRlbWJlcicsJ09rdG9iZXInLCdOb3ZlbWJlcicsJ0Rlc2VtYmVyJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywgJ0ZlYicsICdNcnQnLCAnQXByJywgJ01laScsICdKdW4nLFxyXG5cdFx0J0p1bCcsICdBdWcnLCAnU2VwJywgJ09rdCcsICdOb3YnLCAnRGVzJ10sXHJcblx0XHRkYXlOYW1lczogWydTb25kYWcnLCAnTWFhbmRhZycsICdEaW5zZGFnJywgJ1dvZW5zZGFnJywgJ0RvbmRlcmRhZycsICdWcnlkYWcnLCAnU2F0ZXJkYWcnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU29uJywgJ01hYW4nLCAnRGlucycsICdXb2VucycsICdEb24nLCAnVnJ5JywgJ1NhdCddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnU28nLCdNYScsJ0RpJywnV28nLCdEbycsJ1ZyJywnU2EnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydhZiddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydhZiddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBBbWhhcmljICjhiqDhiJvhiK3hipspIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgTGV5dSBTaXNheS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FtJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn4YyD4YqV4YuL4YiqJywn4Y2I4Yml4Yit4YuL4YiqJywn4Yib4Yit4Ym9Jywn4Yqg4Y2V4Yiq4YiNJywn4Yic4YutJywn4YyB4YqVJyxcclxuXHRcdCfhjIHhiIvhi60nLCfhiqbhjIjhiLXhibUnLCfhiLThjZXhibThiJ3hiaDhiK0nLCfhiqbhiq3hibbhiaDhiK0nLCfhipbhiazhiJ3hiaDhiK0nLCfhi7LhiLThiJ3hiaDhiK0nXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfhjIPhipXhi4snLCAn4Y2I4Yml4YitJywgJ+GIm+GIreGJvScsICfhiqDhjZXhiKonLCAn4Yic4YutJywgJ+GMgeGKlScsXHJcblx0XHQn4YyB4YiL4YutJywgJ+GKpuGMiOGItScsICfhiLThjZXhibQnLCAn4Yqm4Yqt4Ym2JywgJ+GKluGJrOGInScsICfhi7LhiLThiJ0nXSxcclxuXHRcdGRheU5hbWVzOiBbJ+GIsOGKleGLtOGLrScsICfhiJjhipXhi7Thi60nLCAn4Ym14Yup4Yi14Yu04YutJywgJ+GLjOGKleGIteGLtOGLrScsICfhibDhiK3hiLDhi7Thi60nLCAn4Y2N4Yir4Yut4Yu04YutJywgJ+GIs+GJsOGIreGLtOGLrSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfhiLDhipXhi7QnLCAn4YiY4YqV4Yu0JywgJ+GJteGLqeGItScsICfhi4zhipXhiLUnLCAn4Ymw4Yit4YiwJywgJ+GNjeGIq+GLrScsICfhiLPhibDhiK0nXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ+GIsOGKlScsICfhiJjhipUnLCAn4Ym14YupJywgJ+GLjOGKlScsICfhibDhiK0nLCAn4Y2N4YirJywgJ+GIs+GJsCddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FtJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FtJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEFsZ2VyaWFuIChhbmQgVHVuaXNpYW4pIEFyYWJpYyBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIE1vaGFtZWQgQ2hlcmlmIEJPVUNIRUxBR0hFTSAtLSBjaGVyaWZib3VjaGVsYWdoZW1AeWFob28uZnIgKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FyLURaJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn2KzYp9mG2YHZiicsICfZgdmK2YHYsdmKJywgJ9mF2KfYsdizJywgJ9ij2YHYsdmK2YQnLCAn2YXYp9mKJywgJ9is2YjYp9mGJyxcclxuXHRcdCfYrNmI2YrZhNmK2KknLCAn2KPZiNiqJywgJ9iz2KjYqtmF2KjYsScsJ9ij2YPYqtmI2KjYsScsICfZhtmI2YHZhdio2LEnLCAn2K/Zitiz2YXYqNixJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnMTAnLCAnMTEnLCAnMTInXSxcclxuXHRcdGRheU5hbWVzOiBbJ9in2YTYo9it2K8nLCAn2KfZhNin2KvZhtmK2YYnLCAn2KfZhNir2YTYp9ir2KfYoScsICfYp9mE2KPYsdio2LnYp9ihJywgJ9in2YTYrtmF2YrYsycsICfYp9mE2KzZhdi52KknLCAn2KfZhNiz2KjYqiddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfYp9mE2KPYrdivJywgJ9in2YTYp9ir2YbZitmGJywgJ9in2YTYq9mE2KfYq9in2KEnLCAn2KfZhNij2LHYqNi52KfYoScsICfYp9mE2K7ZhdmK2LMnLCAn2KfZhNis2YXYudipJywgJ9in2YTYs9io2KonXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ9in2YTYo9it2K8nLCAn2KfZhNin2KvZhtmK2YYnLCAn2KfZhNir2YTYp9ir2KfYoScsICfYp9mE2KPYsdio2LnYp9ihJywgJ9in2YTYrtmF2YrYsycsICfYp9mE2KzZhdi52KknLCAn2KfZhNiz2KjYqiddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDYsXHJcblx0XHRpc1JUTDogdHJ1ZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXItRFonXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXItRFonXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgQXJhYmljIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgTWFobW91ZCBLaGFsZWQgLS0gbWFobW91ZC5raGFsZWRAYmFkcml0LmNvbVxyXG4gICBOT1RFOiBtb250aE5hbWVzIGFyZSB0aGUgbmV3IG1vbnRocyBuYW1lcyAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXItRUcnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWyfZitmG2KfZitixJywgJ9mB2KjYsdin2YrYsScsICfZhdin2LHYsycsICfYpdio2LHZitmEJywgJ9mF2KfZitmIJywgJ9mK2YjZhtmK2KknLFxyXG5cdFx0J9mK2YjZhNmK2YgnLCAn2KPYutiz2LfYsycsICfYs9io2KrZhdio2LEnLCAn2KPZg9iq2YjYqNixJywgJ9mG2YjZgdmF2KjYsScsICfYr9mK2LPZhdio2LEnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWycxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICcxMCcsICcxMScsICcxMiddLFxyXG5cdFx0ZGF5TmFtZXM6ICBbJ9in2YTYo9it2K8nLCAn2KfZhNin2KvZhtmK2YYnLCAn2KfZhNir2YTYp9ir2KfYoScsICfYp9mE2KPYsdio2LnYp9ihJywgJ9in2YTYrtmF2YrYsycsICfYp9mE2KzZhdi52KknLCAn2KfZhNiz2KjYqiddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfYo9it2K8nLCAn2KfYq9mG2YrZhicsICfYq9mE2KfYq9in2KEnLCAn2KPYsdio2LnYp9ihJywgJ9iu2YXZitizJywgJ9is2YXYudipJywgJ9iz2KjYqiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn2KPYrdivJywgJ9in2KvZhtmK2YYnLCAn2KvZhNin2KvYp9ihJywgJ9ij2LHYqNi52KfYoScsICfYrtmF2YrYsycsICfYrNmF2LnYqScsICfYs9io2KonXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiA2LFxyXG5cdFx0aXNSVEw6IHRydWVcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FyLUVHJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FyLUVHJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEFyYWJpYyBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIEtoYWxlZCBBbCBIb3JhbmkgLS0g2K7Yp9mE2K8g2KfZhNit2YjYsdin2YbZiiAtLSBrb2tvLmR3QGdtYWlsLmNvbS4gKi9cclxuLyogTk9URTogbW9udGhOYW1lcyBhcmUgdGhlIG9yaWdpbmFsIG1vbnRocyBuYW1lcyBhbmQgdGhleSBhcmUgdGhlIEFyYWJpYyBuYW1lcyxcclxuICAgbm90IHRoZSBuZXcgbW9udGhzIG5hbWUg2YHYqNix2KfZitixIC0g2YrZhtin2YrYsSBhbmQgdGhlcmUgaXNuJ3QgYW55IEFyYWJpYyByb290cyBmb3IgdGhlc2UgbW9udGhzICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydhciddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ9mD2KfZhtmI2YYg2KfZhNir2KfZhtmKJywgJ9i02KjYp9i3JywgJ9ii2LDYp9ixJywgJ9mG2YrYs9in2YYnLCAn2KLYsNin2LEnLCAn2K3YstmK2LHYp9mGJyxcclxuXHRcdCfYqtmF2YjYsicsICfYotioJywgJ9ij2YrZhNmI2YQnLCAn2KrYtNix2YrZhiDYp9mE2KPZiNmEJywgJ9iq2LTYsdmK2YYg2KfZhNir2KfZhtmKJywgJ9mD2KfZhtmI2YYg2KfZhNij2YjZhCddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJzEwJywgJzExJywgJzEyJ10sXHJcblx0XHRkYXlOYW1lczogWyfYp9mE2KPYrdivJywgJ9in2YTYp9ir2YbZitmGJywgJ9in2YTYq9mE2KfYq9in2KEnLCAn2KfZhNij2LHYqNi52KfYoScsICfYp9mE2K7ZhdmK2LMnLCAn2KfZhNis2YXYudipJywgJ9in2YTYs9io2KonXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn2KfZhNij2K3YrycsICfYp9mE2KfYq9mG2YrZhicsICfYp9mE2KvZhNin2KvYp9ihJywgJ9in2YTYo9ix2KjYudin2KEnLCAn2KfZhNiu2YXZitizJywgJ9in2YTYrNmF2LnYqScsICfYp9mE2LPYqNiqJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfYp9mE2KPYrdivJywgJ9in2YTYp9ir2YbZitmGJywgJ9in2YTYq9mE2KfYq9in2KEnLCAn2KfZhNij2LHYqNi52KfYoScsICfYp9mE2K7ZhdmK2LMnLCAn2KfZhNis2YXYudipJywgJ9in2YTYs9io2KonXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiA2LFxyXG5cdFx0aXNSVEw6IHRydWVcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FyJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2FyJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEF6ZXJiYWlqYW5pIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBKYW1pbCBOYWphZm92IChuZWNlZm92MzNAZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2F6J10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnWWFudmFyJywnRmV2cmFsJywnTWFydCcsJ0FwcmVsJywnTWF5JywnxLB5dW4nLFxyXG5cdFx0J8SweXVsJywnQXZxdXN0JywnU2VudHlhYnInLCdPa3R5YWJyJywnTm95YWJyJywnRGVrYWJyJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnWWFuJywnRmV2JywnTWFyJywnQXByJywnTWF5JywnxLB5dW4nLFxyXG5cdFx0J8SweXVsJywnQXZxJywnU2VuJywnT2t0JywnTm95JywnRGVrJ10sXHJcblx0XHRkYXlOYW1lczogWydCYXphcicsJ0JhemFyIGVydMmZc2knLCfDh8mZcsWfyZluYsmZIGF4xZ9hbcSxJywnw4fJmXLFn8mZbmLJmScsJ0PDvG3JmSBheMWfYW3EsScsJ0PDvG3JmScsJ8WeyZluYsmZJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0InLCdCZScsJ8OHYScsJ8OHJywnQ2EnLCdDJywnxZ4nXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ0InLCdCJywnw4cnLCfQoScsJ8OHJywnQycsJ8WeJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXonXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXonXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgQnVsZ2FyaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBTdG95YW4gS3lvc2V2IChodHRwOi8vc3Zlc3Qub3JnKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2JnJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuICAgICAgICBtb250aE5hbWVzOiBbJ9Cv0L3Rg9Cw0YDQuCcsJ9Ck0LXQstGA0YPQsNGA0LgnLCfQnNCw0YDRgicsJ9CQ0L/RgNC40LsnLCfQnNCw0LknLCfQrtC90LgnLFxyXG4gICAgICAgICfQrtC70LgnLCfQkNCy0LPRg9GB0YInLCfQodC10L/RgtC10LzQstGA0LgnLCfQntC60YLQvtC80LLRgNC4Jywn0J3QvtC10LzQstGA0LgnLCfQlNC10LrQtdC80LLRgNC4J10sXHJcbiAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ9Cv0L3RgycsJ9Ck0LXQsicsJ9Cc0LDRgCcsJ9CQ0L/RgCcsJ9Cc0LDQuScsJ9Cu0L3QuCcsXHJcbiAgICAgICAgJ9Cu0LvQuCcsJ9CQ0LLQsycsJ9Ch0LXQvycsJ9Ce0LrRgicsJ9Cd0L7QsicsJ9CU0LXQuiddLFxyXG4gICAgICAgIGRheU5hbWVzOiBbJ9Cd0LXQtNC10LvRjycsJ9Cf0L7QvdC10LTQtdC70L3QuNC6Jywn0JLRgtC+0YDQvdC40LonLCfQodGA0Y/QtNCwJywn0KfQtdGC0LLRitGA0YLRitC6Jywn0J/QtdGC0YrQuicsJ9Ch0YrQsdC+0YLQsCddLFxyXG4gICAgICAgIGRheU5hbWVzU2hvcnQ6IFsn0J3QtdC0Jywn0J/QvtC9Jywn0JLRgtC+Jywn0KHRgNGPJywn0KfQtdGCJywn0J/QtdGCJywn0KHRitCxJ10sXHJcbiAgICAgICAgZGF5TmFtZXNNaW46IFsn0J3QtScsJ9Cf0L4nLCfQktGCJywn0KHRgCcsJ9Cn0LUnLCfQn9C1Jywn0KHRiiddLFxyXG4gICAgICAgIGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG4gICAgICAgIGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYmcnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYmcnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgQm9zbmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIEtlbmFuIEtvbmpvLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYnMnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW51YXInLCdGZWJydWFyJywnTWFydCcsJ0FwcmlsJywnTWFqJywnSnVuaScsXHJcblx0XHQnSnVsaScsJ0F1Z3VzdCcsJ1NlcHRlbWJhcicsJ09rdG9iYXInLCdOb3ZlbWJhcicsJ0RlY2VtYmFyJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTWFyJywnQXByJywnTWFqJywnSnVuJyxcclxuXHRcdCdKdWwnLCdBdWcnLCdTZXAnLCdPa3QnLCdOb3YnLCdEZWMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ05lZGVsamEnLCdQb25lZGVsamFrJywnVXRvcmFrJywnU3JpamVkYScsJ8SMZXR2cnRhaycsJ1BldGFrJywnU3Vib3RhJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ05lZCcsJ1BvbicsJ1V0bycsJ1NyaScsJ8SMZXQnLCdQZXQnLCdTdWInXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ05lJywnUG8nLCdVdCcsJ1NyJywnxIxlJywnUGUnLCdTdSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydicyddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydicyddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBDYXRhbGFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdGVyczogKGpvYW4ubGVvbkBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snY2EnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydHZW5lcicsJ0ZlYnJlcicsJ01hciZjY2VkaWw7JywnQWJyaWwnLCdNYWlnJywnSnVueScsXHJcblx0XHQnSnVsaW9sJywnQWdvc3QnLCdTZXRlbWJyZScsJ09jdHVicmUnLCdOb3ZlbWJyZScsJ0Rlc2VtYnJlJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnR2VuJywnRmViJywnTWFyJywnQWJyJywnTWFpJywnSnVuJyxcclxuXHRcdCdKdWwnLCdBZ28nLCdTZXQnLCdPY3QnLCdOb3YnLCdEZXMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ0RpdW1lbmdlJywnRGlsbHVucycsJ0RpbWFydHMnLCdEaW1lY3JlcycsJ0Rpam91cycsJ0RpdmVuZHJlcycsJ0Rpc3NhYnRlJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0R1ZycsJ0RsbicsJ0RtdCcsJ0RtYycsJ0RqcycsJ0R2bicsJ0RzYiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnRGcnLCdEbCcsJ0R0JywnRGMnLCdEaicsJ0R2JywnRHMnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydjYSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydjYSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBDemVjaCBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgVG9tYXMgTXVsbGVyICh0b21hc0B0b21hcy1tdWxsZXIubmV0KS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2NzJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnbGVkZW4nLCfDum5vcicsJ2LFmWV6ZW4nLCdkdWJlbicsJ2t2xJt0ZW4nLCfEjWVydmVuJyxcclxuICAgICAgICAnxI1lcnZlbmVjJywnc3JwZW4nLCd6w6HFmcOtJywnxZnDrWplbicsJ2xpc3RvcGFkJywncHJvc2luZWMnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydsZWQnLCfDum5vJywnYsWZZScsJ2R1YicsJ2t2xJsnLCfEjWVyJyxcclxuXHRcdCfEjXZjJywnc3JwJywnesOhxZknLCfFmcOtaicsJ2xpcycsJ3BybyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnbmVkxJtsZScsICdwb25kxJtsw60nLCAnw7p0ZXLDvScsICdzdMWZZWRhJywgJ8SNdHZydGVrJywgJ3DDoXRlaycsICdzb2JvdGEnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnbmUnLCAncG8nLCAnw7p0JywgJ3N0JywgJ8SNdCcsICdww6EnLCAnc28nXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ25lJywncG8nLCfDunQnLCdzdCcsJ8SNdCcsJ3DDoScsJ3NvJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snY3MnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snY3MnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgRGFuaXNoIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBKYW4gQ2hyaXN0ZW5zZW4gKCBkZWxldGVzdHVmZkBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZGEnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG4gICAgICAgIG1vbnRoTmFtZXM6IFsnSmFudWFyJywnRmVicnVhcicsJ01hcnRzJywnQXByaWwnLCdNYWonLCdKdW5pJyxcclxuICAgICAgICAnSnVsaScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09rdG9iZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sXHJcbiAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01haicsJ0p1bicsXHJcbiAgICAgICAgJ0p1bCcsJ0F1ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RlYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnU8O4bmRhZycsJ01hbmRhZycsJ1RpcnNkYWcnLCdPbnNkYWcnLCdUb3JzZGFnJywnRnJlZGFnJywnTMO4cmRhZyddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydTw7huJywnTWFuJywnVGlyJywnT25zJywnVG9yJywnRnJlJywnTMO4ciddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnU8O4JywnTWEnLCdUaScsJ09uJywnVG8nLCdGcicsJ0zDuCddLFxyXG4gICAgICAgIGRhdGVGb3JtYXQ6ICdkZC1tbS15eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydkYSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydkYSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTd2lzcy1HZXJtYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IERvdWdsYXMgSm9zZSAmIEp1ZXJnIE1laWVyLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZGUtQ0gnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW51YXInLCdGZWJydWFyJywnTcOkcnonLCdBcHJpbCcsJ01haScsJ0p1bmknLFxyXG5cdFx0J0p1bGknLCdBdWd1c3QnLCdTZXB0ZW1iZXInLCdPa3RvYmVyJywnTm92ZW1iZXInLCdEZXplbWJlciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ03DpHInLCdBcHInLCdNYWknLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ0F1ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RleiddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnU29ubnRhZycsJ01vbnRhZycsJ0RpZW5zdGFnJywnTWl0dHdvY2gnLCdEb25uZXJzdGFnJywnRnJlaXRhZycsJ1NhbXN0YWcnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU28nLCdNbycsJ0RpJywnTWknLCdEbycsJ0ZyJywnU2EnXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ1NvJywnTW8nLCdEaScsJ01pJywnRG8nLCdGcicsJ1NhJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZGUtQ0gnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZGUtQ0gnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgR2VybWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBNaWxpYW4gV29sZmYgKG1haWxAbWlsaWFudy5kZSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydkZSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcicsJ0ZlYnJ1YXInLCdNw6RyeicsJ0FwcmlsJywnTWFpJywnSnVuaScsXHJcblx0XHQnSnVsaScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09rdG9iZXInLCdOb3ZlbWJlcicsJ0RlemVtYmVyJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTcOkcicsJ0FwcicsJ01haScsJ0p1bicsXHJcblx0XHQnSnVsJywnQXVnJywnU2VwJywnT2t0JywnTm92JywnRGV6J10sXHJcblx0XHRkYXlOYW1lczogWydTb25udGFnJywnTW9udGFnJywnRGllbnN0YWcnLCdNaXR0d29jaCcsJ0Rvbm5lcnN0YWcnLCdGcmVpdGFnJywnU2Ftc3RhZyddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydTbycsJ01vJywnRGknLCdNaScsJ0RvJywnRnInLCdTYSddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnU28nLCdNbycsJ0RpJywnTWknLCdEbycsJ0ZyJywnU2EnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydkZSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydkZSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBHcmVlayBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgQWxleCBDaWNvdmljIChodHRwOi8vd3d3LmFsZXhjaWNvdmljLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbCddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ86ZzrHOvc6/z4XOrM+BzrnOv8+CJywnzqbOtc6yz4HOv8+FzqzPgc65zr/PgicsJ86czqzPgc+EzrnOv8+CJywnzpHPgM+Bzq/Ou865zr/PgicsJ86czqzOuc6/z4InLCfOmc6/z43Ovc65zr/PgicsXHJcblx0XHQnzpnOv8+NzrvOuc6/z4InLCfOkc+NzrPOv8+Fz4PPhM6/z4InLCfOo861z4DPhM6tzrzOss+BzrnOv8+CJywnzp/Ous+Ez47Oss+BzrnOv8+CJywnzp3Ov86tzrzOss+BzrnOv8+CJywnzpTOtc66zq3OvM6yz4HOuc6/z4InXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfOmc6xzr0nLCfOps61zrInLCfOnM6xz4EnLCfOkc+Az4EnLCfOnM6xzrknLCfOmc6/z4XOvScsXHJcblx0XHQnzpnOv8+FzrsnLCfOkc+FzrMnLCfOo861z4AnLCfOn866z4QnLCfOnc6/zrUnLCfOlM61zronXSxcclxuXHRcdGRheU5hbWVzOiBbJ86az4XPgc65zrHOus6uJywnzpTOtc+Fz4TOrc+BzrEnLCfOpM+Bzq/PhM63JywnzqTOtc+EzqzPgc+EzrcnLCfOoM6tzrzPgM+EzrcnLCfOoM6xz4HOsc+DzrrOtc+Fzq4nLCfOo86szrLOss6xz4TOvyddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfOms+Fz4EnLCfOlM61z4UnLCfOpM+BzrknLCfOpM61z4QnLCfOoM61zrwnLCfOoM6xz4EnLCfOo86xzrInXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ86az4UnLCfOlM61JywnzqTPgScsJ86kzrUnLCfOoM61JywnzqDOsScsJ86jzrEnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbCddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbCddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBFbmdsaXNoL0F1c3RyYWxpYSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIEJhc2VkIG9uIGVuLUdCLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZW4tQVUnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW51YXJ5JywnRmVicnVhcnknLCdNYXJjaCcsJ0FwcmlsJywnTWF5JywnSnVuZScsXHJcblx0XHQnSnVseScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09jdG9iZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLFxyXG5cdFx0J0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXHJcblx0XHRkYXlOYW1lczogWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ1N1JywnTW8nLCdUdScsJ1dlJywnVGgnLCdGcicsJ1NhJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZW4tQVUnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZW4tQVUnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgRW5nbGlzaC9VSyBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFN0dWFydC4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VuLUdCJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyeScsJ0ZlYnJ1YXJ5JywnTWFyY2gnLCdBcHJpbCcsJ01heScsJ0p1bmUnLFxyXG5cdFx0J0p1bHknLCdBdWd1c3QnLCdTZXB0ZW1iZXInLCdPY3RvYmVyJywnTm92ZW1iZXInLCdEZWNlbWJlciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcclxuXHRcdCdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXHJcblx0XHRkYXlOYW1lc01pbjogWydTdScsJ01vJywnVHUnLCdXZScsJ1RoJywnRnInLCdTYSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VuLUdCJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VuLUdCJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEVuZ2xpc2gvTmV3IFplYWxhbmQgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBCYXNlZCBvbiBlbi1HQi4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VuLU5aJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyeScsJ0ZlYnJ1YXJ5JywnTWFyY2gnLCdBcHJpbCcsJ01heScsJ0p1bmUnLFxyXG5cdFx0J0p1bHknLCdBdWd1c3QnLCdTZXB0ZW1iZXInLCdPY3RvYmVyJywnTm92ZW1iZXInLCdEZWNlbWJlciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcclxuXHRcdCdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXHJcblx0XHRkYXlOYW1lc01pbjogWydTdScsJ01vJywnVHUnLCdXZScsJ1RoJywnRnInLCdTYSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VuLU5aJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2VuLU5aJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEVzcGVyYW50byBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgT2xpdmllciBNLiAob2xpdmllcndlYkBpZnJhbmNlLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbyddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcm8nLCdGZWJydWFybycsJ01hcnRvJywnQXByaWxvJywnTWFqbycsJ0p1bmlvJyxcclxuXHRcdCdKdWxpbycsJ0HFrWd1c3RvJywnU2VwdGVtYnJvJywnT2t0b2JybycsJ05vdmVtYnJvJywnRGVjZW1icm8nXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWonLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ0HFrWcnLCdTZXAnLCdPa3QnLCdOb3YnLCdEZWMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ0RpbWFuxIlvJywnTHVuZG8nLCdNYXJkbycsJ01lcmtyZWRvJywnxLRhxa1kbycsJ1ZlbmRyZWRvJywnU2FiYXRvJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0RpbScsJ0x1bicsJ01hcicsJ01lcicsJ8S0YcWtJywnVmVuJywnU2FiJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydEaScsJ0x1JywnTWEnLCdNZScsJ8S0YScsJ1ZlJywnU2EnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbyddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlbyddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTcGFuaXNoL0FyZ2VudGluYSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgRXN0ZWJhbiBBY29zdGEgVmlsbGFmYW5lIChlc3RlYmFuLmFjb3N0YUBnbG9iYW50LmNvbSkgb2YgR2xvYmFudCAoaHR0cDovL3d3dy5nbG9iYW50LmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlcy1BUiddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0VuZXJvJywnRmVicmVybycsJ01hcnpvJywnQWJyaWwnLCdNYXlvJywnSnVuaW8nLFxyXG5cdFx0J0p1bGlvJywnQWdvc3RvJywnU2VwdGllbWJyZScsJ09jdHVicmUnLCdOb3ZpZW1icmUnLCdEaWNpZW1icmUnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydFbmUnLCdGZWInLCdNYXInLCdBYnInLCdNYXknLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ0FnbycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RpYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnRG9taW5nbycsJ0x1bmVzJywnTWFydGVzJywnTWnDqXJjb2xlcycsJ0p1ZXZlcycsJ1ZpZXJuZXMnLCdTw6FiYWRvJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0RvbScsJ0x1bicsJ01hcicsJ01pw6knLCdKdXYnLCdWaWUnLCdTw6FiJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydEbycsJ0x1JywnTWEnLCdNaScsJ0p1JywnVmknLCdTw6EnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlcy1BUiddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlcy1BUiddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTcGFuaXNoL1BlcsO6IGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBGaXNjaGVyIFRpcmFkbyAoZmlzaGRldkBnbG9iYW50LmNvbSkgb2YgQVNJWCAoaHR0cDovL3d3dy5hc2l4b25saW5lLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlcy1QRSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0VuZXJvJywnRmVicmVybycsJ01hcnpvJywnQWJyaWwnLCdNYXlvJywnSnVuaW8nLFxyXG5cdFx0J0p1bGlvJywnQWdvc3RvJywnU2VwdGllbWJyZScsJ09jdHVicmUnLCdOb3ZpZW1icmUnLCdEaWNpZW1icmUnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydFbmUnLCdGZWInLCdNYXInLCdBYnInLCdNYXknLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ0FnbycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RpYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnRG9taW5nbycsJ0x1bmVzJywnTWFydGVzJywnTWnDqXJjb2xlcycsJ0p1ZXZlcycsJ1ZpZXJuZXMnLCdTw6FiYWRvJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0RvbScsJ0x1bicsJ01hcicsJ01pw6knLCdKdWUnLCdWaWUnLCdTYWInXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ0RvJywnTHUnLCdNYScsJ01pJywnSnUnLCdWaScsJ1NhJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMCxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXMtUEUnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXMtUEUnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgU3BhbmlzaCBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFRyYWR1Y2lkbyBwb3IgVmVzdGVyICh4dmVzdGVyQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlcyddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0VuZXJvJywnRmVicmVybycsJ01hcnpvJywnQWJyaWwnLCdNYXlvJywnSnVuaW8nLFxyXG5cdFx0J0p1bGlvJywnQWdvc3RvJywnU2VwdGllbWJyZScsJ09jdHVicmUnLCdOb3ZpZW1icmUnLCdEaWNpZW1icmUnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydFbmUnLCdGZWInLCdNYXInLCdBYnInLCdNYXknLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ0FnbycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RpYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnRG9taW5nbycsJ0x1bmVzJywnTWFydGVzJywnTWnDqXJjb2xlcycsJ0p1ZXZlcycsJ1ZpZXJuZXMnLCdTw6FiYWRvJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0RvbScsJ0x1bicsJ01hcicsJ01pw6knLCdKdXYnLCdWaWUnLCdTw6FiJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydEbycsJ0x1JywnTWEnLCdNaScsJ0p1JywnVmknLCdTw6EnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlcyddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydlcyddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBFc3RvbmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTWFydCBTw7VtZXJtYWEgKG1ydHMucHlkZXYgYXQgZ21haWwgY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2V0J10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnSmFhbnVhcicsJ1ZlZWJydWFyJywnTcOkcnRzJywnQXByaWxsJywnTWFpJywnSnV1bmknLCBcclxuXHRcdFx0J0p1dWxpJywnQXVndXN0JywnU2VwdGVtYmVyJywnT2t0b29iZXInLCdOb3ZlbWJlcicsJ0RldHNlbWJlciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phYW4nLCAnVmVlYnInLCAnTcOkcnRzJywgJ0FwcicsICdNYWknLCAnSnV1bmknLFxyXG5cdFx0XHQnSnV1bGknLCAnQXVnJywgJ1NlcHQnLCAnT2t0JywgJ05vdicsICdEZXRzJ10sXHJcblx0XHRkYXlOYW1lczogWydQw7xoYXDDpGV2JywgJ0VzbWFzcMOkZXYnLCAnVGVpc2lww6RldicsICdLb2xtYXDDpGV2JywgJ05lbGphcMOkZXYnLCAnUmVlZGUnLCAnTGF1cMOkZXYnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnUMO8aGFwJywgJ0VzbWFzcCcsICdUZWlzaXAnLCAnS29sbWFwJywgJ05lbGphcCcsICdSZWVkZScsICdMYXVwJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydQJywnRScsJ1QnLCdLJywnTicsJ1InLCdMJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXQnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXQnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgQmFzcXVlIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgS2FycmlrYXMtZWsgaXR6dWxpYSAoa2FycmlrYXNAa2FycmlrYXMuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2V1J10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnVXJ0YXJyaWxhJywnT3RzYWlsYScsJ01hcnR4b2EnLCdBcGlyaWxhJywnTWFpYXR6YScsJ0VrYWluYScsXHJcblx0XHQnVXp0YWlsYScsJ0FidXp0dWEnLCdJcmFpbGEnLCdVcnJpYScsJ0F6YXJvYScsJ0FiZW5kdWEnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydVcnQnLCdPdHMnLCdNYXInLCdBcGknLCdNYWknLCdFa2EnLFxyXG5cdFx0J1V6dCcsJ0FidScsJ0lyYScsJ1VycicsJ0F6YScsJ0FiZSddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnSWdhbmRlYScsJ0FzdGVsZWhlbmEnLCdBc3RlYXJ0ZWEnLCdBc3RlYXprZW5hJywnT3N0ZWd1bmEnLCdPc3RpcmFsYScsJ0xhcnVuYmF0YSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydJZ2EnLCdBc3QnLCdBc3QnLCdBc3QnLCdPc3QnLCdPc3QnLCdMYXInXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ0lnJywnQXMnLCdBcycsJ0FzJywnT3MnLCdPcycsJ0xhJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAneXl5eS9tbS9kZCcsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXUnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZXUnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgRmFyc2kvUGVyc2lhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIEphdmFkIE1vd2xhbmV6aGFkIC0tIGptb3dsYUBnbWFpbC5jb20gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZhJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn2YHYsdmI2LHYr9mK2YYnLCfYp9ix2K/Zitio2YfYtNiqJywn2K7Ysdiv2KfYrycsJ9iq2YrYsScsJ9mF2LHYr9in2K8nLCfYtNmH2LHZitmI2LEnLFxyXG5cdFx0J9mF2YfYsScsJ9ii2KjYp9mGJywn2KLYsNixJywn2K/ZiicsJ9io2YfZhdmGJywn2KfYs9mB2YbYryddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJzEnLCcyJywnMycsJzQnLCc1JywnNicsJzcnLCc4JywnOScsJzEwJywnMTEnLCcxMiddLFxyXG5cdFx0ZGF5TmFtZXM6IFsn2Yraqdi02YbYqNmHJywn2K/ZiNi02YbYqNmHJywn2LPZh+KAjNi02YbYqNmHJywn2obZh9in2LHYtNmG2KjZhycsJ9m+2YbYrNi02YbYqNmHJywn2KzZhdi52YcnLCfYtNmG2KjZhyddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfZiicsJ9ivJywn2LMnLCfahicsJ9m+Jywn2KwnLCAn2LQnXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ9mKJywn2K8nLCfYsycsJ9qGJywn2b4nLCfYrCcsICfYtCddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXkvbW0vZGQnLFxyXG5cdFx0Zmlyc3REYXk6IDYsXHJcblx0XHRpc1JUTDogdHJ1ZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZmEnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZmEnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgRmlubmlzaCBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgSGFycmkgS2lscGnDtiAoaGFycmlraWxwaW9AZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZpJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuICAgICAgICBtb250aE5hbWVzOiBbJ1RhbW1pa3V1JywnSGVsbWlrdXUnLCdNYWFsaXNrdXUnLCdIdWh0aWt1dScsJ1RvdWtva3V1JywnS2VzJmF1bWw7a3V1JyxcclxuICAgICAgICAnSGVpbiZhdW1sO2t1dScsJ0Vsb2t1dScsJ1N5eXNrdXUnLCdMb2tha3V1JywnTWFycmFza3V1JywnSm91bHVrdXUnXSxcclxuICAgICAgICBtb250aE5hbWVzU2hvcnQ6IFsnVGFtbWknLCdIZWxtaScsJ01hYWxpcycsJ0h1aHRpJywnVG91a28nLCdLZXMmYXVtbDsnLFxyXG4gICAgICAgICdIZWluJmF1bWw7JywnRWxvJywnU3l5cycsJ0xva2EnLCdNYXJyYXMnLCdKb3VsdSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydTdScsJ01hJywnVGknLCdLZScsJ1RvJywnUGUnLCdTdSddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnU3VubnVudGFpJywnTWFhbmFudGFpJywnVGlpc3RhaScsJ0tlc2tpdmlpa2tvJywnVG9yc3RhaScsJ1BlcmphbnRhaScsJ0xhdWFudGFpJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydTdScsJ01hJywnVGknLCdLZScsJ1RvJywnUGUnLCdMYSddLFxyXG4gICAgICAgIGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmaSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmaSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBGYXJvZXNlIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBTdmVycmkgTW9ociBPbHNlbiwgc3ZlcnJpbW9AZ21haWwuY29tICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmbyddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbnNrdXInLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW51YXInLCdGZWJydWFyJywnTWFycycsJ0FwcsOtbCcsJ01laScsJ0p1bmknLFxyXG5cdFx0J0p1bGknLCdBdWd1c3QnLCdTZXB0ZW1iZXInLCdPa3RvYmVyJywnTm92ZW1iZXInLCdEZXNlbWJlciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01laScsJ0p1bicsXHJcblx0XHQnSnVsJywnQXVnJywnU2VwJywnT2t0JywnTm92JywnRGVzJ10sXHJcblx0XHRkYXlOYW1lczogWydTdW5udWRhZ3VyJywnTcOhbmFkYWd1cicsJ1TDvXNkYWd1cicsJ01pa3VkYWd1cicsJ0jDs3NkYWd1cicsJ0Zyw61nZ2phZGFndXInLCdMZXlhcmRhZ3VyJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ1N1bicsJ03DoW4nLCdUw71zJywnTWlrJywnSMOzcycsJ0Zyw60nLCdMZXknXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ1N1JywnTcOhJywnVMO9JywnTWknLCdIw7MnLCdGcicsJ0xlJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQtbW0teXl5eScsXHJcblx0XHRmaXJzdERheTogMCxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZm8nXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snZm8nXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgU3dpc3MgRnJlbmNoIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBNYXJ0aW4gVm9lbGtsZSAobWFydGluLnZvZWxrbGVAZS10Yy5jaCkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmci1DSCddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnZpZXInLCdGw6l2cmllcicsJ01hcnMnLCdBdnJpbCcsJ01haScsJ0p1aW4nLFxyXG5cdFx0J0p1aWxsZXQnLCdBb8O7dCcsJ1NlcHRlbWJyZScsJ09jdG9icmUnLCdOb3ZlbWJyZScsJ0TDqWNlbWJyZSddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0bDqXYnLCdNYXInLCdBdnInLCdNYWknLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ0Fvw7snLCdTZXAnLCdPY3QnLCdOb3YnLCdEw6ljJ10sXHJcblx0XHRkYXlOYW1lczogWydEaW1hbmNoZScsJ0x1bmRpJywnTWFyZGknLCdNZXJjcmVkaScsJ0pldWRpJywnVmVuZHJlZGknLCdTYW1lZGknXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRGltJywnTHVuJywnTWFyJywnTWVyJywnSmV1JywnVmVuJywnU2FtJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydEaScsJ0x1JywnTWEnLCdNZScsJ0plJywnVmUnLCdTYSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZyLUNIJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZyLUNIJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEZyZW5jaCBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFN0w6lwaGFuZSBOYWhtYW5pIChzaG9sYnlAc2hvbGJ5Lm5ldCkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmciddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnZpZXInLCdGw6l2cmllcicsJ01hcnMnLCdBdnJpbCcsJ01haScsJ0p1aW4nLFxyXG5cdFx0J0p1aWxsZXQnLCdBb8O7dCcsJ1NlcHRlbWJyZScsJ09jdG9icmUnLCdOb3ZlbWJyZScsJ0TDqWNlbWJyZSddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0bDqXYnLCdNYXInLCdBdnInLCdNYWknLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ0Fvw7snLCdTZXAnLCdPY3QnLCdOb3YnLCdEw6ljJ10sXHJcblx0XHRkYXlOYW1lczogWydEaW1hbmNoZScsJ0x1bmRpJywnTWFyZGknLCdNZXJjcmVkaScsJ0pldWRpJywnVmVuZHJlZGknLCdTYW1lZGknXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRGltJywnTHVuJywnTWFyJywnTWVyJywnSmV1JywnVmVuJywnU2FtJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydEaScsJ0x1JywnTWEnLCdNZScsJ0plJywnVmUnLCdTYSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZyJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZyJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEluaWNpYWNpb24gZW4gZ2FsZWdvIHBhcmEgYSBleHRlbnNpw7NuICdVSSBkYXRlIHBpY2tlcicgcGFyYSBqUXVlcnkuXHJcbiAgIFRyYWR1Y2lkbyBwb3IgTWFudWVsIChNY051ZWxAZ214Lm5ldCkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydnbCddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ1hhbmVpcm8nLCdGZWJyZWlybycsJ01hcnpvJywnQWJyaWwnLCdNYWlvJywnWHXDsW8nLFxyXG5cdFx0J1h1bGxvJywnQWdvc3RvJywnU2V0ZW1icm8nLCdPdXR1YnJvJywnTm92ZW1icm8nLCdEZWNlbWJybyddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ1hhbicsJ0ZlYicsJ01hcicsJ0FicicsJ01haScsJ1h1w7EnLFxyXG5cdFx0J1h1bCcsJ0FnbycsJ1NldCcsJ091dCcsJ05vdicsJ0RlYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnRG9taW5nbycsJ0x1bnMnLCdNYXJ0ZXMnLCdNw6lyY29yZXMnLCdYb3ZlcycsJ1ZlbnJlcycsJ1PDoWJhZG8nXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRG9tJywnTHVuJywnTWFyJywnTcOpcicsJ1hvdicsJ1ZlbicsJ1PDoWInXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ0RvJywnTHUnLCdNYScsJ01lJywnWG8nLCdWZScsJ1PDoSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2dsJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2dsJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEd1amFyYXRpICjgqpfgq4HgqpzgqrDgqr7gqqTgq4ApIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgTmF5bWVzaCBNaXN0cnkgKG5heW1lc2hAeWFob28uY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2d1J10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn4Kqc4Kq+4Kqo4KuN4Kqv4KuB4KqG4Kqw4KuAJywn4Kqr4KuH4Kqs4KuN4Kqw4KuB4KqG4Kqw4KuAJywn4Kqu4Kq+4Kqw4KuN4KqaJywn4KqP4Kqq4KuN4Kqw4Kq/4KqyJywn4Kqu4KuHJywn4Kqc4KuC4KqoJyxcclxuXHRcdCfgqpzgq4HgqrLgqr7gqognLCfgqpHgqpfgqrjgq43gqp8nLCfgqrjgqqrgq43gqp/gq4fgqq7gq43gqqzgqrAnLCfgqpHgqpXgq43gqp/gq4vgqqzgqrAnLCfgqqjgqrXgq4fgqq7gq43gqqzgqrAnLCfgqqHgqr/gqrjgq4fgqq7gq43gqqzgqrAnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfgqpzgqr7gqqjgq43gqq/gq4EnLCfgqqvgq4fgqqzgq43gqrDgq4EnLCfgqq7gqr7gqrDgq43gqponLCfgqo/gqqrgq43gqrDgqr/gqrInLCfgqq7gq4cnLCfgqpzgq4LgqqgnLFxyXG5cdFx0J+CqnOCrgeCqsuCqvuCqiCcsJ+CqkeCql+CquOCrjeCqnycsJ+CquOCqquCrjeCqn+CrhycsJ+CqkeCqleCrjeCqn+CriycsJ+CqqOCqteCrhycsJ+CqoeCqv+CquOCrhyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsn4Kqw4Kq14Kq/4Kq14Kq+4KqwJywn4Kq44KuL4Kqu4Kq14Kq+4KqwJywn4Kqu4KqC4KqX4Kqz4Kq14Kq+4KqwJywn4Kqs4KuB4Kqn4Kq14Kq+4KqwJywn4KqX4KuB4Kqw4KuB4Kq14Kq+4KqwJywn4Kq24KuB4KqV4KuN4Kqw4Kq14Kq+4KqwJywn4Kq24Kqo4Kq/4Kq14Kq+4KqwJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+CqsOCqteCqvycsJ+CquOCri+CqricsJ+CqruCqguCql+CqsycsJ+CqrOCrgeCqpycsJ+Cql+CrgeCqsOCrgScsJ+CqtuCrgeCqleCrjeCqsCcsJ+CqtuCqqOCqvyddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn4KqwJywn4Kq44KuLJywn4Kqu4KqCJywn4Kqs4KuBJywn4KqX4KuBJywn4Kq24KuBJywn4Kq2J10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQtTS15eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydndSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydndSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBIZWJyZXcgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEFtaXIgSGFyZG9uIChhaGFyZG9uIGF0IGdtYWlsIGRvdCBjb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaGUnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWyfXmdeg15XXkNeoJywn16TXkdeo15XXkNeoJywn157XqNelJywn15DXpNeo15nXnCcsJ9ee15DXmScsJ9eZ15XXoNeZJyxcclxuXHRcdCfXmdeV15zXmScsJ9eQ15XXkteV16HXmCcsJ9eh16TXmNee15HXqCcsJ9eQ15XXp9eY15XXkdeoJywn16DXldeR157XkdeoJywn15PXptee15HXqCddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJzEnLCcyJywnMycsJzQnLCc1JywnNicsXHJcblx0XHQnNycsJzgnLCc5JywnMTAnLCcxMScsJzEyJ10sXHJcblx0XHRkYXlOYW1lczogWyfXqNeQ16nXldefJywn16nXoNeZJywn16nXnNeZ16nXmScsJ9eo15HXmdei15knLCfXl9ee15nXqdeZJywn16nXmdep15knLCfXqdeR16onXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn15BcXCcnLCfXkVxcJycsJ9eSXFwnJywn15NcXCcnLCfXlFxcJycsJ9eVXFwnJywn16nXkdeqJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfXkFxcJycsJ9eRXFwnJywn15JcXCcnLCfXk1xcJycsJ9eUXFwnJywn15VcXCcnLCfXqdeR16onXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IHRydWVcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2hlJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2hlJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEhpbmRpIElORElBIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBQYXdhbiBLdW1hciBTaW5naC4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2hpLUlOJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn4KSc4KSo4KS14KSw4KWAJywnIOCkq+CksOCkteCksOClgCcsICfgpK7gpL7gpLDgpY3gpJonLCAn4KSF4KSq4KWN4KSw4KWI4KSyJywgJ+CkruCkiCcsICfgpJzgpYLgpKgnLCfgpJzgpYHgpLLgpL7gpIgnLCAn4KSF4KSX4KS44KWN4KSkJywgJ+CkuOCkv+CkpOCkruCljeCkrOCksCcsICfgpIXgpJXgpY3gpJ/gpYLgpKzgpLAnLCAn4KSo4KS14KSu4KWN4KSs4KSwJywgJ+CkpuCkv+CkuOCkruCljeCkrOCksCddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ+CknOCkqCcsICfgpKvgpLAnLCAn4KSu4KS+4KSw4KWN4KSaJywn4KSF4KSq4KWN4KSw4KWIJywgJ+CkruCkiCcsICfgpJzgpYLgpKgnLCfgpJzgpYHgpLLgpL7gpIgnLCAn4KSF4KSXJywgJ+CkuOCkv+CkpCcsICfgpIXgpJXgpY3gpJ/gpYInLCAn4KSo4KS1JywgJ+CkpuCkv+CkuCddLFxyXG5cdFx0ZGF5TmFtZXM6IFsn4KSw4KS14KS/4KS14KS+4KSwJywgJ+CkuOCli+CkruCkteCkvuCksCcsICfgpK7gpILgpJfgpLLgpLXgpL7gpLAnLCAn4KSs4KWB4KSn4KS14KS+4KSwJywgJ+Ckl+ClgeCksOClgeCkteCkvuCksCcsICfgpLbgpYHgpJXgpY3gpLDgpLXgpL7gpLAnLCAn4KS24KSo4KS/4KS14KS+4KSwJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+CksOCkteCkvycsICfgpLjgpYvgpK4nLCAn4KSu4KSC4KSX4KSyJywgJ+CkrOClgeCkpycsICfgpJfgpYHgpLDgpYEnLCAn4KS24KWB4KSV4KWN4KSwJywgJ+CktuCkqOCkvyddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn4KSwJywn4KS44KWLJywn4KSu4KSCJywn4KSs4KWBJywn4KSX4KWBJywn4KS24KWBJywn4KS2J10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaGktSU4nXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaGktSU4nXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgQ3JvYXRpYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IFZqZWtvc2xhdiBOZXNlay4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2hyJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnU2lqZcSNYW5qJywnVmVsamHEjWEnLCdPxb51amFrJywnVHJhdmFuaicsJ1N2aWJhbmonLCdMaXBhbmonLFxyXG5cdFx0J1NycGFuaicsJ0tvbG92b3onLCdSdWphbicsJ0xpc3RvcGFkJywnU3R1ZGVuaScsJ1Byb3NpbmFjJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnU2lqJywnVmVsaicsJ0/FvnUnLCdUcmEnLCdTdmknLCdMaXAnLFxyXG5cdFx0J1NycCcsJ0tvbCcsJ1J1aicsJ0xpcycsJ1N0dScsJ1BybyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnTmVkamVsamEnLCdQb25lZGplbGphaycsJ1V0b3JhaycsJ1NyaWplZGEnLCfEjGV0dnJ0YWsnLCdQZXRhaycsJ1N1Ym90YSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydOZWQnLCdQb24nLCdVdG8nLCdTcmknLCfEjGV0JywnUGV0JywnU3ViJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydOZScsJ1BvJywnVXQnLCdTcicsJ8SMZScsJ1BlJywnU3UnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5LicsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaHInXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaHInXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgSHVuZ2FyaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBJc3R2YW4gS2FyYXN6aSAoanF1ZXJ5Y2FsZW5kYXJAc3BhbS5yYXN6aS5odSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydodSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnXDoXInLCAnRmVicnXDoXInLCAnTcOhcmNpdXMnLCAnw4FwcmlsaXMnLCAnTcOhanVzJywgJ0rDum5pdXMnLFxyXG5cdFx0J0rDumxpdXMnLCAnQXVndXN6dHVzJywgJ1N6ZXB0ZW1iZXInLCAnT2t0w7NiZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCAnRmViJywgJ03DoXInLCAnw4FwcicsICdNw6FqJywgJ0rDum4nLFxyXG5cdFx0J0rDumwnLCAnQXVnJywgJ1N6ZXAnLCAnT2t0JywgJ05vdicsICdEZWMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ1Zhc8Ohcm5hcCcsICdIw6l0ZsO2JywgJ0tlZGQnLCAnU3plcmRhJywgJ0Nzw7x0w7ZydMO2aycsICdQw6ludGVrJywgJ1N6b21iYXQnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnVmFzJywgJ0jDqXQnLCAnS2VkJywgJ1N6ZScsICdDc8O8JywgJ1DDqW4nLCAnU3pvJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydWJywgJ0gnLCAnSycsICdTemUnLCAnQ3MnLCAnUCcsICdTem8nXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICd5eXl5LW1tLWRkJyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydodSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydodSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBBcm1lbmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTGV2b24gWmFrYXJ5YW4gKGxldm9uLnpha2FyeWFuQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydoeSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ9WA1bjWgtW21b7VodaAJywn1ZPVpdW/1oDVvtWh1oAnLCfVhNWh1oDVvycsJ9Sx1brWgNWr1awnLCfVhNWh1bXVq9W9Jywn1YDVuNaC1bbVq9W9JyxcclxuXHRcdCfVgNW41oLVrNWr1b0nLCfVldWj1bjVvdW/1bjVvScsJ9WN1aXVutW/1aXVtNWi1aXWgCcsJ9WA1bjVr9W/1aXVtNWi1aXWgCcsJ9WG1bjVtdWl1bTVotWl1oAnLCfUtNWl1a/Vv9Wl1bTVotWl1oAnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfVgNW41oLVttW+Jywn1ZPVpdW/1oAnLCfVhNWh1oDVvycsJ9Sx1brWgCcsJ9WE1aHVtdWr1b0nLCfVgNW41oLVttWr1b0nLFxyXG5cdFx0J9WA1bjWgtWsJywn1ZXVo9W9Jywn1Y3VpdW6Jywn1YDVuNWvJywn1YbVuNW1Jywn1LTVpdWvJ10sXHJcblx0XHRkYXlOYW1lczogWyfVr9Wr1oDVodWv1asnLCfVpdWv1bjWgtW31aHVotWp1asnLCfVpdaA1aXWhNW31aHVotWp1asnLCfVudW41oDVpdaE1bfVodWi1anVqycsJ9Ww1avVttWj1bfVodWi1anVqycsJ9W41oLWgNWi1aHVqScsJ9W31aHVotWh1aknXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn1a/Vq9aAJywn1aXWgNWvJywn1aXWgNaEJywn1bnWgNaEJywn1bDVttWjJywn1bjWgtaA1aInLCfVt9Wi1aknXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ9Wv1avWgCcsJ9Wl1oDVrycsJ9Wl1oDWhCcsJ9W51oDWhCcsJ9Ww1bbVoycsJ9W41oLWgNWiJywn1bfVotWpJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaHknXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaHknXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgSW5kb25lc2lhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgRGVkZW4gRmF0aHVyYWhtYW4gKGRlZGVuZkBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaWQnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW51YXJpJywnRmVicnVhcmknLCdNYXJldCcsJ0FwcmlsJywnTWVpJywnSnVuaScsXHJcblx0XHQnSnVsaScsJ0FndXN0dXMnLCdTZXB0ZW1iZXInLCdPa3RvYmVyJywnTm9wZW1iZXInLCdEZXNlbWJlciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01laScsJ0p1bicsXHJcblx0XHQnSnVsJywnQWd1cycsJ1NlcCcsJ09rdCcsJ05vcCcsJ0RlcyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnTWluZ2d1JywnU2VuaW4nLCdTZWxhc2EnLCdSYWJ1JywnS2FtaXMnLCdKdW1hdCcsJ1NhYnR1J10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ01pbicsJ1NlbicsJ1NlbCcsJ1JhYicsJ2thbScsJ0p1bScsJ1NhYiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnTWcnLCdTbicsJ1NsJywnUmInLCdLbScsJ2ptJywnU2InXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydpZCddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydpZCddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBJY2VsYW5kaWMgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEhhdWt1ciBILiBUaG9yc3NvbiAoaGF1a3VyQGVza2lsbC5pcykuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydpcyddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbsO6YXInLCdGZWJyw7phcicsJ01hcnMnLCdBcHLDrWwnLCdNYcOtJywnSsO6bsOtJyxcclxuXHRcdCdKw7psw60nLCfDgWfDunN0JywnU2VwdGVtYmVyJywnT2t0w7NiZXInLCdOw7N2ZW1iZXInLCdEZXNlbWJlciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01hw60nLCdKw7puJyxcclxuXHRcdCdKw7psJywnw4Fnw7onLCdTZXAnLCdPa3QnLCdOw7N2JywnRGVzJ10sXHJcblx0XHRkYXlOYW1lczogWydTdW5udWRhZ3VyJywnTcOhbnVkYWd1cicsJ8OecmnDsGp1ZGFndXInLCdNacOwdmlrdWRhZ3VyJywnRmltbXR1ZGFndXInLCdGw7ZzdHVkYWd1cicsJ0xhdWdhcmRhZ3VyJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ1N1bicsJ03DoW4nLCfDnnJpJywnTWnDsCcsJ0ZpbScsJ0bDtnMnLCdMYXUnXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ1N1JywnTcOhJywnw55yJywnTWknLCdGaScsJ0bDticsJ0xhJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMCxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaXMnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaXMnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgSXRhbGlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgQXBhZWxsYSAoYXBhZWxsYUBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snaXQnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydHZW5uYWlvJywnRmViYnJhaW8nLCdNYXJ6bycsJ0FwcmlsZScsJ01hZ2dpbycsJ0dpdWdubycsXHJcblx0XHQnTHVnbGlvJywnQWdvc3RvJywnU2V0dGVtYnJlJywnT3R0b2JyZScsJ05vdmVtYnJlJywnRGljZW1icmUnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydHZW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWcnLCdHaXUnLFxyXG5cdFx0J0x1ZycsJ0FnbycsJ1NldCcsJ090dCcsJ05vdicsJ0RpYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnRG9tZW5pY2EnLCdMdW5lZMOsJywnTWFydGVkw6wnLCdNZXJjb2xlZMOsJywnR2lvdmVkw6wnLCdWZW5lcmTDrCcsJ1NhYmF0byddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydEb20nLCdMdW4nLCdNYXInLCdNZXInLCdHaW8nLCdWZW4nLCdTYWInXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ0RvJywnTHUnLCdNYScsJ01lJywnR2lvJywnVmUnLCdTYSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2l0J10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2l0J107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEphcGFuZXNlIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBLZW50YXJvIFNBVE8gKGtlbnRhcm9AcmFudmlzLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydqYSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJzHmnIgnLCcy5pyIJywnM+aciCcsJzTmnIgnLCc15pyIJywnNuaciCcsXHJcblx0XHQnN+aciCcsJzjmnIgnLCc55pyIJywnMTDmnIgnLCcxMeaciCcsJzEy5pyIJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnMeaciCcsJzLmnIgnLCcz5pyIJywnNOaciCcsJzXmnIgnLCc25pyIJyxcclxuXHRcdCc35pyIJywnOOaciCcsJznmnIgnLCcxMOaciCcsJzEx5pyIJywnMTLmnIgnXSxcclxuXHRcdGRheU5hbWVzOiBbJ+aXpeabnOaXpScsJ+aciOabnOaXpScsJ+eBq+abnOaXpScsJ+awtOabnOaXpScsJ+acqOabnOaXpScsJ+mHkeabnOaXpScsJ+Wcn+abnOaXpSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfml6UnLCfmnIgnLCfngasnLCfmsLQnLCfmnKgnLCfph5EnLCflnJ8nXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ+aXpScsJ+aciCcsJ+eBqycsJ+awtCcsJ+acqCcsJ+mHkScsJ+WcnyddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXkvbW0vZGQnLFxyXG5cdFx0Zmlyc3REYXk6IDAsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2phJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2phJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEdlb3JnaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgQW5kcmVpIEdvcmJ1c2hraW4uICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydrYSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ+GDmOGDkOGDnOGDleGDkOGDoOGDmCcsJ+GDl+GDlOGDkeGDlOGDoOGDleGDkOGDmuGDmCcsJ+GDm+GDkOGDoOGDouGDmCcsJ+GDkOGDnuGDoOGDmOGDmuGDmCcsJ+GDm+GDkOGDmOGDoeGDmCcsJ+GDmOGDleGDnOGDmOGDoeGDmCcsXHJcblx0XHQn4YOY4YOV4YOa4YOY4YOh4YOYJywn4YOQ4YOS4YOV4YOY4YOh4YOi4YOdJywn4YOh4YOU4YOl4YOi4YOU4YOb4YOR4YOU4YOg4YOYJywn4YOd4YOl4YOi4YOd4YOb4YOR4YOU4YOg4YOYJywn4YOc4YOd4YOU4YOb4YOR4YOU4YOg4YOYJywn4YOT4YOU4YOZ4YOU4YOb4YOR4YOU4YOg4YOYJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn4YOY4YOQ4YOcJywgJ+GDl+GDlOGDkScsICfhg5vhg5Dhg6AnLCAn4YOQ4YOe4YOgJywgJ+GDm+GDkOGDmOGDoeGDmCcsICfhg5jhg5Xhg5wnLFxyXG5cdFx0J+GDmOGDleGDmicsICfhg5Dhg5Lhg5UnLCAn4YOh4YOU4YOlJywgJ+GDneGDpeGDoicsICfhg5zhg53hg5QnLCAn4YOT4YOU4YOZJ10sXHJcblx0XHRkYXlOYW1lczogWyfhg5nhg5Xhg5jhg6Dhg5AnLCAn4YOd4YOg4YOo4YOQ4YOR4YOQ4YOX4YOYJywgJ+GDoeGDkOGDm+GDqOGDkOGDkeGDkOGDl+GDmCcsICfhg53hg5fhg67hg6jhg5Dhg5Hhg5Dhg5fhg5gnLCAn4YOu4YOj4YOX4YOo4YOQ4YOR4YOQ4YOX4YOYJywgJ+GDnuGDkOGDoOGDkOGDoeGDmeGDlOGDleGDmCcsICfhg6jhg5Dhg5Hhg5Dhg5fhg5gnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn4YOZ4YOVJywgJ+GDneGDoOGDqCcsICfhg6Hhg5Dhg5snLCAn4YOd4YOX4YOuJywgJ+GDruGDo+GDlycsICfhg57hg5Dhg6AnLCAn4YOo4YOQ4YORJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfhg5nhg5UnLCfhg53hg6AnLCfhg6Hhg5snLCfhg53hg5cnLCAn4YOu4YOoJywgJ+GDnuGDoCcsJ+GDqOGDkSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2thJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2thJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEtobWVyIGluaXRpYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IFNvdmljaGV0IFRlcCAoc292aWNoZXQudGVwQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydrbSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ+GegeGfguKAi+GemOGegOGemuGeticsJ+GegeGfguKAi+GegOGeu+GemOGfkuGel+GfiCcsJ+GegeGfguKAi+GemOGet+Gek+GeticsJ+GegeGfguKAi+GemOGfgeGen+GeticsJ+GegeGfguKAi+Gep+Gen+Gel+GeticsJ+GegeGfguKAi+GemOGet+GekOGeu+Gek+GeticsXHJcblx0XHQn4Z6B4Z+C4oCL4Z6A4Z6A4Z+S4Z6A4Z6K4Z62Jywn4Z6B4Z+C4oCL4Z6f4Z644Z6g4Z62Jywn4Z6B4Z+C4oCL4Z6A4Z6J4Z+S4Z6J4Z62Jywn4Z6B4Z+C4oCL4Z6P4Z674Z6b4Z62Jywn4Z6B4Z+C4oCL4Z6c4Z634Z6F4Z+S4Z6G4Z634Z6A4Z62Jywn4Z6B4Z+C4oCL4Z6S4Z+S4Z6T4Z68J10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn4Z6Y4Z6AJywgJ+GegOGeuycsICfhnpjhnrfhnpPhnrYnLCAn4Z6Y4Z+BJywgJ+Gep+GenycsICfhnpjhnrfhnpDhnrsnLFxyXG5cdFx0J+GegOGegOGfkuGegCcsICfhnp/hnrgnLCAn4Z6A4Z6J4Z+S4Z6J4Z62JywgJ+Gej+Geu+Gem+GeticsICfhnpzhnrfhnoXhn5LhnobhnrcnLCAn4Z6S4Z+S4Z6T4Z68J10sXHJcblx0XHRkYXlOYW1lczogWyfhnpDhn5LhnoThn4PigIvhnqLhnrbhnpHhnrfhno/hn5LhnpknLCAn4Z6Q4Z+S4Z6E4Z+D4oCL4Z6F4Z6T4Z+S4Z6RJywgJ+GekOGfkuGehOGfg+KAi+GeouGehOGfkuGeguGetuGemicsICfhnpDhn5LhnoThn4PigIvhnpbhnrvhnpInLCAn4Z6Q4Z+S4Z6E4Z+D4oCL4Z6W4Z+S4Z6a4Z6g4Z6f4Z+S4Z6U4Z6P4Z+S4Z6P4Z634Z+NJywgJ+GekOGfkuGehOGfg+KAi+Gen+Geu+GegOGfkuGemicsICfhnpDhn5LhnoThn4PigIvhnp/hn4Xhnprhn40nXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn4Z6i4Z62JywgJ+GeheGek+GfkuGekScsICfhnqLhnoThn5LhnoInLCAn4Z6W4Z674Z6SJywgJ+GeluGfkuGemuGeoCcsICfhnp/hnrsnLCAn4Z6f4Z+F4Z6a4Z+NJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfhnqLhnrYnLCfhnoUnLCfhnqInLCfhnpbhnrsnLCfhnpbhn5LhnponLCfhnp/hnrsnLCfhnp8nXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydrbSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydrbSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBLb3JlYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IERhZUt3b24gS2FuZyAobmNyYXNoLmRrQGdtYWlsLmNvbSksIEVkaXRlZCBieSBHZW5pZS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2tvJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnMeyblCcsJzLsm5QnLCcz7JuUJywnNOyblCcsJzXsm5QnLCc27JuUJyxcclxuXHRcdCc37JuUJywnOOyblCcsJznsm5QnLCcxMOyblCcsJzEx7JuUJywnMTLsm5QnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWycx7JuUJywnMuyblCcsJzPsm5QnLCc07JuUJywnNeyblCcsJzbsm5QnLFxyXG5cdFx0Jzfsm5QnLCc47JuUJywnOeyblCcsJzEw7JuUJywnMTHsm5QnLCcxMuyblCddLFxyXG5cdFx0ZGF5TmFtZXM6IFsn7J287JqU7J28Jywn7JuU7JqU7J28Jywn7ZmU7JqU7J28Jywn7IiY7JqU7J28Jywn66qp7JqU7J28Jywn6riI7JqU7J28Jywn7Yag7JqU7J28J10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+ydvCcsJ+yblCcsJ+2ZlCcsJ+yImCcsJ+uqqScsJ+q4iCcsJ+2GoCddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn7J28Jywn7JuUJywn7ZmUJywn7IiYJywn66qpJywn6riIJywn7YagJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAneXl5eS1tbS1kZCcsXHJcblx0XHRmaXJzdERheTogMCxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sna28nXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sna28nXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgTGl0aHVhbmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIEFydHVyYXMgUGFsZWljaWthcyA8YXJ0dXJhc0BhdmFsb24ubHQ+LiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbHQnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydTYXVzaXMnLCdWYXNhcmlzJywnS292YXMnLCdCYWxhbmRpcycsJ0dlZ3XFvsSXJywnQmlyxb5lbGlzJyxcclxuXHRcdCdMaWVwYScsJ1J1Z3Bqxat0aXMnLCdSdWdzxJdqaXMnLCdTcGFsaXMnLCdMYXBrcml0aXMnLCdHcnVvZGlzJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnU2F1JywnVmFzJywnS292JywnQmFsJywnR2VnJywnQmlyJyxcclxuXHRcdCdMaWUnLCdSdWdwJywnUnVncycsJ1NwYScsJ0xhcCcsJ0dydSddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnc2VrbWFkaWVuaXMnLCdwaXJtYWRpZW5pcycsJ2FudHJhZGllbmlzJywndHJlxI1pYWRpZW5pcycsJ2tldHZpcnRhZGllbmlzJywncGVua3RhZGllbmlzJywnxaFlxaF0YWRpZW5pcyddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydzZWsnLCdwaXInLCdhbnQnLCd0cmUnLCdrZXQnLCdwZW4nLCfFoWXFoSddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnU2UnLCdQcicsJ0FuJywnVHInLCdLZScsJ1BlJywnxaBlJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAneXl5eS1tbS1kZCcsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbHQnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbHQnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgTGF0dmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIEFydHVyYXMgUGFsZWljaWthcyA8YXJ0dXJhcy5wYWxlaWNpa2FzQG1ldGFzaXRlLm5ldD4uICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydsdiddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnbEgXJpcycsJ0ZlYnJ1xIFyaXMnLCdNYXJ0cycsJ0FwcsSrbGlzJywnTWFpanMnLCdKxatuaWpzJyxcclxuXHRcdCdKxatsaWpzJywnQXVndXN0cycsJ1NlcHRlbWJyaXMnLCdPa3RvYnJpcycsJ05vdmVtYnJpcycsJ0RlY2VtYnJpcyddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01haScsJ0rFq24nLFxyXG5cdFx0J0rFq2wnLCdBdWcnLCdTZXAnLCdPa3QnLCdOb3YnLCdEZWMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ3N2xJN0ZGllbmEnLCdwaXJtZGllbmEnLCdvdHJkaWVuYScsJ3RyZcWhZGllbmEnLCdjZXR1cnRkaWVuYScsJ3BpZWt0ZGllbmEnLCdzZXN0ZGllbmEnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnc3Z0JywncHJtJywnb3RyJywndHJlJywnY3RyJywncGt0Jywnc3N0J10sXHJcblx0XHRkYXlOYW1lc01pbjogWydTdicsJ1ByJywnT3QnLCdUcicsJ0N0JywnUGsnLCdTcyddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLW1tLXl5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2x2J10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2x2J107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIE1vbnRlbmVncmluIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgQnkgTWlsb8WhIE1pbG/FoWV2acSHIC0gZmxla2EgZC5vLm8uICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtZS1NRSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlqYW5za2knLFxyXG5cdFx0ZXBvY2hzOiBbJ3BuZScsICduZSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW51YXInLCdGZWJydWFyJywnTWFydCcsJ0FwcmlsJywnTWFqJywnSnVuJyxcclxuXHRcdCdKdWwnLCdBdmd1c3QnLCdTZXB0ZW1iYXInLCdPa3RvYmFyJywnTm92ZW1iYXInLCdEZWNlbWJhciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYWonLCAnSnVuJyxcclxuXHRcdCdKdWwnLCAnQXZnJywgJ1NlcCcsICdPa3QnLCAnTm92JywgJ0RlYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnTmXEkWVsamEnLCAnUG9uZcSRZWxqYWsnLCAnVXRvcmFrJywgJ1NyaWplZGEnLCAnxIxldHZydGFrJywgJ1BldGFrJywgJ1N1Ym90YSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydOZcSRJywgJ1BvbicsICdVdG8nLCAnU3JpJywgJ8SMZXQnLCAnUGV0JywgJ1N1YiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnTmUnLCdQbycsJ1V0JywnU3InLCfEjGUnLCdQZScsJ1N1J10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWUtTUUnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWUtTUUnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgTW9udGVuZWdyaW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBCeSBNaWxvxaEgTWlsb8WhZXZpxIcgLSBmbGVrYSBkLm8uby4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21lJ10gPSB7XHJcblx0XHRuYW1lOiAn0JPRgNC10LPQvtGA0LjRmNCw0L3RgdC60LgnLFxyXG5cdFx0ZXBvY2hzOiBbJ9C/0L3QtScsICfQvdC1J10sXHJcblx0XHRtb250aE5hbWVzOiBbJ9CI0LDQvdGD0LDRgCcsJ9Ck0LXQsdGA0YPQsNGAJywn0JzQsNGA0YInLCfQkNC/0YDQuNC7Jywn0JzQsNGYJywn0IjRg9C9JyxcclxuXHRcdCfQiNGD0LsnLCfQkNCy0LPRg9GB0YInLCfQodC10L/RgtC10LzQsdCw0YAnLCfQntC60YLQvtCx0LDRgCcsJ9Cd0L7QstC10LzQsdCw0YAnLCfQlNC10YbQtdC80LHQsNGAJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn0IjQsNC9JywgJ9Ck0LXQsScsICfQnNCw0YAnLCAn0JDQv9GAJywgJ9Cc0LDRmCcsICfQiNGD0L0nLFxyXG5cdFx0J9CI0YPQuycsICfQkNCy0LMnLCAn0KHQtdC/JywgJ9Ce0LrRgicsICfQndC+0LInLCAn0JTQtdGGJ10sXHJcblx0XHRkYXlOYW1lczogWyfQndC10ZLQtdGZ0LAnLCAn0J/QvtC90LXRktC10ZnQsNC6JywgJ9Cj0YLQvtGA0LDQuicsICfQodGA0LjRmNC10LTQsCcsICfQp9C10YLQstGA0YLQsNC6JywgJ9Cf0LXRgtCw0LonLCAn0KHRg9Cx0L7RgtCwJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9Cd0LXRkicsICfQn9C+0L0nLCAn0KPRgtC+JywgJ9Ch0YDQuCcsICfQp9C10YInLCAn0J/QtdGCJywgJ9Ch0YPQsSddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn0J3QtScsJ9Cf0L4nLCfQo9GCJywn0KHRgCcsJ9Cn0LUnLCfQn9C1Jywn0KHRgyddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21lJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21lJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgINCc0LDQutC10LTQvtC90YHQutC4IE1LIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgSGFqYW4gU2VsbWFuaSAoaGFqYW4gW2F0XSBsaXZlIFtkb3RdIGNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtayddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ9CI0LDQvdGD0LDRgNC4Jywn0KTQtdCy0YDRg9Cw0YDQuCcsJ9Cc0LDRgNGCJywn0JDQv9GA0LjQuycsJ9Cc0LDRmCcsJ9CI0YPQvdC4JyxcclxuXHRcdCfQiNGD0LvQuCcsJ9CQ0LLQs9GD0YHRgicsJ9Ch0LXQv9GC0LXQvNCy0YDQuCcsJ9Ce0LrRgtC+0LzQstGA0LgnLCfQndC+0LXQvNCy0YDQuCcsJ9CU0LXQutC10LzQstGA0LgnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfQiNCw0L0nLCAn0KTQtdCyJywgJ9Cc0LDRgCcsICfQkNC/0YAnLCAn0JzQsNGYJywgJ9CI0YPQvScsXHJcblx0XHQn0IjRg9C7JywgJ9CQ0LLQsycsICfQodC10L8nLCAn0J7QutGCJywgJ9Cd0L7QsicsICfQlNC10LonXSxcclxuXHRcdGRheU5hbWVzOiBbJ9Cd0LXQtNC10LvQsCcsICfQn9C+0L3QtdC00LXQu9C90LjQuicsICfQktGC0L7RgNC90LjQuicsICfQodGA0LXQtNCwJywgJ9Cn0LXRgtCy0YDRgtC+0LonLCAn0J/QtdGC0L7QuicsICfQodCw0LHQvtGC0LAnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn0J3QtdC0JywgJ9Cf0L7QvScsICfQktGC0L4nLCAn0KHRgNC1JywgJ9Cn0LXRgicsICfQn9C10YInLCAn0KHQsNCxJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfQndC1Jywn0J/QvicsJ9CS0YInLCfQodGAJywn0KfQtScsJ9Cf0LUnLCfQodCwJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWsnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWsnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgTWFsYXlhbGFtIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgU2FqaSBOZWRpeWFuY2hhdGggKHNhamk4OUBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWwnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWyfgtJzgtKjgtYHgtLXgtLDgtL8nLCfgtKvgtYbgtKzgtY3gtLDgtYHgtLXgtLDgtL8nLCfgtK7gtL7gtLDgtY3igI3gtJrgtY3gtJrgtY0nLCfgtI/gtKrgtY3gtLDgtL/gtLLgtY3igI0nLCfgtK7gtYfgtK/gtY0nLCfgtJzgtYLgtKPgtY3igI0nLFxyXG5cdFx0J+C0nOC1guC0suC1iCcsJ+C0huC0l+C0uOC1jeC0seC1jeC0seC1jScsJ+C0uOC1huC0quC1jeC0seC1jeC0seC0guC0rOC0sOC1jeKAjScsJ+C0kuC0leC1jeC0n+C1i+C0rOC0sOC1jeKAjScsJ+C0qOC0teC0guC0rOC0sOC1jeKAjScsJ+C0oeC0v+C0uOC0guC0rOC0sOC1jeKAjSddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ+C0nOC0qOC1gScsICfgtKvgtYbgtKzgtY0nLCAn4LSu4LS+4LSw4LWN4oCNJywgJ+C0j+C0quC1jeC0sOC0vycsICfgtK7gtYfgtK/gtY0nLCAn4LSc4LWC4LSj4LWN4oCNJyxcclxuXHRcdCfgtJzgtYLgtLLgtL4nLCAn4LSG4LSXJywgJ+C0uOC1huC0quC1jScsICfgtJLgtJXgtY3gtJ/gtYsnLCAn4LSo4LS14LSCJywgJ+C0oeC0v+C0uCddLFxyXG5cdFx0ZGF5TmFtZXM6IFsn4LSe4LS+4LSv4LSw4LWN4oCNJywgJ+C0pOC0v+C0meC1jeC0leC0s+C1jeKAjScsICfgtJrgtYrgtLXgtY3gtLUnLCAn4LSs4LWB4LSn4LSo4LWN4oCNJywgJ+C0teC1jeC0r+C0vuC0tOC0gicsICfgtLXgtYbgtLPgtY3gtLPgtL8nLCAn4LS24LSo4LS/J10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+C0nuC0vuC0rycsICfgtKTgtL/gtJngtY3gtJUnLCAn4LSa4LWK4LS14LWN4LS1JywgJ+C0rOC1geC0pycsICfgtLXgtY3gtK/gtL7gtLTgtIInLCAn4LS14LWG4LSz4LWN4LSz4LS/JywgJ+C0tuC0qOC0vyddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn4LSe4LS+Jywn4LSk4LS/Jywn4LSa4LWKJywn4LSs4LWBJywn4LS14LWN4LSv4LS+Jywn4LS14LWGJywn4LS2J10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWwnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbWwnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgTWFsYXlzaWFuIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBNb2hkIE5hd2F3aSBNb2hhbWFkIEphbWlsaSAobmF3YXdpQHJvbmdnZW5nLm5ldCkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydtcyddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcmknLCdGZWJydWFyaScsJ01hYycsJ0FwcmlsJywnTWVpJywnSnVuJyxcclxuXHRcdCdKdWxhaScsJ09nb3MnLCdTZXB0ZW1iZXInLCdPa3RvYmVyJywnTm92ZW1iZXInLCdEaXNlbWJlciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hYycsJ0FwcicsJ01laScsJ0p1bicsXHJcblx0XHQnSnVsJywnT2dvJywnU2VwJywnT2t0JywnTm92JywnRGlzJ10sXHJcblx0XHRkYXlOYW1lczogWydBaGFkJywnSXNuaW4nLCdTZWxhc2EnLCdSYWJ1JywnS2hhbWlzJywnSnVtYWF0JywnU2FidHUnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnQWhhJywnSXNuJywnU2VsJywnUmFiJywnS2hhJywnSnVtJywnU2FiJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydBaCcsJ0lzJywnU2UnLCdSYScsJ0toJywnSnUnLCdTYSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDAsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21zJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ21zJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIE1hbHRlc2UgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IENocml0aWFuIFNjaWJlcnJhcyAodXVmNjQyOUBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbXQnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW5uYXInLCdGcmFyJywnTWFyenUnLCdBcHJpbCcsJ01lamp1JywnxKB1bmp1JyxcclxuXHRcdCdMdWxqdScsJ0F3aXNzdScsJ1NldHRlbWJydScsJ090dHVicnUnLCdOb3ZlbWJydScsJ0RpxItlbWJydSddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGcmEnLCAnTWFyJywgJ0FwcicsICdNZWonLCAnxKB1bicsXHJcblx0XHQnTHVsJywgJ0F3aScsICdTZXQnLCAnT3R0JywgJ05vdicsICdEacSLJ10sXHJcblx0XHRkYXlOYW1lczogWydJbC3EpmFkZCcsICdJdC1UbmVqbicsICdJdC1UbGlldGEnLCAnTC1FcmJnxKdhJywgJ0lsLcSmYW1pcycsICdJbC3EoGltZ8SnYScsICdJcy1TaWJ0J10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ8SmYWQnLCAnVG5lJywgJ1RsaScsICdFcmInLCAnxKZhbScsICfEoGltJywgJ1NpYiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnxKYnLCdUJywnVCcsJ0UnLCfEpicsJ8SgJywnUyddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ210J10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ210J107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIER1dGNoL0JlbGdpYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IE1hdGhpYXMgQnluZW5zIDxodHRwOi8vbWF0aGlhc2J5bmVucy5iZS8+LiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbmwtQkUnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydqYW51YXJpJywgJ2ZlYnJ1YXJpJywgJ21hYXJ0JywgJ2FwcmlsJywgJ21laScsICdqdW5pJyxcclxuXHRcdCdqdWxpJywgJ2F1Z3VzdHVzJywgJ3NlcHRlbWJlcicsICdva3RvYmVyJywgJ25vdmVtYmVyJywgJ2RlY2VtYmVyJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnamFuJywgJ2ZlYicsICdtYWEnLCAnYXByJywgJ21laScsICdqdW4nLFxyXG5cdFx0J2p1bCcsICdhdWcnLCAnc2VwJywgJ29rdCcsICdub3YnLCAnZGVjJ10sXHJcblx0XHRkYXlOYW1lczogWyd6b25kYWcnLCAnbWFhbmRhZycsICdkaW5zZGFnJywgJ3dvZW5zZGFnJywgJ2RvbmRlcmRhZycsICd2cmlqZGFnJywgJ3phdGVyZGFnJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ3pvbicsICdtYWEnLCAnZGluJywgJ3dvZScsICdkb24nLCAndnJpJywgJ3phdCddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnem8nLCAnbWEnLCAnZGknLCAnd28nLCAnZG8nLCAndnInLCAnemEnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydubC1CRSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydubC1CRSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBEdXRjaCBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTWF0aGlhcyBCeW5lbnMgPGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlLz4uICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydubCddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ2phbnVhcmknLCAnZmVicnVhcmknLCAnbWFhcnQnLCAnYXByaWwnLCAnbWVpJywgJ2p1bmknLFxyXG5cdFx0J2p1bGknLCAnYXVndXN0dXMnLCAnc2VwdGVtYmVyJywgJ29rdG9iZXInLCAnbm92ZW1iZXInLCAnZGVjZW1iZXInXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydqYW4nLCAnZmViJywgJ21hYScsICdhcHInLCAnbWVpJywgJ2p1bicsXHJcblx0XHQnanVsJywgJ2F1ZycsICdzZXAnLCAnb2t0JywgJ25vdicsICdkZWMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ3pvbmRhZycsICdtYWFuZGFnJywgJ2RpbnNkYWcnLCAnd29lbnNkYWcnLCAnZG9uZGVyZGFnJywgJ3ZyaWpkYWcnLCAnemF0ZXJkYWcnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnem9uJywgJ21hYScsICdkaW4nLCAnd29lJywgJ2RvbicsICd2cmknLCAnemF0J10sXHJcblx0XHRkYXlOYW1lc01pbjogWyd6bycsICdtYScsICdkaScsICd3bycsICdkbycsICd2cicsICd6YSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLW1tLXl5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ25sJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ25sJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIE5vcndlZ2lhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTmFpbWRqb24gVGFraGlyb3YgKG5haW1kam9uQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydubyddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcicsJ0ZlYnJ1YXInLCdNYXJzJywnQXByaWwnLCdNYWknLCdKdW5pJyxcclxuXHRcdCdKdWxpJywnQXVndXN0JywnU2VwdGVtYmVyJywnT2t0b2JlcicsJ05vdmVtYmVyJywnRGVzZW1iZXInXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWknLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ0F1ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RlcyddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydTw7huJywnTWFuJywnVGlyJywnT25zJywnVG9yJywnRnJlJywnTMO4ciddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnU8O4bmRhZycsJ01hbmRhZycsJ1RpcnNkYWcnLCdPbnNkYWcnLCdUb3JzZGFnJywnRnJlZGFnJywnTMO4cmRhZyddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnU8O4JywnTWEnLCdUaScsJ09uJywnVG8nLCdGcicsJ0zDuCddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ25vJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ25vJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFBvbGlzaCBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgSmFjZWsgV3lzb2NraSAoamFjZWsud3lzb2NraUBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncGwnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydTdHljemXFhCcsJ0x1dHknLCdNYXJ6ZWMnLCdLd2llY2llxYQnLCdNYWonLCdDemVyd2llYycsXHJcblx0XHQnTGlwaWVjJywnU2llcnBpZcWEJywnV3J6ZXNpZcWEJywnUGHFumR6aWVybmlrJywnTGlzdG9wYWQnLCdHcnVkemllxYQnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydTdHknLCdMdScsJ01hcicsJ0t3JywnTWFqJywnQ3plJyxcclxuXHRcdCdMaXAnLCdTaWUnLCdXcnonLCdQYScsJ0xpcycsJ0dydSddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnTmllZHppZWxhJywnUG9uaWVkemlhbGVrJywnV3RvcmVrJywnxZpyb2RhJywnQ3p3YXJ0ZWsnLCdQacSFdGVrJywnU29ib3RhJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ05pZScsJ1BuJywnV3QnLCfFmnInLCdDencnLCdQdCcsJ1NvJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydOJywnUG4nLCdXdCcsJ8WacicsJ0N6JywnUHQnLCdTbyddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXktbW0tZGQnLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3BsJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3BsJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEJyYXppbGlhbiBQb3J0dWd1ZXNlIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBMZW9uaWxkbyBDb3N0YSBTaWx2YSAobGVvY3NpbHZhQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydwdC1CUiddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbmVpcm8nLCdGZXZlcmVpcm8nLCdNYXLDp28nLCdBYnJpbCcsJ01haW8nLCdKdW5obycsXHJcblx0XHQnSnVsaG8nLCdBZ29zdG8nLCdTZXRlbWJybycsJ091dHVicm8nLCdOb3ZlbWJybycsJ0RlemVtYnJvJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmV2JywnTWFyJywnQWJyJywnTWFpJywnSnVuJyxcclxuXHRcdCdKdWwnLCdBZ28nLCdTZXQnLCdPdXQnLCdOb3YnLCdEZXonXSxcclxuXHRcdGRheU5hbWVzOiBbJ0RvbWluZ28nLCdTZWd1bmRhLWZlaXJhJywnVGVyw6dhLWZlaXJhJywnUXVhcnRhLWZlaXJhJywnUXVpbnRhLWZlaXJhJywnU2V4dGEtZmVpcmEnLCdTw6FiYWRvJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ0RvbScsJ1NlZycsJ1RlcicsJ1F1YScsJ1F1aScsJ1NleCcsJ1PDoWInXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ0RvbScsJ1NlZycsJ1RlcicsJ1F1YScsJ1F1aScsJ1NleCcsJ1PDoWInXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydwdC1CUiddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydwdC1CUiddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBSb21hbnNoIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgWXZvbm5lIEdpZW5hbCAoeXZvbm5lLmdpZW5hbEBlZHVjYS5jaCkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydybSddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ1NjaGFuZXInLCdGYXZyZXInLCdNYXJzJywnQXZyaWdsJywnTWF0ZycsJ1plcmNsYWR1cicsXHJcblx0XHQnRmFuYWR1cicsJ0F2dXN0JywnU2V0dGVtYmVyJywnT2N0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXInXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydTY2hhJywnRmV2JywnTWFyJywnQXZyJywnTWF0ZycsJ1plcicsXHJcblx0XHQnRmFuJywnQXZ1JywnU2V0dCcsJ09jdCcsJ05vdicsJ0RlYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnRHVtZW5naWEnLCdHbGluZGVzZGknLCdNYXJkaScsJ01lc2VtbmEnLCdHaWV2Z2lhJywnVmVuZGVyZGknLCdTb25kYSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydEdW0nLCdHbGknLCdNYXInLCdNZXMnLCdHaWUnLCdWZW4nLCdTb20nXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ0R1JywnR2wnLCdNYScsJ01lJywnR2knLCdWZScsJ1NvJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncm0nXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncm0nXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgUm9tYW5pYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEVkbW9uZCBMLiAobGxfZWRtb25kQHdhbGxhLmNvbSkgYW5kIElvbnV0IEcuIFN0YW4gKGlvbnV0Lmcuc3RhbkBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncm8nXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydJYW51YXJpZScsJ0ZlYnJ1YXJpZScsJ01hcnRpZScsJ0FwcmlsaWUnLCdNYWknLCdJdW5pZScsXHJcblx0XHQnSXVsaWUnLCdBdWd1c3QnLCdTZXB0ZW1icmllJywnT2N0b21icmllJywnTm9pZW1icmllJywnRGVjZW1icmllJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSWFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01haScsICdJdW4nLFxyXG5cdFx0J0l1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb2knLCAnRGVjJ10sXHJcblx0XHRkYXlOYW1lczogWydEdW1pbmljxIMnLCAnTHVuaScsICdNYXJ0aScsICdNaWVyY3VyaScsICdKb2knLCAnVmluZXJpJywgJ1PDom1ixIN0xIMnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnRHVtJywgJ0x1bicsICdNYXInLCAnTWllJywgJ0pvaScsICdWaW4nLCAnU8OibSddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnRHUnLCdMdScsJ01hJywnTWknLCdKbycsJ1ZpJywnU8OiJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncm8nXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncm8nXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgUnVzc2lhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgQW5kcmV3IFN0cm9tbm92IChzdHJvbW5vdkBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncnUnXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWyfQr9C90LLQsNGA0YwnLCfQpNC10LLRgNCw0LvRjCcsJ9Cc0LDRgNGCJywn0JDQv9GA0LXQu9GMJywn0JzQsNC5Jywn0JjRjtC90YwnLFxyXG5cdFx0J9CY0Y7Qu9GMJywn0JDQstCz0YPRgdGCJywn0KHQtdC90YLRj9Cx0YDRjCcsJ9Ce0LrRgtGP0LHRgNGMJywn0J3QvtGP0LHRgNGMJywn0JTQtdC60LDQsdGA0YwnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfQr9C90LInLCfQpNC10LInLCfQnNCw0YAnLCfQkNC/0YAnLCfQnNCw0LknLCfQmNGO0L0nLFxyXG5cdFx0J9CY0Y7QuycsJ9CQ0LLQsycsJ9Ch0LXQvScsJ9Ce0LrRgicsJ9Cd0L7RjycsJ9CU0LXQuiddLFxyXG5cdFx0ZGF5TmFtZXM6IFsn0LLQvtGB0LrRgNC10YHQtdC90YzQtScsJ9C/0L7QvdC10LTQtdC70YzQvdC40LonLCfQstGC0L7RgNC90LjQuicsJ9GB0YDQtdC00LAnLCfRh9C10YLQstC10YDQsycsJ9C/0Y/RgtC90LjRhtCwJywn0YHRg9Cx0LHQvtGC0LAnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn0LLRgdC6Jywn0L/QvdC0Jywn0LLRgtGAJywn0YHRgNC0Jywn0YfRgtCyJywn0L/RgtC9Jywn0YHQsdGCJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfQktGBJywn0J/QvScsJ9CS0YInLCfQodGAJywn0KfRgicsJ9Cf0YInLCfQodCxJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncnUnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sncnUnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgU2xvdmFrIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBWb2p0ZWNoIFJpbmlrICh2b2p0b0BobW0uc2spLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc2snXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW51w6FyJywnRmVicnXDoXInLCdNYXJlYycsJ0FwcsOtbCcsJ03DoWonLCdKw7puJyxcclxuXHRcdCdKw7psJywnQXVndXN0JywnU2VwdGVtYmVyJywnT2t0w7NiZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnRmViJywnTWFyJywnQXByJywnTcOhaicsJ0rDum4nLFxyXG5cdFx0J0rDumwnLCdBdWcnLCdTZXAnLCdPa3QnLCdOb3YnLCdEZWMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ05lZGVsXFwnYScsJ1BvbmRlbG9rJywnVXRvcm9rJywnU3RyZWRhJywnxaB0dnJ0b2snLCdQaWF0b2snLCdTb2JvdGEnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnTmVkJywnUG9uJywnVXRvJywnU3RyJywnxaB0dicsJ1BpYScsJ1NvYiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnTmUnLCdQbycsJ1V0JywnU3QnLCfFoHQnLCdQaWEnLCdTbyddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDAsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NrJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NrJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFNsb3ZlbmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgSmFrYSBKYW5jYXIgKGpha2FAa3ViamUub3JnKS4gKi9cclxuLyogYyA9ICYjeDEwRDssIHMgPSAmI3gxNjE7IHogPSAmI3gxN0U7IEMgPSAmI3gxMEM7IFMgPSAmI3gxNjA7IFogPSAmI3gxN0Q7ICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzbCddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ0phbnVhcicsJ0ZlYnJ1YXInLCdNYXJlYycsJ0FwcmlsJywnTWFqJywnSnVuaWonLFxyXG5cdFx0J0p1bGlqJywnQXZndXN0JywnU2VwdGVtYmVyJywnT2t0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXInXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWonLCdKdW4nLFxyXG5cdFx0J0p1bCcsJ0F2ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RlYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnTmVkZWxqYScsJ1BvbmVkZWxqZWsnLCdUb3JlaycsJ1NyZWRhJywnJiN4MTBDO2V0cnRlaycsJ1BldGVrJywnU29ib3RhJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ05lZCcsJ1BvbicsJ1RvcicsJ1NyZScsJyYjeDEwQztldCcsJ1BldCcsJ1NvYiddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnTmUnLCdQbycsJ1RvJywnU3InLCcmI3gxMEM7ZScsJ1BlJywnU28nXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC5tbS55eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzbCddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzbCddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBBbGJhbmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgRmxha3JvbiBCeXR5cWkgKGZsYWtyb25AZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NxJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsnSmFuYXInLCdTaGt1cnQnLCdNYXJzJywnUHJpbGwnLCdNYWonLCdRZXJzaG9yJyxcclxuXHRcdCdLb3JyaWsnLCdHdXNodCcsJ1NodGF0b3InLCdUZXRvcicsJ07Dq250b3InLCdEaGpldG9yJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywnU2hrJywnTWFyJywnUHJpJywnTWFqJywnUWVyJyxcclxuXHRcdCdLb3InLCdHdXMnLCdTaHQnLCdUZXQnLCdOw6tuJywnRGhqJ10sXHJcblx0XHRkYXlOYW1lczogWydFIERpZWwnLCdFIEjDq27DqycsJ0UgTWFydMOrJywnRSBNw6tya3Vyw6snLCdFIEVuanRlJywnRSBQcmVtdGUnLCdFIFNodHVuZSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydEaScsJ0jDqycsJ01hJywnTcOrJywnRW4nLCdQcicsJ1NoJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydEaScsJ0jDqycsJ01hJywnTcOrJywnRW4nLCdQcicsJ1NoJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQubW0ueXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3EnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3EnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgU2VyYmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgRGVqYW4gRGltacSHLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snc3ItU1InXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydKYW51YXInLCdGZWJydWFyJywnTWFydCcsJ0FwcmlsJywnTWFqJywnSnVuJyxcclxuXHRcdCdKdWwnLCdBdmd1c3QnLCdTZXB0ZW1iYXInLCdPa3RvYmFyJywnTm92ZW1iYXInLCdEZWNlbWJhciddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01haicsJ0p1bicsJ0p1bCcsJ0F2ZycsJ1NlcCcsJ09rdCcsJ05vdicsJ0RlYyddLFxyXG5cdFx0ZGF5TmFtZXM6IFsnTmVkZWxqYScsJ1BvbmVkZWxqYWsnLCdVdG9yYWsnLCdTcmVkYScsJ8SMZXR2cnRhaycsJ1BldGFrJywnU3Vib3RhJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ05lZCcsJ1BvbicsJ1V0bycsJ1NyZScsJ8SMZXQnLCdQZXQnLCdTdWInXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ05lJywnUG8nLCdVdCcsJ1NyJywnxIxlJywnUGUnLCdTdSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NyLVNSJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NyLVNSJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFNlcmJpYW4gbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IERlamFuIERpbWnEhy4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3NyJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn0IjQsNC90YPQsNGAJywn0KTQtdCx0YDRg9Cw0YAnLCfQnNCw0YDRgicsJ9CQ0L/RgNC40LsnLCfQnNCw0ZgnLCfQiNGD0L0nLFxyXG5cdFx0J9CI0YPQuycsJ9CQ0LLQs9GD0YHRgicsJ9Ch0LXQv9GC0LXQvNCx0LDRgCcsJ9Ce0LrRgtC+0LHQsNGAJywn0J3QvtCy0LXQvNCx0LDRgCcsJ9CU0LXRhtC10LzQsdCw0YAnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfQiNCw0L0nLCfQpNC10LEnLCfQnNCw0YAnLCfQkNC/0YAnLCfQnNCw0ZgnLCfQiNGD0L0nLCfQiNGD0LsnLCfQkNCy0LMnLCfQodC10L8nLCfQntC60YInLCfQndC+0LInLCfQlNC10YYnXSxcclxuXHRcdGRheU5hbWVzOiBbJ9Cd0LXQtNC10ZnQsCcsJ9Cf0L7QvdC10LTQtdGZ0LDQuicsJ9Cj0YLQvtGA0LDQuicsJ9Ch0YDQtdC00LAnLCfQp9C10YLQstGA0YLQsNC6Jywn0J/QtdGC0LDQuicsJ9Ch0YPQsdC+0YLQsCddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfQndC10LQnLCfQn9C+0L0nLCfQo9GC0L4nLCfQodGA0LUnLCfQp9C10YInLCfQn9C10YInLCfQodGD0LEnXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ9Cd0LUnLCfQn9C+Jywn0KPRgicsJ9Ch0YAnLCfQp9C1Jywn0J/QtScsJ9Ch0YMnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzciddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzciddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTd2VkaXNoIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBBbmRlcnMgRWtkYWhsIChhbmRlcnNAbm9tYWRpei5zZSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzdiddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcbiAgICAgICAgbW9udGhOYW1lczogWydKYW51YXJpJywnRmVicnVhcmknLCdNYXJzJywnQXByaWwnLCdNYWonLCdKdW5pJyxcclxuICAgICAgICAnSnVsaScsJ0F1Z3VzdGknLCdTZXB0ZW1iZXInLCdPa3RvYmVyJywnTm92ZW1iZXInLCdEZWNlbWJlciddLFxyXG4gICAgICAgIG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYWonLCdKdW4nLFxyXG4gICAgICAgICdKdWwnLCdBdWcnLCdTZXAnLCdPa3QnLCdOb3YnLCdEZWMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ1PDtm5kYWcnLCdNw6VuZGFnJywnVGlzZGFnJywnT25zZGFnJywnVG9yc2RhZycsJ0ZyZWRhZycsJ0zDtnJkYWcnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsnU8O2bicsJ03DpW4nLCdUaXMnLCdPbnMnLCdUb3InLCdGcmUnLCdMw7ZyJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWydTw7YnLCdNw6UnLCdUaScsJ09uJywnVG8nLCdGcicsJ0zDtiddLFxyXG4gICAgICAgIGRhdGVGb3JtYXQ6ICd5eXl5LW1tLWRkJyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzdiddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydzdiddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBUYW1pbCAoVVRGLTgpIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBTIEEgU3VyZXNoa3VtYXIgKHNhc2t1bWFyQGxpdmUuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3RhJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn4K6k4K+IJywn4K6u4K6+4K6a4K6/Jywn4K6q4K6Z4K+N4K6V4K+B4K6p4K6/Jywn4K6a4K6/4K6k4K+N4K6k4K6/4K6w4K+IJywn4K614K+I4K6V4K6+4K6a4K6/Jywn4K6G4K6p4K6/JyxcclxuXHRcdCfgrobgrp/grr8nLCfgrobgrrXgrqPgrr8nLCfgrqrgr4HgrrDgrp/gr43grp/grr7grprgrr8nLCfgrpDgrqrgr43grqrgrprgrr8nLCfgrpXgrr7grrDgr43grqTgr43grqTgrr/grpXgr4gnLCfgrq7grr7grrDgr43grpXgrrTgrr8nXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfgrqTgr4gnLCfgrq7grr7grprgrr8nLCfgrqrgrpngr40nLCfgrprgrr/grqTgr40nLCfgrrXgr4jgrpXgrr4nLCfgrobgrqngrr8nLFxyXG5cdFx0J+CuhuCun+CuvycsJ+CuhuCutScsJ+CuquCvgeCusCcsJ+CukOCuquCvjScsJ+CuleCuvuCusOCvjScsJ+CuruCuvuCusOCvjSddLFxyXG5cdFx0ZGF5TmFtZXM6IFsn4K6e4K6+4K6v4K6/4K6x4K+N4K6x4K+B4K6V4K+N4K6V4K6/4K604K6u4K+IJywn4K6k4K6/4K6Z4K+N4K6V4K6f4K+N4K6V4K6/4K604K6u4K+IJywn4K6a4K+G4K614K+N4K614K6+4K6v4K+N4K6V4K+N4K6V4K6/4K604K6u4K+IJywn4K6q4K+B4K6k4K6p4K+N4K6V4K6/4K604K6u4K+IJywn4K614K6/4K6v4K6+4K604K6V4K+N4K6V4K6/4K604K6u4K+IJywn4K614K+G4K6z4K+N4K6z4K6/4K6V4K+N4K6V4K6/4K604K6u4K+IJywn4K6a4K6p4K6/4K6V4K+N4K6V4K6/4K604K6u4K+IJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+CunuCuvuCur+Cuv+CuseCvgScsJ+CupOCuv+CumeCvjeCuleCus+CvjScsJ+CumuCvhuCuteCvjeCuteCuvuCur+CvjScsJ+CuquCvgeCupOCuqeCvjScsJ+CuteCuv+Cur+CuvuCutOCuqeCvjScsJ+CuteCvhuCus+CvjeCus+CuvycsJ+CumuCuqeCuvyddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn4K6e4K6+Jywn4K6k4K6/Jywn4K6a4K+GJywn4K6q4K+BJywn4K614K6/Jywn4K614K+GJywn4K6aJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndGEnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndGEnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgVGhhaSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgcGlwbyAocGlwb0BzaXhoZWFkLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd0aCddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ+C4oeC4geC4o+C4suC4hOC4oScsJ+C4geC4uOC4oeC4oOC4suC4nuC4seC4meC4mOC5jCcsJ+C4oeC4teC4meC4suC4hOC4oScsJ+C5gOC4oeC4qeC4suC4ouC4mScsJ+C4nuC4pOC4qeC4oOC4suC4hOC4oScsJ+C4oeC4tOC4luC4uOC4meC4suC4ouC4mScsXHJcblx0XHQn4LiB4Lij4LiB4LiO4Liy4LiE4LihJywn4Liq4Li04LiH4Lir4Liy4LiE4LihJywn4LiB4Lix4LiZ4Lii4Liy4Lii4LiZJywn4LiV4Li44Lil4Liy4LiE4LihJywn4Lie4Lik4Lio4LiI4Li04LiB4Liy4Lii4LiZJywn4LiY4Lix4LiZ4Lin4Liy4LiE4LihJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn4LihLuC4hC4nLCfguIEu4LieLicsJ+C4oeC4tS7guIQuJywn4LmA4LihLuC4oi4nLCfguJ4u4LiELicsJ+C4oeC4tC7guKIuJyxcclxuXHRcdCfguIEu4LiELicsJ+C4qi7guIQuJywn4LiBLuC4oi4nLCfguJUu4LiELicsJ+C4ni7guKIuJywn4LiYLuC4hC4nXSxcclxuXHRcdGRheU5hbWVzOiBbJ+C4reC4suC4l+C4tOC4leC4ouC5jCcsJ+C4iOC4seC4meC4l+C4o+C5jCcsJ+C4reC4seC4h+C4hOC4suC4oycsJ+C4nuC4uOC4mCcsJ+C4nuC4pOC4q+C4seC4quC4muC4lOC4tScsJ+C4qOC4uOC4geC4o+C5jCcsJ+C5gOC4quC4suC4o+C5jCddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfguK3guLIuJywn4LiILicsJ+C4rS4nLCfguJ4uJywn4Lie4LikLicsJ+C4qC4nLCfguKouJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfguK3guLIuJywn4LiILicsJ+C4rS4nLCfguJ4uJywn4Lie4LikLicsJ+C4qC4nLCfguKouJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMCxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndGgnXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndGgnXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgVHVya2lzaCBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgSXp6ZXQgRW1yZSBFcmthbiAoa2FyYUBrYXJhbGFtYWxhci5uZXQpLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndHInXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydPY2FrJywnxZ51YmF0JywnTWFydCcsJ05pc2FuJywnTWF5xLFzJywnSGF6aXJhbicsXHJcblx0XHQnVGVtbXV6JywnQcSfdXN0b3MnLCdFeWzDvGwnLCdFa2ltJywnS2FzxLFtJywnQXJhbMSxayddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ09jYScsJ8WedWInLCdNYXInLCdOaXMnLCdNYXknLCdIYXonLFxyXG5cdFx0J1RlbScsJ0HEn3UnLCdFeWwnLCdFa2knLCdLYXMnLCdBcmEnXSxcclxuXHRcdGRheU5hbWVzOiBbJ1BhemFyJywnUGF6YXJ0ZXNpJywnU2FsxLEnLCfDh2FyxZ9hbWJhJywnUGVyxZ9lbWJlJywnQ3VtYScsJ0N1bWFydGVzaSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydQeicsJ1B0JywnU2EnLCfDh2EnLCdQZScsJ0N1JywnQ3QnXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ1B6JywnUHQnLCdTYScsJ8OHYScsJ1BlJywnQ3UnLCdDdCddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3RyJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3RyJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFRhdGFyIGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSDQmNGA0LXQuiDQpdCw0pfQuNC10LIgKGtoYXppcmVrQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd0dCddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ9CT0YvQvdCy0LDRgCcsJ9Ck0LXQstGA0LDQu9GMJywn0JzQsNGA0YInLCfQkNC/0YDQtdC70YwnLCfQnNCw0LknLCfQmNGO0L3RjCcsXHJcblx0XHQn0JjRjtC70YwnLCfQkNCy0LPRg9GB0YInLCfQodC10L3RgtGP0LHRgNGMJywn0J7QutGC0Y/QsdGA0YwnLCfQndC+0Y/QsdGA0YwnLCfQlNC10LrQsNCx0YDRjCddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ9CT0YvQudC9Jywn0KTQtdCyJywn0JzQsNGAJywn0JDQv9GAJywn0JzQsNC5Jywn0JjRjtC9JyxcclxuXHRcdCfQmNGO0LsnLCfQkNCy0LMnLCfQodC10L0nLCfQntC60YInLCfQndC+0Y8nLCfQlNC10LonXSxcclxuXHRcdGRheU5hbWVzOiBbJ9GP0LrRiNOZ0LzQsdC1Jywn0LTSr9GI05nQvNCx0LUnLCfRgdC40YjTmdC80LHQtScsJ9GH05nRgNGI05nQvNCx0LUnLCfQv9OZ0L3Sl9C10YjTmdC80LHQtScsJ9KX0L7QvNCz0LAnLCfRiNC40LzQsdOZJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9GP0LrRiCcsJ9C00q/RiCcsJ9GB0LjRiCcsJ9GH05nRgCcsJ9C/05nQvScsJ9KX0L7QvCcsJ9GI0LjQvCddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn0K/QuicsJ9CU0q8nLCfQodC4Jywn0KfTmScsJ9Cf05knLCfSltC+Jywn0KjQuCddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLm1tLnl5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3R0J10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3R0J107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFVrcmFpbmlhbiBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTWF4aW0gRHJvZ29iaXRza2l5IChtYXhkYW9AZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3VrJ10gPSB7XHJcblx0XHRuYW1lOiAnR3JlZ29yaWFuJyxcclxuXHRcdGVwb2NoczogWydCQ0UnLCAnQ0UnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn0KHRltGH0LXQvdGMJywn0JvRjtGC0LjQuScsJ9CR0LXRgNC10LfQtdC90YwnLCfQmtCy0ZbRgtC10L3RjCcsJ9Ci0YDQsNCy0LXQvdGMJywn0KfQtdGA0LLQtdC90YwnLFxyXG5cdFx0J9Cb0LjQv9C10L3RjCcsJ9Ch0LXRgNC/0LXQvdGMJywn0JLQtdGA0LXRgdC10L3RjCcsJ9CW0L7QstGC0LXQvdGMJywn0JvQuNGB0YLQvtC/0LDQtCcsJ9CT0YDRg9C00LXQvdGMJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn0KHRltGHJywn0JvRjtGCJywn0JHQtdGAJywn0JrQstGWJywn0KLRgNCwJywn0KfQtdGAJyxcclxuXHRcdCfQm9C40L8nLCfQodC10YAnLCfQktC10YAnLCfQltC+0LInLCfQm9C40YEnLCfQk9GA0YMnXSxcclxuXHRcdGRheU5hbWVzOiBbJ9C90LXQtNGW0LvRjycsJ9C/0L7QvdC10LTRltC70L7QuicsJ9Cy0ZbQstGC0L7RgNC+0LonLCfRgdC10YDQtdC00LAnLCfRh9C10YLQstC10YAnLCfQv1xcJ9GP0YLQvdC40YbRjycsJ9GB0YPQsdC+0YLQsCddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfQvdC10LQnLCfQv9C90LQnLCfQstGW0LInLCfRgdGA0LQnLCfRh9GC0LInLCfQv9GC0L0nLCfRgdCx0YInXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ9Cd0LQnLCfQn9C9Jywn0JLRgicsJ9Ch0YAnLCfQp9GCJywn0J/RgicsJ9Ch0LEnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd1ayddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd1ayddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBVcmR1IGxvY2FsaXNhdGlvbiBmb3IgR3JlZ29yaWFuL0p1bGlhbiBjYWxlbmRhcnMgZm9yIGpRdWVyeS5cclxuICAgTWFuc29vciBNdW5pYiAtLSBtYW5zb29ybXVuaWJAZ21haWwuY29tIDxodHRwOi8vd3d3Lm1hbnNvb3IuY28ubnIvbWFuc29vci5odG1sPlxyXG4gICBUaGFua3MgdG8gSGFiaWIgQWhtZWQsIE9iYWlkVWxsYWggQW53YXIuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd1ciddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ9is2YbZiNix24wnLCfZgdix2YjYsduMJywn2YXYp9ix2oYnLCfYp9m+2LHbjNmEJywn2YXYptuMJywn2KzZiNmGJyxcclxuXHRcdCfYrNmI2YTYp9im24wnLCfYp9qv2LPYqicsJ9iz2KrZhdio2LEnLCfYp9qp2KrZiNio2LEnLCfZhtmI2YXYqNixJywn2K/Ys9mF2KjYsSddLFxyXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJzEnLCcyJywnMycsJzQnLCc1JywnNicsXHJcblx0XHQnNycsJzgnLCc5JywnMTAnLCcxMScsJzEyJ10sXHJcblx0XHRkYXlOYW1lczogWyfYp9iq2YjYp9ixJywn2b7ZitixJywn2YXZhtqv2YQnLCfYqNiv2r4nLCfYrNmF2LnYsdin2KonLCfYrNmF2LnbgScsJ9uB2YHYqtuBJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9in2KrZiNin2LEnLCfZvtmK2LEnLCfZhdmG2q/ZhCcsJ9io2K/avicsJ9is2YXYudix2KfYqicsJ9is2YXYuduBJywn24HZgdiq24EnXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ9in2KrZiNin2LEnLCfZvtmK2LEnLCfZhdmG2q/ZhCcsJ9io2K/avicsJ9is2YXYudix2KfYqicsJ9is2YXYuduBJywn24HZgdiq24EnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogdHJ1ZVxyXG5cdH07XHJcblx0aWYgKCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4pIHtcclxuXHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qdWxpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndXInXSA9XHJcblx0XHRcdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndXInXTtcclxuXHR9XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgVmlldG5hbWVzZSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFRyYW5zbGF0ZWQgYnkgTGUgVGhhbmggSHV5IChsdGhhbmhodXlAY2l0LmN0dS5lZHUudm4pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5ncmVnb3JpYW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1sndmknXSA9IHtcclxuXHRcdG5hbWU6ICdHcmVnb3JpYW4nLFxyXG5cdFx0ZXBvY2hzOiBbJ0JDRScsICdDRSddLFxyXG5cdFx0bW9udGhOYW1lczogWydUaMOhbmcgTeG7mXQnLCAnVGjDoW5nIEhhaScsICdUaMOhbmcgQmEnLCAnVGjDoW5nIFTGsCcsICdUaMOhbmcgTsSDbScsICdUaMOhbmcgU8OhdScsXHJcblx0XHQnVGjDoW5nIELhuqN5JywgJ1Row6FuZyBUw6FtJywgJ1Row6FuZyBDaMOtbicsICdUaMOhbmcgTcaw4budaScsICdUaMOhbmcgTcaw4budaSBN4buZdCcsICdUaMOhbmcgTcaw4budaSBIYWknXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWydUaMOhbmcgMScsICdUaMOhbmcgMicsICdUaMOhbmcgMycsICdUaMOhbmcgNCcsICdUaMOhbmcgNScsICdUaMOhbmcgNicsXHJcblx0XHQnVGjDoW5nIDcnLCAnVGjDoW5nIDgnLCAnVGjDoW5nIDknLCAnVGjDoW5nIDEwJywgJ1Row6FuZyAxMScsICdUaMOhbmcgMTInXSxcclxuXHRcdGRheU5hbWVzOiBbJ0No4bunIE5o4bqtdCcsICdUaOG7qSBIYWknLCAnVGjhu6kgQmEnLCAnVGjhu6kgVMawJywgJ1Ro4bupIE7Eg20nLCAnVGjhu6kgU8OhdScsICdUaOG7qSBC4bqjeSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWydDTicsICdUMicsICdUMycsICdUNCcsICdUNScsICdUNicsICdUNyddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsnQ04nLCAnVDInLCAnVDMnLCAnVDQnLCAnVDUnLCAnVDYnLCAnVDcnXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdGZpcnN0RGF5OiAwLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHRpZiAoJC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbikge1xyXG5cdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmp1bGlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd2aSddID1cclxuXHRcdFx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd2aSddO1xyXG5cdH1cclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTaW1wbGlmaWVkIENoaW5lc2UgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IENsb3VkcmVhbSAoY2xvdWRyZWFtQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd6aC1DTiddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ+S4gOaciCcsJ+S6jOaciCcsJ+S4ieaciCcsJ+Wbm+aciCcsJ+S6lOaciCcsJ+WFreaciCcsXHJcblx0XHQn5LiD5pyIJywn5YWr5pyIJywn5Lmd5pyIJywn5Y2B5pyIJywn5Y2B5LiA5pyIJywn5Y2B5LqM5pyIJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn5LiAJywn5LqMJywn5LiJJywn5ZubJywn5LqUJywn5YWtJyxcclxuXHRcdCfkuIMnLCflhasnLCfkuZ0nLCfljYEnLCfljYHkuIAnLCfljYHkuownXSxcclxuXHRcdGRheU5hbWVzOiBbJ+aYn+acn+aXpScsJ+aYn+acn+S4gCcsJ+aYn+acn+S6jCcsJ+aYn+acn+S4iScsJ+aYn+acn+WbmycsJ+aYn+acn+S6lCcsJ+aYn+acn+WFrSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyflkajml6UnLCflkajkuIAnLCflkajkuownLCflkajkuIknLCflkajlm5snLCflkajkupQnLCflkajlha0nXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ+aXpScsJ+S4gCcsJ+S6jCcsJ+S4iScsJ+WbmycsJ+S6lCcsJ+WFrSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXktbW0tZGQnLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3poLUNOJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3poLUNOJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEhvbmcgS29uZyAgQ2hpbmVzZSBsb2NhbGlzYXRpb24gZm9yIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgU0NDWSAoc2FtdWVsY3ljaGFuQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd6aC1ISyddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ+S4gOaciCcsJ+S6jOaciCcsJ+S4ieaciCcsJ+Wbm+aciCcsJ+S6lOaciCcsJ+WFreaciCcsXHJcblx0XHQn5LiD5pyIJywn5YWr5pyIJywn5Lmd5pyIJywn5Y2B5pyIJywn5Y2B5LiA5pyIJywn5Y2B5LqM5pyIJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn5LiAJywn5LqMJywn5LiJJywn5ZubJywn5LqUJywn5YWtJyxcclxuXHRcdCfkuIMnLCflhasnLCfkuZ0nLCfljYEnLCfljYHkuIAnLCfljYHkuownXSxcclxuXHRcdGRheU5hbWVzOiBbJ+aYn+acn+aXpScsJ+aYn+acn+S4gCcsJ+aYn+acn+S6jCcsJ+aYn+acn+S4iScsJ+aYn+acn+WbmycsJ+aYn+acn+S6lCcsJ+aYn+acn+WFrSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyflkajml6UnLCflkajkuIAnLCflkajkuownLCflkajkuIknLCflkajlm5snLCflkajkupQnLCflkajlha0nXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ+aXpScsJ+S4gCcsJ+S6jCcsJ+S4iScsJ+WbmycsJ+S6lCcsJ+WFrSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ2RkLW1tLXl5eXknLFxyXG5cdFx0Zmlyc3REYXk6IDAsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3poLUhLJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3poLUhLJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFRyYWRpdGlvbmFsIENoaW5lc2UgbG9jYWxpc2F0aW9uIGZvciBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycyBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IFJlc3NvbCAocmVzc29sQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmdyZWdvcmlhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd6aC1UVyddID0ge1xyXG5cdFx0bmFtZTogJ0dyZWdvcmlhbicsXHJcblx0XHRlcG9jaHM6IFsnQkNFJywgJ0NFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ+S4gOaciCcsJ+S6jOaciCcsJ+S4ieaciCcsJ+Wbm+aciCcsJ+S6lOaciCcsJ+WFreaciCcsXHJcblx0XHQn5LiD5pyIJywn5YWr5pyIJywn5Lmd5pyIJywn5Y2B5pyIJywn5Y2B5LiA5pyIJywn5Y2B5LqM5pyIJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn5LiAJywn5LqMJywn5LiJJywn5ZubJywn5LqUJywn5YWtJyxcclxuXHRcdCfkuIMnLCflhasnLCfkuZ0nLCfljYEnLCfljYHkuIAnLCfljYHkuownXSxcclxuXHRcdGRheU5hbWVzOiBbJ+aYn+acn+aXpScsJ+aYn+acn+S4gCcsJ+aYn+acn+S6jCcsJ+aYn+acn+S4iScsJ+aYn+acn+WbmycsJ+aYn+acn+S6lCcsJ+aYn+acn+WFrSddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyflkajml6UnLCflkajkuIAnLCflkajkuownLCflkajkuIknLCflkajlm5snLCflkajkupQnLCflkajlha0nXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ+aXpScsJ+S4gCcsJ+S6jCcsJ+S4iScsJ+WbmycsJ+S6lCcsJ+WFrSddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXkvbW0vZGQnLFxyXG5cdFx0Zmlyc3REYXk6IDEsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdGlmICgkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuKSB7XHJcblx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuanVsaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3poLVRXJ10gPVxyXG5cdFx0XHQkLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3poLVRXJ107XHJcblx0fVxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.mayan.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.mayan.js index 560cd8ef1c6..601086e50b7 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.mayan.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.mayan.js @@ -283,4 +283,4 @@ $.calendars.calendars.mayan = MayanCalendar; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMubWF5YW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy5tYXlhbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIE1heWFuIGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxuICAgV3JpdHRlbiBieSBLZWl0aCBXb29kIChrYndvb2R7YXR9aWluZXQuY29tLmF1KSBBdWd1c3QgMjAwOS5cbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cblxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxuXG5cdC8qKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgTWF5YW4gTG9uZyBDb3VudCBjYWxlbmRhci5cblx0XHRTZWUgYWxzbyA8YSBocmVmPVwiaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYXlhbl9jYWxlbmRhclwiPmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWF5YW5fY2FsZW5kYXI8L2E+LlxuXHRcdEBjbGFzcyBNYXlhbkNhbGVuZGFyXG5cdFx0QHBhcmFtIFtsYW5ndWFnZT0nJ10ge3N0cmluZ30gVGhlIGxhbmd1YWdlIGNvZGUgKGRlZmF1bHQgRW5nbGlzaCkgZm9yIGxvY2FsaXNhdGlvbi4gKi9cblx0ZnVuY3Rpb24gTWF5YW5DYWxlbmRhcihsYW5ndWFnZSkge1xuXHRcdHRoaXMubG9jYWwgPSB0aGlzLnJlZ2lvbmFsT3B0aW9uc1tsYW5ndWFnZSB8fCAnJ10gfHwgdGhpcy5yZWdpb25hbE9wdGlvbnNbJyddO1xuXHR9XG5cblx0TWF5YW5DYWxlbmRhci5wcm90b3R5cGUgPSBuZXcgJC5jYWxlbmRhcnMuYmFzZUNhbGVuZGFyO1xuXG5cdCQuZXh0ZW5kKE1heWFuQ2FsZW5kYXIucHJvdG90eXBlLCB7XG5cdFx0LyoqIFRoZSBjYWxlbmRhciBuYW1lLlxuXHRcdFx0QG1lbWJlcm9mIE1heWFuQ2FsZW5kYXIgKi9cblx0XHRuYW1lOiAnTWF5YW4nLFxuXHRcdC8qKiBKdWxpYW4gZGF0ZSBvZiBzdGFydCBvZiBNYXlhbiBlcG9jaDogMTEgQXVndXN0IDMxMTQgQkNFLlxuXHRcdFx0QG1lbWJlcm9mIE1heWFuQ2FsZW5kYXIgKi9cblx0XHRqZEVwb2NoOiA1ODQyODIuNSxcblx0XHQvKiogPGNvZGU+dHJ1ZTwvY29kZT4gaWYgaGFzIGEgeWVhciB6ZXJvLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QG1lbWJlcm9mIE1heWFuQ2FsZW5kYXIgKi9cblx0XHRoYXNZZWFyWmVybzogdHJ1ZSxcblx0XHQvKiogVGhlIG1pbmltdW0gbW9udGggbnVtYmVyLlxuXHRcdFx0QG1lbWJlcm9mIE1heWFuQ2FsZW5kYXIgKi9cblx0XHRtaW5Nb250aDogMCxcblx0XHQvKiogVGhlIGZpcnN0IG1vbnRoIGluIHRoZSB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIE1heWFuQ2FsZW5kYXIgKi9cblx0XHRmaXJzdE1vbnRoOiAwLFxuXHRcdC8qKiBUaGUgbWluaW11bSBkYXkgbnVtYmVyLlxuXHRcdFx0QG1lbWJlcm9mIE1heWFuQ2FsZW5kYXIgKi9cblx0XHRtaW5EYXk6IDAsXG5cblx0XHQvKiogTG9jYWxpc2F0aW9ucyBmb3IgdGhlIHBsdWdpbi5cblx0XHRcdEVudHJpZXMgYXJlIG9iamVjdHMgaW5kZXhlZCBieSB0aGUgbGFuZ3VhZ2UgY29kZSAoJycgYmVpbmcgdGhlIGRlZmF1bHQgVVMvRW5nbGlzaCkuXG5cdFx0XHRFYWNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLlxuXHRcdFx0QG1lbWJlcm9mIE1heWFuQ2FsZW5kYXJcblx0XHRcdEBwcm9wZXJ0eSBuYW1lIHtzdHJpbmd9IFRoZSBjYWxlbmRhciBuYW1lLlxuXHRcdFx0QHByb3BlcnR5IGVwb2NocyB7c3RyaW5nW119IFRoZSBlcG9jaCBuYW1lcy5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNNaW4ge3N0cmluZ1tdfSBUaGUgbWluaW1hbCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cblx0XHRcdEBwcm9wZXJ0eSBkYXRlRm9ybWF0IHtzdHJpbmd9IFRoZSBkYXRlIGZvcm1hdCBmb3IgdGhpcyBjYWxlbmRhci5cblx0XHRcdFx0XHRTZWUgdGhlIG9wdGlvbnMgb24gPGEgaHJlZj1cIkJhc2VDYWxlbmRhci5odG1sI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4gZm9yIGRldGFpbHMuXG5cdFx0XHRAcHJvcGVydHkgZmlyc3REYXkge251bWJlcn0gVGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBzdGFydGluZyBhdCAwLlxuXHRcdFx0QHByb3BlcnR5IGlzUlRMIHtudW1iZXJ9IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgbG9jYWxpc2F0aW9uIHJlYWRzIHJpZ2h0LXRvLWxlZnQuXG5cdFx0XHRAcHJvcGVydHkgaGFhYk1vbnRocyB7c3RyaW5nW119IFRoZSBuYW1lcyBvZiB0aGUgSGFhYiBtb250aHMuXG5cdFx0XHRAcHJvcGVydHkgdHpvbGtpbk1vbnRocyB7c3RyaW5nW119IFRoZSBuYW1lcyBvZiB0aGUgVHpvbGtpbiBtb250aHMuICovXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7IC8vIExvY2FsaXNhdGlvbnNcblx0XHRcdCcnOiB7XG5cdFx0XHRcdG5hbWU6ICdNYXlhbicsXG5cdFx0XHRcdGVwb2NoczogWycnLCAnJ10sXG5cdFx0XHRcdG1vbnRoTmFtZXM6IFsnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsXG5cdFx0XHRcdCcxMCcsICcxMScsICcxMicsICcxMycsICcxNCcsICcxNScsICcxNicsICcxNyddLFxuXHRcdFx0XHRtb250aE5hbWVzU2hvcnQ6IFsnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsXG5cdFx0XHRcdCcxMCcsICcxMScsICcxMicsICcxMycsICcxNCcsICcxNScsICcxNicsICcxNyddLFxuXHRcdFx0XHRkYXlOYW1lczogWycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5Jyxcblx0XHRcdFx0JzEwJywgJzExJywgJzEyJywgJzEzJywgJzE0JywgJzE1JywgJzE2JywgJzE3JywgJzE4JywgJzE5J10sXG5cdFx0XHRcdGRheU5hbWVzU2hvcnQ6IFsnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsXG5cdFx0XHRcdCcxMCcsICcxMScsICcxMicsICcxMycsICcxNCcsICcxNScsICcxNicsICcxNycsICcxOCcsICcxOSddLFxuXHRcdFx0XHRkYXlOYW1lc01pbjogWycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5Jyxcblx0XHRcdFx0JzEwJywgJzExJywgJzEyJywgJzEzJywgJzE0JywgJzE1JywgJzE2JywgJzE3JywgJzE4JywgJzE5J10sXG5cdFx0XHRcdGRhdGVGb3JtYXQ6ICdZWVlZLm0uZCcsXG5cdFx0XHRcdGZpcnN0RGF5OiAwLFxuXHRcdFx0XHRpc1JUTDogZmFsc2UsXG5cdFx0XHRcdGhhYWJNb250aHM6IFsnUG9wJywgJ1VvJywgJ1ppcCcsICdab3R6JywgJ1R6ZWMnLCAnWHVsJywgJ1lheGtpbicsICdNb2wnLCAnQ2hlbicsICdZYXgnLFxuXHRcdFx0XHQnWmFjJywgJ0NlaCcsICdNYWMnLCAnS2Fua2luJywgJ011YW4nLCAnUGF4JywgJ0theWFiJywgJ0N1bWt1JywgJ1VheWViJ10sXG5cdFx0XHRcdHR6b2xraW5Nb250aHM6IFsnSW1peCcsICdJaycsICdBa2JhbCcsICdLYW4nLCAnQ2hpY2NoYW4nLCAnQ2ltaScsICdNYW5paycsICdMYW1hdCcsICdNdWx1YycsICdPYycsXG5cdFx0XHRcdCdDaHVlbicsICdFYicsICdCZW4nLCAnSXgnLCAnTWVuJywgJ0NpYicsICdDYWJhbicsICdFdHpuYWInLCAnQ2F1YWMnLCAnQWhhdSddXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgaW4gYSBsZWFwIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgTWF5YW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBpcyBhIGxlYXAgeWVhciwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0bGVhcFllYXI6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHRoaXMuX3ZhbGlkYXRlKHllYXIsIHRoaXMubWluTW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhcik7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblxuXHRcdC8qKiBGb3JtYXQgdGhlIHllYXIsIGlmIG5vdCBhIHNpbXBsZSBzZXF1ZW50aWFsIG51bWJlci5cblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBmb3JtYXQgb3IgdGhlIHllYXIgdG8gZm9ybWF0LlxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHllYXIuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdGZvcm1hdFllYXI6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyKTtcblx0XHRcdHllYXIgPSBkYXRlLnllYXIoKTtcblx0XHRcdHZhciBiYWt0dW4gPSBNYXRoLmZsb29yKHllYXIgLyA0MDApO1xuXHRcdFx0eWVhciA9IHllYXIgJSA0MDA7XG5cdFx0XHR5ZWFyICs9ICh5ZWFyIDwgMCA/IDQwMCA6IDApO1xuXHRcdFx0dmFyIGthdHVuID0gTWF0aC5mbG9vcih5ZWFyIC8gMjApO1xuXHRcdFx0cmV0dXJuIGJha3R1biArICcuJyArIGthdHVuICsgJy4nICsgKHllYXIgJSAyMCk7XG5cdFx0fSxcblxuXHRcdC8qKiBDb252ZXJ0IGZyb20gdGhlIGZvcm1hdHRlZCB5ZWFyIGJhY2sgdG8gYSBzaW5nbGUgbnVtYmVyLlxuXHRcdFx0QG1lbWJlcm9mIE1heWFuQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFycyB7c3RyaW5nfSBUaGUgeWVhciBhcyBuLm4ubi5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIHNlcXVlbnRpYWwgeWVhci5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB2YWx1ZSBpcyBzdXBwbGllZC4gKi9cblx0XHRmb3JZZWFyOiBmdW5jdGlvbih5ZWFycykge1xuXHRcdFx0eWVhcnMgPSB5ZWFycy5zcGxpdCgnLicpO1xuXHRcdFx0aWYgKHllYXJzLmxlbmd0aCA8IDMpIHtcblx0XHRcdFx0dGhyb3cgJ0ludmFsaWQgTWF5YW4geWVhcic7XG5cdFx0XHR9XG5cdFx0XHR2YXIgeWVhciA9IDA7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHllYXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciB5ID0gcGFyc2VJbnQoeWVhcnNbaV0sIDEwKTtcblx0XHRcdFx0aWYgKE1hdGguYWJzKHkpID4gMTkgfHwgKGkgPiAwICYmIHkgPCAwKSkge1xuXHRcdFx0XHRcdHRocm93ICdJbnZhbGlkIE1heWFuIHllYXInO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHllYXIgPSB5ZWFyICogMjAgKyB5O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHllYXI7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIG1vbnRocyBpbiBhIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgTWF5YW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIG1vbnRocy5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0bW9udGhzSW5ZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XG5cdFx0XHR0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIpO1xuXHRcdFx0cmV0dXJuIDE4O1xuXHRcdH0sXG5cblx0XHQvKiogRGV0ZXJtaW5lIHRoZSB3ZWVrIG9mIHRoZSB5ZWFyIGZvciBhIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgTWF5YW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgd2VlayBvZiB0aGUgeWVhci5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0d2Vla09mWWVhcjogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUpO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIE1heWFuQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRkYXlzSW5ZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XG5cdFx0XHR0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIpO1xuXHRcdFx0cmV0dXJuIDM2MDtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBhIG1vbnRoLlxuXHRcdFx0QG1lbWJlcm9mIE1heWFuQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgb2YgdGhlIG1vbnRoLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBtb250aC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBtb250aC95ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0ZGF5c0luTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XG5cdFx0XHR0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRNb250aCk7XG5cdFx0XHRyZXR1cm4gMjA7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSB3ZWVrLlxuXHRcdFx0QG1lbWJlcm9mIE1heWFuQ2FsZW5kYXJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzLiAqL1xuXHRcdGRheXNJbldlZWs6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIDU7IC8vIEp1c3QgZm9yIGZvcm1hdHRpbmdcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBkYXkgb2YgdGhlIHdlZWsgZm9yIGEgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBkYXkgb2YgdGhlIHdlZWs6IDAgdG8gbnVtYmVyIG9mIGRheXMgLSAxLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRkYXlPZldlZWs6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUpO1xuXHRcdFx0cmV0dXJuIGRhdGUuZGF5KCk7XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgYSB3ZWVrIGRheS5cblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBhIHdlZWsgZGF5LCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHR3ZWVrRGF5OiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHR0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgZGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBkYXRlIC0gSGFhYiBhbmQgVHpvbGtpbiBlcXVpdmFsZW50cy5cblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gLSBjb250ZW50cyBkZXBlbmRzIG9uIGNhbGVuZGFyLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRleHRyYUluZm86IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUpO1xuXHRcdFx0dmFyIGpkID0gZGF0ZS50b0pEKCk7XG5cdFx0XHR2YXIgaGFhYiA9IHRoaXMuX3RvSGFhYihqZCk7XG5cdFx0XHR2YXIgdHpvbGtpbiA9IHRoaXMuX3RvVHpvbGtpbihqZCk7XG5cdFx0XHRyZXR1cm4ge2hhYWJNb250aE5hbWU6IHRoaXMubG9jYWwuaGFhYk1vbnRoc1toYWFiWzBdIC0gMV0sXG5cdFx0XHRcdGhhYWJNb250aDogaGFhYlswXSwgaGFhYkRheTogaGFhYlsxXSxcblx0XHRcdFx0dHpvbGtpbkRheU5hbWU6IHRoaXMubG9jYWwudHpvbGtpbk1vbnRoc1t0em9sa2luWzBdIC0gMV0sXG5cdFx0XHRcdHR6b2xraW5EYXk6IHR6b2xraW5bMF0sIHR6b2xraW5UcmVjZW5hOiB0em9sa2luWzFdfTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIEhhYWIgZGF0ZSBmcm9tIGEgSnVsaWFuIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgTWF5YW5DYWxlbmRhclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBqZCAge251bWJlcn0gVGhlIEp1bGlhbiBkYXRlLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyW119IENvcnJlc3BvbmRpbmcgSGFhYiBtb250aCBhbmQgZGF5LiAqL1xuXHRcdF90b0hhYWI6IGZ1bmN0aW9uKGpkKSB7XG5cdFx0XHRqZCAtPSB0aGlzLmpkRXBvY2g7XG5cdFx0XHR2YXIgZGF5ID0gbW9kKGpkICsgOCArICgoMTggLSAxKSAqIDIwKSwgMzY1KTtcblx0XHRcdHJldHVybiBbTWF0aC5mbG9vcihkYXkgLyAyMCkgKyAxLCBtb2QoZGF5LCAyMCldO1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgVHpvbGtpbiBkYXRlIGZyb20gYSBKdWxpYW4gZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGpkIHtudW1iZXJ9IFRoZSBKdWxpYW4gZGF0ZS5cblx0XHRcdEByZXR1cm4ge251bWJlcltdfSBDb3JyZXNwb25kaW5nIFR6b2xraW4gZGF5IGFuZCB0cmVjZW5hLiAqL1xuXHRcdF90b1R6b2xraW46IGZ1bmN0aW9uKGpkKSB7XG5cdFx0XHRqZCAtPSB0aGlzLmpkRXBvY2g7XG5cdFx0XHRyZXR1cm4gW2Ftb2QoamQgKyAyMCwgMjApLCBhbW9kKGpkICsgNCwgMTMpXTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBKdWxpYW4gZGF0ZSBlcXVpdmFsZW50IGZvciB0aGlzIGRhdGUsXG5cdFx0XHRpLmUuIGRheXMgc2luY2UgSmFudWFyeSAxLCA0NzEzIEJDRSBHcmVlbndpY2ggbm9vbi5cblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb252ZXJ0IG9yIHRoZSB5ZWFyIHRvIGNvbnZlcnQuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gY29udmVydC5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGNvbnZlcnQuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBlcXVpdmFsZW50IEp1bGlhbiBkYXRlLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHR0b0pEOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlKTtcblx0XHRcdHJldHVybiBkYXRlLmRheSgpICsgKGRhdGUubW9udGgoKSAqIDIwKSArIChkYXRlLnllYXIoKSAqIDM2MCkgKyB0aGlzLmpkRXBvY2g7XG5cdFx0fSxcblxuXHRcdC8qKiBDcmVhdGUgYSBuZXcgZGF0ZSBmcm9tIGEgSnVsaWFuIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgTWF5YW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIGpkIHtudW1iZXJ9IFRoZSBKdWxpYW4gZGF0ZSB0byBjb252ZXJ0LlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXG5cdFx0ZnJvbUpEOiBmdW5jdGlvbihqZCkge1xuXHRcdFx0amQgPSBNYXRoLmZsb29yKGpkKSArIDAuNSAtIHRoaXMuamRFcG9jaDtcblx0XHRcdHZhciB5ZWFyID0gTWF0aC5mbG9vcihqZCAvIDM2MCk7XG5cdFx0XHRqZCA9IGpkICUgMzYwO1xuXHRcdFx0amQgKz0gKGpkIDwgMCA/IDM2MCA6IDApO1xuXHRcdFx0dmFyIG1vbnRoID0gTWF0aC5mbG9vcihqZCAvIDIwKTtcblx0XHRcdHZhciBkYXkgPSBqZCAlIDIwO1xuXHRcdFx0cmV0dXJuIHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIE1vZHVsdXMgZnVuY3Rpb24gd2hpY2ggd29ya3MgZm9yIG5vbi1pbnRlZ2Vycy5cblx0ZnVuY3Rpb24gbW9kKGEsIGIpIHtcblx0XHRyZXR1cm4gYSAtIChiICogTWF0aC5mbG9vcihhIC8gYikpO1xuXHR9XG5cblx0Ly8gTW9kdWx1cyBmdW5jdGlvbiB3aGljaCByZXR1cm5zIG51bWVyYXRvciBpZiBtb2R1bHVzIGlzIHplcm8uXG5cdGZ1bmN0aW9uIGFtb2QoYSwgYikge1xuXHRcdHJldHVybiBtb2QoYSAtIDEsIGIpICsgMTtcblx0fVxuXG5cdC8vIE1heWFuIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5tYXlhbiA9IE1heWFuQ2FsZW5kYXI7XG5cbn0pKGpRdWVyeSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMubWF5YW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy5tYXlhbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgTWF5YW4gY2FsZW5kYXIgZm9yIGpRdWVyeSB2Mi4wLjEuXHJcbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgQXVndXN0IDIwMDkuXHJcbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXHJcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xyXG5cclxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxyXG5cclxuXHQvKiogSW1wbGVtZW50YXRpb24gb2YgdGhlIE1heWFuIExvbmcgQ291bnQgY2FsZW5kYXIuXHJcblx0XHRTZWUgYWxzbyA8YSBocmVmPVwiaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYXlhbl9jYWxlbmRhclwiPmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWF5YW5fY2FsZW5kYXI8L2E+LlxyXG5cdFx0QGNsYXNzIE1heWFuQ2FsZW5kYXJcclxuXHRcdEBwYXJhbSBbbGFuZ3VhZ2U9JyddIHtzdHJpbmd9IFRoZSBsYW5ndWFnZSBjb2RlIChkZWZhdWx0IEVuZ2xpc2gpIGZvciBsb2NhbGlzYXRpb24uICovXHJcblx0ZnVuY3Rpb24gTWF5YW5DYWxlbmRhcihsYW5ndWFnZSkge1xyXG5cdFx0dGhpcy5sb2NhbCA9IHRoaXMucmVnaW9uYWxPcHRpb25zW2xhbmd1YWdlIHx8ICcnXSB8fCB0aGlzLnJlZ2lvbmFsT3B0aW9uc1snJ107XHJcblx0fVxyXG5cclxuXHRNYXlhbkNhbGVuZGFyLnByb3RvdHlwZSA9IG5ldyAkLmNhbGVuZGFycy5iYXNlQ2FsZW5kYXI7XHJcblxyXG5cdCQuZXh0ZW5kKE1heWFuQ2FsZW5kYXIucHJvdG90eXBlLCB7XHJcblx0XHQvKiogVGhlIGNhbGVuZGFyIG5hbWUuXHJcblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyICovXHJcblx0XHRuYW1lOiAnTWF5YW4nLFxyXG5cdFx0LyoqIEp1bGlhbiBkYXRlIG9mIHN0YXJ0IG9mIE1heWFuIGVwb2NoOiAxMSBBdWd1c3QgMzExNCBCQ0UuXHJcblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyICovXHJcblx0XHRqZEVwb2NoOiA1ODQyODIuNSxcclxuXHRcdC8qKiA8Y29kZT50cnVlPC9jb2RlPiBpZiBoYXMgYSB5ZWFyIHplcm8sIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXHJcblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyICovXHJcblx0XHRoYXNZZWFyWmVybzogdHJ1ZSxcclxuXHRcdC8qKiBUaGUgbWluaW11bSBtb250aCBudW1iZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyICovXHJcblx0XHRtaW5Nb250aDogMCxcclxuXHRcdC8qKiBUaGUgZmlyc3QgbW9udGggaW4gdGhlIHllYXIuXHJcblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyICovXHJcblx0XHRmaXJzdE1vbnRoOiAwLFxyXG5cdFx0LyoqIFRoZSBtaW5pbXVtIGRheSBudW1iZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyICovXHJcblx0XHRtaW5EYXk6IDAsXHJcblxyXG5cdFx0LyoqIExvY2FsaXNhdGlvbnMgZm9yIHRoZSBwbHVnaW4uXHJcblx0XHRcdEVudHJpZXMgYXJlIG9iamVjdHMgaW5kZXhlZCBieSB0aGUgbGFuZ3VhZ2UgY29kZSAoJycgYmVpbmcgdGhlIGRlZmF1bHQgVVMvRW5nbGlzaCkuXHJcblx0XHRcdEVhY2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMuXHJcblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyXHJcblx0XHRcdEBwcm9wZXJ0eSBuYW1lIHtzdHJpbmd9IFRoZSBjYWxlbmRhciBuYW1lLlxyXG5cdFx0XHRAcHJvcGVydHkgZXBvY2hzIHtzdHJpbmdbXX0gVGhlIGVwb2NoIG5hbWVzLlxyXG5cdFx0XHRAcHJvcGVydHkgbW9udGhOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBtb250aHMgb2YgdGhlIHllYXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cclxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lc1Nob3J0IHtzdHJpbmdbXX0gVGhlIHNob3J0IG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNNaW4ge3N0cmluZ1tdfSBUaGUgbWluaW1hbCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cclxuXHRcdFx0QHByb3BlcnR5IGRhdGVGb3JtYXQge3N0cmluZ30gVGhlIGRhdGUgZm9ybWF0IGZvciB0aGlzIGNhbGVuZGFyLlxyXG5cdFx0XHRcdFx0U2VlIHRoZSBvcHRpb25zIG9uIDxhIGhyZWY9XCJCYXNlQ2FsZW5kYXIuaHRtbCNmb3JtYXREYXRlXCI+PGNvZGU+Zm9ybWF0RGF0ZTwvY29kZT48L2E+IGZvciBkZXRhaWxzLlxyXG5cdFx0XHRAcHJvcGVydHkgZmlyc3REYXkge251bWJlcn0gVGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBzdGFydGluZyBhdCAwLlxyXG5cdFx0XHRAcHJvcGVydHkgaXNSVEwge251bWJlcn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBsb2NhbGlzYXRpb24gcmVhZHMgcmlnaHQtdG8tbGVmdC5cclxuXHRcdFx0QHByb3BlcnR5IGhhYWJNb250aHMge3N0cmluZ1tdfSBUaGUgbmFtZXMgb2YgdGhlIEhhYWIgbW9udGhzLlxyXG5cdFx0XHRAcHJvcGVydHkgdHpvbGtpbk1vbnRocyB7c3RyaW5nW119IFRoZSBuYW1lcyBvZiB0aGUgVHpvbGtpbiBtb250aHMuICovXHJcblx0XHRyZWdpb25hbE9wdGlvbnM6IHsgLy8gTG9jYWxpc2F0aW9uc1xyXG5cdFx0XHQnJzoge1xyXG5cdFx0XHRcdG5hbWU6ICdNYXlhbicsXHJcblx0XHRcdFx0ZXBvY2hzOiBbJycsICcnXSxcclxuXHRcdFx0XHRtb250aE5hbWVzOiBbJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLFxyXG5cdFx0XHRcdCcxMCcsICcxMScsICcxMicsICcxMycsICcxNCcsICcxNScsICcxNicsICcxNyddLFxyXG5cdFx0XHRcdG1vbnRoTmFtZXNTaG9ydDogWycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JyxcclxuXHRcdFx0XHQnMTAnLCAnMTEnLCAnMTInLCAnMTMnLCAnMTQnLCAnMTUnLCAnMTYnLCAnMTcnXSxcclxuXHRcdFx0XHRkYXlOYW1lczogWycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JyxcclxuXHRcdFx0XHQnMTAnLCAnMTEnLCAnMTInLCAnMTMnLCAnMTQnLCAnMTUnLCAnMTYnLCAnMTcnLCAnMTgnLCAnMTknXSxcclxuXHRcdFx0XHRkYXlOYW1lc1Nob3J0OiBbJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLFxyXG5cdFx0XHRcdCcxMCcsICcxMScsICcxMicsICcxMycsICcxNCcsICcxNScsICcxNicsICcxNycsICcxOCcsICcxOSddLFxyXG5cdFx0XHRcdGRheU5hbWVzTWluOiBbJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLFxyXG5cdFx0XHRcdCcxMCcsICcxMScsICcxMicsICcxMycsICcxNCcsICcxNScsICcxNicsICcxNycsICcxOCcsICcxOSddLFxyXG5cdFx0XHRcdGRhdGVGb3JtYXQ6ICdZWVlZLm0uZCcsXHJcblx0XHRcdFx0Zmlyc3REYXk6IDAsXHJcblx0XHRcdFx0aXNSVEw6IGZhbHNlLFxyXG5cdFx0XHRcdGhhYWJNb250aHM6IFsnUG9wJywgJ1VvJywgJ1ppcCcsICdab3R6JywgJ1R6ZWMnLCAnWHVsJywgJ1lheGtpbicsICdNb2wnLCAnQ2hlbicsICdZYXgnLFxyXG5cdFx0XHRcdCdaYWMnLCAnQ2VoJywgJ01hYycsICdLYW5raW4nLCAnTXVhbicsICdQYXgnLCAnS2F5YWInLCAnQ3Vta3UnLCAnVWF5ZWInXSxcclxuXHRcdFx0XHR0em9sa2luTW9udGhzOiBbJ0ltaXgnLCAnSWsnLCAnQWtiYWwnLCAnS2FuJywgJ0NoaWNjaGFuJywgJ0NpbWknLCAnTWFuaWsnLCAnTGFtYXQnLCAnTXVsdWMnLCAnT2MnLFxyXG5cdFx0XHRcdCdDaHVlbicsICdFYicsICdCZW4nLCAnSXgnLCAnTWVuJywgJ0NpYicsICdDYWJhbicsICdFdHpuYWInLCAnQ2F1YWMnLCAnQWhhdSddXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBpbiBhIGxlYXAgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIE1heWFuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGlzIGEgbGVhcCB5ZWFyLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0bGVhcFllYXI6IGZ1bmN0aW9uKHllYXIpIHtcclxuXHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRm9ybWF0IHRoZSB5ZWFyLCBpZiBub3QgYSBzaW1wbGUgc2VxdWVudGlhbCBudW1iZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGZvcm1hdCBvciB0aGUgeWVhciB0byBmb3JtYXQuXHJcblx0XHRcdEByZXR1cm4ge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB5ZWFyLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0Zm9ybWF0WWVhcjogZnVuY3Rpb24oeWVhcikge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIHRoaXMubWluTW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhcik7XHJcblx0XHRcdHllYXIgPSBkYXRlLnllYXIoKTtcclxuXHRcdFx0dmFyIGJha3R1biA9IE1hdGguZmxvb3IoeWVhciAvIDQwMCk7XHJcblx0XHRcdHllYXIgPSB5ZWFyICUgNDAwO1xyXG5cdFx0XHR5ZWFyICs9ICh5ZWFyIDwgMCA/IDQwMCA6IDApO1xyXG5cdFx0XHR2YXIga2F0dW4gPSBNYXRoLmZsb29yKHllYXIgLyAyMCk7XHJcblx0XHRcdHJldHVybiBiYWt0dW4gKyAnLicgKyBrYXR1biArICcuJyArICh5ZWFyICUgMjApO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ29udmVydCBmcm9tIHRoZSBmb3JtYXR0ZWQgeWVhciBiYWNrIHRvIGEgc2luZ2xlIG51bWJlci5cclxuXHRcdFx0QG1lbWJlcm9mIE1heWFuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXJzIHtzdHJpbmd9IFRoZSB5ZWFyIGFzIG4ubi5uLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBzZXF1ZW50aWFsIHllYXIuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB2YWx1ZSBpcyBzdXBwbGllZC4gKi9cclxuXHRcdGZvclllYXI6IGZ1bmN0aW9uKHllYXJzKSB7XHJcblx0XHRcdHllYXJzID0geWVhcnMuc3BsaXQoJy4nKTtcclxuXHRcdFx0aWYgKHllYXJzLmxlbmd0aCA8IDMpIHtcclxuXHRcdFx0XHR0aHJvdyAnSW52YWxpZCBNYXlhbiB5ZWFyJztcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgeWVhciA9IDA7XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgeWVhcnMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHR2YXIgeSA9IHBhcnNlSW50KHllYXJzW2ldLCAxMCk7XHJcblx0XHRcdFx0aWYgKE1hdGguYWJzKHkpID4gMTkgfHwgKGkgPiAwICYmIHkgPCAwKSkge1xyXG5cdFx0XHRcdFx0dGhyb3cgJ0ludmFsaWQgTWF5YW4geWVhcic7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHllYXIgPSB5ZWFyICogMjAgKyB5O1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB5ZWFyO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBtb250aHMgaW4gYSB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgTWF5YW5DYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBtb250aHMuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRtb250aHNJblllYXI6IGZ1bmN0aW9uKHllYXIpIHtcclxuXHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyKTtcclxuXHRcdFx0cmV0dXJuIDE4O1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHRoZSB3ZWVrIG9mIHRoZSB5ZWFyIGZvciBhIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIHdlZWsgb2YgdGhlIHllYXIuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR3ZWVrT2ZZZWFyOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlKTtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgTWF5YW5DYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZGF5c0luWWVhcjogZnVuY3Rpb24oeWVhcikge1xyXG5cdFx0XHR0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIpO1xyXG5cdFx0XHRyZXR1cm4gMzYwO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgbW9udGguXHJcblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgb2YgdGhlIG1vbnRoLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGguXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgbW9udGguXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBtb250aC95ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRkYXlzSW5Nb250aDogZnVuY3Rpb24oeWVhciwgbW9udGgpIHtcclxuXHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkTW9udGgpO1xyXG5cdFx0XHRyZXR1cm4gMjA7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSB3ZWVrLlxyXG5cdFx0XHRAbWVtYmVyb2YgTWF5YW5DYWxlbmRhclxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cy4gKi9cclxuXHRcdGRheXNJbldlZWs6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4gNTsgLy8gSnVzdCBmb3IgZm9ybWF0dGluZ1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIGRheSBvZiB0aGUgd2VlayBmb3IgYSBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgTWF5YW5DYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBkYXkgb2YgdGhlIHdlZWs6IDAgdG8gbnVtYmVyIG9mIGRheXMgLSAxLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZGF5T2ZXZWVrOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUpO1xyXG5cdFx0XHRyZXR1cm4gZGF0ZS5kYXkoKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBhIHdlZWsgZGF5LlxyXG5cdFx0XHRAbWVtYmVyb2YgTWF5YW5DYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBhIHdlZWsgZGF5LCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0d2Vla0RheTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHR0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgZGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBhIGRhdGUgLSBIYWFiIGFuZCBUem9sa2luIGVxdWl2YWxlbnRzLlxyXG5cdFx0XHRAbWVtYmVyb2YgTWF5YW5DYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gLSBjb250ZW50cyBkZXBlbmRzIG9uIGNhbGVuZGFyLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZXh0cmFJbmZvOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUpO1xyXG5cdFx0XHR2YXIgamQgPSBkYXRlLnRvSkQoKTtcclxuXHRcdFx0dmFyIGhhYWIgPSB0aGlzLl90b0hhYWIoamQpO1xyXG5cdFx0XHR2YXIgdHpvbGtpbiA9IHRoaXMuX3RvVHpvbGtpbihqZCk7XHJcblx0XHRcdHJldHVybiB7aGFhYk1vbnRoTmFtZTogdGhpcy5sb2NhbC5oYWFiTW9udGhzW2hhYWJbMF0gLSAxXSxcclxuXHRcdFx0XHRoYWFiTW9udGg6IGhhYWJbMF0sIGhhYWJEYXk6IGhhYWJbMV0sXHJcblx0XHRcdFx0dHpvbGtpbkRheU5hbWU6IHRoaXMubG9jYWwudHpvbGtpbk1vbnRoc1t0em9sa2luWzBdIC0gMV0sXHJcblx0XHRcdFx0dHpvbGtpbkRheTogdHpvbGtpblswXSwgdHpvbGtpblRyZWNlbmE6IHR6b2xraW5bMV19O1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgSGFhYiBkYXRlIGZyb20gYSBKdWxpYW4gZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIE1heWFuQ2FsZW5kYXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGpkICB7bnVtYmVyfSBUaGUgSnVsaWFuIGRhdGUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcltdfSBDb3JyZXNwb25kaW5nIEhhYWIgbW9udGggYW5kIGRheS4gKi9cclxuXHRcdF90b0hhYWI6IGZ1bmN0aW9uKGpkKSB7XHJcblx0XHRcdGpkIC09IHRoaXMuamRFcG9jaDtcclxuXHRcdFx0dmFyIGRheSA9IG1vZChqZCArIDggKyAoKDE4IC0gMSkgKiAyMCksIDM2NSk7XHJcblx0XHRcdHJldHVybiBbTWF0aC5mbG9vcihkYXkgLyAyMCkgKyAxLCBtb2QoZGF5LCAyMCldO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgVHpvbGtpbiBkYXRlIGZyb20gYSBKdWxpYW4gZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIE1heWFuQ2FsZW5kYXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGpkIHtudW1iZXJ9IFRoZSBKdWxpYW4gZGF0ZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyW119IENvcnJlc3BvbmRpbmcgVHpvbGtpbiBkYXkgYW5kIHRyZWNlbmEuICovXHJcblx0XHRfdG9Uem9sa2luOiBmdW5jdGlvbihqZCkge1xyXG5cdFx0XHRqZCAtPSB0aGlzLmpkRXBvY2g7XHJcblx0XHRcdHJldHVybiBbYW1vZChqZCArIDIwLCAyMCksIGFtb2QoamQgKyA0LCAxMyldO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIEp1bGlhbiBkYXRlIGVxdWl2YWxlbnQgZm9yIHRoaXMgZGF0ZSxcclxuXHRcdFx0aS5lLiBkYXlzIHNpbmNlIEphbnVhcnkgMSwgNDcxMyBCQ0UgR3JlZW53aWNoIG5vb24uXHJcblx0XHRcdEBtZW1iZXJvZiBNYXlhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvbnZlcnQgb3IgdGhlIHllYXIgdG8gY29udmVydC5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGNvbnZlcnQuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGNvbnZlcnQuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGVxdWl2YWxlbnQgSnVsaWFuIGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR0b0pEOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUpO1xyXG5cdFx0XHRyZXR1cm4gZGF0ZS5kYXkoKSArIChkYXRlLm1vbnRoKCkgKiAyMCkgKyAoZGF0ZS55ZWFyKCkgKiAzNjApICsgdGhpcy5qZEVwb2NoO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgZnJvbSBhIEp1bGlhbiBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgTWF5YW5DYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0gamQge251bWJlcn0gVGhlIEp1bGlhbiBkYXRlIHRvIGNvbnZlcnQuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgZXF1aXZhbGVudCBkYXRlLiAqL1xyXG5cdFx0ZnJvbUpEOiBmdW5jdGlvbihqZCkge1xyXG5cdFx0XHRqZCA9IE1hdGguZmxvb3IoamQpICsgMC41IC0gdGhpcy5qZEVwb2NoO1xyXG5cdFx0XHR2YXIgeWVhciA9IE1hdGguZmxvb3IoamQgLyAzNjApO1xyXG5cdFx0XHRqZCA9IGpkICUgMzYwO1xyXG5cdFx0XHRqZCArPSAoamQgPCAwID8gMzYwIDogMCk7XHJcblx0XHRcdHZhciBtb250aCA9IE1hdGguZmxvb3IoamQgLyAyMCk7XHJcblx0XHRcdHZhciBkYXkgPSBqZCAlIDIwO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5uZXdEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHQvLyBNb2R1bHVzIGZ1bmN0aW9uIHdoaWNoIHdvcmtzIGZvciBub24taW50ZWdlcnMuXHJcblx0ZnVuY3Rpb24gbW9kKGEsIGIpIHtcclxuXHRcdHJldHVybiBhIC0gKGIgKiBNYXRoLmZsb29yKGEgLyBiKSk7XHJcblx0fVxyXG5cclxuXHQvLyBNb2R1bHVzIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgbnVtZXJhdG9yIGlmIG1vZHVsdXMgaXMgemVyby5cclxuXHRmdW5jdGlvbiBhbW9kKGEsIGIpIHtcclxuXHRcdHJldHVybiBtb2QoYSAtIDEsIGIpICsgMTtcclxuXHR9XHJcblxyXG5cdC8vIE1heWFuIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uXHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLm1heWFuID0gTWF5YW5DYWxlbmRhcjtcclxuXHJcbn0pKGpRdWVyeSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.nepali-ne.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.nepali-ne.js index 19d2fa96491..eb0dbe71a60 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.nepali-ne.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.nepali-ne.js @@ -21,4 +21,4 @@ }; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMubmVwYWxpLW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLm5lcGFsaS1uZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIE5lcGFsaSBsb2NhbGlzYXRpb24gZm9yIE5lcGFsaSBjYWxlbmRhciBmb3IgalF1ZXJ5IHYyLjAuMS5cbiAgIFdyaXR0ZW4gYnkgQXJ0dXIgTmV1bWFubiAoaWN0LnByb2plY3Rze2F0fW5lcGFsLmluZi5vcmcpIEFwcmlsIDIwMTMuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMubmVwYWxpLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ25lJ10gPSB7XG5cdFx0bmFtZTogJ05lcGFsaScsXG5cdFx0ZXBvY2hzOiBbJ0JCUycsICdBQlMnXSxcblx0XHRtb250aE5hbWVzOiBbJ+CkrOCliOCktuCkvuCklicsICfgpJzgpYfgpLfgpY3gpKAnLCAn4KSG4KS34KS+4KSiJywgJ+CktuCljeCksOCkvuCkteCkoycsICfgpK3gpL7gpKbgpY3gpLAnLCAn4KSG4KS24KWN4KS14KS/4KSoJywgJ+CkleCkvuCksOCljeCkpOCkv+CklScsICfgpK7gpILgpLjgpL/gpLAnLCAn4KSq4KWM4KS3JywgJ+CkruCkvuCkmCcsICfgpKvgpL7gpLLgpY3gpJfgpYHgpKgnLCAn4KSa4KWI4KSk4KWN4KSwJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ+CkrOCliCcsICfgpJzgpYcnLCAn4KSG4KS34KS+JywgJ+CktuCljeCksOCkvicsICfgpK3gpL4nLCAn4KSG4KS2JywgJ+CkleCkvicsICfgpK7gpIInLCAn4KSq4KWMJywgJ+CkruCkvicsICfgpKvgpL4nLCAn4KSa4KWIJ10sXG5cdFx0ZGF5TmFtZXM6IFsn4KSG4KSH4KSk4KS14KS+4KSwJywgJ+CkuOCli+CkruCkteCkvuCksCcsICfgpK7gpJfgpLLgpLXgpL7gpLAnLCAn4KSs4KWB4KSn4KS14KS+4KSwJywgJ+CkrOCkv+CkueCkv+CkteCkvuCksCcsICfgpLbgpYHgpJXgpY3gpLDgpLXgpL7gpLAnLCAn4KS24KSo4KS/4KS14KS+4KSwJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfgpIbgpIfgpKQnLCAn4KS44KWL4KSuJywgJ+CkruCkl+CksicsICfgpKzgpYHgpKcnLCAn4KSs4KS/4KS54KS/JywgJ+CktuClgeCkleCljeCksCcsICfgpLbgpKjgpL8nXSxcblx0XHRkYXlOYW1lc01pbjogWyfgpIYnLCAn4KS44KWLJywgJ+CkricsICfgpKzgpYEnLCAn4KSs4KS/JywgJ+CktuClgScsICfgpLYnXSxcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0Zmlyc3REYXk6IDEsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMubmVwYWxpLW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLm5lcGFsaS1uZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgTmVwYWxpIGxvY2FsaXNhdGlvbiBmb3IgTmVwYWxpIGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxyXG4gICBXcml0dGVuIGJ5IEFydHVyIE5ldW1hbm4gKGljdC5wcm9qZWN0c3thdH1uZXBhbC5pbmYub3JnKSBBcHJpbCAyMDEzLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5uZXBhbGkucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snbmUnXSA9IHtcclxuXHRcdG5hbWU6ICdOZXBhbGknLFxyXG5cdFx0ZXBvY2hzOiBbJ0JCUycsICdBQlMnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn4KSs4KWI4KS24KS+4KSWJywgJ+CknOClh+Ckt+CljeCkoCcsICfgpIbgpLfgpL7gpKInLCAn4KS24KWN4KSw4KS+4KS14KSjJywgJ+CkreCkvuCkpuCljeCksCcsICfgpIbgpLbgpY3gpLXgpL/gpKgnLCAn4KSV4KS+4KSw4KWN4KSk4KS/4KSVJywgJ+CkruCkguCkuOCkv+CksCcsICfgpKrgpYzgpLcnLCAn4KSu4KS+4KSYJywgJ+Ckq+CkvuCksuCljeCkl+ClgeCkqCcsICfgpJrgpYjgpKTgpY3gpLAnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfgpKzgpYgnLCAn4KSc4KWHJywgJ+CkhuCkt+CkvicsICfgpLbgpY3gpLDgpL4nLCAn4KSt4KS+JywgJ+CkhuCkticsICfgpJXgpL4nLCAn4KSu4KSCJywgJ+CkquCljCcsICfgpK7gpL4nLCAn4KSr4KS+JywgJ+CkmuCliCddLFxyXG5cdFx0ZGF5TmFtZXM6IFsn4KSG4KSH4KSk4KS14KS+4KSwJywgJ+CkuOCli+CkruCkteCkvuCksCcsICfgpK7gpJfgpLLgpLXgpL7gpLAnLCAn4KSs4KWB4KSn4KS14KS+4KSwJywgJ+CkrOCkv+CkueCkv+CkteCkvuCksCcsICfgpLbgpYHgpJXgpY3gpLDgpLXgpL7gpLAnLCAn4KS24KSo4KS/4KS14KS+4KSwJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+CkhuCkh+CkpCcsICfgpLjgpYvgpK4nLCAn4KSu4KSX4KSyJywgJ+CkrOClgeCkpycsICfgpKzgpL/gpLngpL8nLCAn4KS24KWB4KSV4KWN4KSwJywgJ+CktuCkqOCkvyddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn4KSGJywgJ+CkuOCliycsICfgpK4nLCAn4KSs4KWBJywgJ+CkrOCkvycsICfgpLbgpYEnLCAn4KS2J10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.nepali.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.nepali.js index 8993e67c8f7..886b8b2dcfd 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.nepali.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.nepali.js @@ -412,4 +412,4 @@ })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMubmVwYWxpLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMubmVwYWxpLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTmVwYWxpIGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxuICAgV3JpdHRlbiBieSBBcnR1ciBOZXVtYW5uIChpY3QucHJvamVjdHN7YXR9bmVwYWwuaW5mLm9yZykgQXByaWwgMjAxMy5cbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cblxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxuXG5cdC8qKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgTmVwYWxpIGNpdmlsIGNhbGVuZGFyLlxuXHRcdEJhc2VkIG9uIHRoZSBpZGVhcyBmcm9tIFxuXHRcdDxhIGhyZWY9XCJodHRwOi8vY29kZWlzc3VlLmNvbS9hcnRpY2xlcy9hMDRlMDUwZGVhNzQ2OGYvYWxnb3JpdGhtLXRvLWNvbnZlcnQtZW5nbGlzaC1kYXRlLXRvLW5lcGFsaS1kYXRlLXVzaW5nLWMtbmV0XCI+aHR0cDovL2NvZGVpc3N1ZS5jb20vYXJ0aWNsZXMvYTA0ZTA1MGRlYTc0NjhmL2FsZ29yaXRobS10by1jb252ZXJ0LWVuZ2xpc2gtZGF0ZS10by1uZXBhbGktZGF0ZS11c2luZy1jLW5ldDwvYT5cblx0XHRhbmQgPGEgaHJlZj1cImh0dHA6Ly9iaXJlbmoyZWUuYmxvZ3Nwb3QuY29tLzIwMTEvMDQvbmVwYWxpLWNhbGVuZGFyLWluLWphdmEuaHRtbFwiPmh0dHA6Ly9iaXJlbmoyZWUuYmxvZ3Nwb3QuY29tLzIwMTEvMDQvbmVwYWxpLWNhbGVuZGFyLWluLWphdmEuaHRtbDwvYT5cblx0XHRTZWUgYWxzbyA8YSBocmVmPVwiaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9OZXBhbGlfY2FsZW5kYXJcIj5odHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05lcGFsaV9jYWxlbmRhcjwvYT5cblx0XHRhbmQgPGEgaHJlZj1cImh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jpa3JhbV9TYW13YXRcIj5odHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CaWtyYW1fU2Ftd2F0PC9hPi5cblx0XHRAY2xhc3MgTmVwYWxpQ2FsZW5kYXJcblx0XHRAcGFyYW0gW2xhbmd1YWdlPScnXSB7c3RyaW5nfSBUaGUgbGFuZ3VhZ2UgY29kZSAoZGVmYXVsdCBFbmdsaXNoKSBmb3IgbG9jYWxpc2F0aW9uLiAqL1xuXHRmdW5jdGlvbiBOZXBhbGlDYWxlbmRhcihsYW5ndWFnZSkge1xuXHRcdHRoaXMubG9jYWwgPSB0aGlzLnJlZ2lvbmFsT3B0aW9uc1tsYW5ndWFnZSB8fCAnJ10gfHwgdGhpcy5yZWdpb25hbE9wdGlvbnNbJyddO1xuXHR9XG5cblx0TmVwYWxpQ2FsZW5kYXIucHJvdG90eXBlID0gbmV3ICQuY2FsZW5kYXJzLmJhc2VDYWxlbmRhcjtcblxuXHQkLmV4dGVuZChOZXBhbGlDYWxlbmRhci5wcm90b3R5cGUsIHtcblx0XHQvKiogVGhlIGNhbGVuZGFyIG5hbWUuXG5cdFx0XHRAbWVtYmVyb2YgTmVwYWxpQ2FsZW5kYXIgKi9cblx0XHRuYW1lOiAnTmVwYWxpJyxcblx0XHQvKiogSnVsaWFuIGRhdGUgb2Ygc3RhcnQgb2YgTmVwYWxpIGVwb2NoOiAxNCBBcHJpbCA1NyBCQ0UuXG5cdFx0XHRAbWVtYmVyb2YgTmVwYWxpQ2FsZW5kYXIgKi9cblx0XHRqZEVwb2NoOiAxNzAwNzA5LjUsXG5cdFx0LyoqIERheXMgcGVyIG1vbnRoIGluIGEgY29tbW9uIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgTmVwYWxpQ2FsZW5kYXIgKi9cblx0XHRkYXlzUGVyTW9udGg6IFszMSwgMzEsIDMyLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcblx0XHQvKiogPGNvZGU+dHJ1ZTwvY29kZT4gaWYgaGFzIGEgeWVhciB6ZXJvLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QG1lbWJlcm9mIE5lcGFsaUNhbGVuZGFyICovXG5cdFx0aGFzWWVhclplcm86IGZhbHNlLFxuXHRcdC8qKiBUaGUgbWluaW11bSBtb250aCBudW1iZXIuXG5cdFx0XHRAbWVtYmVyb2YgTmVwYWxpQ2FsZW5kYXIgKi9cblx0XHRtaW5Nb250aDogMSxcblx0XHQvKiogVGhlIGZpcnN0IG1vbnRoIGluIHRoZSB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIE5lcGFsaUNhbGVuZGFyICovXG5cdFx0Zmlyc3RNb250aDogMSxcblx0XHQvKiogVGhlIG1pbmltdW0gZGF5IG51bWJlci5cblx0XHRcdEBtZW1iZXJvZiBOZXBhbGlDYWxlbmRhciAqL1xuXHRcdG1pbkRheTogMSwgXG5cdFx0LyoqIFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGUgeWVhci5cblx0XHRcdEBtZW1iZXJvZiBOZXBhbGlDYWxlbmRhciAqL1xuXHRcdGRheXNQZXJZZWFyOiAzNjUsXG5cblx0XHQvKiogTG9jYWxpc2F0aW9ucyBmb3IgdGhlIHBsdWdpbi5cblx0XHRcdEVudHJpZXMgYXJlIG9iamVjdHMgaW5kZXhlZCBieSB0aGUgbGFuZ3VhZ2UgY29kZSAoJycgYmVpbmcgdGhlIGRlZmF1bHQgVVMvRW5nbGlzaCkuXG5cdFx0XHRFYWNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLlxuXHRcdFx0QG1lbWJlcm9mIE5lcGFsaUNhbGVuZGFyXG5cdFx0XHRAcHJvcGVydHkgbmFtZSB7c3RyaW5nfSBUaGUgY2FsZW5kYXIgbmFtZS5cblx0XHRcdEBwcm9wZXJ0eSBlcG9jaHMge3N0cmluZ1tdfSBUaGUgZXBvY2ggbmFtZXMuXG5cdFx0XHRAcHJvcGVydHkgbW9udGhOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBtb250aHMgb2YgdGhlIHllYXIuXG5cdFx0XHRAcHJvcGVydHkgbW9udGhOYW1lc1Nob3J0IHtzdHJpbmdbXX0gVGhlIHNob3J0IG5hbWVzIG9mIHRoZSBtb250aHMgb2YgdGhlIHllYXIuXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXMge3N0cmluZ1tdfSBUaGUgbG9uZyBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lc1Nob3J0IHtzdHJpbmdbXX0gVGhlIHNob3J0IG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzTWluIHtzdHJpbmdbXX0gVGhlIG1pbmltYWwgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXG5cdFx0XHRAcHJvcGVydHkgZGF0ZUZvcm1hdCB7c3RyaW5nfSBUaGUgZGF0ZSBmb3JtYXQgZm9yIHRoaXMgY2FsZW5kYXIuXG5cdFx0XHRcdFx0U2VlIHRoZSBvcHRpb25zIG9uIDxhIGhyZWY9XCJCYXNlQ2FsZW5kYXIuaHRtbCNmb3JtYXREYXRlXCI+PGNvZGU+Zm9ybWF0RGF0ZTwvY29kZT48L2E+IGZvciBkZXRhaWxzLlxuXHRcdFx0QHByb3BlcnR5IGZpcnN0RGF5IHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlaywgc3RhcnRpbmcgYXQgMC5cblx0XHRcdEBwcm9wZXJ0eSBpc1JUTCB7bnVtYmVyfSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGxvY2FsaXNhdGlvbiByZWFkcyByaWdodC10by1sZWZ0LiAqL1xuXHRcdHJlZ2lvbmFsT3B0aW9uczogeyAvLyBMb2NhbGlzYXRpb25zXG5cdFx0XHQnJzoge1xuXHRcdFx0XHRuYW1lOiAnTmVwYWxpJyxcblx0XHRcdFx0ZXBvY2hzOiBbJ0JCUycsICdBQlMnXSxcblx0XHRcdFx0bW9udGhOYW1lczogWydCYWlzYWtoJywgJ0plc3RoYScsICdBc2hhZGgnLCAnU2hyYXdhbicsICdCaGFkcmEnLCAnQXNod2luJyxcblx0XHRcdFx0J0thcnRpaycsICdNYW5nc2lyJywgJ1BhdXNoJywgJ01hbmdoJywgJ0ZhbGd1bicsICdDaGFpdHJhJ10sXG5cdFx0XHRcdG1vbnRoTmFtZXNTaG9ydDogWydCYWknLCAnSmUnLCAnQXMnLCAnU2hyYScsICdCaGEnLCAnQXNoJywgJ0thcicsICdNYW5nJywgJ1BhdScsICdNYScsICdGYWwnLCAnQ2hhaSddLFxuXHRcdFx0XHRkYXlOYW1lczogWydBYWl0YWJhYXInLCAnU29tYmFhcicsICdNYW5nbGJhYXInLCAnQnVkaGFiYWFyJywgJ0JpaGliYWFyJywgJ1NodWtyYWJhYXInLCAnU2hhbmliYWFyJ10sXG5cdFx0XHRcdGRheU5hbWVzU2hvcnQ6IFsnQWFpdGEnLCAnU29tJywgJ01hbmdsJywgJ0J1ZGhhJywgJ0JpaGknLCAnU2h1a3JhJywgJ1NoYW5pJ10sXG5cdFx0XHRcdGRheU5hbWVzTWluOiBbJ0FhaScsICdTbycsICdNYW4nLCAnQnUnLCAnQmknLCAnU2h1JywgJ1NoYSddLFxuXHRcdFx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXG5cdFx0XHRcdGZpcnN0RGF5OiAxLFxuXHRcdFx0XHRpc1JUTDogZmFsc2Vcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBpbiBhIGxlYXAgeWVhci5cblx0XHRcdEBtZW1iZXJvZiBOZXBhbGlDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBpcyBhIGxlYXAgeWVhciwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0bGVhcFllYXI6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHJldHVybiB0aGlzLmRheXNJblllYXIoeWVhcikgIT09IHRoaXMuZGF5c1BlclllYXI7XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgdGhlIHdlZWsgb2YgdGhlIHllYXIgZm9yIGEgZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBOZXBhbGlDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgd2VlayBvZiB0aGUgeWVhci5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0d2Vla09mWWVhcjogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0Ly8gRmluZCBTdW5kYXkgb2YgdGhpcyB3ZWVrIHN0YXJ0aW5nIG9uIFN1bmRheVxuXHRcdFx0dmFyIGNoZWNrRGF0ZSA9IHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcblx0XHRcdGNoZWNrRGF0ZS5hZGQoLWNoZWNrRGF0ZS5kYXlPZldlZWsoKSwgJ2QnKTtcblx0XHRcdHJldHVybiBNYXRoLmZsb29yKChjaGVja0RhdGUuZGF5T2ZZZWFyKCkgLSAxKSAvIDcpICsgMTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBhIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgTmVwYWxpQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRkYXlzSW5ZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIHRoaXMubWluTW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhcik7XG5cdFx0XHR5ZWFyID0gZGF0ZS55ZWFyKCk7XG5cdFx0XHRpZiAodHlwZW9mIHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbeWVhcl0gPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmRheXNQZXJZZWFyO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGRheXNQZXJZZWFyID0gMDtcblx0XHRcdGZvciAodmFyIG1vbnRoX251bWJlciA9IHRoaXMubWluTW9udGg7IG1vbnRoX251bWJlciA8PSAxMjsgbW9udGhfbnVtYmVyKyspIHtcblx0XHRcdFx0ZGF5c1BlclllYXIgKz0gdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt5ZWFyXVttb250aF9udW1iZXJdO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRheXNQZXJZZWFyO1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgbW9udGguXG5cdFx0XHRAbWVtYmVyb2YgTmVwYWxpQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ8IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgb2YgdGhlIG1vbnRoLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBtb250aC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBtb250aC95ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0ZGF5c0luTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XG5cdFx0XHRpZiAoeWVhci55ZWFyKSB7XG5cdFx0XHRcdG1vbnRoID0geWVhci5tb250aCgpO1xuXHRcdFx0XHR5ZWFyID0geWVhci55ZWFyKCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRNb250aCk7XG5cdFx0XHRyZXR1cm4gKHR5cGVvZiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3llYXJdID09PSAndW5kZWZpbmVkJyA/XG5cdFx0XHRcdHRoaXMuZGF5c1Blck1vbnRoW21vbnRoIC0gMV0gOiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3llYXJdW21vbnRoXSk7XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgYSB3ZWVrIGRheS5cblx0XHRcdEBtZW1iZXJvZiBOZXBhbGlDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYSB3ZWVrIGRheSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0d2Vla0RheTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZGF5T2ZXZWVrKHllYXIsIG1vbnRoLCBkYXkpICE9PSA2O1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIEp1bGlhbiBkYXRlIGVxdWl2YWxlbnQgZm9yIHRoaXMgZGF0ZSxcblx0XHRcdGkuZS4gZGF5cyBzaW5jZSBKYW51YXJ5IDEsIDQ3MTMgQkNFIEdyZWVud2ljaCBub29uLlxuXHRcdFx0QG1lbWJlcm9mIE5lcGFsaUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb252ZXJ0IG9yIHRoZSB5ZWFyIHRvIGNvbnZlcnQuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gY29udmVydC5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGNvbnZlcnQuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBlcXVpdmFsZW50IEp1bGlhbiBkYXRlLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHR0b0pEOiBmdW5jdGlvbihuZXBhbGlZZWFyLCBuZXBhbGlNb250aCwgbmVwYWxpRGF5KSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKG5lcGFsaVllYXIsIG5lcGFsaU1vbnRoLCBuZXBhbGlEYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlKTtcblx0XHRcdG5lcGFsaVllYXIgPSBkYXRlLnllYXIoKTtcblx0XHRcdG5lcGFsaU1vbnRoID0gZGF0ZS5tb250aCgpO1xuXHRcdFx0bmVwYWxpRGF5ID0gZGF0ZS5kYXkoKTtcblx0XHRcdHZhciBncmVnb3JpYW5DYWxlbmRhciA9ICQuY2FsZW5kYXJzLmluc3RhbmNlKCk7XG5cdFx0XHR2YXIgZ3JlZ29yaWFuRGF5T2ZZZWFyID0gMDsgLy8gV2Ugd2lsbCBhZGQgYWxsIHRoZSBkYXlzIHRoYXQgd2VudCBieSBzaW5jZVxuXHRcdFx0Ly8gdGhlIDFzdC4gSmFudWFyeSBhbmQgdGhlbiB3ZSBjYW4gZ2V0IHRoZSBHcmVnb3JpYW4gRGF0ZVxuXHRcdFx0dmFyIG5lcGFsaU1vbnRoVG9DaGVjayA9IG5lcGFsaU1vbnRoO1xuXHRcdFx0dmFyIG5lcGFsaVllYXJUb0NoZWNrID0gbmVwYWxpWWVhcjtcblx0XHRcdHRoaXMuX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGEobmVwYWxpWWVhcik7XG5cdFx0XHQvLyBHZXQgdGhlIGNvcnJlY3QgeWVhclxuXHRcdFx0dmFyIGdyZWdvcmlhblllYXIgPSBuZXBhbGlZZWFyIC0gKG5lcGFsaU1vbnRoVG9DaGVjayA+IDkgfHwgKG5lcGFsaU1vbnRoVG9DaGVjayA9PT0gOSAmJlxuXHRcdFx0XHRuZXBhbGlEYXkgPj0gdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtuZXBhbGlZZWFyVG9DaGVja11bMF0pID8gNTYgOiA1Nyk7XG5cdFx0XHQvLyBGaXJzdCB3ZSBhZGQgdGhlIGFtb3VudCBvZiBkYXlzIGluIHRoZSBhY3R1YWwgTmVwYWxpIG1vbnRoIGFzIHRoZSBkYXkgb2YgeWVhciBpbiB0aGVcblx0XHRcdC8vIEdyZWdvcmlhbiBvbmUgYmVjYXVzZSBhdCBsZWFzdCB0aGlzIGRheXMgYXJlIGdvbmUgc2luY2UgdGhlIDFzdC4gSmFuLiBcblx0XHRcdGlmIChuZXBhbGlNb250aCAhPT0gOSkge1xuXHRcdFx0XHRncmVnb3JpYW5EYXlPZlllYXIgPSBuZXBhbGlEYXk7XG5cdFx0XHRcdG5lcGFsaU1vbnRoVG9DaGVjay0tO1xuXHRcdFx0fVxuXHRcdFx0Ly8gTm93IHdlIGxvb3AgdGhyb3cgYWxsIE5lcGFsaSBtb250aCBhbmQgYWRkIHRoZSBhbW91bnQgb2YgZGF5cyB0byBncmVnb3JpYW5EYXlPZlllYXIgXG5cdFx0XHQvLyB3ZSBkbyB0aGlzIHRpbGwgd2UgcmVhY2ggUGF1c2ggKDl0aCBtb250aCkuIDFzdC4gSmFudWFyeSBhbHdheXMgZmFsbHMgaW4gdGhpcyBtb250aCAgXG5cdFx0XHR3aGlsZSAobmVwYWxpTW9udGhUb0NoZWNrICE9PSA5KSB7XG5cdFx0XHRcdGlmIChuZXBhbGlNb250aFRvQ2hlY2sgPD0gMCkge1xuXHRcdFx0XHRcdG5lcGFsaU1vbnRoVG9DaGVjayA9IDEyO1xuXHRcdFx0XHRcdG5lcGFsaVllYXJUb0NoZWNrLS07XG5cdFx0XHRcdH1cdFx0XHRcdFxuXHRcdFx0XHRncmVnb3JpYW5EYXlPZlllYXIgKz0gdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtuZXBhbGlZZWFyVG9DaGVja11bbmVwYWxpTW9udGhUb0NoZWNrXTtcblx0XHRcdFx0bmVwYWxpTW9udGhUb0NoZWNrLS07XG5cdFx0XHR9XHRcdFxuXHRcdFx0Ly8gSWYgdGhlIGRhdGUgdGhhdCBoYXMgdG8gYmUgY29udmVydGVkIGlzIGluIFBhdXNoIChtb250aCBuby4gOSkgd2UgaGF2ZSB0byBkbyBzb21lIG90aGVyIGNhbGN1bGF0aW9uXG5cdFx0XHRpZiAobmVwYWxpTW9udGggPT09IDkpIHtcblx0XHRcdFx0Ly8gQWRkIHRoZSBkYXlzIHRoYXQgYXJlIHBhc3NlZCBzaW5jZSB0aGUgZmlyc3QgZGF5IG9mIFBhdXNoIGFuZCBzdWJzdHJhY3QgdGhlXG5cdFx0XHRcdC8vIGFtb3VudCBvZiBkYXlzIHRoYXQgbGllIGJldHdlZW4gMXN0LiBKYW4gYW5kIDFzdCBQYXVzaFxuXHRcdFx0XHRncmVnb3JpYW5EYXlPZlllYXIgKz0gbmVwYWxpRGF5IC0gdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtuZXBhbGlZZWFyVG9DaGVja11bMF07XG5cdFx0XHRcdC8vIEZvciB0aGUgZmlyc3QgZGF5cyBvZiBQYXVzaCB3ZSBhcmUgbm93IGluIG5lZ2F0aXZlIHZhbHVlcyxcblx0XHRcdFx0Ly8gYmVjYXVzZSBpbiB0aGUgZW5kIG9mIHRoZSBncmVnb3JpYW4geWVhciB3ZSBzdWJzdHJhY3Rcblx0XHRcdFx0Ly8gMzY1IC8gMzY2IGRheXMgKFAuUy4gcmVtZW1iZXIgbWF0aCBpbiBzY2hvb2wgKyAtIGdpdmVzIC0pXG5cdFx0XHRcdGlmIChncmVnb3JpYW5EYXlPZlllYXIgPD0gMCkge1xuXHRcdFx0XHRcdGdyZWdvcmlhbkRheU9mWWVhciArPSAoZ3JlZ29yaWFuQ2FsZW5kYXIubGVhcFllYXIoZ3JlZ29yaWFuWWVhcikgPyAzNjYgOiAzNjUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Z3JlZ29yaWFuRGF5T2ZZZWFyICs9IHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbmVwYWxpWWVhclRvQ2hlY2tdWzldIC1cblx0XHRcdFx0XHR0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW25lcGFsaVllYXJUb0NoZWNrXVswXTtcblx0XHRcdH1cdFx0XG5cdFx0XHRyZXR1cm4gZ3JlZ29yaWFuQ2FsZW5kYXIubmV3RGF0ZShncmVnb3JpYW5ZZWFyLCAxICwxKS5hZGQoZ3JlZ29yaWFuRGF5T2ZZZWFyLCAnZCcpLnRvSkQoKTtcblx0XHR9LFxuXHRcdFxuXHRcdC8qKiBDcmVhdGUgYSBuZXcgZGF0ZSBmcm9tIGEgSnVsaWFuIGRhdGUuXG5cdFx0XHRAbWVtYmVyb2YgTmVwYWxpQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSBqZCB7bnVtYmVyfSBUaGUgSnVsaWFuIGRhdGUgdG8gY29udmVydC5cblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgZXF1aXZhbGVudCBkYXRlLiAqL1xuXHRcdGZyb21KRDogZnVuY3Rpb24oamQpIHtcblx0XHRcdHZhciBncmVnb3JpYW5DYWxlbmRhciA9ICAkLmNhbGVuZGFycy5pbnN0YW5jZSgpO1xuXHRcdFx0dmFyIGdyZWdvcmlhbkRhdGUgPSBncmVnb3JpYW5DYWxlbmRhci5mcm9tSkQoamQpO1xuXHRcdFx0dmFyIGdyZWdvcmlhblllYXIgPSBncmVnb3JpYW5EYXRlLnllYXIoKTtcblx0XHRcdHZhciBncmVnb3JpYW5EYXlPZlllYXIgPSBncmVnb3JpYW5EYXRlLmRheU9mWWVhcigpO1xuXHRcdFx0dmFyIG5lcGFsaVllYXIgPSBncmVnb3JpYW5ZZWFyICsgNTY7IC8vdGhpcyBpcyBub3QgZmluYWwsIGl0IGNvdWxkIGJlIGFsc28gKzU3IGJ1dCArNTYgaXMgYWx3YXlzIHRydWUgZm9yIDFzdCBKYW4uXG5cdFx0XHR0aGlzLl9jcmVhdGVNaXNzaW5nQ2FsZW5kYXJEYXRhKG5lcGFsaVllYXIpO1xuXHRcdFx0dmFyIG5lcGFsaU1vbnRoID0gOTsgLy8gSmFuIDEgYWx3YXlzIGZhbGwgaW4gTmVwYWxpIG1vbnRoIFBhdXNoIHdoaWNoIGlzIHRoZSA5dGggbW9udGggb2YgTmVwYWxpIGNhbGVuZGFyLlxuXHRcdFx0Ly8gR2V0IHRoZSBOZXBhbGkgZGF5IGluIFBhdXNoIChtb250aCA5KSBvZiAxc3QgSmFudWFyeSBcblx0XHRcdHZhciBkYXlPZkZpcnN0SmFuSW5QYXVzaCA9IHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbmVwYWxpWWVhcl1bMF07XG5cdFx0XHQvLyBDaGVjayBob3cgbWFueSBkYXlzIGFyZSBsZWZ0IG9mIFBhdXNoIC5cblx0XHRcdC8vIERheXMgY2FsY3VsYXRlZCBmcm9tIDFzdCBKYW4gdGlsbCB0aGUgZW5kIG9mIHRoZSBhY3R1YWwgTmVwYWxpIG1vbnRoLCBcblx0XHRcdC8vIHdlIHVzZSB0aGlzIHZhbHVlIHRvIGNoZWNrIGlmIHRoZSBncmVnb3JpYW4gRGF0ZSBpcyBpbiB0aGUgYWN0dWFsIE5lcGFsaSBtb250aC5cblx0XHRcdHZhciBkYXlzU2luY2VKYW5GaXJzdFRvRW5kT2ZOZXBhbGlNb250aCA9XG5cdFx0XHRcdHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbmVwYWxpWWVhcl1bbmVwYWxpTW9udGhdIC0gZGF5T2ZGaXJzdEphbkluUGF1c2ggKyAxO1xuXHRcdFx0Ly8gSWYgdGhlIGdyZWdvcmlhbiBkYXktb2YteWVhciBpcyBzbWFsbGVyIG8gZXF1YWwgdGhhbiB0aGUgc3VtIG9mIGRheXMgYmV0d2VlbiB0aGUgMXN0IEphbnVhcnkgYW5kIFxuXHRcdFx0Ly8gdGhlIGVuZCBvZiB0aGUgYWN0dWFsIG5lcGFsaSBtb250aCB3ZSBmb3VuZCB0aGUgY29ycmVjdCBuZXBhbGkgbW9udGguXG5cdFx0XHQvLyBFeGFtcGxlOiBcblx0XHRcdC8vIFRoZSA0dGggRmVicnVhcnkgMjAxMSBpcyB0aGUgZ3JlZ29yaWFuRGF5T2ZZZWFyIDM1ICgzMSBkYXlzIG9mIEphbnVhcnkgKyA0KVxuXHRcdFx0Ly8gMXN0IEphbnVhcnkgMjAxMSBpcyBpbiB0aGUgbmVwYWxpIHllYXIgMjA2Nywgd2hlcmUgMXN0LiBKYW51YXJ5IGlzIGluIHRoZSAxN3RoIGRheSBvZiBQYXVzaCAoOXRoIG1vbnRoKVxuXHRcdFx0Ly8gSW4gMjA2NyBQYXVzaCBoYXMgMzBkYXlzLCBUaGlzIG1lYW5zICgzMC0xNysxPTE0KSB0aGVyZSBhcmUgMTRkYXlzIGJldHdlZW4gMXN0IEphbnVhcnkgYW5kIGVuZCBvZiBQYXVzaCBcblx0XHRcdC8vIChpbmNsdWRpbmcgMTd0aCBKYW51YXJ5KVxuXHRcdFx0Ly8gVGhlIGdyZWdvcmlhbkRheU9mWWVhciAoMzUpIGlzIGJpZ2dlciB0aGFuIDE0LCBzbyB3ZSBjaGVjayB0aGUgbmV4dCBtb250aFxuXHRcdFx0Ly8gVGhlIG5leHQgbmVwYWxpIG1vbnRoIChNYW5naCkgaGFzIDI5IGRheXMgXG5cdFx0XHQvLyAyOSsxND00MywgdGhpcyBpcyBiaWdnZXIgdGhhbiBncmVnb3JpYW5EYXlPZlllYXIoMzUpIHNvLCB3ZSBmb3VuZCB0aGUgY29ycmVjdCBuZXBhbGkgbW9udGhcblx0XHRcdHdoaWxlIChncmVnb3JpYW5EYXlPZlllYXIgPiBkYXlzU2luY2VKYW5GaXJzdFRvRW5kT2ZOZXBhbGlNb250aCkge1xuXHRcdFx0XHRuZXBhbGlNb250aCsrO1xuXHRcdFx0XHRpZiAobmVwYWxpTW9udGggPiAxMikge1xuXHRcdFx0XHRcdG5lcGFsaU1vbnRoID0gMTtcblx0XHRcdFx0XHRuZXBhbGlZZWFyKys7XG5cdFx0XHRcdH1cdFxuXHRcdFx0XHRkYXlzU2luY2VKYW5GaXJzdFRvRW5kT2ZOZXBhbGlNb250aCArPSB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW25lcGFsaVllYXJdW25lcGFsaU1vbnRoXTtcblx0XHRcdH1cblx0XHRcdC8vIFRoZSBsYXN0IHN0ZXAgaXMgdG8gY2FsY3VsYXRlIHRoZSBuZXBhbGkgZGF5LW9mLW1vbnRoXG5cdFx0XHQvLyB0byBjb250aW51ZSBvdXIgZXhhbXBsZSBmcm9tIGJlZm9yZTpcblx0XHRcdC8vIHdlIGNhbGN1bGF0ZWQgdGhlcmUgYXJlIDQzIGRheXMgZnJvbSAxc3QuIEphbnVhcnkgKDE3IFBhdXNoKSB0aWxsIGVuZCBvZiBNYW5naCAoMjkgZGF5cylcblx0XHRcdC8vIHdoZW4gd2Ugc3VidHJhY3QgZnJvbSB0aGlzIDQzIGRheXMgdGhlIGRheS1vZi15ZWFyIG9mIHRoZSB0aGUgR3JlZ29yaWFuIGRhdGUgKDM1KSxcblx0XHRcdC8vIHdlIGtub3cgaG93IGZhciB0aGUgc2VhcmNoZWQgZGF5IGlzIGF3YXkgZnJvbSB0aGUgZW5kIG9mIHRoZSBOZXBhbGkgbW9udGguXG5cdFx0XHQvLyBTbyB3ZSBzaW1wbHkgc3VidHJhY3QgdGhpcyBudW1iZXIgZnJvbSB0aGUgYW1vdW50IG9mIGRheXMgaW4gdGhpcyBtb250aCAoMzApIFxuXHRcdFx0dmFyIG5lcGFsaURheU9mTW9udGggPSB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW25lcGFsaVllYXJdW25lcGFsaU1vbnRoXSAtXG5cdFx0XHRcdChkYXlzU2luY2VKYW5GaXJzdFRvRW5kT2ZOZXBhbGlNb250aCAtIGdyZWdvcmlhbkRheU9mWWVhcik7XHRcdFxuXHRcdFx0cmV0dXJuIHRoaXMubmV3RGF0ZShuZXBhbGlZZWFyLCBuZXBhbGlNb250aCwgbmVwYWxpRGF5T2ZNb250aCk7XG5cdFx0fSxcblx0XHRcblx0XHQvKiogQ3JlYXRlcyBtaXNzaW5nIGRhdGEgaW4gdGhlIE5FUEFMSV9DQUxFTkRBUl9EQVRBIHRhYmxlLlxuXHRcdFx0VGhpcyBkYXRhIHdpbGwgbm90IGJlIGNvcnJlY3QgYnV0IGp1c3QgZ2l2ZSBhbiBlc3RpbWF0ZWQgcmVzdWx0LiBNb3N0bHkgLS8rIDEgZGF5XG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIG5lcGFsaVllYXIge251bWJlcn0gVGhlIG1pc3NpbmcgeWVhciBudW1iZXIuICovXG5cdFx0X2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGE6IGZ1bmN0aW9uKG5lcGFsaVllYXIpIHtcblx0XHRcdHZhciB0bXBfY2FsZW5kYXJfZGF0YSA9IHRoaXMuZGF5c1Blck1vbnRoLnNsaWNlKDApO1xuXHRcdFx0dG1wX2NhbGVuZGFyX2RhdGEudW5zaGlmdCgxNyk7XG5cdFx0XHRmb3IgKHZhciBuZXBhbGlZZWFyVG9DcmVhdGUgPSAobmVwYWxpWWVhciAtIDEpOyBuZXBhbGlZZWFyVG9DcmVhdGUgPCAobmVwYWxpWWVhciArIDIpOyBuZXBhbGlZZWFyVG9DcmVhdGUrKykge1xuXHRcdFx0XHRpZiAodHlwZW9mIHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbmVwYWxpWWVhclRvQ3JlYXRlXSA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0XHR0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW25lcGFsaVllYXJUb0NyZWF0ZV0gPSB0bXBfY2FsZW5kYXJfZGF0YTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0XG5cdFx0TkVQQUxJX0NBTEVOREFSX0RBVEE6ICB7XG5cdFx0XHQvLyBUaGVzZSBkYXRhIGFyZSBmcm9tIGh0dHA6Ly93d3cuYXNoZXNoLmNvbS5ucFxuXHRcdFx0MTk3MDogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDE5NzE6IFsxOCwgMzEsIDMxLCAzMiwgMzEsIDMyLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQxOTcyOiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDI5LCAzMCwgMzBdLFxuXHRcdFx0MTk3MzogWzE5LCAzMCwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMxXSxcblx0XHRcdDE5NzQ6IFsxOSwgMzEsIDMxLCAzMiwgMzAsIDMxLCAzMSwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQxOTc1OiBbMTgsIDMxLCAzMSwgMzIsIDMyLCAzMCwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MTk3NjogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcblx0XHRcdDE5Nzc6IFsxOCwgMzEsIDMyLCAzMSwgMzIsIDMxLCAzMSwgMjksIDMwLCAyOSwgMzAsIDI5LCAzMV0sXG5cdFx0XHQxOTc4OiBbMTgsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MTk3OTogWzE4LCAzMSwgMzEsIDMyLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDE5ODA6IFsxNywgMzEsIDMyLCAzMSwgMzIsIDMxLCAzMCwgMzAsIDMwLCAyOSwgMjksIDMwLCAzMV0sXG5cdFx0XHQxOTgxOiBbMTgsIDMxLCAzMSwgMzEsIDMyLCAzMSwgMzEsIDI5LCAzMCwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MTk4MjogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDE5ODM6IFsxOCwgMzEsIDMxLCAzMiwgMzIsIDMxLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQxOTg0OiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDI5LCAzMCwgMzFdLFxuXHRcdFx0MTk4NTogWzE4LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAyOSwgMzAsIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDE5ODY6IFsxOCwgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMSwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQxOTg3OiBbMTgsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MTk4ODogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcblx0XHRcdDE5ODk6IFsxOCwgMzEsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQxOTkwOiBbMTgsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MTk5MTogWzE4LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcdFxuXHRcdFx0Ly8gVGhlc2UgZGF0YSBhcmUgZnJvbSBodHRwOi8vbmVwYWxpY2FsZW5kYXIucmF0MzIuY29tL2luZGV4LnBocFxuXHRcdFx0MTk5MjogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMxXSxcblx0XHRcdDE5OTM6IFsxOCwgMzEsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQxOTk0OiBbMTgsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MTk5NTogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMwXSxcblx0XHRcdDE5OTY6IFsxNywgMzEsIDMyLCAzMSwgMzIsIDMxLCAzMCwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMV0sXG5cdFx0XHQxOTk3OiBbMTgsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MTk5ODogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDE5OTk6IFsxNywgMzEsIDMyLCAzMSwgMzIsIDMxLCAzMCwgMzAsIDMwLCAyOSwgMjksIDMwLCAzMV0sXG5cdFx0XHQyMDAwOiBbMTcsIDMwLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzFdLFxuXHRcdFx0MjAwMTogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwMDI6IFsxOCwgMzEsIDMxLCAzMiwgMzIsIDMxLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQyMDAzOiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDI5LCAzMCwgMzFdLFxuXHRcdFx0MjAwNDogWzE3LCAzMCwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMxXSxcblx0XHRcdDIwMDU6IFsxOCwgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMSwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQyMDA2OiBbMTgsIDMxLCAzMSwgMzIsIDMyLCAzMSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjAwNzogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcblx0XHRcdDIwMDg6IFsxNywgMzEsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMjksIDMwLCAzMCwgMjksIDI5LCAzMV0sXG5cdFx0XHQyMDA5OiBbMTgsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjAxMDogWzE4LCAzMSwgMzEsIDMyLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwMTE6IFsxNywgMzEsIDMyLCAzMSwgMzIsIDMxLCAzMCwgMzAsIDMwLCAyOSwgMjksIDMwLCAzMV0sXG5cdFx0XHQyMDEyOiBbMTcsIDMxLCAzMSwgMzEsIDMyLCAzMSwgMzEsIDI5LCAzMCwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjAxMzogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwMTQ6IFsxOCwgMzEsIDMxLCAzMiwgMzIsIDMxLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQyMDE1OiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDI5LCAzMCwgMzFdLFxuXHRcdFx0MjAxNjogWzE3LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAyOSwgMzAsIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwMTc6IFsxOCwgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMSwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQyMDE4OiBbMTgsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjAxOTogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMxXSxcblx0XHRcdDIwMjA6IFsxNywgMzEsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQyMDIxOiBbMTgsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjAyMjogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwMjM6IFsxNywgMzEsIDMyLCAzMSwgMzIsIDMxLCAzMCwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMV0sXG5cdFx0XHQyMDI0OiBbMTcsIDMxLCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjAyNTogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwMjY6IFsxNywgMzEsIDMyLCAzMSwgMzIsIDMxLCAzMCwgMzAsIDMwLCAyOSwgMjksIDMwLCAzMV0sXG5cdFx0XHQyMDI3OiBbMTcsIDMwLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzFdLFxuXHRcdFx0MjAyODogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwMjk6IFsxOCwgMzEsIDMxLCAzMiwgMzEsIDMyLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQyMDMwOiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzFdLFxuXHRcdFx0MjAzMTogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxXSxcblx0XHRcdDIwMzI6IFsxNywgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMl0sXG5cdFx0XHQyMDMzOiBbMTgsIDMxLCAzMSwgMzIsIDMyLCAzMSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjAzNDogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcblx0XHRcdDIwMzU6IFsxNywgMzAsIDMyLCAzMSwgMzIsIDMxLCAzMSwgMjksIDMwLCAzMCwgMjksIDI5LCAzMV0sXG5cdFx0XHQyMDM2OiBbMTcsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjAzNzogWzE4LCAzMSwgMzEsIDMyLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwMzg6IFsxNywgMzEsIDMyLCAzMSwgMzIsIDMxLCAzMCwgMzAsIDMwLCAyOSwgMjksIDMwLCAzMV0sXG5cdFx0XHQyMDM5OiBbMTcsIDMxLCAzMSwgMzEsIDMyLCAzMSwgMzEsIDI5LCAzMCwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjA0MDogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwNDE6IFsxOCwgMzEsIDMxLCAzMiwgMzIsIDMxLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQyMDQyOiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDI5LCAzMCwgMzFdLFxuXHRcdFx0MjA0MzogWzE3LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAyOSwgMzAsIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwNDQ6IFsxNywgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMSwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQyMDQ1OiBbMTgsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjA0NjogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcblx0XHRcdDIwNDc6IFsxNywgMzEsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQyMDQ4OiBbMTcsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjA0OTogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwNTA6IFsxNywgMzEsIDMyLCAzMSwgMzIsIDMxLCAzMCwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMV0sXG5cdFx0XHQyMDUxOiBbMTcsIDMxLCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjA1MjogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwNTM6IFsxNywgMzEsIDMyLCAzMSwgMzIsIDMxLCAzMCwgMzAsIDMwLCAyOSwgMjksIDMwLCAzMF0sXG5cdFx0XHQyMDU0OiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzFdLFxuXHRcdFx0MjA1NTogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAzMCwgMjksIDMwXSxcblx0XHRcdDIwNTY6IFsxNywgMzEsIDMxLCAzMiwgMzEsIDMyLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQyMDU3OiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDI5LCAzMCwgMzFdLFxuXHRcdFx0MjA1ODogWzE3LCAzMCwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMxXSxcblx0XHRcdDIwNTk6IFsxNywgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMSwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQyMDYwOiBbMTcsIDMxLCAzMSwgMzIsIDMyLCAzMSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjA2MTogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcblx0XHRcdDIwNjI6IFsxNywgMzAsIDMyLCAzMSwgMzIsIDMxLCAzMSwgMjksIDMwLCAyOSwgMzAsIDI5LCAzMV0sXG5cdFx0XHQyMDYzOiBbMTcsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjA2NDogWzE3LCAzMSwgMzEsIDMyLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwNjU6IFsxNywgMzEsIDMyLCAzMSwgMzIsIDMxLCAzMCwgMzAsIDMwLCAyOSwgMjksIDMwLCAzMV0sXG5cdFx0XHQyMDY2OiBbMTcsIDMxLCAzMSwgMzEsIDMyLCAzMSwgMzEsIDI5LCAzMCwgMzAsIDI5LCAyOSwgMzFdLFxuXHRcdFx0MjA2NzogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwNjg6IFsxNywgMzEsIDMxLCAzMiwgMzIsIDMxLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQyMDY5OiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDI5LCAzMCwgMzFdLFxuXHRcdFx0MjA3MDogWzE3LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAyOSwgMzAsIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwNzE6IFsxNywgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMSwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQyMDcyOiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjA3MzogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcblx0XHRcdDIwNzQ6IFsxNywgMzEsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzAsIDI5LCAzMCwgMjksIDMwLCAzMF0sXG5cdFx0XHQyMDc1OiBbMTcsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjA3NjogWzE2LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwNzc6IFsxNywgMzEsIDMyLCAzMSwgMzIsIDMxLCAzMCwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMV0sXG5cdFx0XHQyMDc4OiBbMTcsIDMxLCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjA3OTogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcblx0XHRcdDIwODA6IFsxNiwgMzEsIDMyLCAzMSwgMzIsIDMxLCAzMCwgMzAsIDMwLCAyOSwgMjksIDMwLCAzMF0sXG5cdFx0XHQvLyBUaGVzZSBkYXRhIGFyZSBmcm9tIGh0dHA6Ly93d3cuYXNoZXNoLmNvbS5ucC9uZXBhbGktY2FsZW5kYXIvXG5cdFx0XHQyMDgxOiBbMTcsIDMxLCAzMSwgMzIsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxuXHRcdFx0MjA4MjogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMzAsIDMwXSxcblx0XHRcdDIwODM6IFsxNywgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMCwgMzAsIDMwLCAyOSwgMzAsIDMwLCAzMF0sXG5cdFx0XHQyMDg0OiBbMTcsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxuXHRcdFx0MjA4NTogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMxLCAzMCwgMzAsIDI5LCAzMCwgMzAsIDMwXSxcblx0XHRcdDIwODY6IFsxNywgMzEsIDMyLCAzMSwgMzIsIDMxLCAzMCwgMzAsIDMwLCAyOSwgMzAsIDMwLCAzMF0sXG5cdFx0XHQyMDg3OiBbMTYsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxuXHRcdFx0MjA4ODogWzE2LCAzMCwgMzEsIDMyLCAzMiwgMzAsIDMxLCAzMCwgMzAsIDI5LCAzMCwgMzAsIDMwXSxcblx0XHRcdDIwODk6IFsxNywgMzEsIDMyLCAzMSwgMzIsIDMxLCAzMCwgMzAsIDMwLCAyOSwgMzAsIDMwLCAzMF0sXG5cdFx0XHQyMDkwOiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxuXHRcdFx0MjA5MTogWzE2LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMzAsIDI5LCAzMCwgMzAsIDMwXSxcblx0XHRcdDIwOTI6IFsxNiwgMzEsIDMxLCAzMiwgMzIsIDMxLCAzMCwgMzAsIDMwLCAyOSwgMzAsIDMwLCAzMF0sXG5cdFx0XHQyMDkzOiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxuXHRcdFx0MjA5NDogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMzAsIDMwXSxcblx0XHRcdDIwOTU6IFsxNywgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMSwgMzAsIDI5LCAzMCwgMzAsIDMwLCAzMF0sXG5cdFx0XHQyMDk2OiBbMTcsIDMwLCAzMSwgMzIsIDMyLCAzMSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxuXHRcdFx0MjA5NzogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMzAsIDMwXSxcblx0XHRcdDIwOTg6IFsxNywgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMSwgMjksIDMwLCAyOSwgMzAsIDMwLCAzMV0sXG5cdFx0XHQyMDk5OiBbMTcsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMjksIDMwLCAzMCwgMzBdLFxuXHRcdFx0MjEwMDogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzAsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXVx0XG5cdFx0fVxuXHR9KTtcdFxuXG5cdC8vIE5lcGFsaSBjYWxlbmRhciBpbXBsZW1lbnRhdGlvblxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMubmVwYWxpID0gTmVwYWxpQ2FsZW5kYXI7XG5cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMubmVwYWxpLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMubmVwYWxpLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBOZXBhbGkgY2FsZW5kYXIgZm9yIGpRdWVyeSB2Mi4wLjEuXHJcbiAgIFdyaXR0ZW4gYnkgQXJ0dXIgTmV1bWFubiAoaWN0LnByb2plY3Rze2F0fW5lcGFsLmluZi5vcmcpIEFwcmlsIDIwMTMuXHJcbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXHJcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xyXG5cclxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxyXG5cclxuXHQvKiogSW1wbGVtZW50YXRpb24gb2YgdGhlIE5lcGFsaSBjaXZpbCBjYWxlbmRhci5cclxuXHRcdEJhc2VkIG9uIHRoZSBpZGVhcyBmcm9tIFxyXG5cdFx0PGEgaHJlZj1cImh0dHA6Ly9jb2RlaXNzdWUuY29tL2FydGljbGVzL2EwNGUwNTBkZWE3NDY4Zi9hbGdvcml0aG0tdG8tY29udmVydC1lbmdsaXNoLWRhdGUtdG8tbmVwYWxpLWRhdGUtdXNpbmctYy1uZXRcIj5odHRwOi8vY29kZWlzc3VlLmNvbS9hcnRpY2xlcy9hMDRlMDUwZGVhNzQ2OGYvYWxnb3JpdGhtLXRvLWNvbnZlcnQtZW5nbGlzaC1kYXRlLXRvLW5lcGFsaS1kYXRlLXVzaW5nLWMtbmV0PC9hPlxyXG5cdFx0YW5kIDxhIGhyZWY9XCJodHRwOi8vYmlyZW5qMmVlLmJsb2dzcG90LmNvbS8yMDExLzA0L25lcGFsaS1jYWxlbmRhci1pbi1qYXZhLmh0bWxcIj5odHRwOi8vYmlyZW5qMmVlLmJsb2dzcG90LmNvbS8yMDExLzA0L25lcGFsaS1jYWxlbmRhci1pbi1qYXZhLmh0bWw8L2E+XHJcblx0XHRTZWUgYWxzbyA8YSBocmVmPVwiaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9OZXBhbGlfY2FsZW5kYXJcIj5odHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05lcGFsaV9jYWxlbmRhcjwvYT5cclxuXHRcdGFuZCA8YSBocmVmPVwiaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmlrcmFtX1NhbXdhdFwiPmh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jpa3JhbV9TYW13YXQ8L2E+LlxyXG5cdFx0QGNsYXNzIE5lcGFsaUNhbGVuZGFyXHJcblx0XHRAcGFyYW0gW2xhbmd1YWdlPScnXSB7c3RyaW5nfSBUaGUgbGFuZ3VhZ2UgY29kZSAoZGVmYXVsdCBFbmdsaXNoKSBmb3IgbG9jYWxpc2F0aW9uLiAqL1xyXG5cdGZ1bmN0aW9uIE5lcGFsaUNhbGVuZGFyKGxhbmd1YWdlKSB7XHJcblx0XHR0aGlzLmxvY2FsID0gdGhpcy5yZWdpb25hbE9wdGlvbnNbbGFuZ3VhZ2UgfHwgJyddIHx8IHRoaXMucmVnaW9uYWxPcHRpb25zWycnXTtcclxuXHR9XHJcblxyXG5cdE5lcGFsaUNhbGVuZGFyLnByb3RvdHlwZSA9IG5ldyAkLmNhbGVuZGFycy5iYXNlQ2FsZW5kYXI7XHJcblxyXG5cdCQuZXh0ZW5kKE5lcGFsaUNhbGVuZGFyLnByb3RvdHlwZSwge1xyXG5cdFx0LyoqIFRoZSBjYWxlbmRhciBuYW1lLlxyXG5cdFx0XHRAbWVtYmVyb2YgTmVwYWxpQ2FsZW5kYXIgKi9cclxuXHRcdG5hbWU6ICdOZXBhbGknLFxyXG5cdFx0LyoqIEp1bGlhbiBkYXRlIG9mIHN0YXJ0IG9mIE5lcGFsaSBlcG9jaDogMTQgQXByaWwgNTcgQkNFLlxyXG5cdFx0XHRAbWVtYmVyb2YgTmVwYWxpQ2FsZW5kYXIgKi9cclxuXHRcdGpkRXBvY2g6IDE3MDA3MDkuNSxcclxuXHRcdC8qKiBEYXlzIHBlciBtb250aCBpbiBhIGNvbW1vbiB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgTmVwYWxpQ2FsZW5kYXIgKi9cclxuXHRcdGRheXNQZXJNb250aDogWzMxLCAzMSwgMzIsIDMyLCAzMSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxyXG5cdFx0LyoqIDxjb2RlPnRydWU8L2NvZGU+IGlmIGhhcyBhIHllYXIgemVybywgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QG1lbWJlcm9mIE5lcGFsaUNhbGVuZGFyICovXHJcblx0XHRoYXNZZWFyWmVybzogZmFsc2UsXHJcblx0XHQvKiogVGhlIG1pbmltdW0gbW9udGggbnVtYmVyLlxyXG5cdFx0XHRAbWVtYmVyb2YgTmVwYWxpQ2FsZW5kYXIgKi9cclxuXHRcdG1pbk1vbnRoOiAxLFxyXG5cdFx0LyoqIFRoZSBmaXJzdCBtb250aCBpbiB0aGUgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIE5lcGFsaUNhbGVuZGFyICovXHJcblx0XHRmaXJzdE1vbnRoOiAxLFxyXG5cdFx0LyoqIFRoZSBtaW5pbXVtIGRheSBudW1iZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBOZXBhbGlDYWxlbmRhciAqL1xyXG5cdFx0bWluRGF5OiAxLCBcclxuXHRcdC8qKiBUaGUgbnVtYmVyIG9mIGRheXMgaW4gdGhlIHllYXIuXHJcblx0XHRcdEBtZW1iZXJvZiBOZXBhbGlDYWxlbmRhciAqL1xyXG5cdFx0ZGF5c1BlclllYXI6IDM2NSxcclxuXHJcblx0XHQvKiogTG9jYWxpc2F0aW9ucyBmb3IgdGhlIHBsdWdpbi5cclxuXHRcdFx0RW50cmllcyBhcmUgb2JqZWN0cyBpbmRleGVkIGJ5IHRoZSBsYW5ndWFnZSBjb2RlICgnJyBiZWluZyB0aGUgZGVmYXVsdCBVUy9FbmdsaXNoKS5cclxuXHRcdFx0RWFjaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcy5cclxuXHRcdFx0QG1lbWJlcm9mIE5lcGFsaUNhbGVuZGFyXHJcblx0XHRcdEBwcm9wZXJ0eSBuYW1lIHtzdHJpbmd9IFRoZSBjYWxlbmRhciBuYW1lLlxyXG5cdFx0XHRAcHJvcGVydHkgZXBvY2hzIHtzdHJpbmdbXX0gVGhlIGVwb2NoIG5hbWVzLlxyXG5cdFx0XHRAcHJvcGVydHkgbW9udGhOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBtb250aHMgb2YgdGhlIHllYXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cclxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lc1Nob3J0IHtzdHJpbmdbXX0gVGhlIHNob3J0IG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNNaW4ge3N0cmluZ1tdfSBUaGUgbWluaW1hbCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cclxuXHRcdFx0QHByb3BlcnR5IGRhdGVGb3JtYXQge3N0cmluZ30gVGhlIGRhdGUgZm9ybWF0IGZvciB0aGlzIGNhbGVuZGFyLlxyXG5cdFx0XHRcdFx0U2VlIHRoZSBvcHRpb25zIG9uIDxhIGhyZWY9XCJCYXNlQ2FsZW5kYXIuaHRtbCNmb3JtYXREYXRlXCI+PGNvZGU+Zm9ybWF0RGF0ZTwvY29kZT48L2E+IGZvciBkZXRhaWxzLlxyXG5cdFx0XHRAcHJvcGVydHkgZmlyc3REYXkge251bWJlcn0gVGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBzdGFydGluZyBhdCAwLlxyXG5cdFx0XHRAcHJvcGVydHkgaXNSVEwge251bWJlcn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBsb2NhbGlzYXRpb24gcmVhZHMgcmlnaHQtdG8tbGVmdC4gKi9cclxuXHRcdHJlZ2lvbmFsT3B0aW9uczogeyAvLyBMb2NhbGlzYXRpb25zXHJcblx0XHRcdCcnOiB7XHJcblx0XHRcdFx0bmFtZTogJ05lcGFsaScsXHJcblx0XHRcdFx0ZXBvY2hzOiBbJ0JCUycsICdBQlMnXSxcclxuXHRcdFx0XHRtb250aE5hbWVzOiBbJ0JhaXNha2gnLCAnSmVzdGhhJywgJ0FzaGFkaCcsICdTaHJhd2FuJywgJ0JoYWRyYScsICdBc2h3aW4nLFxyXG5cdFx0XHRcdCdLYXJ0aWsnLCAnTWFuZ3NpcicsICdQYXVzaCcsICdNYW5naCcsICdGYWxndW4nLCAnQ2hhaXRyYSddLFxyXG5cdFx0XHRcdG1vbnRoTmFtZXNTaG9ydDogWydCYWknLCAnSmUnLCAnQXMnLCAnU2hyYScsICdCaGEnLCAnQXNoJywgJ0thcicsICdNYW5nJywgJ1BhdScsICdNYScsICdGYWwnLCAnQ2hhaSddLFxyXG5cdFx0XHRcdGRheU5hbWVzOiBbJ0FhaXRhYmFhcicsICdTb21iYWFyJywgJ01hbmdsYmFhcicsICdCdWRoYWJhYXInLCAnQmloaWJhYXInLCAnU2h1a3JhYmFhcicsICdTaGFuaWJhYXInXSxcclxuXHRcdFx0XHRkYXlOYW1lc1Nob3J0OiBbJ0FhaXRhJywgJ1NvbScsICdNYW5nbCcsICdCdWRoYScsICdCaWhpJywgJ1NodWtyYScsICdTaGFuaSddLFxyXG5cdFx0XHRcdGRheU5hbWVzTWluOiBbJ0FhaScsICdTbycsICdNYW4nLCAnQnUnLCAnQmknLCAnU2h1JywgJ1NoYSddLFxyXG5cdFx0XHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuXHRcdFx0XHRmaXJzdERheTogMSxcclxuXHRcdFx0XHRpc1JUTDogZmFsc2VcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGluIGEgbGVhcCB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgTmVwYWxpQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGlzIGEgbGVhcCB5ZWFyLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0bGVhcFllYXI6IGZ1bmN0aW9uKHllYXIpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZGF5c0luWWVhcih5ZWFyKSAhPT0gdGhpcy5kYXlzUGVyWWVhcjtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB0aGUgd2VlayBvZiB0aGUgeWVhciBmb3IgYSBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgTmVwYWxpQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgd2VlayBvZiB0aGUgeWVhci5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdHdlZWtPZlllYXI6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcclxuXHRcdFx0Ly8gRmluZCBTdW5kYXkgb2YgdGhpcyB3ZWVrIHN0YXJ0aW5nIG9uIFN1bmRheVxyXG5cdFx0XHR2YXIgY2hlY2tEYXRlID0gdGhpcy5uZXdEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xyXG5cdFx0XHRjaGVja0RhdGUuYWRkKC1jaGVja0RhdGUuZGF5T2ZXZWVrKCksICdkJyk7XHJcblx0XHRcdHJldHVybiBNYXRoLmZsb29yKChjaGVja0RhdGUuZGF5T2ZZZWFyKCkgLSAxKSAvIDcpICsgMTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBhIHllYXIuXHJcblx0XHRcdEBtZW1iZXJvZiBOZXBhbGlDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgeWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZGF5c0luWWVhcjogZnVuY3Rpb24oeWVhcikge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIHRoaXMubWluTW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhcik7XHJcblx0XHRcdHllYXIgPSBkYXRlLnllYXIoKTtcclxuXHRcdFx0aWYgKHR5cGVvZiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3llYXJdID09PSAndW5kZWZpbmVkJykge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmRheXNQZXJZZWFyO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBkYXlzUGVyWWVhciA9IDA7XHJcblx0XHRcdGZvciAodmFyIG1vbnRoX251bWJlciA9IHRoaXMubWluTW9udGg7IG1vbnRoX251bWJlciA8PSAxMjsgbW9udGhfbnVtYmVyKyspIHtcclxuXHRcdFx0XHRkYXlzUGVyWWVhciArPSB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3llYXJdW21vbnRoX251bWJlcl07XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGRheXNQZXJZZWFyO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgbW9udGguXHJcblx0XHRcdEBtZW1iZXJvZiBOZXBhbGlDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfCBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIG9mIHRoZSBtb250aC5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIG1vbnRoLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgbW9udGgveWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0ZGF5c0luTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XHJcblx0XHRcdGlmICh5ZWFyLnllYXIpIHtcclxuXHRcdFx0XHRtb250aCA9IHllYXIubW9udGgoKTtcclxuXHRcdFx0XHR5ZWFyID0geWVhci55ZWFyKCk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkTW9udGgpO1xyXG5cdFx0XHRyZXR1cm4gKHR5cGVvZiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3llYXJdID09PSAndW5kZWZpbmVkJyA/XHJcblx0XHRcdFx0dGhpcy5kYXlzUGVyTW9udGhbbW9udGggLSAxXSA6IHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbeWVhcl1bbW9udGhdKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBhIHdlZWsgZGF5LlxyXG5cdFx0XHRAbWVtYmVyb2YgTmVwYWxpQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYSB3ZWVrIGRheSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdHdlZWtEYXk6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZGF5T2ZXZWVrKHllYXIsIG1vbnRoLCBkYXkpICE9PSA2O1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIEp1bGlhbiBkYXRlIGVxdWl2YWxlbnQgZm9yIHRoaXMgZGF0ZSxcclxuXHRcdFx0aS5lLiBkYXlzIHNpbmNlIEphbnVhcnkgMSwgNDcxMyBCQ0UgR3JlZW53aWNoIG5vb24uXHJcblx0XHRcdEBtZW1iZXJvZiBOZXBhbGlDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb252ZXJ0IG9yIHRoZSB5ZWFyIHRvIGNvbnZlcnQuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBlcXVpdmFsZW50IEp1bGlhbiBkYXRlLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0dG9KRDogZnVuY3Rpb24obmVwYWxpWWVhciwgbmVwYWxpTW9udGgsIG5lcGFsaURheSkge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKG5lcGFsaVllYXIsIG5lcGFsaU1vbnRoLCBuZXBhbGlEYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlKTtcclxuXHRcdFx0bmVwYWxpWWVhciA9IGRhdGUueWVhcigpO1xyXG5cdFx0XHRuZXBhbGlNb250aCA9IGRhdGUubW9udGgoKTtcclxuXHRcdFx0bmVwYWxpRGF5ID0gZGF0ZS5kYXkoKTtcclxuXHRcdFx0dmFyIGdyZWdvcmlhbkNhbGVuZGFyID0gJC5jYWxlbmRhcnMuaW5zdGFuY2UoKTtcclxuXHRcdFx0dmFyIGdyZWdvcmlhbkRheU9mWWVhciA9IDA7IC8vIFdlIHdpbGwgYWRkIGFsbCB0aGUgZGF5cyB0aGF0IHdlbnQgYnkgc2luY2VcclxuXHRcdFx0Ly8gdGhlIDFzdC4gSmFudWFyeSBhbmQgdGhlbiB3ZSBjYW4gZ2V0IHRoZSBHcmVnb3JpYW4gRGF0ZVxyXG5cdFx0XHR2YXIgbmVwYWxpTW9udGhUb0NoZWNrID0gbmVwYWxpTW9udGg7XHJcblx0XHRcdHZhciBuZXBhbGlZZWFyVG9DaGVjayA9IG5lcGFsaVllYXI7XHJcblx0XHRcdHRoaXMuX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGEobmVwYWxpWWVhcik7XHJcblx0XHRcdC8vIEdldCB0aGUgY29ycmVjdCB5ZWFyXHJcblx0XHRcdHZhciBncmVnb3JpYW5ZZWFyID0gbmVwYWxpWWVhciAtIChuZXBhbGlNb250aFRvQ2hlY2sgPiA5IHx8IChuZXBhbGlNb250aFRvQ2hlY2sgPT09IDkgJiZcclxuXHRcdFx0XHRuZXBhbGlEYXkgPj0gdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtuZXBhbGlZZWFyVG9DaGVja11bMF0pID8gNTYgOiA1Nyk7XHJcblx0XHRcdC8vIEZpcnN0IHdlIGFkZCB0aGUgYW1vdW50IG9mIGRheXMgaW4gdGhlIGFjdHVhbCBOZXBhbGkgbW9udGggYXMgdGhlIGRheSBvZiB5ZWFyIGluIHRoZVxyXG5cdFx0XHQvLyBHcmVnb3JpYW4gb25lIGJlY2F1c2UgYXQgbGVhc3QgdGhpcyBkYXlzIGFyZSBnb25lIHNpbmNlIHRoZSAxc3QuIEphbi4gXHJcblx0XHRcdGlmIChuZXBhbGlNb250aCAhPT0gOSkge1xyXG5cdFx0XHRcdGdyZWdvcmlhbkRheU9mWWVhciA9IG5lcGFsaURheTtcclxuXHRcdFx0XHRuZXBhbGlNb250aFRvQ2hlY2stLTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBOb3cgd2UgbG9vcCB0aHJvdyBhbGwgTmVwYWxpIG1vbnRoIGFuZCBhZGQgdGhlIGFtb3VudCBvZiBkYXlzIHRvIGdyZWdvcmlhbkRheU9mWWVhciBcclxuXHRcdFx0Ly8gd2UgZG8gdGhpcyB0aWxsIHdlIHJlYWNoIFBhdXNoICg5dGggbW9udGgpLiAxc3QuIEphbnVhcnkgYWx3YXlzIGZhbGxzIGluIHRoaXMgbW9udGggIFxyXG5cdFx0XHR3aGlsZSAobmVwYWxpTW9udGhUb0NoZWNrICE9PSA5KSB7XHJcblx0XHRcdFx0aWYgKG5lcGFsaU1vbnRoVG9DaGVjayA8PSAwKSB7XHJcblx0XHRcdFx0XHRuZXBhbGlNb250aFRvQ2hlY2sgPSAxMjtcclxuXHRcdFx0XHRcdG5lcGFsaVllYXJUb0NoZWNrLS07XHJcblx0XHRcdFx0fVx0XHRcdFx0XHJcblx0XHRcdFx0Z3JlZ29yaWFuRGF5T2ZZZWFyICs9IHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbmVwYWxpWWVhclRvQ2hlY2tdW25lcGFsaU1vbnRoVG9DaGVja107XHJcblx0XHRcdFx0bmVwYWxpTW9udGhUb0NoZWNrLS07XHJcblx0XHRcdH1cdFx0XHJcblx0XHRcdC8vIElmIHRoZSBkYXRlIHRoYXQgaGFzIHRvIGJlIGNvbnZlcnRlZCBpcyBpbiBQYXVzaCAobW9udGggbm8uIDkpIHdlIGhhdmUgdG8gZG8gc29tZSBvdGhlciBjYWxjdWxhdGlvblxyXG5cdFx0XHRpZiAobmVwYWxpTW9udGggPT09IDkpIHtcclxuXHRcdFx0XHQvLyBBZGQgdGhlIGRheXMgdGhhdCBhcmUgcGFzc2VkIHNpbmNlIHRoZSBmaXJzdCBkYXkgb2YgUGF1c2ggYW5kIHN1YnN0cmFjdCB0aGVcclxuXHRcdFx0XHQvLyBhbW91bnQgb2YgZGF5cyB0aGF0IGxpZSBiZXR3ZWVuIDFzdC4gSmFuIGFuZCAxc3QgUGF1c2hcclxuXHRcdFx0XHRncmVnb3JpYW5EYXlPZlllYXIgKz0gbmVwYWxpRGF5IC0gdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtuZXBhbGlZZWFyVG9DaGVja11bMF07XHJcblx0XHRcdFx0Ly8gRm9yIHRoZSBmaXJzdCBkYXlzIG9mIFBhdXNoIHdlIGFyZSBub3cgaW4gbmVnYXRpdmUgdmFsdWVzLFxyXG5cdFx0XHRcdC8vIGJlY2F1c2UgaW4gdGhlIGVuZCBvZiB0aGUgZ3JlZ29yaWFuIHllYXIgd2Ugc3Vic3RyYWN0XHJcblx0XHRcdFx0Ly8gMzY1IC8gMzY2IGRheXMgKFAuUy4gcmVtZW1iZXIgbWF0aCBpbiBzY2hvb2wgKyAtIGdpdmVzIC0pXHJcblx0XHRcdFx0aWYgKGdyZWdvcmlhbkRheU9mWWVhciA8PSAwKSB7XHJcblx0XHRcdFx0XHRncmVnb3JpYW5EYXlPZlllYXIgKz0gKGdyZWdvcmlhbkNhbGVuZGFyLmxlYXBZZWFyKGdyZWdvcmlhblllYXIpID8gMzY2IDogMzY1KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0Z3JlZ29yaWFuRGF5T2ZZZWFyICs9IHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbmVwYWxpWWVhclRvQ2hlY2tdWzldIC1cclxuXHRcdFx0XHRcdHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbmVwYWxpWWVhclRvQ2hlY2tdWzBdO1xyXG5cdFx0XHR9XHRcdFxyXG5cdFx0XHRyZXR1cm4gZ3JlZ29yaWFuQ2FsZW5kYXIubmV3RGF0ZShncmVnb3JpYW5ZZWFyLCAxICwxKS5hZGQoZ3JlZ29yaWFuRGF5T2ZZZWFyLCAnZCcpLnRvSkQoKTtcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdC8qKiBDcmVhdGUgYSBuZXcgZGF0ZSBmcm9tIGEgSnVsaWFuIGRhdGUuXHJcblx0XHRcdEBtZW1iZXJvZiBOZXBhbGlDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0gamQge251bWJlcn0gVGhlIEp1bGlhbiBkYXRlIHRvIGNvbnZlcnQuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgZXF1aXZhbGVudCBkYXRlLiAqL1xyXG5cdFx0ZnJvbUpEOiBmdW5jdGlvbihqZCkge1xyXG5cdFx0XHR2YXIgZ3JlZ29yaWFuQ2FsZW5kYXIgPSAgJC5jYWxlbmRhcnMuaW5zdGFuY2UoKTtcclxuXHRcdFx0dmFyIGdyZWdvcmlhbkRhdGUgPSBncmVnb3JpYW5DYWxlbmRhci5mcm9tSkQoamQpO1xyXG5cdFx0XHR2YXIgZ3JlZ29yaWFuWWVhciA9IGdyZWdvcmlhbkRhdGUueWVhcigpO1xyXG5cdFx0XHR2YXIgZ3JlZ29yaWFuRGF5T2ZZZWFyID0gZ3JlZ29yaWFuRGF0ZS5kYXlPZlllYXIoKTtcclxuXHRcdFx0dmFyIG5lcGFsaVllYXIgPSBncmVnb3JpYW5ZZWFyICsgNTY7IC8vdGhpcyBpcyBub3QgZmluYWwsIGl0IGNvdWxkIGJlIGFsc28gKzU3IGJ1dCArNTYgaXMgYWx3YXlzIHRydWUgZm9yIDFzdCBKYW4uXHJcblx0XHRcdHRoaXMuX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGEobmVwYWxpWWVhcik7XHJcblx0XHRcdHZhciBuZXBhbGlNb250aCA9IDk7IC8vIEphbiAxIGFsd2F5cyBmYWxsIGluIE5lcGFsaSBtb250aCBQYXVzaCB3aGljaCBpcyB0aGUgOXRoIG1vbnRoIG9mIE5lcGFsaSBjYWxlbmRhci5cclxuXHRcdFx0Ly8gR2V0IHRoZSBOZXBhbGkgZGF5IGluIFBhdXNoIChtb250aCA5KSBvZiAxc3QgSmFudWFyeSBcclxuXHRcdFx0dmFyIGRheU9mRmlyc3RKYW5JblBhdXNoID0gdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtuZXBhbGlZZWFyXVswXTtcclxuXHRcdFx0Ly8gQ2hlY2sgaG93IG1hbnkgZGF5cyBhcmUgbGVmdCBvZiBQYXVzaCAuXHJcblx0XHRcdC8vIERheXMgY2FsY3VsYXRlZCBmcm9tIDFzdCBKYW4gdGlsbCB0aGUgZW5kIG9mIHRoZSBhY3R1YWwgTmVwYWxpIG1vbnRoLCBcclxuXHRcdFx0Ly8gd2UgdXNlIHRoaXMgdmFsdWUgdG8gY2hlY2sgaWYgdGhlIGdyZWdvcmlhbiBEYXRlIGlzIGluIHRoZSBhY3R1YWwgTmVwYWxpIG1vbnRoLlxyXG5cdFx0XHR2YXIgZGF5c1NpbmNlSmFuRmlyc3RUb0VuZE9mTmVwYWxpTW9udGggPVxyXG5cdFx0XHRcdHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbmVwYWxpWWVhcl1bbmVwYWxpTW9udGhdIC0gZGF5T2ZGaXJzdEphbkluUGF1c2ggKyAxO1xyXG5cdFx0XHQvLyBJZiB0aGUgZ3JlZ29yaWFuIGRheS1vZi15ZWFyIGlzIHNtYWxsZXIgbyBlcXVhbCB0aGFuIHRoZSBzdW0gb2YgZGF5cyBiZXR3ZWVuIHRoZSAxc3QgSmFudWFyeSBhbmQgXHJcblx0XHRcdC8vIHRoZSBlbmQgb2YgdGhlIGFjdHVhbCBuZXBhbGkgbW9udGggd2UgZm91bmQgdGhlIGNvcnJlY3QgbmVwYWxpIG1vbnRoLlxyXG5cdFx0XHQvLyBFeGFtcGxlOiBcclxuXHRcdFx0Ly8gVGhlIDR0aCBGZWJydWFyeSAyMDExIGlzIHRoZSBncmVnb3JpYW5EYXlPZlllYXIgMzUgKDMxIGRheXMgb2YgSmFudWFyeSArIDQpXHJcblx0XHRcdC8vIDFzdCBKYW51YXJ5IDIwMTEgaXMgaW4gdGhlIG5lcGFsaSB5ZWFyIDIwNjcsIHdoZXJlIDFzdC4gSmFudWFyeSBpcyBpbiB0aGUgMTd0aCBkYXkgb2YgUGF1c2ggKDl0aCBtb250aClcclxuXHRcdFx0Ly8gSW4gMjA2NyBQYXVzaCBoYXMgMzBkYXlzLCBUaGlzIG1lYW5zICgzMC0xNysxPTE0KSB0aGVyZSBhcmUgMTRkYXlzIGJldHdlZW4gMXN0IEphbnVhcnkgYW5kIGVuZCBvZiBQYXVzaCBcclxuXHRcdFx0Ly8gKGluY2x1ZGluZyAxN3RoIEphbnVhcnkpXHJcblx0XHRcdC8vIFRoZSBncmVnb3JpYW5EYXlPZlllYXIgKDM1KSBpcyBiaWdnZXIgdGhhbiAxNCwgc28gd2UgY2hlY2sgdGhlIG5leHQgbW9udGhcclxuXHRcdFx0Ly8gVGhlIG5leHQgbmVwYWxpIG1vbnRoIChNYW5naCkgaGFzIDI5IGRheXMgXHJcblx0XHRcdC8vIDI5KzE0PTQzLCB0aGlzIGlzIGJpZ2dlciB0aGFuIGdyZWdvcmlhbkRheU9mWWVhcigzNSkgc28sIHdlIGZvdW5kIHRoZSBjb3JyZWN0IG5lcGFsaSBtb250aFxyXG5cdFx0XHR3aGlsZSAoZ3JlZ29yaWFuRGF5T2ZZZWFyID4gZGF5c1NpbmNlSmFuRmlyc3RUb0VuZE9mTmVwYWxpTW9udGgpIHtcclxuXHRcdFx0XHRuZXBhbGlNb250aCsrO1xyXG5cdFx0XHRcdGlmIChuZXBhbGlNb250aCA+IDEyKSB7XHJcblx0XHRcdFx0XHRuZXBhbGlNb250aCA9IDE7XHJcblx0XHRcdFx0XHRuZXBhbGlZZWFyKys7XHJcblx0XHRcdFx0fVx0XHJcblx0XHRcdFx0ZGF5c1NpbmNlSmFuRmlyc3RUb0VuZE9mTmVwYWxpTW9udGggKz0gdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtuZXBhbGlZZWFyXVtuZXBhbGlNb250aF07XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gVGhlIGxhc3Qgc3RlcCBpcyB0byBjYWxjdWxhdGUgdGhlIG5lcGFsaSBkYXktb2YtbW9udGhcclxuXHRcdFx0Ly8gdG8gY29udGludWUgb3VyIGV4YW1wbGUgZnJvbSBiZWZvcmU6XHJcblx0XHRcdC8vIHdlIGNhbGN1bGF0ZWQgdGhlcmUgYXJlIDQzIGRheXMgZnJvbSAxc3QuIEphbnVhcnkgKDE3IFBhdXNoKSB0aWxsIGVuZCBvZiBNYW5naCAoMjkgZGF5cylcclxuXHRcdFx0Ly8gd2hlbiB3ZSBzdWJ0cmFjdCBmcm9tIHRoaXMgNDMgZGF5cyB0aGUgZGF5LW9mLXllYXIgb2YgdGhlIHRoZSBHcmVnb3JpYW4gZGF0ZSAoMzUpLFxyXG5cdFx0XHQvLyB3ZSBrbm93IGhvdyBmYXIgdGhlIHNlYXJjaGVkIGRheSBpcyBhd2F5IGZyb20gdGhlIGVuZCBvZiB0aGUgTmVwYWxpIG1vbnRoLlxyXG5cdFx0XHQvLyBTbyB3ZSBzaW1wbHkgc3VidHJhY3QgdGhpcyBudW1iZXIgZnJvbSB0aGUgYW1vdW50IG9mIGRheXMgaW4gdGhpcyBtb250aCAoMzApIFxyXG5cdFx0XHR2YXIgbmVwYWxpRGF5T2ZNb250aCA9IHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbmVwYWxpWWVhcl1bbmVwYWxpTW9udGhdIC1cclxuXHRcdFx0XHQoZGF5c1NpbmNlSmFuRmlyc3RUb0VuZE9mTmVwYWxpTW9udGggLSBncmVnb3JpYW5EYXlPZlllYXIpO1x0XHRcclxuXHRcdFx0cmV0dXJuIHRoaXMubmV3RGF0ZShuZXBhbGlZZWFyLCBuZXBhbGlNb250aCwgbmVwYWxpRGF5T2ZNb250aCk7XHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHQvKiogQ3JlYXRlcyBtaXNzaW5nIGRhdGEgaW4gdGhlIE5FUEFMSV9DQUxFTkRBUl9EQVRBIHRhYmxlLlxyXG5cdFx0XHRUaGlzIGRhdGEgd2lsbCBub3QgYmUgY29ycmVjdCBidXQganVzdCBnaXZlIGFuIGVzdGltYXRlZCByZXN1bHQuIE1vc3RseSAtLysgMSBkYXlcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIG5lcGFsaVllYXIge251bWJlcn0gVGhlIG1pc3NpbmcgeWVhciBudW1iZXIuICovXHJcblx0XHRfY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YTogZnVuY3Rpb24obmVwYWxpWWVhcikge1xyXG5cdFx0XHR2YXIgdG1wX2NhbGVuZGFyX2RhdGEgPSB0aGlzLmRheXNQZXJNb250aC5zbGljZSgwKTtcclxuXHRcdFx0dG1wX2NhbGVuZGFyX2RhdGEudW5zaGlmdCgxNyk7XHJcblx0XHRcdGZvciAodmFyIG5lcGFsaVllYXJUb0NyZWF0ZSA9IChuZXBhbGlZZWFyIC0gMSk7IG5lcGFsaVllYXJUb0NyZWF0ZSA8IChuZXBhbGlZZWFyICsgMik7IG5lcGFsaVllYXJUb0NyZWF0ZSsrKSB7XHJcblx0XHRcdFx0aWYgKHR5cGVvZiB0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW25lcGFsaVllYXJUb0NyZWF0ZV0gPT09ICd1bmRlZmluZWQnKSB7XHJcblx0XHRcdFx0XHR0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW25lcGFsaVllYXJUb0NyZWF0ZV0gPSB0bXBfY2FsZW5kYXJfZGF0YTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdE5FUEFMSV9DQUxFTkRBUl9EQVRBOiAge1xyXG5cdFx0XHQvLyBUaGVzZSBkYXRhIGFyZSBmcm9tIGh0dHA6Ly93d3cuYXNoZXNoLmNvbS5ucFxyXG5cdFx0XHQxOTcwOiBbMTgsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxyXG5cdFx0XHQxOTcxOiBbMTgsIDMxLCAzMSwgMzIsIDMxLCAzMiwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxyXG5cdFx0XHQxOTcyOiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDI5LCAzMCwgMzBdLFxyXG5cdFx0XHQxOTczOiBbMTksIDMwLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzFdLFxyXG5cdFx0XHQxOTc0OiBbMTksIDMxLCAzMSwgMzIsIDMwLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxyXG5cdFx0XHQxOTc1OiBbMTgsIDMxLCAzMSwgMzIsIDMyLCAzMCwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxyXG5cdFx0XHQxOTc2OiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDI5LCAzMCwgMzFdLFxyXG5cdFx0XHQxOTc3OiBbMTgsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzEsIDI5LCAzMCwgMjksIDMwLCAyOSwgMzFdLFxyXG5cdFx0XHQxOTc4OiBbMTgsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxyXG5cdFx0XHQxOTc5OiBbMTgsIDMxLCAzMSwgMzIsIDMyLCAzMSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxyXG5cdFx0XHQxOTgwOiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDI5LCAzMCwgMzFdLFxyXG5cdFx0XHQxOTgxOiBbMTgsIDMxLCAzMSwgMzEsIDMyLCAzMSwgMzEsIDI5LCAzMCwgMzAsIDI5LCAzMCwgMzBdLFxyXG5cdFx0XHQxOTgyOiBbMTgsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxyXG5cdFx0XHQxOTgzOiBbMTgsIDMxLCAzMSwgMzIsIDMyLCAzMSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxyXG5cdFx0XHQxOTg0OiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDI5LCAzMCwgMzFdLFxyXG5cdFx0XHQxOTg1OiBbMTgsIDMxLCAzMSwgMzEsIDMyLCAzMSwgMzEsIDI5LCAzMCwgMzAsIDI5LCAzMCwgMzBdLFxyXG5cdFx0XHQxOTg2OiBbMTgsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxyXG5cdFx0XHQxOTg3OiBbMTgsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxyXG5cdFx0XHQxOTg4OiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDI5LCAzMCwgMzFdLFxyXG5cdFx0XHQxOTg5OiBbMTgsIDMxLCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxyXG5cdFx0XHQxOTkwOiBbMTgsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxyXG5cdFx0XHQxOTkxOiBbMTgsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFx0XHJcblx0XHRcdC8vIFRoZXNlIGRhdGEgYXJlIGZyb20gaHR0cDovL25lcGFsaWNhbGVuZGFyLnJhdDMyLmNvbS9pbmRleC5waHBcclxuXHRcdFx0MTk5MjogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMxXSxcclxuXHRcdFx0MTk5MzogWzE4LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MTk5NDogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MTk5NTogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MTk5NjogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMxXSxcclxuXHRcdFx0MTk5NzogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MTk5ODogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MTk5OTogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcclxuXHRcdFx0MjAwMDogWzE3LCAzMCwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMxXSxcclxuXHRcdFx0MjAwMTogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAwMjogWzE4LCAzMSwgMzEsIDMyLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAwMzogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcclxuXHRcdFx0MjAwNDogWzE3LCAzMCwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMxXSxcclxuXHRcdFx0MjAwNTogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAwNjogWzE4LCAzMSwgMzEsIDMyLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAwNzogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcclxuXHRcdFx0MjAwODogWzE3LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAyOSwgMzAsIDMwLCAyOSwgMjksIDMxXSxcclxuXHRcdFx0MjAwOTogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAxMDogWzE4LCAzMSwgMzEsIDMyLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAxMTogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcclxuXHRcdFx0MjAxMjogWzE3LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAyOSwgMzAsIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAxMzogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAxNDogWzE4LCAzMSwgMzEsIDMyLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAxNTogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcclxuXHRcdFx0MjAxNjogWzE3LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAyOSwgMzAsIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAxNzogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAxODogWzE4LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAxOTogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMxXSxcclxuXHRcdFx0MjAyMDogWzE3LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAyMTogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAyMjogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAyMzogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMxXSxcclxuXHRcdFx0MjAyNDogWzE3LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAyNTogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAyNjogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcclxuXHRcdFx0MjAyNzogWzE3LCAzMCwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMxXSxcclxuXHRcdFx0MjAyODogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAyOTogWzE4LCAzMSwgMzEsIDMyLCAzMSwgMzIsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAzMDogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMxXSxcclxuXHRcdFx0MjAzMTogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxXSxcclxuXHRcdFx0MjAzMjogWzE3LCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyXSxcclxuXHRcdFx0MjAzMzogWzE4LCAzMSwgMzEsIDMyLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAzNDogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcclxuXHRcdFx0MjAzNTogWzE3LCAzMCwgMzIsIDMxLCAzMiwgMzEsIDMxLCAyOSwgMzAsIDMwLCAyOSwgMjksIDMxXSxcclxuXHRcdFx0MjAzNjogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAzNzogWzE4LCAzMSwgMzEsIDMyLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjAzODogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcclxuXHRcdFx0MjAzOTogWzE3LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAyOSwgMzAsIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA0MDogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA0MTogWzE4LCAzMSwgMzEsIDMyLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA0MjogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcclxuXHRcdFx0MjA0MzogWzE3LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAyOSwgMzAsIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA0NDogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA0NTogWzE4LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA0NjogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcclxuXHRcdFx0MjA0NzogWzE3LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA0ODogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA0OTogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA1MDogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMxXSxcclxuXHRcdFx0MjA1MTogWzE3LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA1MjogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA1MzogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA1NDogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMxXSxcclxuXHRcdFx0MjA1NTogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAzMCwgMjksIDMwXSxcclxuXHRcdFx0MjA1NjogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzIsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA1NzogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcclxuXHRcdFx0MjA1ODogWzE3LCAzMCwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMxXSxcclxuXHRcdFx0MjA1OTogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA2MDogWzE3LCAzMSwgMzEsIDMyLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA2MTogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcclxuXHRcdFx0MjA2MjogWzE3LCAzMCwgMzIsIDMxLCAzMiwgMzEsIDMxLCAyOSwgMzAsIDI5LCAzMCwgMjksIDMxXSxcclxuXHRcdFx0MjA2MzogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA2NDogWzE3LCAzMSwgMzEsIDMyLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA2NTogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcclxuXHRcdFx0MjA2NjogWzE3LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAyOSwgMzAsIDMwLCAyOSwgMjksIDMxXSxcclxuXHRcdFx0MjA2NzogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA2ODogWzE3LCAzMSwgMzEsIDMyLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA2OTogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcclxuXHRcdFx0MjA3MDogWzE3LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAyOSwgMzAsIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA3MTogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA3MjogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA3MzogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMxXSxcclxuXHRcdFx0MjA3NDogWzE3LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA3NTogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA3NjogWzE2LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA3NzogWzE3LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAzMCwgMjksIDMxXSxcclxuXHRcdFx0MjA3ODogWzE3LCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA3OTogWzE3LCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMxLCAzMCwgMjksIDMwLCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0MjA4MDogWzE2LCAzMSwgMzIsIDMxLCAzMiwgMzEsIDMwLCAzMCwgMzAsIDI5LCAyOSwgMzAsIDMwXSxcclxuXHRcdFx0Ly8gVGhlc2UgZGF0YSBhcmUgZnJvbSBodHRwOi8vd3d3LmFzaGVzaC5jb20ubnAvbmVwYWxpLWNhbGVuZGFyL1xyXG5cdFx0XHQyMDgxOiBbMTcsIDMxLCAzMSwgMzIsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMDgyOiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMDgzOiBbMTcsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMDg0OiBbMTcsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMDg1OiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzEsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMDg2OiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMDg3OiBbMTYsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMDg4OiBbMTYsIDMwLCAzMSwgMzIsIDMyLCAzMCwgMzEsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMDg5OiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMDkwOiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMDkxOiBbMTYsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMDkyOiBbMTYsIDMxLCAzMSwgMzIsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMDkzOiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMDk0OiBbMTcsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMDk1OiBbMTcsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMzAsIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMDk2OiBbMTcsIDMwLCAzMSwgMzIsIDMyLCAzMSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdLFxyXG5cdFx0XHQyMDk3OiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMSwgMzAsIDMwLCAzMCwgMjksIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMDk4OiBbMTcsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDI5LCAzMCwgMjksIDMwLCAzMCwgMzFdLFxyXG5cdFx0XHQyMDk5OiBbMTcsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzEsIDMwLCAyOSwgMjksIDMwLCAzMCwgMzBdLFxyXG5cdFx0XHQyMTAwOiBbMTcsIDMxLCAzMiwgMzEsIDMyLCAzMCwgMzEsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzBdXHRcclxuXHRcdH1cclxuXHR9KTtcdFxyXG5cclxuXHQvLyBOZXBhbGkgY2FsZW5kYXIgaW1wbGVtZW50YXRpb25cclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMubmVwYWxpID0gTmVwYWxpQ2FsZW5kYXI7XHJcblxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.persian-fa.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.persian-fa.js index cdb229da6b9..f227c1b1039 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.persian-fa.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.persian-fa.js @@ -22,4 +22,4 @@ isRTL: true }; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGVyc2lhbi1mYS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnBlcnNpYW4tZmEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBGYXJzaS9QZXJzaWFuIGxvY2FsaXNhdGlvbiBmb3IgUGVyc2lhbiBjYWxlbmRhciBmb3IgalF1ZXJ5IHYyLjAuMS5cbiAgIFdyaXR0ZW4gYnkgU2FqamFkIFNlcnZhdGpvbyAoc2FqamFkLnNlcnZhdGpvb3thdH1nbWFpbC5jb20pIEFwcmlsIDIwMTEuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMucGVyc2lhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydmYSddID0ge1xuXHRcdG5hbWU6ICdQZXJzaWFuJyxcblx0XHRlcG9jaHM6IFsnQlAnLCAnQVAnXSxcblx0XHRtb250aE5hbWVzOiBbJ9mB2LHZiNix2K/bjNmGJywgJ9in2LHYr9uM2KjZh9i02KonLCAn2K7Ysdiv2KfYrycsICfYqtuM2LEnLCAn2YXYsdiv2KfYrycsICfYtNmH2LHbjNmI2LEnLFxuXHRcdCfZhdmH2LEnLCAn2KLYqNin2YYnLCAn2KLYsNixJywgJ9iv24wnLCAn2KjZh9mF2YYnLCAn2KfYs9mB2YbYryddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfZgdix2YjYsdiv24zZhicsICfYp9ix2K/bjNio2YfYtNiqJywgJ9iu2LHYr9in2K8nLCAn2KrbjNixJywgJ9mF2LHYr9in2K8nLCAn2LTZh9ix24zZiNixJyxcblx0XHQn2YXZh9ixJywgJ9ii2KjYp9mGJywgJ9ii2LDYsScsICfYr9uMJywgJ9io2YfZhdmGJywgJ9in2LPZgdmG2K8nXSxcblx0XHRkYXlOYW1lczogWyfZitqpINi02YbYqNmHJywgJ9iv2YjYtNmG2KjZhycsICfYs9mHINi02YbYqNmHJywgJ9qG2YfYp9ixINi02YbYqNmHJywgJ9m+2YbYrCDYtNmG2KjZhycsICfYrNmF2LnZhycsICfYtNmG2KjZhyddLFxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn2YraqScsICfYr9mIJywgJ9iz2YcnLCAn2obZh9in2LEnLCAn2b7ZhtisJywgJ9is2YXYudmHJywgJ9i02YbYqNmHJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn2YonLCAn2K8nLCAn2LMnLCAn2oYnLCAn2b4nLCAn2KwnLCAn2LQnXSxcblx0XHRkYXRlRm9ybWF0OiAneXl5eS9tbS9kZCcsXG5cdFx0Zmlyc3REYXk6IDYsXG5cdFx0aXNSVEw6IHRydWVcblx0fTtcbn0pKGpRdWVyeSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGVyc2lhbi1mYS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnBlcnNpYW4tZmEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEZhcnNpL1BlcnNpYW4gbG9jYWxpc2F0aW9uIGZvciBQZXJzaWFuIGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxyXG4gICBXcml0dGVuIGJ5IFNhamphZCBTZXJ2YXRqb28gKHNhamphZC5zZXJ2YXRqb297YXR9Z21haWwuY29tKSBBcHJpbCAyMDExLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5wZXJzaWFuLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ2ZhJ10gPSB7XHJcblx0XHRuYW1lOiAnUGVyc2lhbicsXHJcblx0XHRlcG9jaHM6IFsnQlAnLCAnQVAnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn2YHYsdmI2LHYr9uM2YYnLCAn2KfYsdiv24zYqNmH2LTYqicsICfYrtix2K/Yp9ivJywgJ9iq24zYsScsICfZhdix2K/Yp9ivJywgJ9i02YfYsduM2YjYsScsXHJcblx0XHQn2YXZh9ixJywgJ9ii2KjYp9mGJywgJ9ii2LDYsScsICfYr9uMJywgJ9io2YfZhdmGJywgJ9in2LPZgdmG2K8nXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfZgdix2YjYsdiv24zZhicsICfYp9ix2K/bjNio2YfYtNiqJywgJ9iu2LHYr9in2K8nLCAn2KrbjNixJywgJ9mF2LHYr9in2K8nLCAn2LTZh9ix24zZiNixJyxcclxuXHRcdCfZhdmH2LEnLCAn2KLYqNin2YYnLCAn2KLYsNixJywgJ9iv24wnLCAn2KjZh9mF2YYnLCAn2KfYs9mB2YbYryddLFxyXG5cdFx0ZGF5TmFtZXM6IFsn2YraqSDYtNmG2KjZhycsICfYr9mI2LTZhtio2YcnLCAn2LPZhyDYtNmG2KjZhycsICfahtmH2KfYsSDYtNmG2KjZhycsICfZvtmG2Kwg2LTZhtio2YcnLCAn2KzZhdi52YcnLCAn2LTZhtio2YcnXSxcclxuXHRcdGRheU5hbWVzU2hvcnQ6IFsn2YraqScsICfYr9mIJywgJ9iz2YcnLCAn2obZh9in2LEnLCAn2b7ZhtisJywgJ9is2YXYudmHJywgJ9i02YbYqNmHJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfZiicsICfYrycsICfYsycsICfahicsICfZvicsICfYrCcsICfYtCddLFxyXG5cdFx0ZGF0ZUZvcm1hdDogJ3l5eXkvbW0vZGQnLFxyXG5cdFx0Zmlyc3REYXk6IDYsXHJcblx0XHRpc1JUTDogdHJ1ZVxyXG5cdH07XHJcbn0pKGpRdWVyeSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.persian.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.persian.js index c809e392fd7..412c87fcb30 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.persian.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.persian.js @@ -178,4 +178,4 @@ $.calendars.calendars.jalali = PersianCalendar; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGVyc2lhbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnBlcnNpYW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBQZXJzaWFuIGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxuICAgV3JpdHRlbiBieSBLZWl0aCBXb29kIChrYndvb2R7YXR9aWluZXQuY29tLmF1KSBBdWd1c3QgMjAwOS5cbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cblxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxuXG5cdC8qKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgUGVyc2lhbiBvciBKYWxhbGkgY2FsZW5kYXIuXG5cdFx0QmFzZWQgb24gY29kZSBmcm9tIDxhIGhyZWY9XCJodHRwOi8vd3d3LmlyYW5jaGFtYmVyLmNvbS9jYWxlbmRhci9jb252ZXJ0ZXIvaXJhbmlhbl9jYWxlbmRhcl9jb252ZXJ0ZXIucGhwXCI+aHR0cDovL3d3dy5pcmFuY2hhbWJlci5jb20vY2FsZW5kYXIvY29udmVydGVyL2lyYW5pYW5fY2FsZW5kYXJfY29udmVydGVyLnBocDwvYT4uXG5cdFx0U2VlIGFsc28gPGEgaHJlZj1cImh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSXJhbmlhbl9jYWxlbmRhclwiPmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSXJhbmlhbl9jYWxlbmRhcjwvYT4uXG5cdFx0QGNsYXNzIFBlcnNpYW5DYWxlbmRhclxuXHRcdEBwYXJhbSBbbGFuZ3VhZ2U9JyddIHtzdHJpbmd9IFRoZSBsYW5ndWFnZSBjb2RlIChkZWZhdWx0IEVuZ2xpc2gpIGZvciBsb2NhbGlzYXRpb24uICovXG5cdGZ1bmN0aW9uIFBlcnNpYW5DYWxlbmRhcihsYW5ndWFnZSkge1xuXHRcdHRoaXMubG9jYWwgPSB0aGlzLnJlZ2lvbmFsT3B0aW9uc1tsYW5ndWFnZSB8fCAnJ10gfHwgdGhpcy5yZWdpb25hbE9wdGlvbnNbJyddO1xuXHR9XG5cblx0UGVyc2lhbkNhbGVuZGFyLnByb3RvdHlwZSA9IG5ldyAkLmNhbGVuZGFycy5iYXNlQ2FsZW5kYXI7XG5cblx0JC5leHRlbmQoUGVyc2lhbkNhbGVuZGFyLnByb3RvdHlwZSwge1xuXHRcdC8qKiBUaGUgY2FsZW5kYXIgbmFtZS5cblx0XHRcdEBtZW1iZXJvZiBQZXJzaWFuQ2FsZW5kYXIgKi9cblx0XHRuYW1lOiAnUGVyc2lhbicsXG5cdFx0LyoqIEp1bGlhbiBkYXRlIG9mIHN0YXJ0IG9mIFBlcnNpYW4gZXBvY2g6IDE5IE1hcmNoIDYyMiBDRS5cblx0XHRcdEBtZW1iZXJvZiBQZXJzaWFuQ2FsZW5kYXIgKi9cblx0XHRqZEVwb2NoOiAxOTQ4MzIwLjUsXG5cdFx0LyoqIERheXMgcGVyIG1vbnRoIGluIGEgY29tbW9uIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgUGVyc2lhbkNhbGVuZGFyICovXG5cdFx0ZGF5c1Blck1vbnRoOiBbMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzAsIDMwLCAzMCwgMzAsIDMwLCAyOV0sXG5cdFx0LyoqIDxjb2RlPnRydWU8L2NvZGU+IGlmIGhhcyBhIHllYXIgemVybywgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEBtZW1iZXJvZiBQZXJzaWFuQ2FsZW5kYXIgKi9cblx0XHRoYXNZZWFyWmVybzogZmFsc2UsXG5cdFx0LyoqIFRoZSBtaW5pbXVtIG1vbnRoIG51bWJlci5cblx0XHRcdEBtZW1iZXJvZiBQZXJzaWFuQ2FsZW5kYXIgKi9cblx0XHRtaW5Nb250aDogMSxcblx0XHQvKiogVGhlIGZpcnN0IG1vbnRoIGluIHRoZSB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIFBlcnNpYW5DYWxlbmRhciAqL1xuXHRcdGZpcnN0TW9udGg6IDEsXG5cdFx0LyoqIFRoZSBtaW5pbXVtIGRheSBudW1iZXIuXG5cdFx0XHRAbWVtYmVyb2YgUGVyc2lhbkNhbGVuZGFyICovXG5cdFx0bWluRGF5OiAxLFxuXG5cdFx0LyoqIExvY2FsaXNhdGlvbnMgZm9yIHRoZSBwbHVnaW4uXG5cdFx0XHRFbnRyaWVzIGFyZSBvYmplY3RzIGluZGV4ZWQgYnkgdGhlIGxhbmd1YWdlIGNvZGUgKCcnIGJlaW5nIHRoZSBkZWZhdWx0IFVTL0VuZ2xpc2gpLlxuXHRcdFx0RWFjaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcy5cblx0XHRcdEBtZW1iZXJvZiBQZXJzaWFuQ2FsZW5kYXJcblx0XHRcdEBwcm9wZXJ0eSBuYW1lIHtzdHJpbmd9IFRoZSBjYWxlbmRhciBuYW1lLlxuXHRcdFx0QHByb3BlcnR5IGVwb2NocyB7c3RyaW5nW119IFRoZSBlcG9jaCBuYW1lcy5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNNaW4ge3N0cmluZ1tdfSBUaGUgbWluaW1hbCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cblx0XHRcdEBwcm9wZXJ0eSBkYXRlRm9ybWF0IHtzdHJpbmd9IFRoZSBkYXRlIGZvcm1hdCBmb3IgdGhpcyBjYWxlbmRhci5cblx0XHRcdFx0XHRTZWUgdGhlIG9wdGlvbnMgb24gPGEgaHJlZj1cIkJhc2VDYWxlbmRhci5odG1sI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4gZm9yIGRldGFpbHMuXG5cdFx0XHRAcHJvcGVydHkgZmlyc3REYXkge251bWJlcn0gVGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBzdGFydGluZyBhdCAwLlxuXHRcdFx0QHByb3BlcnR5IGlzUlRMIHtudW1iZXJ9IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgbG9jYWxpc2F0aW9uIHJlYWRzIHJpZ2h0LXRvLWxlZnQuICovXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7IC8vIExvY2FsaXNhdGlvbnNcblx0XHRcdCcnOiB7XG5cdFx0XHRcdG5hbWU6ICdQZXJzaWFuJyxcblx0XHRcdFx0ZXBvY2hzOiBbJ0JQJywgJ0FQJ10sXG5cdFx0XHRcdG1vbnRoTmFtZXM6IFsnRmFydmFyZGluJywgJ09yZGliZWhlc2h0JywgJ0tob3JkYWQnLCAnVGlyJywgJ01vcmRhZCcsICdTaGFocml2YXInLFxuXHRcdFx0XHQnTWVocicsICdBYmFuJywgJ0F6YXInLCAnRGF5JywgJ0JhaG1hbicsICdFc2ZhbmQnXSxcblx0XHRcdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0ZhcicsICdPcmQnLCAnS2hvJywgJ1RpcicsICdNb3InLCAnU2hhJywgJ01laCcsICdBYmEnLCAnQXphJywgJ0RheScsICdCYWgnLCAnRXNmJ10sXG5cdFx0XHRcdGRheU5hbWVzOiBbJ1lla3NoYW1iZScsICdEb3NoYW1iZScsICdTZXNoYW1iZScsICdDaMOmaGFyc2hhbWJlJywgJ1BhbmpzaGFtYmUnLCAnSm9tXFwnZScsICdTaGFtYmUnXSxcblx0XHRcdFx0ZGF5TmFtZXNTaG9ydDogWydZZWsnLCAnRG8nLCAnU2UnLCAnQ2jDpicsICdQYW5qJywgJ0pvbScsICdTaGEnXSxcblx0XHRcdFx0ZGF5TmFtZXNNaW46IFsnWWUnLCdEbycsJ1NlJywnQ2gnLCdQYScsJ0pvJywnU2gnXSxcblx0XHRcdFx0ZGF0ZUZvcm1hdDogJ3l5eXkvbW0vZGQnLFxuXHRcdFx0XHRmaXJzdERheTogNixcblx0XHRcdFx0aXNSVEw6IGZhbHNlXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgaW4gYSBsZWFwIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgUGVyc2lhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGlzIGEgbGVhcCB5ZWFyLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRsZWFwWWVhcjogZnVuY3Rpb24oeWVhcikge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIpO1xuXHRcdFx0cmV0dXJuICgoKCgoZGF0ZS55ZWFyKCkgLSAoZGF0ZS55ZWFyKCkgPiAwID8gNDc0IDogNDczKSkgJSAyODIwKSArXG5cdFx0XHRcdDQ3NCArIDM4KSAqIDY4MikgJSAyODE2KSA8IDY4Mjtcblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB0aGUgd2VlayBvZiB0aGUgeWVhciBmb3IgYSBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIFBlcnNpYW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgd2VlayBvZiB0aGUgeWVhci5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0d2Vla09mWWVhcjogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0Ly8gRmluZCBTYXR1cmRheSBvZiB0aGlzIHdlZWsgc3RhcnRpbmcgb24gU2F0dXJkYXlcblx0XHRcdHZhciBjaGVja0RhdGUgPSB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSk7XG5cdFx0XHRjaGVja0RhdGUuYWRkKC0oKGNoZWNrRGF0ZS5kYXlPZldlZWsoKSArIDEpICUgNyksICdkJyk7XG5cdFx0XHRyZXR1cm4gTWF0aC5mbG9vcigoY2hlY2tEYXRlLmRheU9mWWVhcigpIC0gMSkgLyA3KSArIDE7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aC5cblx0XHRcdEBtZW1iZXJvZiBQZXJzaWFuQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgb2YgdGhlIG1vbnRoLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBtb250aC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBtb250aC95ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0ZGF5c0luTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZE1vbnRoKTtcblx0XHRcdHJldHVybiB0aGlzLmRheXNQZXJNb250aFtkYXRlLm1vbnRoKCkgLSAxXSArXG5cdFx0XHRcdChkYXRlLm1vbnRoKCkgPT09IDEyICYmIHRoaXMubGVhcFllYXIoZGF0ZS55ZWFyKCkpID8gMSA6IDApO1xuXHRcdH0sXG5cblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGEgd2VlayBkYXkuXG5cdFx0XHRAbWVtYmVyb2YgUGVyc2lhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBhIHdlZWsgZGF5LCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHR3ZWVrRGF5OiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5kYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSkgIT09IDU7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgSnVsaWFuIGRhdGUgZXF1aXZhbGVudCBmb3IgdGhpcyBkYXRlLFxuXHRcdFx0aS5lLiBkYXlzIHNpbmNlIEphbnVhcnkgMSwgNDcxMyBCQ0UgR3JlZW53aWNoIG5vb24uXG5cdFx0XHRAbWVtYmVyb2YgUGVyc2lhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb252ZXJ0IG9yIHRoZSB5ZWFyIHRvIGNvbnZlcnQuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gY29udmVydC5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGNvbnZlcnQuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBlcXVpdmFsZW50IEp1bGlhbiBkYXRlLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHR0b0pEOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlKTtcblx0XHRcdHllYXIgPSBkYXRlLnllYXIoKTtcblx0XHRcdG1vbnRoID0gZGF0ZS5tb250aCgpO1xuXHRcdFx0ZGF5ID0gZGF0ZS5kYXkoKTtcblx0XHRcdHZhciBlcEJhc2UgPSB5ZWFyIC0gKHllYXIgPj0gMCA/IDQ3NCA6IDQ3Myk7XG5cdFx0XHR2YXIgZXBZZWFyID0gNDc0ICsgbW9kKGVwQmFzZSwgMjgyMCk7XG5cdFx0XHRyZXR1cm4gZGF5ICsgKG1vbnRoIDw9IDcgPyAobW9udGggLSAxKSAqIDMxIDogKG1vbnRoIC0gMSkgKiAzMCArIDYpICtcblx0XHRcdFx0TWF0aC5mbG9vcigoZXBZZWFyICogNjgyIC0gMTEwKSAvIDI4MTYpICsgKGVwWWVhciAtIDEpICogMzY1ICtcblx0XHRcdFx0TWF0aC5mbG9vcihlcEJhc2UgLyAyODIwKSAqIDEwMjk5ODMgKyB0aGlzLmpkRXBvY2ggLSAxO1xuXHRcdH0sXG5cblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgZnJvbSBhIEp1bGlhbiBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIFBlcnNpYW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIGpkIHtudW1iZXJ9IFRoZSBKdWxpYW4gZGF0ZSB0byBjb252ZXJ0LlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXG5cdFx0ZnJvbUpEOiBmdW5jdGlvbihqZCkge1xuXHRcdFx0amQgPSBNYXRoLmZsb29yKGpkKSArIDAuNTtcblx0XHRcdHZhciBkZXBvY2ggPSBqZCAtIHRoaXMudG9KRCg0NzUsIDEsIDEpO1xuXHRcdFx0dmFyIGN5Y2xlID0gTWF0aC5mbG9vcihkZXBvY2ggLyAxMDI5OTgzKTtcblx0XHRcdHZhciBjeWVhciA9IG1vZChkZXBvY2gsIDEwMjk5ODMpO1xuXHRcdFx0dmFyIHljeWNsZSA9IDI4MjA7XG5cdFx0XHRpZiAoY3llYXIgIT09IDEwMjk5ODIpIHtcblx0XHRcdFx0dmFyIGF1eDEgPSBNYXRoLmZsb29yKGN5ZWFyIC8gMzY2KTtcblx0XHRcdFx0dmFyIGF1eDIgPSBtb2QoY3llYXIsIDM2Nik7XG5cdFx0XHRcdHljeWNsZSA9IE1hdGguZmxvb3IoKCgyMTM0ICogYXV4MSkgKyAoMjgxNiAqIGF1eDIpICsgMjgxNSkgLyAxMDI4NTIyKSArIGF1eDEgKyAxO1xuXHRcdFx0fVxuXHRcdFx0dmFyIHllYXIgPSB5Y3ljbGUgKyAoMjgyMCAqIGN5Y2xlKSArIDQ3NDtcblx0XHRcdHllYXIgPSAoeWVhciA8PSAwID8geWVhciAtIDEgOiB5ZWFyKTtcblx0XHRcdHZhciB5ZGF5ID0gamQgLSB0aGlzLnRvSkQoeWVhciwgMSwgMSkgKyAxO1xuXHRcdFx0dmFyIG1vbnRoID0gKHlkYXkgPD0gMTg2ID8gTWF0aC5jZWlsKHlkYXkgLyAzMSkgOiBNYXRoLmNlaWwoKHlkYXkgLSA2KSAvIDMwKSk7XG5cdFx0XHR2YXIgZGF5ID0gamQgLSB0aGlzLnRvSkQoeWVhciwgbW9udGgsIDEpICsgMTtcblx0XHRcdHJldHVybiB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSk7XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBNb2R1bHVzIGZ1bmN0aW9uIHdoaWNoIHdvcmtzIGZvciBub24taW50ZWdlcnMuXG5cdGZ1bmN0aW9uIG1vZChhLCBiKSB7XG5cdFx0cmV0dXJuIGEgLSAoYiAqIE1hdGguZmxvb3IoYSAvIGIpKTtcblx0fVxuXG5cdC8vIFBlcnNpYW4gKEphbGFsaSkgY2FsZW5kYXIgaW1wbGVtZW50YXRpb25cblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLnBlcnNpYW4gPSBQZXJzaWFuQ2FsZW5kYXI7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy5qYWxhbGkgPSBQZXJzaWFuQ2FsZW5kYXI7XG5cbn0pKGpRdWVyeSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGVyc2lhbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnBlcnNpYW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFBlcnNpYW4gY2FsZW5kYXIgZm9yIGpRdWVyeSB2Mi4wLjEuXHJcbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgQXVndXN0IDIwMDkuXHJcbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXHJcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xyXG5cclxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxyXG5cclxuXHQvKiogSW1wbGVtZW50YXRpb24gb2YgdGhlIFBlcnNpYW4gb3IgSmFsYWxpIGNhbGVuZGFyLlxyXG5cdFx0QmFzZWQgb24gY29kZSBmcm9tIDxhIGhyZWY9XCJodHRwOi8vd3d3LmlyYW5jaGFtYmVyLmNvbS9jYWxlbmRhci9jb252ZXJ0ZXIvaXJhbmlhbl9jYWxlbmRhcl9jb252ZXJ0ZXIucGhwXCI+aHR0cDovL3d3dy5pcmFuY2hhbWJlci5jb20vY2FsZW5kYXIvY29udmVydGVyL2lyYW5pYW5fY2FsZW5kYXJfY29udmVydGVyLnBocDwvYT4uXHJcblx0XHRTZWUgYWxzbyA8YSBocmVmPVwiaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JcmFuaWFuX2NhbGVuZGFyXCI+aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JcmFuaWFuX2NhbGVuZGFyPC9hPi5cclxuXHRcdEBjbGFzcyBQZXJzaWFuQ2FsZW5kYXJcclxuXHRcdEBwYXJhbSBbbGFuZ3VhZ2U9JyddIHtzdHJpbmd9IFRoZSBsYW5ndWFnZSBjb2RlIChkZWZhdWx0IEVuZ2xpc2gpIGZvciBsb2NhbGlzYXRpb24uICovXHJcblx0ZnVuY3Rpb24gUGVyc2lhbkNhbGVuZGFyKGxhbmd1YWdlKSB7XHJcblx0XHR0aGlzLmxvY2FsID0gdGhpcy5yZWdpb25hbE9wdGlvbnNbbGFuZ3VhZ2UgfHwgJyddIHx8IHRoaXMucmVnaW9uYWxPcHRpb25zWycnXTtcclxuXHR9XHJcblxyXG5cdFBlcnNpYW5DYWxlbmRhci5wcm90b3R5cGUgPSBuZXcgJC5jYWxlbmRhcnMuYmFzZUNhbGVuZGFyO1xyXG5cclxuXHQkLmV4dGVuZChQZXJzaWFuQ2FsZW5kYXIucHJvdG90eXBlLCB7XHJcblx0XHQvKiogVGhlIGNhbGVuZGFyIG5hbWUuXHJcblx0XHRcdEBtZW1iZXJvZiBQZXJzaWFuQ2FsZW5kYXIgKi9cclxuXHRcdG5hbWU6ICdQZXJzaWFuJyxcclxuXHRcdC8qKiBKdWxpYW4gZGF0ZSBvZiBzdGFydCBvZiBQZXJzaWFuIGVwb2NoOiAxOSBNYXJjaCA2MjIgQ0UuXHJcblx0XHRcdEBtZW1iZXJvZiBQZXJzaWFuQ2FsZW5kYXIgKi9cclxuXHRcdGpkRXBvY2g6IDE5NDgzMjAuNSxcclxuXHRcdC8qKiBEYXlzIHBlciBtb250aCBpbiBhIGNvbW1vbiB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgUGVyc2lhbkNhbGVuZGFyICovXHJcblx0XHRkYXlzUGVyTW9udGg6IFszMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDI5XSxcclxuXHRcdC8qKiA8Y29kZT50cnVlPC9jb2RlPiBpZiBoYXMgYSB5ZWFyIHplcm8sIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXHJcblx0XHRcdEBtZW1iZXJvZiBQZXJzaWFuQ2FsZW5kYXIgKi9cclxuXHRcdGhhc1llYXJaZXJvOiBmYWxzZSxcclxuXHRcdC8qKiBUaGUgbWluaW11bSBtb250aCBudW1iZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBQZXJzaWFuQ2FsZW5kYXIgKi9cclxuXHRcdG1pbk1vbnRoOiAxLFxyXG5cdFx0LyoqIFRoZSBmaXJzdCBtb250aCBpbiB0aGUgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIFBlcnNpYW5DYWxlbmRhciAqL1xyXG5cdFx0Zmlyc3RNb250aDogMSxcclxuXHRcdC8qKiBUaGUgbWluaW11bSBkYXkgbnVtYmVyLlxyXG5cdFx0XHRAbWVtYmVyb2YgUGVyc2lhbkNhbGVuZGFyICovXHJcblx0XHRtaW5EYXk6IDEsXHJcblxyXG5cdFx0LyoqIExvY2FsaXNhdGlvbnMgZm9yIHRoZSBwbHVnaW4uXHJcblx0XHRcdEVudHJpZXMgYXJlIG9iamVjdHMgaW5kZXhlZCBieSB0aGUgbGFuZ3VhZ2UgY29kZSAoJycgYmVpbmcgdGhlIGRlZmF1bHQgVVMvRW5nbGlzaCkuXHJcblx0XHRcdEVhY2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMuXHJcblx0XHRcdEBtZW1iZXJvZiBQZXJzaWFuQ2FsZW5kYXJcclxuXHRcdFx0QHByb3BlcnR5IG5hbWUge3N0cmluZ30gVGhlIGNhbGVuZGFyIG5hbWUuXHJcblx0XHRcdEBwcm9wZXJ0eSBlcG9jaHMge3N0cmluZ1tdfSBUaGUgZXBvY2ggbmFtZXMuXHJcblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cclxuXHRcdFx0QHByb3BlcnR5IG1vbnRoTmFtZXNTaG9ydCB7c3RyaW5nW119IFRoZSBzaG9ydCBuYW1lcyBvZiB0aGUgbW9udGhzIG9mIHRoZSB5ZWFyLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXMge3N0cmluZ1tdfSBUaGUgbG9uZyBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cclxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lc01pbiB7c3RyaW5nW119IFRoZSBtaW5pbWFsIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF0ZUZvcm1hdCB7c3RyaW5nfSBUaGUgZGF0ZSBmb3JtYXQgZm9yIHRoaXMgY2FsZW5kYXIuXHJcblx0XHRcdFx0XHRTZWUgdGhlIG9wdGlvbnMgb24gPGEgaHJlZj1cIkJhc2VDYWxlbmRhci5odG1sI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4gZm9yIGRldGFpbHMuXHJcblx0XHRcdEBwcm9wZXJ0eSBmaXJzdERheSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWssIHN0YXJ0aW5nIGF0IDAuXHJcblx0XHRcdEBwcm9wZXJ0eSBpc1JUTCB7bnVtYmVyfSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGxvY2FsaXNhdGlvbiByZWFkcyByaWdodC10by1sZWZ0LiAqL1xyXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7IC8vIExvY2FsaXNhdGlvbnNcclxuXHRcdFx0Jyc6IHtcclxuXHRcdFx0XHRuYW1lOiAnUGVyc2lhbicsXHJcblx0XHRcdFx0ZXBvY2hzOiBbJ0JQJywgJ0FQJ10sXHJcblx0XHRcdFx0bW9udGhOYW1lczogWydGYXJ2YXJkaW4nLCAnT3JkaWJlaGVzaHQnLCAnS2hvcmRhZCcsICdUaXInLCAnTW9yZGFkJywgJ1NoYWhyaXZhcicsXHJcblx0XHRcdFx0J01laHInLCAnQWJhbicsICdBemFyJywgJ0RheScsICdCYWhtYW4nLCAnRXNmYW5kJ10sXHJcblx0XHRcdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0ZhcicsICdPcmQnLCAnS2hvJywgJ1RpcicsICdNb3InLCAnU2hhJywgJ01laCcsICdBYmEnLCAnQXphJywgJ0RheScsICdCYWgnLCAnRXNmJ10sXHJcblx0XHRcdFx0ZGF5TmFtZXM6IFsnWWVrc2hhbWJlJywgJ0Rvc2hhbWJlJywgJ1Nlc2hhbWJlJywgJ0Now6ZoYXJzaGFtYmUnLCAnUGFuanNoYW1iZScsICdKb21cXCdlJywgJ1NoYW1iZSddLFxyXG5cdFx0XHRcdGRheU5hbWVzU2hvcnQ6IFsnWWVrJywgJ0RvJywgJ1NlJywgJ0Now6YnLCAnUGFuaicsICdKb20nLCAnU2hhJ10sXHJcblx0XHRcdFx0ZGF5TmFtZXNNaW46IFsnWWUnLCdEbycsJ1NlJywnQ2gnLCdQYScsJ0pvJywnU2gnXSxcclxuXHRcdFx0XHRkYXRlRm9ybWF0OiAneXl5eS9tbS9kZCcsXHJcblx0XHRcdFx0Zmlyc3REYXk6IDYsXHJcblx0XHRcdFx0aXNSVEw6IGZhbHNlXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBpbiBhIGxlYXAgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIFBlcnNpYW5DYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgaXMgYSBsZWFwIHllYXIsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRsZWFwWWVhcjogZnVuY3Rpb24oeWVhcikge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIHRoaXMubWluTW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhcik7XHJcblx0XHRcdHJldHVybiAoKCgoKGRhdGUueWVhcigpIC0gKGRhdGUueWVhcigpID4gMCA/IDQ3NCA6IDQ3MykpICUgMjgyMCkgK1xyXG5cdFx0XHRcdDQ3NCArIDM4KSAqIDY4MikgJSAyODE2KSA8IDY4MjtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB0aGUgd2VlayBvZiB0aGUgeWVhciBmb3IgYSBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgUGVyc2lhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIHdlZWsgb2YgdGhlIHllYXIuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR3ZWVrT2ZZZWFyOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdC8vIEZpbmQgU2F0dXJkYXkgb2YgdGhpcyB3ZWVrIHN0YXJ0aW5nIG9uIFNhdHVyZGF5XHJcblx0XHRcdHZhciBjaGVja0RhdGUgPSB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSk7XHJcblx0XHRcdGNoZWNrRGF0ZS5hZGQoLSgoY2hlY2tEYXRlLmRheU9mV2VlaygpICsgMSkgJSA3KSwgJ2QnKTtcclxuXHRcdFx0cmV0dXJuIE1hdGguZmxvb3IoKGNoZWNrRGF0ZS5kYXlPZlllYXIoKSAtIDEpIC8gNykgKyAxO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgbW9udGguXHJcblx0XHRcdEBtZW1iZXJvZiBQZXJzaWFuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciBvZiB0aGUgbW9udGguXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aC5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBtb250aC5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIG1vbnRoL3llYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdGRheXNJbk1vbnRoOiBmdW5jdGlvbih5ZWFyLCBtb250aCkge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZE1vbnRoKTtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW2RhdGUubW9udGgoKSAtIDFdICtcclxuXHRcdFx0XHQoZGF0ZS5tb250aCgpID09PSAxMiAmJiB0aGlzLmxlYXBZZWFyKGRhdGUueWVhcigpKSA/IDEgOiAwKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBhIHdlZWsgZGF5LlxyXG5cdFx0XHRAbWVtYmVyb2YgUGVyc2lhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGEgd2VlayBkYXksIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR3ZWVrRGF5OiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KSAhPT0gNTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBKdWxpYW4gZGF0ZSBlcXVpdmFsZW50IGZvciB0aGlzIGRhdGUsXHJcblx0XHRcdGkuZS4gZGF5cyBzaW5jZSBKYW51YXJ5IDEsIDQ3MTMgQkNFIEdyZWVud2ljaCBub29uLlxyXG5cdFx0XHRAbWVtYmVyb2YgUGVyc2lhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvbnZlcnQgb3IgdGhlIHllYXIgdG8gY29udmVydC5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGNvbnZlcnQuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGNvbnZlcnQuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGVxdWl2YWxlbnQgSnVsaWFuIGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR0b0pEOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUpO1xyXG5cdFx0XHR5ZWFyID0gZGF0ZS55ZWFyKCk7XHJcblx0XHRcdG1vbnRoID0gZGF0ZS5tb250aCgpO1xyXG5cdFx0XHRkYXkgPSBkYXRlLmRheSgpO1xyXG5cdFx0XHR2YXIgZXBCYXNlID0geWVhciAtICh5ZWFyID49IDAgPyA0NzQgOiA0NzMpO1xyXG5cdFx0XHR2YXIgZXBZZWFyID0gNDc0ICsgbW9kKGVwQmFzZSwgMjgyMCk7XHJcblx0XHRcdHJldHVybiBkYXkgKyAobW9udGggPD0gNyA/IChtb250aCAtIDEpICogMzEgOiAobW9udGggLSAxKSAqIDMwICsgNikgK1xyXG5cdFx0XHRcdE1hdGguZmxvb3IoKGVwWWVhciAqIDY4MiAtIDExMCkgLyAyODE2KSArIChlcFllYXIgLSAxKSAqIDM2NSArXHJcblx0XHRcdFx0TWF0aC5mbG9vcihlcEJhc2UgLyAyODIwKSAqIDEwMjk5ODMgKyB0aGlzLmpkRXBvY2ggLSAxO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgZnJvbSBhIEp1bGlhbiBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgUGVyc2lhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSBqZCB7bnVtYmVyfSBUaGUgSnVsaWFuIGRhdGUgdG8gY29udmVydC5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXHJcblx0XHRmcm9tSkQ6IGZ1bmN0aW9uKGpkKSB7XHJcblx0XHRcdGpkID0gTWF0aC5mbG9vcihqZCkgKyAwLjU7XHJcblx0XHRcdHZhciBkZXBvY2ggPSBqZCAtIHRoaXMudG9KRCg0NzUsIDEsIDEpO1xyXG5cdFx0XHR2YXIgY3ljbGUgPSBNYXRoLmZsb29yKGRlcG9jaCAvIDEwMjk5ODMpO1xyXG5cdFx0XHR2YXIgY3llYXIgPSBtb2QoZGVwb2NoLCAxMDI5OTgzKTtcclxuXHRcdFx0dmFyIHljeWNsZSA9IDI4MjA7XHJcblx0XHRcdGlmIChjeWVhciAhPT0gMTAyOTk4Mikge1xyXG5cdFx0XHRcdHZhciBhdXgxID0gTWF0aC5mbG9vcihjeWVhciAvIDM2Nik7XHJcblx0XHRcdFx0dmFyIGF1eDIgPSBtb2QoY3llYXIsIDM2Nik7XHJcblx0XHRcdFx0eWN5Y2xlID0gTWF0aC5mbG9vcigoKDIxMzQgKiBhdXgxKSArICgyODE2ICogYXV4MikgKyAyODE1KSAvIDEwMjg1MjIpICsgYXV4MSArIDE7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIHllYXIgPSB5Y3ljbGUgKyAoMjgyMCAqIGN5Y2xlKSArIDQ3NDtcclxuXHRcdFx0eWVhciA9ICh5ZWFyIDw9IDAgPyB5ZWFyIC0gMSA6IHllYXIpO1xyXG5cdFx0XHR2YXIgeWRheSA9IGpkIC0gdGhpcy50b0pEKHllYXIsIDEsIDEpICsgMTtcclxuXHRcdFx0dmFyIG1vbnRoID0gKHlkYXkgPD0gMTg2ID8gTWF0aC5jZWlsKHlkYXkgLyAzMSkgOiBNYXRoLmNlaWwoKHlkYXkgLSA2KSAvIDMwKSk7XHJcblx0XHRcdHZhciBkYXkgPSBqZCAtIHRoaXMudG9KRCh5ZWFyLCBtb250aCwgMSkgKyAxO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5uZXdEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHQvLyBNb2R1bHVzIGZ1bmN0aW9uIHdoaWNoIHdvcmtzIGZvciBub24taW50ZWdlcnMuXHJcblx0ZnVuY3Rpb24gbW9kKGEsIGIpIHtcclxuXHRcdHJldHVybiBhIC0gKGIgKiBNYXRoLmZsb29yKGEgLyBiKSk7XHJcblx0fVxyXG5cclxuXHQvLyBQZXJzaWFuIChKYWxhbGkpIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uXHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLnBlcnNpYW4gPSBQZXJzaWFuQ2FsZW5kYXI7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLmphbGFsaSA9IFBlcnNpYW5DYWxlbmRhcjtcclxuXHJcbn0pKGpRdWVyeSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-af.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-af.js index c1df324f54c..0df599f6231 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-af.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-af.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['af']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFmLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQWZyaWthYW5zIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgUmVuaWVyIFByZXRvcml1cyBhbmQgUnVlZGlnZXIgVGhpZWRlLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydhZiddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICdWb3JpZ2UnLCBwcmV2U3RhdHVzOiAnVmVydG9vbiB2b3JpZ2UgbWFhbmQnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnVmVydG9vbiB2b3JpZ2UgamFhcicsXG5cdFx0bmV4dFRleHQ6ICdWb2xnZW5kZScsIG5leHRTdGF0dXM6ICdWZXJ0b29uIHZvbGdlbmRlIG1hYW5kJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ1ZlcnRvb24gdm9sZ2VuZGUgamFhcicsXG5cdFx0Y3VycmVudFRleHQ6ICdWYW5kYWcnLCBjdXJyZW50U3RhdHVzOiAnVmVydG9vbiBodWlkaWdlIG1hYW5kJyxcblx0XHR0b2RheVRleHQ6ICdWYW5kYWcnLCB0b2RheVN0YXR1czogJ1ZlcnRvb24gaHVpZGlnZSBtYWFuZCcsXG5cdFx0Y2xlYXJUZXh0OiAnVmVlIHVpdCcsIGNsZWFyU3RhdHVzOiAnVmVyd3lkZXIgZGllIGh1aWRpZ2UgZGF0dW0nLFxuXHRcdGNsb3NlVGV4dDogJ0tsYWFyJywgY2xvc2VTdGF0dXM6ICdTbHVpdCBzb25kZXIgdmVyYW5kZXJpbmcnLFxuXHRcdHllYXJTdGF0dXM6ICdWZXJ0b29uIFxcJ24gYW5kZXIgamFhcicsIG1vbnRoU3RhdHVzOiAnVmVydG9vbiBcXCduIGFuZGVyIG1hYW5kJyxcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJ1dlZWsgdmFuIGRpZSBqYWFyJyxcblx0XHRkYXlTdGF0dXM6ICdLaWVzIERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnS2llcyBcXCduIGRhdHVtJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydhZiddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFmLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBBZnJpa2FhbnMgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IFJlbmllciBQcmV0b3JpdXMgYW5kIFJ1ZWRpZ2VyIFRoaWVkZS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2FmJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICdWb3JpZ2UnLCBwcmV2U3RhdHVzOiAnVmVydG9vbiB2b3JpZ2UgbWFhbmQnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICdWZXJ0b29uIHZvcmlnZSBqYWFyJyxcclxuXHRcdG5leHRUZXh0OiAnVm9sZ2VuZGUnLCBuZXh0U3RhdHVzOiAnVmVydG9vbiB2b2xnZW5kZSBtYWFuZCcsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ1ZlcnRvb24gdm9sZ2VuZGUgamFhcicsXHJcblx0XHRjdXJyZW50VGV4dDogJ1ZhbmRhZycsIGN1cnJlbnRTdGF0dXM6ICdWZXJ0b29uIGh1aWRpZ2UgbWFhbmQnLFxyXG5cdFx0dG9kYXlUZXh0OiAnVmFuZGFnJywgdG9kYXlTdGF0dXM6ICdWZXJ0b29uIGh1aWRpZ2UgbWFhbmQnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnVmVlIHVpdCcsIGNsZWFyU3RhdHVzOiAnVmVyd3lkZXIgZGllIGh1aWRpZ2UgZGF0dW0nLFxyXG5cdFx0Y2xvc2VUZXh0OiAnS2xhYXInLCBjbG9zZVN0YXR1czogJ1NsdWl0IHNvbmRlciB2ZXJhbmRlcmluZycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnVmVydG9vbiBcXCduIGFuZGVyIGphYXInLCBtb250aFN0YXR1czogJ1ZlcnRvb24gXFwnbiBhbmRlciBtYWFuZCcsXHJcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJ1dlZWsgdmFuIGRpZSBqYWFyJyxcclxuXHRcdGRheVN0YXR1czogJ0tpZXMgREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdLaWVzIFxcJ24gZGF0dW0nLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2FmJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-am.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-am.js index 33decff3b0e..224a217bdd8 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-am.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-am.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['am']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFtLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFtLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQW1oYXJpYyAo4Yqg4Yib4Yit4YqbKSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBMZXl1IFNpc2F5LiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydhbSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICfhi6vhiIjhjYgnLCBwcmV2U3RhdHVzOiAn4Yur4YiI4Y2I4YuN4YqVIOGLiOGIrSDhiqDhiLPhi60nLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAn4Yur4YiI4Y2I4YuN4YqVIOGLk+GImOGJtSDhiqDhiLPhi60nLFxuXHRcdG5leHRUZXh0OiAn4YmA4Yyj4YutJywgbmV4dFN0YXR1czogJ+GJgOGMo+GLqeGKlSDhi4jhiK0g4Yqg4Yiz4YutJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ+GJgOGMo+GLqeGKlSDhi5PhiJjhibUg4Yqg4Yiz4YutJyxcblx0XHRjdXJyZW50VGV4dDogJ+GKoOGIgeGKlScsIGN1cnJlbnRTdGF0dXM6ICfhi6jhiqDhiIHhipHhipUg4YuI4YitIOGKoOGIs+GLrScsXG5cdFx0dG9kYXlUZXh0OiAn4Yub4YisJywgdG9kYXlTdGF0dXM6ICfhi6jhi5vhiKzhipUg4YuI4YitIOGKoOGIs+GLrScsXG5cdFx0Y2xlYXJUZXh0OiAn4Yqg4Yyl4Y2LJywgY2xlYXJTdGF0dXM6ICfhi6jhibDhiJjhiKjhjKDhi43hipUg4YmA4YqVIOGKoOGMpeGNiycsXG5cdFx0Y2xvc2VUZXh0OiAn4Yud4YyLJywgY2xvc2VTdGF0dXM6ICfhi6jhiYDhipUg4YiY4Yid4Yio4Yyr4YuN4YqVIOGLneGMiycsXG5cdFx0eWVhclN0YXR1czogJ+GLk+GImOGJseGKlSDhiYDhi63hiK0nLCBtb250aFN0YXR1czogJ+GLiOGIqeGKlSDhiYDhi63hiK0nLFxuXHRcdHdlZWtUZXh0OiAn4Yiz4YidJywgd2Vla1N0YXR1czogJ+GLqOGLk+GImOGJsSDhiLPhiJ3hipXhibUgJyxcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkLCB5eXl5IOGIneGIqOGMpScsIGRlZmF1bHRTdGF0dXM6ICfhiYDhipUg4Yid4Yio4YylJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydhbSddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFtLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFtLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBBbWhhcmljICjhiqDhiJvhiK3hipspIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgTGV5dSBTaXNheS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2FtJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICfhi6vhiIjhjYgnLCBwcmV2U3RhdHVzOiAn4Yur4YiI4Y2I4YuN4YqVIOGLiOGIrSDhiqDhiLPhi60nLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICfhi6vhiIjhjYjhi43hipUg4YuT4YiY4Ym1IOGKoOGIs+GLrScsXHJcblx0XHRuZXh0VGV4dDogJ+GJgOGMo+GLrScsIG5leHRTdGF0dXM6ICfhiYDhjKPhi6nhipUg4YuI4YitIOGKoOGIs+GLrScsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ+GJgOGMo+GLqeGKlSDhi5PhiJjhibUg4Yqg4Yiz4YutJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn4Yqg4YiB4YqVJywgY3VycmVudFN0YXR1czogJ+GLqOGKoOGIgeGKkeGKlSDhi4jhiK0g4Yqg4Yiz4YutJyxcclxuXHRcdHRvZGF5VGV4dDogJ+GLm+GIrCcsIHRvZGF5U3RhdHVzOiAn4Yuo4Yub4Yis4YqVIOGLiOGIrSDhiqDhiLPhi60nLFxyXG5cdFx0Y2xlYXJUZXh0OiAn4Yqg4Yyl4Y2LJywgY2xlYXJTdGF0dXM6ICfhi6jhibDhiJjhiKjhjKDhi43hipUg4YmA4YqVIOGKoOGMpeGNiycsXHJcblx0XHRjbG9zZVRleHQ6ICfhi53hjIsnLCBjbG9zZVN0YXR1czogJ+GLqOGJgOGKlSDhiJjhiJ3hiKjhjKvhi43hipUg4Yud4YyLJyxcclxuXHRcdHllYXJTdGF0dXM6ICfhi5PhiJjhibHhipUg4YmA4Yut4YitJywgbW9udGhTdGF0dXM6ICfhi4jhiKnhipUg4YmA4Yut4YitJyxcclxuXHRcdHdlZWtUZXh0OiAn4Yiz4YidJywgd2Vla1N0YXR1czogJ+GLqOGLk+GImOGJsSDhiLPhiJ3hipXhibUgJyxcclxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQsIHl5eXkg4Yid4Yio4YylJywgZGVmYXVsdFN0YXR1czogJ+GJgOGKlSDhiJ3hiKjhjKUnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2FtJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ar-DZ.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ar-DZ.js index ea8a6eeeeed..90db2a7e4c2 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ar-DZ.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ar-DZ.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['ar-DZ']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFyLURaLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFyLURaLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQWxnZXJpYW4gKGFuZCBUdW5pc2lhbikgQXJhYmljIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIE1vaGFtZWQgQ2hlcmlmIEJPVUNIRUxBR0hFTSAtLSBjaGVyaWZib3VjaGVsYWdoZW1AeWFob28uZnIgKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYXItRFonXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M72KfZhNiz2KfYqNmCJywgcHJldlN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTYs9in2KjZgicsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAn2KfZhNiq2KfZhNmKJiN4M2U7JywgbmV4dFN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTZgtin2K/ZhScsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAn2KfZhNmK2YjZhScsIGN1cnJlbnRTdGF0dXM6ICfYudix2LYg2KfZhNi02YfYsSDYp9mE2K3Yp9mE2YonLFxuXHRcdHRvZGF5VGV4dDogJ9in2YTZitmI2YUnLCB0b2RheVN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTYrdin2YTZiicsXG5cdFx0Y2xlYXJUZXh0OiAn2YXYs9itJywgY2xlYXJTdGF0dXM6ICfYp9mF2LPYrSDYp9mE2KrYp9ix2YrYriDYp9mE2K3Yp9mE2YonLFxuXHRcdGNsb3NlVGV4dDogJ9il2LrZhNin2YInLCBjbG9zZVN0YXR1czogJ9il2LrZhNin2YIg2KjYr9mI2YYg2K3Zgdi4Jyxcblx0XHR5ZWFyU3RhdHVzOiAn2LnYsdi2INiz2YbYqSDYotiu2LHZiScsIG1vbnRoU3RhdHVzOiAn2LnYsdi2INi02YfYsSDYotiu2LEnLFxuXHRcdHdlZWtUZXh0OiAn2KPYs9io2YjYuScsIHdlZWtTdGF0dXM6ICfYo9iz2KjZiNi5INin2YTYs9mG2KknLFxuXHRcdGRheVN0YXR1czogJ9in2K7YqtixIEQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICfYp9iu2KrYsSDZitmI2YUnLFxuXHRcdGlzUlRMOiB0cnVlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYXItRFonXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFyLURaLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFyLURaLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBBbGdlcmlhbiAoYW5kIFR1bmlzaWFuKSBBcmFiaWMgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBNb2hhbWVkIENoZXJpZiBCT1VDSEVMQUdIRU0gLS0gY2hlcmlmYm91Y2hlbGFnaGVtQHlhaG9vLmZyICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydhci1EWiddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M72KfZhNiz2KfYqNmCJywgcHJldlN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTYs9in2KjZgicsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ9in2YTYqtin2YTZiiYjeDNlOycsIG5leHRTdGF0dXM6ICfYudix2LYg2KfZhNi02YfYsSDYp9mE2YLYp9iv2YUnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfYp9mE2YrZiNmFJywgY3VycmVudFN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTYrdin2YTZiicsXHJcblx0XHR0b2RheVRleHQ6ICfYp9mE2YrZiNmFJywgdG9kYXlTdGF0dXM6ICfYudix2LYg2KfZhNi02YfYsSDYp9mE2K3Yp9mE2YonLFxyXG5cdFx0Y2xlYXJUZXh0OiAn2YXYs9itJywgY2xlYXJTdGF0dXM6ICfYp9mF2LPYrSDYp9mE2KrYp9ix2YrYriDYp9mE2K3Yp9mE2YonLFxyXG5cdFx0Y2xvc2VUZXh0OiAn2KXYutmE2KfZgicsIGNsb3NlU3RhdHVzOiAn2KXYutmE2KfZgiDYqNiv2YjZhiDYrdmB2LgnLFxyXG5cdFx0eWVhclN0YXR1czogJ9i52LHYtiDYs9mG2Kkg2KLYrtix2YknLCBtb250aFN0YXR1czogJ9i52LHYtiDYtNmH2LEg2KLYrtixJyxcclxuXHRcdHdlZWtUZXh0OiAn2KPYs9io2YjYuScsIHdlZWtTdGF0dXM6ICfYo9iz2KjZiNi5INin2YTYs9mG2KknLFxyXG5cdFx0ZGF5U3RhdHVzOiAn2KfYrtiq2LEgRCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ9in2K7YqtixINmK2YjZhScsXHJcblx0XHRpc1JUTDogdHJ1ZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydhci1EWiddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ar-EG.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ar-EG.js index 3b7bd94be4f..f854c6f40f8 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ar-EG.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ar-EG.js @@ -26,4 +26,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['ar-EG']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFyLUVHLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy5waWNrZXItYXItRUcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBBcmFiaWMgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgTWFobW91ZCBLaGFsZWQgLS0gbWFobW91ZC5raGFsZWRAYmFkcml0LmNvbVxuICAgTk9URTogbW9udGhOYW1lcyBhcmUgdGhlIG5ldyBtb250aHMgbmFtZXMgKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYXItRUcnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M72KfZhNiz2KfYqNmCJywgcHJldlN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTYs9in2KjZgicsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAn2KfZhNiq2KfZhNmKJiN4M2U7JywgbmV4dFN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTZgtin2K/ZhScsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAn2KfZhNmK2YjZhScsIGN1cnJlbnRTdGF0dXM6ICfYudix2LYg2KfZhNi02YfYsSDYp9mE2K3Yp9mE2YonLFxuXHRcdHRvZGF5VGV4dDogJ9in2YTZitmI2YUnLCB0b2RheVN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTYrdin2YTZiicsXG5cdFx0Y2xlYXJUZXh0OiAn2YXYs9itJywgY2xlYXJTdGF0dXM6ICfYp9mF2LPYrSDYp9mE2KrYp9ix2YrYriDYp9mE2K3Yp9mE2YonLFxuXHRcdGNsb3NlVGV4dDogJ9il2LrZhNin2YInLCBjbG9zZVN0YXR1czogJ9il2LrZhNin2YIg2KjYr9mI2YYg2K3Zgdi4Jyxcblx0XHR5ZWFyU3RhdHVzOiAn2LnYsdi2INiz2YbYqSDYotiu2LHZiScsIG1vbnRoU3RhdHVzOiAn2LnYsdi2INi02YfYsSDYotiu2LEnLFxuXHRcdHdlZWtUZXh0OiAn2KPYs9io2YjYuScsIHdlZWtTdGF0dXM6ICfYo9iz2KjZiNi5INin2YTYs9mG2KknLFxuXHRcdGRheVN0YXR1czogJ9in2K7YqtixIEQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICfYp9iu2KrYsSDZitmI2YUnLFxuXHRcdGlzUlRMOiB0cnVlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYXItRUcnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFyLUVHLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy5waWNrZXItYXItRUcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEFyYWJpYyBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIE1haG1vdWQgS2hhbGVkIC0tIG1haG1vdWQua2hhbGVkQGJhZHJpdC5jb21cclxuICAgTk9URTogbW9udGhOYW1lcyBhcmUgdGhlIG5ldyBtb250aHMgbmFtZXMgKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2FyLUVHJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYzvYp9mE2LPYp9io2YInLCBwcmV2U3RhdHVzOiAn2LnYsdi2INin2YTYtNmH2LEg2KfZhNiz2KfYqNmCJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAn2KfZhNiq2KfZhNmKJiN4M2U7JywgbmV4dFN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTZgtin2K/ZhScsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ9in2YTZitmI2YUnLCBjdXJyZW50U3RhdHVzOiAn2LnYsdi2INin2YTYtNmH2LEg2KfZhNit2KfZhNmKJyxcclxuXHRcdHRvZGF5VGV4dDogJ9in2YTZitmI2YUnLCB0b2RheVN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTYrdin2YTZiicsXHJcblx0XHRjbGVhclRleHQ6ICfZhdiz2K0nLCBjbGVhclN0YXR1czogJ9in2YXYs9itINin2YTYqtin2LHZitiuINin2YTYrdin2YTZiicsXHJcblx0XHRjbG9zZVRleHQ6ICfYpdi62YTYp9mCJywgY2xvc2VTdGF0dXM6ICfYpdi62YTYp9mCINio2K/ZiNmGINit2YHYuCcsXHJcblx0XHR5ZWFyU3RhdHVzOiAn2LnYsdi2INiz2YbYqSDYotiu2LHZiScsIG1vbnRoU3RhdHVzOiAn2LnYsdi2INi02YfYsSDYotiu2LEnLFxyXG5cdFx0d2Vla1RleHQ6ICfYo9iz2KjZiNi5Jywgd2Vla1N0YXR1czogJ9ij2LPYqNmI2Lkg2KfZhNiz2YbYqScsXHJcblx0XHRkYXlTdGF0dXM6ICfYp9iu2KrYsSBELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAn2KfYrtiq2LEg2YrZiNmFJyxcclxuXHRcdGlzUlRMOiB0cnVlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2FyLUVHJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ar.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ar.js index 26f216ce348..4bd5048d709 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ar.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ar.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['ar']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQXJhYmljIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIEtoYWxlZCBBbCBIb3JhbmkgLS0g2K7Yp9mE2K8g2KfZhNit2YjYsdin2YbZiiAtLSBrb2tvLmR3QGdtYWlsLmNvbSAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydhciddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYzvYp9mE2LPYp9io2YInLCBwcmV2U3RhdHVzOiAn2LnYsdi2INin2YTYtNmH2LEg2KfZhNiz2KfYqNmCJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICfYp9mE2KrYp9mE2YomI3gzZTsnLCBuZXh0U3RhdHVzOiAn2LnYsdi2INin2YTYtNmH2LEg2KfZhNmC2KfYr9mFJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICfYp9mE2YrZiNmFJywgY3VycmVudFN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTYrdin2YTZiicsXG5cdFx0dG9kYXlUZXh0OiAn2KfZhNmK2YjZhScsIHRvZGF5U3RhdHVzOiAn2LnYsdi2INin2YTYtNmH2LEg2KfZhNit2KfZhNmKJyxcblx0XHRjbGVhclRleHQ6ICfZhdiz2K0nLCBjbGVhclN0YXR1czogJ9in2YXYs9itINin2YTYqtin2LHZitiuINin2YTYrdin2YTZiicsXG5cdFx0Y2xvc2VUZXh0OiAn2KXYutmE2KfZgicsIGNsb3NlU3RhdHVzOiAn2KXYutmE2KfZgiDYqNiv2YjZhiDYrdmB2LgnLFxuXHRcdHllYXJTdGF0dXM6ICfYudix2LYg2LPZhtipINii2K7YsdmJJywgbW9udGhTdGF0dXM6ICfYudix2LYg2LTZh9ixINii2K7YsScsXG5cdFx0d2Vla1RleHQ6ICfYo9iz2KjZiNi5Jywgd2Vla1N0YXR1czogJ9ij2LPYqNmI2Lkg2KfZhNiz2YbYqScsXG5cdFx0ZGF5U3RhdHVzOiAn2KfYrtiq2LEgRCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ9in2K7YqtixINmK2YjZhScsXG5cdFx0aXNSVEw6IHRydWVcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydhciddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWFyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBBcmFiaWMgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBLaGFsZWQgQWwgSG9yYW5pIC0tINiu2KfZhNivINin2YTYrdmI2LHYp9mG2YogLS0ga29rby5kd0BnbWFpbC5jb20gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2FyJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYzvYp9mE2LPYp9io2YInLCBwcmV2U3RhdHVzOiAn2LnYsdi2INin2YTYtNmH2LEg2KfZhNiz2KfYqNmCJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAn2KfZhNiq2KfZhNmKJiN4M2U7JywgbmV4dFN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTZgtin2K/ZhScsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ9in2YTZitmI2YUnLCBjdXJyZW50U3RhdHVzOiAn2LnYsdi2INin2YTYtNmH2LEg2KfZhNit2KfZhNmKJyxcclxuXHRcdHRvZGF5VGV4dDogJ9in2YTZitmI2YUnLCB0b2RheVN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTYrdin2YTZiicsXHJcblx0XHRjbGVhclRleHQ6ICfZhdiz2K0nLCBjbGVhclN0YXR1czogJ9in2YXYs9itINin2YTYqtin2LHZitiuINin2YTYrdin2YTZiicsXHJcblx0XHRjbG9zZVRleHQ6ICfYpdi62YTYp9mCJywgY2xvc2VTdGF0dXM6ICfYpdi62YTYp9mCINio2K/ZiNmGINit2YHYuCcsXHJcblx0XHR5ZWFyU3RhdHVzOiAn2LnYsdi2INiz2YbYqSDYotiu2LHZiScsIG1vbnRoU3RhdHVzOiAn2LnYsdi2INi02YfYsSDYotiu2LEnLFxyXG5cdFx0d2Vla1RleHQ6ICfYo9iz2KjZiNi5Jywgd2Vla1N0YXR1czogJ9ij2LPYqNmI2Lkg2KfZhNiz2YbYqScsXHJcblx0XHRkYXlTdGF0dXM6ICfYp9iu2KrYsSBELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAn2KfYrtiq2LEg2YrZiNmFJyxcclxuXHRcdGlzUlRMOiB0cnVlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2FyJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-az.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-az.js index be00376874d..2578c6cbe9e 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-az.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-az.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['az']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWF6LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWF6LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQXplcmJhaWphbmkgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBKYW1pbCBOYWphZm92IChuZWNlZm92MzNAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYXonXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7R2VyaScsICBwcmV2U3RhdHVzOiAnxo92dsmZbGtpIGF5Jyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ8aPdnbJmWxraSBpbCcsXG5cdFx0bmV4dFRleHQ6ICfEsHLJmWxpJiN4M2U7JywgbmV4dFN0YXR1czogJ1NvbnJha8SxIGF5Jyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ1NvbnJha8SxIGlsJyxcblx0XHRjdXJyZW50VGV4dDogJ0J1Z8O8bicsIGN1cnJlbnRTdGF0dXM6ICfEsG5kaWtpIGF5Jyxcblx0XHR0b2RheVRleHQ6ICdCdWfDvG4nLCB0b2RheVN0YXR1czogJ8SwbmRpa2kgYXknLFxuXHRcdGNsZWFyVGV4dDogJ1TJmW1pemzJmScsIGNsZWFyU3RhdHVzOiAnVGFyaXhpIHNpbCcsXG5cdFx0Y2xvc2VUZXh0OiAnQmHEn2xhJywgY2xvc2VTdGF0dXM6ICdUyZlxdmltaSBiYcSfbGEnLFxuXHRcdHllYXJTdGF0dXM6ICdCYcWfcWEgaWwnLCBtb250aFN0YXR1czogJ0JhxZ9xYSBheScsXG5cdFx0d2Vla1RleHQ6ICdIZicsIHdlZWtTdGF0dXM6ICdIyZlmdMmZbMmZcicsXG5cdFx0ZGF5U3RhdHVzOiAnRCwgTSBkIHNlw6dpbicsIGRlZmF1bHRTdGF0dXM6ICdCaXIgdGFyaXggc2XDp2luJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydheiddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWF6LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWF6LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBBemVyYmFpamFuaSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgSmFtaWwgTmFqYWZvdiAobmVjZWZvdjMzQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydheiddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7R2VyaScsICBwcmV2U3RhdHVzOiAnxo92dsmZbGtpIGF5JyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnxo92dsmZbGtpIGlsJyxcclxuXHRcdG5leHRUZXh0OiAnxLByyZlsaSYjeDNlOycsIG5leHRTdGF0dXM6ICdTb25yYWvEsSBheScsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ1NvbnJha8SxIGlsJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnQnVnw7xuJywgY3VycmVudFN0YXR1czogJ8SwbmRpa2kgYXknLFxyXG5cdFx0dG9kYXlUZXh0OiAnQnVnw7xuJywgdG9kYXlTdGF0dXM6ICfEsG5kaWtpIGF5JyxcclxuXHRcdGNsZWFyVGV4dDogJ1TJmW1pemzJmScsIGNsZWFyU3RhdHVzOiAnVGFyaXhpIHNpbCcsXHJcblx0XHRjbG9zZVRleHQ6ICdCYcSfbGEnLCBjbG9zZVN0YXR1czogJ1TJmXF2aW1pIGJhxJ9sYScsXHJcblx0XHR5ZWFyU3RhdHVzOiAnQmHFn3FhIGlsJywgbW9udGhTdGF0dXM6ICdCYcWfcWEgYXknLFxyXG5cdFx0d2Vla1RleHQ6ICdIZicsIHdlZWtTdGF0dXM6ICdIyZlmdMmZbMmZcicsXHJcblx0XHRkYXlTdGF0dXM6ICdELCBNIGQgc2XDp2luJywgZGVmYXVsdFN0YXR1czogJ0JpciB0YXJpeCBzZcOnaW4nLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2F6J10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-bg.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-bg.js index 6a2972f8e55..d5028c448bd 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-bg.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-bg.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['bg']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWJnLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWJnLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQnVsZ2FyaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgU3RveWFuIEt5b3NldiAoaHR0cDovL3N2ZXN0Lm9yZykuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2JnJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcbiAgICAgICAgcHJldlRleHQ6ICcmI3gzYzvQvdCw0LfQsNC0JywgcHJldlN0YXR1czogJ9C/0L7QutCw0LbQuCDQv9C+0YHQu9C10LTQvdC40Y8g0LzQtdGB0LXRhicsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuICAgICAgICBuZXh0VGV4dDogJ9C90LDQv9GA0LXQtCYjeDNlOycsIG5leHRTdGF0dXM6ICfQv9C+0LrQsNC20Lgg0YHQu9C10LTQstCw0YnQuNGPINC80LXRgdC10YYnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcbiAgICAgICAgY3VycmVudFRleHQ6ICfQtNC90LXRgScsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ9C00L3QtdGBJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ9C40LfRh9C40YHRgtC4JywgY2xlYXJTdGF0dXM6ICfQuNC30YfQuNGB0YLQuCDQsNC60YLRg9Cw0LvQvdCw0YLQsCDQtNCw0YLQsCcsXG4gICAgICAgIGNsb3NlVGV4dDogJ9C30LDRgtCy0L7RgNC4JywgY2xvc2VTdGF0dXM6ICfQt9Cw0YLQstC+0YDQuCDQsdC10Lcg0L/RgNC+0LzQtdC90LgnLFxuXHRcdHllYXJTdGF0dXM6ICfQv9C+0LrQsNC20Lgg0LTRgNGD0LPQsCDQs9C+0LTQuNC90LAnLCBtb250aFN0YXR1czogJ9C/0L7QutCw0LbQuCDQtNGA0YPQsyDQvNC10YHQtdGGJyxcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJ9GB0LXQtNC80LjRhtCwINC+0YIg0LzQtdGB0LXRhtCwJyxcblx0XHRkYXlTdGF0dXM6ICfQmNC30LHQtdGA0LggRCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ9CY0LfQsdC10YDQuCDQtNCw0YLQsCcsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYmcnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWJnLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWJnLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBCdWxnYXJpYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IFN0b3lhbiBLeW9zZXYgKGh0dHA6Ly9zdmVzdC5vcmcpLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYmcnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcbiAgICAgICAgcHJldlRleHQ6ICcmI3gzYzvQvdCw0LfQsNC0JywgcHJldlN0YXR1czogJ9C/0L7QutCw0LbQuCDQv9C+0YHQu9C10LTQvdC40Y8g0LzQtdGB0LXRhicsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcbiAgICAgICAgbmV4dFRleHQ6ICfQvdCw0L/RgNC10LQmI3gzZTsnLCBuZXh0U3RhdHVzOiAn0L/QvtC60LDQttC4INGB0LvQtdC00LLQsNGJ0LjRjyDQvNC10YHQtdGGJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuICAgICAgICBjdXJyZW50VGV4dDogJ9C00L3QtdGBJywgY3VycmVudFN0YXR1czogJycsXHJcblx0XHR0b2RheVRleHQ6ICfQtNC90LXRgScsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ9C40LfRh9C40YHRgtC4JywgY2xlYXJTdGF0dXM6ICfQuNC30YfQuNGB0YLQuCDQsNC60YLRg9Cw0LvQvdCw0YLQsCDQtNCw0YLQsCcsXHJcbiAgICAgICAgY2xvc2VUZXh0OiAn0LfQsNGC0LLQvtGA0LgnLCBjbG9zZVN0YXR1czogJ9C30LDRgtCy0L7RgNC4INCx0LXQtyDQv9GA0L7QvNC10L3QuCcsXHJcblx0XHR5ZWFyU3RhdHVzOiAn0L/QvtC60LDQttC4INC00YDRg9Cz0LAg0LPQvtC00LjQvdCwJywgbW9udGhTdGF0dXM6ICfQv9C+0LrQsNC20Lgg0LTRgNGD0LMg0LzQtdGB0LXRhicsXHJcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJ9GB0LXQtNC80LjRhtCwINC+0YIg0LzQtdGB0LXRhtCwJyxcclxuXHRcdGRheVN0YXR1czogJ9CY0LfQsdC10YDQuCBELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAn0JjQt9Cx0LXRgNC4INC00LDRgtCwJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydiZyddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-bs.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-bs.js index a515b743e8c..01655ac6aa4 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-bs.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-bs.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['bs']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQm9zbmlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBLZW5hbiBLb25qby4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYnMnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7JywgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnJiN4M2U7JywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnRGFuYXMnLCBjdXJyZW50U3RhdHVzOiAnJyxcblx0XHR0b2RheVRleHQ6ICdEYW5hcycsIHRvZGF5U3RhdHVzOiAnJyxcblx0XHRjbGVhclRleHQ6ICdYJywgY2xlYXJTdGF0dXM6ICcnLFxuXHRcdGNsb3NlVGV4dDogJ1phdHZvcmknLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYnMnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBCb3NuaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgS2VuYW4gS29uam8uICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydicyddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7JywgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJyYjeDNlOycsIG5leHRTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdEYW5hcycsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAnRGFuYXMnLCB0b2RheVN0YXR1czogJycsXHJcblx0XHRjbGVhclRleHQ6ICdYJywgY2xlYXJTdGF0dXM6ICcnLFxyXG5cdFx0Y2xvc2VUZXh0OiAnWmF0dm9yaScsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICcnLCBkZWZhdWx0U3RhdHVzOiAnJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydicyddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ca.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ca.js index 137721c4c80..12bc4f678bb 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ca.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ca.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['ca']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWNhLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWNhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQ2F0YWxhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0ZXJzOiAoam9hbi5sZW9uQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2NhJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyYjeDNjO0FudCcsIHByZXZTdGF0dXM6ICcnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ1NlZyYjeDNlOycsIG5leHRTdGF0dXM6ICcnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ0F2dWknLCBjdXJyZW50U3RhdHVzOiAnJyxcblx0XHR0b2RheVRleHQ6ICdBdnVpJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ05ldGVqYXInLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAnVGFuY2FyJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydjYSddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWNhLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWNhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBDYXRhbGFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdGVyczogKGpvYW4ubGVvbkBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snY2EnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO0FudCcsIHByZXZTdGF0dXM6ICcnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICdTZWcmI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnQXZ1aScsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAnQXZ1aScsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ05ldGVqYXInLCBjbGVhclN0YXR1czogJycsXHJcblx0XHRjbG9zZVRleHQ6ICdUYW5jYXInLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxyXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2NhJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-cs.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-cs.js index 63b36c23758..f802e34a7ce 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-cs.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-cs.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['cs']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWNzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWNzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQ3plY2ggbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBUb21hcyBNdWxsZXIgKHRvbWFzQHRvbWFzLW11bGxlci5uZXQpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydjcyddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYztExZnDrXZlJywgcHJldlN0YXR1czogJ1DFmWVqw610IG5hIHDFmWVkY2hvesOtIG3Em3PDrScsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnUG96ZMSbamkmI3gzZTsnLCBuZXh0U3RhdHVzOiAnUMWZZWrDrXQgbmEgZGFsxaHDrSBtxJtzw61jJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICdOeW7DrScsIGN1cnJlbnRTdGF0dXM6ICdQxZllamRlIG5hIGFrdHXDoWxuw60gbcSbc8OtYycsXG5cdFx0dG9kYXlUZXh0OiAnTnluw60nLCB0b2RheVN0YXR1czogJ1DFmWVqZGUgbmEgYWt0dcOhbG7DrSBtxJtzw61jJyxcblx0XHRjbGVhclRleHQ6ICdWeW1hemF0JywgY2xlYXJTdGF0dXM6ICdWeW1hxb5lIHphZGFuw6kgZGF0dW0nLFxuXHRcdGNsb3NlVGV4dDogJ1phdsWZw610JywgIGNsb3NlU3RhdHVzOiAnWmF2xZllIGthbGVuZMOhxZkgYmV6ZSB6bcSbbnknLFxuXHRcdHllYXJTdGF0dXM6ICdQxZllasOtdCBuYSBqaW7DvSByb2snLCBtb250aFN0YXR1czogJ1DFmWVqw610IG5hIGppbsO9IG3Em3PDrWMnLFxuXHRcdHdlZWtUZXh0OiAnVMO9ZCcsIHdlZWtTdGF0dXM6ICdUw71kZW4gdiByb2NlJyxcblx0XHRkYXlTdGF0dXM6ICdcXCdWeWJlclxcJyBERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ1Z5YmVydGUgZGF0dW0nLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2NzJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWNzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWNzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBDemVjaCBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgVG9tYXMgTXVsbGVyICh0b21hc0B0b21hcy1tdWxsZXIubmV0KS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2NzJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYztExZnDrXZlJywgcHJldlN0YXR1czogJ1DFmWVqw610IG5hIHDFmWVkY2hvesOtIG3Em3PDrScsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ1BvemTEm2ppJiN4M2U7JywgbmV4dFN0YXR1czogJ1DFmWVqw610IG5hIGRhbMWhw60gbcSbc8OtYycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ055bsOtJywgY3VycmVudFN0YXR1czogJ1DFmWVqZGUgbmEgYWt0dcOhbG7DrSBtxJtzw61jJyxcclxuXHRcdHRvZGF5VGV4dDogJ055bsOtJywgdG9kYXlTdGF0dXM6ICdQxZllamRlIG5hIGFrdHXDoWxuw60gbcSbc8OtYycsXHJcblx0XHRjbGVhclRleHQ6ICdWeW1hemF0JywgY2xlYXJTdGF0dXM6ICdWeW1hxb5lIHphZGFuw6kgZGF0dW0nLFxyXG5cdFx0Y2xvc2VUZXh0OiAnWmF2xZnDrXQnLCAgY2xvc2VTdGF0dXM6ICdaYXbFmWUga2FsZW5kw6HFmSBiZXplIHptxJtueScsXHJcblx0XHR5ZWFyU3RhdHVzOiAnUMWZZWrDrXQgbmEgamluw70gcm9rJywgbW9udGhTdGF0dXM6ICdQxZllasOtdCBuYSBqaW7DvSBtxJtzw61jJyxcclxuXHRcdHdlZWtUZXh0OiAnVMO9ZCcsIHdlZWtTdGF0dXM6ICdUw71kZW4gdiByb2NlJyxcclxuXHRcdGRheVN0YXR1czogJ1xcJ1Z5YmVyXFwnIERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnVnliZXJ0ZSBkYXR1bScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snY3MnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-da.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-da.js index c31df5d8d88..45b1ea9eecf 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-da.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-da.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['da']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWRhLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWRhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRGFuaXNoIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgSmFuIENocmlzdGVuc2VuICggZGVsZXRlc3R1ZmZAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZGEnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuICAgICAgICBwcmV2VGV4dDogJyYjeDNjO0ZvcnJpZ2UnLCBwcmV2U3RhdHVzOiAnVmlzIGZvcnJpZ2UgbcOlbmVkJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICdOw6ZzdGUmI3gzZTsnLCBuZXh0U3RhdHVzOiAnVmlzIG7DpnN0ZSBtw6VuZWQnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ0lkYWcnLCBjdXJyZW50U3RhdHVzOiAnVmlzIGFrdHVlbCBtw6VuZWQnLFxuXHRcdHRvZGF5VGV4dDogJ0lkYWcnLCB0b2RheVN0YXR1czogJ1ZpcyBha3R1ZWwgbcOlbmVkJyxcblx0XHRjbGVhclRleHQ6ICdOdWxzdGlsJywgY2xlYXJTdGF0dXM6ICdOdWxzdGlsIGRlbiBha3R1ZWxsZSBkYXRvJyxcblx0XHRjbG9zZVRleHQ6ICdMdWsnLCBjbG9zZVN0YXR1czogJ0x1ayB1ZGVuIMOmbmRyaW5nZXInLFxuXHRcdHllYXJTdGF0dXM6ICdWaXMgZXQgYW5kZXQgw6VyJywgbW9udGhTdGF0dXM6ICdWaXMgZW4gYW5kZW4gbcOlbmVkJyxcblx0XHR3ZWVrVGV4dDogJ1VnZScsIHdlZWtTdGF0dXM6ICfDhXJldHMgdWdlJyxcblx0XHRkYXlTdGF0dXM6ICdWw6ZsZyBELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnVsOmbGcgZW4gZGF0bycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZGEnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWRhLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWRhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBEYW5pc2ggbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEphbiBDaHJpc3RlbnNlbiAoIGRlbGV0ZXN0dWZmQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydkYSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuICAgICAgICBwcmV2VGV4dDogJyYjeDNjO0ZvcnJpZ2UnLCBwcmV2U3RhdHVzOiAnVmlzIGZvcnJpZ2UgbcOlbmVkJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnTsOmc3RlJiN4M2U7JywgbmV4dFN0YXR1czogJ1ZpcyBuw6ZzdGUgbcOlbmVkJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnSWRhZycsIGN1cnJlbnRTdGF0dXM6ICdWaXMgYWt0dWVsIG3DpW5lZCcsXHJcblx0XHR0b2RheVRleHQ6ICdJZGFnJywgdG9kYXlTdGF0dXM6ICdWaXMgYWt0dWVsIG3DpW5lZCcsXHJcblx0XHRjbGVhclRleHQ6ICdOdWxzdGlsJywgY2xlYXJTdGF0dXM6ICdOdWxzdGlsIGRlbiBha3R1ZWxsZSBkYXRvJyxcclxuXHRcdGNsb3NlVGV4dDogJ0x1aycsIGNsb3NlU3RhdHVzOiAnTHVrIHVkZW4gw6ZuZHJpbmdlcicsXHJcblx0XHR5ZWFyU3RhdHVzOiAnVmlzIGV0IGFuZGV0IMOlcicsIG1vbnRoU3RhdHVzOiAnVmlzIGVuIGFuZGVuIG3DpW5lZCcsXHJcblx0XHR3ZWVrVGV4dDogJ1VnZScsIHdlZWtTdGF0dXM6ICfDhXJldHMgdWdlJyxcclxuXHRcdGRheVN0YXR1czogJ1bDpmxnIEQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdWw6ZsZyBlbiBkYXRvJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydkYSddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-de-CH.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-de-CH.js index d20b2fbb5fd..85d6792bc8e 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-de-CH.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-de-CH.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['de-CH']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWRlLUNILmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWRlLUNILmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU3dpc3MtR2VybWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgRG91Z2xhcyBKb3NlICYgSnVlcmcgTWVpZXIuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2RlLUNIJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyYjeDNjO3p1csO8Y2snLCBwcmV2U3RhdHVzOiAnbGV0enRlbiBNb25hdCB6ZWlnZW4nLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ27DpGNoc3RlciYjeDNlOycsIG5leHRTdGF0dXM6ICduw6RjaHN0ZW4gTW9uYXQgemVpZ2VuJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICdoZXV0ZScsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ2hldXRlJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ2zDtnNjaGVuJywgY2xlYXJTdGF0dXM6ICdha3R1ZWxsZXMgRGF0dW0gbMO2c2NoZW4nLFxuXHRcdGNsb3NlVGV4dDogJ3NjaGxpZXNzZW4nLCBjbG9zZVN0YXR1czogJ29obmUgw4RuZGVydW5nZW4gc2NobGllc3NlbicsXG5cdFx0eWVhclN0YXR1czogJ2FuZGVyZXMgSmFociBhbnplaWdlbicsIG1vbnRoU3RhdHVzOiAnYW5kZXJlbiBNb25hdCBhbnplaWdlJyxcblx0XHR3ZWVrVGV4dDogJ1dvJywgd2Vla1N0YXR1czogJ1dvY2hlIGRlcyBNb25hdHMnLFxuXHRcdGRheVN0YXR1czogJ1fDpGhsZSBELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnV8OkaGxlIGVpbiBEYXR1bScsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZGUtQ0gnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWRlLUNILmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWRlLUNILmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTd2lzcy1HZXJtYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IERvdWdsYXMgSm9zZSAmIEp1ZXJnIE1laWVyLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZGUtQ0gnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO3p1csO8Y2snLCBwcmV2U3RhdHVzOiAnbGV0enRlbiBNb25hdCB6ZWlnZW4nLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICduw6RjaHN0ZXImI3gzZTsnLCBuZXh0U3RhdHVzOiAnbsOkY2hzdGVuIE1vbmF0IHplaWdlbicsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ2hldXRlJywgY3VycmVudFN0YXR1czogJycsXHJcblx0XHR0b2RheVRleHQ6ICdoZXV0ZScsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ2zDtnNjaGVuJywgY2xlYXJTdGF0dXM6ICdha3R1ZWxsZXMgRGF0dW0gbMO2c2NoZW4nLFxyXG5cdFx0Y2xvc2VUZXh0OiAnc2NobGllc3NlbicsIGNsb3NlU3RhdHVzOiAnb2huZSDDhG5kZXJ1bmdlbiBzY2hsaWVzc2VuJyxcclxuXHRcdHllYXJTdGF0dXM6ICdhbmRlcmVzIEphaHIgYW56ZWlnZW4nLCBtb250aFN0YXR1czogJ2FuZGVyZW4gTW9uYXQgYW56ZWlnZScsXHJcblx0XHR3ZWVrVGV4dDogJ1dvJywgd2Vla1N0YXR1czogJ1dvY2hlIGRlcyBNb25hdHMnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnV8OkaGxlIEQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdXw6RobGUgZWluIERhdHVtJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydkZS1DSCddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-de.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-de.js index 4ff26767f8c..6668325b60f 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-de.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-de.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['de']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWRlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWRlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgR2VybWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTWlsaWFuIFdvbGZmIChtYWlsQG1pbGlhbncuZGUpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydkZSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYzt6dXLDvGNrJywgcHJldlN0YXR1czogJ2xldHp0ZW4gTW9uYXQgemVpZ2VuJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICdWb3ImI3gzZTsnLCBuZXh0U3RhdHVzOiAnbsOkY2hzdGVuIE1vbmF0IHplaWdlbicsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnaGV1dGUnLCBjdXJyZW50U3RhdHVzOiAnJyxcblx0XHR0b2RheVRleHQ6ICdoZXV0ZScsIHRvZGF5U3RhdHVzOiAnJyxcblx0XHRjbGVhclRleHQ6ICdsw7ZzY2hlbicsIGNsZWFyU3RhdHVzOiAnYWt0dWVsbGVzIERhdHVtIGzDtnNjaGVuJyxcblx0XHRjbG9zZVRleHQ6ICdzY2hsaWXDn2VuJywgY2xvc2VTdGF0dXM6ICdvaG5lIMOEbmRlcnVuZ2VuIHNjaGxpZcOfZW4nLFxuXHRcdHllYXJTdGF0dXM6ICdhbmRlcmVzIEphaHIgYW56ZWlnZW4nLCBtb250aFN0YXR1czogJ2FuZGVyZW4gTW9uYXQgYW56ZWlnZScsXG5cdFx0d2Vla1RleHQ6ICdXbycsIHdlZWtTdGF0dXM6ICdXb2NoZSBkZXMgTW9uYXRzJyxcblx0XHRkYXlTdGF0dXM6ICdXw6RobGUgRCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ1fDpGhsZSBlaW4gRGF0dW0nLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2RlJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWRlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWRlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBHZXJtYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IE1pbGlhbiBXb2xmZiAobWFpbEBtaWxpYW53LmRlKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2RlJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYzt6dXLDvGNrJywgcHJldlN0YXR1czogJ2xldHp0ZW4gTW9uYXQgemVpZ2VuJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnVm9yJiN4M2U7JywgbmV4dFN0YXR1czogJ27DpGNoc3RlbiBNb25hdCB6ZWlnZW4nLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdoZXV0ZScsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAnaGV1dGUnLCB0b2RheVN0YXR1czogJycsXHJcblx0XHRjbGVhclRleHQ6ICdsw7ZzY2hlbicsIGNsZWFyU3RhdHVzOiAnYWt0dWVsbGVzIERhdHVtIGzDtnNjaGVuJyxcclxuXHRcdGNsb3NlVGV4dDogJ3NjaGxpZcOfZW4nLCBjbG9zZVN0YXR1czogJ29obmUgw4RuZGVydW5nZW4gc2NobGllw59lbicsXHJcblx0XHR5ZWFyU3RhdHVzOiAnYW5kZXJlcyBKYWhyIGFuemVpZ2VuJywgbW9udGhTdGF0dXM6ICdhbmRlcmVuIE1vbmF0IGFuemVpZ2UnLFxyXG5cdFx0d2Vla1RleHQ6ICdXbycsIHdlZWtTdGF0dXM6ICdXb2NoZSBkZXMgTW9uYXRzJyxcclxuXHRcdGRheVN0YXR1czogJ1fDpGhsZSBELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnV8OkaGxlIGVpbiBEYXR1bScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZGUnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-el.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-el.js index c4109c651e0..7f402880cf3 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-el.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-el.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['el']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgR3JlZWsgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBBbGV4IENpY292aWMgKGh0dHA6Ly93d3cuYWxleGNpY292aWMuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZWwnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnzqDPgc6/zrfOs86/z43OvM61zr3Ov8+CJywgcHJldlN0YXR1czogJ86Vz4DOuc+DzrrPjM+AzrfPg863IM+Az4HOv863zrPOv8+NzrzOtc69zr/PhSDOvM6uzr3OsScsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnzpXPgM+MzrzOtc69zr/PgicsIG5leHRTdGF0dXM6ICfOlc+AzrnPg866z4zPgM63z4POtyDOtc+Az4zOvM61zr3Ov8+FIM68zq7Ovc6xJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICfOpM+Bzq3Ph8+Jzr0gzpzOrs69zrHPgicsIGN1cnJlbnRTdGF0dXM6ICfOlc+AzrnPg866z4zPgM63z4POtyDPhM+Bzq3Ph86/zr3PhM6/z4IgzrzOrs69zrEnLFxuXHRcdHRvZGF5VGV4dDogJ86kz4HOrc+Hz4nOvSDOnM6uzr3Osc+CJywgdG9kYXlTdGF0dXM6ICfOlc+AzrnPg866z4zPgM63z4POtyDPhM+Bzq3Ph86/zr3PhM6/z4IgzrzOrs69zrEnLFxuXHRcdGNsZWFyVGV4dDogJ86jzrLOrs+DzrnOvM6/JywgY2xlYXJTdGF0dXM6ICfOo86yzq7Pg865zrzOvyDPhM63z4IgzrXPgM65zrvOtc6zzrzOrc69zrfPgiDOt868zrXPgc6/zrzOt869zq/Osc+CJyxcblx0XHRjbG9zZVRleHQ6ICfOms67zrXOr8+DzrnOvM6/JywgY2xvc2VTdGF0dXM6ICfOms67zrXOr8+DzrnOvM6/IM+Hz4nPgc6vz4IgzrHOu867zrHOs86uJyxcblx0XHR5ZWFyU3RhdHVzOiAnzpXPgM65z4POus+Mz4DOt8+DzrcgzqzOu867zr/PhSDOrc+Ezr/Phc+CJywgbW9udGhTdGF0dXM6ICfOlc+AzrnPg866z4zPgM63z4POtyDOrM67zrvOv8+FIM68zq7Ovc6xJyxcblx0XHR3ZWVrVGV4dDogJ86VzrLOtCcsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ86Vz4DOuc67zr/Os86uIEREIGQgTU0nLCBkZWZhdWx0U3RhdHVzOiAnzpXPgM65zrvOrc6+z4TOtSDOvM65zrEgzrfOvM61z4HOv868zrfOvc6vzrEnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VsJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBHcmVlayBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgQWxleCBDaWNvdmljIChodHRwOi8vd3d3LmFsZXhjaWNvdmljLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlbCddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnzqDPgc6/zrfOs86/z43OvM61zr3Ov8+CJywgcHJldlN0YXR1czogJ86Vz4DOuc+DzrrPjM+AzrfPg863IM+Az4HOv863zrPOv8+NzrzOtc69zr/PhSDOvM6uzr3OsScsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ86Vz4DPjM68zrXOvc6/z4InLCBuZXh0U3RhdHVzOiAnzpXPgM65z4POus+Mz4DOt8+DzrcgzrXPgM+MzrzOtc69zr/PhSDOvM6uzr3OsScsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ86kz4HOrc+Hz4nOvSDOnM6uzr3Osc+CJywgY3VycmVudFN0YXR1czogJ86Vz4DOuc+DzrrPjM+AzrfPg863IM+Ez4HOrc+Hzr/Ovc+Ezr/PgiDOvM6uzr3OsScsXHJcblx0XHR0b2RheVRleHQ6ICfOpM+Bzq3Ph8+Jzr0gzpzOrs69zrHPgicsIHRvZGF5U3RhdHVzOiAnzpXPgM65z4POus+Mz4DOt8+Dzrcgz4TPgc6tz4fOv869z4TOv8+CIM68zq7Ovc6xJyxcclxuXHRcdGNsZWFyVGV4dDogJ86jzrLOrs+DzrnOvM6/JywgY2xlYXJTdGF0dXM6ICfOo86yzq7Pg865zrzOvyDPhM63z4IgzrXPgM65zrvOtc6zzrzOrc69zrfPgiDOt868zrXPgc6/zrzOt869zq/Osc+CJyxcclxuXHRcdGNsb3NlVGV4dDogJ86azrvOtc6vz4POuc68zr8nLCBjbG9zZVN0YXR1czogJ86azrvOtc6vz4POuc68zr8gz4fPic+Bzq/PgiDOsc67zrvOsc6zzq4nLFxyXG5cdFx0eWVhclN0YXR1czogJ86Vz4DOuc+DzrrPjM+AzrfPg863IM6szrvOu86/z4Ugzq3PhM6/z4XPgicsIG1vbnRoU3RhdHVzOiAnzpXPgM65z4POus+Mz4DOt8+DzrcgzqzOu867zr/PhSDOvM6uzr3OsScsXHJcblx0XHR3ZWVrVGV4dDogJ86VzrLOtCcsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnzpXPgM65zrvOv86zzq4gREQgZCBNTScsIGRlZmF1bHRTdGF0dXM6ICfOlc+AzrnOu86tzr7PhM61IM68zrnOsSDOt868zrXPgc6/zrzOt869zq/OsScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZWwnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-en-AU.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-en-AU.js index 41e0b925022..91dbc266af4 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-en-AU.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-en-AU.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['en-AU']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVuLUFVLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVuLUFVLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRW5nbGlzaC9BdXN0cmFsaWEgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgQmFzZWQgb24gZW4tR0IuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VuLUFVJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJ1ByZXYnLCBwcmV2U3RhdHVzOiAnU2hvdyB0aGUgcHJldmlvdXMgbW9udGgnLFxuXHRcdHByZXZKdW1wVGV4dDogJyZsdDsmbHQ7JywgcHJldkp1bXBTdGF0dXM6ICdTaG93IHRoZSBwcmV2aW91cyB5ZWFyJyxcblx0XHRuZXh0VGV4dDogJ05leHQnLCBuZXh0U3RhdHVzOiAnU2hvdyB0aGUgbmV4dCBtb250aCcsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJmd0OyZndDsnLCBuZXh0SnVtcFN0YXR1czogJ1Nob3cgdGhlIG5leHQgeWVhcicsXG5cdFx0Y3VycmVudFRleHQ6ICdDdXJyZW50JywgY3VycmVudFN0YXR1czogJ1Nob3cgdGhlIGN1cnJlbnQgbW9udGgnLFxuXHRcdHRvZGF5VGV4dDogJ1RvZGF5JywgdG9kYXlTdGF0dXM6ICdTaG93IHRvZGF5XFwncyBtb250aCcsXG5cdFx0Y2xlYXJUZXh0OiAnQ2xlYXInLCBjbGVhclN0YXR1czogJ0NsZWFyIGFsbCB0aGUgZGF0ZXMnLFxuXHRcdGNsb3NlVGV4dDogJ0RvbmUnLCBjbG9zZVN0YXR1czogJ0Nsb3NlIHRoZSBkYXRlcGlja2VyJyxcblx0XHR5ZWFyU3RhdHVzOiAnQ2hhbmdlIHRoZSB5ZWFyJywgbW9udGhTdGF0dXM6ICdDaGFuZ2UgdGhlIG1vbnRoJyxcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJ1dlZWsgb2YgdGhlIHllYXInLFxuXHRcdGRheVN0YXR1czogJ1NlbGVjdCBERCwgTSBkLCB5eXl5JywgZGVmYXVsdFN0YXR1czogJ1NlbGVjdCBhIGRhdGUnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VuLUFVJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVuLUFVLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVuLUFVLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBFbmdsaXNoL0F1c3RyYWxpYSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIEJhc2VkIG9uIGVuLUdCLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZW4tQVUnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJ1ByZXYnLCBwcmV2U3RhdHVzOiAnU2hvdyB0aGUgcHJldmlvdXMgbW9udGgnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJmx0OyZsdDsnLCBwcmV2SnVtcFN0YXR1czogJ1Nob3cgdGhlIHByZXZpb3VzIHllYXInLFxyXG5cdFx0bmV4dFRleHQ6ICdOZXh0JywgbmV4dFN0YXR1czogJ1Nob3cgdGhlIG5leHQgbW9udGgnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJmd0OyZndDsnLCBuZXh0SnVtcFN0YXR1czogJ1Nob3cgdGhlIG5leHQgeWVhcicsXHJcblx0XHRjdXJyZW50VGV4dDogJ0N1cnJlbnQnLCBjdXJyZW50U3RhdHVzOiAnU2hvdyB0aGUgY3VycmVudCBtb250aCcsXHJcblx0XHR0b2RheVRleHQ6ICdUb2RheScsIHRvZGF5U3RhdHVzOiAnU2hvdyB0b2RheVxcJ3MgbW9udGgnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnQ2xlYXInLCBjbGVhclN0YXR1czogJ0NsZWFyIGFsbCB0aGUgZGF0ZXMnLFxyXG5cdFx0Y2xvc2VUZXh0OiAnRG9uZScsIGNsb3NlU3RhdHVzOiAnQ2xvc2UgdGhlIGRhdGVwaWNrZXInLFxyXG5cdFx0eWVhclN0YXR1czogJ0NoYW5nZSB0aGUgeWVhcicsIG1vbnRoU3RhdHVzOiAnQ2hhbmdlIHRoZSBtb250aCcsXHJcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJ1dlZWsgb2YgdGhlIHllYXInLFxyXG5cdFx0ZGF5U3RhdHVzOiAnU2VsZWN0IERELCBNIGQsIHl5eXknLCBkZWZhdWx0U3RhdHVzOiAnU2VsZWN0IGEgZGF0ZScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZW4tQVUnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-en-GB.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-en-GB.js index 53113eb1c91..cd6935b94bf 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-en-GB.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-en-GB.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['en-GB']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVuLUdCLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVuLUdCLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRW5nbGlzaC9VSyBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBTdHVhcnQuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VuLUdCJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJ1ByZXYnLCBwcmV2U3RhdHVzOiAnU2hvdyB0aGUgcHJldmlvdXMgbW9udGgnLFxuXHRcdHByZXZKdW1wVGV4dDogJyZsdDsmbHQ7JywgcHJldkp1bXBTdGF0dXM6ICdTaG93IHRoZSBwcmV2aW91cyB5ZWFyJyxcblx0XHRuZXh0VGV4dDogJ05leHQnLCBuZXh0U3RhdHVzOiAnU2hvdyB0aGUgbmV4dCBtb250aCcsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJmd0OyZndDsnLCBuZXh0SnVtcFN0YXR1czogJ1Nob3cgdGhlIG5leHQgeWVhcicsXG5cdFx0Y3VycmVudFRleHQ6ICdDdXJyZW50JywgY3VycmVudFN0YXR1czogJ1Nob3cgdGhlIGN1cnJlbnQgbW9udGgnLFxuXHRcdHRvZGF5VGV4dDogJ1RvZGF5JywgdG9kYXlTdGF0dXM6ICdTaG93IHRvZGF5XFwncyBtb250aCcsXG5cdFx0Y2xlYXJUZXh0OiAnQ2xlYXInLCBjbGVhclN0YXR1czogJ0NsZWFyIGFsbCB0aGUgZGF0ZXMnLFxuXHRcdGNsb3NlVGV4dDogJ0RvbmUnLCBjbG9zZVN0YXR1czogJ0Nsb3NlIHRoZSBkYXRlcGlja2VyJyxcblx0XHR5ZWFyU3RhdHVzOiAnQ2hhbmdlIHRoZSB5ZWFyJywgbW9udGhTdGF0dXM6ICdDaGFuZ2UgdGhlIG1vbnRoJyxcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJ1dlZWsgb2YgdGhlIHllYXInLFxuXHRcdGRheVN0YXR1czogJ1NlbGVjdCBERCwgTSBkLCB5eXl5JywgZGVmYXVsdFN0YXR1czogJ1NlbGVjdCBhIGRhdGUnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VuLUdCJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVuLUdCLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVuLUdCLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBFbmdsaXNoL1VLIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgU3R1YXJ0LiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZW4tR0InXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJ1ByZXYnLCBwcmV2U3RhdHVzOiAnU2hvdyB0aGUgcHJldmlvdXMgbW9udGgnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJmx0OyZsdDsnLCBwcmV2SnVtcFN0YXR1czogJ1Nob3cgdGhlIHByZXZpb3VzIHllYXInLFxyXG5cdFx0bmV4dFRleHQ6ICdOZXh0JywgbmV4dFN0YXR1czogJ1Nob3cgdGhlIG5leHQgbW9udGgnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJmd0OyZndDsnLCBuZXh0SnVtcFN0YXR1czogJ1Nob3cgdGhlIG5leHQgeWVhcicsXHJcblx0XHRjdXJyZW50VGV4dDogJ0N1cnJlbnQnLCBjdXJyZW50U3RhdHVzOiAnU2hvdyB0aGUgY3VycmVudCBtb250aCcsXHJcblx0XHR0b2RheVRleHQ6ICdUb2RheScsIHRvZGF5U3RhdHVzOiAnU2hvdyB0b2RheVxcJ3MgbW9udGgnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnQ2xlYXInLCBjbGVhclN0YXR1czogJ0NsZWFyIGFsbCB0aGUgZGF0ZXMnLFxyXG5cdFx0Y2xvc2VUZXh0OiAnRG9uZScsIGNsb3NlU3RhdHVzOiAnQ2xvc2UgdGhlIGRhdGVwaWNrZXInLFxyXG5cdFx0eWVhclN0YXR1czogJ0NoYW5nZSB0aGUgeWVhcicsIG1vbnRoU3RhdHVzOiAnQ2hhbmdlIHRoZSBtb250aCcsXHJcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJ1dlZWsgb2YgdGhlIHllYXInLFxyXG5cdFx0ZGF5U3RhdHVzOiAnU2VsZWN0IERELCBNIGQsIHl5eXknLCBkZWZhdWx0U3RhdHVzOiAnU2VsZWN0IGEgZGF0ZScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZW4tR0InXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-en-NZ.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-en-NZ.js index 11d0ae5c4ad..72643f60f91 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-en-NZ.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-en-NZ.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['en-NZ']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVuLU5aLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVuLU5aLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRW5nbGlzaC9OZXcgWmVhbGFuZCBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBCYXNlZCBvbiBlbi1HQi4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZW4tTlonXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnUHJldicsIHByZXZTdGF0dXM6ICdTaG93IHRoZSBwcmV2aW91cyBtb250aCcsXG5cdFx0cHJldkp1bXBUZXh0OiAnJmx0OyZsdDsnLCBwcmV2SnVtcFN0YXR1czogJ1Nob3cgdGhlIHByZXZpb3VzIHllYXInLFxuXHRcdG5leHRUZXh0OiAnTmV4dCcsIG5leHRTdGF0dXM6ICdTaG93IHRoZSBuZXh0IG1vbnRoJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmZ3Q7Jmd0OycsIG5leHRKdW1wU3RhdHVzOiAnU2hvdyB0aGUgbmV4dCB5ZWFyJyxcblx0XHRjdXJyZW50VGV4dDogJ0N1cnJlbnQnLCBjdXJyZW50U3RhdHVzOiAnU2hvdyB0aGUgY3VycmVudCBtb250aCcsXG5cdFx0dG9kYXlUZXh0OiAnVG9kYXknLCB0b2RheVN0YXR1czogJ1Nob3cgdG9kYXlcXCdzIG1vbnRoJyxcblx0XHRjbGVhclRleHQ6ICdDbGVhcicsIGNsZWFyU3RhdHVzOiAnQ2xlYXIgYWxsIHRoZSBkYXRlcycsXG5cdFx0Y2xvc2VUZXh0OiAnRG9uZScsIGNsb3NlU3RhdHVzOiAnQ2xvc2UgdGhlIGRhdGVwaWNrZXInLFxuXHRcdHllYXJTdGF0dXM6ICdDaGFuZ2UgdGhlIHllYXInLCBtb250aFN0YXR1czogJ0NoYW5nZSB0aGUgbW9udGgnLFxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnV2VlayBvZiB0aGUgeWVhcicsXG5cdFx0ZGF5U3RhdHVzOiAnU2VsZWN0IERELCBNIGQsIHl5eXknLCBkZWZhdWx0U3RhdHVzOiAnU2VsZWN0IGEgZGF0ZScsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZW4tTlonXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVuLU5aLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVuLU5aLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBFbmdsaXNoL05ldyBaZWFsYW5kIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgQmFzZWQgb24gZW4tR0IuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlbi1OWiddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnUHJldicsIHByZXZTdGF0dXM6ICdTaG93IHRoZSBwcmV2aW91cyBtb250aCcsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmbHQ7Jmx0OycsIHByZXZKdW1wU3RhdHVzOiAnU2hvdyB0aGUgcHJldmlvdXMgeWVhcicsXHJcblx0XHRuZXh0VGV4dDogJ05leHQnLCBuZXh0U3RhdHVzOiAnU2hvdyB0aGUgbmV4dCBtb250aCcsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmZ3Q7Jmd0OycsIG5leHRKdW1wU3RhdHVzOiAnU2hvdyB0aGUgbmV4dCB5ZWFyJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnQ3VycmVudCcsIGN1cnJlbnRTdGF0dXM6ICdTaG93IHRoZSBjdXJyZW50IG1vbnRoJyxcclxuXHRcdHRvZGF5VGV4dDogJ1RvZGF5JywgdG9kYXlTdGF0dXM6ICdTaG93IHRvZGF5XFwncyBtb250aCcsXHJcblx0XHRjbGVhclRleHQ6ICdDbGVhcicsIGNsZWFyU3RhdHVzOiAnQ2xlYXIgYWxsIHRoZSBkYXRlcycsXHJcblx0XHRjbG9zZVRleHQ6ICdEb25lJywgY2xvc2VTdGF0dXM6ICdDbG9zZSB0aGUgZGF0ZXBpY2tlcicsXHJcblx0XHR5ZWFyU3RhdHVzOiAnQ2hhbmdlIHRoZSB5ZWFyJywgbW9udGhTdGF0dXM6ICdDaGFuZ2UgdGhlIG1vbnRoJyxcclxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnV2VlayBvZiB0aGUgeWVhcicsXHJcblx0XHRkYXlTdGF0dXM6ICdTZWxlY3QgREQsIE0gZCwgeXl5eScsIGRlZmF1bHRTdGF0dXM6ICdTZWxlY3QgYSBkYXRlJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlbi1OWiddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-eo.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-eo.js index 112b24c196a..7e7378fd131 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-eo.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-eo.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['eo']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVvLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVvLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRXNwZXJhbnRvIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgT2xpdmllciBNLiAob2xpdmllcndlYkBpZnJhbmNlLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VvJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyZsdDtBbnRhJywgcHJldlN0YXR1czogJ1ZpZGkgbGEgYW50YcWtYW4gbW9uYXRvbicsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnU2VrdiZndDsnLCBuZXh0U3RhdHVzOiAnVmlkaSBsYSBzZWt2YW4gbW9uYXRvbicsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnTnVuYScsIGN1cnJlbnRTdGF0dXM6ICdWaWRpIGxhIG51bmFuIG1vbmF0b24nLFxuXHRcdHRvZGF5VGV4dDogJ051bmEnLCB0b2RheVN0YXR1czogJ1ZpZGkgbGEgbnVuYW4gbW9uYXRvbicsXG5cdFx0Y2xlYXJUZXh0OiAnVmFraWdpJywgY2xlYXJTdGF0dXM6ICcnLFxuXHRcdGNsb3NlVGV4dDogJ0Zlcm1pJywgY2xvc2VTdGF0dXM6ICdGZXJtaSBzZW4gbW9kaWZpJyxcblx0XHR5ZWFyU3RhdHVzOiAnVmlkaSBhbGlhbiBqYXJvbicsIG1vbnRoU3RhdHVzOiAnVmlkaSBhbGlhbiBtb25hdG9uJyxcblx0XHR3ZWVrVGV4dDogJ1NiJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnRWxla3RpIERELCBNTSBkJywgZGVmYXVsdFN0YXR1czogJ0VsZWt0aSBsYSBkYXRvbicsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZW8nXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVvLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVvLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBFc3BlcmFudG8gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IE9saXZpZXIgTS4gKG9saXZpZXJ3ZWJAaWZyYW5jZS5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZW8nXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyZsdDtBbnRhJywgcHJldlN0YXR1czogJ1ZpZGkgbGEgYW50YcWtYW4gbW9uYXRvbicsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ1Nla3YmZ3Q7JywgbmV4dFN0YXR1czogJ1ZpZGkgbGEgc2VrdmFuIG1vbmF0b24nLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdOdW5hJywgY3VycmVudFN0YXR1czogJ1ZpZGkgbGEgbnVuYW4gbW9uYXRvbicsXHJcblx0XHR0b2RheVRleHQ6ICdOdW5hJywgdG9kYXlTdGF0dXM6ICdWaWRpIGxhIG51bmFuIG1vbmF0b24nLFxyXG5cdFx0Y2xlYXJUZXh0OiAnVmFraWdpJywgY2xlYXJTdGF0dXM6ICcnLFxyXG5cdFx0Y2xvc2VUZXh0OiAnRmVybWknLCBjbG9zZVN0YXR1czogJ0Zlcm1pIHNlbiBtb2RpZmknLFxyXG5cdFx0eWVhclN0YXR1czogJ1ZpZGkgYWxpYW4gamFyb24nLCBtb250aFN0YXR1czogJ1ZpZGkgYWxpYW4gbW9uYXRvbicsXHJcblx0XHR3ZWVrVGV4dDogJ1NiJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdFbGVrdGkgREQsIE1NIGQnLCBkZWZhdWx0U3RhdHVzOiAnRWxla3RpIGxhIGRhdG9uJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlbyddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-es-AR.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-es-AR.js index 33790ad89e5..0d02461c268 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-es-AR.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-es-AR.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['es-AR']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVzLUFSLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVzLUFSLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU3BhbmlzaC9BcmdlbnRpbmEgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBFc3RlYmFuIEFjb3N0YSBWaWxsYWZhbmUgKGVzdGViYW4uYWNvc3RhQGdsb2JhbnQuY29tKSBvZiBHbG9iYW50IChodHRwOi8vd3d3Lmdsb2JhbnQuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZXMtQVInXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QW50JywgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnU2lnJiN4M2U7JywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnSG95JywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnSG95JywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ0xpbXBpYXInLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAnQ2VycmFyJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdTbScsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlcy1BUiddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVzLUFSLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVzLUFSLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTcGFuaXNoL0FyZ2VudGluYSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgRXN0ZWJhbiBBY29zdGEgVmlsbGFmYW5lIChlc3RlYmFuLmFjb3N0YUBnbG9iYW50LmNvbSkgb2YgR2xvYmFudCAoaHR0cDovL3d3dy5nbG9iYW50LmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlcy1BUiddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QW50JywgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ1NpZyYjeDNlOycsIG5leHRTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdIb3knLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ0hveScsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ0xpbXBpYXInLCBjbGVhclN0YXR1czogJycsXHJcblx0XHRjbG9zZVRleHQ6ICdDZXJyYXInLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxyXG5cdFx0d2Vla1RleHQ6ICdTbScsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VzLUFSJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-es-PE.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-es-PE.js index 7bb63bcf5ea..17cc58cc2a0 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-es-PE.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-es-PE.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['es-PE']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVzLVBFLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVzLVBFLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU3BhbmlzaC9QZXLDuiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEZpc2NoZXIgVGlyYWRvIChmaXNoZGV2QGdsb2JhbnQuY29tKSBvZiBBU0lYIChodHRwOi8vd3d3LmFzaXhvbmxpbmUuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZXMtUEUnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QW50JywgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnU2lnJiN4M2U7JywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnSG95JywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnSG95JywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ0xpbXBpYXInLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAnQ2VycmFyJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdTbScsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ0REIGQsIE1NIHl5eXknLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlcy1QRSddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVzLVBFLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVzLVBFLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTcGFuaXNoL1BlcsO6IGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBGaXNjaGVyIFRpcmFkbyAoZmlzaGRldkBnbG9iYW50LmNvbSkgb2YgQVNJWCAoaHR0cDovL3d3dy5hc2l4b25saW5lLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlcy1QRSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QW50JywgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ1NpZyYjeDNlOycsIG5leHRTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdIb3knLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ0hveScsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ0xpbXBpYXInLCBjbGVhclN0YXR1czogJycsXHJcblx0XHRjbG9zZVRleHQ6ICdDZXJyYXInLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxyXG5cdFx0d2Vla1RleHQ6ICdTbScsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnREQgZCwgTU0geXl5eScsIGRlZmF1bHRTdGF0dXM6ICcnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VzLVBFJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-es.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-es.js index 73eb664004d..7f73dd24b3d 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-es.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-es.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['es']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU3BhbmlzaCBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBUcmFkdWNpZG8gcG9yIFZlc3RlciAoeHZlc3RlckBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlcyddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYztBbnQnLCBwcmV2U3RhdHVzOiAnJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICdTaWcmI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICdIb3knLCBjdXJyZW50U3RhdHVzOiAnJyxcblx0XHR0b2RheVRleHQ6ICdIb3knLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAnTGltcGlhcicsIGNsZWFyU3RhdHVzOiAnJyxcblx0XHRjbG9zZVRleHQ6ICdDZXJyYXInLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcblx0XHR3ZWVrVGV4dDogJ1NtJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VzJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTcGFuaXNoIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgVHJhZHVjaWRvIHBvciBWZXN0ZXIgKHh2ZXN0ZXJAZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VzJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYztBbnQnLCBwcmV2U3RhdHVzOiAnJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnU2lnJiN4M2U7JywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ0hveScsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAnSG95JywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnTGltcGlhcicsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ0NlcnJhcicsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ1NtJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZXMnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-et.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-et.js index e9073f803d0..b5f42143cbb 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-et.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-et.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['et']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWV0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWV0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRXN0b25pYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBNYXJ0IFPDtW1lcm1hYSAobXJ0cy5weWRldiBhdCBnbWFpbCBjb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydldCddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICdFZWxuZXYnLCBwcmV2U3RhdHVzOiAnJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICdKw6RyZ25ldicsIG5leHRTdGF0dXM6ICcnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ1TDpG5hJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnVMOkbmEnLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAnWCcsIGNsZWFyU3RhdHVzOiAnJyxcblx0XHRjbG9zZVRleHQ6ICdTdWxnZScsIGNsb3NlU3RhdHVzOiAnJyxcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZXQnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWV0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWV0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBFc3RvbmlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTWFydCBTw7VtZXJtYWEgKG1ydHMucHlkZXYgYXQgZ21haWwgY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2V0J10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICdFZWxuZXYnLCBwcmV2U3RhdHVzOiAnJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnSsOkcmduZXYnLCBuZXh0U3RhdHVzOiAnJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnVMOkbmEnLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ1TDpG5hJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnWCcsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ1N1bGdlJywgY2xvc2VTdGF0dXM6ICcnLFxyXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcclxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnJyxcclxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydldCddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-eu.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-eu.js index 5240ab8ff3d..7dc9b0a751e 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-eu.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-eu.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['eu']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWV1LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWV1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQmFzcXVlIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIEthcnJpa2FzLWVrIGl0enVsaWEgKGthcnJpa2FzQGthcnJpa2FzLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2V1J10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyYjeDNjO0F1cicsIHByZXZTdGF0dXM6ICcnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ0h1ciYjeDNlOycsIG5leHRTdGF0dXM6ICcnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ0dhdXInLCBjdXJyZW50U3RhdHVzOiAnJyxcblx0XHR0b2RheVRleHQ6ICdHYXVyJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ1gnLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAnRWdpbmEnLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnREQgZCBNTScsIGRlZmF1bHRTdGF0dXM6ICcnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2V1J10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWV1LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWV1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBCYXNxdWUgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBLYXJyaWthcy1layBpdHp1bGlhIChrYXJyaWthc0BrYXJyaWthcy5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZXUnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO0F1cicsIHByZXZTdGF0dXM6ICcnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICdIdXImI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnR2F1cicsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAnR2F1cicsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ1gnLCBjbGVhclN0YXR1czogJycsXHJcblx0XHRjbG9zZVRleHQ6ICdFZ2luYScsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCBkIE1NJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZXUnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fa.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fa.js index defabd8b971..b21fd7e3476 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fa.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fa.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['fa']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZhLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRmFyc2kvUGVyc2lhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBKYXZhZCBNb3dsYW5lemhhZCAtLSBqbW93bGFAZ21haWwuY29tLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydmYSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYzvZgtio2YTZiicsIHByZXZTdGF0dXM6ICfZhtmF2KfZiti0INmF2KfZhyDZgtio2YQnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ9io2LnYr9mKJiN4M2U7JywgbmV4dFN0YXR1czogJ9mG2YXYp9mK2LQg2YXYp9mHINio2LnYrycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAn2KfZhdix2YjYsicsIGN1cnJlbnRTdGF0dXM6ICfZhtmF2KfZiti0INmF2KfZhyDYrNin2LHZiicsXG5cdFx0dG9kYXlUZXh0OiAn2KfZhdix2YjYsicsIHRvZGF5U3RhdHVzOiAn2YbZhdin2YrYtCDZhdin2Ycg2KzYp9ix2YonLFxuXHRcdGNsZWFyVGV4dDogJ9it2LDZgSDYqtin2LHZitiuJywgY2xlYXJTdGF0dXM6ICfZvtin2qkg2qnYsdiv2YYg2KrYp9ix2YrYriDYrNin2LHZiicsXG5cdFx0Y2xvc2VUZXh0OiAn2KjYs9iq2YYnLCBjbG9zZVN0YXR1czogJ9io2LPYqtmGINio2K/ZiNmGINin2LnZhdin2YQg2KrYutmK2YrYsdin2KonLFxuXHRcdHllYXJTdGF0dXM6ICfZhtmF2KfZiti0INiz2KfZhCDZhdiq2YHYp9mI2KonLCBtb250aFN0YXR1czogJ9mG2YXYp9mK2LQg2YXYp9mHINmF2KrZgdin2YjYqicsXG5cdFx0d2Vla1RleHQ6ICfZh9mBJywgd2Vla1N0YXR1czogJ9mH2YHYqtmH2ZAg2LPYp9mEJyxcblx0XHRkYXlTdGF0dXM6ICfYp9mG2KrYrtin2KggRCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ9in2YbYqtiu2KfYqCDYqtin2LHZitiuJyxcblx0XHRpc1JUTDogdHJ1ZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ZhJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZhLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBGYXJzaS9QZXJzaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgSmF2YWQgTW93bGFuZXpoYWQgLS0gam1vd2xhQGdtYWlsLmNvbS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ZhJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYzvZgtio2YTZiicsIHByZXZTdGF0dXM6ICfZhtmF2KfZiti0INmF2KfZhyDZgtio2YQnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICfYqNi52K/ZiiYjeDNlOycsIG5leHRTdGF0dXM6ICfZhtmF2KfZiti0INmF2KfZhyDYqNi52K8nLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfYp9mF2LHZiNiyJywgY3VycmVudFN0YXR1czogJ9mG2YXYp9mK2LQg2YXYp9mHINis2KfYsdmKJyxcclxuXHRcdHRvZGF5VGV4dDogJ9in2YXYsdmI2LInLCB0b2RheVN0YXR1czogJ9mG2YXYp9mK2LQg2YXYp9mHINis2KfYsdmKJyxcclxuXHRcdGNsZWFyVGV4dDogJ9it2LDZgSDYqtin2LHZitiuJywgY2xlYXJTdGF0dXM6ICfZvtin2qkg2qnYsdiv2YYg2KrYp9ix2YrYriDYrNin2LHZiicsXHJcblx0XHRjbG9zZVRleHQ6ICfYqNiz2KrZhicsIGNsb3NlU3RhdHVzOiAn2KjYs9iq2YYg2KjYr9mI2YYg2KfYudmF2KfZhCDYqti62YrZitix2KfYqicsXHJcblx0XHR5ZWFyU3RhdHVzOiAn2YbZhdin2YrYtCDYs9in2YQg2YXYqtmB2KfZiNiqJywgbW9udGhTdGF0dXM6ICfZhtmF2KfZiti0INmF2KfZhyDZhdiq2YHYp9mI2KonLFxyXG5cdFx0d2Vla1RleHQ6ICfZh9mBJywgd2Vla1N0YXR1czogJ9mH2YHYqtmH2ZAg2LPYp9mEJyxcclxuXHRcdGRheVN0YXR1czogJ9in2YbYqtiu2KfYqCBELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAn2KfZhtiq2K7Yp9ioINiq2KfYsdmK2K4nLFxyXG5cdFx0aXNSVEw6IHRydWVcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZmEnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fi.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fi.js index 72dfa2bd869..da22390b135 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fi.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fi.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['fi']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZpLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZpLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRmlubmlzaCBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEhhcnJpIEtpbHBpw7YgKGhhcnJpa2lscGlvQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ZpJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyZsYXF1bztFZGVsbGluZW4nLCBwcmV2U3RhdHVzOiAnJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICdTZXVyYWF2YSZyYXF1bzsnLCBuZXh0U3RhdHVzOiAnJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICdUJmF1bWw7biZhdW1sOyZhdW1sO24nLCBjdXJyZW50U3RhdHVzOiAnJyxcblx0XHR0b2RheVRleHQ6ICdUJmF1bWw7biZhdW1sOyZhdW1sO24nLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAnVHloamVubiZhdW1sOycsIGNsZWFyU3RhdHVzOiAnJyxcblx0XHRjbG9zZVRleHQ6ICdTdWxqZScsIGNsb3NlU3RhdHVzOiAnJyxcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxuXHRcdHdlZWtUZXh0OiAnVmsnLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZmknXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZpLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZpLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBGaW5uaXNoIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBIYXJyaSBLaWxwacO2IChoYXJyaWtpbHBpb0BnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZmknXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyZsYXF1bztFZGVsbGluZW4nLCBwcmV2U3RhdHVzOiAnJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnU2V1cmFhdmEmcmFxdW87JywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ1QmYXVtbDtuJmF1bWw7JmF1bWw7bicsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAnVCZhdW1sO24mYXVtbDsmYXVtbDtuJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnVHloamVubiZhdW1sOycsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ1N1bGplJywgY2xvc2VTdGF0dXM6ICcnLFxyXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcclxuXHRcdHdlZWtUZXh0OiAnVmsnLCB3ZWVrU3RhdHVzOiAnJyxcclxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydmaSddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fo.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fo.js index 67145efbcde..c085341a36b 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fo.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fo.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['fo']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZvLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZvLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRmFyb2VzZSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IFN2ZXJyaSBNb2hyIE9sc2VuLCBzdmVycmltb0BnbWFpbC5jb20gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZm8nXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7U8Otc3RhJywgcHJldlN0YXR1czogJ1bDrXMgc8Otc3RhIG3DoW5hw7BhbicsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICdWw61zIHPDrXN0YSDDoXJpw7AnLFxuXHRcdG5leHRUZXh0OiAnTsOmc3RhJiN4M2U7JywgbmV4dFN0YXR1czogJ1bDrXMgbsOmc3RhIG3DoW5hw7BhbicsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICdWw61zIG7DpnN0YSDDoXJpw7AnLFxuXHRcdGN1cnJlbnRUZXh0OiAnSGVzaW4nLCBjdXJyZW50U3RhdHVzOiAnVsOtcyBoZW5kYW4gbcOhbmHDsGFuJyxcblx0XHR0b2RheVRleHQ6ICfDjSBkYWcnLCB0b2RheVN0YXR1czogJ1bDrXMgbcOhbmHDsGFuIGZ5cmkgw60gZGFnJyxcblx0XHRjbGVhclRleHQ6ICdTdHJpa2EnLCBjbGVhclN0YXR1czogJ1N0cmlrYSBhbGxpciBtw6FuYcOwYXJuYXInLFxuXHRcdGNsb3NlVGV4dDogJ0dveW0nLCBjbG9zZVN0YXR1czogJ0dveW0gaGV0dGEgdmluZGV5w7BnYScsXG5cdFx0eWVhclN0YXR1czogJ0Jyb3l0IMOhcmnDsCcsIG1vbnRoU3RhdHVzOiAnQnJveXQgbcOhbmHDsGFucycsXG5cdFx0d2Vla1RleHQ6ICdWaycsIHdlZWtTdGF0dXM6ICdWaWthIGF2IMOhcmludW0nLFxuXHRcdGRheVN0YXR1czogJ1ZlbCBERCwgTSBkLCB5eXl5JywgZGVmYXVsdFN0YXR1czogJ1ZlbCBlaW4gZGF0bycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZm8nXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZvLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZvLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBGYXJvZXNlIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBTdmVycmkgTW9ociBPbHNlbiwgc3ZlcnJpbW9AZ21haWwuY29tICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydmbyddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7U8Otc3RhJywgcHJldlN0YXR1czogJ1bDrXMgc8Otc3RhIG3DoW5hw7BhbicsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ1bDrXMgc8Otc3RhIMOhcmnDsCcsXHJcblx0XHRuZXh0VGV4dDogJ07DpnN0YSYjeDNlOycsIG5leHRTdGF0dXM6ICdWw61zIG7DpnN0YSBtw6FuYcOwYW4nLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICdWw61zIG7DpnN0YSDDoXJpw7AnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdIZXNpbicsIGN1cnJlbnRTdGF0dXM6ICdWw61zIGhlbmRhbiBtw6FuYcOwYW4nLFxyXG5cdFx0dG9kYXlUZXh0OiAnw40gZGFnJywgdG9kYXlTdGF0dXM6ICdWw61zIG3DoW5hw7BhbiBmeXJpIMOtIGRhZycsXHJcblx0XHRjbGVhclRleHQ6ICdTdHJpa2EnLCBjbGVhclN0YXR1czogJ1N0cmlrYSBhbGxpciBtw6FuYcOwYXJuYXInLFxyXG5cdFx0Y2xvc2VUZXh0OiAnR295bScsIGNsb3NlU3RhdHVzOiAnR295bSBoZXR0YSB2aW5kZXnDsGdhJyxcclxuXHRcdHllYXJTdGF0dXM6ICdCcm95dCDDoXJpw7AnLCBtb250aFN0YXR1czogJ0Jyb3l0IG3DoW5hw7BhbnMnLFxyXG5cdFx0d2Vla1RleHQ6ICdWaycsIHdlZWtTdGF0dXM6ICdWaWthIGF2IMOhcmludW0nLFxyXG5cdFx0ZGF5U3RhdHVzOiAnVmVsIERELCBNIGQsIHl5eXknLCBkZWZhdWx0U3RhdHVzOiAnVmVsIGVpbiBkYXRvJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydmbyddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fr-CH.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fr-CH.js index 900f1607745..edfeb633b94 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fr-CH.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fr-CH.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['fr-CH']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZyLUNILmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZyLUNILmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU3dpc3MgRnJlbmNoIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTWFydGluIFZvZWxrbGUgKG1hcnRpbi52b2Vsa2xlQGUtdGMuY2gpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydmci1DSCddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYztQcsOpYycsIHByZXZTdGF0dXM6ICdWb2lyIGxlIG1vaXMgcHLDqWPDqWRlbnQnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnVm9pciBsXFwnYW5uw6llIHByw6ljw6lkZW50Jyxcblx0XHRuZXh0VGV4dDogJ1N1aXYmI3gzZTsnLCBuZXh0U3RhdHVzOiAnVm9pciBsZSBtb2lzIHN1aXZhbnQnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnVm9pciBsXFwnYW5uw6llIHN1aXZhbnQnLFxuXHRcdGN1cnJlbnRUZXh0OiAnQ291cmFudCcsIGN1cnJlbnRTdGF0dXM6ICdWb2lyIGxlIG1vaXMgY291cmFudCcsXG5cdFx0dG9kYXlUZXh0OiAnQXVqb3VyZFxcJ2h1aScsIHRvZGF5U3RhdHVzOiAnVm9pciBhdWpvdXJkXFwnaHVpJyxcblx0XHRjbGVhclRleHQ6ICdFZmZhY2VyJywgY2xlYXJTdGF0dXM6ICdFZmZhY2VyIGxhIGRhdGUgc8OpbGVjdGlvbm7DqWUnLFxuXHRcdGNsb3NlVGV4dDogJ0Zlcm1lcicsIGNsb3NlU3RhdHVzOiAnRmVybWVyIHNhbnMgbW9kaWZpZXInLFxuXHRcdHllYXJTdGF0dXM6ICdWb2lyIHVuZSBhdXRyZSBhbm7DqWUnLCBtb250aFN0YXR1czogJ1ZvaXIgdW4gYXV0cmUgbW9pcycsXG5cdFx0d2Vla1RleHQ6ICdTbScsIHdlZWtTdGF0dXM6ICdTZW1haW5lIGRlIGxcXCdhbm7DqWUnLFxuXHRcdGRheVN0YXR1czogJ1xcJ0Nob2lzaXJcXCcgbGUgREQgZCBNTScsIGRlZmF1bHRTdGF0dXM6ICdDaG9pc2lyIGxhIGRhdGUnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ZyLUNIJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZyLUNILmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZyLUNILmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTd2lzcyBGcmVuY2ggbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IE1hcnRpbiBWb2Vsa2xlIChtYXJ0aW4udm9lbGtsZUBlLXRjLmNoKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ZyLUNIJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYztQcsOpYycsIHByZXZTdGF0dXM6ICdWb2lyIGxlIG1vaXMgcHLDqWPDqWRlbnQnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICdWb2lyIGxcXCdhbm7DqWUgcHLDqWPDqWRlbnQnLFxyXG5cdFx0bmV4dFRleHQ6ICdTdWl2JiN4M2U7JywgbmV4dFN0YXR1czogJ1ZvaXIgbGUgbW9pcyBzdWl2YW50JyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnVm9pciBsXFwnYW5uw6llIHN1aXZhbnQnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdDb3VyYW50JywgY3VycmVudFN0YXR1czogJ1ZvaXIgbGUgbW9pcyBjb3VyYW50JyxcclxuXHRcdHRvZGF5VGV4dDogJ0F1am91cmRcXCdodWknLCB0b2RheVN0YXR1czogJ1ZvaXIgYXVqb3VyZFxcJ2h1aScsXHJcblx0XHRjbGVhclRleHQ6ICdFZmZhY2VyJywgY2xlYXJTdGF0dXM6ICdFZmZhY2VyIGxhIGRhdGUgc8OpbGVjdGlvbm7DqWUnLFxyXG5cdFx0Y2xvc2VUZXh0OiAnRmVybWVyJywgY2xvc2VTdGF0dXM6ICdGZXJtZXIgc2FucyBtb2RpZmllcicsXHJcblx0XHR5ZWFyU3RhdHVzOiAnVm9pciB1bmUgYXV0cmUgYW5uw6llJywgbW9udGhTdGF0dXM6ICdWb2lyIHVuIGF1dHJlIG1vaXMnLFxyXG5cdFx0d2Vla1RleHQ6ICdTbScsIHdlZWtTdGF0dXM6ICdTZW1haW5lIGRlIGxcXCdhbm7DqWUnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnXFwnQ2hvaXNpclxcJyBsZSBERCBkIE1NJywgZGVmYXVsdFN0YXR1czogJ0Nob2lzaXIgbGEgZGF0ZScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZnItQ0gnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fr.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fr.js index 0f0351747c6..c55d8f2a634 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fr.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fr.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['fr']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRnJlbmNoIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFN0w6lwaGFuZSBOYWhtYW5pIChzaG9sYnlAc2hvbGJ5Lm5ldCkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ZyJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyYjeDNjO1Byw6ljJywgcHJldlN0YXR1czogJ1ZvaXIgbGUgbW9pcyBwcsOpY8OpZGVudCcsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICdWb2lyIGxcXCdhbm7DqWUgcHLDqWPDqWRlbnQnLFxuXHRcdG5leHRUZXh0OiAnU3VpdiYjeDNlOycsIG5leHRTdGF0dXM6ICdWb2lyIGxlIG1vaXMgc3VpdmFudCcsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICdWb2lyIGxcXCdhbm7DqWUgc3VpdmFudCcsXG5cdFx0Y3VycmVudFRleHQ6ICdDb3VyYW50JywgY3VycmVudFN0YXR1czogJ1ZvaXIgbGUgbW9pcyBjb3VyYW50Jyxcblx0XHR0b2RheVRleHQ6ICdBdWpvdXJkXFwnaHVpJywgdG9kYXlTdGF0dXM6ICdWb2lyIGF1am91cmRcXCdodWknLFxuXHRcdGNsZWFyVGV4dDogJ0VmZmFjZXInLCBjbGVhclN0YXR1czogJ0VmZmFjZXIgbGEgZGF0ZSBzw6lsZWN0aW9ubsOpZScsXG5cdFx0Y2xvc2VUZXh0OiAnRmVybWVyJywgY2xvc2VTdGF0dXM6ICdGZXJtZXIgc2FucyBtb2RpZmllcicsXG5cdFx0eWVhclN0YXR1czogJ1ZvaXIgdW5lIGF1dHJlIGFubsOpZScsIG1vbnRoU3RhdHVzOiAnVm9pciB1biBhdXRyZSBtb2lzJyxcblx0XHR3ZWVrVGV4dDogJ1NtJywgd2Vla1N0YXR1czogJ1NlbWFpbmUgZGUgbFxcJ2FubsOpZScsXG5cdFx0ZGF5U3RhdHVzOiAnXFwnQ2hvaXNpclxcJyBsZSBERCBkIE1NJywgZGVmYXVsdFN0YXR1czogJ0Nob2lzaXIgbGEgZGF0ZScsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZnInXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWZyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBGcmVuY2ggbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBTdMOpcGhhbmUgTmFobWFuaSAoc2hvbGJ5QHNob2xieS5uZXQpLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZnInXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO1Byw6ljJywgcHJldlN0YXR1czogJ1ZvaXIgbGUgbW9pcyBwcsOpY8OpZGVudCcsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ1ZvaXIgbFxcJ2FubsOpZSBwcsOpY8OpZGVudCcsXHJcblx0XHRuZXh0VGV4dDogJ1N1aXYmI3gzZTsnLCBuZXh0U3RhdHVzOiAnVm9pciBsZSBtb2lzIHN1aXZhbnQnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICdWb2lyIGxcXCdhbm7DqWUgc3VpdmFudCcsXHJcblx0XHRjdXJyZW50VGV4dDogJ0NvdXJhbnQnLCBjdXJyZW50U3RhdHVzOiAnVm9pciBsZSBtb2lzIGNvdXJhbnQnLFxyXG5cdFx0dG9kYXlUZXh0OiAnQXVqb3VyZFxcJ2h1aScsIHRvZGF5U3RhdHVzOiAnVm9pciBhdWpvdXJkXFwnaHVpJyxcclxuXHRcdGNsZWFyVGV4dDogJ0VmZmFjZXInLCBjbGVhclN0YXR1czogJ0VmZmFjZXIgbGEgZGF0ZSBzw6lsZWN0aW9ubsOpZScsXHJcblx0XHRjbG9zZVRleHQ6ICdGZXJtZXInLCBjbG9zZVN0YXR1czogJ0Zlcm1lciBzYW5zIG1vZGlmaWVyJyxcclxuXHRcdHllYXJTdGF0dXM6ICdWb2lyIHVuZSBhdXRyZSBhbm7DqWUnLCBtb250aFN0YXR1czogJ1ZvaXIgdW4gYXV0cmUgbW9pcycsXHJcblx0XHR3ZWVrVGV4dDogJ1NtJywgd2Vla1N0YXR1czogJ1NlbWFpbmUgZGUgbFxcJ2FubsOpZScsXHJcblx0XHRkYXlTdGF0dXM6ICdcXCdDaG9pc2lyXFwnIGxlIEREIGQgTU0nLCBkZWZhdWx0U3RhdHVzOiAnQ2hvaXNpciBsYSBkYXRlJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydmciddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-gl.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-gl.js index b3e6e18eaa0..b5ad56fa1ce 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-gl.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-gl.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['gl']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWdsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWdsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgSW5pY2lhY2lvbiBlbiBnYWxlZ28gcGFyYSBhIGV4dGVuc2nDs24gJ1VJIGRhdGUgcGlja2VyJyBwYXJhIGpRdWVyeS5cbiAgIFRyYWR1Y2lkbyBwb3IgTWFudWVsIChNY051ZWxAZ214Lm5ldCkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2dsJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyYjeDNjO0FudCcsIHByZXZTdGF0dXM6ICdBbW9zYXIgbWVzIGFudGVyaW9yJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ0Ftb3NhciBhbm8gYW50ZXJpb3InLFxuXHRcdG5leHRUZXh0OiAnU2VnJiN4M2U7JywgbmV4dFN0YXR1czogJ0Ftb3NhciBtZXMgc2VndWludGUnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnQW1vc2FyIGFubyBzZWd1aW50ZScsXG5cdFx0Y3VycmVudFRleHQ6ICdIb3hlJywgY3VycmVudFN0YXR1czogJ0Ftb3NhciBtZXMgYWN0dWFsJyxcblx0XHR0b2RheVRleHQ6ICdIb3hlJywgdG9kYXlTdGF0dXM6ICdBbW9zYXIgbWVzIGFjdHVhbCcsXG5cdFx0Y2xlYXJUZXh0OiAnTGltcGFyJywgY2xlYXJTdGF0dXM6ICdCb3JyYXIgZGF0YSBhY3R1YWwnLFxuXHRcdGNsb3NlVGV4dDogJ1BlY2hhcicsIGNsb3NlU3RhdHVzOiAnUGVjaGFyIHNlbiBnYXJkYXInLFxuXHRcdHllYXJTdGF0dXM6ICdBbW9zYXIgb3V0cm8gYW5vJywgbW9udGhTdGF0dXM6ICdBbW9zYXIgb3V0cm8gbWVzJyxcblx0XHR3ZWVrVGV4dDogJ1NtJywgd2Vla1N0YXR1czogJ1NlbWFuYSBkbyBhbm8nLFxuXHRcdGRheVN0YXR1czogJ0QsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdTZWxlY2Npb25hIERhdGEnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2dsJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWdsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWdsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBJbmljaWFjaW9uIGVuIGdhbGVnbyBwYXJhIGEgZXh0ZW5zacOzbiAnVUkgZGF0ZSBwaWNrZXInIHBhcmEgalF1ZXJ5LlxyXG4gICBUcmFkdWNpZG8gcG9yIE1hbnVlbCAoTWNOdWVsQGdteC5uZXQpLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZ2wnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO0FudCcsIHByZXZTdGF0dXM6ICdBbW9zYXIgbWVzIGFudGVyaW9yJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnQW1vc2FyIGFubyBhbnRlcmlvcicsXHJcblx0XHRuZXh0VGV4dDogJ1NlZyYjeDNlOycsIG5leHRTdGF0dXM6ICdBbW9zYXIgbWVzIHNlZ3VpbnRlJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnQW1vc2FyIGFubyBzZWd1aW50ZScsXHJcblx0XHRjdXJyZW50VGV4dDogJ0hveGUnLCBjdXJyZW50U3RhdHVzOiAnQW1vc2FyIG1lcyBhY3R1YWwnLFxyXG5cdFx0dG9kYXlUZXh0OiAnSG94ZScsIHRvZGF5U3RhdHVzOiAnQW1vc2FyIG1lcyBhY3R1YWwnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnTGltcGFyJywgY2xlYXJTdGF0dXM6ICdCb3JyYXIgZGF0YSBhY3R1YWwnLFxyXG5cdFx0Y2xvc2VUZXh0OiAnUGVjaGFyJywgY2xvc2VTdGF0dXM6ICdQZWNoYXIgc2VuIGdhcmRhcicsXHJcblx0XHR5ZWFyU3RhdHVzOiAnQW1vc2FyIG91dHJvIGFubycsIG1vbnRoU3RhdHVzOiAnQW1vc2FyIG91dHJvIG1lcycsXHJcblx0XHR3ZWVrVGV4dDogJ1NtJywgd2Vla1N0YXR1czogJ1NlbWFuYSBkbyBhbm8nLFxyXG5cdFx0ZGF5U3RhdHVzOiAnRCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ1NlbGVjY2lvbmEgRGF0YScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZ2wnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-gu.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-gu.js index deddbe676ab..6f6bc90645c 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-gu.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-gu.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['gu']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWd1LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWd1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgR3VqYXJhdGkgKOCql+CrgeCqnOCqsOCqvuCqpOCrgCkgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgTmF5bWVzaCBNaXN0cnkgKG5heW1lc2hAeWFob28uY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZ3UnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M74Kqq4Kq+4Kqb4KqzJywgcHJldlN0YXR1czogJ+CqquCqvuCqm+CqsuCriyDgqq7gqrngqr/gqqjgq4sg4Kqs4Kqk4Kq+4Kq14KuLJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+CqquCqvuCqm+CqsycsXG5cdFx0bmV4dFRleHQ6ICfgqobgqpfgqrMmI3gzZTsnLCBuZXh0U3RhdHVzOiAn4KqG4KqX4Kqy4KuLIOCqruCqueCqv+CqqOCriyDgqqzgqqTgqr7gqrXgq4snLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn4KqG4KqX4KqzJyxcblx0XHRjdXJyZW50VGV4dDogJ+CqhuCqnOCrhycsIGN1cnJlbnRTdGF0dXM6ICfgqobgqpzgqqjgq4sg4Kqm4Kq/4Kq14Kq4IOCqrOCqpOCqvuCqteCriycsXG5cdFx0dG9kYXlUZXh0OiAn4KqG4Kqc4KuHJywgdG9kYXlTdGF0dXM6ICfgqobgqpzgqqjgq4sg4Kqm4Kq/4Kq14Kq4Jyxcblx0XHRjbGVhclRleHQ6ICfgqq3gq4LgqoLgqrjgq4snLCBjbGVhclN0YXR1czogJ+CqueCqvuCqsiDgqqrgqrjgqoLgqqYg4KqV4Kqw4KuH4Kqy4KuAIOCqpOCqvuCqsOCrgOCqliDgqq3gq4LgqoLgqrjgq4snLFxuXHRcdGNsb3NlVGV4dDogJ+CqrOCqguCqpyDgqpXgqrDgq4snLCBjbG9zZVN0YXR1czogJ+CqpOCqvuCqsOCrgOCqliDgqqrgqrjgqoLgqqYg4KqV4Kqw4KuN4Kqv4Kq+IOCqteCql+CqsCDgqqzgqoLgqqcg4KqV4Kqw4KuLJyxcblx0XHR5ZWFyU3RhdHVzOiAn4Kqc4KuB4Kqm4KuBIOCqteCqsOCrjeCqtyDgqqzgqqTgqr7gqrXgq4snLCBtb250aFN0YXR1czogJ+CqnOCrgeCqpuCriyDgqq7gqrngqr/gqqjgq4sg4Kqs4Kqk4Kq+4Kq14KuLJyxcblx0XHR3ZWVrVGV4dDogJ+CqheCqoOCqteCqvuCqoeCqv+Cqr+CrgeCqgicsIHdlZWtTdGF0dXM6ICfgqoXgqqDgqrXgqr7gqqHgqr/gqq/gq4HgqoInLFxuXHRcdGRheVN0YXR1czogJ+CqheCqoOCqteCqvuCqoeCqv+Cqr+CqvuCqqOCriyDgqqrgqrngq4fgqrLgq4sg4Kqm4Kq/4Kq14Kq4IOCqquCquOCqguCqpiDgqpXgqrDgq4snLCBkZWZhdWx0U3RhdHVzOiAn4Kqk4Kq+4Kqw4KuA4KqWIOCqquCquOCqguCqpiDgqpXgqrDgq4snLFx0XHRcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydndSddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWd1LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWd1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBHdWphcmF0aSAo4KqX4KuB4Kqc4Kqw4Kq+4Kqk4KuAKSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIE5heW1lc2ggTWlzdHJ5IChuYXltZXNoQHlhaG9vLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydndSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M74Kqq4Kq+4Kqb4KqzJywgcHJldlN0YXR1czogJ+CqquCqvuCqm+CqsuCriyDgqq7gqrngqr/gqqjgq4sg4Kqs4Kqk4Kq+4Kq14KuLJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAn4Kqq4Kq+4Kqb4KqzJyxcclxuXHRcdG5leHRUZXh0OiAn4KqG4KqX4KqzJiN4M2U7JywgbmV4dFN0YXR1czogJ+CqhuCql+CqsuCriyDgqq7gqrngqr/gqqjgq4sg4Kqs4Kqk4Kq+4Kq14KuLJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn4KqG4KqX4KqzJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn4KqG4Kqc4KuHJywgY3VycmVudFN0YXR1czogJ+CqhuCqnOCqqOCriyDgqqbgqr/gqrXgqrgg4Kqs4Kqk4Kq+4Kq14KuLJyxcclxuXHRcdHRvZGF5VGV4dDogJ+CqhuCqnOCrhycsIHRvZGF5U3RhdHVzOiAn4KqG4Kqc4Kqo4KuLIOCqpuCqv+CqteCquCcsXHJcblx0XHRjbGVhclRleHQ6ICfgqq3gq4LgqoLgqrjgq4snLCBjbGVhclN0YXR1czogJ+CqueCqvuCqsiDgqqrgqrjgqoLgqqYg4KqV4Kqw4KuH4Kqy4KuAIOCqpOCqvuCqsOCrgOCqliDgqq3gq4LgqoLgqrjgq4snLFxyXG5cdFx0Y2xvc2VUZXh0OiAn4Kqs4KqC4KqnIOCqleCqsOCriycsIGNsb3NlU3RhdHVzOiAn4Kqk4Kq+4Kqw4KuA4KqWIOCqquCquOCqguCqpiDgqpXgqrDgq43gqq/gqr4g4Kq14KqX4KqwIOCqrOCqguCqpyDgqpXgqrDgq4snLFxyXG5cdFx0eWVhclN0YXR1czogJ+CqnOCrgeCqpuCrgSDgqrXgqrDgq43gqrcg4Kqs4Kqk4Kq+4Kq14KuLJywgbW9udGhTdGF0dXM6ICfgqpzgq4Hgqqbgq4sg4Kqu4Kq54Kq/4Kqo4KuLIOCqrOCqpOCqvuCqteCriycsXHJcblx0XHR3ZWVrVGV4dDogJ+CqheCqoOCqteCqvuCqoeCqv+Cqr+CrgeCqgicsIHdlZWtTdGF0dXM6ICfgqoXgqqDgqrXgqr7gqqHgqr/gqq/gq4HgqoInLFxyXG5cdFx0ZGF5U3RhdHVzOiAn4KqF4Kqg4Kq14Kq+4Kqh4Kq/4Kqv4Kq+4Kqo4KuLIOCqquCqueCrh+CqsuCriyDgqqbgqr/gqrXgqrgg4Kqq4Kq44KqC4KqmIOCqleCqsOCriycsIGRlZmF1bHRTdGF0dXM6ICfgqqTgqr7gqrDgq4DgqpYg4Kqq4Kq44KqC4KqmIOCqleCqsOCriycsXHRcdFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2d1J10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-he.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-he.js index fe2f13d5902..a6a37548cef 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-he.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-he.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['he']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWhlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWhlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgSGVicmV3IGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgQW1pciBIYXJkb24gKGFoYXJkb24gYXQgZ21haWwgZG90IGNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2hlJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyYjeDNjO9eU16fXldeT150nLCBwcmV2U3RhdHVzOiAnJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICfXlNeR15AmI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICfXlNeZ15XXnScsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ9eU15nXldedJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ9eg16fXlCcsIGNsZWFyU3RhdHVzOiAnJyxcblx0XHRjbG9zZVRleHQ6ICfXodeS15XXqCcsIGNsb3NlU3RhdHVzOiAnJyxcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IHRydWVcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydoZSddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWhlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWhlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBIZWJyZXcgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEFtaXIgSGFyZG9uIChhaGFyZG9uIGF0IGdtYWlsIGRvdCBjb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaGUnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO9eU16fXldeT150nLCBwcmV2U3RhdHVzOiAnJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAn15TXkdeQJiN4M2U7JywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ9eU15nXldedJywgY3VycmVudFN0YXR1czogJycsXHJcblx0XHR0b2RheVRleHQ6ICfXlNeZ15XXnScsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ9eg16fXlCcsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ9eh15LXldeoJywgY2xvc2VTdGF0dXM6ICcnLFxyXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcclxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnJyxcclxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcclxuXHRcdGlzUlRMOiB0cnVlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2hlJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hi-IN.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hi-IN.js index d65bb2e3fbf..6fec794f99b 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hi-IN.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hi-IN.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['hi-IN']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWhpLUlOLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWhpLUlOLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgSGluZGkgSU5ESUEgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBQYXdhbiBLdW1hciBTaW5naC4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaGktSU4nXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAn4KSq4KS/4KSb4KSy4KS+JywgcHJldlN0YXR1czogJ+CkquCkv+Ckm+CksuCkviDgpK7gpLngpYDgpKjgpL4g4KSm4KWH4KSW4KWH4KSCJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+CkquCkv+Ckm+CksuCkviDgpLXgpLDgpY3gpLcg4KSm4KWH4KSW4KWH4KSCJyxcblx0XHRuZXh0VGV4dDogJ+CkheCkl+CksuCkvicsIG5leHRTdGF0dXM6ICfgpIXgpJfgpLLgpL4g4KSu4KS54KWA4KSo4KS+IOCkpuClh+CkluClh+CkgicsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICfgpIXgpJfgpLLgpL4g4KS14KSw4KWN4KS3IOCkpuClh+CkluClh+CkgicsXG5cdFx0Y3VycmVudFRleHQ6ICfgpLXgpLDgpY3gpKTgpK7gpL7gpKgnLCBjdXJyZW50U3RhdHVzOiAn4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkruCkueClgOCkqOCkviDgpKbgpYfgpJbgpYfgpIInLFxuXHRcdHRvZGF5VGV4dDogJ+CkhuCknCcsIHRvZGF5U3RhdHVzOiAn4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkpuCkv+CkqCDgpKbgpYfgpJbgpYfgpIInLFxuXHRcdGNsZWFyVGV4dDogJ+CkuOCkvuCkqycsIGNsZWFyU3RhdHVzOiAn4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkpuCkv+CkqOCkvuCkguCklSDgpK7gpL/gpJ/gpL7gpI8nLFxuXHRcdGNsb3NlVGV4dDogJ+CkuOCkruCkvuCkquCljeCkpCcsIGNsb3NlU3RhdHVzOiAn4KSs4KSm4KSy4KS+4KS1IOCkleClhyDgpKzgpL/gpKjgpL4g4KSs4KSC4KSmJyxcblx0XHR5ZWFyU3RhdHVzOiAn4KSP4KSVIOCkheCksuCklyDgpLXgpLDgpY3gpLcg4KSV4KS+IOCkmuCkr+CkqCDgpJXgpLDgpYfgpIInLCBtb250aFN0YXR1czogJ+Ckj+CklSDgpIXgpLLgpJcg4KSu4KS54KWA4KSo4KWHIOCkleCkviDgpJrgpK/gpKgg4KSV4KSw4KWH4KSCJyxcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJ+CkteCksOCljeCktyDgpJXgpL4g4KS44KSq4KWN4KSk4KS+4KS5Jyxcblx0XHRkYXlTdGF0dXM6ICfgpJrgpYHgpKjgpYcgREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICfgpI/gpJUg4KSk4KS/4KSl4KS/IOCkleCkviDgpJrgpK/gpKgg4KSV4KSw4KWH4KSCJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydoaS1JTiddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWhpLUlOLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWhpLUlOLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBIaW5kaSBJTkRJQSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgUGF3YW4gS3VtYXIgU2luZ2guICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydoaS1JTiddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAn4KSq4KS/4KSb4KSy4KS+JywgcHJldlN0YXR1czogJ+CkquCkv+Ckm+CksuCkviDgpK7gpLngpYDgpKjgpL4g4KSm4KWH4KSW4KWH4KSCJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAn4KSq4KS/4KSb4KSy4KS+IOCkteCksOCljeCktyDgpKbgpYfgpJbgpYfgpIInLFxyXG5cdFx0bmV4dFRleHQ6ICfgpIXgpJfgpLLgpL4nLCBuZXh0U3RhdHVzOiAn4KSF4KSX4KSy4KS+IOCkruCkueClgOCkqOCkviDgpKbgpYfgpJbgpYfgpIInLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICfgpIXgpJfgpLLgpL4g4KS14KSw4KWN4KS3IOCkpuClh+CkluClh+CkgicsXHJcblx0XHRjdXJyZW50VGV4dDogJ+CkteCksOCljeCkpOCkruCkvuCkqCcsIGN1cnJlbnRTdGF0dXM6ICfgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KSu4KS54KWA4KSo4KS+IOCkpuClh+CkluClh+CkgicsXHJcblx0XHR0b2RheVRleHQ6ICfgpIbgpJwnLCB0b2RheVN0YXR1czogJ+CkteCksOCljeCkpOCkruCkvuCkqCDgpKbgpL/gpKgg4KSm4KWH4KSW4KWH4KSCJyxcclxuXHRcdGNsZWFyVGV4dDogJ+CkuOCkvuCkqycsIGNsZWFyU3RhdHVzOiAn4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkpuCkv+CkqOCkvuCkguCklSDgpK7gpL/gpJ/gpL7gpI8nLFxyXG5cdFx0Y2xvc2VUZXh0OiAn4KS44KSu4KS+4KSq4KWN4KSkJywgY2xvc2VTdGF0dXM6ICfgpKzgpKbgpLLgpL7gpLUg4KSV4KWHIOCkrOCkv+CkqOCkviDgpKzgpILgpKYnLFxyXG5cdFx0eWVhclN0YXR1czogJ+Ckj+CklSDgpIXgpLLgpJcg4KS14KSw4KWN4KS3IOCkleCkviDgpJrgpK/gpKgg4KSV4KSw4KWH4KSCJywgbW9udGhTdGF0dXM6ICfgpI/gpJUg4KSF4KSy4KSXIOCkruCkueClgOCkqOClhyDgpJXgpL4g4KSa4KSv4KSoIOCkleCksOClh+CkgicsXHJcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJ+CkteCksOCljeCktyDgpJXgpL4g4KS44KSq4KWN4KSk4KS+4KS5JyxcclxuXHRcdGRheVN0YXR1czogJ+CkmuClgeCkqOClhyBERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ+Ckj+CklSDgpKTgpL/gpKXgpL8g4KSV4KS+IOCkmuCkr+CkqCDgpJXgpLDgpYfgpIInLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2hpLUlOJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hr.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hr.js index 48e5a3cb136..1c16be3bbad 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hr.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hr.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['hr']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWhyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWhyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQ3JvYXRpYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBWamVrb3NsYXYgTmVzZWsuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2hyJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyYjeDNjOycsIHByZXZTdGF0dXM6ICdQcmlrYcW+aSBwcmV0aG9kbmkgbWplc2VjJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICcmI3gzZTsnLCBuZXh0U3RhdHVzOiAnUHJpa2HFvmkgc2xpamVkZcSHaSBtamVzZWMnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ0RhbmFzJywgY3VycmVudFN0YXR1czogJ0RhbmHFoW5qaSBkYXR1bScsXG5cdFx0dG9kYXlUZXh0OiAnRGFuYXMnLCB0b2RheVN0YXR1czogJ0RhbmHFoW5qaSBkYXR1bScsXG5cdFx0Y2xlYXJUZXh0OiAnaXpicmnFoWknLCBjbGVhclN0YXR1czogJ0l6YnJpxaFpIHRyZW51dG5pIGRhdHVtJyxcblx0XHRjbG9zZVRleHQ6ICdaYXR2b3JpJywgY2xvc2VTdGF0dXM6ICdaYXR2b3JpIGthbGVuZGFyJyxcblx0XHR5ZWFyU3RhdHVzOiAnUHJpa2HFvmkgZ29kaW5lJywgbW9udGhTdGF0dXM6ICdQcmlrYcW+aSBtamVzZWNlJyxcblx0XHR3ZWVrVGV4dDogJ1RqZScsIHdlZWtTdGF0dXM6ICdUamVkYW5yJyxcblx0XHRkYXlTdGF0dXM6ICdcXCdEYXR1bVxcJyBERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ09kYWJlcmkgZGF0dW0nLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2hyJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWhyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWhyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBDcm9hdGlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgVmpla29zbGF2IE5lc2VrLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaHInXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjOycsIHByZXZTdGF0dXM6ICdQcmlrYcW+aSBwcmV0aG9kbmkgbWplc2VjJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnJiN4M2U7JywgbmV4dFN0YXR1czogJ1ByaWthxb5pIHNsaWplZGXEh2kgbWplc2VjJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnRGFuYXMnLCBjdXJyZW50U3RhdHVzOiAnRGFuYcWhbmppIGRhdHVtJyxcclxuXHRcdHRvZGF5VGV4dDogJ0RhbmFzJywgdG9kYXlTdGF0dXM6ICdEYW5hxaFuamkgZGF0dW0nLFxyXG5cdFx0Y2xlYXJUZXh0OiAnaXpicmnFoWknLCBjbGVhclN0YXR1czogJ0l6YnJpxaFpIHRyZW51dG5pIGRhdHVtJyxcclxuXHRcdGNsb3NlVGV4dDogJ1phdHZvcmknLCBjbG9zZVN0YXR1czogJ1phdHZvcmkga2FsZW5kYXInLFxyXG5cdFx0eWVhclN0YXR1czogJ1ByaWthxb5pIGdvZGluZScsIG1vbnRoU3RhdHVzOiAnUHJpa2HFvmkgbWplc2VjZScsXHJcblx0XHR3ZWVrVGV4dDogJ1RqZScsIHdlZWtTdGF0dXM6ICdUamVkYW5yJyxcclxuXHRcdGRheVN0YXR1czogJ1xcJ0RhdHVtXFwnIERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnT2RhYmVyaSBkYXR1bScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaHInXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hu.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hu.js index 33f0e30993e..16fd45948c0 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hu.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hu.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['hu']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWh1LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWh1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgSHVuZ2FyaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgSXN0dmFuIEthcmFzemkgKGpxdWVyeWNhbGVuZGFyQHNwYW0ucmFzemkuaHUpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydodSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmbGFxdW87Jm5ic3A7dmlzc3phJywgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnZWzFkXJlJm5ic3A7JnJhcXVvOycsIG5leHRTdGF0dXM6ICcnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ21hJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnbWEnLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAndMO2cmzDqXMnLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAnYmV6w6Fyw6FzJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdIw6knLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaHUnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWh1LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWh1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBIdW5nYXJpYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IElzdHZhbiBLYXJhc3ppIChqcXVlcnljYWxlbmRhckBzcGFtLnJhc3ppLmh1KS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2h1J10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmbGFxdW87Jm5ic3A7dmlzc3phJywgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ2VsxZFyZSZuYnNwOyZyYXF1bzsnLCBuZXh0U3RhdHVzOiAnJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnbWEnLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ21hJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAndMO2cmzDqXMnLCBjbGVhclN0YXR1czogJycsXHJcblx0XHRjbG9zZVRleHQ6ICdiZXrDoXLDoXMnLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxyXG5cdFx0d2Vla1RleHQ6ICdIw6knLCB3ZWVrU3RhdHVzOiAnJyxcclxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydodSddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hy.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hy.js index 17dd3fb344a..e57d1ff7b20 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hy.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hy.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['hy']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWh5LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWh5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQXJtZW5pYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBMZXZvbiBaYWthcnlhbiAobGV2b24uemFrYXJ5YW5AZ21haWwuY29tKSAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydoeSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYzvVhtWh1a0uJywgIHByZXZTdGF0dXM6ICcnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ9WA1aHVuy4mI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICfUsdW11b3WhdaAJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAn1LHVtdW91oXWgCcsIHRvZGF5U3RhdHVzOiAnJyxcblx0XHRjbGVhclRleHQ6ICfVhNWh1oTWgNWl1awnLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAn1ZPVodWv1aXVrCcsIGNsb3NlU3RhdHVzOiAnJyxcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxuXHRcdHdlZWtUZXh0OiAn1YfUstWPJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2h5J10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWh5LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWh5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBBcm1lbmlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTGV2b24gWmFrYXJ5YW4gKGxldm9uLnpha2FyeWFuQGdtYWlsLmNvbSkgKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2h5J10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYzvVhtWh1a0uJywgIHByZXZTdGF0dXM6ICcnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICfVgNWh1bsuJiN4M2U7JywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ9Sx1bXVvdaF1oAnLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ9Sx1bXVvdaF1oAnLCB0b2RheVN0YXR1czogJycsXHJcblx0XHRjbGVhclRleHQ6ICfVhNWh1oTWgNWl1awnLCBjbGVhclN0YXR1czogJycsXHJcblx0XHRjbG9zZVRleHQ6ICfVk9Wh1a/VpdWsJywgY2xvc2VTdGF0dXM6ICcnLFxyXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcclxuXHRcdHdlZWtUZXh0OiAn1YfUstWPJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaHknXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-id.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-id.js index ff44a82e642..f948e0c50f2 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-id.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-id.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['id']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWlkLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWlkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgSW5kb25lc2lhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IERlZGVuIEZhdGh1cmFobWFuIChkZWRlbmZAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaWQnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7bXVuZHVyJywgcHJldlN0YXR1czogJ1RhbXBpbGthbiBidWxhbiBzZWJlbHVtbnlhJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICdtYWp1JiN4M2U7JywgbmV4dFN0YXR1czogJ1RhbXBpbGthbiBidWxhbiBiZXJpa3V0bnlhJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICdoYXJpIGluaScsIGN1cnJlbnRTdGF0dXM6ICdUYW1waWxrYW4gYnVsYW4gc2VrYXJhbmcnLFxuXHRcdHRvZGF5VGV4dDogJ2hhcmkgaW5pJywgdG9kYXlTdGF0dXM6ICdUYW1waWxrYW4gYnVsYW4gc2VrYXJhbmcnLFxuXHRcdGNsZWFyVGV4dDogJ2tvc29uZ2thbicsIGNsZWFyU3RhdHVzOiAnYmVyc2loa2FuIHRhbmdnYWwgeWFuZyBzZWthcmFuZycsXG5cdFx0Y2xvc2VUZXh0OiAnVHV0dXAnLCBjbG9zZVN0YXR1czogJ1R1dHVwIHRhbnBhIG1lbmd1YmFoJyxcblx0XHR5ZWFyU3RhdHVzOiAnVGFtcGlsa2FuIHRhaHVuIHlhbmcgYmVyYmVkYScsIG1vbnRoU3RhdHVzOiAnVGFtcGlsa2FuIGJ1bGFuIHlhbmcgYmVyYmVkYScsXG5cdFx0d2Vla1RleHQ6ICdNZycsIHdlZWtTdGF0dXM6ICdNaW5nZ3UgZGFsYW0gdGFodScsXG5cdFx0ZGF5U3RhdHVzOiAncGlsaWggbGUgREQsIE1NIGQnLCBkZWZhdWx0U3RhdHVzOiAnUGlsaWggVGFuZ2dhbCcsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaWQnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWlkLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWlkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBJbmRvbmVzaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBEZWRlbiBGYXRodXJhaG1hbiAoZGVkZW5mQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydpZCddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7bXVuZHVyJywgcHJldlN0YXR1czogJ1RhbXBpbGthbiBidWxhbiBzZWJlbHVtbnlhJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnbWFqdSYjeDNlOycsIG5leHRTdGF0dXM6ICdUYW1waWxrYW4gYnVsYW4gYmVyaWt1dG55YScsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ2hhcmkgaW5pJywgY3VycmVudFN0YXR1czogJ1RhbXBpbGthbiBidWxhbiBzZWthcmFuZycsXHJcblx0XHR0b2RheVRleHQ6ICdoYXJpIGluaScsIHRvZGF5U3RhdHVzOiAnVGFtcGlsa2FuIGJ1bGFuIHNla2FyYW5nJyxcclxuXHRcdGNsZWFyVGV4dDogJ2tvc29uZ2thbicsIGNsZWFyU3RhdHVzOiAnYmVyc2loa2FuIHRhbmdnYWwgeWFuZyBzZWthcmFuZycsXHJcblx0XHRjbG9zZVRleHQ6ICdUdXR1cCcsIGNsb3NlU3RhdHVzOiAnVHV0dXAgdGFucGEgbWVuZ3ViYWgnLFxyXG5cdFx0eWVhclN0YXR1czogJ1RhbXBpbGthbiB0YWh1biB5YW5nIGJlcmJlZGEnLCBtb250aFN0YXR1czogJ1RhbXBpbGthbiBidWxhbiB5YW5nIGJlcmJlZGEnLFxyXG5cdFx0d2Vla1RleHQ6ICdNZycsIHdlZWtTdGF0dXM6ICdNaW5nZ3UgZGFsYW0gdGFodScsXHJcblx0XHRkYXlTdGF0dXM6ICdwaWxpaCBsZSBERCwgTU0gZCcsIGRlZmF1bHRTdGF0dXM6ICdQaWxpaCBUYW5nZ2FsJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydpZCddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-is.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-is.js index 1e203cc1054..8e13ddb2b0a 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-is.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-is.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['is']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWlzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWlzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgSWNlbGFuZGljIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgSGF1a3VyIEguIFRob3Jzc29uIChoYXVrdXJAZXNraWxsLmlzKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaXMnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7IEZ5cnJpJywgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnTiZhZWxpZztzdGkgJiN4M2U7JywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnJklhY3V0ZTsgZGFnJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnJklhY3V0ZTsgZGFnJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ0hyZWluc2EnLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAnTG9rYScsIGNsb3NlU3RhdHVzOiAnJyxcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxuXHRcdHdlZWtUZXh0OiAnVmlrYScsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydpcyddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWlzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWlzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBJY2VsYW5kaWMgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEhhdWt1ciBILiBUaG9yc3NvbiAoaGF1a3VyQGVza2lsbC5pcykuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydpcyddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7IEZ5cnJpJywgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ04mYWVsaWc7c3RpICYjeDNlOycsIG5leHRTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICcmSWFjdXRlOyBkYWcnLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJyZJYWN1dGU7IGRhZycsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ0hyZWluc2EnLCBjbGVhclN0YXR1czogJycsXHJcblx0XHRjbG9zZVRleHQ6ICdMb2thJywgY2xvc2VTdGF0dXM6ICcnLFxyXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcclxuXHRcdHdlZWtUZXh0OiAnVmlrYScsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2lzJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-it.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-it.js index c866b79b7a9..d99bcd04dad 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-it.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-it.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['it']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWl0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWl0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgSXRhbGlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEFwYWVsbGEgKGFwYWVsbGFAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaXQnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7UHJlYycsIHByZXZTdGF0dXM6ICdNZXNlIHByZWNlZGVudGUnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnTW9zdHJhIGxcXCdhbm5vIHByZWNlZGVudGUnLFxuXHRcdG5leHRUZXh0OiAnU3VjYyYjeDNlOycsIG5leHRTdGF0dXM6ICdNZXNlIHN1Y2Nlc3Npdm8nLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnTW9zdHJhIGxcXCdhbm5vIHN1Y2Nlc3Npdm8nLFxuXHRcdGN1cnJlbnRUZXh0OiAnT2dnaScsIGN1cnJlbnRTdGF0dXM6ICdNZXNlIGNvcnJlbnRlJyxcblx0XHR0b2RheVRleHQ6ICdPZ2dpJywgdG9kYXlTdGF0dXM6ICdNZXNlIGNvcnJlbnRlJyxcblx0XHRjbGVhclRleHQ6ICdTdnVvdGEnLCBjbGVhclN0YXR1czogJ0FubnVsbGEnLFxuXHRcdGNsb3NlVGV4dDogJ0NoaXVkaScsIGNsb3NlU3RhdHVzOiAnQ2hpdWRlcmUgc2VuemEgbW9kaWZpY2FyZScsXG5cdFx0eWVhclN0YXR1czogJ1NlbGV6aW9uYSB1biBhbHRybyBhbm5vJywgbW9udGhTdGF0dXM6ICdTZWxlemlvbmEgdW4gYWx0cm8gbWVzZScsXG5cdFx0d2Vla1RleHQ6ICdTbScsIHdlZWtTdGF0dXM6ICdTZXR0aW1hbmEgZGVsbFxcJ2Fubm8nLFxuXHRcdGRheVN0YXR1czogJ1xcJ1NlbGV6aW9uYVxcJyBERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ1NjZWdsaWVyZSB1bmEgZGF0YScsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaXQnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWl0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWl0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBJdGFsaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBBcGFlbGxhIChhcGFlbGxhQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydpdCddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7UHJlYycsIHByZXZTdGF0dXM6ICdNZXNlIHByZWNlZGVudGUnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICdNb3N0cmEgbFxcJ2Fubm8gcHJlY2VkZW50ZScsXHJcblx0XHRuZXh0VGV4dDogJ1N1Y2MmI3gzZTsnLCBuZXh0U3RhdHVzOiAnTWVzZSBzdWNjZXNzaXZvJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnTW9zdHJhIGxcXCdhbm5vIHN1Y2Nlc3Npdm8nLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdPZ2dpJywgY3VycmVudFN0YXR1czogJ01lc2UgY29ycmVudGUnLFxyXG5cdFx0dG9kYXlUZXh0OiAnT2dnaScsIHRvZGF5U3RhdHVzOiAnTWVzZSBjb3JyZW50ZScsXHJcblx0XHRjbGVhclRleHQ6ICdTdnVvdGEnLCBjbGVhclN0YXR1czogJ0FubnVsbGEnLFxyXG5cdFx0Y2xvc2VUZXh0OiAnQ2hpdWRpJywgY2xvc2VTdGF0dXM6ICdDaGl1ZGVyZSBzZW56YSBtb2RpZmljYXJlJyxcclxuXHRcdHllYXJTdGF0dXM6ICdTZWxlemlvbmEgdW4gYWx0cm8gYW5ubycsIG1vbnRoU3RhdHVzOiAnU2VsZXppb25hIHVuIGFsdHJvIG1lc2UnLFxyXG5cdFx0d2Vla1RleHQ6ICdTbScsIHdlZWtTdGF0dXM6ICdTZXR0aW1hbmEgZGVsbFxcJ2Fubm8nLFxyXG5cdFx0ZGF5U3RhdHVzOiAnXFwnU2VsZXppb25hXFwnIERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnU2NlZ2xpZXJlIHVuYSBkYXRhJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydpdCddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ja.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ja.js index 1b5b6848eac..b6781ebc041 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ja.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ja.js @@ -27,4 +27,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['ja']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWphLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnBpY2tlci1qYS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEphcGFuZXNlIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgS2VudGFybyBTQVRPIChrZW50YXJvQHJhbnZpcy5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydqYSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmV4dGVuZCh7fSwgJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdFx0e21vbnRoOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIubW9udGguXG5cdFx0XHRcdHJlcGxhY2UoL21vbnRoSGVhZGVyLywgJ21vbnRoSGVhZGVyOnl5eXnlubQgTU0nKX0pLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M75YmNJywgcHJldlN0YXR1czogJ+WJjeaciOOCkuihqOekuuOBl+OBvuOBmScsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICfliY3lubTjgpLooajnpLrjgZfjgb7jgZknLFxuXHRcdG5leHRUZXh0OiAn5qyhJiN4M2U7JywgbmV4dFN0YXR1czogJ+e/jOaciOOCkuihqOekuuOBl+OBvuOBmScsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICfnv4zlubTjgpLooajnpLrjgZfjgb7jgZknLFxuXHRcdGN1cnJlbnRUZXh0OiAn5LuK5pelJywgY3VycmVudFN0YXR1czogJ+S7iuaciOOCkuihqOekuuOBl+OBvuOBmScsXG5cdFx0dG9kYXlUZXh0OiAn5LuK5pelJywgdG9kYXlTdGF0dXM6ICfku4rmnIjjgpLooajnpLrjgZfjgb7jgZknLFxuXHRcdGNsZWFyVGV4dDogJ+OCr+ODquOCoicsIGNsZWFyU3RhdHVzOiAn5pel5LuY44KS44Kv44Oq44Ki44GX44G+44GZJyxcblx0XHRjbG9zZVRleHQ6ICfplonjgZjjgosnLCBjbG9zZVN0YXR1czogJ+WkieabtOOBm+OBmuOBq+mWieOBmOOBvuOBmScsXG5cdFx0eWVhclN0YXR1czogJ+ihqOekuuOBmeOCi+W5tOOCkuWkieabtOOBl+OBvuOBmScsIG1vbnRoU3RhdHVzOiAn6KGo56S644GZ44KL5pyI44KS5aSJ5pu044GX44G+44GZJyxcblx0XHR3ZWVrVGV4dDogJ+mAsScsIHdlZWtTdGF0dXM6ICfmmqbpgLHjgafnrKzkvZXpgLHnm67jgYvjgpLooajjgZfjgb7jgZknLFxuXHRcdGRheVN0YXR1czogJ3l5eXkvbW0vZGQnLCBkZWZhdWx0U3RhdHVzOiAn5pel5LuY44KS6YG45oqe44GX44G+44GZJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydqYSddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWphLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnBpY2tlci1qYS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgSmFwYW5lc2UgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEtlbnRhcm8gU0FUTyAoa2VudGFyb0ByYW52aXMuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2phJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5leHRlbmQoe30sICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdFx0e21vbnRoOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIubW9udGguXHJcblx0XHRcdFx0cmVwbGFjZSgvbW9udGhIZWFkZXIvLCAnbW9udGhIZWFkZXI6eXl5eeW5tCBNTScpfSksXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO+WJjScsIHByZXZTdGF0dXM6ICfliY3mnIjjgpLooajnpLrjgZfjgb7jgZknLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICfliY3lubTjgpLooajnpLrjgZfjgb7jgZknLFxyXG5cdFx0bmV4dFRleHQ6ICfmrKEmI3gzZTsnLCBuZXh0U3RhdHVzOiAn57+M5pyI44KS6KGo56S644GX44G+44GZJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn57+M5bm044KS6KGo56S644GX44G+44GZJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn5LuK5pelJywgY3VycmVudFN0YXR1czogJ+S7iuaciOOCkuihqOekuuOBl+OBvuOBmScsXHJcblx0XHR0b2RheVRleHQ6ICfku4rml6UnLCB0b2RheVN0YXR1czogJ+S7iuaciOOCkuihqOekuuOBl+OBvuOBmScsXHJcblx0XHRjbGVhclRleHQ6ICfjgq/jg6rjgqInLCBjbGVhclN0YXR1czogJ+aXpeS7mOOCkuOCr+ODquOCouOBl+OBvuOBmScsXHJcblx0XHRjbG9zZVRleHQ6ICfplonjgZjjgosnLCBjbG9zZVN0YXR1czogJ+WkieabtOOBm+OBmuOBq+mWieOBmOOBvuOBmScsXHJcblx0XHR5ZWFyU3RhdHVzOiAn6KGo56S644GZ44KL5bm044KS5aSJ5pu044GX44G+44GZJywgbW9udGhTdGF0dXM6ICfooajnpLrjgZnjgovmnIjjgpLlpInmm7TjgZfjgb7jgZknLFxyXG5cdFx0d2Vla1RleHQ6ICfpgLEnLCB3ZWVrU3RhdHVzOiAn5pqm6YCx44Gn56ys5L2V6YCx55uu44GL44KS6KGo44GX44G+44GZJyxcclxuXHRcdGRheVN0YXR1czogJ3l5eXkvbW0vZGQnLCBkZWZhdWx0U3RhdHVzOiAn5pel5LuY44KS6YG45oqe44GX44G+44GZJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydqYSddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ka.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ka.js index 95dd549d3ad..ec6263481ce 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ka.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ka.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['ka']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWthLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWthLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgR2VvcmdpYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgQW5kcmVpIEdvcmJ1c2hraW4uICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2thJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJzzhg6Phg5nhg5Dhg5wnLCBwcmV2U3RhdHVzOiAn4YOs4YOY4YOc4YOQIOGDl+GDleGDlCcsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICfhg6zhg5jhg5zhg5Ag4YOs4YOU4YOa4YOYJyxcblx0XHRuZXh0VGV4dDogJ+GDrOGDmOGDnD4nLCBuZXh0U3RhdHVzOiAn4YOo4YOU4YOb4YOT4YOU4YOS4YOYIOGDl+GDleGDlCcsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICfhg6jhg5Thg5vhg5Phg5Thg5Lhg5gg4YOs4YOU4YOa4YOYJyxcblx0XHRjdXJyZW50VGV4dDogJ+GDm+GDmOGDm+GDk+GDmOGDnOGDkOGDoOGDlCcsIGN1cnJlbnRTdGF0dXM6ICfhg5vhg5jhg5vhg5Phg5jhg5zhg5Dhg6Dhg5Qg4YOX4YOV4YOUJyxcblx0XHR0b2RheVRleHQ6ICfhg5Phg6bhg5Thg6EnLCB0b2RheVN0YXR1czogJ+GDm+GDmOGDm+GDk+GDmOGDnOGDkOGDoOGDlCDhg5Phg6bhg5QnLFxuXHRcdGNsZWFyVGV4dDogJ+GDkuGDkOGDoeGDo+GDpOGDl+GDkOGDleGDlOGDkeGDkCcsIGNsZWFyU3RhdHVzOiAn4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOUIOGDl+GDkOGDoOGDmOGDpuGDmOGDoSDhg6zhg5Dhg6jhg5rhg5AnLFxuXHRcdGNsb3NlVGV4dDogJ+GDkOGDoOGDmOGDoScsIGNsb3NlU3RhdHVzOiAn4YOT4YOQ4YOu4YOj4YOg4YOV4YOQIOGDo+GDquGDleGDmuGDmOGDmuGDlOGDkeGDneGDkycsXG5cdFx0eWVhclN0YXR1czogJ+GDoeGDruGDleGDkCDhg6zhg5Thg5rhg5gnLCBtb250aFN0YXR1czogJ+GDoeGDruGDleGDkCDhg5fhg5Xhg5QnLFxuXHRcdHdlZWtUZXh0OiAn4YOZ4YOVJywgd2Vla1N0YXR1czogJ+GDrOGDmuGDmOGDoSDhg5nhg5Xhg5jhg6Dhg5AnLFxuXHRcdGRheVN0YXR1czogJ+GDkOGDmOGDoOGDqeGDmOGDlOGDlyBERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ+GDkOGDmOGDpuGDqeGDmOGDlOGDlyDhg5fhg5Dhg6Dhg5jhg6bhg5gnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2thJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWthLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWthLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBHZW9yZ2lhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIEFuZHJlaSBHb3JidXNoa2luLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sna2EnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJzzhg6Phg5nhg5Dhg5wnLCBwcmV2U3RhdHVzOiAn4YOs4YOY4YOc4YOQIOGDl+GDleGDlCcsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+GDrOGDmOGDnOGDkCDhg6zhg5Thg5rhg5gnLFxyXG5cdFx0bmV4dFRleHQ6ICfhg6zhg5jhg5w+JywgbmV4dFN0YXR1czogJ+GDqOGDlOGDm+GDk+GDlOGDkuGDmCDhg5fhg5Xhg5QnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICfhg6jhg5Thg5vhg5Phg5Thg5Lhg5gg4YOs4YOU4YOa4YOYJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOUJywgY3VycmVudFN0YXR1czogJ+GDm+GDmOGDm+GDk+GDmOGDnOGDkOGDoOGDlCDhg5fhg5Xhg5QnLFxyXG5cdFx0dG9kYXlUZXh0OiAn4YOT4YOm4YOU4YOhJywgdG9kYXlTdGF0dXM6ICfhg5vhg5jhg5vhg5Phg5jhg5zhg5Dhg6Dhg5Qg4YOT4YOm4YOUJyxcclxuXHRcdGNsZWFyVGV4dDogJ+GDkuGDkOGDoeGDo+GDpOGDl+GDkOGDleGDlOGDkeGDkCcsIGNsZWFyU3RhdHVzOiAn4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOUIOGDl+GDkOGDoOGDmOGDpuGDmOGDoSDhg6zhg5Dhg6jhg5rhg5AnLFxyXG5cdFx0Y2xvc2VUZXh0OiAn4YOQ4YOg4YOY4YOhJywgY2xvc2VTdGF0dXM6ICfhg5Phg5Dhg67hg6Phg6Dhg5Xhg5Ag4YOj4YOq4YOV4YOa4YOY4YOa4YOU4YOR4YOd4YOTJyxcclxuXHRcdHllYXJTdGF0dXM6ICfhg6Hhg67hg5Xhg5Ag4YOs4YOU4YOa4YOYJywgbW9udGhTdGF0dXM6ICfhg6Hhg67hg5Xhg5Ag4YOX4YOV4YOUJyxcclxuXHRcdHdlZWtUZXh0OiAn4YOZ4YOVJywgd2Vla1N0YXR1czogJ+GDrOGDmuGDmOGDoSDhg5nhg5Xhg5jhg6Dhg5AnLFxyXG5cdFx0ZGF5U3RhdHVzOiAn4YOQ4YOY4YOg4YOp4YOY4YOU4YOXIERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAn4YOQ4YOY4YOm4YOp4YOY4YOU4YOXIOGDl+GDkOGDoOGDmOGDpuGDmCcsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sna2EnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-km.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-km.js index 5cfd7f1548b..2d3a37b87a3 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-km.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-km.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['km']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWttLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWttLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgS2htZXIgaW5pdGlhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IFNvdmljaGV0IFRlcCAoc292aWNoZXQudGVwQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ttJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJ+GekOGemeKAi+GegOGfkuGemuGfhOGemScsIHByZXZTdGF0dXM6ICcnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ+GekeGfheKAi+GemOGeu+GegScsIG5leHRTdGF0dXM6ICcnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ+GekOGfkuGehOGfg+KAi+Gek+GfgeGfhycsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ+GekOGfkuGehOGfg+KAi+Gek+GfgeGfhycsIHRvZGF5U3RhdHVzOiAnJyxcblx0XHRjbGVhclRleHQ6ICdYJywgY2xlYXJTdGF0dXM6ICcnLFxuXHRcdGNsb3NlVGV4dDogJ+GemuGeveGeheKAi+GemuGetuGem+GfiycsIGNsb3NlU3RhdHVzOiAnJyxcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICdERCBkIE1NJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sna20nXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWttLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWttLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBLaG1lciBpbml0aWFsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBTb3ZpY2hldCBUZXAgKHNvdmljaGV0LnRlcEBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sna20nXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJ+GekOGemeKAi+GegOGfkuGemuGfhOGemScsIHByZXZTdGF0dXM6ICcnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICfhnpHhn4XigIvhnpjhnrvhnoEnLCBuZXh0U3RhdHVzOiAnJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn4Z6Q4Z+S4Z6E4Z+D4oCL4Z6T4Z+B4Z+HJywgY3VycmVudFN0YXR1czogJycsXHJcblx0XHR0b2RheVRleHQ6ICfhnpDhn5LhnoThn4PigIvhnpPhn4Hhn4cnLCB0b2RheVN0YXR1czogJycsXHJcblx0XHRjbGVhclRleHQ6ICdYJywgY2xlYXJTdGF0dXM6ICcnLFxyXG5cdFx0Y2xvc2VUZXh0OiAn4Z6a4Z694Z6F4oCL4Z6a4Z624Z6b4Z+LJywgY2xvc2VTdGF0dXM6ICcnLFxyXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcclxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnJyxcclxuXHRcdGRheVN0YXR1czogJ0REIGQgTU0nLCBkZWZhdWx0U3RhdHVzOiAnJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydrbSddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ko.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ko.js index b69b52bf609..70ce913e290 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ko.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ko.js @@ -27,4 +27,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['ko']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWtvLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnBpY2tlci1rby5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEtvcmVhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IERhZUt3b24gS2FuZyAobmNyYXNoLmRrQGdtYWlsLmNvbSksIEVkaXRlZCBieSBHZW5pZS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sna28nXSA9IHtcblx0XHRyZW5kZXJlcjogJC5leHRlbmQoe30sICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRcdHttb250aDogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLm1vbnRoLlxuXHRcdFx0XHRyZXBsYWNlKC9tb250aEhlYWRlci8sICdtb250aEhlYWRlcjp5eXl564WEIE1NJyl9KSxcblx0XHRwcmV2VGV4dDogJ+ydtOyghOuLrCcsIHByZXZTdGF0dXM6ICfsnbTsoITri6zsnYQg7ZGc7Iuc7ZWp64uI64ukJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+ydtOyghCDsl7Drj4Trpbwg7ZGc7Iuc7ZWp64uI64ukJyxcblx0XHRuZXh0VGV4dDogJ+uLpOydjOuLrCcsIG5leHRTdGF0dXM6ICfri6TsnYzri6zsnYQg7ZGc7Iuc7ZWp64uI64ukJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ+uLpOydjCDsl7Drj4Trpbwg7ZGc7Iuc7ZWp64uI64ukJyxcblx0XHRjdXJyZW50VGV4dDogJ+2YhOyerCcsIGN1cnJlbnRTdGF0dXM6ICfsnoXroKXtlZwg64us7J2EIO2RnOyLnO2VqeuLiOuLpCcsXG5cdFx0dG9kYXlUZXh0OiAn7Jik64qYJywgdG9kYXlTdGF0dXM6ICfsnbTrsojri6zsnYQg7ZGc7Iuc7ZWp64uI64ukJyxcblx0XHRjbGVhclRleHQ6ICfsp4DsmrDquLAnLCBjbGVhclN0YXR1czogJ+yeheugpe2VnCDrgqDsp5zrpbwg7KeA7JuB64uI64ukJyxcblx0XHRjbG9zZVRleHQ6ICfri6vquLAnLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJ+2RnOyLnO2VoCDsl7Drj4Trpbwg67OA6rK97ZWp64uI64ukJywgbW9udGhTdGF0dXM6ICftkZzsi5ztlaAg7JuU7J2EIOuzgOqyve2VqeuLiOuLpCcsXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICftlbTri7kg7Jew64+E7J2YIOyjvOywqCcsXG5cdFx0ZGF5U3RhdHVzOiAnTSBk7J28IChEKScsIGRlZmF1bHRTdGF0dXM6ICfrgqDsp5zrpbwg7ISg7YOd7ZWY7IS47JqUJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydrbyddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWtvLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnBpY2tlci1rby5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgS29yZWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBEYWVLd29uIEthbmcgKG5jcmFzaC5ka0BnbWFpbC5jb20pLCBFZGl0ZWQgYnkgR2VuaWUuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydrbyddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuZXh0ZW5kKHt9LCAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRcdHttb250aDogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLm1vbnRoLlxyXG5cdFx0XHRcdHJlcGxhY2UoL21vbnRoSGVhZGVyLywgJ21vbnRoSGVhZGVyOnl5eXnrhYQgTU0nKX0pLFxyXG5cdFx0cHJldlRleHQ6ICfsnbTsoITri6wnLCBwcmV2U3RhdHVzOiAn7J207KCE64us7J2EIO2RnOyLnO2VqeuLiOuLpCcsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+ydtOyghCDsl7Drj4Trpbwg7ZGc7Iuc7ZWp64uI64ukJyxcclxuXHRcdG5leHRUZXh0OiAn64uk7J2M64usJywgbmV4dFN0YXR1czogJ+uLpOydjOuLrOydhCDtkZzsi5ztlanri4jri6QnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICfri6TsnYwg7Jew64+E66W8IO2RnOyLnO2VqeuLiOuLpCcsXHJcblx0XHRjdXJyZW50VGV4dDogJ+2YhOyerCcsIGN1cnJlbnRTdGF0dXM6ICfsnoXroKXtlZwg64us7J2EIO2RnOyLnO2VqeuLiOuLpCcsXHJcblx0XHR0b2RheVRleHQ6ICfsmKTripgnLCB0b2RheVN0YXR1czogJ+ydtOuyiOuLrOydhCDtkZzsi5ztlanri4jri6QnLFxyXG5cdFx0Y2xlYXJUZXh0OiAn7KeA7Jqw6riwJywgY2xlYXJTdGF0dXM6ICfsnoXroKXtlZwg64Kg7Kec66W8IOyngOybgeuLiOuLpCcsXHJcblx0XHRjbG9zZVRleHQ6ICfri6vquLAnLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAn7ZGc7Iuc7ZWgIOyXsOuPhOulvCDrs4Dqsr3tlanri4jri6QnLCBtb250aFN0YXR1czogJ+2RnOyLnO2VoCDsm5TsnYQg67OA6rK97ZWp64uI64ukJyxcclxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAn7ZW064u5IOyXsOuPhOydmCDso7zssKgnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnTSBk7J28IChEKScsIGRlZmF1bHRTdGF0dXM6ICfrgqDsp5zrpbwg7ISg7YOd7ZWY7IS47JqUJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydrbyddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-lt.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-lt.js index 93937afae64..016a07fcf09 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-lt.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-lt.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['lt']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWx0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWx0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTGl0aHVhbmlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBBcnR1cmFzIFBhbGVpY2lrYXMgPGFydHVyYXNAYXZhbG9uLmx0Pi4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbHQnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QXRnYWwnLCAgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnUGlybXluJiN4M2U7JywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnxaBpYW5kaWVuJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnxaBpYW5kaWVuJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ0nFoXZhbHl0aScsIGNsZWFyU3RhdHVzOiAnJyxcblx0XHRjbG9zZVRleHQ6ICdVxb5kYXJ5dGknLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2x0J10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWx0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWx0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBMaXRodWFuaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgQXJ0dXJhcyBQYWxlaWNpa2FzIDxhcnR1cmFzQGF2YWxvbi5sdD4uICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydsdCddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QXRnYWwnLCAgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ1Bpcm15biYjeDNlOycsIG5leHRTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfFoGlhbmRpZW4nLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ8WgaWFuZGllbicsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ0nFoXZhbHl0aScsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ1XFvmRhcnl0aScsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbHQnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-lv.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-lv.js index eb160f121f8..4d66cd6d8bd 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-lv.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-lv.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['lv']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWx2LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWx2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTGF0dmlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBBcnR1cmFzIFBhbGVpY2lrYXMgPGFydHVyYXMucGFsZWljaWthc0BtZXRhc2l0ZS5uZXQ+LiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydsdiddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICdJZXByJywgIHByZXZTdGF0dXM6ICcnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ07EgWthJywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnxaBvZGllbicsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ8Wgb2RpZW4nLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAnTm90xKtyxKt0JywgY2xlYXJTdGF0dXM6ICcnLFxuXHRcdGNsb3NlVGV4dDogJ0FpenbEk3J0JywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdOYXYnLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbHYnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWx2LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLWx2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBMYXR2aWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgQXJ0dXJhcyBQYWxlaWNpa2FzIDxhcnR1cmFzLnBhbGVpY2lrYXNAbWV0YXNpdGUubmV0Pi4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2x2J10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICdJZXByJywgIHByZXZTdGF0dXM6ICcnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICdOxIFrYScsIG5leHRTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfFoG9kaWVuJywgY3VycmVudFN0YXR1czogJycsXHJcblx0XHR0b2RheVRleHQ6ICfFoG9kaWVuJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnTm90xKtyxKt0JywgY2xlYXJTdGF0dXM6ICcnLFxyXG5cdFx0Y2xvc2VUZXh0OiAnQWl6dsSTcnQnLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxyXG5cdFx0d2Vla1RleHQ6ICdOYXYnLCB3ZWVrU3RhdHVzOiAnJyxcclxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydsdiddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-me-ME.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-me-ME.js index a4bb53bedeb..62fcdca6d89 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-me-ME.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-me-ME.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['me-ME']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1lLU1FLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1lLU1FLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTW9udGVuZWdyaW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBNaWxvxaEgTWlsb8WhZXZpxIcgLSBmbGVrYSBkLm8uby4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbWUtTUUnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7JywgcHJldlN0YXR1czogJ1ByaWthxb5pIHByZXRob2RuaSBtamVzZWMnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnUHJpa2HFvmkgcHJldGhvZG51IGdvZGludScsXG5cdFx0bmV4dFRleHQ6ICcmI3gzZTsnLCBuZXh0U3RhdHVzOiAnUHJpa2HFvmkgc2xqZWRlxIdpIG1qZXNlYycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICdQcmlrYcW+aSBzbGplZGXEh3UgZ29kaW51Jyxcblx0XHRjdXJyZW50VGV4dDogJ0RhbmFzJywgY3VycmVudFN0YXR1czogJ1Rla3XEh2kgbWplc2VjJyxcblx0XHR0b2RheVRleHQ6ICdEYW5hcycsIHRvZGF5U3RhdHVzOiAnVGVrdcSHaSBtamVzZWMnLFxuXHRcdGNsZWFyVGV4dDogJ09icmnFoWknLCBjbGVhclN0YXR1czogJ09icmnFoWkgdHJlbnV0bmkgZGF0dW0nLFxuXHRcdGNsb3NlVGV4dDogJ1phdHZvcmknLCBjbG9zZVN0YXR1czogJ1phdHZvcmkga2FsZW5kYXInLFxuXHRcdHllYXJTdGF0dXM6ICdQcmlrYcW+aSBnb2RpbmUnLCBtb250aFN0YXR1czogJ1ByaWthxb5pIG1qZXNlY2UnLFxuXHRcdHdlZWtUZXh0OiAnU2VkJywgd2Vla1N0YXR1czogJ1NlZG1pY2EnLFxuXHRcdGRheVN0YXR1czogJ1xcJ0RhdHVtXFwnIERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnT2RhYmVyaSBkYXR1bScsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbWUtTUUnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1lLU1FLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1lLU1FLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBNb250ZW5lZ3JpbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTWlsb8WhIE1pbG/FoWV2acSHIC0gZmxla2EgZC5vLm8uICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtZS1NRSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7JywgcHJldlN0YXR1czogJ1ByaWthxb5pIHByZXRob2RuaSBtamVzZWMnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICdQcmlrYcW+aSBwcmV0aG9kbnUgZ29kaW51JyxcclxuXHRcdG5leHRUZXh0OiAnJiN4M2U7JywgbmV4dFN0YXR1czogJ1ByaWthxb5pIHNsamVkZcSHaSBtamVzZWMnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICdQcmlrYcW+aSBzbGplZGXEh3UgZ29kaW51JyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnRGFuYXMnLCBjdXJyZW50U3RhdHVzOiAnVGVrdcSHaSBtamVzZWMnLFxyXG5cdFx0dG9kYXlUZXh0OiAnRGFuYXMnLCB0b2RheVN0YXR1czogJ1Rla3XEh2kgbWplc2VjJyxcclxuXHRcdGNsZWFyVGV4dDogJ09icmnFoWknLCBjbGVhclN0YXR1czogJ09icmnFoWkgdHJlbnV0bmkgZGF0dW0nLFxyXG5cdFx0Y2xvc2VUZXh0OiAnWmF0dm9yaScsIGNsb3NlU3RhdHVzOiAnWmF0dm9yaSBrYWxlbmRhcicsXHJcblx0XHR5ZWFyU3RhdHVzOiAnUHJpa2HFvmkgZ29kaW5lJywgbW9udGhTdGF0dXM6ICdQcmlrYcW+aSBtamVzZWNlJyxcclxuXHRcdHdlZWtUZXh0OiAnU2VkJywgd2Vla1N0YXR1czogJ1NlZG1pY2EnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnXFwnRGF0dW1cXCcgREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdPZGFiZXJpIGRhdHVtJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtZS1NRSddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-me.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-me.js index 4a7510126c0..67980e56f73 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-me.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-me.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['me']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTW9udGVuZWdyaW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBNaWxvxaEgTWlsb8WhZXZpxIcgLSBmbGVrYSBkLm8uby4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbWUnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7JywgcHJldlN0YXR1czogJ9Cf0YDQuNC60LDQttC4INC/0YDQtdGC0YXQvtC00L3QuCDQvNGY0LXRgdC10YYnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0L/RgNC10YLRhdC+0LTQvdGDINCz0L7QtNC40L3RgycsXG5cdFx0bmV4dFRleHQ6ICcmI3gzZTsnLCBuZXh0U3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0YHRmdC10LTQtdGb0Lgg0LzRmNC10YHQtdGGJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ9Cf0YDQuNC60LDQttC4INGB0ZnQtdC00LXRm9GDINCz0L7QtNC40L3RgycsXG5cdFx0Y3VycmVudFRleHQ6ICfQlNCw0L3QsNGBJywgY3VycmVudFN0YXR1czogJ9Ci0LXQutGD0ZvQuCDQvNGY0LXRgdC10YYnLFxuXHRcdHRvZGF5VGV4dDogJ9CU0LDQvdCw0YEnLCB0b2RheVN0YXR1czogJ9Ci0LXQutGD0ZvQuCDQvNGY0LXRgdC10YYnLFxuXHRcdGNsZWFyVGV4dDogJ9Ce0LHRgNC40YjQuCcsIGNsZWFyU3RhdHVzOiAn0J7QsdGA0LjRiNC4INGC0YDQtdC90YPRgtC90Lgg0LTQsNGC0YPQvCcsXG5cdFx0Y2xvc2VUZXh0OiAn0JfQsNGC0LLQvtGA0LgnLCBjbG9zZVN0YXR1czogJ9CX0LDRgtCy0L7RgNC4INC60LDQu9C10L3QtNCw0YAnLFxuXHRcdHllYXJTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDQs9C+0LTQuNC90LUnLCBtb250aFN0YXR1czogJ9Cf0YDQuNC60LDQttC4INC80ZjQtdGB0LXRhtC1Jyxcblx0XHR3ZWVrVGV4dDogJ9Ch0LXQtCcsIHdlZWtTdGF0dXM6ICfQodC10LTQvNC40YbQsCcsXG5cdFx0ZGF5U3RhdHVzOiAnXFwn0JTQsNGC0YPQvFxcJyBERCBkIE1NJywgZGVmYXVsdFN0YXR1czogJ9Ce0LTQsNCx0LXRgNC4INC00LDRgtGD0LwnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ21lJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBNb250ZW5lZ3JpbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTWlsb8WhIE1pbG/FoWV2acSHIC0gZmxla2EgZC5vLm8uICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtZSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7JywgcHJldlN0YXR1czogJ9Cf0YDQuNC60LDQttC4INC/0YDQtdGC0YXQvtC00L3QuCDQvNGY0LXRgdC10YYnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDQv9GA0LXRgtGF0L7QtNC90YMg0LPQvtC00LjQvdGDJyxcclxuXHRcdG5leHRUZXh0OiAnJiN4M2U7JywgbmV4dFN0YXR1czogJ9Cf0YDQuNC60LDQttC4INGB0ZnQtdC00LXRm9C4INC80ZjQtdGB0LXRhicsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ9Cf0YDQuNC60LDQttC4INGB0ZnQtdC00LXRm9GDINCz0L7QtNC40L3RgycsXHJcblx0XHRjdXJyZW50VGV4dDogJ9CU0LDQvdCw0YEnLCBjdXJyZW50U3RhdHVzOiAn0KLQtdC60YPRm9C4INC80ZjQtdGB0LXRhicsXHJcblx0XHR0b2RheVRleHQ6ICfQlNCw0L3QsNGBJywgdG9kYXlTdGF0dXM6ICfQotC10LrRg9Gb0Lgg0LzRmNC10YHQtdGGJyxcclxuXHRcdGNsZWFyVGV4dDogJ9Ce0LHRgNC40YjQuCcsIGNsZWFyU3RhdHVzOiAn0J7QsdGA0LjRiNC4INGC0YDQtdC90YPRgtC90Lgg0LTQsNGC0YPQvCcsXHJcblx0XHRjbG9zZVRleHQ6ICfQl9Cw0YLQstC+0YDQuCcsIGNsb3NlU3RhdHVzOiAn0JfQsNGC0LLQvtGA0Lgg0LrQsNC70LXQvdC00LDRgCcsXHJcblx0XHR5ZWFyU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0LPQvtC00LjQvdC1JywgbW9udGhTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDQvNGY0LXRgdC10YbQtScsXHJcblx0XHR3ZWVrVGV4dDogJ9Ch0LXQtCcsIHdlZWtTdGF0dXM6ICfQodC10LTQvNC40YbQsCcsXHJcblx0XHRkYXlTdGF0dXM6ICdcXCfQlNCw0YLRg9C8XFwnIEREIGQgTU0nLCBkZWZhdWx0U3RhdHVzOiAn0J7QtNCw0LHQtdGA0Lgg0LTQsNGC0YPQvCcsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbWUnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-mk.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-mk.js index 469c0b83372..35b27e6a0bc 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-mk.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-mk.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['mk']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1rLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1rLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAg0JzQsNC60LXQtNC+0L3RgdC60LggTUsgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgSGFqYW4gU2VsbWFuaSAoaGFqYW4gW2F0XSBsaXZlIFtkb3RdIGNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ21rJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJ9Cf0YDQtdGC0YUuJywgcHJldlN0YXR1czogJ9Cf0YDQuNC60LDQttC4INCz0L4g0L/RgNC10YLRhdC+0LTQvdC40L7RgiDQvNC10YHQtdGGJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ9Cf0YDQuNC60LDQttC4INGY0LAg0L/RgNC10YLRhdC+0LTQvdCw0YLQsCDQs9C+0LTQuNC90LAnLFxuXHRcdG5leHRUZXh0OiAn0KHQu9C10LTQtdC9JywgbmV4dFN0YXR1czogJ9Cf0YDQuNC60LDQttC4INCz0L4g0YHQu9C10LTQvdC40L7RgiDQvNC10YHQtdGGJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ9Cf0YDQuNC60LDQttC4INGY0LAg0YHQu9C10LTQvdCw0YLQsCDQs9C+0LTQuNC90LAnLFxuXHRcdGN1cnJlbnRUZXh0OiAn0KLQtdC60L7QstC10L0nLCBjdXJyZW50U3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0LPQviDRgtC10LrQvtCy0L3QuNC+0YIg0LzQtdGB0LXRhicsXG5cdFx0dG9kYXlUZXh0OiAn0JTQtdC90LXRgScsIHRvZGF5U3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0LPQviDQtNC10L3QtdGI0L3QuNC+0YIg0LzQtdGB0LXRhicsXG5cdFx0Y2xlYXJUZXh0OiAn0JHRgNC40YjQuCcsIGNsZWFyU3RhdHVzOiAn0JjQt9Cx0YDQuNGI0Lgg0LPQviDRgtC10LrQvtCy0L3QuNC+0YIg0LTQsNGC0YPQvCcsXG5cdFx0Y2xvc2VUZXh0OiAn0JfQsNGC0LLQvtGA0LgnLCBjbG9zZVN0YXR1czogJ9CX0LDRgtCy0L7RgNC4INCx0LXQtyDQv9GA0L7QvNC10L3QuCcsXG5cdFx0eWVhclN0YXR1czogJ9CY0LfQsdC10YDQuCDQtNGA0YPQs9CwINCz0L7QtNC40L3QsCcsIG1vbnRoU3RhdHVzOiAn0JjQt9Cx0LXRgNC4INC00YDRg9CzINC80LXRgdC10YYnLFxuXHRcdHdlZWtUZXh0OiAn0J3QtdC0Jywgd2Vla1N0YXR1czogJ9Cd0LXQtNC10LvQsCDQstC+INCz0L7QtNC40L3QsNGC0LAnLFxuXHRcdGRheVN0YXR1czogJ9CY0LfQsdC10YDQuCBERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ9CY0LfQsdC10YDQuCDQtNCw0YLRg9C8Jyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtayddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1rLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1rLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICDQnNCw0LrQtdC00L7QvdGB0LrQuCBNSyBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIEhhamFuIFNlbG1hbmkgKGhhamFuIFthdF0gbGl2ZSBbZG90XSBjb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbWsnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJ9Cf0YDQtdGC0YUuJywgcHJldlN0YXR1czogJ9Cf0YDQuNC60LDQttC4INCz0L4g0L/RgNC10YLRhdC+0LTQvdC40L7RgiDQvNC10YHQtdGGJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0ZjQsCDQv9GA0LXRgtGF0L7QtNC90LDRgtCwINCz0L7QtNC40L3QsCcsXHJcblx0XHRuZXh0VGV4dDogJ9Ch0LvQtdC00LXQvScsIG5leHRTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDQs9C+INGB0LvQtdC00L3QuNC+0YIg0LzQtdGB0LXRhicsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ9Cf0YDQuNC60LDQttC4INGY0LAg0YHQu9C10LTQvdCw0YLQsCDQs9C+0LTQuNC90LAnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfQotC10LrQvtCy0LXQvScsIGN1cnJlbnRTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDQs9C+INGC0LXQutC+0LLQvdC40L7RgiDQvNC10YHQtdGGJyxcclxuXHRcdHRvZGF5VGV4dDogJ9CU0LXQvdC10YEnLCB0b2RheVN0YXR1czogJ9Cf0YDQuNC60LDQttC4INCz0L4g0LTQtdC90LXRiNC90LjQvtGCINC80LXRgdC10YYnLFxyXG5cdFx0Y2xlYXJUZXh0OiAn0JHRgNC40YjQuCcsIGNsZWFyU3RhdHVzOiAn0JjQt9Cx0YDQuNGI0Lgg0LPQviDRgtC10LrQvtCy0L3QuNC+0YIg0LTQsNGC0YPQvCcsXHJcblx0XHRjbG9zZVRleHQ6ICfQl9Cw0YLQstC+0YDQuCcsIGNsb3NlU3RhdHVzOiAn0JfQsNGC0LLQvtGA0Lgg0LHQtdC3INC/0YDQvtC80LXQvdC4JyxcclxuXHRcdHllYXJTdGF0dXM6ICfQmNC30LHQtdGA0Lgg0LTRgNGD0LPQsCDQs9C+0LTQuNC90LAnLCBtb250aFN0YXR1czogJ9CY0LfQsdC10YDQuCDQtNGA0YPQsyDQvNC10YHQtdGGJyxcclxuXHRcdHdlZWtUZXh0OiAn0J3QtdC0Jywgd2Vla1N0YXR1czogJ9Cd0LXQtNC10LvQsCDQstC+INCz0L7QtNC40L3QsNGC0LAnLFxyXG5cdFx0ZGF5U3RhdHVzOiAn0JjQt9Cx0LXRgNC4IERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAn0JjQt9Cx0LXRgNC4INC00LDRgtGD0LwnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ21rJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ml.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ml.js index e8339bcfab9..9d0bf52b190 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ml.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ml.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['ml']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1sLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTWFsYXlhbGFtIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFNhamkgTmVkaXlhbmNoYXRoIChzYWppODlAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbWwnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAn4LSu4LWB4LSo4LWN4LSo4LSk4LWN4LSk4LWGJywgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAn4LSF4LSf4LWB4LSk4LWN4LSk4LSk4LWNICcsIG5leHRTdGF0dXM6ICcnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ+C0h+C0qOC1jeC0qOC1jScsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ+C0h+C0qOC1jeC0qOC1jScsIHRvZGF5U3RhdHVzOiAnJyxcblx0XHRjbGVhclRleHQ6ICdYJywgY2xlYXJTdGF0dXM6ICcnLFxuXHRcdGNsb3NlVGV4dDogJ+C0tuC0sOC0vycsIGNsb3NlU3RhdHVzOiAnJyxcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxuXHRcdHdlZWtUZXh0OiAn4LSGJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnREQgZCBNTScsIGRlZmF1bHRTdGF0dXM6ICcnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ21sJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1sLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBNYWxheWFsYW0gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBTYWppIE5lZGl5YW5jaGF0aCAoc2FqaTg5QGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtbCddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAn4LSu4LWB4LSo4LWN4LSo4LSk4LWN4LSk4LWGJywgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ+C0heC0n+C1geC0pOC1jeC0pOC0pOC1jSAnLCBuZXh0U3RhdHVzOiAnJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn4LSH4LSo4LWN4LSo4LWNJywgY3VycmVudFN0YXR1czogJycsXHJcblx0XHR0b2RheVRleHQ6ICfgtIfgtKjgtY3gtKjgtY0nLCB0b2RheVN0YXR1czogJycsXHJcblx0XHRjbGVhclRleHQ6ICdYJywgY2xlYXJTdGF0dXM6ICcnLFxyXG5cdFx0Y2xvc2VUZXh0OiAn4LS24LSw4LS/JywgY2xvc2VTdGF0dXM6ICcnLFxyXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcclxuXHRcdHdlZWtUZXh0OiAn4LSGJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCBkIE1NJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbWwnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ms.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ms.js index 3a2e073b52b..27724144493 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ms.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ms.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['ms']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1zLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTWFsYXlzaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTW9oZCBOYXdhd2kgTW9oYW1hZCBKYW1pbGkgKG5hd2F3aUByb25nZ2VuZy5uZXQpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtcyddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYztTZWJlbHVtJywgcHJldlN0YXR1czogJ1R1bmp1a2thbiBidWxhbiBsZXBhcycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICdUdW5qdWtrYW4gdGFodW4gbGVwYXMnLFxuXHRcdG5leHRUZXh0OiAnU2VsZXBhcyYjeDNlOycsIG5leHRTdGF0dXM6ICdUdW5qdWtrYW4gYnVsYW4gZGVwYW4nLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnVHVuanVra2FuIHRhaHVuIGRlcGFuJyxcblx0XHRjdXJyZW50VGV4dDogJ2hhcmkgaW5pJywgY3VycmVudFN0YXR1czogJ1R1bmp1a2thbiBidWxhbiB0ZXJraW5pJyxcblx0XHR0b2RheVRleHQ6ICdoYXJpIGluaScsIHRvZGF5U3RhdHVzOiAnVHVuanVra2FuIGJ1bGFuIHRlcmtpbmknLFxuXHRcdGNsZWFyVGV4dDogJ1BhZGFtJywgY2xlYXJTdGF0dXM6ICdQYWRhbWthbiB0YXJpa2ggdGVya2luaScsXG5cdFx0Y2xvc2VUZXh0OiAnVHV0dXAnLCBjbG9zZVN0YXR1czogJ1R1dHVwIHRhbnBhIHBlcnViYWhhbicsXG5cdFx0eWVhclN0YXR1czogJ1R1bmp1a2thbiB0YWh1biB5YW5nIGxhaW4nLCBtb250aFN0YXR1czogJ1R1bmp1a2thbiBidWxhbiB5YW5nIGxhaW4nLFxuXHRcdHdlZWtUZXh0OiAnTWcnLCB3ZWVrU3RhdHVzOiAnTWluZ2d1IGJhZ2kgdGFodW4gaW5pJyxcblx0XHRkYXlTdGF0dXM6ICdERCwgZCBNTScsIGRlZmF1bHRTdGF0dXM6ICdTaWxhIHBpbGloIHRhcmlraCcsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbXMnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1zLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW1zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBNYWxheXNpYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IE1vaGQgTmF3YXdpIE1vaGFtYWQgSmFtaWxpIChuYXdhd2lAcm9uZ2dlbmcubmV0KS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ21zJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYztTZWJlbHVtJywgcHJldlN0YXR1czogJ1R1bmp1a2thbiBidWxhbiBsZXBhcycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ1R1bmp1a2thbiB0YWh1biBsZXBhcycsXHJcblx0XHRuZXh0VGV4dDogJ1NlbGVwYXMmI3gzZTsnLCBuZXh0U3RhdHVzOiAnVHVuanVra2FuIGJ1bGFuIGRlcGFuJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnVHVuanVra2FuIHRhaHVuIGRlcGFuJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnaGFyaSBpbmknLCBjdXJyZW50U3RhdHVzOiAnVHVuanVra2FuIGJ1bGFuIHRlcmtpbmknLFxyXG5cdFx0dG9kYXlUZXh0OiAnaGFyaSBpbmknLCB0b2RheVN0YXR1czogJ1R1bmp1a2thbiBidWxhbiB0ZXJraW5pJyxcclxuXHRcdGNsZWFyVGV4dDogJ1BhZGFtJywgY2xlYXJTdGF0dXM6ICdQYWRhbWthbiB0YXJpa2ggdGVya2luaScsXHJcblx0XHRjbG9zZVRleHQ6ICdUdXR1cCcsIGNsb3NlU3RhdHVzOiAnVHV0dXAgdGFucGEgcGVydWJhaGFuJyxcclxuXHRcdHllYXJTdGF0dXM6ICdUdW5qdWtrYW4gdGFodW4geWFuZyBsYWluJywgbW9udGhTdGF0dXM6ICdUdW5qdWtrYW4gYnVsYW4geWFuZyBsYWluJyxcclxuXHRcdHdlZWtUZXh0OiAnTWcnLCB3ZWVrU3RhdHVzOiAnTWluZ2d1IGJhZ2kgdGFodW4gaW5pJyxcclxuXHRcdGRheVN0YXR1czogJ0RELCBkIE1NJywgZGVmYXVsdFN0YXR1czogJ1NpbGEgcGlsaWggdGFyaWtoJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtcyddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-mt.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-mt.js index a5710b0f617..36fd3014b52 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-mt.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-mt.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['mt']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW10LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW10LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTWFsdGVzZSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IENocml0aWFuIFNjaWJlcnJhcyAodXVmNjQyOUBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtdCddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICdUYSBRYWJlbCcsIHByZXZTdGF0dXM6ICdJeC14YWhhciB0YSBxYWJlbCcsXG4gXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnSXMtc2VuYSB0YSBxYWJlbCcsXG4gXHRcdG5leHRUZXh0OiAnTGkgSm1pc3MnLCBuZXh0U3RhdHVzOiAnSXgteGFoYXIgbGkgam1pc3MnLFxuIFx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ0lzLXNlbmEgbGkgam1pc3MnLFxuIFx0XHRjdXJyZW50VGV4dDogJ0lsbHVtJywgY3VycmVudFN0YXR1czogJ0l4LXhhaGFyIHRhIGxsdW0nLFxuIFx0XHR0b2RheVRleHQ6ICdJbGx1bScsIHRvZGF5U3RhdHVzOiAnVXJpIGl4LXhhaGFyIHRhIGxsdW0nLFxuIFx0XHRjbGVhclRleHQ6ICfEpmFzc2FyJywgY2xlYXJTdGF0dXM6ICfEpmFzc2FyIGlkLWRhdGEnLFxuIFx0XHRjbG9zZVRleHQ6ICdMZXN0JywgY2xvc2VTdGF0dXM6ICdHxKdhbGFxIG1pbmfEp2FqciB0aWJkaWxpZXQnLFxuIFx0XHR5ZWFyU3RhdHVzOiAnVXJpIHNlbmEgZGlmZmVyZW50aScsIG1vbnRoU3RhdHVzOiAnVXJpIHhhaGFyIGRpZmZlcmVudGknLFxuXHRcdHdlZWtUZXh0OiAnxKBtJywgd2Vla1N0YXR1czogJ0lsLcSgaW1nxKdhIGZpcy1zZW5hJyxcblx0XHRkYXlTdGF0dXM6ICdHxKdhemVsIERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnR8SnYXplbCBkYXRhJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtdCddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW10LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW10LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBNYWx0ZXNlIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBDaHJpdGlhbiBTY2liZXJyYXMgKHV1ZjY0MjlAZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ210J10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICdUYSBRYWJlbCcsIHByZXZTdGF0dXM6ICdJeC14YWhhciB0YSBxYWJlbCcsXHJcbiBcdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICdJcy1zZW5hIHRhIHFhYmVsJyxcclxuIFx0XHRuZXh0VGV4dDogJ0xpIEptaXNzJywgbmV4dFN0YXR1czogJ0l4LXhhaGFyIGxpIGptaXNzJyxcclxuIFx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ0lzLXNlbmEgbGkgam1pc3MnLFxyXG4gXHRcdGN1cnJlbnRUZXh0OiAnSWxsdW0nLCBjdXJyZW50U3RhdHVzOiAnSXgteGFoYXIgdGEgbGx1bScsXHJcbiBcdFx0dG9kYXlUZXh0OiAnSWxsdW0nLCB0b2RheVN0YXR1czogJ1VyaSBpeC14YWhhciB0YSBsbHVtJyxcclxuIFx0XHRjbGVhclRleHQ6ICfEpmFzc2FyJywgY2xlYXJTdGF0dXM6ICfEpmFzc2FyIGlkLWRhdGEnLFxyXG4gXHRcdGNsb3NlVGV4dDogJ0xlc3QnLCBjbG9zZVN0YXR1czogJ0fEp2FsYXEgbWluZ8SnYWpyIHRpYmRpbGlldCcsXHJcbiBcdFx0eWVhclN0YXR1czogJ1VyaSBzZW5hIGRpZmZlcmVudGknLCBtb250aFN0YXR1czogJ1VyaSB4YWhhciBkaWZmZXJlbnRpJyxcclxuXHRcdHdlZWtUZXh0OiAnxKBtJywgd2Vla1N0YXR1czogJ0lsLcSgaW1nxKdhIGZpcy1zZW5hJyxcclxuXHRcdGRheVN0YXR1czogJ0fEp2F6ZWwgREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdHxKdhemVsIGRhdGEnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ210J10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-nl-BE.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-nl-BE.js index 00fee0cec6f..8d69a360e81 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-nl-BE.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-nl-BE.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['nl-BE']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW5sLUJFLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW5sLUJFLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRHV0Y2gvQmVsZ2lhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IE1hdGhpYXMgQnluZW5zIDxodHRwOi8vbWF0aGlhc2J5bmVucy5iZS8+LiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydubC1CRSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICfihpAnLCBwcmV2U3RhdHVzOiAnQmVraWprIGRlIHZvcmlnZSBtYWFuZCcsXG5cdFx0cHJldkp1bXBUZXh0OiAnwqsnLCBuZXh0SnVtcFN0YXR1czogJ0Jla2lqayBoZXQgdm9yaWdlIGphYXInLFxuXHRcdG5leHRUZXh0OiAn4oaSJywgbmV4dFN0YXR1czogJ0Jla2lqayBkZSB2b2xnZW5kZSBtYWFuZCcsXG5cdFx0bmV4dEp1bXBUZXh0OiAnwrsnLCBuZXh0SnVtcFN0YXR1czogJ0Jla2lqayBoZXQgdm9sZ2VuZGUgamFhcicsXG5cdFx0Y3VycmVudFRleHQ6ICdWYW5kYWFnJywgY3VycmVudFN0YXR1czogJ0Jla2lqayBkZSBodWlkaWdlIG1hYW5kJyxcblx0XHR0b2RheVRleHQ6ICdWYW5kYWFnJywgdG9kYXlTdGF0dXM6ICdCZWtpamsgZGUgaHVpZGlnZSBtYWFuZCcsXG5cdFx0Y2xlYXJUZXh0OiAnV2lzc2VuJywgY2xlYXJTdGF0dXM6ICdXaXMgZGUgaHVpZGlnZSBkYXR1bScsXG5cdFx0Y2xvc2VUZXh0OiAnU2x1aXRlbicsIGNsb3NlU3RhdHVzOiAnU2x1aXQgem9uZGVyIHZlcmFuZGVyaW5nJyxcblx0XHR5ZWFyU3RhdHVzOiAnQmVraWprIGVlbiBhbmRlciBqYWFyJywgbW9udGhTdGF0dXM6ICdCZWtpamsgZWVuIGFuZGVyZSBtYWFuZCcsXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICdXZWVrIHZhbiBoZXQgamFhcicsXG5cdFx0ZGF5U3RhdHVzOiAnZGQvbW0veXl5eScsIGRlZmF1bHRTdGF0dXM6ICdLaWVzIGVlbiBkYXR1bScsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbmwtQkUnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW5sLUJFLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW5sLUJFLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBEdXRjaC9CZWxnaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBNYXRoaWFzIEJ5bmVucyA8aHR0cDovL21hdGhpYXNieW5lbnMuYmUvPi4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ25sLUJFJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICfihpAnLCBwcmV2U3RhdHVzOiAnQmVraWprIGRlIHZvcmlnZSBtYWFuZCcsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICfCqycsIG5leHRKdW1wU3RhdHVzOiAnQmVraWprIGhldCB2b3JpZ2UgamFhcicsXHJcblx0XHRuZXh0VGV4dDogJ+KGkicsIG5leHRTdGF0dXM6ICdCZWtpamsgZGUgdm9sZ2VuZGUgbWFhbmQnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnwrsnLCBuZXh0SnVtcFN0YXR1czogJ0Jla2lqayBoZXQgdm9sZ2VuZGUgamFhcicsXHJcblx0XHRjdXJyZW50VGV4dDogJ1ZhbmRhYWcnLCBjdXJyZW50U3RhdHVzOiAnQmVraWprIGRlIGh1aWRpZ2UgbWFhbmQnLFxyXG5cdFx0dG9kYXlUZXh0OiAnVmFuZGFhZycsIHRvZGF5U3RhdHVzOiAnQmVraWprIGRlIGh1aWRpZ2UgbWFhbmQnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnV2lzc2VuJywgY2xlYXJTdGF0dXM6ICdXaXMgZGUgaHVpZGlnZSBkYXR1bScsXHJcblx0XHRjbG9zZVRleHQ6ICdTbHVpdGVuJywgY2xvc2VTdGF0dXM6ICdTbHVpdCB6b25kZXIgdmVyYW5kZXJpbmcnLFxyXG5cdFx0eWVhclN0YXR1czogJ0Jla2lqayBlZW4gYW5kZXIgamFhcicsIG1vbnRoU3RhdHVzOiAnQmVraWprIGVlbiBhbmRlcmUgbWFhbmQnLFxyXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICdXZWVrIHZhbiBoZXQgamFhcicsXHJcblx0XHRkYXlTdGF0dXM6ICdkZC9tbS95eXl5JywgZGVmYXVsdFN0YXR1czogJ0tpZXMgZWVuIGRhdHVtJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydubC1CRSddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-nl.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-nl.js index 52ecda30477..2ee116037ab 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-nl.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-nl.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['nl']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW5sLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW5sLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRHV0Y2ggbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBNYXRoaWFzIEJ5bmVucyA8aHR0cDovL21hdGhpYXNieW5lbnMuYmUvPi4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbmwnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAn4oaQJywgcHJldlN0YXR1czogJ0Jla2lqayBkZSB2b3JpZ2UgbWFhbmQnLFxuXHRcdHByZXZKdW1wVGV4dDogJ8KrJywgbmV4dEp1bXBTdGF0dXM6ICdCZWtpamsgaGV0IHZvcmlnZSBqYWFyJyxcblx0XHRuZXh0VGV4dDogJ+KGkicsIG5leHRTdGF0dXM6ICdCZWtpamsgZGUgdm9sZ2VuZGUgbWFhbmQnLFxuXHRcdG5leHRKdW1wVGV4dDogJ8K7JywgbmV4dEp1bXBTdGF0dXM6ICdCZWtpamsgaGV0IHZvbGdlbmRlIGphYXInLFxuXHRcdGN1cnJlbnRUZXh0OiAnVmFuZGFhZycsIGN1cnJlbnRTdGF0dXM6ICdCZWtpamsgZGUgaHVpZGlnZSBtYWFuZCcsXG5cdFx0dG9kYXlUZXh0OiAnVmFuZGFhZycsIHRvZGF5U3RhdHVzOiAnQmVraWprIGRlIGh1aWRpZ2UgbWFhbmQnLFxuXHRcdGNsZWFyVGV4dDogJ1dpc3NlbicsIGNsZWFyU3RhdHVzOiAnV2lzIGRlIGh1aWRpZ2UgZGF0dW0nLFxuXHRcdGNsb3NlVGV4dDogJ1NsdWl0ZW4nLCBjbG9zZVN0YXR1czogJ1NsdWl0IHpvbmRlciB2ZXJhbmRlcmluZycsXG5cdFx0eWVhclN0YXR1czogJ0Jla2lqayBlZW4gYW5kZXIgamFhcicsIG1vbnRoU3RhdHVzOiAnQmVraWprIGVlbiBhbmRlcmUgbWFhbmQnLFxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnV2VlayB2YW4gaGV0IGphYXInLFxuXHRcdGRheVN0YXR1czogJ2RkLW1tLXl5eXknLCBkZWZhdWx0U3RhdHVzOiAnS2llcyBlZW4gZGF0dW0nLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ25sJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW5sLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW5sLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBEdXRjaCBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTWF0aGlhcyBCeW5lbnMgPGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlLz4uICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydubCddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAn4oaQJywgcHJldlN0YXR1czogJ0Jla2lqayBkZSB2b3JpZ2UgbWFhbmQnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnwqsnLCBuZXh0SnVtcFN0YXR1czogJ0Jla2lqayBoZXQgdm9yaWdlIGphYXInLFxyXG5cdFx0bmV4dFRleHQ6ICfihpInLCBuZXh0U3RhdHVzOiAnQmVraWprIGRlIHZvbGdlbmRlIG1hYW5kJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJ8K7JywgbmV4dEp1bXBTdGF0dXM6ICdCZWtpamsgaGV0IHZvbGdlbmRlIGphYXInLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdWYW5kYWFnJywgY3VycmVudFN0YXR1czogJ0Jla2lqayBkZSBodWlkaWdlIG1hYW5kJyxcclxuXHRcdHRvZGF5VGV4dDogJ1ZhbmRhYWcnLCB0b2RheVN0YXR1czogJ0Jla2lqayBkZSBodWlkaWdlIG1hYW5kJyxcclxuXHRcdGNsZWFyVGV4dDogJ1dpc3NlbicsIGNsZWFyU3RhdHVzOiAnV2lzIGRlIGh1aWRpZ2UgZGF0dW0nLFxyXG5cdFx0Y2xvc2VUZXh0OiAnU2x1aXRlbicsIGNsb3NlU3RhdHVzOiAnU2x1aXQgem9uZGVyIHZlcmFuZGVyaW5nJyxcclxuXHRcdHllYXJTdGF0dXM6ICdCZWtpamsgZWVuIGFuZGVyIGphYXInLCBtb250aFN0YXR1czogJ0Jla2lqayBlZW4gYW5kZXJlIG1hYW5kJyxcclxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnV2VlayB2YW4gaGV0IGphYXInLFxyXG5cdFx0ZGF5U3RhdHVzOiAnZGQtbW0teXl5eScsIGRlZmF1bHRTdGF0dXM6ICdLaWVzIGVlbiBkYXR1bScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbmwnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-no.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-no.js index ee28f53e4e1..e5554fb0032 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-no.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-no.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['no']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW5vLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW5vLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTm9yd2VnaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTmFpbWRqb24gVGFraGlyb3YgKG5haW1kam9uQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ25vJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyZsYXF1bztGb3JyaWdlJywgIHByZXZTdGF0dXM6ICcnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ05lc3RlJnJhcXVvOycsIG5leHRTdGF0dXM6ICcnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ0kgZGFnJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnSSBkYWcnLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAnVMO4bScsIGNsZWFyU3RhdHVzOiAnJyxcblx0XHRjbG9zZVRleHQ6ICdMdWtrJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdVa2UnLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbm8nXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW5vLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLW5vLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBOb3J3ZWdpYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IE5haW1kam9uIFRha2hpcm92IChuYWltZGpvbkBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbm8nXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyZsYXF1bztGb3JyaWdlJywgIHByZXZTdGF0dXM6ICcnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICdOZXN0ZSZyYXF1bzsnLCBuZXh0U3RhdHVzOiAnJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnSSBkYWcnLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ0kgZGFnJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnVMO4bScsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ0x1a2snLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxyXG5cdFx0d2Vla1RleHQ6ICdVa2UnLCB3ZWVrU3RhdHVzOiAnJyxcclxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydubyddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-pl.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-pl.js index bfb32c3bf8f..2254fc137c4 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-pl.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-pl.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['pl']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXBsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXBsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgUG9saXNoIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgSmFjZWsgV3lzb2NraSAoamFjZWsud3lzb2NraUBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydwbCddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYztQb3ByemVkbmknLCBwcmV2U3RhdHVzOiAnUG9rYcW8IHBvcHJ6ZWRuaSBtaWVzacSFYycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnTmFzdMSZcG55JiN4M2U7JywgbmV4dFN0YXR1czogJ1Bva2HFvCBuYXN0xJlwbnkgbWllc2nEhWMnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ0R6acWbJywgY3VycmVudFN0YXR1czogJ1Bva2HFvCBha3R1YWxueSBtaWVzacSFYycsXG5cdFx0dG9kYXlUZXh0OiAnRHppxZsnLCB0b2RheVN0YXR1czogJ1Bva2HFvCBha3R1YWxueSBtaWVzacSFYycsXG5cdFx0Y2xlYXJUZXh0OiAnV3ljennFm8SHJywgY2xlYXJTdGF0dXM6ICdXeWN6ecWbxIcgb2JlY27EhSBkYXTEmScsXG5cdFx0Y2xvc2VUZXh0OiAnWmFta25paicsIGNsb3NlU3RhdHVzOiAnWmFta25paiBiZXogemFwaXN5d2FuaWEnLFxuXHRcdHllYXJTdGF0dXM6ICdQb2thxbwgaW5ueSByb2snLCBtb250aFN0YXR1czogJ1Bva2HFvCBpbm55IG1pZXNpxIVjJyxcblx0XHR3ZWVrVGV4dDogJ1R5ZHonLCB3ZWVrU3RhdHVzOiAnVHlkemllxYQgcm9rdScsXG5cdFx0ZGF5U3RhdHVzOiAnXFwnV3liaWVyelxcJyBERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ1d5YmllcnogZGF0xJknLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3BsJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXBsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXBsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBQb2xpc2ggbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEphY2VrIFd5c29ja2kgKGphY2VrLnd5c29ja2lAZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3BsJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYztQb3ByemVkbmknLCBwcmV2U3RhdHVzOiAnUG9rYcW8IHBvcHJ6ZWRuaSBtaWVzacSFYycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ05hc3TEmXBueSYjeDNlOycsIG5leHRTdGF0dXM6ICdQb2thxbwgbmFzdMSZcG55IG1pZXNpxIVjJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnRHppxZsnLCBjdXJyZW50U3RhdHVzOiAnUG9rYcW8IGFrdHVhbG55IG1pZXNpxIVjJyxcclxuXHRcdHRvZGF5VGV4dDogJ0R6acWbJywgdG9kYXlTdGF0dXM6ICdQb2thxbwgYWt0dWFsbnkgbWllc2nEhWMnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnV3ljennFm8SHJywgY2xlYXJTdGF0dXM6ICdXeWN6ecWbxIcgb2JlY27EhSBkYXTEmScsXHJcblx0XHRjbG9zZVRleHQ6ICdaYW1rbmlqJywgY2xvc2VTdGF0dXM6ICdaYW1rbmlqIGJleiB6YXBpc3l3YW5pYScsXHJcblx0XHR5ZWFyU3RhdHVzOiAnUG9rYcW8IGlubnkgcm9rJywgbW9udGhTdGF0dXM6ICdQb2thxbwgaW5ueSBtaWVzacSFYycsXHJcblx0XHR3ZWVrVGV4dDogJ1R5ZHonLCB3ZWVrU3RhdHVzOiAnVHlkemllxYQgcm9rdScsXHJcblx0XHRkYXlTdGF0dXM6ICdcXCdXeWJpZXJ6XFwnIERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnV3liaWVyeiBkYXTEmScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sncGwnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-pt-BR.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-pt-BR.js index be50d180875..9a62121b526 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-pt-BR.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-pt-BR.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['pt-BR']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXB0LUJSLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXB0LUJSLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQnJhemlsaWFuIFBvcnR1Z3Vlc2UgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBMZW9uaWxkbyBDb3N0YSBTaWx2YSAobGVvY3NpbHZhQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3B0LUJSJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyZsdDtBbnRlcmlvcicsIHByZXZTdGF0dXM6ICdNb3N0cmEgbyBtw6pzIGFudGVyaW9yJywgXG5cdFx0cHJldkp1bXBUZXh0OiAnJmx0OyZsdDsnLCBwcmV2SnVtcFN0YXR1czogJ01vc3RyYSBvIGFubyBhbnRlcmlvcicsIFxuXHRcdG5leHRUZXh0OiAnUHLDs3hpbW8mZ3Q7JywgbmV4dFN0YXR1czogJ01vc3RyYSBvIHByw7N4aW1vIG3DqnMnLCBcblx0XHRuZXh0SnVtcFRleHQ6ICcmZ3Q7Jmd0OycsIG5leHRKdW1wU3RhdHVzOiAnTW9zdHJhIG8gcHLDs3hpbW8gYW5vJyxcblx0XHRjdXJyZW50VGV4dDogJ0F0dWFsJywgY3VycmVudFN0YXR1czogJ01vc3RyYSBvIG3DqnMgYXR1YWwnLFxuXHRcdHRvZGF5VGV4dDogJ0hvamUnLCB0b2RheVN0YXR1czogJ1ZhaSBwYXJhIGhvamUnLCBcblx0XHRjbGVhclRleHQ6ICdMaW1wYXInLCBjbGVhclN0YXR1czogJ0xpbXBhciBkYXRhJyxcblx0XHRjbG9zZVRleHQ6ICdGZWNoYXInLCBjbG9zZVN0YXR1czogJ0ZlY2hhciBvIGNhbGVuZMOhcmlvJyxcblx0XHR5ZWFyU3RhdHVzOiAnU2VsZWNpb25hciBhbm8nLCBtb250aFN0YXR1czogJ1NlbGVjaW9uYXIgbcOqcycsXG5cdFx0d2Vla1RleHQ6ICdzJywgd2Vla1N0YXR1czogJ1NlbWFuYSBkbyBhbm8nLCBcblx0XHRkYXlTdGF0dXM6ICdERCwgZCBcXCdkZVxcJyBNIFxcJ2RlXFwnIHl5eXknLCBkZWZhdWx0U3RhdHVzOiAnU2VsZWNpb25lIHVtIGRpYScsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sncHQtQlInXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXB0LUJSLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXB0LUJSLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBCcmF6aWxpYW4gUG9ydHVndWVzZSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTGVvbmlsZG8gQ29zdGEgU2lsdmEgKGxlb2NzaWx2YUBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sncHQtQlInXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyZsdDtBbnRlcmlvcicsIHByZXZTdGF0dXM6ICdNb3N0cmEgbyBtw6pzIGFudGVyaW9yJywgXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmbHQ7Jmx0OycsIHByZXZKdW1wU3RhdHVzOiAnTW9zdHJhIG8gYW5vIGFudGVyaW9yJywgXHJcblx0XHRuZXh0VGV4dDogJ1Byw7N4aW1vJmd0OycsIG5leHRTdGF0dXM6ICdNb3N0cmEgbyBwcsOzeGltbyBtw6pzJywgXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmZ3Q7Jmd0OycsIG5leHRKdW1wU3RhdHVzOiAnTW9zdHJhIG8gcHLDs3hpbW8gYW5vJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnQXR1YWwnLCBjdXJyZW50U3RhdHVzOiAnTW9zdHJhIG8gbcOqcyBhdHVhbCcsXHJcblx0XHR0b2RheVRleHQ6ICdIb2plJywgdG9kYXlTdGF0dXM6ICdWYWkgcGFyYSBob2plJywgXHJcblx0XHRjbGVhclRleHQ6ICdMaW1wYXInLCBjbGVhclN0YXR1czogJ0xpbXBhciBkYXRhJyxcclxuXHRcdGNsb3NlVGV4dDogJ0ZlY2hhcicsIGNsb3NlU3RhdHVzOiAnRmVjaGFyIG8gY2FsZW5kw6FyaW8nLFxyXG5cdFx0eWVhclN0YXR1czogJ1NlbGVjaW9uYXIgYW5vJywgbW9udGhTdGF0dXM6ICdTZWxlY2lvbmFyIG3DqnMnLFxyXG5cdFx0d2Vla1RleHQ6ICdzJywgd2Vla1N0YXR1czogJ1NlbWFuYSBkbyBhbm8nLCBcclxuXHRcdGRheVN0YXR1czogJ0RELCBkIFxcJ2RlXFwnIE0gXFwnZGVcXCcgeXl5eScsIGRlZmF1bHRTdGF0dXM6ICdTZWxlY2lvbmUgdW0gZGlhJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydwdC1CUiddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-rm.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-rm.js index c41b91adf20..abb24c7e5f2 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-rm.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-rm.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['rm']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXJtLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXJtLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgUm9tYW5zaCBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBZdm9ubmUgR2llbmFsICh5dm9ubmUuZ2llbmFsQGVkdWNhLmNoKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sncm0nXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7U3VhbmRhbnQnLCBwcmV2U3RhdHVzOiAnJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICdQcmVjZWRlbnQmI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICdBY3R1YWwnLCBjdXJyZW50U3RhdHVzOiAnJyxcblx0XHR0b2RheVRleHQ6ICdBY3R1YWwnLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAnWCcsIGNsZWFyU3RhdHVzOiAnJyxcblx0XHRjbG9zZVRleHQ6ICdTZXJyYXInLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcblx0XHR3ZWVrVGV4dDogJ2VtbmEnLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICdERCBkIE1NJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sncm0nXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXJtLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXJtLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBSb21hbnNoIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgWXZvbm5lIEdpZW5hbCAoeXZvbm5lLmdpZW5hbEBlZHVjYS5jaCkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydybSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7U3VhbmRhbnQnLCBwcmV2U3RhdHVzOiAnJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnUHJlY2VkZW50JiN4M2U7JywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ0FjdHVhbCcsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAnQWN0dWFsJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnWCcsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ1NlcnJhcicsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ2VtbmEnLCB3ZWVrU3RhdHVzOiAnJyxcclxuXHRcdGRheVN0YXR1czogJ0REIGQgTU0nLCBkZWZhdWx0U3RhdHVzOiAnJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydybSddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ro.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ro.js index e61c827c92f..43b183ca30c 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ro.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ro.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['ro']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXJvLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXJvLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgUm9tYW5pYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBFZG1vbmQgTC4gKGxsX2VkbW9uZEB3YWxsYS5jb20pIGFuZCBJb251dCBHLiBTdGFuIChpb251dC5nLnN0YW5AZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sncm8nXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJmxhcXVvO1ByZWNlZGVudGEnLCBwcmV2U3RhdHVzOiAnQXJhdGEgbHVuYSBwcmVjZWRlbnRhJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmbGFxdW87JmxhcXVvOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ1VybWF0b2FyZSZyYXF1bzsnLCBuZXh0U3RhdHVzOiAnQXJhdGEgbHVuYSB1cm1hdG9hcmUnLFxuXHRcdG5leHRKdW1wVGV4dDogJyZyYXF1bzsmcmFxdW87JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnQXppJywgY3VycmVudFN0YXR1czogJ0FyYXRhIGx1bmEgY3VyZW50YScsXG5cdFx0dG9kYXlUZXh0OiAnQXppJywgdG9kYXlTdGF0dXM6ICdBcmF0YSBsdW5hIGN1cmVudGEnLFxuXHRcdGNsZWFyVGV4dDogJ0N1cmF0JywgY2xlYXJTdGF0dXM6ICdTdGVyZ2UgZGF0YSBjdXJlbnRhJyxcblx0XHRjbG9zZVRleHQ6ICfDjm5jaGlkZScsIGNsb3NlU3RhdHVzOiAnw45uY2hpZGUgZmFyYSBzY2hpbWJhcmUnLFxuXHRcdHllYXJTdGF0dXM6ICdBcmF0IHVuIGFuIGRpZmVyaXQnLCBtb250aFN0YXR1czogJ0FyYXRhIG8gbHVuYSBkaWZlcml0YScsXG5cdFx0d2Vla1RleHQ6ICdTxINwdCcsIHdlZWtTdGF0dXM6ICdTxINwdGFtYW5hIGFudWx1aScsXG5cdFx0ZGF5U3RhdHVzOiAnU2VsZWN0ZWF6YSBERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ1NlbGVjdGVhemEgbyBkYXRhJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydybyddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXJvLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXJvLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBSb21hbmlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgRWRtb25kIEwuIChsbF9lZG1vbmRAd2FsbGEuY29tKSBhbmQgSW9udXQgRy4gU3RhbiAoaW9udXQuZy5zdGFuQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydybyddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJmxhcXVvO1ByZWNlZGVudGEnLCBwcmV2U3RhdHVzOiAnQXJhdGEgbHVuYSBwcmVjZWRlbnRhJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyZsYXF1bzsmbGFxdW87JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICdVcm1hdG9hcmUmcmFxdW87JywgbmV4dFN0YXR1czogJ0FyYXRhIGx1bmEgdXJtYXRvYXJlJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyZyYXF1bzsmcmFxdW87JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdBemknLCBjdXJyZW50U3RhdHVzOiAnQXJhdGEgbHVuYSBjdXJlbnRhJyxcclxuXHRcdHRvZGF5VGV4dDogJ0F6aScsIHRvZGF5U3RhdHVzOiAnQXJhdGEgbHVuYSBjdXJlbnRhJyxcclxuXHRcdGNsZWFyVGV4dDogJ0N1cmF0JywgY2xlYXJTdGF0dXM6ICdTdGVyZ2UgZGF0YSBjdXJlbnRhJyxcclxuXHRcdGNsb3NlVGV4dDogJ8OObmNoaWRlJywgY2xvc2VTdGF0dXM6ICfDjm5jaGlkZSBmYXJhIHNjaGltYmFyZScsXHJcblx0XHR5ZWFyU3RhdHVzOiAnQXJhdCB1biBhbiBkaWZlcml0JywgbW9udGhTdGF0dXM6ICdBcmF0YSBvIGx1bmEgZGlmZXJpdGEnLFxyXG5cdFx0d2Vla1RleHQ6ICdTxINwdCcsIHdlZWtTdGF0dXM6ICdTxINwdGFtYW5hIGFudWx1aScsXHJcblx0XHRkYXlTdGF0dXM6ICdTZWxlY3RlYXphIERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnU2VsZWN0ZWF6YSBvIGRhdGEnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3JvJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ru.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ru.js index db72bb1e549..80f59ee4ab8 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ru.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ru.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['ru']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXJ1LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXJ1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgUnVzc2lhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEFuZHJldyBTdHJvbW5vdiAoc3Ryb21ub3ZAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sncnUnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M70J/RgNC10LQnLCAgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAn0KHQu9C10LQmI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICfQodC10LPQvtC00L3RjycsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ9Ch0LXQs9C+0LTQvdGPJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ9Ce0YfQuNGB0YLQuNGC0YwnLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAn0JfQsNC60YDRi9GC0YwnLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcblx0XHR3ZWVrVGV4dDogJ9Cd0LUnLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sncnUnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXJ1LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXJ1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBSdXNzaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBBbmRyZXcgU3Ryb21ub3YgKHN0cm9tbm92QGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydydSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M70J/RgNC10LQnLCAgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ9Ch0LvQtdC0JiN4M2U7JywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ9Ch0LXQs9C+0LTQvdGPJywgY3VycmVudFN0YXR1czogJycsXHJcblx0XHR0b2RheVRleHQ6ICfQodC10LPQvtC00L3RjycsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ9Ce0YfQuNGB0YLQuNGC0YwnLCBjbGVhclN0YXR1czogJycsXHJcblx0XHRjbG9zZVRleHQ6ICfQl9Cw0LrRgNGL0YLRjCcsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ9Cd0LUnLCB3ZWVrU3RhdHVzOiAnJyxcclxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydydSddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sk.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sk.js index 41c6d40a2f9..60c9a0bb903 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sk.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sk.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['sk']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNrLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU2xvdmFrIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgVm9qdGVjaCBSaW5payAodm9qdG9AaG1tLnNrKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snc2snXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7UHJlZGNow6FkemFqw7pjaScsICBwcmV2U3RhdHVzOiAnJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICdOYXNsZWR1asO6Y2kmI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICdEbmVzJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnRG5lcycsIHRvZGF5U3RhdHVzOiAnJyxcblx0XHRjbGVhclRleHQ6ICdabWF6YcWlJywgY2xlYXJTdGF0dXM6ICcnLFxuXHRcdGNsb3NlVGV4dDogJ1phdnJpZcWlJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdUeScsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ0RELiBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzayddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNrLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTbG92YWsgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IFZvanRlY2ggUmluaWsgKHZvanRvQGhtbS5zaykuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzayddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7UHJlZGNow6FkemFqw7pjaScsICBwcmV2U3RhdHVzOiAnJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnTmFzbGVkdWrDumNpJiN4M2U7JywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ0RuZXMnLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ0RuZXMnLCB0b2RheVN0YXR1czogJycsXHJcblx0XHRjbGVhclRleHQ6ICdabWF6YcWlJywgY2xlYXJTdGF0dXM6ICcnLFxyXG5cdFx0Y2xvc2VUZXh0OiAnWmF2cmllxaUnLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxyXG5cdFx0d2Vla1RleHQ6ICdUeScsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnREQuIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3NrJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sl.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sl.js index c441b651443..507aa789e0d 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sl.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sl.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['sl']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU2xvdmVuaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgSmFrYSBKYW5jYXIgKGpha2FAa3ViamUub3JnKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snc2wnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJmx0O1ByZWomI3gxNjE7bmppJywgcHJldlN0YXR1czogJ1ByaWthJiN4MTdFO2kgcHJlaiYjeDE2MTtuamkgbWVzZWMnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ05hc2xlZG5qaSZndDsnLCBuZXh0U3RhdHVzOiAnUHJpa2EmI3gxN0U7aSBuYXNsZWRuamkgbWVzZWMnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ1RyZW51dG5pJywgY3VycmVudFN0YXR1czogJ1ByaWthJiN4MTdFO2kgdHJlbnV0bmkgbWVzZWMnLFxuXHRcdHRvZGF5VGV4dDogJ1RyZW51dG5pJywgdG9kYXlTdGF0dXM6ICdQcmlrYSYjeDE3RTtpIHRyZW51dG5pIG1lc2VjJyxcblx0XHRjbGVhclRleHQ6ICdJemJyaSYjeDE2MTtpJywgY2xlYXJTdGF0dXM6ICdJemJyaSYjeDE2MTtpIHRyZW51dG5pIGRhdHVtJyxcblx0XHRjbG9zZVRleHQ6ICdaYXByaScsIGNsb3NlU3RhdHVzOiAnWmFwcmkgYnJleiBzcHJlbWluamFuamEnLFxuXHRcdHllYXJTdGF0dXM6ICdQcmlrYSYjeDE3RTtpIGRydWdvIGxldG8nLCBtb250aFN0YXR1czogJ1ByaWthJiN4MTdFO2kgZHJ1ZyBtZXNlYycsXG5cdFx0d2Vla1RleHQ6ICdUZWRlbicsIHdlZWtTdGF0dXM6ICdUZWRlbiB2IGxldHUnLFxuXHRcdGRheVN0YXR1czogJ0l6YmVyaSBERCwgZCBNTSB5eScsIGRlZmF1bHRTdGF0dXM6ICdJemJpcmEgZGF0dW1hJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzbCddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTbG92ZW5pYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEpha2EgSmFuY2FyIChqYWthQGt1YmplLm9yZykuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzbCddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJmx0O1ByZWomI3gxNjE7bmppJywgcHJldlN0YXR1czogJ1ByaWthJiN4MTdFO2kgcHJlaiYjeDE2MTtuamkgbWVzZWMnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICdOYXNsZWRuamkmZ3Q7JywgbmV4dFN0YXR1czogJ1ByaWthJiN4MTdFO2kgbmFzbGVkbmppIG1lc2VjJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnVHJlbnV0bmknLCBjdXJyZW50U3RhdHVzOiAnUHJpa2EmI3gxN0U7aSB0cmVudXRuaSBtZXNlYycsXHJcblx0XHR0b2RheVRleHQ6ICdUcmVudXRuaScsIHRvZGF5U3RhdHVzOiAnUHJpa2EmI3gxN0U7aSB0cmVudXRuaSBtZXNlYycsXHJcblx0XHRjbGVhclRleHQ6ICdJemJyaSYjeDE2MTtpJywgY2xlYXJTdGF0dXM6ICdJemJyaSYjeDE2MTtpIHRyZW51dG5pIGRhdHVtJyxcclxuXHRcdGNsb3NlVGV4dDogJ1phcHJpJywgY2xvc2VTdGF0dXM6ICdaYXByaSBicmV6IHNwcmVtaW5qYW5qYScsXHJcblx0XHR5ZWFyU3RhdHVzOiAnUHJpa2EmI3gxN0U7aSBkcnVnbyBsZXRvJywgbW9udGhTdGF0dXM6ICdQcmlrYSYjeDE3RTtpIGRydWcgbWVzZWMnLFxyXG5cdFx0d2Vla1RleHQ6ICdUZWRlbicsIHdlZWtTdGF0dXM6ICdUZWRlbiB2IGxldHUnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnSXpiZXJpIERELCBkIE1NIHl5JywgZGVmYXVsdFN0YXR1czogJ0l6YmlyYSBkYXR1bWEnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3NsJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sq.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sq.js index 8cc68fc9c34..b09730c5781 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sq.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sq.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['sq']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNxLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQWxiYW5pYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBGbGFrcm9uIEJ5dHlxaSAoZmxha3JvbkBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzcSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYzttYnJhcGEnLCBwcmV2U3RhdHVzOiAndHJlZ28gbXVhamluIGUgZnVuZGl0Jyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICdQw6tycGFyYSYjeDNlOycsIG5leHRTdGF0dXM6ICd0cmVnbyBtdWFqaW4gdGpldMOrcicsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnc290JywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnc290JywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ2ZzaGlqZScsIGNsZWFyU3RhdHVzOiAnZnNoaWplIGRhdMOrbiBha3R1YWxlJyxcblx0XHRjbG9zZVRleHQ6ICdtYnlsbGUnLCBjbG9zZVN0YXR1czogJ21ieWxsZSBwYSBuZHJ5c2hpbWUnLFxuXHRcdHllYXJTdGF0dXM6ICd0cmVnbyB0amV0w6tyIHZpdCcsIG1vbnRoU3RhdHVzOiAndHJlZ28gbXVhamluIHRqZXTDq3InLFxuXHRcdHdlZWtUZXh0OiAnSmEnLCB3ZWVrU3RhdHVzOiAnSmF2YSBlIG11YWppdCcsXG5cdFx0ZGF5U3RhdHVzOiAnXFwnWmdqZWRoXFwnIEQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdaZ2plZGhlIG5qw6sgZGF0w6snLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3NxJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNxLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBBbGJhbmlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgRmxha3JvbiBCeXR5cWkgKGZsYWtyb25AZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3NxJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYzttYnJhcGEnLCBwcmV2U3RhdHVzOiAndHJlZ28gbXVhamluIGUgZnVuZGl0JyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnUMOrcnBhcmEmI3gzZTsnLCBuZXh0U3RhdHVzOiAndHJlZ28gbXVhamluIHRqZXTDq3InLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdzb3QnLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ3NvdCcsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ2ZzaGlqZScsIGNsZWFyU3RhdHVzOiAnZnNoaWplIGRhdMOrbiBha3R1YWxlJyxcclxuXHRcdGNsb3NlVGV4dDogJ21ieWxsZScsIGNsb3NlU3RhdHVzOiAnbWJ5bGxlIHBhIG5kcnlzaGltZScsXHJcblx0XHR5ZWFyU3RhdHVzOiAndHJlZ28gdGpldMOrciB2aXQnLCBtb250aFN0YXR1czogJ3RyZWdvIG11YWppbiB0amV0w6tyJyxcclxuXHRcdHdlZWtUZXh0OiAnSmEnLCB3ZWVrU3RhdHVzOiAnSmF2YSBlIG11YWppdCcsXHJcblx0XHRkYXlTdGF0dXM6ICdcXCdaZ2plZGhcXCcgRCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ1pnamVkaGUgbmrDqyBkYXTDqycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snc3EnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sr-SR.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sr-SR.js index 302eb10937c..26afc602dde 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sr-SR.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sr-SR.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['sr-SR']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNyLVNSLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNyLVNSLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU2VyYmlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IERlamFuIERpbWnEhy4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snc3ItU1InXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7JywgcHJldlN0YXR1czogJ1ByaWthxb5pIHByZWRob2RuaSBtZXNlYycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICdQcmlrYcW+aSBwcmVkaG9kbnUgZ29kaW51Jyxcblx0XHRuZXh0VGV4dDogJyYjeDNlOycsIG5leHRTdGF0dXM6ICdQcmlrYcW+aSBzbGVkZcSHaSBtZXNlYycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICdQcmlrYcW+aSBzbGVkZcSHdSBnb2RpbnUnLFxuXHRcdGN1cnJlbnRUZXh0OiAnRGFuYXMnLCBjdXJyZW50U3RhdHVzOiAnVGVrdcSHaSBtZXNlYycsXG5cdFx0dG9kYXlUZXh0OiAnRGFuYXMnLCB0b2RheVN0YXR1czogJ1Rla3XEh2kgbWVzZWMnLFxuXHRcdGNsZWFyVGV4dDogJ09icmnFoWknLCBjbGVhclN0YXR1czogJ09icmnFoWkgdHJlbnV0bmkgZGF0dW0nLFxuXHRcdGNsb3NlVGV4dDogJ1phdHZvcmknLCBjbG9zZVN0YXR1czogJ1phdHZvcmkga2FsZW5kYXInLFxuXHRcdHllYXJTdGF0dXM6ICdQcmlrYcW+aSBnb2RpbmUnLCBtb250aFN0YXR1czogJ1ByaWthxb5pIG1lc2VjZScsXG5cdFx0d2Vla1RleHQ6ICdTZWQnLCB3ZWVrU3RhdHVzOiAnU2VkbWljYScsXG5cdFx0ZGF5U3RhdHVzOiAnXFwnRGF0dW1cXCcgREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdPZGFiZXJpIGRhdHVtJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzci1TUiddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNyLVNSLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNyLVNSLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTZXJiaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBEZWphbiBEaW1pxIcuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzci1TUiddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7JywgcHJldlN0YXR1czogJ1ByaWthxb5pIHByZWRob2RuaSBtZXNlYycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ1ByaWthxb5pIHByZWRob2RudSBnb2RpbnUnLFxyXG5cdFx0bmV4dFRleHQ6ICcmI3gzZTsnLCBuZXh0U3RhdHVzOiAnUHJpa2HFvmkgc2xlZGXEh2kgbWVzZWMnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICdQcmlrYcW+aSBzbGVkZcSHdSBnb2RpbnUnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdEYW5hcycsIGN1cnJlbnRTdGF0dXM6ICdUZWt1xIdpIG1lc2VjJyxcclxuXHRcdHRvZGF5VGV4dDogJ0RhbmFzJywgdG9kYXlTdGF0dXM6ICdUZWt1xIdpIG1lc2VjJyxcclxuXHRcdGNsZWFyVGV4dDogJ09icmnFoWknLCBjbGVhclN0YXR1czogJ09icmnFoWkgdHJlbnV0bmkgZGF0dW0nLFxyXG5cdFx0Y2xvc2VUZXh0OiAnWmF0dm9yaScsIGNsb3NlU3RhdHVzOiAnWmF0dm9yaSBrYWxlbmRhcicsXHJcblx0XHR5ZWFyU3RhdHVzOiAnUHJpa2HFvmkgZ29kaW5lJywgbW9udGhTdGF0dXM6ICdQcmlrYcW+aSBtZXNlY2UnLFxyXG5cdFx0d2Vla1RleHQ6ICdTZWQnLCB3ZWVrU3RhdHVzOiAnU2VkbWljYScsXHJcblx0XHRkYXlTdGF0dXM6ICdcXCdEYXR1bVxcJyBERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ09kYWJlcmkgZGF0dW0nLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3NyLVNSJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sr.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sr.js index 12a76961bf6..1799f2764dc 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sr.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sr.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['sr']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU2VyYmlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IERlamFuIERpbWnEhy4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snc3InXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7JywgcHJldlN0YXR1czogJ9Cf0YDQuNC60LDQttC4INC/0YDQtdC00YXQvtC00L3QuCDQvNC10YHQtdGGJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ9Cf0YDQuNC60LDQttC4INC/0YDQtdC00YXQvtC00L3RgyDQs9C+0LTQuNC90YMnLFxuXHRcdG5leHRUZXh0OiAnJiN4M2U7JywgbmV4dFN0YXR1czogJ9Cf0YDQuNC60LDQttC4INGB0LvQtdGG0LXRm9C4INC80LXRgdC10YYnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0YHQu9C10LTQtdGb0YMg0LPQvtC00LjQvdGDJyxcblx0XHRjdXJyZW50VGV4dDogJ9CU0LDQvdCw0YEnLCBjdXJyZW50U3RhdHVzOiAn0KLQtdC60YPRm9C4INC80LXRgdC10YYnLFxuXHRcdHRvZGF5VGV4dDogJ9CU0LDQvdCw0YEnLCB0b2RheVN0YXR1czogJ9Ci0LXQutGD0ZvQuCDQvNC10YHQtdGGJyxcblx0XHRjbGVhclRleHQ6ICfQntCx0YDQuNGI0LgnLCBjbGVhclN0YXR1czogJ9Ce0LHRgNC40YjQuCDRgtGA0LXQvdGD0YLQvdC4INC00LDRgtGD0LwnLFxuXHRcdGNsb3NlVGV4dDogJ9CX0LDRgtCy0L7RgNC4JywgY2xvc2VTdGF0dXM6ICfQl9Cw0YLQstC+0YDQuCDQutCw0LvQtdC90LTQsNGAJyxcblx0XHR5ZWFyU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0LPQvtC00LjQvdC1JywgbW9udGhTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDQvNC10YHQtdGG0LUnLFxuXHRcdHdlZWtUZXh0OiAn0KHQtdC0Jywgd2Vla1N0YXR1czogJ9Ch0LXQtNC80LjRhtCwJyxcblx0XHRkYXlTdGF0dXM6ICdcXCfQlNCw0YLRg9C8XFwnIEREIGQgTU0nLCBkZWZhdWx0U3RhdHVzOiAn0J7QtNCw0LHQtdGA0Lgg0LTQsNGC0YPQvCcsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snc3InXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXNyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTZXJiaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBEZWphbiBEaW1pxIcuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzciddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7JywgcHJldlN0YXR1czogJ9Cf0YDQuNC60LDQttC4INC/0YDQtdC00YXQvtC00L3QuCDQvNC10YHQtdGGJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0L/RgNC10LTRhdC+0LTQvdGDINCz0L7QtNC40L3RgycsXHJcblx0XHRuZXh0VGV4dDogJyYjeDNlOycsIG5leHRTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDRgdC70LXRhtC10ZvQuCDQvNC10YHQtdGGJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0YHQu9C10LTQtdGb0YMg0LPQvtC00LjQvdGDJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn0JTQsNC90LDRgScsIGN1cnJlbnRTdGF0dXM6ICfQotC10LrRg9Gb0Lgg0LzQtdGB0LXRhicsXHJcblx0XHR0b2RheVRleHQ6ICfQlNCw0L3QsNGBJywgdG9kYXlTdGF0dXM6ICfQotC10LrRg9Gb0Lgg0LzQtdGB0LXRhicsXHJcblx0XHRjbGVhclRleHQ6ICfQntCx0YDQuNGI0LgnLCBjbGVhclN0YXR1czogJ9Ce0LHRgNC40YjQuCDRgtGA0LXQvdGD0YLQvdC4INC00LDRgtGD0LwnLFxyXG5cdFx0Y2xvc2VUZXh0OiAn0JfQsNGC0LLQvtGA0LgnLCBjbG9zZVN0YXR1czogJ9CX0LDRgtCy0L7RgNC4INC60LDQu9C10L3QtNCw0YAnLFxyXG5cdFx0eWVhclN0YXR1czogJ9Cf0YDQuNC60LDQttC4INCz0L7QtNC40L3QtScsIG1vbnRoU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0LzQtdGB0LXRhtC1JyxcclxuXHRcdHdlZWtUZXh0OiAn0KHQtdC0Jywgd2Vla1N0YXR1czogJ9Ch0LXQtNC80LjRhtCwJyxcclxuXHRcdGRheVN0YXR1czogJ1xcJ9CU0LDRgtGD0LxcXCcgREQgZCBNTScsIGRlZmF1bHRTdGF0dXM6ICfQntC00LDQsdC10YDQuCDQtNCw0YLRg9C8JyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzciddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sv.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sv.js index d6ef3d1d704..9b6ae9eee59 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sv.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sv.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['sv']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXN2LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXN2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU3dlZGlzaCBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEFuZGVycyBFa2RhaGwgKCBhbmRlcnNAbm9tYWRpei5zZSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3N2J10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcbiAgICAgICAgcHJldlRleHQ6ICcmbGFxdW87RsO2cnJhJywgIHByZXZTdGF0dXM6ICcnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ07DpHN0YSZyYXF1bzsnLCBuZXh0U3RhdHVzOiAnJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICdJZGFnJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnSWRhZycsIHRvZGF5U3RhdHVzOiAnJyxcblx0XHRjbGVhclRleHQ6ICdSZW5zYScsIGNsZWFyU3RhdHVzOiAnJyxcblx0XHRjbG9zZVRleHQ6ICdTdMOkbmcnLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcblx0XHR3ZWVrVGV4dDogJ1ZlJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3N2J10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXN2LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXN2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTd2VkaXNoIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBBbmRlcnMgRWtkYWhsICggYW5kZXJzQG5vbWFkaXouc2UpLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snc3YnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcbiAgICAgICAgcHJldlRleHQ6ICcmbGFxdW87RsO2cnJhJywgIHByZXZTdGF0dXM6ICcnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICdOw6RzdGEmcmFxdW87JywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ0lkYWcnLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ0lkYWcnLCB0b2RheVN0YXR1czogJycsXHJcblx0XHRjbGVhclRleHQ6ICdSZW5zYScsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ1N0w6RuZycsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ1ZlJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snc3YnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ta.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ta.js index 3af7f035790..d7e970fa628 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ta.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ta.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['ta']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXRhLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXRhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgVGFtaWwgKFVURi04KSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IFMgQSBTdXJlc2hrdW1hciAoc2Fza3VtYXJAbGl2ZS5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd0YSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICfgrq7gr4Hgrqngr43grqngr4jgrq/grqTgr4EnLCAgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAn4K6F4K6f4K+B4K6k4K+N4K6k4K6k4K+BJywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAn4K6H4K6p4K+N4K6x4K+BJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAn4K6H4K6p4K+N4K6x4K+BJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ+CuheCutOCuvycsIGNsZWFyU3RhdHVzOiAnJyxcblx0XHRjbG9zZVRleHQ6ICfgrq7gr4Lgrp/gr4EnLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnRCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndGEnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXRhLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXRhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBUYW1pbCAoVVRGLTgpIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBTIEEgU3VyZXNoa3VtYXIgKHNhc2t1bWFyQGxpdmUuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3RhJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICfgrq7gr4Hgrqngr43grqngr4jgrq/grqTgr4EnLCAgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ+CuheCun+CvgeCupOCvjeCupOCupOCvgScsIG5leHRTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfgrofgrqngr43grrHgr4EnLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ+Cuh+CuqeCvjeCuseCvgScsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ+CuheCutOCuvycsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ+CuruCvguCun+CvgScsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd0YSddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-th.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-th.js index af6e6e71479..9a964ffc42f 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-th.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-th.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['th']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXRoLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgVGhhaSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IHBpcG8gKHBpcG9Ac2l4aGVhZC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd0aCddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmbGFxdW87Jm5ic3A74Lii4LmJ4Lit4LiZJywgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAn4LiW4Lix4LiU4LmE4LibJm5ic3A7JnJhcXVvOycsIG5leHRTdGF0dXM6ICcnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ+C4p+C4seC4meC4meC4teC5iScsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ+C4p+C4seC4meC4meC4teC5iScsIHRvZGF5U3RhdHVzOiAnJyxcblx0XHRjbGVhclRleHQ6ICfguKXguJonLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAn4Lib4Li04LiUJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd0aCddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXRoLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBUaGFpIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBwaXBvIChwaXBvQHNpeGhlYWQuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3RoJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmbGFxdW87Jm5ic3A74Lii4LmJ4Lit4LiZJywgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ+C4luC4seC4lOC5hOC4myZuYnNwOyZyYXF1bzsnLCBuZXh0U3RhdHVzOiAnJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn4Lin4Lix4LiZ4LiZ4Li14LmJJywgY3VycmVudFN0YXR1czogJycsXHJcblx0XHR0b2RheVRleHQ6ICfguKfguLHguJnguJnguLXguYknLCB0b2RheVN0YXR1czogJycsXHJcblx0XHRjbGVhclRleHQ6ICfguKXguJonLCBjbGVhclN0YXR1czogJycsXHJcblx0XHRjbG9zZVRleHQ6ICfguJvguLTguJQnLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxyXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3RoJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-tr.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-tr.js index df166c50b66..0fadea503b8 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-tr.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-tr.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['tr']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXRyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXRyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgVHVya2lzaCBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEl6emV0IEVtcmUgRXJrYW4gKGthcmFAa2FyYWxhbWFsYXIubmV0KS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndHInXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7Z2VyaScsIHByZXZTdGF0dXM6ICfDtm5jZWtpIGF5xLEgZ8O2c3RlcicsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnaWxlcmkmI3gzZScsIG5leHRTdGF0dXM6ICdzb25yYWtpIGF5xLEgZ8O2c3RlcicsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnYnVnw7xuJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnYnVnw7xuJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ3RlbWl6bGUnLCBjbGVhclN0YXR1czogJ2dlw6dlcmxpIHRhcmloaSB0ZW1pemxlcicsXG5cdFx0Y2xvc2VUZXh0OiAna2FwYXQnLCBjbG9zZVN0YXR1czogJ3NhZGVjZSBnw7ZzdGVyZ2V5aSBrYXBhdCcsXG5cdFx0eWVhclN0YXR1czogJ2JhxZ9rYSB5xLFsJywgbW9udGhTdGF0dXM6ICdiYcWfa2EgYXknLFxuXHRcdHdlZWtUZXh0OiAnSGYnLCB3ZWVrU3RhdHVzOiAnQXnEsW4gaGFmdGFsYXLEsScsXG5cdFx0ZGF5U3RhdHVzOiAnRCwgTSBkIHNlw6dpbml6JywgZGVmYXVsdFN0YXR1czogJ0JpciB0YXJpaCBzZcOnaW5peicsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndHInXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXRyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXRyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBUdXJraXNoIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBJenpldCBFbXJlIEVya2FuIChrYXJhQGthcmFsYW1hbGFyLm5ldCkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd0ciddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7Z2VyaScsIHByZXZTdGF0dXM6ICfDtm5jZWtpIGF5xLEgZ8O2c3RlcicsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ2lsZXJpJiN4M2UnLCBuZXh0U3RhdHVzOiAnc29ucmFraSBhecSxIGfDtnN0ZXInLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdidWfDvG4nLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ2J1Z8O8bicsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ3RlbWl6bGUnLCBjbGVhclN0YXR1czogJ2dlw6dlcmxpIHRhcmloaSB0ZW1pemxlcicsXHJcblx0XHRjbG9zZVRleHQ6ICdrYXBhdCcsIGNsb3NlU3RhdHVzOiAnc2FkZWNlIGfDtnN0ZXJnZXlpIGthcGF0JyxcclxuXHRcdHllYXJTdGF0dXM6ICdiYcWfa2EgecSxbCcsIG1vbnRoU3RhdHVzOiAnYmHFn2thIGF5JyxcclxuXHRcdHdlZWtUZXh0OiAnSGYnLCB3ZWVrU3RhdHVzOiAnQXnEsW4gaGFmdGFsYXLEsScsXHJcblx0XHRkYXlTdGF0dXM6ICdELCBNIGQgc2XDp2luaXonLCBkZWZhdWx0U3RhdHVzOiAnQmlyIHRhcmloIHNlw6dpbml6JyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd0ciddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-tt.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-tt.js index 1132e2ba1e1..6befef7646d 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-tt.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-tt.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['tt']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXR0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXR0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgVGF0YXIgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBJcmVrIEtoYXppZXYgKGtoYXppcmVrQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3R0J10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJ9CQ0LvQtNCw0LPRiycsICBwcmV2U3RhdHVzOiAn0JDQu9C00LDQs9GLINCw0LnQvdGLINC60q/RgNGB05nRgtKvJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmbHQ7Jmx0OycsIHByZXZKdW1wU3RhdHVzOiAn0JDQu9C00LDQs9GLINC10LvQvdGLINC60q/RgNGB05nRgtKvJyxcblx0XHRuZXh0VGV4dDogJ9Ca0LjQu9OZ0YHQtScsIG5leHRTdGF0dXM6ICfQmtC40LvTmdGB0LUg0LDQudC90Ysg0LrSr9GA0YHTmdGC0q8nLFxuXHRcdG5leHRKdW1wVGV4dDogJyZndDsmZ3Q7JywgbmV4dEp1bXBTdGF0dXM6ICfQmtC40LvTmdGB0LUg0LXQu9C90Ysg0LrSr9GA0YHTmdGC0q8nLFxuXHRcdGN1cnJlbnRUZXh0OiAn0KXTmdC30LXRgCcsIGN1cnJlbnRTdGF0dXM6ICfQpdOZ0LfQtdGA0LPQtSDQsNC50L3RiyDQutKv0YDRgdOZ0YLSrycsXG5cdFx0dG9kYXlUZXh0OiAn0JHSr9Cz0LXQvScsIHRvZGF5U3RhdHVzOiAn0JHSr9Cz0LXQvdCz0LUg0LDQudC90Ysg0LrSr9GA0YHTmdGC0q8nLFxuXHRcdGNsZWFyVGV4dDogJ9Cn0LjRgdGC0LDRgNGC0YMnLCBjbGVhclN0YXR1czogJ9CR0LDRgNC70YvQuiDQutOp0L3QvdOZ0YDQvdC1INGH0LjRgdGC0LDRgNGC0YMnLFxuXHRcdGNsb3NlVGV4dDogJ9Cv0LHQsNGA0LPQsCcsIGNsb3NlU3RhdHVzOiAn0JrTqdC9INGB0LDQudC70LDRg9C90Ysg0Y/QsdCw0YDQs9CwJyxcblx0XHR5ZWFyU3RhdHVzOiAn0JXQu9C90Ysg0LrQtdGA0YLQtdCz0LXQtycsIG1vbnRoU3RhdHVzOiAn0JDQudC90Ysg0LrQtdGA0YLQtdCz0LXQtycsXG5cdFx0d2Vla1RleHQ6ICfQkNGC0L3QsCcsIHdlZWtTdGF0dXM6ICfQldC70LTQsCDQsNGC0L3QsCDRgdCw0L3RiycsXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICfQmtOp0L3QvdC1INGB0LDQudC70LDQs9GL0LcnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3R0J10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXR0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXR0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBUYXRhciBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgSXJlayBLaGF6aWV2IChraGF6aXJla0BnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndHQnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJ9CQ0LvQtNCw0LPRiycsICBwcmV2U3RhdHVzOiAn0JDQu9C00LDQs9GLINCw0LnQvdGLINC60q/RgNGB05nRgtKvJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyZsdDsmbHQ7JywgcHJldkp1bXBTdGF0dXM6ICfQkNC70LTQsNCz0Ysg0LXQu9C90Ysg0LrSr9GA0YHTmdGC0q8nLFxyXG5cdFx0bmV4dFRleHQ6ICfQmtC40LvTmdGB0LUnLCBuZXh0U3RhdHVzOiAn0JrQuNC705nRgdC1INCw0LnQvdGLINC60q/RgNGB05nRgtKvJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyZndDsmZ3Q7JywgbmV4dEp1bXBTdGF0dXM6ICfQmtC40LvTmdGB0LUg0LXQu9C90Ysg0LrSr9GA0YHTmdGC0q8nLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfQpdOZ0LfQtdGAJywgY3VycmVudFN0YXR1czogJ9Cl05nQt9C10YDQs9C1INCw0LnQvdGLINC60q/RgNGB05nRgtKvJyxcclxuXHRcdHRvZGF5VGV4dDogJ9CR0q/Qs9C10L0nLCB0b2RheVN0YXR1czogJ9CR0q/Qs9C10L3Qs9C1INCw0LnQvdGLINC60q/RgNGB05nRgtKvJyxcclxuXHRcdGNsZWFyVGV4dDogJ9Cn0LjRgdGC0LDRgNGC0YMnLCBjbGVhclN0YXR1czogJ9CR0LDRgNC70YvQuiDQutOp0L3QvdOZ0YDQvdC1INGH0LjRgdGC0LDRgNGC0YMnLFxyXG5cdFx0Y2xvc2VUZXh0OiAn0K/QsdCw0YDQs9CwJywgY2xvc2VTdGF0dXM6ICfQmtOp0L0g0YHQsNC50LvQsNGD0L3RiyDRj9Cx0LDRgNCz0LAnLFxyXG5cdFx0eWVhclN0YXR1czogJ9CV0LvQvdGLINC60LXRgNGC0LXQs9C10LcnLCBtb250aFN0YXR1czogJ9CQ0LnQvdGLINC60LXRgNGC0LXQs9C10LcnLFxyXG5cdFx0d2Vla1RleHQ6ICfQkNGC0L3QsCcsIHdlZWtTdGF0dXM6ICfQldC70LTQsCDQsNGC0L3QsCDRgdCw0L3RiycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ9Ca06nQvdC90LUg0YHQsNC50LvQsNCz0YvQtycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndHQnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-uk.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-uk.js index be24ec9fb49..874c0e49b81 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-uk.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-uk.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['uk']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXVrLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXVrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgVWtyYWluaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTWF4aW0gRHJvZ29iaXRza2l5IChtYXhkYW9AZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndWsnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7JywgIHByZXZTdGF0dXM6ICcnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJyYjeDNlOycsIG5leHRTdGF0dXM6ICcnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ9Ch0YzQvtCz0L7QtNC90ZYnLCBjdXJyZW50U3RhdHVzOiAnJyxcblx0XHR0b2RheVRleHQ6ICfQodGM0L7Qs9C+0LTQvdGWJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ9Ce0YfQuNGB0YLQuNGC0LgnLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAn0JfQsNC60YDQuNGC0LgnLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcblx0XHR3ZWVrVGV4dDogJ9Cd0LUnLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndWsnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXVrLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXVrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBVa3JhaW5pYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IE1heGltIERyb2dvYml0c2tpeSAobWF4ZGFvQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd1ayddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7JywgIHByZXZTdGF0dXM6ICcnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICcmI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn0KHRjNC+0LPQvtC00L3RlicsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAn0KHRjNC+0LPQvtC00L3RlicsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ9Ce0YfQuNGB0YLQuNGC0LgnLCBjbGVhclN0YXR1czogJycsXHJcblx0XHRjbG9zZVRleHQ6ICfQl9Cw0LrRgNC40YLQuCcsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ9Cd0LUnLCB3ZWVrU3RhdHVzOiAnJyxcclxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd1ayddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ur.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ur.js index ee3eee9eed7..c2bf8477566 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ur.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ur.js @@ -26,4 +26,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['ur']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy5waWNrZXItdXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBVcmR1IGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIE1hbnNvb3IgTXVuaWIgLS0gbWFuc29vcm11bmliQGdtYWlsLmNvbSA8aHR0cDovL3d3dy5tYW5zb29yLmNvLm5yL21hbnNvb3IuaHRtbD5cbiAgIFRoYW5rcyB0byBIYWJpYiBBaG1lZCwgT2JhaWRVbGxhaCBBbndhci4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndXInXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M72q/YsNi02KrbgScsIHByZXZTdGF0dXM6ICfZhdin2Ycg2q/YsNi02KrbgScsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICfYqNix2LMg2q/YsNi02KrbgScsXG5cdFx0bmV4dFRleHQ6ICfYotim2YbYr9uBJiN4M2U7JywgbmV4dFN0YXR1czogJ9mF2KfZhyDYotim2YbYr9uBJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ9io2LHYsyDYotim2YbYr9uBJyxcblx0XHRjdXJyZW50VGV4dDogJ9ix2YjYp9q6JywgY3VycmVudFN0YXR1czogJ9mF2KfZhyDYsdmI2KfauicsXG5cdFx0dG9kYXlUZXh0OiAn2KLYrCcsIHRvZGF5U3RhdHVzOiAn2KLYrCcsXG5cdFx0Y2xlYXJUZXh0OiAn2K3YsNmBINiq2KfYsdmK2K4nLCBjbGVhclN0YXR1czogJ9qp2LHbjNq6INit2LDZgSDYqtin2LHbjNiuJyxcblx0XHRjbG9zZVRleHQ6ICfaqdix24zauiDYqNmG2K8nLCBjbG9zZVN0YXR1czogJ9qp24zZhNim25Ig2qnYsdmG25Ig2KjZhtivJyxcblx0XHR5ZWFyU3RhdHVzOiAn2KjYsdizINiq2KjYr9uM2YTbjCcsIG1vbnRoU3RhdHVzOiAn2YXYp9mHINiq2KjYr9uM2YTbjCcsXG5cdFx0d2Vla1RleHQ6ICfbgdmB2KrbgScsIHdlZWtTdGF0dXM6ICfbgdmB2KrbgScsXG5cdFx0ZGF5U3RhdHVzOiAn2KfZhtiq2K7Yp9ioIEQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICfaqdix24zauiDZhdmG2KrYrtioINiq2KfYsdmK2K4nLFxuXHRcdGlzUlRMOiB0cnVlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndXInXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy5waWNrZXItdXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFVyZHUgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBNYW5zb29yIE11bmliIC0tIG1hbnNvb3JtdW5pYkBnbWFpbC5jb20gPGh0dHA6Ly93d3cubWFuc29vci5jby5uci9tYW5zb29yLmh0bWw+XHJcbiAgIFRoYW5rcyB0byBIYWJpYiBBaG1lZCwgT2JhaWRVbGxhaCBBbndhci4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3VyJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYzvar9iw2LTYqtuBJywgcHJldlN0YXR1czogJ9mF2KfZhyDar9iw2LTYqtuBJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAn2KjYsdizINqv2LDYtNiq24EnLFxyXG5cdFx0bmV4dFRleHQ6ICfYotim2YbYr9uBJiN4M2U7JywgbmV4dFN0YXR1czogJ9mF2KfZhyDYotim2YbYr9uBJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn2KjYsdizINii2KbZhtiv24EnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfYsdmI2KfauicsIGN1cnJlbnRTdGF0dXM6ICfZhdin2Ycg2LHZiNin2ronLFxyXG5cdFx0dG9kYXlUZXh0OiAn2KLYrCcsIHRvZGF5U3RhdHVzOiAn2KLYrCcsXHJcblx0XHRjbGVhclRleHQ6ICfYrdiw2YEg2KrYp9ix2YrYricsIGNsZWFyU3RhdHVzOiAn2qnYsduM2rog2K3YsNmBINiq2KfYsduM2K4nLFxyXG5cdFx0Y2xvc2VUZXh0OiAn2qnYsduM2rog2KjZhtivJywgY2xvc2VTdGF0dXM6ICfaqduM2YTYptuSINqp2LHZhtuSINio2YbYrycsXHJcblx0XHR5ZWFyU3RhdHVzOiAn2KjYsdizINiq2KjYr9uM2YTbjCcsIG1vbnRoU3RhdHVzOiAn2YXYp9mHINiq2KjYr9uM2YTbjCcsXHJcblx0XHR3ZWVrVGV4dDogJ9uB2YHYqtuBJywgd2Vla1N0YXR1czogJ9uB2YHYqtuBJyxcclxuXHRcdGRheVN0YXR1czogJ9in2YbYqtiu2KfYqCBELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAn2qnYsduM2rog2YXZhtiq2K7YqCDYqtin2LHZitiuJyxcclxuXHRcdGlzUlRMOiB0cnVlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3VyJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-vi.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-vi.js index 64c00b123c9..ba0b6b2b1ba 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-vi.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-vi.js @@ -25,4 +25,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['vi']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXZpLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXZpLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgVmlldG5hbWVzZSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBUcmFuc2xhdGVkIGJ5IExlIFRoYW5oIEh1eSAobHRoYW5oaHV5QGNpdC5jdHUuZWR1LnZuKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndmknXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7VHLGsOG7m2MnLCBwcmV2U3RhdHVzOiAnVGjDoW5nIHRyxrDhu5tjJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ07Eg20gdHLGsOG7m2MnLFxuXHRcdG5leHRUZXh0OiAnVGnhur9wJiN4M2U7JywgbmV4dFN0YXR1czogJ1Row6FuZyBzYXUnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnTsSDbSBzYXUnLFxuXHRcdGN1cnJlbnRUZXh0OiAnSMO0bSBuYXknLCBjdXJyZW50U3RhdHVzOiAnVGjDoW5nIGhp4buHbiB04bqhaScsXG5cdFx0dG9kYXlUZXh0OiAnSMO0bSBuYXknLCB0b2RheVN0YXR1czogJ1Row6FuZyBoaeG7h24gdOG6oWknLFxuXHRcdGNsZWFyVGV4dDogJ1jDs2EnLCBjbGVhclN0YXR1czogJ1jDs2EgbmfDoHkgaGnhu4duIHThuqFpJyxcblx0XHRjbG9zZVRleHQ6ICfEkMOzbmcnLCBjbG9zZVN0YXR1czogJ8SQw7NuZyB2w6Aga2jDtG5nIGzGsHUgbOG6oWkgdGhheSDEkeG7lWknLFxuXHRcdHllYXJTdGF0dXM6ICdOxINtIGtow6FjJywgbW9udGhTdGF0dXM6ICdUaMOhbmcga2jDoWMnLFxuXHRcdHdlZWtUZXh0OiAnVHUnLCB3ZWVrU3RhdHVzOiAnVHXhuqduIHRyb25nIG7Eg20nLFxuXHRcdGRheVN0YXR1czogJ8SQYW5nIGNo4buNbiBERCwgXFwnbmfDoHlcXCcgZCBNJywgZGVmYXVsdFN0YXR1czogJ0No4buNbiBuZ8OgeScsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndmknXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXZpLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXZpLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBWaWV0bmFtZXNlIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgVHJhbnNsYXRlZCBieSBMZSBUaGFuaCBIdXkgKGx0aGFuaGh1eUBjaXQuY3R1LmVkdS52bikuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd2aSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7VHLGsOG7m2MnLCBwcmV2U3RhdHVzOiAnVGjDoW5nIHRyxrDhu5tjJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnTsSDbSB0csaw4bubYycsXHJcblx0XHRuZXh0VGV4dDogJ1Rp4bq/cCYjeDNlOycsIG5leHRTdGF0dXM6ICdUaMOhbmcgc2F1JyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnTsSDbSBzYXUnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdIw7RtIG5heScsIGN1cnJlbnRTdGF0dXM6ICdUaMOhbmcgaGnhu4duIHThuqFpJyxcclxuXHRcdHRvZGF5VGV4dDogJ0jDtG0gbmF5JywgdG9kYXlTdGF0dXM6ICdUaMOhbmcgaGnhu4duIHThuqFpJyxcclxuXHRcdGNsZWFyVGV4dDogJ1jDs2EnLCBjbGVhclN0YXR1czogJ1jDs2EgbmfDoHkgaGnhu4duIHThuqFpJyxcclxuXHRcdGNsb3NlVGV4dDogJ8SQw7NuZycsIGNsb3NlU3RhdHVzOiAnxJDDs25nIHbDoCBraMO0bmcgbMawdSBs4bqhaSB0aGF5IMSR4buVaScsXHJcblx0XHR5ZWFyU3RhdHVzOiAnTsSDbSBraMOhYycsIG1vbnRoU3RhdHVzOiAnVGjDoW5nIGtow6FjJyxcclxuXHRcdHdlZWtUZXh0OiAnVHUnLCB3ZWVrU3RhdHVzOiAnVHXhuqduIHRyb25nIG7Eg20nLFxyXG5cdFx0ZGF5U3RhdHVzOiAnxJBhbmcgY2jhu41uIERELCBcXCduZ8OgeVxcJyBkIE0nLCBkZWZhdWx0U3RhdHVzOiAnQ2jhu41uIG5nw6B5JyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd2aSddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-zh-CN.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-zh-CN.js index 97d5637d615..a1c649dd6cb 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-zh-CN.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-zh-CN.js @@ -27,4 +27,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['zh-CN']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXpoLUNOLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnBpY2tlci16aC1DTi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFNpbXBsaWZpZWQgQ2hpbmVzZSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IENsb3VkcmVhbSAoY2xvdWRyZWFtQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3poLUNOJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuZXh0ZW5kKHt9LCAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0XHR7bW9udGg6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlci5tb250aC5cblx0XHRcdFx0cmVwbGFjZSgvbW9udGhIZWFkZXIvLCAnbW9udGhIZWFkZXI6TU0geXl5eeW5tCcpfSksXG5cdFx0cHJldlRleHQ6ICcmI3gzYzvkuIrmnIgnLCBwcmV2U3RhdHVzOiAn5pi+56S65LiK5pyIJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+aYvuekuuS4iuS4gOW5tCcsXG5cdFx0bmV4dFRleHQ6ICfkuIvmnIgmI3gzZTsnLCBuZXh0U3RhdHVzOiAn5pi+56S65LiL5pyIJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ+aYvuekuuS4i+S4gOW5tCcsXG5cdFx0Y3VycmVudFRleHQ6ICfku4rlpKknLCBjdXJyZW50U3RhdHVzOiAn5pi+56S65pys5pyIJyxcblx0XHR0b2RheVRleHQ6ICfku4rlpKknLCB0b2RheVN0YXR1czogJ+aYvuekuuacrOaciCcsXG5cdFx0Y2xlYXJUZXh0OiAn5riF6ZmkJywgY2xlYXJTdGF0dXM6ICfmuIXpmaTlt7LpgInml6XmnJ8nLFxuXHRcdGNsb3NlVGV4dDogJ+WFs+mXrScsIGNsb3NlU3RhdHVzOiAn5LiN5pS55Y+Y5b2T5YmN6YCJ5oupJyxcblx0XHR5ZWFyU3RhdHVzOiAn6YCJ5oup5bm05Lu9JywgbW9udGhTdGF0dXM6ICfpgInmi6nmnIjku70nLFxuXHRcdHdlZWtUZXh0OiAn5ZGoJywgd2Vla1N0YXR1czogJ+W5tOWGheWRqOasoScsXG5cdFx0ZGF5U3RhdHVzOiAn6YCJ5oupIG3mnIggZOaXpSwgREQnLCBkZWZhdWx0U3RhdHVzOiAn6K+36YCJ5oup5pel5pyfJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd6aC1DTiddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXpoLUNOLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnBpY2tlci16aC1DTi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgU2ltcGxpZmllZCBDaGluZXNlIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBDbG91ZHJlYW0gKGNsb3VkcmVhbUBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snemgtQ04nXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmV4dGVuZCh7fSwgJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0XHR7bW9udGg6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlci5tb250aC5cclxuXHRcdFx0XHRyZXBsYWNlKC9tb250aEhlYWRlci8sICdtb250aEhlYWRlcjpNTSB5eXl55bm0Jyl9KSxcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M75LiK5pyIJywgcHJldlN0YXR1czogJ+aYvuekuuS4iuaciCcsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+aYvuekuuS4iuS4gOW5tCcsXHJcblx0XHRuZXh0VGV4dDogJ+S4i+aciCYjeDNlOycsIG5leHRTdGF0dXM6ICfmmL7npLrkuIvmnIgnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICfmmL7npLrkuIvkuIDlubQnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfku4rlpKknLCBjdXJyZW50U3RhdHVzOiAn5pi+56S65pys5pyIJyxcclxuXHRcdHRvZGF5VGV4dDogJ+S7iuWkqScsIHRvZGF5U3RhdHVzOiAn5pi+56S65pys5pyIJyxcclxuXHRcdGNsZWFyVGV4dDogJ+a4hemZpCcsIGNsZWFyU3RhdHVzOiAn5riF6Zmk5bey6YCJ5pel5pyfJyxcclxuXHRcdGNsb3NlVGV4dDogJ+WFs+mXrScsIGNsb3NlU3RhdHVzOiAn5LiN5pS55Y+Y5b2T5YmN6YCJ5oupJyxcclxuXHRcdHllYXJTdGF0dXM6ICfpgInmi6nlubTku70nLCBtb250aFN0YXR1czogJ+mAieaLqeaciOS7vScsXHJcblx0XHR3ZWVrVGV4dDogJ+WRqCcsIHdlZWtTdGF0dXM6ICflubTlhoXlkajmrKEnLFxyXG5cdFx0ZGF5U3RhdHVzOiAn6YCJ5oupIG3mnIggZOaXpSwgREQnLCBkZWZhdWx0U3RhdHVzOiAn6K+36YCJ5oup5pel5pyfJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd6aC1DTiddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-zh-HK.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-zh-HK.js index 7e9f5adce2a..f44143d18a4 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-zh-HK.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-zh-HK.js @@ -27,4 +27,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['zh-HK']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXpoLUhLLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnBpY2tlci16aC1ISy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEhvbmcgS29uZyBDaGluZXNlIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgU0NDWSAoc2FtdWVsY3ljaGFuQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3poLUhLJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuZXh0ZW5kKHt9LCAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0XHR7bW9udGg6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlci5tb250aC5cblx0XHRcdFx0cmVwbGFjZSgvbW9udGhIZWFkZXIvLCAnbW9udGhIZWFkZXI6eXl5eeW5tCBNTScpfSksXG5cdFx0cHJldlRleHQ6ICcmI3gzYzvkuIrmnIgnLCBwcmV2U3RhdHVzOiAn6aGv56S65LiK5pyIJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+mhr+ekuuS4iuS4gOW5tCcsXG5cdFx0bmV4dFRleHQ6ICfkuIvmnIgmI3gzZTsnLCBuZXh0U3RhdHVzOiAn6aGv56S65LiL5pyIJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ+mhr+ekuuS4i+S4gOW5tCcsXG5cdFx0Y3VycmVudFRleHQ6ICfku4rlpKknLCBjdXJyZW50U3RhdHVzOiAn6aGv56S65pys5pyIJyxcblx0XHR0b2RheVRleHQ6ICfku4rlpKknLCB0b2RheVN0YXR1czogJ+mhr+ekuuacrOaciCcsXG5cdFx0Y2xlYXJUZXh0OiAn5riF6ZmkJywgY2xlYXJTdGF0dXM6ICfmuIXpmaTlt7Lpgbjml6XmnJ8nLFxuXHRcdGNsb3NlVGV4dDogJ+mXnOmWiScsIGNsb3NlU3RhdHVzOiAn5LiN5pS56K6K55uu5YmN55qE6YG45pOHJyxcblx0XHR5ZWFyU3RhdHVzOiAn6YG45pOH5bm05Lu9JywgbW9udGhTdGF0dXM6ICfpgbjmk4fmnIjku70nLFxuXHRcdHdlZWtUZXh0OiAn5ZGoJywgd2Vla1N0YXR1czogJ+W5tOWFp+WRqOasoScsXG5cdFx0ZGF5U3RhdHVzOiAn6YG45pOHIG3mnIggZOaXpSwgREQnLCBkZWZhdWx0U3RhdHVzOiAn6KuL6YG45pOH5pel5pyfJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd6aC1ISyddKTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXpoLUhLLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnBpY2tlci16aC1ISy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgSG9uZyBLb25nIENoaW5lc2UgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IFNDQ1kgKHNhbXVlbGN5Y2hhbkBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snemgtSEsnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmV4dGVuZCh7fSwgJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0XHR7bW9udGg6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlci5tb250aC5cclxuXHRcdFx0XHRyZXBsYWNlKC9tb250aEhlYWRlci8sICdtb250aEhlYWRlcjp5eXl55bm0IE1NJyl9KSxcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M75LiK5pyIJywgcHJldlN0YXR1czogJ+mhr+ekuuS4iuaciCcsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+mhr+ekuuS4iuS4gOW5tCcsXHJcblx0XHRuZXh0VGV4dDogJ+S4i+aciCYjeDNlOycsIG5leHRTdGF0dXM6ICfpoa/npLrkuIvmnIgnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICfpoa/npLrkuIvkuIDlubQnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfku4rlpKknLCBjdXJyZW50U3RhdHVzOiAn6aGv56S65pys5pyIJyxcclxuXHRcdHRvZGF5VGV4dDogJ+S7iuWkqScsIHRvZGF5U3RhdHVzOiAn6aGv56S65pys5pyIJyxcclxuXHRcdGNsZWFyVGV4dDogJ+a4hemZpCcsIGNsZWFyU3RhdHVzOiAn5riF6Zmk5bey6YG45pel5pyfJyxcclxuXHRcdGNsb3NlVGV4dDogJ+mXnOmWiScsIGNsb3NlU3RhdHVzOiAn5LiN5pS56K6K55uu5YmN55qE6YG45pOHJyxcclxuXHRcdHllYXJTdGF0dXM6ICfpgbjmk4flubTku70nLCBtb250aFN0YXR1czogJ+mBuOaTh+aciOS7vScsXHJcblx0XHR3ZWVrVGV4dDogJ+WRqCcsIHdlZWtTdGF0dXM6ICflubTlhaflkajmrKEnLFxyXG5cdFx0ZGF5U3RhdHVzOiAn6YG45pOHIG3mnIggZOaXpSwgREQnLCBkZWZhdWx0U3RhdHVzOiAn6KuL6YG45pOH5pel5pyfJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd6aC1ISyddKTtcclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-zh-TW.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-zh-TW.js index d7606fd814d..939aef88a62 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-zh-TW.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-zh-TW.js @@ -27,4 +27,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['zh-TW']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXpoLVRXLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnBpY2tlci16aC1UVy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFRyYWRpdGlvbmFsIENoaW5lc2UgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBSZXNzb2wgKHJlc3NvbEBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd6aC1UVyddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmV4dGVuZCh7fSwgJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdFx0e21vbnRoOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIubW9udGguXG5cdFx0XHRcdHJlcGxhY2UoL21vbnRoSGVhZGVyLywgJ21vbnRoSGVhZGVyOk1NIHl5eXnlubQnKX0pLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M75LiK5pyIJywgcHJldlN0YXR1czogJ+mhr+ekuuS4iuaciCcsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICfpoa/npLrkuIrkuIDlubQnLFxuXHRcdG5leHRUZXh0OiAn5LiL5pyIJiN4M2U7JywgbmV4dFN0YXR1czogJ+mhr+ekuuS4i+aciCcsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICfpoa/npLrkuIvkuIDlubQnLFxuXHRcdGN1cnJlbnRUZXh0OiAn5LuK5aSpJywgY3VycmVudFN0YXR1czogJ+mhr+ekuuacrOaciCcsXG5cdFx0dG9kYXlUZXh0OiAn5LuK5aSpJywgdG9kYXlTdGF0dXM6ICfpoa/npLrmnKzmnIgnLFxuXHRcdGNsZWFyVGV4dDogJ+a4hemZpCcsIGNsZWFyU3RhdHVzOiAn5riF6Zmk5bey6YG45pel5pyfJyxcblx0XHRjbG9zZVRleHQ6ICfpl5zploknLCBjbG9zZVN0YXR1czogJ+S4jeaUueiuiuebruWJjeeahOmBuOaThycsXG5cdFx0eWVhclN0YXR1czogJ+mBuOaTh+W5tOS7vScsIG1vbnRoU3RhdHVzOiAn6YG45pOH5pyI5Lu9Jyxcblx0XHR3ZWVrVGV4dDogJ+WRqCcsIHdlZWtTdGF0dXM6ICflubTlhaflkajmrKEnLFxuXHRcdGRheVN0YXR1czogJ+mBuOaThyBt5pyIIGTml6UsIEREJywgZGVmYXVsdFN0YXR1czogJ+iri+mBuOaTh+aXpeacnycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snemgtVFcnXSk7XG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLXpoLVRXLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnBpY2tlci16aC1UVy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgVHJhZGl0aW9uYWwgQ2hpbmVzZSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgUmVzc29sIChyZXNzb2xAZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3poLVRXJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5leHRlbmQoe30sICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdFx0e21vbnRoOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIubW9udGguXHJcblx0XHRcdFx0cmVwbGFjZSgvbW9udGhIZWFkZXIvLCAnbW9udGhIZWFkZXI6TU0geXl5eeW5tCcpfSksXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO+S4iuaciCcsIHByZXZTdGF0dXM6ICfpoa/npLrkuIrmnIgnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICfpoa/npLrkuIrkuIDlubQnLFxyXG5cdFx0bmV4dFRleHQ6ICfkuIvmnIgmI3gzZTsnLCBuZXh0U3RhdHVzOiAn6aGv56S65LiL5pyIJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn6aGv56S65LiL5LiA5bm0JyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn5LuK5aSpJywgY3VycmVudFN0YXR1czogJ+mhr+ekuuacrOaciCcsXHJcblx0XHR0b2RheVRleHQ6ICfku4rlpKknLCB0b2RheVN0YXR1czogJ+mhr+ekuuacrOaciCcsXHJcblx0XHRjbGVhclRleHQ6ICfmuIXpmaQnLCBjbGVhclN0YXR1czogJ+a4hemZpOW3sumBuOaXpeacnycsXHJcblx0XHRjbG9zZVRleHQ6ICfpl5zploknLCBjbG9zZVN0YXR1czogJ+S4jeaUueiuiuebruWJjeeahOmBuOaThycsXHJcblx0XHR5ZWFyU3RhdHVzOiAn6YG45pOH5bm05Lu9JywgbW9udGhTdGF0dXM6ICfpgbjmk4fmnIjku70nLFxyXG5cdFx0d2Vla1RleHQ6ICflkagnLCB3ZWVrU3RhdHVzOiAn5bm05YWn5ZGo5qyhJyxcclxuXHRcdGRheVN0YXR1czogJ+mBuOaThyBt5pyIIGTml6UsIEREJywgZGVmYXVsdFN0YXR1czogJ+iri+mBuOaTh+aXpeacnycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snemgtVFcnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.ext.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.ext.js index d5b1c971a06..c935435561b 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.ext.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.ext.js @@ -286,4 +286,4 @@ })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnBpY2tlci5leHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBDYWxlbmRhcnMgZGF0ZSBwaWNrZXIgZXh0ZW5zaW9ucyBmb3IgalF1ZXJ5IHYyLjAuMS5cbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgQXVndXN0IDIwMDkuXG4gICBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCAoaHR0cDovL2tlaXRoLXdvb2QubmFtZS9saWNlbmNlLmh0bWwpIGxpY2Vuc2UuIFxuICAgUGxlYXNlIGF0dHJpYnV0ZSB0aGUgYXV0aG9yIGlmIHlvdSB1c2UgaXQuICovXG5cbihmdW5jdGlvbigkKSB7IC8vIEhpZGUgc2NvcGUsIG5vICQgY29uZmxpY3RcblxuXHR2YXIgdGhlbWVSb2xsZXJSZW5kZXJlciA9IHtcblx0XHRwaWNrZXI6ICc8ZGl2e3BvcHVwOnN0YXJ0fSBpZD1cInVpLWRhdGVwaWNrZXItZGl2XCJ7cG9wdXA6ZW5kfSBjbGFzcz1cInVpLWRhdGVwaWNrZXIgdWktd2lkZ2V0ICcgK1xuXHRcdCd1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbHtpbmxpbmU6c3RhcnR9IHVpLWRhdGVwaWNrZXItaW5saW5le2lubGluZTplbmR9XCI+JyArXG5cdFx0JzxkaXYgY2xhc3M9XCJ1aS1kYXRlcGlja2VyLWhlYWRlciB1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsXCI+JyArXG5cdFx0J3tsaW5rOnByZXZ9e2xpbms6dG9kYXl9e2xpbms6bmV4dH08L2Rpdj57bW9udGhzfScgK1xuXHRcdCd7cG9wdXA6c3RhcnR9PGRpdiBjbGFzcz1cInVpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4ICcgK1xuXHRcdCd1aS1jb3JuZXItYWxsXCI+e2J1dHRvbjpjbGVhcn17YnV0dG9uOmNsb3NlfTwvZGl2Pntwb3B1cDplbmR9JyArXG5cdFx0JzxkaXYgY2xhc3M9XCJ1aS1oZWxwZXItY2xlYXJmaXhcIj48L2Rpdj48L2Rpdj4nLFxuXHRcdG1vbnRoUm93OiAnPGRpdiBjbGFzcz1cInVpLWRhdGVwaWNrZXItcm93LWJyZWFrXCI+e21vbnRoc308L2Rpdj4nLFxuXHRcdG1vbnRoOiAnPGRpdiBjbGFzcz1cInVpLWRhdGVwaWNrZXItZ3JvdXBcIj4nICtcblx0XHQnPGRpdiBjbGFzcz1cInVpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGxcIj57bW9udGhIZWFkZXI6TU0geXl5eX08L2Rpdj4nICtcblx0XHQnPHRhYmxlIGNsYXNzPVwidWktZGF0ZXBpY2tlci1jYWxlbmRhclwiPjx0aGVhZD57d2Vla0hlYWRlcn08L3RoZWFkPjx0Ym9keT57d2Vla3N9PC90Ym9keT48L3RhYmxlPjwvZGl2PicsXG5cdFx0d2Vla0hlYWRlcjogJzx0cj57ZGF5c308L3RyPicsXG5cdFx0ZGF5SGVhZGVyOiAnPHRoPntkYXl9PC90aD4nLFxuXHRcdHdlZWs6ICc8dHI+e2RheXN9PC90cj4nLFxuXHRcdGRheTogJzx0ZD57ZGF5fTwvdGQ+Jyxcblx0XHRtb250aFNlbGVjdG9yOiAnLnVpLWRhdGVwaWNrZXItZ3JvdXAnLFxuXHRcdGRheVNlbGVjdG9yOiAndGQnLFxuXHRcdHJ0bENsYXNzOiAndWktZGF0ZXBpY2tlci1ydGwnLFxuXHRcdG11bHRpQ2xhc3M6ICd1aS1kYXRlcGlja2VyLW11bHRpJyxcblx0XHRkZWZhdWx0Q2xhc3M6ICd1aS1zdGF0ZS1kZWZhdWx0Jyxcblx0XHRzZWxlY3RlZENsYXNzOiAndWktc3RhdGUtYWN0aXZlJyxcblx0XHRoaWdobGlnaHRlZENsYXNzOiAndWktc3RhdGUtaG92ZXInLFxuXHRcdHRvZGF5Q2xhc3M6ICd1aS1zdGF0ZS1oaWdobGlnaHQnLFxuXHRcdG90aGVyTW9udGhDbGFzczogJ3VpLWRhdGVwaWNrZXItb3RoZXItbW9udGgnLFxuXHRcdHdlZWtlbmRDbGFzczogJ3VpLWRhdGVwaWNrZXItd2Vlay1lbmQnLFxuXHRcdGNvbW1hbmRDbGFzczogJ3VpLWRhdGVwaWNrZXItY21kJyxcblx0XHRjb21tYW5kQnV0dG9uQ2xhc3M6ICd1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwnLFxuXHRcdGNvbW1hbmRMaW5rQ2xhc3M6ICcnLFxuXHRcdGRpc2FibGVkQ2xhc3M6ICd1aS1kYXRlcGlja2VyLWRpc2FibGVkJ1xuXHR9O1xuXG5cdCQuZXh0ZW5kKCQuY2FsZW5kYXJzUGlja2VyLCB7XG5cblx0XHQvKiogVGVtcGxhdGUgZm9yIGdlbmVyYXRpbmcgYSBjYWxlbmRhciBwaWNrZXIgc2hvd2luZyB3ZWVrIG9mIHllYXIuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyICovXG5cdFx0d2Vla09mWWVhclJlbmRlcmVyOiAkLmV4dGVuZCh7fSwgJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLCB7XG5cdFx0XHR3ZWVrSGVhZGVyOiAnPHRyPjx0aCBjbGFzcz1cImNhbGVuZGFycy13ZWVrXCI+JyArXG5cdFx0XHQnPHNwYW4gdGl0bGU9XCJ7bDEwbjp3ZWVrU3RhdHVzfVwiPntsMTBuOndlZWtUZXh0fTwvc3Bhbj48L3RoPntkYXlzfTwvdHI+Jyxcblx0XHRcdHdlZWs6ICc8dHI+PHRkIGNsYXNzPVwiY2FsZW5kYXJzLXdlZWtcIj57d2Vla09mWWVhcn08L3RkPntkYXlzfTwvdHI+J1xuXHRcdH0pLFxuXG5cdFx0LyoqIFRoZW1lUm9sbGVyIHRlbXBsYXRlIGZvciBnZW5lcmF0aW5nIGEgY2FsZW5kYXIgcGlja2VyLlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlciAqL1xuXHRcdHRoZW1lUm9sbGVyUmVuZGVyZXI6IHRoZW1lUm9sbGVyUmVuZGVyZXIsXG5cblx0XHQvKiogVGhlbWVSb2xsZXIgdGVtcGxhdGUgZm9yIGdlbmVyYXRpbmcgYSBjYWxlbmRhciBwaWNrZXIgc2hvd2luZyB3ZWVrIG9mIHllYXIuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyICovXG5cdFx0dGhlbWVSb2xsZXJXZWVrT2ZZZWFyUmVuZGVyZXI6ICQuZXh0ZW5kKHt9LCB0aGVtZVJvbGxlclJlbmRlcmVyLCB7XG5cdFx0XHR3ZWVrSGVhZGVyOiAnPHRyPjx0aCBjbGFzcz1cInVpLXN0YXRlLWhvdmVyXCI+PHNwYW4+e2wxMG46d2Vla1RleHR9PC9zcGFuPjwvdGg+e2RheXN9PC90cj4nLFxuXHRcdFx0d2VlazogJzx0cj48dGQgY2xhc3M9XCJ1aS1zdGF0ZS1ob3ZlclwiPnt3ZWVrT2ZZZWFyfTwvdGQ+e2RheXN9PC90cj4nXG5cdFx0fSksXG5cblx0XHQvKiogRG9uJ3QgYWxsb3cgd2Vla2VuZHMgdG8gYmUgc2VsZWN0ZWQuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBjdXJyZW50IGRhdGUuXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IEluZm9ybWF0aW9uIGFib3V0IHRoaXMgZGF0ZS5cblx0XHRcdEBleGFtcGxlIG9uRGF0ZTogJC5jYWxlbmRhcnNQaWNrZXIubm9XZWVrZW5kcyAqL1xuXHRcdG5vV2Vla2VuZHM6IGZ1bmN0aW9uKGRhdGUpIHtcblx0XHRcdHJldHVybiB7c2VsZWN0YWJsZTogZGF0ZS53ZWVrRGF5KCl9O1xuXHRcdH0sXG5cblx0XHQvKiogQ2hhbmdlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgYnkgY2xpY2tpbmcgb24gdGhlIGRheSBoZWFkZXIuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gcGlja2VyIHtqUXVlcnl9IFRoZSBjb21wbGV0ZWQgZGF0ZXBpY2tlciBkaXZpc2lvbi5cblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24uXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBleGFtcGxlIG9uU2hvdzogJC5jYWxlbmRhcnNQaWNrZXIuY2hhbmdlRmlyc3REYXkgKi9cblx0XHRjaGFuZ2VGaXJzdERheTogZnVuY3Rpb24ocGlja2VyLCBjYWxlbmRhciwgaW5zdCkge1xuXHRcdFx0dmFyIHRhcmdldCA9ICQodGhpcyk7XG5cdFx0XHRwaWNrZXIuZmluZCgndGggc3BhbicpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICh0aGlzLnBhcmVudE5vZGUuY2xhc3NOYW1lLm1hdGNoKC8uKmNhbGVuZGFycy13ZWVrLiovKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQkKCc8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCInICsgdGhpcy5jbGFzc05hbWUgK1xuXHRcdFx0XHRcdFx0J1wiIHRpdGxlPVwiQ2hhbmdlIGZpcnN0IGRheSBvZiB0aGUgd2Vla1wiPicgKyAkKHRoaXMpLnRleHQoKSArICc8L2E+JykuXG5cdFx0XHRcdFx0Y2xpY2soZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR2YXIgZG93ID0gcGFyc2VJbnQodGhpcy5jbGFzc05hbWUucmVwbGFjZSgvXi4qY2FsZW5kYXJzLWRvdy0oXFxkKykuKiQvLCAnJDEnKSwgMTApO1xuXHRcdFx0XHRcdFx0dGFyZ2V0LmNhbGVuZGFyc1BpY2tlcignb3B0aW9uJywge2ZpcnN0RGF5OiBkb3d9KTtcblx0XHRcdFx0XHR9KS5cblx0XHRcdFx0XHRyZXBsYWNlQWxsKHRoaXMpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdC8qKiBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIGRhdGUgaXMgaG92ZXJlZC5cblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJPbkhvdmVyXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBkYXRlIGJlaW5nIGhvdmVyZWQgb3IgPGNvZGU+bnVsbDwvY29kZT4gb24gZXhpdC5cblx0XHRcdEBwYXJhbSBzZWxlY3RhYmxlIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGRhdGUgaXMgc2VsZWN0YWJsZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEBleGFtcGxlIGZ1bmN0aW9uIHNob3dIb3ZlcmVkKGRhdGUsIHNlbGVjdGFibGUpIHtcblx0JCgnI2ZlZWRiYWNrJykudGV4dCgnWW91IGFyZSB2aWV3aW5nICcgKyAoZGF0ZSA/IGRhdGUuZm9ybWF0RGF0ZSgpIDogJ25vdGhpbmcnKSk7XG4gfSAqL1xuXG5cdFx0LyoqIEFkZCBhIGNhbGxiYWNrIHdoZW4gaG92ZXJpbmcgb3ZlciBkYXRlcy5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBpY2tlci5leHQuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBvbkhvdmVyIHtDYWxlbmRhcnNQaWNrZXJPbkhvdmVyfSBUaGUgY2FsbGJhY2sgd2hlbiBob3ZlcmluZy5cblx0XHRcdEBleGFtcGxlIG9uU2hvdzogJC5jYWxlbmRhcnNQaWNrZXIuaG92ZXJDYWxsYmFjayhzaG93SG92ZXJlZCkgKi9cblx0XHRob3ZlckNhbGxiYWNrOiBmdW5jdGlvbihvbkhvdmVyKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24ocGlja2VyLCBjYWxlbmRhciwgaW5zdCkge1xuXHRcdFx0XHRpZiAoJC5pc0Z1bmN0aW9uKG9uSG92ZXIpKSB7XG5cdFx0XHRcdFx0dmFyIHRhcmdldCA9IHRoaXM7XG5cdFx0XHRcdFx0dmFyIHJlbmRlcmVyID0gaW5zdC5vcHRpb25zLnJlbmRlcmVyO1xuXHRcdFx0XHRcdHBpY2tlci5maW5kKHJlbmRlcmVyLmRheVNlbGVjdG9yICsgJyBhLCAnICsgcmVuZGVyZXIuZGF5U2VsZWN0b3IgKyAnIHNwYW4nKS5cblx0XHRcdFx0XHRcdGhvdmVyKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRvbkhvdmVyLmFwcGx5KHRhcmdldCwgWyQodGFyZ2V0KS5jYWxlbmRhcnNQaWNrZXIoJ3JldHJpZXZlRGF0ZScsIHRoaXMpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2EnXSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7IG9uSG92ZXIuYXBwbHkodGFyZ2V0LCBbXSk7IH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHQvKiogSGlnaGxpZ2h0IHRoZSBlbnRpcmUgd2VlayB3aGVuIGhvdmVyaW5nIG92ZXIgaXQuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gcGlja2VyIHtqUXVlcnl9IFRoZSBjb21wbGV0ZWQgZGF0ZXBpY2tlciBkaXZpc2lvbi5cblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24uXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBleGFtcGxlIG9uU2hvdzogJC5jYWxlbmRhcnNQaWNrZXIuaGlnaGxpZ2h0V2VlayAqL1xuXHRcdGhpZ2hsaWdodFdlZWs6IGZ1bmN0aW9uKHBpY2tlciwgY2FsZW5kYXIsIGluc3QpIHtcblx0XHRcdHZhciB0YXJnZXQgPSB0aGlzO1xuXHRcdFx0dmFyIHJlbmRlcmVyID0gaW5zdC5vcHRpb25zLnJlbmRlcmVyO1xuXHRcdFx0cGlja2VyLmZpbmQocmVuZGVyZXIuZGF5U2VsZWN0b3IgKyAnIGEsICcgKyByZW5kZXJlci5kYXlTZWxlY3RvciArICcgc3BhbicpLlxuXHRcdFx0XHRob3ZlcihmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkKHRoaXMpLnBhcmVudHMoJ3RyJykuZmluZChyZW5kZXJlci5kYXlTZWxlY3RvciArICcgKicpLlxuXHRcdFx0XHRcdFx0YWRkQ2xhc3MocmVuZGVyZXIuaGlnaGxpZ2h0ZWRDbGFzcyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdCQodGhpcykucGFyZW50cygndHInKS5maW5kKHJlbmRlcmVyLmRheVNlbGVjdG9yICsgJyAqJykuXG5cdFx0XHRcdFx0XHRyZW1vdmVDbGFzcyhyZW5kZXJlci5oaWdobGlnaHRlZENsYXNzKTtcblx0XHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdC8qKiBTaG93IGEgc3RhdHVzIGJhciB3aXRoIG1lc3NhZ2VzLlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIHBpY2tlciB7alF1ZXJ5fSBUaGUgY29tcGxldGVkIGRhdGVwaWNrZXIgZGl2aXNpb24uXG5cdFx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uLlxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAZXhhbXBsZSBvblNob3c6ICQuY2FsZW5kYXJzUGlja2VyLnNob3dTdGF0dXMgKi9cblx0XHRzaG93U3RhdHVzOiBmdW5jdGlvbihwaWNrZXIsIGNhbGVuZGFyLCBpbnN0KSB7XG5cdFx0XHR2YXIgaXNUUiA9IChpbnN0Lm9wdGlvbnMucmVuZGVyZXIuc2VsZWN0ZWRDbGFzcyA9PT0gJ3VpLXN0YXRlLWFjdGl2ZScpO1xuXHRcdFx0dmFyIGRlZmF1bHRTdGF0dXMgPSBpbnN0Lm9wdGlvbnMuZGVmYXVsdFN0YXR1cyB8fCAnJiMxNjA7Jztcblx0XHRcdHZhciBzdGF0dXMgPSAkKCc8ZGl2IGNsYXNzPVwiJyArICghaXNUUiA/ICdjYWxlbmRhcnMtc3RhdHVzJyA6XG5cdFx0XHRcdCd1aS1kYXRlcGlja2VyLXN0YXR1cyB1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsJykgKyAnXCI+JyArXG5cdFx0XHRcdGRlZmF1bHRTdGF0dXMgKyAnPC9kaXY+JykuXG5cdFx0XHRcdGluc2VydEFmdGVyKHBpY2tlci5maW5kKCcuY2FsZW5kYXJzLW1vbnRoLXJvdzpsYXN0LC51aS1kYXRlcGlja2VyLXJvdy1icmVhazpsYXN0JykpO1xuXHRcdFx0cGlja2VyLmZpbmQoJypbdGl0bGVdJykuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR2YXIgdGl0bGUgPSAkKHRoaXMpLmF0dHIoJ3RpdGxlJyk7XG5cdFx0XHRcdFx0JCh0aGlzKS5yZW1vdmVBdHRyKCd0aXRsZScpLmhvdmVyKFxuXHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7IHN0YXR1cy50ZXh0KHRpdGxlIHx8IGRlZmF1bHRTdGF0dXMpOyB9LFxuXHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7IHN0YXR1cy50ZXh0KGRlZmF1bHRTdGF0dXMpOyB9KTtcblx0XHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdC8qKiBBbGxvdyBlYXNpZXIgbmF2aWdhdGlvbiBieSBtb250aC5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBpY2tlci5leHQuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBwaWNrZXIge2pRdWVyeX0gVGhlIGNvbXBsZXRlZCBkYXRlcGlja2VyIGRpdmlzaW9uLlxuXHRcdFx0QHBhcmFtIGNhbGVuZGFyIHtCYXNlQ2FsZW5kYXJ9IFRoZSBjYWxlbmRhciBpbXBsZW1lbnRhdGlvbi5cblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QGV4YW1wbGUgb25TaG93OiAkLmNhbGVuZGFyc1BpY2tlci5tb250aE5hdmlnYXRpb24gKi9cblx0XHRtb250aE5hdmlnYXRpb246IGZ1bmN0aW9uKHBpY2tlciwgY2FsZW5kYXIsIGluc3QpIHtcblx0XHRcdHZhciB0YXJnZXQgPSAkKHRoaXMpO1xuXHRcdFx0dmFyIGlzVFIgPSAoaW5zdC5vcHRpb25zLnJlbmRlcmVyLnNlbGVjdGVkQ2xhc3MgPT09ICd1aS1zdGF0ZS1hY3RpdmUnKTtcblx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XG5cdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XG5cdFx0XHR2YXIgeWVhciA9IGluc3QuZHJhd0RhdGUueWVhcigpO1xuXHRcdFx0dmFyIGh0bWwgPSAnPGRpdiBjbGFzcz1cIicgKyAoIWlzVFIgPyAnY2FsZW5kYXJzLW1vbnRoLW5hdicgOiAndWktZGF0ZXBpY2tlci1tb250aC1uYXYnKSArICdcIj4nO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjYWxlbmRhci5tb250aHNJblllYXIoeWVhcik7IGkrKykge1xuXHRcdFx0XHR2YXIgb3JkID0gY2FsZW5kYXIuZnJvbU1vbnRoT2ZZZWFyKHllYXIsIGkgKyBjYWxlbmRhci5taW5Nb250aCkgLSBjYWxlbmRhci5taW5Nb250aDtcblx0XHRcdFx0dmFyIGluUmFuZ2UgPSAoKCFtaW5EYXRlIHx8IGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgaSArIGNhbGVuZGFyLm1pbk1vbnRoLFxuXHRcdFx0XHRcdGNhbGVuZGFyLmRheXNJbk1vbnRoKHllYXIsIGkgKyBjYWxlbmRhci5taW5Nb250aCkpLmNvbXBhcmVUbyhtaW5EYXRlKSA+IC0xKSAmJiAoIW1heERhdGUgfHxcblx0XHRcdFx0XHRjYWxlbmRhci5uZXdEYXRlKHllYXIsIGkgKyBjYWxlbmRhci5taW5Nb250aCwgY2FsZW5kYXIubWluRGF5KS5jb21wYXJlVG8obWF4RGF0ZSkgPCArMSkpO1xuXHRcdFx0XHRodG1sICs9ICc8ZGl2PicgKyAoaW5SYW5nZSA/ICc8YSBocmVmPVwiI1wiIGNsYXNzPVwiamQnICtcblx0XHRcdFx0XHRjYWxlbmRhci5uZXdEYXRlKHllYXIsIGkgKyBjYWxlbmRhci5taW5Nb250aCwgY2FsZW5kYXIubWluRGF5KS50b0pEKCkgKyAnXCInIDogJzxzcGFuJykgK1xuXHRcdFx0XHRcdCcgdGl0bGU9XCInICsgY2FsZW5kYXIubG9jYWwubW9udGhOYW1lc1tvcmRdICsgJ1wiPicgKyBjYWxlbmRhci5sb2NhbC5tb250aE5hbWVzU2hvcnRbb3JkXSArXG5cdFx0XHRcdFx0KGluUmFuZ2UgPyAnPC9hPicgOiAnPC9zcGFuPicpICsgJzwvZGl2Pic7XG5cdFx0XHR9XG5cdFx0XHRodG1sICs9ICc8L2Rpdj4nO1xuXHRcdFx0JChodG1sKS5pbnNlcnRBZnRlcihwaWNrZXIuZmluZCgnZGl2LmNhbGVuZGFycy1uYXYsZGl2LnVpLWRhdGVwaWNrZXItaGVhZGVyOmZpcnN0JykpLlxuXHRcdFx0XHRmaW5kKCdhJykuY2xpY2soZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIGRhdGUgPSB0YXJnZXQuY2FsZW5kYXJzUGlja2VyKCdyZXRyaWV2ZURhdGUnLCB0aGlzKTtcblx0XHRcdFx0XHR0YXJnZXQuY2FsZW5kYXJzUGlja2VyKCdzaG93TW9udGgnLCBkYXRlLnllYXIoKSwgZGF0ZS5tb250aCgpKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHQvKiogU2VsZWN0IGFuIGVudGlyZSB3ZWVrIHdoZW4gY2xpY2tpbmcgb24gYSB3ZWVrIG51bWJlci5cblx0XHRcdFVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIDxjb2RlPndlZWtPZlllYXJSZW5kZXJlcjwvY29kZT4uXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gcGlja2VyIHtqUXVlcnl9IFRoZSBjb21wbGV0ZWQgZGF0ZXBpY2tlciBkaXZpc2lvbi5cblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24uXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBleGFtcGxlIG9uU2hvdzogJC5jYWxlbmRhcnNQaWNrZXIuc2VsZWN0V2VlayAqL1xuXHRcdHNlbGVjdFdlZWs6IGZ1bmN0aW9uKHBpY2tlciwgY2FsZW5kYXIsIGluc3QpIHtcblx0XHRcdHZhciB0YXJnZXQgPSAkKHRoaXMpO1xuXHRcdFx0cGlja2VyLmZpbmQoJ3RkLmNhbGVuZGFycy13ZWVrIHNwYW4nKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQkKCc8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCInICtcblx0XHRcdFx0XHRcdHRoaXMuY2xhc3NOYW1lICsgJ1wiIHRpdGxlPVwiU2VsZWN0IHRoZSBlbnRpcmUgd2Vla1wiPicgK1xuXHRcdFx0XHRcdFx0JCh0aGlzKS50ZXh0KCkgKyAnPC9hPicpLlxuXHRcdFx0XHRcdGNsaWNrKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0dmFyIGRhdGUgPSB0YXJnZXQuY2FsZW5kYXJzUGlja2VyKCdyZXRyaWV2ZURhdGUnLCB0aGlzKTtcblx0XHRcdFx0XHRcdHZhciBkYXRlcyA9IFtkYXRlXTtcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAxOyBpIDwgY2FsZW5kYXIuZGF5c0luV2VlaygpOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0ZGF0ZXMucHVzaChkYXRlID0gZGF0ZS5uZXdEYXRlKCkuYWRkKDEsICdkJykpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCkge1xuXHRcdFx0XHRcdFx0XHRkYXRlcy5zcGxpY2UoMSwgZGF0ZXMubGVuZ3RoIC0gMik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0YXJnZXQuY2FsZW5kYXJzUGlja2VyKCdzZXREYXRlJywgZGF0ZXMpLmNhbGVuZGFyc1BpY2tlcignaGlkZScpO1xuXHRcdFx0XHRcdH0pLlxuXHRcdFx0XHRcdHJlcGxhY2VBbGwodGhpcyk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0LyoqIFNlbGVjdCBhbiBlbnRpcmUgbW9udGggd2hlbiBjbGlja2luZyBvbiB0aGUgd2VlayBoZWFkZXIuXG5cdFx0XHRVc2UgaW4gY29uanVuY3Rpb24gd2l0aCA8Y29kZT53ZWVrT2ZZZWFyUmVuZGVyZXI8L2NvZGU+LlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIHBpY2tlciB7alF1ZXJ5fSBUaGUgY29tcGxldGVkIGRhdGVwaWNrZXIgZGl2aXNpb24uXG5cdFx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uLlxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAZXhhbXBsZSBvblNob3c6ICQuY2FsZW5kYXJzUGlja2VyLnNlbGVjdE1vbnRoICovXG5cdFx0c2VsZWN0TW9udGg6IGZ1bmN0aW9uKHBpY2tlciwgY2FsZW5kYXIsIGluc3QpIHtcblx0XHRcdHZhciB0YXJnZXQgPSAkKHRoaXMpO1xuXHRcdFx0cGlja2VyLmZpbmQoJ3RoLmNhbGVuZGFycy13ZWVrJykuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0JCgnPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIHRpdGxlPVwiU2VsZWN0IHRoZSBlbnRpcmUgbW9udGhcIj4nICtcblx0XHRcdFx0XHRcdCQodGhpcykudGV4dCgpICsgJzwvYT4nKS5cblx0XHRcdFx0XHRjbGljayhmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHZhciBkYXRlID0gdGFyZ2V0LmNhbGVuZGFyc1BpY2tlcigncmV0cmlldmVEYXRlJywgJCh0aGlzKS5wYXJlbnRzKCd0YWJsZScpLlxuXHRcdFx0XHRcdFx0XHRmaW5kKCd0ZDpub3QoLmNhbGVuZGFycy13ZWVrKSAqOm5vdCguY2FsZW5kYXJzLW90aGVyLW1vbnRoKScpWzBdKTtcblx0XHRcdFx0XHRcdHZhciBkYXRlcyA9IFtkYXRlLmRheSgxKV07XG5cdFx0XHRcdFx0XHR2YXIgZGltID0gY2FsZW5kYXIuZGF5c0luTW9udGgoZGF0ZSk7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMTsgaSA8IGRpbTsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGRhdGVzLnB1c2goZGF0ZSA9IGRhdGUubmV3RGF0ZSgpLmFkZCgxLCAnZCcpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QpIHtcblx0XHRcdFx0XHRcdFx0ZGF0ZXMuc3BsaWNlKDEsIGRhdGVzLmxlbmd0aCAtIDIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGFyZ2V0LmNhbGVuZGFyc1BpY2tlcignc2V0RGF0ZScsIGRhdGVzKS5jYWxlbmRhcnNQaWNrZXIoJ2hpZGUnKTtcblx0XHRcdFx0XHR9KS5cblx0XHRcdFx0XHRhcHBlbmRUbyh0aGlzKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHQvKiogU2VsZWN0IGEgbW9udGggb25seSBpbnN0ZWFkIG9mIGEgc2luZ2xlIGRheS5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBpY2tlci5leHQuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBwaWNrZXIge2pRdWVyeX0gVGhlIGNvbXBsZXRlZCBkYXRlcGlja2VyIGRpdmlzaW9uLlxuXHRcdFx0QHBhcmFtIGNhbGVuZGFyIHtCYXNlQ2FsZW5kYXJ9IFRoZSBjYWxlbmRhciBpbXBsZW1lbnRhdGlvbi5cblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QGV4YW1wbGUgb25TaG93OiAkLmNhbGVuZGFyc1BpY2tlci5tb250aE9ubHkgKi9cblx0XHRtb250aE9ubHk6IGZ1bmN0aW9uKHBpY2tlciwgY2FsZW5kYXIsIGluc3QpIHtcblx0XHRcdHZhciB0YXJnZXQgPSAkKHRoaXMpO1xuXHRcdFx0dmFyIHNlbGVjdE1vbnRoID0gJCgnPGRpdiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj48YnV0dG9uIHR5cGU9XCJidXR0b25cIj5TZWxlY3Q8L2J1dHRvbj48L2Rpdj4nKS5cblx0XHRcdFx0aW5zZXJ0QWZ0ZXIocGlja2VyLmZpbmQoJy5jYWxlbmRhcnMtbW9udGgtcm93Omxhc3QsLnVpLWRhdGVwaWNrZXItcm93LWJyZWFrOmxhc3QnKSkuXG5cdFx0XHRcdGNoaWxkcmVuKCkuY2xpY2soZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIG1vbnRoWWVhciA9IHBpY2tlci5maW5kKCcuY2FsZW5kYXJzLW1vbnRoLXllYXI6Zmlyc3QnKS52YWwoKS5zcGxpdCgnLycpO1xuXHRcdFx0XHRcdHRhcmdldC5jYWxlbmRhcnNQaWNrZXIoJ3NldERhdGUnLCBjYWxlbmRhci5uZXdEYXRlKFxuXHRcdFx0XHRcdFx0cGFyc2VJbnQobW9udGhZZWFyWzFdLCAxMCksIHBhcnNlSW50KG1vbnRoWWVhclswXSwgMTApLCBjYWxlbmRhci5taW5EYXkpKS5cblx0XHRcdFx0XHRcdGNhbGVuZGFyc1BpY2tlcignaGlkZScpO1xuXHRcdFx0XHR9KTtcblx0XHRcdHBpY2tlci5maW5kKCcuY2FsZW5kYXJzLW1vbnRoLXJvdyB0YWJsZSwudWktZGF0ZXBpY2tlci1yb3ctYnJlYWsgdGFibGUnKS5yZW1vdmUoKTtcblx0XHR9XG5cdH0pO1xuXG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnBpY2tlci5leHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIENhbGVuZGFycyBkYXRlIHBpY2tlciBleHRlbnNpb25zIGZvciBqUXVlcnkgdjIuMC4xLlxyXG4gICBXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpIEF1Z3VzdCAyMDA5LlxyXG4gICBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCAoaHR0cDovL2tlaXRoLXdvb2QubmFtZS9saWNlbmNlLmh0bWwpIGxpY2Vuc2UuIFxyXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cclxuXHJcbihmdW5jdGlvbigkKSB7IC8vIEhpZGUgc2NvcGUsIG5vICQgY29uZmxpY3RcclxuXHJcblx0dmFyIHRoZW1lUm9sbGVyUmVuZGVyZXIgPSB7XHJcblx0XHRwaWNrZXI6ICc8ZGl2e3BvcHVwOnN0YXJ0fSBpZD1cInVpLWRhdGVwaWNrZXItZGl2XCJ7cG9wdXA6ZW5kfSBjbGFzcz1cInVpLWRhdGVwaWNrZXIgdWktd2lkZ2V0ICcgK1xyXG5cdFx0J3VpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxse2lubGluZTpzdGFydH0gdWktZGF0ZXBpY2tlci1pbmxpbmV7aW5saW5lOmVuZH1cIj4nICtcclxuXHRcdCc8ZGl2IGNsYXNzPVwidWktZGF0ZXBpY2tlci1oZWFkZXIgdWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbFwiPicgK1xyXG5cdFx0J3tsaW5rOnByZXZ9e2xpbms6dG9kYXl9e2xpbms6bmV4dH08L2Rpdj57bW9udGhzfScgK1xyXG5cdFx0J3twb3B1cDpzdGFydH08ZGl2IGNsYXNzPVwidWktZGF0ZXBpY2tlci1oZWFkZXIgdWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXggJyArXHJcblx0XHQndWktY29ybmVyLWFsbFwiPntidXR0b246Y2xlYXJ9e2J1dHRvbjpjbG9zZX08L2Rpdj57cG9wdXA6ZW5kfScgK1xyXG5cdFx0JzxkaXYgY2xhc3M9XCJ1aS1oZWxwZXItY2xlYXJmaXhcIj48L2Rpdj48L2Rpdj4nLFxyXG5cdFx0bW9udGhSb3c6ICc8ZGl2IGNsYXNzPVwidWktZGF0ZXBpY2tlci1yb3ctYnJlYWtcIj57bW9udGhzfTwvZGl2PicsXHJcblx0XHRtb250aDogJzxkaXYgY2xhc3M9XCJ1aS1kYXRlcGlja2VyLWdyb3VwXCI+JyArXHJcblx0XHQnPGRpdiBjbGFzcz1cInVpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGxcIj57bW9udGhIZWFkZXI6TU0geXl5eX08L2Rpdj4nICtcclxuXHRcdCc8dGFibGUgY2xhc3M9XCJ1aS1kYXRlcGlja2VyLWNhbGVuZGFyXCI+PHRoZWFkPnt3ZWVrSGVhZGVyfTwvdGhlYWQ+PHRib2R5Pnt3ZWVrc308L3Rib2R5PjwvdGFibGU+PC9kaXY+JyxcclxuXHRcdHdlZWtIZWFkZXI6ICc8dHI+e2RheXN9PC90cj4nLFxyXG5cdFx0ZGF5SGVhZGVyOiAnPHRoPntkYXl9PC90aD4nLFxyXG5cdFx0d2VlazogJzx0cj57ZGF5c308L3RyPicsXHJcblx0XHRkYXk6ICc8dGQ+e2RheX08L3RkPicsXHJcblx0XHRtb250aFNlbGVjdG9yOiAnLnVpLWRhdGVwaWNrZXItZ3JvdXAnLFxyXG5cdFx0ZGF5U2VsZWN0b3I6ICd0ZCcsXHJcblx0XHRydGxDbGFzczogJ3VpLWRhdGVwaWNrZXItcnRsJyxcclxuXHRcdG11bHRpQ2xhc3M6ICd1aS1kYXRlcGlja2VyLW11bHRpJyxcclxuXHRcdGRlZmF1bHRDbGFzczogJ3VpLXN0YXRlLWRlZmF1bHQnLFxyXG5cdFx0c2VsZWN0ZWRDbGFzczogJ3VpLXN0YXRlLWFjdGl2ZScsXHJcblx0XHRoaWdobGlnaHRlZENsYXNzOiAndWktc3RhdGUtaG92ZXInLFxyXG5cdFx0dG9kYXlDbGFzczogJ3VpLXN0YXRlLWhpZ2hsaWdodCcsXHJcblx0XHRvdGhlck1vbnRoQ2xhc3M6ICd1aS1kYXRlcGlja2VyLW90aGVyLW1vbnRoJyxcclxuXHRcdHdlZWtlbmRDbGFzczogJ3VpLWRhdGVwaWNrZXItd2Vlay1lbmQnLFxyXG5cdFx0Y29tbWFuZENsYXNzOiAndWktZGF0ZXBpY2tlci1jbWQnLFxyXG5cdFx0Y29tbWFuZEJ1dHRvbkNsYXNzOiAndWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsJyxcclxuXHRcdGNvbW1hbmRMaW5rQ2xhc3M6ICcnLFxyXG5cdFx0ZGlzYWJsZWRDbGFzczogJ3VpLWRhdGVwaWNrZXItZGlzYWJsZWQnXHJcblx0fTtcclxuXHJcblx0JC5leHRlbmQoJC5jYWxlbmRhcnNQaWNrZXIsIHtcclxuXHJcblx0XHQvKiogVGVtcGxhdGUgZm9yIGdlbmVyYXRpbmcgYSBjYWxlbmRhciBwaWNrZXIgc2hvd2luZyB3ZWVrIG9mIHllYXIuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBpY2tlci5leHQuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlciAqL1xyXG5cdFx0d2Vla09mWWVhclJlbmRlcmVyOiAkLmV4dGVuZCh7fSwgJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLCB7XHJcblx0XHRcdHdlZWtIZWFkZXI6ICc8dHI+PHRoIGNsYXNzPVwiY2FsZW5kYXJzLXdlZWtcIj4nICtcclxuXHRcdFx0JzxzcGFuIHRpdGxlPVwie2wxMG46d2Vla1N0YXR1c31cIj57bDEwbjp3ZWVrVGV4dH08L3NwYW4+PC90aD57ZGF5c308L3RyPicsXHJcblx0XHRcdHdlZWs6ICc8dHI+PHRkIGNsYXNzPVwiY2FsZW5kYXJzLXdlZWtcIj57d2Vla09mWWVhcn08L3RkPntkYXlzfTwvdHI+J1xyXG5cdFx0fSksXHJcblxyXG5cdFx0LyoqIFRoZW1lUm9sbGVyIHRlbXBsYXRlIGZvciBnZW5lcmF0aW5nIGEgY2FsZW5kYXIgcGlja2VyLlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXIgKi9cclxuXHRcdHRoZW1lUm9sbGVyUmVuZGVyZXI6IHRoZW1lUm9sbGVyUmVuZGVyZXIsXHJcblxyXG5cdFx0LyoqIFRoZW1lUm9sbGVyIHRlbXBsYXRlIGZvciBnZW5lcmF0aW5nIGEgY2FsZW5kYXIgcGlja2VyIHNob3dpbmcgd2VlayBvZiB5ZWFyLlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXIgKi9cclxuXHRcdHRoZW1lUm9sbGVyV2Vla09mWWVhclJlbmRlcmVyOiAkLmV4dGVuZCh7fSwgdGhlbWVSb2xsZXJSZW5kZXJlciwge1xyXG5cdFx0XHR3ZWVrSGVhZGVyOiAnPHRyPjx0aCBjbGFzcz1cInVpLXN0YXRlLWhvdmVyXCI+PHNwYW4+e2wxMG46d2Vla1RleHR9PC9zcGFuPjwvdGg+e2RheXN9PC90cj4nLFxyXG5cdFx0XHR3ZWVrOiAnPHRyPjx0ZCBjbGFzcz1cInVpLXN0YXRlLWhvdmVyXCI+e3dlZWtPZlllYXJ9PC90ZD57ZGF5c308L3RyPidcclxuXHRcdH0pLFxyXG5cclxuXHRcdC8qKiBEb24ndCBhbGxvdyB3ZWVrZW5kcyB0byBiZSBzZWxlY3RlZC5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZX0gVGhlIGN1cnJlbnQgZGF0ZS5cclxuXHRcdFx0QHJldHVybiB7b2JqZWN0fSBJbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRhdGUuXHJcblx0XHRcdEBleGFtcGxlIG9uRGF0ZTogJC5jYWxlbmRhcnNQaWNrZXIubm9XZWVrZW5kcyAqL1xyXG5cdFx0bm9XZWVrZW5kczogZnVuY3Rpb24oZGF0ZSkge1xyXG5cdFx0XHRyZXR1cm4ge3NlbGVjdGFibGU6IGRhdGUud2Vla0RheSgpfTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENoYW5nZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrIGJ5IGNsaWNraW5nIG9uIHRoZSBkYXkgaGVhZGVyLlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIHBpY2tlciB7alF1ZXJ5fSBUaGUgY29tcGxldGVkIGRhdGVwaWNrZXIgZGl2aXNpb24uXHJcblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24uXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAZXhhbXBsZSBvblNob3c6ICQuY2FsZW5kYXJzUGlja2VyLmNoYW5nZUZpcnN0RGF5ICovXHJcblx0XHRjaGFuZ2VGaXJzdERheTogZnVuY3Rpb24ocGlja2VyLCBjYWxlbmRhciwgaW5zdCkge1xyXG5cdFx0XHR2YXIgdGFyZ2V0ID0gJCh0aGlzKTtcclxuXHRcdFx0cGlja2VyLmZpbmQoJ3RoIHNwYW4nKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGlmICh0aGlzLnBhcmVudE5vZGUuY2xhc3NOYW1lLm1hdGNoKC8uKmNhbGVuZGFycy13ZWVrLiovKSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQkKCc8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCInICsgdGhpcy5jbGFzc05hbWUgK1xyXG5cdFx0XHRcdFx0XHQnXCIgdGl0bGU9XCJDaGFuZ2UgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrXCI+JyArICQodGhpcykudGV4dCgpICsgJzwvYT4nKS5cclxuXHRcdFx0XHRcdGNsaWNrKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHR2YXIgZG93ID0gcGFyc2VJbnQodGhpcy5jbGFzc05hbWUucmVwbGFjZSgvXi4qY2FsZW5kYXJzLWRvdy0oXFxkKykuKiQvLCAnJDEnKSwgMTApO1xyXG5cdFx0XHRcdFx0XHR0YXJnZXQuY2FsZW5kYXJzUGlja2VyKCdvcHRpb24nLCB7Zmlyc3REYXk6IGRvd30pO1xyXG5cdFx0XHRcdFx0fSkuXHJcblx0XHRcdFx0XHRyZXBsYWNlQWxsKHRoaXMpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgZGF0ZSBpcyBob3ZlcmVkLlxyXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyT25Ib3ZlclxyXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBkYXRlIGJlaW5nIGhvdmVyZWQgb3IgPGNvZGU+bnVsbDwvY29kZT4gb24gZXhpdC5cclxuXHRcdFx0QHBhcmFtIHNlbGVjdGFibGUge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgZGF0ZSBpcyBzZWxlY3RhYmxlLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxyXG5cdFx0XHRAZXhhbXBsZSBmdW5jdGlvbiBzaG93SG92ZXJlZChkYXRlLCBzZWxlY3RhYmxlKSB7XHJcblx0JCgnI2ZlZWRiYWNrJykudGV4dCgnWW91IGFyZSB2aWV3aW5nICcgKyAoZGF0ZSA/IGRhdGUuZm9ybWF0RGF0ZSgpIDogJ25vdGhpbmcnKSk7XHJcbiB9ICovXHJcblxyXG5cdFx0LyoqIEFkZCBhIGNhbGxiYWNrIHdoZW4gaG92ZXJpbmcgb3ZlciBkYXRlcy5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBvbkhvdmVyIHtDYWxlbmRhcnNQaWNrZXJPbkhvdmVyfSBUaGUgY2FsbGJhY2sgd2hlbiBob3ZlcmluZy5cclxuXHRcdFx0QGV4YW1wbGUgb25TaG93OiAkLmNhbGVuZGFyc1BpY2tlci5ob3ZlckNhbGxiYWNrKHNob3dIb3ZlcmVkKSAqL1xyXG5cdFx0aG92ZXJDYWxsYmFjazogZnVuY3Rpb24ob25Ib3Zlcikge1xyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24ocGlja2VyLCBjYWxlbmRhciwgaW5zdCkge1xyXG5cdFx0XHRcdGlmICgkLmlzRnVuY3Rpb24ob25Ib3ZlcikpIHtcclxuXHRcdFx0XHRcdHZhciB0YXJnZXQgPSB0aGlzO1xyXG5cdFx0XHRcdFx0dmFyIHJlbmRlcmVyID0gaW5zdC5vcHRpb25zLnJlbmRlcmVyO1xyXG5cdFx0XHRcdFx0cGlja2VyLmZpbmQocmVuZGVyZXIuZGF5U2VsZWN0b3IgKyAnIGEsICcgKyByZW5kZXJlci5kYXlTZWxlY3RvciArICcgc3BhbicpLlxyXG5cdFx0XHRcdFx0XHRob3ZlcihmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHRvbkhvdmVyLmFwcGx5KHRhcmdldCwgWyQodGFyZ2V0KS5jYWxlbmRhcnNQaWNrZXIoJ3JldHJpZXZlRGF0ZScsIHRoaXMpLFxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYSddKTtcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7IG9uSG92ZXIuYXBwbHkodGFyZ2V0LCBbXSk7IH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEhpZ2hsaWdodCB0aGUgZW50aXJlIHdlZWsgd2hlbiBob3ZlcmluZyBvdmVyIGl0LlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIHBpY2tlciB7alF1ZXJ5fSBUaGUgY29tcGxldGVkIGRhdGVwaWNrZXIgZGl2aXNpb24uXHJcblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24uXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAZXhhbXBsZSBvblNob3c6ICQuY2FsZW5kYXJzUGlja2VyLmhpZ2hsaWdodFdlZWsgKi9cclxuXHRcdGhpZ2hsaWdodFdlZWs6IGZ1bmN0aW9uKHBpY2tlciwgY2FsZW5kYXIsIGluc3QpIHtcclxuXHRcdFx0dmFyIHRhcmdldCA9IHRoaXM7XHJcblx0XHRcdHZhciByZW5kZXJlciA9IGluc3Qub3B0aW9ucy5yZW5kZXJlcjtcclxuXHRcdFx0cGlja2VyLmZpbmQocmVuZGVyZXIuZGF5U2VsZWN0b3IgKyAnIGEsICcgKyByZW5kZXJlci5kYXlTZWxlY3RvciArICcgc3BhbicpLlxyXG5cdFx0XHRcdGhvdmVyKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0JCh0aGlzKS5wYXJlbnRzKCd0cicpLmZpbmQocmVuZGVyZXIuZGF5U2VsZWN0b3IgKyAnIConKS5cclxuXHRcdFx0XHRcdFx0YWRkQ2xhc3MocmVuZGVyZXIuaGlnaGxpZ2h0ZWRDbGFzcyk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdCQodGhpcykucGFyZW50cygndHInKS5maW5kKHJlbmRlcmVyLmRheVNlbGVjdG9yICsgJyAqJykuXHJcblx0XHRcdFx0XHRcdHJlbW92ZUNsYXNzKHJlbmRlcmVyLmhpZ2hsaWdodGVkQ2xhc3MpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU2hvdyBhIHN0YXR1cyBiYXIgd2l0aCBtZXNzYWdlcy5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBwaWNrZXIge2pRdWVyeX0gVGhlIGNvbXBsZXRlZCBkYXRlcGlja2VyIGRpdmlzaW9uLlxyXG5cdFx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uLlxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QGV4YW1wbGUgb25TaG93OiAkLmNhbGVuZGFyc1BpY2tlci5zaG93U3RhdHVzICovXHJcblx0XHRzaG93U3RhdHVzOiBmdW5jdGlvbihwaWNrZXIsIGNhbGVuZGFyLCBpbnN0KSB7XHJcblx0XHRcdHZhciBpc1RSID0gKGluc3Qub3B0aW9ucy5yZW5kZXJlci5zZWxlY3RlZENsYXNzID09PSAndWktc3RhdGUtYWN0aXZlJyk7XHJcblx0XHRcdHZhciBkZWZhdWx0U3RhdHVzID0gaW5zdC5vcHRpb25zLmRlZmF1bHRTdGF0dXMgfHwgJyYjMTYwOyc7XHJcblx0XHRcdHZhciBzdGF0dXMgPSAkKCc8ZGl2IGNsYXNzPVwiJyArICghaXNUUiA/ICdjYWxlbmRhcnMtc3RhdHVzJyA6XHJcblx0XHRcdFx0J3VpLWRhdGVwaWNrZXItc3RhdHVzIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwnKSArICdcIj4nICtcclxuXHRcdFx0XHRkZWZhdWx0U3RhdHVzICsgJzwvZGl2PicpLlxyXG5cdFx0XHRcdGluc2VydEFmdGVyKHBpY2tlci5maW5kKCcuY2FsZW5kYXJzLW1vbnRoLXJvdzpsYXN0LC51aS1kYXRlcGlja2VyLXJvdy1icmVhazpsYXN0JykpO1xyXG5cdFx0XHRwaWNrZXIuZmluZCgnKlt0aXRsZV0nKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0dmFyIHRpdGxlID0gJCh0aGlzKS5hdHRyKCd0aXRsZScpO1xyXG5cdFx0XHRcdFx0JCh0aGlzKS5yZW1vdmVBdHRyKCd0aXRsZScpLmhvdmVyKFxyXG5cdFx0XHRcdFx0XHRmdW5jdGlvbigpIHsgc3RhdHVzLnRleHQodGl0bGUgfHwgZGVmYXVsdFN0YXR1cyk7IH0sXHJcblx0XHRcdFx0XHRcdGZ1bmN0aW9uKCkgeyBzdGF0dXMudGV4dChkZWZhdWx0U3RhdHVzKTsgfSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBBbGxvdyBlYXNpZXIgbmF2aWdhdGlvbiBieSBtb250aC5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBwaWNrZXIge2pRdWVyeX0gVGhlIGNvbXBsZXRlZCBkYXRlcGlja2VyIGRpdmlzaW9uLlxyXG5cdFx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uLlxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QGV4YW1wbGUgb25TaG93OiAkLmNhbGVuZGFyc1BpY2tlci5tb250aE5hdmlnYXRpb24gKi9cclxuXHRcdG1vbnRoTmF2aWdhdGlvbjogZnVuY3Rpb24ocGlja2VyLCBjYWxlbmRhciwgaW5zdCkge1xyXG5cdFx0XHR2YXIgdGFyZ2V0ID0gJCh0aGlzKTtcclxuXHRcdFx0dmFyIGlzVFIgPSAoaW5zdC5vcHRpb25zLnJlbmRlcmVyLnNlbGVjdGVkQ2xhc3MgPT09ICd1aS1zdGF0ZS1hY3RpdmUnKTtcclxuXHRcdFx0dmFyIG1pbkRhdGUgPSBpbnN0LmN1ck1pbkRhdGUoKTtcclxuXHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xyXG5cdFx0XHR2YXIgeWVhciA9IGluc3QuZHJhd0RhdGUueWVhcigpO1xyXG5cdFx0XHR2YXIgaHRtbCA9ICc8ZGl2IGNsYXNzPVwiJyArICghaXNUUiA/ICdjYWxlbmRhcnMtbW9udGgtbmF2JyA6ICd1aS1kYXRlcGlja2VyLW1vbnRoLW5hdicpICsgJ1wiPic7XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY2FsZW5kYXIubW9udGhzSW5ZZWFyKHllYXIpOyBpKyspIHtcclxuXHRcdFx0XHR2YXIgb3JkID0gY2FsZW5kYXIuZnJvbU1vbnRoT2ZZZWFyKHllYXIsIGkgKyBjYWxlbmRhci5taW5Nb250aCkgLSBjYWxlbmRhci5taW5Nb250aDtcclxuXHRcdFx0XHR2YXIgaW5SYW5nZSA9ICgoIW1pbkRhdGUgfHwgY2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBpICsgY2FsZW5kYXIubWluTW9udGgsXHJcblx0XHRcdFx0XHRjYWxlbmRhci5kYXlzSW5Nb250aCh5ZWFyLCBpICsgY2FsZW5kYXIubWluTW9udGgpKS5jb21wYXJlVG8obWluRGF0ZSkgPiAtMSkgJiYgKCFtYXhEYXRlIHx8XHJcblx0XHRcdFx0XHRjYWxlbmRhci5uZXdEYXRlKHllYXIsIGkgKyBjYWxlbmRhci5taW5Nb250aCwgY2FsZW5kYXIubWluRGF5KS5jb21wYXJlVG8obWF4RGF0ZSkgPCArMSkpO1xyXG5cdFx0XHRcdGh0bWwgKz0gJzxkaXY+JyArIChpblJhbmdlID8gJzxhIGhyZWY9XCIjXCIgY2xhc3M9XCJqZCcgK1xyXG5cdFx0XHRcdFx0Y2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBpICsgY2FsZW5kYXIubWluTW9udGgsIGNhbGVuZGFyLm1pbkRheSkudG9KRCgpICsgJ1wiJyA6ICc8c3BhbicpICtcclxuXHRcdFx0XHRcdCcgdGl0bGU9XCInICsgY2FsZW5kYXIubG9jYWwubW9udGhOYW1lc1tvcmRdICsgJ1wiPicgKyBjYWxlbmRhci5sb2NhbC5tb250aE5hbWVzU2hvcnRbb3JkXSArXHJcblx0XHRcdFx0XHQoaW5SYW5nZSA/ICc8L2E+JyA6ICc8L3NwYW4+JykgKyAnPC9kaXY+JztcclxuXHRcdFx0fVxyXG5cdFx0XHRodG1sICs9ICc8L2Rpdj4nO1xyXG5cdFx0XHQkKGh0bWwpLmluc2VydEFmdGVyKHBpY2tlci5maW5kKCdkaXYuY2FsZW5kYXJzLW5hdixkaXYudWktZGF0ZXBpY2tlci1oZWFkZXI6Zmlyc3QnKSkuXHJcblx0XHRcdFx0ZmluZCgnYScpLmNsaWNrKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0dmFyIGRhdGUgPSB0YXJnZXQuY2FsZW5kYXJzUGlja2VyKCdyZXRyaWV2ZURhdGUnLCB0aGlzKTtcclxuXHRcdFx0XHRcdHRhcmdldC5jYWxlbmRhcnNQaWNrZXIoJ3Nob3dNb250aCcsIGRhdGUueWVhcigpLCBkYXRlLm1vbnRoKCkpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU2VsZWN0IGFuIGVudGlyZSB3ZWVrIHdoZW4gY2xpY2tpbmcgb24gYSB3ZWVrIG51bWJlci5cclxuXHRcdFx0VXNlIGluIGNvbmp1bmN0aW9uIHdpdGggPGNvZGU+d2Vla09mWWVhclJlbmRlcmVyPC9jb2RlPi5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBwaWNrZXIge2pRdWVyeX0gVGhlIGNvbXBsZXRlZCBkYXRlcGlja2VyIGRpdmlzaW9uLlxyXG5cdFx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uLlxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QGV4YW1wbGUgb25TaG93OiAkLmNhbGVuZGFyc1BpY2tlci5zZWxlY3RXZWVrICovXHJcblx0XHRzZWxlY3RXZWVrOiBmdW5jdGlvbihwaWNrZXIsIGNhbGVuZGFyLCBpbnN0KSB7XHJcblx0XHRcdHZhciB0YXJnZXQgPSAkKHRoaXMpO1xyXG5cdFx0XHRwaWNrZXIuZmluZCgndGQuY2FsZW5kYXJzLXdlZWsgc3BhbicpLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0JCgnPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiJyArXHJcblx0XHRcdFx0XHRcdHRoaXMuY2xhc3NOYW1lICsgJ1wiIHRpdGxlPVwiU2VsZWN0IHRoZSBlbnRpcmUgd2Vla1wiPicgK1xyXG5cdFx0XHRcdFx0XHQkKHRoaXMpLnRleHQoKSArICc8L2E+JykuXHJcblx0XHRcdFx0XHRjbGljayhmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGRhdGUgPSB0YXJnZXQuY2FsZW5kYXJzUGlja2VyKCdyZXRyaWV2ZURhdGUnLCB0aGlzKTtcclxuXHRcdFx0XHRcdFx0dmFyIGRhdGVzID0gW2RhdGVdO1xyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMTsgaSA8IGNhbGVuZGFyLmRheXNJbldlZWsoKTsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0ZGF0ZXMucHVzaChkYXRlID0gZGF0ZS5uZXdEYXRlKCkuYWRkKDEsICdkJykpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QpIHtcclxuXHRcdFx0XHRcdFx0XHRkYXRlcy5zcGxpY2UoMSwgZGF0ZXMubGVuZ3RoIC0gMik7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0dGFyZ2V0LmNhbGVuZGFyc1BpY2tlcignc2V0RGF0ZScsIGRhdGVzKS5jYWxlbmRhcnNQaWNrZXIoJ2hpZGUnKTtcclxuXHRcdFx0XHRcdH0pLlxyXG5cdFx0XHRcdFx0cmVwbGFjZUFsbCh0aGlzKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBTZWxlY3QgYW4gZW50aXJlIG1vbnRoIHdoZW4gY2xpY2tpbmcgb24gdGhlIHdlZWsgaGVhZGVyLlxyXG5cdFx0XHRVc2UgaW4gY29uanVuY3Rpb24gd2l0aCA8Y29kZT53ZWVrT2ZZZWFyUmVuZGVyZXI8L2NvZGU+LlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIHBpY2tlciB7alF1ZXJ5fSBUaGUgY29tcGxldGVkIGRhdGVwaWNrZXIgZGl2aXNpb24uXHJcblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24uXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAZXhhbXBsZSBvblNob3c6ICQuY2FsZW5kYXJzUGlja2VyLnNlbGVjdE1vbnRoICovXHJcblx0XHRzZWxlY3RNb250aDogZnVuY3Rpb24ocGlja2VyLCBjYWxlbmRhciwgaW5zdCkge1xyXG5cdFx0XHR2YXIgdGFyZ2V0ID0gJCh0aGlzKTtcclxuXHRcdFx0cGlja2VyLmZpbmQoJ3RoLmNhbGVuZGFycy13ZWVrJykuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHQkKCc8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgdGl0bGU9XCJTZWxlY3QgdGhlIGVudGlyZSBtb250aFwiPicgK1xyXG5cdFx0XHRcdFx0XHQkKHRoaXMpLnRleHQoKSArICc8L2E+JykuXHJcblx0XHRcdFx0XHRjbGljayhmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGRhdGUgPSB0YXJnZXQuY2FsZW5kYXJzUGlja2VyKCdyZXRyaWV2ZURhdGUnLCAkKHRoaXMpLnBhcmVudHMoJ3RhYmxlJykuXHJcblx0XHRcdFx0XHRcdFx0ZmluZCgndGQ6bm90KC5jYWxlbmRhcnMtd2VlaykgKjpub3QoLmNhbGVuZGFycy1vdGhlci1tb250aCknKVswXSk7XHJcblx0XHRcdFx0XHRcdHZhciBkYXRlcyA9IFtkYXRlLmRheSgxKV07XHJcblx0XHRcdFx0XHRcdHZhciBkaW0gPSBjYWxlbmRhci5kYXlzSW5Nb250aChkYXRlKTtcclxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDE7IGkgPCBkaW07IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdGRhdGVzLnB1c2goZGF0ZSA9IGRhdGUubmV3RGF0ZSgpLmFkZCgxLCAnZCcpKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0KSB7XHJcblx0XHRcdFx0XHRcdFx0ZGF0ZXMuc3BsaWNlKDEsIGRhdGVzLmxlbmd0aCAtIDIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHRhcmdldC5jYWxlbmRhcnNQaWNrZXIoJ3NldERhdGUnLCBkYXRlcykuY2FsZW5kYXJzUGlja2VyKCdoaWRlJyk7XHJcblx0XHRcdFx0XHR9KS5cclxuXHRcdFx0XHRcdGFwcGVuZFRvKHRoaXMpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFNlbGVjdCBhIG1vbnRoIG9ubHkgaW5zdGVhZCBvZiBhIHNpbmdsZSBkYXkuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBpY2tlci5leHQuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gcGlja2VyIHtqUXVlcnl9IFRoZSBjb21wbGV0ZWQgZGF0ZXBpY2tlciBkaXZpc2lvbi5cclxuXHRcdFx0QHBhcmFtIGNhbGVuZGFyIHtCYXNlQ2FsZW5kYXJ9IFRoZSBjYWxlbmRhciBpbXBsZW1lbnRhdGlvbi5cclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBleGFtcGxlIG9uU2hvdzogJC5jYWxlbmRhcnNQaWNrZXIubW9udGhPbmx5ICovXHJcblx0XHRtb250aE9ubHk6IGZ1bmN0aW9uKHBpY2tlciwgY2FsZW5kYXIsIGluc3QpIHtcclxuXHRcdFx0dmFyIHRhcmdldCA9ICQodGhpcyk7XHJcblx0XHRcdHZhciBzZWxlY3RNb250aCA9ICQoJzxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+U2VsZWN0PC9idXR0b24+PC9kaXY+JykuXHJcblx0XHRcdFx0aW5zZXJ0QWZ0ZXIocGlja2VyLmZpbmQoJy5jYWxlbmRhcnMtbW9udGgtcm93Omxhc3QsLnVpLWRhdGVwaWNrZXItcm93LWJyZWFrOmxhc3QnKSkuXHJcblx0XHRcdFx0Y2hpbGRyZW4oKS5jbGljayhmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHZhciBtb250aFllYXIgPSBwaWNrZXIuZmluZCgnLmNhbGVuZGFycy1tb250aC15ZWFyOmZpcnN0JykudmFsKCkuc3BsaXQoJy8nKTtcclxuXHRcdFx0XHRcdHRhcmdldC5jYWxlbmRhcnNQaWNrZXIoJ3NldERhdGUnLCBjYWxlbmRhci5uZXdEYXRlKFxyXG5cdFx0XHRcdFx0XHRwYXJzZUludChtb250aFllYXJbMV0sIDEwKSwgcGFyc2VJbnQobW9udGhZZWFyWzBdLCAxMCksIGNhbGVuZGFyLm1pbkRheSkpLlxyXG5cdFx0XHRcdFx0XHRjYWxlbmRhcnNQaWNrZXIoJ2hpZGUnKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0cGlja2VyLmZpbmQoJy5jYWxlbmRhcnMtbW9udGgtcm93IHRhYmxlLC51aS1kYXRlcGlja2VyLXJvdy1icmVhayB0YWJsZScpLnJlbW92ZSgpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.full.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.full.js index b0b1a7f837c..538d34e82e3 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.full.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.full.js @@ -2108,4 +2108,4 @@ })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmZ1bGwuanMiLCJqcXVlcnkuY2FsZW5kYXJzLnBpY2tlci5qcyIsImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzd4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZnVsbC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQ2FsZW5kYXJzIGRhdGUgcGlja2VyIGZvciBqUXVlcnkgdjIuMC4xLlxuICAgV3JpdHRlbiBieSBLZWl0aCBXb29kIChrYndvb2R7YXR9aWluZXQuY29tLmF1KSBBdWd1c3QgMjAwOS5cbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cblxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxuXG5cdHZhciBwbHVnaW5OYW1lID0gJ2NhbGVuZGFyc1BpY2tlcic7XG5cblxuXHQvKiogQ3JlYXRlIHRoZSBjYWxlbmRhcnMgZGF0ZXBpY2tlciBwbHVnaW4uXG5cdFx0PHA+U2V0cyBhbiBpbnB1dCBmaWVsZCB0byBwb3B1cCBhIGNhbGVuZGFyIGZvciBkYXRlIGVudHJ5LFxuXHRcdFx0b3IgYSA8Y29kZT5kaXY8L2NvZGU+IG9yIDxjb2RlPnNwYW48L2NvZGU+IHRvIHNob3cgYW4gaW5saW5lIGNhbGVuZGFyLjwvcD5cblx0XHQ8cD5FeHBlY3RzIEhUTUwgbGlrZTo8L3A+XG5cdFx0PHByZT4mbHQ7aW5wdXQgdHlwZT1cInRleHRcIj4gb3IgJmx0O2Rpdj4mbHQ7L2Rpdj48L3ByZT5cblx0XHQ8cD5Qcm92aWRlIGlubGluZSBjb25maWd1cmF0aW9uIGxpa2U6PC9wPlxuXHRcdDxwcmU+Jmx0O2lucHV0IHR5cGU9XCJ0ZXh0XCIgZGF0YS1jYWxlbmRhcnNQaWNrZXI9XCJuYW1lOiAndmFsdWUnXCIvPjwvcHJlPlxuXHQgXHRAY2xhc3MgQ2FsZW5kYXJzUGlja2VyXG5cdFx0QGF1Z21lbnRzIEpRUGx1Z2luXG5cdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuY2FsZW5kYXJzUGlja2VyKClcbiAkKHNlbGVjdG9yKS5jYWxlbmRhcnNQaWNrZXIoe21pbkRhdGU6IDAsIG1heERhdGU6ICcrMW0gKzF3J30pICovXG5cdCQuSlFQbHVnaW4uY3JlYXRlUGx1Z2luKHtcblx0XG5cdFx0LyoqIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4uXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyICovXG5cdFx0bmFtZTogcGx1Z2luTmFtZSxcblx0XHRcblx0XHQvKiogRGVmYXVsdCB0ZW1wbGF0ZSBmb3IgZ2VuZXJhdGluZyBhIGRhdGVwaWNrZXIuXG5cdFx0XHRJbnNlcnQgYW55d2hlcmU6XG5cdFx0XHQ8dWw+XG5cdFx0XHQ8bGk+J3tsMTBuOm5hbWV9JyB0byBpbnNlcnQgbG9jYWxpc2VkIHZhbHVlIGZvciBuYW1lLDwvbGk+XG5cdFx0XHQ8bGk+J3tsaW5rOm5hbWV9JyB0byBpbnNlcnQgYSBsaW5rIHRyaWdnZXIgZm9yIGNvbW1hbmQgbmFtZSw8L2xpPlxuXHRcdFx0PGxpPid7YnV0dG9uOm5hbWV9JyB0byBpbnNlcnQgYSBidXR0b24gdHJpZ2dlciBmb3IgY29tbWFuZCBuYW1lLDwvbGk+XG5cdFx0XHQ8bGk+J3twb3B1cDpzdGFydH0uLi57cG9wdXA6ZW5kfScgdG8gbWFyayBhIHNlY3Rpb24gZm9yIGluY2x1c2lvbiBpbiBhIHBvcHVwIGRhdGVwaWNrZXIgb25seSw8L2xpPlxuXHRcdFx0PGxpPid7aW5saW5lOnN0YXJ0fS4uLntpbmxpbmU6ZW5kfScgdG8gbWFyayBhIHNlY3Rpb24gZm9yIGluY2x1c2lvbiBpbiBhbiBpbmxpbmUgZGF0ZXBpY2tlciBvbmx5LjwvbGk+XG5cdFx0XHQ8L3VsPlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByb3BlcnR5IHBpY2tlciB7c3RyaW5nfSBPdmVyYWxsIHN0cnVjdHVyZTogJ3ttb250aHN9JyB0byBpbnNlcnQgY2FsZW5kYXIgbW9udGhzLlxuXHRcdFx0QHByb3BlcnR5IG1vbnRoUm93IHtzdHJpbmd9IE9uZSByb3cgb2YgbW9udGhzOiAne21vbnRoc30nIHRvIGluc2VydCBjYWxlbmRhciBtb250aHMuXG5cdFx0XHRAcHJvcGVydHkgbW9udGgge3N0cmluZ30gQSBzaW5nbGUgbW9udGg6ICd7bW9udGhIZWFkZXI8ZW0+OmRhdGVGb3JtYXQ8L2VtPn0nIHRvIGluc2VydCB0aGUgbW9udGggaGVhZGVyIC1cblx0XHRcdFx0XHRcdDxlbT5kYXRlRm9ybWF0PC9lbT4gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvICdNTSB5eXl5Jyxcblx0XHRcdFx0XHRcdCd7d2Vla0hlYWRlcn0nIHRvIGluc2VydCBhIHdlZWsgaGVhZGVyLCAne3dlZWtzfScgdG8gaW5zZXJ0IHRoZSBtb250aCdzIHdlZWtzLlxuXHRcdFx0QHByb3BlcnR5IHdlZWtIZWFkZXIge3N0cmluZ30gQSB3ZWVrIGhlYWRlcjogJ3tkYXlzfScgdG8gaW5zZXJ0IGluZGl2aWR1YWwgZGF5IG5hbWVzLlxuXHRcdFx0QHByb3BlcnR5IGRheUhlYWRlciB7c3RyaW5nfSBJbmRpdmlkdWFsIGRheSBoZWFkZXI6ICd7ZGF5fScgdG8gaW5zZXJ0IGRheSBuYW1lLlxuXHRcdFx0QHByb3BlcnR5IHdlZWsge3N0cmluZ30gT25lIHdlZWsgb2YgdGhlIG1vbnRoOiAne2RheXN9JyB0byBpbnNlcnQgdGhlIHdlZWsncyBkYXlzLFxuXHRcdFx0XHRcdFx0J3t3ZWVrT2ZZZWFyfScgdG8gaW5zZXJ0IHdlZWsgb2YgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBkYXkge3N0cmluZ30gQW4gaW5kaXZpZHVhbCBkYXk6ICd7ZGF5fScgdG8gaW5zZXJ0IGRheSB2YWx1ZS5cblx0XHRcdEBwcm9wZXJ0eSBtb250aFNlbGVjdG9yIHtzdHJpbmd9IGpRdWVyeSBzZWxlY3RvciwgcmVsYXRpdmUgdG8gcGlja2VyLCBmb3IgYSBzaW5nbGUgbW9udGguXG5cdFx0XHRAcHJvcGVydHkgZGF5U2VsZWN0b3Ige3N0cmluZ30galF1ZXJ5IHNlbGVjdG9yLCByZWxhdGl2ZSB0byBwaWNrZXIsIGZvciBpbmRpdmlkdWFsIGRheXMuXG5cdFx0XHRAcHJvcGVydHkgcnRsQ2xhc3Mge3N0cmluZ30gQ2xhc3MgZm9yIHJpZ2h0LXRvLWxlZnQgKFJUTCkgbGFuZ3VhZ2VzLlxuXHRcdFx0QHByb3BlcnR5IG11bHRpQ2xhc3Mge3N0cmluZ30gQ2xhc3MgZm9yIG11bHRpLW1vbnRoIGRhdGVwaWNrZXJzLlxuXHRcdFx0QHByb3BlcnR5IGRlZmF1bHRDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3Igc2VsZWN0YWJsZSBkYXRlcy5cblx0XHRcdEBwcm9wZXJ0eSBzZWxlY3RlZENsYXNzIHtzdHJpbmd9IENsYXNzIGZvciBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZXMuXG5cdFx0XHRAcHJvcGVydHkgaGlnaGxpZ2h0ZWRDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgaGlnaGxpZ2h0ZWQgZGF0ZXMuXG5cdFx0XHRAcHJvcGVydHkgdG9kYXlDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgdG9kYXkuXG5cdFx0XHRAcHJvcGVydHkgb3RoZXJNb250aENsYXNzIHtzdHJpbmd9IENsYXNzIGZvciBkYXlzIGZyb20gb3RoZXIgbW9udGhzLlxuXHRcdFx0QHByb3BlcnR5IHdlZWtlbmRDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgZGF5cyBvbiB3ZWVrZW5kcy5cblx0XHRcdEBwcm9wZXJ0eSBjb21tYW5kQ2xhc3Mge3N0cmluZ30gQ2xhc3MgcHJlZml4IGZvciBjb21tYW5kcy5cblx0XHRcdEBwcm9wZXJ0eSBjb21tYW5kQnV0dG9uQ2xhc3Mge3N0cmluZ30gRXh0cmEgY2xhc3MoZXMpIGZvciBjb21tYW5kcyB0aGF0IGFyZSBidXR0b25zLlxuXHRcdFx0QHByb3BlcnR5IGNvbW1hbmRMaW5rQ2xhc3Mge3N0cmluZ30gRXh0cmEgY2xhc3MoZXMpIGZvciBjb21tYW5kcyB0aGF0IGFyZSBsaW5rcy5cblx0XHRcdEBwcm9wZXJ0eSBkaXNhYmxlZENsYXNzIHtzdHJpbmd9IENsYXNzIGZvciBkaXNhYmxlZCBjb21tYW5kcy4gKi9cblx0XHRkZWZhdWx0UmVuZGVyZXI6IHtcblx0XHRcdHBpY2tlcjogJzxkaXYgY2xhc3M9XCJjYWxlbmRhcnNcIj4nICtcblx0XHRcdCc8ZGl2IGNsYXNzPVwiY2FsZW5kYXJzLW5hdlwiPntsaW5rOnByZXZ9e2xpbms6dG9kYXl9e2xpbms6bmV4dH08L2Rpdj57bW9udGhzfScgK1xuXHRcdFx0J3twb3B1cDpzdGFydH08ZGl2IGNsYXNzPVwiY2FsZW5kYXJzLWN0cmxcIj57bGluazpjbGVhcn17bGluazpjbG9zZX08L2Rpdj57cG9wdXA6ZW5kfScgK1xuXHRcdFx0JzxkaXYgY2xhc3M9XCJjYWxlbmRhcnMtY2xlYXItZml4XCI+PC9kaXY+PC9kaXY+Jyxcblx0XHRcdG1vbnRoUm93OiAnPGRpdiBjbGFzcz1cImNhbGVuZGFycy1tb250aC1yb3dcIj57bW9udGhzfTwvZGl2PicsXG5cdFx0XHRtb250aDogJzxkaXYgY2xhc3M9XCJjYWxlbmRhcnMtbW9udGhcIj48ZGl2IGNsYXNzPVwiY2FsZW5kYXJzLW1vbnRoLWhlYWRlclwiPnttb250aEhlYWRlcn08L2Rpdj4nICtcblx0XHRcdCc8dGFibGU+PHRoZWFkPnt3ZWVrSGVhZGVyfTwvdGhlYWQ+PHRib2R5Pnt3ZWVrc308L3Rib2R5PjwvdGFibGU+PC9kaXY+Jyxcblx0XHRcdHdlZWtIZWFkZXI6ICc8dHI+e2RheXN9PC90cj4nLFxuXHRcdFx0ZGF5SGVhZGVyOiAnPHRoPntkYXl9PC90aD4nLFxuXHRcdFx0d2VlazogJzx0cj57ZGF5c308L3RyPicsXG5cdFx0XHRkYXk6ICc8dGQ+e2RheX08L3RkPicsXG5cdFx0XHRtb250aFNlbGVjdG9yOiAnLmNhbGVuZGFycy1tb250aCcsXG5cdFx0XHRkYXlTZWxlY3RvcjogJ3RkJyxcblx0XHRcdHJ0bENsYXNzOiAnY2FsZW5kYXJzLXJ0bCcsXG5cdFx0XHRtdWx0aUNsYXNzOiAnY2FsZW5kYXJzLW11bHRpJyxcblx0XHRcdGRlZmF1bHRDbGFzczogJycsXG5cdFx0XHRzZWxlY3RlZENsYXNzOiAnY2FsZW5kYXJzLXNlbGVjdGVkJyxcblx0XHRcdGhpZ2hsaWdodGVkQ2xhc3M6ICdjYWxlbmRhcnMtaGlnaGxpZ2h0Jyxcblx0XHRcdHRvZGF5Q2xhc3M6ICdjYWxlbmRhcnMtdG9kYXknLFxuXHRcdFx0b3RoZXJNb250aENsYXNzOiAnY2FsZW5kYXJzLW90aGVyLW1vbnRoJyxcblx0XHRcdHdlZWtlbmRDbGFzczogJ2NhbGVuZGFycy13ZWVrZW5kJyxcblx0XHRcdGNvbW1hbmRDbGFzczogJ2NhbGVuZGFycy1jbWQnLFxuXHRcdFx0Y29tbWFuZEJ1dHRvbkNsYXNzOiAnJyxcblx0XHRcdGNvbW1hbmRMaW5rQ2xhc3M6ICcnLFxuXHRcdFx0ZGlzYWJsZWRDbGFzczogJ2NhbGVuZGFycy1kaXNhYmxlZCdcblx0XHR9LFxuXHRcblx0XHQvKiogQ29tbWFuZCBhY3Rpb25zIHRoYXQgbWF5IGJlIGFkZGVkIHRvIGEgbGF5b3V0IGJ5IG5hbWUuXG5cdFx0XHQ8dWw+XG5cdFx0XHQ8bGk+cHJldiAtIFNob3cgdGhlIHByZXZpb3VzIG1vbnRoIChiYXNlZCBvbiA8Y29kZT5tb250aHNUb1N0ZXA8L2NvZGU+IG9wdGlvbikgLSA8ZW0+UGFnZVVwPC9lbT48L2xpPlxuXHRcdFx0PGxpPnByZXZKdW1wIC0gU2hvdyB0aGUgcHJldmlvdXMgeWVhciAoYmFzZWQgb24gPGNvZGU+bW9udGhzVG9KdW1wPC9jb2RlPiBvcHRpb24pIC0gPGVtPkN0cmwrUGFnZVVwPC9lbT48L2xpPlxuXHRcdFx0PGxpPm5leHQgLSBTaG93IHRoZSBuZXh0IG1vbnRoIChiYXNlZCBvbiA8Y29kZT5tb250aHNUb1N0ZXA8L2NvZGU+IG9wdGlvbikgLSA8ZW0+UGFnZURvd248L2VtPjwvbGk+XG5cdFx0XHQ8bGk+bmV4dEp1bXAgLSBTaG93IHRoZSBuZXh0IHllYXIgKGJhc2VkIG9uIDxjb2RlPm1vbnRoc1RvSnVtcDwvY29kZT4gb3B0aW9uKSAtIDxlbT5DdHJsK1BhZ2VEb3duPC9lbT48L2xpPlxuXHRcdFx0PGxpPmN1cnJlbnQgLSBTaG93IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbW9udGggb3IgdG9kYXkncyBpZiBub25lIHNlbGVjdGVkIC0gPGVtPkN0cmwrSG9tZTwvZW0+PC9saT5cblx0XHRcdDxsaT50b2RheSAtIFNob3cgdG9kYXkncyBtb250aCAtIDxlbT5DdHJsK0hvbWU8L2VtPjwvbGk+XG5cdFx0XHQ8bGk+Y2xlYXIgLSBFcmFzZSB0aGUgZGF0ZSBhbmQgY2xvc2UgdGhlIGRhdGVwaWNrZXIgcG9wdXAgLSA8ZW0+Q3RybCtFbmQ8L2VtPjwvbGk+XG5cdFx0XHQ8bGk+Y2xvc2UgLSBDbG9zZSB0aGUgZGF0ZXBpY2tlciBwb3B1cCAtIDxlbT5Fc2M8L2VtPjwvbGk+XG5cdFx0XHQ8bGk+cHJldldlZWsgLSBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHByZXZpb3VzIHdlZWsgLSA8ZW0+Q3RybCtVcDwvZW0+PC9saT5cblx0XHRcdDxsaT5wcmV2RGF5IC0gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBwcmV2aW91cyBkYXkgLSA8ZW0+Q3RybCtMZWZ0PC9lbT48L2xpPlxuXHRcdFx0PGxpPm5leHREYXkgLSBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgZGF5IC0gPGVtPkN0cmwrUmlnaHQ8L2VtPjwvbGk+XG5cdFx0XHQ8bGk+bmV4dFdlZWsgLSBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgd2VlayAtIDxlbT5DdHJsK0Rvd248L2VtPjwvbGk+XG5cdFx0XHQ8L3VsPlxuXHRcdFx0VGhlIGNvbW1hbmQgbmFtZSBpcyB0aGUga2V5IG5hbWUgYW5kIGlzIHVzZWQgdG8gYWRkIHRoZSBjb21tYW5kIHRvIGEgbGF5b3V0XG5cdFx0XHR3aXRoICd7YnV0dG9uOm5hbWV9JyBvciAne2xpbms6bmFtZX0nLiBFYWNoIGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJvcGVydHkgdGV4dCB7c3RyaW5nfSBUaGUgZmllbGQgaW4gdGhlIHJlZ2lvbmFsIHNldHRpbmdzIGZvciB0aGUgZGlzcGxheWVkIHRleHQuXG5cdFx0XHRAcHJvcGVydHkgc3RhdHVzIHtzdHJpbmd9IFRoZSBmaWVsZCBpbiB0aGUgcmVnaW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBzdGF0dXMgdGV4dC5cblx0XHRcdEBwcm9wZXJ0eSBrZXlzdHJva2Uge29iamVjdH0gVGhlIGtleXN0cm9rZSB0byB0cmlnZ2VyIHRoZSBhY3Rpb24sIHdpdGggYXR0cmlidXRlczpcblx0XHRcdFx0PGNvZGU+a2V5Q29kZTwvY29kZT4ge251bWJlcn0gdGhlIGNvZGUgZm9yIHRoZSBrZXlzdHJva2UsXG5cdFx0XHRcdDxjb2RlPmN0cmxLZXk8L2NvZGU+IHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiA8ZW0+Q3RybDwvZW0+IGlzIHJlcXVpcmVkLFxuXHRcdFx0XHQ8Y29kZT5hbHRLZXk8L2NvZGU+IHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiA8ZW0+QWx0PC9lbT4gaXMgcmVxdWlyZWQsXG5cdFx0XHRcdDxjb2RlPnNoaWZ0S2V5PC9jb2RlPiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgPGVtPlNoaWZ0PC9lbT4gaXMgcmVxdWlyZWQuXG5cdFx0XHRAcHJvcGVydHkgZW5hYmxlZCB7Q2FsZW5kYXJzUGlja2VyQ29tbWFuZEVuYWJsZWR9IFRoZSBmdW5jdGlvbiB0aGF0IGluZGljYXRlcyB0aGUgY29tbWFuZCBpcyBlbmFibGVkLlxuXHRcdFx0QHByb3BlcnR5IGRhdGUge0NhbGVuZGFyc1BpY2tlckNvbW1hbmREYXRlfSBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBkYXRlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjdGlvbi5cblx0XHRcdEBwcm9wZXJ0eSBhY3Rpb24ge0NhbGVuZGFyc1BpY2tlckNvbW1hbmRBY3Rpb259IFRoZSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgdGhlIGFjdGlvbi4gKi9cblx0XHRjb21tYW5kczoge1xuXHRcdFx0cHJldjoge3RleHQ6ICdwcmV2VGV4dCcsIHN0YXR1czogJ3ByZXZTdGF0dXMnLCAvLyBQcmV2aW91cyBtb250aFxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzM30sIC8vIFBhZ2UgdXBcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XG5cdFx0XHRcdFx0cmV0dXJuICghbWluRGF0ZSB8fCBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cblx0XHRcdFx0XHRcdGFkZCgxIC0gaW5zdC5vcHRpb25zLm1vbnRoc1RvU3RlcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXG5cdFx0XHRcdFx0XHRkYXkoaW5zdC5vcHRpb25zLmNhbGVuZGFyLm1pbkRheSkuYWRkKC0xLCAnZCcpLmNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpOyB9LFxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdFx0YWRkKC1pbnN0Lm9wdGlvbnMubW9udGhzVG9TdGVwIC0gaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKS5cblx0XHRcdFx0XHRcdGRheShpbnN0Lm9wdGlvbnMuY2FsZW5kYXIubWluRGF5KTsgfSxcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0cGx1Z2luLmNoYW5nZU1vbnRoKHRoaXMsIC1pbnN0Lm9wdGlvbnMubW9udGhzVG9TdGVwKTsgfVxuXHRcdFx0fSxcblx0XHRcdHByZXZKdW1wOiB7dGV4dDogJ3ByZXZKdW1wVGV4dCcsIHN0YXR1czogJ3ByZXZKdW1wU3RhdHVzJywgLy8gUHJldmlvdXMgeWVhclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzMywgY3RybEtleTogdHJ1ZX0sIC8vIEN0cmwgKyBQYWdlIHVwXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuY3VyTWluRGF0ZSgpO1xuXHRcdFx0XHRcdHJldHVybiAoIW1pbkRhdGUgfHwgaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXG5cdFx0XHRcdFx0XHRhZGQoMSAtIGluc3Qub3B0aW9ucy5tb250aHNUb0p1bXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpLmFkZCgtMSwgJ2QnKS5jb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKTsgfSxcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHJldHVybiBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cblx0XHRcdFx0XHRcdGFkZCgtaW5zdC5vcHRpb25zLm1vbnRoc1RvSnVtcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXG5cdFx0XHRcdFx0XHRkYXkoaW5zdC5vcHRpb25zLmNhbGVuZGFyLm1pbkRheSk7IH0sXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHBsdWdpbi5jaGFuZ2VNb250aCh0aGlzLCAtaW5zdC5vcHRpb25zLm1vbnRoc1RvSnVtcCk7IH1cblx0XHRcdH0sXG5cdFx0XHRuZXh0OiB7dGV4dDogJ25leHRUZXh0Jywgc3RhdHVzOiAnbmV4dFN0YXR1cycsIC8vIE5leHQgbW9udGhcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzR9LCAvLyBQYWdlIGRvd25cblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcblx0XHRcdFx0XHRyZXR1cm4gKCFtYXhEYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdFx0YWRkKGluc3Qub3B0aW9ucy5tb250aHNUb1N0ZXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpLmNvbXBhcmVUbyhtYXhEYXRlKSAhPT0gKzEpOyB9LFxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdFx0YWRkKGluc3Qub3B0aW9ucy5tb250aHNUb1N0ZXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpOyB9LFxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdFx0XHRwbHVnaW4uY2hhbmdlTW9udGgodGhpcywgaW5zdC5vcHRpb25zLm1vbnRoc1RvU3RlcCk7IH1cblx0XHRcdH0sXG5cdFx0XHRuZXh0SnVtcDoge3RleHQ6ICduZXh0SnVtcFRleHQnLCBzdGF0dXM6ICduZXh0SnVtcFN0YXR1cycsIC8vIE5leHQgeWVhclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzNCwgY3RybEtleTogdHJ1ZX0sIC8vIEN0cmwgKyBQYWdlIGRvd25cblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcblx0XHRcdFx0XHRyZXR1cm4gKCFtYXhEYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdFx0YWRkKGluc3Qub3B0aW9ucy5tb250aHNUb0p1bXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpLmNvbXBhcmVUbyhtYXhEYXRlKSAhPT0gKzEpO1x0fSxcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHJldHVybiBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cblx0XHRcdFx0XHRcdGFkZChpbnN0Lm9wdGlvbnMubW9udGhzVG9KdW1wIC0gaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKS5cblx0XHRcdFx0XHRcdGRheShpbnN0Lm9wdGlvbnMuY2FsZW5kYXIubWluRGF5KTsgfSxcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0cGx1Z2luLmNoYW5nZU1vbnRoKHRoaXMsIGluc3Qub3B0aW9ucy5tb250aHNUb0p1bXApOyB9XG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudDoge3RleHQ6ICdjdXJyZW50VGV4dCcsIHN0YXR1czogJ2N1cnJlbnRTdGF0dXMnLCAvLyBDdXJyZW50IG1vbnRoXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDM2LCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIEhvbWVcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XG5cdFx0XHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xuXHRcdFx0XHRcdHZhciBjdXJEYXRlID0gaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpO1xuXHRcdFx0XHRcdHJldHVybiAoIW1pbkRhdGUgfHwgY3VyRGF0ZS5jb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKSAmJlxuXHRcdFx0XHRcdFx0KCFtYXhEYXRlIHx8IGN1ckRhdGUuY29tcGFyZVRvKG1heERhdGUpICE9PSArMSk7IH0sXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpOyB9LFxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdFx0XHR2YXIgY3VyRGF0ZSA9IGluc3Quc2VsZWN0ZWREYXRlc1swXSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKTtcblx0XHRcdFx0XHRwbHVnaW4uc2hvd01vbnRoKHRoaXMsIGN1ckRhdGUueWVhcigpLCBjdXJEYXRlLm1vbnRoKCkpOyB9XG5cdFx0XHR9LFxuXHRcdFx0dG9kYXk6IHt0ZXh0OiAndG9kYXlUZXh0Jywgc3RhdHVzOiAndG9kYXlTdGF0dXMnLCAvLyBUb2RheSdzIG1vbnRoXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDM2LCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIEhvbWVcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XG5cdFx0XHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xuXHRcdFx0XHRcdHJldHVybiAoIW1pbkRhdGUgfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCkuY29tcGFyZVRvKG1pbkRhdGUpICE9PSAtMSkgJiZcblx0XHRcdFx0XHRcdCghbWF4RGF0ZSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKS5jb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKTsgfSxcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCk7IH0sXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkgeyBwbHVnaW4uc2hvd01vbnRoKHRoaXMpOyB9XG5cdFx0XHR9LFxuXHRcdFx0Y2xlYXI6IHt0ZXh0OiAnY2xlYXJUZXh0Jywgc3RhdHVzOiAnY2xlYXJTdGF0dXMnLCAvLyBDbGVhciB0aGUgZGF0ZXBpY2tlclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzNSwgY3RybEtleTogdHJ1ZX0sIC8vIEN0cmwgKyBFbmRcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gdHJ1ZTsgfSxcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gbnVsbDsgfSxcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7IHBsdWdpbi5jbGVhcih0aGlzKTsgfVxuXHRcdFx0fSxcblx0XHRcdGNsb3NlOiB7dGV4dDogJ2Nsb3NlVGV4dCcsIHN0YXR1czogJ2Nsb3NlU3RhdHVzJywgLy8gQ2xvc2UgdGhlIGRhdGVwaWNrZXJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMjd9LCAvLyBFc2NhcGVcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gdHJ1ZTsgfSxcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gbnVsbDsgfSxcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7IHBsdWdpbi5oaWRlKHRoaXMpOyB9XG5cdFx0XHR9LFxuXHRcdFx0cHJldldlZWs6IHt0ZXh0OiAncHJldldlZWtUZXh0Jywgc3RhdHVzOiAncHJldldlZWtTdGF0dXMnLCAvLyBQcmV2aW91cyB3ZWVrXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDM4LCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIFVwXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuY3VyTWluRGF0ZSgpO1xuXHRcdFx0XHRcdHJldHVybiAoIW1pbkRhdGUgfHwgaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXG5cdFx0XHRcdFx0XHRhZGQoLWluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCksICdkJykuY29tcGFyZVRvKG1pbkRhdGUpICE9PSAtMSk7IH0sXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHsgcmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdGFkZCgtaW5zdC5vcHRpb25zLmNhbGVuZGFyLmRheXNJbldlZWsoKSwgJ2QnKTsgfSxcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7IHBsdWdpbi5jaGFuZ2VEYXkodGhpcywgLWluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCkpOyB9XG5cdFx0XHR9LFxuXHRcdFx0cHJldkRheToge3RleHQ6ICdwcmV2RGF5VGV4dCcsIHN0YXR1czogJ3ByZXZEYXlTdGF0dXMnLCAvLyBQcmV2aW91cyBkYXlcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzcsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgTGVmdFxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0dmFyIG1pbkRhdGUgPSBpbnN0LmN1ck1pbkRhdGUoKTtcblx0XHRcdFx0XHRyZXR1cm4gKCFtaW5EYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZCgtMSwgJ2QnKS5cblx0XHRcdFx0XHRcdGNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpOyB9LFxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5hZGQoLTEsICdkJyk7IH0sXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkgeyBwbHVnaW4uY2hhbmdlRGF5KHRoaXMsIC0xKTsgfVxuXHRcdFx0fSxcblx0XHRcdG5leHREYXk6IHt0ZXh0OiAnbmV4dERheVRleHQnLCBzdGF0dXM6ICduZXh0RGF5U3RhdHVzJywgLy8gTmV4dCBkYXlcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzksIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgUmlnaHRcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcblx0XHRcdFx0XHRyZXR1cm4gKCFtYXhEYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZCgxLCAnZCcpLlxuXHRcdFx0XHRcdFx0Y29tcGFyZVRvKG1heERhdGUpICE9PSArMSk7IH0sXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHsgcmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZCgxLCAnZCcpOyB9LFxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHsgcGx1Z2luLmNoYW5nZURheSh0aGlzLCAxKTsgfVxuXHRcdFx0fSxcblx0XHRcdG5leHRXZWVrOiB7dGV4dDogJ25leHRXZWVrVGV4dCcsIHN0YXR1czogJ25leHRXZWVrU3RhdHVzJywgLy8gTmV4dCB3ZWVrXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDQwLCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIERvd25cblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcblx0XHRcdFx0XHRyZXR1cm4gKCFtYXhEYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdFx0YWRkKGluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCksICdkJykuY29tcGFyZVRvKG1heERhdGUpICE9PSArMSk7IH0sXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHsgcmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdGFkZChpbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGF5c0luV2VlaygpLCAnZCcpOyB9LFxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHsgcGx1Z2luLmNoYW5nZURheSh0aGlzLCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGF5c0luV2VlaygpKTsgfVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjb21tYW5kIGlzIGVuYWJsZWQuXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyQ29tbWFuZEVuYWJsZWRcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBjb21tYW5kIGlzIGVuYWJsZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXG5cdFx0XHRAZXhhbXBsZSBlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XG5cdHJldHVybiAhIWluc3QuY3VyTWluRGF0ZSgpO1xuIH0gKi9cblxuXHRcdC8qKiBDYWxjdWxhdGUgdGhlIHJlcHJlc2VudGF0aXZlIGRhdGUgZm9yIGEgY29tbWFuZC5cblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJDb21tYW5kRGF0ZVxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gQSBkYXRlIGFwcHJvcHJpYXRlIGZvciB0aGlzIGNvbW1hbmQuXG5cdFx0XHRAZXhhbXBsZSBkYXRlOiBmdW5jdGlvbihpbnN0KSB7XG5cdHJldHVybiBpbnN0LmN1ck1pbkRhdGUoKTtcbiB9ICovXG5cblx0XHQvKiogUGVyZm9ybSB0aGUgYWN0aW9uIGZvciBhIGNvbW1hbmQuXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyQ29tbWFuZEFjdGlvblxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAZXhhbXBsZSBkYXRlOiBmdW5jdGlvbihpbnN0KSB7XG5cdCQuZGF0ZXBpY2suc2V0RGF0ZShpbnN0LmVsZW0sIGluc3QuY3VyTWluRGF0ZSgpKTtcbiB9ICovXG5cblx0XHQvKiogQ2FsY3VsYXRlIHRoZSB3ZWVrIG9mIHRoZSB5ZWFyIGZvciBhIGRhdGUuXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyQ2FsY3VsYXRlV2Vla1xuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgZGF0ZSB0byBldmFsdWF0ZS5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIHdlZWsgb2YgdGhlIHllYXIuXG5cdFx0XHRAZXhhbXBsZSBjYWxjdWxhdGVXZWVrOiBmdW5jdGlvbihkYXRlKSB7XG5cdHZhciBzdGFydFllYXIgPSAkLmNhbGVuZGFycy5uZXdEYXRlKGRhdGUueWVhcigpLCAxLCAxKTtcblx0cmV0dXJuIE1hdGguZmxvb3IoKGRhdGUuZGF5T2ZZZWFyKCkgLSBzdGFydFllYXIuZGF5T2ZZZWFyKCkpIC8gNykgKyAxO1xuIH0gKi9cblxuXHRcdC8qKiBQcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IGFuIGluZGl2aWR1YWwgZGF0ZSBzaG93biBpbiB0aGUgY2FsZW5kYXIuXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyT25EYXRlXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBkYXRlIHRvIGV2YWx1YXRlLlxuXHRcdFx0QHJldHVybiB7b2JqZWN0fSBJbmZvcm1hdGlvbiBhYm91dCB0aGF0IGRhdGUsIHdpdGggdGhlIHByb3BlcnRpZXMgYWJvdmUuXG5cdFx0XHRAcHJvcGVydHkgc2VsZWN0YWJsZSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBkYXRlIGNhbiBiZSBzZWxlY3RlZC5cblx0XHRcdEBwcm9wZXJ0eSBkYXRlQ2xhc3Mge3N0cmluZ30gQ2xhc3MoZXMpIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGRhdGUuXG5cdFx0XHRAcHJvcGVydHkgY29udGVudCB7c3RyaW5nfSBUaGUgZGF0ZSBjZWxsIGNvbnRlbnQuXG5cdFx0XHRAcHJvcGVydHkgdG9vbHRpcCB7c3RyaW5nfSBBIHBvcHVwIHRvb2x0aXAgZm9yIHRoZSBkYXRlLlxuXHRcdFx0QGV4YW1wbGUgb25EYXRlOiBmdW5jdGlvbihkYXRlKSB7XG5cdHJldHVybiB7c2VsZWN0YWJsZTogZGF0ZS5kYXkoKSA+IDAgJiYgZGF0ZS5kYXkoKSAmbHQ7IDUsXG5cdFx0ZGF0ZUNsYXNzOiBkYXRlLmRheSgpID09PSA0ID8gJ2xhc3QtZGF5JyA6ICcnfTtcbiB9ICovXG5cblx0XHQvKiogVXBkYXRlIHRoZSBkYXRlcGlja2VyIGRpc3BsYXkuXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyT25TaG93XG5cdFx0XHRAcGFyYW0gcGlja2VyIHtqUXVlcnl9IFRoZSBkYXRlcGlja2VyIDxjb2RlPmRpdjwvY29kZT4gdG8gYmUgc2hvd24uXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBleGFtcGxlIG9uU2hvdzogZnVuY3Rpb24ocGlja2VyLCBpbnN0KSB7XG5cdHBpY2tlci5hcHBlbmQoJyZsdDtidXR0b24gdHlwZT1cImJ1dHRvblwiPkhpJmx0Oy9idXR0b24+JykuXG5cdFx0ZmluZCgnYnV0dG9uOmxhc3QnKS5jbGljayhmdW5jdGlvbigpIHtcblx0XHRcdGFsZXJ0KCdIaSEnKTtcblx0XHR9KTtcbiB9ICovXG5cblx0XHQvKiogUmVhY3QgdG8gbmF2aWdhdGluZyB0aHJvdWdoIHRoZSBtb250aHMveWVhcnMuXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyT25DaGFuZ2VNb250aFllYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSBuZXcgeWVhci5cblx0XHRcdEBwYXJhbSBtb250aCB7bnVtYmVyfSBUaGUgbmV3IG1vbnRoICgxIHRvIDEyKS5cblx0XHRcdEBleGFtcGxlIG9uQ2hhbmdlTW9udGhZZWFyOiBmdW5jdGlvbih5ZWFyLCBtb250aCkge1xuXHRhbGVydCgnTm93IGluICcgKyBtb250aCArICcvJyArIHllYXIpO1xuIH0gKi9cblx0XHRcdFxuXHRcdC8qKiBEYXRlcGlja2VyIG9uIHNlbGVjdCBjYWxsYmFjay5cblx0XHRcdFRyaWdnZXJlZCB3aGVuIGEgZGF0ZSBpcyBzZWxlY3RlZC5cblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJPblNlbGVjdFxuXHRcdFx0QHBhcmFtIGRhdGVzIHtDRGF0ZVtdfSBUaGUgc2VsZWN0ZWQgZGF0ZShzKS5cblx0XHRcdEBleGFtcGxlIG9uU2VsZWN0OiBmdW5jdGlvbihkYXRlcykge1xuIFx0YWxlcnQoJ1NlbGVjdGVkICcgKyBkYXRlcyk7XG4gfSAqL1xuXHRcdFx0XG5cdFx0LyoqIERhdGVwaWNrZXIgb24gY2xvc2UgY2FsbGJhY2suXG5cdFx0XHRUcmlnZ2VyZWQgd2hlbiBhIHBvcHVwIGNhbGVuZGFyIGlzIGNsb3NlZC5cblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJPbkNsb3NlXG5cdFx0XHRAcGFyYW0gZGF0ZXMge0NEYXRlW119IFRoZSBzZWxlY3RlZCBkYXRlKHMpLlxuXHRcdFx0QGV4YW1wbGUgb25DbG9zZTogZnVuY3Rpb24oZGF0ZXMpIHtcbiBcdGFsZXJ0KCdTZWxlY3RlZCAnICsgZGF0ZXMpO1xuIH0gKi9cblx0XHRcblx0XHQvKiogRGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIHBsdWdpbi5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcm9wZXJ0eSBbY2FsZW5kYXI9JC5jYWxlbmRhcnMuaW5zdGFuY2UoKV0ge0NhbGVuZGFyfSBUaGUgY2FsZW5kYXIgZm9yIHRoaXMgZGF0ZXBpY2tlci5cblx0XHRcdEBwcm9wZXJ0eSBbcGlja2VyQ2xhc3M9JyddIHtzdHJpbmd9IENTUyBjbGFzcyB0byBhZGQgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUgZGF0ZXBpY2tlci5cblx0XHRcdEBwcm9wZXJ0eSBbc2hvd09uRm9jdXM9dHJ1ZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGZvciBwb3B1cCBvbiBmb2N1cywgPGNvZGU+ZmFsc2U8L2NvZGU+IGZvciBub3QuXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dUcmlnZ2VyPW51bGxdIHtzdHJpbmd8RWxlbWVudHxqUXVlcnl9IEVsZW1lbnQgdG8gYmUgY2xvbmVkIGZvciBhIHRyaWdnZXIsIDxjb2RlPm51bGw8L2NvZGU+IGZvciBub25lLlxuXHRcdFx0QHByb3BlcnR5IFtzaG93QW5pbT0nc2hvdyddIHtzdHJpbmd9IE5hbWUgb2YgalF1ZXJ5IGFuaW1hdGlvbiBmb3IgcG9wdXAsICcnIGZvciBubyBhbmltYXRpb24uXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dPcHRpb25zPW51bGxdIHtvYmplY3R9IE9wdGlvbnMgZm9yIGVuaGFuY2VkIGFuaW1hdGlvbnMuXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dTcGVlZD0nbm9ybWFsJ10ge3N0cmluZ30gRHVyYXRpb24gb2YgZGlzcGxheS9jbG9zdXJlLlxuXHRcdFx0QHByb3BlcnR5IFtwb3B1cENvbnRhaW5lcj1udWxsXSB7c3RyaW5nfEVsZW1lbnR8alF1ZXJ5fSBUaGUgZWxlbWVudCB0byB3aGljaCBhIHBvcHVwIGNhbGVuZGFyIGlzIGFkZGVkLCA8Y29kZT5udWxsPC9jb2RlPiBmb3IgYm9keS5cblx0XHRcdEBwcm9wZXJ0eSBbYWxpZ25tZW50PSdib3R0b20nXSB7c3RyaW5nfSBBbGlnbm1lbnQgb2YgcG9wdXAgLSB3aXRoIG5vbWluYXRlZCBjb3JuZXIgb2YgaW5wdXQ6XG5cdFx0XHRcdFx0XHQndG9wJyBvciAnYm90dG9tJyBhbGlnbnMgZGVwZW5kaW5nIG9uIGxhbmd1YWdlIGRpcmVjdGlvbixcblx0XHRcdFx0XHRcdCd0b3BMZWZ0JywgJ3RvcFJpZ2h0JywgJ2JvdHRvbUxlZnQnLCAnYm90dG9tUmlnaHQnLlxuXHRcdFx0QHByb3BlcnR5IFtmaXhlZFdlZWtzPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gYWx3YXlzIHNob3cgNiB3ZWVrcywgPGNvZGU+ZmFsc2U8L2NvZGU+IHRvIG9ubHkgc2hvdyBhcyBtYW55IGFzIGFyZSBuZWVkZWQuXG5cdFx0XHRAcHJvcGVydHkgW2ZpcnN0RGF5PW51bGxdIHtudW1iZXJ9IEZpcnN0IGRheSBvZiB0aGUgd2VlaywgMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLiwgPGNvZGU+bnVsbDwvY29kZT4gZm9yIDxjb2RlPmNhbGVuZGFyPC9jb2RlPiBkZWZhdWx0LlxuXHRcdFx0QHByb3BlcnR5IFtjYWxjdWxhdGVXZWVrPW51bGxdIHtDYWxlbmRhcnNQaWNrZXJDYWxjdWxhdGVXZWVrfSBDYWxjdWxhdGUgd2VlayBvZiB0aGUgeWVhciBmcm9tIGEgZGF0ZSwgPGNvZGU+bnVsbDwvY29kZT4gZm9yIDxjb2RlPmNhbGVuZGFyPC9jb2RlPiBkZWZhdWx0LlxuXHRcdFx0QHByb3BlcnR5IFttb250aHNUb1Nob3c9MV0ge251bWJlcnxudW1iZXJbXX0gSG93IG1hbnkgbW9udGhzIHRvIHNob3csIGNvbHMgb3IgW3Jvd3MsIGNvbHNdLlxuXHRcdFx0QHByb3BlcnR5IFttb250aHNPZmZzZXQ9MF0ge251bWJlcn0gSG93IG1hbnkgbW9udGhzIHRvIG9mZnNldCB0aGUgcHJpbWFyeSBtb250aCBieTtcblx0XHRcdFx0XHRcdG1heSBiZSBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIGRhdGUgYW5kIHJldHVybnMgdGhlIG9mZnNldC5cblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhzVG9TdGVwPTFdIHtudW1iZXJ9IEhvdyBtYW55IG1vbnRocyB0byBtb3ZlIHdoZW4gcHJldi9uZXh0IGNsaWNrZWQuXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoc1RvSnVtcD0xMl0ge251bWJlcn0gSG93IG1hbnkgbW9udGhzIHRvIG1vdmUgd2hlbiBsYXJnZSBwcmV2L25leHQgY2xpY2tlZC5cblx0XHRcdEBwcm9wZXJ0eSBbdXNlTW91c2VXaGVlbD10cnVlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gdXNlIG1vdXNld2hlZWwgaWYgYXZhaWxhYmxlLCA8Y29kZT5mYWxzZTwvY29kZT4gdG8gbmV2ZXIgdXNlIGl0LlxuXHRcdFx0QHByb3BlcnR5IFtjaGFuZ2VNb250aD10cnVlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gY2hhbmdlIG1vbnRoL3llYXIgdmlhIGRyb3AtZG93biwgPGNvZGU+ZmFsc2U8L2NvZGU+IGZvciBuYXZpZ2F0aW9uIG9ubHkuXG5cdFx0XHRAcHJvcGVydHkgW3llYXJSYW5nZT0nYy0xMDpjKzEwJ10ge3N0cmluZ30gUmFuZ2Ugb2YgeWVhcnMgdG8gc2hvdyBpbiBkcm9wLWRvd246ICdhbnknIGZvciBkaXJlY3QgdGV4dCBlbnRyeVxuXHRcdFx0XHRcdFx0b3IgJ3N0YXJ0OmVuZCcsIHdoZXJlIHN0YXJ0L2VuZCBhcmUgJystbm4nIGZvciByZWxhdGl2ZSB0byB0b2RheVxuXHRcdFx0XHRcdFx0b3IgJ2MrLW5uJyBmb3IgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlXG5cdFx0XHRcdFx0XHRvciAnbm5ubicgZm9yIGFuIGFic29sdXRlIHllYXIuXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dPdGhlck1vbnRocz1mYWxzZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIHNob3cgZGF0ZXMgZnJvbSBvdGhlciBtb250aHMsIDxjb2RlPmZhbHNlPC9jb2RlPiB0byBub3Qgc2hvdyB0aGVtLlxuXHRcdFx0QHByb3BlcnR5IFtzZWxlY3RPdGhlck1vbnRocz1mYWxzZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGFsbG93IHNlbGVjdGlvbiBvZiBkYXRlcyBmcm9tIG90aGVyIG1vbnRocyB0b28uXG5cdFx0XHRAcHJvcGVydHkgW2RlZmF1bHREYXRlPW51bGxdIHtzdHJpbmd8bnVtYmVyfENEYXRlfSBEYXRlIHRvIHNob3cgaWYgbm8gb3RoZXIgc2VsZWN0ZWQuXG5cdFx0XHRAcHJvcGVydHkgW3NlbGVjdERlZmF1bHREYXRlPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gcHJlLXNlbGVjdCB0aGUgZGVmYXVsdCBkYXRlIGlmIG5vIG90aGVyIGlzIGNob3Nlbi5cblx0XHRcdEBwcm9wZXJ0eSBbbWluRGF0ZT1udWxsXSB7c3RyaW5nfG51bWJlcnxDRGF0ZX0gVGhlIG1pbmltdW0gc2VsZWN0YWJsZSBkYXRlLlxuXHRcdFx0QHByb3BlcnR5IFttYXhEYXRlPW51bGxdIHtzdHJpbmd8bnVtYmVyfENEYXRlfSBUaGUgbWF4aW11bSBzZWxlY3RhYmxlIGRhdGUuXG5cdFx0XHRAcHJvcGVydHkgW2RhdGVGb3JtYXQ9J21tL2RkL3l5eXknXSB7c3RyaW5nfSBGb3JtYXQgZm9yIGRhdGVzLlxuXHRcdFx0QHByb3BlcnR5IFthdXRvU2l6ZT1mYWxzZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIHNpemUgdGhlIGlucHV0IGZpZWxkIGFjY29yZGluZyB0byB0aGUgZGF0ZSBmb3JtYXQuXG5cdFx0XHRAcHJvcGVydHkgW3JhbmdlU2VsZWN0PWZhbHNlXSB7Ym9vbGVhbn0gQWxsb3dzIGZvciBzZWxlY3RpbmcgYSBkYXRlIHJhbmdlIG9uIG9uZSBkYXRlIHBpY2tlci5cblx0XHRcdEBwcm9wZXJ0eSBbcmFuZ2VTZXBhcmF0b3I9JyAtICddIHtzdHJpbmd9IFRleHQgYmV0d2VlbiB0d28gZGF0ZXMgaW4gYSByYW5nZS5cblx0XHRcdEBwcm9wZXJ0eSBbbXVsdGlTZWxlY3Q9MF0ge251bWJlcn0gTWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0YWJsZSBkYXRlcywgemVybyBmb3Igc2luZ2xlIHNlbGVjdC5cblx0XHRcdEBwcm9wZXJ0eSBbbXVsdGlTZXBhcmF0b3I9JywnXSB7c3RyaW5nfSBUZXh0IGJldHdlZW4gbXVsdGlwbGUgZGF0ZXMuXG5cdFx0XHRAcHJvcGVydHkgW29uRGF0ZT1udWxsXSB7Q2FsZW5kYXJzUGlja2VyT25EYXRlfSBDYWxsYmFjayBhcyBhIGRhdGUgaXMgYWRkZWQgdG8gdGhlIGRhdGVwaWNrZXIuXG5cdFx0XHRAcHJvcGVydHkgW29uU2hvdz1udWxsXSB7Q2FsZW5kYXJzUGlja2VyT25TaG93fSBDYWxsYmFjayBqdXN0IGJlZm9yZSBhIGRhdGVwaWNrZXIgaXMgc2hvd24uXG5cdFx0XHRAcHJvcGVydHkgW29uQ2hhbmdlTW9udGhZZWFyPW51bGxdIHtDYWxlbmRhcnNQaWNrZXJPbkNoYW5nZU1vbnRoWWVhcn0gQ2FsbGJhY2sgd2hlbiBhIG5ldyBtb250aC95ZWFyIGlzIHNlbGVjdGVkLlxuXHRcdFx0QHByb3BlcnR5IFtvblNlbGVjdD1udWxsXSB7Q2FsZW5kYXJzUGlja2VyT25TZWxlY3R9IENhbGxiYWNrIHdoZW4gYSBkYXRlIGlzIHNlbGVjdGVkLlxuXHRcdFx0QHByb3BlcnR5IFtvbkNsb3NlPW51bGxdIHtDYWxlbmRhcnNQaWNrZXJPbkNsb3NlfSBDYWxsYmFjayB3aGVuIGEgZGF0ZXBpY2tlciBpcyBjbG9zZWQuXG5cdFx0XHRAcHJvcGVydHkgW2FsdEZpZWxkPW51bGxdIHtzdHJpbmd8RWxlbWVudHxqUXVlcnl9IEFsdGVybmF0ZSBmaWVsZCB0byB1cGRhdGUgaW4gc3luY2ggd2l0aCB0aGUgZGF0ZXBpY2tlci5cblx0XHRcdEBwcm9wZXJ0eSBbYWx0Rm9ybWF0PW51bGxdIHtzdHJpbmd9IERhdGUgZm9ybWF0IGZvciBhbHRlcm5hdGUgZmllbGQsIGRlZmF1bHRzIHRvIDxjb2RlPmRhdGVGb3JtYXQ8L2NvZGU+LlxuXHRcdFx0QHByb3BlcnR5IFtjb25zdHJhaW5JbnB1dD10cnVlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gY29uc3RyYWluIHR5cGVkIGlucHV0IHRvIDxjb2RlPmRhdGVGb3JtYXQ8L2NvZGU+IGFsbG93ZWQgY2hhcmFjdGVycy5cblx0XHRcdEBwcm9wZXJ0eSBbY29tbWFuZHNBc0RhdGVGb3JtYXQ9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBhcHBseVxuXHRcdFx0XHRcdFx0PGNvZGU+PGEgaHJlZj1cIiNmb3JtYXREYXRlXCI+Zm9ybWF0RGF0ZTwvYT48L2NvZGU+IHRvIHRoZSBjb21tYW5kIHRleHRzLlxuXHRcdFx0QHByb3BlcnR5IFtjb21tYW5kcz10aGlzLmNvbW1hbmRzXSB7b2JqZWN0fSBDb21tYW5kIGFjdGlvbnMgdGhhdCBtYXkgYmUgYWRkZWQgdG8gYSBsYXlvdXQgYnkgbmFtZS4gKi9cblx0XHRkZWZhdWx0T3B0aW9uczoge1xuXHRcdFx0Y2FsZW5kYXI6ICQuY2FsZW5kYXJzLmluc3RhbmNlKCksXG5cdFx0XHRwaWNrZXJDbGFzczogJycsXG5cdFx0XHRzaG93T25Gb2N1czogdHJ1ZSxcblx0XHRcdHNob3dUcmlnZ2VyOiBudWxsLFxuXHRcdFx0c2hvd0FuaW06ICdzaG93Jyxcblx0XHRcdHNob3dPcHRpb25zOiB7fSxcblx0XHRcdHNob3dTcGVlZDogJ25vcm1hbCcsXG5cdFx0XHRwb3B1cENvbnRhaW5lcjogbnVsbCxcblx0XHRcdGFsaWdubWVudDogJ2JvdHRvbScsXG5cdFx0XHRmaXhlZFdlZWtzOiBmYWxzZSxcblx0XHRcdGZpcnN0RGF5OiBudWxsLFxuXHRcdFx0Y2FsY3VsYXRlV2VlazogbnVsbCxcblx0XHRcdG1vbnRoc1RvU2hvdzogMSxcblx0XHRcdG1vbnRoc09mZnNldDogMCxcblx0XHRcdG1vbnRoc1RvU3RlcDogMSxcblx0XHRcdG1vbnRoc1RvSnVtcDogMTIsXG5cdFx0XHR1c2VNb3VzZVdoZWVsOiB0cnVlLFxuXHRcdFx0Y2hhbmdlTW9udGg6IHRydWUsXG5cdFx0XHR5ZWFyUmFuZ2U6ICdjLTEwOmMrMTAnLFxuXHRcdFx0c2hvd090aGVyTW9udGhzOiBmYWxzZSxcblx0XHRcdHNlbGVjdE90aGVyTW9udGhzOiBmYWxzZSxcblx0XHRcdGRlZmF1bHREYXRlOiBudWxsLFxuXHRcdFx0c2VsZWN0RGVmYXVsdERhdGU6IGZhbHNlLFxuXHRcdFx0bWluRGF0ZTogbnVsbCxcblx0XHRcdG1heERhdGU6IG51bGwsXG5cdFx0XHRkYXRlRm9ybWF0OiBudWxsLFxuXHRcdFx0YXV0b1NpemU6IGZhbHNlLFxuXHRcdFx0cmFuZ2VTZWxlY3Q6IGZhbHNlLFxuXHRcdFx0cmFuZ2VTZXBhcmF0b3I6ICcgLSAnLFxuXHRcdFx0bXVsdGlTZWxlY3Q6IDAsXG5cdFx0XHRtdWx0aVNlcGFyYXRvcjogJywnLFxuXHRcdFx0b25EYXRlOiBudWxsLFxuXHRcdFx0b25TaG93OiBudWxsLFxuXHRcdFx0b25DaGFuZ2VNb250aFllYXI6IG51bGwsXG5cdFx0XHRvblNlbGVjdDogbnVsbCxcblx0XHRcdG9uQ2xvc2U6IG51bGwsXG5cdFx0XHRhbHRGaWVsZDogbnVsbCxcblx0XHRcdGFsdEZvcm1hdDogbnVsbCxcblx0XHRcdGNvbnN0cmFpbklucHV0OiB0cnVlLFxuXHRcdFx0Y29tbWFuZHNBc0RhdGVGb3JtYXQ6IGZhbHNlLFxuXHRcdFx0Y29tbWFuZHM6IHt9IC8vIHRoaXMuY29tbWFuZHNcblx0XHR9LFxuXG5cdFx0LyoqIExvY2FsaXNhdGlvbnMgZm9yIHRoZSBwbHVnaW4uXG5cdFx0XHRFbnRyaWVzIGFyZSBvYmplY3RzIGluZGV4ZWQgYnkgdGhlIGxhbmd1YWdlIGNvZGUgKCcnIGJlaW5nIHRoZSBkZWZhdWx0IFVTL0VuZ2xpc2gpLlxuXHRcdFx0RWFjaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcy5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcm9wZXJ0eSBbcmVuZGVyZXI9dGhpcy5kZWZhdWx0UmVuZGVyZXJdIHtzdHJpbmd9IFRoZSByZW5kZXJpbmcgdGVtcGxhdGVzLlxuXHRcdFx0QHByb3BlcnR5IFtwcmV2VGV4dD0nJmx0O1ByZXYnXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgcHJldmlvdXMgbW9udGggY29tbWFuZC5cblx0XHRcdEBwcm9wZXJ0eSBbcHJldlN0YXR1cz0nU2hvdyB0aGUgcHJldmlvdXMgbW9udGgnXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3IgdGhlIHByZXZpb3VzIG1vbnRoIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW3ByZXZKdW1wVGV4dD0nJmx0OyZsdDsnXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgcHJldmlvdXMgeWVhciBjb21tYW5kLlxuXHRcdFx0QHByb3BlcnR5IFtwcmV2SnVtcFN0YXR1cz0nU2hvdyB0aGUgcHJldmlvdXMgeWVhciddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgcHJldmlvdXMgeWVhciBjb21tYW5kLlxuXHRcdFx0QHByb3BlcnR5IFtuZXh0VGV4dD0nTmV4dCZndDsnXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgbmV4dCBtb250aCBjb21tYW5kLlxuXHRcdFx0QHByb3BlcnR5IFtuZXh0U3RhdHVzPSdTaG93IHRoZSBuZXh0IG1vbnRoJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSBuZXh0IG1vbnRoIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW25leHRKdW1wVGV4dD0nJmd0OyZndDsnXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgbmV4dCB5ZWFyIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW25leHRKdW1wU3RhdHVzPSdTaG93IHRoZSBuZXh0IHllYXInXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3IgdGhlIG5leHQgeWVhciBjb21tYW5kLlxuXHRcdFx0QHByb3BlcnR5IFtjdXJyZW50VGV4dD0nQ3VycmVudCddIHtzdHJpbmd9IFRleHQgZm9yIHRoZSBjdXJyZW50IG1vbnRoIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW2N1cnJlbnRTdGF0dXM9J1Nob3cgdGhlIGN1cnJlbnQgbW9udGgnXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3IgdGhlIGN1cnJlbnQgbW9udGggY29tbWFuZC5cblx0XHRcdEBwcm9wZXJ0eSBbdG9kYXlUZXh0PSdUb2RheSddIHtzdHJpbmd9IFRleHQgZm9yIHRoZSB0b2RheSdzIG1vbnRoIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW3RvZGF5U3RhdHVzPSdTaG93IHRvZGF5XFwncyBtb250aCddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgdG9kYXkncyBtb250aCBjb21tYW5kLlxuXHRcdFx0QHByb3BlcnR5IFtjbGVhclRleHQ9J0NsZWFyJ10ge3N0cmluZ30gVGV4dCBmb3IgdGhlIGNsZWFyIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW2NsZWFyU3RhdHVzPSdDbGVhciBhbGwgdGhlIGRhdGVzJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSBjbGVhciBjb21tYW5kLlxuXHRcdFx0QHByb3BlcnR5IFtjbG9zZVRleHQ9J0Nsb3NlJ10ge3N0cmluZ30gVGV4dCBmb3IgdGhlIGNsb3NlIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW2Nsb3NlU3RhdHVzPSdDbG9zZSB0aGUgZGF0ZXBpY2tlciddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgY2xvc2UgY29tbWFuZC5cblx0XHRcdEBwcm9wZXJ0eSBbeWVhclN0YXR1cz0nQ2hhbmdlIHRoZSB5ZWFyJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHllYXIgc2VsZWN0aW9uLlxuXHRcdFx0QHByb3BlcnR5IFtlYXJsaWVyVGV4dD0nJiMxNjA7JiMxNjA74payJ10ge3N0cmluZ30gVGV4dCBmb3IgZWFybGllciB5ZWFycy5cblx0XHRcdEBwcm9wZXJ0eSBbbGF0ZXJUZXh0PScmIzE2MDsmIzE2MDvilrwnXSB7c3RyaW5nfSBUZXh0IGZvciBsYXRlciB5ZWFycy5cblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhTdGF0dXM9J0NoYW5nZSB0aGUgbW9udGgnXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3IgbW9udGggc2VsZWN0aW9uLlxuXHRcdFx0QHByb3BlcnR5IFt3ZWVrVGV4dD0nV2snXSB7c3RyaW5nfSBUZXh0IGZvciB3ZWVrIG9mIHRoZSB5ZWFyIGNvbHVtbiBoZWFkZXIuXG5cdFx0XHRAcHJvcGVydHkgW3dlZWtTdGF0dXM9J1dlZWsgb2YgdGhlIHllYXInXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3Igd2VlayBvZiB0aGUgeWVhciBjb2x1bW4gaGVhZGVyLlxuXHRcdFx0QHByb3BlcnR5IFtkYXlTdGF0dXM9J1NlbGVjdCBERCwmIzE2MDtNJiMxNjA7ZCwmIzE2MDt5eXl5J10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHNlbGVjdGFibGUgZGF5cy5cblx0XHRcdEBwcm9wZXJ0eSBbZGVmYXVsdFN0YXR1cz0nU2VsZWN0IGEgZGF0ZSddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IHNob3duIGJ5IGRlZmF1bHQuXG5cdFx0XHRAcHJvcGVydHkgW2lzUlRMPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgbGFuZ3VhZ2UgaXMgcmlnaHQtdG8tbGVmdC4gKi9cblx0XHRyZWdpb25hbE9wdGlvbnM6IHsgLy8gQXZhaWxhYmxlIHJlZ2lvbmFsIHNldHRpbmdzLCBpbmRleGVkIGJ5IGxhbmd1YWdlL2NvdW50cnkgY29kZVxuXHRcdFx0Jyc6IHsgLy8gRGVmYXVsdCByZWdpb25hbCBzZXR0aW5ncyAtIEVuZ2xpc2gvVVNcblx0XHRcdFx0cmVuZGVyZXI6IHt9LCAvLyB0aGlzLmRlZmF1bHRSZW5kZXJlclxuXHRcdFx0XHRwcmV2VGV4dDogJyZsdDtQcmV2Jyxcblx0XHRcdFx0cHJldlN0YXR1czogJ1Nob3cgdGhlIHByZXZpb3VzIG1vbnRoJyxcblx0XHRcdFx0cHJldkp1bXBUZXh0OiAnJmx0OyZsdDsnLFxuXHRcdFx0XHRwcmV2SnVtcFN0YXR1czogJ1Nob3cgdGhlIHByZXZpb3VzIHllYXInLFxuXHRcdFx0XHRuZXh0VGV4dDogJ05leHQmZ3Q7Jyxcblx0XHRcdFx0bmV4dFN0YXR1czogJ1Nob3cgdGhlIG5leHQgbW9udGgnLFxuXHRcdFx0XHRuZXh0SnVtcFRleHQ6ICcmZ3Q7Jmd0OycsXG5cdFx0XHRcdG5leHRKdW1wU3RhdHVzOiAnU2hvdyB0aGUgbmV4dCB5ZWFyJyxcblx0XHRcdFx0Y3VycmVudFRleHQ6ICdDdXJyZW50Jyxcblx0XHRcdFx0Y3VycmVudFN0YXR1czogJ1Nob3cgdGhlIGN1cnJlbnQgbW9udGgnLFxuXHRcdFx0XHR0b2RheVRleHQ6ICdUb2RheScsXG5cdFx0XHRcdHRvZGF5U3RhdHVzOiAnU2hvdyB0b2RheVxcJ3MgbW9udGgnLFxuXHRcdFx0XHRjbGVhclRleHQ6ICdDbGVhcicsXG5cdFx0XHRcdGNsZWFyU3RhdHVzOiAnQ2xlYXIgYWxsIHRoZSBkYXRlcycsXG5cdFx0XHRcdGNsb3NlVGV4dDogJ0Nsb3NlJyxcblx0XHRcdFx0Y2xvc2VTdGF0dXM6ICdDbG9zZSB0aGUgZGF0ZXBpY2tlcicsXG5cdFx0XHRcdHllYXJTdGF0dXM6ICdDaGFuZ2UgdGhlIHllYXInLFxuXHRcdFx0XHRlYXJsaWVyVGV4dDogJyYjMTYwOyYjMTYwO+KWsicsXG5cdFx0XHRcdGxhdGVyVGV4dDogJyYjMTYwOyYjMTYwO+KWvCcsXG5cdFx0XHRcdG1vbnRoU3RhdHVzOiAnQ2hhbmdlIHRoZSBtb250aCcsXG5cdFx0XHRcdHdlZWtUZXh0OiAnV2snLFxuXHRcdFx0XHR3ZWVrU3RhdHVzOiAnV2VlayBvZiB0aGUgeWVhcicsXG5cdFx0XHRcdGRheVN0YXR1czogJ1NlbGVjdCBERCwgTSBkLCB5eXl5Jyxcblx0XHRcdFx0ZGVmYXVsdFN0YXR1czogJ1NlbGVjdCBhIGRhdGUnLFxuXHRcdFx0XHRpc1JUTDogZmFsc2Vcblx0XHRcdH1cblx0XHR9LFxuXHRcdFxuXHRcdC8qKiBOYW1lcyBvZiBnZXR0ZXIgbWV0aG9kcyAtIHRob3NlIHRoYXQgY2FuJ3QgYmUgY2hhaW5lZC5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXIgKi9cblx0XHRfZ2V0dGVyczogWydnZXREYXRlJywgJ2lzRGlzYWJsZWQnLCAnaXNTZWxlY3RhYmxlJywgJ3JldHJpZXZlRGF0ZSddLFxuXG5cdFx0X2Rpc2FibGVkOiBbXSxcblx0XHRcblx0XHRfcG9wdXBDbGFzczogJ2NhbGVuZGFycy1wb3B1cCcsIC8vIE1hcmtlciBmb3IgcG9wdXAgZGl2aXNpb25cblx0XHRfdHJpZ2dlckNsYXNzOiAnY2FsZW5kYXJzLXRyaWdnZXInLCAvLyBNYXJrZXIgZm9yIHRyaWdnZXIgZWxlbWVudFxuXHRcdF9kaXNhYmxlQ2xhc3M6ICdjYWxlbmRhcnMtZGlzYWJsZScsIC8vIE1hcmtlciBmb3IgZGlzYWJsZWQgZWxlbWVudFxuXHRcdF9tb250aFllYXJDbGFzczogJ2NhbGVuZGFycy1tb250aC15ZWFyJywgLy8gTWFya2VyIGZvciBtb250aC95ZWFyIGlucHV0c1xuXHRcdF9jdXJNb250aENsYXNzOiAnY2FsZW5kYXJzLW1vbnRoLScsIC8vIE1hcmtlciBmb3IgY3VycmVudCBtb250aC95ZWFyXG5cdFx0X2FueVllYXJDbGFzczogJ2NhbGVuZGFycy1hbnkteWVhcicsIC8vIE1hcmtlciBmb3IgeWVhciBkaXJlY3QgaW5wdXRcblx0XHRfY3VyRG9XQ2xhc3M6ICdjYWxlbmRhcnMtZG93LScsIC8vIE1hcmtlciBmb3IgZGF5IG9mIHdlZWtcblxuXHRcdF9pbml0OiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuZGVmYXVsdE9wdGlvbnMuY29tbWFuZHMgPSB0aGlzLmNvbW1hbmRzO1xuXHRcdFx0dGhpcy5yZWdpb25hbE9wdGlvbnNbJyddLnJlbmRlcmVyID0gdGhpcy5kZWZhdWx0UmVuZGVyZXI7XG5cdFx0XHR0aGlzLl9zdXBlcigpO1xuXHRcdH0sXG5cblx0XHRfaW5zdFNldHRpbmdzOiBmdW5jdGlvbihlbGVtLCBvcHRpb25zKSB7XG5cdFx0XHRyZXR1cm4ge3NlbGVjdGVkRGF0ZXM6IFtdLCBkcmF3RGF0ZTogbnVsbCwgcGlja2luZ1JhbmdlOiBmYWxzZSxcblx0XHRcdFx0aW5saW5lOiAoJC5pbkFycmF5KGVsZW1bMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgWydkaXYnLCAnc3BhbiddKSA+IC0xKSxcblx0XHRcdFx0Z2V0OiBmdW5jdGlvbihuYW1lKSB7IC8vIEdldCBhIHNldHRpbmcgdmFsdWUsIGNvbXB1dGluZyBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRpZiAoJC5pbkFycmF5KG5hbWUsIFsnZGVmYXVsdERhdGUnLCAnbWluRGF0ZScsICdtYXhEYXRlJ10pID4gLTEpIHsgLy8gRGVjb2RlIGRhdGUgc2V0dGluZ3Ncblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm9wdGlvbnMuY2FsZW5kYXIuZGV0ZXJtaW5lRGF0ZSh0aGlzLm9wdGlvbnNbbmFtZV0sIG51bGwsXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWREYXRlc1swXSwgdGhpcy5nZXQoJ2RhdGVGb3JtYXQnKSwgdGhpcy5nZXRDb25maWcoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChuYW1lID09PSAnZGF0ZUZvcm1hdCcpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm9wdGlvbnMuZGF0ZUZvcm1hdCB8fCB0aGlzLm9wdGlvbnMuY2FsZW5kYXIubG9jYWwuZGF0ZUZvcm1hdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub3B0aW9uc1tuYW1lXTtcblx0XHRcdFx0fSxcblx0XHRcdFx0Y3VyTWluRGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuICh0aGlzLnBpY2tpbmdSYW5nZSA/IHRoaXMuc2VsZWN0ZWREYXRlc1swXSA6IHRoaXMuZ2V0KCdtaW5EYXRlJykpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRnZXRDb25maWc6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiB7ZGF5TmFtZXNTaG9ydDogdGhpcy5vcHRpb25zLmRheU5hbWVzU2hvcnQsIGRheU5hbWVzOiB0aGlzLm9wdGlvbnMuZGF5TmFtZXMsXG5cdFx0XHRcdFx0XHRtb250aE5hbWVzU2hvcnQ6IHRoaXMub3B0aW9ucy5tb250aE5hbWVzU2hvcnQsIG1vbnRoTmFtZXM6IHRoaXMub3B0aW9ucy5tb250aE5hbWVzLFxuXHRcdFx0XHRcdFx0Y2FsY3VsYXRlV2VlazogdGhpcy5vcHRpb25zLmNhbGN1bGF0ZVdlZWssIHNob3J0WWVhckN1dG9mZjogdGhpcy5vcHRpb25zLnNob3J0WWVhckN1dG9mZn07XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdF9wb3N0QXR0YWNoOiBmdW5jdGlvbihlbGVtLCBpbnN0KSB7XG5cdFx0XHRpZiAoaW5zdC5pbmxpbmUpIHtcblx0XHRcdFx0aW5zdC5kcmF3RGF0ZSA9IHBsdWdpbi5fY2hlY2tNaW5NYXgoKGluc3Quc2VsZWN0ZWREYXRlc1swXSB8fFxuXHRcdFx0XHRcdGluc3QuZ2V0KCdkZWZhdWx0RGF0ZScpIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpKS5uZXdEYXRlKCksIGluc3QpO1xuXHRcdFx0XHRpbnN0LnByZXZEYXRlID0gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCk7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZShlbGVtWzBdKTtcblx0XHRcdFx0aWYgKCQuZm4ubW91c2V3aGVlbCkge1xuXHRcdFx0XHRcdGVsZW0ubW91c2V3aGVlbCh0aGlzLl9kb01vdXNlV2hlZWwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0dGhpcy5fYXR0YWNobWVudHMoZWxlbSwgaW5zdCk7XG5cdFx0XHRcdGVsZW0ub24oJ2tleWRvd24uJyArIGluc3QubmFtZSwgdGhpcy5fa2V5RG93bikub24oJ2tleXByZXNzLicgKyBpbnN0Lm5hbWUsIHRoaXMuX2tleVByZXNzKS5cblx0XHRcdFx0XHRvbigna2V5dXAuJyArIGluc3QubmFtZSwgdGhpcy5fa2V5VXApO1xuXHRcdFx0XHRpZiAoZWxlbS5hdHRyKCdkaXNhYmxlZCcpKSB7XG5cdFx0XHRcdFx0dGhpcy5kaXNhYmxlKGVsZW1bMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdF9vcHRpb25zQ2hhbmdlZDogZnVuY3Rpb24oZWxlbSwgaW5zdCwgb3B0aW9ucykge1xuXHRcdFx0aWYgKG9wdGlvbnMuY2FsZW5kYXIgJiYgb3B0aW9ucy5jYWxlbmRhciAhPT0gaW5zdC5vcHRpb25zLmNhbGVuZGFyKSB7XG5cdFx0XHRcdHZhciBkaXNjYXJkRGF0ZSA9IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gKHR5cGVvZiBpbnN0Lm9wdGlvbnNbbmFtZV0gPT09ICdvYmplY3QnID8gbnVsbCA6IGluc3Qub3B0aW9uc1tuYW1lXSk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9wdGlvbnMgPSAkLmV4dGVuZCh7ZGVmYXVsdERhdGU6IGRpc2NhcmREYXRlKCdkZWZhdWx0RGF0ZScpLFxuXHRcdFx0XHRcdG1pbkRhdGU6IGRpc2NhcmREYXRlKCdtaW5EYXRlJyksIG1heERhdGU6IGRpc2NhcmREYXRlKCdtYXhEYXRlJyl9LCBvcHRpb25zKTtcblx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzID0gW107XG5cdFx0XHRcdGluc3QuZHJhd0RhdGUgPSBudWxsO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGRhdGVzID0gaW5zdC5zZWxlY3RlZERhdGVzO1xuXHRcdFx0JC5leHRlbmQoaW5zdC5vcHRpb25zLCBvcHRpb25zKTtcblx0XHRcdHRoaXMuc2V0RGF0ZShlbGVtWzBdLCBkYXRlcywgbnVsbCwgZmFsc2UsIHRydWUpO1xuXHRcdFx0aW5zdC5waWNraW5nUmFuZ2UgPSBmYWxzZTtcblx0XHRcdHZhciBjYWxlbmRhciA9IGluc3Qub3B0aW9ucy5jYWxlbmRhcjtcblx0XHRcdHZhciBkZWZhdWx0RGF0ZSA9IGluc3QuZ2V0KCdkZWZhdWx0RGF0ZScpO1xuXHRcdFx0aW5zdC5kcmF3RGF0ZSA9IHRoaXMuX2NoZWNrTWluTWF4KChkZWZhdWx0RGF0ZSA/IGRlZmF1bHREYXRlIDogaW5zdC5kcmF3RGF0ZSkgfHxcblx0XHRcdFx0ZGVmYXVsdERhdGUgfHwgY2FsZW5kYXIudG9kYXkoKSwgaW5zdCkubmV3RGF0ZSgpO1xuXHRcdFx0aWYgKCFpbnN0LmlubGluZSkge1xuXHRcdFx0XHR0aGlzLl9hdHRhY2htZW50cyhlbGVtLCBpbnN0KTtcblx0XHRcdH1cblx0XHRcdGlmIChpbnN0LmlubGluZSB8fCBpbnN0LmRpdikge1xuXHRcdFx0XHR0aGlzLl91cGRhdGUoZWxlbVswXSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBBdHRhY2ggZXZlbnRzIGFuZCB0cmlnZ2VyLCBpZiBuZWNlc3NhcnkuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGVsZW0ge2pRdWVyeX0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuICovXG5cdFx0X2F0dGFjaG1lbnRzOiBmdW5jdGlvbihlbGVtLCBpbnN0KSB7XG5cdFx0XHRlbGVtLm9mZignZm9jdXMuJyArIGluc3QubmFtZSk7XG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLnNob3dPbkZvY3VzKSB7XG5cdFx0XHRcdGVsZW0ub24oJ2ZvY3VzLicgKyBpbnN0Lm5hbWUsIHRoaXMuc2hvdyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaW5zdC50cmlnZ2VyKSB7XG5cdFx0XHRcdGluc3QudHJpZ2dlci5yZW1vdmUoKTtcblx0XHRcdH1cblx0XHRcdHZhciB0cmlnZ2VyID0gaW5zdC5vcHRpb25zLnNob3dUcmlnZ2VyO1xuXHRcdFx0aW5zdC50cmlnZ2VyID0gKCF0cmlnZ2VyID8gJChbXSkgOlxuXHRcdFx0XHQkKHRyaWdnZXIpLmNsb25lKCkucmVtb3ZlQXR0cignaWQnKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpXG5cdFx0XHRcdFx0W2luc3Qub3B0aW9ucy5pc1JUTCA/ICdpbnNlcnRCZWZvcmUnIDogJ2luc2VydEFmdGVyJ10oZWxlbSkuXG5cdFx0XHRcdFx0Y2xpY2soZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIXBsdWdpbi5pc0Rpc2FibGVkKGVsZW1bMF0pKSB7XG5cdFx0XHRcdFx0XHRcdHBsdWdpbltwbHVnaW4uY3VySW5zdCA9PT0gaW5zdCA/ICdoaWRlJyA6ICdzaG93J10oZWxlbVswXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkpO1xuXHRcdFx0dGhpcy5fYXV0b1NpemUoZWxlbSwgaW5zdCk7XG5cdFx0XHR2YXIgZGF0ZXMgPSB0aGlzLl9leHRyYWN0RGF0ZXMoaW5zdCwgZWxlbS52YWwoKSk7XG5cdFx0XHRpZiAoZGF0ZXMpIHtcblx0XHRcdFx0dGhpcy5zZXREYXRlKGVsZW1bMF0sIGRhdGVzLCBudWxsLCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdHZhciBkZWZhdWx0RGF0ZSA9IGluc3QuZ2V0KCdkZWZhdWx0RGF0ZScpO1xuXHRcdFx0aWYgKGluc3Qub3B0aW9ucy5zZWxlY3REZWZhdWx0RGF0ZSAmJiBkZWZhdWx0RGF0ZSAmJiBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHRoaXMuc2V0RGF0ZShlbGVtWzBdLCAoZGVmYXVsdERhdGUgfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCkpLm5ld0RhdGUoKSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBBcHBseSB0aGUgbWF4aW11bSBsZW5ndGggZm9yIHRoZSBkYXRlIGZvcm1hdC5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZWxlbSB7alF1ZXJ5fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy4gKi9cblx0XHRfYXV0b1NpemU6IGZ1bmN0aW9uKGVsZW0sIGluc3QpIHtcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMuYXV0b1NpemUgJiYgIWluc3QuaW5saW5lKSB7XG5cdFx0XHRcdHZhciBjYWxlbmRhciA9IGluc3Qub3B0aW9ucy5jYWxlbmRhcjtcblx0XHRcdFx0dmFyIGRhdGUgPSBjYWxlbmRhci5uZXdEYXRlKDIwMDksIDEwLCAyMCk7IC8vIEVuc3VyZSBkb3VibGUgZGlnaXRzXG5cdFx0XHRcdHZhciBkYXRlRm9ybWF0ID0gaW5zdC5nZXQoJ2RhdGVGb3JtYXQnKTtcblx0XHRcdFx0aWYgKGRhdGVGb3JtYXQubWF0Y2goL1tETV0vKSkge1xuXHRcdFx0XHRcdHZhciBmaW5kTWF4ID0gZnVuY3Rpb24obmFtZXMpIHtcblx0XHRcdFx0XHRcdHZhciBtYXggPSAwO1xuXHRcdFx0XHRcdFx0dmFyIG1heEkgPSAwO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRpZiAobmFtZXNbaV0ubGVuZ3RoID4gbWF4KSB7XG5cdFx0XHRcdFx0XHRcdFx0bWF4ID0gbmFtZXNbaV0ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRcdG1heEkgPSBpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gbWF4STtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGRhdGUubW9udGgoZmluZE1heChjYWxlbmRhci5sb2NhbFtkYXRlRm9ybWF0Lm1hdGNoKC9NTS8pID8gLy8gTG9uZ2VzdCBtb250aFxuXHRcdFx0XHRcdFx0J21vbnRoTmFtZXMnIDogJ21vbnRoTmFtZXNTaG9ydCddKSArIDEpO1xuXHRcdFx0XHRcdGRhdGUuZGF5KGZpbmRNYXgoY2FsZW5kYXIubG9jYWxbZGF0ZUZvcm1hdC5tYXRjaCgvREQvKSA/IC8vIExvbmdlc3QgZGF5XG5cdFx0XHRcdFx0XHQnZGF5TmFtZXMnIDogJ2RheU5hbWVzU2hvcnQnXSkgKyAyMCAtIGRhdGUuZGF5T2ZXZWVrKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluc3QuZWxlbS5hdHRyKCdzaXplJywgZGF0ZS5mb3JtYXREYXRlKGRhdGVGb3JtYXQpLmxlbmd0aCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdF9wcmVEZXN0cm95OiBmdW5jdGlvbihlbGVtLCBpbnN0KSB7XG5cdFx0XHRpZiAoaW5zdC50cmlnZ2VyKSB7XG5cdFx0XHRcdGluc3QudHJpZ2dlci5yZW1vdmUoKTtcblx0XHRcdH1cblx0XHRcdGVsZW0uZW1wdHkoKS5vZmYoJy4nICsgaW5zdC5uYW1lKTtcblx0XHRcdGlmIChpbnN0LmlubGluZSAmJiAkLmZuLm1vdXNld2hlZWwpIHtcblx0XHRcdFx0ZWxlbS51bm1vdXNld2hlZWwoKTtcblx0XHRcdH1cblx0XHRcdGlmICghaW5zdC5pbmxpbmUgJiYgaW5zdC5vcHRpb25zLmF1dG9TaXplKSB7XG5cdFx0XHRcdGVsZW0ucmVtb3ZlQXR0cignc2l6ZScpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogQXBwbHkgbXVsdGlwbGUgZXZlbnQgZnVuY3Rpb25zLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIGZucyB7ZnVuY3Rpb259IFRoZSBmdW5jdGlvbnMgdG8gYXBwbHkuXG5cdFx0XHRAZXhhbXBsZSBvblNob3c6IG11bHRpcGxlRXZlbnRzKGZuMSwgZm4yLCAuLi4pICovXG5cdFx0bXVsdGlwbGVFdmVudHM6IGZ1bmN0aW9uKGZucykge1xuXHRcdFx0dmFyIGZ1bmNzID0gYXJndW1lbnRzO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGFyZ3MpIHtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGZ1bmNzW2ldLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdC8qKiBFbmFibGUgdGhlIGNvbnRyb2wuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuZGF0ZXBpY2soJ2VuYWJsZScpICovXG5cdFx0ZW5hYmxlOiBmdW5jdGlvbihlbGVtKSB7XG5cdFx0XHRlbGVtID0gJChlbGVtKTtcblx0XHRcdGlmICghZWxlbS5oYXNDbGFzcyh0aGlzLl9nZXRNYXJrZXIoKSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0aWYgKGluc3QuaW5saW5lKSB7XG5cdFx0XHRcdGVsZW0uY2hpbGRyZW4oJy4nICsgdGhpcy5fZGlzYWJsZUNsYXNzKS5yZW1vdmUoKS5lbmQoKS5cblx0XHRcdFx0XHRmaW5kKCdidXR0b24sc2VsZWN0JykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSkuZW5kKCkuXG5cdFx0XHRcdFx0ZmluZCgnYScpLmF0dHIoJ2hyZWYnLCAnamF2YXNjcmlwdDp2b2lkKDApJyk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0ZWxlbS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcblx0XHRcdFx0aW5zdC50cmlnZ2VyLmZpbHRlcignYnV0dG9uLicgKyB0aGlzLl90cmlnZ2VyQ2xhc3MpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpLmVuZCgpLlxuXHRcdFx0XHRcdGZpbHRlcignaW1nLicgKyB0aGlzLl90cmlnZ2VyQ2xhc3MpLmNzcyh7b3BhY2l0eTogJzEuMCcsIGN1cnNvcjogJyd9KTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2Rpc2FibGVkID0gJC5tYXAodGhpcy5fZGlzYWJsZWQsXG5cdFx0XHRcdGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiAodmFsdWUgPT09IGVsZW1bMF0gPyBudWxsIDogdmFsdWUpOyB9KTsgLy8gRGVsZXRlIGVudHJ5XG5cdFx0fSxcblxuXHRcdC8qKiBEaXNhYmxlIHRoZSBjb250cm9sLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGFmZmVjdC5cblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdkaXNhYmxlJykgKi9cblx0XHRkaXNhYmxlOiBmdW5jdGlvbihlbGVtKSB7XG5cdFx0XHRlbGVtID0gJChlbGVtKTtcblx0XHRcdGlmICghZWxlbS5oYXNDbGFzcyh0aGlzLl9nZXRNYXJrZXIoKSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0aWYgKGluc3QuaW5saW5lKSB7XG5cdFx0XHRcdHZhciBpbmxpbmUgPSBlbGVtLmNoaWxkcmVuKCc6bGFzdCcpO1xuXHRcdFx0XHR2YXIgb2Zmc2V0ID0gaW5saW5lLm9mZnNldCgpO1xuXHRcdFx0XHR2YXIgcmVsT2Zmc2V0ID0ge2xlZnQ6IDAsIHRvcDogMH07XG5cdFx0XHRcdGlubGluZS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoJCh0aGlzKS5jc3MoJ3Bvc2l0aW9uJykgPT09ICdyZWxhdGl2ZScpIHtcblx0XHRcdFx0XHRcdHJlbE9mZnNldCA9ICQodGhpcykub2Zmc2V0KCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dmFyIHpJbmRleCA9IGVsZW0uY3NzKCd6SW5kZXgnKTtcblx0XHRcdFx0ekluZGV4ID0gKHpJbmRleCA9PT0gJ2F1dG8nID8gMCA6IHBhcnNlSW50KHpJbmRleCwgMTApKSArIDE7XG5cdFx0XHRcdGVsZW0ucHJlcGVuZCgnPGRpdiBjbGFzcz1cIicgKyB0aGlzLl9kaXNhYmxlQ2xhc3MgKyAnXCIgc3R5bGU9XCInICtcblx0XHRcdFx0XHQnd2lkdGg6ICcgKyBpbmxpbmUub3V0ZXJXaWR0aCgpICsgJ3B4OyBoZWlnaHQ6ICcgKyBpbmxpbmUub3V0ZXJIZWlnaHQoKSArXG5cdFx0XHRcdFx0J3B4OyBsZWZ0OiAnICsgKG9mZnNldC5sZWZ0IC0gcmVsT2Zmc2V0LmxlZnQpICsgJ3B4OyB0b3A6ICcgK1xuXHRcdFx0XHRcdChvZmZzZXQudG9wIC0gcmVsT2Zmc2V0LnRvcCkgKyAncHg7IHotaW5kZXg6ICcgKyB6SW5kZXggKyAnXCI+PC9kaXY+JykuXG5cdFx0XHRcdFx0ZmluZCgnYnV0dG9uLHNlbGVjdCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSkuZW5kKCkuXG5cdFx0XHRcdFx0ZmluZCgnYScpLnJlbW92ZUF0dHIoJ2hyZWYnKTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRlbGVtLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG5cdFx0XHRcdGluc3QudHJpZ2dlci5maWx0ZXIoJ2J1dHRvbi4nICsgdGhpcy5fdHJpZ2dlckNsYXNzKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpLmVuZCgpLlxuXHRcdFx0XHRcdGZpbHRlcignaW1nLicgKyB0aGlzLl90cmlnZ2VyQ2xhc3MpLmNzcyh7b3BhY2l0eTogJzAuNScsIGN1cnNvcjogJ2RlZmF1bHQnfSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9kaXNhYmxlZCA9ICQubWFwKHRoaXMuX2Rpc2FibGVkLFxuXHRcdFx0XHRmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gKHZhbHVlID09PSBlbGVtWzBdID8gbnVsbCA6IHZhbHVlKTsgfSk7IC8vIERlbGV0ZSBlbnRyeVxuXHRcdFx0dGhpcy5fZGlzYWJsZWQucHVzaChlbGVtWzBdKTtcblx0XHR9LFxuXG5cdFx0LyoqIElzIHRoZSBmaXJzdCBmaWVsZCBpbiBhIGpRdWVyeSBjb2xsZWN0aW9uIGRpc2FibGVkIGFzIGEgZGF0ZXBpY2tlcj9cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgZGlzYWJsZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBlbmFibGVkLlxuXHRcdFx0QGV4YW1wbGUgaWYgKCQoc2VsZWN0b3IpLmRhdGVwaWNrKCdpc0Rpc2FibGVkJykpIHsuLi59ICovXG5cdFx0aXNEaXNhYmxlZDogZnVuY3Rpb24oZWxlbSkge1xuXHRcdFx0cmV0dXJuIChlbGVtICYmICQuaW5BcnJheShlbGVtLCB0aGlzLl9kaXNhYmxlZCkgPiAtMSk7XG5cdFx0fSxcblxuXHRcdC8qKiBTaG93IGEgcG9wdXAgZGF0ZXBpY2tlci5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBlbGVtIHtFdmVudHxFbGVtZW50fSBhIGZvY3VzIGV2ZW50IG9yIHRoZSBjb250cm9sIHRvIHVzZS5cblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdzaG93JykgKi9cblx0XHRzaG93OiBmdW5jdGlvbihlbGVtKSB7XG5cdFx0XHRlbGVtID0gJChlbGVtLnRhcmdldCB8fCBlbGVtKTtcblx0XHRcdHZhciBpbnN0ID0gcGx1Z2luLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0aWYgKHBsdWdpbi5jdXJJbnN0ID09PSBpbnN0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChwbHVnaW4uY3VySW5zdCkge1xuXHRcdFx0XHRwbHVnaW4uaGlkZShwbHVnaW4uY3VySW5zdCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xuXHRcdFx0XHQvLyBSZXRyaWV2ZSBleGlzdGluZyBkYXRlKHMpXG5cdFx0XHRcdGluc3QubGFzdFZhbCA9IG51bGw7XG5cdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IHBsdWdpbi5fZXh0cmFjdERhdGVzKGluc3QsIGVsZW0udmFsKCkpO1xuXHRcdFx0XHRpbnN0LnBpY2tpbmdSYW5nZSA9IGZhbHNlO1xuXHRcdFx0XHRpbnN0LmRyYXdEYXRlID0gcGx1Z2luLl9jaGVja01pbk1heCgoaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8XG5cdFx0XHRcdFx0aW5zdC5nZXQoJ2RlZmF1bHREYXRlJykgfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCkpLm5ld0RhdGUoKSwgaW5zdCk7XG5cdFx0XHRcdGluc3QucHJldkRhdGUgPSBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKTtcblx0XHRcdFx0cGx1Z2luLmN1ckluc3QgPSBpbnN0O1xuXHRcdFx0XHQvLyBHZW5lcmF0ZSBjb250ZW50XG5cdFx0XHRcdHBsdWdpbi5fdXBkYXRlKGVsZW1bMF0sIHRydWUpO1xuXHRcdFx0XHQvLyBBZGp1c3QgcG9zaXRpb24gYmVmb3JlIHNob3dpbmdcblx0XHRcdFx0dmFyIG9mZnNldCA9IHBsdWdpbi5fY2hlY2tPZmZzZXQoaW5zdCk7XG5cdFx0XHRcdGluc3QuZGl2LmNzcyh7bGVmdDogb2Zmc2V0LmxlZnQsIHRvcDogb2Zmc2V0LnRvcH0pO1xuXHRcdFx0XHQvLyBBbmQgZGlzcGxheVxuXHRcdFx0XHR2YXIgc2hvd0FuaW0gPSBpbnN0Lm9wdGlvbnMuc2hvd0FuaW07XG5cdFx0XHRcdHZhciBzaG93U3BlZWQgPSBpbnN0Lm9wdGlvbnMuc2hvd1NwZWVkO1xuXHRcdFx0XHRzaG93U3BlZWQgPSAoc2hvd1NwZWVkID09PSAnbm9ybWFsJyAmJiAkLnVpICYmXG5cdFx0XHRcdFx0cGFyc2VJbnQoJC51aS52ZXJzaW9uLnN1YnN0cmluZygyKSkgPj0gOCA/ICdfZGVmYXVsdCcgOiBzaG93U3BlZWQpO1xuXHRcdFx0XHRpZiAoJC5lZmZlY3RzICYmICgkLmVmZmVjdHNbc2hvd0FuaW1dIHx8ICgkLmVmZmVjdHMuZWZmZWN0ICYmICQuZWZmZWN0cy5lZmZlY3Rbc2hvd0FuaW1dKSkpIHtcblx0XHRcdFx0XHR2YXIgZGF0YSA9IGluc3QuZGl2LmRhdGEoKTsgLy8gVXBkYXRlIG9sZCBlZmZlY3RzIGRhdGFcblx0XHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xuXHRcdFx0XHRcdFx0aWYgKGtleS5tYXRjaCgvXmVjXFwuc3RvcmFnZVxcLi8pKSB7XG5cdFx0XHRcdFx0XHRcdGRhdGFba2V5XSA9IGluc3QuX21haW5EaXYuY3NzKGtleS5yZXBsYWNlKC9lY1xcLnN0b3JhZ2VcXC4vLCAnJykpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpbnN0LmRpdi5kYXRhKGRhdGEpLnNob3coc2hvd0FuaW0sIGluc3Qub3B0aW9ucy5zaG93T3B0aW9ucywgc2hvd1NwZWVkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRpbnN0LmRpdltzaG93QW5pbSB8fCAnc2hvdyddKHNob3dBbmltID8gc2hvd1NwZWVkIDogMCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIEV4dHJhY3QgcG9zc2libGUgZGF0ZXMgZnJvbSBhIHN0cmluZy5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSB0ZXh0IHRvIGV4dHJhY3QgZnJvbS5cblx0XHRcdEByZXR1cm4ge0NEYXRlW119IFRoZSBleHRyYWN0ZWQgZGF0ZXMuICovXG5cdFx0X2V4dHJhY3REYXRlczogZnVuY3Rpb24oaW5zdCwgZGF0ZXNUZXh0KSB7XG5cdFx0XHRpZiAoZGF0ZXNUZXh0ID09PSBpbnN0Lmxhc3RWYWwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aW5zdC5sYXN0VmFsID0gZGF0ZXNUZXh0O1xuXHRcdFx0ZGF0ZXNUZXh0ID0gZGF0ZXNUZXh0LnNwbGl0KGluc3Qub3B0aW9ucy5tdWx0aVNlbGVjdCA/IGluc3Qub3B0aW9ucy5tdWx0aVNlcGFyYXRvciA6XG5cdFx0XHRcdChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgPyBpbnN0Lm9wdGlvbnMucmFuZ2VTZXBhcmF0b3IgOiAnXFx4MDAnKSk7XG5cdFx0XHR2YXIgZGF0ZXMgPSBbXTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0ZXNUZXh0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dmFyIGRhdGUgPSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIucGFyc2VEYXRlKGluc3QuZ2V0KCdkYXRlRm9ybWF0JyksIGRhdGVzVGV4dFtpXSk7XG5cdFx0XHRcdFx0aWYgKGRhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBkYXRlcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRpZiAoZGF0ZXNbal0uY29tcGFyZVRvKGRhdGUpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIWZvdW5kKSB7XG5cdFx0XHRcdFx0XHRcdGRhdGVzLnB1c2goZGF0ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0Ly8gSWdub3JlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRhdGVzLnNwbGljZShpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgfHwgKGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCA/IDIgOiAxKSwgZGF0ZXMubGVuZ3RoKTtcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgJiYgZGF0ZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdGRhdGVzWzFdID0gZGF0ZXNbMF07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGF0ZXM7XG5cdFx0fSxcblxuXHRcdC8qKiBVcGRhdGUgdGhlIGRhdGVwaWNrZXIgZGlzcGxheS5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZWxlbSB7RXZlbnR8RWxlbWVudH0gYSBmb2N1cyBldmVudCBvciB0aGUgY29udHJvbCB0byB1c2UuXG5cdFx0XHRAcGFyYW0gaGlkZGVuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBpbml0aWFsbHkgaGlkZSB0aGUgZGF0ZXBpY2tlci4gKi9cblx0XHRfdXBkYXRlOiBmdW5jdGlvbihlbGVtLCBoaWRkZW4pIHtcblx0XHRcdGVsZW0gPSAkKGVsZW0udGFyZ2V0IHx8IGVsZW0pO1xuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xuXHRcdFx0XHRpZiAoaW5zdC5pbmxpbmUgfHwgcGx1Z2luLmN1ckluc3QgPT09IGluc3QpIHtcblx0XHRcdFx0XHRpZiAoJC5pc0Z1bmN0aW9uKGluc3Qub3B0aW9ucy5vbkNoYW5nZU1vbnRoWWVhcikgJiYgKCFpbnN0LnByZXZEYXRlIHx8XG5cdFx0XHRcdFx0XHRcdGluc3QucHJldkRhdGUueWVhcigpICE9PSBpbnN0LmRyYXdEYXRlLnllYXIoKSB8fFxuXHRcdFx0XHRcdFx0XHRpbnN0LnByZXZEYXRlLm1vbnRoKCkgIT09IGluc3QuZHJhd0RhdGUubW9udGgoKSkpIHtcblx0XHRcdFx0XHRcdGluc3Qub3B0aW9ucy5vbkNoYW5nZU1vbnRoWWVhci5hcHBseShlbGVtWzBdLFxuXHRcdFx0XHRcdFx0XHRbaW5zdC5kcmF3RGF0ZS55ZWFyKCksIGluc3QuZHJhd0RhdGUubW9udGgoKV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaW5zdC5pbmxpbmUpIHtcblx0XHRcdFx0XHR2YXIgaW5kZXggPSAkKCdhLCA6aW5wdXQnLCBlbGVtKS5pbmRleCgkKCc6Zm9jdXMnLCBlbGVtKSk7XG5cdFx0XHRcdFx0ZWxlbS5odG1sKHRoaXMuX2dlbmVyYXRlQ29udGVudChlbGVtWzBdLCBpbnN0KSk7XG5cdFx0XHRcdFx0dmFyIGZvY3VzID0gZWxlbS5maW5kKCdhLCA6aW5wdXQnKTtcblx0XHRcdFx0XHRmb2N1cy5lcShNYXRoLm1heChNYXRoLm1pbihpbmRleCwgZm9jdXMubGVuZ3RoIC0gMSksIDApKS5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKHBsdWdpbi5jdXJJbnN0ID09PSBpbnN0KSB7XG5cdFx0XHRcdFx0aWYgKCFpbnN0LmRpdikge1xuXHRcdFx0XHRcdFx0aW5zdC5kaXYgPSAkKCc8ZGl2PjwvZGl2PicpLmFkZENsYXNzKHRoaXMuX3BvcHVwQ2xhc3MpLlxuXHRcdFx0XHRcdFx0XHRjc3Moe2Rpc3BsYXk6IChoaWRkZW4gPyAnbm9uZScgOiAnc3RhdGljJyksIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuXHRcdFx0XHRcdFx0XHRcdGxlZnQ6IGVsZW0ub2Zmc2V0KCkubGVmdCwgdG9wOiBlbGVtLm9mZnNldCgpLnRvcCArIGVsZW0ub3V0ZXJIZWlnaHQoKX0pLlxuXHRcdFx0XHRcdFx0XHRhcHBlbmRUbygkKGluc3Qub3B0aW9ucy5wb3B1cENvbnRhaW5lciB8fCAnYm9keScpKTtcblx0XHRcdFx0XHRcdGlmICgkLmZuLm1vdXNld2hlZWwpIHtcblx0XHRcdFx0XHRcdFx0aW5zdC5kaXYubW91c2V3aGVlbCh0aGlzLl9kb01vdXNlV2hlZWwpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpbnN0LmRpdi5odG1sKHRoaXMuX2dlbmVyYXRlQ29udGVudChlbGVtWzBdLCBpbnN0KSk7XG5cdFx0XHRcdFx0ZWxlbS5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBVcGRhdGUgdGhlIGlucHV0IGZpZWxkIGFuZCBhbnkgYWx0ZXJuYXRlIGZpZWxkIHdpdGggdGhlIGN1cnJlbnQgZGF0ZXMuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIHVzZS5cblx0XHRcdEBwYXJhbSBrZXlVcCB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgY29taW5nIGZyb20gPGNvZGU+a2V5VXA8L2NvZGU+IHByb2Nlc3NpbmcgKGludGVybmFsKS4gKi9cblx0XHRfdXBkYXRlSW5wdXQ6IGZ1bmN0aW9uKGVsZW0sIGtleVVwKSB7XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xuXHRcdFx0XHR2YXIgdmFsdWUgPSAnJztcblx0XHRcdFx0dmFyIGFsdFZhbHVlID0gJyc7XG5cdFx0XHRcdHZhciBzZXAgPSAoaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0ID8gaW5zdC5vcHRpb25zLm11bHRpU2VwYXJhdG9yIDpcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMucmFuZ2VTZXBhcmF0b3IpO1xuXHRcdFx0XHR2YXIgY2FsZW5kYXIgPSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXI7XG5cdFx0XHRcdHZhciBkYXRlRm9ybWF0ID0gaW5zdC5nZXQoJ2RhdGVGb3JtYXQnKTtcblx0XHRcdFx0dmFyIGFsdEZvcm1hdCA9IGluc3Qub3B0aW9ucy5hbHRGb3JtYXQgfHwgZGF0ZUZvcm1hdDtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YWx1ZSArPSAoa2V5VXAgPyAnJyA6IChpID4gMCA/IHNlcCA6ICcnKSArXG5cdFx0XHRcdFx0XHRjYWxlbmRhci5mb3JtYXREYXRlKGRhdGVGb3JtYXQsIGluc3Quc2VsZWN0ZWREYXRlc1tpXSkpO1xuXHRcdFx0XHRcdGFsdFZhbHVlICs9IChpID4gMCA/IHNlcCA6ICcnKSArXG5cdFx0XHRcdFx0XHRjYWxlbmRhci5mb3JtYXREYXRlKGFsdEZvcm1hdCwgaW5zdC5zZWxlY3RlZERhdGVzW2ldKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWluc3QuaW5saW5lICYmICFrZXlVcCkge1xuXHRcdFx0XHRcdCQoZWxlbSkudmFsKHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQkKGluc3Qub3B0aW9ucy5hbHRGaWVsZCkudmFsKGFsdFZhbHVlKTtcblx0XHRcdFx0aWYgKCQuaXNGdW5jdGlvbihpbnN0Lm9wdGlvbnMub25TZWxlY3QpICYmICFrZXlVcCAmJiAhaW5zdC5pblNlbGVjdCkge1xuXHRcdFx0XHRcdGluc3QuaW5TZWxlY3QgPSB0cnVlOyAvLyBQcmV2ZW50IGVuZGxlc3MgbG9vcHNcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMub25TZWxlY3QuYXBwbHkoZWxlbSwgW2luc3Quc2VsZWN0ZWREYXRlc10pO1xuXHRcdFx0XHRcdGluc3QuaW5TZWxlY3QgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIHNpemUgb2YgbGVmdCBhbmQgdG9wIGJvcmRlcnMgZm9yIGFuIGVsZW1lbnQuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGVsZW0ge2pRdWVyeX0gVGhlIGVsZW1lbnQgb2YgaW50ZXJlc3QuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJbXX0gVGhlIGxlZnQgYW5kIHRvcCBib3JkZXJzLiAqL1xuXHRcdF9nZXRCb3JkZXJzOiBmdW5jdGlvbihlbGVtKSB7XG5cdFx0XHR2YXIgY29udmVydCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiB7dGhpbjogMSwgbWVkaXVtOiAzLCB0aGljazogNX1bdmFsdWVdIHx8IHZhbHVlO1xuXHRcdFx0fTtcblx0XHRcdHJldHVybiBbcGFyc2VGbG9hdChjb252ZXJ0KGVsZW0uY3NzKCdib3JkZXItbGVmdC13aWR0aCcpKSksXG5cdFx0XHRcdHBhcnNlRmxvYXQoY29udmVydChlbGVtLmNzcygnYm9yZGVyLXRvcC13aWR0aCcpKSldO1xuXHRcdH0sXG5cblx0XHQvKiogQ2hlY2sgcG9zaXRpb25pbmcgdG8gcmVtYWluIG9uIHRoZSBzY3JlZW4uXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IFRoZSB1cGRhdGVkIG9mZnNldCBmb3IgdGhlIGRhdGVwaWNrZXIuICovXG5cdFx0X2NoZWNrT2Zmc2V0OiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHR2YXIgYmFzZSA9IChpbnN0LmVsZW0uaXMoJzpoaWRkZW4nKSAmJiBpbnN0LnRyaWdnZXIgPyBpbnN0LnRyaWdnZXIgOiBpbnN0LmVsZW0pO1xuXHRcdFx0dmFyIG9mZnNldCA9IGJhc2Uub2Zmc2V0KCk7XG5cdFx0XHR2YXIgYnJvd3NlcldpZHRoID0gJCh3aW5kb3cpLndpZHRoKCk7XG5cdFx0XHR2YXIgYnJvd3NlckhlaWdodCA9ICQod2luZG93KS5oZWlnaHQoKTtcblx0XHRcdGlmIChicm93c2VyV2lkdGggPT09IDApIHtcblx0XHRcdFx0cmV0dXJuIG9mZnNldDtcblx0XHRcdH1cblx0XHRcdHZhciBpc0ZpeGVkID0gZmFsc2U7XG5cdFx0XHQkKGluc3QuZWxlbSkucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlzRml4ZWQgfD0gJCh0aGlzKS5jc3MoJ3Bvc2l0aW9uJykgPT09ICdmaXhlZCc7XG5cdFx0XHRcdHJldHVybiAhaXNGaXhlZDtcblx0XHRcdH0pO1xuXHRcdFx0dmFyIHNjcm9sbFggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQ7XG5cdFx0XHR2YXIgc2Nyb2xsWSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7XG5cdFx0XHR2YXIgYWJvdmUgPSBvZmZzZXQudG9wIC0gKGlzRml4ZWQgPyBzY3JvbGxZIDogMCkgLSBpbnN0LmRpdi5vdXRlckhlaWdodCgpO1xuXHRcdFx0dmFyIGJlbG93ID0gb2Zmc2V0LnRvcCAtIChpc0ZpeGVkID8gc2Nyb2xsWSA6IDApICsgYmFzZS5vdXRlckhlaWdodCgpO1xuXHRcdFx0dmFyIGFsaWduTCA9IG9mZnNldC5sZWZ0IC0gKGlzRml4ZWQgPyBzY3JvbGxYIDogMCk7XG5cdFx0XHR2YXIgYWxpZ25SID0gb2Zmc2V0LmxlZnQgLSAoaXNGaXhlZCA/IHNjcm9sbFggOiAwKSArIGJhc2Uub3V0ZXJXaWR0aCgpIC0gaW5zdC5kaXYub3V0ZXJXaWR0aCgpO1xuXHRcdFx0dmFyIHRvb1dpZGUgPSAob2Zmc2V0LmxlZnQgLSBzY3JvbGxYICsgaW5zdC5kaXYub3V0ZXJXaWR0aCgpKSA+IGJyb3dzZXJXaWR0aDtcblx0XHRcdHZhciB0b29IaWdoID0gKG9mZnNldC50b3AgLSBzY3JvbGxZICsgaW5zdC5lbGVtLm91dGVySGVpZ2h0KCkgK1xuXHRcdFx0XHRpbnN0LmRpdi5vdXRlckhlaWdodCgpKSA+IGJyb3dzZXJIZWlnaHQ7XG5cdFx0XHRpbnN0LmRpdi5jc3MoJ3Bvc2l0aW9uJywgaXNGaXhlZCA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnKTtcblx0XHRcdHZhciBhbGlnbm1lbnQgPSBpbnN0Lm9wdGlvbnMuYWxpZ25tZW50O1xuXHRcdFx0aWYgKGFsaWdubWVudCA9PT0gJ3RvcExlZnQnKSB7XG5cdFx0XHRcdG9mZnNldCA9IHtsZWZ0OiBhbGlnbkwsIHRvcDogYWJvdmV9O1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoYWxpZ25tZW50ID09PSAndG9wUmlnaHQnKSB7XG5cdFx0XHRcdG9mZnNldCA9IHtsZWZ0OiBhbGlnblIsIHRvcDogYWJvdmV9O1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoYWxpZ25tZW50ID09PSAnYm90dG9tTGVmdCcpIHtcblx0XHRcdFx0b2Zmc2V0ID0ge2xlZnQ6IGFsaWduTCwgdG9wOiBiZWxvd307XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChhbGlnbm1lbnQgPT09ICdib3R0b21SaWdodCcpIHtcblx0XHRcdFx0b2Zmc2V0ID0ge2xlZnQ6IGFsaWduUiwgdG9wOiBiZWxvd307XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChhbGlnbm1lbnQgPT09ICd0b3AnKSB7XG5cdFx0XHRcdG9mZnNldCA9IHtsZWZ0OiAoaW5zdC5vcHRpb25zLmlzUlRMIHx8IHRvb1dpZGUgPyBhbGlnblIgOiBhbGlnbkwpLCB0b3A6IGFib3ZlfTtcblx0XHRcdH1cblx0XHRcdGVsc2UgeyAvLyBib3R0b21cblx0XHRcdFx0b2Zmc2V0ID0ge2xlZnQ6IChpbnN0Lm9wdGlvbnMuaXNSVEwgfHwgdG9vV2lkZSA/IGFsaWduUiA6IGFsaWduTCksXG5cdFx0XHRcdFx0dG9wOiAodG9vSGlnaCA/IGFib3ZlIDogYmVsb3cpfTtcblx0XHRcdH1cblx0XHRcdG9mZnNldC5sZWZ0ID0gTWF0aC5tYXgoKGlzRml4ZWQgPyAwIDogc2Nyb2xsWCksIG9mZnNldC5sZWZ0KTtcblx0XHRcdG9mZnNldC50b3AgPSBNYXRoLm1heCgoaXNGaXhlZCA/IDAgOiBzY3JvbGxZKSwgb2Zmc2V0LnRvcCk7XG5cdFx0XHRyZXR1cm4gb2Zmc2V0O1xuXHRcdH0sXG5cblx0XHQvKiogQ2xvc2UgZGF0ZSBwaWNrZXIgaWYgY2xpY2tlZCBlbHNld2hlcmUuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGV2ZW50IHtNb3VzZUV2ZW50fSBUaGUgbW91c2UgY2xpY2sgdG8gY2hlY2suICovXG5cdFx0X2NoZWNrRXh0ZXJuYWxDbGljazogZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdGlmICghcGx1Z2luLmN1ckluc3QpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGVsZW0gPSAkKGV2ZW50LnRhcmdldCk7XG5cdFx0XHRpZiAoZWxlbS5jbG9zZXN0KCcuJyArIHBsdWdpbi5fcG9wdXBDbGFzcyArICcsLicgKyBwbHVnaW4uX3RyaWdnZXJDbGFzcykubGVuZ3RoID09PSAwICYmXG5cdFx0XHRcdFx0IWVsZW0uaGFzQ2xhc3MocGx1Z2luLl9nZXRNYXJrZXIoKSkpIHtcblx0XHRcdFx0cGx1Z2luLmhpZGUocGx1Z2luLmN1ckluc3QpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogSGlkZSBhIHBvcHVwIGRhdGVwaWNrZXIuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudHxvYmplY3R9IFRoZSBjb250cm9sIHRvIHVzZSBvciB0aGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBwYXJhbSBpbW1lZGlhdGUge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGNsb3NlIGltbWVkaWF0ZWx5IHdpdGhvdXQgYW5pbWF0aW9uIChpbnRlcm5hbCkuXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnaGlkZScpICovXG5cdFx0aGlkZTogZnVuY3Rpb24oZWxlbSwgaW1tZWRpYXRlKSB7XG5cdFx0XHRpZiAoIWVsZW0pIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0aWYgKCQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xuXHRcdFx0XHRpbnN0ID0gZWxlbTtcblx0XHRcdH1cblx0XHRcdGlmIChpbnN0ICYmIGluc3QgPT09IHBsdWdpbi5jdXJJbnN0KSB7XG5cdFx0XHRcdHZhciBzaG93QW5pbSA9IChpbW1lZGlhdGUgPyAnJyA6IGluc3Qub3B0aW9ucy5zaG93QW5pbSk7XG5cdFx0XHRcdHZhciBzaG93U3BlZWQgPSBpbnN0Lm9wdGlvbnMuc2hvd1NwZWVkO1xuXHRcdFx0XHRzaG93U3BlZWQgPSAoc2hvd1NwZWVkID09PSAnbm9ybWFsJyAmJiAkLnVpICYmXG5cdFx0XHRcdFx0cGFyc2VJbnQoJC51aS52ZXJzaW9uLnN1YnN0cmluZygyKSkgPj0gOCA/ICdfZGVmYXVsdCcgOiBzaG93U3BlZWQpO1xuXHRcdFx0XHR2YXIgcG9zdFByb2Nlc3MgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIWluc3QuZGl2KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGluc3QuZGl2LnJlbW92ZSgpO1xuXHRcdFx0XHRcdGluc3QuZGl2ID0gbnVsbDtcblx0XHRcdFx0XHRwbHVnaW4uY3VySW5zdCA9IG51bGw7XG5cdFx0XHRcdFx0aWYgKCQuaXNGdW5jdGlvbihpbnN0Lm9wdGlvbnMub25DbG9zZSkpIHtcblx0XHRcdFx0XHRcdGluc3Qub3B0aW9ucy5vbkNsb3NlLmFwcGx5KGVsZW0sIFtpbnN0LnNlbGVjdGVkRGF0ZXNdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdGluc3QuZGl2LnN0b3AoKTtcblx0XHRcdFx0aWYgKCQuZWZmZWN0cyAmJiAoJC5lZmZlY3RzW3Nob3dBbmltXSB8fCAoJC5lZmZlY3RzLmVmZmVjdCAmJiAkLmVmZmVjdHMuZWZmZWN0W3Nob3dBbmltXSkpKSB7XG5cdFx0XHRcdFx0aW5zdC5kaXYuaGlkZShzaG93QW5pbSwgaW5zdC5vcHRpb25zLnNob3dPcHRpb25zLCBzaG93U3BlZWQsIHBvc3RQcm9jZXNzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHR2YXIgaGlkZUFuaW0gPSAoc2hvd0FuaW0gPT09ICdzbGlkZURvd24nID8gJ3NsaWRlVXAnIDpcblx0XHRcdFx0XHRcdChzaG93QW5pbSA9PT0gJ2ZhZGVJbicgPyAnZmFkZU91dCcgOiAnaGlkZScpKTtcblx0XHRcdFx0XHRpbnN0LmRpdltoaWRlQW5pbV0oKHNob3dBbmltID8gc2hvd1NwZWVkIDogJycpLCBwb3N0UHJvY2Vzcyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFzaG93QW5pbSkge1xuXHRcdFx0XHRcdHBvc3RQcm9jZXNzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIEhhbmRsZSBrZXlzdHJva2VzIGluIHRoZSBkYXRlcGlja2VyLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBldmVudCB7S2V5RXZlbnR9IFRoZSBrZXlzdHJva2UuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBub3QgaGFuZGxlZCwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIGhhbmRsZWQuICovXG5cdFx0X2tleURvd246IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHR2YXIgZWxlbSA9IChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuZWxlbSkgfHwgZXZlbnQudGFyZ2V0O1xuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoZWxlbSk7XG5cdFx0XHR2YXIgaGFuZGxlZCA9IGZhbHNlO1xuXHRcdFx0aWYgKGluc3QuaW5saW5lIHx8IGluc3QuZGl2KSB7XG5cdFx0XHRcdGlmIChldmVudC5rZXlDb2RlID09PSA5KSB7IC8vIFRhYiAtIGNsb3NlXG5cdFx0XHRcdFx0cGx1Z2luLmhpZGUoZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMTMpIHsgLy8gRW50ZXIgLSBzZWxlY3Rcblx0XHRcdFx0XHRwbHVnaW4uc2VsZWN0RGF0ZShlbGVtLFxuXHRcdFx0XHRcdFx0JCgnYS4nICsgaW5zdC5vcHRpb25zLnJlbmRlcmVyLmhpZ2hsaWdodGVkQ2xhc3MsIGluc3QuZGl2KVswXSk7XG5cdFx0XHRcdFx0aGFuZGxlZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7IC8vIENvbW1hbmQga2V5c3Ryb2tlc1xuXHRcdFx0XHRcdHZhciBjb21tYW5kcyA9IGluc3Qub3B0aW9ucy5jb21tYW5kcztcblx0XHRcdFx0XHRmb3IgKHZhciBuYW1lIGluIGNvbW1hbmRzKSB7XG5cdFx0XHRcdFx0XHR2YXIgY29tbWFuZCA9IGNvbW1hbmRzW25hbWVdO1xuXHRcdFx0XHRcdFx0aWYgKGNvbW1hbmQua2V5c3Ryb2tlLmtleUNvZGUgPT09IGV2ZW50LmtleUNvZGUgJiZcblx0XHRcdFx0XHRcdFx0XHQhIWNvbW1hbmQua2V5c3Ryb2tlLmN0cmxLZXkgPT09ICEhKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiZcblx0XHRcdFx0XHRcdFx0XHQhIWNvbW1hbmQua2V5c3Ryb2tlLmFsdEtleSA9PT0gZXZlbnQuYWx0S2V5ICYmXG5cdFx0XHRcdFx0XHRcdFx0ISFjb21tYW5kLmtleXN0cm9rZS5zaGlmdEtleSA9PT0gZXZlbnQuc2hpZnRLZXkpIHtcblx0XHRcdFx0XHRcdFx0cGx1Z2luLnBlcmZvcm1BY3Rpb24oZWxlbSwgbmFtZSk7XG5cdFx0XHRcdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2UgeyAvLyBTaG93IG9uICdjdXJyZW50JyBrZXlzdHJva2Vcblx0XHRcdFx0dmFyIGNvbW1hbmQgPSBpbnN0Lm9wdGlvbnMuY29tbWFuZHMuY3VycmVudDtcblx0XHRcdFx0aWYgKGNvbW1hbmQua2V5c3Ryb2tlLmtleUNvZGUgPT09IGV2ZW50LmtleUNvZGUgJiZcblx0XHRcdFx0XHRcdCEhY29tbWFuZC5rZXlzdHJva2UuY3RybEtleSA9PT0gISEoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJlxuXHRcdFx0XHRcdFx0ISFjb21tYW5kLmtleXN0cm9rZS5hbHRLZXkgPT09IGV2ZW50LmFsdEtleSAmJlxuXHRcdFx0XHRcdFx0ISFjb21tYW5kLmtleXN0cm9rZS5zaGlmdEtleSA9PT0gZXZlbnQuc2hpZnRLZXkpIHtcblx0XHRcdFx0XHRwbHVnaW4uc2hvdyhlbGVtKTtcblx0XHRcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aW5zdC5jdHJsS2V5ID0gKChldmVudC5rZXlDb2RlIDwgNDggJiYgZXZlbnQua2V5Q29kZSAhPT0gMzIpIHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSk7XG5cdFx0XHRpZiAoaGFuZGxlZCkge1xuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiAhaGFuZGxlZDtcblx0XHR9LFxuXG5cdFx0LyoqIEZpbHRlciBrZXlzdHJva2VzIGluIHRoZSBkYXRlcGlja2VyLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBldmVudCB7S2V5RXZlbnR9IFRoZSBrZXlzdHJva2UuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBhbGxvd2VkLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90IGFsbG93ZWQuICovXG5cdFx0X2tleVByZXNzOiBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoKGV2ZW50LmRhdGEgJiYgZXZlbnQuZGF0YS5lbGVtKSB8fCBldmVudC50YXJnZXQpO1xuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkgJiYgaW5zdC5vcHRpb25zLmNvbnN0cmFpbklucHV0KSB7XG5cdFx0XHRcdHZhciBjaCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQua2V5Q29kZSB8fCBldmVudC5jaGFyQ29kZSk7XG5cdFx0XHRcdHZhciBhbGxvd2VkQ2hhcnMgPSBwbHVnaW4uX2FsbG93ZWRDaGFycyhpbnN0KTtcblx0XHRcdFx0cmV0dXJuIChldmVudC5tZXRhS2V5IHx8IGluc3QuY3RybEtleSB8fCBjaCA8ICcgJyB8fFxuXHRcdFx0XHRcdCFhbGxvd2VkQ2hhcnMgfHwgYWxsb3dlZENoYXJzLmluZGV4T2YoY2gpID4gLTEpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIGFsbG93ZWQgYnkgdGhlIGRhdGUgZm9ybWF0LlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgc2V0IG9mIGFsbG93ZWQgY2hhcmFjdGVycywgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgYW55dGhpbmcgYWxsb3dlZC4gKi9cblx0XHRfYWxsb3dlZENoYXJzOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHR2YXIgYWxsb3dlZENoYXJzID0gKGluc3Qub3B0aW9ucy5tdWx0aVNlbGVjdCA/IGluc3Qub3B0aW9ucy5tdWx0aVNlcGFyYXRvciA6XG5cdFx0XHRcdChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgPyBpbnN0Lm9wdGlvbnMucmFuZ2VTZXBhcmF0b3IgOiAnJykpO1xuXHRcdFx0dmFyIGxpdGVyYWwgPSBmYWxzZTtcblx0XHRcdHZhciBoYXNOdW0gPSBmYWxzZTtcblx0XHRcdHZhciBkYXRlRm9ybWF0ID0gaW5zdC5nZXQoJ2RhdGVGb3JtYXQnKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0ZUZvcm1hdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgY2ggPSBkYXRlRm9ybWF0LmNoYXJBdChpKTtcblx0XHRcdFx0aWYgKGxpdGVyYWwpIHtcblx0XHRcdFx0XHRpZiAoY2ggPT09IFwiJ1wiICYmIGRhdGVGb3JtYXQuY2hhckF0KGkgKyAxKSAhPT0gXCInXCIpIHtcblx0XHRcdFx0XHRcdGxpdGVyYWwgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gY2g7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHN3aXRjaCAoY2gpIHtcblx0XHRcdFx0XHRcdGNhc2UgJ2QnOiBjYXNlICdtJzogY2FzZSAnbyc6IGNhc2UgJ3cnOlxuXHRcdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gKGhhc051bSA/ICcnIDogJzAxMjM0NTY3ODknKTsgaGFzTnVtID0gdHJ1ZTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICd5JzogY2FzZSAnQCc6IGNhc2UgJyEnOlxuXHRcdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gKGhhc051bSA/ICcnIDogJzAxMjM0NTY3ODknKSArICctJzsgaGFzTnVtID0gdHJ1ZTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdKJzpcblx0XHRcdFx0XHRcdFx0YWxsb3dlZENoYXJzICs9IChoYXNOdW0gPyAnJyA6ICcwMTIzNDU2Nzg5JykgKyAnLS4nOyBoYXNOdW0gPSB0cnVlOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0QnOiBjYXNlICdNJzogY2FzZSAnWSc6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBudWxsOyAvLyBBY2NlcHQgYW55dGhpbmdcblx0XHRcdFx0XHRcdGNhc2UgXCInXCI6XG5cdFx0XHRcdFx0XHRcdGlmIChkYXRlRm9ybWF0LmNoYXJBdChpICsgMSkgPT09IFwiJ1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0YWxsb3dlZENoYXJzICs9IFwiJ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGxpdGVyYWwgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0YWxsb3dlZENoYXJzICs9IGNoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFsbG93ZWRDaGFycztcblx0XHR9LFxuXG5cdFx0LyoqIFN5bmNocm9uaXNlIGRhdGVwaWNrZXIgd2l0aCB0aGUgZmllbGQuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGV2ZW50IHtLZXlFdmVudH0gVGhlIGtleXN0cm9rZS5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGFsbG93ZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QgYWxsb3dlZC4gKi9cblx0XHRfa2V5VXA6IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHR2YXIgZWxlbSA9IChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuZWxlbSkgfHwgZXZlbnQudGFyZ2V0O1xuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSAmJiAhaW5zdC5jdHJsS2V5ICYmIGluc3QubGFzdFZhbCAhPT0gaW5zdC5lbGVtLnZhbCgpKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dmFyIGRhdGVzID0gcGx1Z2luLl9leHRyYWN0RGF0ZXMoaW5zdCwgaW5zdC5lbGVtLnZhbCgpKTtcblx0XHRcdFx0XHRpZiAoZGF0ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0cGx1Z2luLnNldERhdGUoZWxlbSwgZGF0ZXMsIG51bGwsIHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRjYXRjaCAoZXZlbnQpIHtcblx0XHRcdFx0XHQvLyBJZ25vcmVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdC8qKiBJbmNyZW1lbnQvZGVjcmVtZW50IG1vbnRoL3llYXIgb24gbW91c2Ugd2hlZWwgYWN0aXZpdHkuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGV2ZW50IHtldmVudH0gVGhlIG1vdXNlIHdoZWVsIGV2ZW50LlxuXHRcdFx0QHBhcmFtIGRlbHRhIHtudW1iZXJ9IFRoZSBhbW91bnQgb2YgY2hhbmdlLiAqL1xuXHRcdF9kb01vdXNlV2hlZWw6IGZ1bmN0aW9uKGV2ZW50LCBkZWx0YSkge1xuXHRcdFx0dmFyIGVsZW0gPSAocGx1Z2luLmN1ckluc3QgJiYgcGx1Z2luLmN1ckluc3QuZWxlbVswXSkgfHxcblx0XHRcdFx0JChldmVudC50YXJnZXQpLmNsb3Nlc3QoJy4nICsgcGx1Z2luLl9nZXRNYXJrZXIoKSlbMF07XG5cdFx0XHRpZiAocGx1Z2luLmlzRGlzYWJsZWQoZWxlbSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLnVzZU1vdXNlV2hlZWwpIHtcblx0XHRcdFx0ZGVsdGEgPSAoZGVsdGEgPCAwID8gLTEgOiArMSk7XG5cdFx0XHRcdHBsdWdpbi5jaGFuZ2VNb250aChlbGVtLCAtaW5zdC5vcHRpb25zW2V2ZW50LmN0cmxLZXkgPyAnbW9udGhzVG9KdW1wJyA6ICdtb250aHNUb1N0ZXAnXSAqIGRlbHRhKTtcblx0XHRcdH1cblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fSxcblxuXHRcdC8qKiBDbGVhciBhbiBpbnB1dCBhbmQgY2xvc2UgYSBwb3B1cCBkYXRlcGlja2VyLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIHVzZS5cblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdjbGVhcicpICovXG5cdFx0Y2xlYXI6IGZ1bmN0aW9uKGVsZW0pIHtcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XG5cdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IFtdO1xuXHRcdFx0XHR0aGlzLmhpZGUoZWxlbSk7XG5cdFx0XHRcdHZhciBkZWZhdWx0RGF0ZSA9IGluc3QuZ2V0KCdkZWZhdWx0RGF0ZScpO1xuXHRcdFx0XHRpZiAoaW5zdC5vcHRpb25zLnNlbGVjdERlZmF1bHREYXRlICYmIGRlZmF1bHREYXRlKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXREYXRlKGVsZW0sIChkZWZhdWx0RGF0ZSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKSkubmV3RGF0ZSgpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVJbnB1dChlbGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIHNlbGVjdGVkIGRhdGUocykgZm9yIGEgZGF0ZXBpY2tlci5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7Q0RhdGVbXX0gVGhlIHNlbGVjdGVkIGRhdGUocykuXG5cdFx0XHRAZXhhbXBsZSB2YXIgZGF0ZXMgPSAkKHNlbGVjdG9yKS5kYXRlcGljaygnZ2V0RGF0ZScpICovXG5cdFx0Z2V0RGF0ZTogZnVuY3Rpb24oZWxlbSkge1xuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0cmV0dXJuICghJC5pc0VtcHR5T2JqZWN0KGluc3QpID8gaW5zdC5zZWxlY3RlZERhdGVzIDogW10pO1xuXHRcdH0sXG5cblx0XHQvKiogU2V0IHRoZSBzZWxlY3RlZCBkYXRlKHMpIGZvciBhIGRhdGVwaWNrZXIuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gdGhlIGNvbnRyb2wgdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBkYXRlcyB7Q0RhdGV8bnVtYmVyfHN0cmluZ3xhcnJheX0gdGhlIHNlbGVjdGVkIGRhdGUocykuXG5cdFx0XHRAcGFyYW0gW2VuZERhdGVdIHtDRGF0ZXxudW1iZXJ8c3RyaW5nfSB0aGUgZW5kaW5nIGRhdGUgZm9yIGEgcmFuZ2UuXG5cdFx0XHRAcGFyYW0gW2tleVVwXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgY29taW5nIGZyb20gPGNvZGU+a2V5VXA8L2NvZGU+IHByb2Nlc3NpbmcgKGludGVybmFsKS5cblx0XHRcdEBwYXJhbSBbc2V0T3B0XSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgY29taW5nIGZyb20gb3B0aW9uIHByb2Nlc3NpbmcgKGludGVybmFsKS5cblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdzZXREYXRlJywgbmV3IERhdGUoMjAxNCwgMTItMSwgMjUpKVxuICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdzZXREYXRlJywgJzEyLzI1LzIwMTQnLCAnMDEvMDEvMjAxNScpXG4gJChzZWxlY3RvcikuZGF0ZXBpY2soJ3NldERhdGUnLCBbZGF0ZTEsIGRhdGUyLCBkYXRlM10pICovXG5cdFx0c2V0RGF0ZTogZnVuY3Rpb24oZWxlbSwgZGF0ZXMsIGVuZERhdGUsIGtleVVwLCBzZXRPcHQpIHtcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XG5cdFx0XHRcdGlmICghJC5pc0FycmF5KGRhdGVzKSkge1xuXHRcdFx0XHRcdGRhdGVzID0gW2RhdGVzXTtcblx0XHRcdFx0XHRpZiAoZW5kRGF0ZSkge1xuXHRcdFx0XHRcdFx0ZGF0ZXMucHVzaChlbmREYXRlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIG1pbkRhdGUgPSBpbnN0LmdldCgnbWluRGF0ZScpO1xuXHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XG5cdFx0XHRcdHZhciBjdXJEYXRlID0gaW5zdC5zZWxlY3RlZERhdGVzWzBdO1xuXHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXMgPSBbXTtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkYXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBkYXRlID0gaW5zdC5vcHRpb25zLmNhbGVuZGFyLmRldGVybWluZURhdGUoXG5cdFx0XHRcdFx0XHRkYXRlc1tpXSwgbnVsbCwgY3VyRGF0ZSwgaW5zdC5nZXQoJ2RhdGVGb3JtYXQnKSwgaW5zdC5nZXRDb25maWcoKSk7XG5cdFx0XHRcdFx0aWYgKGRhdGUpIHtcblx0XHRcdFx0XHRcdGlmICgoIW1pbkRhdGUgfHwgZGF0ZS5jb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKSAmJlxuXHRcdFx0XHRcdFx0XHRcdCghbWF4RGF0ZSB8fCBkYXRlLmNvbXBhcmVUbyhtYXhEYXRlKSAhPT0gKzEpKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChpbnN0LnNlbGVjdGVkRGF0ZXNbal0uY29tcGFyZVRvKGRhdGUpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKCFmb3VuZCkge1xuXHRcdFx0XHRcdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcy5wdXNoKGRhdGUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcy5zcGxpY2UoaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0IHx8XG5cdFx0XHRcdFx0KGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCA/IDIgOiAxKSwgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aCk7XG5cdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNhc2UgMTogaW5zdC5zZWxlY3RlZERhdGVzWzFdID0gaW5zdC5zZWxlY3RlZERhdGVzWzBdOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgMjogaW5zdC5zZWxlY3RlZERhdGVzWzFdID1cblx0XHRcdFx0XHRcdFx0KGluc3Quc2VsZWN0ZWREYXRlc1swXS5jb21wYXJlVG8oaW5zdC5zZWxlY3RlZERhdGVzWzFdKSA9PT0gKzEgP1xuXHRcdFx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXNbMF0gOiBpbnN0LnNlbGVjdGVkRGF0ZXNbMV0pOyBicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aW5zdC5waWNraW5nUmFuZ2UgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpbnN0LnByZXZEYXRlID0gKGluc3QuZHJhd0RhdGUgPyBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKSA6IG51bGwpO1xuXHRcdFx0XHRpbnN0LmRyYXdEYXRlID0gdGhpcy5fY2hlY2tNaW5NYXgoKGluc3Quc2VsZWN0ZWREYXRlc1swXSB8fFxuXHRcdFx0XHRcdGluc3QuZ2V0KCdkZWZhdWx0RGF0ZScpIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpKS5uZXdEYXRlKCksIGluc3QpO1xuXHRcdFx0XHRpZiAoIXNldE9wdCkge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZShlbGVtKTtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVJbnB1dChlbGVtLCBrZXlVcCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIGEgZGF0ZSBpcyBzZWxlY3RhYmxlIGZvciB0aGlzIGRhdGVwaWNrZXIuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGNoZWNrLlxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfHN0cmluZ3xudW1iZXJ9IFRoZSBkYXRlIHRvIGNoZWNrLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgc2VsZWN0YWJsZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEBleGFtcGxlIHZhciBzZWxlY3RhYmxlID0gJChzZWxlY3RvcikuZGF0ZXBpY2soJ2lzU2VsZWN0YWJsZScsIGRhdGUpICovXG5cdFx0aXNTZWxlY3RhYmxlOiBmdW5jdGlvbihlbGVtLCBkYXRlKSB7XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGRhdGUgPSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGV0ZXJtaW5lRGF0ZShkYXRlLFxuXHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXNbMF0gfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCksIG51bGwsXG5cdFx0XHRcdGluc3Qub3B0aW9ucy5kYXRlRm9ybWF0LCBpbnN0LmdldENvbmZpZygpKTtcblx0XHRcdHJldHVybiB0aGlzLl9pc1NlbGVjdGFibGUoZWxlbSwgZGF0ZSwgaW5zdC5vcHRpb25zLm9uRGF0ZSxcblx0XHRcdFx0aW5zdC5nZXQoJ21pbkRhdGUnKSwgaW5zdC5nZXQoJ21heERhdGUnKSk7XG5cdFx0fSxcblxuXHRcdC8qKiBJbnRlcm5hbGx5IGRldGVybWluZSB3aGV0aGVyIGEgZGF0ZSBpcyBzZWxlY3RhYmxlIGZvciB0aGlzIGRhdGVwaWNrZXIuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IHRoZSBjb250cm9sIHRvIGNoZWNrLlxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgZGF0ZSB0byBjaGVjay5cblx0XHRcdEBwYXJhbSBvbkRhdGUge2Z1bmN0aW9ufGJvb2xlYW59IEFueSA8Y29kZT5vbkRhdGU8L2NvZGU+IGNhbGxiYWNrIG9yIDxjb2RlPmNhbGxiYWNrLnNlbGVjdGFibGU8L2NvZGU+LlxuXHRcdFx0QHBhcmFtIG1pbkRhdGUge0NEYXRlfSBUaGUgbWluaW11bSBhbGxvd2VkIGRhdGUuXG5cdFx0XHRAcGFyYW0gbWF4RGF0ZSB7Q0RhdGV9IFRoZSBtYXhpbXVtIGFsbG93ZWQgZGF0ZS5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHNlbGVjdGFibGUsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuICovXG5cdFx0X2lzU2VsZWN0YWJsZTogZnVuY3Rpb24oZWxlbSwgZGF0ZSwgb25EYXRlLCBtaW5EYXRlLCBtYXhEYXRlKSB7XG5cdFx0XHR2YXIgZGF0ZUluZm8gPSAodHlwZW9mIG9uRGF0ZSA9PT0gJ2Jvb2xlYW4nID8ge3NlbGVjdGFibGU6IG9uRGF0ZX0gOlxuXHRcdFx0XHQoISQuaXNGdW5jdGlvbihvbkRhdGUpID8ge30gOiBvbkRhdGUuYXBwbHkoZWxlbSwgW2RhdGUsIHRydWVdKSkpO1xuXHRcdFx0cmV0dXJuIChkYXRlSW5mby5zZWxlY3RhYmxlICE9PSBmYWxzZSkgJiZcblx0XHRcdFx0KCFtaW5EYXRlIHx8IGRhdGUudG9KRCgpID49IG1pbkRhdGUudG9KRCgpKSAmJiAoIW1heERhdGUgfHwgZGF0ZS50b0pEKCkgPD0gbWF4RGF0ZS50b0pEKCkpO1xuXHRcdH0sXG5cblx0XHQvKiogUGVyZm9ybSBhIG5hbWVkIGFjdGlvbiBmb3IgYSBkYXRlcGlja2VyLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIGVsZW0ge2VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGFmZmVjdC5cblx0XHRcdEBwYXJhbSBhY3Rpb24ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIGFjdGlvbi4gKi9cblx0XHRwZXJmb3JtQWN0aW9uOiBmdW5jdGlvbihlbGVtLCBhY3Rpb24pIHtcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpICYmICF0aGlzLmlzRGlzYWJsZWQoZWxlbSkpIHtcblx0XHRcdFx0dmFyIGNvbW1hbmRzID0gaW5zdC5vcHRpb25zLmNvbW1hbmRzO1xuXHRcdFx0XHRpZiAoY29tbWFuZHNbYWN0aW9uXSAmJiBjb21tYW5kc1thY3Rpb25dLmVuYWJsZWQuYXBwbHkoZWxlbSwgW2luc3RdKSkge1xuXHRcdFx0XHRcdGNvbW1hbmRzW2FjdGlvbl0uYWN0aW9uLmFwcGx5KGVsZW0sIFtpbnN0XSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIFNldCB0aGUgY3VycmVudGx5IHNob3duIG1vbnRoLCBkZWZhdWx0aW5nIHRvIHRvZGF5J3MuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxuXHRcdFx0QHBhcmFtIFt5ZWFyXSB7bnVtYmVyfSBUaGUgeWVhciB0byBzaG93LlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIHNob3cgKDEtMTIpLlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gc2hvdy5cblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdzaG93TW9udGgnLCAyMDE0LCAxMiwgMjUpICovXG5cdFx0c2hvd01vbnRoOiBmdW5jdGlvbihlbGVtLCB5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSAmJiAoZGF5ICE9IG51bGwgfHxcblx0XHRcdFx0XHQoaW5zdC5kcmF3RGF0ZS55ZWFyKCkgIT09IHllYXIgfHwgaW5zdC5kcmF3RGF0ZS5tb250aCgpICE9PSBtb250aCkpKSB7XG5cdFx0XHRcdGluc3QucHJldkRhdGUgPSBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKTtcblx0XHRcdFx0dmFyIGNhbGVuZGFyID0gaW5zdC5vcHRpb25zLmNhbGVuZGFyO1xuXHRcdFx0XHR2YXIgc2hvdyA9IHRoaXMuX2NoZWNrTWluTWF4KCh5ZWFyICE9IG51bGwgP1xuXHRcdFx0XHRcdGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbW9udGgsIDEpIDogY2FsZW5kYXIudG9kYXkoKSksIGluc3QpO1xuXHRcdFx0XHRpbnN0LmRyYXdEYXRlLmRhdGUoc2hvdy55ZWFyKCksIHNob3cubW9udGgoKSwgXG5cdFx0XHRcdFx0KGRheSAhPSBudWxsID8gZGF5IDogTWF0aC5taW4oaW5zdC5kcmF3RGF0ZS5kYXkoKSxcblx0XHRcdFx0XHRjYWxlbmRhci5kYXlzSW5Nb250aChzaG93LnllYXIoKSwgc2hvdy5tb250aCgpKSkpKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlKGVsZW0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogQWRqdXN0IHRoZSBjdXJyZW50bHkgc2hvd24gbW9udGguXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxuXHRcdFx0QHBhcmFtIG9mZnNldCB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIG1vbnRocyB0byBjaGFuZ2UgYnkuXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnY2hhbmdlTW9udGgnLCAyKSovXG5cdFx0Y2hhbmdlTW9udGg6IGZ1bmN0aW9uKGVsZW0sIG9mZnNldCkge1xuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcblx0XHRcdFx0dmFyIGRhdGUgPSBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5hZGQob2Zmc2V0LCAnbScpO1xuXHRcdFx0XHR0aGlzLnNob3dNb250aChlbGVtLCBkYXRlLnllYXIoKSwgZGF0ZS5tb250aCgpKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIEFkanVzdCB0aGUgY3VycmVudGx5IHNob3duIGRheS5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXG5cdFx0XHRAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cyB0byBjaGFuZ2UgYnkuXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnY2hhbmdlRGF5JywgNykqL1xuXHRcdGNoYW5nZURheTogZnVuY3Rpb24oZWxlbSwgb2Zmc2V0KSB7XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xuXHRcdFx0XHR2YXIgZGF0ZSA9IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZChvZmZzZXQsICdkJyk7XG5cdFx0XHRcdHRoaXMuc2hvd01vbnRoKGVsZW0sIGRhdGUueWVhcigpLCBkYXRlLm1vbnRoKCksIGRhdGUuZGF5KCkpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogUmVzdHJpY3QgYSBkYXRlIHRvIHRoZSBtaW5pbXVtL21heGltdW0gc3BlY2lmaWVkLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZX0gVGhlIGRhdGUgdG8gY2hlY2suXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy4gKi9cblx0XHRfY2hlY2tNaW5NYXg6IGZ1bmN0aW9uKGRhdGUsIGluc3QpIHtcblx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5nZXQoJ21pbkRhdGUnKTtcblx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcblx0XHRcdGRhdGUgPSAobWluRGF0ZSAmJiBkYXRlLmNvbXBhcmVUbyhtaW5EYXRlKSA9PT0gLTEgPyBtaW5EYXRlLm5ld0RhdGUoKSA6IGRhdGUpO1xuXHRcdFx0ZGF0ZSA9IChtYXhEYXRlICYmIGRhdGUuY29tcGFyZVRvKG1heERhdGUpID09PSArMSA/IG1heERhdGUubmV3RGF0ZSgpIDogZGF0ZSk7XG5cdFx0XHRyZXR1cm4gZGF0ZTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBkYXRlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbnRyeSBpbiB0aGUgZGF0ZXBpY2tlci5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIHRhcmdldCB7RWxlbWVudH0gVGhlIHNlbGVjdGVkIGRhdGVwaWNrZXIgZWxlbWVudC5cblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgY29ycmVzcG9uZGluZyBkYXRlLCBvciA8Y29kZT5udWxsPC9jb2RlPi5cdFx0XHRcblx0XHRcdEBleGFtcGxlIHZhciBkYXRlID0gJChzZWxlY3RvcikuZGF0ZXBpY2soJ3JldHJpZXZlRGF0ZScsICQoJ2Rpdi5kYXRlcGljay1wb3B1cCBhOmNvbnRhaW5zKDEwKScpWzBdKSAqL1xuXHRcdHJldHJpZXZlRGF0ZTogZnVuY3Rpb24oZWxlbSwgdGFyZ2V0KSB7XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRyZXR1cm4gKCQuaXNFbXB0eU9iamVjdChpbnN0KSA/IG51bGwgOiBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZnJvbUpEKFxuXHRcdFx0XHRwYXJzZUZsb2F0KHRhcmdldC5jbGFzc05hbWUucmVwbGFjZSgvXi4qamQoXFxkK1xcLjUpLiokLywgJyQxJykpKSk7XG5cdFx0fSxcblxuXHRcdC8qKiBTZWxlY3QgYSBkYXRlIGZvciB0aGlzIGRhdGVwaWNrZXIuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSB0YXJnZXQge0VsZW1lbnR9IFRoZSBzZWxlY3RlZCBkYXRlcGlja2VyIGVsZW1lbnQuXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnc2VsZWN0RGF0ZScsICQoJ2Rpdi5kYXRlcGljay1wb3B1cCBhOmNvbnRhaW5zKDEwKScpWzBdKSAqL1xuXHRcdHNlbGVjdERhdGU6IGZ1bmN0aW9uKGVsZW0sIHRhcmdldCkge1xuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkgJiYgIXRoaXMuaXNEaXNhYmxlZChlbGVtKSkge1xuXHRcdFx0XHR2YXIgZGF0ZSA9IHRoaXMucmV0cmlldmVEYXRlKGVsZW0sIHRhcmdldCk7XG5cdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QpIHtcblx0XHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0aWYgKGRhdGUuY29tcGFyZVRvKGluc3Quc2VsZWN0ZWREYXRlc1tpXSkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzLnNwbGljZShpLCAxKTtcblx0XHRcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCFmb3VuZCAmJiBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoIDwgaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0KSB7XG5cdFx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXMucHVzaChkYXRlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAoaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0KSB7XG5cdFx0XHRcdFx0aWYgKGluc3QucGlja2luZ1JhbmdlKSB7XG5cdFx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXNbMV0gPSBkYXRlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IFtkYXRlLCBkYXRlXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aW5zdC5waWNraW5nUmFuZ2UgPSAhaW5zdC5waWNraW5nUmFuZ2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzID0gW2RhdGVdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluc3QucHJldkRhdGUgPSBpbnN0LmRyYXdEYXRlID0gZGF0ZS5uZXdEYXRlKCk7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUlucHV0KGVsZW0pO1xuXHRcdFx0XHRpZiAoaW5zdC5pbmxpbmUgfHwgaW5zdC5waWNraW5nUmFuZ2UgfHwgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aCA8XG5cdFx0XHRcdFx0XHQoaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0IHx8IChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgPyAyIDogMSkpKSB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlKGVsZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuaGlkZShlbGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogR2VuZXJhdGUgdGhlIGRhdGVwaWNrZXIgY29udGVudCBmb3IgdGhpcyBjb250cm9sLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEByZXR1cm4ge2pRdWVyeX0gVGhlIGRhdGVwaWNrZXIgY29udGVudCAqL1xuXHRcdF9nZW5lcmF0ZUNvbnRlbnQ6IGZ1bmN0aW9uKGVsZW0sIGluc3QpIHtcblx0XHRcdHZhciBtb250aHNUb1Nob3cgPSBpbnN0Lm9wdGlvbnMubW9udGhzVG9TaG93O1xuXHRcdFx0bW9udGhzVG9TaG93ID0gKCQuaXNBcnJheShtb250aHNUb1Nob3cpID8gbW9udGhzVG9TaG93IDogWzEsIG1vbnRoc1RvU2hvd10pO1xuXHRcdFx0aW5zdC5kcmF3RGF0ZSA9IHRoaXMuX2NoZWNrTWluTWF4KFxuXHRcdFx0XHRpbnN0LmRyYXdEYXRlIHx8IGluc3QuZ2V0KCdkZWZhdWx0RGF0ZScpIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpLCBpbnN0KTtcblx0XHRcdHZhciBkcmF3RGF0ZSA9IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZCgtaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKTtcblx0XHRcdC8vIEdlbmVyYXRlIG1vbnRoc1xuXHRcdFx0dmFyIG1vbnRoUm93cyA9ICcnO1xuXHRcdFx0Zm9yICh2YXIgcm93ID0gMDsgcm93IDwgbW9udGhzVG9TaG93WzBdOyByb3crKykge1xuXHRcdFx0XHR2YXIgbW9udGhzID0gJyc7XG5cdFx0XHRcdGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG1vbnRoc1RvU2hvd1sxXTsgY29sKyspIHtcblx0XHRcdFx0XHRtb250aHMgKz0gdGhpcy5fZ2VuZXJhdGVNb250aChlbGVtLCBpbnN0LCBkcmF3RGF0ZS55ZWFyKCksXG5cdFx0XHRcdFx0XHRkcmF3RGF0ZS5tb250aCgpLCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIsIGluc3Qub3B0aW9ucy5yZW5kZXJlciwgKHJvdyA9PT0gMCAmJiBjb2wgPT09IDApKTtcblx0XHRcdFx0XHRkcmF3RGF0ZS5hZGQoMSwgJ20nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtb250aFJvd3MgKz0gdGhpcy5fcHJlcGFyZShpbnN0Lm9wdGlvbnMucmVuZGVyZXIubW9udGhSb3csIGluc3QpLnJlcGxhY2UoL1xce21vbnRoc1xcfS8sIG1vbnRocyk7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcGlja2VyID0gdGhpcy5fcHJlcGFyZShpbnN0Lm9wdGlvbnMucmVuZGVyZXIucGlja2VyLCBpbnN0KS5yZXBsYWNlKC9cXHttb250aHNcXH0vLCBtb250aFJvd3MpLlxuXHRcdFx0XHRyZXBsYWNlKC9cXHt3ZWVrSGVhZGVyXFx9L2csIHRoaXMuX2dlbmVyYXRlRGF5SGVhZGVycyhpbnN0LCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIsIGluc3Qub3B0aW9ucy5yZW5kZXJlcikpO1xuXHRcdFx0Ly8gQWRkIGNvbW1hbmRzXG5cdFx0XHR2YXIgYWRkQ29tbWFuZCA9IGZ1bmN0aW9uKHR5cGUsIG9wZW4sIGNsb3NlLCBuYW1lLCBjbGFzc2VzKSB7XG5cdFx0XHRcdGlmIChwaWNrZXIuaW5kZXhPZigneycgKyB0eXBlICsgJzonICsgbmFtZSArICd9JykgPT09IC0xKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBjb21tYW5kID0gaW5zdC5vcHRpb25zLmNvbW1hbmRzW25hbWVdO1xuXHRcdFx0XHR2YXIgZGF0ZSA9IChpbnN0Lm9wdGlvbnMuY29tbWFuZHNBc0RhdGVGb3JtYXQgPyBjb21tYW5kLmRhdGUuYXBwbHkoZWxlbSwgW2luc3RdKSA6IG51bGwpO1xuXHRcdFx0XHRwaWNrZXIgPSBwaWNrZXIucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxceycgKyB0eXBlICsgJzonICsgbmFtZSArICdcXFxcfScsICdnJyksXG5cdFx0XHRcdFx0JzwnICsgb3BlbiArIChjb21tYW5kLnN0YXR1cyA/ICcgdGl0bGU9XCInICsgaW5zdC5vcHRpb25zW2NvbW1hbmQuc3RhdHVzXSArICdcIicgOiAnJykgK1xuXHRcdFx0XHRcdCcgY2xhc3M9XCInICsgaW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRDbGFzcyArICcgJyArXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRDbGFzcyArICctJyArIG5hbWUgKyAnICcgKyBjbGFzc2VzICtcblx0XHRcdFx0XHQoY29tbWFuZC5lbmFibGVkKGluc3QpID8gJycgOiAnICcgKyBpbnN0Lm9wdGlvbnMucmVuZGVyZXIuZGlzYWJsZWRDbGFzcykgKyAnXCI+JyArXG5cdFx0XHRcdFx0KGRhdGUgPyBkYXRlLmZvcm1hdERhdGUoaW5zdC5vcHRpb25zW2NvbW1hbmQudGV4dF0pIDpcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnNbY29tbWFuZC50ZXh0XSkgKyAnPC8nICsgY2xvc2UgKyAnPicpO1xuXHRcdFx0fTtcblx0XHRcdGZvciAodmFyIG5hbWUgaW4gaW5zdC5vcHRpb25zLmNvbW1hbmRzKSB7XG5cdFx0XHRcdGFkZENvbW1hbmQoJ2J1dHRvbicsICdidXR0b24gdHlwZT1cImJ1dHRvblwiJywgJ2J1dHRvbicsIG5hbWUsXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRCdXR0b25DbGFzcyk7XG5cdFx0XHRcdGFkZENvbW1hbmQoJ2xpbmsnLCAnYSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCInLCAnYScsIG5hbWUsXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRMaW5rQ2xhc3MpO1xuXHRcdFx0fVxuXHRcdFx0cGlja2VyID0gJChwaWNrZXIpO1xuXHRcdFx0aWYgKG1vbnRoc1RvU2hvd1sxXSA+IDEpIHtcblx0XHRcdFx0dmFyIGNvdW50ID0gMDtcblx0XHRcdFx0JChpbnN0Lm9wdGlvbnMucmVuZGVyZXIubW9udGhTZWxlY3RvciwgcGlja2VyKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBudGggPSArK2NvdW50ICUgbW9udGhzVG9TaG93WzFdO1xuXHRcdFx0XHRcdCQodGhpcykuYWRkQ2xhc3MobnRoID09PSAxID8gJ2ZpcnN0JyA6IChudGggPT09IDAgPyAnbGFzdCcgOiAnJykpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vIEFkZCBkYXRlcGlja2VyIGJlaGF2aW91clxuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdFx0ZnVuY3Rpb24gcmVtb3ZlSGlnaGxpZ2h0KCkge1xuXHRcdFx0XHQoaW5zdC5pbmxpbmUgPyAkKHRoaXMpLmNsb3Nlc3QoJy4nICsgc2VsZi5fZ2V0TWFya2VyKCkpIDogaW5zdC5kaXYpLlxuXHRcdFx0XHRcdGZpbmQoaW5zdC5vcHRpb25zLnJlbmRlcmVyLmRheVNlbGVjdG9yICsgJyBhJykuXG5cdFx0XHRcdFx0cmVtb3ZlQ2xhc3MoaW5zdC5vcHRpb25zLnJlbmRlcmVyLmhpZ2hsaWdodGVkQ2xhc3MpO1xuXHRcdFx0fVxuXHRcdFx0cGlja2VyLmZpbmQoaW5zdC5vcHRpb25zLnJlbmRlcmVyLmRheVNlbGVjdG9yICsgJyBhJykuaG92ZXIoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZW1vdmVIaWdobGlnaHQuYXBwbHkodGhpcyk7XG5cdFx0XHRcdFx0XHQkKHRoaXMpLmFkZENsYXNzKGluc3Qub3B0aW9ucy5yZW5kZXJlci5oaWdobGlnaHRlZENsYXNzKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlbW92ZUhpZ2hsaWdodCkuXG5cdFx0XHRcdGNsaWNrKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHNlbGYuc2VsZWN0RGF0ZShlbGVtLCB0aGlzKTtcblx0XHRcdFx0fSkuZW5kKCkuXG5cdFx0XHRcdGZpbmQoJ3NlbGVjdC4nICsgdGhpcy5fbW9udGhZZWFyQ2xhc3MgKyAnOm5vdCguJyArIHRoaXMuX2FueVllYXJDbGFzcyArICcpJykuXG5cdFx0XHRcdGNoYW5nZShmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR2YXIgbW9udGhZZWFyID0gJCh0aGlzKS52YWwoKS5zcGxpdCgnLycpO1xuXHRcdFx0XHRcdHNlbGYuc2hvd01vbnRoKGVsZW0sIHBhcnNlSW50KG1vbnRoWWVhclsxXSwgMTApLCBwYXJzZUludChtb250aFllYXJbMF0sIDEwKSk7XG5cdFx0XHRcdH0pLmVuZCgpLlxuXHRcdFx0XHRmaW5kKCdzZWxlY3QuJyArIHRoaXMuX2FueVllYXJDbGFzcykuY2xpY2soZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0JCh0aGlzKS5jc3MoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJykuXG5cdFx0XHRcdFx0XHRuZXh0KCdpbnB1dCcpLmNzcyh7bGVmdDogdGhpcy5vZmZzZXRMZWZ0LCB0b3A6IHRoaXMub2Zmc2V0VG9wLFxuXHRcdFx0XHRcdFx0d2lkdGg6IHRoaXMub2Zmc2V0V2lkdGgsIGhlaWdodDogdGhpcy5vZmZzZXRIZWlnaHR9KS5zaG93KCkuZm9jdXMoKTtcblx0XHRcdFx0fSkuZW5kKCkuXG5cdFx0XHRcdGZpbmQoJ2lucHV0LicgKyBzZWxmLl9tb250aFllYXJDbGFzcykuY2hhbmdlKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR2YXIgeWVhciA9IHBhcnNlSW50KCQodGhpcykudmFsKCksIDEwKTtcblx0XHRcdFx0XHRcdHllYXIgPSAoaXNOYU4oeWVhcikgPyBpbnN0LmRyYXdEYXRlLnllYXIoKSA6IHllYXIpO1xuXHRcdFx0XHRcdFx0c2VsZi5zaG93TW9udGgoZWxlbSwgeWVhciwgaW5zdC5kcmF3RGF0ZS5tb250aCgpLCBpbnN0LmRyYXdEYXRlLmRheSgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdGFsZXJ0KGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkua2V5ZG93bihmdW5jdGlvbihldmVudCkge1xuXHRcdFx0XHRcdGlmIChldmVudC5rZXlDb2RlID09PSAxMykgeyAvLyBFbnRlclxuXHRcdFx0XHRcdFx0JChldmVudC5lbGVtKS5jaGFuZ2UoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMjcpIHsgLy8gRXNjYXBlXG5cdFx0XHRcdFx0XHQkKGV2ZW50LmVsZW0pLmhpZGUoKS5wcmV2KCdzZWxlY3QnKS5jc3MoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0XHRcdFx0aW5zdC5lbGVtLmZvY3VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdC8vIEFkZCBrZXlib2FyZCBoYW5kbGluZ1xuXHRcdFx0dmFyIGRhdGEgPSB7ZWxlbTogaW5zdC5lbGVtWzBdfTtcblx0XHRcdHBpY2tlci5rZXlkb3duKGRhdGEsIHRoaXMuX2tleURvd24pLmtleXByZXNzKGRhdGEsIHRoaXMuX2tleVByZXNzKS5rZXl1cChkYXRhLCB0aGlzLl9rZXlVcCk7XG5cdFx0XHQvLyBBZGQgY29tbWFuZCBiZWhhdmlvdXJcblx0XHRcdHBpY2tlci5maW5kKCcuJyArIGluc3Qub3B0aW9ucy5yZW5kZXJlci5jb21tYW5kQ2xhc3MpLmNsaWNrKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICghJCh0aGlzKS5oYXNDbGFzcyhpbnN0Lm9wdGlvbnMucmVuZGVyZXIuZGlzYWJsZWRDbGFzcykpIHtcblx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSB0aGlzLmNsYXNzTmFtZS5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0XHRuZXcgUmVnRXhwKCdeLionICsgaW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRDbGFzcyArICctKFteIF0rKS4qJCcpLCAnJDEnKTtcblx0XHRcdFx0XHRcdHBsdWdpbi5wZXJmb3JtQWN0aW9uKGVsZW0sIGFjdGlvbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdC8vIEFkZCBjbGFzc2VzXG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLmlzUlRMKSB7XG5cdFx0XHRcdHBpY2tlci5hZGRDbGFzcyhpbnN0Lm9wdGlvbnMucmVuZGVyZXIucnRsQ2xhc3MpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG1vbnRoc1RvU2hvd1swXSAqIG1vbnRoc1RvU2hvd1sxXSA+IDEpIHtcblx0XHRcdFx0cGlja2VyLmFkZENsYXNzKGluc3Qub3B0aW9ucy5yZW5kZXJlci5tdWx0aUNsYXNzKTtcblx0XHRcdH1cblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucGlja2VyQ2xhc3MpIHtcblx0XHRcdFx0cGlja2VyLmFkZENsYXNzKGluc3Qub3B0aW9ucy5waWNrZXJDbGFzcyk7XG5cdFx0XHR9XG5cdFx0XHQvLyBSZXNpemVcblx0XHRcdCQoJ2JvZHknKS5hcHBlbmQocGlja2VyKTtcblx0XHRcdHZhciB3aWR0aCA9IDA7XG5cdFx0XHRwaWNrZXIuZmluZChpbnN0Lm9wdGlvbnMucmVuZGVyZXIubW9udGhTZWxlY3RvcikuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0d2lkdGggKz0gJCh0aGlzKS5vdXRlcldpZHRoKCk7XG5cdFx0XHR9KTtcblx0XHRcdHBpY2tlci53aWR0aCh3aWR0aCAvIG1vbnRoc1RvU2hvd1swXSk7XG5cdFx0XHQvLyBQcmUtc2hvdyBjdXN0b21pc2F0aW9uXG5cdFx0XHRpZiAoJC5pc0Z1bmN0aW9uKGluc3Qub3B0aW9ucy5vblNob3cpKSB7XG5cdFx0XHRcdGluc3Qub3B0aW9ucy5vblNob3cuYXBwbHkoZWxlbSwgW3BpY2tlciwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLCBpbnN0XSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcGlja2VyO1xuXHRcdH0sXG5cblx0XHQvKiogR2VuZXJhdGUgdGhlIGNvbnRlbnQgZm9yIGEgc2luZ2xlIG1vbnRoLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSB5ZWFyIHRvIGdlbmVyYXRlLlxuXHRcdFx0QHBhcmFtIG1vbnRoIHtudW1iZXJ9IFRoZSBtb250aCB0byBnZW5lcmF0ZS5cblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY3VycmVudCBjYWxlbmRhci5cblx0XHRcdEBwYXJhbSByZW5kZXJlciB7b2JqZWN0fSBUaGUgcmVuZGVyaW5nIHRlbXBsYXRlcy5cblx0XHRcdEBwYXJhbSBmaXJzdCB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgZmlyc3Qgb2YgbXVsdGlwbGUgbW9udGhzLlxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgbW9udGggY29udGVudC4gKi9cblx0XHRfZ2VuZXJhdGVNb250aDogZnVuY3Rpb24oZWxlbSwgaW5zdCwgeWVhciwgbW9udGgsIGNhbGVuZGFyLCByZW5kZXJlciwgZmlyc3QpIHtcblx0XHRcdHZhciBkYXlzSW5Nb250aCA9IGNhbGVuZGFyLmRheXNJbk1vbnRoKHllYXIsIG1vbnRoKTtcblx0XHRcdHZhciBtb250aHNUb1Nob3cgPSBpbnN0Lm9wdGlvbnMubW9udGhzVG9TaG93O1xuXHRcdFx0bW9udGhzVG9TaG93ID0gKCQuaXNBcnJheShtb250aHNUb1Nob3cpID8gbW9udGhzVG9TaG93IDogWzEsIG1vbnRoc1RvU2hvd10pO1xuXHRcdFx0dmFyIGZpeGVkV2Vla3MgPSBpbnN0Lm9wdGlvbnMuZml4ZWRXZWVrcyB8fCAobW9udGhzVG9TaG93WzBdICogbW9udGhzVG9TaG93WzFdID4gMSk7XG5cdFx0XHR2YXIgZmlyc3REYXkgPSBpbnN0Lm9wdGlvbnMuZmlyc3REYXk7XG5cdFx0XHRmaXJzdERheSA9IChmaXJzdERheSA9PSBudWxsID8gY2FsZW5kYXIubG9jYWwuZmlyc3REYXkgOiBmaXJzdERheSk7XG5cdFx0XHR2YXIgbGVhZERheXMgPSAoY2FsZW5kYXIuZGF5T2ZXZWVrKHllYXIsIG1vbnRoLCBjYWxlbmRhci5taW5EYXkpIC1cblx0XHRcdFx0Zmlyc3REYXkgKyBjYWxlbmRhci5kYXlzSW5XZWVrKCkpICUgY2FsZW5kYXIuZGF5c0luV2VlaygpO1xuXHRcdFx0dmFyIG51bVdlZWtzID0gKGZpeGVkV2Vla3MgPyA2IDogTWF0aC5jZWlsKChsZWFkRGF5cyArIGRheXNJbk1vbnRoKSAvIGNhbGVuZGFyLmRheXNJbldlZWsoKSkpO1xuXHRcdFx0dmFyIHNlbGVjdE90aGVyTW9udGhzID0gaW5zdC5vcHRpb25zLnNlbGVjdE90aGVyTW9udGhzICYmIGluc3Qub3B0aW9ucy5zaG93T3RoZXJNb250aHM7XG5cdFx0XHR2YXIgbWluRGF0ZSA9IChpbnN0LnBpY2tpbmdSYW5nZSA/IGluc3Quc2VsZWN0ZWREYXRlc1swXSA6IGluc3QuZ2V0KCdtaW5EYXRlJykpO1xuXHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xuXHRcdFx0dmFyIHNob3dXZWVrcyA9IHJlbmRlcmVyLndlZWsuaW5kZXhPZigne3dlZWtPZlllYXJ9JykgPiAtMTtcblx0XHRcdHZhciB0b2RheSA9IGNhbGVuZGFyLnRvZGF5KCk7XG5cdFx0XHR2YXIgZHJhd0RhdGUgPSBjYWxlbmRhci5uZXdEYXRlKHllYXIsIG1vbnRoLCBjYWxlbmRhci5taW5EYXkpO1xuXHRcdFx0ZHJhd0RhdGUuYWRkKC1sZWFkRGF5cyAtIChmaXhlZFdlZWtzICYmXG5cdFx0XHRcdChkcmF3RGF0ZS5kYXlPZldlZWsoKSA9PT0gZmlyc3REYXkgfHwgZHJhd0RhdGUuZGF5c0luTW9udGgoKSA8IGNhbGVuZGFyLmRheXNJbldlZWsoKSk/XG5cdFx0XHRcdGNhbGVuZGFyLmRheXNJbldlZWsoKSA6IDApLCAnZCcpO1xuXHRcdFx0dmFyIGpkID0gZHJhd0RhdGUudG9KRCgpO1xuXHRcdFx0Ly8gR2VuZXJhdGUgd2Vla3Ncblx0XHRcdHZhciB3ZWVrcyA9ICcnO1xuXHRcdFx0Zm9yICh2YXIgd2VlayA9IDA7IHdlZWsgPCBudW1XZWVrczsgd2VlaysrKSB7XG5cdFx0XHRcdHZhciB3ZWVrT2ZZZWFyID0gKCFzaG93V2Vla3MgPyAnJyA6ICc8c3BhbiBjbGFzcz1cImpkJyArIGpkICsgJ1wiPicgK1xuXHRcdFx0XHRcdCgkLmlzRnVuY3Rpb24oaW5zdC5vcHRpb25zLmNhbGN1bGF0ZVdlZWspID9cblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMuY2FsY3VsYXRlV2VlayhkcmF3RGF0ZSkgOiBkcmF3RGF0ZS53ZWVrT2ZZZWFyKCkpICsgJzwvc3Bhbj4nKTtcblx0XHRcdFx0dmFyIGRheXMgPSAnJztcblx0XHRcdFx0Zm9yICh2YXIgZGF5ID0gMDsgZGF5IDwgY2FsZW5kYXIuZGF5c0luV2VlaygpOyBkYXkrKykge1xuXHRcdFx0XHRcdHZhciBzZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgJiYgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdHNlbGVjdGVkID0gKGRyYXdEYXRlLmNvbXBhcmVUbyhpbnN0LnNlbGVjdGVkRGF0ZXNbMF0pICE9PSAtMSAmJlxuXHRcdFx0XHRcdFx0XHRkcmF3RGF0ZS5jb21wYXJlVG8oaW5zdC5zZWxlY3RlZERhdGVzWzFdKSAhPT0gKzEpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKGluc3Quc2VsZWN0ZWREYXRlc1tpXS5jb21wYXJlVG8oZHJhd0RhdGUpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciBkYXRlSW5mbyA9ICghJC5pc0Z1bmN0aW9uKGluc3Qub3B0aW9ucy5vbkRhdGUpID8ge30gOlxuXHRcdFx0XHRcdFx0aW5zdC5vcHRpb25zLm9uRGF0ZS5hcHBseShlbGVtLCBbZHJhd0RhdGUsIGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoXSkpO1xuXHRcdFx0XHRcdHZhciBzZWxlY3RhYmxlID0gKHNlbGVjdE90aGVyTW9udGhzIHx8IGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoKSAmJlxuXHRcdFx0XHRcdFx0dGhpcy5faXNTZWxlY3RhYmxlKGVsZW0sIGRyYXdEYXRlLCBkYXRlSW5mby5zZWxlY3RhYmxlLCBtaW5EYXRlLCBtYXhEYXRlKTtcblx0XHRcdFx0XHRkYXlzICs9IHRoaXMuX3ByZXBhcmUocmVuZGVyZXIuZGF5LCBpbnN0KS5yZXBsYWNlKC9cXHtkYXlcXH0vZyxcblx0XHRcdFx0XHRcdChzZWxlY3RhYmxlID8gJzxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIicgOiAnPHNwYW4nKSArXG5cdFx0XHRcdFx0XHQnIGNsYXNzPVwiamQnICsgamQgKyAnICcgKyAoZGF0ZUluZm8uZGF0ZUNsYXNzIHx8ICcnKSArXG5cdFx0XHRcdFx0XHQoc2VsZWN0ZWQgJiYgKHNlbGVjdE90aGVyTW9udGhzIHx8IGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoKSA/XG5cdFx0XHRcdFx0XHQnICcgKyByZW5kZXJlci5zZWxlY3RlZENsYXNzIDogJycpICtcblx0XHRcdFx0XHRcdChzZWxlY3RhYmxlID8gJyAnICsgcmVuZGVyZXIuZGVmYXVsdENsYXNzIDogJycpICtcblx0XHRcdFx0XHRcdChkcmF3RGF0ZS53ZWVrRGF5KCkgPyAnJyA6ICcgJyArIHJlbmRlcmVyLndlZWtlbmRDbGFzcykgK1xuXHRcdFx0XHRcdFx0KGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoID8gJycgOiAnICcgKyByZW5kZXJlci5vdGhlck1vbnRoQ2xhc3MpICtcblx0XHRcdFx0XHRcdChkcmF3RGF0ZS5jb21wYXJlVG8odG9kYXkpID09PSAwICYmIGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoID9cblx0XHRcdFx0XHRcdCcgJyArIHJlbmRlcmVyLnRvZGF5Q2xhc3MgOiAnJykgK1xuXHRcdFx0XHRcdFx0KGRyYXdEYXRlLmNvbXBhcmVUbyhpbnN0LmRyYXdEYXRlKSA9PT0gMCAmJiBkcmF3RGF0ZS5tb250aCgpID09PSBtb250aCA/XG5cdFx0XHRcdFx0XHQnICcgKyByZW5kZXJlci5oaWdobGlnaHRlZENsYXNzIDogJycpICsgJ1wiJyArXG5cdFx0XHRcdFx0XHQoZGF0ZUluZm8udGl0bGUgfHwgKGluc3Qub3B0aW9ucy5kYXlTdGF0dXMgJiYgc2VsZWN0YWJsZSkgPyAnIHRpdGxlPVwiJyArXG5cdFx0XHRcdFx0XHQoZGF0ZUluZm8udGl0bGUgfHwgZHJhd0RhdGUuZm9ybWF0RGF0ZShpbnN0Lm9wdGlvbnMuZGF5U3RhdHVzKSkgKyAnXCInIDogJycpICsgJz4nICtcblx0XHRcdFx0XHRcdChpbnN0Lm9wdGlvbnMuc2hvd090aGVyTW9udGhzIHx8IGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoID9cblx0XHRcdFx0XHRcdGRhdGVJbmZvLmNvbnRlbnQgfHwgZHJhd0RhdGUuZGF5KCkgOiAnJiMxNjA7JykgK1xuXHRcdFx0XHRcdFx0KHNlbGVjdGFibGUgPyAnPC9hPicgOiAnPC9zcGFuPicpKTtcblx0XHRcdFx0XHRkcmF3RGF0ZS5hZGQoMSwgJ2QnKTtcblx0XHRcdFx0XHRqZCsrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHdlZWtzICs9IHRoaXMuX3ByZXBhcmUocmVuZGVyZXIud2VlaywgaW5zdCkucmVwbGFjZSgvXFx7ZGF5c1xcfS9nLCBkYXlzKS5cblx0XHRcdFx0XHRyZXBsYWNlKC9cXHt3ZWVrT2ZZZWFyXFx9L2csIHdlZWtPZlllYXIpO1xuXHRcdFx0fVxuXHRcdFx0dmFyIG1vbnRoSGVhZGVyID0gdGhpcy5fcHJlcGFyZShyZW5kZXJlci5tb250aCwgaW5zdCkubWF0Y2goL1xce21vbnRoSGVhZGVyKDpbXlxcfV0rKT9cXH0vKTtcblx0XHRcdG1vbnRoSGVhZGVyID0gKG1vbnRoSGVhZGVyWzBdLmxlbmd0aCA8PSAxMyA/ICdNTSB5eXl5JyA6XG5cdFx0XHRcdG1vbnRoSGVhZGVyWzBdLnN1YnN0cmluZygxMywgbW9udGhIZWFkZXJbMF0ubGVuZ3RoIC0gMSkpO1xuXHRcdFx0bW9udGhIZWFkZXIgPSAoZmlyc3QgPyB0aGlzLl9nZW5lcmF0ZU1vbnRoU2VsZWN0aW9uKFxuXHRcdFx0XHRpbnN0LCB5ZWFyLCBtb250aCwgbWluRGF0ZSwgbWF4RGF0ZSwgbW9udGhIZWFkZXIsIGNhbGVuZGFyLCByZW5kZXJlcikgOlxuXHRcdFx0XHRjYWxlbmRhci5mb3JtYXREYXRlKG1vbnRoSGVhZGVyLCBjYWxlbmRhci5uZXdEYXRlKHllYXIsIG1vbnRoLCBjYWxlbmRhci5taW5EYXkpKSk7XG5cdFx0XHR2YXIgd2Vla0hlYWRlciA9IHRoaXMuX3ByZXBhcmUocmVuZGVyZXIud2Vla0hlYWRlciwgaW5zdCkuXG5cdFx0XHRcdHJlcGxhY2UoL1xce2RheXNcXH0vZywgdGhpcy5fZ2VuZXJhdGVEYXlIZWFkZXJzKGluc3QsIGNhbGVuZGFyLCByZW5kZXJlcikpO1xuXHRcdFx0cmV0dXJuIHRoaXMuX3ByZXBhcmUocmVuZGVyZXIubW9udGgsIGluc3QpLnJlcGxhY2UoL1xce21vbnRoSGVhZGVyKDpbXlxcfV0rKT9cXH0vZywgbW9udGhIZWFkZXIpLlxuXHRcdFx0XHRyZXBsYWNlKC9cXHt3ZWVrSGVhZGVyXFx9L2csIHdlZWtIZWFkZXIpLnJlcGxhY2UoL1xce3dlZWtzXFx9L2csIHdlZWtzKTtcblx0XHR9LFxuXG5cdFx0LyoqIEdlbmVyYXRlIHRoZSBIVE1MIGZvciB0aGUgZGF5IGhlYWRlcnMuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIGN1cnJlbnQgY2FsZW5kYXIuXG5cdFx0XHRAcGFyYW0gcmVuZGVyZXIge29iamVjdH0gVGhlIHJlbmRlcmluZyB0ZW1wbGF0ZXMuXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IEEgd2VlaydzIHdvcnRoIG9mIGRheSBoZWFkZXJzLiAqL1xuXHRcdF9nZW5lcmF0ZURheUhlYWRlcnM6IGZ1bmN0aW9uKGluc3QsIGNhbGVuZGFyLCByZW5kZXJlcikge1xuXHRcdFx0dmFyIGZpcnN0RGF5ID0gaW5zdC5vcHRpb25zLmZpcnN0RGF5O1xuXHRcdFx0Zmlyc3REYXkgPSAoZmlyc3REYXkgPT0gbnVsbCA/IGNhbGVuZGFyLmxvY2FsLmZpcnN0RGF5IDogZmlyc3REYXkpO1xuXHRcdFx0dmFyIGhlYWRlciA9ICcnO1xuXHRcdFx0Zm9yICh2YXIgZGF5ID0gMDsgZGF5IDwgY2FsZW5kYXIuZGF5c0luV2VlaygpOyBkYXkrKykge1xuXHRcdFx0XHR2YXIgZG93ID0gKGRheSArIGZpcnN0RGF5KSAlIGNhbGVuZGFyLmRheXNJbldlZWsoKTtcblx0XHRcdFx0aGVhZGVyICs9IHRoaXMuX3ByZXBhcmUocmVuZGVyZXIuZGF5SGVhZGVyLCBpbnN0KS5yZXBsYWNlKC9cXHtkYXlcXH0vZyxcblx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCInICsgdGhpcy5fY3VyRG9XQ2xhc3MgKyBkb3cgKyAnXCIgdGl0bGU9XCInICtcblx0XHRcdFx0XHRjYWxlbmRhci5sb2NhbC5kYXlOYW1lc1tkb3ddICsgJ1wiPicgKyBjYWxlbmRhci5sb2NhbC5kYXlOYW1lc01pbltkb3ddICsgJzwvc3Bhbj4nKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBoZWFkZXI7XG5cdFx0fSxcblxuXHRcdC8qKiBHZW5lcmF0ZSBzZWxlY3Rpb24gY29udHJvbHMgZm9yIG1vbnRoLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIHllYXIgdG8gZ2VuZXJhdGUuXG5cdFx0XHRAcGFyYW0gbW9udGgge251bWJlcn0gVGhlIG1vbnRoIHRvIGdlbmVyYXRlLlxuXHRcdFx0QHBhcmFtIG1pbkRhdGUge0NEYXRlfSBUaGUgbWluaW11bSBkYXRlIGFsbG93ZWQuXG5cdFx0XHRAcGFyYW0gbWF4RGF0ZSB7Q0RhdGV9IFRoZSBtYXhpbXVtIGRhdGUgYWxsb3dlZC5cblx0XHRcdEBwYXJhbSBtb250aEhlYWRlciB7c3RyaW5nfSBUaGUgbW9udGgveWVhciBmb3JtYXQuXG5cdFx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIGN1cnJlbnQgY2FsZW5kYXIuXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBtb250aCBzZWxlY3Rpb24gY29udGVudC4gKi9cblx0XHRfZ2VuZXJhdGVNb250aFNlbGVjdGlvbjogZnVuY3Rpb24oaW5zdCwgeWVhciwgbW9udGgsIG1pbkRhdGUsIG1heERhdGUsIG1vbnRoSGVhZGVyLCBjYWxlbmRhcikge1xuXHRcdFx0aWYgKCFpbnN0Lm9wdGlvbnMuY2hhbmdlTW9udGgpIHtcblx0XHRcdFx0cmV0dXJuIGNhbGVuZGFyLmZvcm1hdERhdGUobW9udGhIZWFkZXIsIGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbW9udGgsIDEpKTtcblx0XHRcdH1cblx0XHRcdC8vIE1vbnRoc1xuXHRcdFx0dmFyIG1vbnRoTmFtZXMgPSBjYWxlbmRhci5sb2NhbFtcblx0XHRcdFx0J21vbnRoTmFtZXMnICsgKG1vbnRoSGVhZGVyLm1hdGNoKC9tbS9pKSA/ICcnIDogJ1Nob3J0JyldO1xuXHRcdFx0dmFyIGh0bWwgPSBtb250aEhlYWRlci5yZXBsYWNlKC9tKy9pLCAnXFxcXHgyRScpLnJlcGxhY2UoL3krL2ksICdcXFxceDJGJyk7XG5cdFx0XHR2YXIgc2VsZWN0b3IgPSAnPHNlbGVjdCBjbGFzcz1cIicgKyB0aGlzLl9tb250aFllYXJDbGFzcyArXG5cdFx0XHRcdCdcIiB0aXRsZT1cIicgKyBpbnN0Lm9wdGlvbnMubW9udGhTdGF0dXMgKyAnXCI+Jztcblx0XHRcdHZhciBtYXhNb250aCA9IGNhbGVuZGFyLm1vbnRoc0luWWVhcih5ZWFyKSArIGNhbGVuZGFyLm1pbk1vbnRoO1xuXHRcdFx0Zm9yICh2YXIgbSA9IGNhbGVuZGFyLm1pbk1vbnRoOyBtIDwgbWF4TW9udGg7IG0rKykge1xuXHRcdFx0XHRpZiAoKCFtaW5EYXRlIHx8IGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbSxcblx0XHRcdFx0XHRcdGNhbGVuZGFyLmRheXNJbk1vbnRoKHllYXIsIG0pIC0gMSArIGNhbGVuZGFyLm1pbkRheSkuXG5cdFx0XHRcdFx0XHRjb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKSAmJlxuXHRcdFx0XHRcdFx0KCFtYXhEYXRlIHx8IGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbSwgY2FsZW5kYXIubWluRGF5KS5cblx0XHRcdFx0XHRcdGNvbXBhcmVUbyhtYXhEYXRlKSAhPT0gKzEpKSB7XG5cdFx0XHRcdFx0c2VsZWN0b3IgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgbSArICcvJyArIHllYXIgKyAnXCInICtcblx0XHRcdFx0XHRcdChtb250aCA9PT0gbSA/ICcgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJyA6ICcnKSArICc+JyArXG5cdFx0XHRcdFx0XHRtb250aE5hbWVzW20gLSBjYWxlbmRhci5taW5Nb250aF0gKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0c2VsZWN0b3IgKz0gJzwvc2VsZWN0Pic7XG5cdFx0XHRodG1sID0gaHRtbC5yZXBsYWNlKC9cXFxceDJFLywgc2VsZWN0b3IpO1xuXHRcdFx0Ly8gWWVhcnNcblx0XHRcdHZhciB5ZWFyUmFuZ2UgPSBpbnN0Lm9wdGlvbnMueWVhclJhbmdlO1xuXHRcdFx0aWYgKHllYXJSYW5nZSA9PT0gJ2FueScpIHtcblx0XHRcdFx0c2VsZWN0b3IgPSAnPHNlbGVjdCBjbGFzcz1cIicgKyB0aGlzLl9tb250aFllYXJDbGFzcyArICcgJyArIHRoaXMuX2FueVllYXJDbGFzcyArXG5cdFx0XHRcdFx0J1wiIHRpdGxlPVwiJyArIGluc3Qub3B0aW9ucy55ZWFyU3RhdHVzICsgJ1wiPicgK1xuXHRcdFx0XHRcdCc8b3B0aW9uPicgKyB5ZWFyICsgJzwvb3B0aW9uPjwvc2VsZWN0PicgK1xuXHRcdFx0XHRcdCc8aW5wdXQgY2xhc3M9XCInICsgdGhpcy5fbW9udGhZZWFyQ2xhc3MgKyAnICcgKyB0aGlzLl9jdXJNb250aENsYXNzICtcblx0XHRcdFx0XHRtb250aCArICdcIiB2YWx1ZT1cIicgKyB5ZWFyICsgJ1wiPic7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0eWVhclJhbmdlID0geWVhclJhbmdlLnNwbGl0KCc6Jyk7XG5cdFx0XHRcdHZhciB0b2RheVllYXIgPSBjYWxlbmRhci50b2RheSgpLnllYXIoKTtcblx0XHRcdFx0dmFyIHN0YXJ0ID0gKHllYXJSYW5nZVswXS5tYXRjaCgnY1srLV0uKicpID8geWVhciArIHBhcnNlSW50KHllYXJSYW5nZVswXS5zdWJzdHJpbmcoMSksIDEwKSA6XG5cdFx0XHRcdFx0KCh5ZWFyUmFuZ2VbMF0ubWF0Y2goJ1srLV0uKicpID8gdG9kYXlZZWFyIDogMCkgKyBwYXJzZUludCh5ZWFyUmFuZ2VbMF0sIDEwKSkpO1xuXHRcdFx0XHR2YXIgZW5kID0gKHllYXJSYW5nZVsxXS5tYXRjaCgnY1srLV0uKicpID8geWVhciArIHBhcnNlSW50KHllYXJSYW5nZVsxXS5zdWJzdHJpbmcoMSksIDEwKSA6XG5cdFx0XHRcdFx0KCh5ZWFyUmFuZ2VbMV0ubWF0Y2goJ1srLV0uKicpID8gdG9kYXlZZWFyIDogMCkgKyBwYXJzZUludCh5ZWFyUmFuZ2VbMV0sIDEwKSkpO1xuXHRcdFx0XHRzZWxlY3RvciA9ICc8c2VsZWN0IGNsYXNzPVwiJyArIHRoaXMuX21vbnRoWWVhckNsYXNzICtcblx0XHRcdFx0XHQnXCIgdGl0bGU9XCInICsgaW5zdC5vcHRpb25zLnllYXJTdGF0dXMgKyAnXCI+Jztcblx0XHRcdFx0c3RhcnQgPSBjYWxlbmRhci5uZXdEYXRlKHN0YXJ0ICsgMSwgY2FsZW5kYXIuZmlyc3RNb250aCwgY2FsZW5kYXIubWluRGF5KS5hZGQoLTEsICdkJyk7XG5cdFx0XHRcdGVuZCA9IGNhbGVuZGFyLm5ld0RhdGUoZW5kLCBjYWxlbmRhci5maXJzdE1vbnRoLCBjYWxlbmRhci5taW5EYXkpO1xuXHRcdFx0XHR2YXIgYWRkWWVhciA9IGZ1bmN0aW9uKHksIHlEaXNwbGF5KSB7XG5cdFx0XHRcdFx0aWYgKHkgIT09IDAgfHwgY2FsZW5kYXIuaGFzWWVhclplcm8pIHtcblx0XHRcdFx0XHRcdHNlbGVjdG9yICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArXG5cdFx0XHRcdFx0XHRcdE1hdGgubWluKG1vbnRoLCBjYWxlbmRhci5tb250aHNJblllYXIoeSkgLSAxICsgY2FsZW5kYXIubWluTW9udGgpICtcblx0XHRcdFx0XHRcdFx0Jy8nICsgeSArICdcIicgKyAoeWVhciA9PT0geSA/ICcgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJyA6ICcnKSArICc+JyArXG5cdFx0XHRcdFx0XHRcdCh5RGlzcGxheSB8fCB5KSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKHN0YXJ0LnRvSkQoKSA8IGVuZC50b0pEKCkpIHtcblx0XHRcdFx0XHRzdGFydCA9IChtaW5EYXRlICYmIG1pbkRhdGUuY29tcGFyZVRvKHN0YXJ0KSA9PT0gKzEgPyBtaW5EYXRlIDogc3RhcnQpLnllYXIoKTtcblx0XHRcdFx0XHRlbmQgPSAobWF4RGF0ZSAmJiBtYXhEYXRlLmNvbXBhcmVUbyhlbmQpID09PSAtMSA/IG1heERhdGUgOiBlbmQpLnllYXIoKTtcblx0XHRcdFx0XHR2YXIgZWFybGllckxhdGVyID0gTWF0aC5mbG9vcigoZW5kIC0gc3RhcnQpIC8gMik7XG5cdFx0XHRcdFx0aWYgKCFtaW5EYXRlIHx8IG1pbkRhdGUueWVhcigpIDwgc3RhcnQpIHtcblx0XHRcdFx0XHRcdGFkZFllYXIoc3RhcnQgLSBlYXJsaWVyTGF0ZXIsIGluc3Qub3B0aW9ucy5lYXJsaWVyVGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGZvciAodmFyIHkgPSBzdGFydDsgeSA8PSBlbmQ7IHkrKykge1xuXHRcdFx0XHRcdFx0YWRkWWVhcih5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCFtYXhEYXRlIHx8IG1heERhdGUueWVhcigpID4gZW5kKSB7XG5cdFx0XHRcdFx0XHRhZGRZZWFyKGVuZCArIGVhcmxpZXJMYXRlciwgaW5zdC5vcHRpb25zLmxhdGVyVGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHN0YXJ0ID0gKG1heERhdGUgJiYgbWF4RGF0ZS5jb21wYXJlVG8oc3RhcnQpID09PSAtMSA/IG1heERhdGUgOiBzdGFydCkueWVhcigpO1xuXHRcdFx0XHRcdGVuZCA9IChtaW5EYXRlICYmIG1pbkRhdGUuY29tcGFyZVRvKGVuZCkgPT09ICsxID8gbWluRGF0ZSA6IGVuZCkueWVhcigpO1xuXHRcdFx0XHRcdHZhciBlYXJsaWVyTGF0ZXIgPSBNYXRoLmZsb29yKChzdGFydCAtIGVuZCkgLyAyKTtcblx0XHRcdFx0XHRpZiAoIW1heERhdGUgfHwgbWF4RGF0ZS55ZWFyKCkgPiBzdGFydCkge1xuXHRcdFx0XHRcdFx0YWRkWWVhcihzdGFydCArIGVhcmxpZXJMYXRlciwgaW5zdC5vcHRpb25zLmVhcmxpZXJUZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Zm9yICh2YXIgeSA9IHN0YXJ0OyB5ID49IGVuZDsgeS0tKSB7XG5cdFx0XHRcdFx0XHRhZGRZZWFyKHkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIW1pbkRhdGUgfHwgbWluRGF0ZS55ZWFyKCkgPCBlbmQpIHtcblx0XHRcdFx0XHRcdGFkZFllYXIoZW5kIC0gZWFybGllckxhdGVyLCBpbnN0Lm9wdGlvbnMubGF0ZXJUZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c2VsZWN0b3IgKz0gJzwvc2VsZWN0Pic7XG5cdFx0XHR9XG5cdFx0XHRodG1sID0gaHRtbC5yZXBsYWNlKC9cXFxceDJGLywgc2VsZWN0b3IpO1xuXHRcdFx0cmV0dXJuIGh0bWw7XG5cdFx0fSxcblxuXHRcdC8qKiBQcmVwYXJlIGEgcmVuZGVyIHRlbXBsYXRlIGZvciB1c2UuXG5cdFx0XHRFeGNsdWRlIHBvcHVwL2lubGluZSBzZWN0aW9ucyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZS5cblx0XHRcdExvY2FsaXNlIHRleHQgb2YgdGhlIGZvcm06IHtsMTBuOm5hbWV9LlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSB0ZXh0IHRvIGxvY2FsaXNlLlxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBsb2NhbGlzZWQgdGV4dC4gKi9cblx0XHRfcHJlcGFyZTogZnVuY3Rpb24odGV4dCwgaW5zdCkge1xuXHRcdFx0dmFyIHJlcGxhY2VTZWN0aW9uID0gZnVuY3Rpb24odHlwZSwgcmV0YWluKSB7XG5cdFx0XHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRcdFx0dmFyIHN0YXJ0ID0gdGV4dC5pbmRleE9mKCd7JyArIHR5cGUgKyAnOnN0YXJ0fScpO1xuXHRcdFx0XHRcdGlmIChzdGFydCA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dmFyIGVuZCA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0KS5pbmRleE9mKCd7JyArIHR5cGUgKyAnOmVuZH0nKTtcblx0XHRcdFx0XHRpZiAoZW5kID4gLTEpIHtcblx0XHRcdFx0XHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBzdGFydCkgK1xuXHRcdFx0XHRcdFx0XHQocmV0YWluID8gdGV4dC5zdWJzdHIoc3RhcnQgKyB0eXBlLmxlbmd0aCArIDgsIGVuZCAtIHR5cGUubGVuZ3RoIC0gOCkgOiAnJykgK1xuXHRcdFx0XHRcdFx0XHR0ZXh0LnN1YnN0cmluZyhzdGFydCArIGVuZCArIHR5cGUubGVuZ3RoICsgNik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0cmVwbGFjZVNlY3Rpb24oJ2lubGluZScsIGluc3QuaW5saW5lKTtcblx0XHRcdHJlcGxhY2VTZWN0aW9uKCdwb3B1cCcsICFpbnN0LmlubGluZSk7XG5cdFx0XHR2YXIgcGF0dGVybiA9IC9cXHtsMTBuOihbXlxcfV0rKVxcfS87XG5cdFx0XHR2YXIgbWF0Y2hlcyA9IG51bGw7XG5cdFx0XHR3aGlsZSAobWF0Y2hlcyA9IHBhdHRlcm4uZXhlYyh0ZXh0KSkge1xuXHRcdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKG1hdGNoZXNbMF0sIGluc3Qub3B0aW9uc1ttYXRjaGVzWzFdXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH0pO1xuXG5cdHZhciBwbHVnaW4gPSAkLmNhbGVuZGFyc1BpY2tlcjsgLy8gU2luZ2xldG9uIGluc3RhbmNlXG5cblx0JChmdW5jdGlvbigpIHtcblx0XHQkKGRvY3VtZW50KS5vbignbW91c2Vkb3duLicgKyBwbHVnaW5OYW1lLCBwbHVnaW4uX2NoZWNrRXh0ZXJuYWxDbGljaykuXG5cdFx0XHRvbigncmVzaXplLicgKyBwbHVnaW5OYW1lLCBmdW5jdGlvbigpIHsgcGx1Z2luLmhpZGUocGx1Z2luLmN1ckluc3QpOyB9KTtcblx0fSk7XG5cbn0pKGpRdWVyeSk7XG4iLCIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBDYWxlbmRhcnMgZGF0ZSBwaWNrZXIgZXh0ZW5zaW9ucyBmb3IgalF1ZXJ5IHYyLjAuMS5cbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgQXVndXN0IDIwMDkuXG4gICBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCAoaHR0cDovL2tlaXRoLXdvb2QubmFtZS9saWNlbmNlLmh0bWwpIGxpY2Vuc2UuIFxuICAgUGxlYXNlIGF0dHJpYnV0ZSB0aGUgYXV0aG9yIGlmIHlvdSB1c2UgaXQuICovXG5cbihmdW5jdGlvbigkKSB7IC8vIEhpZGUgc2NvcGUsIG5vICQgY29uZmxpY3RcblxuXHR2YXIgdGhlbWVSb2xsZXJSZW5kZXJlciA9IHtcblx0XHRwaWNrZXI6ICc8ZGl2e3BvcHVwOnN0YXJ0fSBpZD1cInVpLWRhdGVwaWNrZXItZGl2XCJ7cG9wdXA6ZW5kfSBjbGFzcz1cInVpLWRhdGVwaWNrZXIgdWktd2lkZ2V0ICcgK1xuXHRcdCd1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbHtpbmxpbmU6c3RhcnR9IHVpLWRhdGVwaWNrZXItaW5saW5le2lubGluZTplbmR9XCI+JyArXG5cdFx0JzxkaXYgY2xhc3M9XCJ1aS1kYXRlcGlja2VyLWhlYWRlciB1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsXCI+JyArXG5cdFx0J3tsaW5rOnByZXZ9e2xpbms6dG9kYXl9e2xpbms6bmV4dH08L2Rpdj57bW9udGhzfScgK1xuXHRcdCd7cG9wdXA6c3RhcnR9PGRpdiBjbGFzcz1cInVpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4ICcgK1xuXHRcdCd1aS1jb3JuZXItYWxsXCI+e2J1dHRvbjpjbGVhcn17YnV0dG9uOmNsb3NlfTwvZGl2Pntwb3B1cDplbmR9JyArXG5cdFx0JzxkaXYgY2xhc3M9XCJ1aS1oZWxwZXItY2xlYXJmaXhcIj48L2Rpdj48L2Rpdj4nLFxuXHRcdG1vbnRoUm93OiAnPGRpdiBjbGFzcz1cInVpLWRhdGVwaWNrZXItcm93LWJyZWFrXCI+e21vbnRoc308L2Rpdj4nLFxuXHRcdG1vbnRoOiAnPGRpdiBjbGFzcz1cInVpLWRhdGVwaWNrZXItZ3JvdXBcIj4nICtcblx0XHQnPGRpdiBjbGFzcz1cInVpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGxcIj57bW9udGhIZWFkZXI6TU0geXl5eX08L2Rpdj4nICtcblx0XHQnPHRhYmxlIGNsYXNzPVwidWktZGF0ZXBpY2tlci1jYWxlbmRhclwiPjx0aGVhZD57d2Vla0hlYWRlcn08L3RoZWFkPjx0Ym9keT57d2Vla3N9PC90Ym9keT48L3RhYmxlPjwvZGl2PicsXG5cdFx0d2Vla0hlYWRlcjogJzx0cj57ZGF5c308L3RyPicsXG5cdFx0ZGF5SGVhZGVyOiAnPHRoPntkYXl9PC90aD4nLFxuXHRcdHdlZWs6ICc8dHI+e2RheXN9PC90cj4nLFxuXHRcdGRheTogJzx0ZD57ZGF5fTwvdGQ+Jyxcblx0XHRtb250aFNlbGVjdG9yOiAnLnVpLWRhdGVwaWNrZXItZ3JvdXAnLFxuXHRcdGRheVNlbGVjdG9yOiAndGQnLFxuXHRcdHJ0bENsYXNzOiAndWktZGF0ZXBpY2tlci1ydGwnLFxuXHRcdG11bHRpQ2xhc3M6ICd1aS1kYXRlcGlja2VyLW11bHRpJyxcblx0XHRkZWZhdWx0Q2xhc3M6ICd1aS1zdGF0ZS1kZWZhdWx0Jyxcblx0XHRzZWxlY3RlZENsYXNzOiAndWktc3RhdGUtYWN0aXZlJyxcblx0XHRoaWdobGlnaHRlZENsYXNzOiAndWktc3RhdGUtaG92ZXInLFxuXHRcdHRvZGF5Q2xhc3M6ICd1aS1zdGF0ZS1oaWdobGlnaHQnLFxuXHRcdG90aGVyTW9udGhDbGFzczogJ3VpLWRhdGVwaWNrZXItb3RoZXItbW9udGgnLFxuXHRcdHdlZWtlbmRDbGFzczogJ3VpLWRhdGVwaWNrZXItd2Vlay1lbmQnLFxuXHRcdGNvbW1hbmRDbGFzczogJ3VpLWRhdGVwaWNrZXItY21kJyxcblx0XHRjb21tYW5kQnV0dG9uQ2xhc3M6ICd1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwnLFxuXHRcdGNvbW1hbmRMaW5rQ2xhc3M6ICcnLFxuXHRcdGRpc2FibGVkQ2xhc3M6ICd1aS1kYXRlcGlja2VyLWRpc2FibGVkJ1xuXHR9O1xuXG5cdCQuZXh0ZW5kKCQuY2FsZW5kYXJzUGlja2VyLCB7XG5cblx0XHQvKiogVGVtcGxhdGUgZm9yIGdlbmVyYXRpbmcgYSBjYWxlbmRhciBwaWNrZXIgc2hvd2luZyB3ZWVrIG9mIHllYXIuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyICovXG5cdFx0d2Vla09mWWVhclJlbmRlcmVyOiAkLmV4dGVuZCh7fSwgJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLCB7XG5cdFx0XHR3ZWVrSGVhZGVyOiAnPHRyPjx0aCBjbGFzcz1cImNhbGVuZGFycy13ZWVrXCI+JyArXG5cdFx0XHQnPHNwYW4gdGl0bGU9XCJ7bDEwbjp3ZWVrU3RhdHVzfVwiPntsMTBuOndlZWtUZXh0fTwvc3Bhbj48L3RoPntkYXlzfTwvdHI+Jyxcblx0XHRcdHdlZWs6ICc8dHI+PHRkIGNsYXNzPVwiY2FsZW5kYXJzLXdlZWtcIj57d2Vla09mWWVhcn08L3RkPntkYXlzfTwvdHI+J1xuXHRcdH0pLFxuXG5cdFx0LyoqIFRoZW1lUm9sbGVyIHRlbXBsYXRlIGZvciBnZW5lcmF0aW5nIGEgY2FsZW5kYXIgcGlja2VyLlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlciAqL1xuXHRcdHRoZW1lUm9sbGVyUmVuZGVyZXI6IHRoZW1lUm9sbGVyUmVuZGVyZXIsXG5cblx0XHQvKiogVGhlbWVSb2xsZXIgdGVtcGxhdGUgZm9yIGdlbmVyYXRpbmcgYSBjYWxlbmRhciBwaWNrZXIgc2hvd2luZyB3ZWVrIG9mIHllYXIuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyICovXG5cdFx0dGhlbWVSb2xsZXJXZWVrT2ZZZWFyUmVuZGVyZXI6ICQuZXh0ZW5kKHt9LCB0aGVtZVJvbGxlclJlbmRlcmVyLCB7XG5cdFx0XHR3ZWVrSGVhZGVyOiAnPHRyPjx0aCBjbGFzcz1cInVpLXN0YXRlLWhvdmVyXCI+PHNwYW4+e2wxMG46d2Vla1RleHR9PC9zcGFuPjwvdGg+e2RheXN9PC90cj4nLFxuXHRcdFx0d2VlazogJzx0cj48dGQgY2xhc3M9XCJ1aS1zdGF0ZS1ob3ZlclwiPnt3ZWVrT2ZZZWFyfTwvdGQ+e2RheXN9PC90cj4nXG5cdFx0fSksXG5cblx0XHQvKiogRG9uJ3QgYWxsb3cgd2Vla2VuZHMgdG8gYmUgc2VsZWN0ZWQuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBjdXJyZW50IGRhdGUuXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IEluZm9ybWF0aW9uIGFib3V0IHRoaXMgZGF0ZS5cblx0XHRcdEBleGFtcGxlIG9uRGF0ZTogJC5jYWxlbmRhcnNQaWNrZXIubm9XZWVrZW5kcyAqL1xuXHRcdG5vV2Vla2VuZHM6IGZ1bmN0aW9uKGRhdGUpIHtcblx0XHRcdHJldHVybiB7c2VsZWN0YWJsZTogZGF0ZS53ZWVrRGF5KCl9O1xuXHRcdH0sXG5cblx0XHQvKiogQ2hhbmdlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgYnkgY2xpY2tpbmcgb24gdGhlIGRheSBoZWFkZXIuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gcGlja2VyIHtqUXVlcnl9IFRoZSBjb21wbGV0ZWQgZGF0ZXBpY2tlciBkaXZpc2lvbi5cblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24uXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBleGFtcGxlIG9uU2hvdzogJC5jYWxlbmRhcnNQaWNrZXIuY2hhbmdlRmlyc3REYXkgKi9cblx0XHRjaGFuZ2VGaXJzdERheTogZnVuY3Rpb24ocGlja2VyLCBjYWxlbmRhciwgaW5zdCkge1xuXHRcdFx0dmFyIHRhcmdldCA9ICQodGhpcyk7XG5cdFx0XHRwaWNrZXIuZmluZCgndGggc3BhbicpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICh0aGlzLnBhcmVudE5vZGUuY2xhc3NOYW1lLm1hdGNoKC8uKmNhbGVuZGFycy13ZWVrLiovKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQkKCc8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCInICsgdGhpcy5jbGFzc05hbWUgK1xuXHRcdFx0XHRcdFx0J1wiIHRpdGxlPVwiQ2hhbmdlIGZpcnN0IGRheSBvZiB0aGUgd2Vla1wiPicgKyAkKHRoaXMpLnRleHQoKSArICc8L2E+JykuXG5cdFx0XHRcdFx0Y2xpY2soZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR2YXIgZG93ID0gcGFyc2VJbnQodGhpcy5jbGFzc05hbWUucmVwbGFjZSgvXi4qY2FsZW5kYXJzLWRvdy0oXFxkKykuKiQvLCAnJDEnKSwgMTApO1xuXHRcdFx0XHRcdFx0dGFyZ2V0LmNhbGVuZGFyc1BpY2tlcignb3B0aW9uJywge2ZpcnN0RGF5OiBkb3d9KTtcblx0XHRcdFx0XHR9KS5cblx0XHRcdFx0XHRyZXBsYWNlQWxsKHRoaXMpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdC8qKiBBIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIGRhdGUgaXMgaG92ZXJlZC5cblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJPbkhvdmVyXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBkYXRlIGJlaW5nIGhvdmVyZWQgb3IgPGNvZGU+bnVsbDwvY29kZT4gb24gZXhpdC5cblx0XHRcdEBwYXJhbSBzZWxlY3RhYmxlIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGRhdGUgaXMgc2VsZWN0YWJsZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEBleGFtcGxlIGZ1bmN0aW9uIHNob3dIb3ZlcmVkKGRhdGUsIHNlbGVjdGFibGUpIHtcblx0JCgnI2ZlZWRiYWNrJykudGV4dCgnWW91IGFyZSB2aWV3aW5nICcgKyAoZGF0ZSA/IGRhdGUuZm9ybWF0RGF0ZSgpIDogJ25vdGhpbmcnKSk7XG4gfSAqL1xuXG5cdFx0LyoqIEFkZCBhIGNhbGxiYWNrIHdoZW4gaG92ZXJpbmcgb3ZlciBkYXRlcy5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBpY2tlci5leHQuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBvbkhvdmVyIHtDYWxlbmRhcnNQaWNrZXJPbkhvdmVyfSBUaGUgY2FsbGJhY2sgd2hlbiBob3ZlcmluZy5cblx0XHRcdEBleGFtcGxlIG9uU2hvdzogJC5jYWxlbmRhcnNQaWNrZXIuaG92ZXJDYWxsYmFjayhzaG93SG92ZXJlZCkgKi9cblx0XHRob3ZlckNhbGxiYWNrOiBmdW5jdGlvbihvbkhvdmVyKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24ocGlja2VyLCBjYWxlbmRhciwgaW5zdCkge1xuXHRcdFx0XHRpZiAoJC5pc0Z1bmN0aW9uKG9uSG92ZXIpKSB7XG5cdFx0XHRcdFx0dmFyIHRhcmdldCA9IHRoaXM7XG5cdFx0XHRcdFx0dmFyIHJlbmRlcmVyID0gaW5zdC5vcHRpb25zLnJlbmRlcmVyO1xuXHRcdFx0XHRcdHBpY2tlci5maW5kKHJlbmRlcmVyLmRheVNlbGVjdG9yICsgJyBhLCAnICsgcmVuZGVyZXIuZGF5U2VsZWN0b3IgKyAnIHNwYW4nKS5cblx0XHRcdFx0XHRcdGhvdmVyKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRvbkhvdmVyLmFwcGx5KHRhcmdldCwgWyQodGFyZ2V0KS5jYWxlbmRhcnNQaWNrZXIoJ3JldHJpZXZlRGF0ZScsIHRoaXMpLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2EnXSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7IG9uSG92ZXIuYXBwbHkodGFyZ2V0LCBbXSk7IH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHQvKiogSGlnaGxpZ2h0IHRoZSBlbnRpcmUgd2VlayB3aGVuIGhvdmVyaW5nIG92ZXIgaXQuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gcGlja2VyIHtqUXVlcnl9IFRoZSBjb21wbGV0ZWQgZGF0ZXBpY2tlciBkaXZpc2lvbi5cblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24uXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBleGFtcGxlIG9uU2hvdzogJC5jYWxlbmRhcnNQaWNrZXIuaGlnaGxpZ2h0V2VlayAqL1xuXHRcdGhpZ2hsaWdodFdlZWs6IGZ1bmN0aW9uKHBpY2tlciwgY2FsZW5kYXIsIGluc3QpIHtcblx0XHRcdHZhciB0YXJnZXQgPSB0aGlzO1xuXHRcdFx0dmFyIHJlbmRlcmVyID0gaW5zdC5vcHRpb25zLnJlbmRlcmVyO1xuXHRcdFx0cGlja2VyLmZpbmQocmVuZGVyZXIuZGF5U2VsZWN0b3IgKyAnIGEsICcgKyByZW5kZXJlci5kYXlTZWxlY3RvciArICcgc3BhbicpLlxuXHRcdFx0XHRob3ZlcihmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQkKHRoaXMpLnBhcmVudHMoJ3RyJykuZmluZChyZW5kZXJlci5kYXlTZWxlY3RvciArICcgKicpLlxuXHRcdFx0XHRcdFx0YWRkQ2xhc3MocmVuZGVyZXIuaGlnaGxpZ2h0ZWRDbGFzcyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdCQodGhpcykucGFyZW50cygndHInKS5maW5kKHJlbmRlcmVyLmRheVNlbGVjdG9yICsgJyAqJykuXG5cdFx0XHRcdFx0XHRyZW1vdmVDbGFzcyhyZW5kZXJlci5oaWdobGlnaHRlZENsYXNzKTtcblx0XHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdC8qKiBTaG93IGEgc3RhdHVzIGJhciB3aXRoIG1lc3NhZ2VzLlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIHBpY2tlciB7alF1ZXJ5fSBUaGUgY29tcGxldGVkIGRhdGVwaWNrZXIgZGl2aXNpb24uXG5cdFx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uLlxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAZXhhbXBsZSBvblNob3c6ICQuY2FsZW5kYXJzUGlja2VyLnNob3dTdGF0dXMgKi9cblx0XHRzaG93U3RhdHVzOiBmdW5jdGlvbihwaWNrZXIsIGNhbGVuZGFyLCBpbnN0KSB7XG5cdFx0XHR2YXIgaXNUUiA9IChpbnN0Lm9wdGlvbnMucmVuZGVyZXIuc2VsZWN0ZWRDbGFzcyA9PT0gJ3VpLXN0YXRlLWFjdGl2ZScpO1xuXHRcdFx0dmFyIGRlZmF1bHRTdGF0dXMgPSBpbnN0Lm9wdGlvbnMuZGVmYXVsdFN0YXR1cyB8fCAnJiMxNjA7Jztcblx0XHRcdHZhciBzdGF0dXMgPSAkKCc8ZGl2IGNsYXNzPVwiJyArICghaXNUUiA/ICdjYWxlbmRhcnMtc3RhdHVzJyA6XG5cdFx0XHRcdCd1aS1kYXRlcGlja2VyLXN0YXR1cyB1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsJykgKyAnXCI+JyArXG5cdFx0XHRcdGRlZmF1bHRTdGF0dXMgKyAnPC9kaXY+JykuXG5cdFx0XHRcdGluc2VydEFmdGVyKHBpY2tlci5maW5kKCcuY2FsZW5kYXJzLW1vbnRoLXJvdzpsYXN0LC51aS1kYXRlcGlja2VyLXJvdy1icmVhazpsYXN0JykpO1xuXHRcdFx0cGlja2VyLmZpbmQoJypbdGl0bGVdJykuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR2YXIgdGl0bGUgPSAkKHRoaXMpLmF0dHIoJ3RpdGxlJyk7XG5cdFx0XHRcdFx0JCh0aGlzKS5yZW1vdmVBdHRyKCd0aXRsZScpLmhvdmVyKFxuXHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7IHN0YXR1cy50ZXh0KHRpdGxlIHx8IGRlZmF1bHRTdGF0dXMpOyB9LFxuXHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7IHN0YXR1cy50ZXh0KGRlZmF1bHRTdGF0dXMpOyB9KTtcblx0XHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdC8qKiBBbGxvdyBlYXNpZXIgbmF2aWdhdGlvbiBieSBtb250aC5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBpY2tlci5leHQuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBwaWNrZXIge2pRdWVyeX0gVGhlIGNvbXBsZXRlZCBkYXRlcGlja2VyIGRpdmlzaW9uLlxuXHRcdFx0QHBhcmFtIGNhbGVuZGFyIHtCYXNlQ2FsZW5kYXJ9IFRoZSBjYWxlbmRhciBpbXBsZW1lbnRhdGlvbi5cblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QGV4YW1wbGUgb25TaG93OiAkLmNhbGVuZGFyc1BpY2tlci5tb250aE5hdmlnYXRpb24gKi9cblx0XHRtb250aE5hdmlnYXRpb246IGZ1bmN0aW9uKHBpY2tlciwgY2FsZW5kYXIsIGluc3QpIHtcblx0XHRcdHZhciB0YXJnZXQgPSAkKHRoaXMpO1xuXHRcdFx0dmFyIGlzVFIgPSAoaW5zdC5vcHRpb25zLnJlbmRlcmVyLnNlbGVjdGVkQ2xhc3MgPT09ICd1aS1zdGF0ZS1hY3RpdmUnKTtcblx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XG5cdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XG5cdFx0XHR2YXIgeWVhciA9IGluc3QuZHJhd0RhdGUueWVhcigpO1xuXHRcdFx0dmFyIGh0bWwgPSAnPGRpdiBjbGFzcz1cIicgKyAoIWlzVFIgPyAnY2FsZW5kYXJzLW1vbnRoLW5hdicgOiAndWktZGF0ZXBpY2tlci1tb250aC1uYXYnKSArICdcIj4nO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjYWxlbmRhci5tb250aHNJblllYXIoeWVhcik7IGkrKykge1xuXHRcdFx0XHR2YXIgb3JkID0gY2FsZW5kYXIuZnJvbU1vbnRoT2ZZZWFyKHllYXIsIGkgKyBjYWxlbmRhci5taW5Nb250aCkgLSBjYWxlbmRhci5taW5Nb250aDtcblx0XHRcdFx0dmFyIGluUmFuZ2UgPSAoKCFtaW5EYXRlIHx8IGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgaSArIGNhbGVuZGFyLm1pbk1vbnRoLFxuXHRcdFx0XHRcdGNhbGVuZGFyLmRheXNJbk1vbnRoKHllYXIsIGkgKyBjYWxlbmRhci5taW5Nb250aCkpLmNvbXBhcmVUbyhtaW5EYXRlKSA+IC0xKSAmJiAoIW1heERhdGUgfHxcblx0XHRcdFx0XHRjYWxlbmRhci5uZXdEYXRlKHllYXIsIGkgKyBjYWxlbmRhci5taW5Nb250aCwgY2FsZW5kYXIubWluRGF5KS5jb21wYXJlVG8obWF4RGF0ZSkgPCArMSkpO1xuXHRcdFx0XHRodG1sICs9ICc8ZGl2PicgKyAoaW5SYW5nZSA/ICc8YSBocmVmPVwiI1wiIGNsYXNzPVwiamQnICtcblx0XHRcdFx0XHRjYWxlbmRhci5uZXdEYXRlKHllYXIsIGkgKyBjYWxlbmRhci5taW5Nb250aCwgY2FsZW5kYXIubWluRGF5KS50b0pEKCkgKyAnXCInIDogJzxzcGFuJykgK1xuXHRcdFx0XHRcdCcgdGl0bGU9XCInICsgY2FsZW5kYXIubG9jYWwubW9udGhOYW1lc1tvcmRdICsgJ1wiPicgKyBjYWxlbmRhci5sb2NhbC5tb250aE5hbWVzU2hvcnRbb3JkXSArXG5cdFx0XHRcdFx0KGluUmFuZ2UgPyAnPC9hPicgOiAnPC9zcGFuPicpICsgJzwvZGl2Pic7XG5cdFx0XHR9XG5cdFx0XHRodG1sICs9ICc8L2Rpdj4nO1xuXHRcdFx0JChodG1sKS5pbnNlcnRBZnRlcihwaWNrZXIuZmluZCgnZGl2LmNhbGVuZGFycy1uYXYsZGl2LnVpLWRhdGVwaWNrZXItaGVhZGVyOmZpcnN0JykpLlxuXHRcdFx0XHRmaW5kKCdhJykuY2xpY2soZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIGRhdGUgPSB0YXJnZXQuY2FsZW5kYXJzUGlja2VyKCdyZXRyaWV2ZURhdGUnLCB0aGlzKTtcblx0XHRcdFx0XHR0YXJnZXQuY2FsZW5kYXJzUGlja2VyKCdzaG93TW9udGgnLCBkYXRlLnllYXIoKSwgZGF0ZS5tb250aCgpKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHQvKiogU2VsZWN0IGFuIGVudGlyZSB3ZWVrIHdoZW4gY2xpY2tpbmcgb24gYSB3ZWVrIG51bWJlci5cblx0XHRcdFVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIDxjb2RlPndlZWtPZlllYXJSZW5kZXJlcjwvY29kZT4uXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gcGlja2VyIHtqUXVlcnl9IFRoZSBjb21wbGV0ZWQgZGF0ZXBpY2tlciBkaXZpc2lvbi5cblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24uXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBleGFtcGxlIG9uU2hvdzogJC5jYWxlbmRhcnNQaWNrZXIuc2VsZWN0V2VlayAqL1xuXHRcdHNlbGVjdFdlZWs6IGZ1bmN0aW9uKHBpY2tlciwgY2FsZW5kYXIsIGluc3QpIHtcblx0XHRcdHZhciB0YXJnZXQgPSAkKHRoaXMpO1xuXHRcdFx0cGlja2VyLmZpbmQoJ3RkLmNhbGVuZGFycy13ZWVrIHNwYW4nKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQkKCc8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCInICtcblx0XHRcdFx0XHRcdHRoaXMuY2xhc3NOYW1lICsgJ1wiIHRpdGxlPVwiU2VsZWN0IHRoZSBlbnRpcmUgd2Vla1wiPicgK1xuXHRcdFx0XHRcdFx0JCh0aGlzKS50ZXh0KCkgKyAnPC9hPicpLlxuXHRcdFx0XHRcdGNsaWNrKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0dmFyIGRhdGUgPSB0YXJnZXQuY2FsZW5kYXJzUGlja2VyKCdyZXRyaWV2ZURhdGUnLCB0aGlzKTtcblx0XHRcdFx0XHRcdHZhciBkYXRlcyA9IFtkYXRlXTtcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAxOyBpIDwgY2FsZW5kYXIuZGF5c0luV2VlaygpOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0ZGF0ZXMucHVzaChkYXRlID0gZGF0ZS5uZXdEYXRlKCkuYWRkKDEsICdkJykpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCkge1xuXHRcdFx0XHRcdFx0XHRkYXRlcy5zcGxpY2UoMSwgZGF0ZXMubGVuZ3RoIC0gMik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0YXJnZXQuY2FsZW5kYXJzUGlja2VyKCdzZXREYXRlJywgZGF0ZXMpLmNhbGVuZGFyc1BpY2tlcignaGlkZScpO1xuXHRcdFx0XHRcdH0pLlxuXHRcdFx0XHRcdHJlcGxhY2VBbGwodGhpcyk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0LyoqIFNlbGVjdCBhbiBlbnRpcmUgbW9udGggd2hlbiBjbGlja2luZyBvbiB0aGUgd2VlayBoZWFkZXIuXG5cdFx0XHRVc2UgaW4gY29uanVuY3Rpb24gd2l0aCA8Y29kZT53ZWVrT2ZZZWFyUmVuZGVyZXI8L2NvZGU+LlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIHBpY2tlciB7alF1ZXJ5fSBUaGUgY29tcGxldGVkIGRhdGVwaWNrZXIgZGl2aXNpb24uXG5cdFx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uLlxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAZXhhbXBsZSBvblNob3c6ICQuY2FsZW5kYXJzUGlja2VyLnNlbGVjdE1vbnRoICovXG5cdFx0c2VsZWN0TW9udGg6IGZ1bmN0aW9uKHBpY2tlciwgY2FsZW5kYXIsIGluc3QpIHtcblx0XHRcdHZhciB0YXJnZXQgPSAkKHRoaXMpO1xuXHRcdFx0cGlja2VyLmZpbmQoJ3RoLmNhbGVuZGFycy13ZWVrJykuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0JCgnPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIHRpdGxlPVwiU2VsZWN0IHRoZSBlbnRpcmUgbW9udGhcIj4nICtcblx0XHRcdFx0XHRcdCQodGhpcykudGV4dCgpICsgJzwvYT4nKS5cblx0XHRcdFx0XHRjbGljayhmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHZhciBkYXRlID0gdGFyZ2V0LmNhbGVuZGFyc1BpY2tlcigncmV0cmlldmVEYXRlJywgJCh0aGlzKS5wYXJlbnRzKCd0YWJsZScpLlxuXHRcdFx0XHRcdFx0XHRmaW5kKCd0ZDpub3QoLmNhbGVuZGFycy13ZWVrKSAqOm5vdCguY2FsZW5kYXJzLW90aGVyLW1vbnRoKScpWzBdKTtcblx0XHRcdFx0XHRcdHZhciBkYXRlcyA9IFtkYXRlLmRheSgxKV07XG5cdFx0XHRcdFx0XHR2YXIgZGltID0gY2FsZW5kYXIuZGF5c0luTW9udGgoZGF0ZSk7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMTsgaSA8IGRpbTsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGRhdGVzLnB1c2goZGF0ZSA9IGRhdGUubmV3RGF0ZSgpLmFkZCgxLCAnZCcpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QpIHtcblx0XHRcdFx0XHRcdFx0ZGF0ZXMuc3BsaWNlKDEsIGRhdGVzLmxlbmd0aCAtIDIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGFyZ2V0LmNhbGVuZGFyc1BpY2tlcignc2V0RGF0ZScsIGRhdGVzKS5jYWxlbmRhcnNQaWNrZXIoJ2hpZGUnKTtcblx0XHRcdFx0XHR9KS5cblx0XHRcdFx0XHRhcHBlbmRUbyh0aGlzKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHQvKiogU2VsZWN0IGEgbW9udGggb25seSBpbnN0ZWFkIG9mIGEgc2luZ2xlIGRheS5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBpY2tlci5leHQuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBwaWNrZXIge2pRdWVyeX0gVGhlIGNvbXBsZXRlZCBkYXRlcGlja2VyIGRpdmlzaW9uLlxuXHRcdFx0QHBhcmFtIGNhbGVuZGFyIHtCYXNlQ2FsZW5kYXJ9IFRoZSBjYWxlbmRhciBpbXBsZW1lbnRhdGlvbi5cblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QGV4YW1wbGUgb25TaG93OiAkLmNhbGVuZGFyc1BpY2tlci5tb250aE9ubHkgKi9cblx0XHRtb250aE9ubHk6IGZ1bmN0aW9uKHBpY2tlciwgY2FsZW5kYXIsIGluc3QpIHtcblx0XHRcdHZhciB0YXJnZXQgPSAkKHRoaXMpO1xuXHRcdFx0dmFyIHNlbGVjdE1vbnRoID0gJCgnPGRpdiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj48YnV0dG9uIHR5cGU9XCJidXR0b25cIj5TZWxlY3Q8L2J1dHRvbj48L2Rpdj4nKS5cblx0XHRcdFx0aW5zZXJ0QWZ0ZXIocGlja2VyLmZpbmQoJy5jYWxlbmRhcnMtbW9udGgtcm93Omxhc3QsLnVpLWRhdGVwaWNrZXItcm93LWJyZWFrOmxhc3QnKSkuXG5cdFx0XHRcdGNoaWxkcmVuKCkuY2xpY2soZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIG1vbnRoWWVhciA9IHBpY2tlci5maW5kKCcuY2FsZW5kYXJzLW1vbnRoLXllYXI6Zmlyc3QnKS52YWwoKS5zcGxpdCgnLycpO1xuXHRcdFx0XHRcdHRhcmdldC5jYWxlbmRhcnNQaWNrZXIoJ3NldERhdGUnLCBjYWxlbmRhci5uZXdEYXRlKFxuXHRcdFx0XHRcdFx0cGFyc2VJbnQobW9udGhZZWFyWzFdLCAxMCksIHBhcnNlSW50KG1vbnRoWWVhclswXSwgMTApLCBjYWxlbmRhci5taW5EYXkpKS5cblx0XHRcdFx0XHRcdGNhbGVuZGFyc1BpY2tlcignaGlkZScpO1xuXHRcdFx0XHR9KTtcblx0XHRcdHBpY2tlci5maW5kKCcuY2FsZW5kYXJzLW1vbnRoLXJvdyB0YWJsZSwudWktZGF0ZXBpY2tlci1yb3ctYnJlYWsgdGFibGUnKS5yZW1vdmUoKTtcblx0XHR9XG5cdH0pO1xuXG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmZ1bGwuanMiLCJqcXVlcnkuY2FsZW5kYXJzLnBpY2tlci5qcyIsImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzd4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZnVsbC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBDYWxlbmRhcnMgZGF0ZSBwaWNrZXIgZm9yIGpRdWVyeSB2Mi4wLjEuXHJcbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgQXVndXN0IDIwMDkuXHJcbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXHJcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xyXG5cclxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxyXG5cclxuXHR2YXIgcGx1Z2luTmFtZSA9ICdjYWxlbmRhcnNQaWNrZXInO1xyXG5cclxuXHJcblx0LyoqIENyZWF0ZSB0aGUgY2FsZW5kYXJzIGRhdGVwaWNrZXIgcGx1Z2luLlxyXG5cdFx0PHA+U2V0cyBhbiBpbnB1dCBmaWVsZCB0byBwb3B1cCBhIGNhbGVuZGFyIGZvciBkYXRlIGVudHJ5LFxyXG5cdFx0XHRvciBhIDxjb2RlPmRpdjwvY29kZT4gb3IgPGNvZGU+c3BhbjwvY29kZT4gdG8gc2hvdyBhbiBpbmxpbmUgY2FsZW5kYXIuPC9wPlxyXG5cdFx0PHA+RXhwZWN0cyBIVE1MIGxpa2U6PC9wPlxyXG5cdFx0PHByZT4mbHQ7aW5wdXQgdHlwZT1cInRleHRcIj4gb3IgJmx0O2Rpdj4mbHQ7L2Rpdj48L3ByZT5cclxuXHRcdDxwPlByb3ZpZGUgaW5saW5lIGNvbmZpZ3VyYXRpb24gbGlrZTo8L3A+XHJcblx0XHQ8cHJlPiZsdDtpbnB1dCB0eXBlPVwidGV4dFwiIGRhdGEtY2FsZW5kYXJzUGlja2VyPVwibmFtZTogJ3ZhbHVlJ1wiLz48L3ByZT5cclxuXHQgXHRAY2xhc3MgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRAYXVnbWVudHMgSlFQbHVnaW5cclxuXHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmNhbGVuZGFyc1BpY2tlcigpXHJcbiAkKHNlbGVjdG9yKS5jYWxlbmRhcnNQaWNrZXIoe21pbkRhdGU6IDAsIG1heERhdGU6ICcrMW0gKzF3J30pICovXHJcblx0JC5KUVBsdWdpbi5jcmVhdGVQbHVnaW4oe1xyXG5cdFxyXG5cdFx0LyoqIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4uXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXIgKi9cclxuXHRcdG5hbWU6IHBsdWdpbk5hbWUsXHJcblx0XHRcclxuXHRcdC8qKiBEZWZhdWx0IHRlbXBsYXRlIGZvciBnZW5lcmF0aW5nIGEgZGF0ZXBpY2tlci5cclxuXHRcdFx0SW5zZXJ0IGFueXdoZXJlOlxyXG5cdFx0XHQ8dWw+XHJcblx0XHRcdDxsaT4ne2wxMG46bmFtZX0nIHRvIGluc2VydCBsb2NhbGlzZWQgdmFsdWUgZm9yIG5hbWUsPC9saT5cclxuXHRcdFx0PGxpPid7bGluazpuYW1lfScgdG8gaW5zZXJ0IGEgbGluayB0cmlnZ2VyIGZvciBjb21tYW5kIG5hbWUsPC9saT5cclxuXHRcdFx0PGxpPid7YnV0dG9uOm5hbWV9JyB0byBpbnNlcnQgYSBidXR0b24gdHJpZ2dlciBmb3IgY29tbWFuZCBuYW1lLDwvbGk+XHJcblx0XHRcdDxsaT4ne3BvcHVwOnN0YXJ0fS4uLntwb3B1cDplbmR9JyB0byBtYXJrIGEgc2VjdGlvbiBmb3IgaW5jbHVzaW9uIGluIGEgcG9wdXAgZGF0ZXBpY2tlciBvbmx5LDwvbGk+XHJcblx0XHRcdDxsaT4ne2lubGluZTpzdGFydH0uLi57aW5saW5lOmVuZH0nIHRvIG1hcmsgYSBzZWN0aW9uIGZvciBpbmNsdXNpb24gaW4gYW4gaW5saW5lIGRhdGVwaWNrZXIgb25seS48L2xpPlxyXG5cdFx0XHQ8L3VsPlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcm9wZXJ0eSBwaWNrZXIge3N0cmluZ30gT3ZlcmFsbCBzdHJ1Y3R1cmU6ICd7bW9udGhzfScgdG8gaW5zZXJ0IGNhbGVuZGFyIG1vbnRocy5cclxuXHRcdFx0QHByb3BlcnR5IG1vbnRoUm93IHtzdHJpbmd9IE9uZSByb3cgb2YgbW9udGhzOiAne21vbnRoc30nIHRvIGluc2VydCBjYWxlbmRhciBtb250aHMuXHJcblx0XHRcdEBwcm9wZXJ0eSBtb250aCB7c3RyaW5nfSBBIHNpbmdsZSBtb250aDogJ3ttb250aEhlYWRlcjxlbT46ZGF0ZUZvcm1hdDwvZW0+fScgdG8gaW5zZXJ0IHRoZSBtb250aCBoZWFkZXIgLVxyXG5cdFx0XHRcdFx0XHQ8ZW0+ZGF0ZUZvcm1hdDwvZW0+IGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byAnTU0geXl5eScsXHJcblx0XHRcdFx0XHRcdCd7d2Vla0hlYWRlcn0nIHRvIGluc2VydCBhIHdlZWsgaGVhZGVyLCAne3dlZWtzfScgdG8gaW5zZXJ0IHRoZSBtb250aCdzIHdlZWtzLlxyXG5cdFx0XHRAcHJvcGVydHkgd2Vla0hlYWRlciB7c3RyaW5nfSBBIHdlZWsgaGVhZGVyOiAne2RheXN9JyB0byBpbnNlcnQgaW5kaXZpZHVhbCBkYXkgbmFtZXMuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlIZWFkZXIge3N0cmluZ30gSW5kaXZpZHVhbCBkYXkgaGVhZGVyOiAne2RheX0nIHRvIGluc2VydCBkYXkgbmFtZS5cclxuXHRcdFx0QHByb3BlcnR5IHdlZWsge3N0cmluZ30gT25lIHdlZWsgb2YgdGhlIG1vbnRoOiAne2RheXN9JyB0byBpbnNlcnQgdGhlIHdlZWsncyBkYXlzLFxyXG5cdFx0XHRcdFx0XHQne3dlZWtPZlllYXJ9JyB0byBpbnNlcnQgd2VlayBvZiB5ZWFyLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5IHtzdHJpbmd9IEFuIGluZGl2aWR1YWwgZGF5OiAne2RheX0nIHRvIGluc2VydCBkYXkgdmFsdWUuXHJcblx0XHRcdEBwcm9wZXJ0eSBtb250aFNlbGVjdG9yIHtzdHJpbmd9IGpRdWVyeSBzZWxlY3RvciwgcmVsYXRpdmUgdG8gcGlja2VyLCBmb3IgYSBzaW5nbGUgbW9udGguXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlTZWxlY3RvciB7c3RyaW5nfSBqUXVlcnkgc2VsZWN0b3IsIHJlbGF0aXZlIHRvIHBpY2tlciwgZm9yIGluZGl2aWR1YWwgZGF5cy5cclxuXHRcdFx0QHByb3BlcnR5IHJ0bENsYXNzIHtzdHJpbmd9IENsYXNzIGZvciByaWdodC10by1sZWZ0IChSVEwpIGxhbmd1YWdlcy5cclxuXHRcdFx0QHByb3BlcnR5IG11bHRpQ2xhc3Mge3N0cmluZ30gQ2xhc3MgZm9yIG11bHRpLW1vbnRoIGRhdGVwaWNrZXJzLlxyXG5cdFx0XHRAcHJvcGVydHkgZGVmYXVsdENsYXNzIHtzdHJpbmd9IENsYXNzIGZvciBzZWxlY3RhYmxlIGRhdGVzLlxyXG5cdFx0XHRAcHJvcGVydHkgc2VsZWN0ZWRDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgY3VycmVudGx5IHNlbGVjdGVkIGRhdGVzLlxyXG5cdFx0XHRAcHJvcGVydHkgaGlnaGxpZ2h0ZWRDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgaGlnaGxpZ2h0ZWQgZGF0ZXMuXHJcblx0XHRcdEBwcm9wZXJ0eSB0b2RheUNsYXNzIHtzdHJpbmd9IENsYXNzIGZvciB0b2RheS5cclxuXHRcdFx0QHByb3BlcnR5IG90aGVyTW9udGhDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgZGF5cyBmcm9tIG90aGVyIG1vbnRocy5cclxuXHRcdFx0QHByb3BlcnR5IHdlZWtlbmRDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgZGF5cyBvbiB3ZWVrZW5kcy5cclxuXHRcdFx0QHByb3BlcnR5IGNvbW1hbmRDbGFzcyB7c3RyaW5nfSBDbGFzcyBwcmVmaXggZm9yIGNvbW1hbmRzLlxyXG5cdFx0XHRAcHJvcGVydHkgY29tbWFuZEJ1dHRvbkNsYXNzIHtzdHJpbmd9IEV4dHJhIGNsYXNzKGVzKSBmb3IgY29tbWFuZHMgdGhhdCBhcmUgYnV0dG9ucy5cclxuXHRcdFx0QHByb3BlcnR5IGNvbW1hbmRMaW5rQ2xhc3Mge3N0cmluZ30gRXh0cmEgY2xhc3MoZXMpIGZvciBjb21tYW5kcyB0aGF0IGFyZSBsaW5rcy5cclxuXHRcdFx0QHByb3BlcnR5IGRpc2FibGVkQ2xhc3Mge3N0cmluZ30gQ2xhc3MgZm9yIGRpc2FibGVkIGNvbW1hbmRzLiAqL1xyXG5cdFx0ZGVmYXVsdFJlbmRlcmVyOiB7XHJcblx0XHRcdHBpY2tlcjogJzxkaXYgY2xhc3M9XCJjYWxlbmRhcnNcIj4nICtcclxuXHRcdFx0JzxkaXYgY2xhc3M9XCJjYWxlbmRhcnMtbmF2XCI+e2xpbms6cHJldn17bGluazp0b2RheX17bGluazpuZXh0fTwvZGl2Pnttb250aHN9JyArXHJcblx0XHRcdCd7cG9wdXA6c3RhcnR9PGRpdiBjbGFzcz1cImNhbGVuZGFycy1jdHJsXCI+e2xpbms6Y2xlYXJ9e2xpbms6Y2xvc2V9PC9kaXY+e3BvcHVwOmVuZH0nICtcclxuXHRcdFx0JzxkaXYgY2xhc3M9XCJjYWxlbmRhcnMtY2xlYXItZml4XCI+PC9kaXY+PC9kaXY+JyxcclxuXHRcdFx0bW9udGhSb3c6ICc8ZGl2IGNsYXNzPVwiY2FsZW5kYXJzLW1vbnRoLXJvd1wiPnttb250aHN9PC9kaXY+JyxcclxuXHRcdFx0bW9udGg6ICc8ZGl2IGNsYXNzPVwiY2FsZW5kYXJzLW1vbnRoXCI+PGRpdiBjbGFzcz1cImNhbGVuZGFycy1tb250aC1oZWFkZXJcIj57bW9udGhIZWFkZXJ9PC9kaXY+JyArXHJcblx0XHRcdCc8dGFibGU+PHRoZWFkPnt3ZWVrSGVhZGVyfTwvdGhlYWQ+PHRib2R5Pnt3ZWVrc308L3Rib2R5PjwvdGFibGU+PC9kaXY+JyxcclxuXHRcdFx0d2Vla0hlYWRlcjogJzx0cj57ZGF5c308L3RyPicsXHJcblx0XHRcdGRheUhlYWRlcjogJzx0aD57ZGF5fTwvdGg+JyxcclxuXHRcdFx0d2VlazogJzx0cj57ZGF5c308L3RyPicsXHJcblx0XHRcdGRheTogJzx0ZD57ZGF5fTwvdGQ+JyxcclxuXHRcdFx0bW9udGhTZWxlY3RvcjogJy5jYWxlbmRhcnMtbW9udGgnLFxyXG5cdFx0XHRkYXlTZWxlY3RvcjogJ3RkJyxcclxuXHRcdFx0cnRsQ2xhc3M6ICdjYWxlbmRhcnMtcnRsJyxcclxuXHRcdFx0bXVsdGlDbGFzczogJ2NhbGVuZGFycy1tdWx0aScsXHJcblx0XHRcdGRlZmF1bHRDbGFzczogJycsXHJcblx0XHRcdHNlbGVjdGVkQ2xhc3M6ICdjYWxlbmRhcnMtc2VsZWN0ZWQnLFxyXG5cdFx0XHRoaWdobGlnaHRlZENsYXNzOiAnY2FsZW5kYXJzLWhpZ2hsaWdodCcsXHJcblx0XHRcdHRvZGF5Q2xhc3M6ICdjYWxlbmRhcnMtdG9kYXknLFxyXG5cdFx0XHRvdGhlck1vbnRoQ2xhc3M6ICdjYWxlbmRhcnMtb3RoZXItbW9udGgnLFxyXG5cdFx0XHR3ZWVrZW5kQ2xhc3M6ICdjYWxlbmRhcnMtd2Vla2VuZCcsXHJcblx0XHRcdGNvbW1hbmRDbGFzczogJ2NhbGVuZGFycy1jbWQnLFxyXG5cdFx0XHRjb21tYW5kQnV0dG9uQ2xhc3M6ICcnLFxyXG5cdFx0XHRjb21tYW5kTGlua0NsYXNzOiAnJyxcclxuXHRcdFx0ZGlzYWJsZWRDbGFzczogJ2NhbGVuZGFycy1kaXNhYmxlZCdcclxuXHRcdH0sXHJcblx0XHJcblx0XHQvKiogQ29tbWFuZCBhY3Rpb25zIHRoYXQgbWF5IGJlIGFkZGVkIHRvIGEgbGF5b3V0IGJ5IG5hbWUuXHJcblx0XHRcdDx1bD5cclxuXHRcdFx0PGxpPnByZXYgLSBTaG93IHRoZSBwcmV2aW91cyBtb250aCAoYmFzZWQgb24gPGNvZGU+bW9udGhzVG9TdGVwPC9jb2RlPiBvcHRpb24pIC0gPGVtPlBhZ2VVcDwvZW0+PC9saT5cclxuXHRcdFx0PGxpPnByZXZKdW1wIC0gU2hvdyB0aGUgcHJldmlvdXMgeWVhciAoYmFzZWQgb24gPGNvZGU+bW9udGhzVG9KdW1wPC9jb2RlPiBvcHRpb24pIC0gPGVtPkN0cmwrUGFnZVVwPC9lbT48L2xpPlxyXG5cdFx0XHQ8bGk+bmV4dCAtIFNob3cgdGhlIG5leHQgbW9udGggKGJhc2VkIG9uIDxjb2RlPm1vbnRoc1RvU3RlcDwvY29kZT4gb3B0aW9uKSAtIDxlbT5QYWdlRG93bjwvZW0+PC9saT5cclxuXHRcdFx0PGxpPm5leHRKdW1wIC0gU2hvdyB0aGUgbmV4dCB5ZWFyIChiYXNlZCBvbiA8Y29kZT5tb250aHNUb0p1bXA8L2NvZGU+IG9wdGlvbikgLSA8ZW0+Q3RybCtQYWdlRG93bjwvZW0+PC9saT5cclxuXHRcdFx0PGxpPmN1cnJlbnQgLSBTaG93IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbW9udGggb3IgdG9kYXkncyBpZiBub25lIHNlbGVjdGVkIC0gPGVtPkN0cmwrSG9tZTwvZW0+PC9saT5cclxuXHRcdFx0PGxpPnRvZGF5IC0gU2hvdyB0b2RheSdzIG1vbnRoIC0gPGVtPkN0cmwrSG9tZTwvZW0+PC9saT5cclxuXHRcdFx0PGxpPmNsZWFyIC0gRXJhc2UgdGhlIGRhdGUgYW5kIGNsb3NlIHRoZSBkYXRlcGlja2VyIHBvcHVwIC0gPGVtPkN0cmwrRW5kPC9lbT48L2xpPlxyXG5cdFx0XHQ8bGk+Y2xvc2UgLSBDbG9zZSB0aGUgZGF0ZXBpY2tlciBwb3B1cCAtIDxlbT5Fc2M8L2VtPjwvbGk+XHJcblx0XHRcdDxsaT5wcmV2V2VlayAtIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgcHJldmlvdXMgd2VlayAtIDxlbT5DdHJsK1VwPC9lbT48L2xpPlxyXG5cdFx0XHQ8bGk+cHJldkRheSAtIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgcHJldmlvdXMgZGF5IC0gPGVtPkN0cmwrTGVmdDwvZW0+PC9saT5cclxuXHRcdFx0PGxpPm5leHREYXkgLSBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgZGF5IC0gPGVtPkN0cmwrUmlnaHQ8L2VtPjwvbGk+XHJcblx0XHRcdDxsaT5uZXh0V2VlayAtIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgbmV4dCB3ZWVrIC0gPGVtPkN0cmwrRG93bjwvZW0+PC9saT5cclxuXHRcdFx0PC91bD5cclxuXHRcdFx0VGhlIGNvbW1hbmQgbmFtZSBpcyB0aGUga2V5IG5hbWUgYW5kIGlzIHVzZWQgdG8gYWRkIHRoZSBjb21tYW5kIHRvIGEgbGF5b3V0XHJcblx0XHRcdHdpdGggJ3tidXR0b246bmFtZX0nIG9yICd7bGluazpuYW1lfScuIEVhY2ggaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcy5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJvcGVydHkgdGV4dCB7c3RyaW5nfSBUaGUgZmllbGQgaW4gdGhlIHJlZ2lvbmFsIHNldHRpbmdzIGZvciB0aGUgZGlzcGxheWVkIHRleHQuXHJcblx0XHRcdEBwcm9wZXJ0eSBzdGF0dXMge3N0cmluZ30gVGhlIGZpZWxkIGluIHRoZSByZWdpb25hbCBzZXR0aW5ncyBmb3IgdGhlIHN0YXR1cyB0ZXh0LlxyXG5cdFx0XHRAcHJvcGVydHkga2V5c3Ryb2tlIHtvYmplY3R9IFRoZSBrZXlzdHJva2UgdG8gdHJpZ2dlciB0aGUgYWN0aW9uLCB3aXRoIGF0dHJpYnV0ZXM6XHJcblx0XHRcdFx0PGNvZGU+a2V5Q29kZTwvY29kZT4ge251bWJlcn0gdGhlIGNvZGUgZm9yIHRoZSBrZXlzdHJva2UsXHJcblx0XHRcdFx0PGNvZGU+Y3RybEtleTwvY29kZT4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIDxlbT5DdHJsPC9lbT4gaXMgcmVxdWlyZWQsXHJcblx0XHRcdFx0PGNvZGU+YWx0S2V5PC9jb2RlPiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgPGVtPkFsdDwvZW0+IGlzIHJlcXVpcmVkLFxyXG5cdFx0XHRcdDxjb2RlPnNoaWZ0S2V5PC9jb2RlPiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgPGVtPlNoaWZ0PC9lbT4gaXMgcmVxdWlyZWQuXHJcblx0XHRcdEBwcm9wZXJ0eSBlbmFibGVkIHtDYWxlbmRhcnNQaWNrZXJDb21tYW5kRW5hYmxlZH0gVGhlIGZ1bmN0aW9uIHRoYXQgaW5kaWNhdGVzIHRoZSBjb21tYW5kIGlzIGVuYWJsZWQuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXRlIHtDYWxlbmRhcnNQaWNrZXJDb21tYW5kRGF0ZX0gVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgZGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBhY3Rpb24uXHJcblx0XHRcdEBwcm9wZXJ0eSBhY3Rpb24ge0NhbGVuZGFyc1BpY2tlckNvbW1hbmRBY3Rpb259IFRoZSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgdGhlIGFjdGlvbi4gKi9cclxuXHRcdGNvbW1hbmRzOiB7XHJcblx0XHRcdHByZXY6IHt0ZXh0OiAncHJldlRleHQnLCBzdGF0dXM6ICdwcmV2U3RhdHVzJywgLy8gUHJldmlvdXMgbW9udGhcclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzM30sIC8vIFBhZ2UgdXBcclxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuY3VyTWluRGF0ZSgpO1xyXG5cdFx0XHRcdFx0cmV0dXJuICghbWluRGF0ZSB8fCBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cclxuXHRcdFx0XHRcdFx0YWRkKDEgLSBpbnN0Lm9wdGlvbnMubW9udGhzVG9TdGVwIC0gaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKS5cclxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpLmFkZCgtMSwgJ2QnKS5jb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKTsgfSxcclxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXHJcblx0XHRcdFx0XHRcdGFkZCgtaW5zdC5vcHRpb25zLm1vbnRoc1RvU3RlcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXHJcblx0XHRcdFx0XHRcdGRheShpbnN0Lm9wdGlvbnMuY2FsZW5kYXIubWluRGF5KTsgfSxcclxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHBsdWdpbi5jaGFuZ2VNb250aCh0aGlzLCAtaW5zdC5vcHRpb25zLm1vbnRoc1RvU3RlcCk7IH1cclxuXHRcdFx0fSxcclxuXHRcdFx0cHJldkp1bXA6IHt0ZXh0OiAncHJldkp1bXBUZXh0Jywgc3RhdHVzOiAncHJldkp1bXBTdGF0dXMnLCAvLyBQcmV2aW91cyB5ZWFyXHJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzMsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgUGFnZSB1cFxyXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XHJcblx0XHRcdFx0XHRyZXR1cm4gKCFtaW5EYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxyXG5cdFx0XHRcdFx0XHRhZGQoMSAtIGluc3Qub3B0aW9ucy5tb250aHNUb0p1bXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxyXG5cdFx0XHRcdFx0XHRkYXkoaW5zdC5vcHRpb25zLmNhbGVuZGFyLm1pbkRheSkuYWRkKC0xLCAnZCcpLmNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpOyB9LFxyXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHJldHVybiBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cclxuXHRcdFx0XHRcdFx0YWRkKC1pbnN0Lm9wdGlvbnMubW9udGhzVG9KdW1wIC0gaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKS5cclxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpOyB9LFxyXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkge1xyXG5cdFx0XHRcdFx0cGx1Z2luLmNoYW5nZU1vbnRoKHRoaXMsIC1pbnN0Lm9wdGlvbnMubW9udGhzVG9KdW1wKTsgfVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRuZXh0OiB7dGV4dDogJ25leHRUZXh0Jywgc3RhdHVzOiAnbmV4dFN0YXR1cycsIC8vIE5leHQgbW9udGhcclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzNH0sIC8vIFBhZ2UgZG93blxyXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcclxuXHRcdFx0XHRcdHJldHVybiAoIW1heERhdGUgfHwgaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXHJcblx0XHRcdFx0XHRcdGFkZChpbnN0Lm9wdGlvbnMubW9udGhzVG9TdGVwIC0gaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKS5cclxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpLmNvbXBhcmVUbyhtYXhEYXRlKSAhPT0gKzEpOyB9LFxyXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHJldHVybiBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cclxuXHRcdFx0XHRcdFx0YWRkKGluc3Qub3B0aW9ucy5tb250aHNUb1N0ZXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxyXG5cdFx0XHRcdFx0XHRkYXkoaW5zdC5vcHRpb25zLmNhbGVuZGFyLm1pbkRheSk7IH0sXHJcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHRwbHVnaW4uY2hhbmdlTW9udGgodGhpcywgaW5zdC5vcHRpb25zLm1vbnRoc1RvU3RlcCk7IH1cclxuXHRcdFx0fSxcclxuXHRcdFx0bmV4dEp1bXA6IHt0ZXh0OiAnbmV4dEp1bXBUZXh0Jywgc3RhdHVzOiAnbmV4dEp1bXBTdGF0dXMnLCAvLyBOZXh0IHllYXJcclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzNCwgY3RybEtleTogdHJ1ZX0sIC8vIEN0cmwgKyBQYWdlIGRvd25cclxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XHJcblx0XHRcdFx0XHRyZXR1cm4gKCFtYXhEYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxyXG5cdFx0XHRcdFx0XHRhZGQoaW5zdC5vcHRpb25zLm1vbnRoc1RvSnVtcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXHJcblx0XHRcdFx0XHRcdGRheShpbnN0Lm9wdGlvbnMuY2FsZW5kYXIubWluRGF5KS5jb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKTtcdH0sXHJcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxyXG5cdFx0XHRcdFx0XHRhZGQoaW5zdC5vcHRpb25zLm1vbnRoc1RvSnVtcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXHJcblx0XHRcdFx0XHRcdGRheShpbnN0Lm9wdGlvbnMuY2FsZW5kYXIubWluRGF5KTsgfSxcclxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHBsdWdpbi5jaGFuZ2VNb250aCh0aGlzLCBpbnN0Lm9wdGlvbnMubW9udGhzVG9KdW1wKTsgfVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjdXJyZW50OiB7dGV4dDogJ2N1cnJlbnRUZXh0Jywgc3RhdHVzOiAnY3VycmVudFN0YXR1cycsIC8vIEN1cnJlbnQgbW9udGhcclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzNiwgY3RybEtleTogdHJ1ZX0sIC8vIEN0cmwgKyBIb21lXHJcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xyXG5cdFx0XHRcdFx0dmFyIG1pbkRhdGUgPSBpbnN0LmN1ck1pbkRhdGUoKTtcclxuXHRcdFx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcclxuXHRcdFx0XHRcdHZhciBjdXJEYXRlID0gaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpO1xyXG5cdFx0XHRcdFx0cmV0dXJuICghbWluRGF0ZSB8fCBjdXJEYXRlLmNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpICYmXHJcblx0XHRcdFx0XHRcdCghbWF4RGF0ZSB8fCBjdXJEYXRlLmNvbXBhcmVUbyhtYXhEYXRlKSAhPT0gKzEpOyB9LFxyXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHJldHVybiBpbnN0LnNlbGVjdGVkRGF0ZXNbMF0gfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCk7IH0sXHJcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHR2YXIgY3VyRGF0ZSA9IGluc3Quc2VsZWN0ZWREYXRlc1swXSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKTtcclxuXHRcdFx0XHRcdHBsdWdpbi5zaG93TW9udGgodGhpcywgY3VyRGF0ZS55ZWFyKCksIGN1ckRhdGUubW9udGgoKSk7IH1cclxuXHRcdFx0fSxcclxuXHRcdFx0dG9kYXk6IHt0ZXh0OiAndG9kYXlUZXh0Jywgc3RhdHVzOiAndG9kYXlTdGF0dXMnLCAvLyBUb2RheSdzIG1vbnRoXHJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzYsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgSG9tZVxyXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XHJcblx0XHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XHJcblx0XHRcdFx0XHRyZXR1cm4gKCFtaW5EYXRlIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpLmNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpICYmXHJcblx0XHRcdFx0XHRcdCghbWF4RGF0ZSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKS5jb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKTsgfSxcclxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKTsgfSxcclxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHsgcGx1Z2luLnNob3dNb250aCh0aGlzKTsgfVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjbGVhcjoge3RleHQ6ICdjbGVhclRleHQnLCBzdGF0dXM6ICdjbGVhclN0YXR1cycsIC8vIENsZWFyIHRoZSBkYXRlcGlja2VyXHJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzUsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgRW5kXHJcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiBudWxsOyB9LFxyXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkgeyBwbHVnaW4uY2xlYXIodGhpcyk7IH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Y2xvc2U6IHt0ZXh0OiAnY2xvc2VUZXh0Jywgc3RhdHVzOiAnY2xvc2VTdGF0dXMnLCAvLyBDbG9zZSB0aGUgZGF0ZXBpY2tlclxyXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDI3fSwgLy8gRXNjYXBlXHJcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiBudWxsOyB9LFxyXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkgeyBwbHVnaW4uaGlkZSh0aGlzKTsgfVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRwcmV2V2Vlazoge3RleHQ6ICdwcmV2V2Vla1RleHQnLCBzdGF0dXM6ICdwcmV2V2Vla1N0YXR1cycsIC8vIFByZXZpb3VzIHdlZWtcclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzOCwgY3RybEtleTogdHJ1ZX0sIC8vIEN0cmwgKyBVcFxyXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XHJcblx0XHRcdFx0XHRyZXR1cm4gKCFtaW5EYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxyXG5cdFx0XHRcdFx0XHRhZGQoLWluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCksICdkJykuY29tcGFyZVRvKG1pbkRhdGUpICE9PSAtMSk7IH0sXHJcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXHJcblx0XHRcdFx0XHRhZGQoLWluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCksICdkJyk7IH0sXHJcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7IHBsdWdpbi5jaGFuZ2VEYXkodGhpcywgLWluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCkpOyB9XHJcblx0XHRcdH0sXHJcblx0XHRcdHByZXZEYXk6IHt0ZXh0OiAncHJldkRheVRleHQnLCBzdGF0dXM6ICdwcmV2RGF5U3RhdHVzJywgLy8gUHJldmlvdXMgZGF5XHJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzcsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgTGVmdFxyXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XHJcblx0XHRcdFx0XHRyZXR1cm4gKCFtaW5EYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZCgtMSwgJ2QnKS5cclxuXHRcdFx0XHRcdFx0Y29tcGFyZVRvKG1pbkRhdGUpICE9PSAtMSk7IH0sXHJcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuYWRkKC0xLCAnZCcpOyB9LFxyXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkgeyBwbHVnaW4uY2hhbmdlRGF5KHRoaXMsIC0xKTsgfVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRuZXh0RGF5OiB7dGV4dDogJ25leHREYXlUZXh0Jywgc3RhdHVzOiAnbmV4dERheVN0YXR1cycsIC8vIE5leHQgZGF5XHJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzksIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgUmlnaHRcclxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XHJcblx0XHRcdFx0XHRyZXR1cm4gKCFtYXhEYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZCgxLCAnZCcpLlxyXG5cdFx0XHRcdFx0XHRjb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKTsgfSxcclxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5hZGQoMSwgJ2QnKTsgfSxcclxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHsgcGx1Z2luLmNoYW5nZURheSh0aGlzLCAxKTsgfVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRuZXh0V2Vlazoge3RleHQ6ICduZXh0V2Vla1RleHQnLCBzdGF0dXM6ICduZXh0V2Vla1N0YXR1cycsIC8vIE5leHQgd2Vla1xyXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDQwLCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIERvd25cclxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XHJcblx0XHRcdFx0XHRyZXR1cm4gKCFtYXhEYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxyXG5cdFx0XHRcdFx0XHRhZGQoaW5zdC5vcHRpb25zLmNhbGVuZGFyLmRheXNJbldlZWsoKSwgJ2QnKS5jb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKTsgfSxcclxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cclxuXHRcdFx0XHRcdGFkZChpbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGF5c0luV2VlaygpLCAnZCcpOyB9LFxyXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkgeyBwbHVnaW4uY2hhbmdlRGF5KHRoaXMsIGluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCkpOyB9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIGEgY29tbWFuZCBpcyBlbmFibGVkLlxyXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyQ29tbWFuZEVuYWJsZWRcclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgY29tbWFuZCBpcyBlbmFibGVkLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxyXG5cdFx0XHRAZXhhbXBsZSBlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0cmV0dXJuICEhaW5zdC5jdXJNaW5EYXRlKCk7XHJcbiB9ICovXHJcblxyXG5cdFx0LyoqIENhbGN1bGF0ZSB0aGUgcmVwcmVzZW50YXRpdmUgZGF0ZSBmb3IgYSBjb21tYW5kLlxyXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyQ29tbWFuZERhdGVcclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBBIGRhdGUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgY29tbWFuZC5cclxuXHRcdFx0QGV4YW1wbGUgZGF0ZTogZnVuY3Rpb24oaW5zdCkge1xyXG5cdHJldHVybiBpbnN0LmN1ck1pbkRhdGUoKTtcclxuIH0gKi9cclxuXHJcblx0XHQvKiogUGVyZm9ybSB0aGUgYWN0aW9uIGZvciBhIGNvbW1hbmQuXHJcblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJDb21tYW5kQWN0aW9uXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAZXhhbXBsZSBkYXRlOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0JC5kYXRlcGljay5zZXREYXRlKGluc3QuZWxlbSwgaW5zdC5jdXJNaW5EYXRlKCkpO1xyXG4gfSAqL1xyXG5cclxuXHRcdC8qKiBDYWxjdWxhdGUgdGhlIHdlZWsgb2YgdGhlIHllYXIgZm9yIGEgZGF0ZS5cclxuXHRcdFx0QGNhbGxiYWNrIENhbGVuZGFyc1BpY2tlckNhbGN1bGF0ZVdlZWtcclxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgZGF0ZSB0byBldmFsdWF0ZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgd2VlayBvZiB0aGUgeWVhci5cclxuXHRcdFx0QGV4YW1wbGUgY2FsY3VsYXRlV2VlazogZnVuY3Rpb24oZGF0ZSkge1xyXG5cdHZhciBzdGFydFllYXIgPSAkLmNhbGVuZGFycy5uZXdEYXRlKGRhdGUueWVhcigpLCAxLCAxKTtcclxuXHRyZXR1cm4gTWF0aC5mbG9vcigoZGF0ZS5kYXlPZlllYXIoKSAtIHN0YXJ0WWVhci5kYXlPZlllYXIoKSkgLyA3KSArIDE7XHJcbiB9ICovXHJcblxyXG5cdFx0LyoqIFByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgYW4gaW5kaXZpZHVhbCBkYXRlIHNob3duIGluIHRoZSBjYWxlbmRhci5cclxuXHRcdFx0QGNhbGxiYWNrIENhbGVuZGFyc1BpY2tlck9uRGF0ZVxyXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBkYXRlIHRvIGV2YWx1YXRlLlxyXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IEluZm9ybWF0aW9uIGFib3V0IHRoYXQgZGF0ZSwgd2l0aCB0aGUgcHJvcGVydGllcyBhYm92ZS5cclxuXHRcdFx0QHByb3BlcnR5IHNlbGVjdGFibGUge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgZGF0ZSBjYW4gYmUgc2VsZWN0ZWQuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXRlQ2xhc3Mge3N0cmluZ30gQ2xhc3MoZXMpIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGRhdGUuXHJcblx0XHRcdEBwcm9wZXJ0eSBjb250ZW50IHtzdHJpbmd9IFRoZSBkYXRlIGNlbGwgY29udGVudC5cclxuXHRcdFx0QHByb3BlcnR5IHRvb2x0aXAge3N0cmluZ30gQSBwb3B1cCB0b29sdGlwIGZvciB0aGUgZGF0ZS5cclxuXHRcdFx0QGV4YW1wbGUgb25EYXRlOiBmdW5jdGlvbihkYXRlKSB7XHJcblx0cmV0dXJuIHtzZWxlY3RhYmxlOiBkYXRlLmRheSgpID4gMCAmJiBkYXRlLmRheSgpICZsdDsgNSxcclxuXHRcdGRhdGVDbGFzczogZGF0ZS5kYXkoKSA9PT0gNCA/ICdsYXN0LWRheScgOiAnJ307XHJcbiB9ICovXHJcblxyXG5cdFx0LyoqIFVwZGF0ZSB0aGUgZGF0ZXBpY2tlciBkaXNwbGF5LlxyXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyT25TaG93XHJcblx0XHRcdEBwYXJhbSBwaWNrZXIge2pRdWVyeX0gVGhlIGRhdGVwaWNrZXIgPGNvZGU+ZGl2PC9jb2RlPiB0byBiZSBzaG93bi5cclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBleGFtcGxlIG9uU2hvdzogZnVuY3Rpb24ocGlja2VyLCBpbnN0KSB7XHJcblx0cGlja2VyLmFwcGVuZCgnJmx0O2J1dHRvbiB0eXBlPVwiYnV0dG9uXCI+SGkmbHQ7L2J1dHRvbj4nKS5cclxuXHRcdGZpbmQoJ2J1dHRvbjpsYXN0JykuY2xpY2soZnVuY3Rpb24oKSB7XHJcblx0XHRcdGFsZXJ0KCdIaSEnKTtcclxuXHRcdH0pO1xyXG4gfSAqL1xyXG5cclxuXHRcdC8qKiBSZWFjdCB0byBuYXZpZ2F0aW5nIHRocm91Z2ggdGhlIG1vbnRocy95ZWFycy5cclxuXHRcdFx0QGNhbGxiYWNrIENhbGVuZGFyc1BpY2tlck9uQ2hhbmdlTW9udGhZZWFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSBuZXcgeWVhci5cclxuXHRcdFx0QHBhcmFtIG1vbnRoIHtudW1iZXJ9IFRoZSBuZXcgbW9udGggKDEgdG8gMTIpLlxyXG5cdFx0XHRAZXhhbXBsZSBvbkNoYW5nZU1vbnRoWWVhcjogZnVuY3Rpb24oeWVhciwgbW9udGgpIHtcclxuXHRhbGVydCgnTm93IGluICcgKyBtb250aCArICcvJyArIHllYXIpO1xyXG4gfSAqL1xyXG5cdFx0XHRcclxuXHRcdC8qKiBEYXRlcGlja2VyIG9uIHNlbGVjdCBjYWxsYmFjay5cclxuXHRcdFx0VHJpZ2dlcmVkIHdoZW4gYSBkYXRlIGlzIHNlbGVjdGVkLlxyXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyT25TZWxlY3RcclxuXHRcdFx0QHBhcmFtIGRhdGVzIHtDRGF0ZVtdfSBUaGUgc2VsZWN0ZWQgZGF0ZShzKS5cclxuXHRcdFx0QGV4YW1wbGUgb25TZWxlY3Q6IGZ1bmN0aW9uKGRhdGVzKSB7XHJcbiBcdGFsZXJ0KCdTZWxlY3RlZCAnICsgZGF0ZXMpO1xyXG4gfSAqL1xyXG5cdFx0XHRcclxuXHRcdC8qKiBEYXRlcGlja2VyIG9uIGNsb3NlIGNhbGxiYWNrLlxyXG5cdFx0XHRUcmlnZ2VyZWQgd2hlbiBhIHBvcHVwIGNhbGVuZGFyIGlzIGNsb3NlZC5cclxuXHRcdFx0QGNhbGxiYWNrIENhbGVuZGFyc1BpY2tlck9uQ2xvc2VcclxuXHRcdFx0QHBhcmFtIGRhdGVzIHtDRGF0ZVtdfSBUaGUgc2VsZWN0ZWQgZGF0ZShzKS5cclxuXHRcdFx0QGV4YW1wbGUgb25DbG9zZTogZnVuY3Rpb24oZGF0ZXMpIHtcclxuIFx0YWxlcnQoJ1NlbGVjdGVkICcgKyBkYXRlcyk7XHJcbiB9ICovXHJcblx0XHRcclxuXHRcdC8qKiBEZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGx1Z2luLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcm9wZXJ0eSBbY2FsZW5kYXI9JC5jYWxlbmRhcnMuaW5zdGFuY2UoKV0ge0NhbGVuZGFyfSBUaGUgY2FsZW5kYXIgZm9yIHRoaXMgZGF0ZXBpY2tlci5cclxuXHRcdFx0QHByb3BlcnR5IFtwaWNrZXJDbGFzcz0nJ10ge3N0cmluZ30gQ1NTIGNsYXNzIHRvIGFkZCB0byB0aGlzIGluc3RhbmNlIG9mIHRoZSBkYXRlcGlja2VyLlxyXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dPbkZvY3VzPXRydWVdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBmb3IgcG9wdXAgb24gZm9jdXMsIDxjb2RlPmZhbHNlPC9jb2RlPiBmb3Igbm90LlxyXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dUcmlnZ2VyPW51bGxdIHtzdHJpbmd8RWxlbWVudHxqUXVlcnl9IEVsZW1lbnQgdG8gYmUgY2xvbmVkIGZvciBhIHRyaWdnZXIsIDxjb2RlPm51bGw8L2NvZGU+IGZvciBub25lLlxyXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dBbmltPSdzaG93J10ge3N0cmluZ30gTmFtZSBvZiBqUXVlcnkgYW5pbWF0aW9uIGZvciBwb3B1cCwgJycgZm9yIG5vIGFuaW1hdGlvbi5cclxuXHRcdFx0QHByb3BlcnR5IFtzaG93T3B0aW9ucz1udWxsXSB7b2JqZWN0fSBPcHRpb25zIGZvciBlbmhhbmNlZCBhbmltYXRpb25zLlxyXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dTcGVlZD0nbm9ybWFsJ10ge3N0cmluZ30gRHVyYXRpb24gb2YgZGlzcGxheS9jbG9zdXJlLlxyXG5cdFx0XHRAcHJvcGVydHkgW3BvcHVwQ29udGFpbmVyPW51bGxdIHtzdHJpbmd8RWxlbWVudHxqUXVlcnl9IFRoZSBlbGVtZW50IHRvIHdoaWNoIGEgcG9wdXAgY2FsZW5kYXIgaXMgYWRkZWQsIDxjb2RlPm51bGw8L2NvZGU+IGZvciBib2R5LlxyXG5cdFx0XHRAcHJvcGVydHkgW2FsaWdubWVudD0nYm90dG9tJ10ge3N0cmluZ30gQWxpZ25tZW50IG9mIHBvcHVwIC0gd2l0aCBub21pbmF0ZWQgY29ybmVyIG9mIGlucHV0OlxyXG5cdFx0XHRcdFx0XHQndG9wJyBvciAnYm90dG9tJyBhbGlnbnMgZGVwZW5kaW5nIG9uIGxhbmd1YWdlIGRpcmVjdGlvbixcclxuXHRcdFx0XHRcdFx0J3RvcExlZnQnLCAndG9wUmlnaHQnLCAnYm90dG9tTGVmdCcsICdib3R0b21SaWdodCcuXHJcblx0XHRcdEBwcm9wZXJ0eSBbZml4ZWRXZWVrcz1mYWxzZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGFsd2F5cyBzaG93IDYgd2Vla3MsIDxjb2RlPmZhbHNlPC9jb2RlPiB0byBvbmx5IHNob3cgYXMgbWFueSBhcyBhcmUgbmVlZGVkLlxyXG5cdFx0XHRAcHJvcGVydHkgW2ZpcnN0RGF5PW51bGxdIHtudW1iZXJ9IEZpcnN0IGRheSBvZiB0aGUgd2VlaywgMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLiwgPGNvZGU+bnVsbDwvY29kZT4gZm9yIDxjb2RlPmNhbGVuZGFyPC9jb2RlPiBkZWZhdWx0LlxyXG5cdFx0XHRAcHJvcGVydHkgW2NhbGN1bGF0ZVdlZWs9bnVsbF0ge0NhbGVuZGFyc1BpY2tlckNhbGN1bGF0ZVdlZWt9IENhbGN1bGF0ZSB3ZWVrIG9mIHRoZSB5ZWFyIGZyb20gYSBkYXRlLCA8Y29kZT5udWxsPC9jb2RlPiBmb3IgPGNvZGU+Y2FsZW5kYXI8L2NvZGU+IGRlZmF1bHQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhzVG9TaG93PTFdIHtudW1iZXJ8bnVtYmVyW119IEhvdyBtYW55IG1vbnRocyB0byBzaG93LCBjb2xzIG9yIFtyb3dzLCBjb2xzXS5cclxuXHRcdFx0QHByb3BlcnR5IFttb250aHNPZmZzZXQ9MF0ge251bWJlcn0gSG93IG1hbnkgbW9udGhzIHRvIG9mZnNldCB0aGUgcHJpbWFyeSBtb250aCBieTtcclxuXHRcdFx0XHRcdFx0bWF5IGJlIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgZGF0ZSBhbmQgcmV0dXJucyB0aGUgb2Zmc2V0LlxyXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoc1RvU3RlcD0xXSB7bnVtYmVyfSBIb3cgbWFueSBtb250aHMgdG8gbW92ZSB3aGVuIHByZXYvbmV4dCBjbGlja2VkLlxyXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoc1RvSnVtcD0xMl0ge251bWJlcn0gSG93IG1hbnkgbW9udGhzIHRvIG1vdmUgd2hlbiBsYXJnZSBwcmV2L25leHQgY2xpY2tlZC5cclxuXHRcdFx0QHByb3BlcnR5IFt1c2VNb3VzZVdoZWVsPXRydWVdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byB1c2UgbW91c2V3aGVlbCBpZiBhdmFpbGFibGUsIDxjb2RlPmZhbHNlPC9jb2RlPiB0byBuZXZlciB1c2UgaXQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbY2hhbmdlTW9udGg9dHJ1ZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGNoYW5nZSBtb250aC95ZWFyIHZpYSBkcm9wLWRvd24sIDxjb2RlPmZhbHNlPC9jb2RlPiBmb3IgbmF2aWdhdGlvbiBvbmx5LlxyXG5cdFx0XHRAcHJvcGVydHkgW3llYXJSYW5nZT0nYy0xMDpjKzEwJ10ge3N0cmluZ30gUmFuZ2Ugb2YgeWVhcnMgdG8gc2hvdyBpbiBkcm9wLWRvd246ICdhbnknIGZvciBkaXJlY3QgdGV4dCBlbnRyeVxyXG5cdFx0XHRcdFx0XHRvciAnc3RhcnQ6ZW5kJywgd2hlcmUgc3RhcnQvZW5kIGFyZSAnKy1ubicgZm9yIHJlbGF0aXZlIHRvIHRvZGF5XHJcblx0XHRcdFx0XHRcdG9yICdjKy1ubicgZm9yIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZVxyXG5cdFx0XHRcdFx0XHRvciAnbm5ubicgZm9yIGFuIGFic29sdXRlIHllYXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBbc2hvd090aGVyTW9udGhzPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gc2hvdyBkYXRlcyBmcm9tIG90aGVyIG1vbnRocywgPGNvZGU+ZmFsc2U8L2NvZGU+IHRvIG5vdCBzaG93IHRoZW0uXHJcblx0XHRcdEBwcm9wZXJ0eSBbc2VsZWN0T3RoZXJNb250aHM9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBhbGxvdyBzZWxlY3Rpb24gb2YgZGF0ZXMgZnJvbSBvdGhlciBtb250aHMgdG9vLlxyXG5cdFx0XHRAcHJvcGVydHkgW2RlZmF1bHREYXRlPW51bGxdIHtzdHJpbmd8bnVtYmVyfENEYXRlfSBEYXRlIHRvIHNob3cgaWYgbm8gb3RoZXIgc2VsZWN0ZWQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbc2VsZWN0RGVmYXVsdERhdGU9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBwcmUtc2VsZWN0IHRoZSBkZWZhdWx0IGRhdGUgaWYgbm8gb3RoZXIgaXMgY2hvc2VuLlxyXG5cdFx0XHRAcHJvcGVydHkgW21pbkRhdGU9bnVsbF0ge3N0cmluZ3xudW1iZXJ8Q0RhdGV9IFRoZSBtaW5pbXVtIHNlbGVjdGFibGUgZGF0ZS5cclxuXHRcdFx0QHByb3BlcnR5IFttYXhEYXRlPW51bGxdIHtzdHJpbmd8bnVtYmVyfENEYXRlfSBUaGUgbWF4aW11bSBzZWxlY3RhYmxlIGRhdGUuXHJcblx0XHRcdEBwcm9wZXJ0eSBbZGF0ZUZvcm1hdD0nbW0vZGQveXl5eSddIHtzdHJpbmd9IEZvcm1hdCBmb3IgZGF0ZXMuXHJcblx0XHRcdEBwcm9wZXJ0eSBbYXV0b1NpemU9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBzaXplIHRoZSBpbnB1dCBmaWVsZCBhY2NvcmRpbmcgdG8gdGhlIGRhdGUgZm9ybWF0LlxyXG5cdFx0XHRAcHJvcGVydHkgW3JhbmdlU2VsZWN0PWZhbHNlXSB7Ym9vbGVhbn0gQWxsb3dzIGZvciBzZWxlY3RpbmcgYSBkYXRlIHJhbmdlIG9uIG9uZSBkYXRlIHBpY2tlci5cclxuXHRcdFx0QHByb3BlcnR5IFtyYW5nZVNlcGFyYXRvcj0nIC0gJ10ge3N0cmluZ30gVGV4dCBiZXR3ZWVuIHR3byBkYXRlcyBpbiBhIHJhbmdlLlxyXG5cdFx0XHRAcHJvcGVydHkgW211bHRpU2VsZWN0PTBdIHtudW1iZXJ9IE1heGltdW0gbnVtYmVyIG9mIHNlbGVjdGFibGUgZGF0ZXMsIHplcm8gZm9yIHNpbmdsZSBzZWxlY3QuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbXVsdGlTZXBhcmF0b3I9JywnXSB7c3RyaW5nfSBUZXh0IGJldHdlZW4gbXVsdGlwbGUgZGF0ZXMuXHJcblx0XHRcdEBwcm9wZXJ0eSBbb25EYXRlPW51bGxdIHtDYWxlbmRhcnNQaWNrZXJPbkRhdGV9IENhbGxiYWNrIGFzIGEgZGF0ZSBpcyBhZGRlZCB0byB0aGUgZGF0ZXBpY2tlci5cclxuXHRcdFx0QHByb3BlcnR5IFtvblNob3c9bnVsbF0ge0NhbGVuZGFyc1BpY2tlck9uU2hvd30gQ2FsbGJhY2sganVzdCBiZWZvcmUgYSBkYXRlcGlja2VyIGlzIHNob3duLlxyXG5cdFx0XHRAcHJvcGVydHkgW29uQ2hhbmdlTW9udGhZZWFyPW51bGxdIHtDYWxlbmRhcnNQaWNrZXJPbkNoYW5nZU1vbnRoWWVhcn0gQ2FsbGJhY2sgd2hlbiBhIG5ldyBtb250aC95ZWFyIGlzIHNlbGVjdGVkLlxyXG5cdFx0XHRAcHJvcGVydHkgW29uU2VsZWN0PW51bGxdIHtDYWxlbmRhcnNQaWNrZXJPblNlbGVjdH0gQ2FsbGJhY2sgd2hlbiBhIGRhdGUgaXMgc2VsZWN0ZWQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbb25DbG9zZT1udWxsXSB7Q2FsZW5kYXJzUGlja2VyT25DbG9zZX0gQ2FsbGJhY2sgd2hlbiBhIGRhdGVwaWNrZXIgaXMgY2xvc2VkLlxyXG5cdFx0XHRAcHJvcGVydHkgW2FsdEZpZWxkPW51bGxdIHtzdHJpbmd8RWxlbWVudHxqUXVlcnl9IEFsdGVybmF0ZSBmaWVsZCB0byB1cGRhdGUgaW4gc3luY2ggd2l0aCB0aGUgZGF0ZXBpY2tlci5cclxuXHRcdFx0QHByb3BlcnR5IFthbHRGb3JtYXQ9bnVsbF0ge3N0cmluZ30gRGF0ZSBmb3JtYXQgZm9yIGFsdGVybmF0ZSBmaWVsZCwgZGVmYXVsdHMgdG8gPGNvZGU+ZGF0ZUZvcm1hdDwvY29kZT4uXHJcblx0XHRcdEBwcm9wZXJ0eSBbY29uc3RyYWluSW5wdXQ9dHJ1ZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGNvbnN0cmFpbiB0eXBlZCBpbnB1dCB0byA8Y29kZT5kYXRlRm9ybWF0PC9jb2RlPiBhbGxvd2VkIGNoYXJhY3RlcnMuXHJcblx0XHRcdEBwcm9wZXJ0eSBbY29tbWFuZHNBc0RhdGVGb3JtYXQ9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBhcHBseVxyXG5cdFx0XHRcdFx0XHQ8Y29kZT48YSBocmVmPVwiI2Zvcm1hdERhdGVcIj5mb3JtYXREYXRlPC9hPjwvY29kZT4gdG8gdGhlIGNvbW1hbmQgdGV4dHMuXHJcblx0XHRcdEBwcm9wZXJ0eSBbY29tbWFuZHM9dGhpcy5jb21tYW5kc10ge29iamVjdH0gQ29tbWFuZCBhY3Rpb25zIHRoYXQgbWF5IGJlIGFkZGVkIHRvIGEgbGF5b3V0IGJ5IG5hbWUuICovXHJcblx0XHRkZWZhdWx0T3B0aW9uczoge1xyXG5cdFx0XHRjYWxlbmRhcjogJC5jYWxlbmRhcnMuaW5zdGFuY2UoKSxcclxuXHRcdFx0cGlja2VyQ2xhc3M6ICcnLFxyXG5cdFx0XHRzaG93T25Gb2N1czogdHJ1ZSxcclxuXHRcdFx0c2hvd1RyaWdnZXI6IG51bGwsXHJcblx0XHRcdHNob3dBbmltOiAnc2hvdycsXHJcblx0XHRcdHNob3dPcHRpb25zOiB7fSxcclxuXHRcdFx0c2hvd1NwZWVkOiAnbm9ybWFsJyxcclxuXHRcdFx0cG9wdXBDb250YWluZXI6IG51bGwsXHJcblx0XHRcdGFsaWdubWVudDogJ2JvdHRvbScsXHJcblx0XHRcdGZpeGVkV2Vla3M6IGZhbHNlLFxyXG5cdFx0XHRmaXJzdERheTogbnVsbCxcclxuXHRcdFx0Y2FsY3VsYXRlV2VlazogbnVsbCxcclxuXHRcdFx0bW9udGhzVG9TaG93OiAxLFxyXG5cdFx0XHRtb250aHNPZmZzZXQ6IDAsXHJcblx0XHRcdG1vbnRoc1RvU3RlcDogMSxcclxuXHRcdFx0bW9udGhzVG9KdW1wOiAxMixcclxuXHRcdFx0dXNlTW91c2VXaGVlbDogdHJ1ZSxcclxuXHRcdFx0Y2hhbmdlTW9udGg6IHRydWUsXHJcblx0XHRcdHllYXJSYW5nZTogJ2MtMTA6YysxMCcsXHJcblx0XHRcdHNob3dPdGhlck1vbnRoczogZmFsc2UsXHJcblx0XHRcdHNlbGVjdE90aGVyTW9udGhzOiBmYWxzZSxcclxuXHRcdFx0ZGVmYXVsdERhdGU6IG51bGwsXHJcblx0XHRcdHNlbGVjdERlZmF1bHREYXRlOiBmYWxzZSxcclxuXHRcdFx0bWluRGF0ZTogbnVsbCxcclxuXHRcdFx0bWF4RGF0ZTogbnVsbCxcclxuXHRcdFx0ZGF0ZUZvcm1hdDogbnVsbCxcclxuXHRcdFx0YXV0b1NpemU6IGZhbHNlLFxyXG5cdFx0XHRyYW5nZVNlbGVjdDogZmFsc2UsXHJcblx0XHRcdHJhbmdlU2VwYXJhdG9yOiAnIC0gJyxcclxuXHRcdFx0bXVsdGlTZWxlY3Q6IDAsXHJcblx0XHRcdG11bHRpU2VwYXJhdG9yOiAnLCcsXHJcblx0XHRcdG9uRGF0ZTogbnVsbCxcclxuXHRcdFx0b25TaG93OiBudWxsLFxyXG5cdFx0XHRvbkNoYW5nZU1vbnRoWWVhcjogbnVsbCxcclxuXHRcdFx0b25TZWxlY3Q6IG51bGwsXHJcblx0XHRcdG9uQ2xvc2U6IG51bGwsXHJcblx0XHRcdGFsdEZpZWxkOiBudWxsLFxyXG5cdFx0XHRhbHRGb3JtYXQ6IG51bGwsXHJcblx0XHRcdGNvbnN0cmFpbklucHV0OiB0cnVlLFxyXG5cdFx0XHRjb21tYW5kc0FzRGF0ZUZvcm1hdDogZmFsc2UsXHJcblx0XHRcdGNvbW1hbmRzOiB7fSAvLyB0aGlzLmNvbW1hbmRzXHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBMb2NhbGlzYXRpb25zIGZvciB0aGUgcGx1Z2luLlxyXG5cdFx0XHRFbnRyaWVzIGFyZSBvYmplY3RzIGluZGV4ZWQgYnkgdGhlIGxhbmd1YWdlIGNvZGUgKCcnIGJlaW5nIHRoZSBkZWZhdWx0IFVTL0VuZ2xpc2gpLlxyXG5cdFx0XHRFYWNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcm9wZXJ0eSBbcmVuZGVyZXI9dGhpcy5kZWZhdWx0UmVuZGVyZXJdIHtzdHJpbmd9IFRoZSByZW5kZXJpbmcgdGVtcGxhdGVzLlxyXG5cdFx0XHRAcHJvcGVydHkgW3ByZXZUZXh0PScmbHQ7UHJldiddIHtzdHJpbmd9IFRleHQgZm9yIHRoZSBwcmV2aW91cyBtb250aCBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW3ByZXZTdGF0dXM9J1Nob3cgdGhlIHByZXZpb3VzIG1vbnRoJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSBwcmV2aW91cyBtb250aCBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW3ByZXZKdW1wVGV4dD0nJmx0OyZsdDsnXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgcHJldmlvdXMgeWVhciBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW3ByZXZKdW1wU3RhdHVzPSdTaG93IHRoZSBwcmV2aW91cyB5ZWFyJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSBwcmV2aW91cyB5ZWFyIGNvbW1hbmQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbmV4dFRleHQ9J05leHQmZ3Q7J10ge3N0cmluZ30gVGV4dCBmb3IgdGhlIG5leHQgbW9udGggY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFtuZXh0U3RhdHVzPSdTaG93IHRoZSBuZXh0IG1vbnRoJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSBuZXh0IG1vbnRoIGNvbW1hbmQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbmV4dEp1bXBUZXh0PScmZ3Q7Jmd0OyddIHtzdHJpbmd9IFRleHQgZm9yIHRoZSBuZXh0IHllYXIgY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFtuZXh0SnVtcFN0YXR1cz0nU2hvdyB0aGUgbmV4dCB5ZWFyJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSBuZXh0IHllYXIgY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFtjdXJyZW50VGV4dD0nQ3VycmVudCddIHtzdHJpbmd9IFRleHQgZm9yIHRoZSBjdXJyZW50IG1vbnRoIGNvbW1hbmQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbY3VycmVudFN0YXR1cz0nU2hvdyB0aGUgY3VycmVudCBtb250aCddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgY3VycmVudCBtb250aCBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW3RvZGF5VGV4dD0nVG9kYXknXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgdG9kYXkncyBtb250aCBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW3RvZGF5U3RhdHVzPSdTaG93IHRvZGF5XFwncyBtb250aCddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgdG9kYXkncyBtb250aCBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW2NsZWFyVGV4dD0nQ2xlYXInXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgY2xlYXIgY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFtjbGVhclN0YXR1cz0nQ2xlYXIgYWxsIHRoZSBkYXRlcyddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgY2xlYXIgY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFtjbG9zZVRleHQ9J0Nsb3NlJ10ge3N0cmluZ30gVGV4dCBmb3IgdGhlIGNsb3NlIGNvbW1hbmQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbY2xvc2VTdGF0dXM9J0Nsb3NlIHRoZSBkYXRlcGlja2VyJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSBjbG9zZSBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW3llYXJTdGF0dXM9J0NoYW5nZSB0aGUgeWVhciddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB5ZWFyIHNlbGVjdGlvbi5cclxuXHRcdFx0QHByb3BlcnR5IFtlYXJsaWVyVGV4dD0nJiMxNjA7JiMxNjA74payJ10ge3N0cmluZ30gVGV4dCBmb3IgZWFybGllciB5ZWFycy5cclxuXHRcdFx0QHByb3BlcnR5IFtsYXRlclRleHQ9JyYjMTYwOyYjMTYwO+KWvCddIHtzdHJpbmd9IFRleHQgZm9yIGxhdGVyIHllYXJzLlxyXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoU3RhdHVzPSdDaGFuZ2UgdGhlIG1vbnRoJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIG1vbnRoIHNlbGVjdGlvbi5cclxuXHRcdFx0QHByb3BlcnR5IFt3ZWVrVGV4dD0nV2snXSB7c3RyaW5nfSBUZXh0IGZvciB3ZWVrIG9mIHRoZSB5ZWFyIGNvbHVtbiBoZWFkZXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBbd2Vla1N0YXR1cz0nV2VlayBvZiB0aGUgeWVhciddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB3ZWVrIG9mIHRoZSB5ZWFyIGNvbHVtbiBoZWFkZXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBbZGF5U3RhdHVzPSdTZWxlY3QgREQsJiMxNjA7TSYjMTYwO2QsJiMxNjA7eXl5eSddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciBzZWxlY3RhYmxlIGRheXMuXHJcblx0XHRcdEBwcm9wZXJ0eSBbZGVmYXVsdFN0YXR1cz0nU2VsZWN0IGEgZGF0ZSddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IHNob3duIGJ5IGRlZmF1bHQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbaXNSVEw9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBsYW5ndWFnZSBpcyByaWdodC10by1sZWZ0LiAqL1xyXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7IC8vIEF2YWlsYWJsZSByZWdpb25hbCBzZXR0aW5ncywgaW5kZXhlZCBieSBsYW5ndWFnZS9jb3VudHJ5IGNvZGVcclxuXHRcdFx0Jyc6IHsgLy8gRGVmYXVsdCByZWdpb25hbCBzZXR0aW5ncyAtIEVuZ2xpc2gvVVNcclxuXHRcdFx0XHRyZW5kZXJlcjoge30sIC8vIHRoaXMuZGVmYXVsdFJlbmRlcmVyXHJcblx0XHRcdFx0cHJldlRleHQ6ICcmbHQ7UHJldicsXHJcblx0XHRcdFx0cHJldlN0YXR1czogJ1Nob3cgdGhlIHByZXZpb3VzIG1vbnRoJyxcclxuXHRcdFx0XHRwcmV2SnVtcFRleHQ6ICcmbHQ7Jmx0OycsXHJcblx0XHRcdFx0cHJldkp1bXBTdGF0dXM6ICdTaG93IHRoZSBwcmV2aW91cyB5ZWFyJyxcclxuXHRcdFx0XHRuZXh0VGV4dDogJ05leHQmZ3Q7JyxcclxuXHRcdFx0XHRuZXh0U3RhdHVzOiAnU2hvdyB0aGUgbmV4dCBtb250aCcsXHJcblx0XHRcdFx0bmV4dEp1bXBUZXh0OiAnJmd0OyZndDsnLFxyXG5cdFx0XHRcdG5leHRKdW1wU3RhdHVzOiAnU2hvdyB0aGUgbmV4dCB5ZWFyJyxcclxuXHRcdFx0XHRjdXJyZW50VGV4dDogJ0N1cnJlbnQnLFxyXG5cdFx0XHRcdGN1cnJlbnRTdGF0dXM6ICdTaG93IHRoZSBjdXJyZW50IG1vbnRoJyxcclxuXHRcdFx0XHR0b2RheVRleHQ6ICdUb2RheScsXHJcblx0XHRcdFx0dG9kYXlTdGF0dXM6ICdTaG93IHRvZGF5XFwncyBtb250aCcsXHJcblx0XHRcdFx0Y2xlYXJUZXh0OiAnQ2xlYXInLFxyXG5cdFx0XHRcdGNsZWFyU3RhdHVzOiAnQ2xlYXIgYWxsIHRoZSBkYXRlcycsXHJcblx0XHRcdFx0Y2xvc2VUZXh0OiAnQ2xvc2UnLFxyXG5cdFx0XHRcdGNsb3NlU3RhdHVzOiAnQ2xvc2UgdGhlIGRhdGVwaWNrZXInLFxyXG5cdFx0XHRcdHllYXJTdGF0dXM6ICdDaGFuZ2UgdGhlIHllYXInLFxyXG5cdFx0XHRcdGVhcmxpZXJUZXh0OiAnJiMxNjA7JiMxNjA74payJyxcclxuXHRcdFx0XHRsYXRlclRleHQ6ICcmIzE2MDsmIzE2MDvilrwnLFxyXG5cdFx0XHRcdG1vbnRoU3RhdHVzOiAnQ2hhbmdlIHRoZSBtb250aCcsXHJcblx0XHRcdFx0d2Vla1RleHQ6ICdXaycsXHJcblx0XHRcdFx0d2Vla1N0YXR1czogJ1dlZWsgb2YgdGhlIHllYXInLFxyXG5cdFx0XHRcdGRheVN0YXR1czogJ1NlbGVjdCBERCwgTSBkLCB5eXl5JyxcclxuXHRcdFx0XHRkZWZhdWx0U3RhdHVzOiAnU2VsZWN0IGEgZGF0ZScsXHJcblx0XHRcdFx0aXNSVEw6IGZhbHNlXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdC8qKiBOYW1lcyBvZiBnZXR0ZXIgbWV0aG9kcyAtIHRob3NlIHRoYXQgY2FuJ3QgYmUgY2hhaW5lZC5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlciAqL1xyXG5cdFx0X2dldHRlcnM6IFsnZ2V0RGF0ZScsICdpc0Rpc2FibGVkJywgJ2lzU2VsZWN0YWJsZScsICdyZXRyaWV2ZURhdGUnXSxcclxuXHJcblx0XHRfZGlzYWJsZWQ6IFtdLFxyXG5cdFx0XHJcblx0XHRfcG9wdXBDbGFzczogJ2NhbGVuZGFycy1wb3B1cCcsIC8vIE1hcmtlciBmb3IgcG9wdXAgZGl2aXNpb25cclxuXHRcdF90cmlnZ2VyQ2xhc3M6ICdjYWxlbmRhcnMtdHJpZ2dlcicsIC8vIE1hcmtlciBmb3IgdHJpZ2dlciBlbGVtZW50XHJcblx0XHRfZGlzYWJsZUNsYXNzOiAnY2FsZW5kYXJzLWRpc2FibGUnLCAvLyBNYXJrZXIgZm9yIGRpc2FibGVkIGVsZW1lbnRcclxuXHRcdF9tb250aFllYXJDbGFzczogJ2NhbGVuZGFycy1tb250aC15ZWFyJywgLy8gTWFya2VyIGZvciBtb250aC95ZWFyIGlucHV0c1xyXG5cdFx0X2N1ck1vbnRoQ2xhc3M6ICdjYWxlbmRhcnMtbW9udGgtJywgLy8gTWFya2VyIGZvciBjdXJyZW50IG1vbnRoL3llYXJcclxuXHRcdF9hbnlZZWFyQ2xhc3M6ICdjYWxlbmRhcnMtYW55LXllYXInLCAvLyBNYXJrZXIgZm9yIHllYXIgZGlyZWN0IGlucHV0XHJcblx0XHRfY3VyRG9XQ2xhc3M6ICdjYWxlbmRhcnMtZG93LScsIC8vIE1hcmtlciBmb3IgZGF5IG9mIHdlZWtcclxuXHJcblx0XHRfaW5pdDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHRoaXMuZGVmYXVsdE9wdGlvbnMuY29tbWFuZHMgPSB0aGlzLmNvbW1hbmRzO1xyXG5cdFx0XHR0aGlzLnJlZ2lvbmFsT3B0aW9uc1snJ10ucmVuZGVyZXIgPSB0aGlzLmRlZmF1bHRSZW5kZXJlcjtcclxuXHRcdFx0dGhpcy5fc3VwZXIoKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0X2luc3RTZXR0aW5nczogZnVuY3Rpb24oZWxlbSwgb3B0aW9ucykge1xyXG5cdFx0XHRyZXR1cm4ge3NlbGVjdGVkRGF0ZXM6IFtdLCBkcmF3RGF0ZTogbnVsbCwgcGlja2luZ1JhbmdlOiBmYWxzZSxcclxuXHRcdFx0XHRpbmxpbmU6ICgkLmluQXJyYXkoZWxlbVswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBbJ2RpdicsICdzcGFuJ10pID4gLTEpLFxyXG5cdFx0XHRcdGdldDogZnVuY3Rpb24obmFtZSkgeyAvLyBHZXQgYSBzZXR0aW5nIHZhbHVlLCBjb21wdXRpbmcgaWYgbmVjZXNzYXJ5XHJcblx0XHRcdFx0XHRpZiAoJC5pbkFycmF5KG5hbWUsIFsnZGVmYXVsdERhdGUnLCAnbWluRGF0ZScsICdtYXhEYXRlJ10pID4gLTEpIHsgLy8gRGVjb2RlIGRhdGUgc2V0dGluZ3NcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5jYWxlbmRhci5kZXRlcm1pbmVEYXRlKHRoaXMub3B0aW9uc1tuYW1lXSwgbnVsbCxcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkRGF0ZXNbMF0sIHRoaXMuZ2V0KCdkYXRlRm9ybWF0JyksIHRoaXMuZ2V0Q29uZmlnKCkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKG5hbWUgPT09ICdkYXRlRm9ybWF0Jykge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmRhdGVGb3JtYXQgfHwgdGhpcy5vcHRpb25zLmNhbGVuZGFyLmxvY2FsLmRhdGVGb3JtYXQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zW25hbWVdO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0Y3VyTWluRGF0ZTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gKHRoaXMucGlja2luZ1JhbmdlID8gdGhpcy5zZWxlY3RlZERhdGVzWzBdIDogdGhpcy5nZXQoJ21pbkRhdGUnKSk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRnZXRDb25maWc6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHtkYXlOYW1lc1Nob3J0OiB0aGlzLm9wdGlvbnMuZGF5TmFtZXNTaG9ydCwgZGF5TmFtZXM6IHRoaXMub3B0aW9ucy5kYXlOYW1lcyxcclxuXHRcdFx0XHRcdFx0bW9udGhOYW1lc1Nob3J0OiB0aGlzLm9wdGlvbnMubW9udGhOYW1lc1Nob3J0LCBtb250aE5hbWVzOiB0aGlzLm9wdGlvbnMubW9udGhOYW1lcyxcclxuXHRcdFx0XHRcdFx0Y2FsY3VsYXRlV2VlazogdGhpcy5vcHRpb25zLmNhbGN1bGF0ZVdlZWssIHNob3J0WWVhckN1dG9mZjogdGhpcy5vcHRpb25zLnNob3J0WWVhckN1dG9mZn07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cdFx0fSxcclxuXHJcblx0XHRfcG9zdEF0dGFjaDogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xyXG5cdFx0XHRpZiAoaW5zdC5pbmxpbmUpIHtcclxuXHRcdFx0XHRpbnN0LmRyYXdEYXRlID0gcGx1Z2luLl9jaGVja01pbk1heCgoaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8XHJcblx0XHRcdFx0XHRpbnN0LmdldCgnZGVmYXVsdERhdGUnKSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKSkubmV3RGF0ZSgpLCBpbnN0KTtcclxuXHRcdFx0XHRpbnN0LnByZXZEYXRlID0gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCk7XHJcblx0XHRcdFx0dGhpcy5fdXBkYXRlKGVsZW1bMF0pO1xyXG5cdFx0XHRcdGlmICgkLmZuLm1vdXNld2hlZWwpIHtcclxuXHRcdFx0XHRcdGVsZW0ubW91c2V3aGVlbCh0aGlzLl9kb01vdXNlV2hlZWwpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHR0aGlzLl9hdHRhY2htZW50cyhlbGVtLCBpbnN0KTtcclxuXHRcdFx0XHRlbGVtLm9uKCdrZXlkb3duLicgKyBpbnN0Lm5hbWUsIHRoaXMuX2tleURvd24pLm9uKCdrZXlwcmVzcy4nICsgaW5zdC5uYW1lLCB0aGlzLl9rZXlQcmVzcykuXHJcblx0XHRcdFx0XHRvbigna2V5dXAuJyArIGluc3QubmFtZSwgdGhpcy5fa2V5VXApO1xyXG5cdFx0XHRcdGlmIChlbGVtLmF0dHIoJ2Rpc2FibGVkJykpIHtcclxuXHRcdFx0XHRcdHRoaXMuZGlzYWJsZShlbGVtWzBdKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0X29wdGlvbnNDaGFuZ2VkOiBmdW5jdGlvbihlbGVtLCBpbnN0LCBvcHRpb25zKSB7XHJcblx0XHRcdGlmIChvcHRpb25zLmNhbGVuZGFyICYmIG9wdGlvbnMuY2FsZW5kYXIgIT09IGluc3Qub3B0aW9ucy5jYWxlbmRhcikge1xyXG5cdFx0XHRcdHZhciBkaXNjYXJkRGF0ZSA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuXHRcdFx0XHRcdHJldHVybiAodHlwZW9mIGluc3Qub3B0aW9uc1tuYW1lXSA9PT0gJ29iamVjdCcgPyBudWxsIDogaW5zdC5vcHRpb25zW25hbWVdKTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdG9wdGlvbnMgPSAkLmV4dGVuZCh7ZGVmYXVsdERhdGU6IGRpc2NhcmREYXRlKCdkZWZhdWx0RGF0ZScpLFxyXG5cdFx0XHRcdFx0bWluRGF0ZTogZGlzY2FyZERhdGUoJ21pbkRhdGUnKSwgbWF4RGF0ZTogZGlzY2FyZERhdGUoJ21heERhdGUnKX0sIG9wdGlvbnMpO1xyXG5cdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IFtdO1xyXG5cdFx0XHRcdGluc3QuZHJhd0RhdGUgPSBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBkYXRlcyA9IGluc3Quc2VsZWN0ZWREYXRlcztcclxuXHRcdFx0JC5leHRlbmQoaW5zdC5vcHRpb25zLCBvcHRpb25zKTtcclxuXHRcdFx0dGhpcy5zZXREYXRlKGVsZW1bMF0sIGRhdGVzLCBudWxsLCBmYWxzZSwgdHJ1ZSk7XHJcblx0XHRcdGluc3QucGlja2luZ1JhbmdlID0gZmFsc2U7XHJcblx0XHRcdHZhciBjYWxlbmRhciA9IGluc3Qub3B0aW9ucy5jYWxlbmRhcjtcclxuXHRcdFx0dmFyIGRlZmF1bHREYXRlID0gaW5zdC5nZXQoJ2RlZmF1bHREYXRlJyk7XHJcblx0XHRcdGluc3QuZHJhd0RhdGUgPSB0aGlzLl9jaGVja01pbk1heCgoZGVmYXVsdERhdGUgPyBkZWZhdWx0RGF0ZSA6IGluc3QuZHJhd0RhdGUpIHx8XHJcblx0XHRcdFx0ZGVmYXVsdERhdGUgfHwgY2FsZW5kYXIudG9kYXkoKSwgaW5zdCkubmV3RGF0ZSgpO1xyXG5cdFx0XHRpZiAoIWluc3QuaW5saW5lKSB7XHJcblx0XHRcdFx0dGhpcy5fYXR0YWNobWVudHMoZWxlbSwgaW5zdCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGluc3QuaW5saW5lIHx8IGluc3QuZGl2KSB7XHJcblx0XHRcdFx0dGhpcy5fdXBkYXRlKGVsZW1bMF0pO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBBdHRhY2ggZXZlbnRzIGFuZCB0cmlnZ2VyLCBpZiBuZWNlc3NhcnkuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGVsZW0ge2pRdWVyeX0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy4gKi9cclxuXHRcdF9hdHRhY2htZW50czogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xyXG5cdFx0XHRlbGVtLm9mZignZm9jdXMuJyArIGluc3QubmFtZSk7XHJcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMuc2hvd09uRm9jdXMpIHtcclxuXHRcdFx0XHRlbGVtLm9uKCdmb2N1cy4nICsgaW5zdC5uYW1lLCB0aGlzLnNob3cpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChpbnN0LnRyaWdnZXIpIHtcclxuXHRcdFx0XHRpbnN0LnRyaWdnZXIucmVtb3ZlKCk7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIHRyaWdnZXIgPSBpbnN0Lm9wdGlvbnMuc2hvd1RyaWdnZXI7XHJcblx0XHRcdGluc3QudHJpZ2dlciA9ICghdHJpZ2dlciA/ICQoW10pIDpcclxuXHRcdFx0XHQkKHRyaWdnZXIpLmNsb25lKCkucmVtb3ZlQXR0cignaWQnKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpXHJcblx0XHRcdFx0XHRbaW5zdC5vcHRpb25zLmlzUlRMID8gJ2luc2VydEJlZm9yZScgOiAnaW5zZXJ0QWZ0ZXInXShlbGVtKS5cclxuXHRcdFx0XHRcdGNsaWNrKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIXBsdWdpbi5pc0Rpc2FibGVkKGVsZW1bMF0pKSB7XHJcblx0XHRcdFx0XHRcdFx0cGx1Z2luW3BsdWdpbi5jdXJJbnN0ID09PSBpbnN0ID8gJ2hpZGUnIDogJ3Nob3cnXShlbGVtWzBdKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSkpO1xyXG5cdFx0XHR0aGlzLl9hdXRvU2l6ZShlbGVtLCBpbnN0KTtcclxuXHRcdFx0dmFyIGRhdGVzID0gdGhpcy5fZXh0cmFjdERhdGVzKGluc3QsIGVsZW0udmFsKCkpO1xyXG5cdFx0XHRpZiAoZGF0ZXMpIHtcclxuXHRcdFx0XHR0aGlzLnNldERhdGUoZWxlbVswXSwgZGF0ZXMsIG51bGwsIHRydWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBkZWZhdWx0RGF0ZSA9IGluc3QuZ2V0KCdkZWZhdWx0RGF0ZScpO1xyXG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLnNlbGVjdERlZmF1bHREYXRlICYmIGRlZmF1bHREYXRlICYmIGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0XHR0aGlzLnNldERhdGUoZWxlbVswXSwgKGRlZmF1bHREYXRlIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpKS5uZXdEYXRlKCkpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBBcHBseSB0aGUgbWF4aW11bSBsZW5ndGggZm9yIHRoZSBkYXRlIGZvcm1hdC5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7alF1ZXJ5fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLiAqL1xyXG5cdFx0X2F1dG9TaXplOiBmdW5jdGlvbihlbGVtLCBpbnN0KSB7XHJcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMuYXV0b1NpemUgJiYgIWluc3QuaW5saW5lKSB7XHJcblx0XHRcdFx0dmFyIGNhbGVuZGFyID0gaW5zdC5vcHRpb25zLmNhbGVuZGFyO1xyXG5cdFx0XHRcdHZhciBkYXRlID0gY2FsZW5kYXIubmV3RGF0ZSgyMDA5LCAxMCwgMjApOyAvLyBFbnN1cmUgZG91YmxlIGRpZ2l0c1xyXG5cdFx0XHRcdHZhciBkYXRlRm9ybWF0ID0gaW5zdC5nZXQoJ2RhdGVGb3JtYXQnKTtcclxuXHRcdFx0XHRpZiAoZGF0ZUZvcm1hdC5tYXRjaCgvW0RNXS8pKSB7XHJcblx0XHRcdFx0XHR2YXIgZmluZE1heCA9IGZ1bmN0aW9uKG5hbWVzKSB7XHJcblx0XHRcdFx0XHRcdHZhciBtYXggPSAwO1xyXG5cdFx0XHRcdFx0XHR2YXIgbWF4SSA9IDA7XHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAobmFtZXNbaV0ubGVuZ3RoID4gbWF4KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRtYXggPSBuYW1lc1tpXS5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdFx0XHRtYXhJID0gaTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuIG1heEk7XHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0ZGF0ZS5tb250aChmaW5kTWF4KGNhbGVuZGFyLmxvY2FsW2RhdGVGb3JtYXQubWF0Y2goL01NLykgPyAvLyBMb25nZXN0IG1vbnRoXHJcblx0XHRcdFx0XHRcdCdtb250aE5hbWVzJyA6ICdtb250aE5hbWVzU2hvcnQnXSkgKyAxKTtcclxuXHRcdFx0XHRcdGRhdGUuZGF5KGZpbmRNYXgoY2FsZW5kYXIubG9jYWxbZGF0ZUZvcm1hdC5tYXRjaCgvREQvKSA/IC8vIExvbmdlc3QgZGF5XHJcblx0XHRcdFx0XHRcdCdkYXlOYW1lcycgOiAnZGF5TmFtZXNTaG9ydCddKSArIDIwIC0gZGF0ZS5kYXlPZldlZWsoKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGluc3QuZWxlbS5hdHRyKCdzaXplJywgZGF0ZS5mb3JtYXREYXRlKGRhdGVGb3JtYXQpLmxlbmd0aCk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0X3ByZURlc3Ryb3k6IGZ1bmN0aW9uKGVsZW0sIGluc3QpIHtcclxuXHRcdFx0aWYgKGluc3QudHJpZ2dlcikge1xyXG5cdFx0XHRcdGluc3QudHJpZ2dlci5yZW1vdmUoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbGVtLmVtcHR5KCkub2ZmKCcuJyArIGluc3QubmFtZSk7XHJcblx0XHRcdGlmIChpbnN0LmlubGluZSAmJiAkLmZuLm1vdXNld2hlZWwpIHtcclxuXHRcdFx0XHRlbGVtLnVubW91c2V3aGVlbCgpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghaW5zdC5pbmxpbmUgJiYgaW5zdC5vcHRpb25zLmF1dG9TaXplKSB7XHJcblx0XHRcdFx0ZWxlbS5yZW1vdmVBdHRyKCdzaXplJyk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEFwcGx5IG11bHRpcGxlIGV2ZW50IGZ1bmN0aW9ucy5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZm5zIHtmdW5jdGlvbn0gVGhlIGZ1bmN0aW9ucyB0byBhcHBseS5cclxuXHRcdFx0QGV4YW1wbGUgb25TaG93OiBtdWx0aXBsZUV2ZW50cyhmbjEsIGZuMiwgLi4uKSAqL1xyXG5cdFx0bXVsdGlwbGVFdmVudHM6IGZ1bmN0aW9uKGZucykge1xyXG5cdFx0XHR2YXIgZnVuY3MgPSBhcmd1bWVudHM7XHJcblx0XHRcdHJldHVybiBmdW5jdGlvbihhcmdzKSB7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0ZnVuY3NbaV0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH07XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBFbmFibGUgdGhlIGNvbnRyb2wuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGFmZmVjdC5cclxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuZGF0ZXBpY2soJ2VuYWJsZScpICovXHJcblx0XHRlbmFibGU6IGZ1bmN0aW9uKGVsZW0pIHtcclxuXHRcdFx0ZWxlbSA9ICQoZWxlbSk7XHJcblx0XHRcdGlmICghZWxlbS5oYXNDbGFzcyh0aGlzLl9nZXRNYXJrZXIoKSkpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoaW5zdC5pbmxpbmUpIHtcclxuXHRcdFx0XHRlbGVtLmNoaWxkcmVuKCcuJyArIHRoaXMuX2Rpc2FibGVDbGFzcykucmVtb3ZlKCkuZW5kKCkuXHJcblx0XHRcdFx0XHRmaW5kKCdidXR0b24sc2VsZWN0JykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSkuZW5kKCkuXHJcblx0XHRcdFx0XHRmaW5kKCdhJykuYXR0cignaHJlZicsICdqYXZhc2NyaXB0OnZvaWQoMCknKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRlbGVtLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xyXG5cdFx0XHRcdGluc3QudHJpZ2dlci5maWx0ZXIoJ2J1dHRvbi4nICsgdGhpcy5fdHJpZ2dlckNsYXNzKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKS5lbmQoKS5cclxuXHRcdFx0XHRcdGZpbHRlcignaW1nLicgKyB0aGlzLl90cmlnZ2VyQ2xhc3MpLmNzcyh7b3BhY2l0eTogJzEuMCcsIGN1cnNvcjogJyd9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLl9kaXNhYmxlZCA9ICQubWFwKHRoaXMuX2Rpc2FibGVkLFxyXG5cdFx0XHRcdGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiAodmFsdWUgPT09IGVsZW1bMF0gPyBudWxsIDogdmFsdWUpOyB9KTsgLy8gRGVsZXRlIGVudHJ5XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEaXNhYmxlIHRoZSBjb250cm9sLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXHJcblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdkaXNhYmxlJykgKi9cclxuXHRcdGRpc2FibGU6IGZ1bmN0aW9uKGVsZW0pIHtcclxuXHRcdFx0ZWxlbSA9ICQoZWxlbSk7XHJcblx0XHRcdGlmICghZWxlbS5oYXNDbGFzcyh0aGlzLl9nZXRNYXJrZXIoKSkpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoaW5zdC5pbmxpbmUpIHtcclxuXHRcdFx0XHR2YXIgaW5saW5lID0gZWxlbS5jaGlsZHJlbignOmxhc3QnKTtcclxuXHRcdFx0XHR2YXIgb2Zmc2V0ID0gaW5saW5lLm9mZnNldCgpO1xyXG5cdFx0XHRcdHZhciByZWxPZmZzZXQgPSB7bGVmdDogMCwgdG9wOiAwfTtcclxuXHRcdFx0XHRpbmxpbmUucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRpZiAoJCh0aGlzKS5jc3MoJ3Bvc2l0aW9uJykgPT09ICdyZWxhdGl2ZScpIHtcclxuXHRcdFx0XHRcdFx0cmVsT2Zmc2V0ID0gJCh0aGlzKS5vZmZzZXQoKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHZhciB6SW5kZXggPSBlbGVtLmNzcygnekluZGV4Jyk7XHJcblx0XHRcdFx0ekluZGV4ID0gKHpJbmRleCA9PT0gJ2F1dG8nID8gMCA6IHBhcnNlSW50KHpJbmRleCwgMTApKSArIDE7XHJcblx0XHRcdFx0ZWxlbS5wcmVwZW5kKCc8ZGl2IGNsYXNzPVwiJyArIHRoaXMuX2Rpc2FibGVDbGFzcyArICdcIiBzdHlsZT1cIicgK1xyXG5cdFx0XHRcdFx0J3dpZHRoOiAnICsgaW5saW5lLm91dGVyV2lkdGgoKSArICdweDsgaGVpZ2h0OiAnICsgaW5saW5lLm91dGVySGVpZ2h0KCkgK1xyXG5cdFx0XHRcdFx0J3B4OyBsZWZ0OiAnICsgKG9mZnNldC5sZWZ0IC0gcmVsT2Zmc2V0LmxlZnQpICsgJ3B4OyB0b3A6ICcgK1xyXG5cdFx0XHRcdFx0KG9mZnNldC50b3AgLSByZWxPZmZzZXQudG9wKSArICdweDsgei1pbmRleDogJyArIHpJbmRleCArICdcIj48L2Rpdj4nKS5cclxuXHRcdFx0XHRcdGZpbmQoJ2J1dHRvbixzZWxlY3QnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpLmVuZCgpLlxyXG5cdFx0XHRcdFx0ZmluZCgnYScpLnJlbW92ZUF0dHIoJ2hyZWYnKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRlbGVtLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcblx0XHRcdFx0aW5zdC50cmlnZ2VyLmZpbHRlcignYnV0dG9uLicgKyB0aGlzLl90cmlnZ2VyQ2xhc3MpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSkuZW5kKCkuXHJcblx0XHRcdFx0XHRmaWx0ZXIoJ2ltZy4nICsgdGhpcy5fdHJpZ2dlckNsYXNzKS5jc3Moe29wYWNpdHk6ICcwLjUnLCBjdXJzb3I6ICdkZWZhdWx0J30pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuX2Rpc2FibGVkID0gJC5tYXAodGhpcy5fZGlzYWJsZWQsXHJcblx0XHRcdFx0ZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuICh2YWx1ZSA9PT0gZWxlbVswXSA/IG51bGwgOiB2YWx1ZSk7IH0pOyAvLyBEZWxldGUgZW50cnlcclxuXHRcdFx0dGhpcy5fZGlzYWJsZWQucHVzaChlbGVtWzBdKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIElzIHRoZSBmaXJzdCBmaWVsZCBpbiBhIGpRdWVyeSBjb2xsZWN0aW9uIGRpc2FibGVkIGFzIGEgZGF0ZXBpY2tlcj9cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgZGlzYWJsZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBlbmFibGVkLlxyXG5cdFx0XHRAZXhhbXBsZSBpZiAoJChzZWxlY3RvcikuZGF0ZXBpY2soJ2lzRGlzYWJsZWQnKSkgey4uLn0gKi9cclxuXHRcdGlzRGlzYWJsZWQ6IGZ1bmN0aW9uKGVsZW0pIHtcclxuXHRcdFx0cmV0dXJuIChlbGVtICYmICQuaW5BcnJheShlbGVtLCB0aGlzLl9kaXNhYmxlZCkgPiAtMSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBTaG93IGEgcG9wdXAgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RXZlbnR8RWxlbWVudH0gYSBmb2N1cyBldmVudCBvciB0aGUgY29udHJvbCB0byB1c2UuXHJcblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdzaG93JykgKi9cclxuXHRcdHNob3c6IGZ1bmN0aW9uKGVsZW0pIHtcclxuXHRcdFx0ZWxlbSA9ICQoZWxlbS50YXJnZXQgfHwgZWxlbSk7XHJcblx0XHRcdHZhciBpbnN0ID0gcGx1Z2luLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAocGx1Z2luLmN1ckluc3QgPT09IGluc3QpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHBsdWdpbi5jdXJJbnN0KSB7XHJcblx0XHRcdFx0cGx1Z2luLmhpZGUocGx1Z2luLmN1ckluc3QsIHRydWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XHJcblx0XHRcdFx0Ly8gUmV0cmlldmUgZXhpc3RpbmcgZGF0ZShzKVxyXG5cdFx0XHRcdGluc3QubGFzdFZhbCA9IG51bGw7XHJcblx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzID0gcGx1Z2luLl9leHRyYWN0RGF0ZXMoaW5zdCwgZWxlbS52YWwoKSk7XHJcblx0XHRcdFx0aW5zdC5waWNraW5nUmFuZ2UgPSBmYWxzZTtcclxuXHRcdFx0XHRpbnN0LmRyYXdEYXRlID0gcGx1Z2luLl9jaGVja01pbk1heCgoaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8XHJcblx0XHRcdFx0XHRpbnN0LmdldCgnZGVmYXVsdERhdGUnKSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKSkubmV3RGF0ZSgpLCBpbnN0KTtcclxuXHRcdFx0XHRpbnN0LnByZXZEYXRlID0gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCk7XHJcblx0XHRcdFx0cGx1Z2luLmN1ckluc3QgPSBpbnN0O1xyXG5cdFx0XHRcdC8vIEdlbmVyYXRlIGNvbnRlbnRcclxuXHRcdFx0XHRwbHVnaW4uX3VwZGF0ZShlbGVtWzBdLCB0cnVlKTtcclxuXHRcdFx0XHQvLyBBZGp1c3QgcG9zaXRpb24gYmVmb3JlIHNob3dpbmdcclxuXHRcdFx0XHR2YXIgb2Zmc2V0ID0gcGx1Z2luLl9jaGVja09mZnNldChpbnN0KTtcclxuXHRcdFx0XHRpbnN0LmRpdi5jc3Moe2xlZnQ6IG9mZnNldC5sZWZ0LCB0b3A6IG9mZnNldC50b3B9KTtcclxuXHRcdFx0XHQvLyBBbmQgZGlzcGxheVxyXG5cdFx0XHRcdHZhciBzaG93QW5pbSA9IGluc3Qub3B0aW9ucy5zaG93QW5pbTtcclxuXHRcdFx0XHR2YXIgc2hvd1NwZWVkID0gaW5zdC5vcHRpb25zLnNob3dTcGVlZDtcclxuXHRcdFx0XHRzaG93U3BlZWQgPSAoc2hvd1NwZWVkID09PSAnbm9ybWFsJyAmJiAkLnVpICYmXHJcblx0XHRcdFx0XHRwYXJzZUludCgkLnVpLnZlcnNpb24uc3Vic3RyaW5nKDIpKSA+PSA4ID8gJ19kZWZhdWx0JyA6IHNob3dTcGVlZCk7XHJcblx0XHRcdFx0aWYgKCQuZWZmZWN0cyAmJiAoJC5lZmZlY3RzW3Nob3dBbmltXSB8fCAoJC5lZmZlY3RzLmVmZmVjdCAmJiAkLmVmZmVjdHMuZWZmZWN0W3Nob3dBbmltXSkpKSB7XHJcblx0XHRcdFx0XHR2YXIgZGF0YSA9IGluc3QuZGl2LmRhdGEoKTsgLy8gVXBkYXRlIG9sZCBlZmZlY3RzIGRhdGFcclxuXHRcdFx0XHRcdGZvciAodmFyIGtleSBpbiBkYXRhKSB7XHJcblx0XHRcdFx0XHRcdGlmIChrZXkubWF0Y2goL15lY1xcLnN0b3JhZ2VcXC4vKSkge1xyXG5cdFx0XHRcdFx0XHRcdGRhdGFba2V5XSA9IGluc3QuX21haW5EaXYuY3NzKGtleS5yZXBsYWNlKC9lY1xcLnN0b3JhZ2VcXC4vLCAnJykpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpbnN0LmRpdi5kYXRhKGRhdGEpLnNob3coc2hvd0FuaW0sIGluc3Qub3B0aW9ucy5zaG93T3B0aW9ucywgc2hvd1NwZWVkKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRpbnN0LmRpdltzaG93QW5pbSB8fCAnc2hvdyddKHNob3dBbmltID8gc2hvd1NwZWVkIDogMCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBFeHRyYWN0IHBvc3NpYmxlIGRhdGVzIGZyb20gYSBzdHJpbmcuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSB0ZXh0IHRvIGV4dHJhY3QgZnJvbS5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGVbXX0gVGhlIGV4dHJhY3RlZCBkYXRlcy4gKi9cclxuXHRcdF9leHRyYWN0RGF0ZXM6IGZ1bmN0aW9uKGluc3QsIGRhdGVzVGV4dCkge1xyXG5cdFx0XHRpZiAoZGF0ZXNUZXh0ID09PSBpbnN0Lmxhc3RWYWwpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aW5zdC5sYXN0VmFsID0gZGF0ZXNUZXh0O1xyXG5cdFx0XHRkYXRlc1RleHQgPSBkYXRlc1RleHQuc3BsaXQoaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0ID8gaW5zdC5vcHRpb25zLm11bHRpU2VwYXJhdG9yIDpcclxuXHRcdFx0XHQoaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0ID8gaW5zdC5vcHRpb25zLnJhbmdlU2VwYXJhdG9yIDogJ1xceDAwJykpO1xyXG5cdFx0XHR2YXIgZGF0ZXMgPSBbXTtcclxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkYXRlc1RleHQubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0dmFyIGRhdGUgPSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIucGFyc2VEYXRlKGluc3QuZ2V0KCdkYXRlRm9ybWF0JyksIGRhdGVzVGV4dFtpXSk7XHJcblx0XHRcdFx0XHRpZiAoZGF0ZSkge1xyXG5cdFx0XHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBkYXRlcy5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChkYXRlc1tqXS5jb21wYXJlVG8oZGF0ZSkgPT09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoIWZvdW5kKSB7XHJcblx0XHRcdFx0XHRcdFx0ZGF0ZXMucHVzaChkYXRlKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjYXRjaCAoZSkge1xyXG5cdFx0XHRcdFx0Ly8gSWdub3JlXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGRhdGVzLnNwbGljZShpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgfHwgKGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCA/IDIgOiAxKSwgZGF0ZXMubGVuZ3RoKTtcclxuXHRcdFx0aWYgKGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCAmJiBkYXRlcy5sZW5ndGggPT09IDEpIHtcclxuXHRcdFx0XHRkYXRlc1sxXSA9IGRhdGVzWzBdO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBkYXRlcztcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFVwZGF0ZSB0aGUgZGF0ZXBpY2tlciBkaXNwbGF5LlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFdmVudHxFbGVtZW50fSBhIGZvY3VzIGV2ZW50IG9yIHRoZSBjb250cm9sIHRvIHVzZS5cclxuXHRcdFx0QHBhcmFtIGhpZGRlbiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gaW5pdGlhbGx5IGhpZGUgdGhlIGRhdGVwaWNrZXIuICovXHJcblx0XHRfdXBkYXRlOiBmdW5jdGlvbihlbGVtLCBoaWRkZW4pIHtcclxuXHRcdFx0ZWxlbSA9ICQoZWxlbS50YXJnZXQgfHwgZWxlbSk7XHJcblx0XHRcdHZhciBpbnN0ID0gcGx1Z2luLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xyXG5cdFx0XHRcdGlmIChpbnN0LmlubGluZSB8fCBwbHVnaW4uY3VySW5zdCA9PT0gaW5zdCkge1xyXG5cdFx0XHRcdFx0aWYgKCQuaXNGdW5jdGlvbihpbnN0Lm9wdGlvbnMub25DaGFuZ2VNb250aFllYXIpICYmICghaW5zdC5wcmV2RGF0ZSB8fFxyXG5cdFx0XHRcdFx0XHRcdGluc3QucHJldkRhdGUueWVhcigpICE9PSBpbnN0LmRyYXdEYXRlLnllYXIoKSB8fFxyXG5cdFx0XHRcdFx0XHRcdGluc3QucHJldkRhdGUubW9udGgoKSAhPT0gaW5zdC5kcmF3RGF0ZS5tb250aCgpKSkge1xyXG5cdFx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMub25DaGFuZ2VNb250aFllYXIuYXBwbHkoZWxlbVswXSxcclxuXHRcdFx0XHRcdFx0XHRbaW5zdC5kcmF3RGF0ZS55ZWFyKCksIGluc3QuZHJhd0RhdGUubW9udGgoKV0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoaW5zdC5pbmxpbmUpIHtcclxuXHRcdFx0XHRcdHZhciBpbmRleCA9ICQoJ2EsIDppbnB1dCcsIGVsZW0pLmluZGV4KCQoJzpmb2N1cycsIGVsZW0pKTtcclxuXHRcdFx0XHRcdGVsZW0uaHRtbCh0aGlzLl9nZW5lcmF0ZUNvbnRlbnQoZWxlbVswXSwgaW5zdCkpO1xyXG5cdFx0XHRcdFx0dmFyIGZvY3VzID0gZWxlbS5maW5kKCdhLCA6aW5wdXQnKTtcclxuXHRcdFx0XHRcdGZvY3VzLmVxKE1hdGgubWF4KE1hdGgubWluKGluZGV4LCBmb2N1cy5sZW5ndGggLSAxKSwgMCkpLmZvY3VzKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgaWYgKHBsdWdpbi5jdXJJbnN0ID09PSBpbnN0KSB7XHJcblx0XHRcdFx0XHRpZiAoIWluc3QuZGl2KSB7XHJcblx0XHRcdFx0XHRcdGluc3QuZGl2ID0gJCgnPGRpdj48L2Rpdj4nKS5hZGRDbGFzcyh0aGlzLl9wb3B1cENsYXNzKS5cclxuXHRcdFx0XHRcdFx0XHRjc3Moe2Rpc3BsYXk6IChoaWRkZW4gPyAnbm9uZScgOiAnc3RhdGljJyksIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGVmdDogZWxlbS5vZmZzZXQoKS5sZWZ0LCB0b3A6IGVsZW0ub2Zmc2V0KCkudG9wICsgZWxlbS5vdXRlckhlaWdodCgpfSkuXHJcblx0XHRcdFx0XHRcdFx0YXBwZW5kVG8oJChpbnN0Lm9wdGlvbnMucG9wdXBDb250YWluZXIgfHwgJ2JvZHknKSk7XHJcblx0XHRcdFx0XHRcdGlmICgkLmZuLm1vdXNld2hlZWwpIHtcclxuXHRcdFx0XHRcdFx0XHRpbnN0LmRpdi5tb3VzZXdoZWVsKHRoaXMuX2RvTW91c2VXaGVlbCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGluc3QuZGl2Lmh0bWwodGhpcy5fZ2VuZXJhdGVDb250ZW50KGVsZW1bMF0sIGluc3QpKTtcclxuXHRcdFx0XHRcdGVsZW0uZm9jdXMoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFVwZGF0ZSB0aGUgaW5wdXQgZmllbGQgYW5kIGFueSBhbHRlcm5hdGUgZmllbGQgd2l0aCB0aGUgY3VycmVudCBkYXRlcy5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gdXNlLlxyXG5cdFx0XHRAcGFyYW0ga2V5VXAge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGNvbWluZyBmcm9tIDxjb2RlPmtleVVwPC9jb2RlPiBwcm9jZXNzaW5nIChpbnRlcm5hbCkuICovXHJcblx0XHRfdXBkYXRlSW5wdXQ6IGZ1bmN0aW9uKGVsZW0sIGtleVVwKSB7XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcclxuXHRcdFx0XHR2YXIgdmFsdWUgPSAnJztcclxuXHRcdFx0XHR2YXIgYWx0VmFsdWUgPSAnJztcclxuXHRcdFx0XHR2YXIgc2VwID0gKGluc3Qub3B0aW9ucy5tdWx0aVNlbGVjdCA/IGluc3Qub3B0aW9ucy5tdWx0aVNlcGFyYXRvciA6XHJcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMucmFuZ2VTZXBhcmF0b3IpO1xyXG5cdFx0XHRcdHZhciBjYWxlbmRhciA9IGluc3Qub3B0aW9ucy5jYWxlbmRhcjtcclxuXHRcdFx0XHR2YXIgZGF0ZUZvcm1hdCA9IGluc3QuZ2V0KCdkYXRlRm9ybWF0Jyk7XHJcblx0XHRcdFx0dmFyIGFsdEZvcm1hdCA9IGluc3Qub3B0aW9ucy5hbHRGb3JtYXQgfHwgZGF0ZUZvcm1hdDtcclxuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0dmFsdWUgKz0gKGtleVVwID8gJycgOiAoaSA+IDAgPyBzZXAgOiAnJykgK1xyXG5cdFx0XHRcdFx0XHRjYWxlbmRhci5mb3JtYXREYXRlKGRhdGVGb3JtYXQsIGluc3Quc2VsZWN0ZWREYXRlc1tpXSkpO1xyXG5cdFx0XHRcdFx0YWx0VmFsdWUgKz0gKGkgPiAwID8gc2VwIDogJycpICtcclxuXHRcdFx0XHRcdFx0Y2FsZW5kYXIuZm9ybWF0RGF0ZShhbHRGb3JtYXQsIGluc3Quc2VsZWN0ZWREYXRlc1tpXSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICghaW5zdC5pbmxpbmUgJiYgIWtleVVwKSB7XHJcblx0XHRcdFx0XHQkKGVsZW0pLnZhbCh2YWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCQoaW5zdC5vcHRpb25zLmFsdEZpZWxkKS52YWwoYWx0VmFsdWUpO1xyXG5cdFx0XHRcdGlmICgkLmlzRnVuY3Rpb24oaW5zdC5vcHRpb25zLm9uU2VsZWN0KSAmJiAha2V5VXAgJiYgIWluc3QuaW5TZWxlY3QpIHtcclxuXHRcdFx0XHRcdGluc3QuaW5TZWxlY3QgPSB0cnVlOyAvLyBQcmV2ZW50IGVuZGxlc3MgbG9vcHNcclxuXHRcdFx0XHRcdGluc3Qub3B0aW9ucy5vblNlbGVjdC5hcHBseShlbGVtLCBbaW5zdC5zZWxlY3RlZERhdGVzXSk7XHJcblx0XHRcdFx0XHRpbnN0LmluU2VsZWN0ID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiBsZWZ0IGFuZCB0b3AgYm9yZGVycyBmb3IgYW4gZWxlbWVudC5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7alF1ZXJ5fSBUaGUgZWxlbWVudCBvZiBpbnRlcmVzdC5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyW119IFRoZSBsZWZ0IGFuZCB0b3AgYm9yZGVycy4gKi9cclxuXHRcdF9nZXRCb3JkZXJzOiBmdW5jdGlvbihlbGVtKSB7XHJcblx0XHRcdHZhciBjb252ZXJ0ID0gZnVuY3Rpb24odmFsdWUpIHtcclxuXHRcdFx0XHRyZXR1cm4ge3RoaW46IDEsIG1lZGl1bTogMywgdGhpY2s6IDV9W3ZhbHVlXSB8fCB2YWx1ZTtcclxuXHRcdFx0fTtcclxuXHRcdFx0cmV0dXJuIFtwYXJzZUZsb2F0KGNvbnZlcnQoZWxlbS5jc3MoJ2JvcmRlci1sZWZ0LXdpZHRoJykpKSxcclxuXHRcdFx0XHRwYXJzZUZsb2F0KGNvbnZlcnQoZWxlbS5jc3MoJ2JvcmRlci10b3Atd2lkdGgnKSkpXTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENoZWNrIHBvc2l0aW9uaW5nIHRvIHJlbWFpbiBvbiB0aGUgc2NyZWVuLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IFRoZSB1cGRhdGVkIG9mZnNldCBmb3IgdGhlIGRhdGVwaWNrZXIuICovXHJcblx0XHRfY2hlY2tPZmZzZXQ6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0dmFyIGJhc2UgPSAoaW5zdC5lbGVtLmlzKCc6aGlkZGVuJykgJiYgaW5zdC50cmlnZ2VyID8gaW5zdC50cmlnZ2VyIDogaW5zdC5lbGVtKTtcclxuXHRcdFx0dmFyIG9mZnNldCA9IGJhc2Uub2Zmc2V0KCk7XHJcblx0XHRcdHZhciBicm93c2VyV2lkdGggPSAkKHdpbmRvdykud2lkdGgoKTtcclxuXHRcdFx0dmFyIGJyb3dzZXJIZWlnaHQgPSAkKHdpbmRvdykuaGVpZ2h0KCk7XHJcblx0XHRcdGlmIChicm93c2VyV2lkdGggPT09IDApIHtcclxuXHRcdFx0XHRyZXR1cm4gb2Zmc2V0O1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBpc0ZpeGVkID0gZmFsc2U7XHJcblx0XHRcdCQoaW5zdC5lbGVtKS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRpc0ZpeGVkIHw9ICQodGhpcykuY3NzKCdwb3NpdGlvbicpID09PSAnZml4ZWQnO1xyXG5cdFx0XHRcdHJldHVybiAhaXNGaXhlZDtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHZhciBzY3JvbGxYID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0O1xyXG5cdFx0XHR2YXIgc2Nyb2xsWSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7XHJcblx0XHRcdHZhciBhYm92ZSA9IG9mZnNldC50b3AgLSAoaXNGaXhlZCA/IHNjcm9sbFkgOiAwKSAtIGluc3QuZGl2Lm91dGVySGVpZ2h0KCk7XHJcblx0XHRcdHZhciBiZWxvdyA9IG9mZnNldC50b3AgLSAoaXNGaXhlZCA/IHNjcm9sbFkgOiAwKSArIGJhc2Uub3V0ZXJIZWlnaHQoKTtcclxuXHRcdFx0dmFyIGFsaWduTCA9IG9mZnNldC5sZWZ0IC0gKGlzRml4ZWQgPyBzY3JvbGxYIDogMCk7XHJcblx0XHRcdHZhciBhbGlnblIgPSBvZmZzZXQubGVmdCAtIChpc0ZpeGVkID8gc2Nyb2xsWCA6IDApICsgYmFzZS5vdXRlcldpZHRoKCkgLSBpbnN0LmRpdi5vdXRlcldpZHRoKCk7XHJcblx0XHRcdHZhciB0b29XaWRlID0gKG9mZnNldC5sZWZ0IC0gc2Nyb2xsWCArIGluc3QuZGl2Lm91dGVyV2lkdGgoKSkgPiBicm93c2VyV2lkdGg7XHJcblx0XHRcdHZhciB0b29IaWdoID0gKG9mZnNldC50b3AgLSBzY3JvbGxZICsgaW5zdC5lbGVtLm91dGVySGVpZ2h0KCkgK1xyXG5cdFx0XHRcdGluc3QuZGl2Lm91dGVySGVpZ2h0KCkpID4gYnJvd3NlckhlaWdodDtcclxuXHRcdFx0aW5zdC5kaXYuY3NzKCdwb3NpdGlvbicsIGlzRml4ZWQgPyAnZml4ZWQnIDogJ2Fic29sdXRlJyk7XHJcblx0XHRcdHZhciBhbGlnbm1lbnQgPSBpbnN0Lm9wdGlvbnMuYWxpZ25tZW50O1xyXG5cdFx0XHRpZiAoYWxpZ25tZW50ID09PSAndG9wTGVmdCcpIHtcclxuXHRcdFx0XHRvZmZzZXQgPSB7bGVmdDogYWxpZ25MLCB0b3A6IGFib3ZlfTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmIChhbGlnbm1lbnQgPT09ICd0b3BSaWdodCcpIHtcclxuXHRcdFx0XHRvZmZzZXQgPSB7bGVmdDogYWxpZ25SLCB0b3A6IGFib3ZlfTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmIChhbGlnbm1lbnQgPT09ICdib3R0b21MZWZ0Jykge1xyXG5cdFx0XHRcdG9mZnNldCA9IHtsZWZ0OiBhbGlnbkwsIHRvcDogYmVsb3d9O1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKGFsaWdubWVudCA9PT0gJ2JvdHRvbVJpZ2h0Jykge1xyXG5cdFx0XHRcdG9mZnNldCA9IHtsZWZ0OiBhbGlnblIsIHRvcDogYmVsb3d9O1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKGFsaWdubWVudCA9PT0gJ3RvcCcpIHtcclxuXHRcdFx0XHRvZmZzZXQgPSB7bGVmdDogKGluc3Qub3B0aW9ucy5pc1JUTCB8fCB0b29XaWRlID8gYWxpZ25SIDogYWxpZ25MKSwgdG9wOiBhYm92ZX07XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7IC8vIGJvdHRvbVxyXG5cdFx0XHRcdG9mZnNldCA9IHtsZWZ0OiAoaW5zdC5vcHRpb25zLmlzUlRMIHx8IHRvb1dpZGUgPyBhbGlnblIgOiBhbGlnbkwpLFxyXG5cdFx0XHRcdFx0dG9wOiAodG9vSGlnaCA/IGFib3ZlIDogYmVsb3cpfTtcclxuXHRcdFx0fVxyXG5cdFx0XHRvZmZzZXQubGVmdCA9IE1hdGgubWF4KChpc0ZpeGVkID8gMCA6IHNjcm9sbFgpLCBvZmZzZXQubGVmdCk7XHJcblx0XHRcdG9mZnNldC50b3AgPSBNYXRoLm1heCgoaXNGaXhlZCA/IDAgOiBzY3JvbGxZKSwgb2Zmc2V0LnRvcCk7XHJcblx0XHRcdHJldHVybiBvZmZzZXQ7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDbG9zZSBkYXRlIHBpY2tlciBpZiBjbGlja2VkIGVsc2V3aGVyZS5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZXZlbnQge01vdXNlRXZlbnR9IFRoZSBtb3VzZSBjbGljayB0byBjaGVjay4gKi9cclxuXHRcdF9jaGVja0V4dGVybmFsQ2xpY2s6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblx0XHRcdGlmICghcGx1Z2luLmN1ckluc3QpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIGVsZW0gPSAkKGV2ZW50LnRhcmdldCk7XHJcblx0XHRcdGlmIChlbGVtLmNsb3Nlc3QoJy4nICsgcGx1Z2luLl9wb3B1cENsYXNzICsgJywuJyArIHBsdWdpbi5fdHJpZ2dlckNsYXNzKS5sZW5ndGggPT09IDAgJiZcclxuXHRcdFx0XHRcdCFlbGVtLmhhc0NsYXNzKHBsdWdpbi5fZ2V0TWFya2VyKCkpKSB7XHJcblx0XHRcdFx0cGx1Z2luLmhpZGUocGx1Z2luLmN1ckluc3QpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBIaWRlIGEgcG9wdXAgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudHxvYmplY3R9IFRoZSBjb250cm9sIHRvIHVzZSBvciB0aGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QHBhcmFtIGltbWVkaWF0ZSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gY2xvc2UgaW1tZWRpYXRlbHkgd2l0aG91dCBhbmltYXRpb24gKGludGVybmFsKS5cclxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuZGF0ZXBpY2soJ2hpZGUnKSAqL1xyXG5cdFx0aGlkZTogZnVuY3Rpb24oZWxlbSwgaW1tZWRpYXRlKSB7XHJcblx0XHRcdGlmICghZWxlbSkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdGlmICgkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcclxuXHRcdFx0XHRpbnN0ID0gZWxlbTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoaW5zdCAmJiBpbnN0ID09PSBwbHVnaW4uY3VySW5zdCkge1xyXG5cdFx0XHRcdHZhciBzaG93QW5pbSA9IChpbW1lZGlhdGUgPyAnJyA6IGluc3Qub3B0aW9ucy5zaG93QW5pbSk7XHJcblx0XHRcdFx0dmFyIHNob3dTcGVlZCA9IGluc3Qub3B0aW9ucy5zaG93U3BlZWQ7XHJcblx0XHRcdFx0c2hvd1NwZWVkID0gKHNob3dTcGVlZCA9PT0gJ25vcm1hbCcgJiYgJC51aSAmJlxyXG5cdFx0XHRcdFx0cGFyc2VJbnQoJC51aS52ZXJzaW9uLnN1YnN0cmluZygyKSkgPj0gOCA/ICdfZGVmYXVsdCcgOiBzaG93U3BlZWQpO1xyXG5cdFx0XHRcdHZhciBwb3N0UHJvY2VzcyA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0aWYgKCFpbnN0LmRpdikge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpbnN0LmRpdi5yZW1vdmUoKTtcclxuXHRcdFx0XHRcdGluc3QuZGl2ID0gbnVsbDtcclxuXHRcdFx0XHRcdHBsdWdpbi5jdXJJbnN0ID0gbnVsbDtcclxuXHRcdFx0XHRcdGlmICgkLmlzRnVuY3Rpb24oaW5zdC5vcHRpb25zLm9uQ2xvc2UpKSB7XHJcblx0XHRcdFx0XHRcdGluc3Qub3B0aW9ucy5vbkNsb3NlLmFwcGx5KGVsZW0sIFtpbnN0LnNlbGVjdGVkRGF0ZXNdKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGluc3QuZGl2LnN0b3AoKTtcclxuXHRcdFx0XHRpZiAoJC5lZmZlY3RzICYmICgkLmVmZmVjdHNbc2hvd0FuaW1dIHx8ICgkLmVmZmVjdHMuZWZmZWN0ICYmICQuZWZmZWN0cy5lZmZlY3Rbc2hvd0FuaW1dKSkpIHtcclxuXHRcdFx0XHRcdGluc3QuZGl2LmhpZGUoc2hvd0FuaW0sIGluc3Qub3B0aW9ucy5zaG93T3B0aW9ucywgc2hvd1NwZWVkLCBwb3N0UHJvY2Vzcyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0dmFyIGhpZGVBbmltID0gKHNob3dBbmltID09PSAnc2xpZGVEb3duJyA/ICdzbGlkZVVwJyA6XHJcblx0XHRcdFx0XHRcdChzaG93QW5pbSA9PT0gJ2ZhZGVJbicgPyAnZmFkZU91dCcgOiAnaGlkZScpKTtcclxuXHRcdFx0XHRcdGluc3QuZGl2W2hpZGVBbmltXSgoc2hvd0FuaW0gPyBzaG93U3BlZWQgOiAnJyksIHBvc3RQcm9jZXNzKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCFzaG93QW5pbSkge1xyXG5cdFx0XHRcdFx0cG9zdFByb2Nlc3MoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEhhbmRsZSBrZXlzdHJva2VzIGluIHRoZSBkYXRlcGlja2VyLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBldmVudCB7S2V5RXZlbnR9IFRoZSBrZXlzdHJva2UuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIG5vdCBoYW5kbGVkLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgaGFuZGxlZC4gKi9cclxuXHRcdF9rZXlEb3duOiBmdW5jdGlvbihldmVudCkge1xyXG5cdFx0XHR2YXIgZWxlbSA9IChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuZWxlbSkgfHwgZXZlbnQudGFyZ2V0O1xyXG5cdFx0XHR2YXIgaW5zdCA9IHBsdWdpbi5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0dmFyIGhhbmRsZWQgPSBmYWxzZTtcclxuXHRcdFx0aWYgKGluc3QuaW5saW5lIHx8IGluc3QuZGl2KSB7XHJcblx0XHRcdFx0aWYgKGV2ZW50LmtleUNvZGUgPT09IDkpIHsgLy8gVGFiIC0gY2xvc2VcclxuXHRcdFx0XHRcdHBsdWdpbi5oaWRlKGVsZW0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSAxMykgeyAvLyBFbnRlciAtIHNlbGVjdFxyXG5cdFx0XHRcdFx0cGx1Z2luLnNlbGVjdERhdGUoZWxlbSxcclxuXHRcdFx0XHRcdFx0JCgnYS4nICsgaW5zdC5vcHRpb25zLnJlbmRlcmVyLmhpZ2hsaWdodGVkQ2xhc3MsIGluc3QuZGl2KVswXSk7XHJcblx0XHRcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7IC8vIENvbW1hbmQga2V5c3Ryb2tlc1xyXG5cdFx0XHRcdFx0dmFyIGNvbW1hbmRzID0gaW5zdC5vcHRpb25zLmNvbW1hbmRzO1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBjb21tYW5kcykge1xyXG5cdFx0XHRcdFx0XHR2YXIgY29tbWFuZCA9IGNvbW1hbmRzW25hbWVdO1xyXG5cdFx0XHRcdFx0XHRpZiAoY29tbWFuZC5rZXlzdHJva2Uua2V5Q29kZSA9PT0gZXZlbnQua2V5Q29kZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0ISFjb21tYW5kLmtleXN0cm9rZS5jdHJsS2V5ID09PSAhIShldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmXHJcblx0XHRcdFx0XHRcdFx0XHQhIWNvbW1hbmQua2V5c3Ryb2tlLmFsdEtleSA9PT0gZXZlbnQuYWx0S2V5ICYmXHJcblx0XHRcdFx0XHRcdFx0XHQhIWNvbW1hbmQua2V5c3Ryb2tlLnNoaWZ0S2V5ID09PSBldmVudC5zaGlmdEtleSkge1xyXG5cdFx0XHRcdFx0XHRcdHBsdWdpbi5wZXJmb3JtQWN0aW9uKGVsZW0sIG5hbWUpO1xyXG5cdFx0XHRcdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgeyAvLyBTaG93IG9uICdjdXJyZW50JyBrZXlzdHJva2VcclxuXHRcdFx0XHR2YXIgY29tbWFuZCA9IGluc3Qub3B0aW9ucy5jb21tYW5kcy5jdXJyZW50O1xyXG5cdFx0XHRcdGlmIChjb21tYW5kLmtleXN0cm9rZS5rZXlDb2RlID09PSBldmVudC5rZXlDb2RlICYmXHJcblx0XHRcdFx0XHRcdCEhY29tbWFuZC5rZXlzdHJva2UuY3RybEtleSA9PT0gISEoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJlxyXG5cdFx0XHRcdFx0XHQhIWNvbW1hbmQua2V5c3Ryb2tlLmFsdEtleSA9PT0gZXZlbnQuYWx0S2V5ICYmXHJcblx0XHRcdFx0XHRcdCEhY29tbWFuZC5rZXlzdHJva2Uuc2hpZnRLZXkgPT09IGV2ZW50LnNoaWZ0S2V5KSB7XHJcblx0XHRcdFx0XHRwbHVnaW4uc2hvdyhlbGVtKTtcclxuXHRcdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpbnN0LmN0cmxLZXkgPSAoKGV2ZW50LmtleUNvZGUgPCA0OCAmJiBldmVudC5rZXlDb2RlICE9PSAzMikgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KTtcclxuXHRcdFx0aWYgKGhhbmRsZWQpIHtcclxuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiAhaGFuZGxlZDtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEZpbHRlciBrZXlzdHJva2VzIGluIHRoZSBkYXRlcGlja2VyLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBldmVudCB7S2V5RXZlbnR9IFRoZSBrZXlzdHJva2UuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGFsbG93ZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QgYWxsb3dlZC4gKi9cclxuXHRcdF9rZXlQcmVzczogZnVuY3Rpb24oZXZlbnQpIHtcclxuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoKGV2ZW50LmRhdGEgJiYgZXZlbnQuZGF0YS5lbGVtKSB8fCBldmVudC50YXJnZXQpO1xyXG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSAmJiBpbnN0Lm9wdGlvbnMuY29uc3RyYWluSW5wdXQpIHtcclxuXHRcdFx0XHR2YXIgY2ggPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmtleUNvZGUgfHwgZXZlbnQuY2hhckNvZGUpO1xyXG5cdFx0XHRcdHZhciBhbGxvd2VkQ2hhcnMgPSBwbHVnaW4uX2FsbG93ZWRDaGFycyhpbnN0KTtcclxuXHRcdFx0XHRyZXR1cm4gKGV2ZW50Lm1ldGFLZXkgfHwgaW5zdC5jdHJsS2V5IHx8IGNoIDwgJyAnIHx8XHJcblx0XHRcdFx0XHQhYWxsb3dlZENoYXJzIHx8IGFsbG93ZWRDaGFycy5pbmRleE9mKGNoKSA+IC0xKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgYWxsb3dlZCBieSB0aGUgZGF0ZSBmb3JtYXQuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEByZXR1cm4ge3N0cmluZ30gVGhlIHNldCBvZiBhbGxvd2VkIGNoYXJhY3RlcnMsIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIGFueXRoaW5nIGFsbG93ZWQuICovXHJcblx0XHRfYWxsb3dlZENoYXJzOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdHZhciBhbGxvd2VkQ2hhcnMgPSAoaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0ID8gaW5zdC5vcHRpb25zLm11bHRpU2VwYXJhdG9yIDpcclxuXHRcdFx0XHQoaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0ID8gaW5zdC5vcHRpb25zLnJhbmdlU2VwYXJhdG9yIDogJycpKTtcclxuXHRcdFx0dmFyIGxpdGVyYWwgPSBmYWxzZTtcclxuXHRcdFx0dmFyIGhhc051bSA9IGZhbHNlO1xyXG5cdFx0XHR2YXIgZGF0ZUZvcm1hdCA9IGluc3QuZ2V0KCdkYXRlRm9ybWF0Jyk7XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0ZUZvcm1hdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdHZhciBjaCA9IGRhdGVGb3JtYXQuY2hhckF0KGkpO1xyXG5cdFx0XHRcdGlmIChsaXRlcmFsKSB7XHJcblx0XHRcdFx0XHRpZiAoY2ggPT09IFwiJ1wiICYmIGRhdGVGb3JtYXQuY2hhckF0KGkgKyAxKSAhPT0gXCInXCIpIHtcclxuXHRcdFx0XHRcdFx0bGl0ZXJhbCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdGFsbG93ZWRDaGFycyArPSBjaDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRzd2l0Y2ggKGNoKSB7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ2QnOiBjYXNlICdtJzogY2FzZSAnbyc6IGNhc2UgJ3cnOlxyXG5cdFx0XHRcdFx0XHRcdGFsbG93ZWRDaGFycyArPSAoaGFzTnVtID8gJycgOiAnMDEyMzQ1Njc4OScpOyBoYXNOdW0gPSB0cnVlOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAneSc6IGNhc2UgJ0AnOiBjYXNlICchJzpcclxuXHRcdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gKGhhc051bSA/ICcnIDogJzAxMjM0NTY3ODknKSArICctJzsgaGFzTnVtID0gdHJ1ZTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ0onOlxyXG5cdFx0XHRcdFx0XHRcdGFsbG93ZWRDaGFycyArPSAoaGFzTnVtID8gJycgOiAnMDEyMzQ1Njc4OScpICsgJy0uJzsgaGFzTnVtID0gdHJ1ZTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ0QnOiBjYXNlICdNJzogY2FzZSAnWSc6XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7IC8vIEFjY2VwdCBhbnl0aGluZ1xyXG5cdFx0XHRcdFx0XHRjYXNlIFwiJ1wiOlxyXG5cdFx0XHRcdFx0XHRcdGlmIChkYXRlRm9ybWF0LmNoYXJBdChpICsgMSkgPT09IFwiJ1wiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gXCInXCI7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0bGl0ZXJhbCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0XHRcdGFsbG93ZWRDaGFycyArPSBjaDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGFsbG93ZWRDaGFycztcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFN5bmNocm9uaXNlIGRhdGVwaWNrZXIgd2l0aCB0aGUgZmllbGQuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGV2ZW50IHtLZXlFdmVudH0gVGhlIGtleXN0cm9rZS5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYWxsb3dlZCwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdCBhbGxvd2VkLiAqL1xyXG5cdFx0X2tleVVwOiBmdW5jdGlvbihldmVudCkge1xyXG5cdFx0XHR2YXIgZWxlbSA9IChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuZWxlbSkgfHwgZXZlbnQudGFyZ2V0O1xyXG5cdFx0XHR2YXIgaW5zdCA9IHBsdWdpbi5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkgJiYgIWluc3QuY3RybEtleSAmJiBpbnN0Lmxhc3RWYWwgIT09IGluc3QuZWxlbS52YWwoKSkge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHR2YXIgZGF0ZXMgPSBwbHVnaW4uX2V4dHJhY3REYXRlcyhpbnN0LCBpbnN0LmVsZW0udmFsKCkpO1xyXG5cdFx0XHRcdFx0aWYgKGRhdGVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0cGx1Z2luLnNldERhdGUoZWxlbSwgZGF0ZXMsIG51bGwsIHRydWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjYXRjaCAoZXZlbnQpIHtcclxuXHRcdFx0XHRcdC8vIElnbm9yZVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEluY3JlbWVudC9kZWNyZW1lbnQgbW9udGgveWVhciBvbiBtb3VzZSB3aGVlbCBhY3Rpdml0eS5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZXZlbnQge2V2ZW50fSBUaGUgbW91c2Ugd2hlZWwgZXZlbnQuXHJcblx0XHRcdEBwYXJhbSBkZWx0YSB7bnVtYmVyfSBUaGUgYW1vdW50IG9mIGNoYW5nZS4gKi9cclxuXHRcdF9kb01vdXNlV2hlZWw6IGZ1bmN0aW9uKGV2ZW50LCBkZWx0YSkge1xyXG5cdFx0XHR2YXIgZWxlbSA9IChwbHVnaW4uY3VySW5zdCAmJiBwbHVnaW4uY3VySW5zdC5lbGVtWzBdKSB8fFxyXG5cdFx0XHRcdCQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCcuJyArIHBsdWdpbi5fZ2V0TWFya2VyKCkpWzBdO1xyXG5cdFx0XHRpZiAocGx1Z2luLmlzRGlzYWJsZWQoZWxlbSkpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMudXNlTW91c2VXaGVlbCkge1xyXG5cdFx0XHRcdGRlbHRhID0gKGRlbHRhIDwgMCA/IC0xIDogKzEpO1xyXG5cdFx0XHRcdHBsdWdpbi5jaGFuZ2VNb250aChlbGVtLCAtaW5zdC5vcHRpb25zW2V2ZW50LmN0cmxLZXkgPyAnbW9udGhzVG9KdW1wJyA6ICdtb250aHNUb1N0ZXAnXSAqIGRlbHRhKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ2xlYXIgYW4gaW5wdXQgYW5kIGNsb3NlIGEgcG9wdXAgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gdXNlLlxyXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnY2xlYXInKSAqL1xyXG5cdFx0Y2xlYXI6IGZ1bmN0aW9uKGVsZW0pIHtcclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xyXG5cdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IFtdO1xyXG5cdFx0XHRcdHRoaXMuaGlkZShlbGVtKTtcclxuXHRcdFx0XHR2YXIgZGVmYXVsdERhdGUgPSBpbnN0LmdldCgnZGVmYXVsdERhdGUnKTtcclxuXHRcdFx0XHRpZiAoaW5zdC5vcHRpb25zLnNlbGVjdERlZmF1bHREYXRlICYmIGRlZmF1bHREYXRlKSB7XHJcblx0XHRcdFx0XHR0aGlzLnNldERhdGUoZWxlbSwgKGRlZmF1bHREYXRlIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpKS5uZXdEYXRlKCkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUlucHV0KGVsZW0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIHNlbGVjdGVkIGRhdGUocykgZm9yIGEgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGVbXX0gVGhlIHNlbGVjdGVkIGRhdGUocykuXHJcblx0XHRcdEBleGFtcGxlIHZhciBkYXRlcyA9ICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdnZXREYXRlJykgKi9cclxuXHRcdGdldERhdGU6IGZ1bmN0aW9uKGVsZW0pIHtcclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRyZXR1cm4gKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkgPyBpbnN0LnNlbGVjdGVkRGF0ZXMgOiBbXSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBTZXQgdGhlIHNlbGVjdGVkIGRhdGUocykgZm9yIGEgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gdGhlIGNvbnRyb2wgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIGRhdGVzIHtDRGF0ZXxudW1iZXJ8c3RyaW5nfGFycmF5fSB0aGUgc2VsZWN0ZWQgZGF0ZShzKS5cclxuXHRcdFx0QHBhcmFtIFtlbmREYXRlXSB7Q0RhdGV8bnVtYmVyfHN0cmluZ30gdGhlIGVuZGluZyBkYXRlIGZvciBhIHJhbmdlLlxyXG5cdFx0XHRAcGFyYW0gW2tleVVwXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgY29taW5nIGZyb20gPGNvZGU+a2V5VXA8L2NvZGU+IHByb2Nlc3NpbmcgKGludGVybmFsKS5cclxuXHRcdFx0QHBhcmFtIFtzZXRPcHRdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBjb21pbmcgZnJvbSBvcHRpb24gcHJvY2Vzc2luZyAoaW50ZXJuYWwpLlxyXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnc2V0RGF0ZScsIG5ldyBEYXRlKDIwMTQsIDEyLTEsIDI1KSlcclxuICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdzZXREYXRlJywgJzEyLzI1LzIwMTQnLCAnMDEvMDEvMjAxNScpXHJcbiAkKHNlbGVjdG9yKS5kYXRlcGljaygnc2V0RGF0ZScsIFtkYXRlMSwgZGF0ZTIsIGRhdGUzXSkgKi9cclxuXHRcdHNldERhdGU6IGZ1bmN0aW9uKGVsZW0sIGRhdGVzLCBlbmREYXRlLCBrZXlVcCwgc2V0T3B0KSB7XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcclxuXHRcdFx0XHRpZiAoISQuaXNBcnJheShkYXRlcykpIHtcclxuXHRcdFx0XHRcdGRhdGVzID0gW2RhdGVzXTtcclxuXHRcdFx0XHRcdGlmIChlbmREYXRlKSB7XHJcblx0XHRcdFx0XHRcdGRhdGVzLnB1c2goZW5kRGF0ZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5nZXQoJ21pbkRhdGUnKTtcclxuXHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XHJcblx0XHRcdFx0dmFyIGN1ckRhdGUgPSBpbnN0LnNlbGVjdGVkRGF0ZXNbMF07XHJcblx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzID0gW107XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkYXRlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0dmFyIGRhdGUgPSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGV0ZXJtaW5lRGF0ZShcclxuXHRcdFx0XHRcdFx0ZGF0ZXNbaV0sIG51bGwsIGN1ckRhdGUsIGluc3QuZ2V0KCdkYXRlRm9ybWF0JyksIGluc3QuZ2V0Q29uZmlnKCkpO1xyXG5cdFx0XHRcdFx0aWYgKGRhdGUpIHtcclxuXHRcdFx0XHRcdFx0aWYgKCghbWluRGF0ZSB8fCBkYXRlLmNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpICYmXHJcblx0XHRcdFx0XHRcdFx0XHQoIW1heERhdGUgfHwgZGF0ZS5jb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKSkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoaW5zdC5zZWxlY3RlZERhdGVzW2pdLmNvbXBhcmVUbyhkYXRlKSA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAoIWZvdW5kKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXMucHVzaChkYXRlKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzLnNwbGljZShpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgfHxcclxuXHRcdFx0XHRcdChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgPyAyIDogMSksIGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGgpO1xyXG5cdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QpIHtcclxuXHRcdFx0XHRcdHN3aXRjaCAoaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRjYXNlIDE6IGluc3Quc2VsZWN0ZWREYXRlc1sxXSA9IGluc3Quc2VsZWN0ZWREYXRlc1swXTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgMjogaW5zdC5zZWxlY3RlZERhdGVzWzFdID1cclxuXHRcdFx0XHRcdFx0XHQoaW5zdC5zZWxlY3RlZERhdGVzWzBdLmNvbXBhcmVUbyhpbnN0LnNlbGVjdGVkRGF0ZXNbMV0pID09PSArMSA/XHJcblx0XHRcdFx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzWzBdIDogaW5zdC5zZWxlY3RlZERhdGVzWzFdKTsgYnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpbnN0LnBpY2tpbmdSYW5nZSA9IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpbnN0LnByZXZEYXRlID0gKGluc3QuZHJhd0RhdGUgPyBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKSA6IG51bGwpO1xyXG5cdFx0XHRcdGluc3QuZHJhd0RhdGUgPSB0aGlzLl9jaGVja01pbk1heCgoaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8XHJcblx0XHRcdFx0XHRpbnN0LmdldCgnZGVmYXVsdERhdGUnKSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKSkubmV3RGF0ZSgpLCBpbnN0KTtcclxuXHRcdFx0XHRpZiAoIXNldE9wdCkge1xyXG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlKGVsZW0pO1xyXG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlSW5wdXQoZWxlbSwga2V5VXApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgYSBkYXRlIGlzIHNlbGVjdGFibGUgZm9yIHRoaXMgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gY2hlY2suXHJcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZXxzdHJpbmd8bnVtYmVyfSBUaGUgZGF0ZSB0byBjaGVjay5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgc2VsZWN0YWJsZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QGV4YW1wbGUgdmFyIHNlbGVjdGFibGUgPSAkKHNlbGVjdG9yKS5kYXRlcGljaygnaXNTZWxlY3RhYmxlJywgZGF0ZSkgKi9cclxuXHRcdGlzU2VsZWN0YWJsZTogZnVuY3Rpb24oZWxlbSwgZGF0ZSkge1xyXG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdGlmICgkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdFx0ZGF0ZSA9IGluc3Qub3B0aW9ucy5jYWxlbmRhci5kZXRlcm1pbmVEYXRlKGRhdGUsXHJcblx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpLCBudWxsLFxyXG5cdFx0XHRcdGluc3Qub3B0aW9ucy5kYXRlRm9ybWF0LCBpbnN0LmdldENvbmZpZygpKTtcclxuXHRcdFx0cmV0dXJuIHRoaXMuX2lzU2VsZWN0YWJsZShlbGVtLCBkYXRlLCBpbnN0Lm9wdGlvbnMub25EYXRlLFxyXG5cdFx0XHRcdGluc3QuZ2V0KCdtaW5EYXRlJyksIGluc3QuZ2V0KCdtYXhEYXRlJykpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogSW50ZXJuYWxseSBkZXRlcm1pbmUgd2hldGhlciBhIGRhdGUgaXMgc2VsZWN0YWJsZSBmb3IgdGhpcyBkYXRlcGlja2VyLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSB0aGUgY29udHJvbCB0byBjaGVjay5cclxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgZGF0ZSB0byBjaGVjay5cclxuXHRcdFx0QHBhcmFtIG9uRGF0ZSB7ZnVuY3Rpb258Ym9vbGVhbn0gQW55IDxjb2RlPm9uRGF0ZTwvY29kZT4gY2FsbGJhY2sgb3IgPGNvZGU+Y2FsbGJhY2suc2VsZWN0YWJsZTwvY29kZT4uXHJcblx0XHRcdEBwYXJhbSBtaW5EYXRlIHtDRGF0ZX0gVGhlIG1pbmltdW0gYWxsb3dlZCBkYXRlLlxyXG5cdFx0XHRAcGFyYW0gbWF4RGF0ZSB7Q0RhdGV9IFRoZSBtYXhpbXVtIGFsbG93ZWQgZGF0ZS5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgc2VsZWN0YWJsZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC4gKi9cclxuXHRcdF9pc1NlbGVjdGFibGU6IGZ1bmN0aW9uKGVsZW0sIGRhdGUsIG9uRGF0ZSwgbWluRGF0ZSwgbWF4RGF0ZSkge1xyXG5cdFx0XHR2YXIgZGF0ZUluZm8gPSAodHlwZW9mIG9uRGF0ZSA9PT0gJ2Jvb2xlYW4nID8ge3NlbGVjdGFibGU6IG9uRGF0ZX0gOlxyXG5cdFx0XHRcdCghJC5pc0Z1bmN0aW9uKG9uRGF0ZSkgPyB7fSA6IG9uRGF0ZS5hcHBseShlbGVtLCBbZGF0ZSwgdHJ1ZV0pKSk7XHJcblx0XHRcdHJldHVybiAoZGF0ZUluZm8uc2VsZWN0YWJsZSAhPT0gZmFsc2UpICYmXHJcblx0XHRcdFx0KCFtaW5EYXRlIHx8IGRhdGUudG9KRCgpID49IG1pbkRhdGUudG9KRCgpKSAmJiAoIW1heERhdGUgfHwgZGF0ZS50b0pEKCkgPD0gbWF4RGF0ZS50b0pEKCkpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUGVyZm9ybSBhIG5hbWVkIGFjdGlvbiBmb3IgYSBkYXRlcGlja2VyLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtlbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXHJcblx0XHRcdEBwYXJhbSBhY3Rpb24ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIGFjdGlvbi4gKi9cclxuXHRcdHBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uKGVsZW0sIGFjdGlvbikge1xyXG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpICYmICF0aGlzLmlzRGlzYWJsZWQoZWxlbSkpIHtcclxuXHRcdFx0XHR2YXIgY29tbWFuZHMgPSBpbnN0Lm9wdGlvbnMuY29tbWFuZHM7XHJcblx0XHRcdFx0aWYgKGNvbW1hbmRzW2FjdGlvbl0gJiYgY29tbWFuZHNbYWN0aW9uXS5lbmFibGVkLmFwcGx5KGVsZW0sIFtpbnN0XSkpIHtcclxuXHRcdFx0XHRcdGNvbW1hbmRzW2FjdGlvbl0uYWN0aW9uLmFwcGx5KGVsZW0sIFtpbnN0XSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBTZXQgdGhlIGN1cnJlbnRseSBzaG93biBtb250aCwgZGVmYXVsdGluZyB0byB0b2RheSdzLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXHJcblx0XHRcdEBwYXJhbSBbeWVhcl0ge251bWJlcn0gVGhlIHllYXIgdG8gc2hvdy5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIHNob3cgKDEtMTIpLlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBzaG93LlxyXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnc2hvd01vbnRoJywgMjAxNCwgMTIsIDI1KSAqL1xyXG5cdFx0c2hvd01vbnRoOiBmdW5jdGlvbihlbGVtLCB5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkgJiYgKGRheSAhPSBudWxsIHx8XHJcblx0XHRcdFx0XHQoaW5zdC5kcmF3RGF0ZS55ZWFyKCkgIT09IHllYXIgfHwgaW5zdC5kcmF3RGF0ZS5tb250aCgpICE9PSBtb250aCkpKSB7XHJcblx0XHRcdFx0aW5zdC5wcmV2RGF0ZSA9IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpO1xyXG5cdFx0XHRcdHZhciBjYWxlbmRhciA9IGluc3Qub3B0aW9ucy5jYWxlbmRhcjtcclxuXHRcdFx0XHR2YXIgc2hvdyA9IHRoaXMuX2NoZWNrTWluTWF4KCh5ZWFyICE9IG51bGwgP1xyXG5cdFx0XHRcdFx0Y2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBtb250aCwgMSkgOiBjYWxlbmRhci50b2RheSgpKSwgaW5zdCk7XHJcblx0XHRcdFx0aW5zdC5kcmF3RGF0ZS5kYXRlKHNob3cueWVhcigpLCBzaG93Lm1vbnRoKCksIFxyXG5cdFx0XHRcdFx0KGRheSAhPSBudWxsID8gZGF5IDogTWF0aC5taW4oaW5zdC5kcmF3RGF0ZS5kYXkoKSxcclxuXHRcdFx0XHRcdGNhbGVuZGFyLmRheXNJbk1vbnRoKHNob3cueWVhcigpLCBzaG93Lm1vbnRoKCkpKSkpO1xyXG5cdFx0XHRcdHRoaXMuX3VwZGF0ZShlbGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQWRqdXN0IHRoZSBjdXJyZW50bHkgc2hvd24gbW9udGguXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGFmZmVjdC5cclxuXHRcdFx0QHBhcmFtIG9mZnNldCB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIG1vbnRocyB0byBjaGFuZ2UgYnkuXHJcblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdjaGFuZ2VNb250aCcsIDIpKi9cclxuXHRcdGNoYW5nZU1vbnRoOiBmdW5jdGlvbihlbGVtLCBvZmZzZXQpIHtcclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xyXG5cdFx0XHRcdHZhciBkYXRlID0gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuYWRkKG9mZnNldCwgJ20nKTtcclxuXHRcdFx0XHR0aGlzLnNob3dNb250aChlbGVtLCBkYXRlLnllYXIoKSwgZGF0ZS5tb250aCgpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQWRqdXN0IHRoZSBjdXJyZW50bHkgc2hvd24gZGF5LlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXHJcblx0XHRcdEBwYXJhbSBvZmZzZXQge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzIHRvIGNoYW5nZSBieS5cclxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuZGF0ZXBpY2soJ2NoYW5nZURheScsIDcpKi9cclxuXHRcdGNoYW5nZURheTogZnVuY3Rpb24oZWxlbSwgb2Zmc2V0KSB7XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcclxuXHRcdFx0XHR2YXIgZGF0ZSA9IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZChvZmZzZXQsICdkJyk7XHJcblx0XHRcdFx0dGhpcy5zaG93TW9udGgoZWxlbSwgZGF0ZS55ZWFyKCksIGRhdGUubW9udGgoKSwgZGF0ZS5kYXkoKSk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJlc3RyaWN0IGEgZGF0ZSB0byB0aGUgbWluaW11bS9tYXhpbXVtIHNwZWNpZmllZC5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBkYXRlIHRvIGNoZWNrLlxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy4gKi9cclxuXHRcdF9jaGVja01pbk1heDogZnVuY3Rpb24oZGF0ZSwgaW5zdCkge1xyXG5cdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuZ2V0KCdtaW5EYXRlJyk7XHJcblx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcclxuXHRcdFx0ZGF0ZSA9IChtaW5EYXRlICYmIGRhdGUuY29tcGFyZVRvKG1pbkRhdGUpID09PSAtMSA/IG1pbkRhdGUubmV3RGF0ZSgpIDogZGF0ZSk7XHJcblx0XHRcdGRhdGUgPSAobWF4RGF0ZSAmJiBkYXRlLmNvbXBhcmVUbyhtYXhEYXRlKSA9PT0gKzEgPyBtYXhEYXRlLm5ld0RhdGUoKSA6IGRhdGUpO1xyXG5cdFx0XHRyZXR1cm4gZGF0ZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBkYXRlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbnRyeSBpbiB0aGUgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIHRhcmdldCB7RWxlbWVudH0gVGhlIHNlbGVjdGVkIGRhdGVwaWNrZXIgZWxlbWVudC5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBjb3JyZXNwb25kaW5nIGRhdGUsIG9yIDxjb2RlPm51bGw8L2NvZGU+Llx0XHRcdFxyXG5cdFx0XHRAZXhhbXBsZSB2YXIgZGF0ZSA9ICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdyZXRyaWV2ZURhdGUnLCAkKCdkaXYuZGF0ZXBpY2stcG9wdXAgYTpjb250YWlucygxMCknKVswXSkgKi9cclxuXHRcdHJldHJpZXZlRGF0ZTogZnVuY3Rpb24oZWxlbSwgdGFyZ2V0KSB7XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0cmV0dXJuICgkLmlzRW1wdHlPYmplY3QoaW5zdCkgPyBudWxsIDogaW5zdC5vcHRpb25zLmNhbGVuZGFyLmZyb21KRChcclxuXHRcdFx0XHRwYXJzZUZsb2F0KHRhcmdldC5jbGFzc05hbWUucmVwbGFjZSgvXi4qamQoXFxkK1xcLjUpLiokLywgJyQxJykpKSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBTZWxlY3QgYSBkYXRlIGZvciB0aGlzIGRhdGVwaWNrZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSB0YXJnZXQge0VsZW1lbnR9IFRoZSBzZWxlY3RlZCBkYXRlcGlja2VyIGVsZW1lbnQuXHJcblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdzZWxlY3REYXRlJywgJCgnZGl2LmRhdGVwaWNrLXBvcHVwIGE6Y29udGFpbnMoMTApJylbMF0pICovXHJcblx0XHRzZWxlY3REYXRlOiBmdW5jdGlvbihlbGVtLCB0YXJnZXQpIHtcclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSAmJiAhdGhpcy5pc0Rpc2FibGVkKGVsZW0pKSB7XHJcblx0XHRcdFx0dmFyIGRhdGUgPSB0aGlzLnJldHJpZXZlRGF0ZShlbGVtLCB0YXJnZXQpO1xyXG5cdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QpIHtcclxuXHRcdFx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0aWYgKGRhdGUuY29tcGFyZVRvKGluc3Quc2VsZWN0ZWREYXRlc1tpXSkgPT09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXMuc3BsaWNlKGksIDEpO1xyXG5cdFx0XHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCFmb3VuZCAmJiBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoIDwgaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0KSB7XHJcblx0XHRcdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcy5wdXNoKGRhdGUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QpIHtcclxuXHRcdFx0XHRcdGlmIChpbnN0LnBpY2tpbmdSYW5nZSkge1xyXG5cdFx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXNbMV0gPSBkYXRlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IFtkYXRlLCBkYXRlXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGluc3QucGlja2luZ1JhbmdlID0gIWluc3QucGlja2luZ1JhbmdlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IFtkYXRlXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aW5zdC5wcmV2RGF0ZSA9IGluc3QuZHJhd0RhdGUgPSBkYXRlLm5ld0RhdGUoKTtcclxuXHRcdFx0XHR0aGlzLl91cGRhdGVJbnB1dChlbGVtKTtcclxuXHRcdFx0XHRpZiAoaW5zdC5pbmxpbmUgfHwgaW5zdC5waWNraW5nUmFuZ2UgfHwgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aCA8XHJcblx0XHRcdFx0XHRcdChpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgfHwgKGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCA/IDIgOiAxKSkpIHtcclxuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZShlbGVtKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLmhpZGUoZWxlbSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBHZW5lcmF0ZSB0aGUgZGF0ZXBpY2tlciBjb250ZW50IGZvciB0aGlzIGNvbnRyb2wuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGFmZmVjdC5cclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEByZXR1cm4ge2pRdWVyeX0gVGhlIGRhdGVwaWNrZXIgY29udGVudCAqL1xyXG5cdFx0X2dlbmVyYXRlQ29udGVudDogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xyXG5cdFx0XHR2YXIgbW9udGhzVG9TaG93ID0gaW5zdC5vcHRpb25zLm1vbnRoc1RvU2hvdztcclxuXHRcdFx0bW9udGhzVG9TaG93ID0gKCQuaXNBcnJheShtb250aHNUb1Nob3cpID8gbW9udGhzVG9TaG93IDogWzEsIG1vbnRoc1RvU2hvd10pO1xyXG5cdFx0XHRpbnN0LmRyYXdEYXRlID0gdGhpcy5fY2hlY2tNaW5NYXgoXHJcblx0XHRcdFx0aW5zdC5kcmF3RGF0ZSB8fCBpbnN0LmdldCgnZGVmYXVsdERhdGUnKSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKSwgaW5zdCk7XHJcblx0XHRcdHZhciBkcmF3RGF0ZSA9IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZCgtaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKTtcclxuXHRcdFx0Ly8gR2VuZXJhdGUgbW9udGhzXHJcblx0XHRcdHZhciBtb250aFJvd3MgPSAnJztcclxuXHRcdFx0Zm9yICh2YXIgcm93ID0gMDsgcm93IDwgbW9udGhzVG9TaG93WzBdOyByb3crKykge1xyXG5cdFx0XHRcdHZhciBtb250aHMgPSAnJztcclxuXHRcdFx0XHRmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBtb250aHNUb1Nob3dbMV07IGNvbCsrKSB7XHJcblx0XHRcdFx0XHRtb250aHMgKz0gdGhpcy5fZ2VuZXJhdGVNb250aChlbGVtLCBpbnN0LCBkcmF3RGF0ZS55ZWFyKCksXHJcblx0XHRcdFx0XHRcdGRyYXdEYXRlLm1vbnRoKCksIGluc3Qub3B0aW9ucy5jYWxlbmRhciwgaW5zdC5vcHRpb25zLnJlbmRlcmVyLCAocm93ID09PSAwICYmIGNvbCA9PT0gMCkpO1xyXG5cdFx0XHRcdFx0ZHJhd0RhdGUuYWRkKDEsICdtJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdG1vbnRoUm93cyArPSB0aGlzLl9wcmVwYXJlKGluc3Qub3B0aW9ucy5yZW5kZXJlci5tb250aFJvdywgaW5zdCkucmVwbGFjZSgvXFx7bW9udGhzXFx9LywgbW9udGhzKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgcGlja2VyID0gdGhpcy5fcHJlcGFyZShpbnN0Lm9wdGlvbnMucmVuZGVyZXIucGlja2VyLCBpbnN0KS5yZXBsYWNlKC9cXHttb250aHNcXH0vLCBtb250aFJvd3MpLlxyXG5cdFx0XHRcdHJlcGxhY2UoL1xce3dlZWtIZWFkZXJcXH0vZywgdGhpcy5fZ2VuZXJhdGVEYXlIZWFkZXJzKGluc3QsIGluc3Qub3B0aW9ucy5jYWxlbmRhciwgaW5zdC5vcHRpb25zLnJlbmRlcmVyKSk7XHJcblx0XHRcdC8vIEFkZCBjb21tYW5kc1xyXG5cdFx0XHR2YXIgYWRkQ29tbWFuZCA9IGZ1bmN0aW9uKHR5cGUsIG9wZW4sIGNsb3NlLCBuYW1lLCBjbGFzc2VzKSB7XHJcblx0XHRcdFx0aWYgKHBpY2tlci5pbmRleE9mKCd7JyArIHR5cGUgKyAnOicgKyBuYW1lICsgJ30nKSA9PT0gLTEpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIGNvbW1hbmQgPSBpbnN0Lm9wdGlvbnMuY29tbWFuZHNbbmFtZV07XHJcblx0XHRcdFx0dmFyIGRhdGUgPSAoaW5zdC5vcHRpb25zLmNvbW1hbmRzQXNEYXRlRm9ybWF0ID8gY29tbWFuZC5kYXRlLmFwcGx5KGVsZW0sIFtpbnN0XSkgOiBudWxsKTtcclxuXHRcdFx0XHRwaWNrZXIgPSBwaWNrZXIucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxceycgKyB0eXBlICsgJzonICsgbmFtZSArICdcXFxcfScsICdnJyksXHJcblx0XHRcdFx0XHQnPCcgKyBvcGVuICsgKGNvbW1hbmQuc3RhdHVzID8gJyB0aXRsZT1cIicgKyBpbnN0Lm9wdGlvbnNbY29tbWFuZC5zdGF0dXNdICsgJ1wiJyA6ICcnKSArXHJcblx0XHRcdFx0XHQnIGNsYXNzPVwiJyArIGluc3Qub3B0aW9ucy5yZW5kZXJlci5jb21tYW5kQ2xhc3MgKyAnICcgK1xyXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRDbGFzcyArICctJyArIG5hbWUgKyAnICcgKyBjbGFzc2VzICtcclxuXHRcdFx0XHRcdChjb21tYW5kLmVuYWJsZWQoaW5zdCkgPyAnJyA6ICcgJyArIGluc3Qub3B0aW9ucy5yZW5kZXJlci5kaXNhYmxlZENsYXNzKSArICdcIj4nICtcclxuXHRcdFx0XHRcdChkYXRlID8gZGF0ZS5mb3JtYXREYXRlKGluc3Qub3B0aW9uc1tjb21tYW5kLnRleHRdKSA6XHJcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnNbY29tbWFuZC50ZXh0XSkgKyAnPC8nICsgY2xvc2UgKyAnPicpO1xyXG5cdFx0XHR9O1xyXG5cdFx0XHRmb3IgKHZhciBuYW1lIGluIGluc3Qub3B0aW9ucy5jb21tYW5kcykge1xyXG5cdFx0XHRcdGFkZENvbW1hbmQoJ2J1dHRvbicsICdidXR0b24gdHlwZT1cImJ1dHRvblwiJywgJ2J1dHRvbicsIG5hbWUsXHJcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMucmVuZGVyZXIuY29tbWFuZEJ1dHRvbkNsYXNzKTtcclxuXHRcdFx0XHRhZGRDb21tYW5kKCdsaW5rJywgJ2EgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiJywgJ2EnLCBuYW1lLFxyXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRMaW5rQ2xhc3MpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHBpY2tlciA9ICQocGlja2VyKTtcclxuXHRcdFx0aWYgKG1vbnRoc1RvU2hvd1sxXSA+IDEpIHtcclxuXHRcdFx0XHR2YXIgY291bnQgPSAwO1xyXG5cdFx0XHRcdCQoaW5zdC5vcHRpb25zLnJlbmRlcmVyLm1vbnRoU2VsZWN0b3IsIHBpY2tlcikuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHZhciBudGggPSArK2NvdW50ICUgbW9udGhzVG9TaG93WzFdO1xyXG5cdFx0XHRcdFx0JCh0aGlzKS5hZGRDbGFzcyhudGggPT09IDEgPyAnZmlyc3QnIDogKG50aCA9PT0gMCA/ICdsYXN0JyA6ICcnKSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gQWRkIGRhdGVwaWNrZXIgYmVoYXZpb3VyXHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0ZnVuY3Rpb24gcmVtb3ZlSGlnaGxpZ2h0KCkge1xyXG5cdFx0XHRcdChpbnN0LmlubGluZSA/ICQodGhpcykuY2xvc2VzdCgnLicgKyBzZWxmLl9nZXRNYXJrZXIoKSkgOiBpbnN0LmRpdikuXHJcblx0XHRcdFx0XHRmaW5kKGluc3Qub3B0aW9ucy5yZW5kZXJlci5kYXlTZWxlY3RvciArICcgYScpLlxyXG5cdFx0XHRcdFx0cmVtb3ZlQ2xhc3MoaW5zdC5vcHRpb25zLnJlbmRlcmVyLmhpZ2hsaWdodGVkQ2xhc3MpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHBpY2tlci5maW5kKGluc3Qub3B0aW9ucy5yZW5kZXJlci5kYXlTZWxlY3RvciArICcgYScpLmhvdmVyKFxyXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdHJlbW92ZUhpZ2hsaWdodC5hcHBseSh0aGlzKTtcclxuXHRcdFx0XHRcdFx0JCh0aGlzKS5hZGRDbGFzcyhpbnN0Lm9wdGlvbnMucmVuZGVyZXIuaGlnaGxpZ2h0ZWRDbGFzcyk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0cmVtb3ZlSGlnaGxpZ2h0KS5cclxuXHRcdFx0XHRjbGljayhmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHNlbGYuc2VsZWN0RGF0ZShlbGVtLCB0aGlzKTtcclxuXHRcdFx0XHR9KS5lbmQoKS5cclxuXHRcdFx0XHRmaW5kKCdzZWxlY3QuJyArIHRoaXMuX21vbnRoWWVhckNsYXNzICsgJzpub3QoLicgKyB0aGlzLl9hbnlZZWFyQ2xhc3MgKyAnKScpLlxyXG5cdFx0XHRcdGNoYW5nZShmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHZhciBtb250aFllYXIgPSAkKHRoaXMpLnZhbCgpLnNwbGl0KCcvJyk7XHJcblx0XHRcdFx0XHRzZWxmLnNob3dNb250aChlbGVtLCBwYXJzZUludChtb250aFllYXJbMV0sIDEwKSwgcGFyc2VJbnQobW9udGhZZWFyWzBdLCAxMCkpO1xyXG5cdFx0XHRcdH0pLmVuZCgpLlxyXG5cdFx0XHRcdGZpbmQoJ3NlbGVjdC4nICsgdGhpcy5fYW55WWVhckNsYXNzKS5jbGljayhmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdCQodGhpcykuY3NzKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpLlxyXG5cdFx0XHRcdFx0XHRuZXh0KCdpbnB1dCcpLmNzcyh7bGVmdDogdGhpcy5vZmZzZXRMZWZ0LCB0b3A6IHRoaXMub2Zmc2V0VG9wLFxyXG5cdFx0XHRcdFx0XHR3aWR0aDogdGhpcy5vZmZzZXRXaWR0aCwgaGVpZ2h0OiB0aGlzLm9mZnNldEhlaWdodH0pLnNob3coKS5mb2N1cygpO1xyXG5cdFx0XHRcdH0pLmVuZCgpLlxyXG5cdFx0XHRcdGZpbmQoJ2lucHV0LicgKyBzZWxmLl9tb250aFllYXJDbGFzcykuY2hhbmdlKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0dmFyIHllYXIgPSBwYXJzZUludCgkKHRoaXMpLnZhbCgpLCAxMCk7XHJcblx0XHRcdFx0XHRcdHllYXIgPSAoaXNOYU4oeWVhcikgPyBpbnN0LmRyYXdEYXRlLnllYXIoKSA6IHllYXIpO1xyXG5cdFx0XHRcdFx0XHRzZWxmLnNob3dNb250aChlbGVtLCB5ZWFyLCBpbnN0LmRyYXdEYXRlLm1vbnRoKCksIGluc3QuZHJhd0RhdGUuZGF5KCkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRcdFx0YWxlcnQoZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSkua2V5ZG93bihmdW5jdGlvbihldmVudCkge1xyXG5cdFx0XHRcdFx0aWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7IC8vIEVudGVyXHJcblx0XHRcdFx0XHRcdCQoZXZlbnQuZWxlbSkuY2hhbmdlKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSAyNykgeyAvLyBFc2NhcGVcclxuXHRcdFx0XHRcdFx0JChldmVudC5lbGVtKS5oaWRlKCkucHJldignc2VsZWN0JykuY3NzKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcclxuXHRcdFx0XHRcdFx0aW5zdC5lbGVtLmZvY3VzKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdC8vIEFkZCBrZXlib2FyZCBoYW5kbGluZ1xyXG5cdFx0XHR2YXIgZGF0YSA9IHtlbGVtOiBpbnN0LmVsZW1bMF19O1xyXG5cdFx0XHRwaWNrZXIua2V5ZG93bihkYXRhLCB0aGlzLl9rZXlEb3duKS5rZXlwcmVzcyhkYXRhLCB0aGlzLl9rZXlQcmVzcykua2V5dXAoZGF0YSwgdGhpcy5fa2V5VXApO1xyXG5cdFx0XHQvLyBBZGQgY29tbWFuZCBiZWhhdmlvdXJcclxuXHRcdFx0cGlja2VyLmZpbmQoJy4nICsgaW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRDbGFzcykuY2xpY2soZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRpZiAoISQodGhpcykuaGFzQ2xhc3MoaW5zdC5vcHRpb25zLnJlbmRlcmVyLmRpc2FibGVkQ2xhc3MpKSB7XHJcblx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSB0aGlzLmNsYXNzTmFtZS5yZXBsYWNlKFxyXG5cdFx0XHRcdFx0XHRcdG5ldyBSZWdFeHAoJ14uKicgKyBpbnN0Lm9wdGlvbnMucmVuZGVyZXIuY29tbWFuZENsYXNzICsgJy0oW14gXSspLiokJyksICckMScpO1xyXG5cdFx0XHRcdFx0XHRwbHVnaW4ucGVyZm9ybUFjdGlvbihlbGVtLCBhY3Rpb24pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHQvLyBBZGQgY2xhc3Nlc1xyXG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLmlzUlRMKSB7XHJcblx0XHRcdFx0cGlja2VyLmFkZENsYXNzKGluc3Qub3B0aW9ucy5yZW5kZXJlci5ydGxDbGFzcyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKG1vbnRoc1RvU2hvd1swXSAqIG1vbnRoc1RvU2hvd1sxXSA+IDEpIHtcclxuXHRcdFx0XHRwaWNrZXIuYWRkQ2xhc3MoaW5zdC5vcHRpb25zLnJlbmRlcmVyLm11bHRpQ2xhc3MpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucGlja2VyQ2xhc3MpIHtcclxuXHRcdFx0XHRwaWNrZXIuYWRkQ2xhc3MoaW5zdC5vcHRpb25zLnBpY2tlckNsYXNzKTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBSZXNpemVcclxuXHRcdFx0JCgnYm9keScpLmFwcGVuZChwaWNrZXIpO1xyXG5cdFx0XHR2YXIgd2lkdGggPSAwO1xyXG5cdFx0XHRwaWNrZXIuZmluZChpbnN0Lm9wdGlvbnMucmVuZGVyZXIubW9udGhTZWxlY3RvcikuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHR3aWR0aCArPSAkKHRoaXMpLm91dGVyV2lkdGgoKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHBpY2tlci53aWR0aCh3aWR0aCAvIG1vbnRoc1RvU2hvd1swXSk7XHJcblx0XHRcdC8vIFByZS1zaG93IGN1c3RvbWlzYXRpb25cclxuXHRcdFx0aWYgKCQuaXNGdW5jdGlvbihpbnN0Lm9wdGlvbnMub25TaG93KSkge1xyXG5cdFx0XHRcdGluc3Qub3B0aW9ucy5vblNob3cuYXBwbHkoZWxlbSwgW3BpY2tlciwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLCBpbnN0XSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHBpY2tlcjtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEdlbmVyYXRlIHRoZSBjb250ZW50IGZvciBhIHNpbmdsZSBtb250aC5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIHllYXIgdG8gZ2VuZXJhdGUuXHJcblx0XHRcdEBwYXJhbSBtb250aCB7bnVtYmVyfSBUaGUgbW9udGggdG8gZ2VuZXJhdGUuXHJcblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY3VycmVudCBjYWxlbmRhci5cclxuXHRcdFx0QHBhcmFtIHJlbmRlcmVyIHtvYmplY3R9IFRoZSByZW5kZXJpbmcgdGVtcGxhdGVzLlxyXG5cdFx0XHRAcGFyYW0gZmlyc3Qge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGZpcnN0IG9mIG11bHRpcGxlIG1vbnRocy5cclxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgbW9udGggY29udGVudC4gKi9cclxuXHRcdF9nZW5lcmF0ZU1vbnRoOiBmdW5jdGlvbihlbGVtLCBpbnN0LCB5ZWFyLCBtb250aCwgY2FsZW5kYXIsIHJlbmRlcmVyLCBmaXJzdCkge1xyXG5cdFx0XHR2YXIgZGF5c0luTW9udGggPSBjYWxlbmRhci5kYXlzSW5Nb250aCh5ZWFyLCBtb250aCk7XHJcblx0XHRcdHZhciBtb250aHNUb1Nob3cgPSBpbnN0Lm9wdGlvbnMubW9udGhzVG9TaG93O1xyXG5cdFx0XHRtb250aHNUb1Nob3cgPSAoJC5pc0FycmF5KG1vbnRoc1RvU2hvdykgPyBtb250aHNUb1Nob3cgOiBbMSwgbW9udGhzVG9TaG93XSk7XHJcblx0XHRcdHZhciBmaXhlZFdlZWtzID0gaW5zdC5vcHRpb25zLmZpeGVkV2Vla3MgfHwgKG1vbnRoc1RvU2hvd1swXSAqIG1vbnRoc1RvU2hvd1sxXSA+IDEpO1xyXG5cdFx0XHR2YXIgZmlyc3REYXkgPSBpbnN0Lm9wdGlvbnMuZmlyc3REYXk7XHJcblx0XHRcdGZpcnN0RGF5ID0gKGZpcnN0RGF5ID09IG51bGwgPyBjYWxlbmRhci5sb2NhbC5maXJzdERheSA6IGZpcnN0RGF5KTtcclxuXHRcdFx0dmFyIGxlYWREYXlzID0gKGNhbGVuZGFyLmRheU9mV2Vlayh5ZWFyLCBtb250aCwgY2FsZW5kYXIubWluRGF5KSAtXHJcblx0XHRcdFx0Zmlyc3REYXkgKyBjYWxlbmRhci5kYXlzSW5XZWVrKCkpICUgY2FsZW5kYXIuZGF5c0luV2VlaygpO1xyXG5cdFx0XHR2YXIgbnVtV2Vla3MgPSAoZml4ZWRXZWVrcyA/IDYgOiBNYXRoLmNlaWwoKGxlYWREYXlzICsgZGF5c0luTW9udGgpIC8gY2FsZW5kYXIuZGF5c0luV2VlaygpKSk7XHJcblx0XHRcdHZhciBzZWxlY3RPdGhlck1vbnRocyA9IGluc3Qub3B0aW9ucy5zZWxlY3RPdGhlck1vbnRocyAmJiBpbnN0Lm9wdGlvbnMuc2hvd090aGVyTW9udGhzO1xyXG5cdFx0XHR2YXIgbWluRGF0ZSA9IChpbnN0LnBpY2tpbmdSYW5nZSA/IGluc3Quc2VsZWN0ZWREYXRlc1swXSA6IGluc3QuZ2V0KCdtaW5EYXRlJykpO1xyXG5cdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XHJcblx0XHRcdHZhciBzaG93V2Vla3MgPSByZW5kZXJlci53ZWVrLmluZGV4T2YoJ3t3ZWVrT2ZZZWFyfScpID4gLTE7XHJcblx0XHRcdHZhciB0b2RheSA9IGNhbGVuZGFyLnRvZGF5KCk7XHJcblx0XHRcdHZhciBkcmF3RGF0ZSA9IGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbW9udGgsIGNhbGVuZGFyLm1pbkRheSk7XHJcblx0XHRcdGRyYXdEYXRlLmFkZCgtbGVhZERheXMgLSAoZml4ZWRXZWVrcyAmJlxyXG5cdFx0XHRcdChkcmF3RGF0ZS5kYXlPZldlZWsoKSA9PT0gZmlyc3REYXkgfHwgZHJhd0RhdGUuZGF5c0luTW9udGgoKSA8IGNhbGVuZGFyLmRheXNJbldlZWsoKSk/XHJcblx0XHRcdFx0Y2FsZW5kYXIuZGF5c0luV2VlaygpIDogMCksICdkJyk7XHJcblx0XHRcdHZhciBqZCA9IGRyYXdEYXRlLnRvSkQoKTtcclxuXHRcdFx0Ly8gR2VuZXJhdGUgd2Vla3NcclxuXHRcdFx0dmFyIHdlZWtzID0gJyc7XHJcblx0XHRcdGZvciAodmFyIHdlZWsgPSAwOyB3ZWVrIDwgbnVtV2Vla3M7IHdlZWsrKykge1xyXG5cdFx0XHRcdHZhciB3ZWVrT2ZZZWFyID0gKCFzaG93V2Vla3MgPyAnJyA6ICc8c3BhbiBjbGFzcz1cImpkJyArIGpkICsgJ1wiPicgK1xyXG5cdFx0XHRcdFx0KCQuaXNGdW5jdGlvbihpbnN0Lm9wdGlvbnMuY2FsY3VsYXRlV2VlaykgP1xyXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLmNhbGN1bGF0ZVdlZWsoZHJhd0RhdGUpIDogZHJhd0RhdGUud2Vla09mWWVhcigpKSArICc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0dmFyIGRheXMgPSAnJztcclxuXHRcdFx0XHRmb3IgKHZhciBkYXkgPSAwOyBkYXkgPCBjYWxlbmRhci5kYXlzSW5XZWVrKCk7IGRheSsrKSB7XHJcblx0XHRcdFx0XHR2YXIgc2VsZWN0ZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgJiYgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0c2VsZWN0ZWQgPSAoZHJhd0RhdGUuY29tcGFyZVRvKGluc3Quc2VsZWN0ZWREYXRlc1swXSkgIT09IC0xICYmXHJcblx0XHRcdFx0XHRcdFx0ZHJhd0RhdGUuY29tcGFyZVRvKGluc3Quc2VsZWN0ZWREYXRlc1sxXSkgIT09ICsxKVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGluc3Quc2VsZWN0ZWREYXRlc1tpXS5jb21wYXJlVG8oZHJhd0RhdGUpID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzZWxlY3RlZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHZhciBkYXRlSW5mbyA9ICghJC5pc0Z1bmN0aW9uKGluc3Qub3B0aW9ucy5vbkRhdGUpID8ge30gOlxyXG5cdFx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMub25EYXRlLmFwcGx5KGVsZW0sIFtkcmF3RGF0ZSwgZHJhd0RhdGUubW9udGgoKSA9PT0gbW9udGhdKSk7XHJcblx0XHRcdFx0XHR2YXIgc2VsZWN0YWJsZSA9IChzZWxlY3RPdGhlck1vbnRocyB8fCBkcmF3RGF0ZS5tb250aCgpID09PSBtb250aCkgJiZcclxuXHRcdFx0XHRcdFx0dGhpcy5faXNTZWxlY3RhYmxlKGVsZW0sIGRyYXdEYXRlLCBkYXRlSW5mby5zZWxlY3RhYmxlLCBtaW5EYXRlLCBtYXhEYXRlKTtcclxuXHRcdFx0XHRcdGRheXMgKz0gdGhpcy5fcHJlcGFyZShyZW5kZXJlci5kYXksIGluc3QpLnJlcGxhY2UoL1xce2RheVxcfS9nLFxyXG5cdFx0XHRcdFx0XHQoc2VsZWN0YWJsZSA/ICc8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCInIDogJzxzcGFuJykgK1xyXG5cdFx0XHRcdFx0XHQnIGNsYXNzPVwiamQnICsgamQgKyAnICcgKyAoZGF0ZUluZm8uZGF0ZUNsYXNzIHx8ICcnKSArXHJcblx0XHRcdFx0XHRcdChzZWxlY3RlZCAmJiAoc2VsZWN0T3RoZXJNb250aHMgfHwgZHJhd0RhdGUubW9udGgoKSA9PT0gbW9udGgpID9cclxuXHRcdFx0XHRcdFx0JyAnICsgcmVuZGVyZXIuc2VsZWN0ZWRDbGFzcyA6ICcnKSArXHJcblx0XHRcdFx0XHRcdChzZWxlY3RhYmxlID8gJyAnICsgcmVuZGVyZXIuZGVmYXVsdENsYXNzIDogJycpICtcclxuXHRcdFx0XHRcdFx0KGRyYXdEYXRlLndlZWtEYXkoKSA/ICcnIDogJyAnICsgcmVuZGVyZXIud2Vla2VuZENsYXNzKSArXHJcblx0XHRcdFx0XHRcdChkcmF3RGF0ZS5tb250aCgpID09PSBtb250aCA/ICcnIDogJyAnICsgcmVuZGVyZXIub3RoZXJNb250aENsYXNzKSArXHJcblx0XHRcdFx0XHRcdChkcmF3RGF0ZS5jb21wYXJlVG8odG9kYXkpID09PSAwICYmIGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoID9cclxuXHRcdFx0XHRcdFx0JyAnICsgcmVuZGVyZXIudG9kYXlDbGFzcyA6ICcnKSArXHJcblx0XHRcdFx0XHRcdChkcmF3RGF0ZS5jb21wYXJlVG8oaW5zdC5kcmF3RGF0ZSkgPT09IDAgJiYgZHJhd0RhdGUubW9udGgoKSA9PT0gbW9udGggP1xyXG5cdFx0XHRcdFx0XHQnICcgKyByZW5kZXJlci5oaWdobGlnaHRlZENsYXNzIDogJycpICsgJ1wiJyArXHJcblx0XHRcdFx0XHRcdChkYXRlSW5mby50aXRsZSB8fCAoaW5zdC5vcHRpb25zLmRheVN0YXR1cyAmJiBzZWxlY3RhYmxlKSA/ICcgdGl0bGU9XCInICtcclxuXHRcdFx0XHRcdFx0KGRhdGVJbmZvLnRpdGxlIHx8IGRyYXdEYXRlLmZvcm1hdERhdGUoaW5zdC5vcHRpb25zLmRheVN0YXR1cykpICsgJ1wiJyA6ICcnKSArICc+JyArXHJcblx0XHRcdFx0XHRcdChpbnN0Lm9wdGlvbnMuc2hvd090aGVyTW9udGhzIHx8IGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoID9cclxuXHRcdFx0XHRcdFx0ZGF0ZUluZm8uY29udGVudCB8fCBkcmF3RGF0ZS5kYXkoKSA6ICcmIzE2MDsnKSArXHJcblx0XHRcdFx0XHRcdChzZWxlY3RhYmxlID8gJzwvYT4nIDogJzwvc3Bhbj4nKSk7XHJcblx0XHRcdFx0XHRkcmF3RGF0ZS5hZGQoMSwgJ2QnKTtcclxuXHRcdFx0XHRcdGpkKys7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHdlZWtzICs9IHRoaXMuX3ByZXBhcmUocmVuZGVyZXIud2VlaywgaW5zdCkucmVwbGFjZSgvXFx7ZGF5c1xcfS9nLCBkYXlzKS5cclxuXHRcdFx0XHRcdHJlcGxhY2UoL1xce3dlZWtPZlllYXJcXH0vZywgd2Vla09mWWVhcik7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIG1vbnRoSGVhZGVyID0gdGhpcy5fcHJlcGFyZShyZW5kZXJlci5tb250aCwgaW5zdCkubWF0Y2goL1xce21vbnRoSGVhZGVyKDpbXlxcfV0rKT9cXH0vKTtcclxuXHRcdFx0bW9udGhIZWFkZXIgPSAobW9udGhIZWFkZXJbMF0ubGVuZ3RoIDw9IDEzID8gJ01NIHl5eXknIDpcclxuXHRcdFx0XHRtb250aEhlYWRlclswXS5zdWJzdHJpbmcoMTMsIG1vbnRoSGVhZGVyWzBdLmxlbmd0aCAtIDEpKTtcclxuXHRcdFx0bW9udGhIZWFkZXIgPSAoZmlyc3QgPyB0aGlzLl9nZW5lcmF0ZU1vbnRoU2VsZWN0aW9uKFxyXG5cdFx0XHRcdGluc3QsIHllYXIsIG1vbnRoLCBtaW5EYXRlLCBtYXhEYXRlLCBtb250aEhlYWRlciwgY2FsZW5kYXIsIHJlbmRlcmVyKSA6XHJcblx0XHRcdFx0Y2FsZW5kYXIuZm9ybWF0RGF0ZShtb250aEhlYWRlciwgY2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBtb250aCwgY2FsZW5kYXIubWluRGF5KSkpO1xyXG5cdFx0XHR2YXIgd2Vla0hlYWRlciA9IHRoaXMuX3ByZXBhcmUocmVuZGVyZXIud2Vla0hlYWRlciwgaW5zdCkuXHJcblx0XHRcdFx0cmVwbGFjZSgvXFx7ZGF5c1xcfS9nLCB0aGlzLl9nZW5lcmF0ZURheUhlYWRlcnMoaW5zdCwgY2FsZW5kYXIsIHJlbmRlcmVyKSk7XHJcblx0XHRcdHJldHVybiB0aGlzLl9wcmVwYXJlKHJlbmRlcmVyLm1vbnRoLCBpbnN0KS5yZXBsYWNlKC9cXHttb250aEhlYWRlcig6W15cXH1dKyk/XFx9L2csIG1vbnRoSGVhZGVyKS5cclxuXHRcdFx0XHRyZXBsYWNlKC9cXHt3ZWVrSGVhZGVyXFx9L2csIHdlZWtIZWFkZXIpLnJlcGxhY2UoL1xce3dlZWtzXFx9L2csIHdlZWtzKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEdlbmVyYXRlIHRoZSBIVE1MIGZvciB0aGUgZGF5IGhlYWRlcnMuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY3VycmVudCBjYWxlbmRhci5cclxuXHRcdFx0QHBhcmFtIHJlbmRlcmVyIHtvYmplY3R9IFRoZSByZW5kZXJpbmcgdGVtcGxhdGVzLlxyXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IEEgd2VlaydzIHdvcnRoIG9mIGRheSBoZWFkZXJzLiAqL1xyXG5cdFx0X2dlbmVyYXRlRGF5SGVhZGVyczogZnVuY3Rpb24oaW5zdCwgY2FsZW5kYXIsIHJlbmRlcmVyKSB7XHJcblx0XHRcdHZhciBmaXJzdERheSA9IGluc3Qub3B0aW9ucy5maXJzdERheTtcclxuXHRcdFx0Zmlyc3REYXkgPSAoZmlyc3REYXkgPT0gbnVsbCA/IGNhbGVuZGFyLmxvY2FsLmZpcnN0RGF5IDogZmlyc3REYXkpO1xyXG5cdFx0XHR2YXIgaGVhZGVyID0gJyc7XHJcblx0XHRcdGZvciAodmFyIGRheSA9IDA7IGRheSA8IGNhbGVuZGFyLmRheXNJbldlZWsoKTsgZGF5KyspIHtcclxuXHRcdFx0XHR2YXIgZG93ID0gKGRheSArIGZpcnN0RGF5KSAlIGNhbGVuZGFyLmRheXNJbldlZWsoKTtcclxuXHRcdFx0XHRoZWFkZXIgKz0gdGhpcy5fcHJlcGFyZShyZW5kZXJlci5kYXlIZWFkZXIsIGluc3QpLnJlcGxhY2UoL1xce2RheVxcfS9nLFxyXG5cdFx0XHRcdFx0JzxzcGFuIGNsYXNzPVwiJyArIHRoaXMuX2N1ckRvV0NsYXNzICsgZG93ICsgJ1wiIHRpdGxlPVwiJyArXHJcblx0XHRcdFx0XHRjYWxlbmRhci5sb2NhbC5kYXlOYW1lc1tkb3ddICsgJ1wiPicgKyBjYWxlbmRhci5sb2NhbC5kYXlOYW1lc01pbltkb3ddICsgJzwvc3Bhbj4nKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gaGVhZGVyO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogR2VuZXJhdGUgc2VsZWN0aW9uIGNvbnRyb2xzIGZvciBtb250aC5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIHllYXIgdG8gZ2VuZXJhdGUuXHJcblx0XHRcdEBwYXJhbSBtb250aCB7bnVtYmVyfSBUaGUgbW9udGggdG8gZ2VuZXJhdGUuXHJcblx0XHRcdEBwYXJhbSBtaW5EYXRlIHtDRGF0ZX0gVGhlIG1pbmltdW0gZGF0ZSBhbGxvd2VkLlxyXG5cdFx0XHRAcGFyYW0gbWF4RGF0ZSB7Q0RhdGV9IFRoZSBtYXhpbXVtIGRhdGUgYWxsb3dlZC5cclxuXHRcdFx0QHBhcmFtIG1vbnRoSGVhZGVyIHtzdHJpbmd9IFRoZSBtb250aC95ZWFyIGZvcm1hdC5cclxuXHRcdFx0QHBhcmFtIGNhbGVuZGFyIHtCYXNlQ2FsZW5kYXJ9IFRoZSBjdXJyZW50IGNhbGVuZGFyLlxyXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBtb250aCBzZWxlY3Rpb24gY29udGVudC4gKi9cclxuXHRcdF9nZW5lcmF0ZU1vbnRoU2VsZWN0aW9uOiBmdW5jdGlvbihpbnN0LCB5ZWFyLCBtb250aCwgbWluRGF0ZSwgbWF4RGF0ZSwgbW9udGhIZWFkZXIsIGNhbGVuZGFyKSB7XHJcblx0XHRcdGlmICghaW5zdC5vcHRpb25zLmNoYW5nZU1vbnRoKSB7XHJcblx0XHRcdFx0cmV0dXJuIGNhbGVuZGFyLmZvcm1hdERhdGUobW9udGhIZWFkZXIsIGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbW9udGgsIDEpKTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBNb250aHNcclxuXHRcdFx0dmFyIG1vbnRoTmFtZXMgPSBjYWxlbmRhci5sb2NhbFtcclxuXHRcdFx0XHQnbW9udGhOYW1lcycgKyAobW9udGhIZWFkZXIubWF0Y2goL21tL2kpID8gJycgOiAnU2hvcnQnKV07XHJcblx0XHRcdHZhciBodG1sID0gbW9udGhIZWFkZXIucmVwbGFjZSgvbSsvaSwgJ1xcXFx4MkUnKS5yZXBsYWNlKC95Ky9pLCAnXFxcXHgyRicpO1xyXG5cdFx0XHR2YXIgc2VsZWN0b3IgPSAnPHNlbGVjdCBjbGFzcz1cIicgKyB0aGlzLl9tb250aFllYXJDbGFzcyArXHJcblx0XHRcdFx0J1wiIHRpdGxlPVwiJyArIGluc3Qub3B0aW9ucy5tb250aFN0YXR1cyArICdcIj4nO1xyXG5cdFx0XHR2YXIgbWF4TW9udGggPSBjYWxlbmRhci5tb250aHNJblllYXIoeWVhcikgKyBjYWxlbmRhci5taW5Nb250aDtcclxuXHRcdFx0Zm9yICh2YXIgbSA9IGNhbGVuZGFyLm1pbk1vbnRoOyBtIDwgbWF4TW9udGg7IG0rKykge1xyXG5cdFx0XHRcdGlmICgoIW1pbkRhdGUgfHwgY2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBtLFxyXG5cdFx0XHRcdFx0XHRjYWxlbmRhci5kYXlzSW5Nb250aCh5ZWFyLCBtKSAtIDEgKyBjYWxlbmRhci5taW5EYXkpLlxyXG5cdFx0XHRcdFx0XHRjb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKSAmJlxyXG5cdFx0XHRcdFx0XHQoIW1heERhdGUgfHwgY2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBtLCBjYWxlbmRhci5taW5EYXkpLlxyXG5cdFx0XHRcdFx0XHRjb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKSkge1xyXG5cdFx0XHRcdFx0c2VsZWN0b3IgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgbSArICcvJyArIHllYXIgKyAnXCInICtcclxuXHRcdFx0XHRcdFx0KG1vbnRoID09PSBtID8gJyBzZWxlY3RlZD1cInNlbGVjdGVkXCInIDogJycpICsgJz4nICtcclxuXHRcdFx0XHRcdFx0bW9udGhOYW1lc1ttIC0gY2FsZW5kYXIubWluTW9udGhdICsgJzwvb3B0aW9uPic7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHNlbGVjdG9yICs9ICc8L3NlbGVjdD4nO1xyXG5cdFx0XHRodG1sID0gaHRtbC5yZXBsYWNlKC9cXFxceDJFLywgc2VsZWN0b3IpO1xyXG5cdFx0XHQvLyBZZWFyc1xyXG5cdFx0XHR2YXIgeWVhclJhbmdlID0gaW5zdC5vcHRpb25zLnllYXJSYW5nZTtcclxuXHRcdFx0aWYgKHllYXJSYW5nZSA9PT0gJ2FueScpIHtcclxuXHRcdFx0XHRzZWxlY3RvciA9ICc8c2VsZWN0IGNsYXNzPVwiJyArIHRoaXMuX21vbnRoWWVhckNsYXNzICsgJyAnICsgdGhpcy5fYW55WWVhckNsYXNzICtcclxuXHRcdFx0XHRcdCdcIiB0aXRsZT1cIicgKyBpbnN0Lm9wdGlvbnMueWVhclN0YXR1cyArICdcIj4nICtcclxuXHRcdFx0XHRcdCc8b3B0aW9uPicgKyB5ZWFyICsgJzwvb3B0aW9uPjwvc2VsZWN0PicgK1xyXG5cdFx0XHRcdFx0JzxpbnB1dCBjbGFzcz1cIicgKyB0aGlzLl9tb250aFllYXJDbGFzcyArICcgJyArIHRoaXMuX2N1ck1vbnRoQ2xhc3MgK1xyXG5cdFx0XHRcdFx0bW9udGggKyAnXCIgdmFsdWU9XCInICsgeWVhciArICdcIj4nO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdHllYXJSYW5nZSA9IHllYXJSYW5nZS5zcGxpdCgnOicpO1xyXG5cdFx0XHRcdHZhciB0b2RheVllYXIgPSBjYWxlbmRhci50b2RheSgpLnllYXIoKTtcclxuXHRcdFx0XHR2YXIgc3RhcnQgPSAoeWVhclJhbmdlWzBdLm1hdGNoKCdjWystXS4qJykgPyB5ZWFyICsgcGFyc2VJbnQoeWVhclJhbmdlWzBdLnN1YnN0cmluZygxKSwgMTApIDpcclxuXHRcdFx0XHRcdCgoeWVhclJhbmdlWzBdLm1hdGNoKCdbKy1dLionKSA/IHRvZGF5WWVhciA6IDApICsgcGFyc2VJbnQoeWVhclJhbmdlWzBdLCAxMCkpKTtcclxuXHRcdFx0XHR2YXIgZW5kID0gKHllYXJSYW5nZVsxXS5tYXRjaCgnY1srLV0uKicpID8geWVhciArIHBhcnNlSW50KHllYXJSYW5nZVsxXS5zdWJzdHJpbmcoMSksIDEwKSA6XHJcblx0XHRcdFx0XHQoKHllYXJSYW5nZVsxXS5tYXRjaCgnWystXS4qJykgPyB0b2RheVllYXIgOiAwKSArIHBhcnNlSW50KHllYXJSYW5nZVsxXSwgMTApKSk7XHJcblx0XHRcdFx0c2VsZWN0b3IgPSAnPHNlbGVjdCBjbGFzcz1cIicgKyB0aGlzLl9tb250aFllYXJDbGFzcyArXHJcblx0XHRcdFx0XHQnXCIgdGl0bGU9XCInICsgaW5zdC5vcHRpb25zLnllYXJTdGF0dXMgKyAnXCI+JztcclxuXHRcdFx0XHRzdGFydCA9IGNhbGVuZGFyLm5ld0RhdGUoc3RhcnQgKyAxLCBjYWxlbmRhci5maXJzdE1vbnRoLCBjYWxlbmRhci5taW5EYXkpLmFkZCgtMSwgJ2QnKTtcclxuXHRcdFx0XHRlbmQgPSBjYWxlbmRhci5uZXdEYXRlKGVuZCwgY2FsZW5kYXIuZmlyc3RNb250aCwgY2FsZW5kYXIubWluRGF5KTtcclxuXHRcdFx0XHR2YXIgYWRkWWVhciA9IGZ1bmN0aW9uKHksIHlEaXNwbGF5KSB7XHJcblx0XHRcdFx0XHRpZiAoeSAhPT0gMCB8fCBjYWxlbmRhci5oYXNZZWFyWmVybykge1xyXG5cdFx0XHRcdFx0XHRzZWxlY3RvciArPSAnPG9wdGlvbiB2YWx1ZT1cIicgK1xyXG5cdFx0XHRcdFx0XHRcdE1hdGgubWluKG1vbnRoLCBjYWxlbmRhci5tb250aHNJblllYXIoeSkgLSAxICsgY2FsZW5kYXIubWluTW9udGgpICtcclxuXHRcdFx0XHRcdFx0XHQnLycgKyB5ICsgJ1wiJyArICh5ZWFyID09PSB5ID8gJyBzZWxlY3RlZD1cInNlbGVjdGVkXCInIDogJycpICsgJz4nICtcclxuXHRcdFx0XHRcdFx0XHQoeURpc3BsYXkgfHwgeSkgKyAnPC9vcHRpb24+JztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGlmIChzdGFydC50b0pEKCkgPCBlbmQudG9KRCgpKSB7XHJcblx0XHRcdFx0XHRzdGFydCA9IChtaW5EYXRlICYmIG1pbkRhdGUuY29tcGFyZVRvKHN0YXJ0KSA9PT0gKzEgPyBtaW5EYXRlIDogc3RhcnQpLnllYXIoKTtcclxuXHRcdFx0XHRcdGVuZCA9IChtYXhEYXRlICYmIG1heERhdGUuY29tcGFyZVRvKGVuZCkgPT09IC0xID8gbWF4RGF0ZSA6IGVuZCkueWVhcigpO1xyXG5cdFx0XHRcdFx0dmFyIGVhcmxpZXJMYXRlciA9IE1hdGguZmxvb3IoKGVuZCAtIHN0YXJ0KSAvIDIpO1xyXG5cdFx0XHRcdFx0aWYgKCFtaW5EYXRlIHx8IG1pbkRhdGUueWVhcigpIDwgc3RhcnQpIHtcclxuXHRcdFx0XHRcdFx0YWRkWWVhcihzdGFydCAtIGVhcmxpZXJMYXRlciwgaW5zdC5vcHRpb25zLmVhcmxpZXJUZXh0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGZvciAodmFyIHkgPSBzdGFydDsgeSA8PSBlbmQ7IHkrKykge1xyXG5cdFx0XHRcdFx0XHRhZGRZZWFyKHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCFtYXhEYXRlIHx8IG1heERhdGUueWVhcigpID4gZW5kKSB7XHJcblx0XHRcdFx0XHRcdGFkZFllYXIoZW5kICsgZWFybGllckxhdGVyLCBpbnN0Lm9wdGlvbnMubGF0ZXJUZXh0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRzdGFydCA9IChtYXhEYXRlICYmIG1heERhdGUuY29tcGFyZVRvKHN0YXJ0KSA9PT0gLTEgPyBtYXhEYXRlIDogc3RhcnQpLnllYXIoKTtcclxuXHRcdFx0XHRcdGVuZCA9IChtaW5EYXRlICYmIG1pbkRhdGUuY29tcGFyZVRvKGVuZCkgPT09ICsxID8gbWluRGF0ZSA6IGVuZCkueWVhcigpO1xyXG5cdFx0XHRcdFx0dmFyIGVhcmxpZXJMYXRlciA9IE1hdGguZmxvb3IoKHN0YXJ0IC0gZW5kKSAvIDIpO1xyXG5cdFx0XHRcdFx0aWYgKCFtYXhEYXRlIHx8IG1heERhdGUueWVhcigpID4gc3RhcnQpIHtcclxuXHRcdFx0XHRcdFx0YWRkWWVhcihzdGFydCArIGVhcmxpZXJMYXRlciwgaW5zdC5vcHRpb25zLmVhcmxpZXJUZXh0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGZvciAodmFyIHkgPSBzdGFydDsgeSA+PSBlbmQ7IHktLSkge1xyXG5cdFx0XHRcdFx0XHRhZGRZZWFyKHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCFtaW5EYXRlIHx8IG1pbkRhdGUueWVhcigpIDwgZW5kKSB7XHJcblx0XHRcdFx0XHRcdGFkZFllYXIoZW5kIC0gZWFybGllckxhdGVyLCBpbnN0Lm9wdGlvbnMubGF0ZXJUZXh0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0c2VsZWN0b3IgKz0gJzwvc2VsZWN0Pic7XHJcblx0XHRcdH1cclxuXHRcdFx0aHRtbCA9IGh0bWwucmVwbGFjZSgvXFxcXHgyRi8sIHNlbGVjdG9yKTtcclxuXHRcdFx0cmV0dXJuIGh0bWw7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBQcmVwYXJlIGEgcmVuZGVyIHRlbXBsYXRlIGZvciB1c2UuXHJcblx0XHRcdEV4Y2x1ZGUgcG9wdXAvaW5saW5lIHNlY3Rpb25zIHRoYXQgYXJlIG5vdCBhcHBsaWNhYmxlLlxyXG5cdFx0XHRMb2NhbGlzZSB0ZXh0IG9mIHRoZSBmb3JtOiB7bDEwbjpuYW1lfS5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgdGV4dCB0byBsb2NhbGlzZS5cclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEByZXR1cm4ge3N0cmluZ30gVGhlIGxvY2FsaXNlZCB0ZXh0LiAqL1xyXG5cdFx0X3ByZXBhcmU6IGZ1bmN0aW9uKHRleHQsIGluc3QpIHtcclxuXHRcdFx0dmFyIHJlcGxhY2VTZWN0aW9uID0gZnVuY3Rpb24odHlwZSwgcmV0YWluKSB7XHJcblx0XHRcdFx0d2hpbGUgKHRydWUpIHtcclxuXHRcdFx0XHRcdHZhciBzdGFydCA9IHRleHQuaW5kZXhPZigneycgKyB0eXBlICsgJzpzdGFydH0nKTtcclxuXHRcdFx0XHRcdGlmIChzdGFydCA9PT0gLTEpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dmFyIGVuZCA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0KS5pbmRleE9mKCd7JyArIHR5cGUgKyAnOmVuZH0nKTtcclxuXHRcdFx0XHRcdGlmIChlbmQgPiAtMSkge1xyXG5cdFx0XHRcdFx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgc3RhcnQpICtcclxuXHRcdFx0XHRcdFx0XHQocmV0YWluID8gdGV4dC5zdWJzdHIoc3RhcnQgKyB0eXBlLmxlbmd0aCArIDgsIGVuZCAtIHR5cGUubGVuZ3RoIC0gOCkgOiAnJykgK1xyXG5cdFx0XHRcdFx0XHRcdHRleHQuc3Vic3RyaW5nKHN0YXJ0ICsgZW5kICsgdHlwZS5sZW5ndGggKyA2KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH07XHJcblx0XHRcdHJlcGxhY2VTZWN0aW9uKCdpbmxpbmUnLCBpbnN0LmlubGluZSk7XHJcblx0XHRcdHJlcGxhY2VTZWN0aW9uKCdwb3B1cCcsICFpbnN0LmlubGluZSk7XHJcblx0XHRcdHZhciBwYXR0ZXJuID0gL1xce2wxMG46KFteXFx9XSspXFx9LztcclxuXHRcdFx0dmFyIG1hdGNoZXMgPSBudWxsO1xyXG5cdFx0XHR3aGlsZSAobWF0Y2hlcyA9IHBhdHRlcm4uZXhlYyh0ZXh0KSkge1xyXG5cdFx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UobWF0Y2hlc1swXSwgaW5zdC5vcHRpb25zW21hdGNoZXNbMV1dKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdGV4dDtcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0dmFyIHBsdWdpbiA9ICQuY2FsZW5kYXJzUGlja2VyOyAvLyBTaW5nbGV0b24gaW5zdGFuY2VcclxuXHJcblx0JChmdW5jdGlvbigpIHtcclxuXHRcdCQoZG9jdW1lbnQpLm9uKCdtb3VzZWRvd24uJyArIHBsdWdpbk5hbWUsIHBsdWdpbi5fY2hlY2tFeHRlcm5hbENsaWNrKS5cclxuXHRcdFx0b24oJ3Jlc2l6ZS4nICsgcGx1Z2luTmFtZSwgZnVuY3Rpb24oKSB7IHBsdWdpbi5oaWRlKHBsdWdpbi5jdXJJbnN0KTsgfSk7XHJcblx0fSk7XHJcblxyXG59KShqUXVlcnkpO1xyXG4iLCIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIENhbGVuZGFycyBkYXRlIHBpY2tlciBleHRlbnNpb25zIGZvciBqUXVlcnkgdjIuMC4xLlxyXG4gICBXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpIEF1Z3VzdCAyMDA5LlxyXG4gICBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCAoaHR0cDovL2tlaXRoLXdvb2QubmFtZS9saWNlbmNlLmh0bWwpIGxpY2Vuc2UuIFxyXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cclxuXHJcbihmdW5jdGlvbigkKSB7IC8vIEhpZGUgc2NvcGUsIG5vICQgY29uZmxpY3RcclxuXHJcblx0dmFyIHRoZW1lUm9sbGVyUmVuZGVyZXIgPSB7XHJcblx0XHRwaWNrZXI6ICc8ZGl2e3BvcHVwOnN0YXJ0fSBpZD1cInVpLWRhdGVwaWNrZXItZGl2XCJ7cG9wdXA6ZW5kfSBjbGFzcz1cInVpLWRhdGVwaWNrZXIgdWktd2lkZ2V0ICcgK1xyXG5cdFx0J3VpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxse2lubGluZTpzdGFydH0gdWktZGF0ZXBpY2tlci1pbmxpbmV7aW5saW5lOmVuZH1cIj4nICtcclxuXHRcdCc8ZGl2IGNsYXNzPVwidWktZGF0ZXBpY2tlci1oZWFkZXIgdWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbFwiPicgK1xyXG5cdFx0J3tsaW5rOnByZXZ9e2xpbms6dG9kYXl9e2xpbms6bmV4dH08L2Rpdj57bW9udGhzfScgK1xyXG5cdFx0J3twb3B1cDpzdGFydH08ZGl2IGNsYXNzPVwidWktZGF0ZXBpY2tlci1oZWFkZXIgdWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXggJyArXHJcblx0XHQndWktY29ybmVyLWFsbFwiPntidXR0b246Y2xlYXJ9e2J1dHRvbjpjbG9zZX08L2Rpdj57cG9wdXA6ZW5kfScgK1xyXG5cdFx0JzxkaXYgY2xhc3M9XCJ1aS1oZWxwZXItY2xlYXJmaXhcIj48L2Rpdj48L2Rpdj4nLFxyXG5cdFx0bW9udGhSb3c6ICc8ZGl2IGNsYXNzPVwidWktZGF0ZXBpY2tlci1yb3ctYnJlYWtcIj57bW9udGhzfTwvZGl2PicsXHJcblx0XHRtb250aDogJzxkaXYgY2xhc3M9XCJ1aS1kYXRlcGlja2VyLWdyb3VwXCI+JyArXHJcblx0XHQnPGRpdiBjbGFzcz1cInVpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGxcIj57bW9udGhIZWFkZXI6TU0geXl5eX08L2Rpdj4nICtcclxuXHRcdCc8dGFibGUgY2xhc3M9XCJ1aS1kYXRlcGlja2VyLWNhbGVuZGFyXCI+PHRoZWFkPnt3ZWVrSGVhZGVyfTwvdGhlYWQ+PHRib2R5Pnt3ZWVrc308L3Rib2R5PjwvdGFibGU+PC9kaXY+JyxcclxuXHRcdHdlZWtIZWFkZXI6ICc8dHI+e2RheXN9PC90cj4nLFxyXG5cdFx0ZGF5SGVhZGVyOiAnPHRoPntkYXl9PC90aD4nLFxyXG5cdFx0d2VlazogJzx0cj57ZGF5c308L3RyPicsXHJcblx0XHRkYXk6ICc8dGQ+e2RheX08L3RkPicsXHJcblx0XHRtb250aFNlbGVjdG9yOiAnLnVpLWRhdGVwaWNrZXItZ3JvdXAnLFxyXG5cdFx0ZGF5U2VsZWN0b3I6ICd0ZCcsXHJcblx0XHRydGxDbGFzczogJ3VpLWRhdGVwaWNrZXItcnRsJyxcclxuXHRcdG11bHRpQ2xhc3M6ICd1aS1kYXRlcGlja2VyLW11bHRpJyxcclxuXHRcdGRlZmF1bHRDbGFzczogJ3VpLXN0YXRlLWRlZmF1bHQnLFxyXG5cdFx0c2VsZWN0ZWRDbGFzczogJ3VpLXN0YXRlLWFjdGl2ZScsXHJcblx0XHRoaWdobGlnaHRlZENsYXNzOiAndWktc3RhdGUtaG92ZXInLFxyXG5cdFx0dG9kYXlDbGFzczogJ3VpLXN0YXRlLWhpZ2hsaWdodCcsXHJcblx0XHRvdGhlck1vbnRoQ2xhc3M6ICd1aS1kYXRlcGlja2VyLW90aGVyLW1vbnRoJyxcclxuXHRcdHdlZWtlbmRDbGFzczogJ3VpLWRhdGVwaWNrZXItd2Vlay1lbmQnLFxyXG5cdFx0Y29tbWFuZENsYXNzOiAndWktZGF0ZXBpY2tlci1jbWQnLFxyXG5cdFx0Y29tbWFuZEJ1dHRvbkNsYXNzOiAndWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsJyxcclxuXHRcdGNvbW1hbmRMaW5rQ2xhc3M6ICcnLFxyXG5cdFx0ZGlzYWJsZWRDbGFzczogJ3VpLWRhdGVwaWNrZXItZGlzYWJsZWQnXHJcblx0fTtcclxuXHJcblx0JC5leHRlbmQoJC5jYWxlbmRhcnNQaWNrZXIsIHtcclxuXHJcblx0XHQvKiogVGVtcGxhdGUgZm9yIGdlbmVyYXRpbmcgYSBjYWxlbmRhciBwaWNrZXIgc2hvd2luZyB3ZWVrIG9mIHllYXIuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBpY2tlci5leHQuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlciAqL1xyXG5cdFx0d2Vla09mWWVhclJlbmRlcmVyOiAkLmV4dGVuZCh7fSwgJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLCB7XHJcblx0XHRcdHdlZWtIZWFkZXI6ICc8dHI+PHRoIGNsYXNzPVwiY2FsZW5kYXJzLXdlZWtcIj4nICtcclxuXHRcdFx0JzxzcGFuIHRpdGxlPVwie2wxMG46d2Vla1N0YXR1c31cIj57bDEwbjp3ZWVrVGV4dH08L3NwYW4+PC90aD57ZGF5c308L3RyPicsXHJcblx0XHRcdHdlZWs6ICc8dHI+PHRkIGNsYXNzPVwiY2FsZW5kYXJzLXdlZWtcIj57d2Vla09mWWVhcn08L3RkPntkYXlzfTwvdHI+J1xyXG5cdFx0fSksXHJcblxyXG5cdFx0LyoqIFRoZW1lUm9sbGVyIHRlbXBsYXRlIGZvciBnZW5lcmF0aW5nIGEgY2FsZW5kYXIgcGlja2VyLlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXIgKi9cclxuXHRcdHRoZW1lUm9sbGVyUmVuZGVyZXI6IHRoZW1lUm9sbGVyUmVuZGVyZXIsXHJcblxyXG5cdFx0LyoqIFRoZW1lUm9sbGVyIHRlbXBsYXRlIGZvciBnZW5lcmF0aW5nIGEgY2FsZW5kYXIgcGlja2VyIHNob3dpbmcgd2VlayBvZiB5ZWFyLlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXIgKi9cclxuXHRcdHRoZW1lUm9sbGVyV2Vla09mWWVhclJlbmRlcmVyOiAkLmV4dGVuZCh7fSwgdGhlbWVSb2xsZXJSZW5kZXJlciwge1xyXG5cdFx0XHR3ZWVrSGVhZGVyOiAnPHRyPjx0aCBjbGFzcz1cInVpLXN0YXRlLWhvdmVyXCI+PHNwYW4+e2wxMG46d2Vla1RleHR9PC9zcGFuPjwvdGg+e2RheXN9PC90cj4nLFxyXG5cdFx0XHR3ZWVrOiAnPHRyPjx0ZCBjbGFzcz1cInVpLXN0YXRlLWhvdmVyXCI+e3dlZWtPZlllYXJ9PC90ZD57ZGF5c308L3RyPidcclxuXHRcdH0pLFxyXG5cclxuXHRcdC8qKiBEb24ndCBhbGxvdyB3ZWVrZW5kcyB0byBiZSBzZWxlY3RlZC5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZX0gVGhlIGN1cnJlbnQgZGF0ZS5cclxuXHRcdFx0QHJldHVybiB7b2JqZWN0fSBJbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRhdGUuXHJcblx0XHRcdEBleGFtcGxlIG9uRGF0ZTogJC5jYWxlbmRhcnNQaWNrZXIubm9XZWVrZW5kcyAqL1xyXG5cdFx0bm9XZWVrZW5kczogZnVuY3Rpb24oZGF0ZSkge1xyXG5cdFx0XHRyZXR1cm4ge3NlbGVjdGFibGU6IGRhdGUud2Vla0RheSgpfTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENoYW5nZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrIGJ5IGNsaWNraW5nIG9uIHRoZSBkYXkgaGVhZGVyLlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIHBpY2tlciB7alF1ZXJ5fSBUaGUgY29tcGxldGVkIGRhdGVwaWNrZXIgZGl2aXNpb24uXHJcblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24uXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAZXhhbXBsZSBvblNob3c6ICQuY2FsZW5kYXJzUGlja2VyLmNoYW5nZUZpcnN0RGF5ICovXHJcblx0XHRjaGFuZ2VGaXJzdERheTogZnVuY3Rpb24ocGlja2VyLCBjYWxlbmRhciwgaW5zdCkge1xyXG5cdFx0XHR2YXIgdGFyZ2V0ID0gJCh0aGlzKTtcclxuXHRcdFx0cGlja2VyLmZpbmQoJ3RoIHNwYW4nKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGlmICh0aGlzLnBhcmVudE5vZGUuY2xhc3NOYW1lLm1hdGNoKC8uKmNhbGVuZGFycy13ZWVrLiovKSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQkKCc8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCInICsgdGhpcy5jbGFzc05hbWUgK1xyXG5cdFx0XHRcdFx0XHQnXCIgdGl0bGU9XCJDaGFuZ2UgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrXCI+JyArICQodGhpcykudGV4dCgpICsgJzwvYT4nKS5cclxuXHRcdFx0XHRcdGNsaWNrKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHR2YXIgZG93ID0gcGFyc2VJbnQodGhpcy5jbGFzc05hbWUucmVwbGFjZSgvXi4qY2FsZW5kYXJzLWRvdy0oXFxkKykuKiQvLCAnJDEnKSwgMTApO1xyXG5cdFx0XHRcdFx0XHR0YXJnZXQuY2FsZW5kYXJzUGlja2VyKCdvcHRpb24nLCB7Zmlyc3REYXk6IGRvd30pO1xyXG5cdFx0XHRcdFx0fSkuXHJcblx0XHRcdFx0XHRyZXBsYWNlQWxsKHRoaXMpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgZGF0ZSBpcyBob3ZlcmVkLlxyXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyT25Ib3ZlclxyXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBkYXRlIGJlaW5nIGhvdmVyZWQgb3IgPGNvZGU+bnVsbDwvY29kZT4gb24gZXhpdC5cclxuXHRcdFx0QHBhcmFtIHNlbGVjdGFibGUge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgZGF0ZSBpcyBzZWxlY3RhYmxlLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxyXG5cdFx0XHRAZXhhbXBsZSBmdW5jdGlvbiBzaG93SG92ZXJlZChkYXRlLCBzZWxlY3RhYmxlKSB7XHJcblx0JCgnI2ZlZWRiYWNrJykudGV4dCgnWW91IGFyZSB2aWV3aW5nICcgKyAoZGF0ZSA/IGRhdGUuZm9ybWF0RGF0ZSgpIDogJ25vdGhpbmcnKSk7XHJcbiB9ICovXHJcblxyXG5cdFx0LyoqIEFkZCBhIGNhbGxiYWNrIHdoZW4gaG92ZXJpbmcgb3ZlciBkYXRlcy5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBvbkhvdmVyIHtDYWxlbmRhcnNQaWNrZXJPbkhvdmVyfSBUaGUgY2FsbGJhY2sgd2hlbiBob3ZlcmluZy5cclxuXHRcdFx0QGV4YW1wbGUgb25TaG93OiAkLmNhbGVuZGFyc1BpY2tlci5ob3ZlckNhbGxiYWNrKHNob3dIb3ZlcmVkKSAqL1xyXG5cdFx0aG92ZXJDYWxsYmFjazogZnVuY3Rpb24ob25Ib3Zlcikge1xyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24ocGlja2VyLCBjYWxlbmRhciwgaW5zdCkge1xyXG5cdFx0XHRcdGlmICgkLmlzRnVuY3Rpb24ob25Ib3ZlcikpIHtcclxuXHRcdFx0XHRcdHZhciB0YXJnZXQgPSB0aGlzO1xyXG5cdFx0XHRcdFx0dmFyIHJlbmRlcmVyID0gaW5zdC5vcHRpb25zLnJlbmRlcmVyO1xyXG5cdFx0XHRcdFx0cGlja2VyLmZpbmQocmVuZGVyZXIuZGF5U2VsZWN0b3IgKyAnIGEsICcgKyByZW5kZXJlci5kYXlTZWxlY3RvciArICcgc3BhbicpLlxyXG5cdFx0XHRcdFx0XHRob3ZlcihmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHRvbkhvdmVyLmFwcGx5KHRhcmdldCwgWyQodGFyZ2V0KS5jYWxlbmRhcnNQaWNrZXIoJ3JldHJpZXZlRGF0ZScsIHRoaXMpLFxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYSddKTtcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7IG9uSG92ZXIuYXBwbHkodGFyZ2V0LCBbXSk7IH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEhpZ2hsaWdodCB0aGUgZW50aXJlIHdlZWsgd2hlbiBob3ZlcmluZyBvdmVyIGl0LlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIHBpY2tlciB7alF1ZXJ5fSBUaGUgY29tcGxldGVkIGRhdGVwaWNrZXIgZGl2aXNpb24uXHJcblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24uXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAZXhhbXBsZSBvblNob3c6ICQuY2FsZW5kYXJzUGlja2VyLmhpZ2hsaWdodFdlZWsgKi9cclxuXHRcdGhpZ2hsaWdodFdlZWs6IGZ1bmN0aW9uKHBpY2tlciwgY2FsZW5kYXIsIGluc3QpIHtcclxuXHRcdFx0dmFyIHRhcmdldCA9IHRoaXM7XHJcblx0XHRcdHZhciByZW5kZXJlciA9IGluc3Qub3B0aW9ucy5yZW5kZXJlcjtcclxuXHRcdFx0cGlja2VyLmZpbmQocmVuZGVyZXIuZGF5U2VsZWN0b3IgKyAnIGEsICcgKyByZW5kZXJlci5kYXlTZWxlY3RvciArICcgc3BhbicpLlxyXG5cdFx0XHRcdGhvdmVyKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0JCh0aGlzKS5wYXJlbnRzKCd0cicpLmZpbmQocmVuZGVyZXIuZGF5U2VsZWN0b3IgKyAnIConKS5cclxuXHRcdFx0XHRcdFx0YWRkQ2xhc3MocmVuZGVyZXIuaGlnaGxpZ2h0ZWRDbGFzcyk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdCQodGhpcykucGFyZW50cygndHInKS5maW5kKHJlbmRlcmVyLmRheVNlbGVjdG9yICsgJyAqJykuXHJcblx0XHRcdFx0XHRcdHJlbW92ZUNsYXNzKHJlbmRlcmVyLmhpZ2hsaWdodGVkQ2xhc3MpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU2hvdyBhIHN0YXR1cyBiYXIgd2l0aCBtZXNzYWdlcy5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBwaWNrZXIge2pRdWVyeX0gVGhlIGNvbXBsZXRlZCBkYXRlcGlja2VyIGRpdmlzaW9uLlxyXG5cdFx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uLlxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QGV4YW1wbGUgb25TaG93OiAkLmNhbGVuZGFyc1BpY2tlci5zaG93U3RhdHVzICovXHJcblx0XHRzaG93U3RhdHVzOiBmdW5jdGlvbihwaWNrZXIsIGNhbGVuZGFyLCBpbnN0KSB7XHJcblx0XHRcdHZhciBpc1RSID0gKGluc3Qub3B0aW9ucy5yZW5kZXJlci5zZWxlY3RlZENsYXNzID09PSAndWktc3RhdGUtYWN0aXZlJyk7XHJcblx0XHRcdHZhciBkZWZhdWx0U3RhdHVzID0gaW5zdC5vcHRpb25zLmRlZmF1bHRTdGF0dXMgfHwgJyYjMTYwOyc7XHJcblx0XHRcdHZhciBzdGF0dXMgPSAkKCc8ZGl2IGNsYXNzPVwiJyArICghaXNUUiA/ICdjYWxlbmRhcnMtc3RhdHVzJyA6XHJcblx0XHRcdFx0J3VpLWRhdGVwaWNrZXItc3RhdHVzIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwnKSArICdcIj4nICtcclxuXHRcdFx0XHRkZWZhdWx0U3RhdHVzICsgJzwvZGl2PicpLlxyXG5cdFx0XHRcdGluc2VydEFmdGVyKHBpY2tlci5maW5kKCcuY2FsZW5kYXJzLW1vbnRoLXJvdzpsYXN0LC51aS1kYXRlcGlja2VyLXJvdy1icmVhazpsYXN0JykpO1xyXG5cdFx0XHRwaWNrZXIuZmluZCgnKlt0aXRsZV0nKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0dmFyIHRpdGxlID0gJCh0aGlzKS5hdHRyKCd0aXRsZScpO1xyXG5cdFx0XHRcdFx0JCh0aGlzKS5yZW1vdmVBdHRyKCd0aXRsZScpLmhvdmVyKFxyXG5cdFx0XHRcdFx0XHRmdW5jdGlvbigpIHsgc3RhdHVzLnRleHQodGl0bGUgfHwgZGVmYXVsdFN0YXR1cyk7IH0sXHJcblx0XHRcdFx0XHRcdGZ1bmN0aW9uKCkgeyBzdGF0dXMudGV4dChkZWZhdWx0U3RhdHVzKTsgfSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBBbGxvdyBlYXNpZXIgbmF2aWdhdGlvbiBieSBtb250aC5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBwaWNrZXIge2pRdWVyeX0gVGhlIGNvbXBsZXRlZCBkYXRlcGlja2VyIGRpdmlzaW9uLlxyXG5cdFx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uLlxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QGV4YW1wbGUgb25TaG93OiAkLmNhbGVuZGFyc1BpY2tlci5tb250aE5hdmlnYXRpb24gKi9cclxuXHRcdG1vbnRoTmF2aWdhdGlvbjogZnVuY3Rpb24ocGlja2VyLCBjYWxlbmRhciwgaW5zdCkge1xyXG5cdFx0XHR2YXIgdGFyZ2V0ID0gJCh0aGlzKTtcclxuXHRcdFx0dmFyIGlzVFIgPSAoaW5zdC5vcHRpb25zLnJlbmRlcmVyLnNlbGVjdGVkQ2xhc3MgPT09ICd1aS1zdGF0ZS1hY3RpdmUnKTtcclxuXHRcdFx0dmFyIG1pbkRhdGUgPSBpbnN0LmN1ck1pbkRhdGUoKTtcclxuXHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xyXG5cdFx0XHR2YXIgeWVhciA9IGluc3QuZHJhd0RhdGUueWVhcigpO1xyXG5cdFx0XHR2YXIgaHRtbCA9ICc8ZGl2IGNsYXNzPVwiJyArICghaXNUUiA/ICdjYWxlbmRhcnMtbW9udGgtbmF2JyA6ICd1aS1kYXRlcGlja2VyLW1vbnRoLW5hdicpICsgJ1wiPic7XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY2FsZW5kYXIubW9udGhzSW5ZZWFyKHllYXIpOyBpKyspIHtcclxuXHRcdFx0XHR2YXIgb3JkID0gY2FsZW5kYXIuZnJvbU1vbnRoT2ZZZWFyKHllYXIsIGkgKyBjYWxlbmRhci5taW5Nb250aCkgLSBjYWxlbmRhci5taW5Nb250aDtcclxuXHRcdFx0XHR2YXIgaW5SYW5nZSA9ICgoIW1pbkRhdGUgfHwgY2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBpICsgY2FsZW5kYXIubWluTW9udGgsXHJcblx0XHRcdFx0XHRjYWxlbmRhci5kYXlzSW5Nb250aCh5ZWFyLCBpICsgY2FsZW5kYXIubWluTW9udGgpKS5jb21wYXJlVG8obWluRGF0ZSkgPiAtMSkgJiYgKCFtYXhEYXRlIHx8XHJcblx0XHRcdFx0XHRjYWxlbmRhci5uZXdEYXRlKHllYXIsIGkgKyBjYWxlbmRhci5taW5Nb250aCwgY2FsZW5kYXIubWluRGF5KS5jb21wYXJlVG8obWF4RGF0ZSkgPCArMSkpO1xyXG5cdFx0XHRcdGh0bWwgKz0gJzxkaXY+JyArIChpblJhbmdlID8gJzxhIGhyZWY9XCIjXCIgY2xhc3M9XCJqZCcgK1xyXG5cdFx0XHRcdFx0Y2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBpICsgY2FsZW5kYXIubWluTW9udGgsIGNhbGVuZGFyLm1pbkRheSkudG9KRCgpICsgJ1wiJyA6ICc8c3BhbicpICtcclxuXHRcdFx0XHRcdCcgdGl0bGU9XCInICsgY2FsZW5kYXIubG9jYWwubW9udGhOYW1lc1tvcmRdICsgJ1wiPicgKyBjYWxlbmRhci5sb2NhbC5tb250aE5hbWVzU2hvcnRbb3JkXSArXHJcblx0XHRcdFx0XHQoaW5SYW5nZSA/ICc8L2E+JyA6ICc8L3NwYW4+JykgKyAnPC9kaXY+JztcclxuXHRcdFx0fVxyXG5cdFx0XHRodG1sICs9ICc8L2Rpdj4nO1xyXG5cdFx0XHQkKGh0bWwpLmluc2VydEFmdGVyKHBpY2tlci5maW5kKCdkaXYuY2FsZW5kYXJzLW5hdixkaXYudWktZGF0ZXBpY2tlci1oZWFkZXI6Zmlyc3QnKSkuXHJcblx0XHRcdFx0ZmluZCgnYScpLmNsaWNrKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0dmFyIGRhdGUgPSB0YXJnZXQuY2FsZW5kYXJzUGlja2VyKCdyZXRyaWV2ZURhdGUnLCB0aGlzKTtcclxuXHRcdFx0XHRcdHRhcmdldC5jYWxlbmRhcnNQaWNrZXIoJ3Nob3dNb250aCcsIGRhdGUueWVhcigpLCBkYXRlLm1vbnRoKCkpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU2VsZWN0IGFuIGVudGlyZSB3ZWVrIHdoZW4gY2xpY2tpbmcgb24gYSB3ZWVrIG51bWJlci5cclxuXHRcdFx0VXNlIGluIGNvbmp1bmN0aW9uIHdpdGggPGNvZGU+d2Vla09mWWVhclJlbmRlcmVyPC9jb2RlPi5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmV4dC5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBwaWNrZXIge2pRdWVyeX0gVGhlIGNvbXBsZXRlZCBkYXRlcGlja2VyIGRpdmlzaW9uLlxyXG5cdFx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uLlxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QGV4YW1wbGUgb25TaG93OiAkLmNhbGVuZGFyc1BpY2tlci5zZWxlY3RXZWVrICovXHJcblx0XHRzZWxlY3RXZWVrOiBmdW5jdGlvbihwaWNrZXIsIGNhbGVuZGFyLCBpbnN0KSB7XHJcblx0XHRcdHZhciB0YXJnZXQgPSAkKHRoaXMpO1xyXG5cdFx0XHRwaWNrZXIuZmluZCgndGQuY2FsZW5kYXJzLXdlZWsgc3BhbicpLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0JCgnPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiJyArXHJcblx0XHRcdFx0XHRcdHRoaXMuY2xhc3NOYW1lICsgJ1wiIHRpdGxlPVwiU2VsZWN0IHRoZSBlbnRpcmUgd2Vla1wiPicgK1xyXG5cdFx0XHRcdFx0XHQkKHRoaXMpLnRleHQoKSArICc8L2E+JykuXHJcblx0XHRcdFx0XHRjbGljayhmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGRhdGUgPSB0YXJnZXQuY2FsZW5kYXJzUGlja2VyKCdyZXRyaWV2ZURhdGUnLCB0aGlzKTtcclxuXHRcdFx0XHRcdFx0dmFyIGRhdGVzID0gW2RhdGVdO1xyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMTsgaSA8IGNhbGVuZGFyLmRheXNJbldlZWsoKTsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0ZGF0ZXMucHVzaChkYXRlID0gZGF0ZS5uZXdEYXRlKCkuYWRkKDEsICdkJykpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QpIHtcclxuXHRcdFx0XHRcdFx0XHRkYXRlcy5zcGxpY2UoMSwgZGF0ZXMubGVuZ3RoIC0gMik7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0dGFyZ2V0LmNhbGVuZGFyc1BpY2tlcignc2V0RGF0ZScsIGRhdGVzKS5jYWxlbmRhcnNQaWNrZXIoJ2hpZGUnKTtcclxuXHRcdFx0XHRcdH0pLlxyXG5cdFx0XHRcdFx0cmVwbGFjZUFsbCh0aGlzKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBTZWxlY3QgYW4gZW50aXJlIG1vbnRoIHdoZW4gY2xpY2tpbmcgb24gdGhlIHdlZWsgaGVhZGVyLlxyXG5cdFx0XHRVc2UgaW4gY29uanVuY3Rpb24gd2l0aCA8Y29kZT53ZWVrT2ZZZWFyUmVuZGVyZXI8L2NvZGU+LlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuZXh0LmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIHBpY2tlciB7alF1ZXJ5fSBUaGUgY29tcGxldGVkIGRhdGVwaWNrZXIgZGl2aXNpb24uXHJcblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY2FsZW5kYXIgaW1wbGVtZW50YXRpb24uXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAZXhhbXBsZSBvblNob3c6ICQuY2FsZW5kYXJzUGlja2VyLnNlbGVjdE1vbnRoICovXHJcblx0XHRzZWxlY3RNb250aDogZnVuY3Rpb24ocGlja2VyLCBjYWxlbmRhciwgaW5zdCkge1xyXG5cdFx0XHR2YXIgdGFyZ2V0ID0gJCh0aGlzKTtcclxuXHRcdFx0cGlja2VyLmZpbmQoJ3RoLmNhbGVuZGFycy13ZWVrJykuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHQkKCc8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgdGl0bGU9XCJTZWxlY3QgdGhlIGVudGlyZSBtb250aFwiPicgK1xyXG5cdFx0XHRcdFx0XHQkKHRoaXMpLnRleHQoKSArICc8L2E+JykuXHJcblx0XHRcdFx0XHRjbGljayhmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0dmFyIGRhdGUgPSB0YXJnZXQuY2FsZW5kYXJzUGlja2VyKCdyZXRyaWV2ZURhdGUnLCAkKHRoaXMpLnBhcmVudHMoJ3RhYmxlJykuXHJcblx0XHRcdFx0XHRcdFx0ZmluZCgndGQ6bm90KC5jYWxlbmRhcnMtd2VlaykgKjpub3QoLmNhbGVuZGFycy1vdGhlci1tb250aCknKVswXSk7XHJcblx0XHRcdFx0XHRcdHZhciBkYXRlcyA9IFtkYXRlLmRheSgxKV07XHJcblx0XHRcdFx0XHRcdHZhciBkaW0gPSBjYWxlbmRhci5kYXlzSW5Nb250aChkYXRlKTtcclxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDE7IGkgPCBkaW07IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdGRhdGVzLnB1c2goZGF0ZSA9IGRhdGUubmV3RGF0ZSgpLmFkZCgxLCAnZCcpKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0KSB7XHJcblx0XHRcdFx0XHRcdFx0ZGF0ZXMuc3BsaWNlKDEsIGRhdGVzLmxlbmd0aCAtIDIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHRhcmdldC5jYWxlbmRhcnNQaWNrZXIoJ3NldERhdGUnLCBkYXRlcykuY2FsZW5kYXJzUGlja2VyKCdoaWRlJyk7XHJcblx0XHRcdFx0XHR9KS5cclxuXHRcdFx0XHRcdGFwcGVuZFRvKHRoaXMpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFNlbGVjdCBhIG1vbnRoIG9ubHkgaW5zdGVhZCBvZiBhIHNpbmdsZSBkYXkuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBpY2tlci5leHQuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gcGlja2VyIHtqUXVlcnl9IFRoZSBjb21wbGV0ZWQgZGF0ZXBpY2tlciBkaXZpc2lvbi5cclxuXHRcdFx0QHBhcmFtIGNhbGVuZGFyIHtCYXNlQ2FsZW5kYXJ9IFRoZSBjYWxlbmRhciBpbXBsZW1lbnRhdGlvbi5cclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBleGFtcGxlIG9uU2hvdzogJC5jYWxlbmRhcnNQaWNrZXIubW9udGhPbmx5ICovXHJcblx0XHRtb250aE9ubHk6IGZ1bmN0aW9uKHBpY2tlciwgY2FsZW5kYXIsIGluc3QpIHtcclxuXHRcdFx0dmFyIHRhcmdldCA9ICQodGhpcyk7XHJcblx0XHRcdHZhciBzZWxlY3RNb250aCA9ICQoJzxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+U2VsZWN0PC9idXR0b24+PC9kaXY+JykuXHJcblx0XHRcdFx0aW5zZXJ0QWZ0ZXIocGlja2VyLmZpbmQoJy5jYWxlbmRhcnMtbW9udGgtcm93Omxhc3QsLnVpLWRhdGVwaWNrZXItcm93LWJyZWFrOmxhc3QnKSkuXHJcblx0XHRcdFx0Y2hpbGRyZW4oKS5jbGljayhmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHZhciBtb250aFllYXIgPSBwaWNrZXIuZmluZCgnLmNhbGVuZGFycy1tb250aC15ZWFyOmZpcnN0JykudmFsKCkuc3BsaXQoJy8nKTtcclxuXHRcdFx0XHRcdHRhcmdldC5jYWxlbmRhcnNQaWNrZXIoJ3NldERhdGUnLCBjYWxlbmRhci5uZXdEYXRlKFxyXG5cdFx0XHRcdFx0XHRwYXJzZUludChtb250aFllYXJbMV0sIDEwKSwgcGFyc2VJbnQobW9udGhZZWFyWzBdLCAxMCksIGNhbGVuZGFyLm1pbkRheSkpLlxyXG5cdFx0XHRcdFx0XHRjYWxlbmRhcnNQaWNrZXIoJ2hpZGUnKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0cGlja2VyLmZpbmQoJy5jYWxlbmRhcnMtbW9udGgtcm93IHRhYmxlLC51aS1kYXRlcGlja2VyLXJvdy1icmVhayB0YWJsZScpLnJlbW92ZSgpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.js index 1f013895b34..9356301b61b 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.js @@ -1825,4 +1825,4 @@ })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQ2FsZW5kYXJzIGRhdGUgcGlja2VyIGZvciBqUXVlcnkgdjIuMC4xLlxuICAgV3JpdHRlbiBieSBLZWl0aCBXb29kIChrYndvb2R7YXR9aWluZXQuY29tLmF1KSBBdWd1c3QgMjAwOS5cbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cblxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxuXG5cdHZhciBwbHVnaW5OYW1lID0gJ2NhbGVuZGFyc1BpY2tlcic7XG5cblxuXHQvKiogQ3JlYXRlIHRoZSBjYWxlbmRhcnMgZGF0ZXBpY2tlciBwbHVnaW4uXG5cdFx0PHA+U2V0cyBhbiBpbnB1dCBmaWVsZCB0byBwb3B1cCBhIGNhbGVuZGFyIGZvciBkYXRlIGVudHJ5LFxuXHRcdFx0b3IgYSA8Y29kZT5kaXY8L2NvZGU+IG9yIDxjb2RlPnNwYW48L2NvZGU+IHRvIHNob3cgYW4gaW5saW5lIGNhbGVuZGFyLjwvcD5cblx0XHQ8cD5FeHBlY3RzIEhUTUwgbGlrZTo8L3A+XG5cdFx0PHByZT4mbHQ7aW5wdXQgdHlwZT1cInRleHRcIj4gb3IgJmx0O2Rpdj4mbHQ7L2Rpdj48L3ByZT5cblx0XHQ8cD5Qcm92aWRlIGlubGluZSBjb25maWd1cmF0aW9uIGxpa2U6PC9wPlxuXHRcdDxwcmU+Jmx0O2lucHV0IHR5cGU9XCJ0ZXh0XCIgZGF0YS1jYWxlbmRhcnNQaWNrZXI9XCJuYW1lOiAndmFsdWUnXCIvPjwvcHJlPlxuXHQgXHRAY2xhc3MgQ2FsZW5kYXJzUGlja2VyXG5cdFx0QGF1Z21lbnRzIEpRUGx1Z2luXG5cdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuY2FsZW5kYXJzUGlja2VyKClcbiAkKHNlbGVjdG9yKS5jYWxlbmRhcnNQaWNrZXIoe21pbkRhdGU6IDAsIG1heERhdGU6ICcrMW0gKzF3J30pICovXG5cdCQuSlFQbHVnaW4uY3JlYXRlUGx1Z2luKHtcblx0XG5cdFx0LyoqIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4uXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyICovXG5cdFx0bmFtZTogcGx1Z2luTmFtZSxcblx0XHRcblx0XHQvKiogRGVmYXVsdCB0ZW1wbGF0ZSBmb3IgZ2VuZXJhdGluZyBhIGRhdGVwaWNrZXIuXG5cdFx0XHRJbnNlcnQgYW55d2hlcmU6XG5cdFx0XHQ8dWw+XG5cdFx0XHQ8bGk+J3tsMTBuOm5hbWV9JyB0byBpbnNlcnQgbG9jYWxpc2VkIHZhbHVlIGZvciBuYW1lLDwvbGk+XG5cdFx0XHQ8bGk+J3tsaW5rOm5hbWV9JyB0byBpbnNlcnQgYSBsaW5rIHRyaWdnZXIgZm9yIGNvbW1hbmQgbmFtZSw8L2xpPlxuXHRcdFx0PGxpPid7YnV0dG9uOm5hbWV9JyB0byBpbnNlcnQgYSBidXR0b24gdHJpZ2dlciBmb3IgY29tbWFuZCBuYW1lLDwvbGk+XG5cdFx0XHQ8bGk+J3twb3B1cDpzdGFydH0uLi57cG9wdXA6ZW5kfScgdG8gbWFyayBhIHNlY3Rpb24gZm9yIGluY2x1c2lvbiBpbiBhIHBvcHVwIGRhdGVwaWNrZXIgb25seSw8L2xpPlxuXHRcdFx0PGxpPid7aW5saW5lOnN0YXJ0fS4uLntpbmxpbmU6ZW5kfScgdG8gbWFyayBhIHNlY3Rpb24gZm9yIGluY2x1c2lvbiBpbiBhbiBpbmxpbmUgZGF0ZXBpY2tlciBvbmx5LjwvbGk+XG5cdFx0XHQ8L3VsPlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByb3BlcnR5IHBpY2tlciB7c3RyaW5nfSBPdmVyYWxsIHN0cnVjdHVyZTogJ3ttb250aHN9JyB0byBpbnNlcnQgY2FsZW5kYXIgbW9udGhzLlxuXHRcdFx0QHByb3BlcnR5IG1vbnRoUm93IHtzdHJpbmd9IE9uZSByb3cgb2YgbW9udGhzOiAne21vbnRoc30nIHRvIGluc2VydCBjYWxlbmRhciBtb250aHMuXG5cdFx0XHRAcHJvcGVydHkgbW9udGgge3N0cmluZ30gQSBzaW5nbGUgbW9udGg6ICd7bW9udGhIZWFkZXI8ZW0+OmRhdGVGb3JtYXQ8L2VtPn0nIHRvIGluc2VydCB0aGUgbW9udGggaGVhZGVyIC1cblx0XHRcdFx0XHRcdDxlbT5kYXRlRm9ybWF0PC9lbT4gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvICdNTSB5eXl5Jyxcblx0XHRcdFx0XHRcdCd7d2Vla0hlYWRlcn0nIHRvIGluc2VydCBhIHdlZWsgaGVhZGVyLCAne3dlZWtzfScgdG8gaW5zZXJ0IHRoZSBtb250aCdzIHdlZWtzLlxuXHRcdFx0QHByb3BlcnR5IHdlZWtIZWFkZXIge3N0cmluZ30gQSB3ZWVrIGhlYWRlcjogJ3tkYXlzfScgdG8gaW5zZXJ0IGluZGl2aWR1YWwgZGF5IG5hbWVzLlxuXHRcdFx0QHByb3BlcnR5IGRheUhlYWRlciB7c3RyaW5nfSBJbmRpdmlkdWFsIGRheSBoZWFkZXI6ICd7ZGF5fScgdG8gaW5zZXJ0IGRheSBuYW1lLlxuXHRcdFx0QHByb3BlcnR5IHdlZWsge3N0cmluZ30gT25lIHdlZWsgb2YgdGhlIG1vbnRoOiAne2RheXN9JyB0byBpbnNlcnQgdGhlIHdlZWsncyBkYXlzLFxuXHRcdFx0XHRcdFx0J3t3ZWVrT2ZZZWFyfScgdG8gaW5zZXJ0IHdlZWsgb2YgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBkYXkge3N0cmluZ30gQW4gaW5kaXZpZHVhbCBkYXk6ICd7ZGF5fScgdG8gaW5zZXJ0IGRheSB2YWx1ZS5cblx0XHRcdEBwcm9wZXJ0eSBtb250aFNlbGVjdG9yIHtzdHJpbmd9IGpRdWVyeSBzZWxlY3RvciwgcmVsYXRpdmUgdG8gcGlja2VyLCBmb3IgYSBzaW5nbGUgbW9udGguXG5cdFx0XHRAcHJvcGVydHkgZGF5U2VsZWN0b3Ige3N0cmluZ30galF1ZXJ5IHNlbGVjdG9yLCByZWxhdGl2ZSB0byBwaWNrZXIsIGZvciBpbmRpdmlkdWFsIGRheXMuXG5cdFx0XHRAcHJvcGVydHkgcnRsQ2xhc3Mge3N0cmluZ30gQ2xhc3MgZm9yIHJpZ2h0LXRvLWxlZnQgKFJUTCkgbGFuZ3VhZ2VzLlxuXHRcdFx0QHByb3BlcnR5IG11bHRpQ2xhc3Mge3N0cmluZ30gQ2xhc3MgZm9yIG11bHRpLW1vbnRoIGRhdGVwaWNrZXJzLlxuXHRcdFx0QHByb3BlcnR5IGRlZmF1bHRDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3Igc2VsZWN0YWJsZSBkYXRlcy5cblx0XHRcdEBwcm9wZXJ0eSBzZWxlY3RlZENsYXNzIHtzdHJpbmd9IENsYXNzIGZvciBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZXMuXG5cdFx0XHRAcHJvcGVydHkgaGlnaGxpZ2h0ZWRDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgaGlnaGxpZ2h0ZWQgZGF0ZXMuXG5cdFx0XHRAcHJvcGVydHkgdG9kYXlDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgdG9kYXkuXG5cdFx0XHRAcHJvcGVydHkgb3RoZXJNb250aENsYXNzIHtzdHJpbmd9IENsYXNzIGZvciBkYXlzIGZyb20gb3RoZXIgbW9udGhzLlxuXHRcdFx0QHByb3BlcnR5IHdlZWtlbmRDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgZGF5cyBvbiB3ZWVrZW5kcy5cblx0XHRcdEBwcm9wZXJ0eSBjb21tYW5kQ2xhc3Mge3N0cmluZ30gQ2xhc3MgcHJlZml4IGZvciBjb21tYW5kcy5cblx0XHRcdEBwcm9wZXJ0eSBjb21tYW5kQnV0dG9uQ2xhc3Mge3N0cmluZ30gRXh0cmEgY2xhc3MoZXMpIGZvciBjb21tYW5kcyB0aGF0IGFyZSBidXR0b25zLlxuXHRcdFx0QHByb3BlcnR5IGNvbW1hbmRMaW5rQ2xhc3Mge3N0cmluZ30gRXh0cmEgY2xhc3MoZXMpIGZvciBjb21tYW5kcyB0aGF0IGFyZSBsaW5rcy5cblx0XHRcdEBwcm9wZXJ0eSBkaXNhYmxlZENsYXNzIHtzdHJpbmd9IENsYXNzIGZvciBkaXNhYmxlZCBjb21tYW5kcy4gKi9cblx0XHRkZWZhdWx0UmVuZGVyZXI6IHtcblx0XHRcdHBpY2tlcjogJzxkaXYgY2xhc3M9XCJjYWxlbmRhcnNcIj4nICtcblx0XHRcdCc8ZGl2IGNsYXNzPVwiY2FsZW5kYXJzLW5hdlwiPntsaW5rOnByZXZ9e2xpbms6dG9kYXl9e2xpbms6bmV4dH08L2Rpdj57bW9udGhzfScgK1xuXHRcdFx0J3twb3B1cDpzdGFydH08ZGl2IGNsYXNzPVwiY2FsZW5kYXJzLWN0cmxcIj57bGluazpjbGVhcn17bGluazpjbG9zZX08L2Rpdj57cG9wdXA6ZW5kfScgK1xuXHRcdFx0JzxkaXYgY2xhc3M9XCJjYWxlbmRhcnMtY2xlYXItZml4XCI+PC9kaXY+PC9kaXY+Jyxcblx0XHRcdG1vbnRoUm93OiAnPGRpdiBjbGFzcz1cImNhbGVuZGFycy1tb250aC1yb3dcIj57bW9udGhzfTwvZGl2PicsXG5cdFx0XHRtb250aDogJzxkaXYgY2xhc3M9XCJjYWxlbmRhcnMtbW9udGhcIj48ZGl2IGNsYXNzPVwiY2FsZW5kYXJzLW1vbnRoLWhlYWRlclwiPnttb250aEhlYWRlcn08L2Rpdj4nICtcblx0XHRcdCc8dGFibGU+PHRoZWFkPnt3ZWVrSGVhZGVyfTwvdGhlYWQ+PHRib2R5Pnt3ZWVrc308L3Rib2R5PjwvdGFibGU+PC9kaXY+Jyxcblx0XHRcdHdlZWtIZWFkZXI6ICc8dHI+e2RheXN9PC90cj4nLFxuXHRcdFx0ZGF5SGVhZGVyOiAnPHRoPntkYXl9PC90aD4nLFxuXHRcdFx0d2VlazogJzx0cj57ZGF5c308L3RyPicsXG5cdFx0XHRkYXk6ICc8dGQ+e2RheX08L3RkPicsXG5cdFx0XHRtb250aFNlbGVjdG9yOiAnLmNhbGVuZGFycy1tb250aCcsXG5cdFx0XHRkYXlTZWxlY3RvcjogJ3RkJyxcblx0XHRcdHJ0bENsYXNzOiAnY2FsZW5kYXJzLXJ0bCcsXG5cdFx0XHRtdWx0aUNsYXNzOiAnY2FsZW5kYXJzLW11bHRpJyxcblx0XHRcdGRlZmF1bHRDbGFzczogJycsXG5cdFx0XHRzZWxlY3RlZENsYXNzOiAnY2FsZW5kYXJzLXNlbGVjdGVkJyxcblx0XHRcdGhpZ2hsaWdodGVkQ2xhc3M6ICdjYWxlbmRhcnMtaGlnaGxpZ2h0Jyxcblx0XHRcdHRvZGF5Q2xhc3M6ICdjYWxlbmRhcnMtdG9kYXknLFxuXHRcdFx0b3RoZXJNb250aENsYXNzOiAnY2FsZW5kYXJzLW90aGVyLW1vbnRoJyxcblx0XHRcdHdlZWtlbmRDbGFzczogJ2NhbGVuZGFycy13ZWVrZW5kJyxcblx0XHRcdGNvbW1hbmRDbGFzczogJ2NhbGVuZGFycy1jbWQnLFxuXHRcdFx0Y29tbWFuZEJ1dHRvbkNsYXNzOiAnJyxcblx0XHRcdGNvbW1hbmRMaW5rQ2xhc3M6ICcnLFxuXHRcdFx0ZGlzYWJsZWRDbGFzczogJ2NhbGVuZGFycy1kaXNhYmxlZCdcblx0XHR9LFxuXHRcblx0XHQvKiogQ29tbWFuZCBhY3Rpb25zIHRoYXQgbWF5IGJlIGFkZGVkIHRvIGEgbGF5b3V0IGJ5IG5hbWUuXG5cdFx0XHQ8dWw+XG5cdFx0XHQ8bGk+cHJldiAtIFNob3cgdGhlIHByZXZpb3VzIG1vbnRoIChiYXNlZCBvbiA8Y29kZT5tb250aHNUb1N0ZXA8L2NvZGU+IG9wdGlvbikgLSA8ZW0+UGFnZVVwPC9lbT48L2xpPlxuXHRcdFx0PGxpPnByZXZKdW1wIC0gU2hvdyB0aGUgcHJldmlvdXMgeWVhciAoYmFzZWQgb24gPGNvZGU+bW9udGhzVG9KdW1wPC9jb2RlPiBvcHRpb24pIC0gPGVtPkN0cmwrUGFnZVVwPC9lbT48L2xpPlxuXHRcdFx0PGxpPm5leHQgLSBTaG93IHRoZSBuZXh0IG1vbnRoIChiYXNlZCBvbiA8Y29kZT5tb250aHNUb1N0ZXA8L2NvZGU+IG9wdGlvbikgLSA8ZW0+UGFnZURvd248L2VtPjwvbGk+XG5cdFx0XHQ8bGk+bmV4dEp1bXAgLSBTaG93IHRoZSBuZXh0IHllYXIgKGJhc2VkIG9uIDxjb2RlPm1vbnRoc1RvSnVtcDwvY29kZT4gb3B0aW9uKSAtIDxlbT5DdHJsK1BhZ2VEb3duPC9lbT48L2xpPlxuXHRcdFx0PGxpPmN1cnJlbnQgLSBTaG93IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbW9udGggb3IgdG9kYXkncyBpZiBub25lIHNlbGVjdGVkIC0gPGVtPkN0cmwrSG9tZTwvZW0+PC9saT5cblx0XHRcdDxsaT50b2RheSAtIFNob3cgdG9kYXkncyBtb250aCAtIDxlbT5DdHJsK0hvbWU8L2VtPjwvbGk+XG5cdFx0XHQ8bGk+Y2xlYXIgLSBFcmFzZSB0aGUgZGF0ZSBhbmQgY2xvc2UgdGhlIGRhdGVwaWNrZXIgcG9wdXAgLSA8ZW0+Q3RybCtFbmQ8L2VtPjwvbGk+XG5cdFx0XHQ8bGk+Y2xvc2UgLSBDbG9zZSB0aGUgZGF0ZXBpY2tlciBwb3B1cCAtIDxlbT5Fc2M8L2VtPjwvbGk+XG5cdFx0XHQ8bGk+cHJldldlZWsgLSBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHByZXZpb3VzIHdlZWsgLSA8ZW0+Q3RybCtVcDwvZW0+PC9saT5cblx0XHRcdDxsaT5wcmV2RGF5IC0gTW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBwcmV2aW91cyBkYXkgLSA8ZW0+Q3RybCtMZWZ0PC9lbT48L2xpPlxuXHRcdFx0PGxpPm5leHREYXkgLSBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgZGF5IC0gPGVtPkN0cmwrUmlnaHQ8L2VtPjwvbGk+XG5cdFx0XHQ8bGk+bmV4dFdlZWsgLSBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgd2VlayAtIDxlbT5DdHJsK0Rvd248L2VtPjwvbGk+XG5cdFx0XHQ8L3VsPlxuXHRcdFx0VGhlIGNvbW1hbmQgbmFtZSBpcyB0aGUga2V5IG5hbWUgYW5kIGlzIHVzZWQgdG8gYWRkIHRoZSBjb21tYW5kIHRvIGEgbGF5b3V0XG5cdFx0XHR3aXRoICd7YnV0dG9uOm5hbWV9JyBvciAne2xpbms6bmFtZX0nLiBFYWNoIGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJvcGVydHkgdGV4dCB7c3RyaW5nfSBUaGUgZmllbGQgaW4gdGhlIHJlZ2lvbmFsIHNldHRpbmdzIGZvciB0aGUgZGlzcGxheWVkIHRleHQuXG5cdFx0XHRAcHJvcGVydHkgc3RhdHVzIHtzdHJpbmd9IFRoZSBmaWVsZCBpbiB0aGUgcmVnaW9uYWwgc2V0dGluZ3MgZm9yIHRoZSBzdGF0dXMgdGV4dC5cblx0XHRcdEBwcm9wZXJ0eSBrZXlzdHJva2Uge29iamVjdH0gVGhlIGtleXN0cm9rZSB0byB0cmlnZ2VyIHRoZSBhY3Rpb24sIHdpdGggYXR0cmlidXRlczpcblx0XHRcdFx0PGNvZGU+a2V5Q29kZTwvY29kZT4ge251bWJlcn0gdGhlIGNvZGUgZm9yIHRoZSBrZXlzdHJva2UsXG5cdFx0XHRcdDxjb2RlPmN0cmxLZXk8L2NvZGU+IHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiA8ZW0+Q3RybDwvZW0+IGlzIHJlcXVpcmVkLFxuXHRcdFx0XHQ8Y29kZT5hbHRLZXk8L2NvZGU+IHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiA8ZW0+QWx0PC9lbT4gaXMgcmVxdWlyZWQsXG5cdFx0XHRcdDxjb2RlPnNoaWZ0S2V5PC9jb2RlPiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgPGVtPlNoaWZ0PC9lbT4gaXMgcmVxdWlyZWQuXG5cdFx0XHRAcHJvcGVydHkgZW5hYmxlZCB7Q2FsZW5kYXJzUGlja2VyQ29tbWFuZEVuYWJsZWR9IFRoZSBmdW5jdGlvbiB0aGF0IGluZGljYXRlcyB0aGUgY29tbWFuZCBpcyBlbmFibGVkLlxuXHRcdFx0QHByb3BlcnR5IGRhdGUge0NhbGVuZGFyc1BpY2tlckNvbW1hbmREYXRlfSBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBkYXRlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjdGlvbi5cblx0XHRcdEBwcm9wZXJ0eSBhY3Rpb24ge0NhbGVuZGFyc1BpY2tlckNvbW1hbmRBY3Rpb259IFRoZSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgdGhlIGFjdGlvbi4gKi9cblx0XHRjb21tYW5kczoge1xuXHRcdFx0cHJldjoge3RleHQ6ICdwcmV2VGV4dCcsIHN0YXR1czogJ3ByZXZTdGF0dXMnLCAvLyBQcmV2aW91cyBtb250aFxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzM30sIC8vIFBhZ2UgdXBcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XG5cdFx0XHRcdFx0cmV0dXJuICghbWluRGF0ZSB8fCBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cblx0XHRcdFx0XHRcdGFkZCgxIC0gaW5zdC5vcHRpb25zLm1vbnRoc1RvU3RlcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXG5cdFx0XHRcdFx0XHRkYXkoaW5zdC5vcHRpb25zLmNhbGVuZGFyLm1pbkRheSkuYWRkKC0xLCAnZCcpLmNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpOyB9LFxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdFx0YWRkKC1pbnN0Lm9wdGlvbnMubW9udGhzVG9TdGVwIC0gaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKS5cblx0XHRcdFx0XHRcdGRheShpbnN0Lm9wdGlvbnMuY2FsZW5kYXIubWluRGF5KTsgfSxcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0cGx1Z2luLmNoYW5nZU1vbnRoKHRoaXMsIC1pbnN0Lm9wdGlvbnMubW9udGhzVG9TdGVwKTsgfVxuXHRcdFx0fSxcblx0XHRcdHByZXZKdW1wOiB7dGV4dDogJ3ByZXZKdW1wVGV4dCcsIHN0YXR1czogJ3ByZXZKdW1wU3RhdHVzJywgLy8gUHJldmlvdXMgeWVhclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzMywgY3RybEtleTogdHJ1ZX0sIC8vIEN0cmwgKyBQYWdlIHVwXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuY3VyTWluRGF0ZSgpO1xuXHRcdFx0XHRcdHJldHVybiAoIW1pbkRhdGUgfHwgaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXG5cdFx0XHRcdFx0XHRhZGQoMSAtIGluc3Qub3B0aW9ucy5tb250aHNUb0p1bXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpLmFkZCgtMSwgJ2QnKS5jb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKTsgfSxcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHJldHVybiBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cblx0XHRcdFx0XHRcdGFkZCgtaW5zdC5vcHRpb25zLm1vbnRoc1RvSnVtcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXG5cdFx0XHRcdFx0XHRkYXkoaW5zdC5vcHRpb25zLmNhbGVuZGFyLm1pbkRheSk7IH0sXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHBsdWdpbi5jaGFuZ2VNb250aCh0aGlzLCAtaW5zdC5vcHRpb25zLm1vbnRoc1RvSnVtcCk7IH1cblx0XHRcdH0sXG5cdFx0XHRuZXh0OiB7dGV4dDogJ25leHRUZXh0Jywgc3RhdHVzOiAnbmV4dFN0YXR1cycsIC8vIE5leHQgbW9udGhcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzR9LCAvLyBQYWdlIGRvd25cblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcblx0XHRcdFx0XHRyZXR1cm4gKCFtYXhEYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdFx0YWRkKGluc3Qub3B0aW9ucy5tb250aHNUb1N0ZXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpLmNvbXBhcmVUbyhtYXhEYXRlKSAhPT0gKzEpOyB9LFxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdFx0YWRkKGluc3Qub3B0aW9ucy5tb250aHNUb1N0ZXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpOyB9LFxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdFx0XHRwbHVnaW4uY2hhbmdlTW9udGgodGhpcywgaW5zdC5vcHRpb25zLm1vbnRoc1RvU3RlcCk7IH1cblx0XHRcdH0sXG5cdFx0XHRuZXh0SnVtcDoge3RleHQ6ICduZXh0SnVtcFRleHQnLCBzdGF0dXM6ICduZXh0SnVtcFN0YXR1cycsIC8vIE5leHQgeWVhclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzNCwgY3RybEtleTogdHJ1ZX0sIC8vIEN0cmwgKyBQYWdlIGRvd25cblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcblx0XHRcdFx0XHRyZXR1cm4gKCFtYXhEYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdFx0YWRkKGluc3Qub3B0aW9ucy5tb250aHNUb0p1bXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpLmNvbXBhcmVUbyhtYXhEYXRlKSAhPT0gKzEpO1x0fSxcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHJldHVybiBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cblx0XHRcdFx0XHRcdGFkZChpbnN0Lm9wdGlvbnMubW9udGhzVG9KdW1wIC0gaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKS5cblx0XHRcdFx0XHRcdGRheShpbnN0Lm9wdGlvbnMuY2FsZW5kYXIubWluRGF5KTsgfSxcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0cGx1Z2luLmNoYW5nZU1vbnRoKHRoaXMsIGluc3Qub3B0aW9ucy5tb250aHNUb0p1bXApOyB9XG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudDoge3RleHQ6ICdjdXJyZW50VGV4dCcsIHN0YXR1czogJ2N1cnJlbnRTdGF0dXMnLCAvLyBDdXJyZW50IG1vbnRoXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDM2LCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIEhvbWVcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XG5cdFx0XHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xuXHRcdFx0XHRcdHZhciBjdXJEYXRlID0gaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpO1xuXHRcdFx0XHRcdHJldHVybiAoIW1pbkRhdGUgfHwgY3VyRGF0ZS5jb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKSAmJlxuXHRcdFx0XHRcdFx0KCFtYXhEYXRlIHx8IGN1ckRhdGUuY29tcGFyZVRvKG1heERhdGUpICE9PSArMSk7IH0sXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpOyB9LFxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdFx0XHR2YXIgY3VyRGF0ZSA9IGluc3Quc2VsZWN0ZWREYXRlc1swXSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKTtcblx0XHRcdFx0XHRwbHVnaW4uc2hvd01vbnRoKHRoaXMsIGN1ckRhdGUueWVhcigpLCBjdXJEYXRlLm1vbnRoKCkpOyB9XG5cdFx0XHR9LFxuXHRcdFx0dG9kYXk6IHt0ZXh0OiAndG9kYXlUZXh0Jywgc3RhdHVzOiAndG9kYXlTdGF0dXMnLCAvLyBUb2RheSdzIG1vbnRoXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDM2LCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIEhvbWVcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XG5cdFx0XHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xuXHRcdFx0XHRcdHJldHVybiAoIW1pbkRhdGUgfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCkuY29tcGFyZVRvKG1pbkRhdGUpICE9PSAtMSkgJiZcblx0XHRcdFx0XHRcdCghbWF4RGF0ZSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKS5jb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKTsgfSxcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCk7IH0sXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkgeyBwbHVnaW4uc2hvd01vbnRoKHRoaXMpOyB9XG5cdFx0XHR9LFxuXHRcdFx0Y2xlYXI6IHt0ZXh0OiAnY2xlYXJUZXh0Jywgc3RhdHVzOiAnY2xlYXJTdGF0dXMnLCAvLyBDbGVhciB0aGUgZGF0ZXBpY2tlclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzNSwgY3RybEtleTogdHJ1ZX0sIC8vIEN0cmwgKyBFbmRcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gdHJ1ZTsgfSxcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gbnVsbDsgfSxcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7IHBsdWdpbi5jbGVhcih0aGlzKTsgfVxuXHRcdFx0fSxcblx0XHRcdGNsb3NlOiB7dGV4dDogJ2Nsb3NlVGV4dCcsIHN0YXR1czogJ2Nsb3NlU3RhdHVzJywgLy8gQ2xvc2UgdGhlIGRhdGVwaWNrZXJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMjd9LCAvLyBFc2NhcGVcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gdHJ1ZTsgfSxcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gbnVsbDsgfSxcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7IHBsdWdpbi5oaWRlKHRoaXMpOyB9XG5cdFx0XHR9LFxuXHRcdFx0cHJldldlZWs6IHt0ZXh0OiAncHJldldlZWtUZXh0Jywgc3RhdHVzOiAncHJldldlZWtTdGF0dXMnLCAvLyBQcmV2aW91cyB3ZWVrXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDM4LCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIFVwXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuY3VyTWluRGF0ZSgpO1xuXHRcdFx0XHRcdHJldHVybiAoIW1pbkRhdGUgfHwgaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXG5cdFx0XHRcdFx0XHRhZGQoLWluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCksICdkJykuY29tcGFyZVRvKG1pbkRhdGUpICE9PSAtMSk7IH0sXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHsgcmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdGFkZCgtaW5zdC5vcHRpb25zLmNhbGVuZGFyLmRheXNJbldlZWsoKSwgJ2QnKTsgfSxcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7IHBsdWdpbi5jaGFuZ2VEYXkodGhpcywgLWluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCkpOyB9XG5cdFx0XHR9LFxuXHRcdFx0cHJldkRheToge3RleHQ6ICdwcmV2RGF5VGV4dCcsIHN0YXR1czogJ3ByZXZEYXlTdGF0dXMnLCAvLyBQcmV2aW91cyBkYXlcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzcsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgTGVmdFxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHRcdFx0dmFyIG1pbkRhdGUgPSBpbnN0LmN1ck1pbkRhdGUoKTtcblx0XHRcdFx0XHRyZXR1cm4gKCFtaW5EYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZCgtMSwgJ2QnKS5cblx0XHRcdFx0XHRcdGNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpOyB9LFxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5hZGQoLTEsICdkJyk7IH0sXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkgeyBwbHVnaW4uY2hhbmdlRGF5KHRoaXMsIC0xKTsgfVxuXHRcdFx0fSxcblx0XHRcdG5leHREYXk6IHt0ZXh0OiAnbmV4dERheVRleHQnLCBzdGF0dXM6ICduZXh0RGF5U3RhdHVzJywgLy8gTmV4dCBkYXlcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzksIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgUmlnaHRcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcblx0XHRcdFx0XHRyZXR1cm4gKCFtYXhEYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZCgxLCAnZCcpLlxuXHRcdFx0XHRcdFx0Y29tcGFyZVRvKG1heERhdGUpICE9PSArMSk7IH0sXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHsgcmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZCgxLCAnZCcpOyB9LFxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHsgcGx1Z2luLmNoYW5nZURheSh0aGlzLCAxKTsgfVxuXHRcdFx0fSxcblx0XHRcdG5leHRXZWVrOiB7dGV4dDogJ25leHRXZWVrVGV4dCcsIHN0YXR1czogJ25leHRXZWVrU3RhdHVzJywgLy8gTmV4dCB3ZWVrXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDQwLCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIERvd25cblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcblx0XHRcdFx0XHRyZXR1cm4gKCFtYXhEYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdFx0YWRkKGluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCksICdkJykuY29tcGFyZVRvKG1heERhdGUpICE9PSArMSk7IH0sXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHsgcmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxuXHRcdFx0XHRcdGFkZChpbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGF5c0luV2VlaygpLCAnZCcpOyB9LFxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHsgcGx1Z2luLmNoYW5nZURheSh0aGlzLCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGF5c0luV2VlaygpKTsgfVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjb21tYW5kIGlzIGVuYWJsZWQuXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyQ29tbWFuZEVuYWJsZWRcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBjb21tYW5kIGlzIGVuYWJsZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXG5cdFx0XHRAZXhhbXBsZSBlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XG5cdHJldHVybiAhIWluc3QuY3VyTWluRGF0ZSgpO1xuIH0gKi9cblxuXHRcdC8qKiBDYWxjdWxhdGUgdGhlIHJlcHJlc2VudGF0aXZlIGRhdGUgZm9yIGEgY29tbWFuZC5cblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJDb21tYW5kRGF0ZVxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gQSBkYXRlIGFwcHJvcHJpYXRlIGZvciB0aGlzIGNvbW1hbmQuXG5cdFx0XHRAZXhhbXBsZSBkYXRlOiBmdW5jdGlvbihpbnN0KSB7XG5cdHJldHVybiBpbnN0LmN1ck1pbkRhdGUoKTtcbiB9ICovXG5cblx0XHQvKiogUGVyZm9ybSB0aGUgYWN0aW9uIGZvciBhIGNvbW1hbmQuXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyQ29tbWFuZEFjdGlvblxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAZXhhbXBsZSBkYXRlOiBmdW5jdGlvbihpbnN0KSB7XG5cdCQuZGF0ZXBpY2suc2V0RGF0ZShpbnN0LmVsZW0sIGluc3QuY3VyTWluRGF0ZSgpKTtcbiB9ICovXG5cblx0XHQvKiogQ2FsY3VsYXRlIHRoZSB3ZWVrIG9mIHRoZSB5ZWFyIGZvciBhIGRhdGUuXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyQ2FsY3VsYXRlV2Vla1xuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgZGF0ZSB0byBldmFsdWF0ZS5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIHdlZWsgb2YgdGhlIHllYXIuXG5cdFx0XHRAZXhhbXBsZSBjYWxjdWxhdGVXZWVrOiBmdW5jdGlvbihkYXRlKSB7XG5cdHZhciBzdGFydFllYXIgPSAkLmNhbGVuZGFycy5uZXdEYXRlKGRhdGUueWVhcigpLCAxLCAxKTtcblx0cmV0dXJuIE1hdGguZmxvb3IoKGRhdGUuZGF5T2ZZZWFyKCkgLSBzdGFydFllYXIuZGF5T2ZZZWFyKCkpIC8gNykgKyAxO1xuIH0gKi9cblxuXHRcdC8qKiBQcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IGFuIGluZGl2aWR1YWwgZGF0ZSBzaG93biBpbiB0aGUgY2FsZW5kYXIuXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyT25EYXRlXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBkYXRlIHRvIGV2YWx1YXRlLlxuXHRcdFx0QHJldHVybiB7b2JqZWN0fSBJbmZvcm1hdGlvbiBhYm91dCB0aGF0IGRhdGUsIHdpdGggdGhlIHByb3BlcnRpZXMgYWJvdmUuXG5cdFx0XHRAcHJvcGVydHkgc2VsZWN0YWJsZSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBkYXRlIGNhbiBiZSBzZWxlY3RlZC5cblx0XHRcdEBwcm9wZXJ0eSBkYXRlQ2xhc3Mge3N0cmluZ30gQ2xhc3MoZXMpIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGRhdGUuXG5cdFx0XHRAcHJvcGVydHkgY29udGVudCB7c3RyaW5nfSBUaGUgZGF0ZSBjZWxsIGNvbnRlbnQuXG5cdFx0XHRAcHJvcGVydHkgdG9vbHRpcCB7c3RyaW5nfSBBIHBvcHVwIHRvb2x0aXAgZm9yIHRoZSBkYXRlLlxuXHRcdFx0QGV4YW1wbGUgb25EYXRlOiBmdW5jdGlvbihkYXRlKSB7XG5cdHJldHVybiB7c2VsZWN0YWJsZTogZGF0ZS5kYXkoKSA+IDAgJiYgZGF0ZS5kYXkoKSAmbHQ7IDUsXG5cdFx0ZGF0ZUNsYXNzOiBkYXRlLmRheSgpID09PSA0ID8gJ2xhc3QtZGF5JyA6ICcnfTtcbiB9ICovXG5cblx0XHQvKiogVXBkYXRlIHRoZSBkYXRlcGlja2VyIGRpc3BsYXkuXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyT25TaG93XG5cdFx0XHRAcGFyYW0gcGlja2VyIHtqUXVlcnl9IFRoZSBkYXRlcGlja2VyIDxjb2RlPmRpdjwvY29kZT4gdG8gYmUgc2hvd24uXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBleGFtcGxlIG9uU2hvdzogZnVuY3Rpb24ocGlja2VyLCBpbnN0KSB7XG5cdHBpY2tlci5hcHBlbmQoJyZsdDtidXR0b24gdHlwZT1cImJ1dHRvblwiPkhpJmx0Oy9idXR0b24+JykuXG5cdFx0ZmluZCgnYnV0dG9uOmxhc3QnKS5jbGljayhmdW5jdGlvbigpIHtcblx0XHRcdGFsZXJ0KCdIaSEnKTtcblx0XHR9KTtcbiB9ICovXG5cblx0XHQvKiogUmVhY3QgdG8gbmF2aWdhdGluZyB0aHJvdWdoIHRoZSBtb250aHMveWVhcnMuXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyT25DaGFuZ2VNb250aFllYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSBuZXcgeWVhci5cblx0XHRcdEBwYXJhbSBtb250aCB7bnVtYmVyfSBUaGUgbmV3IG1vbnRoICgxIHRvIDEyKS5cblx0XHRcdEBleGFtcGxlIG9uQ2hhbmdlTW9udGhZZWFyOiBmdW5jdGlvbih5ZWFyLCBtb250aCkge1xuXHRhbGVydCgnTm93IGluICcgKyBtb250aCArICcvJyArIHllYXIpO1xuIH0gKi9cblx0XHRcdFxuXHRcdC8qKiBEYXRlcGlja2VyIG9uIHNlbGVjdCBjYWxsYmFjay5cblx0XHRcdFRyaWdnZXJlZCB3aGVuIGEgZGF0ZSBpcyBzZWxlY3RlZC5cblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJPblNlbGVjdFxuXHRcdFx0QHBhcmFtIGRhdGVzIHtDRGF0ZVtdfSBUaGUgc2VsZWN0ZWQgZGF0ZShzKS5cblx0XHRcdEBleGFtcGxlIG9uU2VsZWN0OiBmdW5jdGlvbihkYXRlcykge1xuIFx0YWxlcnQoJ1NlbGVjdGVkICcgKyBkYXRlcyk7XG4gfSAqL1xuXHRcdFx0XG5cdFx0LyoqIERhdGVwaWNrZXIgb24gY2xvc2UgY2FsbGJhY2suXG5cdFx0XHRUcmlnZ2VyZWQgd2hlbiBhIHBvcHVwIGNhbGVuZGFyIGlzIGNsb3NlZC5cblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJPbkNsb3NlXG5cdFx0XHRAcGFyYW0gZGF0ZXMge0NEYXRlW119IFRoZSBzZWxlY3RlZCBkYXRlKHMpLlxuXHRcdFx0QGV4YW1wbGUgb25DbG9zZTogZnVuY3Rpb24oZGF0ZXMpIHtcbiBcdGFsZXJ0KCdTZWxlY3RlZCAnICsgZGF0ZXMpO1xuIH0gKi9cblx0XHRcblx0XHQvKiogRGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIHBsdWdpbi5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcm9wZXJ0eSBbY2FsZW5kYXI9JC5jYWxlbmRhcnMuaW5zdGFuY2UoKV0ge0NhbGVuZGFyfSBUaGUgY2FsZW5kYXIgZm9yIHRoaXMgZGF0ZXBpY2tlci5cblx0XHRcdEBwcm9wZXJ0eSBbcGlja2VyQ2xhc3M9JyddIHtzdHJpbmd9IENTUyBjbGFzcyB0byBhZGQgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUgZGF0ZXBpY2tlci5cblx0XHRcdEBwcm9wZXJ0eSBbc2hvd09uRm9jdXM9dHJ1ZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGZvciBwb3B1cCBvbiBmb2N1cywgPGNvZGU+ZmFsc2U8L2NvZGU+IGZvciBub3QuXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dUcmlnZ2VyPW51bGxdIHtzdHJpbmd8RWxlbWVudHxqUXVlcnl9IEVsZW1lbnQgdG8gYmUgY2xvbmVkIGZvciBhIHRyaWdnZXIsIDxjb2RlPm51bGw8L2NvZGU+IGZvciBub25lLlxuXHRcdFx0QHByb3BlcnR5IFtzaG93QW5pbT0nc2hvdyddIHtzdHJpbmd9IE5hbWUgb2YgalF1ZXJ5IGFuaW1hdGlvbiBmb3IgcG9wdXAsICcnIGZvciBubyBhbmltYXRpb24uXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dPcHRpb25zPW51bGxdIHtvYmplY3R9IE9wdGlvbnMgZm9yIGVuaGFuY2VkIGFuaW1hdGlvbnMuXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dTcGVlZD0nbm9ybWFsJ10ge3N0cmluZ30gRHVyYXRpb24gb2YgZGlzcGxheS9jbG9zdXJlLlxuXHRcdFx0QHByb3BlcnR5IFtwb3B1cENvbnRhaW5lcj1udWxsXSB7c3RyaW5nfEVsZW1lbnR8alF1ZXJ5fSBUaGUgZWxlbWVudCB0byB3aGljaCBhIHBvcHVwIGNhbGVuZGFyIGlzIGFkZGVkLCA8Y29kZT5udWxsPC9jb2RlPiBmb3IgYm9keS5cblx0XHRcdEBwcm9wZXJ0eSBbYWxpZ25tZW50PSdib3R0b20nXSB7c3RyaW5nfSBBbGlnbm1lbnQgb2YgcG9wdXAgLSB3aXRoIG5vbWluYXRlZCBjb3JuZXIgb2YgaW5wdXQ6XG5cdFx0XHRcdFx0XHQndG9wJyBvciAnYm90dG9tJyBhbGlnbnMgZGVwZW5kaW5nIG9uIGxhbmd1YWdlIGRpcmVjdGlvbixcblx0XHRcdFx0XHRcdCd0b3BMZWZ0JywgJ3RvcFJpZ2h0JywgJ2JvdHRvbUxlZnQnLCAnYm90dG9tUmlnaHQnLlxuXHRcdFx0QHByb3BlcnR5IFtmaXhlZFdlZWtzPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gYWx3YXlzIHNob3cgNiB3ZWVrcywgPGNvZGU+ZmFsc2U8L2NvZGU+IHRvIG9ubHkgc2hvdyBhcyBtYW55IGFzIGFyZSBuZWVkZWQuXG5cdFx0XHRAcHJvcGVydHkgW2ZpcnN0RGF5PW51bGxdIHtudW1iZXJ9IEZpcnN0IGRheSBvZiB0aGUgd2VlaywgMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLiwgPGNvZGU+bnVsbDwvY29kZT4gZm9yIDxjb2RlPmNhbGVuZGFyPC9jb2RlPiBkZWZhdWx0LlxuXHRcdFx0QHByb3BlcnR5IFtjYWxjdWxhdGVXZWVrPW51bGxdIHtDYWxlbmRhcnNQaWNrZXJDYWxjdWxhdGVXZWVrfSBDYWxjdWxhdGUgd2VlayBvZiB0aGUgeWVhciBmcm9tIGEgZGF0ZSwgPGNvZGU+bnVsbDwvY29kZT4gZm9yIDxjb2RlPmNhbGVuZGFyPC9jb2RlPiBkZWZhdWx0LlxuXHRcdFx0QHByb3BlcnR5IFttb250aHNUb1Nob3c9MV0ge251bWJlcnxudW1iZXJbXX0gSG93IG1hbnkgbW9udGhzIHRvIHNob3csIGNvbHMgb3IgW3Jvd3MsIGNvbHNdLlxuXHRcdFx0QHByb3BlcnR5IFttb250aHNPZmZzZXQ9MF0ge251bWJlcn0gSG93IG1hbnkgbW9udGhzIHRvIG9mZnNldCB0aGUgcHJpbWFyeSBtb250aCBieTtcblx0XHRcdFx0XHRcdG1heSBiZSBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIGRhdGUgYW5kIHJldHVybnMgdGhlIG9mZnNldC5cblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhzVG9TdGVwPTFdIHtudW1iZXJ9IEhvdyBtYW55IG1vbnRocyB0byBtb3ZlIHdoZW4gcHJldi9uZXh0IGNsaWNrZWQuXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoc1RvSnVtcD0xMl0ge251bWJlcn0gSG93IG1hbnkgbW9udGhzIHRvIG1vdmUgd2hlbiBsYXJnZSBwcmV2L25leHQgY2xpY2tlZC5cblx0XHRcdEBwcm9wZXJ0eSBbdXNlTW91c2VXaGVlbD10cnVlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gdXNlIG1vdXNld2hlZWwgaWYgYXZhaWxhYmxlLCA8Y29kZT5mYWxzZTwvY29kZT4gdG8gbmV2ZXIgdXNlIGl0LlxuXHRcdFx0QHByb3BlcnR5IFtjaGFuZ2VNb250aD10cnVlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gY2hhbmdlIG1vbnRoL3llYXIgdmlhIGRyb3AtZG93biwgPGNvZGU+ZmFsc2U8L2NvZGU+IGZvciBuYXZpZ2F0aW9uIG9ubHkuXG5cdFx0XHRAcHJvcGVydHkgW3llYXJSYW5nZT0nYy0xMDpjKzEwJ10ge3N0cmluZ30gUmFuZ2Ugb2YgeWVhcnMgdG8gc2hvdyBpbiBkcm9wLWRvd246ICdhbnknIGZvciBkaXJlY3QgdGV4dCBlbnRyeVxuXHRcdFx0XHRcdFx0b3IgJ3N0YXJ0OmVuZCcsIHdoZXJlIHN0YXJ0L2VuZCBhcmUgJystbm4nIGZvciByZWxhdGl2ZSB0byB0b2RheVxuXHRcdFx0XHRcdFx0b3IgJ2MrLW5uJyBmb3IgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlXG5cdFx0XHRcdFx0XHRvciAnbm5ubicgZm9yIGFuIGFic29sdXRlIHllYXIuXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dPdGhlck1vbnRocz1mYWxzZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIHNob3cgZGF0ZXMgZnJvbSBvdGhlciBtb250aHMsIDxjb2RlPmZhbHNlPC9jb2RlPiB0byBub3Qgc2hvdyB0aGVtLlxuXHRcdFx0QHByb3BlcnR5IFtzZWxlY3RPdGhlck1vbnRocz1mYWxzZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGFsbG93IHNlbGVjdGlvbiBvZiBkYXRlcyBmcm9tIG90aGVyIG1vbnRocyB0b28uXG5cdFx0XHRAcHJvcGVydHkgW2RlZmF1bHREYXRlPW51bGxdIHtzdHJpbmd8bnVtYmVyfENEYXRlfSBEYXRlIHRvIHNob3cgaWYgbm8gb3RoZXIgc2VsZWN0ZWQuXG5cdFx0XHRAcHJvcGVydHkgW3NlbGVjdERlZmF1bHREYXRlPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gcHJlLXNlbGVjdCB0aGUgZGVmYXVsdCBkYXRlIGlmIG5vIG90aGVyIGlzIGNob3Nlbi5cblx0XHRcdEBwcm9wZXJ0eSBbbWluRGF0ZT1udWxsXSB7c3RyaW5nfG51bWJlcnxDRGF0ZX0gVGhlIG1pbmltdW0gc2VsZWN0YWJsZSBkYXRlLlxuXHRcdFx0QHByb3BlcnR5IFttYXhEYXRlPW51bGxdIHtzdHJpbmd8bnVtYmVyfENEYXRlfSBUaGUgbWF4aW11bSBzZWxlY3RhYmxlIGRhdGUuXG5cdFx0XHRAcHJvcGVydHkgW2RhdGVGb3JtYXQ9J21tL2RkL3l5eXknXSB7c3RyaW5nfSBGb3JtYXQgZm9yIGRhdGVzLlxuXHRcdFx0QHByb3BlcnR5IFthdXRvU2l6ZT1mYWxzZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIHNpemUgdGhlIGlucHV0IGZpZWxkIGFjY29yZGluZyB0byB0aGUgZGF0ZSBmb3JtYXQuXG5cdFx0XHRAcHJvcGVydHkgW3JhbmdlU2VsZWN0PWZhbHNlXSB7Ym9vbGVhbn0gQWxsb3dzIGZvciBzZWxlY3RpbmcgYSBkYXRlIHJhbmdlIG9uIG9uZSBkYXRlIHBpY2tlci5cblx0XHRcdEBwcm9wZXJ0eSBbcmFuZ2VTZXBhcmF0b3I9JyAtICddIHtzdHJpbmd9IFRleHQgYmV0d2VlbiB0d28gZGF0ZXMgaW4gYSByYW5nZS5cblx0XHRcdEBwcm9wZXJ0eSBbbXVsdGlTZWxlY3Q9MF0ge251bWJlcn0gTWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0YWJsZSBkYXRlcywgemVybyBmb3Igc2luZ2xlIHNlbGVjdC5cblx0XHRcdEBwcm9wZXJ0eSBbbXVsdGlTZXBhcmF0b3I9JywnXSB7c3RyaW5nfSBUZXh0IGJldHdlZW4gbXVsdGlwbGUgZGF0ZXMuXG5cdFx0XHRAcHJvcGVydHkgW29uRGF0ZT1udWxsXSB7Q2FsZW5kYXJzUGlja2VyT25EYXRlfSBDYWxsYmFjayBhcyBhIGRhdGUgaXMgYWRkZWQgdG8gdGhlIGRhdGVwaWNrZXIuXG5cdFx0XHRAcHJvcGVydHkgW29uU2hvdz1udWxsXSB7Q2FsZW5kYXJzUGlja2VyT25TaG93fSBDYWxsYmFjayBqdXN0IGJlZm9yZSBhIGRhdGVwaWNrZXIgaXMgc2hvd24uXG5cdFx0XHRAcHJvcGVydHkgW29uQ2hhbmdlTW9udGhZZWFyPW51bGxdIHtDYWxlbmRhcnNQaWNrZXJPbkNoYW5nZU1vbnRoWWVhcn0gQ2FsbGJhY2sgd2hlbiBhIG5ldyBtb250aC95ZWFyIGlzIHNlbGVjdGVkLlxuXHRcdFx0QHByb3BlcnR5IFtvblNlbGVjdD1udWxsXSB7Q2FsZW5kYXJzUGlja2VyT25TZWxlY3R9IENhbGxiYWNrIHdoZW4gYSBkYXRlIGlzIHNlbGVjdGVkLlxuXHRcdFx0QHByb3BlcnR5IFtvbkNsb3NlPW51bGxdIHtDYWxlbmRhcnNQaWNrZXJPbkNsb3NlfSBDYWxsYmFjayB3aGVuIGEgZGF0ZXBpY2tlciBpcyBjbG9zZWQuXG5cdFx0XHRAcHJvcGVydHkgW2FsdEZpZWxkPW51bGxdIHtzdHJpbmd8RWxlbWVudHxqUXVlcnl9IEFsdGVybmF0ZSBmaWVsZCB0byB1cGRhdGUgaW4gc3luY2ggd2l0aCB0aGUgZGF0ZXBpY2tlci5cblx0XHRcdEBwcm9wZXJ0eSBbYWx0Rm9ybWF0PW51bGxdIHtzdHJpbmd9IERhdGUgZm9ybWF0IGZvciBhbHRlcm5hdGUgZmllbGQsIGRlZmF1bHRzIHRvIDxjb2RlPmRhdGVGb3JtYXQ8L2NvZGU+LlxuXHRcdFx0QHByb3BlcnR5IFtjb25zdHJhaW5JbnB1dD10cnVlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gY29uc3RyYWluIHR5cGVkIGlucHV0IHRvIDxjb2RlPmRhdGVGb3JtYXQ8L2NvZGU+IGFsbG93ZWQgY2hhcmFjdGVycy5cblx0XHRcdEBwcm9wZXJ0eSBbY29tbWFuZHNBc0RhdGVGb3JtYXQ9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBhcHBseVxuXHRcdFx0XHRcdFx0PGNvZGU+PGEgaHJlZj1cIiNmb3JtYXREYXRlXCI+Zm9ybWF0RGF0ZTwvYT48L2NvZGU+IHRvIHRoZSBjb21tYW5kIHRleHRzLlxuXHRcdFx0QHByb3BlcnR5IFtjb21tYW5kcz10aGlzLmNvbW1hbmRzXSB7b2JqZWN0fSBDb21tYW5kIGFjdGlvbnMgdGhhdCBtYXkgYmUgYWRkZWQgdG8gYSBsYXlvdXQgYnkgbmFtZS4gKi9cblx0XHRkZWZhdWx0T3B0aW9uczoge1xuXHRcdFx0Y2FsZW5kYXI6ICQuY2FsZW5kYXJzLmluc3RhbmNlKCksXG5cdFx0XHRwaWNrZXJDbGFzczogJycsXG5cdFx0XHRzaG93T25Gb2N1czogdHJ1ZSxcblx0XHRcdHNob3dUcmlnZ2VyOiBudWxsLFxuXHRcdFx0c2hvd0FuaW06ICdzaG93Jyxcblx0XHRcdHNob3dPcHRpb25zOiB7fSxcblx0XHRcdHNob3dTcGVlZDogJ25vcm1hbCcsXG5cdFx0XHRwb3B1cENvbnRhaW5lcjogbnVsbCxcblx0XHRcdGFsaWdubWVudDogJ2JvdHRvbScsXG5cdFx0XHRmaXhlZFdlZWtzOiBmYWxzZSxcblx0XHRcdGZpcnN0RGF5OiBudWxsLFxuXHRcdFx0Y2FsY3VsYXRlV2VlazogbnVsbCxcblx0XHRcdG1vbnRoc1RvU2hvdzogMSxcblx0XHRcdG1vbnRoc09mZnNldDogMCxcblx0XHRcdG1vbnRoc1RvU3RlcDogMSxcblx0XHRcdG1vbnRoc1RvSnVtcDogMTIsXG5cdFx0XHR1c2VNb3VzZVdoZWVsOiB0cnVlLFxuXHRcdFx0Y2hhbmdlTW9udGg6IHRydWUsXG5cdFx0XHR5ZWFyUmFuZ2U6ICdjLTEwOmMrMTAnLFxuXHRcdFx0c2hvd090aGVyTW9udGhzOiBmYWxzZSxcblx0XHRcdHNlbGVjdE90aGVyTW9udGhzOiBmYWxzZSxcblx0XHRcdGRlZmF1bHREYXRlOiBudWxsLFxuXHRcdFx0c2VsZWN0RGVmYXVsdERhdGU6IGZhbHNlLFxuXHRcdFx0bWluRGF0ZTogbnVsbCxcblx0XHRcdG1heERhdGU6IG51bGwsXG5cdFx0XHRkYXRlRm9ybWF0OiBudWxsLFxuXHRcdFx0YXV0b1NpemU6IGZhbHNlLFxuXHRcdFx0cmFuZ2VTZWxlY3Q6IGZhbHNlLFxuXHRcdFx0cmFuZ2VTZXBhcmF0b3I6ICcgLSAnLFxuXHRcdFx0bXVsdGlTZWxlY3Q6IDAsXG5cdFx0XHRtdWx0aVNlcGFyYXRvcjogJywnLFxuXHRcdFx0b25EYXRlOiBudWxsLFxuXHRcdFx0b25TaG93OiBudWxsLFxuXHRcdFx0b25DaGFuZ2VNb250aFllYXI6IG51bGwsXG5cdFx0XHRvblNlbGVjdDogbnVsbCxcblx0XHRcdG9uQ2xvc2U6IG51bGwsXG5cdFx0XHRhbHRGaWVsZDogbnVsbCxcblx0XHRcdGFsdEZvcm1hdDogbnVsbCxcblx0XHRcdGNvbnN0cmFpbklucHV0OiB0cnVlLFxuXHRcdFx0Y29tbWFuZHNBc0RhdGVGb3JtYXQ6IGZhbHNlLFxuXHRcdFx0Y29tbWFuZHM6IHt9IC8vIHRoaXMuY29tbWFuZHNcblx0XHR9LFxuXG5cdFx0LyoqIExvY2FsaXNhdGlvbnMgZm9yIHRoZSBwbHVnaW4uXG5cdFx0XHRFbnRyaWVzIGFyZSBvYmplY3RzIGluZGV4ZWQgYnkgdGhlIGxhbmd1YWdlIGNvZGUgKCcnIGJlaW5nIHRoZSBkZWZhdWx0IFVTL0VuZ2xpc2gpLlxuXHRcdFx0RWFjaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcy5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcm9wZXJ0eSBbcmVuZGVyZXI9dGhpcy5kZWZhdWx0UmVuZGVyZXJdIHtzdHJpbmd9IFRoZSByZW5kZXJpbmcgdGVtcGxhdGVzLlxuXHRcdFx0QHByb3BlcnR5IFtwcmV2VGV4dD0nJmx0O1ByZXYnXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgcHJldmlvdXMgbW9udGggY29tbWFuZC5cblx0XHRcdEBwcm9wZXJ0eSBbcHJldlN0YXR1cz0nU2hvdyB0aGUgcHJldmlvdXMgbW9udGgnXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3IgdGhlIHByZXZpb3VzIG1vbnRoIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW3ByZXZKdW1wVGV4dD0nJmx0OyZsdDsnXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgcHJldmlvdXMgeWVhciBjb21tYW5kLlxuXHRcdFx0QHByb3BlcnR5IFtwcmV2SnVtcFN0YXR1cz0nU2hvdyB0aGUgcHJldmlvdXMgeWVhciddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgcHJldmlvdXMgeWVhciBjb21tYW5kLlxuXHRcdFx0QHByb3BlcnR5IFtuZXh0VGV4dD0nTmV4dCZndDsnXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgbmV4dCBtb250aCBjb21tYW5kLlxuXHRcdFx0QHByb3BlcnR5IFtuZXh0U3RhdHVzPSdTaG93IHRoZSBuZXh0IG1vbnRoJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSBuZXh0IG1vbnRoIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW25leHRKdW1wVGV4dD0nJmd0OyZndDsnXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgbmV4dCB5ZWFyIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW25leHRKdW1wU3RhdHVzPSdTaG93IHRoZSBuZXh0IHllYXInXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3IgdGhlIG5leHQgeWVhciBjb21tYW5kLlxuXHRcdFx0QHByb3BlcnR5IFtjdXJyZW50VGV4dD0nQ3VycmVudCddIHtzdHJpbmd9IFRleHQgZm9yIHRoZSBjdXJyZW50IG1vbnRoIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW2N1cnJlbnRTdGF0dXM9J1Nob3cgdGhlIGN1cnJlbnQgbW9udGgnXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3IgdGhlIGN1cnJlbnQgbW9udGggY29tbWFuZC5cblx0XHRcdEBwcm9wZXJ0eSBbdG9kYXlUZXh0PSdUb2RheSddIHtzdHJpbmd9IFRleHQgZm9yIHRoZSB0b2RheSdzIG1vbnRoIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW3RvZGF5U3RhdHVzPSdTaG93IHRvZGF5XFwncyBtb250aCddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgdG9kYXkncyBtb250aCBjb21tYW5kLlxuXHRcdFx0QHByb3BlcnR5IFtjbGVhclRleHQ9J0NsZWFyJ10ge3N0cmluZ30gVGV4dCBmb3IgdGhlIGNsZWFyIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW2NsZWFyU3RhdHVzPSdDbGVhciBhbGwgdGhlIGRhdGVzJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSBjbGVhciBjb21tYW5kLlxuXHRcdFx0QHByb3BlcnR5IFtjbG9zZVRleHQ9J0Nsb3NlJ10ge3N0cmluZ30gVGV4dCBmb3IgdGhlIGNsb3NlIGNvbW1hbmQuXG5cdFx0XHRAcHJvcGVydHkgW2Nsb3NlU3RhdHVzPSdDbG9zZSB0aGUgZGF0ZXBpY2tlciddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgY2xvc2UgY29tbWFuZC5cblx0XHRcdEBwcm9wZXJ0eSBbeWVhclN0YXR1cz0nQ2hhbmdlIHRoZSB5ZWFyJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHllYXIgc2VsZWN0aW9uLlxuXHRcdFx0QHByb3BlcnR5IFtlYXJsaWVyVGV4dD0nJiMxNjA7JiMxNjA74payJ10ge3N0cmluZ30gVGV4dCBmb3IgZWFybGllciB5ZWFycy5cblx0XHRcdEBwcm9wZXJ0eSBbbGF0ZXJUZXh0PScmIzE2MDsmIzE2MDvilrwnXSB7c3RyaW5nfSBUZXh0IGZvciBsYXRlciB5ZWFycy5cblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhTdGF0dXM9J0NoYW5nZSB0aGUgbW9udGgnXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3IgbW9udGggc2VsZWN0aW9uLlxuXHRcdFx0QHByb3BlcnR5IFt3ZWVrVGV4dD0nV2snXSB7c3RyaW5nfSBUZXh0IGZvciB3ZWVrIG9mIHRoZSB5ZWFyIGNvbHVtbiBoZWFkZXIuXG5cdFx0XHRAcHJvcGVydHkgW3dlZWtTdGF0dXM9J1dlZWsgb2YgdGhlIHllYXInXSB7c3RyaW5nfSBTdGF0dXMgdGV4dCBmb3Igd2VlayBvZiB0aGUgeWVhciBjb2x1bW4gaGVhZGVyLlxuXHRcdFx0QHByb3BlcnR5IFtkYXlTdGF0dXM9J1NlbGVjdCBERCwmIzE2MDtNJiMxNjA7ZCwmIzE2MDt5eXl5J10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHNlbGVjdGFibGUgZGF5cy5cblx0XHRcdEBwcm9wZXJ0eSBbZGVmYXVsdFN0YXR1cz0nU2VsZWN0IGEgZGF0ZSddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IHNob3duIGJ5IGRlZmF1bHQuXG5cdFx0XHRAcHJvcGVydHkgW2lzUlRMPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgbGFuZ3VhZ2UgaXMgcmlnaHQtdG8tbGVmdC4gKi9cblx0XHRyZWdpb25hbE9wdGlvbnM6IHsgLy8gQXZhaWxhYmxlIHJlZ2lvbmFsIHNldHRpbmdzLCBpbmRleGVkIGJ5IGxhbmd1YWdlL2NvdW50cnkgY29kZVxuXHRcdFx0Jyc6IHsgLy8gRGVmYXVsdCByZWdpb25hbCBzZXR0aW5ncyAtIEVuZ2xpc2gvVVNcblx0XHRcdFx0cmVuZGVyZXI6IHt9LCAvLyB0aGlzLmRlZmF1bHRSZW5kZXJlclxuXHRcdFx0XHRwcmV2VGV4dDogJyZsdDtQcmV2Jyxcblx0XHRcdFx0cHJldlN0YXR1czogJ1Nob3cgdGhlIHByZXZpb3VzIG1vbnRoJyxcblx0XHRcdFx0cHJldkp1bXBUZXh0OiAnJmx0OyZsdDsnLFxuXHRcdFx0XHRwcmV2SnVtcFN0YXR1czogJ1Nob3cgdGhlIHByZXZpb3VzIHllYXInLFxuXHRcdFx0XHRuZXh0VGV4dDogJ05leHQmZ3Q7Jyxcblx0XHRcdFx0bmV4dFN0YXR1czogJ1Nob3cgdGhlIG5leHQgbW9udGgnLFxuXHRcdFx0XHRuZXh0SnVtcFRleHQ6ICcmZ3Q7Jmd0OycsXG5cdFx0XHRcdG5leHRKdW1wU3RhdHVzOiAnU2hvdyB0aGUgbmV4dCB5ZWFyJyxcblx0XHRcdFx0Y3VycmVudFRleHQ6ICdDdXJyZW50Jyxcblx0XHRcdFx0Y3VycmVudFN0YXR1czogJ1Nob3cgdGhlIGN1cnJlbnQgbW9udGgnLFxuXHRcdFx0XHR0b2RheVRleHQ6ICdUb2RheScsXG5cdFx0XHRcdHRvZGF5U3RhdHVzOiAnU2hvdyB0b2RheVxcJ3MgbW9udGgnLFxuXHRcdFx0XHRjbGVhclRleHQ6ICdDbGVhcicsXG5cdFx0XHRcdGNsZWFyU3RhdHVzOiAnQ2xlYXIgYWxsIHRoZSBkYXRlcycsXG5cdFx0XHRcdGNsb3NlVGV4dDogJ0Nsb3NlJyxcblx0XHRcdFx0Y2xvc2VTdGF0dXM6ICdDbG9zZSB0aGUgZGF0ZXBpY2tlcicsXG5cdFx0XHRcdHllYXJTdGF0dXM6ICdDaGFuZ2UgdGhlIHllYXInLFxuXHRcdFx0XHRlYXJsaWVyVGV4dDogJyYjMTYwOyYjMTYwO+KWsicsXG5cdFx0XHRcdGxhdGVyVGV4dDogJyYjMTYwOyYjMTYwO+KWvCcsXG5cdFx0XHRcdG1vbnRoU3RhdHVzOiAnQ2hhbmdlIHRoZSBtb250aCcsXG5cdFx0XHRcdHdlZWtUZXh0OiAnV2snLFxuXHRcdFx0XHR3ZWVrU3RhdHVzOiAnV2VlayBvZiB0aGUgeWVhcicsXG5cdFx0XHRcdGRheVN0YXR1czogJ1NlbGVjdCBERCwgTSBkLCB5eXl5Jyxcblx0XHRcdFx0ZGVmYXVsdFN0YXR1czogJ1NlbGVjdCBhIGRhdGUnLFxuXHRcdFx0XHRpc1JUTDogZmFsc2Vcblx0XHRcdH1cblx0XHR9LFxuXHRcdFxuXHRcdC8qKiBOYW1lcyBvZiBnZXR0ZXIgbWV0aG9kcyAtIHRob3NlIHRoYXQgY2FuJ3QgYmUgY2hhaW5lZC5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXIgKi9cblx0XHRfZ2V0dGVyczogWydnZXREYXRlJywgJ2lzRGlzYWJsZWQnLCAnaXNTZWxlY3RhYmxlJywgJ3JldHJpZXZlRGF0ZSddLFxuXG5cdFx0X2Rpc2FibGVkOiBbXSxcblx0XHRcblx0XHRfcG9wdXBDbGFzczogJ2NhbGVuZGFycy1wb3B1cCcsIC8vIE1hcmtlciBmb3IgcG9wdXAgZGl2aXNpb25cblx0XHRfdHJpZ2dlckNsYXNzOiAnY2FsZW5kYXJzLXRyaWdnZXInLCAvLyBNYXJrZXIgZm9yIHRyaWdnZXIgZWxlbWVudFxuXHRcdF9kaXNhYmxlQ2xhc3M6ICdjYWxlbmRhcnMtZGlzYWJsZScsIC8vIE1hcmtlciBmb3IgZGlzYWJsZWQgZWxlbWVudFxuXHRcdF9tb250aFllYXJDbGFzczogJ2NhbGVuZGFycy1tb250aC15ZWFyJywgLy8gTWFya2VyIGZvciBtb250aC95ZWFyIGlucHV0c1xuXHRcdF9jdXJNb250aENsYXNzOiAnY2FsZW5kYXJzLW1vbnRoLScsIC8vIE1hcmtlciBmb3IgY3VycmVudCBtb250aC95ZWFyXG5cdFx0X2FueVllYXJDbGFzczogJ2NhbGVuZGFycy1hbnkteWVhcicsIC8vIE1hcmtlciBmb3IgeWVhciBkaXJlY3QgaW5wdXRcblx0XHRfY3VyRG9XQ2xhc3M6ICdjYWxlbmRhcnMtZG93LScsIC8vIE1hcmtlciBmb3IgZGF5IG9mIHdlZWtcblxuXHRcdF9pbml0OiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuZGVmYXVsdE9wdGlvbnMuY29tbWFuZHMgPSB0aGlzLmNvbW1hbmRzO1xuXHRcdFx0dGhpcy5yZWdpb25hbE9wdGlvbnNbJyddLnJlbmRlcmVyID0gdGhpcy5kZWZhdWx0UmVuZGVyZXI7XG5cdFx0XHR0aGlzLl9zdXBlcigpO1xuXHRcdH0sXG5cblx0XHRfaW5zdFNldHRpbmdzOiBmdW5jdGlvbihlbGVtLCBvcHRpb25zKSB7XG5cdFx0XHRyZXR1cm4ge3NlbGVjdGVkRGF0ZXM6IFtdLCBkcmF3RGF0ZTogbnVsbCwgcGlja2luZ1JhbmdlOiBmYWxzZSxcblx0XHRcdFx0aW5saW5lOiAoJC5pbkFycmF5KGVsZW1bMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgWydkaXYnLCAnc3BhbiddKSA+IC0xKSxcblx0XHRcdFx0Z2V0OiBmdW5jdGlvbihuYW1lKSB7IC8vIEdldCBhIHNldHRpbmcgdmFsdWUsIGNvbXB1dGluZyBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRpZiAoJC5pbkFycmF5KG5hbWUsIFsnZGVmYXVsdERhdGUnLCAnbWluRGF0ZScsICdtYXhEYXRlJ10pID4gLTEpIHsgLy8gRGVjb2RlIGRhdGUgc2V0dGluZ3Ncblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm9wdGlvbnMuY2FsZW5kYXIuZGV0ZXJtaW5lRGF0ZSh0aGlzLm9wdGlvbnNbbmFtZV0sIG51bGwsXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWREYXRlc1swXSwgdGhpcy5nZXQoJ2RhdGVGb3JtYXQnKSwgdGhpcy5nZXRDb25maWcoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChuYW1lID09PSAnZGF0ZUZvcm1hdCcpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm9wdGlvbnMuZGF0ZUZvcm1hdCB8fCB0aGlzLm9wdGlvbnMuY2FsZW5kYXIubG9jYWwuZGF0ZUZvcm1hdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub3B0aW9uc1tuYW1lXTtcblx0XHRcdFx0fSxcblx0XHRcdFx0Y3VyTWluRGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuICh0aGlzLnBpY2tpbmdSYW5nZSA/IHRoaXMuc2VsZWN0ZWREYXRlc1swXSA6IHRoaXMuZ2V0KCdtaW5EYXRlJykpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRnZXRDb25maWc6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiB7ZGF5TmFtZXNTaG9ydDogdGhpcy5vcHRpb25zLmRheU5hbWVzU2hvcnQsIGRheU5hbWVzOiB0aGlzLm9wdGlvbnMuZGF5TmFtZXMsXG5cdFx0XHRcdFx0XHRtb250aE5hbWVzU2hvcnQ6IHRoaXMub3B0aW9ucy5tb250aE5hbWVzU2hvcnQsIG1vbnRoTmFtZXM6IHRoaXMub3B0aW9ucy5tb250aE5hbWVzLFxuXHRcdFx0XHRcdFx0Y2FsY3VsYXRlV2VlazogdGhpcy5vcHRpb25zLmNhbGN1bGF0ZVdlZWssIHNob3J0WWVhckN1dG9mZjogdGhpcy5vcHRpb25zLnNob3J0WWVhckN1dG9mZn07XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdF9wb3N0QXR0YWNoOiBmdW5jdGlvbihlbGVtLCBpbnN0KSB7XG5cdFx0XHRpZiAoaW5zdC5pbmxpbmUpIHtcblx0XHRcdFx0aW5zdC5kcmF3RGF0ZSA9IHBsdWdpbi5fY2hlY2tNaW5NYXgoKGluc3Quc2VsZWN0ZWREYXRlc1swXSB8fFxuXHRcdFx0XHRcdGluc3QuZ2V0KCdkZWZhdWx0RGF0ZScpIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpKS5uZXdEYXRlKCksIGluc3QpO1xuXHRcdFx0XHRpbnN0LnByZXZEYXRlID0gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCk7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZShlbGVtWzBdKTtcblx0XHRcdFx0aWYgKCQuZm4ubW91c2V3aGVlbCkge1xuXHRcdFx0XHRcdGVsZW0ubW91c2V3aGVlbCh0aGlzLl9kb01vdXNlV2hlZWwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0dGhpcy5fYXR0YWNobWVudHMoZWxlbSwgaW5zdCk7XG5cdFx0XHRcdGVsZW0ub24oJ2tleWRvd24uJyArIGluc3QubmFtZSwgdGhpcy5fa2V5RG93bikub24oJ2tleXByZXNzLicgKyBpbnN0Lm5hbWUsIHRoaXMuX2tleVByZXNzKS5cblx0XHRcdFx0XHRvbigna2V5dXAuJyArIGluc3QubmFtZSwgdGhpcy5fa2V5VXApO1xuXHRcdFx0XHRpZiAoZWxlbS5hdHRyKCdkaXNhYmxlZCcpKSB7XG5cdFx0XHRcdFx0dGhpcy5kaXNhYmxlKGVsZW1bMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdF9vcHRpb25zQ2hhbmdlZDogZnVuY3Rpb24oZWxlbSwgaW5zdCwgb3B0aW9ucykge1xuXHRcdFx0aWYgKG9wdGlvbnMuY2FsZW5kYXIgJiYgb3B0aW9ucy5jYWxlbmRhciAhPT0gaW5zdC5vcHRpb25zLmNhbGVuZGFyKSB7XG5cdFx0XHRcdHZhciBkaXNjYXJkRGF0ZSA9IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gKHR5cGVvZiBpbnN0Lm9wdGlvbnNbbmFtZV0gPT09ICdvYmplY3QnID8gbnVsbCA6IGluc3Qub3B0aW9uc1tuYW1lXSk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9wdGlvbnMgPSAkLmV4dGVuZCh7ZGVmYXVsdERhdGU6IGRpc2NhcmREYXRlKCdkZWZhdWx0RGF0ZScpLFxuXHRcdFx0XHRcdG1pbkRhdGU6IGRpc2NhcmREYXRlKCdtaW5EYXRlJyksIG1heERhdGU6IGRpc2NhcmREYXRlKCdtYXhEYXRlJyl9LCBvcHRpb25zKTtcblx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzID0gW107XG5cdFx0XHRcdGluc3QuZHJhd0RhdGUgPSBudWxsO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGRhdGVzID0gaW5zdC5zZWxlY3RlZERhdGVzO1xuXHRcdFx0JC5leHRlbmQoaW5zdC5vcHRpb25zLCBvcHRpb25zKTtcblx0XHRcdHRoaXMuc2V0RGF0ZShlbGVtWzBdLCBkYXRlcywgbnVsbCwgZmFsc2UsIHRydWUpO1xuXHRcdFx0aW5zdC5waWNraW5nUmFuZ2UgPSBmYWxzZTtcblx0XHRcdHZhciBjYWxlbmRhciA9IGluc3Qub3B0aW9ucy5jYWxlbmRhcjtcblx0XHRcdHZhciBkZWZhdWx0RGF0ZSA9IGluc3QuZ2V0KCdkZWZhdWx0RGF0ZScpO1xuXHRcdFx0aW5zdC5kcmF3RGF0ZSA9IHRoaXMuX2NoZWNrTWluTWF4KChkZWZhdWx0RGF0ZSA/IGRlZmF1bHREYXRlIDogaW5zdC5kcmF3RGF0ZSkgfHxcblx0XHRcdFx0ZGVmYXVsdERhdGUgfHwgY2FsZW5kYXIudG9kYXkoKSwgaW5zdCkubmV3RGF0ZSgpO1xuXHRcdFx0aWYgKCFpbnN0LmlubGluZSkge1xuXHRcdFx0XHR0aGlzLl9hdHRhY2htZW50cyhlbGVtLCBpbnN0KTtcblx0XHRcdH1cblx0XHRcdGlmIChpbnN0LmlubGluZSB8fCBpbnN0LmRpdikge1xuXHRcdFx0XHR0aGlzLl91cGRhdGUoZWxlbVswXSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBBdHRhY2ggZXZlbnRzIGFuZCB0cmlnZ2VyLCBpZiBuZWNlc3NhcnkuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGVsZW0ge2pRdWVyeX0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuICovXG5cdFx0X2F0dGFjaG1lbnRzOiBmdW5jdGlvbihlbGVtLCBpbnN0KSB7XG5cdFx0XHRlbGVtLm9mZignZm9jdXMuJyArIGluc3QubmFtZSk7XG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLnNob3dPbkZvY3VzKSB7XG5cdFx0XHRcdGVsZW0ub24oJ2ZvY3VzLicgKyBpbnN0Lm5hbWUsIHRoaXMuc2hvdyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaW5zdC50cmlnZ2VyKSB7XG5cdFx0XHRcdGluc3QudHJpZ2dlci5yZW1vdmUoKTtcblx0XHRcdH1cblx0XHRcdHZhciB0cmlnZ2VyID0gaW5zdC5vcHRpb25zLnNob3dUcmlnZ2VyO1xuXHRcdFx0aW5zdC50cmlnZ2VyID0gKCF0cmlnZ2VyID8gJChbXSkgOlxuXHRcdFx0XHQkKHRyaWdnZXIpLmNsb25lKCkucmVtb3ZlQXR0cignaWQnKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpXG5cdFx0XHRcdFx0W2luc3Qub3B0aW9ucy5pc1JUTCA/ICdpbnNlcnRCZWZvcmUnIDogJ2luc2VydEFmdGVyJ10oZWxlbSkuXG5cdFx0XHRcdFx0Y2xpY2soZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIXBsdWdpbi5pc0Rpc2FibGVkKGVsZW1bMF0pKSB7XG5cdFx0XHRcdFx0XHRcdHBsdWdpbltwbHVnaW4uY3VySW5zdCA9PT0gaW5zdCA/ICdoaWRlJyA6ICdzaG93J10oZWxlbVswXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkpO1xuXHRcdFx0dGhpcy5fYXV0b1NpemUoZWxlbSwgaW5zdCk7XG5cdFx0XHR2YXIgZGF0ZXMgPSB0aGlzLl9leHRyYWN0RGF0ZXMoaW5zdCwgZWxlbS52YWwoKSk7XG5cdFx0XHRpZiAoZGF0ZXMpIHtcblx0XHRcdFx0dGhpcy5zZXREYXRlKGVsZW1bMF0sIGRhdGVzLCBudWxsLCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdHZhciBkZWZhdWx0RGF0ZSA9IGluc3QuZ2V0KCdkZWZhdWx0RGF0ZScpO1xuXHRcdFx0aWYgKGluc3Qub3B0aW9ucy5zZWxlY3REZWZhdWx0RGF0ZSAmJiBkZWZhdWx0RGF0ZSAmJiBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHRoaXMuc2V0RGF0ZShlbGVtWzBdLCAoZGVmYXVsdERhdGUgfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCkpLm5ld0RhdGUoKSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBBcHBseSB0aGUgbWF4aW11bSBsZW5ndGggZm9yIHRoZSBkYXRlIGZvcm1hdC5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZWxlbSB7alF1ZXJ5fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy4gKi9cblx0XHRfYXV0b1NpemU6IGZ1bmN0aW9uKGVsZW0sIGluc3QpIHtcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMuYXV0b1NpemUgJiYgIWluc3QuaW5saW5lKSB7XG5cdFx0XHRcdHZhciBjYWxlbmRhciA9IGluc3Qub3B0aW9ucy5jYWxlbmRhcjtcblx0XHRcdFx0dmFyIGRhdGUgPSBjYWxlbmRhci5uZXdEYXRlKDIwMDksIDEwLCAyMCk7IC8vIEVuc3VyZSBkb3VibGUgZGlnaXRzXG5cdFx0XHRcdHZhciBkYXRlRm9ybWF0ID0gaW5zdC5nZXQoJ2RhdGVGb3JtYXQnKTtcblx0XHRcdFx0aWYgKGRhdGVGb3JtYXQubWF0Y2goL1tETV0vKSkge1xuXHRcdFx0XHRcdHZhciBmaW5kTWF4ID0gZnVuY3Rpb24obmFtZXMpIHtcblx0XHRcdFx0XHRcdHZhciBtYXggPSAwO1xuXHRcdFx0XHRcdFx0dmFyIG1heEkgPSAwO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRpZiAobmFtZXNbaV0ubGVuZ3RoID4gbWF4KSB7XG5cdFx0XHRcdFx0XHRcdFx0bWF4ID0gbmFtZXNbaV0ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRcdG1heEkgPSBpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gbWF4STtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGRhdGUubW9udGgoZmluZE1heChjYWxlbmRhci5sb2NhbFtkYXRlRm9ybWF0Lm1hdGNoKC9NTS8pID8gLy8gTG9uZ2VzdCBtb250aFxuXHRcdFx0XHRcdFx0J21vbnRoTmFtZXMnIDogJ21vbnRoTmFtZXNTaG9ydCddKSArIDEpO1xuXHRcdFx0XHRcdGRhdGUuZGF5KGZpbmRNYXgoY2FsZW5kYXIubG9jYWxbZGF0ZUZvcm1hdC5tYXRjaCgvREQvKSA/IC8vIExvbmdlc3QgZGF5XG5cdFx0XHRcdFx0XHQnZGF5TmFtZXMnIDogJ2RheU5hbWVzU2hvcnQnXSkgKyAyMCAtIGRhdGUuZGF5T2ZXZWVrKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluc3QuZWxlbS5hdHRyKCdzaXplJywgZGF0ZS5mb3JtYXREYXRlKGRhdGVGb3JtYXQpLmxlbmd0aCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdF9wcmVEZXN0cm95OiBmdW5jdGlvbihlbGVtLCBpbnN0KSB7XG5cdFx0XHRpZiAoaW5zdC50cmlnZ2VyKSB7XG5cdFx0XHRcdGluc3QudHJpZ2dlci5yZW1vdmUoKTtcblx0XHRcdH1cblx0XHRcdGVsZW0uZW1wdHkoKS5vZmYoJy4nICsgaW5zdC5uYW1lKTtcblx0XHRcdGlmIChpbnN0LmlubGluZSAmJiAkLmZuLm1vdXNld2hlZWwpIHtcblx0XHRcdFx0ZWxlbS51bm1vdXNld2hlZWwoKTtcblx0XHRcdH1cblx0XHRcdGlmICghaW5zdC5pbmxpbmUgJiYgaW5zdC5vcHRpb25zLmF1dG9TaXplKSB7XG5cdFx0XHRcdGVsZW0ucmVtb3ZlQXR0cignc2l6ZScpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogQXBwbHkgbXVsdGlwbGUgZXZlbnQgZnVuY3Rpb25zLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIGZucyB7ZnVuY3Rpb259IFRoZSBmdW5jdGlvbnMgdG8gYXBwbHkuXG5cdFx0XHRAZXhhbXBsZSBvblNob3c6IG11bHRpcGxlRXZlbnRzKGZuMSwgZm4yLCAuLi4pICovXG5cdFx0bXVsdGlwbGVFdmVudHM6IGZ1bmN0aW9uKGZucykge1xuXHRcdFx0dmFyIGZ1bmNzID0gYXJndW1lbnRzO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGFyZ3MpIHtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGZ1bmNzW2ldLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdC8qKiBFbmFibGUgdGhlIGNvbnRyb2wuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuZGF0ZXBpY2soJ2VuYWJsZScpICovXG5cdFx0ZW5hYmxlOiBmdW5jdGlvbihlbGVtKSB7XG5cdFx0XHRlbGVtID0gJChlbGVtKTtcblx0XHRcdGlmICghZWxlbS5oYXNDbGFzcyh0aGlzLl9nZXRNYXJrZXIoKSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0aWYgKGluc3QuaW5saW5lKSB7XG5cdFx0XHRcdGVsZW0uY2hpbGRyZW4oJy4nICsgdGhpcy5fZGlzYWJsZUNsYXNzKS5yZW1vdmUoKS5lbmQoKS5cblx0XHRcdFx0XHRmaW5kKCdidXR0b24sc2VsZWN0JykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSkuZW5kKCkuXG5cdFx0XHRcdFx0ZmluZCgnYScpLmF0dHIoJ2hyZWYnLCAnamF2YXNjcmlwdDp2b2lkKDApJyk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0ZWxlbS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcblx0XHRcdFx0aW5zdC50cmlnZ2VyLmZpbHRlcignYnV0dG9uLicgKyB0aGlzLl90cmlnZ2VyQ2xhc3MpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpLmVuZCgpLlxuXHRcdFx0XHRcdGZpbHRlcignaW1nLicgKyB0aGlzLl90cmlnZ2VyQ2xhc3MpLmNzcyh7b3BhY2l0eTogJzEuMCcsIGN1cnNvcjogJyd9KTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2Rpc2FibGVkID0gJC5tYXAodGhpcy5fZGlzYWJsZWQsXG5cdFx0XHRcdGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiAodmFsdWUgPT09IGVsZW1bMF0gPyBudWxsIDogdmFsdWUpOyB9KTsgLy8gRGVsZXRlIGVudHJ5XG5cdFx0fSxcblxuXHRcdC8qKiBEaXNhYmxlIHRoZSBjb250cm9sLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGFmZmVjdC5cblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdkaXNhYmxlJykgKi9cblx0XHRkaXNhYmxlOiBmdW5jdGlvbihlbGVtKSB7XG5cdFx0XHRlbGVtID0gJChlbGVtKTtcblx0XHRcdGlmICghZWxlbS5oYXNDbGFzcyh0aGlzLl9nZXRNYXJrZXIoKSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0aWYgKGluc3QuaW5saW5lKSB7XG5cdFx0XHRcdHZhciBpbmxpbmUgPSBlbGVtLmNoaWxkcmVuKCc6bGFzdCcpO1xuXHRcdFx0XHR2YXIgb2Zmc2V0ID0gaW5saW5lLm9mZnNldCgpO1xuXHRcdFx0XHR2YXIgcmVsT2Zmc2V0ID0ge2xlZnQ6IDAsIHRvcDogMH07XG5cdFx0XHRcdGlubGluZS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoJCh0aGlzKS5jc3MoJ3Bvc2l0aW9uJykgPT09ICdyZWxhdGl2ZScpIHtcblx0XHRcdFx0XHRcdHJlbE9mZnNldCA9ICQodGhpcykub2Zmc2V0KCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dmFyIHpJbmRleCA9IGVsZW0uY3NzKCd6SW5kZXgnKTtcblx0XHRcdFx0ekluZGV4ID0gKHpJbmRleCA9PT0gJ2F1dG8nID8gMCA6IHBhcnNlSW50KHpJbmRleCwgMTApKSArIDE7XG5cdFx0XHRcdGVsZW0ucHJlcGVuZCgnPGRpdiBjbGFzcz1cIicgKyB0aGlzLl9kaXNhYmxlQ2xhc3MgKyAnXCIgc3R5bGU9XCInICtcblx0XHRcdFx0XHQnd2lkdGg6ICcgKyBpbmxpbmUub3V0ZXJXaWR0aCgpICsgJ3B4OyBoZWlnaHQ6ICcgKyBpbmxpbmUub3V0ZXJIZWlnaHQoKSArXG5cdFx0XHRcdFx0J3B4OyBsZWZ0OiAnICsgKG9mZnNldC5sZWZ0IC0gcmVsT2Zmc2V0LmxlZnQpICsgJ3B4OyB0b3A6ICcgK1xuXHRcdFx0XHRcdChvZmZzZXQudG9wIC0gcmVsT2Zmc2V0LnRvcCkgKyAncHg7IHotaW5kZXg6ICcgKyB6SW5kZXggKyAnXCI+PC9kaXY+JykuXG5cdFx0XHRcdFx0ZmluZCgnYnV0dG9uLHNlbGVjdCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSkuZW5kKCkuXG5cdFx0XHRcdFx0ZmluZCgnYScpLnJlbW92ZUF0dHIoJ2hyZWYnKTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRlbGVtLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG5cdFx0XHRcdGluc3QudHJpZ2dlci5maWx0ZXIoJ2J1dHRvbi4nICsgdGhpcy5fdHJpZ2dlckNsYXNzKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpLmVuZCgpLlxuXHRcdFx0XHRcdGZpbHRlcignaW1nLicgKyB0aGlzLl90cmlnZ2VyQ2xhc3MpLmNzcyh7b3BhY2l0eTogJzAuNScsIGN1cnNvcjogJ2RlZmF1bHQnfSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9kaXNhYmxlZCA9ICQubWFwKHRoaXMuX2Rpc2FibGVkLFxuXHRcdFx0XHRmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gKHZhbHVlID09PSBlbGVtWzBdID8gbnVsbCA6IHZhbHVlKTsgfSk7IC8vIERlbGV0ZSBlbnRyeVxuXHRcdFx0dGhpcy5fZGlzYWJsZWQucHVzaChlbGVtWzBdKTtcblx0XHR9LFxuXG5cdFx0LyoqIElzIHRoZSBmaXJzdCBmaWVsZCBpbiBhIGpRdWVyeSBjb2xsZWN0aW9uIGRpc2FibGVkIGFzIGEgZGF0ZXBpY2tlcj9cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgZGlzYWJsZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBlbmFibGVkLlxuXHRcdFx0QGV4YW1wbGUgaWYgKCQoc2VsZWN0b3IpLmRhdGVwaWNrKCdpc0Rpc2FibGVkJykpIHsuLi59ICovXG5cdFx0aXNEaXNhYmxlZDogZnVuY3Rpb24oZWxlbSkge1xuXHRcdFx0cmV0dXJuIChlbGVtICYmICQuaW5BcnJheShlbGVtLCB0aGlzLl9kaXNhYmxlZCkgPiAtMSk7XG5cdFx0fSxcblxuXHRcdC8qKiBTaG93IGEgcG9wdXAgZGF0ZXBpY2tlci5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBlbGVtIHtFdmVudHxFbGVtZW50fSBhIGZvY3VzIGV2ZW50IG9yIHRoZSBjb250cm9sIHRvIHVzZS5cblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdzaG93JykgKi9cblx0XHRzaG93OiBmdW5jdGlvbihlbGVtKSB7XG5cdFx0XHRlbGVtID0gJChlbGVtLnRhcmdldCB8fCBlbGVtKTtcblx0XHRcdHZhciBpbnN0ID0gcGx1Z2luLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0aWYgKHBsdWdpbi5jdXJJbnN0ID09PSBpbnN0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChwbHVnaW4uY3VySW5zdCkge1xuXHRcdFx0XHRwbHVnaW4uaGlkZShwbHVnaW4uY3VySW5zdCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xuXHRcdFx0XHQvLyBSZXRyaWV2ZSBleGlzdGluZyBkYXRlKHMpXG5cdFx0XHRcdGluc3QubGFzdFZhbCA9IG51bGw7XG5cdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IHBsdWdpbi5fZXh0cmFjdERhdGVzKGluc3QsIGVsZW0udmFsKCkpO1xuXHRcdFx0XHRpbnN0LnBpY2tpbmdSYW5nZSA9IGZhbHNlO1xuXHRcdFx0XHRpbnN0LmRyYXdEYXRlID0gcGx1Z2luLl9jaGVja01pbk1heCgoaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8XG5cdFx0XHRcdFx0aW5zdC5nZXQoJ2RlZmF1bHREYXRlJykgfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCkpLm5ld0RhdGUoKSwgaW5zdCk7XG5cdFx0XHRcdGluc3QucHJldkRhdGUgPSBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKTtcblx0XHRcdFx0cGx1Z2luLmN1ckluc3QgPSBpbnN0O1xuXHRcdFx0XHQvLyBHZW5lcmF0ZSBjb250ZW50XG5cdFx0XHRcdHBsdWdpbi5fdXBkYXRlKGVsZW1bMF0sIHRydWUpO1xuXHRcdFx0XHQvLyBBZGp1c3QgcG9zaXRpb24gYmVmb3JlIHNob3dpbmdcblx0XHRcdFx0dmFyIG9mZnNldCA9IHBsdWdpbi5fY2hlY2tPZmZzZXQoaW5zdCk7XG5cdFx0XHRcdGluc3QuZGl2LmNzcyh7bGVmdDogb2Zmc2V0LmxlZnQsIHRvcDogb2Zmc2V0LnRvcH0pO1xuXHRcdFx0XHQvLyBBbmQgZGlzcGxheVxuXHRcdFx0XHR2YXIgc2hvd0FuaW0gPSBpbnN0Lm9wdGlvbnMuc2hvd0FuaW07XG5cdFx0XHRcdHZhciBzaG93U3BlZWQgPSBpbnN0Lm9wdGlvbnMuc2hvd1NwZWVkO1xuXHRcdFx0XHRzaG93U3BlZWQgPSAoc2hvd1NwZWVkID09PSAnbm9ybWFsJyAmJiAkLnVpICYmXG5cdFx0XHRcdFx0cGFyc2VJbnQoJC51aS52ZXJzaW9uLnN1YnN0cmluZygyKSkgPj0gOCA/ICdfZGVmYXVsdCcgOiBzaG93U3BlZWQpO1xuXHRcdFx0XHRpZiAoJC5lZmZlY3RzICYmICgkLmVmZmVjdHNbc2hvd0FuaW1dIHx8ICgkLmVmZmVjdHMuZWZmZWN0ICYmICQuZWZmZWN0cy5lZmZlY3Rbc2hvd0FuaW1dKSkpIHtcblx0XHRcdFx0XHR2YXIgZGF0YSA9IGluc3QuZGl2LmRhdGEoKTsgLy8gVXBkYXRlIG9sZCBlZmZlY3RzIGRhdGFcblx0XHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xuXHRcdFx0XHRcdFx0aWYgKGtleS5tYXRjaCgvXmVjXFwuc3RvcmFnZVxcLi8pKSB7XG5cdFx0XHRcdFx0XHRcdGRhdGFba2V5XSA9IGluc3QuX21haW5EaXYuY3NzKGtleS5yZXBsYWNlKC9lY1xcLnN0b3JhZ2VcXC4vLCAnJykpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpbnN0LmRpdi5kYXRhKGRhdGEpLnNob3coc2hvd0FuaW0sIGluc3Qub3B0aW9ucy5zaG93T3B0aW9ucywgc2hvd1NwZWVkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRpbnN0LmRpdltzaG93QW5pbSB8fCAnc2hvdyddKHNob3dBbmltID8gc2hvd1NwZWVkIDogMCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIEV4dHJhY3QgcG9zc2libGUgZGF0ZXMgZnJvbSBhIHN0cmluZy5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSB0ZXh0IHRvIGV4dHJhY3QgZnJvbS5cblx0XHRcdEByZXR1cm4ge0NEYXRlW119IFRoZSBleHRyYWN0ZWQgZGF0ZXMuICovXG5cdFx0X2V4dHJhY3REYXRlczogZnVuY3Rpb24oaW5zdCwgZGF0ZXNUZXh0KSB7XG5cdFx0XHRpZiAoZGF0ZXNUZXh0ID09PSBpbnN0Lmxhc3RWYWwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aW5zdC5sYXN0VmFsID0gZGF0ZXNUZXh0O1xuXHRcdFx0ZGF0ZXNUZXh0ID0gZGF0ZXNUZXh0LnNwbGl0KGluc3Qub3B0aW9ucy5tdWx0aVNlbGVjdCA/IGluc3Qub3B0aW9ucy5tdWx0aVNlcGFyYXRvciA6XG5cdFx0XHRcdChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgPyBpbnN0Lm9wdGlvbnMucmFuZ2VTZXBhcmF0b3IgOiAnXFx4MDAnKSk7XG5cdFx0XHR2YXIgZGF0ZXMgPSBbXTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0ZXNUZXh0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dmFyIGRhdGUgPSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIucGFyc2VEYXRlKGluc3QuZ2V0KCdkYXRlRm9ybWF0JyksIGRhdGVzVGV4dFtpXSk7XG5cdFx0XHRcdFx0aWYgKGRhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBkYXRlcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRpZiAoZGF0ZXNbal0uY29tcGFyZVRvKGRhdGUpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIWZvdW5kKSB7XG5cdFx0XHRcdFx0XHRcdGRhdGVzLnB1c2goZGF0ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0Ly8gSWdub3JlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRhdGVzLnNwbGljZShpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgfHwgKGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCA/IDIgOiAxKSwgZGF0ZXMubGVuZ3RoKTtcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgJiYgZGF0ZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdGRhdGVzWzFdID0gZGF0ZXNbMF07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGF0ZXM7XG5cdFx0fSxcblxuXHRcdC8qKiBVcGRhdGUgdGhlIGRhdGVwaWNrZXIgZGlzcGxheS5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZWxlbSB7RXZlbnR8RWxlbWVudH0gYSBmb2N1cyBldmVudCBvciB0aGUgY29udHJvbCB0byB1c2UuXG5cdFx0XHRAcGFyYW0gaGlkZGVuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBpbml0aWFsbHkgaGlkZSB0aGUgZGF0ZXBpY2tlci4gKi9cblx0XHRfdXBkYXRlOiBmdW5jdGlvbihlbGVtLCBoaWRkZW4pIHtcblx0XHRcdGVsZW0gPSAkKGVsZW0udGFyZ2V0IHx8IGVsZW0pO1xuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xuXHRcdFx0XHRpZiAoaW5zdC5pbmxpbmUgfHwgcGx1Z2luLmN1ckluc3QgPT09IGluc3QpIHtcblx0XHRcdFx0XHRpZiAoJC5pc0Z1bmN0aW9uKGluc3Qub3B0aW9ucy5vbkNoYW5nZU1vbnRoWWVhcikgJiYgKCFpbnN0LnByZXZEYXRlIHx8XG5cdFx0XHRcdFx0XHRcdGluc3QucHJldkRhdGUueWVhcigpICE9PSBpbnN0LmRyYXdEYXRlLnllYXIoKSB8fFxuXHRcdFx0XHRcdFx0XHRpbnN0LnByZXZEYXRlLm1vbnRoKCkgIT09IGluc3QuZHJhd0RhdGUubW9udGgoKSkpIHtcblx0XHRcdFx0XHRcdGluc3Qub3B0aW9ucy5vbkNoYW5nZU1vbnRoWWVhci5hcHBseShlbGVtWzBdLFxuXHRcdFx0XHRcdFx0XHRbaW5zdC5kcmF3RGF0ZS55ZWFyKCksIGluc3QuZHJhd0RhdGUubW9udGgoKV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaW5zdC5pbmxpbmUpIHtcblx0XHRcdFx0XHR2YXIgaW5kZXggPSAkKCdhLCA6aW5wdXQnLCBlbGVtKS5pbmRleCgkKCc6Zm9jdXMnLCBlbGVtKSk7XG5cdFx0XHRcdFx0ZWxlbS5odG1sKHRoaXMuX2dlbmVyYXRlQ29udGVudChlbGVtWzBdLCBpbnN0KSk7XG5cdFx0XHRcdFx0dmFyIGZvY3VzID0gZWxlbS5maW5kKCdhLCA6aW5wdXQnKTtcblx0XHRcdFx0XHRmb2N1cy5lcShNYXRoLm1heChNYXRoLm1pbihpbmRleCwgZm9jdXMubGVuZ3RoIC0gMSksIDApKS5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKHBsdWdpbi5jdXJJbnN0ID09PSBpbnN0KSB7XG5cdFx0XHRcdFx0aWYgKCFpbnN0LmRpdikge1xuXHRcdFx0XHRcdFx0aW5zdC5kaXYgPSAkKCc8ZGl2PjwvZGl2PicpLmFkZENsYXNzKHRoaXMuX3BvcHVwQ2xhc3MpLlxuXHRcdFx0XHRcdFx0XHRjc3Moe2Rpc3BsYXk6IChoaWRkZW4gPyAnbm9uZScgOiAnc3RhdGljJyksIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuXHRcdFx0XHRcdFx0XHRcdGxlZnQ6IGVsZW0ub2Zmc2V0KCkubGVmdCwgdG9wOiBlbGVtLm9mZnNldCgpLnRvcCArIGVsZW0ub3V0ZXJIZWlnaHQoKX0pLlxuXHRcdFx0XHRcdFx0XHRhcHBlbmRUbygkKGluc3Qub3B0aW9ucy5wb3B1cENvbnRhaW5lciB8fCAnYm9keScpKTtcblx0XHRcdFx0XHRcdGlmICgkLmZuLm1vdXNld2hlZWwpIHtcblx0XHRcdFx0XHRcdFx0aW5zdC5kaXYubW91c2V3aGVlbCh0aGlzLl9kb01vdXNlV2hlZWwpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpbnN0LmRpdi5odG1sKHRoaXMuX2dlbmVyYXRlQ29udGVudChlbGVtWzBdLCBpbnN0KSk7XG5cdFx0XHRcdFx0ZWxlbS5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBVcGRhdGUgdGhlIGlucHV0IGZpZWxkIGFuZCBhbnkgYWx0ZXJuYXRlIGZpZWxkIHdpdGggdGhlIGN1cnJlbnQgZGF0ZXMuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIHVzZS5cblx0XHRcdEBwYXJhbSBrZXlVcCB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgY29taW5nIGZyb20gPGNvZGU+a2V5VXA8L2NvZGU+IHByb2Nlc3NpbmcgKGludGVybmFsKS4gKi9cblx0XHRfdXBkYXRlSW5wdXQ6IGZ1bmN0aW9uKGVsZW0sIGtleVVwKSB7XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xuXHRcdFx0XHR2YXIgdmFsdWUgPSAnJztcblx0XHRcdFx0dmFyIGFsdFZhbHVlID0gJyc7XG5cdFx0XHRcdHZhciBzZXAgPSAoaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0ID8gaW5zdC5vcHRpb25zLm11bHRpU2VwYXJhdG9yIDpcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMucmFuZ2VTZXBhcmF0b3IpO1xuXHRcdFx0XHR2YXIgY2FsZW5kYXIgPSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXI7XG5cdFx0XHRcdHZhciBkYXRlRm9ybWF0ID0gaW5zdC5nZXQoJ2RhdGVGb3JtYXQnKTtcblx0XHRcdFx0dmFyIGFsdEZvcm1hdCA9IGluc3Qub3B0aW9ucy5hbHRGb3JtYXQgfHwgZGF0ZUZvcm1hdDtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YWx1ZSArPSAoa2V5VXAgPyAnJyA6IChpID4gMCA/IHNlcCA6ICcnKSArXG5cdFx0XHRcdFx0XHRjYWxlbmRhci5mb3JtYXREYXRlKGRhdGVGb3JtYXQsIGluc3Quc2VsZWN0ZWREYXRlc1tpXSkpO1xuXHRcdFx0XHRcdGFsdFZhbHVlICs9IChpID4gMCA/IHNlcCA6ICcnKSArXG5cdFx0XHRcdFx0XHRjYWxlbmRhci5mb3JtYXREYXRlKGFsdEZvcm1hdCwgaW5zdC5zZWxlY3RlZERhdGVzW2ldKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWluc3QuaW5saW5lICYmICFrZXlVcCkge1xuXHRcdFx0XHRcdCQoZWxlbSkudmFsKHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQkKGluc3Qub3B0aW9ucy5hbHRGaWVsZCkudmFsKGFsdFZhbHVlKTtcblx0XHRcdFx0aWYgKCQuaXNGdW5jdGlvbihpbnN0Lm9wdGlvbnMub25TZWxlY3QpICYmICFrZXlVcCAmJiAhaW5zdC5pblNlbGVjdCkge1xuXHRcdFx0XHRcdGluc3QuaW5TZWxlY3QgPSB0cnVlOyAvLyBQcmV2ZW50IGVuZGxlc3MgbG9vcHNcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMub25TZWxlY3QuYXBwbHkoZWxlbSwgW2luc3Quc2VsZWN0ZWREYXRlc10pO1xuXHRcdFx0XHRcdGluc3QuaW5TZWxlY3QgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIHNpemUgb2YgbGVmdCBhbmQgdG9wIGJvcmRlcnMgZm9yIGFuIGVsZW1lbnQuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGVsZW0ge2pRdWVyeX0gVGhlIGVsZW1lbnQgb2YgaW50ZXJlc3QuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJbXX0gVGhlIGxlZnQgYW5kIHRvcCBib3JkZXJzLiAqL1xuXHRcdF9nZXRCb3JkZXJzOiBmdW5jdGlvbihlbGVtKSB7XG5cdFx0XHR2YXIgY29udmVydCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiB7dGhpbjogMSwgbWVkaXVtOiAzLCB0aGljazogNX1bdmFsdWVdIHx8IHZhbHVlO1xuXHRcdFx0fTtcblx0XHRcdHJldHVybiBbcGFyc2VGbG9hdChjb252ZXJ0KGVsZW0uY3NzKCdib3JkZXItbGVmdC13aWR0aCcpKSksXG5cdFx0XHRcdHBhcnNlRmxvYXQoY29udmVydChlbGVtLmNzcygnYm9yZGVyLXRvcC13aWR0aCcpKSldO1xuXHRcdH0sXG5cblx0XHQvKiogQ2hlY2sgcG9zaXRpb25pbmcgdG8gcmVtYWluIG9uIHRoZSBzY3JlZW4uXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IFRoZSB1cGRhdGVkIG9mZnNldCBmb3IgdGhlIGRhdGVwaWNrZXIuICovXG5cdFx0X2NoZWNrT2Zmc2V0OiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHR2YXIgYmFzZSA9IChpbnN0LmVsZW0uaXMoJzpoaWRkZW4nKSAmJiBpbnN0LnRyaWdnZXIgPyBpbnN0LnRyaWdnZXIgOiBpbnN0LmVsZW0pO1xuXHRcdFx0dmFyIG9mZnNldCA9IGJhc2Uub2Zmc2V0KCk7XG5cdFx0XHR2YXIgYnJvd3NlcldpZHRoID0gJCh3aW5kb3cpLndpZHRoKCk7XG5cdFx0XHR2YXIgYnJvd3NlckhlaWdodCA9ICQod2luZG93KS5oZWlnaHQoKTtcblx0XHRcdGlmIChicm93c2VyV2lkdGggPT09IDApIHtcblx0XHRcdFx0cmV0dXJuIG9mZnNldDtcblx0XHRcdH1cblx0XHRcdHZhciBpc0ZpeGVkID0gZmFsc2U7XG5cdFx0XHQkKGluc3QuZWxlbSkucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlzRml4ZWQgfD0gJCh0aGlzKS5jc3MoJ3Bvc2l0aW9uJykgPT09ICdmaXhlZCc7XG5cdFx0XHRcdHJldHVybiAhaXNGaXhlZDtcblx0XHRcdH0pO1xuXHRcdFx0dmFyIHNjcm9sbFggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQ7XG5cdFx0XHR2YXIgc2Nyb2xsWSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7XG5cdFx0XHR2YXIgYWJvdmUgPSBvZmZzZXQudG9wIC0gKGlzRml4ZWQgPyBzY3JvbGxZIDogMCkgLSBpbnN0LmRpdi5vdXRlckhlaWdodCgpO1xuXHRcdFx0dmFyIGJlbG93ID0gb2Zmc2V0LnRvcCAtIChpc0ZpeGVkID8gc2Nyb2xsWSA6IDApICsgYmFzZS5vdXRlckhlaWdodCgpO1xuXHRcdFx0dmFyIGFsaWduTCA9IG9mZnNldC5sZWZ0IC0gKGlzRml4ZWQgPyBzY3JvbGxYIDogMCk7XG5cdFx0XHR2YXIgYWxpZ25SID0gb2Zmc2V0LmxlZnQgLSAoaXNGaXhlZCA/IHNjcm9sbFggOiAwKSArIGJhc2Uub3V0ZXJXaWR0aCgpIC0gaW5zdC5kaXYub3V0ZXJXaWR0aCgpO1xuXHRcdFx0dmFyIHRvb1dpZGUgPSAob2Zmc2V0LmxlZnQgLSBzY3JvbGxYICsgaW5zdC5kaXYub3V0ZXJXaWR0aCgpKSA+IGJyb3dzZXJXaWR0aDtcblx0XHRcdHZhciB0b29IaWdoID0gKG9mZnNldC50b3AgLSBzY3JvbGxZICsgaW5zdC5lbGVtLm91dGVySGVpZ2h0KCkgK1xuXHRcdFx0XHRpbnN0LmRpdi5vdXRlckhlaWdodCgpKSA+IGJyb3dzZXJIZWlnaHQ7XG5cdFx0XHRpbnN0LmRpdi5jc3MoJ3Bvc2l0aW9uJywgaXNGaXhlZCA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnKTtcblx0XHRcdHZhciBhbGlnbm1lbnQgPSBpbnN0Lm9wdGlvbnMuYWxpZ25tZW50O1xuXHRcdFx0aWYgKGFsaWdubWVudCA9PT0gJ3RvcExlZnQnKSB7XG5cdFx0XHRcdG9mZnNldCA9IHtsZWZ0OiBhbGlnbkwsIHRvcDogYWJvdmV9O1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoYWxpZ25tZW50ID09PSAndG9wUmlnaHQnKSB7XG5cdFx0XHRcdG9mZnNldCA9IHtsZWZ0OiBhbGlnblIsIHRvcDogYWJvdmV9O1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoYWxpZ25tZW50ID09PSAnYm90dG9tTGVmdCcpIHtcblx0XHRcdFx0b2Zmc2V0ID0ge2xlZnQ6IGFsaWduTCwgdG9wOiBiZWxvd307XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChhbGlnbm1lbnQgPT09ICdib3R0b21SaWdodCcpIHtcblx0XHRcdFx0b2Zmc2V0ID0ge2xlZnQ6IGFsaWduUiwgdG9wOiBiZWxvd307XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChhbGlnbm1lbnQgPT09ICd0b3AnKSB7XG5cdFx0XHRcdG9mZnNldCA9IHtsZWZ0OiAoaW5zdC5vcHRpb25zLmlzUlRMIHx8IHRvb1dpZGUgPyBhbGlnblIgOiBhbGlnbkwpLCB0b3A6IGFib3ZlfTtcblx0XHRcdH1cblx0XHRcdGVsc2UgeyAvLyBib3R0b21cblx0XHRcdFx0b2Zmc2V0ID0ge2xlZnQ6IChpbnN0Lm9wdGlvbnMuaXNSVEwgfHwgdG9vV2lkZSA/IGFsaWduUiA6IGFsaWduTCksXG5cdFx0XHRcdFx0dG9wOiAodG9vSGlnaCA/IGFib3ZlIDogYmVsb3cpfTtcblx0XHRcdH1cblx0XHRcdG9mZnNldC5sZWZ0ID0gTWF0aC5tYXgoKGlzRml4ZWQgPyAwIDogc2Nyb2xsWCksIG9mZnNldC5sZWZ0KTtcblx0XHRcdG9mZnNldC50b3AgPSBNYXRoLm1heCgoaXNGaXhlZCA/IDAgOiBzY3JvbGxZKSwgb2Zmc2V0LnRvcCk7XG5cdFx0XHRyZXR1cm4gb2Zmc2V0O1xuXHRcdH0sXG5cblx0XHQvKiogQ2xvc2UgZGF0ZSBwaWNrZXIgaWYgY2xpY2tlZCBlbHNld2hlcmUuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGV2ZW50IHtNb3VzZUV2ZW50fSBUaGUgbW91c2UgY2xpY2sgdG8gY2hlY2suICovXG5cdFx0X2NoZWNrRXh0ZXJuYWxDbGljazogZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdGlmICghcGx1Z2luLmN1ckluc3QpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGVsZW0gPSAkKGV2ZW50LnRhcmdldCk7XG5cdFx0XHRpZiAoZWxlbS5jbG9zZXN0KCcuJyArIHBsdWdpbi5fcG9wdXBDbGFzcyArICcsLicgKyBwbHVnaW4uX3RyaWdnZXJDbGFzcykubGVuZ3RoID09PSAwICYmXG5cdFx0XHRcdFx0IWVsZW0uaGFzQ2xhc3MocGx1Z2luLl9nZXRNYXJrZXIoKSkpIHtcblx0XHRcdFx0cGx1Z2luLmhpZGUocGx1Z2luLmN1ckluc3QpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogSGlkZSBhIHBvcHVwIGRhdGVwaWNrZXIuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudHxvYmplY3R9IFRoZSBjb250cm9sIHRvIHVzZSBvciB0aGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBwYXJhbSBpbW1lZGlhdGUge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGNsb3NlIGltbWVkaWF0ZWx5IHdpdGhvdXQgYW5pbWF0aW9uIChpbnRlcm5hbCkuXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnaGlkZScpICovXG5cdFx0aGlkZTogZnVuY3Rpb24oZWxlbSwgaW1tZWRpYXRlKSB7XG5cdFx0XHRpZiAoIWVsZW0pIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0aWYgKCQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xuXHRcdFx0XHRpbnN0ID0gZWxlbTtcblx0XHRcdH1cblx0XHRcdGlmIChpbnN0ICYmIGluc3QgPT09IHBsdWdpbi5jdXJJbnN0KSB7XG5cdFx0XHRcdHZhciBzaG93QW5pbSA9IChpbW1lZGlhdGUgPyAnJyA6IGluc3Qub3B0aW9ucy5zaG93QW5pbSk7XG5cdFx0XHRcdHZhciBzaG93U3BlZWQgPSBpbnN0Lm9wdGlvbnMuc2hvd1NwZWVkO1xuXHRcdFx0XHRzaG93U3BlZWQgPSAoc2hvd1NwZWVkID09PSAnbm9ybWFsJyAmJiAkLnVpICYmXG5cdFx0XHRcdFx0cGFyc2VJbnQoJC51aS52ZXJzaW9uLnN1YnN0cmluZygyKSkgPj0gOCA/ICdfZGVmYXVsdCcgOiBzaG93U3BlZWQpO1xuXHRcdFx0XHR2YXIgcG9zdFByb2Nlc3MgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIWluc3QuZGl2KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGluc3QuZGl2LnJlbW92ZSgpO1xuXHRcdFx0XHRcdGluc3QuZGl2ID0gbnVsbDtcblx0XHRcdFx0XHRwbHVnaW4uY3VySW5zdCA9IG51bGw7XG5cdFx0XHRcdFx0aWYgKCQuaXNGdW5jdGlvbihpbnN0Lm9wdGlvbnMub25DbG9zZSkpIHtcblx0XHRcdFx0XHRcdGluc3Qub3B0aW9ucy5vbkNsb3NlLmFwcGx5KGVsZW0sIFtpbnN0LnNlbGVjdGVkRGF0ZXNdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdGluc3QuZGl2LnN0b3AoKTtcblx0XHRcdFx0aWYgKCQuZWZmZWN0cyAmJiAoJC5lZmZlY3RzW3Nob3dBbmltXSB8fCAoJC5lZmZlY3RzLmVmZmVjdCAmJiAkLmVmZmVjdHMuZWZmZWN0W3Nob3dBbmltXSkpKSB7XG5cdFx0XHRcdFx0aW5zdC5kaXYuaGlkZShzaG93QW5pbSwgaW5zdC5vcHRpb25zLnNob3dPcHRpb25zLCBzaG93U3BlZWQsIHBvc3RQcm9jZXNzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHR2YXIgaGlkZUFuaW0gPSAoc2hvd0FuaW0gPT09ICdzbGlkZURvd24nID8gJ3NsaWRlVXAnIDpcblx0XHRcdFx0XHRcdChzaG93QW5pbSA9PT0gJ2ZhZGVJbicgPyAnZmFkZU91dCcgOiAnaGlkZScpKTtcblx0XHRcdFx0XHRpbnN0LmRpdltoaWRlQW5pbV0oKHNob3dBbmltID8gc2hvd1NwZWVkIDogJycpLCBwb3N0UHJvY2Vzcyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFzaG93QW5pbSkge1xuXHRcdFx0XHRcdHBvc3RQcm9jZXNzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIEhhbmRsZSBrZXlzdHJva2VzIGluIHRoZSBkYXRlcGlja2VyLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBldmVudCB7S2V5RXZlbnR9IFRoZSBrZXlzdHJva2UuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBub3QgaGFuZGxlZCwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIGhhbmRsZWQuICovXG5cdFx0X2tleURvd246IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHR2YXIgZWxlbSA9IChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuZWxlbSkgfHwgZXZlbnQudGFyZ2V0O1xuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoZWxlbSk7XG5cdFx0XHR2YXIgaGFuZGxlZCA9IGZhbHNlO1xuXHRcdFx0aWYgKGluc3QuaW5saW5lIHx8IGluc3QuZGl2KSB7XG5cdFx0XHRcdGlmIChldmVudC5rZXlDb2RlID09PSA5KSB7IC8vIFRhYiAtIGNsb3NlXG5cdFx0XHRcdFx0cGx1Z2luLmhpZGUoZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMTMpIHsgLy8gRW50ZXIgLSBzZWxlY3Rcblx0XHRcdFx0XHRwbHVnaW4uc2VsZWN0RGF0ZShlbGVtLFxuXHRcdFx0XHRcdFx0JCgnYS4nICsgaW5zdC5vcHRpb25zLnJlbmRlcmVyLmhpZ2hsaWdodGVkQ2xhc3MsIGluc3QuZGl2KVswXSk7XG5cdFx0XHRcdFx0aGFuZGxlZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7IC8vIENvbW1hbmQga2V5c3Ryb2tlc1xuXHRcdFx0XHRcdHZhciBjb21tYW5kcyA9IGluc3Qub3B0aW9ucy5jb21tYW5kcztcblx0XHRcdFx0XHRmb3IgKHZhciBuYW1lIGluIGNvbW1hbmRzKSB7XG5cdFx0XHRcdFx0XHR2YXIgY29tbWFuZCA9IGNvbW1hbmRzW25hbWVdO1xuXHRcdFx0XHRcdFx0aWYgKGNvbW1hbmQua2V5c3Ryb2tlLmtleUNvZGUgPT09IGV2ZW50LmtleUNvZGUgJiZcblx0XHRcdFx0XHRcdFx0XHQhIWNvbW1hbmQua2V5c3Ryb2tlLmN0cmxLZXkgPT09ICEhKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiZcblx0XHRcdFx0XHRcdFx0XHQhIWNvbW1hbmQua2V5c3Ryb2tlLmFsdEtleSA9PT0gZXZlbnQuYWx0S2V5ICYmXG5cdFx0XHRcdFx0XHRcdFx0ISFjb21tYW5kLmtleXN0cm9rZS5zaGlmdEtleSA9PT0gZXZlbnQuc2hpZnRLZXkpIHtcblx0XHRcdFx0XHRcdFx0cGx1Z2luLnBlcmZvcm1BY3Rpb24oZWxlbSwgbmFtZSk7XG5cdFx0XHRcdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2UgeyAvLyBTaG93IG9uICdjdXJyZW50JyBrZXlzdHJva2Vcblx0XHRcdFx0dmFyIGNvbW1hbmQgPSBpbnN0Lm9wdGlvbnMuY29tbWFuZHMuY3VycmVudDtcblx0XHRcdFx0aWYgKGNvbW1hbmQua2V5c3Ryb2tlLmtleUNvZGUgPT09IGV2ZW50LmtleUNvZGUgJiZcblx0XHRcdFx0XHRcdCEhY29tbWFuZC5rZXlzdHJva2UuY3RybEtleSA9PT0gISEoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJlxuXHRcdFx0XHRcdFx0ISFjb21tYW5kLmtleXN0cm9rZS5hbHRLZXkgPT09IGV2ZW50LmFsdEtleSAmJlxuXHRcdFx0XHRcdFx0ISFjb21tYW5kLmtleXN0cm9rZS5zaGlmdEtleSA9PT0gZXZlbnQuc2hpZnRLZXkpIHtcblx0XHRcdFx0XHRwbHVnaW4uc2hvdyhlbGVtKTtcblx0XHRcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aW5zdC5jdHJsS2V5ID0gKChldmVudC5rZXlDb2RlIDwgNDggJiYgZXZlbnQua2V5Q29kZSAhPT0gMzIpIHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSk7XG5cdFx0XHRpZiAoaGFuZGxlZCkge1xuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiAhaGFuZGxlZDtcblx0XHR9LFxuXG5cdFx0LyoqIEZpbHRlciBrZXlzdHJva2VzIGluIHRoZSBkYXRlcGlja2VyLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBldmVudCB7S2V5RXZlbnR9IFRoZSBrZXlzdHJva2UuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBhbGxvd2VkLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90IGFsbG93ZWQuICovXG5cdFx0X2tleVByZXNzOiBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoKGV2ZW50LmRhdGEgJiYgZXZlbnQuZGF0YS5lbGVtKSB8fCBldmVudC50YXJnZXQpO1xuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkgJiYgaW5zdC5vcHRpb25zLmNvbnN0cmFpbklucHV0KSB7XG5cdFx0XHRcdHZhciBjaCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQua2V5Q29kZSB8fCBldmVudC5jaGFyQ29kZSk7XG5cdFx0XHRcdHZhciBhbGxvd2VkQ2hhcnMgPSBwbHVnaW4uX2FsbG93ZWRDaGFycyhpbnN0KTtcblx0XHRcdFx0cmV0dXJuIChldmVudC5tZXRhS2V5IHx8IGluc3QuY3RybEtleSB8fCBjaCA8ICcgJyB8fFxuXHRcdFx0XHRcdCFhbGxvd2VkQ2hhcnMgfHwgYWxsb3dlZENoYXJzLmluZGV4T2YoY2gpID4gLTEpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIGFsbG93ZWQgYnkgdGhlIGRhdGUgZm9ybWF0LlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgc2V0IG9mIGFsbG93ZWQgY2hhcmFjdGVycywgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgYW55dGhpbmcgYWxsb3dlZC4gKi9cblx0XHRfYWxsb3dlZENoYXJzOiBmdW5jdGlvbihpbnN0KSB7XG5cdFx0XHR2YXIgYWxsb3dlZENoYXJzID0gKGluc3Qub3B0aW9ucy5tdWx0aVNlbGVjdCA/IGluc3Qub3B0aW9ucy5tdWx0aVNlcGFyYXRvciA6XG5cdFx0XHRcdChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgPyBpbnN0Lm9wdGlvbnMucmFuZ2VTZXBhcmF0b3IgOiAnJykpO1xuXHRcdFx0dmFyIGxpdGVyYWwgPSBmYWxzZTtcblx0XHRcdHZhciBoYXNOdW0gPSBmYWxzZTtcblx0XHRcdHZhciBkYXRlRm9ybWF0ID0gaW5zdC5nZXQoJ2RhdGVGb3JtYXQnKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0ZUZvcm1hdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgY2ggPSBkYXRlRm9ybWF0LmNoYXJBdChpKTtcblx0XHRcdFx0aWYgKGxpdGVyYWwpIHtcblx0XHRcdFx0XHRpZiAoY2ggPT09IFwiJ1wiICYmIGRhdGVGb3JtYXQuY2hhckF0KGkgKyAxKSAhPT0gXCInXCIpIHtcblx0XHRcdFx0XHRcdGxpdGVyYWwgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gY2g7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHN3aXRjaCAoY2gpIHtcblx0XHRcdFx0XHRcdGNhc2UgJ2QnOiBjYXNlICdtJzogY2FzZSAnbyc6IGNhc2UgJ3cnOlxuXHRcdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gKGhhc051bSA/ICcnIDogJzAxMjM0NTY3ODknKTsgaGFzTnVtID0gdHJ1ZTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICd5JzogY2FzZSAnQCc6IGNhc2UgJyEnOlxuXHRcdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gKGhhc051bSA/ICcnIDogJzAxMjM0NTY3ODknKSArICctJzsgaGFzTnVtID0gdHJ1ZTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdKJzpcblx0XHRcdFx0XHRcdFx0YWxsb3dlZENoYXJzICs9IChoYXNOdW0gPyAnJyA6ICcwMTIzNDU2Nzg5JykgKyAnLS4nOyBoYXNOdW0gPSB0cnVlOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0QnOiBjYXNlICdNJzogY2FzZSAnWSc6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBudWxsOyAvLyBBY2NlcHQgYW55dGhpbmdcblx0XHRcdFx0XHRcdGNhc2UgXCInXCI6XG5cdFx0XHRcdFx0XHRcdGlmIChkYXRlRm9ybWF0LmNoYXJBdChpICsgMSkgPT09IFwiJ1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0YWxsb3dlZENoYXJzICs9IFwiJ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGxpdGVyYWwgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0YWxsb3dlZENoYXJzICs9IGNoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFsbG93ZWRDaGFycztcblx0XHR9LFxuXG5cdFx0LyoqIFN5bmNocm9uaXNlIGRhdGVwaWNrZXIgd2l0aCB0aGUgZmllbGQuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGV2ZW50IHtLZXlFdmVudH0gVGhlIGtleXN0cm9rZS5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGFsbG93ZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QgYWxsb3dlZC4gKi9cblx0XHRfa2V5VXA6IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHR2YXIgZWxlbSA9IChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuZWxlbSkgfHwgZXZlbnQudGFyZ2V0O1xuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSAmJiAhaW5zdC5jdHJsS2V5ICYmIGluc3QubGFzdFZhbCAhPT0gaW5zdC5lbGVtLnZhbCgpKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dmFyIGRhdGVzID0gcGx1Z2luLl9leHRyYWN0RGF0ZXMoaW5zdCwgaW5zdC5lbGVtLnZhbCgpKTtcblx0XHRcdFx0XHRpZiAoZGF0ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0cGx1Z2luLnNldERhdGUoZWxlbSwgZGF0ZXMsIG51bGwsIHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRjYXRjaCAoZXZlbnQpIHtcblx0XHRcdFx0XHQvLyBJZ25vcmVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdC8qKiBJbmNyZW1lbnQvZGVjcmVtZW50IG1vbnRoL3llYXIgb24gbW91c2Ugd2hlZWwgYWN0aXZpdHkuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGV2ZW50IHtldmVudH0gVGhlIG1vdXNlIHdoZWVsIGV2ZW50LlxuXHRcdFx0QHBhcmFtIGRlbHRhIHtudW1iZXJ9IFRoZSBhbW91bnQgb2YgY2hhbmdlLiAqL1xuXHRcdF9kb01vdXNlV2hlZWw6IGZ1bmN0aW9uKGV2ZW50LCBkZWx0YSkge1xuXHRcdFx0dmFyIGVsZW0gPSAocGx1Z2luLmN1ckluc3QgJiYgcGx1Z2luLmN1ckluc3QuZWxlbVswXSkgfHxcblx0XHRcdFx0JChldmVudC50YXJnZXQpLmNsb3Nlc3QoJy4nICsgcGx1Z2luLl9nZXRNYXJrZXIoKSlbMF07XG5cdFx0XHRpZiAocGx1Z2luLmlzRGlzYWJsZWQoZWxlbSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLnVzZU1vdXNlV2hlZWwpIHtcblx0XHRcdFx0ZGVsdGEgPSAoZGVsdGEgPCAwID8gLTEgOiArMSk7XG5cdFx0XHRcdHBsdWdpbi5jaGFuZ2VNb250aChlbGVtLCAtaW5zdC5vcHRpb25zW2V2ZW50LmN0cmxLZXkgPyAnbW9udGhzVG9KdW1wJyA6ICdtb250aHNUb1N0ZXAnXSAqIGRlbHRhKTtcblx0XHRcdH1cblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fSxcblxuXHRcdC8qKiBDbGVhciBhbiBpbnB1dCBhbmQgY2xvc2UgYSBwb3B1cCBkYXRlcGlja2VyLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIHVzZS5cblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdjbGVhcicpICovXG5cdFx0Y2xlYXI6IGZ1bmN0aW9uKGVsZW0pIHtcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XG5cdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IFtdO1xuXHRcdFx0XHR0aGlzLmhpZGUoZWxlbSk7XG5cdFx0XHRcdHZhciBkZWZhdWx0RGF0ZSA9IGluc3QuZ2V0KCdkZWZhdWx0RGF0ZScpO1xuXHRcdFx0XHRpZiAoaW5zdC5vcHRpb25zLnNlbGVjdERlZmF1bHREYXRlICYmIGRlZmF1bHREYXRlKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXREYXRlKGVsZW0sIChkZWZhdWx0RGF0ZSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKSkubmV3RGF0ZSgpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVJbnB1dChlbGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIHNlbGVjdGVkIGRhdGUocykgZm9yIGEgZGF0ZXBpY2tlci5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7Q0RhdGVbXX0gVGhlIHNlbGVjdGVkIGRhdGUocykuXG5cdFx0XHRAZXhhbXBsZSB2YXIgZGF0ZXMgPSAkKHNlbGVjdG9yKS5kYXRlcGljaygnZ2V0RGF0ZScpICovXG5cdFx0Z2V0RGF0ZTogZnVuY3Rpb24oZWxlbSkge1xuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0cmV0dXJuICghJC5pc0VtcHR5T2JqZWN0KGluc3QpID8gaW5zdC5zZWxlY3RlZERhdGVzIDogW10pO1xuXHRcdH0sXG5cblx0XHQvKiogU2V0IHRoZSBzZWxlY3RlZCBkYXRlKHMpIGZvciBhIGRhdGVwaWNrZXIuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gdGhlIGNvbnRyb2wgdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBkYXRlcyB7Q0RhdGV8bnVtYmVyfHN0cmluZ3xhcnJheX0gdGhlIHNlbGVjdGVkIGRhdGUocykuXG5cdFx0XHRAcGFyYW0gW2VuZERhdGVdIHtDRGF0ZXxudW1iZXJ8c3RyaW5nfSB0aGUgZW5kaW5nIGRhdGUgZm9yIGEgcmFuZ2UuXG5cdFx0XHRAcGFyYW0gW2tleVVwXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgY29taW5nIGZyb20gPGNvZGU+a2V5VXA8L2NvZGU+IHByb2Nlc3NpbmcgKGludGVybmFsKS5cblx0XHRcdEBwYXJhbSBbc2V0T3B0XSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgY29taW5nIGZyb20gb3B0aW9uIHByb2Nlc3NpbmcgKGludGVybmFsKS5cblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdzZXREYXRlJywgbmV3IERhdGUoMjAxNCwgMTItMSwgMjUpKVxuICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdzZXREYXRlJywgJzEyLzI1LzIwMTQnLCAnMDEvMDEvMjAxNScpXG4gJChzZWxlY3RvcikuZGF0ZXBpY2soJ3NldERhdGUnLCBbZGF0ZTEsIGRhdGUyLCBkYXRlM10pICovXG5cdFx0c2V0RGF0ZTogZnVuY3Rpb24oZWxlbSwgZGF0ZXMsIGVuZERhdGUsIGtleVVwLCBzZXRPcHQpIHtcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XG5cdFx0XHRcdGlmICghJC5pc0FycmF5KGRhdGVzKSkge1xuXHRcdFx0XHRcdGRhdGVzID0gW2RhdGVzXTtcblx0XHRcdFx0XHRpZiAoZW5kRGF0ZSkge1xuXHRcdFx0XHRcdFx0ZGF0ZXMucHVzaChlbmREYXRlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIG1pbkRhdGUgPSBpbnN0LmdldCgnbWluRGF0ZScpO1xuXHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XG5cdFx0XHRcdHZhciBjdXJEYXRlID0gaW5zdC5zZWxlY3RlZERhdGVzWzBdO1xuXHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXMgPSBbXTtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkYXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBkYXRlID0gaW5zdC5vcHRpb25zLmNhbGVuZGFyLmRldGVybWluZURhdGUoXG5cdFx0XHRcdFx0XHRkYXRlc1tpXSwgbnVsbCwgY3VyRGF0ZSwgaW5zdC5nZXQoJ2RhdGVGb3JtYXQnKSwgaW5zdC5nZXRDb25maWcoKSk7XG5cdFx0XHRcdFx0aWYgKGRhdGUpIHtcblx0XHRcdFx0XHRcdGlmICgoIW1pbkRhdGUgfHwgZGF0ZS5jb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKSAmJlxuXHRcdFx0XHRcdFx0XHRcdCghbWF4RGF0ZSB8fCBkYXRlLmNvbXBhcmVUbyhtYXhEYXRlKSAhPT0gKzEpKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChpbnN0LnNlbGVjdGVkRGF0ZXNbal0uY29tcGFyZVRvKGRhdGUpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKCFmb3VuZCkge1xuXHRcdFx0XHRcdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcy5wdXNoKGRhdGUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcy5zcGxpY2UoaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0IHx8XG5cdFx0XHRcdFx0KGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCA/IDIgOiAxKSwgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aCk7XG5cdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNhc2UgMTogaW5zdC5zZWxlY3RlZERhdGVzWzFdID0gaW5zdC5zZWxlY3RlZERhdGVzWzBdOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgMjogaW5zdC5zZWxlY3RlZERhdGVzWzFdID1cblx0XHRcdFx0XHRcdFx0KGluc3Quc2VsZWN0ZWREYXRlc1swXS5jb21wYXJlVG8oaW5zdC5zZWxlY3RlZERhdGVzWzFdKSA9PT0gKzEgP1xuXHRcdFx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXNbMF0gOiBpbnN0LnNlbGVjdGVkRGF0ZXNbMV0pOyBicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aW5zdC5waWNraW5nUmFuZ2UgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpbnN0LnByZXZEYXRlID0gKGluc3QuZHJhd0RhdGUgPyBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKSA6IG51bGwpO1xuXHRcdFx0XHRpbnN0LmRyYXdEYXRlID0gdGhpcy5fY2hlY2tNaW5NYXgoKGluc3Quc2VsZWN0ZWREYXRlc1swXSB8fFxuXHRcdFx0XHRcdGluc3QuZ2V0KCdkZWZhdWx0RGF0ZScpIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpKS5uZXdEYXRlKCksIGluc3QpO1xuXHRcdFx0XHRpZiAoIXNldE9wdCkge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZShlbGVtKTtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVJbnB1dChlbGVtLCBrZXlVcCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIGEgZGF0ZSBpcyBzZWxlY3RhYmxlIGZvciB0aGlzIGRhdGVwaWNrZXIuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGNoZWNrLlxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfHN0cmluZ3xudW1iZXJ9IFRoZSBkYXRlIHRvIGNoZWNrLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgc2VsZWN0YWJsZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEBleGFtcGxlIHZhciBzZWxlY3RhYmxlID0gJChzZWxlY3RvcikuZGF0ZXBpY2soJ2lzU2VsZWN0YWJsZScsIGRhdGUpICovXG5cdFx0aXNTZWxlY3RhYmxlOiBmdW5jdGlvbihlbGVtLCBkYXRlKSB7XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGRhdGUgPSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGV0ZXJtaW5lRGF0ZShkYXRlLFxuXHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXNbMF0gfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCksIG51bGwsXG5cdFx0XHRcdGluc3Qub3B0aW9ucy5kYXRlRm9ybWF0LCBpbnN0LmdldENvbmZpZygpKTtcblx0XHRcdHJldHVybiB0aGlzLl9pc1NlbGVjdGFibGUoZWxlbSwgZGF0ZSwgaW5zdC5vcHRpb25zLm9uRGF0ZSxcblx0XHRcdFx0aW5zdC5nZXQoJ21pbkRhdGUnKSwgaW5zdC5nZXQoJ21heERhdGUnKSk7XG5cdFx0fSxcblxuXHRcdC8qKiBJbnRlcm5hbGx5IGRldGVybWluZSB3aGV0aGVyIGEgZGF0ZSBpcyBzZWxlY3RhYmxlIGZvciB0aGlzIGRhdGVwaWNrZXIuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IHRoZSBjb250cm9sIHRvIGNoZWNrLlxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgZGF0ZSB0byBjaGVjay5cblx0XHRcdEBwYXJhbSBvbkRhdGUge2Z1bmN0aW9ufGJvb2xlYW59IEFueSA8Y29kZT5vbkRhdGU8L2NvZGU+IGNhbGxiYWNrIG9yIDxjb2RlPmNhbGxiYWNrLnNlbGVjdGFibGU8L2NvZGU+LlxuXHRcdFx0QHBhcmFtIG1pbkRhdGUge0NEYXRlfSBUaGUgbWluaW11bSBhbGxvd2VkIGRhdGUuXG5cdFx0XHRAcGFyYW0gbWF4RGF0ZSB7Q0RhdGV9IFRoZSBtYXhpbXVtIGFsbG93ZWQgZGF0ZS5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHNlbGVjdGFibGUsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuICovXG5cdFx0X2lzU2VsZWN0YWJsZTogZnVuY3Rpb24oZWxlbSwgZGF0ZSwgb25EYXRlLCBtaW5EYXRlLCBtYXhEYXRlKSB7XG5cdFx0XHR2YXIgZGF0ZUluZm8gPSAodHlwZW9mIG9uRGF0ZSA9PT0gJ2Jvb2xlYW4nID8ge3NlbGVjdGFibGU6IG9uRGF0ZX0gOlxuXHRcdFx0XHQoISQuaXNGdW5jdGlvbihvbkRhdGUpID8ge30gOiBvbkRhdGUuYXBwbHkoZWxlbSwgW2RhdGUsIHRydWVdKSkpO1xuXHRcdFx0cmV0dXJuIChkYXRlSW5mby5zZWxlY3RhYmxlICE9PSBmYWxzZSkgJiZcblx0XHRcdFx0KCFtaW5EYXRlIHx8IGRhdGUudG9KRCgpID49IG1pbkRhdGUudG9KRCgpKSAmJiAoIW1heERhdGUgfHwgZGF0ZS50b0pEKCkgPD0gbWF4RGF0ZS50b0pEKCkpO1xuXHRcdH0sXG5cblx0XHQvKiogUGVyZm9ybSBhIG5hbWVkIGFjdGlvbiBmb3IgYSBkYXRlcGlja2VyLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHBhcmFtIGVsZW0ge2VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGFmZmVjdC5cblx0XHRcdEBwYXJhbSBhY3Rpb24ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIGFjdGlvbi4gKi9cblx0XHRwZXJmb3JtQWN0aW9uOiBmdW5jdGlvbihlbGVtLCBhY3Rpb24pIHtcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpICYmICF0aGlzLmlzRGlzYWJsZWQoZWxlbSkpIHtcblx0XHRcdFx0dmFyIGNvbW1hbmRzID0gaW5zdC5vcHRpb25zLmNvbW1hbmRzO1xuXHRcdFx0XHRpZiAoY29tbWFuZHNbYWN0aW9uXSAmJiBjb21tYW5kc1thY3Rpb25dLmVuYWJsZWQuYXBwbHkoZWxlbSwgW2luc3RdKSkge1xuXHRcdFx0XHRcdGNvbW1hbmRzW2FjdGlvbl0uYWN0aW9uLmFwcGx5KGVsZW0sIFtpbnN0XSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIFNldCB0aGUgY3VycmVudGx5IHNob3duIG1vbnRoLCBkZWZhdWx0aW5nIHRvIHRvZGF5J3MuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxuXHRcdFx0QHBhcmFtIFt5ZWFyXSB7bnVtYmVyfSBUaGUgeWVhciB0byBzaG93LlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIHNob3cgKDEtMTIpLlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gc2hvdy5cblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdzaG93TW9udGgnLCAyMDE0LCAxMiwgMjUpICovXG5cdFx0c2hvd01vbnRoOiBmdW5jdGlvbihlbGVtLCB5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSAmJiAoZGF5ICE9IG51bGwgfHxcblx0XHRcdFx0XHQoaW5zdC5kcmF3RGF0ZS55ZWFyKCkgIT09IHllYXIgfHwgaW5zdC5kcmF3RGF0ZS5tb250aCgpICE9PSBtb250aCkpKSB7XG5cdFx0XHRcdGluc3QucHJldkRhdGUgPSBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKTtcblx0XHRcdFx0dmFyIGNhbGVuZGFyID0gaW5zdC5vcHRpb25zLmNhbGVuZGFyO1xuXHRcdFx0XHR2YXIgc2hvdyA9IHRoaXMuX2NoZWNrTWluTWF4KCh5ZWFyICE9IG51bGwgP1xuXHRcdFx0XHRcdGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbW9udGgsIDEpIDogY2FsZW5kYXIudG9kYXkoKSksIGluc3QpO1xuXHRcdFx0XHRpbnN0LmRyYXdEYXRlLmRhdGUoc2hvdy55ZWFyKCksIHNob3cubW9udGgoKSwgXG5cdFx0XHRcdFx0KGRheSAhPSBudWxsID8gZGF5IDogTWF0aC5taW4oaW5zdC5kcmF3RGF0ZS5kYXkoKSxcblx0XHRcdFx0XHRjYWxlbmRhci5kYXlzSW5Nb250aChzaG93LnllYXIoKSwgc2hvdy5tb250aCgpKSkpKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlKGVsZW0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogQWRqdXN0IHRoZSBjdXJyZW50bHkgc2hvd24gbW9udGguXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxuXHRcdFx0QHBhcmFtIG9mZnNldCB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIG1vbnRocyB0byBjaGFuZ2UgYnkuXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnY2hhbmdlTW9udGgnLCAyKSovXG5cdFx0Y2hhbmdlTW9udGg6IGZ1bmN0aW9uKGVsZW0sIG9mZnNldCkge1xuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcblx0XHRcdFx0dmFyIGRhdGUgPSBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5hZGQob2Zmc2V0LCAnbScpO1xuXHRcdFx0XHR0aGlzLnNob3dNb250aChlbGVtLCBkYXRlLnllYXIoKSwgZGF0ZS5tb250aCgpKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIEFkanVzdCB0aGUgY3VycmVudGx5IHNob3duIGRheS5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXG5cdFx0XHRAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgZGF5cyB0byBjaGFuZ2UgYnkuXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnY2hhbmdlRGF5JywgNykqL1xuXHRcdGNoYW5nZURheTogZnVuY3Rpb24oZWxlbSwgb2Zmc2V0KSB7XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xuXHRcdFx0XHR2YXIgZGF0ZSA9IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZChvZmZzZXQsICdkJyk7XG5cdFx0XHRcdHRoaXMuc2hvd01vbnRoKGVsZW0sIGRhdGUueWVhcigpLCBkYXRlLm1vbnRoKCksIGRhdGUuZGF5KCkpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogUmVzdHJpY3QgYSBkYXRlIHRvIHRoZSBtaW5pbXVtL21heGltdW0gc3BlY2lmaWVkLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZX0gVGhlIGRhdGUgdG8gY2hlY2suXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy4gKi9cblx0XHRfY2hlY2tNaW5NYXg6IGZ1bmN0aW9uKGRhdGUsIGluc3QpIHtcblx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5nZXQoJ21pbkRhdGUnKTtcblx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcblx0XHRcdGRhdGUgPSAobWluRGF0ZSAmJiBkYXRlLmNvbXBhcmVUbyhtaW5EYXRlKSA9PT0gLTEgPyBtaW5EYXRlLm5ld0RhdGUoKSA6IGRhdGUpO1xuXHRcdFx0ZGF0ZSA9IChtYXhEYXRlICYmIGRhdGUuY29tcGFyZVRvKG1heERhdGUpID09PSArMSA/IG1heERhdGUubmV3RGF0ZSgpIDogZGF0ZSk7XG5cdFx0XHRyZXR1cm4gZGF0ZTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBkYXRlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbnRyeSBpbiB0aGUgZGF0ZXBpY2tlci5cblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIHRhcmdldCB7RWxlbWVudH0gVGhlIHNlbGVjdGVkIGRhdGVwaWNrZXIgZWxlbWVudC5cblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgY29ycmVzcG9uZGluZyBkYXRlLCBvciA8Y29kZT5udWxsPC9jb2RlPi5cdFx0XHRcblx0XHRcdEBleGFtcGxlIHZhciBkYXRlID0gJChzZWxlY3RvcikuZGF0ZXBpY2soJ3JldHJpZXZlRGF0ZScsICQoJ2Rpdi5kYXRlcGljay1wb3B1cCBhOmNvbnRhaW5zKDEwKScpWzBdKSAqL1xuXHRcdHJldHJpZXZlRGF0ZTogZnVuY3Rpb24oZWxlbSwgdGFyZ2V0KSB7XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRyZXR1cm4gKCQuaXNFbXB0eU9iamVjdChpbnN0KSA/IG51bGwgOiBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZnJvbUpEKFxuXHRcdFx0XHRwYXJzZUZsb2F0KHRhcmdldC5jbGFzc05hbWUucmVwbGFjZSgvXi4qamQoXFxkK1xcLjUpLiokLywgJyQxJykpKSk7XG5cdFx0fSxcblxuXHRcdC8qKiBTZWxlY3QgYSBkYXRlIGZvciB0aGlzIGRhdGVwaWNrZXIuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSB0YXJnZXQge0VsZW1lbnR9IFRoZSBzZWxlY3RlZCBkYXRlcGlja2VyIGVsZW1lbnQuXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnc2VsZWN0RGF0ZScsICQoJ2Rpdi5kYXRlcGljay1wb3B1cCBhOmNvbnRhaW5zKDEwKScpWzBdKSAqL1xuXHRcdHNlbGVjdERhdGU6IGZ1bmN0aW9uKGVsZW0sIHRhcmdldCkge1xuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkgJiYgIXRoaXMuaXNEaXNhYmxlZChlbGVtKSkge1xuXHRcdFx0XHR2YXIgZGF0ZSA9IHRoaXMucmV0cmlldmVEYXRlKGVsZW0sIHRhcmdldCk7XG5cdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QpIHtcblx0XHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0aWYgKGRhdGUuY29tcGFyZVRvKGluc3Quc2VsZWN0ZWREYXRlc1tpXSkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzLnNwbGljZShpLCAxKTtcblx0XHRcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCFmb3VuZCAmJiBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoIDwgaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0KSB7XG5cdFx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXMucHVzaChkYXRlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAoaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0KSB7XG5cdFx0XHRcdFx0aWYgKGluc3QucGlja2luZ1JhbmdlKSB7XG5cdFx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXNbMV0gPSBkYXRlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IFtkYXRlLCBkYXRlXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aW5zdC5waWNraW5nUmFuZ2UgPSAhaW5zdC5waWNraW5nUmFuZ2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzID0gW2RhdGVdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluc3QucHJldkRhdGUgPSBpbnN0LmRyYXdEYXRlID0gZGF0ZS5uZXdEYXRlKCk7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUlucHV0KGVsZW0pO1xuXHRcdFx0XHRpZiAoaW5zdC5pbmxpbmUgfHwgaW5zdC5waWNraW5nUmFuZ2UgfHwgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aCA8XG5cdFx0XHRcdFx0XHQoaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0IHx8IChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgPyAyIDogMSkpKSB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlKGVsZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuaGlkZShlbGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogR2VuZXJhdGUgdGhlIGRhdGVwaWNrZXIgY29udGVudCBmb3IgdGhpcyBjb250cm9sLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEByZXR1cm4ge2pRdWVyeX0gVGhlIGRhdGVwaWNrZXIgY29udGVudCAqL1xuXHRcdF9nZW5lcmF0ZUNvbnRlbnQ6IGZ1bmN0aW9uKGVsZW0sIGluc3QpIHtcblx0XHRcdHZhciBtb250aHNUb1Nob3cgPSBpbnN0Lm9wdGlvbnMubW9udGhzVG9TaG93O1xuXHRcdFx0bW9udGhzVG9TaG93ID0gKCQuaXNBcnJheShtb250aHNUb1Nob3cpID8gbW9udGhzVG9TaG93IDogWzEsIG1vbnRoc1RvU2hvd10pO1xuXHRcdFx0aW5zdC5kcmF3RGF0ZSA9IHRoaXMuX2NoZWNrTWluTWF4KFxuXHRcdFx0XHRpbnN0LmRyYXdEYXRlIHx8IGluc3QuZ2V0KCdkZWZhdWx0RGF0ZScpIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpLCBpbnN0KTtcblx0XHRcdHZhciBkcmF3RGF0ZSA9IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZCgtaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKTtcblx0XHRcdC8vIEdlbmVyYXRlIG1vbnRoc1xuXHRcdFx0dmFyIG1vbnRoUm93cyA9ICcnO1xuXHRcdFx0Zm9yICh2YXIgcm93ID0gMDsgcm93IDwgbW9udGhzVG9TaG93WzBdOyByb3crKykge1xuXHRcdFx0XHR2YXIgbW9udGhzID0gJyc7XG5cdFx0XHRcdGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG1vbnRoc1RvU2hvd1sxXTsgY29sKyspIHtcblx0XHRcdFx0XHRtb250aHMgKz0gdGhpcy5fZ2VuZXJhdGVNb250aChlbGVtLCBpbnN0LCBkcmF3RGF0ZS55ZWFyKCksXG5cdFx0XHRcdFx0XHRkcmF3RGF0ZS5tb250aCgpLCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIsIGluc3Qub3B0aW9ucy5yZW5kZXJlciwgKHJvdyA9PT0gMCAmJiBjb2wgPT09IDApKTtcblx0XHRcdFx0XHRkcmF3RGF0ZS5hZGQoMSwgJ20nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtb250aFJvd3MgKz0gdGhpcy5fcHJlcGFyZShpbnN0Lm9wdGlvbnMucmVuZGVyZXIubW9udGhSb3csIGluc3QpLnJlcGxhY2UoL1xce21vbnRoc1xcfS8sIG1vbnRocyk7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcGlja2VyID0gdGhpcy5fcHJlcGFyZShpbnN0Lm9wdGlvbnMucmVuZGVyZXIucGlja2VyLCBpbnN0KS5yZXBsYWNlKC9cXHttb250aHNcXH0vLCBtb250aFJvd3MpLlxuXHRcdFx0XHRyZXBsYWNlKC9cXHt3ZWVrSGVhZGVyXFx9L2csIHRoaXMuX2dlbmVyYXRlRGF5SGVhZGVycyhpbnN0LCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIsIGluc3Qub3B0aW9ucy5yZW5kZXJlcikpO1xuXHRcdFx0Ly8gQWRkIGNvbW1hbmRzXG5cdFx0XHR2YXIgYWRkQ29tbWFuZCA9IGZ1bmN0aW9uKHR5cGUsIG9wZW4sIGNsb3NlLCBuYW1lLCBjbGFzc2VzKSB7XG5cdFx0XHRcdGlmIChwaWNrZXIuaW5kZXhPZigneycgKyB0eXBlICsgJzonICsgbmFtZSArICd9JykgPT09IC0xKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBjb21tYW5kID0gaW5zdC5vcHRpb25zLmNvbW1hbmRzW25hbWVdO1xuXHRcdFx0XHR2YXIgZGF0ZSA9IChpbnN0Lm9wdGlvbnMuY29tbWFuZHNBc0RhdGVGb3JtYXQgPyBjb21tYW5kLmRhdGUuYXBwbHkoZWxlbSwgW2luc3RdKSA6IG51bGwpO1xuXHRcdFx0XHRwaWNrZXIgPSBwaWNrZXIucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxceycgKyB0eXBlICsgJzonICsgbmFtZSArICdcXFxcfScsICdnJyksXG5cdFx0XHRcdFx0JzwnICsgb3BlbiArIChjb21tYW5kLnN0YXR1cyA/ICcgdGl0bGU9XCInICsgaW5zdC5vcHRpb25zW2NvbW1hbmQuc3RhdHVzXSArICdcIicgOiAnJykgK1xuXHRcdFx0XHRcdCcgY2xhc3M9XCInICsgaW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRDbGFzcyArICcgJyArXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRDbGFzcyArICctJyArIG5hbWUgKyAnICcgKyBjbGFzc2VzICtcblx0XHRcdFx0XHQoY29tbWFuZC5lbmFibGVkKGluc3QpID8gJycgOiAnICcgKyBpbnN0Lm9wdGlvbnMucmVuZGVyZXIuZGlzYWJsZWRDbGFzcykgKyAnXCI+JyArXG5cdFx0XHRcdFx0KGRhdGUgPyBkYXRlLmZvcm1hdERhdGUoaW5zdC5vcHRpb25zW2NvbW1hbmQudGV4dF0pIDpcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnNbY29tbWFuZC50ZXh0XSkgKyAnPC8nICsgY2xvc2UgKyAnPicpO1xuXHRcdFx0fTtcblx0XHRcdGZvciAodmFyIG5hbWUgaW4gaW5zdC5vcHRpb25zLmNvbW1hbmRzKSB7XG5cdFx0XHRcdGFkZENvbW1hbmQoJ2J1dHRvbicsICdidXR0b24gdHlwZT1cImJ1dHRvblwiJywgJ2J1dHRvbicsIG5hbWUsXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRCdXR0b25DbGFzcyk7XG5cdFx0XHRcdGFkZENvbW1hbmQoJ2xpbmsnLCAnYSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCInLCAnYScsIG5hbWUsXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRMaW5rQ2xhc3MpO1xuXHRcdFx0fVxuXHRcdFx0cGlja2VyID0gJChwaWNrZXIpO1xuXHRcdFx0aWYgKG1vbnRoc1RvU2hvd1sxXSA+IDEpIHtcblx0XHRcdFx0dmFyIGNvdW50ID0gMDtcblx0XHRcdFx0JChpbnN0Lm9wdGlvbnMucmVuZGVyZXIubW9udGhTZWxlY3RvciwgcGlja2VyKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBudGggPSArK2NvdW50ICUgbW9udGhzVG9TaG93WzFdO1xuXHRcdFx0XHRcdCQodGhpcykuYWRkQ2xhc3MobnRoID09PSAxID8gJ2ZpcnN0JyA6IChudGggPT09IDAgPyAnbGFzdCcgOiAnJykpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vIEFkZCBkYXRlcGlja2VyIGJlaGF2aW91clxuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdFx0ZnVuY3Rpb24gcmVtb3ZlSGlnaGxpZ2h0KCkge1xuXHRcdFx0XHQoaW5zdC5pbmxpbmUgPyAkKHRoaXMpLmNsb3Nlc3QoJy4nICsgc2VsZi5fZ2V0TWFya2VyKCkpIDogaW5zdC5kaXYpLlxuXHRcdFx0XHRcdGZpbmQoaW5zdC5vcHRpb25zLnJlbmRlcmVyLmRheVNlbGVjdG9yICsgJyBhJykuXG5cdFx0XHRcdFx0cmVtb3ZlQ2xhc3MoaW5zdC5vcHRpb25zLnJlbmRlcmVyLmhpZ2hsaWdodGVkQ2xhc3MpO1xuXHRcdFx0fVxuXHRcdFx0cGlja2VyLmZpbmQoaW5zdC5vcHRpb25zLnJlbmRlcmVyLmRheVNlbGVjdG9yICsgJyBhJykuaG92ZXIoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZW1vdmVIaWdobGlnaHQuYXBwbHkodGhpcyk7XG5cdFx0XHRcdFx0XHQkKHRoaXMpLmFkZENsYXNzKGluc3Qub3B0aW9ucy5yZW5kZXJlci5oaWdobGlnaHRlZENsYXNzKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlbW92ZUhpZ2hsaWdodCkuXG5cdFx0XHRcdGNsaWNrKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHNlbGYuc2VsZWN0RGF0ZShlbGVtLCB0aGlzKTtcblx0XHRcdFx0fSkuZW5kKCkuXG5cdFx0XHRcdGZpbmQoJ3NlbGVjdC4nICsgdGhpcy5fbW9udGhZZWFyQ2xhc3MgKyAnOm5vdCguJyArIHRoaXMuX2FueVllYXJDbGFzcyArICcpJykuXG5cdFx0XHRcdGNoYW5nZShmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR2YXIgbW9udGhZZWFyID0gJCh0aGlzKS52YWwoKS5zcGxpdCgnLycpO1xuXHRcdFx0XHRcdHNlbGYuc2hvd01vbnRoKGVsZW0sIHBhcnNlSW50KG1vbnRoWWVhclsxXSwgMTApLCBwYXJzZUludChtb250aFllYXJbMF0sIDEwKSk7XG5cdFx0XHRcdH0pLmVuZCgpLlxuXHRcdFx0XHRmaW5kKCdzZWxlY3QuJyArIHRoaXMuX2FueVllYXJDbGFzcykuY2xpY2soZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0JCh0aGlzKS5jc3MoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJykuXG5cdFx0XHRcdFx0XHRuZXh0KCdpbnB1dCcpLmNzcyh7bGVmdDogdGhpcy5vZmZzZXRMZWZ0LCB0b3A6IHRoaXMub2Zmc2V0VG9wLFxuXHRcdFx0XHRcdFx0d2lkdGg6IHRoaXMub2Zmc2V0V2lkdGgsIGhlaWdodDogdGhpcy5vZmZzZXRIZWlnaHR9KS5zaG93KCkuZm9jdXMoKTtcblx0XHRcdFx0fSkuZW5kKCkuXG5cdFx0XHRcdGZpbmQoJ2lucHV0LicgKyBzZWxmLl9tb250aFllYXJDbGFzcykuY2hhbmdlKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR2YXIgeWVhciA9IHBhcnNlSW50KCQodGhpcykudmFsKCksIDEwKTtcblx0XHRcdFx0XHRcdHllYXIgPSAoaXNOYU4oeWVhcikgPyBpbnN0LmRyYXdEYXRlLnllYXIoKSA6IHllYXIpO1xuXHRcdFx0XHRcdFx0c2VsZi5zaG93TW9udGgoZWxlbSwgeWVhciwgaW5zdC5kcmF3RGF0ZS5tb250aCgpLCBpbnN0LmRyYXdEYXRlLmRheSgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdGFsZXJ0KGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkua2V5ZG93bihmdW5jdGlvbihldmVudCkge1xuXHRcdFx0XHRcdGlmIChldmVudC5rZXlDb2RlID09PSAxMykgeyAvLyBFbnRlclxuXHRcdFx0XHRcdFx0JChldmVudC5lbGVtKS5jaGFuZ2UoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMjcpIHsgLy8gRXNjYXBlXG5cdFx0XHRcdFx0XHQkKGV2ZW50LmVsZW0pLmhpZGUoKS5wcmV2KCdzZWxlY3QnKS5jc3MoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0XHRcdFx0aW5zdC5lbGVtLmZvY3VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdC8vIEFkZCBrZXlib2FyZCBoYW5kbGluZ1xuXHRcdFx0dmFyIGRhdGEgPSB7ZWxlbTogaW5zdC5lbGVtWzBdfTtcblx0XHRcdHBpY2tlci5rZXlkb3duKGRhdGEsIHRoaXMuX2tleURvd24pLmtleXByZXNzKGRhdGEsIHRoaXMuX2tleVByZXNzKS5rZXl1cChkYXRhLCB0aGlzLl9rZXlVcCk7XG5cdFx0XHQvLyBBZGQgY29tbWFuZCBiZWhhdmlvdXJcblx0XHRcdHBpY2tlci5maW5kKCcuJyArIGluc3Qub3B0aW9ucy5yZW5kZXJlci5jb21tYW5kQ2xhc3MpLmNsaWNrKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICghJCh0aGlzKS5oYXNDbGFzcyhpbnN0Lm9wdGlvbnMucmVuZGVyZXIuZGlzYWJsZWRDbGFzcykpIHtcblx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSB0aGlzLmNsYXNzTmFtZS5yZXBsYWNlKFxuXHRcdFx0XHRcdFx0XHRuZXcgUmVnRXhwKCdeLionICsgaW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRDbGFzcyArICctKFteIF0rKS4qJCcpLCAnJDEnKTtcblx0XHRcdFx0XHRcdHBsdWdpbi5wZXJmb3JtQWN0aW9uKGVsZW0sIGFjdGlvbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdC8vIEFkZCBjbGFzc2VzXG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLmlzUlRMKSB7XG5cdFx0XHRcdHBpY2tlci5hZGRDbGFzcyhpbnN0Lm9wdGlvbnMucmVuZGVyZXIucnRsQ2xhc3MpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG1vbnRoc1RvU2hvd1swXSAqIG1vbnRoc1RvU2hvd1sxXSA+IDEpIHtcblx0XHRcdFx0cGlja2VyLmFkZENsYXNzKGluc3Qub3B0aW9ucy5yZW5kZXJlci5tdWx0aUNsYXNzKTtcblx0XHRcdH1cblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucGlja2VyQ2xhc3MpIHtcblx0XHRcdFx0cGlja2VyLmFkZENsYXNzKGluc3Qub3B0aW9ucy5waWNrZXJDbGFzcyk7XG5cdFx0XHR9XG5cdFx0XHQvLyBSZXNpemVcblx0XHRcdCQoJ2JvZHknKS5hcHBlbmQocGlja2VyKTtcblx0XHRcdHZhciB3aWR0aCA9IDA7XG5cdFx0XHRwaWNrZXIuZmluZChpbnN0Lm9wdGlvbnMucmVuZGVyZXIubW9udGhTZWxlY3RvcikuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0d2lkdGggKz0gJCh0aGlzKS5vdXRlcldpZHRoKCk7XG5cdFx0XHR9KTtcblx0XHRcdHBpY2tlci53aWR0aCh3aWR0aCAvIG1vbnRoc1RvU2hvd1swXSk7XG5cdFx0XHQvLyBQcmUtc2hvdyBjdXN0b21pc2F0aW9uXG5cdFx0XHRpZiAoJC5pc0Z1bmN0aW9uKGluc3Qub3B0aW9ucy5vblNob3cpKSB7XG5cdFx0XHRcdGluc3Qub3B0aW9ucy5vblNob3cuYXBwbHkoZWxlbSwgW3BpY2tlciwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLCBpbnN0XSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcGlja2VyO1xuXHRcdH0sXG5cblx0XHQvKiogR2VuZXJhdGUgdGhlIGNvbnRlbnQgZm9yIGEgc2luZ2xlIG1vbnRoLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSB5ZWFyIHRvIGdlbmVyYXRlLlxuXHRcdFx0QHBhcmFtIG1vbnRoIHtudW1iZXJ9IFRoZSBtb250aCB0byBnZW5lcmF0ZS5cblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY3VycmVudCBjYWxlbmRhci5cblx0XHRcdEBwYXJhbSByZW5kZXJlciB7b2JqZWN0fSBUaGUgcmVuZGVyaW5nIHRlbXBsYXRlcy5cblx0XHRcdEBwYXJhbSBmaXJzdCB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgZmlyc3Qgb2YgbXVsdGlwbGUgbW9udGhzLlxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgbW9udGggY29udGVudC4gKi9cblx0XHRfZ2VuZXJhdGVNb250aDogZnVuY3Rpb24oZWxlbSwgaW5zdCwgeWVhciwgbW9udGgsIGNhbGVuZGFyLCByZW5kZXJlciwgZmlyc3QpIHtcblx0XHRcdHZhciBkYXlzSW5Nb250aCA9IGNhbGVuZGFyLmRheXNJbk1vbnRoKHllYXIsIG1vbnRoKTtcblx0XHRcdHZhciBtb250aHNUb1Nob3cgPSBpbnN0Lm9wdGlvbnMubW9udGhzVG9TaG93O1xuXHRcdFx0bW9udGhzVG9TaG93ID0gKCQuaXNBcnJheShtb250aHNUb1Nob3cpID8gbW9udGhzVG9TaG93IDogWzEsIG1vbnRoc1RvU2hvd10pO1xuXHRcdFx0dmFyIGZpeGVkV2Vla3MgPSBpbnN0Lm9wdGlvbnMuZml4ZWRXZWVrcyB8fCAobW9udGhzVG9TaG93WzBdICogbW9udGhzVG9TaG93WzFdID4gMSk7XG5cdFx0XHR2YXIgZmlyc3REYXkgPSBpbnN0Lm9wdGlvbnMuZmlyc3REYXk7XG5cdFx0XHRmaXJzdERheSA9IChmaXJzdERheSA9PSBudWxsID8gY2FsZW5kYXIubG9jYWwuZmlyc3REYXkgOiBmaXJzdERheSk7XG5cdFx0XHR2YXIgbGVhZERheXMgPSAoY2FsZW5kYXIuZGF5T2ZXZWVrKHllYXIsIG1vbnRoLCBjYWxlbmRhci5taW5EYXkpIC1cblx0XHRcdFx0Zmlyc3REYXkgKyBjYWxlbmRhci5kYXlzSW5XZWVrKCkpICUgY2FsZW5kYXIuZGF5c0luV2VlaygpO1xuXHRcdFx0dmFyIG51bVdlZWtzID0gKGZpeGVkV2Vla3MgPyA2IDogTWF0aC5jZWlsKChsZWFkRGF5cyArIGRheXNJbk1vbnRoKSAvIGNhbGVuZGFyLmRheXNJbldlZWsoKSkpO1xuXHRcdFx0dmFyIHNlbGVjdE90aGVyTW9udGhzID0gaW5zdC5vcHRpb25zLnNlbGVjdE90aGVyTW9udGhzICYmIGluc3Qub3B0aW9ucy5zaG93T3RoZXJNb250aHM7XG5cdFx0XHR2YXIgbWluRGF0ZSA9IChpbnN0LnBpY2tpbmdSYW5nZSA/IGluc3Quc2VsZWN0ZWREYXRlc1swXSA6IGluc3QuZ2V0KCdtaW5EYXRlJykpO1xuXHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xuXHRcdFx0dmFyIHNob3dXZWVrcyA9IHJlbmRlcmVyLndlZWsuaW5kZXhPZigne3dlZWtPZlllYXJ9JykgPiAtMTtcblx0XHRcdHZhciB0b2RheSA9IGNhbGVuZGFyLnRvZGF5KCk7XG5cdFx0XHR2YXIgZHJhd0RhdGUgPSBjYWxlbmRhci5uZXdEYXRlKHllYXIsIG1vbnRoLCBjYWxlbmRhci5taW5EYXkpO1xuXHRcdFx0ZHJhd0RhdGUuYWRkKC1sZWFkRGF5cyAtIChmaXhlZFdlZWtzICYmXG5cdFx0XHRcdChkcmF3RGF0ZS5kYXlPZldlZWsoKSA9PT0gZmlyc3REYXkgfHwgZHJhd0RhdGUuZGF5c0luTW9udGgoKSA8IGNhbGVuZGFyLmRheXNJbldlZWsoKSk/XG5cdFx0XHRcdGNhbGVuZGFyLmRheXNJbldlZWsoKSA6IDApLCAnZCcpO1xuXHRcdFx0dmFyIGpkID0gZHJhd0RhdGUudG9KRCgpO1xuXHRcdFx0Ly8gR2VuZXJhdGUgd2Vla3Ncblx0XHRcdHZhciB3ZWVrcyA9ICcnO1xuXHRcdFx0Zm9yICh2YXIgd2VlayA9IDA7IHdlZWsgPCBudW1XZWVrczsgd2VlaysrKSB7XG5cdFx0XHRcdHZhciB3ZWVrT2ZZZWFyID0gKCFzaG93V2Vla3MgPyAnJyA6ICc8c3BhbiBjbGFzcz1cImpkJyArIGpkICsgJ1wiPicgK1xuXHRcdFx0XHRcdCgkLmlzRnVuY3Rpb24oaW5zdC5vcHRpb25zLmNhbGN1bGF0ZVdlZWspID9cblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMuY2FsY3VsYXRlV2VlayhkcmF3RGF0ZSkgOiBkcmF3RGF0ZS53ZWVrT2ZZZWFyKCkpICsgJzwvc3Bhbj4nKTtcblx0XHRcdFx0dmFyIGRheXMgPSAnJztcblx0XHRcdFx0Zm9yICh2YXIgZGF5ID0gMDsgZGF5IDwgY2FsZW5kYXIuZGF5c0luV2VlaygpOyBkYXkrKykge1xuXHRcdFx0XHRcdHZhciBzZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgJiYgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdHNlbGVjdGVkID0gKGRyYXdEYXRlLmNvbXBhcmVUbyhpbnN0LnNlbGVjdGVkRGF0ZXNbMF0pICE9PSAtMSAmJlxuXHRcdFx0XHRcdFx0XHRkcmF3RGF0ZS5jb21wYXJlVG8oaW5zdC5zZWxlY3RlZERhdGVzWzFdKSAhPT0gKzEpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKGluc3Quc2VsZWN0ZWREYXRlc1tpXS5jb21wYXJlVG8oZHJhd0RhdGUpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciBkYXRlSW5mbyA9ICghJC5pc0Z1bmN0aW9uKGluc3Qub3B0aW9ucy5vbkRhdGUpID8ge30gOlxuXHRcdFx0XHRcdFx0aW5zdC5vcHRpb25zLm9uRGF0ZS5hcHBseShlbGVtLCBbZHJhd0RhdGUsIGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoXSkpO1xuXHRcdFx0XHRcdHZhciBzZWxlY3RhYmxlID0gKHNlbGVjdE90aGVyTW9udGhzIHx8IGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoKSAmJlxuXHRcdFx0XHRcdFx0dGhpcy5faXNTZWxlY3RhYmxlKGVsZW0sIGRyYXdEYXRlLCBkYXRlSW5mby5zZWxlY3RhYmxlLCBtaW5EYXRlLCBtYXhEYXRlKTtcblx0XHRcdFx0XHRkYXlzICs9IHRoaXMuX3ByZXBhcmUocmVuZGVyZXIuZGF5LCBpbnN0KS5yZXBsYWNlKC9cXHtkYXlcXH0vZyxcblx0XHRcdFx0XHRcdChzZWxlY3RhYmxlID8gJzxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIicgOiAnPHNwYW4nKSArXG5cdFx0XHRcdFx0XHQnIGNsYXNzPVwiamQnICsgamQgKyAnICcgKyAoZGF0ZUluZm8uZGF0ZUNsYXNzIHx8ICcnKSArXG5cdFx0XHRcdFx0XHQoc2VsZWN0ZWQgJiYgKHNlbGVjdE90aGVyTW9udGhzIHx8IGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoKSA/XG5cdFx0XHRcdFx0XHQnICcgKyByZW5kZXJlci5zZWxlY3RlZENsYXNzIDogJycpICtcblx0XHRcdFx0XHRcdChzZWxlY3RhYmxlID8gJyAnICsgcmVuZGVyZXIuZGVmYXVsdENsYXNzIDogJycpICtcblx0XHRcdFx0XHRcdChkcmF3RGF0ZS53ZWVrRGF5KCkgPyAnJyA6ICcgJyArIHJlbmRlcmVyLndlZWtlbmRDbGFzcykgK1xuXHRcdFx0XHRcdFx0KGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoID8gJycgOiAnICcgKyByZW5kZXJlci5vdGhlck1vbnRoQ2xhc3MpICtcblx0XHRcdFx0XHRcdChkcmF3RGF0ZS5jb21wYXJlVG8odG9kYXkpID09PSAwICYmIGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoID9cblx0XHRcdFx0XHRcdCcgJyArIHJlbmRlcmVyLnRvZGF5Q2xhc3MgOiAnJykgK1xuXHRcdFx0XHRcdFx0KGRyYXdEYXRlLmNvbXBhcmVUbyhpbnN0LmRyYXdEYXRlKSA9PT0gMCAmJiBkcmF3RGF0ZS5tb250aCgpID09PSBtb250aCA/XG5cdFx0XHRcdFx0XHQnICcgKyByZW5kZXJlci5oaWdobGlnaHRlZENsYXNzIDogJycpICsgJ1wiJyArXG5cdFx0XHRcdFx0XHQoZGF0ZUluZm8udGl0bGUgfHwgKGluc3Qub3B0aW9ucy5kYXlTdGF0dXMgJiYgc2VsZWN0YWJsZSkgPyAnIHRpdGxlPVwiJyArXG5cdFx0XHRcdFx0XHQoZGF0ZUluZm8udGl0bGUgfHwgZHJhd0RhdGUuZm9ybWF0RGF0ZShpbnN0Lm9wdGlvbnMuZGF5U3RhdHVzKSkgKyAnXCInIDogJycpICsgJz4nICtcblx0XHRcdFx0XHRcdChpbnN0Lm9wdGlvbnMuc2hvd090aGVyTW9udGhzIHx8IGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoID9cblx0XHRcdFx0XHRcdGRhdGVJbmZvLmNvbnRlbnQgfHwgZHJhd0RhdGUuZGF5KCkgOiAnJiMxNjA7JykgK1xuXHRcdFx0XHRcdFx0KHNlbGVjdGFibGUgPyAnPC9hPicgOiAnPC9zcGFuPicpKTtcblx0XHRcdFx0XHRkcmF3RGF0ZS5hZGQoMSwgJ2QnKTtcblx0XHRcdFx0XHRqZCsrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHdlZWtzICs9IHRoaXMuX3ByZXBhcmUocmVuZGVyZXIud2VlaywgaW5zdCkucmVwbGFjZSgvXFx7ZGF5c1xcfS9nLCBkYXlzKS5cblx0XHRcdFx0XHRyZXBsYWNlKC9cXHt3ZWVrT2ZZZWFyXFx9L2csIHdlZWtPZlllYXIpO1xuXHRcdFx0fVxuXHRcdFx0dmFyIG1vbnRoSGVhZGVyID0gdGhpcy5fcHJlcGFyZShyZW5kZXJlci5tb250aCwgaW5zdCkubWF0Y2goL1xce21vbnRoSGVhZGVyKDpbXlxcfV0rKT9cXH0vKTtcblx0XHRcdG1vbnRoSGVhZGVyID0gKG1vbnRoSGVhZGVyWzBdLmxlbmd0aCA8PSAxMyA/ICdNTSB5eXl5JyA6XG5cdFx0XHRcdG1vbnRoSGVhZGVyWzBdLnN1YnN0cmluZygxMywgbW9udGhIZWFkZXJbMF0ubGVuZ3RoIC0gMSkpO1xuXHRcdFx0bW9udGhIZWFkZXIgPSAoZmlyc3QgPyB0aGlzLl9nZW5lcmF0ZU1vbnRoU2VsZWN0aW9uKFxuXHRcdFx0XHRpbnN0LCB5ZWFyLCBtb250aCwgbWluRGF0ZSwgbWF4RGF0ZSwgbW9udGhIZWFkZXIsIGNhbGVuZGFyLCByZW5kZXJlcikgOlxuXHRcdFx0XHRjYWxlbmRhci5mb3JtYXREYXRlKG1vbnRoSGVhZGVyLCBjYWxlbmRhci5uZXdEYXRlKHllYXIsIG1vbnRoLCBjYWxlbmRhci5taW5EYXkpKSk7XG5cdFx0XHR2YXIgd2Vla0hlYWRlciA9IHRoaXMuX3ByZXBhcmUocmVuZGVyZXIud2Vla0hlYWRlciwgaW5zdCkuXG5cdFx0XHRcdHJlcGxhY2UoL1xce2RheXNcXH0vZywgdGhpcy5fZ2VuZXJhdGVEYXlIZWFkZXJzKGluc3QsIGNhbGVuZGFyLCByZW5kZXJlcikpO1xuXHRcdFx0cmV0dXJuIHRoaXMuX3ByZXBhcmUocmVuZGVyZXIubW9udGgsIGluc3QpLnJlcGxhY2UoL1xce21vbnRoSGVhZGVyKDpbXlxcfV0rKT9cXH0vZywgbW9udGhIZWFkZXIpLlxuXHRcdFx0XHRyZXBsYWNlKC9cXHt3ZWVrSGVhZGVyXFx9L2csIHdlZWtIZWFkZXIpLnJlcGxhY2UoL1xce3dlZWtzXFx9L2csIHdlZWtzKTtcblx0XHR9LFxuXG5cdFx0LyoqIEdlbmVyYXRlIHRoZSBIVE1MIGZvciB0aGUgZGF5IGhlYWRlcnMuXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIGN1cnJlbnQgY2FsZW5kYXIuXG5cdFx0XHRAcGFyYW0gcmVuZGVyZXIge29iamVjdH0gVGhlIHJlbmRlcmluZyB0ZW1wbGF0ZXMuXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IEEgd2VlaydzIHdvcnRoIG9mIGRheSBoZWFkZXJzLiAqL1xuXHRcdF9nZW5lcmF0ZURheUhlYWRlcnM6IGZ1bmN0aW9uKGluc3QsIGNhbGVuZGFyLCByZW5kZXJlcikge1xuXHRcdFx0dmFyIGZpcnN0RGF5ID0gaW5zdC5vcHRpb25zLmZpcnN0RGF5O1xuXHRcdFx0Zmlyc3REYXkgPSAoZmlyc3REYXkgPT0gbnVsbCA/IGNhbGVuZGFyLmxvY2FsLmZpcnN0RGF5IDogZmlyc3REYXkpO1xuXHRcdFx0dmFyIGhlYWRlciA9ICcnO1xuXHRcdFx0Zm9yICh2YXIgZGF5ID0gMDsgZGF5IDwgY2FsZW5kYXIuZGF5c0luV2VlaygpOyBkYXkrKykge1xuXHRcdFx0XHR2YXIgZG93ID0gKGRheSArIGZpcnN0RGF5KSAlIGNhbGVuZGFyLmRheXNJbldlZWsoKTtcblx0XHRcdFx0aGVhZGVyICs9IHRoaXMuX3ByZXBhcmUocmVuZGVyZXIuZGF5SGVhZGVyLCBpbnN0KS5yZXBsYWNlKC9cXHtkYXlcXH0vZyxcblx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCInICsgdGhpcy5fY3VyRG9XQ2xhc3MgKyBkb3cgKyAnXCIgdGl0bGU9XCInICtcblx0XHRcdFx0XHRjYWxlbmRhci5sb2NhbC5kYXlOYW1lc1tkb3ddICsgJ1wiPicgKyBjYWxlbmRhci5sb2NhbC5kYXlOYW1lc01pbltkb3ddICsgJzwvc3Bhbj4nKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBoZWFkZXI7XG5cdFx0fSxcblxuXHRcdC8qKiBHZW5lcmF0ZSBzZWxlY3Rpb24gY29udHJvbHMgZm9yIG1vbnRoLlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIHllYXIgdG8gZ2VuZXJhdGUuXG5cdFx0XHRAcGFyYW0gbW9udGgge251bWJlcn0gVGhlIG1vbnRoIHRvIGdlbmVyYXRlLlxuXHRcdFx0QHBhcmFtIG1pbkRhdGUge0NEYXRlfSBUaGUgbWluaW11bSBkYXRlIGFsbG93ZWQuXG5cdFx0XHRAcGFyYW0gbWF4RGF0ZSB7Q0RhdGV9IFRoZSBtYXhpbXVtIGRhdGUgYWxsb3dlZC5cblx0XHRcdEBwYXJhbSBtb250aEhlYWRlciB7c3RyaW5nfSBUaGUgbW9udGgveWVhciBmb3JtYXQuXG5cdFx0XHRAcGFyYW0gY2FsZW5kYXIge0Jhc2VDYWxlbmRhcn0gVGhlIGN1cnJlbnQgY2FsZW5kYXIuXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBtb250aCBzZWxlY3Rpb24gY29udGVudC4gKi9cblx0XHRfZ2VuZXJhdGVNb250aFNlbGVjdGlvbjogZnVuY3Rpb24oaW5zdCwgeWVhciwgbW9udGgsIG1pbkRhdGUsIG1heERhdGUsIG1vbnRoSGVhZGVyLCBjYWxlbmRhcikge1xuXHRcdFx0aWYgKCFpbnN0Lm9wdGlvbnMuY2hhbmdlTW9udGgpIHtcblx0XHRcdFx0cmV0dXJuIGNhbGVuZGFyLmZvcm1hdERhdGUobW9udGhIZWFkZXIsIGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbW9udGgsIDEpKTtcblx0XHRcdH1cblx0XHRcdC8vIE1vbnRoc1xuXHRcdFx0dmFyIG1vbnRoTmFtZXMgPSBjYWxlbmRhci5sb2NhbFtcblx0XHRcdFx0J21vbnRoTmFtZXMnICsgKG1vbnRoSGVhZGVyLm1hdGNoKC9tbS9pKSA/ICcnIDogJ1Nob3J0JyldO1xuXHRcdFx0dmFyIGh0bWwgPSBtb250aEhlYWRlci5yZXBsYWNlKC9tKy9pLCAnXFxcXHgyRScpLnJlcGxhY2UoL3krL2ksICdcXFxceDJGJyk7XG5cdFx0XHR2YXIgc2VsZWN0b3IgPSAnPHNlbGVjdCBjbGFzcz1cIicgKyB0aGlzLl9tb250aFllYXJDbGFzcyArXG5cdFx0XHRcdCdcIiB0aXRsZT1cIicgKyBpbnN0Lm9wdGlvbnMubW9udGhTdGF0dXMgKyAnXCI+Jztcblx0XHRcdHZhciBtYXhNb250aCA9IGNhbGVuZGFyLm1vbnRoc0luWWVhcih5ZWFyKSArIGNhbGVuZGFyLm1pbk1vbnRoO1xuXHRcdFx0Zm9yICh2YXIgbSA9IGNhbGVuZGFyLm1pbk1vbnRoOyBtIDwgbWF4TW9udGg7IG0rKykge1xuXHRcdFx0XHRpZiAoKCFtaW5EYXRlIHx8IGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbSxcblx0XHRcdFx0XHRcdGNhbGVuZGFyLmRheXNJbk1vbnRoKHllYXIsIG0pIC0gMSArIGNhbGVuZGFyLm1pbkRheSkuXG5cdFx0XHRcdFx0XHRjb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKSAmJlxuXHRcdFx0XHRcdFx0KCFtYXhEYXRlIHx8IGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbSwgY2FsZW5kYXIubWluRGF5KS5cblx0XHRcdFx0XHRcdGNvbXBhcmVUbyhtYXhEYXRlKSAhPT0gKzEpKSB7XG5cdFx0XHRcdFx0c2VsZWN0b3IgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgbSArICcvJyArIHllYXIgKyAnXCInICtcblx0XHRcdFx0XHRcdChtb250aCA9PT0gbSA/ICcgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJyA6ICcnKSArICc+JyArXG5cdFx0XHRcdFx0XHRtb250aE5hbWVzW20gLSBjYWxlbmRhci5taW5Nb250aF0gKyAnPC9vcHRpb24+Jztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0c2VsZWN0b3IgKz0gJzwvc2VsZWN0Pic7XG5cdFx0XHRodG1sID0gaHRtbC5yZXBsYWNlKC9cXFxceDJFLywgc2VsZWN0b3IpO1xuXHRcdFx0Ly8gWWVhcnNcblx0XHRcdHZhciB5ZWFyUmFuZ2UgPSBpbnN0Lm9wdGlvbnMueWVhclJhbmdlO1xuXHRcdFx0aWYgKHllYXJSYW5nZSA9PT0gJ2FueScpIHtcblx0XHRcdFx0c2VsZWN0b3IgPSAnPHNlbGVjdCBjbGFzcz1cIicgKyB0aGlzLl9tb250aFllYXJDbGFzcyArICcgJyArIHRoaXMuX2FueVllYXJDbGFzcyArXG5cdFx0XHRcdFx0J1wiIHRpdGxlPVwiJyArIGluc3Qub3B0aW9ucy55ZWFyU3RhdHVzICsgJ1wiPicgK1xuXHRcdFx0XHRcdCc8b3B0aW9uPicgKyB5ZWFyICsgJzwvb3B0aW9uPjwvc2VsZWN0PicgK1xuXHRcdFx0XHRcdCc8aW5wdXQgY2xhc3M9XCInICsgdGhpcy5fbW9udGhZZWFyQ2xhc3MgKyAnICcgKyB0aGlzLl9jdXJNb250aENsYXNzICtcblx0XHRcdFx0XHRtb250aCArICdcIiB2YWx1ZT1cIicgKyB5ZWFyICsgJ1wiPic7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0eWVhclJhbmdlID0geWVhclJhbmdlLnNwbGl0KCc6Jyk7XG5cdFx0XHRcdHZhciB0b2RheVllYXIgPSBjYWxlbmRhci50b2RheSgpLnllYXIoKTtcblx0XHRcdFx0dmFyIHN0YXJ0ID0gKHllYXJSYW5nZVswXS5tYXRjaCgnY1srLV0uKicpID8geWVhciArIHBhcnNlSW50KHllYXJSYW5nZVswXS5zdWJzdHJpbmcoMSksIDEwKSA6XG5cdFx0XHRcdFx0KCh5ZWFyUmFuZ2VbMF0ubWF0Y2goJ1srLV0uKicpID8gdG9kYXlZZWFyIDogMCkgKyBwYXJzZUludCh5ZWFyUmFuZ2VbMF0sIDEwKSkpO1xuXHRcdFx0XHR2YXIgZW5kID0gKHllYXJSYW5nZVsxXS5tYXRjaCgnY1srLV0uKicpID8geWVhciArIHBhcnNlSW50KHllYXJSYW5nZVsxXS5zdWJzdHJpbmcoMSksIDEwKSA6XG5cdFx0XHRcdFx0KCh5ZWFyUmFuZ2VbMV0ubWF0Y2goJ1srLV0uKicpID8gdG9kYXlZZWFyIDogMCkgKyBwYXJzZUludCh5ZWFyUmFuZ2VbMV0sIDEwKSkpO1xuXHRcdFx0XHRzZWxlY3RvciA9ICc8c2VsZWN0IGNsYXNzPVwiJyArIHRoaXMuX21vbnRoWWVhckNsYXNzICtcblx0XHRcdFx0XHQnXCIgdGl0bGU9XCInICsgaW5zdC5vcHRpb25zLnllYXJTdGF0dXMgKyAnXCI+Jztcblx0XHRcdFx0c3RhcnQgPSBjYWxlbmRhci5uZXdEYXRlKHN0YXJ0ICsgMSwgY2FsZW5kYXIuZmlyc3RNb250aCwgY2FsZW5kYXIubWluRGF5KS5hZGQoLTEsICdkJyk7XG5cdFx0XHRcdGVuZCA9IGNhbGVuZGFyLm5ld0RhdGUoZW5kLCBjYWxlbmRhci5maXJzdE1vbnRoLCBjYWxlbmRhci5taW5EYXkpO1xuXHRcdFx0XHR2YXIgYWRkWWVhciA9IGZ1bmN0aW9uKHksIHlEaXNwbGF5KSB7XG5cdFx0XHRcdFx0aWYgKHkgIT09IDAgfHwgY2FsZW5kYXIuaGFzWWVhclplcm8pIHtcblx0XHRcdFx0XHRcdHNlbGVjdG9yICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArXG5cdFx0XHRcdFx0XHRcdE1hdGgubWluKG1vbnRoLCBjYWxlbmRhci5tb250aHNJblllYXIoeSkgLSAxICsgY2FsZW5kYXIubWluTW9udGgpICtcblx0XHRcdFx0XHRcdFx0Jy8nICsgeSArICdcIicgKyAoeWVhciA9PT0geSA/ICcgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJyA6ICcnKSArICc+JyArXG5cdFx0XHRcdFx0XHRcdCh5RGlzcGxheSB8fCB5KSArICc8L29wdGlvbj4nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKHN0YXJ0LnRvSkQoKSA8IGVuZC50b0pEKCkpIHtcblx0XHRcdFx0XHRzdGFydCA9IChtaW5EYXRlICYmIG1pbkRhdGUuY29tcGFyZVRvKHN0YXJ0KSA9PT0gKzEgPyBtaW5EYXRlIDogc3RhcnQpLnllYXIoKTtcblx0XHRcdFx0XHRlbmQgPSAobWF4RGF0ZSAmJiBtYXhEYXRlLmNvbXBhcmVUbyhlbmQpID09PSAtMSA/IG1heERhdGUgOiBlbmQpLnllYXIoKTtcblx0XHRcdFx0XHR2YXIgZWFybGllckxhdGVyID0gTWF0aC5mbG9vcigoZW5kIC0gc3RhcnQpIC8gMik7XG5cdFx0XHRcdFx0aWYgKCFtaW5EYXRlIHx8IG1pbkRhdGUueWVhcigpIDwgc3RhcnQpIHtcblx0XHRcdFx0XHRcdGFkZFllYXIoc3RhcnQgLSBlYXJsaWVyTGF0ZXIsIGluc3Qub3B0aW9ucy5lYXJsaWVyVGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGZvciAodmFyIHkgPSBzdGFydDsgeSA8PSBlbmQ7IHkrKykge1xuXHRcdFx0XHRcdFx0YWRkWWVhcih5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCFtYXhEYXRlIHx8IG1heERhdGUueWVhcigpID4gZW5kKSB7XG5cdFx0XHRcdFx0XHRhZGRZZWFyKGVuZCArIGVhcmxpZXJMYXRlciwgaW5zdC5vcHRpb25zLmxhdGVyVGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHN0YXJ0ID0gKG1heERhdGUgJiYgbWF4RGF0ZS5jb21wYXJlVG8oc3RhcnQpID09PSAtMSA/IG1heERhdGUgOiBzdGFydCkueWVhcigpO1xuXHRcdFx0XHRcdGVuZCA9IChtaW5EYXRlICYmIG1pbkRhdGUuY29tcGFyZVRvKGVuZCkgPT09ICsxID8gbWluRGF0ZSA6IGVuZCkueWVhcigpO1xuXHRcdFx0XHRcdHZhciBlYXJsaWVyTGF0ZXIgPSBNYXRoLmZsb29yKChzdGFydCAtIGVuZCkgLyAyKTtcblx0XHRcdFx0XHRpZiAoIW1heERhdGUgfHwgbWF4RGF0ZS55ZWFyKCkgPiBzdGFydCkge1xuXHRcdFx0XHRcdFx0YWRkWWVhcihzdGFydCArIGVhcmxpZXJMYXRlciwgaW5zdC5vcHRpb25zLmVhcmxpZXJUZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Zm9yICh2YXIgeSA9IHN0YXJ0OyB5ID49IGVuZDsgeS0tKSB7XG5cdFx0XHRcdFx0XHRhZGRZZWFyKHkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIW1pbkRhdGUgfHwgbWluRGF0ZS55ZWFyKCkgPCBlbmQpIHtcblx0XHRcdFx0XHRcdGFkZFllYXIoZW5kIC0gZWFybGllckxhdGVyLCBpbnN0Lm9wdGlvbnMubGF0ZXJUZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c2VsZWN0b3IgKz0gJzwvc2VsZWN0Pic7XG5cdFx0XHR9XG5cdFx0XHRodG1sID0gaHRtbC5yZXBsYWNlKC9cXFxceDJGLywgc2VsZWN0b3IpO1xuXHRcdFx0cmV0dXJuIGh0bWw7XG5cdFx0fSxcblxuXHRcdC8qKiBQcmVwYXJlIGEgcmVuZGVyIHRlbXBsYXRlIGZvciB1c2UuXG5cdFx0XHRFeGNsdWRlIHBvcHVwL2lubGluZSBzZWN0aW9ucyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZS5cblx0XHRcdExvY2FsaXNlIHRleHQgb2YgdGhlIGZvcm06IHtsMTBuOm5hbWV9LlxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSB0ZXh0IHRvIGxvY2FsaXNlLlxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBsb2NhbGlzZWQgdGV4dC4gKi9cblx0XHRfcHJlcGFyZTogZnVuY3Rpb24odGV4dCwgaW5zdCkge1xuXHRcdFx0dmFyIHJlcGxhY2VTZWN0aW9uID0gZnVuY3Rpb24odHlwZSwgcmV0YWluKSB7XG5cdFx0XHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRcdFx0dmFyIHN0YXJ0ID0gdGV4dC5pbmRleE9mKCd7JyArIHR5cGUgKyAnOnN0YXJ0fScpO1xuXHRcdFx0XHRcdGlmIChzdGFydCA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dmFyIGVuZCA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0KS5pbmRleE9mKCd7JyArIHR5cGUgKyAnOmVuZH0nKTtcblx0XHRcdFx0XHRpZiAoZW5kID4gLTEpIHtcblx0XHRcdFx0XHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBzdGFydCkgK1xuXHRcdFx0XHRcdFx0XHQocmV0YWluID8gdGV4dC5zdWJzdHIoc3RhcnQgKyB0eXBlLmxlbmd0aCArIDgsIGVuZCAtIHR5cGUubGVuZ3RoIC0gOCkgOiAnJykgK1xuXHRcdFx0XHRcdFx0XHR0ZXh0LnN1YnN0cmluZyhzdGFydCArIGVuZCArIHR5cGUubGVuZ3RoICsgNik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0cmVwbGFjZVNlY3Rpb24oJ2lubGluZScsIGluc3QuaW5saW5lKTtcblx0XHRcdHJlcGxhY2VTZWN0aW9uKCdwb3B1cCcsICFpbnN0LmlubGluZSk7XG5cdFx0XHR2YXIgcGF0dGVybiA9IC9cXHtsMTBuOihbXlxcfV0rKVxcfS87XG5cdFx0XHR2YXIgbWF0Y2hlcyA9IG51bGw7XG5cdFx0XHR3aGlsZSAobWF0Y2hlcyA9IHBhdHRlcm4uZXhlYyh0ZXh0KSkge1xuXHRcdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKG1hdGNoZXNbMF0sIGluc3Qub3B0aW9uc1ttYXRjaGVzWzFdXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH0pO1xuXG5cdHZhciBwbHVnaW4gPSAkLmNhbGVuZGFyc1BpY2tlcjsgLy8gU2luZ2xldG9uIGluc3RhbmNlXG5cblx0JChmdW5jdGlvbigpIHtcblx0XHQkKGRvY3VtZW50KS5vbignbW91c2Vkb3duLicgKyBwbHVnaW5OYW1lLCBwbHVnaW4uX2NoZWNrRXh0ZXJuYWxDbGljaykuXG5cdFx0XHRvbigncmVzaXplLicgKyBwbHVnaW5OYW1lLCBmdW5jdGlvbigpIHsgcGx1Z2luLmhpZGUocGx1Z2luLmN1ckluc3QpOyB9KTtcblx0fSk7XG5cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBDYWxlbmRhcnMgZGF0ZSBwaWNrZXIgZm9yIGpRdWVyeSB2Mi4wLjEuXHJcbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgQXVndXN0IDIwMDkuXHJcbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXHJcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xyXG5cclxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxyXG5cclxuXHR2YXIgcGx1Z2luTmFtZSA9ICdjYWxlbmRhcnNQaWNrZXInO1xyXG5cclxuXHJcblx0LyoqIENyZWF0ZSB0aGUgY2FsZW5kYXJzIGRhdGVwaWNrZXIgcGx1Z2luLlxyXG5cdFx0PHA+U2V0cyBhbiBpbnB1dCBmaWVsZCB0byBwb3B1cCBhIGNhbGVuZGFyIGZvciBkYXRlIGVudHJ5LFxyXG5cdFx0XHRvciBhIDxjb2RlPmRpdjwvY29kZT4gb3IgPGNvZGU+c3BhbjwvY29kZT4gdG8gc2hvdyBhbiBpbmxpbmUgY2FsZW5kYXIuPC9wPlxyXG5cdFx0PHA+RXhwZWN0cyBIVE1MIGxpa2U6PC9wPlxyXG5cdFx0PHByZT4mbHQ7aW5wdXQgdHlwZT1cInRleHRcIj4gb3IgJmx0O2Rpdj4mbHQ7L2Rpdj48L3ByZT5cclxuXHRcdDxwPlByb3ZpZGUgaW5saW5lIGNvbmZpZ3VyYXRpb24gbGlrZTo8L3A+XHJcblx0XHQ8cHJlPiZsdDtpbnB1dCB0eXBlPVwidGV4dFwiIGRhdGEtY2FsZW5kYXJzUGlja2VyPVwibmFtZTogJ3ZhbHVlJ1wiLz48L3ByZT5cclxuXHQgXHRAY2xhc3MgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRAYXVnbWVudHMgSlFQbHVnaW5cclxuXHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmNhbGVuZGFyc1BpY2tlcigpXHJcbiAkKHNlbGVjdG9yKS5jYWxlbmRhcnNQaWNrZXIoe21pbkRhdGU6IDAsIG1heERhdGU6ICcrMW0gKzF3J30pICovXHJcblx0JC5KUVBsdWdpbi5jcmVhdGVQbHVnaW4oe1xyXG5cdFxyXG5cdFx0LyoqIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4uXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXIgKi9cclxuXHRcdG5hbWU6IHBsdWdpbk5hbWUsXHJcblx0XHRcclxuXHRcdC8qKiBEZWZhdWx0IHRlbXBsYXRlIGZvciBnZW5lcmF0aW5nIGEgZGF0ZXBpY2tlci5cclxuXHRcdFx0SW5zZXJ0IGFueXdoZXJlOlxyXG5cdFx0XHQ8dWw+XHJcblx0XHRcdDxsaT4ne2wxMG46bmFtZX0nIHRvIGluc2VydCBsb2NhbGlzZWQgdmFsdWUgZm9yIG5hbWUsPC9saT5cclxuXHRcdFx0PGxpPid7bGluazpuYW1lfScgdG8gaW5zZXJ0IGEgbGluayB0cmlnZ2VyIGZvciBjb21tYW5kIG5hbWUsPC9saT5cclxuXHRcdFx0PGxpPid7YnV0dG9uOm5hbWV9JyB0byBpbnNlcnQgYSBidXR0b24gdHJpZ2dlciBmb3IgY29tbWFuZCBuYW1lLDwvbGk+XHJcblx0XHRcdDxsaT4ne3BvcHVwOnN0YXJ0fS4uLntwb3B1cDplbmR9JyB0byBtYXJrIGEgc2VjdGlvbiBmb3IgaW5jbHVzaW9uIGluIGEgcG9wdXAgZGF0ZXBpY2tlciBvbmx5LDwvbGk+XHJcblx0XHRcdDxsaT4ne2lubGluZTpzdGFydH0uLi57aW5saW5lOmVuZH0nIHRvIG1hcmsgYSBzZWN0aW9uIGZvciBpbmNsdXNpb24gaW4gYW4gaW5saW5lIGRhdGVwaWNrZXIgb25seS48L2xpPlxyXG5cdFx0XHQ8L3VsPlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcm9wZXJ0eSBwaWNrZXIge3N0cmluZ30gT3ZlcmFsbCBzdHJ1Y3R1cmU6ICd7bW9udGhzfScgdG8gaW5zZXJ0IGNhbGVuZGFyIG1vbnRocy5cclxuXHRcdFx0QHByb3BlcnR5IG1vbnRoUm93IHtzdHJpbmd9IE9uZSByb3cgb2YgbW9udGhzOiAne21vbnRoc30nIHRvIGluc2VydCBjYWxlbmRhciBtb250aHMuXHJcblx0XHRcdEBwcm9wZXJ0eSBtb250aCB7c3RyaW5nfSBBIHNpbmdsZSBtb250aDogJ3ttb250aEhlYWRlcjxlbT46ZGF0ZUZvcm1hdDwvZW0+fScgdG8gaW5zZXJ0IHRoZSBtb250aCBoZWFkZXIgLVxyXG5cdFx0XHRcdFx0XHQ8ZW0+ZGF0ZUZvcm1hdDwvZW0+IGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byAnTU0geXl5eScsXHJcblx0XHRcdFx0XHRcdCd7d2Vla0hlYWRlcn0nIHRvIGluc2VydCBhIHdlZWsgaGVhZGVyLCAne3dlZWtzfScgdG8gaW5zZXJ0IHRoZSBtb250aCdzIHdlZWtzLlxyXG5cdFx0XHRAcHJvcGVydHkgd2Vla0hlYWRlciB7c3RyaW5nfSBBIHdlZWsgaGVhZGVyOiAne2RheXN9JyB0byBpbnNlcnQgaW5kaXZpZHVhbCBkYXkgbmFtZXMuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlIZWFkZXIge3N0cmluZ30gSW5kaXZpZHVhbCBkYXkgaGVhZGVyOiAne2RheX0nIHRvIGluc2VydCBkYXkgbmFtZS5cclxuXHRcdFx0QHByb3BlcnR5IHdlZWsge3N0cmluZ30gT25lIHdlZWsgb2YgdGhlIG1vbnRoOiAne2RheXN9JyB0byBpbnNlcnQgdGhlIHdlZWsncyBkYXlzLFxyXG5cdFx0XHRcdFx0XHQne3dlZWtPZlllYXJ9JyB0byBpbnNlcnQgd2VlayBvZiB5ZWFyLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5IHtzdHJpbmd9IEFuIGluZGl2aWR1YWwgZGF5OiAne2RheX0nIHRvIGluc2VydCBkYXkgdmFsdWUuXHJcblx0XHRcdEBwcm9wZXJ0eSBtb250aFNlbGVjdG9yIHtzdHJpbmd9IGpRdWVyeSBzZWxlY3RvciwgcmVsYXRpdmUgdG8gcGlja2VyLCBmb3IgYSBzaW5nbGUgbW9udGguXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlTZWxlY3RvciB7c3RyaW5nfSBqUXVlcnkgc2VsZWN0b3IsIHJlbGF0aXZlIHRvIHBpY2tlciwgZm9yIGluZGl2aWR1YWwgZGF5cy5cclxuXHRcdFx0QHByb3BlcnR5IHJ0bENsYXNzIHtzdHJpbmd9IENsYXNzIGZvciByaWdodC10by1sZWZ0IChSVEwpIGxhbmd1YWdlcy5cclxuXHRcdFx0QHByb3BlcnR5IG11bHRpQ2xhc3Mge3N0cmluZ30gQ2xhc3MgZm9yIG11bHRpLW1vbnRoIGRhdGVwaWNrZXJzLlxyXG5cdFx0XHRAcHJvcGVydHkgZGVmYXVsdENsYXNzIHtzdHJpbmd9IENsYXNzIGZvciBzZWxlY3RhYmxlIGRhdGVzLlxyXG5cdFx0XHRAcHJvcGVydHkgc2VsZWN0ZWRDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgY3VycmVudGx5IHNlbGVjdGVkIGRhdGVzLlxyXG5cdFx0XHRAcHJvcGVydHkgaGlnaGxpZ2h0ZWRDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgaGlnaGxpZ2h0ZWQgZGF0ZXMuXHJcblx0XHRcdEBwcm9wZXJ0eSB0b2RheUNsYXNzIHtzdHJpbmd9IENsYXNzIGZvciB0b2RheS5cclxuXHRcdFx0QHByb3BlcnR5IG90aGVyTW9udGhDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgZGF5cyBmcm9tIG90aGVyIG1vbnRocy5cclxuXHRcdFx0QHByb3BlcnR5IHdlZWtlbmRDbGFzcyB7c3RyaW5nfSBDbGFzcyBmb3IgZGF5cyBvbiB3ZWVrZW5kcy5cclxuXHRcdFx0QHByb3BlcnR5IGNvbW1hbmRDbGFzcyB7c3RyaW5nfSBDbGFzcyBwcmVmaXggZm9yIGNvbW1hbmRzLlxyXG5cdFx0XHRAcHJvcGVydHkgY29tbWFuZEJ1dHRvbkNsYXNzIHtzdHJpbmd9IEV4dHJhIGNsYXNzKGVzKSBmb3IgY29tbWFuZHMgdGhhdCBhcmUgYnV0dG9ucy5cclxuXHRcdFx0QHByb3BlcnR5IGNvbW1hbmRMaW5rQ2xhc3Mge3N0cmluZ30gRXh0cmEgY2xhc3MoZXMpIGZvciBjb21tYW5kcyB0aGF0IGFyZSBsaW5rcy5cclxuXHRcdFx0QHByb3BlcnR5IGRpc2FibGVkQ2xhc3Mge3N0cmluZ30gQ2xhc3MgZm9yIGRpc2FibGVkIGNvbW1hbmRzLiAqL1xyXG5cdFx0ZGVmYXVsdFJlbmRlcmVyOiB7XHJcblx0XHRcdHBpY2tlcjogJzxkaXYgY2xhc3M9XCJjYWxlbmRhcnNcIj4nICtcclxuXHRcdFx0JzxkaXYgY2xhc3M9XCJjYWxlbmRhcnMtbmF2XCI+e2xpbms6cHJldn17bGluazp0b2RheX17bGluazpuZXh0fTwvZGl2Pnttb250aHN9JyArXHJcblx0XHRcdCd7cG9wdXA6c3RhcnR9PGRpdiBjbGFzcz1cImNhbGVuZGFycy1jdHJsXCI+e2xpbms6Y2xlYXJ9e2xpbms6Y2xvc2V9PC9kaXY+e3BvcHVwOmVuZH0nICtcclxuXHRcdFx0JzxkaXYgY2xhc3M9XCJjYWxlbmRhcnMtY2xlYXItZml4XCI+PC9kaXY+PC9kaXY+JyxcclxuXHRcdFx0bW9udGhSb3c6ICc8ZGl2IGNsYXNzPVwiY2FsZW5kYXJzLW1vbnRoLXJvd1wiPnttb250aHN9PC9kaXY+JyxcclxuXHRcdFx0bW9udGg6ICc8ZGl2IGNsYXNzPVwiY2FsZW5kYXJzLW1vbnRoXCI+PGRpdiBjbGFzcz1cImNhbGVuZGFycy1tb250aC1oZWFkZXJcIj57bW9udGhIZWFkZXJ9PC9kaXY+JyArXHJcblx0XHRcdCc8dGFibGU+PHRoZWFkPnt3ZWVrSGVhZGVyfTwvdGhlYWQ+PHRib2R5Pnt3ZWVrc308L3Rib2R5PjwvdGFibGU+PC9kaXY+JyxcclxuXHRcdFx0d2Vla0hlYWRlcjogJzx0cj57ZGF5c308L3RyPicsXHJcblx0XHRcdGRheUhlYWRlcjogJzx0aD57ZGF5fTwvdGg+JyxcclxuXHRcdFx0d2VlazogJzx0cj57ZGF5c308L3RyPicsXHJcblx0XHRcdGRheTogJzx0ZD57ZGF5fTwvdGQ+JyxcclxuXHRcdFx0bW9udGhTZWxlY3RvcjogJy5jYWxlbmRhcnMtbW9udGgnLFxyXG5cdFx0XHRkYXlTZWxlY3RvcjogJ3RkJyxcclxuXHRcdFx0cnRsQ2xhc3M6ICdjYWxlbmRhcnMtcnRsJyxcclxuXHRcdFx0bXVsdGlDbGFzczogJ2NhbGVuZGFycy1tdWx0aScsXHJcblx0XHRcdGRlZmF1bHRDbGFzczogJycsXHJcblx0XHRcdHNlbGVjdGVkQ2xhc3M6ICdjYWxlbmRhcnMtc2VsZWN0ZWQnLFxyXG5cdFx0XHRoaWdobGlnaHRlZENsYXNzOiAnY2FsZW5kYXJzLWhpZ2hsaWdodCcsXHJcblx0XHRcdHRvZGF5Q2xhc3M6ICdjYWxlbmRhcnMtdG9kYXknLFxyXG5cdFx0XHRvdGhlck1vbnRoQ2xhc3M6ICdjYWxlbmRhcnMtb3RoZXItbW9udGgnLFxyXG5cdFx0XHR3ZWVrZW5kQ2xhc3M6ICdjYWxlbmRhcnMtd2Vla2VuZCcsXHJcblx0XHRcdGNvbW1hbmRDbGFzczogJ2NhbGVuZGFycy1jbWQnLFxyXG5cdFx0XHRjb21tYW5kQnV0dG9uQ2xhc3M6ICcnLFxyXG5cdFx0XHRjb21tYW5kTGlua0NsYXNzOiAnJyxcclxuXHRcdFx0ZGlzYWJsZWRDbGFzczogJ2NhbGVuZGFycy1kaXNhYmxlZCdcclxuXHRcdH0sXHJcblx0XHJcblx0XHQvKiogQ29tbWFuZCBhY3Rpb25zIHRoYXQgbWF5IGJlIGFkZGVkIHRvIGEgbGF5b3V0IGJ5IG5hbWUuXHJcblx0XHRcdDx1bD5cclxuXHRcdFx0PGxpPnByZXYgLSBTaG93IHRoZSBwcmV2aW91cyBtb250aCAoYmFzZWQgb24gPGNvZGU+bW9udGhzVG9TdGVwPC9jb2RlPiBvcHRpb24pIC0gPGVtPlBhZ2VVcDwvZW0+PC9saT5cclxuXHRcdFx0PGxpPnByZXZKdW1wIC0gU2hvdyB0aGUgcHJldmlvdXMgeWVhciAoYmFzZWQgb24gPGNvZGU+bW9udGhzVG9KdW1wPC9jb2RlPiBvcHRpb24pIC0gPGVtPkN0cmwrUGFnZVVwPC9lbT48L2xpPlxyXG5cdFx0XHQ8bGk+bmV4dCAtIFNob3cgdGhlIG5leHQgbW9udGggKGJhc2VkIG9uIDxjb2RlPm1vbnRoc1RvU3RlcDwvY29kZT4gb3B0aW9uKSAtIDxlbT5QYWdlRG93bjwvZW0+PC9saT5cclxuXHRcdFx0PGxpPm5leHRKdW1wIC0gU2hvdyB0aGUgbmV4dCB5ZWFyIChiYXNlZCBvbiA8Y29kZT5tb250aHNUb0p1bXA8L2NvZGU+IG9wdGlvbikgLSA8ZW0+Q3RybCtQYWdlRG93bjwvZW0+PC9saT5cclxuXHRcdFx0PGxpPmN1cnJlbnQgLSBTaG93IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbW9udGggb3IgdG9kYXkncyBpZiBub25lIHNlbGVjdGVkIC0gPGVtPkN0cmwrSG9tZTwvZW0+PC9saT5cclxuXHRcdFx0PGxpPnRvZGF5IC0gU2hvdyB0b2RheSdzIG1vbnRoIC0gPGVtPkN0cmwrSG9tZTwvZW0+PC9saT5cclxuXHRcdFx0PGxpPmNsZWFyIC0gRXJhc2UgdGhlIGRhdGUgYW5kIGNsb3NlIHRoZSBkYXRlcGlja2VyIHBvcHVwIC0gPGVtPkN0cmwrRW5kPC9lbT48L2xpPlxyXG5cdFx0XHQ8bGk+Y2xvc2UgLSBDbG9zZSB0aGUgZGF0ZXBpY2tlciBwb3B1cCAtIDxlbT5Fc2M8L2VtPjwvbGk+XHJcblx0XHRcdDxsaT5wcmV2V2VlayAtIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgcHJldmlvdXMgd2VlayAtIDxlbT5DdHJsK1VwPC9lbT48L2xpPlxyXG5cdFx0XHQ8bGk+cHJldkRheSAtIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgcHJldmlvdXMgZGF5IC0gPGVtPkN0cmwrTGVmdDwvZW0+PC9saT5cclxuXHRcdFx0PGxpPm5leHREYXkgLSBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgZGF5IC0gPGVtPkN0cmwrUmlnaHQ8L2VtPjwvbGk+XHJcblx0XHRcdDxsaT5uZXh0V2VlayAtIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgbmV4dCB3ZWVrIC0gPGVtPkN0cmwrRG93bjwvZW0+PC9saT5cclxuXHRcdFx0PC91bD5cclxuXHRcdFx0VGhlIGNvbW1hbmQgbmFtZSBpcyB0aGUga2V5IG5hbWUgYW5kIGlzIHVzZWQgdG8gYWRkIHRoZSBjb21tYW5kIHRvIGEgbGF5b3V0XHJcblx0XHRcdHdpdGggJ3tidXR0b246bmFtZX0nIG9yICd7bGluazpuYW1lfScuIEVhY2ggaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcy5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJvcGVydHkgdGV4dCB7c3RyaW5nfSBUaGUgZmllbGQgaW4gdGhlIHJlZ2lvbmFsIHNldHRpbmdzIGZvciB0aGUgZGlzcGxheWVkIHRleHQuXHJcblx0XHRcdEBwcm9wZXJ0eSBzdGF0dXMge3N0cmluZ30gVGhlIGZpZWxkIGluIHRoZSByZWdpb25hbCBzZXR0aW5ncyBmb3IgdGhlIHN0YXR1cyB0ZXh0LlxyXG5cdFx0XHRAcHJvcGVydHkga2V5c3Ryb2tlIHtvYmplY3R9IFRoZSBrZXlzdHJva2UgdG8gdHJpZ2dlciB0aGUgYWN0aW9uLCB3aXRoIGF0dHJpYnV0ZXM6XHJcblx0XHRcdFx0PGNvZGU+a2V5Q29kZTwvY29kZT4ge251bWJlcn0gdGhlIGNvZGUgZm9yIHRoZSBrZXlzdHJva2UsXHJcblx0XHRcdFx0PGNvZGU+Y3RybEtleTwvY29kZT4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIDxlbT5DdHJsPC9lbT4gaXMgcmVxdWlyZWQsXHJcblx0XHRcdFx0PGNvZGU+YWx0S2V5PC9jb2RlPiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgPGVtPkFsdDwvZW0+IGlzIHJlcXVpcmVkLFxyXG5cdFx0XHRcdDxjb2RlPnNoaWZ0S2V5PC9jb2RlPiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgPGVtPlNoaWZ0PC9lbT4gaXMgcmVxdWlyZWQuXHJcblx0XHRcdEBwcm9wZXJ0eSBlbmFibGVkIHtDYWxlbmRhcnNQaWNrZXJDb21tYW5kRW5hYmxlZH0gVGhlIGZ1bmN0aW9uIHRoYXQgaW5kaWNhdGVzIHRoZSBjb21tYW5kIGlzIGVuYWJsZWQuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXRlIHtDYWxlbmRhcnNQaWNrZXJDb21tYW5kRGF0ZX0gVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgZGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBhY3Rpb24uXHJcblx0XHRcdEBwcm9wZXJ0eSBhY3Rpb24ge0NhbGVuZGFyc1BpY2tlckNvbW1hbmRBY3Rpb259IFRoZSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgdGhlIGFjdGlvbi4gKi9cclxuXHRcdGNvbW1hbmRzOiB7XHJcblx0XHRcdHByZXY6IHt0ZXh0OiAncHJldlRleHQnLCBzdGF0dXM6ICdwcmV2U3RhdHVzJywgLy8gUHJldmlvdXMgbW9udGhcclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzM30sIC8vIFBhZ2UgdXBcclxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuY3VyTWluRGF0ZSgpO1xyXG5cdFx0XHRcdFx0cmV0dXJuICghbWluRGF0ZSB8fCBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cclxuXHRcdFx0XHRcdFx0YWRkKDEgLSBpbnN0Lm9wdGlvbnMubW9udGhzVG9TdGVwIC0gaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKS5cclxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpLmFkZCgtMSwgJ2QnKS5jb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKTsgfSxcclxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXHJcblx0XHRcdFx0XHRcdGFkZCgtaW5zdC5vcHRpb25zLm1vbnRoc1RvU3RlcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXHJcblx0XHRcdFx0XHRcdGRheShpbnN0Lm9wdGlvbnMuY2FsZW5kYXIubWluRGF5KTsgfSxcclxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHBsdWdpbi5jaGFuZ2VNb250aCh0aGlzLCAtaW5zdC5vcHRpb25zLm1vbnRoc1RvU3RlcCk7IH1cclxuXHRcdFx0fSxcclxuXHRcdFx0cHJldkp1bXA6IHt0ZXh0OiAncHJldkp1bXBUZXh0Jywgc3RhdHVzOiAncHJldkp1bXBTdGF0dXMnLCAvLyBQcmV2aW91cyB5ZWFyXHJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzMsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgUGFnZSB1cFxyXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XHJcblx0XHRcdFx0XHRyZXR1cm4gKCFtaW5EYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxyXG5cdFx0XHRcdFx0XHRhZGQoMSAtIGluc3Qub3B0aW9ucy5tb250aHNUb0p1bXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxyXG5cdFx0XHRcdFx0XHRkYXkoaW5zdC5vcHRpb25zLmNhbGVuZGFyLm1pbkRheSkuYWRkKC0xLCAnZCcpLmNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpOyB9LFxyXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHJldHVybiBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cclxuXHRcdFx0XHRcdFx0YWRkKC1pbnN0Lm9wdGlvbnMubW9udGhzVG9KdW1wIC0gaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKS5cclxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpOyB9LFxyXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkge1xyXG5cdFx0XHRcdFx0cGx1Z2luLmNoYW5nZU1vbnRoKHRoaXMsIC1pbnN0Lm9wdGlvbnMubW9udGhzVG9KdW1wKTsgfVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRuZXh0OiB7dGV4dDogJ25leHRUZXh0Jywgc3RhdHVzOiAnbmV4dFN0YXR1cycsIC8vIE5leHQgbW9udGhcclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzNH0sIC8vIFBhZ2UgZG93blxyXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcclxuXHRcdFx0XHRcdHJldHVybiAoIW1heERhdGUgfHwgaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXHJcblx0XHRcdFx0XHRcdGFkZChpbnN0Lm9wdGlvbnMubW9udGhzVG9TdGVwIC0gaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKS5cclxuXHRcdFx0XHRcdFx0ZGF5KGluc3Qub3B0aW9ucy5jYWxlbmRhci5taW5EYXkpLmNvbXBhcmVUbyhtYXhEYXRlKSAhPT0gKzEpOyB9LFxyXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHJldHVybiBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cclxuXHRcdFx0XHRcdFx0YWRkKGluc3Qub3B0aW9ucy5tb250aHNUb1N0ZXAgLSBpbnN0Lm9wdGlvbnMubW9udGhzT2Zmc2V0LCAnbScpLlxyXG5cdFx0XHRcdFx0XHRkYXkoaW5zdC5vcHRpb25zLmNhbGVuZGFyLm1pbkRheSk7IH0sXHJcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHRwbHVnaW4uY2hhbmdlTW9udGgodGhpcywgaW5zdC5vcHRpb25zLm1vbnRoc1RvU3RlcCk7IH1cclxuXHRcdFx0fSxcclxuXHRcdFx0bmV4dEp1bXA6IHt0ZXh0OiAnbmV4dEp1bXBUZXh0Jywgc3RhdHVzOiAnbmV4dEp1bXBTdGF0dXMnLCAvLyBOZXh0IHllYXJcclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzNCwgY3RybEtleTogdHJ1ZX0sIC8vIEN0cmwgKyBQYWdlIGRvd25cclxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XHJcblx0XHRcdFx0XHRyZXR1cm4gKCFtYXhEYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxyXG5cdFx0XHRcdFx0XHRhZGQoaW5zdC5vcHRpb25zLm1vbnRoc1RvSnVtcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXHJcblx0XHRcdFx0XHRcdGRheShpbnN0Lm9wdGlvbnMuY2FsZW5kYXIubWluRGF5KS5jb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKTtcdH0sXHJcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxyXG5cdFx0XHRcdFx0XHRhZGQoaW5zdC5vcHRpb25zLm1vbnRoc1RvSnVtcCAtIGluc3Qub3B0aW9ucy5tb250aHNPZmZzZXQsICdtJykuXHJcblx0XHRcdFx0XHRcdGRheShpbnN0Lm9wdGlvbnMuY2FsZW5kYXIubWluRGF5KTsgfSxcclxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHBsdWdpbi5jaGFuZ2VNb250aCh0aGlzLCBpbnN0Lm9wdGlvbnMubW9udGhzVG9KdW1wKTsgfVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjdXJyZW50OiB7dGV4dDogJ2N1cnJlbnRUZXh0Jywgc3RhdHVzOiAnY3VycmVudFN0YXR1cycsIC8vIEN1cnJlbnQgbW9udGhcclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzNiwgY3RybEtleTogdHJ1ZX0sIC8vIEN0cmwgKyBIb21lXHJcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkge1xyXG5cdFx0XHRcdFx0dmFyIG1pbkRhdGUgPSBpbnN0LmN1ck1pbkRhdGUoKTtcclxuXHRcdFx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcclxuXHRcdFx0XHRcdHZhciBjdXJEYXRlID0gaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpO1xyXG5cdFx0XHRcdFx0cmV0dXJuICghbWluRGF0ZSB8fCBjdXJEYXRlLmNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpICYmXHJcblx0XHRcdFx0XHRcdCghbWF4RGF0ZSB8fCBjdXJEYXRlLmNvbXBhcmVUbyhtYXhEYXRlKSAhPT0gKzEpOyB9LFxyXG5cdFx0XHRcdGRhdGU6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHJldHVybiBpbnN0LnNlbGVjdGVkRGF0ZXNbMF0gfHwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCk7IH0sXHJcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHR2YXIgY3VyRGF0ZSA9IGluc3Quc2VsZWN0ZWREYXRlc1swXSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKTtcclxuXHRcdFx0XHRcdHBsdWdpbi5zaG93TW9udGgodGhpcywgY3VyRGF0ZS55ZWFyKCksIGN1ckRhdGUubW9udGgoKSk7IH1cclxuXHRcdFx0fSxcclxuXHRcdFx0dG9kYXk6IHt0ZXh0OiAndG9kYXlUZXh0Jywgc3RhdHVzOiAndG9kYXlTdGF0dXMnLCAvLyBUb2RheSdzIG1vbnRoXHJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzYsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgSG9tZVxyXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XHJcblx0XHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XHJcblx0XHRcdFx0XHRyZXR1cm4gKCFtaW5EYXRlIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpLmNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpICYmXHJcblx0XHRcdFx0XHRcdCghbWF4RGF0ZSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKS5jb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKTsgfSxcclxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKTsgfSxcclxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHsgcGx1Z2luLnNob3dNb250aCh0aGlzKTsgfVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjbGVhcjoge3RleHQ6ICdjbGVhclRleHQnLCBzdGF0dXM6ICdjbGVhclN0YXR1cycsIC8vIENsZWFyIHRoZSBkYXRlcGlja2VyXHJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzUsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgRW5kXHJcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiBudWxsOyB9LFxyXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkgeyBwbHVnaW4uY2xlYXIodGhpcyk7IH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Y2xvc2U6IHt0ZXh0OiAnY2xvc2VUZXh0Jywgc3RhdHVzOiAnY2xvc2VTdGF0dXMnLCAvLyBDbG9zZSB0aGUgZGF0ZXBpY2tlclxyXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDI3fSwgLy8gRXNjYXBlXHJcblx0XHRcdFx0ZW5hYmxlZDogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gdHJ1ZTsgfSxcclxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiBudWxsOyB9LFxyXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkgeyBwbHVnaW4uaGlkZSh0aGlzKTsgfVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRwcmV2V2Vlazoge3RleHQ6ICdwcmV2V2Vla1RleHQnLCBzdGF0dXM6ICdwcmV2V2Vla1N0YXR1cycsIC8vIFByZXZpb3VzIHdlZWtcclxuXHRcdFx0XHRrZXlzdHJva2U6IHtrZXlDb2RlOiAzOCwgY3RybEtleTogdHJ1ZX0sIC8vIEN0cmwgKyBVcFxyXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XHJcblx0XHRcdFx0XHRyZXR1cm4gKCFtaW5EYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxyXG5cdFx0XHRcdFx0XHRhZGQoLWluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCksICdkJykuY29tcGFyZVRvKG1pbkRhdGUpICE9PSAtMSk7IH0sXHJcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuXHJcblx0XHRcdFx0XHRhZGQoLWluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCksICdkJyk7IH0sXHJcblx0XHRcdFx0YWN0aW9uOiBmdW5jdGlvbihpbnN0KSB7IHBsdWdpbi5jaGFuZ2VEYXkodGhpcywgLWluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCkpOyB9XHJcblx0XHRcdH0sXHJcblx0XHRcdHByZXZEYXk6IHt0ZXh0OiAncHJldkRheVRleHQnLCBzdGF0dXM6ICdwcmV2RGF5U3RhdHVzJywgLy8gUHJldmlvdXMgZGF5XHJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzcsIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgTGVmdFxyXG5cdFx0XHRcdGVuYWJsZWQ6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5jdXJNaW5EYXRlKCk7XHJcblx0XHRcdFx0XHRyZXR1cm4gKCFtaW5EYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZCgtMSwgJ2QnKS5cclxuXHRcdFx0XHRcdFx0Y29tcGFyZVRvKG1pbkRhdGUpICE9PSAtMSk7IH0sXHJcblx0XHRcdFx0ZGF0ZTogZnVuY3Rpb24oaW5zdCkgeyByZXR1cm4gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuYWRkKC0xLCAnZCcpOyB9LFxyXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkgeyBwbHVnaW4uY2hhbmdlRGF5KHRoaXMsIC0xKTsgfVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRuZXh0RGF5OiB7dGV4dDogJ25leHREYXlUZXh0Jywgc3RhdHVzOiAnbmV4dERheVN0YXR1cycsIC8vIE5leHQgZGF5XHJcblx0XHRcdFx0a2V5c3Ryb2tlOiB7a2V5Q29kZTogMzksIGN0cmxLZXk6IHRydWV9LCAvLyBDdHJsICsgUmlnaHRcclxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XHJcblx0XHRcdFx0XHRyZXR1cm4gKCFtYXhEYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZCgxLCAnZCcpLlxyXG5cdFx0XHRcdFx0XHRjb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKTsgfSxcclxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5hZGQoMSwgJ2QnKTsgfSxcclxuXHRcdFx0XHRhY3Rpb246IGZ1bmN0aW9uKGluc3QpIHsgcGx1Z2luLmNoYW5nZURheSh0aGlzLCAxKTsgfVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRuZXh0V2Vlazoge3RleHQ6ICduZXh0V2Vla1RleHQnLCBzdGF0dXM6ICduZXh0V2Vla1N0YXR1cycsIC8vIE5leHQgd2Vla1xyXG5cdFx0XHRcdGtleXN0cm9rZToge2tleUNvZGU6IDQwLCBjdHJsS2V5OiB0cnVlfSwgLy8gQ3RybCArIERvd25cclxuXHRcdFx0XHRlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XHJcblx0XHRcdFx0XHRyZXR1cm4gKCFtYXhEYXRlIHx8IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLlxyXG5cdFx0XHRcdFx0XHRhZGQoaW5zdC5vcHRpb25zLmNhbGVuZGFyLmRheXNJbldlZWsoKSwgJ2QnKS5jb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKTsgfSxcclxuXHRcdFx0XHRkYXRlOiBmdW5jdGlvbihpbnN0KSB7IHJldHVybiBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKS5cclxuXHRcdFx0XHRcdGFkZChpbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGF5c0luV2VlaygpLCAnZCcpOyB9LFxyXG5cdFx0XHRcdGFjdGlvbjogZnVuY3Rpb24oaW5zdCkgeyBwbHVnaW4uY2hhbmdlRGF5KHRoaXMsIGluc3Qub3B0aW9ucy5jYWxlbmRhci5kYXlzSW5XZWVrKCkpOyB9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIGEgY29tbWFuZCBpcyBlbmFibGVkLlxyXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyQ29tbWFuZEVuYWJsZWRcclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgY29tbWFuZCBpcyBlbmFibGVkLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxyXG5cdFx0XHRAZXhhbXBsZSBlbmFibGVkOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0cmV0dXJuICEhaW5zdC5jdXJNaW5EYXRlKCk7XHJcbiB9ICovXHJcblxyXG5cdFx0LyoqIENhbGN1bGF0ZSB0aGUgcmVwcmVzZW50YXRpdmUgZGF0ZSBmb3IgYSBjb21tYW5kLlxyXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyQ29tbWFuZERhdGVcclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBBIGRhdGUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgY29tbWFuZC5cclxuXHRcdFx0QGV4YW1wbGUgZGF0ZTogZnVuY3Rpb24oaW5zdCkge1xyXG5cdHJldHVybiBpbnN0LmN1ck1pbkRhdGUoKTtcclxuIH0gKi9cclxuXHJcblx0XHQvKiogUGVyZm9ybSB0aGUgYWN0aW9uIGZvciBhIGNvbW1hbmQuXHJcblx0XHRcdEBjYWxsYmFjayBDYWxlbmRhcnNQaWNrZXJDb21tYW5kQWN0aW9uXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAZXhhbXBsZSBkYXRlOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0JC5kYXRlcGljay5zZXREYXRlKGluc3QuZWxlbSwgaW5zdC5jdXJNaW5EYXRlKCkpO1xyXG4gfSAqL1xyXG5cclxuXHRcdC8qKiBDYWxjdWxhdGUgdGhlIHdlZWsgb2YgdGhlIHllYXIgZm9yIGEgZGF0ZS5cclxuXHRcdFx0QGNhbGxiYWNrIENhbGVuZGFyc1BpY2tlckNhbGN1bGF0ZVdlZWtcclxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgZGF0ZSB0byBldmFsdWF0ZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgd2VlayBvZiB0aGUgeWVhci5cclxuXHRcdFx0QGV4YW1wbGUgY2FsY3VsYXRlV2VlazogZnVuY3Rpb24oZGF0ZSkge1xyXG5cdHZhciBzdGFydFllYXIgPSAkLmNhbGVuZGFycy5uZXdEYXRlKGRhdGUueWVhcigpLCAxLCAxKTtcclxuXHRyZXR1cm4gTWF0aC5mbG9vcigoZGF0ZS5kYXlPZlllYXIoKSAtIHN0YXJ0WWVhci5kYXlPZlllYXIoKSkgLyA3KSArIDE7XHJcbiB9ICovXHJcblxyXG5cdFx0LyoqIFByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgYW4gaW5kaXZpZHVhbCBkYXRlIHNob3duIGluIHRoZSBjYWxlbmRhci5cclxuXHRcdFx0QGNhbGxiYWNrIENhbGVuZGFyc1BpY2tlck9uRGF0ZVxyXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBkYXRlIHRvIGV2YWx1YXRlLlxyXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IEluZm9ybWF0aW9uIGFib3V0IHRoYXQgZGF0ZSwgd2l0aCB0aGUgcHJvcGVydGllcyBhYm92ZS5cclxuXHRcdFx0QHByb3BlcnR5IHNlbGVjdGFibGUge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgZGF0ZSBjYW4gYmUgc2VsZWN0ZWQuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXRlQ2xhc3Mge3N0cmluZ30gQ2xhc3MoZXMpIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGRhdGUuXHJcblx0XHRcdEBwcm9wZXJ0eSBjb250ZW50IHtzdHJpbmd9IFRoZSBkYXRlIGNlbGwgY29udGVudC5cclxuXHRcdFx0QHByb3BlcnR5IHRvb2x0aXAge3N0cmluZ30gQSBwb3B1cCB0b29sdGlwIGZvciB0aGUgZGF0ZS5cclxuXHRcdFx0QGV4YW1wbGUgb25EYXRlOiBmdW5jdGlvbihkYXRlKSB7XHJcblx0cmV0dXJuIHtzZWxlY3RhYmxlOiBkYXRlLmRheSgpID4gMCAmJiBkYXRlLmRheSgpICZsdDsgNSxcclxuXHRcdGRhdGVDbGFzczogZGF0ZS5kYXkoKSA9PT0gNCA/ICdsYXN0LWRheScgOiAnJ307XHJcbiB9ICovXHJcblxyXG5cdFx0LyoqIFVwZGF0ZSB0aGUgZGF0ZXBpY2tlciBkaXNwbGF5LlxyXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyT25TaG93XHJcblx0XHRcdEBwYXJhbSBwaWNrZXIge2pRdWVyeX0gVGhlIGRhdGVwaWNrZXIgPGNvZGU+ZGl2PC9jb2RlPiB0byBiZSBzaG93bi5cclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBleGFtcGxlIG9uU2hvdzogZnVuY3Rpb24ocGlja2VyLCBpbnN0KSB7XHJcblx0cGlja2VyLmFwcGVuZCgnJmx0O2J1dHRvbiB0eXBlPVwiYnV0dG9uXCI+SGkmbHQ7L2J1dHRvbj4nKS5cclxuXHRcdGZpbmQoJ2J1dHRvbjpsYXN0JykuY2xpY2soZnVuY3Rpb24oKSB7XHJcblx0XHRcdGFsZXJ0KCdIaSEnKTtcclxuXHRcdH0pO1xyXG4gfSAqL1xyXG5cclxuXHRcdC8qKiBSZWFjdCB0byBuYXZpZ2F0aW5nIHRocm91Z2ggdGhlIG1vbnRocy95ZWFycy5cclxuXHRcdFx0QGNhbGxiYWNrIENhbGVuZGFyc1BpY2tlck9uQ2hhbmdlTW9udGhZZWFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSBuZXcgeWVhci5cclxuXHRcdFx0QHBhcmFtIG1vbnRoIHtudW1iZXJ9IFRoZSBuZXcgbW9udGggKDEgdG8gMTIpLlxyXG5cdFx0XHRAZXhhbXBsZSBvbkNoYW5nZU1vbnRoWWVhcjogZnVuY3Rpb24oeWVhciwgbW9udGgpIHtcclxuXHRhbGVydCgnTm93IGluICcgKyBtb250aCArICcvJyArIHllYXIpO1xyXG4gfSAqL1xyXG5cdFx0XHRcclxuXHRcdC8qKiBEYXRlcGlja2VyIG9uIHNlbGVjdCBjYWxsYmFjay5cclxuXHRcdFx0VHJpZ2dlcmVkIHdoZW4gYSBkYXRlIGlzIHNlbGVjdGVkLlxyXG5cdFx0XHRAY2FsbGJhY2sgQ2FsZW5kYXJzUGlja2VyT25TZWxlY3RcclxuXHRcdFx0QHBhcmFtIGRhdGVzIHtDRGF0ZVtdfSBUaGUgc2VsZWN0ZWQgZGF0ZShzKS5cclxuXHRcdFx0QGV4YW1wbGUgb25TZWxlY3Q6IGZ1bmN0aW9uKGRhdGVzKSB7XHJcbiBcdGFsZXJ0KCdTZWxlY3RlZCAnICsgZGF0ZXMpO1xyXG4gfSAqL1xyXG5cdFx0XHRcclxuXHRcdC8qKiBEYXRlcGlja2VyIG9uIGNsb3NlIGNhbGxiYWNrLlxyXG5cdFx0XHRUcmlnZ2VyZWQgd2hlbiBhIHBvcHVwIGNhbGVuZGFyIGlzIGNsb3NlZC5cclxuXHRcdFx0QGNhbGxiYWNrIENhbGVuZGFyc1BpY2tlck9uQ2xvc2VcclxuXHRcdFx0QHBhcmFtIGRhdGVzIHtDRGF0ZVtdfSBUaGUgc2VsZWN0ZWQgZGF0ZShzKS5cclxuXHRcdFx0QGV4YW1wbGUgb25DbG9zZTogZnVuY3Rpb24oZGF0ZXMpIHtcclxuIFx0YWxlcnQoJ1NlbGVjdGVkICcgKyBkYXRlcyk7XHJcbiB9ICovXHJcblx0XHRcclxuXHRcdC8qKiBEZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGx1Z2luLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcm9wZXJ0eSBbY2FsZW5kYXI9JC5jYWxlbmRhcnMuaW5zdGFuY2UoKV0ge0NhbGVuZGFyfSBUaGUgY2FsZW5kYXIgZm9yIHRoaXMgZGF0ZXBpY2tlci5cclxuXHRcdFx0QHByb3BlcnR5IFtwaWNrZXJDbGFzcz0nJ10ge3N0cmluZ30gQ1NTIGNsYXNzIHRvIGFkZCB0byB0aGlzIGluc3RhbmNlIG9mIHRoZSBkYXRlcGlja2VyLlxyXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dPbkZvY3VzPXRydWVdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBmb3IgcG9wdXAgb24gZm9jdXMsIDxjb2RlPmZhbHNlPC9jb2RlPiBmb3Igbm90LlxyXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dUcmlnZ2VyPW51bGxdIHtzdHJpbmd8RWxlbWVudHxqUXVlcnl9IEVsZW1lbnQgdG8gYmUgY2xvbmVkIGZvciBhIHRyaWdnZXIsIDxjb2RlPm51bGw8L2NvZGU+IGZvciBub25lLlxyXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dBbmltPSdzaG93J10ge3N0cmluZ30gTmFtZSBvZiBqUXVlcnkgYW5pbWF0aW9uIGZvciBwb3B1cCwgJycgZm9yIG5vIGFuaW1hdGlvbi5cclxuXHRcdFx0QHByb3BlcnR5IFtzaG93T3B0aW9ucz1udWxsXSB7b2JqZWN0fSBPcHRpb25zIGZvciBlbmhhbmNlZCBhbmltYXRpb25zLlxyXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dTcGVlZD0nbm9ybWFsJ10ge3N0cmluZ30gRHVyYXRpb24gb2YgZGlzcGxheS9jbG9zdXJlLlxyXG5cdFx0XHRAcHJvcGVydHkgW3BvcHVwQ29udGFpbmVyPW51bGxdIHtzdHJpbmd8RWxlbWVudHxqUXVlcnl9IFRoZSBlbGVtZW50IHRvIHdoaWNoIGEgcG9wdXAgY2FsZW5kYXIgaXMgYWRkZWQsIDxjb2RlPm51bGw8L2NvZGU+IGZvciBib2R5LlxyXG5cdFx0XHRAcHJvcGVydHkgW2FsaWdubWVudD0nYm90dG9tJ10ge3N0cmluZ30gQWxpZ25tZW50IG9mIHBvcHVwIC0gd2l0aCBub21pbmF0ZWQgY29ybmVyIG9mIGlucHV0OlxyXG5cdFx0XHRcdFx0XHQndG9wJyBvciAnYm90dG9tJyBhbGlnbnMgZGVwZW5kaW5nIG9uIGxhbmd1YWdlIGRpcmVjdGlvbixcclxuXHRcdFx0XHRcdFx0J3RvcExlZnQnLCAndG9wUmlnaHQnLCAnYm90dG9tTGVmdCcsICdib3R0b21SaWdodCcuXHJcblx0XHRcdEBwcm9wZXJ0eSBbZml4ZWRXZWVrcz1mYWxzZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGFsd2F5cyBzaG93IDYgd2Vla3MsIDxjb2RlPmZhbHNlPC9jb2RlPiB0byBvbmx5IHNob3cgYXMgbWFueSBhcyBhcmUgbmVlZGVkLlxyXG5cdFx0XHRAcHJvcGVydHkgW2ZpcnN0RGF5PW51bGxdIHtudW1iZXJ9IEZpcnN0IGRheSBvZiB0aGUgd2VlaywgMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLiwgPGNvZGU+bnVsbDwvY29kZT4gZm9yIDxjb2RlPmNhbGVuZGFyPC9jb2RlPiBkZWZhdWx0LlxyXG5cdFx0XHRAcHJvcGVydHkgW2NhbGN1bGF0ZVdlZWs9bnVsbF0ge0NhbGVuZGFyc1BpY2tlckNhbGN1bGF0ZVdlZWt9IENhbGN1bGF0ZSB3ZWVrIG9mIHRoZSB5ZWFyIGZyb20gYSBkYXRlLCA8Y29kZT5udWxsPC9jb2RlPiBmb3IgPGNvZGU+Y2FsZW5kYXI8L2NvZGU+IGRlZmF1bHQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhzVG9TaG93PTFdIHtudW1iZXJ8bnVtYmVyW119IEhvdyBtYW55IG1vbnRocyB0byBzaG93LCBjb2xzIG9yIFtyb3dzLCBjb2xzXS5cclxuXHRcdFx0QHByb3BlcnR5IFttb250aHNPZmZzZXQ9MF0ge251bWJlcn0gSG93IG1hbnkgbW9udGhzIHRvIG9mZnNldCB0aGUgcHJpbWFyeSBtb250aCBieTtcclxuXHRcdFx0XHRcdFx0bWF5IGJlIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgZGF0ZSBhbmQgcmV0dXJucyB0aGUgb2Zmc2V0LlxyXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoc1RvU3RlcD0xXSB7bnVtYmVyfSBIb3cgbWFueSBtb250aHMgdG8gbW92ZSB3aGVuIHByZXYvbmV4dCBjbGlja2VkLlxyXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoc1RvSnVtcD0xMl0ge251bWJlcn0gSG93IG1hbnkgbW9udGhzIHRvIG1vdmUgd2hlbiBsYXJnZSBwcmV2L25leHQgY2xpY2tlZC5cclxuXHRcdFx0QHByb3BlcnR5IFt1c2VNb3VzZVdoZWVsPXRydWVdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byB1c2UgbW91c2V3aGVlbCBpZiBhdmFpbGFibGUsIDxjb2RlPmZhbHNlPC9jb2RlPiB0byBuZXZlciB1c2UgaXQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbY2hhbmdlTW9udGg9dHJ1ZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGNoYW5nZSBtb250aC95ZWFyIHZpYSBkcm9wLWRvd24sIDxjb2RlPmZhbHNlPC9jb2RlPiBmb3IgbmF2aWdhdGlvbiBvbmx5LlxyXG5cdFx0XHRAcHJvcGVydHkgW3llYXJSYW5nZT0nYy0xMDpjKzEwJ10ge3N0cmluZ30gUmFuZ2Ugb2YgeWVhcnMgdG8gc2hvdyBpbiBkcm9wLWRvd246ICdhbnknIGZvciBkaXJlY3QgdGV4dCBlbnRyeVxyXG5cdFx0XHRcdFx0XHRvciAnc3RhcnQ6ZW5kJywgd2hlcmUgc3RhcnQvZW5kIGFyZSAnKy1ubicgZm9yIHJlbGF0aXZlIHRvIHRvZGF5XHJcblx0XHRcdFx0XHRcdG9yICdjKy1ubicgZm9yIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZVxyXG5cdFx0XHRcdFx0XHRvciAnbm5ubicgZm9yIGFuIGFic29sdXRlIHllYXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBbc2hvd090aGVyTW9udGhzPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gc2hvdyBkYXRlcyBmcm9tIG90aGVyIG1vbnRocywgPGNvZGU+ZmFsc2U8L2NvZGU+IHRvIG5vdCBzaG93IHRoZW0uXHJcblx0XHRcdEBwcm9wZXJ0eSBbc2VsZWN0T3RoZXJNb250aHM9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBhbGxvdyBzZWxlY3Rpb24gb2YgZGF0ZXMgZnJvbSBvdGhlciBtb250aHMgdG9vLlxyXG5cdFx0XHRAcHJvcGVydHkgW2RlZmF1bHREYXRlPW51bGxdIHtzdHJpbmd8bnVtYmVyfENEYXRlfSBEYXRlIHRvIHNob3cgaWYgbm8gb3RoZXIgc2VsZWN0ZWQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbc2VsZWN0RGVmYXVsdERhdGU9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBwcmUtc2VsZWN0IHRoZSBkZWZhdWx0IGRhdGUgaWYgbm8gb3RoZXIgaXMgY2hvc2VuLlxyXG5cdFx0XHRAcHJvcGVydHkgW21pbkRhdGU9bnVsbF0ge3N0cmluZ3xudW1iZXJ8Q0RhdGV9IFRoZSBtaW5pbXVtIHNlbGVjdGFibGUgZGF0ZS5cclxuXHRcdFx0QHByb3BlcnR5IFttYXhEYXRlPW51bGxdIHtzdHJpbmd8bnVtYmVyfENEYXRlfSBUaGUgbWF4aW11bSBzZWxlY3RhYmxlIGRhdGUuXHJcblx0XHRcdEBwcm9wZXJ0eSBbZGF0ZUZvcm1hdD0nbW0vZGQveXl5eSddIHtzdHJpbmd9IEZvcm1hdCBmb3IgZGF0ZXMuXHJcblx0XHRcdEBwcm9wZXJ0eSBbYXV0b1NpemU9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBzaXplIHRoZSBpbnB1dCBmaWVsZCBhY2NvcmRpbmcgdG8gdGhlIGRhdGUgZm9ybWF0LlxyXG5cdFx0XHRAcHJvcGVydHkgW3JhbmdlU2VsZWN0PWZhbHNlXSB7Ym9vbGVhbn0gQWxsb3dzIGZvciBzZWxlY3RpbmcgYSBkYXRlIHJhbmdlIG9uIG9uZSBkYXRlIHBpY2tlci5cclxuXHRcdFx0QHByb3BlcnR5IFtyYW5nZVNlcGFyYXRvcj0nIC0gJ10ge3N0cmluZ30gVGV4dCBiZXR3ZWVuIHR3byBkYXRlcyBpbiBhIHJhbmdlLlxyXG5cdFx0XHRAcHJvcGVydHkgW211bHRpU2VsZWN0PTBdIHtudW1iZXJ9IE1heGltdW0gbnVtYmVyIG9mIHNlbGVjdGFibGUgZGF0ZXMsIHplcm8gZm9yIHNpbmdsZSBzZWxlY3QuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbXVsdGlTZXBhcmF0b3I9JywnXSB7c3RyaW5nfSBUZXh0IGJldHdlZW4gbXVsdGlwbGUgZGF0ZXMuXHJcblx0XHRcdEBwcm9wZXJ0eSBbb25EYXRlPW51bGxdIHtDYWxlbmRhcnNQaWNrZXJPbkRhdGV9IENhbGxiYWNrIGFzIGEgZGF0ZSBpcyBhZGRlZCB0byB0aGUgZGF0ZXBpY2tlci5cclxuXHRcdFx0QHByb3BlcnR5IFtvblNob3c9bnVsbF0ge0NhbGVuZGFyc1BpY2tlck9uU2hvd30gQ2FsbGJhY2sganVzdCBiZWZvcmUgYSBkYXRlcGlja2VyIGlzIHNob3duLlxyXG5cdFx0XHRAcHJvcGVydHkgW29uQ2hhbmdlTW9udGhZZWFyPW51bGxdIHtDYWxlbmRhcnNQaWNrZXJPbkNoYW5nZU1vbnRoWWVhcn0gQ2FsbGJhY2sgd2hlbiBhIG5ldyBtb250aC95ZWFyIGlzIHNlbGVjdGVkLlxyXG5cdFx0XHRAcHJvcGVydHkgW29uU2VsZWN0PW51bGxdIHtDYWxlbmRhcnNQaWNrZXJPblNlbGVjdH0gQ2FsbGJhY2sgd2hlbiBhIGRhdGUgaXMgc2VsZWN0ZWQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbb25DbG9zZT1udWxsXSB7Q2FsZW5kYXJzUGlja2VyT25DbG9zZX0gQ2FsbGJhY2sgd2hlbiBhIGRhdGVwaWNrZXIgaXMgY2xvc2VkLlxyXG5cdFx0XHRAcHJvcGVydHkgW2FsdEZpZWxkPW51bGxdIHtzdHJpbmd8RWxlbWVudHxqUXVlcnl9IEFsdGVybmF0ZSBmaWVsZCB0byB1cGRhdGUgaW4gc3luY2ggd2l0aCB0aGUgZGF0ZXBpY2tlci5cclxuXHRcdFx0QHByb3BlcnR5IFthbHRGb3JtYXQ9bnVsbF0ge3N0cmluZ30gRGF0ZSBmb3JtYXQgZm9yIGFsdGVybmF0ZSBmaWVsZCwgZGVmYXVsdHMgdG8gPGNvZGU+ZGF0ZUZvcm1hdDwvY29kZT4uXHJcblx0XHRcdEBwcm9wZXJ0eSBbY29uc3RyYWluSW5wdXQ9dHJ1ZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGNvbnN0cmFpbiB0eXBlZCBpbnB1dCB0byA8Y29kZT5kYXRlRm9ybWF0PC9jb2RlPiBhbGxvd2VkIGNoYXJhY3RlcnMuXHJcblx0XHRcdEBwcm9wZXJ0eSBbY29tbWFuZHNBc0RhdGVGb3JtYXQ9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBhcHBseVxyXG5cdFx0XHRcdFx0XHQ8Y29kZT48YSBocmVmPVwiI2Zvcm1hdERhdGVcIj5mb3JtYXREYXRlPC9hPjwvY29kZT4gdG8gdGhlIGNvbW1hbmQgdGV4dHMuXHJcblx0XHRcdEBwcm9wZXJ0eSBbY29tbWFuZHM9dGhpcy5jb21tYW5kc10ge29iamVjdH0gQ29tbWFuZCBhY3Rpb25zIHRoYXQgbWF5IGJlIGFkZGVkIHRvIGEgbGF5b3V0IGJ5IG5hbWUuICovXHJcblx0XHRkZWZhdWx0T3B0aW9uczoge1xyXG5cdFx0XHRjYWxlbmRhcjogJC5jYWxlbmRhcnMuaW5zdGFuY2UoKSxcclxuXHRcdFx0cGlja2VyQ2xhc3M6ICcnLFxyXG5cdFx0XHRzaG93T25Gb2N1czogdHJ1ZSxcclxuXHRcdFx0c2hvd1RyaWdnZXI6IG51bGwsXHJcblx0XHRcdHNob3dBbmltOiAnc2hvdycsXHJcblx0XHRcdHNob3dPcHRpb25zOiB7fSxcclxuXHRcdFx0c2hvd1NwZWVkOiAnbm9ybWFsJyxcclxuXHRcdFx0cG9wdXBDb250YWluZXI6IG51bGwsXHJcblx0XHRcdGFsaWdubWVudDogJ2JvdHRvbScsXHJcblx0XHRcdGZpeGVkV2Vla3M6IGZhbHNlLFxyXG5cdFx0XHRmaXJzdERheTogbnVsbCxcclxuXHRcdFx0Y2FsY3VsYXRlV2VlazogbnVsbCxcclxuXHRcdFx0bW9udGhzVG9TaG93OiAxLFxyXG5cdFx0XHRtb250aHNPZmZzZXQ6IDAsXHJcblx0XHRcdG1vbnRoc1RvU3RlcDogMSxcclxuXHRcdFx0bW9udGhzVG9KdW1wOiAxMixcclxuXHRcdFx0dXNlTW91c2VXaGVlbDogdHJ1ZSxcclxuXHRcdFx0Y2hhbmdlTW9udGg6IHRydWUsXHJcblx0XHRcdHllYXJSYW5nZTogJ2MtMTA6YysxMCcsXHJcblx0XHRcdHNob3dPdGhlck1vbnRoczogZmFsc2UsXHJcblx0XHRcdHNlbGVjdE90aGVyTW9udGhzOiBmYWxzZSxcclxuXHRcdFx0ZGVmYXVsdERhdGU6IG51bGwsXHJcblx0XHRcdHNlbGVjdERlZmF1bHREYXRlOiBmYWxzZSxcclxuXHRcdFx0bWluRGF0ZTogbnVsbCxcclxuXHRcdFx0bWF4RGF0ZTogbnVsbCxcclxuXHRcdFx0ZGF0ZUZvcm1hdDogbnVsbCxcclxuXHRcdFx0YXV0b1NpemU6IGZhbHNlLFxyXG5cdFx0XHRyYW5nZVNlbGVjdDogZmFsc2UsXHJcblx0XHRcdHJhbmdlU2VwYXJhdG9yOiAnIC0gJyxcclxuXHRcdFx0bXVsdGlTZWxlY3Q6IDAsXHJcblx0XHRcdG11bHRpU2VwYXJhdG9yOiAnLCcsXHJcblx0XHRcdG9uRGF0ZTogbnVsbCxcclxuXHRcdFx0b25TaG93OiBudWxsLFxyXG5cdFx0XHRvbkNoYW5nZU1vbnRoWWVhcjogbnVsbCxcclxuXHRcdFx0b25TZWxlY3Q6IG51bGwsXHJcblx0XHRcdG9uQ2xvc2U6IG51bGwsXHJcblx0XHRcdGFsdEZpZWxkOiBudWxsLFxyXG5cdFx0XHRhbHRGb3JtYXQ6IG51bGwsXHJcblx0XHRcdGNvbnN0cmFpbklucHV0OiB0cnVlLFxyXG5cdFx0XHRjb21tYW5kc0FzRGF0ZUZvcm1hdDogZmFsc2UsXHJcblx0XHRcdGNvbW1hbmRzOiB7fSAvLyB0aGlzLmNvbW1hbmRzXHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBMb2NhbGlzYXRpb25zIGZvciB0aGUgcGx1Z2luLlxyXG5cdFx0XHRFbnRyaWVzIGFyZSBvYmplY3RzIGluZGV4ZWQgYnkgdGhlIGxhbmd1YWdlIGNvZGUgKCcnIGJlaW5nIHRoZSBkZWZhdWx0IFVTL0VuZ2xpc2gpLlxyXG5cdFx0XHRFYWNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcm9wZXJ0eSBbcmVuZGVyZXI9dGhpcy5kZWZhdWx0UmVuZGVyZXJdIHtzdHJpbmd9IFRoZSByZW5kZXJpbmcgdGVtcGxhdGVzLlxyXG5cdFx0XHRAcHJvcGVydHkgW3ByZXZUZXh0PScmbHQ7UHJldiddIHtzdHJpbmd9IFRleHQgZm9yIHRoZSBwcmV2aW91cyBtb250aCBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW3ByZXZTdGF0dXM9J1Nob3cgdGhlIHByZXZpb3VzIG1vbnRoJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSBwcmV2aW91cyBtb250aCBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW3ByZXZKdW1wVGV4dD0nJmx0OyZsdDsnXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgcHJldmlvdXMgeWVhciBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW3ByZXZKdW1wU3RhdHVzPSdTaG93IHRoZSBwcmV2aW91cyB5ZWFyJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSBwcmV2aW91cyB5ZWFyIGNvbW1hbmQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbmV4dFRleHQ9J05leHQmZ3Q7J10ge3N0cmluZ30gVGV4dCBmb3IgdGhlIG5leHQgbW9udGggY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFtuZXh0U3RhdHVzPSdTaG93IHRoZSBuZXh0IG1vbnRoJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSBuZXh0IG1vbnRoIGNvbW1hbmQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbmV4dEp1bXBUZXh0PScmZ3Q7Jmd0OyddIHtzdHJpbmd9IFRleHQgZm9yIHRoZSBuZXh0IHllYXIgY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFtuZXh0SnVtcFN0YXR1cz0nU2hvdyB0aGUgbmV4dCB5ZWFyJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSBuZXh0IHllYXIgY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFtjdXJyZW50VGV4dD0nQ3VycmVudCddIHtzdHJpbmd9IFRleHQgZm9yIHRoZSBjdXJyZW50IG1vbnRoIGNvbW1hbmQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbY3VycmVudFN0YXR1cz0nU2hvdyB0aGUgY3VycmVudCBtb250aCddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgY3VycmVudCBtb250aCBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW3RvZGF5VGV4dD0nVG9kYXknXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgdG9kYXkncyBtb250aCBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW3RvZGF5U3RhdHVzPSdTaG93IHRvZGF5XFwncyBtb250aCddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgdG9kYXkncyBtb250aCBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW2NsZWFyVGV4dD0nQ2xlYXInXSB7c3RyaW5nfSBUZXh0IGZvciB0aGUgY2xlYXIgY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFtjbGVhclN0YXR1cz0nQ2xlYXIgYWxsIHRoZSBkYXRlcyddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB0aGUgY2xlYXIgY29tbWFuZC5cclxuXHRcdFx0QHByb3BlcnR5IFtjbG9zZVRleHQ9J0Nsb3NlJ10ge3N0cmluZ30gVGV4dCBmb3IgdGhlIGNsb3NlIGNvbW1hbmQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbY2xvc2VTdGF0dXM9J0Nsb3NlIHRoZSBkYXRlcGlja2VyJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIHRoZSBjbG9zZSBjb21tYW5kLlxyXG5cdFx0XHRAcHJvcGVydHkgW3llYXJTdGF0dXM9J0NoYW5nZSB0aGUgeWVhciddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB5ZWFyIHNlbGVjdGlvbi5cclxuXHRcdFx0QHByb3BlcnR5IFtlYXJsaWVyVGV4dD0nJiMxNjA7JiMxNjA74payJ10ge3N0cmluZ30gVGV4dCBmb3IgZWFybGllciB5ZWFycy5cclxuXHRcdFx0QHByb3BlcnR5IFtsYXRlclRleHQ9JyYjMTYwOyYjMTYwO+KWvCddIHtzdHJpbmd9IFRleHQgZm9yIGxhdGVyIHllYXJzLlxyXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoU3RhdHVzPSdDaGFuZ2UgdGhlIG1vbnRoJ10ge3N0cmluZ30gU3RhdHVzIHRleHQgZm9yIG1vbnRoIHNlbGVjdGlvbi5cclxuXHRcdFx0QHByb3BlcnR5IFt3ZWVrVGV4dD0nV2snXSB7c3RyaW5nfSBUZXh0IGZvciB3ZWVrIG9mIHRoZSB5ZWFyIGNvbHVtbiBoZWFkZXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBbd2Vla1N0YXR1cz0nV2VlayBvZiB0aGUgeWVhciddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciB3ZWVrIG9mIHRoZSB5ZWFyIGNvbHVtbiBoZWFkZXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBbZGF5U3RhdHVzPSdTZWxlY3QgREQsJiMxNjA7TSYjMTYwO2QsJiMxNjA7eXl5eSddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IGZvciBzZWxlY3RhYmxlIGRheXMuXHJcblx0XHRcdEBwcm9wZXJ0eSBbZGVmYXVsdFN0YXR1cz0nU2VsZWN0IGEgZGF0ZSddIHtzdHJpbmd9IFN0YXR1cyB0ZXh0IHNob3duIGJ5IGRlZmF1bHQuXHJcblx0XHRcdEBwcm9wZXJ0eSBbaXNSVEw9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBsYW5ndWFnZSBpcyByaWdodC10by1sZWZ0LiAqL1xyXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7IC8vIEF2YWlsYWJsZSByZWdpb25hbCBzZXR0aW5ncywgaW5kZXhlZCBieSBsYW5ndWFnZS9jb3VudHJ5IGNvZGVcclxuXHRcdFx0Jyc6IHsgLy8gRGVmYXVsdCByZWdpb25hbCBzZXR0aW5ncyAtIEVuZ2xpc2gvVVNcclxuXHRcdFx0XHRyZW5kZXJlcjoge30sIC8vIHRoaXMuZGVmYXVsdFJlbmRlcmVyXHJcblx0XHRcdFx0cHJldlRleHQ6ICcmbHQ7UHJldicsXHJcblx0XHRcdFx0cHJldlN0YXR1czogJ1Nob3cgdGhlIHByZXZpb3VzIG1vbnRoJyxcclxuXHRcdFx0XHRwcmV2SnVtcFRleHQ6ICcmbHQ7Jmx0OycsXHJcblx0XHRcdFx0cHJldkp1bXBTdGF0dXM6ICdTaG93IHRoZSBwcmV2aW91cyB5ZWFyJyxcclxuXHRcdFx0XHRuZXh0VGV4dDogJ05leHQmZ3Q7JyxcclxuXHRcdFx0XHRuZXh0U3RhdHVzOiAnU2hvdyB0aGUgbmV4dCBtb250aCcsXHJcblx0XHRcdFx0bmV4dEp1bXBUZXh0OiAnJmd0OyZndDsnLFxyXG5cdFx0XHRcdG5leHRKdW1wU3RhdHVzOiAnU2hvdyB0aGUgbmV4dCB5ZWFyJyxcclxuXHRcdFx0XHRjdXJyZW50VGV4dDogJ0N1cnJlbnQnLFxyXG5cdFx0XHRcdGN1cnJlbnRTdGF0dXM6ICdTaG93IHRoZSBjdXJyZW50IG1vbnRoJyxcclxuXHRcdFx0XHR0b2RheVRleHQ6ICdUb2RheScsXHJcblx0XHRcdFx0dG9kYXlTdGF0dXM6ICdTaG93IHRvZGF5XFwncyBtb250aCcsXHJcblx0XHRcdFx0Y2xlYXJUZXh0OiAnQ2xlYXInLFxyXG5cdFx0XHRcdGNsZWFyU3RhdHVzOiAnQ2xlYXIgYWxsIHRoZSBkYXRlcycsXHJcblx0XHRcdFx0Y2xvc2VUZXh0OiAnQ2xvc2UnLFxyXG5cdFx0XHRcdGNsb3NlU3RhdHVzOiAnQ2xvc2UgdGhlIGRhdGVwaWNrZXInLFxyXG5cdFx0XHRcdHllYXJTdGF0dXM6ICdDaGFuZ2UgdGhlIHllYXInLFxyXG5cdFx0XHRcdGVhcmxpZXJUZXh0OiAnJiMxNjA7JiMxNjA74payJyxcclxuXHRcdFx0XHRsYXRlclRleHQ6ICcmIzE2MDsmIzE2MDvilrwnLFxyXG5cdFx0XHRcdG1vbnRoU3RhdHVzOiAnQ2hhbmdlIHRoZSBtb250aCcsXHJcblx0XHRcdFx0d2Vla1RleHQ6ICdXaycsXHJcblx0XHRcdFx0d2Vla1N0YXR1czogJ1dlZWsgb2YgdGhlIHllYXInLFxyXG5cdFx0XHRcdGRheVN0YXR1czogJ1NlbGVjdCBERCwgTSBkLCB5eXl5JyxcclxuXHRcdFx0XHRkZWZhdWx0U3RhdHVzOiAnU2VsZWN0IGEgZGF0ZScsXHJcblx0XHRcdFx0aXNSVEw6IGZhbHNlXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdC8qKiBOYW1lcyBvZiBnZXR0ZXIgbWV0aG9kcyAtIHRob3NlIHRoYXQgY2FuJ3QgYmUgY2hhaW5lZC5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlciAqL1xyXG5cdFx0X2dldHRlcnM6IFsnZ2V0RGF0ZScsICdpc0Rpc2FibGVkJywgJ2lzU2VsZWN0YWJsZScsICdyZXRyaWV2ZURhdGUnXSxcclxuXHJcblx0XHRfZGlzYWJsZWQ6IFtdLFxyXG5cdFx0XHJcblx0XHRfcG9wdXBDbGFzczogJ2NhbGVuZGFycy1wb3B1cCcsIC8vIE1hcmtlciBmb3IgcG9wdXAgZGl2aXNpb25cclxuXHRcdF90cmlnZ2VyQ2xhc3M6ICdjYWxlbmRhcnMtdHJpZ2dlcicsIC8vIE1hcmtlciBmb3IgdHJpZ2dlciBlbGVtZW50XHJcblx0XHRfZGlzYWJsZUNsYXNzOiAnY2FsZW5kYXJzLWRpc2FibGUnLCAvLyBNYXJrZXIgZm9yIGRpc2FibGVkIGVsZW1lbnRcclxuXHRcdF9tb250aFllYXJDbGFzczogJ2NhbGVuZGFycy1tb250aC15ZWFyJywgLy8gTWFya2VyIGZvciBtb250aC95ZWFyIGlucHV0c1xyXG5cdFx0X2N1ck1vbnRoQ2xhc3M6ICdjYWxlbmRhcnMtbW9udGgtJywgLy8gTWFya2VyIGZvciBjdXJyZW50IG1vbnRoL3llYXJcclxuXHRcdF9hbnlZZWFyQ2xhc3M6ICdjYWxlbmRhcnMtYW55LXllYXInLCAvLyBNYXJrZXIgZm9yIHllYXIgZGlyZWN0IGlucHV0XHJcblx0XHRfY3VyRG9XQ2xhc3M6ICdjYWxlbmRhcnMtZG93LScsIC8vIE1hcmtlciBmb3IgZGF5IG9mIHdlZWtcclxuXHJcblx0XHRfaW5pdDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHRoaXMuZGVmYXVsdE9wdGlvbnMuY29tbWFuZHMgPSB0aGlzLmNvbW1hbmRzO1xyXG5cdFx0XHR0aGlzLnJlZ2lvbmFsT3B0aW9uc1snJ10ucmVuZGVyZXIgPSB0aGlzLmRlZmF1bHRSZW5kZXJlcjtcclxuXHRcdFx0dGhpcy5fc3VwZXIoKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0X2luc3RTZXR0aW5nczogZnVuY3Rpb24oZWxlbSwgb3B0aW9ucykge1xyXG5cdFx0XHRyZXR1cm4ge3NlbGVjdGVkRGF0ZXM6IFtdLCBkcmF3RGF0ZTogbnVsbCwgcGlja2luZ1JhbmdlOiBmYWxzZSxcclxuXHRcdFx0XHRpbmxpbmU6ICgkLmluQXJyYXkoZWxlbVswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBbJ2RpdicsICdzcGFuJ10pID4gLTEpLFxyXG5cdFx0XHRcdGdldDogZnVuY3Rpb24obmFtZSkgeyAvLyBHZXQgYSBzZXR0aW5nIHZhbHVlLCBjb21wdXRpbmcgaWYgbmVjZXNzYXJ5XHJcblx0XHRcdFx0XHRpZiAoJC5pbkFycmF5KG5hbWUsIFsnZGVmYXVsdERhdGUnLCAnbWluRGF0ZScsICdtYXhEYXRlJ10pID4gLTEpIHsgLy8gRGVjb2RlIGRhdGUgc2V0dGluZ3NcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5jYWxlbmRhci5kZXRlcm1pbmVEYXRlKHRoaXMub3B0aW9uc1tuYW1lXSwgbnVsbCxcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkRGF0ZXNbMF0sIHRoaXMuZ2V0KCdkYXRlRm9ybWF0JyksIHRoaXMuZ2V0Q29uZmlnKCkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKG5hbWUgPT09ICdkYXRlRm9ybWF0Jykge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmRhdGVGb3JtYXQgfHwgdGhpcy5vcHRpb25zLmNhbGVuZGFyLmxvY2FsLmRhdGVGb3JtYXQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zW25hbWVdO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0Y3VyTWluRGF0ZTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gKHRoaXMucGlja2luZ1JhbmdlID8gdGhpcy5zZWxlY3RlZERhdGVzWzBdIDogdGhpcy5nZXQoJ21pbkRhdGUnKSk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRnZXRDb25maWc6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHtkYXlOYW1lc1Nob3J0OiB0aGlzLm9wdGlvbnMuZGF5TmFtZXNTaG9ydCwgZGF5TmFtZXM6IHRoaXMub3B0aW9ucy5kYXlOYW1lcyxcclxuXHRcdFx0XHRcdFx0bW9udGhOYW1lc1Nob3J0OiB0aGlzLm9wdGlvbnMubW9udGhOYW1lc1Nob3J0LCBtb250aE5hbWVzOiB0aGlzLm9wdGlvbnMubW9udGhOYW1lcyxcclxuXHRcdFx0XHRcdFx0Y2FsY3VsYXRlV2VlazogdGhpcy5vcHRpb25zLmNhbGN1bGF0ZVdlZWssIHNob3J0WWVhckN1dG9mZjogdGhpcy5vcHRpb25zLnNob3J0WWVhckN1dG9mZn07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cdFx0fSxcclxuXHJcblx0XHRfcG9zdEF0dGFjaDogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xyXG5cdFx0XHRpZiAoaW5zdC5pbmxpbmUpIHtcclxuXHRcdFx0XHRpbnN0LmRyYXdEYXRlID0gcGx1Z2luLl9jaGVja01pbk1heCgoaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8XHJcblx0XHRcdFx0XHRpbnN0LmdldCgnZGVmYXVsdERhdGUnKSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKSkubmV3RGF0ZSgpLCBpbnN0KTtcclxuXHRcdFx0XHRpbnN0LnByZXZEYXRlID0gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCk7XHJcblx0XHRcdFx0dGhpcy5fdXBkYXRlKGVsZW1bMF0pO1xyXG5cdFx0XHRcdGlmICgkLmZuLm1vdXNld2hlZWwpIHtcclxuXHRcdFx0XHRcdGVsZW0ubW91c2V3aGVlbCh0aGlzLl9kb01vdXNlV2hlZWwpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHR0aGlzLl9hdHRhY2htZW50cyhlbGVtLCBpbnN0KTtcclxuXHRcdFx0XHRlbGVtLm9uKCdrZXlkb3duLicgKyBpbnN0Lm5hbWUsIHRoaXMuX2tleURvd24pLm9uKCdrZXlwcmVzcy4nICsgaW5zdC5uYW1lLCB0aGlzLl9rZXlQcmVzcykuXHJcblx0XHRcdFx0XHRvbigna2V5dXAuJyArIGluc3QubmFtZSwgdGhpcy5fa2V5VXApO1xyXG5cdFx0XHRcdGlmIChlbGVtLmF0dHIoJ2Rpc2FibGVkJykpIHtcclxuXHRcdFx0XHRcdHRoaXMuZGlzYWJsZShlbGVtWzBdKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0X29wdGlvbnNDaGFuZ2VkOiBmdW5jdGlvbihlbGVtLCBpbnN0LCBvcHRpb25zKSB7XHJcblx0XHRcdGlmIChvcHRpb25zLmNhbGVuZGFyICYmIG9wdGlvbnMuY2FsZW5kYXIgIT09IGluc3Qub3B0aW9ucy5jYWxlbmRhcikge1xyXG5cdFx0XHRcdHZhciBkaXNjYXJkRGF0ZSA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuXHRcdFx0XHRcdHJldHVybiAodHlwZW9mIGluc3Qub3B0aW9uc1tuYW1lXSA9PT0gJ29iamVjdCcgPyBudWxsIDogaW5zdC5vcHRpb25zW25hbWVdKTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdG9wdGlvbnMgPSAkLmV4dGVuZCh7ZGVmYXVsdERhdGU6IGRpc2NhcmREYXRlKCdkZWZhdWx0RGF0ZScpLFxyXG5cdFx0XHRcdFx0bWluRGF0ZTogZGlzY2FyZERhdGUoJ21pbkRhdGUnKSwgbWF4RGF0ZTogZGlzY2FyZERhdGUoJ21heERhdGUnKX0sIG9wdGlvbnMpO1xyXG5cdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IFtdO1xyXG5cdFx0XHRcdGluc3QuZHJhd0RhdGUgPSBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBkYXRlcyA9IGluc3Quc2VsZWN0ZWREYXRlcztcclxuXHRcdFx0JC5leHRlbmQoaW5zdC5vcHRpb25zLCBvcHRpb25zKTtcclxuXHRcdFx0dGhpcy5zZXREYXRlKGVsZW1bMF0sIGRhdGVzLCBudWxsLCBmYWxzZSwgdHJ1ZSk7XHJcblx0XHRcdGluc3QucGlja2luZ1JhbmdlID0gZmFsc2U7XHJcblx0XHRcdHZhciBjYWxlbmRhciA9IGluc3Qub3B0aW9ucy5jYWxlbmRhcjtcclxuXHRcdFx0dmFyIGRlZmF1bHREYXRlID0gaW5zdC5nZXQoJ2RlZmF1bHREYXRlJyk7XHJcblx0XHRcdGluc3QuZHJhd0RhdGUgPSB0aGlzLl9jaGVja01pbk1heCgoZGVmYXVsdERhdGUgPyBkZWZhdWx0RGF0ZSA6IGluc3QuZHJhd0RhdGUpIHx8XHJcblx0XHRcdFx0ZGVmYXVsdERhdGUgfHwgY2FsZW5kYXIudG9kYXkoKSwgaW5zdCkubmV3RGF0ZSgpO1xyXG5cdFx0XHRpZiAoIWluc3QuaW5saW5lKSB7XHJcblx0XHRcdFx0dGhpcy5fYXR0YWNobWVudHMoZWxlbSwgaW5zdCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGluc3QuaW5saW5lIHx8IGluc3QuZGl2KSB7XHJcblx0XHRcdFx0dGhpcy5fdXBkYXRlKGVsZW1bMF0pO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBBdHRhY2ggZXZlbnRzIGFuZCB0cmlnZ2VyLCBpZiBuZWNlc3NhcnkuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGVsZW0ge2pRdWVyeX0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy4gKi9cclxuXHRcdF9hdHRhY2htZW50czogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xyXG5cdFx0XHRlbGVtLm9mZignZm9jdXMuJyArIGluc3QubmFtZSk7XHJcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMuc2hvd09uRm9jdXMpIHtcclxuXHRcdFx0XHRlbGVtLm9uKCdmb2N1cy4nICsgaW5zdC5uYW1lLCB0aGlzLnNob3cpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChpbnN0LnRyaWdnZXIpIHtcclxuXHRcdFx0XHRpbnN0LnRyaWdnZXIucmVtb3ZlKCk7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIHRyaWdnZXIgPSBpbnN0Lm9wdGlvbnMuc2hvd1RyaWdnZXI7XHJcblx0XHRcdGluc3QudHJpZ2dlciA9ICghdHJpZ2dlciA/ICQoW10pIDpcclxuXHRcdFx0XHQkKHRyaWdnZXIpLmNsb25lKCkucmVtb3ZlQXR0cignaWQnKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpXHJcblx0XHRcdFx0XHRbaW5zdC5vcHRpb25zLmlzUlRMID8gJ2luc2VydEJlZm9yZScgOiAnaW5zZXJ0QWZ0ZXInXShlbGVtKS5cclxuXHRcdFx0XHRcdGNsaWNrKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIXBsdWdpbi5pc0Rpc2FibGVkKGVsZW1bMF0pKSB7XHJcblx0XHRcdFx0XHRcdFx0cGx1Z2luW3BsdWdpbi5jdXJJbnN0ID09PSBpbnN0ID8gJ2hpZGUnIDogJ3Nob3cnXShlbGVtWzBdKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSkpO1xyXG5cdFx0XHR0aGlzLl9hdXRvU2l6ZShlbGVtLCBpbnN0KTtcclxuXHRcdFx0dmFyIGRhdGVzID0gdGhpcy5fZXh0cmFjdERhdGVzKGluc3QsIGVsZW0udmFsKCkpO1xyXG5cdFx0XHRpZiAoZGF0ZXMpIHtcclxuXHRcdFx0XHR0aGlzLnNldERhdGUoZWxlbVswXSwgZGF0ZXMsIG51bGwsIHRydWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBkZWZhdWx0RGF0ZSA9IGluc3QuZ2V0KCdkZWZhdWx0RGF0ZScpO1xyXG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLnNlbGVjdERlZmF1bHREYXRlICYmIGRlZmF1bHREYXRlICYmIGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0XHR0aGlzLnNldERhdGUoZWxlbVswXSwgKGRlZmF1bHREYXRlIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpKS5uZXdEYXRlKCkpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBBcHBseSB0aGUgbWF4aW11bSBsZW5ndGggZm9yIHRoZSBkYXRlIGZvcm1hdC5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7alF1ZXJ5fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLiAqL1xyXG5cdFx0X2F1dG9TaXplOiBmdW5jdGlvbihlbGVtLCBpbnN0KSB7XHJcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMuYXV0b1NpemUgJiYgIWluc3QuaW5saW5lKSB7XHJcblx0XHRcdFx0dmFyIGNhbGVuZGFyID0gaW5zdC5vcHRpb25zLmNhbGVuZGFyO1xyXG5cdFx0XHRcdHZhciBkYXRlID0gY2FsZW5kYXIubmV3RGF0ZSgyMDA5LCAxMCwgMjApOyAvLyBFbnN1cmUgZG91YmxlIGRpZ2l0c1xyXG5cdFx0XHRcdHZhciBkYXRlRm9ybWF0ID0gaW5zdC5nZXQoJ2RhdGVGb3JtYXQnKTtcclxuXHRcdFx0XHRpZiAoZGF0ZUZvcm1hdC5tYXRjaCgvW0RNXS8pKSB7XHJcblx0XHRcdFx0XHR2YXIgZmluZE1heCA9IGZ1bmN0aW9uKG5hbWVzKSB7XHJcblx0XHRcdFx0XHRcdHZhciBtYXggPSAwO1xyXG5cdFx0XHRcdFx0XHR2YXIgbWF4SSA9IDA7XHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAobmFtZXNbaV0ubGVuZ3RoID4gbWF4KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRtYXggPSBuYW1lc1tpXS5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdFx0XHRtYXhJID0gaTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuIG1heEk7XHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0ZGF0ZS5tb250aChmaW5kTWF4KGNhbGVuZGFyLmxvY2FsW2RhdGVGb3JtYXQubWF0Y2goL01NLykgPyAvLyBMb25nZXN0IG1vbnRoXHJcblx0XHRcdFx0XHRcdCdtb250aE5hbWVzJyA6ICdtb250aE5hbWVzU2hvcnQnXSkgKyAxKTtcclxuXHRcdFx0XHRcdGRhdGUuZGF5KGZpbmRNYXgoY2FsZW5kYXIubG9jYWxbZGF0ZUZvcm1hdC5tYXRjaCgvREQvKSA/IC8vIExvbmdlc3QgZGF5XHJcblx0XHRcdFx0XHRcdCdkYXlOYW1lcycgOiAnZGF5TmFtZXNTaG9ydCddKSArIDIwIC0gZGF0ZS5kYXlPZldlZWsoKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGluc3QuZWxlbS5hdHRyKCdzaXplJywgZGF0ZS5mb3JtYXREYXRlKGRhdGVGb3JtYXQpLmxlbmd0aCk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0X3ByZURlc3Ryb3k6IGZ1bmN0aW9uKGVsZW0sIGluc3QpIHtcclxuXHRcdFx0aWYgKGluc3QudHJpZ2dlcikge1xyXG5cdFx0XHRcdGluc3QudHJpZ2dlci5yZW1vdmUoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbGVtLmVtcHR5KCkub2ZmKCcuJyArIGluc3QubmFtZSk7XHJcblx0XHRcdGlmIChpbnN0LmlubGluZSAmJiAkLmZuLm1vdXNld2hlZWwpIHtcclxuXHRcdFx0XHRlbGVtLnVubW91c2V3aGVlbCgpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghaW5zdC5pbmxpbmUgJiYgaW5zdC5vcHRpb25zLmF1dG9TaXplKSB7XHJcblx0XHRcdFx0ZWxlbS5yZW1vdmVBdHRyKCdzaXplJyk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEFwcGx5IG11bHRpcGxlIGV2ZW50IGZ1bmN0aW9ucy5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZm5zIHtmdW5jdGlvbn0gVGhlIGZ1bmN0aW9ucyB0byBhcHBseS5cclxuXHRcdFx0QGV4YW1wbGUgb25TaG93OiBtdWx0aXBsZUV2ZW50cyhmbjEsIGZuMiwgLi4uKSAqL1xyXG5cdFx0bXVsdGlwbGVFdmVudHM6IGZ1bmN0aW9uKGZucykge1xyXG5cdFx0XHR2YXIgZnVuY3MgPSBhcmd1bWVudHM7XHJcblx0XHRcdHJldHVybiBmdW5jdGlvbihhcmdzKSB7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0ZnVuY3NbaV0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH07XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBFbmFibGUgdGhlIGNvbnRyb2wuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGFmZmVjdC5cclxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuZGF0ZXBpY2soJ2VuYWJsZScpICovXHJcblx0XHRlbmFibGU6IGZ1bmN0aW9uKGVsZW0pIHtcclxuXHRcdFx0ZWxlbSA9ICQoZWxlbSk7XHJcblx0XHRcdGlmICghZWxlbS5oYXNDbGFzcyh0aGlzLl9nZXRNYXJrZXIoKSkpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoaW5zdC5pbmxpbmUpIHtcclxuXHRcdFx0XHRlbGVtLmNoaWxkcmVuKCcuJyArIHRoaXMuX2Rpc2FibGVDbGFzcykucmVtb3ZlKCkuZW5kKCkuXHJcblx0XHRcdFx0XHRmaW5kKCdidXR0b24sc2VsZWN0JykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSkuZW5kKCkuXHJcblx0XHRcdFx0XHRmaW5kKCdhJykuYXR0cignaHJlZicsICdqYXZhc2NyaXB0OnZvaWQoMCknKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRlbGVtLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xyXG5cdFx0XHRcdGluc3QudHJpZ2dlci5maWx0ZXIoJ2J1dHRvbi4nICsgdGhpcy5fdHJpZ2dlckNsYXNzKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKS5lbmQoKS5cclxuXHRcdFx0XHRcdGZpbHRlcignaW1nLicgKyB0aGlzLl90cmlnZ2VyQ2xhc3MpLmNzcyh7b3BhY2l0eTogJzEuMCcsIGN1cnNvcjogJyd9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLl9kaXNhYmxlZCA9ICQubWFwKHRoaXMuX2Rpc2FibGVkLFxyXG5cdFx0XHRcdGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiAodmFsdWUgPT09IGVsZW1bMF0gPyBudWxsIDogdmFsdWUpOyB9KTsgLy8gRGVsZXRlIGVudHJ5XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEaXNhYmxlIHRoZSBjb250cm9sLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXHJcblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdkaXNhYmxlJykgKi9cclxuXHRcdGRpc2FibGU6IGZ1bmN0aW9uKGVsZW0pIHtcclxuXHRcdFx0ZWxlbSA9ICQoZWxlbSk7XHJcblx0XHRcdGlmICghZWxlbS5oYXNDbGFzcyh0aGlzLl9nZXRNYXJrZXIoKSkpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoaW5zdC5pbmxpbmUpIHtcclxuXHRcdFx0XHR2YXIgaW5saW5lID0gZWxlbS5jaGlsZHJlbignOmxhc3QnKTtcclxuXHRcdFx0XHR2YXIgb2Zmc2V0ID0gaW5saW5lLm9mZnNldCgpO1xyXG5cdFx0XHRcdHZhciByZWxPZmZzZXQgPSB7bGVmdDogMCwgdG9wOiAwfTtcclxuXHRcdFx0XHRpbmxpbmUucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRpZiAoJCh0aGlzKS5jc3MoJ3Bvc2l0aW9uJykgPT09ICdyZWxhdGl2ZScpIHtcclxuXHRcdFx0XHRcdFx0cmVsT2Zmc2V0ID0gJCh0aGlzKS5vZmZzZXQoKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHZhciB6SW5kZXggPSBlbGVtLmNzcygnekluZGV4Jyk7XHJcblx0XHRcdFx0ekluZGV4ID0gKHpJbmRleCA9PT0gJ2F1dG8nID8gMCA6IHBhcnNlSW50KHpJbmRleCwgMTApKSArIDE7XHJcblx0XHRcdFx0ZWxlbS5wcmVwZW5kKCc8ZGl2IGNsYXNzPVwiJyArIHRoaXMuX2Rpc2FibGVDbGFzcyArICdcIiBzdHlsZT1cIicgK1xyXG5cdFx0XHRcdFx0J3dpZHRoOiAnICsgaW5saW5lLm91dGVyV2lkdGgoKSArICdweDsgaGVpZ2h0OiAnICsgaW5saW5lLm91dGVySGVpZ2h0KCkgK1xyXG5cdFx0XHRcdFx0J3B4OyBsZWZ0OiAnICsgKG9mZnNldC5sZWZ0IC0gcmVsT2Zmc2V0LmxlZnQpICsgJ3B4OyB0b3A6ICcgK1xyXG5cdFx0XHRcdFx0KG9mZnNldC50b3AgLSByZWxPZmZzZXQudG9wKSArICdweDsgei1pbmRleDogJyArIHpJbmRleCArICdcIj48L2Rpdj4nKS5cclxuXHRcdFx0XHRcdGZpbmQoJ2J1dHRvbixzZWxlY3QnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpLmVuZCgpLlxyXG5cdFx0XHRcdFx0ZmluZCgnYScpLnJlbW92ZUF0dHIoJ2hyZWYnKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRlbGVtLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcblx0XHRcdFx0aW5zdC50cmlnZ2VyLmZpbHRlcignYnV0dG9uLicgKyB0aGlzLl90cmlnZ2VyQ2xhc3MpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSkuZW5kKCkuXHJcblx0XHRcdFx0XHRmaWx0ZXIoJ2ltZy4nICsgdGhpcy5fdHJpZ2dlckNsYXNzKS5jc3Moe29wYWNpdHk6ICcwLjUnLCBjdXJzb3I6ICdkZWZhdWx0J30pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuX2Rpc2FibGVkID0gJC5tYXAodGhpcy5fZGlzYWJsZWQsXHJcblx0XHRcdFx0ZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuICh2YWx1ZSA9PT0gZWxlbVswXSA/IG51bGwgOiB2YWx1ZSk7IH0pOyAvLyBEZWxldGUgZW50cnlcclxuXHRcdFx0dGhpcy5fZGlzYWJsZWQucHVzaChlbGVtWzBdKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIElzIHRoZSBmaXJzdCBmaWVsZCBpbiBhIGpRdWVyeSBjb2xsZWN0aW9uIGRpc2FibGVkIGFzIGEgZGF0ZXBpY2tlcj9cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgZGlzYWJsZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBlbmFibGVkLlxyXG5cdFx0XHRAZXhhbXBsZSBpZiAoJChzZWxlY3RvcikuZGF0ZXBpY2soJ2lzRGlzYWJsZWQnKSkgey4uLn0gKi9cclxuXHRcdGlzRGlzYWJsZWQ6IGZ1bmN0aW9uKGVsZW0pIHtcclxuXHRcdFx0cmV0dXJuIChlbGVtICYmICQuaW5BcnJheShlbGVtLCB0aGlzLl9kaXNhYmxlZCkgPiAtMSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBTaG93IGEgcG9wdXAgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RXZlbnR8RWxlbWVudH0gYSBmb2N1cyBldmVudCBvciB0aGUgY29udHJvbCB0byB1c2UuXHJcblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdzaG93JykgKi9cclxuXHRcdHNob3c6IGZ1bmN0aW9uKGVsZW0pIHtcclxuXHRcdFx0ZWxlbSA9ICQoZWxlbS50YXJnZXQgfHwgZWxlbSk7XHJcblx0XHRcdHZhciBpbnN0ID0gcGx1Z2luLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAocGx1Z2luLmN1ckluc3QgPT09IGluc3QpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHBsdWdpbi5jdXJJbnN0KSB7XHJcblx0XHRcdFx0cGx1Z2luLmhpZGUocGx1Z2luLmN1ckluc3QsIHRydWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpKSB7XHJcblx0XHRcdFx0Ly8gUmV0cmlldmUgZXhpc3RpbmcgZGF0ZShzKVxyXG5cdFx0XHRcdGluc3QubGFzdFZhbCA9IG51bGw7XHJcblx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzID0gcGx1Z2luLl9leHRyYWN0RGF0ZXMoaW5zdCwgZWxlbS52YWwoKSk7XHJcblx0XHRcdFx0aW5zdC5waWNraW5nUmFuZ2UgPSBmYWxzZTtcclxuXHRcdFx0XHRpbnN0LmRyYXdEYXRlID0gcGx1Z2luLl9jaGVja01pbk1heCgoaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8XHJcblx0XHRcdFx0XHRpbnN0LmdldCgnZGVmYXVsdERhdGUnKSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKSkubmV3RGF0ZSgpLCBpbnN0KTtcclxuXHRcdFx0XHRpbnN0LnByZXZEYXRlID0gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCk7XHJcblx0XHRcdFx0cGx1Z2luLmN1ckluc3QgPSBpbnN0O1xyXG5cdFx0XHRcdC8vIEdlbmVyYXRlIGNvbnRlbnRcclxuXHRcdFx0XHRwbHVnaW4uX3VwZGF0ZShlbGVtWzBdLCB0cnVlKTtcclxuXHRcdFx0XHQvLyBBZGp1c3QgcG9zaXRpb24gYmVmb3JlIHNob3dpbmdcclxuXHRcdFx0XHR2YXIgb2Zmc2V0ID0gcGx1Z2luLl9jaGVja09mZnNldChpbnN0KTtcclxuXHRcdFx0XHRpbnN0LmRpdi5jc3Moe2xlZnQ6IG9mZnNldC5sZWZ0LCB0b3A6IG9mZnNldC50b3B9KTtcclxuXHRcdFx0XHQvLyBBbmQgZGlzcGxheVxyXG5cdFx0XHRcdHZhciBzaG93QW5pbSA9IGluc3Qub3B0aW9ucy5zaG93QW5pbTtcclxuXHRcdFx0XHR2YXIgc2hvd1NwZWVkID0gaW5zdC5vcHRpb25zLnNob3dTcGVlZDtcclxuXHRcdFx0XHRzaG93U3BlZWQgPSAoc2hvd1NwZWVkID09PSAnbm9ybWFsJyAmJiAkLnVpICYmXHJcblx0XHRcdFx0XHRwYXJzZUludCgkLnVpLnZlcnNpb24uc3Vic3RyaW5nKDIpKSA+PSA4ID8gJ19kZWZhdWx0JyA6IHNob3dTcGVlZCk7XHJcblx0XHRcdFx0aWYgKCQuZWZmZWN0cyAmJiAoJC5lZmZlY3RzW3Nob3dBbmltXSB8fCAoJC5lZmZlY3RzLmVmZmVjdCAmJiAkLmVmZmVjdHMuZWZmZWN0W3Nob3dBbmltXSkpKSB7XHJcblx0XHRcdFx0XHR2YXIgZGF0YSA9IGluc3QuZGl2LmRhdGEoKTsgLy8gVXBkYXRlIG9sZCBlZmZlY3RzIGRhdGFcclxuXHRcdFx0XHRcdGZvciAodmFyIGtleSBpbiBkYXRhKSB7XHJcblx0XHRcdFx0XHRcdGlmIChrZXkubWF0Y2goL15lY1xcLnN0b3JhZ2VcXC4vKSkge1xyXG5cdFx0XHRcdFx0XHRcdGRhdGFba2V5XSA9IGluc3QuX21haW5EaXYuY3NzKGtleS5yZXBsYWNlKC9lY1xcLnN0b3JhZ2VcXC4vLCAnJykpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpbnN0LmRpdi5kYXRhKGRhdGEpLnNob3coc2hvd0FuaW0sIGluc3Qub3B0aW9ucy5zaG93T3B0aW9ucywgc2hvd1NwZWVkKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRpbnN0LmRpdltzaG93QW5pbSB8fCAnc2hvdyddKHNob3dBbmltID8gc2hvd1NwZWVkIDogMCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBFeHRyYWN0IHBvc3NpYmxlIGRhdGVzIGZyb20gYSBzdHJpbmcuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBwYXJhbSB0ZXh0IHtzdHJpbmd9IFRoZSB0ZXh0IHRvIGV4dHJhY3QgZnJvbS5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGVbXX0gVGhlIGV4dHJhY3RlZCBkYXRlcy4gKi9cclxuXHRcdF9leHRyYWN0RGF0ZXM6IGZ1bmN0aW9uKGluc3QsIGRhdGVzVGV4dCkge1xyXG5cdFx0XHRpZiAoZGF0ZXNUZXh0ID09PSBpbnN0Lmxhc3RWYWwpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aW5zdC5sYXN0VmFsID0gZGF0ZXNUZXh0O1xyXG5cdFx0XHRkYXRlc1RleHQgPSBkYXRlc1RleHQuc3BsaXQoaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0ID8gaW5zdC5vcHRpb25zLm11bHRpU2VwYXJhdG9yIDpcclxuXHRcdFx0XHQoaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0ID8gaW5zdC5vcHRpb25zLnJhbmdlU2VwYXJhdG9yIDogJ1xceDAwJykpO1xyXG5cdFx0XHR2YXIgZGF0ZXMgPSBbXTtcclxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkYXRlc1RleHQubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0dmFyIGRhdGUgPSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIucGFyc2VEYXRlKGluc3QuZ2V0KCdkYXRlRm9ybWF0JyksIGRhdGVzVGV4dFtpXSk7XHJcblx0XHRcdFx0XHRpZiAoZGF0ZSkge1xyXG5cdFx0XHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBkYXRlcy5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChkYXRlc1tqXS5jb21wYXJlVG8oZGF0ZSkgPT09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoIWZvdW5kKSB7XHJcblx0XHRcdFx0XHRcdFx0ZGF0ZXMucHVzaChkYXRlKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjYXRjaCAoZSkge1xyXG5cdFx0XHRcdFx0Ly8gSWdub3JlXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGRhdGVzLnNwbGljZShpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgfHwgKGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCA/IDIgOiAxKSwgZGF0ZXMubGVuZ3RoKTtcclxuXHRcdFx0aWYgKGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCAmJiBkYXRlcy5sZW5ndGggPT09IDEpIHtcclxuXHRcdFx0XHRkYXRlc1sxXSA9IGRhdGVzWzBdO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBkYXRlcztcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFVwZGF0ZSB0aGUgZGF0ZXBpY2tlciBkaXNwbGF5LlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFdmVudHxFbGVtZW50fSBhIGZvY3VzIGV2ZW50IG9yIHRoZSBjb250cm9sIHRvIHVzZS5cclxuXHRcdFx0QHBhcmFtIGhpZGRlbiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gaW5pdGlhbGx5IGhpZGUgdGhlIGRhdGVwaWNrZXIuICovXHJcblx0XHRfdXBkYXRlOiBmdW5jdGlvbihlbGVtLCBoaWRkZW4pIHtcclxuXHRcdFx0ZWxlbSA9ICQoZWxlbS50YXJnZXQgfHwgZWxlbSk7XHJcblx0XHRcdHZhciBpbnN0ID0gcGx1Z2luLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xyXG5cdFx0XHRcdGlmIChpbnN0LmlubGluZSB8fCBwbHVnaW4uY3VySW5zdCA9PT0gaW5zdCkge1xyXG5cdFx0XHRcdFx0aWYgKCQuaXNGdW5jdGlvbihpbnN0Lm9wdGlvbnMub25DaGFuZ2VNb250aFllYXIpICYmICghaW5zdC5wcmV2RGF0ZSB8fFxyXG5cdFx0XHRcdFx0XHRcdGluc3QucHJldkRhdGUueWVhcigpICE9PSBpbnN0LmRyYXdEYXRlLnllYXIoKSB8fFxyXG5cdFx0XHRcdFx0XHRcdGluc3QucHJldkRhdGUubW9udGgoKSAhPT0gaW5zdC5kcmF3RGF0ZS5tb250aCgpKSkge1xyXG5cdFx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMub25DaGFuZ2VNb250aFllYXIuYXBwbHkoZWxlbVswXSxcclxuXHRcdFx0XHRcdFx0XHRbaW5zdC5kcmF3RGF0ZS55ZWFyKCksIGluc3QuZHJhd0RhdGUubW9udGgoKV0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoaW5zdC5pbmxpbmUpIHtcclxuXHRcdFx0XHRcdHZhciBpbmRleCA9ICQoJ2EsIDppbnB1dCcsIGVsZW0pLmluZGV4KCQoJzpmb2N1cycsIGVsZW0pKTtcclxuXHRcdFx0XHRcdGVsZW0uaHRtbCh0aGlzLl9nZW5lcmF0ZUNvbnRlbnQoZWxlbVswXSwgaW5zdCkpO1xyXG5cdFx0XHRcdFx0dmFyIGZvY3VzID0gZWxlbS5maW5kKCdhLCA6aW5wdXQnKTtcclxuXHRcdFx0XHRcdGZvY3VzLmVxKE1hdGgubWF4KE1hdGgubWluKGluZGV4LCBmb2N1cy5sZW5ndGggLSAxKSwgMCkpLmZvY3VzKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgaWYgKHBsdWdpbi5jdXJJbnN0ID09PSBpbnN0KSB7XHJcblx0XHRcdFx0XHRpZiAoIWluc3QuZGl2KSB7XHJcblx0XHRcdFx0XHRcdGluc3QuZGl2ID0gJCgnPGRpdj48L2Rpdj4nKS5hZGRDbGFzcyh0aGlzLl9wb3B1cENsYXNzKS5cclxuXHRcdFx0XHRcdFx0XHRjc3Moe2Rpc3BsYXk6IChoaWRkZW4gPyAnbm9uZScgOiAnc3RhdGljJyksIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGVmdDogZWxlbS5vZmZzZXQoKS5sZWZ0LCB0b3A6IGVsZW0ub2Zmc2V0KCkudG9wICsgZWxlbS5vdXRlckhlaWdodCgpfSkuXHJcblx0XHRcdFx0XHRcdFx0YXBwZW5kVG8oJChpbnN0Lm9wdGlvbnMucG9wdXBDb250YWluZXIgfHwgJ2JvZHknKSk7XHJcblx0XHRcdFx0XHRcdGlmICgkLmZuLm1vdXNld2hlZWwpIHtcclxuXHRcdFx0XHRcdFx0XHRpbnN0LmRpdi5tb3VzZXdoZWVsKHRoaXMuX2RvTW91c2VXaGVlbCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGluc3QuZGl2Lmh0bWwodGhpcy5fZ2VuZXJhdGVDb250ZW50KGVsZW1bMF0sIGluc3QpKTtcclxuXHRcdFx0XHRcdGVsZW0uZm9jdXMoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFVwZGF0ZSB0aGUgaW5wdXQgZmllbGQgYW5kIGFueSBhbHRlcm5hdGUgZmllbGQgd2l0aCB0aGUgY3VycmVudCBkYXRlcy5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gdXNlLlxyXG5cdFx0XHRAcGFyYW0ga2V5VXAge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGNvbWluZyBmcm9tIDxjb2RlPmtleVVwPC9jb2RlPiBwcm9jZXNzaW5nIChpbnRlcm5hbCkuICovXHJcblx0XHRfdXBkYXRlSW5wdXQ6IGZ1bmN0aW9uKGVsZW0sIGtleVVwKSB7XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcclxuXHRcdFx0XHR2YXIgdmFsdWUgPSAnJztcclxuXHRcdFx0XHR2YXIgYWx0VmFsdWUgPSAnJztcclxuXHRcdFx0XHR2YXIgc2VwID0gKGluc3Qub3B0aW9ucy5tdWx0aVNlbGVjdCA/IGluc3Qub3B0aW9ucy5tdWx0aVNlcGFyYXRvciA6XHJcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMucmFuZ2VTZXBhcmF0b3IpO1xyXG5cdFx0XHRcdHZhciBjYWxlbmRhciA9IGluc3Qub3B0aW9ucy5jYWxlbmRhcjtcclxuXHRcdFx0XHR2YXIgZGF0ZUZvcm1hdCA9IGluc3QuZ2V0KCdkYXRlRm9ybWF0Jyk7XHJcblx0XHRcdFx0dmFyIGFsdEZvcm1hdCA9IGluc3Qub3B0aW9ucy5hbHRGb3JtYXQgfHwgZGF0ZUZvcm1hdDtcclxuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0dmFsdWUgKz0gKGtleVVwID8gJycgOiAoaSA+IDAgPyBzZXAgOiAnJykgK1xyXG5cdFx0XHRcdFx0XHRjYWxlbmRhci5mb3JtYXREYXRlKGRhdGVGb3JtYXQsIGluc3Quc2VsZWN0ZWREYXRlc1tpXSkpO1xyXG5cdFx0XHRcdFx0YWx0VmFsdWUgKz0gKGkgPiAwID8gc2VwIDogJycpICtcclxuXHRcdFx0XHRcdFx0Y2FsZW5kYXIuZm9ybWF0RGF0ZShhbHRGb3JtYXQsIGluc3Quc2VsZWN0ZWREYXRlc1tpXSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICghaW5zdC5pbmxpbmUgJiYgIWtleVVwKSB7XHJcblx0XHRcdFx0XHQkKGVsZW0pLnZhbCh2YWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCQoaW5zdC5vcHRpb25zLmFsdEZpZWxkKS52YWwoYWx0VmFsdWUpO1xyXG5cdFx0XHRcdGlmICgkLmlzRnVuY3Rpb24oaW5zdC5vcHRpb25zLm9uU2VsZWN0KSAmJiAha2V5VXAgJiYgIWluc3QuaW5TZWxlY3QpIHtcclxuXHRcdFx0XHRcdGluc3QuaW5TZWxlY3QgPSB0cnVlOyAvLyBQcmV2ZW50IGVuZGxlc3MgbG9vcHNcclxuXHRcdFx0XHRcdGluc3Qub3B0aW9ucy5vblNlbGVjdC5hcHBseShlbGVtLCBbaW5zdC5zZWxlY3RlZERhdGVzXSk7XHJcblx0XHRcdFx0XHRpbnN0LmluU2VsZWN0ID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiBsZWZ0IGFuZCB0b3AgYm9yZGVycyBmb3IgYW4gZWxlbWVudC5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7alF1ZXJ5fSBUaGUgZWxlbWVudCBvZiBpbnRlcmVzdC5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyW119IFRoZSBsZWZ0IGFuZCB0b3AgYm9yZGVycy4gKi9cclxuXHRcdF9nZXRCb3JkZXJzOiBmdW5jdGlvbihlbGVtKSB7XHJcblx0XHRcdHZhciBjb252ZXJ0ID0gZnVuY3Rpb24odmFsdWUpIHtcclxuXHRcdFx0XHRyZXR1cm4ge3RoaW46IDEsIG1lZGl1bTogMywgdGhpY2s6IDV9W3ZhbHVlXSB8fCB2YWx1ZTtcclxuXHRcdFx0fTtcclxuXHRcdFx0cmV0dXJuIFtwYXJzZUZsb2F0KGNvbnZlcnQoZWxlbS5jc3MoJ2JvcmRlci1sZWZ0LXdpZHRoJykpKSxcclxuXHRcdFx0XHRwYXJzZUZsb2F0KGNvbnZlcnQoZWxlbS5jc3MoJ2JvcmRlci10b3Atd2lkdGgnKSkpXTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENoZWNrIHBvc2l0aW9uaW5nIHRvIHJlbWFpbiBvbiB0aGUgc2NyZWVuLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IFRoZSB1cGRhdGVkIG9mZnNldCBmb3IgdGhlIGRhdGVwaWNrZXIuICovXHJcblx0XHRfY2hlY2tPZmZzZXQ6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0dmFyIGJhc2UgPSAoaW5zdC5lbGVtLmlzKCc6aGlkZGVuJykgJiYgaW5zdC50cmlnZ2VyID8gaW5zdC50cmlnZ2VyIDogaW5zdC5lbGVtKTtcclxuXHRcdFx0dmFyIG9mZnNldCA9IGJhc2Uub2Zmc2V0KCk7XHJcblx0XHRcdHZhciBicm93c2VyV2lkdGggPSAkKHdpbmRvdykud2lkdGgoKTtcclxuXHRcdFx0dmFyIGJyb3dzZXJIZWlnaHQgPSAkKHdpbmRvdykuaGVpZ2h0KCk7XHJcblx0XHRcdGlmIChicm93c2VyV2lkdGggPT09IDApIHtcclxuXHRcdFx0XHRyZXR1cm4gb2Zmc2V0O1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBpc0ZpeGVkID0gZmFsc2U7XHJcblx0XHRcdCQoaW5zdC5lbGVtKS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRpc0ZpeGVkIHw9ICQodGhpcykuY3NzKCdwb3NpdGlvbicpID09PSAnZml4ZWQnO1xyXG5cdFx0XHRcdHJldHVybiAhaXNGaXhlZDtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHZhciBzY3JvbGxYID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0O1xyXG5cdFx0XHR2YXIgc2Nyb2xsWSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7XHJcblx0XHRcdHZhciBhYm92ZSA9IG9mZnNldC50b3AgLSAoaXNGaXhlZCA/IHNjcm9sbFkgOiAwKSAtIGluc3QuZGl2Lm91dGVySGVpZ2h0KCk7XHJcblx0XHRcdHZhciBiZWxvdyA9IG9mZnNldC50b3AgLSAoaXNGaXhlZCA/IHNjcm9sbFkgOiAwKSArIGJhc2Uub3V0ZXJIZWlnaHQoKTtcclxuXHRcdFx0dmFyIGFsaWduTCA9IG9mZnNldC5sZWZ0IC0gKGlzRml4ZWQgPyBzY3JvbGxYIDogMCk7XHJcblx0XHRcdHZhciBhbGlnblIgPSBvZmZzZXQubGVmdCAtIChpc0ZpeGVkID8gc2Nyb2xsWCA6IDApICsgYmFzZS5vdXRlcldpZHRoKCkgLSBpbnN0LmRpdi5vdXRlcldpZHRoKCk7XHJcblx0XHRcdHZhciB0b29XaWRlID0gKG9mZnNldC5sZWZ0IC0gc2Nyb2xsWCArIGluc3QuZGl2Lm91dGVyV2lkdGgoKSkgPiBicm93c2VyV2lkdGg7XHJcblx0XHRcdHZhciB0b29IaWdoID0gKG9mZnNldC50b3AgLSBzY3JvbGxZICsgaW5zdC5lbGVtLm91dGVySGVpZ2h0KCkgK1xyXG5cdFx0XHRcdGluc3QuZGl2Lm91dGVySGVpZ2h0KCkpID4gYnJvd3NlckhlaWdodDtcclxuXHRcdFx0aW5zdC5kaXYuY3NzKCdwb3NpdGlvbicsIGlzRml4ZWQgPyAnZml4ZWQnIDogJ2Fic29sdXRlJyk7XHJcblx0XHRcdHZhciBhbGlnbm1lbnQgPSBpbnN0Lm9wdGlvbnMuYWxpZ25tZW50O1xyXG5cdFx0XHRpZiAoYWxpZ25tZW50ID09PSAndG9wTGVmdCcpIHtcclxuXHRcdFx0XHRvZmZzZXQgPSB7bGVmdDogYWxpZ25MLCB0b3A6IGFib3ZlfTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmIChhbGlnbm1lbnQgPT09ICd0b3BSaWdodCcpIHtcclxuXHRcdFx0XHRvZmZzZXQgPSB7bGVmdDogYWxpZ25SLCB0b3A6IGFib3ZlfTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmIChhbGlnbm1lbnQgPT09ICdib3R0b21MZWZ0Jykge1xyXG5cdFx0XHRcdG9mZnNldCA9IHtsZWZ0OiBhbGlnbkwsIHRvcDogYmVsb3d9O1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKGFsaWdubWVudCA9PT0gJ2JvdHRvbVJpZ2h0Jykge1xyXG5cdFx0XHRcdG9mZnNldCA9IHtsZWZ0OiBhbGlnblIsIHRvcDogYmVsb3d9O1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKGFsaWdubWVudCA9PT0gJ3RvcCcpIHtcclxuXHRcdFx0XHRvZmZzZXQgPSB7bGVmdDogKGluc3Qub3B0aW9ucy5pc1JUTCB8fCB0b29XaWRlID8gYWxpZ25SIDogYWxpZ25MKSwgdG9wOiBhYm92ZX07XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7IC8vIGJvdHRvbVxyXG5cdFx0XHRcdG9mZnNldCA9IHtsZWZ0OiAoaW5zdC5vcHRpb25zLmlzUlRMIHx8IHRvb1dpZGUgPyBhbGlnblIgOiBhbGlnbkwpLFxyXG5cdFx0XHRcdFx0dG9wOiAodG9vSGlnaCA/IGFib3ZlIDogYmVsb3cpfTtcclxuXHRcdFx0fVxyXG5cdFx0XHRvZmZzZXQubGVmdCA9IE1hdGgubWF4KChpc0ZpeGVkID8gMCA6IHNjcm9sbFgpLCBvZmZzZXQubGVmdCk7XHJcblx0XHRcdG9mZnNldC50b3AgPSBNYXRoLm1heCgoaXNGaXhlZCA/IDAgOiBzY3JvbGxZKSwgb2Zmc2V0LnRvcCk7XHJcblx0XHRcdHJldHVybiBvZmZzZXQ7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDbG9zZSBkYXRlIHBpY2tlciBpZiBjbGlja2VkIGVsc2V3aGVyZS5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZXZlbnQge01vdXNlRXZlbnR9IFRoZSBtb3VzZSBjbGljayB0byBjaGVjay4gKi9cclxuXHRcdF9jaGVja0V4dGVybmFsQ2xpY2s6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblx0XHRcdGlmICghcGx1Z2luLmN1ckluc3QpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIGVsZW0gPSAkKGV2ZW50LnRhcmdldCk7XHJcblx0XHRcdGlmIChlbGVtLmNsb3Nlc3QoJy4nICsgcGx1Z2luLl9wb3B1cENsYXNzICsgJywuJyArIHBsdWdpbi5fdHJpZ2dlckNsYXNzKS5sZW5ndGggPT09IDAgJiZcclxuXHRcdFx0XHRcdCFlbGVtLmhhc0NsYXNzKHBsdWdpbi5fZ2V0TWFya2VyKCkpKSB7XHJcblx0XHRcdFx0cGx1Z2luLmhpZGUocGx1Z2luLmN1ckluc3QpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBIaWRlIGEgcG9wdXAgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudHxvYmplY3R9IFRoZSBjb250cm9sIHRvIHVzZSBvciB0aGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QHBhcmFtIGltbWVkaWF0ZSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gY2xvc2UgaW1tZWRpYXRlbHkgd2l0aG91dCBhbmltYXRpb24gKGludGVybmFsKS5cclxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuZGF0ZXBpY2soJ2hpZGUnKSAqL1xyXG5cdFx0aGlkZTogZnVuY3Rpb24oZWxlbSwgaW1tZWRpYXRlKSB7XHJcblx0XHRcdGlmICghZWxlbSkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdGlmICgkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcclxuXHRcdFx0XHRpbnN0ID0gZWxlbTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoaW5zdCAmJiBpbnN0ID09PSBwbHVnaW4uY3VySW5zdCkge1xyXG5cdFx0XHRcdHZhciBzaG93QW5pbSA9IChpbW1lZGlhdGUgPyAnJyA6IGluc3Qub3B0aW9ucy5zaG93QW5pbSk7XHJcblx0XHRcdFx0dmFyIHNob3dTcGVlZCA9IGluc3Qub3B0aW9ucy5zaG93U3BlZWQ7XHJcblx0XHRcdFx0c2hvd1NwZWVkID0gKHNob3dTcGVlZCA9PT0gJ25vcm1hbCcgJiYgJC51aSAmJlxyXG5cdFx0XHRcdFx0cGFyc2VJbnQoJC51aS52ZXJzaW9uLnN1YnN0cmluZygyKSkgPj0gOCA/ICdfZGVmYXVsdCcgOiBzaG93U3BlZWQpO1xyXG5cdFx0XHRcdHZhciBwb3N0UHJvY2VzcyA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0aWYgKCFpbnN0LmRpdikge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpbnN0LmRpdi5yZW1vdmUoKTtcclxuXHRcdFx0XHRcdGluc3QuZGl2ID0gbnVsbDtcclxuXHRcdFx0XHRcdHBsdWdpbi5jdXJJbnN0ID0gbnVsbDtcclxuXHRcdFx0XHRcdGlmICgkLmlzRnVuY3Rpb24oaW5zdC5vcHRpb25zLm9uQ2xvc2UpKSB7XHJcblx0XHRcdFx0XHRcdGluc3Qub3B0aW9ucy5vbkNsb3NlLmFwcGx5KGVsZW0sIFtpbnN0LnNlbGVjdGVkRGF0ZXNdKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGluc3QuZGl2LnN0b3AoKTtcclxuXHRcdFx0XHRpZiAoJC5lZmZlY3RzICYmICgkLmVmZmVjdHNbc2hvd0FuaW1dIHx8ICgkLmVmZmVjdHMuZWZmZWN0ICYmICQuZWZmZWN0cy5lZmZlY3Rbc2hvd0FuaW1dKSkpIHtcclxuXHRcdFx0XHRcdGluc3QuZGl2LmhpZGUoc2hvd0FuaW0sIGluc3Qub3B0aW9ucy5zaG93T3B0aW9ucywgc2hvd1NwZWVkLCBwb3N0UHJvY2Vzcyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0dmFyIGhpZGVBbmltID0gKHNob3dBbmltID09PSAnc2xpZGVEb3duJyA/ICdzbGlkZVVwJyA6XHJcblx0XHRcdFx0XHRcdChzaG93QW5pbSA9PT0gJ2ZhZGVJbicgPyAnZmFkZU91dCcgOiAnaGlkZScpKTtcclxuXHRcdFx0XHRcdGluc3QuZGl2W2hpZGVBbmltXSgoc2hvd0FuaW0gPyBzaG93U3BlZWQgOiAnJyksIHBvc3RQcm9jZXNzKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCFzaG93QW5pbSkge1xyXG5cdFx0XHRcdFx0cG9zdFByb2Nlc3MoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEhhbmRsZSBrZXlzdHJva2VzIGluIHRoZSBkYXRlcGlja2VyLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBldmVudCB7S2V5RXZlbnR9IFRoZSBrZXlzdHJva2UuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIG5vdCBoYW5kbGVkLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgaGFuZGxlZC4gKi9cclxuXHRcdF9rZXlEb3duOiBmdW5jdGlvbihldmVudCkge1xyXG5cdFx0XHR2YXIgZWxlbSA9IChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuZWxlbSkgfHwgZXZlbnQudGFyZ2V0O1xyXG5cdFx0XHR2YXIgaW5zdCA9IHBsdWdpbi5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0dmFyIGhhbmRsZWQgPSBmYWxzZTtcclxuXHRcdFx0aWYgKGluc3QuaW5saW5lIHx8IGluc3QuZGl2KSB7XHJcblx0XHRcdFx0aWYgKGV2ZW50LmtleUNvZGUgPT09IDkpIHsgLy8gVGFiIC0gY2xvc2VcclxuXHRcdFx0XHRcdHBsdWdpbi5oaWRlKGVsZW0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSAxMykgeyAvLyBFbnRlciAtIHNlbGVjdFxyXG5cdFx0XHRcdFx0cGx1Z2luLnNlbGVjdERhdGUoZWxlbSxcclxuXHRcdFx0XHRcdFx0JCgnYS4nICsgaW5zdC5vcHRpb25zLnJlbmRlcmVyLmhpZ2hsaWdodGVkQ2xhc3MsIGluc3QuZGl2KVswXSk7XHJcblx0XHRcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7IC8vIENvbW1hbmQga2V5c3Ryb2tlc1xyXG5cdFx0XHRcdFx0dmFyIGNvbW1hbmRzID0gaW5zdC5vcHRpb25zLmNvbW1hbmRzO1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBjb21tYW5kcykge1xyXG5cdFx0XHRcdFx0XHR2YXIgY29tbWFuZCA9IGNvbW1hbmRzW25hbWVdO1xyXG5cdFx0XHRcdFx0XHRpZiAoY29tbWFuZC5rZXlzdHJva2Uua2V5Q29kZSA9PT0gZXZlbnQua2V5Q29kZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0ISFjb21tYW5kLmtleXN0cm9rZS5jdHJsS2V5ID09PSAhIShldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmXHJcblx0XHRcdFx0XHRcdFx0XHQhIWNvbW1hbmQua2V5c3Ryb2tlLmFsdEtleSA9PT0gZXZlbnQuYWx0S2V5ICYmXHJcblx0XHRcdFx0XHRcdFx0XHQhIWNvbW1hbmQua2V5c3Ryb2tlLnNoaWZ0S2V5ID09PSBldmVudC5zaGlmdEtleSkge1xyXG5cdFx0XHRcdFx0XHRcdHBsdWdpbi5wZXJmb3JtQWN0aW9uKGVsZW0sIG5hbWUpO1xyXG5cdFx0XHRcdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgeyAvLyBTaG93IG9uICdjdXJyZW50JyBrZXlzdHJva2VcclxuXHRcdFx0XHR2YXIgY29tbWFuZCA9IGluc3Qub3B0aW9ucy5jb21tYW5kcy5jdXJyZW50O1xyXG5cdFx0XHRcdGlmIChjb21tYW5kLmtleXN0cm9rZS5rZXlDb2RlID09PSBldmVudC5rZXlDb2RlICYmXHJcblx0XHRcdFx0XHRcdCEhY29tbWFuZC5rZXlzdHJva2UuY3RybEtleSA9PT0gISEoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJlxyXG5cdFx0XHRcdFx0XHQhIWNvbW1hbmQua2V5c3Ryb2tlLmFsdEtleSA9PT0gZXZlbnQuYWx0S2V5ICYmXHJcblx0XHRcdFx0XHRcdCEhY29tbWFuZC5rZXlzdHJva2Uuc2hpZnRLZXkgPT09IGV2ZW50LnNoaWZ0S2V5KSB7XHJcblx0XHRcdFx0XHRwbHVnaW4uc2hvdyhlbGVtKTtcclxuXHRcdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpbnN0LmN0cmxLZXkgPSAoKGV2ZW50LmtleUNvZGUgPCA0OCAmJiBldmVudC5rZXlDb2RlICE9PSAzMikgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KTtcclxuXHRcdFx0aWYgKGhhbmRsZWQpIHtcclxuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiAhaGFuZGxlZDtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEZpbHRlciBrZXlzdHJva2VzIGluIHRoZSBkYXRlcGlja2VyLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBldmVudCB7S2V5RXZlbnR9IFRoZSBrZXlzdHJva2UuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGFsbG93ZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QgYWxsb3dlZC4gKi9cclxuXHRcdF9rZXlQcmVzczogZnVuY3Rpb24oZXZlbnQpIHtcclxuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoKGV2ZW50LmRhdGEgJiYgZXZlbnQuZGF0YS5lbGVtKSB8fCBldmVudC50YXJnZXQpO1xyXG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSAmJiBpbnN0Lm9wdGlvbnMuY29uc3RyYWluSW5wdXQpIHtcclxuXHRcdFx0XHR2YXIgY2ggPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmtleUNvZGUgfHwgZXZlbnQuY2hhckNvZGUpO1xyXG5cdFx0XHRcdHZhciBhbGxvd2VkQ2hhcnMgPSBwbHVnaW4uX2FsbG93ZWRDaGFycyhpbnN0KTtcclxuXHRcdFx0XHRyZXR1cm4gKGV2ZW50Lm1ldGFLZXkgfHwgaW5zdC5jdHJsS2V5IHx8IGNoIDwgJyAnIHx8XHJcblx0XHRcdFx0XHQhYWxsb3dlZENoYXJzIHx8IGFsbG93ZWRDaGFycy5pbmRleE9mKGNoKSA+IC0xKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgYWxsb3dlZCBieSB0aGUgZGF0ZSBmb3JtYXQuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEByZXR1cm4ge3N0cmluZ30gVGhlIHNldCBvZiBhbGxvd2VkIGNoYXJhY3RlcnMsIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIGFueXRoaW5nIGFsbG93ZWQuICovXHJcblx0XHRfYWxsb3dlZENoYXJzOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdHZhciBhbGxvd2VkQ2hhcnMgPSAoaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0ID8gaW5zdC5vcHRpb25zLm11bHRpU2VwYXJhdG9yIDpcclxuXHRcdFx0XHQoaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0ID8gaW5zdC5vcHRpb25zLnJhbmdlU2VwYXJhdG9yIDogJycpKTtcclxuXHRcdFx0dmFyIGxpdGVyYWwgPSBmYWxzZTtcclxuXHRcdFx0dmFyIGhhc051bSA9IGZhbHNlO1xyXG5cdFx0XHR2YXIgZGF0ZUZvcm1hdCA9IGluc3QuZ2V0KCdkYXRlRm9ybWF0Jyk7XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGF0ZUZvcm1hdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdHZhciBjaCA9IGRhdGVGb3JtYXQuY2hhckF0KGkpO1xyXG5cdFx0XHRcdGlmIChsaXRlcmFsKSB7XHJcblx0XHRcdFx0XHRpZiAoY2ggPT09IFwiJ1wiICYmIGRhdGVGb3JtYXQuY2hhckF0KGkgKyAxKSAhPT0gXCInXCIpIHtcclxuXHRcdFx0XHRcdFx0bGl0ZXJhbCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdGFsbG93ZWRDaGFycyArPSBjaDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRzd2l0Y2ggKGNoKSB7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ2QnOiBjYXNlICdtJzogY2FzZSAnbyc6IGNhc2UgJ3cnOlxyXG5cdFx0XHRcdFx0XHRcdGFsbG93ZWRDaGFycyArPSAoaGFzTnVtID8gJycgOiAnMDEyMzQ1Njc4OScpOyBoYXNOdW0gPSB0cnVlOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAneSc6IGNhc2UgJ0AnOiBjYXNlICchJzpcclxuXHRcdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gKGhhc051bSA/ICcnIDogJzAxMjM0NTY3ODknKSArICctJzsgaGFzTnVtID0gdHJ1ZTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ0onOlxyXG5cdFx0XHRcdFx0XHRcdGFsbG93ZWRDaGFycyArPSAoaGFzTnVtID8gJycgOiAnMDEyMzQ1Njc4OScpICsgJy0uJzsgaGFzTnVtID0gdHJ1ZTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ0QnOiBjYXNlICdNJzogY2FzZSAnWSc6XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7IC8vIEFjY2VwdCBhbnl0aGluZ1xyXG5cdFx0XHRcdFx0XHRjYXNlIFwiJ1wiOlxyXG5cdFx0XHRcdFx0XHRcdGlmIChkYXRlRm9ybWF0LmNoYXJBdChpICsgMSkgPT09IFwiJ1wiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhbGxvd2VkQ2hhcnMgKz0gXCInXCI7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0bGl0ZXJhbCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0XHRcdGFsbG93ZWRDaGFycyArPSBjaDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGFsbG93ZWRDaGFycztcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFN5bmNocm9uaXNlIGRhdGVwaWNrZXIgd2l0aCB0aGUgZmllbGQuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGV2ZW50IHtLZXlFdmVudH0gVGhlIGtleXN0cm9rZS5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYWxsb3dlZCwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdCBhbGxvd2VkLiAqL1xyXG5cdFx0X2tleVVwOiBmdW5jdGlvbihldmVudCkge1xyXG5cdFx0XHR2YXIgZWxlbSA9IChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuZWxlbSkgfHwgZXZlbnQudGFyZ2V0O1xyXG5cdFx0XHR2YXIgaW5zdCA9IHBsdWdpbi5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkgJiYgIWluc3QuY3RybEtleSAmJiBpbnN0Lmxhc3RWYWwgIT09IGluc3QuZWxlbS52YWwoKSkge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHR2YXIgZGF0ZXMgPSBwbHVnaW4uX2V4dHJhY3REYXRlcyhpbnN0LCBpbnN0LmVsZW0udmFsKCkpO1xyXG5cdFx0XHRcdFx0aWYgKGRhdGVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0cGx1Z2luLnNldERhdGUoZWxlbSwgZGF0ZXMsIG51bGwsIHRydWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjYXRjaCAoZXZlbnQpIHtcclxuXHRcdFx0XHRcdC8vIElnbm9yZVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEluY3JlbWVudC9kZWNyZW1lbnQgbW9udGgveWVhciBvbiBtb3VzZSB3aGVlbCBhY3Rpdml0eS5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZXZlbnQge2V2ZW50fSBUaGUgbW91c2Ugd2hlZWwgZXZlbnQuXHJcblx0XHRcdEBwYXJhbSBkZWx0YSB7bnVtYmVyfSBUaGUgYW1vdW50IG9mIGNoYW5nZS4gKi9cclxuXHRcdF9kb01vdXNlV2hlZWw6IGZ1bmN0aW9uKGV2ZW50LCBkZWx0YSkge1xyXG5cdFx0XHR2YXIgZWxlbSA9IChwbHVnaW4uY3VySW5zdCAmJiBwbHVnaW4uY3VySW5zdC5lbGVtWzBdKSB8fFxyXG5cdFx0XHRcdCQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCcuJyArIHBsdWdpbi5fZ2V0TWFya2VyKCkpWzBdO1xyXG5cdFx0XHRpZiAocGx1Z2luLmlzRGlzYWJsZWQoZWxlbSkpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMudXNlTW91c2VXaGVlbCkge1xyXG5cdFx0XHRcdGRlbHRhID0gKGRlbHRhIDwgMCA/IC0xIDogKzEpO1xyXG5cdFx0XHRcdHBsdWdpbi5jaGFuZ2VNb250aChlbGVtLCAtaW5zdC5vcHRpb25zW2V2ZW50LmN0cmxLZXkgPyAnbW9udGhzVG9KdW1wJyA6ICdtb250aHNUb1N0ZXAnXSAqIGRlbHRhKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ2xlYXIgYW4gaW5wdXQgYW5kIGNsb3NlIGEgcG9wdXAgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gdXNlLlxyXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnY2xlYXInKSAqL1xyXG5cdFx0Y2xlYXI6IGZ1bmN0aW9uKGVsZW0pIHtcclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xyXG5cdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IFtdO1xyXG5cdFx0XHRcdHRoaXMuaGlkZShlbGVtKTtcclxuXHRcdFx0XHR2YXIgZGVmYXVsdERhdGUgPSBpbnN0LmdldCgnZGVmYXVsdERhdGUnKTtcclxuXHRcdFx0XHRpZiAoaW5zdC5vcHRpb25zLnNlbGVjdERlZmF1bHREYXRlICYmIGRlZmF1bHREYXRlKSB7XHJcblx0XHRcdFx0XHR0aGlzLnNldERhdGUoZWxlbSwgKGRlZmF1bHREYXRlIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpKS5uZXdEYXRlKCkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUlucHV0KGVsZW0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIHNlbGVjdGVkIGRhdGUocykgZm9yIGEgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGVbXX0gVGhlIHNlbGVjdGVkIGRhdGUocykuXHJcblx0XHRcdEBleGFtcGxlIHZhciBkYXRlcyA9ICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdnZXREYXRlJykgKi9cclxuXHRcdGdldERhdGU6IGZ1bmN0aW9uKGVsZW0pIHtcclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRyZXR1cm4gKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkgPyBpbnN0LnNlbGVjdGVkRGF0ZXMgOiBbXSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBTZXQgdGhlIHNlbGVjdGVkIGRhdGUocykgZm9yIGEgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gdGhlIGNvbnRyb2wgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIGRhdGVzIHtDRGF0ZXxudW1iZXJ8c3RyaW5nfGFycmF5fSB0aGUgc2VsZWN0ZWQgZGF0ZShzKS5cclxuXHRcdFx0QHBhcmFtIFtlbmREYXRlXSB7Q0RhdGV8bnVtYmVyfHN0cmluZ30gdGhlIGVuZGluZyBkYXRlIGZvciBhIHJhbmdlLlxyXG5cdFx0XHRAcGFyYW0gW2tleVVwXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgY29taW5nIGZyb20gPGNvZGU+a2V5VXA8L2NvZGU+IHByb2Nlc3NpbmcgKGludGVybmFsKS5cclxuXHRcdFx0QHBhcmFtIFtzZXRPcHRdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBjb21pbmcgZnJvbSBvcHRpb24gcHJvY2Vzc2luZyAoaW50ZXJuYWwpLlxyXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnc2V0RGF0ZScsIG5ldyBEYXRlKDIwMTQsIDEyLTEsIDI1KSlcclxuICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdzZXREYXRlJywgJzEyLzI1LzIwMTQnLCAnMDEvMDEvMjAxNScpXHJcbiAkKHNlbGVjdG9yKS5kYXRlcGljaygnc2V0RGF0ZScsIFtkYXRlMSwgZGF0ZTIsIGRhdGUzXSkgKi9cclxuXHRcdHNldERhdGU6IGZ1bmN0aW9uKGVsZW0sIGRhdGVzLCBlbmREYXRlLCBrZXlVcCwgc2V0T3B0KSB7XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcclxuXHRcdFx0XHRpZiAoISQuaXNBcnJheShkYXRlcykpIHtcclxuXHRcdFx0XHRcdGRhdGVzID0gW2RhdGVzXTtcclxuXHRcdFx0XHRcdGlmIChlbmREYXRlKSB7XHJcblx0XHRcdFx0XHRcdGRhdGVzLnB1c2goZW5kRGF0ZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5nZXQoJ21pbkRhdGUnKTtcclxuXHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XHJcblx0XHRcdFx0dmFyIGN1ckRhdGUgPSBpbnN0LnNlbGVjdGVkRGF0ZXNbMF07XHJcblx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzID0gW107XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkYXRlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0dmFyIGRhdGUgPSBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIuZGV0ZXJtaW5lRGF0ZShcclxuXHRcdFx0XHRcdFx0ZGF0ZXNbaV0sIG51bGwsIGN1ckRhdGUsIGluc3QuZ2V0KCdkYXRlRm9ybWF0JyksIGluc3QuZ2V0Q29uZmlnKCkpO1xyXG5cdFx0XHRcdFx0aWYgKGRhdGUpIHtcclxuXHRcdFx0XHRcdFx0aWYgKCghbWluRGF0ZSB8fCBkYXRlLmNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpICYmXHJcblx0XHRcdFx0XHRcdFx0XHQoIW1heERhdGUgfHwgZGF0ZS5jb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKSkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoaW5zdC5zZWxlY3RlZERhdGVzW2pdLmNvbXBhcmVUbyhkYXRlKSA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAoIWZvdW5kKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXMucHVzaChkYXRlKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzLnNwbGljZShpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgfHxcclxuXHRcdFx0XHRcdChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgPyAyIDogMSksIGluc3Quc2VsZWN0ZWREYXRlcy5sZW5ndGgpO1xyXG5cdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QpIHtcclxuXHRcdFx0XHRcdHN3aXRjaCAoaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRjYXNlIDE6IGluc3Quc2VsZWN0ZWREYXRlc1sxXSA9IGluc3Quc2VsZWN0ZWREYXRlc1swXTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgMjogaW5zdC5zZWxlY3RlZERhdGVzWzFdID1cclxuXHRcdFx0XHRcdFx0XHQoaW5zdC5zZWxlY3RlZERhdGVzWzBdLmNvbXBhcmVUbyhpbnN0LnNlbGVjdGVkRGF0ZXNbMV0pID09PSArMSA/XHJcblx0XHRcdFx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzWzBdIDogaW5zdC5zZWxlY3RlZERhdGVzWzFdKTsgYnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpbnN0LnBpY2tpbmdSYW5nZSA9IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpbnN0LnByZXZEYXRlID0gKGluc3QuZHJhd0RhdGUgPyBpbnN0LmRyYXdEYXRlLm5ld0RhdGUoKSA6IG51bGwpO1xyXG5cdFx0XHRcdGluc3QuZHJhd0RhdGUgPSB0aGlzLl9jaGVja01pbk1heCgoaW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8XHJcblx0XHRcdFx0XHRpbnN0LmdldCgnZGVmYXVsdERhdGUnKSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKSkubmV3RGF0ZSgpLCBpbnN0KTtcclxuXHRcdFx0XHRpZiAoIXNldE9wdCkge1xyXG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlKGVsZW0pO1xyXG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlSW5wdXQoZWxlbSwga2V5VXApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgYSBkYXRlIGlzIHNlbGVjdGFibGUgZm9yIHRoaXMgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gY2hlY2suXHJcblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZXxzdHJpbmd8bnVtYmVyfSBUaGUgZGF0ZSB0byBjaGVjay5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgc2VsZWN0YWJsZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QGV4YW1wbGUgdmFyIHNlbGVjdGFibGUgPSAkKHNlbGVjdG9yKS5kYXRlcGljaygnaXNTZWxlY3RhYmxlJywgZGF0ZSkgKi9cclxuXHRcdGlzU2VsZWN0YWJsZTogZnVuY3Rpb24oZWxlbSwgZGF0ZSkge1xyXG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdGlmICgkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdFx0ZGF0ZSA9IGluc3Qub3B0aW9ucy5jYWxlbmRhci5kZXRlcm1pbmVEYXRlKGRhdGUsXHJcblx0XHRcdFx0aW5zdC5zZWxlY3RlZERhdGVzWzBdIHx8IGluc3Qub3B0aW9ucy5jYWxlbmRhci50b2RheSgpLCBudWxsLFxyXG5cdFx0XHRcdGluc3Qub3B0aW9ucy5kYXRlRm9ybWF0LCBpbnN0LmdldENvbmZpZygpKTtcclxuXHRcdFx0cmV0dXJuIHRoaXMuX2lzU2VsZWN0YWJsZShlbGVtLCBkYXRlLCBpbnN0Lm9wdGlvbnMub25EYXRlLFxyXG5cdFx0XHRcdGluc3QuZ2V0KCdtaW5EYXRlJyksIGluc3QuZ2V0KCdtYXhEYXRlJykpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogSW50ZXJuYWxseSBkZXRlcm1pbmUgd2hldGhlciBhIGRhdGUgaXMgc2VsZWN0YWJsZSBmb3IgdGhpcyBkYXRlcGlja2VyLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSB0aGUgY29udHJvbCB0byBjaGVjay5cclxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgZGF0ZSB0byBjaGVjay5cclxuXHRcdFx0QHBhcmFtIG9uRGF0ZSB7ZnVuY3Rpb258Ym9vbGVhbn0gQW55IDxjb2RlPm9uRGF0ZTwvY29kZT4gY2FsbGJhY2sgb3IgPGNvZGU+Y2FsbGJhY2suc2VsZWN0YWJsZTwvY29kZT4uXHJcblx0XHRcdEBwYXJhbSBtaW5EYXRlIHtDRGF0ZX0gVGhlIG1pbmltdW0gYWxsb3dlZCBkYXRlLlxyXG5cdFx0XHRAcGFyYW0gbWF4RGF0ZSB7Q0RhdGV9IFRoZSBtYXhpbXVtIGFsbG93ZWQgZGF0ZS5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgc2VsZWN0YWJsZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC4gKi9cclxuXHRcdF9pc1NlbGVjdGFibGU6IGZ1bmN0aW9uKGVsZW0sIGRhdGUsIG9uRGF0ZSwgbWluRGF0ZSwgbWF4RGF0ZSkge1xyXG5cdFx0XHR2YXIgZGF0ZUluZm8gPSAodHlwZW9mIG9uRGF0ZSA9PT0gJ2Jvb2xlYW4nID8ge3NlbGVjdGFibGU6IG9uRGF0ZX0gOlxyXG5cdFx0XHRcdCghJC5pc0Z1bmN0aW9uKG9uRGF0ZSkgPyB7fSA6IG9uRGF0ZS5hcHBseShlbGVtLCBbZGF0ZSwgdHJ1ZV0pKSk7XHJcblx0XHRcdHJldHVybiAoZGF0ZUluZm8uc2VsZWN0YWJsZSAhPT0gZmFsc2UpICYmXHJcblx0XHRcdFx0KCFtaW5EYXRlIHx8IGRhdGUudG9KRCgpID49IG1pbkRhdGUudG9KRCgpKSAmJiAoIW1heERhdGUgfHwgZGF0ZS50b0pEKCkgPD0gbWF4RGF0ZS50b0pEKCkpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUGVyZm9ybSBhIG5hbWVkIGFjdGlvbiBmb3IgYSBkYXRlcGlja2VyLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtlbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXHJcblx0XHRcdEBwYXJhbSBhY3Rpb24ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIGFjdGlvbi4gKi9cclxuXHRcdHBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uKGVsZW0sIGFjdGlvbikge1xyXG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdGlmICghJC5pc0VtcHR5T2JqZWN0KGluc3QpICYmICF0aGlzLmlzRGlzYWJsZWQoZWxlbSkpIHtcclxuXHRcdFx0XHR2YXIgY29tbWFuZHMgPSBpbnN0Lm9wdGlvbnMuY29tbWFuZHM7XHJcblx0XHRcdFx0aWYgKGNvbW1hbmRzW2FjdGlvbl0gJiYgY29tbWFuZHNbYWN0aW9uXS5lbmFibGVkLmFwcGx5KGVsZW0sIFtpbnN0XSkpIHtcclxuXHRcdFx0XHRcdGNvbW1hbmRzW2FjdGlvbl0uYWN0aW9uLmFwcGx5KGVsZW0sIFtpbnN0XSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBTZXQgdGhlIGN1cnJlbnRseSBzaG93biBtb250aCwgZGVmYXVsdGluZyB0byB0b2RheSdzLlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXHJcblx0XHRcdEBwYXJhbSBbeWVhcl0ge251bWJlcn0gVGhlIHllYXIgdG8gc2hvdy5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIHNob3cgKDEtMTIpLlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBzaG93LlxyXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5kYXRlcGljaygnc2hvd01vbnRoJywgMjAxNCwgMTIsIDI1KSAqL1xyXG5cdFx0c2hvd01vbnRoOiBmdW5jdGlvbihlbGVtLCB5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkgJiYgKGRheSAhPSBudWxsIHx8XHJcblx0XHRcdFx0XHQoaW5zdC5kcmF3RGF0ZS55ZWFyKCkgIT09IHllYXIgfHwgaW5zdC5kcmF3RGF0ZS5tb250aCgpICE9PSBtb250aCkpKSB7XHJcblx0XHRcdFx0aW5zdC5wcmV2RGF0ZSA9IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpO1xyXG5cdFx0XHRcdHZhciBjYWxlbmRhciA9IGluc3Qub3B0aW9ucy5jYWxlbmRhcjtcclxuXHRcdFx0XHR2YXIgc2hvdyA9IHRoaXMuX2NoZWNrTWluTWF4KCh5ZWFyICE9IG51bGwgP1xyXG5cdFx0XHRcdFx0Y2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBtb250aCwgMSkgOiBjYWxlbmRhci50b2RheSgpKSwgaW5zdCk7XHJcblx0XHRcdFx0aW5zdC5kcmF3RGF0ZS5kYXRlKHNob3cueWVhcigpLCBzaG93Lm1vbnRoKCksIFxyXG5cdFx0XHRcdFx0KGRheSAhPSBudWxsID8gZGF5IDogTWF0aC5taW4oaW5zdC5kcmF3RGF0ZS5kYXkoKSxcclxuXHRcdFx0XHRcdGNhbGVuZGFyLmRheXNJbk1vbnRoKHNob3cueWVhcigpLCBzaG93Lm1vbnRoKCkpKSkpO1xyXG5cdFx0XHRcdHRoaXMuX3VwZGF0ZShlbGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQWRqdXN0IHRoZSBjdXJyZW50bHkgc2hvd24gbW9udGguXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGFmZmVjdC5cclxuXHRcdFx0QHBhcmFtIG9mZnNldCB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIG1vbnRocyB0byBjaGFuZ2UgYnkuXHJcblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdjaGFuZ2VNb250aCcsIDIpKi9cclxuXHRcdGNoYW5nZU1vbnRoOiBmdW5jdGlvbihlbGVtLCBvZmZzZXQpIHtcclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSkge1xyXG5cdFx0XHRcdHZhciBkYXRlID0gaW5zdC5kcmF3RGF0ZS5uZXdEYXRlKCkuYWRkKG9mZnNldCwgJ20nKTtcclxuXHRcdFx0XHR0aGlzLnNob3dNb250aChlbGVtLCBkYXRlLnllYXIoKSwgZGF0ZS5tb250aCgpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQWRqdXN0IHRoZSBjdXJyZW50bHkgc2hvd24gZGF5LlxyXG5cdFx0XHRAbWVtYmVyb2YgQ2FsZW5kYXJzUGlja2VyXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBhZmZlY3QuXHJcblx0XHRcdEBwYXJhbSBvZmZzZXQge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzIHRvIGNoYW5nZSBieS5cclxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikuZGF0ZXBpY2soJ2NoYW5nZURheScsIDcpKi9cclxuXHRcdGNoYW5nZURheTogZnVuY3Rpb24oZWxlbSwgb2Zmc2V0KSB7XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0aWYgKCEkLmlzRW1wdHlPYmplY3QoaW5zdCkpIHtcclxuXHRcdFx0XHR2YXIgZGF0ZSA9IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZChvZmZzZXQsICdkJyk7XHJcblx0XHRcdFx0dGhpcy5zaG93TW9udGgoZWxlbSwgZGF0ZS55ZWFyKCksIGRhdGUubW9udGgoKSwgZGF0ZS5kYXkoKSk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJlc3RyaWN0IGEgZGF0ZSB0byB0aGUgbWluaW11bS9tYXhpbXVtIHNwZWNpZmllZC5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZGF0ZSB7Q0RhdGV9IFRoZSBkYXRlIHRvIGNoZWNrLlxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy4gKi9cclxuXHRcdF9jaGVja01pbk1heDogZnVuY3Rpb24oZGF0ZSwgaW5zdCkge1xyXG5cdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuZ2V0KCdtaW5EYXRlJyk7XHJcblx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcclxuXHRcdFx0ZGF0ZSA9IChtaW5EYXRlICYmIGRhdGUuY29tcGFyZVRvKG1pbkRhdGUpID09PSAtMSA/IG1pbkRhdGUubmV3RGF0ZSgpIDogZGF0ZSk7XHJcblx0XHRcdGRhdGUgPSAobWF4RGF0ZSAmJiBkYXRlLmNvbXBhcmVUbyhtYXhEYXRlKSA9PT0gKzEgPyBtYXhEYXRlLm5ld0RhdGUoKSA6IGRhdGUpO1xyXG5cdFx0XHRyZXR1cm4gZGF0ZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBkYXRlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbnRyeSBpbiB0aGUgZGF0ZXBpY2tlci5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIHRhcmdldCB7RWxlbWVudH0gVGhlIHNlbGVjdGVkIGRhdGVwaWNrZXIgZWxlbWVudC5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBjb3JyZXNwb25kaW5nIGRhdGUsIG9yIDxjb2RlPm51bGw8L2NvZGU+Llx0XHRcdFxyXG5cdFx0XHRAZXhhbXBsZSB2YXIgZGF0ZSA9ICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdyZXRyaWV2ZURhdGUnLCAkKCdkaXYuZGF0ZXBpY2stcG9wdXAgYTpjb250YWlucygxMCknKVswXSkgKi9cclxuXHRcdHJldHJpZXZlRGF0ZTogZnVuY3Rpb24oZWxlbSwgdGFyZ2V0KSB7XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0cmV0dXJuICgkLmlzRW1wdHlPYmplY3QoaW5zdCkgPyBudWxsIDogaW5zdC5vcHRpb25zLmNhbGVuZGFyLmZyb21KRChcclxuXHRcdFx0XHRwYXJzZUZsb2F0KHRhcmdldC5jbGFzc05hbWUucmVwbGFjZSgvXi4qamQoXFxkK1xcLjUpLiokLywgJyQxJykpKSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBTZWxlY3QgYSBkYXRlIGZvciB0aGlzIGRhdGVwaWNrZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSB0YXJnZXQge0VsZW1lbnR9IFRoZSBzZWxlY3RlZCBkYXRlcGlja2VyIGVsZW1lbnQuXHJcblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLmRhdGVwaWNrKCdzZWxlY3REYXRlJywgJCgnZGl2LmRhdGVwaWNrLXBvcHVwIGE6Y29udGFpbnMoMTApJylbMF0pICovXHJcblx0XHRzZWxlY3REYXRlOiBmdW5jdGlvbihlbGVtLCB0YXJnZXQpIHtcclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoISQuaXNFbXB0eU9iamVjdChpbnN0KSAmJiAhdGhpcy5pc0Rpc2FibGVkKGVsZW0pKSB7XHJcblx0XHRcdFx0dmFyIGRhdGUgPSB0aGlzLnJldHJpZXZlRGF0ZShlbGVtLCB0YXJnZXQpO1xyXG5cdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QpIHtcclxuXHRcdFx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0aWYgKGRhdGUuY29tcGFyZVRvKGluc3Quc2VsZWN0ZWREYXRlc1tpXSkgPT09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXMuc3BsaWNlKGksIDEpO1xyXG5cdFx0XHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCFmb3VuZCAmJiBpbnN0LnNlbGVjdGVkRGF0ZXMubGVuZ3RoIDwgaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0KSB7XHJcblx0XHRcdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcy5wdXNoKGRhdGUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QpIHtcclxuXHRcdFx0XHRcdGlmIChpbnN0LnBpY2tpbmdSYW5nZSkge1xyXG5cdFx0XHRcdFx0XHRpbnN0LnNlbGVjdGVkRGF0ZXNbMV0gPSBkYXRlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IFtkYXRlLCBkYXRlXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGluc3QucGlja2luZ1JhbmdlID0gIWluc3QucGlja2luZ1JhbmdlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdGluc3Quc2VsZWN0ZWREYXRlcyA9IFtkYXRlXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aW5zdC5wcmV2RGF0ZSA9IGluc3QuZHJhd0RhdGUgPSBkYXRlLm5ld0RhdGUoKTtcclxuXHRcdFx0XHR0aGlzLl91cGRhdGVJbnB1dChlbGVtKTtcclxuXHRcdFx0XHRpZiAoaW5zdC5pbmxpbmUgfHwgaW5zdC5waWNraW5nUmFuZ2UgfHwgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aCA8XHJcblx0XHRcdFx0XHRcdChpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgfHwgKGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCA/IDIgOiAxKSkpIHtcclxuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZShlbGVtKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLmhpZGUoZWxlbSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBHZW5lcmF0ZSB0aGUgZGF0ZXBpY2tlciBjb250ZW50IGZvciB0aGlzIGNvbnRyb2wuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBjb250cm9sIHRvIGFmZmVjdC5cclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEByZXR1cm4ge2pRdWVyeX0gVGhlIGRhdGVwaWNrZXIgY29udGVudCAqL1xyXG5cdFx0X2dlbmVyYXRlQ29udGVudDogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xyXG5cdFx0XHR2YXIgbW9udGhzVG9TaG93ID0gaW5zdC5vcHRpb25zLm1vbnRoc1RvU2hvdztcclxuXHRcdFx0bW9udGhzVG9TaG93ID0gKCQuaXNBcnJheShtb250aHNUb1Nob3cpID8gbW9udGhzVG9TaG93IDogWzEsIG1vbnRoc1RvU2hvd10pO1xyXG5cdFx0XHRpbnN0LmRyYXdEYXRlID0gdGhpcy5fY2hlY2tNaW5NYXgoXHJcblx0XHRcdFx0aW5zdC5kcmF3RGF0ZSB8fCBpbnN0LmdldCgnZGVmYXVsdERhdGUnKSB8fCBpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKSwgaW5zdCk7XHJcblx0XHRcdHZhciBkcmF3RGF0ZSA9IGluc3QuZHJhd0RhdGUubmV3RGF0ZSgpLmFkZCgtaW5zdC5vcHRpb25zLm1vbnRoc09mZnNldCwgJ20nKTtcclxuXHRcdFx0Ly8gR2VuZXJhdGUgbW9udGhzXHJcblx0XHRcdHZhciBtb250aFJvd3MgPSAnJztcclxuXHRcdFx0Zm9yICh2YXIgcm93ID0gMDsgcm93IDwgbW9udGhzVG9TaG93WzBdOyByb3crKykge1xyXG5cdFx0XHRcdHZhciBtb250aHMgPSAnJztcclxuXHRcdFx0XHRmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBtb250aHNUb1Nob3dbMV07IGNvbCsrKSB7XHJcblx0XHRcdFx0XHRtb250aHMgKz0gdGhpcy5fZ2VuZXJhdGVNb250aChlbGVtLCBpbnN0LCBkcmF3RGF0ZS55ZWFyKCksXHJcblx0XHRcdFx0XHRcdGRyYXdEYXRlLm1vbnRoKCksIGluc3Qub3B0aW9ucy5jYWxlbmRhciwgaW5zdC5vcHRpb25zLnJlbmRlcmVyLCAocm93ID09PSAwICYmIGNvbCA9PT0gMCkpO1xyXG5cdFx0XHRcdFx0ZHJhd0RhdGUuYWRkKDEsICdtJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdG1vbnRoUm93cyArPSB0aGlzLl9wcmVwYXJlKGluc3Qub3B0aW9ucy5yZW5kZXJlci5tb250aFJvdywgaW5zdCkucmVwbGFjZSgvXFx7bW9udGhzXFx9LywgbW9udGhzKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgcGlja2VyID0gdGhpcy5fcHJlcGFyZShpbnN0Lm9wdGlvbnMucmVuZGVyZXIucGlja2VyLCBpbnN0KS5yZXBsYWNlKC9cXHttb250aHNcXH0vLCBtb250aFJvd3MpLlxyXG5cdFx0XHRcdHJlcGxhY2UoL1xce3dlZWtIZWFkZXJcXH0vZywgdGhpcy5fZ2VuZXJhdGVEYXlIZWFkZXJzKGluc3QsIGluc3Qub3B0aW9ucy5jYWxlbmRhciwgaW5zdC5vcHRpb25zLnJlbmRlcmVyKSk7XHJcblx0XHRcdC8vIEFkZCBjb21tYW5kc1xyXG5cdFx0XHR2YXIgYWRkQ29tbWFuZCA9IGZ1bmN0aW9uKHR5cGUsIG9wZW4sIGNsb3NlLCBuYW1lLCBjbGFzc2VzKSB7XHJcblx0XHRcdFx0aWYgKHBpY2tlci5pbmRleE9mKCd7JyArIHR5cGUgKyAnOicgKyBuYW1lICsgJ30nKSA9PT0gLTEpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dmFyIGNvbW1hbmQgPSBpbnN0Lm9wdGlvbnMuY29tbWFuZHNbbmFtZV07XHJcblx0XHRcdFx0dmFyIGRhdGUgPSAoaW5zdC5vcHRpb25zLmNvbW1hbmRzQXNEYXRlRm9ybWF0ID8gY29tbWFuZC5kYXRlLmFwcGx5KGVsZW0sIFtpbnN0XSkgOiBudWxsKTtcclxuXHRcdFx0XHRwaWNrZXIgPSBwaWNrZXIucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxceycgKyB0eXBlICsgJzonICsgbmFtZSArICdcXFxcfScsICdnJyksXHJcblx0XHRcdFx0XHQnPCcgKyBvcGVuICsgKGNvbW1hbmQuc3RhdHVzID8gJyB0aXRsZT1cIicgKyBpbnN0Lm9wdGlvbnNbY29tbWFuZC5zdGF0dXNdICsgJ1wiJyA6ICcnKSArXHJcblx0XHRcdFx0XHQnIGNsYXNzPVwiJyArIGluc3Qub3B0aW9ucy5yZW5kZXJlci5jb21tYW5kQ2xhc3MgKyAnICcgK1xyXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRDbGFzcyArICctJyArIG5hbWUgKyAnICcgKyBjbGFzc2VzICtcclxuXHRcdFx0XHRcdChjb21tYW5kLmVuYWJsZWQoaW5zdCkgPyAnJyA6ICcgJyArIGluc3Qub3B0aW9ucy5yZW5kZXJlci5kaXNhYmxlZENsYXNzKSArICdcIj4nICtcclxuXHRcdFx0XHRcdChkYXRlID8gZGF0ZS5mb3JtYXREYXRlKGluc3Qub3B0aW9uc1tjb21tYW5kLnRleHRdKSA6XHJcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnNbY29tbWFuZC50ZXh0XSkgKyAnPC8nICsgY2xvc2UgKyAnPicpO1xyXG5cdFx0XHR9O1xyXG5cdFx0XHRmb3IgKHZhciBuYW1lIGluIGluc3Qub3B0aW9ucy5jb21tYW5kcykge1xyXG5cdFx0XHRcdGFkZENvbW1hbmQoJ2J1dHRvbicsICdidXR0b24gdHlwZT1cImJ1dHRvblwiJywgJ2J1dHRvbicsIG5hbWUsXHJcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMucmVuZGVyZXIuY29tbWFuZEJ1dHRvbkNsYXNzKTtcclxuXHRcdFx0XHRhZGRDb21tYW5kKCdsaW5rJywgJ2EgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiJywgJ2EnLCBuYW1lLFxyXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRMaW5rQ2xhc3MpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHBpY2tlciA9ICQocGlja2VyKTtcclxuXHRcdFx0aWYgKG1vbnRoc1RvU2hvd1sxXSA+IDEpIHtcclxuXHRcdFx0XHR2YXIgY291bnQgPSAwO1xyXG5cdFx0XHRcdCQoaW5zdC5vcHRpb25zLnJlbmRlcmVyLm1vbnRoU2VsZWN0b3IsIHBpY2tlcikuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHZhciBudGggPSArK2NvdW50ICUgbW9udGhzVG9TaG93WzFdO1xyXG5cdFx0XHRcdFx0JCh0aGlzKS5hZGRDbGFzcyhudGggPT09IDEgPyAnZmlyc3QnIDogKG50aCA9PT0gMCA/ICdsYXN0JyA6ICcnKSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gQWRkIGRhdGVwaWNrZXIgYmVoYXZpb3VyXHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0ZnVuY3Rpb24gcmVtb3ZlSGlnaGxpZ2h0KCkge1xyXG5cdFx0XHRcdChpbnN0LmlubGluZSA/ICQodGhpcykuY2xvc2VzdCgnLicgKyBzZWxmLl9nZXRNYXJrZXIoKSkgOiBpbnN0LmRpdikuXHJcblx0XHRcdFx0XHRmaW5kKGluc3Qub3B0aW9ucy5yZW5kZXJlci5kYXlTZWxlY3RvciArICcgYScpLlxyXG5cdFx0XHRcdFx0cmVtb3ZlQ2xhc3MoaW5zdC5vcHRpb25zLnJlbmRlcmVyLmhpZ2hsaWdodGVkQ2xhc3MpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHBpY2tlci5maW5kKGluc3Qub3B0aW9ucy5yZW5kZXJlci5kYXlTZWxlY3RvciArICcgYScpLmhvdmVyKFxyXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdHJlbW92ZUhpZ2hsaWdodC5hcHBseSh0aGlzKTtcclxuXHRcdFx0XHRcdFx0JCh0aGlzKS5hZGRDbGFzcyhpbnN0Lm9wdGlvbnMucmVuZGVyZXIuaGlnaGxpZ2h0ZWRDbGFzcyk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0cmVtb3ZlSGlnaGxpZ2h0KS5cclxuXHRcdFx0XHRjbGljayhmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHNlbGYuc2VsZWN0RGF0ZShlbGVtLCB0aGlzKTtcclxuXHRcdFx0XHR9KS5lbmQoKS5cclxuXHRcdFx0XHRmaW5kKCdzZWxlY3QuJyArIHRoaXMuX21vbnRoWWVhckNsYXNzICsgJzpub3QoLicgKyB0aGlzLl9hbnlZZWFyQ2xhc3MgKyAnKScpLlxyXG5cdFx0XHRcdGNoYW5nZShmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHZhciBtb250aFllYXIgPSAkKHRoaXMpLnZhbCgpLnNwbGl0KCcvJyk7XHJcblx0XHRcdFx0XHRzZWxmLnNob3dNb250aChlbGVtLCBwYXJzZUludChtb250aFllYXJbMV0sIDEwKSwgcGFyc2VJbnQobW9udGhZZWFyWzBdLCAxMCkpO1xyXG5cdFx0XHRcdH0pLmVuZCgpLlxyXG5cdFx0XHRcdGZpbmQoJ3NlbGVjdC4nICsgdGhpcy5fYW55WWVhckNsYXNzKS5jbGljayhmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdCQodGhpcykuY3NzKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpLlxyXG5cdFx0XHRcdFx0XHRuZXh0KCdpbnB1dCcpLmNzcyh7bGVmdDogdGhpcy5vZmZzZXRMZWZ0LCB0b3A6IHRoaXMub2Zmc2V0VG9wLFxyXG5cdFx0XHRcdFx0XHR3aWR0aDogdGhpcy5vZmZzZXRXaWR0aCwgaGVpZ2h0OiB0aGlzLm9mZnNldEhlaWdodH0pLnNob3coKS5mb2N1cygpO1xyXG5cdFx0XHRcdH0pLmVuZCgpLlxyXG5cdFx0XHRcdGZpbmQoJ2lucHV0LicgKyBzZWxmLl9tb250aFllYXJDbGFzcykuY2hhbmdlKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0dmFyIHllYXIgPSBwYXJzZUludCgkKHRoaXMpLnZhbCgpLCAxMCk7XHJcblx0XHRcdFx0XHRcdHllYXIgPSAoaXNOYU4oeWVhcikgPyBpbnN0LmRyYXdEYXRlLnllYXIoKSA6IHllYXIpO1xyXG5cdFx0XHRcdFx0XHRzZWxmLnNob3dNb250aChlbGVtLCB5ZWFyLCBpbnN0LmRyYXdEYXRlLm1vbnRoKCksIGluc3QuZHJhd0RhdGUuZGF5KCkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRcdFx0YWxlcnQoZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSkua2V5ZG93bihmdW5jdGlvbihldmVudCkge1xyXG5cdFx0XHRcdFx0aWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7IC8vIEVudGVyXHJcblx0XHRcdFx0XHRcdCQoZXZlbnQuZWxlbSkuY2hhbmdlKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSAyNykgeyAvLyBFc2NhcGVcclxuXHRcdFx0XHRcdFx0JChldmVudC5lbGVtKS5oaWRlKCkucHJldignc2VsZWN0JykuY3NzKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcclxuXHRcdFx0XHRcdFx0aW5zdC5lbGVtLmZvY3VzKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdC8vIEFkZCBrZXlib2FyZCBoYW5kbGluZ1xyXG5cdFx0XHR2YXIgZGF0YSA9IHtlbGVtOiBpbnN0LmVsZW1bMF19O1xyXG5cdFx0XHRwaWNrZXIua2V5ZG93bihkYXRhLCB0aGlzLl9rZXlEb3duKS5rZXlwcmVzcyhkYXRhLCB0aGlzLl9rZXlQcmVzcykua2V5dXAoZGF0YSwgdGhpcy5fa2V5VXApO1xyXG5cdFx0XHQvLyBBZGQgY29tbWFuZCBiZWhhdmlvdXJcclxuXHRcdFx0cGlja2VyLmZpbmQoJy4nICsgaW5zdC5vcHRpb25zLnJlbmRlcmVyLmNvbW1hbmRDbGFzcykuY2xpY2soZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRpZiAoISQodGhpcykuaGFzQ2xhc3MoaW5zdC5vcHRpb25zLnJlbmRlcmVyLmRpc2FibGVkQ2xhc3MpKSB7XHJcblx0XHRcdFx0XHRcdHZhciBhY3Rpb24gPSB0aGlzLmNsYXNzTmFtZS5yZXBsYWNlKFxyXG5cdFx0XHRcdFx0XHRcdG5ldyBSZWdFeHAoJ14uKicgKyBpbnN0Lm9wdGlvbnMucmVuZGVyZXIuY29tbWFuZENsYXNzICsgJy0oW14gXSspLiokJyksICckMScpO1xyXG5cdFx0XHRcdFx0XHRwbHVnaW4ucGVyZm9ybUFjdGlvbihlbGVtLCBhY3Rpb24pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHQvLyBBZGQgY2xhc3Nlc1xyXG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLmlzUlRMKSB7XHJcblx0XHRcdFx0cGlja2VyLmFkZENsYXNzKGluc3Qub3B0aW9ucy5yZW5kZXJlci5ydGxDbGFzcyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKG1vbnRoc1RvU2hvd1swXSAqIG1vbnRoc1RvU2hvd1sxXSA+IDEpIHtcclxuXHRcdFx0XHRwaWNrZXIuYWRkQ2xhc3MoaW5zdC5vcHRpb25zLnJlbmRlcmVyLm11bHRpQ2xhc3MpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucGlja2VyQ2xhc3MpIHtcclxuXHRcdFx0XHRwaWNrZXIuYWRkQ2xhc3MoaW5zdC5vcHRpb25zLnBpY2tlckNsYXNzKTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBSZXNpemVcclxuXHRcdFx0JCgnYm9keScpLmFwcGVuZChwaWNrZXIpO1xyXG5cdFx0XHR2YXIgd2lkdGggPSAwO1xyXG5cdFx0XHRwaWNrZXIuZmluZChpbnN0Lm9wdGlvbnMucmVuZGVyZXIubW9udGhTZWxlY3RvcikuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHR3aWR0aCArPSAkKHRoaXMpLm91dGVyV2lkdGgoKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHBpY2tlci53aWR0aCh3aWR0aCAvIG1vbnRoc1RvU2hvd1swXSk7XHJcblx0XHRcdC8vIFByZS1zaG93IGN1c3RvbWlzYXRpb25cclxuXHRcdFx0aWYgKCQuaXNGdW5jdGlvbihpbnN0Lm9wdGlvbnMub25TaG93KSkge1xyXG5cdFx0XHRcdGluc3Qub3B0aW9ucy5vblNob3cuYXBwbHkoZWxlbSwgW3BpY2tlciwgaW5zdC5vcHRpb25zLmNhbGVuZGFyLCBpbnN0XSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHBpY2tlcjtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEdlbmVyYXRlIHRoZSBjb250ZW50IGZvciBhIHNpbmdsZSBtb250aC5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gYWZmZWN0LlxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIHllYXIgdG8gZ2VuZXJhdGUuXHJcblx0XHRcdEBwYXJhbSBtb250aCB7bnVtYmVyfSBUaGUgbW9udGggdG8gZ2VuZXJhdGUuXHJcblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY3VycmVudCBjYWxlbmRhci5cclxuXHRcdFx0QHBhcmFtIHJlbmRlcmVyIHtvYmplY3R9IFRoZSByZW5kZXJpbmcgdGVtcGxhdGVzLlxyXG5cdFx0XHRAcGFyYW0gZmlyc3Qge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGZpcnN0IG9mIG11bHRpcGxlIG1vbnRocy5cclxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgbW9udGggY29udGVudC4gKi9cclxuXHRcdF9nZW5lcmF0ZU1vbnRoOiBmdW5jdGlvbihlbGVtLCBpbnN0LCB5ZWFyLCBtb250aCwgY2FsZW5kYXIsIHJlbmRlcmVyLCBmaXJzdCkge1xyXG5cdFx0XHR2YXIgZGF5c0luTW9udGggPSBjYWxlbmRhci5kYXlzSW5Nb250aCh5ZWFyLCBtb250aCk7XHJcblx0XHRcdHZhciBtb250aHNUb1Nob3cgPSBpbnN0Lm9wdGlvbnMubW9udGhzVG9TaG93O1xyXG5cdFx0XHRtb250aHNUb1Nob3cgPSAoJC5pc0FycmF5KG1vbnRoc1RvU2hvdykgPyBtb250aHNUb1Nob3cgOiBbMSwgbW9udGhzVG9TaG93XSk7XHJcblx0XHRcdHZhciBmaXhlZFdlZWtzID0gaW5zdC5vcHRpb25zLmZpeGVkV2Vla3MgfHwgKG1vbnRoc1RvU2hvd1swXSAqIG1vbnRoc1RvU2hvd1sxXSA+IDEpO1xyXG5cdFx0XHR2YXIgZmlyc3REYXkgPSBpbnN0Lm9wdGlvbnMuZmlyc3REYXk7XHJcblx0XHRcdGZpcnN0RGF5ID0gKGZpcnN0RGF5ID09IG51bGwgPyBjYWxlbmRhci5sb2NhbC5maXJzdERheSA6IGZpcnN0RGF5KTtcclxuXHRcdFx0dmFyIGxlYWREYXlzID0gKGNhbGVuZGFyLmRheU9mV2Vlayh5ZWFyLCBtb250aCwgY2FsZW5kYXIubWluRGF5KSAtXHJcblx0XHRcdFx0Zmlyc3REYXkgKyBjYWxlbmRhci5kYXlzSW5XZWVrKCkpICUgY2FsZW5kYXIuZGF5c0luV2VlaygpO1xyXG5cdFx0XHR2YXIgbnVtV2Vla3MgPSAoZml4ZWRXZWVrcyA/IDYgOiBNYXRoLmNlaWwoKGxlYWREYXlzICsgZGF5c0luTW9udGgpIC8gY2FsZW5kYXIuZGF5c0luV2VlaygpKSk7XHJcblx0XHRcdHZhciBzZWxlY3RPdGhlck1vbnRocyA9IGluc3Qub3B0aW9ucy5zZWxlY3RPdGhlck1vbnRocyAmJiBpbnN0Lm9wdGlvbnMuc2hvd090aGVyTW9udGhzO1xyXG5cdFx0XHR2YXIgbWluRGF0ZSA9IChpbnN0LnBpY2tpbmdSYW5nZSA/IGluc3Quc2VsZWN0ZWREYXRlc1swXSA6IGluc3QuZ2V0KCdtaW5EYXRlJykpO1xyXG5cdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XHJcblx0XHRcdHZhciBzaG93V2Vla3MgPSByZW5kZXJlci53ZWVrLmluZGV4T2YoJ3t3ZWVrT2ZZZWFyfScpID4gLTE7XHJcblx0XHRcdHZhciB0b2RheSA9IGNhbGVuZGFyLnRvZGF5KCk7XHJcblx0XHRcdHZhciBkcmF3RGF0ZSA9IGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbW9udGgsIGNhbGVuZGFyLm1pbkRheSk7XHJcblx0XHRcdGRyYXdEYXRlLmFkZCgtbGVhZERheXMgLSAoZml4ZWRXZWVrcyAmJlxyXG5cdFx0XHRcdChkcmF3RGF0ZS5kYXlPZldlZWsoKSA9PT0gZmlyc3REYXkgfHwgZHJhd0RhdGUuZGF5c0luTW9udGgoKSA8IGNhbGVuZGFyLmRheXNJbldlZWsoKSk/XHJcblx0XHRcdFx0Y2FsZW5kYXIuZGF5c0luV2VlaygpIDogMCksICdkJyk7XHJcblx0XHRcdHZhciBqZCA9IGRyYXdEYXRlLnRvSkQoKTtcclxuXHRcdFx0Ly8gR2VuZXJhdGUgd2Vla3NcclxuXHRcdFx0dmFyIHdlZWtzID0gJyc7XHJcblx0XHRcdGZvciAodmFyIHdlZWsgPSAwOyB3ZWVrIDwgbnVtV2Vla3M7IHdlZWsrKykge1xyXG5cdFx0XHRcdHZhciB3ZWVrT2ZZZWFyID0gKCFzaG93V2Vla3MgPyAnJyA6ICc8c3BhbiBjbGFzcz1cImpkJyArIGpkICsgJ1wiPicgK1xyXG5cdFx0XHRcdFx0KCQuaXNGdW5jdGlvbihpbnN0Lm9wdGlvbnMuY2FsY3VsYXRlV2VlaykgP1xyXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLmNhbGN1bGF0ZVdlZWsoZHJhd0RhdGUpIDogZHJhd0RhdGUud2Vla09mWWVhcigpKSArICc8L3NwYW4+Jyk7XHJcblx0XHRcdFx0dmFyIGRheXMgPSAnJztcclxuXHRcdFx0XHRmb3IgKHZhciBkYXkgPSAwOyBkYXkgPCBjYWxlbmRhci5kYXlzSW5XZWVrKCk7IGRheSsrKSB7XHJcblx0XHRcdFx0XHR2YXIgc2VsZWN0ZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMucmFuZ2VTZWxlY3QgJiYgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0c2VsZWN0ZWQgPSAoZHJhd0RhdGUuY29tcGFyZVRvKGluc3Quc2VsZWN0ZWREYXRlc1swXSkgIT09IC0xICYmXHJcblx0XHRcdFx0XHRcdFx0ZHJhd0RhdGUuY29tcGFyZVRvKGluc3Quc2VsZWN0ZWREYXRlc1sxXSkgIT09ICsxKVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaW5zdC5zZWxlY3RlZERhdGVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGluc3Quc2VsZWN0ZWREYXRlc1tpXS5jb21wYXJlVG8oZHJhd0RhdGUpID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzZWxlY3RlZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHZhciBkYXRlSW5mbyA9ICghJC5pc0Z1bmN0aW9uKGluc3Qub3B0aW9ucy5vbkRhdGUpID8ge30gOlxyXG5cdFx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMub25EYXRlLmFwcGx5KGVsZW0sIFtkcmF3RGF0ZSwgZHJhd0RhdGUubW9udGgoKSA9PT0gbW9udGhdKSk7XHJcblx0XHRcdFx0XHR2YXIgc2VsZWN0YWJsZSA9IChzZWxlY3RPdGhlck1vbnRocyB8fCBkcmF3RGF0ZS5tb250aCgpID09PSBtb250aCkgJiZcclxuXHRcdFx0XHRcdFx0dGhpcy5faXNTZWxlY3RhYmxlKGVsZW0sIGRyYXdEYXRlLCBkYXRlSW5mby5zZWxlY3RhYmxlLCBtaW5EYXRlLCBtYXhEYXRlKTtcclxuXHRcdFx0XHRcdGRheXMgKz0gdGhpcy5fcHJlcGFyZShyZW5kZXJlci5kYXksIGluc3QpLnJlcGxhY2UoL1xce2RheVxcfS9nLFxyXG5cdFx0XHRcdFx0XHQoc2VsZWN0YWJsZSA/ICc8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCInIDogJzxzcGFuJykgK1xyXG5cdFx0XHRcdFx0XHQnIGNsYXNzPVwiamQnICsgamQgKyAnICcgKyAoZGF0ZUluZm8uZGF0ZUNsYXNzIHx8ICcnKSArXHJcblx0XHRcdFx0XHRcdChzZWxlY3RlZCAmJiAoc2VsZWN0T3RoZXJNb250aHMgfHwgZHJhd0RhdGUubW9udGgoKSA9PT0gbW9udGgpID9cclxuXHRcdFx0XHRcdFx0JyAnICsgcmVuZGVyZXIuc2VsZWN0ZWRDbGFzcyA6ICcnKSArXHJcblx0XHRcdFx0XHRcdChzZWxlY3RhYmxlID8gJyAnICsgcmVuZGVyZXIuZGVmYXVsdENsYXNzIDogJycpICtcclxuXHRcdFx0XHRcdFx0KGRyYXdEYXRlLndlZWtEYXkoKSA/ICcnIDogJyAnICsgcmVuZGVyZXIud2Vla2VuZENsYXNzKSArXHJcblx0XHRcdFx0XHRcdChkcmF3RGF0ZS5tb250aCgpID09PSBtb250aCA/ICcnIDogJyAnICsgcmVuZGVyZXIub3RoZXJNb250aENsYXNzKSArXHJcblx0XHRcdFx0XHRcdChkcmF3RGF0ZS5jb21wYXJlVG8odG9kYXkpID09PSAwICYmIGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoID9cclxuXHRcdFx0XHRcdFx0JyAnICsgcmVuZGVyZXIudG9kYXlDbGFzcyA6ICcnKSArXHJcblx0XHRcdFx0XHRcdChkcmF3RGF0ZS5jb21wYXJlVG8oaW5zdC5kcmF3RGF0ZSkgPT09IDAgJiYgZHJhd0RhdGUubW9udGgoKSA9PT0gbW9udGggP1xyXG5cdFx0XHRcdFx0XHQnICcgKyByZW5kZXJlci5oaWdobGlnaHRlZENsYXNzIDogJycpICsgJ1wiJyArXHJcblx0XHRcdFx0XHRcdChkYXRlSW5mby50aXRsZSB8fCAoaW5zdC5vcHRpb25zLmRheVN0YXR1cyAmJiBzZWxlY3RhYmxlKSA/ICcgdGl0bGU9XCInICtcclxuXHRcdFx0XHRcdFx0KGRhdGVJbmZvLnRpdGxlIHx8IGRyYXdEYXRlLmZvcm1hdERhdGUoaW5zdC5vcHRpb25zLmRheVN0YXR1cykpICsgJ1wiJyA6ICcnKSArICc+JyArXHJcblx0XHRcdFx0XHRcdChpbnN0Lm9wdGlvbnMuc2hvd090aGVyTW9udGhzIHx8IGRyYXdEYXRlLm1vbnRoKCkgPT09IG1vbnRoID9cclxuXHRcdFx0XHRcdFx0ZGF0ZUluZm8uY29udGVudCB8fCBkcmF3RGF0ZS5kYXkoKSA6ICcmIzE2MDsnKSArXHJcblx0XHRcdFx0XHRcdChzZWxlY3RhYmxlID8gJzwvYT4nIDogJzwvc3Bhbj4nKSk7XHJcblx0XHRcdFx0XHRkcmF3RGF0ZS5hZGQoMSwgJ2QnKTtcclxuXHRcdFx0XHRcdGpkKys7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHdlZWtzICs9IHRoaXMuX3ByZXBhcmUocmVuZGVyZXIud2VlaywgaW5zdCkucmVwbGFjZSgvXFx7ZGF5c1xcfS9nLCBkYXlzKS5cclxuXHRcdFx0XHRcdHJlcGxhY2UoL1xce3dlZWtPZlllYXJcXH0vZywgd2Vla09mWWVhcik7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIG1vbnRoSGVhZGVyID0gdGhpcy5fcHJlcGFyZShyZW5kZXJlci5tb250aCwgaW5zdCkubWF0Y2goL1xce21vbnRoSGVhZGVyKDpbXlxcfV0rKT9cXH0vKTtcclxuXHRcdFx0bW9udGhIZWFkZXIgPSAobW9udGhIZWFkZXJbMF0ubGVuZ3RoIDw9IDEzID8gJ01NIHl5eXknIDpcclxuXHRcdFx0XHRtb250aEhlYWRlclswXS5zdWJzdHJpbmcoMTMsIG1vbnRoSGVhZGVyWzBdLmxlbmd0aCAtIDEpKTtcclxuXHRcdFx0bW9udGhIZWFkZXIgPSAoZmlyc3QgPyB0aGlzLl9nZW5lcmF0ZU1vbnRoU2VsZWN0aW9uKFxyXG5cdFx0XHRcdGluc3QsIHllYXIsIG1vbnRoLCBtaW5EYXRlLCBtYXhEYXRlLCBtb250aEhlYWRlciwgY2FsZW5kYXIsIHJlbmRlcmVyKSA6XHJcblx0XHRcdFx0Y2FsZW5kYXIuZm9ybWF0RGF0ZShtb250aEhlYWRlciwgY2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBtb250aCwgY2FsZW5kYXIubWluRGF5KSkpO1xyXG5cdFx0XHR2YXIgd2Vla0hlYWRlciA9IHRoaXMuX3ByZXBhcmUocmVuZGVyZXIud2Vla0hlYWRlciwgaW5zdCkuXHJcblx0XHRcdFx0cmVwbGFjZSgvXFx7ZGF5c1xcfS9nLCB0aGlzLl9nZW5lcmF0ZURheUhlYWRlcnMoaW5zdCwgY2FsZW5kYXIsIHJlbmRlcmVyKSk7XHJcblx0XHRcdHJldHVybiB0aGlzLl9wcmVwYXJlKHJlbmRlcmVyLm1vbnRoLCBpbnN0KS5yZXBsYWNlKC9cXHttb250aEhlYWRlcig6W15cXH1dKyk/XFx9L2csIG1vbnRoSGVhZGVyKS5cclxuXHRcdFx0XHRyZXBsYWNlKC9cXHt3ZWVrSGVhZGVyXFx9L2csIHdlZWtIZWFkZXIpLnJlcGxhY2UoL1xce3dlZWtzXFx9L2csIHdlZWtzKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEdlbmVyYXRlIHRoZSBIVE1MIGZvciB0aGUgZGF5IGhlYWRlcnMuXHJcblx0XHRcdEBtZW1iZXJvZiBDYWxlbmRhcnNQaWNrZXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBwYXJhbSBjYWxlbmRhciB7QmFzZUNhbGVuZGFyfSBUaGUgY3VycmVudCBjYWxlbmRhci5cclxuXHRcdFx0QHBhcmFtIHJlbmRlcmVyIHtvYmplY3R9IFRoZSByZW5kZXJpbmcgdGVtcGxhdGVzLlxyXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IEEgd2VlaydzIHdvcnRoIG9mIGRheSBoZWFkZXJzLiAqL1xyXG5cdFx0X2dlbmVyYXRlRGF5SGVhZGVyczogZnVuY3Rpb24oaW5zdCwgY2FsZW5kYXIsIHJlbmRlcmVyKSB7XHJcblx0XHRcdHZhciBmaXJzdERheSA9IGluc3Qub3B0aW9ucy5maXJzdERheTtcclxuXHRcdFx0Zmlyc3REYXkgPSAoZmlyc3REYXkgPT0gbnVsbCA/IGNhbGVuZGFyLmxvY2FsLmZpcnN0RGF5IDogZmlyc3REYXkpO1xyXG5cdFx0XHR2YXIgaGVhZGVyID0gJyc7XHJcblx0XHRcdGZvciAodmFyIGRheSA9IDA7IGRheSA8IGNhbGVuZGFyLmRheXNJbldlZWsoKTsgZGF5KyspIHtcclxuXHRcdFx0XHR2YXIgZG93ID0gKGRheSArIGZpcnN0RGF5KSAlIGNhbGVuZGFyLmRheXNJbldlZWsoKTtcclxuXHRcdFx0XHRoZWFkZXIgKz0gdGhpcy5fcHJlcGFyZShyZW5kZXJlci5kYXlIZWFkZXIsIGluc3QpLnJlcGxhY2UoL1xce2RheVxcfS9nLFxyXG5cdFx0XHRcdFx0JzxzcGFuIGNsYXNzPVwiJyArIHRoaXMuX2N1ckRvV0NsYXNzICsgZG93ICsgJ1wiIHRpdGxlPVwiJyArXHJcblx0XHRcdFx0XHRjYWxlbmRhci5sb2NhbC5kYXlOYW1lc1tkb3ddICsgJ1wiPicgKyBjYWxlbmRhci5sb2NhbC5kYXlOYW1lc01pbltkb3ddICsgJzwvc3Bhbj4nKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gaGVhZGVyO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogR2VuZXJhdGUgc2VsZWN0aW9uIGNvbnRyb2xzIGZvciBtb250aC5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgY3VycmVudCBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIHllYXIgdG8gZ2VuZXJhdGUuXHJcblx0XHRcdEBwYXJhbSBtb250aCB7bnVtYmVyfSBUaGUgbW9udGggdG8gZ2VuZXJhdGUuXHJcblx0XHRcdEBwYXJhbSBtaW5EYXRlIHtDRGF0ZX0gVGhlIG1pbmltdW0gZGF0ZSBhbGxvd2VkLlxyXG5cdFx0XHRAcGFyYW0gbWF4RGF0ZSB7Q0RhdGV9IFRoZSBtYXhpbXVtIGRhdGUgYWxsb3dlZC5cclxuXHRcdFx0QHBhcmFtIG1vbnRoSGVhZGVyIHtzdHJpbmd9IFRoZSBtb250aC95ZWFyIGZvcm1hdC5cclxuXHRcdFx0QHBhcmFtIGNhbGVuZGFyIHtCYXNlQ2FsZW5kYXJ9IFRoZSBjdXJyZW50IGNhbGVuZGFyLlxyXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBtb250aCBzZWxlY3Rpb24gY29udGVudC4gKi9cclxuXHRcdF9nZW5lcmF0ZU1vbnRoU2VsZWN0aW9uOiBmdW5jdGlvbihpbnN0LCB5ZWFyLCBtb250aCwgbWluRGF0ZSwgbWF4RGF0ZSwgbW9udGhIZWFkZXIsIGNhbGVuZGFyKSB7XHJcblx0XHRcdGlmICghaW5zdC5vcHRpb25zLmNoYW5nZU1vbnRoKSB7XHJcblx0XHRcdFx0cmV0dXJuIGNhbGVuZGFyLmZvcm1hdERhdGUobW9udGhIZWFkZXIsIGNhbGVuZGFyLm5ld0RhdGUoeWVhciwgbW9udGgsIDEpKTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBNb250aHNcclxuXHRcdFx0dmFyIG1vbnRoTmFtZXMgPSBjYWxlbmRhci5sb2NhbFtcclxuXHRcdFx0XHQnbW9udGhOYW1lcycgKyAobW9udGhIZWFkZXIubWF0Y2goL21tL2kpID8gJycgOiAnU2hvcnQnKV07XHJcblx0XHRcdHZhciBodG1sID0gbW9udGhIZWFkZXIucmVwbGFjZSgvbSsvaSwgJ1xcXFx4MkUnKS5yZXBsYWNlKC95Ky9pLCAnXFxcXHgyRicpO1xyXG5cdFx0XHR2YXIgc2VsZWN0b3IgPSAnPHNlbGVjdCBjbGFzcz1cIicgKyB0aGlzLl9tb250aFllYXJDbGFzcyArXHJcblx0XHRcdFx0J1wiIHRpdGxlPVwiJyArIGluc3Qub3B0aW9ucy5tb250aFN0YXR1cyArICdcIj4nO1xyXG5cdFx0XHR2YXIgbWF4TW9udGggPSBjYWxlbmRhci5tb250aHNJblllYXIoeWVhcikgKyBjYWxlbmRhci5taW5Nb250aDtcclxuXHRcdFx0Zm9yICh2YXIgbSA9IGNhbGVuZGFyLm1pbk1vbnRoOyBtIDwgbWF4TW9udGg7IG0rKykge1xyXG5cdFx0XHRcdGlmICgoIW1pbkRhdGUgfHwgY2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBtLFxyXG5cdFx0XHRcdFx0XHRjYWxlbmRhci5kYXlzSW5Nb250aCh5ZWFyLCBtKSAtIDEgKyBjYWxlbmRhci5taW5EYXkpLlxyXG5cdFx0XHRcdFx0XHRjb21wYXJlVG8obWluRGF0ZSkgIT09IC0xKSAmJlxyXG5cdFx0XHRcdFx0XHQoIW1heERhdGUgfHwgY2FsZW5kYXIubmV3RGF0ZSh5ZWFyLCBtLCBjYWxlbmRhci5taW5EYXkpLlxyXG5cdFx0XHRcdFx0XHRjb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKSkge1xyXG5cdFx0XHRcdFx0c2VsZWN0b3IgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgbSArICcvJyArIHllYXIgKyAnXCInICtcclxuXHRcdFx0XHRcdFx0KG1vbnRoID09PSBtID8gJyBzZWxlY3RlZD1cInNlbGVjdGVkXCInIDogJycpICsgJz4nICtcclxuXHRcdFx0XHRcdFx0bW9udGhOYW1lc1ttIC0gY2FsZW5kYXIubWluTW9udGhdICsgJzwvb3B0aW9uPic7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHNlbGVjdG9yICs9ICc8L3NlbGVjdD4nO1xyXG5cdFx0XHRodG1sID0gaHRtbC5yZXBsYWNlKC9cXFxceDJFLywgc2VsZWN0b3IpO1xyXG5cdFx0XHQvLyBZZWFyc1xyXG5cdFx0XHR2YXIgeWVhclJhbmdlID0gaW5zdC5vcHRpb25zLnllYXJSYW5nZTtcclxuXHRcdFx0aWYgKHllYXJSYW5nZSA9PT0gJ2FueScpIHtcclxuXHRcdFx0XHRzZWxlY3RvciA9ICc8c2VsZWN0IGNsYXNzPVwiJyArIHRoaXMuX21vbnRoWWVhckNsYXNzICsgJyAnICsgdGhpcy5fYW55WWVhckNsYXNzICtcclxuXHRcdFx0XHRcdCdcIiB0aXRsZT1cIicgKyBpbnN0Lm9wdGlvbnMueWVhclN0YXR1cyArICdcIj4nICtcclxuXHRcdFx0XHRcdCc8b3B0aW9uPicgKyB5ZWFyICsgJzwvb3B0aW9uPjwvc2VsZWN0PicgK1xyXG5cdFx0XHRcdFx0JzxpbnB1dCBjbGFzcz1cIicgKyB0aGlzLl9tb250aFllYXJDbGFzcyArICcgJyArIHRoaXMuX2N1ck1vbnRoQ2xhc3MgK1xyXG5cdFx0XHRcdFx0bW9udGggKyAnXCIgdmFsdWU9XCInICsgeWVhciArICdcIj4nO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdHllYXJSYW5nZSA9IHllYXJSYW5nZS5zcGxpdCgnOicpO1xyXG5cdFx0XHRcdHZhciB0b2RheVllYXIgPSBjYWxlbmRhci50b2RheSgpLnllYXIoKTtcclxuXHRcdFx0XHR2YXIgc3RhcnQgPSAoeWVhclJhbmdlWzBdLm1hdGNoKCdjWystXS4qJykgPyB5ZWFyICsgcGFyc2VJbnQoeWVhclJhbmdlWzBdLnN1YnN0cmluZygxKSwgMTApIDpcclxuXHRcdFx0XHRcdCgoeWVhclJhbmdlWzBdLm1hdGNoKCdbKy1dLionKSA/IHRvZGF5WWVhciA6IDApICsgcGFyc2VJbnQoeWVhclJhbmdlWzBdLCAxMCkpKTtcclxuXHRcdFx0XHR2YXIgZW5kID0gKHllYXJSYW5nZVsxXS5tYXRjaCgnY1srLV0uKicpID8geWVhciArIHBhcnNlSW50KHllYXJSYW5nZVsxXS5zdWJzdHJpbmcoMSksIDEwKSA6XHJcblx0XHRcdFx0XHQoKHllYXJSYW5nZVsxXS5tYXRjaCgnWystXS4qJykgPyB0b2RheVllYXIgOiAwKSArIHBhcnNlSW50KHllYXJSYW5nZVsxXSwgMTApKSk7XHJcblx0XHRcdFx0c2VsZWN0b3IgPSAnPHNlbGVjdCBjbGFzcz1cIicgKyB0aGlzLl9tb250aFllYXJDbGFzcyArXHJcblx0XHRcdFx0XHQnXCIgdGl0bGU9XCInICsgaW5zdC5vcHRpb25zLnllYXJTdGF0dXMgKyAnXCI+JztcclxuXHRcdFx0XHRzdGFydCA9IGNhbGVuZGFyLm5ld0RhdGUoc3RhcnQgKyAxLCBjYWxlbmRhci5maXJzdE1vbnRoLCBjYWxlbmRhci5taW5EYXkpLmFkZCgtMSwgJ2QnKTtcclxuXHRcdFx0XHRlbmQgPSBjYWxlbmRhci5uZXdEYXRlKGVuZCwgY2FsZW5kYXIuZmlyc3RNb250aCwgY2FsZW5kYXIubWluRGF5KTtcclxuXHRcdFx0XHR2YXIgYWRkWWVhciA9IGZ1bmN0aW9uKHksIHlEaXNwbGF5KSB7XHJcblx0XHRcdFx0XHRpZiAoeSAhPT0gMCB8fCBjYWxlbmRhci5oYXNZZWFyWmVybykge1xyXG5cdFx0XHRcdFx0XHRzZWxlY3RvciArPSAnPG9wdGlvbiB2YWx1ZT1cIicgK1xyXG5cdFx0XHRcdFx0XHRcdE1hdGgubWluKG1vbnRoLCBjYWxlbmRhci5tb250aHNJblllYXIoeSkgLSAxICsgY2FsZW5kYXIubWluTW9udGgpICtcclxuXHRcdFx0XHRcdFx0XHQnLycgKyB5ICsgJ1wiJyArICh5ZWFyID09PSB5ID8gJyBzZWxlY3RlZD1cInNlbGVjdGVkXCInIDogJycpICsgJz4nICtcclxuXHRcdFx0XHRcdFx0XHQoeURpc3BsYXkgfHwgeSkgKyAnPC9vcHRpb24+JztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGlmIChzdGFydC50b0pEKCkgPCBlbmQudG9KRCgpKSB7XHJcblx0XHRcdFx0XHRzdGFydCA9IChtaW5EYXRlICYmIG1pbkRhdGUuY29tcGFyZVRvKHN0YXJ0KSA9PT0gKzEgPyBtaW5EYXRlIDogc3RhcnQpLnllYXIoKTtcclxuXHRcdFx0XHRcdGVuZCA9IChtYXhEYXRlICYmIG1heERhdGUuY29tcGFyZVRvKGVuZCkgPT09IC0xID8gbWF4RGF0ZSA6IGVuZCkueWVhcigpO1xyXG5cdFx0XHRcdFx0dmFyIGVhcmxpZXJMYXRlciA9IE1hdGguZmxvb3IoKGVuZCAtIHN0YXJ0KSAvIDIpO1xyXG5cdFx0XHRcdFx0aWYgKCFtaW5EYXRlIHx8IG1pbkRhdGUueWVhcigpIDwgc3RhcnQpIHtcclxuXHRcdFx0XHRcdFx0YWRkWWVhcihzdGFydCAtIGVhcmxpZXJMYXRlciwgaW5zdC5vcHRpb25zLmVhcmxpZXJUZXh0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGZvciAodmFyIHkgPSBzdGFydDsgeSA8PSBlbmQ7IHkrKykge1xyXG5cdFx0XHRcdFx0XHRhZGRZZWFyKHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCFtYXhEYXRlIHx8IG1heERhdGUueWVhcigpID4gZW5kKSB7XHJcblx0XHRcdFx0XHRcdGFkZFllYXIoZW5kICsgZWFybGllckxhdGVyLCBpbnN0Lm9wdGlvbnMubGF0ZXJUZXh0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRzdGFydCA9IChtYXhEYXRlICYmIG1heERhdGUuY29tcGFyZVRvKHN0YXJ0KSA9PT0gLTEgPyBtYXhEYXRlIDogc3RhcnQpLnllYXIoKTtcclxuXHRcdFx0XHRcdGVuZCA9IChtaW5EYXRlICYmIG1pbkRhdGUuY29tcGFyZVRvKGVuZCkgPT09ICsxID8gbWluRGF0ZSA6IGVuZCkueWVhcigpO1xyXG5cdFx0XHRcdFx0dmFyIGVhcmxpZXJMYXRlciA9IE1hdGguZmxvb3IoKHN0YXJ0IC0gZW5kKSAvIDIpO1xyXG5cdFx0XHRcdFx0aWYgKCFtYXhEYXRlIHx8IG1heERhdGUueWVhcigpID4gc3RhcnQpIHtcclxuXHRcdFx0XHRcdFx0YWRkWWVhcihzdGFydCArIGVhcmxpZXJMYXRlciwgaW5zdC5vcHRpb25zLmVhcmxpZXJUZXh0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGZvciAodmFyIHkgPSBzdGFydDsgeSA+PSBlbmQ7IHktLSkge1xyXG5cdFx0XHRcdFx0XHRhZGRZZWFyKHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCFtaW5EYXRlIHx8IG1pbkRhdGUueWVhcigpIDwgZW5kKSB7XHJcblx0XHRcdFx0XHRcdGFkZFllYXIoZW5kIC0gZWFybGllckxhdGVyLCBpbnN0Lm9wdGlvbnMubGF0ZXJUZXh0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0c2VsZWN0b3IgKz0gJzwvc2VsZWN0Pic7XHJcblx0XHRcdH1cclxuXHRcdFx0aHRtbCA9IGh0bWwucmVwbGFjZSgvXFxcXHgyRi8sIHNlbGVjdG9yKTtcclxuXHRcdFx0cmV0dXJuIGh0bWw7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBQcmVwYXJlIGEgcmVuZGVyIHRlbXBsYXRlIGZvciB1c2UuXHJcblx0XHRcdEV4Y2x1ZGUgcG9wdXAvaW5saW5lIHNlY3Rpb25zIHRoYXQgYXJlIG5vdCBhcHBsaWNhYmxlLlxyXG5cdFx0XHRMb2NhbGlzZSB0ZXh0IG9mIHRoZSBmb3JtOiB7bDEwbjpuYW1lfS5cclxuXHRcdFx0QG1lbWJlcm9mIENhbGVuZGFyc1BpY2tlclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gdGV4dCB7c3RyaW5nfSBUaGUgdGV4dCB0byBsb2NhbGlzZS5cclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEByZXR1cm4ge3N0cmluZ30gVGhlIGxvY2FsaXNlZCB0ZXh0LiAqL1xyXG5cdFx0X3ByZXBhcmU6IGZ1bmN0aW9uKHRleHQsIGluc3QpIHtcclxuXHRcdFx0dmFyIHJlcGxhY2VTZWN0aW9uID0gZnVuY3Rpb24odHlwZSwgcmV0YWluKSB7XHJcblx0XHRcdFx0d2hpbGUgKHRydWUpIHtcclxuXHRcdFx0XHRcdHZhciBzdGFydCA9IHRleHQuaW5kZXhPZigneycgKyB0eXBlICsgJzpzdGFydH0nKTtcclxuXHRcdFx0XHRcdGlmIChzdGFydCA9PT0gLTEpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dmFyIGVuZCA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0KS5pbmRleE9mKCd7JyArIHR5cGUgKyAnOmVuZH0nKTtcclxuXHRcdFx0XHRcdGlmIChlbmQgPiAtMSkge1xyXG5cdFx0XHRcdFx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgc3RhcnQpICtcclxuXHRcdFx0XHRcdFx0XHQocmV0YWluID8gdGV4dC5zdWJzdHIoc3RhcnQgKyB0eXBlLmxlbmd0aCArIDgsIGVuZCAtIHR5cGUubGVuZ3RoIC0gOCkgOiAnJykgK1xyXG5cdFx0XHRcdFx0XHRcdHRleHQuc3Vic3RyaW5nKHN0YXJ0ICsgZW5kICsgdHlwZS5sZW5ndGggKyA2KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH07XHJcblx0XHRcdHJlcGxhY2VTZWN0aW9uKCdpbmxpbmUnLCBpbnN0LmlubGluZSk7XHJcblx0XHRcdHJlcGxhY2VTZWN0aW9uKCdwb3B1cCcsICFpbnN0LmlubGluZSk7XHJcblx0XHRcdHZhciBwYXR0ZXJuID0gL1xce2wxMG46KFteXFx9XSspXFx9LztcclxuXHRcdFx0dmFyIG1hdGNoZXMgPSBudWxsO1xyXG5cdFx0XHR3aGlsZSAobWF0Y2hlcyA9IHBhdHRlcm4uZXhlYyh0ZXh0KSkge1xyXG5cdFx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UobWF0Y2hlc1swXSwgaW5zdC5vcHRpb25zW21hdGNoZXNbMV1dKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdGV4dDtcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0dmFyIHBsdWdpbiA9ICQuY2FsZW5kYXJzUGlja2VyOyAvLyBTaW5nbGV0b24gaW5zdGFuY2VcclxuXHJcblx0JChmdW5jdGlvbigpIHtcclxuXHRcdCQoZG9jdW1lbnQpLm9uKCdtb3VzZWRvd24uJyArIHBsdWdpbk5hbWUsIHBsdWdpbi5fY2hlY2tFeHRlcm5hbENsaWNrKS5cclxuXHRcdFx0b24oJ3Jlc2l6ZS4nICsgcGx1Z2luTmFtZSwgZnVuY3Rpb24oKSB7IHBsdWdpbi5oaWRlKHBsdWdpbi5jdXJJbnN0KTsgfSk7XHJcblx0fSk7XHJcblxyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.lang.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.lang.js index 58683c4ff3b..1d146548e25 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.lang.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.lang.js @@ -1575,4 +1575,4 @@ $.calendarsPicker.setDefaults($.calendarsPicker.regionalOptions['zh-TW']); })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmxhbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmxhbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBDYWxlbmRhcnMgZGF0ZSBwaWNrZXIgbG9jYWxpc2F0aW9ucyBmb3IgalF1ZXJ5IHYyLjAuMS5cbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgQXVndXN0IDIwMDkuXG4gICBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCAoaHR0cDovL2tlaXRoLXdvb2QubmFtZS9saWNlbmNlLmh0bWwpIGxpY2Vuc2UuIFxuICAgUGxlYXNlIGF0dHJpYnV0ZSB0aGUgYXV0aG9yIGlmIHlvdSB1c2UgaXQuICovXG4vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBBZnJpa2FhbnMgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBSZW5pZXIgUHJldG9yaXVzIGFuZCBSdWVkaWdlciBUaGllZGUuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2FmJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJ1ZvcmlnZScsIHByZXZTdGF0dXM6ICdWZXJ0b29uIHZvcmlnZSBtYWFuZCcsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICdWZXJ0b29uIHZvcmlnZSBqYWFyJyxcblx0XHRuZXh0VGV4dDogJ1ZvbGdlbmRlJywgbmV4dFN0YXR1czogJ1ZlcnRvb24gdm9sZ2VuZGUgbWFhbmQnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnVmVydG9vbiB2b2xnZW5kZSBqYWFyJyxcblx0XHRjdXJyZW50VGV4dDogJ1ZhbmRhZycsIGN1cnJlbnRTdGF0dXM6ICdWZXJ0b29uIGh1aWRpZ2UgbWFhbmQnLFxuXHRcdHRvZGF5VGV4dDogJ1ZhbmRhZycsIHRvZGF5U3RhdHVzOiAnVmVydG9vbiBodWlkaWdlIG1hYW5kJyxcblx0XHRjbGVhclRleHQ6ICdWZWUgdWl0JywgY2xlYXJTdGF0dXM6ICdWZXJ3eWRlciBkaWUgaHVpZGlnZSBkYXR1bScsXG5cdFx0Y2xvc2VUZXh0OiAnS2xhYXInLCBjbG9zZVN0YXR1czogJ1NsdWl0IHNvbmRlciB2ZXJhbmRlcmluZycsXG5cdFx0eWVhclN0YXR1czogJ1ZlcnRvb24gXFwnbiBhbmRlciBqYWFyJywgbW9udGhTdGF0dXM6ICdWZXJ0b29uIFxcJ24gYW5kZXIgbWFhbmQnLFxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnV2VlayB2YW4gZGllIGphYXInLFxuXHRcdGRheVN0YXR1czogJ0tpZXMgREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdLaWVzIFxcJ24gZGF0dW0nLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2FmJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEFtaGFyaWMgKOGKoOGIm+GIreGKmykgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgTGV5dSBTaXNheS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYW0nXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAn4Yur4YiI4Y2IJywgcHJldlN0YXR1czogJ+GLq+GIiOGNiOGLjeGKlSDhi4jhiK0g4Yqg4Yiz4YutJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+GLq+GIiOGNiOGLjeGKlSDhi5PhiJjhibUg4Yqg4Yiz4YutJyxcblx0XHRuZXh0VGV4dDogJ+GJgOGMo+GLrScsIG5leHRTdGF0dXM6ICfhiYDhjKPhi6nhipUg4YuI4YitIOGKoOGIs+GLrScsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICfhiYDhjKPhi6nhipUg4YuT4YiY4Ym1IOGKoOGIs+GLrScsXG5cdFx0Y3VycmVudFRleHQ6ICfhiqDhiIHhipUnLCBjdXJyZW50U3RhdHVzOiAn4Yuo4Yqg4YiB4YqR4YqVIOGLiOGIrSDhiqDhiLPhi60nLFxuXHRcdHRvZGF5VGV4dDogJ+GLm+GIrCcsIHRvZGF5U3RhdHVzOiAn4Yuo4Yub4Yis4YqVIOGLiOGIrSDhiqDhiLPhi60nLFxuXHRcdGNsZWFyVGV4dDogJ+GKoOGMpeGNiycsIGNsZWFyU3RhdHVzOiAn4Yuo4Ymw4YiY4Yio4Yyg4YuN4YqVIOGJgOGKlSDhiqDhjKXhjYsnLFxuXHRcdGNsb3NlVGV4dDogJ+GLneGMiycsIGNsb3NlU3RhdHVzOiAn4Yuo4YmA4YqVIOGImOGIneGIqOGMq+GLjeGKlSDhi53hjIsnLFxuXHRcdHllYXJTdGF0dXM6ICfhi5PhiJjhibHhipUg4YmA4Yut4YitJywgbW9udGhTdGF0dXM6ICfhi4jhiKnhipUg4YmA4Yut4YitJyxcblx0XHR3ZWVrVGV4dDogJ+GIs+GInScsIHdlZWtTdGF0dXM6ICfhi6jhi5PhiJjhibEg4Yiz4Yid4YqV4Ym1ICcsXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCwgeXl5eSDhiJ3hiKjhjKUnLCBkZWZhdWx0U3RhdHVzOiAn4YmA4YqVIOGIneGIqOGMpScsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYW0nXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQWxnZXJpYW4gKGFuZCBUdW5pc2lhbikgQXJhYmljIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIE1vaGFtZWQgQ2hlcmlmIEJPVUNIRUxBR0hFTSAtLSBjaGVyaWZib3VjaGVsYWdoZW1AeWFob28uZnIgKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYXItRFonXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M72KfZhNiz2KfYqNmCJywgcHJldlN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTYs9in2KjZgicsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAn2KfZhNiq2KfZhNmKJiN4M2U7JywgbmV4dFN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTZgtin2K/ZhScsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAn2KfZhNmK2YjZhScsIGN1cnJlbnRTdGF0dXM6ICfYudix2LYg2KfZhNi02YfYsSDYp9mE2K3Yp9mE2YonLFxuXHRcdHRvZGF5VGV4dDogJ9in2YTZitmI2YUnLCB0b2RheVN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTYrdin2YTZiicsXG5cdFx0Y2xlYXJUZXh0OiAn2YXYs9itJywgY2xlYXJTdGF0dXM6ICfYp9mF2LPYrSDYp9mE2KrYp9ix2YrYriDYp9mE2K3Yp9mE2YonLFxuXHRcdGNsb3NlVGV4dDogJ9il2LrZhNin2YInLCBjbG9zZVN0YXR1czogJ9il2LrZhNin2YIg2KjYr9mI2YYg2K3Zgdi4Jyxcblx0XHR5ZWFyU3RhdHVzOiAn2LnYsdi2INiz2YbYqSDYotiu2LHZiScsIG1vbnRoU3RhdHVzOiAn2LnYsdi2INi02YfYsSDYotiu2LEnLFxuXHRcdHdlZWtUZXh0OiAn2KPYs9io2YjYuScsIHdlZWtTdGF0dXM6ICfYo9iz2KjZiNi5INin2YTYs9mG2KknLFxuXHRcdGRheVN0YXR1czogJ9in2K7YqtixIEQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICfYp9iu2KrYsSDZitmI2YUnLFxuXHRcdGlzUlRMOiB0cnVlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYXItRFonXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQXJhYmljIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIE1haG1vdWQgS2hhbGVkIC0tIG1haG1vdWQua2hhbGVkQGJhZHJpdC5jb21cbiAgIE5PVEU6IG1vbnRoTmFtZXMgYXJlIHRoZSBuZXcgbW9udGhzIG5hbWVzICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2FyLUVHJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyYjeDNjO9in2YTYs9in2KjZgicsIHByZXZTdGF0dXM6ICfYudix2LYg2KfZhNi02YfYsSDYp9mE2LPYp9io2YInLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ9in2YTYqtin2YTZiiYjeDNlOycsIG5leHRTdGF0dXM6ICfYudix2LYg2KfZhNi02YfYsSDYp9mE2YLYp9iv2YUnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ9in2YTZitmI2YUnLCBjdXJyZW50U3RhdHVzOiAn2LnYsdi2INin2YTYtNmH2LEg2KfZhNit2KfZhNmKJyxcblx0XHR0b2RheVRleHQ6ICfYp9mE2YrZiNmFJywgdG9kYXlTdGF0dXM6ICfYudix2LYg2KfZhNi02YfYsSDYp9mE2K3Yp9mE2YonLFxuXHRcdGNsZWFyVGV4dDogJ9mF2LPYrScsIGNsZWFyU3RhdHVzOiAn2KfZhdiz2K0g2KfZhNiq2KfYsdmK2K4g2KfZhNit2KfZhNmKJyxcblx0XHRjbG9zZVRleHQ6ICfYpdi62YTYp9mCJywgY2xvc2VTdGF0dXM6ICfYpdi62YTYp9mCINio2K/ZiNmGINit2YHYuCcsXG5cdFx0eWVhclN0YXR1czogJ9i52LHYtiDYs9mG2Kkg2KLYrtix2YknLCBtb250aFN0YXR1czogJ9i52LHYtiDYtNmH2LEg2KLYrtixJyxcblx0XHR3ZWVrVGV4dDogJ9ij2LPYqNmI2LknLCB3ZWVrU3RhdHVzOiAn2KPYs9io2YjYuSDYp9mE2LPZhtipJyxcblx0XHRkYXlTdGF0dXM6ICfYp9iu2KrYsSBELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAn2KfYrtiq2LEg2YrZiNmFJyxcblx0XHRpc1JUTDogdHJ1ZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2FyLUVHJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEFyYWJpYyBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBLaGFsZWQgQWwgSG9yYW5pIC0tINiu2KfZhNivINin2YTYrdmI2LHYp9mG2YogLS0ga29rby5kd0BnbWFpbC5jb20gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYXInXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M72KfZhNiz2KfYqNmCJywgcHJldlN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTYs9in2KjZgicsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAn2KfZhNiq2KfZhNmKJiN4M2U7JywgbmV4dFN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTZgtin2K/ZhScsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAn2KfZhNmK2YjZhScsIGN1cnJlbnRTdGF0dXM6ICfYudix2LYg2KfZhNi02YfYsSDYp9mE2K3Yp9mE2YonLFxuXHRcdHRvZGF5VGV4dDogJ9in2YTZitmI2YUnLCB0b2RheVN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTYrdin2YTZiicsXG5cdFx0Y2xlYXJUZXh0OiAn2YXYs9itJywgY2xlYXJTdGF0dXM6ICfYp9mF2LPYrSDYp9mE2KrYp9ix2YrYriDYp9mE2K3Yp9mE2YonLFxuXHRcdGNsb3NlVGV4dDogJ9il2LrZhNin2YInLCBjbG9zZVN0YXR1czogJ9il2LrZhNin2YIg2KjYr9mI2YYg2K3Zgdi4Jyxcblx0XHR5ZWFyU3RhdHVzOiAn2LnYsdi2INiz2YbYqSDYotiu2LHZiScsIG1vbnRoU3RhdHVzOiAn2LnYsdi2INi02YfYsSDYotiu2LEnLFxuXHRcdHdlZWtUZXh0OiAn2KPYs9io2YjYuScsIHdlZWtTdGF0dXM6ICfYo9iz2KjZiNi5INin2YTYs9mG2KknLFxuXHRcdGRheVN0YXR1czogJ9in2K7YqtixIEQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICfYp9iu2KrYsSDZitmI2YUnLFxuXHRcdGlzUlRMOiB0cnVlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYXInXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQXplcmJhaWphbmkgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBKYW1pbCBOYWphZm92IChuZWNlZm92MzNAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYXonXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7R2VyaScsICBwcmV2U3RhdHVzOiAnxo92dsmZbGtpIGF5Jyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ8aPdnbJmWxraSBpbCcsXG5cdFx0bmV4dFRleHQ6ICfEsHLJmWxpJiN4M2U7JywgbmV4dFN0YXR1czogJ1NvbnJha8SxIGF5Jyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ1NvbnJha8SxIGlsJyxcblx0XHRjdXJyZW50VGV4dDogJ0J1Z8O8bicsIGN1cnJlbnRTdGF0dXM6ICfEsG5kaWtpIGF5Jyxcblx0XHR0b2RheVRleHQ6ICdCdWfDvG4nLCB0b2RheVN0YXR1czogJ8SwbmRpa2kgYXknLFxuXHRcdGNsZWFyVGV4dDogJ1TJmW1pemzJmScsIGNsZWFyU3RhdHVzOiAnVGFyaXhpIHNpbCcsXG5cdFx0Y2xvc2VUZXh0OiAnQmHEn2xhJywgY2xvc2VTdGF0dXM6ICdUyZlxdmltaSBiYcSfbGEnLFxuXHRcdHllYXJTdGF0dXM6ICdCYcWfcWEgaWwnLCBtb250aFN0YXR1czogJ0JhxZ9xYSBheScsXG5cdFx0d2Vla1RleHQ6ICdIZicsIHdlZWtTdGF0dXM6ICdIyZlmdMmZbMmZcicsXG5cdFx0ZGF5U3RhdHVzOiAnRCwgTSBkIHNlw6dpbicsIGRlZmF1bHRTdGF0dXM6ICdCaXIgdGFyaXggc2XDp2luJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydheiddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBCdWxnYXJpYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBTdG95YW4gS3lvc2V2IChodHRwOi8vc3Zlc3Qub3JnKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYmcnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuICAgICAgICBwcmV2VGV4dDogJyYjeDNjO9C90LDQt9Cw0LQnLCBwcmV2U3RhdHVzOiAn0L/QvtC60LDQttC4INC/0L7RgdC70LXQtNC90LjRjyDQvNC10YHQtdGGJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG4gICAgICAgIG5leHRUZXh0OiAn0L3QsNC/0YDQtdC0JiN4M2U7JywgbmV4dFN0YXR1czogJ9C/0L7QutCw0LbQuCDRgdC70LXQtNCy0LDRidC40Y8g0LzQtdGB0LXRhicsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuICAgICAgICBjdXJyZW50VGV4dDogJ9C00L3QtdGBJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAn0LTQvdC10YEnLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAn0LjQt9GH0LjRgdGC0LgnLCBjbGVhclN0YXR1czogJ9C40LfRh9C40YHRgtC4INCw0LrRgtGD0LDQu9C90LDRgtCwINC00LDRgtCwJyxcbiAgICAgICAgY2xvc2VUZXh0OiAn0LfQsNGC0LLQvtGA0LgnLCBjbG9zZVN0YXR1czogJ9C30LDRgtCy0L7RgNC4INCx0LXQtyDQv9GA0L7QvNC10L3QuCcsXG5cdFx0eWVhclN0YXR1czogJ9C/0L7QutCw0LbQuCDQtNGA0YPQs9CwINCz0L7QtNC40L3QsCcsIG1vbnRoU3RhdHVzOiAn0L/QvtC60LDQttC4INC00YDRg9CzINC80LXRgdC10YYnLFxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAn0YHQtdC00LzQuNGG0LAg0L7RgiDQvNC10YHQtdGG0LAnLFxuXHRcdGRheVN0YXR1czogJ9CY0LfQsdC10YDQuCBELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAn0JjQt9Cx0LXRgNC4INC00LDRgtCwJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydiZyddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBCb3NuaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIEtlbmFuIEtvbmpvLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydicyddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYzsnLCBwcmV2U3RhdHVzOiAnJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICcmI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICdEYW5hcycsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ0RhbmFzJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ1gnLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAnWmF0dm9yaScsIGNsb3NlU3RhdHVzOiAnJyxcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICcnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydicyddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBDYXRhbGFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXRlcnM6IChqb2FuLmxlb25AZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snY2EnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QW50JywgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnU2VnJiN4M2U7JywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnQXZ1aScsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ0F2dWknLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAnTmV0ZWphcicsIGNsZWFyU3RhdHVzOiAnJyxcblx0XHRjbG9zZVRleHQ6ICdUYW5jYXInLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2NhJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEN6ZWNoIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgVG9tYXMgTXVsbGVyICh0b21hc0B0b21hcy1tdWxsZXIubmV0KS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snY3MnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7RMWZw612ZScsIHByZXZTdGF0dXM6ICdQxZllasOtdCBuYSBwxZllZGNob3rDrSBtxJtzw60nLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ1BvemTEm2ppJiN4M2U7JywgbmV4dFN0YXR1czogJ1DFmWVqw610IG5hIGRhbMWhw60gbcSbc8OtYycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnTnluw60nLCBjdXJyZW50U3RhdHVzOiAnUMWZZWpkZSBuYSBha3R1w6FsbsOtIG3Em3PDrWMnLFxuXHRcdHRvZGF5VGV4dDogJ055bsOtJywgdG9kYXlTdGF0dXM6ICdQxZllamRlIG5hIGFrdHXDoWxuw60gbcSbc8OtYycsXG5cdFx0Y2xlYXJUZXh0OiAnVnltYXphdCcsIGNsZWFyU3RhdHVzOiAnVnltYcW+ZSB6YWRhbsOpIGRhdHVtJyxcblx0XHRjbG9zZVRleHQ6ICdaYXbFmcOtdCcsICBjbG9zZVN0YXR1czogJ1phdsWZZSBrYWxlbmTDocWZIGJlemUgem3Em255Jyxcblx0XHR5ZWFyU3RhdHVzOiAnUMWZZWrDrXQgbmEgamluw70gcm9rJywgbW9udGhTdGF0dXM6ICdQxZllasOtdCBuYSBqaW7DvSBtxJtzw61jJyxcblx0XHR3ZWVrVGV4dDogJ1TDvWQnLCB3ZWVrU3RhdHVzOiAnVMO9ZGVuIHYgcm9jZScsXG5cdFx0ZGF5U3RhdHVzOiAnXFwnVnliZXJcXCcgREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdWeWJlcnRlIGRhdHVtJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydjcyddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBEYW5pc2ggbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBKYW4gQ2hyaXN0ZW5zZW4gKCBkZWxldGVzdHVmZkBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydkYSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG4gICAgICAgIHByZXZUZXh0OiAnJiN4M2M7Rm9ycmlnZScsIHByZXZTdGF0dXM6ICdWaXMgZm9ycmlnZSBtw6VuZWQnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ07DpnN0ZSYjeDNlOycsIG5leHRTdGF0dXM6ICdWaXMgbsOmc3RlIG3DpW5lZCcsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnSWRhZycsIGN1cnJlbnRTdGF0dXM6ICdWaXMgYWt0dWVsIG3DpW5lZCcsXG5cdFx0dG9kYXlUZXh0OiAnSWRhZycsIHRvZGF5U3RhdHVzOiAnVmlzIGFrdHVlbCBtw6VuZWQnLFxuXHRcdGNsZWFyVGV4dDogJ051bHN0aWwnLCBjbGVhclN0YXR1czogJ051bHN0aWwgZGVuIGFrdHVlbGxlIGRhdG8nLFxuXHRcdGNsb3NlVGV4dDogJ0x1aycsIGNsb3NlU3RhdHVzOiAnTHVrIHVkZW4gw6ZuZHJpbmdlcicsXG5cdFx0eWVhclN0YXR1czogJ1ZpcyBldCBhbmRldCDDpXInLCBtb250aFN0YXR1czogJ1ZpcyBlbiBhbmRlbiBtw6VuZWQnLFxuXHRcdHdlZWtUZXh0OiAnVWdlJywgd2Vla1N0YXR1czogJ8OFcmV0cyB1Z2UnLFxuXHRcdGRheVN0YXR1czogJ1bDpmxnIEQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdWw6ZsZyBlbiBkYXRvJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydkYSddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBTd2lzcy1HZXJtYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBEb3VnbGFzIEpvc2UgJiBKdWVyZyBNZWllci4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZGUtQ0gnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7enVyw7xjaycsIHByZXZTdGF0dXM6ICdsZXR6dGVuIE1vbmF0IHplaWdlbicsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnbsOkY2hzdGVyJiN4M2U7JywgbmV4dFN0YXR1czogJ27DpGNoc3RlbiBNb25hdCB6ZWlnZW4nLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ2hldXRlJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnaGV1dGUnLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAnbMO2c2NoZW4nLCBjbGVhclN0YXR1czogJ2FrdHVlbGxlcyBEYXR1bSBsw7ZzY2hlbicsXG5cdFx0Y2xvc2VUZXh0OiAnc2NobGllc3NlbicsIGNsb3NlU3RhdHVzOiAnb2huZSDDhG5kZXJ1bmdlbiBzY2hsaWVzc2VuJyxcblx0XHR5ZWFyU3RhdHVzOiAnYW5kZXJlcyBKYWhyIGFuemVpZ2VuJywgbW9udGhTdGF0dXM6ICdhbmRlcmVuIE1vbmF0IGFuemVpZ2UnLFxuXHRcdHdlZWtUZXh0OiAnV28nLCB3ZWVrU3RhdHVzOiAnV29jaGUgZGVzIE1vbmF0cycsXG5cdFx0ZGF5U3RhdHVzOiAnV8OkaGxlIEQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdXw6RobGUgZWluIERhdHVtJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydkZS1DSCddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBHZXJtYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBNaWxpYW4gV29sZmYgKG1haWxAbWlsaWFudy5kZSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2RlJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyYjeDNjO3p1csO8Y2snLCBwcmV2U3RhdHVzOiAnbGV0enRlbiBNb25hdCB6ZWlnZW4nLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ1ZvciYjeDNlOycsIG5leHRTdGF0dXM6ICduw6RjaHN0ZW4gTW9uYXQgemVpZ2VuJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICdoZXV0ZScsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ2hldXRlJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ2zDtnNjaGVuJywgY2xlYXJTdGF0dXM6ICdha3R1ZWxsZXMgRGF0dW0gbMO2c2NoZW4nLFxuXHRcdGNsb3NlVGV4dDogJ3NjaGxpZcOfZW4nLCBjbG9zZVN0YXR1czogJ29obmUgw4RuZGVydW5nZW4gc2NobGllw59lbicsXG5cdFx0eWVhclN0YXR1czogJ2FuZGVyZXMgSmFociBhbnplaWdlbicsIG1vbnRoU3RhdHVzOiAnYW5kZXJlbiBNb25hdCBhbnplaWdlJyxcblx0XHR3ZWVrVGV4dDogJ1dvJywgd2Vla1N0YXR1czogJ1dvY2hlIGRlcyBNb25hdHMnLFxuXHRcdGRheVN0YXR1czogJ1fDpGhsZSBELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnV8OkaGxlIGVpbiBEYXR1bScsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZGUnXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgR3JlZWsgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBBbGV4IENpY292aWMgKGh0dHA6Ly93d3cuYWxleGNpY292aWMuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZWwnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnzqDPgc6/zrfOs86/z43OvM61zr3Ov8+CJywgcHJldlN0YXR1czogJ86Vz4DOuc+DzrrPjM+AzrfPg863IM+Az4HOv863zrPOv8+NzrzOtc69zr/PhSDOvM6uzr3OsScsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnzpXPgM+MzrzOtc69zr/PgicsIG5leHRTdGF0dXM6ICfOlc+AzrnPg866z4zPgM63z4POtyDOtc+Az4zOvM61zr3Ov8+FIM68zq7Ovc6xJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICfOpM+Bzq3Ph8+Jzr0gzpzOrs69zrHPgicsIGN1cnJlbnRTdGF0dXM6ICfOlc+AzrnPg866z4zPgM63z4POtyDPhM+Bzq3Ph86/zr3PhM6/z4IgzrzOrs69zrEnLFxuXHRcdHRvZGF5VGV4dDogJ86kz4HOrc+Hz4nOvSDOnM6uzr3Osc+CJywgdG9kYXlTdGF0dXM6ICfOlc+AzrnPg866z4zPgM63z4POtyDPhM+Bzq3Ph86/zr3PhM6/z4IgzrzOrs69zrEnLFxuXHRcdGNsZWFyVGV4dDogJ86jzrLOrs+DzrnOvM6/JywgY2xlYXJTdGF0dXM6ICfOo86yzq7Pg865zrzOvyDPhM63z4IgzrXPgM65zrvOtc6zzrzOrc69zrfPgiDOt868zrXPgc6/zrzOt869zq/Osc+CJyxcblx0XHRjbG9zZVRleHQ6ICfOms67zrXOr8+DzrnOvM6/JywgY2xvc2VTdGF0dXM6ICfOms67zrXOr8+DzrnOvM6/IM+Hz4nPgc6vz4IgzrHOu867zrHOs86uJyxcblx0XHR5ZWFyU3RhdHVzOiAnzpXPgM65z4POus+Mz4DOt8+DzrcgzqzOu867zr/PhSDOrc+Ezr/Phc+CJywgbW9udGhTdGF0dXM6ICfOlc+AzrnPg866z4zPgM63z4POtyDOrM67zrvOv8+FIM68zq7Ovc6xJyxcblx0XHR3ZWVrVGV4dDogJ86VzrLOtCcsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ86Vz4DOuc67zr/Os86uIEREIGQgTU0nLCBkZWZhdWx0U3RhdHVzOiAnzpXPgM65zrvOrc6+z4TOtSDOvM65zrEgzrfOvM61z4HOv868zrfOvc6vzrEnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VsJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEVuZ2xpc2gvQXVzdHJhbGlhIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIEJhc2VkIG9uIGVuLUdCLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlbi1BVSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICdQcmV2JywgcHJldlN0YXR1czogJ1Nob3cgdGhlIHByZXZpb3VzIG1vbnRoJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmbHQ7Jmx0OycsIHByZXZKdW1wU3RhdHVzOiAnU2hvdyB0aGUgcHJldmlvdXMgeWVhcicsXG5cdFx0bmV4dFRleHQ6ICdOZXh0JywgbmV4dFN0YXR1czogJ1Nob3cgdGhlIG5leHQgbW9udGgnLFxuXHRcdG5leHRKdW1wVGV4dDogJyZndDsmZ3Q7JywgbmV4dEp1bXBTdGF0dXM6ICdTaG93IHRoZSBuZXh0IHllYXInLFxuXHRcdGN1cnJlbnRUZXh0OiAnQ3VycmVudCcsIGN1cnJlbnRTdGF0dXM6ICdTaG93IHRoZSBjdXJyZW50IG1vbnRoJyxcblx0XHR0b2RheVRleHQ6ICdUb2RheScsIHRvZGF5U3RhdHVzOiAnU2hvdyB0b2RheVxcJ3MgbW9udGgnLFxuXHRcdGNsZWFyVGV4dDogJ0NsZWFyJywgY2xlYXJTdGF0dXM6ICdDbGVhciBhbGwgdGhlIGRhdGVzJyxcblx0XHRjbG9zZVRleHQ6ICdEb25lJywgY2xvc2VTdGF0dXM6ICdDbG9zZSB0aGUgZGF0ZXBpY2tlcicsXG5cdFx0eWVhclN0YXR1czogJ0NoYW5nZSB0aGUgeWVhcicsIG1vbnRoU3RhdHVzOiAnQ2hhbmdlIHRoZSBtb250aCcsXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICdXZWVrIG9mIHRoZSB5ZWFyJyxcblx0XHRkYXlTdGF0dXM6ICdTZWxlY3QgREQsIE0gZCwgeXl5eScsIGRlZmF1bHRTdGF0dXM6ICdTZWxlY3QgYSBkYXRlJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlbi1BVSddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBFbmdsaXNoL1VLIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFN0dWFydC4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZW4tR0InXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnUHJldicsIHByZXZTdGF0dXM6ICdTaG93IHRoZSBwcmV2aW91cyBtb250aCcsXG5cdFx0cHJldkp1bXBUZXh0OiAnJmx0OyZsdDsnLCBwcmV2SnVtcFN0YXR1czogJ1Nob3cgdGhlIHByZXZpb3VzIHllYXInLFxuXHRcdG5leHRUZXh0OiAnTmV4dCcsIG5leHRTdGF0dXM6ICdTaG93IHRoZSBuZXh0IG1vbnRoJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmZ3Q7Jmd0OycsIG5leHRKdW1wU3RhdHVzOiAnU2hvdyB0aGUgbmV4dCB5ZWFyJyxcblx0XHRjdXJyZW50VGV4dDogJ0N1cnJlbnQnLCBjdXJyZW50U3RhdHVzOiAnU2hvdyB0aGUgY3VycmVudCBtb250aCcsXG5cdFx0dG9kYXlUZXh0OiAnVG9kYXknLCB0b2RheVN0YXR1czogJ1Nob3cgdG9kYXlcXCdzIG1vbnRoJyxcblx0XHRjbGVhclRleHQ6ICdDbGVhcicsIGNsZWFyU3RhdHVzOiAnQ2xlYXIgYWxsIHRoZSBkYXRlcycsXG5cdFx0Y2xvc2VUZXh0OiAnRG9uZScsIGNsb3NlU3RhdHVzOiAnQ2xvc2UgdGhlIGRhdGVwaWNrZXInLFxuXHRcdHllYXJTdGF0dXM6ICdDaGFuZ2UgdGhlIHllYXInLCBtb250aFN0YXR1czogJ0NoYW5nZSB0aGUgbW9udGgnLFxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnV2VlayBvZiB0aGUgeWVhcicsXG5cdFx0ZGF5U3RhdHVzOiAnU2VsZWN0IERELCBNIGQsIHl5eXknLCBkZWZhdWx0U3RhdHVzOiAnU2VsZWN0IGEgZGF0ZScsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZW4tR0InXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRW5nbGlzaC9OZXcgWmVhbGFuZCBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBCYXNlZCBvbiBlbi1HQi4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZW4tTlonXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnUHJldicsIHByZXZTdGF0dXM6ICdTaG93IHRoZSBwcmV2aW91cyBtb250aCcsXG5cdFx0cHJldkp1bXBUZXh0OiAnJmx0OyZsdDsnLCBwcmV2SnVtcFN0YXR1czogJ1Nob3cgdGhlIHByZXZpb3VzIHllYXInLFxuXHRcdG5leHRUZXh0OiAnTmV4dCcsIG5leHRTdGF0dXM6ICdTaG93IHRoZSBuZXh0IG1vbnRoJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmZ3Q7Jmd0OycsIG5leHRKdW1wU3RhdHVzOiAnU2hvdyB0aGUgbmV4dCB5ZWFyJyxcblx0XHRjdXJyZW50VGV4dDogJ0N1cnJlbnQnLCBjdXJyZW50U3RhdHVzOiAnU2hvdyB0aGUgY3VycmVudCBtb250aCcsXG5cdFx0dG9kYXlUZXh0OiAnVG9kYXknLCB0b2RheVN0YXR1czogJ1Nob3cgdG9kYXlcXCdzIG1vbnRoJyxcblx0XHRjbGVhclRleHQ6ICdDbGVhcicsIGNsZWFyU3RhdHVzOiAnQ2xlYXIgYWxsIHRoZSBkYXRlcycsXG5cdFx0Y2xvc2VUZXh0OiAnRG9uZScsIGNsb3NlU3RhdHVzOiAnQ2xvc2UgdGhlIGRhdGVwaWNrZXInLFxuXHRcdHllYXJTdGF0dXM6ICdDaGFuZ2UgdGhlIHllYXInLCBtb250aFN0YXR1czogJ0NoYW5nZSB0aGUgbW9udGgnLFxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnV2VlayBvZiB0aGUgeWVhcicsXG5cdFx0ZGF5U3RhdHVzOiAnU2VsZWN0IERELCBNIGQsIHl5eXknLCBkZWZhdWx0U3RhdHVzOiAnU2VsZWN0IGEgZGF0ZScsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZW4tTlonXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRXNwZXJhbnRvIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgT2xpdmllciBNLiAob2xpdmllcndlYkBpZnJhbmNlLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VvJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyZsdDtBbnRhJywgcHJldlN0YXR1czogJ1ZpZGkgbGEgYW50YcWtYW4gbW9uYXRvbicsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnU2VrdiZndDsnLCBuZXh0U3RhdHVzOiAnVmlkaSBsYSBzZWt2YW4gbW9uYXRvbicsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnTnVuYScsIGN1cnJlbnRTdGF0dXM6ICdWaWRpIGxhIG51bmFuIG1vbmF0b24nLFxuXHRcdHRvZGF5VGV4dDogJ051bmEnLCB0b2RheVN0YXR1czogJ1ZpZGkgbGEgbnVuYW4gbW9uYXRvbicsXG5cdFx0Y2xlYXJUZXh0OiAnVmFraWdpJywgY2xlYXJTdGF0dXM6ICcnLFxuXHRcdGNsb3NlVGV4dDogJ0Zlcm1pJywgY2xvc2VTdGF0dXM6ICdGZXJtaSBzZW4gbW9kaWZpJyxcblx0XHR5ZWFyU3RhdHVzOiAnVmlkaSBhbGlhbiBqYXJvbicsIG1vbnRoU3RhdHVzOiAnVmlkaSBhbGlhbiBtb25hdG9uJyxcblx0XHR3ZWVrVGV4dDogJ1NiJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnRWxla3RpIERELCBNTSBkJywgZGVmYXVsdFN0YXR1czogJ0VsZWt0aSBsYSBkYXRvbicsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZW8nXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU3BhbmlzaC9BcmdlbnRpbmEgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBFc3RlYmFuIEFjb3N0YSBWaWxsYWZhbmUgKGVzdGViYW4uYWNvc3RhQGdsb2JhbnQuY29tKSBvZiBHbG9iYW50IChodHRwOi8vd3d3Lmdsb2JhbnQuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZXMtQVInXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QW50JywgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnU2lnJiN4M2U7JywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnSG95JywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnSG95JywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ0xpbXBpYXInLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAnQ2VycmFyJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdTbScsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlcy1BUiddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBTcGFuaXNoL1BlcsO6IGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgRmlzY2hlciBUaXJhZG8gKGZpc2hkZXZAZ2xvYmFudC5jb20pIG9mIEFTSVggKGh0dHA6Ly93d3cuYXNpeG9ubGluZS5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlcy1QRSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYztBbnQnLCBwcmV2U3RhdHVzOiAnJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICdTaWcmI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICdIb3knLCBjdXJyZW50U3RhdHVzOiAnJyxcblx0XHR0b2RheVRleHQ6ICdIb3knLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAnTGltcGlhcicsIGNsZWFyU3RhdHVzOiAnJyxcblx0XHRjbG9zZVRleHQ6ICdDZXJyYXInLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcblx0XHR3ZWVrVGV4dDogJ1NtJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnREQgZCwgTU0geXl5eScsIGRlZmF1bHRTdGF0dXM6ICcnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VzLVBFJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFNwYW5pc2ggbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgVHJhZHVjaWRvIHBvciBWZXN0ZXIgKHh2ZXN0ZXJAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZXMnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QW50JywgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnU2lnJiN4M2U7JywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnSG95JywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnSG95JywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ0xpbXBpYXInLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAnQ2VycmFyJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdTbScsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlcyddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBFc3RvbmlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IE1hcnQgU8O1bWVybWFhIChtcnRzLnB5ZGV2IGF0IGdtYWlsIGNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2V0J10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJ0VlbG5ldicsIHByZXZTdGF0dXM6ICcnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ0rDpHJnbmV2JywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnVMOkbmEnLCBjdXJyZW50U3RhdHVzOiAnJyxcblx0XHR0b2RheVRleHQ6ICdUw6RuYScsIHRvZGF5U3RhdHVzOiAnJyxcblx0XHRjbGVhclRleHQ6ICdYJywgY2xlYXJTdGF0dXM6ICcnLFxuXHRcdGNsb3NlVGV4dDogJ1N1bGdlJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydldCddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBCYXNxdWUgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgS2FycmlrYXMtZWsgaXR6dWxpYSAoa2FycmlrYXNAa2FycmlrYXMuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZXUnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QXVyJywgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnSHVyJiN4M2U7JywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnR2F1cicsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ0dhdXInLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAnWCcsIGNsZWFyU3RhdHVzOiAnJyxcblx0XHRjbG9zZVRleHQ6ICdFZ2luYScsIGNsb3NlU3RhdHVzOiAnJyxcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICdERCBkIE1NJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZXUnXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgRmFyc2kvUGVyc2lhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBKYXZhZCBNb3dsYW5lemhhZCAtLSBqbW93bGFAZ21haWwuY29tLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydmYSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYzvZgtio2YTZiicsIHByZXZTdGF0dXM6ICfZhtmF2KfZiti0INmF2KfZhyDZgtio2YQnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ9io2LnYr9mKJiN4M2U7JywgbmV4dFN0YXR1czogJ9mG2YXYp9mK2LQg2YXYp9mHINio2LnYrycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAn2KfZhdix2YjYsicsIGN1cnJlbnRTdGF0dXM6ICfZhtmF2KfZiti0INmF2KfZhyDYrNin2LHZiicsXG5cdFx0dG9kYXlUZXh0OiAn2KfZhdix2YjYsicsIHRvZGF5U3RhdHVzOiAn2YbZhdin2YrYtCDZhdin2Ycg2KzYp9ix2YonLFxuXHRcdGNsZWFyVGV4dDogJ9it2LDZgSDYqtin2LHZitiuJywgY2xlYXJTdGF0dXM6ICfZvtin2qkg2qnYsdiv2YYg2KrYp9ix2YrYriDYrNin2LHZiicsXG5cdFx0Y2xvc2VUZXh0OiAn2KjYs9iq2YYnLCBjbG9zZVN0YXR1czogJ9io2LPYqtmGINio2K/ZiNmGINin2LnZhdin2YQg2KrYutmK2YrYsdin2KonLFxuXHRcdHllYXJTdGF0dXM6ICfZhtmF2KfZiti0INiz2KfZhCDZhdiq2YHYp9mI2KonLCBtb250aFN0YXR1czogJ9mG2YXYp9mK2LQg2YXYp9mHINmF2KrZgdin2YjYqicsXG5cdFx0d2Vla1RleHQ6ICfZh9mBJywgd2Vla1N0YXR1czogJ9mH2YHYqtmH2ZAg2LPYp9mEJyxcblx0XHRkYXlTdGF0dXM6ICfYp9mG2KrYrtin2KggRCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ9in2YbYqtiu2KfYqCDYqtin2LHZitiuJyxcblx0XHRpc1JUTDogdHJ1ZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ZhJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEZpbm5pc2ggbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBIYXJyaSBLaWxwacO2IChoYXJyaWtpbHBpb0BnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydmaSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmbGFxdW87RWRlbGxpbmVuJywgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnU2V1cmFhdmEmcmFxdW87JywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnVCZhdW1sO24mYXVtbDsmYXVtbDtuJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnVCZhdW1sO24mYXVtbDsmYXVtbDtuJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ1R5aGplbm4mYXVtbDsnLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAnU3VsamUnLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcblx0XHR3ZWVrVGV4dDogJ1ZrJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ZpJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEZhcm9lc2UgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBTdmVycmkgTW9ociBPbHNlbiwgc3ZlcnJpbW9AZ21haWwuY29tICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ZvJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyYjeDNjO1PDrXN0YScsIHByZXZTdGF0dXM6ICdWw61zIHPDrXN0YSBtw6FuYcOwYW4nLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnVsOtcyBzw61zdGEgw6FyacOwJyxcblx0XHRuZXh0VGV4dDogJ07DpnN0YSYjeDNlOycsIG5leHRTdGF0dXM6ICdWw61zIG7DpnN0YSBtw6FuYcOwYW4nLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnVsOtcyBuw6ZzdGEgw6FyacOwJyxcblx0XHRjdXJyZW50VGV4dDogJ0hlc2luJywgY3VycmVudFN0YXR1czogJ1bDrXMgaGVuZGFuIG3DoW5hw7BhbicsXG5cdFx0dG9kYXlUZXh0OiAnw40gZGFnJywgdG9kYXlTdGF0dXM6ICdWw61zIG3DoW5hw7BhbiBmeXJpIMOtIGRhZycsXG5cdFx0Y2xlYXJUZXh0OiAnU3RyaWthJywgY2xlYXJTdGF0dXM6ICdTdHJpa2EgYWxsaXIgbcOhbmHDsGFybmFyJyxcblx0XHRjbG9zZVRleHQ6ICdHb3ltJywgY2xvc2VTdGF0dXM6ICdHb3ltIGhldHRhIHZpbmRlecOwZ2EnLFxuXHRcdHllYXJTdGF0dXM6ICdCcm95dCDDoXJpw7AnLCBtb250aFN0YXR1czogJ0Jyb3l0IG3DoW5hw7BhbnMnLFxuXHRcdHdlZWtUZXh0OiAnVmsnLCB3ZWVrU3RhdHVzOiAnVmlrYSBhdiDDoXJpbnVtJyxcblx0XHRkYXlTdGF0dXM6ICdWZWwgREQsIE0gZCwgeXl5eScsIGRlZmF1bHRTdGF0dXM6ICdWZWwgZWluIGRhdG8nLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ZvJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFN3aXNzIEZyZW5jaCBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IE1hcnRpbiBWb2Vsa2xlIChtYXJ0aW4udm9lbGtsZUBlLXRjLmNoKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZnItQ0gnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7UHLDqWMnLCBwcmV2U3RhdHVzOiAnVm9pciBsZSBtb2lzIHByw6ljw6lkZW50Jyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ1ZvaXIgbFxcJ2FubsOpZSBwcsOpY8OpZGVudCcsXG5cdFx0bmV4dFRleHQ6ICdTdWl2JiN4M2U7JywgbmV4dFN0YXR1czogJ1ZvaXIgbGUgbW9pcyBzdWl2YW50Jyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ1ZvaXIgbFxcJ2FubsOpZSBzdWl2YW50Jyxcblx0XHRjdXJyZW50VGV4dDogJ0NvdXJhbnQnLCBjdXJyZW50U3RhdHVzOiAnVm9pciBsZSBtb2lzIGNvdXJhbnQnLFxuXHRcdHRvZGF5VGV4dDogJ0F1am91cmRcXCdodWknLCB0b2RheVN0YXR1czogJ1ZvaXIgYXVqb3VyZFxcJ2h1aScsXG5cdFx0Y2xlYXJUZXh0OiAnRWZmYWNlcicsIGNsZWFyU3RhdHVzOiAnRWZmYWNlciBsYSBkYXRlIHPDqWxlY3Rpb25uw6llJyxcblx0XHRjbG9zZVRleHQ6ICdGZXJtZXInLCBjbG9zZVN0YXR1czogJ0Zlcm1lciBzYW5zIG1vZGlmaWVyJyxcblx0XHR5ZWFyU3RhdHVzOiAnVm9pciB1bmUgYXV0cmUgYW5uw6llJywgbW9udGhTdGF0dXM6ICdWb2lyIHVuIGF1dHJlIG1vaXMnLFxuXHRcdHdlZWtUZXh0OiAnU20nLCB3ZWVrU3RhdHVzOiAnU2VtYWluZSBkZSBsXFwnYW5uw6llJyxcblx0XHRkYXlTdGF0dXM6ICdcXCdDaG9pc2lyXFwnIGxlIEREIGQgTU0nLCBkZWZhdWx0U3RhdHVzOiAnQ2hvaXNpciBsYSBkYXRlJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydmci1DSCddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBGcmVuY2ggbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgU3TDqXBoYW5lIE5haG1hbmkgKHNob2xieUBzaG9sYnkubmV0KS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZnInXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7UHLDqWMnLCBwcmV2U3RhdHVzOiAnVm9pciBsZSBtb2lzIHByw6ljw6lkZW50Jyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ1ZvaXIgbFxcJ2FubsOpZSBwcsOpY8OpZGVudCcsXG5cdFx0bmV4dFRleHQ6ICdTdWl2JiN4M2U7JywgbmV4dFN0YXR1czogJ1ZvaXIgbGUgbW9pcyBzdWl2YW50Jyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ1ZvaXIgbFxcJ2FubsOpZSBzdWl2YW50Jyxcblx0XHRjdXJyZW50VGV4dDogJ0NvdXJhbnQnLCBjdXJyZW50U3RhdHVzOiAnVm9pciBsZSBtb2lzIGNvdXJhbnQnLFxuXHRcdHRvZGF5VGV4dDogJ0F1am91cmRcXCdodWknLCB0b2RheVN0YXR1czogJ1ZvaXIgYXVqb3VyZFxcJ2h1aScsXG5cdFx0Y2xlYXJUZXh0OiAnRWZmYWNlcicsIGNsZWFyU3RhdHVzOiAnRWZmYWNlciBsYSBkYXRlIHPDqWxlY3Rpb25uw6llJyxcblx0XHRjbG9zZVRleHQ6ICdGZXJtZXInLCBjbG9zZVN0YXR1czogJ0Zlcm1lciBzYW5zIG1vZGlmaWVyJyxcblx0XHR5ZWFyU3RhdHVzOiAnVm9pciB1bmUgYXV0cmUgYW5uw6llJywgbW9udGhTdGF0dXM6ICdWb2lyIHVuIGF1dHJlIG1vaXMnLFxuXHRcdHdlZWtUZXh0OiAnU20nLCB3ZWVrU3RhdHVzOiAnU2VtYWluZSBkZSBsXFwnYW5uw6llJyxcblx0XHRkYXlTdGF0dXM6ICdcXCdDaG9pc2lyXFwnIGxlIEREIGQgTU0nLCBkZWZhdWx0U3RhdHVzOiAnQ2hvaXNpciBsYSBkYXRlJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydmciddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBJbmljaWFjaW9uIGVuIGdhbGVnbyBwYXJhIGEgZXh0ZW5zacOzbiAnVUkgZGF0ZSBwaWNrZXInIHBhcmEgalF1ZXJ5LlxuICAgVHJhZHVjaWRvIHBvciBNYW51ZWwgKE1jTnVlbEBnbXgubmV0KS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZ2wnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QW50JywgcHJldlN0YXR1czogJ0Ftb3NhciBtZXMgYW50ZXJpb3InLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnQW1vc2FyIGFubyBhbnRlcmlvcicsXG5cdFx0bmV4dFRleHQ6ICdTZWcmI3gzZTsnLCBuZXh0U3RhdHVzOiAnQW1vc2FyIG1lcyBzZWd1aW50ZScsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICdBbW9zYXIgYW5vIHNlZ3VpbnRlJyxcblx0XHRjdXJyZW50VGV4dDogJ0hveGUnLCBjdXJyZW50U3RhdHVzOiAnQW1vc2FyIG1lcyBhY3R1YWwnLFxuXHRcdHRvZGF5VGV4dDogJ0hveGUnLCB0b2RheVN0YXR1czogJ0Ftb3NhciBtZXMgYWN0dWFsJyxcblx0XHRjbGVhclRleHQ6ICdMaW1wYXInLCBjbGVhclN0YXR1czogJ0JvcnJhciBkYXRhIGFjdHVhbCcsXG5cdFx0Y2xvc2VUZXh0OiAnUGVjaGFyJywgY2xvc2VTdGF0dXM6ICdQZWNoYXIgc2VuIGdhcmRhcicsXG5cdFx0eWVhclN0YXR1czogJ0Ftb3NhciBvdXRybyBhbm8nLCBtb250aFN0YXR1czogJ0Ftb3NhciBvdXRybyBtZXMnLFxuXHRcdHdlZWtUZXh0OiAnU20nLCB3ZWVrU3RhdHVzOiAnU2VtYW5hIGRvIGFubycsXG5cdFx0ZGF5U3RhdHVzOiAnRCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ1NlbGVjY2lvbmEgRGF0YScsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZ2wnXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgR3VqYXJhdGkgKOCql+CrgeCqnOCqsOCqvuCqpOCrgCkgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgTmF5bWVzaCBNaXN0cnkgKG5heW1lc2hAeWFob28uY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZ3UnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M74Kqq4Kq+4Kqb4KqzJywgcHJldlN0YXR1czogJ+CqquCqvuCqm+CqsuCriyDgqq7gqrngqr/gqqjgq4sg4Kqs4Kqk4Kq+4Kq14KuLJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+CqquCqvuCqm+CqsycsXG5cdFx0bmV4dFRleHQ6ICfgqobgqpfgqrMmI3gzZTsnLCBuZXh0U3RhdHVzOiAn4KqG4KqX4Kqy4KuLIOCqruCqueCqv+CqqOCriyDgqqzgqqTgqr7gqrXgq4snLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn4KqG4KqX4KqzJyxcblx0XHRjdXJyZW50VGV4dDogJ+CqhuCqnOCrhycsIGN1cnJlbnRTdGF0dXM6ICfgqobgqpzgqqjgq4sg4Kqm4Kq/4Kq14Kq4IOCqrOCqpOCqvuCqteCriycsXG5cdFx0dG9kYXlUZXh0OiAn4KqG4Kqc4KuHJywgdG9kYXlTdGF0dXM6ICfgqobgqpzgqqjgq4sg4Kqm4Kq/4Kq14Kq4Jyxcblx0XHRjbGVhclRleHQ6ICfgqq3gq4LgqoLgqrjgq4snLCBjbGVhclN0YXR1czogJ+CqueCqvuCqsiDgqqrgqrjgqoLgqqYg4KqV4Kqw4KuH4Kqy4KuAIOCqpOCqvuCqsOCrgOCqliDgqq3gq4LgqoLgqrjgq4snLFxuXHRcdGNsb3NlVGV4dDogJ+CqrOCqguCqpyDgqpXgqrDgq4snLCBjbG9zZVN0YXR1czogJ+CqpOCqvuCqsOCrgOCqliDgqqrgqrjgqoLgqqYg4KqV4Kqw4KuN4Kqv4Kq+IOCqteCql+CqsCDgqqzgqoLgqqcg4KqV4Kqw4KuLJyxcblx0XHR5ZWFyU3RhdHVzOiAn4Kqc4KuB4Kqm4KuBIOCqteCqsOCrjeCqtyDgqqzgqqTgqr7gqrXgq4snLCBtb250aFN0YXR1czogJ+CqnOCrgeCqpuCriyDgqq7gqrngqr/gqqjgq4sg4Kqs4Kqk4Kq+4Kq14KuLJyxcblx0XHR3ZWVrVGV4dDogJ+CqheCqoOCqteCqvuCqoeCqv+Cqr+CrgeCqgicsIHdlZWtTdGF0dXM6ICfgqoXgqqDgqrXgqr7gqqHgqr/gqq/gq4HgqoInLFxuXHRcdGRheVN0YXR1czogJ+CqheCqoOCqteCqvuCqoeCqv+Cqr+CqvuCqqOCriyDgqqrgqrngq4fgqrLgq4sg4Kqm4Kq/4Kq14Kq4IOCqquCquOCqguCqpiDgqpXgqrDgq4snLCBkZWZhdWx0U3RhdHVzOiAn4Kqk4Kq+4Kqw4KuA4KqWIOCqquCquOCqguCqpiDgqpXgqrDgq4snLFx0XHRcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydndSddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBIZWJyZXcgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBBbWlyIEhhcmRvbiAoYWhhcmRvbiBhdCBnbWFpbCBkb3QgY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaGUnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M715TXp9eV15PXnScsIHByZXZTdGF0dXM6ICcnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ9eU15HXkCYjeDNlOycsIG5leHRTdGF0dXM6ICcnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ9eU15nXldedJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAn15TXmdeV150nLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAn16DXp9eUJywgY2xlYXJTdGF0dXM6ICcnLFxuXHRcdGNsb3NlVGV4dDogJ9eh15LXldeoJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogdHJ1ZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2hlJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEhpbmRpIElORElBIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgUGF3YW4gS3VtYXIgU2luZ2guICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2hpLUlOJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJ+CkquCkv+Ckm+CksuCkvicsIHByZXZTdGF0dXM6ICfgpKrgpL/gpJvgpLLgpL4g4KSu4KS54KWA4KSo4KS+IOCkpuClh+CkluClh+CkgicsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICfgpKrgpL/gpJvgpLLgpL4g4KS14KSw4KWN4KS3IOCkpuClh+CkluClh+CkgicsXG5cdFx0bmV4dFRleHQ6ICfgpIXgpJfgpLLgpL4nLCBuZXh0U3RhdHVzOiAn4KSF4KSX4KSy4KS+IOCkruCkueClgOCkqOCkviDgpKbgpYfgpJbgpYfgpIInLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn4KSF4KSX4KSy4KS+IOCkteCksOCljeCktyDgpKbgpYfgpJbgpYfgpIInLFxuXHRcdGN1cnJlbnRUZXh0OiAn4KS14KSw4KWN4KSk4KSu4KS+4KSoJywgY3VycmVudFN0YXR1czogJ+CkteCksOCljeCkpOCkruCkvuCkqCDgpK7gpLngpYDgpKjgpL4g4KSm4KWH4KSW4KWH4KSCJyxcblx0XHR0b2RheVRleHQ6ICfgpIbgpJwnLCB0b2RheVN0YXR1czogJ+CkteCksOCljeCkpOCkruCkvuCkqCDgpKbgpL/gpKgg4KSm4KWH4KSW4KWH4KSCJyxcblx0XHRjbGVhclRleHQ6ICfgpLjgpL7gpKsnLCBjbGVhclN0YXR1czogJ+CkteCksOCljeCkpOCkruCkvuCkqCDgpKbgpL/gpKjgpL7gpILgpJUg4KSu4KS/4KSf4KS+4KSPJyxcblx0XHRjbG9zZVRleHQ6ICfgpLjgpK7gpL7gpKrgpY3gpKQnLCBjbG9zZVN0YXR1czogJ+CkrOCkpuCksuCkvuCktSDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkrOCkguCkpicsXG5cdFx0eWVhclN0YXR1czogJ+Ckj+CklSDgpIXgpLLgpJcg4KS14KSw4KWN4KS3IOCkleCkviDgpJrgpK/gpKgg4KSV4KSw4KWH4KSCJywgbW9udGhTdGF0dXM6ICfgpI/gpJUg4KSF4KSy4KSXIOCkruCkueClgOCkqOClhyDgpJXgpL4g4KSa4KSv4KSoIOCkleCksOClh+CkgicsXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICfgpLXgpLDgpY3gpLcg4KSV4KS+IOCkuOCkquCljeCkpOCkvuCkuScsXG5cdFx0ZGF5U3RhdHVzOiAn4KSa4KWB4KSo4KWHIERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAn4KSP4KSVIOCkpOCkv+CkpeCkvyDgpJXgpL4g4KSa4KSv4KSoIOCkleCksOClh+CkgicsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaGktSU4nXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQ3JvYXRpYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBWamVrb3NsYXYgTmVzZWsuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2hyJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyYjeDNjOycsIHByZXZTdGF0dXM6ICdQcmlrYcW+aSBwcmV0aG9kbmkgbWplc2VjJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICcmI3gzZTsnLCBuZXh0U3RhdHVzOiAnUHJpa2HFvmkgc2xpamVkZcSHaSBtamVzZWMnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ0RhbmFzJywgY3VycmVudFN0YXR1czogJ0RhbmHFoW5qaSBkYXR1bScsXG5cdFx0dG9kYXlUZXh0OiAnRGFuYXMnLCB0b2RheVN0YXR1czogJ0RhbmHFoW5qaSBkYXR1bScsXG5cdFx0Y2xlYXJUZXh0OiAnaXpicmnFoWknLCBjbGVhclN0YXR1czogJ0l6YnJpxaFpIHRyZW51dG5pIGRhdHVtJyxcblx0XHRjbG9zZVRleHQ6ICdaYXR2b3JpJywgY2xvc2VTdGF0dXM6ICdaYXR2b3JpIGthbGVuZGFyJyxcblx0XHR5ZWFyU3RhdHVzOiAnUHJpa2HFvmkgZ29kaW5lJywgbW9udGhTdGF0dXM6ICdQcmlrYcW+aSBtamVzZWNlJyxcblx0XHR3ZWVrVGV4dDogJ1RqZScsIHdlZWtTdGF0dXM6ICdUamVkYW5yJyxcblx0XHRkYXlTdGF0dXM6ICdcXCdEYXR1bVxcJyBERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ09kYWJlcmkgZGF0dW0nLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2hyJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEh1bmdhcmlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IElzdHZhbiBLYXJhc3ppIChqcXVlcnljYWxlbmRhckBzcGFtLnJhc3ppLmh1KS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaHUnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJmxhcXVvOyZuYnNwO3Zpc3N6YScsIHByZXZTdGF0dXM6ICcnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ2VsxZFyZSZuYnNwOyZyYXF1bzsnLCBuZXh0U3RhdHVzOiAnJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICdtYScsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ21hJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ3TDtnJsw6lzJywgY2xlYXJTdGF0dXM6ICcnLFxuXHRcdGNsb3NlVGV4dDogJ2JlesOhcsOhcycsIGNsb3NlU3RhdHVzOiAnJyxcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxuXHRcdHdlZWtUZXh0OiAnSMOpJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2h1J10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEFybWVuaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTGV2b24gWmFrYXJ5YW4gKGxldm9uLnpha2FyeWFuQGdtYWlsLmNvbSkgKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaHknXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M71YbVodWtLicsICBwcmV2U3RhdHVzOiAnJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICfVgNWh1bsuJiN4M2U7JywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAn1LHVtdW91oXWgCcsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ9Sx1bXVvdaF1oAnLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAn1YTVodaE1oDVpdWsJywgY2xlYXJTdGF0dXM6ICcnLFxuXHRcdGNsb3NlVGV4dDogJ9WT1aHVr9Wl1awnLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcblx0XHR3ZWVrVGV4dDogJ9WH1LLVjycsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydoeSddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBJbmRvbmVzaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgRGVkZW4gRmF0aHVyYWhtYW4gKGRlZGVuZkBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydpZCddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYzttdW5kdXInLCBwcmV2U3RhdHVzOiAnVGFtcGlsa2FuIGJ1bGFuIHNlYmVsdW1ueWEnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ21hanUmI3gzZTsnLCBuZXh0U3RhdHVzOiAnVGFtcGlsa2FuIGJ1bGFuIGJlcmlrdXRueWEnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ2hhcmkgaW5pJywgY3VycmVudFN0YXR1czogJ1RhbXBpbGthbiBidWxhbiBzZWthcmFuZycsXG5cdFx0dG9kYXlUZXh0OiAnaGFyaSBpbmknLCB0b2RheVN0YXR1czogJ1RhbXBpbGthbiBidWxhbiBzZWthcmFuZycsXG5cdFx0Y2xlYXJUZXh0OiAna29zb25na2FuJywgY2xlYXJTdGF0dXM6ICdiZXJzaWhrYW4gdGFuZ2dhbCB5YW5nIHNla2FyYW5nJyxcblx0XHRjbG9zZVRleHQ6ICdUdXR1cCcsIGNsb3NlU3RhdHVzOiAnVHV0dXAgdGFucGEgbWVuZ3ViYWgnLFxuXHRcdHllYXJTdGF0dXM6ICdUYW1waWxrYW4gdGFodW4geWFuZyBiZXJiZWRhJywgbW9udGhTdGF0dXM6ICdUYW1waWxrYW4gYnVsYW4geWFuZyBiZXJiZWRhJyxcblx0XHR3ZWVrVGV4dDogJ01nJywgd2Vla1N0YXR1czogJ01pbmdndSBkYWxhbSB0YWh1Jyxcblx0XHRkYXlTdGF0dXM6ICdwaWxpaCBsZSBERCwgTU0gZCcsIGRlZmF1bHRTdGF0dXM6ICdQaWxpaCBUYW5nZ2FsJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydpZCddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBJY2VsYW5kaWMgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBIYXVrdXIgSC4gVGhvcnNzb24gKGhhdWt1ckBlc2tpbGwuaXMpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydpcyddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYzsgRnlycmknLCBwcmV2U3RhdHVzOiAnJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICdOJmFlbGlnO3N0aSAmI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICcmSWFjdXRlOyBkYWcnLCBjdXJyZW50U3RhdHVzOiAnJyxcblx0XHR0b2RheVRleHQ6ICcmSWFjdXRlOyBkYWcnLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAnSHJlaW5zYScsIGNsZWFyU3RhdHVzOiAnJyxcblx0XHRjbG9zZVRleHQ6ICdMb2thJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdWaWthJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2lzJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEl0YWxpYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBBcGFlbGxhIChhcGFlbGxhQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2l0J10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyYjeDNjO1ByZWMnLCBwcmV2U3RhdHVzOiAnTWVzZSBwcmVjZWRlbnRlJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ01vc3RyYSBsXFwnYW5ubyBwcmVjZWRlbnRlJyxcblx0XHRuZXh0VGV4dDogJ1N1Y2MmI3gzZTsnLCBuZXh0U3RhdHVzOiAnTWVzZSBzdWNjZXNzaXZvJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ01vc3RyYSBsXFwnYW5ubyBzdWNjZXNzaXZvJyxcblx0XHRjdXJyZW50VGV4dDogJ09nZ2knLCBjdXJyZW50U3RhdHVzOiAnTWVzZSBjb3JyZW50ZScsXG5cdFx0dG9kYXlUZXh0OiAnT2dnaScsIHRvZGF5U3RhdHVzOiAnTWVzZSBjb3JyZW50ZScsXG5cdFx0Y2xlYXJUZXh0OiAnU3Z1b3RhJywgY2xlYXJTdGF0dXM6ICdBbm51bGxhJyxcblx0XHRjbG9zZVRleHQ6ICdDaGl1ZGknLCBjbG9zZVN0YXR1czogJ0NoaXVkZXJlIHNlbnphIG1vZGlmaWNhcmUnLFxuXHRcdHllYXJTdGF0dXM6ICdTZWxlemlvbmEgdW4gYWx0cm8gYW5ubycsIG1vbnRoU3RhdHVzOiAnU2VsZXppb25hIHVuIGFsdHJvIG1lc2UnLFxuXHRcdHdlZWtUZXh0OiAnU20nLCB3ZWVrU3RhdHVzOiAnU2V0dGltYW5hIGRlbGxcXCdhbm5vJyxcblx0XHRkYXlTdGF0dXM6ICdcXCdTZWxlemlvbmFcXCcgREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdTY2VnbGllcmUgdW5hIGRhdGEnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2l0J10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEphcGFuZXNlIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgS2VudGFybyBTQVRPIChrZW50YXJvQHJhbnZpcy5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydqYSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmV4dGVuZCh7fSwgJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdFx0e21vbnRoOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIubW9udGguXG5cdFx0XHRcdHJlcGxhY2UoL21vbnRoSGVhZGVyLywgJ21vbnRoSGVhZGVyOnl5eXnlubQgTU0nKX0pLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M75YmNJywgcHJldlN0YXR1czogJ+WJjeaciOOCkuihqOekuuOBl+OBvuOBmScsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICfliY3lubTjgpLooajnpLrjgZfjgb7jgZknLFxuXHRcdG5leHRUZXh0OiAn5qyhJiN4M2U7JywgbmV4dFN0YXR1czogJ+e/jOaciOOCkuihqOekuuOBl+OBvuOBmScsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICfnv4zlubTjgpLooajnpLrjgZfjgb7jgZknLFxuXHRcdGN1cnJlbnRUZXh0OiAn5LuK5pelJywgY3VycmVudFN0YXR1czogJ+S7iuaciOOCkuihqOekuuOBl+OBvuOBmScsXG5cdFx0dG9kYXlUZXh0OiAn5LuK5pelJywgdG9kYXlTdGF0dXM6ICfku4rmnIjjgpLooajnpLrjgZfjgb7jgZknLFxuXHRcdGNsZWFyVGV4dDogJ+OCr+ODquOCoicsIGNsZWFyU3RhdHVzOiAn5pel5LuY44KS44Kv44Oq44Ki44GX44G+44GZJyxcblx0XHRjbG9zZVRleHQ6ICfplonjgZjjgosnLCBjbG9zZVN0YXR1czogJ+WkieabtOOBm+OBmuOBq+mWieOBmOOBvuOBmScsXG5cdFx0eWVhclN0YXR1czogJ+ihqOekuuOBmeOCi+W5tOOCkuWkieabtOOBl+OBvuOBmScsIG1vbnRoU3RhdHVzOiAn6KGo56S644GZ44KL5pyI44KS5aSJ5pu044GX44G+44GZJyxcblx0XHR3ZWVrVGV4dDogJ+mAsScsIHdlZWtTdGF0dXM6ICfmmqbpgLHjgafnrKzkvZXpgLHnm67jgYvjgpLooajjgZfjgb7jgZknLFxuXHRcdGRheVN0YXR1czogJ3l5eXkvbW0vZGQnLCBkZWZhdWx0U3RhdHVzOiAn5pel5LuY44KS6YG45oqe44GX44G+44GZJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydqYSddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBHZW9yZ2lhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBBbmRyZWkgR29yYnVzaGtpbi4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sna2EnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnPOGDo+GDmeGDkOGDnCcsIHByZXZTdGF0dXM6ICfhg6zhg5jhg5zhg5Ag4YOX4YOV4YOUJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+GDrOGDmOGDnOGDkCDhg6zhg5Thg5rhg5gnLFxuXHRcdG5leHRUZXh0OiAn4YOs4YOY4YOcPicsIG5leHRTdGF0dXM6ICfhg6jhg5Thg5vhg5Phg5Thg5Lhg5gg4YOX4YOV4YOUJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ+GDqOGDlOGDm+GDk+GDlOGDkuGDmCDhg6zhg5Thg5rhg5gnLFxuXHRcdGN1cnJlbnRUZXh0OiAn4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOUJywgY3VycmVudFN0YXR1czogJ+GDm+GDmOGDm+GDk+GDmOGDnOGDkOGDoOGDlCDhg5fhg5Xhg5QnLFxuXHRcdHRvZGF5VGV4dDogJ+GDk+GDpuGDlOGDoScsIHRvZGF5U3RhdHVzOiAn4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOUIOGDk+GDpuGDlCcsXG5cdFx0Y2xlYXJUZXh0OiAn4YOS4YOQ4YOh4YOj4YOk4YOX4YOQ4YOV4YOU4YOR4YOQJywgY2xlYXJTdGF0dXM6ICfhg5vhg5jhg5vhg5Phg5jhg5zhg5Dhg6Dhg5Qg4YOX4YOQ4YOg4YOY4YOm4YOY4YOhIOGDrOGDkOGDqOGDmuGDkCcsXG5cdFx0Y2xvc2VUZXh0OiAn4YOQ4YOg4YOY4YOhJywgY2xvc2VTdGF0dXM6ICfhg5Phg5Dhg67hg6Phg6Dhg5Xhg5Ag4YOj4YOq4YOV4YOa4YOY4YOa4YOU4YOR4YOd4YOTJyxcblx0XHR5ZWFyU3RhdHVzOiAn4YOh4YOu4YOV4YOQIOGDrOGDlOGDmuGDmCcsIG1vbnRoU3RhdHVzOiAn4YOh4YOu4YOV4YOQIOGDl+GDleGDlCcsXG5cdFx0d2Vla1RleHQ6ICfhg5nhg5UnLCB3ZWVrU3RhdHVzOiAn4YOs4YOa4YOY4YOhIOGDmeGDleGDmOGDoOGDkCcsXG5cdFx0ZGF5U3RhdHVzOiAn4YOQ4YOY4YOg4YOp4YOY4YOU4YOXIERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAn4YOQ4YOY4YOm4YOp4YOY4YOU4YOXIOGDl+GDkOGDoOGDmOGDpuGDmCcsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sna2EnXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgS2htZXIgaW5pdGlhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IFNvdmljaGV0IFRlcCAoc292aWNoZXQudGVwQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ttJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJ+GekOGemeKAi+GegOGfkuGemuGfhOGemScsIHByZXZTdGF0dXM6ICcnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ+GekeGfheKAi+GemOGeu+GegScsIG5leHRTdGF0dXM6ICcnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ+GekOGfkuGehOGfg+KAi+Gek+GfgeGfhycsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ+GekOGfkuGehOGfg+KAi+Gek+GfgeGfhycsIHRvZGF5U3RhdHVzOiAnJyxcblx0XHRjbGVhclRleHQ6ICdYJywgY2xlYXJTdGF0dXM6ICcnLFxuXHRcdGNsb3NlVGV4dDogJ+GemuGeveGeheKAi+GemuGetuGem+GfiycsIGNsb3NlU3RhdHVzOiAnJyxcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICdERCBkIE1NJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sna20nXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgS29yZWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgRGFlS3dvbiBLYW5nIChuY3Jhc2guZGtAZ21haWwuY29tKSwgRWRpdGVkIGJ5IEdlbmllLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydrbyddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmV4dGVuZCh7fSwgJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdFx0e21vbnRoOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIubW9udGguXG5cdFx0XHRcdHJlcGxhY2UoL21vbnRoSGVhZGVyLywgJ21vbnRoSGVhZGVyOnl5eXnrhYQgTU0nKX0pLFxuXHRcdHByZXZUZXh0OiAn7J207KCE64usJywgcHJldlN0YXR1czogJ+ydtOyghOuLrOydhCDtkZzsi5ztlanri4jri6QnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAn7J207KCEIOyXsOuPhOulvCDtkZzsi5ztlanri4jri6QnLFxuXHRcdG5leHRUZXh0OiAn64uk7J2M64usJywgbmV4dFN0YXR1czogJ+uLpOydjOuLrOydhCDtkZzsi5ztlanri4jri6QnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn64uk7J2MIOyXsOuPhOulvCDtkZzsi5ztlanri4jri6QnLFxuXHRcdGN1cnJlbnRUZXh0OiAn7ZiE7J6sJywgY3VycmVudFN0YXR1czogJ+yeheugpe2VnCDri6zsnYQg7ZGc7Iuc7ZWp64uI64ukJyxcblx0XHR0b2RheVRleHQ6ICfsmKTripgnLCB0b2RheVN0YXR1czogJ+ydtOuyiOuLrOydhCDtkZzsi5ztlanri4jri6QnLFxuXHRcdGNsZWFyVGV4dDogJ+yngOyasOq4sCcsIGNsZWFyU3RhdHVzOiAn7J6F66Cl7ZWcIOuCoOynnOulvCDsp4Dsm4Hri4jri6QnLFxuXHRcdGNsb3NlVGV4dDogJ+uLq+q4sCcsIGNsb3NlU3RhdHVzOiAnJyxcblx0XHR5ZWFyU3RhdHVzOiAn7ZGc7Iuc7ZWgIOyXsOuPhOulvCDrs4Dqsr3tlanri4jri6QnLCBtb250aFN0YXR1czogJ+2RnOyLnO2VoCDsm5TsnYQg67OA6rK97ZWp64uI64ukJyxcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJ+2VtOuLuSDsl7Drj4TsnZgg7KO87LCoJyxcblx0XHRkYXlTdGF0dXM6ICdNIGTsnbwgKEQpJywgZGVmYXVsdFN0YXR1czogJ+uCoOynnOulvCDshKDtg53tlZjshLjsmpQnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2tvJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIExpdGh1YW5pYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgQXJ0dXJhcyBQYWxlaWNpa2FzIDxhcnR1cmFzQGF2YWxvbi5sdD4uICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2x0J10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyYjeDNjO0F0Z2FsJywgIHByZXZTdGF0dXM6ICcnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ1Bpcm15biYjeDNlOycsIG5leHRTdGF0dXM6ICcnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ8WgaWFuZGllbicsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ8WgaWFuZGllbicsIHRvZGF5U3RhdHVzOiAnJyxcblx0XHRjbGVhclRleHQ6ICdJxaF2YWx5dGknLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAnVcW+ZGFyeXRpJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydsdCddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBMYXR2aWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIEFydHVyYXMgUGFsZWljaWthcyA8YXJ0dXJhcy5wYWxlaWNpa2FzQG1ldGFzaXRlLm5ldD4uICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2x2J10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJ0llcHInLCAgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnTsSBa2EnLCBuZXh0U3RhdHVzOiAnJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICfFoG9kaWVuJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnxaBvZGllbicsIHRvZGF5U3RhdHVzOiAnJyxcblx0XHRjbGVhclRleHQ6ICdOb3TEq3LEq3QnLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAnQWl6dsSTcnQnLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcblx0XHR3ZWVrVGV4dDogJ05hdicsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydsdiddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBNb250ZW5lZ3JpbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IE1pbG/FoSBNaWxvxaFldmnEhyAtIGZsZWthIGQuby5vLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtZS1NRSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYzsnLCBwcmV2U3RhdHVzOiAnUHJpa2HFvmkgcHJldGhvZG5pIG1qZXNlYycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICdQcmlrYcW+aSBwcmV0aG9kbnUgZ29kaW51Jyxcblx0XHRuZXh0VGV4dDogJyYjeDNlOycsIG5leHRTdGF0dXM6ICdQcmlrYcW+aSBzbGplZGXEh2kgbWplc2VjJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ1ByaWthxb5pIHNsamVkZcSHdSBnb2RpbnUnLFxuXHRcdGN1cnJlbnRUZXh0OiAnRGFuYXMnLCBjdXJyZW50U3RhdHVzOiAnVGVrdcSHaSBtamVzZWMnLFxuXHRcdHRvZGF5VGV4dDogJ0RhbmFzJywgdG9kYXlTdGF0dXM6ICdUZWt1xIdpIG1qZXNlYycsXG5cdFx0Y2xlYXJUZXh0OiAnT2JyacWhaScsIGNsZWFyU3RhdHVzOiAnT2JyacWhaSB0cmVudXRuaSBkYXR1bScsXG5cdFx0Y2xvc2VUZXh0OiAnWmF0dm9yaScsIGNsb3NlU3RhdHVzOiAnWmF0dm9yaSBrYWxlbmRhcicsXG5cdFx0eWVhclN0YXR1czogJ1ByaWthxb5pIGdvZGluZScsIG1vbnRoU3RhdHVzOiAnUHJpa2HFvmkgbWplc2VjZScsXG5cdFx0d2Vla1RleHQ6ICdTZWQnLCB3ZWVrU3RhdHVzOiAnU2VkbWljYScsXG5cdFx0ZGF5U3RhdHVzOiAnXFwnRGF0dW1cXCcgREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdPZGFiZXJpIGRhdHVtJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtZS1NRSddKTtcbn0pKGpRdWVyeSk7XG4vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBNb250ZW5lZ3JpbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IE1pbG/FoSBNaWxvxaFldmnEhyAtIGZsZWthIGQuby5vLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtZSddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYzsnLCBwcmV2U3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0L/RgNC10YLRhdC+0LTQvdC4INC80ZjQtdGB0LXRhicsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDQv9GA0LXRgtGF0L7QtNC90YMg0LPQvtC00LjQvdGDJyxcblx0XHRuZXh0VGV4dDogJyYjeDNlOycsIG5leHRTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDRgdGZ0LXQtNC10ZvQuCDQvNGY0LXRgdC10YYnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0YHRmdC10LTQtdGb0YMg0LPQvtC00LjQvdGDJyxcblx0XHRjdXJyZW50VGV4dDogJ9CU0LDQvdCw0YEnLCBjdXJyZW50U3RhdHVzOiAn0KLQtdC60YPRm9C4INC80ZjQtdGB0LXRhicsXG5cdFx0dG9kYXlUZXh0OiAn0JTQsNC90LDRgScsIHRvZGF5U3RhdHVzOiAn0KLQtdC60YPRm9C4INC80ZjQtdGB0LXRhicsXG5cdFx0Y2xlYXJUZXh0OiAn0J7QsdGA0LjRiNC4JywgY2xlYXJTdGF0dXM6ICfQntCx0YDQuNGI0Lgg0YLRgNC10L3Rg9GC0L3QuCDQtNCw0YLRg9C8Jyxcblx0XHRjbG9zZVRleHQ6ICfQl9Cw0YLQstC+0YDQuCcsIGNsb3NlU3RhdHVzOiAn0JfQsNGC0LLQvtGA0Lgg0LrQsNC70LXQvdC00LDRgCcsXG5cdFx0eWVhclN0YXR1czogJ9Cf0YDQuNC60LDQttC4INCz0L7QtNC40L3QtScsIG1vbnRoU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0LzRmNC10YHQtdGG0LUnLFxuXHRcdHdlZWtUZXh0OiAn0KHQtdC0Jywgd2Vla1N0YXR1czogJ9Ch0LXQtNC80LjRhtCwJyxcblx0XHRkYXlTdGF0dXM6ICdcXCfQlNCw0YLRg9C8XFwnIEREIGQgTU0nLCBkZWZhdWx0U3RhdHVzOiAn0J7QtNCw0LHQtdGA0Lgg0LTQsNGC0YPQvCcsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbWUnXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAg0JzQsNC60LXQtNC+0L3RgdC60LggTUsgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgSGFqYW4gU2VsbWFuaSAoaGFqYW4gW2F0XSBsaXZlIFtkb3RdIGNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ21rJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJ9Cf0YDQtdGC0YUuJywgcHJldlN0YXR1czogJ9Cf0YDQuNC60LDQttC4INCz0L4g0L/RgNC10YLRhdC+0LTQvdC40L7RgiDQvNC10YHQtdGGJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ9Cf0YDQuNC60LDQttC4INGY0LAg0L/RgNC10YLRhdC+0LTQvdCw0YLQsCDQs9C+0LTQuNC90LAnLFxuXHRcdG5leHRUZXh0OiAn0KHQu9C10LTQtdC9JywgbmV4dFN0YXR1czogJ9Cf0YDQuNC60LDQttC4INCz0L4g0YHQu9C10LTQvdC40L7RgiDQvNC10YHQtdGGJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ9Cf0YDQuNC60LDQttC4INGY0LAg0YHQu9C10LTQvdCw0YLQsCDQs9C+0LTQuNC90LAnLFxuXHRcdGN1cnJlbnRUZXh0OiAn0KLQtdC60L7QstC10L0nLCBjdXJyZW50U3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0LPQviDRgtC10LrQvtCy0L3QuNC+0YIg0LzQtdGB0LXRhicsXG5cdFx0dG9kYXlUZXh0OiAn0JTQtdC90LXRgScsIHRvZGF5U3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0LPQviDQtNC10L3QtdGI0L3QuNC+0YIg0LzQtdGB0LXRhicsXG5cdFx0Y2xlYXJUZXh0OiAn0JHRgNC40YjQuCcsIGNsZWFyU3RhdHVzOiAn0JjQt9Cx0YDQuNGI0Lgg0LPQviDRgtC10LrQvtCy0L3QuNC+0YIg0LTQsNGC0YPQvCcsXG5cdFx0Y2xvc2VUZXh0OiAn0JfQsNGC0LLQvtGA0LgnLCBjbG9zZVN0YXR1czogJ9CX0LDRgtCy0L7RgNC4INCx0LXQtyDQv9GA0L7QvNC10L3QuCcsXG5cdFx0eWVhclN0YXR1czogJ9CY0LfQsdC10YDQuCDQtNGA0YPQs9CwINCz0L7QtNC40L3QsCcsIG1vbnRoU3RhdHVzOiAn0JjQt9Cx0LXRgNC4INC00YDRg9CzINC80LXRgdC10YYnLFxuXHRcdHdlZWtUZXh0OiAn0J3QtdC0Jywgd2Vla1N0YXR1czogJ9Cd0LXQtNC10LvQsCDQstC+INCz0L7QtNC40L3QsNGC0LAnLFxuXHRcdGRheVN0YXR1czogJ9CY0LfQsdC10YDQuCBERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ9CY0LfQsdC10YDQuCDQtNCw0YLRg9C8Jyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtayddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBNYWxheWFsYW0gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgU2FqaSBOZWRpeWFuY2hhdGggKHNhamk4OUBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtbCddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICfgtK7gtYHgtKjgtY3gtKjgtKTgtY3gtKTgtYYnLCBwcmV2U3RhdHVzOiAnJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICfgtIXgtJ/gtYHgtKTgtY3gtKTgtKTgtY0gJywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAn4LSH4LSo4LWN4LSo4LWNJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAn4LSH4LSo4LWN4LSo4LWNJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ1gnLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAn4LS24LSw4LS/JywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICfgtIYnLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICdERCBkIE1NJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbWwnXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTWFsYXlzaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTW9oZCBOYXdhd2kgTW9oYW1hZCBKYW1pbGkgKG5hd2F3aUByb25nZ2VuZy5uZXQpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtcyddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYztTZWJlbHVtJywgcHJldlN0YXR1czogJ1R1bmp1a2thbiBidWxhbiBsZXBhcycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICdUdW5qdWtrYW4gdGFodW4gbGVwYXMnLFxuXHRcdG5leHRUZXh0OiAnU2VsZXBhcyYjeDNlOycsIG5leHRTdGF0dXM6ICdUdW5qdWtrYW4gYnVsYW4gZGVwYW4nLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnVHVuanVra2FuIHRhaHVuIGRlcGFuJyxcblx0XHRjdXJyZW50VGV4dDogJ2hhcmkgaW5pJywgY3VycmVudFN0YXR1czogJ1R1bmp1a2thbiBidWxhbiB0ZXJraW5pJyxcblx0XHR0b2RheVRleHQ6ICdoYXJpIGluaScsIHRvZGF5U3RhdHVzOiAnVHVuanVra2FuIGJ1bGFuIHRlcmtpbmknLFxuXHRcdGNsZWFyVGV4dDogJ1BhZGFtJywgY2xlYXJTdGF0dXM6ICdQYWRhbWthbiB0YXJpa2ggdGVya2luaScsXG5cdFx0Y2xvc2VUZXh0OiAnVHV0dXAnLCBjbG9zZVN0YXR1czogJ1R1dHVwIHRhbnBhIHBlcnViYWhhbicsXG5cdFx0eWVhclN0YXR1czogJ1R1bmp1a2thbiB0YWh1biB5YW5nIGxhaW4nLCBtb250aFN0YXR1czogJ1R1bmp1a2thbiBidWxhbiB5YW5nIGxhaW4nLFxuXHRcdHdlZWtUZXh0OiAnTWcnLCB3ZWVrU3RhdHVzOiAnTWluZ2d1IGJhZ2kgdGFodW4gaW5pJyxcblx0XHRkYXlTdGF0dXM6ICdERCwgZCBNTScsIGRlZmF1bHRTdGF0dXM6ICdTaWxhIHBpbGloIHRhcmlraCcsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbXMnXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTWFsdGVzZSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IENocml0aWFuIFNjaWJlcnJhcyAodXVmNjQyOUBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtdCddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICdUYSBRYWJlbCcsIHByZXZTdGF0dXM6ICdJeC14YWhhciB0YSBxYWJlbCcsXG4gXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnSXMtc2VuYSB0YSBxYWJlbCcsXG4gXHRcdG5leHRUZXh0OiAnTGkgSm1pc3MnLCBuZXh0U3RhdHVzOiAnSXgteGFoYXIgbGkgam1pc3MnLFxuIFx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ0lzLXNlbmEgbGkgam1pc3MnLFxuIFx0XHRjdXJyZW50VGV4dDogJ0lsbHVtJywgY3VycmVudFN0YXR1czogJ0l4LXhhaGFyIHRhIGxsdW0nLFxuIFx0XHR0b2RheVRleHQ6ICdJbGx1bScsIHRvZGF5U3RhdHVzOiAnVXJpIGl4LXhhaGFyIHRhIGxsdW0nLFxuIFx0XHRjbGVhclRleHQ6ICfEpmFzc2FyJywgY2xlYXJTdGF0dXM6ICfEpmFzc2FyIGlkLWRhdGEnLFxuIFx0XHRjbG9zZVRleHQ6ICdMZXN0JywgY2xvc2VTdGF0dXM6ICdHxKdhbGFxIG1pbmfEp2FqciB0aWJkaWxpZXQnLFxuIFx0XHR5ZWFyU3RhdHVzOiAnVXJpIHNlbmEgZGlmZmVyZW50aScsIG1vbnRoU3RhdHVzOiAnVXJpIHhhaGFyIGRpZmZlcmVudGknLFxuXHRcdHdlZWtUZXh0OiAnxKBtJywgd2Vla1N0YXR1czogJ0lsLcSgaW1nxKdhIGZpcy1zZW5hJyxcblx0XHRkYXlTdGF0dXM6ICdHxKdhemVsIERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnR8SnYXplbCBkYXRhJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtdCddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBEdXRjaC9CZWxnaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTWF0aGlhcyBCeW5lbnMgPGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlLz4uICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ25sLUJFJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJ+KGkCcsIHByZXZTdGF0dXM6ICdCZWtpamsgZGUgdm9yaWdlIG1hYW5kJyxcblx0XHRwcmV2SnVtcFRleHQ6ICfCqycsIG5leHRKdW1wU3RhdHVzOiAnQmVraWprIGhldCB2b3JpZ2UgamFhcicsXG5cdFx0bmV4dFRleHQ6ICfihpInLCBuZXh0U3RhdHVzOiAnQmVraWprIGRlIHZvbGdlbmRlIG1hYW5kJyxcblx0XHRuZXh0SnVtcFRleHQ6ICfCuycsIG5leHRKdW1wU3RhdHVzOiAnQmVraWprIGhldCB2b2xnZW5kZSBqYWFyJyxcblx0XHRjdXJyZW50VGV4dDogJ1ZhbmRhYWcnLCBjdXJyZW50U3RhdHVzOiAnQmVraWprIGRlIGh1aWRpZ2UgbWFhbmQnLFxuXHRcdHRvZGF5VGV4dDogJ1ZhbmRhYWcnLCB0b2RheVN0YXR1czogJ0Jla2lqayBkZSBodWlkaWdlIG1hYW5kJyxcblx0XHRjbGVhclRleHQ6ICdXaXNzZW4nLCBjbGVhclN0YXR1czogJ1dpcyBkZSBodWlkaWdlIGRhdHVtJyxcblx0XHRjbG9zZVRleHQ6ICdTbHVpdGVuJywgY2xvc2VTdGF0dXM6ICdTbHVpdCB6b25kZXIgdmVyYW5kZXJpbmcnLFxuXHRcdHllYXJTdGF0dXM6ICdCZWtpamsgZWVuIGFuZGVyIGphYXInLCBtb250aFN0YXR1czogJ0Jla2lqayBlZW4gYW5kZXJlIG1hYW5kJyxcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJ1dlZWsgdmFuIGhldCBqYWFyJyxcblx0XHRkYXlTdGF0dXM6ICdkZC9tbS95eXl5JywgZGVmYXVsdFN0YXR1czogJ0tpZXMgZWVuIGRhdHVtJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydubC1CRSddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBEdXRjaCBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IE1hdGhpYXMgQnluZW5zIDxodHRwOi8vbWF0aGlhc2J5bmVucy5iZS8+LiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydubCddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICfihpAnLCBwcmV2U3RhdHVzOiAnQmVraWprIGRlIHZvcmlnZSBtYWFuZCcsXG5cdFx0cHJldkp1bXBUZXh0OiAnwqsnLCBuZXh0SnVtcFN0YXR1czogJ0Jla2lqayBoZXQgdm9yaWdlIGphYXInLFxuXHRcdG5leHRUZXh0OiAn4oaSJywgbmV4dFN0YXR1czogJ0Jla2lqayBkZSB2b2xnZW5kZSBtYWFuZCcsXG5cdFx0bmV4dEp1bXBUZXh0OiAnwrsnLCBuZXh0SnVtcFN0YXR1czogJ0Jla2lqayBoZXQgdm9sZ2VuZGUgamFhcicsXG5cdFx0Y3VycmVudFRleHQ6ICdWYW5kYWFnJywgY3VycmVudFN0YXR1czogJ0Jla2lqayBkZSBodWlkaWdlIG1hYW5kJyxcblx0XHR0b2RheVRleHQ6ICdWYW5kYWFnJywgdG9kYXlTdGF0dXM6ICdCZWtpamsgZGUgaHVpZGlnZSBtYWFuZCcsXG5cdFx0Y2xlYXJUZXh0OiAnV2lzc2VuJywgY2xlYXJTdGF0dXM6ICdXaXMgZGUgaHVpZGlnZSBkYXR1bScsXG5cdFx0Y2xvc2VUZXh0OiAnU2x1aXRlbicsIGNsb3NlU3RhdHVzOiAnU2x1aXQgem9uZGVyIHZlcmFuZGVyaW5nJyxcblx0XHR5ZWFyU3RhdHVzOiAnQmVraWprIGVlbiBhbmRlciBqYWFyJywgbW9udGhTdGF0dXM6ICdCZWtpamsgZWVuIGFuZGVyZSBtYWFuZCcsXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICdXZWVrIHZhbiBoZXQgamFhcicsXG5cdFx0ZGF5U3RhdHVzOiAnZGQtbW0teXl5eScsIGRlZmF1bHRTdGF0dXM6ICdLaWVzIGVlbiBkYXR1bScsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbmwnXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgTm9yd2VnaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTmFpbWRqb24gVGFraGlyb3YgKG5haW1kam9uQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ25vJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyZsYXF1bztGb3JyaWdlJywgIHByZXZTdGF0dXM6ICcnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ05lc3RlJnJhcXVvOycsIG5leHRTdGF0dXM6ICcnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ0kgZGFnJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnSSBkYWcnLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAnVMO4bScsIGNsZWFyU3RhdHVzOiAnJyxcblx0XHRjbG9zZVRleHQ6ICdMdWtrJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdVa2UnLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbm8nXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgUG9saXNoIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgSmFjZWsgV3lzb2NraSAoamFjZWsud3lzb2NraUBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydwbCddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYztQb3ByemVkbmknLCBwcmV2U3RhdHVzOiAnUG9rYcW8IHBvcHJ6ZWRuaSBtaWVzacSFYycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnTmFzdMSZcG55JiN4M2U7JywgbmV4dFN0YXR1czogJ1Bva2HFvCBuYXN0xJlwbnkgbWllc2nEhWMnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ0R6acWbJywgY3VycmVudFN0YXR1czogJ1Bva2HFvCBha3R1YWxueSBtaWVzacSFYycsXG5cdFx0dG9kYXlUZXh0OiAnRHppxZsnLCB0b2RheVN0YXR1czogJ1Bva2HFvCBha3R1YWxueSBtaWVzacSFYycsXG5cdFx0Y2xlYXJUZXh0OiAnV3ljennFm8SHJywgY2xlYXJTdGF0dXM6ICdXeWN6ecWbxIcgb2JlY27EhSBkYXTEmScsXG5cdFx0Y2xvc2VUZXh0OiAnWmFta25paicsIGNsb3NlU3RhdHVzOiAnWmFta25paiBiZXogemFwaXN5d2FuaWEnLFxuXHRcdHllYXJTdGF0dXM6ICdQb2thxbwgaW5ueSByb2snLCBtb250aFN0YXR1czogJ1Bva2HFvCBpbm55IG1pZXNpxIVjJyxcblx0XHR3ZWVrVGV4dDogJ1R5ZHonLCB3ZWVrU3RhdHVzOiAnVHlkemllxYQgcm9rdScsXG5cdFx0ZGF5U3RhdHVzOiAnXFwnV3liaWVyelxcJyBERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ1d5YmllcnogZGF0xJknLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3BsJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEJyYXppbGlhbiBQb3J0dWd1ZXNlIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgTGVvbmlsZG8gQ29zdGEgU2lsdmEgKGxlb2NzaWx2YUBnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydwdC1CUiddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmbHQ7QW50ZXJpb3InLCBwcmV2U3RhdHVzOiAnTW9zdHJhIG8gbcOqcyBhbnRlcmlvcicsIFxuXHRcdHByZXZKdW1wVGV4dDogJyZsdDsmbHQ7JywgcHJldkp1bXBTdGF0dXM6ICdNb3N0cmEgbyBhbm8gYW50ZXJpb3InLCBcblx0XHRuZXh0VGV4dDogJ1Byw7N4aW1vJmd0OycsIG5leHRTdGF0dXM6ICdNb3N0cmEgbyBwcsOzeGltbyBtw6pzJywgXG5cdFx0bmV4dEp1bXBUZXh0OiAnJmd0OyZndDsnLCBuZXh0SnVtcFN0YXR1czogJ01vc3RyYSBvIHByw7N4aW1vIGFubycsXG5cdFx0Y3VycmVudFRleHQ6ICdBdHVhbCcsIGN1cnJlbnRTdGF0dXM6ICdNb3N0cmEgbyBtw6pzIGF0dWFsJyxcblx0XHR0b2RheVRleHQ6ICdIb2plJywgdG9kYXlTdGF0dXM6ICdWYWkgcGFyYSBob2plJywgXG5cdFx0Y2xlYXJUZXh0OiAnTGltcGFyJywgY2xlYXJTdGF0dXM6ICdMaW1wYXIgZGF0YScsXG5cdFx0Y2xvc2VUZXh0OiAnRmVjaGFyJywgY2xvc2VTdGF0dXM6ICdGZWNoYXIgbyBjYWxlbmTDoXJpbycsXG5cdFx0eWVhclN0YXR1czogJ1NlbGVjaW9uYXIgYW5vJywgbW9udGhTdGF0dXM6ICdTZWxlY2lvbmFyIG3DqnMnLFxuXHRcdHdlZWtUZXh0OiAncycsIHdlZWtTdGF0dXM6ICdTZW1hbmEgZG8gYW5vJywgXG5cdFx0ZGF5U3RhdHVzOiAnREQsIGQgXFwnZGVcXCcgTSBcXCdkZVxcJyB5eXl5JywgZGVmYXVsdFN0YXR1czogJ1NlbGVjaW9uZSB1bSBkaWEnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3B0LUJSJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFJvbWFuc2ggbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgWXZvbm5lIEdpZW5hbCAoeXZvbm5lLmdpZW5hbEBlZHVjYS5jaCkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3JtJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyYjeDNjO1N1YW5kYW50JywgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnUHJlY2VkZW50JiN4M2U7JywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnQWN0dWFsJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnQWN0dWFsJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ1gnLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAnU2VycmFyJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdlbW5hJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnREQgZCBNTScsIGRlZmF1bHRTdGF0dXM6ICcnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3JtJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFJvbWFuaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgRWRtb25kIEwuIChsbF9lZG1vbmRAd2FsbGEuY29tKSBhbmQgSW9udXQgRy4gU3RhbiAoaW9udXQuZy5zdGFuQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3JvJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyZsYXF1bztQcmVjZWRlbnRhJywgcHJldlN0YXR1czogJ0FyYXRhIGx1bmEgcHJlY2VkZW50YScsXG5cdFx0cHJldkp1bXBUZXh0OiAnJmxhcXVvOyZsYXF1bzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICdVcm1hdG9hcmUmcmFxdW87JywgbmV4dFN0YXR1czogJ0FyYXRhIGx1bmEgdXJtYXRvYXJlJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmcmFxdW87JnJhcXVvOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ0F6aScsIGN1cnJlbnRTdGF0dXM6ICdBcmF0YSBsdW5hIGN1cmVudGEnLFxuXHRcdHRvZGF5VGV4dDogJ0F6aScsIHRvZGF5U3RhdHVzOiAnQXJhdGEgbHVuYSBjdXJlbnRhJyxcblx0XHRjbGVhclRleHQ6ICdDdXJhdCcsIGNsZWFyU3RhdHVzOiAnU3RlcmdlIGRhdGEgY3VyZW50YScsXG5cdFx0Y2xvc2VUZXh0OiAnw45uY2hpZGUnLCBjbG9zZVN0YXR1czogJ8OObmNoaWRlIGZhcmEgc2NoaW1iYXJlJyxcblx0XHR5ZWFyU3RhdHVzOiAnQXJhdCB1biBhbiBkaWZlcml0JywgbW9udGhTdGF0dXM6ICdBcmF0YSBvIGx1bmEgZGlmZXJpdGEnLFxuXHRcdHdlZWtUZXh0OiAnU8SDcHQnLCB3ZWVrU3RhdHVzOiAnU8SDcHRhbWFuYSBhbnVsdWknLFxuXHRcdGRheVN0YXR1czogJ1NlbGVjdGVhemEgREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdTZWxlY3RlYXphIG8gZGF0YScsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sncm8nXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgUnVzc2lhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBXcml0dGVuIGJ5IEFuZHJldyBTdHJvbW5vdiAoc3Ryb21ub3ZAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sncnUnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M70J/RgNC10LQnLCAgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAn0KHQu9C10LQmI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICfQodC10LPQvtC00L3RjycsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ9Ch0LXQs9C+0LTQvdGPJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ9Ce0YfQuNGB0YLQuNGC0YwnLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAn0JfQsNC60YDRi9GC0YwnLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcblx0XHR3ZWVrVGV4dDogJ9Cd0LUnLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sncnUnXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU2xvdmFrIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgVm9qdGVjaCBSaW5payAodm9qdG9AaG1tLnNrKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snc2snXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7UHJlZGNow6FkemFqw7pjaScsICBwcmV2U3RhdHVzOiAnJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICdOYXNsZWR1asO6Y2kmI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICdEbmVzJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAnRG5lcycsIHRvZGF5U3RhdHVzOiAnJyxcblx0XHRjbGVhclRleHQ6ICdabWF6YcWlJywgY2xlYXJTdGF0dXM6ICcnLFxuXHRcdGNsb3NlVGV4dDogJ1phdnJpZcWlJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdUeScsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ0RELiBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzayddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBTbG92ZW5pYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBKYWthIEphbmNhciAoamFrYUBrdWJqZS5vcmcpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzbCddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmbHQ7UHJlaiYjeDE2MTtuamknLCBwcmV2U3RhdHVzOiAnUHJpa2EmI3gxN0U7aSBwcmVqJiN4MTYxO25qaSBtZXNlYycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnTmFzbGVkbmppJmd0OycsIG5leHRTdGF0dXM6ICdQcmlrYSYjeDE3RTtpIG5hc2xlZG5qaSBtZXNlYycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnVHJlbnV0bmknLCBjdXJyZW50U3RhdHVzOiAnUHJpa2EmI3gxN0U7aSB0cmVudXRuaSBtZXNlYycsXG5cdFx0dG9kYXlUZXh0OiAnVHJlbnV0bmknLCB0b2RheVN0YXR1czogJ1ByaWthJiN4MTdFO2kgdHJlbnV0bmkgbWVzZWMnLFxuXHRcdGNsZWFyVGV4dDogJ0l6YnJpJiN4MTYxO2knLCBjbGVhclN0YXR1czogJ0l6YnJpJiN4MTYxO2kgdHJlbnV0bmkgZGF0dW0nLFxuXHRcdGNsb3NlVGV4dDogJ1phcHJpJywgY2xvc2VTdGF0dXM6ICdaYXByaSBicmV6IHNwcmVtaW5qYW5qYScsXG5cdFx0eWVhclN0YXR1czogJ1ByaWthJiN4MTdFO2kgZHJ1Z28gbGV0bycsIG1vbnRoU3RhdHVzOiAnUHJpa2EmI3gxN0U7aSBkcnVnIG1lc2VjJyxcblx0XHR3ZWVrVGV4dDogJ1RlZGVuJywgd2Vla1N0YXR1czogJ1RlZGVuIHYgbGV0dScsXG5cdFx0ZGF5U3RhdHVzOiAnSXpiZXJpIERELCBkIE1NIHl5JywgZGVmYXVsdFN0YXR1czogJ0l6YmlyYSBkYXR1bWEnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3NsJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEFsYmFuaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgRmxha3JvbiBCeXR5cWkgKGZsYWtyb25AZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snc3EnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7bWJyYXBhJywgcHJldlN0YXR1czogJ3RyZWdvIG11YWppbiBlIGZ1bmRpdCcsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnUMOrcnBhcmEmI3gzZTsnLCBuZXh0U3RhdHVzOiAndHJlZ28gbXVhamluIHRqZXTDq3InLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ3NvdCcsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ3NvdCcsIHRvZGF5U3RhdHVzOiAnJyxcblx0XHRjbGVhclRleHQ6ICdmc2hpamUnLCBjbGVhclN0YXR1czogJ2ZzaGlqZSBkYXTDq24gYWt0dWFsZScsXG5cdFx0Y2xvc2VUZXh0OiAnbWJ5bGxlJywgY2xvc2VTdGF0dXM6ICdtYnlsbGUgcGEgbmRyeXNoaW1lJyxcblx0XHR5ZWFyU3RhdHVzOiAndHJlZ28gdGpldMOrciB2aXQnLCBtb250aFN0YXR1czogJ3RyZWdvIG11YWppbiB0amV0w6tyJyxcblx0XHR3ZWVrVGV4dDogJ0phJywgd2Vla1N0YXR1czogJ0phdmEgZSBtdWFqaXQnLFxuXHRcdGRheVN0YXR1czogJ1xcJ1pnamVkaFxcJyBELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnWmdqZWRoZSBuasOrIGRhdMOrJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzcSddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBTZXJiaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgRGVqYW4gRGltacSHLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzci1TUiddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYzsnLCBwcmV2U3RhdHVzOiAnUHJpa2HFvmkgcHJlZGhvZG5pIG1lc2VjJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ1ByaWthxb5pIHByZWRob2RudSBnb2RpbnUnLFxuXHRcdG5leHRUZXh0OiAnJiN4M2U7JywgbmV4dFN0YXR1czogJ1ByaWthxb5pIHNsZWRlxIdpIG1lc2VjJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ1ByaWthxb5pIHNsZWRlxId1IGdvZGludScsXG5cdFx0Y3VycmVudFRleHQ6ICdEYW5hcycsIGN1cnJlbnRTdGF0dXM6ICdUZWt1xIdpIG1lc2VjJyxcblx0XHR0b2RheVRleHQ6ICdEYW5hcycsIHRvZGF5U3RhdHVzOiAnVGVrdcSHaSBtZXNlYycsXG5cdFx0Y2xlYXJUZXh0OiAnT2JyacWhaScsIGNsZWFyU3RhdHVzOiAnT2JyacWhaSB0cmVudXRuaSBkYXR1bScsXG5cdFx0Y2xvc2VUZXh0OiAnWmF0dm9yaScsIGNsb3NlU3RhdHVzOiAnWmF0dm9yaSBrYWxlbmRhcicsXG5cdFx0eWVhclN0YXR1czogJ1ByaWthxb5pIGdvZGluZScsIG1vbnRoU3RhdHVzOiAnUHJpa2HFvmkgbWVzZWNlJyxcblx0XHR3ZWVrVGV4dDogJ1NlZCcsIHdlZWtTdGF0dXM6ICdTZWRtaWNhJyxcblx0XHRkYXlTdGF0dXM6ICdcXCdEYXR1bVxcJyBERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ09kYWJlcmkgZGF0dW0nLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3NyLVNSJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFNlcmJpYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBEZWphbiBEaW1pxIcuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3NyJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyYjeDNjOycsIHByZXZTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDQv9GA0LXQtNGF0L7QtNC90Lgg0LzQtdGB0LXRhicsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDQv9GA0LXQtNGF0L7QtNC90YMg0LPQvtC00LjQvdGDJyxcblx0XHRuZXh0VGV4dDogJyYjeDNlOycsIG5leHRTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDRgdC70LXRhtC10ZvQuCDQvNC10YHQtdGGJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ9Cf0YDQuNC60LDQttC4INGB0LvQtdC00LXRm9GDINCz0L7QtNC40L3RgycsXG5cdFx0Y3VycmVudFRleHQ6ICfQlNCw0L3QsNGBJywgY3VycmVudFN0YXR1czogJ9Ci0LXQutGD0ZvQuCDQvNC10YHQtdGGJyxcblx0XHR0b2RheVRleHQ6ICfQlNCw0L3QsNGBJywgdG9kYXlTdGF0dXM6ICfQotC10LrRg9Gb0Lgg0LzQtdGB0LXRhicsXG5cdFx0Y2xlYXJUZXh0OiAn0J7QsdGA0LjRiNC4JywgY2xlYXJTdGF0dXM6ICfQntCx0YDQuNGI0Lgg0YLRgNC10L3Rg9GC0L3QuCDQtNCw0YLRg9C8Jyxcblx0XHRjbG9zZVRleHQ6ICfQl9Cw0YLQstC+0YDQuCcsIGNsb3NlU3RhdHVzOiAn0JfQsNGC0LLQvtGA0Lgg0LrQsNC70LXQvdC00LDRgCcsXG5cdFx0eWVhclN0YXR1czogJ9Cf0YDQuNC60LDQttC4INCz0L7QtNC40L3QtScsIG1vbnRoU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0LzQtdGB0LXRhtC1Jyxcblx0XHR3ZWVrVGV4dDogJ9Ch0LXQtCcsIHdlZWtTdGF0dXM6ICfQodC10LTQvNC40YbQsCcsXG5cdFx0ZGF5U3RhdHVzOiAnXFwn0JTQsNGC0YPQvFxcJyBERCBkIE1NJywgZGVmYXVsdFN0YXR1czogJ9Ce0LTQsNCx0LXRgNC4INC00LDRgtGD0LwnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3NyJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFN3ZWRpc2ggbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBBbmRlcnMgRWtkYWhsICggYW5kZXJzQG5vbWFkaXouc2UpLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzdiddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG4gICAgICAgIHByZXZUZXh0OiAnJmxhcXVvO0bDtnJyYScsICBwcmV2U3RhdHVzOiAnJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICdOw6RzdGEmcmFxdW87JywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAnSWRhZycsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ0lkYWcnLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAnUmVuc2EnLCBjbGVhclN0YXR1czogJycsXG5cdFx0Y2xvc2VUZXh0OiAnU3TDpG5nJywgY2xvc2VTdGF0dXM6ICcnLFxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXG5cdFx0d2Vla1RleHQ6ICdWZScsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzdiddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBUYW1pbCAoVVRGLTgpIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgUyBBIFN1cmVzaGt1bWFyIChzYXNrdW1hckBsaXZlLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3RhJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJ+CuruCvgeCuqeCvjeCuqeCviOCur+CupOCvgScsICBwcmV2U3RhdHVzOiAnJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICfgroXgrp/gr4HgrqTgr43grqTgrqTgr4EnLCBuZXh0U3RhdHVzOiAnJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXG5cdFx0Y3VycmVudFRleHQ6ICfgrofgrqngr43grrHgr4EnLCBjdXJyZW50U3RhdHVzOiAnJyxcblx0XHR0b2RheVRleHQ6ICfgrofgrqngr43grrHgr4EnLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAn4K6F4K604K6/JywgY2xlYXJTdGF0dXM6ICcnLFxuXHRcdGNsb3NlVGV4dDogJ+CuruCvguCun+CvgScsIGNsb3NlU3RhdHVzOiAnJyxcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnJyxcblx0XHRkYXlTdGF0dXM6ICdELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd0YSddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBUaGFpIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgcGlwbyAocGlwb0BzaXhoZWFkLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3RoJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyZsYXF1bzsmbmJzcDvguKLguYnguK3guJknLCBwcmV2U3RhdHVzOiAnJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXG5cdFx0bmV4dFRleHQ6ICfguJbguLHguJTguYTguJsmbmJzcDsmcmFxdW87JywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAn4Lin4Lix4LiZ4LiZ4Li14LmJJywgY3VycmVudFN0YXR1czogJycsXG5cdFx0dG9kYXlUZXh0OiAn4Lin4Lix4LiZ4LiZ4Li14LmJJywgdG9kYXlTdGF0dXM6ICcnLFxuXHRcdGNsZWFyVGV4dDogJ+C4peC4micsIGNsZWFyU3RhdHVzOiAnJyxcblx0XHRjbG9zZVRleHQ6ICfguJvguLTguJQnLCBjbG9zZVN0YXR1czogJycsXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJycsXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3RoJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFR1cmtpc2ggbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBJenpldCBFbXJlIEVya2FuIChrYXJhQGthcmFsYW1hbGFyLm5ldCkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3RyJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRwcmV2VGV4dDogJyYjeDNjO2dlcmknLCBwcmV2U3RhdHVzOiAnw7ZuY2VraSBhecSxIGfDtnN0ZXInLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcblx0XHRuZXh0VGV4dDogJ2lsZXJpJiN4M2UnLCBuZXh0U3RhdHVzOiAnc29ucmFraSBhecSxIGfDtnN0ZXInLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcblx0XHRjdXJyZW50VGV4dDogJ2J1Z8O8bicsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ2J1Z8O8bicsIHRvZGF5U3RhdHVzOiAnJyxcblx0XHRjbGVhclRleHQ6ICd0ZW1pemxlJywgY2xlYXJTdGF0dXM6ICdnZcOnZXJsaSB0YXJpaGkgdGVtaXpsZXInLFxuXHRcdGNsb3NlVGV4dDogJ2thcGF0JywgY2xvc2VTdGF0dXM6ICdzYWRlY2UgZ8O2c3RlcmdleWkga2FwYXQnLFxuXHRcdHllYXJTdGF0dXM6ICdiYcWfa2EgecSxbCcsIG1vbnRoU3RhdHVzOiAnYmHFn2thIGF5Jyxcblx0XHR3ZWVrVGV4dDogJ0hmJywgd2Vla1N0YXR1czogJ0F5xLFuIGhhZnRhbGFyxLEnLFxuXHRcdGRheVN0YXR1czogJ0QsIE0gZCBzZcOnaW5peicsIGRlZmF1bHRTdGF0dXM6ICdCaXIgdGFyaWggc2XDp2luaXonLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3RyJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFRhdGFyIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgSXJlayBLaGF6aWV2IChraGF6aXJla0BnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd0dCddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICfQkNC70LTQsNCz0YsnLCAgcHJldlN0YXR1czogJ9CQ0LvQtNCw0LPRiyDQsNC50L3RiyDQutKv0YDRgdOZ0YLSrycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJmx0OyZsdDsnLCBwcmV2SnVtcFN0YXR1czogJ9CQ0LvQtNCw0LPRiyDQtdC70L3RiyDQutKv0YDRgdOZ0YLSrycsXG5cdFx0bmV4dFRleHQ6ICfQmtC40LvTmdGB0LUnLCBuZXh0U3RhdHVzOiAn0JrQuNC705nRgdC1INCw0LnQvdGLINC60q/RgNGB05nRgtKvJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmZ3Q7Jmd0OycsIG5leHRKdW1wU3RhdHVzOiAn0JrQuNC705nRgdC1INC10LvQvdGLINC60q/RgNGB05nRgtKvJyxcblx0XHRjdXJyZW50VGV4dDogJ9Cl05nQt9C10YAnLCBjdXJyZW50U3RhdHVzOiAn0KXTmdC30LXRgNCz0LUg0LDQudC90Ysg0LrSr9GA0YHTmdGC0q8nLFxuXHRcdHRvZGF5VGV4dDogJ9CR0q/Qs9C10L0nLCB0b2RheVN0YXR1czogJ9CR0q/Qs9C10L3Qs9C1INCw0LnQvdGLINC60q/RgNGB05nRgtKvJyxcblx0XHRjbGVhclRleHQ6ICfQp9C40YHRgtCw0YDRgtGDJywgY2xlYXJTdGF0dXM6ICfQkdCw0YDQu9GL0Log0LrTqdC90L3TmdGA0L3QtSDRh9C40YHRgtCw0YDRgtGDJyxcblx0XHRjbG9zZVRleHQ6ICfQr9Cx0LDRgNCz0LAnLCBjbG9zZVN0YXR1czogJ9Ca06nQvSDRgdCw0LnQu9Cw0YPQvdGLINGP0LHQsNGA0LPQsCcsXG5cdFx0eWVhclN0YXR1czogJ9CV0LvQvdGLINC60LXRgNGC0LXQs9C10LcnLCBtb250aFN0YXR1czogJ9CQ0LnQvdGLINC60LXRgNGC0LXQs9C10LcnLFxuXHRcdHdlZWtUZXh0OiAn0JDRgtC90LAnLCB3ZWVrU3RhdHVzOiAn0JXQu9C00LAg0LDRgtC90LAg0YHQsNC90YsnLFxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAn0JrTqdC90L3QtSDRgdCw0LnQu9Cw0LPRi9C3Jyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd0dCddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBVa3JhaW5pYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxuICAgV3JpdHRlbiBieSBNYXhpbSBEcm9nb2JpdHNraXkgKG1heGRhb0BnbWFpbC5jb20pLiAqL1xuKGZ1bmN0aW9uKCQpIHtcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd1ayddID0ge1xuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0cHJldlRleHQ6ICcmI3gzYzsnLCAgcHJldlN0YXR1czogJycsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxuXHRcdG5leHRUZXh0OiAnJiN4M2U7JywgbmV4dFN0YXR1czogJycsXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxuXHRcdGN1cnJlbnRUZXh0OiAn0KHRjNC+0LPQvtC00L3RlicsIGN1cnJlbnRTdGF0dXM6ICcnLFxuXHRcdHRvZGF5VGV4dDogJ9Ch0YzQvtCz0L7QtNC90ZYnLCB0b2RheVN0YXR1czogJycsXG5cdFx0Y2xlYXJUZXh0OiAn0J7Rh9C40YHRgtC40YLQuCcsIGNsZWFyU3RhdHVzOiAnJyxcblx0XHRjbG9zZVRleHQ6ICfQl9Cw0LrRgNC40YLQuCcsIGNsb3NlU3RhdHVzOiAnJyxcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxuXHRcdHdlZWtUZXh0OiAn0J3QtScsIHdlZWtTdGF0dXM6ICcnLFxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd1ayddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBVcmR1IGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIE1hbnNvb3IgTXVuaWIgLS0gbWFuc29vcm11bmliQGdtYWlsLmNvbSA8aHR0cDovL3d3dy5tYW5zb29yLmNvLm5yL21hbnNvb3IuaHRtbD5cbiAgIFRoYW5rcyB0byBIYWJpYiBBaG1lZCwgT2JhaWRVbGxhaCBBbndhci4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndXInXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M72q/YsNi02KrbgScsIHByZXZTdGF0dXM6ICfZhdin2Ycg2q/YsNi02KrbgScsXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICfYqNix2LMg2q/YsNi02KrbgScsXG5cdFx0bmV4dFRleHQ6ICfYotim2YbYr9uBJiN4M2U7JywgbmV4dFN0YXR1czogJ9mF2KfZhyDYotim2YbYr9uBJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ9io2LHYsyDYotim2YbYr9uBJyxcblx0XHRjdXJyZW50VGV4dDogJ9ix2YjYp9q6JywgY3VycmVudFN0YXR1czogJ9mF2KfZhyDYsdmI2KfauicsXG5cdFx0dG9kYXlUZXh0OiAn2KLYrCcsIHRvZGF5U3RhdHVzOiAn2KLYrCcsXG5cdFx0Y2xlYXJUZXh0OiAn2K3YsNmBINiq2KfYsdmK2K4nLCBjbGVhclN0YXR1czogJ9qp2LHbjNq6INit2LDZgSDYqtin2LHbjNiuJyxcblx0XHRjbG9zZVRleHQ6ICfaqdix24zauiDYqNmG2K8nLCBjbG9zZVN0YXR1czogJ9qp24zZhNim25Ig2qnYsdmG25Ig2KjZhtivJyxcblx0XHR5ZWFyU3RhdHVzOiAn2KjYsdizINiq2KjYr9uM2YTbjCcsIG1vbnRoU3RhdHVzOiAn2YXYp9mHINiq2KjYr9uM2YTbjCcsXG5cdFx0d2Vla1RleHQ6ICfbgdmB2KrbgScsIHdlZWtTdGF0dXM6ICfbgdmB2KrbgScsXG5cdFx0ZGF5U3RhdHVzOiAn2KfZhtiq2K7Yp9ioIEQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICfaqdix24zauiDZhdmG2KrYrtioINiq2KfYsdmK2K4nLFxuXHRcdGlzUlRMOiB0cnVlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndXInXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgVmlldG5hbWVzZSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXG4gICBUcmFuc2xhdGVkIGJ5IExlIFRoYW5oIEh1eSAobHRoYW5oaHV5QGNpdC5jdHUuZWR1LnZuKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndmknXSA9IHtcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxuXHRcdHByZXZUZXh0OiAnJiN4M2M7VHLGsOG7m2MnLCBwcmV2U3RhdHVzOiAnVGjDoW5nIHRyxrDhu5tjJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ07Eg20gdHLGsOG7m2MnLFxuXHRcdG5leHRUZXh0OiAnVGnhur9wJiN4M2U7JywgbmV4dFN0YXR1czogJ1Row6FuZyBzYXUnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnTsSDbSBzYXUnLFxuXHRcdGN1cnJlbnRUZXh0OiAnSMO0bSBuYXknLCBjdXJyZW50U3RhdHVzOiAnVGjDoW5nIGhp4buHbiB04bqhaScsXG5cdFx0dG9kYXlUZXh0OiAnSMO0bSBuYXknLCB0b2RheVN0YXR1czogJ1Row6FuZyBoaeG7h24gdOG6oWknLFxuXHRcdGNsZWFyVGV4dDogJ1jDs2EnLCBjbGVhclN0YXR1czogJ1jDs2EgbmfDoHkgaGnhu4duIHThuqFpJyxcblx0XHRjbG9zZVRleHQ6ICfEkMOzbmcnLCBjbG9zZVN0YXR1czogJ8SQw7NuZyB2w6Aga2jDtG5nIGzGsHUgbOG6oWkgdGhheSDEkeG7lWknLFxuXHRcdHllYXJTdGF0dXM6ICdOxINtIGtow6FjJywgbW9udGhTdGF0dXM6ICdUaMOhbmcga2jDoWMnLFxuXHRcdHdlZWtUZXh0OiAnVHUnLCB3ZWVrU3RhdHVzOiAnVHXhuqduIHRyb25nIG7Eg20nLFxuXHRcdGRheVN0YXR1czogJ8SQYW5nIGNo4buNbiBERCwgXFwnbmfDoHlcXCcgZCBNJywgZGVmYXVsdFN0YXR1czogJ0No4buNbiBuZ8OgeScsXG5cdFx0aXNSVEw6IGZhbHNlXG5cdH07XG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndmknXSk7XG59KShqUXVlcnkpO1xu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgU2ltcGxpZmllZCBDaGluZXNlIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgQ2xvdWRyZWFtIChjbG91ZHJlYW1AZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snemgtQ04nXSA9IHtcblx0XHRyZW5kZXJlcjogJC5leHRlbmQoe30sICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRcdHttb250aDogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLm1vbnRoLlxuXHRcdFx0XHRyZXBsYWNlKC9tb250aEhlYWRlci8sICdtb250aEhlYWRlcjpNTSB5eXl55bm0Jyl9KSxcblx0XHRwcmV2VGV4dDogJyYjeDNjO+S4iuaciCcsIHByZXZTdGF0dXM6ICfmmL7npLrkuIrmnIgnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAn5pi+56S65LiK5LiA5bm0Jyxcblx0XHRuZXh0VGV4dDogJ+S4i+aciCYjeDNlOycsIG5leHRTdGF0dXM6ICfmmL7npLrkuIvmnIgnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn5pi+56S65LiL5LiA5bm0Jyxcblx0XHRjdXJyZW50VGV4dDogJ+S7iuWkqScsIGN1cnJlbnRTdGF0dXM6ICfmmL7npLrmnKzmnIgnLFxuXHRcdHRvZGF5VGV4dDogJ+S7iuWkqScsIHRvZGF5U3RhdHVzOiAn5pi+56S65pys5pyIJyxcblx0XHRjbGVhclRleHQ6ICfmuIXpmaQnLCBjbGVhclN0YXR1czogJ+a4hemZpOW3sumAieaXpeacnycsXG5cdFx0Y2xvc2VUZXh0OiAn5YWz6ZetJywgY2xvc2VTdGF0dXM6ICfkuI3mlLnlj5jlvZPliY3pgInmi6knLFxuXHRcdHllYXJTdGF0dXM6ICfpgInmi6nlubTku70nLCBtb250aFN0YXR1czogJ+mAieaLqeaciOS7vScsXG5cdFx0d2Vla1RleHQ6ICflkagnLCB3ZWVrU3RhdHVzOiAn5bm05YaF5ZGo5qyhJyxcblx0XHRkYXlTdGF0dXM6ICfpgInmi6kgbeaciCBk5pelLCBERCcsIGRlZmF1bHRTdGF0dXM6ICfor7fpgInmi6nml6XmnJ8nLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3poLUNOJ10pO1xufSkoalF1ZXJ5KTtcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEhvbmcgS29uZyBDaGluZXNlIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgU0NDWSAoc2FtdWVsY3ljaGFuQGdtYWlsLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3poLUhLJ10gPSB7XG5cdFx0cmVuZGVyZXI6ICQuZXh0ZW5kKHt9LCAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXG5cdFx0XHR7bW9udGg6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlci5tb250aC5cblx0XHRcdFx0cmVwbGFjZSgvbW9udGhIZWFkZXIvLCAnbW9udGhIZWFkZXI6eXl5eeW5tCBNTScpfSksXG5cdFx0cHJldlRleHQ6ICcmI3gzYzvkuIrmnIgnLCBwcmV2U3RhdHVzOiAn6aGv56S65LiK5pyIJyxcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+mhr+ekuuS4iuS4gOW5tCcsXG5cdFx0bmV4dFRleHQ6ICfkuIvmnIgmI3gzZTsnLCBuZXh0U3RhdHVzOiAn6aGv56S65LiL5pyIJyxcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ+mhr+ekuuS4i+S4gOW5tCcsXG5cdFx0Y3VycmVudFRleHQ6ICfku4rlpKknLCBjdXJyZW50U3RhdHVzOiAn6aGv56S65pys5pyIJyxcblx0XHR0b2RheVRleHQ6ICfku4rlpKknLCB0b2RheVN0YXR1czogJ+mhr+ekuuacrOaciCcsXG5cdFx0Y2xlYXJUZXh0OiAn5riF6ZmkJywgY2xlYXJTdGF0dXM6ICfmuIXpmaTlt7Lpgbjml6XmnJ8nLFxuXHRcdGNsb3NlVGV4dDogJ+mXnOmWiScsIGNsb3NlU3RhdHVzOiAn5LiN5pS56K6K55uu5YmN55qE6YG45pOHJyxcblx0XHR5ZWFyU3RhdHVzOiAn6YG45pOH5bm05Lu9JywgbW9udGhTdGF0dXM6ICfpgbjmk4fmnIjku70nLFxuXHRcdHdlZWtUZXh0OiAn5ZGoJywgd2Vla1N0YXR1czogJ+W5tOWFp+WRqOasoScsXG5cdFx0ZGF5U3RhdHVzOiAn6YG45pOHIG3mnIggZOaXpSwgREQnLCBkZWZhdWx0U3RhdHVzOiAn6KuL6YG45pOH5pel5pyfJyxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd6aC1ISyddKTtcbn0pKGpRdWVyeSk7XG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBUcmFkaXRpb25hbCBDaGluZXNlIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cbiAgIFdyaXR0ZW4gYnkgUmVzc29sIChyZXNzb2xAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snemgtVFcnXSA9IHtcblx0XHRyZW5kZXJlcjogJC5leHRlbmQoe30sICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcblx0XHRcdHttb250aDogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLm1vbnRoLlxuXHRcdFx0XHRyZXBsYWNlKC9tb250aEhlYWRlci8sICdtb250aEhlYWRlcjpNTSB5eXl55bm0Jyl9KSxcblx0XHRwcmV2VGV4dDogJyYjeDNjO+S4iuaciCcsIHByZXZTdGF0dXM6ICfpoa/npLrkuIrmnIgnLFxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAn6aGv56S65LiK5LiA5bm0Jyxcblx0XHRuZXh0VGV4dDogJ+S4i+aciCYjeDNlOycsIG5leHRTdGF0dXM6ICfpoa/npLrkuIvmnIgnLFxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn6aGv56S65LiL5LiA5bm0Jyxcblx0XHRjdXJyZW50VGV4dDogJ+S7iuWkqScsIGN1cnJlbnRTdGF0dXM6ICfpoa/npLrmnKzmnIgnLFxuXHRcdHRvZGF5VGV4dDogJ+S7iuWkqScsIHRvZGF5U3RhdHVzOiAn6aGv56S65pys5pyIJyxcblx0XHRjbGVhclRleHQ6ICfmuIXpmaQnLCBjbGVhclN0YXR1czogJ+a4hemZpOW3sumBuOaXpeacnycsXG5cdFx0Y2xvc2VUZXh0OiAn6Zec6ZaJJywgY2xvc2VTdGF0dXM6ICfkuI3mlLnorornm67liY3nmoTpgbjmk4cnLFxuXHRcdHllYXJTdGF0dXM6ICfpgbjmk4flubTku70nLCBtb250aFN0YXR1czogJ+mBuOaTh+aciOS7vScsXG5cdFx0d2Vla1RleHQ6ICflkagnLCB3ZWVrU3RhdHVzOiAn5bm05YWn5ZGo5qyhJyxcblx0XHRkYXlTdGF0dXM6ICfpgbjmk4cgbeaciCBk5pelLCBERCcsIGRlZmF1bHRTdGF0dXM6ICfoq4vpgbjmk4fml6XmnJ8nLFxuXHRcdGlzUlRMOiBmYWxzZVxuXHR9O1xuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3poLVRXJ10pO1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmxhbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmxhbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIENhbGVuZGFycyBkYXRlIHBpY2tlciBsb2NhbGlzYXRpb25zIGZvciBqUXVlcnkgdjIuMC4xLlxyXG4gICBXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpIEF1Z3VzdCAyMDA5LlxyXG4gICBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCAoaHR0cDovL2tlaXRoLXdvb2QubmFtZS9saWNlbmNlLmh0bWwpIGxpY2Vuc2UuIFxyXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cclxuLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBBZnJpa2FhbnMgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IFJlbmllciBQcmV0b3JpdXMgYW5kIFJ1ZWRpZ2VyIFRoaWVkZS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2FmJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICdWb3JpZ2UnLCBwcmV2U3RhdHVzOiAnVmVydG9vbiB2b3JpZ2UgbWFhbmQnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICdWZXJ0b29uIHZvcmlnZSBqYWFyJyxcclxuXHRcdG5leHRUZXh0OiAnVm9sZ2VuZGUnLCBuZXh0U3RhdHVzOiAnVmVydG9vbiB2b2xnZW5kZSBtYWFuZCcsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ1ZlcnRvb24gdm9sZ2VuZGUgamFhcicsXHJcblx0XHRjdXJyZW50VGV4dDogJ1ZhbmRhZycsIGN1cnJlbnRTdGF0dXM6ICdWZXJ0b29uIGh1aWRpZ2UgbWFhbmQnLFxyXG5cdFx0dG9kYXlUZXh0OiAnVmFuZGFnJywgdG9kYXlTdGF0dXM6ICdWZXJ0b29uIGh1aWRpZ2UgbWFhbmQnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnVmVlIHVpdCcsIGNsZWFyU3RhdHVzOiAnVmVyd3lkZXIgZGllIGh1aWRpZ2UgZGF0dW0nLFxyXG5cdFx0Y2xvc2VUZXh0OiAnS2xhYXInLCBjbG9zZVN0YXR1czogJ1NsdWl0IHNvbmRlciB2ZXJhbmRlcmluZycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnVmVydG9vbiBcXCduIGFuZGVyIGphYXInLCBtb250aFN0YXR1czogJ1ZlcnRvb24gXFwnbiBhbmRlciBtYWFuZCcsXHJcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJ1dlZWsgdmFuIGRpZSBqYWFyJyxcclxuXHRcdGRheVN0YXR1czogJ0tpZXMgREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdLaWVzIFxcJ24gZGF0dW0nLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2FmJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEFtaGFyaWMgKOGKoOGIm+GIreGKmykgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBMZXl1IFNpc2F5LiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYW0nXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJ+GLq+GIiOGNiCcsIHByZXZTdGF0dXM6ICfhi6vhiIjhjYjhi43hipUg4YuI4YitIOGKoOGIs+GLrScsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+GLq+GIiOGNiOGLjeGKlSDhi5PhiJjhibUg4Yqg4Yiz4YutJyxcclxuXHRcdG5leHRUZXh0OiAn4YmA4Yyj4YutJywgbmV4dFN0YXR1czogJ+GJgOGMo+GLqeGKlSDhi4jhiK0g4Yqg4Yiz4YutJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn4YmA4Yyj4Yup4YqVIOGLk+GImOGJtSDhiqDhiLPhi60nLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfhiqDhiIHhipUnLCBjdXJyZW50U3RhdHVzOiAn4Yuo4Yqg4YiB4YqR4YqVIOGLiOGIrSDhiqDhiLPhi60nLFxyXG5cdFx0dG9kYXlUZXh0OiAn4Yub4YisJywgdG9kYXlTdGF0dXM6ICfhi6jhi5vhiKzhipUg4YuI4YitIOGKoOGIs+GLrScsXHJcblx0XHRjbGVhclRleHQ6ICfhiqDhjKXhjYsnLCBjbGVhclN0YXR1czogJ+GLqOGJsOGImOGIqOGMoOGLjeGKlSDhiYDhipUg4Yqg4Yyl4Y2LJyxcclxuXHRcdGNsb3NlVGV4dDogJ+GLneGMiycsIGNsb3NlU3RhdHVzOiAn4Yuo4YmA4YqVIOGImOGIneGIqOGMq+GLjeGKlSDhi53hjIsnLFxyXG5cdFx0eWVhclN0YXR1czogJ+GLk+GImOGJseGKlSDhiYDhi63hiK0nLCBtb250aFN0YXR1czogJ+GLiOGIqeGKlSDhiYDhi63hiK0nLFxyXG5cdFx0d2Vla1RleHQ6ICfhiLPhiJ0nLCB3ZWVrU3RhdHVzOiAn4Yuo4YuT4YiY4YmxIOGIs+GIneGKleGJtSAnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCwgeXl5eSDhiJ3hiKjhjKUnLCBkZWZhdWx0U3RhdHVzOiAn4YmA4YqVIOGIneGIqOGMpScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYW0nXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgQWxnZXJpYW4gKGFuZCBUdW5pc2lhbikgQXJhYmljIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgTW9oYW1lZCBDaGVyaWYgQk9VQ0hFTEFHSEVNIC0tIGNoZXJpZmJvdWNoZWxhZ2hlbUB5YWhvby5mciAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYXItRFonXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO9in2YTYs9in2KjZgicsIHByZXZTdGF0dXM6ICfYudix2LYg2KfZhNi02YfYsSDYp9mE2LPYp9io2YInLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICfYp9mE2KrYp9mE2YomI3gzZTsnLCBuZXh0U3RhdHVzOiAn2LnYsdi2INin2YTYtNmH2LEg2KfZhNmC2KfYr9mFJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn2KfZhNmK2YjZhScsIGN1cnJlbnRTdGF0dXM6ICfYudix2LYg2KfZhNi02YfYsSDYp9mE2K3Yp9mE2YonLFxyXG5cdFx0dG9kYXlUZXh0OiAn2KfZhNmK2YjZhScsIHRvZGF5U3RhdHVzOiAn2LnYsdi2INin2YTYtNmH2LEg2KfZhNit2KfZhNmKJyxcclxuXHRcdGNsZWFyVGV4dDogJ9mF2LPYrScsIGNsZWFyU3RhdHVzOiAn2KfZhdiz2K0g2KfZhNiq2KfYsdmK2K4g2KfZhNit2KfZhNmKJyxcclxuXHRcdGNsb3NlVGV4dDogJ9il2LrZhNin2YInLCBjbG9zZVN0YXR1czogJ9il2LrZhNin2YIg2KjYr9mI2YYg2K3Zgdi4JyxcclxuXHRcdHllYXJTdGF0dXM6ICfYudix2LYg2LPZhtipINii2K7YsdmJJywgbW9udGhTdGF0dXM6ICfYudix2LYg2LTZh9ixINii2K7YsScsXHJcblx0XHR3ZWVrVGV4dDogJ9ij2LPYqNmI2LknLCB3ZWVrU3RhdHVzOiAn2KPYs9io2YjYuSDYp9mE2LPZhtipJyxcclxuXHRcdGRheVN0YXR1czogJ9in2K7YqtixIEQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICfYp9iu2KrYsSDZitmI2YUnLFxyXG5cdFx0aXNSVEw6IHRydWVcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYXItRFonXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgQXJhYmljIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgTWFobW91ZCBLaGFsZWQgLS0gbWFobW91ZC5raGFsZWRAYmFkcml0LmNvbVxyXG4gICBOT1RFOiBtb250aE5hbWVzIGFyZSB0aGUgbmV3IG1vbnRocyBuYW1lcyAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYXItRUcnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO9in2YTYs9in2KjZgicsIHByZXZTdGF0dXM6ICfYudix2LYg2KfZhNi02YfYsSDYp9mE2LPYp9io2YInLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICfYp9mE2KrYp9mE2YomI3gzZTsnLCBuZXh0U3RhdHVzOiAn2LnYsdi2INin2YTYtNmH2LEg2KfZhNmC2KfYr9mFJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn2KfZhNmK2YjZhScsIGN1cnJlbnRTdGF0dXM6ICfYudix2LYg2KfZhNi02YfYsSDYp9mE2K3Yp9mE2YonLFxyXG5cdFx0dG9kYXlUZXh0OiAn2KfZhNmK2YjZhScsIHRvZGF5U3RhdHVzOiAn2LnYsdi2INin2YTYtNmH2LEg2KfZhNit2KfZhNmKJyxcclxuXHRcdGNsZWFyVGV4dDogJ9mF2LPYrScsIGNsZWFyU3RhdHVzOiAn2KfZhdiz2K0g2KfZhNiq2KfYsdmK2K4g2KfZhNit2KfZhNmKJyxcclxuXHRcdGNsb3NlVGV4dDogJ9il2LrZhNin2YInLCBjbG9zZVN0YXR1czogJ9il2LrZhNin2YIg2KjYr9mI2YYg2K3Zgdi4JyxcclxuXHRcdHllYXJTdGF0dXM6ICfYudix2LYg2LPZhtipINii2K7YsdmJJywgbW9udGhTdGF0dXM6ICfYudix2LYg2LTZh9ixINii2K7YsScsXHJcblx0XHR3ZWVrVGV4dDogJ9ij2LPYqNmI2LknLCB3ZWVrU3RhdHVzOiAn2KPYs9io2YjYuSDYp9mE2LPZhtipJyxcclxuXHRcdGRheVN0YXR1czogJ9in2K7YqtixIEQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICfYp9iu2KrYsSDZitmI2YUnLFxyXG5cdFx0aXNSVEw6IHRydWVcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snYXItRUcnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgQXJhYmljIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgS2hhbGVkIEFsIEhvcmFuaSAtLSDYrtin2YTYryDYp9mE2K3ZiNix2KfZhtmKIC0tIGtva28uZHdAZ21haWwuY29tICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydhciddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M72KfZhNiz2KfYqNmCJywgcHJldlN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTYs9in2KjZgicsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ9in2YTYqtin2YTZiiYjeDNlOycsIG5leHRTdGF0dXM6ICfYudix2LYg2KfZhNi02YfYsSDYp9mE2YLYp9iv2YUnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfYp9mE2YrZiNmFJywgY3VycmVudFN0YXR1czogJ9i52LHYtiDYp9mE2LTZh9ixINin2YTYrdin2YTZiicsXHJcblx0XHR0b2RheVRleHQ6ICfYp9mE2YrZiNmFJywgdG9kYXlTdGF0dXM6ICfYudix2LYg2KfZhNi02YfYsSDYp9mE2K3Yp9mE2YonLFxyXG5cdFx0Y2xlYXJUZXh0OiAn2YXYs9itJywgY2xlYXJTdGF0dXM6ICfYp9mF2LPYrSDYp9mE2KrYp9ix2YrYriDYp9mE2K3Yp9mE2YonLFxyXG5cdFx0Y2xvc2VUZXh0OiAn2KXYutmE2KfZgicsIGNsb3NlU3RhdHVzOiAn2KXYutmE2KfZgiDYqNiv2YjZhiDYrdmB2LgnLFxyXG5cdFx0eWVhclN0YXR1czogJ9i52LHYtiDYs9mG2Kkg2KLYrtix2YknLCBtb250aFN0YXR1czogJ9i52LHYtiDYtNmH2LEg2KLYrtixJyxcclxuXHRcdHdlZWtUZXh0OiAn2KPYs9io2YjYuScsIHdlZWtTdGF0dXM6ICfYo9iz2KjZiNi5INin2YTYs9mG2KknLFxyXG5cdFx0ZGF5U3RhdHVzOiAn2KfYrtiq2LEgRCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ9in2K7YqtixINmK2YjZhScsXHJcblx0XHRpc1JUTDogdHJ1ZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydhciddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBBemVyYmFpamFuaSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgSmFtaWwgTmFqYWZvdiAobmVjZWZvdjMzQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydheiddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7R2VyaScsICBwcmV2U3RhdHVzOiAnxo92dsmZbGtpIGF5JyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnxo92dsmZbGtpIGlsJyxcclxuXHRcdG5leHRUZXh0OiAnxLByyZlsaSYjeDNlOycsIG5leHRTdGF0dXM6ICdTb25yYWvEsSBheScsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ1NvbnJha8SxIGlsJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnQnVnw7xuJywgY3VycmVudFN0YXR1czogJ8SwbmRpa2kgYXknLFxyXG5cdFx0dG9kYXlUZXh0OiAnQnVnw7xuJywgdG9kYXlTdGF0dXM6ICfEsG5kaWtpIGF5JyxcclxuXHRcdGNsZWFyVGV4dDogJ1TJmW1pemzJmScsIGNsZWFyU3RhdHVzOiAnVGFyaXhpIHNpbCcsXHJcblx0XHRjbG9zZVRleHQ6ICdCYcSfbGEnLCBjbG9zZVN0YXR1czogJ1TJmXF2aW1pIGJhxJ9sYScsXHJcblx0XHR5ZWFyU3RhdHVzOiAnQmHFn3FhIGlsJywgbW9udGhTdGF0dXM6ICdCYcWfcWEgYXknLFxyXG5cdFx0d2Vla1RleHQ6ICdIZicsIHdlZWtTdGF0dXM6ICdIyZlmdMmZbMmZcicsXHJcblx0XHRkYXlTdGF0dXM6ICdELCBNIGQgc2XDp2luJywgZGVmYXVsdFN0YXR1czogJ0JpciB0YXJpeCBzZcOnaW4nLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2F6J10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEJ1bGdhcmlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgU3RveWFuIEt5b3NldiAoaHR0cDovL3N2ZXN0Lm9yZykuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydiZyddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuICAgICAgICBwcmV2VGV4dDogJyYjeDNjO9C90LDQt9Cw0LQnLCBwcmV2U3RhdHVzOiAn0L/QvtC60LDQttC4INC/0L7RgdC70LXQtNC90LjRjyDQvNC10YHQtdGGJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuICAgICAgICBuZXh0VGV4dDogJ9C90LDQv9GA0LXQtCYjeDNlOycsIG5leHRTdGF0dXM6ICfQv9C+0LrQsNC20Lgg0YHQu9C10LTQstCw0YnQuNGPINC80LXRgdC10YYnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0OiAn0LTQvdC10YEnLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ9C00L3QtdGBJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAn0LjQt9GH0LjRgdGC0LgnLCBjbGVhclN0YXR1czogJ9C40LfRh9C40YHRgtC4INCw0LrRgtGD0LDQu9C90LDRgtCwINC00LDRgtCwJyxcclxuICAgICAgICBjbG9zZVRleHQ6ICfQt9Cw0YLQstC+0YDQuCcsIGNsb3NlU3RhdHVzOiAn0LfQsNGC0LLQvtGA0Lgg0LHQtdC3INC/0YDQvtC80LXQvdC4JyxcclxuXHRcdHllYXJTdGF0dXM6ICfQv9C+0LrQsNC20Lgg0LTRgNGD0LPQsCDQs9C+0LTQuNC90LAnLCBtb250aFN0YXR1czogJ9C/0L7QutCw0LbQuCDQtNGA0YPQsyDQvNC10YHQtdGGJyxcclxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAn0YHQtdC00LzQuNGG0LAg0L7RgiDQvNC10YHQtdGG0LAnLFxyXG5cdFx0ZGF5U3RhdHVzOiAn0JjQt9Cx0LXRgNC4IEQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICfQmNC30LHQtdGA0Lgg0LTQsNGC0LAnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2JnJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEJvc25pYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBLZW5hbiBLb25qby4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2JzJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYzsnLCBwcmV2U3RhdHVzOiAnJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnJiN4M2U7JywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ0RhbmFzJywgY3VycmVudFN0YXR1czogJycsXHJcblx0XHR0b2RheVRleHQ6ICdEYW5hcycsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ1gnLCBjbGVhclN0YXR1czogJycsXHJcblx0XHRjbG9zZVRleHQ6ICdaYXR2b3JpJywgY2xvc2VTdGF0dXM6ICcnLFxyXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcclxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnJyxcclxuXHRcdGRheVN0YXR1czogJycsIGRlZmF1bHRTdGF0dXM6ICcnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2JzJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIENhdGFsYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0ZXJzOiAoam9hbi5sZW9uQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydjYSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QW50JywgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ1NlZyYjeDNlOycsIG5leHRTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdBdnVpJywgY3VycmVudFN0YXR1czogJycsXHJcblx0XHR0b2RheVRleHQ6ICdBdnVpJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnTmV0ZWphcicsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ1RhbmNhcicsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snY2EnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgQ3plY2ggbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IFRvbWFzIE11bGxlciAodG9tYXNAdG9tYXMtbXVsbGVyLm5ldCkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydjcyddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7RMWZw612ZScsIHByZXZTdGF0dXM6ICdQxZllasOtdCBuYSBwxZllZGNob3rDrSBtxJtzw60nLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICdQb3pkxJtqaSYjeDNlOycsIG5leHRTdGF0dXM6ICdQxZllasOtdCBuYSBkYWzFocOtIG3Em3PDrWMnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdOeW7DrScsIGN1cnJlbnRTdGF0dXM6ICdQxZllamRlIG5hIGFrdHXDoWxuw60gbcSbc8OtYycsXHJcblx0XHR0b2RheVRleHQ6ICdOeW7DrScsIHRvZGF5U3RhdHVzOiAnUMWZZWpkZSBuYSBha3R1w6FsbsOtIG3Em3PDrWMnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnVnltYXphdCcsIGNsZWFyU3RhdHVzOiAnVnltYcW+ZSB6YWRhbsOpIGRhdHVtJyxcclxuXHRcdGNsb3NlVGV4dDogJ1phdsWZw610JywgIGNsb3NlU3RhdHVzOiAnWmF2xZllIGthbGVuZMOhxZkgYmV6ZSB6bcSbbnknLFxyXG5cdFx0eWVhclN0YXR1czogJ1DFmWVqw610IG5hIGppbsO9IHJvaycsIG1vbnRoU3RhdHVzOiAnUMWZZWrDrXQgbmEgamluw70gbcSbc8OtYycsXHJcblx0XHR3ZWVrVGV4dDogJ1TDvWQnLCB3ZWVrU3RhdHVzOiAnVMO9ZGVuIHYgcm9jZScsXHJcblx0XHRkYXlTdGF0dXM6ICdcXCdWeWJlclxcJyBERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ1Z5YmVydGUgZGF0dW0nLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2NzJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIERhbmlzaCBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgSmFuIENocmlzdGVuc2VuICggZGVsZXRlc3R1ZmZAZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2RhJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG4gICAgICAgIHByZXZUZXh0OiAnJiN4M2M7Rm9ycmlnZScsIHByZXZTdGF0dXM6ICdWaXMgZm9ycmlnZSBtw6VuZWQnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICdOw6ZzdGUmI3gzZTsnLCBuZXh0U3RhdHVzOiAnVmlzIG7DpnN0ZSBtw6VuZWQnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdJZGFnJywgY3VycmVudFN0YXR1czogJ1ZpcyBha3R1ZWwgbcOlbmVkJyxcclxuXHRcdHRvZGF5VGV4dDogJ0lkYWcnLCB0b2RheVN0YXR1czogJ1ZpcyBha3R1ZWwgbcOlbmVkJyxcclxuXHRcdGNsZWFyVGV4dDogJ051bHN0aWwnLCBjbGVhclN0YXR1czogJ051bHN0aWwgZGVuIGFrdHVlbGxlIGRhdG8nLFxyXG5cdFx0Y2xvc2VUZXh0OiAnTHVrJywgY2xvc2VTdGF0dXM6ICdMdWsgdWRlbiDDpm5kcmluZ2VyJyxcclxuXHRcdHllYXJTdGF0dXM6ICdWaXMgZXQgYW5kZXQgw6VyJywgbW9udGhTdGF0dXM6ICdWaXMgZW4gYW5kZW4gbcOlbmVkJyxcclxuXHRcdHdlZWtUZXh0OiAnVWdlJywgd2Vla1N0YXR1czogJ8OFcmV0cyB1Z2UnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnVsOmbGcgRCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ1bDpmxnIGVuIGRhdG8nLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2RhJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFN3aXNzLUdlcm1hbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgRG91Z2xhcyBKb3NlICYgSnVlcmcgTWVpZXIuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydkZS1DSCddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7enVyw7xjaycsIHByZXZTdGF0dXM6ICdsZXR6dGVuIE1vbmF0IHplaWdlbicsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ27DpGNoc3RlciYjeDNlOycsIG5leHRTdGF0dXM6ICduw6RjaHN0ZW4gTW9uYXQgemVpZ2VuJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnaGV1dGUnLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ2hldXRlJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnbMO2c2NoZW4nLCBjbGVhclN0YXR1czogJ2FrdHVlbGxlcyBEYXR1bSBsw7ZzY2hlbicsXHJcblx0XHRjbG9zZVRleHQ6ICdzY2hsaWVzc2VuJywgY2xvc2VTdGF0dXM6ICdvaG5lIMOEbmRlcnVuZ2VuIHNjaGxpZXNzZW4nLFxyXG5cdFx0eWVhclN0YXR1czogJ2FuZGVyZXMgSmFociBhbnplaWdlbicsIG1vbnRoU3RhdHVzOiAnYW5kZXJlbiBNb25hdCBhbnplaWdlJyxcclxuXHRcdHdlZWtUZXh0OiAnV28nLCB3ZWVrU3RhdHVzOiAnV29jaGUgZGVzIE1vbmF0cycsXHJcblx0XHRkYXlTdGF0dXM6ICdXw6RobGUgRCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ1fDpGhsZSBlaW4gRGF0dW0nLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2RlLUNIJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEdlcm1hbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTWlsaWFuIFdvbGZmIChtYWlsQG1pbGlhbncuZGUpLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZGUnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO3p1csO8Y2snLCBwcmV2U3RhdHVzOiAnbGV0enRlbiBNb25hdCB6ZWlnZW4nLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICdWb3ImI3gzZTsnLCBuZXh0U3RhdHVzOiAnbsOkY2hzdGVuIE1vbmF0IHplaWdlbicsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ2hldXRlJywgY3VycmVudFN0YXR1czogJycsXHJcblx0XHR0b2RheVRleHQ6ICdoZXV0ZScsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ2zDtnNjaGVuJywgY2xlYXJTdGF0dXM6ICdha3R1ZWxsZXMgRGF0dW0gbMO2c2NoZW4nLFxyXG5cdFx0Y2xvc2VUZXh0OiAnc2NobGllw59lbicsIGNsb3NlU3RhdHVzOiAnb2huZSDDhG5kZXJ1bmdlbiBzY2hsaWXDn2VuJyxcclxuXHRcdHllYXJTdGF0dXM6ICdhbmRlcmVzIEphaHIgYW56ZWlnZW4nLCBtb250aFN0YXR1czogJ2FuZGVyZW4gTW9uYXQgYW56ZWlnZScsXHJcblx0XHR3ZWVrVGV4dDogJ1dvJywgd2Vla1N0YXR1czogJ1dvY2hlIGRlcyBNb25hdHMnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnV8OkaGxlIEQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdXw6RobGUgZWluIERhdHVtJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydkZSddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBHcmVlayBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgQWxleCBDaWNvdmljIChodHRwOi8vd3d3LmFsZXhjaWNvdmljLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlbCddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnzqDPgc6/zrfOs86/z43OvM61zr3Ov8+CJywgcHJldlN0YXR1czogJ86Vz4DOuc+DzrrPjM+AzrfPg863IM+Az4HOv863zrPOv8+NzrzOtc69zr/PhSDOvM6uzr3OsScsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ86Vz4DPjM68zrXOvc6/z4InLCBuZXh0U3RhdHVzOiAnzpXPgM65z4POus+Mz4DOt8+DzrcgzrXPgM+MzrzOtc69zr/PhSDOvM6uzr3OsScsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ86kz4HOrc+Hz4nOvSDOnM6uzr3Osc+CJywgY3VycmVudFN0YXR1czogJ86Vz4DOuc+DzrrPjM+AzrfPg863IM+Ez4HOrc+Hzr/Ovc+Ezr/PgiDOvM6uzr3OsScsXHJcblx0XHR0b2RheVRleHQ6ICfOpM+Bzq3Ph8+Jzr0gzpzOrs69zrHPgicsIHRvZGF5U3RhdHVzOiAnzpXPgM65z4POus+Mz4DOt8+Dzrcgz4TPgc6tz4fOv869z4TOv8+CIM68zq7Ovc6xJyxcclxuXHRcdGNsZWFyVGV4dDogJ86jzrLOrs+DzrnOvM6/JywgY2xlYXJTdGF0dXM6ICfOo86yzq7Pg865zrzOvyDPhM63z4IgzrXPgM65zrvOtc6zzrzOrc69zrfPgiDOt868zrXPgc6/zrzOt869zq/Osc+CJyxcclxuXHRcdGNsb3NlVGV4dDogJ86azrvOtc6vz4POuc68zr8nLCBjbG9zZVN0YXR1czogJ86azrvOtc6vz4POuc68zr8gz4fPic+Bzq/PgiDOsc67zrvOsc6zzq4nLFxyXG5cdFx0eWVhclN0YXR1czogJ86Vz4DOuc+DzrrPjM+AzrfPg863IM6szrvOu86/z4Ugzq3PhM6/z4XPgicsIG1vbnRoU3RhdHVzOiAnzpXPgM65z4POus+Mz4DOt8+DzrcgzqzOu867zr/PhSDOvM6uzr3OsScsXHJcblx0XHR3ZWVrVGV4dDogJ86VzrLOtCcsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnzpXPgM65zrvOv86zzq4gREQgZCBNTScsIGRlZmF1bHRTdGF0dXM6ICfOlc+AzrnOu86tzr7PhM61IM68zrnOsSDOt868zrXPgc6/zrzOt869zq/OsScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZWwnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgRW5nbGlzaC9BdXN0cmFsaWEgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBCYXNlZCBvbiBlbi1HQi4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VuLUFVJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICdQcmV2JywgcHJldlN0YXR1czogJ1Nob3cgdGhlIHByZXZpb3VzIG1vbnRoJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyZsdDsmbHQ7JywgcHJldkp1bXBTdGF0dXM6ICdTaG93IHRoZSBwcmV2aW91cyB5ZWFyJyxcclxuXHRcdG5leHRUZXh0OiAnTmV4dCcsIG5leHRTdGF0dXM6ICdTaG93IHRoZSBuZXh0IG1vbnRoJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyZndDsmZ3Q7JywgbmV4dEp1bXBTdGF0dXM6ICdTaG93IHRoZSBuZXh0IHllYXInLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdDdXJyZW50JywgY3VycmVudFN0YXR1czogJ1Nob3cgdGhlIGN1cnJlbnQgbW9udGgnLFxyXG5cdFx0dG9kYXlUZXh0OiAnVG9kYXknLCB0b2RheVN0YXR1czogJ1Nob3cgdG9kYXlcXCdzIG1vbnRoJyxcclxuXHRcdGNsZWFyVGV4dDogJ0NsZWFyJywgY2xlYXJTdGF0dXM6ICdDbGVhciBhbGwgdGhlIGRhdGVzJyxcclxuXHRcdGNsb3NlVGV4dDogJ0RvbmUnLCBjbG9zZVN0YXR1czogJ0Nsb3NlIHRoZSBkYXRlcGlja2VyJyxcclxuXHRcdHllYXJTdGF0dXM6ICdDaGFuZ2UgdGhlIHllYXInLCBtb250aFN0YXR1czogJ0NoYW5nZSB0aGUgbW9udGgnLFxyXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICdXZWVrIG9mIHRoZSB5ZWFyJyxcclxuXHRcdGRheVN0YXR1czogJ1NlbGVjdCBERCwgTSBkLCB5eXl5JywgZGVmYXVsdFN0YXR1czogJ1NlbGVjdCBhIGRhdGUnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VuLUFVJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEVuZ2xpc2gvVUsgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBTdHVhcnQuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlbi1HQiddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnUHJldicsIHByZXZTdGF0dXM6ICdTaG93IHRoZSBwcmV2aW91cyBtb250aCcsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmbHQ7Jmx0OycsIHByZXZKdW1wU3RhdHVzOiAnU2hvdyB0aGUgcHJldmlvdXMgeWVhcicsXHJcblx0XHRuZXh0VGV4dDogJ05leHQnLCBuZXh0U3RhdHVzOiAnU2hvdyB0aGUgbmV4dCBtb250aCcsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmZ3Q7Jmd0OycsIG5leHRKdW1wU3RhdHVzOiAnU2hvdyB0aGUgbmV4dCB5ZWFyJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnQ3VycmVudCcsIGN1cnJlbnRTdGF0dXM6ICdTaG93IHRoZSBjdXJyZW50IG1vbnRoJyxcclxuXHRcdHRvZGF5VGV4dDogJ1RvZGF5JywgdG9kYXlTdGF0dXM6ICdTaG93IHRvZGF5XFwncyBtb250aCcsXHJcblx0XHRjbGVhclRleHQ6ICdDbGVhcicsIGNsZWFyU3RhdHVzOiAnQ2xlYXIgYWxsIHRoZSBkYXRlcycsXHJcblx0XHRjbG9zZVRleHQ6ICdEb25lJywgY2xvc2VTdGF0dXM6ICdDbG9zZSB0aGUgZGF0ZXBpY2tlcicsXHJcblx0XHR5ZWFyU3RhdHVzOiAnQ2hhbmdlIHRoZSB5ZWFyJywgbW9udGhTdGF0dXM6ICdDaGFuZ2UgdGhlIG1vbnRoJyxcclxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnV2VlayBvZiB0aGUgeWVhcicsXHJcblx0XHRkYXlTdGF0dXM6ICdTZWxlY3QgREQsIE0gZCwgeXl5eScsIGRlZmF1bHRTdGF0dXM6ICdTZWxlY3QgYSBkYXRlJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlbi1HQiddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBFbmdsaXNoL05ldyBaZWFsYW5kIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgQmFzZWQgb24gZW4tR0IuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlbi1OWiddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnUHJldicsIHByZXZTdGF0dXM6ICdTaG93IHRoZSBwcmV2aW91cyBtb250aCcsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmbHQ7Jmx0OycsIHByZXZKdW1wU3RhdHVzOiAnU2hvdyB0aGUgcHJldmlvdXMgeWVhcicsXHJcblx0XHRuZXh0VGV4dDogJ05leHQnLCBuZXh0U3RhdHVzOiAnU2hvdyB0aGUgbmV4dCBtb250aCcsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmZ3Q7Jmd0OycsIG5leHRKdW1wU3RhdHVzOiAnU2hvdyB0aGUgbmV4dCB5ZWFyJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnQ3VycmVudCcsIGN1cnJlbnRTdGF0dXM6ICdTaG93IHRoZSBjdXJyZW50IG1vbnRoJyxcclxuXHRcdHRvZGF5VGV4dDogJ1RvZGF5JywgdG9kYXlTdGF0dXM6ICdTaG93IHRvZGF5XFwncyBtb250aCcsXHJcblx0XHRjbGVhclRleHQ6ICdDbGVhcicsIGNsZWFyU3RhdHVzOiAnQ2xlYXIgYWxsIHRoZSBkYXRlcycsXHJcblx0XHRjbG9zZVRleHQ6ICdEb25lJywgY2xvc2VTdGF0dXM6ICdDbG9zZSB0aGUgZGF0ZXBpY2tlcicsXHJcblx0XHR5ZWFyU3RhdHVzOiAnQ2hhbmdlIHRoZSB5ZWFyJywgbW9udGhTdGF0dXM6ICdDaGFuZ2UgdGhlIG1vbnRoJyxcclxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnV2VlayBvZiB0aGUgeWVhcicsXHJcblx0XHRkYXlTdGF0dXM6ICdTZWxlY3QgREQsIE0gZCwgeXl5eScsIGRlZmF1bHRTdGF0dXM6ICdTZWxlY3QgYSBkYXRlJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlbi1OWiddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBFc3BlcmFudG8gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IE9saXZpZXIgTS4gKG9saXZpZXJ3ZWJAaWZyYW5jZS5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZW8nXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyZsdDtBbnRhJywgcHJldlN0YXR1czogJ1ZpZGkgbGEgYW50YcWtYW4gbW9uYXRvbicsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ1Nla3YmZ3Q7JywgbmV4dFN0YXR1czogJ1ZpZGkgbGEgc2VrdmFuIG1vbmF0b24nLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdOdW5hJywgY3VycmVudFN0YXR1czogJ1ZpZGkgbGEgbnVuYW4gbW9uYXRvbicsXHJcblx0XHR0b2RheVRleHQ6ICdOdW5hJywgdG9kYXlTdGF0dXM6ICdWaWRpIGxhIG51bmFuIG1vbmF0b24nLFxyXG5cdFx0Y2xlYXJUZXh0OiAnVmFraWdpJywgY2xlYXJTdGF0dXM6ICcnLFxyXG5cdFx0Y2xvc2VUZXh0OiAnRmVybWknLCBjbG9zZVN0YXR1czogJ0Zlcm1pIHNlbiBtb2RpZmknLFxyXG5cdFx0eWVhclN0YXR1czogJ1ZpZGkgYWxpYW4gamFyb24nLCBtb250aFN0YXR1czogJ1ZpZGkgYWxpYW4gbW9uYXRvbicsXHJcblx0XHR3ZWVrVGV4dDogJ1NiJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdFbGVrdGkgREQsIE1NIGQnLCBkZWZhdWx0U3RhdHVzOiAnRWxla3RpIGxhIGRhdG9uJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlbyddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTcGFuaXNoL0FyZ2VudGluYSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgRXN0ZWJhbiBBY29zdGEgVmlsbGFmYW5lIChlc3RlYmFuLmFjb3N0YUBnbG9iYW50LmNvbSkgb2YgR2xvYmFudCAoaHR0cDovL3d3dy5nbG9iYW50LmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlcy1BUiddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QW50JywgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ1NpZyYjeDNlOycsIG5leHRTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdIb3knLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ0hveScsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ0xpbXBpYXInLCBjbGVhclN0YXR1czogJycsXHJcblx0XHRjbG9zZVRleHQ6ICdDZXJyYXInLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxyXG5cdFx0d2Vla1RleHQ6ICdTbScsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VzLUFSJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFNwYW5pc2gvUGVyw7ogbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEZpc2NoZXIgVGlyYWRvIChmaXNoZGV2QGdsb2JhbnQuY29tKSBvZiBBU0lYIChodHRwOi8vd3d3LmFzaXhvbmxpbmUuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VzLVBFJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYztBbnQnLCBwcmV2U3RhdHVzOiAnJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnU2lnJiN4M2U7JywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ0hveScsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAnSG95JywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnTGltcGlhcicsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ0NlcnJhcicsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ1NtJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCBkLCBNTSB5eXl5JywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZXMtUEUnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgU3BhbmlzaCBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFRyYWR1Y2lkbyBwb3IgVmVzdGVyICh4dmVzdGVyQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydlcyddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QW50JywgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ1NpZyYjeDNlOycsIG5leHRTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdIb3knLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ0hveScsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ0xpbXBpYXInLCBjbGVhclN0YXR1czogJycsXHJcblx0XHRjbG9zZVRleHQ6ICdDZXJyYXInLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxyXG5cdFx0d2Vla1RleHQ6ICdTbScsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2VzJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEVzdG9uaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBNYXJ0IFPDtW1lcm1hYSAobXJ0cy5weWRldiBhdCBnbWFpbCBjb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZXQnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJ0VlbG5ldicsIHByZXZTdGF0dXM6ICcnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICdKw6RyZ25ldicsIG5leHRTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdUw6RuYScsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAnVMOkbmEnLCB0b2RheVN0YXR1czogJycsXHJcblx0XHRjbGVhclRleHQ6ICdYJywgY2xlYXJTdGF0dXM6ICcnLFxyXG5cdFx0Y2xvc2VUZXh0OiAnU3VsZ2UnLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxyXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2V0J10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEJhc3F1ZSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIEthcnJpa2FzLWVrIGl0enVsaWEgKGthcnJpa2FzQGthcnJpa2FzLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydldSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QXVyJywgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ0h1ciYjeDNlOycsIG5leHRTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdHYXVyJywgY3VycmVudFN0YXR1czogJycsXHJcblx0XHR0b2RheVRleHQ6ICdHYXVyJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnWCcsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ0VnaW5hJywgY2xvc2VTdGF0dXM6ICcnLFxyXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcclxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnJyxcclxuXHRcdGRheVN0YXR1czogJ0REIGQgTU0nLCBkZWZhdWx0U3RhdHVzOiAnJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydldSddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBGYXJzaS9QZXJzaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgSmF2YWQgTW93bGFuZXpoYWQgLS0gam1vd2xhQGdtYWlsLmNvbS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ZhJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYzvZgtio2YTZiicsIHByZXZTdGF0dXM6ICfZhtmF2KfZiti0INmF2KfZhyDZgtio2YQnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICfYqNi52K/ZiiYjeDNlOycsIG5leHRTdGF0dXM6ICfZhtmF2KfZiti0INmF2KfZhyDYqNi52K8nLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfYp9mF2LHZiNiyJywgY3VycmVudFN0YXR1czogJ9mG2YXYp9mK2LQg2YXYp9mHINis2KfYsdmKJyxcclxuXHRcdHRvZGF5VGV4dDogJ9in2YXYsdmI2LInLCB0b2RheVN0YXR1czogJ9mG2YXYp9mK2LQg2YXYp9mHINis2KfYsdmKJyxcclxuXHRcdGNsZWFyVGV4dDogJ9it2LDZgSDYqtin2LHZitiuJywgY2xlYXJTdGF0dXM6ICfZvtin2qkg2qnYsdiv2YYg2KrYp9ix2YrYriDYrNin2LHZiicsXHJcblx0XHRjbG9zZVRleHQ6ICfYqNiz2KrZhicsIGNsb3NlU3RhdHVzOiAn2KjYs9iq2YYg2KjYr9mI2YYg2KfYudmF2KfZhCDYqti62YrZitix2KfYqicsXHJcblx0XHR5ZWFyU3RhdHVzOiAn2YbZhdin2YrYtCDYs9in2YQg2YXYqtmB2KfZiNiqJywgbW9udGhTdGF0dXM6ICfZhtmF2KfZiti0INmF2KfZhyDZhdiq2YHYp9mI2KonLFxyXG5cdFx0d2Vla1RleHQ6ICfZh9mBJywgd2Vla1N0YXR1czogJ9mH2YHYqtmH2ZAg2LPYp9mEJyxcclxuXHRcdGRheVN0YXR1czogJ9in2YbYqtiu2KfYqCBELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAn2KfZhtiq2K7Yp9ioINiq2KfYsdmK2K4nLFxyXG5cdFx0aXNSVEw6IHRydWVcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZmEnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgRmlubmlzaCBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgSGFycmkgS2lscGnDtiAoaGFycmlraWxwaW9AZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ZpJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmbGFxdW87RWRlbGxpbmVuJywgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ1NldXJhYXZhJnJhcXVvOycsIG5leHRTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdUJmF1bWw7biZhdW1sOyZhdW1sO24nLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ1QmYXVtbDtuJmF1bWw7JmF1bWw7bicsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ1R5aGplbm4mYXVtbDsnLCBjbGVhclN0YXR1czogJycsXHJcblx0XHRjbG9zZVRleHQ6ICdTdWxqZScsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ1ZrJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZmknXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgRmFyb2VzZSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgU3ZlcnJpIE1vaHIgT2xzZW4sIHN2ZXJyaW1vQGdtYWlsLmNvbSAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZm8nXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO1PDrXN0YScsIHByZXZTdGF0dXM6ICdWw61zIHPDrXN0YSBtw6FuYcOwYW4nLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICdWw61zIHPDrXN0YSDDoXJpw7AnLFxyXG5cdFx0bmV4dFRleHQ6ICdOw6ZzdGEmI3gzZTsnLCBuZXh0U3RhdHVzOiAnVsOtcyBuw6ZzdGEgbcOhbmHDsGFuJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnVsOtcyBuw6ZzdGEgw6FyacOwJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnSGVzaW4nLCBjdXJyZW50U3RhdHVzOiAnVsOtcyBoZW5kYW4gbcOhbmHDsGFuJyxcclxuXHRcdHRvZGF5VGV4dDogJ8ONIGRhZycsIHRvZGF5U3RhdHVzOiAnVsOtcyBtw6FuYcOwYW4gZnlyaSDDrSBkYWcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnU3RyaWthJywgY2xlYXJTdGF0dXM6ICdTdHJpa2EgYWxsaXIgbcOhbmHDsGFybmFyJyxcclxuXHRcdGNsb3NlVGV4dDogJ0dveW0nLCBjbG9zZVN0YXR1czogJ0dveW0gaGV0dGEgdmluZGV5w7BnYScsXHJcblx0XHR5ZWFyU3RhdHVzOiAnQnJveXQgw6FyacOwJywgbW9udGhTdGF0dXM6ICdCcm95dCBtw6FuYcOwYW5zJyxcclxuXHRcdHdlZWtUZXh0OiAnVmsnLCB3ZWVrU3RhdHVzOiAnVmlrYSBhdiDDoXJpbnVtJyxcclxuXHRcdGRheVN0YXR1czogJ1ZlbCBERCwgTSBkLCB5eXl5JywgZGVmYXVsdFN0YXR1czogJ1ZlbCBlaW4gZGF0bycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snZm8nXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgU3dpc3MgRnJlbmNoIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBNYXJ0aW4gVm9lbGtsZSAobWFydGluLnZvZWxrbGVAZS10Yy5jaCkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydmci1DSCddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7UHLDqWMnLCBwcmV2U3RhdHVzOiAnVm9pciBsZSBtb2lzIHByw6ljw6lkZW50JyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnVm9pciBsXFwnYW5uw6llIHByw6ljw6lkZW50JyxcclxuXHRcdG5leHRUZXh0OiAnU3VpdiYjeDNlOycsIG5leHRTdGF0dXM6ICdWb2lyIGxlIG1vaXMgc3VpdmFudCcsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ1ZvaXIgbFxcJ2FubsOpZSBzdWl2YW50JyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnQ291cmFudCcsIGN1cnJlbnRTdGF0dXM6ICdWb2lyIGxlIG1vaXMgY291cmFudCcsXHJcblx0XHR0b2RheVRleHQ6ICdBdWpvdXJkXFwnaHVpJywgdG9kYXlTdGF0dXM6ICdWb2lyIGF1am91cmRcXCdodWknLFxyXG5cdFx0Y2xlYXJUZXh0OiAnRWZmYWNlcicsIGNsZWFyU3RhdHVzOiAnRWZmYWNlciBsYSBkYXRlIHPDqWxlY3Rpb25uw6llJyxcclxuXHRcdGNsb3NlVGV4dDogJ0Zlcm1lcicsIGNsb3NlU3RhdHVzOiAnRmVybWVyIHNhbnMgbW9kaWZpZXInLFxyXG5cdFx0eWVhclN0YXR1czogJ1ZvaXIgdW5lIGF1dHJlIGFubsOpZScsIG1vbnRoU3RhdHVzOiAnVm9pciB1biBhdXRyZSBtb2lzJyxcclxuXHRcdHdlZWtUZXh0OiAnU20nLCB3ZWVrU3RhdHVzOiAnU2VtYWluZSBkZSBsXFwnYW5uw6llJyxcclxuXHRcdGRheVN0YXR1czogJ1xcJ0Nob2lzaXJcXCcgbGUgREQgZCBNTScsIGRlZmF1bHRTdGF0dXM6ICdDaG9pc2lyIGxhIGRhdGUnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ZyLUNIJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEZyZW5jaCBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFN0w6lwaGFuZSBOYWhtYW5pIChzaG9sYnlAc2hvbGJ5Lm5ldCkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydmciddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7UHLDqWMnLCBwcmV2U3RhdHVzOiAnVm9pciBsZSBtb2lzIHByw6ljw6lkZW50JyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnVm9pciBsXFwnYW5uw6llIHByw6ljw6lkZW50JyxcclxuXHRcdG5leHRUZXh0OiAnU3VpdiYjeDNlOycsIG5leHRTdGF0dXM6ICdWb2lyIGxlIG1vaXMgc3VpdmFudCcsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ1ZvaXIgbFxcJ2FubsOpZSBzdWl2YW50JyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnQ291cmFudCcsIGN1cnJlbnRTdGF0dXM6ICdWb2lyIGxlIG1vaXMgY291cmFudCcsXHJcblx0XHR0b2RheVRleHQ6ICdBdWpvdXJkXFwnaHVpJywgdG9kYXlTdGF0dXM6ICdWb2lyIGF1am91cmRcXCdodWknLFxyXG5cdFx0Y2xlYXJUZXh0OiAnRWZmYWNlcicsIGNsZWFyU3RhdHVzOiAnRWZmYWNlciBsYSBkYXRlIHPDqWxlY3Rpb25uw6llJyxcclxuXHRcdGNsb3NlVGV4dDogJ0Zlcm1lcicsIGNsb3NlU3RhdHVzOiAnRmVybWVyIHNhbnMgbW9kaWZpZXInLFxyXG5cdFx0eWVhclN0YXR1czogJ1ZvaXIgdW5lIGF1dHJlIGFubsOpZScsIG1vbnRoU3RhdHVzOiAnVm9pciB1biBhdXRyZSBtb2lzJyxcclxuXHRcdHdlZWtUZXh0OiAnU20nLCB3ZWVrU3RhdHVzOiAnU2VtYWluZSBkZSBsXFwnYW5uw6llJyxcclxuXHRcdGRheVN0YXR1czogJ1xcJ0Nob2lzaXJcXCcgbGUgREQgZCBNTScsIGRlZmF1bHRTdGF0dXM6ICdDaG9pc2lyIGxhIGRhdGUnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ZyJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEluaWNpYWNpb24gZW4gZ2FsZWdvIHBhcmEgYSBleHRlbnNpw7NuICdVSSBkYXRlIHBpY2tlcicgcGFyYSBqUXVlcnkuXHJcbiAgIFRyYWR1Y2lkbyBwb3IgTWFudWVsIChNY051ZWxAZ214Lm5ldCkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydnbCddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QW50JywgcHJldlN0YXR1czogJ0Ftb3NhciBtZXMgYW50ZXJpb3InLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICdBbW9zYXIgYW5vIGFudGVyaW9yJyxcclxuXHRcdG5leHRUZXh0OiAnU2VnJiN4M2U7JywgbmV4dFN0YXR1czogJ0Ftb3NhciBtZXMgc2VndWludGUnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICdBbW9zYXIgYW5vIHNlZ3VpbnRlJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnSG94ZScsIGN1cnJlbnRTdGF0dXM6ICdBbW9zYXIgbWVzIGFjdHVhbCcsXHJcblx0XHR0b2RheVRleHQ6ICdIb3hlJywgdG9kYXlTdGF0dXM6ICdBbW9zYXIgbWVzIGFjdHVhbCcsXHJcblx0XHRjbGVhclRleHQ6ICdMaW1wYXInLCBjbGVhclN0YXR1czogJ0JvcnJhciBkYXRhIGFjdHVhbCcsXHJcblx0XHRjbG9zZVRleHQ6ICdQZWNoYXInLCBjbG9zZVN0YXR1czogJ1BlY2hhciBzZW4gZ2FyZGFyJyxcclxuXHRcdHllYXJTdGF0dXM6ICdBbW9zYXIgb3V0cm8gYW5vJywgbW9udGhTdGF0dXM6ICdBbW9zYXIgb3V0cm8gbWVzJyxcclxuXHRcdHdlZWtUZXh0OiAnU20nLCB3ZWVrU3RhdHVzOiAnU2VtYW5hIGRvIGFubycsXHJcblx0XHRkYXlTdGF0dXM6ICdELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnU2VsZWNjaW9uYSBEYXRhJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydnbCddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBHdWphcmF0aSAo4KqX4KuB4Kqc4Kqw4Kq+4Kqk4KuAKSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIE5heW1lc2ggTWlzdHJ5IChuYXltZXNoQHlhaG9vLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydndSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M74Kqq4Kq+4Kqb4KqzJywgcHJldlN0YXR1czogJ+CqquCqvuCqm+CqsuCriyDgqq7gqrngqr/gqqjgq4sg4Kqs4Kqk4Kq+4Kq14KuLJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAn4Kqq4Kq+4Kqb4KqzJyxcclxuXHRcdG5leHRUZXh0OiAn4KqG4KqX4KqzJiN4M2U7JywgbmV4dFN0YXR1czogJ+CqhuCql+CqsuCriyDgqq7gqrngqr/gqqjgq4sg4Kqs4Kqk4Kq+4Kq14KuLJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn4KqG4KqX4KqzJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn4KqG4Kqc4KuHJywgY3VycmVudFN0YXR1czogJ+CqhuCqnOCqqOCriyDgqqbgqr/gqrXgqrgg4Kqs4Kqk4Kq+4Kq14KuLJyxcclxuXHRcdHRvZGF5VGV4dDogJ+CqhuCqnOCrhycsIHRvZGF5U3RhdHVzOiAn4KqG4Kqc4Kqo4KuLIOCqpuCqv+CqteCquCcsXHJcblx0XHRjbGVhclRleHQ6ICfgqq3gq4LgqoLgqrjgq4snLCBjbGVhclN0YXR1czogJ+CqueCqvuCqsiDgqqrgqrjgqoLgqqYg4KqV4Kqw4KuH4Kqy4KuAIOCqpOCqvuCqsOCrgOCqliDgqq3gq4LgqoLgqrjgq4snLFxyXG5cdFx0Y2xvc2VUZXh0OiAn4Kqs4KqC4KqnIOCqleCqsOCriycsIGNsb3NlU3RhdHVzOiAn4Kqk4Kq+4Kqw4KuA4KqWIOCqquCquOCqguCqpiDgqpXgqrDgq43gqq/gqr4g4Kq14KqX4KqwIOCqrOCqguCqpyDgqpXgqrDgq4snLFxyXG5cdFx0eWVhclN0YXR1czogJ+CqnOCrgeCqpuCrgSDgqrXgqrDgq43gqrcg4Kqs4Kqk4Kq+4Kq14KuLJywgbW9udGhTdGF0dXM6ICfgqpzgq4Hgqqbgq4sg4Kqu4Kq54Kq/4Kqo4KuLIOCqrOCqpOCqvuCqteCriycsXHJcblx0XHR3ZWVrVGV4dDogJ+CqheCqoOCqteCqvuCqoeCqv+Cqr+CrgeCqgicsIHdlZWtTdGF0dXM6ICfgqoXgqqDgqrXgqr7gqqHgqr/gqq/gq4HgqoInLFxyXG5cdFx0ZGF5U3RhdHVzOiAn4KqF4Kqg4Kq14Kq+4Kqh4Kq/4Kqv4Kq+4Kqo4KuLIOCqquCqueCrh+CqsuCriyDgqqbgqr/gqrXgqrgg4Kqq4Kq44KqC4KqmIOCqleCqsOCriycsIGRlZmF1bHRTdGF0dXM6ICfgqqTgqr7gqrDgq4DgqpYg4Kqq4Kq44KqC4KqmIOCqleCqsOCriycsXHRcdFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2d1J10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEhlYnJldyBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgQW1pciBIYXJkb24gKGFoYXJkb24gYXQgZ21haWwgZG90IGNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydoZSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M715TXp9eV15PXnScsIHByZXZTdGF0dXM6ICcnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICfXlNeR15AmI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn15TXmdeV150nLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ9eU15nXldedJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAn16DXp9eUJywgY2xlYXJTdGF0dXM6ICcnLFxyXG5cdFx0Y2xvc2VUZXh0OiAn16HXkteV16gnLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxyXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxyXG5cdFx0aXNSVEw6IHRydWVcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaGUnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgSGluZGkgSU5ESUEgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IFBhd2FuIEt1bWFyIFNpbmdoLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaGktSU4nXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJ+CkquCkv+Ckm+CksuCkvicsIHByZXZTdGF0dXM6ICfgpKrgpL/gpJvgpLLgpL4g4KSu4KS54KWA4KSo4KS+IOCkpuClh+CkluClh+CkgicsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+CkquCkv+Ckm+CksuCkviDgpLXgpLDgpY3gpLcg4KSm4KWH4KSW4KWH4KSCJyxcclxuXHRcdG5leHRUZXh0OiAn4KSF4KSX4KSy4KS+JywgbmV4dFN0YXR1czogJ+CkheCkl+CksuCkviDgpK7gpLngpYDgpKjgpL4g4KSm4KWH4KSW4KWH4KSCJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn4KSF4KSX4KSy4KS+IOCkteCksOCljeCktyDgpKbgpYfgpJbgpYfgpIInLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfgpLXgpLDgpY3gpKTgpK7gpL7gpKgnLCBjdXJyZW50U3RhdHVzOiAn4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkruCkueClgOCkqOCkviDgpKbgpYfgpJbgpYfgpIInLFxyXG5cdFx0dG9kYXlUZXh0OiAn4KSG4KScJywgdG9kYXlTdGF0dXM6ICfgpLXgpLDgpY3gpKTgpK7gpL7gpKgg4KSm4KS/4KSoIOCkpuClh+CkluClh+CkgicsXHJcblx0XHRjbGVhclRleHQ6ICfgpLjgpL7gpKsnLCBjbGVhclN0YXR1czogJ+CkteCksOCljeCkpOCkruCkvuCkqCDgpKbgpL/gpKjgpL7gpILgpJUg4KSu4KS/4KSf4KS+4KSPJyxcclxuXHRcdGNsb3NlVGV4dDogJ+CkuOCkruCkvuCkquCljeCkpCcsIGNsb3NlU3RhdHVzOiAn4KSs4KSm4KSy4KS+4KS1IOCkleClhyDgpKzgpL/gpKjgpL4g4KSs4KSC4KSmJyxcclxuXHRcdHllYXJTdGF0dXM6ICfgpI/gpJUg4KSF4KSy4KSXIOCkteCksOCljeCktyDgpJXgpL4g4KSa4KSv4KSoIOCkleCksOClh+CkgicsIG1vbnRoU3RhdHVzOiAn4KSP4KSVIOCkheCksuCklyDgpK7gpLngpYDgpKjgpYcg4KSV4KS+IOCkmuCkr+CkqCDgpJXgpLDgpYfgpIInLFxyXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICfgpLXgpLDgpY3gpLcg4KSV4KS+IOCkuOCkquCljeCkpOCkvuCkuScsXHJcblx0XHRkYXlTdGF0dXM6ICfgpJrgpYHgpKjgpYcgREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICfgpI/gpJUg4KSk4KS/4KSl4KS/IOCkleCkviDgpJrgpK/gpKgg4KSV4KSw4KWH4KSCJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydoaS1JTiddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBDcm9hdGlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgVmpla29zbGF2IE5lc2VrLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaHInXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjOycsIHByZXZTdGF0dXM6ICdQcmlrYcW+aSBwcmV0aG9kbmkgbWplc2VjJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnJiN4M2U7JywgbmV4dFN0YXR1czogJ1ByaWthxb5pIHNsaWplZGXEh2kgbWplc2VjJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnRGFuYXMnLCBjdXJyZW50U3RhdHVzOiAnRGFuYcWhbmppIGRhdHVtJyxcclxuXHRcdHRvZGF5VGV4dDogJ0RhbmFzJywgdG9kYXlTdGF0dXM6ICdEYW5hxaFuamkgZGF0dW0nLFxyXG5cdFx0Y2xlYXJUZXh0OiAnaXpicmnFoWknLCBjbGVhclN0YXR1czogJ0l6YnJpxaFpIHRyZW51dG5pIGRhdHVtJyxcclxuXHRcdGNsb3NlVGV4dDogJ1phdHZvcmknLCBjbG9zZVN0YXR1czogJ1phdHZvcmkga2FsZW5kYXInLFxyXG5cdFx0eWVhclN0YXR1czogJ1ByaWthxb5pIGdvZGluZScsIG1vbnRoU3RhdHVzOiAnUHJpa2HFvmkgbWplc2VjZScsXHJcblx0XHR3ZWVrVGV4dDogJ1RqZScsIHdlZWtTdGF0dXM6ICdUamVkYW5yJyxcclxuXHRcdGRheVN0YXR1czogJ1xcJ0RhdHVtXFwnIERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnT2RhYmVyaSBkYXR1bScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaHInXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgSHVuZ2FyaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBJc3R2YW4gS2FyYXN6aSAoanF1ZXJ5Y2FsZW5kYXJAc3BhbS5yYXN6aS5odSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydodSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJmxhcXVvOyZuYnNwO3Zpc3N6YScsIHByZXZTdGF0dXM6ICcnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICdlbMWRcmUmbmJzcDsmcmFxdW87JywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ21hJywgY3VycmVudFN0YXR1czogJycsXHJcblx0XHR0b2RheVRleHQ6ICdtYScsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ3TDtnJsw6lzJywgY2xlYXJTdGF0dXM6ICcnLFxyXG5cdFx0Y2xvc2VUZXh0OiAnYmV6w6Fyw6FzJywgY2xvc2VTdGF0dXM6ICcnLFxyXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcclxuXHRcdHdlZWtUZXh0OiAnSMOpJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaHUnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgQXJtZW5pYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IExldm9uIFpha2FyeWFuIChsZXZvbi56YWthcnlhbkBnbWFpbC5jb20pICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydoeSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M71YbVodWtLicsICBwcmV2U3RhdHVzOiAnJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAn1YDVodW7LiYjeDNlOycsIG5leHRTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfUsdW11b3WhdaAJywgY3VycmVudFN0YXR1czogJycsXHJcblx0XHR0b2RheVRleHQ6ICfUsdW11b3WhdaAJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAn1YTVodaE1oDVpdWsJywgY2xlYXJTdGF0dXM6ICcnLFxyXG5cdFx0Y2xvc2VUZXh0OiAn1ZPVodWv1aXVrCcsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ9WH1LLVjycsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2h5J10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEluZG9uZXNpYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IERlZGVuIEZhdGh1cmFobWFuIChkZWRlbmZAZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2lkJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYzttdW5kdXInLCBwcmV2U3RhdHVzOiAnVGFtcGlsa2FuIGJ1bGFuIHNlYmVsdW1ueWEnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICdtYWp1JiN4M2U7JywgbmV4dFN0YXR1czogJ1RhbXBpbGthbiBidWxhbiBiZXJpa3V0bnlhJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnaGFyaSBpbmknLCBjdXJyZW50U3RhdHVzOiAnVGFtcGlsa2FuIGJ1bGFuIHNla2FyYW5nJyxcclxuXHRcdHRvZGF5VGV4dDogJ2hhcmkgaW5pJywgdG9kYXlTdGF0dXM6ICdUYW1waWxrYW4gYnVsYW4gc2VrYXJhbmcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAna29zb25na2FuJywgY2xlYXJTdGF0dXM6ICdiZXJzaWhrYW4gdGFuZ2dhbCB5YW5nIHNla2FyYW5nJyxcclxuXHRcdGNsb3NlVGV4dDogJ1R1dHVwJywgY2xvc2VTdGF0dXM6ICdUdXR1cCB0YW5wYSBtZW5ndWJhaCcsXHJcblx0XHR5ZWFyU3RhdHVzOiAnVGFtcGlsa2FuIHRhaHVuIHlhbmcgYmVyYmVkYScsIG1vbnRoU3RhdHVzOiAnVGFtcGlsa2FuIGJ1bGFuIHlhbmcgYmVyYmVkYScsXHJcblx0XHR3ZWVrVGV4dDogJ01nJywgd2Vla1N0YXR1czogJ01pbmdndSBkYWxhbSB0YWh1JyxcclxuXHRcdGRheVN0YXR1czogJ3BpbGloIGxlIERELCBNTSBkJywgZGVmYXVsdFN0YXR1czogJ1BpbGloIFRhbmdnYWwnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2lkJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIEljZWxhbmRpYyBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgSGF1a3VyIEguIFRob3Jzc29uIChoYXVrdXJAZXNraWxsLmlzKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2lzJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYzsgRnlycmknLCBwcmV2U3RhdHVzOiAnJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnTiZhZWxpZztzdGkgJiN4M2U7JywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJyZJYWN1dGU7IGRhZycsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAnJklhY3V0ZTsgZGFnJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnSHJlaW5zYScsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ0xva2EnLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxyXG5cdFx0d2Vla1RleHQ6ICdWaWthJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaXMnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgSXRhbGlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgQXBhZWxsYSAoYXBhZWxsYUBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaXQnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO1ByZWMnLCBwcmV2U3RhdHVzOiAnTWVzZSBwcmVjZWRlbnRlJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnTW9zdHJhIGxcXCdhbm5vIHByZWNlZGVudGUnLFxyXG5cdFx0bmV4dFRleHQ6ICdTdWNjJiN4M2U7JywgbmV4dFN0YXR1czogJ01lc2Ugc3VjY2Vzc2l2bycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ01vc3RyYSBsXFwnYW5ubyBzdWNjZXNzaXZvJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnT2dnaScsIGN1cnJlbnRTdGF0dXM6ICdNZXNlIGNvcnJlbnRlJyxcclxuXHRcdHRvZGF5VGV4dDogJ09nZ2knLCB0b2RheVN0YXR1czogJ01lc2UgY29ycmVudGUnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnU3Z1b3RhJywgY2xlYXJTdGF0dXM6ICdBbm51bGxhJyxcclxuXHRcdGNsb3NlVGV4dDogJ0NoaXVkaScsIGNsb3NlU3RhdHVzOiAnQ2hpdWRlcmUgc2VuemEgbW9kaWZpY2FyZScsXHJcblx0XHR5ZWFyU3RhdHVzOiAnU2VsZXppb25hIHVuIGFsdHJvIGFubm8nLCBtb250aFN0YXR1czogJ1NlbGV6aW9uYSB1biBhbHRybyBtZXNlJyxcclxuXHRcdHdlZWtUZXh0OiAnU20nLCB3ZWVrU3RhdHVzOiAnU2V0dGltYW5hIGRlbGxcXCdhbm5vJyxcclxuXHRcdGRheVN0YXR1czogJ1xcJ1NlbGV6aW9uYVxcJyBERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ1NjZWdsaWVyZSB1bmEgZGF0YScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snaXQnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgSmFwYW5lc2UgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEtlbnRhcm8gU0FUTyAoa2VudGFyb0ByYW52aXMuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2phJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5leHRlbmQoe30sICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdFx0e21vbnRoOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIubW9udGguXHJcblx0XHRcdFx0cmVwbGFjZSgvbW9udGhIZWFkZXIvLCAnbW9udGhIZWFkZXI6eXl5eeW5tCBNTScpfSksXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO+WJjScsIHByZXZTdGF0dXM6ICfliY3mnIjjgpLooajnpLrjgZfjgb7jgZknLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICfliY3lubTjgpLooajnpLrjgZfjgb7jgZknLFxyXG5cdFx0bmV4dFRleHQ6ICfmrKEmI3gzZTsnLCBuZXh0U3RhdHVzOiAn57+M5pyI44KS6KGo56S644GX44G+44GZJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn57+M5bm044KS6KGo56S644GX44G+44GZJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn5LuK5pelJywgY3VycmVudFN0YXR1czogJ+S7iuaciOOCkuihqOekuuOBl+OBvuOBmScsXHJcblx0XHR0b2RheVRleHQ6ICfku4rml6UnLCB0b2RheVN0YXR1czogJ+S7iuaciOOCkuihqOekuuOBl+OBvuOBmScsXHJcblx0XHRjbGVhclRleHQ6ICfjgq/jg6rjgqInLCBjbGVhclN0YXR1czogJ+aXpeS7mOOCkuOCr+ODquOCouOBl+OBvuOBmScsXHJcblx0XHRjbG9zZVRleHQ6ICfplonjgZjjgosnLCBjbG9zZVN0YXR1czogJ+WkieabtOOBm+OBmuOBq+mWieOBmOOBvuOBmScsXHJcblx0XHR5ZWFyU3RhdHVzOiAn6KGo56S644GZ44KL5bm044KS5aSJ5pu044GX44G+44GZJywgbW9udGhTdGF0dXM6ICfooajnpLrjgZnjgovmnIjjgpLlpInmm7TjgZfjgb7jgZknLFxyXG5cdFx0d2Vla1RleHQ6ICfpgLEnLCB3ZWVrU3RhdHVzOiAn5pqm6YCx44Gn56ys5L2V6YCx55uu44GL44KS6KGo44GX44G+44GZJyxcclxuXHRcdGRheVN0YXR1czogJ3l5eXkvbW0vZGQnLCBkZWZhdWx0U3RhdHVzOiAn5pel5LuY44KS6YG45oqe44GX44G+44GZJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydqYSddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBHZW9yZ2lhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIEFuZHJlaSBHb3JidXNoa2luLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sna2EnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJzzhg6Phg5nhg5Dhg5wnLCBwcmV2U3RhdHVzOiAn4YOs4YOY4YOc4YOQIOGDl+GDleGDlCcsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+GDrOGDmOGDnOGDkCDhg6zhg5Thg5rhg5gnLFxyXG5cdFx0bmV4dFRleHQ6ICfhg6zhg5jhg5w+JywgbmV4dFN0YXR1czogJ+GDqOGDlOGDm+GDk+GDlOGDkuGDmCDhg5fhg5Xhg5QnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICfhg6jhg5Thg5vhg5Phg5Thg5Lhg5gg4YOs4YOU4YOa4YOYJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOUJywgY3VycmVudFN0YXR1czogJ+GDm+GDmOGDm+GDk+GDmOGDnOGDkOGDoOGDlCDhg5fhg5Xhg5QnLFxyXG5cdFx0dG9kYXlUZXh0OiAn4YOT4YOm4YOU4YOhJywgdG9kYXlTdGF0dXM6ICfhg5vhg5jhg5vhg5Phg5jhg5zhg5Dhg6Dhg5Qg4YOT4YOm4YOUJyxcclxuXHRcdGNsZWFyVGV4dDogJ+GDkuGDkOGDoeGDo+GDpOGDl+GDkOGDleGDlOGDkeGDkCcsIGNsZWFyU3RhdHVzOiAn4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOUIOGDl+GDkOGDoOGDmOGDpuGDmOGDoSDhg6zhg5Dhg6jhg5rhg5AnLFxyXG5cdFx0Y2xvc2VUZXh0OiAn4YOQ4YOg4YOY4YOhJywgY2xvc2VTdGF0dXM6ICfhg5Phg5Dhg67hg6Phg6Dhg5Xhg5Ag4YOj4YOq4YOV4YOa4YOY4YOa4YOU4YOR4YOd4YOTJyxcclxuXHRcdHllYXJTdGF0dXM6ICfhg6Hhg67hg5Xhg5Ag4YOs4YOU4YOa4YOYJywgbW9udGhTdGF0dXM6ICfhg6Hhg67hg5Xhg5Ag4YOX4YOV4YOUJyxcclxuXHRcdHdlZWtUZXh0OiAn4YOZ4YOVJywgd2Vla1N0YXR1czogJ+GDrOGDmuGDmOGDoSDhg5nhg5Xhg5jhg6Dhg5AnLFxyXG5cdFx0ZGF5U3RhdHVzOiAn4YOQ4YOY4YOg4YOp4YOY4YOU4YOXIERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAn4YOQ4YOY4YOm4YOp4YOY4YOU4YOXIOGDl+GDkOGDoOGDmOGDpuGDmCcsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sna2EnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgS2htZXIgaW5pdGlhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgU292aWNoZXQgVGVwIChzb3ZpY2hldC50ZXBAZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ2ttJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICfhnpDhnpnigIvhnoDhn5Lhnprhn4ThnpknLCBwcmV2U3RhdHVzOiAnJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAn4Z6R4Z+F4oCL4Z6Y4Z674Z6BJywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ+GekOGfkuGehOGfg+KAi+Gek+GfgeGfhycsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAn4Z6Q4Z+S4Z6E4Z+D4oCL4Z6T4Z+B4Z+HJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnWCcsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ+GemuGeveGeheKAi+GemuGetuGem+GfiycsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCBkIE1NJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sna20nXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgS29yZWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBEYWVLd29uIEthbmcgKG5jcmFzaC5ka0BnbWFpbC5jb20pLCBFZGl0ZWQgYnkgR2VuaWUuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydrbyddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuZXh0ZW5kKHt9LCAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRcdHttb250aDogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLm1vbnRoLlxyXG5cdFx0XHRcdHJlcGxhY2UoL21vbnRoSGVhZGVyLywgJ21vbnRoSGVhZGVyOnl5eXnrhYQgTU0nKX0pLFxyXG5cdFx0cHJldlRleHQ6ICfsnbTsoITri6wnLCBwcmV2U3RhdHVzOiAn7J207KCE64us7J2EIO2RnOyLnO2VqeuLiOuLpCcsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+ydtOyghCDsl7Drj4Trpbwg7ZGc7Iuc7ZWp64uI64ukJyxcclxuXHRcdG5leHRUZXh0OiAn64uk7J2M64usJywgbmV4dFN0YXR1czogJ+uLpOydjOuLrOydhCDtkZzsi5ztlanri4jri6QnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICfri6TsnYwg7Jew64+E66W8IO2RnOyLnO2VqeuLiOuLpCcsXHJcblx0XHRjdXJyZW50VGV4dDogJ+2YhOyerCcsIGN1cnJlbnRTdGF0dXM6ICfsnoXroKXtlZwg64us7J2EIO2RnOyLnO2VqeuLiOuLpCcsXHJcblx0XHR0b2RheVRleHQ6ICfsmKTripgnLCB0b2RheVN0YXR1czogJ+ydtOuyiOuLrOydhCDtkZzsi5ztlanri4jri6QnLFxyXG5cdFx0Y2xlYXJUZXh0OiAn7KeA7Jqw6riwJywgY2xlYXJTdGF0dXM6ICfsnoXroKXtlZwg64Kg7Kec66W8IOyngOybgeuLiOuLpCcsXHJcblx0XHRjbG9zZVRleHQ6ICfri6vquLAnLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAn7ZGc7Iuc7ZWgIOyXsOuPhOulvCDrs4Dqsr3tlanri4jri6QnLCBtb250aFN0YXR1czogJ+2RnOyLnO2VoCDsm5TsnYQg67OA6rK97ZWp64uI64ukJyxcclxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAn7ZW064u5IOyXsOuPhOydmCDso7zssKgnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnTSBk7J28IChEKScsIGRlZmF1bHRTdGF0dXM6ICfrgqDsp5zrpbwg7ISg7YOd7ZWY7IS47JqUJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydrbyddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBMaXRodWFuaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgQXJ0dXJhcyBQYWxlaWNpa2FzIDxhcnR1cmFzQGF2YWxvbi5sdD4uICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydsdCddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7QXRnYWwnLCAgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ1Bpcm15biYjeDNlOycsIG5leHRTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfFoGlhbmRpZW4nLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ8WgaWFuZGllbicsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ0nFoXZhbHl0aScsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ1XFvmRhcnl0aScsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbHQnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgTGF0dmlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIEFydHVyYXMgUGFsZWljaWthcyA8YXJ0dXJhcy5wYWxlaWNpa2FzQG1ldGFzaXRlLm5ldD4uICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydsdiddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnSWVwcicsICBwcmV2U3RhdHVzOiAnJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnTsSBa2EnLCBuZXh0U3RhdHVzOiAnJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnxaBvZGllbicsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAnxaBvZGllbicsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ05vdMSrcsSrdCcsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ0FpenbEk3J0JywgY2xvc2VTdGF0dXM6ICcnLFxyXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcclxuXHRcdHdlZWtUZXh0OiAnTmF2Jywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbHYnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgTW9udGVuZWdyaW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IE1pbG/FoSBNaWxvxaFldmnEhyAtIGZsZWthIGQuby5vLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbWUtTUUnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjOycsIHByZXZTdGF0dXM6ICdQcmlrYcW+aSBwcmV0aG9kbmkgbWplc2VjJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnUHJpa2HFvmkgcHJldGhvZG51IGdvZGludScsXHJcblx0XHRuZXh0VGV4dDogJyYjeDNlOycsIG5leHRTdGF0dXM6ICdQcmlrYcW+aSBzbGplZGXEh2kgbWplc2VjJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnUHJpa2HFvmkgc2xqZWRlxId1IGdvZGludScsXHJcblx0XHRjdXJyZW50VGV4dDogJ0RhbmFzJywgY3VycmVudFN0YXR1czogJ1Rla3XEh2kgbWplc2VjJyxcclxuXHRcdHRvZGF5VGV4dDogJ0RhbmFzJywgdG9kYXlTdGF0dXM6ICdUZWt1xIdpIG1qZXNlYycsXHJcblx0XHRjbGVhclRleHQ6ICdPYnJpxaFpJywgY2xlYXJTdGF0dXM6ICdPYnJpxaFpIHRyZW51dG5pIGRhdHVtJyxcclxuXHRcdGNsb3NlVGV4dDogJ1phdHZvcmknLCBjbG9zZVN0YXR1czogJ1phdHZvcmkga2FsZW5kYXInLFxyXG5cdFx0eWVhclN0YXR1czogJ1ByaWthxb5pIGdvZGluZScsIG1vbnRoU3RhdHVzOiAnUHJpa2HFvmkgbWplc2VjZScsXHJcblx0XHR3ZWVrVGV4dDogJ1NlZCcsIHdlZWtTdGF0dXM6ICdTZWRtaWNhJyxcclxuXHRcdGRheVN0YXR1czogJ1xcJ0RhdHVtXFwnIERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnT2RhYmVyaSBkYXR1bScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbWUtTUUnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgTW9udGVuZWdyaW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IE1pbG/FoSBNaWxvxaFldmnEhyAtIGZsZWthIGQuby5vLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbWUnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjOycsIHByZXZTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDQv9GA0LXRgtGF0L7QtNC90Lgg0LzRmNC10YHQtdGGJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0L/RgNC10YLRhdC+0LTQvdGDINCz0L7QtNC40L3RgycsXHJcblx0XHRuZXh0VGV4dDogJyYjeDNlOycsIG5leHRTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDRgdGZ0LXQtNC10ZvQuCDQvNGY0LXRgdC10YYnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDRgdGZ0LXQtNC10ZvRgyDQs9C+0LTQuNC90YMnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfQlNCw0L3QsNGBJywgY3VycmVudFN0YXR1czogJ9Ci0LXQutGD0ZvQuCDQvNGY0LXRgdC10YYnLFxyXG5cdFx0dG9kYXlUZXh0OiAn0JTQsNC90LDRgScsIHRvZGF5U3RhdHVzOiAn0KLQtdC60YPRm9C4INC80ZjQtdGB0LXRhicsXHJcblx0XHRjbGVhclRleHQ6ICfQntCx0YDQuNGI0LgnLCBjbGVhclN0YXR1czogJ9Ce0LHRgNC40YjQuCDRgtGA0LXQvdGD0YLQvdC4INC00LDRgtGD0LwnLFxyXG5cdFx0Y2xvc2VUZXh0OiAn0JfQsNGC0LLQvtGA0LgnLCBjbG9zZVN0YXR1czogJ9CX0LDRgtCy0L7RgNC4INC60LDQu9C10L3QtNCw0YAnLFxyXG5cdFx0eWVhclN0YXR1czogJ9Cf0YDQuNC60LDQttC4INCz0L7QtNC40L3QtScsIG1vbnRoU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0LzRmNC10YHQtdGG0LUnLFxyXG5cdFx0d2Vla1RleHQ6ICfQodC10LQnLCB3ZWVrU3RhdHVzOiAn0KHQtdC00LzQuNGG0LAnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnXFwn0JTQsNGC0YPQvFxcJyBERCBkIE1NJywgZGVmYXVsdFN0YXR1czogJ9Ce0LTQsNCx0LXRgNC4INC00LDRgtGD0LwnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ21lJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgINCc0LDQutC10LTQvtC90YHQutC4IE1LIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgSGFqYW4gU2VsbWFuaSAoaGFqYW4gW2F0XSBsaXZlIFtkb3RdIGNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydtayddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAn0J/RgNC10YLRhS4nLCBwcmV2U3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0LPQviDQv9GA0LXRgtGF0L7QtNC90LjQvtGCINC80LXRgdC10YYnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDRmNCwINC/0YDQtdGC0YXQvtC00L3QsNGC0LAg0LPQvtC00LjQvdCwJyxcclxuXHRcdG5leHRUZXh0OiAn0KHQu9C10LTQtdC9JywgbmV4dFN0YXR1czogJ9Cf0YDQuNC60LDQttC4INCz0L4g0YHQu9C10LTQvdC40L7RgiDQvNC10YHQtdGGJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0ZjQsCDRgdC70LXQtNC90LDRgtCwINCz0L7QtNC40L3QsCcsXHJcblx0XHRjdXJyZW50VGV4dDogJ9Ci0LXQutC+0LLQtdC9JywgY3VycmVudFN0YXR1czogJ9Cf0YDQuNC60LDQttC4INCz0L4g0YLQtdC60L7QstC90LjQvtGCINC80LXRgdC10YYnLFxyXG5cdFx0dG9kYXlUZXh0OiAn0JTQtdC90LXRgScsIHRvZGF5U3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0LPQviDQtNC10L3QtdGI0L3QuNC+0YIg0LzQtdGB0LXRhicsXHJcblx0XHRjbGVhclRleHQ6ICfQkdGA0LjRiNC4JywgY2xlYXJTdGF0dXM6ICfQmNC30LHRgNC40YjQuCDQs9C+INGC0LXQutC+0LLQvdC40L7RgiDQtNCw0YLRg9C8JyxcclxuXHRcdGNsb3NlVGV4dDogJ9CX0LDRgtCy0L7RgNC4JywgY2xvc2VTdGF0dXM6ICfQl9Cw0YLQstC+0YDQuCDQsdC10Lcg0L/RgNC+0LzQtdC90LgnLFxyXG5cdFx0eWVhclN0YXR1czogJ9CY0LfQsdC10YDQuCDQtNGA0YPQs9CwINCz0L7QtNC40L3QsCcsIG1vbnRoU3RhdHVzOiAn0JjQt9Cx0LXRgNC4INC00YDRg9CzINC80LXRgdC10YYnLFxyXG5cdFx0d2Vla1RleHQ6ICfQndC10LQnLCB3ZWVrU3RhdHVzOiAn0J3QtdC00LXQu9CwINCy0L4g0LPQvtC00LjQvdCw0YLQsCcsXHJcblx0XHRkYXlTdGF0dXM6ICfQmNC30LHQtdGA0LggREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICfQmNC30LHQtdGA0Lgg0LTQsNGC0YPQvCcsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbWsnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgTWFsYXlhbGFtIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgU2FqaSBOZWRpeWFuY2hhdGggKHNhamk4OUBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbWwnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJ+C0ruC1geC0qOC1jeC0qOC0pOC1jeC0pOC1hicsIHByZXZTdGF0dXM6ICcnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICfgtIXgtJ/gtYHgtKTgtY3gtKTgtKTgtY0gJywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ+C0h+C0qOC1jeC0qOC1jScsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAn4LSH4LSo4LWN4LSo4LWNJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnWCcsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ+C0tuC0sOC0vycsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ+C0hicsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnREQgZCBNTScsIGRlZmF1bHRTdGF0dXM6ICcnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ21sJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIE1hbGF5c2lhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTW9oZCBOYXdhd2kgTW9oYW1hZCBKYW1pbGkgKG5hd2F3aUByb25nZ2VuZy5uZXQpLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbXMnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO1NlYmVsdW0nLCBwcmV2U3RhdHVzOiAnVHVuanVra2FuIGJ1bGFuIGxlcGFzJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnVHVuanVra2FuIHRhaHVuIGxlcGFzJyxcclxuXHRcdG5leHRUZXh0OiAnU2VsZXBhcyYjeDNlOycsIG5leHRTdGF0dXM6ICdUdW5qdWtrYW4gYnVsYW4gZGVwYW4nLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICdUdW5qdWtrYW4gdGFodW4gZGVwYW4nLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdoYXJpIGluaScsIGN1cnJlbnRTdGF0dXM6ICdUdW5qdWtrYW4gYnVsYW4gdGVya2luaScsXHJcblx0XHR0b2RheVRleHQ6ICdoYXJpIGluaScsIHRvZGF5U3RhdHVzOiAnVHVuanVra2FuIGJ1bGFuIHRlcmtpbmknLFxyXG5cdFx0Y2xlYXJUZXh0OiAnUGFkYW0nLCBjbGVhclN0YXR1czogJ1BhZGFta2FuIHRhcmlraCB0ZXJraW5pJyxcclxuXHRcdGNsb3NlVGV4dDogJ1R1dHVwJywgY2xvc2VTdGF0dXM6ICdUdXR1cCB0YW5wYSBwZXJ1YmFoYW4nLFxyXG5cdFx0eWVhclN0YXR1czogJ1R1bmp1a2thbiB0YWh1biB5YW5nIGxhaW4nLCBtb250aFN0YXR1czogJ1R1bmp1a2thbiBidWxhbiB5YW5nIGxhaW4nLFxyXG5cdFx0d2Vla1RleHQ6ICdNZycsIHdlZWtTdGF0dXM6ICdNaW5nZ3UgYmFnaSB0YWh1biBpbmknLFxyXG5cdFx0ZGF5U3RhdHVzOiAnREQsIGQgTU0nLCBkZWZhdWx0U3RhdHVzOiAnU2lsYSBwaWxpaCB0YXJpa2gnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ21zJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIE1hbHRlc2UgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IENocml0aWFuIFNjaWJlcnJhcyAodXVmNjQyOUBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbXQnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJ1RhIFFhYmVsJywgcHJldlN0YXR1czogJ0l4LXhhaGFyIHRhIHFhYmVsJyxcclxuIFx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ0lzLXNlbmEgdGEgcWFiZWwnLFxyXG4gXHRcdG5leHRUZXh0OiAnTGkgSm1pc3MnLCBuZXh0U3RhdHVzOiAnSXgteGFoYXIgbGkgam1pc3MnLFxyXG4gXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnSXMtc2VuYSBsaSBqbWlzcycsXHJcbiBcdFx0Y3VycmVudFRleHQ6ICdJbGx1bScsIGN1cnJlbnRTdGF0dXM6ICdJeC14YWhhciB0YSBsbHVtJyxcclxuIFx0XHR0b2RheVRleHQ6ICdJbGx1bScsIHRvZGF5U3RhdHVzOiAnVXJpIGl4LXhhaGFyIHRhIGxsdW0nLFxyXG4gXHRcdGNsZWFyVGV4dDogJ8SmYXNzYXInLCBjbGVhclN0YXR1czogJ8SmYXNzYXIgaWQtZGF0YScsXHJcbiBcdFx0Y2xvc2VUZXh0OiAnTGVzdCcsIGNsb3NlU3RhdHVzOiAnR8SnYWxhcSBtaW5nxKdhanIgdGliZGlsaWV0JyxcclxuIFx0XHR5ZWFyU3RhdHVzOiAnVXJpIHNlbmEgZGlmZmVyZW50aScsIG1vbnRoU3RhdHVzOiAnVXJpIHhhaGFyIGRpZmZlcmVudGknLFxyXG5cdFx0d2Vla1RleHQ6ICfEoG0nLCB3ZWVrU3RhdHVzOiAnSWwtxKBpbWfEp2EgZmlzLXNlbmEnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnR8SnYXplbCBERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ0fEp2F6ZWwgZGF0YScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbXQnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgRHV0Y2gvQmVsZ2lhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTWF0aGlhcyBCeW5lbnMgPGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlLz4uICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydubC1CRSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAn4oaQJywgcHJldlN0YXR1czogJ0Jla2lqayBkZSB2b3JpZ2UgbWFhbmQnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnwqsnLCBuZXh0SnVtcFN0YXR1czogJ0Jla2lqayBoZXQgdm9yaWdlIGphYXInLFxyXG5cdFx0bmV4dFRleHQ6ICfihpInLCBuZXh0U3RhdHVzOiAnQmVraWprIGRlIHZvbGdlbmRlIG1hYW5kJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJ8K7JywgbmV4dEp1bXBTdGF0dXM6ICdCZWtpamsgaGV0IHZvbGdlbmRlIGphYXInLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdWYW5kYWFnJywgY3VycmVudFN0YXR1czogJ0Jla2lqayBkZSBodWlkaWdlIG1hYW5kJyxcclxuXHRcdHRvZGF5VGV4dDogJ1ZhbmRhYWcnLCB0b2RheVN0YXR1czogJ0Jla2lqayBkZSBodWlkaWdlIG1hYW5kJyxcclxuXHRcdGNsZWFyVGV4dDogJ1dpc3NlbicsIGNsZWFyU3RhdHVzOiAnV2lzIGRlIGh1aWRpZ2UgZGF0dW0nLFxyXG5cdFx0Y2xvc2VUZXh0OiAnU2x1aXRlbicsIGNsb3NlU3RhdHVzOiAnU2x1aXQgem9uZGVyIHZlcmFuZGVyaW5nJyxcclxuXHRcdHllYXJTdGF0dXM6ICdCZWtpamsgZWVuIGFuZGVyIGphYXInLCBtb250aFN0YXR1czogJ0Jla2lqayBlZW4gYW5kZXJlIG1hYW5kJyxcclxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnV2VlayB2YW4gaGV0IGphYXInLFxyXG5cdFx0ZGF5U3RhdHVzOiAnZGQvbW0veXl5eScsIGRlZmF1bHRTdGF0dXM6ICdLaWVzIGVlbiBkYXR1bScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbmwtQkUnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgRHV0Y2ggbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IE1hdGhpYXMgQnluZW5zIDxodHRwOi8vbWF0aGlhc2J5bmVucy5iZS8+LiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snbmwnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJ+KGkCcsIHByZXZTdGF0dXM6ICdCZWtpamsgZGUgdm9yaWdlIG1hYW5kJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJ8KrJywgbmV4dEp1bXBTdGF0dXM6ICdCZWtpamsgaGV0IHZvcmlnZSBqYWFyJyxcclxuXHRcdG5leHRUZXh0OiAn4oaSJywgbmV4dFN0YXR1czogJ0Jla2lqayBkZSB2b2xnZW5kZSBtYWFuZCcsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICfCuycsIG5leHRKdW1wU3RhdHVzOiAnQmVraWprIGhldCB2b2xnZW5kZSBqYWFyJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnVmFuZGFhZycsIGN1cnJlbnRTdGF0dXM6ICdCZWtpamsgZGUgaHVpZGlnZSBtYWFuZCcsXHJcblx0XHR0b2RheVRleHQ6ICdWYW5kYWFnJywgdG9kYXlTdGF0dXM6ICdCZWtpamsgZGUgaHVpZGlnZSBtYWFuZCcsXHJcblx0XHRjbGVhclRleHQ6ICdXaXNzZW4nLCBjbGVhclN0YXR1czogJ1dpcyBkZSBodWlkaWdlIGRhdHVtJyxcclxuXHRcdGNsb3NlVGV4dDogJ1NsdWl0ZW4nLCBjbG9zZVN0YXR1czogJ1NsdWl0IHpvbmRlciB2ZXJhbmRlcmluZycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnQmVraWprIGVlbiBhbmRlciBqYWFyJywgbW9udGhTdGF0dXM6ICdCZWtpamsgZWVuIGFuZGVyZSBtYWFuZCcsXHJcblx0XHR3ZWVrVGV4dDogJ1drJywgd2Vla1N0YXR1czogJ1dlZWsgdmFuIGhldCBqYWFyJyxcclxuXHRcdGRheVN0YXR1czogJ2RkLW1tLXl5eXknLCBkZWZhdWx0U3RhdHVzOiAnS2llcyBlZW4gZGF0dW0nLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ25sJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIE5vcndlZ2lhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTmFpbWRqb24gVGFraGlyb3YgKG5haW1kam9uQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydubyddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJmxhcXVvO0ZvcnJpZ2UnLCAgcHJldlN0YXR1czogJycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ05lc3RlJnJhcXVvOycsIG5leHRTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdJIGRhZycsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAnSSBkYWcnLCB0b2RheVN0YXR1czogJycsXHJcblx0XHRjbGVhclRleHQ6ICdUw7htJywgY2xlYXJTdGF0dXM6ICcnLFxyXG5cdFx0Y2xvc2VUZXh0OiAnTHVraycsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ1VrZScsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ25vJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFBvbGlzaCBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgSmFjZWsgV3lzb2NraSAoamFjZWsud3lzb2NraUBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sncGwnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO1BvcHJ6ZWRuaScsIHByZXZTdGF0dXM6ICdQb2thxbwgcG9wcnplZG5pIG1pZXNpxIVjJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnTmFzdMSZcG55JiN4M2U7JywgbmV4dFN0YXR1czogJ1Bva2HFvCBuYXN0xJlwbnkgbWllc2nEhWMnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdEemnFmycsIGN1cnJlbnRTdGF0dXM6ICdQb2thxbwgYWt0dWFsbnkgbWllc2nEhWMnLFxyXG5cdFx0dG9kYXlUZXh0OiAnRHppxZsnLCB0b2RheVN0YXR1czogJ1Bva2HFvCBha3R1YWxueSBtaWVzacSFYycsXHJcblx0XHRjbGVhclRleHQ6ICdXeWN6ecWbxIcnLCBjbGVhclN0YXR1czogJ1d5Y3p5xZvEhyBvYmVjbsSFIGRhdMSZJyxcclxuXHRcdGNsb3NlVGV4dDogJ1phbWtuaWonLCBjbG9zZVN0YXR1czogJ1phbWtuaWogYmV6IHphcGlzeXdhbmlhJyxcclxuXHRcdHllYXJTdGF0dXM6ICdQb2thxbwgaW5ueSByb2snLCBtb250aFN0YXR1czogJ1Bva2HFvCBpbm55IG1pZXNpxIVjJyxcclxuXHRcdHdlZWtUZXh0OiAnVHlkeicsIHdlZWtTdGF0dXM6ICdUeWR6aWXFhCByb2t1JyxcclxuXHRcdGRheVN0YXR1czogJ1xcJ1d5YmllcnpcXCcgREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdXeWJpZXJ6IGRhdMSZJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydwbCddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBCcmF6aWxpYW4gUG9ydHVndWVzZSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgTGVvbmlsZG8gQ29zdGEgU2lsdmEgKGxlb2NzaWx2YUBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sncHQtQlInXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyZsdDtBbnRlcmlvcicsIHByZXZTdGF0dXM6ICdNb3N0cmEgbyBtw6pzIGFudGVyaW9yJywgXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmbHQ7Jmx0OycsIHByZXZKdW1wU3RhdHVzOiAnTW9zdHJhIG8gYW5vIGFudGVyaW9yJywgXHJcblx0XHRuZXh0VGV4dDogJ1Byw7N4aW1vJmd0OycsIG5leHRTdGF0dXM6ICdNb3N0cmEgbyBwcsOzeGltbyBtw6pzJywgXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmZ3Q7Jmd0OycsIG5leHRKdW1wU3RhdHVzOiAnTW9zdHJhIG8gcHLDs3hpbW8gYW5vJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnQXR1YWwnLCBjdXJyZW50U3RhdHVzOiAnTW9zdHJhIG8gbcOqcyBhdHVhbCcsXHJcblx0XHR0b2RheVRleHQ6ICdIb2plJywgdG9kYXlTdGF0dXM6ICdWYWkgcGFyYSBob2plJywgXHJcblx0XHRjbGVhclRleHQ6ICdMaW1wYXInLCBjbGVhclN0YXR1czogJ0xpbXBhciBkYXRhJyxcclxuXHRcdGNsb3NlVGV4dDogJ0ZlY2hhcicsIGNsb3NlU3RhdHVzOiAnRmVjaGFyIG8gY2FsZW5kw6FyaW8nLFxyXG5cdFx0eWVhclN0YXR1czogJ1NlbGVjaW9uYXIgYW5vJywgbW9udGhTdGF0dXM6ICdTZWxlY2lvbmFyIG3DqnMnLFxyXG5cdFx0d2Vla1RleHQ6ICdzJywgd2Vla1N0YXR1czogJ1NlbWFuYSBkbyBhbm8nLCBcclxuXHRcdGRheVN0YXR1czogJ0RELCBkIFxcJ2RlXFwnIE0gXFwnZGVcXCcgeXl5eScsIGRlZmF1bHRTdGF0dXM6ICdTZWxlY2lvbmUgdW0gZGlhJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydwdC1CUiddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBSb21hbnNoIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgWXZvbm5lIEdpZW5hbCAoeXZvbm5lLmdpZW5hbEBlZHVjYS5jaCkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydybSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7U3VhbmRhbnQnLCBwcmV2U3RhdHVzOiAnJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnUHJlY2VkZW50JiN4M2U7JywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ0FjdHVhbCcsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAnQWN0dWFsJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnWCcsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ1NlcnJhcicsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ2VtbmEnLCB3ZWVrU3RhdHVzOiAnJyxcclxuXHRcdGRheVN0YXR1czogJ0REIGQgTU0nLCBkZWZhdWx0U3RhdHVzOiAnJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydybSddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBSb21hbmlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgRWRtb25kIEwuIChsbF9lZG1vbmRAd2FsbGEuY29tKSBhbmQgSW9udXQgRy4gU3RhbiAoaW9udXQuZy5zdGFuQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydybyddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJmxhcXVvO1ByZWNlZGVudGEnLCBwcmV2U3RhdHVzOiAnQXJhdGEgbHVuYSBwcmVjZWRlbnRhJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyZsYXF1bzsmbGFxdW87JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICdVcm1hdG9hcmUmcmFxdW87JywgbmV4dFN0YXR1czogJ0FyYXRhIGx1bmEgdXJtYXRvYXJlJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyZyYXF1bzsmcmFxdW87JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdBemknLCBjdXJyZW50U3RhdHVzOiAnQXJhdGEgbHVuYSBjdXJlbnRhJyxcclxuXHRcdHRvZGF5VGV4dDogJ0F6aScsIHRvZGF5U3RhdHVzOiAnQXJhdGEgbHVuYSBjdXJlbnRhJyxcclxuXHRcdGNsZWFyVGV4dDogJ0N1cmF0JywgY2xlYXJTdGF0dXM6ICdTdGVyZ2UgZGF0YSBjdXJlbnRhJyxcclxuXHRcdGNsb3NlVGV4dDogJ8OObmNoaWRlJywgY2xvc2VTdGF0dXM6ICfDjm5jaGlkZSBmYXJhIHNjaGltYmFyZScsXHJcblx0XHR5ZWFyU3RhdHVzOiAnQXJhdCB1biBhbiBkaWZlcml0JywgbW9udGhTdGF0dXM6ICdBcmF0YSBvIGx1bmEgZGlmZXJpdGEnLFxyXG5cdFx0d2Vla1RleHQ6ICdTxINwdCcsIHdlZWtTdGF0dXM6ICdTxINwdGFtYW5hIGFudWx1aScsXHJcblx0XHRkYXlTdGF0dXM6ICdTZWxlY3RlYXphIERELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnU2VsZWN0ZWF6YSBvIGRhdGEnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3JvJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFJ1c3NpYW4gbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IEFuZHJldyBTdHJvbW5vdiAoc3Ryb21ub3ZAZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3J1J10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYzvQn9GA0LXQtCcsICBwcmV2U3RhdHVzOiAnJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAn0KHQu9C10LQmI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn0KHQtdCz0L7QtNC90Y8nLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ9Ch0LXQs9C+0LTQvdGPJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAn0J7Rh9C40YHRgtC40YLRjCcsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ9CX0LDQutGA0YvRgtGMJywgY2xvc2VTdGF0dXM6ICcnLFxyXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcclxuXHRcdHdlZWtUZXh0OiAn0J3QtScsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICcnLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3J1J10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFNsb3ZhayBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgVm9qdGVjaCBSaW5payAodm9qdG9AaG1tLnNrKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3NrJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYztQcmVkY2jDoWR6YWrDumNpJywgIHByZXZTdGF0dXM6ICcnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICdOYXNsZWR1asO6Y2kmI3gzZTsnLCBuZXh0U3RhdHVzOiAnJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnRG5lcycsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAnRG5lcycsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ1ptYXphxaUnLCBjbGVhclN0YXR1czogJycsXHJcblx0XHRjbG9zZVRleHQ6ICdaYXZyaWXFpScsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ1R5Jywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERC4gTSBkJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snc2snXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgU2xvdmVuaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBKYWthIEphbmNhciAoamFrYUBrdWJqZS5vcmcpLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snc2wnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyZsdDtQcmVqJiN4MTYxO25qaScsIHByZXZTdGF0dXM6ICdQcmlrYSYjeDE3RTtpIHByZWomI3gxNjE7bmppIG1lc2VjJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnTmFzbGVkbmppJmd0OycsIG5leHRTdGF0dXM6ICdQcmlrYSYjeDE3RTtpIG5hc2xlZG5qaSBtZXNlYycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ1RyZW51dG5pJywgY3VycmVudFN0YXR1czogJ1ByaWthJiN4MTdFO2kgdHJlbnV0bmkgbWVzZWMnLFxyXG5cdFx0dG9kYXlUZXh0OiAnVHJlbnV0bmknLCB0b2RheVN0YXR1czogJ1ByaWthJiN4MTdFO2kgdHJlbnV0bmkgbWVzZWMnLFxyXG5cdFx0Y2xlYXJUZXh0OiAnSXpicmkmI3gxNjE7aScsIGNsZWFyU3RhdHVzOiAnSXpicmkmI3gxNjE7aSB0cmVudXRuaSBkYXR1bScsXHJcblx0XHRjbG9zZVRleHQ6ICdaYXByaScsIGNsb3NlU3RhdHVzOiAnWmFwcmkgYnJleiBzcHJlbWluamFuamEnLFxyXG5cdFx0eWVhclN0YXR1czogJ1ByaWthJiN4MTdFO2kgZHJ1Z28gbGV0bycsIG1vbnRoU3RhdHVzOiAnUHJpa2EmI3gxN0U7aSBkcnVnIG1lc2VjJyxcclxuXHRcdHdlZWtUZXh0OiAnVGVkZW4nLCB3ZWVrU3RhdHVzOiAnVGVkZW4gdiBsZXR1JyxcclxuXHRcdGRheVN0YXR1czogJ0l6YmVyaSBERCwgZCBNTSB5eScsIGRlZmF1bHRTdGF0dXM6ICdJemJpcmEgZGF0dW1hJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzbCddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBBbGJhbmlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgRmxha3JvbiBCeXR5cWkgKGZsYWtyb25AZ21haWwuY29tKS4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3NxJ10gPSB7XHJcblx0XHRyZW5kZXJlcjogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYzttYnJhcGEnLCBwcmV2U3RhdHVzOiAndHJlZ28gbXVhamluIGUgZnVuZGl0JyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnUMOrcnBhcmEmI3gzZTsnLCBuZXh0U3RhdHVzOiAndHJlZ28gbXVhamluIHRqZXTDq3InLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdzb3QnLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ3NvdCcsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ2ZzaGlqZScsIGNsZWFyU3RhdHVzOiAnZnNoaWplIGRhdMOrbiBha3R1YWxlJyxcclxuXHRcdGNsb3NlVGV4dDogJ21ieWxsZScsIGNsb3NlU3RhdHVzOiAnbWJ5bGxlIHBhIG5kcnlzaGltZScsXHJcblx0XHR5ZWFyU3RhdHVzOiAndHJlZ28gdGpldMOrciB2aXQnLCBtb250aFN0YXR1czogJ3RyZWdvIG11YWppbiB0amV0w6tyJyxcclxuXHRcdHdlZWtUZXh0OiAnSmEnLCB3ZWVrU3RhdHVzOiAnSmF2YSBlIG11YWppdCcsXHJcblx0XHRkYXlTdGF0dXM6ICdcXCdaZ2plZGhcXCcgRCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ1pnamVkaGUgbmrDqyBkYXTDqycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snc3EnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgU2VyYmlhbiBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgRGVqYW4gRGltacSHLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snc3ItU1InXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjOycsIHByZXZTdGF0dXM6ICdQcmlrYcW+aSBwcmVkaG9kbmkgbWVzZWMnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICdQcmlrYcW+aSBwcmVkaG9kbnUgZ29kaW51JyxcclxuXHRcdG5leHRUZXh0OiAnJiN4M2U7JywgbmV4dFN0YXR1czogJ1ByaWthxb5pIHNsZWRlxIdpIG1lc2VjJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnUHJpa2HFvmkgc2xlZGXEh3UgZ29kaW51JyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnRGFuYXMnLCBjdXJyZW50U3RhdHVzOiAnVGVrdcSHaSBtZXNlYycsXHJcblx0XHR0b2RheVRleHQ6ICdEYW5hcycsIHRvZGF5U3RhdHVzOiAnVGVrdcSHaSBtZXNlYycsXHJcblx0XHRjbGVhclRleHQ6ICdPYnJpxaFpJywgY2xlYXJTdGF0dXM6ICdPYnJpxaFpIHRyZW51dG5pIGRhdHVtJyxcclxuXHRcdGNsb3NlVGV4dDogJ1phdHZvcmknLCBjbG9zZVN0YXR1czogJ1phdHZvcmkga2FsZW5kYXInLFxyXG5cdFx0eWVhclN0YXR1czogJ1ByaWthxb5pIGdvZGluZScsIG1vbnRoU3RhdHVzOiAnUHJpa2HFvmkgbWVzZWNlJyxcclxuXHRcdHdlZWtUZXh0OiAnU2VkJywgd2Vla1N0YXR1czogJ1NlZG1pY2EnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnXFwnRGF0dW1cXCcgREQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICdPZGFiZXJpIGRhdHVtJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzci1TUiddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTZXJiaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBEZWphbiBEaW1pxIcuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzciddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7JywgcHJldlN0YXR1czogJ9Cf0YDQuNC60LDQttC4INC/0YDQtdC00YXQvtC00L3QuCDQvNC10YHQtdGGJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0L/RgNC10LTRhdC+0LTQvdGDINCz0L7QtNC40L3RgycsXHJcblx0XHRuZXh0VGV4dDogJyYjeDNlOycsIG5leHRTdGF0dXM6ICfQn9GA0LjQutCw0LbQuCDRgdC70LXRhtC10ZvQuCDQvNC10YHQtdGGJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0YHQu9C10LTQtdGb0YMg0LPQvtC00LjQvdGDJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn0JTQsNC90LDRgScsIGN1cnJlbnRTdGF0dXM6ICfQotC10LrRg9Gb0Lgg0LzQtdGB0LXRhicsXHJcblx0XHR0b2RheVRleHQ6ICfQlNCw0L3QsNGBJywgdG9kYXlTdGF0dXM6ICfQotC10LrRg9Gb0Lgg0LzQtdGB0LXRhicsXHJcblx0XHRjbGVhclRleHQ6ICfQntCx0YDQuNGI0LgnLCBjbGVhclN0YXR1czogJ9Ce0LHRgNC40YjQuCDRgtGA0LXQvdGD0YLQvdC4INC00LDRgtGD0LwnLFxyXG5cdFx0Y2xvc2VUZXh0OiAn0JfQsNGC0LLQvtGA0LgnLCBjbG9zZVN0YXR1czogJ9CX0LDRgtCy0L7RgNC4INC60LDQu9C10L3QtNCw0YAnLFxyXG5cdFx0eWVhclN0YXR1czogJ9Cf0YDQuNC60LDQttC4INCz0L7QtNC40L3QtScsIG1vbnRoU3RhdHVzOiAn0J/RgNC40LrQsNC20Lgg0LzQtdGB0LXRhtC1JyxcclxuXHRcdHdlZWtUZXh0OiAn0KHQtdC0Jywgd2Vla1N0YXR1czogJ9Ch0LXQtNC80LjRhtCwJyxcclxuXHRcdGRheVN0YXR1czogJ1xcJ9CU0LDRgtGD0LxcXCcgREQgZCBNTScsIGRlZmF1bHRTdGF0dXM6ICfQntC00LDQsdC10YDQuCDQtNCw0YLRg9C8JyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWydzciddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBTd2VkaXNoIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBBbmRlcnMgRWtkYWhsICggYW5kZXJzQG5vbWFkaXouc2UpLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snc3YnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcbiAgICAgICAgcHJldlRleHQ6ICcmbGFxdW87RsO2cnJhJywgIHByZXZTdGF0dXM6ICcnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICdOw6RzdGEmcmFxdW87JywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ0lkYWcnLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ0lkYWcnLCB0b2RheVN0YXR1czogJycsXHJcblx0XHRjbGVhclRleHQ6ICdSZW5zYScsIGNsZWFyU3RhdHVzOiAnJyxcclxuXHRcdGNsb3NlVGV4dDogJ1N0w6RuZycsIGNsb3NlU3RhdHVzOiAnJyxcclxuXHRcdHllYXJTdGF0dXM6ICcnLCBtb250aFN0YXR1czogJycsXHJcblx0XHR3ZWVrVGV4dDogJ1ZlJywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snc3YnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgVGFtaWwgKFVURi04KSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgUyBBIFN1cmVzaGt1bWFyIChzYXNrdW1hckBsaXZlLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd0YSddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAn4K6u4K+B4K6p4K+N4K6p4K+I4K6v4K6k4K+BJywgIHByZXZTdGF0dXM6ICcnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICfgroXgrp/gr4HgrqTgr43grqTgrqTgr4EnLCBuZXh0U3RhdHVzOiAnJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyYjeDNlOyYjeDNlOycsIG5leHRKdW1wU3RhdHVzOiAnJyxcclxuXHRcdGN1cnJlbnRUZXh0OiAn4K6H4K6p4K+N4K6x4K+BJywgY3VycmVudFN0YXR1czogJycsXHJcblx0XHR0b2RheVRleHQ6ICfgrofgrqngr43grrHgr4EnLCB0b2RheVN0YXR1czogJycsXHJcblx0XHRjbGVhclRleHQ6ICfgroXgrrTgrr8nLCBjbGVhclN0YXR1czogJycsXHJcblx0XHRjbG9zZVRleHQ6ICfgrq7gr4Lgrp/gr4EnLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxyXG5cdFx0d2Vla1RleHQ6ICdXaycsIHdlZWtTdGF0dXM6ICcnLFxyXG5cdFx0ZGF5U3RhdHVzOiAnRCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndGEnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgVGhhaSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgcGlwbyAocGlwb0BzaXhoZWFkLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd0aCddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJmxhcXVvOyZuYnNwO+C4ouC5ieC4reC4mScsIHByZXZTdGF0dXM6ICcnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0bmV4dFRleHQ6ICfguJbguLHguJTguYTguJsmbmJzcDsmcmFxdW87JywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ+C4p+C4seC4meC4meC4teC5iScsIGN1cnJlbnRTdGF0dXM6ICcnLFxyXG5cdFx0dG9kYXlUZXh0OiAn4Lin4Lix4LiZ4LiZ4Li14LmJJywgdG9kYXlTdGF0dXM6ICcnLFxyXG5cdFx0Y2xlYXJUZXh0OiAn4Lil4LiaJywgY2xlYXJTdGF0dXM6ICcnLFxyXG5cdFx0Y2xvc2VUZXh0OiAn4Lib4Li04LiUJywgY2xvc2VTdGF0dXM6ICcnLFxyXG5cdFx0eWVhclN0YXR1czogJycsIG1vbnRoU3RhdHVzOiAnJyxcclxuXHRcdHdlZWtUZXh0OiAnV2snLCB3ZWVrU3RhdHVzOiAnJyxcclxuXHRcdGRheVN0YXR1czogJ0RELCBNIGQnLCBkZWZhdWx0U3RhdHVzOiAnJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd0aCddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBUdXJraXNoIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBJenpldCBFbXJlIEVya2FuIChrYXJhQGthcmFsYW1hbGFyLm5ldCkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd0ciddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlcixcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M7Z2VyaScsIHByZXZTdGF0dXM6ICfDtm5jZWtpIGF5xLEgZ8O2c3RlcicsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJycsXHJcblx0XHRuZXh0VGV4dDogJ2lsZXJpJiN4M2UnLCBuZXh0U3RhdHVzOiAnc29ucmFraSBhecSxIGfDtnN0ZXInLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICcnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICdidWfDvG4nLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ2J1Z8O8bicsIHRvZGF5U3RhdHVzOiAnJyxcclxuXHRcdGNsZWFyVGV4dDogJ3RlbWl6bGUnLCBjbGVhclN0YXR1czogJ2dlw6dlcmxpIHRhcmloaSB0ZW1pemxlcicsXHJcblx0XHRjbG9zZVRleHQ6ICdrYXBhdCcsIGNsb3NlU3RhdHVzOiAnc2FkZWNlIGfDtnN0ZXJnZXlpIGthcGF0JyxcclxuXHRcdHllYXJTdGF0dXM6ICdiYcWfa2EgecSxbCcsIG1vbnRoU3RhdHVzOiAnYmHFn2thIGF5JyxcclxuXHRcdHdlZWtUZXh0OiAnSGYnLCB3ZWVrU3RhdHVzOiAnQXnEsW4gaGFmdGFsYXLEsScsXHJcblx0XHRkYXlTdGF0dXM6ICdELCBNIGQgc2XDp2luaXonLCBkZWZhdWx0U3RhdHVzOiAnQmlyIHRhcmloIHNlw6dpbml6JyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd0ciddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBUYXRhciBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgSXJlayBLaGF6aWV2IChraGF6aXJla0BnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndHQnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJ9CQ0LvQtNCw0LPRiycsICBwcmV2U3RhdHVzOiAn0JDQu9C00LDQs9GLINCw0LnQvdGLINC60q/RgNGB05nRgtKvJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyZsdDsmbHQ7JywgcHJldkp1bXBTdGF0dXM6ICfQkNC70LTQsNCz0Ysg0LXQu9C90Ysg0LrSr9GA0YHTmdGC0q8nLFxyXG5cdFx0bmV4dFRleHQ6ICfQmtC40LvTmdGB0LUnLCBuZXh0U3RhdHVzOiAn0JrQuNC705nRgdC1INCw0LnQvdGLINC60q/RgNGB05nRgtKvJyxcclxuXHRcdG5leHRKdW1wVGV4dDogJyZndDsmZ3Q7JywgbmV4dEp1bXBTdGF0dXM6ICfQmtC40LvTmdGB0LUg0LXQu9C90Ysg0LrSr9GA0YHTmdGC0q8nLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfQpdOZ0LfQtdGAJywgY3VycmVudFN0YXR1czogJ9Cl05nQt9C10YDQs9C1INCw0LnQvdGLINC60q/RgNGB05nRgtKvJyxcclxuXHRcdHRvZGF5VGV4dDogJ9CR0q/Qs9C10L0nLCB0b2RheVN0YXR1czogJ9CR0q/Qs9C10L3Qs9C1INCw0LnQvdGLINC60q/RgNGB05nRgtKvJyxcclxuXHRcdGNsZWFyVGV4dDogJ9Cn0LjRgdGC0LDRgNGC0YMnLCBjbGVhclN0YXR1czogJ9CR0LDRgNC70YvQuiDQutOp0L3QvdOZ0YDQvdC1INGH0LjRgdGC0LDRgNGC0YMnLFxyXG5cdFx0Y2xvc2VUZXh0OiAn0K/QsdCw0YDQs9CwJywgY2xvc2VTdGF0dXM6ICfQmtOp0L0g0YHQsNC50LvQsNGD0L3RiyDRj9Cx0LDRgNCz0LAnLFxyXG5cdFx0eWVhclN0YXR1czogJ9CV0LvQvdGLINC60LXRgNGC0LXQs9C10LcnLCBtb250aFN0YXR1czogJ9CQ0LnQvdGLINC60LXRgNGC0LXQs9C10LcnLFxyXG5cdFx0d2Vla1RleHQ6ICfQkNGC0L3QsCcsIHdlZWtTdGF0dXM6ICfQldC70LTQsCDQsNGC0L3QsCDRgdCw0L3RiycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJ9Ca06nQvdC90LUg0YHQsNC50LvQsNCz0YvQtycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndHQnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgVWtyYWluaWFuIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBNYXhpbSBEcm9nb2JpdHNraXkgKG1heGRhb0BnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndWsnXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjOycsICBwcmV2U3RhdHVzOiAnJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAnJyxcclxuXHRcdG5leHRUZXh0OiAnJiN4M2U7JywgbmV4dFN0YXR1czogJycsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJycsXHJcblx0XHRjdXJyZW50VGV4dDogJ9Ch0YzQvtCz0L7QtNC90ZYnLCBjdXJyZW50U3RhdHVzOiAnJyxcclxuXHRcdHRvZGF5VGV4dDogJ9Ch0YzQvtCz0L7QtNC90ZYnLCB0b2RheVN0YXR1czogJycsXHJcblx0XHRjbGVhclRleHQ6ICfQntGH0LjRgdGC0LjRgtC4JywgY2xlYXJTdGF0dXM6ICcnLFxyXG5cdFx0Y2xvc2VUZXh0OiAn0JfQsNC60YDQuNGC0LgnLCBjbG9zZVN0YXR1czogJycsXHJcblx0XHR5ZWFyU3RhdHVzOiAnJywgbW9udGhTdGF0dXM6ICcnLFxyXG5cdFx0d2Vla1RleHQ6ICfQndC1Jywgd2Vla1N0YXR1czogJycsXHJcblx0XHRkYXlTdGF0dXM6ICdERCwgTSBkJywgZGVmYXVsdFN0YXR1czogJycsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndWsnXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgVXJkdSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIE1hbnNvb3IgTXVuaWIgLS0gbWFuc29vcm11bmliQGdtYWlsLmNvbSA8aHR0cDovL3d3dy5tYW5zb29yLmNvLm5yL21hbnNvb3IuaHRtbD5cclxuICAgVGhhbmtzIHRvIEhhYmliIEFobWVkLCBPYmFpZFVsbGFoIEFud2FyLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndXInXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO9qv2LDYtNiq24EnLCBwcmV2U3RhdHVzOiAn2YXYp9mHINqv2LDYtNiq24EnLFxyXG5cdFx0cHJldkp1bXBUZXh0OiAnJiN4M2M7JiN4M2M7JywgcHJldkp1bXBTdGF0dXM6ICfYqNix2LMg2q/YsNi02KrbgScsXHJcblx0XHRuZXh0VGV4dDogJ9ii2KbZhtiv24EmI3gzZTsnLCBuZXh0U3RhdHVzOiAn2YXYp9mHINii2KbZhtiv24EnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICfYqNix2LMg2KLYptmG2K/bgScsXHJcblx0XHRjdXJyZW50VGV4dDogJ9ix2YjYp9q6JywgY3VycmVudFN0YXR1czogJ9mF2KfZhyDYsdmI2KfauicsXHJcblx0XHR0b2RheVRleHQ6ICfYotisJywgdG9kYXlTdGF0dXM6ICfYotisJyxcclxuXHRcdGNsZWFyVGV4dDogJ9it2LDZgSDYqtin2LHZitiuJywgY2xlYXJTdGF0dXM6ICfaqdix24zauiDYrdiw2YEg2KrYp9ix24zYricsXHJcblx0XHRjbG9zZVRleHQ6ICfaqdix24zauiDYqNmG2K8nLCBjbG9zZVN0YXR1czogJ9qp24zZhNim25Ig2qnYsdmG25Ig2KjZhtivJyxcclxuXHRcdHllYXJTdGF0dXM6ICfYqNix2LMg2KrYqNiv24zZhNuMJywgbW9udGhTdGF0dXM6ICfZhdin2Ycg2KrYqNiv24zZhNuMJyxcclxuXHRcdHdlZWtUZXh0OiAn24HZgdiq24EnLCB3ZWVrU3RhdHVzOiAn24HZgdiq24EnLFxyXG5cdFx0ZGF5U3RhdHVzOiAn2KfZhtiq2K7Yp9ioIEQsIE0gZCcsIGRlZmF1bHRTdGF0dXM6ICfaqdix24zauiDZhdmG2KrYrtioINiq2KfYsdmK2K4nLFxyXG5cdFx0aXNSVEw6IHRydWVcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndXInXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgVmlldG5hbWVzZSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFRyYW5zbGF0ZWQgYnkgTGUgVGhhbmggSHV5IChsdGhhbmhodXlAY2l0LmN0dS5lZHUudm4pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndmknXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRwcmV2VGV4dDogJyYjeDNjO1RyxrDhu5tjJywgcHJldlN0YXR1czogJ1Row6FuZyB0csaw4bubYycsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ07Eg20gdHLGsOG7m2MnLFxyXG5cdFx0bmV4dFRleHQ6ICdUaeG6v3AmI3gzZTsnLCBuZXh0U3RhdHVzOiAnVGjDoW5nIHNhdScsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ07Eg20gc2F1JyxcclxuXHRcdGN1cnJlbnRUZXh0OiAnSMO0bSBuYXknLCBjdXJyZW50U3RhdHVzOiAnVGjDoW5nIGhp4buHbiB04bqhaScsXHJcblx0XHR0b2RheVRleHQ6ICdIw7RtIG5heScsIHRvZGF5U3RhdHVzOiAnVGjDoW5nIGhp4buHbiB04bqhaScsXHJcblx0XHRjbGVhclRleHQ6ICdYw7NhJywgY2xlYXJTdGF0dXM6ICdYw7NhIG5nw6B5IGhp4buHbiB04bqhaScsXHJcblx0XHRjbG9zZVRleHQ6ICfEkMOzbmcnLCBjbG9zZVN0YXR1czogJ8SQw7NuZyB2w6Aga2jDtG5nIGzGsHUgbOG6oWkgdGhheSDEkeG7lWknLFxyXG5cdFx0eWVhclN0YXR1czogJ07Eg20ga2jDoWMnLCBtb250aFN0YXR1czogJ1Row6FuZyBraMOhYycsXHJcblx0XHR3ZWVrVGV4dDogJ1R1Jywgd2Vla1N0YXR1czogJ1R14bqnbiB0cm9uZyBuxINtJyxcclxuXHRcdGRheVN0YXR1czogJ8SQYW5nIGNo4buNbiBERCwgXFwnbmfDoHlcXCcgZCBNJywgZGVmYXVsdFN0YXR1czogJ0No4buNbiBuZ8OgeScsXHJcblx0XHRpc1JUTDogZmFsc2VcclxuXHR9O1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnNldERlZmF1bHRzKCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1sndmknXSk7XHJcbn0pKGpRdWVyeSk7XHJcbu+7vy8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgU2ltcGxpZmllZCBDaGluZXNlIGxvY2FsaXNhdGlvbiBmb3IgY2FsZW5kYXJzIGRhdGVwaWNrZXIgZm9yIGpRdWVyeS5cclxuICAgV3JpdHRlbiBieSBDbG91ZHJlYW0gKGNsb3VkcmVhbUBnbWFpbC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzUGlja2VyLnJlZ2lvbmFsT3B0aW9uc1snemgtQ04nXSA9IHtcclxuXHRcdHJlbmRlcmVyOiAkLmV4dGVuZCh7fSwgJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLFxyXG5cdFx0XHR7bW9udGg6ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRSZW5kZXJlci5tb250aC5cclxuXHRcdFx0XHRyZXBsYWNlKC9tb250aEhlYWRlci8sICdtb250aEhlYWRlcjpNTSB5eXl55bm0Jyl9KSxcclxuXHRcdHByZXZUZXh0OiAnJiN4M2M75LiK5pyIJywgcHJldlN0YXR1czogJ+aYvuekuuS4iuaciCcsXHJcblx0XHRwcmV2SnVtcFRleHQ6ICcmI3gzYzsmI3gzYzsnLCBwcmV2SnVtcFN0YXR1czogJ+aYvuekuuS4iuS4gOW5tCcsXHJcblx0XHRuZXh0VGV4dDogJ+S4i+aciCYjeDNlOycsIG5leHRTdGF0dXM6ICfmmL7npLrkuIvmnIgnLFxyXG5cdFx0bmV4dEp1bXBUZXh0OiAnJiN4M2U7JiN4M2U7JywgbmV4dEp1bXBTdGF0dXM6ICfmmL7npLrkuIvkuIDlubQnLFxyXG5cdFx0Y3VycmVudFRleHQ6ICfku4rlpKknLCBjdXJyZW50U3RhdHVzOiAn5pi+56S65pys5pyIJyxcclxuXHRcdHRvZGF5VGV4dDogJ+S7iuWkqScsIHRvZGF5U3RhdHVzOiAn5pi+56S65pys5pyIJyxcclxuXHRcdGNsZWFyVGV4dDogJ+a4hemZpCcsIGNsZWFyU3RhdHVzOiAn5riF6Zmk5bey6YCJ5pel5pyfJyxcclxuXHRcdGNsb3NlVGV4dDogJ+WFs+mXrScsIGNsb3NlU3RhdHVzOiAn5LiN5pS55Y+Y5b2T5YmN6YCJ5oupJyxcclxuXHRcdHllYXJTdGF0dXM6ICfpgInmi6nlubTku70nLCBtb250aFN0YXR1czogJ+mAieaLqeaciOS7vScsXHJcblx0XHR3ZWVrVGV4dDogJ+WRqCcsIHdlZWtTdGF0dXM6ICflubTlhoXlkajmrKEnLFxyXG5cdFx0ZGF5U3RhdHVzOiAn6YCJ5oupIG3mnIggZOaXpSwgREQnLCBkZWZhdWx0U3RhdHVzOiAn6K+36YCJ5oup5pel5pyfJyxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIuc2V0RGVmYXVsdHMoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd6aC1DTiddKTtcclxufSkoalF1ZXJ5KTtcclxu77u/LyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBIb25nIEtvbmcgQ2hpbmVzZSBsb2NhbGlzYXRpb24gZm9yIGNhbGVuZGFycyBkYXRlcGlja2VyIGZvciBqUXVlcnkuXHJcbiAgIFdyaXR0ZW4gYnkgU0NDWSAoc2FtdWVsY3ljaGFuQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd6aC1ISyddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuZXh0ZW5kKHt9LCAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRcdHttb250aDogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLm1vbnRoLlxyXG5cdFx0XHRcdHJlcGxhY2UoL21vbnRoSGVhZGVyLywgJ21vbnRoSGVhZGVyOnl5eXnlubQgTU0nKX0pLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYzvkuIrmnIgnLCBwcmV2U3RhdHVzOiAn6aGv56S65LiK5pyIJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAn6aGv56S65LiK5LiA5bm0JyxcclxuXHRcdG5leHRUZXh0OiAn5LiL5pyIJiN4M2U7JywgbmV4dFN0YXR1czogJ+mhr+ekuuS4i+aciCcsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ+mhr+ekuuS4i+S4gOW5tCcsXHJcblx0XHRjdXJyZW50VGV4dDogJ+S7iuWkqScsIGN1cnJlbnRTdGF0dXM6ICfpoa/npLrmnKzmnIgnLFxyXG5cdFx0dG9kYXlUZXh0OiAn5LuK5aSpJywgdG9kYXlTdGF0dXM6ICfpoa/npLrmnKzmnIgnLFxyXG5cdFx0Y2xlYXJUZXh0OiAn5riF6ZmkJywgY2xlYXJTdGF0dXM6ICfmuIXpmaTlt7Lpgbjml6XmnJ8nLFxyXG5cdFx0Y2xvc2VUZXh0OiAn6Zec6ZaJJywgY2xvc2VTdGF0dXM6ICfkuI3mlLnorornm67liY3nmoTpgbjmk4cnLFxyXG5cdFx0eWVhclN0YXR1czogJ+mBuOaTh+W5tOS7vScsIG1vbnRoU3RhdHVzOiAn6YG45pOH5pyI5Lu9JyxcclxuXHRcdHdlZWtUZXh0OiAn5ZGoJywgd2Vla1N0YXR1czogJ+W5tOWFp+WRqOasoScsXHJcblx0XHRkYXlTdGF0dXM6ICfpgbjmk4cgbeaciCBk5pelLCBERCcsIGRlZmF1bHRTdGF0dXM6ICfoq4vpgbjmk4fml6XmnJ8nLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3poLUhLJ10pO1xyXG59KShqUXVlcnkpO1xyXG7vu78vKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFRyYWRpdGlvbmFsIENoaW5lc2UgbG9jYWxpc2F0aW9uIGZvciBjYWxlbmRhcnMgZGF0ZXBpY2tlciBmb3IgalF1ZXJ5LlxyXG4gICBXcml0dGVuIGJ5IFJlc3NvbCAocmVzc29sQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWyd6aC1UVyddID0ge1xyXG5cdFx0cmVuZGVyZXI6ICQuZXh0ZW5kKHt9LCAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0UmVuZGVyZXIsXHJcblx0XHRcdHttb250aDogJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdFJlbmRlcmVyLm1vbnRoLlxyXG5cdFx0XHRcdHJlcGxhY2UoL21vbnRoSGVhZGVyLywgJ21vbnRoSGVhZGVyOk1NIHl5eXnlubQnKX0pLFxyXG5cdFx0cHJldlRleHQ6ICcmI3gzYzvkuIrmnIgnLCBwcmV2U3RhdHVzOiAn6aGv56S65LiK5pyIJyxcclxuXHRcdHByZXZKdW1wVGV4dDogJyYjeDNjOyYjeDNjOycsIHByZXZKdW1wU3RhdHVzOiAn6aGv56S65LiK5LiA5bm0JyxcclxuXHRcdG5leHRUZXh0OiAn5LiL5pyIJiN4M2U7JywgbmV4dFN0YXR1czogJ+mhr+ekuuS4i+aciCcsXHJcblx0XHRuZXh0SnVtcFRleHQ6ICcmI3gzZTsmI3gzZTsnLCBuZXh0SnVtcFN0YXR1czogJ+mhr+ekuuS4i+S4gOW5tCcsXHJcblx0XHRjdXJyZW50VGV4dDogJ+S7iuWkqScsIGN1cnJlbnRTdGF0dXM6ICfpoa/npLrmnKzmnIgnLFxyXG5cdFx0dG9kYXlUZXh0OiAn5LuK5aSpJywgdG9kYXlTdGF0dXM6ICfpoa/npLrmnKzmnIgnLFxyXG5cdFx0Y2xlYXJUZXh0OiAn5riF6ZmkJywgY2xlYXJTdGF0dXM6ICfmuIXpmaTlt7Lpgbjml6XmnJ8nLFxyXG5cdFx0Y2xvc2VUZXh0OiAn6Zec6ZaJJywgY2xvc2VTdGF0dXM6ICfkuI3mlLnorornm67liY3nmoTpgbjmk4cnLFxyXG5cdFx0eWVhclN0YXR1czogJ+mBuOaTh+W5tOS7vScsIG1vbnRoU3RhdHVzOiAn6YG45pOH5pyI5Lu9JyxcclxuXHRcdHdlZWtUZXh0OiAn5ZGoJywgd2Vla1N0YXR1czogJ+W5tOWFp+WRqOasoScsXHJcblx0XHRkYXlTdGF0dXM6ICfpgbjmk4cgbeaciCBk5pelLCBERCcsIGRlZmF1bHRTdGF0dXM6ICfoq4vpgbjmk4fml6XmnJ8nLFxyXG5cdFx0aXNSVEw6IGZhbHNlXHJcblx0fTtcclxuXHQkLmNhbGVuZGFyc1BpY2tlci5zZXREZWZhdWx0cygkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJ3poLVRXJ10pO1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.plus.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.plus.js index 10d55285e40..92eece1b056 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.plus.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.plus.js @@ -432,4 +432,4 @@ })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGx1cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgQ2FsZW5kYXJzIGV4dHJhcyBmb3IgalF1ZXJ5IHYyLjAuMS5cbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgQXVndXN0IDIwMDkuXG4gICBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCAoaHR0cDovL2tlaXRoLXdvb2QubmFtZS9saWNlbmNlLmh0bWwpIGxpY2Vuc2UuIFxuICAgUGxlYXNlIGF0dHJpYnV0ZSB0aGUgYXV0aG9yIGlmIHlvdSB1c2UgaXQuICovXG5cbihmdW5jdGlvbigkKSB7IC8vIEhpZGUgc2NvcGUsIG5vICQgY29uZmxpY3RcblxuXHQkLmV4dGVuZCgkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLCB7XG5cdFx0aW52YWxpZEFyZ3VtZW50czogJ0ludmFsaWQgYXJndW1lbnRzJyxcblx0XHRpbnZhbGlkRm9ybWF0OiAnQ2Fubm90IGZvcm1hdCBhIGRhdGUgZnJvbSBhbm90aGVyIGNhbGVuZGFyJyxcblx0XHRtaXNzaW5nTnVtYmVyQXQ6ICdNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiB7MH0nLFxuXHRcdHVua25vd25OYW1lQXQ6ICdVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gezB9Jyxcblx0XHR1bmV4cGVjdGVkTGl0ZXJhbEF0OiAnVW5leHBlY3RlZCBsaXRlcmFsIGF0IHBvc2l0aW9uIHswfScsXG5cdFx0dW5leHBlY3RlZFRleHQ6ICdBZGRpdGlvbmFsIHRleHQgZm91bmQgYXQgZW5kJ1xuXHR9KTtcblx0JC5jYWxlbmRhcnMubG9jYWwgPSAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddO1xuXG5cdCQuZXh0ZW5kKCQuY2FsZW5kYXJzLmNkYXRlLnByb3RvdHlwZSwge1xuXG5cdFx0LyoqIEZvcm1hdCB0aGlzIGRhdGUuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQ0RhdGVcblx0XHRcdEBwYXJhbSBbZm9ybWF0XSB7c3RyaW5nfSBUaGUgZGF0ZSBmb3JtYXQgdG8gdXNlIChzZWUgPGEgaHJlZj1cIkJhc2VDYWxlbmRhci5odG1sI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4pLlxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGRhdGUuICovXG5cdFx0Zm9ybWF0RGF0ZTogZnVuY3Rpb24oZm9ybWF0KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZm9ybWF0RGF0ZShmb3JtYXQgfHwgJycsIHRoaXMpO1xuXHRcdH1cblx0fSk7XG5cblx0JC5leHRlbmQoJC5jYWxlbmRhcnMuYmFzZUNhbGVuZGFyLnByb3RvdHlwZSwge1xuXG5cdFx0VU5JWF9FUE9DSDogJC5jYWxlbmRhcnMuaW5zdGFuY2UoKS5uZXdEYXRlKDE5NzAsIDEsIDEpLnRvSkQoKSxcblx0XHRTRUNTX1BFUl9EQVk6IDI0ICogNjAgKiA2MCxcblx0XHRUSUNLU19FUE9DSDogJC5jYWxlbmRhcnMuaW5zdGFuY2UoKS5qZEVwb2NoLCAvLyAxIEphbnVhcnkgMDAwMSBDRVxuXHRcdFRJQ0tTX1BFUl9EQVk6IDI0ICogNjAgKiA2MCAqIDEwMDAwMDAwLFxuXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgQVRPTSAoUkZDIDMzMzkvSVNPIDg2MDEpLlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xuXHRcdEFUT006ICd5eXl5LW1tLWRkJyxcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBjb29raWVzLlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xuXHRcdENPT0tJRTogJ0QsIGRkIE0geXl5eScsXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgZnVsbCBkYXRlLlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xuXHRcdEZVTEw6ICdERCwgTU0gZCwgeXl5eScsXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgSVNPIDg2MDEuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXG5cdFx0SVNPXzg2MDE6ICd5eXl5LW1tLWRkJyxcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBKdWxpYW4gZGF0ZS5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXIgKi9cblx0XHRKVUxJQU46ICdKJyxcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBSRkMgODIyLlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xuXHRcdFJGQ184MjI6ICdELCBkIE0geXknLFxuXHRcdC8qKiBEYXRlIGZvcm0gZm9yIFJGQyA4NTAuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXG5cdFx0UkZDXzg1MDogJ0RELCBkZC1NLXl5Jyxcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBSRkMgMTAzNi5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXIgKi9cblx0XHRSRkNfMTAzNjogJ0QsIGQgTSB5eScsXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgUkZDIDExMjMuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXG5cdFx0UkZDXzExMjM6ICdELCBkIE0geXl5eScsXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgUkZDIDI4MjIuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXG5cdFx0UkZDXzI4MjI6ICdELCBkIE0geXl5eScsXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgUlNTIChSRkMgODIyKS5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXIgKi9cblx0XHRSU1M6ICdELCBkIE0geXknLFxuXHRcdC8qKiBEYXRlIGZvcm0gZm9yIFdpbmRvd3MgdGlja3MuXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXG5cdFx0VElDS1M6ICchJyxcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBVbml4IHRpbWVzdGFtcC5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXIgKi9cblx0XHRUSU1FU1RBTVA6ICdAJyxcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBXM2MgKElTTyA4NjAxKS5cblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXIgKi9cblx0XHRXM0M6ICd5eXl5LW1tLWRkJyxcblxuXHRcdC8qKiBGb3JtYXQgYSBkYXRlIG9iamVjdCBpbnRvIGEgc3RyaW5nIHZhbHVlLlxuXHRcdFx0VGhlIGZvcm1hdCBjYW4gYmUgY29tYmluYXRpb25zIG9mIHRoZSBmb2xsb3dpbmc6XG5cdFx0XHQ8dWw+XG5cdFx0XHQ8bGk+ZCAgLSBkYXkgb2YgbW9udGggKG5vIGxlYWRpbmcgemVybyk8L2xpPlxuXHRcdFx0PGxpPmRkIC0gZGF5IG9mIG1vbnRoICh0d28gZGlnaXQpPC9saT5cblx0XHRcdDxsaT5vICAtIGRheSBvZiB5ZWFyIChubyBsZWFkaW5nIHplcm9zKTwvbGk+XG5cdFx0XHQ8bGk+b28gLSBkYXkgb2YgeWVhciAodGhyZWUgZGlnaXQpPC9saT5cblx0XHRcdDxsaT5EICAtIGRheSBuYW1lIHNob3J0PC9saT5cblx0XHRcdDxsaT5ERCAtIGRheSBuYW1lIGxvbmc8L2xpPlxuXHRcdFx0PGxpPncgIC0gd2VlayBvZiB5ZWFyIChubyBsZWFkaW5nIHplcm8pPC9saT5cblx0XHRcdDxsaT53dyAtIHdlZWsgb2YgeWVhciAodHdvIGRpZ2l0KTwvbGk+XG5cdFx0XHQ8bGk+bSAgLSBtb250aCBvZiB5ZWFyIChubyBsZWFkaW5nIHplcm8pPC9saT5cblx0XHRcdDxsaT5tbSAtIG1vbnRoIG9mIHllYXIgKHR3byBkaWdpdCk8L2xpPlxuXHRcdFx0PGxpPk0gIC0gbW9udGggbmFtZSBzaG9ydDwvbGk+XG5cdFx0XHQ8bGk+TU0gLSBtb250aCBuYW1lIGxvbmc8L2xpPlxuXHRcdFx0PGxpPnl5IC0geWVhciAodHdvIGRpZ2l0KTwvbGk+XG5cdFx0XHQ8bGk+eXl5eSAtIHllYXIgKGZvdXIgZGlnaXQpPC9saT5cblx0XHRcdDxsaT5ZWVlZIC0gZm9ybWF0dGVkIHllYXI8L2xpPlxuXHRcdFx0PGxpPkogIC0gSnVsaWFuIGRhdGUgKGRheXMgc2luY2UgSmFudWFyeSAxLCA0NzEzIEJDRSBHcmVlbndpY2ggbm9vbik8L2xpPlxuXHRcdFx0PGxpPkAgIC0gVW5peCB0aW1lc3RhbXAgKHMgc2luY2UgMDEvMDEvMTk3MCk8L2xpPlxuXHRcdFx0PGxpPiEgIC0gV2luZG93cyB0aWNrcyAoMTAwbnMgc2luY2UgMDEvMDEvMDAwMSk8L2xpPlxuXHRcdFx0PGxpPicuLi4nIC0gbGl0ZXJhbCB0ZXh0PC9saT5cblx0XHRcdDxsaT4nJyAtIHNpbmdsZSBxdW90ZTwvbGk+XG5cdFx0XHQ8L3VsPlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxuXHRcdFx0QHBhcmFtIFtmb3JtYXRdIHtzdHJpbmd9IFRoZSBkZXNpcmVkIGZvcm1hdCBvZiB0aGUgZGF0ZSAoZGVmYXVsdHMgdG8gY2FsZW5kYXIgZm9ybWF0KS5cblx0XHRcdEBwYXJhbSBkYXRlIHtDRGF0ZX0gVGhlIGRhdGUgdmFsdWUgdG8gZm9ybWF0LlxuXHRcdFx0QHBhcmFtIFtzZXR0aW5nc10ge29iamVjdH0gQWRkaXRpb24gb3B0aW9ucywgd2hvc2UgYXR0cmlidXRlcyBpbmNsdWRlOlxuXHRcdFx0QHByb3BlcnR5IFtkYXlOYW1lc1Nob3J0XSB7c3RyaW5nW119IEFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5LlxuXHRcdFx0QHByb3BlcnR5IFtkYXlOYW1lc10ge3N0cmluZ1tdfSBOYW1lcyBvZiB0aGUgZGF5cyBmcm9tIFN1bmRheS5cblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhOYW1lc1Nob3J0XSB7c3RyaW5nW119IEFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBtb250aHMuXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoTmFtZXNdIHtzdHJpbmdbXX0gTmFtZXMgb2YgdGhlIG1vbnRocy5cblx0XHRcdEBwcm9wZXJ0eSBbY2FsY3VsYXRlV2Vla10ge0NhbGVuZGFyc1BpY2tlckNhbGN1bGF0ZVdlZWt9IEZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3ZWVrIG9mIHRoZSB5ZWFyLlxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgZGF0ZSBpbiB0aGUgYWJvdmUgZm9ybWF0LlxuXHRcdFx0QHRocm93cyBFcnJvcnMgaWYgdGhlIGRhdGUgaXMgZnJvbSBhIGRpZmZlcmVudCBjYWxlbmRhci4gKi9cblx0XHRmb3JtYXREYXRlOiBmdW5jdGlvbihmb3JtYXQsIGRhdGUsIHNldHRpbmdzKSB7XG5cdFx0XHRpZiAodHlwZW9mIGZvcm1hdCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0c2V0dGluZ3MgPSBkYXRlO1xuXHRcdFx0XHRkYXRlID0gZm9ybWF0O1xuXHRcdFx0XHRmb3JtYXQgPSAnJztcblx0XHRcdH1cblx0XHRcdGlmICghZGF0ZSkge1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZGF0ZS5jYWxlbmRhcigpICE9PSB0aGlzKSB7XG5cdFx0XHRcdHRocm93ICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRGb3JtYXQgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRm9ybWF0O1xuXHRcdFx0fVxuXHRcdFx0Zm9ybWF0ID0gZm9ybWF0IHx8IHRoaXMubG9jYWwuZGF0ZUZvcm1hdDtcblx0XHRcdHNldHRpbmdzID0gc2V0dGluZ3MgfHwge307XG5cdFx0XHR2YXIgZGF5TmFtZXNTaG9ydCA9IHNldHRpbmdzLmRheU5hbWVzU2hvcnQgfHwgdGhpcy5sb2NhbC5kYXlOYW1lc1Nob3J0O1xuXHRcdFx0dmFyIGRheU5hbWVzID0gc2V0dGluZ3MuZGF5TmFtZXMgfHwgdGhpcy5sb2NhbC5kYXlOYW1lcztcblx0XHRcdHZhciBtb250aE5hbWVzU2hvcnQgPSBzZXR0aW5ncy5tb250aE5hbWVzU2hvcnQgfHwgdGhpcy5sb2NhbC5tb250aE5hbWVzU2hvcnQ7XG5cdFx0XHR2YXIgbW9udGhOYW1lcyA9IHNldHRpbmdzLm1vbnRoTmFtZXMgfHwgdGhpcy5sb2NhbC5tb250aE5hbWVzO1xuXHRcdFx0dmFyIGNhbGN1bGF0ZVdlZWsgPSBzZXR0aW5ncy5jYWxjdWxhdGVXZWVrIHx8IHRoaXMubG9jYWwuY2FsY3VsYXRlV2Vlaztcblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgYSBmb3JtYXQgY2hhcmFjdGVyIGlzIGRvdWJsZWRcblx0XHRcdHZhciBkb3VibGVkID0gZnVuY3Rpb24obWF0Y2gsIHN0ZXApIHtcblx0XHRcdFx0dmFyIG1hdGNoZXMgPSAxO1xuXHRcdFx0XHR3aGlsZSAoaUZvcm1hdCArIG1hdGNoZXMgPCBmb3JtYXQubGVuZ3RoICYmIGZvcm1hdC5jaGFyQXQoaUZvcm1hdCArIG1hdGNoZXMpID09PSBtYXRjaCkge1xuXHRcdFx0XHRcdG1hdGNoZXMrKztcblx0XHRcdFx0fVxuXHRcdFx0XHRpRm9ybWF0ICs9IG1hdGNoZXMgLSAxO1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5mbG9vcihtYXRjaGVzIC8gKHN0ZXAgfHwgMSkpID4gMTtcblx0XHRcdH07XG5cdFx0XHQvLyBGb3JtYXQgYSBudW1iZXIsIHdpdGggbGVhZGluZyB6ZXJvZXMgaWYgbmVjZXNzYXJ5XG5cdFx0XHR2YXIgZm9ybWF0TnVtYmVyID0gZnVuY3Rpb24obWF0Y2gsIHZhbHVlLCBsZW4sIHN0ZXApIHtcblx0XHRcdFx0dmFyIG51bSA9ICcnICsgdmFsdWU7XG5cdFx0XHRcdGlmIChkb3VibGVkKG1hdGNoLCBzdGVwKSkge1xuXHRcdFx0XHRcdHdoaWxlIChudW0ubGVuZ3RoIDwgbGVuKSB7XG5cdFx0XHRcdFx0XHRudW0gPSAnMCcgKyBudW07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBudW07XG5cdFx0XHR9O1xuXHRcdFx0Ly8gRm9ybWF0IGEgbmFtZSwgc2hvcnQgb3IgbG9uZyBhcyByZXF1ZXN0ZWRcblx0XHRcdHZhciBmb3JtYXROYW1lID0gZnVuY3Rpb24obWF0Y2gsIHZhbHVlLCBzaG9ydE5hbWVzLCBsb25nTmFtZXMpIHtcblx0XHRcdFx0cmV0dXJuIChkb3VibGVkKG1hdGNoKSA/IGxvbmdOYW1lc1t2YWx1ZV0gOiBzaG9ydE5hbWVzW3ZhbHVlXSk7XG5cdFx0XHR9O1xuXHRcdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdFx0dmFyIGxpdGVyYWwgPSBmYWxzZTtcblx0XHRcdGZvciAodmFyIGlGb3JtYXQgPSAwOyBpRm9ybWF0IDwgZm9ybWF0Lmxlbmd0aDsgaUZvcm1hdCsrKSB7XG5cdFx0XHRcdGlmIChsaXRlcmFsKSB7XG5cdFx0XHRcdFx0aWYgKGZvcm1hdC5jaGFyQXQoaUZvcm1hdCkgPT09IFwiJ1wiICYmICFkb3VibGVkKFwiJ1wiKSkge1xuXHRcdFx0XHRcdFx0bGl0ZXJhbCA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdG91dHB1dCArPSBmb3JtYXQuY2hhckF0KGlGb3JtYXQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGZvcm1hdC5jaGFyQXQoaUZvcm1hdCkpIHtcblx0XHRcdFx0XHRcdGNhc2UgJ2QnOiBvdXRwdXQgKz0gZm9ybWF0TnVtYmVyKCdkJywgZGF0ZS5kYXkoKSwgMik7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnRCc6IG91dHB1dCArPSBmb3JtYXROYW1lKCdEJywgZGF0ZS5kYXlPZldlZWsoKSxcblx0XHRcdFx0XHRcdFx0ZGF5TmFtZXNTaG9ydCwgZGF5TmFtZXMpOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ28nOiBvdXRwdXQgKz0gZm9ybWF0TnVtYmVyKCdvJywgZGF0ZS5kYXlPZlllYXIoKSwgMyk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAndyc6IG91dHB1dCArPSBmb3JtYXROdW1iZXIoJ3cnLCBkYXRlLndlZWtPZlllYXIoKSwgMik7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnbSc6IG91dHB1dCArPSBmb3JtYXROdW1iZXIoJ20nLCBkYXRlLm1vbnRoKCksIDIpOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ00nOiBvdXRwdXQgKz0gZm9ybWF0TmFtZSgnTScsIGRhdGUubW9udGgoKSAtIHRoaXMubWluTW9udGgsXG5cdFx0XHRcdFx0XHRcdG1vbnRoTmFtZXNTaG9ydCwgbW9udGhOYW1lcyk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAneSc6XG5cdFx0XHRcdFx0XHRcdG91dHB1dCArPSAoZG91YmxlZCgneScsIDIpID8gZGF0ZS55ZWFyKCkgOlxuXHRcdFx0XHRcdFx0XHRcdChkYXRlLnllYXIoKSAlIDEwMCA8IDEwID8gJzAnIDogJycpICsgZGF0ZS55ZWFyKCkgJSAxMDApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ1knOlxuXHRcdFx0XHRcdFx0XHRkb3VibGVkKCdZJywgMik7XG5cdFx0XHRcdFx0XHRcdG91dHB1dCArPSBkYXRlLmZvcm1hdFllYXIoKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdKJzogb3V0cHV0ICs9IGRhdGUudG9KRCgpOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0AnOiBvdXRwdXQgKz0gKGRhdGUudG9KRCgpIC0gdGhpcy5VTklYX0VQT0NIKSAqIHRoaXMuU0VDU19QRVJfREFZOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJyEnOiBvdXRwdXQgKz0gKGRhdGUudG9KRCgpIC0gdGhpcy5USUNLU19FUE9DSCkgKiB0aGlzLlRJQ0tTX1BFUl9EQVk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIidcIjpcblx0XHRcdFx0XHRcdFx0aWYgKGRvdWJsZWQoXCInXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IFwiJ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGxpdGVyYWwgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IGZvcm1hdC5jaGFyQXQoaUZvcm1hdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0sXG5cblx0XHQvKiogUGFyc2UgYSBzdHJpbmcgdmFsdWUgaW50byBhIGRhdGUgb2JqZWN0LlxuXHRcdFx0U2VlIDxhIGhyZWY9XCIjZm9ybWF0RGF0ZVwiPjxjb2RlPmZvcm1hdERhdGU8L2NvZGU+PC9hPiBmb3IgdGhlIHBvc3NpYmxlIGZvcm1hdHMsIHBsdXM6XG5cdFx0XHQ8dWw+XG5cdFx0XHQ8bGk+KiAtIGlnbm9yZSByZXN0IG9mIHN0cmluZzwvbGk+XG5cdFx0XHQ8L3VsPlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxuXHRcdFx0QHBhcmFtIGZvcm1hdCB7c3RyaW5nfSBUaGUgZXhwZWN0ZWQgZm9ybWF0IG9mIHRoZSBkYXRlICgnJyBmb3IgZGVmYXVsdCBjYWxlbmRhciBmb3JtYXQpLlxuXHRcdFx0QHBhcmFtIHZhbHVlIHtzdHJpbmd9IFRoZSBkYXRlIGluIHRoZSBhYm92ZSBmb3JtYXQuXG5cdFx0XHRAcGFyYW0gW3NldHRpbmdzXSB7b2JqZWN0fSBBZGRpdGlvbmFsIG9wdGlvbnMgd2hvc2UgYXR0cmlidXRlcyBpbmNsdWRlOlxuXHRcdFx0QHByb3BlcnR5IFtzaG9ydFllYXJDdXRvZmZdIHtudW1iZXJ9IFRoZSBjdXRvZmYgeWVhciBmb3IgZGV0ZXJtaW5pbmcgdGhlIGNlbnR1cnkuXG5cdFx0XHRAcHJvcGVydHkgW2RheU5hbWVzU2hvcnRdIHtzdHJpbmdbXX0gQWJicmV2aWF0ZWQgbmFtZXMgb2YgdGhlIGRheXMgZnJvbSBTdW5kYXkuXG5cdFx0XHRAcHJvcGVydHkgW2RheU5hbWVzXSB7c3RyaW5nW119IE5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5LlxuXHRcdFx0QHByb3BlcnR5IFttb250aE5hbWVzU2hvcnRdIHtzdHJpbmdbXX0gQWJicmV2aWF0ZWQgbmFtZXMgb2YgdGhlIG1vbnRocy5cblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhOYW1lc10ge3N0cmluZ1tdfSBOYW1lcyBvZiB0aGUgbW9udGhzLlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBleHRyYWN0ZWQgZGF0ZSB2YWx1ZSBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiB2YWx1ZSBpcyBibGFuay5cblx0XHRcdEB0aHJvd3MgRXJyb3JzIGlmIHRoZSBmb3JtYXQgYW5kL29yIHZhbHVlIGFyZSBtaXNzaW5nLFxuXHRcdFx0XHRcdGlmIHRoZSB2YWx1ZSBkb2Vzbid0IG1hdGNoIHRoZSBmb3JtYXQsIG9yIGlmIHRoZSBkYXRlIGlzIGludmFsaWQuICovXG5cdFx0cGFyc2VEYXRlOiBmdW5jdGlvbihmb3JtYXQsIHZhbHVlLCBzZXR0aW5ncykge1xuXHRcdFx0aWYgKHZhbHVlID09IG51bGwpIHtcblx0XHRcdFx0dGhyb3cgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZEFyZ3VtZW50cyB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRBcmd1bWVudHM7XG5cdFx0XHR9XG5cdFx0XHR2YWx1ZSA9ICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdmFsdWUudG9TdHJpbmcoKSA6IHZhbHVlICsgJycpO1xuXHRcdFx0aWYgKHZhbHVlID09PSAnJykge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdGZvcm1hdCA9IGZvcm1hdCB8fCB0aGlzLmxvY2FsLmRhdGVGb3JtYXQ7XG5cdFx0XHRzZXR0aW5ncyA9IHNldHRpbmdzIHx8IHt9O1xuXHRcdFx0dmFyIHNob3J0WWVhckN1dG9mZiA9IHNldHRpbmdzLnNob3J0WWVhckN1dG9mZiB8fCB0aGlzLnNob3J0WWVhckN1dG9mZjtcblx0XHRcdHNob3J0WWVhckN1dG9mZiA9ICh0eXBlb2Ygc2hvcnRZZWFyQ3V0b2ZmICE9PSAnc3RyaW5nJyA/IHNob3J0WWVhckN1dG9mZiA6XG5cdFx0XHRcdHRoaXMudG9kYXkoKS55ZWFyKCkgJSAxMDAgKyBwYXJzZUludChzaG9ydFllYXJDdXRvZmYsIDEwKSk7XG5cdFx0XHR2YXIgZGF5TmFtZXNTaG9ydCA9IHNldHRpbmdzLmRheU5hbWVzU2hvcnQgfHwgdGhpcy5sb2NhbC5kYXlOYW1lc1Nob3J0O1xuXHRcdFx0dmFyIGRheU5hbWVzID0gc2V0dGluZ3MuZGF5TmFtZXMgfHwgdGhpcy5sb2NhbC5kYXlOYW1lcztcblx0XHRcdHZhciBtb250aE5hbWVzU2hvcnQgPSBzZXR0aW5ncy5tb250aE5hbWVzU2hvcnQgfHwgdGhpcy5sb2NhbC5tb250aE5hbWVzU2hvcnQ7XG5cdFx0XHR2YXIgbW9udGhOYW1lcyA9IHNldHRpbmdzLm1vbnRoTmFtZXMgfHwgdGhpcy5sb2NhbC5tb250aE5hbWVzO1xuXHRcdFx0dmFyIGpkID0gLTE7XG5cdFx0XHR2YXIgeWVhciA9IC0xO1xuXHRcdFx0dmFyIG1vbnRoID0gLTE7XG5cdFx0XHR2YXIgZGF5ID0gLTE7XG5cdFx0XHR2YXIgZG95ID0gLTE7XG5cdFx0XHR2YXIgc2hvcnRZZWFyID0gZmFsc2U7XG5cdFx0XHR2YXIgbGl0ZXJhbCA9IGZhbHNlO1xuXHRcdFx0Ly8gQ2hlY2sgd2hldGhlciBhIGZvcm1hdCBjaGFyYWN0ZXIgaXMgZG91YmxlZFxuXHRcdFx0dmFyIGRvdWJsZWQgPSBmdW5jdGlvbihtYXRjaCwgc3RlcCkge1xuXHRcdFx0XHR2YXIgbWF0Y2hlcyA9IDE7XG5cdFx0XHRcdHdoaWxlIChpRm9ybWF0ICsgbWF0Y2hlcyA8IGZvcm1hdC5sZW5ndGggJiYgZm9ybWF0LmNoYXJBdChpRm9ybWF0ICsgbWF0Y2hlcykgPT09IG1hdGNoKSB7XG5cdFx0XHRcdFx0bWF0Y2hlcysrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlGb3JtYXQgKz0gbWF0Y2hlcyAtIDE7XG5cdFx0XHRcdHJldHVybiBNYXRoLmZsb29yKG1hdGNoZXMgLyAoc3RlcCB8fCAxKSkgPiAxO1xuXHRcdFx0fTtcblx0XHRcdC8vIEV4dHJhY3QgYSBudW1iZXIgZnJvbSB0aGUgc3RyaW5nIHZhbHVlXG5cdFx0XHR2YXIgZ2V0TnVtYmVyID0gZnVuY3Rpb24obWF0Y2gsIHN0ZXApIHtcblx0XHRcdFx0dmFyIGlzRG91YmxlZCA9IGRvdWJsZWQobWF0Y2gsIHN0ZXApO1xuXHRcdFx0XHR2YXIgc2l6ZSA9IFsyLCAzLCBpc0RvdWJsZWQgPyA0IDogMiwgaXNEb3VibGVkID8gNCA6IDIsIDEwLCAxMSwgMjBdWydveVlKQCEnLmluZGV4T2YobWF0Y2gpICsgMV07XG5cdFx0XHRcdHZhciBkaWdpdHMgPSBuZXcgUmVnRXhwKCdeLT9cXFxcZHsxLCcgKyBzaXplICsgJ30nKTtcblx0XHRcdFx0dmFyIG51bSA9IHZhbHVlLnN1YnN0cmluZyhpVmFsdWUpLm1hdGNoKGRpZ2l0cyk7XG5cdFx0XHRcdGlmICghbnVtKSB7XG5cdFx0XHRcdFx0dGhyb3cgKCQuY2FsZW5kYXJzLmxvY2FsLm1pc3NpbmdOdW1iZXJBdCB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLm1pc3NpbmdOdW1iZXJBdCkuXG5cdFx0XHRcdFx0XHRyZXBsYWNlKC9cXHswXFx9LywgaVZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpVmFsdWUgKz0gbnVtWzBdLmxlbmd0aDtcblx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KG51bVswXSwgMTApO1xuXHRcdFx0fTtcblx0XHRcdC8vIEV4dHJhY3QgYSBuYW1lIGZyb20gdGhlIHN0cmluZyB2YWx1ZSBhbmQgY29udmVydCB0byBhbiBpbmRleFxuXHRcdFx0dmFyIGNhbGVuZGFyID0gdGhpcztcblx0XHRcdHZhciBnZXROYW1lID0gZnVuY3Rpb24obWF0Y2gsIHNob3J0TmFtZXMsIGxvbmdOYW1lcywgc3RlcCkge1xuXHRcdFx0XHR2YXIgbmFtZXMgPSAoZG91YmxlZChtYXRjaCwgc3RlcCkgPyBsb25nTmFtZXMgOiBzaG9ydE5hbWVzKTtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmICh2YWx1ZS5zdWJzdHIoaVZhbHVlLCBuYW1lc1tpXS5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IG5hbWVzW2ldLnRvTG93ZXJDYXNlKCkpIHtcblx0XHRcdFx0XHRcdGlWYWx1ZSArPSBuYW1lc1tpXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaSArIGNhbGVuZGFyLm1pbk1vbnRoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR0aHJvdyAoJC5jYWxlbmRhcnMubG9jYWwudW5rbm93bk5hbWVBdCB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLnVua25vd25OYW1lQXQpLlxuXHRcdFx0XHRcdHJlcGxhY2UoL1xcezBcXH0vLCBpVmFsdWUpO1xuXHRcdFx0fTtcblx0XHRcdC8vIENvbmZpcm0gdGhhdCBhIGxpdGVyYWwgY2hhcmFjdGVyIG1hdGNoZXMgdGhlIHN0cmluZyB2YWx1ZVxuXHRcdFx0dmFyIGNoZWNrTGl0ZXJhbCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAodmFsdWUuY2hhckF0KGlWYWx1ZSkgIT09IGZvcm1hdC5jaGFyQXQoaUZvcm1hdCkpIHtcblx0XHRcdFx0XHR0aHJvdyAoJC5jYWxlbmRhcnMubG9jYWwudW5leHBlY3RlZExpdGVyYWxBdCB8fFxuXHRcdFx0XHRcdFx0JC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS51bmV4cGVjdGVkTGl0ZXJhbEF0KS5yZXBsYWNlKC9cXHswXFx9LywgaVZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpVmFsdWUrKztcblx0XHRcdH07XG5cdFx0XHR2YXIgaVZhbHVlID0gMDtcblx0XHRcdGZvciAodmFyIGlGb3JtYXQgPSAwOyBpRm9ybWF0IDwgZm9ybWF0Lmxlbmd0aDsgaUZvcm1hdCsrKSB7XG5cdFx0XHRcdGlmIChsaXRlcmFsKSB7XG5cdFx0XHRcdFx0aWYgKGZvcm1hdC5jaGFyQXQoaUZvcm1hdCkgPT09IFwiJ1wiICYmICFkb3VibGVkKFwiJ1wiKSkge1xuXHRcdFx0XHRcdFx0bGl0ZXJhbCA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGNoZWNrTGl0ZXJhbCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGZvcm1hdC5jaGFyQXQoaUZvcm1hdCkpIHtcblx0XHRcdFx0XHRcdGNhc2UgJ2QnOiBkYXkgPSBnZXROdW1iZXIoJ2QnKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdEJzogZ2V0TmFtZSgnRCcsIGRheU5hbWVzU2hvcnQsIGRheU5hbWVzKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdvJzogZG95ID0gZ2V0TnVtYmVyKCdvJyk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAndyc6IGdldE51bWJlcigndycpOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ20nOiBtb250aCA9IGdldE51bWJlcignbScpOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ00nOiBtb250aCA9IGdldE5hbWUoJ00nLCBtb250aE5hbWVzU2hvcnQsIG1vbnRoTmFtZXMpOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ3knOlxuXHRcdFx0XHRcdFx0XHR2YXIgaVNhdmUgPSBpRm9ybWF0O1xuXHRcdFx0XHRcdFx0XHRzaG9ydFllYXIgPSAhZG91YmxlZCgneScsIDIpO1xuXHRcdFx0XHRcdFx0XHRpRm9ybWF0ID0gaVNhdmU7XG5cdFx0XHRcdFx0XHRcdHllYXIgPSBnZXROdW1iZXIoJ3knLCAyKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdZJzogeWVhciA9IGdldE51bWJlcignWScsIDIpOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0onOlxuXHRcdFx0XHRcdFx0XHRqZCA9IGdldE51bWJlcignSicpICsgMC41O1xuXHRcdFx0XHRcdFx0XHRpZiAodmFsdWUuY2hhckF0KGlWYWx1ZSkgPT09ICcuJykge1xuXHRcdFx0XHRcdFx0XHRcdGlWYWx1ZSsrO1xuXHRcdFx0XHRcdFx0XHRcdGdldE51bWJlcignSicpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnQCc6IGpkID0gZ2V0TnVtYmVyKCdAJykgLyB0aGlzLlNFQ1NfUEVSX0RBWSArIHRoaXMuVU5JWF9FUE9DSDsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICchJzogamQgPSBnZXROdW1iZXIoJyEnKSAvIHRoaXMuVElDS1NfUEVSX0RBWSArIHRoaXMuVElDS1NfRVBPQ0g7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnKic6IGlWYWx1ZSA9IHZhbHVlLmxlbmd0aDsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiJ1wiOlxuXHRcdFx0XHRcdFx0XHRpZiAoZG91YmxlZChcIidcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRjaGVja0xpdGVyYWwoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRsaXRlcmFsID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGRlZmF1bHQ6IGNoZWNrTGl0ZXJhbCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGlWYWx1ZSA8IHZhbHVlLmxlbmd0aCkge1xuXHRcdFx0XHR0aHJvdyAkLmNhbGVuZGFycy5sb2NhbC51bmV4cGVjdGVkVGV4dCB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLnVuZXhwZWN0ZWRUZXh0O1xuXHRcdFx0fVxuXHRcdFx0aWYgKHllYXIgPT09IC0xKSB7XG5cdFx0XHRcdHllYXIgPSB0aGlzLnRvZGF5KCkueWVhcigpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoeWVhciA8IDEwMCAmJiBzaG9ydFllYXIpIHtcblx0XHRcdFx0eWVhciArPSAoc2hvcnRZZWFyQ3V0b2ZmID09PSAtMSA/IDE5MDAgOiB0aGlzLnRvZGF5KCkueWVhcigpIC1cblx0XHRcdFx0XHR0aGlzLnRvZGF5KCkueWVhcigpICUgMTAwIC0gKHllYXIgPD0gc2hvcnRZZWFyQ3V0b2ZmID8gMCA6IDEwMCkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGRveSA+IC0xKSB7XG5cdFx0XHRcdG1vbnRoID0gMTtcblx0XHRcdFx0ZGF5ID0gZG95O1xuXHRcdFx0XHRmb3IgKHZhciBkaW0gPSB0aGlzLmRheXNJbk1vbnRoKHllYXIsIG1vbnRoKTsgZGF5ID4gZGltOyBkaW0gPSB0aGlzLmRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSkge1xuXHRcdFx0XHRcdG1vbnRoKys7XG5cdFx0XHRcdFx0ZGF5IC09IGRpbTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIChqZCA+IC0xID8gdGhpcy5mcm9tSkQoamQpIDogdGhpcy5uZXdEYXRlKHllYXIsIG1vbnRoLCBkYXkpKTtcblx0XHR9LFxuXG5cdFx0LyoqIEEgZGF0ZSBtYXkgYmUgc3BlY2lmaWVkIGFzIGFuIGV4YWN0IHZhbHVlIG9yIGEgcmVsYXRpdmUgb25lLlxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxuXHRcdFx0QHBhcmFtIGRhdGVTcGVjIHtDRGF0ZXxudW1iZXJ8c3RyaW5nfSBUaGUgZGF0ZSBhcyBhbiBvYmplY3Qgb3Igc3RyaW5nIGluIHRoZSBnaXZlbiBmb3JtYXQgb3Jcblx0XHRcdFx0XHRhbiBvZmZzZXQgLSBudW1lcmljIGRheXMgZnJvbSB0b2RheSwgb3Igc3RyaW5nIGFtb3VudHMgYW5kIHBlcmlvZHMsIGUuZy4gJysxbSArMncnLlxuXHRcdFx0QHBhcmFtIGRlZmF1bHREYXRlIHtDRGF0ZX0gVGhlIGRhdGUgdG8gdXNlIGlmIG5vIG90aGVyIHN1cHBsaWVkLCBtYXkgYmUgPGNvZGU+bnVsbDwvY29kZT4uXG5cdFx0XHRAcGFyYW0gY3VycmVudERhdGUge0NEYXRlfSBUaGUgY3VycmVudCBkYXRlIGFzIGEgcG9zc2libGUgYmFzaXMgZm9yIHJlbGF0aXZlIGRhdGVzLFxuXHRcdFx0XHRcdGlmIDxjb2RlPm51bGw8L2NvZGU+IHRvZGF5IGlzIHVzZWQgKG9wdGlvbmFsKVxuXHRcdFx0QHBhcmFtIFtkYXRlRm9ybWF0XSB7c3RyaW5nfSBUaGUgZXhwZWN0ZWQgZGF0ZSBmb3JtYXQgLSBzZWUgPGEgaHJlZj1cIiNmb3JtYXREYXRlXCI+PGNvZGU+Zm9ybWF0RGF0ZTwvY29kZT48L2E+LlxuXHRcdFx0QHBhcmFtIFtzZXR0aW5nc10ge29iamVjdH0gQWRkaXRpb25hbCBvcHRpb25zIHdob3NlIGF0dHJpYnV0ZXMgaW5jbHVkZTpcblx0XHRcdEBwcm9wZXJ0eSBbc2hvcnRZZWFyQ3V0b2ZmXSB7bnVtYmVyfSBUaGUgY3V0b2ZmIHllYXIgZm9yIGRldGVybWluaW5nIHRoZSBjZW50dXJ5LlxuXHRcdFx0QHByb3BlcnR5IFtkYXlOYW1lc1Nob3J0XSB7c3RyaW5nW119IEFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5LlxuXHRcdFx0QHByb3BlcnR5IFtkYXlOYW1lc10ge3N0cmluZ1tdfSBOYW1lcyBvZiB0aGUgZGF5cyBmcm9tIFN1bmRheS5cblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhOYW1lc1Nob3J0XSB7c3RyaW5nW119IEFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBtb250aHMuXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoTmFtZXNdIHtzdHJpbmdbXX0gTmFtZXMgb2YgdGhlIG1vbnRocy5cblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgZGVjb2RlZCBkYXRlLiAqL1xuXHRcdGRldGVybWluZURhdGU6IGZ1bmN0aW9uKGRhdGVTcGVjLCBkZWZhdWx0RGF0ZSwgY3VycmVudERhdGUsIGRhdGVGb3JtYXQsIHNldHRpbmdzKSB7XG5cdFx0XHRpZiAoY3VycmVudERhdGUgJiYgdHlwZW9mIGN1cnJlbnREYXRlICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRzZXR0aW5ncyA9IGRhdGVGb3JtYXQ7XG5cdFx0XHRcdGRhdGVGb3JtYXQgPSBjdXJyZW50RGF0ZTtcblx0XHRcdFx0Y3VycmVudERhdGUgPSBudWxsO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiBkYXRlRm9ybWF0ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRzZXR0aW5ncyA9IGRhdGVGb3JtYXQ7XG5cdFx0XHRcdGRhdGVGb3JtYXQgPSAnJztcblx0XHRcdH1cblx0XHRcdHZhciBjYWxlbmRhciA9IHRoaXM7XG5cdFx0XHR2YXIgb2Zmc2V0U3RyaW5nID0gZnVuY3Rpb24ob2Zmc2V0KSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNhbGVuZGFyLnBhcnNlRGF0ZShkYXRlRm9ybWF0LCBvZmZzZXQsIHNldHRpbmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXRjaCAoZSkge1xuXHRcdFx0XHRcdC8vIElnbm9yZVxuXHRcdFx0XHR9XG5cdFx0XHRcdG9mZnNldCA9IG9mZnNldC50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR2YXIgZGF0ZSA9IChvZmZzZXQubWF0Y2goL15jLykgJiYgY3VycmVudERhdGUgP1xuXHRcdFx0XHRcdGN1cnJlbnREYXRlLm5ld0RhdGUoKSA6IG51bGwpIHx8IGNhbGVuZGFyLnRvZGF5KCk7XG5cdFx0XHRcdHZhciBwYXR0ZXJuID0gLyhbKy1dP1swLTldKylcXHMqKGR8d3xtfHkpPy9nO1xuXHRcdFx0XHR2YXIgbWF0Y2hlcyA9IHBhdHRlcm4uZXhlYyhvZmZzZXQpO1xuXHRcdFx0XHR3aGlsZSAobWF0Y2hlcykge1xuXHRcdFx0XHRcdGRhdGUuYWRkKHBhcnNlSW50KG1hdGNoZXNbMV0sIDEwKSwgbWF0Y2hlc1syXSB8fCAnZCcpO1xuXHRcdFx0XHRcdG1hdGNoZXMgPSBwYXR0ZXJuLmV4ZWMob2Zmc2V0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZGF0ZTtcblx0XHRcdH07XG5cdFx0XHRkZWZhdWx0RGF0ZSA9IChkZWZhdWx0RGF0ZSA/IGRlZmF1bHREYXRlLm5ld0RhdGUoKSA6IG51bGwpO1xuXHRcdFx0ZGF0ZVNwZWMgPSAoZGF0ZVNwZWMgPT0gbnVsbCA/IGRlZmF1bHREYXRlIDpcblx0XHRcdFx0KHR5cGVvZiBkYXRlU3BlYyA9PT0gJ3N0cmluZycgPyBvZmZzZXRTdHJpbmcoZGF0ZVNwZWMpIDogKHR5cGVvZiBkYXRlU3BlYyA9PT0gJ251bWJlcicgP1xuXHRcdFx0XHQoaXNOYU4oZGF0ZVNwZWMpIHx8IGRhdGVTcGVjID09PSBJbmZpbml0eSB8fCBkYXRlU3BlYyA9PT0gLUluZmluaXR5ID8gZGVmYXVsdERhdGUgOlxuXHRcdFx0XHRjYWxlbmRhci50b2RheSgpLmFkZChkYXRlU3BlYywgJ2QnKSkgOiBjYWxlbmRhci5uZXdEYXRlKGRhdGVTcGVjKSkpKTtcblx0XHRcdHJldHVybiBkYXRlU3BlYztcblx0XHR9XG5cdH0pO1xuXG59KShqUXVlcnkpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGx1cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBDYWxlbmRhcnMgZXh0cmFzIGZvciBqUXVlcnkgdjIuMC4xLlxyXG4gICBXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpIEF1Z3VzdCAyMDA5LlxyXG4gICBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCAoaHR0cDovL2tlaXRoLXdvb2QubmFtZS9saWNlbmNlLmh0bWwpIGxpY2Vuc2UuIFxyXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cclxuXHJcbihmdW5jdGlvbigkKSB7IC8vIEhpZGUgc2NvcGUsIG5vICQgY29uZmxpY3RcclxuXHJcblx0JC5leHRlbmQoJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXSwge1xyXG5cdFx0aW52YWxpZEFyZ3VtZW50czogJ0ludmFsaWQgYXJndW1lbnRzJyxcclxuXHRcdGludmFsaWRGb3JtYXQ6ICdDYW5ub3QgZm9ybWF0IGEgZGF0ZSBmcm9tIGFub3RoZXIgY2FsZW5kYXInLFxyXG5cdFx0bWlzc2luZ051bWJlckF0OiAnTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gezB9JyxcclxuXHRcdHVua25vd25OYW1lQXQ6ICdVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gezB9JyxcclxuXHRcdHVuZXhwZWN0ZWRMaXRlcmFsQXQ6ICdVbmV4cGVjdGVkIGxpdGVyYWwgYXQgcG9zaXRpb24gezB9JyxcclxuXHRcdHVuZXhwZWN0ZWRUZXh0OiAnQWRkaXRpb25hbCB0ZXh0IGZvdW5kIGF0IGVuZCdcclxuXHR9KTtcclxuXHQkLmNhbGVuZGFycy5sb2NhbCA9ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ107XHJcblxyXG5cdCQuZXh0ZW5kKCQuY2FsZW5kYXJzLmNkYXRlLnByb3RvdHlwZSwge1xyXG5cclxuXHRcdC8qKiBGb3JtYXQgdGhpcyBkYXRlLlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBDRGF0ZVxyXG5cdFx0XHRAcGFyYW0gW2Zvcm1hdF0ge3N0cmluZ30gVGhlIGRhdGUgZm9ybWF0IHRvIHVzZSAoc2VlIDxhIGhyZWY9XCJCYXNlQ2FsZW5kYXIuaHRtbCNmb3JtYXREYXRlXCI+PGNvZGU+Zm9ybWF0RGF0ZTwvY29kZT48L2E+KS5cclxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGRhdGUuICovXHJcblx0XHRmb3JtYXREYXRlOiBmdW5jdGlvbihmb3JtYXQpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZvcm1hdERhdGUoZm9ybWF0IHx8ICcnLCB0aGlzKTtcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0JC5leHRlbmQoJC5jYWxlbmRhcnMuYmFzZUNhbGVuZGFyLnByb3RvdHlwZSwge1xyXG5cclxuXHRcdFVOSVhfRVBPQ0g6ICQuY2FsZW5kYXJzLmluc3RhbmNlKCkubmV3RGF0ZSgxOTcwLCAxLCAxKS50b0pEKCksXHJcblx0XHRTRUNTX1BFUl9EQVk6IDI0ICogNjAgKiA2MCxcclxuXHRcdFRJQ0tTX0VQT0NIOiAkLmNhbGVuZGFycy5pbnN0YW5jZSgpLmpkRXBvY2gsIC8vIDEgSmFudWFyeSAwMDAxIENFXHJcblx0XHRUSUNLU19QRVJfREFZOiAyNCAqIDYwICogNjAgKiAxMDAwMDAwMCxcclxuXHJcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBBVE9NIChSRkMgMzMzOS9JU08gODYwMSkuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xyXG5cdFx0QVRPTTogJ3l5eXktbW0tZGQnLFxyXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgY29va2llcy5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXHJcblx0XHRDT09LSUU6ICdELCBkZCBNIHl5eXknLFxyXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgZnVsbCBkYXRlLlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXIgKi9cclxuXHRcdEZVTEw6ICdERCwgTU0gZCwgeXl5eScsXHJcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBJU08gODYwMS5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXHJcblx0XHRJU09fODYwMTogJ3l5eXktbW0tZGQnLFxyXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgSnVsaWFuIGRhdGUuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xyXG5cdFx0SlVMSUFOOiAnSicsXHJcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBSRkMgODIyLlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXIgKi9cclxuXHRcdFJGQ184MjI6ICdELCBkIE0geXknLFxyXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgUkZDIDg1MC5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXHJcblx0XHRSRkNfODUwOiAnREQsIGRkLU0teXknLFxyXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgUkZDIDEwMzYuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xyXG5cdFx0UkZDXzEwMzY6ICdELCBkIE0geXknLFxyXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgUkZDIDExMjMuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xyXG5cdFx0UkZDXzExMjM6ICdELCBkIE0geXl5eScsXHJcblx0XHQvKiogRGF0ZSBmb3JtIGZvciBSRkMgMjgyMi5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyICovXHJcblx0XHRSRkNfMjgyMjogJ0QsIGQgTSB5eXl5JyxcclxuXHRcdC8qKiBEYXRlIGZvcm0gZm9yIFJTUyAoUkZDIDgyMikuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xyXG5cdFx0UlNTOiAnRCwgZCBNIHl5JyxcclxuXHRcdC8qKiBEYXRlIGZvcm0gZm9yIFdpbmRvd3MgdGlja3MuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xyXG5cdFx0VElDS1M6ICchJyxcclxuXHRcdC8qKiBEYXRlIGZvcm0gZm9yIFVuaXggdGltZXN0YW1wLlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXIgKi9cclxuXHRcdFRJTUVTVEFNUDogJ0AnLFxyXG5cdFx0LyoqIERhdGUgZm9ybSBmb3IgVzNjIChJU08gODYwMSkuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhciAqL1xyXG5cdFx0VzNDOiAneXl5eS1tbS1kZCcsXHJcblxyXG5cdFx0LyoqIEZvcm1hdCBhIGRhdGUgb2JqZWN0IGludG8gYSBzdHJpbmcgdmFsdWUuXHJcblx0XHRcdFRoZSBmb3JtYXQgY2FuIGJlIGNvbWJpbmF0aW9ucyBvZiB0aGUgZm9sbG93aW5nOlxyXG5cdFx0XHQ8dWw+XHJcblx0XHRcdDxsaT5kICAtIGRheSBvZiBtb250aCAobm8gbGVhZGluZyB6ZXJvKTwvbGk+XHJcblx0XHRcdDxsaT5kZCAtIGRheSBvZiBtb250aCAodHdvIGRpZ2l0KTwvbGk+XHJcblx0XHRcdDxsaT5vICAtIGRheSBvZiB5ZWFyIChubyBsZWFkaW5nIHplcm9zKTwvbGk+XHJcblx0XHRcdDxsaT5vbyAtIGRheSBvZiB5ZWFyICh0aHJlZSBkaWdpdCk8L2xpPlxyXG5cdFx0XHQ8bGk+RCAgLSBkYXkgbmFtZSBzaG9ydDwvbGk+XHJcblx0XHRcdDxsaT5ERCAtIGRheSBuYW1lIGxvbmc8L2xpPlxyXG5cdFx0XHQ8bGk+dyAgLSB3ZWVrIG9mIHllYXIgKG5vIGxlYWRpbmcgemVybyk8L2xpPlxyXG5cdFx0XHQ8bGk+d3cgLSB3ZWVrIG9mIHllYXIgKHR3byBkaWdpdCk8L2xpPlxyXG5cdFx0XHQ8bGk+bSAgLSBtb250aCBvZiB5ZWFyIChubyBsZWFkaW5nIHplcm8pPC9saT5cclxuXHRcdFx0PGxpPm1tIC0gbW9udGggb2YgeWVhciAodHdvIGRpZ2l0KTwvbGk+XHJcblx0XHRcdDxsaT5NICAtIG1vbnRoIG5hbWUgc2hvcnQ8L2xpPlxyXG5cdFx0XHQ8bGk+TU0gLSBtb250aCBuYW1lIGxvbmc8L2xpPlxyXG5cdFx0XHQ8bGk+eXkgLSB5ZWFyICh0d28gZGlnaXQpPC9saT5cclxuXHRcdFx0PGxpPnl5eXkgLSB5ZWFyIChmb3VyIGRpZ2l0KTwvbGk+XHJcblx0XHRcdDxsaT5ZWVlZIC0gZm9ybWF0dGVkIHllYXI8L2xpPlxyXG5cdFx0XHQ8bGk+SiAgLSBKdWxpYW4gZGF0ZSAoZGF5cyBzaW5jZSBKYW51YXJ5IDEsIDQ3MTMgQkNFIEdyZWVud2ljaCBub29uKTwvbGk+XHJcblx0XHRcdDxsaT5AICAtIFVuaXggdGltZXN0YW1wIChzIHNpbmNlIDAxLzAxLzE5NzApPC9saT5cclxuXHRcdFx0PGxpPiEgIC0gV2luZG93cyB0aWNrcyAoMTAwbnMgc2luY2UgMDEvMDEvMDAwMSk8L2xpPlxyXG5cdFx0XHQ8bGk+Jy4uLicgLSBsaXRlcmFsIHRleHQ8L2xpPlxyXG5cdFx0XHQ8bGk+JycgLSBzaW5nbGUgcXVvdGU8L2xpPlxyXG5cdFx0XHQ8L3VsPlxyXG5cdFx0XHRGb3VuZCBpbiB0aGUgPGNvZGU+anF1ZXJ5LmNhbGVuZGFycy5wbHVzLmpzPC9jb2RlPiBtb2R1bGUuXHJcblx0XHRcdEBtZW1iZXJvZiBCYXNlQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIFtmb3JtYXRdIHtzdHJpbmd9IFRoZSBkZXNpcmVkIGZvcm1hdCBvZiB0aGUgZGF0ZSAoZGVmYXVsdHMgdG8gY2FsZW5kYXIgZm9ybWF0KS5cclxuXHRcdFx0QHBhcmFtIGRhdGUge0NEYXRlfSBUaGUgZGF0ZSB2YWx1ZSB0byBmb3JtYXQuXHJcblx0XHRcdEBwYXJhbSBbc2V0dGluZ3NdIHtvYmplY3R9IEFkZGl0aW9uIG9wdGlvbnMsIHdob3NlIGF0dHJpYnV0ZXMgaW5jbHVkZTpcclxuXHRcdFx0QHByb3BlcnR5IFtkYXlOYW1lc1Nob3J0XSB7c3RyaW5nW119IEFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5LlxyXG5cdFx0XHRAcHJvcGVydHkgW2RheU5hbWVzXSB7c3RyaW5nW119IE5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5LlxyXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoTmFtZXNTaG9ydF0ge3N0cmluZ1tdfSBBYmJyZXZpYXRlZCBuYW1lcyBvZiB0aGUgbW9udGhzLlxyXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoTmFtZXNdIHtzdHJpbmdbXX0gTmFtZXMgb2YgdGhlIG1vbnRocy5cclxuXHRcdFx0QHByb3BlcnR5IFtjYWxjdWxhdGVXZWVrXSB7Q2FsZW5kYXJzUGlja2VyQ2FsY3VsYXRlV2Vla30gRnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdlZWsgb2YgdGhlIHllYXIuXHJcblx0XHRcdEByZXR1cm4ge3N0cmluZ30gVGhlIGRhdGUgaW4gdGhlIGFib3ZlIGZvcm1hdC5cclxuXHRcdFx0QHRocm93cyBFcnJvcnMgaWYgdGhlIGRhdGUgaXMgZnJvbSBhIGRpZmZlcmVudCBjYWxlbmRhci4gKi9cclxuXHRcdGZvcm1hdERhdGU6IGZ1bmN0aW9uKGZvcm1hdCwgZGF0ZSwgc2V0dGluZ3MpIHtcclxuXHRcdFx0aWYgKHR5cGVvZiBmb3JtYXQgIT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdFx0c2V0dGluZ3MgPSBkYXRlO1xyXG5cdFx0XHRcdGRhdGUgPSBmb3JtYXQ7XHJcblx0XHRcdFx0Zm9ybWF0ID0gJyc7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCFkYXRlKSB7XHJcblx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChkYXRlLmNhbGVuZGFyKCkgIT09IHRoaXMpIHtcclxuXHRcdFx0XHR0aHJvdyAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRm9ybWF0IHx8ICQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZEZvcm1hdDtcclxuXHRcdFx0fVxyXG5cdFx0XHRmb3JtYXQgPSBmb3JtYXQgfHwgdGhpcy5sb2NhbC5kYXRlRm9ybWF0O1xyXG5cdFx0XHRzZXR0aW5ncyA9IHNldHRpbmdzIHx8IHt9O1xyXG5cdFx0XHR2YXIgZGF5TmFtZXNTaG9ydCA9IHNldHRpbmdzLmRheU5hbWVzU2hvcnQgfHwgdGhpcy5sb2NhbC5kYXlOYW1lc1Nob3J0O1xyXG5cdFx0XHR2YXIgZGF5TmFtZXMgPSBzZXR0aW5ncy5kYXlOYW1lcyB8fCB0aGlzLmxvY2FsLmRheU5hbWVzO1xyXG5cdFx0XHR2YXIgbW9udGhOYW1lc1Nob3J0ID0gc2V0dGluZ3MubW9udGhOYW1lc1Nob3J0IHx8IHRoaXMubG9jYWwubW9udGhOYW1lc1Nob3J0O1xyXG5cdFx0XHR2YXIgbW9udGhOYW1lcyA9IHNldHRpbmdzLm1vbnRoTmFtZXMgfHwgdGhpcy5sb2NhbC5tb250aE5hbWVzO1xyXG5cdFx0XHR2YXIgY2FsY3VsYXRlV2VlayA9IHNldHRpbmdzLmNhbGN1bGF0ZVdlZWsgfHwgdGhpcy5sb2NhbC5jYWxjdWxhdGVXZWVrO1xyXG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIGEgZm9ybWF0IGNoYXJhY3RlciBpcyBkb3VibGVkXHJcblx0XHRcdHZhciBkb3VibGVkID0gZnVuY3Rpb24obWF0Y2gsIHN0ZXApIHtcclxuXHRcdFx0XHR2YXIgbWF0Y2hlcyA9IDE7XHJcblx0XHRcdFx0d2hpbGUgKGlGb3JtYXQgKyBtYXRjaGVzIDwgZm9ybWF0Lmxlbmd0aCAmJiBmb3JtYXQuY2hhckF0KGlGb3JtYXQgKyBtYXRjaGVzKSA9PT0gbWF0Y2gpIHtcclxuXHRcdFx0XHRcdG1hdGNoZXMrKztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aUZvcm1hdCArPSBtYXRjaGVzIC0gMTtcclxuXHRcdFx0XHRyZXR1cm4gTWF0aC5mbG9vcihtYXRjaGVzIC8gKHN0ZXAgfHwgMSkpID4gMTtcclxuXHRcdFx0fTtcclxuXHRcdFx0Ly8gRm9ybWF0IGEgbnVtYmVyLCB3aXRoIGxlYWRpbmcgemVyb2VzIGlmIG5lY2Vzc2FyeVxyXG5cdFx0XHR2YXIgZm9ybWF0TnVtYmVyID0gZnVuY3Rpb24obWF0Y2gsIHZhbHVlLCBsZW4sIHN0ZXApIHtcclxuXHRcdFx0XHR2YXIgbnVtID0gJycgKyB2YWx1ZTtcclxuXHRcdFx0XHRpZiAoZG91YmxlZChtYXRjaCwgc3RlcCkpIHtcclxuXHRcdFx0XHRcdHdoaWxlIChudW0ubGVuZ3RoIDwgbGVuKSB7XHJcblx0XHRcdFx0XHRcdG51bSA9ICcwJyArIG51bTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIG51bTtcclxuXHRcdFx0fTtcclxuXHRcdFx0Ly8gRm9ybWF0IGEgbmFtZSwgc2hvcnQgb3IgbG9uZyBhcyByZXF1ZXN0ZWRcclxuXHRcdFx0dmFyIGZvcm1hdE5hbWUgPSBmdW5jdGlvbihtYXRjaCwgdmFsdWUsIHNob3J0TmFtZXMsIGxvbmdOYW1lcykge1xyXG5cdFx0XHRcdHJldHVybiAoZG91YmxlZChtYXRjaCkgPyBsb25nTmFtZXNbdmFsdWVdIDogc2hvcnROYW1lc1t2YWx1ZV0pO1xyXG5cdFx0XHR9O1xyXG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XHJcblx0XHRcdHZhciBsaXRlcmFsID0gZmFsc2U7XHJcblx0XHRcdGZvciAodmFyIGlGb3JtYXQgPSAwOyBpRm9ybWF0IDwgZm9ybWF0Lmxlbmd0aDsgaUZvcm1hdCsrKSB7XHJcblx0XHRcdFx0aWYgKGxpdGVyYWwpIHtcclxuXHRcdFx0XHRcdGlmIChmb3JtYXQuY2hhckF0KGlGb3JtYXQpID09PSBcIidcIiAmJiAhZG91YmxlZChcIidcIikpIHtcclxuXHRcdFx0XHRcdFx0bGl0ZXJhbCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdG91dHB1dCArPSBmb3JtYXQuY2hhckF0KGlGb3JtYXQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdHN3aXRjaCAoZm9ybWF0LmNoYXJBdChpRm9ybWF0KSkge1xyXG5cdFx0XHRcdFx0XHRjYXNlICdkJzogb3V0cHV0ICs9IGZvcm1hdE51bWJlcignZCcsIGRhdGUuZGF5KCksIDIpOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAnRCc6IG91dHB1dCArPSBmb3JtYXROYW1lKCdEJywgZGF0ZS5kYXlPZldlZWsoKSxcclxuXHRcdFx0XHRcdFx0XHRkYXlOYW1lc1Nob3J0LCBkYXlOYW1lcyk7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdvJzogb3V0cHV0ICs9IGZvcm1hdE51bWJlcignbycsIGRhdGUuZGF5T2ZZZWFyKCksIDMpOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAndyc6IG91dHB1dCArPSBmb3JtYXROdW1iZXIoJ3cnLCBkYXRlLndlZWtPZlllYXIoKSwgMik7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdtJzogb3V0cHV0ICs9IGZvcm1hdE51bWJlcignbScsIGRhdGUubW9udGgoKSwgMik7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdNJzogb3V0cHV0ICs9IGZvcm1hdE5hbWUoJ00nLCBkYXRlLm1vbnRoKCkgLSB0aGlzLm1pbk1vbnRoLFxyXG5cdFx0XHRcdFx0XHRcdG1vbnRoTmFtZXNTaG9ydCwgbW9udGhOYW1lcyk7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICd5JzpcclxuXHRcdFx0XHRcdFx0XHRvdXRwdXQgKz0gKGRvdWJsZWQoJ3knLCAyKSA/IGRhdGUueWVhcigpIDpcclxuXHRcdFx0XHRcdFx0XHRcdChkYXRlLnllYXIoKSAlIDEwMCA8IDEwID8gJzAnIDogJycpICsgZGF0ZS55ZWFyKCkgJSAxMDApO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdZJzpcclxuXHRcdFx0XHRcdFx0XHRkb3VibGVkKCdZJywgMik7XHJcblx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IGRhdGUuZm9ybWF0WWVhcigpO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdKJzogb3V0cHV0ICs9IGRhdGUudG9KRCgpOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAnQCc6IG91dHB1dCArPSAoZGF0ZS50b0pEKCkgLSB0aGlzLlVOSVhfRVBPQ0gpICogdGhpcy5TRUNTX1BFUl9EQVk7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICchJzogb3V0cHV0ICs9IChkYXRlLnRvSkQoKSAtIHRoaXMuVElDS1NfRVBPQ0gpICogdGhpcy5USUNLU19QRVJfREFZOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSBcIidcIjpcclxuXHRcdFx0XHRcdFx0XHRpZiAoZG91YmxlZChcIidcIikpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG91dHB1dCArPSBcIidcIjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRsaXRlcmFsID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdFx0b3V0cHV0ICs9IGZvcm1hdC5jaGFyQXQoaUZvcm1hdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBvdXRwdXQ7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBQYXJzZSBhIHN0cmluZyB2YWx1ZSBpbnRvIGEgZGF0ZSBvYmplY3QuXHJcblx0XHRcdFNlZSA8YSBocmVmPVwiI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4gZm9yIHRoZSBwb3NzaWJsZSBmb3JtYXRzLCBwbHVzOlxyXG5cdFx0XHQ8dWw+XHJcblx0XHRcdDxsaT4qIC0gaWdub3JlIHJlc3Qgb2Ygc3RyaW5nPC9saT5cclxuXHRcdFx0PC91bD5cclxuXHRcdFx0Rm91bmQgaW4gdGhlIDxjb2RlPmpxdWVyeS5jYWxlbmRhcnMucGx1cy5qczwvY29kZT4gbW9kdWxlLlxyXG5cdFx0XHRAbWVtYmVyb2YgQmFzZUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSBmb3JtYXQge3N0cmluZ30gVGhlIGV4cGVjdGVkIGZvcm1hdCBvZiB0aGUgZGF0ZSAoJycgZm9yIGRlZmF1bHQgY2FsZW5kYXIgZm9ybWF0KS5cclxuXHRcdFx0QHBhcmFtIHZhbHVlIHtzdHJpbmd9IFRoZSBkYXRlIGluIHRoZSBhYm92ZSBmb3JtYXQuXHJcblx0XHRcdEBwYXJhbSBbc2V0dGluZ3NdIHtvYmplY3R9IEFkZGl0aW9uYWwgb3B0aW9ucyB3aG9zZSBhdHRyaWJ1dGVzIGluY2x1ZGU6XHJcblx0XHRcdEBwcm9wZXJ0eSBbc2hvcnRZZWFyQ3V0b2ZmXSB7bnVtYmVyfSBUaGUgY3V0b2ZmIHllYXIgZm9yIGRldGVybWluaW5nIHRoZSBjZW50dXJ5LlxyXG5cdFx0XHRAcHJvcGVydHkgW2RheU5hbWVzU2hvcnRdIHtzdHJpbmdbXX0gQWJicmV2aWF0ZWQgbmFtZXMgb2YgdGhlIGRheXMgZnJvbSBTdW5kYXkuXHJcblx0XHRcdEBwcm9wZXJ0eSBbZGF5TmFtZXNdIHtzdHJpbmdbXX0gTmFtZXMgb2YgdGhlIGRheXMgZnJvbSBTdW5kYXkuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhOYW1lc1Nob3J0XSB7c3RyaW5nW119IEFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBtb250aHMuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbW9udGhOYW1lc10ge3N0cmluZ1tdfSBOYW1lcyBvZiB0aGUgbW9udGhzLlxyXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIGV4dHJhY3RlZCBkYXRlIHZhbHVlIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIHZhbHVlIGlzIGJsYW5rLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9ycyBpZiB0aGUgZm9ybWF0IGFuZC9vciB2YWx1ZSBhcmUgbWlzc2luZyxcclxuXHRcdFx0XHRcdGlmIHRoZSB2YWx1ZSBkb2Vzbid0IG1hdGNoIHRoZSBmb3JtYXQsIG9yIGlmIHRoZSBkYXRlIGlzIGludmFsaWQuICovXHJcblx0XHRwYXJzZURhdGU6IGZ1bmN0aW9uKGZvcm1hdCwgdmFsdWUsIHNldHRpbmdzKSB7XHJcblx0XHRcdGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcblx0XHRcdFx0dGhyb3cgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZEFyZ3VtZW50cyB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRBcmd1bWVudHM7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFsdWUgPSAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlLnRvU3RyaW5nKCkgOiB2YWx1ZSArICcnKTtcclxuXHRcdFx0aWYgKHZhbHVlID09PSAnJykge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvcm1hdCA9IGZvcm1hdCB8fCB0aGlzLmxvY2FsLmRhdGVGb3JtYXQ7XHJcblx0XHRcdHNldHRpbmdzID0gc2V0dGluZ3MgfHwge307XHJcblx0XHRcdHZhciBzaG9ydFllYXJDdXRvZmYgPSBzZXR0aW5ncy5zaG9ydFllYXJDdXRvZmYgfHwgdGhpcy5zaG9ydFllYXJDdXRvZmY7XHJcblx0XHRcdHNob3J0WWVhckN1dG9mZiA9ICh0eXBlb2Ygc2hvcnRZZWFyQ3V0b2ZmICE9PSAnc3RyaW5nJyA/IHNob3J0WWVhckN1dG9mZiA6XHJcblx0XHRcdFx0dGhpcy50b2RheSgpLnllYXIoKSAlIDEwMCArIHBhcnNlSW50KHNob3J0WWVhckN1dG9mZiwgMTApKTtcclxuXHRcdFx0dmFyIGRheU5hbWVzU2hvcnQgPSBzZXR0aW5ncy5kYXlOYW1lc1Nob3J0IHx8IHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydDtcclxuXHRcdFx0dmFyIGRheU5hbWVzID0gc2V0dGluZ3MuZGF5TmFtZXMgfHwgdGhpcy5sb2NhbC5kYXlOYW1lcztcclxuXHRcdFx0dmFyIG1vbnRoTmFtZXNTaG9ydCA9IHNldHRpbmdzLm1vbnRoTmFtZXNTaG9ydCB8fCB0aGlzLmxvY2FsLm1vbnRoTmFtZXNTaG9ydDtcclxuXHRcdFx0dmFyIG1vbnRoTmFtZXMgPSBzZXR0aW5ncy5tb250aE5hbWVzIHx8IHRoaXMubG9jYWwubW9udGhOYW1lcztcclxuXHRcdFx0dmFyIGpkID0gLTE7XHJcblx0XHRcdHZhciB5ZWFyID0gLTE7XHJcblx0XHRcdHZhciBtb250aCA9IC0xO1xyXG5cdFx0XHR2YXIgZGF5ID0gLTE7XHJcblx0XHRcdHZhciBkb3kgPSAtMTtcclxuXHRcdFx0dmFyIHNob3J0WWVhciA9IGZhbHNlO1xyXG5cdFx0XHR2YXIgbGl0ZXJhbCA9IGZhbHNlO1xyXG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIGEgZm9ybWF0IGNoYXJhY3RlciBpcyBkb3VibGVkXHJcblx0XHRcdHZhciBkb3VibGVkID0gZnVuY3Rpb24obWF0Y2gsIHN0ZXApIHtcclxuXHRcdFx0XHR2YXIgbWF0Y2hlcyA9IDE7XHJcblx0XHRcdFx0d2hpbGUgKGlGb3JtYXQgKyBtYXRjaGVzIDwgZm9ybWF0Lmxlbmd0aCAmJiBmb3JtYXQuY2hhckF0KGlGb3JtYXQgKyBtYXRjaGVzKSA9PT0gbWF0Y2gpIHtcclxuXHRcdFx0XHRcdG1hdGNoZXMrKztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aUZvcm1hdCArPSBtYXRjaGVzIC0gMTtcclxuXHRcdFx0XHRyZXR1cm4gTWF0aC5mbG9vcihtYXRjaGVzIC8gKHN0ZXAgfHwgMSkpID4gMTtcclxuXHRcdFx0fTtcclxuXHRcdFx0Ly8gRXh0cmFjdCBhIG51bWJlciBmcm9tIHRoZSBzdHJpbmcgdmFsdWVcclxuXHRcdFx0dmFyIGdldE51bWJlciA9IGZ1bmN0aW9uKG1hdGNoLCBzdGVwKSB7XHJcblx0XHRcdFx0dmFyIGlzRG91YmxlZCA9IGRvdWJsZWQobWF0Y2gsIHN0ZXApO1xyXG5cdFx0XHRcdHZhciBzaXplID0gWzIsIDMsIGlzRG91YmxlZCA/IDQgOiAyLCBpc0RvdWJsZWQgPyA0IDogMiwgMTAsIDExLCAyMF1bJ295WUpAIScuaW5kZXhPZihtYXRjaCkgKyAxXTtcclxuXHRcdFx0XHR2YXIgZGlnaXRzID0gbmV3IFJlZ0V4cCgnXi0/XFxcXGR7MSwnICsgc2l6ZSArICd9Jyk7XHJcblx0XHRcdFx0dmFyIG51bSA9IHZhbHVlLnN1YnN0cmluZyhpVmFsdWUpLm1hdGNoKGRpZ2l0cyk7XHJcblx0XHRcdFx0aWYgKCFudW0pIHtcclxuXHRcdFx0XHRcdHRocm93ICgkLmNhbGVuZGFycy5sb2NhbC5taXNzaW5nTnVtYmVyQXQgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5taXNzaW5nTnVtYmVyQXQpLlxyXG5cdFx0XHRcdFx0XHRyZXBsYWNlKC9cXHswXFx9LywgaVZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aVZhbHVlICs9IG51bVswXS5sZW5ndGg7XHJcblx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KG51bVswXSwgMTApO1xyXG5cdFx0XHR9O1xyXG5cdFx0XHQvLyBFeHRyYWN0IGEgbmFtZSBmcm9tIHRoZSBzdHJpbmcgdmFsdWUgYW5kIGNvbnZlcnQgdG8gYW4gaW5kZXhcclxuXHRcdFx0dmFyIGNhbGVuZGFyID0gdGhpcztcclxuXHRcdFx0dmFyIGdldE5hbWUgPSBmdW5jdGlvbihtYXRjaCwgc2hvcnROYW1lcywgbG9uZ05hbWVzLCBzdGVwKSB7XHJcblx0XHRcdFx0dmFyIG5hbWVzID0gKGRvdWJsZWQobWF0Y2gsIHN0ZXApID8gbG9uZ05hbWVzIDogc2hvcnROYW1lcyk7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0aWYgKHZhbHVlLnN1YnN0cihpVmFsdWUsIG5hbWVzW2ldLmxlbmd0aCkudG9Mb3dlckNhc2UoKSA9PT0gbmFtZXNbaV0udG9Mb3dlckNhc2UoKSkge1xyXG5cdFx0XHRcdFx0XHRpVmFsdWUgKz0gbmFtZXNbaV0ubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gaSArIGNhbGVuZGFyLm1pbk1vbnRoO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aHJvdyAoJC5jYWxlbmRhcnMubG9jYWwudW5rbm93bk5hbWVBdCB8fCAkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLnVua25vd25OYW1lQXQpLlxyXG5cdFx0XHRcdFx0cmVwbGFjZSgvXFx7MFxcfS8sIGlWYWx1ZSk7XHJcblx0XHRcdH07XHJcblx0XHRcdC8vIENvbmZpcm0gdGhhdCBhIGxpdGVyYWwgY2hhcmFjdGVyIG1hdGNoZXMgdGhlIHN0cmluZyB2YWx1ZVxyXG5cdFx0XHR2YXIgY2hlY2tMaXRlcmFsID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0aWYgKHZhbHVlLmNoYXJBdChpVmFsdWUpICE9PSBmb3JtYXQuY2hhckF0KGlGb3JtYXQpKSB7XHJcblx0XHRcdFx0XHR0aHJvdyAoJC5jYWxlbmRhcnMubG9jYWwudW5leHBlY3RlZExpdGVyYWxBdCB8fFxyXG5cdFx0XHRcdFx0XHQkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLnVuZXhwZWN0ZWRMaXRlcmFsQXQpLnJlcGxhY2UoL1xcezBcXH0vLCBpVmFsdWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpVmFsdWUrKztcclxuXHRcdFx0fTtcclxuXHRcdFx0dmFyIGlWYWx1ZSA9IDA7XHJcblx0XHRcdGZvciAodmFyIGlGb3JtYXQgPSAwOyBpRm9ybWF0IDwgZm9ybWF0Lmxlbmd0aDsgaUZvcm1hdCsrKSB7XHJcblx0XHRcdFx0aWYgKGxpdGVyYWwpIHtcclxuXHRcdFx0XHRcdGlmIChmb3JtYXQuY2hhckF0KGlGb3JtYXQpID09PSBcIidcIiAmJiAhZG91YmxlZChcIidcIikpIHtcclxuXHRcdFx0XHRcdFx0bGl0ZXJhbCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdGNoZWNrTGl0ZXJhbCgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdHN3aXRjaCAoZm9ybWF0LmNoYXJBdChpRm9ybWF0KSkge1xyXG5cdFx0XHRcdFx0XHRjYXNlICdkJzogZGF5ID0gZ2V0TnVtYmVyKCdkJyk7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdEJzogZ2V0TmFtZSgnRCcsIGRheU5hbWVzU2hvcnQsIGRheU5hbWVzKTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ28nOiBkb3kgPSBnZXROdW1iZXIoJ28nKTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ3cnOiBnZXROdW1iZXIoJ3cnKTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ20nOiBtb250aCA9IGdldE51bWJlcignbScpOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAnTSc6IG1vbnRoID0gZ2V0TmFtZSgnTScsIG1vbnRoTmFtZXNTaG9ydCwgbW9udGhOYW1lcyk7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICd5JzpcclxuXHRcdFx0XHRcdFx0XHR2YXIgaVNhdmUgPSBpRm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdHNob3J0WWVhciA9ICFkb3VibGVkKCd5JywgMik7XHJcblx0XHRcdFx0XHRcdFx0aUZvcm1hdCA9IGlTYXZlO1xyXG5cdFx0XHRcdFx0XHRcdHllYXIgPSBnZXROdW1iZXIoJ3knLCAyKTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAnWSc6IHllYXIgPSBnZXROdW1iZXIoJ1knLCAyKTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ0onOlxyXG5cdFx0XHRcdFx0XHRcdGpkID0gZ2V0TnVtYmVyKCdKJykgKyAwLjU7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHZhbHVlLmNoYXJBdChpVmFsdWUpID09PSAnLicpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlWYWx1ZSsrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Z2V0TnVtYmVyKCdKJyk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdAJzogamQgPSBnZXROdW1iZXIoJ0AnKSAvIHRoaXMuU0VDU19QRVJfREFZICsgdGhpcy5VTklYX0VQT0NIOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAnISc6IGpkID0gZ2V0TnVtYmVyKCchJykgLyB0aGlzLlRJQ0tTX1BFUl9EQVkgKyB0aGlzLlRJQ0tTX0VQT0NIOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAnKic6IGlWYWx1ZSA9IHZhbHVlLmxlbmd0aDsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgXCInXCI6XHJcblx0XHRcdFx0XHRcdFx0aWYgKGRvdWJsZWQoXCInXCIpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjaGVja0xpdGVyYWwoKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRsaXRlcmFsID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGRlZmF1bHQ6IGNoZWNrTGl0ZXJhbCgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoaVZhbHVlIDwgdmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0dGhyb3cgJC5jYWxlbmRhcnMubG9jYWwudW5leHBlY3RlZFRleHQgfHwgJC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS51bmV4cGVjdGVkVGV4dDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoeWVhciA9PT0gLTEpIHtcclxuXHRcdFx0XHR5ZWFyID0gdGhpcy50b2RheSgpLnllYXIoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmICh5ZWFyIDwgMTAwICYmIHNob3J0WWVhcikge1xyXG5cdFx0XHRcdHllYXIgKz0gKHNob3J0WWVhckN1dG9mZiA9PT0gLTEgPyAxOTAwIDogdGhpcy50b2RheSgpLnllYXIoKSAtXHJcblx0XHRcdFx0XHR0aGlzLnRvZGF5KCkueWVhcigpICUgMTAwIC0gKHllYXIgPD0gc2hvcnRZZWFyQ3V0b2ZmID8gMCA6IDEwMCkpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChkb3kgPiAtMSkge1xyXG5cdFx0XHRcdG1vbnRoID0gMTtcclxuXHRcdFx0XHRkYXkgPSBkb3k7XHJcblx0XHRcdFx0Zm9yICh2YXIgZGltID0gdGhpcy5kYXlzSW5Nb250aCh5ZWFyLCBtb250aCk7IGRheSA+IGRpbTsgZGltID0gdGhpcy5kYXlzSW5Nb250aCh5ZWFyLCBtb250aCkpIHtcclxuXHRcdFx0XHRcdG1vbnRoKys7XHJcblx0XHRcdFx0XHRkYXkgLT0gZGltO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gKGpkID4gLTEgPyB0aGlzLmZyb21KRChqZCkgOiB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSkpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQSBkYXRlIG1heSBiZSBzcGVjaWZpZWQgYXMgYW4gZXhhY3QgdmFsdWUgb3IgYSByZWxhdGl2ZSBvbmUuXHJcblx0XHRcdEZvdW5kIGluIHRoZSA8Y29kZT5qcXVlcnkuY2FsZW5kYXJzLnBsdXMuanM8L2NvZGU+IG1vZHVsZS5cclxuXHRcdFx0QG1lbWJlcm9mIEJhc2VDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0gZGF0ZVNwZWMge0NEYXRlfG51bWJlcnxzdHJpbmd9IFRoZSBkYXRlIGFzIGFuIG9iamVjdCBvciBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdCBvclxyXG5cdFx0XHRcdFx0YW4gb2Zmc2V0IC0gbnVtZXJpYyBkYXlzIGZyb20gdG9kYXksIG9yIHN0cmluZyBhbW91bnRzIGFuZCBwZXJpb2RzLCBlLmcuICcrMW0gKzJ3Jy5cclxuXHRcdFx0QHBhcmFtIGRlZmF1bHREYXRlIHtDRGF0ZX0gVGhlIGRhdGUgdG8gdXNlIGlmIG5vIG90aGVyIHN1cHBsaWVkLCBtYXkgYmUgPGNvZGU+bnVsbDwvY29kZT4uXHJcblx0XHRcdEBwYXJhbSBjdXJyZW50RGF0ZSB7Q0RhdGV9IFRoZSBjdXJyZW50IGRhdGUgYXMgYSBwb3NzaWJsZSBiYXNpcyBmb3IgcmVsYXRpdmUgZGF0ZXMsXHJcblx0XHRcdFx0XHRpZiA8Y29kZT5udWxsPC9jb2RlPiB0b2RheSBpcyB1c2VkIChvcHRpb25hbClcclxuXHRcdFx0QHBhcmFtIFtkYXRlRm9ybWF0XSB7c3RyaW5nfSBUaGUgZXhwZWN0ZWQgZGF0ZSBmb3JtYXQgLSBzZWUgPGEgaHJlZj1cIiNmb3JtYXREYXRlXCI+PGNvZGU+Zm9ybWF0RGF0ZTwvY29kZT48L2E+LlxyXG5cdFx0XHRAcGFyYW0gW3NldHRpbmdzXSB7b2JqZWN0fSBBZGRpdGlvbmFsIG9wdGlvbnMgd2hvc2UgYXR0cmlidXRlcyBpbmNsdWRlOlxyXG5cdFx0XHRAcHJvcGVydHkgW3Nob3J0WWVhckN1dG9mZl0ge251bWJlcn0gVGhlIGN1dG9mZiB5ZWFyIGZvciBkZXRlcm1pbmluZyB0aGUgY2VudHVyeS5cclxuXHRcdFx0QHByb3BlcnR5IFtkYXlOYW1lc1Nob3J0XSB7c3RyaW5nW119IEFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5LlxyXG5cdFx0XHRAcHJvcGVydHkgW2RheU5hbWVzXSB7c3RyaW5nW119IE5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5LlxyXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoTmFtZXNTaG9ydF0ge3N0cmluZ1tdfSBBYmJyZXZpYXRlZCBuYW1lcyBvZiB0aGUgbW9udGhzLlxyXG5cdFx0XHRAcHJvcGVydHkgW21vbnRoTmFtZXNdIHtzdHJpbmdbXX0gTmFtZXMgb2YgdGhlIG1vbnRocy5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBkZWNvZGVkIGRhdGUuICovXHJcblx0XHRkZXRlcm1pbmVEYXRlOiBmdW5jdGlvbihkYXRlU3BlYywgZGVmYXVsdERhdGUsIGN1cnJlbnREYXRlLCBkYXRlRm9ybWF0LCBzZXR0aW5ncykge1xyXG5cdFx0XHRpZiAoY3VycmVudERhdGUgJiYgdHlwZW9mIGN1cnJlbnREYXRlICE9PSAnb2JqZWN0Jykge1xyXG5cdFx0XHRcdHNldHRpbmdzID0gZGF0ZUZvcm1hdDtcclxuXHRcdFx0XHRkYXRlRm9ybWF0ID0gY3VycmVudERhdGU7XHJcblx0XHRcdFx0Y3VycmVudERhdGUgPSBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0eXBlb2YgZGF0ZUZvcm1hdCAhPT0gJ3N0cmluZycpIHtcclxuXHRcdFx0XHRzZXR0aW5ncyA9IGRhdGVGb3JtYXQ7XHJcblx0XHRcdFx0ZGF0ZUZvcm1hdCA9ICcnO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBjYWxlbmRhciA9IHRoaXM7XHJcblx0XHRcdHZhciBvZmZzZXRTdHJpbmcgPSBmdW5jdGlvbihvZmZzZXQpIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGNhbGVuZGFyLnBhcnNlRGF0ZShkYXRlRm9ybWF0LCBvZmZzZXQsIHNldHRpbmdzKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRcdC8vIElnbm9yZVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRvZmZzZXQgPSBvZmZzZXQudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0XHR2YXIgZGF0ZSA9IChvZmZzZXQubWF0Y2goL15jLykgJiYgY3VycmVudERhdGUgP1xyXG5cdFx0XHRcdFx0Y3VycmVudERhdGUubmV3RGF0ZSgpIDogbnVsbCkgfHwgY2FsZW5kYXIudG9kYXkoKTtcclxuXHRcdFx0XHR2YXIgcGF0dGVybiA9IC8oWystXT9bMC05XSspXFxzKihkfHd8bXx5KT8vZztcclxuXHRcdFx0XHR2YXIgbWF0Y2hlcyA9IHBhdHRlcm4uZXhlYyhvZmZzZXQpO1xyXG5cdFx0XHRcdHdoaWxlIChtYXRjaGVzKSB7XHJcblx0XHRcdFx0XHRkYXRlLmFkZChwYXJzZUludChtYXRjaGVzWzFdLCAxMCksIG1hdGNoZXNbMl0gfHwgJ2QnKTtcclxuXHRcdFx0XHRcdG1hdGNoZXMgPSBwYXR0ZXJuLmV4ZWMob2Zmc2V0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGRhdGU7XHJcblx0XHRcdH07XHJcblx0XHRcdGRlZmF1bHREYXRlID0gKGRlZmF1bHREYXRlID8gZGVmYXVsdERhdGUubmV3RGF0ZSgpIDogbnVsbCk7XHJcblx0XHRcdGRhdGVTcGVjID0gKGRhdGVTcGVjID09IG51bGwgPyBkZWZhdWx0RGF0ZSA6XHJcblx0XHRcdFx0KHR5cGVvZiBkYXRlU3BlYyA9PT0gJ3N0cmluZycgPyBvZmZzZXRTdHJpbmcoZGF0ZVNwZWMpIDogKHR5cGVvZiBkYXRlU3BlYyA9PT0gJ251bWJlcicgP1xyXG5cdFx0XHRcdChpc05hTihkYXRlU3BlYykgfHwgZGF0ZVNwZWMgPT09IEluZmluaXR5IHx8IGRhdGVTcGVjID09PSAtSW5maW5pdHkgPyBkZWZhdWx0RGF0ZSA6XHJcblx0XHRcdFx0Y2FsZW5kYXIudG9kYXkoKS5hZGQoZGF0ZVNwZWMsICdkJykpIDogY2FsZW5kYXIubmV3RGF0ZShkYXRlU3BlYykpKSk7XHJcblx0XHRcdHJldHVybiBkYXRlU3BlYztcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.taiwan-zh-TW.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.taiwan-zh-TW.js index 5d6ca3fc2a4..cc2f1b3a76b 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.taiwan-zh-TW.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.taiwan-zh-TW.js @@ -23,4 +23,4 @@ }; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMudGFpd2FuLXpoLVRXLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy50YWl3YW4temgtVFcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXG4gICBUcmFkaXRpb25hbCBDaGluZXNlIGxvY2FsaXNhdGlvbiBmb3IgVGFpd2FuZXNlIGNhbGVuZGFycyBmb3IgalF1ZXJ5IHYyLjAuMS5cbiAgIFdyaXR0ZW4gYnkgUmVzc29sIChyZXNzb2xAZ21haWwuY29tKS4gKi9cbihmdW5jdGlvbigkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy50YWl3YW4ucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snemgtVFcnXSA9IHtcblx0XHRuYW1lOiAnVGFpd2FuJyxcblx0XHRlcG9jaHM6IFsnQlJPQycsICdST0MnXSxcblx0XHRtb250aE5hbWVzOiBbJ+S4gOaciCcsJ+S6jOaciCcsJ+S4ieaciCcsJ+Wbm+aciCcsJ+S6lOaciCcsJ+WFreaciCcsXG5cdFx0J+S4g+aciCcsJ+WFq+aciCcsJ+S5neaciCcsJ+WNgeaciCcsJ+WNgeS4gOaciCcsJ+WNgeS6jOaciCddLFxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfkuIAnLCfkuownLCfkuIknLCflm5snLCfkupQnLCflha0nLFxuXHRcdCfkuIMnLCflhasnLCfkuZ0nLCfljYEnLCfljYHkuIAnLCfljYHkuownXSxcblx0XHRkYXlOYW1lczogWyfmmJ/mnJ/ml6UnLCfmmJ/mnJ/kuIAnLCfmmJ/mnJ/kuownLCfmmJ/mnJ/kuIknLCfmmJ/mnJ/lm5snLCfmmJ/mnJ/kupQnLCfmmJ/mnJ/lha0nXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+WRqOaXpScsJ+WRqOS4gCcsJ+WRqOS6jCcsJ+WRqOS4iScsJ+WRqOWbmycsJ+WRqOS6lCcsJ+WRqOWFrSddLFxuXHRcdGRheU5hbWVzTWluOiBbJ+aXpScsJ+S4gCcsJ+S6jCcsJ+S4iScsJ+WbmycsJ+S6lCcsJ+WFrSddLFxuXHRcdGRhdGVGb3JtYXQ6ICd5eXl5L21tL2RkJyxcblx0XHRmaXJzdERheTogMSxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMudGFpd2FuLXpoLVRXLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy50YWl3YW4temgtVFcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBodHRwOi8va2VpdGgtd29vZC5uYW1lL2NhbGVuZGFycy5odG1sXHJcbiAgIFRyYWRpdGlvbmFsIENoaW5lc2UgbG9jYWxpc2F0aW9uIGZvciBUYWl3YW5lc2UgY2FsZW5kYXJzIGZvciBqUXVlcnkgdjIuMC4xLlxyXG4gICBXcml0dGVuIGJ5IFJlc3NvbCAocmVzc29sQGdtYWlsLmNvbSkuICovXHJcbihmdW5jdGlvbigkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLnRhaXdhbi5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd6aC1UVyddID0ge1xyXG5cdFx0bmFtZTogJ1RhaXdhbicsXHJcblx0XHRlcG9jaHM6IFsnQlJPQycsICdST0MnXSxcclxuXHRcdG1vbnRoTmFtZXM6IFsn5LiA5pyIJywn5LqM5pyIJywn5LiJ5pyIJywn5Zub5pyIJywn5LqU5pyIJywn5YWt5pyIJyxcclxuXHRcdCfkuIPmnIgnLCflhavmnIgnLCfkuZ3mnIgnLCfljYHmnIgnLCfljYHkuIDmnIgnLCfljYHkuozmnIgnXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfkuIAnLCfkuownLCfkuIknLCflm5snLCfkupQnLCflha0nLFxyXG5cdFx0J+S4gycsJ+WFqycsJ+S5nScsJ+WNgScsJ+WNgeS4gCcsJ+WNgeS6jCddLFxyXG5cdFx0ZGF5TmFtZXM6IFsn5pif5pyf5pelJywn5pif5pyf5LiAJywn5pif5pyf5LqMJywn5pif5pyf5LiJJywn5pif5pyf5ZubJywn5pif5pyf5LqUJywn5pif5pyf5YWtJ10sXHJcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ+WRqOaXpScsJ+WRqOS4gCcsJ+WRqOS6jCcsJ+WRqOS4iScsJ+WRqOWbmycsJ+WRqOS6lCcsJ+WRqOWFrSddLFxyXG5cdFx0ZGF5TmFtZXNNaW46IFsn5pelJywn5LiAJywn5LqMJywn5LiJJywn5ZubJywn5LqUJywn5YWtJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAneXl5eS9tbS9kZCcsXHJcblx0XHRmaXJzdERheTogMSxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.taiwan.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.taiwan.js index 1d56c2e83a3..3ed8515093f 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.taiwan.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.taiwan.js @@ -174,4 +174,4 @@ $.calendars.calendars.taiwan = TaiwanCalendar; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMudGFpd2FuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnRhaXdhbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFRhaXdhbmVzZSAoTWluZ3VvKSBjYWxlbmRhciBmb3IgalF1ZXJ5IHYyLjAuMS5cbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgRmVicnVhcnkgMjAxMC5cbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cblxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxuXG5cdHZhciBncmVnb3JpYW5DYWxlbmRhciA9ICQuY2FsZW5kYXJzLmluc3RhbmNlKCk7XG5cblx0LyoqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBUYWl3YW5lc2UgY2FsZW5kYXIuXG5cdFx0U2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWluZ3VvX2NhbGVuZGFyLlxuXHRcdEBjbGFzcyBUYWl3YW5DYWxlbmRhclxuXHRcdEBwYXJhbSBbbGFuZ3VhZ2U9JyddIHtzdHJpbmd9IFRoZSBsYW5ndWFnZSBjb2RlIChkZWZhdWx0IEVuZ2xpc2gpIGZvciBsb2NhbGlzYXRpb24uICovXG5cdGZ1bmN0aW9uIFRhaXdhbkNhbGVuZGFyKGxhbmd1YWdlKSB7XG5cdFx0dGhpcy5sb2NhbCA9IHRoaXMucmVnaW9uYWxPcHRpb25zW2xhbmd1YWdlIHx8ICcnXSB8fCB0aGlzLnJlZ2lvbmFsT3B0aW9uc1snJ107XG5cdH1cblxuXHRUYWl3YW5DYWxlbmRhci5wcm90b3R5cGUgPSBuZXcgJC5jYWxlbmRhcnMuYmFzZUNhbGVuZGFyO1xuXG5cdCQuZXh0ZW5kKFRhaXdhbkNhbGVuZGFyLnByb3RvdHlwZSwge1xuXHRcdC8qKiBUaGUgY2FsZW5kYXIgbmFtZS5cblx0XHRcdEBtZW1iZXJvZiBUYWl3YW5DYWxlbmRhciAqL1xuXHRcdG5hbWU6ICdUYWl3YW4nLFxuXHRcdC8qKiBKdWxpYW4gZGF0ZSBvZiBzdGFydCBvZiBUYWl3YW4gZXBvY2g6IDEgSmFudWFyeSAxOTEyIENFIChHcmVnb3JpYW4pLlxuXHRcdFx0QG1lbWJlcm9mIFRhaXdhbkNhbGVuZGFyICovXG5cdFx0amRFcG9jaDogMjQxOTQwMi41LFxuXHRcdC8qKiBEaWZmZXJlbmNlIGluIHllYXJzIGJldHdlZW4gVGFpd2FuIGFuZCBHcmVnb3JpYW4gY2FsZW5kYXJzLlxuXHRcdFx0QG1lbWJlcm9mIFRhaXdhbkNhbGVuZGFyICovXG5cdFx0eWVhcnNPZmZzZXQ6IDE5MTEsXG5cdFx0LyoqIERheXMgcGVyIG1vbnRoIGluIGEgY29tbW9uIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgVGFpd2FuQ2FsZW5kYXIgKi9cblx0XHRkYXlzUGVyTW9udGg6IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXSxcblx0XHQvKiogPGNvZGU+dHJ1ZTwvY29kZT4gaWYgaGFzIGEgeWVhciB6ZXJvLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QG1lbWJlcm9mIFRhaXdhbkNhbGVuZGFyICovXG5cdFx0aGFzWWVhclplcm86IGZhbHNlLFxuXHRcdC8qKiBUaGUgbWluaW11bSBtb250aCBudW1iZXIuXG5cdFx0XHRAbWVtYmVyb2YgVGFpd2FuQ2FsZW5kYXIgKi9cblx0XHRtaW5Nb250aDogMSxcblx0XHQvKiogVGhlIGZpcnN0IG1vbnRoIGluIHRoZSB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIFRhaXdhbkNhbGVuZGFyICovXG5cdFx0Zmlyc3RNb250aDogMSxcblx0XHQvKiogVGhlIG1pbmltdW0gZGF5IG51bWJlci5cblx0XHRcdEBtZW1iZXJvZiBUYWl3YW5DYWxlbmRhciAqL1xuXHRcdG1pbkRheTogMSxcblxuXHRcdC8qKiBMb2NhbGlzYXRpb25zIGZvciB0aGUgcGx1Z2luLlxuXHRcdFx0RW50cmllcyBhcmUgb2JqZWN0cyBpbmRleGVkIGJ5IHRoZSBsYW5ndWFnZSBjb2RlICgnJyBiZWluZyB0aGUgZGVmYXVsdCBVUy9FbmdsaXNoKS5cblx0XHRcdEVhY2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMuXG5cdFx0XHRAbWVtYmVyb2YgVGFpd2FuQ2FsZW5kYXJcblx0XHRcdEBwcm9wZXJ0eSBuYW1lIHtzdHJpbmd9IFRoZSBjYWxlbmRhciBuYW1lLlxuXHRcdFx0QHByb3BlcnR5IGVwb2NocyB7c3RyaW5nW119IFRoZSBlcG9jaCBuYW1lcy5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNNaW4ge3N0cmluZ1tdfSBUaGUgbWluaW1hbCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cblx0XHRcdEBwcm9wZXJ0eSBkYXRlRm9ybWF0IHtzdHJpbmd9IFRoZSBkYXRlIGZvcm1hdCBmb3IgdGhpcyBjYWxlbmRhci5cblx0XHRcdFx0XHRTZWUgdGhlIG9wdGlvbnMgb24gPGEgaHJlZj1cIkJhc2VDYWxlbmRhci5odG1sI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4gZm9yIGRldGFpbHMuXG5cdFx0XHRAcHJvcGVydHkgZmlyc3REYXkge251bWJlcn0gVGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBzdGFydGluZyBhdCAwLlxuXHRcdFx0QHByb3BlcnR5IGlzUlRMIHtudW1iZXJ9IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgbG9jYWxpc2F0aW9uIHJlYWRzIHJpZ2h0LXRvLWxlZnQuICovXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7IC8vIExvY2FsaXNhdGlvbnNcblx0XHRcdCcnOiB7XG5cdFx0XHRcdG5hbWU6ICdUYWl3YW4nLFxuXHRcdFx0XHRlcG9jaHM6IFsnQlJPQycsICdST0MnXSxcblx0XHRcdFx0bW9udGhOYW1lczogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJyxcblx0XHRcdFx0J0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10sXG5cdFx0XHRcdG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLFxuXHRcdFx0XHRkYXlOYW1lczogWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddLFxuXHRcdFx0XHRkYXlOYW1lc1Nob3J0OiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxuXHRcdFx0XHRkYXlOYW1lc01pbjogWydTdScsICdNbycsICdUdScsICdXZScsICdUaCcsICdGcicsICdTYSddLFxuXHRcdFx0XHRkYXRlRm9ybWF0OiAneXl5eS9tbS9kZCcsXG5cdFx0XHRcdGZpcnN0RGF5OiAxLFxuXHRcdFx0XHRpc1JUTDogZmFsc2Vcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBpbiBhIGxlYXAgeWVhci5cblx0XHRcdEBtZW1iZXJvZiBUYWl3YW5DYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBpcyBhIGxlYXAgeWVhciwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0bGVhcFllYXI6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyKTtcblx0XHRcdHZhciB5ZWFyID0gdGhpcy5fdDJnWWVhcihkYXRlLnllYXIoKSk7XG5cdFx0XHRyZXR1cm4gZ3JlZ29yaWFuQ2FsZW5kYXIubGVhcFllYXIoeWVhcik7XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgdGhlIHdlZWsgb2YgdGhlIHllYXIgZm9yIGEgZGF0ZSAtIElTTyA4NjAxLlxuXHRcdFx0QG1lbWJlcm9mIFRhaXdhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSB3ZWVrIG9mIHRoZSB5ZWFyLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHR3ZWVrT2ZZZWFyOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIHRoaXMubWluTW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhcik7XG5cdFx0XHR2YXIgeWVhciA9IHRoaXMuX3QyZ1llYXIoZGF0ZS55ZWFyKCkpO1xuXHRcdFx0cmV0dXJuIGdyZWdvcmlhbkNhbGVuZGFyLndlZWtPZlllYXIoeWVhciwgZGF0ZS5tb250aCgpLCBkYXRlLmRheSgpKTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBhIG1vbnRoLlxuXHRcdFx0QG1lbWJlcm9mIFRhaXdhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIG9mIHRoZSBtb250aC5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aC5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgbW9udGguXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgbW9udGgveWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdGRheXNJbk1vbnRoOiBmdW5jdGlvbih5ZWFyLCBtb250aCkge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRNb250aCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbZGF0ZS5tb250aCgpIC0gMV0gK1xuXHRcdFx0XHQoZGF0ZS5tb250aCgpID09PSAyICYmIHRoaXMubGVhcFllYXIoZGF0ZS55ZWFyKCkpID8gMSA6IDApO1xuXHRcdH0sXG5cblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGEgd2VlayBkYXkuXG5cdFx0XHRAbWVtYmVyb2YgVGFpd2FuQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGEgd2VlayBkYXksIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdHdlZWtEYXk6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdHJldHVybiAodGhpcy5kYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSkgfHwgNykgPCA2O1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIEp1bGlhbiBkYXRlIGVxdWl2YWxlbnQgZm9yIHRoaXMgZGF0ZSxcblx0XHRcdGkuZS4gZGF5cyBzaW5jZSBKYW51YXJ5IDEsIDQ3MTMgQkNFIEdyZWVud2ljaCBub29uLlxuXHRcdFx0QG1lbWJlcm9mIFRhaXdhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb252ZXJ0IG9yIHRoZSB5ZWFyIHRvIGNvbnZlcnQuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gY29udmVydC5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGNvbnZlcnQuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBlcXVpdmFsZW50IEp1bGlhbiBkYXRlLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHR0b0pEOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlKTtcblx0XHRcdHZhciB5ZWFyID0gdGhpcy5fdDJnWWVhcihkYXRlLnllYXIoKSk7XG5cdFx0XHRyZXR1cm4gZ3JlZ29yaWFuQ2FsZW5kYXIudG9KRCh5ZWFyLCBkYXRlLm1vbnRoKCksIGRhdGUuZGF5KCkpO1xuXHRcdH0sXG5cblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgZnJvbSBhIEp1bGlhbiBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIFRhaXdhbkNhbGVuZGFyXG5cdFx0XHRAcGFyYW0gamQge251bWJlcn0gVGhlIEp1bGlhbiBkYXRlIHRvIGNvbnZlcnQuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIGVxdWl2YWxlbnQgZGF0ZS4gKi9cblx0XHRmcm9tSkQ6IGZ1bmN0aW9uKGpkKSB7XG5cdFx0XHR2YXIgZGF0ZSA9IGdyZWdvcmlhbkNhbGVuZGFyLmZyb21KRChqZCk7XG5cdFx0XHR2YXIgeWVhciA9IHRoaXMuX2cydFllYXIoZGF0ZS55ZWFyKCkpO1xuXHRcdFx0cmV0dXJuIHRoaXMubmV3RGF0ZSh5ZWFyLCBkYXRlLm1vbnRoKCksIGRhdGUuZGF5KCkpO1xuXHRcdH0sXG5cblx0XHQvKiogQ29udmVydCBUYWl3YW5lc2UgdG8gR3JlZ29yaWFuIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgVGFpd2FuQ2FsZW5kYXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0geWVhciB7bnVtYmVyfSBUaGUgVGFpd2FuZXNlIHllYXIuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb3JyZXNwb25kaW5nIEdyZWdvcmlhbiB5ZWFyLiAqL1xuXHRcdF90MmdZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XG5cdFx0XHRyZXR1cm4geWVhciArIHRoaXMueWVhcnNPZmZzZXQgKyAoeWVhciA+PSAtdGhpcy55ZWFyc09mZnNldCAmJiB5ZWFyIDw9IC0xID8gMSA6IDApO1xuXHRcdH0sXG5cblx0XHQvKiogQ29udmVydCBHcmVnb3JpYW4gdG8gVGFpd2FuZXNlIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgVGFpd2FuQ2FsZW5kYXJcblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0geWVhciB7bnVtYmVyfSBUaGUgR3JlZ29yaWFuIHllYXIuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb3JyZXNwb25kaW5nIFRhaXdhbmVzZSB5ZWFyLiAqL1xuXHRcdF9nMnRZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XG5cdFx0XHRyZXR1cm4geWVhciAtIHRoaXMueWVhcnNPZmZzZXQgLSAoeWVhciA+PSAxICYmIHllYXIgPD0gdGhpcy55ZWFyc09mZnNldCA/IDEgOiAwKTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIFRhaXdhbiBjYWxlbmRhciBpbXBsZW1lbnRhdGlvblxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMudGFpd2FuID0gVGFpd2FuQ2FsZW5kYXI7XG5cbn0pKGpRdWVyeSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMudGFpd2FuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnRhaXdhbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgVGFpd2FuZXNlIChNaW5ndW8pIGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxyXG4gICBXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpIEZlYnJ1YXJ5IDIwMTAuXHJcbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXHJcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xyXG5cclxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxyXG5cclxuXHR2YXIgZ3JlZ29yaWFuQ2FsZW5kYXIgPSAkLmNhbGVuZGFycy5pbnN0YW5jZSgpO1xyXG5cclxuXHQvKiogSW1wbGVtZW50YXRpb24gb2YgdGhlIFRhaXdhbmVzZSBjYWxlbmRhci5cclxuXHRcdFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01pbmd1b19jYWxlbmRhci5cclxuXHRcdEBjbGFzcyBUYWl3YW5DYWxlbmRhclxyXG5cdFx0QHBhcmFtIFtsYW5ndWFnZT0nJ10ge3N0cmluZ30gVGhlIGxhbmd1YWdlIGNvZGUgKGRlZmF1bHQgRW5nbGlzaCkgZm9yIGxvY2FsaXNhdGlvbi4gKi9cclxuXHRmdW5jdGlvbiBUYWl3YW5DYWxlbmRhcihsYW5ndWFnZSkge1xyXG5cdFx0dGhpcy5sb2NhbCA9IHRoaXMucmVnaW9uYWxPcHRpb25zW2xhbmd1YWdlIHx8ICcnXSB8fCB0aGlzLnJlZ2lvbmFsT3B0aW9uc1snJ107XHJcblx0fVxyXG5cclxuXHRUYWl3YW5DYWxlbmRhci5wcm90b3R5cGUgPSBuZXcgJC5jYWxlbmRhcnMuYmFzZUNhbGVuZGFyO1xyXG5cclxuXHQkLmV4dGVuZChUYWl3YW5DYWxlbmRhci5wcm90b3R5cGUsIHtcclxuXHRcdC8qKiBUaGUgY2FsZW5kYXIgbmFtZS5cclxuXHRcdFx0QG1lbWJlcm9mIFRhaXdhbkNhbGVuZGFyICovXHJcblx0XHRuYW1lOiAnVGFpd2FuJyxcclxuXHRcdC8qKiBKdWxpYW4gZGF0ZSBvZiBzdGFydCBvZiBUYWl3YW4gZXBvY2g6IDEgSmFudWFyeSAxOTEyIENFIChHcmVnb3JpYW4pLlxyXG5cdFx0XHRAbWVtYmVyb2YgVGFpd2FuQ2FsZW5kYXIgKi9cclxuXHRcdGpkRXBvY2g6IDI0MTk0MDIuNSxcclxuXHRcdC8qKiBEaWZmZXJlbmNlIGluIHllYXJzIGJldHdlZW4gVGFpd2FuIGFuZCBHcmVnb3JpYW4gY2FsZW5kYXJzLlxyXG5cdFx0XHRAbWVtYmVyb2YgVGFpd2FuQ2FsZW5kYXIgKi9cclxuXHRcdHllYXJzT2Zmc2V0OiAxOTExLFxyXG5cdFx0LyoqIERheXMgcGVyIG1vbnRoIGluIGEgY29tbW9uIHllYXIuXHJcblx0XHRcdEBtZW1iZXJvZiBUYWl3YW5DYWxlbmRhciAqL1xyXG5cdFx0ZGF5c1Blck1vbnRoOiBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0sXHJcblx0XHQvKiogPGNvZGU+dHJ1ZTwvY29kZT4gaWYgaGFzIGEgeWVhciB6ZXJvLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxyXG5cdFx0XHRAbWVtYmVyb2YgVGFpd2FuQ2FsZW5kYXIgKi9cclxuXHRcdGhhc1llYXJaZXJvOiBmYWxzZSxcclxuXHRcdC8qKiBUaGUgbWluaW11bSBtb250aCBudW1iZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBUYWl3YW5DYWxlbmRhciAqL1xyXG5cdFx0bWluTW9udGg6IDEsXHJcblx0XHQvKiogVGhlIGZpcnN0IG1vbnRoIGluIHRoZSB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgVGFpd2FuQ2FsZW5kYXIgKi9cclxuXHRcdGZpcnN0TW9udGg6IDEsXHJcblx0XHQvKiogVGhlIG1pbmltdW0gZGF5IG51bWJlci5cclxuXHRcdFx0QG1lbWJlcm9mIFRhaXdhbkNhbGVuZGFyICovXHJcblx0XHRtaW5EYXk6IDEsXHJcblxyXG5cdFx0LyoqIExvY2FsaXNhdGlvbnMgZm9yIHRoZSBwbHVnaW4uXHJcblx0XHRcdEVudHJpZXMgYXJlIG9iamVjdHMgaW5kZXhlZCBieSB0aGUgbGFuZ3VhZ2UgY29kZSAoJycgYmVpbmcgdGhlIGRlZmF1bHQgVVMvRW5nbGlzaCkuXHJcblx0XHRcdEVhY2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMuXHJcblx0XHRcdEBtZW1iZXJvZiBUYWl3YW5DYWxlbmRhclxyXG5cdFx0XHRAcHJvcGVydHkgbmFtZSB7c3RyaW5nfSBUaGUgY2FsZW5kYXIgbmFtZS5cclxuXHRcdFx0QHByb3BlcnR5IGVwb2NocyB7c3RyaW5nW119IFRoZSBlcG9jaCBuYW1lcy5cclxuXHRcdFx0QHByb3BlcnR5IG1vbnRoTmFtZXMge3N0cmluZ1tdfSBUaGUgbG9uZyBuYW1lcyBvZiB0aGUgbW9udGhzIG9mIHRoZSB5ZWFyLlxyXG5cdFx0XHRAcHJvcGVydHkgbW9udGhOYW1lc1Nob3J0IHtzdHJpbmdbXX0gVGhlIHNob3J0IG5hbWVzIG9mIHRoZSBtb250aHMgb2YgdGhlIHllYXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNTaG9ydCB7c3RyaW5nW119IFRoZSBzaG9ydCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cclxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzTWluIHtzdHJpbmdbXX0gVGhlIG1pbmltYWwgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXRlRm9ybWF0IHtzdHJpbmd9IFRoZSBkYXRlIGZvcm1hdCBmb3IgdGhpcyBjYWxlbmRhci5cclxuXHRcdFx0XHRcdFNlZSB0aGUgb3B0aW9ucyBvbiA8YSBocmVmPVwiQmFzZUNhbGVuZGFyLmh0bWwjZm9ybWF0RGF0ZVwiPjxjb2RlPmZvcm1hdERhdGU8L2NvZGU+PC9hPiBmb3IgZGV0YWlscy5cclxuXHRcdFx0QHByb3BlcnR5IGZpcnN0RGF5IHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlaywgc3RhcnRpbmcgYXQgMC5cclxuXHRcdFx0QHByb3BlcnR5IGlzUlRMIHtudW1iZXJ9IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgbG9jYWxpc2F0aW9uIHJlYWRzIHJpZ2h0LXRvLWxlZnQuICovXHJcblx0XHRyZWdpb25hbE9wdGlvbnM6IHsgLy8gTG9jYWxpc2F0aW9uc1xyXG5cdFx0XHQnJzoge1xyXG5cdFx0XHRcdG5hbWU6ICdUYWl3YW4nLFxyXG5cdFx0XHRcdGVwb2NoczogWydCUk9DJywgJ1JPQyddLFxyXG5cdFx0XHRcdG1vbnRoTmFtZXM6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsXHJcblx0XHRcdFx0J0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10sXHJcblx0XHRcdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXHJcblx0XHRcdFx0ZGF5TmFtZXM6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXSxcclxuXHRcdFx0XHRkYXlOYW1lc1Nob3J0OiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxyXG5cdFx0XHRcdGRheU5hbWVzTWluOiBbJ1N1JywgJ01vJywgJ1R1JywgJ1dlJywgJ1RoJywgJ0ZyJywgJ1NhJ10sXHJcblx0XHRcdFx0ZGF0ZUZvcm1hdDogJ3l5eXkvbW0vZGQnLFxyXG5cdFx0XHRcdGZpcnN0RGF5OiAxLFxyXG5cdFx0XHRcdGlzUlRMOiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgaW4gYSBsZWFwIHllYXIuXHJcblx0XHRcdEBtZW1iZXJvZiBUYWl3YW5DYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgaXMgYSBsZWFwIHllYXIsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRsZWFwWWVhcjogZnVuY3Rpb24oeWVhcikge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIHRoaXMubWluTW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhcik7XHJcblx0XHRcdHZhciB5ZWFyID0gdGhpcy5fdDJnWWVhcihkYXRlLnllYXIoKSk7XHJcblx0XHRcdHJldHVybiBncmVnb3JpYW5DYWxlbmRhci5sZWFwWWVhcih5ZWFyKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB0aGUgd2VlayBvZiB0aGUgeWVhciBmb3IgYSBkYXRlIC0gSVNPIDg2MDEuXHJcblx0XHRcdEBtZW1iZXJvZiBUYWl3YW5DYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSB3ZWVrIG9mIHRoZSB5ZWFyLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0d2Vla09mWWVhcjogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIHRoaXMubWluTW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhcik7XHJcblx0XHRcdHZhciB5ZWFyID0gdGhpcy5fdDJnWWVhcihkYXRlLnllYXIoKSk7XHJcblx0XHRcdHJldHVybiBncmVnb3JpYW5DYWxlbmRhci53ZWVrT2ZZZWFyKHllYXIsIGRhdGUubW9udGgoKSwgZGF0ZS5kYXkoKSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aC5cclxuXHRcdFx0QG1lbWJlcm9mIFRhaXdhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgb2YgdGhlIG1vbnRoLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGguXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgbW9udGguXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBtb250aC95ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRkYXlzSW5Nb250aDogZnVuY3Rpb24oeWVhciwgbW9udGgpIHtcclxuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRNb250aCk7XHJcblx0XHRcdHJldHVybiB0aGlzLmRheXNQZXJNb250aFtkYXRlLm1vbnRoKCkgLSAxXSArXHJcblx0XHRcdFx0KGRhdGUubW9udGgoKSA9PT0gMiAmJiB0aGlzLmxlYXBZZWFyKGRhdGUueWVhcigpKSA/IDEgOiAwKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBhIHdlZWsgZGF5LlxyXG5cdFx0XHRAbWVtYmVyb2YgVGFpd2FuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYSB3ZWVrIGRheSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdHdlZWtEYXk6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcclxuXHRcdFx0cmV0dXJuICh0aGlzLmRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KSB8fCA3KSA8IDY7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgSnVsaWFuIGRhdGUgZXF1aXZhbGVudCBmb3IgdGhpcyBkYXRlLFxyXG5cdFx0XHRpLmUuIGRheXMgc2luY2UgSmFudWFyeSAxLCA0NzEzIEJDRSBHcmVlbndpY2ggbm9vbi5cclxuXHRcdFx0QG1lbWJlcm9mIFRhaXdhbkNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvbnZlcnQgb3IgdGhlIHllYXIgdG8gY29udmVydC5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGNvbnZlcnQuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGNvbnZlcnQuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGVxdWl2YWxlbnQgSnVsaWFuIGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR0b0pEOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5KSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIGRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGUpO1xyXG5cdFx0XHR2YXIgeWVhciA9IHRoaXMuX3QyZ1llYXIoZGF0ZS55ZWFyKCkpO1xyXG5cdFx0XHRyZXR1cm4gZ3JlZ29yaWFuQ2FsZW5kYXIudG9KRCh5ZWFyLCBkYXRlLm1vbnRoKCksIGRhdGUuZGF5KCkpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ3JlYXRlIGEgbmV3IGRhdGUgZnJvbSBhIEp1bGlhbiBkYXRlLlxyXG5cdFx0XHRAbWVtYmVyb2YgVGFpd2FuQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIGpkIHtudW1iZXJ9IFRoZSBKdWxpYW4gZGF0ZSB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZX0gVGhlIGVxdWl2YWxlbnQgZGF0ZS4gKi9cclxuXHRcdGZyb21KRDogZnVuY3Rpb24oamQpIHtcclxuXHRcdFx0dmFyIGRhdGUgPSBncmVnb3JpYW5DYWxlbmRhci5mcm9tSkQoamQpO1xyXG5cdFx0XHR2YXIgeWVhciA9IHRoaXMuX2cydFllYXIoZGF0ZS55ZWFyKCkpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5uZXdEYXRlKHllYXIsIGRhdGUubW9udGgoKSwgZGF0ZS5kYXkoKSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDb252ZXJ0IFRhaXdhbmVzZSB0byBHcmVnb3JpYW4geWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIFRhaXdhbkNhbGVuZGFyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSBUYWl3YW5lc2UgeWVhci5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgY29ycmVzcG9uZGluZyBHcmVnb3JpYW4geWVhci4gKi9cclxuXHRcdF90MmdZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XHJcblx0XHRcdHJldHVybiB5ZWFyICsgdGhpcy55ZWFyc09mZnNldCArICh5ZWFyID49IC10aGlzLnllYXJzT2Zmc2V0ICYmIHllYXIgPD0gLTEgPyAxIDogMCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDb252ZXJ0IEdyZWdvcmlhbiB0byBUYWl3YW5lc2UgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIFRhaXdhbkNhbGVuZGFyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSBHcmVnb3JpYW4geWVhci5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgY29ycmVzcG9uZGluZyBUYWl3YW5lc2UgeWVhci4gKi9cclxuXHRcdF9nMnRZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XHJcblx0XHRcdHJldHVybiB5ZWFyIC0gdGhpcy55ZWFyc09mZnNldCAtICh5ZWFyID49IDEgJiYgeWVhciA8PSB0aGlzLnllYXJzT2Zmc2V0ID8gMSA6IDApO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHQvLyBUYWl3YW4gY2FsZW5kYXIgaW1wbGVtZW50YXRpb25cclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMudGFpd2FuID0gVGFpd2FuQ2FsZW5kYXI7XHJcblxyXG59KShqUXVlcnkpOyJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.thai-th.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.thai-th.js index 7d8c8747e4f..b6a7a252c6b 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.thai-th.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.thai-th.js @@ -23,4 +23,4 @@ }; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMudGhhaS10aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMudGhhaS10aC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFRoYWkgbG9jYWxpc2F0aW9uIGZvciBUaGFpIGNhbGVuZGFycyBmb3IgalF1ZXJ5IHYyLjAuMS5cbiAgIFdyaXR0ZW4gYnkgcGlwbyAocGlwb0BzaXhoZWFkLmNvbSkuICovXG4oZnVuY3Rpb24oJCkge1xuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMudGhhaS5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWyd0aCddID0ge1xuXHRcdG5hbWU6ICdUaGFpJyxcblx0XHRlcG9jaHM6IFsnQkJFJywgJ0JFJ10sXG5cdFx0bW9udGhOYW1lczogWyfguKHguIHguKPguLLguITguKEnLCfguIHguLjguKHguKDguLLguJ7guLHguJnguJjguYwnLCfguKHguLXguJnguLLguITguKEnLCfguYDguKHguKnguLLguKLguJknLCfguJ7guKTguKnguKDguLLguITguKEnLCfguKHguLTguJbguLjguJnguLLguKLguJknLFxuXHRcdCfguIHguKPguIHguI7guLLguITguKEnLCfguKrguLTguIfguKvguLLguITguKEnLCfguIHguLHguJnguKLguLLguKLguJknLCfguJXguLjguKXguLLguITguKEnLCfguJ7guKTguKjguIjguLTguIHguLLguKLguJknLCfguJjguLHguJnguKfguLLguITguKEnXSxcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn4LihLuC4hC4nLCfguIEu4LieLicsJ+C4oeC4tS7guIQuJywn4LmA4LihLuC4oi4nLCfguJ4u4LiELicsJ+C4oeC4tC7guKIuJyxcblx0XHQn4LiBLuC4hC4nLCfguKou4LiELicsJ+C4gS7guKIuJywn4LiVLuC4hC4nLCfguJ4u4LiiLicsJ+C4mC7guIQuJ10sXG5cdFx0ZGF5TmFtZXM6IFsn4Lit4Liy4LiX4Li04LiV4Lii4LmMJywn4LiI4Lix4LiZ4LiX4Lij4LmMJywn4Lit4Lix4LiH4LiE4Liy4LijJywn4Lie4Li44LiYJywn4Lie4Lik4Lir4Lix4Liq4Lia4LiU4Li1Jywn4Lio4Li44LiB4Lij4LmMJywn4LmA4Liq4Liy4Lij4LmMJ10sXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfguK3guLIuJywn4LiILicsJ+C4rS4nLCfguJ4uJywn4Lie4LikLicsJ+C4qC4nLCfguKouJ10sXG5cdFx0ZGF5TmFtZXNNaW46IFsn4Lit4LiyLicsJ+C4iC4nLCfguK0uJywn4LieLicsJ+C4nuC4pC4nLCfguKguJywn4LiqLiddLFxuXHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRmaXJzdERheTogMCxcblx0XHRpc1JUTDogZmFsc2Vcblx0fTtcbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMudGhhaS10aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMudGhhaS10aC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgVGhhaSBsb2NhbGlzYXRpb24gZm9yIFRoYWkgY2FsZW5kYXJzIGZvciBqUXVlcnkgdjIuMC4xLlxyXG4gICBXcml0dGVuIGJ5IHBpcG8gKHBpcG9Ac2l4aGVhZC5jb20pLiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy50aGFpLnByb3RvdHlwZS5yZWdpb25hbE9wdGlvbnNbJ3RoJ10gPSB7XHJcblx0XHRuYW1lOiAnVGhhaScsXHJcblx0XHRlcG9jaHM6IFsnQkJFJywgJ0JFJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ+C4oeC4geC4o+C4suC4hOC4oScsJ+C4geC4uOC4oeC4oOC4suC4nuC4seC4meC4mOC5jCcsJ+C4oeC4teC4meC4suC4hOC4oScsJ+C5gOC4oeC4qeC4suC4ouC4mScsJ+C4nuC4pOC4qeC4oOC4suC4hOC4oScsJ+C4oeC4tOC4luC4uOC4meC4suC4ouC4mScsXHJcblx0XHQn4LiB4Lij4LiB4LiO4Liy4LiE4LihJywn4Liq4Li04LiH4Lir4Liy4LiE4LihJywn4LiB4Lix4LiZ4Lii4Liy4Lii4LiZJywn4LiV4Li44Lil4Liy4LiE4LihJywn4Lie4Lik4Lio4LiI4Li04LiB4Liy4Lii4LiZJywn4LiY4Lix4LiZ4Lin4Liy4LiE4LihJ10sXHJcblx0XHRtb250aE5hbWVzU2hvcnQ6IFsn4LihLuC4hC4nLCfguIEu4LieLicsJ+C4oeC4tS7guIQuJywn4LmA4LihLuC4oi4nLCfguJ4u4LiELicsJ+C4oeC4tC7guKIuJyxcclxuXHRcdCfguIEu4LiELicsJ+C4qi7guIQuJywn4LiBLuC4oi4nLCfguJUu4LiELicsJ+C4ni7guKIuJywn4LiYLuC4hC4nXSxcclxuXHRcdGRheU5hbWVzOiBbJ+C4reC4suC4l+C4tOC4leC4ouC5jCcsJ+C4iOC4seC4meC4l+C4o+C5jCcsJ+C4reC4seC4h+C4hOC4suC4oycsJ+C4nuC4uOC4mCcsJ+C4nuC4pOC4q+C4seC4quC4muC4lOC4tScsJ+C4qOC4uOC4geC4o+C5jCcsJ+C5gOC4quC4suC4o+C5jCddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfguK3guLIuJywn4LiILicsJ+C4rS4nLCfguJ4uJywn4Lie4LikLicsJ+C4qC4nLCfguKouJ10sXHJcblx0XHRkYXlOYW1lc01pbjogWyfguK3guLIuJywn4LiILicsJ+C4rS4nLCfguJ4uJywn4Lie4LikLicsJ+C4qC4nLCfguKouJ10sXHJcblx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRmaXJzdERheTogMCxcclxuXHRcdGlzUlRMOiBmYWxzZVxyXG5cdH07XHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.thai.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.thai.js index 8ece6f466f3..5aaeecd478c 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.thai.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.thai.js @@ -174,4 +174,4 @@ $.calendars.calendars.thai = ThaiCalendar; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMudGhhaS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy50aGFpLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxuICAgVGhhaSBjYWxlbmRhciBmb3IgalF1ZXJ5IHYyLjAuMS5cbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgRmVicnVhcnkgMjAxMC5cbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cblxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxuXG5cdHZhciBncmVnb3JpYW5DYWxlbmRhciA9ICQuY2FsZW5kYXJzLmluc3RhbmNlKCk7XG5cblx0LyoqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBUaGFpIGNhbGVuZGFyLlxuXHRcdFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RoYWlfY2FsZW5kYXIuXG5cdFx0QGNsYXNzIFRoYWlDYWxlbmRhclxuXHRcdEBwYXJhbSBbbGFuZ3VhZ2U9JyddIHtzdHJpbmd9IFRoZSBsYW5ndWFnZSBjb2RlIChkZWZhdWx0IEVuZ2xpc2gpIGZvciBsb2NhbGlzYXRpb24uICovXG5cdGZ1bmN0aW9uIFRoYWlDYWxlbmRhcihsYW5ndWFnZSkge1xuXHRcdHRoaXMubG9jYWwgPSB0aGlzLnJlZ2lvbmFsT3B0aW9uc1tsYW5ndWFnZSB8fCAnJ10gfHwgdGhpcy5yZWdpb25hbE9wdGlvbnNbJyddO1xuXHR9XG5cblx0VGhhaUNhbGVuZGFyLnByb3RvdHlwZSA9IG5ldyAkLmNhbGVuZGFycy5iYXNlQ2FsZW5kYXI7XG5cblx0JC5leHRlbmQoVGhhaUNhbGVuZGFyLnByb3RvdHlwZSwge1xuXHRcdC8qKiBUaGUgY2FsZW5kYXIgbmFtZS5cblx0XHRcdEBtZW1iZXJvZiBUaGFpQ2FsZW5kYXIgKi9cblx0XHRuYW1lOiAnVGhhaScsXG5cdFx0LyoqIEp1bGlhbiBkYXRlIG9mIHN0YXJ0IG9mIFRoYWkgZXBvY2g6IDEgSmFudWFyeSA1NDMgQkNFIChHcmVnb3JpYW4pLlxuXHRcdFx0QG1lbWJlcm9mIFRoYWlDYWxlbmRhciAqL1xuXHRcdGpkRXBvY2g6IDE1MjMwOTguNSxcblx0XHQvKiogRGlmZmVyZW5jZSBpbiB5ZWFycyBiZXR3ZWVuIFRoYWkgYW5kIEdyZWdvcmlhbiBjYWxlbmRhcnMuXG5cdFx0XHRAbWVtYmVyb2YgVGhhaUNhbGVuZGFyICovXG5cdFx0eWVhcnNPZmZzZXQ6IDU0MywgXG5cdFx0LyoqIERheXMgcGVyIG1vbnRoIGluIGEgY29tbW9uIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgVGhhaUNhbGVuZGFyICovXG5cdFx0ZGF5c1Blck1vbnRoOiBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0sXG5cdFx0LyoqIDxjb2RlPnRydWU8L2NvZGU+IGlmIGhhcyBhIHllYXIgemVybywgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEBtZW1iZXJvZiBUaGFpQ2FsZW5kYXIgKi9cblx0XHRoYXNZZWFyWmVybzogZmFsc2UsXG5cdFx0LyoqIFRoZSBtaW5pbXVtIG1vbnRoIG51bWJlci5cblx0XHRcdEBtZW1iZXJvZiBUaGFpQ2FsZW5kYXIgKi9cblx0XHRtaW5Nb250aDogMSxcblx0XHQvKiogVGhlIGZpcnN0IG1vbnRoIGluIHRoZSB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIFRoYWlDYWxlbmRhciAqL1xuXHRcdGZpcnN0TW9udGg6IDEsXG5cdFx0LyoqIFRoZSBtaW5pbXVtIGRheSBudW1iZXIuXG5cdFx0XHRAbWVtYmVyb2YgVGhhaUNhbGVuZGFyICovXG5cdFx0bWluRGF5OiAxLFxuXG5cdFx0LyoqIExvY2FsaXNhdGlvbnMgZm9yIHRoZSBwbHVnaW4uXG5cdFx0XHRFbnRyaWVzIGFyZSBvYmplY3RzIGluZGV4ZWQgYnkgdGhlIGxhbmd1YWdlIGNvZGUgKCcnIGJlaW5nIHRoZSBkZWZhdWx0IFVTL0VuZ2xpc2gpLlxuXHRcdFx0RWFjaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcy5cblx0XHRcdEBtZW1iZXJvZiBUaGFpQ2FsZW5kYXJcblx0XHRcdEBwcm9wZXJ0eSBuYW1lIHtzdHJpbmd9IFRoZSBjYWxlbmRhciBuYW1lLlxuXHRcdFx0QHByb3BlcnR5IGVwb2NocyB7c3RyaW5nW119IFRoZSBlcG9jaCBuYW1lcy5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNNaW4ge3N0cmluZ1tdfSBUaGUgbWluaW1hbCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cblx0XHRcdEBwcm9wZXJ0eSBkYXRlRm9ybWF0IHtzdHJpbmd9IFRoZSBkYXRlIGZvcm1hdCBmb3IgdGhpcyBjYWxlbmRhci5cblx0XHRcdFx0XHRTZWUgdGhlIG9wdGlvbnMgb24gPGEgaHJlZj1cIkJhc2VDYWxlbmRhci5odG1sI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4gZm9yIGRldGFpbHMuXG5cdFx0XHRAcHJvcGVydHkgZmlyc3REYXkge251bWJlcn0gVGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBzdGFydGluZyBhdCAwLlxuXHRcdFx0QHByb3BlcnR5IGlzUlRMIHtudW1iZXJ9IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgbG9jYWxpc2F0aW9uIHJlYWRzIHJpZ2h0LXRvLWxlZnQuICovXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7IC8vIExvY2FsaXNhdGlvbnNcblx0XHRcdCcnOiB7XG5cdFx0XHRcdG5hbWU6ICdUaGFpJyxcblx0XHRcdFx0ZXBvY2hzOiBbJ0JCRScsICdCRSddLFxuXHRcdFx0XHRtb250aE5hbWVzOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLFxuXHRcdFx0XHQnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXSxcblx0XHRcdFx0bW9udGhOYW1lc1Nob3J0OiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG5cdFx0XHRcdGRheU5hbWVzOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J10sXG5cdFx0XHRcdGRheU5hbWVzU2hvcnQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG5cdFx0XHRcdGRheU5hbWVzTWluOiBbJ1N1JywgJ01vJywgJ1R1JywgJ1dlJywgJ1RoJywgJ0ZyJywgJ1NhJ10sXG5cdFx0XHRcdGRhdGVGb3JtYXQ6ICdkZC9tbS95eXl5Jyxcblx0XHRcdFx0Zmlyc3REYXk6IDAsXG5cdFx0XHRcdGlzUlRMOiBmYWxzZVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGluIGEgbGVhcCB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIFRoYWlDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBpcyBhIGxlYXAgeWVhciwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0bGVhcFllYXI6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyKTtcblx0XHRcdHZhciB5ZWFyID0gdGhpcy5fdDJnWWVhcihkYXRlLnllYXIoKSk7XG5cdFx0XHRyZXR1cm4gZ3JlZ29yaWFuQ2FsZW5kYXIubGVhcFllYXIoeWVhcik7XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgdGhlIHdlZWsgb2YgdGhlIHllYXIgZm9yIGEgZGF0ZSAtIElTTyA4NjAxLlxuXHRcdFx0QG1lbWJlcm9mIFRoYWlDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBleGFtaW5lLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgd2VlayBvZiB0aGUgeWVhci5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0d2Vla09mWWVhcjogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIpO1xuXHRcdFx0dmFyIHllYXIgPSB0aGlzLl90MmdZZWFyKGRhdGUueWVhcigpKTtcblx0XHRcdHJldHVybiBncmVnb3JpYW5DYWxlbmRhci53ZWVrT2ZZZWFyKHllYXIsIGRhdGUubW9udGgoKSwgZGF0ZS5kYXkoKSk7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aC5cblx0XHRcdEBtZW1iZXJvZiBUaGFpQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgb2YgdGhlIG1vbnRoLlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoLlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBtb250aC5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBtb250aC95ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0ZGF5c0luTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZE1vbnRoKTtcblx0XHRcdHJldHVybiB0aGlzLmRheXNQZXJNb250aFtkYXRlLm1vbnRoKCkgLSAxXSArXG5cdFx0XHRcdChkYXRlLm1vbnRoKCkgPT09IDIgJiYgdGhpcy5sZWFwWWVhcihkYXRlLnllYXIoKSkgPyAxIDogMCk7XG5cdFx0fSxcblxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgYSB3ZWVrIGRheS5cblx0XHRcdEBtZW1iZXJvZiBUaGFpQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGEgd2VlayBkYXksIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdHdlZWtEYXk6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcblx0XHRcdHJldHVybiAodGhpcy5kYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSkgfHwgNykgPCA2O1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIEp1bGlhbiBkYXRlIGVxdWl2YWxlbnQgZm9yIHRoaXMgZGF0ZSxcblx0XHRcdGkuZS4gZGF5cyBzaW5jZSBKYW51YXJ5IDEsIDQ3MTMgQkNFIEdyZWVud2ljaCBub29uLlxuXHRcdFx0QG1lbWJlcm9mIFRoYWlDYWxlbmRhclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gY29udmVydCBvciB0aGUgeWVhciB0byBjb252ZXJ0LlxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGNvbnZlcnQuXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBjb252ZXJ0LlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgZXF1aXZhbGVudCBKdWxpYW4gZGF0ZS5cblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXG5cdFx0dG9KRDogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCBtb250aCwgZGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZSk7XG5cdFx0XHR2YXIgeWVhciA9IHRoaXMuX3QyZ1llYXIoZGF0ZS55ZWFyKCkpO1xuXHRcdFx0cmV0dXJuIGdyZWdvcmlhbkNhbGVuZGFyLnRvSkQoeWVhciwgZGF0ZS5tb250aCgpLCBkYXRlLmRheSgpKTtcblx0XHR9LFxuXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIGZyb20gYSBKdWxpYW4gZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBUaGFpQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSBqZCB7bnVtYmVyfSBUaGUgSnVsaWFuIGRhdGUgdG8gY29udmVydC5cblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgZXF1aXZhbGVudCBkYXRlLiAqL1xuXHRcdGZyb21KRDogZnVuY3Rpb24oamQpIHtcblx0XHRcdHZhciBkYXRlID0gZ3JlZ29yaWFuQ2FsZW5kYXIuZnJvbUpEKGpkKTtcblx0XHRcdHZhciB5ZWFyID0gdGhpcy5fZzJ0WWVhcihkYXRlLnllYXIoKSk7XG5cdFx0XHRyZXR1cm4gdGhpcy5uZXdEYXRlKHllYXIsIGRhdGUubW9udGgoKSwgZGF0ZS5kYXkoKSk7XG5cdFx0fSxcblxuXHRcdC8qKiBDb252ZXJ0IFRoYWkgdG8gR3JlZ29yaWFuIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgVGhhaUNhbGVuZGFyXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIFRoYWkgeWVhci5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGNvcnJlc3BvbmRpbmcgR3JlZ29yaWFuIHllYXIuICovXG5cdFx0X3QyZ1llYXI6IGZ1bmN0aW9uKHllYXIpIHtcblx0XHRcdHJldHVybiB5ZWFyIC0gdGhpcy55ZWFyc09mZnNldCAtICh5ZWFyID49IDEgJiYgeWVhciA8PSB0aGlzLnllYXJzT2Zmc2V0ID8gMSA6IDApO1xuXHRcdH0sXG5cblx0XHQvKiogQ29udmVydCBHcmVnb3JpYW4gdG8gVGhhaSB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIFRoYWlDYWxlbmRhclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSB5ZWFyIHtudW1iZXJ9IFRoZSBHcmVnb3JpYW4geWVhci5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGNvcnJlc3BvbmRpbmcgVGhhaSB5ZWFyLiAqL1xuXHRcdF9nMnRZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XG5cdFx0XHRyZXR1cm4geWVhciArIHRoaXMueWVhcnNPZmZzZXQgKyAoeWVhciA+PSAtdGhpcy55ZWFyc09mZnNldCAmJiB5ZWFyIDw9IC0xID8gMSA6IDApO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gVGhhaSBjYWxlbmRhciBpbXBsZW1lbnRhdGlvblxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMudGhhaSA9IFRoYWlDYWxlbmRhcjtcblxufSkoalF1ZXJ5KTsiXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMudGhhaS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNhbGVuZGFycy50aGFpLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogaHR0cDovL2tlaXRoLXdvb2QubmFtZS9jYWxlbmRhcnMuaHRtbFxyXG4gICBUaGFpIGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxyXG4gICBXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpIEZlYnJ1YXJ5IDIwMTAuXHJcbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwOi8va2VpdGgtd29vZC5uYW1lL2xpY2VuY2UuaHRtbCkgbGljZW5zZS4gXHJcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xyXG5cclxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxyXG5cclxuXHR2YXIgZ3JlZ29yaWFuQ2FsZW5kYXIgPSAkLmNhbGVuZGFycy5pbnN0YW5jZSgpO1xyXG5cclxuXHQvKiogSW1wbGVtZW50YXRpb24gb2YgdGhlIFRoYWkgY2FsZW5kYXIuXHJcblx0XHRTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9UaGFpX2NhbGVuZGFyLlxyXG5cdFx0QGNsYXNzIFRoYWlDYWxlbmRhclxyXG5cdFx0QHBhcmFtIFtsYW5ndWFnZT0nJ10ge3N0cmluZ30gVGhlIGxhbmd1YWdlIGNvZGUgKGRlZmF1bHQgRW5nbGlzaCkgZm9yIGxvY2FsaXNhdGlvbi4gKi9cclxuXHRmdW5jdGlvbiBUaGFpQ2FsZW5kYXIobGFuZ3VhZ2UpIHtcclxuXHRcdHRoaXMubG9jYWwgPSB0aGlzLnJlZ2lvbmFsT3B0aW9uc1tsYW5ndWFnZSB8fCAnJ10gfHwgdGhpcy5yZWdpb25hbE9wdGlvbnNbJyddO1xyXG5cdH1cclxuXHJcblx0VGhhaUNhbGVuZGFyLnByb3RvdHlwZSA9IG5ldyAkLmNhbGVuZGFycy5iYXNlQ2FsZW5kYXI7XHJcblxyXG5cdCQuZXh0ZW5kKFRoYWlDYWxlbmRhci5wcm90b3R5cGUsIHtcclxuXHRcdC8qKiBUaGUgY2FsZW5kYXIgbmFtZS5cclxuXHRcdFx0QG1lbWJlcm9mIFRoYWlDYWxlbmRhciAqL1xyXG5cdFx0bmFtZTogJ1RoYWknLFxyXG5cdFx0LyoqIEp1bGlhbiBkYXRlIG9mIHN0YXJ0IG9mIFRoYWkgZXBvY2g6IDEgSmFudWFyeSA1NDMgQkNFIChHcmVnb3JpYW4pLlxyXG5cdFx0XHRAbWVtYmVyb2YgVGhhaUNhbGVuZGFyICovXHJcblx0XHRqZEVwb2NoOiAxNTIzMDk4LjUsXHJcblx0XHQvKiogRGlmZmVyZW5jZSBpbiB5ZWFycyBiZXR3ZWVuIFRoYWkgYW5kIEdyZWdvcmlhbiBjYWxlbmRhcnMuXHJcblx0XHRcdEBtZW1iZXJvZiBUaGFpQ2FsZW5kYXIgKi9cclxuXHRcdHllYXJzT2Zmc2V0OiA1NDMsIFxyXG5cdFx0LyoqIERheXMgcGVyIG1vbnRoIGluIGEgY29tbW9uIHllYXIuXHJcblx0XHRcdEBtZW1iZXJvZiBUaGFpQ2FsZW5kYXIgKi9cclxuXHRcdGRheXNQZXJNb250aDogWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdLFxyXG5cdFx0LyoqIDxjb2RlPnRydWU8L2NvZGU+IGlmIGhhcyBhIHllYXIgemVybywgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QG1lbWJlcm9mIFRoYWlDYWxlbmRhciAqL1xyXG5cdFx0aGFzWWVhclplcm86IGZhbHNlLFxyXG5cdFx0LyoqIFRoZSBtaW5pbXVtIG1vbnRoIG51bWJlci5cclxuXHRcdFx0QG1lbWJlcm9mIFRoYWlDYWxlbmRhciAqL1xyXG5cdFx0bWluTW9udGg6IDEsXHJcblx0XHQvKiogVGhlIGZpcnN0IG1vbnRoIGluIHRoZSB5ZWFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgVGhhaUNhbGVuZGFyICovXHJcblx0XHRmaXJzdE1vbnRoOiAxLFxyXG5cdFx0LyoqIFRoZSBtaW5pbXVtIGRheSBudW1iZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBUaGFpQ2FsZW5kYXIgKi9cclxuXHRcdG1pbkRheTogMSxcclxuXHJcblx0XHQvKiogTG9jYWxpc2F0aW9ucyBmb3IgdGhlIHBsdWdpbi5cclxuXHRcdFx0RW50cmllcyBhcmUgb2JqZWN0cyBpbmRleGVkIGJ5IHRoZSBsYW5ndWFnZSBjb2RlICgnJyBiZWluZyB0aGUgZGVmYXVsdCBVUy9FbmdsaXNoKS5cclxuXHRcdFx0RWFjaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcy5cclxuXHRcdFx0QG1lbWJlcm9mIFRoYWlDYWxlbmRhclxyXG5cdFx0XHRAcHJvcGVydHkgbmFtZSB7c3RyaW5nfSBUaGUgY2FsZW5kYXIgbmFtZS5cclxuXHRcdFx0QHByb3BlcnR5IGVwb2NocyB7c3RyaW5nW119IFRoZSBlcG9jaCBuYW1lcy5cclxuXHRcdFx0QHByb3BlcnR5IG1vbnRoTmFtZXMge3N0cmluZ1tdfSBUaGUgbG9uZyBuYW1lcyBvZiB0aGUgbW9udGhzIG9mIHRoZSB5ZWFyLlxyXG5cdFx0XHRAcHJvcGVydHkgbW9udGhOYW1lc1Nob3J0IHtzdHJpbmdbXX0gVGhlIHNob3J0IG5hbWVzIG9mIHRoZSBtb250aHMgb2YgdGhlIHllYXIuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXNTaG9ydCB7c3RyaW5nW119IFRoZSBzaG9ydCBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cclxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzTWluIHtzdHJpbmdbXX0gVGhlIG1pbmltYWwgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXRlRm9ybWF0IHtzdHJpbmd9IFRoZSBkYXRlIGZvcm1hdCBmb3IgdGhpcyBjYWxlbmRhci5cclxuXHRcdFx0XHRcdFNlZSB0aGUgb3B0aW9ucyBvbiA8YSBocmVmPVwiQmFzZUNhbGVuZGFyLmh0bWwjZm9ybWF0RGF0ZVwiPjxjb2RlPmZvcm1hdERhdGU8L2NvZGU+PC9hPiBmb3IgZGV0YWlscy5cclxuXHRcdFx0QHByb3BlcnR5IGZpcnN0RGF5IHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlaywgc3RhcnRpbmcgYXQgMC5cclxuXHRcdFx0QHByb3BlcnR5IGlzUlRMIHtudW1iZXJ9IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgbG9jYWxpc2F0aW9uIHJlYWRzIHJpZ2h0LXRvLWxlZnQuICovXHJcblx0XHRyZWdpb25hbE9wdGlvbnM6IHsgLy8gTG9jYWxpc2F0aW9uc1xyXG5cdFx0XHQnJzoge1xyXG5cdFx0XHRcdG5hbWU6ICdUaGFpJyxcclxuXHRcdFx0XHRlcG9jaHM6IFsnQkJFJywgJ0JFJ10sXHJcblx0XHRcdFx0bW9udGhOYW1lczogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJyxcclxuXHRcdFx0XHQnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXSxcclxuXHRcdFx0XHRtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXSxcclxuXHRcdFx0XHRkYXlOYW1lczogWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddLFxyXG5cdFx0XHRcdGRheU5hbWVzU2hvcnQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXHJcblx0XHRcdFx0ZGF5TmFtZXNNaW46IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcclxuXHRcdFx0XHRkYXRlRm9ybWF0OiAnZGQvbW0veXl5eScsXHJcblx0XHRcdFx0Zmlyc3REYXk6IDAsXHJcblx0XHRcdFx0aXNSVEw6IGZhbHNlXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIHRoaXMgZGF0ZSBpcyBpbiBhIGxlYXAgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIFRoYWlDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgaXMgYSBsZWFwIHllYXIsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRsZWFwWWVhcjogZnVuY3Rpb24oeWVhcikge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIHRoaXMubWluTW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhcik7XHJcblx0XHRcdHZhciB5ZWFyID0gdGhpcy5fdDJnWWVhcihkYXRlLnllYXIoKSk7XHJcblx0XHRcdHJldHVybiBncmVnb3JpYW5DYWxlbmRhci5sZWFwWWVhcih5ZWFyKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIERldGVybWluZSB0aGUgd2VlayBvZiB0aGUgeWVhciBmb3IgYSBkYXRlIC0gSVNPIDg2MDEuXHJcblx0XHRcdEBtZW1iZXJvZiBUaGFpQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgd2VlayBvZiB0aGUgeWVhci5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdHdlZWtPZlllYXI6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcclxuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIpO1xyXG5cdFx0XHR2YXIgeWVhciA9IHRoaXMuX3QyZ1llYXIoZGF0ZS55ZWFyKCkpO1xyXG5cdFx0XHRyZXR1cm4gZ3JlZ29yaWFuQ2FsZW5kYXIud2Vla09mWWVhcih5ZWFyLCBkYXRlLm1vbnRoKCksIGRhdGUuZGF5KCkpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgbW9udGguXHJcblx0XHRcdEBtZW1iZXJvZiBUaGFpQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciBvZiB0aGUgbW9udGguXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aC5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBtb250aC5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIG1vbnRoL3llYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdGRheXNJbk1vbnRoOiBmdW5jdGlvbih5ZWFyLCBtb250aCkge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZE1vbnRoKTtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW2RhdGUubW9udGgoKSAtIDFdICtcclxuXHRcdFx0XHQoZGF0ZS5tb250aCgpID09PSAyICYmIHRoaXMubGVhcFllYXIoZGF0ZS55ZWFyKCkpID8gMSA6IDApO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGEgd2VlayBkYXkuXHJcblx0XHRcdEBtZW1iZXJvZiBUaGFpQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge0NEYXRlfG51bWJlcn0gVGhlIGRhdGUgdG8gZXhhbWluZSBvciB0aGUgeWVhciB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYSB3ZWVrIGRheSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cclxuXHRcdHdlZWtEYXk6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBkYXkpIHtcclxuXHRcdFx0cmV0dXJuICh0aGlzLmRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KSB8fCA3KSA8IDY7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgSnVsaWFuIGRhdGUgZXF1aXZhbGVudCBmb3IgdGhpcyBkYXRlLFxyXG5cdFx0XHRpLmUuIGRheXMgc2luY2UgSmFudWFyeSAxLCA0NzEzIEJDRSBHcmVlbndpY2ggbm9vbi5cclxuXHRcdFx0QG1lbWJlcm9mIFRoYWlDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBjb252ZXJ0IG9yIHRoZSB5ZWFyIHRvIGNvbnZlcnQuXHJcblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcGFyYW0gW2RheV0ge251bWJlcn0gVGhlIGRheSB0byBjb252ZXJ0LlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBlcXVpdmFsZW50IEp1bGlhbiBkYXRlLlxyXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xyXG5cdFx0dG9KRDogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlKTtcclxuXHRcdFx0dmFyIHllYXIgPSB0aGlzLl90MmdZZWFyKGRhdGUueWVhcigpKTtcclxuXHRcdFx0cmV0dXJuIGdyZWdvcmlhbkNhbGVuZGFyLnRvSkQoeWVhciwgZGF0ZS5tb250aCgpLCBkYXRlLmRheSgpKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIGZyb20gYSBKdWxpYW4gZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIFRoYWlDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0gamQge251bWJlcn0gVGhlIEp1bGlhbiBkYXRlIHRvIGNvbnZlcnQuXHJcblx0XHRcdEByZXR1cm4ge0NEYXRlfSBUaGUgZXF1aXZhbGVudCBkYXRlLiAqL1xyXG5cdFx0ZnJvbUpEOiBmdW5jdGlvbihqZCkge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IGdyZWdvcmlhbkNhbGVuZGFyLmZyb21KRChqZCk7XHJcblx0XHRcdHZhciB5ZWFyID0gdGhpcy5fZzJ0WWVhcihkYXRlLnllYXIoKSk7XHJcblx0XHRcdHJldHVybiB0aGlzLm5ld0RhdGUoeWVhciwgZGF0ZS5tb250aCgpLCBkYXRlLmRheSgpKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENvbnZlcnQgVGhhaSB0byBHcmVnb3JpYW4geWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIFRoYWlDYWxlbmRhclxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0geWVhciB7bnVtYmVyfSBUaGUgVGhhaSB5ZWFyLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb3JyZXNwb25kaW5nIEdyZWdvcmlhbiB5ZWFyLiAqL1xyXG5cdFx0X3QyZ1llYXI6IGZ1bmN0aW9uKHllYXIpIHtcclxuXHRcdFx0cmV0dXJuIHllYXIgLSB0aGlzLnllYXJzT2Zmc2V0IC0gKHllYXIgPj0gMSAmJiB5ZWFyIDw9IHRoaXMueWVhcnNPZmZzZXQgPyAxIDogMCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBDb252ZXJ0IEdyZWdvcmlhbiB0byBUaGFpIHllYXIuXHJcblx0XHRcdEBtZW1iZXJvZiBUaGFpQ2FsZW5kYXJcclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIEdyZWdvcmlhbiB5ZWFyLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBjb3JyZXNwb25kaW5nIFRoYWkgeWVhci4gKi9cclxuXHRcdF9nMnRZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XHJcblx0XHRcdHJldHVybiB5ZWFyICsgdGhpcy55ZWFyc09mZnNldCArICh5ZWFyID49IC10aGlzLnllYXJzT2Zmc2V0ICYmIHllYXIgPD0gLTEgPyAxIDogMCk7XHJcblx0XHR9XHJcblx0fSk7XHJcblxyXG5cdC8vIFRoYWkgY2FsZW5kYXIgaW1wbGVtZW50YXRpb25cclxuXHQkLmNhbGVuZGFycy5jYWxlbmRhcnMudGhhaSA9IFRoYWlDYWxlbmRhcjtcclxuXHJcbn0pKGpRdWVyeSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ummalqura-ar.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ummalqura-ar.js index a2bf5fed8bc..d671f44dc85 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ummalqura-ar.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ummalqura-ar.js @@ -21,4 +21,4 @@ }; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMudW1tYWxxdXJhLWFyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnVtbWFscXVyYS1hci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIEFyYWJpYyBsb2NhbGlzYXRpb24gZm9yIFVtbUFsUXVyYSBjYWxlbmRhciBmb3IgalF1ZXJ5IHYyLjAuMS5cbiAgIFdyaXR0ZW4gYnkgQW1ybyBPc2FtYSBNYXJjaCAyMDEzLiAqL1xuKGZ1bmN0aW9uICgkKSB7XG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy51bW1hbHF1cmEucHJvdG90eXBlLnJlZ2lvbmFsT3B0aW9uc1snYXInXSA9IHtcblx0XHRuYW1lOiAnVW1tQWxRdXJhJywgLy8gVGhlIGNhbGVuZGFyIG5hbWVcblx0XHRlcG9jaHM6IFsnQkFNJywgJ0FNJ10sXG5cdFx0bW9udGhOYW1lczogWyfYp9mE2YXYrdix2ZHZhScsICfYtdmB2LEnLCAn2LHYqNmK2Lkg2KfZhNij2YjZhCcsICfYsdio2YrYuSDYp9mE2KvYp9mG2YonLCAn2KzZhdin2K/ZiSDYp9mE2KfZiNmEJywgJ9is2YXYp9iv2Ykg2KfZhNii2K7YsScsICfYsdis2KgnLCAn2LTYudio2KfZhicsICfYsdmF2LbYp9mGJywgJ9i02YjZkdin2YQnLCAn2LDZiCDYp9mE2YLYudiv2KknLCAn2LDZiCDYp9mE2K3YrNipJ10sXG5cdFx0bW9udGhOYW1lc1Nob3J0OiBbJ9in2YTZhdit2LHZkdmFJywgJ9i12YHYsScsICfYsdio2YrYuSDYp9mE2KPZiNmEJywgJ9ix2KjZiti5INin2YTYq9in2YbZiicsICfYrNmF2KfYr9mJINin2YTYp9mI2YQnLCAn2KzZhdin2K/ZiSDYp9mE2KLYrtixJywgJ9ix2KzYqCcsICfYtNi52KjYp9mGJywgJ9ix2YXYttin2YYnLCAn2LTZiNmR2KfZhCcsICfYsNmIINin2YTZgti52K/YqScsICfYsNmIINin2YTYrdis2KknXSxcblx0XHRkYXlOYW1lczogWyfYp9mE2KPYrdivJywgJ9in2YTYpdir2YbZitmGJywgJ9in2YTYq9mE2KfYq9in2KEnLCAn2KfZhNij2LHYqNi52KfYoScsICfYp9mE2K7ZhdmK2LMnLCAn2KfZhNis2YXYudipJywgJ9in2YTYs9io2KonXSxcblx0XHRkYXlOYW1lc01pbjogWyfYp9mE2KPYrdivJywgJ9in2YTYpdir2YbZitmGJywgJ9in2YTYq9mE2KfYq9in2KEnLCAn2KfZhNij2LHYqNi52KfYoScsICfYp9mE2K7ZhdmK2LMnLCAn2KfZhNis2YXYudipJywgJ9in2YTYs9io2KonXSxcblx0XHRkYXlOYW1lc1Nob3J0OiBbJ9in2YTYo9it2K8nLCAn2KfZhNil2KvZhtmK2YYnLCAn2KfZhNir2YTYp9ir2KfYoScsICfYp9mE2KPYsdio2LnYp9ihJywgJ9in2YTYrtmF2YrYsycsICfYp9mE2KzZhdi52KknLCAn2KfZhNiz2KjYqiddLFxuXHRcdGRhdGVGb3JtYXQ6ICd5eXl5L21tL2RkJywgLy8gU2VlIGZvcm1hdCBvcHRpb25zIG9uIEJhc2VDYWxlbmRhci5mb3JtYXREYXRlXG5cdFx0Zmlyc3REYXk6IDYsIC8vIFRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWssIFNhdCA9IDAsIFN1biA9IDEsIC4uLlxuXHRcdGlzUlRMOiB0cnVlIC8vIFRydWUgaWYgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZSwgZmFsc2UgaWYgbGVmdC10by1yaWdodFxuXHR9O1xufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMudW1tYWxxdXJhLWFyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnVtbWFscXVyYS1hci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgQXJhYmljIGxvY2FsaXNhdGlvbiBmb3IgVW1tQWxRdXJhIGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxyXG4gICBXcml0dGVuIGJ5IEFtcm8gT3NhbWEgTWFyY2ggMjAxMy4gKi9cclxuKGZ1bmN0aW9uICgkKSB7XHJcblx0JC5jYWxlbmRhcnMuY2FsZW5kYXJzLnVtbWFscXVyYS5wcm90b3R5cGUucmVnaW9uYWxPcHRpb25zWydhciddID0ge1xyXG5cdFx0bmFtZTogJ1VtbUFsUXVyYScsIC8vIFRoZSBjYWxlbmRhciBuYW1lXHJcblx0XHRlcG9jaHM6IFsnQkFNJywgJ0FNJ10sXHJcblx0XHRtb250aE5hbWVzOiBbJ9in2YTZhdit2LHZkdmFJywgJ9i12YHYsScsICfYsdio2YrYuSDYp9mE2KPZiNmEJywgJ9ix2KjZiti5INin2YTYq9in2YbZiicsICfYrNmF2KfYr9mJINin2YTYp9mI2YQnLCAn2KzZhdin2K/ZiSDYp9mE2KLYrtixJywgJ9ix2KzYqCcsICfYtNi52KjYp9mGJywgJ9ix2YXYttin2YYnLCAn2LTZiNmR2KfZhCcsICfYsNmIINin2YTZgti52K/YqScsICfYsNmIINin2YTYrdis2KknXSxcclxuXHRcdG1vbnRoTmFtZXNTaG9ydDogWyfYp9mE2YXYrdix2ZHZhScsICfYtdmB2LEnLCAn2LHYqNmK2Lkg2KfZhNij2YjZhCcsICfYsdio2YrYuSDYp9mE2KvYp9mG2YonLCAn2KzZhdin2K/ZiSDYp9mE2KfZiNmEJywgJ9is2YXYp9iv2Ykg2KfZhNii2K7YsScsICfYsdis2KgnLCAn2LTYudio2KfZhicsICfYsdmF2LbYp9mGJywgJ9i02YjZkdin2YQnLCAn2LDZiCDYp9mE2YLYudiv2KknLCAn2LDZiCDYp9mE2K3YrNipJ10sXHJcblx0XHRkYXlOYW1lczogWyfYp9mE2KPYrdivJywgJ9in2YTYpdir2YbZitmGJywgJ9in2YTYq9mE2KfYq9in2KEnLCAn2KfZhNij2LHYqNi52KfYoScsICfYp9mE2K7ZhdmK2LMnLCAn2KfZhNis2YXYudipJywgJ9in2YTYs9io2KonXSxcclxuXHRcdGRheU5hbWVzTWluOiBbJ9in2YTYo9it2K8nLCAn2KfZhNil2KvZhtmK2YYnLCAn2KfZhNir2YTYp9ir2KfYoScsICfYp9mE2KPYsdio2LnYp9ihJywgJ9in2YTYrtmF2YrYsycsICfYp9mE2KzZhdi52KknLCAn2KfZhNiz2KjYqiddLFxyXG5cdFx0ZGF5TmFtZXNTaG9ydDogWyfYp9mE2KPYrdivJywgJ9in2YTYpdir2YbZitmGJywgJ9in2YTYq9mE2KfYq9in2KEnLCAn2KfZhNij2LHYqNi52KfYoScsICfYp9mE2K7ZhdmK2LMnLCAn2KfZhNis2YXYudipJywgJ9in2YTYs9io2KonXSxcclxuXHRcdGRhdGVGb3JtYXQ6ICd5eXl5L21tL2RkJywgLy8gU2VlIGZvcm1hdCBvcHRpb25zIG9uIEJhc2VDYWxlbmRhci5mb3JtYXREYXRlXHJcblx0XHRmaXJzdERheTogNiwgLy8gVGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlaywgU2F0ID0gMCwgU3VuID0gMSwgLi4uXHJcblx0XHRpc1JUTDogdHJ1ZSAvLyBUcnVlIGlmIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2UsIGZhbHNlIGlmIGxlZnQtdG8tcmlnaHRcclxuXHR9O1xyXG59KShqUXVlcnkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ummalqura.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ummalqura.js index 32247855506..110059bc89b 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ummalqura.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ummalqura.js @@ -354,4 +354,4 @@ })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMudW1tYWxxdXJhLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnVtbWFscXVyYS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIFVtbUFsUXVyYSBjYWxlbmRhciBmb3IgalF1ZXJ5IHYyLjAuMS5cbiAgIFdyaXR0ZW4gYnkgQW1ybyBPc2FtYSBNYXJjaCAyMDEzLlxuICAgTW9kaWZpZWQgYnkgQmlubm9vaC5jb20gJiB3d3cuZWxtLnNhIC0gMjAxNCAtIEFkZGVkIGRhdGVzIGJhY2sgdG8gMTI3NiBIaWpyaSB5ZWFyLlxuICAgQXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvbGljZW5jZS5odG1sKSBsaWNlbnNlLiBcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xuXG4oZnVuY3Rpb24gKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxuXG5cdC8qKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgVW1tQWxRdXJhIG9yICdzYXVkaScgY2FsZW5kYXIuXG5cdFx0U2VlIGFsc28gPGEgaHJlZj1cImh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSXNsYW1pY19jYWxlbmRhciNTYXVkaV9BcmFiaWEuMjdzX1VtbV9hbC1RdXJhX2NhbGVuZGFyXCI+aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Jc2xhbWljX2NhbGVuZGFyI1NhdWRpX0FyYWJpYS4yN3NfVW1tX2FsLVF1cmFfY2FsZW5kYXI8L2E+LlxuXHRcdDxhIGhyZWY9XCJodHRwOi8vd3d3LnVtbXVscXVyYS5vcmcuc2EvQWJvdXQuYXNweFwiPmh0dHA6Ly93d3cudW1tdWxxdXJhLm9yZy5zYS9BYm91dC5hc3B4PC9hPlxuXHRcdDxhIGhyZWY9XCJodHRwOi8vd3d3LnN0YWZmLnNjaWVuY2UudXUubmwvfmdlbnQwMTEzL2lzbGFtL3VtbWFscXVyYS5odG1cIj5odHRwOi8vd3d3LnN0YWZmLnNjaWVuY2UudXUubmwvfmdlbnQwMTEzL2lzbGFtL3VtbWFscXVyYS5odG08L2E+XG5cdFx0QGNsYXNzIFVtbUFsUXVyYUNhbGVuZGFyXG5cdFx0QHBhcmFtIFtsYW5ndWFnZT0nJ10ge3N0cmluZ30gVGhlIGxhbmd1YWdlIGNvZGUgKGRlZmF1bHQgRW5nbGlzaCkgZm9yIGxvY2FsaXNhdGlvbi4gKi9cblx0ZnVuY3Rpb24gVW1tQWxRdXJhQ2FsZW5kYXIobGFuZ3VhZ2UpIHtcblx0XHR0aGlzLmxvY2FsID0gdGhpcy5yZWdpb25hbE9wdGlvbnNbbGFuZ3VhZ2UgfHwgJyddIHx8IHRoaXMucmVnaW9uYWxPcHRpb25zWycnXTtcblx0fVxuXG5cdFVtbUFsUXVyYUNhbGVuZGFyLnByb3RvdHlwZSA9IG5ldyAkLmNhbGVuZGFycy5iYXNlQ2FsZW5kYXI7XG5cblx0JC5leHRlbmQoVW1tQWxRdXJhQ2FsZW5kYXIucHJvdG90eXBlLCB7XG5cdFx0LyoqIFRoZSBjYWxlbmRhciBuYW1lLlxuXHRcdFx0QG1lbWJlcm9mIFVtbUFsUXVyYUNhbGVuZGFyICovXG5cdFx0bmFtZTogJ1VtbUFsUXVyYScsXG5cdFx0Ly9qZEVwb2NoOiAxOTQ4NDQwLCAvLyBKdWxpYW4gZGF0ZSBvZiBzdGFydCBvZiBVbW1BbFF1cmEgZXBvY2g6IDE0IE1hcmNoIDE5MzcgQ0Vcblx0XHQvL2RheXNQZXJNb250aDogLy8gRGF5cyBwZXIgbW9udGggaW4gYSBjb21tb24geWVhciwgcmVwbGFjZWQgYnkgYSBtZXRob2QuXG5cdFx0LyoqIDxjb2RlPnRydWU8L2NvZGU+IGlmIGhhcyBhIHllYXIgemVybywgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cblx0XHRcdEBtZW1iZXJvZiBVbW1BbFF1cmFDYWxlbmRhciAqL1xuXHRcdGhhc1llYXJaZXJvOiBmYWxzZSxcblx0XHQvKiogVGhlIG1pbmltdW0gbW9udGggbnVtYmVyLlxuXHRcdFx0QG1lbWJlcm9mIFVtbUFsUXVyYUNhbGVuZGFyICovXG5cdFx0bWluTW9udGg6IDEsXG5cdFx0LyoqIFRoZSBmaXJzdCBtb250aCBpbiB0aGUgeWVhci5cblx0XHRcdEBtZW1iZXJvZiBVbW1BbFF1cmFDYWxlbmRhciAqL1xuXHRcdGZpcnN0TW9udGg6IDEsXG5cdFx0LyoqIFRoZSBtaW5pbXVtIGRheSBudW1iZXIuXG5cdFx0XHRAbWVtYmVyb2YgVW1tQWxRdXJhQ2FsZW5kYXIgKi9cblx0XHRtaW5EYXk6IDEsXG5cblx0XHQvKiogTG9jYWxpc2F0aW9ucyBmb3IgdGhlIHBsdWdpbi5cblx0XHRcdEVudHJpZXMgYXJlIG9iamVjdHMgaW5kZXhlZCBieSB0aGUgbGFuZ3VhZ2UgY29kZSAoJycgYmVpbmcgdGhlIGRlZmF1bHQgVVMvRW5nbGlzaCkuXG5cdFx0XHRFYWNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLlxuXHRcdFx0QG1lbWJlcm9mIFVtbUFsUXVyYUNhbGVuZGFyXG5cdFx0XHRAcHJvcGVydHkgbmFtZSB7c3RyaW5nfSBUaGUgY2FsZW5kYXIgbmFtZS5cblx0XHRcdEBwcm9wZXJ0eSBlcG9jaHMge3N0cmluZ1tdfSBUaGUgZXBvY2ggbmFtZXMuXG5cdFx0XHRAcHJvcGVydHkgbW9udGhOYW1lcyB7c3RyaW5nW119IFRoZSBsb25nIG5hbWVzIG9mIHRoZSBtb250aHMgb2YgdGhlIHllYXIuXG5cdFx0XHRAcHJvcGVydHkgbW9udGhOYW1lc1Nob3J0IHtzdHJpbmdbXX0gVGhlIHNob3J0IG5hbWVzIG9mIHRoZSBtb250aHMgb2YgdGhlIHllYXIuXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXMge3N0cmluZ1tdfSBUaGUgbG9uZyBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lc1Nob3J0IHtzdHJpbmdbXX0gVGhlIHNob3J0IG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzTWluIHtzdHJpbmdbXX0gVGhlIG1pbmltYWwgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXG5cdFx0XHRAcHJvcGVydHkgZGF0ZUZvcm1hdCB7c3RyaW5nfSBUaGUgZGF0ZSBmb3JtYXQgZm9yIHRoaXMgY2FsZW5kYXIuXG5cdFx0XHRcdFx0U2VlIHRoZSBvcHRpb25zIG9uIDxhIGhyZWY9XCJCYXNlQ2FsZW5kYXIuaHRtbCNmb3JtYXREYXRlXCI+PGNvZGU+Zm9ybWF0RGF0ZTwvY29kZT48L2E+IGZvciBkZXRhaWxzLlxuXHRcdFx0QHByb3BlcnR5IGZpcnN0RGF5IHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlaywgc3RhcnRpbmcgYXQgMC5cblx0XHRcdEBwcm9wZXJ0eSBpc1JUTCB7bnVtYmVyfSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGxvY2FsaXNhdGlvbiByZWFkcyByaWdodC10by1sZWZ0LiAqL1xuXHRcdHJlZ2lvbmFsT3B0aW9uczogeyAvLyBMb2NhbGlzYXRpb25zXG5cdFx0XHQnJzoge1xuXHRcdFx0XHRuYW1lOiAnVW1tIGFsLVF1cmEnLFxuXHRcdFx0XHRlcG9jaHM6IFsnQkgnLCAnQUgnXSxcblx0XHRcdFx0bW9udGhOYW1lczogWydBbC1NdWhhcnJhbScsICdTYWZhcicsICdSYWJpXFwnIGFsLWF3d2FsJywgJ1JhYmlcXCcgQWwtVGhhbmknLCAnSnVtYWRhIEFsLUF3d2FsJywgJ0p1bWFkYSBBbC1UaGFuaScsXG5cdFx0XHRcdCdSYWphYicsICdTaGFcXCdhYmFuJywgJ1JhbWFkYW4nLCAnU2hhd3dhbCcsICdEaHUgYWwtUWlcXCdkYWgnLCAnRGh1IGFsLUhpamphaCddLFxuXHRcdFx0XHRtb250aE5hbWVzU2hvcnQ6IFsnTXVoJywgJ1NhZicsICdSYWIxJywgJ1JhYjInLCAnSnVtMScsICdKdW0yJywgJ1JhaicsICdTaGFcXCcnLCAnUmFtJywgJ1NoYXcnLCAnRGh1UScsICdEaHVIJ10sXG5cdFx0XHRcdGRheU5hbWVzOiBbJ1lhd20gYWwtQWhhZCcsICdZYXdtIGFsLUl0aG5haW4nLCAnWWF3bSBhbC1UaGFsxIF0aMSB4oCZJywgJ1lhd20gYWwtQXJiYeKAmMSB4oCZJywgJ1lhd20gYWwtS2hhbcSrcycsICdZYXdtIGFsLUp1beKAmGEnLCAnWWF3bSBhbC1TYWJ0J10sXG5cdFx0XHRcdGRheU5hbWVzTWluOiBbJ0FoJywgJ0l0aCcsICdUaCcsICdBcicsICdLaCcsICdKdScsICdTYSddLFxuXHRcdFx0XHRkYXRlRm9ybWF0OiAneXl5eS9tbS9kZCcsXG5cdFx0XHRcdGZpcnN0RGF5OiA2LFxuXHRcdFx0XHRpc1JUTDogdHJ1ZVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGluIGEgbGVhcCB5ZWFyLlxuXHRcdFx0QG1lbWJlcm9mIFVtbUFsUXVyYUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGlzIGEgbGVhcCB5ZWFyLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRsZWFwWWVhcjogZnVuY3Rpb24gKHllYXIpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgdGhpcy5taW5Nb250aCwgdGhpcy5taW5EYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyKTtcblx0XHRcdHJldHVybiAodGhpcy5kYXlzSW5ZZWFyKGRhdGUueWVhcigpKSA9PT0gMzU1KTtcblx0XHR9LFxuXG5cdFx0LyoqIERldGVybWluZSB0aGUgd2VlayBvZiB0aGUgeWVhciBmb3IgYSBkYXRlLlxuXHRcdFx0QG1lbWJlcm9mIFVtbUFsUXVyYUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGggdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSB3ZWVrIG9mIHRoZSB5ZWFyLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIGRhdGUgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHR3ZWVrT2ZZZWFyOiBmdW5jdGlvbiAoeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0Ly8gRmluZCBTdW5kYXkgb2YgdGhpcyB3ZWVrIHN0YXJ0aW5nIG9uIFN1bmRheVxuXHRcdFx0dmFyIGNoZWNrRGF0ZSA9IHRoaXMubmV3RGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcblx0XHRcdGNoZWNrRGF0ZS5hZGQoLWNoZWNrRGF0ZS5kYXlPZldlZWsoKSwgJ2QnKTtcblx0XHRcdHJldHVybiBNYXRoLmZsb29yKChjaGVja0RhdGUuZGF5T2ZZZWFyKCkgLSAxKSAvIDcpICsgMTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBhIHllYXIuXG5cdFx0XHRAbWVtYmVyb2YgVW1tQWxRdXJhQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzLlxuXHRcdFx0QHRocm93cyBFcnJvciBpZiBhbiBpbnZhbGlkIHllYXIgb3IgYSBkaWZmZXJlbnQgY2FsZW5kYXIgdXNlZC4gKi9cblx0XHRkYXlzSW5ZZWFyOiBmdW5jdGlvbiAoeWVhcikge1xuXHRcdFx0dmFyIGRheXNDb3VudCA9IDA7XG5cdFx0XHRmb3IgKHZhciBpID0gMTsgaSA8PSAxMjsgaSsrKSB7XG5cdFx0XHRcdGRheXNDb3VudCArPSB0aGlzLmRheXNJbk1vbnRoKHllYXIsIGkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRheXNDb3VudDtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBhIG1vbnRoLlxuXHRcdFx0QG1lbWJlcm9mIFVtbUFsUXVyYUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIG9mIHRoZSBtb250aC5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aC5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgbW9udGguXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgbW9udGgveWVhciBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdGRheXNJbk1vbnRoOiBmdW5jdGlvbiAoeWVhciwgbW9udGgpIHtcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkTW9udGgpO1xuXHRcdFx0dmFyIG1jamRuID0gZGF0ZS50b0pEKCkgLSAyNDAwMDAwICsgMC41OyAvLyBNb2RpZmllZCBDaHJvbm9sb2dpY2FsIEp1bGlhbiBEYXkgTnVtYmVyIChNQ0pETilcblx0XHRcdC8vIHRoZSBNQ0pETidzIG9mIHRoZSBzdGFydCBvZiB0aGUgbHVuYXRpb25zIGluIHRoZSBVbW0gYWwtUXVyYSBjYWxlbmRhciBhcmUgc3RvcmVkIGluIHRoZSAndW1tYWxxdXJhX2RhdCcgYXJyYXlcblx0XHRcdHZhciBpbmRleCA9IDA7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHVtbWFscXVyYV9kYXQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHVtbWFscXVyYV9kYXRbaV0gPiBtY2pkbikge1xuXHRcdFx0XHRcdHJldHVybiAodW1tYWxxdXJhX2RhdFtpbmRleF0gLSB1bW1hbHF1cmFfZGF0W2luZGV4IC0gMV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gMzA7IC8vIFVua25vd24gb3V0c2lkZVxuXHRcdH0sXG5cblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBkYXRlIGlzIGEgd2VlayBkYXkuXG5cdFx0XHRAbWVtYmVyb2YgVW1tQWxRdXJhQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGEgd2VlayBkYXksIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdHdlZWtEYXk6IGZ1bmN0aW9uICh5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5kYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSkgIT09IDU7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgSnVsaWFuIGRhdGUgZXF1aXZhbGVudCBmb3IgdGhpcyBkYXRlLFxuXHRcdFx0aS5lLiBkYXlzIHNpbmNlIEphbnVhcnkgMSwgNDcxMyBCQ0UgR3JlZW53aWNoIG5vb24uXG5cdFx0XHRAbWVtYmVyb2YgVW1tQWxRdXJhQ2FsZW5kYXJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvbnZlcnQgb3IgdGhlIHllYXIgdG8gY29udmVydC5cblx0XHRcdEBwYXJhbSBbbW9udGhdIHtudW1iZXJ9IFRoZSBtb250aCB0byBjb252ZXJ0LlxuXHRcdFx0QHBhcmFtIFtkYXldIHtudW1iZXJ9IFRoZSBkYXkgdG8gY29udmVydC5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGVxdWl2YWxlbnQgSnVsaWFuIGRhdGUuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGFuIGludmFsaWQgZGF0ZSBvciBhIGRpZmZlcmVudCBjYWxlbmRhciB1c2VkLiAqL1xuXHRcdHRvSkQ6IGZ1bmN0aW9uICh5ZWFyLCBtb250aCwgZGF5KSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlKTtcblx0XHRcdHZhciBpbmRleCA9ICgxMiAqIChkYXRlLnllYXIoKSAtIDEpKSArIGRhdGUubW9udGgoKSAtIDE1MjkyO1xuXHRcdFx0dmFyIG1jamRuID0gZGF0ZS5kYXkoKSArIHVtbWFscXVyYV9kYXRbaW5kZXggLSAxXSAtIDE7XG5cdFx0XHRyZXR1cm4gbWNqZG4gKyAyNDAwMDAwIC0gMC41OyAvLyBNb2RpZmllZCBDaHJvbm9sb2dpY2FsIEp1bGlhbiBEYXkgTnVtYmVyIChNQ0pETilcblx0XHR9LFxuXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIGZyb20gYSBKdWxpYW4gZGF0ZS5cblx0XHRcdEBtZW1iZXJvZiBVbW1BbFF1cmFDYWxlbmRhclxuXHRcdFx0QHBhcmFtIGpkIHtudW1iZXJ9IFRoZSBKdWxpYW4gZGF0ZSB0byBjb252ZXJ0LlxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXG5cdFx0ZnJvbUpEOiBmdW5jdGlvbiAoamQpIHtcblx0XHRcdHZhciBtY2pkbiA9IGpkIC0gMjQwMDAwMCArIDAuNTsgLy8gTW9kaWZpZWQgQ2hyb25vbG9naWNhbCBKdWxpYW4gRGF5IE51bWJlciAoTUNKRE4pXG5cdFx0XHQvLyB0aGUgTUNKRE4ncyBvZiB0aGUgc3RhcnQgb2YgdGhlIGx1bmF0aW9ucyBpbiB0aGUgVW1tIGFsLVF1cmEgY2FsZW5kYXIgXG5cdFx0XHQvLyBhcmUgc3RvcmVkIGluIHRoZSAndW1tYWxxdXJhX2RhdCcgYXJyYXlcblx0XHRcdHZhciBpbmRleCA9IDA7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHVtbWFscXVyYV9kYXQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHVtbWFscXVyYV9kYXRbaV0gPiBtY2pkbikgYnJlYWs7XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHR9XG5cdFx0XHR2YXIgbHVuYXRpb24gPSBpbmRleCArIDE1MjkyOyAvL1VtbUFsUXVyYSBMdW5hdGlvbiBOdW1iZXJcblx0XHRcdHZhciBpaSA9IE1hdGguZmxvb3IoKGx1bmF0aW9uIC0gMSkgLyAxMik7XG5cdFx0XHR2YXIgeWVhciA9IGlpICsgMTtcblx0XHRcdHZhciBtb250aCA9IGx1bmF0aW9uIC0gMTIgKiBpaTtcblx0XHRcdHZhciBkYXkgPSBtY2pkbiAtIHVtbWFscXVyYV9kYXRbaW5kZXggLSAxXSArIDE7XG5cdFx0XHRyZXR1cm4gdGhpcy5uZXdEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xuXHRcdH0sXG5cblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgYSBkYXRlIGlzIHZhbGlkIGZvciB0aGlzIGNhbGVuZGFyLlxuXHRcdFx0QG1lbWJlcm9mIFVtbUFsUXVyYUNhbGVuZGFyXG5cdFx0XHRAcGFyYW0geWVhciB7bnVtYmVyfSBUaGUgeWVhciB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIG1vbnRoIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxuXHRcdFx0QHBhcmFtIGRheSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBhIHZhbGlkIGRhdGUsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuICovXG5cdFx0aXNWYWxpZDogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xuXHRcdFx0dmFyIHZhbGlkID0gJC5jYWxlbmRhcnMuYmFzZUNhbGVuZGFyLnByb3RvdHlwZS5pc1ZhbGlkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0XHRpZiAodmFsaWQpIHtcblx0XHRcdFx0eWVhciA9ICh5ZWFyLnllYXIgIT0gbnVsbCA/IHllYXIueWVhciA6IHllYXIpO1xuXHRcdFx0XHR2YWxpZCA9ICh5ZWFyID49IDEyNzYgJiYgeWVhciA8PSAxNTAwKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB2YWxpZDtcblx0XHR9LFxuXG5cdFx0LyoqIENoZWNrIHRoYXQgYSBjYW5kaWRhdGUgZGF0ZSBpcyBmcm9tIHRoZSBzYW1lIGNhbGVuZGFyIGFuZCBpcyB2YWxpZC5cblx0XHRcdEBtZW1iZXJvZiBVbW1BbFF1cmFDYWxlbmRhclxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIHZhbGlkYXRlIG9yIHRoZSB5ZWFyIHRvIHZhbGlkYXRlLlxuXHRcdFx0QHBhcmFtIG1vbnRoIHtudW1iZXJ9IFRoZSBtb250aCB0byB2YWxpZGF0ZS5cblx0XHRcdEBwYXJhbSBkYXkge251bWJlcn0gVGhlIGRheSB0byB2YWxpZGF0ZS5cblx0XHRcdEBwYXJhbSBlcnJvciB7c3RyaW5nfSBFcnJvciBtZXNzYWdlIGlmIGludmFsaWQuXG5cdFx0XHRAdGhyb3dzIEVycm9yIGlmIGRpZmZlcmVudCBjYWxlbmRhcnMgdXNlZCBvciBpbnZhbGlkIGRhdGUuICovXG5cdFx0X3ZhbGlkYXRlOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgZGF5LCBlcnJvcikge1xuXHRcdFx0dmFyIGRhdGUgPSAkLmNhbGVuZGFycy5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLl92YWxpZGF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdFx0aWYgKGRhdGUueWVhciA8IDEyNzYgfHwgZGF0ZS55ZWFyID4gMTUwMCkge1xuXHRcdFx0XHR0aHJvdyBlcnJvci5yZXBsYWNlKC9cXHswXFx9LywgdGhpcy5sb2NhbC5uYW1lKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBkYXRlO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gVW1tQWxRdXJhIGNhbGVuZGFyIGltcGxlbWVudGF0aW9uXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy51bW1hbHF1cmEgPSBVbW1BbFF1cmFDYWxlbmRhcjtcblxuXHR2YXIgdW1tYWxxdXJhX2RhdCA9IFtcblx0XHQyMCwgICAgNTAsICAgIDc5LCAgICAxMDksICAgMTM4LCAgIDE2OCwgICAxOTcsICAgMjI3LCAgIDI1NiwgICAyODYsICAgMzE1LCAgIDM0NSwgICAzNzQsICAgNDA0LCAgIDQzMywgICA0NjMsICAgNDkyLCAgIDUyMiwgICA1NTEsICAgNTgxLCBcblx0XHQ2MTEsICAgNjQxLCAgIDY3MCwgICA3MDAsICAgNzI5LCAgIDc1OSwgICA3ODgsICAgODE4LCAgIDg0NywgICA4NzcsICAgOTA2LCAgIDkzNiwgICA5NjUsICAgOTk1LCAgIDEwMjQsICAxMDU0LCAgMTA4MywgIDExMTMsICAxMTQyLCAgMTE3Mixcblx0XHQxMjAxLCAgMTIzMSwgIDEyNjAsICAxMjkwLCAgMTMyMCwgIDEzNTAsICAxMzc5LCAgMTQwOSwgIDE0MzgsICAxNDY4LCAgMTQ5NywgIDE1MjcsICAxNTU2LCAgMTU4NiwgIDE2MTUsICAxNjQ1LCAgMTY3NCwgIDE3MDQsICAxNzMzLCAgMTc2Myxcblx0XHQxNzkyLCAgMTgyMiwgIDE4NTEsICAxODgxLCAgMTkxMCwgIDE5NDAsICAxOTY5LCAgMTk5OSwgIDIwMjgsICAyMDU4LCAgMjA4NywgIDIxMTcsICAyMTQ2LCAgMjE3NiwgIDIyMDUsICAyMjM1LCAgMjI2NCwgIDIyOTQsICAyMzIzLCAgMjM1Myxcblx0XHQyMzgzLCAgMjQxMywgIDI0NDIsICAyNDcyLCAgMjUwMSwgIDI1MzEsICAyNTYwLCAgMjU5MCwgIDI2MTksICAyNjQ5LCAgMjY3OCwgIDI3MDgsICAyNzM3LCAgMjc2NywgIDI3OTYsICAyODI2LCAgMjg1NSwgIDI4ODUsICAyOTE0LCAgMjk0NCxcblx0XHQyOTczLCAgMzAwMywgIDMwMzIsICAzMDYyLCAgMzA5MSwgIDMxMjEsICAzMTUwLCAgMzE4MCwgIDMyMDksICAzMjM5LCAgMzI2OCwgIDMyOTgsICAzMzI3LCAgMzM1NywgIDMzODYsICAzNDE2LCAgMzQ0NiwgIDM0NzYsICAzNTA1LCAgMzUzNSxcblx0XHQzNTY0LCAgMzU5NCwgIDM2MjMsICAzNjUzLCAgMzY4MiwgIDM3MTIsICAzNzQxLCAgMzc3MSwgIDM4MDAsICAzODMwLCAgMzg1OSwgIDM4ODksICAzOTE4LCAgMzk0OCwgIDM5NzcsICA0MDA3LCAgNDAzNiwgIDQwNjYsICA0MDk1LCAgNDEyNSxcblx0XHQ0MTU1LCAgNDE4NSwgIDQyMTQsICA0MjQ0LCAgNDI3MywgIDQzMDMsICA0MzMyLCAgNDM2MiwgIDQzOTEsICA0NDIxLCAgNDQ1MCwgIDQ0ODAsICA0NTA5LCAgNDUzOSwgIDQ1NjgsICA0NTk4LCAgNDYyNywgIDQ2NTcsICA0Njg2LCAgNDcxNixcblx0XHQ0NzQ1LCAgNDc3NSwgIDQ4MDQsICA0ODM0LCAgNDg2MywgIDQ4OTMsICA0OTIyLCAgNDk1MiwgIDQ5ODEsICA1MDExLCAgNTA0MCwgIDUwNzAsICA1MDk5LCAgNTEyOSwgIDUxNTgsICA1MTg4LCAgNTIxOCwgIDUyNDgsICA1Mjc3LCAgNTMwNyxcblx0XHQ1MzM2LCAgNTM2NiwgIDUzOTUsICA1NDI1LCAgNTQ1NCwgIDU0ODQsICA1NTEzLCAgNTU0MywgIDU1NzIsICA1NjAyLCAgNTYzMSwgIDU2NjEsICA1NjkwLCAgNTcyMCwgIDU3NDksICA1Nzc5LCAgNTgwOCwgIDU4MzgsICA1ODY3LCAgNTg5Nyxcblx0XHQ1OTI2LCAgNTk1NiwgIDU5ODUsICA2MDE1LCAgNjA0NCwgIDYwNzQsICA2MTAzLCAgNjEzMywgIDYxNjIsICA2MTkyLCAgNjIyMSwgIDYyNTEsICA2MjgxLCAgNjMxMSwgIDYzNDAsICA2MzcwLCAgNjM5OSwgIDY0MjksICA2NDU4LCAgNjQ4OCxcblx0XHQ2NTE3LCAgNjU0NywgIDY1NzYsICA2NjA2LCAgNjYzNSwgIDY2NjUsICA2Njk0LCAgNjcyNCwgIDY3NTMsICA2NzgzLCAgNjgxMiwgIDY4NDIsICA2ODcxLCAgNjkwMSwgIDY5MzAsICA2OTYwLCAgNjk4OSwgIDcwMTksICA3MDQ4LCAgNzA3OCxcblx0XHQ3MTA3LCAgNzEzNywgIDcxNjYsICA3MTk2LCAgNzIyNSwgIDcyNTUsICA3Mjg0LCAgNzMxNCwgIDczNDQsICA3Mzc0LCAgNzQwMywgIDc0MzMsICA3NDYyLCAgNzQ5MiwgIDc1MjEsICA3NTUxLCAgNzU4MCwgIDc2MTAsICA3NjM5LCAgNzY2OSxcblx0XHQ3Njk4LCAgNzcyOCwgIDc3NTcsICA3Nzg3LCAgNzgxNiwgIDc4NDYsICA3ODc1LCAgNzkwNSwgIDc5MzQsICA3OTY0LCAgNzk5MywgIDgwMjMsICA4MDUzLCAgODA4MywgIDgxMTIsICA4MTQyLCAgODE3MSwgIDgyMDEsICA4MjMwLCAgODI2MCxcblx0XHQ4Mjg5LCAgODMxOSwgIDgzNDgsICA4Mzc4LCAgODQwNywgIDg0MzcsICA4NDY2LCAgODQ5NiwgIDg1MjUsICA4NTU1LCAgODU4NCwgIDg2MTQsICA4NjQzLCAgODY3MywgIDg3MDIsICA4NzMyLCAgODc2MSwgIDg3OTEsICA4ODIxLCAgODg1MCxcblx0XHQ4ODgwLCAgODkwOSwgIDg5MzgsICA4OTY4LCAgODk5NywgIDkwMjcsICA5MDU2LCAgOTA4NiwgIDkxMTUsICA5MTQ1LCAgOTE3NSwgIDkyMDUsICA5MjM0LCAgOTI2NCwgIDkyOTMsICA5MzIyLCAgOTM1MiwgIDkzODEsICA5NDEwLCAgOTQ0MCxcblx0XHQ5NDcwLCAgOTQ5OSwgIDk1MjksICA5NTU5LCAgOTU4OSwgIDk2MTgsICA5NjQ4LCAgOTY3NywgIDk3MDYsICA5NzM2LCAgOTc2NSwgIDk3OTQsICA5ODI0LCAgOTg1MywgIDk4ODMsICA5OTEzLCAgOTk0MywgIDk5NzIsICAxMDAwMiwgMTAwMzIsXG5cdFx0MTAwNjEsIDEwMDkwLCAxMDEyMCwgMTAxNDksIDEwMTc4LCAxMDIwOCwgMTAyMzcsIDEwMjY3LCAxMDI5NywgMTAzMjYsIDEwMzU2LCAxMDM4NiwgMTA0MTUsIDEwNDQ1LCAxMDQ3NCwgMTA1MDQsIDEwNTMzLCAxMDU2MiwgMTA1OTIsIDEwNjIxLFxuXHRcdDEwNjUxLCAxMDY4MCwgMTA3MTAsIDEwNzQwLCAxMDc3MCwgMTA3OTksIDEwODI5LCAxMDg1OCwgMTA4ODgsIDEwOTE3LCAxMDk0NywgMTA5NzYsIDExMDA1LCAxMTAzNSwgMTEwNjQsIDExMDk0LCAxMTEyNCwgMTExNTMsIDExMTgzLCAxMTIxMyxcblx0XHQxMTI0MiwgMTEyNzIsIDExMzAxLCAxMTMzMSwgMTEzNjAsIDExMzg5LCAxMTQxOSwgMTE0NDgsIDExNDc4LCAxMTUwNywgMTE1MzcsIDExNTY3LCAxMTU5NiwgMTE2MjYsIDExNjU1LCAxMTY4NSwgMTE3MTUsIDExNzQ0LCAxMTc3NCwgMTE4MDMsXG5cdFx0MTE4MzIsIDExODYyLCAxMTg5MSwgMTE5MjEsIDExOTUwLCAxMTk4MCwgMTIwMTAsIDEyMDM5LCAxMjA2OSwgMTIwOTksIDEyMTI4LCAxMjE1OCwgMTIxODcsIDEyMjE2LCAxMjI0NiwgMTIyNzUsIDEyMzA0LCAxMjMzNCwgMTIzNjQsIDEyMzkzLFxuXHRcdDEyNDIzLCAxMjQ1MywgMTI0ODMsIDEyNTEyLCAxMjU0MiwgMTI1NzEsIDEyNjAwLCAxMjYzMCwgMTI2NTksIDEyNjg4LCAxMjcxOCwgMTI3NDcsIDEyNzc3LCAxMjgwNywgMTI4MzcsIDEyODY2LCAxMjg5NiwgMTI5MjYsIDEyOTU1LCAxMjk4NCxcblx0XHQxMzAxNCwgMTMwNDMsIDEzMDcyLCAxMzEwMiwgMTMxMzEsIDEzMTYxLCAxMzE5MSwgMTMyMjAsIDEzMjUwLCAxMzI4MCwgMTMzMTAsIDEzMzM5LCAxMzM2OCwgMTMzOTgsIDEzNDI3LCAxMzQ1NiwgMTM0ODYsIDEzNTE1LCAxMzU0NSwgMTM1NzQsXG5cdFx0MTM2MDQsIDEzNjM0LCAxMzY2NCwgMTM2OTMsIDEzNzIzLCAxMzc1MiwgMTM3ODIsIDEzODExLCAxMzg0MCwgMTM4NzAsIDEzODk5LCAxMzkyOSwgMTM5NTgsIDEzOTg4LCAxNDAxOCwgMTQwNDcsIDE0MDc3LCAxNDEwNywgMTQxMzYsIDE0MTY2LFxuXHRcdDE0MTk1LCAxNDIyNCwgMTQyNTQsIDE0MjgzLCAxNDMxMywgMTQzNDIsIDE0MzcyLCAxNDQwMSwgMTQ0MzEsIDE0NDYxLCAxNDQ5MCwgMTQ1MjAsIDE0NTUwLCAxNDU3OSwgMTQ2MDksIDE0NjM4LCAxNDY2NywgMTQ2OTcsIDE0NzI2LCAxNDc1Nixcblx0XHQxNDc4NSwgMTQ4MTUsIDE0ODQ0LCAxNDg3NCwgMTQ5MDQsIDE0OTMzLCAxNDk2MywgMTQ5OTMsIDE1MDIxLCAxNTA1MSwgMTUwODEsIDE1MTEwLCAxNTE0MCwgMTUxNjksIDE1MTk5LCAxNTIyOCwgMTUyNTgsIDE1Mjg3LCAxNTMxNywgMTUzNDcsXG5cdFx0MTUzNzcsIDE1NDA2LCAxNTQzNiwgMTU0NjUsIDE1NDk0LCAxNTUyNCwgMTU1NTMsIDE1NTgyLCAxNTYxMiwgMTU2NDEsIDE1NjcxLCAxNTcwMSwgMTU3MzEsIDE1NzYwLCAxNTc5MCwgMTU4MjAsIDE1ODQ5LCAxNTg3OCwgMTU5MDgsIDE1OTM3LFxuXHRcdDE1OTY2LCAxNTk5NiwgMTYwMjUsIDE2MDU1LCAxNjA4NSwgMTYxMTQsIDE2MTQ0LCAxNjE3NCwgMTYyMDQsIDE2MjMzLCAxNjI2MiwgMTYyOTIsIDE2MzIxLCAxNjM1MCwgMTYzODAsIDE2NDA5LCAxNjQzOSwgMTY0NjgsIDE2NDk4LCAxNjUyOCxcblx0XHQxNjU1OCwgMTY1ODcsIDE2NjE3LCAxNjY0NiwgMTY2NzYsIDE2NzA1LCAxNjczNCwgMTY3NjQsIDE2NzkzLCAxNjgyMywgMTY4NTIsIDE2ODgyLCAxNjkxMiwgMTY5NDEsIDE2OTcxLCAxNzAwMSwgMTcwMzAsIDE3MDYwLCAxNzA4OSwgMTcxMTgsXG5cdFx0MTcxNDgsIDE3MTc3LCAxNzIwNywgMTcyMzYsIDE3MjY2LCAxNzI5NSwgMTczMjUsIDE3MzU1LCAxNzM4NCwgMTc0MTQsIDE3NDQ0LCAxNzQ3MywgMTc1MDIsIDE3NTMyLCAxNzU2MSwgMTc1OTEsIDE3NjIwLCAxNzY1MCwgMTc2NzksIDE3NzA5LFxuXHRcdDE3NzM4LCAxNzc2OCwgMTc3OTgsIDE3ODI3LCAxNzg1NywgMTc4ODYsIDE3OTE2LCAxNzk0NSwgMTc5NzUsIDE4MDA0LCAxODAzNCwgMTgwNjMsIDE4MDkzLCAxODEyMiwgMTgxNTIsIDE4MTgxLCAxODIxMSwgMTgyNDEsIDE4MjcwLCAxODMwMCxcblx0XHQxODMzMCwgMTgzNTksIDE4Mzg4LCAxODQxOCwgMTg0NDcsIDE4NDc2LCAxODUwNiwgMTg1MzUsIDE4NTY1LCAxODU5NSwgMTg2MjUsIDE4NjU0LCAxODY4NCwgMTg3MTQsIDE4NzQzLCAxODc3MiwgMTg4MDIsIDE4ODMxLCAxODg2MCwgMTg4OTAsXG5cdFx0MTg5MTksIDE4OTQ5LCAxODk3OSwgMTkwMDgsIDE5MDM4LCAxOTA2OCwgMTkwOTgsIDE5MTI3LCAxOTE1NiwgMTkxODYsIDE5MjE1LCAxOTI0NCwgMTkyNzQsIDE5MzAzLCAxOTMzMywgMTkzNjIsIDE5MzkyLCAxOTQyMiwgMTk0NTIsIDE5NDgxLFxuXHRcdDE5NTExLCAxOTU0MCwgMTk1NzAsIDE5NTk5LCAxOTYyOCwgMTk2NTgsIDE5Njg3LCAxOTcxNywgMTk3NDYsIDE5Nzc2LCAxOTgwNiwgMTk4MzYsIDE5ODY1LCAxOTg5NSwgMTk5MjQsIDE5OTU0LCAxOTk4MywgMjAwMTIsIDIwMDQyLCAyMDA3MSxcblx0XHQyMDEwMSwgMjAxMzAsIDIwMTYwLCAyMDE5MCwgMjAyMTksIDIwMjQ5LCAyMDI3OSwgMjAzMDgsIDIwMzM4LCAyMDM2NywgMjAzOTYsIDIwNDI2LCAyMDQ1NSwgMjA0ODUsIDIwNTE0LCAyMDU0NCwgMjA1NzMsIDIwNjAzLCAyMDYzMywgMjA2NjIsXG5cdFx0MjA2OTIsIDIwNzIxLCAyMDc1MSwgMjA3ODAsIDIwODEwLCAyMDgzOSwgMjA4NjksIDIwODk4LCAyMDkyOCwgMjA5NTcsIDIwOTg3LCAyMTAxNiwgMjEwNDYsIDIxMDc2LCAyMTEwNSwgMjExMzUsIDIxMTY0LCAyMTE5NCwgMjEyMjMsIDIxMjUzLFxuXHRcdDIxMjgyLCAyMTMxMiwgMjEzNDEsIDIxMzcxLCAyMTQwMCwgMjE0MzAsIDIxNDU5LCAyMTQ4OSwgMjE1MTksIDIxNTQ4LCAyMTU3OCwgMjE2MDcsIDIxNjM3LCAyMTY2NiwgMjE2OTYsIDIxNzI1LCAyMTc1NCwgMjE3ODQsIDIxODEzLCAyMTg0Myxcblx0XHQyMTg3MywgMjE5MDIsIDIxOTMyLCAyMTk2MiwgMjE5OTEsIDIyMDIxLCAyMjA1MCwgMjIwODAsIDIyMTA5LCAyMjEzOCwgMjIxNjgsIDIyMTk3LCAyMjIyNywgMjIyNTYsIDIyMjg2LCAyMjMxNiwgMjIzNDYsIDIyMzc1LCAyMjQwNSwgMjI0MzQsXG5cdFx0MjI0NjQsIDIyNDkzLCAyMjUyMiwgMjI1NTIsIDIyNTgxLCAyMjYxMSwgMjI2NDAsIDIyNjcwLCAyMjcwMCwgMjI3MzAsIDIyNzU5LCAyMjc4OSwgMjI4MTgsIDIyODQ4LCAyMjg3NywgMjI5MDYsIDIyOTM2LCAyMjk2NSwgMjI5OTQsIDIzMDI0LFxuXHRcdDIzMDU0LCAyMzA4MywgMjMxMTMsIDIzMTQzLCAyMzE3MywgMjMyMDIsIDIzMjMyLCAyMzI2MSwgMjMyOTAsIDIzMzIwLCAyMzM0OSwgMjMzNzksIDIzNDA4LCAyMzQzOCwgMjM0NjcsIDIzNDk3LCAyMzUyNywgMjM1NTYsIDIzNTg2LCAyMzYxNixcblx0XHQyMzY0NSwgMjM2NzQsIDIzNzA0LCAyMzczMywgMjM3NjMsIDIzNzkyLCAyMzgyMiwgMjM4NTEsIDIzODgxLCAyMzkxMCwgMjM5NDAsIDIzOTcwLCAyMzk5OSwgMjQwMjksIDI0MDU4LCAyNDA4OCwgMjQxMTcsIDI0MTQ3LCAyNDE3NiwgMjQyMDYsXG5cdFx0MjQyMzUsIDI0MjY1LCAyNDI5NCwgMjQzMjQsIDI0MzUzLCAyNDM4MywgMjQ0MTMsIDI0NDQyLCAyNDQ3MiwgMjQ1MDEsIDI0NTMxLCAyNDU2MCwgMjQ1OTAsIDI0NjE5LCAyNDY0OCwgMjQ2NzgsIDI0NzA3LCAyNDczNywgMjQ3NjcsIDI0Nzk2LFxuXHRcdDI0ODI2LCAyNDg1NiwgMjQ4ODUsIDI0OTE1LCAyNDk0NCwgMjQ5NzQsIDI1MDAzLCAyNTAzMiwgMjUwNjIsIDI1MDkxLCAyNTEyMSwgMjUxNTAsIDI1MTgwLCAyNTIxMCwgMjUyNDAsIDI1MjY5LCAyNTI5OSwgMjUzMjgsIDI1MzU4LCAyNTM4Nyxcblx0XHQyNTQxNiwgMjU0NDYsIDI1NDc1LCAyNTUwNSwgMjU1MzQsIDI1NTY0LCAyNTU5NCwgMjU2MjQsIDI1NjUzLCAyNTY4MywgMjU3MTIsIDI1NzQyLCAyNTc3MSwgMjU4MDAsIDI1ODMwLCAyNTg1OSwgMjU4ODgsIDI1OTE4LCAyNTk0OCwgMjU5NzcsXG5cdFx0MjYwMDcsIDI2MDM3LCAyNjA2NywgMjYwOTYsIDI2MTI2LCAyNjE1NSwgMjYxODQsIDI2MjE0LCAyNjI0MywgMjYyNzIsIDI2MzAyLCAyNjMzMiwgMjYzNjEsIDI2MzkxLCAyNjQyMSwgMjY0NTEsIDI2NDgwLCAyNjUxMCwgMjY1MzksIDI2NTY4LFxuXHRcdDI2NTk4LCAyNjYyNywgMjY2NTYsIDI2Njg2LCAyNjcxNSwgMjY3NDUsIDI2Nzc1LCAyNjgwNSwgMjY4MzQsIDI2ODY0LCAyNjg5MywgMjY5MjMsIDI2OTUyLCAyNjk4MiwgMjcwMTEsIDI3MDQxLCAyNzA3MCwgMjcwOTksIDI3MTI5LCAyNzE1OSxcblx0XHQyNzE4OCwgMjcyMTgsIDI3MjQ4LCAyNzI3NywgMjczMDcsIDI3MzM2LCAyNzM2NiwgMjczOTUsIDI3NDI1LCAyNzQ1NCwgMjc0ODQsIDI3NTEzLCAyNzU0MiwgMjc1NzIsIDI3NjAyLCAyNzYzMSwgMjc2NjEsIDI3NjkxLCAyNzcyMCwgMjc3NTAsXG5cdFx0Mjc3NzksIDI3ODA5LCAyNzgzOCwgMjc4NjgsIDI3ODk3LCAyNzkyNiwgMjc5NTYsIDI3OTg1LCAyODAxNSwgMjgwNDUsIDI4MDc0LCAyODEwNCwgMjgxMzQsIDI4MTYzLCAyODE5MywgMjgyMjIsIDI4MjUyLCAyODI4MSwgMjgzMTAsIDI4MzQwLFxuXHRcdDI4MzY5LCAyODM5OSwgMjg0MjgsIDI4NDU4LCAyODQ4OCwgMjg1MTcsIDI4NTQ3LCAyODU3Nyxcblx0XHQvLyBGcm9tIDEzNTZcblx0XHQyODYwNywgMjg2MzYsIDI4NjY1LCAyODY5NSwgMjg3MjQsIDI4NzU0LCAyODc4MywgMjg4MTMsIDI4ODQzLCAyODg3MiwgMjg5MDEsIDI4OTMxLCAyODk2MCwgMjg5OTAsIDI5MDE5LCAyOTA0OSwgMjkwNzgsIDI5MTA4LCAyOTEzNywgMjkxNjcsXG5cdFx0MjkxOTYsIDI5MjI2LCAyOTI1NSwgMjkyODUsIDI5MzE1LCAyOTM0NSwgMjkzNzUsIDI5NDA0LCAyOTQzNCwgMjk0NjMsIDI5NDkyLCAyOTUyMiwgMjk1NTEsIDI5NTgwLCAyOTYxMCwgMjk2NDAsIDI5NjY5LCAyOTY5OSwgMjk3MjksIDI5NzU5LFxuXHRcdDI5Nzg4LCAyOTgxOCwgMjk4NDcsIDI5ODc2LCAyOTkwNiwgMjk5MzUsIDI5OTY0LCAyOTk5NCwgMzAwMjMsIDMwMDUzLCAzMDA4MiwgMzAxMTIsIDMwMTQxLCAzMDE3MSwgMzAyMDAsIDMwMjMwLCAzMDI1OSwgMzAyODksIDMwMzE4LCAzMDM0OCxcblx0XHQzMDM3OCwgMzA0MDgsIDMwNDM3LCAzMDQ2NywgMzA0OTYsIDMwNTI2LCAzMDU1NSwgMzA1ODUsIDMwNjE0LCAzMDY0NCwgMzA2NzMsIDMwNzAzLCAzMDczMiwgMzA3NjIsIDMwNzkxLCAzMDgyMSwgMzA4NTAsIDMwODgwLCAzMDkwOSwgMzA5MzksXG5cdFx0MzA5NjgsIDMwOTk4LCAzMTAyNywgMzEwNTcsIDMxMDg2LCAzMTExNiwgMzExNDUsIDMxMTc1LCAzMTIwNCwgMzEyMzQsIDMxMjYzLCAzMTI5MywgMzEzMjIsIDMxMzUyLCAzMTM4MSwgMzE0MTEsIDMxNDQxLCAzMTQ3MSwgMzE1MDAsIDMxNTMwLFxuXHRcdDMxNTU5LCAzMTU4OSwgMzE2MTgsIDMxNjQ4LCAzMTY3NiwgMzE3MDYsIDMxNzM2LCAzMTc2NiwgMzE3OTUsIDMxODI1LCAzMTg1NCwgMzE4ODQsIDMxOTEzLCAzMTk0MywgMzE5NzIsIDMyMDAyLCAzMjAzMSwgMzIwNjEsIDMyMDkwLCAzMjEyMCxcblx0XHQzMjE1MCwgMzIxODAsIDMyMjA5LCAzMjIzOSwgMzIyNjgsIDMyMjk4LCAzMjMyNywgMzIzNTcsIDMyMzg2LCAzMjQxNiwgMzI0NDUsIDMyNDc1LCAzMjUwNCwgMzI1MzQsIDMyNTYzLCAzMjU5MywgMzI2MjIsIDMyNjUyLCAzMjY4MSwgMzI3MTEsXG5cdFx0MzI3NDAsIDMyNzcwLCAzMjc5OSwgMzI4MjksIDMyODU4LCAzMjg4OCwgMzI5MTcsIDMyOTQ3LCAzMjk3NiwgMzMwMDYsIDMzMDM1LCAzMzA2NSwgMzMwOTQsIDMzMTI0LCAzMzE1MywgMzMxODMsIDMzMjEzLCAzMzI0MywgMzMyNzIsIDMzMzAyLFxuXHRcdDMzMzMxLCAzMzM2MSwgMzMzOTAsIDMzNDIwLCAzMzQ1MCwgMzM0NzksIDMzNTA5LCAzMzUzOSwgMzM1NjgsIDMzNTk4LCAzMzYyNywgMzM2NTcsIDMzNjg2LCAzMzcxNiwgMzM3NDUsIDMzNzc1LCAzMzgwNCwgMzM4MzQsIDMzODYzLCAzMzg5Myxcblx0XHQzMzkyMiwgMzM5NTIsIDMzOTgxLCAzNDAxMSwgMzQwNDAsIDM0MDY5LCAzNDA5OSwgMzQxMjgsIDM0MTU4LCAzNDE4NywgMzQyMTcsIDM0MjQ3LCAzNDI3NywgMzQzMDYsIDM0MzM2LCAzNDM2NSwgMzQzOTUsIDM0NDI0LCAzNDQ1NCwgMzQ0ODMsXG5cdFx0MzQ1MTIsIDM0NTQyLCAzNDU3MSwgMzQ2MDEsIDM0NjMxLCAzNDY2MCwgMzQ2OTAsIDM0NzE5LCAzNDc0OSwgMzQ3NzgsIDM0ODA4LCAzNDgzNywgMzQ4NjcsIDM0ODk2LCAzNDkyNiwgMzQ5NTUsIDM0OTg1LCAzNTAxNSwgMzUwNDQsIDM1MDc0LFxuXHRcdDM1MTAzLCAzNTEzMywgMzUxNjIsIDM1MTkyLCAzNTIyMiwgMzUyNTEsIDM1MjgwLCAzNTMxMCwgMzUzNDAsIDM1MzcwLCAzNTM5OSwgMzU0MjksIDM1NDU4LCAzNTQ4OCwgMzU1MTcsIDM1NTQ3LCAzNTU3NiwgMzU2MDUsIDM1NjM1LCAzNTY2NSxcblx0XHQzNTY5NCwgMzU3MjMsIDM1NzUzLCAzNTc4MiwgMzU4MTEsIDM1ODQxLCAzNTg3MSwgMzU5MDEsIDM1OTMwLCAzNTk2MCwgMzU5ODksIDM2MDE5LCAzNjA0OCwgMzYwNzgsIDM2MTA3LCAzNjEzNiwgMzYxNjYsIDM2MTk1LCAzNjIyNSwgMzYyNTQsXG5cdFx0MzYyODQsIDM2MzE0LCAzNjM0MywgMzYzNzMsIDM2NDAzLCAzNjQzMywgMzY0NjIsIDM2NDkyLCAzNjUyMSwgMzY1NTEsIDM2NTgwLCAzNjYxMCwgMzY2MzksIDM2NjY5LCAzNjY5OCwgMzY3MjgsIDM2NzU3LCAzNjc4NiwgMzY4MTYsIDM2ODQ1LFxuXHRcdDM2ODc1LCAzNjkwNCwgMzY5MzQsIDM2OTYzLCAzNjk5MywgMzcwMjIsIDM3MDUyLCAzNzA4MSwgMzcxMTEsIDM3MTQxLCAzNzE3MCwgMzcyMDAsIDM3MjI5LCAzNzI1OSwgMzcyODgsIDM3MzE4LCAzNzM0NywgMzczNzcsIDM3NDA2LCAzNzQzNixcblx0XHQzNzQ2NSwgMzc0OTUsIDM3NTI0LCAzNzU1NCwgMzc1ODQsIDM3NjEzLCAzNzY0MywgMzc2NzIsIDM3NzAxLCAzNzczMSwgMzc3NjAsIDM3NzkwLCAzNzgxOSwgMzc4NDksIDM3ODc4LCAzNzkwOCwgMzc5MzgsIDM3OTY3LCAzNzk5NywgMzgwMjcsXG5cdFx0MzgwNTYsIDM4MDg1LCAzODExNSwgMzgxNDQsIDM4MTc0LCAzODIwMywgMzgyMzMsIDM4MjYyLCAzODI5MiwgMzgzMjIsIDM4MzUxLCAzODM4MSwgMzg0MTAsIDM4NDQwLCAzODQ2OSwgMzg0OTksIDM4NTI4LCAzODU1OCwgMzg1ODcsIDM4NjE3LFxuXHRcdDM4NjQ2LCAzODY3NiwgMzg3MDUsIDM4NzM1LCAzODc2NCwgMzg3OTQsIDM4ODIzLCAzODg1MywgMzg4ODIsIDM4OTEyLCAzODk0MSwgMzg5NzEsIDM5MDAxLCAzOTAzMCwgMzkwNTksIDM5MDg5LCAzOTExOCwgMzkxNDgsIDM5MTc4LCAzOTIwOCxcblx0XHQzOTIzNywgMzkyNjcsIDM5Mjk3LCAzOTMyNiwgMzkzNTUsIDM5Mzg1LCAzOTQxNCwgMzk0NDQsIDM5NDczLCAzOTUwMywgMzk1MzIsIDM5NTYyLCAzOTU5MiwgMzk2MjEsIDM5NjUwLCAzOTY4MCwgMzk3MDksIDM5NzM5LCAzOTc2OCwgMzk3OTgsXG5cdFx0Mzk4MjcsIDM5ODU3LCAzOTg4NiwgMzk5MTYsIDM5OTQ2LCAzOTk3NSwgNDAwMDUsIDQwMDM1LCA0MDA2NCwgNDAwOTQsIDQwMTIzLCA0MDE1MywgNDAxODIsIDQwMjEyLCA0MDI0MSwgNDAyNzEsIDQwMzAwLCA0MDMzMCwgNDAzNTksIDQwMzg5LFxuXHRcdDQwNDE4LCA0MDQ0OCwgNDA0NzcsIDQwNTA3LCA0MDUzNiwgNDA1NjYsIDQwNTk1LCA0MDYyNSwgNDA2NTUsIDQwNjg1LCA0MDcxNCwgNDA3NDQsIDQwNzczLCA0MDgwMywgNDA4MzIsIDQwODYyLCA0MDg5MiwgNDA5MjEsIDQwOTUxLCA0MDk4MCxcblx0XHQ0MTAwOSwgNDEwMzksIDQxMDY4LCA0MTA5OCwgNDExMjcsIDQxMTU3LCA0MTE4NiwgNDEyMTYsIDQxMjQ1LCA0MTI3NSwgNDEzMDQsIDQxMzM0LCA0MTM2NCwgNDEzOTMsIDQxNDIyLCA0MTQ1MiwgNDE0ODEsIDQxNTExLCA0MTU0MCwgNDE1NzAsXG5cdFx0NDE1OTksIDQxNjI5LCA0MTY1OCwgNDE2ODgsIDQxNzE4LCA0MTc0OCwgNDE3NzcsIDQxODA3LCA0MTgzNiwgNDE4NjUsIDQxODk0LCA0MTkyNCwgNDE5NTMsIDQxOTgzLCA0MjAxMiwgNDIwNDIsIDQyMDcyLCA0MjEwMiwgNDIxMzEsIDQyMTYxLFxuXHRcdDQyMTkwLCA0MjIyMCwgNDIyNDksIDQyMjc5LCA0MjMwOCwgNDIzMzcsIDQyMzY3LCA0MjM5NywgNDI0MjYsIDQyNDU2LCA0MjQ4NSwgNDI1MTUsIDQyNTQ1LCA0MjU3NCwgNDI2MDQsIDQyNjMzLCA0MjY2MiwgNDI2OTIsIDQyNzIxLCA0Mjc1MSxcblx0XHQ0Mjc4MCwgNDI4MTAsIDQyODM5LCA0Mjg2OSwgNDI4OTksIDQyOTI5LCA0Mjk1OCwgNDI5ODgsIDQzMDE3LCA0MzA0NiwgNDMwNzYsIDQzMTA1LCA0MzEzNSwgNDMxNjQsIDQzMTk0LCA0MzIyMywgNDMyNTMsIDQzMjgzLCA0MzMxMiwgNDMzNDIsXG5cdFx0NDMzNzEsIDQzNDAxLCA0MzQzMCwgNDM0NjAsIDQzNDg5LCA0MzUxOSwgNDM1NDgsIDQzNTc4LCA0MzYwNywgNDM2MzcsIDQzNjY2LCA0MzY5NiwgNDM3MjYsIDQzNzU1LCA0Mzc4NSwgNDM4MTQsIDQzODQ0LCA0Mzg3MywgNDM5MDMsIDQzOTMyLFxuXHRcdDQzOTYyLCA0Mzk5MSwgNDQwMjEsIDQ0MDUwLCA0NDA4MCwgNDQxMDksIDQ0MTM5LCA0NDE2OSwgNDQxOTgsIDQ0MjI4LCA0NDI1OCwgNDQyODcsIDQ0MzE3LCA0NDM0NiwgNDQzNzUsIDQ0NDA1LCA0NDQzNCwgNDQ0NjQsIDQ0NDkzLCA0NDUyMyxcblx0XHQ0NDU1MywgNDQ1ODIsIDQ0NjEyLCA0NDY0MSwgNDQ2NzEsIDQ0NzAwLCA0NDczMCwgNDQ3NTksIDQ0Nzg4LCA0NDgxOCwgNDQ4NDcsIDQ0ODc3LCA0NDkwNiwgNDQ5MzYsIDQ0OTY2LCA0NDk5NiwgNDUwMjUsIDQ1MDU1LCA0NTA4NCwgNDUxMTQsXG5cdFx0NDUxNDMsIDQ1MTcyLCA0NTIwMiwgNDUyMzEsIDQ1MjYxLCA0NTI5MCwgNDUzMjAsIDQ1MzUwLCA0NTM4MCwgNDU0MDksIDQ1NDM5LCA0NTQ2OCwgNDU0OTgsIDQ1NTI3LCA0NTU1NiwgNDU1ODYsIDQ1NjE1LCA0NTY0NCwgNDU2NzQsIDQ1NzA0LFxuXHRcdDQ1NzMzLCA0NTc2MywgNDU3OTMsIDQ1ODIzLCA0NTg1MiwgNDU4ODIsIDQ1OTExLCA0NTk0MCwgNDU5NzAsIDQ1OTk5LCA0NjAyOCwgNDYwNTgsIDQ2MDg4LCA0NjExNywgNDYxNDcsIDQ2MTc3LCA0NjIwNiwgNDYyMzYsIDQ2MjY1LCA0NjI5NSxcblx0XHQ0NjMyNCwgNDYzNTQsIDQ2MzgzLCA0NjQxMywgNDY0NDIsIDQ2NDcyLCA0NjUwMSwgNDY1MzEsIDQ2NTYwLCA0NjU5MCwgNDY2MjAsIDQ2NjQ5LCA0NjY3OSwgNDY3MDgsIDQ2NzM4LCA0Njc2NywgNDY3OTcsIDQ2ODI2LCA0Njg1NiwgNDY4ODUsXG5cdFx0NDY5MTUsIDQ2OTQ0LCA0Njk3NCwgNDcwMDMsIDQ3MDMzLCA0NzA2MywgNDcwOTIsIDQ3MTIyLCA0NzE1MSwgNDcxODEsIDQ3MjEwLCA0NzI0MCwgNDcyNjksIDQ3Mjk4LCA0NzMyOCwgNDczNTcsIDQ3Mzg3LCA0NzQxNywgNDc0NDYsIDQ3NDc2LFxuXHRcdDQ3NTA2LCA0NzUzNSwgNDc1NjUsIDQ3NTk0LCA0NzYyNCwgNDc2NTMsIDQ3NjgyLCA0NzcxMiwgNDc3NDEsIDQ3NzcxLCA0NzgwMCwgNDc4MzAsIDQ3ODYwLCA0Nzg5MCwgNDc5MTksIDQ3OTQ5LCA0Nzk3OCwgNDgwMDgsIDQ4MDM3LCA0ODA2Nixcblx0XHQ0ODA5NiwgNDgxMjUsIDQ4MTU1LCA0ODE4NCwgNDgyMTQsIDQ4MjQ0LCA0ODI3MywgNDgzMDMsIDQ4MzMzLCA0ODM2MiwgNDgzOTIsIDQ4NDIxLCA0ODQ1MCwgNDg0ODAsIDQ4NTA5LCA0ODUzOCwgNDg1NjgsIDQ4NTk4LCA0ODYyNywgNDg2NTcsXG5cdFx0NDg2ODcsIDQ4NzE3LCA0ODc0NiwgNDg3NzYsIDQ4ODA1LCA0ODgzNCwgNDg4NjQsIDQ4ODkzLCA0ODkyMiwgNDg5NTIsIDQ4OTgyLCA0OTAxMSwgNDkwNDEsIDQ5MDcxLCA0OTEwMCwgNDkxMzAsIDQ5MTYwLCA0OTE4OSwgNDkyMTgsIDQ5MjQ4LFxuXHRcdDQ5Mjc3LCA0OTMwNiwgNDkzMzYsIDQ5MzY1LCA0OTM5NSwgNDk0MjUsIDQ5NDU1LCA0OTQ4NCwgNDk1MTQsIDQ5NTQzLCA0OTU3MywgNDk2MDIsIDQ5NjMyLCA0OTY2MSwgNDk2OTAsIDQ5NzIwLCA0OTc0OSwgNDk3NzksIDQ5ODA5LCA0OTgzOCxcblx0XHQ0OTg2OCwgNDk4OTgsIDQ5OTI3LCA0OTk1NywgNDk5ODYsIDUwMDE2LCA1MDA0NSwgNTAwNzUsIDUwMTA0LCA1MDEzMywgNTAxNjMsIDUwMTkyLCA1MDIyMiwgNTAyNTIsIDUwMjgxLCA1MDMxMSwgNTAzNDAsIDUwMzcwLCA1MDQwMCwgNTA0MjksXG5cdFx0NTA0NTksIDUwNDg4LCA1MDUxOCwgNTA1NDcsIDUwNTc2LCA1MDYwNiwgNTA2MzUsIDUwNjY1LCA1MDY5NCwgNTA3MjQsIDUwNzU0LCA1MDc4NCwgNTA4MTMsIDUwODQzLCA1MDg3MiwgNTA5MDIsIDUwOTMxLCA1MDk2MCwgNTA5OTAsIDUxMDE5LFxuXHRcdDUxMDQ5LCA1MTA3OCwgNTExMDgsIDUxMTM4LCA1MTE2NywgNTExOTcsIDUxMjI3LCA1MTI1NiwgNTEyODYsIDUxMzE1LCA1MTM0NSwgNTEzNzQsIDUxNDAzLCA1MTQzMywgNTE0NjIsIDUxNDkyLCA1MTUyMiwgNTE1NTIsIDUxNTgyLCA1MTYxMSxcblx0XHQ1MTY0MSwgNTE2NzAsIDUxNjk5LCA1MTcyOSwgNTE3NTgsIDUxNzg3LCA1MTgxNiwgNTE4NDYsIDUxODc2LCA1MTkwNiwgNTE5MzYsIDUxOTY1LCA1MTk5NSwgNTIwMjUsIDUyMDU0LCA1MjA4MywgNTIxMTMsIDUyMTQyLCA1MjE3MSwgNTIyMDAsXG5cdFx0NTIyMzAsIDUyMjYwLCA1MjI5MCwgNTIzMTksIDUyMzQ5LCA1MjM3OSwgNTI0MDgsIDUyNDM4LCA1MjQ2NywgNTI0OTcsIDUyNTI2LCA1MjU1NSwgNTI1ODUsIDUyNjE0LCA1MjY0NCwgNTI2NzMsIDUyNzAzLCA1MjczMywgNTI3NjIsIDUyNzkyLFxuXHRcdDUyODIyLCA1Mjg1MSwgNTI4ODEsIDUyOTEwLCA1MjkzOSwgNTI5NjksIDUyOTk4LCA1MzAyOCwgNTMwNTcsIDUzMDg3LCA1MzExNiwgNTMxNDYsIDUzMTc2LCA1MzIwNSwgNTMyMzUsIDUzMjY0LCA1MzI5NCwgNTMzMjQsIDUzMzUzLCA1MzM4Myxcblx0XHQ1MzQxMiwgNTM0NDEsIDUzNDcxLCA1MzUwMCwgNTM1MzAsIDUzNTU5LCA1MzU4OSwgNTM2MTksIDUzNjQ4LCA1MzY3OCwgNTM3MDgsIDUzNzM3LCA1Mzc2NywgNTM3OTYsIDUzODI1LCA1Mzg1NSwgNTM4ODQsIDUzOTEzLCA1Mzk0MywgNTM5NzMsXG5cdFx0NTQwMDMsIDU0MDMyLCA1NDA2MiwgNTQwOTIsIDU0MTIxLCA1NDE1MSwgNTQxODAsIDU0MjA5LCA1NDIzOSwgNTQyNjgsIDU0Mjk3LCA1NDMyNywgNTQzNTcsIDU0Mzg3LCA1NDQxNiwgNTQ0NDYsIDU0NDc2LCA1NDUwNSwgNTQ1MzUsIDU0NTY0LFxuXHRcdDU0NTkzLCA1NDYyMywgNTQ2NTIsIDU0NjgxLCA1NDcxMSwgNTQ3NDEsIDU0NzcwLCA1NDgwMCwgNTQ4MzAsIDU0ODU5LCA1NDg4OSwgNTQ5MTksIDU0OTQ4LCA1NDk3NywgNTUwMDcsIDU1MDM2LCA1NTA2NiwgNTUwOTUsIDU1MTI1LCA1NTE1NCxcblx0XHQ1NTE4NCwgNTUyMTMsIDU1MjQzLCA1NTI3MywgNTUzMDIsIDU1MzMyLCA1NTM2MSwgNTUzOTEsIDU1NDIwLCA1NTQ1MCwgNTU0NzksIDU1NTA4LCA1NTUzOCwgNTU1NjcsIDU1NTk3LCA1NTYyNywgNTU2NTcsIDU1Njg2LCA1NTcxNiwgNTU3NDUsXG5cdFx0NTU3NzUsIDU1ODA0LCA1NTgzNCwgNTU4NjMsIDU1ODkyLCA1NTkyMiwgNTU5NTEsIDU1OTgxLCA1NjAxMSwgNTYwNDAsIDU2MDcwLCA1NjEwMCwgNTYxMjksIDU2MTU5LCA1NjE4OCwgNTYyMTgsIDU2MjQ3LCA1NjI3NiwgNTYzMDYsIDU2MzM1LFxuXHRcdDU2MzY1LCA1NjM5NCwgNTY0MjQsIDU2NDU0LCA1NjQ4MywgNTY1MTMsIDU2NTQzLCA1NjU3MiwgNTY2MDEsIDU2NjMxLCA1NjY2MCwgNTY2OTAsIDU2NzE5LCA1Njc0OSwgNTY3NzgsIDU2ODA4LCA1NjgzNywgNTY4NjcsIDU2ODk3LCA1NjkyNixcblx0XHQ1Njk1NiwgNTY5ODUsIDU3MDE1LCA1NzA0NCwgNTcwNzQsIDU3MTAzLCA1NzEzMywgNTcxNjIsIDU3MTkyLCA1NzIyMSwgNTcyNTEsIDU3MjgwLCA1NzMxMCwgNTczNDAsIDU3MzY5LCA1NzM5OSwgNTc0MjksIDU3NDU4LCA1NzQ4NywgNTc1MTcsXG5cdFx0NTc1NDYsIDU3NTc2LCA1NzYwNSwgNTc2MzQsIDU3NjY0LCA1NzY5NCwgNTc3MjMsIDU3NzUzLCA1Nzc4MywgNTc4MTMsIDU3ODQyLCA1Nzg3MSwgNTc5MDEsIDU3OTMwLCA1Nzk1OSwgNTc5ODksIDU4MDE4LCA1ODA0OCwgNTgwNzcsIDU4MTA3LFxuXHRcdDU4MTM3LCA1ODE2NywgNTgxOTYsIDU4MjI2LCA1ODI1NSwgNTgyODUsIDU4MzE0LCA1ODM0MywgNTgzNzMsIDU4NDAyLCA1ODQzMiwgNTg0NjEsIDU4NDkxLCA1ODUyMSwgNTg1NTEsIDU4NTgwLCA1ODYxMCwgNTg2MzksIDU4NjY5LCA1ODY5OCxcblx0XHQ1ODcyNywgNTg3NTcsIDU4Nzg2LCA1ODgxNiwgNTg4NDUsIDU4ODc1LCA1ODkwNSwgNTg5MzQsIDU4OTY0LCA1ODk5NCwgNTkwMjMsIDU5MDUzLCA1OTA4MiwgNTkxMTEsIDU5MTQxLCA1OTE3MCwgNTkyMDAsIDU5MjI5LCA1OTI1OSwgNTkyODgsXG5cdFx0NTkzMTgsIDU5MzQ4LCA1OTM3NywgNTk0MDcsIDU5NDM2LCA1OTQ2NiwgNTk0OTUsIDU5NTI1LCA1OTU1NCwgNTk1ODQsIDU5NjEzLCA1OTY0MywgNTk2NzIsIDU5NzAyLCA1OTczMSwgNTk3NjEsIDU5NzkxLCA1OTgyMCwgNTk4NTAsIDU5ODc5LFxuXHRcdDU5OTA5LCA1OTkzOSwgNTk5NjgsIDU5OTk3LCA2MDAyNywgNjAwNTYsIDYwMDg2LCA2MDExNSwgNjAxNDUsIDYwMTc0LCA2MDIwNCwgNjAyMzQsIDYwMjY0LCA2MDI5MywgNjAzMjMsIDYwMzUyLCA2MDM4MSwgNjA0MTEsIDYwNDQwLCA2MDQ2OSxcblx0XHQ2MDQ5OSwgNjA1MjgsIDYwNTU4LCA2MDU4OCwgNjA2MTgsIDYwNjQ4LCA2MDY3NywgNjA3MDcsIDYwNzM2LCA2MDc2NSwgNjA3OTUsIDYwODI0LCA2MDg1MywgNjA4ODMsIDYwOTEyLCA2MDk0MiwgNjA5NzIsIDYxMDAyLCA2MTAzMSwgNjEwNjEsXG5cdFx0NjEwOTAsIDYxMTIwLCA2MTE0OSwgNjExNzksIDYxMjA4LCA2MTIzNywgNjEyNjcsIDYxMjk2LCA2MTMyNiwgNjEzNTYsIDYxMzg1LCA2MTQxNSwgNjE0NDUsIDYxNDc0LCA2MTUwNCwgNjE1MzMsIDYxNTYzLCA2MTU5MiwgNjE2MjEsIDYxNjUxLFxuXHRcdDYxNjgwLCA2MTcxMCwgNjE3MzksIDYxNzY5LCA2MTc5OSwgNjE4MjgsIDYxODU4LCA2MTg4OCwgNjE5MTcsIDYxOTQ3LCA2MTk3NiwgNjIwMDYsIDYyMDM1LCA2MjA2NCwgNjIwOTQsIDYyMTIzLCA2MjE1MywgNjIxODIsIDYyMjEyLCA2MjI0Mixcblx0XHQ2MjI3MSwgNjIzMDEsIDYyMzMxLCA2MjM2MCwgNjIzOTAsIDYyNDE5LCA2MjQ0OCwgNjI0NzgsIDYyNTA3LCA2MjUzNywgNjI1NjYsIDYyNTk2LCA2MjYyNSwgNjI2NTUsIDYyNjg1LCA2MjcxNSwgNjI3NDQsIDYyNzc0LCA2MjgwMywgNjI4MzIsXG5cdFx0NjI4NjIsIDYyODkxLCA2MjkyMSwgNjI5NTAsIDYyOTgwLCA2MzAwOSwgNjMwMzksIDYzMDY5LCA2MzA5OSwgNjMxMjgsIDYzMTU3LCA2MzE4NywgNjMyMTYsIDYzMjQ2LCA2MzI3NSwgNjMzMDUsIDYzMzM0LCA2MzM2MywgNjMzOTMsIDYzNDIzLFxuXHRcdDYzNDUzLCA2MzQ4MiwgNjM1MTIsIDYzNTQxLCA2MzU3MSwgNjM2MDAsIDYzNjMwLCA2MzY1OSwgNjM2ODksIDYzNzE4LCA2Mzc0NywgNjM3NzcsIDYzODA3LCA2MzgzNiwgNjM4NjYsIDYzODk1LCA2MzkyNSwgNjM5NTUsIDYzOTg0LCA2NDAxNCxcblx0XHQ2NDA0MywgNjQwNzMsIDY0MTAyLCA2NDEzMSwgNjQxNjEsIDY0MTkwLCA2NDIyMCwgNjQyNDksIDY0Mjc5LCA2NDMwOSwgNjQzMzksIDY0MzY4LCA2NDM5OCwgNjQ0MjcsIDY0NDU3LCA2NDQ4NiwgNjQ1MTUsIDY0NTQ1LCA2NDU3NCwgNjQ2MDMsXG5cdFx0NjQ2MzMsIDY0NjYzLCA2NDY5MiwgNjQ3MjIsIDY0NzUyLCA2NDc4MiwgNjQ4MTEsIDY0ODQxLCA2NDg3MCwgNjQ4OTksIDY0OTI5LCA2NDk1OCwgNjQ5ODcsIDY1MDE3LCA2NTA0NywgNjUwNzYsIDY1MTA2LCA2NTEzNiwgNjUxNjYsIDY1MTk1LFxuXHRcdDY1MjI1LCA2NTI1NCwgNjUyODMsIDY1MzEzLCA2NTM0MiwgNjUzNzEsIDY1NDAxLCA2NTQzMSwgNjU0NjAsIDY1NDkwLCA2NTUyMCwgNjU1NDksIDY1NTc5LCA2NTYwOCwgNjU2MzgsIDY1NjY3LCA2NTY5NywgNjU3MjYsIDY1NzU1LCA2NTc4NSxcblx0XHQ2NTgxNSwgNjU4NDQsIDY1ODc0LCA2NTkwMywgNjU5MzMsIDY1OTYzLCA2NTk5MiwgNjYwMjIsIDY2MDUxLCA2NjA4MSwgNjYxMTAsIDY2MTQwLCA2NjE2OSwgNjYxOTksIDY2MjI4LCA2NjI1OCwgNjYyODcsIDY2MzE3LCA2NjM0NiwgNjYzNzYsXG5cdFx0NjY0MDUsIDY2NDM1LCA2NjQ2NSwgNjY0OTQsIDY2NTI0LCA2NjU1MywgNjY1ODMsIDY2NjEyLCA2NjY0MSwgNjY2NzEsIDY2NzAwLCA2NjczMCwgNjY3NjAsIDY2Nzg5LCA2NjgxOSwgNjY4NDksIDY2ODc4LCA2NjkwOCwgNjY5MzcsIDY2OTY3LFxuXHRcdDY2OTk2LCA2NzAyNSwgNjcwNTUsIDY3MDg0LCA2NzExNCwgNjcxNDMsIDY3MTczLCA2NzIwMywgNjcyMzMsIDY3MjYyLCA2NzI5MiwgNjczMjEsIDY3MzUxLCA2NzM4MCwgNjc0MDksIDY3NDM5LCA2NzQ2OCwgNjc0OTcsIDY3NTI3LCA2NzU1Nyxcblx0XHQ2NzU4NywgNjc2MTcsIDY3NjQ2LCA2NzY3NiwgNjc3MDUsIDY3NzM1LCA2Nzc2NCwgNjc3OTMsIDY3ODIzLCA2Nzg1MiwgNjc4ODIsIDY3OTExLCA2Nzk0MSwgNjc5NzEsIDY4MDAwLCA2ODAzMCwgNjgwNjAsIDY4MDg5LCA2ODExOSwgNjgxNDgsXG5cdFx0NjgxNzcsIDY4MjA3LCA2ODIzNiwgNjgyNjYsIDY4Mjk1LCA2ODMyNSwgNjgzNTQsIDY4Mzg0LCA2ODQxNCwgNjg0NDMsIDY4NDczLCA2ODUwMiwgNjg1MzIsIDY4NTYxLCA2ODU5MSwgNjg2MjAsIDY4NjUwLCA2ODY3OSwgNjg3MDgsIDY4NzM4LFxuXHRcdDY4NzY4LCA2ODc5NywgNjg4MjcsIDY4ODU3LCA2ODg4NiwgNjg5MTYsIDY4OTQ2LCA2ODk3NSwgNjkwMDQsIDY5MDM0LCA2OTA2MywgNjkwOTIsIDY5MTIyLCA2OTE1MiwgNjkxODEsIDY5MjExLCA2OTI0MCwgNjkyNzAsIDY5MzAwLCA2OTMzMCxcblx0XHQ2OTM1OSwgNjkzODgsIDY5NDE4LCA2OTQ0NywgNjk0NzYsIDY5NTA2LCA2OTUzNSwgNjk1NjUsIDY5NTk1LCA2OTYyNCwgNjk2NTQsIDY5Njg0LCA2OTcxMywgNjk3NDMsIDY5NzcyLCA2OTgwMiwgNjk4MzEsIDY5ODYxLCA2OTg5MCwgNjk5MTksXG5cdFx0Njk5NDksIDY5OTc4LCA3MDAwOCwgNzAwMzgsIDcwMDY3LCA3MDA5NywgNzAxMjYsIDcwMTU2LCA3MDE4NiwgNzAyMTUsIDcwMjQ1LCA3MDI3NCwgNzAzMDMsIDcwMzMzLCA3MDM2MiwgNzAzOTIsIDcwNDIxLCA3MDQ1MSwgNzA0ODEsIDcwNTEwLFxuXHRcdDcwNTQwLCA3MDU3MCwgNzA1OTksIDcwNjI5LCA3MDY1OCwgNzA2ODcsIDcwNzE3LCA3MDc0NiwgNzA3NzYsIDcwODA1LCA3MDgzNSwgNzA4NjQsIDcwODk0LCA3MDkyNCwgNzA5NTQsIDcwOTgzLCA3MTAxMywgNzEwNDIsIDcxMDcxLCA3MTEwMSxcblx0XHQ3MTEzMCwgNzExNTksIDcxMTg5LCA3MTIxOCwgNzEyNDgsIDcxMjc4LCA3MTMwOCwgNzEzMzcsIDcxMzY3LCA3MTM5NywgNzE0MjYsIDcxNDU1LCA3MTQ4NSwgNzE1MTQsIDcxNTQzLCA3MTU3MywgNzE2MDIsIDcxNjMyLCA3MTY2MiwgNzE2OTEsXG5cdFx0NzE3MjEsIDcxNzUxLCA3MTc4MSwgNzE4MTAsIDcxODM5LCA3MTg2OSwgNzE4OTgsIDcxOTI3LCA3MTk1NywgNzE5ODYsIDcyMDE2LCA3MjA0NiwgNzIwNzUsIDcyMTA1LCA3MjEzNSwgNzIxNjQsIDcyMTk0LCA3MjIyMywgNzIyNTMsIDcyMjgyLFxuXHRcdDcyMzExLCA3MjM0MSwgNzIzNzAsIDcyNDAwLCA3MjQyOSwgNzI0NTksIDcyNDg5LCA3MjUxOCwgNzI1NDgsIDcyNTc3LCA3MjYwNywgNzI2MzcsIDcyNjY2LCA3MjY5NSwgNzI3MjUsIDcyNzU0LCA3Mjc4NCwgNzI4MTMsIDcyODQzLCA3Mjg3Mixcblx0XHQ3MjkwMiwgNzI5MzEsIDcyOTYxLCA3Mjk5MSwgNzMwMjAsIDczMDUwLCA3MzA4MCwgNzMxMDksIDczMTM5LCA3MzE2OCwgNzMxOTcsIDczMjI3LCA3MzI1NiwgNzMyODYsIDczMzE1LCA3MzM0NSwgNzMzNzUsIDczNDA0LCA3MzQzNCwgNzM0NjQsXG5cdFx0NzM0OTMsIDczNTIzLCA3MzU1MiwgNzM1ODEsIDczNjExLCA3MzY0MCwgNzM2NjksIDczNjk5LCA3MzcyOSwgNzM3NTgsIDczNzg4LCA3MzgxOCwgNzM4NDgsIDczODc3LCA3MzkwNywgNzM5MzYsIDczOTY1LCA3Mzk5NSwgNzQwMjQsIDc0MDUzLFxuXHRcdDc0MDgzLCA3NDExMywgNzQxNDIsIDc0MTcyLCA3NDIwMiwgNzQyMzEsIDc0MjYxLCA3NDI5MSwgNzQzMjAsIDc0MzQ5LCA3NDM3OSwgNzQ0MDgsIDc0NDM3LCA3NDQ2NywgNzQ0OTcsIDc0NTI2LCA3NDU1NiwgNzQ1ODYsIDc0NjE1LCA3NDY0NSxcblx0XHQ3NDY3NSwgNzQ3MDQsIDc0NzMzLCA3NDc2MywgNzQ3OTIsIDc0ODIyLCA3NDg1MSwgNzQ4ODEsIDc0OTEwLCA3NDk0MCwgNzQ5NjksIDc0OTk5LCA3NTAyOSwgNzUwNTgsIDc1MDg4LCA3NTExNywgNzUxNDcsIDc1MTc2LCA3NTIwNiwgNzUyMzUsXG5cdFx0NzUyNjQsIDc1Mjk0LCA3NTMyMywgNzUzNTMsIDc1MzgzLCA3NTQxMiwgNzU0NDIsIDc1NDcyLCA3NTUwMSwgNzU1MzEsIDc1NTYwLCA3NTU5MCwgNzU2MTksIDc1NjQ4LCA3NTY3OCwgNzU3MDcsIDc1NzM3LCA3NTc2NiwgNzU3OTYsIDc1ODI2LFxuXHRcdDc1ODU2LCA3NTg4NSwgNzU5MTUsIDc1OTQ0LCA3NTk3NCwgNzYwMDMsIDc2MDMyLCA3NjA2MiwgNzYwOTEsIDc2MTIxLCA3NjE1MCwgNzYxODAsIDc2MjEwLCA3NjIzOSwgNzYyNjksIDc2Mjk5LCA3NjMyOCwgNzYzNTgsIDc2Mzg3LCA3NjQxNixcblx0XHQ3NjQ0NiwgNzY0NzUsIDc2NTA1LCA3NjUzNCwgNzY1NjQsIDc2NTkzLCA3NjYyMywgNzY2NTMsIDc2NjgyLCA3NjcxMiwgNzY3NDEsIDc2NzcxLCA3NjgwMSwgNzY4MzAsIDc2ODU5LCA3Njg4OSwgNzY5MTgsIDc2OTQ4LCA3Njk3NywgNzcwMDcsXG5cdFx0NzcwMzYsIDc3MDY2LCA3NzA5NiwgNzcxMjUsIDc3MTU1LCA3NzE4NSwgNzcyMTQsIDc3MjQzLCA3NzI3MywgNzczMDIsIDc3MzMyLCA3NzM2MSwgNzczOTAsIDc3NDIwLCA3NzQ1MCwgNzc0NzksIDc3NTA5LCA3NzUzOSwgNzc1NjksIDc3NTk4LFxuXHRcdDc3NjI3LCA3NzY1NywgNzc2ODYsIDc3NzE1LCA3Nzc0NSwgNzc3NzQsIDc3ODA0LCA3NzgzMywgNzc4NjMsIDc3ODkzLCA3NzkyMywgNzc5NTIsIDc3OTgyLCA3ODAxMSwgNzgwNDEsIDc4MDcwLCA3ODA5OSwgNzgxMjksIDc4MTU4LCA3ODE4OCxcblx0XHQ3ODIxNywgNzgyNDcsIDc4Mjc3LCA3ODMwNywgNzgzMzYsIDc4MzY2LCA3ODM5NSwgNzg0MjUsIDc4NDU0LCA3ODQ4MywgNzg1MTMsIDc4NTQyLCA3ODU3MiwgNzg2MDEsIDc4NjMxLCA3ODY2MSwgNzg2OTAsIDc4NzIwLCA3ODc1MCwgNzg3NzksXG5cdFx0Nzg4MDgsIDc4ODM4LCA3ODg2NywgNzg4OTcsIDc4OTI2LCA3ODk1NiwgNzg5ODUsIDc5MDE1LCA3OTA0NCwgNzkwNzQsIDc5MTA0LCA3OTEzMywgNzkxNjMsIDc5MTkyLCA3OTIyMiwgNzkyNTEsIDc5MjgxLCA3OTMxMCwgNzkzNDAsIDc5MzY5LFxuXHRcdDc5Mzk5LCA3OTQyOCwgNzk0NTgsIDc5NDg3LCA3OTUxNywgNzk1NDYsIDc5NTc2LCA3OTYwNiwgNzk2MzUsIDc5NjY1LCA3OTY5NSwgNzk3MjQsIDc5NzUzLCA3OTc4MywgNzk4MTIsIDc5ODQxLCA3OTg3MSwgNzk5MDAsIDc5OTMwLCA3OTk2MCxcblx0XHQ3OTk5MF07XG5cbn0pKGpRdWVyeSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMudW1tYWxxdXJhLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLnVtbWFscXVyYS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgVW1tQWxRdXJhIGNhbGVuZGFyIGZvciBqUXVlcnkgdjIuMC4xLlxyXG4gICBXcml0dGVuIGJ5IEFtcm8gT3NhbWEgTWFyY2ggMjAxMy5cclxuICAgTW9kaWZpZWQgYnkgQmlubm9vaC5jb20gJiB3d3cuZWxtLnNhIC0gMjAxNCAtIEFkZGVkIGRhdGVzIGJhY2sgdG8gMTI3NiBIaWpyaSB5ZWFyLlxyXG4gICBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCAoaHR0cDovL2tlaXRoLXdvb2QubmFtZS9saWNlbmNlLmh0bWwpIGxpY2Vuc2UuIFxyXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cclxuXHJcbihmdW5jdGlvbiAoJCkgeyAvLyBIaWRlIHNjb3BlLCBubyAkIGNvbmZsaWN0XHJcblxyXG5cdC8qKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgVW1tQWxRdXJhIG9yICdzYXVkaScgY2FsZW5kYXIuXHJcblx0XHRTZWUgYWxzbyA8YSBocmVmPVwiaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Jc2xhbWljX2NhbGVuZGFyI1NhdWRpX0FyYWJpYS4yN3NfVW1tX2FsLVF1cmFfY2FsZW5kYXJcIj5odHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lzbGFtaWNfY2FsZW5kYXIjU2F1ZGlfQXJhYmlhLjI3c19VbW1fYWwtUXVyYV9jYWxlbmRhcjwvYT4uXHJcblx0XHQ8YSBocmVmPVwiaHR0cDovL3d3dy51bW11bHF1cmEub3JnLnNhL0Fib3V0LmFzcHhcIj5odHRwOi8vd3d3LnVtbXVscXVyYS5vcmcuc2EvQWJvdXQuYXNweDwvYT5cclxuXHRcdDxhIGhyZWY9XCJodHRwOi8vd3d3LnN0YWZmLnNjaWVuY2UudXUubmwvfmdlbnQwMTEzL2lzbGFtL3VtbWFscXVyYS5odG1cIj5odHRwOi8vd3d3LnN0YWZmLnNjaWVuY2UudXUubmwvfmdlbnQwMTEzL2lzbGFtL3VtbWFscXVyYS5odG08L2E+XHJcblx0XHRAY2xhc3MgVW1tQWxRdXJhQ2FsZW5kYXJcclxuXHRcdEBwYXJhbSBbbGFuZ3VhZ2U9JyddIHtzdHJpbmd9IFRoZSBsYW5ndWFnZSBjb2RlIChkZWZhdWx0IEVuZ2xpc2gpIGZvciBsb2NhbGlzYXRpb24uICovXHJcblx0ZnVuY3Rpb24gVW1tQWxRdXJhQ2FsZW5kYXIobGFuZ3VhZ2UpIHtcclxuXHRcdHRoaXMubG9jYWwgPSB0aGlzLnJlZ2lvbmFsT3B0aW9uc1tsYW5ndWFnZSB8fCAnJ10gfHwgdGhpcy5yZWdpb25hbE9wdGlvbnNbJyddO1xyXG5cdH1cclxuXHJcblx0VW1tQWxRdXJhQ2FsZW5kYXIucHJvdG90eXBlID0gbmV3ICQuY2FsZW5kYXJzLmJhc2VDYWxlbmRhcjtcclxuXHJcblx0JC5leHRlbmQoVW1tQWxRdXJhQ2FsZW5kYXIucHJvdG90eXBlLCB7XHJcblx0XHQvKiogVGhlIGNhbGVuZGFyIG5hbWUuXHJcblx0XHRcdEBtZW1iZXJvZiBVbW1BbFF1cmFDYWxlbmRhciAqL1xyXG5cdFx0bmFtZTogJ1VtbUFsUXVyYScsXHJcblx0XHQvL2pkRXBvY2g6IDE5NDg0NDAsIC8vIEp1bGlhbiBkYXRlIG9mIHN0YXJ0IG9mIFVtbUFsUXVyYSBlcG9jaDogMTQgTWFyY2ggMTkzNyBDRVxyXG5cdFx0Ly9kYXlzUGVyTW9udGg6IC8vIERheXMgcGVyIG1vbnRoIGluIGEgY29tbW9uIHllYXIsIHJlcGxhY2VkIGJ5IGEgbWV0aG9kLlxyXG5cdFx0LyoqIDxjb2RlPnRydWU8L2NvZGU+IGlmIGhhcyBhIHllYXIgemVybywgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC5cclxuXHRcdFx0QG1lbWJlcm9mIFVtbUFsUXVyYUNhbGVuZGFyICovXHJcblx0XHRoYXNZZWFyWmVybzogZmFsc2UsXHJcblx0XHQvKiogVGhlIG1pbmltdW0gbW9udGggbnVtYmVyLlxyXG5cdFx0XHRAbWVtYmVyb2YgVW1tQWxRdXJhQ2FsZW5kYXIgKi9cclxuXHRcdG1pbk1vbnRoOiAxLFxyXG5cdFx0LyoqIFRoZSBmaXJzdCBtb250aCBpbiB0aGUgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIFVtbUFsUXVyYUNhbGVuZGFyICovXHJcblx0XHRmaXJzdE1vbnRoOiAxLFxyXG5cdFx0LyoqIFRoZSBtaW5pbXVtIGRheSBudW1iZXIuXHJcblx0XHRcdEBtZW1iZXJvZiBVbW1BbFF1cmFDYWxlbmRhciAqL1xyXG5cdFx0bWluRGF5OiAxLFxyXG5cclxuXHRcdC8qKiBMb2NhbGlzYXRpb25zIGZvciB0aGUgcGx1Z2luLlxyXG5cdFx0XHRFbnRyaWVzIGFyZSBvYmplY3RzIGluZGV4ZWQgYnkgdGhlIGxhbmd1YWdlIGNvZGUgKCcnIGJlaW5nIHRoZSBkZWZhdWx0IFVTL0VuZ2xpc2gpLlxyXG5cdFx0XHRFYWNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLlxyXG5cdFx0XHRAbWVtYmVyb2YgVW1tQWxRdXJhQ2FsZW5kYXJcclxuXHRcdFx0QHByb3BlcnR5IG5hbWUge3N0cmluZ30gVGhlIGNhbGVuZGFyIG5hbWUuXHJcblx0XHRcdEBwcm9wZXJ0eSBlcG9jaHMge3N0cmluZ1tdfSBUaGUgZXBvY2ggbmFtZXMuXHJcblx0XHRcdEBwcm9wZXJ0eSBtb250aE5hbWVzIHtzdHJpbmdbXX0gVGhlIGxvbmcgbmFtZXMgb2YgdGhlIG1vbnRocyBvZiB0aGUgeWVhci5cclxuXHRcdFx0QHByb3BlcnR5IG1vbnRoTmFtZXNTaG9ydCB7c3RyaW5nW119IFRoZSBzaG9ydCBuYW1lcyBvZiB0aGUgbW9udGhzIG9mIHRoZSB5ZWFyLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF5TmFtZXMge3N0cmluZ1tdfSBUaGUgbG9uZyBuYW1lcyBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vlay5cclxuXHRcdFx0QHByb3BlcnR5IGRheU5hbWVzU2hvcnQge3N0cmluZ1tdfSBUaGUgc2hvcnQgbmFtZXMgb2YgdGhlIGRheXMgb2YgdGhlIHdlZWsuXHJcblx0XHRcdEBwcm9wZXJ0eSBkYXlOYW1lc01pbiB7c3RyaW5nW119IFRoZSBtaW5pbWFsIG5hbWVzIG9mIHRoZSBkYXlzIG9mIHRoZSB3ZWVrLlxyXG5cdFx0XHRAcHJvcGVydHkgZGF0ZUZvcm1hdCB7c3RyaW5nfSBUaGUgZGF0ZSBmb3JtYXQgZm9yIHRoaXMgY2FsZW5kYXIuXHJcblx0XHRcdFx0XHRTZWUgdGhlIG9wdGlvbnMgb24gPGEgaHJlZj1cIkJhc2VDYWxlbmRhci5odG1sI2Zvcm1hdERhdGVcIj48Y29kZT5mb3JtYXREYXRlPC9jb2RlPjwvYT4gZm9yIGRldGFpbHMuXHJcblx0XHRcdEBwcm9wZXJ0eSBmaXJzdERheSB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWssIHN0YXJ0aW5nIGF0IDAuXHJcblx0XHRcdEBwcm9wZXJ0eSBpc1JUTCB7bnVtYmVyfSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGxvY2FsaXNhdGlvbiByZWFkcyByaWdodC10by1sZWZ0LiAqL1xyXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7IC8vIExvY2FsaXNhdGlvbnNcclxuXHRcdFx0Jyc6IHtcclxuXHRcdFx0XHRuYW1lOiAnVW1tIGFsLVF1cmEnLFxyXG5cdFx0XHRcdGVwb2NoczogWydCSCcsICdBSCddLFxyXG5cdFx0XHRcdG1vbnRoTmFtZXM6IFsnQWwtTXVoYXJyYW0nLCAnU2FmYXInLCAnUmFiaVxcJyBhbC1hd3dhbCcsICdSYWJpXFwnIEFsLVRoYW5pJywgJ0p1bWFkYSBBbC1Bd3dhbCcsICdKdW1hZGEgQWwtVGhhbmknLFxyXG5cdFx0XHRcdCdSYWphYicsICdTaGFcXCdhYmFuJywgJ1JhbWFkYW4nLCAnU2hhd3dhbCcsICdEaHUgYWwtUWlcXCdkYWgnLCAnRGh1IGFsLUhpamphaCddLFxyXG5cdFx0XHRcdG1vbnRoTmFtZXNTaG9ydDogWydNdWgnLCAnU2FmJywgJ1JhYjEnLCAnUmFiMicsICdKdW0xJywgJ0p1bTInLCAnUmFqJywgJ1NoYVxcJycsICdSYW0nLCAnU2hhdycsICdEaHVRJywgJ0RodUgnXSxcclxuXHRcdFx0XHRkYXlOYW1lczogWydZYXdtIGFsLUFoYWQnLCAnWWF3bSBhbC1JdGhuYWluJywgJ1lhd20gYWwtVGhhbMSBdGjEgeKAmScsICdZYXdtIGFsLUFyYmHigJjEgeKAmScsICdZYXdtIGFsLUtoYW3Eq3MnLCAnWWF3bSBhbC1KdW3igJhhJywgJ1lhd20gYWwtU2FidCddLFxyXG5cdFx0XHRcdGRheU5hbWVzTWluOiBbJ0FoJywgJ0l0aCcsICdUaCcsICdBcicsICdLaCcsICdKdScsICdTYSddLFxyXG5cdFx0XHRcdGRhdGVGb3JtYXQ6ICd5eXl5L21tL2RkJyxcclxuXHRcdFx0XHRmaXJzdERheTogNixcclxuXHRcdFx0XHRpc1JUTDogdHJ1ZVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgaW4gYSBsZWFwIHllYXIuXHJcblx0XHRcdEBtZW1iZXJvZiBVbW1BbFF1cmFDYWxlbmRhclxyXG5cdFx0XHRAcGFyYW0geWVhciB7Q0RhdGV8bnVtYmVyfSBUaGUgZGF0ZSB0byBleGFtaW5lIG9yIHRoZSB5ZWFyIHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgaXMgYSBsZWFwIHllYXIsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRsZWFwWWVhcjogZnVuY3Rpb24gKHllYXIpIHtcclxuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLl92YWxpZGF0ZSh5ZWFyLCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pbkRheSwgJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXIpO1xyXG5cdFx0XHRyZXR1cm4gKHRoaXMuZGF5c0luWWVhcihkYXRlLnllYXIoKSkgPT09IDM1NSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgdGhlIHdlZWsgb2YgdGhlIHllYXIgZm9yIGEgZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIFVtbUFsUXVyYUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIHdlZWsgb2YgdGhlIHllYXIuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR3ZWVrT2ZZZWFyOiBmdW5jdGlvbiAoeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHQvLyBGaW5kIFN1bmRheSBvZiB0aGlzIHdlZWsgc3RhcnRpbmcgb24gU3VuZGF5XHJcblx0XHRcdHZhciBjaGVja0RhdGUgPSB0aGlzLm5ld0RhdGUoeWVhciwgbW9udGgsIGRheSk7XHJcblx0XHRcdGNoZWNrRGF0ZS5hZGQoLWNoZWNrRGF0ZS5kYXlPZldlZWsoKSwgJ2QnKTtcclxuXHRcdFx0cmV0dXJuIE1hdGguZmxvb3IoKGNoZWNrRGF0ZS5kYXlPZlllYXIoKSAtIDEpIC8gNykgKyAxO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgeWVhci5cclxuXHRcdFx0QG1lbWJlcm9mIFVtbUFsUXVyYUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGRheXMuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCB5ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRkYXlzSW5ZZWFyOiBmdW5jdGlvbiAoeWVhcikge1xyXG5cdFx0XHR2YXIgZGF5c0NvdW50ID0gMDtcclxuXHRcdFx0Zm9yICh2YXIgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xyXG5cdFx0XHRcdGRheXNDb3VudCArPSB0aGlzLmRheXNJbk1vbnRoKHllYXIsIGkpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBkYXlzQ291bnQ7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aC5cclxuXHRcdFx0QG1lbWJlcm9mIFVtbUFsUXVyYUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgb2YgdGhlIG1vbnRoLlxyXG5cdFx0XHRAcGFyYW0gW21vbnRoXSB7bnVtYmVyfSBUaGUgbW9udGguXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgbW9udGguXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBtb250aC95ZWFyIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHRkYXlzSW5Nb250aDogZnVuY3Rpb24gKHllYXIsIG1vbnRoKSB7XHJcblx0XHRcdHZhciBkYXRlID0gdGhpcy5fdmFsaWRhdGUoeWVhciwgbW9udGgsIHRoaXMubWluRGF5LCAkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkTW9udGgpO1xyXG5cdFx0XHR2YXIgbWNqZG4gPSBkYXRlLnRvSkQoKSAtIDI0MDAwMDAgKyAwLjU7IC8vIE1vZGlmaWVkIENocm9ub2xvZ2ljYWwgSnVsaWFuIERheSBOdW1iZXIgKE1DSkROKVxyXG5cdFx0XHQvLyB0aGUgTUNKRE4ncyBvZiB0aGUgc3RhcnQgb2YgdGhlIGx1bmF0aW9ucyBpbiB0aGUgVW1tIGFsLVF1cmEgY2FsZW5kYXIgYXJlIHN0b3JlZCBpbiB0aGUgJ3VtbWFscXVyYV9kYXQnIGFycmF5XHJcblx0XHRcdHZhciBpbmRleCA9IDA7XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdW1tYWxxdXJhX2RhdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmICh1bW1hbHF1cmFfZGF0W2ldID4gbWNqZG4pIHtcclxuXHRcdFx0XHRcdHJldHVybiAodW1tYWxxdXJhX2RhdFtpbmRleF0gLSB1bW1hbHF1cmFfZGF0W2luZGV4IC0gMV0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpbmRleCsrO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiAzMDsgLy8gVW5rbm93biBvdXRzaWRlXHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGRhdGUgaXMgYSB3ZWVrIGRheS5cclxuXHRcdFx0QG1lbWJlcm9mIFVtbUFsUXVyYUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGV4YW1pbmUgb3IgdGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGV4YW1pbmUuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGV4YW1pbmUuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGEgd2VlayBkYXksIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBub3QuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR3ZWVrRGF5OiBmdW5jdGlvbiAoeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5kYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSkgIT09IDU7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgSnVsaWFuIGRhdGUgZXF1aXZhbGVudCBmb3IgdGhpcyBkYXRlLFxyXG5cdFx0XHRpLmUuIGRheXMgc2luY2UgSmFudWFyeSAxLCA0NzEzIEJDRSBHcmVlbndpY2ggbm9vbi5cclxuXHRcdFx0QG1lbWJlcm9mIFVtbUFsUXVyYUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIGNvbnZlcnQgb3IgdGhlIHllYXIgdG8gY29udmVydC5cclxuXHRcdFx0QHBhcmFtIFttb250aF0ge251bWJlcn0gVGhlIG1vbnRoIHRvIGNvbnZlcnQuXHJcblx0XHRcdEBwYXJhbSBbZGF5XSB7bnVtYmVyfSBUaGUgZGF5IHRvIGNvbnZlcnQuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIGVxdWl2YWxlbnQgSnVsaWFuIGRhdGUuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgYW4gaW52YWxpZCBkYXRlIG9yIGEgZGlmZmVyZW50IGNhbGVuZGFyIHVzZWQuICovXHJcblx0XHR0b0pEOiBmdW5jdGlvbiAoeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMuX3ZhbGlkYXRlKHllYXIsIG1vbnRoLCBkYXksICQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlKTtcclxuXHRcdFx0dmFyIGluZGV4ID0gKDEyICogKGRhdGUueWVhcigpIC0gMSkpICsgZGF0ZS5tb250aCgpIC0gMTUyOTI7XHJcblx0XHRcdHZhciBtY2pkbiA9IGRhdGUuZGF5KCkgKyB1bW1hbHF1cmFfZGF0W2luZGV4IC0gMV0gLSAxO1xyXG5cdFx0XHRyZXR1cm4gbWNqZG4gKyAyNDAwMDAwIC0gMC41OyAvLyBNb2RpZmllZCBDaHJvbm9sb2dpY2FsIEp1bGlhbiBEYXkgTnVtYmVyIChNQ0pETilcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENyZWF0ZSBhIG5ldyBkYXRlIGZyb20gYSBKdWxpYW4gZGF0ZS5cclxuXHRcdFx0QG1lbWJlcm9mIFVtbUFsUXVyYUNhbGVuZGFyXHJcblx0XHRcdEBwYXJhbSBqZCB7bnVtYmVyfSBUaGUgSnVsaWFuIGRhdGUgdG8gY29udmVydC5cclxuXHRcdFx0QHJldHVybiB7Q0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuICovXHJcblx0XHRmcm9tSkQ6IGZ1bmN0aW9uIChqZCkge1xyXG5cdFx0XHR2YXIgbWNqZG4gPSBqZCAtIDI0MDAwMDAgKyAwLjU7IC8vIE1vZGlmaWVkIENocm9ub2xvZ2ljYWwgSnVsaWFuIERheSBOdW1iZXIgKE1DSkROKVxyXG5cdFx0XHQvLyB0aGUgTUNKRE4ncyBvZiB0aGUgc3RhcnQgb2YgdGhlIGx1bmF0aW9ucyBpbiB0aGUgVW1tIGFsLVF1cmEgY2FsZW5kYXIgXHJcblx0XHRcdC8vIGFyZSBzdG9yZWQgaW4gdGhlICd1bW1hbHF1cmFfZGF0JyBhcnJheVxyXG5cdFx0XHR2YXIgaW5kZXggPSAwO1xyXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHVtbWFscXVyYV9kYXQubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRpZiAodW1tYWxxdXJhX2RhdFtpXSA+IG1jamRuKSBicmVhaztcclxuXHRcdFx0XHRpbmRleCsrO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBsdW5hdGlvbiA9IGluZGV4ICsgMTUyOTI7IC8vVW1tQWxRdXJhIEx1bmF0aW9uIE51bWJlclxyXG5cdFx0XHR2YXIgaWkgPSBNYXRoLmZsb29yKChsdW5hdGlvbiAtIDEpIC8gMTIpO1xyXG5cdFx0XHR2YXIgeWVhciA9IGlpICsgMTtcclxuXHRcdFx0dmFyIG1vbnRoID0gbHVuYXRpb24gLSAxMiAqIGlpO1xyXG5cdFx0XHR2YXIgZGF5ID0gbWNqZG4gLSB1bW1hbHF1cmFfZGF0W2luZGV4IC0gMV0gKyAxO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5uZXdEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGV0ZXJtaW5lIHdoZXRoZXIgYSBkYXRlIGlzIHZhbGlkIGZvciB0aGlzIGNhbGVuZGFyLlxyXG5cdFx0XHRAbWVtYmVyb2YgVW1tQWxRdXJhQ2FsZW5kYXJcclxuXHRcdFx0QHBhcmFtIHllYXIge251bWJlcn0gVGhlIHllYXIgdG8gZXhhbWluZS5cclxuXHRcdFx0QHBhcmFtIG1vbnRoIHtudW1iZXJ9IFRoZSBtb250aCB0byBleGFtaW5lLlxyXG5cdFx0XHRAcGFyYW0gZGF5IHtudW1iZXJ9IFRoZSBkYXkgdG8gZXhhbWluZS5cclxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYSB2YWxpZCBkYXRlLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LiAqL1xyXG5cdFx0aXNWYWxpZDogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSkge1xyXG5cdFx0XHR2YXIgdmFsaWQgPSAkLmNhbGVuZGFycy5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLmlzVmFsaWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuXHRcdFx0aWYgKHZhbGlkKSB7XHJcblx0XHRcdFx0eWVhciA9ICh5ZWFyLnllYXIgIT0gbnVsbCA/IHllYXIueWVhciA6IHllYXIpO1xyXG5cdFx0XHRcdHZhbGlkID0gKHllYXIgPj0gMTI3NiAmJiB5ZWFyIDw9IDE1MDApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB2YWxpZDtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENoZWNrIHRoYXQgYSBjYW5kaWRhdGUgZGF0ZSBpcyBmcm9tIHRoZSBzYW1lIGNhbGVuZGFyIGFuZCBpcyB2YWxpZC5cclxuXHRcdFx0QG1lbWJlcm9mIFVtbUFsUXVyYUNhbGVuZGFyXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSB5ZWFyIHtDRGF0ZXxudW1iZXJ9IFRoZSBkYXRlIHRvIHZhbGlkYXRlIG9yIHRoZSB5ZWFyIHRvIHZhbGlkYXRlLlxyXG5cdFx0XHRAcGFyYW0gbW9udGgge251bWJlcn0gVGhlIG1vbnRoIHRvIHZhbGlkYXRlLlxyXG5cdFx0XHRAcGFyYW0gZGF5IHtudW1iZXJ9IFRoZSBkYXkgdG8gdmFsaWRhdGUuXHJcblx0XHRcdEBwYXJhbSBlcnJvciB7c3RyaW5nfSBFcnJvciBtZXNzYWdlIGlmIGludmFsaWQuXHJcblx0XHRcdEB0aHJvd3MgRXJyb3IgaWYgZGlmZmVyZW50IGNhbGVuZGFycyB1c2VkIG9yIGludmFsaWQgZGF0ZS4gKi9cclxuXHRcdF92YWxpZGF0ZTogZnVuY3Rpb24oeWVhciwgbW9udGgsIGRheSwgZXJyb3IpIHtcclxuXHRcdFx0dmFyIGRhdGUgPSAkLmNhbGVuZGFycy5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLl92YWxpZGF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG5cdFx0XHRpZiAoZGF0ZS55ZWFyIDwgMTI3NiB8fCBkYXRlLnllYXIgPiAxNTAwKSB7XHJcblx0XHRcdFx0dGhyb3cgZXJyb3IucmVwbGFjZSgvXFx7MFxcfS8sIHRoaXMubG9jYWwubmFtZSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGRhdGU7XHJcblx0XHR9XHJcblx0fSk7XHJcblxyXG5cdC8vIFVtbUFsUXVyYSBjYWxlbmRhciBpbXBsZW1lbnRhdGlvblxyXG5cdCQuY2FsZW5kYXJzLmNhbGVuZGFycy51bW1hbHF1cmEgPSBVbW1BbFF1cmFDYWxlbmRhcjtcclxuXHJcblx0dmFyIHVtbWFscXVyYV9kYXQgPSBbXHJcblx0XHQyMCwgICAgNTAsICAgIDc5LCAgICAxMDksICAgMTM4LCAgIDE2OCwgICAxOTcsICAgMjI3LCAgIDI1NiwgICAyODYsICAgMzE1LCAgIDM0NSwgICAzNzQsICAgNDA0LCAgIDQzMywgICA0NjMsICAgNDkyLCAgIDUyMiwgICA1NTEsICAgNTgxLCBcclxuXHRcdDYxMSwgICA2NDEsICAgNjcwLCAgIDcwMCwgICA3MjksICAgNzU5LCAgIDc4OCwgICA4MTgsICAgODQ3LCAgIDg3NywgICA5MDYsICAgOTM2LCAgIDk2NSwgICA5OTUsICAgMTAyNCwgIDEwNTQsICAxMDgzLCAgMTExMywgIDExNDIsICAxMTcyLFxyXG5cdFx0MTIwMSwgIDEyMzEsICAxMjYwLCAgMTI5MCwgIDEzMjAsICAxMzUwLCAgMTM3OSwgIDE0MDksICAxNDM4LCAgMTQ2OCwgIDE0OTcsICAxNTI3LCAgMTU1NiwgIDE1ODYsICAxNjE1LCAgMTY0NSwgIDE2NzQsICAxNzA0LCAgMTczMywgIDE3NjMsXHJcblx0XHQxNzkyLCAgMTgyMiwgIDE4NTEsICAxODgxLCAgMTkxMCwgIDE5NDAsICAxOTY5LCAgMTk5OSwgIDIwMjgsICAyMDU4LCAgMjA4NywgIDIxMTcsICAyMTQ2LCAgMjE3NiwgIDIyMDUsICAyMjM1LCAgMjI2NCwgIDIyOTQsICAyMzIzLCAgMjM1MyxcclxuXHRcdDIzODMsICAyNDEzLCAgMjQ0MiwgIDI0NzIsICAyNTAxLCAgMjUzMSwgIDI1NjAsICAyNTkwLCAgMjYxOSwgIDI2NDksICAyNjc4LCAgMjcwOCwgIDI3MzcsICAyNzY3LCAgMjc5NiwgIDI4MjYsICAyODU1LCAgMjg4NSwgIDI5MTQsICAyOTQ0LFxyXG5cdFx0Mjk3MywgIDMwMDMsICAzMDMyLCAgMzA2MiwgIDMwOTEsICAzMTIxLCAgMzE1MCwgIDMxODAsICAzMjA5LCAgMzIzOSwgIDMyNjgsICAzMjk4LCAgMzMyNywgIDMzNTcsICAzMzg2LCAgMzQxNiwgIDM0NDYsICAzNDc2LCAgMzUwNSwgIDM1MzUsXHJcblx0XHQzNTY0LCAgMzU5NCwgIDM2MjMsICAzNjUzLCAgMzY4MiwgIDM3MTIsICAzNzQxLCAgMzc3MSwgIDM4MDAsICAzODMwLCAgMzg1OSwgIDM4ODksICAzOTE4LCAgMzk0OCwgIDM5NzcsICA0MDA3LCAgNDAzNiwgIDQwNjYsICA0MDk1LCAgNDEyNSxcclxuXHRcdDQxNTUsICA0MTg1LCAgNDIxNCwgIDQyNDQsICA0MjczLCAgNDMwMywgIDQzMzIsICA0MzYyLCAgNDM5MSwgIDQ0MjEsICA0NDUwLCAgNDQ4MCwgIDQ1MDksICA0NTM5LCAgNDU2OCwgIDQ1OTgsICA0NjI3LCAgNDY1NywgIDQ2ODYsICA0NzE2LFxyXG5cdFx0NDc0NSwgIDQ3NzUsICA0ODA0LCAgNDgzNCwgIDQ4NjMsICA0ODkzLCAgNDkyMiwgIDQ5NTIsICA0OTgxLCAgNTAxMSwgIDUwNDAsICA1MDcwLCAgNTA5OSwgIDUxMjksICA1MTU4LCAgNTE4OCwgIDUyMTgsICA1MjQ4LCAgNTI3NywgIDUzMDcsXHJcblx0XHQ1MzM2LCAgNTM2NiwgIDUzOTUsICA1NDI1LCAgNTQ1NCwgIDU0ODQsICA1NTEzLCAgNTU0MywgIDU1NzIsICA1NjAyLCAgNTYzMSwgIDU2NjEsICA1NjkwLCAgNTcyMCwgIDU3NDksICA1Nzc5LCAgNTgwOCwgIDU4MzgsICA1ODY3LCAgNTg5NyxcclxuXHRcdDU5MjYsICA1OTU2LCAgNTk4NSwgIDYwMTUsICA2MDQ0LCAgNjA3NCwgIDYxMDMsICA2MTMzLCAgNjE2MiwgIDYxOTIsICA2MjIxLCAgNjI1MSwgIDYyODEsICA2MzExLCAgNjM0MCwgIDYzNzAsICA2Mzk5LCAgNjQyOSwgIDY0NTgsICA2NDg4LFxyXG5cdFx0NjUxNywgIDY1NDcsICA2NTc2LCAgNjYwNiwgIDY2MzUsICA2NjY1LCAgNjY5NCwgIDY3MjQsICA2NzUzLCAgNjc4MywgIDY4MTIsICA2ODQyLCAgNjg3MSwgIDY5MDEsICA2OTMwLCAgNjk2MCwgIDY5ODksICA3MDE5LCAgNzA0OCwgIDcwNzgsXHJcblx0XHQ3MTA3LCAgNzEzNywgIDcxNjYsICA3MTk2LCAgNzIyNSwgIDcyNTUsICA3Mjg0LCAgNzMxNCwgIDczNDQsICA3Mzc0LCAgNzQwMywgIDc0MzMsICA3NDYyLCAgNzQ5MiwgIDc1MjEsICA3NTUxLCAgNzU4MCwgIDc2MTAsICA3NjM5LCAgNzY2OSxcclxuXHRcdDc2OTgsICA3NzI4LCAgNzc1NywgIDc3ODcsICA3ODE2LCAgNzg0NiwgIDc4NzUsICA3OTA1LCAgNzkzNCwgIDc5NjQsICA3OTkzLCAgODAyMywgIDgwNTMsICA4MDgzLCAgODExMiwgIDgxNDIsICA4MTcxLCAgODIwMSwgIDgyMzAsICA4MjYwLFxyXG5cdFx0ODI4OSwgIDgzMTksICA4MzQ4LCAgODM3OCwgIDg0MDcsICA4NDM3LCAgODQ2NiwgIDg0OTYsICA4NTI1LCAgODU1NSwgIDg1ODQsICA4NjE0LCAgODY0MywgIDg2NzMsICA4NzAyLCAgODczMiwgIDg3NjEsICA4NzkxLCAgODgyMSwgIDg4NTAsXHJcblx0XHQ4ODgwLCAgODkwOSwgIDg5MzgsICA4OTY4LCAgODk5NywgIDkwMjcsICA5MDU2LCAgOTA4NiwgIDkxMTUsICA5MTQ1LCAgOTE3NSwgIDkyMDUsICA5MjM0LCAgOTI2NCwgIDkyOTMsICA5MzIyLCAgOTM1MiwgIDkzODEsICA5NDEwLCAgOTQ0MCxcclxuXHRcdDk0NzAsICA5NDk5LCAgOTUyOSwgIDk1NTksICA5NTg5LCAgOTYxOCwgIDk2NDgsICA5Njc3LCAgOTcwNiwgIDk3MzYsICA5NzY1LCAgOTc5NCwgIDk4MjQsICA5ODUzLCAgOTg4MywgIDk5MTMsICA5OTQzLCAgOTk3MiwgIDEwMDAyLCAxMDAzMixcclxuXHRcdDEwMDYxLCAxMDA5MCwgMTAxMjAsIDEwMTQ5LCAxMDE3OCwgMTAyMDgsIDEwMjM3LCAxMDI2NywgMTAyOTcsIDEwMzI2LCAxMDM1NiwgMTAzODYsIDEwNDE1LCAxMDQ0NSwgMTA0NzQsIDEwNTA0LCAxMDUzMywgMTA1NjIsIDEwNTkyLCAxMDYyMSxcclxuXHRcdDEwNjUxLCAxMDY4MCwgMTA3MTAsIDEwNzQwLCAxMDc3MCwgMTA3OTksIDEwODI5LCAxMDg1OCwgMTA4ODgsIDEwOTE3LCAxMDk0NywgMTA5NzYsIDExMDA1LCAxMTAzNSwgMTEwNjQsIDExMDk0LCAxMTEyNCwgMTExNTMsIDExMTgzLCAxMTIxMyxcclxuXHRcdDExMjQyLCAxMTI3MiwgMTEzMDEsIDExMzMxLCAxMTM2MCwgMTEzODksIDExNDE5LCAxMTQ0OCwgMTE0NzgsIDExNTA3LCAxMTUzNywgMTE1NjcsIDExNTk2LCAxMTYyNiwgMTE2NTUsIDExNjg1LCAxMTcxNSwgMTE3NDQsIDExNzc0LCAxMTgwMyxcclxuXHRcdDExODMyLCAxMTg2MiwgMTE4OTEsIDExOTIxLCAxMTk1MCwgMTE5ODAsIDEyMDEwLCAxMjAzOSwgMTIwNjksIDEyMDk5LCAxMjEyOCwgMTIxNTgsIDEyMTg3LCAxMjIxNiwgMTIyNDYsIDEyMjc1LCAxMjMwNCwgMTIzMzQsIDEyMzY0LCAxMjM5MyxcclxuXHRcdDEyNDIzLCAxMjQ1MywgMTI0ODMsIDEyNTEyLCAxMjU0MiwgMTI1NzEsIDEyNjAwLCAxMjYzMCwgMTI2NTksIDEyNjg4LCAxMjcxOCwgMTI3NDcsIDEyNzc3LCAxMjgwNywgMTI4MzcsIDEyODY2LCAxMjg5NiwgMTI5MjYsIDEyOTU1LCAxMjk4NCxcclxuXHRcdDEzMDE0LCAxMzA0MywgMTMwNzIsIDEzMTAyLCAxMzEzMSwgMTMxNjEsIDEzMTkxLCAxMzIyMCwgMTMyNTAsIDEzMjgwLCAxMzMxMCwgMTMzMzksIDEzMzY4LCAxMzM5OCwgMTM0MjcsIDEzNDU2LCAxMzQ4NiwgMTM1MTUsIDEzNTQ1LCAxMzU3NCxcclxuXHRcdDEzNjA0LCAxMzYzNCwgMTM2NjQsIDEzNjkzLCAxMzcyMywgMTM3NTIsIDEzNzgyLCAxMzgxMSwgMTM4NDAsIDEzODcwLCAxMzg5OSwgMTM5MjksIDEzOTU4LCAxMzk4OCwgMTQwMTgsIDE0MDQ3LCAxNDA3NywgMTQxMDcsIDE0MTM2LCAxNDE2NixcclxuXHRcdDE0MTk1LCAxNDIyNCwgMTQyNTQsIDE0MjgzLCAxNDMxMywgMTQzNDIsIDE0MzcyLCAxNDQwMSwgMTQ0MzEsIDE0NDYxLCAxNDQ5MCwgMTQ1MjAsIDE0NTUwLCAxNDU3OSwgMTQ2MDksIDE0NjM4LCAxNDY2NywgMTQ2OTcsIDE0NzI2LCAxNDc1NixcclxuXHRcdDE0Nzg1LCAxNDgxNSwgMTQ4NDQsIDE0ODc0LCAxNDkwNCwgMTQ5MzMsIDE0OTYzLCAxNDk5MywgMTUwMjEsIDE1MDUxLCAxNTA4MSwgMTUxMTAsIDE1MTQwLCAxNTE2OSwgMTUxOTksIDE1MjI4LCAxNTI1OCwgMTUyODcsIDE1MzE3LCAxNTM0NyxcclxuXHRcdDE1Mzc3LCAxNTQwNiwgMTU0MzYsIDE1NDY1LCAxNTQ5NCwgMTU1MjQsIDE1NTUzLCAxNTU4MiwgMTU2MTIsIDE1NjQxLCAxNTY3MSwgMTU3MDEsIDE1NzMxLCAxNTc2MCwgMTU3OTAsIDE1ODIwLCAxNTg0OSwgMTU4NzgsIDE1OTA4LCAxNTkzNyxcclxuXHRcdDE1OTY2LCAxNTk5NiwgMTYwMjUsIDE2MDU1LCAxNjA4NSwgMTYxMTQsIDE2MTQ0LCAxNjE3NCwgMTYyMDQsIDE2MjMzLCAxNjI2MiwgMTYyOTIsIDE2MzIxLCAxNjM1MCwgMTYzODAsIDE2NDA5LCAxNjQzOSwgMTY0NjgsIDE2NDk4LCAxNjUyOCxcclxuXHRcdDE2NTU4LCAxNjU4NywgMTY2MTcsIDE2NjQ2LCAxNjY3NiwgMTY3MDUsIDE2NzM0LCAxNjc2NCwgMTY3OTMsIDE2ODIzLCAxNjg1MiwgMTY4ODIsIDE2OTEyLCAxNjk0MSwgMTY5NzEsIDE3MDAxLCAxNzAzMCwgMTcwNjAsIDE3MDg5LCAxNzExOCxcclxuXHRcdDE3MTQ4LCAxNzE3NywgMTcyMDcsIDE3MjM2LCAxNzI2NiwgMTcyOTUsIDE3MzI1LCAxNzM1NSwgMTczODQsIDE3NDE0LCAxNzQ0NCwgMTc0NzMsIDE3NTAyLCAxNzUzMiwgMTc1NjEsIDE3NTkxLCAxNzYyMCwgMTc2NTAsIDE3Njc5LCAxNzcwOSxcclxuXHRcdDE3NzM4LCAxNzc2OCwgMTc3OTgsIDE3ODI3LCAxNzg1NywgMTc4ODYsIDE3OTE2LCAxNzk0NSwgMTc5NzUsIDE4MDA0LCAxODAzNCwgMTgwNjMsIDE4MDkzLCAxODEyMiwgMTgxNTIsIDE4MTgxLCAxODIxMSwgMTgyNDEsIDE4MjcwLCAxODMwMCxcclxuXHRcdDE4MzMwLCAxODM1OSwgMTgzODgsIDE4NDE4LCAxODQ0NywgMTg0NzYsIDE4NTA2LCAxODUzNSwgMTg1NjUsIDE4NTk1LCAxODYyNSwgMTg2NTQsIDE4Njg0LCAxODcxNCwgMTg3NDMsIDE4NzcyLCAxODgwMiwgMTg4MzEsIDE4ODYwLCAxODg5MCxcclxuXHRcdDE4OTE5LCAxODk0OSwgMTg5NzksIDE5MDA4LCAxOTAzOCwgMTkwNjgsIDE5MDk4LCAxOTEyNywgMTkxNTYsIDE5MTg2LCAxOTIxNSwgMTkyNDQsIDE5Mjc0LCAxOTMwMywgMTkzMzMsIDE5MzYyLCAxOTM5MiwgMTk0MjIsIDE5NDUyLCAxOTQ4MSxcclxuXHRcdDE5NTExLCAxOTU0MCwgMTk1NzAsIDE5NTk5LCAxOTYyOCwgMTk2NTgsIDE5Njg3LCAxOTcxNywgMTk3NDYsIDE5Nzc2LCAxOTgwNiwgMTk4MzYsIDE5ODY1LCAxOTg5NSwgMTk5MjQsIDE5OTU0LCAxOTk4MywgMjAwMTIsIDIwMDQyLCAyMDA3MSxcclxuXHRcdDIwMTAxLCAyMDEzMCwgMjAxNjAsIDIwMTkwLCAyMDIxOSwgMjAyNDksIDIwMjc5LCAyMDMwOCwgMjAzMzgsIDIwMzY3LCAyMDM5NiwgMjA0MjYsIDIwNDU1LCAyMDQ4NSwgMjA1MTQsIDIwNTQ0LCAyMDU3MywgMjA2MDMsIDIwNjMzLCAyMDY2MixcclxuXHRcdDIwNjkyLCAyMDcyMSwgMjA3NTEsIDIwNzgwLCAyMDgxMCwgMjA4MzksIDIwODY5LCAyMDg5OCwgMjA5MjgsIDIwOTU3LCAyMDk4NywgMjEwMTYsIDIxMDQ2LCAyMTA3NiwgMjExMDUsIDIxMTM1LCAyMTE2NCwgMjExOTQsIDIxMjIzLCAyMTI1MyxcclxuXHRcdDIxMjgyLCAyMTMxMiwgMjEzNDEsIDIxMzcxLCAyMTQwMCwgMjE0MzAsIDIxNDU5LCAyMTQ4OSwgMjE1MTksIDIxNTQ4LCAyMTU3OCwgMjE2MDcsIDIxNjM3LCAyMTY2NiwgMjE2OTYsIDIxNzI1LCAyMTc1NCwgMjE3ODQsIDIxODEzLCAyMTg0MyxcclxuXHRcdDIxODczLCAyMTkwMiwgMjE5MzIsIDIxOTYyLCAyMTk5MSwgMjIwMjEsIDIyMDUwLCAyMjA4MCwgMjIxMDksIDIyMTM4LCAyMjE2OCwgMjIxOTcsIDIyMjI3LCAyMjI1NiwgMjIyODYsIDIyMzE2LCAyMjM0NiwgMjIzNzUsIDIyNDA1LCAyMjQzNCxcclxuXHRcdDIyNDY0LCAyMjQ5MywgMjI1MjIsIDIyNTUyLCAyMjU4MSwgMjI2MTEsIDIyNjQwLCAyMjY3MCwgMjI3MDAsIDIyNzMwLCAyMjc1OSwgMjI3ODksIDIyODE4LCAyMjg0OCwgMjI4NzcsIDIyOTA2LCAyMjkzNiwgMjI5NjUsIDIyOTk0LCAyMzAyNCxcclxuXHRcdDIzMDU0LCAyMzA4MywgMjMxMTMsIDIzMTQzLCAyMzE3MywgMjMyMDIsIDIzMjMyLCAyMzI2MSwgMjMyOTAsIDIzMzIwLCAyMzM0OSwgMjMzNzksIDIzNDA4LCAyMzQzOCwgMjM0NjcsIDIzNDk3LCAyMzUyNywgMjM1NTYsIDIzNTg2LCAyMzYxNixcclxuXHRcdDIzNjQ1LCAyMzY3NCwgMjM3MDQsIDIzNzMzLCAyMzc2MywgMjM3OTIsIDIzODIyLCAyMzg1MSwgMjM4ODEsIDIzOTEwLCAyMzk0MCwgMjM5NzAsIDIzOTk5LCAyNDAyOSwgMjQwNTgsIDI0MDg4LCAyNDExNywgMjQxNDcsIDI0MTc2LCAyNDIwNixcclxuXHRcdDI0MjM1LCAyNDI2NSwgMjQyOTQsIDI0MzI0LCAyNDM1MywgMjQzODMsIDI0NDEzLCAyNDQ0MiwgMjQ0NzIsIDI0NTAxLCAyNDUzMSwgMjQ1NjAsIDI0NTkwLCAyNDYxOSwgMjQ2NDgsIDI0Njc4LCAyNDcwNywgMjQ3MzcsIDI0NzY3LCAyNDc5NixcclxuXHRcdDI0ODI2LCAyNDg1NiwgMjQ4ODUsIDI0OTE1LCAyNDk0NCwgMjQ5NzQsIDI1MDAzLCAyNTAzMiwgMjUwNjIsIDI1MDkxLCAyNTEyMSwgMjUxNTAsIDI1MTgwLCAyNTIxMCwgMjUyNDAsIDI1MjY5LCAyNTI5OSwgMjUzMjgsIDI1MzU4LCAyNTM4NyxcclxuXHRcdDI1NDE2LCAyNTQ0NiwgMjU0NzUsIDI1NTA1LCAyNTUzNCwgMjU1NjQsIDI1NTk0LCAyNTYyNCwgMjU2NTMsIDI1NjgzLCAyNTcxMiwgMjU3NDIsIDI1NzcxLCAyNTgwMCwgMjU4MzAsIDI1ODU5LCAyNTg4OCwgMjU5MTgsIDI1OTQ4LCAyNTk3NyxcclxuXHRcdDI2MDA3LCAyNjAzNywgMjYwNjcsIDI2MDk2LCAyNjEyNiwgMjYxNTUsIDI2MTg0LCAyNjIxNCwgMjYyNDMsIDI2MjcyLCAyNjMwMiwgMjYzMzIsIDI2MzYxLCAyNjM5MSwgMjY0MjEsIDI2NDUxLCAyNjQ4MCwgMjY1MTAsIDI2NTM5LCAyNjU2OCxcclxuXHRcdDI2NTk4LCAyNjYyNywgMjY2NTYsIDI2Njg2LCAyNjcxNSwgMjY3NDUsIDI2Nzc1LCAyNjgwNSwgMjY4MzQsIDI2ODY0LCAyNjg5MywgMjY5MjMsIDI2OTUyLCAyNjk4MiwgMjcwMTEsIDI3MDQxLCAyNzA3MCwgMjcwOTksIDI3MTI5LCAyNzE1OSxcclxuXHRcdDI3MTg4LCAyNzIxOCwgMjcyNDgsIDI3Mjc3LCAyNzMwNywgMjczMzYsIDI3MzY2LCAyNzM5NSwgMjc0MjUsIDI3NDU0LCAyNzQ4NCwgMjc1MTMsIDI3NTQyLCAyNzU3MiwgMjc2MDIsIDI3NjMxLCAyNzY2MSwgMjc2OTEsIDI3NzIwLCAyNzc1MCxcclxuXHRcdDI3Nzc5LCAyNzgwOSwgMjc4MzgsIDI3ODY4LCAyNzg5NywgMjc5MjYsIDI3OTU2LCAyNzk4NSwgMjgwMTUsIDI4MDQ1LCAyODA3NCwgMjgxMDQsIDI4MTM0LCAyODE2MywgMjgxOTMsIDI4MjIyLCAyODI1MiwgMjgyODEsIDI4MzEwLCAyODM0MCxcclxuXHRcdDI4MzY5LCAyODM5OSwgMjg0MjgsIDI4NDU4LCAyODQ4OCwgMjg1MTcsIDI4NTQ3LCAyODU3NyxcclxuXHRcdC8vIEZyb20gMTM1NlxyXG5cdFx0Mjg2MDcsIDI4NjM2LCAyODY2NSwgMjg2OTUsIDI4NzI0LCAyODc1NCwgMjg3ODMsIDI4ODEzLCAyODg0MywgMjg4NzIsIDI4OTAxLCAyODkzMSwgMjg5NjAsIDI4OTkwLCAyOTAxOSwgMjkwNDksIDI5MDc4LCAyOTEwOCwgMjkxMzcsIDI5MTY3LFxyXG5cdFx0MjkxOTYsIDI5MjI2LCAyOTI1NSwgMjkyODUsIDI5MzE1LCAyOTM0NSwgMjkzNzUsIDI5NDA0LCAyOTQzNCwgMjk0NjMsIDI5NDkyLCAyOTUyMiwgMjk1NTEsIDI5NTgwLCAyOTYxMCwgMjk2NDAsIDI5NjY5LCAyOTY5OSwgMjk3MjksIDI5NzU5LFxyXG5cdFx0Mjk3ODgsIDI5ODE4LCAyOTg0NywgMjk4NzYsIDI5OTA2LCAyOTkzNSwgMjk5NjQsIDI5OTk0LCAzMDAyMywgMzAwNTMsIDMwMDgyLCAzMDExMiwgMzAxNDEsIDMwMTcxLCAzMDIwMCwgMzAyMzAsIDMwMjU5LCAzMDI4OSwgMzAzMTgsIDMwMzQ4LFxyXG5cdFx0MzAzNzgsIDMwNDA4LCAzMDQzNywgMzA0NjcsIDMwNDk2LCAzMDUyNiwgMzA1NTUsIDMwNTg1LCAzMDYxNCwgMzA2NDQsIDMwNjczLCAzMDcwMywgMzA3MzIsIDMwNzYyLCAzMDc5MSwgMzA4MjEsIDMwODUwLCAzMDg4MCwgMzA5MDksIDMwOTM5LFxyXG5cdFx0MzA5NjgsIDMwOTk4LCAzMTAyNywgMzEwNTcsIDMxMDg2LCAzMTExNiwgMzExNDUsIDMxMTc1LCAzMTIwNCwgMzEyMzQsIDMxMjYzLCAzMTI5MywgMzEzMjIsIDMxMzUyLCAzMTM4MSwgMzE0MTEsIDMxNDQxLCAzMTQ3MSwgMzE1MDAsIDMxNTMwLFxyXG5cdFx0MzE1NTksIDMxNTg5LCAzMTYxOCwgMzE2NDgsIDMxNjc2LCAzMTcwNiwgMzE3MzYsIDMxNzY2LCAzMTc5NSwgMzE4MjUsIDMxODU0LCAzMTg4NCwgMzE5MTMsIDMxOTQzLCAzMTk3MiwgMzIwMDIsIDMyMDMxLCAzMjA2MSwgMzIwOTAsIDMyMTIwLFxyXG5cdFx0MzIxNTAsIDMyMTgwLCAzMjIwOSwgMzIyMzksIDMyMjY4LCAzMjI5OCwgMzIzMjcsIDMyMzU3LCAzMjM4NiwgMzI0MTYsIDMyNDQ1LCAzMjQ3NSwgMzI1MDQsIDMyNTM0LCAzMjU2MywgMzI1OTMsIDMyNjIyLCAzMjY1MiwgMzI2ODEsIDMyNzExLFxyXG5cdFx0MzI3NDAsIDMyNzcwLCAzMjc5OSwgMzI4MjksIDMyODU4LCAzMjg4OCwgMzI5MTcsIDMyOTQ3LCAzMjk3NiwgMzMwMDYsIDMzMDM1LCAzMzA2NSwgMzMwOTQsIDMzMTI0LCAzMzE1MywgMzMxODMsIDMzMjEzLCAzMzI0MywgMzMyNzIsIDMzMzAyLFxyXG5cdFx0MzMzMzEsIDMzMzYxLCAzMzM5MCwgMzM0MjAsIDMzNDUwLCAzMzQ3OSwgMzM1MDksIDMzNTM5LCAzMzU2OCwgMzM1OTgsIDMzNjI3LCAzMzY1NywgMzM2ODYsIDMzNzE2LCAzMzc0NSwgMzM3NzUsIDMzODA0LCAzMzgzNCwgMzM4NjMsIDMzODkzLFxyXG5cdFx0MzM5MjIsIDMzOTUyLCAzMzk4MSwgMzQwMTEsIDM0MDQwLCAzNDA2OSwgMzQwOTksIDM0MTI4LCAzNDE1OCwgMzQxODcsIDM0MjE3LCAzNDI0NywgMzQyNzcsIDM0MzA2LCAzNDMzNiwgMzQzNjUsIDM0Mzk1LCAzNDQyNCwgMzQ0NTQsIDM0NDgzLFxyXG5cdFx0MzQ1MTIsIDM0NTQyLCAzNDU3MSwgMzQ2MDEsIDM0NjMxLCAzNDY2MCwgMzQ2OTAsIDM0NzE5LCAzNDc0OSwgMzQ3NzgsIDM0ODA4LCAzNDgzNywgMzQ4NjcsIDM0ODk2LCAzNDkyNiwgMzQ5NTUsIDM0OTg1LCAzNTAxNSwgMzUwNDQsIDM1MDc0LFxyXG5cdFx0MzUxMDMsIDM1MTMzLCAzNTE2MiwgMzUxOTIsIDM1MjIyLCAzNTI1MSwgMzUyODAsIDM1MzEwLCAzNTM0MCwgMzUzNzAsIDM1Mzk5LCAzNTQyOSwgMzU0NTgsIDM1NDg4LCAzNTUxNywgMzU1NDcsIDM1NTc2LCAzNTYwNSwgMzU2MzUsIDM1NjY1LFxyXG5cdFx0MzU2OTQsIDM1NzIzLCAzNTc1MywgMzU3ODIsIDM1ODExLCAzNTg0MSwgMzU4NzEsIDM1OTAxLCAzNTkzMCwgMzU5NjAsIDM1OTg5LCAzNjAxOSwgMzYwNDgsIDM2MDc4LCAzNjEwNywgMzYxMzYsIDM2MTY2LCAzNjE5NSwgMzYyMjUsIDM2MjU0LFxyXG5cdFx0MzYyODQsIDM2MzE0LCAzNjM0MywgMzYzNzMsIDM2NDAzLCAzNjQzMywgMzY0NjIsIDM2NDkyLCAzNjUyMSwgMzY1NTEsIDM2NTgwLCAzNjYxMCwgMzY2MzksIDM2NjY5LCAzNjY5OCwgMzY3MjgsIDM2NzU3LCAzNjc4NiwgMzY4MTYsIDM2ODQ1LFxyXG5cdFx0MzY4NzUsIDM2OTA0LCAzNjkzNCwgMzY5NjMsIDM2OTkzLCAzNzAyMiwgMzcwNTIsIDM3MDgxLCAzNzExMSwgMzcxNDEsIDM3MTcwLCAzNzIwMCwgMzcyMjksIDM3MjU5LCAzNzI4OCwgMzczMTgsIDM3MzQ3LCAzNzM3NywgMzc0MDYsIDM3NDM2LFxyXG5cdFx0Mzc0NjUsIDM3NDk1LCAzNzUyNCwgMzc1NTQsIDM3NTg0LCAzNzYxMywgMzc2NDMsIDM3NjcyLCAzNzcwMSwgMzc3MzEsIDM3NzYwLCAzNzc5MCwgMzc4MTksIDM3ODQ5LCAzNzg3OCwgMzc5MDgsIDM3OTM4LCAzNzk2NywgMzc5OTcsIDM4MDI3LFxyXG5cdFx0MzgwNTYsIDM4MDg1LCAzODExNSwgMzgxNDQsIDM4MTc0LCAzODIwMywgMzgyMzMsIDM4MjYyLCAzODI5MiwgMzgzMjIsIDM4MzUxLCAzODM4MSwgMzg0MTAsIDM4NDQwLCAzODQ2OSwgMzg0OTksIDM4NTI4LCAzODU1OCwgMzg1ODcsIDM4NjE3LFxyXG5cdFx0Mzg2NDYsIDM4Njc2LCAzODcwNSwgMzg3MzUsIDM4NzY0LCAzODc5NCwgMzg4MjMsIDM4ODUzLCAzODg4MiwgMzg5MTIsIDM4OTQxLCAzODk3MSwgMzkwMDEsIDM5MDMwLCAzOTA1OSwgMzkwODksIDM5MTE4LCAzOTE0OCwgMzkxNzgsIDM5MjA4LFxyXG5cdFx0MzkyMzcsIDM5MjY3LCAzOTI5NywgMzkzMjYsIDM5MzU1LCAzOTM4NSwgMzk0MTQsIDM5NDQ0LCAzOTQ3MywgMzk1MDMsIDM5NTMyLCAzOTU2MiwgMzk1OTIsIDM5NjIxLCAzOTY1MCwgMzk2ODAsIDM5NzA5LCAzOTczOSwgMzk3NjgsIDM5Nzk4LFxyXG5cdFx0Mzk4MjcsIDM5ODU3LCAzOTg4NiwgMzk5MTYsIDM5OTQ2LCAzOTk3NSwgNDAwMDUsIDQwMDM1LCA0MDA2NCwgNDAwOTQsIDQwMTIzLCA0MDE1MywgNDAxODIsIDQwMjEyLCA0MDI0MSwgNDAyNzEsIDQwMzAwLCA0MDMzMCwgNDAzNTksIDQwMzg5LFxyXG5cdFx0NDA0MTgsIDQwNDQ4LCA0MDQ3NywgNDA1MDcsIDQwNTM2LCA0MDU2NiwgNDA1OTUsIDQwNjI1LCA0MDY1NSwgNDA2ODUsIDQwNzE0LCA0MDc0NCwgNDA3NzMsIDQwODAzLCA0MDgzMiwgNDA4NjIsIDQwODkyLCA0MDkyMSwgNDA5NTEsIDQwOTgwLFxyXG5cdFx0NDEwMDksIDQxMDM5LCA0MTA2OCwgNDEwOTgsIDQxMTI3LCA0MTE1NywgNDExODYsIDQxMjE2LCA0MTI0NSwgNDEyNzUsIDQxMzA0LCA0MTMzNCwgNDEzNjQsIDQxMzkzLCA0MTQyMiwgNDE0NTIsIDQxNDgxLCA0MTUxMSwgNDE1NDAsIDQxNTcwLFxyXG5cdFx0NDE1OTksIDQxNjI5LCA0MTY1OCwgNDE2ODgsIDQxNzE4LCA0MTc0OCwgNDE3NzcsIDQxODA3LCA0MTgzNiwgNDE4NjUsIDQxODk0LCA0MTkyNCwgNDE5NTMsIDQxOTgzLCA0MjAxMiwgNDIwNDIsIDQyMDcyLCA0MjEwMiwgNDIxMzEsIDQyMTYxLFxyXG5cdFx0NDIxOTAsIDQyMjIwLCA0MjI0OSwgNDIyNzksIDQyMzA4LCA0MjMzNywgNDIzNjcsIDQyMzk3LCA0MjQyNiwgNDI0NTYsIDQyNDg1LCA0MjUxNSwgNDI1NDUsIDQyNTc0LCA0MjYwNCwgNDI2MzMsIDQyNjYyLCA0MjY5MiwgNDI3MjEsIDQyNzUxLFxyXG5cdFx0NDI3ODAsIDQyODEwLCA0MjgzOSwgNDI4NjksIDQyODk5LCA0MjkyOSwgNDI5NTgsIDQyOTg4LCA0MzAxNywgNDMwNDYsIDQzMDc2LCA0MzEwNSwgNDMxMzUsIDQzMTY0LCA0MzE5NCwgNDMyMjMsIDQzMjUzLCA0MzI4MywgNDMzMTIsIDQzMzQyLFxyXG5cdFx0NDMzNzEsIDQzNDAxLCA0MzQzMCwgNDM0NjAsIDQzNDg5LCA0MzUxOSwgNDM1NDgsIDQzNTc4LCA0MzYwNywgNDM2MzcsIDQzNjY2LCA0MzY5NiwgNDM3MjYsIDQzNzU1LCA0Mzc4NSwgNDM4MTQsIDQzODQ0LCA0Mzg3MywgNDM5MDMsIDQzOTMyLFxyXG5cdFx0NDM5NjIsIDQzOTkxLCA0NDAyMSwgNDQwNTAsIDQ0MDgwLCA0NDEwOSwgNDQxMzksIDQ0MTY5LCA0NDE5OCwgNDQyMjgsIDQ0MjU4LCA0NDI4NywgNDQzMTcsIDQ0MzQ2LCA0NDM3NSwgNDQ0MDUsIDQ0NDM0LCA0NDQ2NCwgNDQ0OTMsIDQ0NTIzLFxyXG5cdFx0NDQ1NTMsIDQ0NTgyLCA0NDYxMiwgNDQ2NDEsIDQ0NjcxLCA0NDcwMCwgNDQ3MzAsIDQ0NzU5LCA0NDc4OCwgNDQ4MTgsIDQ0ODQ3LCA0NDg3NywgNDQ5MDYsIDQ0OTM2LCA0NDk2NiwgNDQ5OTYsIDQ1MDI1LCA0NTA1NSwgNDUwODQsIDQ1MTE0LFxyXG5cdFx0NDUxNDMsIDQ1MTcyLCA0NTIwMiwgNDUyMzEsIDQ1MjYxLCA0NTI5MCwgNDUzMjAsIDQ1MzUwLCA0NTM4MCwgNDU0MDksIDQ1NDM5LCA0NTQ2OCwgNDU0OTgsIDQ1NTI3LCA0NTU1NiwgNDU1ODYsIDQ1NjE1LCA0NTY0NCwgNDU2NzQsIDQ1NzA0LFxyXG5cdFx0NDU3MzMsIDQ1NzYzLCA0NTc5MywgNDU4MjMsIDQ1ODUyLCA0NTg4MiwgNDU5MTEsIDQ1OTQwLCA0NTk3MCwgNDU5OTksIDQ2MDI4LCA0NjA1OCwgNDYwODgsIDQ2MTE3LCA0NjE0NywgNDYxNzcsIDQ2MjA2LCA0NjIzNiwgNDYyNjUsIDQ2Mjk1LFxyXG5cdFx0NDYzMjQsIDQ2MzU0LCA0NjM4MywgNDY0MTMsIDQ2NDQyLCA0NjQ3MiwgNDY1MDEsIDQ2NTMxLCA0NjU2MCwgNDY1OTAsIDQ2NjIwLCA0NjY0OSwgNDY2NzksIDQ2NzA4LCA0NjczOCwgNDY3NjcsIDQ2Nzk3LCA0NjgyNiwgNDY4NTYsIDQ2ODg1LFxyXG5cdFx0NDY5MTUsIDQ2OTQ0LCA0Njk3NCwgNDcwMDMsIDQ3MDMzLCA0NzA2MywgNDcwOTIsIDQ3MTIyLCA0NzE1MSwgNDcxODEsIDQ3MjEwLCA0NzI0MCwgNDcyNjksIDQ3Mjk4LCA0NzMyOCwgNDczNTcsIDQ3Mzg3LCA0NzQxNywgNDc0NDYsIDQ3NDc2LFxyXG5cdFx0NDc1MDYsIDQ3NTM1LCA0NzU2NSwgNDc1OTQsIDQ3NjI0LCA0NzY1MywgNDc2ODIsIDQ3NzEyLCA0Nzc0MSwgNDc3NzEsIDQ3ODAwLCA0NzgzMCwgNDc4NjAsIDQ3ODkwLCA0NzkxOSwgNDc5NDksIDQ3OTc4LCA0ODAwOCwgNDgwMzcsIDQ4MDY2LFxyXG5cdFx0NDgwOTYsIDQ4MTI1LCA0ODE1NSwgNDgxODQsIDQ4MjE0LCA0ODI0NCwgNDgyNzMsIDQ4MzAzLCA0ODMzMywgNDgzNjIsIDQ4MzkyLCA0ODQyMSwgNDg0NTAsIDQ4NDgwLCA0ODUwOSwgNDg1MzgsIDQ4NTY4LCA0ODU5OCwgNDg2MjcsIDQ4NjU3LFxyXG5cdFx0NDg2ODcsIDQ4NzE3LCA0ODc0NiwgNDg3NzYsIDQ4ODA1LCA0ODgzNCwgNDg4NjQsIDQ4ODkzLCA0ODkyMiwgNDg5NTIsIDQ4OTgyLCA0OTAxMSwgNDkwNDEsIDQ5MDcxLCA0OTEwMCwgNDkxMzAsIDQ5MTYwLCA0OTE4OSwgNDkyMTgsIDQ5MjQ4LFxyXG5cdFx0NDkyNzcsIDQ5MzA2LCA0OTMzNiwgNDkzNjUsIDQ5Mzk1LCA0OTQyNSwgNDk0NTUsIDQ5NDg0LCA0OTUxNCwgNDk1NDMsIDQ5NTczLCA0OTYwMiwgNDk2MzIsIDQ5NjYxLCA0OTY5MCwgNDk3MjAsIDQ5NzQ5LCA0OTc3OSwgNDk4MDksIDQ5ODM4LFxyXG5cdFx0NDk4NjgsIDQ5ODk4LCA0OTkyNywgNDk5NTcsIDQ5OTg2LCA1MDAxNiwgNTAwNDUsIDUwMDc1LCA1MDEwNCwgNTAxMzMsIDUwMTYzLCA1MDE5MiwgNTAyMjIsIDUwMjUyLCA1MDI4MSwgNTAzMTEsIDUwMzQwLCA1MDM3MCwgNTA0MDAsIDUwNDI5LFxyXG5cdFx0NTA0NTksIDUwNDg4LCA1MDUxOCwgNTA1NDcsIDUwNTc2LCA1MDYwNiwgNTA2MzUsIDUwNjY1LCA1MDY5NCwgNTA3MjQsIDUwNzU0LCA1MDc4NCwgNTA4MTMsIDUwODQzLCA1MDg3MiwgNTA5MDIsIDUwOTMxLCA1MDk2MCwgNTA5OTAsIDUxMDE5LFxyXG5cdFx0NTEwNDksIDUxMDc4LCA1MTEwOCwgNTExMzgsIDUxMTY3LCA1MTE5NywgNTEyMjcsIDUxMjU2LCA1MTI4NiwgNTEzMTUsIDUxMzQ1LCA1MTM3NCwgNTE0MDMsIDUxNDMzLCA1MTQ2MiwgNTE0OTIsIDUxNTIyLCA1MTU1MiwgNTE1ODIsIDUxNjExLFxyXG5cdFx0NTE2NDEsIDUxNjcwLCA1MTY5OSwgNTE3MjksIDUxNzU4LCA1MTc4NywgNTE4MTYsIDUxODQ2LCA1MTg3NiwgNTE5MDYsIDUxOTM2LCA1MTk2NSwgNTE5OTUsIDUyMDI1LCA1MjA1NCwgNTIwODMsIDUyMTEzLCA1MjE0MiwgNTIxNzEsIDUyMjAwLFxyXG5cdFx0NTIyMzAsIDUyMjYwLCA1MjI5MCwgNTIzMTksIDUyMzQ5LCA1MjM3OSwgNTI0MDgsIDUyNDM4LCA1MjQ2NywgNTI0OTcsIDUyNTI2LCA1MjU1NSwgNTI1ODUsIDUyNjE0LCA1MjY0NCwgNTI2NzMsIDUyNzAzLCA1MjczMywgNTI3NjIsIDUyNzkyLFxyXG5cdFx0NTI4MjIsIDUyODUxLCA1Mjg4MSwgNTI5MTAsIDUyOTM5LCA1Mjk2OSwgNTI5OTgsIDUzMDI4LCA1MzA1NywgNTMwODcsIDUzMTE2LCA1MzE0NiwgNTMxNzYsIDUzMjA1LCA1MzIzNSwgNTMyNjQsIDUzMjk0LCA1MzMyNCwgNTMzNTMsIDUzMzgzLFxyXG5cdFx0NTM0MTIsIDUzNDQxLCA1MzQ3MSwgNTM1MDAsIDUzNTMwLCA1MzU1OSwgNTM1ODksIDUzNjE5LCA1MzY0OCwgNTM2NzgsIDUzNzA4LCA1MzczNywgNTM3NjcsIDUzNzk2LCA1MzgyNSwgNTM4NTUsIDUzODg0LCA1MzkxMywgNTM5NDMsIDUzOTczLFxyXG5cdFx0NTQwMDMsIDU0MDMyLCA1NDA2MiwgNTQwOTIsIDU0MTIxLCA1NDE1MSwgNTQxODAsIDU0MjA5LCA1NDIzOSwgNTQyNjgsIDU0Mjk3LCA1NDMyNywgNTQzNTcsIDU0Mzg3LCA1NDQxNiwgNTQ0NDYsIDU0NDc2LCA1NDUwNSwgNTQ1MzUsIDU0NTY0LFxyXG5cdFx0NTQ1OTMsIDU0NjIzLCA1NDY1MiwgNTQ2ODEsIDU0NzExLCA1NDc0MSwgNTQ3NzAsIDU0ODAwLCA1NDgzMCwgNTQ4NTksIDU0ODg5LCA1NDkxOSwgNTQ5NDgsIDU0OTc3LCA1NTAwNywgNTUwMzYsIDU1MDY2LCA1NTA5NSwgNTUxMjUsIDU1MTU0LFxyXG5cdFx0NTUxODQsIDU1MjEzLCA1NTI0MywgNTUyNzMsIDU1MzAyLCA1NTMzMiwgNTUzNjEsIDU1MzkxLCA1NTQyMCwgNTU0NTAsIDU1NDc5LCA1NTUwOCwgNTU1MzgsIDU1NTY3LCA1NTU5NywgNTU2MjcsIDU1NjU3LCA1NTY4NiwgNTU3MTYsIDU1NzQ1LFxyXG5cdFx0NTU3NzUsIDU1ODA0LCA1NTgzNCwgNTU4NjMsIDU1ODkyLCA1NTkyMiwgNTU5NTEsIDU1OTgxLCA1NjAxMSwgNTYwNDAsIDU2MDcwLCA1NjEwMCwgNTYxMjksIDU2MTU5LCA1NjE4OCwgNTYyMTgsIDU2MjQ3LCA1NjI3NiwgNTYzMDYsIDU2MzM1LFxyXG5cdFx0NTYzNjUsIDU2Mzk0LCA1NjQyNCwgNTY0NTQsIDU2NDgzLCA1NjUxMywgNTY1NDMsIDU2NTcyLCA1NjYwMSwgNTY2MzEsIDU2NjYwLCA1NjY5MCwgNTY3MTksIDU2NzQ5LCA1Njc3OCwgNTY4MDgsIDU2ODM3LCA1Njg2NywgNTY4OTcsIDU2OTI2LFxyXG5cdFx0NTY5NTYsIDU2OTg1LCA1NzAxNSwgNTcwNDQsIDU3MDc0LCA1NzEwMywgNTcxMzMsIDU3MTYyLCA1NzE5MiwgNTcyMjEsIDU3MjUxLCA1NzI4MCwgNTczMTAsIDU3MzQwLCA1NzM2OSwgNTczOTksIDU3NDI5LCA1NzQ1OCwgNTc0ODcsIDU3NTE3LFxyXG5cdFx0NTc1NDYsIDU3NTc2LCA1NzYwNSwgNTc2MzQsIDU3NjY0LCA1NzY5NCwgNTc3MjMsIDU3NzUzLCA1Nzc4MywgNTc4MTMsIDU3ODQyLCA1Nzg3MSwgNTc5MDEsIDU3OTMwLCA1Nzk1OSwgNTc5ODksIDU4MDE4LCA1ODA0OCwgNTgwNzcsIDU4MTA3LFxyXG5cdFx0NTgxMzcsIDU4MTY3LCA1ODE5NiwgNTgyMjYsIDU4MjU1LCA1ODI4NSwgNTgzMTQsIDU4MzQzLCA1ODM3MywgNTg0MDIsIDU4NDMyLCA1ODQ2MSwgNTg0OTEsIDU4NTIxLCA1ODU1MSwgNTg1ODAsIDU4NjEwLCA1ODYzOSwgNTg2NjksIDU4Njk4LFxyXG5cdFx0NTg3MjcsIDU4NzU3LCA1ODc4NiwgNTg4MTYsIDU4ODQ1LCA1ODg3NSwgNTg5MDUsIDU4OTM0LCA1ODk2NCwgNTg5OTQsIDU5MDIzLCA1OTA1MywgNTkwODIsIDU5MTExLCA1OTE0MSwgNTkxNzAsIDU5MjAwLCA1OTIyOSwgNTkyNTksIDU5Mjg4LFxyXG5cdFx0NTkzMTgsIDU5MzQ4LCA1OTM3NywgNTk0MDcsIDU5NDM2LCA1OTQ2NiwgNTk0OTUsIDU5NTI1LCA1OTU1NCwgNTk1ODQsIDU5NjEzLCA1OTY0MywgNTk2NzIsIDU5NzAyLCA1OTczMSwgNTk3NjEsIDU5NzkxLCA1OTgyMCwgNTk4NTAsIDU5ODc5LFxyXG5cdFx0NTk5MDksIDU5OTM5LCA1OTk2OCwgNTk5OTcsIDYwMDI3LCA2MDA1NiwgNjAwODYsIDYwMTE1LCA2MDE0NSwgNjAxNzQsIDYwMjA0LCA2MDIzNCwgNjAyNjQsIDYwMjkzLCA2MDMyMywgNjAzNTIsIDYwMzgxLCA2MDQxMSwgNjA0NDAsIDYwNDY5LFxyXG5cdFx0NjA0OTksIDYwNTI4LCA2MDU1OCwgNjA1ODgsIDYwNjE4LCA2MDY0OCwgNjA2NzcsIDYwNzA3LCA2MDczNiwgNjA3NjUsIDYwNzk1LCA2MDgyNCwgNjA4NTMsIDYwODgzLCA2MDkxMiwgNjA5NDIsIDYwOTcyLCA2MTAwMiwgNjEwMzEsIDYxMDYxLFxyXG5cdFx0NjEwOTAsIDYxMTIwLCA2MTE0OSwgNjExNzksIDYxMjA4LCA2MTIzNywgNjEyNjcsIDYxMjk2LCA2MTMyNiwgNjEzNTYsIDYxMzg1LCA2MTQxNSwgNjE0NDUsIDYxNDc0LCA2MTUwNCwgNjE1MzMsIDYxNTYzLCA2MTU5MiwgNjE2MjEsIDYxNjUxLFxyXG5cdFx0NjE2ODAsIDYxNzEwLCA2MTczOSwgNjE3NjksIDYxNzk5LCA2MTgyOCwgNjE4NTgsIDYxODg4LCA2MTkxNywgNjE5NDcsIDYxOTc2LCA2MjAwNiwgNjIwMzUsIDYyMDY0LCA2MjA5NCwgNjIxMjMsIDYyMTUzLCA2MjE4MiwgNjIyMTIsIDYyMjQyLFxyXG5cdFx0NjIyNzEsIDYyMzAxLCA2MjMzMSwgNjIzNjAsIDYyMzkwLCA2MjQxOSwgNjI0NDgsIDYyNDc4LCA2MjUwNywgNjI1MzcsIDYyNTY2LCA2MjU5NiwgNjI2MjUsIDYyNjU1LCA2MjY4NSwgNjI3MTUsIDYyNzQ0LCA2Mjc3NCwgNjI4MDMsIDYyODMyLFxyXG5cdFx0NjI4NjIsIDYyODkxLCA2MjkyMSwgNjI5NTAsIDYyOTgwLCA2MzAwOSwgNjMwMzksIDYzMDY5LCA2MzA5OSwgNjMxMjgsIDYzMTU3LCA2MzE4NywgNjMyMTYsIDYzMjQ2LCA2MzI3NSwgNjMzMDUsIDYzMzM0LCA2MzM2MywgNjMzOTMsIDYzNDIzLFxyXG5cdFx0NjM0NTMsIDYzNDgyLCA2MzUxMiwgNjM1NDEsIDYzNTcxLCA2MzYwMCwgNjM2MzAsIDYzNjU5LCA2MzY4OSwgNjM3MTgsIDYzNzQ3LCA2Mzc3NywgNjM4MDcsIDYzODM2LCA2Mzg2NiwgNjM4OTUsIDYzOTI1LCA2Mzk1NSwgNjM5ODQsIDY0MDE0LFxyXG5cdFx0NjQwNDMsIDY0MDczLCA2NDEwMiwgNjQxMzEsIDY0MTYxLCA2NDE5MCwgNjQyMjAsIDY0MjQ5LCA2NDI3OSwgNjQzMDksIDY0MzM5LCA2NDM2OCwgNjQzOTgsIDY0NDI3LCA2NDQ1NywgNjQ0ODYsIDY0NTE1LCA2NDU0NSwgNjQ1NzQsIDY0NjAzLFxyXG5cdFx0NjQ2MzMsIDY0NjYzLCA2NDY5MiwgNjQ3MjIsIDY0NzUyLCA2NDc4MiwgNjQ4MTEsIDY0ODQxLCA2NDg3MCwgNjQ4OTksIDY0OTI5LCA2NDk1OCwgNjQ5ODcsIDY1MDE3LCA2NTA0NywgNjUwNzYsIDY1MTA2LCA2NTEzNiwgNjUxNjYsIDY1MTk1LFxyXG5cdFx0NjUyMjUsIDY1MjU0LCA2NTI4MywgNjUzMTMsIDY1MzQyLCA2NTM3MSwgNjU0MDEsIDY1NDMxLCA2NTQ2MCwgNjU0OTAsIDY1NTIwLCA2NTU0OSwgNjU1NzksIDY1NjA4LCA2NTYzOCwgNjU2NjcsIDY1Njk3LCA2NTcyNiwgNjU3NTUsIDY1Nzg1LFxyXG5cdFx0NjU4MTUsIDY1ODQ0LCA2NTg3NCwgNjU5MDMsIDY1OTMzLCA2NTk2MywgNjU5OTIsIDY2MDIyLCA2NjA1MSwgNjYwODEsIDY2MTEwLCA2NjE0MCwgNjYxNjksIDY2MTk5LCA2NjIyOCwgNjYyNTgsIDY2Mjg3LCA2NjMxNywgNjYzNDYsIDY2Mzc2LFxyXG5cdFx0NjY0MDUsIDY2NDM1LCA2NjQ2NSwgNjY0OTQsIDY2NTI0LCA2NjU1MywgNjY1ODMsIDY2NjEyLCA2NjY0MSwgNjY2NzEsIDY2NzAwLCA2NjczMCwgNjY3NjAsIDY2Nzg5LCA2NjgxOSwgNjY4NDksIDY2ODc4LCA2NjkwOCwgNjY5MzcsIDY2OTY3LFxyXG5cdFx0NjY5OTYsIDY3MDI1LCA2NzA1NSwgNjcwODQsIDY3MTE0LCA2NzE0MywgNjcxNzMsIDY3MjAzLCA2NzIzMywgNjcyNjIsIDY3MjkyLCA2NzMyMSwgNjczNTEsIDY3MzgwLCA2NzQwOSwgNjc0MzksIDY3NDY4LCA2NzQ5NywgNjc1MjcsIDY3NTU3LFxyXG5cdFx0Njc1ODcsIDY3NjE3LCA2NzY0NiwgNjc2NzYsIDY3NzA1LCA2NzczNSwgNjc3NjQsIDY3NzkzLCA2NzgyMywgNjc4NTIsIDY3ODgyLCA2NzkxMSwgNjc5NDEsIDY3OTcxLCA2ODAwMCwgNjgwMzAsIDY4MDYwLCA2ODA4OSwgNjgxMTksIDY4MTQ4LFxyXG5cdFx0NjgxNzcsIDY4MjA3LCA2ODIzNiwgNjgyNjYsIDY4Mjk1LCA2ODMyNSwgNjgzNTQsIDY4Mzg0LCA2ODQxNCwgNjg0NDMsIDY4NDczLCA2ODUwMiwgNjg1MzIsIDY4NTYxLCA2ODU5MSwgNjg2MjAsIDY4NjUwLCA2ODY3OSwgNjg3MDgsIDY4NzM4LFxyXG5cdFx0Njg3NjgsIDY4Nzk3LCA2ODgyNywgNjg4NTcsIDY4ODg2LCA2ODkxNiwgNjg5NDYsIDY4OTc1LCA2OTAwNCwgNjkwMzQsIDY5MDYzLCA2OTA5MiwgNjkxMjIsIDY5MTUyLCA2OTE4MSwgNjkyMTEsIDY5MjQwLCA2OTI3MCwgNjkzMDAsIDY5MzMwLFxyXG5cdFx0NjkzNTksIDY5Mzg4LCA2OTQxOCwgNjk0NDcsIDY5NDc2LCA2OTUwNiwgNjk1MzUsIDY5NTY1LCA2OTU5NSwgNjk2MjQsIDY5NjU0LCA2OTY4NCwgNjk3MTMsIDY5NzQzLCA2OTc3MiwgNjk4MDIsIDY5ODMxLCA2OTg2MSwgNjk4OTAsIDY5OTE5LFxyXG5cdFx0Njk5NDksIDY5OTc4LCA3MDAwOCwgNzAwMzgsIDcwMDY3LCA3MDA5NywgNzAxMjYsIDcwMTU2LCA3MDE4NiwgNzAyMTUsIDcwMjQ1LCA3MDI3NCwgNzAzMDMsIDcwMzMzLCA3MDM2MiwgNzAzOTIsIDcwNDIxLCA3MDQ1MSwgNzA0ODEsIDcwNTEwLFxyXG5cdFx0NzA1NDAsIDcwNTcwLCA3MDU5OSwgNzA2MjksIDcwNjU4LCA3MDY4NywgNzA3MTcsIDcwNzQ2LCA3MDc3NiwgNzA4MDUsIDcwODM1LCA3MDg2NCwgNzA4OTQsIDcwOTI0LCA3MDk1NCwgNzA5ODMsIDcxMDEzLCA3MTA0MiwgNzEwNzEsIDcxMTAxLFxyXG5cdFx0NzExMzAsIDcxMTU5LCA3MTE4OSwgNzEyMTgsIDcxMjQ4LCA3MTI3OCwgNzEzMDgsIDcxMzM3LCA3MTM2NywgNzEzOTcsIDcxNDI2LCA3MTQ1NSwgNzE0ODUsIDcxNTE0LCA3MTU0MywgNzE1NzMsIDcxNjAyLCA3MTYzMiwgNzE2NjIsIDcxNjkxLFxyXG5cdFx0NzE3MjEsIDcxNzUxLCA3MTc4MSwgNzE4MTAsIDcxODM5LCA3MTg2OSwgNzE4OTgsIDcxOTI3LCA3MTk1NywgNzE5ODYsIDcyMDE2LCA3MjA0NiwgNzIwNzUsIDcyMTA1LCA3MjEzNSwgNzIxNjQsIDcyMTk0LCA3MjIyMywgNzIyNTMsIDcyMjgyLFxyXG5cdFx0NzIzMTEsIDcyMzQxLCA3MjM3MCwgNzI0MDAsIDcyNDI5LCA3MjQ1OSwgNzI0ODksIDcyNTE4LCA3MjU0OCwgNzI1NzcsIDcyNjA3LCA3MjYzNywgNzI2NjYsIDcyNjk1LCA3MjcyNSwgNzI3NTQsIDcyNzg0LCA3MjgxMywgNzI4NDMsIDcyODcyLFxyXG5cdFx0NzI5MDIsIDcyOTMxLCA3Mjk2MSwgNzI5OTEsIDczMDIwLCA3MzA1MCwgNzMwODAsIDczMTA5LCA3MzEzOSwgNzMxNjgsIDczMTk3LCA3MzIyNywgNzMyNTYsIDczMjg2LCA3MzMxNSwgNzMzNDUsIDczMzc1LCA3MzQwNCwgNzM0MzQsIDczNDY0LFxyXG5cdFx0NzM0OTMsIDczNTIzLCA3MzU1MiwgNzM1ODEsIDczNjExLCA3MzY0MCwgNzM2NjksIDczNjk5LCA3MzcyOSwgNzM3NTgsIDczNzg4LCA3MzgxOCwgNzM4NDgsIDczODc3LCA3MzkwNywgNzM5MzYsIDczOTY1LCA3Mzk5NSwgNzQwMjQsIDc0MDUzLFxyXG5cdFx0NzQwODMsIDc0MTEzLCA3NDE0MiwgNzQxNzIsIDc0MjAyLCA3NDIzMSwgNzQyNjEsIDc0MjkxLCA3NDMyMCwgNzQzNDksIDc0Mzc5LCA3NDQwOCwgNzQ0MzcsIDc0NDY3LCA3NDQ5NywgNzQ1MjYsIDc0NTU2LCA3NDU4NiwgNzQ2MTUsIDc0NjQ1LFxyXG5cdFx0NzQ2NzUsIDc0NzA0LCA3NDczMywgNzQ3NjMsIDc0NzkyLCA3NDgyMiwgNzQ4NTEsIDc0ODgxLCA3NDkxMCwgNzQ5NDAsIDc0OTY5LCA3NDk5OSwgNzUwMjksIDc1MDU4LCA3NTA4OCwgNzUxMTcsIDc1MTQ3LCA3NTE3NiwgNzUyMDYsIDc1MjM1LFxyXG5cdFx0NzUyNjQsIDc1Mjk0LCA3NTMyMywgNzUzNTMsIDc1MzgzLCA3NTQxMiwgNzU0NDIsIDc1NDcyLCA3NTUwMSwgNzU1MzEsIDc1NTYwLCA3NTU5MCwgNzU2MTksIDc1NjQ4LCA3NTY3OCwgNzU3MDcsIDc1NzM3LCA3NTc2NiwgNzU3OTYsIDc1ODI2LFxyXG5cdFx0NzU4NTYsIDc1ODg1LCA3NTkxNSwgNzU5NDQsIDc1OTc0LCA3NjAwMywgNzYwMzIsIDc2MDYyLCA3NjA5MSwgNzYxMjEsIDc2MTUwLCA3NjE4MCwgNzYyMTAsIDc2MjM5LCA3NjI2OSwgNzYyOTksIDc2MzI4LCA3NjM1OCwgNzYzODcsIDc2NDE2LFxyXG5cdFx0NzY0NDYsIDc2NDc1LCA3NjUwNSwgNzY1MzQsIDc2NTY0LCA3NjU5MywgNzY2MjMsIDc2NjUzLCA3NjY4MiwgNzY3MTIsIDc2NzQxLCA3Njc3MSwgNzY4MDEsIDc2ODMwLCA3Njg1OSwgNzY4ODksIDc2OTE4LCA3Njk0OCwgNzY5NzcsIDc3MDA3LFxyXG5cdFx0NzcwMzYsIDc3MDY2LCA3NzA5NiwgNzcxMjUsIDc3MTU1LCA3NzE4NSwgNzcyMTQsIDc3MjQzLCA3NzI3MywgNzczMDIsIDc3MzMyLCA3NzM2MSwgNzczOTAsIDc3NDIwLCA3NzQ1MCwgNzc0NzksIDc3NTA5LCA3NzUzOSwgNzc1NjksIDc3NTk4LFxyXG5cdFx0Nzc2MjcsIDc3NjU3LCA3NzY4NiwgNzc3MTUsIDc3NzQ1LCA3Nzc3NCwgNzc4MDQsIDc3ODMzLCA3Nzg2MywgNzc4OTMsIDc3OTIzLCA3Nzk1MiwgNzc5ODIsIDc4MDExLCA3ODA0MSwgNzgwNzAsIDc4MDk5LCA3ODEyOSwgNzgxNTgsIDc4MTg4LFxyXG5cdFx0NzgyMTcsIDc4MjQ3LCA3ODI3NywgNzgzMDcsIDc4MzM2LCA3ODM2NiwgNzgzOTUsIDc4NDI1LCA3ODQ1NCwgNzg0ODMsIDc4NTEzLCA3ODU0MiwgNzg1NzIsIDc4NjAxLCA3ODYzMSwgNzg2NjEsIDc4NjkwLCA3ODcyMCwgNzg3NTAsIDc4Nzc5LFxyXG5cdFx0Nzg4MDgsIDc4ODM4LCA3ODg2NywgNzg4OTcsIDc4OTI2LCA3ODk1NiwgNzg5ODUsIDc5MDE1LCA3OTA0NCwgNzkwNzQsIDc5MTA0LCA3OTEzMywgNzkxNjMsIDc5MTkyLCA3OTIyMiwgNzkyNTEsIDc5MjgxLCA3OTMxMCwgNzkzNDAsIDc5MzY5LFxyXG5cdFx0NzkzOTksIDc5NDI4LCA3OTQ1OCwgNzk0ODcsIDc5NTE3LCA3OTU0NiwgNzk1NzYsIDc5NjA2LCA3OTYzNSwgNzk2NjUsIDc5Njk1LCA3OTcyNCwgNzk3NTMsIDc5NzgzLCA3OTgxMiwgNzk4NDEsIDc5ODcxLCA3OTkwMCwgNzk5MzAsIDc5OTYwLFxyXG5cdFx0Nzk5OTBdO1xyXG5cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.validation.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.validation.js index 3a3d6f04be9..b53576df81a 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.validation.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.validation.js @@ -233,4 +233,4 @@ })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMudmFsaWRhdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMudmFsaWRhdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIENhbGVuZGFycyBWYWxpZGF0aW9uIGV4dGVuc2lvbiBmb3IgalF1ZXJ5IDIuMC4xLlxuICAgUmVxdWlyZXMgSsO2cm4gWmFlZmZlcmVyJ3MgVmFsaWRhdGlvbiBwbHVnaW4gKGh0dHA6Ly9wbHVnaW5zLmpxdWVyeS5jb20vcHJvamVjdC92YWxpZGF0ZSkuXG4gICBXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpLlxuICAgQXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvbGljZW5jZS5odG1sKSBsaWNlbnNlLiBcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xuXG4oZnVuY3Rpb24oJCkgeyAvLyBIaWRlIHRoZSBuYW1lc3BhY2VcblxuXHQvKiBBZGQgdmFsaWRhdGlvbiBtZXRob2RzIGlmIHZhbGlkYXRpb24gcGx1Z2luIGF2YWlsYWJsZS4gKi9cblx0aWYgKCQuZm4udmFsaWRhdGUpIHtcblxuXHRcdCQuY2FsZW5kYXJzUGlja2VyLnNlbGVjdERhdGVPcmlnID0gJC5jYWxlbmRhcnNQaWNrZXIuc2VsZWN0RGF0ZTtcblx0XHRcblx0XHQkLmV4dGVuZCgkLmNhbGVuZGFyc1BpY2tlci5yZWdpb25hbE9wdGlvbnNbJyddLCB7XG5cdFx0XHR2YWxpZGF0ZURhdGU6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlJyxcblx0XHRcdHZhbGlkYXRlRGF0ZU1pbjogJ1BsZWFzZSBlbnRlciBhIGRhdGUgb24gb3IgYWZ0ZXIgezB9Jyxcblx0XHRcdHZhbGlkYXRlRGF0ZU1heDogJ1BsZWFzZSBlbnRlciBhIGRhdGUgb24gb3IgYmVmb3JlIHswfScsXG5cdFx0XHR2YWxpZGF0ZURhdGVNaW5NYXg6ICdQbGVhc2UgZW50ZXIgYSBkYXRlIGJldHdlZW4gezB9IGFuZCB7MX0nLFxuXHRcdFx0dmFsaWRhdGVEYXRlQ29tcGFyZTogJ1BsZWFzZSBlbnRlciBhIGRhdGUgezB9IHsxfScsXG5cdFx0XHR2YWxpZGF0ZURhdGVUb2RheTogJ3RvZGF5Jyxcblx0XHRcdHZhbGlkYXRlRGF0ZU90aGVyOiAndGhlIG90aGVyIGRhdGUnLFxuXHRcdFx0dmFsaWRhdGVEYXRlRVE6ICdlcXVhbCB0bycsXG5cdFx0XHR2YWxpZGF0ZURhdGVORTogJ25vdCBlcXVhbCB0bycsXG5cdFx0XHR2YWxpZGF0ZURhdGVMVDogJ2JlZm9yZScsXG5cdFx0XHR2YWxpZGF0ZURhdGVHVDogJ2FmdGVyJyxcblx0XHRcdHZhbGlkYXRlRGF0ZUxFOiAnbm90IGFmdGVyJyxcblx0XHRcdHZhbGlkYXRlRGF0ZUdFOiAnbm90IGJlZm9yZSdcblx0XHR9KTtcblx0XHRcblx0XHQkLmV4dGVuZCgkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0T3B0aW9ucywgJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWycnXSk7XG5cblx0XHQkLmV4dGVuZCgkLmNhbGVuZGFyc1BpY2tlciwge1xuXG5cdFx0XHQvKiogVHJpZ2dlciBhIHZhbGlkYXRpb24gYWZ0ZXIgdXBkYXRpbmcgdGhlIGlucHV0IGZpZWxkIHdpdGggdGhlIHNlbGVjdGVkIGRhdGUuXG5cdFx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgY29udHJvbCB0byBleGFtaW5lLlxuXHRcdFx0XHRAcGFyYW0gdGFyZ2V0IHtFbGVtZW50fSBUaGUgc2VsZWN0ZWQgZGF0ZXBpY2tlciBlbGVtZW50LiAqL1xuXHRcdFx0c2VsZWN0RGF0ZTogZnVuY3Rpb24oZWxlbSwgdGFyZ2V0KSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0RGF0ZU9yaWcoZWxlbSwgdGFyZ2V0KTtcblx0XHRcdFx0dmFyIGluc3QgPSAkLmNhbGVuZGFyc1BpY2tlci5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdFx0aWYgKCFpbnN0LmlubGluZSAmJiAkLmZuLnZhbGlkYXRlKSB7XG5cdFx0XHRcdFx0dmFyIHZhbGlkYXRpb24gPSAkKGVsZW0pLnBhcmVudHMoJ2Zvcm0nKS52YWxpZGF0ZSgpO1xuXHRcdFx0XHRcdGlmICh2YWxpZGF0aW9uKSB7XG5cdFx0XHRcdFx0XHR2YWxpZGF0aW9uLmVsZW1lbnQoJyMnICsgZWxlbS5pZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQvKiogQ29ycmVjdCBlcnJvciBwbGFjZW1lbnQgZm9yIHZhbGlkYXRpb24gZXJyb3JzIC0gYWZ0ZXIgYW55IHRyaWdnZXIuXG5cdFx0XHRcdEBwYXJhbSBlcnJvciB7alF1ZXJ5fSBUaGUgZXJyb3IgbWVzc2FnZS5cblx0XHRcdFx0QHBhcmFtIGVsZW0ge2pRdWVyeX0gVGhlIGZpZWxkIGluIGVycm9yLiAqL1xuXHRcdFx0ZXJyb3JQbGFjZW1lbnQ6IGZ1bmN0aW9uKGVycm9yLCBlbGVtKSB7XG5cdFx0XHRcdHZhciBpbnN0ID0gJC5jYWxlbmRhcnNQaWNrZXIuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRcdGlmIChpbnN0KSB7XG5cdFx0XHRcdFx0ZXJyb3JbaW5zdC5vcHRpb25zLmlzUlRMID8gJ2luc2VydEJlZm9yZScgOiAnaW5zZXJ0QWZ0ZXInXShcblx0XHRcdFx0XHRcdGluc3QudHJpZ2dlci5sZW5ndGggPiAwID8gaW5zdC50cmlnZ2VyIDogZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0ZXJyb3IuaW5zZXJ0QWZ0ZXIoZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8qKiBGb3JtYXQgYSB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2UgaW52b2x2aW5nIGRhdGVzLlxuXHRcdFx0XHRAcGFyYW0gc291cmNlIHtzdHJpbmd9IFRoZSBlcnJvciBtZXNzYWdlLlxuXHRcdFx0XHRAcGFyYW0gcGFyYW1zIHtEYXRlW119IFRoZSBkYXRlcy5cblx0XHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIG1lc3NhZ2UuICovXG5cdFx0XHRlcnJvckZvcm1hdDogZnVuY3Rpb24oc291cmNlLCBwYXJhbXMpIHtcblx0XHRcdFx0dmFyIGZvcm1hdCA9ICgkLmNhbGVuZGFyc1BpY2tlci5jdXJJbnN0ID9cblx0XHRcdFx0XHQkLmNhbGVuZGFyc1BpY2tlci5jdXJJbnN0LmdldCgnZGF0ZUZvcm1hdCcpIDpcblx0XHRcdFx0XHQkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0T3B0aW9ucy5kYXRlRm9ybWF0KTtcblx0XHRcdFx0JC5lYWNoKHBhcmFtcywgZnVuY3Rpb24oaW5kZXgsIHZhbHVlKSB7XG5cdFx0XHRcdFx0c291cmNlID0gc291cmNlLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXHsnICsgaW5kZXggKyAnXFxcXH0nLCAnZycpLFxuXHRcdFx0XHRcdFx0dmFsdWUuZm9ybWF0RGF0ZShmb3JtYXQpIHx8ICdub3RoaW5nJyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gc291cmNlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dmFyIGxhc3RFbGVtID0gbnVsbDtcblxuXHRcdC8qIFZhbGlkYXRlIGRhdGUgZmllbGQuICovXG5cdFx0JC52YWxpZGF0b3IuYWRkTWV0aG9kKCdjcERhdGUnLCBmdW5jdGlvbih2YWx1ZSwgZWxlbSkge1xuXHRcdFx0XHRsYXN0RWxlbSA9IGVsZW07XG5cdFx0XHRcdHJldHVybiB0aGlzLm9wdGlvbmFsKGVsZW0pIHx8IHZhbGlkYXRlRWFjaCh2YWx1ZSwgZWxlbSk7XG5cdFx0XHR9LFxuXHRcdFx0ZnVuY3Rpb24ocGFyYW1zKSB7XG5cdFx0XHRcdHZhciBpbnN0ID0gJC5jYWxlbmRhcnNQaWNrZXIuX2dldEluc3QobGFzdEVsZW0pO1xuXHRcdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuZ2V0KCdtaW5EYXRlJyk7XG5cdFx0XHRcdHZhciBtYXhEYXRlID0gaW5zdC5nZXQoJ21heERhdGUnKTtcblx0XHRcdFx0dmFyIG1lc3NhZ2VzID0gJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdE9wdGlvbnM7XG5cdFx0XHRcdHJldHVybiAobWluRGF0ZSAmJiBtYXhEYXRlID9cblx0XHRcdFx0XHQkLmNhbGVuZGFyc1BpY2tlci5lcnJvckZvcm1hdChtZXNzYWdlcy52YWxpZGF0ZURhdGVNaW5NYXgsIFttaW5EYXRlLCBtYXhEYXRlXSkgOlxuXHRcdFx0XHRcdChtaW5EYXRlID8gJC5jYWxlbmRhcnNQaWNrZXIuZXJyb3JGb3JtYXQobWVzc2FnZXMudmFsaWRhdGVEYXRlTWluLCBbbWluRGF0ZV0pIDpcblx0XHRcdFx0XHQobWF4RGF0ZSA/ICQuY2FsZW5kYXJzUGlja2VyLmVycm9yRm9ybWF0KG1lc3NhZ2VzLnZhbGlkYXRlRGF0ZU1heCwgW21heERhdGVdKSA6XG5cdFx0XHRcdFx0bWVzc2FnZXMudmFsaWRhdGVEYXRlKSkpO1xuXHRcdFx0fSk7XG5cblx0XHQvKiogQXBwbHkgYSB2YWxpZGF0aW9uIHRlc3QgdG8gZWFjaCBkYXRlIHByb3ZpZGVkLlxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSB2YWx1ZSB7c3RyaW5nfSBUaGUgY3VycmVudCBmaWVsZCB2YWx1ZS5cblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgZmllbGQgY29udHJvbC5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIE9LLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgZmFpbGVkIHZhbGlkYXRpb24uICovXG5cdFx0ZnVuY3Rpb24gdmFsaWRhdGVFYWNoKHZhbHVlLCBlbGVtKSB7XG5cdFx0XHR2YXIgaW5zdCA9ICQuY2FsZW5kYXJzUGlja2VyLl9nZXRJbnN0KGVsZW0pO1xuXHRcdFx0dmFyIGRhdGVzID0gKGluc3Qub3B0aW9ucy5tdWx0aVNlbGVjdCA/IHZhbHVlLnNwbGl0KGluc3Qub3B0aW9ucy5tdWx0aVNlcGFyYXRvcikgOlxuXHRcdFx0XHQoaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0ID8gdmFsdWUuc3BsaXQoaW5zdC5vcHRpb25zLnJhbmdlU2VwYXJhdG9yKSA6IFt2YWx1ZV0pKTtcblx0XHRcdHZhciBvayA9IChpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgJiYgZGF0ZXMubGVuZ3RoIDw9IGluc3Qub3B0aW9ucy5tdWx0aVNlbGVjdCkgfHxcblx0XHRcdFx0KCFpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgJiYgaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0ICYmIGRhdGVzLmxlbmd0aCA9PT0gMikgfHxcblx0XHRcdFx0KCFpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgJiYgIWluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCAmJiBkYXRlcy5sZW5ndGggPT09IDEpO1xuXHRcdFx0aWYgKG9rKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dmFyIGRhdGVGb3JtYXQgPSBpbnN0LmdldCgnZGF0ZUZvcm1hdCcpO1xuXHRcdFx0XHRcdHZhciBtaW5EYXRlID0gaW5zdC5nZXQoJ21pbkRhdGUnKTtcblx0XHRcdFx0XHR2YXIgbWF4RGF0ZSA9IGluc3QuZ2V0KCdtYXhEYXRlJyk7XG5cdFx0XHRcdFx0dmFyIGNwID0gJChlbGVtKTtcblx0XHRcdFx0XHQkLmVhY2goZGF0ZXMsIGZ1bmN0aW9uKGksIHYpIHtcblx0XHRcdFx0XHRcdGRhdGVzW2ldID0gaW5zdC5vcHRpb25zLmNhbGVuZGFyLnBhcnNlRGF0ZShkYXRlRm9ybWF0LCB2KTtcblx0XHRcdFx0XHRcdG9rID0gb2sgJiYgKCFkYXRlc1tpXSB8fCAoY3AuY2FsZW5kYXJzUGlja2VyKCdpc1NlbGVjdGFibGUnLCBkYXRlc1tpXSkgJiZcblx0XHRcdFx0XHRcdFx0KCFtaW5EYXRlIHx8IGRhdGVzW2ldLmNvbXBhcmVUbyhtaW5EYXRlKSAhPT0gLTEpICYmXG5cdFx0XHRcdFx0XHRcdCghbWF4RGF0ZSB8fCBkYXRlc1tpXS5jb21wYXJlVG8obWF4RGF0ZSkgIT09ICsxKSkpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0b2sgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9rICYmIGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCkge1xuXHRcdFx0XHRvayA9IChkYXRlc1swXS5jb21wYXJlVG8oZGF0ZXNbMV0pICE9PSArMSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb2s7XG5cdFx0fVxuXG5cdFx0LyogQW5kIGFsbG93IGFzIGEgY2xhc3MgcnVsZS4gKi9cblx0XHQkLnZhbGlkYXRvci5hZGRDbGFzc1J1bGVzKCdjcERhdGUnLCB7Y3BEYXRlOiB0cnVlfSk7XG5cblx0XHR2YXIgY29tcGFyaXNvbnMgPSB7ZXF1YWw6ICdlcScsIHNhbWU6ICdlcScsIG5vdEVxdWFsOiAnbmUnLCBub3RTYW1lOiAnbmUnLFxuXHRcdFx0bGVzc1RoYW46ICdsdCcsIGJlZm9yZTogJ2x0JywgZ3JlYXRlclRoYW46ICdndCcsIGFmdGVyOiAnZ3QnLFxuXHRcdFx0bm90TGVzc1RoYW46ICdnZScsIG5vdEJlZm9yZTogJ2dlJywgbm90R3JlYXRlclRoYW46ICdsZScsIG5vdEFmdGVyOiAnbGUnfTtcblxuXHRcdC8qKiBDcm9zcy12YWxpZGF0ZSBkYXRlIGZpZWxkcy5cblx0XHRcdHBhcmFtcyBzaG91bGQgYmUgYW4gYXJyYXkgd2l0aCBbMF0gY29tcGFyaXNvbiB0eXBlIGVxL25lL2x0L2d0L2xlL2dlIG9yIHN5bm9ueW1zLFxuXHRcdFx0WzFdICd0b2RheScgb3IgZGF0ZSBzdHJpbmcgb3IgQ0RhdGUgb3Igb3RoZXIgZmllbGQgc2VsZWN0b3IvZWxlbWVudC9qUXVlcnkgT1Jcblx0XHRcdGFuIG9iamVjdCB3aXRoIG9uZSBhdHRyaWJ1dGUgd2l0aCBuYW1lIGVxL25lL2x0L2d0L2xlL2dlIG9yIHN5bm9ueW1zXG5cdFx0XHRhbmQgdmFsdWUgJ3RvZGF5JyBvciBkYXRlIHN0cmluZyBvciBDRGF0ZSBvciBvdGhlciBmaWVsZCBzZWxlY3Rvci9lbGVtZW50L2pRdWVyeSBPUlxuXHRcdFx0YSBzdHJpbmcgd2l0aCBlcS9uZS9sdC9ndC9sZS9nZSBvciBzeW5vbnltcyBmb2xsb3dlZCBieSAndG9kYXknIG9yIGRhdGUgc3RyaW5nIG9yIGpRdWVyeSBzZWxlY3Rvci4gKi9cblx0XHQkLnZhbGlkYXRvci5hZGRNZXRob2QoJ2NwQ29tcGFyZURhdGUnLCBmdW5jdGlvbih2YWx1ZSwgZWxlbSwgcGFyYW1zKSB7XG5cdFx0XHRcdGlmICh0aGlzLm9wdGlvbmFsKGVsZW0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cGFyYW1zID0gbm9ybWFsaXNlUGFyYW1zKHBhcmFtcyk7XG5cdFx0XHRcdHZhciB0aGlzRGF0ZSA9ICQoZWxlbSkuY2FsZW5kYXJzUGlja2VyKCdnZXREYXRlJyk7XG5cdFx0XHRcdHZhciB0aGF0RGF0ZSA9IGV4dHJhY3RPdGhlckRhdGUoZWxlbSwgcGFyYW1zWzFdKTtcblx0XHRcdFx0aWYgKHRoaXNEYXRlLmxlbmd0aCA9PT0gMCB8fCB0aGF0RGF0ZS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsYXN0RWxlbSA9IGVsZW07XG5cdFx0XHRcdHZhciBmaW5hbFJlc3VsdCA9IHRydWU7XG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpc0RhdGUubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gdGhpc0RhdGVbaV0uY29tcGFyZVRvKHRoYXREYXRlWzBdKTtcblx0XHRcdFx0XHRzd2l0Y2ggKGNvbXBhcmlzb25zW3BhcmFtc1swXV0gfHwgcGFyYW1zWzBdKSB7XG5cdFx0XHRcdFx0XHRjYXNlICdlcSc6IGZpbmFsUmVzdWx0ID0gKHJlc3VsdCA9PT0gMCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnbmUnOiBmaW5hbFJlc3VsdCA9IChyZXN1bHQgIT09IDApOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ2x0JzogZmluYWxSZXN1bHQgPSAocmVzdWx0IDwgMCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnZ3QnOiBmaW5hbFJlc3VsdCA9IChyZXN1bHQgPiAwKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdsZSc6IGZpbmFsUmVzdWx0ID0gKHJlc3VsdCA8PSAwKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdnZSc6IGZpbmFsUmVzdWx0ID0gKHJlc3VsdCA+PSAwKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OiAgIGZpbmFsUmVzdWx0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCFmaW5hbFJlc3VsdCkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmaW5hbFJlc3VsdDtcblx0XHRcdH0sXG5cdFx0XHRmdW5jdGlvbihwYXJhbXMpIHtcblx0XHRcdFx0dmFyIG1lc3NhZ2VzID0gJC5jYWxlbmRhcnNQaWNrZXIuZGVmYXVsdE9wdGlvbnM7XG5cdFx0XHRcdHBhcmFtcyA9IG5vcm1hbGlzZVBhcmFtcyhwYXJhbXMpO1xuXHRcdFx0XHR2YXIgdGhhdERhdGUgPSBleHRyYWN0T3RoZXJEYXRlKGxhc3RFbGVtLCBwYXJhbXNbMV0sIHRydWUpO1xuXHRcdFx0XHR0aGF0RGF0ZSA9IChwYXJhbXNbMV0gPT09ICd0b2RheScgPyBtZXNzYWdlcy52YWxpZGF0ZURhdGVUb2RheSA6IFxuXHRcdFx0XHRcdCh0aGF0RGF0ZS5sZW5ndGggPyB0aGF0RGF0ZVswXS5mb3JtYXREYXRlKCkgOiBtZXNzYWdlcy52YWxpZGF0ZURhdGVPdGhlcikpO1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZXMudmFsaWRhdGVEYXRlQ29tcGFyZS5yZXBsYWNlKC9cXHswXFx9Lyxcblx0XHRcdFx0XHRtZXNzYWdlc1sndmFsaWRhdGVEYXRlJyArIChjb21wYXJpc29uc1twYXJhbXNbMF1dIHx8IHBhcmFtc1swXSkudG9VcHBlckNhc2UoKV0pLlxuXHRcdFx0XHRcdHJlcGxhY2UoL1xcezFcXH0vLCB0aGF0RGF0ZSk7XG5cdFx0XHR9KTtcblxuXHRcdC8qKiBOb3JtYWxpc2UgdGhlIGNvbXBhcmlzb24gcGFyYW1ldGVycyB0byBhbiBhcnJheS5cblx0XHRcdEBwYXJhbSBwYXJhbXMge0FycmF5fG9iamVjdHxzdHJpbmd9IFRoZSBvcmlnaW5hbCBwYXJhbWV0ZXJzLlxuXHRcdFx0QHJldHVybiB7QXJyYXl9IFRoZSBub3JtYWxpc2VkIHBhcmFtZXRlcnMuICovXG5cdFx0ZnVuY3Rpb24gbm9ybWFsaXNlUGFyYW1zKHBhcmFtcykge1xuXHRcdFx0aWYgKHR5cGVvZiBwYXJhbXMgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHBhcmFtcyA9IHBhcmFtcy5zcGxpdCgnICcpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoISQuaXNBcnJheShwYXJhbXMpKSB7XG5cdFx0XHRcdHZhciBvcHRzID0gW107XG5cdFx0XHRcdGZvciAodmFyIG5hbWUgaW4gcGFyYW1zKSB7XG5cdFx0XHRcdFx0b3B0c1swXSA9IG5hbWU7XG5cdFx0XHRcdFx0b3B0c1sxXSA9IHBhcmFtc1tuYW1lXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRwYXJhbXMgPSBvcHRzO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHBhcmFtcztcblx0XHR9XG5cblx0XHQvKiogRGV0ZXJtaW5lIHRoZSBjb21wYXJpc29uIGRhdGUuXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGN1cnJlbnQgZGF0ZXBpY2tlciBlbGVtZW50LlxuXHRcdFx0QHBhcmFtIHNvdXJjZSB7c3RyaW5nfENEYXRlfGpRdWVyeUVsZW1lbnR9IFRoZSBzb3VyY2Ugb2YgdGhlIG90aGVyIGRhdGUuXG5cdFx0XHRAcGFyYW0gbm9PdGhlciB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gbm90IGdldCB0aGUgZGF0ZSBmcm9tIGFub3RoZXIgZmllbGQuXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZVtdfSBUaGUgZGF0ZSBmb3IgY29tcGFyaXNvbi4gKi9cblx0XHRmdW5jdGlvbiBleHRyYWN0T3RoZXJEYXRlKGVsZW0sIHNvdXJjZSwgbm9PdGhlcikge1xuXHRcdFx0aWYgKHNvdXJjZS5uZXdEYXRlICYmIHNvdXJjZS5leHRyYUluZm8pIHsgLy8gQWxyZWFkeSBhIENEYXRlXG5cdFx0XHRcdHJldHVybiBbc291cmNlXTtcblx0XHRcdH1cblx0XHRcdHZhciBpbnN0ID0gJC5jYWxlbmRhcnNQaWNrZXIuX2dldEluc3QoZWxlbSk7XG5cdFx0XHR2YXIgdGhhdERhdGUgPSBudWxsO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnICYmIHNvdXJjZSAhPT0gJ3RvZGF5Jykge1xuXHRcdFx0XHRcdHRoYXREYXRlID0gaW5zdC5vcHRpb25zLmNhbGVuZGFyLnBhcnNlRGF0ZShpbnN0LmdldCgnZGF0ZUZvcm1hdCcpLCBzb3VyY2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjYXRjaCAoZSkge1xuXHRcdFx0XHQvLyBJZ25vcmVcblx0XHRcdH1cblx0XHRcdHRoYXREYXRlID0gKHRoYXREYXRlID8gW3RoYXREYXRlXSA6IChzb3VyY2UgPT09ICd0b2RheScgP1xuXHRcdFx0XHRbaW5zdC5vcHRpb25zLmNhbGVuZGFyLnRvZGF5KCldIDogKG5vT3RoZXIgPyBbXSA6ICQoc291cmNlKS5jYWxlbmRhcnNQaWNrZXIoJ2dldERhdGUnKSkpKTtcblx0XHRcdHJldHVybiB0aGF0RGF0ZTtcblx0XHR9XG5cdH1cblxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMudmFsaWRhdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMudmFsaWRhdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcclxuICAgQ2FsZW5kYXJzIFZhbGlkYXRpb24gZXh0ZW5zaW9uIGZvciBqUXVlcnkgMi4wLjEuXHJcbiAgIFJlcXVpcmVzIErDtnJuIFphZWZmZXJlcidzIFZhbGlkYXRpb24gcGx1Z2luIChodHRwOi8vcGx1Z2lucy5qcXVlcnkuY29tL3Byb2plY3QvdmFsaWRhdGUpLlxyXG4gICBXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpLlxyXG4gICBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCAoaHR0cDovL2tlaXRoLXdvb2QubmFtZS9saWNlbmNlLmh0bWwpIGxpY2Vuc2UuIFxyXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cclxuXHJcbihmdW5jdGlvbigkKSB7IC8vIEhpZGUgdGhlIG5hbWVzcGFjZVxyXG5cclxuXHQvKiBBZGQgdmFsaWRhdGlvbiBtZXRob2RzIGlmIHZhbGlkYXRpb24gcGx1Z2luIGF2YWlsYWJsZS4gKi9cclxuXHRpZiAoJC5mbi52YWxpZGF0ZSkge1xyXG5cclxuXHRcdCQuY2FsZW5kYXJzUGlja2VyLnNlbGVjdERhdGVPcmlnID0gJC5jYWxlbmRhcnNQaWNrZXIuc2VsZWN0RGF0ZTtcclxuXHRcdFxyXG5cdFx0JC5leHRlbmQoJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWycnXSwge1xyXG5cdFx0XHR2YWxpZGF0ZURhdGU6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlJyxcclxuXHRcdFx0dmFsaWRhdGVEYXRlTWluOiAnUGxlYXNlIGVudGVyIGEgZGF0ZSBvbiBvciBhZnRlciB7MH0nLFxyXG5cdFx0XHR2YWxpZGF0ZURhdGVNYXg6ICdQbGVhc2UgZW50ZXIgYSBkYXRlIG9uIG9yIGJlZm9yZSB7MH0nLFxyXG5cdFx0XHR2YWxpZGF0ZURhdGVNaW5NYXg6ICdQbGVhc2UgZW50ZXIgYSBkYXRlIGJldHdlZW4gezB9IGFuZCB7MX0nLFxyXG5cdFx0XHR2YWxpZGF0ZURhdGVDb21wYXJlOiAnUGxlYXNlIGVudGVyIGEgZGF0ZSB7MH0gezF9JyxcclxuXHRcdFx0dmFsaWRhdGVEYXRlVG9kYXk6ICd0b2RheScsXHJcblx0XHRcdHZhbGlkYXRlRGF0ZU90aGVyOiAndGhlIG90aGVyIGRhdGUnLFxyXG5cdFx0XHR2YWxpZGF0ZURhdGVFUTogJ2VxdWFsIHRvJyxcclxuXHRcdFx0dmFsaWRhdGVEYXRlTkU6ICdub3QgZXF1YWwgdG8nLFxyXG5cdFx0XHR2YWxpZGF0ZURhdGVMVDogJ2JlZm9yZScsXHJcblx0XHRcdHZhbGlkYXRlRGF0ZUdUOiAnYWZ0ZXInLFxyXG5cdFx0XHR2YWxpZGF0ZURhdGVMRTogJ25vdCBhZnRlcicsXHJcblx0XHRcdHZhbGlkYXRlRGF0ZUdFOiAnbm90IGJlZm9yZSdcclxuXHRcdH0pO1xyXG5cdFx0XHJcblx0XHQkLmV4dGVuZCgkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0T3B0aW9ucywgJC5jYWxlbmRhcnNQaWNrZXIucmVnaW9uYWxPcHRpb25zWycnXSk7XHJcblxyXG5cdFx0JC5leHRlbmQoJC5jYWxlbmRhcnNQaWNrZXIsIHtcclxuXHJcblx0XHRcdC8qKiBUcmlnZ2VyIGEgdmFsaWRhdGlvbiBhZnRlciB1cGRhdGluZyB0aGUgaW5wdXQgZmllbGQgd2l0aCB0aGUgc2VsZWN0ZWQgZGF0ZS5cclxuXHRcdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGNvbnRyb2wgdG8gZXhhbWluZS5cclxuXHRcdFx0XHRAcGFyYW0gdGFyZ2V0IHtFbGVtZW50fSBUaGUgc2VsZWN0ZWQgZGF0ZXBpY2tlciBlbGVtZW50LiAqL1xyXG5cdFx0XHRzZWxlY3REYXRlOiBmdW5jdGlvbihlbGVtLCB0YXJnZXQpIHtcclxuXHRcdFx0XHR0aGlzLnNlbGVjdERhdGVPcmlnKGVsZW0sIHRhcmdldCk7XHJcblx0XHRcdFx0dmFyIGluc3QgPSAkLmNhbGVuZGFyc1BpY2tlci5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0XHRpZiAoIWluc3QuaW5saW5lICYmICQuZm4udmFsaWRhdGUpIHtcclxuXHRcdFx0XHRcdHZhciB2YWxpZGF0aW9uID0gJChlbGVtKS5wYXJlbnRzKCdmb3JtJykudmFsaWRhdGUoKTtcclxuXHRcdFx0XHRcdGlmICh2YWxpZGF0aW9uKSB7XHJcblx0XHRcdFx0XHRcdHZhbGlkYXRpb24uZWxlbWVudCgnIycgKyBlbGVtLmlkKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvKiogQ29ycmVjdCBlcnJvciBwbGFjZW1lbnQgZm9yIHZhbGlkYXRpb24gZXJyb3JzIC0gYWZ0ZXIgYW55IHRyaWdnZXIuXHJcblx0XHRcdFx0QHBhcmFtIGVycm9yIHtqUXVlcnl9IFRoZSBlcnJvciBtZXNzYWdlLlxyXG5cdFx0XHRcdEBwYXJhbSBlbGVtIHtqUXVlcnl9IFRoZSBmaWVsZCBpbiBlcnJvci4gKi9cclxuXHRcdFx0ZXJyb3JQbGFjZW1lbnQ6IGZ1bmN0aW9uKGVycm9yLCBlbGVtKSB7XHJcblx0XHRcdFx0dmFyIGluc3QgPSAkLmNhbGVuZGFyc1BpY2tlci5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0XHRpZiAoaW5zdCkge1xyXG5cdFx0XHRcdFx0ZXJyb3JbaW5zdC5vcHRpb25zLmlzUlRMID8gJ2luc2VydEJlZm9yZScgOiAnaW5zZXJ0QWZ0ZXInXShcclxuXHRcdFx0XHRcdFx0aW5zdC50cmlnZ2VyLmxlbmd0aCA+IDAgPyBpbnN0LnRyaWdnZXIgOiBlbGVtKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRlcnJvci5pbnNlcnRBZnRlcihlbGVtKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvKiogRm9ybWF0IGEgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlIGludm9sdmluZyBkYXRlcy5cclxuXHRcdFx0XHRAcGFyYW0gc291cmNlIHtzdHJpbmd9IFRoZSBlcnJvciBtZXNzYWdlLlxyXG5cdFx0XHRcdEBwYXJhbSBwYXJhbXMge0RhdGVbXX0gVGhlIGRhdGVzLlxyXG5cdFx0XHRcdEByZXR1cm4ge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBtZXNzYWdlLiAqL1xyXG5cdFx0XHRlcnJvckZvcm1hdDogZnVuY3Rpb24oc291cmNlLCBwYXJhbXMpIHtcclxuXHRcdFx0XHR2YXIgZm9ybWF0ID0gKCQuY2FsZW5kYXJzUGlja2VyLmN1ckluc3QgP1xyXG5cdFx0XHRcdFx0JC5jYWxlbmRhcnNQaWNrZXIuY3VySW5zdC5nZXQoJ2RhdGVGb3JtYXQnKSA6XHJcblx0XHRcdFx0XHQkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0T3B0aW9ucy5kYXRlRm9ybWF0KTtcclxuXHRcdFx0XHQkLmVhY2gocGFyYW1zLCBmdW5jdGlvbihpbmRleCwgdmFsdWUpIHtcclxuXHRcdFx0XHRcdHNvdXJjZSA9IHNvdXJjZS5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFx7JyArIGluZGV4ICsgJ1xcXFx9JywgJ2cnKSxcclxuXHRcdFx0XHRcdFx0dmFsdWUuZm9ybWF0RGF0ZShmb3JtYXQpIHx8ICdub3RoaW5nJyk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0cmV0dXJuIHNvdXJjZTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0dmFyIGxhc3RFbGVtID0gbnVsbDtcclxuXHJcblx0XHQvKiBWYWxpZGF0ZSBkYXRlIGZpZWxkLiAqL1xyXG5cdFx0JC52YWxpZGF0b3IuYWRkTWV0aG9kKCdjcERhdGUnLCBmdW5jdGlvbih2YWx1ZSwgZWxlbSkge1xyXG5cdFx0XHRcdGxhc3RFbGVtID0gZWxlbTtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5vcHRpb25hbChlbGVtKSB8fCB2YWxpZGF0ZUVhY2godmFsdWUsIGVsZW0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRmdW5jdGlvbihwYXJhbXMpIHtcclxuXHRcdFx0XHR2YXIgaW5zdCA9ICQuY2FsZW5kYXJzUGlja2VyLl9nZXRJbnN0KGxhc3RFbGVtKTtcclxuXHRcdFx0XHR2YXIgbWluRGF0ZSA9IGluc3QuZ2V0KCdtaW5EYXRlJyk7XHJcblx0XHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xyXG5cdFx0XHRcdHZhciBtZXNzYWdlcyA9ICQuY2FsZW5kYXJzUGlja2VyLmRlZmF1bHRPcHRpb25zO1xyXG5cdFx0XHRcdHJldHVybiAobWluRGF0ZSAmJiBtYXhEYXRlID9cclxuXHRcdFx0XHRcdCQuY2FsZW5kYXJzUGlja2VyLmVycm9yRm9ybWF0KG1lc3NhZ2VzLnZhbGlkYXRlRGF0ZU1pbk1heCwgW21pbkRhdGUsIG1heERhdGVdKSA6XHJcblx0XHRcdFx0XHQobWluRGF0ZSA/ICQuY2FsZW5kYXJzUGlja2VyLmVycm9yRm9ybWF0KG1lc3NhZ2VzLnZhbGlkYXRlRGF0ZU1pbiwgW21pbkRhdGVdKSA6XHJcblx0XHRcdFx0XHQobWF4RGF0ZSA/ICQuY2FsZW5kYXJzUGlja2VyLmVycm9yRm9ybWF0KG1lc3NhZ2VzLnZhbGlkYXRlRGF0ZU1heCwgW21heERhdGVdKSA6XHJcblx0XHRcdFx0XHRtZXNzYWdlcy52YWxpZGF0ZURhdGUpKSk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdC8qKiBBcHBseSBhIHZhbGlkYXRpb24gdGVzdCB0byBlYWNoIGRhdGUgcHJvdmlkZWQuXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSB2YWx1ZSB7c3RyaW5nfSBUaGUgY3VycmVudCBmaWVsZCB2YWx1ZS5cclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBmaWVsZCBjb250cm9sLlxyXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBPSywgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIGZhaWxlZCB2YWxpZGF0aW9uLiAqL1xyXG5cdFx0ZnVuY3Rpb24gdmFsaWRhdGVFYWNoKHZhbHVlLCBlbGVtKSB7XHJcblx0XHRcdHZhciBpbnN0ID0gJC5jYWxlbmRhcnNQaWNrZXIuX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdHZhciBkYXRlcyA9IChpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgPyB2YWx1ZS5zcGxpdChpbnN0Lm9wdGlvbnMubXVsdGlTZXBhcmF0b3IpIDpcclxuXHRcdFx0XHQoaW5zdC5vcHRpb25zLnJhbmdlU2VsZWN0ID8gdmFsdWUuc3BsaXQoaW5zdC5vcHRpb25zLnJhbmdlU2VwYXJhdG9yKSA6IFt2YWx1ZV0pKTtcclxuXHRcdFx0dmFyIG9rID0gKGluc3Qub3B0aW9ucy5tdWx0aVNlbGVjdCAmJiBkYXRlcy5sZW5ndGggPD0gaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0KSB8fFxyXG5cdFx0XHRcdCghaW5zdC5vcHRpb25zLm11bHRpU2VsZWN0ICYmIGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCAmJiBkYXRlcy5sZW5ndGggPT09IDIpIHx8XHJcblx0XHRcdFx0KCFpbnN0Lm9wdGlvbnMubXVsdGlTZWxlY3QgJiYgIWluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCAmJiBkYXRlcy5sZW5ndGggPT09IDEpO1xyXG5cdFx0XHRpZiAob2spIHtcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0dmFyIGRhdGVGb3JtYXQgPSBpbnN0LmdldCgnZGF0ZUZvcm1hdCcpO1xyXG5cdFx0XHRcdFx0dmFyIG1pbkRhdGUgPSBpbnN0LmdldCgnbWluRGF0ZScpO1xyXG5cdFx0XHRcdFx0dmFyIG1heERhdGUgPSBpbnN0LmdldCgnbWF4RGF0ZScpO1xyXG5cdFx0XHRcdFx0dmFyIGNwID0gJChlbGVtKTtcclxuXHRcdFx0XHRcdCQuZWFjaChkYXRlcywgZnVuY3Rpb24oaSwgdikge1xyXG5cdFx0XHRcdFx0XHRkYXRlc1tpXSA9IGluc3Qub3B0aW9ucy5jYWxlbmRhci5wYXJzZURhdGUoZGF0ZUZvcm1hdCwgdik7XHJcblx0XHRcdFx0XHRcdG9rID0gb2sgJiYgKCFkYXRlc1tpXSB8fCAoY3AuY2FsZW5kYXJzUGlja2VyKCdpc1NlbGVjdGFibGUnLCBkYXRlc1tpXSkgJiZcclxuXHRcdFx0XHRcdFx0XHQoIW1pbkRhdGUgfHwgZGF0ZXNbaV0uY29tcGFyZVRvKG1pbkRhdGUpICE9PSAtMSkgJiZcclxuXHRcdFx0XHRcdFx0XHQoIW1heERhdGUgfHwgZGF0ZXNbaV0uY29tcGFyZVRvKG1heERhdGUpICE9PSArMSkpKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjYXRjaCAoZSkge1xyXG5cdFx0XHRcdFx0b2sgPSBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKG9rICYmIGluc3Qub3B0aW9ucy5yYW5nZVNlbGVjdCkge1xyXG5cdFx0XHRcdG9rID0gKGRhdGVzWzBdLmNvbXBhcmVUbyhkYXRlc1sxXSkgIT09ICsxKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gb2s7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQW5kIGFsbG93IGFzIGEgY2xhc3MgcnVsZS4gKi9cclxuXHRcdCQudmFsaWRhdG9yLmFkZENsYXNzUnVsZXMoJ2NwRGF0ZScsIHtjcERhdGU6IHRydWV9KTtcclxuXHJcblx0XHR2YXIgY29tcGFyaXNvbnMgPSB7ZXF1YWw6ICdlcScsIHNhbWU6ICdlcScsIG5vdEVxdWFsOiAnbmUnLCBub3RTYW1lOiAnbmUnLFxyXG5cdFx0XHRsZXNzVGhhbjogJ2x0JywgYmVmb3JlOiAnbHQnLCBncmVhdGVyVGhhbjogJ2d0JywgYWZ0ZXI6ICdndCcsXHJcblx0XHRcdG5vdExlc3NUaGFuOiAnZ2UnLCBub3RCZWZvcmU6ICdnZScsIG5vdEdyZWF0ZXJUaGFuOiAnbGUnLCBub3RBZnRlcjogJ2xlJ307XHJcblxyXG5cdFx0LyoqIENyb3NzLXZhbGlkYXRlIGRhdGUgZmllbGRzLlxyXG5cdFx0XHRwYXJhbXMgc2hvdWxkIGJlIGFuIGFycmF5IHdpdGggWzBdIGNvbXBhcmlzb24gdHlwZSBlcS9uZS9sdC9ndC9sZS9nZSBvciBzeW5vbnltcyxcclxuXHRcdFx0WzFdICd0b2RheScgb3IgZGF0ZSBzdHJpbmcgb3IgQ0RhdGUgb3Igb3RoZXIgZmllbGQgc2VsZWN0b3IvZWxlbWVudC9qUXVlcnkgT1JcclxuXHRcdFx0YW4gb2JqZWN0IHdpdGggb25lIGF0dHJpYnV0ZSB3aXRoIG5hbWUgZXEvbmUvbHQvZ3QvbGUvZ2Ugb3Igc3lub255bXNcclxuXHRcdFx0YW5kIHZhbHVlICd0b2RheScgb3IgZGF0ZSBzdHJpbmcgb3IgQ0RhdGUgb3Igb3RoZXIgZmllbGQgc2VsZWN0b3IvZWxlbWVudC9qUXVlcnkgT1JcclxuXHRcdFx0YSBzdHJpbmcgd2l0aCBlcS9uZS9sdC9ndC9sZS9nZSBvciBzeW5vbnltcyBmb2xsb3dlZCBieSAndG9kYXknIG9yIGRhdGUgc3RyaW5nIG9yIGpRdWVyeSBzZWxlY3Rvci4gKi9cclxuXHRcdCQudmFsaWRhdG9yLmFkZE1ldGhvZCgnY3BDb21wYXJlRGF0ZScsIGZ1bmN0aW9uKHZhbHVlLCBlbGVtLCBwYXJhbXMpIHtcclxuXHRcdFx0XHRpZiAodGhpcy5vcHRpb25hbChlbGVtKSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHBhcmFtcyA9IG5vcm1hbGlzZVBhcmFtcyhwYXJhbXMpO1xyXG5cdFx0XHRcdHZhciB0aGlzRGF0ZSA9ICQoZWxlbSkuY2FsZW5kYXJzUGlja2VyKCdnZXREYXRlJyk7XHJcblx0XHRcdFx0dmFyIHRoYXREYXRlID0gZXh0cmFjdE90aGVyRGF0ZShlbGVtLCBwYXJhbXNbMV0pO1xyXG5cdFx0XHRcdGlmICh0aGlzRGF0ZS5sZW5ndGggPT09IDAgfHwgdGhhdERhdGUubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0bGFzdEVsZW0gPSBlbGVtO1xyXG5cdFx0XHRcdHZhciBmaW5hbFJlc3VsdCA9IHRydWU7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzRGF0ZS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0dmFyIHJlc3VsdCA9IHRoaXNEYXRlW2ldLmNvbXBhcmVUbyh0aGF0RGF0ZVswXSk7XHJcblx0XHRcdFx0XHRzd2l0Y2ggKGNvbXBhcmlzb25zW3BhcmFtc1swXV0gfHwgcGFyYW1zWzBdKSB7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ2VxJzogZmluYWxSZXN1bHQgPSAocmVzdWx0ID09PSAwKTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ25lJzogZmluYWxSZXN1bHQgPSAocmVzdWx0ICE9PSAwKTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ2x0JzogZmluYWxSZXN1bHQgPSAocmVzdWx0IDwgMCk7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdndCc6IGZpbmFsUmVzdWx0ID0gKHJlc3VsdCA+IDApOyBicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAnbGUnOiBmaW5hbFJlc3VsdCA9IChyZXN1bHQgPD0gMCk7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlICdnZSc6IGZpbmFsUmVzdWx0ID0gKHJlc3VsdCA+PSAwKTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdGRlZmF1bHQ6ICAgZmluYWxSZXN1bHQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCFmaW5hbFJlc3VsdCkge1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGZpbmFsUmVzdWx0O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRmdW5jdGlvbihwYXJhbXMpIHtcclxuXHRcdFx0XHR2YXIgbWVzc2FnZXMgPSAkLmNhbGVuZGFyc1BpY2tlci5kZWZhdWx0T3B0aW9ucztcclxuXHRcdFx0XHRwYXJhbXMgPSBub3JtYWxpc2VQYXJhbXMocGFyYW1zKTtcclxuXHRcdFx0XHR2YXIgdGhhdERhdGUgPSBleHRyYWN0T3RoZXJEYXRlKGxhc3RFbGVtLCBwYXJhbXNbMV0sIHRydWUpO1xyXG5cdFx0XHRcdHRoYXREYXRlID0gKHBhcmFtc1sxXSA9PT0gJ3RvZGF5JyA/IG1lc3NhZ2VzLnZhbGlkYXRlRGF0ZVRvZGF5IDogXHJcblx0XHRcdFx0XHQodGhhdERhdGUubGVuZ3RoID8gdGhhdERhdGVbMF0uZm9ybWF0RGF0ZSgpIDogbWVzc2FnZXMudmFsaWRhdGVEYXRlT3RoZXIpKTtcclxuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZXMudmFsaWRhdGVEYXRlQ29tcGFyZS5yZXBsYWNlKC9cXHswXFx9LyxcclxuXHRcdFx0XHRcdG1lc3NhZ2VzWyd2YWxpZGF0ZURhdGUnICsgKGNvbXBhcmlzb25zW3BhcmFtc1swXV0gfHwgcGFyYW1zWzBdKS50b1VwcGVyQ2FzZSgpXSkuXHJcblx0XHRcdFx0XHRyZXBsYWNlKC9cXHsxXFx9LywgdGhhdERhdGUpO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHQvKiogTm9ybWFsaXNlIHRoZSBjb21wYXJpc29uIHBhcmFtZXRlcnMgdG8gYW4gYXJyYXkuXHJcblx0XHRcdEBwYXJhbSBwYXJhbXMge0FycmF5fG9iamVjdHxzdHJpbmd9IFRoZSBvcmlnaW5hbCBwYXJhbWV0ZXJzLlxyXG5cdFx0XHRAcmV0dXJuIHtBcnJheX0gVGhlIG5vcm1hbGlzZWQgcGFyYW1ldGVycy4gKi9cclxuXHRcdGZ1bmN0aW9uIG5vcm1hbGlzZVBhcmFtcyhwYXJhbXMpIHtcclxuXHRcdFx0aWYgKHR5cGVvZiBwYXJhbXMgPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdFx0cGFyYW1zID0gcGFyYW1zLnNwbGl0KCcgJyk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAoISQuaXNBcnJheShwYXJhbXMpKSB7XHJcblx0XHRcdFx0dmFyIG9wdHMgPSBbXTtcclxuXHRcdFx0XHRmb3IgKHZhciBuYW1lIGluIHBhcmFtcykge1xyXG5cdFx0XHRcdFx0b3B0c1swXSA9IG5hbWU7XHJcblx0XHRcdFx0XHRvcHRzWzFdID0gcGFyYW1zW25hbWVdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRwYXJhbXMgPSBvcHRzO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBwYXJhbXM7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqIERldGVybWluZSB0aGUgY29tcGFyaXNvbiBkYXRlLlxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGN1cnJlbnQgZGF0ZXBpY2tlciBlbGVtZW50LlxyXG5cdFx0XHRAcGFyYW0gc291cmNlIHtzdHJpbmd8Q0RhdGV8alF1ZXJ5RWxlbWVudH0gVGhlIHNvdXJjZSBvZiB0aGUgb3RoZXIgZGF0ZS5cclxuXHRcdFx0QHBhcmFtIG5vT3RoZXIge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIG5vdCBnZXQgdGhlIGRhdGUgZnJvbSBhbm90aGVyIGZpZWxkLlxyXG5cdFx0XHRAcmV0dXJuIHtDRGF0ZVtdfSBUaGUgZGF0ZSBmb3IgY29tcGFyaXNvbi4gKi9cclxuXHRcdGZ1bmN0aW9uIGV4dHJhY3RPdGhlckRhdGUoZWxlbSwgc291cmNlLCBub090aGVyKSB7XHJcblx0XHRcdGlmIChzb3VyY2UubmV3RGF0ZSAmJiBzb3VyY2UuZXh0cmFJbmZvKSB7IC8vIEFscmVhZHkgYSBDRGF0ZVxyXG5cdFx0XHRcdHJldHVybiBbc291cmNlXTtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgaW5zdCA9ICQuY2FsZW5kYXJzUGlja2VyLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHR2YXIgdGhhdERhdGUgPSBudWxsO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyAmJiBzb3VyY2UgIT09ICd0b2RheScpIHtcclxuXHRcdFx0XHRcdHRoYXREYXRlID0gaW5zdC5vcHRpb25zLmNhbGVuZGFyLnBhcnNlRGF0ZShpbnN0LmdldCgnZGF0ZUZvcm1hdCcpLCBzb3VyY2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRjYXRjaCAoZSkge1xyXG5cdFx0XHRcdC8vIElnbm9yZVxyXG5cdFx0XHR9XHJcblx0XHRcdHRoYXREYXRlID0gKHRoYXREYXRlID8gW3RoYXREYXRlXSA6IChzb3VyY2UgPT09ICd0b2RheScgP1xyXG5cdFx0XHRcdFtpbnN0Lm9wdGlvbnMuY2FsZW5kYXIudG9kYXkoKV0gOiAobm9PdGhlciA/IFtdIDogJChzb3VyY2UpLmNhbGVuZGFyc1BpY2tlcignZ2V0RGF0ZScpKSkpO1xyXG5cdFx0XHRyZXR1cm4gdGhhdERhdGU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufSkoalF1ZXJ5KTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/TimeEntry/jquery.timeentry.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/TimeEntry/jquery.timeentry.js index 60409cbebcb..486b0557720 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/TimeEntry/jquery.timeentry.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/TimeEntry/jquery.timeentry.js @@ -1063,4 +1063,4 @@ })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS50aW1lZW50cnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LnRpbWVlbnRyeS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvdGltZUVudHJ5Lmh0bWxcbiAgIFRpbWUgZW50cnkgZm9yIGpRdWVyeSB2Mi4wLjEuXG4gICBXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpIEp1bmUgMjAwNy5cbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iL21hc3Rlci9NSVQtTElDRU5TRS50eHQpIGxpY2Vuc2UuXG4gICBQbGVhc2UgYXR0cmlidXRlIHRoZSBhdXRob3IgaWYgeW91IHVzZSBpdC4gKi9cblxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxuXG5cdHZhciBwbHVnaW5OYW1lID0gJ3RpbWVFbnRyeSc7XG5cblx0LyoqIENyZWF0ZSB0aGUgdGltZSBlbnRyeSBwbHVnaW4uXG5cdFx0PHA+U2V0cyBhbiBpbnB1dCBmaWVsZCB0byBhZGQgYSBzcGlubmVyIGZvciB0aW1lIGVudHJ5LjwvcD5cblx0XHQ8cD5UaGUgdGltZSBjYW4gYmUgZW50ZXJlZCB2aWEgZGlyZWN0bHkgdHlwaW5nIHRoZSB2YWx1ZSxcblx0XHR2aWEgdGhlIGFycm93IGtleXMsIG9yIHZpYSBzcGlubmVyIGJ1dHRvbnMuXG5cdFx0SXQgaXMgY29uZmlndXJhYmxlIHRvIHNob3cgMTIgb3IgMjQtaG91ciB0aW1lLCB0byBzaG93IG9yIGhpZGUgc2Vjb25kcyxcblx0XHR0byBlbmZvcmNlIGEgbWluaW11bSBhbmQvb3IgbWF4aW11bSB0aW1lLCB0byBjaGFuZ2UgdGhlIHNwaW5uZXIgaW1hZ2UsXG5cdFx0YW5kIHRvIGNvbnN0cmFpbiB0aGUgdGltZSB0byBzdGVwcywgZS5nLiBvbmx5IG9uIHRoZSBxdWFydGVyIGhvdXJzLjwvcD5cblx0XHQ8cD5FeHBlY3RzIEhUTUwgbGlrZTo8L3A+XG5cdFx0PHByZT4mbHQ7aW5wdXQgdHlwZT1cInRleHRcIj48L3ByZT5cblx0XHQ8cD5Qcm92aWRlIGlubGluZSBjb25maWd1cmF0aW9uIGxpa2U6PC9wPlxuXHRcdDxwcmU+Jmx0O2lucHV0IHR5cGU9XCJ0ZXh0XCIgZGF0YS10aW1lRW50cnk9XCJuYW1lOiAndmFsdWUnXCI+PC9wcmU+XG5cdCBcdEBtb2R1bGUgVGltZUVudHJ5XG5cdFx0QGF1Z21lbnRzIEpRUGx1Z2luXG5cdFx0QGV4YW1wbGUgJChzZWxlY3RvcikudGltZUVudHJ5KClcbiAkKHNlbGVjdG9yKS50aW1lRW50cnkoe3Nob3dTZWNvbmRzOiB0cnVlLCBtaW5UaW1lOiBuZXcgRGF0ZSgwLCAwLCAwLCAxMiwgMCwgMCl9KSAqL1xuXHQkLkpRUGx1Z2luLmNyZWF0ZVBsdWdpbih7XG5cdFxuXHRcdC8qKiBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luLiAqL1xuXHRcdG5hbWU6IHBsdWdpbk5hbWUsXG5cdFx0XHRcblx0XHQvKiogVGltZSBlbnRyeSBiZWZvcmUgc2hvdyBjYWxsYmFjay5cblx0XHRcdFRyaWdnZXJlZCB3aGVuIHRoZSBpbnB1dCBmaWVsZCBpcyBmb2N1c3NlZC5cblx0XHRcdEBjYWxsYmFjayBiZWZvcmVTaG93Q2FsbGJhY2tcblx0XHRcdEBwYXJhbSBpbnB1dCB7RWxlbWVudH0gVGhlIGN1cnJlbnQgaW5wdXQgZmllbGQuXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IEFueSBjaGFuZ2VzIHRvIHRoZSBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBleGFtcGxlIGJlZm9yZVNob3c6IGZ1bmN0aW9uKGlucHV0KSB7XG5cdC8vIENyb3NzLXBvcHVsYXRlIG1pbmltdW0vbWF4aW11bSB0aW1lcyBmb3IgYSByYW5nZVxuIFx0cmV0dXJuIHttaW5UaW1lOiAoaW5wdXQuaWQgPT09ICd0aW1lVG8nID9cbiBcdFx0JCgnI3RpbWVGcm9tJykudGltZUVudHJ5KCdnZXRUaW1lJykgOiBudWxsKSwgXG4gXHRcdG1heFRpbWU6IChpbnB1dC5pZCA9PT0gJ3RpbWVGcm9tJyA/XG4gXHRcdCQoJyN0aW1lVG8nKS50aW1lRW50cnkoJ2dldFRpbWUnKSA6IG51bGwpfTtcbiB9ICovXG5cdFx0XHRcblx0XHQvKiogVGltZSBlbnRyeSBiZWZvcmUgc2V0IHRpbWUgY2FsbGJhY2suXG5cdFx0XHRUcmlnZ2VyZWQgd2hlbiB0aGUgaW5wdXQgZmllbGQgdmFsdWUgaXMgdG8gYmUgY2hhbmdlZC5cblx0XHRcdEBjYWxsYmFjayBiZWZvcmVTZXRUaW1lQ2FsbGJhY2tcblx0XHRcdEBwYXJhbSBjdXJyZW50IHtzdHJpbmd9IFRoZSBjdXJyZW50IHRpbWUgdmFsdWUgZW50ZXJlZC5cblx0XHRcdEBwYXJhbSBuZXdUaW1lIHtzdHJpbmd9IFRoZSBuZXcgdGltZSB2YWx1ZSB0byB1c2UuXG5cdFx0XHRAcGFyYW0gbWluVGltZSB7RGF0ZX0gVGhlIG1pbmltdW0gdGltZSB2YWx1ZSBhbGxvd2VkLlxuXHRcdFx0QHBhcmFtIG1heFRpbWUge0RhdGV9IFRoZSBtYXhpbXVtIHRpbWUgdmFsdWUgYWxsb3dlZC5cblx0XHRcdEByZXR1cm4ge0RhdGV9IFRoZSBhY3R1YWwgdGltZSB2YWx1ZSB0byBzZXQuXG5cdFx0XHRAZXhhbXBsZSBiZWZvcmVTZXRUaW1lOiBmdW5jdGlvbihvbGRUaW1lLCBuZXdUaW1lLCBtaW5UaW1lLCBtYXhUaW1lKSB7XG4gXHR2YXIgaW5jcmVtZW50ID0gKG5ld1RpbWUgLSAob2xkVGltZSB8fCBuZXdUaW1lKSkgPiAwO1xuIFx0aWYgKG5ld1RpbWUuZ2V0TWludXRlcygpID4gMzApIHsgLy8gRmlyc3QgaGFsZiBvZiBob3VyIG9ubHlcbiBcdFx0bmV3VGltZS5zZXRNaW51dGVzKGluY3JlbWVudCA/IDAgOiAzMCk7XG4gXHRcdG5ld1RpbWUuc2V0SG91cnMobmV3VGltZS5nZXRIb3VycygpICsgKGluY3JlbWVudCA/IDEgOiAwKSk7XG4gXHR9XG4gXHRyZXR1cm4gbmV3VGltZTtcbiB9ICovXG5cdFx0XHRcblx0XHQvKiogRGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIHBsdWdpbi5cblx0XHRcdEBwcm9wZXJ0eSBbYXBwZW5kVGV4dD0nJ10ge3N0cmluZ30gRGlzcGxheSB0ZXh0IGZvbGxvd2luZyB0aGUgaW5wdXQgYm94LCBlLmcuIHNob3dpbmcgdGhlIGZvcm1hdC5cblx0XHRcdEBwcm9wZXJ0eSBbc2hvd1NlY29uZHM9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBzaG93IHNlY29uZHMgYXMgd2VsbCxcblx0XHRcdFx0XHRcdDxjb2RlPmZhbHNlPC9jb2RlPiBmb3IgaG91cnMvbWludXRlcyBvbmx5LlxuXHRcdFx0QHByb3BlcnR5IFt1bmxpbWl0ZWRIb3Vycz1mYWxzZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGFsbG93IGVudHJ5IG9mIG1vcmUgdGhhbiAyNCBob3Vycyxcblx0XHRcdFx0XHRcdDxjb2RlPmZhbHNlPC9jb2RlPiB0byByZXN0cmljdCB0byBvbmUgZGF5LlxuXHRcdFx0QHByb3BlcnR5IFt0aW1lU3RlcHM9WzEsMSwxXV0ge251bWJlcltdfSBTdGVwcyBmb3IgZWFjaCBvZiBob3Vycy9taW51dGVzL3NlY29uZHMgd2hlbiBpbmNyZW1lbnRpbmcvZGVjcmVtZW50aW5nLlxuXHRcdFx0QHByb3BlcnR5IFtpbml0aWFsRmllbGQ9bnVsbF0ge251bWJlcn0gVGhlIGZpZWxkIHRvIGhpZ2hsaWdodCBpbml0aWFsbHkgKDAgPSBob3VycywgMSA9IG1pbnV0ZXMsIC4uLiksXG5cdFx0XHRcdFx0XHRvciA8Y29kZT5udWxsPC9jb2RlPiBmb3Igbm9uZS5cblx0XHRcdEBwcm9wZXJ0eSBbbm9TZXBhcmF0b3JFbnRyeT1mYWxzZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIG1vdmUgdG8gbmV4dCBzdWItZmllbGQgYWZ0ZXIgdHdvIGRpZ2l0cyBlbnRyeS5cblx0XHRcdEBwcm9wZXJ0eSBbdGFiVG9FeGl0PWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gZm9yIHRhYiBrZXkgdG8gZ28gdG8gbmV4dCBlbGVtZW50LFxuXHRcdFx0XHRcdFx0PGNvZGU+ZmFsc2U8L2NvZGU+IGZvciB0YWIga2V5IHRvIHN0ZXAgdGhyb3VnaCBpbnRlcm5hbCBmaWVsZHMuXG5cdFx0XHRAcHJvcGVydHkgW3VzZU1vdXNlV2hlZWw9dHJ1ZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIHVzZSBtb3VzZSB3aGVlbCBmb3IgaW5jcmVtZW50L2RlY3JlbWVudCBpZiBwb3NzaWJsZSxcblx0XHRcdFx0XHRcdDxjb2RlPmZhbHNlPC9jb2RlPiB0byBuZXZlciB1c2UgaXQuXG5cdFx0XHRAcHJvcGVydHkgW2RlZmF1bHRUaW1lPW51bGxdIHtEYXRlfG51bWJlcnxzdHJpbmd9IFRoZSB0aW1lIHRvIHVzZSBpZiBub25lIGhhcyBiZWVuIHNldCxcblx0XHRcdFx0XHRcdG9yIDxjb2RlPm51bGw8L2NvZGU+IGZvciBub3cuIFNwZWNpZnkgYXMgYSA8Y29kZT5EYXRlPC9jb2RlPiBvYmplY3QsIGFzIGEgbnVtYmVyIG9mIHNlY29uZHNcblx0XHRcdFx0XHRcdG9mZnNldCBmcm9tIG5vdywgb3IgYXMgYSBzdHJpbmcgb2Ygb2Zmc2V0cyBmcm9tIG5vdywgdXNpbmcgJ0gnIGZvciBob3Vycyxcblx0XHRcdFx0XHRcdCdNJyBmb3IgbWludXRlcywgJ1MnIGZvciBzZWNvbmRzLlxuXHRcdFx0QHByb3BlcnR5IFttaW5UaW1lPW51bGxdIHtEYXRlfG51bWJlcnxzdHJpbmd8bnVtYmVyW119IFRoZSBlYXJsaWVzdCBzZWxlY3RhYmxlIHRpbWUsXG5cdFx0XHRcdFx0XHRvciA8Y29kZT5udWxsPC9jb2RlPiBmb3Igbm8gbGltaXQuIFNlZSA8Y29kZT5kZWZhdWx0VGltZTwvY29kZT4gZm9yIHBvc3NpYmxlIGZvcm1hdHMsXG5cdFx0XHRcdFx0XHR1c2UgYXJyYXkgb2YgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgZm9yIDxjb2RlPnVubGltaXRlZEhvdXJzPC9jb2RlPi5cblx0XHRcdEBwcm9wZXJ0eSBbbWF4VGltZT1udWxsXSB7RGF0ZXxudW1iZXJ8c3RyaW5nfG51bWJlcltdfSBUaGUgbGF0ZXN0IHNlbGVjdGFibGUgdGltZSxcblx0XHRcdFx0XHRcdG9yIDxjb2RlPm51bGw8L2NvZGU+IGZvciBubyBsaW1pdC4gU2VlIDxjb2RlPmRlZmF1bHRUaW1lPC9jb2RlPiBmb3IgcG9zc2libGUgZm9ybWF0cyxcblx0XHRcdFx0XHRcdHVzZSBhcnJheSBvZiBob3VycywgbWludXRlcywgc2Vjb25kcyBmb3IgPGNvZGU+dW5saW1pdGVkSG91cnM8L2NvZGU+LlxuXHRcdFx0QHByb3BlcnR5IFtzcGlubmVySW1hZ2U9J3NwaW5uZXJEZWZhdWx0LnBuZyddIHtzdHJpbmd9IFRoZSBVUkwgb2YgdGhlIGltYWdlcyB0byB1c2UgZm9yIHRoZSB0aW1lIHNwaW5uZXIgLVxuXHRcdFx0XHRcdFx0c2V2ZW4gaW1hZ2VzIHBhY2tlZCBob3Jpem9udGFsbHkgZm9yIG5vcm1hbCwgZWFjaCBidXR0b24gcHJlc3NlZFxuXHRcdFx0XHRcdFx0KGNlbnRyZSwgcHJldmlvdXMsIG5leHQsIGluY3JlbWVudCwgZGVjcmVtZW50KSwgYW5kIGRpc2FibGVkLlxuXHRcdFx0QHByb3BlcnR5IFtzcGlubmVyU2l6ZT1bMjAsMjAsOF1dIHtudW1iZXJbXX0gVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHNwaW5uZXIgaW1hZ2UsXG5cdFx0XHRcdFx0XHRhbmQgc2l6ZSBvZiBjZW50cmUgYnV0dG9uIGZvciBjdXJyZW50IHRpbWUuXG5cdFx0XHRAcHJvcGVydHkgW3NwaW5uZXJCaWdJbWFnZT0nJ10ge3N0cmluZ30gVGhlIFVSTCBvZiB0aGUgaW1hZ2VzIHRvIHVzZSBmb3IgdGhlIGV4cGFuZGVkIHRpbWUgc3Bpbm5lciAtXG5cdFx0XHRcdFx0XHRzZXZlbiBpbWFnZXMgcGFja2VkIGhvcml6b250YWxseSBmb3Igbm9ybWFsLCBlYWNoIGJ1dHRvbiBwcmVzc2VkXG5cdFx0XHRcdFx0XHQoY2VudHJlLCBwcmV2aW91cywgbmV4dCwgaW5jcmVtZW50LCBkZWNyZW1lbnQpLCBhbmQgZGlzYWJsZWQuXG5cdFx0XHRAcHJvcGVydHkgW3NwaW5uZXJCaWdTaXplPVs0MCw0MCwxNl1dIHtudW1iZXJbXX0gVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGV4cGFuZGVkIHNwaW5uZXIgaW1hZ2UsXG5cdFx0XHRcdFx0XHRhbmQgc2l6ZSBvZiBjZW50cmUgYnV0dG9uIGZvciBjdXJyZW50IHRpbWUuXG5cdFx0XHRAcHJvcGVydHkgW3NwaW5uZXJJbmNEZWNPbmx5PWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gZm9yIGluY3JlbWVudC9kZWNyZW1lbnQgYnV0dG9ucyBvbmx5LCA8Y29kZT5mYWxzZTwvY29kZT4gZm9yIGFsbC5cblx0XHRcdEBwcm9wZXJ0eSBbc3Bpbm5lclJlcGVhdD1bNTAwLDI1MF1dIHtudW1iZXJbXX0gSW5pdGlhbCBhbmQgc3Vic2VxdWVudCB3YWl0cyBpbiBtaWxsaXNlY29uZHNcblx0XHRcdFx0XHRcdGZvciByZXBlYXRzIG9uIHRoZSBzcGlubmVyIGJ1dHRvbnMuXG5cdFx0XHRAcHJvcGVydHkgW2JlZm9yZVNob3c9bnVsbF0ge2JlZm9yZVNob3dDYWxsYmFja30gRnVuY3Rpb24gdGhhdCB0YWtlcyBhbiBpbnB1dCBmaWVsZCBhbmRcblx0XHRcdFx0XHRcdHJldHVybnMgYSBzZXQgb2YgY3VzdG9tIHNldHRpbmdzIGZvciB0aGUgdGltZSBlbnRyeS5cblx0XHRcdEBwcm9wZXJ0eSBbYmVmb3JlU2V0VGltZT1udWxsXSB7YmVmb3JlU2V0VGltZUNhbGxiYWNrfSBGdW5jdGlvbiB0aGF0IHJ1bnMgYmVmb3JlIHVwZGF0aW5nIHRoZSB0aW1lLFxuXHRcdFx0XHRcdFx0dGFrZXMgdGhlIG9sZCBhbmQgbmV3IHRpbWVzLCBhbmQgbWluaW11bSBhbmQgbWF4aW11bSB0aW1lcyBhcyBwYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0YW5kIHJldHVybnMgYW4gYWRqdXN0ZWQgdGltZSBpZiBuZWNlc3NhcnkuXG5cdFx0XHRAZXhhbXBsZSB7ZGVmYXVsdFRpbWU6IG5ldyBEYXRlKDAsIDAsIDAsIDgsIDMwLCAwKSwgbWluVGltZTogLTMwMCwgbWF4VGltZTogJysySCArMzBNJ30gKi9cblx0XHRkZWZhdWx0T3B0aW9uczoge1xuXHRcdFx0YXBwZW5kVGV4dDogJycsXG5cdFx0XHRzaG93U2Vjb25kczogZmFsc2UsXG5cdFx0XHR1bmxpbWl0ZWRIb3VyczogZmFsc2UsXG5cdFx0XHR0aW1lU3RlcHM6IFsxLCAxLCAxXSxcblx0XHRcdGluaXRpYWxGaWVsZDogbnVsbCxcblx0XHRcdG5vU2VwYXJhdG9yRW50cnk6IGZhbHNlLFxuXHRcdFx0dGFiVG9FeGl0OiBmYWxzZSxcblx0XHRcdHVzZU1vdXNlV2hlZWw6IHRydWUsXG5cdFx0XHRkZWZhdWx0VGltZTogbnVsbCxcblx0XHRcdG1pblRpbWU6IG51bGwsXG5cdFx0XHRtYXhUaW1lOiBudWxsLFxuXHRcdFx0c3Bpbm5lckltYWdlOiAnc3Bpbm5lckRlZmF1bHQucG5nJyxcblx0XHRcdHNwaW5uZXJTaXplOiBbMjAsIDIwLCA4XSxcblx0XHRcdHNwaW5uZXJCaWdJbWFnZTogJycsXG5cdFx0XHRzcGlubmVyQmlnU2l6ZTogWzQwLCA0MCwgMTZdLFxuXHRcdFx0c3Bpbm5lckluY0RlY09ubHk6IGZhbHNlLFxuXHRcdFx0c3Bpbm5lclJlcGVhdDogWzUwMCwgMjUwXSxcblx0XHRcdGJlZm9yZVNob3c6IG51bGwsXG5cdFx0XHRiZWZvcmVTZXRUaW1lOiBudWxsXG5cdFx0fSxcblxuXHRcdC8qKiBMb2NhbGlzYXRpb25zIGZvciB0aGUgcGx1Z2luLlxuXHRcdFx0RW50cmllcyBhcmUgb2JqZWN0cyBpbmRleGVkIGJ5IHRoZSBsYW5ndWFnZSBjb2RlICgnJyBiZWluZyB0aGUgZGVmYXVsdCBVUy9FbmdsaXNoKS5cblx0XHRcdEVhY2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMuXG5cdFx0XHRAcHJvcGVydHkgW3Nob3cyNEhvdXJzPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gdXNlIDI0IGhvdXIgdGltZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IGZvciAxMiBob3VyIChBTS9QTSkuXG5cdFx0XHRAcHJvcGVydHkgW3NlcGFyYXRvcj0nOiddIHtzdHJpbmd9IFRoZSBzZXBhcmF0b3IgYmV0d2VlbiB0aW1lIGZpZWxkcy5cblx0XHRcdEBwcm9wZXJ0eSBbYW1wbVByZWZpeD0nJ10ge3N0cmluZ30gVGhlIHNlcGFyYXRvciBiZWZvcmUgdGhlIEFNL1BNIHRleHQuXG5cdFx0XHRAcHJvcGVydHkgW2FtcG1OYW1lcz1bJ0FNJywnUE0nXV0ge3N0cmluZ1tdfSBOYW1lcyBvZiBtb3JuaW5nL2V2ZW5pbmcgbWFya2Vycy5cblx0XHRcdEBwcm9wZXJ0eSBbc3Bpbm5lclRleHRzPVsnTm93JywnUHJldmlvdXMmbmJzcDtmaWVsZCcsJ05leHQmbmJzcDtmaWVsZCcsJ0luY3JlbWVudCcsJ0RlY3JlbWVudCddXSB7c3RyaW5nW119XG5cdFx0XHRcdFx0XHRUaGUgcG9wdXAgdGV4dHMgZm9yIHRoZSBzcGlubmVyIGltYWdlIGFyZWFzLiAqL1xuXHRcdHJlZ2lvbmFsT3B0aW9uczogeyAvLyBBdmFpbGFibGUgcmVnaW9uYWwgc2V0dGluZ3MsIGluZGV4ZWQgYnkgbGFuZ3VhZ2UvY291bnRyeSBjb2RlXG5cdFx0XHQnJzogeyAvLyBEZWZhdWx0IHJlZ2lvbmFsIHNldHRpbmdzIC0gRW5nbGlzaC9VU1xuXHRcdFx0XHRzaG93MjRIb3VyczogZmFsc2UsXG5cdFx0XHRcdHNlcGFyYXRvcjogJzonLFxuXHRcdFx0XHRhbXBtUHJlZml4OiAnJyxcblx0XHRcdFx0YW1wbU5hbWVzOiBbJ0FNJywgJ1BNJ10sXG5cdFx0XHRcdHNwaW5uZXJUZXh0czogWydOb3cnLCAnUHJldmlvdXMgZmllbGQnLCAnTmV4dCBmaWVsZCcsICdJbmNyZW1lbnQnLCAnRGVjcmVtZW50J11cblx0XHRcdH1cblx0XHR9LFxuXHRcdFxuXHRcdF9nZXR0ZXJzOiBbJ2dldE9mZnNldCcsICdnZXRUaW1lJywgJ2lzRGlzYWJsZWQnXSxcblxuXHRcdF9hcHBlbmRDbGFzczogcGx1Z2luTmFtZSArICctYXBwZW5kJywgLy8gQ2xhc3MgbmFtZSBmb3IgdGhlIGFwcGVuZGVkIGNvbnRlbnRcblx0XHRfY29udHJvbENsYXNzOiBwbHVnaW5OYW1lICsgJy1jb250cm9sJywgLy8gQ2xhc3MgbmFtZSBmb3IgdGhlIGRhdGUgZW50cnkgY29udHJvbFxuXHRcdF9leHBhbmRDbGFzczogcGx1Z2luTmFtZSArICctZXhwYW5kJywgLy8gQ2xhc3MgbmFtZSBmb3IgdGhlIGV4cGFuZGVkIHNwaW5uZXJcblxuXHRcdF9kaXNhYmxlZElucHV0czogW10sIC8vIExpc3Qgb2YgdGltZSBpbnB1dHMgdGhhdCBoYXZlIGJlZW4gZGlzYWJsZWRcblxuXHRcdF9pbnN0U2V0dGluZ3M6IGZ1bmN0aW9uKGVsZW0sIG9wdGlvbnMpIHtcblx0XHRcdHJldHVybiB7X2ZpZWxkOiAwLCBfc2VsZWN0ZWRIb3VyOiAwLCBfc2VsZWN0ZWRNaW51dGU6IDAsIF9zZWxlY3RlZFNlY29uZDogMH07XG5cdFx0fSxcblx0XHRcblx0XHRfcG9zdEF0dGFjaDogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xuXHRcdFx0ZWxlbS5vbignZm9jdXMuJyArIGluc3QubmFtZSwgdGhpcy5fZG9Gb2N1cykuXG5cdFx0XHRcdG9uKCdibHVyLicgKyBpbnN0Lm5hbWUsIHRoaXMuX2RvQmx1cikuXG5cdFx0XHRcdG9uKCdjbGljay4nICsgaW5zdC5uYW1lLCB0aGlzLl9kb0NsaWNrKS5cblx0XHRcdFx0b24oJ2tleWRvd24uJyArIGluc3QubmFtZSwgdGhpcy5fZG9LZXlEb3duKS5cblx0XHRcdFx0b24oJ2tleXByZXNzLicgKyBpbnN0Lm5hbWUsIHRoaXMuX2RvS2V5UHJlc3MpLlxuXHRcdFx0XHRvbigncGFzdGUuJyArIGluc3QubmFtZSwgZnVuY3Rpb24oZXZlbnQpIHsgLy8gQ2hlY2sgcGFzdGVzXG5cdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHsgcGx1Z2luLl9wYXJzZVRpbWUoaW5zdCk7IH0sIDEpO1xuXHRcdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0X29wdGlvbnNDaGFuZ2VkOiBmdW5jdGlvbihlbGVtLCBpbnN0LCBvcHRpb25zKSB7XG5cdFx0XHR2YXIgY3VycmVudFRpbWUgPSB0aGlzLl9leHRyYWN0VGltZShpbnN0KTtcblx0XHRcdCQuZXh0ZW5kKGluc3Qub3B0aW9ucywgb3B0aW9ucyk7XG5cdFx0XHRpbnN0Lm9wdGlvbnMuc2hvdzI0SG91cnMgPSBpbnN0Lm9wdGlvbnMuc2hvdzI0SG91cnMgfHwgaW5zdC5vcHRpb25zLnVubGltaXRlZEhvdXJzO1xuXHRcdFx0aW5zdC5fZmllbGQgPSAwO1xuXHRcdFx0aWYgKGN1cnJlbnRUaW1lKSB7XG5cdFx0XHRcdHRoaXMuX3NldFRpbWUoaW5zdCwgbmV3IERhdGUoMCwgMCwgMCwgY3VycmVudFRpbWVbMF0sIGN1cnJlbnRUaW1lWzFdLCBjdXJyZW50VGltZVsyXSkpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gUmVtb3ZlIHN0dWZmIGRlcGVuZGVudCBvbiBvbGQgc2V0dGluZ3Ncblx0XHRcdGVsZW0ubmV4dCgnc3Bhbi4nICsgdGhpcy5fYXBwZW5kQ2xhc3MpLnJlbW92ZSgpO1xuXHRcdFx0ZWxlbS5wYXJlbnQoKS5maW5kKCdzcGFuLicgKyB0aGlzLl9jb250cm9sQ2xhc3MpLnJlbW92ZSgpO1xuXHRcdFx0aWYgKCQuZm4ubW91c2V3aGVlbCkge1xuXHRcdFx0XHRlbGVtLnVubW91c2V3aGVlbCgpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQW5kIHJlLWFkZCBpZiByZXF1ZXN0ZWRcblx0XHRcdHZhciBzcGlubmVyID0gKCFpbnN0Lm9wdGlvbnMuc3Bpbm5lckltYWdlID8gbnVsbCA6XG5cdFx0XHRcdCQoJzxzcGFuIGNsYXNzPVwiJyArIHRoaXMuX2NvbnRyb2xDbGFzcyArICdcIiBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9jazsgJyArXG5cdFx0XHRcdCdiYWNrZ3JvdW5kOiB1cmwoXFwnJyArIGluc3Qub3B0aW9ucy5zcGlubmVySW1hZ2UgKyAnXFwnKSAwIDAgbm8tcmVwZWF0OyB3aWR0aDogJyArIFxuXHRcdFx0XHRpbnN0Lm9wdGlvbnMuc3Bpbm5lclNpemVbMF0gKyAncHg7IGhlaWdodDogJyArIGluc3Qub3B0aW9ucy5zcGlubmVyU2l6ZVsxXSArICdweDtcIj48L3NwYW4+JykpO1xuXHRcdFx0ZWxlbS5hZnRlcihpbnN0Lm9wdGlvbnMuYXBwZW5kVGV4dCA/ICc8c3BhbiBjbGFzcz1cIicgKyB0aGlzLl9hcHBlbmRDbGFzcyArICdcIj4nICtcblx0XHRcdFx0aW5zdC5vcHRpb25zLmFwcGVuZFRleHQgKyAnPC9zcGFuPicgOiAnJykuYWZ0ZXIoc3Bpbm5lciB8fCAnJyk7XG5cdFx0XHQvLyBBbGxvdyBtb3VzZSB3aGVlbCB1c2FnZVxuXHRcdFx0aWYgKGluc3Qub3B0aW9ucy51c2VNb3VzZVdoZWVsICYmICQuZm4ubW91c2V3aGVlbCkge1xuXHRcdFx0XHRlbGVtLm1vdXNld2hlZWwodGhpcy5fZG9Nb3VzZVdoZWVsKTtcblx0XHRcdH1cblx0XHRcdGlmIChzcGlubmVyKSB7XG5cdFx0XHRcdHNwaW5uZXIubW91c2Vkb3duKHRoaXMuX2hhbmRsZVNwaW5uZXIpLm1vdXNldXAodGhpcy5fZW5kU3Bpbm5lcikuXG5cdFx0XHRcdFx0bW91c2VvdmVyKHRoaXMuX2V4cGFuZFNwaW5uZXIpLm1vdXNlb3V0KHRoaXMuX2VuZFNwaW5uZXIpLlxuXHRcdFx0XHRcdG1vdXNlbW92ZSh0aGlzLl9kZXNjcmliZVNwaW5uZXIpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogRW5hYmxlIGEgdGltZSBlbnRyeSBpbnB1dCBhbmQgYW55IGFzc29jaWF0ZWQgc3Bpbm5lci5cblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgc2luZ2xlIGlucHV0IGZpZWxkLlxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikudGltZUVudHJ5KCdlbmFibGUnKSAqL1xuXHRcdGVuYWJsZTogZnVuY3Rpb24oZWxlbSkge1xuXHRcdFx0dGhpcy5fZW5hYmxlRGlzYWJsZShlbGVtLCBmYWxzZSk7XG5cdFx0fSxcblxuXHRcdC8qKiBEaXNhYmxlIGEgdGltZSBlbnRyeSBpbnB1dCBhbmQgYW55IGFzc29jaWF0ZWQgc3Bpbm5lci5cblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgc2luZ2xlIGlucHV0IGZpZWxkLlxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikudGltZUVudHJ5KCdkaXNhYmxlJykgKi9cblx0XHRkaXNhYmxlOiBmdW5jdGlvbihlbGVtKSB7XG5cdFx0XHR0aGlzLl9lbmFibGVEaXNhYmxlKGVsZW0sIHRydWUpO1xuXHRcdH0sXG5cblx0XHQvKiogRW5hYmxlIG9yIGRpc2FibGUgYSB0aW1lIGVudHJ5IGlucHV0IGFuZCBhbnkgYXNzb2NpYXRlZCBzcGlubmVyLlxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgc2luZ2xlIGlucHV0IGZpZWxkLlxuXHRcdFx0QHBhcmFtIGRpc2FibGUge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGRpc2FibGUsIDxjb2RlPmZhbHNlPC9jb2RlPiB0byBlbmFibGUuICovXG5cdFx0X2VuYWJsZURpc2FibGU6IGZ1bmN0aW9uKGVsZW0sIGRpc2FibGUpIHtcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdGlmICghaW5zdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRlbGVtLmRpc2FibGVkID0gZGlzYWJsZTtcblx0XHRcdGlmIChlbGVtLm5leHRTaWJsaW5nICYmIGVsZW0ubmV4dFNpYmxpbmcubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3NwYW4nKSB7XG5cdFx0XHRcdHRoaXMuX2NoYW5nZVNwaW5uZXIoaW5zdCwgZWxlbS5uZXh0U2libGluZywgKGRpc2FibGUgPyA1IDogLTEpKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2Rpc2FibGVkSW5wdXRzID0gJC5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsXG5cdFx0XHRcdGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiAodmFsdWUgPT09IGVsZW0gPyBudWxsIDogdmFsdWUpOyB9KTsgLy8gRGVsZXRlIGVudHJ5XG5cdFx0XHRpZiAoZGlzYWJsZSkge1xuXHRcdFx0XHR0aGlzLl9kaXNhYmxlZElucHV0cy5wdXNoKGVsZW0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogQ2hlY2sgd2hldGhlciBhbiBpbnB1dCBmaWVsZCBoYXMgYmVlbiBkaXNhYmxlZC5cblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgaW5wdXQgZmllbGQgdG8gY2hlY2suXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGZpZWxkIGhhcyBiZWVuIGRpc2FibGVkLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgaXQgaXMgZW5hYmxlZC5cblx0XHRcdEBleGFtcGxlIGlmICgkKHNlbGVjdG9yKS5kYXRlRW50cnkoJ2lzRGlzYWJsZWQnKSkgey4uLn0gKi9cblx0XHRpc0Rpc2FibGVkOiBmdW5jdGlvbihlbGVtKSB7XG5cdFx0XHRyZXR1cm4gJC5pbkFycmF5KGVsZW0sIHRoaXMuX2Rpc2FibGVkSW5wdXRzKSA+IC0xO1xuXHRcdH0sXG5cblx0XHRfcHJlRGVzdHJveTogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xuXHRcdFx0ZWxlbSA9ICQoZWxlbSkub2ZmKCcuJyArIHBsdWdpbk5hbWUpO1xuXHRcdFx0aWYgKCQuZm4ubW91c2V3aGVlbCkge1xuXHRcdFx0XHRlbGVtLnVubW91c2V3aGVlbCgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fZGlzYWJsZWRJbnB1dHMgPSAkLm1hcCh0aGlzLl9kaXNhYmxlZElucHV0cyxcblx0XHRcdFx0ZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuICh2YWx1ZSA9PT0gZWxlbVswXSA/IG51bGwgOiB2YWx1ZSk7IH0pOyAvLyBEZWxldGUgZW50cnlcblx0XHRcdGVsZW0uc2libGluZ3MoJy4nICsgdGhpcy5fYXBwZW5kQ2xhc3MgKyAnLC4nICsgdGhpcy5fY29udHJvbENsYXNzKS5yZW1vdmUoKTtcblx0XHR9LFxuXG5cdFx0LyoqIEluaXRpYWxpc2UgdGhlIGN1cnJlbnQgdGltZSBmb3IgYSB0aW1lIGVudHJ5IGlucHV0IGZpZWxkLlxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBpbnB1dCBmaWVsZCB0byB1cGRhdGUuXG5cdFx0XHRAcGFyYW0gdGltZSB7RGF0ZXxudW1iZXJ8c3RyaW5nfSBUaGUgbmV3IHRpbWUgb3Igb2Zmc2V0IG9yIDxjb2RlPm51bGw8L2NvZGU+IHRvIGNsZWFyLlxuXHRcdFx0XHRcdEFuIGFjdHVhbCB0aW1lIG9yIG9mZnNldCBpbiBzZWNvbmRzIGZyb20gbm93IG9yIHVuaXRzIGFuZCBwZXJpb2RzIG9mIG9mZnNldHMgZnJvbSBub3cuXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS50aW1lRW50cnkoJ3NldFRpbWUnLCBuZXcgRGF0ZSgwLCAwLCAwLCAxMSwgMjIsIDMzKSlcbiAkKHNlbGVjdG9yKS50aW1lRW50cnkoJ3NldFRpbWUnLCArMzAwKVxuICQoc2VsZWN0b3IpLnRpbWVFbnRyeSgnc2V0VGltZScsICcrMUggKzMwTScpXG4gJChzZWxlY3RvcikudGltZUVudHJ5KCdzZXRUaW1lJywgbnVsbCkgKi9cblx0XHRzZXRUaW1lOiBmdW5jdGlvbihlbGVtLCB0aW1lKSB7XG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XG5cdFx0XHRpZiAoaW5zdCkge1xuXHRcdFx0XHRpZiAodGltZSA9PT0gbnVsbCB8fCB0aW1lID09PSAnJykge1xuXHRcdFx0XHRcdCQoZWxlbSkudmFsKCcnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl9zZXRUaW1lKGluc3QsIHRpbWUgPyAoJC5pc0FycmF5KHRpbWUpID8gdGltZSA6XG5cdFx0XHRcdFx0XHQodHlwZW9mIHRpbWUgPT09ICdvYmplY3QnID8gbmV3IERhdGUodGltZS5nZXRUaW1lKCkpIDogdGltZSkpIDogbnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBjdXJyZW50IHRpbWUgZm9yIGEgdGltZSBlbnRyeSBpbnB1dCBmaWVsZC5cblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgaW5wdXQgZmllbGQgdG8gdXBkYXRlLlxuXHRcdFx0QHJldHVybiB7RGF0ZX0gVGhlIGN1cnJlbnQgdGltZSBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBub25lLlxuXHRcdFx0QGV4YW1wbGUgdmFyIHRpbWUgPSAkKHNlbGVjdG9yKS50aW1lRW50cnkoJ2dldFRpbWUnKSAqL1xuXHRcdGdldFRpbWU6IGZ1bmN0aW9uKGVsZW0pIHtcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdHZhciBjdXJyZW50VGltZSA9IChpbnN0ID8gdGhpcy5fZXh0cmFjdFRpbWUoaW5zdCkgOiBudWxsKTtcblx0XHRcdHJldHVybiAoIWN1cnJlbnRUaW1lID8gbnVsbCA6XG5cdFx0XHRcdG5ldyBEYXRlKDAsIDAsIDAsIGN1cnJlbnRUaW1lWzBdLCBjdXJyZW50VGltZVsxXSwgY3VycmVudFRpbWVbMl0pKTtcblx0XHR9LFxuXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBtaWxsaXNlY29uZCBvZmZzZXQgZm9yIHRoZSBjdXJyZW50IHRpbWUuXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGlucHV0IGZpZWxkIHRvIGV4YW1pbmUuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSB0aW1lIGFzIG1pbGxpc2Vjb25kcyBvZmZzZXQgb3IgemVybyBpZiBub25lLlxuXHRcdFx0QGV4YW1wbGUgdmFyIG9mZnNldCA9ICQoc2VsZWN0b3IpLnRpbWVFbnRyeSgnZ2V0T2Zmc2V0JykgKi9cblx0XHRnZXRPZmZzZXQ6IGZ1bmN0aW9uKGVsZW0pIHtcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcblx0XHRcdHZhciBjdXJyZW50VGltZSA9IChpbnN0ID8gdGhpcy5fZXh0cmFjdFRpbWUoaW5zdCkgOiBudWxsKTtcblx0XHRcdHJldHVybiAoIWN1cnJlbnRUaW1lID8gMCA6XG5cdFx0XHRcdChjdXJyZW50VGltZVswXSAqIDM2MDAgKyBjdXJyZW50VGltZVsxXSAqIDYwICsgY3VycmVudFRpbWVbMl0pICogMTAwMCk7XG5cdFx0fSxcblxuXHRcdC8qKiBJbml0aWFsaXNlIGRhdGUgZW50cnkuXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR8RXZlbnR9IFRoZSBpbnB1dCBmaWVsZCBvciB0aGUgZm9jdXMgZXZlbnQuICovXG5cdFx0X2RvRm9jdXM6IGZ1bmN0aW9uKGVsZW0pIHtcblx0XHRcdHZhciBpbnB1dCA9IChlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyA/IGVsZW0gOiB0aGlzKTtcblx0XHRcdGlmIChwbHVnaW4uX2xhc3RJbnB1dCA9PT0gaW5wdXQgfHwgcGx1Z2luLmlzRGlzYWJsZWQoaW5wdXQpKSB7XG5cdFx0XHRcdHBsdWdpbi5fZm9jdXNzZWQgPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoaW5wdXQpO1xuXHRcdFx0cGx1Z2luLl9mb2N1c3NlZCA9IHRydWU7XG5cdFx0XHRwbHVnaW4uX2xhc3RJbnB1dCA9IGlucHV0O1xuXHRcdFx0cGx1Z2luLl9ibHVycmVkSW5wdXQgPSBudWxsO1xuXHRcdFx0JC5leHRlbmQoaW5zdC5vcHRpb25zLCAoJC5pc0Z1bmN0aW9uKGluc3Qub3B0aW9ucy5iZWZvcmVTaG93KSA/XG5cdFx0XHRcdGluc3Qub3B0aW9ucy5iZWZvcmVTaG93LmFwcGx5KGlucHV0LCBbaW5wdXRdKSA6IHt9KSk7XG5cdFx0XHRcdHBsdWdpbi5fcGFyc2VUaW1lKGluc3QsIGVsZW0ubm9kZU5hbWUgPyBudWxsIDogZWxlbSk7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBwbHVnaW4uX3Nob3dGaWVsZChpbnN0KTsgfSwgMTApO1xuXHRcdH0sXG5cblx0XHQvKiogTm90ZSB0aGF0IHRoZSBmaWVsZCBoYXMgYmVlbiBleGl0ZWQuXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIGJsdXIgZXZlbnQuICovXG5cdFx0X2RvQmx1cjogZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdHBsdWdpbi5fYmx1cnJlZElucHV0ID0gcGx1Z2luLl9sYXN0SW5wdXQ7XG5cdFx0XHRwbHVnaW4uX2xhc3RJbnB1dCA9IG51bGw7XG5cdFx0fSxcblxuXHRcdC8qKiBTZWxlY3QgYXBwcm9wcmlhdGUgZmllbGQgcG9ydGlvbiBvbiBjbGljaywgaWYgYWxyZWFkeSBpbiB0aGUgZmllbGQuXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIGNsaWNrIGV2ZW50LiAqL1xuXHRcdF9kb0NsaWNrOiBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0dmFyIGlucHV0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoaW5wdXQpO1xuXHRcdFx0dmFyIHByZXZGaWVsZCA9IGluc3QuX2ZpZWxkO1xuXHRcdFx0aWYgKCFwbHVnaW4uX2ZvY3Vzc2VkKSB7XG5cdFx0XHRcdGluc3QuX2ZpZWxkID0gcGx1Z2luLl9nZXRTZWxlY3Rpb24oaW5zdCwgaW5wdXQsIGV2ZW50KTtcblx0XHRcdH1cblx0XHRcdGlmIChwcmV2RmllbGQgIT09IGluc3QuX2ZpZWxkKSB7XG5cdFx0XHRcdGluc3QuX2xhc3RDaHIgPSAnJztcblx0XHRcdH1cblx0XHRcdHBsdWdpbi5fc2hvd0ZpZWxkKGluc3QpO1xuXHRcdFx0cGx1Z2luLl9mb2N1c3NlZCA9IGZhbHNlO1xuXHRcdH0sXG5cblx0XHQvKiogRmluZCB0aGUgc2VsZWN0ZWQgc3ViZmllbGQgd2l0aGluIHRoZSBjb250cm9sLlxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBjdXJyZW50IGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QHBhcmFtIGlucHV0IHtFbGVtZW50fSBUaGUgaW5wdXQgY29udHJvbC5cblx0XHRcdEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSB0cmlnZ2VyaW5nIGV2ZW50LlxuXHRcdFx0QHJldHVybiB7bnVtYmVyfSBUaGUgc2VsZWN0ZWQgc3ViZmllbGQuICovXG5cdFx0X2dldFNlbGVjdGlvbjogZnVuY3Rpb24oaW5zdCwgaW5wdXQsIGV2ZW50KSB7XG5cdFx0XHR2YXIgc2VsZWN0ID0gMDtcblx0XHRcdHZhciBmaWVsZFNpemVzID0gW2luc3QuZWxlbS52YWwoKS5zcGxpdChpbnN0Lm9wdGlvbnMuc2VwYXJhdG9yKVswXS5sZW5ndGgsIDIsIDJdO1xuXHRcdFx0aWYgKGlucHV0LnNlbGVjdGlvblN0YXJ0ICE9PSBudWxsKSB7IC8vIFVzZSBpbnB1dCBzZWxlY3QgcmFuZ2Vcblx0XHRcdFx0dmFyIGVuZCA9IDA7XG5cdFx0XHRcdGZvciAodmFyIGZpZWxkID0gMDsgZmllbGQgPD0gTWF0aC5tYXgoMSwgaW5zdC5fc2Vjb25kRmllbGQsIGluc3QuX2FtcG1GaWVsZCk7IGZpZWxkKyspIHtcblx0XHRcdFx0XHRlbmQgKz0gKGZpZWxkICE9PSBpbnN0Ll9hbXBtRmllbGQgPyBmaWVsZFNpemVzW2ZpZWxkXSArIGluc3Qub3B0aW9ucy5zZXBhcmF0b3IubGVuZ3RoIDpcblx0XHRcdFx0XHRcdGluc3Qub3B0aW9ucy5hbXBtUHJlZml4Lmxlbmd0aCArIGluc3Qub3B0aW9ucy5hbXBtTmFtZXNbMF0ubGVuZ3RoKTtcblx0XHRcdFx0XHRzZWxlY3QgPSBmaWVsZDtcblx0XHRcdFx0XHRpZiAoaW5wdXQuc2VsZWN0aW9uU3RhcnQgPCBlbmQpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoaW5wdXQuY3JlYXRlVGV4dFJhbmdlICYmIGV2ZW50ICE9IG51bGwpIHsgLy8gQ2hlY2sgYWdhaW5zdCBib3VuZGluZyBib3hlc1xuXHRcdFx0XHR2YXIgc3JjID0gJChldmVudC5zcmNFbGVtZW50KTtcblx0XHRcdFx0dmFyIHJhbmdlID0gaW5wdXQuY3JlYXRlVGV4dFJhbmdlKCk7XG5cdFx0XHRcdHZhciBjb252ZXJ0ID0gZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdFx0XHRyZXR1cm4ge3RoaW46IDIsIG1lZGl1bTogNCwgdGhpY2s6IDZ9W3ZhbHVlXSB8fCB2YWx1ZTtcblx0XHRcdFx0fTtcblx0XHRcdFx0dmFyIG9mZnNldFggPSBldmVudC5jbGllbnRYICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgLVxuXHRcdFx0XHRcdChzcmMub2Zmc2V0KCkubGVmdCArIHBhcnNlSW50KGNvbnZlcnQoc3JjLmNzcygnYm9yZGVyLWxlZnQtd2lkdGgnKSksIDEwKSkgLVxuXHRcdFx0XHRcdHJhbmdlLm9mZnNldExlZnQ7IC8vIFBvc2l0aW9uIC0gbGVmdCBlZGdlIC0gYWxpZ25tZW50XG5cdFx0XHRcdGZvciAodmFyIGZpZWxkID0gMDsgZmllbGQgPD0gTWF0aC5tYXgoMSwgaW5zdC5fc2Vjb25kRmllbGQsIGluc3QuX2FtcG1GaWVsZCk7IGZpZWxkKyspIHtcblx0XHRcdFx0XHR2YXIgZW5kID0gKGZpZWxkICE9PSBpbnN0Ll9hbXBtRmllbGQgPyAoZmllbGQgKiBmaWVsZFNpemUpICsgMiA6XG5cdFx0XHRcdFx0XHQoaW5zdC5fYW1wbUZpZWxkICogZmllbGRTaXplKSArIGluc3Qub3B0aW9ucy5hbXBtUHJlZml4Lmxlbmd0aCArXG5cdFx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMuYW1wbU5hbWVzWzBdLmxlbmd0aCk7XG5cdFx0XHRcdFx0cmFuZ2UuY29sbGFwc2UoKTtcblx0XHRcdFx0XHRyYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmQpO1xuXHRcdFx0XHRcdHNlbGVjdCA9IGZpZWxkO1xuXHRcdFx0XHRcdGlmIChvZmZzZXRYIDwgcmFuZ2UuYm91bmRpbmdXaWR0aCkgeyAvLyBBbmQgY29tcGFyZVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc2VsZWN0O1xuXHRcdH0sXG5cblx0XHQvKiogSGFuZGxlIGtleXN0cm9rZXMgaW4gdGhlIGZpZWxkLlxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBrZXlkb3duIGV2ZW50LlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gY29udGludWUsIDxjb2RlPmZhbHNlPC9jb2RlPiB0byBzdG9wIHByb2Nlc3NpbmcuICovXG5cdFx0X2RvS2V5RG93bjogZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdGlmIChldmVudC5rZXlDb2RlID49IDQ4KSB7IC8vID49ICcwJ1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHZhciBpbnN0ID0gcGx1Z2luLl9nZXRJbnN0KGV2ZW50LnRhcmdldCk7XG5cdFx0XHRzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcblx0XHRcdFx0Y2FzZSA5OiByZXR1cm4gKGluc3Qub3B0aW9ucy50YWJUb0V4aXQgPyB0cnVlIDogKGV2ZW50LnNoaWZ0S2V5ID9cblx0XHRcdFx0XHRcdFx0Ly8gTW92ZSB0byBwcmV2aW91cyB0aW1lIGZpZWxkLCBvciBvdXQgaWYgYXQgdGhlIGJlZ2lubmluZ1xuXHRcdFx0XHRcdFx0XHRwbHVnaW4uX2NoYW5nZUZpZWxkKGluc3QsIC0xLCB0cnVlKSA6XG5cdFx0XHRcdFx0XHRcdC8vIE1vdmUgdG8gbmV4dCB0aW1lIGZpZWxkLCBvciBvdXQgaWYgYXQgdGhlIGVuZFxuXHRcdFx0XHRcdFx0XHRwbHVnaW4uX2NoYW5nZUZpZWxkKGluc3QsICsxLCB0cnVlKSkpO1xuXHRcdFx0XHRjYXNlIDM1OiBpZiAoZXZlbnQuY3RybEtleSkgeyAvLyBDbGVhciB0aW1lIG9uIGN0cmwrZW5kXG5cdFx0XHRcdFx0XHRcdHBsdWdpbi5fc2V0VmFsdWUoaW5zdCwgJycpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7IC8vIExhc3QgZmllbGQgb24gZW5kXG5cdFx0XHRcdFx0XHRcdGluc3QuX2ZpZWxkID0gTWF0aC5tYXgoMSwgaW5zdC5fc2Vjb25kRmllbGQsIGluc3QuX2FtcG1GaWVsZCk7XG5cdFx0XHRcdFx0XHRcdHBsdWdpbi5fYWRqdXN0RmllbGQoaW5zdCwgMCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAzNjogaWYgKGV2ZW50LmN0cmxLZXkpIHsgLy8gQ3VycmVudCB0aW1lIG9uIGN0cmwraG9tZVxuXHRcdFx0XHRcdFx0XHRwbHVnaW4uX3NldFRpbWUoaW5zdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHsgLy8gRmlyc3QgZmllbGQgb24gaG9tZVxuXHRcdFx0XHRcdFx0XHRpbnN0Ll9maWVsZCA9IDA7XG5cdFx0XHRcdFx0XHRcdHBsdWdpbi5fYWRqdXN0RmllbGQoaW5zdCwgMCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAzNzogcGx1Z2luLl9jaGFuZ2VGaWVsZChpbnN0LCAtMSwgZmFsc2UpOyBicmVhazsgLy8gUHJldmlvdXMgZmllbGQgb24gbGVmdFxuXHRcdFx0XHRjYXNlIDM4OiBwbHVnaW4uX2FkanVzdEZpZWxkKGluc3QsICsxKTsgYnJlYWs7IC8vIEluY3JlbWVudCB0aW1lIGZpZWxkIG9uIHVwXG5cdFx0XHRcdGNhc2UgMzk6IHBsdWdpbi5fY2hhbmdlRmllbGQoaW5zdCwgKzEsIGZhbHNlKTsgYnJlYWs7IC8vIE5leHQgZmllbGQgb24gcmlnaHRcblx0XHRcdFx0Y2FzZSA0MDogcGx1Z2luLl9hZGp1c3RGaWVsZChpbnN0LCAtMSk7IGJyZWFrOyAvLyBEZWNyZW1lbnQgdGltZSBmaWVsZCBvbiBkb3duXG5cdFx0XHRcdGNhc2UgNDY6IHBsdWdpbi5fc2V0VmFsdWUoaW5zdCwgJycpOyBicmVhazsgLy8gQ2xlYXIgdGltZSBvbiBkZWxldGVcblx0XHRcdFx0Y2FzZSA4OiBpbnN0Ll9sYXN0Q2hyID0gJyc7IC8vIEZhbGwgdGhyb3VnaFxuXHRcdFx0XHRkZWZhdWx0OiByZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXG5cdFx0LyoqIERpc2FsbG93IHVud2FudGVkIGNoYXJhY3RlcnMuXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIGtleXByZXNzIGV2ZW50LlxuXHRcdFx0QHJldHVybiB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gY29udGludWUsIDxjb2RlPmZhbHNlPC9jb2RlPiB0byBzdG9wIHByb2Nlc3NpbmcuICovXG5cdFx0X2RvS2V5UHJlc3M6IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHR2YXIgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSA9PT0gdW5kZWZpbmVkID8gZXZlbnQua2V5Q29kZSA6IGV2ZW50LmNoYXJDb2RlKTtcblx0XHRcdGlmIChjaHIgPCAnICcpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHR2YXIgaW5zdCA9IHBsdWdpbi5fZ2V0SW5zdChldmVudC50YXJnZXQpO1xuXHRcdFx0cGx1Z2luLl9oYW5kbGVLZXlQcmVzcyhpbnN0LCBjaHIpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cblx0XHQvKiogVXBkYXRlIGRhdGUgYmFzZWQgb24ga2V5c3Ryb2tlIGVudGVyZWQuXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QHBhcmFtIGNociB7c3RyaW5nfSBUaGUgbmV3IGNoYXJhY3Rlci4gKi9cblx0XHRfaGFuZGxlS2V5UHJlc3M6IGZ1bmN0aW9uKGluc3QsIGNocikge1xuXHRcdFx0aWYgKGNociA9PT0gaW5zdC5vcHRpb25zLnNlcGFyYXRvcikge1xuXHRcdFx0XHR0aGlzLl9jaGFuZ2VGaWVsZChpbnN0LCArMSwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoY2hyID49ICcwJyAmJiBjaHIgPD0gJzknKSB7IC8vIEFsbG93IGRpcmVjdCBlbnRyeSBvZiBkYXRlXG5cdFx0XHRcdHZhciBrZXkgPSBwYXJzZUludChjaHIsIDEwKTtcblx0XHRcdFx0dmFyIHZhbHVlID0gcGFyc2VJbnQoaW5zdC5fbGFzdENociArIGNociwgMTApO1xuXHRcdFx0XHR2YXIgaG91ciA9IChpbnN0Ll9maWVsZCAhPT0gMCA/IGluc3QuX3NlbGVjdGVkSG91ciA6XG5cdFx0XHRcdFx0KGluc3Qub3B0aW9ucy51bmxpbWl0ZWRIb3VycyA/IHZhbHVlIDpcblx0XHRcdFx0XHQoaW5zdC5vcHRpb25zLnNob3cyNEhvdXJzID8gKHZhbHVlIDwgMjQgPyB2YWx1ZSA6IGtleSkgOlxuXHRcdFx0XHRcdCh2YWx1ZSA+PSAxICYmIHZhbHVlIDw9IDEyID8gdmFsdWUgOlxuXHRcdFx0XHRcdChrZXkgPiAwID8ga2V5IDogaW5zdC5fc2VsZWN0ZWRIb3VyKSkgJSAxMiArXG5cdFx0XHRcdFx0KGluc3QuX3NlbGVjdGVkSG91ciA+PSAxMiA/IDEyIDogMCkpKSk7XG5cdFx0XHRcdHZhciBtaW51dGUgPSAoaW5zdC5fZmllbGQgIT09IDEgPyBpbnN0Ll9zZWxlY3RlZE1pbnV0ZSA6XG5cdFx0XHRcdFx0KHZhbHVlIDwgNjAgPyB2YWx1ZSA6IGtleSkpO1xuXHRcdFx0XHR2YXIgc2Vjb25kID0gKGluc3QuX2ZpZWxkICE9PSBpbnN0Ll9zZWNvbmRGaWVsZCA/IGluc3QuX3NlbGVjdGVkU2Vjb25kIDpcblx0XHRcdFx0XHQodmFsdWUgPCA2MCA/IHZhbHVlIDoga2V5KSk7XG5cdFx0XHRcdHZhciBmaWVsZHMgPSB0aGlzLl9jb25zdHJhaW5UaW1lKGluc3QsIFtob3VyLCBtaW51dGUsIHNlY29uZF0pO1xuXHRcdFx0XHR0aGlzLl9zZXRUaW1lKGluc3QsIChpbnN0Lm9wdGlvbnMudW5saW1pdGVkSG91cnMgPyBmaWVsZHMgOlxuXHRcdFx0XHRcdG5ldyBEYXRlKDAsIDAsIDAsIGZpZWxkc1swXSwgZmllbGRzWzFdLCBmaWVsZHNbMl0pKSk7XG5cdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMubm9TZXBhcmF0b3JFbnRyeSAmJiBpbnN0Ll9sYXN0Q2hyKSB7XG5cdFx0XHRcdFx0dGhpcy5fY2hhbmdlRmllbGQoaW5zdCwgKzEsIGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRpbnN0Ll9sYXN0Q2hyID0gKGluc3Qub3B0aW9ucy51bmxpbWl0ZWRIb3VycyAmJiBpbnN0Ll9maWVsZCA9PT0gMCA/IGluc3QuX2xhc3RDaHIgKyBjaHIgOiBjaHIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmICghaW5zdC5vcHRpb25zLnNob3cyNEhvdXJzKSB7IC8vIFNldCBhbS9wbSBiYXNlZCBvbiBmaXJzdCBjaGFyIG9mIG5hbWVzXG5cdFx0XHRcdGNociA9IGNoci50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRpZiAoKGNociA9PT0gaW5zdC5vcHRpb25zLmFtcG1OYW1lc1swXS5zdWJzdHJpbmcoMCwgMSkudG9Mb3dlckNhc2UoKSAmJlxuXHRcdFx0XHRcdFx0aW5zdC5fc2VsZWN0ZWRIb3VyID49IDEyKSB8fFxuXHRcdFx0XHRcdFx0KGNociA9PT0gaW5zdC5vcHRpb25zLmFtcG1OYW1lc1sxXS5zdWJzdHJpbmcoMCwgMSkudG9Mb3dlckNhc2UoKSAmJlxuXHRcdFx0XHRcdFx0aW5zdC5fc2VsZWN0ZWRIb3VyIDwgMTIpKSB7XG5cdFx0XHRcdFx0dmFyIHNhdmVGaWVsZCA9IGluc3QuX2ZpZWxkO1xuXHRcdFx0XHRcdGluc3QuX2ZpZWxkID0gaW5zdC5fYW1wbUZpZWxkO1xuXHRcdFx0XHRcdHRoaXMuX2FkanVzdEZpZWxkKGluc3QsICsxKTtcblx0XHRcdFx0XHRpbnN0Ll9maWVsZCA9IHNhdmVGaWVsZDtcblx0XHRcdFx0XHR0aGlzLl9zaG93RmllbGQoaW5zdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIEluY3JlbWVudC9kZWNyZW1lbnQgb24gbW91c2Ugd2hlZWwgYWN0aXZpdHkuXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIG1vdXNlIHdoZWVsIGV2ZW50LlxuXHRcdFx0QHBhcmFtIGRlbHRhIHtudW1iZXJ9IFRoZSBhbW91bnQgb2YgY2hhbmdlLiAqL1xuXHRcdF9kb01vdXNlV2hlZWw6IGZ1bmN0aW9uKGV2ZW50LCBkZWx0YSkge1xuXHRcdFx0aWYgKHBsdWdpbi5pc0Rpc2FibGVkKGV2ZW50LnRhcmdldCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoZXZlbnQudGFyZ2V0KTtcblx0XHRcdGluc3QuZWxlbS5mb2N1cygpO1xuXHRcdFx0aWYgKCFpbnN0LmVsZW0udmFsKCkpIHtcblx0XHRcdFx0cGx1Z2luLl9wYXJzZVRpbWUoaW5zdCk7XG5cdFx0XHR9XG5cdFx0XHRwbHVnaW4uX2FkanVzdEZpZWxkKGluc3QsIGRlbHRhKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fSxcblxuXHRcdC8qKiBFeHBhbmQgdGhlIHNwaW5uZXIsIGlmIHBvc3NpYmxlLCB0byBtYWtlIGl0IGVhc2llciB0byB1c2UuXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIG1vdXNlIG92ZXIgZXZlbnQuICovXG5cdFx0X2V4cGFuZFNwaW5uZXI6IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHR2YXIgc3Bpbm5lciA9IHBsdWdpbi5fZ2V0U3Bpbm5lclRhcmdldChldmVudCk7XG5cdFx0XHR2YXIgaW5zdCA9IHBsdWdpbi5fZ2V0SW5zdChwbHVnaW4uX2dldElucHV0KHNwaW5uZXIpKTtcblx0XHRcdGlmIChwbHVnaW4uaXNEaXNhYmxlZChpbnN0LmVsZW1bMF0pKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMuc3Bpbm5lckJpZ0ltYWdlKSB7XG5cdFx0XHRcdGluc3QuX2V4cGFuZGVkID0gdHJ1ZTtcblx0XHRcdFx0dmFyIG9mZnNldCA9ICQoc3Bpbm5lcikub2Zmc2V0KCk7XG5cdFx0XHRcdHZhciByZWxhdGl2ZSA9IG51bGw7XG5cdFx0XHRcdCQoc3Bpbm5lcikucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIHBhcmVudCA9ICQodGhpcyk7XG5cdFx0XHRcdFx0aWYgKHBhcmVudC5jc3MoJ3Bvc2l0aW9uJykgPT09ICdyZWxhdGl2ZScgfHwgcGFyZW50LmNzcygncG9zaXRpb24nKSA9PT0gJ2Fic29sdXRlJykge1xuXHRcdFx0XHRcdFx0cmVsYXRpdmUgPSBwYXJlbnQub2Zmc2V0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiAhcmVsYXRpdmU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQkKCc8ZGl2IGNsYXNzPVwiJyArIHBsdWdpbi5fZXhwYW5kQ2xhc3MgKyAnXCIgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICcgK1xuXHRcdFx0XHRcdChvZmZzZXQubGVmdCAtIChpbnN0Lm9wdGlvbnMuc3Bpbm5lckJpZ1NpemVbMF0gLSBpbnN0Lm9wdGlvbnMuc3Bpbm5lclNpemVbMF0pIC8gMiAtXG5cdFx0XHRcdFx0KHJlbGF0aXZlID8gcmVsYXRpdmUubGVmdCA6IDApKSArICdweDsgdG9wOiAnICtcblx0XHRcdFx0XHQob2Zmc2V0LnRvcCAtIChpbnN0Lm9wdGlvbnMuc3Bpbm5lckJpZ1NpemVbMV0gLSBpbnN0Lm9wdGlvbnMuc3Bpbm5lclNpemVbMV0pIC8gMiAtXG5cdFx0XHRcdFx0KHJlbGF0aXZlID8gcmVsYXRpdmUudG9wIDogMCkpICsgJ3B4OyB3aWR0aDogJyArXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLnNwaW5uZXJCaWdTaXplWzBdICsgJ3B4OyBoZWlnaHQ6ICcgK1xuXHRcdFx0XHRcdGluc3Qub3B0aW9ucy5zcGlubmVyQmlnU2l6ZVsxXSArICdweDsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgdXJsKCcgK1xuXHRcdFx0XHRcdGluc3Qub3B0aW9ucy5zcGlubmVyQmlnSW1hZ2UgKyAnKSBuby1yZXBlYXQgMHB4IDBweDsgei1pbmRleDogMTA7XCI+PC9kaXY+JykuXG5cdFx0XHRcdFx0bW91c2Vkb3duKHBsdWdpbi5faGFuZGxlU3Bpbm5lcikubW91c2V1cChwbHVnaW4uX2VuZFNwaW5uZXIpLlxuXHRcdFx0XHRcdG1vdXNlb3V0KHBsdWdpbi5fZW5kRXhwYW5kKS5tb3VzZW1vdmUocGx1Z2luLl9kZXNjcmliZVNwaW5uZXIpLlxuXHRcdFx0XHRcdGluc2VydEFmdGVyKHNwaW5uZXIpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogTG9jYXRlIHRoZSBhY3R1YWwgaW5wdXQgZmllbGQgZnJvbSB0aGUgc3Bpbm5lci5cblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gc3Bpbm5lciB7RWxlbWVudH0gVGhlIGN1cnJlbnQgc3Bpbm5lci5cblx0XHRcdEByZXR1cm4ge0VsZW1lbnR9IFRoZSBjb3JyZXNwb25kaW5nIGlucHV0LiAqL1xuXHRcdF9nZXRJbnB1dDogZnVuY3Rpb24oc3Bpbm5lcikge1xuXHRcdFx0cmV0dXJuICQoc3Bpbm5lcikuc2libGluZ3MoJy4nICsgdGhpcy5fZ2V0TWFya2VyKCkpWzBdO1xuXHRcdH0sXG5cblx0XHQvKiogQ2hhbmdlIHRoZSB0aXRsZSBiYXNlZCBvbiBwb3NpdGlvbiB3aXRoaW4gdGhlIHNwaW5uZXIuXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIG1vdXNlIG1vdmUgZXZlbnQuICovXG5cdFx0X2Rlc2NyaWJlU3Bpbm5lcjogZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdHZhciBzcGlubmVyID0gcGx1Z2luLl9nZXRTcGlubmVyVGFyZ2V0KGV2ZW50KTtcblx0XHRcdHZhciBpbnN0ID0gcGx1Z2luLl9nZXRJbnN0KHBsdWdpbi5fZ2V0SW5wdXQoc3Bpbm5lcikpO1xuXHRcdFx0c3Bpbm5lci50aXRsZSA9IGluc3Qub3B0aW9ucy5zcGlubmVyVGV4dHNbcGx1Z2luLl9nZXRTcGlubmVyUmVnaW9uKGluc3QsIGV2ZW50KV07XG5cdFx0fSxcblxuXHRcdC8qKiBIYW5kbGUgYSBjbGljayBvbiB0aGUgc3Bpbm5lci5cblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgbW91c2UgY2xpY2sgZXZlbnQuICovXG5cdFx0X2hhbmRsZVNwaW5uZXI6IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHR2YXIgc3Bpbm5lciA9IHBsdWdpbi5fZ2V0U3Bpbm5lclRhcmdldChldmVudCk7XG5cdFx0XHR2YXIgaW5wdXQgPSBwbHVnaW4uX2dldElucHV0KHNwaW5uZXIpO1xuXHRcdFx0aWYgKHBsdWdpbi5pc0Rpc2FibGVkKGlucHV0KSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoaW5wdXQgPT09IHBsdWdpbi5fYmx1cnJlZElucHV0KSB7XG5cdFx0XHRcdHBsdWdpbi5fbGFzdElucHV0ID0gaW5wdXQ7XG5cdFx0XHRcdHBsdWdpbi5fYmx1cnJlZElucHV0ID0gbnVsbDtcblx0XHRcdH1cblx0XHRcdHZhciBpbnN0ID0gcGx1Z2luLl9nZXRJbnN0KGlucHV0KTtcblx0XHRcdHBsdWdpbi5fZG9Gb2N1cyhpbnB1dCk7XG5cdFx0XHR2YXIgcmVnaW9uID0gcGx1Z2luLl9nZXRTcGlubmVyUmVnaW9uKGluc3QsIGV2ZW50KTtcblx0XHRcdHBsdWdpbi5fY2hhbmdlU3Bpbm5lcihpbnN0LCBzcGlubmVyLCByZWdpb24pO1xuXHRcdFx0cGx1Z2luLl9hY3Rpb25TcGlubmVyKGluc3QsIHJlZ2lvbik7XG5cdFx0XHRwbHVnaW4uX3RpbWVyID0gbnVsbDtcblx0XHRcdHBsdWdpbi5faGFuZGxpbmdTcGlubmVyID0gdHJ1ZTtcblx0XHRcdGlmIChyZWdpb24gPj0gMyAmJiBpbnN0Lm9wdGlvbnMuc3Bpbm5lclJlcGVhdFswXSkgeyAvLyBSZXBlYXQgaW5jcmVtZW50L2RlY3JlbWVudFxuXHRcdFx0XHRwbHVnaW4uX3RpbWVyID0gc2V0VGltZW91dChcblx0XHRcdFx0XHRmdW5jdGlvbigpIHsgcGx1Z2luLl9yZXBlYXRTcGlubmVyKGluc3QsIHJlZ2lvbik7IH0sXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLnNwaW5uZXJSZXBlYXRbMF0pO1xuXHRcdFx0XHQkKHNwaW5uZXIpLm9uZSgnbW91c2VvdXQnLCBwbHVnaW4uX3JlbGVhc2VTcGlubmVyKS5cblx0XHRcdFx0XHRvbmUoJ21vdXNldXAnLCBwbHVnaW4uX3JlbGVhc2VTcGlubmVyKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIEFjdGlvbiBhIGNsaWNrIG9uIHRoZSBzcGlubmVyLlxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBwYXJhbSByZWdpb24ge251bWJlcn0gVGhlIHNwaW5uZXIgXCJidXR0b25cIi4gKi9cblx0XHRfYWN0aW9uU3Bpbm5lcjogZnVuY3Rpb24oaW5zdCwgcmVnaW9uKSB7XG5cdFx0XHRpZiAoIWluc3QuZWxlbS52YWwoKSkge1xuXHRcdFx0XHRwbHVnaW4uX3BhcnNlVGltZShpbnN0KTtcblx0XHRcdH1cblx0XHRcdHN3aXRjaCAocmVnaW9uKSB7XG5cdFx0XHRcdGNhc2UgMDogdGhpcy5fc2V0VGltZShpbnN0KTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgMTogdGhpcy5fY2hhbmdlRmllbGQoaW5zdCwgLTEsIGZhbHNlKTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgMjogdGhpcy5fY2hhbmdlRmllbGQoaW5zdCwgKzEsIGZhbHNlKTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgMzogdGhpcy5fYWRqdXN0RmllbGQoaW5zdCwgKzEpOyBicmVhaztcblx0XHRcdFx0Y2FzZSA0OiB0aGlzLl9hZGp1c3RGaWVsZChpbnN0LCAtMSk7IGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogUmVwZWF0IGEgY2xpY2sgb24gdGhlIHNwaW5uZXIuXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QHBhcmFtIHJlZ2lvbiB7bnVtYmVyfSBUaGUgc3Bpbm5lciBcImJ1dHRvblwiLiAqL1xuXHRcdF9yZXBlYXRTcGlubmVyOiBmdW5jdGlvbihpbnN0LCByZWdpb24pIHtcblx0XHRcdGlmICghcGx1Z2luLl90aW1lcikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRwbHVnaW4uX2xhc3RJbnB1dCA9IHBsdWdpbi5fYmx1cnJlZElucHV0O1xuXHRcdFx0dGhpcy5fYWN0aW9uU3Bpbm5lcihpbnN0LCByZWdpb24pO1xuXHRcdFx0dGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KFxuXHRcdFx0XHRmdW5jdGlvbigpIHsgcGx1Z2luLl9yZXBlYXRTcGlubmVyKGluc3QsIHJlZ2lvbik7IH0sXG5cdFx0XHRcdGluc3Qub3B0aW9ucy5zcGlubmVyUmVwZWF0WzFdKTtcblx0XHR9LFxuXG5cdFx0LyoqIFN0b3AgYSBzcGlubmVyIHJlcGVhdC5cblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgbW91c2UgZXZlbnQuICovXG5cdFx0X3JlbGVhc2VTcGlubmVyOiBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHBsdWdpbi5fdGltZXIpO1xuXHRcdFx0cGx1Z2luLl90aW1lciA9IG51bGw7XG5cdFx0fSxcblxuXHRcdC8qKiBUaWR5IHVwIGFmdGVyIGFuIGV4cGFuZGVkIHNwaW5uZXIuXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIG1vdXNlIGV2ZW50LiAqL1xuXHRcdF9lbmRFeHBhbmQ6IGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRwbHVnaW4uX3RpbWVyID0gbnVsbDtcblx0XHRcdHZhciBzcGlubmVyID0gcGx1Z2luLl9nZXRTcGlubmVyVGFyZ2V0KGV2ZW50KTtcblx0XHRcdHZhciBpbnB1dCA9IHBsdWdpbi5fZ2V0SW5wdXQoc3Bpbm5lcik7XG5cdFx0XHR2YXIgaW5zdCA9IHBsdWdpbi5fZ2V0SW5zdChpbnB1dCk7XG5cdFx0XHQkKHNwaW5uZXIpLnJlbW92ZSgpO1xuXHRcdFx0aW5zdC5fZXhwYW5kZWQgPSBmYWxzZTtcblx0XHR9LFxuXG5cdFx0LyoqIFRpZHkgdXAgYWZ0ZXIgYSBzcGlubmVyIGNsaWNrLlxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBtb3VzZSBldmVudC4gKi9cblx0XHRfZW5kU3Bpbm5lcjogZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdHBsdWdpbi5fdGltZXIgPSBudWxsO1xuXHRcdFx0dmFyIHNwaW5uZXIgPSBwbHVnaW4uX2dldFNwaW5uZXJUYXJnZXQoZXZlbnQpO1xuXHRcdFx0dmFyIGlucHV0ID0gcGx1Z2luLl9nZXRJbnB1dChzcGlubmVyKTtcblx0XHRcdHZhciBpbnN0ID0gcGx1Z2luLl9nZXRJbnN0KGlucHV0KTtcblx0XHRcdGlmICghcGx1Z2luLmlzRGlzYWJsZWQoaW5wdXQpKSB7XG5cdFx0XHRcdHBsdWdpbi5fY2hhbmdlU3Bpbm5lcihpbnN0LCBzcGlubmVyLCAtMSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGx1Z2luLl9oYW5kbGluZ1NwaW5uZXIpIHtcblx0XHRcdFx0cGx1Z2luLl9sYXN0SW5wdXQgPSBwbHVnaW4uX2JsdXJyZWRJbnB1dDtcblx0XHRcdH1cblx0XHRcdGlmIChwbHVnaW4uX2xhc3RJbnB1dCAmJiBwbHVnaW4uX2hhbmRsaW5nU3Bpbm5lcikge1xuXHRcdFx0XHRwbHVnaW4uX3Nob3dGaWVsZChpbnN0KTtcblx0XHRcdH1cblx0XHRcdHBsdWdpbi5faGFuZGxpbmdTcGlubmVyID0gZmFsc2U7XG5cdFx0fSxcblxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgc3Bpbm5lciBmcm9tIHRoZSBldmVudC5cblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgbW91c2UgY2xpY2sgZXZlbnQuXG5cdFx0XHRAcmV0dXJuIHtFbGVtZW50fSBUaGUgdGFyZ2V0IGZpZWxkLiAqL1xuXHRcdF9nZXRTcGlubmVyVGFyZ2V0OiBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0cmV0dXJuIGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuXHRcdH0sXG5cblx0XHQvKiogRGV0ZXJtaW5lIHdoaWNoIFwiYnV0dG9uXCIgd2l0aGluIHRoZSBzcGlubmVyIHdhcyBjbGlja2VkLlxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBtb3VzZSBldmVudC5cblx0XHRcdEByZXR1cm4ge251bWJlcn0gVGhlIHNwaW5uZXIgXCJidXR0b25cIiBudW1iZXIuICovXG5cdFx0X2dldFNwaW5uZXJSZWdpb246IGZ1bmN0aW9uKGluc3QsIGV2ZW50KSB7XG5cdFx0XHR2YXIgc3Bpbm5lciA9IHRoaXMuX2dldFNwaW5uZXJUYXJnZXQoZXZlbnQpO1xuXHRcdFx0dmFyIHBvcyA9ICQoc3Bpbm5lcikub2Zmc2V0KCk7XG5cdFx0XHR2YXIgc2Nyb2xsZWQgPSBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0LFxuXHRcdFx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wXTtcblx0XHRcdHZhciBsZWZ0ID0gKGluc3Qub3B0aW9ucy5zcGlubmVySW5jRGVjT25seSA/IDk5IDogZXZlbnQuY2xpZW50WCArIHNjcm9sbGVkWzBdIC0gcG9zLmxlZnQpO1xuXHRcdFx0dmFyIHRvcCA9IGV2ZW50LmNsaWVudFkgKyBzY3JvbGxlZFsxXSAtIHBvcy50b3A7XG5cdFx0XHR2YXIgc3Bpbm5lclNpemUgPSBpbnN0Lm9wdGlvbnNbaW5zdC5fZXhwYW5kZWQgPyAnc3Bpbm5lckJpZ1NpemUnIDogJ3NwaW5uZXJTaXplJ107XG5cdFx0XHR2YXIgcmlnaHQgPSAoaW5zdC5vcHRpb25zLnNwaW5uZXJJbmNEZWNPbmx5ID8gOTkgOiBzcGlubmVyU2l6ZVswXSAtIDEgLSBsZWZ0KTtcblx0XHRcdHZhciBib3R0b20gPSBzcGlubmVyU2l6ZVsxXSAtIDEgLSB0b3A7XG5cdFx0XHRpZiAoc3Bpbm5lclNpemVbMl0gPiAwICYmIE1hdGguYWJzKGxlZnQgLSByaWdodCkgPD0gc3Bpbm5lclNpemVbMl0gJiZcblx0XHRcdFx0XHRNYXRoLmFicyh0b3AgLSBib3R0b20pIDw9IHNwaW5uZXJTaXplWzJdKSB7XG5cdFx0XHRcdHJldHVybiAwOyAvLyBDZW50cmUgYnV0dG9uXG5cdFx0XHR9XG5cdFx0XHR2YXIgbWluID0gTWF0aC5taW4obGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTtcblx0XHRcdHJldHVybiAobWluID09PSBsZWZ0ID8gMSA6IChtaW4gPT09IHJpZ2h0ID8gMiA6IChtaW4gPT09IHRvcCA/IDMgOiA0KSkpOyAvLyBOZWFyZXN0IGVkZ2Vcblx0XHR9LFxuXG5cdFx0LyoqIENoYW5nZSB0aGUgc3Bpbm5lciBpbWFnZSBkZXBlbmRpbmcgb24gdGhlIGJ1dHRvbiBjbGlja2VkLlxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBwYXJhbSBzcGlubmVyIHtFbGVtZW50fSBUaGUgc3Bpbm5lciBjb250cm9sLlxuXHRcdFx0QHBhcmFtIHJlZ2lvbiB7bnVtYmVyfSBUaGUgc3Bpbm5lciBcImJ1dHRvblwiLiAqL1xuXHRcdF9jaGFuZ2VTcGlubmVyOiBmdW5jdGlvbihpbnN0LCBzcGlubmVyLCByZWdpb24pIHtcblx0XHRcdCQoc3Bpbm5lcikuY3NzKCdiYWNrZ3JvdW5kLXBvc2l0aW9uJywgJy0nICsgKChyZWdpb24gKyAxKSAqXG5cdFx0XHRcdGluc3Qub3B0aW9uc1tpbnN0Ll9leHBhbmRlZCA/ICdzcGlubmVyQmlnU2l6ZScgOiAnc3Bpbm5lclNpemUnXVswXSkgKyAncHggMHB4Jyk7XG5cdFx0fSxcblxuXHRcdC8qKiBFeHRyYWN0IHRoZSB0aW1lIHZhbHVlIGZyb20gdGhlIGlucHV0IGZpZWxkLCBvciBkZWZhdWx0IHRvIG5vdy5cblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgdHJpZ2dlcmluZyBldmVudCBvciA8Y29kZT5udWxsPC9jb2RlPi4gKi9cblx0XHRfcGFyc2VUaW1lOiBmdW5jdGlvbihpbnN0LCBldmVudCkge1xuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gdGhpcy5fZXh0cmFjdFRpbWUoaW5zdCk7XG5cdFx0XHRpZiAoY3VycmVudFRpbWUpIHtcblx0XHRcdFx0aW5zdC5fc2VsZWN0ZWRIb3VyID0gY3VycmVudFRpbWVbMF07XG5cdFx0XHRcdGluc3QuX3NlbGVjdGVkTWludXRlID0gY3VycmVudFRpbWVbMV07XG5cdFx0XHRcdGluc3QuX3NlbGVjdGVkU2Vjb25kID0gY3VycmVudFRpbWVbMl07XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0dmFyIG5vdyA9IHRoaXMuX2NvbnN0cmFpblRpbWUoaW5zdCk7XG5cdFx0XHRcdGluc3QuX3NlbGVjdGVkSG91ciA9IG5vd1swXTtcblx0XHRcdFx0aW5zdC5fc2VsZWN0ZWRNaW51dGUgPSBub3dbMV07XG5cdFx0XHRcdGluc3QuX3NlbGVjdGVkU2Vjb25kID0gKGluc3Qub3B0aW9ucy5zaG93U2Vjb25kcyA/IG5vd1syXSA6IDApO1xuXHRcdFx0fVxuXHRcdFx0aW5zdC5fc2Vjb25kRmllbGQgPSAoaW5zdC5vcHRpb25zLnNob3dTZWNvbmRzID8gMiA6IC0xKTtcblx0XHRcdGluc3QuX2FtcG1GaWVsZCA9IChpbnN0Lm9wdGlvbnMuc2hvdzI0SG91cnMgPyAtMSA6IChpbnN0Lm9wdGlvbnMuc2hvd1NlY29uZHMgPyAzIDogMikpO1xuXHRcdFx0aW5zdC5fbGFzdENociA9ICcnO1xuXHRcdFx0dmFyIHBvc3RQcm9jZXNzID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmIChpbnN0LmVsZW0udmFsKCkgIT09ICcnKSB7XG5cdFx0XHRcdFx0cGx1Z2luLl9zaG93VGltZShpbnN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGlmICh0eXBlb2YgaW5zdC5vcHRpb25zLmluaXRpYWxGaWVsZCA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0aW5zdC5fZmllbGQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihcblx0XHRcdFx0XHRNYXRoLm1heCgxLCBpbnN0Ll9zZWNvbmRGaWVsZCwgaW5zdC5fYW1wbUZpZWxkKSwgaW5zdC5vcHRpb25zLmluaXRpYWxGaWVsZCkpO1xuXHRcdFx0XHRwb3N0UHJvY2VzcygpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aW5zdC5fZmllbGQgPSBwbHVnaW4uX2dldFNlbGVjdGlvbihpbnN0LCBpbnN0LmVsZW1bMF0sIGV2ZW50KTtcblx0XHRcdFx0XHRwb3N0UHJvY2VzcygpO1xuXHRcdFx0XHR9LCAwKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIEV4dHJhY3QgdGhlIHRpbWUgdmFsdWUgZnJvbSBhIHN0cmluZyBhcyBhbiBhcnJheSBvZiB2YWx1ZXMsIG9yIGRlZmF1bHQgdG8gPGNvZGU+bnVsbDwvY29kZT4uXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIHZhbHVlIHtzdHJpbmd9IFRoZSBkYXRlIHRleHQuXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJbXX0gVGhlIHJldHJpZXZlZCB0aW1lIGNvbXBvbmVudHMgKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSBvclxuXHRcdFx0XHRcdDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vIHZhbHVlLiAqL1xuXHRcdF9leHRyYWN0VGltZTogZnVuY3Rpb24oaW5zdCwgdmFsdWUpIHtcblx0XHRcdHZhbHVlID0gdmFsdWUgfHwgaW5zdC5lbGVtLnZhbCgpO1xuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gdmFsdWUuc3BsaXQoaW5zdC5vcHRpb25zLnNlcGFyYXRvcik7XG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLnNlcGFyYXRvciA9PT0gJycgJiYgdmFsdWUgIT09ICcnKSB7XG5cdFx0XHRcdGN1cnJlbnRUaW1lWzBdID0gdmFsdWUuc3Vic3RyaW5nKDAsIDIpO1xuXHRcdFx0XHRjdXJyZW50VGltZVsxXSA9IHZhbHVlLnN1YnN0cmluZygyLCA0KTtcblx0XHRcdFx0Y3VycmVudFRpbWVbMl0gPSB2YWx1ZS5zdWJzdHJpbmcoNCwgNik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3VycmVudFRpbWUubGVuZ3RoID49IDIpIHtcblx0XHRcdFx0dmFyIGlzQU0gPSAhaW5zdC5vcHRpb25zLnNob3cyNEhvdXJzICYmICh2YWx1ZS5pbmRleE9mKGluc3Qub3B0aW9ucy5hbXBtTmFtZXNbMF0pID4gLTEpO1xuXHRcdFx0XHR2YXIgaXNQTSA9ICFpbnN0Lm9wdGlvbnMuc2hvdzI0SG91cnMgJiYgKHZhbHVlLmluZGV4T2YoaW5zdC5vcHRpb25zLmFtcG1OYW1lc1sxXSkgPiAtMSk7XG5cdFx0XHRcdHZhciBob3VyID0gcGFyc2VJbnQoY3VycmVudFRpbWVbMF0sIDEwKTtcblx0XHRcdFx0aG91ciA9IChpc05hTihob3VyKSA/IDAgOiBob3VyKTtcblx0XHRcdFx0aG91ciA9ICgoaXNBTSB8fCBpc1BNKSAmJiBob3VyID09PSAxMiA/IDAgOiBob3VyKSArIChpc1BNID8gMTIgOiAwKTtcblx0XHRcdFx0dmFyIG1pbnV0ZSA9IHBhcnNlSW50KGN1cnJlbnRUaW1lWzFdLCAxMCk7XG5cdFx0XHRcdG1pbnV0ZSA9IChpc05hTihtaW51dGUpID8gMCA6IG1pbnV0ZSk7XG5cdFx0XHRcdHZhciBzZWNvbmQgPSAoY3VycmVudFRpbWUubGVuZ3RoID49IDMgPyBwYXJzZUludChjdXJyZW50VGltZVsyXSwgMTApIDogMCk7XG5cdFx0XHRcdHNlY29uZCA9IChpc05hTihzZWNvbmQpIHx8ICFpbnN0Lm9wdGlvbnMuc2hvd1NlY29uZHMgPyAwIDogc2Vjb25kKTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2NvbnN0cmFpblRpbWUoaW5zdCwgW2hvdXIsIG1pbnV0ZSwgc2Vjb25kXSk7XG5cdFx0XHR9IFxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSxcblxuXHRcdC8qKiBDb25zdHJhaW4gdGhlIGdpdmVuL2N1cnJlbnQgdGltZSB0byB0aGUgdGltZSBzdGVwcy5cblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAcGFyYW0gZmllbGRzIHtudW1iZXJbXX0gVGhlIGN1cnJlbnQgdGltZSBjb21wb25lbnRzIChob3VycywgbWludXRlcywgc2Vjb25kcykuXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJbXX0gVGhlIGNvbnN0cmFpbmVkIHRpbWUgY29tcG9uZW50cyAoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpLiAqL1xuXHRcdF9jb25zdHJhaW5UaW1lOiBmdW5jdGlvbihpbnN0LCBmaWVsZHMpIHtcblx0XHRcdHZhciBzcGVjaWZpZWQgPSAoZmllbGRzICE9PSBudWxsICYmIGZpZWxkcyAhPT0gdW5kZWZpbmVkKTtcblx0XHRcdGlmICghc3BlY2lmaWVkKSB7XG5cdFx0XHRcdHZhciBub3cgPSB0aGlzLl9kZXRlcm1pbmVUaW1lKGluc3Qub3B0aW9ucy5kZWZhdWx0VGltZSwgaW5zdCkgfHwgbmV3IERhdGUoKTtcblx0XHRcdFx0ZmllbGRzID0gW25vdy5nZXRIb3VycygpLCBub3cuZ2V0TWludXRlcygpLCBub3cuZ2V0U2Vjb25kcygpXTtcblx0XHRcdH1cblx0XHRcdHZhciByZXNldCA9IGZhbHNlO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpbnN0Lm9wdGlvbnMudGltZVN0ZXBzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChyZXNldCkge1xuXHRcdFx0XHRcdGZpZWxkc1tpXSA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAoaW5zdC5vcHRpb25zLnRpbWVTdGVwc1tpXSA+IDEpIHtcblx0XHRcdFx0XHRmaWVsZHNbaV0gPSBNYXRoLnJvdW5kKGZpZWxkc1tpXSAvIGluc3Qub3B0aW9ucy50aW1lU3RlcHNbaV0pICpcblx0XHRcdFx0XHRcdGluc3Qub3B0aW9ucy50aW1lU3RlcHNbaV07XG5cdFx0XHRcdFx0cmVzZXQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmllbGRzO1xuXHRcdH0sXG5cblx0XHQvKiogU2V0IHRoZSBzZWxlY3RlZCB0aW1lIGludG8gdGhlIGlucHV0IGZpZWxkLlxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBpbnN0YW5jZSBzZXR0aW5ncy4gKi9cblx0XHRfc2hvd1RpbWU6IGZ1bmN0aW9uKGluc3QpIHtcblx0XHRcdHZhciBjdXJyZW50VGltZSA9IChpbnN0Lm9wdGlvbnMudW5saW1pdGVkSG91cnMgPyBpbnN0Ll9zZWxlY3RlZEhvdXIgOlxuXHRcdFx0XHR0aGlzLl9mb3JtYXROdW1iZXIoaW5zdC5vcHRpb25zLnNob3cyNEhvdXJzID8gaW5zdC5fc2VsZWN0ZWRIb3VyIDpcblx0XHRcdFx0KChpbnN0Ll9zZWxlY3RlZEhvdXIgKyAxMSkgJSAxMikgKyAxKSkgKyBpbnN0Lm9wdGlvbnMuc2VwYXJhdG9yICtcblx0XHRcdFx0dGhpcy5fZm9ybWF0TnVtYmVyKGluc3QuX3NlbGVjdGVkTWludXRlKSArXG5cdFx0XHRcdChpbnN0Lm9wdGlvbnMuc2hvd1NlY29uZHMgPyBpbnN0Lm9wdGlvbnMuc2VwYXJhdG9yICtcblx0XHRcdFx0dGhpcy5fZm9ybWF0TnVtYmVyKGluc3QuX3NlbGVjdGVkU2Vjb25kKSA6ICcnKSArXG5cdFx0XHRcdChpbnN0Lm9wdGlvbnMuc2hvdzI0SG91cnMgPyAgJycgOiBpbnN0Lm9wdGlvbnMuYW1wbVByZWZpeCArXG5cdFx0XHRcdGluc3Qub3B0aW9ucy5hbXBtTmFtZXNbKGluc3QuX3NlbGVjdGVkSG91ciA8IDEyID8gMCA6IDEpXSk7XG5cdFx0XHR0aGlzLl9zZXRWYWx1ZShpbnN0LCBjdXJyZW50VGltZSk7XG5cdFx0XHR0aGlzLl9zaG93RmllbGQoaW5zdCk7XG5cdFx0fSxcblxuXHRcdC8qKiBIaWdobGlnaHQgdGhlIGN1cnJlbnQgZGF0ZSBmaWVsZC5cblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgaW5zdGFuY2Ugc2V0dGluZ3MuICovXG5cdFx0X3Nob3dGaWVsZDogZnVuY3Rpb24oaW5zdCkge1xuXHRcdFx0dmFyIGlucHV0ID0gaW5zdC5lbGVtWzBdO1xuXHRcdFx0aWYgKGluc3QuZWxlbS5pcygnOmhpZGRlbicpIHx8IHBsdWdpbi5fbGFzdElucHV0ICE9PSBpbnB1dCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR2YXIgZmllbGRTaXplcyA9IFtpbnN0LmVsZW0udmFsKCkuc3BsaXQoaW5zdC5vcHRpb25zLnNlcGFyYXRvcilbMF0ubGVuZ3RoLCAyLCAyXTtcblx0XHRcdHZhciBzdGFydCA9IDA7XG5cdFx0XHR2YXIgZmllbGQgPSAwO1xuXHRcdFx0d2hpbGUgKGZpZWxkIDwgaW5zdC5fZmllbGQpIHtcblx0XHRcdFx0c3RhcnQgKz0gZmllbGRTaXplc1tmaWVsZF0gK1xuXHRcdFx0XHRcdChmaWVsZCA9PT0gTWF0aC5tYXgoMSwgaW5zdC5fc2Vjb25kRmllbGQpID8gMCA6IGluc3Qub3B0aW9ucy5zZXBhcmF0b3IubGVuZ3RoKTtcblx0XHRcdFx0ZmllbGQrKztcblx0XHRcdH1cblx0XHRcdHZhciBlbmQgPSBzdGFydCArIChpbnN0Ll9maWVsZCAhPT0gaW5zdC5fYW1wbUZpZWxkID8gZmllbGRTaXplc1tmaWVsZF0gOlxuXHRcdFx0XHRpbnN0Lm9wdGlvbnMuYW1wbVByZWZpeC5sZW5ndGggKyBpbnN0Lm9wdGlvbnMuYW1wbU5hbWVzWzBdLmxlbmd0aCk7XG5cdFx0XHRpZiAoaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UpIHsgLy8gTW96aWxsYVxuXHRcdFx0XHRpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKGlucHV0LmNyZWF0ZVRleHRSYW5nZSkgeyAvLyBJRVxuXHRcdFx0XHR2YXIgcmFuZ2UgPSBpbnB1dC5jcmVhdGVUZXh0UmFuZ2UoKTtcblx0XHRcdFx0cmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzdGFydCk7XG5cdFx0XHRcdHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZCAtIGluc3QuZWxlbS52YWwoKS5sZW5ndGgpO1xuXHRcdFx0XHRyYW5nZS5zZWxlY3QoKTtcblx0XHRcdH1cblx0XHRcdGlmICghaW5wdXQuZGlzYWJsZWQpIHtcblx0XHRcdFx0aW5wdXQuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIEVuc3VyZSBkaXNwbGF5ZWQgc2luZ2xlIG51bWJlciBoYXMgYSBsZWFkaW5nIHplcm8uXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIHZhbHVlIHtudW1iZXJ9IFRoZSBjdXJyZW50IHZhbHVlLlxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBOdW1iZXIgd2l0aCBhdCBsZWFzdCB0d28gZGlnaXRzLiAqL1xuXHRcdF9mb3JtYXROdW1iZXI6IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gKHZhbHVlIDwgMTAgPyAnMCcgOiAnJykgKyB2YWx1ZTtcblx0XHR9LFxuXG5cdFx0LyoqIFVwZGF0ZSB0aGUgaW5wdXQgZmllbGQgYW5kIG5vdGlmeSBsaXN0ZW5lcnMuXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QHBhcmFtIHZhbHVlIHtzdHJpbmd9IFRoZSBuZXcgdmFsdWUuICovXG5cdFx0X3NldFZhbHVlOiBmdW5jdGlvbihpbnN0LCB2YWx1ZSkge1xuXHRcdFx0aWYgKHZhbHVlICE9PSBpbnN0LmVsZW0udmFsKCkpIHtcblx0XHRcdFx0aW5zdC5lbGVtLnZhbCh2YWx1ZSkudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKiBNb3ZlIHRvIHByZXZpb3VzL25leHQgZmllbGQsIG9yIG91dCBvZiBmaWVsZCBhbHRvZ2V0aGVyIGlmIGFwcHJvcHJpYXRlLlxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBwYXJhbSBvZmZzZXQge251bWJlcn0gVGhlIGRpcmVjdGlvbiBvZiBjaGFuZ2UgKC0xLCArMSkuXG5cdFx0XHRAcGFyYW0gbW92ZU91dCB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgY2FuIG1vdmUgb3V0IG9mIHRoZSBmaWVsZC5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIGV4aXRpbmcgdGhlIGZpZWxkLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgbm90LiAqL1xuXHRcdF9jaGFuZ2VGaWVsZDogZnVuY3Rpb24oaW5zdCwgb2Zmc2V0LCBtb3ZlT3V0KSB7XG5cdFx0XHR2YXIgYXRGaXJzdExhc3QgPSAoaW5zdC5lbGVtLnZhbCgpID09PSAnJyB8fFxuXHRcdFx0XHRpbnN0Ll9maWVsZCA9PT0gKG9mZnNldCA9PT0gLTEgPyAwIDogTWF0aC5tYXgoMSwgaW5zdC5fc2Vjb25kRmllbGQsIGluc3QuX2FtcG1GaWVsZCkpKTtcblx0XHRcdGlmICghYXRGaXJzdExhc3QpIHtcblx0XHRcdFx0aW5zdC5fZmllbGQgKz0gb2Zmc2V0O1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fc2hvd0ZpZWxkKGluc3QpO1xuXHRcdFx0aW5zdC5fbGFzdENociA9ICcnO1xuXHRcdFx0cmV0dXJuIChhdEZpcnN0TGFzdCAmJiBtb3ZlT3V0KTtcblx0XHR9LFxuXG5cdFx0LyoqIFVwZGF0ZSB0aGUgY3VycmVudCBmaWVsZCBpbiB0aGUgZGlyZWN0aW9uIGluZGljYXRlZC5cblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAcGFyYW0gb2Zmc2V0IHtudW1iZXJ9IFRoZSBhbW91bnQgdG8gY2hhbmdlIGJ5LiAqL1xuXHRcdF9hZGp1c3RGaWVsZDogZnVuY3Rpb24oaW5zdCwgb2Zmc2V0KSB7XG5cdFx0XHRpZiAoaW5zdC5lbGVtLnZhbCgpID09PSAnJykge1xuXHRcdFx0XHRvZmZzZXQgPSAwO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGluc3Qub3B0aW9ucy51bmxpbWl0ZWRIb3Vycykge1xuXHRcdFx0XHR0aGlzLl9zZXRUaW1lKGluc3QsIFtpbnN0Ll9zZWxlY3RlZEhvdXIgKyAoaW5zdC5fZmllbGQgPT09IDAgPyBvZmZzZXQgKiBpbnN0Lm9wdGlvbnMudGltZVN0ZXBzWzBdIDogMCksXG5cdFx0XHRcdFx0aW5zdC5fc2VsZWN0ZWRNaW51dGUgKyAoaW5zdC5fZmllbGQgPT09IDEgPyBvZmZzZXQgKiBpbnN0Lm9wdGlvbnMudGltZVN0ZXBzWzFdIDogMCksXG5cdFx0XHRcdFx0aW5zdC5fc2VsZWN0ZWRTZWNvbmQgKyAoaW5zdC5fZmllbGQgPT09IGluc3QuX3NlY29uZEZpZWxkID8gb2Zmc2V0ICogaW5zdC5vcHRpb25zLnRpbWVTdGVwc1syXSA6IDApXSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdHRoaXMuX3NldFRpbWUoaW5zdCwgbmV3IERhdGUoMCwgMCwgMCxcblx0XHRcdFx0aW5zdC5fc2VsZWN0ZWRIb3VyICsgKGluc3QuX2ZpZWxkID09PSAwID8gb2Zmc2V0ICogaW5zdC5vcHRpb25zLnRpbWVTdGVwc1swXSA6IDApICtcblx0XHRcdFx0KGluc3QuX2ZpZWxkID09PSBpbnN0Ll9hbXBtRmllbGQgPyBvZmZzZXQgKiAxMiA6IDApLFxuXHRcdFx0XHRpbnN0Ll9zZWxlY3RlZE1pbnV0ZSArIChpbnN0Ll9maWVsZCA9PT0gMSA/IG9mZnNldCAqIGluc3Qub3B0aW9ucy50aW1lU3RlcHNbMV0gOiAwKSxcblx0XHRcdFx0XHRpbnN0Ll9zZWxlY3RlZFNlY29uZCArIChpbnN0Ll9maWVsZCA9PT0gaW5zdC5fc2Vjb25kRmllbGQgPyBvZmZzZXQgKiBpbnN0Lm9wdGlvbnMudGltZVN0ZXBzWzJdIDogMCkpKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqIENoZWNrIGFnYWluc3QgbWluaW11bS9tYXhpbXVtIGFuZCBkaXNwbGF5IHRpbWUuXG5cdFx0XHRAcHJpdmF0ZVxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QHBhcmFtIHRpbWUge0RhdGV8bnVtYmVyfHN0cmluZ3xudW1iZXJbXX0gVGhlIGFjdHVhbCB0aW1lIG9yIG9mZnNldCBpbiBzZWNvbmRzIGZyb20gbm93IG9yXG5cdFx0XHRcdFx0dW5pdHMgYW5kIHBlcmlvZHMgb2Ygb2Zmc2V0cyBmcm9tIG5vdyBvciBudW1lcmljIHBlcmlvZCB2YWx1ZXMuICovXG5cdFx0X3NldFRpbWU6IGZ1bmN0aW9uKGluc3QsIHRpbWUpIHtcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMudW5saW1pdGVkSG91cnMgJiYgJC5pc0FycmF5KHRpbWUpKSB7XG5cdFx0XHRcdHZhciBmaWVsZHMgPSB0aW1lO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHR0aW1lID0gdGhpcy5fZGV0ZXJtaW5lVGltZSh0aW1lLCBpbnN0KTtcblx0XHRcdFx0dmFyIGZpZWxkcyA9ICh0aW1lID8gW3RpbWUuZ2V0SG91cnMoKSwgdGltZS5nZXRNaW51dGVzKCksIHRpbWUuZ2V0U2Vjb25kcygpXSA6IG51bGwpO1xuXHRcdFx0fVxuXHRcdFx0ZmllbGRzID0gdGhpcy5fY29uc3RyYWluVGltZShpbnN0LCBmaWVsZHMpO1xuXHRcdFx0dGltZSA9IG5ldyBEYXRlKDAsIDAsIDAsIGZpZWxkc1swXSwgZmllbGRzWzFdLCBmaWVsZHNbMl0pO1xuXHRcdFx0Ly8gTm9ybWFsaXNlIHRvIGJhc2UgZGF0ZVxuXHRcdFx0dmFyIHRpbWUgPSB0aGlzLl9ub3JtYWxpc2VUaW1lKHRpbWUpO1xuXHRcdFx0dmFyIG1pblRpbWUgPSB0aGlzLl9ub3JtYWxpc2VUaW1lKHRoaXMuX2RldGVybWluZVRpbWUoaW5zdC5vcHRpb25zLm1pblRpbWUsIGluc3QpKTtcblx0XHRcdHZhciBtYXhUaW1lID0gdGhpcy5fbm9ybWFsaXNlVGltZSh0aGlzLl9kZXRlcm1pbmVUaW1lKGluc3Qub3B0aW9ucy5tYXhUaW1lLCBpbnN0KSk7XG5cdFx0XHQvLyBFbnN1cmUgaXQgaXMgd2l0aGluIHRoZSBib3VuZHMgc2V0XG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLnVubGltaXRlZEhvdXJzKSB7XG5cdFx0XHRcdHdoaWxlIChmaWVsZHNbMl0gPCAwKSB7XG5cdFx0XHRcdFx0ZmllbGRzWzJdICs9IDYwO1xuXHRcdFx0XHRcdGZpZWxkc1sxXS0tO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHdoaWxlIChmaWVsZHNbMl0gPiA1OSkge1xuXHRcdFx0XHRcdGZpZWxkc1syXSAtPSA2MDtcblx0XHRcdFx0XHRmaWVsZHNbMV0rKztcblx0XHRcdFx0fVxuXHRcdFx0XHR3aGlsZSAoZmllbGRzWzFdIDwgMCkge1xuXHRcdFx0XHRcdGZpZWxkc1sxXSArPSA2MDtcblx0XHRcdFx0XHRmaWVsZHNbMF0tLTtcblx0XHRcdFx0fVxuXHRcdFx0XHR3aGlsZSAoZmllbGRzWzFdID4gNTkpIHtcblx0XHRcdFx0XHRmaWVsZHNbMV0gLT0gNjA7XG5cdFx0XHRcdFx0ZmllbGRzWzBdKys7XG5cdFx0XHRcdH1cblx0XHRcdFx0bWluVGltZSA9IChpbnN0Lm9wdGlvbnMubWluVGltZSAhPSBudWxsICYmICQuaXNBcnJheShpbnN0Lm9wdGlvbnMubWluVGltZSkpID9cblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMubWluVGltZSA6IFswLCAwLCAwXTtcblx0XHRcdFx0aWYgKGZpZWxkc1swXSA8IG1pblRpbWVbMF0pIHtcblx0XHRcdFx0XHRmaWVsZHMgPSBtaW5UaW1lLnNsaWNlKDAsIDMpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKGZpZWxkc1swXSA9PT0gbWluVGltZVswXSkge1xuXHRcdFx0XHRcdGlmIChmaWVsZHNbMV0gPCBtaW5UaW1lWzFdKSB7XG5cdFx0XHRcdFx0XHRmaWVsZHNbMV0gPSBtaW5UaW1lWzFdO1xuXHRcdFx0XHRcdFx0ZmllbGRzWzJdID0gbWluVGltZVsyXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSBpZiAoZmllbGRzWzFdID09PSBtaW5UaW1lWzFdKSB7XG5cdFx0XHRcdFx0XHRpZiAoZmllbGRzWzJdIDwgbWluVGltZVsyXSkge1xuXHRcdFx0XHRcdFx0XHRmaWVsZHNbMl0gPSBtaW5UaW1lWzJdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaW5zdC5vcHRpb25zLm1heFRpbWUgIT0gbnVsbCAmJiAkLmlzQXJyYXkoaW5zdC5vcHRpb25zLm1heFRpbWUpKSB7XG5cdFx0XHRcdFx0aWYgKGZpZWxkc1swXSA+IGluc3Qub3B0aW9ucy5tYXhUaW1lWzBdKSB7XG5cdFx0XHRcdFx0XHRmaWVsZHMgPSBpbnN0Lm9wdGlvbnMubWF4VGltZS5zbGljZSgwLCAzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSBpZiAoZmllbGRzWzBdID09PSBpbnN0Lm9wdGlvbnMubWF4VGltZVswXSkge1xuXHRcdFx0XHRcdFx0aWYgKGZpZWxkc1sxXSA+IGluc3Qub3B0aW9ucy5tYXhUaW1lWzFdKSB7XG5cdFx0XHRcdFx0XHRcdGZpZWxkc1sxXSA9IGluc3Qub3B0aW9ucy5tYXhUaW1lWzFdO1xuXHRcdFx0XHRcdFx0XHRmaWVsZHNbMl0gPSBpbnN0Lm9wdGlvbnMubWF4VGltZVsyXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2UgaWYgKGZpZWxkc1sxXSA9PT0gaW5zdC5vcHRpb25zLm1heFRpbWVbMV0pIHtcblx0XHRcdFx0XHRcdFx0aWYgKGZpZWxkc1syXSA+IGluc3Qub3B0aW9ucy5tYXhUaW1lWzJdKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZmllbGRzWzJdID0gaW5zdC5vcHRpb25zLm1heFRpbWVbMl07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0aWYgKG1pblRpbWUgJiYgbWF4VGltZSAmJiBtaW5UaW1lID4gbWF4VGltZSkge1xuXHRcdFx0XHRpZiAodGltZSA8IG1pblRpbWUgJiYgdGltZSA+IG1heFRpbWUpIHtcblx0XHRcdFx0XHR0aW1lID0gKE1hdGguYWJzKHRpbWUgLSBtaW5UaW1lKSA8IE1hdGguYWJzKHRpbWUgLSBtYXhUaW1lKSA/IG1pblRpbWUgOiBtYXhUaW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHRpbWUgPSAobWluVGltZSAmJiB0aW1lIDwgbWluVGltZSA/IG1pblRpbWUgOlxuXHRcdFx0XHRcdChtYXhUaW1lICYmIHRpbWUgPiBtYXhUaW1lID8gbWF4VGltZSA6IHRpbWUpKTtcblx0XHRcdH1cblx0XHRcdFx0ZmllbGRzWzBdID0gdGltZS5nZXRIb3VycygpO1xuXHRcdFx0XHRmaWVsZHNbMV0gPSB0aW1lLmdldE1pbnV0ZXMoKTtcblx0XHRcdFx0ZmllbGRzWzJdID0gdGltZS5nZXRTZWNvbmRzKCk7XG5cdFx0XHR9XG5cdFx0XHQvLyBQZXJmb3JtIGZ1cnRoZXIgcmVzdHJpY3Rpb25zIGlmIHJlcXVpcmVkXG5cdFx0XHRpZiAoJC5pc0Z1bmN0aW9uKGluc3Qub3B0aW9ucy5iZWZvcmVTZXRUaW1lKSkge1xuXHRcdFx0XHR0aW1lID0gaW5zdC5vcHRpb25zLmJlZm9yZVNldFRpbWUuYXBwbHkoaW5zdC5lbGVtWzBdLFxuXHRcdFx0XHRcdFt0aGlzLmdldFRpbWUoaW5zdC5lbGVtWzBdKSwgdGltZSwgbWluVGltZSwgbWF4VGltZV0pO1xuXHRcdFx0XHRmaWVsZHNbMF0gPSB0aW1lLmdldEhvdXJzKCk7XG5cdFx0XHRcdGZpZWxkc1sxXSA9IHRpbWUuZ2V0TWludXRlcygpO1xuXHRcdFx0XHRmaWVsZHNbMl0gPSB0aW1lLmdldFNlY29uZHMoKTtcblx0XHRcdH1cblx0XHRcdGluc3QuX3NlbGVjdGVkSG91ciA9IGZpZWxkc1swXTtcblx0XHRcdGluc3QuX3NlbGVjdGVkTWludXRlID0gZmllbGRzWzFdO1xuXHRcdFx0aW5zdC5fc2VsZWN0ZWRTZWNvbmQgPSBmaWVsZHNbMl07XG5cdFx0XHR0aGlzLl9zaG93VGltZShpbnN0KTtcblx0XHR9LFxuXG5cdFx0LyoqIEEgdGltZSBtYXkgYmUgc3BlY2lmaWVkIGFzIGFuIGV4YWN0IHZhbHVlIG9yIGEgcmVsYXRpdmUgb25lLlxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBzZXR0aW5nIHtEYXRlfG51bWJlcnxzdHJpbmd8bnVtYmVyW119IFRoZSBhY3R1YWwgdGltZSBvciBvZmZzZXQgaW4gc2Vjb25kcyBmcm9tIG5vdyBvclxuXHRcdFx0XHRcdHVuaXRzIGFuZCBwZXJpb2RzIG9mIG9mZnNldHMgZnJvbSBub3cgb3IgbnVtZXJpYyBwZXJpb2QgdmFsdWVzLlxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QHJldHVybiB7RGF0ZX0gVGhlIGNhbGN1bGF0ZWQgdGltZS4gKi9cblx0XHRfZGV0ZXJtaW5lVGltZTogZnVuY3Rpb24oc2V0dGluZywgaW5zdCkge1xuXHRcdFx0dmFyIG9mZnNldE51bWVyaWMgPSBmdW5jdGlvbihvZmZzZXQpIHsgLy8gRS5nLiArMzAwLCAtMlxuXHRcdFx0XHR2YXIgdGltZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdHRpbWUuc2V0VGltZSh0aW1lLmdldFRpbWUoKSArIG9mZnNldCAqIDEwMDApO1xuXHRcdFx0XHRyZXR1cm4gdGltZTtcblx0XHRcdH07XG5cdFx0XHR2YXIgb2Zmc2V0U3RyaW5nID0gZnVuY3Rpb24ob2Zmc2V0KSB7IC8vIEUuZy4gJysybScsICctNGgnLCAnKzNoICszMG0nIG9yICcxMjozNDo1NlBNJ1xuXHRcdFx0XHR2YXIgZmllbGRzID0gcGx1Z2luLl9leHRyYWN0VGltZShpbnN0LCBvZmZzZXQpOyAvLyBBY3R1YWwgdGltZT9cblx0XHRcdFx0dmFyIHRpbWUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0XHR2YXIgaG91ciA9IChmaWVsZHMgPyBmaWVsZHNbMF0gOiB0aW1lLmdldEhvdXJzKCkpO1xuXHRcdFx0XHR2YXIgbWludXRlID0gKGZpZWxkcyA/IGZpZWxkc1sxXSA6IHRpbWUuZ2V0TWludXRlcygpKTtcblx0XHRcdFx0dmFyIHNlY29uZCA9IChmaWVsZHMgPyBmaWVsZHNbMl0gOiB0aW1lLmdldFNlY29uZHMoKSk7XG5cdFx0XHRcdGlmICghZmllbGRzKSB7XG5cdFx0XHRcdFx0dmFyIHBhdHRlcm4gPSAvKFsrLV0/WzAtOV0rKVxccyooc3xTfG18TXxofEgpPy9nO1xuXHRcdFx0XHRcdHZhciBtYXRjaGVzID0gcGF0dGVybi5leGVjKG9mZnNldCk7XG5cdFx0XHRcdFx0d2hpbGUgKG1hdGNoZXMpIHtcblx0XHRcdFx0XHRcdHN3aXRjaCAobWF0Y2hlc1syXSB8fCAncycpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSAncycgOiBjYXNlICdTJyA6XG5cdFx0XHRcdFx0XHRcdFx0c2Vjb25kICs9IHBhcnNlSW50KG1hdGNoZXNbMV0sIDEwKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgJ20nIDogY2FzZSAnTScgOlxuXHRcdFx0XHRcdFx0XHRcdG1pbnV0ZSArPSBwYXJzZUludChtYXRjaGVzWzFdLCAxMCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlICdoJyA6IGNhc2UgJ0gnIDpcblx0XHRcdFx0XHRcdFx0XHRob3VyICs9IHBhcnNlSW50KG1hdGNoZXNbMV0sIDEwKTsgYnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtYXRjaGVzID0gcGF0dGVybi5leGVjKG9mZnNldCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRpbWUgPSBuZXcgRGF0ZSgwLCAwLCAxMCwgaG91ciwgbWludXRlLCBzZWNvbmQsIDApO1xuXHRcdFx0XHRpZiAoL14hLy50ZXN0KG9mZnNldCkpIHsgLy8gTm8gd3JhcHBpbmdcblx0XHRcdFx0XHRpZiAodGltZS5nZXREYXRlKCkgPiAxMCkge1xuXHRcdFx0XHRcdFx0dGltZSA9IG5ldyBEYXRlKDAsIDAsIDEwLCAyMywgNTksIDU5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSBpZiAodGltZS5nZXREYXRlKCkgPCAxMCkge1xuXHRcdFx0XHRcdFx0dGltZSA9IG5ldyBEYXRlKDAsIDAsIDEwLCAwLCAwLCAwKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRpbWU7XG5cdFx0XHR9O1xuXHRcdFx0dmFyIG9mZnNldEFycmF5ID0gZnVuY3Rpb24oc2V0dGluZykge1xuXHRcdFx0XHRyZXR1cm4gbmV3IERhdGUoMCwgMCwgMCwgc2V0dGluZ1swXSwgc2V0dGluZ1sxXSB8fCAwLCBzZXR0aW5nWzJdIHx8IDAsIDApO1xuXHRcdFx0fTtcblx0XHRcdHJldHVybiAoc2V0dGluZyA/ICh0eXBlb2Ygc2V0dGluZyA9PT0gJ3N0cmluZycgPyBvZmZzZXRTdHJpbmcoc2V0dGluZykgOlxuXHRcdFx0XHQodHlwZW9mIHNldHRpbmcgPT09ICdudW1iZXInID8gb2Zmc2V0TnVtZXJpYyhzZXR0aW5nKSA6XG5cdFx0XHRcdCgkLmlzQXJyYXkoc2V0dGluZykgPyBvZmZzZXRBcnJheShzZXR0aW5nKSA6IHNldHRpbmcpKSkgOiBudWxsKTtcblx0XHR9LFxuXG5cdFx0LyoqIE5vcm1hbGlzZSB0aW1lIG9iamVjdCB0byBhIGNvbW1vbiBkYXRlLlxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSB0aW1lIHtEYXRlfSBUaGUgb3JpZ2luYWwgdGltZS5cblx0XHRcdEByZXR1cm4ge0RhdGV9IFRoZSBub3JtYWxpc2VkIHRpbWUuICovXG5cdFx0X25vcm1hbGlzZVRpbWU6IGZ1bmN0aW9uKHRpbWUpIHtcblx0XHRcdGlmICghdGltZSkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdHRpbWUuc2V0RnVsbFllYXIoMTkwMCk7XG5cdFx0XHR0aW1lLnNldE1vbnRoKDApO1xuXHRcdFx0dGltZS5zZXREYXRlKDApO1xuXHRcdFx0cmV0dXJuIHRpbWU7XG5cdFx0fVxuXHR9KTtcblx0XG5cdHZhciBwbHVnaW4gPSAkLnRpbWVFbnRyeTtcblxufSkoalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS50aW1lZW50cnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LnRpbWVlbnRyeS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvdGltZUVudHJ5Lmh0bWxcclxuICAgVGltZSBlbnRyeSBmb3IgalF1ZXJ5IHYyLjAuMS5cclxuICAgV3JpdHRlbiBieSBLZWl0aCBXb29kIChrYndvb2R7YXR9aWluZXQuY29tLmF1KSBKdW5lIDIwMDcuXHJcbiAgIEF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIChodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iL21hc3Rlci9NSVQtTElDRU5TRS50eHQpIGxpY2Vuc2UuXHJcbiAgIFBsZWFzZSBhdHRyaWJ1dGUgdGhlIGF1dGhvciBpZiB5b3UgdXNlIGl0LiAqL1xyXG5cclxuKGZ1bmN0aW9uKCQpIHsgLy8gSGlkZSBzY29wZSwgbm8gJCBjb25mbGljdFxyXG5cclxuXHR2YXIgcGx1Z2luTmFtZSA9ICd0aW1lRW50cnknO1xyXG5cclxuXHQvKiogQ3JlYXRlIHRoZSB0aW1lIGVudHJ5IHBsdWdpbi5cclxuXHRcdDxwPlNldHMgYW4gaW5wdXQgZmllbGQgdG8gYWRkIGEgc3Bpbm5lciBmb3IgdGltZSBlbnRyeS48L3A+XHJcblx0XHQ8cD5UaGUgdGltZSBjYW4gYmUgZW50ZXJlZCB2aWEgZGlyZWN0bHkgdHlwaW5nIHRoZSB2YWx1ZSxcclxuXHRcdHZpYSB0aGUgYXJyb3cga2V5cywgb3IgdmlhIHNwaW5uZXIgYnV0dG9ucy5cclxuXHRcdEl0IGlzIGNvbmZpZ3VyYWJsZSB0byBzaG93IDEyIG9yIDI0LWhvdXIgdGltZSwgdG8gc2hvdyBvciBoaWRlIHNlY29uZHMsXHJcblx0XHR0byBlbmZvcmNlIGEgbWluaW11bSBhbmQvb3IgbWF4aW11bSB0aW1lLCB0byBjaGFuZ2UgdGhlIHNwaW5uZXIgaW1hZ2UsXHJcblx0XHRhbmQgdG8gY29uc3RyYWluIHRoZSB0aW1lIHRvIHN0ZXBzLCBlLmcuIG9ubHkgb24gdGhlIHF1YXJ0ZXIgaG91cnMuPC9wPlxyXG5cdFx0PHA+RXhwZWN0cyBIVE1MIGxpa2U6PC9wPlxyXG5cdFx0PHByZT4mbHQ7aW5wdXQgdHlwZT1cInRleHRcIj48L3ByZT5cclxuXHRcdDxwPlByb3ZpZGUgaW5saW5lIGNvbmZpZ3VyYXRpb24gbGlrZTo8L3A+XHJcblx0XHQ8cHJlPiZsdDtpbnB1dCB0eXBlPVwidGV4dFwiIGRhdGEtdGltZUVudHJ5PVwibmFtZTogJ3ZhbHVlJ1wiPjwvcHJlPlxyXG5cdCBcdEBtb2R1bGUgVGltZUVudHJ5XHJcblx0XHRAYXVnbWVudHMgSlFQbHVnaW5cclxuXHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLnRpbWVFbnRyeSgpXHJcbiAkKHNlbGVjdG9yKS50aW1lRW50cnkoe3Nob3dTZWNvbmRzOiB0cnVlLCBtaW5UaW1lOiBuZXcgRGF0ZSgwLCAwLCAwLCAxMiwgMCwgMCl9KSAqL1xyXG5cdCQuSlFQbHVnaW4uY3JlYXRlUGx1Z2luKHtcclxuXHRcclxuXHRcdC8qKiBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luLiAqL1xyXG5cdFx0bmFtZTogcGx1Z2luTmFtZSxcclxuXHRcdFx0XHJcblx0XHQvKiogVGltZSBlbnRyeSBiZWZvcmUgc2hvdyBjYWxsYmFjay5cclxuXHRcdFx0VHJpZ2dlcmVkIHdoZW4gdGhlIGlucHV0IGZpZWxkIGlzIGZvY3Vzc2VkLlxyXG5cdFx0XHRAY2FsbGJhY2sgYmVmb3JlU2hvd0NhbGxiYWNrXHJcblx0XHRcdEBwYXJhbSBpbnB1dCB7RWxlbWVudH0gVGhlIGN1cnJlbnQgaW5wdXQgZmllbGQuXHJcblx0XHRcdEByZXR1cm4ge29iamVjdH0gQW55IGNoYW5nZXMgdG8gdGhlIGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAZXhhbXBsZSBiZWZvcmVTaG93OiBmdW5jdGlvbihpbnB1dCkge1xyXG5cdC8vIENyb3NzLXBvcHVsYXRlIG1pbmltdW0vbWF4aW11bSB0aW1lcyBmb3IgYSByYW5nZVxyXG4gXHRyZXR1cm4ge21pblRpbWU6IChpbnB1dC5pZCA9PT0gJ3RpbWVUbycgP1xyXG4gXHRcdCQoJyN0aW1lRnJvbScpLnRpbWVFbnRyeSgnZ2V0VGltZScpIDogbnVsbCksIFxyXG4gXHRcdG1heFRpbWU6IChpbnB1dC5pZCA9PT0gJ3RpbWVGcm9tJyA/XHJcbiBcdFx0JCgnI3RpbWVUbycpLnRpbWVFbnRyeSgnZ2V0VGltZScpIDogbnVsbCl9O1xyXG4gfSAqL1xyXG5cdFx0XHRcclxuXHRcdC8qKiBUaW1lIGVudHJ5IGJlZm9yZSBzZXQgdGltZSBjYWxsYmFjay5cclxuXHRcdFx0VHJpZ2dlcmVkIHdoZW4gdGhlIGlucHV0IGZpZWxkIHZhbHVlIGlzIHRvIGJlIGNoYW5nZWQuXHJcblx0XHRcdEBjYWxsYmFjayBiZWZvcmVTZXRUaW1lQ2FsbGJhY2tcclxuXHRcdFx0QHBhcmFtIGN1cnJlbnQge3N0cmluZ30gVGhlIGN1cnJlbnQgdGltZSB2YWx1ZSBlbnRlcmVkLlxyXG5cdFx0XHRAcGFyYW0gbmV3VGltZSB7c3RyaW5nfSBUaGUgbmV3IHRpbWUgdmFsdWUgdG8gdXNlLlxyXG5cdFx0XHRAcGFyYW0gbWluVGltZSB7RGF0ZX0gVGhlIG1pbmltdW0gdGltZSB2YWx1ZSBhbGxvd2VkLlxyXG5cdFx0XHRAcGFyYW0gbWF4VGltZSB7RGF0ZX0gVGhlIG1heGltdW0gdGltZSB2YWx1ZSBhbGxvd2VkLlxyXG5cdFx0XHRAcmV0dXJuIHtEYXRlfSBUaGUgYWN0dWFsIHRpbWUgdmFsdWUgdG8gc2V0LlxyXG5cdFx0XHRAZXhhbXBsZSBiZWZvcmVTZXRUaW1lOiBmdW5jdGlvbihvbGRUaW1lLCBuZXdUaW1lLCBtaW5UaW1lLCBtYXhUaW1lKSB7XHJcbiBcdHZhciBpbmNyZW1lbnQgPSAobmV3VGltZSAtIChvbGRUaW1lIHx8IG5ld1RpbWUpKSA+IDA7XHJcbiBcdGlmIChuZXdUaW1lLmdldE1pbnV0ZXMoKSA+IDMwKSB7IC8vIEZpcnN0IGhhbGYgb2YgaG91ciBvbmx5XHJcbiBcdFx0bmV3VGltZS5zZXRNaW51dGVzKGluY3JlbWVudCA/IDAgOiAzMCk7XHJcbiBcdFx0bmV3VGltZS5zZXRIb3VycyhuZXdUaW1lLmdldEhvdXJzKCkgKyAoaW5jcmVtZW50ID8gMSA6IDApKTtcclxuIFx0fVxyXG4gXHRyZXR1cm4gbmV3VGltZTtcclxuIH0gKi9cclxuXHRcdFx0XHJcblx0XHQvKiogRGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIHBsdWdpbi5cclxuXHRcdFx0QHByb3BlcnR5IFthcHBlbmRUZXh0PScnXSB7c3RyaW5nfSBEaXNwbGF5IHRleHQgZm9sbG93aW5nIHRoZSBpbnB1dCBib3gsIGUuZy4gc2hvd2luZyB0aGUgZm9ybWF0LlxyXG5cdFx0XHRAcHJvcGVydHkgW3Nob3dTZWNvbmRzPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gc2hvdyBzZWNvbmRzIGFzIHdlbGwsXHJcblx0XHRcdFx0XHRcdDxjb2RlPmZhbHNlPC9jb2RlPiBmb3IgaG91cnMvbWludXRlcyBvbmx5LlxyXG5cdFx0XHRAcHJvcGVydHkgW3VubGltaXRlZEhvdXJzPWZhbHNlXSB7Ym9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gdG8gYWxsb3cgZW50cnkgb2YgbW9yZSB0aGFuIDI0IGhvdXJzLFxyXG5cdFx0XHRcdFx0XHQ8Y29kZT5mYWxzZTwvY29kZT4gdG8gcmVzdHJpY3QgdG8gb25lIGRheS5cclxuXHRcdFx0QHByb3BlcnR5IFt0aW1lU3RlcHM9WzEsMSwxXV0ge251bWJlcltdfSBTdGVwcyBmb3IgZWFjaCBvZiBob3Vycy9taW51dGVzL3NlY29uZHMgd2hlbiBpbmNyZW1lbnRpbmcvZGVjcmVtZW50aW5nLlxyXG5cdFx0XHRAcHJvcGVydHkgW2luaXRpYWxGaWVsZD1udWxsXSB7bnVtYmVyfSBUaGUgZmllbGQgdG8gaGlnaGxpZ2h0IGluaXRpYWxseSAoMCA9IGhvdXJzLCAxID0gbWludXRlcywgLi4uKSxcclxuXHRcdFx0XHRcdFx0b3IgPGNvZGU+bnVsbDwvY29kZT4gZm9yIG5vbmUuXHJcblx0XHRcdEBwcm9wZXJ0eSBbbm9TZXBhcmF0b3JFbnRyeT1mYWxzZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIG1vdmUgdG8gbmV4dCBzdWItZmllbGQgYWZ0ZXIgdHdvIGRpZ2l0cyBlbnRyeS5cclxuXHRcdFx0QHByb3BlcnR5IFt0YWJUb0V4aXQ9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBmb3IgdGFiIGtleSB0byBnbyB0byBuZXh0IGVsZW1lbnQsXHJcblx0XHRcdFx0XHRcdDxjb2RlPmZhbHNlPC9jb2RlPiBmb3IgdGFiIGtleSB0byBzdGVwIHRocm91Z2ggaW50ZXJuYWwgZmllbGRzLlxyXG5cdFx0XHRAcHJvcGVydHkgW3VzZU1vdXNlV2hlZWw9dHJ1ZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIHVzZSBtb3VzZSB3aGVlbCBmb3IgaW5jcmVtZW50L2RlY3JlbWVudCBpZiBwb3NzaWJsZSxcclxuXHRcdFx0XHRcdFx0PGNvZGU+ZmFsc2U8L2NvZGU+IHRvIG5ldmVyIHVzZSBpdC5cclxuXHRcdFx0QHByb3BlcnR5IFtkZWZhdWx0VGltZT1udWxsXSB7RGF0ZXxudW1iZXJ8c3RyaW5nfSBUaGUgdGltZSB0byB1c2UgaWYgbm9uZSBoYXMgYmVlbiBzZXQsXHJcblx0XHRcdFx0XHRcdG9yIDxjb2RlPm51bGw8L2NvZGU+IGZvciBub3cuIFNwZWNpZnkgYXMgYSA8Y29kZT5EYXRlPC9jb2RlPiBvYmplY3QsIGFzIGEgbnVtYmVyIG9mIHNlY29uZHNcclxuXHRcdFx0XHRcdFx0b2Zmc2V0IGZyb20gbm93LCBvciBhcyBhIHN0cmluZyBvZiBvZmZzZXRzIGZyb20gbm93LCB1c2luZyAnSCcgZm9yIGhvdXJzLFxyXG5cdFx0XHRcdFx0XHQnTScgZm9yIG1pbnV0ZXMsICdTJyBmb3Igc2Vjb25kcy5cclxuXHRcdFx0QHByb3BlcnR5IFttaW5UaW1lPW51bGxdIHtEYXRlfG51bWJlcnxzdHJpbmd8bnVtYmVyW119IFRoZSBlYXJsaWVzdCBzZWxlY3RhYmxlIHRpbWUsXHJcblx0XHRcdFx0XHRcdG9yIDxjb2RlPm51bGw8L2NvZGU+IGZvciBubyBsaW1pdC4gU2VlIDxjb2RlPmRlZmF1bHRUaW1lPC9jb2RlPiBmb3IgcG9zc2libGUgZm9ybWF0cyxcclxuXHRcdFx0XHRcdFx0dXNlIGFycmF5IG9mIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzIGZvciA8Y29kZT51bmxpbWl0ZWRIb3VyczwvY29kZT4uXHJcblx0XHRcdEBwcm9wZXJ0eSBbbWF4VGltZT1udWxsXSB7RGF0ZXxudW1iZXJ8c3RyaW5nfG51bWJlcltdfSBUaGUgbGF0ZXN0IHNlbGVjdGFibGUgdGltZSxcclxuXHRcdFx0XHRcdFx0b3IgPGNvZGU+bnVsbDwvY29kZT4gZm9yIG5vIGxpbWl0LiBTZWUgPGNvZGU+ZGVmYXVsdFRpbWU8L2NvZGU+IGZvciBwb3NzaWJsZSBmb3JtYXRzLFxyXG5cdFx0XHRcdFx0XHR1c2UgYXJyYXkgb2YgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgZm9yIDxjb2RlPnVubGltaXRlZEhvdXJzPC9jb2RlPi5cclxuXHRcdFx0QHByb3BlcnR5IFtzcGlubmVySW1hZ2U9J3NwaW5uZXJEZWZhdWx0LnBuZyddIHtzdHJpbmd9IFRoZSBVUkwgb2YgdGhlIGltYWdlcyB0byB1c2UgZm9yIHRoZSB0aW1lIHNwaW5uZXIgLVxyXG5cdFx0XHRcdFx0XHRzZXZlbiBpbWFnZXMgcGFja2VkIGhvcml6b250YWxseSBmb3Igbm9ybWFsLCBlYWNoIGJ1dHRvbiBwcmVzc2VkXHJcblx0XHRcdFx0XHRcdChjZW50cmUsIHByZXZpb3VzLCBuZXh0LCBpbmNyZW1lbnQsIGRlY3JlbWVudCksIGFuZCBkaXNhYmxlZC5cclxuXHRcdFx0QHByb3BlcnR5IFtzcGlubmVyU2l6ZT1bMjAsMjAsOF1dIHtudW1iZXJbXX0gVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHNwaW5uZXIgaW1hZ2UsXHJcblx0XHRcdFx0XHRcdGFuZCBzaXplIG9mIGNlbnRyZSBidXR0b24gZm9yIGN1cnJlbnQgdGltZS5cclxuXHRcdFx0QHByb3BlcnR5IFtzcGlubmVyQmlnSW1hZ2U9JyddIHtzdHJpbmd9IFRoZSBVUkwgb2YgdGhlIGltYWdlcyB0byB1c2UgZm9yIHRoZSBleHBhbmRlZCB0aW1lIHNwaW5uZXIgLVxyXG5cdFx0XHRcdFx0XHRzZXZlbiBpbWFnZXMgcGFja2VkIGhvcml6b250YWxseSBmb3Igbm9ybWFsLCBlYWNoIGJ1dHRvbiBwcmVzc2VkXHJcblx0XHRcdFx0XHRcdChjZW50cmUsIHByZXZpb3VzLCBuZXh0LCBpbmNyZW1lbnQsIGRlY3JlbWVudCksIGFuZCBkaXNhYmxlZC5cclxuXHRcdFx0QHByb3BlcnR5IFtzcGlubmVyQmlnU2l6ZT1bNDAsNDAsMTZdXSB7bnVtYmVyW119IFRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBleHBhbmRlZCBzcGlubmVyIGltYWdlLFxyXG5cdFx0XHRcdFx0XHRhbmQgc2l6ZSBvZiBjZW50cmUgYnV0dG9uIGZvciBjdXJyZW50IHRpbWUuXHJcblx0XHRcdEBwcm9wZXJ0eSBbc3Bpbm5lckluY0RlY09ubHk9ZmFsc2VdIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBmb3IgaW5jcmVtZW50L2RlY3JlbWVudCBidXR0b25zIG9ubHksIDxjb2RlPmZhbHNlPC9jb2RlPiBmb3IgYWxsLlxyXG5cdFx0XHRAcHJvcGVydHkgW3NwaW5uZXJSZXBlYXQ9WzUwMCwyNTBdXSB7bnVtYmVyW119IEluaXRpYWwgYW5kIHN1YnNlcXVlbnQgd2FpdHMgaW4gbWlsbGlzZWNvbmRzXHJcblx0XHRcdFx0XHRcdGZvciByZXBlYXRzIG9uIHRoZSBzcGlubmVyIGJ1dHRvbnMuXHJcblx0XHRcdEBwcm9wZXJ0eSBbYmVmb3JlU2hvdz1udWxsXSB7YmVmb3JlU2hvd0NhbGxiYWNrfSBGdW5jdGlvbiB0aGF0IHRha2VzIGFuIGlucHV0IGZpZWxkIGFuZFxyXG5cdFx0XHRcdFx0XHRyZXR1cm5zIGEgc2V0IG9mIGN1c3RvbSBzZXR0aW5ncyBmb3IgdGhlIHRpbWUgZW50cnkuXHJcblx0XHRcdEBwcm9wZXJ0eSBbYmVmb3JlU2V0VGltZT1udWxsXSB7YmVmb3JlU2V0VGltZUNhbGxiYWNrfSBGdW5jdGlvbiB0aGF0IHJ1bnMgYmVmb3JlIHVwZGF0aW5nIHRoZSB0aW1lLFxyXG5cdFx0XHRcdFx0XHR0YWtlcyB0aGUgb2xkIGFuZCBuZXcgdGltZXMsIGFuZCBtaW5pbXVtIGFuZCBtYXhpbXVtIHRpbWVzIGFzIHBhcmFtZXRlcnMsXHJcblx0XHRcdFx0XHRcdGFuZCByZXR1cm5zIGFuIGFkanVzdGVkIHRpbWUgaWYgbmVjZXNzYXJ5LlxyXG5cdFx0XHRAZXhhbXBsZSB7ZGVmYXVsdFRpbWU6IG5ldyBEYXRlKDAsIDAsIDAsIDgsIDMwLCAwKSwgbWluVGltZTogLTMwMCwgbWF4VGltZTogJysySCArMzBNJ30gKi9cclxuXHRcdGRlZmF1bHRPcHRpb25zOiB7XHJcblx0XHRcdGFwcGVuZFRleHQ6ICcnLFxyXG5cdFx0XHRzaG93U2Vjb25kczogZmFsc2UsXHJcblx0XHRcdHVubGltaXRlZEhvdXJzOiBmYWxzZSxcclxuXHRcdFx0dGltZVN0ZXBzOiBbMSwgMSwgMV0sXHJcblx0XHRcdGluaXRpYWxGaWVsZDogbnVsbCxcclxuXHRcdFx0bm9TZXBhcmF0b3JFbnRyeTogZmFsc2UsXHJcblx0XHRcdHRhYlRvRXhpdDogZmFsc2UsXHJcblx0XHRcdHVzZU1vdXNlV2hlZWw6IHRydWUsXHJcblx0XHRcdGRlZmF1bHRUaW1lOiBudWxsLFxyXG5cdFx0XHRtaW5UaW1lOiBudWxsLFxyXG5cdFx0XHRtYXhUaW1lOiBudWxsLFxyXG5cdFx0XHRzcGlubmVySW1hZ2U6ICdzcGlubmVyRGVmYXVsdC5wbmcnLFxyXG5cdFx0XHRzcGlubmVyU2l6ZTogWzIwLCAyMCwgOF0sXHJcblx0XHRcdHNwaW5uZXJCaWdJbWFnZTogJycsXHJcblx0XHRcdHNwaW5uZXJCaWdTaXplOiBbNDAsIDQwLCAxNl0sXHJcblx0XHRcdHNwaW5uZXJJbmNEZWNPbmx5OiBmYWxzZSxcclxuXHRcdFx0c3Bpbm5lclJlcGVhdDogWzUwMCwgMjUwXSxcclxuXHRcdFx0YmVmb3JlU2hvdzogbnVsbCxcclxuXHRcdFx0YmVmb3JlU2V0VGltZTogbnVsbFxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogTG9jYWxpc2F0aW9ucyBmb3IgdGhlIHBsdWdpbi5cclxuXHRcdFx0RW50cmllcyBhcmUgb2JqZWN0cyBpbmRleGVkIGJ5IHRoZSBsYW5ndWFnZSBjb2RlICgnJyBiZWluZyB0aGUgZGVmYXVsdCBVUy9FbmdsaXNoKS5cclxuXHRcdFx0RWFjaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcy5cclxuXHRcdFx0QHByb3BlcnR5IFtzaG93MjRIb3Vycz1mYWxzZV0ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIHVzZSAyNCBob3VyIHRpbWUsIDxjb2RlPmZhbHNlPC9jb2RlPiBmb3IgMTIgaG91ciAoQU0vUE0pLlxyXG5cdFx0XHRAcHJvcGVydHkgW3NlcGFyYXRvcj0nOiddIHtzdHJpbmd9IFRoZSBzZXBhcmF0b3IgYmV0d2VlbiB0aW1lIGZpZWxkcy5cclxuXHRcdFx0QHByb3BlcnR5IFthbXBtUHJlZml4PScnXSB7c3RyaW5nfSBUaGUgc2VwYXJhdG9yIGJlZm9yZSB0aGUgQU0vUE0gdGV4dC5cclxuXHRcdFx0QHByb3BlcnR5IFthbXBtTmFtZXM9WydBTScsJ1BNJ11dIHtzdHJpbmdbXX0gTmFtZXMgb2YgbW9ybmluZy9ldmVuaW5nIG1hcmtlcnMuXHJcblx0XHRcdEBwcm9wZXJ0eSBbc3Bpbm5lclRleHRzPVsnTm93JywnUHJldmlvdXMmbmJzcDtmaWVsZCcsJ05leHQmbmJzcDtmaWVsZCcsJ0luY3JlbWVudCcsJ0RlY3JlbWVudCddXSB7c3RyaW5nW119XHJcblx0XHRcdFx0XHRcdFRoZSBwb3B1cCB0ZXh0cyBmb3IgdGhlIHNwaW5uZXIgaW1hZ2UgYXJlYXMuICovXHJcblx0XHRyZWdpb25hbE9wdGlvbnM6IHsgLy8gQXZhaWxhYmxlIHJlZ2lvbmFsIHNldHRpbmdzLCBpbmRleGVkIGJ5IGxhbmd1YWdlL2NvdW50cnkgY29kZVxyXG5cdFx0XHQnJzogeyAvLyBEZWZhdWx0IHJlZ2lvbmFsIHNldHRpbmdzIC0gRW5nbGlzaC9VU1xyXG5cdFx0XHRcdHNob3cyNEhvdXJzOiBmYWxzZSxcclxuXHRcdFx0XHRzZXBhcmF0b3I6ICc6JyxcclxuXHRcdFx0XHRhbXBtUHJlZml4OiAnJyxcclxuXHRcdFx0XHRhbXBtTmFtZXM6IFsnQU0nLCAnUE0nXSxcclxuXHRcdFx0XHRzcGlubmVyVGV4dHM6IFsnTm93JywgJ1ByZXZpb3VzIGZpZWxkJywgJ05leHQgZmllbGQnLCAnSW5jcmVtZW50JywgJ0RlY3JlbWVudCddXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdF9nZXR0ZXJzOiBbJ2dldE9mZnNldCcsICdnZXRUaW1lJywgJ2lzRGlzYWJsZWQnXSxcclxuXHJcblx0XHRfYXBwZW5kQ2xhc3M6IHBsdWdpbk5hbWUgKyAnLWFwcGVuZCcsIC8vIENsYXNzIG5hbWUgZm9yIHRoZSBhcHBlbmRlZCBjb250ZW50XHJcblx0XHRfY29udHJvbENsYXNzOiBwbHVnaW5OYW1lICsgJy1jb250cm9sJywgLy8gQ2xhc3MgbmFtZSBmb3IgdGhlIGRhdGUgZW50cnkgY29udHJvbFxyXG5cdFx0X2V4cGFuZENsYXNzOiBwbHVnaW5OYW1lICsgJy1leHBhbmQnLCAvLyBDbGFzcyBuYW1lIGZvciB0aGUgZXhwYW5kZWQgc3Bpbm5lclxyXG5cclxuXHRcdF9kaXNhYmxlZElucHV0czogW10sIC8vIExpc3Qgb2YgdGltZSBpbnB1dHMgdGhhdCBoYXZlIGJlZW4gZGlzYWJsZWRcclxuXHJcblx0XHRfaW5zdFNldHRpbmdzOiBmdW5jdGlvbihlbGVtLCBvcHRpb25zKSB7XHJcblx0XHRcdHJldHVybiB7X2ZpZWxkOiAwLCBfc2VsZWN0ZWRIb3VyOiAwLCBfc2VsZWN0ZWRNaW51dGU6IDAsIF9zZWxlY3RlZFNlY29uZDogMH07XHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHRfcG9zdEF0dGFjaDogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xyXG5cdFx0XHRlbGVtLm9uKCdmb2N1cy4nICsgaW5zdC5uYW1lLCB0aGlzLl9kb0ZvY3VzKS5cclxuXHRcdFx0XHRvbignYmx1ci4nICsgaW5zdC5uYW1lLCB0aGlzLl9kb0JsdXIpLlxyXG5cdFx0XHRcdG9uKCdjbGljay4nICsgaW5zdC5uYW1lLCB0aGlzLl9kb0NsaWNrKS5cclxuXHRcdFx0XHRvbigna2V5ZG93bi4nICsgaW5zdC5uYW1lLCB0aGlzLl9kb0tleURvd24pLlxyXG5cdFx0XHRcdG9uKCdrZXlwcmVzcy4nICsgaW5zdC5uYW1lLCB0aGlzLl9kb0tleVByZXNzKS5cclxuXHRcdFx0XHRvbigncGFzdGUuJyArIGluc3QubmFtZSwgZnVuY3Rpb24oZXZlbnQpIHsgLy8gQ2hlY2sgcGFzdGVzXHJcblx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBwbHVnaW4uX3BhcnNlVGltZShpbnN0KTsgfSwgMSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdF9vcHRpb25zQ2hhbmdlZDogZnVuY3Rpb24oZWxlbSwgaW5zdCwgb3B0aW9ucykge1xyXG5cdFx0XHR2YXIgY3VycmVudFRpbWUgPSB0aGlzLl9leHRyYWN0VGltZShpbnN0KTtcclxuXHRcdFx0JC5leHRlbmQoaW5zdC5vcHRpb25zLCBvcHRpb25zKTtcclxuXHRcdFx0aW5zdC5vcHRpb25zLnNob3cyNEhvdXJzID0gaW5zdC5vcHRpb25zLnNob3cyNEhvdXJzIHx8IGluc3Qub3B0aW9ucy51bmxpbWl0ZWRIb3VycztcclxuXHRcdFx0aW5zdC5fZmllbGQgPSAwO1xyXG5cdFx0XHRpZiAoY3VycmVudFRpbWUpIHtcclxuXHRcdFx0XHR0aGlzLl9zZXRUaW1lKGluc3QsIG5ldyBEYXRlKDAsIDAsIDAsIGN1cnJlbnRUaW1lWzBdLCBjdXJyZW50VGltZVsxXSwgY3VycmVudFRpbWVbMl0pKTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBSZW1vdmUgc3R1ZmYgZGVwZW5kZW50IG9uIG9sZCBzZXR0aW5nc1xyXG5cdFx0XHRlbGVtLm5leHQoJ3NwYW4uJyArIHRoaXMuX2FwcGVuZENsYXNzKS5yZW1vdmUoKTtcclxuXHRcdFx0ZWxlbS5wYXJlbnQoKS5maW5kKCdzcGFuLicgKyB0aGlzLl9jb250cm9sQ2xhc3MpLnJlbW92ZSgpO1xyXG5cdFx0XHRpZiAoJC5mbi5tb3VzZXdoZWVsKSB7XHJcblx0XHRcdFx0ZWxlbS51bm1vdXNld2hlZWwoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBBbmQgcmUtYWRkIGlmIHJlcXVlc3RlZFxyXG5cdFx0XHR2YXIgc3Bpbm5lciA9ICghaW5zdC5vcHRpb25zLnNwaW5uZXJJbWFnZSA/IG51bGwgOlxyXG5cdFx0XHRcdCQoJzxzcGFuIGNsYXNzPVwiJyArIHRoaXMuX2NvbnRyb2xDbGFzcyArICdcIiBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9jazsgJyArXHJcblx0XHRcdFx0J2JhY2tncm91bmQ6IHVybChcXCcnICsgaW5zdC5vcHRpb25zLnNwaW5uZXJJbWFnZSArICdcXCcpIDAgMCBuby1yZXBlYXQ7IHdpZHRoOiAnICsgXHJcblx0XHRcdFx0aW5zdC5vcHRpb25zLnNwaW5uZXJTaXplWzBdICsgJ3B4OyBoZWlnaHQ6ICcgKyBpbnN0Lm9wdGlvbnMuc3Bpbm5lclNpemVbMV0gKyAncHg7XCI+PC9zcGFuPicpKTtcclxuXHRcdFx0ZWxlbS5hZnRlcihpbnN0Lm9wdGlvbnMuYXBwZW5kVGV4dCA/ICc8c3BhbiBjbGFzcz1cIicgKyB0aGlzLl9hcHBlbmRDbGFzcyArICdcIj4nICtcclxuXHRcdFx0XHRpbnN0Lm9wdGlvbnMuYXBwZW5kVGV4dCArICc8L3NwYW4+JyA6ICcnKS5hZnRlcihzcGlubmVyIHx8ICcnKTtcclxuXHRcdFx0Ly8gQWxsb3cgbW91c2Ugd2hlZWwgdXNhZ2VcclxuXHRcdFx0aWYgKGluc3Qub3B0aW9ucy51c2VNb3VzZVdoZWVsICYmICQuZm4ubW91c2V3aGVlbCkge1xyXG5cdFx0XHRcdGVsZW0ubW91c2V3aGVlbCh0aGlzLl9kb01vdXNlV2hlZWwpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChzcGlubmVyKSB7XHJcblx0XHRcdFx0c3Bpbm5lci5tb3VzZWRvd24odGhpcy5faGFuZGxlU3Bpbm5lcikubW91c2V1cCh0aGlzLl9lbmRTcGlubmVyKS5cclxuXHRcdFx0XHRcdG1vdXNlb3Zlcih0aGlzLl9leHBhbmRTcGlubmVyKS5tb3VzZW91dCh0aGlzLl9lbmRTcGlubmVyKS5cclxuXHRcdFx0XHRcdG1vdXNlbW92ZSh0aGlzLl9kZXNjcmliZVNwaW5uZXIpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBFbmFibGUgYSB0aW1lIGVudHJ5IGlucHV0IGFuZCBhbnkgYXNzb2NpYXRlZCBzcGlubmVyLlxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIHNpbmdsZSBpbnB1dCBmaWVsZC5cclxuXHRcdFx0QGV4YW1wbGUgJChzZWxlY3RvcikudGltZUVudHJ5KCdlbmFibGUnKSAqL1xyXG5cdFx0ZW5hYmxlOiBmdW5jdGlvbihlbGVtKSB7XHJcblx0XHRcdHRoaXMuX2VuYWJsZURpc2FibGUoZWxlbSwgZmFsc2UpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGlzYWJsZSBhIHRpbWUgZW50cnkgaW5wdXQgYW5kIGFueSBhc3NvY2lhdGVkIHNwaW5uZXIuXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgc2luZ2xlIGlucHV0IGZpZWxkLlxyXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS50aW1lRW50cnkoJ2Rpc2FibGUnKSAqL1xyXG5cdFx0ZGlzYWJsZTogZnVuY3Rpb24oZWxlbSkge1xyXG5cdFx0XHR0aGlzLl9lbmFibGVEaXNhYmxlKGVsZW0sIHRydWUpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRW5hYmxlIG9yIGRpc2FibGUgYSB0aW1lIGVudHJ5IGlucHV0IGFuZCBhbnkgYXNzb2NpYXRlZCBzcGlubmVyLlxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIHNpbmdsZSBpbnB1dCBmaWVsZC5cclxuXHRcdFx0QHBhcmFtIGRpc2FibGUge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IHRvIGRpc2FibGUsIDxjb2RlPmZhbHNlPC9jb2RlPiB0byBlbmFibGUuICovXHJcblx0XHRfZW5hYmxlRGlzYWJsZTogZnVuY3Rpb24oZWxlbSwgZGlzYWJsZSkge1xyXG5cdFx0XHR2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoZWxlbSk7XHJcblx0XHRcdGlmICghaW5zdCkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbGVtLmRpc2FibGVkID0gZGlzYWJsZTtcclxuXHRcdFx0aWYgKGVsZW0ubmV4dFNpYmxpbmcgJiYgZWxlbS5uZXh0U2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnc3BhbicpIHtcclxuXHRcdFx0XHR0aGlzLl9jaGFuZ2VTcGlubmVyKGluc3QsIGVsZW0ubmV4dFNpYmxpbmcsIChkaXNhYmxlID8gNSA6IC0xKSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5fZGlzYWJsZWRJbnB1dHMgPSAkLm1hcCh0aGlzLl9kaXNhYmxlZElucHV0cyxcclxuXHRcdFx0XHRmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gKHZhbHVlID09PSBlbGVtID8gbnVsbCA6IHZhbHVlKTsgfSk7IC8vIERlbGV0ZSBlbnRyeVxyXG5cdFx0XHRpZiAoZGlzYWJsZSkge1xyXG5cdFx0XHRcdHRoaXMuX2Rpc2FibGVkSW5wdXRzLnB1c2goZWxlbSk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENoZWNrIHdoZXRoZXIgYW4gaW5wdXQgZmllbGQgaGFzIGJlZW4gZGlzYWJsZWQuXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgaW5wdXQgZmllbGQgdG8gY2hlY2suXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgZmllbGQgaGFzIGJlZW4gZGlzYWJsZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBpdCBpcyBlbmFibGVkLlxyXG5cdFx0XHRAZXhhbXBsZSBpZiAoJChzZWxlY3RvcikuZGF0ZUVudHJ5KCdpc0Rpc2FibGVkJykpIHsuLi59ICovXHJcblx0XHRpc0Rpc2FibGVkOiBmdW5jdGlvbihlbGVtKSB7XHJcblx0XHRcdHJldHVybiAkLmluQXJyYXkoZWxlbSwgdGhpcy5fZGlzYWJsZWRJbnB1dHMpID4gLTE7XHJcblx0XHR9LFxyXG5cclxuXHRcdF9wcmVEZXN0cm95OiBmdW5jdGlvbihlbGVtLCBpbnN0KSB7XHJcblx0XHRcdGVsZW0gPSAkKGVsZW0pLm9mZignLicgKyBwbHVnaW5OYW1lKTtcclxuXHRcdFx0aWYgKCQuZm4ubW91c2V3aGVlbCkge1xyXG5cdFx0XHRcdGVsZW0udW5tb3VzZXdoZWVsKCk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5fZGlzYWJsZWRJbnB1dHMgPSAkLm1hcCh0aGlzLl9kaXNhYmxlZElucHV0cyxcclxuXHRcdFx0XHRmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gKHZhbHVlID09PSBlbGVtWzBdID8gbnVsbCA6IHZhbHVlKTsgfSk7IC8vIERlbGV0ZSBlbnRyeVxyXG5cdFx0XHRlbGVtLnNpYmxpbmdzKCcuJyArIHRoaXMuX2FwcGVuZENsYXNzICsgJywuJyArIHRoaXMuX2NvbnRyb2xDbGFzcykucmVtb3ZlKCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBJbml0aWFsaXNlIHRoZSBjdXJyZW50IHRpbWUgZm9yIGEgdGltZSBlbnRyeSBpbnB1dCBmaWVsZC5cclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBpbnB1dCBmaWVsZCB0byB1cGRhdGUuXHJcblx0XHRcdEBwYXJhbSB0aW1lIHtEYXRlfG51bWJlcnxzdHJpbmd9IFRoZSBuZXcgdGltZSBvciBvZmZzZXQgb3IgPGNvZGU+bnVsbDwvY29kZT4gdG8gY2xlYXIuXHJcblx0XHRcdFx0XHRBbiBhY3R1YWwgdGltZSBvciBvZmZzZXQgaW4gc2Vjb25kcyBmcm9tIG5vdyBvciB1bml0cyBhbmQgcGVyaW9kcyBvZiBvZmZzZXRzIGZyb20gbm93LlxyXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS50aW1lRW50cnkoJ3NldFRpbWUnLCBuZXcgRGF0ZSgwLCAwLCAwLCAxMSwgMjIsIDMzKSlcclxuICQoc2VsZWN0b3IpLnRpbWVFbnRyeSgnc2V0VGltZScsICszMDApXHJcbiAkKHNlbGVjdG9yKS50aW1lRW50cnkoJ3NldFRpbWUnLCAnKzFIICszME0nKVxyXG4gJChzZWxlY3RvcikudGltZUVudHJ5KCdzZXRUaW1lJywgbnVsbCkgKi9cclxuXHRcdHNldFRpbWU6IGZ1bmN0aW9uKGVsZW0sIHRpbWUpIHtcclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHRpZiAoaW5zdCkge1xyXG5cdFx0XHRcdGlmICh0aW1lID09PSBudWxsIHx8IHRpbWUgPT09ICcnKSB7XHJcblx0XHRcdFx0XHQkKGVsZW0pLnZhbCgnJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5fc2V0VGltZShpbnN0LCB0aW1lID8gKCQuaXNBcnJheSh0aW1lKSA/IHRpbWUgOlxyXG5cdFx0XHRcdFx0XHQodHlwZW9mIHRpbWUgPT09ICdvYmplY3QnID8gbmV3IERhdGUodGltZS5nZXRUaW1lKCkpIDogdGltZSkpIDogbnVsbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXRyaWV2ZSB0aGUgY3VycmVudCB0aW1lIGZvciBhIHRpbWUgZW50cnkgaW5wdXQgZmllbGQuXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgaW5wdXQgZmllbGQgdG8gdXBkYXRlLlxyXG5cdFx0XHRAcmV0dXJuIHtEYXRlfSBUaGUgY3VycmVudCB0aW1lIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vbmUuXHJcblx0XHRcdEBleGFtcGxlIHZhciB0aW1lID0gJChzZWxlY3RvcikudGltZUVudHJ5KCdnZXRUaW1lJykgKi9cclxuXHRcdGdldFRpbWU6IGZ1bmN0aW9uKGVsZW0pIHtcclxuXHRcdFx0dmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KGVsZW0pO1xyXG5cdFx0XHR2YXIgY3VycmVudFRpbWUgPSAoaW5zdCA/IHRoaXMuX2V4dHJhY3RUaW1lKGluc3QpIDogbnVsbCk7XHJcblx0XHRcdHJldHVybiAoIWN1cnJlbnRUaW1lID8gbnVsbCA6XHJcblx0XHRcdFx0bmV3IERhdGUoMCwgMCwgMCwgY3VycmVudFRpbWVbMF0sIGN1cnJlbnRUaW1lWzFdLCBjdXJyZW50VGltZVsyXSkpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIG1pbGxpc2Vjb25kIG9mZnNldCBmb3IgdGhlIGN1cnJlbnQgdGltZS5cclxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBpbnB1dCBmaWVsZCB0byBleGFtaW5lLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSB0aW1lIGFzIG1pbGxpc2Vjb25kcyBvZmZzZXQgb3IgemVybyBpZiBub25lLlxyXG5cdFx0XHRAZXhhbXBsZSB2YXIgb2Zmc2V0ID0gJChzZWxlY3RvcikudGltZUVudHJ5KCdnZXRPZmZzZXQnKSAqL1xyXG5cdFx0Z2V0T2Zmc2V0OiBmdW5jdGlvbihlbGVtKSB7XHJcblx0XHRcdHZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdChlbGVtKTtcclxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gKGluc3QgPyB0aGlzLl9leHRyYWN0VGltZShpbnN0KSA6IG51bGwpO1xyXG5cdFx0XHRyZXR1cm4gKCFjdXJyZW50VGltZSA/IDAgOlxyXG5cdFx0XHRcdChjdXJyZW50VGltZVswXSAqIDM2MDAgKyBjdXJyZW50VGltZVsxXSAqIDYwICsgY3VycmVudFRpbWVbMl0pICogMTAwMCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBJbml0aWFsaXNlIGRhdGUgZW50cnkuXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fEV2ZW50fSBUaGUgaW5wdXQgZmllbGQgb3IgdGhlIGZvY3VzIGV2ZW50LiAqL1xyXG5cdFx0X2RvRm9jdXM6IGZ1bmN0aW9uKGVsZW0pIHtcclxuXHRcdFx0dmFyIGlucHV0ID0gKGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnID8gZWxlbSA6IHRoaXMpO1xyXG5cdFx0XHRpZiAocGx1Z2luLl9sYXN0SW5wdXQgPT09IGlucHV0IHx8IHBsdWdpbi5pc0Rpc2FibGVkKGlucHV0KSkge1xyXG5cdFx0XHRcdHBsdWdpbi5fZm9jdXNzZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoaW5wdXQpO1xyXG5cdFx0XHRwbHVnaW4uX2ZvY3Vzc2VkID0gdHJ1ZTtcclxuXHRcdFx0cGx1Z2luLl9sYXN0SW5wdXQgPSBpbnB1dDtcclxuXHRcdFx0cGx1Z2luLl9ibHVycmVkSW5wdXQgPSBudWxsO1xyXG5cdFx0XHQkLmV4dGVuZChpbnN0Lm9wdGlvbnMsICgkLmlzRnVuY3Rpb24oaW5zdC5vcHRpb25zLmJlZm9yZVNob3cpID9cclxuXHRcdFx0XHRpbnN0Lm9wdGlvbnMuYmVmb3JlU2hvdy5hcHBseShpbnB1dCwgW2lucHV0XSkgOiB7fSkpO1xyXG5cdFx0XHRcdHBsdWdpbi5fcGFyc2VUaW1lKGluc3QsIGVsZW0ubm9kZU5hbWUgPyBudWxsIDogZWxlbSk7XHJcblx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHBsdWdpbi5fc2hvd0ZpZWxkKGluc3QpOyB9LCAxMCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBOb3RlIHRoYXQgdGhlIGZpZWxkIGhhcyBiZWVuIGV4aXRlZC5cclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIGJsdXIgZXZlbnQuICovXHJcblx0XHRfZG9CbHVyOiBmdW5jdGlvbihldmVudCkge1xyXG5cdFx0XHRwbHVnaW4uX2JsdXJyZWRJbnB1dCA9IHBsdWdpbi5fbGFzdElucHV0O1xyXG5cdFx0XHRwbHVnaW4uX2xhc3RJbnB1dCA9IG51bGw7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBTZWxlY3QgYXBwcm9wcmlhdGUgZmllbGQgcG9ydGlvbiBvbiBjbGljaywgaWYgYWxyZWFkeSBpbiB0aGUgZmllbGQuXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBjbGljayBldmVudC4gKi9cclxuXHRcdF9kb0NsaWNrOiBmdW5jdGlvbihldmVudCkge1xyXG5cdFx0XHR2YXIgaW5wdXQgPSBldmVudC50YXJnZXQ7XHJcblx0XHRcdHZhciBpbnN0ID0gcGx1Z2luLl9nZXRJbnN0KGlucHV0KTtcclxuXHRcdFx0dmFyIHByZXZGaWVsZCA9IGluc3QuX2ZpZWxkO1xyXG5cdFx0XHRpZiAoIXBsdWdpbi5fZm9jdXNzZWQpIHtcclxuXHRcdFx0XHRpbnN0Ll9maWVsZCA9IHBsdWdpbi5fZ2V0U2VsZWN0aW9uKGluc3QsIGlucHV0LCBldmVudCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHByZXZGaWVsZCAhPT0gaW5zdC5fZmllbGQpIHtcclxuXHRcdFx0XHRpbnN0Ll9sYXN0Q2hyID0gJyc7XHJcblx0XHRcdH1cclxuXHRcdFx0cGx1Z2luLl9zaG93RmllbGQoaW5zdCk7XHJcblx0XHRcdHBsdWdpbi5fZm9jdXNzZWQgPSBmYWxzZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEZpbmQgdGhlIHNlbGVjdGVkIHN1YmZpZWxkIHdpdGhpbiB0aGUgY29udHJvbC5cclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBwYXJhbSBpbnB1dCB7RWxlbWVudH0gVGhlIGlucHV0IGNvbnRyb2wuXHJcblx0XHRcdEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSB0cmlnZ2VyaW5nIGV2ZW50LlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBzZWxlY3RlZCBzdWJmaWVsZC4gKi9cclxuXHRcdF9nZXRTZWxlY3Rpb246IGZ1bmN0aW9uKGluc3QsIGlucHV0LCBldmVudCkge1xyXG5cdFx0XHR2YXIgc2VsZWN0ID0gMDtcclxuXHRcdFx0dmFyIGZpZWxkU2l6ZXMgPSBbaW5zdC5lbGVtLnZhbCgpLnNwbGl0KGluc3Qub3B0aW9ucy5zZXBhcmF0b3IpWzBdLmxlbmd0aCwgMiwgMl07XHJcblx0XHRcdGlmIChpbnB1dC5zZWxlY3Rpb25TdGFydCAhPT0gbnVsbCkgeyAvLyBVc2UgaW5wdXQgc2VsZWN0IHJhbmdlXHJcblx0XHRcdFx0dmFyIGVuZCA9IDA7XHJcblx0XHRcdFx0Zm9yICh2YXIgZmllbGQgPSAwOyBmaWVsZCA8PSBNYXRoLm1heCgxLCBpbnN0Ll9zZWNvbmRGaWVsZCwgaW5zdC5fYW1wbUZpZWxkKTsgZmllbGQrKykge1xyXG5cdFx0XHRcdFx0ZW5kICs9IChmaWVsZCAhPT0gaW5zdC5fYW1wbUZpZWxkID8gZmllbGRTaXplc1tmaWVsZF0gKyBpbnN0Lm9wdGlvbnMuc2VwYXJhdG9yLmxlbmd0aCA6XHJcblx0XHRcdFx0XHRcdGluc3Qub3B0aW9ucy5hbXBtUHJlZml4Lmxlbmd0aCArIGluc3Qub3B0aW9ucy5hbXBtTmFtZXNbMF0ubGVuZ3RoKTtcclxuXHRcdFx0XHRcdHNlbGVjdCA9IGZpZWxkO1xyXG5cdFx0XHRcdFx0aWYgKGlucHV0LnNlbGVjdGlvblN0YXJ0IDwgZW5kKSB7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmIChpbnB1dC5jcmVhdGVUZXh0UmFuZ2UgJiYgZXZlbnQgIT0gbnVsbCkgeyAvLyBDaGVjayBhZ2FpbnN0IGJvdW5kaW5nIGJveGVzXHJcblx0XHRcdFx0dmFyIHNyYyA9ICQoZXZlbnQuc3JjRWxlbWVudCk7XHJcblx0XHRcdFx0dmFyIHJhbmdlID0gaW5wdXQuY3JlYXRlVGV4dFJhbmdlKCk7XHJcblx0XHRcdFx0dmFyIGNvbnZlcnQgPSBmdW5jdGlvbih2YWx1ZSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHt0aGluOiAyLCBtZWRpdW06IDQsIHRoaWNrOiA2fVt2YWx1ZV0gfHwgdmFsdWU7XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHR2YXIgb2Zmc2V0WCA9IGV2ZW50LmNsaWVudFggKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCAtXHJcblx0XHRcdFx0XHQoc3JjLm9mZnNldCgpLmxlZnQgKyBwYXJzZUludChjb252ZXJ0KHNyYy5jc3MoJ2JvcmRlci1sZWZ0LXdpZHRoJykpLCAxMCkpIC1cclxuXHRcdFx0XHRcdHJhbmdlLm9mZnNldExlZnQ7IC8vIFBvc2l0aW9uIC0gbGVmdCBlZGdlIC0gYWxpZ25tZW50XHJcblx0XHRcdFx0Zm9yICh2YXIgZmllbGQgPSAwOyBmaWVsZCA8PSBNYXRoLm1heCgxLCBpbnN0Ll9zZWNvbmRGaWVsZCwgaW5zdC5fYW1wbUZpZWxkKTsgZmllbGQrKykge1xyXG5cdFx0XHRcdFx0dmFyIGVuZCA9IChmaWVsZCAhPT0gaW5zdC5fYW1wbUZpZWxkID8gKGZpZWxkICogZmllbGRTaXplKSArIDIgOlxyXG5cdFx0XHRcdFx0XHQoaW5zdC5fYW1wbUZpZWxkICogZmllbGRTaXplKSArIGluc3Qub3B0aW9ucy5hbXBtUHJlZml4Lmxlbmd0aCArXHJcblx0XHRcdFx0XHRcdGluc3Qub3B0aW9ucy5hbXBtTmFtZXNbMF0ubGVuZ3RoKTtcclxuXHRcdFx0XHRcdHJhbmdlLmNvbGxhcHNlKCk7XHJcblx0XHRcdFx0XHRyYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmQpO1xyXG5cdFx0XHRcdFx0c2VsZWN0ID0gZmllbGQ7XHJcblx0XHRcdFx0XHRpZiAob2Zmc2V0WCA8IHJhbmdlLmJvdW5kaW5nV2lkdGgpIHsgLy8gQW5kIGNvbXBhcmVcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBzZWxlY3Q7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBIYW5kbGUga2V5c3Ryb2tlcyBpbiB0aGUgZmllbGQuXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBrZXlkb3duIGV2ZW50LlxyXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBjb250aW51ZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IHRvIHN0b3AgcHJvY2Vzc2luZy4gKi9cclxuXHRcdF9kb0tleURvd246IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblx0XHRcdGlmIChldmVudC5rZXlDb2RlID49IDQ4KSB7IC8vID49ICcwJ1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBpbnN0ID0gcGx1Z2luLl9nZXRJbnN0KGV2ZW50LnRhcmdldCk7XHJcblx0XHRcdHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xyXG5cdFx0XHRcdGNhc2UgOTogcmV0dXJuIChpbnN0Lm9wdGlvbnMudGFiVG9FeGl0ID8gdHJ1ZSA6IChldmVudC5zaGlmdEtleSA/XHJcblx0XHRcdFx0XHRcdFx0Ly8gTW92ZSB0byBwcmV2aW91cyB0aW1lIGZpZWxkLCBvciBvdXQgaWYgYXQgdGhlIGJlZ2lubmluZ1xyXG5cdFx0XHRcdFx0XHRcdHBsdWdpbi5fY2hhbmdlRmllbGQoaW5zdCwgLTEsIHRydWUpIDpcclxuXHRcdFx0XHRcdFx0XHQvLyBNb3ZlIHRvIG5leHQgdGltZSBmaWVsZCwgb3Igb3V0IGlmIGF0IHRoZSBlbmRcclxuXHRcdFx0XHRcdFx0XHRwbHVnaW4uX2NoYW5nZUZpZWxkKGluc3QsICsxLCB0cnVlKSkpO1xyXG5cdFx0XHRcdGNhc2UgMzU6IGlmIChldmVudC5jdHJsS2V5KSB7IC8vIENsZWFyIHRpbWUgb24gY3RybCtlbmRcclxuXHRcdFx0XHRcdFx0XHRwbHVnaW4uX3NldFZhbHVlKGluc3QsICcnKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRlbHNlIHsgLy8gTGFzdCBmaWVsZCBvbiBlbmRcclxuXHRcdFx0XHRcdFx0XHRpbnN0Ll9maWVsZCA9IE1hdGgubWF4KDEsIGluc3QuX3NlY29uZEZpZWxkLCBpbnN0Ll9hbXBtRmllbGQpO1xyXG5cdFx0XHRcdFx0XHRcdHBsdWdpbi5fYWRqdXN0RmllbGQoaW5zdCwgMCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSAzNjogaWYgKGV2ZW50LmN0cmxLZXkpIHsgLy8gQ3VycmVudCB0aW1lIG9uIGN0cmwraG9tZVxyXG5cdFx0XHRcdFx0XHRcdHBsdWdpbi5fc2V0VGltZShpbnN0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRlbHNlIHsgLy8gRmlyc3QgZmllbGQgb24gaG9tZVxyXG5cdFx0XHRcdFx0XHRcdGluc3QuX2ZpZWxkID0gMDtcclxuXHRcdFx0XHRcdFx0XHRwbHVnaW4uX2FkanVzdEZpZWxkKGluc3QsIDApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgMzc6IHBsdWdpbi5fY2hhbmdlRmllbGQoaW5zdCwgLTEsIGZhbHNlKTsgYnJlYWs7IC8vIFByZXZpb3VzIGZpZWxkIG9uIGxlZnRcclxuXHRcdFx0XHRjYXNlIDM4OiBwbHVnaW4uX2FkanVzdEZpZWxkKGluc3QsICsxKTsgYnJlYWs7IC8vIEluY3JlbWVudCB0aW1lIGZpZWxkIG9uIHVwXHJcblx0XHRcdFx0Y2FzZSAzOTogcGx1Z2luLl9jaGFuZ2VGaWVsZChpbnN0LCArMSwgZmFsc2UpOyBicmVhazsgLy8gTmV4dCBmaWVsZCBvbiByaWdodFxyXG5cdFx0XHRcdGNhc2UgNDA6IHBsdWdpbi5fYWRqdXN0RmllbGQoaW5zdCwgLTEpOyBicmVhazsgLy8gRGVjcmVtZW50IHRpbWUgZmllbGQgb24gZG93blxyXG5cdFx0XHRcdGNhc2UgNDY6IHBsdWdpbi5fc2V0VmFsdWUoaW5zdCwgJycpOyBicmVhazsgLy8gQ2xlYXIgdGltZSBvbiBkZWxldGVcclxuXHRcdFx0XHRjYXNlIDg6IGluc3QuX2xhc3RDaHIgPSAnJzsgLy8gRmFsbCB0aHJvdWdoXHJcblx0XHRcdFx0ZGVmYXVsdDogcmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogRGlzYWxsb3cgdW53YW50ZWQgY2hhcmFjdGVycy5cclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIGtleXByZXNzIGV2ZW50LlxyXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiB0byBjb250aW51ZSwgPGNvZGU+ZmFsc2U8L2NvZGU+IHRvIHN0b3AgcHJvY2Vzc2luZy4gKi9cclxuXHRcdF9kb0tleVByZXNzOiBmdW5jdGlvbihldmVudCkge1xyXG5cdFx0XHR2YXIgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSA9PT0gdW5kZWZpbmVkID8gZXZlbnQua2V5Q29kZSA6IGV2ZW50LmNoYXJDb2RlKTtcclxuXHRcdFx0aWYgKGNociA8ICcgJykge1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhciBpbnN0ID0gcGx1Z2luLl9nZXRJbnN0KGV2ZW50LnRhcmdldCk7XHJcblx0XHRcdHBsdWdpbi5faGFuZGxlS2V5UHJlc3MoaW5zdCwgY2hyKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogVXBkYXRlIGRhdGUgYmFzZWQgb24ga2V5c3Ryb2tlIGVudGVyZWQuXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QHBhcmFtIGNociB7c3RyaW5nfSBUaGUgbmV3IGNoYXJhY3Rlci4gKi9cclxuXHRcdF9oYW5kbGVLZXlQcmVzczogZnVuY3Rpb24oaW5zdCwgY2hyKSB7XHJcblx0XHRcdGlmIChjaHIgPT09IGluc3Qub3B0aW9ucy5zZXBhcmF0b3IpIHtcclxuXHRcdFx0XHR0aGlzLl9jaGFuZ2VGaWVsZChpbnN0LCArMSwgZmFsc2UpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKGNociA+PSAnMCcgJiYgY2hyIDw9ICc5JykgeyAvLyBBbGxvdyBkaXJlY3QgZW50cnkgb2YgZGF0ZVxyXG5cdFx0XHRcdHZhciBrZXkgPSBwYXJzZUludChjaHIsIDEwKTtcclxuXHRcdFx0XHR2YXIgdmFsdWUgPSBwYXJzZUludChpbnN0Ll9sYXN0Q2hyICsgY2hyLCAxMCk7XHJcblx0XHRcdFx0dmFyIGhvdXIgPSAoaW5zdC5fZmllbGQgIT09IDAgPyBpbnN0Ll9zZWxlY3RlZEhvdXIgOlxyXG5cdFx0XHRcdFx0KGluc3Qub3B0aW9ucy51bmxpbWl0ZWRIb3VycyA/IHZhbHVlIDpcclxuXHRcdFx0XHRcdChpbnN0Lm9wdGlvbnMuc2hvdzI0SG91cnMgPyAodmFsdWUgPCAyNCA/IHZhbHVlIDoga2V5KSA6XHJcblx0XHRcdFx0XHQodmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSAxMiA/IHZhbHVlIDpcclxuXHRcdFx0XHRcdChrZXkgPiAwID8ga2V5IDogaW5zdC5fc2VsZWN0ZWRIb3VyKSkgJSAxMiArXHJcblx0XHRcdFx0XHQoaW5zdC5fc2VsZWN0ZWRIb3VyID49IDEyID8gMTIgOiAwKSkpKTtcclxuXHRcdFx0XHR2YXIgbWludXRlID0gKGluc3QuX2ZpZWxkICE9PSAxID8gaW5zdC5fc2VsZWN0ZWRNaW51dGUgOlxyXG5cdFx0XHRcdFx0KHZhbHVlIDwgNjAgPyB2YWx1ZSA6IGtleSkpO1xyXG5cdFx0XHRcdHZhciBzZWNvbmQgPSAoaW5zdC5fZmllbGQgIT09IGluc3QuX3NlY29uZEZpZWxkID8gaW5zdC5fc2VsZWN0ZWRTZWNvbmQgOlxyXG5cdFx0XHRcdFx0KHZhbHVlIDwgNjAgPyB2YWx1ZSA6IGtleSkpO1xyXG5cdFx0XHRcdHZhciBmaWVsZHMgPSB0aGlzLl9jb25zdHJhaW5UaW1lKGluc3QsIFtob3VyLCBtaW51dGUsIHNlY29uZF0pO1xyXG5cdFx0XHRcdHRoaXMuX3NldFRpbWUoaW5zdCwgKGluc3Qub3B0aW9ucy51bmxpbWl0ZWRIb3VycyA/IGZpZWxkcyA6XHJcblx0XHRcdFx0XHRuZXcgRGF0ZSgwLCAwLCAwLCBmaWVsZHNbMF0sIGZpZWxkc1sxXSwgZmllbGRzWzJdKSkpO1xyXG5cdFx0XHRcdGlmIChpbnN0Lm9wdGlvbnMubm9TZXBhcmF0b3JFbnRyeSAmJiBpbnN0Ll9sYXN0Q2hyKSB7XHJcblx0XHRcdFx0XHR0aGlzLl9jaGFuZ2VGaWVsZChpbnN0LCArMSwgZmFsc2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdGluc3QuX2xhc3RDaHIgPSAoaW5zdC5vcHRpb25zLnVubGltaXRlZEhvdXJzICYmIGluc3QuX2ZpZWxkID09PSAwID8gaW5zdC5fbGFzdENociArIGNociA6IGNocik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKCFpbnN0Lm9wdGlvbnMuc2hvdzI0SG91cnMpIHsgLy8gU2V0IGFtL3BtIGJhc2VkIG9uIGZpcnN0IGNoYXIgb2YgbmFtZXNcclxuXHRcdFx0XHRjaHIgPSBjaHIudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0XHRpZiAoKGNociA9PT0gaW5zdC5vcHRpb25zLmFtcG1OYW1lc1swXS5zdWJzdHJpbmcoMCwgMSkudG9Mb3dlckNhc2UoKSAmJlxyXG5cdFx0XHRcdFx0XHRpbnN0Ll9zZWxlY3RlZEhvdXIgPj0gMTIpIHx8XHJcblx0XHRcdFx0XHRcdChjaHIgPT09IGluc3Qub3B0aW9ucy5hbXBtTmFtZXNbMV0uc3Vic3RyaW5nKDAsIDEpLnRvTG93ZXJDYXNlKCkgJiZcclxuXHRcdFx0XHRcdFx0aW5zdC5fc2VsZWN0ZWRIb3VyIDwgMTIpKSB7XHJcblx0XHRcdFx0XHR2YXIgc2F2ZUZpZWxkID0gaW5zdC5fZmllbGQ7XHJcblx0XHRcdFx0XHRpbnN0Ll9maWVsZCA9IGluc3QuX2FtcG1GaWVsZDtcclxuXHRcdFx0XHRcdHRoaXMuX2FkanVzdEZpZWxkKGluc3QsICsxKTtcclxuXHRcdFx0XHRcdGluc3QuX2ZpZWxkID0gc2F2ZUZpZWxkO1xyXG5cdFx0XHRcdFx0dGhpcy5fc2hvd0ZpZWxkKGluc3QpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogSW5jcmVtZW50L2RlY3JlbWVudCBvbiBtb3VzZSB3aGVlbCBhY3Rpdml0eS5cclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIG1vdXNlIHdoZWVsIGV2ZW50LlxyXG5cdFx0XHRAcGFyYW0gZGVsdGEge251bWJlcn0gVGhlIGFtb3VudCBvZiBjaGFuZ2UuICovXHJcblx0XHRfZG9Nb3VzZVdoZWVsOiBmdW5jdGlvbihldmVudCwgZGVsdGEpIHtcclxuXHRcdFx0aWYgKHBsdWdpbi5pc0Rpc2FibGVkKGV2ZW50LnRhcmdldCkpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoZXZlbnQudGFyZ2V0KTtcclxuXHRcdFx0aW5zdC5lbGVtLmZvY3VzKCk7XHJcblx0XHRcdGlmICghaW5zdC5lbGVtLnZhbCgpKSB7XHJcblx0XHRcdFx0cGx1Z2luLl9wYXJzZVRpbWUoaW5zdCk7XHJcblx0XHRcdH1cclxuXHRcdFx0cGx1Z2luLl9hZGp1c3RGaWVsZChpbnN0LCBkZWx0YSk7XHJcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBFeHBhbmQgdGhlIHNwaW5uZXIsIGlmIHBvc3NpYmxlLCB0byBtYWtlIGl0IGVhc2llciB0byB1c2UuXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBtb3VzZSBvdmVyIGV2ZW50LiAqL1xyXG5cdFx0X2V4cGFuZFNwaW5uZXI6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblx0XHRcdHZhciBzcGlubmVyID0gcGx1Z2luLl9nZXRTcGlubmVyVGFyZ2V0KGV2ZW50KTtcclxuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QocGx1Z2luLl9nZXRJbnB1dChzcGlubmVyKSk7XHJcblx0XHRcdGlmIChwbHVnaW4uaXNEaXNhYmxlZChpbnN0LmVsZW1bMF0pKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMuc3Bpbm5lckJpZ0ltYWdlKSB7XHJcblx0XHRcdFx0aW5zdC5fZXhwYW5kZWQgPSB0cnVlO1xyXG5cdFx0XHRcdHZhciBvZmZzZXQgPSAkKHNwaW5uZXIpLm9mZnNldCgpO1xyXG5cdFx0XHRcdHZhciByZWxhdGl2ZSA9IG51bGw7XHJcblx0XHRcdFx0JChzcGlubmVyKS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHZhciBwYXJlbnQgPSAkKHRoaXMpO1xyXG5cdFx0XHRcdFx0aWYgKHBhcmVudC5jc3MoJ3Bvc2l0aW9uJykgPT09ICdyZWxhdGl2ZScgfHwgcGFyZW50LmNzcygncG9zaXRpb24nKSA9PT0gJ2Fic29sdXRlJykge1xyXG5cdFx0XHRcdFx0XHRyZWxhdGl2ZSA9IHBhcmVudC5vZmZzZXQoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiAhcmVsYXRpdmU7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0JCgnPGRpdiBjbGFzcz1cIicgKyBwbHVnaW4uX2V4cGFuZENsYXNzICsgJ1wiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAnICtcclxuXHRcdFx0XHRcdChvZmZzZXQubGVmdCAtIChpbnN0Lm9wdGlvbnMuc3Bpbm5lckJpZ1NpemVbMF0gLSBpbnN0Lm9wdGlvbnMuc3Bpbm5lclNpemVbMF0pIC8gMiAtXHJcblx0XHRcdFx0XHQocmVsYXRpdmUgPyByZWxhdGl2ZS5sZWZ0IDogMCkpICsgJ3B4OyB0b3A6ICcgK1xyXG5cdFx0XHRcdFx0KG9mZnNldC50b3AgLSAoaW5zdC5vcHRpb25zLnNwaW5uZXJCaWdTaXplWzFdIC0gaW5zdC5vcHRpb25zLnNwaW5uZXJTaXplWzFdKSAvIDIgLVxyXG5cdFx0XHRcdFx0KHJlbGF0aXZlID8gcmVsYXRpdmUudG9wIDogMCkpICsgJ3B4OyB3aWR0aDogJyArXHJcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMuc3Bpbm5lckJpZ1NpemVbMF0gKyAncHg7IGhlaWdodDogJyArXHJcblx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMuc3Bpbm5lckJpZ1NpemVbMV0gKyAncHg7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybCgnICtcclxuXHRcdFx0XHRcdGluc3Qub3B0aW9ucy5zcGlubmVyQmlnSW1hZ2UgKyAnKSBuby1yZXBlYXQgMHB4IDBweDsgei1pbmRleDogMTA7XCI+PC9kaXY+JykuXHJcblx0XHRcdFx0XHRtb3VzZWRvd24ocGx1Z2luLl9oYW5kbGVTcGlubmVyKS5tb3VzZXVwKHBsdWdpbi5fZW5kU3Bpbm5lcikuXHJcblx0XHRcdFx0XHRtb3VzZW91dChwbHVnaW4uX2VuZEV4cGFuZCkubW91c2Vtb3ZlKHBsdWdpbi5fZGVzY3JpYmVTcGlubmVyKS5cclxuXHRcdFx0XHRcdGluc2VydEFmdGVyKHNwaW5uZXIpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBMb2NhdGUgdGhlIGFjdHVhbCBpbnB1dCBmaWVsZCBmcm9tIHRoZSBzcGlubmVyLlxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gc3Bpbm5lciB7RWxlbWVudH0gVGhlIGN1cnJlbnQgc3Bpbm5lci5cclxuXHRcdFx0QHJldHVybiB7RWxlbWVudH0gVGhlIGNvcnJlc3BvbmRpbmcgaW5wdXQuICovXHJcblx0XHRfZ2V0SW5wdXQ6IGZ1bmN0aW9uKHNwaW5uZXIpIHtcclxuXHRcdFx0cmV0dXJuICQoc3Bpbm5lcikuc2libGluZ3MoJy4nICsgdGhpcy5fZ2V0TWFya2VyKCkpWzBdO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ2hhbmdlIHRoZSB0aXRsZSBiYXNlZCBvbiBwb3NpdGlvbiB3aXRoaW4gdGhlIHNwaW5uZXIuXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBtb3VzZSBtb3ZlIGV2ZW50LiAqL1xyXG5cdFx0X2Rlc2NyaWJlU3Bpbm5lcjogZnVuY3Rpb24oZXZlbnQpIHtcclxuXHRcdFx0dmFyIHNwaW5uZXIgPSBwbHVnaW4uX2dldFNwaW5uZXJUYXJnZXQoZXZlbnQpO1xyXG5cdFx0XHR2YXIgaW5zdCA9IHBsdWdpbi5fZ2V0SW5zdChwbHVnaW4uX2dldElucHV0KHNwaW5uZXIpKTtcclxuXHRcdFx0c3Bpbm5lci50aXRsZSA9IGluc3Qub3B0aW9ucy5zcGlubmVyVGV4dHNbcGx1Z2luLl9nZXRTcGlubmVyUmVnaW9uKGluc3QsIGV2ZW50KV07XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBIYW5kbGUgYSBjbGljayBvbiB0aGUgc3Bpbm5lci5cclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIG1vdXNlIGNsaWNrIGV2ZW50LiAqL1xyXG5cdFx0X2hhbmRsZVNwaW5uZXI6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblx0XHRcdHZhciBzcGlubmVyID0gcGx1Z2luLl9nZXRTcGlubmVyVGFyZ2V0KGV2ZW50KTtcclxuXHRcdFx0dmFyIGlucHV0ID0gcGx1Z2luLl9nZXRJbnB1dChzcGlubmVyKTtcclxuXHRcdFx0aWYgKHBsdWdpbi5pc0Rpc2FibGVkKGlucHV0KSkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoaW5wdXQgPT09IHBsdWdpbi5fYmx1cnJlZElucHV0KSB7XHJcblx0XHRcdFx0cGx1Z2luLl9sYXN0SW5wdXQgPSBpbnB1dDtcclxuXHRcdFx0XHRwbHVnaW4uX2JsdXJyZWRJbnB1dCA9IG51bGw7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoaW5wdXQpO1xyXG5cdFx0XHRwbHVnaW4uX2RvRm9jdXMoaW5wdXQpO1xyXG5cdFx0XHR2YXIgcmVnaW9uID0gcGx1Z2luLl9nZXRTcGlubmVyUmVnaW9uKGluc3QsIGV2ZW50KTtcclxuXHRcdFx0cGx1Z2luLl9jaGFuZ2VTcGlubmVyKGluc3QsIHNwaW5uZXIsIHJlZ2lvbik7XHJcblx0XHRcdHBsdWdpbi5fYWN0aW9uU3Bpbm5lcihpbnN0LCByZWdpb24pO1xyXG5cdFx0XHRwbHVnaW4uX3RpbWVyID0gbnVsbDtcclxuXHRcdFx0cGx1Z2luLl9oYW5kbGluZ1NwaW5uZXIgPSB0cnVlO1xyXG5cdFx0XHRpZiAocmVnaW9uID49IDMgJiYgaW5zdC5vcHRpb25zLnNwaW5uZXJSZXBlYXRbMF0pIHsgLy8gUmVwZWF0IGluY3JlbWVudC9kZWNyZW1lbnRcclxuXHRcdFx0XHRwbHVnaW4uX3RpbWVyID0gc2V0VGltZW91dChcclxuXHRcdFx0XHRcdGZ1bmN0aW9uKCkgeyBwbHVnaW4uX3JlcGVhdFNwaW5uZXIoaW5zdCwgcmVnaW9uKTsgfSxcclxuXHRcdFx0XHRcdGluc3Qub3B0aW9ucy5zcGlubmVyUmVwZWF0WzBdKTtcclxuXHRcdFx0XHQkKHNwaW5uZXIpLm9uZSgnbW91c2VvdXQnLCBwbHVnaW4uX3JlbGVhc2VTcGlubmVyKS5cclxuXHRcdFx0XHRcdG9uZSgnbW91c2V1cCcsIHBsdWdpbi5fcmVsZWFzZVNwaW5uZXIpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBBY3Rpb24gYSBjbGljayBvbiB0aGUgc3Bpbm5lci5cclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAcGFyYW0gcmVnaW9uIHtudW1iZXJ9IFRoZSBzcGlubmVyIFwiYnV0dG9uXCIuICovXHJcblx0XHRfYWN0aW9uU3Bpbm5lcjogZnVuY3Rpb24oaW5zdCwgcmVnaW9uKSB7XHJcblx0XHRcdGlmICghaW5zdC5lbGVtLnZhbCgpKSB7XHJcblx0XHRcdFx0cGx1Z2luLl9wYXJzZVRpbWUoaW5zdCk7XHJcblx0XHRcdH1cclxuXHRcdFx0c3dpdGNoIChyZWdpb24pIHtcclxuXHRcdFx0XHRjYXNlIDA6IHRoaXMuX3NldFRpbWUoaW5zdCk7IGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgMTogdGhpcy5fY2hhbmdlRmllbGQoaW5zdCwgLTEsIGZhbHNlKTsgYnJlYWs7XHJcblx0XHRcdFx0Y2FzZSAyOiB0aGlzLl9jaGFuZ2VGaWVsZChpbnN0LCArMSwgZmFsc2UpOyBicmVhaztcclxuXHRcdFx0XHRjYXNlIDM6IHRoaXMuX2FkanVzdEZpZWxkKGluc3QsICsxKTsgYnJlYWs7XHJcblx0XHRcdFx0Y2FzZSA0OiB0aGlzLl9hZGp1c3RGaWVsZChpbnN0LCAtMSk7IGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBSZXBlYXQgYSBjbGljayBvbiB0aGUgc3Bpbm5lci5cclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAcGFyYW0gcmVnaW9uIHtudW1iZXJ9IFRoZSBzcGlubmVyIFwiYnV0dG9uXCIuICovXHJcblx0XHRfcmVwZWF0U3Bpbm5lcjogZnVuY3Rpb24oaW5zdCwgcmVnaW9uKSB7XHJcblx0XHRcdGlmICghcGx1Z2luLl90aW1lcikge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRwbHVnaW4uX2xhc3RJbnB1dCA9IHBsdWdpbi5fYmx1cnJlZElucHV0O1xyXG5cdFx0XHR0aGlzLl9hY3Rpb25TcGlubmVyKGluc3QsIHJlZ2lvbik7XHJcblx0XHRcdHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChcclxuXHRcdFx0XHRmdW5jdGlvbigpIHsgcGx1Z2luLl9yZXBlYXRTcGlubmVyKGluc3QsIHJlZ2lvbik7IH0sXHJcblx0XHRcdFx0aW5zdC5vcHRpb25zLnNwaW5uZXJSZXBlYXRbMV0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU3RvcCBhIHNwaW5uZXIgcmVwZWF0LlxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgbW91c2UgZXZlbnQuICovXHJcblx0XHRfcmVsZWFzZVNwaW5uZXI6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblx0XHRcdGNsZWFyVGltZW91dChwbHVnaW4uX3RpbWVyKTtcclxuXHRcdFx0cGx1Z2luLl90aW1lciA9IG51bGw7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBUaWR5IHVwIGFmdGVyIGFuIGV4cGFuZGVkIHNwaW5uZXIuXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBtb3VzZSBldmVudC4gKi9cclxuXHRcdF9lbmRFeHBhbmQ6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblx0XHRcdHBsdWdpbi5fdGltZXIgPSBudWxsO1xyXG5cdFx0XHR2YXIgc3Bpbm5lciA9IHBsdWdpbi5fZ2V0U3Bpbm5lclRhcmdldChldmVudCk7XHJcblx0XHRcdHZhciBpbnB1dCA9IHBsdWdpbi5fZ2V0SW5wdXQoc3Bpbm5lcik7XHJcblx0XHRcdHZhciBpbnN0ID0gcGx1Z2luLl9nZXRJbnN0KGlucHV0KTtcclxuXHRcdFx0JChzcGlubmVyKS5yZW1vdmUoKTtcclxuXHRcdFx0aW5zdC5fZXhwYW5kZWQgPSBmYWxzZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFRpZHkgdXAgYWZ0ZXIgYSBzcGlubmVyIGNsaWNrLlxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZXZlbnQge0V2ZW50fSBUaGUgbW91c2UgZXZlbnQuICovXHJcblx0XHRfZW5kU3Bpbm5lcjogZnVuY3Rpb24oZXZlbnQpIHtcclxuXHRcdFx0cGx1Z2luLl90aW1lciA9IG51bGw7XHJcblx0XHRcdHZhciBzcGlubmVyID0gcGx1Z2luLl9nZXRTcGlubmVyVGFyZ2V0KGV2ZW50KTtcclxuXHRcdFx0dmFyIGlucHV0ID0gcGx1Z2luLl9nZXRJbnB1dChzcGlubmVyKTtcclxuXHRcdFx0dmFyIGluc3QgPSBwbHVnaW4uX2dldEluc3QoaW5wdXQpO1xyXG5cdFx0XHRpZiAoIXBsdWdpbi5pc0Rpc2FibGVkKGlucHV0KSkge1xyXG5cdFx0XHRcdHBsdWdpbi5fY2hhbmdlU3Bpbm5lcihpbnN0LCBzcGlubmVyLCAtMSk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHBsdWdpbi5faGFuZGxpbmdTcGlubmVyKSB7XHJcblx0XHRcdFx0cGx1Z2luLl9sYXN0SW5wdXQgPSBwbHVnaW4uX2JsdXJyZWRJbnB1dDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAocGx1Z2luLl9sYXN0SW5wdXQgJiYgcGx1Z2luLl9oYW5kbGluZ1NwaW5uZXIpIHtcclxuXHRcdFx0XHRwbHVnaW4uX3Nob3dGaWVsZChpbnN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRwbHVnaW4uX2hhbmRsaW5nU3Bpbm5lciA9IGZhbHNlO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgdGhlIHNwaW5uZXIgZnJvbSB0aGUgZXZlbnQuXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSBtb3VzZSBjbGljayBldmVudC5cclxuXHRcdFx0QHJldHVybiB7RWxlbWVudH0gVGhlIHRhcmdldCBmaWVsZC4gKi9cclxuXHRcdF9nZXRTcGlubmVyVGFyZ2V0OiBmdW5jdGlvbihldmVudCkge1xyXG5cdFx0XHRyZXR1cm4gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBEZXRlcm1pbmUgd2hpY2ggXCJidXR0b25cIiB3aXRoaW4gdGhlIHNwaW5uZXIgd2FzIGNsaWNrZWQuXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QHBhcmFtIGV2ZW50IHtFdmVudH0gVGhlIG1vdXNlIGV2ZW50LlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJ9IFRoZSBzcGlubmVyIFwiYnV0dG9uXCIgbnVtYmVyLiAqL1xyXG5cdFx0X2dldFNwaW5uZXJSZWdpb246IGZ1bmN0aW9uKGluc3QsIGV2ZW50KSB7XHJcblx0XHRcdHZhciBzcGlubmVyID0gdGhpcy5fZ2V0U3Bpbm5lclRhcmdldChldmVudCk7XHJcblx0XHRcdHZhciBwb3MgPSAkKHNwaW5uZXIpLm9mZnNldCgpO1xyXG5cdFx0XHR2YXIgc2Nyb2xsZWQgPSBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0LFxyXG5cdFx0XHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3BdO1xyXG5cdFx0XHR2YXIgbGVmdCA9IChpbnN0Lm9wdGlvbnMuc3Bpbm5lckluY0RlY09ubHkgPyA5OSA6IGV2ZW50LmNsaWVudFggKyBzY3JvbGxlZFswXSAtIHBvcy5sZWZ0KTtcclxuXHRcdFx0dmFyIHRvcCA9IGV2ZW50LmNsaWVudFkgKyBzY3JvbGxlZFsxXSAtIHBvcy50b3A7XHJcblx0XHRcdHZhciBzcGlubmVyU2l6ZSA9IGluc3Qub3B0aW9uc1tpbnN0Ll9leHBhbmRlZCA/ICdzcGlubmVyQmlnU2l6ZScgOiAnc3Bpbm5lclNpemUnXTtcclxuXHRcdFx0dmFyIHJpZ2h0ID0gKGluc3Qub3B0aW9ucy5zcGlubmVySW5jRGVjT25seSA/IDk5IDogc3Bpbm5lclNpemVbMF0gLSAxIC0gbGVmdCk7XHJcblx0XHRcdHZhciBib3R0b20gPSBzcGlubmVyU2l6ZVsxXSAtIDEgLSB0b3A7XHJcblx0XHRcdGlmIChzcGlubmVyU2l6ZVsyXSA+IDAgJiYgTWF0aC5hYnMobGVmdCAtIHJpZ2h0KSA8PSBzcGlubmVyU2l6ZVsyXSAmJlxyXG5cdFx0XHRcdFx0TWF0aC5hYnModG9wIC0gYm90dG9tKSA8PSBzcGlubmVyU2l6ZVsyXSkge1xyXG5cdFx0XHRcdHJldHVybiAwOyAvLyBDZW50cmUgYnV0dG9uXHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIG1pbiA9IE1hdGgubWluKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7XHJcblx0XHRcdHJldHVybiAobWluID09PSBsZWZ0ID8gMSA6IChtaW4gPT09IHJpZ2h0ID8gMiA6IChtaW4gPT09IHRvcCA/IDMgOiA0KSkpOyAvLyBOZWFyZXN0IGVkZ2VcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENoYW5nZSB0aGUgc3Bpbm5lciBpbWFnZSBkZXBlbmRpbmcgb24gdGhlIGJ1dHRvbiBjbGlja2VkLlxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBwYXJhbSBzcGlubmVyIHtFbGVtZW50fSBUaGUgc3Bpbm5lciBjb250cm9sLlxyXG5cdFx0XHRAcGFyYW0gcmVnaW9uIHtudW1iZXJ9IFRoZSBzcGlubmVyIFwiYnV0dG9uXCIuICovXHJcblx0XHRfY2hhbmdlU3Bpbm5lcjogZnVuY3Rpb24oaW5zdCwgc3Bpbm5lciwgcmVnaW9uKSB7XHJcblx0XHRcdCQoc3Bpbm5lcikuY3NzKCdiYWNrZ3JvdW5kLXBvc2l0aW9uJywgJy0nICsgKChyZWdpb24gKyAxKSAqXHJcblx0XHRcdFx0aW5zdC5vcHRpb25zW2luc3QuX2V4cGFuZGVkID8gJ3NwaW5uZXJCaWdTaXplJyA6ICdzcGlubmVyU2l6ZSddWzBdKSArICdweCAwcHgnKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEV4dHJhY3QgdGhlIHRpbWUgdmFsdWUgZnJvbSB0aGUgaW5wdXQgZmllbGQsIG9yIGRlZmF1bHQgdG8gbm93LlxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBwYXJhbSBldmVudCB7RXZlbnR9IFRoZSB0cmlnZ2VyaW5nIGV2ZW50IG9yIDxjb2RlPm51bGw8L2NvZGU+LiAqL1xyXG5cdFx0X3BhcnNlVGltZTogZnVuY3Rpb24oaW5zdCwgZXZlbnQpIHtcclxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gdGhpcy5fZXh0cmFjdFRpbWUoaW5zdCk7XHJcblx0XHRcdGlmIChjdXJyZW50VGltZSkge1xyXG5cdFx0XHRcdGluc3QuX3NlbGVjdGVkSG91ciA9IGN1cnJlbnRUaW1lWzBdO1xyXG5cdFx0XHRcdGluc3QuX3NlbGVjdGVkTWludXRlID0gY3VycmVudFRpbWVbMV07XHJcblx0XHRcdFx0aW5zdC5fc2VsZWN0ZWRTZWNvbmQgPSBjdXJyZW50VGltZVsyXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHR2YXIgbm93ID0gdGhpcy5fY29uc3RyYWluVGltZShpbnN0KTtcclxuXHRcdFx0XHRpbnN0Ll9zZWxlY3RlZEhvdXIgPSBub3dbMF07XHJcblx0XHRcdFx0aW5zdC5fc2VsZWN0ZWRNaW51dGUgPSBub3dbMV07XHJcblx0XHRcdFx0aW5zdC5fc2VsZWN0ZWRTZWNvbmQgPSAoaW5zdC5vcHRpb25zLnNob3dTZWNvbmRzID8gbm93WzJdIDogMCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aW5zdC5fc2Vjb25kRmllbGQgPSAoaW5zdC5vcHRpb25zLnNob3dTZWNvbmRzID8gMiA6IC0xKTtcclxuXHRcdFx0aW5zdC5fYW1wbUZpZWxkID0gKGluc3Qub3B0aW9ucy5zaG93MjRIb3VycyA/IC0xIDogKGluc3Qub3B0aW9ucy5zaG93U2Vjb25kcyA/IDMgOiAyKSk7XHJcblx0XHRcdGluc3QuX2xhc3RDaHIgPSAnJztcclxuXHRcdFx0dmFyIHBvc3RQcm9jZXNzID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0aWYgKGluc3QuZWxlbS52YWwoKSAhPT0gJycpIHtcclxuXHRcdFx0XHRcdHBsdWdpbi5fc2hvd1RpbWUoaW5zdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cdFx0XHRpZiAodHlwZW9mIGluc3Qub3B0aW9ucy5pbml0aWFsRmllbGQgPT09ICdudW1iZXInKSB7XHJcblx0XHRcdFx0aW5zdC5fZmllbGQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihcclxuXHRcdFx0XHRcdE1hdGgubWF4KDEsIGluc3QuX3NlY29uZEZpZWxkLCBpbnN0Ll9hbXBtRmllbGQpLCBpbnN0Lm9wdGlvbnMuaW5pdGlhbEZpZWxkKSk7XHJcblx0XHRcdFx0cG9zdFByb2Nlc3MoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0aW5zdC5fZmllbGQgPSBwbHVnaW4uX2dldFNlbGVjdGlvbihpbnN0LCBpbnN0LmVsZW1bMF0sIGV2ZW50KTtcclxuXHRcdFx0XHRcdHBvc3RQcm9jZXNzKCk7XHJcblx0XHRcdFx0fSwgMCk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEV4dHJhY3QgdGhlIHRpbWUgdmFsdWUgZnJvbSBhIHN0cmluZyBhcyBhbiBhcnJheSBvZiB2YWx1ZXMsIG9yIGRlZmF1bHQgdG8gPGNvZGU+bnVsbDwvY29kZT4uXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSB2YWx1ZSB7c3RyaW5nfSBUaGUgZGF0ZSB0ZXh0LlxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEByZXR1cm4ge251bWJlcltdfSBUaGUgcmV0cmlldmVkIHRpbWUgY29tcG9uZW50cyAoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIG9yXHJcblx0XHRcdFx0XHQ8Y29kZT5udWxsPC9jb2RlPiBpZiBubyB2YWx1ZS4gKi9cclxuXHRcdF9leHRyYWN0VGltZTogZnVuY3Rpb24oaW5zdCwgdmFsdWUpIHtcclxuXHRcdFx0dmFsdWUgPSB2YWx1ZSB8fCBpbnN0LmVsZW0udmFsKCk7XHJcblx0XHRcdHZhciBjdXJyZW50VGltZSA9IHZhbHVlLnNwbGl0KGluc3Qub3B0aW9ucy5zZXBhcmF0b3IpO1xyXG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLnNlcGFyYXRvciA9PT0gJycgJiYgdmFsdWUgIT09ICcnKSB7XHJcblx0XHRcdFx0Y3VycmVudFRpbWVbMF0gPSB2YWx1ZS5zdWJzdHJpbmcoMCwgMik7XHJcblx0XHRcdFx0Y3VycmVudFRpbWVbMV0gPSB2YWx1ZS5zdWJzdHJpbmcoMiwgNCk7XHJcblx0XHRcdFx0Y3VycmVudFRpbWVbMl0gPSB2YWx1ZS5zdWJzdHJpbmcoNCwgNik7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGN1cnJlbnRUaW1lLmxlbmd0aCA+PSAyKSB7XHJcblx0XHRcdFx0dmFyIGlzQU0gPSAhaW5zdC5vcHRpb25zLnNob3cyNEhvdXJzICYmICh2YWx1ZS5pbmRleE9mKGluc3Qub3B0aW9ucy5hbXBtTmFtZXNbMF0pID4gLTEpO1xyXG5cdFx0XHRcdHZhciBpc1BNID0gIWluc3Qub3B0aW9ucy5zaG93MjRIb3VycyAmJiAodmFsdWUuaW5kZXhPZihpbnN0Lm9wdGlvbnMuYW1wbU5hbWVzWzFdKSA+IC0xKTtcclxuXHRcdFx0XHR2YXIgaG91ciA9IHBhcnNlSW50KGN1cnJlbnRUaW1lWzBdLCAxMCk7XHJcblx0XHRcdFx0aG91ciA9IChpc05hTihob3VyKSA/IDAgOiBob3VyKTtcclxuXHRcdFx0XHRob3VyID0gKChpc0FNIHx8IGlzUE0pICYmIGhvdXIgPT09IDEyID8gMCA6IGhvdXIpICsgKGlzUE0gPyAxMiA6IDApO1xyXG5cdFx0XHRcdHZhciBtaW51dGUgPSBwYXJzZUludChjdXJyZW50VGltZVsxXSwgMTApO1xyXG5cdFx0XHRcdG1pbnV0ZSA9IChpc05hTihtaW51dGUpID8gMCA6IG1pbnV0ZSk7XHJcblx0XHRcdFx0dmFyIHNlY29uZCA9IChjdXJyZW50VGltZS5sZW5ndGggPj0gMyA/IHBhcnNlSW50KGN1cnJlbnRUaW1lWzJdLCAxMCkgOiAwKTtcclxuXHRcdFx0XHRzZWNvbmQgPSAoaXNOYU4oc2Vjb25kKSB8fCAhaW5zdC5vcHRpb25zLnNob3dTZWNvbmRzID8gMCA6IHNlY29uZCk7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2NvbnN0cmFpblRpbWUoaW5zdCwgW2hvdXIsIG1pbnV0ZSwgc2Vjb25kXSk7XHJcblx0XHRcdH0gXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogQ29uc3RyYWluIHRoZSBnaXZlbi9jdXJyZW50IHRpbWUgdG8gdGhlIHRpbWUgc3RlcHMuXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QHBhcmFtIGZpZWxkcyB7bnVtYmVyW119IFRoZSBjdXJyZW50IHRpbWUgY29tcG9uZW50cyAoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpLlxyXG5cdFx0XHRAcmV0dXJuIHtudW1iZXJbXX0gVGhlIGNvbnN0cmFpbmVkIHRpbWUgY29tcG9uZW50cyAoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpLiAqL1xyXG5cdFx0X2NvbnN0cmFpblRpbWU6IGZ1bmN0aW9uKGluc3QsIGZpZWxkcykge1xyXG5cdFx0XHR2YXIgc3BlY2lmaWVkID0gKGZpZWxkcyAhPT0gbnVsbCAmJiBmaWVsZHMgIT09IHVuZGVmaW5lZCk7XHJcblx0XHRcdGlmICghc3BlY2lmaWVkKSB7XHJcblx0XHRcdFx0dmFyIG5vdyA9IHRoaXMuX2RldGVybWluZVRpbWUoaW5zdC5vcHRpb25zLmRlZmF1bHRUaW1lLCBpbnN0KSB8fCBuZXcgRGF0ZSgpO1xyXG5cdFx0XHRcdGZpZWxkcyA9IFtub3cuZ2V0SG91cnMoKSwgbm93LmdldE1pbnV0ZXMoKSwgbm93LmdldFNlY29uZHMoKV07XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIHJlc2V0ID0gZmFsc2U7XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaW5zdC5vcHRpb25zLnRpbWVTdGVwcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChyZXNldCkge1xyXG5cdFx0XHRcdFx0ZmllbGRzW2ldID0gMDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBpZiAoaW5zdC5vcHRpb25zLnRpbWVTdGVwc1tpXSA+IDEpIHtcclxuXHRcdFx0XHRcdGZpZWxkc1tpXSA9IE1hdGgucm91bmQoZmllbGRzW2ldIC8gaW5zdC5vcHRpb25zLnRpbWVTdGVwc1tpXSkgKlxyXG5cdFx0XHRcdFx0XHRpbnN0Lm9wdGlvbnMudGltZVN0ZXBzW2ldO1xyXG5cdFx0XHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZmllbGRzO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU2V0IHRoZSBzZWxlY3RlZCB0aW1lIGludG8gdGhlIGlucHV0IGZpZWxkLlxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgaW5zdGFuY2Ugc2V0dGluZ3MuICovXHJcblx0XHRfc2hvd1RpbWU6IGZ1bmN0aW9uKGluc3QpIHtcclxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gKGluc3Qub3B0aW9ucy51bmxpbWl0ZWRIb3VycyA/IGluc3QuX3NlbGVjdGVkSG91ciA6XHJcblx0XHRcdFx0dGhpcy5fZm9ybWF0TnVtYmVyKGluc3Qub3B0aW9ucy5zaG93MjRIb3VycyA/IGluc3QuX3NlbGVjdGVkSG91ciA6XHJcblx0XHRcdFx0KChpbnN0Ll9zZWxlY3RlZEhvdXIgKyAxMSkgJSAxMikgKyAxKSkgKyBpbnN0Lm9wdGlvbnMuc2VwYXJhdG9yICtcclxuXHRcdFx0XHR0aGlzLl9mb3JtYXROdW1iZXIoaW5zdC5fc2VsZWN0ZWRNaW51dGUpICtcclxuXHRcdFx0XHQoaW5zdC5vcHRpb25zLnNob3dTZWNvbmRzID8gaW5zdC5vcHRpb25zLnNlcGFyYXRvciArXHJcblx0XHRcdFx0dGhpcy5fZm9ybWF0TnVtYmVyKGluc3QuX3NlbGVjdGVkU2Vjb25kKSA6ICcnKSArXHJcblx0XHRcdFx0KGluc3Qub3B0aW9ucy5zaG93MjRIb3VycyA/ICAnJyA6IGluc3Qub3B0aW9ucy5hbXBtUHJlZml4ICtcclxuXHRcdFx0XHRpbnN0Lm9wdGlvbnMuYW1wbU5hbWVzWyhpbnN0Ll9zZWxlY3RlZEhvdXIgPCAxMiA/IDAgOiAxKV0pO1xyXG5cdFx0XHR0aGlzLl9zZXRWYWx1ZShpbnN0LCBjdXJyZW50VGltZSk7XHJcblx0XHRcdHRoaXMuX3Nob3dGaWVsZChpbnN0KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEhpZ2hsaWdodCB0aGUgY3VycmVudCBkYXRlIGZpZWxkLlxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgaW5zdGFuY2Ugc2V0dGluZ3MuICovXHJcblx0XHRfc2hvd0ZpZWxkOiBmdW5jdGlvbihpbnN0KSB7XHJcblx0XHRcdHZhciBpbnB1dCA9IGluc3QuZWxlbVswXTtcclxuXHRcdFx0aWYgKGluc3QuZWxlbS5pcygnOmhpZGRlbicpIHx8IHBsdWdpbi5fbGFzdElucHV0ICE9PSBpbnB1dCkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgZmllbGRTaXplcyA9IFtpbnN0LmVsZW0udmFsKCkuc3BsaXQoaW5zdC5vcHRpb25zLnNlcGFyYXRvcilbMF0ubGVuZ3RoLCAyLCAyXTtcclxuXHRcdFx0dmFyIHN0YXJ0ID0gMDtcclxuXHRcdFx0dmFyIGZpZWxkID0gMDtcclxuXHRcdFx0d2hpbGUgKGZpZWxkIDwgaW5zdC5fZmllbGQpIHtcclxuXHRcdFx0XHRzdGFydCArPSBmaWVsZFNpemVzW2ZpZWxkXSArXHJcblx0XHRcdFx0XHQoZmllbGQgPT09IE1hdGgubWF4KDEsIGluc3QuX3NlY29uZEZpZWxkKSA/IDAgOiBpbnN0Lm9wdGlvbnMuc2VwYXJhdG9yLmxlbmd0aCk7XHJcblx0XHRcdFx0ZmllbGQrKztcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgZW5kID0gc3RhcnQgKyAoaW5zdC5fZmllbGQgIT09IGluc3QuX2FtcG1GaWVsZCA/IGZpZWxkU2l6ZXNbZmllbGRdIDpcclxuXHRcdFx0XHRpbnN0Lm9wdGlvbnMuYW1wbVByZWZpeC5sZW5ndGggKyBpbnN0Lm9wdGlvbnMuYW1wbU5hbWVzWzBdLmxlbmd0aCk7XHJcblx0XHRcdGlmIChpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZSkgeyAvLyBNb3ppbGxhXHJcblx0XHRcdFx0aW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAoaW5wdXQuY3JlYXRlVGV4dFJhbmdlKSB7IC8vIElFXHJcblx0XHRcdFx0dmFyIHJhbmdlID0gaW5wdXQuY3JlYXRlVGV4dFJhbmdlKCk7XHJcblx0XHRcdFx0cmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzdGFydCk7XHJcblx0XHRcdFx0cmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgZW5kIC0gaW5zdC5lbGVtLnZhbCgpLmxlbmd0aCk7XHJcblx0XHRcdFx0cmFuZ2Uuc2VsZWN0KCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCFpbnB1dC5kaXNhYmxlZCkge1xyXG5cdFx0XHRcdGlucHV0LmZvY3VzKCk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIEVuc3VyZSBkaXNwbGF5ZWQgc2luZ2xlIG51bWJlciBoYXMgYSBsZWFkaW5nIHplcm8uXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSB2YWx1ZSB7bnVtYmVyfSBUaGUgY3VycmVudCB2YWx1ZS5cclxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBOdW1iZXIgd2l0aCBhdCBsZWFzdCB0d28gZGlnaXRzLiAqL1xyXG5cdFx0X2Zvcm1hdE51bWJlcjogZnVuY3Rpb24odmFsdWUpIHtcclxuXHRcdFx0cmV0dXJuICh2YWx1ZSA8IDEwID8gJzAnIDogJycpICsgdmFsdWU7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBVcGRhdGUgdGhlIGlucHV0IGZpZWxkIGFuZCBub3RpZnkgbGlzdGVuZXJzLlxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBwYXJhbSB2YWx1ZSB7c3RyaW5nfSBUaGUgbmV3IHZhbHVlLiAqL1xyXG5cdFx0X3NldFZhbHVlOiBmdW5jdGlvbihpbnN0LCB2YWx1ZSkge1xyXG5cdFx0XHRpZiAodmFsdWUgIT09IGluc3QuZWxlbS52YWwoKSkge1xyXG5cdFx0XHRcdGluc3QuZWxlbS52YWwodmFsdWUpLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBNb3ZlIHRvIHByZXZpb3VzL25leHQgZmllbGQsIG9yIG91dCBvZiBmaWVsZCBhbHRvZ2V0aGVyIGlmIGFwcHJvcHJpYXRlLlxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBwYXJhbSBvZmZzZXQge251bWJlcn0gVGhlIGRpcmVjdGlvbiBvZiBjaGFuZ2UgKC0xLCArMSkuXHJcblx0XHRcdEBwYXJhbSBtb3ZlT3V0IHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBjYW4gbW92ZSBvdXQgb2YgdGhlIGZpZWxkLlxyXG5cdFx0XHRAcmV0dXJuIHtib29sZWFufSA8Y29kZT50cnVlPC9jb2RlPiBpZiBleGl0aW5nIHRoZSBmaWVsZCwgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdC4gKi9cclxuXHRcdF9jaGFuZ2VGaWVsZDogZnVuY3Rpb24oaW5zdCwgb2Zmc2V0LCBtb3ZlT3V0KSB7XHJcblx0XHRcdHZhciBhdEZpcnN0TGFzdCA9IChpbnN0LmVsZW0udmFsKCkgPT09ICcnIHx8XHJcblx0XHRcdFx0aW5zdC5fZmllbGQgPT09IChvZmZzZXQgPT09IC0xID8gMCA6IE1hdGgubWF4KDEsIGluc3QuX3NlY29uZEZpZWxkLCBpbnN0Ll9hbXBtRmllbGQpKSk7XHJcblx0XHRcdGlmICghYXRGaXJzdExhc3QpIHtcclxuXHRcdFx0XHRpbnN0Ll9maWVsZCArPSBvZmZzZXQ7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5fc2hvd0ZpZWxkKGluc3QpO1xyXG5cdFx0XHRpbnN0Ll9sYXN0Q2hyID0gJyc7XHJcblx0XHRcdHJldHVybiAoYXRGaXJzdExhc3QgJiYgbW92ZU91dCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBVcGRhdGUgdGhlIGN1cnJlbnQgZmllbGQgaW4gdGhlIGRpcmVjdGlvbiBpbmRpY2F0ZWQuXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QHBhcmFtIG9mZnNldCB7bnVtYmVyfSBUaGUgYW1vdW50IHRvIGNoYW5nZSBieS4gKi9cclxuXHRcdF9hZGp1c3RGaWVsZDogZnVuY3Rpb24oaW5zdCwgb2Zmc2V0KSB7XHJcblx0XHRcdGlmIChpbnN0LmVsZW0udmFsKCkgPT09ICcnKSB7XHJcblx0XHRcdFx0b2Zmc2V0ID0gMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoaW5zdC5vcHRpb25zLnVubGltaXRlZEhvdXJzKSB7XHJcblx0XHRcdFx0dGhpcy5fc2V0VGltZShpbnN0LCBbaW5zdC5fc2VsZWN0ZWRIb3VyICsgKGluc3QuX2ZpZWxkID09PSAwID8gb2Zmc2V0ICogaW5zdC5vcHRpb25zLnRpbWVTdGVwc1swXSA6IDApLFxyXG5cdFx0XHRcdFx0aW5zdC5fc2VsZWN0ZWRNaW51dGUgKyAoaW5zdC5fZmllbGQgPT09IDEgPyBvZmZzZXQgKiBpbnN0Lm9wdGlvbnMudGltZVN0ZXBzWzFdIDogMCksXHJcblx0XHRcdFx0XHRpbnN0Ll9zZWxlY3RlZFNlY29uZCArIChpbnN0Ll9maWVsZCA9PT0gaW5zdC5fc2Vjb25kRmllbGQgPyBvZmZzZXQgKiBpbnN0Lm9wdGlvbnMudGltZVN0ZXBzWzJdIDogMCldKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0dGhpcy5fc2V0VGltZShpbnN0LCBuZXcgRGF0ZSgwLCAwLCAwLFxyXG5cdFx0XHRcdGluc3QuX3NlbGVjdGVkSG91ciArIChpbnN0Ll9maWVsZCA9PT0gMCA/IG9mZnNldCAqIGluc3Qub3B0aW9ucy50aW1lU3RlcHNbMF0gOiAwKSArXHJcblx0XHRcdFx0KGluc3QuX2ZpZWxkID09PSBpbnN0Ll9hbXBtRmllbGQgPyBvZmZzZXQgKiAxMiA6IDApLFxyXG5cdFx0XHRcdGluc3QuX3NlbGVjdGVkTWludXRlICsgKGluc3QuX2ZpZWxkID09PSAxID8gb2Zmc2V0ICogaW5zdC5vcHRpb25zLnRpbWVTdGVwc1sxXSA6IDApLFxyXG5cdFx0XHRcdFx0aW5zdC5fc2VsZWN0ZWRTZWNvbmQgKyAoaW5zdC5fZmllbGQgPT09IGluc3QuX3NlY29uZEZpZWxkID8gb2Zmc2V0ICogaW5zdC5vcHRpb25zLnRpbWVTdGVwc1syXSA6IDApKSk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIENoZWNrIGFnYWluc3QgbWluaW11bS9tYXhpbXVtIGFuZCBkaXNwbGF5IHRpbWUuXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0QHBhcmFtIHRpbWUge0RhdGV8bnVtYmVyfHN0cmluZ3xudW1iZXJbXX0gVGhlIGFjdHVhbCB0aW1lIG9yIG9mZnNldCBpbiBzZWNvbmRzIGZyb20gbm93IG9yXHJcblx0XHRcdFx0XHR1bml0cyBhbmQgcGVyaW9kcyBvZiBvZmZzZXRzIGZyb20gbm93IG9yIG51bWVyaWMgcGVyaW9kIHZhbHVlcy4gKi9cclxuXHRcdF9zZXRUaW1lOiBmdW5jdGlvbihpbnN0LCB0aW1lKSB7XHJcblx0XHRcdGlmIChpbnN0Lm9wdGlvbnMudW5saW1pdGVkSG91cnMgJiYgJC5pc0FycmF5KHRpbWUpKSB7XHJcblx0XHRcdFx0dmFyIGZpZWxkcyA9IHRpbWU7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdHRpbWUgPSB0aGlzLl9kZXRlcm1pbmVUaW1lKHRpbWUsIGluc3QpO1xyXG5cdFx0XHRcdHZhciBmaWVsZHMgPSAodGltZSA/IFt0aW1lLmdldEhvdXJzKCksIHRpbWUuZ2V0TWludXRlcygpLCB0aW1lLmdldFNlY29uZHMoKV0gOiBudWxsKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRmaWVsZHMgPSB0aGlzLl9jb25zdHJhaW5UaW1lKGluc3QsIGZpZWxkcyk7XHJcblx0XHRcdHRpbWUgPSBuZXcgRGF0ZSgwLCAwLCAwLCBmaWVsZHNbMF0sIGZpZWxkc1sxXSwgZmllbGRzWzJdKTtcclxuXHRcdFx0Ly8gTm9ybWFsaXNlIHRvIGJhc2UgZGF0ZVxyXG5cdFx0XHR2YXIgdGltZSA9IHRoaXMuX25vcm1hbGlzZVRpbWUodGltZSk7XHJcblx0XHRcdHZhciBtaW5UaW1lID0gdGhpcy5fbm9ybWFsaXNlVGltZSh0aGlzLl9kZXRlcm1pbmVUaW1lKGluc3Qub3B0aW9ucy5taW5UaW1lLCBpbnN0KSk7XHJcblx0XHRcdHZhciBtYXhUaW1lID0gdGhpcy5fbm9ybWFsaXNlVGltZSh0aGlzLl9kZXRlcm1pbmVUaW1lKGluc3Qub3B0aW9ucy5tYXhUaW1lLCBpbnN0KSk7XHJcblx0XHRcdC8vIEVuc3VyZSBpdCBpcyB3aXRoaW4gdGhlIGJvdW5kcyBzZXRcclxuXHRcdFx0aWYgKGluc3Qub3B0aW9ucy51bmxpbWl0ZWRIb3Vycykge1xyXG5cdFx0XHRcdHdoaWxlIChmaWVsZHNbMl0gPCAwKSB7XHJcblx0XHRcdFx0XHRmaWVsZHNbMl0gKz0gNjA7XHJcblx0XHRcdFx0XHRmaWVsZHNbMV0tLTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0d2hpbGUgKGZpZWxkc1syXSA+IDU5KSB7XHJcblx0XHRcdFx0XHRmaWVsZHNbMl0gLT0gNjA7XHJcblx0XHRcdFx0XHRmaWVsZHNbMV0rKztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0d2hpbGUgKGZpZWxkc1sxXSA8IDApIHtcclxuXHRcdFx0XHRcdGZpZWxkc1sxXSArPSA2MDtcclxuXHRcdFx0XHRcdGZpZWxkc1swXS0tO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR3aGlsZSAoZmllbGRzWzFdID4gNTkpIHtcclxuXHRcdFx0XHRcdGZpZWxkc1sxXSAtPSA2MDtcclxuXHRcdFx0XHRcdGZpZWxkc1swXSsrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRtaW5UaW1lID0gKGluc3Qub3B0aW9ucy5taW5UaW1lICE9IG51bGwgJiYgJC5pc0FycmF5KGluc3Qub3B0aW9ucy5taW5UaW1lKSkgP1xyXG5cdFx0XHRcdFx0aW5zdC5vcHRpb25zLm1pblRpbWUgOiBbMCwgMCwgMF07XHJcblx0XHRcdFx0aWYgKGZpZWxkc1swXSA8IG1pblRpbWVbMF0pIHtcclxuXHRcdFx0XHRcdGZpZWxkcyA9IG1pblRpbWUuc2xpY2UoMCwgMyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgaWYgKGZpZWxkc1swXSA9PT0gbWluVGltZVswXSkge1xyXG5cdFx0XHRcdFx0aWYgKGZpZWxkc1sxXSA8IG1pblRpbWVbMV0pIHtcclxuXHRcdFx0XHRcdFx0ZmllbGRzWzFdID0gbWluVGltZVsxXTtcclxuXHRcdFx0XHRcdFx0ZmllbGRzWzJdID0gbWluVGltZVsyXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2UgaWYgKGZpZWxkc1sxXSA9PT0gbWluVGltZVsxXSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoZmllbGRzWzJdIDwgbWluVGltZVsyXSkge1xyXG5cdFx0XHRcdFx0XHRcdGZpZWxkc1syXSA9IG1pblRpbWVbMl07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGluc3Qub3B0aW9ucy5tYXhUaW1lICE9IG51bGwgJiYgJC5pc0FycmF5KGluc3Qub3B0aW9ucy5tYXhUaW1lKSkge1xyXG5cdFx0XHRcdFx0aWYgKGZpZWxkc1swXSA+IGluc3Qub3B0aW9ucy5tYXhUaW1lWzBdKSB7XHJcblx0XHRcdFx0XHRcdGZpZWxkcyA9IGluc3Qub3B0aW9ucy5tYXhUaW1lLnNsaWNlKDAsIDMpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSBpZiAoZmllbGRzWzBdID09PSBpbnN0Lm9wdGlvbnMubWF4VGltZVswXSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoZmllbGRzWzFdID4gaW5zdC5vcHRpb25zLm1heFRpbWVbMV0pIHtcclxuXHRcdFx0XHRcdFx0XHRmaWVsZHNbMV0gPSBpbnN0Lm9wdGlvbnMubWF4VGltZVsxXTtcclxuXHRcdFx0XHRcdFx0XHRmaWVsZHNbMl0gPSBpbnN0Lm9wdGlvbnMubWF4VGltZVsyXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRlbHNlIGlmIChmaWVsZHNbMV0gPT09IGluc3Qub3B0aW9ucy5tYXhUaW1lWzFdKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGZpZWxkc1syXSA+IGluc3Qub3B0aW9ucy5tYXhUaW1lWzJdKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZHNbMl0gPSBpbnN0Lm9wdGlvbnMubWF4VGltZVsyXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdGlmIChtaW5UaW1lICYmIG1heFRpbWUgJiYgbWluVGltZSA+IG1heFRpbWUpIHtcclxuXHRcdFx0XHRpZiAodGltZSA8IG1pblRpbWUgJiYgdGltZSA+IG1heFRpbWUpIHtcclxuXHRcdFx0XHRcdHRpbWUgPSAoTWF0aC5hYnModGltZSAtIG1pblRpbWUpIDwgTWF0aC5hYnModGltZSAtIG1heFRpbWUpID8gbWluVGltZSA6IG1heFRpbWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHR0aW1lID0gKG1pblRpbWUgJiYgdGltZSA8IG1pblRpbWUgPyBtaW5UaW1lIDpcclxuXHRcdFx0XHRcdChtYXhUaW1lICYmIHRpbWUgPiBtYXhUaW1lID8gbWF4VGltZSA6IHRpbWUpKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRcdGZpZWxkc1swXSA9IHRpbWUuZ2V0SG91cnMoKTtcclxuXHRcdFx0XHRmaWVsZHNbMV0gPSB0aW1lLmdldE1pbnV0ZXMoKTtcclxuXHRcdFx0XHRmaWVsZHNbMl0gPSB0aW1lLmdldFNlY29uZHMoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBQZXJmb3JtIGZ1cnRoZXIgcmVzdHJpY3Rpb25zIGlmIHJlcXVpcmVkXHJcblx0XHRcdGlmICgkLmlzRnVuY3Rpb24oaW5zdC5vcHRpb25zLmJlZm9yZVNldFRpbWUpKSB7XHJcblx0XHRcdFx0dGltZSA9IGluc3Qub3B0aW9ucy5iZWZvcmVTZXRUaW1lLmFwcGx5KGluc3QuZWxlbVswXSxcclxuXHRcdFx0XHRcdFt0aGlzLmdldFRpbWUoaW5zdC5lbGVtWzBdKSwgdGltZSwgbWluVGltZSwgbWF4VGltZV0pO1xyXG5cdFx0XHRcdGZpZWxkc1swXSA9IHRpbWUuZ2V0SG91cnMoKTtcclxuXHRcdFx0XHRmaWVsZHNbMV0gPSB0aW1lLmdldE1pbnV0ZXMoKTtcclxuXHRcdFx0XHRmaWVsZHNbMl0gPSB0aW1lLmdldFNlY29uZHMoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpbnN0Ll9zZWxlY3RlZEhvdXIgPSBmaWVsZHNbMF07XHJcblx0XHRcdGluc3QuX3NlbGVjdGVkTWludXRlID0gZmllbGRzWzFdO1xyXG5cdFx0XHRpbnN0Ll9zZWxlY3RlZFNlY29uZCA9IGZpZWxkc1syXTtcclxuXHRcdFx0dGhpcy5fc2hvd1RpbWUoaW5zdCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKiBBIHRpbWUgbWF5IGJlIHNwZWNpZmllZCBhcyBhbiBleGFjdCB2YWx1ZSBvciBhIHJlbGF0aXZlIG9uZS5cclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHBhcmFtIHNldHRpbmcge0RhdGV8bnVtYmVyfHN0cmluZ3xudW1iZXJbXX0gVGhlIGFjdHVhbCB0aW1lIG9yIG9mZnNldCBpbiBzZWNvbmRzIGZyb20gbm93IG9yXHJcblx0XHRcdFx0XHR1bml0cyBhbmQgcGVyaW9kcyBvZiBvZmZzZXRzIGZyb20gbm93IG9yIG51bWVyaWMgcGVyaW9kIHZhbHVlcy5cclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAcmV0dXJuIHtEYXRlfSBUaGUgY2FsY3VsYXRlZCB0aW1lLiAqL1xyXG5cdFx0X2RldGVybWluZVRpbWU6IGZ1bmN0aW9uKHNldHRpbmcsIGluc3QpIHtcclxuXHRcdFx0dmFyIG9mZnNldE51bWVyaWMgPSBmdW5jdGlvbihvZmZzZXQpIHsgLy8gRS5nLiArMzAwLCAtMlxyXG5cdFx0XHRcdHZhciB0aW1lID0gbmV3IERhdGUoKTtcclxuXHRcdFx0XHR0aW1lLnNldFRpbWUodGltZS5nZXRUaW1lKCkgKyBvZmZzZXQgKiAxMDAwKTtcclxuXHRcdFx0XHRyZXR1cm4gdGltZTtcclxuXHRcdFx0fTtcclxuXHRcdFx0dmFyIG9mZnNldFN0cmluZyA9IGZ1bmN0aW9uKG9mZnNldCkgeyAvLyBFLmcuICcrMm0nLCAnLTRoJywgJyszaCArMzBtJyBvciAnMTI6MzQ6NTZQTSdcclxuXHRcdFx0XHR2YXIgZmllbGRzID0gcGx1Z2luLl9leHRyYWN0VGltZShpbnN0LCBvZmZzZXQpOyAvLyBBY3R1YWwgdGltZT9cclxuXHRcdFx0XHR2YXIgdGltZSA9IG5ldyBEYXRlKCk7XHJcblx0XHRcdFx0dmFyIGhvdXIgPSAoZmllbGRzID8gZmllbGRzWzBdIDogdGltZS5nZXRIb3VycygpKTtcclxuXHRcdFx0XHR2YXIgbWludXRlID0gKGZpZWxkcyA/IGZpZWxkc1sxXSA6IHRpbWUuZ2V0TWludXRlcygpKTtcclxuXHRcdFx0XHR2YXIgc2Vjb25kID0gKGZpZWxkcyA/IGZpZWxkc1syXSA6IHRpbWUuZ2V0U2Vjb25kcygpKTtcclxuXHRcdFx0XHRpZiAoIWZpZWxkcykge1xyXG5cdFx0XHRcdFx0dmFyIHBhdHRlcm4gPSAvKFsrLV0/WzAtOV0rKVxccyooc3xTfG18TXxofEgpPy9nO1xyXG5cdFx0XHRcdFx0dmFyIG1hdGNoZXMgPSBwYXR0ZXJuLmV4ZWMob2Zmc2V0KTtcclxuXHRcdFx0XHRcdHdoaWxlIChtYXRjaGVzKSB7XHJcblx0XHRcdFx0XHRcdHN3aXRjaCAobWF0Y2hlc1syXSB8fCAncycpIHtcclxuXHRcdFx0XHRcdFx0XHRjYXNlICdzJyA6IGNhc2UgJ1MnIDpcclxuXHRcdFx0XHRcdFx0XHRcdHNlY29uZCArPSBwYXJzZUludChtYXRjaGVzWzFdLCAxMCk7IGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdGNhc2UgJ20nIDogY2FzZSAnTScgOlxyXG5cdFx0XHRcdFx0XHRcdFx0bWludXRlICs9IHBhcnNlSW50KG1hdGNoZXNbMV0sIDEwKTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0Y2FzZSAnaCcgOiBjYXNlICdIJyA6XHJcblx0XHRcdFx0XHRcdFx0XHRob3VyICs9IHBhcnNlSW50KG1hdGNoZXNbMV0sIDEwKTsgYnJlYWs7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0bWF0Y2hlcyA9IHBhdHRlcm4uZXhlYyhvZmZzZXQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aW1lID0gbmV3IERhdGUoMCwgMCwgMTAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCAwKTtcclxuXHRcdFx0XHRpZiAoL14hLy50ZXN0KG9mZnNldCkpIHsgLy8gTm8gd3JhcHBpbmdcclxuXHRcdFx0XHRcdGlmICh0aW1lLmdldERhdGUoKSA+IDEwKSB7XHJcblx0XHRcdFx0XHRcdHRpbWUgPSBuZXcgRGF0ZSgwLCAwLCAxMCwgMjMsIDU5LCA1OSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIGlmICh0aW1lLmdldERhdGUoKSA8IDEwKSB7XHJcblx0XHRcdFx0XHRcdHRpbWUgPSBuZXcgRGF0ZSgwLCAwLCAxMCwgMCwgMCwgMCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiB0aW1lO1xyXG5cdFx0XHR9O1xyXG5cdFx0XHR2YXIgb2Zmc2V0QXJyYXkgPSBmdW5jdGlvbihzZXR0aW5nKSB7XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBEYXRlKDAsIDAsIDAsIHNldHRpbmdbMF0sIHNldHRpbmdbMV0gfHwgMCwgc2V0dGluZ1syXSB8fCAwLCAwKTtcclxuXHRcdFx0fTtcclxuXHRcdFx0cmV0dXJuIChzZXR0aW5nID8gKHR5cGVvZiBzZXR0aW5nID09PSAnc3RyaW5nJyA/IG9mZnNldFN0cmluZyhzZXR0aW5nKSA6XHJcblx0XHRcdFx0KHR5cGVvZiBzZXR0aW5nID09PSAnbnVtYmVyJyA/IG9mZnNldE51bWVyaWMoc2V0dGluZykgOlxyXG5cdFx0XHRcdCgkLmlzQXJyYXkoc2V0dGluZykgPyBvZmZzZXRBcnJheShzZXR0aW5nKSA6IHNldHRpbmcpKSkgOiBudWxsKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIE5vcm1hbGlzZSB0aW1lIG9iamVjdCB0byBhIGNvbW1vbiBkYXRlLlxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gdGltZSB7RGF0ZX0gVGhlIG9yaWdpbmFsIHRpbWUuXHJcblx0XHRcdEByZXR1cm4ge0RhdGV9IFRoZSBub3JtYWxpc2VkIHRpbWUuICovXHJcblx0XHRfbm9ybWFsaXNlVGltZTogZnVuY3Rpb24odGltZSkge1xyXG5cdFx0XHRpZiAoIXRpbWUpIHtcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aW1lLnNldEZ1bGxZZWFyKDE5MDApO1xyXG5cdFx0XHR0aW1lLnNldE1vbnRoKDApO1xyXG5cdFx0XHR0aW1lLnNldERhdGUoMCk7XHJcblx0XHRcdHJldHVybiB0aW1lO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cdFxyXG5cdHZhciBwbHVnaW4gPSAkLnRpbWVFbnRyeTtcclxuXHJcbn0pKGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular-resource.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular-resource.js index 1a2182b9736..6c443f88892 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular-resource.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular-resource.js @@ -671,4 +671,4 @@ angular.module('ngResource', ['ng']). })(window, window.angular); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFuZ3VsYXItcmVzb3VyY2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJhbmd1bGFyLXJlc291cmNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBBbmd1bGFySlMgdjEuMy4zXG4gKiAoYykgMjAxMC0yMDE0IEdvb2dsZSwgSW5jLiBodHRwOi8vYW5ndWxhcmpzLm9yZ1xuICogTGljZW5zZTogTUlUXG4gKi9cbihmdW5jdGlvbih3aW5kb3csIGFuZ3VsYXIsIHVuZGVmaW5lZCkgeyd1c2Ugc3RyaWN0JztcblxudmFyICRyZXNvdXJjZU1pbkVyciA9IGFuZ3VsYXIuJCRtaW5FcnIoJyRyZXNvdXJjZScpO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb25zIGFuZCByZWdleCB0byBsb29rdXAgYSBkb3R0ZWQgcGF0aCBvbiBhbiBvYmplY3Rcbi8vIHN0b3BwaW5nIGF0IHVuZGVmaW5lZC9udWxsLiAgVGhlIHBhdGggbXVzdCBiZSBjb21wb3NlZCBvZiBBU0NJSVxuLy8gaWRlbnRpZmllcnMgKGp1c3QgbGlrZSAkcGFyc2UpXG52YXIgTUVNQkVSX05BTUVfUkVHRVggPSAvXihcXC5bYS16QS1aXyRdWzAtOWEtekEtWl8kXSopKyQvO1xuXG5mdW5jdGlvbiBpc1ZhbGlkRG90dGVkUGF0aChwYXRoKSB7XG4gIHJldHVybiAocGF0aCAhPSBudWxsICYmIHBhdGggIT09ICcnICYmIHBhdGggIT09ICdoYXNPd25Qcm9wZXJ0eScgJiZcbiAgICAgIE1FTUJFUl9OQU1FX1JFR0VYLnRlc3QoJy4nICsgcGF0aCkpO1xufVxuXG5mdW5jdGlvbiBsb29rdXBEb3R0ZWRQYXRoKG9iaiwgcGF0aCkge1xuICBpZiAoIWlzVmFsaWREb3R0ZWRQYXRoKHBhdGgpKSB7XG4gICAgdGhyb3cgJHJlc291cmNlTWluRXJyKCdiYWRtZW1iZXInLCAnRG90dGVkIG1lbWJlciBwYXRoIFwiQHswfVwiIGlzIGludmFsaWQuJywgcGF0aCk7XG4gIH1cbiAgdmFyIGtleXMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gIGZvciAodmFyIGkgPSAwLCBpaSA9IGtleXMubGVuZ3RoOyBpIDwgaWkgJiYgb2JqICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIG9iaiA9IChvYmogIT09IG51bGwpID8gb2JqW2tleV0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzaGFsbG93IGNvcHkgb2YgYW4gb2JqZWN0IGFuZCBjbGVhciBvdGhlciBmaWVsZHMgZnJvbSB0aGUgZGVzdGluYXRpb25cbiAqL1xuZnVuY3Rpb24gc2hhbGxvd0NsZWFyQW5kQ29weShzcmMsIGRzdCkge1xuICBkc3QgPSBkc3QgfHwge307XG5cbiAgYW5ndWxhci5mb3JFYWNoKGRzdCwgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIGRlbGV0ZSBkc3Rba2V5XTtcbiAgfSk7XG5cbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGlmIChzcmMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhKGtleS5jaGFyQXQoMCkgPT09ICckJyAmJiBrZXkuY2hhckF0KDEpID09PSAnJCcpKSB7XG4gICAgICBkc3Rba2V5XSA9IHNyY1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkc3Q7XG59XG5cbi8qKlxuICogQG5nZG9jIG1vZHVsZVxuICogQG5hbWUgbmdSZXNvdXJjZVxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogIyBuZ1Jlc291cmNlXG4gKlxuICogVGhlIGBuZ1Jlc291cmNlYCBtb2R1bGUgcHJvdmlkZXMgaW50ZXJhY3Rpb24gc3VwcG9ydCB3aXRoIFJFU1RmdWwgc2VydmljZXNcbiAqIHZpYSB0aGUgJHJlc291cmNlIHNlcnZpY2UuXG4gKlxuICpcbiAqIDxkaXYgZG9jLW1vZHVsZS1jb21wb25lbnRzPVwibmdSZXNvdXJjZVwiPjwvZGl2PlxuICpcbiAqIFNlZSB7QGxpbmsgbmdSZXNvdXJjZS4kcmVzb3VyY2UgYCRyZXNvdXJjZWB9IGZvciB1c2FnZS5cbiAqL1xuXG4vKipcbiAqIEBuZ2RvYyBzZXJ2aWNlXG4gKiBAbmFtZSAkcmVzb3VyY2VcbiAqIEByZXF1aXJlcyAkaHR0cFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQSBmYWN0b3J5IHdoaWNoIGNyZWF0ZXMgYSByZXNvdXJjZSBvYmplY3QgdGhhdCBsZXRzIHlvdSBpbnRlcmFjdCB3aXRoXG4gKiBbUkVTVGZ1bF0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZXByZXNlbnRhdGlvbmFsX1N0YXRlX1RyYW5zZmVyKSBzZXJ2ZXItc2lkZSBkYXRhIHNvdXJjZXMuXG4gKlxuICogVGhlIHJldHVybmVkIHJlc291cmNlIG9iamVjdCBoYXMgYWN0aW9uIG1ldGhvZHMgd2hpY2ggcHJvdmlkZSBoaWdoLWxldmVsIGJlaGF2aW9ycyB3aXRob3V0XG4gKiB0aGUgbmVlZCB0byBpbnRlcmFjdCB3aXRoIHRoZSBsb3cgbGV2ZWwge0BsaW5rIG5nLiRodHRwICRodHRwfSBzZXJ2aWNlLlxuICpcbiAqIFJlcXVpcmVzIHRoZSB7QGxpbmsgbmdSZXNvdXJjZSBgbmdSZXNvdXJjZWB9IG1vZHVsZSB0byBiZSBpbnN0YWxsZWQuXG4gKlxuICogQnkgZGVmYXVsdCwgdHJhaWxpbmcgc2xhc2hlcyB3aWxsIGJlIHN0cmlwcGVkIGZyb20gdGhlIGNhbGN1bGF0ZWQgVVJMcyxcbiAqIHdoaWNoIGNhbiBwb3NlIHByb2JsZW1zIHdpdGggc2VydmVyIGJhY2tlbmRzIHRoYXQgZG8gbm90IGV4cGVjdCB0aGF0XG4gKiBiZWhhdmlvci4gIFRoaXMgY2FuIGJlIGRpc2FibGVkIGJ5IGNvbmZpZ3VyaW5nIHRoZSBgJHJlc291cmNlUHJvdmlkZXJgIGxpa2VcbiAqIHRoaXM6XG4gKlxuICogYGBganNcbiAgICAgYXBwLmNvbmZpZyhbJyRyZXNvdXJjZVByb3ZpZGVyJywgZnVuY3Rpb24oJHJlc291cmNlUHJvdmlkZXIpIHtcbiAgICAgICAvLyBEb24ndCBzdHJpcCB0cmFpbGluZyBzbGFzaGVzIGZyb20gY2FsY3VsYXRlZCBVUkxzXG4gICAgICAgJHJlc291cmNlUHJvdmlkZXIuZGVmYXVsdHMuc3RyaXBUcmFpbGluZ1NsYXNoZXMgPSBmYWxzZTtcbiAgICAgfV0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBBIHBhcmFtZXRyaXplZCBVUkwgdGVtcGxhdGUgd2l0aCBwYXJhbWV0ZXJzIHByZWZpeGVkIGJ5IGA6YCBhcyBpblxuICogICBgL3VzZXIvOnVzZXJuYW1lYC4gSWYgeW91IGFyZSB1c2luZyBhIFVSTCB3aXRoIGEgcG9ydCBudW1iZXIgKGUuZy5cbiAqICAgYGh0dHA6Ly9leGFtcGxlLmNvbTo4MDgwL2FwaWApLCBpdCB3aWxsIGJlIHJlc3BlY3RlZC5cbiAqXG4gKiAgIElmIHlvdSBhcmUgdXNpbmcgYSB1cmwgd2l0aCBhIHN1ZmZpeCwganVzdCBhZGQgdGhlIHN1ZmZpeCwgbGlrZSB0aGlzOlxuICogICBgJHJlc291cmNlKCdodHRwOi8vZXhhbXBsZS5jb20vcmVzb3VyY2UuanNvbicpYCBvciBgJHJlc291cmNlKCdodHRwOi8vZXhhbXBsZS5jb20vOmlkLmpzb24nKWBcbiAqICAgb3IgZXZlbiBgJHJlc291cmNlKCdodHRwOi8vZXhhbXBsZS5jb20vcmVzb3VyY2UvOnJlc291cmNlX2lkLjpmb3JtYXQnKWBcbiAqICAgSWYgdGhlIHBhcmFtZXRlciBiZWZvcmUgdGhlIHN1ZmZpeCBpcyBlbXB0eSwgOnJlc291cmNlX2lkIGluIHRoaXMgY2FzZSwgdGhlbiB0aGUgYC8uYCB3aWxsIGJlXG4gKiAgIGNvbGxhcHNlZCBkb3duIHRvIGEgc2luZ2xlIGAuYC4gIElmIHlvdSBuZWVkIHRoaXMgc2VxdWVuY2UgdG8gYXBwZWFyIGFuZCBub3QgY29sbGFwc2UgdGhlbiB5b3VcbiAqICAgY2FuIGVzY2FwZSBpdCB3aXRoIGAvXFwuYC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdD19IHBhcmFtRGVmYXVsdHMgRGVmYXVsdCB2YWx1ZXMgZm9yIGB1cmxgIHBhcmFtZXRlcnMuIFRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIGluXG4gKiAgIGBhY3Rpb25zYCBtZXRob2RzLiBJZiBhbnkgb2YgdGhlIHBhcmFtZXRlciB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGV4ZWN1dGVkIGV2ZXJ5IHRpbWVcbiAqICAgd2hlbiBhIHBhcmFtIHZhbHVlIG5lZWRzIHRvIGJlIG9idGFpbmVkIGZvciBhIHJlcXVlc3QgKHVubGVzcyB0aGUgcGFyYW0gd2FzIG92ZXJyaWRkZW4pLlxuICpcbiAqICAgRWFjaCBrZXkgdmFsdWUgaW4gdGhlIHBhcmFtZXRlciBvYmplY3QgaXMgZmlyc3QgYm91bmQgdG8gdXJsIHRlbXBsYXRlIGlmIHByZXNlbnQgYW5kIHRoZW4gYW55XG4gKiAgIGV4Y2VzcyBrZXlzIGFyZSBhcHBlbmRlZCB0byB0aGUgdXJsIHNlYXJjaCBxdWVyeSBhZnRlciB0aGUgYD9gLlxuICpcbiAqICAgR2l2ZW4gYSB0ZW1wbGF0ZSBgL3BhdGgvOnZlcmJgIGFuZCBwYXJhbWV0ZXIgYHt2ZXJiOidncmVldCcsIHNhbHV0YXRpb246J0hlbGxvJ31gIHJlc3VsdHMgaW5cbiAqICAgVVJMIGAvcGF0aC9ncmVldD9zYWx1dGF0aW9uPUhlbGxvYC5cbiAqXG4gKiAgIElmIHRoZSBwYXJhbWV0ZXIgdmFsdWUgaXMgcHJlZml4ZWQgd2l0aCBgQGAgdGhlbiB0aGUgdmFsdWUgZm9yIHRoYXQgcGFyYW1ldGVyIHdpbGwgYmUgZXh0cmFjdGVkXG4gKiAgIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgb24gdGhlIGBkYXRhYCBvYmplY3QgKHByb3ZpZGVkIHdoZW4gY2FsbGluZyBhbiBhY3Rpb24gbWV0aG9kKS4gIEZvclxuICogICBleGFtcGxlLCBpZiB0aGUgYGRlZmF1bHRQYXJhbWAgb2JqZWN0IGlzIGB7c29tZVBhcmFtOiAnQHNvbWVQcm9wJ31gIHRoZW4gdGhlIHZhbHVlIG9mIGBzb21lUGFyYW1gXG4gKiAgIHdpbGwgYmUgYGRhdGEuc29tZVByb3BgLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0LjxPYmplY3Q+PX0gYWN0aW9ucyBIYXNoIHdpdGggZGVjbGFyYXRpb24gb2YgY3VzdG9tIGFjdGlvbiB0aGF0IHNob3VsZCBleHRlbmRcbiAqICAgdGhlIGRlZmF1bHQgc2V0IG9mIHJlc291cmNlIGFjdGlvbnMuIFRoZSBkZWNsYXJhdGlvbiBzaG91bGQgYmUgY3JlYXRlZCBpbiB0aGUgZm9ybWF0IG9mIHtAbGlua1xuICogICBuZy4kaHR0cCN1c2FnZSAkaHR0cC5jb25maWd9OlxuICpcbiAqICAgICAgIHthY3Rpb24xOiB7bWV0aG9kOj8sIHBhcmFtczo/LCBpc0FycmF5Oj8sIGhlYWRlcnM6PywgLi4ufSxcbiAqICAgICAgICBhY3Rpb24yOiB7bWV0aG9kOj8sIHBhcmFtczo/LCBpc0FycmF5Oj8sIGhlYWRlcnM6PywgLi4ufSxcbiAqICAgICAgICAuLi59XG4gKlxuICogICBXaGVyZTpcbiAqXG4gKiAgIC0gKipgYWN0aW9uYCoqIOKAkyB7c3RyaW5nfSDigJMgVGhlIG5hbWUgb2YgYWN0aW9uLiBUaGlzIG5hbWUgYmVjb21lcyB0aGUgbmFtZSBvZiB0aGUgbWV0aG9kIG9uXG4gKiAgICAgeW91ciByZXNvdXJjZSBvYmplY3QuXG4gKiAgIC0gKipgbWV0aG9kYCoqIOKAkyB7c3RyaW5nfSDigJMgQ2FzZSBpbnNlbnNpdGl2ZSBIVFRQIG1ldGhvZCAoZS5nLiBgR0VUYCwgYFBPU1RgLCBgUFVUYCxcbiAqICAgICBgREVMRVRFYCwgYEpTT05QYCwgZXRjKS5cbiAqICAgLSAqKmBwYXJhbXNgKiog4oCTIHtPYmplY3Q9fSDigJMgT3B0aW9uYWwgc2V0IG9mIHByZS1ib3VuZCBwYXJhbWV0ZXJzIGZvciB0aGlzIGFjdGlvbi4gSWYgYW55IG9mXG4gKiAgICAgdGhlIHBhcmFtZXRlciB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGV4ZWN1dGVkIGV2ZXJ5IHRpbWUgd2hlbiBhIHBhcmFtIHZhbHVlIG5lZWRzIHRvXG4gKiAgICAgYmUgb2J0YWluZWQgZm9yIGEgcmVxdWVzdCAodW5sZXNzIHRoZSBwYXJhbSB3YXMgb3ZlcnJpZGRlbikuXG4gKiAgIC0gKipgdXJsYCoqIOKAkyB7c3RyaW5nfSDigJMgYWN0aW9uIHNwZWNpZmljIGB1cmxgIG92ZXJyaWRlLiBUaGUgdXJsIHRlbXBsYXRpbmcgaXMgc3VwcG9ydGVkIGp1c3RcbiAqICAgICBsaWtlIGZvciB0aGUgcmVzb3VyY2UtbGV2ZWwgdXJscy5cbiAqICAgLSAqKmBpc0FycmF5YCoqIOKAkyB7Ym9vbGVhbj19IOKAkyBJZiB0cnVlIHRoZW4gdGhlIHJldHVybmVkIG9iamVjdCBmb3IgdGhpcyBhY3Rpb24gaXMgYW4gYXJyYXksXG4gKiAgICAgc2VlIGByZXR1cm5zYCBzZWN0aW9uLlxuICogICAtICoqYHRyYW5zZm9ybVJlcXVlc3RgKiog4oCTXG4gKiAgICAgYHtmdW5jdGlvbihkYXRhLCBoZWFkZXJzR2V0dGVyKXxBcnJheS48ZnVuY3Rpb24oZGF0YSwgaGVhZGVyc0dldHRlcik+fWAg4oCTXG4gKiAgICAgdHJhbnNmb3JtIGZ1bmN0aW9uIG9yIGFuIGFycmF5IG9mIHN1Y2ggZnVuY3Rpb25zLiBUaGUgdHJhbnNmb3JtIGZ1bmN0aW9uIHRha2VzIHRoZSBodHRwXG4gKiAgICAgcmVxdWVzdCBib2R5IGFuZCBoZWFkZXJzIGFuZCByZXR1cm5zIGl0cyB0cmFuc2Zvcm1lZCAodHlwaWNhbGx5IHNlcmlhbGl6ZWQpIHZlcnNpb24uXG4gKiAgICAgQnkgZGVmYXVsdCwgdHJhbnNmb3JtUmVxdWVzdCB3aWxsIGNvbnRhaW4gb25lIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZSByZXF1ZXN0IGRhdGEgaXNcbiAqICAgICBhbiBvYmplY3QgYW5kIHNlcmlhbGl6ZXMgdG8gdXNpbmcgYGFuZ3VsYXIudG9Kc29uYC4gVG8gcHJldmVudCB0aGlzIGJlaGF2aW9yLCBzZXRcbiAqICAgICBgdHJhbnNmb3JtUmVxdWVzdGAgdG8gYW4gZW1wdHkgYXJyYXk6IGB0cmFuc2Zvcm1SZXF1ZXN0OiBbXWBcbiAqICAgLSAqKmB0cmFuc2Zvcm1SZXNwb25zZWAqKiDigJNcbiAqICAgICBge2Z1bmN0aW9uKGRhdGEsIGhlYWRlcnNHZXR0ZXIpfEFycmF5LjxmdW5jdGlvbihkYXRhLCBoZWFkZXJzR2V0dGVyKT59YCDigJNcbiAqICAgICB0cmFuc2Zvcm0gZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3VjaCBmdW5jdGlvbnMuIFRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gdGFrZXMgdGhlIGh0dHBcbiAqICAgICByZXNwb25zZSBib2R5IGFuZCBoZWFkZXJzIGFuZCByZXR1cm5zIGl0cyB0cmFuc2Zvcm1lZCAodHlwaWNhbGx5IGRlc2VyaWFsaXplZCkgdmVyc2lvbi5cbiAqICAgICBCeSBkZWZhdWx0LCB0cmFuc2Zvcm1SZXNwb25zZSB3aWxsIGNvbnRhaW4gb25lIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZSByZXNwb25zZSBsb29rcyBsaWtlXG4gKiAgICAgYSBKU09OIHN0cmluZyBhbmQgZGVzZXJpYWxpemVzIGl0IHVzaW5nIGBhbmd1bGFyLmZyb21Kc29uYC4gVG8gcHJldmVudCB0aGlzIGJlaGF2aW9yLCBzZXRcbiAqICAgICBgdHJhbnNmb3JtUmVzcG9uc2VgIHRvIGFuIGVtcHR5IGFycmF5OiBgdHJhbnNmb3JtUmVzcG9uc2U6IFtdYFxuICogICAtICoqYGNhY2hlYCoqIOKAkyBge2Jvb2xlYW58Q2FjaGV9YCDigJMgSWYgdHJ1ZSwgYSBkZWZhdWx0ICRodHRwIGNhY2hlIHdpbGwgYmUgdXNlZCB0byBjYWNoZSB0aGVcbiAqICAgICBHRVQgcmVxdWVzdCwgb3RoZXJ3aXNlIGlmIGEgY2FjaGUgaW5zdGFuY2UgYnVpbHQgd2l0aFxuICogICAgIHtAbGluayBuZy4kY2FjaGVGYWN0b3J5ICRjYWNoZUZhY3Rvcnl9LCB0aGlzIGNhY2hlIHdpbGwgYmUgdXNlZCBmb3JcbiAqICAgICBjYWNoaW5nLlxuICogICAtICoqYHRpbWVvdXRgKiog4oCTIGB7bnVtYmVyfFByb21pc2V9YCDigJMgdGltZW91dCBpbiBtaWxsaXNlY29uZHMsIG9yIHtAbGluayBuZy4kcSBwcm9taXNlfSB0aGF0XG4gKiAgICAgc2hvdWxkIGFib3J0IHRoZSByZXF1ZXN0IHdoZW4gcmVzb2x2ZWQuXG4gKiAgIC0gKipgd2l0aENyZWRlbnRpYWxzYCoqIC0gYHtib29sZWFufWAgLSB3aGV0aGVyIHRvIHNldCB0aGUgYHdpdGhDcmVkZW50aWFsc2AgZmxhZyBvbiB0aGVcbiAqICAgICBYSFIgb2JqZWN0LiBTZWVcbiAqICAgICBbcmVxdWVzdHMgd2l0aCBjcmVkZW50aWFsc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vaHR0cF9hY2Nlc3NfY29udHJvbCNzZWN0aW9uXzUpXG4gKiAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKiAgIC0gKipgcmVzcG9uc2VUeXBlYCoqIC0gYHtzdHJpbmd9YCAtIHNlZVxuICogICAgIFtyZXF1ZXN0VHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9ET00vWE1MSHR0cFJlcXVlc3QjcmVzcG9uc2VUeXBlKS5cbiAqICAgLSAqKmBpbnRlcmNlcHRvcmAqKiAtIGB7T2JqZWN0PX1gIC0gVGhlIGludGVyY2VwdG9yIG9iamVjdCBoYXMgdHdvIG9wdGlvbmFsIG1ldGhvZHMgLVxuICogICAgIGByZXNwb25zZWAgYW5kIGByZXNwb25zZUVycm9yYC4gQm90aCBgcmVzcG9uc2VgIGFuZCBgcmVzcG9uc2VFcnJvcmAgaW50ZXJjZXB0b3JzIGdldCBjYWxsZWRcbiAqICAgICB3aXRoIGBodHRwIHJlc3BvbnNlYCBvYmplY3QuIFNlZSB7QGxpbmsgbmcuJGh0dHAgJGh0dHAgaW50ZXJjZXB0b3JzfS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBIYXNoIHdpdGggY3VzdG9tIHNldHRpbmdzIHRoYXQgc2hvdWxkIGV4dGVuZCB0aGVcbiAqICAgZGVmYXVsdCBgJHJlc291cmNlUHJvdmlkZXJgIGJlaGF2aW9yLiAgVGhlIG9ubHkgc3VwcG9ydGVkIG9wdGlvbiBpc1xuICpcbiAqICAgV2hlcmU6XG4gKlxuICogICAtICoqYHN0cmlwVHJhaWxpbmdTbGFzaGVzYCoqIOKAkyB7Ym9vbGVhbn0g4oCTIElmIHRydWUgdGhlbiB0aGUgdHJhaWxpbmdcbiAqICAgc2xhc2hlcyBmcm9tIGFueSBjYWxjdWxhdGVkIFVSTCB3aWxsIGJlIHN0cmlwcGVkLiAoRGVmYXVsdHMgdG8gdHJ1ZS4pXG4gKlxuICogQHJldHVybnMge09iamVjdH0gQSByZXNvdXJjZSBcImNsYXNzXCIgb2JqZWN0IHdpdGggbWV0aG9kcyBmb3IgdGhlIGRlZmF1bHQgc2V0IG9mIHJlc291cmNlIGFjdGlvbnNcbiAqICAgb3B0aW9uYWxseSBleHRlbmRlZCB3aXRoIGN1c3RvbSBgYWN0aW9uc2AuIFRoZSBkZWZhdWx0IHNldCBjb250YWlucyB0aGVzZSBhY3Rpb25zOlxuICogICBgYGBqc1xuICogICB7ICdnZXQnOiAgICB7bWV0aG9kOidHRVQnfSxcbiAqICAgICAnc2F2ZSc6ICAge21ldGhvZDonUE9TVCd9LFxuICogICAgICdxdWVyeSc6ICB7bWV0aG9kOidHRVQnLCBpc0FycmF5OnRydWV9LFxuICogICAgICdyZW1vdmUnOiB7bWV0aG9kOidERUxFVEUnfSxcbiAqICAgICAnZGVsZXRlJzoge21ldGhvZDonREVMRVRFJ30gfTtcbiAqICAgYGBgXG4gKlxuICogICBDYWxsaW5nIHRoZXNlIG1ldGhvZHMgaW52b2tlIGFuIHtAbGluayBuZy4kaHR0cH0gd2l0aCB0aGUgc3BlY2lmaWVkIGh0dHAgbWV0aG9kLFxuICogICBkZXN0aW5hdGlvbiBhbmQgcGFyYW1ldGVycy4gV2hlbiB0aGUgZGF0YSBpcyByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgdGhlbiB0aGUgb2JqZWN0IGlzIGFuXG4gKiAgIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZSBjbGFzcy4gVGhlIGFjdGlvbnMgYHNhdmVgLCBgcmVtb3ZlYCBhbmQgYGRlbGV0ZWAgYXJlIGF2YWlsYWJsZSBvbiBpdFxuICogICBhcyAgbWV0aG9kcyB3aXRoIHRoZSBgJGAgcHJlZml4LiBUaGlzIGFsbG93cyB5b3UgdG8gZWFzaWx5IHBlcmZvcm0gQ1JVRCBvcGVyYXRpb25zIChjcmVhdGUsXG4gKiAgIHJlYWQsIHVwZGF0ZSwgZGVsZXRlKSBvbiBzZXJ2ZXItc2lkZSBkYXRhIGxpa2UgdGhpczpcbiAqICAgYGBganNcbiAqICAgdmFyIFVzZXIgPSAkcmVzb3VyY2UoJy91c2VyLzp1c2VySWQnLCB7dXNlcklkOidAaWQnfSk7XG4gKiAgIHZhciB1c2VyID0gVXNlci5nZXQoe3VzZXJJZDoxMjN9LCBmdW5jdGlvbigpIHtcbiAqICAgICB1c2VyLmFiYyA9IHRydWU7XG4gKiAgICAgdXNlci4kc2F2ZSgpO1xuICogICB9KTtcbiAqICAgYGBgXG4gKlxuICogICBJdCBpcyBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB0aGF0IGludm9raW5nIGEgJHJlc291cmNlIG9iamVjdCBtZXRob2QgaW1tZWRpYXRlbHkgcmV0dXJucyBhblxuICogICBlbXB0eSByZWZlcmVuY2UgKG9iamVjdCBvciBhcnJheSBkZXBlbmRpbmcgb24gYGlzQXJyYXlgKS4gT25jZSB0aGUgZGF0YSBpcyByZXR1cm5lZCBmcm9tIHRoZVxuICogICBzZXJ2ZXIgdGhlIGV4aXN0aW5nIHJlZmVyZW5jZSBpcyBwb3B1bGF0ZWQgd2l0aCB0aGUgYWN0dWFsIGRhdGEuIFRoaXMgaXMgYSB1c2VmdWwgdHJpY2sgc2luY2VcbiAqICAgdXN1YWxseSB0aGUgcmVzb3VyY2UgaXMgYXNzaWduZWQgdG8gYSBtb2RlbCB3aGljaCBpcyB0aGVuIHJlbmRlcmVkIGJ5IHRoZSB2aWV3LiBIYXZpbmcgYW4gZW1wdHlcbiAqICAgb2JqZWN0IHJlc3VsdHMgaW4gbm8gcmVuZGVyaW5nLCBvbmNlIHRoZSBkYXRhIGFycml2ZXMgZnJvbSB0aGUgc2VydmVyIHRoZW4gdGhlIG9iamVjdCBpc1xuICogICBwb3B1bGF0ZWQgd2l0aCB0aGUgZGF0YSBhbmQgdGhlIHZpZXcgYXV0b21hdGljYWxseSByZS1yZW5kZXJzIGl0c2VsZiBzaG93aW5nIHRoZSBuZXcgZGF0YS4gVGhpc1xuICogICBtZWFucyB0aGF0IGluIG1vc3QgY2FzZXMgb25lIG5ldmVyIGhhcyB0byB3cml0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgYWN0aW9uIG1ldGhvZHMuXG4gKlxuICogICBUaGUgYWN0aW9uIG1ldGhvZHMgb24gdGhlIGNsYXNzIG9iamVjdCBvciBpbnN0YW5jZSBvYmplY3QgY2FuIGJlIGludm9rZWQgd2l0aCB0aGUgZm9sbG93aW5nXG4gKiAgIHBhcmFtZXRlcnM6XG4gKlxuICogICAtIEhUVFAgR0VUIFwiY2xhc3NcIiBhY3Rpb25zOiBgUmVzb3VyY2UuYWN0aW9uKFtwYXJhbWV0ZXJzXSwgW3N1Y2Nlc3NdLCBbZXJyb3JdKWBcbiAqICAgLSBub24tR0VUIFwiY2xhc3NcIiBhY3Rpb25zOiBgUmVzb3VyY2UuYWN0aW9uKFtwYXJhbWV0ZXJzXSwgcG9zdERhdGEsIFtzdWNjZXNzXSwgW2Vycm9yXSlgXG4gKiAgIC0gbm9uLUdFVCBpbnN0YW5jZSBhY3Rpb25zOiAgYGluc3RhbmNlLiRhY3Rpb24oW3BhcmFtZXRlcnNdLCBbc3VjY2Vzc10sIFtlcnJvcl0pYFxuICpcbiAqICAgU3VjY2VzcyBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCAodmFsdWUsIHJlc3BvbnNlSGVhZGVycykgYXJndW1lbnRzLiBFcnJvciBjYWxsYmFjayBpcyBjYWxsZWRcbiAqICAgd2l0aCAoaHR0cFJlc3BvbnNlKSBhcmd1bWVudC5cbiAqXG4gKiAgIENsYXNzIGFjdGlvbnMgcmV0dXJuIGVtcHR5IGluc3RhbmNlICh3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcyBiZWxvdykuXG4gKiAgIEluc3RhbmNlIGFjdGlvbnMgcmV0dXJuIHByb21pc2Ugb2YgdGhlIGFjdGlvbi5cbiAqXG4gKiAgIFRoZSBSZXNvdXJjZSBpbnN0YW5jZXMgYW5kIGNvbGxlY3Rpb24gaGF2ZSB0aGVzZSBhZGRpdGlvbmFsIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGAkcHJvbWlzZWA6IHRoZSB7QGxpbmsgbmcuJHEgcHJvbWlzZX0gb2YgdGhlIG9yaWdpbmFsIHNlcnZlciBpbnRlcmFjdGlvbiB0aGF0IGNyZWF0ZWQgdGhpc1xuICogICAgIGluc3RhbmNlIG9yIGNvbGxlY3Rpb24uXG4gKlxuICogICAgIE9uIHN1Y2Nlc3MsIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggdGhlIHNhbWUgcmVzb3VyY2UgaW5zdGFuY2Ugb3IgY29sbGVjdGlvbiBvYmplY3QsXG4gKiAgICAgdXBkYXRlZCB3aXRoIGRhdGEgZnJvbSBzZXJ2ZXIuIFRoaXMgbWFrZXMgaXQgZWFzeSB0byB1c2UgaW5cbiAqICAgICB7QGxpbmsgbmdSb3V0ZS4kcm91dGVQcm92aWRlciByZXNvbHZlIHNlY3Rpb24gb2YgJHJvdXRlUHJvdmlkZXIud2hlbigpfSB0byBkZWZlciB2aWV3XG4gKiAgICAgcmVuZGVyaW5nIHVudGlsIHRoZSByZXNvdXJjZShzKSBhcmUgbG9hZGVkLlxuICpcbiAqICAgICBPbiBmYWlsdXJlLCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCB3aXRoIHRoZSB7QGxpbmsgbmcuJGh0dHAgaHR0cCByZXNwb25zZX0gb2JqZWN0LCB3aXRob3V0XG4gKiAgICAgdGhlIGByZXNvdXJjZWAgcHJvcGVydHkuXG4gKlxuICogICAgIElmIGFuIGludGVyY2VwdG9yIG9iamVjdCB3YXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIHdpbGwgaW5zdGVhZCBiZSByZXNvbHZlZCB3aXRoIHRoZSB2YWx1ZVxuICogICAgIHJldHVybmVkIGJ5IHRoZSBpbnRlcmNlcHRvci5cbiAqXG4gKiAgIC0gYCRyZXNvbHZlZGA6IGB0cnVlYCBhZnRlciBmaXJzdCBzZXJ2ZXIgaW50ZXJhY3Rpb24gaXMgY29tcGxldGVkIChlaXRoZXIgd2l0aCBzdWNjZXNzIG9yXG4gKiAgICAgIHJlamVjdGlvbiksIGBmYWxzZWAgYmVmb3JlIHRoYXQuIEtub3dpbmcgaWYgdGhlIFJlc291cmNlIGhhcyBiZWVuIHJlc29sdmVkIGlzIHVzZWZ1bCBpblxuICogICAgICBkYXRhLWJpbmRpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAjIENyZWRpdCBjYXJkIHJlc291cmNlXG4gKlxuICogYGBganNcbiAgICAgLy8gRGVmaW5lIENyZWRpdENhcmQgY2xhc3NcbiAgICAgdmFyIENyZWRpdENhcmQgPSAkcmVzb3VyY2UoJy91c2VyLzp1c2VySWQvY2FyZC86Y2FyZElkJyxcbiAgICAgIHt1c2VySWQ6MTIzLCBjYXJkSWQ6J0BpZCd9LCB7XG4gICAgICAgY2hhcmdlOiB7bWV0aG9kOidQT1NUJywgcGFyYW1zOntjaGFyZ2U6dHJ1ZX19XG4gICAgICB9KTtcblxuICAgICAvLyBXZSBjYW4gcmV0cmlldmUgYSBjb2xsZWN0aW9uIGZyb20gdGhlIHNlcnZlclxuICAgICB2YXIgY2FyZHMgPSBDcmVkaXRDYXJkLnF1ZXJ5KGZ1bmN0aW9uKCkge1xuICAgICAgIC8vIEdFVDogL3VzZXIvMTIzL2NhcmRcbiAgICAgICAvLyBzZXJ2ZXIgcmV0dXJuczogWyB7aWQ6NDU2LCBudW1iZXI6JzEyMzQnLCBuYW1lOidTbWl0aCd9IF07XG5cbiAgICAgICB2YXIgY2FyZCA9IGNhcmRzWzBdO1xuICAgICAgIC8vIGVhY2ggaXRlbSBpcyBhbiBpbnN0YW5jZSBvZiBDcmVkaXRDYXJkXG4gICAgICAgZXhwZWN0KGNhcmQgaW5zdGFuY2VvZiBDcmVkaXRDYXJkKS50b0VxdWFsKHRydWUpO1xuICAgICAgIGNhcmQubmFtZSA9IFwiSi4gU21pdGhcIjtcbiAgICAgICAvLyBub24gR0VUIG1ldGhvZHMgYXJlIG1hcHBlZCBvbnRvIHRoZSBpbnN0YW5jZXNcbiAgICAgICBjYXJkLiRzYXZlKCk7XG4gICAgICAgLy8gUE9TVDogL3VzZXIvMTIzL2NhcmQvNDU2IHtpZDo0NTYsIG51bWJlcjonMTIzNCcsIG5hbWU6J0ouIFNtaXRoJ31cbiAgICAgICAvLyBzZXJ2ZXIgcmV0dXJuczoge2lkOjQ1NiwgbnVtYmVyOicxMjM0JywgbmFtZTogJ0ouIFNtaXRoJ307XG5cbiAgICAgICAvLyBvdXIgY3VzdG9tIG1ldGhvZCBpcyBtYXBwZWQgYXMgd2VsbC5cbiAgICAgICBjYXJkLiRjaGFyZ2Uoe2Ftb3VudDo5Ljk5fSk7XG4gICAgICAgLy8gUE9TVDogL3VzZXIvMTIzL2NhcmQvNDU2P2Ftb3VudD05Ljk5JmNoYXJnZT10cnVlIHtpZDo0NTYsIG51bWJlcjonMTIzNCcsIG5hbWU6J0ouIFNtaXRoJ31cbiAgICAgfSk7XG5cbiAgICAgLy8gd2UgY2FuIGNyZWF0ZSBhbiBpbnN0YW5jZSBhcyB3ZWxsXG4gICAgIHZhciBuZXdDYXJkID0gbmV3IENyZWRpdENhcmQoe251bWJlcjonMDEyMyd9KTtcbiAgICAgbmV3Q2FyZC5uYW1lID0gXCJNaWtlIFNtaXRoXCI7XG4gICAgIG5ld0NhcmQuJHNhdmUoKTtcbiAgICAgLy8gUE9TVDogL3VzZXIvMTIzL2NhcmQge251bWJlcjonMDEyMycsIG5hbWU6J01pa2UgU21pdGgnfVxuICAgICAvLyBzZXJ2ZXIgcmV0dXJuczoge2lkOjc4OSwgbnVtYmVyOicwMTIzJywgbmFtZTogJ01pa2UgU21pdGgnfTtcbiAgICAgZXhwZWN0KG5ld0NhcmQuaWQpLnRvRXF1YWwoNzg5KTtcbiAqIGBgYFxuICpcbiAqIFRoZSBvYmplY3QgcmV0dXJuZWQgZnJvbSB0aGlzIGZ1bmN0aW9uIGV4ZWN1dGlvbiBpcyBhIHJlc291cmNlIFwiY2xhc3NcIiB3aGljaCBoYXMgXCJzdGF0aWNcIiBtZXRob2RcbiAqIGZvciBlYWNoIGFjdGlvbiBpbiB0aGUgZGVmaW5pdGlvbi5cbiAqXG4gKiBDYWxsaW5nIHRoZXNlIG1ldGhvZHMgaW52b2tlIGAkaHR0cGAgb24gdGhlIGB1cmxgIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIGBtZXRob2RgLCBgcGFyYW1zYCBhbmRcbiAqIGBoZWFkZXJzYC5cbiAqIFdoZW4gdGhlIGRhdGEgaXMgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyIHRoZW4gdGhlIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgdHlwZSBhbmRcbiAqIGFsbCBvZiB0aGUgbm9uLUdFVCBtZXRob2RzIGFyZSBhdmFpbGFibGUgd2l0aCBgJGAgcHJlZml4LiBUaGlzIGFsbG93cyB5b3UgdG8gZWFzaWx5IHN1cHBvcnQgQ1JVRFxuICogb3BlcmF0aW9ucyAoY3JlYXRlLCByZWFkLCB1cGRhdGUsIGRlbGV0ZSkgb24gc2VydmVyLXNpZGUgZGF0YS5cblxuICAgYGBganNcbiAgICAgdmFyIFVzZXIgPSAkcmVzb3VyY2UoJy91c2VyLzp1c2VySWQnLCB7dXNlcklkOidAaWQnfSk7XG4gICAgIFVzZXIuZ2V0KHt1c2VySWQ6MTIzfSwgZnVuY3Rpb24odXNlcikge1xuICAgICAgIHVzZXIuYWJjID0gdHJ1ZTtcbiAgICAgICB1c2VyLiRzYXZlKCk7XG4gICAgIH0pO1xuICAgYGBgXG4gKlxuICogSXQncyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgc3VjY2VzcyBjYWxsYmFjayBmb3IgYGdldGAsIGBxdWVyeWAgYW5kIG90aGVyIG1ldGhvZHMgZ2V0cyBwYXNzZWRcbiAqIGluIHRoZSByZXNwb25zZSB0aGF0IGNhbWUgZnJvbSB0aGUgc2VydmVyIGFzIHdlbGwgYXMgJGh0dHAgaGVhZGVyIGdldHRlciBmdW5jdGlvbiwgc28gb25lXG4gKiBjb3VsZCByZXdyaXRlIHRoZSBhYm92ZSBleGFtcGxlIGFuZCBnZXQgYWNjZXNzIHRvIGh0dHAgaGVhZGVycyBhczpcbiAqXG4gICBgYGBqc1xuICAgICB2YXIgVXNlciA9ICRyZXNvdXJjZSgnL3VzZXIvOnVzZXJJZCcsIHt1c2VySWQ6J0BpZCd9KTtcbiAgICAgVXNlci5nZXQoe3VzZXJJZDoxMjN9LCBmdW5jdGlvbih1LCBnZXRSZXNwb25zZUhlYWRlcnMpe1xuICAgICAgIHUuYWJjID0gdHJ1ZTtcbiAgICAgICB1LiRzYXZlKGZ1bmN0aW9uKHUsIHB1dFJlc3BvbnNlSGVhZGVycykge1xuICAgICAgICAgLy91ID0+IHNhdmVkIHVzZXIgb2JqZWN0XG4gICAgICAgICAvL3B1dFJlc3BvbnNlSGVhZGVycyA9PiAkaHR0cCBoZWFkZXIgZ2V0dGVyXG4gICAgICAgfSk7XG4gICAgIH0pO1xuICAgYGBgXG4gKlxuICogWW91IGNhbiBhbHNvIGFjY2VzcyB0aGUgcmF3IGAkaHR0cGAgcHJvbWlzZSB2aWEgdGhlIGAkcHJvbWlzZWAgcHJvcGVydHkgb24gdGhlIG9iamVjdCByZXR1cm5lZFxuICpcbiAgIGBgYFxuICAgICB2YXIgVXNlciA9ICRyZXNvdXJjZSgnL3VzZXIvOnVzZXJJZCcsIHt1c2VySWQ6J0BpZCd9KTtcbiAgICAgVXNlci5nZXQoe3VzZXJJZDoxMjN9KVxuICAgICAgICAgLiRwcm9taXNlLnRoZW4oZnVuY3Rpb24odXNlcikge1xuICAgICAgICAgICAkc2NvcGUudXNlciA9IHVzZXI7XG4gICAgICAgICB9KTtcbiAgIGBgYFxuXG4gKiAjIENyZWF0aW5nIGEgY3VzdG9tICdQVVQnIHJlcXVlc3RcbiAqIEluIHRoaXMgZXhhbXBsZSB3ZSBjcmVhdGUgYSBjdXN0b20gbWV0aG9kIG9uIG91ciByZXNvdXJjZSB0byBtYWtlIGEgUFVUIHJlcXVlc3RcbiAqIGBgYGpzXG4gKiAgICB2YXIgYXBwID0gYW5ndWxhci5tb2R1bGUoJ2FwcCcsIFsnbmdSZXNvdXJjZScsICduZ1JvdXRlJ10pO1xuICpcbiAqICAgIC8vIFNvbWUgQVBJcyBleHBlY3QgYSBQVVQgcmVxdWVzdCBpbiB0aGUgZm9ybWF0IFVSTC9vYmplY3QvSURcbiAqICAgIC8vIEhlcmUgd2UgYXJlIGNyZWF0aW5nIGFuICd1cGRhdGUnIG1ldGhvZFxuICogICAgYXBwLmZhY3RvcnkoJ05vdGVzJywgWyckcmVzb3VyY2UnLCBmdW5jdGlvbigkcmVzb3VyY2UpIHtcbiAqICAgIHJldHVybiAkcmVzb3VyY2UoJy9ub3Rlcy86aWQnLCBudWxsLFxuICogICAgICAgIHtcbiAqICAgICAgICAgICAgJ3VwZGF0ZSc6IHsgbWV0aG9kOidQVVQnIH1cbiAqICAgICAgICB9KTtcbiAqICAgIH1dKTtcbiAqXG4gKiAgICAvLyBJbiBvdXIgY29udHJvbGxlciB3ZSBnZXQgdGhlIElEIGZyb20gdGhlIFVSTCB1c2luZyBuZ1JvdXRlIGFuZCAkcm91dGVQYXJhbXNcbiAqICAgIC8vIFdlIHBhc3MgaW4gJHJvdXRlUGFyYW1zIGFuZCBvdXIgTm90ZXMgZmFjdG9yeSBhbG9uZyB3aXRoICRzY29wZVxuICogICAgYXBwLmNvbnRyb2xsZXIoJ05vdGVzQ3RybCcsIFsnJHNjb3BlJywgJyRyb3V0ZVBhcmFtcycsICdOb3RlcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRzY29wZSwgJHJvdXRlUGFyYW1zLCBOb3Rlcykge1xuICogICAgLy8gRmlyc3QgZ2V0IGEgbm90ZSBvYmplY3QgZnJvbSB0aGUgZmFjdG9yeVxuICogICAgdmFyIG5vdGUgPSBOb3Rlcy5nZXQoeyBpZDokcm91dGVQYXJhbXMuaWQgfSk7XG4gKiAgICAkaWQgPSBub3RlLmlkO1xuICpcbiAqICAgIC8vIE5vdyBjYWxsIHVwZGF0ZSBwYXNzaW5nIGluIHRoZSBJRCBmaXJzdCB0aGVuIHRoZSBvYmplY3QgeW91IGFyZSB1cGRhdGluZ1xuICogICAgTm90ZXMudXBkYXRlKHsgaWQ6JGlkIH0sIG5vdGUpO1xuICpcbiAqICAgIC8vIFRoaXMgd2lsbCBQVVQgL25vdGVzL0lEIHdpdGggdGhlIG5vdGUgb2JqZWN0IGluIHRoZSByZXF1ZXN0IHBheWxvYWRcbiAqICAgIH1dKTtcbiAqIGBgYFxuICovXG5hbmd1bGFyLm1vZHVsZSgnbmdSZXNvdXJjZScsIFsnbmcnXSkuXG4gIHByb3ZpZGVyKCckcmVzb3VyY2UnLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgcHJvdmlkZXIgPSB0aGlzO1xuXG4gICAgdGhpcy5kZWZhdWx0cyA9IHtcbiAgICAgIC8vIFN0cmlwIHNsYXNoZXMgYnkgZGVmYXVsdFxuICAgICAgc3RyaXBUcmFpbGluZ1NsYXNoZXM6IHRydWUsXG5cbiAgICAgIC8vIERlZmF1bHQgYWN0aW9ucyBjb25maWd1cmF0aW9uXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgICdnZXQnOiB7bWV0aG9kOiAnR0VUJ30sXG4gICAgICAgICdzYXZlJzoge21ldGhvZDogJ1BPU1QnfSxcbiAgICAgICAgJ3F1ZXJ5Jzoge21ldGhvZDogJ0dFVCcsIGlzQXJyYXk6IHRydWV9LFxuICAgICAgICAncmVtb3ZlJzoge21ldGhvZDogJ0RFTEVURSd9LFxuICAgICAgICAnZGVsZXRlJzoge21ldGhvZDogJ0RFTEVURSd9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuJGdldCA9IFsnJGh0dHAnLCAnJHEnLCBmdW5jdGlvbigkaHR0cCwgJHEpIHtcblxuICAgICAgdmFyIG5vb3AgPSBhbmd1bGFyLm5vb3AsXG4gICAgICAgIGZvckVhY2ggPSBhbmd1bGFyLmZvckVhY2gsXG4gICAgICAgIGV4dGVuZCA9IGFuZ3VsYXIuZXh0ZW5kLFxuICAgICAgICBjb3B5ID0gYW5ndWxhci5jb3B5LFxuICAgICAgICBpc0Z1bmN0aW9uID0gYW5ndWxhci5pc0Z1bmN0aW9uO1xuXG4gICAgICAvKipcbiAgICAgICAqIFdlIG5lZWQgb3VyIGN1c3RvbSBtZXRob2QgYmVjYXVzZSBlbmNvZGVVUklDb21wb25lbnQgaXMgdG9vIGFnZ3Jlc3NpdmUgYW5kIGRvZXNuJ3QgZm9sbG93XG4gICAgICAgKiBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzOTg2LnR4dCB3aXRoIHJlZ2FyZHMgdG8gdGhlIGNoYXJhY3RlciBzZXRcbiAgICAgICAqIChwY2hhcikgYWxsb3dlZCBpbiBwYXRoIHNlZ21lbnRzOlxuICAgICAgICogICAgc2VnbWVudCAgICAgICA9ICpwY2hhclxuICAgICAgICogICAgcGNoYXIgICAgICAgICA9IHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1kZWxpbXMgLyBcIjpcIiAvIFwiQFwiXG4gICAgICAgKiAgICBwY3QtZW5jb2RlZCAgID0gXCIlXCIgSEVYRElHIEhFWERJR1xuICAgICAgICogICAgdW5yZXNlcnZlZCAgICA9IEFMUEhBIC8gRElHSVQgLyBcIi1cIiAvIFwiLlwiIC8gXCJfXCIgLyBcIn5cIlxuICAgICAgICogICAgc3ViLWRlbGltcyAgICA9IFwiIVwiIC8gXCIkXCIgLyBcIiZcIiAvIFwiJ1wiIC8gXCIoXCIgLyBcIilcIlxuICAgICAgICogICAgICAgICAgICAgICAgICAgICAvIFwiKlwiIC8gXCIrXCIgLyBcIixcIiAvIFwiO1wiIC8gXCI9XCJcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gZW5jb2RlVXJpU2VnbWVudCh2YWwpIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVVyaVF1ZXJ5KHZhbCwgdHJ1ZSkuXG4gICAgICAgICAgcmVwbGFjZSgvJTI2L2dpLCAnJicpLlxuICAgICAgICAgIHJlcGxhY2UoLyUzRC9naSwgJz0nKS5cbiAgICAgICAgICByZXBsYWNlKC8lMkIvZ2ksICcrJyk7XG4gICAgICB9XG5cblxuICAgICAgLyoqXG4gICAgICAgKiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgZW5jb2RpbmcgKmtleSogb3IgKnZhbHVlKiBwYXJ0cyBvZiBxdWVyeSBjb21wb25lbnQuIFdlIG5lZWQgYVxuICAgICAgICogY3VzdG9tIG1ldGhvZCBiZWNhdXNlIGVuY29kZVVSSUNvbXBvbmVudCBpcyB0b28gYWdncmVzc2l2ZSBhbmQgZW5jb2RlcyBzdHVmZiB0aGF0IGRvZXNuJ3RcbiAgICAgICAqIGhhdmUgdG8gYmUgZW5jb2RlZCBwZXIgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NjpcbiAgICAgICAqICAgIHF1ZXJ5ICAgICAgID0gKiggcGNoYXIgLyBcIi9cIiAvIFwiP1wiIClcbiAgICAgICAqICAgIHBjaGFyICAgICAgICAgPSB1bnJlc2VydmVkIC8gcGN0LWVuY29kZWQgLyBzdWItZGVsaW1zIC8gXCI6XCIgLyBcIkBcIlxuICAgICAgICogICAgdW5yZXNlcnZlZCAgICA9IEFMUEhBIC8gRElHSVQgLyBcIi1cIiAvIFwiLlwiIC8gXCJfXCIgLyBcIn5cIlxuICAgICAgICogICAgcGN0LWVuY29kZWQgICA9IFwiJVwiIEhFWERJRyBIRVhESUdcbiAgICAgICAqICAgIHN1Yi1kZWxpbXMgICAgPSBcIiFcIiAvIFwiJFwiIC8gXCImXCIgLyBcIidcIiAvIFwiKFwiIC8gXCIpXCJcbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgLyBcIipcIiAvIFwiK1wiIC8gXCIsXCIgLyBcIjtcIiAvIFwiPVwiXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIGVuY29kZVVyaVF1ZXJ5KHZhbCwgcGN0RW5jb2RlU3BhY2VzKSB7XG4gICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICAgICAgICByZXBsYWNlKC8lNDAvZ2ksICdAJykuXG4gICAgICAgICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgICAgICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgICAgICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICAgICAgICByZXBsYWNlKC8lMjAvZywgKHBjdEVuY29kZVNwYWNlcyA/ICclMjAnIDogJysnKSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIFJvdXRlKHRlbXBsYXRlLCBkZWZhdWx0cykge1xuICAgICAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgICAgIHRoaXMuZGVmYXVsdHMgPSBleHRlbmQoe30sIHByb3ZpZGVyLmRlZmF1bHRzLCBkZWZhdWx0cyk7XG4gICAgICAgIHRoaXMudXJsUGFyYW1zID0ge307XG4gICAgICB9XG5cbiAgICAgIFJvdXRlLnByb3RvdHlwZSA9IHtcbiAgICAgICAgc2V0VXJsUGFyYW1zOiBmdW5jdGlvbihjb25maWcsIHBhcmFtcywgYWN0aW9uVXJsKSB7XG4gICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICAgICAgdXJsID0gYWN0aW9uVXJsIHx8IHNlbGYudGVtcGxhdGUsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlbmNvZGVkVmFsO1xuXG4gICAgICAgICAgdmFyIHVybFBhcmFtcyA9IHNlbGYudXJsUGFyYW1zID0ge307XG4gICAgICAgICAgZm9yRWFjaCh1cmwuc3BsaXQoL1xcVy8pLCBmdW5jdGlvbihwYXJhbSkge1xuICAgICAgICAgICAgaWYgKHBhcmFtID09PSAnaGFzT3duUHJvcGVydHknKSB7XG4gICAgICAgICAgICAgIHRocm93ICRyZXNvdXJjZU1pbkVycignYmFkbmFtZScsIFwiaGFzT3duUHJvcGVydHkgaXMgbm90IGEgdmFsaWQgcGFyYW1ldGVyIG5hbWUuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEobmV3IFJlZ0V4cChcIl5cXFxcZCskXCIpLnRlc3QocGFyYW0pKSAmJiBwYXJhbSAmJlxuICAgICAgICAgICAgICAobmV3IFJlZ0V4cChcIihefFteXFxcXFxcXFxdKTpcIiArIHBhcmFtICsgXCIoXFxcXFd8JClcIikudGVzdCh1cmwpKSkge1xuICAgICAgICAgICAgICB1cmxQYXJhbXNbcGFyYW1dID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFxcXDovZywgJzonKTtcblxuICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICAgICAgICBmb3JFYWNoKHNlbGYudXJsUGFyYW1zLCBmdW5jdGlvbihfLCB1cmxQYXJhbSkge1xuICAgICAgICAgICAgdmFsID0gcGFyYW1zLmhhc093blByb3BlcnR5KHVybFBhcmFtKSA/IHBhcmFtc1t1cmxQYXJhbV0gOiBzZWxmLmRlZmF1bHRzW3VybFBhcmFtXTtcbiAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZCh2YWwpICYmIHZhbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBlbmNvZGVkVmFsID0gZW5jb2RlVXJpU2VnbWVudCh2YWwpO1xuICAgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShuZXcgUmVnRXhwKFwiOlwiICsgdXJsUGFyYW0gKyBcIihcXFxcV3wkKVwiLCBcImdcIiksIGZ1bmN0aW9uKG1hdGNoLCBwMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkVmFsICsgcDE7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UobmV3IFJlZ0V4cChcIihcXC8/KTpcIiArIHVybFBhcmFtICsgXCIoXFxcXFd8JClcIiwgXCJnXCIpLCBmdW5jdGlvbihtYXRjaCxcbiAgICAgICAgICAgICAgICAgIGxlYWRpbmdTbGFzaGVzLCB0YWlsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhaWwuY2hhckF0KDApID09ICcvJykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhaWw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBsZWFkaW5nU2xhc2hlcyArIHRhaWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIHN0cmlwIHRyYWlsaW5nIHNsYXNoZXMgYW5kIHNldCB0aGUgdXJsICh1bmxlc3MgdGhpcyBiZWhhdmlvciBpcyBzcGVjaWZpY2FsbHkgZGlzYWJsZWQpXG4gICAgICAgICAgaWYgKHNlbGYuZGVmYXVsdHMuc3RyaXBUcmFpbGluZ1NsYXNoZXMpIHtcbiAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKC9cXC8rJC8sICcnKSB8fCAnLyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gdGhlbiByZXBsYWNlIGNvbGxhcHNlIGAvLmAgaWYgZm91bmQgaW4gdGhlIGxhc3QgVVJMIHBhdGggc2VnbWVudCBiZWZvcmUgdGhlIHF1ZXJ5XG4gICAgICAgICAgLy8gRS5nLiBgaHR0cDovL3VybC5jb20vaWQuL2Zvcm1hdD9xPXhgIGJlY29tZXMgYGh0dHA6Ly91cmwuY29tL2lkLmZvcm1hdD9xPXhgXG4gICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcL1xcLig/PVxcdysoJHxcXD8pKS8sICcuJyk7XG4gICAgICAgICAgLy8gcmVwbGFjZSBlc2NhcGVkIGAvXFwuYCB3aXRoIGAvLmBcbiAgICAgICAgICBjb25maWcudXJsID0gdXJsLnJlcGxhY2UoL1xcL1xcXFxcXC4vLCAnLy4nKTtcblxuXG4gICAgICAgICAgLy8gc2V0IHBhcmFtcyAtIGRlbGVnYXRlIHBhcmFtIGVuY29kaW5nIHRvICRodHRwXG4gICAgICAgICAgZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICAgIGlmICghc2VsZi51cmxQYXJhbXNba2V5XSkge1xuICAgICAgICAgICAgICBjb25maWcucGFyYW1zID0gY29uZmlnLnBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgICAgY29uZmlnLnBhcmFtc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cblxuICAgICAgZnVuY3Rpb24gcmVzb3VyY2VGYWN0b3J5KHVybCwgcGFyYW1EZWZhdWx0cywgYWN0aW9ucywgb3B0aW9ucykge1xuICAgICAgICB2YXIgcm91dGUgPSBuZXcgUm91dGUodXJsLCBvcHRpb25zKTtcblxuICAgICAgICBhY3Rpb25zID0gZXh0ZW5kKHt9LCBwcm92aWRlci5kZWZhdWx0cy5hY3Rpb25zLCBhY3Rpb25zKTtcblxuICAgICAgICBmdW5jdGlvbiBleHRyYWN0UGFyYW1zKGRhdGEsIGFjdGlvblBhcmFtcykge1xuICAgICAgICAgIHZhciBpZHMgPSB7fTtcbiAgICAgICAgICBhY3Rpb25QYXJhbXMgPSBleHRlbmQoe30sIHBhcmFtRGVmYXVsdHMsIGFjdGlvblBhcmFtcyk7XG4gICAgICAgICAgZm9yRWFjaChhY3Rpb25QYXJhbXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkgeyB2YWx1ZSA9IHZhbHVlKCk7IH1cbiAgICAgICAgICAgIGlkc1trZXldID0gdmFsdWUgJiYgdmFsdWUuY2hhckF0ICYmIHZhbHVlLmNoYXJBdCgwKSA9PSAnQCcgP1xuICAgICAgICAgICAgICBsb29rdXBEb3R0ZWRQYXRoKGRhdGEsIHZhbHVlLnN1YnN0cigxKSkgOiB2YWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gaWRzO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFJlc3BvbnNlSW50ZXJjZXB0b3IocmVzcG9uc2UpIHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVzb3VyY2U7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBSZXNvdXJjZSh2YWx1ZSkge1xuICAgICAgICAgIHNoYWxsb3dDbGVhckFuZENvcHkodmFsdWUgfHwge30sIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgUmVzb3VyY2UucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBkYXRhID0gZXh0ZW5kKHt9LCB0aGlzKTtcbiAgICAgICAgICBkZWxldGUgZGF0YS4kcHJvbWlzZTtcbiAgICAgICAgICBkZWxldGUgZGF0YS4kcmVzb2x2ZWQ7XG4gICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yRWFjaChhY3Rpb25zLCBmdW5jdGlvbihhY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgICB2YXIgaGFzQm9keSA9IC9eKFBPU1R8UFVUfFBBVENIKSQvaS50ZXN0KGFjdGlvbi5tZXRob2QpO1xuXG4gICAgICAgICAgUmVzb3VyY2VbbmFtZV0gPSBmdW5jdGlvbihhMSwgYTIsIGEzLCBhNCkge1xuICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHt9LCBkYXRhLCBzdWNjZXNzLCBlcnJvcjtcblxuICAgICAgICAgICAgLyoganNoaW50IC1XMDg2ICovIC8qIChwdXJwb3NlZnVsbHkgZmFsbCB0aHJvdWdoIGNhc2Ugc3RhdGVtZW50cykgKi9cbiAgICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBhNDtcbiAgICAgICAgICAgICAgICBzdWNjZXNzID0gYTM7XG4gICAgICAgICAgICAgIC8vZmFsbHRocm91Z2hcbiAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oYTIpKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihhMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGExO1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGEyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGEyO1xuICAgICAgICAgICAgICAgICAgZXJyb3IgPSBhMztcbiAgICAgICAgICAgICAgICAgIC8vZmFsbHRocm91Z2hcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGFyYW1zID0gYTE7XG4gICAgICAgICAgICAgICAgICBkYXRhID0gYTI7XG4gICAgICAgICAgICAgICAgICBzdWNjZXNzID0gYTM7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihhMSkpIHN1Y2Nlc3MgPSBhMTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChoYXNCb2R5KSBkYXRhID0gYTE7XG4gICAgICAgICAgICAgICAgZWxzZSBwYXJhbXMgPSBhMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAwOiBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyAkcmVzb3VyY2VNaW5FcnIoJ2JhZGFyZ3MnLFxuICAgICAgICAgICAgICAgICAgXCJFeHBlY3RlZCB1cCB0byA0IGFyZ3VtZW50cyBbcGFyYW1zLCBkYXRhLCBzdWNjZXNzLCBlcnJvcl0sIGdvdCB7MH0gYXJndW1lbnRzXCIsXG4gICAgICAgICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGpzaGludCArVzA4NiAqLyAvKiAocHVycG9zZWZ1bGx5IGZhbGwgdGhyb3VnaCBjYXNlIHN0YXRlbWVudHMpICovXG5cbiAgICAgICAgICAgIHZhciBpc0luc3RhbmNlQ2FsbCA9IHRoaXMgaW5zdGFuY2VvZiBSZXNvdXJjZTtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGlzSW5zdGFuY2VDYWxsID8gZGF0YSA6IChhY3Rpb24uaXNBcnJheSA/IFtdIDogbmV3IFJlc291cmNlKGRhdGEpKTtcbiAgICAgICAgICAgIHZhciBodHRwQ29uZmlnID0ge307XG4gICAgICAgICAgICB2YXIgcmVzcG9uc2VJbnRlcmNlcHRvciA9IGFjdGlvbi5pbnRlcmNlcHRvciAmJiBhY3Rpb24uaW50ZXJjZXB0b3IucmVzcG9uc2UgfHxcbiAgICAgICAgICAgICAgZGVmYXVsdFJlc3BvbnNlSW50ZXJjZXB0b3I7XG4gICAgICAgICAgICB2YXIgcmVzcG9uc2VFcnJvckludGVyY2VwdG9yID0gYWN0aW9uLmludGVyY2VwdG9yICYmIGFjdGlvbi5pbnRlcmNlcHRvci5yZXNwb25zZUVycm9yIHx8XG4gICAgICAgICAgICAgIHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgZm9yRWFjaChhY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICAgICAgaWYgKGtleSAhPSAncGFyYW1zJyAmJiBrZXkgIT0gJ2lzQXJyYXknICYmIGtleSAhPSAnaW50ZXJjZXB0b3InKSB7XG4gICAgICAgICAgICAgICAgaHR0cENvbmZpZ1trZXldID0gY29weSh2YWx1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaGFzQm9keSkgaHR0cENvbmZpZy5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIHJvdXRlLnNldFVybFBhcmFtcyhodHRwQ29uZmlnLFxuICAgICAgICAgICAgICBleHRlbmQoe30sIGV4dHJhY3RQYXJhbXMoZGF0YSwgYWN0aW9uLnBhcmFtcyB8fCB7fSksIHBhcmFtcyksXG4gICAgICAgICAgICAgIGFjdGlvbi51cmwpO1xuXG4gICAgICAgICAgICB2YXIgcHJvbWlzZSA9ICRodHRwKGh0dHBDb25maWcpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgdmFyIGRhdGEgPSByZXNwb25zZS5kYXRhLFxuICAgICAgICAgICAgICAgIHByb21pc2UgPSB2YWx1ZS4kcHJvbWlzZTtcblxuICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gY29udmVydCBhY3Rpb24uaXNBcnJheSB0byBib29sZWFuIGluIGNhc2UgaXQgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgLy8ganNoaW50IC1XMDE4XG4gICAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNBcnJheShkYXRhKSAhPT0gKCEhYWN0aW9uLmlzQXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyAkcmVzb3VyY2VNaW5FcnIoJ2JhZGNmZycsXG4gICAgICAgICAgICAgICAgICAgICAgJ0Vycm9yIGluIHJlc291cmNlIGNvbmZpZ3VyYXRpb24gZm9yIGFjdGlvbiBgezB9YC4gRXhwZWN0ZWQgcmVzcG9uc2UgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgJ2NvbnRhaW4gYW4gezF9IGJ1dCBnb3QgYW4gezJ9JywgbmFtZSwgYWN0aW9uLmlzQXJyYXkgPyAnYXJyYXknIDogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuaXNBcnJheShkYXRhKSA/ICdhcnJheScgOiAnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGpzaGludCArVzAxOFxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaXNBcnJheSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgIGZvckVhY2goZGF0YSwgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKG5ldyBSZXNvdXJjZShpdGVtKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVmFsaWQgSlNPTiB2YWx1ZXMgbWF5IGJlIHN0cmluZyBsaXRlcmFscywgYW5kIHRoZXNlIHNob3VsZCBub3QgYmUgY29udmVydGVkXG4gICAgICAgICAgICAgICAgICAgICAgLy8gaW50byBvYmplY3RzLiBUaGVzZSBpdGVtcyB3aWxsIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgUmVzb3VyY2UgcHJvdG90eXBlXG4gICAgICAgICAgICAgICAgICAgICAgLy8gbWV0aG9kcywgYnV0IHVuZm9ydHVuYXRlbHkgdGhlcmVcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgc2hhbGxvd0NsZWFyQW5kQ29weShkYXRhLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB2YWx1ZS4kcHJvbWlzZSA9IHByb21pc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdmFsdWUuJHJlc29sdmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICByZXNwb25zZS5yZXNvdXJjZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgIHZhbHVlLiRyZXNvbHZlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgKGVycm9yIHx8IG5vb3ApKHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICByZXR1cm4gJHEucmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKFxuICAgICAgICAgICAgICBmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlc3BvbnNlSW50ZXJjZXB0b3IocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIChzdWNjZXNzIHx8IG5vb3ApKHZhbHVlLCByZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlc3BvbnNlRXJyb3JJbnRlcmNlcHRvcik7XG5cbiAgICAgICAgICAgIGlmICghaXNJbnN0YW5jZUNhbGwpIHtcbiAgICAgICAgICAgICAgLy8gd2UgYXJlIGNyZWF0aW5nIGluc3RhbmNlIC8gY29sbGVjdGlvblxuICAgICAgICAgICAgICAvLyAtIHNldCB0aGUgaW5pdGlhbCBwcm9taXNlXG4gICAgICAgICAgICAgIC8vIC0gcmV0dXJuIHRoZSBpbnN0YW5jZSAvIGNvbGxlY3Rpb25cbiAgICAgICAgICAgICAgdmFsdWUuJHByb21pc2UgPSBwcm9taXNlO1xuICAgICAgICAgICAgICB2YWx1ZS4kcmVzb2x2ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGluc3RhbmNlIGNhbGxcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgIH07XG5cblxuICAgICAgICAgIFJlc291cmNlLnByb3RvdHlwZVsnJCcgKyBuYW1lXSA9IGZ1bmN0aW9uKHBhcmFtcywgc3VjY2VzcywgZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgZXJyb3IgPSBzdWNjZXNzOyBzdWNjZXNzID0gcGFyYW1zOyBwYXJhbXMgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBSZXNvdXJjZVtuYW1lXS5jYWxsKHRoaXMsIHBhcmFtcywgdGhpcywgc3VjY2VzcywgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC4kcHJvbWlzZSB8fCByZXN1bHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgUmVzb3VyY2UuYmluZCA9IGZ1bmN0aW9uKGFkZGl0aW9uYWxQYXJhbURlZmF1bHRzKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc291cmNlRmFjdG9yeSh1cmwsIGV4dGVuZCh7fSwgcGFyYW1EZWZhdWx0cywgYWRkaXRpb25hbFBhcmFtRGVmYXVsdHMpLCBhY3Rpb25zKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gUmVzb3VyY2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvdXJjZUZhY3Rvcnk7XG4gICAgfV07XG4gIH0pO1xuXG5cbn0pKHdpbmRvdywgd2luZG93LmFuZ3VsYXIpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFuZ3VsYXItcmVzb3VyY2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJhbmd1bGFyLXJlc291cmNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlIEFuZ3VsYXJKUyB2MS4zLjNcclxuICogKGMpIDIwMTAtMjAxNCBHb29nbGUsIEluYy4gaHR0cDovL2FuZ3VsYXJqcy5vcmdcclxuICogTGljZW5zZTogTUlUXHJcbiAqL1xyXG4oZnVuY3Rpb24od2luZG93LCBhbmd1bGFyLCB1bmRlZmluZWQpIHsndXNlIHN0cmljdCc7XHJcblxyXG52YXIgJHJlc291cmNlTWluRXJyID0gYW5ndWxhci4kJG1pbkVycignJHJlc291cmNlJyk7XHJcblxyXG4vLyBIZWxwZXIgZnVuY3Rpb25zIGFuZCByZWdleCB0byBsb29rdXAgYSBkb3R0ZWQgcGF0aCBvbiBhbiBvYmplY3RcclxuLy8gc3RvcHBpbmcgYXQgdW5kZWZpbmVkL251bGwuICBUaGUgcGF0aCBtdXN0IGJlIGNvbXBvc2VkIG9mIEFTQ0lJXHJcbi8vIGlkZW50aWZpZXJzIChqdXN0IGxpa2UgJHBhcnNlKVxyXG52YXIgTUVNQkVSX05BTUVfUkVHRVggPSAvXihcXC5bYS16QS1aXyRdWzAtOWEtekEtWl8kXSopKyQvO1xyXG5cclxuZnVuY3Rpb24gaXNWYWxpZERvdHRlZFBhdGgocGF0aCkge1xyXG4gIHJldHVybiAocGF0aCAhPSBudWxsICYmIHBhdGggIT09ICcnICYmIHBhdGggIT09ICdoYXNPd25Qcm9wZXJ0eScgJiZcclxuICAgICAgTUVNQkVSX05BTUVfUkVHRVgudGVzdCgnLicgKyBwYXRoKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxvb2t1cERvdHRlZFBhdGgob2JqLCBwYXRoKSB7XHJcbiAgaWYgKCFpc1ZhbGlkRG90dGVkUGF0aChwYXRoKSkge1xyXG4gICAgdGhyb3cgJHJlc291cmNlTWluRXJyKCdiYWRtZW1iZXInLCAnRG90dGVkIG1lbWJlciBwYXRoIFwiQHswfVwiIGlzIGludmFsaWQuJywgcGF0aCk7XHJcbiAgfVxyXG4gIHZhciBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xyXG4gIGZvciAodmFyIGkgPSAwLCBpaSA9IGtleXMubGVuZ3RoOyBpIDwgaWkgJiYgb2JqICE9PSB1bmRlZmluZWQ7IGkrKykge1xyXG4gICAgdmFyIGtleSA9IGtleXNbaV07XHJcbiAgICBvYmogPSAob2JqICE9PSBudWxsKSA/IG9ialtrZXldIDogdW5kZWZpbmVkO1xyXG4gIH1cclxuICByZXR1cm4gb2JqO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgc2hhbGxvdyBjb3B5IG9mIGFuIG9iamVjdCBhbmQgY2xlYXIgb3RoZXIgZmllbGRzIGZyb20gdGhlIGRlc3RpbmF0aW9uXHJcbiAqL1xyXG5mdW5jdGlvbiBzaGFsbG93Q2xlYXJBbmRDb3B5KHNyYywgZHN0KSB7XHJcbiAgZHN0ID0gZHN0IHx8IHt9O1xyXG5cclxuICBhbmd1bGFyLmZvckVhY2goZHN0LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XHJcbiAgICBkZWxldGUgZHN0W2tleV07XHJcbiAgfSk7XHJcblxyXG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcclxuICAgIGlmIChzcmMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhKGtleS5jaGFyQXQoMCkgPT09ICckJyAmJiBrZXkuY2hhckF0KDEpID09PSAnJCcpKSB7XHJcbiAgICAgIGRzdFtrZXldID0gc3JjW2tleV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZHN0O1xyXG59XHJcblxyXG4vKipcclxuICogQG5nZG9jIG1vZHVsZVxyXG4gKiBAbmFtZSBuZ1Jlc291cmNlXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKlxyXG4gKiAjIG5nUmVzb3VyY2VcclxuICpcclxuICogVGhlIGBuZ1Jlc291cmNlYCBtb2R1bGUgcHJvdmlkZXMgaW50ZXJhY3Rpb24gc3VwcG9ydCB3aXRoIFJFU1RmdWwgc2VydmljZXNcclxuICogdmlhIHRoZSAkcmVzb3VyY2Ugc2VydmljZS5cclxuICpcclxuICpcclxuICogPGRpdiBkb2MtbW9kdWxlLWNvbXBvbmVudHM9XCJuZ1Jlc291cmNlXCI+PC9kaXY+XHJcbiAqXHJcbiAqIFNlZSB7QGxpbmsgbmdSZXNvdXJjZS4kcmVzb3VyY2UgYCRyZXNvdXJjZWB9IGZvciB1c2FnZS5cclxuICovXHJcblxyXG4vKipcclxuICogQG5nZG9jIHNlcnZpY2VcclxuICogQG5hbWUgJHJlc291cmNlXHJcbiAqIEByZXF1aXJlcyAkaHR0cFxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQSBmYWN0b3J5IHdoaWNoIGNyZWF0ZXMgYSByZXNvdXJjZSBvYmplY3QgdGhhdCBsZXRzIHlvdSBpbnRlcmFjdCB3aXRoXHJcbiAqIFtSRVNUZnVsXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlcHJlc2VudGF0aW9uYWxfU3RhdGVfVHJhbnNmZXIpIHNlcnZlci1zaWRlIGRhdGEgc291cmNlcy5cclxuICpcclxuICogVGhlIHJldHVybmVkIHJlc291cmNlIG9iamVjdCBoYXMgYWN0aW9uIG1ldGhvZHMgd2hpY2ggcHJvdmlkZSBoaWdoLWxldmVsIGJlaGF2aW9ycyB3aXRob3V0XHJcbiAqIHRoZSBuZWVkIHRvIGludGVyYWN0IHdpdGggdGhlIGxvdyBsZXZlbCB7QGxpbmsgbmcuJGh0dHAgJGh0dHB9IHNlcnZpY2UuXHJcbiAqXHJcbiAqIFJlcXVpcmVzIHRoZSB7QGxpbmsgbmdSZXNvdXJjZSBgbmdSZXNvdXJjZWB9IG1vZHVsZSB0byBiZSBpbnN0YWxsZWQuXHJcbiAqXHJcbiAqIEJ5IGRlZmF1bHQsIHRyYWlsaW5nIHNsYXNoZXMgd2lsbCBiZSBzdHJpcHBlZCBmcm9tIHRoZSBjYWxjdWxhdGVkIFVSTHMsXHJcbiAqIHdoaWNoIGNhbiBwb3NlIHByb2JsZW1zIHdpdGggc2VydmVyIGJhY2tlbmRzIHRoYXQgZG8gbm90IGV4cGVjdCB0aGF0XHJcbiAqIGJlaGF2aW9yLiAgVGhpcyBjYW4gYmUgZGlzYWJsZWQgYnkgY29uZmlndXJpbmcgdGhlIGAkcmVzb3VyY2VQcm92aWRlcmAgbGlrZVxyXG4gKiB0aGlzOlxyXG4gKlxyXG4gKiBgYGBqc1xyXG4gICAgIGFwcC5jb25maWcoWyckcmVzb3VyY2VQcm92aWRlcicsIGZ1bmN0aW9uKCRyZXNvdXJjZVByb3ZpZGVyKSB7XHJcbiAgICAgICAvLyBEb24ndCBzdHJpcCB0cmFpbGluZyBzbGFzaGVzIGZyb20gY2FsY3VsYXRlZCBVUkxzXHJcbiAgICAgICAkcmVzb3VyY2VQcm92aWRlci5kZWZhdWx0cy5zdHJpcFRyYWlsaW5nU2xhc2hlcyA9IGZhbHNlO1xyXG4gICAgIH1dKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgQSBwYXJhbWV0cml6ZWQgVVJMIHRlbXBsYXRlIHdpdGggcGFyYW1ldGVycyBwcmVmaXhlZCBieSBgOmAgYXMgaW5cclxuICogICBgL3VzZXIvOnVzZXJuYW1lYC4gSWYgeW91IGFyZSB1c2luZyBhIFVSTCB3aXRoIGEgcG9ydCBudW1iZXIgKGUuZy5cclxuICogICBgaHR0cDovL2V4YW1wbGUuY29tOjgwODAvYXBpYCksIGl0IHdpbGwgYmUgcmVzcGVjdGVkLlxyXG4gKlxyXG4gKiAgIElmIHlvdSBhcmUgdXNpbmcgYSB1cmwgd2l0aCBhIHN1ZmZpeCwganVzdCBhZGQgdGhlIHN1ZmZpeCwgbGlrZSB0aGlzOlxyXG4gKiAgIGAkcmVzb3VyY2UoJ2h0dHA6Ly9leGFtcGxlLmNvbS9yZXNvdXJjZS5qc29uJylgIG9yIGAkcmVzb3VyY2UoJ2h0dHA6Ly9leGFtcGxlLmNvbS86aWQuanNvbicpYFxyXG4gKiAgIG9yIGV2ZW4gYCRyZXNvdXJjZSgnaHR0cDovL2V4YW1wbGUuY29tL3Jlc291cmNlLzpyZXNvdXJjZV9pZC46Zm9ybWF0JylgXHJcbiAqICAgSWYgdGhlIHBhcmFtZXRlciBiZWZvcmUgdGhlIHN1ZmZpeCBpcyBlbXB0eSwgOnJlc291cmNlX2lkIGluIHRoaXMgY2FzZSwgdGhlbiB0aGUgYC8uYCB3aWxsIGJlXHJcbiAqICAgY29sbGFwc2VkIGRvd24gdG8gYSBzaW5nbGUgYC5gLiAgSWYgeW91IG5lZWQgdGhpcyBzZXF1ZW5jZSB0byBhcHBlYXIgYW5kIG5vdCBjb2xsYXBzZSB0aGVuIHlvdVxyXG4gKiAgIGNhbiBlc2NhcGUgaXQgd2l0aCBgL1xcLmAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0PX0gcGFyYW1EZWZhdWx0cyBEZWZhdWx0IHZhbHVlcyBmb3IgYHVybGAgcGFyYW1ldGVycy4gVGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4gaW5cclxuICogICBgYWN0aW9uc2AgbWV0aG9kcy4gSWYgYW55IG9mIHRoZSBwYXJhbWV0ZXIgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaXQgd2lsbCBiZSBleGVjdXRlZCBldmVyeSB0aW1lXHJcbiAqICAgd2hlbiBhIHBhcmFtIHZhbHVlIG5lZWRzIHRvIGJlIG9idGFpbmVkIGZvciBhIHJlcXVlc3QgKHVubGVzcyB0aGUgcGFyYW0gd2FzIG92ZXJyaWRkZW4pLlxyXG4gKlxyXG4gKiAgIEVhY2gga2V5IHZhbHVlIGluIHRoZSBwYXJhbWV0ZXIgb2JqZWN0IGlzIGZpcnN0IGJvdW5kIHRvIHVybCB0ZW1wbGF0ZSBpZiBwcmVzZW50IGFuZCB0aGVuIGFueVxyXG4gKiAgIGV4Y2VzcyBrZXlzIGFyZSBhcHBlbmRlZCB0byB0aGUgdXJsIHNlYXJjaCBxdWVyeSBhZnRlciB0aGUgYD9gLlxyXG4gKlxyXG4gKiAgIEdpdmVuIGEgdGVtcGxhdGUgYC9wYXRoLzp2ZXJiYCBhbmQgcGFyYW1ldGVyIGB7dmVyYjonZ3JlZXQnLCBzYWx1dGF0aW9uOidIZWxsbyd9YCByZXN1bHRzIGluXHJcbiAqICAgVVJMIGAvcGF0aC9ncmVldD9zYWx1dGF0aW9uPUhlbGxvYC5cclxuICpcclxuICogICBJZiB0aGUgcGFyYW1ldGVyIHZhbHVlIGlzIHByZWZpeGVkIHdpdGggYEBgIHRoZW4gdGhlIHZhbHVlIGZvciB0aGF0IHBhcmFtZXRlciB3aWxsIGJlIGV4dHJhY3RlZFxyXG4gKiAgIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgb24gdGhlIGBkYXRhYCBvYmplY3QgKHByb3ZpZGVkIHdoZW4gY2FsbGluZyBhbiBhY3Rpb24gbWV0aG9kKS4gIEZvclxyXG4gKiAgIGV4YW1wbGUsIGlmIHRoZSBgZGVmYXVsdFBhcmFtYCBvYmplY3QgaXMgYHtzb21lUGFyYW06ICdAc29tZVByb3AnfWAgdGhlbiB0aGUgdmFsdWUgb2YgYHNvbWVQYXJhbWBcclxuICogICB3aWxsIGJlIGBkYXRhLnNvbWVQcm9wYC5cclxuICpcclxuICogQHBhcmFtIHtPYmplY3QuPE9iamVjdD49fSBhY3Rpb25zIEhhc2ggd2l0aCBkZWNsYXJhdGlvbiBvZiBjdXN0b20gYWN0aW9uIHRoYXQgc2hvdWxkIGV4dGVuZFxyXG4gKiAgIHRoZSBkZWZhdWx0IHNldCBvZiByZXNvdXJjZSBhY3Rpb25zLiBUaGUgZGVjbGFyYXRpb24gc2hvdWxkIGJlIGNyZWF0ZWQgaW4gdGhlIGZvcm1hdCBvZiB7QGxpbmtcclxuICogICBuZy4kaHR0cCN1c2FnZSAkaHR0cC5jb25maWd9OlxyXG4gKlxyXG4gKiAgICAgICB7YWN0aW9uMToge21ldGhvZDo/LCBwYXJhbXM6PywgaXNBcnJheTo/LCBoZWFkZXJzOj8sIC4uLn0sXHJcbiAqICAgICAgICBhY3Rpb24yOiB7bWV0aG9kOj8sIHBhcmFtczo/LCBpc0FycmF5Oj8sIGhlYWRlcnM6PywgLi4ufSxcclxuICogICAgICAgIC4uLn1cclxuICpcclxuICogICBXaGVyZTpcclxuICpcclxuICogICAtICoqYGFjdGlvbmAqKiDigJMge3N0cmluZ30g4oCTIFRoZSBuYW1lIG9mIGFjdGlvbi4gVGhpcyBuYW1lIGJlY29tZXMgdGhlIG5hbWUgb2YgdGhlIG1ldGhvZCBvblxyXG4gKiAgICAgeW91ciByZXNvdXJjZSBvYmplY3QuXHJcbiAqICAgLSAqKmBtZXRob2RgKiog4oCTIHtzdHJpbmd9IOKAkyBDYXNlIGluc2Vuc2l0aXZlIEhUVFAgbWV0aG9kIChlLmcuIGBHRVRgLCBgUE9TVGAsIGBQVVRgLFxyXG4gKiAgICAgYERFTEVURWAsIGBKU09OUGAsIGV0YykuXHJcbiAqICAgLSAqKmBwYXJhbXNgKiog4oCTIHtPYmplY3Q9fSDigJMgT3B0aW9uYWwgc2V0IG9mIHByZS1ib3VuZCBwYXJhbWV0ZXJzIGZvciB0aGlzIGFjdGlvbi4gSWYgYW55IG9mXHJcbiAqICAgICB0aGUgcGFyYW1ldGVyIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGl0IHdpbGwgYmUgZXhlY3V0ZWQgZXZlcnkgdGltZSB3aGVuIGEgcGFyYW0gdmFsdWUgbmVlZHMgdG9cclxuICogICAgIGJlIG9idGFpbmVkIGZvciBhIHJlcXVlc3QgKHVubGVzcyB0aGUgcGFyYW0gd2FzIG92ZXJyaWRkZW4pLlxyXG4gKiAgIC0gKipgdXJsYCoqIOKAkyB7c3RyaW5nfSDigJMgYWN0aW9uIHNwZWNpZmljIGB1cmxgIG92ZXJyaWRlLiBUaGUgdXJsIHRlbXBsYXRpbmcgaXMgc3VwcG9ydGVkIGp1c3RcclxuICogICAgIGxpa2UgZm9yIHRoZSByZXNvdXJjZS1sZXZlbCB1cmxzLlxyXG4gKiAgIC0gKipgaXNBcnJheWAqKiDigJMge2Jvb2xlYW49fSDigJMgSWYgdHJ1ZSB0aGVuIHRoZSByZXR1cm5lZCBvYmplY3QgZm9yIHRoaXMgYWN0aW9uIGlzIGFuIGFycmF5LFxyXG4gKiAgICAgc2VlIGByZXR1cm5zYCBzZWN0aW9uLlxyXG4gKiAgIC0gKipgdHJhbnNmb3JtUmVxdWVzdGAqKiDigJNcclxuICogICAgIGB7ZnVuY3Rpb24oZGF0YSwgaGVhZGVyc0dldHRlcil8QXJyYXkuPGZ1bmN0aW9uKGRhdGEsIGhlYWRlcnNHZXR0ZXIpPn1gIOKAk1xyXG4gKiAgICAgdHJhbnNmb3JtIGZ1bmN0aW9uIG9yIGFuIGFycmF5IG9mIHN1Y2ggZnVuY3Rpb25zLiBUaGUgdHJhbnNmb3JtIGZ1bmN0aW9uIHRha2VzIHRoZSBodHRwXHJcbiAqICAgICByZXF1ZXN0IGJvZHkgYW5kIGhlYWRlcnMgYW5kIHJldHVybnMgaXRzIHRyYW5zZm9ybWVkICh0eXBpY2FsbHkgc2VyaWFsaXplZCkgdmVyc2lvbi5cclxuICogICAgIEJ5IGRlZmF1bHQsIHRyYW5zZm9ybVJlcXVlc3Qgd2lsbCBjb250YWluIG9uZSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGUgcmVxdWVzdCBkYXRhIGlzXHJcbiAqICAgICBhbiBvYmplY3QgYW5kIHNlcmlhbGl6ZXMgdG8gdXNpbmcgYGFuZ3VsYXIudG9Kc29uYC4gVG8gcHJldmVudCB0aGlzIGJlaGF2aW9yLCBzZXRcclxuICogICAgIGB0cmFuc2Zvcm1SZXF1ZXN0YCB0byBhbiBlbXB0eSBhcnJheTogYHRyYW5zZm9ybVJlcXVlc3Q6IFtdYFxyXG4gKiAgIC0gKipgdHJhbnNmb3JtUmVzcG9uc2VgKiog4oCTXHJcbiAqICAgICBge2Z1bmN0aW9uKGRhdGEsIGhlYWRlcnNHZXR0ZXIpfEFycmF5LjxmdW5jdGlvbihkYXRhLCBoZWFkZXJzR2V0dGVyKT59YCDigJNcclxuICogICAgIHRyYW5zZm9ybSBmdW5jdGlvbiBvciBhbiBhcnJheSBvZiBzdWNoIGZ1bmN0aW9ucy4gVGhlIHRyYW5zZm9ybSBmdW5jdGlvbiB0YWtlcyB0aGUgaHR0cFxyXG4gKiAgICAgcmVzcG9uc2UgYm9keSBhbmQgaGVhZGVycyBhbmQgcmV0dXJucyBpdHMgdHJhbnNmb3JtZWQgKHR5cGljYWxseSBkZXNlcmlhbGl6ZWQpIHZlcnNpb24uXHJcbiAqICAgICBCeSBkZWZhdWx0LCB0cmFuc2Zvcm1SZXNwb25zZSB3aWxsIGNvbnRhaW4gb25lIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZSByZXNwb25zZSBsb29rcyBsaWtlXHJcbiAqICAgICBhIEpTT04gc3RyaW5nIGFuZCBkZXNlcmlhbGl6ZXMgaXQgdXNpbmcgYGFuZ3VsYXIuZnJvbUpzb25gLiBUbyBwcmV2ZW50IHRoaXMgYmVoYXZpb3IsIHNldFxyXG4gKiAgICAgYHRyYW5zZm9ybVJlc3BvbnNlYCB0byBhbiBlbXB0eSBhcnJheTogYHRyYW5zZm9ybVJlc3BvbnNlOiBbXWBcclxuICogICAtICoqYGNhY2hlYCoqIOKAkyBge2Jvb2xlYW58Q2FjaGV9YCDigJMgSWYgdHJ1ZSwgYSBkZWZhdWx0ICRodHRwIGNhY2hlIHdpbGwgYmUgdXNlZCB0byBjYWNoZSB0aGVcclxuICogICAgIEdFVCByZXF1ZXN0LCBvdGhlcndpc2UgaWYgYSBjYWNoZSBpbnN0YW5jZSBidWlsdCB3aXRoXHJcbiAqICAgICB7QGxpbmsgbmcuJGNhY2hlRmFjdG9yeSAkY2FjaGVGYWN0b3J5fSwgdGhpcyBjYWNoZSB3aWxsIGJlIHVzZWQgZm9yXHJcbiAqICAgICBjYWNoaW5nLlxyXG4gKiAgIC0gKipgdGltZW91dGAqKiDigJMgYHtudW1iZXJ8UHJvbWlzZX1gIOKAkyB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcywgb3Ige0BsaW5rIG5nLiRxIHByb21pc2V9IHRoYXRcclxuICogICAgIHNob3VsZCBhYm9ydCB0aGUgcmVxdWVzdCB3aGVuIHJlc29sdmVkLlxyXG4gKiAgIC0gKipgd2l0aENyZWRlbnRpYWxzYCoqIC0gYHtib29sZWFufWAgLSB3aGV0aGVyIHRvIHNldCB0aGUgYHdpdGhDcmVkZW50aWFsc2AgZmxhZyBvbiB0aGVcclxuICogICAgIFhIUiBvYmplY3QuIFNlZVxyXG4gKiAgICAgW3JlcXVlc3RzIHdpdGggY3JlZGVudGlhbHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2h0dHBfYWNjZXNzX2NvbnRyb2wjc2VjdGlvbl81KVxyXG4gKiAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uXHJcbiAqICAgLSAqKmByZXNwb25zZVR5cGVgKiogLSBge3N0cmluZ31gIC0gc2VlXHJcbiAqICAgICBbcmVxdWVzdFR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL1hNTEh0dHBSZXF1ZXN0I3Jlc3BvbnNlVHlwZSkuXHJcbiAqICAgLSAqKmBpbnRlcmNlcHRvcmAqKiAtIGB7T2JqZWN0PX1gIC0gVGhlIGludGVyY2VwdG9yIG9iamVjdCBoYXMgdHdvIG9wdGlvbmFsIG1ldGhvZHMgLVxyXG4gKiAgICAgYHJlc3BvbnNlYCBhbmQgYHJlc3BvbnNlRXJyb3JgLiBCb3RoIGByZXNwb25zZWAgYW5kIGByZXNwb25zZUVycm9yYCBpbnRlcmNlcHRvcnMgZ2V0IGNhbGxlZFxyXG4gKiAgICAgd2l0aCBgaHR0cCByZXNwb25zZWAgb2JqZWN0LiBTZWUge0BsaW5rIG5nLiRodHRwICRodHRwIGludGVyY2VwdG9yc30uXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEhhc2ggd2l0aCBjdXN0b20gc2V0dGluZ3MgdGhhdCBzaG91bGQgZXh0ZW5kIHRoZVxyXG4gKiAgIGRlZmF1bHQgYCRyZXNvdXJjZVByb3ZpZGVyYCBiZWhhdmlvci4gIFRoZSBvbmx5IHN1cHBvcnRlZCBvcHRpb24gaXNcclxuICpcclxuICogICBXaGVyZTpcclxuICpcclxuICogICAtICoqYHN0cmlwVHJhaWxpbmdTbGFzaGVzYCoqIOKAkyB7Ym9vbGVhbn0g4oCTIElmIHRydWUgdGhlbiB0aGUgdHJhaWxpbmdcclxuICogICBzbGFzaGVzIGZyb20gYW55IGNhbGN1bGF0ZWQgVVJMIHdpbGwgYmUgc3RyaXBwZWQuIChEZWZhdWx0cyB0byB0cnVlLilcclxuICpcclxuICogQHJldHVybnMge09iamVjdH0gQSByZXNvdXJjZSBcImNsYXNzXCIgb2JqZWN0IHdpdGggbWV0aG9kcyBmb3IgdGhlIGRlZmF1bHQgc2V0IG9mIHJlc291cmNlIGFjdGlvbnNcclxuICogICBvcHRpb25hbGx5IGV4dGVuZGVkIHdpdGggY3VzdG9tIGBhY3Rpb25zYC4gVGhlIGRlZmF1bHQgc2V0IGNvbnRhaW5zIHRoZXNlIGFjdGlvbnM6XHJcbiAqICAgYGBganNcclxuICogICB7ICdnZXQnOiAgICB7bWV0aG9kOidHRVQnfSxcclxuICogICAgICdzYXZlJzogICB7bWV0aG9kOidQT1NUJ30sXHJcbiAqICAgICAncXVlcnknOiAge21ldGhvZDonR0VUJywgaXNBcnJheTp0cnVlfSxcclxuICogICAgICdyZW1vdmUnOiB7bWV0aG9kOidERUxFVEUnfSxcclxuICogICAgICdkZWxldGUnOiB7bWV0aG9kOidERUxFVEUnfSB9O1xyXG4gKiAgIGBgYFxyXG4gKlxyXG4gKiAgIENhbGxpbmcgdGhlc2UgbWV0aG9kcyBpbnZva2UgYW4ge0BsaW5rIG5nLiRodHRwfSB3aXRoIHRoZSBzcGVjaWZpZWQgaHR0cCBtZXRob2QsXHJcbiAqICAgZGVzdGluYXRpb24gYW5kIHBhcmFtZXRlcnMuIFdoZW4gdGhlIGRhdGEgaXMgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyIHRoZW4gdGhlIG9iamVjdCBpcyBhblxyXG4gKiAgIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZSBjbGFzcy4gVGhlIGFjdGlvbnMgYHNhdmVgLCBgcmVtb3ZlYCBhbmQgYGRlbGV0ZWAgYXJlIGF2YWlsYWJsZSBvbiBpdFxyXG4gKiAgIGFzICBtZXRob2RzIHdpdGggdGhlIGAkYCBwcmVmaXguIFRoaXMgYWxsb3dzIHlvdSB0byBlYXNpbHkgcGVyZm9ybSBDUlVEIG9wZXJhdGlvbnMgKGNyZWF0ZSxcclxuICogICByZWFkLCB1cGRhdGUsIGRlbGV0ZSkgb24gc2VydmVyLXNpZGUgZGF0YSBsaWtlIHRoaXM6XHJcbiAqICAgYGBganNcclxuICogICB2YXIgVXNlciA9ICRyZXNvdXJjZSgnL3VzZXIvOnVzZXJJZCcsIHt1c2VySWQ6J0BpZCd9KTtcclxuICogICB2YXIgdXNlciA9IFVzZXIuZ2V0KHt1c2VySWQ6MTIzfSwgZnVuY3Rpb24oKSB7XHJcbiAqICAgICB1c2VyLmFiYyA9IHRydWU7XHJcbiAqICAgICB1c2VyLiRzYXZlKCk7XHJcbiAqICAgfSk7XHJcbiAqICAgYGBgXHJcbiAqXHJcbiAqICAgSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBpbnZva2luZyBhICRyZXNvdXJjZSBvYmplY3QgbWV0aG9kIGltbWVkaWF0ZWx5IHJldHVybnMgYW5cclxuICogICBlbXB0eSByZWZlcmVuY2UgKG9iamVjdCBvciBhcnJheSBkZXBlbmRpbmcgb24gYGlzQXJyYXlgKS4gT25jZSB0aGUgZGF0YSBpcyByZXR1cm5lZCBmcm9tIHRoZVxyXG4gKiAgIHNlcnZlciB0aGUgZXhpc3RpbmcgcmVmZXJlbmNlIGlzIHBvcHVsYXRlZCB3aXRoIHRoZSBhY3R1YWwgZGF0YS4gVGhpcyBpcyBhIHVzZWZ1bCB0cmljayBzaW5jZVxyXG4gKiAgIHVzdWFsbHkgdGhlIHJlc291cmNlIGlzIGFzc2lnbmVkIHRvIGEgbW9kZWwgd2hpY2ggaXMgdGhlbiByZW5kZXJlZCBieSB0aGUgdmlldy4gSGF2aW5nIGFuIGVtcHR5XHJcbiAqICAgb2JqZWN0IHJlc3VsdHMgaW4gbm8gcmVuZGVyaW5nLCBvbmNlIHRoZSBkYXRhIGFycml2ZXMgZnJvbSB0aGUgc2VydmVyIHRoZW4gdGhlIG9iamVjdCBpc1xyXG4gKiAgIHBvcHVsYXRlZCB3aXRoIHRoZSBkYXRhIGFuZCB0aGUgdmlldyBhdXRvbWF0aWNhbGx5IHJlLXJlbmRlcnMgaXRzZWxmIHNob3dpbmcgdGhlIG5ldyBkYXRhLiBUaGlzXHJcbiAqICAgbWVhbnMgdGhhdCBpbiBtb3N0IGNhc2VzIG9uZSBuZXZlciBoYXMgdG8gd3JpdGUgYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIGFjdGlvbiBtZXRob2RzLlxyXG4gKlxyXG4gKiAgIFRoZSBhY3Rpb24gbWV0aG9kcyBvbiB0aGUgY2xhc3Mgb2JqZWN0IG9yIGluc3RhbmNlIG9iamVjdCBjYW4gYmUgaW52b2tlZCB3aXRoIHRoZSBmb2xsb3dpbmdcclxuICogICBwYXJhbWV0ZXJzOlxyXG4gKlxyXG4gKiAgIC0gSFRUUCBHRVQgXCJjbGFzc1wiIGFjdGlvbnM6IGBSZXNvdXJjZS5hY3Rpb24oW3BhcmFtZXRlcnNdLCBbc3VjY2Vzc10sIFtlcnJvcl0pYFxyXG4gKiAgIC0gbm9uLUdFVCBcImNsYXNzXCIgYWN0aW9uczogYFJlc291cmNlLmFjdGlvbihbcGFyYW1ldGVyc10sIHBvc3REYXRhLCBbc3VjY2Vzc10sIFtlcnJvcl0pYFxyXG4gKiAgIC0gbm9uLUdFVCBpbnN0YW5jZSBhY3Rpb25zOiAgYGluc3RhbmNlLiRhY3Rpb24oW3BhcmFtZXRlcnNdLCBbc3VjY2Vzc10sIFtlcnJvcl0pYFxyXG4gKlxyXG4gKiAgIFN1Y2Nlc3MgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggKHZhbHVlLCByZXNwb25zZUhlYWRlcnMpIGFyZ3VtZW50cy4gRXJyb3IgY2FsbGJhY2sgaXMgY2FsbGVkXHJcbiAqICAgd2l0aCAoaHR0cFJlc3BvbnNlKSBhcmd1bWVudC5cclxuICpcclxuICogICBDbGFzcyBhY3Rpb25zIHJldHVybiBlbXB0eSBpbnN0YW5jZSAod2l0aCBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYmVsb3cpLlxyXG4gKiAgIEluc3RhbmNlIGFjdGlvbnMgcmV0dXJuIHByb21pc2Ugb2YgdGhlIGFjdGlvbi5cclxuICpcclxuICogICBUaGUgUmVzb3VyY2UgaW5zdGFuY2VzIGFuZCBjb2xsZWN0aW9uIGhhdmUgdGhlc2UgYWRkaXRpb25hbCBwcm9wZXJ0aWVzOlxyXG4gKlxyXG4gKiAgIC0gYCRwcm9taXNlYDogdGhlIHtAbGluayBuZy4kcSBwcm9taXNlfSBvZiB0aGUgb3JpZ2luYWwgc2VydmVyIGludGVyYWN0aW9uIHRoYXQgY3JlYXRlZCB0aGlzXHJcbiAqICAgICBpbnN0YW5jZSBvciBjb2xsZWN0aW9uLlxyXG4gKlxyXG4gKiAgICAgT24gc3VjY2VzcywgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgc2FtZSByZXNvdXJjZSBpbnN0YW5jZSBvciBjb2xsZWN0aW9uIG9iamVjdCxcclxuICogICAgIHVwZGF0ZWQgd2l0aCBkYXRhIGZyb20gc2VydmVyLiBUaGlzIG1ha2VzIGl0IGVhc3kgdG8gdXNlIGluXHJcbiAqICAgICB7QGxpbmsgbmdSb3V0ZS4kcm91dGVQcm92aWRlciByZXNvbHZlIHNlY3Rpb24gb2YgJHJvdXRlUHJvdmlkZXIud2hlbigpfSB0byBkZWZlciB2aWV3XHJcbiAqICAgICByZW5kZXJpbmcgdW50aWwgdGhlIHJlc291cmNlKHMpIGFyZSBsb2FkZWQuXHJcbiAqXHJcbiAqICAgICBPbiBmYWlsdXJlLCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCB3aXRoIHRoZSB7QGxpbmsgbmcuJGh0dHAgaHR0cCByZXNwb25zZX0gb2JqZWN0LCB3aXRob3V0XHJcbiAqICAgICB0aGUgYHJlc291cmNlYCBwcm9wZXJ0eS5cclxuICpcclxuICogICAgIElmIGFuIGludGVyY2VwdG9yIG9iamVjdCB3YXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIHdpbGwgaW5zdGVhZCBiZSByZXNvbHZlZCB3aXRoIHRoZSB2YWx1ZVxyXG4gKiAgICAgcmV0dXJuZWQgYnkgdGhlIGludGVyY2VwdG9yLlxyXG4gKlxyXG4gKiAgIC0gYCRyZXNvbHZlZGA6IGB0cnVlYCBhZnRlciBmaXJzdCBzZXJ2ZXIgaW50ZXJhY3Rpb24gaXMgY29tcGxldGVkIChlaXRoZXIgd2l0aCBzdWNjZXNzIG9yXHJcbiAqICAgICAgcmVqZWN0aW9uKSwgYGZhbHNlYCBiZWZvcmUgdGhhdC4gS25vd2luZyBpZiB0aGUgUmVzb3VyY2UgaGFzIGJlZW4gcmVzb2x2ZWQgaXMgdXNlZnVsIGluXHJcbiAqICAgICAgZGF0YS1iaW5kaW5nLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKlxyXG4gKiAjIENyZWRpdCBjYXJkIHJlc291cmNlXHJcbiAqXHJcbiAqIGBgYGpzXHJcbiAgICAgLy8gRGVmaW5lIENyZWRpdENhcmQgY2xhc3NcclxuICAgICB2YXIgQ3JlZGl0Q2FyZCA9ICRyZXNvdXJjZSgnL3VzZXIvOnVzZXJJZC9jYXJkLzpjYXJkSWQnLFxyXG4gICAgICB7dXNlcklkOjEyMywgY2FyZElkOidAaWQnfSwge1xyXG4gICAgICAgY2hhcmdlOiB7bWV0aG9kOidQT1NUJywgcGFyYW1zOntjaGFyZ2U6dHJ1ZX19XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAvLyBXZSBjYW4gcmV0cmlldmUgYSBjb2xsZWN0aW9uIGZyb20gdGhlIHNlcnZlclxyXG4gICAgIHZhciBjYXJkcyA9IENyZWRpdENhcmQucXVlcnkoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAvLyBHRVQ6IC91c2VyLzEyMy9jYXJkXHJcbiAgICAgICAvLyBzZXJ2ZXIgcmV0dXJuczogWyB7aWQ6NDU2LCBudW1iZXI6JzEyMzQnLCBuYW1lOidTbWl0aCd9IF07XHJcblxyXG4gICAgICAgdmFyIGNhcmQgPSBjYXJkc1swXTtcclxuICAgICAgIC8vIGVhY2ggaXRlbSBpcyBhbiBpbnN0YW5jZSBvZiBDcmVkaXRDYXJkXHJcbiAgICAgICBleHBlY3QoY2FyZCBpbnN0YW5jZW9mIENyZWRpdENhcmQpLnRvRXF1YWwodHJ1ZSk7XHJcbiAgICAgICBjYXJkLm5hbWUgPSBcIkouIFNtaXRoXCI7XHJcbiAgICAgICAvLyBub24gR0VUIG1ldGhvZHMgYXJlIG1hcHBlZCBvbnRvIHRoZSBpbnN0YW5jZXNcclxuICAgICAgIGNhcmQuJHNhdmUoKTtcclxuICAgICAgIC8vIFBPU1Q6IC91c2VyLzEyMy9jYXJkLzQ1NiB7aWQ6NDU2LCBudW1iZXI6JzEyMzQnLCBuYW1lOidKLiBTbWl0aCd9XHJcbiAgICAgICAvLyBzZXJ2ZXIgcmV0dXJuczoge2lkOjQ1NiwgbnVtYmVyOicxMjM0JywgbmFtZTogJ0ouIFNtaXRoJ307XHJcblxyXG4gICAgICAgLy8gb3VyIGN1c3RvbSBtZXRob2QgaXMgbWFwcGVkIGFzIHdlbGwuXHJcbiAgICAgICBjYXJkLiRjaGFyZ2Uoe2Ftb3VudDo5Ljk5fSk7XHJcbiAgICAgICAvLyBQT1NUOiAvdXNlci8xMjMvY2FyZC80NTY/YW1vdW50PTkuOTkmY2hhcmdlPXRydWUge2lkOjQ1NiwgbnVtYmVyOicxMjM0JywgbmFtZTonSi4gU21pdGgnfVxyXG4gICAgIH0pO1xyXG5cclxuICAgICAvLyB3ZSBjYW4gY3JlYXRlIGFuIGluc3RhbmNlIGFzIHdlbGxcclxuICAgICB2YXIgbmV3Q2FyZCA9IG5ldyBDcmVkaXRDYXJkKHtudW1iZXI6JzAxMjMnfSk7XHJcbiAgICAgbmV3Q2FyZC5uYW1lID0gXCJNaWtlIFNtaXRoXCI7XHJcbiAgICAgbmV3Q2FyZC4kc2F2ZSgpO1xyXG4gICAgIC8vIFBPU1Q6IC91c2VyLzEyMy9jYXJkIHtudW1iZXI6JzAxMjMnLCBuYW1lOidNaWtlIFNtaXRoJ31cclxuICAgICAvLyBzZXJ2ZXIgcmV0dXJuczoge2lkOjc4OSwgbnVtYmVyOicwMTIzJywgbmFtZTogJ01pa2UgU21pdGgnfTtcclxuICAgICBleHBlY3QobmV3Q2FyZC5pZCkudG9FcXVhbCg3ODkpO1xyXG4gKiBgYGBcclxuICpcclxuICogVGhlIG9iamVjdCByZXR1cm5lZCBmcm9tIHRoaXMgZnVuY3Rpb24gZXhlY3V0aW9uIGlzIGEgcmVzb3VyY2UgXCJjbGFzc1wiIHdoaWNoIGhhcyBcInN0YXRpY1wiIG1ldGhvZFxyXG4gKiBmb3IgZWFjaCBhY3Rpb24gaW4gdGhlIGRlZmluaXRpb24uXHJcbiAqXHJcbiAqIENhbGxpbmcgdGhlc2UgbWV0aG9kcyBpbnZva2UgYCRodHRwYCBvbiB0aGUgYHVybGAgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gYG1ldGhvZGAsIGBwYXJhbXNgIGFuZFxyXG4gKiBgaGVhZGVyc2AuXHJcbiAqIFdoZW4gdGhlIGRhdGEgaXMgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyIHRoZW4gdGhlIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgdHlwZSBhbmRcclxuICogYWxsIG9mIHRoZSBub24tR0VUIG1ldGhvZHMgYXJlIGF2YWlsYWJsZSB3aXRoIGAkYCBwcmVmaXguIFRoaXMgYWxsb3dzIHlvdSB0byBlYXNpbHkgc3VwcG9ydCBDUlVEXHJcbiAqIG9wZXJhdGlvbnMgKGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBkZWxldGUpIG9uIHNlcnZlci1zaWRlIGRhdGEuXHJcblxyXG4gICBgYGBqc1xyXG4gICAgIHZhciBVc2VyID0gJHJlc291cmNlKCcvdXNlci86dXNlcklkJywge3VzZXJJZDonQGlkJ30pO1xyXG4gICAgIFVzZXIuZ2V0KHt1c2VySWQ6MTIzfSwgZnVuY3Rpb24odXNlcikge1xyXG4gICAgICAgdXNlci5hYmMgPSB0cnVlO1xyXG4gICAgICAgdXNlci4kc2F2ZSgpO1xyXG4gICAgIH0pO1xyXG4gICBgYGBcclxuICpcclxuICogSXQncyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgc3VjY2VzcyBjYWxsYmFjayBmb3IgYGdldGAsIGBxdWVyeWAgYW5kIG90aGVyIG1ldGhvZHMgZ2V0cyBwYXNzZWRcclxuICogaW4gdGhlIHJlc3BvbnNlIHRoYXQgY2FtZSBmcm9tIHRoZSBzZXJ2ZXIgYXMgd2VsbCBhcyAkaHR0cCBoZWFkZXIgZ2V0dGVyIGZ1bmN0aW9uLCBzbyBvbmVcclxuICogY291bGQgcmV3cml0ZSB0aGUgYWJvdmUgZXhhbXBsZSBhbmQgZ2V0IGFjY2VzcyB0byBodHRwIGhlYWRlcnMgYXM6XHJcbiAqXHJcbiAgIGBgYGpzXHJcbiAgICAgdmFyIFVzZXIgPSAkcmVzb3VyY2UoJy91c2VyLzp1c2VySWQnLCB7dXNlcklkOidAaWQnfSk7XHJcbiAgICAgVXNlci5nZXQoe3VzZXJJZDoxMjN9LCBmdW5jdGlvbih1LCBnZXRSZXNwb25zZUhlYWRlcnMpe1xyXG4gICAgICAgdS5hYmMgPSB0cnVlO1xyXG4gICAgICAgdS4kc2F2ZShmdW5jdGlvbih1LCBwdXRSZXNwb25zZUhlYWRlcnMpIHtcclxuICAgICAgICAgLy91ID0+IHNhdmVkIHVzZXIgb2JqZWN0XHJcbiAgICAgICAgIC8vcHV0UmVzcG9uc2VIZWFkZXJzID0+ICRodHRwIGhlYWRlciBnZXR0ZXJcclxuICAgICAgIH0pO1xyXG4gICAgIH0pO1xyXG4gICBgYGBcclxuICpcclxuICogWW91IGNhbiBhbHNvIGFjY2VzcyB0aGUgcmF3IGAkaHR0cGAgcHJvbWlzZSB2aWEgdGhlIGAkcHJvbWlzZWAgcHJvcGVydHkgb24gdGhlIG9iamVjdCByZXR1cm5lZFxyXG4gKlxyXG4gICBgYGBcclxuICAgICB2YXIgVXNlciA9ICRyZXNvdXJjZSgnL3VzZXIvOnVzZXJJZCcsIHt1c2VySWQ6J0BpZCd9KTtcclxuICAgICBVc2VyLmdldCh7dXNlcklkOjEyM30pXHJcbiAgICAgICAgIC4kcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHVzZXIpIHtcclxuICAgICAgICAgICAkc2NvcGUudXNlciA9IHVzZXI7XHJcbiAgICAgICAgIH0pO1xyXG4gICBgYGBcclxuXHJcbiAqICMgQ3JlYXRpbmcgYSBjdXN0b20gJ1BVVCcgcmVxdWVzdFxyXG4gKiBJbiB0aGlzIGV4YW1wbGUgd2UgY3JlYXRlIGEgY3VzdG9tIG1ldGhvZCBvbiBvdXIgcmVzb3VyY2UgdG8gbWFrZSBhIFBVVCByZXF1ZXN0XHJcbiAqIGBgYGpzXHJcbiAqICAgIHZhciBhcHAgPSBhbmd1bGFyLm1vZHVsZSgnYXBwJywgWyduZ1Jlc291cmNlJywgJ25nUm91dGUnXSk7XHJcbiAqXHJcbiAqICAgIC8vIFNvbWUgQVBJcyBleHBlY3QgYSBQVVQgcmVxdWVzdCBpbiB0aGUgZm9ybWF0IFVSTC9vYmplY3QvSURcclxuICogICAgLy8gSGVyZSB3ZSBhcmUgY3JlYXRpbmcgYW4gJ3VwZGF0ZScgbWV0aG9kXHJcbiAqICAgIGFwcC5mYWN0b3J5KCdOb3RlcycsIFsnJHJlc291cmNlJywgZnVuY3Rpb24oJHJlc291cmNlKSB7XHJcbiAqICAgIHJldHVybiAkcmVzb3VyY2UoJy9ub3Rlcy86aWQnLCBudWxsLFxyXG4gKiAgICAgICAge1xyXG4gKiAgICAgICAgICAgICd1cGRhdGUnOiB7IG1ldGhvZDonUFVUJyB9XHJcbiAqICAgICAgICB9KTtcclxuICogICAgfV0pO1xyXG4gKlxyXG4gKiAgICAvLyBJbiBvdXIgY29udHJvbGxlciB3ZSBnZXQgdGhlIElEIGZyb20gdGhlIFVSTCB1c2luZyBuZ1JvdXRlIGFuZCAkcm91dGVQYXJhbXNcclxuICogICAgLy8gV2UgcGFzcyBpbiAkcm91dGVQYXJhbXMgYW5kIG91ciBOb3RlcyBmYWN0b3J5IGFsb25nIHdpdGggJHNjb3BlXHJcbiAqICAgIGFwcC5jb250cm9sbGVyKCdOb3Rlc0N0cmwnLCBbJyRzY29wZScsICckcm91dGVQYXJhbXMnLCAnTm90ZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRzY29wZSwgJHJvdXRlUGFyYW1zLCBOb3Rlcykge1xyXG4gKiAgICAvLyBGaXJzdCBnZXQgYSBub3RlIG9iamVjdCBmcm9tIHRoZSBmYWN0b3J5XHJcbiAqICAgIHZhciBub3RlID0gTm90ZXMuZ2V0KHsgaWQ6JHJvdXRlUGFyYW1zLmlkIH0pO1xyXG4gKiAgICAkaWQgPSBub3RlLmlkO1xyXG4gKlxyXG4gKiAgICAvLyBOb3cgY2FsbCB1cGRhdGUgcGFzc2luZyBpbiB0aGUgSUQgZmlyc3QgdGhlbiB0aGUgb2JqZWN0IHlvdSBhcmUgdXBkYXRpbmdcclxuICogICAgTm90ZXMudXBkYXRlKHsgaWQ6JGlkIH0sIG5vdGUpO1xyXG4gKlxyXG4gKiAgICAvLyBUaGlzIHdpbGwgUFVUIC9ub3Rlcy9JRCB3aXRoIHRoZSBub3RlIG9iamVjdCBpbiB0aGUgcmVxdWVzdCBwYXlsb2FkXHJcbiAqICAgIH1dKTtcclxuICogYGBgXHJcbiAqL1xyXG5hbmd1bGFyLm1vZHVsZSgnbmdSZXNvdXJjZScsIFsnbmcnXSkuXHJcbiAgcHJvdmlkZXIoJyRyZXNvdXJjZScsIGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHByb3ZpZGVyID0gdGhpcztcclxuXHJcbiAgICB0aGlzLmRlZmF1bHRzID0ge1xyXG4gICAgICAvLyBTdHJpcCBzbGFzaGVzIGJ5IGRlZmF1bHRcclxuICAgICAgc3RyaXBUcmFpbGluZ1NsYXNoZXM6IHRydWUsXHJcblxyXG4gICAgICAvLyBEZWZhdWx0IGFjdGlvbnMgY29uZmlndXJhdGlvblxyXG4gICAgICBhY3Rpb25zOiB7XHJcbiAgICAgICAgJ2dldCc6IHttZXRob2Q6ICdHRVQnfSxcclxuICAgICAgICAnc2F2ZSc6IHttZXRob2Q6ICdQT1NUJ30sXHJcbiAgICAgICAgJ3F1ZXJ5Jzoge21ldGhvZDogJ0dFVCcsIGlzQXJyYXk6IHRydWV9LFxyXG4gICAgICAgICdyZW1vdmUnOiB7bWV0aG9kOiAnREVMRVRFJ30sXHJcbiAgICAgICAgJ2RlbGV0ZSc6IHttZXRob2Q6ICdERUxFVEUnfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuJGdldCA9IFsnJGh0dHAnLCAnJHEnLCBmdW5jdGlvbigkaHR0cCwgJHEpIHtcclxuXHJcbiAgICAgIHZhciBub29wID0gYW5ndWxhci5ub29wLFxyXG4gICAgICAgIGZvckVhY2ggPSBhbmd1bGFyLmZvckVhY2gsXHJcbiAgICAgICAgZXh0ZW5kID0gYW5ndWxhci5leHRlbmQsXHJcbiAgICAgICAgY29weSA9IGFuZ3VsYXIuY29weSxcclxuICAgICAgICBpc0Z1bmN0aW9uID0gYW5ndWxhci5pc0Z1bmN0aW9uO1xyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIFdlIG5lZWQgb3VyIGN1c3RvbSBtZXRob2QgYmVjYXVzZSBlbmNvZGVVUklDb21wb25lbnQgaXMgdG9vIGFnZ3Jlc3NpdmUgYW5kIGRvZXNuJ3QgZm9sbG93XHJcbiAgICAgICAqIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM5ODYudHh0IHdpdGggcmVnYXJkcyB0byB0aGUgY2hhcmFjdGVyIHNldFxyXG4gICAgICAgKiAocGNoYXIpIGFsbG93ZWQgaW4gcGF0aCBzZWdtZW50czpcclxuICAgICAgICogICAgc2VnbWVudCAgICAgICA9ICpwY2hhclxyXG4gICAgICAgKiAgICBwY2hhciAgICAgICAgID0gdW5yZXNlcnZlZCAvIHBjdC1lbmNvZGVkIC8gc3ViLWRlbGltcyAvIFwiOlwiIC8gXCJAXCJcclxuICAgICAgICogICAgcGN0LWVuY29kZWQgICA9IFwiJVwiIEhFWERJRyBIRVhESUdcclxuICAgICAgICogICAgdW5yZXNlcnZlZCAgICA9IEFMUEhBIC8gRElHSVQgLyBcIi1cIiAvIFwiLlwiIC8gXCJfXCIgLyBcIn5cIlxyXG4gICAgICAgKiAgICBzdWItZGVsaW1zICAgID0gXCIhXCIgLyBcIiRcIiAvIFwiJlwiIC8gXCInXCIgLyBcIihcIiAvIFwiKVwiXHJcbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgLyBcIipcIiAvIFwiK1wiIC8gXCIsXCIgLyBcIjtcIiAvIFwiPVwiXHJcbiAgICAgICAqL1xyXG4gICAgICBmdW5jdGlvbiBlbmNvZGVVcmlTZWdtZW50KHZhbCkge1xyXG4gICAgICAgIHJldHVybiBlbmNvZGVVcmlRdWVyeSh2YWwsIHRydWUpLlxyXG4gICAgICAgICAgcmVwbGFjZSgvJTI2L2dpLCAnJicpLlxyXG4gICAgICAgICAgcmVwbGFjZSgvJTNEL2dpLCAnPScpLlxyXG4gICAgICAgICAgcmVwbGFjZSgvJTJCL2dpLCAnKycpO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIGZvciBlbmNvZGluZyAqa2V5KiBvciAqdmFsdWUqIHBhcnRzIG9mIHF1ZXJ5IGNvbXBvbmVudC4gV2UgbmVlZCBhXHJcbiAgICAgICAqIGN1c3RvbSBtZXRob2QgYmVjYXVzZSBlbmNvZGVVUklDb21wb25lbnQgaXMgdG9vIGFnZ3Jlc3NpdmUgYW5kIGVuY29kZXMgc3R1ZmYgdGhhdCBkb2Vzbid0XHJcbiAgICAgICAqIGhhdmUgdG8gYmUgZW5jb2RlZCBwZXIgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NjpcclxuICAgICAgICogICAgcXVlcnkgICAgICAgPSAqKCBwY2hhciAvIFwiL1wiIC8gXCI/XCIgKVxyXG4gICAgICAgKiAgICBwY2hhciAgICAgICAgID0gdW5yZXNlcnZlZCAvIHBjdC1lbmNvZGVkIC8gc3ViLWRlbGltcyAvIFwiOlwiIC8gXCJAXCJcclxuICAgICAgICogICAgdW5yZXNlcnZlZCAgICA9IEFMUEhBIC8gRElHSVQgLyBcIi1cIiAvIFwiLlwiIC8gXCJfXCIgLyBcIn5cIlxyXG4gICAgICAgKiAgICBwY3QtZW5jb2RlZCAgID0gXCIlXCIgSEVYRElHIEhFWERJR1xyXG4gICAgICAgKiAgICBzdWItZGVsaW1zICAgID0gXCIhXCIgLyBcIiRcIiAvIFwiJlwiIC8gXCInXCIgLyBcIihcIiAvIFwiKVwiXHJcbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgLyBcIipcIiAvIFwiK1wiIC8gXCIsXCIgLyBcIjtcIiAvIFwiPVwiXHJcbiAgICAgICAqL1xyXG4gICAgICBmdW5jdGlvbiBlbmNvZGVVcmlRdWVyeSh2YWwsIHBjdEVuY29kZVNwYWNlcykge1xyXG4gICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cclxuICAgICAgICAgIHJlcGxhY2UoLyU0MC9naSwgJ0AnKS5cclxuICAgICAgICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cclxuICAgICAgICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxyXG4gICAgICAgICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxyXG4gICAgICAgICAgcmVwbGFjZSgvJTIwL2csIChwY3RFbmNvZGVTcGFjZXMgPyAnJTIwJyA6ICcrJykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBSb3V0ZSh0ZW1wbGF0ZSwgZGVmYXVsdHMpIHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0cyA9IGV4dGVuZCh7fSwgcHJvdmlkZXIuZGVmYXVsdHMsIGRlZmF1bHRzKTtcclxuICAgICAgICB0aGlzLnVybFBhcmFtcyA9IHt9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBSb3V0ZS5wcm90b3R5cGUgPSB7XHJcbiAgICAgICAgc2V0VXJsUGFyYW1zOiBmdW5jdGlvbihjb25maWcsIHBhcmFtcywgYWN0aW9uVXJsKSB7XHJcbiAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgICAgIHVybCA9IGFjdGlvblVybCB8fCBzZWxmLnRlbXBsYXRlLFxyXG4gICAgICAgICAgICB2YWwsXHJcbiAgICAgICAgICAgIGVuY29kZWRWYWw7XHJcblxyXG4gICAgICAgICAgdmFyIHVybFBhcmFtcyA9IHNlbGYudXJsUGFyYW1zID0ge307XHJcbiAgICAgICAgICBmb3JFYWNoKHVybC5zcGxpdCgvXFxXLyksIGZ1bmN0aW9uKHBhcmFtKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbSA9PT0gJ2hhc093blByb3BlcnR5Jykge1xyXG4gICAgICAgICAgICAgIHRocm93ICRyZXNvdXJjZU1pbkVycignYmFkbmFtZScsIFwiaGFzT3duUHJvcGVydHkgaXMgbm90IGEgdmFsaWQgcGFyYW1ldGVyIG5hbWUuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghKG5ldyBSZWdFeHAoXCJeXFxcXGQrJFwiKS50ZXN0KHBhcmFtKSkgJiYgcGFyYW0gJiZcclxuICAgICAgICAgICAgICAobmV3IFJlZ0V4cChcIihefFteXFxcXFxcXFxdKTpcIiArIHBhcmFtICsgXCIoXFxcXFd8JClcIikudGVzdCh1cmwpKSkge1xyXG4gICAgICAgICAgICAgIHVybFBhcmFtc1twYXJhbV0gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKC9cXFxcOi9nLCAnOicpO1xyXG5cclxuICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcclxuICAgICAgICAgIGZvckVhY2goc2VsZi51cmxQYXJhbXMsIGZ1bmN0aW9uKF8sIHVybFBhcmFtKSB7XHJcbiAgICAgICAgICAgIHZhbCA9IHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSh1cmxQYXJhbSkgPyBwYXJhbXNbdXJsUGFyYW1dIDogc2VsZi5kZWZhdWx0c1t1cmxQYXJhbV07XHJcbiAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZCh2YWwpICYmIHZhbCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGVuY29kZWRWYWwgPSBlbmNvZGVVcmlTZWdtZW50KHZhbCk7XHJcbiAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UobmV3IFJlZ0V4cChcIjpcIiArIHVybFBhcmFtICsgXCIoXFxcXFd8JClcIiwgXCJnXCIpLCBmdW5jdGlvbihtYXRjaCwgcDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkVmFsICsgcDE7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UobmV3IFJlZ0V4cChcIihcXC8/KTpcIiArIHVybFBhcmFtICsgXCIoXFxcXFd8JClcIiwgXCJnXCIpLCBmdW5jdGlvbihtYXRjaCxcclxuICAgICAgICAgICAgICAgICAgbGVhZGluZ1NsYXNoZXMsIHRhaWwpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0YWlsLmNoYXJBdCgwKSA9PSAnLycpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhaWw7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gbGVhZGluZ1NsYXNoZXMgKyB0YWlsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBzdHJpcCB0cmFpbGluZyBzbGFzaGVzIGFuZCBzZXQgdGhlIHVybCAodW5sZXNzIHRoaXMgYmVoYXZpb3IgaXMgc3BlY2lmaWNhbGx5IGRpc2FibGVkKVxyXG4gICAgICAgICAgaWYgKHNlbGYuZGVmYXVsdHMuc3RyaXBUcmFpbGluZ1NsYXNoZXMpIHtcclxuICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcLyskLywgJycpIHx8ICcvJztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyB0aGVuIHJlcGxhY2UgY29sbGFwc2UgYC8uYCBpZiBmb3VuZCBpbiB0aGUgbGFzdCBVUkwgcGF0aCBzZWdtZW50IGJlZm9yZSB0aGUgcXVlcnlcclxuICAgICAgICAgIC8vIEUuZy4gYGh0dHA6Ly91cmwuY29tL2lkLi9mb3JtYXQ/cT14YCBiZWNvbWVzIGBodHRwOi8vdXJsLmNvbS9pZC5mb3JtYXQ/cT14YFxyXG4gICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcL1xcLig/PVxcdysoJHxcXD8pKS8sICcuJyk7XHJcbiAgICAgICAgICAvLyByZXBsYWNlIGVzY2FwZWQgYC9cXC5gIHdpdGggYC8uYFxyXG4gICAgICAgICAgY29uZmlnLnVybCA9IHVybC5yZXBsYWNlKC9cXC9cXFxcXFwuLywgJy8uJyk7XHJcblxyXG5cclxuICAgICAgICAgIC8vIHNldCBwYXJhbXMgLSBkZWxlZ2F0ZSBwYXJhbSBlbmNvZGluZyB0byAkaHR0cFxyXG4gICAgICAgICAgZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcclxuICAgICAgICAgICAgaWYgKCFzZWxmLnVybFBhcmFtc1trZXldKSB7XHJcbiAgICAgICAgICAgICAgY29uZmlnLnBhcmFtcyA9IGNvbmZpZy5wYXJhbXMgfHwge307XHJcbiAgICAgICAgICAgICAgY29uZmlnLnBhcmFtc1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcblxyXG4gICAgICBmdW5jdGlvbiByZXNvdXJjZUZhY3RvcnkodXJsLCBwYXJhbURlZmF1bHRzLCBhY3Rpb25zLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIHJvdXRlID0gbmV3IFJvdXRlKHVybCwgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIGFjdGlvbnMgPSBleHRlbmQoe30sIHByb3ZpZGVyLmRlZmF1bHRzLmFjdGlvbnMsIGFjdGlvbnMpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBleHRyYWN0UGFyYW1zKGRhdGEsIGFjdGlvblBhcmFtcykge1xyXG4gICAgICAgICAgdmFyIGlkcyA9IHt9O1xyXG4gICAgICAgICAgYWN0aW9uUGFyYW1zID0gZXh0ZW5kKHt9LCBwYXJhbURlZmF1bHRzLCBhY3Rpb25QYXJhbXMpO1xyXG4gICAgICAgICAgZm9yRWFjaChhY3Rpb25QYXJhbXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcclxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7IHZhbHVlID0gdmFsdWUoKTsgfVxyXG4gICAgICAgICAgICBpZHNba2V5XSA9IHZhbHVlICYmIHZhbHVlLmNoYXJBdCAmJiB2YWx1ZS5jaGFyQXQoMCkgPT0gJ0AnID9cclxuICAgICAgICAgICAgICBsb29rdXBEb3R0ZWRQYXRoKGRhdGEsIHZhbHVlLnN1YnN0cigxKSkgOiB2YWx1ZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIGlkcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRSZXNwb25zZUludGVyY2VwdG9yKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVzb3VyY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBSZXNvdXJjZSh2YWx1ZSkge1xyXG4gICAgICAgICAgc2hhbGxvd0NsZWFyQW5kQ29weSh2YWx1ZSB8fCB7fSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBSZXNvdXJjZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICB2YXIgZGF0YSA9IGV4dGVuZCh7fSwgdGhpcyk7XHJcbiAgICAgICAgICBkZWxldGUgZGF0YS4kcHJvbWlzZTtcclxuICAgICAgICAgIGRlbGV0ZSBkYXRhLiRyZXNvbHZlZDtcclxuICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGZvckVhY2goYWN0aW9ucywgZnVuY3Rpb24oYWN0aW9uLCBuYW1lKSB7XHJcbiAgICAgICAgICB2YXIgaGFzQm9keSA9IC9eKFBPU1R8UFVUfFBBVENIKSQvaS50ZXN0KGFjdGlvbi5tZXRob2QpO1xyXG5cclxuICAgICAgICAgIFJlc291cmNlW25hbWVdID0gZnVuY3Rpb24oYTEsIGEyLCBhMywgYTQpIHtcclxuICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHt9LCBkYXRhLCBzdWNjZXNzLCBlcnJvcjtcclxuXHJcbiAgICAgICAgICAgIC8qIGpzaGludCAtVzA4NiAqLyAvKiAocHVycG9zZWZ1bGx5IGZhbGwgdGhyb3VnaCBjYXNlIHN0YXRlbWVudHMpICovXHJcbiAgICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIGVycm9yID0gYTQ7XHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzID0gYTM7XHJcbiAgICAgICAgICAgICAgLy9mYWxsdGhyb3VnaFxyXG4gICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihhMikpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oYTEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGExO1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gYTI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBhMjtcclxuICAgICAgICAgICAgICAgICAgZXJyb3IgPSBhMztcclxuICAgICAgICAgICAgICAgICAgLy9mYWxsdGhyb3VnaFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zID0gYTE7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGEgPSBhMjtcclxuICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGEzO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihhMSkpIHN1Y2Nlc3MgPSBhMTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc0JvZHkpIGRhdGEgPSBhMTtcclxuICAgICAgICAgICAgICAgIGVsc2UgcGFyYW1zID0gYTE7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlIDA6IGJyZWFrO1xyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aHJvdyAkcmVzb3VyY2VNaW5FcnIoJ2JhZGFyZ3MnLFxyXG4gICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIHVwIHRvIDQgYXJndW1lbnRzIFtwYXJhbXMsIGRhdGEsIHN1Y2Nlc3MsIGVycm9yXSwgZ290IHswfSBhcmd1bWVudHNcIixcclxuICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLyoganNoaW50ICtXMDg2ICovIC8qIChwdXJwb3NlZnVsbHkgZmFsbCB0aHJvdWdoIGNhc2Ugc3RhdGVtZW50cykgKi9cclxuXHJcbiAgICAgICAgICAgIHZhciBpc0luc3RhbmNlQ2FsbCA9IHRoaXMgaW5zdGFuY2VvZiBSZXNvdXJjZTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gaXNJbnN0YW5jZUNhbGwgPyBkYXRhIDogKGFjdGlvbi5pc0FycmF5ID8gW10gOiBuZXcgUmVzb3VyY2UoZGF0YSkpO1xyXG4gICAgICAgICAgICB2YXIgaHR0cENvbmZpZyA9IHt9O1xyXG4gICAgICAgICAgICB2YXIgcmVzcG9uc2VJbnRlcmNlcHRvciA9IGFjdGlvbi5pbnRlcmNlcHRvciAmJiBhY3Rpb24uaW50ZXJjZXB0b3IucmVzcG9uc2UgfHxcclxuICAgICAgICAgICAgICBkZWZhdWx0UmVzcG9uc2VJbnRlcmNlcHRvcjtcclxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlRXJyb3JJbnRlcmNlcHRvciA9IGFjdGlvbi5pbnRlcmNlcHRvciAmJiBhY3Rpb24uaW50ZXJjZXB0b3IucmVzcG9uc2VFcnJvciB8fFxyXG4gICAgICAgICAgICAgIHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICAgIGZvckVhY2goYWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XHJcbiAgICAgICAgICAgICAgaWYgKGtleSAhPSAncGFyYW1zJyAmJiBrZXkgIT0gJ2lzQXJyYXknICYmIGtleSAhPSAnaW50ZXJjZXB0b3InKSB7XHJcbiAgICAgICAgICAgICAgICBodHRwQ29uZmlnW2tleV0gPSBjb3B5KHZhbHVlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGhhc0JvZHkpIGh0dHBDb25maWcuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICAgIHJvdXRlLnNldFVybFBhcmFtcyhodHRwQ29uZmlnLFxyXG4gICAgICAgICAgICAgIGV4dGVuZCh7fSwgZXh0cmFjdFBhcmFtcyhkYXRhLCBhY3Rpb24ucGFyYW1zIHx8IHt9KSwgcGFyYW1zKSxcclxuICAgICAgICAgICAgICBhY3Rpb24udXJsKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwcm9taXNlID0gJGh0dHAoaHR0cENvbmZpZykudGhlbihmdW5jdGlvbihyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2UuZGF0YSxcclxuICAgICAgICAgICAgICAgIHByb21pc2UgPSB2YWx1ZS4kcHJvbWlzZTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gY29udmVydCBhY3Rpb24uaXNBcnJheSB0byBib29sZWFuIGluIGNhc2UgaXQgaXMgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAvLyBqc2hpbnQgLVcwMThcclxuICAgICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzQXJyYXkoZGF0YSkgIT09ICghIWFjdGlvbi5pc0FycmF5KSkge1xyXG4gICAgICAgICAgICAgICAgICB0aHJvdyAkcmVzb3VyY2VNaW5FcnIoJ2JhZGNmZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAnRXJyb3IgaW4gcmVzb3VyY2UgY29uZmlndXJhdGlvbiBmb3IgYWN0aW9uIGB7MH1gLiBFeHBlY3RlZCByZXNwb25zZSB0byAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICdjb250YWluIGFuIHsxfSBidXQgZ290IGFuIHsyfScsIG5hbWUsIGFjdGlvbi5pc0FycmF5ID8gJ2FycmF5JyA6ICdvYmplY3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuaXNBcnJheShkYXRhKSA/ICdhcnJheScgOiAnb2JqZWN0Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBqc2hpbnQgK1cwMThcclxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaXNBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICB2YWx1ZS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgICBmb3JFYWNoKGRhdGEsIGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnB1c2gobmV3IFJlc291cmNlKGl0ZW0pKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gVmFsaWQgSlNPTiB2YWx1ZXMgbWF5IGJlIHN0cmluZyBsaXRlcmFscywgYW5kIHRoZXNlIHNob3VsZCBub3QgYmUgY29udmVydGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRvIG9iamVjdHMuIFRoZXNlIGl0ZW1zIHdpbGwgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSBSZXNvdXJjZSBwcm90b3R5cGVcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIG1ldGhvZHMsIGJ1dCB1bmZvcnR1bmF0ZWx5IHRoZXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBzaGFsbG93Q2xlYXJBbmRDb3B5KGRhdGEsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgdmFsdWUuJHByb21pc2UgPSBwcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgdmFsdWUuJHJlc29sdmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgcmVzcG9uc2UucmVzb3VyY2UgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9LCBmdW5jdGlvbihyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgIHZhbHVlLiRyZXNvbHZlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgIChlcnJvciB8fCBub29wKShyZXNwb25zZSk7XHJcblxyXG4gICAgICAgICAgICAgIHJldHVybiAkcS5yZWplY3QocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oXHJcbiAgICAgICAgICAgICAgZnVuY3Rpb24ocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlc3BvbnNlSW50ZXJjZXB0b3IocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgKHN1Y2Nlc3MgfHwgbm9vcCkodmFsdWUsIHJlc3BvbnNlLmhlYWRlcnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgcmVzcG9uc2VFcnJvckludGVyY2VwdG9yKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghaXNJbnN0YW5jZUNhbGwpIHtcclxuICAgICAgICAgICAgICAvLyB3ZSBhcmUgY3JlYXRpbmcgaW5zdGFuY2UgLyBjb2xsZWN0aW9uXHJcbiAgICAgICAgICAgICAgLy8gLSBzZXQgdGhlIGluaXRpYWwgcHJvbWlzZVxyXG4gICAgICAgICAgICAgIC8vIC0gcmV0dXJuIHRoZSBpbnN0YW5jZSAvIGNvbGxlY3Rpb25cclxuICAgICAgICAgICAgICB2YWx1ZS4kcHJvbWlzZSA9IHByb21pc2U7XHJcbiAgICAgICAgICAgICAgdmFsdWUuJHJlc29sdmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaW5zdGFuY2UgY2FsbFxyXG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcclxuICAgICAgICAgIH07XHJcblxyXG5cclxuICAgICAgICAgIFJlc291cmNlLnByb3RvdHlwZVsnJCcgKyBuYW1lXSA9IGZ1bmN0aW9uKHBhcmFtcywgc3VjY2VzcywgZXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocGFyYW1zKSkge1xyXG4gICAgICAgICAgICAgIGVycm9yID0gc3VjY2Vzczsgc3VjY2VzcyA9IHBhcmFtczsgcGFyYW1zID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFJlc291cmNlW25hbWVdLmNhbGwodGhpcywgcGFyYW1zLCB0aGlzLCBzdWNjZXNzLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuJHByb21pc2UgfHwgcmVzdWx0O1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgUmVzb3VyY2UuYmluZCA9IGZ1bmN0aW9uKGFkZGl0aW9uYWxQYXJhbURlZmF1bHRzKSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzb3VyY2VGYWN0b3J5KHVybCwgZXh0ZW5kKHt9LCBwYXJhbURlZmF1bHRzLCBhZGRpdGlvbmFsUGFyYW1EZWZhdWx0cyksIGFjdGlvbnMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBSZXNvdXJjZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHJlc291cmNlRmFjdG9yeTtcclxuICAgIH1dO1xyXG4gIH0pO1xyXG5cclxuXHJcbn0pKHdpbmRvdywgd2luZG93LmFuZ3VsYXIpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular-sanitize.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular-sanitize.js index 458041a1f24..c825f455ed0 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular-sanitize.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular-sanitize.js @@ -682,4 +682,4 @@ angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) { })(window, window.angular); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFuZ3VsYXItc2FuaXRpemUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiYW5ndWxhci1zYW5pdGl6ZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgQW5ndWxhckpTIHYxLjMuM1xuICogKGMpIDIwMTAtMjAxNCBHb29nbGUsIEluYy4gaHR0cDovL2FuZ3VsYXJqcy5vcmdcbiAqIExpY2Vuc2U6IE1JVFxuICovXG4oZnVuY3Rpb24od2luZG93LCBhbmd1bGFyLCB1bmRlZmluZWQpIHsndXNlIHN0cmljdCc7XG5cbnZhciAkc2FuaXRpemVNaW5FcnIgPSBhbmd1bGFyLiQkbWluRXJyKCckc2FuaXRpemUnKTtcblxuLyoqXG4gKiBAbmdkb2MgbW9kdWxlXG4gKiBAbmFtZSBuZ1Nhbml0aXplXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiAjIG5nU2FuaXRpemVcbiAqXG4gKiBUaGUgYG5nU2FuaXRpemVgIG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIHNhbml0aXplIEhUTUwuXG4gKlxuICpcbiAqIDxkaXYgZG9jLW1vZHVsZS1jb21wb25lbnRzPVwibmdTYW5pdGl6ZVwiPjwvZGl2PlxuICpcbiAqIFNlZSB7QGxpbmsgbmdTYW5pdGl6ZS4kc2FuaXRpemUgYCRzYW5pdGl6ZWB9IGZvciB1c2FnZS5cbiAqL1xuXG4vKlxuICogSFRNTCBQYXJzZXIgQnkgTWlza28gSGV2ZXJ5IChtaXNrb0BoZXZlcnkuY29tKVxuICogYmFzZWQgb246ICBIVE1MIFBhcnNlciBCeSBKb2huIFJlc2lnIChlam9obi5vcmcpXG4gKiBPcmlnaW5hbCBjb2RlIGJ5IEVyaWsgQXJ2aWRzc29uLCBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlXG4gKiBodHRwOi8vZXJpay5lYWUubmV0L3NpbXBsZWh0bWxwYXJzZXIvc2ltcGxlaHRtbHBhcnNlci5qc1xuICpcbiAqIC8vIFVzZSBsaWtlIHNvOlxuICogaHRtbFBhcnNlcihodG1sU3RyaW5nLCB7XG4gKiAgICAgc3RhcnQ6IGZ1bmN0aW9uKHRhZywgYXR0cnMsIHVuYXJ5KSB7fSxcbiAqICAgICBlbmQ6IGZ1bmN0aW9uKHRhZykge30sXG4gKiAgICAgY2hhcnM6IGZ1bmN0aW9uKHRleHQpIHt9LFxuICogICAgIGNvbW1lbnQ6IGZ1bmN0aW9uKHRleHQpIHt9XG4gKiB9KTtcbiAqXG4gKi9cblxuXG4vKipcbiAqIEBuZ2RvYyBzZXJ2aWNlXG4gKiBAbmFtZSAkc2FuaXRpemVcbiAqIEBraW5kIGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiAgIFRoZSBpbnB1dCBpcyBzYW5pdGl6ZWQgYnkgcGFyc2luZyB0aGUgSFRNTCBpbnRvIHRva2Vucy4gQWxsIHNhZmUgdG9rZW5zIChmcm9tIGEgd2hpdGVsaXN0KSBhcmVcbiAqICAgdGhlbiBzZXJpYWxpemVkIGJhY2sgdG8gcHJvcGVybHkgZXNjYXBlZCBodG1sIHN0cmluZy4gVGhpcyBtZWFucyB0aGF0IG5vIHVuc2FmZSBpbnB1dCBjYW4gbWFrZVxuICogICBpdCBpbnRvIHRoZSByZXR1cm5lZCBzdHJpbmcsIGhvd2V2ZXIsIHNpbmNlIG91ciBwYXJzZXIgaXMgbW9yZSBzdHJpY3QgdGhhbiBhIHR5cGljYWwgYnJvd3NlclxuICogICBwYXJzZXIsIGl0J3MgcG9zc2libGUgdGhhdCBzb21lIG9ic2N1cmUgaW5wdXQsIHdoaWNoIHdvdWxkIGJlIHJlY29nbml6ZWQgYXMgdmFsaWQgSFRNTCBieSBhXG4gKiAgIGJyb3dzZXIsIHdvbid0IG1ha2UgaXQgdGhyb3VnaCB0aGUgc2FuaXRpemVyLiBUaGUgaW5wdXQgbWF5IGFsc28gY29udGFpbiBTVkcgbWFya3VwLlxuICogICBUaGUgd2hpdGVsaXN0IGlzIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIGZ1bmN0aW9ucyBgYUhyZWZTYW5pdGl6YXRpb25XaGl0ZWxpc3RgIGFuZFxuICogICBgaW1nU3JjU2FuaXRpemF0aW9uV2hpdGVsaXN0YCBvZiB7QGxpbmsgbmcuJGNvbXBpbGVQcm92aWRlciBgJGNvbXBpbGVQcm92aWRlcmB9LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIEhUTUwgaW5wdXQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBTYW5pdGl6ZWQgSFRNTC5cbiAqXG4gKiBAZXhhbXBsZVxuICAgPGV4YW1wbGUgbW9kdWxlPVwic2FuaXRpemVFeGFtcGxlXCIgZGVwcz1cImFuZ3VsYXItc2FuaXRpemUuanNcIj5cbiAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgIDxzY3JpcHQ+XG4gICAgICAgICBhbmd1bGFyLm1vZHVsZSgnc2FuaXRpemVFeGFtcGxlJywgWyduZ1Nhbml0aXplJ10pXG4gICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRzY2UnLCBmdW5jdGlvbigkc2NvcGUsICRzY2UpIHtcbiAgICAgICAgICAgICAkc2NvcGUuc25pcHBldCA9XG4gICAgICAgICAgICAgICAnPHAgc3R5bGU9XCJjb2xvcjpibHVlXCI+YW4gaHRtbFxcbicgK1xuICAgICAgICAgICAgICAgJzxlbSBvbm1vdXNlb3Zlcj1cInRoaXMudGV4dENvbnRlbnQ9XFwnUFdOM0QhXFwnXCI+Y2xpY2sgaGVyZTwvZW0+XFxuJyArXG4gICAgICAgICAgICAgICAnc25pcHBldDwvcD4nO1xuICAgICAgICAgICAgICRzY29wZS5kZWxpYmVyYXRlbHlUcnVzdERhbmdlcm91c1NuaXBwZXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgIHJldHVybiAkc2NlLnRydXN0QXNIdG1sKCRzY29wZS5zbmlwcGV0KTtcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICB9XSk7XG4gICAgIDwvc2NyaXB0PlxuICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxuICAgICAgICBTbmlwcGV0OiA8dGV4dGFyZWEgbmctbW9kZWw9XCJzbmlwcGV0XCIgY29scz1cIjYwXCIgcm93cz1cIjNcIj48L3RleHRhcmVhPlxuICAgICAgIDx0YWJsZT5cbiAgICAgICAgIDx0cj5cbiAgICAgICAgICAgPHRkPkRpcmVjdGl2ZTwvdGQ+XG4gICAgICAgICAgIDx0ZD5Ib3c8L3RkPlxuICAgICAgICAgICA8dGQ+U291cmNlPC90ZD5cbiAgICAgICAgICAgPHRkPlJlbmRlcmVkPC90ZD5cbiAgICAgICAgIDwvdHI+XG4gICAgICAgICA8dHIgaWQ9XCJiaW5kLWh0bWwtd2l0aC1zYW5pdGl6ZVwiPlxuICAgICAgICAgICA8dGQ+bmctYmluZC1odG1sPC90ZD5cbiAgICAgICAgICAgPHRkPkF1dG9tYXRpY2FsbHkgdXNlcyAkc2FuaXRpemU8L3RkPlxuICAgICAgICAgICA8dGQ+PHByZT4mbHQ7ZGl2IG5nLWJpbmQtaHRtbD1cInNuaXBwZXRcIiZndDs8YnIvPiZsdDsvZGl2Jmd0OzwvcHJlPjwvdGQ+XG4gICAgICAgICAgIDx0ZD48ZGl2IG5nLWJpbmQtaHRtbD1cInNuaXBwZXRcIj48L2Rpdj48L3RkPlxuICAgICAgICAgPC90cj5cbiAgICAgICAgIDx0ciBpZD1cImJpbmQtaHRtbC13aXRoLXRydXN0XCI+XG4gICAgICAgICAgIDx0ZD5uZy1iaW5kLWh0bWw8L3RkPlxuICAgICAgICAgICA8dGQ+QnlwYXNzICRzYW5pdGl6ZSBieSBleHBsaWNpdGx5IHRydXN0aW5nIHRoZSBkYW5nZXJvdXMgdmFsdWU8L3RkPlxuICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgIDxwcmU+Jmx0O2RpdiBuZy1iaW5kLWh0bWw9XCJkZWxpYmVyYXRlbHlUcnVzdERhbmdlcm91c1NuaXBwZXQoKVwiJmd0O1xuJmx0Oy9kaXYmZ3Q7PC9wcmU+XG4gICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgIDx0ZD48ZGl2IG5nLWJpbmQtaHRtbD1cImRlbGliZXJhdGVseVRydXN0RGFuZ2Vyb3VzU25pcHBldCgpXCI+PC9kaXY+PC90ZD5cbiAgICAgICAgIDwvdHI+XG4gICAgICAgICA8dHIgaWQ9XCJiaW5kLWRlZmF1bHRcIj5cbiAgICAgICAgICAgPHRkPm5nLWJpbmQ8L3RkPlxuICAgICAgICAgICA8dGQ+QXV0b21hdGljYWxseSBlc2NhcGVzPC90ZD5cbiAgICAgICAgICAgPHRkPjxwcmU+Jmx0O2RpdiBuZy1iaW5kPVwic25pcHBldFwiJmd0Ozxici8+Jmx0Oy9kaXYmZ3Q7PC9wcmU+PC90ZD5cbiAgICAgICAgICAgPHRkPjxkaXYgbmctYmluZD1cInNuaXBwZXRcIj48L2Rpdj48L3RkPlxuICAgICAgICAgPC90cj5cbiAgICAgICA8L3RhYmxlPlxuICAgICAgIDwvZGl2PlxuICAgPC9maWxlPlxuICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICBpdCgnc2hvdWxkIHNhbml0aXplIHRoZSBodG1sIHNuaXBwZXQgYnkgZGVmYXVsdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnI2JpbmQtaHRtbC13aXRoLXNhbml0aXplIGRpdicpKS5nZXRJbm5lckh0bWwoKSkuXG4gICAgICAgICB0b0JlKCc8cD5hbiBodG1sXFxuPGVtPmNsaWNrIGhlcmU8L2VtPlxcbnNuaXBwZXQ8L3A+Jyk7XG4gICAgIH0pO1xuXG4gICAgIGl0KCdzaG91bGQgaW5saW5lIHJhdyBzbmlwcGV0IGlmIGJvdW5kIHRvIGEgdHJ1c3RlZCB2YWx1ZScsIGZ1bmN0aW9uKCkge1xuICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnI2JpbmQtaHRtbC13aXRoLXRydXN0IGRpdicpKS5nZXRJbm5lckh0bWwoKSkuXG4gICAgICAgICB0b0JlKFwiPHAgc3R5bGU9XFxcImNvbG9yOmJsdWVcXFwiPmFuIGh0bWxcXG5cIiArXG4gICAgICAgICAgICAgIFwiPGVtIG9ubW91c2VvdmVyPVxcXCJ0aGlzLnRleHRDb250ZW50PSdQV04zRCEnXFxcIj5jbGljayBoZXJlPC9lbT5cXG5cIiArXG4gICAgICAgICAgICAgIFwic25pcHBldDwvcD5cIik7XG4gICAgIH0pO1xuXG4gICAgIGl0KCdzaG91bGQgZXNjYXBlIHNuaXBwZXQgd2l0aG91dCBhbnkgZmlsdGVyJywgZnVuY3Rpb24oKSB7XG4gICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuY3NzKCcjYmluZC1kZWZhdWx0IGRpdicpKS5nZXRJbm5lckh0bWwoKSkuXG4gICAgICAgICB0b0JlKFwiJmx0O3Agc3R5bGU9XFxcImNvbG9yOmJsdWVcXFwiJmd0O2FuIGh0bWxcXG5cIiArXG4gICAgICAgICAgICAgIFwiJmx0O2VtIG9ubW91c2VvdmVyPVxcXCJ0aGlzLnRleHRDb250ZW50PSdQV04zRCEnXFxcIiZndDtjbGljayBoZXJlJmx0Oy9lbSZndDtcXG5cIiArXG4gICAgICAgICAgICAgIFwic25pcHBldCZsdDsvcCZndDtcIik7XG4gICAgIH0pO1xuXG4gICAgIGl0KCdzaG91bGQgdXBkYXRlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgZWxlbWVudChieS5tb2RlbCgnc25pcHBldCcpKS5jbGVhcigpO1xuICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3NuaXBwZXQnKSkuc2VuZEtleXMoJ25ldyA8YiBvbmNsaWNrPVwiYWxlcnQoMSlcIj50ZXh0PC9iPicpO1xuICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnI2JpbmQtaHRtbC13aXRoLXNhbml0aXplIGRpdicpKS5nZXRJbm5lckh0bWwoKSkuXG4gICAgICAgICB0b0JlKCduZXcgPGI+dGV4dDwvYj4nKTtcbiAgICAgICBleHBlY3QoZWxlbWVudChieS5jc3MoJyNiaW5kLWh0bWwtd2l0aC10cnVzdCBkaXYnKSkuZ2V0SW5uZXJIdG1sKCkpLnRvQmUoXG4gICAgICAgICAnbmV3IDxiIG9uY2xpY2s9XCJhbGVydCgxKVwiPnRleHQ8L2I+Jyk7XG4gICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuY3NzKCcjYmluZC1kZWZhdWx0IGRpdicpKS5nZXRJbm5lckh0bWwoKSkudG9CZShcbiAgICAgICAgIFwibmV3ICZsdDtiIG9uY2xpY2s9XFxcImFsZXJ0KDEpXFxcIiZndDt0ZXh0Jmx0Oy9iJmd0O1wiKTtcbiAgICAgfSk7XG4gICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG4gKi9cbmZ1bmN0aW9uICRTYW5pdGl6ZVByb3ZpZGVyKCkge1xuICB0aGlzLiRnZXQgPSBbJyQkc2FuaXRpemVVcmknLCBmdW5jdGlvbigkJHNhbml0aXplVXJpKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGh0bWwpIHtcbiAgICAgIHZhciBidWYgPSBbXTtcbiAgICAgIGh0bWxQYXJzZXIoaHRtbCwgaHRtbFNhbml0aXplV3JpdGVyKGJ1ZiwgZnVuY3Rpb24odXJpLCBpc0ltYWdlKSB7XG4gICAgICAgIHJldHVybiAhL151bnNhZmUvLnRlc3QoJCRzYW5pdGl6ZVVyaSh1cmksIGlzSW1hZ2UpKTtcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBidWYuam9pbignJyk7XG4gICAgfTtcbiAgfV07XG59XG5cbmZ1bmN0aW9uIHNhbml0aXplVGV4dChjaGFycykge1xuICB2YXIgYnVmID0gW107XG4gIHZhciB3cml0ZXIgPSBodG1sU2FuaXRpemVXcml0ZXIoYnVmLCBhbmd1bGFyLm5vb3ApO1xuICB3cml0ZXIuY2hhcnMoY2hhcnMpO1xuICByZXR1cm4gYnVmLmpvaW4oJycpO1xufVxuXG5cbi8vIFJlZ3VsYXIgRXhwcmVzc2lvbnMgZm9yIHBhcnNpbmcgdGFncyBhbmQgYXR0cmlidXRlc1xudmFyIFNUQVJUX1RBR19SRUdFWFAgPVxuICAgICAgIC9ePCgoPzpbYS16QS1aXSlbXFx3Oi1dKikoKD86XFxzK1tcXHc6LV0rKD86XFxzKj1cXHMqKD86KD86XCJbXlwiXSpcIil8KD86J1teJ10qJyl8W14+XFxzXSspKT8pKilcXHMqKFxcLz8pXFxzKig+PykvLFxuICBFTkRfVEFHX1JFR0VYUCA9IC9ePFxcL1xccyooW1xcdzotXSspW14+XSo+LyxcbiAgQVRUUl9SRUdFWFAgPSAvKFtcXHc6LV0rKSg/Olxccyo9XFxzKig/Oig/OlwiKCg/OlteXCJdKSopXCIpfCg/OicoKD86W14nXSkqKScpfChbXj5cXHNdKykpKT8vZyxcbiAgQkVHSU5fVEFHX1JFR0VYUCA9IC9ePC8sXG4gIEJFR0lOR19FTkRfVEFHRV9SRUdFWFAgPSAvXjxcXC8vLFxuICBDT01NRU5UX1JFR0VYUCA9IC88IS0tKC4qPyktLT4vZyxcbiAgRE9DVFlQRV9SRUdFWFAgPSAvPCFET0NUWVBFKFtePl0qPyk+L2ksXG4gIENEQVRBX1JFR0VYUCA9IC88IVxcW0NEQVRBXFxbKC4qPyldXT4vZyxcbiAgU1VSUk9HQVRFX1BBSVJfUkVHRVhQID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZyxcbiAgLy8gTWF0Y2ggZXZlcnl0aGluZyBvdXRzaWRlIG9mIG5vcm1hbCBjaGFycyBhbmQgXCIgKHF1b3RlIGNoYXJhY3RlcilcbiAgTk9OX0FMUEhBTlVNRVJJQ19SRUdFWFAgPSAvKFteXFwjLX58IHwhXSkvZztcblxuXG4vLyBHb29kIHNvdXJjZSBvZiBpbmZvIGFib3V0IGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzXG4vLyBodHRwOi8vZGV2LnczLm9yZy9odG1sNS9zcGVjL092ZXJ2aWV3Lmh0bWwjc2VtYW50aWNzXG4vLyBodHRwOi8vc2ltb24uaHRtbDUub3JnL2h0bWwtZWxlbWVudHNcblxuLy8gU2FmZSBWb2lkIEVsZW1lbnRzIC0gSFRNTDVcbi8vIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCN2b2lkLWVsZW1lbnRzXG52YXIgdm9pZEVsZW1lbnRzID0gbWFrZU1hcChcImFyZWEsYnIsY29sLGhyLGltZyx3YnJcIik7XG5cbi8vIEVsZW1lbnRzIHRoYXQgeW91IGNhbiwgaW50ZW50aW9uYWxseSwgbGVhdmUgb3BlbiAoYW5kIHdoaWNoIGNsb3NlIHRoZW1zZWx2ZXMpXG4vLyBodHRwOi8vZGV2LnczLm9yZy9odG1sNS9zcGVjL092ZXJ2aWV3Lmh0bWwjb3B0aW9uYWwtdGFnc1xudmFyIG9wdGlvbmFsRW5kVGFnQmxvY2tFbGVtZW50cyA9IG1ha2VNYXAoXCJjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyXCIpLFxuICAgIG9wdGlvbmFsRW5kVGFnSW5saW5lRWxlbWVudHMgPSBtYWtlTWFwKFwicnAscnRcIiksXG4gICAgb3B0aW9uYWxFbmRUYWdFbGVtZW50cyA9IGFuZ3VsYXIuZXh0ZW5kKHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbEVuZFRhZ0lubGluZUVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbEVuZFRhZ0Jsb2NrRWxlbWVudHMpO1xuXG4vLyBTYWZlIEJsb2NrIEVsZW1lbnRzIC0gSFRNTDVcbnZhciBibG9ja0VsZW1lbnRzID0gYW5ndWxhci5leHRlbmQoe30sIG9wdGlvbmFsRW5kVGFnQmxvY2tFbGVtZW50cywgbWFrZU1hcChcImFkZHJlc3MsYXJ0aWNsZSxcIiArXG4gICAgICAgIFwiYXNpZGUsYmxvY2txdW90ZSxjYXB0aW9uLGNlbnRlcixkZWwsZGlyLGRpdixkbCxmaWd1cmUsZmlnY2FwdGlvbixmb290ZXIsaDEsaDIsaDMsaDQsaDUsXCIgK1xuICAgICAgICBcImg2LGhlYWRlcixoZ3JvdXAsaHIsaW5zLG1hcCxtZW51LG5hdixvbCxwcmUsc2NyaXB0LHNlY3Rpb24sdGFibGUsdWxcIikpO1xuXG4vLyBJbmxpbmUgRWxlbWVudHMgLSBIVE1MNVxudmFyIGlubGluZUVsZW1lbnRzID0gYW5ndWxhci5leHRlbmQoe30sIG9wdGlvbmFsRW5kVGFnSW5saW5lRWxlbWVudHMsIG1ha2VNYXAoXCJhLGFiYnIsYWNyb255bSxiLFwiICtcbiAgICAgICAgXCJiZGksYmRvLGJpZyxicixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaW1nLGlucyxrYmQsbGFiZWwsbWFwLG1hcmsscSxydWJ5LHJwLHJ0LHMsXCIgK1xuICAgICAgICBcInNhbXAsc21hbGwsc3BhbixzdHJpa2Usc3Ryb25nLHN1YixzdXAsdGltZSx0dCx1LHZhclwiKSk7XG5cbi8vIFNWRyBFbGVtZW50c1xuLy8gaHR0cHM6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9TYW5pdGl6YXRpb25fcnVsZXMjc3ZnX0VsZW1lbnRzXG52YXIgc3ZnRWxlbWVudHMgPSBtYWtlTWFwKFwiYW5pbWF0ZSxhbmltYXRlQ29sb3IsYW5pbWF0ZU1vdGlvbixhbmltYXRlVHJhbnNmb3JtLGNpcmNsZSxkZWZzLFwiICtcbiAgICAgICAgXCJkZXNjLGVsbGlwc2UsZm9udC1mYWNlLGZvbnQtZmFjZS1uYW1lLGZvbnQtZmFjZS1zcmMsZyxnbHlwaCxoa2VybixpbWFnZSxsaW5lYXJHcmFkaWVudCxcIiArXG4gICAgICAgIFwibGluZSxtYXJrZXIsbWV0YWRhdGEsbWlzc2luZy1nbHlwaCxtcGF0aCxwYXRoLHBvbHlnb24scG9seWxpbmUscmFkaWFsR3JhZGllbnQscmVjdCxzZXQsXCIgK1xuICAgICAgICBcInN0b3Asc3ZnLHN3aXRjaCx0ZXh0LHRpdGxlLHRzcGFuLHVzZVwiKTtcblxuLy8gU3BlY2lhbCBFbGVtZW50cyAoY2FuIGNvbnRhaW4gYW55dGhpbmcpXG52YXIgc3BlY2lhbEVsZW1lbnRzID0gbWFrZU1hcChcInNjcmlwdCxzdHlsZVwiKTtcblxudmFyIHZhbGlkRWxlbWVudHMgPSBhbmd1bGFyLmV4dGVuZCh7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZEVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja0VsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxFbmRUYWdFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZnRWxlbWVudHMpO1xuXG4vL0F0dHJpYnV0ZXMgdGhhdCBoYXZlIGhyZWYgYW5kIGhlbmNlIG5lZWQgdG8gYmUgc2FuaXRpemVkXG52YXIgdXJpQXR0cnMgPSBtYWtlTWFwKFwiYmFja2dyb3VuZCxjaXRlLGhyZWYsbG9uZ2Rlc2Msc3JjLHVzZW1hcCx4bGluazpocmVmXCIpO1xuXG52YXIgaHRtbEF0dHJzID0gbWFrZU1hcCgnYWJicixhbGlnbixhbHQsYXhpcyxiZ2NvbG9yLGJvcmRlcixjZWxscGFkZGluZyxjZWxsc3BhY2luZyxjbGFzcyxjbGVhciwnICtcbiAgICAnY29sb3IsY29scyxjb2xzcGFuLGNvbXBhY3QsY29vcmRzLGRpcixmYWNlLGhlYWRlcnMsaGVpZ2h0LGhyZWZsYW5nLGhzcGFjZSwnICtcbiAgICAnaXNtYXAsbGFuZyxsYW5ndWFnZSxub2hyZWYsbm93cmFwLHJlbCxyZXYscm93cyxyb3dzcGFuLHJ1bGVzLCcgK1xuICAgICdzY29wZSxzY3JvbGxpbmcsc2hhcGUsc2l6ZSxzcGFuLHN0YXJ0LHN1bW1hcnksdGFyZ2V0LHRpdGxlLHR5cGUsJyArXG4gICAgJ3ZhbGlnbix2YWx1ZSx2c3BhY2Usd2lkdGgnKTtcblxuLy8gU1ZHIGF0dHJpYnV0ZXMgKHdpdGhvdXQgXCJpZFwiIGFuZCBcIm5hbWVcIiBhdHRyaWJ1dGVzKVxuLy8gaHR0cHM6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9TYW5pdGl6YXRpb25fcnVsZXMjc3ZnX0F0dHJpYnV0ZXNcbnZhciBzdmdBdHRycyA9IG1ha2VNYXAoJ2FjY2VudC1oZWlnaHQsYWNjdW11bGF0ZSxhZGRpdGl2ZSxhbHBoYWJldGljLGFyYWJpYy1mb3JtLGFzY2VudCwnICtcbiAgICAnYXR0cmlidXRlTmFtZSxhdHRyaWJ1dGVUeXBlLGJhc2VQcm9maWxlLGJib3gsYmVnaW4sYnksY2FsY01vZGUsY2FwLWhlaWdodCxjbGFzcyxjb2xvciwnICtcbiAgICAnY29sb3ItcmVuZGVyaW5nLGNvbnRlbnQsY3gsY3ksZCxkeCxkeSxkZXNjZW50LGRpc3BsYXksZHVyLGVuZCxmaWxsLGZpbGwtcnVsZSxmb250LWZhbWlseSwnICtcbiAgICAnZm9udC1zaXplLGZvbnQtc3RyZXRjaCxmb250LXN0eWxlLGZvbnQtdmFyaWFudCxmb250LXdlaWdodCxmcm9tLGZ4LGZ5LGcxLGcyLGdseXBoLW5hbWUsJyArXG4gICAgJ2dyYWRpZW50VW5pdHMsaGFuZ2luZyxoZWlnaHQsaG9yaXotYWR2LXgsaG9yaXotb3JpZ2luLXgsaWRlb2dyYXBoaWMsayxrZXlQb2ludHMsJyArXG4gICAgJ2tleVNwbGluZXMsa2V5VGltZXMsbGFuZyxtYXJrZXItZW5kLG1hcmtlci1taWQsbWFya2VyLXN0YXJ0LG1hcmtlckhlaWdodCxtYXJrZXJVbml0cywnICtcbiAgICAnbWFya2VyV2lkdGgsbWF0aGVtYXRpY2FsLG1heCxtaW4sb2Zmc2V0LG9wYWNpdHksb3JpZW50LG9yaWdpbixvdmVybGluZS1wb3NpdGlvbiwnICtcbiAgICAnb3ZlcmxpbmUtdGhpY2tuZXNzLHBhbm9zZS0xLHBhdGgscGF0aExlbmd0aCxwb2ludHMscHJlc2VydmVBc3BlY3RSYXRpbyxyLHJlZlgscmVmWSwnICtcbiAgICAncmVwZWF0Q291bnQscmVwZWF0RHVyLHJlcXVpcmVkRXh0ZW5zaW9ucyxyZXF1aXJlZEZlYXR1cmVzLHJlc3RhcnQscm90YXRlLHJ4LHJ5LHNsb3BlLHN0ZW1oLCcgK1xuICAgICdzdGVtdixzdG9wLWNvbG9yLHN0b3Atb3BhY2l0eSxzdHJpa2V0aHJvdWdoLXBvc2l0aW9uLHN0cmlrZXRocm91Z2gtdGhpY2tuZXNzLHN0cm9rZSwnICtcbiAgICAnc3Ryb2tlLWRhc2hhcnJheSxzdHJva2UtZGFzaG9mZnNldCxzdHJva2UtbGluZWNhcCxzdHJva2UtbGluZWpvaW4sc3Ryb2tlLW1pdGVybGltaXQsJyArXG4gICAgJ3N0cm9rZS1vcGFjaXR5LHN0cm9rZS13aWR0aCxzeXN0ZW1MYW5ndWFnZSx0YXJnZXQsdGV4dC1hbmNob3IsdG8sdHJhbnNmb3JtLHR5cGUsdTEsdTIsJyArXG4gICAgJ3VuZGVybGluZS1wb3NpdGlvbix1bmRlcmxpbmUtdGhpY2tuZXNzLHVuaWNvZGUsdW5pY29kZS1yYW5nZSx1bml0cy1wZXItZW0sdmFsdWVzLHZlcnNpb24sJyArXG4gICAgJ3ZpZXdCb3gsdmlzaWJpbGl0eSx3aWR0aCx3aWR0aHMseCx4LWhlaWdodCx4MSx4Mix4bGluazphY3R1YXRlLHhsaW5rOmFyY3JvbGUseGxpbms6cm9sZSwnICtcbiAgICAneGxpbms6c2hvdyx4bGluazp0aXRsZSx4bGluazp0eXBlLHhtbDpiYXNlLHhtbDpsYW5nLHhtbDpzcGFjZSx4bWxucyx4bWxuczp4bGluayx5LHkxLHkyLCcgK1xuICAgICd6b29tQW5kUGFuJyk7XG5cbnZhciB2YWxpZEF0dHJzID0gYW5ndWxhci5leHRlbmQoe30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaUF0dHJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmdBdHRycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbEF0dHJzKTtcblxuZnVuY3Rpb24gbWFrZU1hcChzdHIpIHtcbiAgdmFyIG9iaiA9IHt9LCBpdGVtcyA9IHN0ci5zcGxpdCgnLCcpLCBpO1xuICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIG9ialtpdGVtc1tpXV0gPSB0cnVlO1xuICByZXR1cm4gb2JqO1xufVxuXG5cbi8qKlxuICogQGV4YW1wbGVcbiAqIGh0bWxQYXJzZXIoaHRtbFN0cmluZywge1xuICogICAgIHN0YXJ0OiBmdW5jdGlvbih0YWcsIGF0dHJzLCB1bmFyeSkge30sXG4gKiAgICAgZW5kOiBmdW5jdGlvbih0YWcpIHt9LFxuICogICAgIGNoYXJzOiBmdW5jdGlvbih0ZXh0KSB7fSxcbiAqICAgICBjb21tZW50OiBmdW5jdGlvbih0ZXh0KSB7fVxuICogfSk7XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgc3RyaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gaGFuZGxlclxuICovXG5mdW5jdGlvbiBodG1sUGFyc2VyKGh0bWwsIGhhbmRsZXIpIHtcbiAgaWYgKHR5cGVvZiBodG1sICE9PSAnc3RyaW5nJykge1xuICAgIGlmIChodG1sID09PSBudWxsIHx8IHR5cGVvZiBodG1sID09PSAndW5kZWZpbmVkJykge1xuICAgICAgaHRtbCA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBodG1sID0gJycgKyBodG1sO1xuICAgIH1cbiAgfVxuICB2YXIgaW5kZXgsIGNoYXJzLCBtYXRjaCwgc3RhY2sgPSBbXSwgbGFzdCA9IGh0bWwsIHRleHQ7XG4gIHN0YWNrLmxhc3QgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YWNrWyBzdGFjay5sZW5ndGggLSAxIF07IH07XG5cbiAgd2hpbGUgKGh0bWwpIHtcbiAgICB0ZXh0ID0gJyc7XG4gICAgY2hhcnMgPSB0cnVlO1xuXG4gICAgLy8gTWFrZSBzdXJlIHdlJ3JlIG5vdCBpbiBhIHNjcmlwdCBvciBzdHlsZSBlbGVtZW50XG4gICAgaWYgKCFzdGFjay5sYXN0KCkgfHwgIXNwZWNpYWxFbGVtZW50c1sgc3RhY2subGFzdCgpIF0pIHtcblxuICAgICAgLy8gQ29tbWVudFxuICAgICAgaWYgKGh0bWwuaW5kZXhPZihcIjwhLS1cIikgPT09IDApIHtcbiAgICAgICAgLy8gY29tbWVudHMgY29udGFpbmluZyAtLSBhcmUgbm90IGFsbG93ZWQgdW5sZXNzIHRoZXkgdGVybWluYXRlIHRoZSBjb21tZW50XG4gICAgICAgIGluZGV4ID0gaHRtbC5pbmRleE9mKFwiLS1cIiwgNCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgaHRtbC5sYXN0SW5kZXhPZihcIi0tPlwiLCBpbmRleCkgPT09IGluZGV4KSB7XG4gICAgICAgICAgaWYgKGhhbmRsZXIuY29tbWVudCkgaGFuZGxlci5jb21tZW50KGh0bWwuc3Vic3RyaW5nKDQsIGluZGV4KSk7XG4gICAgICAgICAgaHRtbCA9IGh0bWwuc3Vic3RyaW5nKGluZGV4ICsgMyk7XG4gICAgICAgICAgY2hhcnMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgLy8gRE9DVFlQRVxuICAgICAgfSBlbHNlIGlmIChET0NUWVBFX1JFR0VYUC50ZXN0KGh0bWwpKSB7XG4gICAgICAgIG1hdGNoID0gaHRtbC5tYXRjaChET0NUWVBFX1JFR0VYUCk7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgaHRtbCA9IGh0bWwucmVwbGFjZShtYXRjaFswXSwgJycpO1xuICAgICAgICAgIGNoYXJzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIC8vIGVuZCB0YWdcbiAgICAgIH0gZWxzZSBpZiAoQkVHSU5HX0VORF9UQUdFX1JFR0VYUC50ZXN0KGh0bWwpKSB7XG4gICAgICAgIG1hdGNoID0gaHRtbC5tYXRjaChFTkRfVEFHX1JFR0VYUCk7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgaHRtbCA9IGh0bWwuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgICAgbWF0Y2hbMF0ucmVwbGFjZShFTkRfVEFHX1JFR0VYUCwgcGFyc2VFbmRUYWcpO1xuICAgICAgICAgIGNoYXJzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgLy8gc3RhcnQgdGFnXG4gICAgICB9IGVsc2UgaWYgKEJFR0lOX1RBR19SRUdFWFAudGVzdChodG1sKSkge1xuICAgICAgICBtYXRjaCA9IGh0bWwubWF0Y2goU1RBUlRfVEFHX1JFR0VYUCk7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgLy8gV2Ugb25seSBoYXZlIGEgdmFsaWQgc3RhcnQtdGFnIGlmIHRoZXJlIGlzIGEgJz4nLlxuICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgaHRtbCA9IGh0bWwuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBtYXRjaFswXS5yZXBsYWNlKFNUQVJUX1RBR19SRUdFWFAsIHBhcnNlU3RhcnRUYWcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjaGFycyA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG5vIGVuZGluZyB0YWcgZm91bmQgLS0tIHRoaXMgcGllY2Ugc2hvdWxkIGJlIGVuY29kZWQgYXMgYW4gZW50aXR5LlxuICAgICAgICAgIHRleHQgKz0gJzwnO1xuICAgICAgICAgIGh0bWwgPSBodG1sLnN1YnN0cmluZygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2hhcnMpIHtcbiAgICAgICAgaW5kZXggPSBodG1sLmluZGV4T2YoXCI8XCIpO1xuXG4gICAgICAgIHRleHQgKz0gaW5kZXggPCAwID8gaHRtbCA6IGh0bWwuc3Vic3RyaW5nKDAsIGluZGV4KTtcbiAgICAgICAgaHRtbCA9IGluZGV4IDwgMCA/IFwiXCIgOiBodG1sLnN1YnN0cmluZyhpbmRleCk7XG5cbiAgICAgICAgaWYgKGhhbmRsZXIuY2hhcnMpIGhhbmRsZXIuY2hhcnMoZGVjb2RlRW50aXRpZXModGV4dCkpO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGh0bWwgPSBodG1sLnJlcGxhY2UobmV3IFJlZ0V4cChcIiguKik8XFxcXHMqXFxcXC9cXFxccypcIiArIHN0YWNrLmxhc3QoKSArIFwiW14+XSo+XCIsICdpJyksXG4gICAgICAgIGZ1bmN0aW9uKGFsbCwgdGV4dCkge1xuICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoQ09NTUVOVF9SRUdFWFAsIFwiJDFcIikucmVwbGFjZShDREFUQV9SRUdFWFAsIFwiJDFcIik7XG5cbiAgICAgICAgICBpZiAoaGFuZGxlci5jaGFycykgaGFuZGxlci5jaGFycyhkZWNvZGVFbnRpdGllcyh0ZXh0KSk7XG5cbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH0pO1xuXG4gICAgICBwYXJzZUVuZFRhZyhcIlwiLCBzdGFjay5sYXN0KCkpO1xuICAgIH1cblxuICAgIGlmIChodG1sID09IGxhc3QpIHtcbiAgICAgIHRocm93ICRzYW5pdGl6ZU1pbkVycignYmFkcGFyc2UnLCBcIlRoZSBzYW5pdGl6ZXIgd2FzIHVuYWJsZSB0byBwYXJzZSB0aGUgZm9sbG93aW5nIGJsb2NrIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9mIGh0bWw6IHswfVwiLCBodG1sKTtcbiAgICB9XG4gICAgbGFzdCA9IGh0bWw7XG4gIH1cblxuICAvLyBDbGVhbiB1cCBhbnkgcmVtYWluaW5nIHRhZ3NcbiAgcGFyc2VFbmRUYWcoKTtcblxuICBmdW5jdGlvbiBwYXJzZVN0YXJ0VGFnKHRhZywgdGFnTmFtZSwgcmVzdCwgdW5hcnkpIHtcbiAgICB0YWdOYW1lID0gYW5ndWxhci5sb3dlcmNhc2UodGFnTmFtZSk7XG4gICAgaWYgKGJsb2NrRWxlbWVudHNbIHRhZ05hbWUgXSkge1xuICAgICAgd2hpbGUgKHN0YWNrLmxhc3QoKSAmJiBpbmxpbmVFbGVtZW50c1sgc3RhY2subGFzdCgpIF0pIHtcbiAgICAgICAgcGFyc2VFbmRUYWcoXCJcIiwgc3RhY2subGFzdCgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9uYWxFbmRUYWdFbGVtZW50c1sgdGFnTmFtZSBdICYmIHN0YWNrLmxhc3QoKSA9PSB0YWdOYW1lKSB7XG4gICAgICBwYXJzZUVuZFRhZyhcIlwiLCB0YWdOYW1lKTtcbiAgICB9XG5cbiAgICB1bmFyeSA9IHZvaWRFbGVtZW50c1sgdGFnTmFtZSBdIHx8ICEhdW5hcnk7XG5cbiAgICBpZiAoIXVuYXJ5KVxuICAgICAgc3RhY2sucHVzaCh0YWdOYW1lKTtcblxuICAgIHZhciBhdHRycyA9IHt9O1xuXG4gICAgcmVzdC5yZXBsYWNlKEFUVFJfUkVHRVhQLFxuICAgICAgZnVuY3Rpb24obWF0Y2gsIG5hbWUsIGRvdWJsZVF1b3RlZFZhbHVlLCBzaW5nbGVRdW90ZWRWYWx1ZSwgdW5xdW90ZWRWYWx1ZSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBkb3VibGVRdW90ZWRWYWx1ZVxuICAgICAgICAgIHx8IHNpbmdsZVF1b3RlZFZhbHVlXG4gICAgICAgICAgfHwgdW5xdW90ZWRWYWx1ZVxuICAgICAgICAgIHx8ICcnO1xuXG4gICAgICAgIGF0dHJzW25hbWVdID0gZGVjb2RlRW50aXRpZXModmFsdWUpO1xuICAgIH0pO1xuICAgIGlmIChoYW5kbGVyLnN0YXJ0KSBoYW5kbGVyLnN0YXJ0KHRhZ05hbWUsIGF0dHJzLCB1bmFyeSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUVuZFRhZyh0YWcsIHRhZ05hbWUpIHtcbiAgICB2YXIgcG9zID0gMCwgaTtcbiAgICB0YWdOYW1lID0gYW5ndWxhci5sb3dlcmNhc2UodGFnTmFtZSk7XG4gICAgaWYgKHRhZ05hbWUpXG4gICAgICAvLyBGaW5kIHRoZSBjbG9zZXN0IG9wZW5lZCB0YWcgb2YgdGhlIHNhbWUgdHlwZVxuICAgICAgZm9yIChwb3MgPSBzdGFjay5sZW5ndGggLSAxOyBwb3MgPj0gMDsgcG9zLS0pXG4gICAgICAgIGlmIChzdGFja1sgcG9zIF0gPT0gdGFnTmFtZSlcbiAgICAgICAgICBicmVhaztcblxuICAgIGlmIChwb3MgPj0gMCkge1xuICAgICAgLy8gQ2xvc2UgYWxsIHRoZSBvcGVuIGVsZW1lbnRzLCB1cCB0aGUgc3RhY2tcbiAgICAgIGZvciAoaSA9IHN0YWNrLmxlbmd0aCAtIDE7IGkgPj0gcG9zOyBpLS0pXG4gICAgICAgIGlmIChoYW5kbGVyLmVuZCkgaGFuZGxlci5lbmQoc3RhY2tbIGkgXSk7XG5cbiAgICAgIC8vIFJlbW92ZSB0aGUgb3BlbiBlbGVtZW50cyBmcm9tIHRoZSBzdGFja1xuICAgICAgc3RhY2subGVuZ3RoID0gcG9zO1xuICAgIH1cbiAgfVxufVxuXG52YXIgaGlkZGVuUHJlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwcmVcIik7XG52YXIgc3BhY2VSZSA9IC9eKFxccyopKFtcXHNcXFNdKj8pKFxccyopJC87XG4vKipcbiAqIGRlY29kZXMgYWxsIGVudGl0aWVzIGludG8gcmVndWxhciBzdHJpbmdcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmcgd2l0aCBkZWNvZGVkIGVudGl0aWVzLlxuICovXG5mdW5jdGlvbiBkZWNvZGVFbnRpdGllcyh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7IHJldHVybiAnJzsgfVxuXG4gIC8vIE5vdGU6IElFOCBkb2VzIG5vdCBwcmVzZXJ2ZSBzcGFjZXMgYXQgdGhlIHN0YXJ0L2VuZCBvZiBpbm5lckhUTUxcbiAgLy8gc28gd2UgbXVzdCBjYXB0dXJlIHRoZW0gYW5kIHJlYXR0YWNoIHRoZW0gYWZ0ZXJ3YXJkXG4gIHZhciBwYXJ0cyA9IHNwYWNlUmUuZXhlYyh2YWx1ZSk7XG4gIHZhciBzcGFjZUJlZm9yZSA9IHBhcnRzWzFdO1xuICB2YXIgc3BhY2VBZnRlciA9IHBhcnRzWzNdO1xuICB2YXIgY29udGVudCA9IHBhcnRzWzJdO1xuICBpZiAoY29udGVudCkge1xuICAgIGhpZGRlblByZS5pbm5lckhUTUw9Y29udGVudC5yZXBsYWNlKC88L2csXCImbHQ7XCIpO1xuICAgIC8vIGlubmVyVGV4dCBkZXBlbmRzIG9uIHN0eWxpbmcgYXMgaXQgZG9lc24ndCBkaXNwbGF5IGhpZGRlbiBlbGVtZW50cy5cbiAgICAvLyBUaGVyZWZvcmUsIGl0J3MgYmV0dGVyIHRvIHVzZSB0ZXh0Q29udGVudCBub3QgdG8gY2F1c2UgdW5uZWNlc3NhcnlcbiAgICAvLyByZWZsb3dzLiBIb3dldmVyLCBJRTw5IGRvbid0IHN1cHBvcnQgdGV4dENvbnRlbnQgc28gdGhlIGlubmVyVGV4dFxuICAgIC8vIGZhbGxiYWNrIGlzIG5lY2Vzc2FyeS5cbiAgICBjb250ZW50ID0gJ3RleHRDb250ZW50JyBpbiBoaWRkZW5QcmUgP1xuICAgICAgaGlkZGVuUHJlLnRleHRDb250ZW50IDogaGlkZGVuUHJlLmlubmVyVGV4dDtcbiAgfVxuICByZXR1cm4gc3BhY2VCZWZvcmUgKyBjb250ZW50ICsgc3BhY2VBZnRlcjtcbn1cblxuLyoqXG4gKiBFc2NhcGVzIGFsbCBwb3RlbnRpYWxseSBkYW5nZXJvdXMgY2hhcmFjdGVycywgc28gdGhhdCB0aGVcbiAqIHJlc3VsdGluZyBzdHJpbmcgY2FuIGJlIHNhZmVseSBpbnNlcnRlZCBpbnRvIGF0dHJpYnV0ZSBvclxuICogZWxlbWVudCB0ZXh0LlxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBlc2NhcGVkIHRleHRcbiAqL1xuZnVuY3Rpb24gZW5jb2RlRW50aXRpZXModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLlxuICAgIHJlcGxhY2UoLyYvZywgJyZhbXA7JykuXG4gICAgcmVwbGFjZShTVVJST0dBVEVfUEFJUl9SRUdFWFAsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgaGkgPSB2YWx1ZS5jaGFyQ29kZUF0KDApO1xuICAgICAgdmFyIGxvdyA9IHZhbHVlLmNoYXJDb2RlQXQoMSk7XG4gICAgICByZXR1cm4gJyYjJyArICgoKGhpIC0gMHhEODAwKSAqIDB4NDAwKSArIChsb3cgLSAweERDMDApICsgMHgxMDAwMCkgKyAnOyc7XG4gICAgfSkuXG4gICAgcmVwbGFjZShOT05fQUxQSEFOVU1FUklDX1JFR0VYUCwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiAnJiMnICsgdmFsdWUuY2hhckNvZGVBdCgwKSArICc7JztcbiAgICB9KS5cbiAgICByZXBsYWNlKC88L2csICcmbHQ7JykuXG4gICAgcmVwbGFjZSgvPi9nLCAnJmd0OycpO1xufVxuXG4vKipcbiAqIGNyZWF0ZSBhbiBIVE1ML1hNTCB3cml0ZXIgd2hpY2ggd3JpdGVzIHRvIGJ1ZmZlclxuICogQHBhcmFtIHtBcnJheX0gYnVmIHVzZSBidWYuamFpbignJykgdG8gZ2V0IG91dCBzYW5pdGl6ZWQgaHRtbCBzdHJpbmdcbiAqIEByZXR1cm5zIHtvYmplY3R9IGluIHRoZSBmb3JtIG9mIHtcbiAqICAgICBzdGFydDogZnVuY3Rpb24odGFnLCBhdHRycywgdW5hcnkpIHt9LFxuICogICAgIGVuZDogZnVuY3Rpb24odGFnKSB7fSxcbiAqICAgICBjaGFyczogZnVuY3Rpb24odGV4dCkge30sXG4gKiAgICAgY29tbWVudDogZnVuY3Rpb24odGV4dCkge31cbiAqIH1cbiAqL1xuZnVuY3Rpb24gaHRtbFNhbml0aXplV3JpdGVyKGJ1ZiwgdXJpVmFsaWRhdG9yKSB7XG4gIHZhciBpZ25vcmUgPSBmYWxzZTtcbiAgdmFyIG91dCA9IGFuZ3VsYXIuYmluZChidWYsIGJ1Zi5wdXNoKTtcbiAgcmV0dXJuIHtcbiAgICBzdGFydDogZnVuY3Rpb24odGFnLCBhdHRycywgdW5hcnkpIHtcbiAgICAgIHRhZyA9IGFuZ3VsYXIubG93ZXJjYXNlKHRhZyk7XG4gICAgICBpZiAoIWlnbm9yZSAmJiBzcGVjaWFsRWxlbWVudHNbdGFnXSkge1xuICAgICAgICBpZ25vcmUgPSB0YWc7XG4gICAgICB9XG4gICAgICBpZiAoIWlnbm9yZSAmJiB2YWxpZEVsZW1lbnRzW3RhZ10gPT09IHRydWUpIHtcbiAgICAgICAgb3V0KCc8Jyk7XG4gICAgICAgIG91dCh0YWcpO1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goYXR0cnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICB2YXIgbGtleT1hbmd1bGFyLmxvd2VyY2FzZShrZXkpO1xuICAgICAgICAgIHZhciBpc0ltYWdlID0gKHRhZyA9PT0gJ2ltZycgJiYgbGtleSA9PT0gJ3NyYycpIHx8IChsa2V5ID09PSAnYmFja2dyb3VuZCcpO1xuICAgICAgICAgIGlmICh2YWxpZEF0dHJzW2xrZXldID09PSB0cnVlICYmXG4gICAgICAgICAgICAodXJpQXR0cnNbbGtleV0gIT09IHRydWUgfHwgdXJpVmFsaWRhdG9yKHZhbHVlLCBpc0ltYWdlKSkpIHtcbiAgICAgICAgICAgIG91dCgnICcpO1xuICAgICAgICAgICAgb3V0KGtleSk7XG4gICAgICAgICAgICBvdXQoJz1cIicpO1xuICAgICAgICAgICAgb3V0KGVuY29kZUVudGl0aWVzKHZhbHVlKSk7XG4gICAgICAgICAgICBvdXQoJ1wiJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgb3V0KHVuYXJ5ID8gJy8+JyA6ICc+Jyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBlbmQ6IGZ1bmN0aW9uKHRhZykge1xuICAgICAgICB0YWcgPSBhbmd1bGFyLmxvd2VyY2FzZSh0YWcpO1xuICAgICAgICBpZiAoIWlnbm9yZSAmJiB2YWxpZEVsZW1lbnRzW3RhZ10gPT09IHRydWUpIHtcbiAgICAgICAgICBvdXQoJzwvJyk7XG4gICAgICAgICAgb3V0KHRhZyk7XG4gICAgICAgICAgb3V0KCc+Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZyA9PSBpZ25vcmUpIHtcbiAgICAgICAgICBpZ25vcmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICBjaGFyczogZnVuY3Rpb24oY2hhcnMpIHtcbiAgICAgICAgaWYgKCFpZ25vcmUpIHtcbiAgICAgICAgICBvdXQoZW5jb2RlRW50aXRpZXMoY2hhcnMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9O1xufVxuXG5cbi8vIGRlZmluZSBuZ1Nhbml0aXplIG1vZHVsZSBhbmQgcmVnaXN0ZXIgJHNhbml0aXplIHNlcnZpY2VcbmFuZ3VsYXIubW9kdWxlKCduZ1Nhbml0aXplJywgW10pLnByb3ZpZGVyKCckc2FuaXRpemUnLCAkU2FuaXRpemVQcm92aWRlcik7XG5cbi8qIGdsb2JhbCBzYW5pdGl6ZVRleHQ6IGZhbHNlICovXG5cbi8qKlxuICogQG5nZG9jIGZpbHRlclxuICogQG5hbWUgbGlua3lcbiAqIEBraW5kIGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBGaW5kcyBsaW5rcyBpbiB0ZXh0IGlucHV0IGFuZCB0dXJucyB0aGVtIGludG8gaHRtbCBsaW5rcy4gU3VwcG9ydHMgaHR0cC9odHRwcy9mdHAvbWFpbHRvIGFuZFxuICogcGxhaW4gZW1haWwgYWRkcmVzcyBsaW5rcy5cbiAqXG4gKiBSZXF1aXJlcyB0aGUge0BsaW5rIG5nU2FuaXRpemUgYG5nU2FuaXRpemVgfSBtb2R1bGUgdG8gYmUgaW5zdGFsbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IElucHV0IHRleHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IFdpbmRvdyAoX2JsYW5rfF9zZWxmfF9wYXJlbnR8X3RvcCkgb3IgbmFtZWQgZnJhbWUgdG8gb3BlbiBsaW5rcyBpbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEh0bWwtbGlua2lmaWVkIHRleHQuXG4gKlxuICogQHVzYWdlXG4gICA8c3BhbiBuZy1iaW5kLWh0bWw9XCJsaW5reV9leHByZXNzaW9uIHwgbGlua3lcIj48L3NwYW4+XG4gKlxuICogQGV4YW1wbGVcbiAgIDxleGFtcGxlIG1vZHVsZT1cImxpbmt5RXhhbXBsZVwiIGRlcHM9XCJhbmd1bGFyLXNhbml0aXplLmpzXCI+XG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgPHNjcmlwdD5cbiAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdsaW5reUV4YW1wbGUnLCBbJ25nU2FuaXRpemUnXSlcbiAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcbiAgICAgICAgICAgICAkc2NvcGUuc25pcHBldCA9XG4gICAgICAgICAgICAgICAnUHJldHR5IHRleHQgd2l0aCBzb21lIGxpbmtzOlxcbicrXG4gICAgICAgICAgICAgICAnaHR0cDovL2FuZ3VsYXJqcy5vcmcvLFxcbicrXG4gICAgICAgICAgICAgICAnbWFpbHRvOnVzQHNvbWV3aGVyZS5vcmcsXFxuJytcbiAgICAgICAgICAgICAgICdhbm90aGVyQHNvbWV3aGVyZS5vcmcsXFxuJytcbiAgICAgICAgICAgICAgICdhbmQgb25lIG1vcmU6IGZ0cDovLzEyNy4wLjAuMS8uJztcbiAgICAgICAgICAgICAkc2NvcGUuc25pcHBldFdpdGhUYXJnZXQgPSAnaHR0cDovL2FuZ3VsYXJqcy5vcmcvJztcbiAgICAgICAgICAgfV0pO1xuICAgICAgIDwvc2NyaXB0PlxuICAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XG4gICAgICAgU25pcHBldDogPHRleHRhcmVhIG5nLW1vZGVsPVwic25pcHBldFwiIGNvbHM9XCI2MFwiIHJvd3M9XCIzXCI+PC90ZXh0YXJlYT5cbiAgICAgICA8dGFibGU+XG4gICAgICAgICA8dHI+XG4gICAgICAgICAgIDx0ZD5GaWx0ZXI8L3RkPlxuICAgICAgICAgICA8dGQ+U291cmNlPC90ZD5cbiAgICAgICAgICAgPHRkPlJlbmRlcmVkPC90ZD5cbiAgICAgICAgIDwvdHI+XG4gICAgICAgICA8dHIgaWQ9XCJsaW5reS1maWx0ZXJcIj5cbiAgICAgICAgICAgPHRkPmxpbmt5IGZpbHRlcjwvdGQ+XG4gICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICA8cHJlPiZsdDtkaXYgbmctYmluZC1odG1sPVwic25pcHBldCB8IGxpbmt5XCImZ3Q7PGJyPiZsdDsvZGl2Jmd0OzwvcHJlPlxuICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgPGRpdiBuZy1iaW5kLWh0bWw9XCJzbmlwcGV0IHwgbGlua3lcIj48L2Rpdj5cbiAgICAgICAgICAgPC90ZD5cbiAgICAgICAgIDwvdHI+XG4gICAgICAgICA8dHIgaWQ9XCJsaW5reS10YXJnZXRcIj5cbiAgICAgICAgICA8dGQ+bGlua3kgdGFyZ2V0PC90ZD5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8cHJlPiZsdDtkaXYgbmctYmluZC1odG1sPVwic25pcHBldFdpdGhUYXJnZXQgfCBsaW5reTonX2JsYW5rJ1wiJmd0Ozxicj4mbHQ7L2RpdiZndDs8L3ByZT5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIDxkaXYgbmctYmluZC1odG1sPVwic25pcHBldFdpdGhUYXJnZXQgfCBsaW5reTonX2JsYW5rJ1wiPjwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICA8L3RyPlxuICAgICAgICAgPHRyIGlkPVwiZXNjYXBlZC1odG1sXCI+XG4gICAgICAgICAgIDx0ZD5ubyBmaWx0ZXI8L3RkPlxuICAgICAgICAgICA8dGQ+PHByZT4mbHQ7ZGl2IG5nLWJpbmQ9XCJzbmlwcGV0XCImZ3Q7PGJyPiZsdDsvZGl2Jmd0OzwvcHJlPjwvdGQ+XG4gICAgICAgICAgIDx0ZD48ZGl2IG5nLWJpbmQ9XCJzbmlwcGV0XCI+PC9kaXY+PC90ZD5cbiAgICAgICAgIDwvdHI+XG4gICAgICAgPC90YWJsZT5cbiAgICAgPC9maWxlPlxuICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gICAgICAgaXQoJ3Nob3VsZCBsaW5raWZ5IHRoZSBzbmlwcGV0IHdpdGggdXJscycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2xpbmt5LWZpbHRlcicpKS5lbGVtZW50KGJ5LmJpbmRpbmcoJ3NuaXBwZXQgfCBsaW5reScpKS5nZXRUZXh0KCkpLlxuICAgICAgICAgICAgIHRvQmUoJ1ByZXR0eSB0ZXh0IHdpdGggc29tZSBsaW5rczogaHR0cDovL2FuZ3VsYXJqcy5vcmcvLCB1c0Bzb21ld2hlcmUub3JnLCAnICtcbiAgICAgICAgICAgICAgICAgICdhbm90aGVyQHNvbWV3aGVyZS5vcmcsIGFuZCBvbmUgbW9yZTogZnRwOi8vMTI3LjAuMC4xLy4nKTtcbiAgICAgICAgIGV4cGVjdChlbGVtZW50LmFsbChieS5jc3MoJyNsaW5reS1maWx0ZXIgYScpKS5jb3VudCgpKS50b0VxdWFsKDQpO1xuICAgICAgIH0pO1xuXG4gICAgICAgaXQoJ3Nob3VsZCBub3QgbGlua2lmeSBzbmlwcGV0IHdpdGhvdXQgdGhlIGxpbmt5IGZpbHRlcicsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2VzY2FwZWQtaHRtbCcpKS5lbGVtZW50KGJ5LmJpbmRpbmcoJ3NuaXBwZXQnKSkuZ2V0VGV4dCgpKS5cbiAgICAgICAgICAgICB0b0JlKCdQcmV0dHkgdGV4dCB3aXRoIHNvbWUgbGlua3M6IGh0dHA6Ly9hbmd1bGFyanMub3JnLywgbWFpbHRvOnVzQHNvbWV3aGVyZS5vcmcsICcgK1xuICAgICAgICAgICAgICAgICAgJ2Fub3RoZXJAc29tZXdoZXJlLm9yZywgYW5kIG9uZSBtb3JlOiBmdHA6Ly8xMjcuMC4wLjEvLicpO1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnQuYWxsKGJ5LmNzcygnI2VzY2FwZWQtaHRtbCBhJykpLmNvdW50KCkpLnRvRXF1YWwoMCk7XG4gICAgICAgfSk7XG5cbiAgICAgICBpdCgnc2hvdWxkIHVwZGF0ZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgZWxlbWVudChieS5tb2RlbCgnc25pcHBldCcpKS5jbGVhcigpO1xuICAgICAgICAgZWxlbWVudChieS5tb2RlbCgnc25pcHBldCcpKS5zZW5kS2V5cygnbmV3IGh0dHA6Ly9saW5rLicpO1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2xpbmt5LWZpbHRlcicpKS5lbGVtZW50KGJ5LmJpbmRpbmcoJ3NuaXBwZXQgfCBsaW5reScpKS5nZXRUZXh0KCkpLlxuICAgICAgICAgICAgIHRvQmUoJ25ldyBodHRwOi8vbGluay4nKTtcbiAgICAgICAgIGV4cGVjdChlbGVtZW50LmFsbChieS5jc3MoJyNsaW5reS1maWx0ZXIgYScpKS5jb3VudCgpKS50b0VxdWFsKDEpO1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2VzY2FwZWQtaHRtbCcpKS5lbGVtZW50KGJ5LmJpbmRpbmcoJ3NuaXBwZXQnKSkuZ2V0VGV4dCgpKVxuICAgICAgICAgICAgIC50b0JlKCduZXcgaHR0cDovL2xpbmsuJyk7XG4gICAgICAgfSk7XG5cbiAgICAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCB0aGUgdGFyZ2V0IHByb3BlcnR5JywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdsaW5reS10YXJnZXQnKSkuXG4gICAgICAgICAgICBlbGVtZW50KGJ5LmJpbmRpbmcoXCJzbmlwcGV0V2l0aFRhcmdldCB8IGxpbmt5OidfYmxhbmsnXCIpKS5nZXRUZXh0KCkpLlxuICAgICAgICAgICAgdG9CZSgnaHR0cDovL2FuZ3VsYXJqcy5vcmcvJyk7XG4gICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnI2xpbmt5LXRhcmdldCBhJykpLmdldEF0dHJpYnV0ZSgndGFyZ2V0JykpLnRvRXF1YWwoJ19ibGFuaycpO1xuICAgICAgIH0pO1xuICAgICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG4gKi9cbmFuZ3VsYXIubW9kdWxlKCduZ1Nhbml0aXplJykuZmlsdGVyKCdsaW5reScsIFsnJHNhbml0aXplJywgZnVuY3Rpb24oJHNhbml0aXplKSB7XG4gIHZhciBMSU5LWV9VUkxfUkVHRVhQID1cbiAgICAgICAgLygoZnRwfGh0dHBzPyk6XFwvXFwvfChtYWlsdG86KT9bQS1aYS16MC05Ll8lKy1dK0ApXFxTKlteXFxzLjssKCl7fTw+XCJdLyxcbiAgICAgIE1BSUxUT19SRUdFWFAgPSAvXm1haWx0bzovO1xuXG4gIHJldHVybiBmdW5jdGlvbih0ZXh0LCB0YXJnZXQpIHtcbiAgICBpZiAoIXRleHQpIHJldHVybiB0ZXh0O1xuICAgIHZhciBtYXRjaDtcbiAgICB2YXIgcmF3ID0gdGV4dDtcbiAgICB2YXIgaHRtbCA9IFtdO1xuICAgIHZhciB1cmw7XG4gICAgdmFyIGk7XG4gICAgd2hpbGUgKChtYXRjaCA9IHJhdy5tYXRjaChMSU5LWV9VUkxfUkVHRVhQKSkpIHtcbiAgICAgIC8vIFdlIGNhbiBub3QgZW5kIGluIHRoZXNlIGFzIHRoZXkgYXJlIHNvbWV0aW1lcyBmb3VuZCBhdCB0aGUgZW5kIG9mIHRoZSBzZW50ZW5jZVxuICAgICAgdXJsID0gbWF0Y2hbMF07XG4gICAgICAvLyBpZiB3ZSBkaWQgbm90IG1hdGNoIGZ0cC9odHRwL21haWx0byB0aGVuIGFzc3VtZSBtYWlsdG9cbiAgICAgIGlmIChtYXRjaFsyXSA9PSBtYXRjaFszXSkgdXJsID0gJ21haWx0bzonICsgdXJsO1xuICAgICAgaSA9IG1hdGNoLmluZGV4O1xuICAgICAgYWRkVGV4dChyYXcuc3Vic3RyKDAsIGkpKTtcbiAgICAgIGFkZExpbmsodXJsLCBtYXRjaFswXS5yZXBsYWNlKE1BSUxUT19SRUdFWFAsICcnKSk7XG4gICAgICByYXcgPSByYXcuc3Vic3RyaW5nKGkgKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgIH1cbiAgICBhZGRUZXh0KHJhdyk7XG4gICAgcmV0dXJuICRzYW5pdGl6ZShodG1sLmpvaW4oJycpKTtcblxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dCkge1xuICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGh0bWwucHVzaChzYW5pdGl6ZVRleHQodGV4dCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZExpbmsodXJsLCB0ZXh0KSB7XG4gICAgICBodG1sLnB1c2goJzxhICcpO1xuICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKHRhcmdldCkpIHtcbiAgICAgICAgaHRtbC5wdXNoKCd0YXJnZXQ9XCInKTtcbiAgICAgICAgaHRtbC5wdXNoKHRhcmdldCk7XG4gICAgICAgIGh0bWwucHVzaCgnXCIgJyk7XG4gICAgICB9XG4gICAgICBodG1sLnB1c2goJ2hyZWY9XCInKTtcbiAgICAgIGh0bWwucHVzaCh1cmwpO1xuICAgICAgaHRtbC5wdXNoKCdcIj4nKTtcbiAgICAgIGFkZFRleHQodGV4dCk7XG4gICAgICBodG1sLnB1c2goJzwvYT4nKTtcbiAgICB9XG4gIH07XG59XSk7XG5cblxufSkod2luZG93LCB3aW5kb3cuYW5ndWxhcik7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFuZ3VsYXItc2FuaXRpemUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiYW5ndWxhci1zYW5pdGl6ZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZSBBbmd1bGFySlMgdjEuMy4zXHJcbiAqIChjKSAyMDEwLTIwMTQgR29vZ2xlLCBJbmMuIGh0dHA6Ly9hbmd1bGFyanMub3JnXHJcbiAqIExpY2Vuc2U6IE1JVFxyXG4gKi9cclxuKGZ1bmN0aW9uKHdpbmRvdywgYW5ndWxhciwgdW5kZWZpbmVkKSB7J3VzZSBzdHJpY3QnO1xyXG5cclxudmFyICRzYW5pdGl6ZU1pbkVyciA9IGFuZ3VsYXIuJCRtaW5FcnIoJyRzYW5pdGl6ZScpO1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBtb2R1bGVcclxuICogQG5hbWUgbmdTYW5pdGl6ZVxyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogIyBuZ1Nhbml0aXplXHJcbiAqXHJcbiAqIFRoZSBgbmdTYW5pdGl6ZWAgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgdG8gc2FuaXRpemUgSFRNTC5cclxuICpcclxuICpcclxuICogPGRpdiBkb2MtbW9kdWxlLWNvbXBvbmVudHM9XCJuZ1Nhbml0aXplXCI+PC9kaXY+XHJcbiAqXHJcbiAqIFNlZSB7QGxpbmsgbmdTYW5pdGl6ZS4kc2FuaXRpemUgYCRzYW5pdGl6ZWB9IGZvciB1c2FnZS5cclxuICovXHJcblxyXG4vKlxyXG4gKiBIVE1MIFBhcnNlciBCeSBNaXNrbyBIZXZlcnkgKG1pc2tvQGhldmVyeS5jb20pXHJcbiAqIGJhc2VkIG9uOiAgSFRNTCBQYXJzZXIgQnkgSm9obiBSZXNpZyAoZWpvaG4ub3JnKVxyXG4gKiBPcmlnaW5hbCBjb2RlIGJ5IEVyaWsgQXJ2aWRzc29uLCBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlXHJcbiAqIGh0dHA6Ly9lcmlrLmVhZS5uZXQvc2ltcGxlaHRtbHBhcnNlci9zaW1wbGVodG1scGFyc2VyLmpzXHJcbiAqXHJcbiAqIC8vIFVzZSBsaWtlIHNvOlxyXG4gKiBodG1sUGFyc2VyKGh0bWxTdHJpbmcsIHtcclxuICogICAgIHN0YXJ0OiBmdW5jdGlvbih0YWcsIGF0dHJzLCB1bmFyeSkge30sXHJcbiAqICAgICBlbmQ6IGZ1bmN0aW9uKHRhZykge30sXHJcbiAqICAgICBjaGFyczogZnVuY3Rpb24odGV4dCkge30sXHJcbiAqICAgICBjb21tZW50OiBmdW5jdGlvbih0ZXh0KSB7fVxyXG4gKiB9KTtcclxuICpcclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBzZXJ2aWNlXHJcbiAqIEBuYW1lICRzYW5pdGl6ZVxyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogICBUaGUgaW5wdXQgaXMgc2FuaXRpemVkIGJ5IHBhcnNpbmcgdGhlIEhUTUwgaW50byB0b2tlbnMuIEFsbCBzYWZlIHRva2VucyAoZnJvbSBhIHdoaXRlbGlzdCkgYXJlXHJcbiAqICAgdGhlbiBzZXJpYWxpemVkIGJhY2sgdG8gcHJvcGVybHkgZXNjYXBlZCBodG1sIHN0cmluZy4gVGhpcyBtZWFucyB0aGF0IG5vIHVuc2FmZSBpbnB1dCBjYW4gbWFrZVxyXG4gKiAgIGl0IGludG8gdGhlIHJldHVybmVkIHN0cmluZywgaG93ZXZlciwgc2luY2Ugb3VyIHBhcnNlciBpcyBtb3JlIHN0cmljdCB0aGFuIGEgdHlwaWNhbCBicm93c2VyXHJcbiAqICAgcGFyc2VyLCBpdCdzIHBvc3NpYmxlIHRoYXQgc29tZSBvYnNjdXJlIGlucHV0LCB3aGljaCB3b3VsZCBiZSByZWNvZ25pemVkIGFzIHZhbGlkIEhUTUwgYnkgYVxyXG4gKiAgIGJyb3dzZXIsIHdvbid0IG1ha2UgaXQgdGhyb3VnaCB0aGUgc2FuaXRpemVyLiBUaGUgaW5wdXQgbWF5IGFsc28gY29udGFpbiBTVkcgbWFya3VwLlxyXG4gKiAgIFRoZSB3aGl0ZWxpc3QgaXMgY29uZmlndXJlZCB1c2luZyB0aGUgZnVuY3Rpb25zIGBhSHJlZlNhbml0aXphdGlvbldoaXRlbGlzdGAgYW5kXHJcbiAqICAgYGltZ1NyY1Nhbml0aXphdGlvbldoaXRlbGlzdGAgb2Yge0BsaW5rIG5nLiRjb21waWxlUHJvdmlkZXIgYCRjb21waWxlUHJvdmlkZXJgfS5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgSFRNTCBpbnB1dC5cclxuICogQHJldHVybnMge3N0cmluZ30gU2FuaXRpemVkIEhUTUwuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgIDxleGFtcGxlIG1vZHVsZT1cInNhbml0aXplRXhhbXBsZVwiIGRlcHM9XCJhbmd1bGFyLXNhbml0aXplLmpzXCI+XHJcbiAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgPHNjcmlwdD5cclxuICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ3Nhbml0aXplRXhhbXBsZScsIFsnbmdTYW5pdGl6ZSddKVxyXG4gICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRzY2UnLCBmdW5jdGlvbigkc2NvcGUsICRzY2UpIHtcclxuICAgICAgICAgICAgICRzY29wZS5zbmlwcGV0ID1cclxuICAgICAgICAgICAgICAgJzxwIHN0eWxlPVwiY29sb3I6Ymx1ZVwiPmFuIGh0bWxcXG4nICtcclxuICAgICAgICAgICAgICAgJzxlbSBvbm1vdXNlb3Zlcj1cInRoaXMudGV4dENvbnRlbnQ9XFwnUFdOM0QhXFwnXCI+Y2xpY2sgaGVyZTwvZW0+XFxuJyArXHJcbiAgICAgICAgICAgICAgICdzbmlwcGV0PC9wPic7XHJcbiAgICAgICAgICAgICAkc2NvcGUuZGVsaWJlcmF0ZWx5VHJ1c3REYW5nZXJvdXNTbmlwcGV0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgIHJldHVybiAkc2NlLnRydXN0QXNIdG1sKCRzY29wZS5zbmlwcGV0KTtcclxuICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgfV0pO1xyXG4gICAgIDwvc2NyaXB0PlxyXG4gICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XHJcbiAgICAgICAgU25pcHBldDogPHRleHRhcmVhIG5nLW1vZGVsPVwic25pcHBldFwiIGNvbHM9XCI2MFwiIHJvd3M9XCIzXCI+PC90ZXh0YXJlYT5cclxuICAgICAgIDx0YWJsZT5cclxuICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgIDx0ZD5EaXJlY3RpdmU8L3RkPlxyXG4gICAgICAgICAgIDx0ZD5Ib3c8L3RkPlxyXG4gICAgICAgICAgIDx0ZD5Tb3VyY2U8L3RkPlxyXG4gICAgICAgICAgIDx0ZD5SZW5kZXJlZDwvdGQ+XHJcbiAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgIDx0ciBpZD1cImJpbmQtaHRtbC13aXRoLXNhbml0aXplXCI+XHJcbiAgICAgICAgICAgPHRkPm5nLWJpbmQtaHRtbDwvdGQ+XHJcbiAgICAgICAgICAgPHRkPkF1dG9tYXRpY2FsbHkgdXNlcyAkc2FuaXRpemU8L3RkPlxyXG4gICAgICAgICAgIDx0ZD48cHJlPiZsdDtkaXYgbmctYmluZC1odG1sPVwic25pcHBldFwiJmd0Ozxici8+Jmx0Oy9kaXYmZ3Q7PC9wcmU+PC90ZD5cclxuICAgICAgICAgICA8dGQ+PGRpdiBuZy1iaW5kLWh0bWw9XCJzbmlwcGV0XCI+PC9kaXY+PC90ZD5cclxuICAgICAgICAgPC90cj5cclxuICAgICAgICAgPHRyIGlkPVwiYmluZC1odG1sLXdpdGgtdHJ1c3RcIj5cclxuICAgICAgICAgICA8dGQ+bmctYmluZC1odG1sPC90ZD5cclxuICAgICAgICAgICA8dGQ+QnlwYXNzICRzYW5pdGl6ZSBieSBleHBsaWNpdGx5IHRydXN0aW5nIHRoZSBkYW5nZXJvdXMgdmFsdWU8L3RkPlxyXG4gICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICA8cHJlPiZsdDtkaXYgbmctYmluZC1odG1sPVwiZGVsaWJlcmF0ZWx5VHJ1c3REYW5nZXJvdXNTbmlwcGV0KClcIiZndDtcclxuJmx0Oy9kaXYmZ3Q7PC9wcmU+XHJcbiAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICA8dGQ+PGRpdiBuZy1iaW5kLWh0bWw9XCJkZWxpYmVyYXRlbHlUcnVzdERhbmdlcm91c1NuaXBwZXQoKVwiPjwvZGl2PjwvdGQ+XHJcbiAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgIDx0ciBpZD1cImJpbmQtZGVmYXVsdFwiPlxyXG4gICAgICAgICAgIDx0ZD5uZy1iaW5kPC90ZD5cclxuICAgICAgICAgICA8dGQ+QXV0b21hdGljYWxseSBlc2NhcGVzPC90ZD5cclxuICAgICAgICAgICA8dGQ+PHByZT4mbHQ7ZGl2IG5nLWJpbmQ9XCJzbmlwcGV0XCImZ3Q7PGJyLz4mbHQ7L2RpdiZndDs8L3ByZT48L3RkPlxyXG4gICAgICAgICAgIDx0ZD48ZGl2IG5nLWJpbmQ9XCJzbmlwcGV0XCI+PC9kaXY+PC90ZD5cclxuICAgICAgICAgPC90cj5cclxuICAgICAgIDwvdGFibGU+XHJcbiAgICAgICA8L2Rpdj5cclxuICAgPC9maWxlPlxyXG4gICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgaXQoJ3Nob3VsZCBzYW5pdGl6ZSB0aGUgaHRtbCBzbmlwcGV0IGJ5IGRlZmF1bHQnLCBmdW5jdGlvbigpIHtcclxuICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnI2JpbmQtaHRtbC13aXRoLXNhbml0aXplIGRpdicpKS5nZXRJbm5lckh0bWwoKSkuXHJcbiAgICAgICAgIHRvQmUoJzxwPmFuIGh0bWxcXG48ZW0+Y2xpY2sgaGVyZTwvZW0+XFxuc25pcHBldDwvcD4nKTtcclxuICAgICB9KTtcclxuXHJcbiAgICAgaXQoJ3Nob3VsZCBpbmxpbmUgcmF3IHNuaXBwZXQgaWYgYm91bmQgdG8gYSB0cnVzdGVkIHZhbHVlJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICBleHBlY3QoZWxlbWVudChieS5jc3MoJyNiaW5kLWh0bWwtd2l0aC10cnVzdCBkaXYnKSkuZ2V0SW5uZXJIdG1sKCkpLlxyXG4gICAgICAgICB0b0JlKFwiPHAgc3R5bGU9XFxcImNvbG9yOmJsdWVcXFwiPmFuIGh0bWxcXG5cIiArXHJcbiAgICAgICAgICAgICAgXCI8ZW0gb25tb3VzZW92ZXI9XFxcInRoaXMudGV4dENvbnRlbnQ9J1BXTjNEISdcXFwiPmNsaWNrIGhlcmU8L2VtPlxcblwiICtcclxuICAgICAgICAgICAgICBcInNuaXBwZXQ8L3A+XCIpO1xyXG4gICAgIH0pO1xyXG5cclxuICAgICBpdCgnc2hvdWxkIGVzY2FwZSBzbmlwcGV0IHdpdGhvdXQgYW55IGZpbHRlcicsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuY3NzKCcjYmluZC1kZWZhdWx0IGRpdicpKS5nZXRJbm5lckh0bWwoKSkuXHJcbiAgICAgICAgIHRvQmUoXCImbHQ7cCBzdHlsZT1cXFwiY29sb3I6Ymx1ZVxcXCImZ3Q7YW4gaHRtbFxcblwiICtcclxuICAgICAgICAgICAgICBcIiZsdDtlbSBvbm1vdXNlb3Zlcj1cXFwidGhpcy50ZXh0Q29udGVudD0nUFdOM0QhJ1xcXCImZ3Q7Y2xpY2sgaGVyZSZsdDsvZW0mZ3Q7XFxuXCIgK1xyXG4gICAgICAgICAgICAgIFwic25pcHBldCZsdDsvcCZndDtcIik7XHJcbiAgICAgfSk7XHJcblxyXG4gICAgIGl0KCdzaG91bGQgdXBkYXRlJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdzbmlwcGV0JykpLmNsZWFyKCk7XHJcbiAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdzbmlwcGV0JykpLnNlbmRLZXlzKCduZXcgPGIgb25jbGljaz1cImFsZXJ0KDEpXCI+dGV4dDwvYj4nKTtcclxuICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnI2JpbmQtaHRtbC13aXRoLXNhbml0aXplIGRpdicpKS5nZXRJbm5lckh0bWwoKSkuXHJcbiAgICAgICAgIHRvQmUoJ25ldyA8Yj50ZXh0PC9iPicpO1xyXG4gICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuY3NzKCcjYmluZC1odG1sLXdpdGgtdHJ1c3QgZGl2JykpLmdldElubmVySHRtbCgpKS50b0JlKFxyXG4gICAgICAgICAnbmV3IDxiIG9uY2xpY2s9XCJhbGVydCgxKVwiPnRleHQ8L2I+Jyk7XHJcbiAgICAgICBleHBlY3QoZWxlbWVudChieS5jc3MoJyNiaW5kLWRlZmF1bHQgZGl2JykpLmdldElubmVySHRtbCgpKS50b0JlKFxyXG4gICAgICAgICBcIm5ldyAmbHQ7YiBvbmNsaWNrPVxcXCJhbGVydCgxKVxcXCImZ3Q7dGV4dCZsdDsvYiZndDtcIik7XHJcbiAgICAgfSk7XHJcbiAgIDwvZmlsZT5cclxuICAgPC9leGFtcGxlPlxyXG4gKi9cclxuZnVuY3Rpb24gJFNhbml0aXplUHJvdmlkZXIoKSB7XHJcbiAgdGhpcy4kZ2V0ID0gWyckJHNhbml0aXplVXJpJywgZnVuY3Rpb24oJCRzYW5pdGl6ZVVyaSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGh0bWwpIHtcclxuICAgICAgdmFyIGJ1ZiA9IFtdO1xyXG4gICAgICBodG1sUGFyc2VyKGh0bWwsIGh0bWxTYW5pdGl6ZVdyaXRlcihidWYsIGZ1bmN0aW9uKHVyaSwgaXNJbWFnZSkge1xyXG4gICAgICAgIHJldHVybiAhL151bnNhZmUvLnRlc3QoJCRzYW5pdGl6ZVVyaSh1cmksIGlzSW1hZ2UpKTtcclxuICAgICAgfSkpO1xyXG4gICAgICByZXR1cm4gYnVmLmpvaW4oJycpO1xyXG4gICAgfTtcclxuICB9XTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2FuaXRpemVUZXh0KGNoYXJzKSB7XHJcbiAgdmFyIGJ1ZiA9IFtdO1xyXG4gIHZhciB3cml0ZXIgPSBodG1sU2FuaXRpemVXcml0ZXIoYnVmLCBhbmd1bGFyLm5vb3ApO1xyXG4gIHdyaXRlci5jaGFycyhjaGFycyk7XHJcbiAgcmV0dXJuIGJ1Zi5qb2luKCcnKTtcclxufVxyXG5cclxuXHJcbi8vIFJlZ3VsYXIgRXhwcmVzc2lvbnMgZm9yIHBhcnNpbmcgdGFncyBhbmQgYXR0cmlidXRlc1xyXG52YXIgU1RBUlRfVEFHX1JFR0VYUCA9XHJcbiAgICAgICAvXjwoKD86W2EtekEtWl0pW1xcdzotXSopKCg/OlxccytbXFx3Oi1dKyg/Olxccyo9XFxzKig/Oig/OlwiW15cIl0qXCIpfCg/OidbXiddKicpfFtePlxcc10rKSk/KSopXFxzKihcXC8/KVxccyooPj8pLyxcclxuICBFTkRfVEFHX1JFR0VYUCA9IC9ePFxcL1xccyooW1xcdzotXSspW14+XSo+LyxcclxuICBBVFRSX1JFR0VYUCA9IC8oW1xcdzotXSspKD86XFxzKj1cXHMqKD86KD86XCIoKD86W15cIl0pKilcIil8KD86JygoPzpbXiddKSopJyl8KFtePlxcc10rKSkpPy9nLFxyXG4gIEJFR0lOX1RBR19SRUdFWFAgPSAvXjwvLFxyXG4gIEJFR0lOR19FTkRfVEFHRV9SRUdFWFAgPSAvXjxcXC8vLFxyXG4gIENPTU1FTlRfUkVHRVhQID0gLzwhLS0oLio/KS0tPi9nLFxyXG4gIERPQ1RZUEVfUkVHRVhQID0gLzwhRE9DVFlQRShbXj5dKj8pPi9pLFxyXG4gIENEQVRBX1JFR0VYUCA9IC88IVxcW0NEQVRBXFxbKC4qPyldXT4vZyxcclxuICBTVVJST0dBVEVfUEFJUl9SRUdFWFAgPSAvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXS9nLFxyXG4gIC8vIE1hdGNoIGV2ZXJ5dGhpbmcgb3V0c2lkZSBvZiBub3JtYWwgY2hhcnMgYW5kIFwiIChxdW90ZSBjaGFyYWN0ZXIpXHJcbiAgTk9OX0FMUEhBTlVNRVJJQ19SRUdFWFAgPSAvKFteXFwjLX58IHwhXSkvZztcclxuXHJcblxyXG4vLyBHb29kIHNvdXJjZSBvZiBpbmZvIGFib3V0IGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzXHJcbi8vIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCNzZW1hbnRpY3NcclxuLy8gaHR0cDovL3NpbW9uLmh0bWw1Lm9yZy9odG1sLWVsZW1lbnRzXHJcblxyXG4vLyBTYWZlIFZvaWQgRWxlbWVudHMgLSBIVE1MNVxyXG4vLyBodHRwOi8vZGV2LnczLm9yZy9odG1sNS9zcGVjL092ZXJ2aWV3Lmh0bWwjdm9pZC1lbGVtZW50c1xyXG52YXIgdm9pZEVsZW1lbnRzID0gbWFrZU1hcChcImFyZWEsYnIsY29sLGhyLGltZyx3YnJcIik7XHJcblxyXG4vLyBFbGVtZW50cyB0aGF0IHlvdSBjYW4sIGludGVudGlvbmFsbHksIGxlYXZlIG9wZW4gKGFuZCB3aGljaCBjbG9zZSB0aGVtc2VsdmVzKVxyXG4vLyBodHRwOi8vZGV2LnczLm9yZy9odG1sNS9zcGVjL092ZXJ2aWV3Lmh0bWwjb3B0aW9uYWwtdGFnc1xyXG52YXIgb3B0aW9uYWxFbmRUYWdCbG9ja0VsZW1lbnRzID0gbWFrZU1hcChcImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHJcIiksXHJcbiAgICBvcHRpb25hbEVuZFRhZ0lubGluZUVsZW1lbnRzID0gbWFrZU1hcChcInJwLHJ0XCIpLFxyXG4gICAgb3B0aW9uYWxFbmRUYWdFbGVtZW50cyA9IGFuZ3VsYXIuZXh0ZW5kKHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsRW5kVGFnSW5saW5lRWxlbWVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxFbmRUYWdCbG9ja0VsZW1lbnRzKTtcclxuXHJcbi8vIFNhZmUgQmxvY2sgRWxlbWVudHMgLSBIVE1MNVxyXG52YXIgYmxvY2tFbGVtZW50cyA9IGFuZ3VsYXIuZXh0ZW5kKHt9LCBvcHRpb25hbEVuZFRhZ0Jsb2NrRWxlbWVudHMsIG1ha2VNYXAoXCJhZGRyZXNzLGFydGljbGUsXCIgK1xyXG4gICAgICAgIFwiYXNpZGUsYmxvY2txdW90ZSxjYXB0aW9uLGNlbnRlcixkZWwsZGlyLGRpdixkbCxmaWd1cmUsZmlnY2FwdGlvbixmb290ZXIsaDEsaDIsaDMsaDQsaDUsXCIgK1xyXG4gICAgICAgIFwiaDYsaGVhZGVyLGhncm91cCxocixpbnMsbWFwLG1lbnUsbmF2LG9sLHByZSxzY3JpcHQsc2VjdGlvbix0YWJsZSx1bFwiKSk7XHJcblxyXG4vLyBJbmxpbmUgRWxlbWVudHMgLSBIVE1MNVxyXG52YXIgaW5saW5lRWxlbWVudHMgPSBhbmd1bGFyLmV4dGVuZCh7fSwgb3B0aW9uYWxFbmRUYWdJbmxpbmVFbGVtZW50cywgbWFrZU1hcChcImEsYWJicixhY3JvbnltLGIsXCIgK1xyXG4gICAgICAgIFwiYmRpLGJkbyxiaWcsYnIsY2l0ZSxjb2RlLGRlbCxkZm4sZW0sZm9udCxpLGltZyxpbnMsa2JkLGxhYmVsLG1hcCxtYXJrLHEscnVieSxycCxydCxzLFwiICtcclxuICAgICAgICBcInNhbXAsc21hbGwsc3BhbixzdHJpa2Usc3Ryb25nLHN1YixzdXAsdGltZSx0dCx1LHZhclwiKSk7XHJcblxyXG4vLyBTVkcgRWxlbWVudHNcclxuLy8gaHR0cHM6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9TYW5pdGl6YXRpb25fcnVsZXMjc3ZnX0VsZW1lbnRzXHJcbnZhciBzdmdFbGVtZW50cyA9IG1ha2VNYXAoXCJhbmltYXRlLGFuaW1hdGVDb2xvcixhbmltYXRlTW90aW9uLGFuaW1hdGVUcmFuc2Zvcm0sY2lyY2xlLGRlZnMsXCIgK1xyXG4gICAgICAgIFwiZGVzYyxlbGxpcHNlLGZvbnQtZmFjZSxmb250LWZhY2UtbmFtZSxmb250LWZhY2Utc3JjLGcsZ2x5cGgsaGtlcm4saW1hZ2UsbGluZWFyR3JhZGllbnQsXCIgK1xyXG4gICAgICAgIFwibGluZSxtYXJrZXIsbWV0YWRhdGEsbWlzc2luZy1nbHlwaCxtcGF0aCxwYXRoLHBvbHlnb24scG9seWxpbmUscmFkaWFsR3JhZGllbnQscmVjdCxzZXQsXCIgK1xyXG4gICAgICAgIFwic3RvcCxzdmcsc3dpdGNoLHRleHQsdGl0bGUsdHNwYW4sdXNlXCIpO1xyXG5cclxuLy8gU3BlY2lhbCBFbGVtZW50cyAoY2FuIGNvbnRhaW4gYW55dGhpbmcpXHJcbnZhciBzcGVjaWFsRWxlbWVudHMgPSBtYWtlTWFwKFwic2NyaXB0LHN0eWxlXCIpO1xyXG5cclxudmFyIHZhbGlkRWxlbWVudHMgPSBhbmd1bGFyLmV4dGVuZCh7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkRWxlbWVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tFbGVtZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVFbGVtZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbEVuZFRhZ0VsZW1lbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Z0VsZW1lbnRzKTtcclxuXHJcbi8vQXR0cmlidXRlcyB0aGF0IGhhdmUgaHJlZiBhbmQgaGVuY2UgbmVlZCB0byBiZSBzYW5pdGl6ZWRcclxudmFyIHVyaUF0dHJzID0gbWFrZU1hcChcImJhY2tncm91bmQsY2l0ZSxocmVmLGxvbmdkZXNjLHNyYyx1c2VtYXAseGxpbms6aHJlZlwiKTtcclxuXHJcbnZhciBodG1sQXR0cnMgPSBtYWtlTWFwKCdhYmJyLGFsaWduLGFsdCxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLCcgK1xyXG4gICAgJ2NvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvb3JkcyxkaXIsZmFjZSxoZWFkZXJzLGhlaWdodCxocmVmbGFuZyxoc3BhY2UsJyArXHJcbiAgICAnaXNtYXAsbGFuZyxsYW5ndWFnZSxub2hyZWYsbm93cmFwLHJlbCxyZXYscm93cyxyb3dzcGFuLHJ1bGVzLCcgK1xyXG4gICAgJ3Njb3BlLHNjcm9sbGluZyxzaGFwZSxzaXplLHNwYW4sc3RhcnQsc3VtbWFyeSx0YXJnZXQsdGl0bGUsdHlwZSwnICtcclxuICAgICd2YWxpZ24sdmFsdWUsdnNwYWNlLHdpZHRoJyk7XHJcblxyXG4vLyBTVkcgYXR0cmlidXRlcyAod2l0aG91dCBcImlkXCIgYW5kIFwibmFtZVwiIGF0dHJpYnV0ZXMpXHJcbi8vIGh0dHBzOi8vd2lraS53aGF0d2cub3JnL3dpa2kvU2FuaXRpemF0aW9uX3J1bGVzI3N2Z19BdHRyaWJ1dGVzXHJcbnZhciBzdmdBdHRycyA9IG1ha2VNYXAoJ2FjY2VudC1oZWlnaHQsYWNjdW11bGF0ZSxhZGRpdGl2ZSxhbHBoYWJldGljLGFyYWJpYy1mb3JtLGFzY2VudCwnICtcclxuICAgICdhdHRyaWJ1dGVOYW1lLGF0dHJpYnV0ZVR5cGUsYmFzZVByb2ZpbGUsYmJveCxiZWdpbixieSxjYWxjTW9kZSxjYXAtaGVpZ2h0LGNsYXNzLGNvbG9yLCcgK1xyXG4gICAgJ2NvbG9yLXJlbmRlcmluZyxjb250ZW50LGN4LGN5LGQsZHgsZHksZGVzY2VudCxkaXNwbGF5LGR1cixlbmQsZmlsbCxmaWxsLXJ1bGUsZm9udC1mYW1pbHksJyArXHJcbiAgICAnZm9udC1zaXplLGZvbnQtc3RyZXRjaCxmb250LXN0eWxlLGZvbnQtdmFyaWFudCxmb250LXdlaWdodCxmcm9tLGZ4LGZ5LGcxLGcyLGdseXBoLW5hbWUsJyArXHJcbiAgICAnZ3JhZGllbnRVbml0cyxoYW5naW5nLGhlaWdodCxob3Jpei1hZHYteCxob3Jpei1vcmlnaW4teCxpZGVvZ3JhcGhpYyxrLGtleVBvaW50cywnICtcclxuICAgICdrZXlTcGxpbmVzLGtleVRpbWVzLGxhbmcsbWFya2VyLWVuZCxtYXJrZXItbWlkLG1hcmtlci1zdGFydCxtYXJrZXJIZWlnaHQsbWFya2VyVW5pdHMsJyArXHJcbiAgICAnbWFya2VyV2lkdGgsbWF0aGVtYXRpY2FsLG1heCxtaW4sb2Zmc2V0LG9wYWNpdHksb3JpZW50LG9yaWdpbixvdmVybGluZS1wb3NpdGlvbiwnICtcclxuICAgICdvdmVybGluZS10aGlja25lc3MscGFub3NlLTEscGF0aCxwYXRoTGVuZ3RoLHBvaW50cyxwcmVzZXJ2ZUFzcGVjdFJhdGlvLHIscmVmWCxyZWZZLCcgK1xyXG4gICAgJ3JlcGVhdENvdW50LHJlcGVhdER1cixyZXF1aXJlZEV4dGVuc2lvbnMscmVxdWlyZWRGZWF0dXJlcyxyZXN0YXJ0LHJvdGF0ZSxyeCxyeSxzbG9wZSxzdGVtaCwnICtcclxuICAgICdzdGVtdixzdG9wLWNvbG9yLHN0b3Atb3BhY2l0eSxzdHJpa2V0aHJvdWdoLXBvc2l0aW9uLHN0cmlrZXRocm91Z2gtdGhpY2tuZXNzLHN0cm9rZSwnICtcclxuICAgICdzdHJva2UtZGFzaGFycmF5LHN0cm9rZS1kYXNob2Zmc2V0LHN0cm9rZS1saW5lY2FwLHN0cm9rZS1saW5lam9pbixzdHJva2UtbWl0ZXJsaW1pdCwnICtcclxuICAgICdzdHJva2Utb3BhY2l0eSxzdHJva2Utd2lkdGgsc3lzdGVtTGFuZ3VhZ2UsdGFyZ2V0LHRleHQtYW5jaG9yLHRvLHRyYW5zZm9ybSx0eXBlLHUxLHUyLCcgK1xyXG4gICAgJ3VuZGVybGluZS1wb3NpdGlvbix1bmRlcmxpbmUtdGhpY2tuZXNzLHVuaWNvZGUsdW5pY29kZS1yYW5nZSx1bml0cy1wZXItZW0sdmFsdWVzLHZlcnNpb24sJyArXHJcbiAgICAndmlld0JveCx2aXNpYmlsaXR5LHdpZHRoLHdpZHRocyx4LHgtaGVpZ2h0LHgxLHgyLHhsaW5rOmFjdHVhdGUseGxpbms6YXJjcm9sZSx4bGluazpyb2xlLCcgK1xyXG4gICAgJ3hsaW5rOnNob3cseGxpbms6dGl0bGUseGxpbms6dHlwZSx4bWw6YmFzZSx4bWw6bGFuZyx4bWw6c3BhY2UseG1sbnMseG1sbnM6eGxpbmsseSx5MSx5MiwnICtcclxuICAgICd6b29tQW5kUGFuJyk7XHJcblxyXG52YXIgdmFsaWRBdHRycyA9IGFuZ3VsYXIuZXh0ZW5kKHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaUF0dHJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Z0F0dHJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxBdHRycyk7XHJcblxyXG5mdW5jdGlvbiBtYWtlTWFwKHN0cikge1xyXG4gIHZhciBvYmogPSB7fSwgaXRlbXMgPSBzdHIuc3BsaXQoJywnKSwgaTtcclxuICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIG9ialtpdGVtc1tpXV0gPSB0cnVlO1xyXG4gIHJldHVybiBvYmo7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQGV4YW1wbGVcclxuICogaHRtbFBhcnNlcihodG1sU3RyaW5nLCB7XHJcbiAqICAgICBzdGFydDogZnVuY3Rpb24odGFnLCBhdHRycywgdW5hcnkpIHt9LFxyXG4gKiAgICAgZW5kOiBmdW5jdGlvbih0YWcpIHt9LFxyXG4gKiAgICAgY2hhcnM6IGZ1bmN0aW9uKHRleHQpIHt9LFxyXG4gKiAgICAgY29tbWVudDogZnVuY3Rpb24odGV4dCkge31cclxuICogfSk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIHN0cmluZ1xyXG4gKiBAcGFyYW0ge29iamVjdH0gaGFuZGxlclxyXG4gKi9cclxuZnVuY3Rpb24gaHRtbFBhcnNlcihodG1sLCBoYW5kbGVyKSB7XHJcbiAgaWYgKHR5cGVvZiBodG1sICE9PSAnc3RyaW5nJykge1xyXG4gICAgaWYgKGh0bWwgPT09IG51bGwgfHwgdHlwZW9mIGh0bWwgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIGh0bWwgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGh0bWwgPSAnJyArIGh0bWw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHZhciBpbmRleCwgY2hhcnMsIG1hdGNoLCBzdGFjayA9IFtdLCBsYXN0ID0gaHRtbCwgdGV4dDtcclxuICBzdGFjay5sYXN0ID0gZnVuY3Rpb24oKSB7IHJldHVybiBzdGFja1sgc3RhY2subGVuZ3RoIC0gMSBdOyB9O1xyXG5cclxuICB3aGlsZSAoaHRtbCkge1xyXG4gICAgdGV4dCA9ICcnO1xyXG4gICAgY2hhcnMgPSB0cnVlO1xyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBub3QgaW4gYSBzY3JpcHQgb3Igc3R5bGUgZWxlbWVudFxyXG4gICAgaWYgKCFzdGFjay5sYXN0KCkgfHwgIXNwZWNpYWxFbGVtZW50c1sgc3RhY2subGFzdCgpIF0pIHtcclxuXHJcbiAgICAgIC8vIENvbW1lbnRcclxuICAgICAgaWYgKGh0bWwuaW5kZXhPZihcIjwhLS1cIikgPT09IDApIHtcclxuICAgICAgICAvLyBjb21tZW50cyBjb250YWluaW5nIC0tIGFyZSBub3QgYWxsb3dlZCB1bmxlc3MgdGhleSB0ZXJtaW5hdGUgdGhlIGNvbW1lbnRcclxuICAgICAgICBpbmRleCA9IGh0bWwuaW5kZXhPZihcIi0tXCIsIDQpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBodG1sLmxhc3RJbmRleE9mKFwiLS0+XCIsIGluZGV4KSA9PT0gaW5kZXgpIHtcclxuICAgICAgICAgIGlmIChoYW5kbGVyLmNvbW1lbnQpIGhhbmRsZXIuY29tbWVudChodG1sLnN1YnN0cmluZyg0LCBpbmRleCkpO1xyXG4gICAgICAgICAgaHRtbCA9IGh0bWwuc3Vic3RyaW5nKGluZGV4ICsgMyk7XHJcbiAgICAgICAgICBjaGFycyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgLy8gRE9DVFlQRVxyXG4gICAgICB9IGVsc2UgaWYgKERPQ1RZUEVfUkVHRVhQLnRlc3QoaHRtbCkpIHtcclxuICAgICAgICBtYXRjaCA9IGh0bWwubWF0Y2goRE9DVFlQRV9SRUdFWFApO1xyXG5cclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgIGh0bWwgPSBodG1sLnJlcGxhY2UobWF0Y2hbMF0sICcnKTtcclxuICAgICAgICAgIGNoYXJzID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAvLyBlbmQgdGFnXHJcbiAgICAgIH0gZWxzZSBpZiAoQkVHSU5HX0VORF9UQUdFX1JFR0VYUC50ZXN0KGh0bWwpKSB7XHJcbiAgICAgICAgbWF0Y2ggPSBodG1sLm1hdGNoKEVORF9UQUdfUkVHRVhQKTtcclxuXHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICBodG1sID0gaHRtbC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcclxuICAgICAgICAgIG1hdGNoWzBdLnJlcGxhY2UoRU5EX1RBR19SRUdFWFAsIHBhcnNlRW5kVGFnKTtcclxuICAgICAgICAgIGNoYXJzID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgLy8gc3RhcnQgdGFnXHJcbiAgICAgIH0gZWxzZSBpZiAoQkVHSU5fVEFHX1JFR0VYUC50ZXN0KGh0bWwpKSB7XHJcbiAgICAgICAgbWF0Y2ggPSBodG1sLm1hdGNoKFNUQVJUX1RBR19SRUdFWFApO1xyXG5cclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgIC8vIFdlIG9ubHkgaGF2ZSBhIHZhbGlkIHN0YXJ0LXRhZyBpZiB0aGVyZSBpcyBhICc+Jy5cclxuICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xyXG4gICAgICAgICAgICBodG1sID0gaHRtbC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcclxuICAgICAgICAgICAgbWF0Y2hbMF0ucmVwbGFjZShTVEFSVF9UQUdfUkVHRVhQLCBwYXJzZVN0YXJ0VGFnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNoYXJzID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIG5vIGVuZGluZyB0YWcgZm91bmQgLS0tIHRoaXMgcGllY2Ugc2hvdWxkIGJlIGVuY29kZWQgYXMgYW4gZW50aXR5LlxyXG4gICAgICAgICAgdGV4dCArPSAnPCc7XHJcbiAgICAgICAgICBodG1sID0gaHRtbC5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2hhcnMpIHtcclxuICAgICAgICBpbmRleCA9IGh0bWwuaW5kZXhPZihcIjxcIik7XHJcblxyXG4gICAgICAgIHRleHQgKz0gaW5kZXggPCAwID8gaHRtbCA6IGh0bWwuc3Vic3RyaW5nKDAsIGluZGV4KTtcclxuICAgICAgICBodG1sID0gaW5kZXggPCAwID8gXCJcIiA6IGh0bWwuc3Vic3RyaW5nKGluZGV4KTtcclxuXHJcbiAgICAgICAgaWYgKGhhbmRsZXIuY2hhcnMpIGhhbmRsZXIuY2hhcnMoZGVjb2RlRW50aXRpZXModGV4dCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaHRtbCA9IGh0bWwucmVwbGFjZShuZXcgUmVnRXhwKFwiKC4qKTxcXFxccypcXFxcL1xcXFxzKlwiICsgc3RhY2subGFzdCgpICsgXCJbXj5dKj5cIiwgJ2knKSxcclxuICAgICAgICBmdW5jdGlvbihhbGwsIHRleHQpIHtcclxuICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoQ09NTUVOVF9SRUdFWFAsIFwiJDFcIikucmVwbGFjZShDREFUQV9SRUdFWFAsIFwiJDFcIik7XHJcblxyXG4gICAgICAgICAgaWYgKGhhbmRsZXIuY2hhcnMpIGhhbmRsZXIuY2hhcnMoZGVjb2RlRW50aXRpZXModGV4dCkpO1xyXG5cclxuICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHBhcnNlRW5kVGFnKFwiXCIsIHN0YWNrLmxhc3QoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGh0bWwgPT0gbGFzdCkge1xyXG4gICAgICB0aHJvdyAkc2FuaXRpemVNaW5FcnIoJ2JhZHBhcnNlJywgXCJUaGUgc2FuaXRpemVyIHdhcyB1bmFibGUgdG8gcGFyc2UgdGhlIGZvbGxvd2luZyBibG9jayBcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9mIGh0bWw6IHswfVwiLCBodG1sKTtcclxuICAgIH1cclxuICAgIGxhc3QgPSBodG1sO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2xlYW4gdXAgYW55IHJlbWFpbmluZyB0YWdzXHJcbiAgcGFyc2VFbmRUYWcoKTtcclxuXHJcbiAgZnVuY3Rpb24gcGFyc2VTdGFydFRhZyh0YWcsIHRhZ05hbWUsIHJlc3QsIHVuYXJ5KSB7XHJcbiAgICB0YWdOYW1lID0gYW5ndWxhci5sb3dlcmNhc2UodGFnTmFtZSk7XHJcbiAgICBpZiAoYmxvY2tFbGVtZW50c1sgdGFnTmFtZSBdKSB7XHJcbiAgICAgIHdoaWxlIChzdGFjay5sYXN0KCkgJiYgaW5saW5lRWxlbWVudHNbIHN0YWNrLmxhc3QoKSBdKSB7XHJcbiAgICAgICAgcGFyc2VFbmRUYWcoXCJcIiwgc3RhY2subGFzdCgpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRpb25hbEVuZFRhZ0VsZW1lbnRzWyB0YWdOYW1lIF0gJiYgc3RhY2subGFzdCgpID09IHRhZ05hbWUpIHtcclxuICAgICAgcGFyc2VFbmRUYWcoXCJcIiwgdGFnTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5hcnkgPSB2b2lkRWxlbWVudHNbIHRhZ05hbWUgXSB8fCAhIXVuYXJ5O1xyXG5cclxuICAgIGlmICghdW5hcnkpXHJcbiAgICAgIHN0YWNrLnB1c2godGFnTmFtZSk7XHJcblxyXG4gICAgdmFyIGF0dHJzID0ge307XHJcblxyXG4gICAgcmVzdC5yZXBsYWNlKEFUVFJfUkVHRVhQLFxyXG4gICAgICBmdW5jdGlvbihtYXRjaCwgbmFtZSwgZG91YmxlUXVvdGVkVmFsdWUsIHNpbmdsZVF1b3RlZFZhbHVlLCB1bnF1b3RlZFZhbHVlKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZG91YmxlUXVvdGVkVmFsdWVcclxuICAgICAgICAgIHx8IHNpbmdsZVF1b3RlZFZhbHVlXHJcbiAgICAgICAgICB8fCB1bnF1b3RlZFZhbHVlXHJcbiAgICAgICAgICB8fCAnJztcclxuXHJcbiAgICAgICAgYXR0cnNbbmFtZV0gPSBkZWNvZGVFbnRpdGllcyh2YWx1ZSk7XHJcbiAgICB9KTtcclxuICAgIGlmIChoYW5kbGVyLnN0YXJ0KSBoYW5kbGVyLnN0YXJ0KHRhZ05hbWUsIGF0dHJzLCB1bmFyeSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwYXJzZUVuZFRhZyh0YWcsIHRhZ05hbWUpIHtcclxuICAgIHZhciBwb3MgPSAwLCBpO1xyXG4gICAgdGFnTmFtZSA9IGFuZ3VsYXIubG93ZXJjYXNlKHRhZ05hbWUpO1xyXG4gICAgaWYgKHRhZ05hbWUpXHJcbiAgICAgIC8vIEZpbmQgdGhlIGNsb3Nlc3Qgb3BlbmVkIHRhZyBvZiB0aGUgc2FtZSB0eXBlXHJcbiAgICAgIGZvciAocG9zID0gc3RhY2subGVuZ3RoIC0gMTsgcG9zID49IDA7IHBvcy0tKVxyXG4gICAgICAgIGlmIChzdGFja1sgcG9zIF0gPT0gdGFnTmFtZSlcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgIGlmIChwb3MgPj0gMCkge1xyXG4gICAgICAvLyBDbG9zZSBhbGwgdGhlIG9wZW4gZWxlbWVudHMsIHVwIHRoZSBzdGFja1xyXG4gICAgICBmb3IgKGkgPSBzdGFjay5sZW5ndGggLSAxOyBpID49IHBvczsgaS0tKVxyXG4gICAgICAgIGlmIChoYW5kbGVyLmVuZCkgaGFuZGxlci5lbmQoc3RhY2tbIGkgXSk7XHJcblxyXG4gICAgICAvLyBSZW1vdmUgdGhlIG9wZW4gZWxlbWVudHMgZnJvbSB0aGUgc3RhY2tcclxuICAgICAgc3RhY2subGVuZ3RoID0gcG9zO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxudmFyIGhpZGRlblByZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicHJlXCIpO1xyXG52YXIgc3BhY2VSZSA9IC9eKFxccyopKFtcXHNcXFNdKj8pKFxccyopJC87XHJcbi8qKlxyXG4gKiBkZWNvZGVzIGFsbCBlbnRpdGllcyBpbnRvIHJlZ3VsYXIgc3RyaW5nXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZyB3aXRoIGRlY29kZWQgZW50aXRpZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWNvZGVFbnRpdGllcyh2YWx1ZSkge1xyXG4gIGlmICghdmFsdWUpIHsgcmV0dXJuICcnOyB9XHJcblxyXG4gIC8vIE5vdGU6IElFOCBkb2VzIG5vdCBwcmVzZXJ2ZSBzcGFjZXMgYXQgdGhlIHN0YXJ0L2VuZCBvZiBpbm5lckhUTUxcclxuICAvLyBzbyB3ZSBtdXN0IGNhcHR1cmUgdGhlbSBhbmQgcmVhdHRhY2ggdGhlbSBhZnRlcndhcmRcclxuICB2YXIgcGFydHMgPSBzcGFjZVJlLmV4ZWModmFsdWUpO1xyXG4gIHZhciBzcGFjZUJlZm9yZSA9IHBhcnRzWzFdO1xyXG4gIHZhciBzcGFjZUFmdGVyID0gcGFydHNbM107XHJcbiAgdmFyIGNvbnRlbnQgPSBwYXJ0c1syXTtcclxuICBpZiAoY29udGVudCkge1xyXG4gICAgaGlkZGVuUHJlLmlubmVySFRNTD1jb250ZW50LnJlcGxhY2UoLzwvZyxcIiZsdDtcIik7XHJcbiAgICAvLyBpbm5lclRleHQgZGVwZW5kcyBvbiBzdHlsaW5nIGFzIGl0IGRvZXNuJ3QgZGlzcGxheSBoaWRkZW4gZWxlbWVudHMuXHJcbiAgICAvLyBUaGVyZWZvcmUsIGl0J3MgYmV0dGVyIHRvIHVzZSB0ZXh0Q29udGVudCBub3QgdG8gY2F1c2UgdW5uZWNlc3NhcnlcclxuICAgIC8vIHJlZmxvd3MuIEhvd2V2ZXIsIElFPDkgZG9uJ3Qgc3VwcG9ydCB0ZXh0Q29udGVudCBzbyB0aGUgaW5uZXJUZXh0XHJcbiAgICAvLyBmYWxsYmFjayBpcyBuZWNlc3NhcnkuXHJcbiAgICBjb250ZW50ID0gJ3RleHRDb250ZW50JyBpbiBoaWRkZW5QcmUgP1xyXG4gICAgICBoaWRkZW5QcmUudGV4dENvbnRlbnQgOiBoaWRkZW5QcmUuaW5uZXJUZXh0O1xyXG4gIH1cclxuICByZXR1cm4gc3BhY2VCZWZvcmUgKyBjb250ZW50ICsgc3BhY2VBZnRlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEVzY2FwZXMgYWxsIHBvdGVudGlhbGx5IGRhbmdlcm91cyBjaGFyYWN0ZXJzLCBzbyB0aGF0IHRoZVxyXG4gKiByZXN1bHRpbmcgc3RyaW5nIGNhbiBiZSBzYWZlbHkgaW5zZXJ0ZWQgaW50byBhdHRyaWJ1dGUgb3JcclxuICogZWxlbWVudCB0ZXh0LlxyXG4gKiBAcGFyYW0gdmFsdWVcclxuICogQHJldHVybnMge3N0cmluZ30gZXNjYXBlZCB0ZXh0XHJcbiAqL1xyXG5mdW5jdGlvbiBlbmNvZGVFbnRpdGllcyh2YWx1ZSkge1xyXG4gIHJldHVybiB2YWx1ZS5cclxuICAgIHJlcGxhY2UoLyYvZywgJyZhbXA7JykuXHJcbiAgICByZXBsYWNlKFNVUlJPR0FURV9QQUlSX1JFR0VYUCwgZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgdmFyIGhpID0gdmFsdWUuY2hhckNvZGVBdCgwKTtcclxuICAgICAgdmFyIGxvdyA9IHZhbHVlLmNoYXJDb2RlQXQoMSk7XHJcbiAgICAgIHJldHVybiAnJiMnICsgKCgoaGkgLSAweEQ4MDApICogMHg0MDApICsgKGxvdyAtIDB4REMwMCkgKyAweDEwMDAwKSArICc7JztcclxuICAgIH0pLlxyXG4gICAgcmVwbGFjZShOT05fQUxQSEFOVU1FUklDX1JFR0VYUCwgZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgcmV0dXJuICcmIycgKyB2YWx1ZS5jaGFyQ29kZUF0KDApICsgJzsnO1xyXG4gICAgfSkuXHJcbiAgICByZXBsYWNlKC88L2csICcmbHQ7JykuXHJcbiAgICByZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjcmVhdGUgYW4gSFRNTC9YTUwgd3JpdGVyIHdoaWNoIHdyaXRlcyB0byBidWZmZXJcclxuICogQHBhcmFtIHtBcnJheX0gYnVmIHVzZSBidWYuamFpbignJykgdG8gZ2V0IG91dCBzYW5pdGl6ZWQgaHRtbCBzdHJpbmdcclxuICogQHJldHVybnMge29iamVjdH0gaW4gdGhlIGZvcm0gb2Yge1xyXG4gKiAgICAgc3RhcnQ6IGZ1bmN0aW9uKHRhZywgYXR0cnMsIHVuYXJ5KSB7fSxcclxuICogICAgIGVuZDogZnVuY3Rpb24odGFnKSB7fSxcclxuICogICAgIGNoYXJzOiBmdW5jdGlvbih0ZXh0KSB7fSxcclxuICogICAgIGNvbW1lbnQ6IGZ1bmN0aW9uKHRleHQpIHt9XHJcbiAqIH1cclxuICovXHJcbmZ1bmN0aW9uIGh0bWxTYW5pdGl6ZVdyaXRlcihidWYsIHVyaVZhbGlkYXRvcikge1xyXG4gIHZhciBpZ25vcmUgPSBmYWxzZTtcclxuICB2YXIgb3V0ID0gYW5ndWxhci5iaW5kKGJ1ZiwgYnVmLnB1c2gpO1xyXG4gIHJldHVybiB7XHJcbiAgICBzdGFydDogZnVuY3Rpb24odGFnLCBhdHRycywgdW5hcnkpIHtcclxuICAgICAgdGFnID0gYW5ndWxhci5sb3dlcmNhc2UodGFnKTtcclxuICAgICAgaWYgKCFpZ25vcmUgJiYgc3BlY2lhbEVsZW1lbnRzW3RhZ10pIHtcclxuICAgICAgICBpZ25vcmUgPSB0YWc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFpZ25vcmUgJiYgdmFsaWRFbGVtZW50c1t0YWddID09PSB0cnVlKSB7XHJcbiAgICAgICAgb3V0KCc8Jyk7XHJcbiAgICAgICAgb3V0KHRhZyk7XHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKGF0dHJzLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XHJcbiAgICAgICAgICB2YXIgbGtleT1hbmd1bGFyLmxvd2VyY2FzZShrZXkpO1xyXG4gICAgICAgICAgdmFyIGlzSW1hZ2UgPSAodGFnID09PSAnaW1nJyAmJiBsa2V5ID09PSAnc3JjJykgfHwgKGxrZXkgPT09ICdiYWNrZ3JvdW5kJyk7XHJcbiAgICAgICAgICBpZiAodmFsaWRBdHRyc1tsa2V5XSA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgICAgICAodXJpQXR0cnNbbGtleV0gIT09IHRydWUgfHwgdXJpVmFsaWRhdG9yKHZhbHVlLCBpc0ltYWdlKSkpIHtcclxuICAgICAgICAgICAgb3V0KCcgJyk7XHJcbiAgICAgICAgICAgIG91dChrZXkpO1xyXG4gICAgICAgICAgICBvdXQoJz1cIicpO1xyXG4gICAgICAgICAgICBvdXQoZW5jb2RlRW50aXRpZXModmFsdWUpKTtcclxuICAgICAgICAgICAgb3V0KCdcIicpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG91dCh1bmFyeSA/ICcvPicgOiAnPicpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgZW5kOiBmdW5jdGlvbih0YWcpIHtcclxuICAgICAgICB0YWcgPSBhbmd1bGFyLmxvd2VyY2FzZSh0YWcpO1xyXG4gICAgICAgIGlmICghaWdub3JlICYmIHZhbGlkRWxlbWVudHNbdGFnXSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgb3V0KCc8LycpO1xyXG4gICAgICAgICAgb3V0KHRhZyk7XHJcbiAgICAgICAgICBvdXQoJz4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRhZyA9PSBpZ25vcmUpIHtcclxuICAgICAgICAgIGlnbm9yZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIGNoYXJzOiBmdW5jdGlvbihjaGFycykge1xyXG4gICAgICAgIGlmICghaWdub3JlKSB7XHJcbiAgICAgICAgICBvdXQoZW5jb2RlRW50aXRpZXMoY2hhcnMpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICB9O1xyXG59XHJcblxyXG5cclxuLy8gZGVmaW5lIG5nU2FuaXRpemUgbW9kdWxlIGFuZCByZWdpc3RlciAkc2FuaXRpemUgc2VydmljZVxyXG5hbmd1bGFyLm1vZHVsZSgnbmdTYW5pdGl6ZScsIFtdKS5wcm92aWRlcignJHNhbml0aXplJywgJFNhbml0aXplUHJvdmlkZXIpO1xyXG5cclxuLyogZ2xvYmFsIHNhbml0aXplVGV4dDogZmFsc2UgKi9cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZmlsdGVyXHJcbiAqIEBuYW1lIGxpbmt5XHJcbiAqIEBraW5kIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBGaW5kcyBsaW5rcyBpbiB0ZXh0IGlucHV0IGFuZCB0dXJucyB0aGVtIGludG8gaHRtbCBsaW5rcy4gU3VwcG9ydHMgaHR0cC9odHRwcy9mdHAvbWFpbHRvIGFuZFxyXG4gKiBwbGFpbiBlbWFpbCBhZGRyZXNzIGxpbmtzLlxyXG4gKlxyXG4gKiBSZXF1aXJlcyB0aGUge0BsaW5rIG5nU2FuaXRpemUgYG5nU2FuaXRpemVgfSBtb2R1bGUgdG8gYmUgaW5zdGFsbGVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBJbnB1dCB0ZXh0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IFdpbmRvdyAoX2JsYW5rfF9zZWxmfF9wYXJlbnR8X3RvcCkgb3IgbmFtZWQgZnJhbWUgdG8gb3BlbiBsaW5rcyBpbi5cclxuICogQHJldHVybnMge3N0cmluZ30gSHRtbC1saW5raWZpZWQgdGV4dC5cclxuICpcclxuICogQHVzYWdlXHJcbiAgIDxzcGFuIG5nLWJpbmQtaHRtbD1cImxpbmt5X2V4cHJlc3Npb24gfCBsaW5reVwiPjwvc3Bhbj5cclxuICpcclxuICogQGV4YW1wbGVcclxuICAgPGV4YW1wbGUgbW9kdWxlPVwibGlua3lFeGFtcGxlXCIgZGVwcz1cImFuZ3VsYXItc2FuaXRpemUuanNcIj5cclxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgPHNjcmlwdD5cclxuICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ2xpbmt5RXhhbXBsZScsIFsnbmdTYW5pdGl6ZSddKVxyXG4gICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAgICAgICAgICAgICAkc2NvcGUuc25pcHBldCA9XHJcbiAgICAgICAgICAgICAgICdQcmV0dHkgdGV4dCB3aXRoIHNvbWUgbGlua3M6XFxuJytcclxuICAgICAgICAgICAgICAgJ2h0dHA6Ly9hbmd1bGFyanMub3JnLyxcXG4nK1xyXG4gICAgICAgICAgICAgICAnbWFpbHRvOnVzQHNvbWV3aGVyZS5vcmcsXFxuJytcclxuICAgICAgICAgICAgICAgJ2Fub3RoZXJAc29tZXdoZXJlLm9yZyxcXG4nK1xyXG4gICAgICAgICAgICAgICAnYW5kIG9uZSBtb3JlOiBmdHA6Ly8xMjcuMC4wLjEvLic7XHJcbiAgICAgICAgICAgICAkc2NvcGUuc25pcHBldFdpdGhUYXJnZXQgPSAnaHR0cDovL2FuZ3VsYXJqcy5vcmcvJztcclxuICAgICAgICAgICB9XSk7XHJcbiAgICAgICA8L3NjcmlwdD5cclxuICAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XHJcbiAgICAgICBTbmlwcGV0OiA8dGV4dGFyZWEgbmctbW9kZWw9XCJzbmlwcGV0XCIgY29scz1cIjYwXCIgcm93cz1cIjNcIj48L3RleHRhcmVhPlxyXG4gICAgICAgPHRhYmxlPlxyXG4gICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgPHRkPkZpbHRlcjwvdGQ+XHJcbiAgICAgICAgICAgPHRkPlNvdXJjZTwvdGQ+XHJcbiAgICAgICAgICAgPHRkPlJlbmRlcmVkPC90ZD5cclxuICAgICAgICAgPC90cj5cclxuICAgICAgICAgPHRyIGlkPVwibGlua3ktZmlsdGVyXCI+XHJcbiAgICAgICAgICAgPHRkPmxpbmt5IGZpbHRlcjwvdGQ+XHJcbiAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgPHByZT4mbHQ7ZGl2IG5nLWJpbmQtaHRtbD1cInNuaXBwZXQgfCBsaW5reVwiJmd0Ozxicj4mbHQ7L2RpdiZndDs8L3ByZT5cclxuICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgIDxkaXYgbmctYmluZC1odG1sPVwic25pcHBldCB8IGxpbmt5XCI+PC9kaXY+XHJcbiAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgPC90cj5cclxuICAgICAgICAgPHRyIGlkPVwibGlua3ktdGFyZ2V0XCI+XHJcbiAgICAgICAgICA8dGQ+bGlua3kgdGFyZ2V0PC90ZD5cclxuICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgPHByZT4mbHQ7ZGl2IG5nLWJpbmQtaHRtbD1cInNuaXBwZXRXaXRoVGFyZ2V0IHwgbGlua3k6J19ibGFuaydcIiZndDs8YnI+Jmx0Oy9kaXYmZ3Q7PC9wcmU+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICA8ZGl2IG5nLWJpbmQtaHRtbD1cInNuaXBwZXRXaXRoVGFyZ2V0IHwgbGlua3k6J19ibGFuaydcIj48L2Rpdj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgIDx0ciBpZD1cImVzY2FwZWQtaHRtbFwiPlxyXG4gICAgICAgICAgIDx0ZD5ubyBmaWx0ZXI8L3RkPlxyXG4gICAgICAgICAgIDx0ZD48cHJlPiZsdDtkaXYgbmctYmluZD1cInNuaXBwZXRcIiZndDs8YnI+Jmx0Oy9kaXYmZ3Q7PC9wcmU+PC90ZD5cclxuICAgICAgICAgICA8dGQ+PGRpdiBuZy1iaW5kPVwic25pcHBldFwiPjwvZGl2PjwvdGQ+XHJcbiAgICAgICAgIDwvdHI+XHJcbiAgICAgICA8L3RhYmxlPlxyXG4gICAgIDwvZmlsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgICBpdCgnc2hvdWxkIGxpbmtpZnkgdGhlIHNuaXBwZXQgd2l0aCB1cmxzJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdsaW5reS1maWx0ZXInKSkuZWxlbWVudChieS5iaW5kaW5nKCdzbmlwcGV0IHwgbGlua3knKSkuZ2V0VGV4dCgpKS5cclxuICAgICAgICAgICAgIHRvQmUoJ1ByZXR0eSB0ZXh0IHdpdGggc29tZSBsaW5rczogaHR0cDovL2FuZ3VsYXJqcy5vcmcvLCB1c0Bzb21ld2hlcmUub3JnLCAnICtcclxuICAgICAgICAgICAgICAgICAgJ2Fub3RoZXJAc29tZXdoZXJlLm9yZywgYW5kIG9uZSBtb3JlOiBmdHA6Ly8xMjcuMC4wLjEvLicpO1xyXG4gICAgICAgICBleHBlY3QoZWxlbWVudC5hbGwoYnkuY3NzKCcjbGlua3ktZmlsdGVyIGEnKSkuY291bnQoKSkudG9FcXVhbCg0KTtcclxuICAgICAgIH0pO1xyXG5cclxuICAgICAgIGl0KCdzaG91bGQgbm90IGxpbmtpZnkgc25pcHBldCB3aXRob3V0IHRoZSBsaW5reSBmaWx0ZXInLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2VzY2FwZWQtaHRtbCcpKS5lbGVtZW50KGJ5LmJpbmRpbmcoJ3NuaXBwZXQnKSkuZ2V0VGV4dCgpKS5cclxuICAgICAgICAgICAgIHRvQmUoJ1ByZXR0eSB0ZXh0IHdpdGggc29tZSBsaW5rczogaHR0cDovL2FuZ3VsYXJqcy5vcmcvLCBtYWlsdG86dXNAc29tZXdoZXJlLm9yZywgJyArXHJcbiAgICAgICAgICAgICAgICAgICdhbm90aGVyQHNvbWV3aGVyZS5vcmcsIGFuZCBvbmUgbW9yZTogZnRwOi8vMTI3LjAuMC4xLy4nKTtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnQuYWxsKGJ5LmNzcygnI2VzY2FwZWQtaHRtbCBhJykpLmNvdW50KCkpLnRvRXF1YWwoMCk7XHJcbiAgICAgICB9KTtcclxuXHJcbiAgICAgICBpdCgnc2hvdWxkIHVwZGF0ZScsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdzbmlwcGV0JykpLmNsZWFyKCk7XHJcbiAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3NuaXBwZXQnKSkuc2VuZEtleXMoJ25ldyBodHRwOi8vbGluay4nKTtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2xpbmt5LWZpbHRlcicpKS5lbGVtZW50KGJ5LmJpbmRpbmcoJ3NuaXBwZXQgfCBsaW5reScpKS5nZXRUZXh0KCkpLlxyXG4gICAgICAgICAgICAgdG9CZSgnbmV3IGh0dHA6Ly9saW5rLicpO1xyXG4gICAgICAgICBleHBlY3QoZWxlbWVudC5hbGwoYnkuY3NzKCcjbGlua3ktZmlsdGVyIGEnKSkuY291bnQoKSkudG9FcXVhbCgxKTtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2VzY2FwZWQtaHRtbCcpKS5lbGVtZW50KGJ5LmJpbmRpbmcoJ3NuaXBwZXQnKSkuZ2V0VGV4dCgpKVxyXG4gICAgICAgICAgICAgLnRvQmUoJ25ldyBodHRwOi8vbGluay4nKTtcclxuICAgICAgIH0pO1xyXG5cclxuICAgICAgIGl0KCdzaG91bGQgd29yayB3aXRoIHRoZSB0YXJnZXQgcHJvcGVydHknLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnbGlua3ktdGFyZ2V0JykpLlxyXG4gICAgICAgICAgICBlbGVtZW50KGJ5LmJpbmRpbmcoXCJzbmlwcGV0V2l0aFRhcmdldCB8IGxpbmt5OidfYmxhbmsnXCIpKS5nZXRUZXh0KCkpLlxyXG4gICAgICAgICAgICB0b0JlKCdodHRwOi8vYW5ndWxhcmpzLm9yZy8nKTtcclxuICAgICAgICBleHBlY3QoZWxlbWVudChieS5jc3MoJyNsaW5reS10YXJnZXQgYScpKS5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpKS50b0VxdWFsKCdfYmxhbmsnKTtcclxuICAgICAgIH0pO1xyXG4gICAgIDwvZmlsZT5cclxuICAgPC9leGFtcGxlPlxyXG4gKi9cclxuYW5ndWxhci5tb2R1bGUoJ25nU2FuaXRpemUnKS5maWx0ZXIoJ2xpbmt5JywgWyckc2FuaXRpemUnLCBmdW5jdGlvbigkc2FuaXRpemUpIHtcclxuICB2YXIgTElOS1lfVVJMX1JFR0VYUCA9XHJcbiAgICAgICAgLygoZnRwfGh0dHBzPyk6XFwvXFwvfChtYWlsdG86KT9bQS1aYS16MC05Ll8lKy1dK0ApXFxTKlteXFxzLjssKCl7fTw+XCJdLyxcclxuICAgICAgTUFJTFRPX1JFR0VYUCA9IC9ebWFpbHRvOi87XHJcblxyXG4gIHJldHVybiBmdW5jdGlvbih0ZXh0LCB0YXJnZXQpIHtcclxuICAgIGlmICghdGV4dCkgcmV0dXJuIHRleHQ7XHJcbiAgICB2YXIgbWF0Y2g7XHJcbiAgICB2YXIgcmF3ID0gdGV4dDtcclxuICAgIHZhciBodG1sID0gW107XHJcbiAgICB2YXIgdXJsO1xyXG4gICAgdmFyIGk7XHJcbiAgICB3aGlsZSAoKG1hdGNoID0gcmF3Lm1hdGNoKExJTktZX1VSTF9SRUdFWFApKSkge1xyXG4gICAgICAvLyBXZSBjYW4gbm90IGVuZCBpbiB0aGVzZSBhcyB0aGV5IGFyZSBzb21ldGltZXMgZm91bmQgYXQgdGhlIGVuZCBvZiB0aGUgc2VudGVuY2VcclxuICAgICAgdXJsID0gbWF0Y2hbMF07XHJcbiAgICAgIC8vIGlmIHdlIGRpZCBub3QgbWF0Y2ggZnRwL2h0dHAvbWFpbHRvIHRoZW4gYXNzdW1lIG1haWx0b1xyXG4gICAgICBpZiAobWF0Y2hbMl0gPT0gbWF0Y2hbM10pIHVybCA9ICdtYWlsdG86JyArIHVybDtcclxuICAgICAgaSA9IG1hdGNoLmluZGV4O1xyXG4gICAgICBhZGRUZXh0KHJhdy5zdWJzdHIoMCwgaSkpO1xyXG4gICAgICBhZGRMaW5rKHVybCwgbWF0Y2hbMF0ucmVwbGFjZShNQUlMVE9fUkVHRVhQLCAnJykpO1xyXG4gICAgICByYXcgPSByYXcuc3Vic3RyaW5nKGkgKyBtYXRjaFswXS5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgYWRkVGV4dChyYXcpO1xyXG4gICAgcmV0dXJuICRzYW5pdGl6ZShodG1sLmpvaW4oJycpKTtcclxuXHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHQpIHtcclxuICAgICAgaWYgKCF0ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGh0bWwucHVzaChzYW5pdGl6ZVRleHQodGV4dCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGFkZExpbmsodXJsLCB0ZXh0KSB7XHJcbiAgICAgIGh0bWwucHVzaCgnPGEgJyk7XHJcbiAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZCh0YXJnZXQpKSB7XHJcbiAgICAgICAgaHRtbC5wdXNoKCd0YXJnZXQ9XCInKTtcclxuICAgICAgICBodG1sLnB1c2godGFyZ2V0KTtcclxuICAgICAgICBodG1sLnB1c2goJ1wiICcpO1xyXG4gICAgICB9XHJcbiAgICAgIGh0bWwucHVzaCgnaHJlZj1cIicpO1xyXG4gICAgICBodG1sLnB1c2godXJsKTtcclxuICAgICAgaHRtbC5wdXNoKCdcIj4nKTtcclxuICAgICAgYWRkVGV4dCh0ZXh0KTtcclxuICAgICAgaHRtbC5wdXNoKCc8L2E+Jyk7XHJcbiAgICB9XHJcbiAgfTtcclxufV0pO1xyXG5cclxuXHJcbn0pKHdpbmRvdywgd2luZG93LmFuZ3VsYXIpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular-sortable.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular-sortable.js index fb24c78f286..6815430f263 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular-sortable.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular-sortable.js @@ -315,4 +315,4 @@ angular.module('ui.sortable', []) } ]); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFuZ3VsYXItc29ydGFibGUuanMiLCJzb3J0YWJsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiYW5ndWxhci1zb3J0YWJsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiLypcbiBqUXVlcnkgVUkgU29ydGFibGUgcGx1Z2luIHdyYXBwZXJcblxuIEBwYXJhbSBbdWktc29ydGFibGVdIHtvYmplY3R9IE9wdGlvbnMgdG8gcGFzcyB0byAkLmZuLnNvcnRhYmxlKCkgbWVyZ2VkIG9udG8gdWkuY29uZmlnXG4gKi9cbmFuZ3VsYXIubW9kdWxlKCd1aS5zb3J0YWJsZScsIFtdKVxuICAudmFsdWUoJ3VpU29ydGFibGVDb25maWcnLHt9KVxuICAuZGlyZWN0aXZlKCd1aVNvcnRhYmxlJywgW1xuICAgICd1aVNvcnRhYmxlQ29uZmlnJywgJyR0aW1lb3V0JywgJyRsb2cnLFxuICAgIGZ1bmN0aW9uKHVpU29ydGFibGVDb25maWcsICR0aW1lb3V0LCAkbG9nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXF1aXJlOiAnP25nTW9kZWwnLFxuICAgICAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIG5nTW9kZWwpIHtcbiAgICAgICAgICB2YXIgc2F2ZWROb2RlcztcblxuICAgICAgICAgIGZ1bmN0aW9uIGNvbWJpbmVDYWxsYmFja3MoZmlyc3Qsc2Vjb25kKXtcbiAgICAgICAgICAgIGlmKHNlY29uZCAmJiAodHlwZW9mIHNlY29uZCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUsIHVpKSB7XG4gICAgICAgICAgICAgICAgZmlyc3QoZSwgdWkpO1xuICAgICAgICAgICAgICAgIHNlY29uZChlLCB1aSk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmlyc3Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZnVuY3Rpb24gaGFzU29ydGluZ0hlbHBlciAoZWxlbWVudCwgdWkpIHtcbiAgICAgICAgICAgIHZhciBoZWxwZXJPcHRpb24gPSBlbGVtZW50LnNvcnRhYmxlKCdvcHRpb24nLCdoZWxwZXInKTtcbiAgICAgICAgICAgIHJldHVybiBoZWxwZXJPcHRpb24gPT09ICdjbG9uZScgfHwgKHR5cGVvZiBoZWxwZXJPcHRpb24gPT09ICdmdW5jdGlvbicgJiYgdWkuaXRlbS5zb3J0YWJsZS5pc0N1c3RvbUhlbHBlclVzZWQoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gdGhhbmtzIGpxdWVyeS11aVxuICAgICAgICAgIGZ1bmN0aW9uIGlzRmxvYXRpbmcgKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiAoL2xlZnR8cmlnaHQvKS50ZXN0KGl0ZW0uY3NzKCdmbG9hdCcpKSB8fCAoL2lubGluZXx0YWJsZS1jZWxsLykudGVzdChpdGVtLmNzcygnZGlzcGxheScpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmdW5jdGlvbiBhZnRlclN0b3AoZSwgdWkpIHtcbiAgICAgICAgICAgIHVpLml0ZW0uc29ydGFibGUuX2Rlc3Ryb3koKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgb3B0cyA9IHt9O1xuXG4gICAgICAgICAgLy8gZGlyZWN0aXZlIHNwZWNpZmljIG9wdGlvbnNcbiAgICAgICAgICB2YXIgZGlyZWN0aXZlT3B0cyA9IHtcbiAgICAgICAgICAgICd1aS1mbG9hdGluZyc6IHVuZGVmaW5lZFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB2YXIgY2FsbGJhY2tzID0ge1xuICAgICAgICAgICAgcmVjZWl2ZTogbnVsbCxcbiAgICAgICAgICAgIHJlbW92ZTpudWxsLFxuICAgICAgICAgICAgc3RhcnQ6bnVsbCxcbiAgICAgICAgICAgIHN0b3A6bnVsbCxcbiAgICAgICAgICAgIHVwZGF0ZTpudWxsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHZhciB3cmFwcGVycyA9IHtcbiAgICAgICAgICAgIGhlbHBlcjogbnVsbFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBhbmd1bGFyLmV4dGVuZChvcHRzLCBkaXJlY3RpdmVPcHRzLCB1aVNvcnRhYmxlQ29uZmlnLCBzY29wZS4kZXZhbChhdHRycy51aVNvcnRhYmxlKSk7XG5cbiAgICAgICAgICBpZiAoIWFuZ3VsYXIuZWxlbWVudC5mbiB8fCAhYW5ndWxhci5lbGVtZW50LmZuLmpxdWVyeSkge1xuICAgICAgICAgICAgJGxvZy5lcnJvcigndWkuc29ydGFibGU6IGpRdWVyeSBzaG91bGQgYmUgaW5jbHVkZWQgYmVmb3JlIEFuZ3VsYXJKUyEnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmdNb2RlbCkge1xuXG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFkZCBvciByZW1vdmUgZWxlbWVudHMsIHdlIG5lZWQgdGhlIHNvcnRhYmxlIHRvICdyZWZyZXNoJ1xuICAgICAgICAgICAgLy8gc28gaXQgY2FuIGZpbmQgdGhlIG5ldy9yZW1vdmVkIGVsZW1lbnRzLlxuICAgICAgICAgICAgc2NvcGUuJHdhdGNoKGF0dHJzLm5nTW9kZWwrJy5sZW5ndGgnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgLy8gVGltZW91dCB0byBsZXQgbmctcmVwZWF0IG1vZGlmeSB0aGUgRE9NXG4gICAgICAgICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBqcXVlcnktdWktc29ydGFibGUgd2lkZ2V0IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgLy8gaXMgc3RpbGwgYm91bmQgdG8gdGhlIGRpcmVjdGl2ZSdzIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBpZiAoISFlbGVtZW50LmRhdGEoJ3VpLXNvcnRhYmxlJykpIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc29ydGFibGUoJ3JlZnJlc2gnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sIDAsIGZhbHNlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjYWxsYmFja3Muc3RhcnQgPSBmdW5jdGlvbihlLCB1aSkge1xuICAgICAgICAgICAgICBpZiAob3B0c1sndWktZmxvYXRpbmcnXSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICAgICAgLy8gc2luY2UgdGhlIGRyYWcgaGFzIHN0YXJ0ZWQsIHRoZSBlbGVtZW50IHdpbGwgYmVcbiAgICAgICAgICAgICAgICAvLyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIHNvIHdlIGNoZWNrIGl0cyBzaWJsaW5nc1xuICAgICAgICAgICAgICAgIHZhciBzaWJsaW5ncyA9IHVpLml0ZW0uc2libGluZ3MoKTtcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmVsZW1lbnQoZS50YXJnZXQpLmRhdGEoJ3VpLXNvcnRhYmxlJykuZmxvYXRpbmcgPSBpc0Zsb2F0aW5nKHNpYmxpbmdzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIFNhdmUgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIGRyYWdnZWQgaXRlbVxuICAgICAgICAgICAgICB1aS5pdGVtLnNvcnRhYmxlID0ge1xuICAgICAgICAgICAgICAgIG1vZGVsOiBuZ01vZGVsLiRtb2RlbFZhbHVlW3VpLml0ZW0uaW5kZXgoKV0sXG4gICAgICAgICAgICAgICAgaW5kZXg6IHVpLml0ZW0uaW5kZXgoKSxcbiAgICAgICAgICAgICAgICBzb3VyY2U6IHVpLml0ZW0ucGFyZW50KCksXG4gICAgICAgICAgICAgICAgc291cmNlTW9kZWw6IG5nTW9kZWwuJG1vZGVsVmFsdWUsXG4gICAgICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICB1aS5pdGVtLnNvcnRhYmxlLl9pc0NhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGlzQ2FuY2VsZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB1aS5pdGVtLnNvcnRhYmxlLl9pc0NhbmNlbGVkO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaXNDdXN0b21IZWxwZXJVc2VkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gISF1aS5pdGVtLnNvcnRhYmxlLl9pc0N1c3RvbUhlbHBlclVzZWQ7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBfaXNDYW5jZWxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgX2lzQ3VzdG9tSGVscGVyVXNlZDogdWkuaXRlbS5zb3J0YWJsZS5faXNDdXN0b21IZWxwZXJVc2VkLFxuICAgICAgICAgICAgICAgIF9kZXN0cm95OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2godWkuaXRlbS5zb3J0YWJsZSwgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICAgICAgICB1aS5pdGVtLnNvcnRhYmxlW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjYWxsYmFja3MuYWN0aXZhdGUgPSBmdW5jdGlvbigvKmUsIHVpKi8pIHtcbiAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIGEgY29weSBvZiB0aGUgY3VycmVudCBlbGVtZW50J3MgY29udGVudHMgc29cbiAgICAgICAgICAgICAgLy8gd2UgY2FuIHJlc3RvcmUgaXQgYWZ0ZXIgc29ydGFibGUgaGFzIG1lc3NlZCBpdCB1cC5cbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBpbnNpZGUgYWN0aXZhdGUgKGluc3RlYWQgb2Ygc3RhcnQpIGluIG9yZGVyIHRvIHNhdmVcbiAgICAgICAgICAgICAgLy8gYm90aCBsaXN0cyB3aGVuIGRyYWdnaW5nIGJldHdlZW4gY29ubmVjdGVkIGxpc3RzLlxuICAgICAgICAgICAgICBzYXZlZE5vZGVzID0gZWxlbWVudC5jb250ZW50cygpO1xuXG4gICAgICAgICAgICAgIC8vIElmIHRoaXMgbGlzdCBoYXMgYSBwbGFjZWhvbGRlciAodGhlIGNvbm5lY3RlZCBsaXN0cyB3b24ndCksXG4gICAgICAgICAgICAgIC8vIGRvbid0IGlubGN1ZGUgaXQgaW4gc2F2ZWQgbm9kZXMuXG4gICAgICAgICAgICAgIHZhciBwbGFjZWhvbGRlciA9IGVsZW1lbnQuc29ydGFibGUoJ29wdGlvbicsJ3BsYWNlaG9sZGVyJyk7XG5cbiAgICAgICAgICAgICAgLy8gcGxhY2Vob2xkZXIuZWxlbWVudCB3aWxsIGJlIGEgZnVuY3Rpb24gaWYgdGhlIHBsYWNlaG9sZGVyLCBoYXNcbiAgICAgICAgICAgICAgLy8gYmVlbiBjcmVhdGVkIChwbGFjZWhvbGRlciB3aWxsIGJlIGFuIG9iamVjdCkuICBJZiBpdCBoYXNuJ3RcbiAgICAgICAgICAgICAgLy8gYmVlbiBjcmVhdGVkLCBlaXRoZXIgcGxhY2Vob2xkZXIgd2lsbCBiZSBmYWxzZSBpZiBub1xuICAgICAgICAgICAgICAvLyBwbGFjZWhvbGRlciBjbGFzcyB3YXMgZ2l2ZW4gb3IgcGxhY2Vob2xkZXIuZWxlbWVudCB3aWxsIGJlXG4gICAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBpZiBhIGNsYXNzIHdhcyBnaXZlbiAocGxhY2Vob2xkZXIgd2lsbCBiZSBhIHN0cmluZylcbiAgICAgICAgICAgICAgaWYgKHBsYWNlaG9sZGVyICYmIHBsYWNlaG9sZGVyLmVsZW1lbnQgJiYgdHlwZW9mIHBsYWNlaG9sZGVyLmVsZW1lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGhFbGVtZW50ID0gcGxhY2Vob2xkZXIuZWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIC8vIHdvcmthcm91bmQgZm9yIGpxdWVyeSB1aSAxLjkueCxcbiAgICAgICAgICAgICAgICAvLyBub3QgcmV0dXJuaW5nIGpxdWVyeSBjb2xsZWN0aW9uXG4gICAgICAgICAgICAgICAgcGhFbGVtZW50ID0gYW5ndWxhci5lbGVtZW50KHBoRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAvLyBleGFjdCBtYXRjaCB3aXRoIHRoZSBwbGFjZWhvbGRlcidzIGNsYXNzIGF0dHJpYnV0ZSB0byBoYW5kbGVcbiAgICAgICAgICAgICAgICAvLyB0aGUgY2FzZSB0aGF0IG11bHRpcGxlIGNvbm5lY3RlZCBzb3J0YWJsZXMgZXhpc3QgYW5kXG4gICAgICAgICAgICAgICAgLy8gdGhlIHBsYWNlaG9pbGRlciBvcHRpb24gZXF1YWxzIHRoZSBjbGFzcyBvZiBzb3J0YWJsZSBpdGVtc1xuICAgICAgICAgICAgICAgIHZhciBleGNsdWRlcyA9IGVsZW1lbnQuZmluZCgnW2NsYXNzPVwiJyArIHBoRWxlbWVudC5hdHRyKCdjbGFzcycpICsgJ1wiXScpO1xuXG4gICAgICAgICAgICAgICAgc2F2ZWROb2RlcyA9IHNhdmVkTm9kZXMubm90KGV4Y2x1ZGVzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY2FsbGJhY2tzLnVwZGF0ZSA9IGZ1bmN0aW9uKGUsIHVpKSB7XG4gICAgICAgICAgICAgIC8vIFNhdmUgY3VycmVudCBkcm9wIHBvc2l0aW9uIGJ1dCBvbmx5IGlmIHRoaXMgaXMgbm90IGEgc2Vjb25kXG4gICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGF0IGhhcHBlbnMgd2hlbiBtb3ZpbmcgYmV0d2VlbiBsaXN0cyBiZWNhdXNlIHRoZW5cbiAgICAgICAgICAgICAgLy8gdGhlIHZhbHVlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgb2xkIHZhbHVlXG4gICAgICAgICAgICAgIGlmKCF1aS5pdGVtLnNvcnRhYmxlLnJlY2VpdmVkKSB7XG4gICAgICAgICAgICAgICAgdWkuaXRlbS5zb3J0YWJsZS5kcm9waW5kZXggPSB1aS5pdGVtLmluZGV4KCk7XG4gICAgICAgICAgICAgICAgdmFyIGRyb3B0YXJnZXQgPSB1aS5pdGVtLnBhcmVudCgpO1xuICAgICAgICAgICAgICAgIHVpLml0ZW0uc29ydGFibGUuZHJvcHRhcmdldCA9IGRyb3B0YXJnZXQ7XG4gICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBkcm9wdGFyZ2V0LmF0dHIoJ25nLW1vZGVsJykgfHwgZHJvcHRhcmdldC5hdHRyKCdkYXRhLW5nLW1vZGVsJyk7XG4gICAgICAgICAgICAgICAgdWkuaXRlbS5zb3J0YWJsZS5kcm9wdGFyZ2V0TW9kZWwgPSBkcm9wdGFyZ2V0LnNjb3BlKCkuJGV2YWwoYXR0cik7XG5cbiAgICAgICAgICAgICAgICAvLyBDYW5jZWwgdGhlIHNvcnQgKGxldCBuZy1yZXBlYXQgZG8gdGhlIHNvcnQgZm9yIHVzKVxuICAgICAgICAgICAgICAgIC8vIERvbid0IGNhbmNlbCBpZiB0aGlzIGlzIHRoZSByZWNlaXZlZCBsaXN0IGJlY2F1c2UgaXQgaGFzXG4gICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBiZWVuIGNhbmNlbGVkIGluIHRoZSBvdGhlciBsaXN0LCBhbmQgdHJ5aW5nIHRvIGNhbmNlbFxuICAgICAgICAgICAgICAgIC8vIGhlcmUgd2lsbCBtZXNzIHVwIHRoZSBET00uXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zb3J0YWJsZSgnY2FuY2VsJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBQdXQgdGhlIG5vZGVzIGJhY2sgZXhhY3RseSB0aGUgd2F5IHRoZXkgc3RhcnRlZCAodGhpcyBpcyB2ZXJ5XG4gICAgICAgICAgICAgIC8vIGltcG9ydGFudCBiZWNhdXNlIG5nLXJlcGVhdCB1c2VzIGNvbW1lbnQgZWxlbWVudHMgdG8gZGVsaW5lYXRlXG4gICAgICAgICAgICAgIC8vIHRoZSBzdGFydCBhbmQgc3RvcCBvZiByZXBlYXQgc2VjdGlvbnMgYW5kIHNvcnRhYmxlIGRvZXNuJ3RcbiAgICAgICAgICAgICAgLy8gcmVzcGVjdCB0aGVpciBvcmRlciAoZXZlbiBpZiB3ZSBjYW5jZWwsIHRoZSBvcmRlciBvZiB0aGVcbiAgICAgICAgICAgICAgLy8gY29tbWVudHMgYXJlIHN0aWxsIG1lc3NlZCB1cCkuXG4gICAgICAgICAgICAgIGlmIChoYXNTb3J0aW5nSGVscGVyKGVsZW1lbnQsIHVpKSAmJiAhdWkuaXRlbS5zb3J0YWJsZS5yZWNlaXZlZCAmJlxuICAgICAgICAgICAgICAgICAgZWxlbWVudC5zb3J0YWJsZSggJ29wdGlvbicsICdhcHBlbmRUbycgKSA9PT0gJ3BhcmVudCcpIHtcbiAgICAgICAgICAgICAgICAvLyByZXN0b3JlIGFsbCB0aGUgc2F2ZWROb2RlcyBleGNlcHQgLnVpLXNvcnRhYmxlLWhlbHBlciBlbGVtZW50XG4gICAgICAgICAgICAgICAgLy8gKHdoaWNoIGlzIHBsYWNlZCBsYXN0KS4gVGhhdCB3YXkgaXQgd2lsbCBiZSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgICAgICAgICAgICAgICBzYXZlZE5vZGVzID0gc2F2ZWROb2Rlcy5ub3Qoc2F2ZWROb2Rlcy5sYXN0KCkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHNhdmVkTm9kZXMuYXBwZW5kVG8oZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgdGFyZ2V0IGNvbm5lY3RlZCBsaXN0IHRoZW5cbiAgICAgICAgICAgICAgLy8gaXQncyBzYWZlIHRvIGNsZWFyIHRoZSByZXN0b3JlZCBub2RlcyBzaW5jZTpcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIGlzIGN1cnJlbnRseSBydW5uaW5nIGFuZFxuICAgICAgICAgICAgICAvLyBzdG9wIGlzIG5vdCBjYWxsZWQgZm9yIHRoZSB0YXJnZXQgbGlzdC5cbiAgICAgICAgICAgICAgaWYodWkuaXRlbS5zb3J0YWJsZS5yZWNlaXZlZCkge1xuICAgICAgICAgICAgICAgIHNhdmVkTm9kZXMgPSBudWxsO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gSWYgcmVjZWl2ZWQgaXMgdHJ1ZSAoYW4gaXRlbSB3YXMgZHJvcHBlZCBpbiBmcm9tIGFub3RoZXIgbGlzdClcbiAgICAgICAgICAgICAgLy8gdGhlbiB3ZSBhZGQgdGhlIG5ldyBpdGVtIHRvIHRoaXMgbGlzdCBvdGhlcndpc2Ugd2FpdCB1bnRpbCB0aGVcbiAgICAgICAgICAgICAgLy8gc3RvcCBldmVudCB3aGVyZSB3ZSB3aWxsIGtub3cgaWYgaXQgd2FzIGEgc29ydCBvciBpdGVtIHdhc1xuICAgICAgICAgICAgICAvLyBtb3ZlZCBoZXJlIGZyb20gYW5vdGhlciBsaXN0XG4gICAgICAgICAgICAgIGlmKHVpLml0ZW0uc29ydGFibGUucmVjZWl2ZWQgJiYgIXVpLml0ZW0uc29ydGFibGUuaXNDYW5jZWxlZCgpKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIG5nTW9kZWwuJG1vZGVsVmFsdWUuc3BsaWNlKHVpLml0ZW0uc29ydGFibGUuZHJvcGluZGV4LCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkuaXRlbS5zb3J0YWJsZS5tb3ZlZCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrcy5zdG9wID0gZnVuY3Rpb24oZSwgdWkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlY2VpdmVkIGZsYWcgaGFzbid0IGJlIHNldCBvbiB0aGUgaXRlbSwgdGhpcyBpcyBhXG4gICAgICAgICAgICAgIC8vIG5vcm1hbCBzb3J0LCBpZiBkcm9waW5kZXggaXMgc2V0LCB0aGUgaXRlbSB3YXMgbW92ZWQsIHNvIG1vdmVcbiAgICAgICAgICAgICAgLy8gdGhlIGl0ZW1zIGluIHRoZSBsaXN0LlxuICAgICAgICAgICAgICBpZighdWkuaXRlbS5zb3J0YWJsZS5yZWNlaXZlZCAmJlxuICAgICAgICAgICAgICAgICAoJ2Ryb3BpbmRleCcgaW4gdWkuaXRlbS5zb3J0YWJsZSkgJiZcbiAgICAgICAgICAgICAgICAgIXVpLml0ZW0uc29ydGFibGUuaXNDYW5jZWxlZCgpKSB7XG5cbiAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgbmdNb2RlbC4kbW9kZWxWYWx1ZS5zcGxpY2UoXG4gICAgICAgICAgICAgICAgICAgIHVpLml0ZW0uc29ydGFibGUuZHJvcGluZGV4LCAwLFxuICAgICAgICAgICAgICAgICAgICBuZ01vZGVsLiRtb2RlbFZhbHVlLnNwbGljZSh1aS5pdGVtLnNvcnRhYmxlLmluZGV4LCAxKVswXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGl0ZW0gd2FzIG5vdCBtb3ZlZCwgdGhlbiByZXN0b3JlIHRoZSBlbGVtZW50c1xuICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhlIG5nUmVwZWF0J3MgY29tbWVudCBhcmUgY29ycmVjdC5cbiAgICAgICAgICAgICAgICBpZiAoKCEoJ2Ryb3BpbmRleCcgaW4gdWkuaXRlbS5zb3J0YWJsZSkgfHwgdWkuaXRlbS5zb3J0YWJsZS5pc0NhbmNlbGVkKCkpICYmXG4gICAgICAgICAgICAgICAgICAgICFoYXNTb3J0aW5nSGVscGVyKGVsZW1lbnQsIHVpKSkge1xuICAgICAgICAgICAgICAgICAgc2F2ZWROb2Rlcy5hcHBlbmRUbyhlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBJdCdzIG5vdyBzYWZlIHRvIGNsZWFyIHRoZSBzYXZlZE5vZGVzXG4gICAgICAgICAgICAgIC8vIHNpbmNlIHN0b3AgaXMgdGhlIGxhc3QgY2FsbGJhY2suXG4gICAgICAgICAgICAgIHNhdmVkTm9kZXMgPSBudWxsO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY2FsbGJhY2tzLnJlY2VpdmUgPSBmdW5jdGlvbihlLCB1aSkge1xuICAgICAgICAgICAgICAvLyBBbiBpdGVtIHdhcyBkcm9wcGVkIGhlcmUgZnJvbSBhbm90aGVyIGxpc3QsIHNldCBhIGZsYWcgb24gdGhlXG4gICAgICAgICAgICAgIC8vIGl0ZW0uXG4gICAgICAgICAgICAgIHVpLml0ZW0uc29ydGFibGUucmVjZWl2ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY2FsbGJhY2tzLnJlbW92ZSA9IGZ1bmN0aW9uKGUsIHVpKSB7XG4gICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSBvYnNlcnZlZCBpbiBuZXN0ZWQgY29ubmVjdGVkIGxpc3RzLlxuICAgICAgICAgICAgICAvLyBUaGVyZSBzaG91bGQgYmUgYW4gJ3VwZGF0ZScgZXZlbnQgYmVmb3JlICdyZW1vdmUnIHdoZW4gbW92aW5nXG4gICAgICAgICAgICAgIC8vIGVsZW1lbnRzLiBJZiB0aGUgZXZlbnQgZGlkIG5vdCBmaXJlLCBjYW5jZWwgc29ydGluZy5cbiAgICAgICAgICAgICAgaWYgKCEoJ2Ryb3BpbmRleCcgaW4gdWkuaXRlbS5zb3J0YWJsZSkpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNvcnRhYmxlKCdjYW5jZWwnKTtcbiAgICAgICAgICAgICAgICB1aS5pdGVtLnNvcnRhYmxlLmNhbmNlbCgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBpdGVtIGZyb20gdGhpcyBsaXN0J3MgbW9kZWwgYW5kIGNvcHkgZGF0YSBpbnRvIGl0ZW0sXG4gICAgICAgICAgICAgIC8vIHNvIHRoZSBuZXh0IGxpc3QgY2FuIHJldHJpdmUgaXRcbiAgICAgICAgICAgICAgaWYgKCF1aS5pdGVtLnNvcnRhYmxlLmlzQ2FuY2VsZWQoKSkge1xuICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICB1aS5pdGVtLnNvcnRhYmxlLm1vdmVkID0gbmdNb2RlbC4kbW9kZWxWYWx1ZS5zcGxpY2UoXG4gICAgICAgICAgICAgICAgICAgIHVpLml0ZW0uc29ydGFibGUuaW5kZXgsIDEpWzBdO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB3cmFwcGVycy5oZWxwZXIgPSBmdW5jdGlvbiAoaW5uZXIpIHtcbiAgICAgICAgICAgICAgaWYgKGlubmVyICYmIHR5cGVvZiBpbm5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZSwgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgdmFyIGlubmVyUmVzdWx0ID0gaW5uZXIoZSwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICBpdGVtLnNvcnRhYmxlLl9pc0N1c3RvbUhlbHBlclVzZWQgPSBpdGVtICE9PSBpbm5lclJlc3VsdDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpbm5lclJlc3VsdDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBpbm5lcjtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHNjb3BlLiR3YXRjaChhdHRycy51aVNvcnRhYmxlLCBmdW5jdGlvbihuZXdWYWwgLyosIG9sZFZhbCovKSB7XG4gICAgICAgICAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBqcXVlcnktdWktc29ydGFibGUgd2lkZ2V0IGluc3RhbmNlXG4gICAgICAgICAgICAgIC8vIGlzIHN0aWxsIGJvdW5kIHRvIHRoZSBkaXJlY3RpdmUncyBlbGVtZW50XG4gICAgICAgICAgICAgIGlmICghIWVsZW1lbnQuZGF0YSgndWktc29ydGFibGUnKSkge1xuICAgICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChuZXdWYWwsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBjdXN0b20gb3B0aW9uIG9mIHRoZSBkaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgaXQgYXBwcm9wcmlldGx5XG4gICAgICAgICAgICAgICAgICBpZiAoa2V5IGluIGRpcmVjdGl2ZU9wdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3VpLWZsb2F0aW5nJyAmJiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09PSB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZGF0YSgndWktc29ydGFibGUnKS5mbG9hdGluZyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgb3B0c1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrc1trZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKCBrZXkgPT09ICdzdG9wJyApe1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGwgYXBwbHkgYWZ0ZXIgc3RvcFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY29tYmluZUNhbGxiYWNrcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCBmdW5jdGlvbigpIHsgc2NvcGUuJGFwcGx5KCk7IH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjb21iaW5lQ2FsbGJhY2tzKHZhbHVlLCBhZnRlclN0b3ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIHdyYXAgdGhlIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY29tYmluZUNhbGxiYWNrcyhjYWxsYmFja3Nba2V5XSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3cmFwcGVyc1trZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gd3JhcHBlcnNba2V5XSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIG9wdHNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC5zb3J0YWJsZSgnb3B0aW9uJywga2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRydWUpO1xuXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goY2FsbGJhY2tzLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAgICAgICAgIG9wdHNba2V5XSA9IGNvbWJpbmVDYWxsYmFja3ModmFsdWUsIG9wdHNba2V5XSk7XG4gICAgICAgICAgICAgIGlmKCBrZXkgPT09ICdzdG9wJyApe1xuICAgICAgICAgICAgICAgIG9wdHNba2V5XSA9IGNvbWJpbmVDYWxsYmFja3Mob3B0c1trZXldLCBhZnRlclN0b3ApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkbG9nLmluZm8oJ3VpLnNvcnRhYmxlOiBuZ01vZGVsIG5vdCBwcm92aWRlZCEnLCBlbGVtZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDcmVhdGUgc29ydGFibGVcbiAgICAgICAgICBlbGVtZW50LnNvcnRhYmxlKG9wdHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgXSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFuZ3VsYXItc29ydGFibGUuanMiLCJzb3J0YWJsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiYW5ndWxhci1zb3J0YWJsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiLypcclxuIGpRdWVyeSBVSSBTb3J0YWJsZSBwbHVnaW4gd3JhcHBlclxyXG5cclxuIEBwYXJhbSBbdWktc29ydGFibGVdIHtvYmplY3R9IE9wdGlvbnMgdG8gcGFzcyB0byAkLmZuLnNvcnRhYmxlKCkgbWVyZ2VkIG9udG8gdWkuY29uZmlnXHJcbiAqL1xyXG5hbmd1bGFyLm1vZHVsZSgndWkuc29ydGFibGUnLCBbXSlcclxuICAudmFsdWUoJ3VpU29ydGFibGVDb25maWcnLHt9KVxyXG4gIC5kaXJlY3RpdmUoJ3VpU29ydGFibGUnLCBbXHJcbiAgICAndWlTb3J0YWJsZUNvbmZpZycsICckdGltZW91dCcsICckbG9nJyxcclxuICAgIGZ1bmN0aW9uKHVpU29ydGFibGVDb25maWcsICR0aW1lb3V0LCAkbG9nKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVxdWlyZTogJz9uZ01vZGVsJyxcclxuICAgICAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIG5nTW9kZWwpIHtcclxuICAgICAgICAgIHZhciBzYXZlZE5vZGVzO1xyXG5cclxuICAgICAgICAgIGZ1bmN0aW9uIGNvbWJpbmVDYWxsYmFja3MoZmlyc3Qsc2Vjb25kKXtcclxuICAgICAgICAgICAgaWYoc2Vjb25kICYmICh0eXBlb2Ygc2Vjb25kID09PSAnZnVuY3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgZmlyc3QoZSwgdWkpO1xyXG4gICAgICAgICAgICAgICAgc2Vjb25kKGUsIHVpKTtcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmaXJzdDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBmdW5jdGlvbiBoYXNTb3J0aW5nSGVscGVyIChlbGVtZW50LCB1aSkge1xyXG4gICAgICAgICAgICB2YXIgaGVscGVyT3B0aW9uID0gZWxlbWVudC5zb3J0YWJsZSgnb3B0aW9uJywnaGVscGVyJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBoZWxwZXJPcHRpb24gPT09ICdjbG9uZScgfHwgKHR5cGVvZiBoZWxwZXJPcHRpb24gPT09ICdmdW5jdGlvbicgJiYgdWkuaXRlbS5zb3J0YWJsZS5pc0N1c3RvbUhlbHBlclVzZWQoKSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gdGhhbmtzIGpxdWVyeS11aVxyXG4gICAgICAgICAgZnVuY3Rpb24gaXNGbG9hdGluZyAoaXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gKC9sZWZ0fHJpZ2h0LykudGVzdChpdGVtLmNzcygnZmxvYXQnKSkgfHwgKC9pbmxpbmV8dGFibGUtY2VsbC8pLnRlc3QoaXRlbS5jc3MoJ2Rpc3BsYXknKSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZnVuY3Rpb24gYWZ0ZXJTdG9wKGUsIHVpKSB7XHJcbiAgICAgICAgICAgIHVpLml0ZW0uc29ydGFibGUuX2Rlc3Ryb3koKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB2YXIgb3B0cyA9IHt9O1xyXG5cclxuICAgICAgICAgIC8vIGRpcmVjdGl2ZSBzcGVjaWZpYyBvcHRpb25zXHJcbiAgICAgICAgICB2YXIgZGlyZWN0aXZlT3B0cyA9IHtcclxuICAgICAgICAgICAgJ3VpLWZsb2F0aW5nJzogdW5kZWZpbmVkXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHZhciBjYWxsYmFja3MgPSB7XHJcbiAgICAgICAgICAgIHJlY2VpdmU6IG51bGwsXHJcbiAgICAgICAgICAgIHJlbW92ZTpudWxsLFxyXG4gICAgICAgICAgICBzdGFydDpudWxsLFxyXG4gICAgICAgICAgICBzdG9wOm51bGwsXHJcbiAgICAgICAgICAgIHVwZGF0ZTpudWxsXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHZhciB3cmFwcGVycyA9IHtcclxuICAgICAgICAgICAgaGVscGVyOiBudWxsXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGFuZ3VsYXIuZXh0ZW5kKG9wdHMsIGRpcmVjdGl2ZU9wdHMsIHVpU29ydGFibGVDb25maWcsIHNjb3BlLiRldmFsKGF0dHJzLnVpU29ydGFibGUpKTtcclxuXHJcbiAgICAgICAgICBpZiAoIWFuZ3VsYXIuZWxlbWVudC5mbiB8fCAhYW5ndWxhci5lbGVtZW50LmZuLmpxdWVyeSkge1xyXG4gICAgICAgICAgICAkbG9nLmVycm9yKCd1aS5zb3J0YWJsZTogalF1ZXJ5IHNob3VsZCBiZSBpbmNsdWRlZCBiZWZvcmUgQW5ndWxhckpTIScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKG5nTW9kZWwpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYWRkIG9yIHJlbW92ZSBlbGVtZW50cywgd2UgbmVlZCB0aGUgc29ydGFibGUgdG8gJ3JlZnJlc2gnXHJcbiAgICAgICAgICAgIC8vIHNvIGl0IGNhbiBmaW5kIHRoZSBuZXcvcmVtb3ZlZCBlbGVtZW50cy5cclxuICAgICAgICAgICAgc2NvcGUuJHdhdGNoKGF0dHJzLm5nTW9kZWwrJy5sZW5ndGgnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAvLyBUaW1lb3V0IHRvIGxldCBuZy1yZXBlYXQgbW9kaWZ5IHRoZSBET01cclxuICAgICAgICAgICAgICAkdGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBqcXVlcnktdWktc29ydGFibGUgd2lkZ2V0IGluc3RhbmNlXHJcbiAgICAgICAgICAgICAgICAvLyBpcyBzdGlsbCBib3VuZCB0byB0aGUgZGlyZWN0aXZlJ3MgZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgaWYgKCEhZWxlbWVudC5kYXRhKCd1aS1zb3J0YWJsZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc29ydGFibGUoJ3JlZnJlc2gnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9LCAwLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY2FsbGJhY2tzLnN0YXJ0ID0gZnVuY3Rpb24oZSwgdWkpIHtcclxuICAgICAgICAgICAgICBpZiAob3B0c1sndWktZmxvYXRpbmcnXSA9PT0gJ2F1dG8nKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzaW5jZSB0aGUgZHJhZyBoYXMgc3RhcnRlZCwgdGhlIGVsZW1lbnQgd2lsbCBiZVxyXG4gICAgICAgICAgICAgICAgLy8gYWJzb2x1dGVseSBwb3NpdGlvbmVkLCBzbyB3ZSBjaGVjayBpdHMgc2libGluZ3NcclxuICAgICAgICAgICAgICAgIHZhciBzaWJsaW5ncyA9IHVpLml0ZW0uc2libGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIGFuZ3VsYXIuZWxlbWVudChlLnRhcmdldCkuZGF0YSgndWktc29ydGFibGUnKS5mbG9hdGluZyA9IGlzRmxvYXRpbmcoc2libGluZ3MpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgZHJhZ2dlZCBpdGVtXHJcbiAgICAgICAgICAgICAgdWkuaXRlbS5zb3J0YWJsZSA9IHtcclxuICAgICAgICAgICAgICAgIG1vZGVsOiBuZ01vZGVsLiRtb2RlbFZhbHVlW3VpLml0ZW0uaW5kZXgoKV0sXHJcbiAgICAgICAgICAgICAgICBpbmRleDogdWkuaXRlbS5pbmRleCgpLFxyXG4gICAgICAgICAgICAgICAgc291cmNlOiB1aS5pdGVtLnBhcmVudCgpLFxyXG4gICAgICAgICAgICAgICAgc291cmNlTW9kZWw6IG5nTW9kZWwuJG1vZGVsVmFsdWUsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgdWkuaXRlbS5zb3J0YWJsZS5faXNDYW5jZWxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaXNDYW5jZWxlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdWkuaXRlbS5zb3J0YWJsZS5faXNDYW5jZWxlZDtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpc0N1c3RvbUhlbHBlclVzZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuICEhdWkuaXRlbS5zb3J0YWJsZS5faXNDdXN0b21IZWxwZXJVc2VkO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIF9pc0NhbmNlbGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIF9pc0N1c3RvbUhlbHBlclVzZWQ6IHVpLml0ZW0uc29ydGFibGUuX2lzQ3VzdG9tSGVscGVyVXNlZCxcclxuICAgICAgICAgICAgICAgIF9kZXN0cm95OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCh1aS5pdGVtLnNvcnRhYmxlLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdWkuaXRlbS5zb3J0YWJsZVtrZXldID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY2FsbGJhY2tzLmFjdGl2YXRlID0gZnVuY3Rpb24oLyplLCB1aSovKSB7XHJcbiAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIGEgY29weSBvZiB0aGUgY3VycmVudCBlbGVtZW50J3MgY29udGVudHMgc29cclxuICAgICAgICAgICAgICAvLyB3ZSBjYW4gcmVzdG9yZSBpdCBhZnRlciBzb3J0YWJsZSBoYXMgbWVzc2VkIGl0IHVwLlxyXG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgaW5zaWRlIGFjdGl2YXRlIChpbnN0ZWFkIG9mIHN0YXJ0KSBpbiBvcmRlciB0byBzYXZlXHJcbiAgICAgICAgICAgICAgLy8gYm90aCBsaXN0cyB3aGVuIGRyYWdnaW5nIGJldHdlZW4gY29ubmVjdGVkIGxpc3RzLlxyXG4gICAgICAgICAgICAgIHNhdmVkTm9kZXMgPSBlbGVtZW50LmNvbnRlbnRzKCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmIHRoaXMgbGlzdCBoYXMgYSBwbGFjZWhvbGRlciAodGhlIGNvbm5lY3RlZCBsaXN0cyB3b24ndCksXHJcbiAgICAgICAgICAgICAgLy8gZG9uJ3QgaW5sY3VkZSBpdCBpbiBzYXZlZCBub2Rlcy5cclxuICAgICAgICAgICAgICB2YXIgcGxhY2Vob2xkZXIgPSBlbGVtZW50LnNvcnRhYmxlKCdvcHRpb24nLCdwbGFjZWhvbGRlcicpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBwbGFjZWhvbGRlci5lbGVtZW50IHdpbGwgYmUgYSBmdW5jdGlvbiBpZiB0aGUgcGxhY2Vob2xkZXIsIGhhc1xyXG4gICAgICAgICAgICAgIC8vIGJlZW4gY3JlYXRlZCAocGxhY2Vob2xkZXIgd2lsbCBiZSBhbiBvYmplY3QpLiAgSWYgaXQgaGFzbid0XHJcbiAgICAgICAgICAgICAgLy8gYmVlbiBjcmVhdGVkLCBlaXRoZXIgcGxhY2Vob2xkZXIgd2lsbCBiZSBmYWxzZSBpZiBub1xyXG4gICAgICAgICAgICAgIC8vIHBsYWNlaG9sZGVyIGNsYXNzIHdhcyBnaXZlbiBvciBwbGFjZWhvbGRlci5lbGVtZW50IHdpbGwgYmVcclxuICAgICAgICAgICAgICAvLyB1bmRlZmluZWQgaWYgYSBjbGFzcyB3YXMgZ2l2ZW4gKHBsYWNlaG9sZGVyIHdpbGwgYmUgYSBzdHJpbmcpXHJcbiAgICAgICAgICAgICAgaWYgKHBsYWNlaG9sZGVyICYmIHBsYWNlaG9sZGVyLmVsZW1lbnQgJiYgdHlwZW9mIHBsYWNlaG9sZGVyLmVsZW1lbnQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwaEVsZW1lbnQgPSBwbGFjZWhvbGRlci5lbGVtZW50KCk7XHJcbiAgICAgICAgICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciBqcXVlcnkgdWkgMS45LngsXHJcbiAgICAgICAgICAgICAgICAvLyBub3QgcmV0dXJuaW5nIGpxdWVyeSBjb2xsZWN0aW9uXHJcbiAgICAgICAgICAgICAgICBwaEVsZW1lbnQgPSBhbmd1bGFyLmVsZW1lbnQocGhFbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBleGFjdCBtYXRjaCB3aXRoIHRoZSBwbGFjZWhvbGRlcidzIGNsYXNzIGF0dHJpYnV0ZSB0byBoYW5kbGVcclxuICAgICAgICAgICAgICAgIC8vIHRoZSBjYXNlIHRoYXQgbXVsdGlwbGUgY29ubmVjdGVkIHNvcnRhYmxlcyBleGlzdCBhbmRcclxuICAgICAgICAgICAgICAgIC8vIHRoZSBwbGFjZWhvaWxkZXIgb3B0aW9uIGVxdWFscyB0aGUgY2xhc3Mgb2Ygc29ydGFibGUgaXRlbXNcclxuICAgICAgICAgICAgICAgIHZhciBleGNsdWRlcyA9IGVsZW1lbnQuZmluZCgnW2NsYXNzPVwiJyArIHBoRWxlbWVudC5hdHRyKCdjbGFzcycpICsgJ1wiXScpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNhdmVkTm9kZXMgPSBzYXZlZE5vZGVzLm5vdChleGNsdWRlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY2FsbGJhY2tzLnVwZGF0ZSA9IGZ1bmN0aW9uKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgLy8gU2F2ZSBjdXJyZW50IGRyb3AgcG9zaXRpb24gYnV0IG9ubHkgaWYgdGhpcyBpcyBub3QgYSBzZWNvbmRcclxuICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhhdCBoYXBwZW5zIHdoZW4gbW92aW5nIGJldHdlZW4gbGlzdHMgYmVjYXVzZSB0aGVuXHJcbiAgICAgICAgICAgICAgLy8gdGhlIHZhbHVlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgb2xkIHZhbHVlXHJcbiAgICAgICAgICAgICAgaWYoIXVpLml0ZW0uc29ydGFibGUucmVjZWl2ZWQpIHtcclxuICAgICAgICAgICAgICAgIHVpLml0ZW0uc29ydGFibGUuZHJvcGluZGV4ID0gdWkuaXRlbS5pbmRleCgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRyb3B0YXJnZXQgPSB1aS5pdGVtLnBhcmVudCgpO1xyXG4gICAgICAgICAgICAgICAgdWkuaXRlbS5zb3J0YWJsZS5kcm9wdGFyZ2V0ID0gZHJvcHRhcmdldDtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyID0gZHJvcHRhcmdldC5hdHRyKCduZy1tb2RlbCcpIHx8IGRyb3B0YXJnZXQuYXR0cignZGF0YS1uZy1tb2RlbCcpO1xyXG4gICAgICAgICAgICAgICAgdWkuaXRlbS5zb3J0YWJsZS5kcm9wdGFyZ2V0TW9kZWwgPSBkcm9wdGFyZ2V0LnNjb3BlKCkuJGV2YWwoYXR0cik7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ2FuY2VsIHRoZSBzb3J0IChsZXQgbmctcmVwZWF0IGRvIHRoZSBzb3J0IGZvciB1cylcclxuICAgICAgICAgICAgICAgIC8vIERvbid0IGNhbmNlbCBpZiB0aGlzIGlzIHRoZSByZWNlaXZlZCBsaXN0IGJlY2F1c2UgaXQgaGFzXHJcbiAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGJlZW4gY2FuY2VsZWQgaW4gdGhlIG90aGVyIGxpc3QsIGFuZCB0cnlpbmcgdG8gY2FuY2VsXHJcbiAgICAgICAgICAgICAgICAvLyBoZXJlIHdpbGwgbWVzcyB1cCB0aGUgRE9NLlxyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zb3J0YWJsZSgnY2FuY2VsJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvLyBQdXQgdGhlIG5vZGVzIGJhY2sgZXhhY3RseSB0aGUgd2F5IHRoZXkgc3RhcnRlZCAodGhpcyBpcyB2ZXJ5XHJcbiAgICAgICAgICAgICAgLy8gaW1wb3J0YW50IGJlY2F1c2UgbmctcmVwZWF0IHVzZXMgY29tbWVudCBlbGVtZW50cyB0byBkZWxpbmVhdGVcclxuICAgICAgICAgICAgICAvLyB0aGUgc3RhcnQgYW5kIHN0b3Agb2YgcmVwZWF0IHNlY3Rpb25zIGFuZCBzb3J0YWJsZSBkb2Vzbid0XHJcbiAgICAgICAgICAgICAgLy8gcmVzcGVjdCB0aGVpciBvcmRlciAoZXZlbiBpZiB3ZSBjYW5jZWwsIHRoZSBvcmRlciBvZiB0aGVcclxuICAgICAgICAgICAgICAvLyBjb21tZW50cyBhcmUgc3RpbGwgbWVzc2VkIHVwKS5cclxuICAgICAgICAgICAgICBpZiAoaGFzU29ydGluZ0hlbHBlcihlbGVtZW50LCB1aSkgJiYgIXVpLml0ZW0uc29ydGFibGUucmVjZWl2ZWQgJiZcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudC5zb3J0YWJsZSggJ29wdGlvbicsICdhcHBlbmRUbycgKSA9PT0gJ3BhcmVudCcpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJlc3RvcmUgYWxsIHRoZSBzYXZlZE5vZGVzIGV4Y2VwdCAudWktc29ydGFibGUtaGVscGVyIGVsZW1lbnRcclxuICAgICAgICAgICAgICAgIC8vICh3aGljaCBpcyBwbGFjZWQgbGFzdCkuIFRoYXQgd2F5IGl0IHdpbGwgYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuXHJcbiAgICAgICAgICAgICAgICBzYXZlZE5vZGVzID0gc2F2ZWROb2Rlcy5ub3Qoc2F2ZWROb2Rlcy5sYXN0KCkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBzYXZlZE5vZGVzLmFwcGVuZFRvKGVsZW1lbnQpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSB0YXJnZXQgY29ubmVjdGVkIGxpc3QgdGhlblxyXG4gICAgICAgICAgICAgIC8vIGl0J3Mgc2FmZSB0byBjbGVhciB0aGUgcmVzdG9yZWQgbm9kZXMgc2luY2U6XHJcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIGlzIGN1cnJlbnRseSBydW5uaW5nIGFuZFxyXG4gICAgICAgICAgICAgIC8vIHN0b3AgaXMgbm90IGNhbGxlZCBmb3IgdGhlIHRhcmdldCBsaXN0LlxyXG4gICAgICAgICAgICAgIGlmKHVpLml0ZW0uc29ydGFibGUucmVjZWl2ZWQpIHtcclxuICAgICAgICAgICAgICAgIHNhdmVkTm9kZXMgPSBudWxsO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgcmVjZWl2ZWQgaXMgdHJ1ZSAoYW4gaXRlbSB3YXMgZHJvcHBlZCBpbiBmcm9tIGFub3RoZXIgbGlzdClcclxuICAgICAgICAgICAgICAvLyB0aGVuIHdlIGFkZCB0aGUgbmV3IGl0ZW0gdG8gdGhpcyBsaXN0IG90aGVyd2lzZSB3YWl0IHVudGlsIHRoZVxyXG4gICAgICAgICAgICAgIC8vIHN0b3AgZXZlbnQgd2hlcmUgd2Ugd2lsbCBrbm93IGlmIGl0IHdhcyBhIHNvcnQgb3IgaXRlbSB3YXNcclxuICAgICAgICAgICAgICAvLyBtb3ZlZCBoZXJlIGZyb20gYW5vdGhlciBsaXN0XHJcbiAgICAgICAgICAgICAgaWYodWkuaXRlbS5zb3J0YWJsZS5yZWNlaXZlZCAmJiAhdWkuaXRlbS5zb3J0YWJsZS5pc0NhbmNlbGVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIG5nTW9kZWwuJG1vZGVsVmFsdWUuc3BsaWNlKHVpLml0ZW0uc29ydGFibGUuZHJvcGluZGV4LCAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5pdGVtLnNvcnRhYmxlLm1vdmVkKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNhbGxiYWNrcy5zdG9wID0gZnVuY3Rpb24oZSwgdWkpIHtcclxuICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVjZWl2ZWQgZmxhZyBoYXNuJ3QgYmUgc2V0IG9uIHRoZSBpdGVtLCB0aGlzIGlzIGFcclxuICAgICAgICAgICAgICAvLyBub3JtYWwgc29ydCwgaWYgZHJvcGluZGV4IGlzIHNldCwgdGhlIGl0ZW0gd2FzIG1vdmVkLCBzbyBtb3ZlXHJcbiAgICAgICAgICAgICAgLy8gdGhlIGl0ZW1zIGluIHRoZSBsaXN0LlxyXG4gICAgICAgICAgICAgIGlmKCF1aS5pdGVtLnNvcnRhYmxlLnJlY2VpdmVkICYmXHJcbiAgICAgICAgICAgICAgICAgKCdkcm9waW5kZXgnIGluIHVpLml0ZW0uc29ydGFibGUpICYmXHJcbiAgICAgICAgICAgICAgICAgIXVpLml0ZW0uc29ydGFibGUuaXNDYW5jZWxlZCgpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgbmdNb2RlbC4kbW9kZWxWYWx1ZS5zcGxpY2UoXHJcbiAgICAgICAgICAgICAgICAgICAgdWkuaXRlbS5zb3J0YWJsZS5kcm9waW5kZXgsIDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbmdNb2RlbC4kbW9kZWxWYWx1ZS5zcGxpY2UodWkuaXRlbS5zb3J0YWJsZS5pbmRleCwgMSlbMF0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBpdGVtIHdhcyBub3QgbW92ZWQsIHRoZW4gcmVzdG9yZSB0aGUgZWxlbWVudHNcclxuICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhlIG5nUmVwZWF0J3MgY29tbWVudCBhcmUgY29ycmVjdC5cclxuICAgICAgICAgICAgICAgIGlmICgoISgnZHJvcGluZGV4JyBpbiB1aS5pdGVtLnNvcnRhYmxlKSB8fCB1aS5pdGVtLnNvcnRhYmxlLmlzQ2FuY2VsZWQoKSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAhaGFzU29ydGluZ0hlbHBlcihlbGVtZW50LCB1aSkpIHtcclxuICAgICAgICAgICAgICAgICAgc2F2ZWROb2Rlcy5hcHBlbmRUbyhlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIC8vIEl0J3Mgbm93IHNhZmUgdG8gY2xlYXIgdGhlIHNhdmVkTm9kZXNcclxuICAgICAgICAgICAgICAvLyBzaW5jZSBzdG9wIGlzIHRoZSBsYXN0IGNhbGxiYWNrLlxyXG4gICAgICAgICAgICAgIHNhdmVkTm9kZXMgPSBudWxsO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY2FsbGJhY2tzLnJlY2VpdmUgPSBmdW5jdGlvbihlLCB1aSkge1xyXG4gICAgICAgICAgICAgIC8vIEFuIGl0ZW0gd2FzIGRyb3BwZWQgaGVyZSBmcm9tIGFub3RoZXIgbGlzdCwgc2V0IGEgZmxhZyBvbiB0aGVcclxuICAgICAgICAgICAgICAvLyBpdGVtLlxyXG4gICAgICAgICAgICAgIHVpLml0ZW0uc29ydGFibGUucmVjZWl2ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY2FsbGJhY2tzLnJlbW92ZSA9IGZ1bmN0aW9uKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIG9ic2VydmVkIGluIG5lc3RlZCBjb25uZWN0ZWQgbGlzdHMuXHJcbiAgICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIGJlIGFuICd1cGRhdGUnIGV2ZW50IGJlZm9yZSAncmVtb3ZlJyB3aGVuIG1vdmluZ1xyXG4gICAgICAgICAgICAgIC8vIGVsZW1lbnRzLiBJZiB0aGUgZXZlbnQgZGlkIG5vdCBmaXJlLCBjYW5jZWwgc29ydGluZy5cclxuICAgICAgICAgICAgICBpZiAoISgnZHJvcGluZGV4JyBpbiB1aS5pdGVtLnNvcnRhYmxlKSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zb3J0YWJsZSgnY2FuY2VsJyk7XHJcbiAgICAgICAgICAgICAgICB1aS5pdGVtLnNvcnRhYmxlLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBpdGVtIGZyb20gdGhpcyBsaXN0J3MgbW9kZWwgYW5kIGNvcHkgZGF0YSBpbnRvIGl0ZW0sXHJcbiAgICAgICAgICAgICAgLy8gc28gdGhlIG5leHQgbGlzdCBjYW4gcmV0cml2ZSBpdFxyXG4gICAgICAgICAgICAgIGlmICghdWkuaXRlbS5zb3J0YWJsZS5pc0NhbmNlbGVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHVpLml0ZW0uc29ydGFibGUubW92ZWQgPSBuZ01vZGVsLiRtb2RlbFZhbHVlLnNwbGljZShcclxuICAgICAgICAgICAgICAgICAgICB1aS5pdGVtLnNvcnRhYmxlLmluZGV4LCAxKVswXTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHdyYXBwZXJzLmhlbHBlciA9IGZ1bmN0aW9uIChpbm5lcikge1xyXG4gICAgICAgICAgICAgIGlmIChpbm5lciAmJiB0eXBlb2YgaW5uZXIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZSwgaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgaW5uZXJSZXN1bHQgPSBpbm5lcihlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgaXRlbS5zb3J0YWJsZS5faXNDdXN0b21IZWxwZXJVc2VkID0gaXRlbSAhPT0gaW5uZXJSZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpbm5lclJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBpbm5lcjtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHNjb3BlLiR3YXRjaChhdHRycy51aVNvcnRhYmxlLCBmdW5jdGlvbihuZXdWYWwgLyosIG9sZFZhbCovKSB7XHJcbiAgICAgICAgICAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIGpxdWVyeS11aS1zb3J0YWJsZSB3aWRnZXQgaW5zdGFuY2VcclxuICAgICAgICAgICAgICAvLyBpcyBzdGlsbCBib3VuZCB0byB0aGUgZGlyZWN0aXZlJ3MgZWxlbWVudFxyXG4gICAgICAgICAgICAgIGlmICghIWVsZW1lbnQuZGF0YSgndWktc29ydGFibGUnKSkge1xyXG4gICAgICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKG5ld1ZhbCwgZnVuY3Rpb24odmFsdWUsIGtleSkge1xyXG4gICAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIGEgY3VzdG9tIG9wdGlvbiBvZiB0aGUgZGlyZWN0aXZlLFxyXG4gICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgaXQgYXBwcm9wcmlldGx5XHJcbiAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gZGlyZWN0aXZlT3B0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICd1aS1mbG9hdGluZycgJiYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PT0gdHJ1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZGF0YSgndWktc29ydGFibGUnKS5mbG9hdGluZyA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0c1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tzW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZigga2V5ID09PSAnc3RvcCcgKXtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGwgYXBwbHkgYWZ0ZXIgc3RvcFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjb21iaW5lQ2FsbGJhY2tzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgZnVuY3Rpb24oKSB7IHNjb3BlLiRhcHBseSgpOyB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbWJpbmVDYWxsYmFja3ModmFsdWUsIGFmdGVyU3RvcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdyYXAgdGhlIGNhbGxiYWNrXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjb21iaW5lQ2FsbGJhY2tzKGNhbGxiYWNrc1trZXldLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod3JhcHBlcnNba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gd3JhcHBlcnNba2V5XSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIG9wdHNba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50LnNvcnRhYmxlKCdvcHRpb24nLCBrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goY2FsbGJhY2tzLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XHJcbiAgICAgICAgICAgICAgb3B0c1trZXldID0gY29tYmluZUNhbGxiYWNrcyh2YWx1ZSwgb3B0c1trZXldKTtcclxuICAgICAgICAgICAgICBpZigga2V5ID09PSAnc3RvcCcgKXtcclxuICAgICAgICAgICAgICAgIG9wdHNba2V5XSA9IGNvbWJpbmVDYWxsYmFja3Mob3B0c1trZXldLCBhZnRlclN0b3ApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJGxvZy5pbmZvKCd1aS5zb3J0YWJsZTogbmdNb2RlbCBub3QgcHJvdmlkZWQhJywgZWxlbWVudCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQ3JlYXRlIHNvcnRhYmxlXHJcbiAgICAgICAgICBlbGVtZW50LnNvcnRhYmxlKG9wdHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuICBdKTtcclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular.js index c647364bdbe..815f2dcb3fd 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular.js @@ -25754,4 +25754,4 @@ var styleDirective = valueFn({ })(window, document); !window.angular.$$csp() && window.angular.element(document).find('head').prepend(''); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFuZ3VsYXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJhbmd1bGFyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBBbmd1bGFySlMgdjEuMy4zXG4gKiAoYykgMjAxMC0yMDE0IEdvb2dsZSwgSW5jLiBodHRwOi8vYW5ndWxhcmpzLm9yZ1xuICogTGljZW5zZTogTUlUXG4gKi9cbihmdW5jdGlvbih3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQpIHsndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogVGhpcyBvYmplY3QgcHJvdmlkZXMgYSB1dGlsaXR5IGZvciBwcm9kdWNpbmcgcmljaCBFcnJvciBtZXNzYWdlcyB3aXRoaW5cbiAqIEFuZ3VsYXIuIEl0IGNhbiBiZSBjYWxsZWQgYXMgZm9sbG93czpcbiAqXG4gKiB2YXIgZXhhbXBsZU1pbkVyciA9IG1pbkVycignZXhhbXBsZScpO1xuICogdGhyb3cgZXhhbXBsZU1pbkVycignb25lJywgJ1RoaXMgezB9IGlzIHsxfScsIGZvbywgYmFyKTtcbiAqXG4gKiBUaGUgYWJvdmUgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBtaW5FcnIgaW4gdGhlIGV4YW1wbGUgbmFtZXNwYWNlLiBUaGVcbiAqIHJlc3VsdGluZyBlcnJvciB3aWxsIGhhdmUgYSBuYW1lc3BhY2VkIGVycm9yIGNvZGUgb2YgZXhhbXBsZS5vbmUuICBUaGVcbiAqIHJlc3VsdGluZyBlcnJvciB3aWxsIHJlcGxhY2UgezB9IHdpdGggdGhlIHZhbHVlIG9mIGZvbywgYW5kIHsxfSB3aXRoIHRoZVxuICogdmFsdWUgb2YgYmFyLiBUaGUgb2JqZWN0IGlzIG5vdCByZXN0cmljdGVkIGluIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGl0IGNhblxuICogdGFrZS5cbiAqXG4gKiBJZiBmZXdlciBhcmd1bWVudHMgYXJlIHNwZWNpZmllZCB0aGFuIG5lY2Vzc2FyeSBmb3IgaW50ZXJwb2xhdGlvbiwgdGhlIGV4dHJhXG4gKiBpbnRlcnBvbGF0aW9uIG1hcmtlcnMgd2lsbCBiZSBwcmVzZXJ2ZWQgaW4gdGhlIGZpbmFsIHN0cmluZy5cbiAqXG4gKiBTaW5jZSBkYXRhIHdpbGwgYmUgcGFyc2VkIHN0YXRpY2FsbHkgZHVyaW5nIGEgYnVpbGQgc3RlcCwgc29tZSByZXN0cmljdGlvbnNcbiAqIGFyZSBhcHBsaWVkIHdpdGggcmVzcGVjdCB0byBob3cgbWluRXJyIGluc3RhbmNlcyBhcmUgY3JlYXRlZCBhbmQgY2FsbGVkLlxuICogSW5zdGFuY2VzIHNob3VsZCBoYXZlIG5hbWVzIG9mIHRoZSBmb3JtIG5hbWVzcGFjZU1pbkVyciBmb3IgYSBtaW5FcnIgY3JlYXRlZFxuICogdXNpbmcgbWluRXJyKCduYW1lc3BhY2UnKSAuIEVycm9yIGNvZGVzLCBuYW1lc3BhY2VzIGFuZCB0ZW1wbGF0ZSBzdHJpbmdzXG4gKiBzaG91bGQgYWxsIGJlIHN0YXRpYyBzdHJpbmdzLCBub3QgdmFyaWFibGVzIG9yIGdlbmVyYWwgZXhwcmVzc2lvbnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZSBUaGUgbmFtZXNwYWNlIHRvIHVzZSBmb3IgdGhlIG5ldyBtaW5FcnIgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBFcnJvckNvbnN0cnVjdG9yIEN1c3RvbSBlcnJvciBjb25zdHJ1Y3RvciB0byBiZSBpbnN0YW50aWF0ZWQgd2hlbiByZXR1cm5pbmdcbiAqICAgZXJyb3IgZnJvbSByZXR1cm5lZCBmdW5jdGlvbiwgZm9yIGNhc2VzIHdoZW4gYSBwYXJ0aWN1bGFyIHR5cGUgb2YgZXJyb3IgaXMgdXNlZnVsLlxuICogQHJldHVybnMge2Z1bmN0aW9uKGNvZGU6c3RyaW5nLCB0ZW1wbGF0ZTpzdHJpbmcsIC4uLnRlbXBsYXRlQXJncyk6IEVycm9yfSBtaW5FcnIgaW5zdGFuY2VcbiAqL1xuXG5mdW5jdGlvbiBtaW5FcnIobW9kdWxlLCBFcnJvckNvbnN0cnVjdG9yKSB7XG4gIEVycm9yQ29uc3RydWN0b3IgPSBFcnJvckNvbnN0cnVjdG9yIHx8IEVycm9yO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNvZGUgPSBhcmd1bWVudHNbMF0sXG4gICAgICBwcmVmaXggPSAnWycgKyAobW9kdWxlID8gbW9kdWxlICsgJzonIDogJycpICsgY29kZSArICddICcsXG4gICAgICB0ZW1wbGF0ZSA9IGFyZ3VtZW50c1sxXSxcbiAgICAgIHRlbXBsYXRlQXJncyA9IGFyZ3VtZW50cyxcblxuICAgICAgbWVzc2FnZSwgaTtcblxuICAgIG1lc3NhZ2UgPSBwcmVmaXggKyB0ZW1wbGF0ZS5yZXBsYWNlKC9cXHtcXGQrXFx9L2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgICB2YXIgaW5kZXggPSArbWF0Y2guc2xpY2UoMSwgLTEpLCBhcmc7XG5cbiAgICAgIGlmIChpbmRleCArIDIgPCB0ZW1wbGF0ZUFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0b0RlYnVnU3RyaW5nKHRlbXBsYXRlQXJnc1tpbmRleCArIDJdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcblxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgJ1xcbmh0dHA6Ly9lcnJvcnMuYW5ndWxhcmpzLm9yZy8xLjMuMy8nICtcbiAgICAgIChtb2R1bGUgPyBtb2R1bGUgKyAnLycgOiAnJykgKyBjb2RlO1xuICAgIGZvciAoaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgKGkgPT0gMiA/ICc/JyA6ICcmJykgKyAncCcgKyAoaSAtIDIpICsgJz0nICtcbiAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHRvRGVidWdTdHJpbmcoYXJndW1lbnRzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRXJyb3JDb25zdHJ1Y3RvcihtZXNzYWdlKTtcbiAgfTtcbn1cblxuLyogV2UgbmVlZCB0byB0ZWxsIGpzaGludCB3aGF0IHZhcmlhYmxlcyBhcmUgYmVpbmcgZXhwb3J0ZWQgKi9cbi8qIGdsb2JhbCBhbmd1bGFyOiB0cnVlLFxuICBtc2llOiB0cnVlLFxuICBqcUxpdGU6IHRydWUsXG4gIGpRdWVyeTogdHJ1ZSxcbiAgc2xpY2U6IHRydWUsXG4gIHNwbGljZTogdHJ1ZSxcbiAgcHVzaDogdHJ1ZSxcbiAgdG9TdHJpbmc6IHRydWUsXG4gIG5nTWluRXJyOiB0cnVlLFxuICBhbmd1bGFyTW9kdWxlOiB0cnVlLFxuICB1aWQ6IHRydWUsXG4gIFJFR0VYX1NUUklOR19SRUdFWFA6IHRydWUsXG4gIFZBTElESVRZX1NUQVRFX1BST1BFUlRZOiB0cnVlLFxuXG4gIGxvd2VyY2FzZTogdHJ1ZSxcbiAgdXBwZXJjYXNlOiB0cnVlLFxuICBtYW51YWxMb3dlcmNhc2U6IHRydWUsXG4gIG1hbnVhbFVwcGVyY2FzZTogdHJ1ZSxcbiAgbm9kZU5hbWVfOiB0cnVlLFxuICBpc0FycmF5TGlrZTogdHJ1ZSxcbiAgZm9yRWFjaDogdHJ1ZSxcbiAgc29ydGVkS2V5czogdHJ1ZSxcbiAgZm9yRWFjaFNvcnRlZDogdHJ1ZSxcbiAgcmV2ZXJzZVBhcmFtczogdHJ1ZSxcbiAgbmV4dFVpZDogdHJ1ZSxcbiAgc2V0SGFzaEtleTogdHJ1ZSxcbiAgZXh0ZW5kOiB0cnVlLFxuICBpbnQ6IHRydWUsXG4gIGluaGVyaXQ6IHRydWUsXG4gIG5vb3A6IHRydWUsXG4gIGlkZW50aXR5OiB0cnVlLFxuICB2YWx1ZUZuOiB0cnVlLFxuICBpc1VuZGVmaW5lZDogdHJ1ZSxcbiAgaXNEZWZpbmVkOiB0cnVlLFxuICBpc09iamVjdDogdHJ1ZSxcbiAgaXNTdHJpbmc6IHRydWUsXG4gIGlzTnVtYmVyOiB0cnVlLFxuICBpc0RhdGU6IHRydWUsXG4gIGlzQXJyYXk6IHRydWUsXG4gIGlzRnVuY3Rpb246IHRydWUsXG4gIGlzUmVnRXhwOiB0cnVlLFxuICBpc1dpbmRvdzogdHJ1ZSxcbiAgaXNTY29wZTogdHJ1ZSxcbiAgaXNGaWxlOiB0cnVlLFxuICBpc0Jsb2I6IHRydWUsXG4gIGlzQm9vbGVhbjogdHJ1ZSxcbiAgaXNQcm9taXNlTGlrZTogdHJ1ZSxcbiAgdHJpbTogdHJ1ZSxcbiAgZXNjYXBlRm9yUmVnZXhwOiB0cnVlLFxuICBpc0VsZW1lbnQ6IHRydWUsXG4gIG1ha2VNYXA6IHRydWUsXG4gIGluY2x1ZGVzOiB0cnVlLFxuICBhcnJheVJlbW92ZTogdHJ1ZSxcbiAgY29weTogdHJ1ZSxcbiAgc2hhbGxvd0NvcHk6IHRydWUsXG4gIGVxdWFsczogdHJ1ZSxcbiAgY3NwOiB0cnVlLFxuICBjb25jYXQ6IHRydWUsXG4gIHNsaWNlQXJnczogdHJ1ZSxcbiAgYmluZDogdHJ1ZSxcbiAgdG9Kc29uUmVwbGFjZXI6IHRydWUsXG4gIHRvSnNvbjogdHJ1ZSxcbiAgZnJvbUpzb246IHRydWUsXG4gIHN0YXJ0aW5nVGFnOiB0cnVlLFxuICB0cnlEZWNvZGVVUklDb21wb25lbnQ6IHRydWUsXG4gIHBhcnNlS2V5VmFsdWU6IHRydWUsXG4gIHRvS2V5VmFsdWU6IHRydWUsXG4gIGVuY29kZVVyaVNlZ21lbnQ6IHRydWUsXG4gIGVuY29kZVVyaVF1ZXJ5OiB0cnVlLFxuICBhbmd1bGFySW5pdDogdHJ1ZSxcbiAgYm9vdHN0cmFwOiB0cnVlLFxuICBnZXRUZXN0YWJpbGl0eTogdHJ1ZSxcbiAgc25ha2VfY2FzZTogdHJ1ZSxcbiAgYmluZEpRdWVyeTogdHJ1ZSxcbiAgYXNzZXJ0QXJnOiB0cnVlLFxuICBhc3NlcnRBcmdGbjogdHJ1ZSxcbiAgYXNzZXJ0Tm90SGFzT3duUHJvcGVydHk6IHRydWUsXG4gIGdldHRlcjogdHJ1ZSxcbiAgZ2V0QmxvY2tOb2RlczogdHJ1ZSxcbiAgaGFzT3duUHJvcGVydHk6IHRydWUsXG4gIGNyZWF0ZU1hcDogdHJ1ZSxcblxuICBOT0RFX1RZUEVfRUxFTUVOVDogdHJ1ZSxcbiAgTk9ERV9UWVBFX1RFWFQ6IHRydWUsXG4gIE5PREVfVFlQRV9DT01NRU5UOiB0cnVlLFxuICBOT0RFX1RZUEVfRE9DVU1FTlQ6IHRydWUsXG4gIE5PREVfVFlQRV9ET0NVTUVOVF9GUkFHTUVOVDogdHJ1ZSxcbiovXG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIEBuZ2RvYyBtb2R1bGVcbiAqIEBuYW1lIG5nXG4gKiBAbW9kdWxlIG5nXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiAjIG5nIChjb3JlIG1vZHVsZSlcbiAqIFRoZSBuZyBtb2R1bGUgaXMgbG9hZGVkIGJ5IGRlZmF1bHQgd2hlbiBhbiBBbmd1bGFySlMgYXBwbGljYXRpb24gaXMgc3RhcnRlZC4gVGhlIG1vZHVsZSBpdHNlbGZcbiAqIGNvbnRhaW5zIHRoZSBlc3NlbnRpYWwgY29tcG9uZW50cyBmb3IgYW4gQW5ndWxhckpTIGFwcGxpY2F0aW9uIHRvIGZ1bmN0aW9uLiBUaGUgdGFibGUgYmVsb3dcbiAqIGxpc3RzIGEgaGlnaCBsZXZlbCBicmVha2Rvd24gb2YgZWFjaCBvZiB0aGUgc2VydmljZXMvZmFjdG9yaWVzLCBmaWx0ZXJzLCBkaXJlY3RpdmVzIGFuZCB0ZXN0aW5nXG4gKiBjb21wb25lbnRzIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBjb3JlIG1vZHVsZS5cbiAqXG4gKiA8ZGl2IGRvYy1tb2R1bGUtY29tcG9uZW50cz1cIm5nXCI+PC9kaXY+XG4gKi9cblxudmFyIFJFR0VYX1NUUklOR19SRUdFWFAgPSAvXlxcLyguKylcXC8oW2Etel0qKSQvO1xuXG4vLyBUaGUgbmFtZSBvZiBhIGZvcm0gY29udHJvbCdzIFZhbGlkaXR5U3RhdGUgcHJvcGVydHkuXG4vLyBUaGlzIGlzIHVzZWQgc28gdGhhdCBpdCdzIHBvc3NpYmxlIGZvciBpbnRlcm5hbCB0ZXN0cyB0byBjcmVhdGUgbW9jayBWYWxpZGl0eVN0YXRlcy5cbnZhciBWQUxJRElUWV9TVEFURV9QUk9QRVJUWSA9ICd2YWxpZGl0eSc7XG5cbi8qKlxuICogQG5nZG9jIGZ1bmN0aW9uXG4gKiBAbmFtZSBhbmd1bGFyLmxvd2VyY2FzZVxuICogQG1vZHVsZSBuZ1xuICogQGtpbmQgZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIHNwZWNpZmllZCBzdHJpbmcgdG8gbG93ZXJjYXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTdHJpbmcgdG8gYmUgY29udmVydGVkIHRvIGxvd2VyY2FzZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IExvd2VyY2FzZWQgc3RyaW5nLlxuICovXG52YXIgbG93ZXJjYXNlID0gZnVuY3Rpb24oc3RyaW5nKSB7cmV0dXJuIGlzU3RyaW5nKHN0cmluZykgPyBzdHJpbmcudG9Mb3dlckNhc2UoKSA6IHN0cmluZzt9O1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIGFuZ3VsYXIudXBwZXJjYXNlXG4gKiBAbW9kdWxlIG5nXG4gKiBAa2luZCBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIHN0cmluZyB0byB1cHBlcmNhc2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFN0cmluZyB0byBiZSBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLlxuICogQHJldHVybnMge3N0cmluZ30gVXBwZXJjYXNlZCBzdHJpbmcuXG4gKi9cbnZhciB1cHBlcmNhc2UgPSBmdW5jdGlvbihzdHJpbmcpIHtyZXR1cm4gaXNTdHJpbmcoc3RyaW5nKSA/IHN0cmluZy50b1VwcGVyQ2FzZSgpIDogc3RyaW5nO307XG5cblxudmFyIG1hbnVhbExvd2VyY2FzZSA9IGZ1bmN0aW9uKHMpIHtcbiAgLyoganNoaW50IGJpdHdpc2U6IGZhbHNlICovXG4gIHJldHVybiBpc1N0cmluZyhzKVxuICAgICAgPyBzLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uKGNoKSB7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY2guY2hhckNvZGVBdCgwKSB8IDMyKTt9KVxuICAgICAgOiBzO1xufTtcbnZhciBtYW51YWxVcHBlcmNhc2UgPSBmdW5jdGlvbihzKSB7XG4gIC8qIGpzaGludCBiaXR3aXNlOiBmYWxzZSAqL1xuICByZXR1cm4gaXNTdHJpbmcocylcbiAgICAgID8gcy5yZXBsYWNlKC9bYS16XS9nLCBmdW5jdGlvbihjaCkge3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoLmNoYXJDb2RlQXQoMCkgJiB+MzIpO30pXG4gICAgICA6IHM7XG59O1xuXG5cbi8vIFN0cmluZyN0b0xvd2VyQ2FzZSBhbmQgU3RyaW5nI3RvVXBwZXJDYXNlIGRvbid0IHByb2R1Y2UgY29ycmVjdCByZXN1bHRzIGluIGJyb3dzZXJzIHdpdGggVHVya2lzaFxuLy8gbG9jYWxlLCBmb3IgdGhpcyByZWFzb24gd2UgbmVlZCB0byBkZXRlY3QgdGhpcyBjYXNlIGFuZCByZWRlZmluZSBsb3dlcmNhc2UvdXBwZXJjYXNlIG1ldGhvZHNcbi8vIHdpdGggY29ycmVjdCBidXQgc2xvd2VyIGFsdGVybmF0aXZlcy5cbmlmICgnaScgIT09ICdJJy50b0xvd2VyQ2FzZSgpKSB7XG4gIGxvd2VyY2FzZSA9IG1hbnVhbExvd2VyY2FzZTtcbiAgdXBwZXJjYXNlID0gbWFudWFsVXBwZXJjYXNlO1xufVxuXG5cbnZhciAvKiogaG9sZHMgbWFqb3IgdmVyc2lvbiBudW1iZXIgZm9yIElFIG9yIE5hTiBmb3IgcmVhbCBicm93c2VycyAqL1xuICAgIG1zaWUsXG4gICAganFMaXRlLCAgICAgICAgICAgLy8gZGVsYXkgYmluZGluZyBzaW5jZSBqUXVlcnkgY291bGQgYmUgbG9hZGVkIGFmdGVyIHVzLlxuICAgIGpRdWVyeSwgICAgICAgICAgIC8vIGRlbGF5IGJpbmRpbmdcbiAgICBzbGljZSAgICAgICAgICAgICA9IFtdLnNsaWNlLFxuICAgIHNwbGljZSAgICAgICAgICAgID0gW10uc3BsaWNlLFxuICAgIHB1c2ggICAgICAgICAgICAgID0gW10ucHVzaCxcbiAgICB0b1N0cmluZyAgICAgICAgICA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsXG4gICAgbmdNaW5FcnIgICAgICAgICAgPSBtaW5FcnIoJ25nJyksXG5cbiAgICAvKiogQG5hbWUgYW5ndWxhciAqL1xuICAgIGFuZ3VsYXIgICAgICAgICAgID0gd2luZG93LmFuZ3VsYXIgfHwgKHdpbmRvdy5hbmd1bGFyID0ge30pLFxuICAgIGFuZ3VsYXJNb2R1bGUsXG4gICAgdWlkICAgICAgICAgICAgICAgPSAwO1xuXG4vKipcbiAqIGRvY3VtZW50TW9kZSBpcyBhbiBJRS1vbmx5IHByb3BlcnR5XG4gKiBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvY2MxOTY5ODgodj12cy44NSkuYXNweFxuICovXG5tc2llID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xuXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gb2JqXG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgYG9iamAgaXMgYW4gYXJyYXkgb3IgYXJyYXktbGlrZSBvYmplY3QgKE5vZGVMaXN0LCBBcmd1bWVudHMsXG4gKiAgICAgICAgICAgICAgICAgICBTdHJpbmcgLi4uKVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZShvYmopIHtcbiAgaWYgKG9iaiA9PSBudWxsIHx8IGlzV2luZG93KG9iaikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgbGVuZ3RoID0gb2JqLmxlbmd0aDtcblxuICBpZiAob2JqLm5vZGVUeXBlID09PSBOT0RFX1RZUEVfRUxFTUVOVCAmJiBsZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBpc1N0cmluZyhvYmopIHx8IGlzQXJyYXkob2JqKSB8fCBsZW5ndGggPT09IDAgfHxcbiAgICAgICAgIHR5cGVvZiBsZW5ndGggPT09ICdudW1iZXInICYmIGxlbmd0aCA+IDAgJiYgKGxlbmd0aCAtIDEpIGluIG9iajtcbn1cblxuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIGFuZ3VsYXIuZm9yRWFjaFxuICogQG1vZHVsZSBuZ1xuICogQGtpbmQgZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEludm9rZXMgdGhlIGBpdGVyYXRvcmAgZnVuY3Rpb24gb25jZSBmb3IgZWFjaCBpdGVtIGluIGBvYmpgIGNvbGxlY3Rpb24sIHdoaWNoIGNhbiBiZSBlaXRoZXIgYW5cbiAqIG9iamVjdCBvciBhbiBhcnJheS4gVGhlIGBpdGVyYXRvcmAgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIGBpdGVyYXRvcih2YWx1ZSwga2V5LCBvYmopYCwgd2hlcmUgYHZhbHVlYFxuICogaXMgdGhlIHZhbHVlIG9mIGFuIG9iamVjdCBwcm9wZXJ0eSBvciBhbiBhcnJheSBlbGVtZW50LCBga2V5YCBpcyB0aGUgb2JqZWN0IHByb3BlcnR5IGtleSBvclxuICogYXJyYXkgZWxlbWVudCBpbmRleCBhbmQgb2JqIGlzIHRoZSBgb2JqYCBpdHNlbGYuIFNwZWNpZnlpbmcgYSBgY29udGV4dGAgZm9yIHRoZSBmdW5jdGlvbiBpcyBvcHRpb25hbC5cbiAqXG4gKiBJdCBpcyB3b3J0aCBub3RpbmcgdGhhdCBgLmZvckVhY2hgIGRvZXMgbm90IGl0ZXJhdGUgb3ZlciBpbmhlcml0ZWQgcHJvcGVydGllcyBiZWNhdXNlIGl0IGZpbHRlcnNcbiAqIHVzaW5nIHRoZSBgaGFzT3duUHJvcGVydHlgIG1ldGhvZC5cbiAqXG4gKiBVbmxpa2UgRVMyNjInc1xuICogW0FycmF5LnByb3RvdHlwZS5mb3JFYWNoXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtMTUuNC40LjE4KSxcbiAqIFByb3ZpZGluZyAndW5kZWZpbmVkJyBvciAnbnVsbCcgdmFsdWVzIGZvciBgb2JqYCB3aWxsIG5vdCB0aHJvdyBhIFR5cGVFcnJvciwgYnV0IHJhdGhlciBqdXN0XG4gKiByZXR1cm4gdGhlIHZhbHVlIHByb3ZpZGVkLlxuICpcbiAgIGBgYGpzXG4gICAgIHZhciB2YWx1ZXMgPSB7bmFtZTogJ21pc2tvJywgZ2VuZGVyOiAnbWFsZSd9O1xuICAgICB2YXIgbG9nID0gW107XG4gICAgIGFuZ3VsYXIuZm9yRWFjaCh2YWx1ZXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICB0aGlzLnB1c2goa2V5ICsgJzogJyArIHZhbHVlKTtcbiAgICAgfSwgbG9nKTtcbiAgICAgZXhwZWN0KGxvZykudG9FcXVhbChbJ25hbWU6IG1pc2tvJywgJ2dlbmRlcjogbWFsZSddKTtcbiAgIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogT2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdG9yIEl0ZXJhdG9yIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb250ZXh0IE9iamVjdCB0byBiZWNvbWUgY29udGV4dCAoYHRoaXNgKSBmb3IgdGhlIGl0ZXJhdG9yIGZ1bmN0aW9uLlxuICogQHJldHVybnMge09iamVjdHxBcnJheX0gUmVmZXJlbmNlIHRvIGBvYmpgLlxuICovXG5cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICB2YXIga2V5LCBsZW5ndGg7XG4gIGlmIChvYmopIHtcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopKSB7XG4gICAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgLy8gTmVlZCB0byBjaGVjayBpZiBoYXNPd25Qcm9wZXJ0eSBleGlzdHMsXG4gICAgICAgIC8vIGFzIG9uIElFOCB0aGUgcmVzdWx0IG9mIHF1ZXJ5U2VsZWN0b3JBbGwgaXMgYW4gb2JqZWN0IHdpdGhvdXQgYSBoYXNPd25Qcm9wZXJ0eSBmdW5jdGlvblxuICAgICAgICBpZiAoa2V5ICE9ICdwcm90b3R5cGUnICYmIGtleSAhPSAnbGVuZ3RoJyAmJiBrZXkgIT0gJ25hbWUnICYmICghb2JqLmhhc093blByb3BlcnR5IHx8IG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSkge1xuICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmopIHx8IGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAgIHZhciBpc1ByaW1pdGl2ZSA9IHR5cGVvZiBvYmogIT09ICdvYmplY3QnO1xuICAgICAgZm9yIChrZXkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBrZXkgPCBsZW5ndGg7IGtleSsrKSB7XG4gICAgICAgIGlmIChpc1ByaW1pdGl2ZSB8fCBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvYmouZm9yRWFjaCAmJiBvYmouZm9yRWFjaCAhPT0gZm9yRWFjaCkge1xuICAgICAgICBvYmouZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCwgb2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBzb3J0ZWRLZXlzKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5zb3J0KCk7XG59XG5cbmZ1bmN0aW9uIGZvckVhY2hTb3J0ZWQob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICB2YXIga2V5cyA9IHNvcnRlZEtleXMob2JqKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpba2V5c1tpXV0sIGtleXNbaV0pO1xuICB9XG4gIHJldHVybiBrZXlzO1xufVxuXG5cbi8qKlxuICogd2hlbiB1c2luZyBmb3JFYWNoIHRoZSBwYXJhbXMgYXJlIHZhbHVlLCBrZXksIGJ1dCBpdCBpcyBvZnRlbiB1c2VmdWwgdG8gaGF2ZSBrZXksIHZhbHVlLlxuICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcsICopfSBpdGVyYXRvckZuXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oKiwgc3RyaW5nKX1cbiAqL1xuZnVuY3Rpb24gcmV2ZXJzZVBhcmFtcyhpdGVyYXRvckZuKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwga2V5KSB7IGl0ZXJhdG9yRm4oa2V5LCB2YWx1ZSk7IH07XG59XG5cbi8qKlxuICogQSBjb25zaXN0ZW50IHdheSBvZiBjcmVhdGluZyB1bmlxdWUgSURzIGluIGFuZ3VsYXIuXG4gKlxuICogVXNpbmcgc2ltcGxlIG51bWJlcnMgYWxsb3dzIHVzIHRvIGdlbmVyYXRlIDI4LjYgbWlsbGlvbiB1bmlxdWUgaWRzIHBlciBzZWNvbmQgZm9yIDEwIHllYXJzIGJlZm9yZVxuICogd2UgaGl0IG51bWJlciBwcmVjaXNpb24gaXNzdWVzIGluIEphdmFTY3JpcHQuXG4gKlxuICogTWF0aC5wb3coMiw1MykgLyA2MCAvIDYwIC8gMjQgLyAzNjUgLyAxMCA9IDI4LjZNXG4gKlxuICogQHJldHVybnMge251bWJlcn0gYW4gdW5pcXVlIGFscGhhLW51bWVyaWMgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIG5leHRVaWQoKSB7XG4gIHJldHVybiArK3VpZDtcbn1cblxuXG4vKipcbiAqIFNldCBvciBjbGVhciB0aGUgaGFzaGtleSBmb3IgYW4gb2JqZWN0LlxuICogQHBhcmFtIG9iaiBvYmplY3RcbiAqIEBwYXJhbSBoIHRoZSBoYXNoa2V5ICghdHJ1dGh5IHRvIGRlbGV0ZSB0aGUgaGFzaGtleSlcbiAqL1xuZnVuY3Rpb24gc2V0SGFzaEtleShvYmosIGgpIHtcbiAgaWYgKGgpIHtcbiAgICBvYmouJCRoYXNoS2V5ID0gaDtcbiAgfVxuICBlbHNlIHtcbiAgICBkZWxldGUgb2JqLiQkaGFzaEtleTtcbiAgfVxufVxuXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgYW5ndWxhci5leHRlbmRcbiAqIEBtb2R1bGUgbmdcbiAqIEBraW5kIGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBFeHRlbmRzIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QgYGRzdGAgYnkgY29weWluZyBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGZyb20gdGhlIGBzcmNgIG9iamVjdChzKVxuICogdG8gYGRzdGAuIFlvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSBgc3JjYCBvYmplY3RzLiBJZiB5b3Ugd2FudCB0byBwcmVzZXJ2ZSBvcmlnaW5hbCBvYmplY3RzLCB5b3UgY2FuIGRvIHNvXG4gKiBieSBwYXNzaW5nIGFuIGVtcHR5IG9iamVjdCBhcyB0aGUgdGFyZ2V0OiBgdmFyIG9iamVjdCA9IGFuZ3VsYXIuZXh0ZW5kKHt9LCBvYmplY3QxLCBvYmplY3QyKWAuXG4gKiBOb3RlOiBLZWVwIGluIG1pbmQgdGhhdCBgYW5ndWxhci5leHRlbmRgIGRvZXMgbm90IHN1cHBvcnQgcmVjdXJzaXZlIG1lcmdlIChkZWVwIGNvcHkpLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkc3QgRGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IHNyYyBTb3VyY2Ugb2JqZWN0KHMpLlxuICogQHJldHVybnMge09iamVjdH0gUmVmZXJlbmNlIHRvIGBkc3RgLlxuICovXG5mdW5jdGlvbiBleHRlbmQoZHN0KSB7XG4gIHZhciBoID0gZHN0LiQkaGFzaEtleTtcblxuICBmb3IgKHZhciBpID0gMSwgaWkgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIHZhciBvYmogPSBhcmd1bWVudHNbaV07XG4gICAgaWYgKG9iaikge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0ga2V5cy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2pdO1xuICAgICAgICBkc3Rba2V5XSA9IG9ialtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEhhc2hLZXkoZHN0LCBoKTtcbiAgcmV0dXJuIGRzdDtcbn1cblxuZnVuY3Rpb24gaW50KHN0cikge1xuICByZXR1cm4gcGFyc2VJbnQoc3RyLCAxMCk7XG59XG5cblxuZnVuY3Rpb24gaW5oZXJpdChwYXJlbnQsIGV4dHJhKSB7XG4gIHJldHVybiBleHRlbmQobmV3IChleHRlbmQoZnVuY3Rpb24oKSB7fSwge3Byb3RvdHlwZTpwYXJlbnR9KSkoKSwgZXh0cmEpO1xufVxuXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgYW5ndWxhci5ub29wXG4gKiBAbW9kdWxlIG5nXG4gKiBAa2luZCBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIG5vIG9wZXJhdGlvbnMuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWZ1bCB3aGVuIHdyaXRpbmcgY29kZSBpbiB0aGVcbiAqIGZ1bmN0aW9uYWwgc3R5bGUuXG4gICBgYGBqc1xuICAgICBmdW5jdGlvbiBmb28oY2FsbGJhY2spIHtcbiAgICAgICB2YXIgcmVzdWx0ID0gY2FsY3VsYXRlUmVzdWx0KCk7XG4gICAgICAgKGNhbGxiYWNrIHx8IGFuZ3VsYXIubm9vcCkocmVzdWx0KTtcbiAgICAgfVxuICAgYGBgXG4gKi9cbmZ1bmN0aW9uIG5vb3AoKSB7fVxubm9vcC4kaW5qZWN0ID0gW107XG5cblxuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIGFuZ3VsYXIuaWRlbnRpdHlcbiAqIEBtb2R1bGUgbmdcbiAqIEBraW5kIGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBpdHMgZmlyc3QgYXJndW1lbnQuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHdoZW4gd3JpdGluZyBjb2RlIGluIHRoZVxuICogZnVuY3Rpb25hbCBzdHlsZS5cbiAqXG4gICBgYGBqc1xuICAgICBmdW5jdGlvbiB0cmFuc2Zvcm1lcih0cmFuc2Zvcm1hdGlvbkZuLCB2YWx1ZSkge1xuICAgICAgIHJldHVybiAodHJhbnNmb3JtYXRpb25GbiB8fCBhbmd1bGFyLmlkZW50aXR5KSh2YWx1ZSk7XG4gICAgIH07XG4gICBgYGBcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkoJCkge3JldHVybiAkO31cbmlkZW50aXR5LiRpbmplY3QgPSBbXTtcblxuXG5mdW5jdGlvbiB2YWx1ZUZuKHZhbHVlKSB7cmV0dXJuIGZ1bmN0aW9uKCkge3JldHVybiB2YWx1ZTt9O31cblxuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIGFuZ3VsYXIuaXNVbmRlZmluZWRcbiAqIEBtb2R1bGUgbmdcbiAqIEBraW5kIGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBEZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIHVuZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZSkge3JldHVybiB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnO31cblxuXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgYW5ndWxhci5pc0RlZmluZWRcbiAqIEBtb2R1bGUgbmdcbiAqIEBraW5kIGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBEZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIGRlZmluZWQuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBSZWZlcmVuY2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBgdmFsdWVgIGlzIGRlZmluZWQuXG4gKi9cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge3JldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnO31cblxuXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgYW5ndWxhci5pc09iamVjdFxuICogQG1vZHVsZSBuZ1xuICogQGtpbmQgZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIERldGVybWluZXMgaWYgYSByZWZlcmVuY2UgaXMgYW4gYE9iamVjdGAuIFVubGlrZSBgdHlwZW9mYCBpbiBKYXZhU2NyaXB0LCBgbnVsbGBzIGFyZSBub3RcbiAqIGNvbnNpZGVyZWQgdG8gYmUgb2JqZWN0cy4gTm90ZSB0aGF0IEphdmFTY3JpcHQgYXJyYXlzIGFyZSBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBpcyBhbiBgT2JqZWN0YCBidXQgbm90IGBudWxsYC5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgLy8gaHR0cDovL2pzcGVyZi5jb20vaXNvYmplY3Q0XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xufVxuXG5cbi8qKlxuICogQG5nZG9jIGZ1bmN0aW9uXG4gKiBAbmFtZSBhbmd1bGFyLmlzU3RyaW5nXG4gKiBAbW9kdWxlIG5nXG4gKiBAa2luZCBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogRGV0ZXJtaW5lcyBpZiBhIHJlZmVyZW5jZSBpcyBhIGBTdHJpbmdgLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBpcyBhIGBTdHJpbmdgLlxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge3JldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO31cblxuXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgYW5ndWxhci5pc051bWJlclxuICogQG1vZHVsZSBuZ1xuICogQGtpbmQgZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIERldGVybWluZXMgaWYgYSByZWZlcmVuY2UgaXMgYSBgTnVtYmVyYC5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgYSBgTnVtYmVyYC5cbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJzt9XG5cblxuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIGFuZ3VsYXIuaXNEYXRlXG4gKiBAbW9kdWxlIG5nXG4gKiBAa2luZCBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogRGV0ZXJtaW5lcyBpZiBhIHZhbHVlIGlzIGEgZGF0ZS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgYSBgRGF0ZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgYW5ndWxhci5pc0FycmF5XG4gKiBAbW9kdWxlIG5nXG4gKiBAa2luZCBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogRGV0ZXJtaW5lcyBpZiBhIHJlZmVyZW5jZSBpcyBhbiBgQXJyYXlgLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBpcyBhbiBgQXJyYXlgLlxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbi8qKlxuICogQG5nZG9jIGZ1bmN0aW9uXG4gKiBAbmFtZSBhbmd1bGFyLmlzRnVuY3Rpb25cbiAqIEBtb2R1bGUgbmdcbiAqIEBraW5kIGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBEZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIGEgYEZ1bmN0aW9uYC5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgYSBgRnVuY3Rpb25gLlxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJzt9XG5cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgdmFsdWUgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgYSBgUmVnRXhwYC5cbiAqL1xuZnVuY3Rpb24gaXNSZWdFeHAodmFsdWUpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cblxuXG4vKipcbiAqIENoZWNrcyBpZiBgb2JqYCBpcyBhIHdpbmRvdyBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gb2JqIE9iamVjdCB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYG9iamAgaXMgYSB3aW5kb3cgb2JqLlxuICovXG5mdW5jdGlvbiBpc1dpbmRvdyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmoud2luZG93ID09PSBvYmo7XG59XG5cblxuZnVuY3Rpb24gaXNTY29wZShvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouJGV2YWxBc3luYyAmJiBvYmouJHdhdGNoO1xufVxuXG5cbmZ1bmN0aW9uIGlzRmlsZShvYmopIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG5cbmZ1bmN0aW9uIGlzQmxvYihvYmopIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG5cbmZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XG59XG5cblxuZnVuY3Rpb24gaXNQcm9taXNlTGlrZShvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBpc0Z1bmN0aW9uKG9iai50aGVuKTtcbn1cblxuXG52YXIgdHJpbSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZS50cmltKCkgOiB2YWx1ZTtcbn07XG5cbi8vIENvcGllZCBmcm9tOlxuLy8gaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9sb2NhbF9jbG9zdXJlX2dvb2dfc3RyaW5nX3N0cmluZy5qcy5zb3VyY2UuaHRtbCNsaW5lMTAyMVxuLy8gUHJlcmVxOiBzIGlzIGEgc3RyaW5nLlxudmFyIGVzY2FwZUZvclJlZ2V4cCA9IGZ1bmN0aW9uKHMpIHtcbiAgcmV0dXJuIHMucmVwbGFjZSgvKFstKClcXFtcXF17fSs/Ki4kXFxefCw6IzwhXFxcXF0pL2csICdcXFxcJDEnKS5cbiAgICAgICAgICAgcmVwbGFjZSgvXFx4MDgvZywgJ1xcXFx4MDgnKTtcbn07XG5cblxuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIGFuZ3VsYXIuaXNFbGVtZW50XG4gKiBAbW9kdWxlIG5nXG4gKiBAa2luZCBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogRGV0ZXJtaW5lcyBpZiBhIHJlZmVyZW5jZSBpcyBhIERPTSBlbGVtZW50IChvciB3cmFwcGVkIGpRdWVyeSBlbGVtZW50KS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgYSBET00gZWxlbWVudCAob3Igd3JhcHBlZCBqUXVlcnkgZWxlbWVudCkuXG4gKi9cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHJldHVybiAhIShub2RlICYmXG4gICAgKG5vZGUubm9kZU5hbWUgIC8vIHdlIGFyZSBhIGRpcmVjdCBlbGVtZW50XG4gICAgfHwgKG5vZGUucHJvcCAmJiBub2RlLmF0dHIgJiYgbm9kZS5maW5kKSkpOyAgLy8gd2UgaGF2ZSBhbiBvbiBhbmQgZmluZCBtZXRob2QgcGFydCBvZiBqUXVlcnkgQVBJXG59XG5cbi8qKlxuICogQHBhcmFtIHN0ciAna2V5MSxrZXkyLC4uLidcbiAqIEByZXR1cm5zIHtvYmplY3R9IGluIHRoZSBmb3JtIG9mIHtrZXkxOnRydWUsIGtleTI6dHJ1ZSwgLi4ufVxuICovXG5mdW5jdGlvbiBtYWtlTWFwKHN0cikge1xuICB2YXIgb2JqID0ge30sIGl0ZW1zID0gc3RyLnNwbGl0KFwiLFwiKSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxuICAgIG9ialsgaXRlbXNbaV0gXSA9IHRydWU7XG4gIHJldHVybiBvYmo7XG59XG5cblxuZnVuY3Rpb24gbm9kZU5hbWVfKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGxvd2VyY2FzZShlbGVtZW50Lm5vZGVOYW1lIHx8IGVsZW1lbnRbMF0ubm9kZU5hbWUpO1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgb2JqKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGFycmF5LCBvYmopICE9IC0xO1xufVxuXG5mdW5jdGlvbiBhcnJheVJlbW92ZShhcnJheSwgdmFsdWUpIHtcbiAgdmFyIGluZGV4ID0gYXJyYXkuaW5kZXhPZih2YWx1ZSk7XG4gIGlmIChpbmRleCA+PSAwKVxuICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIGFuZ3VsYXIuY29weVxuICogQG1vZHVsZSBuZ1xuICogQGtpbmQgZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENyZWF0ZXMgYSBkZWVwIGNvcHkgb2YgYHNvdXJjZWAsIHdoaWNoIHNob3VsZCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXkuXG4gKlxuICogKiBJZiBubyBkZXN0aW5hdGlvbiBpcyBzdXBwbGllZCwgYSBjb3B5IG9mIHRoZSBvYmplY3Qgb3IgYXJyYXkgaXMgY3JlYXRlZC5cbiAqICogSWYgYSBkZXN0aW5hdGlvbiBpcyBwcm92aWRlZCwgYWxsIG9mIGl0cyBlbGVtZW50cyAoZm9yIGFycmF5KSBvciBwcm9wZXJ0aWVzIChmb3Igb2JqZWN0cylcbiAqICAgYXJlIGRlbGV0ZWQgYW5kIHRoZW4gYWxsIGVsZW1lbnRzL3Byb3BlcnRpZXMgZnJvbSB0aGUgc291cmNlIGFyZSBjb3BpZWQgdG8gaXQuXG4gKiAqIElmIGBzb3VyY2VgIGlzIG5vdCBhbiBvYmplY3Qgb3IgYXJyYXkgKGluYy4gYG51bGxgIGFuZCBgdW5kZWZpbmVkYCksIGBzb3VyY2VgIGlzIHJldHVybmVkLlxuICogKiBJZiBgc291cmNlYCBpcyBpZGVudGljYWwgdG8gJ2Rlc3RpbmF0aW9uJyBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uXG4gKlxuICogQHBhcmFtIHsqfSBzb3VyY2UgVGhlIHNvdXJjZSB0aGF0IHdpbGwgYmUgdXNlZCB0byBtYWtlIGEgY29weS5cbiAqICAgICAgICAgICAgICAgICAgIENhbiBiZSBhbnkgdHlwZSwgaW5jbHVkaW5nIHByaW1pdGl2ZXMsIGBudWxsYCwgYW5kIGB1bmRlZmluZWRgLlxuICogQHBhcmFtIHsoT2JqZWN0fEFycmF5KT19IGRlc3RpbmF0aW9uIERlc3RpbmF0aW9uIGludG8gd2hpY2ggdGhlIHNvdXJjZSBpcyBjb3BpZWQuIElmXG4gKiAgICAgcHJvdmlkZWQsIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZSBhcyBgc291cmNlYC5cbiAqIEByZXR1cm5zIHsqfSBUaGUgY29weSBvciB1cGRhdGVkIGBkZXN0aW5hdGlvbmAsIGlmIGBkZXN0aW5hdGlvbmAgd2FzIHNwZWNpZmllZC5cbiAqXG4gKiBAZXhhbXBsZVxuIDxleGFtcGxlIG1vZHVsZT1cImNvcHlFeGFtcGxlXCI+XG4gPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxuIDxmb3JtIG5vdmFsaWRhdGUgY2xhc3M9XCJzaW1wbGUtZm9ybVwiPlxuIE5hbWU6IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5nLW1vZGVsPVwidXNlci5uYW1lXCIgLz48YnIgLz5cbiBFLW1haWw6IDxpbnB1dCB0eXBlPVwiZW1haWxcIiBuZy1tb2RlbD1cInVzZXIuZW1haWxcIiAvPjxiciAvPlxuIEdlbmRlcjogPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5nLW1vZGVsPVwidXNlci5nZW5kZXJcIiB2YWx1ZT1cIm1hbGVcIiAvPm1hbGVcbiA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmctbW9kZWw9XCJ1c2VyLmdlbmRlclwiIHZhbHVlPVwiZmVtYWxlXCIgLz5mZW1hbGU8YnIgLz5cbiA8YnV0dG9uIG5nLWNsaWNrPVwicmVzZXQoKVwiPlJFU0VUPC9idXR0b24+XG4gPGJ1dHRvbiBuZy1jbGljaz1cInVwZGF0ZSh1c2VyKVwiPlNBVkU8L2J1dHRvbj5cbiA8L2Zvcm0+XG4gPHByZT5mb3JtID0ge3t1c2VyIHwganNvbn19PC9wcmU+XG4gPHByZT5tYXN0ZXIgPSB7e21hc3RlciB8IGpzb259fTwvcHJlPlxuIDwvZGl2PlxuXG4gPHNjcmlwdD5cbiAgYW5ndWxhci5tb2R1bGUoJ2NvcHlFeGFtcGxlJywgW10pXG4gICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcbiAgICAgICRzY29wZS5tYXN0ZXI9IHt9O1xuXG4gICAgICAkc2NvcGUudXBkYXRlID0gZnVuY3Rpb24odXNlcikge1xuICAgICAgICAvLyBFeGFtcGxlIHdpdGggMSBhcmd1bWVudFxuICAgICAgICAkc2NvcGUubWFzdGVyPSBhbmd1bGFyLmNvcHkodXNlcik7XG4gICAgICB9O1xuXG4gICAgICAkc2NvcGUucmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gRXhhbXBsZSB3aXRoIDIgYXJndW1lbnRzXG4gICAgICAgIGFuZ3VsYXIuY29weSgkc2NvcGUubWFzdGVyLCAkc2NvcGUudXNlcik7XG4gICAgICB9O1xuXG4gICAgICAkc2NvcGUucmVzZXQoKTtcbiAgICB9XSk7XG4gPC9zY3JpcHQ+XG4gPC9maWxlPlxuIDwvZXhhbXBsZT5cbiAqL1xuZnVuY3Rpb24gY29weShzb3VyY2UsIGRlc3RpbmF0aW9uLCBzdGFja1NvdXJjZSwgc3RhY2tEZXN0KSB7XG4gIGlmIChpc1dpbmRvdyhzb3VyY2UpIHx8IGlzU2NvcGUoc291cmNlKSkge1xuICAgIHRocm93IG5nTWluRXJyKCdjcHdzJyxcbiAgICAgIFwiQ2FuJ3QgY29weSEgTWFraW5nIGNvcGllcyBvZiBXaW5kb3cgb3IgU2NvcGUgaW5zdGFuY2VzIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuICB9XG5cbiAgaWYgKCFkZXN0aW5hdGlvbikge1xuICAgIGRlc3RpbmF0aW9uID0gc291cmNlO1xuICAgIGlmIChzb3VyY2UpIHtcbiAgICAgIGlmIChpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgZGVzdGluYXRpb24gPSBjb3B5KHNvdXJjZSwgW10sIHN0YWNrU291cmNlLCBzdGFja0Rlc3QpO1xuICAgICAgfSBlbHNlIGlmIChpc0RhdGUoc291cmNlKSkge1xuICAgICAgICBkZXN0aW5hdGlvbiA9IG5ldyBEYXRlKHNvdXJjZS5nZXRUaW1lKCkpO1xuICAgICAgfSBlbHNlIGlmIChpc1JlZ0V4cChzb3VyY2UpKSB7XG4gICAgICAgIGRlc3RpbmF0aW9uID0gbmV3IFJlZ0V4cChzb3VyY2Uuc291cmNlLCBzb3VyY2UudG9TdHJpbmcoKS5tYXRjaCgvW15cXC9dKiQvKVswXSk7XG4gICAgICAgIGRlc3RpbmF0aW9uLmxhc3RJbmRleCA9IHNvdXJjZS5sYXN0SW5kZXg7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgICAgdmFyIGVtcHR5T2JqZWN0ID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlKSk7XG4gICAgICAgIGRlc3RpbmF0aW9uID0gY29weShzb3VyY2UsIGVtcHR5T2JqZWN0LCBzdGFja1NvdXJjZSwgc3RhY2tEZXN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHNvdXJjZSA9PT0gZGVzdGluYXRpb24pIHRocm93IG5nTWluRXJyKCdjcGknLFxuICAgICAgXCJDYW4ndCBjb3B5ISBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBpZGVudGljYWwuXCIpO1xuXG4gICAgc3RhY2tTb3VyY2UgPSBzdGFja1NvdXJjZSB8fCBbXTtcbiAgICBzdGFja0Rlc3QgPSBzdGFja0Rlc3QgfHwgW107XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgdmFyIGluZGV4ID0gc3RhY2tTb3VyY2UuaW5kZXhPZihzb3VyY2UpO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkgcmV0dXJuIHN0YWNrRGVzdFtpbmRleF07XG5cbiAgICAgIHN0YWNrU291cmNlLnB1c2goc291cmNlKTtcbiAgICAgIHN0YWNrRGVzdC5wdXNoKGRlc3RpbmF0aW9uKTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0O1xuICAgIGlmIChpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIGRlc3RpbmF0aW9uLmxlbmd0aCA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSBjb3B5KHNvdXJjZVtpXSwgbnVsbCwgc3RhY2tTb3VyY2UsIHN0YWNrRGVzdCk7XG4gICAgICAgIGlmIChpc09iamVjdChzb3VyY2VbaV0pKSB7XG4gICAgICAgICAgc3RhY2tTb3VyY2UucHVzaChzb3VyY2VbaV0pO1xuICAgICAgICAgIHN0YWNrRGVzdC5wdXNoKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgZGVzdGluYXRpb24ucHVzaChyZXN1bHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaCA9IGRlc3RpbmF0aW9uLiQkaGFzaEtleTtcbiAgICAgIGlmIChpc0FycmF5KGRlc3RpbmF0aW9uKSkge1xuICAgICAgICBkZXN0aW5hdGlvbi5sZW5ndGggPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yRWFjaChkZXN0aW5hdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICAgIGRlbGV0ZSBkZXN0aW5hdGlvbltrZXldO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gY29weShzb3VyY2Vba2V5XSwgbnVsbCwgc3RhY2tTb3VyY2UsIHN0YWNrRGVzdCk7XG4gICAgICAgICAgaWYgKGlzT2JqZWN0KHNvdXJjZVtrZXldKSkge1xuICAgICAgICAgICAgc3RhY2tTb3VyY2UucHVzaChzb3VyY2Vba2V5XSk7XG4gICAgICAgICAgICBzdGFja0Rlc3QucHVzaChyZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZXN0aW5hdGlvbltrZXldID0gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIYXNoS2V5KGRlc3RpbmF0aW9uLGgpO1xuICAgIH1cblxuICB9XG4gIHJldHVybiBkZXN0aW5hdGlvbjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mIGFuIG9iamVjdCwgYW4gYXJyYXkgb3IgYSBwcmltaXRpdmUuXG4gKlxuICogQXNzdW1lcyB0aGF0IHRoZXJlIGFyZSBubyBwcm90byBwcm9wZXJ0aWVzIGZvciBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBzaGFsbG93Q29weShzcmMsIGRzdCkge1xuICBpZiAoaXNBcnJheShzcmMpKSB7XG4gICAgZHN0ID0gZHN0IHx8IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc3JjLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGRzdFtpXSA9IHNyY1tpXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3Qoc3JjKSkge1xuICAgIGRzdCA9IGRzdCB8fCB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICAgIGlmICghKGtleS5jaGFyQXQoMCkgPT09ICckJyAmJiBrZXkuY2hhckF0KDEpID09PSAnJCcpKSB7XG4gICAgICAgIGRzdFtrZXldID0gc3JjW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRzdCB8fCBzcmM7XG59XG5cblxuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIGFuZ3VsYXIuZXF1YWxzXG4gKiBAbW9kdWxlIG5nXG4gKiBAa2luZCBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogRGV0ZXJtaW5lcyBpZiB0d28gb2JqZWN0cyBvciB0d28gdmFsdWVzIGFyZSBlcXVpdmFsZW50LiBTdXBwb3J0cyB2YWx1ZSB0eXBlcywgcmVndWxhclxuICogZXhwcmVzc2lvbnMsIGFycmF5cyBhbmQgb2JqZWN0cy5cbiAqXG4gKiBUd28gb2JqZWN0cyBvciB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICpcbiAqICogQm90aCBvYmplY3RzIG9yIHZhbHVlcyBwYXNzIGA9PT1gIGNvbXBhcmlzb24uXG4gKiAqIEJvdGggb2JqZWN0cyBvciB2YWx1ZXMgYXJlIG9mIHRoZSBzYW1lIHR5cGUgYW5kIGFsbCBvZiB0aGVpciBwcm9wZXJ0aWVzIGFyZSBlcXVhbCBieVxuICogICBjb21wYXJpbmcgdGhlbSB3aXRoIGBhbmd1bGFyLmVxdWFsc2AuXG4gKiAqIEJvdGggdmFsdWVzIGFyZSBOYU4uIChJbiBKYXZhU2NyaXB0LCBOYU4gPT0gTmFOID0+IGZhbHNlLiBCdXQgd2UgY29uc2lkZXIgdHdvIE5hTiBhcyBlcXVhbClcbiAqICogQm90aCB2YWx1ZXMgcmVwcmVzZW50IHRoZSBzYW1lIHJlZ3VsYXIgZXhwcmVzc2lvbiAoSW4gSmF2YVNjcmlwdCxcbiAqICAgL2FiYy8gPT0gL2FiYy8gPT4gZmFsc2UuIEJ1dCB3ZSBjb25zaWRlciB0d28gcmVndWxhciBleHByZXNzaW9ucyBhcyBlcXVhbCB3aGVuIHRoZWlyIHRleHR1YWxcbiAqICAgcmVwcmVzZW50YXRpb24gbWF0Y2hlcykuXG4gKlxuICogRHVyaW5nIGEgcHJvcGVydHkgY29tcGFyaXNvbiwgcHJvcGVydGllcyBvZiBgZnVuY3Rpb25gIHR5cGUgYW5kIHByb3BlcnRpZXMgd2l0aCBuYW1lc1xuICogdGhhdCBiZWdpbiB3aXRoIGAkYCBhcmUgaWdub3JlZC5cbiAqXG4gKiBTY29wZSBhbmQgRE9NV2luZG93IG9iamVjdHMgYXJlIGJlaW5nIGNvbXBhcmVkIG9ubHkgYnkgaWRlbnRpZnkgKGA9PT1gKS5cbiAqXG4gKiBAcGFyYW0geyp9IG8xIE9iamVjdCBvciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvMiBPYmplY3Qgb3IgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGFyZ3VtZW50cyBhcmUgZXF1YWwuXG4gKi9cbmZ1bmN0aW9uIGVxdWFscyhvMSwgbzIpIHtcbiAgaWYgKG8xID09PSBvMikgcmV0dXJuIHRydWU7XG4gIGlmIChvMSA9PT0gbnVsbCB8fCBvMiA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAobzEgIT09IG8xICYmIG8yICE9PSBvMikgcmV0dXJuIHRydWU7IC8vIE5hTiA9PT0gTmFOXG4gIHZhciB0MSA9IHR5cGVvZiBvMSwgdDIgPSB0eXBlb2YgbzIsIGxlbmd0aCwga2V5LCBrZXlTZXQ7XG4gIGlmICh0MSA9PSB0Mikge1xuICAgIGlmICh0MSA9PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKGlzQXJyYXkobzEpKSB7XG4gICAgICAgIGlmICghaXNBcnJheShvMikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKChsZW5ndGggPSBvMS5sZW5ndGgpID09IG8yLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoa2V5ID0gMDsga2V5IDwgbGVuZ3RoOyBrZXkrKykge1xuICAgICAgICAgICAgaWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKG8xKSkge1xuICAgICAgICBpZiAoIWlzRGF0ZShvMikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGVxdWFscyhvMS5nZXRUaW1lKCksIG8yLmdldFRpbWUoKSk7XG4gICAgICB9IGVsc2UgaWYgKGlzUmVnRXhwKG8xKSAmJiBpc1JlZ0V4cChvMikpIHtcbiAgICAgICAgcmV0dXJuIG8xLnRvU3RyaW5nKCkgPT0gbzIudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1Njb3BlKG8xKSB8fCBpc1Njb3BlKG8yKSB8fCBpc1dpbmRvdyhvMSkgfHwgaXNXaW5kb3cobzIpIHx8IGlzQXJyYXkobzIpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGtleVNldCA9IHt9O1xuICAgICAgICBmb3IgKGtleSBpbiBvMSkge1xuICAgICAgICAgIGlmIChrZXkuY2hhckF0KDApID09PSAnJCcgfHwgaXNGdW5jdGlvbihvMVtrZXldKSkgY29udGludWU7XG4gICAgICAgICAgaWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICBrZXlTZXRba2V5XSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChrZXkgaW4gbzIpIHtcbiAgICAgICAgICBpZiAoIWtleVNldC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXG4gICAgICAgICAgICAgIGtleS5jaGFyQXQoMCkgIT09ICckJyAmJlxuICAgICAgICAgICAgICBvMltrZXldICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgIWlzRnVuY3Rpb24obzJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgY3NwID0gZnVuY3Rpb24oKSB7XG4gIGlmIChpc0RlZmluZWQoY3NwLmlzQWN0aXZlXykpIHJldHVybiBjc3AuaXNBY3RpdmVfO1xuXG4gIHZhciBhY3RpdmUgPSAhIShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbbmctY3NwXScpIHx8XG4gICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1uZy1jc3BdJykpO1xuXG4gIGlmICghYWN0aXZlKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8qIGpzaGludCAtVzAzMSwgLVcwNTQgKi9cbiAgICAgIG5ldyBGdW5jdGlvbignJyk7XG4gICAgICAvKiBqc2hpbnQgK1cwMzEsICtXMDU0ICovXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGNzcC5pc0FjdGl2ZV8gPSBhY3RpdmUpO1xufTtcblxuXG5cbmZ1bmN0aW9uIGNvbmNhdChhcnJheTEsIGFycmF5MiwgaW5kZXgpIHtcbiAgcmV0dXJuIGFycmF5MS5jb25jYXQoc2xpY2UuY2FsbChhcnJheTIsIGluZGV4KSk7XG59XG5cbmZ1bmN0aW9uIHNsaWNlQXJncyhhcmdzLCBzdGFydEluZGV4KSB7XG4gIHJldHVybiBzbGljZS5jYWxsKGFyZ3MsIHN0YXJ0SW5kZXggfHwgMCk7XG59XG5cblxuLyoganNoaW50IC1XMTAxICovXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgYW5ndWxhci5iaW5kXG4gKiBAbW9kdWxlIG5nXG4gKiBAa2luZCBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbGxzIGZ1bmN0aW9uIGBmbmAgYm91bmQgdG8gYHNlbGZgIChgc2VsZmAgYmVjb21lcyB0aGUgYHRoaXNgIGZvclxuICogYGZuYCkuIFlvdSBjYW4gc3VwcGx5IG9wdGlvbmFsIGBhcmdzYCB0aGF0IGFyZSBwcmVib3VuZCB0byB0aGUgZnVuY3Rpb24uIFRoaXMgZmVhdHVyZSBpcyBhbHNvXG4gKiBrbm93biBhcyBbcGFydGlhbCBhcHBsaWNhdGlvbl0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QYXJ0aWFsX2FwcGxpY2F0aW9uKSwgYXNcbiAqIGRpc3Rpbmd1aXNoZWQgZnJvbSBbZnVuY3Rpb24gY3VycnlpbmddKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3VycnlpbmcjQ29udHJhc3Rfd2l0aF9wYXJ0aWFsX2Z1bmN0aW9uX2FwcGxpY2F0aW9uKS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc2VsZiBDb250ZXh0IHdoaWNoIGBmbmAgc2hvdWxkIGJlIGV2YWx1YXRlZCBpbi5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gZm4gRnVuY3Rpb24gdG8gYmUgYm91bmQuXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgT3B0aW9uYWwgYXJndW1lbnRzIHRvIGJlIHByZWJvdW5kIHRvIHRoZSBgZm5gIGZ1bmN0aW9uIGNhbGwuXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oKX0gRnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgYGZuYCB3aXRoIGFsbCB0aGUgc3BlY2lmaWVkIGJpbmRpbmdzLlxuICovXG4vKiBqc2hpbnQgK1cxMDEgKi9cbmZ1bmN0aW9uIGJpbmQoc2VsZiwgZm4pIHtcbiAgdmFyIGN1cnJ5QXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gc2xpY2VBcmdzKGFyZ3VtZW50cywgMikgOiBbXTtcbiAgaWYgKGlzRnVuY3Rpb24oZm4pICYmICEoZm4gaW5zdGFuY2VvZiBSZWdFeHApKSB7XG4gICAgcmV0dXJuIGN1cnJ5QXJncy5sZW5ndGhcbiAgICAgID8gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgICAgICAgID8gZm4uYXBwbHkoc2VsZiwgY29uY2F0KGN1cnJ5QXJncywgYXJndW1lbnRzLCAwKSlcbiAgICAgICAgICAgIDogZm4uYXBwbHkoc2VsZiwgY3VycnlBcmdzKTtcbiAgICAgICAgfVxuICAgICAgOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgICAgICAgPyBmbi5hcHBseShzZWxmLCBhcmd1bWVudHMpXG4gICAgICAgICAgICA6IGZuLmNhbGwoc2VsZik7XG4gICAgICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gaW4gSUUsIG5hdGl2ZSBtZXRob2RzIGFyZSBub3QgZnVuY3Rpb25zIHNvIHRoZXkgY2Fubm90IGJlIGJvdW5kIChub3RlOiB0aGV5IGRvbid0IG5lZWQgdG8gYmUpXG4gICAgcmV0dXJuIGZuO1xuICB9XG59XG5cblxuZnVuY3Rpb24gdG9Kc29uUmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICB2YXIgdmFsID0gdmFsdWU7XG5cbiAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleS5jaGFyQXQoMCkgPT09ICckJyAmJiBrZXkuY2hhckF0KDEpID09PSAnJCcpIHtcbiAgICB2YWwgPSB1bmRlZmluZWQ7XG4gIH0gZWxzZSBpZiAoaXNXaW5kb3codmFsdWUpKSB7XG4gICAgdmFsID0gJyRXSU5ET1cnO1xuICB9IGVsc2UgaWYgKHZhbHVlICYmICBkb2N1bWVudCA9PT0gdmFsdWUpIHtcbiAgICB2YWwgPSAnJERPQ1VNRU5UJztcbiAgfSBlbHNlIGlmIChpc1Njb3BlKHZhbHVlKSkge1xuICAgIHZhbCA9ICckU0NPUEUnO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn1cblxuXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgYW5ndWxhci50b0pzb25cbiAqIEBtb2R1bGUgbmdcbiAqIEBraW5kIGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTZXJpYWxpemVzIGlucHV0IGludG8gYSBKU09OLWZvcm1hdHRlZCBzdHJpbmcuIFByb3BlcnRpZXMgd2l0aCBsZWFkaW5nICQkIGNoYXJhY3RlcnMgd2lsbCBiZVxuICogc3RyaXBwZWQgc2luY2UgYW5ndWxhciB1c2VzIHRoaXMgbm90YXRpb24gaW50ZXJuYWxseS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheXxEYXRlfHN0cmluZ3xudW1iZXJ9IG9iaiBJbnB1dCB0byBiZSBzZXJpYWxpemVkIGludG8gSlNPTi5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHByZXR0eSBJZiBzZXQgdG8gdHJ1ZSwgdGhlIEpTT04gb3V0cHV0IHdpbGwgY29udGFpbiBuZXdsaW5lcyBhbmQgd2hpdGVzcGFjZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBKU09OLWlmaWVkIHN0cmluZyByZXByZXNlbnRpbmcgYG9iamAuXG4gKi9cbmZ1bmN0aW9uIHRvSnNvbihvYmosIHByZXR0eSkge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIHRvSnNvblJlcGxhY2VyLCBwcmV0dHkgPyAnICAnIDogbnVsbCk7XG59XG5cblxuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIGFuZ3VsYXIuZnJvbUpzb25cbiAqIEBtb2R1bGUgbmdcbiAqIEBraW5kIGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBEZXNlcmlhbGl6ZXMgYSBKU09OIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ganNvbiBKU09OIHN0cmluZyB0byBkZXNlcmlhbGl6ZS5cbiAqIEByZXR1cm5zIHtPYmplY3R8QXJyYXl8c3RyaW5nfG51bWJlcn0gRGVzZXJpYWxpemVkIHRoaW5neS5cbiAqL1xuZnVuY3Rpb24gZnJvbUpzb24oanNvbikge1xuICByZXR1cm4gaXNTdHJpbmcoanNvbilcbiAgICAgID8gSlNPTi5wYXJzZShqc29uKVxuICAgICAgOiBqc29uO1xufVxuXG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBzdGFydGluZ1RhZyhlbGVtZW50KSB7XG4gIGVsZW1lbnQgPSBqcUxpdGUoZWxlbWVudCkuY2xvbmUoKTtcbiAgdHJ5IHtcbiAgICAvLyB0dXJucyBvdXQgSUUgZG9lcyBub3QgbGV0IHlvdSBzZXQgLmh0bWwoKSBvbiBlbGVtZW50cyB3aGljaFxuICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0byBoYXZlIGNoaWxkcmVuLiBTbyB3ZSBqdXN0IGlnbm9yZSBpdC5cbiAgICBlbGVtZW50LmVtcHR5KCk7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHZhciBlbGVtSHRtbCA9IGpxTGl0ZSgnPGRpdj4nKS5hcHBlbmQoZWxlbWVudCkuaHRtbCgpO1xuICB0cnkge1xuICAgIHJldHVybiBlbGVtZW50WzBdLm5vZGVUeXBlID09PSBOT0RFX1RZUEVfVEVYVCA/IGxvd2VyY2FzZShlbGVtSHRtbCkgOlxuICAgICAgICBlbGVtSHRtbC5cbiAgICAgICAgICBtYXRjaCgvXig8W14+XSs+KS8pWzFdLlxuICAgICAgICAgIHJlcGxhY2UoL148KFtcXHdcXC1dKykvLCBmdW5jdGlvbihtYXRjaCwgbm9kZU5hbWUpIHsgcmV0dXJuICc8JyArIGxvd2VyY2FzZShub2RlTmFtZSk7IH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGxvd2VyY2FzZShlbGVtSHRtbCk7XG4gIH1cblxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBUcmllcyB0byBkZWNvZGUgdGhlIFVSSSBjb21wb25lbnQgd2l0aG91dCB0aHJvd2luZyBhbiBleGNlcHRpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzdHIgdmFsdWUgcG90ZW50aWFsIFVSSSBjb21wb25lbnQgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBgdmFsdWVgIGNhbiBiZSBkZWNvZGVkXG4gKiB3aXRoIHRoZSBkZWNvZGVVUklDb21wb25lbnQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRyeURlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkge1xuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSWdub3JlIGFueSBpbnZhbGlkIHVyaSBjb21wb25lbnRcbiAgfVxufVxuXG5cbi8qKlxuICogUGFyc2VzIGFuIGVzY2FwZWQgdXJsIHF1ZXJ5IHN0cmluZyBpbnRvIGtleS12YWx1ZSBwYWlycy5cbiAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZyxib29sZWFufEFycmF5Pn1cbiAqL1xuZnVuY3Rpb24gcGFyc2VLZXlWYWx1ZSgvKipzdHJpbmcqL2tleVZhbHVlKSB7XG4gIHZhciBvYmogPSB7fSwga2V5X3ZhbHVlLCBrZXk7XG4gIGZvckVhY2goKGtleVZhbHVlIHx8IFwiXCIpLnNwbGl0KCcmJyksIGZ1bmN0aW9uKGtleVZhbHVlKSB7XG4gICAgaWYgKGtleVZhbHVlKSB7XG4gICAgICBrZXlfdmFsdWUgPSBrZXlWYWx1ZS5yZXBsYWNlKC9cXCsvZywnJTIwJykuc3BsaXQoJz0nKTtcbiAgICAgIGtleSA9IHRyeURlY29kZVVSSUNvbXBvbmVudChrZXlfdmFsdWVbMF0pO1xuICAgICAgaWYgKGlzRGVmaW5lZChrZXkpKSB7XG4gICAgICAgIHZhciB2YWwgPSBpc0RlZmluZWQoa2V5X3ZhbHVlWzFdKSA/IHRyeURlY29kZVVSSUNvbXBvbmVudChrZXlfdmFsdWVbMV0pIDogdHJ1ZTtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgIG9ialtrZXldID0gdmFsO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tleV0pKSB7XG4gICAgICAgICAgb2JqW2tleV0ucHVzaCh2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ialtrZXldID0gW29ialtrZXldLHZhbF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiB0b0tleVZhbHVlKG9iaikge1xuICB2YXIgcGFydHMgPSBbXTtcbiAgZm9yRWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvckVhY2godmFsdWUsIGZ1bmN0aW9uKGFycmF5VmFsdWUpIHtcbiAgICAgICAgcGFydHMucHVzaChlbmNvZGVVcmlRdWVyeShrZXksIHRydWUpICtcbiAgICAgICAgICAgICAgICAgICAoYXJyYXlWYWx1ZSA9PT0gdHJ1ZSA/ICcnIDogJz0nICsgZW5jb2RlVXJpUXVlcnkoYXJyYXlWYWx1ZSwgdHJ1ZSkpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVVcmlRdWVyeShrZXksIHRydWUpICtcbiAgICAgICAgICAgICAgICh2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogJz0nICsgZW5jb2RlVXJpUXVlcnkodmFsdWUsIHRydWUpKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA/IHBhcnRzLmpvaW4oJyYnKSA6ICcnO1xufVxuXG5cbi8qKlxuICogV2UgbmVlZCBvdXIgY3VzdG9tIG1ldGhvZCBiZWNhdXNlIGVuY29kZVVSSUNvbXBvbmVudCBpcyB0b28gYWdncmVzc2l2ZSBhbmQgZG9lc24ndCBmb2xsb3dcbiAqIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM5ODYudHh0IHdpdGggcmVnYXJkcyB0byB0aGUgY2hhcmFjdGVyIHNldCAocGNoYXIpIGFsbG93ZWQgaW4gcGF0aFxuICogc2VnbWVudHM6XG4gKiAgICBzZWdtZW50ICAgICAgID0gKnBjaGFyXG4gKiAgICBwY2hhciAgICAgICAgID0gdW5yZXNlcnZlZCAvIHBjdC1lbmNvZGVkIC8gc3ViLWRlbGltcyAvIFwiOlwiIC8gXCJAXCJcbiAqICAgIHBjdC1lbmNvZGVkICAgPSBcIiVcIiBIRVhESUcgSEVYRElHXG4gKiAgICB1bnJlc2VydmVkICAgID0gQUxQSEEgLyBESUdJVCAvIFwiLVwiIC8gXCIuXCIgLyBcIl9cIiAvIFwiflwiXG4gKiAgICBzdWItZGVsaW1zICAgID0gXCIhXCIgLyBcIiRcIiAvIFwiJlwiIC8gXCInXCIgLyBcIihcIiAvIFwiKVwiXG4gKiAgICAgICAgICAgICAgICAgICAgIC8gXCIqXCIgLyBcIitcIiAvIFwiLFwiIC8gXCI7XCIgLyBcIj1cIlxuICovXG5mdW5jdGlvbiBlbmNvZGVVcmlTZWdtZW50KHZhbCkge1xuICByZXR1cm4gZW5jb2RlVXJpUXVlcnkodmFsLCB0cnVlKS5cbiAgICAgICAgICAgICByZXBsYWNlKC8lMjYvZ2ksICcmJykuXG4gICAgICAgICAgICAgcmVwbGFjZSgvJTNEL2dpLCAnPScpLlxuICAgICAgICAgICAgIHJlcGxhY2UoLyUyQi9naSwgJysnKTtcbn1cblxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIGZvciBlbmNvZGluZyAqa2V5KiBvciAqdmFsdWUqIHBhcnRzIG9mIHF1ZXJ5IGNvbXBvbmVudC4gV2UgbmVlZCBhIGN1c3RvbVxuICogbWV0aG9kIGJlY2F1c2UgZW5jb2RlVVJJQ29tcG9uZW50IGlzIHRvbyBhZ2dyZXNzaXZlIGFuZCBlbmNvZGVzIHN0dWZmIHRoYXQgZG9lc24ndCBoYXZlIHRvIGJlXG4gKiBlbmNvZGVkIHBlciBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2OlxuICogICAgcXVlcnkgICAgICAgPSAqKCBwY2hhciAvIFwiL1wiIC8gXCI/XCIgKVxuICogICAgcGNoYXIgICAgICAgICA9IHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1kZWxpbXMgLyBcIjpcIiAvIFwiQFwiXG4gKiAgICB1bnJlc2VydmVkICAgID0gQUxQSEEgLyBESUdJVCAvIFwiLVwiIC8gXCIuXCIgLyBcIl9cIiAvIFwiflwiXG4gKiAgICBwY3QtZW5jb2RlZCAgID0gXCIlXCIgSEVYRElHIEhFWERJR1xuICogICAgc3ViLWRlbGltcyAgICA9IFwiIVwiIC8gXCIkXCIgLyBcIiZcIiAvIFwiJ1wiIC8gXCIoXCIgLyBcIilcIlxuICogICAgICAgICAgICAgICAgICAgICAvIFwiKlwiIC8gXCIrXCIgLyBcIixcIiAvIFwiO1wiIC8gXCI9XCJcbiAqL1xuZnVuY3Rpb24gZW5jb2RlVXJpUXVlcnkodmFsLCBwY3RFbmNvZGVTcGFjZXMpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgICAgICAgICAgIHJlcGxhY2UoLyU0MC9naSwgJ0AnKS5cbiAgICAgICAgICAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgICAgICAgICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgICAgICAgICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgICAgICAgICAgIHJlcGxhY2UoLyUzQi9naSwgJzsnKS5cbiAgICAgICAgICAgICByZXBsYWNlKC8lMjAvZywgKHBjdEVuY29kZVNwYWNlcyA/ICclMjAnIDogJysnKSk7XG59XG5cbnZhciBuZ0F0dHJQcmVmaXhlcyA9IFsnbmctJywgJ2RhdGEtbmctJywgJ25nOicsICd4LW5nLSddO1xuXG5mdW5jdGlvbiBnZXROZ0F0dHJpYnV0ZShlbGVtZW50LCBuZ0F0dHIpIHtcbiAgdmFyIGF0dHIsIGksIGlpID0gbmdBdHRyUHJlZml4ZXMubGVuZ3RoO1xuICBlbGVtZW50ID0ganFMaXRlKGVsZW1lbnQpO1xuICBmb3IgKGkgPSAwOyBpIDwgaWk7ICsraSkge1xuICAgIGF0dHIgPSBuZ0F0dHJQcmVmaXhlc1tpXSArIG5nQXR0cjtcbiAgICBpZiAoaXNTdHJpbmcoYXR0ciA9IGVsZW1lbnQuYXR0cihhdHRyKSkpIHtcbiAgICAgIHJldHVybiBhdHRyO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ0FwcFxuICogQG1vZHVsZSBuZ1xuICpcbiAqIEBlbGVtZW50IEFOWVxuICogQHBhcmFtIHthbmd1bGFyLk1vZHVsZX0gbmdBcHAgYW4gb3B0aW9uYWwgYXBwbGljYXRpb25cbiAqICAge0BsaW5rIGFuZ3VsYXIubW9kdWxlIG1vZHVsZX0gbmFtZSB0byBsb2FkLlxuICogQHBhcmFtIHtib29sZWFuPX0gbmdTdHJpY3REaSBpZiB0aGlzIGF0dHJpYnV0ZSBpcyBwcmVzZW50IG9uIHRoZSBhcHAgZWxlbWVudCwgdGhlIGluamVjdG9yIHdpbGwgYmVcbiAqICAgY3JlYXRlZCBpbiBcInN0cmljdC1kaVwiIG1vZGUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgYXBwbGljYXRpb24gd2lsbCBmYWlsIHRvIGludm9rZSBmdW5jdGlvbnMgd2hpY2hcbiAqICAgZG8gbm90IHVzZSBleHBsaWNpdCBmdW5jdGlvbiBhbm5vdGF0aW9uIChhbmQgYXJlIHRodXMgdW5zdWl0YWJsZSBmb3IgbWluaWZpY2F0aW9uKSwgYXMgZGVzY3JpYmVkXG4gKiAgIGluIHtAbGluayBndWlkZS9kaSB0aGUgRGVwZW5kZW5jeSBJbmplY3Rpb24gZ3VpZGV9LCBhbmQgdXNlZnVsIGRlYnVnZ2luZyBpbmZvIHdpbGwgYXNzaXN0IGluXG4gKiAgIHRyYWNraW5nIGRvd24gdGhlIHJvb3Qgb2YgdGhlc2UgYnVncy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBVc2UgdGhpcyBkaXJlY3RpdmUgdG8gKiphdXRvLWJvb3RzdHJhcCoqIGFuIEFuZ3VsYXJKUyBhcHBsaWNhdGlvbi4gVGhlIGBuZ0FwcGAgZGlyZWN0aXZlXG4gKiBkZXNpZ25hdGVzIHRoZSAqKnJvb3QgZWxlbWVudCoqIG9mIHRoZSBhcHBsaWNhdGlvbiBhbmQgaXMgdHlwaWNhbGx5IHBsYWNlZCBuZWFyIHRoZSByb290IGVsZW1lbnRcbiAqIG9mIHRoZSBwYWdlIC0gZS5nLiBvbiB0aGUgYDxib2R5PmAgb3IgYDxodG1sPmAgdGFncy5cbiAqXG4gKiBPbmx5IG9uZSBBbmd1bGFySlMgYXBwbGljYXRpb24gY2FuIGJlIGF1dG8tYm9vdHN0cmFwcGVkIHBlciBIVE1MIGRvY3VtZW50LiBUaGUgZmlyc3QgYG5nQXBwYFxuICogZm91bmQgaW4gdGhlIGRvY3VtZW50IHdpbGwgYmUgdXNlZCB0byBkZWZpbmUgdGhlIHJvb3QgZWxlbWVudCB0byBhdXRvLWJvb3RzdHJhcCBhcyBhblxuICogYXBwbGljYXRpb24uIFRvIHJ1biBtdWx0aXBsZSBhcHBsaWNhdGlvbnMgaW4gYW4gSFRNTCBkb2N1bWVudCB5b3UgbXVzdCBtYW51YWxseSBib290c3RyYXAgdGhlbSB1c2luZ1xuICoge0BsaW5rIGFuZ3VsYXIuYm9vdHN0cmFwfSBpbnN0ZWFkLiBBbmd1bGFySlMgYXBwbGljYXRpb25zIGNhbm5vdCBiZSBuZXN0ZWQgd2l0aGluIGVhY2ggb3RoZXIuXG4gKlxuICogWW91IGNhbiBzcGVjaWZ5IGFuICoqQW5ndWxhckpTIG1vZHVsZSoqIHRvIGJlIHVzZWQgYXMgdGhlIHJvb3QgbW9kdWxlIGZvciB0aGUgYXBwbGljYXRpb24uICBUaGlzXG4gKiBtb2R1bGUgd2lsbCBiZSBsb2FkZWQgaW50byB0aGUge0BsaW5rIGF1dG8uJGluamVjdG9yfSB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBib290c3RyYXBwZWQgYW5kXG4gKiBzaG91bGQgY29udGFpbiB0aGUgYXBwbGljYXRpb24gY29kZSBuZWVkZWQgb3IgaGF2ZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyB0aGF0IHdpbGxcbiAqIGNvbnRhaW4gdGhlIGNvZGUuIFNlZSB7QGxpbmsgYW5ndWxhci5tb2R1bGV9IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEluIHRoZSBleGFtcGxlIGJlbG93IGlmIHRoZSBgbmdBcHBgIGRpcmVjdGl2ZSB3ZXJlIG5vdCBwbGFjZWQgb24gdGhlIGBodG1sYCBlbGVtZW50IHRoZW4gdGhlXG4gKiBkb2N1bWVudCB3b3VsZCBub3QgYmUgY29tcGlsZWQsIHRoZSBgQXBwQ29udHJvbGxlcmAgd291bGQgbm90IGJlIGluc3RhbnRpYXRlZCBhbmQgdGhlIGB7eyBhK2IgfX1gXG4gKiB3b3VsZCBub3QgYmUgcmVzb2x2ZWQgdG8gYDNgLlxuICpcbiAqIGBuZ0FwcGAgaXMgdGhlIGVhc2llc3QsIGFuZCBtb3N0IGNvbW1vbiwgd2F5IHRvIGJvb3RzdHJhcCBhbiBhcHBsaWNhdGlvbi5cbiAqXG4gPGV4YW1wbGUgbW9kdWxlPVwibmdBcHBEZW1vXCI+XG4gICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgPGRpdiBuZy1jb250cm9sbGVyPVwibmdBcHBEZW1vQ29udHJvbGxlclwiPlxuICAgICBJIGNhbiBhZGQ6IHt7YX19ICsge3tifX0gPSAge3sgYStiIH19XG4gICA8L2Rpdj5cbiAgIDwvZmlsZT5cbiAgIDxmaWxlIG5hbWU9XCJzY3JpcHQuanNcIj5cbiAgIGFuZ3VsYXIubW9kdWxlKCduZ0FwcERlbW8nLCBbXSkuY29udHJvbGxlcignbmdBcHBEZW1vQ29udHJvbGxlcicsIGZ1bmN0aW9uKCRzY29wZSkge1xuICAgICAkc2NvcGUuYSA9IDE7XG4gICAgICRzY29wZS5iID0gMjtcbiAgIH0pO1xuICAgPC9maWxlPlxuIDwvZXhhbXBsZT5cbiAqXG4gKiBVc2luZyBgbmdTdHJpY3REaWAsIHlvdSB3b3VsZCBzZWUgc29tZXRoaW5nIGxpa2UgdGhpczpcbiAqXG4gPGV4YW1wbGUgbmctYXBwLWluY2x1ZGVkPVwidHJ1ZVwiPlxuICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgIDxkaXYgbmctYXBwPVwibmdBcHBTdHJpY3REZW1vXCIgbmctc3RyaWN0LWRpPlxuICAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkdvb2RDb250cm9sbGVyMVwiPlxuICAgICAgICAgICBJIGNhbiBhZGQ6IHt7YX19ICsge3tifX0gPSAge3sgYStiIH19XG5cbiAgICAgICAgICAgPHA+VGhpcyByZW5kZXJzIGJlY2F1c2UgdGhlIGNvbnRyb2xsZXIgZG9lcyBub3QgZmFpbCB0b1xuICAgICAgICAgICAgICBpbnN0YW50aWF0ZSwgYnkgdXNpbmcgZXhwbGljaXQgYW5ub3RhdGlvbiBzdHlsZSAoc2VlXG4gICAgICAgICAgICAgIHNjcmlwdC5qcyBmb3IgZGV0YWlscylcbiAgICAgICAgICAgPC9wPlxuICAgICAgIDwvZGl2PlxuXG4gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiR29vZENvbnRyb2xsZXIyXCI+XG4gICAgICAgICAgIE5hbWU6IDxpbnB1dCBuZy1tb2RlbD1cIm5hbWVcIj48YnIgLz5cbiAgICAgICAgICAgSGVsbG8sIHt7bmFtZX19IVxuXG4gICAgICAgICAgIDxwPlRoaXMgcmVuZGVycyBiZWNhdXNlIHRoZSBjb250cm9sbGVyIGRvZXMgbm90IGZhaWwgdG9cbiAgICAgICAgICAgICAgaW5zdGFudGlhdGUsIGJ5IHVzaW5nIGV4cGxpY2l0IGFubm90YXRpb24gc3R5bGVcbiAgICAgICAgICAgICAgKHNlZSBzY3JpcHQuanMgZm9yIGRldGFpbHMpXG4gICAgICAgICAgIDwvcD5cbiAgICAgICA8L2Rpdj5cblxuICAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkJhZENvbnRyb2xsZXJcIj5cbiAgICAgICAgICAgSSBjYW4gYWRkOiB7e2F9fSArIHt7Yn19ID0gIHt7IGErYiB9fVxuXG4gICAgICAgICAgIDxwPlRoZSBjb250cm9sbGVyIGNvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQsIGR1ZSB0byByZWx5aW5nXG4gICAgICAgICAgICAgIG9uIGF1dG9tYXRpYyBmdW5jdGlvbiBhbm5vdGF0aW9ucyAod2hpY2ggYXJlIGRpc2FibGVkIGluXG4gICAgICAgICAgICAgIHN0cmljdCBtb2RlKS4gQXMgc3VjaCwgdGhlIGNvbnRlbnQgb2YgdGhpcyBzZWN0aW9uIGlzIG5vdFxuICAgICAgICAgICAgICBpbnRlcnBvbGF0ZWQsIGFuZCB0aGVyZSBzaG91bGQgYmUgYW4gZXJyb3IgaW4geW91ciB3ZWIgY29uc29sZS5cbiAgICAgICAgICAgPC9wPlxuICAgICAgIDwvZGl2PlxuICAgPC9kaXY+XG4gICA8L2ZpbGU+XG4gICA8ZmlsZSBuYW1lPVwic2NyaXB0LmpzXCI+XG4gICBhbmd1bGFyLm1vZHVsZSgnbmdBcHBTdHJpY3REZW1vJywgW10pXG4gICAgIC8vIEJhZENvbnRyb2xsZXIgd2lsbCBmYWlsIHRvIGluc3RhbnRpYXRlLCBkdWUgdG8gcmVseWluZyBvbiBhdXRvbWF0aWMgZnVuY3Rpb24gYW5ub3RhdGlvbixcbiAgICAgLy8gcmF0aGVyIHRoYW4gYW4gZXhwbGljaXQgYW5ub3RhdGlvblxuICAgICAuY29udHJvbGxlcignQmFkQ29udHJvbGxlcicsIGZ1bmN0aW9uKCRzY29wZSkge1xuICAgICAgICRzY29wZS5hID0gMTtcbiAgICAgICAkc2NvcGUuYiA9IDI7XG4gICAgIH0pXG4gICAgIC8vIFVubGlrZSBCYWRDb250cm9sbGVyLCBHb29kQ29udHJvbGxlcjEgYW5kIEdvb2RDb250cm9sbGVyMiB3aWxsIG5vdCBmYWlsIHRvIGJlIGluc3RhbnRpYXRlZCxcbiAgICAgLy8gZHVlIHRvIHVzaW5nIGV4cGxpY2l0IGFubm90YXRpb25zIHVzaW5nIHRoZSBhcnJheSBzdHlsZSBhbmQgJGluamVjdCBwcm9wZXJ0eSwgcmVzcGVjdGl2ZWx5LlxuICAgICAuY29udHJvbGxlcignR29vZENvbnRyb2xsZXIxJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcbiAgICAgICAkc2NvcGUuYSA9IDE7XG4gICAgICAgJHNjb3BlLmIgPSAyO1xuICAgICB9XSlcbiAgICAgLmNvbnRyb2xsZXIoJ0dvb2RDb250cm9sbGVyMicsIEdvb2RDb250cm9sbGVyMik7XG4gICAgIGZ1bmN0aW9uIEdvb2RDb250cm9sbGVyMigkc2NvcGUpIHtcbiAgICAgICAkc2NvcGUubmFtZSA9IFwiV29ybGRcIjtcbiAgICAgfVxuICAgICBHb29kQ29udHJvbGxlcjIuJGluamVjdCA9IFsnJHNjb3BlJ107XG4gICA8L2ZpbGU+XG4gICA8ZmlsZSBuYW1lPVwic3R5bGUuY3NzXCI+XG4gICBkaXZbbmctY29udHJvbGxlcl0ge1xuICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTtcbiAgICAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgYm9yZGVyOiAxcHggc29saWQ7XG4gICAgICAgcGFkZGluZzogLjVlbTtcbiAgIH1cbiAgIGRpdltuZy1jb250cm9sbGVyXj1Hb29kXSB7XG4gICAgICAgYm9yZGVyLWNvbG9yOiAjZDZlOWM2O1xuICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkZmYwZDg7XG4gICAgICAgY29sb3I6ICMzYzc2M2Q7XG4gICB9XG4gICBkaXZbbmctY29udHJvbGxlcl49QmFkXSB7XG4gICAgICAgYm9yZGVyLWNvbG9yOiAjZWJjY2QxO1xuICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMmRlZGU7XG4gICAgICAgY29sb3I6ICNhOTQ0NDI7XG4gICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgIH1cbiAgIDwvZmlsZT5cbiA8L2V4YW1wbGU+XG4gKi9cbmZ1bmN0aW9uIGFuZ3VsYXJJbml0KGVsZW1lbnQsIGJvb3RzdHJhcCkge1xuICB2YXIgYXBwRWxlbWVudCxcbiAgICAgIG1vZHVsZSxcbiAgICAgIGNvbmZpZyA9IHt9O1xuXG4gIC8vIFRoZSBlbGVtZW50IGBlbGVtZW50YCBoYXMgcHJpb3JpdHkgb3ZlciBhbnkgb3RoZXIgZWxlbWVudFxuICBmb3JFYWNoKG5nQXR0clByZWZpeGVzLCBmdW5jdGlvbihwcmVmaXgpIHtcbiAgICB2YXIgbmFtZSA9IHByZWZpeCArICdhcHAnO1xuXG4gICAgaWYgKCFhcHBFbGVtZW50ICYmIGVsZW1lbnQuaGFzQXR0cmlidXRlICYmIGVsZW1lbnQuaGFzQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICBhcHBFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIG1vZHVsZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIH1cbiAgfSk7XG4gIGZvckVhY2gobmdBdHRyUHJlZml4ZXMsIGZ1bmN0aW9uKHByZWZpeCkge1xuICAgIHZhciBuYW1lID0gcHJlZml4ICsgJ2FwcCc7XG4gICAgdmFyIGNhbmRpZGF0ZTtcblxuICAgIGlmICghYXBwRWxlbWVudCAmJiAoY2FuZGlkYXRlID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbJyArIG5hbWUucmVwbGFjZSgnOicsICdcXFxcOicpICsgJ10nKSkpIHtcbiAgICAgIGFwcEVsZW1lbnQgPSBjYW5kaWRhdGU7XG4gICAgICBtb2R1bGUgPSBjYW5kaWRhdGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIH1cbiAgfSk7XG4gIGlmIChhcHBFbGVtZW50KSB7XG4gICAgY29uZmlnLnN0cmljdERpID0gZ2V0TmdBdHRyaWJ1dGUoYXBwRWxlbWVudCwgXCJzdHJpY3QtZGlcIikgIT09IG51bGw7XG4gICAgYm9vdHN0cmFwKGFwcEVsZW1lbnQsIG1vZHVsZSA/IFttb2R1bGVdIDogW10sIGNvbmZpZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIGFuZ3VsYXIuYm9vdHN0cmFwXG4gKiBAbW9kdWxlIG5nXG4gKiBAZGVzY3JpcHRpb25cbiAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIG1hbnVhbGx5IHN0YXJ0IHVwIGFuZ3VsYXIgYXBwbGljYXRpb24uXG4gKlxuICogU2VlOiB7QGxpbmsgZ3VpZGUvYm9vdHN0cmFwIEJvb3RzdHJhcH1cbiAqXG4gKiBOb3RlIHRoYXQgUHJvdHJhY3RvciBiYXNlZCBlbmQtdG8tZW5kIHRlc3RzIGNhbm5vdCB1c2UgdGhpcyBmdW5jdGlvbiB0byBib290c3RyYXAgbWFudWFsbHkuXG4gKiBUaGV5IG11c3QgdXNlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdBcHAgbmdBcHB9LlxuICpcbiAqIEFuZ3VsYXIgd2lsbCBkZXRlY3QgaWYgaXQgaGFzIGJlZW4gbG9hZGVkIGludG8gdGhlIGJyb3dzZXIgbW9yZSB0aGFuIG9uY2UgYW5kIG9ubHkgYWxsb3cgdGhlXG4gKiBmaXJzdCBsb2FkZWQgc2NyaXB0IHRvIGJlIGJvb3RzdHJhcHBlZCBhbmQgd2lsbCByZXBvcnQgYSB3YXJuaW5nIHRvIHRoZSBicm93c2VyIGNvbnNvbGUgZm9yXG4gKiBlYWNoIG9mIHRoZSBzdWJzZXF1ZW50IHNjcmlwdHMuIFRoaXMgcHJldmVudHMgc3RyYW5nZSByZXN1bHRzIGluIGFwcGxpY2F0aW9ucywgd2hlcmUgb3RoZXJ3aXNlXG4gKiBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgQW5ndWxhciB0cnkgdG8gd29yayBvbiB0aGUgRE9NLlxuICpcbiAqIGBgYGh0bWxcbiAqIDwhZG9jdHlwZSBodG1sPlxuICogPGh0bWw+XG4gKiA8Ym9keT5cbiAqIDxkaXYgbmctY29udHJvbGxlcj1cIldlbGNvbWVDb250cm9sbGVyXCI+XG4gKiAgIHt7Z3JlZXRpbmd9fVxuICogPC9kaXY+XG4gKlxuICogPHNjcmlwdCBzcmM9XCJhbmd1bGFyLmpzXCI+PC9zY3JpcHQ+XG4gKiA8c2NyaXB0PlxuICogICB2YXIgYXBwID0gYW5ndWxhci5tb2R1bGUoJ2RlbW8nLCBbXSlcbiAqICAgLmNvbnRyb2xsZXIoJ1dlbGNvbWVDb250cm9sbGVyJywgZnVuY3Rpb24oJHNjb3BlKSB7XG4gKiAgICAgICAkc2NvcGUuZ3JlZXRpbmcgPSAnV2VsY29tZSEnO1xuICogICB9KTtcbiAqICAgYW5ndWxhci5ib290c3RyYXAoZG9jdW1lbnQsIFsnZGVtbyddKTtcbiAqIDwvc2NyaXB0PlxuICogPC9ib2R5PlxuICogPC9odG1sPlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IERPTSBlbGVtZW50IHdoaWNoIGlzIHRoZSByb290IG9mIGFuZ3VsYXIgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xGdW5jdGlvbnxBcnJheT49fSBtb2R1bGVzIGFuIGFycmF5IG9mIG1vZHVsZXMgdG8gbG9hZCBpbnRvIHRoZSBhcHBsaWNhdGlvbi5cbiAqICAgICBFYWNoIGl0ZW0gaW4gdGhlIGFycmF5IHNob3VsZCBiZSB0aGUgbmFtZSBvZiBhIHByZWRlZmluZWQgbW9kdWxlIG9yIGEgKERJIGFubm90YXRlZClcbiAqICAgICBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW52b2tlZCBieSB0aGUgaW5qZWN0b3IgYXMgYSBydW4gYmxvY2suXG4gKiAgICAgU2VlOiB7QGxpbmsgYW5ndWxhci5tb2R1bGUgbW9kdWxlc31cbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIGFuIG9iamVjdCBmb3IgZGVmaW5pbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgYXBwbGljYXRpb24uIFRoZVxuICogICAgIGZvbGxvd2luZyBrZXlzIGFyZSBzdXBwb3J0ZWQ6XG4gKlxuICogICAgIC0gYHN0cmljdERpYDogZGlzYWJsZSBhdXRvbWF0aWMgZnVuY3Rpb24gYW5ub3RhdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uLiBUaGlzIGlzIG1lYW50IHRvXG4gKiAgICAgICBhc3Npc3QgaW4gZmluZGluZyBidWdzIHdoaWNoIGJyZWFrIG1pbmlmaWVkIGNvZGUuXG4gKlxuICogQHJldHVybnMge2F1dG8uJGluamVjdG9yfSBSZXR1cm5zIHRoZSBuZXdseSBjcmVhdGVkIGluamVjdG9yIGZvciB0aGlzIGFwcC5cbiAqL1xuZnVuY3Rpb24gYm9vdHN0cmFwKGVsZW1lbnQsIG1vZHVsZXMsIGNvbmZpZykge1xuICBpZiAoIWlzT2JqZWN0KGNvbmZpZykpIGNvbmZpZyA9IHt9O1xuICB2YXIgZGVmYXVsdENvbmZpZyA9IHtcbiAgICBzdHJpY3REaTogZmFsc2VcbiAgfTtcbiAgY29uZmlnID0gZXh0ZW5kKGRlZmF1bHRDb25maWcsIGNvbmZpZyk7XG4gIHZhciBkb0Jvb3RzdHJhcCA9IGZ1bmN0aW9uKCkge1xuICAgIGVsZW1lbnQgPSBqcUxpdGUoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudC5pbmplY3RvcigpKSB7XG4gICAgICB2YXIgdGFnID0gKGVsZW1lbnRbMF0gPT09IGRvY3VtZW50KSA/ICdkb2N1bWVudCcgOiBzdGFydGluZ1RhZyhlbGVtZW50KTtcbiAgICAgIC8vRW5jb2RlIGFuZ2xlIGJyYWNrZXRzIHRvIHByZXZlbnQgaW5wdXQgZnJvbSBiZWluZyBzYW5pdGl6ZWQgdG8gZW1wdHkgc3RyaW5nICM4NjgzXG4gICAgICB0aHJvdyBuZ01pbkVycihcbiAgICAgICAgICAnYnRzdHJwZCcsXG4gICAgICAgICAgXCJBcHAgQWxyZWFkeSBCb290c3RyYXBwZWQgd2l0aCB0aGlzIEVsZW1lbnQgJ3swfSdcIixcbiAgICAgICAgICB0YWcucmVwbGFjZSgvPC8sJyZsdDsnKS5yZXBsYWNlKC8+LywnJmd0OycpKTtcbiAgICB9XG5cbiAgICBtb2R1bGVzID0gbW9kdWxlcyB8fCBbXTtcbiAgICBtb2R1bGVzLnVuc2hpZnQoWyckcHJvdmlkZScsIGZ1bmN0aW9uKCRwcm92aWRlKSB7XG4gICAgICAkcHJvdmlkZS52YWx1ZSgnJHJvb3RFbGVtZW50JywgZWxlbWVudCk7XG4gICAgfV0pO1xuXG4gICAgaWYgKGNvbmZpZy5kZWJ1Z0luZm9FbmFibGVkKSB7XG4gICAgICAvLyBQdXNoaW5nIHNvIHRoYXQgdGhpcyBvdmVycmlkZXMgYGRlYnVnSW5mb0VuYWJsZWRgIHNldHRpbmcgZGVmaW5lZCBpbiB1c2VyJ3MgYG1vZHVsZXNgLlxuICAgICAgbW9kdWxlcy5wdXNoKFsnJGNvbXBpbGVQcm92aWRlcicsIGZ1bmN0aW9uKCRjb21waWxlUHJvdmlkZXIpIHtcbiAgICAgICAgJGNvbXBpbGVQcm92aWRlci5kZWJ1Z0luZm9FbmFibGVkKHRydWUpO1xuICAgICAgfV0pO1xuICAgIH1cblxuICAgIG1vZHVsZXMudW5zaGlmdCgnbmcnKTtcbiAgICB2YXIgaW5qZWN0b3IgPSBjcmVhdGVJbmplY3Rvcihtb2R1bGVzLCBjb25maWcuc3RyaWN0RGkpO1xuICAgIGluamVjdG9yLmludm9rZShbJyRyb290U2NvcGUnLCAnJHJvb3RFbGVtZW50JywgJyRjb21waWxlJywgJyRpbmplY3RvcicsXG4gICAgICAgZnVuY3Rpb24gYm9vdHN0cmFwQXBwbHkoc2NvcGUsIGVsZW1lbnQsIGNvbXBpbGUsIGluamVjdG9yKSB7XG4gICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbigpIHtcbiAgICAgICAgICBlbGVtZW50LmRhdGEoJyRpbmplY3RvcicsIGluamVjdG9yKTtcbiAgICAgICAgICBjb21waWxlKGVsZW1lbnQpKHNjb3BlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XVxuICAgICk7XG4gICAgcmV0dXJuIGluamVjdG9yO1xuICB9O1xuXG4gIHZhciBOR19FTkFCTEVfREVCVUdfSU5GTyA9IC9eTkdfRU5BQkxFX0RFQlVHX0lORk8hLztcbiAgdmFyIE5HX0RFRkVSX0JPT1RTVFJBUCA9IC9eTkdfREVGRVJfQk9PVFNUUkFQIS87XG5cbiAgaWYgKHdpbmRvdyAmJiBOR19FTkFCTEVfREVCVUdfSU5GTy50ZXN0KHdpbmRvdy5uYW1lKSkge1xuICAgIGNvbmZpZy5kZWJ1Z0luZm9FbmFibGVkID0gdHJ1ZTtcbiAgICB3aW5kb3cubmFtZSA9IHdpbmRvdy5uYW1lLnJlcGxhY2UoTkdfRU5BQkxFX0RFQlVHX0lORk8sICcnKTtcbiAgfVxuXG4gIGlmICh3aW5kb3cgJiYgIU5HX0RFRkVSX0JPT1RTVFJBUC50ZXN0KHdpbmRvdy5uYW1lKSkge1xuICAgIHJldHVybiBkb0Jvb3RzdHJhcCgpO1xuICB9XG5cbiAgd2luZG93Lm5hbWUgPSB3aW5kb3cubmFtZS5yZXBsYWNlKE5HX0RFRkVSX0JPT1RTVFJBUCwgJycpO1xuICBhbmd1bGFyLnJlc3VtZUJvb3RzdHJhcCA9IGZ1bmN0aW9uKGV4dHJhTW9kdWxlcykge1xuICAgIGZvckVhY2goZXh0cmFNb2R1bGVzLCBmdW5jdGlvbihtb2R1bGUpIHtcbiAgICAgIG1vZHVsZXMucHVzaChtb2R1bGUpO1xuICAgIH0pO1xuICAgIGRvQm9vdHN0cmFwKCk7XG4gIH07XG59XG5cbi8qKlxuICogQG5nZG9jIGZ1bmN0aW9uXG4gKiBAbmFtZSBhbmd1bGFyLnJlbG9hZFdpdGhEZWJ1Z0luZm9cbiAqIEBtb2R1bGUgbmdcbiAqIEBkZXNjcmlwdGlvblxuICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gcmVsb2FkIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIHdpdGggZGVidWcgaW5mb3JtYXRpb24gdHVybmVkIG9uLlxuICogVGhpcyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYSBjYWxsIHRvIGAkY29tcGlsZVByb3ZpZGVyLmRlYnVnSW5mb0VuYWJsZWQoZmFsc2UpYC5cbiAqXG4gKiBTZWUge0BsaW5rIG5nLiRjb21waWxlUHJvdmlkZXIjZGVidWdJbmZvRW5hYmxlZH0gZm9yIG1vcmUuXG4gKi9cbmZ1bmN0aW9uIHJlbG9hZFdpdGhEZWJ1Z0luZm8oKSB7XG4gIHdpbmRvdy5uYW1lID0gJ05HX0VOQUJMRV9ERUJVR19JTkZPIScgKyB3aW5kb3cubmFtZTtcbiAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xufVxuXG4vKipcbiAqIEBuYW1lIGFuZ3VsYXIuZ2V0VGVzdGFiaWxpdHlcbiAqIEBtb2R1bGUgbmdcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSB0ZXN0YWJpbGl0eSBzZXJ2aWNlIGZvciB0aGUgaW5zdGFuY2Ugb2YgQW5ndWxhciBvbiB0aGUgZ2l2ZW5cbiAqIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgRE9NIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHJvb3Qgb2YgYW5ndWxhciBhcHBsaWNhdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0VGVzdGFiaWxpdHkocm9vdEVsZW1lbnQpIHtcbiAgcmV0dXJuIGFuZ3VsYXIuZWxlbWVudChyb290RWxlbWVudCkuaW5qZWN0b3IoKS5nZXQoJyQkdGVzdGFiaWxpdHknKTtcbn1cblxudmFyIFNOQUtFX0NBU0VfUkVHRVhQID0gL1tBLVpdL2c7XG5mdW5jdGlvbiBzbmFrZV9jYXNlKG5hbWUsIHNlcGFyYXRvcikge1xuICBzZXBhcmF0b3IgPSBzZXBhcmF0b3IgfHwgJ18nO1xuICByZXR1cm4gbmFtZS5yZXBsYWNlKFNOQUtFX0NBU0VfUkVHRVhQLCBmdW5jdGlvbihsZXR0ZXIsIHBvcykge1xuICAgIHJldHVybiAocG9zID8gc2VwYXJhdG9yIDogJycpICsgbGV0dGVyLnRvTG93ZXJDYXNlKCk7XG4gIH0pO1xufVxuXG52YXIgYmluZEpRdWVyeUZpcmVkID0gZmFsc2U7XG52YXIgc2tpcERlc3Ryb3lPbk5leHRKUXVlcnlDbGVhbkRhdGE7XG5mdW5jdGlvbiBiaW5kSlF1ZXJ5KCkge1xuICB2YXIgb3JpZ2luYWxDbGVhbkRhdGE7XG5cbiAgaWYgKGJpbmRKUXVlcnlGaXJlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGJpbmQgdG8galF1ZXJ5IGlmIHByZXNlbnQ7XG4gIGpRdWVyeSA9IHdpbmRvdy5qUXVlcnk7XG4gIC8vIFVzZSBqUXVlcnkgaWYgaXQgZXhpc3RzIHdpdGggcHJvcGVyIGZ1bmN0aW9uYWxpdHksIG90aGVyd2lzZSBkZWZhdWx0IHRvIHVzLlxuICAvLyBBbmd1bGFyIDEuMisgcmVxdWlyZXMgalF1ZXJ5IDEuNysgZm9yIG9uKCkvb2ZmKCkgc3VwcG9ydC5cbiAgLy8gQW5ndWxhciAxLjMrIHRlY2huaWNhbGx5IHJlcXVpcmVzIGF0IGxlYXN0IGpRdWVyeSAyLjErIGJ1dCBpdCBtYXkgd29yayB3aXRoIG9sZGVyXG4gIC8vIHZlcnNpb25zLiBJdCB3aWxsIG5vdCB3b3JrIGZvciBzdXJlIHdpdGggalF1ZXJ5IDwxLjcsIHRob3VnaC5cbiAgaWYgKGpRdWVyeSAmJiBqUXVlcnkuZm4ub24pIHtcbiAgICBqcUxpdGUgPSBqUXVlcnk7XG4gICAgZXh0ZW5kKGpRdWVyeS5mbiwge1xuICAgICAgc2NvcGU6IEpRTGl0ZVByb3RvdHlwZS5zY29wZSxcbiAgICAgIGlzb2xhdGVTY29wZTogSlFMaXRlUHJvdG90eXBlLmlzb2xhdGVTY29wZSxcbiAgICAgIGNvbnRyb2xsZXI6IEpRTGl0ZVByb3RvdHlwZS5jb250cm9sbGVyLFxuICAgICAgaW5qZWN0b3I6IEpRTGl0ZVByb3RvdHlwZS5pbmplY3RvcixcbiAgICAgIGluaGVyaXRlZERhdGE6IEpRTGl0ZVByb3RvdHlwZS5pbmhlcml0ZWREYXRhXG4gICAgfSk7XG5cbiAgICAvLyBBbGwgbm9kZXMgcmVtb3ZlZCBmcm9tIHRoZSBET00gdmlhIHZhcmlvdXMgalF1ZXJ5IEFQSXMgbGlrZSAucmVtb3ZlKClcbiAgICAvLyBhcmUgcGFzc2VkIHRocm91Z2ggalF1ZXJ5LmNsZWFuRGF0YS4gTW9ua2V5LXBhdGNoIHRoaXMgbWV0aG9kIHRvIGZpcmVcbiAgICAvLyB0aGUgJGRlc3Ryb3kgZXZlbnQgb24gYWxsIHJlbW92ZWQgbm9kZXMuXG4gICAgb3JpZ2luYWxDbGVhbkRhdGEgPSBqUXVlcnkuY2xlYW5EYXRhO1xuICAgIGpRdWVyeS5jbGVhbkRhdGEgPSBmdW5jdGlvbihlbGVtcykge1xuICAgICAgdmFyIGV2ZW50cztcbiAgICAgIGlmICghc2tpcERlc3Ryb3lPbk5leHRKUXVlcnlDbGVhbkRhdGEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGVsZW07IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKykge1xuICAgICAgICAgIGV2ZW50cyA9IGpRdWVyeS5fZGF0YShlbGVtLCBcImV2ZW50c1wiKTtcbiAgICAgICAgICBpZiAoZXZlbnRzICYmIGV2ZW50cy4kZGVzdHJveSkge1xuICAgICAgICAgICAgalF1ZXJ5KGVsZW0pLnRyaWdnZXJIYW5kbGVyKCckZGVzdHJveScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2tpcERlc3Ryb3lPbk5leHRKUXVlcnlDbGVhbkRhdGEgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9yaWdpbmFsQ2xlYW5EYXRhKGVsZW1zKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGpxTGl0ZSA9IEpRTGl0ZTtcbiAgfVxuXG4gIGFuZ3VsYXIuZWxlbWVudCA9IGpxTGl0ZTtcblxuICAvLyBQcmV2ZW50IGRvdWJsZS1wcm94eWluZy5cbiAgYmluZEpRdWVyeUZpcmVkID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiB0aHJvdyBlcnJvciBpZiB0aGUgYXJndW1lbnQgaXMgZmFsc3kuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydEFyZyhhcmcsIG5hbWUsIHJlYXNvbikge1xuICBpZiAoIWFyZykge1xuICAgIHRocm93IG5nTWluRXJyKCdhcmVxJywgXCJBcmd1bWVudCAnezB9JyBpcyB7MX1cIiwgKG5hbWUgfHwgJz8nKSwgKHJlYXNvbiB8fCBcInJlcXVpcmVkXCIpKTtcbiAgfVxuICByZXR1cm4gYXJnO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRBcmdGbihhcmcsIG5hbWUsIGFjY2VwdEFycmF5QW5ub3RhdGlvbikge1xuICBpZiAoYWNjZXB0QXJyYXlBbm5vdGF0aW9uICYmIGlzQXJyYXkoYXJnKSkge1xuICAgICAgYXJnID0gYXJnW2FyZy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIGFzc2VydEFyZyhpc0Z1bmN0aW9uKGFyZyksIG5hbWUsICdub3QgYSBmdW5jdGlvbiwgZ290ICcgK1xuICAgICAgKGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyA/IGFyZy5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnIDogdHlwZW9mIGFyZykpO1xuICByZXR1cm4gYXJnO1xufVxuXG4vKipcbiAqIHRocm93IGVycm9yIGlmIHRoZSBuYW1lIGdpdmVuIGlzIGhhc093blByb3BlcnR5XG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWUgICAgdGhlIG5hbWUgdG8gdGVzdFxuICogQHBhcmFtICB7U3RyaW5nfSBjb250ZXh0IHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZSBuYW1lIGlzIHVzZWQsIHN1Y2ggYXMgbW9kdWxlIG9yIGRpcmVjdGl2ZVxuICovXG5mdW5jdGlvbiBhc3NlcnROb3RIYXNPd25Qcm9wZXJ0eShuYW1lLCBjb250ZXh0KSB7XG4gIGlmIChuYW1lID09PSAnaGFzT3duUHJvcGVydHknKSB7XG4gICAgdGhyb3cgbmdNaW5FcnIoJ2JhZG5hbWUnLCBcImhhc093blByb3BlcnR5IGlzIG5vdCBhIHZhbGlkIHswfSBuYW1lXCIsIGNvbnRleHQpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSB2YWx1ZSBhY2Nlc3NpYmxlIGZyb20gdGhlIG9iamVjdCBieSBwYXRoLiBBbnkgdW5kZWZpbmVkIHRyYXZlcnNhbHMgYXJlIGlnbm9yZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogc3RhcnRpbmcgb2JqZWN0XG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aCBwYXRoIHRvIHRyYXZlcnNlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtiaW5kRm5Ub1Njb3BlPXRydWVdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB2YWx1ZSBhcyBhY2Nlc3NpYmxlIGJ5IHBhdGhcbiAqL1xuLy9UT0RPKG1pc2tvKTogdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZW1vdmVkXG5mdW5jdGlvbiBnZXR0ZXIob2JqLCBwYXRoLCBiaW5kRm5Ub1Njb3BlKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIG9iajtcbiAgdmFyIGtleXMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gIHZhciBrZXk7XG4gIHZhciBsYXN0SW5zdGFuY2UgPSBvYmo7XG4gIHZhciBsZW4gPSBrZXlzLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAob2JqKSB7XG4gICAgICBvYmogPSAobGFzdEluc3RhbmNlID0gb2JqKVtrZXldO1xuICAgIH1cbiAgfVxuICBpZiAoIWJpbmRGblRvU2NvcGUgJiYgaXNGdW5jdGlvbihvYmopKSB7XG4gICAgcmV0dXJuIGJpbmQobGFzdEluc3RhbmNlLCBvYmopO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBET00gc2libGluZ3MgYmV0d2VlbiB0aGUgZmlyc3QgYW5kIGxhc3Qgbm9kZSBpbiB0aGUgZ2l2ZW4gYXJyYXkuXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBsaWtlIG9iamVjdFxuICogQHJldHVybnMge2pxTGl0ZX0ganFMaXRlIGNvbGxlY3Rpb24gY29udGFpbmluZyB0aGUgbm9kZXNcbiAqL1xuZnVuY3Rpb24gZ2V0QmxvY2tOb2Rlcyhub2Rlcykge1xuICAvLyBUT0RPKHBlcmYpOiBqdXN0IGNoZWNrIGlmIGFsbCBpdGVtcyBpbiBgbm9kZXNgIGFyZSBzaWJsaW5ncyBhbmQgaWYgdGhleSBhcmUgcmV0dXJuIHRoZSBvcmlnaW5hbFxuICAvLyAgICAgICAgICAgICBjb2xsZWN0aW9uLCBvdGhlcndpc2UgdXBkYXRlIHRoZSBvcmlnaW5hbCBjb2xsZWN0aW9uLlxuICB2YXIgbm9kZSA9IG5vZGVzWzBdO1xuICB2YXIgZW5kTm9kZSA9IG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdO1xuICB2YXIgYmxvY2tOb2RlcyA9IFtub2RlXTtcblxuICBkbyB7XG4gICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgaWYgKCFub2RlKSBicmVhaztcbiAgICBibG9ja05vZGVzLnB1c2gobm9kZSk7XG4gIH0gd2hpbGUgKG5vZGUgIT09IGVuZE5vZGUpO1xuXG4gIHJldHVybiBqcUxpdGUoYmxvY2tOb2Rlcyk7XG59XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IG9iamVjdCB3aXRob3V0IGEgcHJvdG90eXBlLiBUaGlzIG9iamVjdCBpcyB1c2VmdWwgZm9yIGxvb2t1cCB3aXRob3V0IGhhdmluZyB0b1xuICogZ3VhcmQgYWdhaW5zdCBwcm90b3R5cGljYWxseSBpbmhlcml0ZWQgcHJvcGVydGllcyB2aWEgaGFzT3duUHJvcGVydHkuXG4gKlxuICogUmVsYXRlZCBtaWNyby1iZW5jaG1hcmtzOlxuICogLSBodHRwOi8vanNwZXJmLmNvbS9vYmplY3QtY3JlYXRlMlxuICogLSBodHRwOi8vanNwZXJmLmNvbS9wcm90by1tYXAtbG9va3VwLzJcbiAqIC0gaHR0cDovL2pzcGVyZi5jb20vZm9yLWluLXZzLW9iamVjdC1rZXlzMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1hcCgpIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbnZhciBOT0RFX1RZUEVfRUxFTUVOVCA9IDE7XG52YXIgTk9ERV9UWVBFX1RFWFQgPSAzO1xudmFyIE5PREVfVFlQRV9DT01NRU5UID0gODtcbnZhciBOT0RFX1RZUEVfRE9DVU1FTlQgPSA5O1xudmFyIE5PREVfVFlQRV9ET0NVTUVOVF9GUkFHTUVOVCA9IDExO1xuXG4vKipcbiAqIEBuZ2RvYyB0eXBlXG4gKiBAbmFtZSBhbmd1bGFyLk1vZHVsZVxuICogQG1vZHVsZSBuZ1xuICogQGRlc2NyaXB0aW9uXG4gKlxuICogSW50ZXJmYWNlIGZvciBjb25maWd1cmluZyBhbmd1bGFyIHtAbGluayBhbmd1bGFyLm1vZHVsZSBtb2R1bGVzfS5cbiAqL1xuXG5mdW5jdGlvbiBzZXR1cE1vZHVsZUxvYWRlcih3aW5kb3cpIHtcblxuICB2YXIgJGluamVjdG9yTWluRXJyID0gbWluRXJyKCckaW5qZWN0b3InKTtcbiAgdmFyIG5nTWluRXJyID0gbWluRXJyKCduZycpO1xuXG4gIGZ1bmN0aW9uIGVuc3VyZShvYmosIG5hbWUsIGZhY3RvcnkpIHtcbiAgICByZXR1cm4gb2JqW25hbWVdIHx8IChvYmpbbmFtZV0gPSBmYWN0b3J5KCkpO1xuICB9XG5cbiAgdmFyIGFuZ3VsYXIgPSBlbnN1cmUod2luZG93LCAnYW5ndWxhcicsIE9iamVjdCk7XG5cbiAgLy8gV2UgbmVlZCB0byBleHBvc2UgYGFuZ3VsYXIuJCRtaW5FcnJgIHRvIG1vZHVsZXMgc3VjaCBhcyBgbmdSZXNvdXJjZWAgdGhhdCByZWZlcmVuY2UgaXQgZHVyaW5nIGJvb3RzdHJhcFxuICBhbmd1bGFyLiQkbWluRXJyID0gYW5ndWxhci4kJG1pbkVyciB8fCBtaW5FcnI7XG5cbiAgcmV0dXJuIGVuc3VyZShhbmd1bGFyLCAnbW9kdWxlJywgZnVuY3Rpb24oKSB7XG4gICAgLyoqIEB0eXBlIHtPYmplY3QuPHN0cmluZywgYW5ndWxhci5Nb2R1bGU+fSAqL1xuICAgIHZhciBtb2R1bGVzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgZnVuY3Rpb25cbiAgICAgKiBAbmFtZSBhbmd1bGFyLm1vZHVsZVxuICAgICAqIEBtb2R1bGUgbmdcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKlxuICAgICAqIFRoZSBgYW5ndWxhci5tb2R1bGVgIGlzIGEgZ2xvYmFsIHBsYWNlIGZvciBjcmVhdGluZywgcmVnaXN0ZXJpbmcgYW5kIHJldHJpZXZpbmcgQW5ndWxhclxuICAgICAqIG1vZHVsZXMuXG4gICAgICogQWxsIG1vZHVsZXMgKGFuZ3VsYXIgY29yZSBvciAzcmQgcGFydHkpIHRoYXQgc2hvdWxkIGJlIGF2YWlsYWJsZSB0byBhbiBhcHBsaWNhdGlvbiBtdXN0IGJlXG4gICAgICogcmVnaXN0ZXJlZCB1c2luZyB0aGlzIG1lY2hhbmlzbS5cbiAgICAgKlxuICAgICAqIFdoZW4gcGFzc2VkIHR3byBvciBtb3JlIGFyZ3VtZW50cywgYSBuZXcgbW9kdWxlIGlzIGNyZWF0ZWQuICBJZiBwYXNzZWQgb25seSBvbmUgYXJndW1lbnQsIGFuXG4gICAgICogZXhpc3RpbmcgbW9kdWxlICh0aGUgbmFtZSBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGBtb2R1bGVgKSBpcyByZXRyaWV2ZWQuXG4gICAgICpcbiAgICAgKlxuICAgICAqICMgTW9kdWxlXG4gICAgICpcbiAgICAgKiBBIG1vZHVsZSBpcyBhIGNvbGxlY3Rpb24gb2Ygc2VydmljZXMsIGRpcmVjdGl2ZXMsIGNvbnRyb2xsZXJzLCBmaWx0ZXJzLCBhbmQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICAgKiBgYW5ndWxhci5tb2R1bGVgIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSB7QGxpbmsgYXV0by4kaW5qZWN0b3IgJGluamVjdG9yfS5cbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogLy8gQ3JlYXRlIGEgbmV3IG1vZHVsZVxuICAgICAqIHZhciBteU1vZHVsZSA9IGFuZ3VsYXIubW9kdWxlKCdteU1vZHVsZScsIFtdKTtcbiAgICAgKlxuICAgICAqIC8vIHJlZ2lzdGVyIGEgbmV3IHNlcnZpY2VcbiAgICAgKiBteU1vZHVsZS52YWx1ZSgnYXBwTmFtZScsICdNeUNvb2xBcHAnKTtcbiAgICAgKlxuICAgICAqIC8vIGNvbmZpZ3VyZSBleGlzdGluZyBzZXJ2aWNlcyBpbnNpZGUgaW5pdGlhbGl6YXRpb24gYmxvY2tzLlxuICAgICAqIG15TW9kdWxlLmNvbmZpZyhbJyRsb2NhdGlvblByb3ZpZGVyJywgZnVuY3Rpb24oJGxvY2F0aW9uUHJvdmlkZXIpIHtcbiAgICAgKiAgIC8vIENvbmZpZ3VyZSBleGlzdGluZyBwcm92aWRlcnNcbiAgICAgKiAgICRsb2NhdGlvblByb3ZpZGVyLmhhc2hQcmVmaXgoJyEnKTtcbiAgICAgKiB9XSk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGVuIHlvdSBjYW4gY3JlYXRlIGFuIGluamVjdG9yIGFuZCBsb2FkIHlvdXIgbW9kdWxlcyBsaWtlIHRoaXM6XG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIHZhciBpbmplY3RvciA9IGFuZ3VsYXIuaW5qZWN0b3IoWyduZycsICdteU1vZHVsZSddKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogSG93ZXZlciBpdCdzIG1vcmUgbGlrZWx5IHRoYXQgeW91J2xsIGp1c3QgdXNlXG4gICAgICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0FwcCBuZ0FwcH0gb3JcbiAgICAgKiB7QGxpbmsgYW5ndWxhci5ib290c3RyYXB9IHRvIHNpbXBsaWZ5IHRoaXMgcHJvY2VzcyBmb3IgeW91LlxuICAgICAqXG4gICAgICogQHBhcmFtIHshc3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdG8gY3JlYXRlIG9yIHJldHJpZXZlLlxuICAgICAqIEBwYXJhbSB7IUFycmF5LjxzdHJpbmc+PX0gcmVxdWlyZXMgSWYgc3BlY2lmaWVkIHRoZW4gbmV3IG1vZHVsZSBpcyBiZWluZyBjcmVhdGVkLiBJZlxuICAgICAqICAgICAgICB1bnNwZWNpZmllZCB0aGVuIHRoZSBtb2R1bGUgaXMgYmVpbmcgcmV0cmlldmVkIGZvciBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNvbmZpZ0ZuIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gZm9yIHRoZSBtb2R1bGUuIFNhbWUgYXNcbiAgICAgKiAgICAgICAge0BsaW5rIGFuZ3VsYXIuTW9kdWxlI2NvbmZpZyBNb2R1bGUjY29uZmlnKCl9LlxuICAgICAqIEByZXR1cm5zIHttb2R1bGV9IG5ldyBtb2R1bGUgd2l0aCB0aGUge0BsaW5rIGFuZ3VsYXIuTW9kdWxlfSBhcGkuXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1vZHVsZShuYW1lLCByZXF1aXJlcywgY29uZmlnRm4pIHtcbiAgICAgIHZhciBhc3NlcnROb3RIYXNPd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKG5hbWUsIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICdoYXNPd25Qcm9wZXJ0eScpIHtcbiAgICAgICAgICB0aHJvdyBuZ01pbkVycignYmFkbmFtZScsICdoYXNPd25Qcm9wZXJ0eSBpcyBub3QgYSB2YWxpZCB7MH0gbmFtZScsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBhc3NlcnROb3RIYXNPd25Qcm9wZXJ0eShuYW1lLCAnbW9kdWxlJyk7XG4gICAgICBpZiAocmVxdWlyZXMgJiYgbW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBtb2R1bGVzW25hbWVdID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnN1cmUobW9kdWxlcywgbmFtZSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghcmVxdWlyZXMpIHtcbiAgICAgICAgICB0aHJvdyAkaW5qZWN0b3JNaW5FcnIoJ25vbW9kJywgXCJNb2R1bGUgJ3swfScgaXMgbm90IGF2YWlsYWJsZSEgWW91IGVpdGhlciBtaXNzcGVsbGVkIFwiICtcbiAgICAgICAgICAgICBcInRoZSBtb2R1bGUgbmFtZSBvciBmb3Jnb3QgdG8gbG9hZCBpdC4gSWYgcmVnaXN0ZXJpbmcgYSBtb2R1bGUgZW5zdXJlIHRoYXQgeW91IFwiICtcbiAgICAgICAgICAgICBcInNwZWNpZnkgdGhlIGRlcGVuZGVuY2llcyBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlwiLCBuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBAdHlwZSB7IUFycmF5LjxBcnJheS48Kj4+fSAqL1xuICAgICAgICB2YXIgaW52b2tlUXVldWUgPSBbXTtcblxuICAgICAgICAvKiogQHR5cGUgeyFBcnJheS48RnVuY3Rpb24+fSAqL1xuICAgICAgICB2YXIgY29uZmlnQmxvY2tzID0gW107XG5cbiAgICAgICAgLyoqIEB0eXBlIHshQXJyYXkuPEZ1bmN0aW9uPn0gKi9cbiAgICAgICAgdmFyIHJ1bkJsb2NrcyA9IFtdO1xuXG4gICAgICAgIHZhciBjb25maWcgPSBpbnZva2VMYXRlcignJGluamVjdG9yJywgJ2ludm9rZScsICdwdXNoJywgY29uZmlnQmxvY2tzKTtcblxuICAgICAgICAvKiogQHR5cGUge2FuZ3VsYXIuTW9kdWxlfSAqL1xuICAgICAgICB2YXIgbW9kdWxlSW5zdGFuY2UgPSB7XG4gICAgICAgICAgLy8gUHJpdmF0ZSBzdGF0ZVxuICAgICAgICAgIF9pbnZva2VRdWV1ZTogaW52b2tlUXVldWUsXG4gICAgICAgICAgX2NvbmZpZ0Jsb2NrczogY29uZmlnQmxvY2tzLFxuICAgICAgICAgIF9ydW5CbG9ja3M6IHJ1bkJsb2NrcyxcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEBuZ2RvYyBwcm9wZXJ0eVxuICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI3JlcXVpcmVzXG4gICAgICAgICAgICogQG1vZHVsZSBuZ1xuICAgICAgICAgICAqXG4gICAgICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgICAgICogSG9sZHMgdGhlIGxpc3Qgb2YgbW9kdWxlcyB3aGljaCB0aGUgaW5qZWN0b3Igd2lsbCBsb2FkIGJlZm9yZSB0aGUgY3VycmVudCBtb2R1bGUgaXNcbiAgICAgICAgICAgKiBsb2FkZWQuXG4gICAgICAgICAgICovXG4gICAgICAgICAgcmVxdWlyZXM6IHJlcXVpcmVzLFxuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQG5nZG9jIHByb3BlcnR5XG4gICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjbmFtZVxuICAgICAgICAgICAqIEBtb2R1bGUgbmdcbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgICAgICAqIE5hbWUgb2YgdGhlIG1vZHVsZS5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBuYW1lOiBuYW1lLFxuXG5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjcHJvdmlkZXJcbiAgICAgICAgICAgKiBAbW9kdWxlIG5nXG4gICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgc2VydmljZSBuYW1lXG4gICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvdmlkZXJUeXBlIENvbnN0cnVjdGlvbiBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlIG9mIHRoZVxuICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLlxuICAgICAgICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgICAgICAqIFNlZSB7QGxpbmsgYXV0by4kcHJvdmlkZSNwcm92aWRlciAkcHJvdmlkZS5wcm92aWRlcigpfS5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBwcm92aWRlcjogaW52b2tlTGF0ZXIoJyRwcm92aWRlJywgJ3Byb3ZpZGVyJyksXG5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjZmFjdG9yeVxuICAgICAgICAgICAqIEBtb2R1bGUgbmdcbiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBzZXJ2aWNlIG5hbWVcbiAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm92aWRlckZ1bmN0aW9uIEZ1bmN0aW9uIGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2Ugb2YgdGhlIHNlcnZpY2UuXG4gICAgICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgICAgICogU2VlIHtAbGluayBhdXRvLiRwcm92aWRlI2ZhY3RvcnkgJHByb3ZpZGUuZmFjdG9yeSgpfS5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBmYWN0b3J5OiBpbnZva2VMYXRlcignJHByb3ZpZGUnLCAnZmFjdG9yeScpLFxuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI3NlcnZpY2VcbiAgICAgICAgICAgKiBAbW9kdWxlIG5nXG4gICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgc2VydmljZSBuYW1lXG4gICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29uc3RydWN0b3IgQSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW5zdGFudGlhdGVkLlxuICAgICAgICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgICAgICAqIFNlZSB7QGxpbmsgYXV0by4kcHJvdmlkZSNzZXJ2aWNlICRwcm92aWRlLnNlcnZpY2UoKX0uXG4gICAgICAgICAgICovXG4gICAgICAgICAgc2VydmljZTogaW52b2tlTGF0ZXIoJyRwcm92aWRlJywgJ3NlcnZpY2UnKSxcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSN2YWx1ZVxuICAgICAgICAgICAqIEBtb2R1bGUgbmdcbiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBzZXJ2aWNlIG5hbWVcbiAgICAgICAgICAgKiBAcGFyYW0geyp9IG9iamVjdCBTZXJ2aWNlIGluc3RhbmNlIG9iamVjdC5cbiAgICAgICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAgICAgKiBTZWUge0BsaW5rIGF1dG8uJHByb3ZpZGUjdmFsdWUgJHByb3ZpZGUudmFsdWUoKX0uXG4gICAgICAgICAgICovXG4gICAgICAgICAgdmFsdWU6IGludm9rZUxhdGVyKCckcHJvdmlkZScsICd2YWx1ZScpLFxuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI2NvbnN0YW50XG4gICAgICAgICAgICogQG1vZHVsZSBuZ1xuICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIGNvbnN0YW50IG5hbWVcbiAgICAgICAgICAgKiBAcGFyYW0geyp9IG9iamVjdCBDb25zdGFudCB2YWx1ZS5cbiAgICAgICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAgICAgKiBCZWNhdXNlIHRoZSBjb25zdGFudCBhcmUgZml4ZWQsIHRoZXkgZ2V0IGFwcGxpZWQgYmVmb3JlIG90aGVyIHByb3ZpZGUgbWV0aG9kcy5cbiAgICAgICAgICAgKiBTZWUge0BsaW5rIGF1dG8uJHByb3ZpZGUjY29uc3RhbnQgJHByb3ZpZGUuY29uc3RhbnQoKX0uXG4gICAgICAgICAgICovXG4gICAgICAgICAgY29uc3RhbnQ6IGludm9rZUxhdGVyKCckcHJvdmlkZScsICdjb25zdGFudCcsICd1bnNoaWZ0JyksXG5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjYW5pbWF0aW9uXG4gICAgICAgICAgICogQG1vZHVsZSBuZ1xuICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIGFuaW1hdGlvbiBuYW1lXG4gICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gYW5pbWF0aW9uRmFjdG9yeSBGYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2Ugb2YgYW5cbiAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi5cbiAgICAgICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqICoqTk9URSoqOiBhbmltYXRpb25zIHRha2UgZWZmZWN0IG9ubHkgaWYgdGhlICoqbmdBbmltYXRlKiogbW9kdWxlIGlzIGxvYWRlZC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogRGVmaW5lcyBhbiBhbmltYXRpb24gaG9vayB0aGF0IGNhbiBiZSBsYXRlciB1c2VkIHdpdGhcbiAgICAgICAgICAgKiB7QGxpbmsgbmdBbmltYXRlLiRhbmltYXRlICRhbmltYXRlfSBzZXJ2aWNlIGFuZCBkaXJlY3RpdmVzIHRoYXQgdXNlIHRoaXMgc2VydmljZS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIGBgYGpzXG4gICAgICAgICAgICogbW9kdWxlLmFuaW1hdGlvbignLmFuaW1hdGlvbi1uYW1lJywgZnVuY3Rpb24oJGluamVjdDEsICRpbmplY3QyKSB7XG4gICAgICAgICAgICogICByZXR1cm4ge1xuICAgICAgICAgICAqICAgICBldmVudE5hbWUgOiBmdW5jdGlvbihlbGVtZW50LCBkb25lKSB7XG4gICAgICAgICAgICogICAgICAgLy9jb2RlIHRvIHJ1biB0aGUgYW5pbWF0aW9uXG4gICAgICAgICAgICogICAgICAgLy9vbmNlIGNvbXBsZXRlLCB0aGVuIHJ1biBkb25lKClcbiAgICAgICAgICAgKiAgICAgICByZXR1cm4gZnVuY3Rpb24gY2FuY2VsbGF0aW9uRnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAqICAgICAgICAgLy9jb2RlIHRvIGNhbmNlbCB0aGUgYW5pbWF0aW9uXG4gICAgICAgICAgICogICAgICAgfVxuICAgICAgICAgICAqICAgICB9XG4gICAgICAgICAgICogICB9XG4gICAgICAgICAgICogfSlcbiAgICAgICAgICAgKiBgYGBcbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIFNlZSB7QGxpbmsgbmcuJGFuaW1hdGVQcm92aWRlciNyZWdpc3RlciAkYW5pbWF0ZVByb3ZpZGVyLnJlZ2lzdGVyKCl9IGFuZFxuICAgICAgICAgICAqIHtAbGluayBuZ0FuaW1hdGUgbmdBbmltYXRlIG1vZHVsZX0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICAgICAgICovXG4gICAgICAgICAgYW5pbWF0aW9uOiBpbnZva2VMYXRlcignJGFuaW1hdGVQcm92aWRlcicsICdyZWdpc3RlcicpLFxuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI2ZpbHRlclxuICAgICAgICAgICAqIEBtb2R1bGUgbmdcbiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBGaWx0ZXIgbmFtZS5cbiAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaWx0ZXJGYWN0b3J5IEZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZSBvZiBmaWx0ZXIuXG4gICAgICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgICAgICogU2VlIHtAbGluayBuZy4kZmlsdGVyUHJvdmlkZXIjcmVnaXN0ZXIgJGZpbHRlclByb3ZpZGVyLnJlZ2lzdGVyKCl9LlxuICAgICAgICAgICAqL1xuICAgICAgICAgIGZpbHRlcjogaW52b2tlTGF0ZXIoJyRmaWx0ZXJQcm92aWRlcicsICdyZWdpc3RlcicpLFxuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI2NvbnRyb2xsZXJcbiAgICAgICAgICAgKiBAbW9kdWxlIG5nXG4gICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSBuYW1lIENvbnRyb2xsZXIgbmFtZSwgb3IgYW4gb2JqZWN0IG1hcCBvZiBjb250cm9sbGVycyB3aGVyZSB0aGVcbiAgICAgICAgICAgKiAgICBrZXlzIGFyZSB0aGUgbmFtZXMgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZSBjb25zdHJ1Y3RvcnMuXG4gICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29uc3RydWN0b3IgQ29udHJvbGxlciBjb25zdHJ1Y3RvciBmdW5jdGlvbi5cbiAgICAgICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAgICAgKiBTZWUge0BsaW5rIG5nLiRjb250cm9sbGVyUHJvdmlkZXIjcmVnaXN0ZXIgJGNvbnRyb2xsZXJQcm92aWRlci5yZWdpc3RlcigpfS5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBjb250cm9sbGVyOiBpbnZva2VMYXRlcignJGNvbnRyb2xsZXJQcm92aWRlcicsICdyZWdpc3RlcicpLFxuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI2RpcmVjdGl2ZVxuICAgICAgICAgICAqIEBtb2R1bGUgbmdcbiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IG5hbWUgRGlyZWN0aXZlIG5hbWUsIG9yIGFuIG9iamVjdCBtYXAgb2YgZGlyZWN0aXZlcyB3aGVyZSB0aGVcbiAgICAgICAgICAgKiAgICBrZXlzIGFyZSB0aGUgbmFtZXMgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZSBmYWN0b3JpZXMuXG4gICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZGlyZWN0aXZlRmFjdG9yeSBGYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2Ugb2ZcbiAgICAgICAgICAgKiBkaXJlY3RpdmVzLlxuICAgICAgICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgICAgICAqIFNlZSB7QGxpbmsgbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmUgJGNvbXBpbGVQcm92aWRlci5kaXJlY3RpdmUoKX0uXG4gICAgICAgICAgICovXG4gICAgICAgICAgZGlyZWN0aXZlOiBpbnZva2VMYXRlcignJGNvbXBpbGVQcm92aWRlcicsICdkaXJlY3RpdmUnKSxcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSNjb25maWdcbiAgICAgICAgICAgKiBAbW9kdWxlIG5nXG4gICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29uZmlnRm4gRXhlY3V0ZSB0aGlzIGZ1bmN0aW9uIG9uIG1vZHVsZSBsb2FkLiBVc2VmdWwgZm9yIHNlcnZpY2VcbiAgICAgICAgICAgKiAgICBjb25maWd1cmF0aW9uLlxuICAgICAgICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgICAgICAqIFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbiBtb2R1bGUgbG9hZGluZy5cbiAgICAgICAgICAgKiBGb3IgbW9yZSBhYm91dCBob3cgdG8gY29uZmlndXJlIHNlcnZpY2VzLCBzZWVcbiAgICAgICAgICAgKiB7QGxpbmsgcHJvdmlkZXJzI3Byb3ZpZGVyLXJlY2lwZSBQcm92aWRlciBSZWNpcGV9LlxuICAgICAgICAgICAqL1xuICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI3J1blxuICAgICAgICAgICAqIEBtb2R1bGUgbmdcbiAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpbml0aWFsaXphdGlvbkZuIEV4ZWN1dGUgdGhpcyBmdW5jdGlvbiBhZnRlciBpbmplY3RvciBjcmVhdGlvbi5cbiAgICAgICAgICAgKiAgICBVc2VmdWwgZm9yIGFwcGxpY2F0aW9uIGluaXRpYWxpemF0aW9uLlxuICAgICAgICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgICAgICAqIFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIHNob3VsZCBiZSBwZXJmb3JtZWQgd2hlbiB0aGUgaW5qZWN0b3IgaXMgZG9uZVxuICAgICAgICAgICAqIGxvYWRpbmcgYWxsIG1vZHVsZXMuXG4gICAgICAgICAgICovXG4gICAgICAgICAgcnVuOiBmdW5jdGlvbihibG9jaykge1xuICAgICAgICAgICAgcnVuQmxvY2tzLnB1c2goYmxvY2spO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChjb25maWdGbikge1xuICAgICAgICAgIGNvbmZpZyhjb25maWdGbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbW9kdWxlSW5zdGFuY2U7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm92aWRlclxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gaW5zZXJ0TWV0aG9kXG4gICAgICAgICAqIEByZXR1cm5zIHthbmd1bGFyLk1vZHVsZX1cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGludm9rZUxhdGVyKHByb3ZpZGVyLCBtZXRob2QsIGluc2VydE1ldGhvZCwgcXVldWUpIHtcbiAgICAgICAgICBpZiAoIXF1ZXVlKSBxdWV1ZSA9IGludm9rZVF1ZXVlO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHF1ZXVlW2luc2VydE1ldGhvZCB8fCAncHVzaCddKFtwcm92aWRlciwgbWV0aG9kLCBhcmd1bWVudHNdKTtcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVJbnN0YW5jZTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICB9KTtcblxufVxuXG4vKiBnbG9iYWw6IHRvRGVidWdTdHJpbmc6IHRydWUgKi9cblxuZnVuY3Rpb24gc2VyaWFsaXplT2JqZWN0KG9iaikge1xuICB2YXIgc2VlbiA9IFtdO1xuXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIGZ1bmN0aW9uKGtleSwgdmFsKSB7XG4gICAgdmFsID0gdG9Kc29uUmVwbGFjZXIoa2V5LCB2YWwpO1xuICAgIGlmIChpc09iamVjdCh2YWwpKSB7XG5cbiAgICAgIGlmIChzZWVuLmluZGV4T2YodmFsKSA+PSAwKSByZXR1cm4gJzw8YWxyZWFkeSBzZWVuPj4nO1xuXG4gICAgICBzZWVuLnB1c2godmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRvRGVidWdTdHJpbmcob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG9iai50b1N0cmluZygpLnJlcGxhY2UoLyBcXHtbXFxzXFxTXSokLywgJycpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZU9iamVjdChvYmopO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qIGdsb2JhbCBhbmd1bGFyTW9kdWxlOiB0cnVlLFxuICB2ZXJzaW9uOiB0cnVlLFxuXG4gICRMb2NhbGVQcm92aWRlcixcbiAgJENvbXBpbGVQcm92aWRlcixcblxuICBodG1sQW5jaG9yRGlyZWN0aXZlLFxuICBpbnB1dERpcmVjdGl2ZSxcbiAgaW5wdXREaXJlY3RpdmUsXG4gIGZvcm1EaXJlY3RpdmUsXG4gIHNjcmlwdERpcmVjdGl2ZSxcbiAgc2VsZWN0RGlyZWN0aXZlLFxuICBzdHlsZURpcmVjdGl2ZSxcbiAgb3B0aW9uRGlyZWN0aXZlLFxuICBuZ0JpbmREaXJlY3RpdmUsXG4gIG5nQmluZEh0bWxEaXJlY3RpdmUsXG4gIG5nQmluZFRlbXBsYXRlRGlyZWN0aXZlLFxuICBuZ0NsYXNzRGlyZWN0aXZlLFxuICBuZ0NsYXNzRXZlbkRpcmVjdGl2ZSxcbiAgbmdDbGFzc09kZERpcmVjdGl2ZSxcbiAgbmdDc3BEaXJlY3RpdmUsXG4gIG5nQ2xvYWtEaXJlY3RpdmUsXG4gIG5nQ29udHJvbGxlckRpcmVjdGl2ZSxcbiAgbmdGb3JtRGlyZWN0aXZlLFxuICBuZ0hpZGVEaXJlY3RpdmUsXG4gIG5nSWZEaXJlY3RpdmUsXG4gIG5nSW5jbHVkZURpcmVjdGl2ZSxcbiAgbmdJbmNsdWRlRmlsbENvbnRlbnREaXJlY3RpdmUsXG4gIG5nSW5pdERpcmVjdGl2ZSxcbiAgbmdOb25CaW5kYWJsZURpcmVjdGl2ZSxcbiAgbmdQbHVyYWxpemVEaXJlY3RpdmUsXG4gIG5nUmVwZWF0RGlyZWN0aXZlLFxuICBuZ1Nob3dEaXJlY3RpdmUsXG4gIG5nU3R5bGVEaXJlY3RpdmUsXG4gIG5nU3dpdGNoRGlyZWN0aXZlLFxuICBuZ1N3aXRjaFdoZW5EaXJlY3RpdmUsXG4gIG5nU3dpdGNoRGVmYXVsdERpcmVjdGl2ZSxcbiAgbmdPcHRpb25zRGlyZWN0aXZlLFxuICBuZ1RyYW5zY2x1ZGVEaXJlY3RpdmUsXG4gIG5nTW9kZWxEaXJlY3RpdmUsXG4gIG5nTGlzdERpcmVjdGl2ZSxcbiAgbmdDaGFuZ2VEaXJlY3RpdmUsXG4gIHBhdHRlcm5EaXJlY3RpdmUsXG4gIHBhdHRlcm5EaXJlY3RpdmUsXG4gIHJlcXVpcmVkRGlyZWN0aXZlLFxuICByZXF1aXJlZERpcmVjdGl2ZSxcbiAgbWlubGVuZ3RoRGlyZWN0aXZlLFxuICBtaW5sZW5ndGhEaXJlY3RpdmUsXG4gIG1heGxlbmd0aERpcmVjdGl2ZSxcbiAgbWF4bGVuZ3RoRGlyZWN0aXZlLFxuICBuZ1ZhbHVlRGlyZWN0aXZlLFxuICBuZ01vZGVsT3B0aW9uc0RpcmVjdGl2ZSxcbiAgbmdBdHRyaWJ1dGVBbGlhc0RpcmVjdGl2ZXMsXG4gIG5nRXZlbnREaXJlY3RpdmVzLFxuXG4gICRBbmNob3JTY3JvbGxQcm92aWRlcixcbiAgJEFuaW1hdGVQcm92aWRlcixcbiAgJEJyb3dzZXJQcm92aWRlcixcbiAgJENhY2hlRmFjdG9yeVByb3ZpZGVyLFxuICAkQ29udHJvbGxlclByb3ZpZGVyLFxuICAkRG9jdW1lbnRQcm92aWRlcixcbiAgJEV4Y2VwdGlvbkhhbmRsZXJQcm92aWRlcixcbiAgJEZpbHRlclByb3ZpZGVyLFxuICAkSW50ZXJwb2xhdGVQcm92aWRlcixcbiAgJEludGVydmFsUHJvdmlkZXIsXG4gICRIdHRwUHJvdmlkZXIsXG4gICRIdHRwQmFja2VuZFByb3ZpZGVyLFxuICAkTG9jYXRpb25Qcm92aWRlcixcbiAgJExvZ1Byb3ZpZGVyLFxuICAkUGFyc2VQcm92aWRlcixcbiAgJFJvb3RTY29wZVByb3ZpZGVyLFxuICAkUVByb3ZpZGVyLFxuICAkJFFQcm92aWRlcixcbiAgJCRTYW5pdGl6ZVVyaVByb3ZpZGVyLFxuICAkU2NlUHJvdmlkZXIsXG4gICRTY2VEZWxlZ2F0ZVByb3ZpZGVyLFxuICAkU25pZmZlclByb3ZpZGVyLFxuICAkVGVtcGxhdGVDYWNoZVByb3ZpZGVyLFxuICAkVGVtcGxhdGVSZXF1ZXN0UHJvdmlkZXIsXG4gICQkVGVzdGFiaWxpdHlQcm92aWRlcixcbiAgJFRpbWVvdXRQcm92aWRlcixcbiAgJCRSQUZQcm92aWRlcixcbiAgJCRBc3luY0NhbGxiYWNrUHJvdmlkZXIsXG4gICRXaW5kb3dQcm92aWRlclxuKi9cblxuXG4vKipcbiAqIEBuZ2RvYyBvYmplY3RcbiAqIEBuYW1lIGFuZ3VsYXIudmVyc2lvblxuICogQG1vZHVsZSBuZ1xuICogQGRlc2NyaXB0aW9uXG4gKiBBbiBvYmplY3QgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBBbmd1bGFySlMgdmVyc2lvbi4gVGhpcyBvYmplY3QgaGFzIHRoZVxuICogZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogLSBgZnVsbGAg4oCTIGB7c3RyaW5nfWAg4oCTIEZ1bGwgdmVyc2lvbiBzdHJpbmcsIHN1Y2ggYXMgXCIwLjkuMThcIi5cbiAqIC0gYG1ham9yYCDigJMgYHtudW1iZXJ9YCDigJMgTWFqb3IgdmVyc2lvbiBudW1iZXIsIHN1Y2ggYXMgXCIwXCIuXG4gKiAtIGBtaW5vcmAg4oCTIGB7bnVtYmVyfWAg4oCTIE1pbm9yIHZlcnNpb24gbnVtYmVyLCBzdWNoIGFzIFwiOVwiLlxuICogLSBgZG90YCDigJMgYHtudW1iZXJ9YCDigJMgRG90IHZlcnNpb24gbnVtYmVyLCBzdWNoIGFzIFwiMThcIi5cbiAqIC0gYGNvZGVOYW1lYCDigJMgYHtzdHJpbmd9YCDigJMgQ29kZSBuYW1lIG9mIHRoZSByZWxlYXNlLCBzdWNoIGFzIFwiamlnZ2xpbmctYXJtZmF0XCIuXG4gKi9cbnZhciB2ZXJzaW9uID0ge1xuICBmdWxsOiAnMS4zLjMnLCAgICAvLyBhbGwgb2YgdGhlc2UgcGxhY2Vob2xkZXIgc3RyaW5ncyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGdydW50J3NcbiAgbWFqb3I6IDEsICAgIC8vIHBhY2thZ2UgdGFza1xuICBtaW5vcjogMyxcbiAgZG90OiAzLFxuICBjb2RlTmFtZTogJ3VuZGVyc2VhLWFyaXRobWV0aWMnXG59O1xuXG5cbmZ1bmN0aW9uIHB1Ymxpc2hFeHRlcm5hbEFQSShhbmd1bGFyKSB7XG4gIGV4dGVuZChhbmd1bGFyLCB7XG4gICAgJ2Jvb3RzdHJhcCc6IGJvb3RzdHJhcCxcbiAgICAnY29weSc6IGNvcHksXG4gICAgJ2V4dGVuZCc6IGV4dGVuZCxcbiAgICAnZXF1YWxzJzogZXF1YWxzLFxuICAgICdlbGVtZW50JzoganFMaXRlLFxuICAgICdmb3JFYWNoJzogZm9yRWFjaCxcbiAgICAnaW5qZWN0b3InOiBjcmVhdGVJbmplY3RvcixcbiAgICAnbm9vcCc6IG5vb3AsXG4gICAgJ2JpbmQnOiBiaW5kLFxuICAgICd0b0pzb24nOiB0b0pzb24sXG4gICAgJ2Zyb21Kc29uJzogZnJvbUpzb24sXG4gICAgJ2lkZW50aXR5JzogaWRlbnRpdHksXG4gICAgJ2lzVW5kZWZpbmVkJzogaXNVbmRlZmluZWQsXG4gICAgJ2lzRGVmaW5lZCc6IGlzRGVmaW5lZCxcbiAgICAnaXNTdHJpbmcnOiBpc1N0cmluZyxcbiAgICAnaXNGdW5jdGlvbic6IGlzRnVuY3Rpb24sXG4gICAgJ2lzT2JqZWN0JzogaXNPYmplY3QsXG4gICAgJ2lzTnVtYmVyJzogaXNOdW1iZXIsXG4gICAgJ2lzRWxlbWVudCc6IGlzRWxlbWVudCxcbiAgICAnaXNBcnJheSc6IGlzQXJyYXksXG4gICAgJ3ZlcnNpb24nOiB2ZXJzaW9uLFxuICAgICdpc0RhdGUnOiBpc0RhdGUsXG4gICAgJ2xvd2VyY2FzZSc6IGxvd2VyY2FzZSxcbiAgICAndXBwZXJjYXNlJzogdXBwZXJjYXNlLFxuICAgICdjYWxsYmFja3MnOiB7Y291bnRlcjogMH0sXG4gICAgJ2dldFRlc3RhYmlsaXR5JzogZ2V0VGVzdGFiaWxpdHksXG4gICAgJyQkbWluRXJyJzogbWluRXJyLFxuICAgICckJGNzcCc6IGNzcCxcbiAgICAncmVsb2FkV2l0aERlYnVnSW5mbyc6IHJlbG9hZFdpdGhEZWJ1Z0luZm9cbiAgfSk7XG5cbiAgYW5ndWxhck1vZHVsZSA9IHNldHVwTW9kdWxlTG9hZGVyKHdpbmRvdyk7XG4gIHRyeSB7XG4gICAgYW5ndWxhck1vZHVsZSgnbmdMb2NhbGUnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGFuZ3VsYXJNb2R1bGUoJ25nTG9jYWxlJywgW10pLnByb3ZpZGVyKCckbG9jYWxlJywgJExvY2FsZVByb3ZpZGVyKTtcbiAgfVxuXG4gIGFuZ3VsYXJNb2R1bGUoJ25nJywgWyduZ0xvY2FsZSddLCBbJyRwcm92aWRlJyxcbiAgICBmdW5jdGlvbiBuZ01vZHVsZSgkcHJvdmlkZSkge1xuICAgICAgLy8gJCRzYW5pdGl6ZVVyaVByb3ZpZGVyIG5lZWRzIHRvIGJlIGJlZm9yZSAkY29tcGlsZVByb3ZpZGVyIGFzIGl0IGlzIHVzZWQgYnkgaXQuXG4gICAgICAkcHJvdmlkZS5wcm92aWRlcih7XG4gICAgICAgICQkc2FuaXRpemVVcmk6ICQkU2FuaXRpemVVcmlQcm92aWRlclxuICAgICAgfSk7XG4gICAgICAkcHJvdmlkZS5wcm92aWRlcignJGNvbXBpbGUnLCAkQ29tcGlsZVByb3ZpZGVyKS5cbiAgICAgICAgZGlyZWN0aXZlKHtcbiAgICAgICAgICAgIGE6IGh0bWxBbmNob3JEaXJlY3RpdmUsXG4gICAgICAgICAgICBpbnB1dDogaW5wdXREaXJlY3RpdmUsXG4gICAgICAgICAgICB0ZXh0YXJlYTogaW5wdXREaXJlY3RpdmUsXG4gICAgICAgICAgICBmb3JtOiBmb3JtRGlyZWN0aXZlLFxuICAgICAgICAgICAgc2NyaXB0OiBzY3JpcHREaXJlY3RpdmUsXG4gICAgICAgICAgICBzZWxlY3Q6IHNlbGVjdERpcmVjdGl2ZSxcbiAgICAgICAgICAgIHN0eWxlOiBzdHlsZURpcmVjdGl2ZSxcbiAgICAgICAgICAgIG9wdGlvbjogb3B0aW9uRGlyZWN0aXZlLFxuICAgICAgICAgICAgbmdCaW5kOiBuZ0JpbmREaXJlY3RpdmUsXG4gICAgICAgICAgICBuZ0JpbmRIdG1sOiBuZ0JpbmRIdG1sRGlyZWN0aXZlLFxuICAgICAgICAgICAgbmdCaW5kVGVtcGxhdGU6IG5nQmluZFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgbmdDbGFzczogbmdDbGFzc0RpcmVjdGl2ZSxcbiAgICAgICAgICAgIG5nQ2xhc3NFdmVuOiBuZ0NsYXNzRXZlbkRpcmVjdGl2ZSxcbiAgICAgICAgICAgIG5nQ2xhc3NPZGQ6IG5nQ2xhc3NPZGREaXJlY3RpdmUsXG4gICAgICAgICAgICBuZ0Nsb2FrOiBuZ0Nsb2FrRGlyZWN0aXZlLFxuICAgICAgICAgICAgbmdDb250cm9sbGVyOiBuZ0NvbnRyb2xsZXJEaXJlY3RpdmUsXG4gICAgICAgICAgICBuZ0Zvcm06IG5nRm9ybURpcmVjdGl2ZSxcbiAgICAgICAgICAgIG5nSGlkZTogbmdIaWRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgbmdJZjogbmdJZkRpcmVjdGl2ZSxcbiAgICAgICAgICAgIG5nSW5jbHVkZTogbmdJbmNsdWRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgbmdJbml0OiBuZ0luaXREaXJlY3RpdmUsXG4gICAgICAgICAgICBuZ05vbkJpbmRhYmxlOiBuZ05vbkJpbmRhYmxlRGlyZWN0aXZlLFxuICAgICAgICAgICAgbmdQbHVyYWxpemU6IG5nUGx1cmFsaXplRGlyZWN0aXZlLFxuICAgICAgICAgICAgbmdSZXBlYXQ6IG5nUmVwZWF0RGlyZWN0aXZlLFxuICAgICAgICAgICAgbmdTaG93OiBuZ1Nob3dEaXJlY3RpdmUsXG4gICAgICAgICAgICBuZ1N0eWxlOiBuZ1N0eWxlRGlyZWN0aXZlLFxuICAgICAgICAgICAgbmdTd2l0Y2g6IG5nU3dpdGNoRGlyZWN0aXZlLFxuICAgICAgICAgICAgbmdTd2l0Y2hXaGVuOiBuZ1N3aXRjaFdoZW5EaXJlY3RpdmUsXG4gICAgICAgICAgICBuZ1N3aXRjaERlZmF1bHQ6IG5nU3dpdGNoRGVmYXVsdERpcmVjdGl2ZSxcbiAgICAgICAgICAgIG5nT3B0aW9uczogbmdPcHRpb25zRGlyZWN0aXZlLFxuICAgICAgICAgICAgbmdUcmFuc2NsdWRlOiBuZ1RyYW5zY2x1ZGVEaXJlY3RpdmUsXG4gICAgICAgICAgICBuZ01vZGVsOiBuZ01vZGVsRGlyZWN0aXZlLFxuICAgICAgICAgICAgbmdMaXN0OiBuZ0xpc3REaXJlY3RpdmUsXG4gICAgICAgICAgICBuZ0NoYW5nZTogbmdDaGFuZ2VEaXJlY3RpdmUsXG4gICAgICAgICAgICBwYXR0ZXJuOiBwYXR0ZXJuRGlyZWN0aXZlLFxuICAgICAgICAgICAgbmdQYXR0ZXJuOiBwYXR0ZXJuRGlyZWN0aXZlLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkRGlyZWN0aXZlLFxuICAgICAgICAgICAgbmdSZXF1aXJlZDogcmVxdWlyZWREaXJlY3RpdmUsXG4gICAgICAgICAgICBtaW5sZW5ndGg6IG1pbmxlbmd0aERpcmVjdGl2ZSxcbiAgICAgICAgICAgIG5nTWlubGVuZ3RoOiBtaW5sZW5ndGhEaXJlY3RpdmUsXG4gICAgICAgICAgICBtYXhsZW5ndGg6IG1heGxlbmd0aERpcmVjdGl2ZSxcbiAgICAgICAgICAgIG5nTWF4bGVuZ3RoOiBtYXhsZW5ndGhEaXJlY3RpdmUsXG4gICAgICAgICAgICBuZ1ZhbHVlOiBuZ1ZhbHVlRGlyZWN0aXZlLFxuICAgICAgICAgICAgbmdNb2RlbE9wdGlvbnM6IG5nTW9kZWxPcHRpb25zRGlyZWN0aXZlXG4gICAgICAgIH0pLlxuICAgICAgICBkaXJlY3RpdmUoe1xuICAgICAgICAgIG5nSW5jbHVkZTogbmdJbmNsdWRlRmlsbENvbnRlbnREaXJlY3RpdmVcbiAgICAgICAgfSkuXG4gICAgICAgIGRpcmVjdGl2ZShuZ0F0dHJpYnV0ZUFsaWFzRGlyZWN0aXZlcykuXG4gICAgICAgIGRpcmVjdGl2ZShuZ0V2ZW50RGlyZWN0aXZlcyk7XG4gICAgICAkcHJvdmlkZS5wcm92aWRlcih7XG4gICAgICAgICRhbmNob3JTY3JvbGw6ICRBbmNob3JTY3JvbGxQcm92aWRlcixcbiAgICAgICAgJGFuaW1hdGU6ICRBbmltYXRlUHJvdmlkZXIsXG4gICAgICAgICRicm93c2VyOiAkQnJvd3NlclByb3ZpZGVyLFxuICAgICAgICAkY2FjaGVGYWN0b3J5OiAkQ2FjaGVGYWN0b3J5UHJvdmlkZXIsXG4gICAgICAgICRjb250cm9sbGVyOiAkQ29udHJvbGxlclByb3ZpZGVyLFxuICAgICAgICAkZG9jdW1lbnQ6ICREb2N1bWVudFByb3ZpZGVyLFxuICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcjogJEV4Y2VwdGlvbkhhbmRsZXJQcm92aWRlcixcbiAgICAgICAgJGZpbHRlcjogJEZpbHRlclByb3ZpZGVyLFxuICAgICAgICAkaW50ZXJwb2xhdGU6ICRJbnRlcnBvbGF0ZVByb3ZpZGVyLFxuICAgICAgICAkaW50ZXJ2YWw6ICRJbnRlcnZhbFByb3ZpZGVyLFxuICAgICAgICAkaHR0cDogJEh0dHBQcm92aWRlcixcbiAgICAgICAgJGh0dHBCYWNrZW5kOiAkSHR0cEJhY2tlbmRQcm92aWRlcixcbiAgICAgICAgJGxvY2F0aW9uOiAkTG9jYXRpb25Qcm92aWRlcixcbiAgICAgICAgJGxvZzogJExvZ1Byb3ZpZGVyLFxuICAgICAgICAkcGFyc2U6ICRQYXJzZVByb3ZpZGVyLFxuICAgICAgICAkcm9vdFNjb3BlOiAkUm9vdFNjb3BlUHJvdmlkZXIsXG4gICAgICAgICRxOiAkUVByb3ZpZGVyLFxuICAgICAgICAkJHE6ICQkUVByb3ZpZGVyLFxuICAgICAgICAkc2NlOiAkU2NlUHJvdmlkZXIsXG4gICAgICAgICRzY2VEZWxlZ2F0ZTogJFNjZURlbGVnYXRlUHJvdmlkZXIsXG4gICAgICAgICRzbmlmZmVyOiAkU25pZmZlclByb3ZpZGVyLFxuICAgICAgICAkdGVtcGxhdGVDYWNoZTogJFRlbXBsYXRlQ2FjaGVQcm92aWRlcixcbiAgICAgICAgJHRlbXBsYXRlUmVxdWVzdDogJFRlbXBsYXRlUmVxdWVzdFByb3ZpZGVyLFxuICAgICAgICAkJHRlc3RhYmlsaXR5OiAkJFRlc3RhYmlsaXR5UHJvdmlkZXIsXG4gICAgICAgICR0aW1lb3V0OiAkVGltZW91dFByb3ZpZGVyLFxuICAgICAgICAkd2luZG93OiAkV2luZG93UHJvdmlkZXIsXG4gICAgICAgICQkckFGOiAkJFJBRlByb3ZpZGVyLFxuICAgICAgICAkJGFzeW5jQ2FsbGJhY2s6ICQkQXN5bmNDYWxsYmFja1Byb3ZpZGVyXG4gICAgICB9KTtcbiAgICB9XG4gIF0pO1xufVxuXG4vKiBnbG9iYWwgSlFMaXRlUHJvdG90eXBlOiB0cnVlLFxuICBhZGRFdmVudExpc3RlbmVyRm46IHRydWUsXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXJGbjogdHJ1ZSxcbiAgQk9PTEVBTl9BVFRSOiB0cnVlLFxuICBBTElBU0VEX0FUVFI6IHRydWUsXG4qL1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vL0pRTGl0ZVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgYW5ndWxhci5lbGVtZW50XG4gKiBAbW9kdWxlIG5nXG4gKiBAa2luZCBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogV3JhcHMgYSByYXcgRE9NIGVsZW1lbnQgb3IgSFRNTCBzdHJpbmcgYXMgYSBbalF1ZXJ5XShodHRwOi8vanF1ZXJ5LmNvbSkgZWxlbWVudC5cbiAqXG4gKiBJZiBqUXVlcnkgaXMgYXZhaWxhYmxlLCBgYW5ndWxhci5lbGVtZW50YCBpcyBhbiBhbGlhcyBmb3IgdGhlXG4gKiBbalF1ZXJ5XShodHRwOi8vYXBpLmpxdWVyeS5jb20valF1ZXJ5LykgZnVuY3Rpb24uIElmIGpRdWVyeSBpcyBub3QgYXZhaWxhYmxlLCBgYW5ndWxhci5lbGVtZW50YFxuICogZGVsZWdhdGVzIHRvIEFuZ3VsYXIncyBidWlsdC1pbiBzdWJzZXQgb2YgalF1ZXJ5LCBjYWxsZWQgXCJqUXVlcnkgbGl0ZVwiIG9yIFwianFMaXRlLlwiXG4gKlxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXN1Y2Nlc3NcIj5qcUxpdGUgaXMgYSB0aW55LCBBUEktY29tcGF0aWJsZSBzdWJzZXQgb2YgalF1ZXJ5IHRoYXQgYWxsb3dzXG4gKiBBbmd1bGFyIHRvIG1hbmlwdWxhdGUgdGhlIERPTSBpbiBhIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJsZSB3YXkuICoqanFMaXRlKiogaW1wbGVtZW50cyBvbmx5IHRoZSBtb3N0XG4gKiBjb21tb25seSBuZWVkZWQgZnVuY3Rpb25hbGl0eSB3aXRoIHRoZSBnb2FsIG9mIGhhdmluZyBhIHZlcnkgc21hbGwgZm9vdHByaW50LjwvZGl2PlxuICpcbiAqIFRvIHVzZSBqUXVlcnksIHNpbXBseSBsb2FkIGl0IGJlZm9yZSBgRE9NQ29udGVudExvYWRlZGAgZXZlbnQgZmlyZWQuXG4gKlxuICogPGRpdiBjbGFzcz1cImFsZXJ0XCI+KipOb3RlOioqIGFsbCBlbGVtZW50IHJlZmVyZW5jZXMgaW4gQW5ndWxhciBhcmUgYWx3YXlzIHdyYXBwZWQgd2l0aCBqUXVlcnkgb3JcbiAqIGpxTGl0ZTsgdGhleSBhcmUgbmV2ZXIgcmF3IERPTSByZWZlcmVuY2VzLjwvZGl2PlxuICpcbiAqICMjIEFuZ3VsYXIncyBqcUxpdGVcbiAqIGpxTGl0ZSBwcm92aWRlcyBvbmx5IHRoZSBmb2xsb3dpbmcgalF1ZXJ5IG1ldGhvZHM6XG4gKlxuICogLSBbYGFkZENsYXNzKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vYWRkQ2xhc3MvKVxuICogLSBbYGFmdGVyKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vYWZ0ZXIvKVxuICogLSBbYGFwcGVuZCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2FwcGVuZC8pXG4gKiAtIFtgYXR0cigpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2F0dHIvKSAtIERvZXMgbm90IHN1cHBvcnQgZnVuY3Rpb25zIGFzIHBhcmFtZXRlcnNcbiAqIC0gW2BiaW5kKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vYmluZC8pIC0gRG9lcyBub3Qgc3VwcG9ydCBuYW1lc3BhY2VzLCBzZWxlY3RvcnMgb3IgZXZlbnREYXRhXG4gKiAtIFtgY2hpbGRyZW4oKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jaGlsZHJlbi8pIC0gRG9lcyBub3Qgc3VwcG9ydCBzZWxlY3RvcnNcbiAqIC0gW2BjbG9uZSgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2Nsb25lLylcbiAqIC0gW2Bjb250ZW50cygpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2NvbnRlbnRzLylcbiAqIC0gW2Bjc3MoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jc3MvKSAtIE9ubHkgcmV0cmlldmVzIGlubGluZS1zdHlsZXMsIGRvZXMgbm90IGNhbGwgYGdldENvbXB1dGVkU3R5bGUoKWBcbiAqIC0gW2BkYXRhKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vZGF0YS8pXG4gKiAtIFtgZGV0YWNoKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vZGV0YWNoLylcbiAqIC0gW2BlbXB0eSgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2VtcHR5LylcbiAqIC0gW2BlcSgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2VxLylcbiAqIC0gW2BmaW5kKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vZmluZC8pIC0gTGltaXRlZCB0byBsb29rdXBzIGJ5IHRhZyBuYW1lXG4gKiAtIFtgaGFzQ2xhc3MoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9oYXNDbGFzcy8pXG4gKiAtIFtgaHRtbCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2h0bWwvKVxuICogLSBbYG5leHQoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9uZXh0LykgLSBEb2VzIG5vdCBzdXBwb3J0IHNlbGVjdG9yc1xuICogLSBbYG9uKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vb24vKSAtIERvZXMgbm90IHN1cHBvcnQgbmFtZXNwYWNlcywgc2VsZWN0b3JzIG9yIGV2ZW50RGF0YVxuICogLSBbYG9mZigpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL29mZi8pIC0gRG9lcyBub3Qgc3VwcG9ydCBuYW1lc3BhY2VzIG9yIHNlbGVjdG9yc1xuICogLSBbYG9uZSgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL29uZS8pIC0gRG9lcyBub3Qgc3VwcG9ydCBuYW1lc3BhY2VzIG9yIHNlbGVjdG9yc1xuICogLSBbYHBhcmVudCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3BhcmVudC8pIC0gRG9lcyBub3Qgc3VwcG9ydCBzZWxlY3RvcnNcbiAqIC0gW2BwcmVwZW5kKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vcHJlcGVuZC8pXG4gKiAtIFtgcHJvcCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3Byb3AvKVxuICogLSBbYHJlYWR5KClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vcmVhZHkvKVxuICogLSBbYHJlbW92ZSgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3JlbW92ZS8pXG4gKiAtIFtgcmVtb3ZlQXR0cigpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3JlbW92ZUF0dHIvKVxuICogLSBbYHJlbW92ZUNsYXNzKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vcmVtb3ZlQ2xhc3MvKVxuICogLSBbYHJlbW92ZURhdGEoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9yZW1vdmVEYXRhLylcbiAqIC0gW2ByZXBsYWNlV2l0aCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3JlcGxhY2VXaXRoLylcbiAqIC0gW2B0ZXh0KClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vdGV4dC8pXG4gKiAtIFtgdG9nZ2xlQ2xhc3MoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS90b2dnbGVDbGFzcy8pXG4gKiAtIFtgdHJpZ2dlckhhbmRsZXIoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS90cmlnZ2VySGFuZGxlci8pIC0gUGFzc2VzIGEgZHVtbXkgZXZlbnQgb2JqZWN0IHRvIGhhbmRsZXJzLlxuICogLSBbYHVuYmluZCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3VuYmluZC8pIC0gRG9lcyBub3Qgc3VwcG9ydCBuYW1lc3BhY2VzXG4gKiAtIFtgdmFsKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vdmFsLylcbiAqIC0gW2B3cmFwKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vd3JhcC8pXG4gKlxuICogIyMgalF1ZXJ5L2pxTGl0ZSBFeHRyYXNcbiAqIEFuZ3VsYXIgYWxzbyBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgbWV0aG9kcyBhbmQgZXZlbnRzIHRvIGJvdGggalF1ZXJ5IGFuZCBqcUxpdGU6XG4gKlxuICogIyMjIEV2ZW50c1xuICogLSBgJGRlc3Ryb3lgIC0gQW5ndWxhckpTIGludGVyY2VwdHMgYWxsIGpxTGl0ZS9qUXVlcnkncyBET00gZGVzdHJ1Y3Rpb24gYXBpcyBhbmQgZmlyZXMgdGhpcyBldmVudFxuICogICAgb24gYWxsIERPTSBub2RlcyBiZWluZyByZW1vdmVkLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBjbGVhbiB1cCBhbnkgM3JkIHBhcnR5IGJpbmRpbmdzIHRvIHRoZSBET01cbiAqICAgIGVsZW1lbnQgYmVmb3JlIGl0IGlzIHJlbW92ZWQuXG4gKlxuICogIyMjIE1ldGhvZHNcbiAqIC0gYGNvbnRyb2xsZXIobmFtZSlgIC0gcmV0cmlldmVzIHRoZSBjb250cm9sbGVyIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQgb3IgaXRzIHBhcmVudC4gQnkgZGVmYXVsdFxuICogICByZXRyaWV2ZXMgY29udHJvbGxlciBhc3NvY2lhdGVkIHdpdGggdGhlIGBuZ0NvbnRyb2xsZXJgIGRpcmVjdGl2ZS4gSWYgYG5hbWVgIGlzIHByb3ZpZGVkIGFzXG4gKiAgIGNhbWVsQ2FzZSBkaXJlY3RpdmUgbmFtZSwgdGhlbiB0aGUgY29udHJvbGxlciBmb3IgdGhpcyBkaXJlY3RpdmUgd2lsbCBiZSByZXRyaWV2ZWQgKGUuZy5cbiAqICAgYCduZ01vZGVsJ2ApLlxuICogLSBgaW5qZWN0b3IoKWAgLSByZXRyaWV2ZXMgdGhlIGluamVjdG9yIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQgb3IgaXRzIHBhcmVudC5cbiAqIC0gYHNjb3BlKClgIC0gcmV0cmlldmVzIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSBzY29wZX0gb2YgdGhlIGN1cnJlbnRcbiAqICAgZWxlbWVudCBvciBpdHMgcGFyZW50LlxuICogLSBgaXNvbGF0ZVNjb3BlKClgIC0gcmV0cmlldmVzIGFuIGlzb2xhdGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUgc2NvcGV9IGlmIG9uZSBpcyBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGVcbiAqICAgY3VycmVudCBlbGVtZW50LiBUaGlzIGdldHRlciBzaG91bGQgYmUgdXNlZCBvbmx5IG9uIGVsZW1lbnRzIHRoYXQgY29udGFpbiBhIGRpcmVjdGl2ZSB3aGljaCBzdGFydHMgYSBuZXcgaXNvbGF0ZVxuICogICBzY29wZS4gQ2FsbGluZyBgc2NvcGUoKWAgb24gdGhpcyBlbGVtZW50IGFsd2F5cyByZXR1cm5zIHRoZSBvcmlnaW5hbCBub24taXNvbGF0ZSBzY29wZS5cbiAqIC0gYGluaGVyaXRlZERhdGEoKWAgLSBzYW1lIGFzIGBkYXRhKClgLCBidXQgd2Fsa3MgdXAgdGhlIERPTSB1bnRpbCBhIHZhbHVlIGlzIGZvdW5kIG9yIHRoZSB0b3BcbiAqICAgcGFyZW50IGVsZW1lbnQgaXMgcmVhY2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xET01FbGVtZW50fSBlbGVtZW50IEhUTUwgc3RyaW5nIG9yIERPTUVsZW1lbnQgdG8gYmUgd3JhcHBlZCBpbnRvIGpRdWVyeS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IGpRdWVyeSBvYmplY3QuXG4gKi9cblxuSlFMaXRlLmV4cGFuZG8gPSAnbmczMzknO1xuXG52YXIganFDYWNoZSA9IEpRTGl0ZS5jYWNoZSA9IHt9LFxuICAgIGpxSWQgPSAxLFxuICAgIGFkZEV2ZW50TGlzdGVuZXJGbiA9IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUsIGZuKSB7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZm4sIGZhbHNlKTtcbiAgICB9LFxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXJGbiA9IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUsIGZuKSB7XG4gICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZm4sIGZhbHNlKTtcbiAgICB9O1xuXG4vKlxuICogISEhIFRoaXMgaXMgYW4gdW5kb2N1bWVudGVkIFwicHJpdmF0ZVwiIGZ1bmN0aW9uICEhIVxuICovXG5KUUxpdGUuX2RhdGEgPSBmdW5jdGlvbihub2RlKSB7XG4gIC8valF1ZXJ5IGFsd2F5cyByZXR1cm5zIGFuIG9iamVjdCBvbiBjYWNoZSBtaXNzXG4gIHJldHVybiB0aGlzLmNhY2hlW25vZGVbdGhpcy5leHBhbmRvXV0gfHwge307XG59O1xuXG5mdW5jdGlvbiBqcU5leHRJZCgpIHsgcmV0dXJuICsranFJZDsgfVxuXG5cbnZhciBTUEVDSUFMX0NIQVJTX1JFR0VYUCA9IC8oW1xcOlxcLVxcX10rKC4pKS9nO1xudmFyIE1PWl9IQUNLX1JFR0VYUCA9IC9ebW96KFtBLVpdKS87XG52YXIgTU9VU0VfRVZFTlRfTUFQPSB7IG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIiwgbW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIn07XG52YXIganFMaXRlTWluRXJyID0gbWluRXJyKCdqcUxpdGUnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBzbmFrZV9jYXNlIHRvIGNhbWVsQ2FzZS5cbiAqIEFsc28gdGhlcmUgaXMgc3BlY2lhbCBjYXNlIGZvciBNb3ogcHJlZml4IHN0YXJ0aW5nIHdpdGggdXBwZXIgY2FzZSBsZXR0ZXIuXG4gKiBAcGFyYW0gbmFtZSBOYW1lIHRvIG5vcm1hbGl6ZVxuICovXG5mdW5jdGlvbiBjYW1lbENhc2UobmFtZSkge1xuICByZXR1cm4gbmFtZS5cbiAgICByZXBsYWNlKFNQRUNJQUxfQ0hBUlNfUkVHRVhQLCBmdW5jdGlvbihfLCBzZXBhcmF0b3IsIGxldHRlciwgb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gb2Zmc2V0ID8gbGV0dGVyLnRvVXBwZXJDYXNlKCkgOiBsZXR0ZXI7XG4gICAgfSkuXG4gICAgcmVwbGFjZShNT1pfSEFDS19SRUdFWFAsICdNb3okMScpO1xufVxuXG52YXIgU0lOR0xFX1RBR19SRUdFWFAgPSAvXjwoXFx3KylcXHMqXFwvPz4oPzo8XFwvXFwxPnwpJC87XG52YXIgSFRNTF9SRUdFWFAgPSAvPHwmIz9cXHcrOy87XG52YXIgVEFHX05BTUVfUkVHRVhQID0gLzwoW1xcdzpdKykvO1xudmFyIFhIVE1MX1RBR19SRUdFWFAgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXFx3Ol0rKVtePl0qKVxcLz4vZ2k7XG5cbnZhciB3cmFwTWFwID0ge1xuICAnb3B0aW9uJzogWzEsICc8c2VsZWN0IG11bHRpcGxlPVwibXVsdGlwbGVcIj4nLCAnPC9zZWxlY3Q+J10sXG5cbiAgJ3RoZWFkJzogWzEsICc8dGFibGU+JywgJzwvdGFibGU+J10sXG4gICdjb2wnOiBbMiwgJzx0YWJsZT48Y29sZ3JvdXA+JywgJzwvY29sZ3JvdXA+PC90YWJsZT4nXSxcbiAgJ3RyJzogWzIsICc8dGFibGU+PHRib2R5PicsICc8L3Rib2R5PjwvdGFibGU+J10sXG4gICd0ZCc6IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddLFxuICAnX2RlZmF1bHQnOiBbMCwgXCJcIiwgXCJcIl1cbn07XG5cbndyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbjtcbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuXG5mdW5jdGlvbiBqcUxpdGVJc1RleHROb2RlKGh0bWwpIHtcbiAgcmV0dXJuICFIVE1MX1JFR0VYUC50ZXN0KGh0bWwpO1xufVxuXG5mdW5jdGlvbiBqcUxpdGVBY2NlcHRzRGF0YShub2RlKSB7XG4gIC8vIFRoZSB3aW5kb3cgb2JqZWN0IGNhbiBhY2NlcHQgZGF0YSBidXQgaGFzIG5vIG5vZGVUeXBlXG4gIC8vIE90aGVyd2lzZSB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGVsZW1lbnRzICgxKSBhbmQgZG9jdW1lbnRzICg5KVxuICB2YXIgbm9kZVR5cGUgPSBub2RlLm5vZGVUeXBlO1xuICByZXR1cm4gbm9kZVR5cGUgPT09IE5PREVfVFlQRV9FTEVNRU5UIHx8ICFub2RlVHlwZSB8fCBub2RlVHlwZSA9PT0gTk9ERV9UWVBFX0RPQ1VNRU5UO1xufVxuXG5mdW5jdGlvbiBqcUxpdGVCdWlsZEZyYWdtZW50KGh0bWwsIGNvbnRleHQpIHtcbiAgdmFyIHRtcCwgdGFnLCB3cmFwLFxuICAgICAgZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcbiAgICAgIG5vZGVzID0gW10sIGk7XG5cbiAgaWYgKGpxTGl0ZUlzVGV4dE5vZGUoaHRtbCkpIHtcbiAgICAvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGVcbiAgICBub2Rlcy5wdXNoKGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoaHRtbCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuICAgIHRtcCA9IHRtcCB8fCBmcmFnbWVudC5hcHBlbmRDaGlsZChjb250ZXh0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xuICAgIHRhZyA9IChUQUdfTkFNRV9SRUdFWFAuZXhlYyhodG1sKSB8fCBbXCJcIiwgXCJcIl0pWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgd3JhcCA9IHdyYXBNYXBbdGFnXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuICAgIHRtcC5pbm5lckhUTUwgPSB3cmFwWzFdICsgaHRtbC5yZXBsYWNlKFhIVE1MX1RBR19SRUdFWFAsIFwiPCQxPjwvJDI+XCIpICsgd3JhcFsyXTtcblxuICAgIC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudFxuICAgIGkgPSB3cmFwWzBdO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRtcCA9IHRtcC5sYXN0Q2hpbGQ7XG4gICAgfVxuXG4gICAgbm9kZXMgPSBjb25jYXQobm9kZXMsIHRtcC5jaGlsZE5vZGVzKTtcblxuICAgIHRtcCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG4gICAgdG1wLnRleHRDb250ZW50ID0gXCJcIjtcbiAgfVxuXG4gIC8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnRcbiAgZnJhZ21lbnQudGV4dENvbnRlbnQgPSBcIlwiO1xuICBmcmFnbWVudC5pbm5lckhUTUwgPSBcIlwiOyAvLyBDbGVhciBpbm5lciBIVE1MXG4gIGZvckVhY2gobm9kZXMsIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChub2RlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBqcUxpdGVQYXJzZUhUTUwoaHRtbCwgY29udGV4dCkge1xuICBjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDtcbiAgdmFyIHBhcnNlZDtcblxuICBpZiAoKHBhcnNlZCA9IFNJTkdMRV9UQUdfUkVHRVhQLmV4ZWMoaHRtbCkpKSB7XG4gICAgcmV0dXJuIFtjb250ZXh0LmNyZWF0ZUVsZW1lbnQocGFyc2VkWzFdKV07XG4gIH1cblxuICBpZiAoKHBhcnNlZCA9IGpxTGl0ZUJ1aWxkRnJhZ21lbnQoaHRtbCwgY29udGV4dCkpKSB7XG4gICAgcmV0dXJuIHBhcnNlZC5jaGlsZE5vZGVzO1xuICB9XG5cbiAgcmV0dXJuIFtdO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmZ1bmN0aW9uIEpRTGl0ZShlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSlFMaXRlKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICB2YXIgYXJnSXNTdHJpbmc7XG5cbiAgaWYgKGlzU3RyaW5nKGVsZW1lbnQpKSB7XG4gICAgZWxlbWVudCA9IHRyaW0oZWxlbWVudCk7XG4gICAgYXJnSXNTdHJpbmcgPSB0cnVlO1xuICB9XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBKUUxpdGUpKSB7XG4gICAgaWYgKGFyZ0lzU3RyaW5nICYmIGVsZW1lbnQuY2hhckF0KDApICE9ICc8Jykge1xuICAgICAgdGhyb3cganFMaXRlTWluRXJyKCdub3NlbCcsICdMb29raW5nIHVwIGVsZW1lbnRzIHZpYSBzZWxlY3RvcnMgaXMgbm90IHN1cHBvcnRlZCBieSBqcUxpdGUhIFNlZTogaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvYW5ndWxhci5lbGVtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgSlFMaXRlKGVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKGFyZ0lzU3RyaW5nKSB7XG4gICAganFMaXRlQWRkTm9kZXModGhpcywganFMaXRlUGFyc2VIVE1MKGVsZW1lbnQpKTtcbiAgfSBlbHNlIHtcbiAgICBqcUxpdGVBZGROb2Rlcyh0aGlzLCBlbGVtZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBqcUxpdGVDbG9uZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LmNsb25lTm9kZSh0cnVlKTtcbn1cblxuZnVuY3Rpb24ganFMaXRlRGVhbG9jKGVsZW1lbnQsIG9ubHlEZXNjZW5kYW50cykge1xuICBpZiAoIW9ubHlEZXNjZW5kYW50cykganFMaXRlUmVtb3ZlRGF0YShlbGVtZW50KTtcblxuICBpZiAoZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgdmFyIGRlc2NlbmRhbnRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBkZXNjZW5kYW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGpxTGl0ZVJlbW92ZURhdGEoZGVzY2VuZGFudHNbaV0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBqcUxpdGVPZmYoZWxlbWVudCwgdHlwZSwgZm4sIHVuc3VwcG9ydGVkKSB7XG4gIGlmIChpc0RlZmluZWQodW5zdXBwb3J0ZWQpKSB0aHJvdyBqcUxpdGVNaW5FcnIoJ29mZmFyZ3MnLCAnanFMaXRlI29mZigpIGRvZXMgbm90IHN1cHBvcnQgdGhlIGBzZWxlY3RvcmAgYXJndW1lbnQnKTtcblxuICB2YXIgZXhwYW5kb1N0b3JlID0ganFMaXRlRXhwYW5kb1N0b3JlKGVsZW1lbnQpO1xuICB2YXIgZXZlbnRzID0gZXhwYW5kb1N0b3JlICYmIGV4cGFuZG9TdG9yZS5ldmVudHM7XG4gIHZhciBoYW5kbGUgPSBleHBhbmRvU3RvcmUgJiYgZXhwYW5kb1N0b3JlLmhhbmRsZTtcblxuICBpZiAoIWhhbmRsZSkgcmV0dXJuOyAvL25vIGxpc3RlbmVycyByZWdpc3RlcmVkXG5cbiAgaWYgKCF0eXBlKSB7XG4gICAgZm9yICh0eXBlIGluIGV2ZW50cykge1xuICAgICAgaWYgKHR5cGUgIT09ICckZGVzdHJveScpIHtcbiAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lckZuKGVsZW1lbnQsIHR5cGUsIGhhbmRsZSk7XG4gICAgICB9XG4gICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3JFYWNoKHR5cGUuc3BsaXQoJyAnKSwgZnVuY3Rpb24odHlwZSkge1xuICAgICAgaWYgKGlzRGVmaW5lZChmbikpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyRm5zID0gZXZlbnRzW3R5cGVdO1xuICAgICAgICBhcnJheVJlbW92ZShsaXN0ZW5lckZucyB8fCBbXSwgZm4pO1xuICAgICAgICBpZiAobGlzdGVuZXJGbnMgJiYgbGlzdGVuZXJGbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZW1vdmVFdmVudExpc3RlbmVyRm4oZWxlbWVudCwgdHlwZSwgaGFuZGxlKTtcbiAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24ganFMaXRlUmVtb3ZlRGF0YShlbGVtZW50LCBuYW1lKSB7XG4gIHZhciBleHBhbmRvSWQgPSBlbGVtZW50Lm5nMzM5O1xuICB2YXIgZXhwYW5kb1N0b3JlID0gZXhwYW5kb0lkICYmIGpxQ2FjaGVbZXhwYW5kb0lkXTtcblxuICBpZiAoZXhwYW5kb1N0b3JlKSB7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGRlbGV0ZSBleHBhbmRvU3RvcmUuZGF0YVtuYW1lXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXhwYW5kb1N0b3JlLmhhbmRsZSkge1xuICAgICAgaWYgKGV4cGFuZG9TdG9yZS5ldmVudHMuJGRlc3Ryb3kpIHtcbiAgICAgICAgZXhwYW5kb1N0b3JlLmhhbmRsZSh7fSwgJyRkZXN0cm95Jyk7XG4gICAgICB9XG4gICAgICBqcUxpdGVPZmYoZWxlbWVudCk7XG4gICAgfVxuICAgIGRlbGV0ZSBqcUNhY2hlW2V4cGFuZG9JZF07XG4gICAgZWxlbWVudC5uZzMzOSA9IHVuZGVmaW5lZDsgLy8gZG9uJ3QgZGVsZXRlIERPTSBleHBhbmRvcy4gSUUgYW5kIENocm9tZSBkb24ndCBsaWtlIGl0XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBqcUxpdGVFeHBhbmRvU3RvcmUoZWxlbWVudCwgY3JlYXRlSWZOZWNlc3NhcnkpIHtcbiAgdmFyIGV4cGFuZG9JZCA9IGVsZW1lbnQubmczMzksXG4gICAgICBleHBhbmRvU3RvcmUgPSBleHBhbmRvSWQgJiYganFDYWNoZVtleHBhbmRvSWRdO1xuXG4gIGlmIChjcmVhdGVJZk5lY2Vzc2FyeSAmJiAhZXhwYW5kb1N0b3JlKSB7XG4gICAgZWxlbWVudC5uZzMzOSA9IGV4cGFuZG9JZCA9IGpxTmV4dElkKCk7XG4gICAgZXhwYW5kb1N0b3JlID0ganFDYWNoZVtleHBhbmRvSWRdID0ge2V2ZW50czoge30sIGRhdGE6IHt9LCBoYW5kbGU6IHVuZGVmaW5lZH07XG4gIH1cblxuICByZXR1cm4gZXhwYW5kb1N0b3JlO1xufVxuXG5cbmZ1bmN0aW9uIGpxTGl0ZURhdGEoZWxlbWVudCwga2V5LCB2YWx1ZSkge1xuICBpZiAoanFMaXRlQWNjZXB0c0RhdGEoZWxlbWVudCkpIHtcblxuICAgIHZhciBpc1NpbXBsZVNldHRlciA9IGlzRGVmaW5lZCh2YWx1ZSk7XG4gICAgdmFyIGlzU2ltcGxlR2V0dGVyID0gIWlzU2ltcGxlU2V0dGVyICYmIGtleSAmJiAhaXNPYmplY3Qoa2V5KTtcbiAgICB2YXIgbWFzc0dldHRlciA9ICFrZXk7XG4gICAgdmFyIGV4cGFuZG9TdG9yZSA9IGpxTGl0ZUV4cGFuZG9TdG9yZShlbGVtZW50LCAhaXNTaW1wbGVHZXR0ZXIpO1xuICAgIHZhciBkYXRhID0gZXhwYW5kb1N0b3JlICYmIGV4cGFuZG9TdG9yZS5kYXRhO1xuXG4gICAgaWYgKGlzU2ltcGxlU2V0dGVyKSB7IC8vIGRhdGEoJ2tleScsIHZhbHVlKVxuICAgICAgZGF0YVtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtYXNzR2V0dGVyKSB7ICAvLyBkYXRhKClcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNTaW1wbGVHZXR0ZXIpIHsgLy8gZGF0YSgna2V5JylcbiAgICAgICAgICAvLyBkb24ndCBmb3JjZSBjcmVhdGlvbiBvZiBleHBhbmRvU3RvcmUgaWYgaXQgZG9lc24ndCBleGlzdCB5ZXRcbiAgICAgICAgICByZXR1cm4gZGF0YSAmJiBkYXRhW2tleV07XG4gICAgICAgIH0gZWxzZSB7IC8vIG1hc3Mtc2V0dGVyOiBkYXRhKHtrZXkxOiB2YWwxLCBrZXkyOiB2YWwyfSlcbiAgICAgICAgICBleHRlbmQoZGF0YSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBqcUxpdGVIYXNDbGFzcyhlbGVtZW50LCBzZWxlY3Rvcikge1xuICBpZiAoIWVsZW1lbnQuZ2V0QXR0cmlidXRlKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAoKFwiIFwiICsgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnKSArIFwiIFwiKS5yZXBsYWNlKC9bXFxuXFx0XS9nLCBcIiBcIikuXG4gICAgICBpbmRleE9mKFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIikgPiAtMSk7XG59XG5cbmZ1bmN0aW9uIGpxTGl0ZVJlbW92ZUNsYXNzKGVsZW1lbnQsIGNzc0NsYXNzZXMpIHtcbiAgaWYgKGNzc0NsYXNzZXMgJiYgZWxlbWVudC5zZXRBdHRyaWJ1dGUpIHtcbiAgICBmb3JFYWNoKGNzc0NsYXNzZXMuc3BsaXQoJyAnKSwgZnVuY3Rpb24oY3NzQ2xhc3MpIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIHRyaW0oXG4gICAgICAgICAgKFwiIFwiICsgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnKSArIFwiIFwiKVxuICAgICAgICAgIC5yZXBsYWNlKC9bXFxuXFx0XS9nLCBcIiBcIilcbiAgICAgICAgICAucmVwbGFjZShcIiBcIiArIHRyaW0oY3NzQ2xhc3MpICsgXCIgXCIsIFwiIFwiKSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24ganFMaXRlQWRkQ2xhc3MoZWxlbWVudCwgY3NzQ2xhc3Nlcykge1xuICBpZiAoY3NzQ2xhc3NlcyAmJiBlbGVtZW50LnNldEF0dHJpYnV0ZSkge1xuICAgIHZhciBleGlzdGluZ0NsYXNzZXMgPSAoJyAnICsgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnKSArICcgJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xcblxcdF0vZywgXCIgXCIpO1xuXG4gICAgZm9yRWFjaChjc3NDbGFzc2VzLnNwbGl0KCcgJyksIGZ1bmN0aW9uKGNzc0NsYXNzKSB7XG4gICAgICBjc3NDbGFzcyA9IHRyaW0oY3NzQ2xhc3MpO1xuICAgICAgaWYgKGV4aXN0aW5nQ2xhc3Nlcy5pbmRleE9mKCcgJyArIGNzc0NsYXNzICsgJyAnKSA9PT0gLTEpIHtcbiAgICAgICAgZXhpc3RpbmdDbGFzc2VzICs9IGNzc0NsYXNzICsgJyAnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgdHJpbShleGlzdGluZ0NsYXNzZXMpKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGpxTGl0ZUFkZE5vZGVzKHJvb3QsIGVsZW1lbnRzKSB7XG4gIC8vIFRISVMgQ09ERSBJUyBWRVJZIEhPVC4gRG9uJ3QgbWFrZSBjaGFuZ2VzIHdpdGhvdXQgYmVuY2htYXJraW5nLlxuXG4gIGlmIChlbGVtZW50cykge1xuXG4gICAgLy8gaWYgYSBOb2RlICh0aGUgbW9zdCBjb21tb24gY2FzZSlcbiAgICBpZiAoZWxlbWVudHMubm9kZVR5cGUpIHtcbiAgICAgIHJvb3Rbcm9vdC5sZW5ndGgrK10gPSBlbGVtZW50cztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuICAgICAgLy8gaWYgYW4gQXJyYXkgb3IgTm9kZUxpc3QgYW5kIG5vdCBhIFdpbmRvd1xuICAgICAgaWYgKHR5cGVvZiBsZW5ndGggPT09ICdudW1iZXInICYmIGVsZW1lbnRzLndpbmRvdyAhPT0gZWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGxlbmd0aCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJvb3Rbcm9vdC5sZW5ndGgrK10gPSBlbGVtZW50c1tpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3Rbcm9vdC5sZW5ndGgrK10gPSBlbGVtZW50cztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBqcUxpdGVDb250cm9sbGVyKGVsZW1lbnQsIG5hbWUpIHtcbiAgcmV0dXJuIGpxTGl0ZUluaGVyaXRlZERhdGEoZWxlbWVudCwgJyQnICsgKG5hbWUgfHwgJ25nQ29udHJvbGxlcicpICsgJ0NvbnRyb2xsZXInKTtcbn1cblxuZnVuY3Rpb24ganFMaXRlSW5oZXJpdGVkRGF0YShlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuICAvLyBpZiBlbGVtZW50IGlzIHRoZSBkb2N1bWVudCBvYmplY3Qgd29yayB3aXRoIHRoZSBodG1sIGVsZW1lbnQgaW5zdGVhZFxuICAvLyB0aGlzIG1ha2VzICQoZG9jdW1lbnQpLnNjb3BlKCkgcG9zc2libGVcbiAgaWYgKGVsZW1lbnQubm9kZVR5cGUgPT0gTk9ERV9UWVBFX0RPQ1VNRU5UKSB7XG4gICAgZWxlbWVudCA9IGVsZW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG4gIHZhciBuYW1lcyA9IGlzQXJyYXkobmFtZSkgPyBuYW1lIDogW25hbWVdO1xuXG4gIHdoaWxlIChlbGVtZW50KSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbmFtZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgaWYgKCh2YWx1ZSA9IGpxTGl0ZS5kYXRhKGVsZW1lbnQsIG5hbWVzW2ldKSkgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8vIElmIGRlYWxpbmcgd2l0aCBhIGRvY3VtZW50IGZyYWdtZW50IG5vZGUgd2l0aCBhIGhvc3QgZWxlbWVudCwgYW5kIG5vIHBhcmVudCwgdXNlIHRoZSBob3N0XG4gICAgLy8gZWxlbWVudCBhcyB0aGUgcGFyZW50LiBUaGlzIGVuYWJsZXMgZGlyZWN0aXZlcyB3aXRoaW4gYSBTaGFkb3cgRE9NIG9yIHBvbHlmaWxsZWQgU2hhZG93IERPTVxuICAgIC8vIHRvIGxvb2t1cCBwYXJlbnQgY29udHJvbGxlcnMuXG4gICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSB8fCAoZWxlbWVudC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFX0RPQ1VNRU5UX0ZSQUdNRU5UICYmIGVsZW1lbnQuaG9zdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24ganFMaXRlRW1wdHkoZWxlbWVudCkge1xuICBqcUxpdGVEZWFsb2MoZWxlbWVudCwgdHJ1ZSk7XG4gIHdoaWxlIChlbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24ganFMaXRlUmVtb3ZlKGVsZW1lbnQsIGtlZXBEYXRhKSB7XG4gIGlmICgha2VlcERhdGEpIGpxTGl0ZURlYWxvYyhlbGVtZW50KTtcbiAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xufVxuXG5cbmZ1bmN0aW9uIGpxTGl0ZURvY3VtZW50TG9hZGVkKGFjdGlvbiwgd2luKSB7XG4gIHdpbiA9IHdpbiB8fCB3aW5kb3c7XG4gIGlmICh3aW4uZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgIC8vIEZvcmNlIHRoZSBhY3Rpb24gdG8gYmUgcnVuIGFzeW5jIGZvciBjb25zaXN0ZW50IGJlaGF2aW91clxuICAgIC8vIGZyb20gdGhlIGFjdGlvbidzIHBvaW50IG9mIHZpZXdcbiAgICAvLyBpLmUuIGl0IHdpbGwgZGVmaW5pdGVseSBub3QgYmUgaW4gYSAkYXBwbHlcbiAgICB3aW4uc2V0VGltZW91dChhY3Rpb24pO1xuICB9IGVsc2Uge1xuICAgIC8vIE5vIG5lZWQgdG8gdW5iaW5kIHRoaXMgaGFuZGxlciBhcyBsb2FkIGlzIG9ubHkgZXZlciBjYWxsZWQgb25jZVxuICAgIGpxTGl0ZSh3aW4pLm9uKCdsb2FkJywgYWN0aW9uKTtcbiAgfVxufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEZ1bmN0aW9ucyB3aGljaCBhcmUgZGVjbGFyZWQgZGlyZWN0bHkuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbnZhciBKUUxpdGVQcm90b3R5cGUgPSBKUUxpdGUucHJvdG90eXBlID0ge1xuICByZWFkeTogZnVuY3Rpb24oZm4pIHtcbiAgICB2YXIgZmlyZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIHRyaWdnZXIoKSB7XG4gICAgICBpZiAoZmlyZWQpIHJldHVybjtcbiAgICAgIGZpcmVkID0gdHJ1ZTtcbiAgICAgIGZuKCk7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgZG9jdW1lbnQgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgc2V0VGltZW91dCh0cmlnZ2VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbignRE9NQ29udGVudExvYWRlZCcsIHRyaWdnZXIpOyAvLyB3b3JrcyBmb3IgbW9kZXJuIGJyb3dzZXJzIGFuZCBJRTlcbiAgICAgIC8vIHdlIGNhbiBub3QgdXNlIGpxTGl0ZSBzaW5jZSB3ZSBhcmUgbm90IGRvbmUgbG9hZGluZyBhbmQgalF1ZXJ5IGNvdWxkIGJlIGxvYWRlZCBsYXRlci5cbiAgICAgIC8vIGpzaGludCAtVzA2NFxuICAgICAgSlFMaXRlKHdpbmRvdykub24oJ2xvYWQnLCB0cmlnZ2VyKTsgLy8gZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCBmb3Igb3RoZXJzXG4gICAgICAvLyBqc2hpbnQgK1cwNjRcbiAgICB9XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUgPSBbXTtcbiAgICBmb3JFYWNoKHRoaXMsIGZ1bmN0aW9uKGUpIHsgdmFsdWUucHVzaCgnJyArIGUpO30pO1xuICAgIHJldHVybiAnWycgKyB2YWx1ZS5qb2luKCcsICcpICsgJ10nO1xuICB9LFxuXG4gIGVxOiBmdW5jdGlvbihpbmRleCkge1xuICAgICAgcmV0dXJuIChpbmRleCA+PSAwKSA/IGpxTGl0ZSh0aGlzW2luZGV4XSkgOiBqcUxpdGUodGhpc1t0aGlzLmxlbmd0aCArIGluZGV4XSk7XG4gIH0sXG5cbiAgbGVuZ3RoOiAwLFxuICBwdXNoOiBwdXNoLFxuICBzb3J0OiBbXS5zb3J0LFxuICBzcGxpY2U6IFtdLnNwbGljZVxufTtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBGdW5jdGlvbnMgaXRlcmF0aW5nIGdldHRlci9zZXR0ZXJzLlxuLy8gdGhlc2UgZnVuY3Rpb25zIHJldHVybiBzZWxmIG9uIHNldHRlciBhbmRcbi8vIHZhbHVlIG9uIGdldC5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xudmFyIEJPT0xFQU5fQVRUUiA9IHt9O1xuZm9yRWFjaCgnbXVsdGlwbGUsc2VsZWN0ZWQsY2hlY2tlZCxkaXNhYmxlZCxyZWFkT25seSxyZXF1aXJlZCxvcGVuJy5zcGxpdCgnLCcpLCBmdW5jdGlvbih2YWx1ZSkge1xuICBCT09MRUFOX0FUVFJbbG93ZXJjYXNlKHZhbHVlKV0gPSB2YWx1ZTtcbn0pO1xudmFyIEJPT0xFQU5fRUxFTUVOVFMgPSB7fTtcbmZvckVhY2goJ2lucHV0LHNlbGVjdCxvcHRpb24sdGV4dGFyZWEsYnV0dG9uLGZvcm0sZGV0YWlscycuc3BsaXQoJywnKSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgQk9PTEVBTl9FTEVNRU5UU1t2YWx1ZV0gPSB0cnVlO1xufSk7XG52YXIgQUxJQVNFRF9BVFRSID0ge1xuICAnbmdNaW5sZW5ndGgnOiAnbWlubGVuZ3RoJyxcbiAgJ25nTWF4bGVuZ3RoJzogJ21heGxlbmd0aCcsXG4gICduZ01pbic6ICdtaW4nLFxuICAnbmdNYXgnOiAnbWF4JyxcbiAgJ25nUGF0dGVybic6ICdwYXR0ZXJuJ1xufTtcblxuZnVuY3Rpb24gZ2V0Qm9vbGVhbkF0dHJOYW1lKGVsZW1lbnQsIG5hbWUpIHtcbiAgLy8gY2hlY2sgZG9tIGxhc3Qgc2luY2Ugd2Ugd2lsbCBtb3N0IGxpa2VseSBmYWlsIG9uIG5hbWVcbiAgdmFyIGJvb2xlYW5BdHRyID0gQk9PTEVBTl9BVFRSW25hbWUudG9Mb3dlckNhc2UoKV07XG5cbiAgLy8gYm9vbGVhbkF0dHIgaXMgaGVyZSB0d2ljZSB0byBtaW5pbWl6ZSBET00gYWNjZXNzXG4gIHJldHVybiBib29sZWFuQXR0ciAmJiBCT09MRUFOX0VMRU1FTlRTW25vZGVOYW1lXyhlbGVtZW50KV0gJiYgYm9vbGVhbkF0dHI7XG59XG5cbmZ1bmN0aW9uIGdldEFsaWFzZWRBdHRyTmFtZShlbGVtZW50LCBuYW1lKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWU7XG4gIHJldHVybiAobm9kZU5hbWUgPT09ICdJTlBVVCcgfHwgbm9kZU5hbWUgPT09ICdURVhUQVJFQScpICYmIEFMSUFTRURfQVRUUltuYW1lXTtcbn1cblxuZm9yRWFjaCh7XG4gIGRhdGE6IGpxTGl0ZURhdGEsXG4gIHJlbW92ZURhdGE6IGpxTGl0ZVJlbW92ZURhdGFcbn0sIGZ1bmN0aW9uKGZuLCBuYW1lKSB7XG4gIEpRTGl0ZVtuYW1lXSA9IGZuO1xufSk7XG5cbmZvckVhY2goe1xuICBkYXRhOiBqcUxpdGVEYXRhLFxuICBpbmhlcml0ZWREYXRhOiBqcUxpdGVJbmhlcml0ZWREYXRhLFxuXG4gIHNjb3BlOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgLy8gQ2FuJ3QgdXNlIGpxTGl0ZURhdGEgaGVyZSBkaXJlY3RseSBzbyB3ZSBzdGF5IGNvbXBhdGlibGUgd2l0aCBqUXVlcnkhXG4gICAgcmV0dXJuIGpxTGl0ZS5kYXRhKGVsZW1lbnQsICckc2NvcGUnKSB8fCBqcUxpdGVJbmhlcml0ZWREYXRhKGVsZW1lbnQucGFyZW50Tm9kZSB8fCBlbGVtZW50LCBbJyRpc29sYXRlU2NvcGUnLCAnJHNjb3BlJ10pO1xuICB9LFxuXG4gIGlzb2xhdGVTY29wZTogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIC8vIENhbid0IHVzZSBqcUxpdGVEYXRhIGhlcmUgZGlyZWN0bHkgc28gd2Ugc3RheSBjb21wYXRpYmxlIHdpdGggalF1ZXJ5IVxuICAgIHJldHVybiBqcUxpdGUuZGF0YShlbGVtZW50LCAnJGlzb2xhdGVTY29wZScpIHx8IGpxTGl0ZS5kYXRhKGVsZW1lbnQsICckaXNvbGF0ZVNjb3BlTm9UZW1wbGF0ZScpO1xuICB9LFxuXG4gIGNvbnRyb2xsZXI6IGpxTGl0ZUNvbnRyb2xsZXIsXG5cbiAgaW5qZWN0b3I6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4ganFMaXRlSW5oZXJpdGVkRGF0YShlbGVtZW50LCAnJGluamVjdG9yJyk7XG4gIH0sXG5cbiAgcmVtb3ZlQXR0cjogZnVuY3Rpb24oZWxlbWVudCwgbmFtZSkge1xuICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9LFxuXG4gIGhhc0NsYXNzOiBqcUxpdGVIYXNDbGFzcyxcblxuICBjc3M6IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gICAgbmFtZSA9IGNhbWVsQ2FzZShuYW1lKTtcblxuICAgIGlmIChpc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICBlbGVtZW50LnN0eWxlW25hbWVdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnN0eWxlW25hbWVdO1xuICAgIH1cbiAgfSxcblxuICBhdHRyOiBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBsb3dlcmNhc2VkTmFtZSA9IGxvd2VyY2FzZShuYW1lKTtcbiAgICBpZiAoQk9PTEVBTl9BVFRSW2xvd2VyY2FzZWROYW1lXSkge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCEhdmFsdWUpIHtcbiAgICAgICAgICBlbGVtZW50W25hbWVdID0gdHJ1ZTtcbiAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCBsb3dlcmNhc2VkTmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbWVudFtuYW1lXSA9IGZhbHNlO1xuICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGxvd2VyY2FzZWROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChlbGVtZW50W25hbWVdIHx8XG4gICAgICAgICAgICAgICAgIChlbGVtZW50LmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKG5hbWUpIHx8IG5vb3ApLnNwZWNpZmllZClcbiAgICAgICAgICAgICAgID8gbG93ZXJjYXNlZE5hbWVcbiAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUpIHtcbiAgICAgIC8vIHRoZSBleHRyYSBhcmd1bWVudCBcIjJcIiBpcyB0byBnZXQgdGhlIHJpZ2h0IHRoaW5nIGZvciBhLmhyZWYgaW4gSUUsIHNlZSBqUXVlcnkgY29kZVxuICAgICAgLy8gc29tZSBlbGVtZW50cyAoZS5nLiBEb2N1bWVudCkgZG9uJ3QgaGF2ZSBnZXQgYXR0cmlidXRlLCBzbyByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB2YXIgcmV0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSwgMik7XG4gICAgICAvLyBub3JtYWxpemUgbm9uLWV4aXN0aW5nIGF0dHJpYnV0ZXMgdG8gdW5kZWZpbmVkIChhcyBqUXVlcnkpXG4gICAgICByZXR1cm4gcmV0ID09PSBudWxsID8gdW5kZWZpbmVkIDogcmV0O1xuICAgIH1cbiAgfSxcblxuICBwcm9wOiBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuICAgIGlmIChpc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICBlbGVtZW50W25hbWVdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbGVtZW50W25hbWVdO1xuICAgIH1cbiAgfSxcblxuICB0ZXh0OiAoZnVuY3Rpb24oKSB7XG4gICAgZ2V0VGV4dC4kZHYgPSAnJztcbiAgICByZXR1cm4gZ2V0VGV4dDtcblxuICAgIGZ1bmN0aW9uIGdldFRleHQoZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgdmFyIG5vZGVUeXBlID0gZWxlbWVudC5ub2RlVHlwZTtcbiAgICAgICAgcmV0dXJuIChub2RlVHlwZSA9PT0gTk9ERV9UWVBFX0VMRU1FTlQgfHwgbm9kZVR5cGUgPT09IE5PREVfVFlQRV9URVhUKSA/IGVsZW1lbnQudGV4dENvbnRlbnQgOiAnJztcbiAgICAgIH1cbiAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgICB9XG4gIH0pKCksXG5cbiAgdmFsOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSkge1xuICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIGlmIChlbGVtZW50Lm11bHRpcGxlICYmIG5vZGVOYW1lXyhlbGVtZW50KSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3JFYWNoKGVsZW1lbnQub3B0aW9ucywgZnVuY3Rpb24ob3B0aW9uKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gob3B0aW9uLnZhbHVlIHx8IG9wdGlvbi50ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMCA/IG51bGwgOiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlbWVudC52YWx1ZTtcbiAgICB9XG4gICAgZWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICB9LFxuXG4gIGh0bWw6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7XG4gICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIH1cbiAgICBqcUxpdGVEZWFsb2MoZWxlbWVudCwgdHJ1ZSk7XG4gICAgZWxlbWVudC5pbm5lckhUTUwgPSB2YWx1ZTtcbiAgfSxcblxuICBlbXB0eToganFMaXRlRW1wdHlcbn0sIGZ1bmN0aW9uKGZuLCBuYW1lKSB7XG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzOiB3cml0ZXMgcmV0dXJuIHNlbGVjdGlvbiwgcmVhZHMgcmV0dXJuIGZpcnN0IHZhbHVlXG4gICAqL1xuICBKUUxpdGUucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oYXJnMSwgYXJnMikge1xuICAgIHZhciBpLCBrZXk7XG4gICAgdmFyIG5vZGVDb3VudCA9IHRoaXMubGVuZ3RoO1xuXG4gICAgLy8ganFMaXRlSGFzQ2xhc3MgaGFzIG9ubHkgdHdvIGFyZ3VtZW50cywgYnV0IGlzIGEgZ2V0dGVyLW9ubHkgZm4sIHNvIHdlIG5lZWQgdG8gc3BlY2lhbC1jYXNlIGl0XG4gICAgLy8gaW4gYSB3YXkgdGhhdCBzdXJ2aXZlcyBtaW5pZmljYXRpb24uXG4gICAgLy8ganFMaXRlRW1wdHkgdGFrZXMgbm8gYXJndW1lbnRzIGJ1dCBpcyBhIHNldHRlci5cbiAgICBpZiAoZm4gIT09IGpxTGl0ZUVtcHR5ICYmXG4gICAgICAgICgoKGZuLmxlbmd0aCA9PSAyICYmIChmbiAhPT0ganFMaXRlSGFzQ2xhc3MgJiYgZm4gIT09IGpxTGl0ZUNvbnRyb2xsZXIpKSA/IGFyZzEgOiBhcmcyKSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGFyZzEpKSB7XG5cbiAgICAgICAgLy8gd2UgYXJlIGEgd3JpdGUsIGJ1dCB0aGUgb2JqZWN0IHByb3BlcnRpZXMgYXJlIHRoZSBrZXkvdmFsdWVzXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBub2RlQ291bnQ7IGkrKykge1xuICAgICAgICAgIGlmIChmbiA9PT0ganFMaXRlRGF0YSkge1xuICAgICAgICAgICAgLy8gZGF0YSgpIHRha2VzIHRoZSB3aG9sZSBvYmplY3QgaW4galF1ZXJ5XG4gICAgICAgICAgICBmbih0aGlzW2ldLCBhcmcxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChrZXkgaW4gYXJnMSkge1xuICAgICAgICAgICAgICBmbih0aGlzW2ldLCBrZXksIGFyZzFba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJldHVybiBzZWxmIGZvciBjaGFpbmluZ1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdlIGFyZSBhIHJlYWQsIHNvIHJlYWQgdGhlIGZpcnN0IGNoaWxkLlxuICAgICAgICAvLyBUT0RPOiBkbyB3ZSBzdGlsbCBuZWVkIHRoaXM/XG4gICAgICAgIHZhciB2YWx1ZSA9IGZuLiRkdjtcbiAgICAgICAgLy8gT25seSBpZiB3ZSBoYXZlICRkdiBkbyB3ZSBpdGVyYXRlIG92ZXIgYWxsLCBvdGhlcndpc2UgaXQgaXMganVzdCB0aGUgZmlyc3QgZWxlbWVudC5cbiAgICAgICAgdmFyIGpqID0gKHZhbHVlID09PSB1bmRlZmluZWQpID8gTWF0aC5taW4obm9kZUNvdW50LCAxKSA6IG5vZGVDb3VudDtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgdmFyIG5vZGVWYWx1ZSA9IGZuKHRoaXNbal0sIGFyZzEsIGFyZzIpO1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPyB2YWx1ZSArIG5vZGVWYWx1ZSA6IG5vZGVWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHdlIGFyZSBhIHdyaXRlLCBzbyBhcHBseSB0byBhbGwgY2hpbGRyZW5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBub2RlQ291bnQ7IGkrKykge1xuICAgICAgICBmbih0aGlzW2ldLCBhcmcxLCBhcmcyKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzZWxmIGZvciBjaGFpbmluZ1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9O1xufSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50SGFuZGxlcihlbGVtZW50LCBldmVudHMpIHtcbiAgdmFyIGV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50LCB0eXBlKSB7XG4gICAgLy8galF1ZXJ5IHNwZWNpZmljIGFwaVxuICAgIGV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQ7XG4gICAgfTtcblxuICAgIHZhciBldmVudEZucyA9IGV2ZW50c1t0eXBlIHx8IGV2ZW50LnR5cGVdO1xuICAgIHZhciBldmVudEZuc0xlbmd0aCA9IGV2ZW50Rm5zID8gZXZlbnRGbnMubGVuZ3RoIDogMDtcblxuICAgIGlmICghZXZlbnRGbnNMZW5ndGgpIHJldHVybjtcblxuICAgIGlmIChpc1VuZGVmaW5lZChldmVudC5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQpKSB7XG4gICAgICB2YXIgb3JpZ2luYWxTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPSBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247XG4gICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZXZlbnQuaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3JpZ2luYWxTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICBvcmlnaW5hbFN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbi5jYWxsKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV2ZW50LmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9PT0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgLy8gQ29weSBldmVudCBoYW5kbGVycyBpbiBjYXNlIGV2ZW50IGhhbmRsZXJzIGFycmF5IGlzIG1vZGlmaWVkIGR1cmluZyBleGVjdXRpb24uXG4gICAgaWYgKChldmVudEZuc0xlbmd0aCA+IDEpKSB7XG4gICAgICBldmVudEZucyA9IHNoYWxsb3dDb3B5KGV2ZW50Rm5zKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50Rm5zTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICBldmVudEZuc1tpXS5jYWxsKGVsZW1lbnQsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2sgZm9yIGFuZ3VsYXJNb2Nrcy9jbGVhckRhdGFDYWNoZSB0aGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRlcmVnaXN0ZXIgYWxsXG4gIC8vICAgICAgIGV2ZW50cyBvbiBgZWxlbWVudGBcbiAgZXZlbnRIYW5kbGVyLmVsZW0gPSBlbGVtZW50O1xuICByZXR1cm4gZXZlbnRIYW5kbGVyO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEZ1bmN0aW9ucyBpdGVyYXRpbmcgdHJhdmVyc2FsLlxuLy8gVGhlc2UgZnVuY3Rpb25zIGNoYWluIHJlc3VsdHMgaW50byBhIHNpbmdsZVxuLy8gc2VsZWN0b3IuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmZvckVhY2goe1xuICByZW1vdmVEYXRhOiBqcUxpdGVSZW1vdmVEYXRhLFxuXG4gIG9uOiBmdW5jdGlvbiBqcUxpdGVPbihlbGVtZW50LCB0eXBlLCBmbiwgdW5zdXBwb3J0ZWQpIHtcbiAgICBpZiAoaXNEZWZpbmVkKHVuc3VwcG9ydGVkKSkgdGhyb3cganFMaXRlTWluRXJyKCdvbmFyZ3MnLCAnanFMaXRlI29uKCkgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYHNlbGVjdG9yYCBvciBgZXZlbnREYXRhYCBwYXJhbWV0ZXJzJyk7XG5cbiAgICAvLyBEbyBub3QgYWRkIGV2ZW50IGhhbmRsZXJzIHRvIG5vbi1lbGVtZW50cyBiZWNhdXNlIHRoZXkgd2lsbCBub3QgYmUgY2xlYW5lZCB1cC5cbiAgICBpZiAoIWpxTGl0ZUFjY2VwdHNEYXRhKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGV4cGFuZG9TdG9yZSA9IGpxTGl0ZUV4cGFuZG9TdG9yZShlbGVtZW50LCB0cnVlKTtcbiAgICB2YXIgZXZlbnRzID0gZXhwYW5kb1N0b3JlLmV2ZW50cztcbiAgICB2YXIgaGFuZGxlID0gZXhwYW5kb1N0b3JlLmhhbmRsZTtcblxuICAgIGlmICghaGFuZGxlKSB7XG4gICAgICBoYW5kbGUgPSBleHBhbmRvU3RvcmUuaGFuZGxlID0gY3JlYXRlRXZlbnRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cyk7XG4gICAgfVxuXG4gICAgLy8gaHR0cDovL2pzcGVyZi5jb20vc3RyaW5nLWluZGV4b2YtdnMtc3BsaXRcbiAgICB2YXIgdHlwZXMgPSB0eXBlLmluZGV4T2YoJyAnKSA+PSAwID8gdHlwZS5zcGxpdCgnICcpIDogW3R5cGVdO1xuICAgIHZhciBpID0gdHlwZXMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdHlwZSA9IHR5cGVzW2ldO1xuICAgICAgdmFyIGV2ZW50Rm5zID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAoIWV2ZW50Rm5zKSB7XG4gICAgICAgIGV2ZW50c1t0eXBlXSA9IFtdO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnbW91c2VlbnRlcicgfHwgdHlwZSA9PT0gJ21vdXNlbGVhdmUnKSB7XG4gICAgICAgICAgLy8gUmVmZXIgdG8galF1ZXJ5J3MgaW1wbGVtZW50YXRpb24gb2YgbW91c2VlbnRlciAmIG1vdXNlbGVhdmVcbiAgICAgICAgICAvLyBSZWFkIGFib3V0IG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmU6XG4gICAgICAgICAgLy8gaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9qcy9ldmVudHNfbW91c2UuaHRtbCNsaW5rOFxuXG4gICAgICAgICAganFMaXRlT24oZWxlbWVudCwgTU9VU0VfRVZFTlRfTUFQW3R5cGVdLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMsIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgICAgICAgICAgLy8gRm9yIG1vdXNlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LlxuICAgICAgICAgICAgLy8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3dcbiAgICAgICAgICAgIGlmICghcmVsYXRlZCB8fCAocmVsYXRlZCAhPT0gdGFyZ2V0ICYmICF0YXJnZXQuY29udGFpbnMocmVsYXRlZCkpKSB7XG4gICAgICAgICAgICAgIGhhbmRsZShldmVudCwgdHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZSAhPT0gJyRkZXN0cm95Jykge1xuICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lckZuKGVsZW1lbnQsIHR5cGUsIGhhbmRsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV2ZW50Rm5zID0gZXZlbnRzW3R5cGVdO1xuICAgICAgfVxuICAgICAgZXZlbnRGbnMucHVzaChmbik7XG4gICAgfVxuICB9LFxuXG4gIG9mZjoganFMaXRlT2ZmLFxuXG4gIG9uZTogZnVuY3Rpb24oZWxlbWVudCwgdHlwZSwgZm4pIHtcbiAgICBlbGVtZW50ID0ganFMaXRlKGVsZW1lbnQpO1xuXG4gICAgLy9hZGQgdGhlIGxpc3RlbmVyIHR3aWNlIHNvIHRoYXQgd2hlbiBpdCBpcyBjYWxsZWRcbiAgICAvL3lvdSBjYW4gcmVtb3ZlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBhbmQgc3RpbGwgYmVcbiAgICAvL2FibGUgdG8gY2FsbCBlbGVtZW50Lm9mZihldiwgZm4pIG5vcm1hbGx5XG4gICAgZWxlbWVudC5vbih0eXBlLCBmdW5jdGlvbiBvbkZuKCkge1xuICAgICAgZWxlbWVudC5vZmYodHlwZSwgZm4pO1xuICAgICAgZWxlbWVudC5vZmYodHlwZSwgb25Gbik7XG4gICAgfSk7XG4gICAgZWxlbWVudC5vbih0eXBlLCBmbik7XG4gIH0sXG5cbiAgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKGVsZW1lbnQsIHJlcGxhY2VOb2RlKSB7XG4gICAgdmFyIGluZGV4LCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gICAganFMaXRlRGVhbG9jKGVsZW1lbnQpO1xuICAgIGZvckVhY2gobmV3IEpRTGl0ZShyZXBsYWNlTm9kZSksIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIGlmIChpbmRleCkge1xuICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIGluZGV4Lm5leHRTaWJsaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQobm9kZSwgZWxlbWVudCk7XG4gICAgICB9XG4gICAgICBpbmRleCA9IG5vZGU7XG4gICAgfSk7XG4gIH0sXG5cbiAgY2hpbGRyZW46IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBbXTtcbiAgICBmb3JFYWNoKGVsZW1lbnQuY2hpbGROb2RlcywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgaWYgKGVsZW1lbnQubm9kZVR5cGUgPT09IE5PREVfVFlQRV9FTEVNRU5UKVxuICAgICAgICBjaGlsZHJlbi5wdXNoKGVsZW1lbnQpO1xuICAgIH0pO1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfSxcblxuICBjb250ZW50czogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmNvbnRlbnREb2N1bWVudCB8fCBlbGVtZW50LmNoaWxkTm9kZXMgfHwgW107XG4gIH0sXG5cbiAgYXBwZW5kOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XG4gICAgdmFyIG5vZGVUeXBlID0gZWxlbWVudC5ub2RlVHlwZTtcbiAgICBpZiAobm9kZVR5cGUgIT09IE5PREVfVFlQRV9FTEVNRU5UICYmIG5vZGVUeXBlICE9PSBOT0RFX1RZUEVfRE9DVU1FTlRfRlJBR01FTlQpIHJldHVybjtcblxuICAgIG5vZGUgPSBuZXcgSlFMaXRlKG5vZGUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbm9kZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgfVxuICB9LFxuXG4gIHByZXBlbmQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHtcbiAgICBpZiAoZWxlbWVudC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFX0VMRU1FTlQpIHtcbiAgICAgIHZhciBpbmRleCA9IGVsZW1lbnQuZmlyc3RDaGlsZDtcbiAgICAgIGZvckVhY2gobmV3IEpRTGl0ZShub2RlKSwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgICAgZWxlbWVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIGluZGV4KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICB3cmFwOiBmdW5jdGlvbihlbGVtZW50LCB3cmFwTm9kZSkge1xuICAgIHdyYXBOb2RlID0ganFMaXRlKHdyYXBOb2RlKS5lcSgwKS5jbG9uZSgpWzBdO1xuICAgIHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCh3cmFwTm9kZSwgZWxlbWVudCk7XG4gICAgfVxuICAgIHdyYXBOb2RlLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICB9LFxuXG4gIHJlbW92ZToganFMaXRlUmVtb3ZlLFxuXG4gIGRldGFjaDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIGpxTGl0ZVJlbW92ZShlbGVtZW50LCB0cnVlKTtcbiAgfSxcblxuICBhZnRlcjogZnVuY3Rpb24oZWxlbWVudCwgbmV3RWxlbWVudCkge1xuICAgIHZhciBpbmRleCA9IGVsZW1lbnQsIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICBuZXdFbGVtZW50ID0gbmV3IEpRTGl0ZShuZXdFbGVtZW50KTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG5ld0VsZW1lbnQubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIG5vZGUgPSBuZXdFbGVtZW50W2ldO1xuICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShub2RlLCBpbmRleC5uZXh0U2libGluZyk7XG4gICAgICBpbmRleCA9IG5vZGU7XG4gICAgfVxuICB9LFxuXG4gIGFkZENsYXNzOiBqcUxpdGVBZGRDbGFzcyxcbiAgcmVtb3ZlQ2xhc3M6IGpxTGl0ZVJlbW92ZUNsYXNzLFxuXG4gIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbihlbGVtZW50LCBzZWxlY3RvciwgY29uZGl0aW9uKSB7XG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICBmb3JFYWNoKHNlbGVjdG9yLnNwbGl0KCcgJyksIGZ1bmN0aW9uKGNsYXNzTmFtZSkge1xuICAgICAgICB2YXIgY2xhc3NDb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChjbGFzc0NvbmRpdGlvbikpIHtcbiAgICAgICAgICBjbGFzc0NvbmRpdGlvbiA9ICFqcUxpdGVIYXNDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIChjbGFzc0NvbmRpdGlvbiA/IGpxTGl0ZUFkZENsYXNzIDoganFMaXRlUmVtb3ZlQ2xhc3MpKGVsZW1lbnQsIGNsYXNzTmFtZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgcGFyZW50OiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gTk9ERV9UWVBFX0RPQ1VNRU5UX0ZSQUdNRU5UID8gcGFyZW50IDogbnVsbDtcbiAgfSxcblxuICBuZXh0OiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICB9LFxuXG4gIGZpbmQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgaWYgKGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKHNlbGVjdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfSxcblxuICBjbG9uZToganFMaXRlQ2xvbmUsXG5cbiAgdHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50LCBleHRyYVBhcmFtZXRlcnMpIHtcblxuICAgIHZhciBkdW1teUV2ZW50LCBldmVudEZuc0NvcHksIGhhbmRsZXJBcmdzO1xuICAgIHZhciBldmVudE5hbWUgPSBldmVudC50eXBlIHx8IGV2ZW50O1xuICAgIHZhciBleHBhbmRvU3RvcmUgPSBqcUxpdGVFeHBhbmRvU3RvcmUoZWxlbWVudCk7XG4gICAgdmFyIGV2ZW50cyA9IGV4cGFuZG9TdG9yZSAmJiBleHBhbmRvU3RvcmUuZXZlbnRzO1xuICAgIHZhciBldmVudEZucyA9IGV2ZW50cyAmJiBldmVudHNbZXZlbnROYW1lXTtcblxuICAgIGlmIChldmVudEZucykge1xuICAgICAgLy8gQ3JlYXRlIGEgZHVtbXkgZXZlbnQgdG8gcGFzcyB0byB0aGUgaGFuZGxlcnNcbiAgICAgIGR1bW15RXZlbnQgPSB7XG4gICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHsgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsgfSxcbiAgICAgICAgaXNEZWZhdWx0UHJldmVudGVkOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdHJ1ZTsgfSxcbiAgICAgICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsgdGhpcy5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlOyB9LFxuICAgICAgICBpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9PT0gdHJ1ZTsgfSxcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiBub29wLFxuICAgICAgICB0eXBlOiBldmVudE5hbWUsXG4gICAgICAgIHRhcmdldDogZWxlbWVudFxuICAgICAgfTtcblxuICAgICAgLy8gSWYgYSBjdXN0b20gZXZlbnQgd2FzIHByb3ZpZGVkIHRoZW4gZXh0ZW5kIG91ciBkdW1teSBldmVudCB3aXRoIGl0XG4gICAgICBpZiAoZXZlbnQudHlwZSkge1xuICAgICAgICBkdW1teUV2ZW50ID0gZXh0ZW5kKGR1bW15RXZlbnQsIGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29weSBldmVudCBoYW5kbGVycyBpbiBjYXNlIGV2ZW50IGhhbmRsZXJzIGFycmF5IGlzIG1vZGlmaWVkIGR1cmluZyBleGVjdXRpb24uXG4gICAgICBldmVudEZuc0NvcHkgPSBzaGFsbG93Q29weShldmVudEZucyk7XG4gICAgICBoYW5kbGVyQXJncyA9IGV4dHJhUGFyYW1ldGVycyA/IFtkdW1teUV2ZW50XS5jb25jYXQoZXh0cmFQYXJhbWV0ZXJzKSA6IFtkdW1teUV2ZW50XTtcblxuICAgICAgZm9yRWFjaChldmVudEZuc0NvcHksIGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIGlmICghZHVtbXlFdmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgICAgZm4uYXBwbHkoZWxlbWVudCwgaGFuZGxlckFyZ3MpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0sIGZ1bmN0aW9uKGZuLCBuYW1lKSB7XG4gIC8qKlxuICAgKiBjaGFpbmluZyBmdW5jdGlvbnNcbiAgICovXG4gIEpRTGl0ZS5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIHZhbHVlO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gZm4odGhpc1tpXSwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICAgIGlmIChpc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICAgICAgLy8gYW55IGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSB2YWx1ZSBuZWVkcyB0byBiZSB3cmFwcGVkXG4gICAgICAgICAgdmFsdWUgPSBqcUxpdGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBqcUxpdGVBZGROb2Rlcyh2YWx1ZSwgZm4odGhpc1tpXSwgYXJnMSwgYXJnMiwgYXJnMykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXNEZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdGhpcztcbiAgfTtcblxuICAvLyBiaW5kIGxlZ2FjeSBiaW5kL3VuYmluZCB0byBvbi9vZmZcbiAgSlFMaXRlLnByb3RvdHlwZS5iaW5kID0gSlFMaXRlLnByb3RvdHlwZS5vbjtcbiAgSlFMaXRlLnByb3RvdHlwZS51bmJpbmQgPSBKUUxpdGUucHJvdG90eXBlLm9mZjtcbn0pO1xuXG4vKipcbiAqIENvbXB1dGVzIGEgaGFzaCBvZiBhbiAnb2JqJy5cbiAqIEhhc2ggb2YgYTpcbiAqICBzdHJpbmcgaXMgc3RyaW5nXG4gKiAgbnVtYmVyIGlzIG51bWJlciBhcyBzdHJpbmdcbiAqICBvYmplY3QgaXMgZWl0aGVyIHJlc3VsdCBvZiBjYWxsaW5nICQkaGFzaEtleSBmdW5jdGlvbiBvbiB0aGUgb2JqZWN0IG9yIHVuaXF1ZWx5IGdlbmVyYXRlZCBpZCxcbiAqICAgICAgICAgdGhhdCBpcyBhbHNvIGFzc2lnbmVkIHRvIHRoZSAkJGhhc2hLZXkgcHJvcGVydHkgb2YgdGhlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gb2JqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBoYXNoIHN0cmluZyBzdWNoIHRoYXQgdGhlIHNhbWUgaW5wdXQgd2lsbCBoYXZlIHRoZSBzYW1lIGhhc2ggc3RyaW5nLlxuICogICAgICAgICBUaGUgcmVzdWx0aW5nIHN0cmluZyBrZXkgaXMgaW4gJ3R5cGU6aGFzaEtleScgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBoYXNoS2V5KG9iaiwgbmV4dFVpZEZuKSB7XG4gIHZhciBrZXkgPSBvYmogJiYgb2JqLiQkaGFzaEtleTtcblxuICBpZiAoa2V5KSB7XG4gICAgaWYgKHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGtleSA9IG9iai4kJGhhc2hLZXkoKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuXG4gIHZhciBvYmpUeXBlID0gdHlwZW9mIG9iajtcbiAgaWYgKG9ialR5cGUgPT0gJ2Z1bmN0aW9uJyB8fCAob2JqVHlwZSA9PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGwpKSB7XG4gICAga2V5ID0gb2JqLiQkaGFzaEtleSA9IG9ialR5cGUgKyAnOicgKyAobmV4dFVpZEZuIHx8IG5leHRVaWQpKCk7XG4gIH0gZWxzZSB7XG4gICAga2V5ID0gb2JqVHlwZSArICc6JyArIG9iajtcbiAgfVxuXG4gIHJldHVybiBrZXk7XG59XG5cbi8qKlxuICogSGFzaE1hcCB3aGljaCBjYW4gdXNlIG9iamVjdHMgYXMga2V5c1xuICovXG5mdW5jdGlvbiBIYXNoTWFwKGFycmF5LCBpc29sYXRlZFVpZCkge1xuICBpZiAoaXNvbGF0ZWRVaWQpIHtcbiAgICB2YXIgdWlkID0gMDtcbiAgICB0aGlzLm5leHRVaWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiArK3VpZDtcbiAgICB9O1xuICB9XG4gIGZvckVhY2goYXJyYXksIHRoaXMucHV0LCB0aGlzKTtcbn1cbkhhc2hNYXAucHJvdG90eXBlID0ge1xuICAvKipcbiAgICogU3RvcmUga2V5IHZhbHVlIHBhaXJcbiAgICogQHBhcmFtIGtleSBrZXkgdG8gc3RvcmUgY2FuIGJlIGFueSB0eXBlXG4gICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byBzdG9yZSBjYW4gYmUgYW55IHR5cGVcbiAgICovXG4gIHB1dDogZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgIHRoaXNbaGFzaEtleShrZXksIHRoaXMubmV4dFVpZCldID0gdmFsdWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybnMge09iamVjdH0gdGhlIHZhbHVlIGZvciB0aGUga2V5XG4gICAqL1xuICBnZXQ6IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiB0aGlzW2hhc2hLZXkoa2V5LCB0aGlzLm5leHRVaWQpXTtcbiAgfSxcblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBrZXkvdmFsdWUgcGFpclxuICAgKiBAcGFyYW0ga2V5XG4gICAqL1xuICByZW1vdmU6IGZ1bmN0aW9uKGtleSkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXNba2V5ID0gaGFzaEtleShrZXksIHRoaXMubmV4dFVpZCldO1xuICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59O1xuXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG1vZHVsZSBuZ1xuICogQG5hbWUgYW5ndWxhci5pbmplY3RvclxuICogQGtpbmQgZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENyZWF0ZXMgYW4gaW5qZWN0b3Igb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgZm9yIHJldHJpZXZpbmcgc2VydmljZXMgYXMgd2VsbCBhcyBmb3JcbiAqIGRlcGVuZGVuY3kgaW5qZWN0aW9uIChzZWUge0BsaW5rIGd1aWRlL2RpIGRlcGVuZGVuY3kgaW5qZWN0aW9ufSkuXG4gKlxuXG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmd8RnVuY3Rpb24+fSBtb2R1bGVzIEEgbGlzdCBvZiBtb2R1bGUgZnVuY3Rpb25zIG9yIHRoZWlyIGFsaWFzZXMuIFNlZVxuICogICAgICAgIHtAbGluayBhbmd1bGFyLm1vZHVsZX0uIFRoZSBgbmdgIG1vZHVsZSBtdXN0IGJlIGV4cGxpY2l0bHkgYWRkZWQuXG4gKiBAcmV0dXJucyB7aW5qZWN0b3J9IEluamVjdG9yIG9iamVjdC4gU2VlIHtAbGluayBhdXRvLiRpbmplY3RvciAkaW5qZWN0b3J9LlxuICpcbiAqIEBleGFtcGxlXG4gKiBUeXBpY2FsIHVzYWdlXG4gKiBgYGBqc1xuICogICAvLyBjcmVhdGUgYW4gaW5qZWN0b3JcbiAqICAgdmFyICRpbmplY3RvciA9IGFuZ3VsYXIuaW5qZWN0b3IoWyduZyddKTtcbiAqXG4gKiAgIC8vIHVzZSB0aGUgaW5qZWN0b3IgdG8ga2ljayBvZmYgeW91ciBhcHBsaWNhdGlvblxuICogICAvLyB1c2UgdGhlIHR5cGUgaW5mZXJlbmNlIHRvIGF1dG8gaW5qZWN0IGFyZ3VtZW50cywgb3IgdXNlIGltcGxpY2l0IGluamVjdGlvblxuICogICAkaW5qZWN0b3IuaW52b2tlKGZ1bmN0aW9uKCRyb290U2NvcGUsICRjb21waWxlLCAkZG9jdW1lbnQpIHtcbiAqICAgICAkY29tcGlsZSgkZG9jdW1lbnQpKCRyb290U2NvcGUpO1xuICogICAgICRyb290U2NvcGUuJGRpZ2VzdCgpO1xuICogICB9KTtcbiAqIGBgYFxuICpcbiAqIFNvbWV0aW1lcyB5b3Ugd2FudCB0byBnZXQgYWNjZXNzIHRvIHRoZSBpbmplY3RvciBvZiBhIGN1cnJlbnRseSBydW5uaW5nIEFuZ3VsYXIgYXBwXG4gKiBmcm9tIG91dHNpZGUgQW5ndWxhci4gUGVyaGFwcywgeW91IHdhbnQgdG8gaW5qZWN0IGFuZCBjb21waWxlIHNvbWUgbWFya3VwIGFmdGVyIHRoZVxuICogYXBwbGljYXRpb24gaGFzIGJlZW4gYm9vdHN0cmFwcGVkLiBZb3UgY2FuIGRvIHRoaXMgdXNpbmcgdGhlIGV4dHJhIGBpbmplY3RvcigpYCBhZGRlZFxuICogdG8gSlF1ZXJ5L2pxTGl0ZSBlbGVtZW50cy4gU2VlIHtAbGluayBhbmd1bGFyLmVsZW1lbnR9LlxuICpcbiAqICpUaGlzIGlzIGZhaXJseSByYXJlIGJ1dCBjb3VsZCBiZSB0aGUgY2FzZSBpZiBhIHRoaXJkIHBhcnR5IGxpYnJhcnkgaXMgaW5qZWN0aW5nIHRoZVxuICogbWFya3VwLipcbiAqXG4gKiBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgYSBuZXcgYmxvY2sgb2YgSFRNTCBjb250YWluaW5nIGEgYG5nLWNvbnRyb2xsZXJgXG4gKiBkaXJlY3RpdmUgaXMgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQgYm9keSBieSBKUXVlcnkuIFdlIHRoZW4gY29tcGlsZSBhbmQgbGlua1xuICogaXQgaW50byB0aGUgY3VycmVudCBBbmd1bGFySlMgc2NvcGUuXG4gKlxuICogYGBganNcbiAqIHZhciAkZGl2ID0gJCgnPGRpdiBuZy1jb250cm9sbGVyPVwiTXlDdHJsXCI+e3tjb250ZW50LmxhYmVsfX08L2Rpdj4nKTtcbiAqICQoZG9jdW1lbnQuYm9keSkuYXBwZW5kKCRkaXYpO1xuICpcbiAqIGFuZ3VsYXIuZWxlbWVudChkb2N1bWVudCkuaW5qZWN0b3IoKS5pbnZva2UoZnVuY3Rpb24oJGNvbXBpbGUpIHtcbiAqICAgdmFyIHNjb3BlID0gYW5ndWxhci5lbGVtZW50KCRkaXYpLnNjb3BlKCk7XG4gKiAgICRjb21waWxlKCRkaXYpKHNjb3BlKTtcbiAqIH0pO1xuICogYGBgXG4gKi9cblxuXG4vKipcbiAqIEBuZ2RvYyBtb2R1bGVcbiAqIEBuYW1lIGF1dG9cbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIEltcGxpY2l0IG1vZHVsZSB3aGljaCBnZXRzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gZWFjaCB7QGxpbmsgYXV0by4kaW5qZWN0b3IgJGluamVjdG9yfS5cbiAqL1xuXG52YXIgRk5fQVJHUyA9IC9eZnVuY3Rpb25cXHMqW15cXChdKlxcKFxccyooW15cXCldKilcXCkvbTtcbnZhciBGTl9BUkdfU1BMSVQgPSAvLC87XG52YXIgRk5fQVJHID0gL15cXHMqKF8/KShcXFMrPylcXDFcXHMqJC87XG52YXIgU1RSSVBfQ09NTUVOVFMgPSAvKChcXC9cXC8uKiQpfChcXC9cXCpbXFxzXFxTXSo/XFwqXFwvKSkvbWc7XG52YXIgJGluamVjdG9yTWluRXJyID0gbWluRXJyKCckaW5qZWN0b3InKTtcblxuZnVuY3Rpb24gYW5vbkZuKGZuKSB7XG4gIC8vIEZvciBhbm9ueW1vdXMgZnVuY3Rpb25zLCBzaG93aW5nIGF0IHRoZSB2ZXJ5IGxlYXN0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgY2FuIGhlbHAgaW5cbiAgLy8gZGVidWdnaW5nLlxuICB2YXIgZm5UZXh0ID0gZm4udG9TdHJpbmcoKS5yZXBsYWNlKFNUUklQX0NPTU1FTlRTLCAnJyksXG4gICAgICBhcmdzID0gZm5UZXh0Lm1hdGNoKEZOX0FSR1MpO1xuICBpZiAoYXJncykge1xuICAgIHJldHVybiAnZnVuY3Rpb24oJyArIChhcmdzWzFdIHx8ICcnKS5yZXBsYWNlKC9bXFxzXFxyXFxuXSsvLCAnICcpICsgJyknO1xuICB9XG4gIHJldHVybiAnZm4nO1xufVxuXG5mdW5jdGlvbiBhbm5vdGF0ZShmbiwgc3RyaWN0RGksIG5hbWUpIHtcbiAgdmFyICRpbmplY3QsXG4gICAgICBmblRleHQsXG4gICAgICBhcmdEZWNsLFxuICAgICAgbGFzdDtcblxuICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKCEoJGluamVjdCA9IGZuLiRpbmplY3QpKSB7XG4gICAgICAkaW5qZWN0ID0gW107XG4gICAgICBpZiAoZm4ubGVuZ3RoKSB7XG4gICAgICAgIGlmIChzdHJpY3REaSkge1xuICAgICAgICAgIGlmICghaXNTdHJpbmcobmFtZSkgfHwgIW5hbWUpIHtcbiAgICAgICAgICAgIG5hbWUgPSBmbi5uYW1lIHx8IGFub25Gbihmbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93ICRpbmplY3Rvck1pbkVycignc3RyaWN0ZGknLFxuICAgICAgICAgICAgJ3swfSBpcyBub3QgdXNpbmcgZXhwbGljaXQgYW5ub3RhdGlvbiBhbmQgY2Fubm90IGJlIGludm9rZWQgaW4gc3RyaWN0IG1vZGUnLCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBmblRleHQgPSBmbi50b1N0cmluZygpLnJlcGxhY2UoU1RSSVBfQ09NTUVOVFMsICcnKTtcbiAgICAgICAgYXJnRGVjbCA9IGZuVGV4dC5tYXRjaChGTl9BUkdTKTtcbiAgICAgICAgZm9yRWFjaChhcmdEZWNsWzFdLnNwbGl0KEZOX0FSR19TUExJVCksIGZ1bmN0aW9uKGFyZykge1xuICAgICAgICAgIGFyZy5yZXBsYWNlKEZOX0FSRywgZnVuY3Rpb24oYWxsLCB1bmRlcnNjb3JlLCBuYW1lKSB7XG4gICAgICAgICAgICAkaW5qZWN0LnB1c2gobmFtZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZm4uJGluamVjdCA9ICRpbmplY3Q7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzQXJyYXkoZm4pKSB7XG4gICAgbGFzdCA9IGZuLmxlbmd0aCAtIDE7XG4gICAgYXNzZXJ0QXJnRm4oZm5bbGFzdF0sICdmbicpO1xuICAgICRpbmplY3QgPSBmbi5zbGljZSgwLCBsYXN0KTtcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnRBcmdGbihmbiwgJ2ZuJywgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuICRpbmplY3Q7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIEBuZ2RvYyBzZXJ2aWNlXG4gKiBAbmFtZSAkaW5qZWN0b3JcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBgJGluamVjdG9yYCBpcyB1c2VkIHRvIHJldHJpZXZlIG9iamVjdCBpbnN0YW5jZXMgYXMgZGVmaW5lZCBieVxuICoge0BsaW5rIGF1dG8uJHByb3ZpZGUgcHJvdmlkZXJ9LCBpbnN0YW50aWF0ZSB0eXBlcywgaW52b2tlIG1ldGhvZHMsXG4gKiBhbmQgbG9hZCBtb2R1bGVzLlxuICpcbiAqIFRoZSBmb2xsb3dpbmcgYWx3YXlzIGhvbGRzIHRydWU6XG4gKlxuICogYGBganNcbiAqICAgdmFyICRpbmplY3RvciA9IGFuZ3VsYXIuaW5qZWN0b3IoKTtcbiAqICAgZXhwZWN0KCRpbmplY3Rvci5nZXQoJyRpbmplY3RvcicpKS50b0JlKCRpbmplY3Rvcik7XG4gKiAgIGV4cGVjdCgkaW5qZWN0b3IuaW52b2tlKGZ1bmN0aW9uKCRpbmplY3Rvcikge1xuICogICAgIHJldHVybiAkaW5qZWN0b3I7XG4gKiAgIH0pKS50b0JlKCRpbmplY3Rvcik7XG4gKiBgYGBcbiAqXG4gKiAjIEluamVjdGlvbiBGdW5jdGlvbiBBbm5vdGF0aW9uXG4gKlxuICogSmF2YVNjcmlwdCBkb2VzIG5vdCBoYXZlIGFubm90YXRpb25zLCBhbmQgYW5ub3RhdGlvbnMgYXJlIG5lZWRlZCBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uIFRoZVxuICogZm9sbG93aW5nIGFyZSBhbGwgdmFsaWQgd2F5cyBvZiBhbm5vdGF0aW5nIGZ1bmN0aW9uIHdpdGggaW5qZWN0aW9uIGFyZ3VtZW50cyBhbmQgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogYGBganNcbiAqICAgLy8gaW5mZXJyZWQgKG9ubHkgd29ya3MgaWYgY29kZSBub3QgbWluaWZpZWQvb2JmdXNjYXRlZClcbiAqICAgJGluamVjdG9yLmludm9rZShmdW5jdGlvbihzZXJ2aWNlQSl7fSk7XG4gKlxuICogICAvLyBhbm5vdGF0ZWRcbiAqICAgZnVuY3Rpb24gZXhwbGljaXQoc2VydmljZUEpIHt9O1xuICogICBleHBsaWNpdC4kaW5qZWN0ID0gWydzZXJ2aWNlQSddO1xuICogICAkaW5qZWN0b3IuaW52b2tlKGV4cGxpY2l0KTtcbiAqXG4gKiAgIC8vIGlubGluZVxuICogICAkaW5qZWN0b3IuaW52b2tlKFsnc2VydmljZUEnLCBmdW5jdGlvbihzZXJ2aWNlQSl7fV0pO1xuICogYGBgXG4gKlxuICogIyMgSW5mZXJlbmNlXG4gKlxuICogSW4gSmF2YVNjcmlwdCBjYWxsaW5nIGB0b1N0cmluZygpYCBvbiBhIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uIFRoZSBkZWZpbml0aW9uXG4gKiBjYW4gdGhlbiBiZSBwYXJzZWQgYW5kIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMgY2FuIGJlIGV4dHJhY3RlZC4gKk5PVEU6KiBUaGlzIGRvZXMgbm90IHdvcmsgd2l0aFxuICogbWluaWZpY2F0aW9uLCBhbmQgb2JmdXNjYXRpb24gdG9vbHMgc2luY2UgdGhlc2UgdG9vbHMgY2hhbmdlIHRoZSBhcmd1bWVudCBuYW1lcy5cbiAqXG4gKiAjIyBgJGluamVjdGAgQW5ub3RhdGlvblxuICogQnkgYWRkaW5nIGFuIGAkaW5qZWN0YCBwcm9wZXJ0eSBvbnRvIGEgZnVuY3Rpb24gdGhlIGluamVjdGlvbiBwYXJhbWV0ZXJzIGNhbiBiZSBzcGVjaWZpZWQuXG4gKlxuICogIyMgSW5saW5lXG4gKiBBcyBhbiBhcnJheSBvZiBpbmplY3Rpb24gbmFtZXMsIHdoZXJlIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGFycmF5IGlzIHRoZSBmdW5jdGlvbiB0byBjYWxsLlxuICovXG5cbi8qKlxuICogQG5nZG9jIG1ldGhvZFxuICogQG5hbWUgJGluamVjdG9yI2dldFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIGFuIGluc3RhbmNlIG9mIHRoZSBzZXJ2aWNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBpbnN0YW5jZSB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm4geyp9IFRoZSBpbnN0YW5jZS5cbiAqL1xuXG4vKipcbiAqIEBuZ2RvYyBtZXRob2RcbiAqIEBuYW1lICRpbmplY3RvciNpbnZva2VcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEludm9rZSB0aGUgbWV0aG9kIGFuZCBzdXBwbHkgdGhlIG1ldGhvZCBhcmd1bWVudHMgZnJvbSB0aGUgYCRpbmplY3RvcmAuXG4gKlxuICogQHBhcmFtIHshRnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuIEZ1bmN0aW9uIHBhcmFtZXRlcnMgYXJlIGluamVjdGVkIGFjY29yZGluZyB0byB0aGVcbiAqICAge0BsaW5rIGd1aWRlL2RpICRpbmplY3QgQW5ub3RhdGlvbn0gcnVsZXMuXG4gKiBAcGFyYW0ge09iamVjdD19IHNlbGYgVGhlIGB0aGlzYCBmb3IgdGhlIGludm9rZWQgbWV0aG9kLlxuICogQHBhcmFtIHtPYmplY3Q9fSBsb2NhbHMgT3B0aW9uYWwgb2JqZWN0LiBJZiBwcmVzZXQgdGhlbiBhbnkgYXJndW1lbnQgbmFtZXMgYXJlIHJlYWQgZnJvbSB0aGlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgZmlyc3QsIGJlZm9yZSB0aGUgYCRpbmplY3RvcmAgaXMgY29uc3VsdGVkLlxuICogQHJldHVybnMgeyp9IHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgaW52b2tlZCBgZm5gIGZ1bmN0aW9uLlxuICovXG5cbi8qKlxuICogQG5nZG9jIG1ldGhvZFxuICogQG5hbWUgJGluamVjdG9yI2hhc1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWxsb3dzIHRoZSB1c2VyIHRvIHF1ZXJ5IGlmIHRoZSBwYXJ0aWN1bGFyIHNlcnZpY2UgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGluamVjdG9yIGhhcyBnaXZlbiBzZXJ2aWNlLlxuICovXG5cbi8qKlxuICogQG5nZG9jIG1ldGhvZFxuICogQG5hbWUgJGluamVjdG9yI2luc3RhbnRpYXRlXG4gKiBAZGVzY3JpcHRpb25cbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBKUyB0eXBlLiBUaGUgbWV0aG9kIHRha2VzIGEgY29uc3RydWN0b3IgZnVuY3Rpb24sIGludm9rZXMgdGhlIG5ld1xuICogb3BlcmF0b3IsIGFuZCBzdXBwbGllcyBhbGwgb2YgdGhlIGFyZ3VtZW50cyB0byB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gYXMgc3BlY2lmaWVkIGJ5IHRoZVxuICogY29uc3RydWN0b3IgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBUeXBlIEFubm90YXRlZCBjb25zdHJ1Y3RvciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gbG9jYWxzIE9wdGlvbmFsIG9iamVjdC4gSWYgcHJlc2V0IHRoZW4gYW55IGFyZ3VtZW50IG5hbWVzIGFyZSByZWFkIGZyb20gdGhpc1xuICogb2JqZWN0IGZpcnN0LCBiZWZvcmUgdGhlIGAkaW5qZWN0b3JgIGlzIGNvbnN1bHRlZC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IG5ldyBpbnN0YW5jZSBvZiBgVHlwZWAuXG4gKi9cblxuLyoqXG4gKiBAbmdkb2MgbWV0aG9kXG4gKiBAbmFtZSAkaW5qZWN0b3IjYW5ub3RhdGVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgYW4gYXJyYXkgb2Ygc2VydmljZSBuYW1lcyB3aGljaCB0aGUgZnVuY3Rpb24gaXMgcmVxdWVzdGluZyBmb3IgaW5qZWN0aW9uLiBUaGlzIEFQSSBpc1xuICogdXNlZCBieSB0aGUgaW5qZWN0b3IgdG8gZGV0ZXJtaW5lIHdoaWNoIHNlcnZpY2VzIG5lZWQgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgZnVuY3Rpb24gd2hlbiB0aGVcbiAqIGZ1bmN0aW9uIGlzIGludm9rZWQuIFRoZXJlIGFyZSB0aHJlZSB3YXlzIGluIHdoaWNoIHRoZSBmdW5jdGlvbiBjYW4gYmUgYW5ub3RhdGVkIHdpdGggdGhlIG5lZWRlZFxuICogZGVwZW5kZW5jaWVzLlxuICpcbiAqICMgQXJndW1lbnQgbmFtZXNcbiAqXG4gKiBUaGUgc2ltcGxlc3QgZm9ybSBpcyB0byBleHRyYWN0IHRoZSBkZXBlbmRlbmNpZXMgZnJvbSB0aGUgYXJndW1lbnRzIG9mIHRoZSBmdW5jdGlvbi4gVGhpcyBpcyBkb25lXG4gKiBieSBjb252ZXJ0aW5nIHRoZSBmdW5jdGlvbiBpbnRvIGEgc3RyaW5nIHVzaW5nIGB0b1N0cmluZygpYCBtZXRob2QgYW5kIGV4dHJhY3RpbmcgdGhlIGFyZ3VtZW50XG4gKiBuYW1lcy5cbiAqIGBgYGpzXG4gKiAgIC8vIEdpdmVuXG4gKiAgIGZ1bmN0aW9uIE15Q29udHJvbGxlcigkc2NvcGUsICRyb3V0ZSkge1xuICogICAgIC8vIC4uLlxuICogICB9XG4gKlxuICogICAvLyBUaGVuXG4gKiAgIGV4cGVjdChpbmplY3Rvci5hbm5vdGF0ZShNeUNvbnRyb2xsZXIpKS50b0VxdWFsKFsnJHNjb3BlJywgJyRyb3V0ZSddKTtcbiAqIGBgYFxuICpcbiAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHdvcmsgd2l0aCBjb2RlIG1pbmlmaWNhdGlvbiAvIG9iZnVzY2F0aW9uLiBGb3IgdGhpcyByZWFzb24gdGhlIGZvbGxvd2luZ1xuICogYW5ub3RhdGlvbiBzdHJhdGVnaWVzIGFyZSBzdXBwb3J0ZWQuXG4gKlxuICogIyBUaGUgYCRpbmplY3RgIHByb3BlcnR5XG4gKlxuICogSWYgYSBmdW5jdGlvbiBoYXMgYW4gYCRpbmplY3RgIHByb3BlcnR5IGFuZCBpdHMgdmFsdWUgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncywgdGhlbiB0aGUgc3RyaW5nc1xuICogcmVwcmVzZW50IG5hbWVzIG9mIHNlcnZpY2VzIHRvIGJlIGluamVjdGVkIGludG8gdGhlIGZ1bmN0aW9uLlxuICogYGBganNcbiAqICAgLy8gR2l2ZW5cbiAqICAgdmFyIE15Q29udHJvbGxlciA9IGZ1bmN0aW9uKG9iZnVzY2F0ZWRTY29wZSwgb2JmdXNjYXRlZFJvdXRlKSB7XG4gKiAgICAgLy8gLi4uXG4gKiAgIH1cbiAqICAgLy8gRGVmaW5lIGZ1bmN0aW9uIGRlcGVuZGVuY2llc1xuICogICBNeUNvbnRyb2xsZXJbJyRpbmplY3QnXSA9IFsnJHNjb3BlJywgJyRyb3V0ZSddO1xuICpcbiAqICAgLy8gVGhlblxuICogICBleHBlY3QoaW5qZWN0b3IuYW5ub3RhdGUoTXlDb250cm9sbGVyKSkudG9FcXVhbChbJyRzY29wZScsICckcm91dGUnXSk7XG4gKiBgYGBcbiAqXG4gKiAjIFRoZSBhcnJheSBub3RhdGlvblxuICpcbiAqIEl0IGlzIG9mdGVuIGRlc2lyYWJsZSB0byBpbmxpbmUgSW5qZWN0ZWQgZnVuY3Rpb25zIGFuZCB0aGF0J3Mgd2hlbiBzZXR0aW5nIHRoZSBgJGluamVjdGAgcHJvcGVydHlcbiAqIGlzIHZlcnkgaW5jb252ZW5pZW50LiBJbiB0aGVzZSBzaXR1YXRpb25zIHVzaW5nIHRoZSBhcnJheSBub3RhdGlvbiB0byBzcGVjaWZ5IHRoZSBkZXBlbmRlbmNpZXMgaW5cbiAqIGEgd2F5IHRoYXQgc3Vydml2ZXMgbWluaWZpY2F0aW9uIGlzIGEgYmV0dGVyIGNob2ljZTpcbiAqXG4gKiBgYGBqc1xuICogICAvLyBXZSB3aXNoIHRvIHdyaXRlIHRoaXMgKG5vdCBtaW5pZmljYXRpb24gLyBvYmZ1c2NhdGlvbiBzYWZlKVxuICogICBpbmplY3Rvci5pbnZva2UoZnVuY3Rpb24oJGNvbXBpbGUsICRyb290U2NvcGUpIHtcbiAqICAgICAvLyAuLi5cbiAqICAgfSk7XG4gKlxuICogICAvLyBXZSBhcmUgZm9yY2VkIHRvIHdyaXRlIGJyZWFrIGlubGluaW5nXG4gKiAgIHZhciB0bXBGbiA9IGZ1bmN0aW9uKG9iZnVzY2F0ZWRDb21waWxlLCBvYmZ1c2NhdGVkUm9vdFNjb3BlKSB7XG4gKiAgICAgLy8gLi4uXG4gKiAgIH07XG4gKiAgIHRtcEZuLiRpbmplY3QgPSBbJyRjb21waWxlJywgJyRyb290U2NvcGUnXTtcbiAqICAgaW5qZWN0b3IuaW52b2tlKHRtcEZuKTtcbiAqXG4gKiAgIC8vIFRvIGJldHRlciBzdXBwb3J0IGlubGluZSBmdW5jdGlvbiB0aGUgaW5saW5lIGFubm90YXRpb24gaXMgc3VwcG9ydGVkXG4gKiAgIGluamVjdG9yLmludm9rZShbJyRjb21waWxlJywgJyRyb290U2NvcGUnLCBmdW5jdGlvbihvYmZDb21waWxlLCBvYmZSb290U2NvcGUpIHtcbiAqICAgICAvLyAuLi5cbiAqICAgfV0pO1xuICpcbiAqICAgLy8gVGhlcmVmb3JlXG4gKiAgIGV4cGVjdChpbmplY3Rvci5hbm5vdGF0ZShcbiAqICAgICAgWyckY29tcGlsZScsICckcm9vdFNjb3BlJywgZnVuY3Rpb24ob2JmdXNfJGNvbXBpbGUsIG9iZnVzXyRyb290U2NvcGUpIHt9XSlcbiAqICAgICkudG9FcXVhbChbJyRjb21waWxlJywgJyRyb290U2NvcGUnXSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEFycmF5LjxzdHJpbmd8RnVuY3Rpb24+fSBmbiBGdW5jdGlvbiBmb3Igd2hpY2ggZGVwZW5kZW50IHNlcnZpY2UgbmFtZXMgbmVlZCB0b1xuICogYmUgcmV0cmlldmVkIGFzIGRlc2NyaWJlZCBhYm92ZS5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IFRoZSBuYW1lcyBvZiB0aGUgc2VydmljZXMgd2hpY2ggdGhlIGZ1bmN0aW9uIHJlcXVpcmVzLlxuICovXG5cblxuXG5cbi8qKlxuICogQG5nZG9jIHNlcnZpY2VcbiAqIEBuYW1lICRwcm92aWRlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogVGhlIHtAbGluayBhdXRvLiRwcm92aWRlICRwcm92aWRlfSBzZXJ2aWNlIGhhcyBhIG51bWJlciBvZiBtZXRob2RzIGZvciByZWdpc3RlcmluZyBjb21wb25lbnRzXG4gKiB3aXRoIHRoZSB7QGxpbmsgYXV0by4kaW5qZWN0b3IgJGluamVjdG9yfS4gTWFueSBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsc28gZXhwb3NlZCBvblxuICoge0BsaW5rIGFuZ3VsYXIuTW9kdWxlfS5cbiAqXG4gKiBBbiBBbmd1bGFyICoqc2VydmljZSoqIGlzIGEgc2luZ2xldG9uIG9iamVjdCBjcmVhdGVkIGJ5IGEgKipzZXJ2aWNlIGZhY3RvcnkqKi4gIFRoZXNlICoqc2VydmljZVxuICogZmFjdG9yaWVzKiogYXJlIGZ1bmN0aW9ucyB3aGljaCwgaW4gdHVybiwgYXJlIGNyZWF0ZWQgYnkgYSAqKnNlcnZpY2UgcHJvdmlkZXIqKi5cbiAqIFRoZSAqKnNlcnZpY2UgcHJvdmlkZXJzKiogYXJlIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucy4gV2hlbiBpbnN0YW50aWF0ZWQgdGhleSBtdXN0IGNvbnRhaW4gYVxuICogcHJvcGVydHkgY2FsbGVkIGAkZ2V0YCwgd2hpY2ggaG9sZHMgdGhlICoqc2VydmljZSBmYWN0b3J5KiogZnVuY3Rpb24uXG4gKlxuICogV2hlbiB5b3UgcmVxdWVzdCBhIHNlcnZpY2UsIHRoZSB7QGxpbmsgYXV0by4kaW5qZWN0b3IgJGluamVjdG9yfSBpcyByZXNwb25zaWJsZSBmb3IgZmluZGluZyB0aGVcbiAqIGNvcnJlY3QgKipzZXJ2aWNlIHByb3ZpZGVyKiosIGluc3RhbnRpYXRpbmcgaXQgYW5kIHRoZW4gY2FsbGluZyBpdHMgYCRnZXRgICoqc2VydmljZSBmYWN0b3J5KipcbiAqIGZ1bmN0aW9uIHRvIGdldCB0aGUgaW5zdGFuY2Ugb2YgdGhlICoqc2VydmljZSoqLlxuICpcbiAqIE9mdGVuIHNlcnZpY2VzIGhhdmUgbm8gY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIGFkZCBtZXRob2RzIHRvIHRoZSBzZXJ2aWNlXG4gKiBwcm92aWRlci4gIFRoZSBwcm92aWRlciB3aWxsIGJlIG5vIG1vcmUgdGhhbiBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHdpdGggYSBgJGdldGAgcHJvcGVydHkuIEZvclxuICogdGhlc2UgY2FzZXMgdGhlIHtAbGluayBhdXRvLiRwcm92aWRlICRwcm92aWRlfSBzZXJ2aWNlIGhhcyBhZGRpdGlvbmFsIGhlbHBlciBtZXRob2RzIHRvIHJlZ2lzdGVyXG4gKiBzZXJ2aWNlcyB3aXRob3V0IHNwZWNpZnlpbmcgYSBwcm92aWRlci5cbiAqXG4gKiAqIHtAbGluayBhdXRvLiRwcm92aWRlI3Byb3ZpZGVyIHByb3ZpZGVyKHByb3ZpZGVyKX0gLSByZWdpc3RlcnMgYSAqKnNlcnZpY2UgcHJvdmlkZXIqKiB3aXRoIHRoZVxuICogICAgIHtAbGluayBhdXRvLiRpbmplY3RvciAkaW5qZWN0b3J9XG4gKiAqIHtAbGluayBhdXRvLiRwcm92aWRlI2NvbnN0YW50IGNvbnN0YW50KG9iail9IC0gcmVnaXN0ZXJzIGEgdmFsdWUvb2JqZWN0IHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGJ5XG4gKiAgICAgcHJvdmlkZXJzIGFuZCBzZXJ2aWNlcy5cbiAqICoge0BsaW5rIGF1dG8uJHByb3ZpZGUjdmFsdWUgdmFsdWUob2JqKX0gLSByZWdpc3RlcnMgYSB2YWx1ZS9vYmplY3QgdGhhdCBjYW4gb25seSBiZSBhY2Nlc3NlZCBieVxuICogICAgIHNlcnZpY2VzLCBub3QgcHJvdmlkZXJzLlxuICogKiB7QGxpbmsgYXV0by4kcHJvdmlkZSNmYWN0b3J5IGZhY3RvcnkoZm4pfSAtIHJlZ2lzdGVycyBhIHNlcnZpY2UgKipmYWN0b3J5IGZ1bmN0aW9uKiosIGBmbmAsXG4gKiAgICAgdGhhdCB3aWxsIGJlIHdyYXBwZWQgaW4gYSAqKnNlcnZpY2UgcHJvdmlkZXIqKiBvYmplY3QsIHdob3NlIGAkZ2V0YCBwcm9wZXJ0eSB3aWxsIGNvbnRhaW4gdGhlXG4gKiAgICAgZ2l2ZW4gZmFjdG9yeSBmdW5jdGlvbi5cbiAqICoge0BsaW5rIGF1dG8uJHByb3ZpZGUjc2VydmljZSBzZXJ2aWNlKGNsYXNzKX0gLSByZWdpc3RlcnMgYSAqKmNvbnN0cnVjdG9yIGZ1bmN0aW9uKiosIGBjbGFzc2BcbiAqICAgICB0aGF0IHdpbGwgYmUgd3JhcHBlZCBpbiBhICoqc2VydmljZSBwcm92aWRlcioqIG9iamVjdCwgd2hvc2UgYCRnZXRgIHByb3BlcnR5IHdpbGwgaW5zdGFudGlhdGVcbiAqICAgICAgYSBuZXcgb2JqZWN0IHVzaW5nIHRoZSBnaXZlbiBjb25zdHJ1Y3RvciBmdW5jdGlvbi5cbiAqXG4gKiBTZWUgdGhlIGluZGl2aWR1YWwgbWV0aG9kcyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMuXG4gKi9cblxuLyoqXG4gKiBAbmdkb2MgbWV0aG9kXG4gKiBAbmFtZSAkcHJvdmlkZSNwcm92aWRlclxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogUmVnaXN0ZXIgYSAqKnByb3ZpZGVyIGZ1bmN0aW9uKiogd2l0aCB0aGUge0BsaW5rIGF1dG8uJGluamVjdG9yICRpbmplY3Rvcn0uIFByb3ZpZGVyIGZ1bmN0aW9uc1xuICogYXJlIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucywgd2hvc2UgaW5zdGFuY2VzIGFyZSByZXNwb25zaWJsZSBmb3IgXCJwcm92aWRpbmdcIiBhIGZhY3RvcnkgZm9yIGFcbiAqIHNlcnZpY2UuXG4gKlxuICogU2VydmljZSBwcm92aWRlciBuYW1lcyBzdGFydCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIHRoZXkgcHJvdmlkZSBmb2xsb3dlZCBieSBgUHJvdmlkZXJgLlxuICogRm9yIGV4YW1wbGUsIHRoZSB7QGxpbmsgbmcuJGxvZyAkbG9nfSBzZXJ2aWNlIGhhcyBhIHByb3ZpZGVyIGNhbGxlZFxuICoge0BsaW5rIG5nLiRsb2dQcm92aWRlciAkbG9nUHJvdmlkZXJ9LlxuICpcbiAqIFNlcnZpY2UgcHJvdmlkZXIgb2JqZWN0cyBjYW4gaGF2ZSBhZGRpdGlvbmFsIG1ldGhvZHMgd2hpY2ggYWxsb3cgY29uZmlndXJhdGlvbiBvZiB0aGUgcHJvdmlkZXJcbiAqIGFuZCBpdHMgc2VydmljZS4gSW1wb3J0YW50bHksIHlvdSBjYW4gY29uZmlndXJlIHdoYXQga2luZCBvZiBzZXJ2aWNlIGlzIGNyZWF0ZWQgYnkgdGhlIGAkZ2V0YFxuICogbWV0aG9kLCBvciBob3cgdGhhdCBzZXJ2aWNlIHdpbGwgYWN0LiBGb3IgZXhhbXBsZSwgdGhlIHtAbGluayBuZy4kbG9nUHJvdmlkZXIgJGxvZ1Byb3ZpZGVyfSBoYXMgYVxuICogbWV0aG9kIHtAbGluayBuZy4kbG9nUHJvdmlkZXIjZGVidWdFbmFibGVkIGRlYnVnRW5hYmxlZH1cbiAqIHdoaWNoIGxldHMgeW91IHNwZWNpZnkgd2hldGhlciB0aGUge0BsaW5rIG5nLiRsb2cgJGxvZ30gc2VydmljZSB3aWxsIGxvZyBkZWJ1ZyBtZXNzYWdlcyB0byB0aGVcbiAqIGNvbnNvbGUgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBpbnN0YW5jZS4gTk9URTogdGhlIHByb3ZpZGVyIHdpbGwgYmUgYXZhaWxhYmxlIHVuZGVyIGBuYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdQcm92aWRlcidgIGtleS5cbiAqIEBwYXJhbSB7KE9iamVjdHxmdW5jdGlvbigpKX0gcHJvdmlkZXIgSWYgdGhlIHByb3ZpZGVyIGlzOlxuICpcbiAqICAgLSBgT2JqZWN0YDogdGhlbiBpdCBzaG91bGQgaGF2ZSBhIGAkZ2V0YCBtZXRob2QuIFRoZSBgJGdldGAgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCB1c2luZ1xuICogICAgIHtAbGluayBhdXRvLiRpbmplY3RvciNpbnZva2UgJGluamVjdG9yLmludm9rZSgpfSB3aGVuIGFuIGluc3RhbmNlIG5lZWRzIHRvIGJlIGNyZWF0ZWQuXG4gKiAgIC0gYENvbnN0cnVjdG9yYDogYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHByb3ZpZGVyIHdpbGwgYmUgY3JlYXRlZCB1c2luZ1xuICogICAgIHtAbGluayBhdXRvLiRpbmplY3RvciNpbnN0YW50aWF0ZSAkaW5qZWN0b3IuaW5zdGFudGlhdGUoKX0sIHRoZW4gdHJlYXRlZCBhcyBgb2JqZWN0YC5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSByZWdpc3RlcmVkIHByb3ZpZGVyIGluc3RhbmNlXG5cbiAqIEBleGFtcGxlXG4gKlxuICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBjcmVhdGUgYSBzaW1wbGUgZXZlbnQgdHJhY2tpbmcgc2VydmljZSBhbmQgcmVnaXN0ZXIgaXQgdXNpbmdcbiAqIHtAbGluayBhdXRvLiRwcm92aWRlI3Byb3ZpZGVyICRwcm92aWRlLnByb3ZpZGVyKCl9LlxuICpcbiAqIGBgYGpzXG4gKiAgLy8gRGVmaW5lIHRoZSBldmVudFRyYWNrZXIgcHJvdmlkZXJcbiAqICBmdW5jdGlvbiBFdmVudFRyYWNrZXJQcm92aWRlcigpIHtcbiAqICAgIHZhciB0cmFja2luZ1VybCA9ICcvdHJhY2snO1xuICpcbiAqICAgIC8vIEEgcHJvdmlkZXIgbWV0aG9kIGZvciBjb25maWd1cmluZyB3aGVyZSB0aGUgdHJhY2tlZCBldmVudHMgc2hvdWxkIGJlZW4gc2F2ZWRcbiAqICAgIHRoaXMuc2V0VHJhY2tpbmdVcmwgPSBmdW5jdGlvbih1cmwpIHtcbiAqICAgICAgdHJhY2tpbmdVcmwgPSB1cmw7XG4gKiAgICB9O1xuICpcbiAqICAgIC8vIFRoZSBzZXJ2aWNlIGZhY3RvcnkgZnVuY3Rpb25cbiAqICAgIHRoaXMuJGdldCA9IFsnJGh0dHAnLCBmdW5jdGlvbigkaHR0cCkge1xuICogICAgICB2YXIgdHJhY2tlZEV2ZW50cyA9IHt9O1xuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC8vIENhbGwgdGhpcyB0byB0cmFjayBhbiBldmVudFxuICogICAgICAgIGV2ZW50OiBmdW5jdGlvbihldmVudCkge1xuICogICAgICAgICAgdmFyIGNvdW50ID0gdHJhY2tlZEV2ZW50c1tldmVudF0gfHwgMDtcbiAqICAgICAgICAgIGNvdW50ICs9IDE7XG4gKiAgICAgICAgICB0cmFja2VkRXZlbnRzW2V2ZW50XSA9IGNvdW50O1xuICogICAgICAgICAgcmV0dXJuIGNvdW50O1xuICogICAgICAgIH0sXG4gKiAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIHNhdmUgdGhlIHRyYWNrZWQgZXZlbnRzIHRvIHRoZSB0cmFja2luZ1VybFxuICogICAgICAgIHNhdmU6IGZ1bmN0aW9uKCkge1xuICogICAgICAgICAgJGh0dHAucG9zdCh0cmFja2luZ1VybCwgdHJhY2tlZEV2ZW50cyk7XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogICAgfV07XG4gKiAgfVxuICpcbiAqICBkZXNjcmliZSgnZXZlbnRUcmFja2VyJywgZnVuY3Rpb24oKSB7XG4gKiAgICB2YXIgcG9zdFNweTtcbiAqXG4gKiAgICBiZWZvcmVFYWNoKG1vZHVsZShmdW5jdGlvbigkcHJvdmlkZSkge1xuICogICAgICAvLyBSZWdpc3RlciB0aGUgZXZlbnRUcmFja2VyIHByb3ZpZGVyXG4gKiAgICAgICRwcm92aWRlLnByb3ZpZGVyKCdldmVudFRyYWNrZXInLCBFdmVudFRyYWNrZXJQcm92aWRlcik7XG4gKiAgICB9KSk7XG4gKlxuICogICAgYmVmb3JlRWFjaChtb2R1bGUoZnVuY3Rpb24oZXZlbnRUcmFja2VyUHJvdmlkZXIpIHtcbiAqICAgICAgLy8gQ29uZmlndXJlIGV2ZW50VHJhY2tlciBwcm92aWRlclxuICogICAgICBldmVudFRyYWNrZXJQcm92aWRlci5zZXRUcmFja2luZ1VybCgnL2N1c3RvbS10cmFjaycpO1xuICogICAgfSkpO1xuICpcbiAqICAgIGl0KCd0cmFja3MgZXZlbnRzJywgaW5qZWN0KGZ1bmN0aW9uKGV2ZW50VHJhY2tlcikge1xuICogICAgICBleHBlY3QoZXZlbnRUcmFja2VyLmV2ZW50KCdsb2dpbicpKS50b0VxdWFsKDEpO1xuICogICAgICBleHBlY3QoZXZlbnRUcmFja2VyLmV2ZW50KCdsb2dpbicpKS50b0VxdWFsKDIpO1xuICogICAgfSkpO1xuICpcbiAqICAgIGl0KCdzYXZlcyB0byB0aGUgdHJhY2tpbmcgdXJsJywgaW5qZWN0KGZ1bmN0aW9uKGV2ZW50VHJhY2tlciwgJGh0dHApIHtcbiAqICAgICAgcG9zdFNweSA9IHNweU9uKCRodHRwLCAncG9zdCcpO1xuICogICAgICBldmVudFRyYWNrZXIuZXZlbnQoJ2xvZ2luJyk7XG4gKiAgICAgIGV2ZW50VHJhY2tlci5zYXZlKCk7XG4gKiAgICAgIGV4cGVjdChwb3N0U3B5KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gKiAgICAgIGV4cGVjdChwb3N0U3B5Lm1vc3RSZWNlbnRDYWxsLmFyZ3NbMF0pLm5vdC50b0VxdWFsKCcvdHJhY2snKTtcbiAqICAgICAgZXhwZWN0KHBvc3RTcHkubW9zdFJlY2VudENhbGwuYXJnc1swXSkudG9FcXVhbCgnL2N1c3RvbS10cmFjaycpO1xuICogICAgICBleHBlY3QocG9zdFNweS5tb3N0UmVjZW50Q2FsbC5hcmdzWzFdKS50b0VxdWFsKHsgJ2xvZ2luJzogMSB9KTtcbiAqICAgIH0pKTtcbiAqICB9KTtcbiAqIGBgYFxuICovXG5cbi8qKlxuICogQG5nZG9jIG1ldGhvZFxuICogQG5hbWUgJHByb3ZpZGUjZmFjdG9yeVxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogUmVnaXN0ZXIgYSAqKnNlcnZpY2UgZmFjdG9yeSoqLCB3aGljaCB3aWxsIGJlIGNhbGxlZCB0byByZXR1cm4gdGhlIHNlcnZpY2UgaW5zdGFuY2UuXG4gKiBUaGlzIGlzIHNob3J0IGZvciByZWdpc3RlcmluZyBhIHNlcnZpY2Ugd2hlcmUgaXRzIHByb3ZpZGVyIGNvbnNpc3RzIG9mIG9ubHkgYSBgJGdldGAgcHJvcGVydHksXG4gKiB3aGljaCBpcyB0aGUgZ2l2ZW4gc2VydmljZSBmYWN0b3J5IGZ1bmN0aW9uLlxuICogWW91IHNob3VsZCB1c2Uge0BsaW5rIGF1dG8uJHByb3ZpZGUjZmFjdG9yeSAkcHJvdmlkZS5mYWN0b3J5KGdldEZuKX0gaWYgeW91IGRvIG5vdCBuZWVkIHRvXG4gKiBjb25maWd1cmUgeW91ciBzZXJ2aWNlIGluIGEgcHJvdmlkZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlLlxuICogQHBhcmFtIHtmdW5jdGlvbigpfSAkZ2V0Rm4gVGhlICRnZXRGbiBmb3IgdGhlIGluc3RhbmNlIGNyZWF0aW9uLiBJbnRlcm5hbGx5IHRoaXMgaXMgYSBzaG9ydCBoYW5kXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYCRwcm92aWRlLnByb3ZpZGVyKG5hbWUsIHskZ2V0OiAkZ2V0Rm59KWAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSByZWdpc3RlcmVkIHByb3ZpZGVyIGluc3RhbmNlXG4gKlxuICogQGV4YW1wbGVcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiByZWdpc3RlcmluZyBhIHNlcnZpY2VcbiAqIGBgYGpzXG4gKiAgICRwcm92aWRlLmZhY3RvcnkoJ3BpbmcnLCBbJyRodHRwJywgZnVuY3Rpb24oJGh0dHApIHtcbiAqICAgICByZXR1cm4gZnVuY3Rpb24gcGluZygpIHtcbiAqICAgICAgIHJldHVybiAkaHR0cC5zZW5kKCcvcGluZycpO1xuICogICAgIH07XG4gKiAgIH1dKTtcbiAqIGBgYFxuICogWW91IHdvdWxkIHRoZW4gaW5qZWN0IGFuZCB1c2UgdGhpcyBzZXJ2aWNlIGxpa2UgdGhpczpcbiAqIGBgYGpzXG4gKiAgIHNvbWVNb2R1bGUuY29udHJvbGxlcignQ3RybCcsIFsncGluZycsIGZ1bmN0aW9uKHBpbmcpIHtcbiAqICAgICBwaW5nKCk7XG4gKiAgIH1dKTtcbiAqIGBgYFxuICovXG5cblxuLyoqXG4gKiBAbmdkb2MgbWV0aG9kXG4gKiBAbmFtZSAkcHJvdmlkZSNzZXJ2aWNlXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBSZWdpc3RlciBhICoqc2VydmljZSBjb25zdHJ1Y3RvcioqLCB3aGljaCB3aWxsIGJlIGludm9rZWQgd2l0aCBgbmV3YCB0byBjcmVhdGUgdGhlIHNlcnZpY2VcbiAqIGluc3RhbmNlLlxuICogVGhpcyBpcyBzaG9ydCBmb3IgcmVnaXN0ZXJpbmcgYSBzZXJ2aWNlIHdoZXJlIGl0cyBwcm92aWRlcidzIGAkZ2V0YCBwcm9wZXJ0eSBpcyB0aGUgc2VydmljZVxuICogY29uc3RydWN0b3IgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gaW5zdGFudGlhdGUgdGhlIHNlcnZpY2UgaW5zdGFuY2UuXG4gKlxuICogWW91IHNob3VsZCB1c2Uge0BsaW5rIGF1dG8uJHByb3ZpZGUjc2VydmljZSAkcHJvdmlkZS5zZXJ2aWNlKGNsYXNzKX0gaWYgeW91IGRlZmluZSB5b3VyIHNlcnZpY2VcbiAqIGFzIGEgdHlwZS9jbGFzcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25zdHJ1Y3RvciBBIGNsYXNzIChjb25zdHJ1Y3RvciBmdW5jdGlvbikgdGhhdCB3aWxsIGJlIGluc3RhbnRpYXRlZC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlZ2lzdGVyZWQgcHJvdmlkZXIgaW5zdGFuY2VcbiAqXG4gKiBAZXhhbXBsZVxuICogSGVyZSBpcyBhbiBleGFtcGxlIG9mIHJlZ2lzdGVyaW5nIGEgc2VydmljZSB1c2luZ1xuICoge0BsaW5rIGF1dG8uJHByb3ZpZGUjc2VydmljZSAkcHJvdmlkZS5zZXJ2aWNlKGNsYXNzKX0uXG4gKiBgYGBqc1xuICogICB2YXIgUGluZyA9IGZ1bmN0aW9uKCRodHRwKSB7XG4gKiAgICAgdGhpcy4kaHR0cCA9ICRodHRwO1xuICogICB9O1xuICpcbiAqICAgUGluZy4kaW5qZWN0ID0gWyckaHR0cCddO1xuICpcbiAqICAgUGluZy5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uKCkge1xuICogICAgIHJldHVybiB0aGlzLiRodHRwLmdldCgnL3BpbmcnKTtcbiAqICAgfTtcbiAqICAgJHByb3ZpZGUuc2VydmljZSgncGluZycsIFBpbmcpO1xuICogYGBgXG4gKiBZb3Ugd291bGQgdGhlbiBpbmplY3QgYW5kIHVzZSB0aGlzIHNlcnZpY2UgbGlrZSB0aGlzOlxuICogYGBganNcbiAqICAgc29tZU1vZHVsZS5jb250cm9sbGVyKCdDdHJsJywgWydwaW5nJywgZnVuY3Rpb24ocGluZykge1xuICogICAgIHBpbmcuc2VuZCgpO1xuICogICB9XSk7XG4gKiBgYGBcbiAqL1xuXG5cbi8qKlxuICogQG5nZG9jIG1ldGhvZFxuICogQG5hbWUgJHByb3ZpZGUjdmFsdWVcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIFJlZ2lzdGVyIGEgKip2YWx1ZSBzZXJ2aWNlKiogd2l0aCB0aGUge0BsaW5rIGF1dG8uJGluamVjdG9yICRpbmplY3Rvcn0sIHN1Y2ggYXMgYSBzdHJpbmcsIGFcbiAqIG51bWJlciwgYW4gYXJyYXksIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uLiAgVGhpcyBpcyBzaG9ydCBmb3IgcmVnaXN0ZXJpbmcgYSBzZXJ2aWNlIHdoZXJlIGl0c1xuICogcHJvdmlkZXIncyBgJGdldGAgcHJvcGVydHkgaXMgYSBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQgdGFrZXMgbm8gYXJndW1lbnRzIGFuZCByZXR1cm5zIHRoZSAqKnZhbHVlXG4gKiBzZXJ2aWNlKiouXG4gKlxuICogVmFsdWUgc2VydmljZXMgYXJlIHNpbWlsYXIgdG8gY29uc3RhbnQgc2VydmljZXMsIGV4Y2VwdCB0aGF0IHRoZXkgY2Fubm90IGJlIGluamVjdGVkIGludG8gYVxuICogbW9kdWxlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gKHNlZSB7QGxpbmsgYW5ndWxhci5Nb2R1bGUjY29uZmlnfSkgYnV0IHRoZXkgY2FuIGJlIG92ZXJyaWRkZW4gYnlcbiAqIGFuIEFuZ3VsYXJcbiAqIHtAbGluayBhdXRvLiRwcm92aWRlI2RlY29yYXRvciBkZWNvcmF0b3J9LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlLlxuICogQHJldHVybnMge09iamVjdH0gcmVnaXN0ZXJlZCBwcm92aWRlciBpbnN0YW5jZVxuICpcbiAqIEBleGFtcGxlXG4gKiBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIGNyZWF0aW5nIHZhbHVlIHNlcnZpY2VzLlxuICogYGBganNcbiAqICAgJHByb3ZpZGUudmFsdWUoJ0FETUlOX1VTRVInLCAnYWRtaW4nKTtcbiAqXG4gKiAgICRwcm92aWRlLnZhbHVlKCdSb2xlTG9va3VwJywgeyBhZG1pbjogMCwgd3JpdGVyOiAxLCByZWFkZXI6IDIgfSk7XG4gKlxuICogICAkcHJvdmlkZS52YWx1ZSgnaGFsZk9mJywgZnVuY3Rpb24odmFsdWUpIHtcbiAqICAgICByZXR1cm4gdmFsdWUgLyAyO1xuICogICB9KTtcbiAqIGBgYFxuICovXG5cblxuLyoqXG4gKiBAbmdkb2MgbWV0aG9kXG4gKiBAbmFtZSAkcHJvdmlkZSNjb25zdGFudFxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogUmVnaXN0ZXIgYSAqKmNvbnN0YW50IHNlcnZpY2UqKiwgc3VjaCBhcyBhIHN0cmluZywgYSBudW1iZXIsIGFuIGFycmF5LCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbixcbiAqIHdpdGggdGhlIHtAbGluayBhdXRvLiRpbmplY3RvciAkaW5qZWN0b3J9LiBVbmxpa2Uge0BsaW5rIGF1dG8uJHByb3ZpZGUjdmFsdWUgdmFsdWV9IGl0IGNhbiBiZVxuICogaW5qZWN0ZWQgaW50byBhIG1vZHVsZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uIChzZWUge0BsaW5rIGFuZ3VsYXIuTW9kdWxlI2NvbmZpZ30pIGFuZCBpdCBjYW5ub3RcbiAqIGJlIG92ZXJyaWRkZW4gYnkgYW4gQW5ndWxhciB7QGxpbmsgYXV0by4kcHJvdmlkZSNkZWNvcmF0b3IgZGVjb3JhdG9yfS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY29uc3RhbnQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBjb25zdGFudCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlZ2lzdGVyZWQgaW5zdGFuY2VcbiAqXG4gKiBAZXhhbXBsZVxuICogSGVyZSBhIHNvbWUgZXhhbXBsZXMgb2YgY3JlYXRpbmcgY29uc3RhbnRzOlxuICogYGBganNcbiAqICAgJHByb3ZpZGUuY29uc3RhbnQoJ1NIQVJEX0hFSUdIVCcsIDMwNik7XG4gKlxuICogICAkcHJvdmlkZS5jb25zdGFudCgnTVlfQ09MT1VSUycsIFsncmVkJywgJ2JsdWUnLCAnZ3JleSddKTtcbiAqXG4gKiAgICRwcm92aWRlLmNvbnN0YW50KCdkb3VibGUnLCBmdW5jdGlvbih2YWx1ZSkge1xuICogICAgIHJldHVybiB2YWx1ZSAqIDI7XG4gKiAgIH0pO1xuICogYGBgXG4gKi9cblxuXG4vKipcbiAqIEBuZ2RvYyBtZXRob2RcbiAqIEBuYW1lICRwcm92aWRlI2RlY29yYXRvclxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogUmVnaXN0ZXIgYSAqKnNlcnZpY2UgZGVjb3JhdG9yKiogd2l0aCB0aGUge0BsaW5rIGF1dG8uJGluamVjdG9yICRpbmplY3Rvcn0uIEEgc2VydmljZSBkZWNvcmF0b3JcbiAqIGludGVyY2VwdHMgdGhlIGNyZWF0aW9uIG9mIGEgc2VydmljZSwgYWxsb3dpbmcgaXQgdG8gb3ZlcnJpZGUgb3IgbW9kaWZ5IHRoZSBiZWhhdmlvdXIgb2YgdGhlXG4gKiBzZXJ2aWNlLiBUaGUgb2JqZWN0IHJldHVybmVkIGJ5IHRoZSBkZWNvcmF0b3IgbWF5IGJlIHRoZSBvcmlnaW5hbCBzZXJ2aWNlLCBvciBhIG5ldyBzZXJ2aWNlXG4gKiBvYmplY3Qgd2hpY2ggcmVwbGFjZXMgb3Igd3JhcHMgYW5kIGRlbGVnYXRlcyB0byB0aGUgb3JpZ2luYWwgc2VydmljZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgc2VydmljZSB0byBkZWNvcmF0ZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gZGVjb3JhdG9yIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIHdoZW4gdGhlIHNlcnZpY2UgbmVlZHMgdG8gYmVcbiAqICAgIGluc3RhbnRpYXRlZCBhbmQgc2hvdWxkIHJldHVybiB0aGUgZGVjb3JhdGVkIHNlcnZpY2UgaW5zdGFuY2UuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgdXNpbmdcbiAqICAgIHRoZSB7QGxpbmsgYXV0by4kaW5qZWN0b3IjaW52b2tlIGluamVjdG9yLmludm9rZX0gbWV0aG9kIGFuZCBpcyB0aGVyZWZvcmUgZnVsbHkgaW5qZWN0YWJsZS5cbiAqICAgIExvY2FsIGluamVjdGlvbiBhcmd1bWVudHM6XG4gKlxuICogICAgKiBgJGRlbGVnYXRlYCAtIFRoZSBvcmlnaW5hbCBzZXJ2aWNlIGluc3RhbmNlLCB3aGljaCBjYW4gYmUgbW9ua2V5IHBhdGNoZWQsIGNvbmZpZ3VyZWQsXG4gKiAgICAgIGRlY29yYXRlZCBvciBkZWxlZ2F0ZWQgdG8uXG4gKlxuICogQGV4YW1wbGVcbiAqIEhlcmUgd2UgZGVjb3JhdGUgdGhlIHtAbGluayBuZy4kbG9nICRsb2d9IHNlcnZpY2UgdG8gY29udmVydCB3YXJuaW5ncyB0byBlcnJvcnMgYnkgaW50ZXJjZXB0aW5nXG4gKiBjYWxscyB0byB7QGxpbmsgbmcuJGxvZyNlcnJvciAkbG9nLndhcm4oKX0uXG4gKiBgYGBqc1xuICogICAkcHJvdmlkZS5kZWNvcmF0b3IoJyRsb2cnLCBbJyRkZWxlZ2F0ZScsIGZ1bmN0aW9uKCRkZWxlZ2F0ZSkge1xuICogICAgICRkZWxlZ2F0ZS53YXJuID0gJGRlbGVnYXRlLmVycm9yO1xuICogICAgIHJldHVybiAkZGVsZWdhdGU7XG4gKiAgIH1dKTtcbiAqIGBgYFxuICovXG5cblxuZnVuY3Rpb24gY3JlYXRlSW5qZWN0b3IobW9kdWxlc1RvTG9hZCwgc3RyaWN0RGkpIHtcbiAgc3RyaWN0RGkgPSAoc3RyaWN0RGkgPT09IHRydWUpO1xuICB2YXIgSU5TVEFOVElBVElORyA9IHt9LFxuICAgICAgcHJvdmlkZXJTdWZmaXggPSAnUHJvdmlkZXInLFxuICAgICAgcGF0aCA9IFtdLFxuICAgICAgbG9hZGVkTW9kdWxlcyA9IG5ldyBIYXNoTWFwKFtdLCB0cnVlKSxcbiAgICAgIHByb3ZpZGVyQ2FjaGUgPSB7XG4gICAgICAgICRwcm92aWRlOiB7XG4gICAgICAgICAgICBwcm92aWRlcjogc3VwcG9ydE9iamVjdChwcm92aWRlciksXG4gICAgICAgICAgICBmYWN0b3J5OiBzdXBwb3J0T2JqZWN0KGZhY3RvcnkpLFxuICAgICAgICAgICAgc2VydmljZTogc3VwcG9ydE9iamVjdChzZXJ2aWNlKSxcbiAgICAgICAgICAgIHZhbHVlOiBzdXBwb3J0T2JqZWN0KHZhbHVlKSxcbiAgICAgICAgICAgIGNvbnN0YW50OiBzdXBwb3J0T2JqZWN0KGNvbnN0YW50KSxcbiAgICAgICAgICAgIGRlY29yYXRvcjogZGVjb3JhdG9yXG4gICAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHByb3ZpZGVySW5qZWN0b3IgPSAocHJvdmlkZXJDYWNoZS4kaW5qZWN0b3IgPVxuICAgICAgICAgIGNyZWF0ZUludGVybmFsSW5qZWN0b3IocHJvdmlkZXJDYWNoZSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aHJvdyAkaW5qZWN0b3JNaW5FcnIoJ3VucHInLCBcIlVua25vd24gcHJvdmlkZXI6IHswfVwiLCBwYXRoLmpvaW4oJyA8LSAnKSk7XG4gICAgICAgICAgfSkpLFxuICAgICAgaW5zdGFuY2VDYWNoZSA9IHt9LFxuICAgICAgaW5zdGFuY2VJbmplY3RvciA9IChpbnN0YW5jZUNhY2hlLiRpbmplY3RvciA9XG4gICAgICAgICAgY3JlYXRlSW50ZXJuYWxJbmplY3RvcihpbnN0YW5jZUNhY2hlLCBmdW5jdGlvbihzZXJ2aWNlbmFtZSkge1xuICAgICAgICAgICAgdmFyIHByb3ZpZGVyID0gcHJvdmlkZXJJbmplY3Rvci5nZXQoc2VydmljZW5hbWUgKyBwcm92aWRlclN1ZmZpeCk7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2VJbmplY3Rvci5pbnZva2UocHJvdmlkZXIuJGdldCwgcHJvdmlkZXIsIHVuZGVmaW5lZCwgc2VydmljZW5hbWUpO1xuICAgICAgICAgIH0pKTtcblxuXG4gIGZvckVhY2gobG9hZE1vZHVsZXMobW9kdWxlc1RvTG9hZCksIGZ1bmN0aW9uKGZuKSB7IGluc3RhbmNlSW5qZWN0b3IuaW52b2tlKGZuIHx8IG5vb3ApOyB9KTtcblxuICByZXR1cm4gaW5zdGFuY2VJbmplY3RvcjtcblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gJHByb3ZpZGVyXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIHN1cHBvcnRPYmplY3QoZGVsZWdhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkpIHtcbiAgICAgICAgZm9yRWFjaChrZXksIHJldmVyc2VQYXJhbXMoZGVsZWdhdGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWxlZ2F0ZShrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvdmlkZXIobmFtZSwgcHJvdmlkZXJfKSB7XG4gICAgYXNzZXJ0Tm90SGFzT3duUHJvcGVydHkobmFtZSwgJ3NlcnZpY2UnKTtcbiAgICBpZiAoaXNGdW5jdGlvbihwcm92aWRlcl8pIHx8IGlzQXJyYXkocHJvdmlkZXJfKSkge1xuICAgICAgcHJvdmlkZXJfID0gcHJvdmlkZXJJbmplY3Rvci5pbnN0YW50aWF0ZShwcm92aWRlcl8pO1xuICAgIH1cbiAgICBpZiAoIXByb3ZpZGVyXy4kZ2V0KSB7XG4gICAgICB0aHJvdyAkaW5qZWN0b3JNaW5FcnIoJ3BnZXQnLCBcIlByb3ZpZGVyICd7MH0nIG11c3QgZGVmaW5lICRnZXQgZmFjdG9yeSBtZXRob2QuXCIsIG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvdmlkZXJDYWNoZVtuYW1lICsgcHJvdmlkZXJTdWZmaXhdID0gcHJvdmlkZXJfO1xuICB9XG5cbiAgZnVuY3Rpb24gZW5mb3JjZVJldHVyblZhbHVlKG5hbWUsIGZhY3RvcnkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZW5mb3JjZWRSZXR1cm5WYWx1ZSgpIHtcbiAgICAgIHZhciByZXN1bHQgPSBpbnN0YW5jZUluamVjdG9yLmludm9rZShmYWN0b3J5LCB0aGlzLCB1bmRlZmluZWQsIG5hbWUpO1xuICAgICAgaWYgKGlzVW5kZWZpbmVkKHJlc3VsdCkpIHtcbiAgICAgICAgdGhyb3cgJGluamVjdG9yTWluRXJyKCd1bmRlZicsIFwiUHJvdmlkZXIgJ3swfScgbXVzdCByZXR1cm4gYSB2YWx1ZSBmcm9tICRnZXQgZmFjdG9yeSBtZXRob2QuXCIsIG5hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZmFjdG9yeShuYW1lLCBmYWN0b3J5Rm4sIGVuZm9yY2UpIHtcbiAgICByZXR1cm4gcHJvdmlkZXIobmFtZSwge1xuICAgICAgJGdldDogZW5mb3JjZSAhPT0gZmFsc2UgPyBlbmZvcmNlUmV0dXJuVmFsdWUobmFtZSwgZmFjdG9yeUZuKSA6IGZhY3RvcnlGblxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VydmljZShuYW1lLCBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBmYWN0b3J5KG5hbWUsIFsnJGluamVjdG9yJywgZnVuY3Rpb24oJGluamVjdG9yKSB7XG4gICAgICByZXR1cm4gJGluamVjdG9yLmluc3RhbnRpYXRlKGNvbnN0cnVjdG9yKTtcbiAgICB9XSk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWx1ZShuYW1lLCB2YWwpIHsgcmV0dXJuIGZhY3RvcnkobmFtZSwgdmFsdWVGbih2YWwpLCBmYWxzZSk7IH1cblxuICBmdW5jdGlvbiBjb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICAgIGFzc2VydE5vdEhhc093blByb3BlcnR5KG5hbWUsICdjb25zdGFudCcpO1xuICAgIHByb3ZpZGVyQ2FjaGVbbmFtZV0gPSB2YWx1ZTtcbiAgICBpbnN0YW5jZUNhY2hlW25hbWVdID0gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvcmF0b3Ioc2VydmljZU5hbWUsIGRlY29yRm4pIHtcbiAgICB2YXIgb3JpZ1Byb3ZpZGVyID0gcHJvdmlkZXJJbmplY3Rvci5nZXQoc2VydmljZU5hbWUgKyBwcm92aWRlclN1ZmZpeCksXG4gICAgICAgIG9yaWckZ2V0ID0gb3JpZ1Byb3ZpZGVyLiRnZXQ7XG5cbiAgICBvcmlnUHJvdmlkZXIuJGdldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9yaWdJbnN0YW5jZSA9IGluc3RhbmNlSW5qZWN0b3IuaW52b2tlKG9yaWckZ2V0LCBvcmlnUHJvdmlkZXIpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlSW5qZWN0b3IuaW52b2tlKGRlY29yRm4sIG51bGwsIHskZGVsZWdhdGU6IG9yaWdJbnN0YW5jZX0pO1xuICAgIH07XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gTW9kdWxlIExvYWRpbmdcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIGZ1bmN0aW9uIGxvYWRNb2R1bGVzKG1vZHVsZXNUb0xvYWQpIHtcbiAgICB2YXIgcnVuQmxvY2tzID0gW10sIG1vZHVsZUZuO1xuICAgIGZvckVhY2gobW9kdWxlc1RvTG9hZCwgZnVuY3Rpb24obW9kdWxlKSB7XG4gICAgICBpZiAobG9hZGVkTW9kdWxlcy5nZXQobW9kdWxlKSkgcmV0dXJuO1xuICAgICAgbG9hZGVkTW9kdWxlcy5wdXQobW9kdWxlLCB0cnVlKTtcblxuICAgICAgZnVuY3Rpb24gcnVuSW52b2tlUXVldWUocXVldWUpIHtcbiAgICAgICAgdmFyIGksIGlpO1xuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHF1ZXVlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICB2YXIgaW52b2tlQXJncyA9IHF1ZXVlW2ldLFxuICAgICAgICAgICAgICBwcm92aWRlciA9IHByb3ZpZGVySW5qZWN0b3IuZ2V0KGludm9rZUFyZ3NbMF0pO1xuXG4gICAgICAgICAgcHJvdmlkZXJbaW52b2tlQXJnc1sxXV0uYXBwbHkocHJvdmlkZXIsIGludm9rZUFyZ3NbMl0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChpc1N0cmluZyhtb2R1bGUpKSB7XG4gICAgICAgICAgbW9kdWxlRm4gPSBhbmd1bGFyTW9kdWxlKG1vZHVsZSk7XG4gICAgICAgICAgcnVuQmxvY2tzID0gcnVuQmxvY2tzLmNvbmNhdChsb2FkTW9kdWxlcyhtb2R1bGVGbi5yZXF1aXJlcykpLmNvbmNhdChtb2R1bGVGbi5fcnVuQmxvY2tzKTtcbiAgICAgICAgICBydW5JbnZva2VRdWV1ZShtb2R1bGVGbi5faW52b2tlUXVldWUpO1xuICAgICAgICAgIHJ1bkludm9rZVF1ZXVlKG1vZHVsZUZuLl9jb25maWdCbG9ja3MpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24obW9kdWxlKSkge1xuICAgICAgICAgICAgcnVuQmxvY2tzLnB1c2gocHJvdmlkZXJJbmplY3Rvci5pbnZva2UobW9kdWxlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShtb2R1bGUpKSB7XG4gICAgICAgICAgICBydW5CbG9ja3MucHVzaChwcm92aWRlckluamVjdG9yLmludm9rZShtb2R1bGUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhc3NlcnRBcmdGbihtb2R1bGUsICdtb2R1bGUnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaXNBcnJheShtb2R1bGUpKSB7XG4gICAgICAgICAgbW9kdWxlID0gbW9kdWxlW21vZHVsZS5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZS5tZXNzYWdlICYmIGUuc3RhY2sgJiYgZS5zdGFjay5pbmRleE9mKGUubWVzc2FnZSkgPT0gLTEpIHtcbiAgICAgICAgICAvLyBTYWZhcmkgJiBGRidzIHN0YWNrIHRyYWNlcyBkb24ndCBjb250YWluIGVycm9yLm1lc3NhZ2UgY29udGVudFxuICAgICAgICAgIC8vIHVubGlrZSB0aG9zZSBvZiBDaHJvbWUgYW5kIElFXG4gICAgICAgICAgLy8gU28gaWYgc3RhY2sgZG9lc24ndCBjb250YWluIG1lc3NhZ2UsIHdlIGNyZWF0ZSBhIG5ldyBzdHJpbmcgdGhhdCBjb250YWlucyBib3RoLlxuICAgICAgICAgIC8vIFNpbmNlIGVycm9yLnN0YWNrIGlzIHJlYWQtb25seSBpbiBTYWZhcmksIEknbSBvdmVycmlkaW5nIGUgYW5kIG5vdCBlLnN0YWNrIGhlcmUuXG4gICAgICAgICAgLyoganNoaW50IC1XMDIyICovXG4gICAgICAgICAgZSA9IGUubWVzc2FnZSArICdcXG4nICsgZS5zdGFjaztcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyAkaW5qZWN0b3JNaW5FcnIoJ21vZHVsZXJyJywgXCJGYWlsZWQgdG8gaW5zdGFudGlhdGUgbW9kdWxlIHswfSBkdWUgdG86XFxuezF9XCIsXG4gICAgICAgICAgICAgICAgICBtb2R1bGUsIGUuc3RhY2sgfHwgZS5tZXNzYWdlIHx8IGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBydW5CbG9ja3M7XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gaW50ZXJuYWwgSW5qZWN0b3JcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gY3JlYXRlSW50ZXJuYWxJbmplY3RvcihjYWNoZSwgZmFjdG9yeSkge1xuXG4gICAgZnVuY3Rpb24gZ2V0U2VydmljZShzZXJ2aWNlTmFtZSkge1xuICAgICAgaWYgKGNhY2hlLmhhc093blByb3BlcnR5KHNlcnZpY2VOYW1lKSkge1xuICAgICAgICBpZiAoY2FjaGVbc2VydmljZU5hbWVdID09PSBJTlNUQU5USUFUSU5HKSB7XG4gICAgICAgICAgdGhyb3cgJGluamVjdG9yTWluRXJyKCdjZGVwJywgJ0NpcmN1bGFyIGRlcGVuZGVuY3kgZm91bmQ6IHswfScsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2VOYW1lICsgJyA8LSAnICsgcGF0aC5qb2luKCcgPC0gJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWNoZVtzZXJ2aWNlTmFtZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhdGgudW5zaGlmdChzZXJ2aWNlTmFtZSk7XG4gICAgICAgICAgY2FjaGVbc2VydmljZU5hbWVdID0gSU5TVEFOVElBVElORztcbiAgICAgICAgICByZXR1cm4gY2FjaGVbc2VydmljZU5hbWVdID0gZmFjdG9yeShzZXJ2aWNlTmFtZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChjYWNoZVtzZXJ2aWNlTmFtZV0gPT09IElOU1RBTlRJQVRJTkcpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjYWNoZVtzZXJ2aWNlTmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBwYXRoLnNoaWZ0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZva2UoZm4sIHNlbGYsIGxvY2Fscywgc2VydmljZU5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgbG9jYWxzID09PSAnc3RyaW5nJykge1xuICAgICAgICBzZXJ2aWNlTmFtZSA9IGxvY2FscztcbiAgICAgICAgbG9jYWxzID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAkaW5qZWN0ID0gYW5ub3RhdGUoZm4sIHN0cmljdERpLCBzZXJ2aWNlTmFtZSksXG4gICAgICAgICAgbGVuZ3RoLCBpLFxuICAgICAgICAgIGtleTtcblxuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gJGluamVjdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBrZXkgPSAkaW5qZWN0W2ldO1xuICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyAkaW5qZWN0b3JNaW5FcnIoJ2l0a24nLFxuICAgICAgICAgICAgICAgICAgJ0luY29ycmVjdCBpbmplY3Rpb24gdG9rZW4hIEV4cGVjdGVkIHNlcnZpY2UgbmFtZSBhcyBzdHJpbmcsIGdvdCB7MH0nLCBrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGFyZ3MucHVzaChcbiAgICAgICAgICBsb2NhbHMgJiYgbG9jYWxzLmhhc093blByb3BlcnR5KGtleSlcbiAgICAgICAgICA/IGxvY2Fsc1trZXldXG4gICAgICAgICAgOiBnZXRTZXJ2aWNlKGtleSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5KGZuKSkge1xuICAgICAgICBmbiA9IGZuW2xlbmd0aF07XG4gICAgICB9XG5cbiAgICAgIC8vIGh0dHA6Ly9qc3BlcmYuY29tL2FuZ3VsYXJqcy1pbnZva2UtYXBwbHktdnMtc3dpdGNoXG4gICAgICAvLyAjNTM4OFxuICAgICAgcmV0dXJuIGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbnRpYXRlKFR5cGUsIGxvY2Fscywgc2VydmljZU5hbWUpIHtcbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uKCkge30sXG4gICAgICAgICAgaW5zdGFuY2UsIHJldHVybmVkVmFsdWU7XG5cbiAgICAgIC8vIENoZWNrIGlmIFR5cGUgaXMgYW5ub3RhdGVkIGFuZCB1c2UganVzdCB0aGUgZ2l2ZW4gZnVuY3Rpb24gYXQgbi0xIGFzIHBhcmFtZXRlclxuICAgICAgLy8gZS5nLiBzb21lTW9kdWxlLmZhY3RvcnkoJ2dyZWV0ZXInLCBbJyR3aW5kb3cnLCBmdW5jdGlvbihyZW5hbWVkJHdpbmRvdykge31dKTtcbiAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IChpc0FycmF5KFR5cGUpID8gVHlwZVtUeXBlLmxlbmd0aCAtIDFdIDogVHlwZSkucHJvdG90eXBlO1xuICAgICAgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgIHJldHVybmVkVmFsdWUgPSBpbnZva2UoVHlwZSwgaW5zdGFuY2UsIGxvY2Fscywgc2VydmljZU5hbWUpO1xuXG4gICAgICByZXR1cm4gaXNPYmplY3QocmV0dXJuZWRWYWx1ZSkgfHwgaXNGdW5jdGlvbihyZXR1cm5lZFZhbHVlKSA/IHJldHVybmVkVmFsdWUgOiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW52b2tlOiBpbnZva2UsXG4gICAgICBpbnN0YW50aWF0ZTogaW5zdGFudGlhdGUsXG4gICAgICBnZXQ6IGdldFNlcnZpY2UsXG4gICAgICBhbm5vdGF0ZTogYW5ub3RhdGUsXG4gICAgICBoYXM6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyQ2FjaGUuaGFzT3duUHJvcGVydHkobmFtZSArIHByb3ZpZGVyU3VmZml4KSB8fCBjYWNoZS5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmNyZWF0ZUluamVjdG9yLiQkYW5ub3RhdGUgPSBhbm5vdGF0ZTtcblxuLyoqXG4gKiBAbmdkb2MgcHJvdmlkZXJcbiAqIEBuYW1lICRhbmNob3JTY3JvbGxQcm92aWRlclxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVXNlIGAkYW5jaG9yU2Nyb2xsUHJvdmlkZXJgIHRvIGRpc2FibGUgYXV0b21hdGljIHNjcm9sbGluZyB3aGVuZXZlclxuICoge0BsaW5rIG5nLiRsb2NhdGlvbiNoYXNoICRsb2NhdGlvbi5oYXNoKCl9IGNoYW5nZXMuXG4gKi9cbmZ1bmN0aW9uICRBbmNob3JTY3JvbGxQcm92aWRlcigpIHtcblxuICB2YXIgYXV0b1Njcm9sbGluZ0VuYWJsZWQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAbmdkb2MgbWV0aG9kXG4gICAqIEBuYW1lICRhbmNob3JTY3JvbGxQcm92aWRlciNkaXNhYmxlQXV0b1Njcm9sbGluZ1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQnkgZGVmYXVsdCwge0BsaW5rIG5nLiRhbmNob3JTY3JvbGwgJGFuY2hvclNjcm9sbCgpfSB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGNoYW5nZXMgdG9cbiAgICoge0BsaW5rIG5nLiRsb2NhdGlvbiNoYXNoICRsb2NhdGlvbi5oYXNoKCl9IGFuZCBzY3JvbGwgdG8gdGhlIGVsZW1lbnQgbWF0Y2hpbmcgdGhlIG5ldyBoYXNoLjxiciAvPlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gZGlzYWJsZSBhdXRvbWF0aWMgc2Nyb2xsaW5nLlxuICAgKlxuICAgKiBJZiBhdXRvbWF0aWMgc2Nyb2xsaW5nIGlzIGRpc2FibGVkLCBvbmUgbXVzdCBleHBsaWNpdGx5IGNhbGxcbiAgICoge0BsaW5rIG5nLiRhbmNob3JTY3JvbGwgJGFuY2hvclNjcm9sbCgpfSBpbiBvcmRlciB0byBzY3JvbGwgdG8gdGhlIGVsZW1lbnQgcmVsYXRlZCB0byB0aGVcbiAgICogY3VycmVudCBoYXNoLlxuICAgKi9cbiAgdGhpcy5kaXNhYmxlQXV0b1Njcm9sbGluZyA9IGZ1bmN0aW9uKCkge1xuICAgIGF1dG9TY3JvbGxpbmdFbmFibGVkID0gZmFsc2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBzZXJ2aWNlXG4gICAqIEBuYW1lICRhbmNob3JTY3JvbGxcbiAgICogQGtpbmQgZnVuY3Rpb25cbiAgICogQHJlcXVpcmVzICR3aW5kb3dcbiAgICogQHJlcXVpcmVzICRsb2NhdGlvblxuICAgKiBAcmVxdWlyZXMgJHJvb3RTY29wZVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hlbiBjYWxsZWQsIGl0IGNoZWNrcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB7QGxpbmsgbmcuJGxvY2F0aW9uI2hhc2ggJGxvY2F0aW9uLmhhc2goKX0gYW5kXG4gICAqIHNjcm9sbHMgdG8gdGhlIHJlbGF0ZWQgZWxlbWVudCwgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBzcGVjaWZpZWQgaW4gdGhlXG4gICAqIFtIdG1sNSBzcGVjXShodHRwOi8vZGV2LnczLm9yZy9odG1sNS9zcGVjL092ZXJ2aWV3Lmh0bWwjdGhlLWluZGljYXRlZC1wYXJ0LW9mLXRoZS1kb2N1bWVudCkuXG4gICAqXG4gICAqIEl0IGFsc28gd2F0Y2hlcyB0aGUge0BsaW5rIG5nLiRsb2NhdGlvbiNoYXNoICRsb2NhdGlvbi5oYXNoKCl9IGFuZCBhdXRvbWF0aWNhbGx5IHNjcm9sbHMgdG9cbiAgICogbWF0Y2ggYW55IGFuY2hvciB3aGVuZXZlciBpdCBjaGFuZ2VzLiBUaGlzIGNhbiBiZSBkaXNhYmxlZCBieSBjYWxsaW5nXG4gICAqIHtAbGluayBuZy4kYW5jaG9yU2Nyb2xsUHJvdmlkZXIjZGlzYWJsZUF1dG9TY3JvbGxpbmcgJGFuY2hvclNjcm9sbFByb3ZpZGVyLmRpc2FibGVBdXRvU2Nyb2xsaW5nKCl9LlxuICAgKlxuICAgKiBBZGRpdGlvbmFsbHksIHlvdSBjYW4gdXNlIGl0cyB7QGxpbmsgbmcuJGFuY2hvclNjcm9sbCN5T2Zmc2V0IHlPZmZzZXR9IHByb3BlcnR5IHRvIHNwZWNpZnkgYVxuICAgKiB2ZXJ0aWNhbCBzY3JvbGwtb2Zmc2V0IChlaXRoZXIgZml4ZWQgb3IgZHluYW1pYykuXG4gICAqXG4gICAqIEBwcm9wZXJ0eSB7KG51bWJlcnxmdW5jdGlvbnxqcUxpdGUpfSB5T2Zmc2V0XG4gICAqIElmIHNldCwgc3BlY2lmaWVzIGEgdmVydGljYWwgc2Nyb2xsLW9mZnNldC4gVGhpcyBpcyBvZnRlbiB1c2VmdWwgd2hlbiB0aGVyZSBhcmUgZml4ZWRcbiAgICogcG9zaXRpb25lZCBlbGVtZW50cyBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlLCBzdWNoIGFzIG5hdmJhcnMsIGhlYWRlcnMgZXRjLlxuICAgKlxuICAgKiBgeU9mZnNldGAgY2FuIGJlIHNwZWNpZmllZCBpbiB2YXJpb3VzIHdheXM6XG4gICAqIC0gKipudW1iZXIqKjogQSBmaXhlZCBudW1iZXIgb2YgcGl4ZWxzIHRvIGJlIHVzZWQgYXMgb2Zmc2V0LjxiciAvPjxiciAvPlxuICAgKiAtICoqZnVuY3Rpb24qKjogQSBnZXR0ZXIgZnVuY3Rpb24gY2FsbGVkIGV2ZXJ5dGltZSBgJGFuY2hvclNjcm9sbCgpYCBpcyBleGVjdXRlZC4gTXVzdCByZXR1cm5cbiAgICogICBhIG51bWJlciByZXByZXNlbnRpbmcgdGhlIG9mZnNldCAoaW4gcGl4ZWxzKS48YnIgLz48YnIgLz5cbiAgICogLSAqKmpxTGl0ZSoqOiBBIGpxTGl0ZS9qUXVlcnkgZWxlbWVudCB0byBiZSB1c2VkIGZvciBzcGVjaWZ5aW5nIHRoZSBvZmZzZXQuIFRoZSBkaXN0YW5jZSBmcm9tXG4gICAqICAgdGhlIHRvcCBvZiB0aGUgcGFnZSB0byB0aGUgZWxlbWVudCdzIGJvdHRvbSB3aWxsIGJlIHVzZWQgYXMgb2Zmc2V0LjxiciAvPlxuICAgKiAgICoqTm90ZSoqOiBUaGUgZWxlbWVudCB3aWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBvbmx5IGFzIGxvbmcgYXMgaXRzIGBwb3NpdGlvbmAgaXMgc2V0IHRvXG4gICAqICAgYGZpeGVkYC4gVGhpcyBvcHRpb24gaXMgdXNlZnVsLCB3aGVuIGRlYWxpbmcgd2l0aCByZXNwb25zaXZlIG5hdmJhcnMvaGVhZGVycyB0aGF0IGFkanVzdFxuICAgKiAgIHRoZWlyIGhlaWdodCBhbmQvb3IgcG9zaXRpb25pbmcgYWNjb3JkaW5nIHRvIHRoZSB2aWV3cG9ydCdzIHNpemUuXG4gICAqXG4gICAqIDxiciAvPlxuICAgKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiPlxuICAgKiBJbiBvcmRlciBmb3IgYHlPZmZzZXRgIHRvIHdvcmsgcHJvcGVybHksIHNjcm9sbGluZyBzaG91bGQgdGFrZSBwbGFjZSBvbiB0aGUgZG9jdW1lbnQncyByb290IGFuZFxuICAgKiBub3Qgc29tZSBjaGlsZCBlbGVtZW50LlxuICAgKiA8L2Rpdj5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICAgPGV4YW1wbGUgbW9kdWxlPVwiYW5jaG9yU2Nyb2xsRXhhbXBsZVwiPlxuICAgICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgICA8ZGl2IGlkPVwic2Nyb2xsQXJlYVwiIG5nLWNvbnRyb2xsZXI9XCJTY3JvbGxDb250cm9sbGVyXCI+XG4gICAgICAgICAgIDxhIG5nLWNsaWNrPVwiZ290b0JvdHRvbSgpXCI+R28gdG8gYm90dG9tPC9hPlxuICAgICAgICAgICA8YSBpZD1cImJvdHRvbVwiPjwvYT4gWW91J3JlIGF0IHRoZSBib3R0b20hXG4gICAgICAgICA8L2Rpdj5cbiAgICAgICA8L2ZpbGU+XG4gICAgICAgPGZpbGUgbmFtZT1cInNjcmlwdC5qc1wiPlxuICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ2FuY2hvclNjcm9sbEV4YW1wbGUnLCBbXSlcbiAgICAgICAgICAgLmNvbnRyb2xsZXIoJ1Njcm9sbENvbnRyb2xsZXInLCBbJyRzY29wZScsICckbG9jYXRpb24nLCAnJGFuY2hvclNjcm9sbCcsXG4gICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGxvY2F0aW9uLCAkYW5jaG9yU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAkc2NvcGUuZ290b0JvdHRvbSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAvLyBzZXQgdGhlIGxvY2F0aW9uLmhhc2ggdG8gdGhlIGlkIG9mXG4gICAgICAgICAgICAgICAgIC8vIHRoZSBlbGVtZW50IHlvdSB3aXNoIHRvIHNjcm9sbCB0by5cbiAgICAgICAgICAgICAgICAgJGxvY2F0aW9uLmhhc2goJ2JvdHRvbScpO1xuXG4gICAgICAgICAgICAgICAgIC8vIGNhbGwgJGFuY2hvclNjcm9sbCgpXG4gICAgICAgICAgICAgICAgICRhbmNob3JTY3JvbGwoKTtcbiAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgfV0pO1xuICAgICAgIDwvZmlsZT5cbiAgICAgICA8ZmlsZSBuYW1lPVwic3R5bGUuY3NzXCI+XG4gICAgICAgICAjc2Nyb2xsQXJlYSB7XG4gICAgICAgICAgIGhlaWdodDogMjgwcHg7XG4gICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICAgfVxuXG4gICAgICAgICAjYm90dG9tIHtcbiAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgIG1hcmdpbi10b3A6IDIwMDBweDtcbiAgICAgICAgIH1cbiAgICAgICA8L2ZpbGU+XG4gICAgIDwvZXhhbXBsZT5cbiAgICpcbiAgICogPGhyIC8+XG4gICAqIFRoZSBleGFtcGxlIGJlbG93IGlsbHVzdHJhdGVzIHRoZSB1c2Ugb2YgYSB2ZXJ0aWNhbCBzY3JvbGwtb2Zmc2V0IChzcGVjaWZpZWQgYXMgYSBmaXhlZCB2YWx1ZSkuXG4gICAqIFNlZSB7QGxpbmsgbmcuJGFuY2hvclNjcm9sbCN5T2Zmc2V0ICRhbmNob3JTY3JvbGwueU9mZnNldH0gZm9yIG1vcmUgZGV0YWlscy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICAgPGV4YW1wbGUgbW9kdWxlPVwiYW5jaG9yU2Nyb2xsT2Zmc2V0RXhhbXBsZVwiPlxuICAgICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgICA8ZGl2IGNsYXNzPVwiZml4ZWQtaGVhZGVyXCIgbmctY29udHJvbGxlcj1cImhlYWRlckN0cmxcIj5cbiAgICAgICAgICAgPGEgaHJlZj1cIlwiIG5nLWNsaWNrPVwiZ290b0FuY2hvcih4KVwiIG5nLXJlcGVhdD1cInggaW4gWzEsMiwzLDQsNV1cIj5cbiAgICAgICAgICAgICBHbyB0byBhbmNob3Ige3t4fX1cbiAgICAgICAgICAgPC9hPlxuICAgICAgICAgPC9kaXY+XG4gICAgICAgICA8ZGl2IGlkPVwiYW5jaG9ye3t4fX1cIiBjbGFzcz1cImFuY2hvclwiIG5nLXJlcGVhdD1cInggaW4gWzEsMiwzLDQsNV1cIj5cbiAgICAgICAgICAgQW5jaG9yIHt7eH19IG9mIDVcbiAgICAgICAgIDwvZGl2PlxuICAgICAgIDwvZmlsZT5cbiAgICAgICA8ZmlsZSBuYW1lPVwic2NyaXB0LmpzXCI+XG4gICAgICAgICBhbmd1bGFyLm1vZHVsZSgnYW5jaG9yU2Nyb2xsT2Zmc2V0RXhhbXBsZScsIFtdKVxuICAgICAgICAgICAucnVuKFsnJGFuY2hvclNjcm9sbCcsIGZ1bmN0aW9uKCRhbmNob3JTY3JvbGwpIHtcbiAgICAgICAgICAgICAkYW5jaG9yU2Nyb2xsLnlPZmZzZXQgPSA1MDsgICAvLyBhbHdheXMgc2Nyb2xsIGJ5IDUwIGV4dHJhIHBpeGVsc1xuICAgICAgICAgICB9XSlcbiAgICAgICAgICAgLmNvbnRyb2xsZXIoJ2hlYWRlckN0cmwnLCBbJyRhbmNob3JTY3JvbGwnLCAnJGxvY2F0aW9uJywgJyRzY29wZScsXG4gICAgICAgICAgICAgZnVuY3Rpb24gKCRhbmNob3JTY3JvbGwsICRsb2NhdGlvbiwgJHNjb3BlKSB7XG4gICAgICAgICAgICAgICAkc2NvcGUuZ290b0FuY2hvciA9IGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgICAgICAgICAgdmFyIG5ld0hhc2ggPSAnYW5jaG9yJyArIHg7XG4gICAgICAgICAgICAgICAgIGlmICgkbG9jYXRpb24uaGFzaCgpICE9PSBuZXdIYXNoKSB7XG4gICAgICAgICAgICAgICAgICAgLy8gc2V0IHRoZSAkbG9jYXRpb24uaGFzaCB0byBgbmV3SGFzaGAgYW5kXG4gICAgICAgICAgICAgICAgICAgLy8gJGFuY2hvclNjcm9sbCB3aWxsIGF1dG9tYXRpY2FsbHkgc2Nyb2xsIHRvIGl0XG4gICAgICAgICAgICAgICAgICAgJGxvY2F0aW9uLmhhc2goJ2FuY2hvcicgKyB4KTtcbiAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAvLyBjYWxsICRhbmNob3JTY3JvbGwoKSBleHBsaWNpdGx5LFxuICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlICRsb2NhdGlvbi5oYXNoIGhhc24ndCBjaGFuZ2VkXG4gICAgICAgICAgICAgICAgICAgJGFuY2hvclNjcm9sbCgpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgXSk7XG4gICAgICAgPC9maWxlPlxuICAgICAgIDxmaWxlIG5hbWU9XCJzdHlsZS5jc3NcIj5cbiAgICAgICAgIGJvZHkge1xuICAgICAgICAgICBwYWRkaW5nLXRvcDogNTBweDtcbiAgICAgICAgIH1cblxuICAgICAgICAgLmFuY2hvciB7XG4gICAgICAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCBEYXJrT3JjaGlkO1xuICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDEwcHggMjAwcHggMTBweDtcbiAgICAgICAgIH1cblxuICAgICAgICAgLmZpeGVkLWhlYWRlciB7XG4gICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICAgICAgICAgaGVpZ2h0OiA1MHB4O1xuICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgICAgIHRvcDogMDsgbGVmdDogMDsgcmlnaHQ6IDA7XG4gICAgICAgICB9XG5cbiAgICAgICAgIC5maXhlZC1oZWFkZXIgPiBhIHtcbiAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICBtYXJnaW46IDVweCAxNXB4O1xuICAgICAgICAgfVxuICAgICAgIDwvZmlsZT5cbiAgICAgPC9leGFtcGxlPlxuICAgKi9cbiAgdGhpcy4kZ2V0ID0gWyckd2luZG93JywgJyRsb2NhdGlvbicsICckcm9vdFNjb3BlJywgZnVuY3Rpb24oJHdpbmRvdywgJGxvY2F0aW9uLCAkcm9vdFNjb3BlKSB7XG4gICAgdmFyIGRvY3VtZW50ID0gJHdpbmRvdy5kb2N1bWVudDtcblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgZmlyc3QgYW5jaG9yIGZyb20gYSBOb2RlTGlzdFxuICAgIC8vICh1c2luZyBgQXJyYXkjc29tZSgpYCBpbnN0ZWFkIG9mIGBhbmd1bGFyI2ZvckVhY2goKWAgc2luY2UgaXQncyBtb3JlIHBlcmZvcm1hbnRcbiAgICAvLyAgYW5kIHdvcmtpbmcgaW4gYWxsIHN1cHBvcnRlZCBicm93c2Vycy4pXG4gICAgZnVuY3Rpb24gZ2V0Rmlyc3RBbmNob3IobGlzdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IG51bGw7XG4gICAgICBBcnJheS5wcm90b3R5cGUuc29tZS5jYWxsKGxpc3QsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKG5vZGVOYW1lXyhlbGVtZW50KSA9PT0gJ2EnKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZWxlbWVudDtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFlPZmZzZXQoKSB7XG5cbiAgICAgIHZhciBvZmZzZXQgPSBzY3JvbGwueU9mZnNldDtcblxuICAgICAgaWYgKGlzRnVuY3Rpb24ob2Zmc2V0KSkge1xuICAgICAgICBvZmZzZXQgPSBvZmZzZXQoKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNFbGVtZW50KG9mZnNldCkpIHtcbiAgICAgICAgdmFyIGVsZW0gPSBvZmZzZXRbMF07XG4gICAgICAgIHZhciBzdHlsZSA9ICR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtKTtcbiAgICAgICAgaWYgKHN0eWxlLnBvc2l0aW9uICE9PSAnZml4ZWQnKSB7XG4gICAgICAgICAgb2Zmc2V0ID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvZmZzZXQgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghaXNOdW1iZXIob2Zmc2V0KSkge1xuICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjcm9sbFRvKGVsZW0pIHtcbiAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgIGVsZW0uc2Nyb2xsSW50b1ZpZXcoKTtcblxuICAgICAgICB2YXIgb2Zmc2V0ID0gZ2V0WU9mZnNldCgpO1xuXG4gICAgICAgIGlmIChvZmZzZXQpIHtcbiAgICAgICAgICAvLyBgb2Zmc2V0YCBpcyB0aGUgbnVtYmVyIG9mIHBpeGVscyB3ZSBzaG91bGQgc2Nyb2xsIFVQIGluIG9yZGVyIHRvIGFsaWduIGBlbGVtYCBwcm9wZXJseS5cbiAgICAgICAgICAvLyBUaGlzIGlzIHRydWUgT05MWSBpZiB0aGUgY2FsbCB0byBgZWxlbS5zY3JvbGxJbnRvVmlldygpYCBpbml0aWFsbHkgYWxpZ25zIGBlbGVtYCBhdCB0aGVcbiAgICAgICAgICAvLyB0b3Agb2YgdGhlIHZpZXdwb3J0LlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gSUYgdGhlIG51bWJlciBvZiBwaXhlbHMgZnJvbSB0aGUgdG9wIG9mIGBlbGVtYCB0byB0aGUgZW5kIG9mIHRoZSBwYWdlJ3MgY29udGVudCBpcyBsZXNzXG4gICAgICAgICAgLy8gdGhhbiB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydCwgdGhlbiBgZWxlbS5zY3JvbGxJbnRvVmlldygpYCB3aWxsIGFsaWduIHRoZSBgZWxlbWAgc29tZVxuICAgICAgICAgIC8vIHdheSBkb3duIHRoZSBwYWdlLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhpcyBpcyBvZnRlbiB0aGUgY2FzZSBmb3IgZWxlbWVudHMgbmVhciB0aGUgYm90dG9tIG9mIHRoZSBwYWdlLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gSW4gc3VjaCBjYXNlcyB3ZSBkbyBub3QgbmVlZCB0byBzY3JvbGwgdGhlIHdob2xlIGBvZmZzZXRgIHVwLCBqdXN0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW5cbiAgICAgICAgICAvLyB0aGUgdG9wIG9mIHRoZSBlbGVtZW50IGFuZCB0aGUgb2Zmc2V0LCB3aGljaCBpcyBlbm91Z2ggdG8gYWxpZ24gdGhlIHRvcCBvZiBgZWxlbWAgYXQgdGhlXG4gICAgICAgICAgLy8gZGVzaXJlZCBwb3NpdGlvbi5cbiAgICAgICAgICB2YXIgZWxlbVRvcCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICAgICR3aW5kb3cuc2Nyb2xsQnkoMCwgZWxlbVRvcCAtIG9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICR3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2Nyb2xsKCkge1xuICAgICAgdmFyIGhhc2ggPSAkbG9jYXRpb24uaGFzaCgpLCBlbG07XG5cbiAgICAgIC8vIGVtcHR5IGhhc2gsIHNjcm9sbCB0byB0aGUgdG9wIG9mIHRoZSBwYWdlXG4gICAgICBpZiAoIWhhc2gpIHNjcm9sbFRvKG51bGwpO1xuXG4gICAgICAvLyBlbGVtZW50IHdpdGggZ2l2ZW4gaWRcbiAgICAgIGVsc2UgaWYgKChlbG0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoYXNoKSkpIHNjcm9sbFRvKGVsbSk7XG5cbiAgICAgIC8vIGZpcnN0IGFuY2hvciB3aXRoIGdpdmVuIG5hbWUgOi1EXG4gICAgICBlbHNlIGlmICgoZWxtID0gZ2V0Rmlyc3RBbmNob3IoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoaGFzaCkpKSkgc2Nyb2xsVG8oZWxtKTtcblxuICAgICAgLy8gbm8gZWxlbWVudCBhbmQgaGFzaCA9PSAndG9wJywgc2Nyb2xsIHRvIHRoZSB0b3Agb2YgdGhlIHBhZ2VcbiAgICAgIGVsc2UgaWYgKGhhc2ggPT09ICd0b3AnKSBzY3JvbGxUbyhudWxsKTtcbiAgICB9XG5cbiAgICAvLyBkb2VzIG5vdCBzY3JvbGwgd2hlbiB1c2VyIGNsaWNrcyBvbiBhbmNob3IgbGluayB0aGF0IGlzIGN1cnJlbnRseSBvblxuICAgIC8vIChubyB1cmwgY2hhbmdlLCBubyAkbG9jYXRpb24uaGFzaCgpIGNoYW5nZSksIGJyb3dzZXIgbmF0aXZlIGRvZXMgc2Nyb2xsXG4gICAgaWYgKGF1dG9TY3JvbGxpbmdFbmFibGVkKSB7XG4gICAgICAkcm9vdFNjb3BlLiR3YXRjaChmdW5jdGlvbiBhdXRvU2Nyb2xsV2F0Y2goKSB7cmV0dXJuICRsb2NhdGlvbi5oYXNoKCk7fSxcbiAgICAgICAgZnVuY3Rpb24gYXV0b1Njcm9sbFdhdGNoQWN0aW9uKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICAgICAgLy8gc2tpcCB0aGUgaW5pdGlhbCBzY3JvbGwgaWYgJGxvY2F0aW9uLmhhc2ggaXMgZW1wdHlcbiAgICAgICAgICBpZiAobmV3VmFsID09PSBvbGRWYWwgJiYgbmV3VmFsID09PSAnJykgcmV0dXJuO1xuXG4gICAgICAgICAganFMaXRlRG9jdW1lbnRMb2FkZWQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkcm9vdFNjb3BlLiRldmFsQXN5bmMoc2Nyb2xsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjcm9sbDtcbiAgfV07XG59XG5cbnZhciAkYW5pbWF0ZU1pbkVyciA9IG1pbkVycignJGFuaW1hdGUnKTtcblxuLyoqXG4gKiBAbmdkb2MgcHJvdmlkZXJcbiAqIEBuYW1lICRhbmltYXRlUHJvdmlkZXJcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgJGFuaW1hdGUgdGhhdCBkb2Vzbid0IHBlcmZvcm0gYW55IGFuaW1hdGlvbnMsIGluc3RlYWQganVzdFxuICogc3luY2hyb25vdXNseSBwZXJmb3JtcyBET01cbiAqIHVwZGF0ZXMgYW5kIGNhbGxzIGRvbmUoKSBjYWxsYmFja3MuXG4gKlxuICogSW4gb3JkZXIgdG8gZW5hYmxlIGFuaW1hdGlvbnMgdGhlIG5nQW5pbWF0ZSBtb2R1bGUgaGFzIHRvIGJlIGxvYWRlZC5cbiAqXG4gKiBUbyBzZWUgdGhlIGZ1bmN0aW9uYWwgaW1wbGVtZW50YXRpb24gY2hlY2sgb3V0IHNyYy9uZ0FuaW1hdGUvYW5pbWF0ZS5qc1xuICovXG52YXIgJEFuaW1hdGVQcm92aWRlciA9IFsnJHByb3ZpZGUnLCBmdW5jdGlvbigkcHJvdmlkZSkge1xuXG5cbiAgdGhpcy4kJHNlbGVjdG9ycyA9IHt9O1xuXG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgJGFuaW1hdGVQcm92aWRlciNyZWdpc3RlclxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogUmVnaXN0ZXJzIGEgbmV3IGluamVjdGFibGUgYW5pbWF0aW9uIGZhY3RvcnkgZnVuY3Rpb24uIFRoZSBmYWN0b3J5IGZ1bmN0aW9uIHByb2R1Y2VzIHRoZVxuICAgKiBhbmltYXRpb24gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgZWFjaCBldmVudCB0aGF0IGlzIGV4cGVjdGVkIHRvIGJlXG4gICAqIGFuaW1hdGVkLlxuICAgKlxuICAgKiAgICogYGV2ZW50Rm5gOiBgZnVuY3Rpb24oRWxlbWVudCwgZG9uZUZ1bmN0aW9uKWAgVGhlIGVsZW1lbnQgdG8gYW5pbWF0ZSwgdGhlIGBkb25lRnVuY3Rpb25gXG4gICAqICAgbXVzdCBiZSBjYWxsZWQgb25jZSB0aGUgZWxlbWVudCBhbmltYXRpb24gaXMgY29tcGxldGUuIElmIGEgZnVuY3Rpb24gaXMgcmV0dXJuZWQgdGhlbiB0aGVcbiAgICogICBhbmltYXRpb24gc2VydmljZSB3aWxsIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNhbmNlbCB0aGUgYW5pbWF0aW9uIHdoZW5ldmVyIGEgY2FuY2VsIGV2ZW50IGlzXG4gICAqICAgdHJpZ2dlcmVkLlxuICAgKlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiAgIHJldHVybiB7XG4gICAgICogICAgIGV2ZW50Rm4gOiBmdW5jdGlvbihlbGVtZW50LCBkb25lKSB7XG4gICAgICogICAgICAgLy9jb2RlIHRvIHJ1biB0aGUgYW5pbWF0aW9uXG4gICAgICogICAgICAgLy9vbmNlIGNvbXBsZXRlLCB0aGVuIHJ1biBkb25lKClcbiAgICAgKiAgICAgICByZXR1cm4gZnVuY3Rpb24gY2FuY2VsbGF0aW9uRnVuY3Rpb24oKSB7XG4gICAgICogICAgICAgICAvL2NvZGUgdG8gY2FuY2VsIHRoZSBhbmltYXRpb25cbiAgICAgKiAgICAgICB9XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZhY3RvcnkgVGhlIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHRvIHJldHVybiB0aGUgYW5pbWF0aW9uXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LlxuICAgKi9cbiAgdGhpcy5yZWdpc3RlciA9IGZ1bmN0aW9uKG5hbWUsIGZhY3RvcnkpIHtcbiAgICB2YXIga2V5ID0gbmFtZSArICctYW5pbWF0aW9uJztcbiAgICBpZiAobmFtZSAmJiBuYW1lLmNoYXJBdCgwKSAhPSAnLicpIHRocm93ICRhbmltYXRlTWluRXJyKCdub3Rjc2VsJyxcbiAgICAgICAgXCJFeHBlY3RpbmcgY2xhc3Mgc2VsZWN0b3Igc3RhcnRpbmcgd2l0aCAnLicgZ290ICd7MH0nLlwiLCBuYW1lKTtcbiAgICB0aGlzLiQkc2VsZWN0b3JzW25hbWUuc3Vic3RyKDEpXSA9IGtleTtcbiAgICAkcHJvdmlkZS5mYWN0b3J5KGtleSwgZmFjdG9yeSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgJGFuaW1hdGVQcm92aWRlciNjbGFzc05hbWVGaWx0ZXJcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYW5kL29yIHJldHVybnMgdGhlIENTUyBjbGFzcyByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBpcyBjaGVja2VkIHdoZW4gcGVyZm9ybWluZ1xuICAgKiBhbiBhbmltYXRpb24uIFVwb24gYm9vdHN0cmFwIHRoZSBjbGFzc05hbWVGaWx0ZXIgdmFsdWUgaXMgbm90IHNldCBhdCBhbGwgYW5kIHdpbGxcbiAgICogdGhlcmVmb3JlIGVuYWJsZSAkYW5pbWF0ZSB0byBhdHRlbXB0IHRvIHBlcmZvcm0gYW4gYW5pbWF0aW9uIG9uIGFueSBlbGVtZW50LlxuICAgKiBXaGVuIHNldHRpbmcgdGhlIGNsYXNzTmFtZUZpbHRlciB2YWx1ZSwgYW5pbWF0aW9ucyB3aWxsIG9ubHkgYmUgcGVyZm9ybWVkIG9uIGVsZW1lbnRzXG4gICAqIHRoYXQgc3VjY2Vzc2Z1bGx5IG1hdGNoIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbi4gVGhpcyBpbiB0dXJuIGNhbiBib29zdCBwZXJmb3JtYW5jZVxuICAgKiBmb3IgbG93LXBvd2VyZWQgZGV2aWNlcyBhcyB3ZWxsIGFzIGFwcGxpY2F0aW9ucyBjb250YWluaW5nIGEgbG90IG9mIHN0cnVjdHVyYWwgb3BlcmF0aW9ucy5cbiAgICogQHBhcmFtIHtSZWdFeHA9fSBleHByZXNzaW9uIFRoZSBjbGFzc05hbWUgZXhwcmVzc2lvbiB3aGljaCB3aWxsIGJlIGNoZWNrZWQgYWdhaW5zdCBhbGwgYW5pbWF0aW9uc1xuICAgKiBAcmV0dXJuIHtSZWdFeHB9IFRoZSBjdXJyZW50IENTUyBjbGFzc05hbWUgZXhwcmVzc2lvbiB2YWx1ZS4gSWYgbnVsbCB0aGVuIHRoZXJlIGlzIG5vIGV4cHJlc3Npb24gdmFsdWVcbiAgICovXG4gIHRoaXMuY2xhc3NOYW1lRmlsdGVyID0gZnVuY3Rpb24oZXhwcmVzc2lvbikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLiQkY2xhc3NOYW1lRmlsdGVyID0gKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBSZWdFeHApID8gZXhwcmVzc2lvbiA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiQkY2xhc3NOYW1lRmlsdGVyO1xuICB9O1xuXG4gIHRoaXMuJGdldCA9IFsnJCRxJywgJyQkYXN5bmNDYWxsYmFjaycsICckcm9vdFNjb3BlJywgZnVuY3Rpb24oJCRxLCAkJGFzeW5jQ2FsbGJhY2ssICRyb290U2NvcGUpIHtcblxuICAgIHZhciBjdXJyZW50RGVmZXI7XG5cbiAgICBmdW5jdGlvbiBydW5BbmltYXRpb25Qb3N0RGlnZXN0KGZuKSB7XG4gICAgICB2YXIgY2FuY2VsRm4sIGRlZmVyID0gJCRxLmRlZmVyKCk7XG4gICAgICBkZWZlci5wcm9taXNlLiQkY2FuY2VsRm4gPSBmdW5jdGlvbiBuZ0FuaW1hdGVNYXliZUNhbmNlbCgpIHtcbiAgICAgICAgY2FuY2VsRm4gJiYgY2FuY2VsRm4oKTtcbiAgICAgIH07XG5cbiAgICAgICRyb290U2NvcGUuJCRwb3N0RGlnZXN0KGZ1bmN0aW9uIG5nQW5pbWF0ZVBvc3REaWdlc3QoKSB7XG4gICAgICAgIGNhbmNlbEZuID0gZm4oZnVuY3Rpb24gbmdBbmltYXRlTm90aWZ5Q29tcGxldGUoKSB7XG4gICAgICAgICAgZGVmZXIucmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGVmZXIucHJvbWlzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlRWxlbWVudENsYXNzZXMoZWxlbWVudCwgY2xhc3Nlcykge1xuICAgICAgdmFyIHRvQWRkID0gW10sIHRvUmVtb3ZlID0gW107XG5cbiAgICAgIHZhciBoYXNDbGFzc2VzID0gY3JlYXRlTWFwKCk7XG4gICAgICBmb3JFYWNoKChlbGVtZW50LmF0dHIoJ2NsYXNzJykgfHwgJycpLnNwbGl0KC9cXHMrLyksIGZ1bmN0aW9uKGNsYXNzTmFtZSkge1xuICAgICAgICBoYXNDbGFzc2VzW2NsYXNzTmFtZV0gPSB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgIGZvckVhY2goY2xhc3NlcywgZnVuY3Rpb24oc3RhdHVzLCBjbGFzc05hbWUpIHtcbiAgICAgICAgdmFyIGhhc0NsYXNzID0gaGFzQ2xhc3Nlc1tjbGFzc05hbWVdO1xuXG4gICAgICAgIC8vIElmIHRoZSBtb3N0IHJlY2VudCBjbGFzcyBtYW5pcHVsYXRpb24gKHZpYSAkYW5pbWF0ZSkgd2FzIHRvIHJlbW92ZSB0aGUgY2xhc3MsIGFuZCB0aGVcbiAgICAgICAgLy8gZWxlbWVudCBjdXJyZW50bHkgaGFzIHRoZSBjbGFzcywgdGhlIGNsYXNzIGlzIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbC4gT3RoZXJ3aXNlLCBpZlxuICAgICAgICAvLyB0aGUgbW9zdCByZWNlbnQgY2xhc3MgbWFuaXB1bGF0aW9uICh2aWEgJGFuaW1hdGUpIHdhcyB0byBhZGQgdGhlIGNsYXNzLCBhbmQgdGhlXG4gICAgICAgIC8vIGVsZW1lbnQgZG9lcyBub3QgY3VycmVudGx5IGhhdmUgdGhlIGNsYXNzLCB0aGUgY2xhc3MgaXMgc2NoZWR1bGVkIHRvIGJlIGFkZGVkLlxuICAgICAgICBpZiAoc3RhdHVzID09PSBmYWxzZSAmJiBoYXNDbGFzcykge1xuICAgICAgICAgIHRvUmVtb3ZlLnB1c2goY2xhc3NOYW1lKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IHRydWUgJiYgIWhhc0NsYXNzKSB7XG4gICAgICAgICAgdG9BZGQucHVzaChjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuICh0b0FkZC5sZW5ndGggKyB0b1JlbW92ZS5sZW5ndGgpID4gMCAmJlxuICAgICAgICBbdG9BZGQubGVuZ3RoID8gdG9BZGQgOiBudWxsLCB0b1JlbW92ZS5sZW5ndGggPyB0b1JlbW92ZSA6IG51bGxdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhY2hlZENsYXNzTWFuaXB1bGF0aW9uKGNhY2hlLCBjbGFzc2VzLCBvcCkge1xuICAgICAgZm9yICh2YXIgaT0wLCBpaSA9IGNsYXNzZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICB2YXIgY2xhc3NOYW1lID0gY2xhc3Nlc1tpXTtcbiAgICAgICAgY2FjaGVbY2xhc3NOYW1lXSA9IG9wO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzeW5jUHJvbWlzZSgpIHtcbiAgICAgIC8vIG9ubHkgc2VydmUgb25lIGluc3RhbmNlIG9mIGEgcHJvbWlzZSBpbiBvcmRlciB0byBzYXZlIENQVSBjeWNsZXNcbiAgICAgIGlmICghY3VycmVudERlZmVyKSB7XG4gICAgICAgIGN1cnJlbnREZWZlciA9ICQkcS5kZWZlcigpO1xuICAgICAgICAkJGFzeW5jQ2FsbGJhY2soZnVuY3Rpb24oKSB7XG4gICAgICAgICAgY3VycmVudERlZmVyLnJlc29sdmUoKTtcbiAgICAgICAgICBjdXJyZW50RGVmZXIgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjdXJyZW50RGVmZXIucHJvbWlzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBseVN0eWxlcyhlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgICBpZiAoYW5ndWxhci5pc09iamVjdChvcHRpb25zKSkge1xuICAgICAgICB2YXIgc3R5bGVzID0gZXh0ZW5kKG9wdGlvbnMuZnJvbSB8fCB7fSwgb3B0aW9ucy50byB8fCB7fSk7XG4gICAgICAgIGVsZW1lbnQuY3NzKHN0eWxlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAbmdkb2Mgc2VydmljZVxuICAgICAqIEBuYW1lICRhbmltYXRlXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSAkYW5pbWF0ZSBzZXJ2aWNlIHByb3ZpZGVzIHJ1ZGltZW50YXJ5IERPTSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIHRvXG4gICAgICogaW5zZXJ0LCByZW1vdmUgYW5kIG1vdmUgZWxlbWVudHMgd2l0aGluIHRoZSBET00sIGFzIHdlbGwgYXMgYWRkaW5nIGFuZCByZW1vdmluZyBjbGFzc2VzLlxuICAgICAqIFRoaXMgc2VydmljZSBpcyB0aGUgY29yZSBzZXJ2aWNlIHVzZWQgYnkgdGhlIG5nQW5pbWF0ZSAkYW5pbWF0b3Igc2VydmljZSB3aGljaCBwcm92aWRlc1xuICAgICAqIGhpZ2gtbGV2ZWwgYW5pbWF0aW9uIGhvb2tzIGZvciBDU1MgYW5kIEphdmFTY3JpcHQuXG4gICAgICpcbiAgICAgKiAkYW5pbWF0ZSBpcyBhdmFpbGFibGUgaW4gdGhlIEFuZ3VsYXJKUyBjb3JlLCBob3dldmVyLCB0aGUgbmdBbmltYXRlIG1vZHVsZSBtdXN0IGJlIGluY2x1ZGVkXG4gICAgICogdG8gZW5hYmxlIGZ1bGwgb3V0IGFuaW1hdGlvbiBzdXBwb3J0LiBPdGhlcndpc2UsICRhbmltYXRlIHdpbGwgb25seSBwZXJmb3JtIHNpbXBsZSBET01cbiAgICAgKiBtYW5pcHVsYXRpb24gb3BlcmF0aW9ucy5cbiAgICAgKlxuICAgICAqIFRvIGxlYXJuIG1vcmUgYWJvdXQgZW5hYmxpbmcgYW5pbWF0aW9uIHN1cHBvcnQsIGNsaWNrIGhlcmUgdG8gdmlzaXQgdGhlIHtAbGluayBuZ0FuaW1hdGVcbiAgICAgKiBuZ0FuaW1hdGUgbW9kdWxlIHBhZ2V9IGFzIHdlbGwgYXMgdGhlIHtAbGluayBuZ0FuaW1hdGUuJGFuaW1hdGUgbmdBbmltYXRlICRhbmltYXRlIHNlcnZpY2VcbiAgICAgKiBwYWdlfS5cbiAgICAgKi9cbiAgICByZXR1cm4ge1xuICAgICAgYW5pbWF0ZTogZnVuY3Rpb24oZWxlbWVudCwgZnJvbSwgdG8pIHtcbiAgICAgICAgYXBwbHlTdHlsZXMoZWxlbWVudCwgeyBmcm9tOiBmcm9tLCB0bzogdG8gfSk7XG4gICAgICAgIHJldHVybiBhc3luY1Byb21pc2UoKTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICpcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICAqIEBuYW1lICRhbmltYXRlI2VudGVyXG4gICAgICAgKiBAa2luZCBmdW5jdGlvblxuICAgICAgICogQGRlc2NyaXB0aW9uIEluc2VydHMgdGhlIGVsZW1lbnQgaW50byB0aGUgRE9NIGVpdGhlciBhZnRlciB0aGUgYGFmdGVyYCBlbGVtZW50IG9yXG4gICAgICAgKiBhcyB0aGUgZmlyc3QgY2hpbGQgd2l0aGluIHRoZSBgcGFyZW50YCBlbGVtZW50LiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYSBwcm9taXNlXG4gICAgICAgKiBpcyByZXR1cm5lZCB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgYXQgYSBsYXRlciB0aW1lLlxuICAgICAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHdoaWNoIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgRE9NXG4gICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IHBhcmVudCB0aGUgcGFyZW50IGVsZW1lbnQgd2hpY2ggd2lsbCBhcHBlbmQgdGhlIGVsZW1lbnQgYXNcbiAgICAgICAqICAgYSBjaGlsZCAoaWYgdGhlIGFmdGVyIGVsZW1lbnQgaXMgbm90IHByZXNlbnQpXG4gICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGFmdGVyIHRoZSBzaWJsaW5nIGVsZW1lbnQgd2hpY2ggd2lsbCBhcHBlbmQgdGhlIGVsZW1lbnRcbiAgICAgICAqICAgYWZ0ZXIgaXRzZWxmXG4gICAgICAgKiBAcGFyYW0ge29iamVjdD19IG9wdGlvbnMgYW4gb3B0aW9uYWwgY29sbGVjdGlvbiBvZiBzdHlsZXMgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQuXG4gICAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSB0aGUgYW5pbWF0aW9uIGNhbGxiYWNrIHByb21pc2VcbiAgICAgICAqL1xuICAgICAgZW50ZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHBhcmVudCwgYWZ0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgYXBwbHlTdHlsZXMoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgICAgIGFmdGVyID8gYWZ0ZXIuYWZ0ZXIoZWxlbWVudClcbiAgICAgICAgICAgICAgOiBwYXJlbnQucHJlcGVuZChlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGFzeW5jUHJvbWlzZSgpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKlxuICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICogQG5hbWUgJGFuaW1hdGUjbGVhdmVcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXG4gICAgICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyB0aGUgZWxlbWVudCBmcm9tIHRoZSBET00uIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBhIHByb21pc2VcbiAgICAgICAqIGlzIHJldHVybmVkIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBhdCBhIGxhdGVyIHRpbWUuXG4gICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgd2hpY2ggd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIERPTVxuICAgICAgICogQHBhcmFtIHtvYmplY3Q9fSBvcHRpb25zIGFuIG9wdGlvbmFsIGNvbGxlY3Rpb24gb2Ygb3B0aW9ucyB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudC5cbiAgICAgICAqIEByZXR1cm4ge1Byb21pc2V9IHRoZSBhbmltYXRpb24gY2FsbGJhY2sgcHJvbWlzZVxuICAgICAgICovXG4gICAgICBsZWF2ZTogZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucykge1xuICAgICAgICBlbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICByZXR1cm4gYXN5bmNQcm9taXNlKCk7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICAgKiBAbmFtZSAkYW5pbWF0ZSNtb3ZlXG4gICAgICAgKiBAa2luZCBmdW5jdGlvblxuICAgICAgICogQGRlc2NyaXB0aW9uIE1vdmVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgcHJvdmlkZWQgZWxlbWVudCB3aXRoaW4gdGhlIERPTSB0byBiZSBwbGFjZWRcbiAgICAgICAqIGVpdGhlciBhZnRlciB0aGUgYGFmdGVyYCBlbGVtZW50IG9yIGluc2lkZSBvZiB0aGUgYHBhcmVudGAgZWxlbWVudC4gV2hlbiB0aGUgZnVuY3Rpb25cbiAgICAgICAqIGlzIGNhbGxlZCBhIHByb21pc2UgaXMgcmV0dXJuZWQgdGhhdCB3aWxsIGJlIHJlc29sdmVkIGF0IGEgbGF0ZXIgdGltZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgd2hpY2ggd2lsbCBiZSBtb3ZlZCBhcm91bmQgd2l0aGluIHRoZVxuICAgICAgICogICBET01cbiAgICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcGFyZW50IHRoZSBwYXJlbnQgZWxlbWVudCB3aGVyZSB0aGUgZWxlbWVudCB3aWxsIGJlXG4gICAgICAgKiAgIGluc2VydGVkIGludG8gKGlmIHRoZSBhZnRlciBlbGVtZW50IGlzIG5vdCBwcmVzZW50KVxuICAgICAgICogQHBhcmFtIHtET01FbGVtZW50fSBhZnRlciB0aGUgc2libGluZyBlbGVtZW50IHdoZXJlIHRoZSBlbGVtZW50IHdpbGwgYmVcbiAgICAgICAqICAgcG9zaXRpb25lZCBuZXh0IHRvXG4gICAgICAgKiBAcGFyYW0ge29iamVjdD19IG9wdGlvbnMgYW4gb3B0aW9uYWwgY29sbGVjdGlvbiBvZiBvcHRpb25zIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50LlxuICAgICAgICogQHJldHVybiB7UHJvbWlzZX0gdGhlIGFuaW1hdGlvbiBjYWxsYmFjayBwcm9taXNlXG4gICAgICAgKi9cbiAgICAgIG1vdmU6IGZ1bmN0aW9uKGVsZW1lbnQsIHBhcmVudCwgYWZ0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gRG8gbm90IHJlbW92ZSBlbGVtZW50IGJlZm9yZSBpbnNlcnQuIFJlbW92aW5nIHdpbGwgY2F1c2UgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlXG4gICAgICAgIC8vIGVsZW1lbnQgdG8gYmUgZHJvcHBlZC4gSW5zZXJ0IHdpbGwgaW1wbGljaXRseSBkbyB0aGUgcmVtb3ZlLlxuICAgICAgICByZXR1cm4gdGhpcy5lbnRlcihlbGVtZW50LCBwYXJlbnQsIGFmdGVyLCBvcHRpb25zKTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICpcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICAqIEBuYW1lICRhbmltYXRlI2FkZENsYXNzXG4gICAgICAgKiBAa2luZCBmdW5jdGlvblxuICAgICAgICogQGRlc2NyaXB0aW9uIEFkZHMgdGhlIHByb3ZpZGVkIGNsYXNzTmFtZSBDU1MgY2xhc3MgdmFsdWUgdG8gdGhlIHByb3ZpZGVkIGVsZW1lbnQuXG4gICAgICAgKiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYSBwcm9taXNlIGlzIHJldHVybmVkIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBhdCBhIGxhdGVyIHRpbWUuXG4gICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgd2hpY2ggd2lsbCBoYXZlIHRoZSBjbGFzc05hbWUgdmFsdWVcbiAgICAgICAqICAgYWRkZWQgdG8gaXRcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbGVtZW50XG4gICAgICAgKiBAcGFyYW0ge29iamVjdD19IG9wdGlvbnMgYW4gb3B0aW9uYWwgY29sbGVjdGlvbiBvZiBvcHRpb25zIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50LlxuICAgICAgICogQHJldHVybiB7UHJvbWlzZX0gdGhlIGFuaW1hdGlvbiBjYWxsYmFjayBwcm9taXNlXG4gICAgICAgKi9cbiAgICAgIGFkZENsYXNzOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0Q2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lLCBbXSwgb3B0aW9ucyk7XG4gICAgICB9LFxuXG4gICAgICAkJGFkZENsYXNzSW1tZWRpYXRlbHk6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSwgb3B0aW9ucykge1xuICAgICAgICBlbGVtZW50ID0ganFMaXRlKGVsZW1lbnQpO1xuICAgICAgICBjbGFzc05hbWUgPSAhaXNTdHJpbmcoY2xhc3NOYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXNBcnJheShjbGFzc05hbWUpID8gY2xhc3NOYW1lLmpvaW4oJyAnKSA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjbGFzc05hbWU7XG4gICAgICAgIGZvckVhY2goZWxlbWVudCwgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgIGpxTGl0ZUFkZENsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcHBseVN0eWxlcyhlbGVtZW50LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGFzeW5jUHJvbWlzZSgpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKlxuICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICogQG5hbWUgJGFuaW1hdGUjcmVtb3ZlQ2xhc3NcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXG4gICAgICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyB0aGUgcHJvdmlkZWQgY2xhc3NOYW1lIENTUyBjbGFzcyB2YWx1ZSBmcm9tIHRoZSBwcm92aWRlZCBlbGVtZW50LlxuICAgICAgICogV2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGEgcHJvbWlzZSBpcyByZXR1cm5lZCB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgYXQgYSBsYXRlciB0aW1lLlxuICAgICAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHdoaWNoIHdpbGwgaGF2ZSB0aGUgY2xhc3NOYW1lIHZhbHVlXG4gICAgICAgKiAgIHJlbW92ZWQgZnJvbSBpdFxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzIHdoaWNoIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBlbGVtZW50XG4gICAgICAgKiBAcGFyYW0ge29iamVjdD19IG9wdGlvbnMgYW4gb3B0aW9uYWwgY29sbGVjdGlvbiBvZiBvcHRpb25zIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50LlxuICAgICAgICogQHJldHVybiB7UHJvbWlzZX0gdGhlIGFuaW1hdGlvbiBjYWxsYmFjayBwcm9taXNlXG4gICAgICAgKi9cbiAgICAgIHJlbW92ZUNsYXNzOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0Q2xhc3MoZWxlbWVudCwgW10sIGNsYXNzTmFtZSwgb3B0aW9ucyk7XG4gICAgICB9LFxuXG4gICAgICAkJHJlbW92ZUNsYXNzSW1tZWRpYXRlbHk6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSwgb3B0aW9ucykge1xuICAgICAgICBlbGVtZW50ID0ganFMaXRlKGVsZW1lbnQpO1xuICAgICAgICBjbGFzc05hbWUgPSAhaXNTdHJpbmcoY2xhc3NOYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXNBcnJheShjbGFzc05hbWUpID8gY2xhc3NOYW1lLmpvaW4oJyAnKSA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjbGFzc05hbWU7XG4gICAgICAgIGZvckVhY2goZWxlbWVudCwgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgIGpxTGl0ZVJlbW92ZUNsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcHBseVN0eWxlcyhlbGVtZW50LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGFzeW5jUHJvbWlzZSgpO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKlxuICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICogQG5hbWUgJGFuaW1hdGUjc2V0Q2xhc3NcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXG4gICAgICAgKiBAZGVzY3JpcHRpb24gQWRkcyBhbmQvb3IgcmVtb3ZlcyB0aGUgZ2l2ZW4gQ1NTIGNsYXNzZXMgdG8gYW5kIGZyb20gdGhlIGVsZW1lbnQuXG4gICAgICAgKiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYSBwcm9taXNlIGlzIHJldHVybmVkIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBhdCBhIGxhdGVyIHRpbWUuXG4gICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgd2hpY2ggd2lsbCBoYXZlIGl0cyBDU1MgY2xhc3NlcyBjaGFuZ2VkXG4gICAgICAgKiAgIHJlbW92ZWQgZnJvbSBpdFxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGFkZCB0aGUgQ1NTIGNsYXNzZXMgd2hpY2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgZWxlbWVudFxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlbW92ZSB0aGUgQ1NTIGNsYXNzIHdoaWNoIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBlbGVtZW50XG4gICAgICAgKiBAcGFyYW0ge29iamVjdD19IG9wdGlvbnMgYW4gb3B0aW9uYWwgY29sbGVjdGlvbiBvZiBvcHRpb25zIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50LlxuICAgICAgICogQHJldHVybiB7UHJvbWlzZX0gdGhlIGFuaW1hdGlvbiBjYWxsYmFjayBwcm9taXNlXG4gICAgICAgKi9cbiAgICAgIHNldENsYXNzOiBmdW5jdGlvbihlbGVtZW50LCBhZGQsIHJlbW92ZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHZhciBTVE9SQUdFX0tFWSA9ICckJGFuaW1hdGVDbGFzc2VzJztcbiAgICAgICAgdmFyIGNyZWF0ZWRDYWNoZSA9IGZhbHNlO1xuICAgICAgICBlbGVtZW50ID0ganFMaXRlKGVsZW1lbnQpO1xuXG4gICAgICAgIHZhciBjYWNoZSA9IGVsZW1lbnQuZGF0YShTVE9SQUdFX0tFWSk7XG4gICAgICAgIGlmICghY2FjaGUpIHtcbiAgICAgICAgICBjYWNoZSA9IHtcbiAgICAgICAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH07XG4gICAgICAgICAgY3JlYXRlZENhY2hlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zICYmIGNhY2hlLm9wdGlvbnMpIHtcbiAgICAgICAgICBjYWNoZS5vcHRpb25zID0gYW5ndWxhci5leHRlbmQoY2FjaGUub3B0aW9ucyB8fCB7fSwgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2xhc3NlcyA9IGNhY2hlLmNsYXNzZXM7XG5cbiAgICAgICAgYWRkID0gaXNBcnJheShhZGQpID8gYWRkIDogYWRkLnNwbGl0KCcgJyk7XG4gICAgICAgIHJlbW92ZSA9IGlzQXJyYXkocmVtb3ZlKSA/IHJlbW92ZSA6IHJlbW92ZS5zcGxpdCgnICcpO1xuICAgICAgICBjYWNoZWRDbGFzc01hbmlwdWxhdGlvbihjbGFzc2VzLCBhZGQsIHRydWUpO1xuICAgICAgICBjYWNoZWRDbGFzc01hbmlwdWxhdGlvbihjbGFzc2VzLCByZW1vdmUsIGZhbHNlKTtcblxuICAgICAgICBpZiAoY3JlYXRlZENhY2hlKSB7XG4gICAgICAgICAgY2FjaGUucHJvbWlzZSA9IHJ1bkFuaW1hdGlvblBvc3REaWdlc3QoZnVuY3Rpb24oZG9uZSkge1xuICAgICAgICAgICAgdmFyIGNhY2hlID0gZWxlbWVudC5kYXRhKFNUT1JBR0VfS0VZKTtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRGF0YShTVE9SQUdFX0tFWSk7XG5cbiAgICAgICAgICAgIC8vIGluIHRoZSBldmVudCB0aGF0IHRoZSBlbGVtZW50IGlzIHJlbW92ZWQgYmVmb3JlIHBvc3REaWdlc3RcbiAgICAgICAgICAgIC8vIGlzIHJ1biB0aGVuIHRoZSBjYWNoZSB3aWxsIGJlIHVuZGVmaW5lZCBhbmQgdGhlcmUgd2lsbCBiZVxuICAgICAgICAgICAgLy8gbm8gbmVlZCBhbnltb3JlIHRvIGFkZCBvciByZW1vdmUgYW5kIG9mIHRoZSBlbGVtZW50IGNsYXNzZXNcbiAgICAgICAgICAgIGlmIChjYWNoZSkge1xuICAgICAgICAgICAgICB2YXIgY2xhc3NlcyA9IHJlc29sdmVFbGVtZW50Q2xhc3NlcyhlbGVtZW50LCBjYWNoZS5jbGFzc2VzKTtcbiAgICAgICAgICAgICAgaWYgKGNsYXNzZXMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLiQkc2V0Q2xhc3NJbW1lZGlhdGVseShlbGVtZW50LCBjbGFzc2VzWzBdLCBjbGFzc2VzWzFdLCBjYWNoZS5vcHRpb25zKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZWxlbWVudC5kYXRhKFNUT1JBR0VfS0VZLCBjYWNoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FjaGUucHJvbWlzZTtcbiAgICAgIH0sXG5cbiAgICAgICQkc2V0Q2xhc3NJbW1lZGlhdGVseTogZnVuY3Rpb24oZWxlbWVudCwgYWRkLCByZW1vdmUsIG9wdGlvbnMpIHtcbiAgICAgICAgYWRkICYmIHRoaXMuJCRhZGRDbGFzc0ltbWVkaWF0ZWx5KGVsZW1lbnQsIGFkZCk7XG4gICAgICAgIHJlbW92ZSAmJiB0aGlzLiQkcmVtb3ZlQ2xhc3NJbW1lZGlhdGVseShlbGVtZW50LCByZW1vdmUpO1xuICAgICAgICBhcHBseVN0eWxlcyhlbGVtZW50LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGFzeW5jUHJvbWlzZSgpO1xuICAgICAgfSxcblxuICAgICAgZW5hYmxlZDogbm9vcCxcbiAgICAgIGNhbmNlbDogbm9vcFxuICAgIH07XG4gIH1dO1xufV07XG5cbmZ1bmN0aW9uICQkQXN5bmNDYWxsYmFja1Byb3ZpZGVyKCkge1xuICB0aGlzLiRnZXQgPSBbJyQkckFGJywgJyR0aW1lb3V0JywgZnVuY3Rpb24oJCRyQUYsICR0aW1lb3V0KSB7XG4gICAgcmV0dXJuICQkckFGLnN1cHBvcnRlZFxuICAgICAgPyBmdW5jdGlvbihmbikgeyByZXR1cm4gJCRyQUYoZm4pOyB9XG4gICAgICA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgIHJldHVybiAkdGltZW91dChmbiwgMCwgZmFsc2UpO1xuICAgICAgfTtcbiAgfV07XG59XG5cbi8qIGdsb2JhbCBzdHJpcEhhc2g6IHRydWUgKi9cblxuLyoqXG4gKiAhIFRoaXMgaXMgYSBwcml2YXRlIHVuZG9jdW1lbnRlZCBzZXJ2aWNlICFcbiAqXG4gKiBAbmFtZSAkYnJvd3NlclxuICogQHJlcXVpcmVzICRsb2dcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBvYmplY3QgaGFzIHR3byBnb2FsczpcbiAqXG4gKiAtIGhpZGUgYWxsIHRoZSBnbG9iYWwgc3RhdGUgaW4gdGhlIGJyb3dzZXIgY2F1c2VkIGJ5IHRoZSB3aW5kb3cgb2JqZWN0XG4gKiAtIGFic3RyYWN0IGF3YXkgYWxsIHRoZSBicm93c2VyIHNwZWNpZmljIGZlYXR1cmVzIGFuZCBpbmNvbnNpc3RlbmNpZXNcbiAqXG4gKiBGb3IgdGVzdHMgd2UgcHJvdmlkZSB7QGxpbmsgbmdNb2NrLiRicm93c2VyIG1vY2sgaW1wbGVtZW50YXRpb259IG9mIHRoZSBgJGJyb3dzZXJgXG4gKiBzZXJ2aWNlLCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgY29udmVuaWVudCB0ZXN0aW5nIG9mIHRoZSBhcHBsaWNhdGlvbiB3aXRob3V0IHRoZSBpbnRlcmFjdGlvbiB3aXRoXG4gKiB0aGUgcmVhbCBicm93c2VyIGFwaXMuXG4gKi9cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHdpbmRvdyBUaGUgZ2xvYmFsIHdpbmRvdyBvYmplY3QuXG4gKiBAcGFyYW0ge29iamVjdH0gZG9jdW1lbnQgalF1ZXJ5IHdyYXBwZWQgZG9jdW1lbnQuXG4gKiBAcGFyYW0ge29iamVjdH0gJGxvZyB3aW5kb3cuY29uc29sZSBvciBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBpbnRlcmZhY2UuXG4gKiBAcGFyYW0ge29iamVjdH0gJHNuaWZmZXIgJHNuaWZmZXIgc2VydmljZVxuICovXG5mdW5jdGlvbiBCcm93c2VyKHdpbmRvdywgZG9jdW1lbnQsICRsb2csICRzbmlmZmVyKSB7XG4gIHZhciBzZWxmID0gdGhpcyxcbiAgICAgIHJhd0RvY3VtZW50ID0gZG9jdW1lbnRbMF0sXG4gICAgICBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbixcbiAgICAgIGhpc3RvcnkgPSB3aW5kb3cuaGlzdG9yeSxcbiAgICAgIHNldFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCxcbiAgICAgIGNsZWFyVGltZW91dCA9IHdpbmRvdy5jbGVhclRpbWVvdXQsXG4gICAgICBwZW5kaW5nRGVmZXJJZHMgPSB7fTtcblxuICBzZWxmLmlzTW9jayA9IGZhbHNlO1xuXG4gIHZhciBvdXRzdGFuZGluZ1JlcXVlc3RDb3VudCA9IDA7XG4gIHZhciBvdXRzdGFuZGluZ1JlcXVlc3RDYWxsYmFja3MgPSBbXTtcblxuICAvLyBUT0RPKHZvanRhKTogcmVtb3ZlIHRoaXMgdGVtcG9yYXJ5IGFwaVxuICBzZWxmLiQkY29tcGxldGVPdXRzdGFuZGluZ1JlcXVlc3QgPSBjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdDtcbiAgc2VsZi4kJGluY091dHN0YW5kaW5nUmVxdWVzdENvdW50ID0gZnVuY3Rpb24oKSB7IG91dHN0YW5kaW5nUmVxdWVzdENvdW50Kys7IH07XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBgZm5gIGZ1bmN0aW9uKHN1cHBvcnRzIGN1cnJ5aW5nKSBhbmQgZGVjcmVtZW50cyB0aGUgYG91dHN0YW5kaW5nUmVxdWVzdENhbGxiYWNrc2BcbiAgICogY291bnRlci4gSWYgdGhlIGNvdW50ZXIgcmVhY2hlcyAwLCBhbGwgdGhlIGBvdXRzdGFuZGluZ1JlcXVlc3RDYWxsYmFja3NgIGFyZSBleGVjdXRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1ZXN0KGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZuLmFwcGx5KG51bGwsIHNsaWNlQXJncyhhcmd1bWVudHMsIDEpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQtLTtcbiAgICAgIGlmIChvdXRzdGFuZGluZ1JlcXVlc3RDb3VudCA9PT0gMCkge1xuICAgICAgICB3aGlsZSAob3V0c3RhbmRpbmdSZXF1ZXN0Q2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBvdXRzdGFuZGluZ1JlcXVlc3RDYWxsYmFja3MucG9wKCkoKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAkbG9nLmVycm9yKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBOb3RlOiB0aGlzIG1ldGhvZCBpcyB1c2VkIG9ubHkgYnkgc2NlbmFyaW8gcnVubmVyXG4gICAqIFRPRE8odm9qdGEpOiBwcmVmaXggdGhpcyBtZXRob2Qgd2l0aCAkJCA/XG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gY2FsbGJhY2sgRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIG5vIG91dHN0YW5kaW5nIHJlcXVlc3RcbiAgICovXG4gIHNlbGYubm90aWZ5V2hlbk5vT3V0c3RhbmRpbmdSZXF1ZXN0cyA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgLy8gZm9yY2UgYnJvd3NlciB0byBleGVjdXRlIGFsbCBwb2xsRm5zIC0gdGhpcyBpcyBuZWVkZWQgc28gdGhhdCBjb29raWVzIGFuZCBvdGhlciBwb2xsZXJzIGZpcmVcbiAgICAvLyBhdCBzb21lIGRldGVybWluaXN0aWMgdGltZSBpbiByZXNwZWN0IHRvIHRoZSB0ZXN0IHJ1bm5lcidzIGFjdGlvbnMuIExlYXZpbmcgdGhpbmdzIHVwIHRvIHRoZVxuICAgIC8vIHJlZ3VsYXIgcG9sbGVyIHdvdWxkIHJlc3VsdCBpbiBmbGFreSB0ZXN0cy5cbiAgICBmb3JFYWNoKHBvbGxGbnMsIGZ1bmN0aW9uKHBvbGxGbikgeyBwb2xsRm4oKTsgfSk7XG5cbiAgICBpZiAob3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQgPT09IDApIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHN0YW5kaW5nUmVxdWVzdENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICB9XG4gIH07XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gUG9sbCBXYXRjaGVyIEFQSVxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICB2YXIgcG9sbEZucyA9IFtdLFxuICAgICAgcG9sbFRpbWVvdXQ7XG5cbiAgLyoqXG4gICAqIEBuYW1lICRicm93c2VyI2FkZFBvbGxGblxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGZuIFBvbGwgZnVuY3Rpb24gdG8gYWRkXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzIGEgZnVuY3Rpb24gdG8gdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgcG9sbGVyIHBlcmlvZGljYWxseSBleGVjdXRlcyxcbiAgICogYW5kIHN0YXJ0cyBwb2xsaW5nIGlmIG5vdCBzdGFydGVkIHlldC5cbiAgICpcbiAgICogQHJldHVybnMge2Z1bmN0aW9uKCl9IHRoZSBhZGRlZCBmdW5jdGlvblxuICAgKi9cbiAgc2VsZi5hZGRQb2xsRm4gPSBmdW5jdGlvbihmbikge1xuICAgIGlmIChpc1VuZGVmaW5lZChwb2xsVGltZW91dCkpIHN0YXJ0UG9sbGVyKDEwMCwgc2V0VGltZW91dCk7XG4gICAgcG9sbEZucy5wdXNoKGZuKTtcbiAgICByZXR1cm4gZm47XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnZhbCBIb3cgb2Z0ZW4gc2hvdWxkIGJyb3dzZXIgY2FsbCBwb2xsIGZ1bmN0aW9ucyAobXMpXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gc2V0VGltZW91dCBSZWZlcmVuY2UgdG8gYSByZWFsIG9yIGZha2UgYHNldFRpbWVvdXRgIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQ29uZmlndXJlcyB0aGUgcG9sbGVyIHRvIHJ1biBpbiB0aGUgc3BlY2lmaWVkIGludGVydmFscywgdXNpbmcgdGhlIHNwZWNpZmllZFxuICAgKiBzZXRUaW1lb3V0IGZuIGFuZCBraWNrcyBpdCBvZmYuXG4gICAqL1xuICBmdW5jdGlvbiBzdGFydFBvbGxlcihpbnRlcnZhbCwgc2V0VGltZW91dCkge1xuICAgIChmdW5jdGlvbiBjaGVjaygpIHtcbiAgICAgIGZvckVhY2gocG9sbEZucywgZnVuY3Rpb24ocG9sbEZuKSB7IHBvbGxGbigpOyB9KTtcbiAgICAgIHBvbGxUaW1lb3V0ID0gc2V0VGltZW91dChjaGVjaywgaW50ZXJ2YWwpO1xuICAgIH0pKCk7XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBVUkwgQVBJXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgdmFyIGNhY2hlZFN0YXRlLCBsYXN0SGlzdG9yeVN0YXRlLFxuICAgICAgbGFzdEJyb3dzZXJVcmwgPSBsb2NhdGlvbi5ocmVmLFxuICAgICAgYmFzZUVsZW1lbnQgPSBkb2N1bWVudC5maW5kKCdiYXNlJyksXG4gICAgICByZWxvYWRMb2NhdGlvbiA9IG51bGw7XG5cbiAgY2FjaGVTdGF0ZSgpO1xuICBsYXN0SGlzdG9yeVN0YXRlID0gY2FjaGVkU3RhdGU7XG5cbiAgLyoqXG4gICAqIEBuYW1lICRicm93c2VyI3VybFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogR0VUVEVSOlxuICAgKiBXaXRob3V0IGFueSBhcmd1bWVudCwgdGhpcyBtZXRob2QganVzdCByZXR1cm5zIGN1cnJlbnQgdmFsdWUgb2YgbG9jYXRpb24uaHJlZi5cbiAgICpcbiAgICogU0VUVEVSOlxuICAgKiBXaXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudCwgdGhpcyBtZXRob2Qgc2V0cyB1cmwgdG8gbmV3IHZhbHVlLlxuICAgKiBJZiBodG1sNSBoaXN0b3J5IGFwaSBzdXBwb3J0ZWQsIHB1c2hTdGF0ZS9yZXBsYWNlU3RhdGUgaXMgdXNlZCwgb3RoZXJ3aXNlXG4gICAqIGxvY2F0aW9uLmhyZWYvbG9jYXRpb24ucmVwbGFjZSBpcyB1c2VkLlxuICAgKiBSZXR1cm5zIGl0cyBvd24gaW5zdGFuY2UgdG8gYWxsb3cgY2hhaW5pbmdcbiAgICpcbiAgICogTk9URTogdGhpcyBhcGkgaXMgaW50ZW5kZWQgZm9yIHVzZSBvbmx5IGJ5IHRoZSAkbG9jYXRpb24gc2VydmljZS4gUGxlYXNlIHVzZSB0aGVcbiAgICoge0BsaW5rIG5nLiRsb2NhdGlvbiAkbG9jYXRpb24gc2VydmljZX0gdG8gY2hhbmdlIHVybC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBOZXcgdXJsICh3aGVuIHVzZWQgYXMgc2V0dGVyKVxuICAgKiBAcGFyYW0ge2Jvb2xlYW49fSByZXBsYWNlIFNob3VsZCBuZXcgdXJsIHJlcGxhY2UgY3VycmVudCBoaXN0b3J5IHJlY29yZD9cbiAgICogQHBhcmFtIHtvYmplY3Q9fSBzdGF0ZSBvYmplY3QgdG8gdXNlIHdpdGggcHVzaFN0YXRlL3JlcGxhY2VTdGF0ZVxuICAgKi9cbiAgc2VsZi51cmwgPSBmdW5jdGlvbih1cmwsIHJlcGxhY2UsIHN0YXRlKSB7XG4gICAgLy8gSW4gbW9kZXJuIGJyb3dzZXJzIGBoaXN0b3J5LnN0YXRlYCBpcyBgbnVsbGAgYnkgZGVmYXVsdDsgdHJlYXRpbmcgaXQgc2VwYXJhdGVseVxuICAgIC8vIGZyb20gYHVuZGVmaW5lZGAgd291bGQgY2F1c2UgYCRicm93c2VyLnVybCgnL2ZvbycpYCB0byBjaGFuZ2UgYGhpc3Rvcnkuc3RhdGVgXG4gICAgLy8gdG8gdW5kZWZpbmVkIHZpYSBgcHVzaFN0YXRlYC4gSW5zdGVhZCwgbGV0J3MgY2hhbmdlIGB1bmRlZmluZWRgIHRvIGBudWxsYCBoZXJlLlxuICAgIGlmIChpc1VuZGVmaW5lZChzdGF0ZSkpIHtcbiAgICAgIHN0YXRlID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBBbmRyb2lkIEJyb3dzZXIgQkZDYWNoZSBjYXVzZXMgbG9jYXRpb24sIGhpc3RvcnkgcmVmZXJlbmNlIHRvIGJlY29tZSBzdGFsZS5cbiAgICBpZiAobG9jYXRpb24gIT09IHdpbmRvdy5sb2NhdGlvbikgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG4gICAgaWYgKGhpc3RvcnkgIT09IHdpbmRvdy5oaXN0b3J5KSBoaXN0b3J5ID0gd2luZG93Lmhpc3Rvcnk7XG5cbiAgICAvLyBzZXR0ZXJcbiAgICBpZiAodXJsKSB7XG4gICAgICB2YXIgc2FtZVN0YXRlID0gbGFzdEhpc3RvcnlTdGF0ZSA9PT0gc3RhdGU7XG5cbiAgICAgIC8vIERvbid0IGNoYW5nZSBhbnl0aGluZyBpZiBwcmV2aW91cyBhbmQgY3VycmVudCBVUkxzIGFuZCBzdGF0ZXMgbWF0Y2guIFRoaXMgYWxzbyBwcmV2ZW50c1xuICAgICAgLy8gSUU8MTAgZnJvbSBnZXR0aW5nIGludG8gcmVkaXJlY3QgbG9vcCB3aGVuIGluIExvY2F0aW9uSGFzaGJhbmdJbkh0bWw1VXJsIG1vZGUuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5qcy9jb21taXQvZmZiMjcwMVxuICAgICAgaWYgKGxhc3RCcm93c2VyVXJsID09PSB1cmwgJiYgKCEkc25pZmZlci5oaXN0b3J5IHx8IHNhbWVTdGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIHNhbWVCYXNlID0gbGFzdEJyb3dzZXJVcmwgJiYgc3RyaXBIYXNoKGxhc3RCcm93c2VyVXJsKSA9PT0gc3RyaXBIYXNoKHVybCk7XG4gICAgICBsYXN0QnJvd3NlclVybCA9IHVybDtcbiAgICAgIGxhc3RIaXN0b3J5U3RhdGUgPSBzdGF0ZTtcbiAgICAgIC8vIERvbid0IHVzZSBoaXN0b3J5IEFQSSBpZiBvbmx5IHRoZSBoYXNoIGNoYW5nZWRcbiAgICAgIC8vIGR1ZSB0byBhIGJ1ZyBpbiBJRTEwL0lFMTEgd2hpY2ggbGVhZHNcbiAgICAgIC8vIHRvIG5vdCBmaXJpbmcgYSBgaGFzaGNoYW5nZWAgbm9yIGBwb3BzdGF0ZWAgZXZlbnRcbiAgICAgIC8vIGluIHNvbWUgY2FzZXMgKHNlZSAjOTE0MykuXG4gICAgICBpZiAoJHNuaWZmZXIuaGlzdG9yeSAmJiAoIXNhbWVCYXNlIHx8ICFzYW1lU3RhdGUpKSB7XG4gICAgICAgIGhpc3RvcnlbcmVwbGFjZSA/ICdyZXBsYWNlU3RhdGUnIDogJ3B1c2hTdGF0ZSddKHN0YXRlLCAnJywgdXJsKTtcbiAgICAgICAgY2FjaGVTdGF0ZSgpO1xuICAgICAgICAvLyBEbyB0aGUgYXNzaWdubWVudCBhZ2FpbiBzbyB0aGF0IHRob3NlIHR3byB2YXJpYWJsZXMgYXJlIHJlZmVyZW50aWFsbHkgaWRlbnRpY2FsLlxuICAgICAgICBsYXN0SGlzdG9yeVN0YXRlID0gY2FjaGVkU3RhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXNhbWVCYXNlKSB7XG4gICAgICAgICAgcmVsb2FkTG9jYXRpb24gPSB1cmw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgICAgICBsb2NhdGlvbi5yZXBsYWNlKHVybCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9jYXRpb24uaHJlZiA9IHVybDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGY7XG4gICAgLy8gZ2V0dGVyXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC0gcmVsb2FkTG9jYXRpb24gaXMgbmVlZGVkIGFzIGJyb3dzZXJzIGRvbid0IGFsbG93IHRvIHJlYWQgb3V0XG4gICAgICAvLyAgIHRoZSBuZXcgbG9jYXRpb24uaHJlZiBpZiBhIHJlbG9hZCBoYXBwZW5lZC5cbiAgICAgIC8vIC0gdGhlIHJlcGxhY2VtZW50IGlzIGEgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA3MTcyXG4gICAgICByZXR1cm4gcmVsb2FkTG9jYXRpb24gfHwgbG9jYXRpb24uaHJlZi5yZXBsYWNlKC8lMjcvZyxcIidcIik7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAbmFtZSAkYnJvd3NlciNzdGF0ZVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyBtZXRob2QgaXMgYSBnZXR0ZXIuXG4gICAqXG4gICAqIFJldHVybiBoaXN0b3J5LnN0YXRlIG9yIG51bGwgaWYgaGlzdG9yeS5zdGF0ZSBpcyB1bmRlZmluZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IHN0YXRlXG4gICAqL1xuICBzZWxmLnN0YXRlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNhY2hlZFN0YXRlO1xuICB9O1xuXG4gIHZhciB1cmxDaGFuZ2VMaXN0ZW5lcnMgPSBbXSxcbiAgICAgIHVybENoYW5nZUluaXQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBjYWNoZVN0YXRlQW5kRmlyZVVybENoYW5nZSgpIHtcbiAgICBjYWNoZVN0YXRlKCk7XG4gICAgZmlyZVVybENoYW5nZSgpO1xuICB9XG5cbiAgLy8gVGhpcyB2YXJpYWJsZSBzaG91bGQgYmUgdXNlZCAqb25seSogaW5zaWRlIHRoZSBjYWNoZVN0YXRlIGZ1bmN0aW9uLlxuICB2YXIgbGFzdENhY2hlZFN0YXRlID0gbnVsbDtcbiAgZnVuY3Rpb24gY2FjaGVTdGF0ZSgpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBiZSB0aGUgb25seSBwbGFjZSBpbiAkYnJvd3NlciB3aGVyZSBgaGlzdG9yeS5zdGF0ZWAgaXMgcmVhZC5cbiAgICBjYWNoZWRTdGF0ZSA9IHdpbmRvdy5oaXN0b3J5LnN0YXRlO1xuICAgIGNhY2hlZFN0YXRlID0gaXNVbmRlZmluZWQoY2FjaGVkU3RhdGUpID8gbnVsbCA6IGNhY2hlZFN0YXRlO1xuXG4gICAgLy8gUHJldmVudCBjYWxsYmFja3MgZm8gZmlyZSB0d2ljZSBpZiBib3RoIGhhc2hjaGFuZ2UgJiBwb3BzdGF0ZSB3ZXJlIGZpcmVkLlxuICAgIGlmIChlcXVhbHMoY2FjaGVkU3RhdGUsIGxhc3RDYWNoZWRTdGF0ZSkpIHtcbiAgICAgIGNhY2hlZFN0YXRlID0gbGFzdENhY2hlZFN0YXRlO1xuICAgIH1cbiAgICBsYXN0Q2FjaGVkU3RhdGUgPSBjYWNoZWRTdGF0ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpcmVVcmxDaGFuZ2UoKSB7XG4gICAgaWYgKGxhc3RCcm93c2VyVXJsID09PSBzZWxmLnVybCgpICYmIGxhc3RIaXN0b3J5U3RhdGUgPT09IGNhY2hlZFN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGFzdEJyb3dzZXJVcmwgPSBzZWxmLnVybCgpO1xuICAgIGxhc3RIaXN0b3J5U3RhdGUgPSBjYWNoZWRTdGF0ZTtcbiAgICBmb3JFYWNoKHVybENoYW5nZUxpc3RlbmVycywgZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyKHNlbGYudXJsKCksIGNhY2hlZFN0YXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSAkYnJvd3NlciNvblVybENoYW5nZVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogUmVnaXN0ZXIgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCwgd2hlbiB1cmwgY2hhbmdlcy5cbiAgICpcbiAgICogSXQncyBvbmx5IGNhbGxlZCB3aGVuIHRoZSB1cmwgaXMgY2hhbmdlZCBmcm9tIG91dHNpZGUgb2YgYW5ndWxhcjpcbiAgICogLSB1c2VyIHR5cGVzIGRpZmZlcmVudCB1cmwgaW50byBhZGRyZXNzIGJhclxuICAgKiAtIHVzZXIgY2xpY2tzIG9uIGhpc3RvcnkgKGZvcndhcmQvYmFjaykgYnV0dG9uXG4gICAqIC0gdXNlciBjbGlja3Mgb24gYSBsaW5rXG4gICAqXG4gICAqIEl0J3Mgbm90IGNhbGxlZCB3aGVuIHVybCBpcyBjaGFuZ2VkIGJ5ICRicm93c2VyLnVybCgpIG1ldGhvZFxuICAgKlxuICAgKiBUaGUgbGlzdGVuZXIgZ2V0cyBjYWxsZWQgd2l0aCBuZXcgdXJsIGFzIHBhcmFtZXRlci5cbiAgICpcbiAgICogTk9URTogdGhpcyBhcGkgaXMgaW50ZW5kZWQgZm9yIHVzZSBvbmx5IGJ5IHRoZSAkbG9jYXRpb24gc2VydmljZS4gUGxlYXNlIHVzZSB0aGVcbiAgICoge0BsaW5rIG5nLiRsb2NhdGlvbiAkbG9jYXRpb24gc2VydmljZX0gdG8gbW9uaXRvciB1cmwgY2hhbmdlcyBpbiBhbmd1bGFyIGFwcHMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKX0gbGlzdGVuZXIgTGlzdGVuZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdXJsIGNoYW5nZXMuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyl9IFJldHVybnMgdGhlIHJlZ2lzdGVyZWQgbGlzdGVuZXIgZm4gLSBoYW5keSBpZiB0aGUgZm4gaXMgYW5vbnltb3VzLlxuICAgKi9cbiAgc2VsZi5vblVybENoYW5nZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgLy8gVE9ETyh2b2p0YSk6IHJlZmFjdG9yIHRvIHVzZSBub2RlJ3Mgc3ludGF4IGZvciBldmVudHNcbiAgICBpZiAoIXVybENoYW5nZUluaXQpIHtcbiAgICAgIC8vIFdlIGxpc3RlbiBvbiBib3RoIChoYXNoY2hhbmdlL3BvcHN0YXRlKSB3aGVuIGF2YWlsYWJsZSwgYXMgc29tZSBicm93c2VycyAoZS5nLiBPcGVyYSlcbiAgICAgIC8vIGRvbid0IGZpcmUgcG9wc3RhdGUgd2hlbiB1c2VyIGNoYW5nZSB0aGUgYWRkcmVzcyBiYXIgYW5kIGRvbid0IGZpcmUgaGFzaGNoYW5nZSB3aGVuIHVybFxuICAgICAgLy8gY2hhbmdlZCBieSBwdXNoL3JlcGxhY2VTdGF0ZVxuXG4gICAgICAvLyBodG1sNSBoaXN0b3J5IGFwaSAtIHBvcHN0YXRlIGV2ZW50XG4gICAgICBpZiAoJHNuaWZmZXIuaGlzdG9yeSkganFMaXRlKHdpbmRvdykub24oJ3BvcHN0YXRlJywgY2FjaGVTdGF0ZUFuZEZpcmVVcmxDaGFuZ2UpO1xuICAgICAgLy8gaGFzaGNoYW5nZSBldmVudFxuICAgICAganFMaXRlKHdpbmRvdykub24oJ2hhc2hjaGFuZ2UnLCBjYWNoZVN0YXRlQW5kRmlyZVVybENoYW5nZSk7XG5cbiAgICAgIHVybENoYW5nZUluaXQgPSB0cnVlO1xuICAgIH1cblxuICAgIHVybENoYW5nZUxpc3RlbmVycy5wdXNoKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gY2FsbGJhY2s7XG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSB1cmwgaGFzIGNoYW5nZWQgb3V0c2lkZSBvZiBBbmd1bGFyLlxuICAgKiBOZWVkcyB0byBiZSBleHBvcnRlZCB0byBiZSBhYmxlIHRvIGNoZWNrIGZvciBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIGRvbmUgaW4gc3luYyxcbiAgICogYXMgaGFzaGNoYW5nZS9wb3BzdGF0ZSBldmVudHMgZmlyZSBpbiBhc3luYy5cbiAgICovXG4gIHNlbGYuJCRjaGVja1VybENoYW5nZSA9IGZpcmVVcmxDaGFuZ2U7XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gTWlzYyBBUElcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvKipcbiAgICogQG5hbWUgJGJyb3dzZXIjYmFzZUhyZWZcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFJldHVybnMgY3VycmVudCA8YmFzZSBocmVmPlxuICAgKiAoYWx3YXlzIHJlbGF0aXZlIC0gd2l0aG91dCBkb21haW4pXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjdXJyZW50IGJhc2UgaHJlZlxuICAgKi9cbiAgc2VsZi5iYXNlSHJlZiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBocmVmID0gYmFzZUVsZW1lbnQuYXR0cignaHJlZicpO1xuICAgIHJldHVybiBocmVmID8gaHJlZi5yZXBsYWNlKC9eKGh0dHBzP1xcOik/XFwvXFwvW15cXC9dKi8sICcnKSA6ICcnO1xuICB9O1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIENvb2tpZXMgQVBJXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIHZhciBsYXN0Q29va2llcyA9IHt9O1xuICB2YXIgbGFzdENvb2tpZVN0cmluZyA9ICcnO1xuICB2YXIgY29va2llUGF0aCA9IHNlbGYuYmFzZUhyZWYoKTtcblxuICBmdW5jdGlvbiBzYWZlRGVjb2RlVVJJQ29tcG9uZW50KHN0cikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgJGJyb3dzZXIjY29va2llc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgQ29va2llIG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmc9fSB2YWx1ZSBDb29raWUgdmFsdWVcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBjb29raWVzIG1ldGhvZCBwcm92aWRlcyBhICdwcml2YXRlJyBsb3cgbGV2ZWwgYWNjZXNzIHRvIGJyb3dzZXIgY29va2llcy5cbiAgICogSXQgaXMgbm90IG1lYW50IHRvIGJlIHVzZWQgZGlyZWN0bHksIHVzZSB0aGUgJGNvb2tpZSBzZXJ2aWNlIGluc3RlYWQuXG4gICAqXG4gICAqIFRoZSByZXR1cm4gdmFsdWVzIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBhcmd1bWVudHMgdGhhdCB0aGUgbWV0aG9kIHdhcyBjYWxsZWQgd2l0aCBhcyBmb2xsb3dzOlxuICAgKlxuICAgKiAtIGNvb2tpZXMoKSAtPiBoYXNoIG9mIGFsbCBjb29raWVzLCB0aGlzIGlzIE5PVCBhIGNvcHkgb2YgdGhlIGludGVybmFsIHN0YXRlLCBzbyBkbyBub3QgbW9kaWZ5XG4gICAqICAgaXRcbiAgICogLSBjb29raWVzKG5hbWUsIHZhbHVlKSAtPiBzZXQgbmFtZSB0byB2YWx1ZSwgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGRlbGV0ZSB0aGUgY29va2llXG4gICAqIC0gY29va2llcyhuYW1lKSAtPiB0aGUgc2FtZSBhcyAobmFtZSwgdW5kZWZpbmVkKSA9PSBERUxFVEVTIChubyBvbmUgY2FsbHMgaXQgcmlnaHQgbm93IHRoYXRcbiAgICogICB3YXkpXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IEhhc2ggb2YgYWxsIGNvb2tpZXMgKGlmIGNhbGxlZCB3aXRob3V0IGFueSBwYXJhbWV0ZXIpXG4gICAqL1xuICBzZWxmLmNvb2tpZXMgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBjb29raWVMZW5ndGgsIGNvb2tpZUFycmF5LCBjb29raWUsIGksIGluZGV4O1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJhd0RvY3VtZW50LmNvb2tpZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSArIFwiPTtwYXRoPVwiICsgY29va2llUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiO2V4cGlyZXM9VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVRcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgICBjb29raWVMZW5ndGggPSAocmF3RG9jdW1lbnQuY29va2llID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc7cGF0aD0nICsgY29va2llUGF0aCkubGVuZ3RoICsgMTtcblxuICAgICAgICAgIC8vIHBlciBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyMTA5LnR4dCBicm93c2VyIG11c3QgYWxsb3cgYXQgbWluaW11bTpcbiAgICAgICAgICAvLyAtIDMwMCBjb29raWVzXG4gICAgICAgICAgLy8gLSAyMCBjb29raWVzIHBlciB1bmlxdWUgZG9tYWluXG4gICAgICAgICAgLy8gLSA0MDk2IGJ5dGVzIHBlciBjb29raWVcbiAgICAgICAgICBpZiAoY29va2llTGVuZ3RoID4gNDA5Nikge1xuICAgICAgICAgICAgJGxvZy53YXJuKFwiQ29va2llICdcIiArIG5hbWUgK1xuICAgICAgICAgICAgICBcIicgcG9zc2libHkgbm90IHNldCBvciBvdmVyZmxvd2VkIGJlY2F1c2UgaXQgd2FzIHRvbyBsYXJnZSAoXCIgK1xuICAgICAgICAgICAgICBjb29raWVMZW5ndGggKyBcIiA+IDQwOTYgYnl0ZXMpIVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJhd0RvY3VtZW50LmNvb2tpZSAhPT0gbGFzdENvb2tpZVN0cmluZykge1xuICAgICAgICBsYXN0Q29va2llU3RyaW5nID0gcmF3RG9jdW1lbnQuY29va2llO1xuICAgICAgICBjb29raWVBcnJheSA9IGxhc3RDb29raWVTdHJpbmcuc3BsaXQoXCI7IFwiKTtcbiAgICAgICAgbGFzdENvb2tpZXMgPSB7fTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29va2llQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb29raWUgPSBjb29raWVBcnJheVtpXTtcbiAgICAgICAgICBpbmRleCA9IGNvb2tpZS5pbmRleE9mKCc9Jyk7XG4gICAgICAgICAgaWYgKGluZGV4ID4gMCkgeyAvL2lnbm9yZSBuYW1lbGVzcyBjb29raWVzXG4gICAgICAgICAgICBuYW1lID0gc2FmZURlY29kZVVSSUNvbXBvbmVudChjb29raWUuc3Vic3RyaW5nKDAsIGluZGV4KSk7XG4gICAgICAgICAgICAvLyB0aGUgZmlyc3QgdmFsdWUgdGhhdCBpcyBzZWVuIGZvciBhIGNvb2tpZSBpcyB0aGUgbW9zdFxuICAgICAgICAgICAgLy8gc3BlY2lmaWMgb25lLiAgdmFsdWVzIGZvciB0aGUgc2FtZSBjb29raWUgbmFtZSB0aGF0XG4gICAgICAgICAgICAvLyBmb2xsb3cgYXJlIGZvciBsZXNzIHNwZWNpZmljIHBhdGhzLlxuICAgICAgICAgICAgaWYgKGxhc3RDb29raWVzW25hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgbGFzdENvb2tpZXNbbmFtZV0gPSBzYWZlRGVjb2RlVVJJQ29tcG9uZW50KGNvb2tpZS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGFzdENvb2tpZXM7XG4gICAgfVxuICB9O1xuXG5cbiAgLyoqXG4gICAqIEBuYW1lICRicm93c2VyI2RlZmVyXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gZm4gQSBmdW5jdGlvbiwgd2hvJ3MgZXhlY3V0aW9uIHNob3VsZCBiZSBkZWZlcnJlZC5cbiAgICogQHBhcmFtIHtudW1iZXI9fSBbZGVsYXk9MF0gb2YgbWlsbGlzZWNvbmRzIHRvIGRlZmVyIHRoZSBmdW5jdGlvbiBleGVjdXRpb24uXG4gICAqIEByZXR1cm5zIHsqfSBEZWZlcklkIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2FuY2VsIHRoZSB0YXNrIHZpYSBgJGJyb3dzZXIuZGVmZXIuY2FuY2VsKClgLlxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRXhlY3V0ZXMgYSBmbiBhc3luY2hyb25vdXNseSB2aWEgYHNldFRpbWVvdXQoZm4sIGRlbGF5KWAuXG4gICAqXG4gICAqIFVubGlrZSB3aGVuIGNhbGxpbmcgYHNldFRpbWVvdXRgIGRpcmVjdGx5LCBpbiB0ZXN0IHRoaXMgZnVuY3Rpb24gaXMgbW9ja2VkIGFuZCBpbnN0ZWFkIG9mIHVzaW5nXG4gICAqIGBzZXRUaW1lb3V0YCBpbiB0ZXN0cywgdGhlIGZucyBhcmUgcXVldWVkIGluIGFuIGFycmF5LCB3aGljaCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBmbHVzaGVkXG4gICAqIHZpYSBgJGJyb3dzZXIuZGVmZXIuZmx1c2goKWAuXG4gICAqXG4gICAqL1xuICBzZWxmLmRlZmVyID0gZnVuY3Rpb24oZm4sIGRlbGF5KSB7XG4gICAgdmFyIHRpbWVvdXRJZDtcbiAgICBvdXRzdGFuZGluZ1JlcXVlc3RDb3VudCsrO1xuICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBkZWxldGUgcGVuZGluZ0RlZmVySWRzW3RpbWVvdXRJZF07XG4gICAgICBjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdChmbik7XG4gICAgfSwgZGVsYXkgfHwgMCk7XG4gICAgcGVuZGluZ0RlZmVySWRzW3RpbWVvdXRJZF0gPSB0cnVlO1xuICAgIHJldHVybiB0aW1lb3V0SWQ7XG4gIH07XG5cblxuICAvKipcbiAgICogQG5hbWUgJGJyb3dzZXIjZGVmZXIuY2FuY2VsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDYW5jZWxzIGEgZGVmZXJyZWQgdGFzayBpZGVudGlmaWVkIHdpdGggYGRlZmVySWRgLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IGRlZmVySWQgVG9rZW4gcmV0dXJuZWQgYnkgdGhlIGAkYnJvd3Nlci5kZWZlcmAgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdGFzayBoYXNuJ3QgZXhlY3V0ZWQgeWV0IGFuZCB3YXMgc3VjY2Vzc2Z1bGx5XG4gICAqICAgICAgICAgICAgICAgICAgICBjYW5jZWxlZC5cbiAgICovXG4gIHNlbGYuZGVmZXIuY2FuY2VsID0gZnVuY3Rpb24oZGVmZXJJZCkge1xuICAgIGlmIChwZW5kaW5nRGVmZXJJZHNbZGVmZXJJZF0pIHtcbiAgICAgIGRlbGV0ZSBwZW5kaW5nRGVmZXJJZHNbZGVmZXJJZF07XG4gICAgICBjbGVhclRpbWVvdXQoZGVmZXJJZCk7XG4gICAgICBjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdChub29wKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbn1cblxuZnVuY3Rpb24gJEJyb3dzZXJQcm92aWRlcigpIHtcbiAgdGhpcy4kZ2V0ID0gWyckd2luZG93JywgJyRsb2cnLCAnJHNuaWZmZXInLCAnJGRvY3VtZW50JyxcbiAgICAgIGZ1bmN0aW9uKCR3aW5kb3csICRsb2csICRzbmlmZmVyLCAkZG9jdW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCcm93c2VyKCR3aW5kb3csICRkb2N1bWVudCwgJGxvZywgJHNuaWZmZXIpO1xuICAgICAgfV07XG59XG5cbi8qKlxuICogQG5nZG9jIHNlcnZpY2VcbiAqIEBuYW1lICRjYWNoZUZhY3RvcnlcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEZhY3RvcnkgdGhhdCBjb25zdHJ1Y3RzIHtAbGluayAkY2FjaGVGYWN0b3J5LkNhY2hlIENhY2hlfSBvYmplY3RzIGFuZCBnaXZlcyBhY2Nlc3MgdG9cbiAqIHRoZW0uXG4gKlxuICogYGBganNcbiAqXG4gKiAgdmFyIGNhY2hlID0gJGNhY2hlRmFjdG9yeSgnY2FjaGVJZCcpO1xuICogIGV4cGVjdCgkY2FjaGVGYWN0b3J5LmdldCgnY2FjaGVJZCcpKS50b0JlKGNhY2hlKTtcbiAqICBleHBlY3QoJGNhY2hlRmFjdG9yeS5nZXQoJ25vU3VjaENhY2hlSWQnKSkubm90LnRvQmVEZWZpbmVkKCk7XG4gKlxuICogIGNhY2hlLnB1dChcImtleVwiLCBcInZhbHVlXCIpO1xuICogIGNhY2hlLnB1dChcImFub3RoZXIga2V5XCIsIFwiYW5vdGhlciB2YWx1ZVwiKTtcbiAqXG4gKiAgLy8gV2UndmUgc3BlY2lmaWVkIG5vIG9wdGlvbnMgb24gY3JlYXRpb25cbiAqICBleHBlY3QoY2FjaGUuaW5mbygpKS50b0VxdWFsKHtpZDogJ2NhY2hlSWQnLCBzaXplOiAyfSk7XG4gKlxuICogYGBgXG4gKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZUlkIE5hbWUgb3IgaWQgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgY2FjaGUuXG4gKiBAcGFyYW0ge29iamVjdD19IG9wdGlvbnMgT3B0aW9ucyBvYmplY3QgdGhhdCBzcGVjaWZpZXMgdGhlIGNhY2hlIGJlaGF2aW9yLiBQcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBge251bWJlcj19YCBgY2FwYWNpdHlgIOKAlCB0dXJucyB0aGUgY2FjaGUgaW50byBMUlUgY2FjaGUuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gTmV3bHkgY3JlYXRlZCBjYWNoZSBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHNldCBvZiBtZXRob2RzOlxuICpcbiAqIC0gYHtvYmplY3R9YCBgaW5mbygpYCDigJQgUmV0dXJucyBpZCwgc2l6ZSwgYW5kIG9wdGlvbnMgb2YgY2FjaGUuXG4gKiAtIGB7eyp9fWAgYHB1dCh7c3RyaW5nfSBrZXksIHsqfSB2YWx1ZSlgIOKAlCBQdXRzIGEgbmV3IGtleS12YWx1ZSBwYWlyIGludG8gdGhlIGNhY2hlIGFuZCByZXR1cm5zXG4gKiAgIGl0LlxuICogLSBge3sqfX1gIGBnZXQoe3N0cmluZ30ga2V5KWAg4oCUIFJldHVybnMgY2FjaGVkIHZhbHVlIGZvciBga2V5YCBvciB1bmRlZmluZWQgZm9yIGNhY2hlIG1pc3MuXG4gKiAtIGB7dm9pZH1gIGByZW1vdmUoe3N0cmluZ30ga2V5KWAg4oCUIFJlbW92ZXMgYSBrZXktdmFsdWUgcGFpciBmcm9tIHRoZSBjYWNoZS5cbiAqIC0gYHt2b2lkfWAgYHJlbW92ZUFsbCgpYCDigJQgUmVtb3ZlcyBhbGwgY2FjaGVkIHZhbHVlcy5cbiAqIC0gYHt2b2lkfWAgYGRlc3Ryb3koKWAg4oCUIFJlbW92ZXMgcmVmZXJlbmNlcyB0byB0aGlzIGNhY2hlIGZyb20gJGNhY2hlRmFjdG9yeS5cbiAqXG4gKiBAZXhhbXBsZVxuICAgPGV4YW1wbGUgbW9kdWxlPVwiY2FjaGVFeGFtcGxlQXBwXCI+XG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiQ2FjaGVDb250cm9sbGVyXCI+XG4gICAgICAgICA8aW5wdXQgbmctbW9kZWw9XCJuZXdDYWNoZUtleVwiIHBsYWNlaG9sZGVyPVwiS2V5XCI+XG4gICAgICAgICA8aW5wdXQgbmctbW9kZWw9XCJuZXdDYWNoZVZhbHVlXCIgcGxhY2Vob2xkZXI9XCJWYWx1ZVwiPlxuICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz1cInB1dChuZXdDYWNoZUtleSwgbmV3Q2FjaGVWYWx1ZSlcIj5DYWNoZTwvYnV0dG9uPlxuXG4gICAgICAgICA8cCBuZy1pZj1cImtleXMubGVuZ3RoXCI+Q2FjaGVkIFZhbHVlczwvcD5cbiAgICAgICAgIDxkaXYgbmctcmVwZWF0PVwia2V5IGluIGtleXNcIj5cbiAgICAgICAgICAgPHNwYW4gbmctYmluZD1cImtleVwiPjwvc3Bhbj5cbiAgICAgICAgICAgPHNwYW4+OiA8L3NwYW4+XG4gICAgICAgICAgIDxiIG5nLWJpbmQ9XCJjYWNoZS5nZXQoa2V5KVwiPjwvYj5cbiAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICA8cD5DYWNoZSBJbmZvPC9wPlxuICAgICAgICAgPGRpdiBuZy1yZXBlYXQ9XCIoa2V5LCB2YWx1ZSkgaW4gY2FjaGUuaW5mbygpXCI+XG4gICAgICAgICAgIDxzcGFuIG5nLWJpbmQ9XCJrZXlcIj48L3NwYW4+XG4gICAgICAgICAgIDxzcGFuPjogPC9zcGFuPlxuICAgICAgICAgICA8YiBuZy1iaW5kPVwidmFsdWVcIj48L2I+XG4gICAgICAgICA8L2Rpdj5cbiAgICAgICA8L2Rpdj5cbiAgICAgPC9maWxlPlxuICAgICA8ZmlsZSBuYW1lPVwic2NyaXB0LmpzXCI+XG4gICAgICAgYW5ndWxhci5tb2R1bGUoJ2NhY2hlRXhhbXBsZUFwcCcsIFtdKS5cbiAgICAgICAgIGNvbnRyb2xsZXIoJ0NhY2hlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRjYWNoZUZhY3RvcnknLCBmdW5jdGlvbigkc2NvcGUsICRjYWNoZUZhY3RvcnkpIHtcbiAgICAgICAgICAgJHNjb3BlLmtleXMgPSBbXTtcbiAgICAgICAgICAgJHNjb3BlLmNhY2hlID0gJGNhY2hlRmFjdG9yeSgnY2FjaGVJZCcpO1xuICAgICAgICAgICAkc2NvcGUucHV0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgIGlmICgkc2NvcGUuY2FjaGUuZ2V0KGtleSkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgJHNjb3BlLmtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAkc2NvcGUuY2FjaGUucHV0KGtleSwgdmFsdWUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB2YWx1ZSk7XG4gICAgICAgICAgIH07XG4gICAgICAgICB9XSk7XG4gICAgIDwvZmlsZT5cbiAgICAgPGZpbGUgbmFtZT1cInN0eWxlLmNzc1wiPlxuICAgICAgIHAge1xuICAgICAgICAgbWFyZ2luOiAxMHB4IDAgM3B4O1xuICAgICAgIH1cbiAgICAgPC9maWxlPlxuICAgPC9leGFtcGxlPlxuICovXG5mdW5jdGlvbiAkQ2FjaGVGYWN0b3J5UHJvdmlkZXIoKSB7XG5cbiAgdGhpcy4kZ2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNhY2hlcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gY2FjaGVGYWN0b3J5KGNhY2hlSWQsIG9wdGlvbnMpIHtcbiAgICAgIGlmIChjYWNoZUlkIGluIGNhY2hlcykge1xuICAgICAgICB0aHJvdyBtaW5FcnIoJyRjYWNoZUZhY3RvcnknKSgnaWlkJywgXCJDYWNoZUlkICd7MH0nIGlzIGFscmVhZHkgdGFrZW4hXCIsIGNhY2hlSWQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2l6ZSA9IDAsXG4gICAgICAgICAgc3RhdHMgPSBleHRlbmQoe30sIG9wdGlvbnMsIHtpZDogY2FjaGVJZH0pLFxuICAgICAgICAgIGRhdGEgPSB7fSxcbiAgICAgICAgICBjYXBhY2l0eSA9IChvcHRpb25zICYmIG9wdGlvbnMuY2FwYWNpdHkpIHx8IE51bWJlci5NQVhfVkFMVUUsXG4gICAgICAgICAgbHJ1SGFzaCA9IHt9LFxuICAgICAgICAgIGZyZXNoRW5kID0gbnVsbCxcbiAgICAgICAgICBzdGFsZUVuZCA9IG51bGw7XG5cbiAgICAgIC8qKlxuICAgICAgICogQG5nZG9jIHR5cGVcbiAgICAgICAqIEBuYW1lICRjYWNoZUZhY3RvcnkuQ2FjaGVcbiAgICAgICAqXG4gICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAqIEEgY2FjaGUgb2JqZWN0IHVzZWQgdG8gc3RvcmUgYW5kIHJldHJpZXZlIGRhdGEsIHByaW1hcmlseSB1c2VkIGJ5XG4gICAgICAgKiB7QGxpbmsgJGh0dHAgJGh0dHB9IGFuZCB0aGUge0BsaW5rIG5nLmRpcmVjdGl2ZTpzY3JpcHQgc2NyaXB0fSBkaXJlY3RpdmUgdG8gY2FjaGVcbiAgICAgICAqIHRlbXBsYXRlcyBhbmQgb3RoZXIgZGF0YS5cbiAgICAgICAqXG4gICAgICAgKiBgYGBqc1xuICAgICAgICogIGFuZ3VsYXIubW9kdWxlKCdzdXBlckNhY2hlJylcbiAgICAgICAqICAgIC5mYWN0b3J5KCdzdXBlckNhY2hlJywgWyckY2FjaGVGYWN0b3J5JywgZnVuY3Rpb24oJGNhY2hlRmFjdG9yeSkge1xuICAgICAgICogICAgICByZXR1cm4gJGNhY2hlRmFjdG9yeSgnc3VwZXItY2FjaGUnKTtcbiAgICAgICAqICAgIH1dKTtcbiAgICAgICAqIGBgYFxuICAgICAgICpcbiAgICAgICAqIEV4YW1wbGUgdGVzdDpcbiAgICAgICAqXG4gICAgICAgKiBgYGBqc1xuICAgICAgICogIGl0KCdzaG91bGQgYmVoYXZlIGxpa2UgYSBjYWNoZScsIGluamVjdChmdW5jdGlvbihzdXBlckNhY2hlKSB7XG4gICAgICAgKiAgICBzdXBlckNhY2hlLnB1dCgna2V5JywgJ3ZhbHVlJyk7XG4gICAgICAgKiAgICBzdXBlckNhY2hlLnB1dCgnYW5vdGhlciBrZXknLCAnYW5vdGhlciB2YWx1ZScpO1xuICAgICAgICpcbiAgICAgICAqICAgIGV4cGVjdChzdXBlckNhY2hlLmluZm8oKSkudG9FcXVhbCh7XG4gICAgICAgKiAgICAgIGlkOiAnc3VwZXItY2FjaGUnLFxuICAgICAgICogICAgICBzaXplOiAyXG4gICAgICAgKiAgICB9KTtcbiAgICAgICAqXG4gICAgICAgKiAgICBzdXBlckNhY2hlLnJlbW92ZSgnYW5vdGhlciBrZXknKTtcbiAgICAgICAqICAgIGV4cGVjdChzdXBlckNhY2hlLmdldCgnYW5vdGhlciBrZXknKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgICAgICpcbiAgICAgICAqICAgIHN1cGVyQ2FjaGUucmVtb3ZlQWxsKCk7XG4gICAgICAgKiAgICBleHBlY3Qoc3VwZXJDYWNoZS5pbmZvKCkpLnRvRXF1YWwoe1xuICAgICAgICogICAgICBpZDogJ3N1cGVyLWNhY2hlJyxcbiAgICAgICAqICAgICAgc2l6ZTogMFxuICAgICAgICogICAgfSk7XG4gICAgICAgKiAgfSkpO1xuICAgICAgICogYGBgXG4gICAgICAgKi9cbiAgICAgIHJldHVybiBjYWNoZXNbY2FjaGVJZF0gPSB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICAgICogQG5hbWUgJGNhY2hlRmFjdG9yeS5DYWNoZSNwdXRcbiAgICAgICAgICogQGtpbmQgZnVuY3Rpb25cbiAgICAgICAgICpcbiAgICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgICAqIEluc2VydHMgYSBuYW1lZCBlbnRyeSBpbnRvIHRoZSB7QGxpbmsgJGNhY2hlRmFjdG9yeS5DYWNoZSBDYWNoZX0gb2JqZWN0IHRvIGJlXG4gICAgICAgICAqIHJldHJpZXZlZCBsYXRlciwgYW5kIGluY3JlbWVudGluZyB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgaWYgdGhlIGtleSB3YXMgbm90IGFscmVhZHlcbiAgICAgICAgICogcHJlc2VudCBpbiB0aGUgY2FjaGUuIElmIGJlaGF2aW5nIGxpa2UgYW4gTFJVIGNhY2hlLCBpdCB3aWxsIGFsc28gcmVtb3ZlIHN0YWxlXG4gICAgICAgICAqIGVudHJpZXMgZnJvbSB0aGUgc2V0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBJdCB3aWxsIG5vdCBpbnNlcnQgdW5kZWZpbmVkIHZhbHVlcyBpbnRvIHRoZSBjYWNoZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSB0aGUga2V5IHVuZGVyIHdoaWNoIHRoZSBjYWNoZWQgZGF0YSBpcyBzdG9yZWQuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgdGhlIHZhbHVlIHRvIHN0b3JlIGFsb25nc2lkZSB0aGUga2V5LiBJZiBpdCBpcyB1bmRlZmluZWQsIHRoZSBrZXlcbiAgICAgICAgICogICAgd2lsbCBub3QgYmUgc3RvcmVkLlxuICAgICAgICAgKiBAcmV0dXJucyB7Kn0gdGhlIHZhbHVlIHN0b3JlZC5cbiAgICAgICAgICovXG4gICAgICAgIHB1dDogZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICAgIGlmIChjYXBhY2l0eSA8IE51bWJlci5NQVhfVkFMVUUpIHtcbiAgICAgICAgICAgIHZhciBscnVFbnRyeSA9IGxydUhhc2hba2V5XSB8fCAobHJ1SGFzaFtrZXldID0ge2tleToga2V5fSk7XG5cbiAgICAgICAgICAgIHJlZnJlc2gobHJ1RW50cnkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcbiAgICAgICAgICBpZiAoIShrZXkgaW4gZGF0YSkpIHNpemUrKztcbiAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcblxuICAgICAgICAgIGlmIChzaXplID4gY2FwYWNpdHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKHN0YWxlRW5kLmtleSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICAgICAqIEBuYW1lICRjYWNoZUZhY3RvcnkuQ2FjaGUjZ2V0XG4gICAgICAgICAqIEBraW5kIGZ1bmN0aW9uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgICAgKiBSZXRyaWV2ZXMgbmFtZWQgZGF0YSBzdG9yZWQgaW4gdGhlIHtAbGluayAkY2FjaGVGYWN0b3J5LkNhY2hlIENhY2hlfSBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdGhlIGtleSBvZiB0aGUgZGF0YSB0byBiZSByZXRyaWV2ZWRcbiAgICAgICAgICogQHJldHVybnMgeyp9IHRoZSB2YWx1ZSBzdG9yZWQuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgIGlmIChjYXBhY2l0eSA8IE51bWJlci5NQVhfVkFMVUUpIHtcbiAgICAgICAgICAgIHZhciBscnVFbnRyeSA9IGxydUhhc2hba2V5XTtcblxuICAgICAgICAgICAgaWYgKCFscnVFbnRyeSkgcmV0dXJuO1xuXG4gICAgICAgICAgICByZWZyZXNoKGxydUVudHJ5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZGF0YVtrZXldO1xuICAgICAgICB9LFxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICAgICogQG5hbWUgJGNhY2hlRmFjdG9yeS5DYWNoZSNyZW1vdmVcbiAgICAgICAgICogQGtpbmQgZnVuY3Rpb25cbiAgICAgICAgICpcbiAgICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgICAqIFJlbW92ZXMgYW4gZW50cnkgZnJvbSB0aGUge0BsaW5rICRjYWNoZUZhY3RvcnkuQ2FjaGUgQ2FjaGV9IG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSB0aGUga2V5IG9mIHRoZSBlbnRyeSB0byBiZSByZW1vdmVkXG4gICAgICAgICAqL1xuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgIGlmIChjYXBhY2l0eSA8IE51bWJlci5NQVhfVkFMVUUpIHtcbiAgICAgICAgICAgIHZhciBscnVFbnRyeSA9IGxydUhhc2hba2V5XTtcblxuICAgICAgICAgICAgaWYgKCFscnVFbnRyeSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBpZiAobHJ1RW50cnkgPT0gZnJlc2hFbmQpIGZyZXNoRW5kID0gbHJ1RW50cnkucDtcbiAgICAgICAgICAgIGlmIChscnVFbnRyeSA9PSBzdGFsZUVuZCkgc3RhbGVFbmQgPSBscnVFbnRyeS5uO1xuICAgICAgICAgICAgbGluayhscnVFbnRyeS5uLGxydUVudHJ5LnApO1xuXG4gICAgICAgICAgICBkZWxldGUgbHJ1SGFzaFtrZXldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRlbGV0ZSBkYXRhW2tleV07XG4gICAgICAgICAgc2l6ZS0tO1xuICAgICAgICB9LFxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICAgICogQG5hbWUgJGNhY2hlRmFjdG9yeS5DYWNoZSNyZW1vdmVBbGxcbiAgICAgICAgICogQGtpbmQgZnVuY3Rpb25cbiAgICAgICAgICpcbiAgICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgICAqIENsZWFycyB0aGUgY2FjaGUgb2JqZWN0IG9mIGFueSBlbnRyaWVzLlxuICAgICAgICAgKi9cbiAgICAgICAgcmVtb3ZlQWxsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBkYXRhID0ge307XG4gICAgICAgICAgc2l6ZSA9IDA7XG4gICAgICAgICAgbHJ1SGFzaCA9IHt9O1xuICAgICAgICAgIGZyZXNoRW5kID0gc3RhbGVFbmQgPSBudWxsO1xuICAgICAgICB9LFxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICAgICogQG5hbWUgJGNhY2hlRmFjdG9yeS5DYWNoZSNkZXN0cm95XG4gICAgICAgICAqIEBraW5kIGZ1bmN0aW9uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgICAgKiBEZXN0cm95cyB0aGUge0BsaW5rICRjYWNoZUZhY3RvcnkuQ2FjaGUgQ2FjaGV9IG9iamVjdCBlbnRpcmVseSxcbiAgICAgICAgICogcmVtb3ZpbmcgaXQgZnJvbSB0aGUge0BsaW5rICRjYWNoZUZhY3RvcnkgJGNhY2hlRmFjdG9yeX0gc2V0LlxuICAgICAgICAgKi9cbiAgICAgICAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZGF0YSA9IG51bGw7XG4gICAgICAgICAgc3RhdHMgPSBudWxsO1xuICAgICAgICAgIGxydUhhc2ggPSBudWxsO1xuICAgICAgICAgIGRlbGV0ZSBjYWNoZXNbY2FjaGVJZF07XG4gICAgICAgIH0sXG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICAgKiBAbmFtZSAkY2FjaGVGYWN0b3J5LkNhY2hlI2luZm9cbiAgICAgICAgICogQGtpbmQgZnVuY3Rpb25cbiAgICAgICAgICpcbiAgICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgICAqIFJldHJpZXZlIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBhIHBhcnRpY3VsYXIge0BsaW5rICRjYWNoZUZhY3RvcnkuQ2FjaGUgQ2FjaGV9LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAgICAgICAqICAgPHVsPlxuICAgICAgICAgKiAgICAgPGxpPioqaWQqKjogdGhlIGlkIG9mIHRoZSBjYWNoZSBpbnN0YW5jZTwvbGk+XG4gICAgICAgICAqICAgICA8bGk+KipzaXplKio6IHRoZSBudW1iZXIgb2YgZW50cmllcyBrZXB0IGluIHRoZSBjYWNoZSBpbnN0YW5jZTwvbGk+XG4gICAgICAgICAqICAgICA8bGk+KiouLi4qKjogYW55IGFkZGl0aW9uYWwgcHJvcGVydGllcyBmcm9tIHRoZSBvcHRpb25zIG9iamVjdCB3aGVuIGNyZWF0aW5nIHRoZVxuICAgICAgICAgKiAgICAgICBjYWNoZS48L2xpPlxuICAgICAgICAgKiAgIDwvdWw+XG4gICAgICAgICAqL1xuICAgICAgICBpbmZvOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBzdGF0cywge3NpemU6IHNpemV9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuXG4gICAgICAvKipcbiAgICAgICAqIG1ha2VzIHRoZSBgZW50cnlgIHRoZSBmcmVzaEVuZCBvZiB0aGUgTFJVIGxpbmtlZCBsaXN0XG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIHJlZnJlc2goZW50cnkpIHtcbiAgICAgICAgaWYgKGVudHJ5ICE9IGZyZXNoRW5kKSB7XG4gICAgICAgICAgaWYgKCFzdGFsZUVuZCkge1xuICAgICAgICAgICAgc3RhbGVFbmQgPSBlbnRyeTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YWxlRW5kID09IGVudHJ5KSB7XG4gICAgICAgICAgICBzdGFsZUVuZCA9IGVudHJ5Lm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGluayhlbnRyeS5uLCBlbnRyeS5wKTtcbiAgICAgICAgICBsaW5rKGVudHJ5LCBmcmVzaEVuZCk7XG4gICAgICAgICAgZnJlc2hFbmQgPSBlbnRyeTtcbiAgICAgICAgICBmcmVzaEVuZC5uID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG5cbiAgICAgIC8qKlxuICAgICAgICogYmlkaXJlY3Rpb25hbGx5IGxpbmtzIHR3byBlbnRyaWVzIG9mIHRoZSBMUlUgbGlua2VkIGxpc3RcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gbGluayhuZXh0RW50cnksIHByZXZFbnRyeSkge1xuICAgICAgICBpZiAobmV4dEVudHJ5ICE9IHByZXZFbnRyeSkge1xuICAgICAgICAgIGlmIChuZXh0RW50cnkpIG5leHRFbnRyeS5wID0gcHJldkVudHJ5OyAvL3Agc3RhbmRzIGZvciBwcmV2aW91cywgJ3ByZXYnIGRpZG4ndCBtaW5pZnlcbiAgICAgICAgICBpZiAocHJldkVudHJ5KSBwcmV2RW50cnkubiA9IG5leHRFbnRyeTsgLy9uIHN0YW5kcyBmb3IgbmV4dCwgJ25leHQnIGRpZG4ndCBtaW5pZnlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuXG4gIC8qKlxuICAgKiBAbmdkb2MgbWV0aG9kXG4gICAqIEBuYW1lICRjYWNoZUZhY3RvcnkjaW5mb1xuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogR2V0IGluZm9ybWF0aW9uIGFib3V0IGFsbCB0aGUgY2FjaGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWRcbiAgICpcbiAgICogQHJldHVybnMge09iamVjdH0gLSBrZXktdmFsdWUgbWFwIG9mIGBjYWNoZUlkYCB0byB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgYGNhY2hlI2luZm9gXG4gICAqL1xuICAgIGNhY2hlRmFjdG9yeS5pbmZvID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaW5mbyA9IHt9O1xuICAgICAgZm9yRWFjaChjYWNoZXMsIGZ1bmN0aW9uKGNhY2hlLCBjYWNoZUlkKSB7XG4gICAgICAgIGluZm9bY2FjaGVJZF0gPSBjYWNoZS5pbmZvKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH07XG5cblxuICAvKipcbiAgICogQG5nZG9jIG1ldGhvZFxuICAgKiBAbmFtZSAkY2FjaGVGYWN0b3J5I2dldFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogR2V0IGFjY2VzcyB0byBhIGNhY2hlIG9iamVjdCBieSB0aGUgYGNhY2hlSWRgIHVzZWQgd2hlbiBpdCB3YXMgY3JlYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlSWQgTmFtZSBvciBpZCBvZiBhIGNhY2hlIHRvIGFjY2Vzcy5cbiAgICogQHJldHVybnMge29iamVjdH0gQ2FjaGUgb2JqZWN0IGlkZW50aWZpZWQgYnkgdGhlIGNhY2hlSWQgb3IgdW5kZWZpbmVkIGlmIG5vIHN1Y2ggY2FjaGUuXG4gICAqL1xuICAgIGNhY2hlRmFjdG9yeS5nZXQgPSBmdW5jdGlvbihjYWNoZUlkKSB7XG4gICAgICByZXR1cm4gY2FjaGVzW2NhY2hlSWRdO1xuICAgIH07XG5cblxuICAgIHJldHVybiBjYWNoZUZhY3Rvcnk7XG4gIH07XG59XG5cbi8qKlxuICogQG5nZG9jIHNlcnZpY2VcbiAqIEBuYW1lICR0ZW1wbGF0ZUNhY2hlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgZmlyc3QgdGltZSBhIHRlbXBsYXRlIGlzIHVzZWQsIGl0IGlzIGxvYWRlZCBpbiB0aGUgdGVtcGxhdGUgY2FjaGUgZm9yIHF1aWNrIHJldHJpZXZhbC4gWW91XG4gKiBjYW4gbG9hZCB0ZW1wbGF0ZXMgZGlyZWN0bHkgaW50byB0aGUgY2FjaGUgaW4gYSBgc2NyaXB0YCB0YWcsIG9yIGJ5IGNvbnN1bWluZyB0aGVcbiAqIGAkdGVtcGxhdGVDYWNoZWAgc2VydmljZSBkaXJlY3RseS5cbiAqXG4gKiBBZGRpbmcgdmlhIHRoZSBgc2NyaXB0YCB0YWc6XG4gKlxuICogYGBgaHRtbFxuICogICA8c2NyaXB0IHR5cGU9XCJ0ZXh0L25nLXRlbXBsYXRlXCIgaWQ9XCJ0ZW1wbGF0ZUlkLmh0bWxcIj5cbiAqICAgICA8cD5UaGlzIGlzIHRoZSBjb250ZW50IG9mIHRoZSB0ZW1wbGF0ZTwvcD5cbiAqICAgPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiAqKk5vdGU6KiogdGhlIGBzY3JpcHRgIHRhZyBjb250YWluaW5nIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBuZWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBgaGVhZGAgb2ZcbiAqIHRoZSBkb2N1bWVudCwgYnV0IGl0IG11c3QgYmUgYSBkZXNjZW5kZW50IG9mIHRoZSB7QGxpbmsgbmcuJHJvb3RFbGVtZW50ICRyb290RWxlbWVudH0gKElFLFxuICogZWxlbWVudCB3aXRoIG5nLWFwcCBhdHRyaWJ1dGUpLCBvdGhlcndpc2UgdGhlIHRlbXBsYXRlIHdpbGwgYmUgaWdub3JlZC5cbiAqXG4gKiBBZGRpbmcgdmlhIHRoZSAkdGVtcGxhdGVDYWNoZSBzZXJ2aWNlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbXlBcHAgPSBhbmd1bGFyLm1vZHVsZSgnbXlBcHAnLCBbXSk7XG4gKiBteUFwcC5ydW4oZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHtcbiAqICAgJHRlbXBsYXRlQ2FjaGUucHV0KCd0ZW1wbGF0ZUlkLmh0bWwnLCAnVGhpcyBpcyB0aGUgY29udGVudCBvZiB0aGUgdGVtcGxhdGUnKTtcbiAqIH0pO1xuICogYGBgXG4gKlxuICogVG8gcmV0cmlldmUgdGhlIHRlbXBsYXRlIGxhdGVyLCBzaW1wbHkgdXNlIGl0IGluIHlvdXIgSFRNTDpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgbmctaW5jbHVkZT1cIiAndGVtcGxhdGVJZC5odG1sJyBcIj48L2Rpdj5cbiAqIGBgYFxuICpcbiAqIG9yIGdldCBpdCB2aWEgSmF2YXNjcmlwdDpcbiAqIGBgYGpzXG4gKiAkdGVtcGxhdGVDYWNoZS5nZXQoJ3RlbXBsYXRlSWQuaHRtbCcpXG4gKiBgYGBcbiAqXG4gKiBTZWUge0BsaW5rIG5nLiRjYWNoZUZhY3RvcnkgJGNhY2hlRmFjdG9yeX0uXG4gKlxuICovXG5mdW5jdGlvbiAkVGVtcGxhdGVDYWNoZVByb3ZpZGVyKCkge1xuICB0aGlzLiRnZXQgPSBbJyRjYWNoZUZhY3RvcnknLCBmdW5jdGlvbigkY2FjaGVGYWN0b3J5KSB7XG4gICAgcmV0dXJuICRjYWNoZUZhY3RvcnkoJ3RlbXBsYXRlcycpO1xuICB9XTtcbn1cblxuLyogISBWQVJJQUJMRS9GVU5DVElPTiBOQU1JTkcgQ09OVkVOVElPTlMgVEhBVCBBUFBMWSBUTyBUSElTIEZJTEUhXG4gKlxuICogRE9NLXJlbGF0ZWQgdmFyaWFibGVzOlxuICpcbiAqIC0gXCJub2RlXCIgLSBET00gTm9kZVxuICogLSBcImVsZW1lbnRcIiAtIERPTSBFbGVtZW50IG9yIE5vZGVcbiAqIC0gXCIkbm9kZVwiIG9yIFwiJGVsZW1lbnRcIiAtIGpxTGl0ZS13cmFwcGVkIG5vZGUgb3IgZWxlbWVudFxuICpcbiAqXG4gKiBDb21waWxlciByZWxhdGVkIHN0dWZmOlxuICpcbiAqIC0gXCJsaW5rRm5cIiAtIGxpbmtpbmcgZm4gb2YgYSBzaW5nbGUgZGlyZWN0aXZlXG4gKiAtIFwibm9kZUxpbmtGblwiIC0gZnVuY3Rpb24gdGhhdCBhZ2dyZWdhdGVzIGFsbCBsaW5raW5nIGZucyBmb3IgYSBwYXJ0aWN1bGFyIG5vZGVcbiAqIC0gXCJjaGlsZExpbmtGblwiIC0gIGZ1bmN0aW9uIHRoYXQgYWdncmVnYXRlcyBhbGwgbGlua2luZyBmbnMgZm9yIGNoaWxkIG5vZGVzIG9mIGEgcGFydGljdWxhciBub2RlXG4gKiAtIFwiY29tcG9zaXRlTGlua0ZuXCIgLSBmdW5jdGlvbiB0aGF0IGFnZ3JlZ2F0ZXMgYWxsIGxpbmtpbmcgZm5zIGZvciBhIGNvbXBpbGF0aW9uIHJvb3QgKG5vZGVMaXN0KVxuICovXG5cblxuLyoqXG4gKiBAbmdkb2Mgc2VydmljZVxuICogQG5hbWUgJGNvbXBpbGVcbiAqIEBraW5kIGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb21waWxlcyBhbiBIVE1MIHN0cmluZyBvciBET00gaW50byBhIHRlbXBsYXRlIGFuZCBwcm9kdWNlcyBhIHRlbXBsYXRlIGZ1bmN0aW9uLCB3aGljaFxuICogY2FuIHRoZW4gYmUgdXNlZCB0byBsaW5rIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIGBzY29wZWB9IGFuZCB0aGUgdGVtcGxhdGUgdG9nZXRoZXIuXG4gKlxuICogVGhlIGNvbXBpbGF0aW9uIGlzIGEgcHJvY2VzcyBvZiB3YWxraW5nIHRoZSBET00gdHJlZSBhbmQgbWF0Y2hpbmcgRE9NIGVsZW1lbnRzIHRvXG4gKiB7QGxpbmsgbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmUgZGlyZWN0aXZlc30uXG4gKlxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIj5cbiAqICoqTm90ZToqKiBUaGlzIGRvY3VtZW50IGlzIGFuIGluLWRlcHRoIHJlZmVyZW5jZSBvZiBhbGwgZGlyZWN0aXZlIG9wdGlvbnMuXG4gKiBGb3IgYSBnZW50bGUgaW50cm9kdWN0aW9uIHRvIGRpcmVjdGl2ZXMgd2l0aCBleGFtcGxlcyBvZiBjb21tb24gdXNlIGNhc2VzLFxuICogc2VlIHRoZSB7QGxpbmsgZ3VpZGUvZGlyZWN0aXZlIGRpcmVjdGl2ZSBndWlkZX0uXG4gKiA8L2Rpdj5cbiAqXG4gKiAjIyBDb21wcmVoZW5zaXZlIERpcmVjdGl2ZSBBUElcbiAqXG4gKiBUaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgb3B0aW9ucyBmb3IgYSBkaXJlY3RpdmUuXG4gKlxuICogVGhlIGRpZmZlcmVuY2UgcmVzaWRlcyBpbiB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmYWN0b3J5IGZ1bmN0aW9uLlxuICogWW91IGNhbiBlaXRoZXIgcmV0dXJuIGEgXCJEaXJlY3RpdmUgRGVmaW5pdGlvbiBPYmplY3RcIiAoc2VlIGJlbG93KSB0aGF0IGRlZmluZXMgdGhlIGRpcmVjdGl2ZSBwcm9wZXJ0aWVzLFxuICogb3IganVzdCB0aGUgYHBvc3RMaW5rYCBmdW5jdGlvbiAoYWxsIG90aGVyIHByb3BlcnRpZXMgd2lsbCBoYXZlIHRoZSBkZWZhdWx0IHZhbHVlcykuXG4gKlxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXN1Y2Nlc3NcIj5cbiAqICoqQmVzdCBQcmFjdGljZToqKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgXCJkaXJlY3RpdmUgZGVmaW5pdGlvbiBvYmplY3RcIiBmb3JtLlxuICogPC9kaXY+XG4gKlxuICogSGVyZSdzIGFuIGV4YW1wbGUgZGlyZWN0aXZlIGRlY2xhcmVkIHdpdGggYSBEaXJlY3RpdmUgRGVmaW5pdGlvbiBPYmplY3Q6XG4gKlxuICogYGBganNcbiAqICAgdmFyIG15TW9kdWxlID0gYW5ndWxhci5tb2R1bGUoLi4uKTtcbiAqXG4gKiAgIG15TW9kdWxlLmRpcmVjdGl2ZSgnZGlyZWN0aXZlTmFtZScsIGZ1bmN0aW9uIGZhY3RvcnkoaW5qZWN0YWJsZXMpIHtcbiAqICAgICB2YXIgZGlyZWN0aXZlRGVmaW5pdGlvbk9iamVjdCA9IHtcbiAqICAgICAgIHByaW9yaXR5OiAwLFxuICogICAgICAgdGVtcGxhdGU6ICc8ZGl2PjwvZGl2PicsIC8vIG9yIC8vIGZ1bmN0aW9uKHRFbGVtZW50LCB0QXR0cnMpIHsgLi4uIH0sXG4gKiAgICAgICAvLyBvclxuICogICAgICAgLy8gdGVtcGxhdGVVcmw6ICdkaXJlY3RpdmUuaHRtbCcsIC8vIG9yIC8vIGZ1bmN0aW9uKHRFbGVtZW50LCB0QXR0cnMpIHsgLi4uIH0sXG4gKiAgICAgICB0cmFuc2NsdWRlOiBmYWxzZSxcbiAqICAgICAgIHJlc3RyaWN0OiAnQScsXG4gKiAgICAgICB0ZW1wbGF0ZU5hbWVzcGFjZTogJ2h0bWwnLFxuICogICAgICAgc2NvcGU6IGZhbHNlLFxuICogICAgICAgY29udHJvbGxlcjogZnVuY3Rpb24oJHNjb3BlLCAkZWxlbWVudCwgJGF0dHJzLCAkdHJhbnNjbHVkZSwgb3RoZXJJbmplY3RhYmxlcykgeyAuLi4gfSxcbiAqICAgICAgIGNvbnRyb2xsZXJBczogJ3N0cmluZ0FsaWFzJyxcbiAqICAgICAgIHJlcXVpcmU6ICdzaWJsaW5nRGlyZWN0aXZlTmFtZScsIC8vIG9yIC8vIFsnXnBhcmVudERpcmVjdGl2ZU5hbWUnLCAnP29wdGlvbmFsRGlyZWN0aXZlTmFtZScsICc/Xm9wdGlvbmFsUGFyZW50J10sXG4gKiAgICAgICBjb21waWxlOiBmdW5jdGlvbiBjb21waWxlKHRFbGVtZW50LCB0QXR0cnMsIHRyYW5zY2x1ZGUpIHtcbiAqICAgICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAgICBwcmU6IGZ1bmN0aW9uIHByZUxpbmsoc2NvcGUsIEVsZW1lbnQsIGlBdHRycywgY29udHJvbGxlcikgeyAuLi4gfSxcbiAqICAgICAgICAgICBwb3N0OiBmdW5jdGlvbiBwb3N0TGluayhzY29wZSwgRWxlbWVudCwgaUF0dHJzLCBjb250cm9sbGVyKSB7IC4uLiB9XG4gKiAgICAgICAgIH1cbiAqICAgICAgICAgLy8gb3JcbiAqICAgICAgICAgLy8gcmV0dXJuIGZ1bmN0aW9uIHBvc3RMaW5rKCAuLi4gKSB7IC4uLiB9XG4gKiAgICAgICB9LFxuICogICAgICAgLy8gb3JcbiAqICAgICAgIC8vIGxpbms6IHtcbiAqICAgICAgIC8vICBwcmU6IGZ1bmN0aW9uIHByZUxpbmsoc2NvcGUsIEVsZW1lbnQsIGlBdHRycywgY29udHJvbGxlcikgeyAuLi4gfSxcbiAqICAgICAgIC8vICBwb3N0OiBmdW5jdGlvbiBwb3N0TGluayhzY29wZSwgRWxlbWVudCwgaUF0dHJzLCBjb250cm9sbGVyKSB7IC4uLiB9XG4gKiAgICAgICAvLyB9XG4gKiAgICAgICAvLyBvclxuICogICAgICAgLy8gbGluazogZnVuY3Rpb24gcG9zdExpbmsoIC4uLiApIHsgLi4uIH1cbiAqICAgICB9O1xuICogICAgIHJldHVybiBkaXJlY3RpdmVEZWZpbml0aW9uT2JqZWN0O1xuICogICB9KTtcbiAqIGBgYFxuICpcbiAqIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCI+XG4gKiAqKk5vdGU6KiogQW55IHVuc3BlY2lmaWVkIG9wdGlvbnMgd2lsbCB1c2UgdGhlIGRlZmF1bHQgdmFsdWUuIFlvdSBjYW4gc2VlIHRoZSBkZWZhdWx0IHZhbHVlcyBiZWxvdy5cbiAqIDwvZGl2PlxuICpcbiAqIFRoZXJlZm9yZSB0aGUgYWJvdmUgY2FuIGJlIHNpbXBsaWZpZWQgYXM6XG4gKlxuICogYGBganNcbiAqICAgdmFyIG15TW9kdWxlID0gYW5ndWxhci5tb2R1bGUoLi4uKTtcbiAqXG4gKiAgIG15TW9kdWxlLmRpcmVjdGl2ZSgnZGlyZWN0aXZlTmFtZScsIGZ1bmN0aW9uIGZhY3RvcnkoaW5qZWN0YWJsZXMpIHtcbiAqICAgICB2YXIgZGlyZWN0aXZlRGVmaW5pdGlvbk9iamVjdCA9IHtcbiAqICAgICAgIGxpbms6IGZ1bmN0aW9uIHBvc3RMaW5rKHNjb3BlLCBFbGVtZW50LCBpQXR0cnMpIHsgLi4uIH1cbiAqICAgICB9O1xuICogICAgIHJldHVybiBkaXJlY3RpdmVEZWZpbml0aW9uT2JqZWN0O1xuICogICAgIC8vIG9yXG4gKiAgICAgLy8gcmV0dXJuIGZ1bmN0aW9uIHBvc3RMaW5rKHNjb3BlLCBFbGVtZW50LCBpQXR0cnMpIHsgLi4uIH1cbiAqICAgfSk7XG4gKiBgYGBcbiAqXG4gKlxuICpcbiAqICMjIyBEaXJlY3RpdmUgRGVmaW5pdGlvbiBPYmplY3RcbiAqXG4gKiBUaGUgZGlyZWN0aXZlIGRlZmluaXRpb24gb2JqZWN0IHByb3ZpZGVzIGluc3RydWN0aW9ucyB0byB0aGUge0BsaW5rIG5nLiRjb21waWxlXG4gKiBjb21waWxlcn0uIFRoZSBhdHRyaWJ1dGVzIGFyZTpcbiAqXG4gKiAjIyMjIGBtdWx0RWxlbWVudGBcbiAqIFdoZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZSwgdGhlIEhUTUwgY29tcGlsZXIgd2lsbCBjb2xsZWN0IERPTSBub2RlcyBiZXR3ZWVuXG4gKiBub2RlcyB3aXRoIHRoZSBhdHRyaWJ1dGVzIGBkaXJlY3RpdmUtbmFtZS1zdGFydGAgYW5kIGBkaXJlY3RpdmUtbmFtZS1lbmRgLCBhbmQgZ3JvdXAgdGhlbVxuICogdG9nZXRoZXIgYXMgdGhlIGRpcmVjdGl2ZSBlbGVtZW50cy4gSXQgaXMgcmVjb21lbmRlZCB0aGF0IHRoaXMgZmVhdHVyZSBiZSB1c2VkIG9uIGRpcmVjdGl2ZXNcbiAqIHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgYmVoYXZpb3VyYWwgKHN1Y2ggYXMge0BsaW5rIG5nQ2xpY2t9KSwgYW5kIHdoaWNoXG4gKiBkbyBub3QgbWFuaXB1bGF0ZSBvciByZXBsYWNlIGNoaWxkIG5vZGVzIChzdWNoIGFzIHtAbGluayBuZ0luY2x1ZGV9KS5cbiAqXG4gKiAjIyMjIGBwcmlvcml0eWBcbiAqIFdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGRpcmVjdGl2ZXMgZGVmaW5lZCBvbiBhIHNpbmdsZSBET00gZWxlbWVudCwgc29tZXRpbWVzIGl0XG4gKiBpcyBuZWNlc3NhcnkgdG8gc3BlY2lmeSB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGRpcmVjdGl2ZXMgYXJlIGFwcGxpZWQuIFRoZSBgcHJpb3JpdHlgIGlzIHVzZWRcbiAqIHRvIHNvcnQgdGhlIGRpcmVjdGl2ZXMgYmVmb3JlIHRoZWlyIGBjb21waWxlYCBmdW5jdGlvbnMgZ2V0IGNhbGxlZC4gUHJpb3JpdHkgaXMgZGVmaW5lZCBhcyBhXG4gKiBudW1iZXIuIERpcmVjdGl2ZXMgd2l0aCBncmVhdGVyIG51bWVyaWNhbCBgcHJpb3JpdHlgIGFyZSBjb21waWxlZCBmaXJzdC4gUHJlLWxpbmsgZnVuY3Rpb25zXG4gKiBhcmUgYWxzbyBydW4gaW4gcHJpb3JpdHkgb3JkZXIsIGJ1dCBwb3N0LWxpbmsgZnVuY3Rpb25zIGFyZSBydW4gaW4gcmV2ZXJzZSBvcmRlci4gVGhlIG9yZGVyXG4gKiBvZiBkaXJlY3RpdmVzIHdpdGggdGhlIHNhbWUgcHJpb3JpdHkgaXMgdW5kZWZpbmVkLiBUaGUgZGVmYXVsdCBwcmlvcml0eSBpcyBgMGAuXG4gKlxuICogIyMjIyBgdGVybWluYWxgXG4gKiBJZiBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBjdXJyZW50IGBwcmlvcml0eWAgd2lsbCBiZSB0aGUgbGFzdCBzZXQgb2YgZGlyZWN0aXZlc1xuICogd2hpY2ggd2lsbCBleGVjdXRlIChhbnkgZGlyZWN0aXZlcyBhdCB0aGUgY3VycmVudCBwcmlvcml0eSB3aWxsIHN0aWxsIGV4ZWN1dGVcbiAqIGFzIHRoZSBvcmRlciBvZiBleGVjdXRpb24gb24gc2FtZSBgcHJpb3JpdHlgIGlzIHVuZGVmaW5lZCkuIE5vdGUgdGhhdCBleHByZXNzaW9uc1xuICogYW5kIG90aGVyIGRpcmVjdGl2ZXMgdXNlZCBpbiB0aGUgZGlyZWN0aXZlJ3MgdGVtcGxhdGUgd2lsbCBhbHNvIGJlIGV4Y2x1ZGVkIGZyb20gZXhlY3V0aW9uLlxuICpcbiAqICMjIyMgYHNjb3BlYFxuICogKipJZiBzZXQgdG8gYHRydWVgLCoqIHRoZW4gYSBuZXcgc2NvcGUgd2lsbCBiZSBjcmVhdGVkIGZvciB0aGlzIGRpcmVjdGl2ZS4gSWYgbXVsdGlwbGUgZGlyZWN0aXZlcyBvbiB0aGVcbiAqIHNhbWUgZWxlbWVudCByZXF1ZXN0IGEgbmV3IHNjb3BlLCBvbmx5IG9uZSBuZXcgc2NvcGUgaXMgY3JlYXRlZC4gVGhlIG5ldyBzY29wZSBydWxlIGRvZXMgbm90XG4gKiBhcHBseSBmb3IgdGhlIHJvb3Qgb2YgdGhlIHRlbXBsYXRlIHNpbmNlIHRoZSByb290IG9mIHRoZSB0ZW1wbGF0ZSBhbHdheXMgZ2V0cyBhIG5ldyBzY29wZS5cbiAqXG4gKiAqKklmIHNldCB0byBge31gIChvYmplY3QgaGFzaCksKiogdGhlbiBhIG5ldyBcImlzb2xhdGVcIiBzY29wZSBpcyBjcmVhdGVkLiBUaGUgJ2lzb2xhdGUnIHNjb3BlIGRpZmZlcnMgZnJvbVxuICogbm9ybWFsIHNjb3BlIGluIHRoYXQgaXQgZG9lcyBub3QgcHJvdG90eXBpY2FsbHkgaW5oZXJpdCBmcm9tIHRoZSBwYXJlbnQgc2NvcGUuIFRoaXMgaXMgdXNlZnVsXG4gKiB3aGVuIGNyZWF0aW5nIHJldXNhYmxlIGNvbXBvbmVudHMsIHdoaWNoIHNob3VsZCBub3QgYWNjaWRlbnRhbGx5IHJlYWQgb3IgbW9kaWZ5IGRhdGEgaW4gdGhlXG4gKiBwYXJlbnQgc2NvcGUuXG4gKlxuICogVGhlICdpc29sYXRlJyBzY29wZSB0YWtlcyBhbiBvYmplY3QgaGFzaCB3aGljaCBkZWZpbmVzIGEgc2V0IG9mIGxvY2FsIHNjb3BlIHByb3BlcnRpZXNcbiAqIGRlcml2ZWQgZnJvbSB0aGUgcGFyZW50IHNjb3BlLiBUaGVzZSBsb2NhbCBwcm9wZXJ0aWVzIGFyZSB1c2VmdWwgZm9yIGFsaWFzaW5nIHZhbHVlcyBmb3JcbiAqIHRlbXBsYXRlcy4gTG9jYWxzIGRlZmluaXRpb24gaXMgYSBoYXNoIG9mIGxvY2FsIHNjb3BlIHByb3BlcnR5IHRvIGl0cyBzb3VyY2U6XG4gKlxuICogKiBgQGAgb3IgYEBhdHRyYCAtIGJpbmQgYSBsb2NhbCBzY29wZSBwcm9wZXJ0eSB0byB0aGUgdmFsdWUgb2YgRE9NIGF0dHJpYnV0ZS4gVGhlIHJlc3VsdCBpc1xuICogICBhbHdheXMgYSBzdHJpbmcgc2luY2UgRE9NIGF0dHJpYnV0ZXMgYXJlIHN0cmluZ3MuIElmIG5vIGBhdHRyYCBuYW1lIGlzIHNwZWNpZmllZCAgdGhlbiB0aGVcbiAqICAgYXR0cmlidXRlIG5hbWUgaXMgYXNzdW1lZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgbG9jYWwgbmFtZS5cbiAqICAgR2l2ZW4gYDx3aWRnZXQgbXktYXR0cj1cImhlbGxvIHt7bmFtZX19XCI+YCBhbmQgd2lkZ2V0IGRlZmluaXRpb25cbiAqICAgb2YgYHNjb3BlOiB7IGxvY2FsTmFtZTonQG15QXR0cicgfWAsIHRoZW4gd2lkZ2V0IHNjb3BlIHByb3BlcnR5IGBsb2NhbE5hbWVgIHdpbGwgcmVmbGVjdFxuICogICB0aGUgaW50ZXJwb2xhdGVkIHZhbHVlIG9mIGBoZWxsbyB7e25hbWV9fWAuIEFzIHRoZSBgbmFtZWAgYXR0cmlidXRlIGNoYW5nZXMgc28gd2lsbCB0aGVcbiAqICAgYGxvY2FsTmFtZWAgcHJvcGVydHkgb24gdGhlIHdpZGdldCBzY29wZS4gVGhlIGBuYW1lYCBpcyByZWFkIGZyb20gdGhlIHBhcmVudCBzY29wZSAobm90XG4gKiAgIGNvbXBvbmVudCBzY29wZSkuXG4gKlxuICogKiBgPWAgb3IgYD1hdHRyYCAtIHNldCB1cCBiaS1kaXJlY3Rpb25hbCBiaW5kaW5nIGJldHdlZW4gYSBsb2NhbCBzY29wZSBwcm9wZXJ0eSBhbmQgdGhlXG4gKiAgIHBhcmVudCBzY29wZSBwcm9wZXJ0eSBvZiBuYW1lIGRlZmluZWQgdmlhIHRoZSB2YWx1ZSBvZiB0aGUgYGF0dHJgIGF0dHJpYnV0ZS4gSWYgbm8gYGF0dHJgXG4gKiAgIG5hbWUgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGFzc3VtZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIGxvY2FsIG5hbWUuXG4gKiAgIEdpdmVuIGA8d2lkZ2V0IG15LWF0dHI9XCJwYXJlbnRNb2RlbFwiPmAgYW5kIHdpZGdldCBkZWZpbml0aW9uIG9mXG4gKiAgIGBzY29wZTogeyBsb2NhbE1vZGVsOic9bXlBdHRyJyB9YCwgdGhlbiB3aWRnZXQgc2NvcGUgcHJvcGVydHkgYGxvY2FsTW9kZWxgIHdpbGwgcmVmbGVjdCB0aGVcbiAqICAgdmFsdWUgb2YgYHBhcmVudE1vZGVsYCBvbiB0aGUgcGFyZW50IHNjb3BlLiBBbnkgY2hhbmdlcyB0byBgcGFyZW50TW9kZWxgIHdpbGwgYmUgcmVmbGVjdGVkXG4gKiAgIGluIGBsb2NhbE1vZGVsYCBhbmQgYW55IGNoYW5nZXMgaW4gYGxvY2FsTW9kZWxgIHdpbGwgcmVmbGVjdCBpbiBgcGFyZW50TW9kZWxgLiBJZiB0aGUgcGFyZW50XG4gKiAgIHNjb3BlIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3QsIGl0IHdpbGwgdGhyb3cgYSBOT05fQVNTSUdOQUJMRV9NT0RFTF9FWFBSRVNTSU9OIGV4Y2VwdGlvbi4gWW91XG4gKiAgIGNhbiBhdm9pZCB0aGlzIGJlaGF2aW9yIHVzaW5nIGA9P2Agb3IgYD0/YXR0cmAgaW4gb3JkZXIgdG8gZmxhZyB0aGUgcHJvcGVydHkgYXMgb3B0aW9uYWwuIElmXG4gKiAgIHlvdSB3YW50IHRvIHNoYWxsb3cgd2F0Y2ggZm9yIGNoYW5nZXMgKGkuZS4gJHdhdGNoQ29sbGVjdGlvbiBpbnN0ZWFkIG9mICR3YXRjaCkgeW91IGNhbiB1c2VcbiAqICAgYD0qYCBvciBgPSphdHRyYCAoYD0qP2Agb3IgYD0qP2F0dHJgIGlmIHRoZSBwcm9wZXJ0eSBpcyBvcHRpb25hbCkuXG4gKlxuICogKiBgJmAgb3IgYCZhdHRyYCAtIHByb3ZpZGVzIGEgd2F5IHRvIGV4ZWN1dGUgYW4gZXhwcmVzc2lvbiBpbiB0aGUgY29udGV4dCBvZiB0aGUgcGFyZW50IHNjb3BlLlxuICogICBJZiBubyBgYXR0cmAgbmFtZSBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgYXR0cmlidXRlIG5hbWUgaXMgYXNzdW1lZCB0byBiZSB0aGUgc2FtZSBhcyB0aGVcbiAqICAgbG9jYWwgbmFtZS4gR2l2ZW4gYDx3aWRnZXQgbXktYXR0cj1cImNvdW50ID0gY291bnQgKyB2YWx1ZVwiPmAgYW5kIHdpZGdldCBkZWZpbml0aW9uIG9mXG4gKiAgIGBzY29wZTogeyBsb2NhbEZuOicmbXlBdHRyJyB9YCwgdGhlbiBpc29sYXRlIHNjb3BlIHByb3BlcnR5IGBsb2NhbEZuYCB3aWxsIHBvaW50IHRvXG4gKiAgIGEgZnVuY3Rpb24gd3JhcHBlciBmb3IgdGhlIGBjb3VudCA9IGNvdW50ICsgdmFsdWVgIGV4cHJlc3Npb24uIE9mdGVuIGl0J3MgZGVzaXJhYmxlIHRvXG4gKiAgIHBhc3MgZGF0YSBmcm9tIHRoZSBpc29sYXRlZCBzY29wZSB2aWEgYW4gZXhwcmVzc2lvbiB0byB0aGUgcGFyZW50IHNjb3BlLCB0aGlzIGNhbiBiZVxuICogICBkb25lIGJ5IHBhc3NpbmcgYSBtYXAgb2YgbG9jYWwgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcyBpbnRvIHRoZSBleHByZXNzaW9uIHdyYXBwZXIgZm4uXG4gKiAgIEZvciBleGFtcGxlLCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBgaW5jcmVtZW50KGFtb3VudClgIHRoZW4gd2UgY2FuIHNwZWNpZnkgdGhlIGFtb3VudCB2YWx1ZVxuICogICBieSBjYWxsaW5nIHRoZSBgbG9jYWxGbmAgYXMgYGxvY2FsRm4oe2Ftb3VudDogMjJ9KWAuXG4gKlxuICpcbiAqICMjIyMgYGJpbmRUb0NvbnRyb2xsZXJgXG4gKiBXaGVuIGFuIGlzb2xhdGUgc2NvcGUgaXMgdXNlZCBmb3IgYSBjb21wb25lbnQgKHNlZSBhYm92ZSksIGFuZCBgY29udHJvbGxlckFzYCBpcyB1c2VkLCBgYmluZFRvQ29udHJvbGxlcjogdHJ1ZWAgd2lsbFxuICogYWxsb3cgYSBjb21wb25lbnQgdG8gaGF2ZSBpdHMgcHJvcGVydGllcyBib3VuZCB0byB0aGUgY29udHJvbGxlciwgcmF0aGVyIHRoYW4gdG8gc2NvcGUuIFdoZW4gdGhlIGNvbnRyb2xsZXJcbiAqIGlzIGluc3RhbnRpYXRlZCwgdGhlIGluaXRpYWwgdmFsdWVzIG9mIHRoZSBpc29sYXRlIHNjb3BlIGJpbmRpbmdzIGFyZSBhbHJlYWR5IGF2YWlsYWJsZS5cbiAqXG4gKiAjIyMjIGBjb250cm9sbGVyYFxuICogQ29udHJvbGxlciBjb25zdHJ1Y3RvciBmdW5jdGlvbi4gVGhlIGNvbnRyb2xsZXIgaXMgaW5zdGFudGlhdGVkIGJlZm9yZSB0aGVcbiAqIHByZS1saW5raW5nIHBoYXNlIGFuZCBpdCBpcyBzaGFyZWQgd2l0aCBvdGhlciBkaXJlY3RpdmVzIChzZWVcbiAqIGByZXF1aXJlYCBhdHRyaWJ1dGUpLiBUaGlzIGFsbG93cyB0aGUgZGlyZWN0aXZlcyB0byBjb21tdW5pY2F0ZSB3aXRoIGVhY2ggb3RoZXIgYW5kIGF1Z21lbnRcbiAqIGVhY2ggb3RoZXIncyBiZWhhdmlvci4gVGhlIGNvbnRyb2xsZXIgaXMgaW5qZWN0YWJsZSAoYW5kIHN1cHBvcnRzIGJyYWNrZXQgbm90YXRpb24pIHdpdGggdGhlIGZvbGxvd2luZyBsb2NhbHM6XG4gKlxuICogKiBgJHNjb3BlYCAtIEN1cnJlbnQgc2NvcGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50XG4gKiAqIGAkZWxlbWVudGAgLSBDdXJyZW50IGVsZW1lbnRcbiAqICogYCRhdHRyc2AgLSBDdXJyZW50IGF0dHJpYnV0ZXMgb2JqZWN0IGZvciB0aGUgZWxlbWVudFxuICogKiBgJHRyYW5zY2x1ZGVgIC0gQSB0cmFuc2NsdWRlIGxpbmtpbmcgZnVuY3Rpb24gcHJlLWJvdW5kIHRvIHRoZSBjb3JyZWN0IHRyYW5zY2x1c2lvbiBzY29wZTpcbiAqICAgYGZ1bmN0aW9uKFtzY29wZV0sIGNsb25lTGlua2luZ0ZuLCBmdXR1cmVQYXJlbnRFbGVtZW50KWAuXG4gKiAgICAqIGBzY29wZWA6IG9wdGlvbmFsIGFyZ3VtZW50IHRvIG92ZXJyaWRlIHRoZSBzY29wZS5cbiAqICAgICogYGNsb25lTGlua2luZ0ZuYDogb3B0aW9uYWwgYXJndW1lbnQgdG8gY3JlYXRlIGNsb25lcyBvZiB0aGUgb3JpZ2luYWwgdHJhbnNjbHVkZWQgY29udGVudC5cbiAqICAgICogYGZ1dHVyZVBhcmVudEVsZW1lbnRgOlxuICogICAgICAgICogZGVmaW5lcyB0aGUgcGFyZW50IHRvIHdoaWNoIHRoZSBgY2xvbmVMaW5raW5nRm5gIHdpbGwgYWRkIHRoZSBjbG9uZWQgZWxlbWVudHMuXG4gKiAgICAgICAgKiBkZWZhdWx0OiBgJGVsZW1lbnQucGFyZW50KClgIHJlc3AuIGAkZWxlbWVudGAgZm9yIGB0cmFuc2NsdWRlOidlbGVtZW50J2AgcmVzcC4gYHRyYW5zY2x1ZGU6dHJ1ZWAuXG4gKiAgICAgICAgKiBvbmx5IG5lZWRlZCBmb3IgdHJhbnNjbHVkZXMgdGhhdCBhcmUgYWxsb3dlZCB0byBjb250YWluIG5vbiBodG1sIGVsZW1lbnRzIChlLmcuIFNWRyBlbGVtZW50cylcbiAqICAgICAgICAgIGFuZCB3aGVuIHRoZSBgY2xvbmVMaW5raW5GbmAgaXMgcGFzc2VkLFxuICogICAgICAgICAgYXMgdGhvc2UgZWxlbWVudHMgbmVlZCB0byBjcmVhdGVkIGFuZCBjbG9uZWQgaW4gYSBzcGVjaWFsIHdheSB3aGVuIHRoZXkgYXJlIGRlZmluZWQgb3V0c2lkZSB0aGVpclxuICogICAgICAgICAgdXN1YWwgY29udGFpbmVycyAoZS5nLiBsaWtlIGA8c3ZnPmApLlxuICogICAgICAgICogU2VlIGFsc28gdGhlIGBkaXJlY3RpdmUudGVtcGxhdGVOYW1lc3BhY2VgIHByb3BlcnR5LlxuICpcbiAqXG4gKiAjIyMjIGByZXF1aXJlYFxuICogUmVxdWlyZSBhbm90aGVyIGRpcmVjdGl2ZSBhbmQgaW5qZWN0IGl0cyBjb250cm9sbGVyIGFzIHRoZSBmb3VydGggYXJndW1lbnQgdG8gdGhlIGxpbmtpbmcgZnVuY3Rpb24uIFRoZVxuICogYHJlcXVpcmVgIHRha2VzIGEgc3RyaW5nIG5hbWUgKG9yIGFycmF5IG9mIHN0cmluZ3MpIG9mIHRoZSBkaXJlY3RpdmUocykgdG8gcGFzcyBpbi4gSWYgYW4gYXJyYXkgaXMgdXNlZCwgdGhlXG4gKiBpbmplY3RlZCBhcmd1bWVudCB3aWxsIGJlIGFuIGFycmF5IGluIGNvcnJlc3BvbmRpbmcgb3JkZXIuIElmIG5vIHN1Y2ggZGlyZWN0aXZlIGNhbiBiZVxuICogZm91bmQsIG9yIGlmIHRoZSBkaXJlY3RpdmUgZG9lcyBub3QgaGF2ZSBhIGNvbnRyb2xsZXIsIHRoZW4gYW4gZXJyb3IgaXMgcmFpc2VkLiBUaGUgbmFtZSBjYW4gYmUgcHJlZml4ZWQgd2l0aDpcbiAqXG4gKiAqIChubyBwcmVmaXgpIC0gTG9jYXRlIHRoZSByZXF1aXJlZCBjb250cm9sbGVyIG9uIHRoZSBjdXJyZW50IGVsZW1lbnQuIFRocm93IGFuIGVycm9yIGlmIG5vdCBmb3VuZC5cbiAqICogYD9gIC0gQXR0ZW1wdCB0byBsb2NhdGUgdGhlIHJlcXVpcmVkIGNvbnRyb2xsZXIgb3IgcGFzcyBgbnVsbGAgdG8gdGhlIGBsaW5rYCBmbiBpZiBub3QgZm91bmQuXG4gKiAqIGBeYCAtIExvY2F0ZSB0aGUgcmVxdWlyZWQgY29udHJvbGxlciBieSBzZWFyY2hpbmcgdGhlIGVsZW1lbnQgYW5kIGl0cyBwYXJlbnRzLiBUaHJvdyBhbiBlcnJvciBpZiBub3QgZm91bmQuXG4gKiAqIGBeXmAgLSBMb2NhdGUgdGhlIHJlcXVpcmVkIGNvbnRyb2xsZXIgYnkgc2VhcmNoaW5nIHRoZSBlbGVtZW50J3MgcGFyZW50cy4gVGhyb3cgYW4gZXJyb3IgaWYgbm90IGZvdW5kLlxuICogKiBgP15gIC0gQXR0ZW1wdCB0byBsb2NhdGUgdGhlIHJlcXVpcmVkIGNvbnRyb2xsZXIgYnkgc2VhcmNoaW5nIHRoZSBlbGVtZW50IGFuZCBpdHMgcGFyZW50cyBvciBwYXNzXG4gKiAgIGBudWxsYCB0byB0aGUgYGxpbmtgIGZuIGlmIG5vdCBmb3VuZC5cbiAqICogYD9eXmAgLSBBdHRlbXB0IHRvIGxvY2F0ZSB0aGUgcmVxdWlyZWQgY29udHJvbGxlciBieSBzZWFyY2hpbmcgdGhlIGVsZW1lbnQncyBwYXJlbnRzLCBvciBwYXNzXG4gKiAgIGBudWxsYCB0byB0aGUgYGxpbmtgIGZuIGlmIG5vdCBmb3VuZC5cbiAqXG4gKlxuICogIyMjIyBgY29udHJvbGxlckFzYFxuICogQ29udHJvbGxlciBhbGlhcyBhdCB0aGUgZGlyZWN0aXZlIHNjb3BlLiBBbiBhbGlhcyBmb3IgdGhlIGNvbnRyb2xsZXIgc28gaXRcbiAqIGNhbiBiZSByZWZlcmVuY2VkIGF0IHRoZSBkaXJlY3RpdmUgdGVtcGxhdGUuIFRoZSBkaXJlY3RpdmUgbmVlZHMgdG8gZGVmaW5lIGEgc2NvcGUgZm9yIHRoaXNcbiAqIGNvbmZpZ3VyYXRpb24gdG8gYmUgdXNlZC4gVXNlZnVsIGluIHRoZSBjYXNlIHdoZW4gZGlyZWN0aXZlIGlzIHVzZWQgYXMgY29tcG9uZW50LlxuICpcbiAqXG4gKiAjIyMjIGByZXN0cmljdGBcbiAqIFN0cmluZyBvZiBzdWJzZXQgb2YgYEVBQ01gIHdoaWNoIHJlc3RyaWN0cyB0aGUgZGlyZWN0aXZlIHRvIGEgc3BlY2lmaWMgZGlyZWN0aXZlXG4gKiBkZWNsYXJhdGlvbiBzdHlsZS4gSWYgb21pdHRlZCwgdGhlIGRlZmF1bHRzIChlbGVtZW50cyBhbmQgYXR0cmlidXRlcykgYXJlIHVzZWQuXG4gKlxuICogKiBgRWAgLSBFbGVtZW50IG5hbWUgKGRlZmF1bHQpOiBgPG15LWRpcmVjdGl2ZT48L215LWRpcmVjdGl2ZT5gXG4gKiAqIGBBYCAtIEF0dHJpYnV0ZSAoZGVmYXVsdCk6IGA8ZGl2IG15LWRpcmVjdGl2ZT1cImV4cFwiPjwvZGl2PmBcbiAqICogYENgIC0gQ2xhc3M6IGA8ZGl2IGNsYXNzPVwibXktZGlyZWN0aXZlOiBleHA7XCI+PC9kaXY+YFxuICogKiBgTWAgLSBDb21tZW50OiBgPCEtLSBkaXJlY3RpdmU6IG15LWRpcmVjdGl2ZSBleHAgLS0+YFxuICpcbiAqXG4gKiAjIyMjIGB0ZW1wbGF0ZU5hbWVzcGFjZWBcbiAqIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIGRvY3VtZW50IHR5cGUgdXNlZCBieSB0aGUgbWFya3VwIGluIHRoZSB0ZW1wbGF0ZS5cbiAqIEFuZ3VsYXJKUyBuZWVkcyB0aGlzIGluZm9ybWF0aW9uIGFzIHRob3NlIGVsZW1lbnRzIG5lZWQgdG8gYmUgY3JlYXRlZCBhbmQgY2xvbmVkXG4gKiBpbiBhIHNwZWNpYWwgd2F5IHdoZW4gdGhleSBhcmUgZGVmaW5lZCBvdXRzaWRlIHRoZWlyIHVzdWFsIGNvbnRhaW5lcnMgbGlrZSBgPHN2Zz5gIGFuZCBgPG1hdGg+YC5cbiAqXG4gKiAqIGBodG1sYCAtIEFsbCByb290IG5vZGVzIGluIHRoZSB0ZW1wbGF0ZSBhcmUgSFRNTC4gUm9vdCBub2RlcyBtYXkgYWxzbyBiZVxuICogICB0b3AtbGV2ZWwgZWxlbWVudHMgc3VjaCBhcyBgPHN2Zz5gIG9yIGA8bWF0aD5gLlxuICogKiBgc3ZnYCAtIFRoZSByb290IG5vZGVzIGluIHRoZSB0ZW1wbGF0ZSBhcmUgU1ZHIGVsZW1lbnRzIChleGNsdWRpbmcgYDxtYXRoPmApLlxuICogKiBgbWF0aGAgLSBUaGUgcm9vdCBub2RlcyBpbiB0aGUgdGVtcGxhdGUgYXJlIE1hdGhNTCBlbGVtZW50cyAoZXhjbHVkaW5nIGA8c3ZnPmApLlxuICpcbiAqIElmIG5vIGB0ZW1wbGF0ZU5hbWVzcGFjZWAgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBuYW1lc3BhY2UgaXMgY29uc2lkZXJlZCB0byBiZSBgaHRtbGAuXG4gKlxuICogIyMjIyBgdGVtcGxhdGVgXG4gKiBIVE1MIG1hcmt1cCB0aGF0IG1heTpcbiAqICogUmVwbGFjZSB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdGl2ZSdzIGVsZW1lbnQgKGRlZmF1bHQpLlxuICogKiBSZXBsYWNlIHRoZSBkaXJlY3RpdmUncyBlbGVtZW50IGl0c2VsZiAoaWYgYHJlcGxhY2VgIGlzIHRydWUgLSBERVBSRUNBVEVEKS5cbiAqICogV3JhcCB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdGl2ZSdzIGVsZW1lbnQgKGlmIGB0cmFuc2NsdWRlYCBpcyB0cnVlKS5cbiAqXG4gKiBWYWx1ZSBtYXkgYmU6XG4gKlxuICogKiBBIHN0cmluZy4gRm9yIGV4YW1wbGUgYDxkaXYgcmVkLW9uLWhvdmVyPnt7ZGVsZXRlX3N0cn19PC9kaXY+YC5cbiAqICogQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0d28gYXJndW1lbnRzIGB0RWxlbWVudGAgYW5kIGB0QXR0cnNgIChkZXNjcmliZWQgaW4gdGhlIGBjb21waWxlYFxuICogICBmdW5jdGlvbiBhcGkgYmVsb3cpIGFuZCByZXR1cm5zIGEgc3RyaW5nIHZhbHVlLlxuICpcbiAqXG4gKiAjIyMjIGB0ZW1wbGF0ZVVybGBcbiAqIFRoaXMgaXMgc2ltaWxhciB0byBgdGVtcGxhdGVgIGJ1dCB0aGUgdGVtcGxhdGUgaXMgbG9hZGVkIGZyb20gdGhlIHNwZWNpZmllZCBVUkwsIGFzeW5jaHJvbm91c2x5LlxuICpcbiAqIEJlY2F1c2UgdGVtcGxhdGUgbG9hZGluZyBpcyBhc3luY2hyb25vdXMgdGhlIGNvbXBpbGVyIHdpbGwgc3VzcGVuZCBjb21waWxhdGlvbiBvZiBkaXJlY3RpdmVzIG9uIHRoYXQgZWxlbWVudFxuICogZm9yIGxhdGVyIHdoZW4gdGhlIHRlbXBsYXRlIGhhcyBiZWVuIHJlc29sdmVkLiAgSW4gdGhlIG1lYW50aW1lIGl0IHdpbGwgY29udGludWUgdG8gY29tcGlsZSBhbmQgbGlua1xuICogc2libGluZyBhbmQgcGFyZW50IGVsZW1lbnRzIGFzIHRob3VnaCB0aGlzIGVsZW1lbnQgaGFkIG5vdCBjb250YWluZWQgYW55IGRpcmVjdGl2ZXMuXG4gKlxuICogVGhlIGNvbXBpbGVyIGRvZXMgbm90IHN1c3BlbmQgdGhlIGVudGlyZSBjb21waWxhdGlvbiB0byB3YWl0IGZvciB0ZW1wbGF0ZXMgdG8gYmUgbG9hZGVkIGJlY2F1c2UgdGhpc1xuICogd291bGQgcmVzdWx0IGluIHRoZSB3aG9sZSBhcHAgXCJzdGFsbGluZ1wiIHVudGlsIGFsbCB0ZW1wbGF0ZXMgYXJlIGxvYWRlZCBhc3luY2hyb25vdXNseSAtIGV2ZW4gaW4gdGhlXG4gKiBjYXNlIHdoZW4gb25seSBvbmUgZGVlcGx5IG5lc3RlZCBkaXJlY3RpdmUgaGFzIGB0ZW1wbGF0ZVVybGAuXG4gKlxuICogVGVtcGxhdGUgbG9hZGluZyBpcyBhc3luY2hyb25vdXMgZXZlbiBpZiB0aGUgdGVtcGxhdGUgaGFzIGJlZW4gcHJlbG9hZGVkIGludG8gdGhlIHtAbGluayAkdGVtcGxhdGVDYWNoZX1cbiAqXG4gKiBZb3UgY2FuIHNwZWNpZnkgYHRlbXBsYXRlVXJsYCBhcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIFVSTCBvciBhcyBhIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHR3b1xuICogYXJndW1lbnRzIGB0RWxlbWVudGAgYW5kIGB0QXR0cnNgIChkZXNjcmliZWQgaW4gdGhlIGBjb21waWxlYCBmdW5jdGlvbiBhcGkgYmVsb3cpIGFuZCByZXR1cm5zXG4gKiBhIHN0cmluZyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIHVybC4gIEluIGVpdGhlciBjYXNlLCB0aGUgdGVtcGxhdGUgVVJMIGlzIHBhc3NlZCB0aHJvdWdoIHtAbGlua1xuICogJHNjZSNnZXRUcnVzdGVkUmVzb3VyY2VVcmwgJHNjZS5nZXRUcnVzdGVkUmVzb3VyY2VVcmx9LlxuICpcbiAqXG4gKiAjIyMjIGByZXBsYWNlYCAoWypERVBSRUNBVEVEKiFdLCB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciByZWxlYXNlIC0gaS5lLiB2Mi4wKVxuICogc3BlY2lmeSB3aGF0IHRoZSB0ZW1wbGF0ZSBzaG91bGQgcmVwbGFjZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAqXG4gKiAqIGB0cnVlYCAtIHRoZSB0ZW1wbGF0ZSB3aWxsIHJlcGxhY2UgdGhlIGRpcmVjdGl2ZSdzIGVsZW1lbnQuXG4gKiAqIGBmYWxzZWAgLSB0aGUgdGVtcGxhdGUgd2lsbCByZXBsYWNlIHRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0aXZlJ3MgZWxlbWVudC5cbiAqXG4gKiBUaGUgcmVwbGFjZW1lbnQgcHJvY2VzcyBtaWdyYXRlcyBhbGwgb2YgdGhlIGF0dHJpYnV0ZXMgLyBjbGFzc2VzIGZyb20gdGhlIG9sZCBlbGVtZW50IHRvIHRoZSBuZXdcbiAqIG9uZS4gU2VlIHRoZSB7QGxpbmsgZ3VpZGUvZGlyZWN0aXZlI3RlbXBsYXRlLWV4cGFuZGluZy1kaXJlY3RpdmVcbiAqIERpcmVjdGl2ZXMgR3VpZGV9IGZvciBhbiBleGFtcGxlLlxuICpcbiAqIFRoZXJlIGFyZSB2ZXJ5IGZldyBzY2VuYXJpb3Mgd2hlcmUgZWxlbWVudCByZXBsYWNlbWVudCBpcyByZXF1aXJlZCBmb3IgdGhlIGFwcGxpY2F0aW9uIGZ1bmN0aW9uLFxuICogdGhlIG1haW4gb25lIGJlaW5nIHJldXNhYmxlIGN1c3RvbSBjb21wb25lbnRzIHRoYXQgYXJlIHVzZWQgd2l0aGluIFNWRyBjb250ZXh0c1xuICogKGJlY2F1c2UgU1ZHIGRvZXNuJ3Qgd29yayB3aXRoIGN1c3RvbSBlbGVtZW50cyBpbiB0aGUgRE9NIHRyZWUpLlxuICpcbiAqICMjIyMgYHRyYW5zY2x1ZGVgXG4gKiBFeHRyYWN0IHRoZSBjb250ZW50cyBvZiB0aGUgZWxlbWVudCB3aGVyZSB0aGUgZGlyZWN0aXZlIGFwcGVhcnMgYW5kIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBkaXJlY3RpdmUuXG4gKiBUaGUgY29udGVudHMgYXJlIGNvbXBpbGVkIGFuZCBwcm92aWRlZCB0byB0aGUgZGlyZWN0aXZlIGFzIGEgKip0cmFuc2NsdXNpb24gZnVuY3Rpb24qKi4gU2VlIHRoZVxuICoge0BsaW5rICRjb21waWxlI3RyYW5zY2x1c2lvbiBUcmFuc2NsdXNpb259IHNlY3Rpb24gYmVsb3cuXG4gKlxuICogVGhlcmUgYXJlIHR3byBraW5kcyBvZiB0cmFuc2NsdXNpb24gZGVwZW5kaW5nIHVwb24gd2hldGhlciB5b3Ugd2FudCB0byB0cmFuc2NsdWRlIGp1c3QgdGhlIGNvbnRlbnRzIG9mIHRoZVxuICogZGlyZWN0aXZlJ3MgZWxlbWVudCBvciB0aGUgZW50aXJlIGVsZW1lbnQ6XG4gKlxuICogKiBgdHJ1ZWAgLSB0cmFuc2NsdWRlIHRoZSBjb250ZW50IChpLmUuIHRoZSBjaGlsZCBub2Rlcykgb2YgdGhlIGRpcmVjdGl2ZSdzIGVsZW1lbnQuXG4gKiAqIGAnZWxlbWVudCdgIC0gdHJhbnNjbHVkZSB0aGUgd2hvbGUgb2YgdGhlIGRpcmVjdGl2ZSdzIGVsZW1lbnQgaW5jbHVkaW5nIGFueSBkaXJlY3RpdmVzIG9uIHRoaXNcbiAqICAgZWxlbWVudCB0aGF0IGRlZmluZWQgYXQgYSBsb3dlciBwcmlvcml0eSB0aGFuIHRoaXMgZGlyZWN0aXZlLiBXaGVuIHVzZWQsIHRoZSBgdGVtcGxhdGVgXG4gKiAgIHByb3BlcnR5IGlzIGlnbm9yZWQuXG4gKlxuICpcbiAqICMjIyMgYGNvbXBpbGVgXG4gKlxuICogYGBganNcbiAqICAgZnVuY3Rpb24gY29tcGlsZSh0RWxlbWVudCwgdEF0dHJzLCB0cmFuc2NsdWRlKSB7IC4uLiB9XG4gKiBgYGBcbiAqXG4gKiBUaGUgY29tcGlsZSBmdW5jdGlvbiBkZWFscyB3aXRoIHRyYW5zZm9ybWluZyB0aGUgdGVtcGxhdGUgRE9NLiBTaW5jZSBtb3N0IGRpcmVjdGl2ZXMgZG8gbm90IGRvXG4gKiB0ZW1wbGF0ZSB0cmFuc2Zvcm1hdGlvbiwgaXQgaXMgbm90IHVzZWQgb2Z0ZW4uIFRoZSBjb21waWxlIGZ1bmN0aW9uIHRha2VzIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOlxuICpcbiAqICAgKiBgdEVsZW1lbnRgIC0gdGVtcGxhdGUgZWxlbWVudCAtIFRoZSBlbGVtZW50IHdoZXJlIHRoZSBkaXJlY3RpdmUgaGFzIGJlZW4gZGVjbGFyZWQuIEl0IGlzXG4gKiAgICAgc2FmZSB0byBkbyB0ZW1wbGF0ZSB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgZWxlbWVudCBhbmQgY2hpbGQgZWxlbWVudHMgb25seS5cbiAqXG4gKiAgICogYHRBdHRyc2AgLSB0ZW1wbGF0ZSBhdHRyaWJ1dGVzIC0gTm9ybWFsaXplZCBsaXN0IG9mIGF0dHJpYnV0ZXMgZGVjbGFyZWQgb24gdGhpcyBlbGVtZW50IHNoYXJlZFxuICogICAgIGJldHdlZW4gYWxsIGRpcmVjdGl2ZSBjb21waWxlIGZ1bmN0aW9ucy5cbiAqXG4gKiAgICogYHRyYW5zY2x1ZGVgIC0gIFsqREVQUkVDQVRFRCohXSBBIHRyYW5zY2x1ZGUgbGlua2luZyBmdW5jdGlvbjogYGZ1bmN0aW9uKHNjb3BlLCBjbG9uZUxpbmtpbmdGbilgXG4gKlxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIj5cbiAqICoqTm90ZToqKiBUaGUgdGVtcGxhdGUgaW5zdGFuY2UgYW5kIHRoZSBsaW5rIGluc3RhbmNlIG1heSBiZSBkaWZmZXJlbnQgb2JqZWN0cyBpZiB0aGUgdGVtcGxhdGUgaGFzXG4gKiBiZWVuIGNsb25lZC4gRm9yIHRoaXMgcmVhc29uIGl0IGlzICoqbm90Kiogc2FmZSB0byBkbyBhbnl0aGluZyBvdGhlciB0aGFuIERPTSB0cmFuc2Zvcm1hdGlvbnMgdGhhdFxuICogYXBwbHkgdG8gYWxsIGNsb25lZCBET00gbm9kZXMgd2l0aGluIHRoZSBjb21waWxlIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIERPTSBsaXN0ZW5lciByZWdpc3RyYXRpb25cbiAqIHNob3VsZCBiZSBkb25lIGluIGEgbGlua2luZyBmdW5jdGlvbiByYXRoZXIgdGhhbiBpbiBhIGNvbXBpbGUgZnVuY3Rpb24uXG4gKiA8L2Rpdj5cblxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIj5cbiAqICoqTm90ZToqKiBUaGUgY29tcGlsZSBmdW5jdGlvbiBjYW5ub3QgaGFuZGxlIGRpcmVjdGl2ZXMgdGhhdCByZWN1cnNpdmVseSB1c2UgdGhlbXNlbHZlcyBpbiB0aGVpclxuICogb3duIHRlbXBsYXRlcyBvciBjb21waWxlIGZ1bmN0aW9ucy4gQ29tcGlsaW5nIHRoZXNlIGRpcmVjdGl2ZXMgcmVzdWx0cyBpbiBhbiBpbmZpbml0ZSBsb29wIGFuZCBhXG4gKiBzdGFjayBvdmVyZmxvdyBlcnJvcnMuXG4gKlxuICogVGhpcyBjYW4gYmUgYXZvaWRlZCBieSBtYW51YWxseSB1c2luZyAkY29tcGlsZSBpbiB0aGUgcG9zdExpbmsgZnVuY3Rpb24gdG8gaW1wZXJhdGl2ZWx5IGNvbXBpbGVcbiAqIGEgZGlyZWN0aXZlJ3MgdGVtcGxhdGUgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGF1dG9tYXRpYyB0ZW1wbGF0ZSBjb21waWxhdGlvbiB2aWEgYHRlbXBsYXRlYCBvclxuICogYHRlbXBsYXRlVXJsYCBkZWNsYXJhdGlvbiBvciBtYW51YWwgY29tcGlsYXRpb24gaW5zaWRlIHRoZSBjb21waWxlIGZ1bmN0aW9uLlxuICogPC9kaXY+XG4gKlxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWVycm9yXCI+XG4gKiAqKk5vdGU6KiogVGhlIGB0cmFuc2NsdWRlYCBmdW5jdGlvbiB0aGF0IGlzIHBhc3NlZCB0byB0aGUgY29tcGlsZSBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCBhcyBpdFxuICogICBlLmcuIGRvZXMgbm90IGtub3cgYWJvdXQgdGhlIHJpZ2h0IG91dGVyIHNjb3BlLiBQbGVhc2UgdXNlIHRoZSB0cmFuc2NsdWRlIGZ1bmN0aW9uIHRoYXQgaXMgcGFzc2VkXG4gKiAgIHRvIHRoZSBsaW5rIGZ1bmN0aW9uIGluc3RlYWQuXG4gKiA8L2Rpdj5cblxuICogQSBjb21waWxlIGZ1bmN0aW9uIGNhbiBoYXZlIGEgcmV0dXJuIHZhbHVlIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QuXG4gKlxuICogKiByZXR1cm5pbmcgYSAocG9zdC1saW5rKSBmdW5jdGlvbiAtIGlzIGVxdWl2YWxlbnQgdG8gcmVnaXN0ZXJpbmcgdGhlIGxpbmtpbmcgZnVuY3Rpb24gdmlhIHRoZVxuICogICBgbGlua2AgcHJvcGVydHkgb2YgdGhlIGNvbmZpZyBvYmplY3Qgd2hlbiB0aGUgY29tcGlsZSBmdW5jdGlvbiBpcyBlbXB0eS5cbiAqXG4gKiAqIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBmdW5jdGlvbihzKSByZWdpc3RlcmVkIHZpYSBgcHJlYCBhbmQgYHBvc3RgIHByb3BlcnRpZXMgLSBhbGxvd3MgeW91IHRvXG4gKiAgIGNvbnRyb2wgd2hlbiBhIGxpbmtpbmcgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBkdXJpbmcgdGhlIGxpbmtpbmcgcGhhc2UuIFNlZSBpbmZvIGFib3V0XG4gKiAgIHByZS1saW5raW5nIGFuZCBwb3N0LWxpbmtpbmcgZnVuY3Rpb25zIGJlbG93LlxuICpcbiAqXG4gKiAjIyMjIGBsaW5rYFxuICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIG9ubHkgaWYgdGhlIGBjb21waWxlYCBwcm9wZXJ0eSBpcyBub3QgZGVmaW5lZC5cbiAqXG4gKiBgYGBqc1xuICogICBmdW5jdGlvbiBsaW5rKHNjb3BlLCBFbGVtZW50LCBpQXR0cnMsIGNvbnRyb2xsZXIsIHRyYW5zY2x1ZGVGbikgeyAuLi4gfVxuICogYGBgXG4gKlxuICogVGhlIGxpbmsgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIERPTSBsaXN0ZW5lcnMgYXMgd2VsbCBhcyB1cGRhdGluZyB0aGUgRE9NLiBJdCBpc1xuICogZXhlY3V0ZWQgYWZ0ZXIgdGhlIHRlbXBsYXRlIGhhcyBiZWVuIGNsb25lZC4gVGhpcyBpcyB3aGVyZSBtb3N0IG9mIHRoZSBkaXJlY3RpdmUgbG9naWMgd2lsbCBiZVxuICogcHV0LlxuICpcbiAqICAgKiBgc2NvcGVgIC0ge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUgU2NvcGV9IC0gVGhlIHNjb3BlIHRvIGJlIHVzZWQgYnkgdGhlXG4gKiAgICAgZGlyZWN0aXZlIGZvciByZWdpc3RlcmluZyB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkd2F0Y2ggd2F0Y2hlc30uXG4gKlxuICogICAqIGBFbGVtZW50YCAtIGluc3RhbmNlIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB3aGVyZSB0aGUgZGlyZWN0aXZlIGlzIHRvIGJlIHVzZWQuIEl0IGlzIHNhZmUgdG9cbiAqICAgICBtYW5pcHVsYXRlIHRoZSBjaGlsZHJlbiBvZiB0aGUgZWxlbWVudCBvbmx5IGluIGBwb3N0TGlua2AgZnVuY3Rpb24gc2luY2UgdGhlIGNoaWxkcmVuIGhhdmVcbiAqICAgICBhbHJlYWR5IGJlZW4gbGlua2VkLlxuICpcbiAqICAgKiBgaUF0dHJzYCAtIGluc3RhbmNlIGF0dHJpYnV0ZXMgLSBOb3JtYWxpemVkIGxpc3Qgb2YgYXR0cmlidXRlcyBkZWNsYXJlZCBvbiB0aGlzIGVsZW1lbnQgc2hhcmVkXG4gKiAgICAgYmV0d2VlbiBhbGwgZGlyZWN0aXZlIGxpbmtpbmcgZnVuY3Rpb25zLlxuICpcbiAqICAgKiBgY29udHJvbGxlcmAgLSBhIGNvbnRyb2xsZXIgaW5zdGFuY2UgLSBBIGNvbnRyb2xsZXIgaW5zdGFuY2UgaWYgYXQgbGVhc3Qgb25lIGRpcmVjdGl2ZSBvbiB0aGVcbiAqICAgICBlbGVtZW50IGRlZmluZXMgYSBjb250cm9sbGVyLiBUaGUgY29udHJvbGxlciBpcyBzaGFyZWQgYW1vbmcgYWxsIHRoZSBkaXJlY3RpdmVzLCB3aGljaCBhbGxvd3NcbiAqICAgICB0aGUgZGlyZWN0aXZlcyB0byB1c2UgdGhlIGNvbnRyb2xsZXJzIGFzIGEgY29tbXVuaWNhdGlvbiBjaGFubmVsLlxuICpcbiAqICAgKiBgdHJhbnNjbHVkZUZuYCAtIEEgdHJhbnNjbHVkZSBsaW5raW5nIGZ1bmN0aW9uIHByZS1ib3VuZCB0byB0aGUgY29ycmVjdCB0cmFuc2NsdXNpb24gc2NvcGUuXG4gKiAgICAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgYCR0cmFuc2NsdWRlYFxuICogICAgIHBhcmFtZXRlciBvZiBkaXJlY3RpdmUgY29udHJvbGxlcnMsIHNlZSB0aGVyZSBmb3IgZGV0YWlscy5cbiAqICAgICBgZnVuY3Rpb24oW3Njb3BlXSwgY2xvbmVMaW5raW5nRm4sIGZ1dHVyZVBhcmVudEVsZW1lbnQpYC5cbiAqXG4gKiAjIyMjIFByZS1saW5raW5nIGZ1bmN0aW9uXG4gKlxuICogRXhlY3V0ZWQgYmVmb3JlIHRoZSBjaGlsZCBlbGVtZW50cyBhcmUgbGlua2VkLiBOb3Qgc2FmZSB0byBkbyBET00gdHJhbnNmb3JtYXRpb24gc2luY2UgdGhlXG4gKiBjb21waWxlciBsaW5raW5nIGZ1bmN0aW9uIHdpbGwgZmFpbCB0byBsb2NhdGUgdGhlIGNvcnJlY3QgZWxlbWVudHMgZm9yIGxpbmtpbmcuXG4gKlxuICogIyMjIyBQb3N0LWxpbmtpbmcgZnVuY3Rpb25cbiAqXG4gKiBFeGVjdXRlZCBhZnRlciB0aGUgY2hpbGQgZWxlbWVudHMgYXJlIGxpbmtlZC5cbiAqXG4gKiBOb3RlIHRoYXQgY2hpbGQgZWxlbWVudHMgdGhhdCBjb250YWluIGB0ZW1wbGF0ZVVybGAgZGlyZWN0aXZlcyB3aWxsIG5vdCBoYXZlIGJlZW4gY29tcGlsZWRcbiAqIGFuZCBsaW5rZWQgc2luY2UgdGhleSBhcmUgd2FpdGluZyBmb3IgdGhlaXIgdGVtcGxhdGUgdG8gbG9hZCBhc3luY2hyb25vdXNseSBhbmQgdGhlaXIgb3duXG4gKiBjb21waWxhdGlvbiBhbmQgbGlua2luZyBoYXMgYmVlbiBzdXNwZW5kZWQgdW50aWwgdGhhdCBvY2N1cnMuXG4gKlxuICogSXQgaXMgc2FmZSB0byBkbyBET00gdHJhbnNmb3JtYXRpb24gaW4gdGhlIHBvc3QtbGlua2luZyBmdW5jdGlvbiBvbiBlbGVtZW50cyB0aGF0IGFyZSBub3Qgd2FpdGluZ1xuICogZm9yIHRoZWlyIGFzeW5jIHRlbXBsYXRlcyB0byBiZSByZXNvbHZlZC5cbiAqXG4gKlxuICogIyMjIFRyYW5zY2x1c2lvblxuICpcbiAqIFRyYW5zY2x1c2lvbiBpcyB0aGUgcHJvY2VzcyBvZiBleHRyYWN0aW5nIGEgY29sbGVjdGlvbiBvZiBET00gZWxlbWVudCBmcm9tIG9uZSBwYXJ0IG9mIHRoZSBET00gYW5kXG4gKiBjb3B5aW5nIHRoZW0gdG8gYW5vdGhlciBwYXJ0IG9mIHRoZSBET00sIHdoaWxlIG1haW50YWluaW5nIHRoZWlyIGNvbm5lY3Rpb24gdG8gdGhlIG9yaWdpbmFsIEFuZ3VsYXJKU1xuICogc2NvcGUgZnJvbSB3aGVyZSB0aGV5IHdlcmUgdGFrZW4uXG4gKlxuICogVHJhbnNjbHVzaW9uIGlzIHVzZWQgKG9mdGVuIHdpdGgge0BsaW5rIG5nVHJhbnNjbHVkZX0pIHRvIGluc2VydCB0aGVcbiAqIG9yaWdpbmFsIGNvbnRlbnRzIG9mIGEgZGlyZWN0aXZlJ3MgZWxlbWVudCBpbnRvIGEgc3BlY2lmaWVkIHBsYWNlIGluIHRoZSB0ZW1wbGF0ZSBvZiB0aGUgZGlyZWN0aXZlLlxuICogVGhlIGJlbmVmaXQgb2YgdHJhbnNjbHVzaW9uLCBvdmVyIHNpbXBseSBtb3ZpbmcgdGhlIERPTSBlbGVtZW50cyBtYW51YWxseSwgaXMgdGhhdCB0aGUgdHJhbnNjbHVkZWRcbiAqIGNvbnRlbnQgaGFzIGFjY2VzcyB0byB0aGUgcHJvcGVydGllcyBvbiB0aGUgc2NvcGUgZnJvbSB3aGljaCBpdCB3YXMgdGFrZW4sIGV2ZW4gaWYgdGhlIGRpcmVjdGl2ZVxuICogaGFzIGlzb2xhdGVkIHNjb3BlLlxuICogU2VlIHRoZSB7QGxpbmsgZ3VpZGUvZGlyZWN0aXZlI2NyZWF0aW5nLWEtZGlyZWN0aXZlLXRoYXQtd3JhcHMtb3RoZXItZWxlbWVudHMgRGlyZWN0aXZlcyBHdWlkZX0uXG4gKlxuICogVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgdGhlIHdpZGdldCB0byBoYXZlIHByaXZhdGUgc3RhdGUgZm9yIGl0cyB0ZW1wbGF0ZSwgd2hpbGUgdGhlIHRyYW5zY2x1ZGVkXG4gKiBjb250ZW50IGhhcyBhY2Nlc3MgdG8gaXRzIG9yaWdpbmF0aW5nIHNjb3BlLlxuICpcbiAqIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCI+XG4gKiAqKk5vdGU6KiogV2hlbiB0ZXN0aW5nIGFuIGVsZW1lbnQgdHJhbnNjbHVkZSBkaXJlY3RpdmUgeW91IG11c3Qgbm90IHBsYWNlIHRoZSBkaXJlY3RpdmUgYXQgdGhlIHJvb3Qgb2YgdGhlXG4gKiBET00gZnJhZ21lbnQgdGhhdCBpcyBiZWluZyBjb21waWxlZC4gU2VlIHtAbGluayBndWlkZS91bml0LXRlc3RpbmcjdGVzdGluZy10cmFuc2NsdXNpb24tZGlyZWN0aXZlc1xuICogVGVzdGluZyBUcmFuc2NsdXNpb24gRGlyZWN0aXZlc30uXG4gKiA8L2Rpdj5cbiAqXG4gKiAjIyMjIFRyYW5zY2x1c2lvbiBGdW5jdGlvbnNcbiAqXG4gKiBXaGVuIGEgZGlyZWN0aXZlIHJlcXVlc3RzIHRyYW5zY2x1c2lvbiwgdGhlIGNvbXBpbGVyIGV4dHJhY3RzIGl0cyBjb250ZW50cyBhbmQgcHJvdmlkZXMgYSAqKnRyYW5zY2x1c2lvblxuICogZnVuY3Rpb24qKiB0byB0aGUgZGlyZWN0aXZlJ3MgYGxpbmtgIGZ1bmN0aW9uIGFuZCBgY29udHJvbGxlcmAuIFRoaXMgdHJhbnNjbHVzaW9uIGZ1bmN0aW9uIGlzIGEgc3BlY2lhbFxuICogKipsaW5raW5nIGZ1bmN0aW9uKiogdGhhdCB3aWxsIHJldHVybiB0aGUgY29tcGlsZWQgY29udGVudHMgbGlua2VkIHRvIGEgbmV3IHRyYW5zY2x1c2lvbiBzY29wZS5cbiAqXG4gKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxuICogSWYgeW91IGFyZSBqdXN0IHVzaW5nIHtAbGluayBuZ1RyYW5zY2x1ZGV9IHRoZW4geW91IGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhpcyBmdW5jdGlvbiwgc2luY2VcbiAqIG5nVHJhbnNjbHVkZSB3aWxsIGRlYWwgd2l0aCBpdCBmb3IgdXMuXG4gKiA8L2Rpdj5cbiAqXG4gKiBJZiB5b3Ugd2FudCB0byBtYW51YWxseSBjb250cm9sIHRoZSBpbnNlcnRpb24gYW5kIHJlbW92YWwgb2YgdGhlIHRyYW5zY2x1ZGVkIGNvbnRlbnQgaW4geW91ciBkaXJlY3RpdmVcbiAqIHRoZW4geW91IG11c3QgdXNlIHRoaXMgdHJhbnNjbHVkZSBmdW5jdGlvbi4gV2hlbiB5b3UgY2FsbCBhIHRyYW5zY2x1ZGUgZnVuY3Rpb24gaXQgcmV0dXJucyBhIGEganFMaXRlL0pRdWVyeVxuICogb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGNvbXBpbGVkIERPTSwgd2hpY2ggaXMgbGlua2VkIHRvIHRoZSBjb3JyZWN0IHRyYW5zY2x1c2lvbiBzY29wZS5cbiAqXG4gKiBXaGVuIHlvdSBjYWxsIGEgdHJhbnNjbHVzaW9uIGZ1bmN0aW9uIHlvdSBjYW4gcGFzcyBpbiBhICoqY2xvbmUgYXR0YWNoIGZ1bmN0aW9uKiouIFRoaXMgZnVuY3Rpb24gYWNjZXB0c1xuICogdHdvIHBhcmFtZXRlcnMsIGBmdW5jdGlvbihjbG9uZSwgc2NvcGUpIHsgLi4uIH1gLCB3aGVyZSB0aGUgYGNsb25lYCBpcyBhIGZyZXNoIGNvbXBpbGVkIGNvcHkgb2YgeW91ciB0cmFuc2NsdWRlZFxuICogY29udGVudCBhbmQgdGhlIGBzY29wZWAgaXMgdGhlIG5ld2x5IGNyZWF0ZWQgdHJhbnNjbHVzaW9uIHNjb3BlLCB0byB3aGljaCB0aGUgY2xvbmUgaXMgYm91bmQuXG4gKlxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cbiAqICoqQmVzdCBQcmFjdGljZSoqOiBBbHdheXMgcHJvdmlkZSBhIGBjbG9uZUZuYCAoY2xvbmUgYXR0YWNoIGZ1bmN0aW9uKSB3aGVuIHlvdSBjYWxsIGEgdHJhbnNsdWRlIGZ1bmN0aW9uXG4gKiBzaW5jZSB5b3UgdGhlbiBnZXQgYSBmcmVzaCBjbG9uZSBvZiB0aGUgb3JpZ2luYWwgRE9NIGFuZCBhbHNvIGhhdmUgYWNjZXNzIHRvIHRoZSBuZXcgdHJhbnNjbHVzaW9uIHNjb3BlLlxuICogPC9kaXY+XG4gKlxuICogSXQgaXMgbm9ybWFsIHByYWN0aWNlIHRvIGF0dGFjaCB5b3VyIHRyYW5zY2x1ZGVkIGNvbnRlbnQgKGBjbG9uZWApIHRvIHRoZSBET00gaW5zaWRlIHlvdXIgKipjbG9uZVxuICogYXR0YWNoIGZ1bmN0aW9uKio6XG4gKlxuICogYGBganNcbiAqIHZhciB0cmFuc2NsdWRlZENvbnRlbnQsIHRyYW5zY2x1c2lvblNjb3BlO1xuICpcbiAqICR0cmFuc2NsdWRlKGZ1bmN0aW9uKGNsb25lLCBzY29wZSkge1xuICogICBlbGVtZW50LmFwcGVuZChjbG9uZSk7XG4gKiAgIHRyYW5zY2x1ZGVkQ29udGVudCA9IGNsb25lO1xuICogICB0cmFuc2NsdXNpb25TY29wZSA9IHNjb3BlO1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBMYXRlciwgaWYgeW91IHdhbnQgdG8gcmVtb3ZlIHRoZSB0cmFuc2NsdWRlZCBjb250ZW50IGZyb20geW91ciBET00gdGhlbiB5b3Ugc2hvdWxkIGFsc28gZGVzdHJveSB0aGVcbiAqIGFzc29jaWF0ZWQgdHJhbnNjbHVzaW9uIHNjb3BlOlxuICpcbiAqIGBgYGpzXG4gKiB0cmFuc2NsdWRlZENvbnRlbnQucmVtb3ZlKCk7XG4gKiB0cmFuc2NsdXNpb25TY29wZS4kZGVzdHJveSgpO1xuICogYGBgXG4gKlxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cbiAqICoqQmVzdCBQcmFjdGljZSoqOiBpZiB5b3UgaW50ZW5kIHRvIGFkZCBhbmQgcmVtb3ZlIHRyYW5zY2x1ZGVkIGNvbnRlbnQgbWFudWFsbHkgaW4geW91ciBkaXJlY3RpdmVcbiAqIChieSBjYWxsaW5nIHRoZSB0cmFuc2NsdWRlIGZ1bmN0aW9uIHRvIGdldCB0aGUgRE9NIGFuZCBhbmQgY2FsbGluZyBgZWxlbWVudC5yZW1vdmUoKWAgdG8gcmVtb3ZlIGl0KSxcbiAqIHRoZW4geW91IGFyZSBhbHNvIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGAkZGVzdHJveWAgb24gdGhlIHRyYW5zY2x1c2lvbiBzY29wZS5cbiAqIDwvZGl2PlxuICpcbiAqIFRoZSBidWlsdC1pbiBET00gbWFuaXB1bGF0aW9uIGRpcmVjdGl2ZXMsIHN1Y2ggYXMge0BsaW5rIG5nSWZ9LCB7QGxpbmsgbmdTd2l0Y2h9IGFuZCB7QGxpbmsgbmdSZXBlYXR9XG4gKiBhdXRvbWF0aWNhbGx5IGRlc3Ryb3kgdGhlaXIgdHJhbnNsdWRlZCBjbG9uZXMgYXMgbmVjZXNzYXJ5IHNvIHlvdSBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGlzIGlmXG4gKiB5b3UgYXJlIHNpbXBseSB1c2luZyB7QGxpbmsgbmdUcmFuc2NsdWRlfSB0byBpbmplY3QgdGhlIHRyYW5zY2x1c2lvbiBpbnRvIHlvdXIgZGlyZWN0aXZlLlxuICpcbiAqXG4gKiAjIyMjIFRyYW5zY2x1c2lvbiBTY29wZXNcbiAqXG4gKiBXaGVuIHlvdSBjYWxsIGEgdHJhbnNjbHVkZSBmdW5jdGlvbiBpdCByZXR1cm5zIGEgRE9NIGZyYWdtZW50IHRoYXQgaXMgcHJlLWJvdW5kIHRvIGEgKip0cmFuc2NsdXNpb25cbiAqIHNjb3BlKiouIFRoaXMgc2NvcGUgaXMgc3BlY2lhbCwgaW4gdGhhdCBpdCBpcyBhIGNoaWxkIG9mIHRoZSBkaXJlY3RpdmUncyBzY29wZSAoYW5kIHNvIGdldHMgZGVzdHJveWVkXG4gKiB3aGVuIHRoZSBkaXJlY3RpdmUncyBzY29wZSBnZXRzIGRlc3Ryb3llZCkgYnV0IGl0IGluaGVyaXRzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzY29wZSBmcm9tIHdoaWNoIGl0XG4gKiB3YXMgdGFrZW4uXG4gKlxuICogRm9yIGV4YW1wbGUgY29uc2lkZXIgYSBkaXJlY3RpdmUgdGhhdCB1c2VzIHRyYW5zY2x1c2lvbiBhbmQgaXNvbGF0ZWQgc2NvcGUuIFRoZSBET00gaGllcmFyY2h5IG1pZ2h0IGxvb2tcbiAqIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBodG1sXG4gKiA8ZGl2IG5nLWFwcD5cbiAqICAgPGRpdiBpc29sYXRlPlxuICogICAgIDxkaXYgdHJhbnNjbHVzaW9uPlxuICogICAgIDwvZGl2PlxuICogICA8L2Rpdj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKlxuICogVGhlIGAkcGFyZW50YCBzY29wZSBoaWVyYXJjaHkgd2lsbCBsb29rIGxpa2UgdGhpczpcbiAqXG4gKiBgYGBcbiAqIC0gJHJvb3RTY29wZVxuICogICAtIGlzb2xhdGVcbiAqICAgICAtIHRyYW5zY2x1c2lvblxuICogYGBgXG4gKlxuICogYnV0IHRoZSBzY29wZXMgd2lsbCBpbmhlcml0IHByb3RvdHlwaWNhbGx5IGZyb20gZGlmZmVyZW50IHNjb3BlcyB0byB0aGVpciBgJHBhcmVudGAuXG4gKlxuICogYGBgXG4gKiAtICRyb290U2NvcGVcbiAqICAgLSB0cmFuc2NsdXNpb25cbiAqIC0gaXNvbGF0ZVxuICogYGBgXG4gKlxuICpcbiAqICMjIyBBdHRyaWJ1dGVzXG4gKlxuICogVGhlIHtAbGluayBuZy4kY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlcyBBdHRyaWJ1dGVzfSBvYmplY3QgLSBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIgaW4gdGhlXG4gKiBgbGluaygpYCBvciBgY29tcGlsZSgpYCBmdW5jdGlvbnMuIEl0IGhhcyBhIHZhcmlldHkgb2YgdXNlcy5cbiAqXG4gKiBhY2Nlc3NpbmcgKk5vcm1hbGl6ZWQgYXR0cmlidXRlIG5hbWVzOipcbiAqIERpcmVjdGl2ZXMgbGlrZSAnbmdCaW5kJyBjYW4gYmUgZXhwcmVzc2VkIGluIG1hbnkgd2F5czogJ25nOmJpbmQnLCBgZGF0YS1uZy1iaW5kYCwgb3IgJ3gtbmctYmluZCcuXG4gKiB0aGUgYXR0cmlidXRlcyBvYmplY3QgYWxsb3dzIGZvciBub3JtYWxpemVkIGFjY2VzcyB0b1xuICogICB0aGUgYXR0cmlidXRlcy5cbiAqXG4gKiAqICpEaXJlY3RpdmUgaW50ZXItY29tbXVuaWNhdGlvbjoqIEFsbCBkaXJlY3RpdmVzIHNoYXJlIHRoZSBzYW1lIGluc3RhbmNlIG9mIHRoZSBhdHRyaWJ1dGVzXG4gKiAgIG9iamVjdCB3aGljaCBhbGxvd3MgdGhlIGRpcmVjdGl2ZXMgdG8gdXNlIHRoZSBhdHRyaWJ1dGVzIG9iamVjdCBhcyBpbnRlciBkaXJlY3RpdmVcbiAqICAgY29tbXVuaWNhdGlvbi5cbiAqXG4gKiAqICpTdXBwb3J0cyBpbnRlcnBvbGF0aW9uOiogSW50ZXJwb2xhdGlvbiBhdHRyaWJ1dGVzIGFyZSBhc3NpZ25lZCB0byB0aGUgYXR0cmlidXRlIG9iamVjdFxuICogICBhbGxvd2luZyBvdGhlciBkaXJlY3RpdmVzIHRvIHJlYWQgdGhlIGludGVycG9sYXRlZCB2YWx1ZS5cbiAqXG4gKiAqICpPYnNlcnZpbmcgaW50ZXJwb2xhdGVkIGF0dHJpYnV0ZXM6KiBVc2UgYCRvYnNlcnZlYCB0byBvYnNlcnZlIHRoZSB2YWx1ZSBjaGFuZ2VzIG9mIGF0dHJpYnV0ZXNcbiAqICAgdGhhdCBjb250YWluIGludGVycG9sYXRpb24gKGUuZy4gYHNyYz1cInt7YmFyfX1cImApLiBOb3Qgb25seSBpcyB0aGlzIHZlcnkgZWZmaWNpZW50IGJ1dCBpdCdzIGFsc29cbiAqICAgdGhlIG9ubHkgd2F5IHRvIGVhc2lseSBnZXQgdGhlIGFjdHVhbCB2YWx1ZSBiZWNhdXNlIGR1cmluZyB0aGUgbGlua2luZyBwaGFzZSB0aGUgaW50ZXJwb2xhdGlvblxuICogICBoYXNuJ3QgYmVlbiBldmFsdWF0ZWQgeWV0IGFuZCBzbyB0aGUgdmFsdWUgaXMgYXQgdGhpcyB0aW1lIHNldCB0byBgdW5kZWZpbmVkYC5cbiAqXG4gKiBgYGBqc1xuICogZnVuY3Rpb24gbGlua2luZ0ZuKHNjb3BlLCBlbG0sIGF0dHJzLCBjdHJsKSB7XG4gKiAgIC8vIGdldCB0aGUgYXR0cmlidXRlIHZhbHVlXG4gKiAgIGNvbnNvbGUubG9nKGF0dHJzLm5nTW9kZWwpO1xuICpcbiAqICAgLy8gY2hhbmdlIHRoZSBhdHRyaWJ1dGVcbiAqICAgYXR0cnMuJHNldCgnbmdNb2RlbCcsICduZXcgdmFsdWUnKTtcbiAqXG4gKiAgIC8vIG9ic2VydmUgY2hhbmdlcyB0byBpbnRlcnBvbGF0ZWQgYXR0cmlidXRlXG4gKiAgIGF0dHJzLiRvYnNlcnZlKCduZ01vZGVsJywgZnVuY3Rpb24odmFsdWUpIHtcbiAqICAgICBjb25zb2xlLmxvZygnbmdNb2RlbCBoYXMgY2hhbmdlZCB2YWx1ZSB0byAnICsgdmFsdWUpO1xuICogICB9KTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiPlxuICogKipOb3RlKio6IFR5cGljYWxseSBkaXJlY3RpdmVzIGFyZSByZWdpc3RlcmVkIHdpdGggYG1vZHVsZS5kaXJlY3RpdmVgLiBUaGUgZXhhbXBsZSBiZWxvdyBpc1xuICogdG8gaWxsdXN0cmF0ZSBob3cgYCRjb21waWxlYCB3b3Jrcy5cbiAqIDwvZGl2PlxuICpcbiA8ZXhhbXBsZSBtb2R1bGU9XCJjb21waWxlRXhhbXBsZVwiPlxuICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICA8c2NyaXB0PlxuICAgICAgYW5ndWxhci5tb2R1bGUoJ2NvbXBpbGVFeGFtcGxlJywgW10sIGZ1bmN0aW9uKCRjb21waWxlUHJvdmlkZXIpIHtcbiAgICAgICAgLy8gY29uZmlndXJlIG5ldyAnY29tcGlsZScgZGlyZWN0aXZlIGJ5IHBhc3NpbmcgYSBkaXJlY3RpdmVcbiAgICAgICAgLy8gZmFjdG9yeSBmdW5jdGlvbi4gVGhlIGZhY3RvcnkgZnVuY3Rpb24gaW5qZWN0cyB0aGUgJyRjb21waWxlJ1xuICAgICAgICAkY29tcGlsZVByb3ZpZGVyLmRpcmVjdGl2ZSgnY29tcGlsZScsIGZ1bmN0aW9uKCRjb21waWxlKSB7XG4gICAgICAgICAgLy8gZGlyZWN0aXZlIGZhY3RvcnkgY3JlYXRlcyBhIGxpbmsgZnVuY3Rpb25cbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICAgICAgICBzY29wZS4kd2F0Y2goXG4gICAgICAgICAgICAgIGZ1bmN0aW9uKHNjb3BlKSB7XG4gICAgICAgICAgICAgICAgIC8vIHdhdGNoIHRoZSAnY29tcGlsZScgZXhwcmVzc2lvbiBmb3IgY2hhbmdlc1xuICAgICAgICAgICAgICAgIHJldHVybiBzY29wZS4kZXZhbChhdHRycy5jb21waWxlKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSAnY29tcGlsZScgZXhwcmVzc2lvbiBjaGFuZ2VzXG4gICAgICAgICAgICAgICAgLy8gYXNzaWduIGl0IGludG8gdGhlIGN1cnJlbnQgRE9NXG4gICAgICAgICAgICAgICAgZWxlbWVudC5odG1sKHZhbHVlKTtcblxuICAgICAgICAgICAgICAgIC8vIGNvbXBpbGUgdGhlIG5ldyBET00gYW5kIGxpbmsgaXQgdG8gdGhlIGN1cnJlbnRcbiAgICAgICAgICAgICAgICAvLyBzY29wZS5cbiAgICAgICAgICAgICAgICAvLyBOT1RFOiB3ZSBvbmx5IGNvbXBpbGUgLmNoaWxkTm9kZXMgc28gdGhhdFxuICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGdldCBpbnRvIGluZmluaXRlIGxvb3AgY29tcGlsaW5nIG91cnNlbHZlc1xuICAgICAgICAgICAgICAgICRjb21waWxlKGVsZW1lbnQuY29udGVudHMoKSkoc2NvcGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5jb250cm9sbGVyKCdHcmVldGVyQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XG4gICAgICAgICRzY29wZS5uYW1lID0gJ0FuZ3VsYXInO1xuICAgICAgICAkc2NvcGUuaHRtbCA9ICdIZWxsbyB7e25hbWV9fSc7XG4gICAgICB9XSk7XG4gICAgPC9zY3JpcHQ+XG4gICAgPGRpdiBuZy1jb250cm9sbGVyPVwiR3JlZXRlckNvbnRyb2xsZXJcIj5cbiAgICAgIDxpbnB1dCBuZy1tb2RlbD1cIm5hbWVcIj4gPGJyPlxuICAgICAgPHRleHRhcmVhIG5nLW1vZGVsPVwiaHRtbFwiPjwvdGV4dGFyZWE+IDxicj5cbiAgICAgIDxkaXYgY29tcGlsZT1cImh0bWxcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgIDwvZmlsZT5cbiAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cbiAgICAgaXQoJ3Nob3VsZCBhdXRvIGNvbXBpbGUnLCBmdW5jdGlvbigpIHtcbiAgICAgICB2YXIgdGV4dGFyZWEgPSAkKCd0ZXh0YXJlYScpO1xuICAgICAgIHZhciBvdXRwdXQgPSAkKCdkaXZbY29tcGlsZV0nKTtcbiAgICAgICAvLyBUaGUgaW5pdGlhbCBzdGF0ZSByZWFkcyAnSGVsbG8gQW5ndWxhcicuXG4gICAgICAgZXhwZWN0KG91dHB1dC5nZXRUZXh0KCkpLnRvQmUoJ0hlbGxvIEFuZ3VsYXInKTtcbiAgICAgICB0ZXh0YXJlYS5jbGVhcigpO1xuICAgICAgIHRleHRhcmVhLnNlbmRLZXlzKCd7e25hbWV9fSEnKTtcbiAgICAgICBleHBlY3Qob3V0cHV0LmdldFRleHQoKSkudG9CZSgnQW5ndWxhciEnKTtcbiAgICAgfSk7XG4gICA8L2ZpbGU+XG4gPC9leGFtcGxlPlxuXG4gKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfERPTUVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCBvciBIVE1MIHN0cmluZyB0byBjb21waWxlIGludG8gYSB0ZW1wbGF0ZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oYW5ndWxhci5TY29wZSwgY2xvbmVBdHRhY2hGbj0pfSB0cmFuc2NsdWRlIGZ1bmN0aW9uIGF2YWlsYWJsZSB0byBkaXJlY3RpdmVzIC0gREVQUkVDQVRFRC5cbiAqXG4gKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZXJyb3JcIj5cbiAqICoqTm90ZToqKiBQYXNzaW5nIGEgYHRyYW5zY2x1ZGVgIGZ1bmN0aW9uIHRvIHRoZSAkY29tcGlsZSBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCBhcyBpdFxuICogICBlLmcuIHdpbGwgbm90IHVzZSB0aGUgcmlnaHQgb3V0ZXIgc2NvcGUuIFBsZWFzZSBwYXNzIHRoZSB0cmFuc2NsdWRlIGZ1bmN0aW9uIGFzIGFcbiAqICAgYHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuYCB0byB0aGUgbGluayBmdW5jdGlvbiBpbnN0ZWFkLlxuICogPC9kaXY+XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG1heFByaW9yaXR5IG9ubHkgYXBwbHkgZGlyZWN0aXZlcyBsb3dlciB0aGFuIGdpdmVuIHByaW9yaXR5IChPbmx5IGVmZmVjdHMgdGhlXG4gKiAgICAgICAgICAgICAgICAgcm9vdCBlbGVtZW50KHMpLCBub3QgdGhlaXIgY2hpbGRyZW4pXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc2NvcGUsIGNsb25lQXR0YWNoRm49LCBvcHRpb25zPSl9IGEgbGluayBmdW5jdGlvbiB3aGljaCBpcyB1c2VkIHRvIGJpbmQgdGVtcGxhdGVcbiAqIChhIERPTSBlbGVtZW50L3RyZWUpIHRvIGEgc2NvcGUuIFdoZXJlOlxuICpcbiAqICAqIGBzY29wZWAgLSBBIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIFNjb3BlfSB0byBiaW5kIHRvLlxuICogICogYGNsb25lQXR0YWNoRm5gIC0gSWYgYGNsb25lQXR0YWNoRm5gIGlzIHByb3ZpZGVkLCB0aGVuIHRoZSBsaW5rIGZ1bmN0aW9uIHdpbGwgY2xvbmUgdGhlXG4gKiAgYHRlbXBsYXRlYCBhbmQgY2FsbCB0aGUgYGNsb25lQXR0YWNoRm5gIGZ1bmN0aW9uIGFsbG93aW5nIHRoZSBjYWxsZXIgdG8gYXR0YWNoIHRoZVxuICogIGNsb25lZCBlbGVtZW50cyB0byB0aGUgRE9NIGRvY3VtZW50IGF0IHRoZSBhcHByb3ByaWF0ZSBwbGFjZS4gVGhlIGBjbG9uZUF0dGFjaEZuYCBpc1xuICogIGNhbGxlZCBhczogPGJyPiBgY2xvbmVBdHRhY2hGbihjbG9uZWRFbGVtZW50LCBzY29wZSlgIHdoZXJlOlxuICpcbiAqICAgICAgKiBgY2xvbmVkRWxlbWVudGAgLSBpcyBhIGNsb25lIG9mIHRoZSBvcmlnaW5hbCBgZWxlbWVudGAgcGFzc2VkIGludG8gdGhlIGNvbXBpbGVyLlxuICogICAgICAqIGBzY29wZWAgLSBpcyB0aGUgY3VycmVudCBzY29wZSB3aXRoIHdoaWNoIHRoZSBsaW5raW5nIGZ1bmN0aW9uIGlzIHdvcmtpbmcgd2l0aC5cbiAqXG4gKiAgKiBgb3B0aW9uc2AgLSBBbiBvcHRpb25hbCBvYmplY3QgaGFzaCB3aXRoIGxpbmtpbmcgb3B0aW9ucy4gSWYgYG9wdGlvbnNgIGlzIHByb3ZpZGVkLCB0aGVuIHRoZSBmb2xsb3dpbmdcbiAqICBrZXlzIG1heSBiZSB1c2VkIHRvIGNvbnRyb2wgbGlua2luZyBiZWhhdmlvcjpcbiAqXG4gKiAgICAgICogYHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuYCAtIHRoZSB0cmFuc2NsdWRlIGZ1bmN0aW9uIG1hZGUgYXZhaWxhYmxlIHRvXG4gKiAgICAgICAgZGlyZWN0aXZlczsgaWYgZ2l2ZW4sIGl0IHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlIGxpbmsgZnVuY3Rpb25zIG9mXG4gKiAgICAgICAgZGlyZWN0aXZlcyBmb3VuZCBpbiBgZWxlbWVudGAgZHVyaW5nIGNvbXBpbGF0aW9uLlxuICogICAgICAqIGB0cmFuc2NsdWRlQ29udHJvbGxlcnNgIC0gYW4gb2JqZWN0IGhhc2ggd2l0aCBrZXlzIHRoYXQgbWFwIGNvbnRyb2xsZXIgbmFtZXNcbiAqICAgICAgICB0byBjb250cm9sbGVyIGluc3RhbmNlczsgaWYgZ2l2ZW4sIGl0IHdpbGwgbWFrZSB0aGUgY29udHJvbGxlcnNcbiAqICAgICAgICBhdmFpbGFibGUgdG8gZGlyZWN0aXZlcy5cbiAqICAgICAgKiBgZnV0dXJlUGFyZW50RWxlbWVudGAgLSBkZWZpbmVzIHRoZSBwYXJlbnQgdG8gd2hpY2ggdGhlIGBjbG9uZUF0dGFjaEZuYCB3aWxsIGFkZFxuICogICAgICAgIHRoZSBjbG9uZWQgZWxlbWVudHM7IG9ubHkgbmVlZGVkIGZvciB0cmFuc2NsdWRlcyB0aGF0IGFyZSBhbGxvd2VkIHRvIGNvbnRhaW4gbm9uIGh0bWxcbiAqICAgICAgICBlbGVtZW50cyAoZS5nLiBTVkcgZWxlbWVudHMpLiBTZWUgYWxzbyB0aGUgZGlyZWN0aXZlLmNvbnRyb2xsZXIgcHJvcGVydHkuXG4gKlxuICogQ2FsbGluZyB0aGUgbGlua2luZyBmdW5jdGlvbiByZXR1cm5zIHRoZSBlbGVtZW50IG9mIHRoZSB0ZW1wbGF0ZS4gSXQgaXMgZWl0aGVyIHRoZSBvcmlnaW5hbFxuICogZWxlbWVudCBwYXNzZWQgaW4sIG9yIHRoZSBjbG9uZSBvZiB0aGUgZWxlbWVudCBpZiB0aGUgYGNsb25lQXR0YWNoRm5gIGlzIHByb3ZpZGVkLlxuICpcbiAqIEFmdGVyIGxpbmtpbmcgdGhlIHZpZXcgaXMgbm90IHVwZGF0ZWQgdW50aWwgYWZ0ZXIgYSBjYWxsIHRvICRkaWdlc3Qgd2hpY2ggdHlwaWNhbGx5IGlzIGRvbmUgYnlcbiAqIEFuZ3VsYXIgYXV0b21hdGljYWxseS5cbiAqXG4gKiBJZiB5b3UgbmVlZCBhY2Nlc3MgdG8gdGhlIGJvdW5kIHZpZXcsIHRoZXJlIGFyZSB0d28gd2F5cyB0byBkbyBpdDpcbiAqXG4gKiAtIElmIHlvdSBhcmUgbm90IGFza2luZyB0aGUgbGlua2luZyBmdW5jdGlvbiB0byBjbG9uZSB0aGUgdGVtcGxhdGUsIGNyZWF0ZSB0aGUgRE9NIGVsZW1lbnQocylcbiAqICAgYmVmb3JlIHlvdSBzZW5kIHRoZW0gdG8gdGhlIGNvbXBpbGVyIGFuZCBrZWVwIHRoaXMgcmVmZXJlbmNlIGFyb3VuZC5cbiAqICAgYGBganNcbiAqICAgICB2YXIgZWxlbWVudCA9ICRjb21waWxlKCc8cD57e3RvdGFsfX08L3A+Jykoc2NvcGUpO1xuICogICBgYGBcbiAqXG4gKiAtIGlmIG9uIHRoZSBvdGhlciBoYW5kLCB5b3UgbmVlZCB0aGUgZWxlbWVudCB0byBiZSBjbG9uZWQsIHRoZSB2aWV3IHJlZmVyZW5jZSBmcm9tIHRoZSBvcmlnaW5hbFxuICogICBleGFtcGxlIHdvdWxkIG5vdCBwb2ludCB0byB0aGUgY2xvbmUsIGJ1dCByYXRoZXIgdG8gdGhlIG9yaWdpbmFsIHRlbXBsYXRlIHRoYXQgd2FzIGNsb25lZC4gSW5cbiAqICAgdGhpcyBjYXNlLCB5b3UgY2FuIGFjY2VzcyB0aGUgY2xvbmUgdmlhIHRoZSBjbG9uZUF0dGFjaEZuOlxuICogICBgYGBqc1xuICogICAgIHZhciB0ZW1wbGF0ZUVsZW1lbnQgPSBhbmd1bGFyLmVsZW1lbnQoJzxwPnt7dG90YWx9fTwvcD4nKSxcbiAqICAgICAgICAgc2NvcGUgPSAuLi4uO1xuICpcbiAqICAgICB2YXIgY2xvbmVkRWxlbWVudCA9ICRjb21waWxlKHRlbXBsYXRlRWxlbWVudCkoc2NvcGUsIGZ1bmN0aW9uKGNsb25lZEVsZW1lbnQsIHNjb3BlKSB7XG4gKiAgICAgICAvL2F0dGFjaCB0aGUgY2xvbmUgdG8gRE9NIGRvY3VtZW50IGF0IHRoZSByaWdodCBwbGFjZVxuICogICAgIH0pO1xuICpcbiAqICAgICAvL25vdyB3ZSBoYXZlIHJlZmVyZW5jZSB0byB0aGUgY2xvbmVkIERPTSB2aWEgYGNsb25lZEVsZW1lbnRgXG4gKiAgIGBgYFxuICpcbiAqXG4gKiBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRoZSBjb21waWxlciB3b3Jrcywgc2VlIHRoZVxuICoge0BsaW5rIGd1aWRlL2NvbXBpbGVyIEFuZ3VsYXIgSFRNTCBDb21waWxlcn0gc2VjdGlvbiBvZiB0aGUgRGV2ZWxvcGVyIEd1aWRlLlxuICovXG5cbnZhciAkY29tcGlsZU1pbkVyciA9IG1pbkVycignJGNvbXBpbGUnKTtcblxuLyoqXG4gKiBAbmdkb2MgcHJvdmlkZXJcbiAqIEBuYW1lICRjb21waWxlUHJvdmlkZXJcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqL1xuJENvbXBpbGVQcm92aWRlci4kaW5qZWN0ID0gWyckcHJvdmlkZScsICckJHNhbml0aXplVXJpUHJvdmlkZXInXTtcbmZ1bmN0aW9uICRDb21waWxlUHJvdmlkZXIoJHByb3ZpZGUsICQkc2FuaXRpemVVcmlQcm92aWRlcikge1xuICB2YXIgaGFzRGlyZWN0aXZlcyA9IHt9LFxuICAgICAgU3VmZml4ID0gJ0RpcmVjdGl2ZScsXG4gICAgICBDT01NRU5UX0RJUkVDVElWRV9SRUdFWFAgPSAvXlxccypkaXJlY3RpdmVcXDpcXHMqKFtcXHdcXC1dKylcXHMrKC4qKSQvLFxuICAgICAgQ0xBU1NfRElSRUNUSVZFX1JFR0VYUCA9IC8oKFtcXHdcXC1dKykoPzpcXDooW147XSspKT87PykvLFxuICAgICAgQUxMX09SX05PVEhJTkdfQVRUUlMgPSBtYWtlTWFwKCduZ1NyYyxuZ1NyY3NldCxzcmMsc3Jjc2V0JyksXG4gICAgICBSRVFVSVJFX1BSRUZJWF9SRUdFWFAgPSAvXig/OihcXF5cXF4/KT8oXFw/KT8oXFxeXFxePyk/KT8vO1xuXG4gIC8vIFJlZjogaHR0cDovL2RldmVsb3BlcnMud2hhdHdnLm9yZy93ZWJhcHBhcGlzLmh0bWwjZXZlbnQtaGFuZGxlci1pZGwtYXR0cmlidXRlc1xuICAvLyBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IGZ1dHVyZSBET00gZXZlbnQgYXR0cmlidXRlIG5hbWVzIHdpbGwgYmVnaW4gd2l0aFxuICAvLyAnb24nIGFuZCBiZSBjb21wb3NlZCBvZiBvbmx5IEVuZ2xpc2ggbGV0dGVycy5cbiAgdmFyIEVWRU5UX0hBTkRMRVJfQVRUUl9SRUdFWFAgPSAvXihvblthLXpdK3xmb3JtYWN0aW9uKSQvO1xuXG4gIGZ1bmN0aW9uIHBhcnNlSXNvbGF0ZUJpbmRpbmdzKHNjb3BlLCBkaXJlY3RpdmVOYW1lKSB7XG4gICAgdmFyIExPQ0FMX1JFR0VYUCA9IC9eXFxzKihbQCZdfD0oXFwqPykpKFxcPz8pXFxzKihcXHcqKVxccyokLztcblxuICAgIHZhciBiaW5kaW5ncyA9IHt9O1xuXG4gICAgZm9yRWFjaChzY29wZSwgZnVuY3Rpb24oZGVmaW5pdGlvbiwgc2NvcGVOYW1lKSB7XG4gICAgICB2YXIgbWF0Y2ggPSBkZWZpbml0aW9uLm1hdGNoKExPQ0FMX1JFR0VYUCk7XG5cbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhyb3cgJGNvbXBpbGVNaW5FcnIoJ2lzY3AnLFxuICAgICAgICAgICAgXCJJbnZhbGlkIGlzb2xhdGUgc2NvcGUgZGVmaW5pdGlvbiBmb3IgZGlyZWN0aXZlICd7MH0nLlwiICtcbiAgICAgICAgICAgIFwiIERlZmluaXRpb246IHsuLi4gezF9OiAnezJ9JyAuLi59XCIsXG4gICAgICAgICAgICBkaXJlY3RpdmVOYW1lLCBzY29wZU5hbWUsIGRlZmluaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBiaW5kaW5nc1tzY29wZU5hbWVdID0ge1xuICAgICAgICBtb2RlOiBtYXRjaFsxXVswXSxcbiAgICAgICAgY29sbGVjdGlvbjogbWF0Y2hbMl0gPT09ICcqJyxcbiAgICAgICAgb3B0aW9uYWw6IG1hdGNoWzNdID09PSAnPycsXG4gICAgICAgIGF0dHJOYW1lOiBtYXRjaFs0XSB8fCBzY29wZU5hbWVcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmluZGluZ3M7XG4gIH1cblxuICAvKipcbiAgICogQG5nZG9jIG1ldGhvZFxuICAgKiBAbmFtZSAkY29tcGlsZVByb3ZpZGVyI2RpcmVjdGl2ZVxuICAgKiBAa2luZCBmdW5jdGlvblxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogUmVnaXN0ZXIgYSBuZXcgZGlyZWN0aXZlIHdpdGggdGhlIGNvbXBpbGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IG5hbWUgTmFtZSBvZiB0aGUgZGlyZWN0aXZlIGluIGNhbWVsLWNhc2UgKGkuZS4gPGNvZGU+bmdCaW5kPC9jb2RlPiB3aGljaFxuICAgKiAgICB3aWxsIG1hdGNoIGFzIDxjb2RlPm5nLWJpbmQ8L2NvZGU+KSwgb3IgYW4gb2JqZWN0IG1hcCBvZiBkaXJlY3RpdmVzIHdoZXJlIHRoZSBrZXlzIGFyZSB0aGVcbiAgICogICAgbmFtZXMgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZSBmYWN0b3JpZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IGRpcmVjdGl2ZUZhY3RvcnkgQW4gaW5qZWN0YWJsZSBkaXJlY3RpdmUgZmFjdG9yeSBmdW5jdGlvbi4gU2VlXG4gICAqICAgIHtAbGluayBndWlkZS9kaXJlY3RpdmV9IGZvciBtb3JlIGluZm8uXG4gICAqIEByZXR1cm5zIHtuZy4kY29tcGlsZVByb3ZpZGVyfSBTZWxmIGZvciBjaGFpbmluZy5cbiAgICovXG4gICB0aGlzLmRpcmVjdGl2ZSA9IGZ1bmN0aW9uIHJlZ2lzdGVyRGlyZWN0aXZlKG5hbWUsIGRpcmVjdGl2ZUZhY3RvcnkpIHtcbiAgICBhc3NlcnROb3RIYXNPd25Qcm9wZXJ0eShuYW1lLCAnZGlyZWN0aXZlJyk7XG4gICAgaWYgKGlzU3RyaW5nKG5hbWUpKSB7XG4gICAgICBhc3NlcnRBcmcoZGlyZWN0aXZlRmFjdG9yeSwgJ2RpcmVjdGl2ZUZhY3RvcnknKTtcbiAgICAgIGlmICghaGFzRGlyZWN0aXZlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBoYXNEaXJlY3RpdmVzW25hbWVdID0gW107XG4gICAgICAgICRwcm92aWRlLmZhY3RvcnkobmFtZSArIFN1ZmZpeCwgWyckaW5qZWN0b3InLCAnJGV4Y2VwdGlvbkhhbmRsZXInLFxuICAgICAgICAgIGZ1bmN0aW9uKCRpbmplY3RvciwgJGV4Y2VwdGlvbkhhbmRsZXIpIHtcbiAgICAgICAgICAgIHZhciBkaXJlY3RpdmVzID0gW107XG4gICAgICAgICAgICBmb3JFYWNoKGhhc0RpcmVjdGl2ZXNbbmFtZV0sIGZ1bmN0aW9uKGRpcmVjdGl2ZUZhY3RvcnksIGluZGV4KSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIGRpcmVjdGl2ZSA9ICRpbmplY3Rvci5pbnZva2UoZGlyZWN0aXZlRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGlyZWN0aXZlKSkge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlID0geyBjb21waWxlOiB2YWx1ZUZuKGRpcmVjdGl2ZSkgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFkaXJlY3RpdmUuY29tcGlsZSAmJiBkaXJlY3RpdmUubGluaykge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlLmNvbXBpbGUgPSB2YWx1ZUZuKGRpcmVjdGl2ZS5saW5rKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlLnByaW9yaXR5ID0gZGlyZWN0aXZlLnByaW9yaXR5IHx8IDA7XG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlLm5hbWUgPSBkaXJlY3RpdmUubmFtZSB8fCBuYW1lO1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS5yZXF1aXJlID0gZGlyZWN0aXZlLnJlcXVpcmUgfHwgKGRpcmVjdGl2ZS5jb250cm9sbGVyICYmIGRpcmVjdGl2ZS5uYW1lKTtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmUucmVzdHJpY3QgPSBkaXJlY3RpdmUucmVzdHJpY3QgfHwgJ0VBJztcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QoZGlyZWN0aXZlLnNjb3BlKSkge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlLiQkaXNvbGF0ZUJpbmRpbmdzID0gcGFyc2VJc29sYXRlQmluZGluZ3MoZGlyZWN0aXZlLnNjb3BlLCBkaXJlY3RpdmUubmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMucHVzaChkaXJlY3RpdmUpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZXM7XG4gICAgICAgICAgfV0pO1xuICAgICAgfVxuICAgICAgaGFzRGlyZWN0aXZlc1tuYW1lXS5wdXNoKGRpcmVjdGl2ZUZhY3RvcnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JFYWNoKG5hbWUsIHJldmVyc2VQYXJhbXMocmVnaXN0ZXJEaXJlY3RpdmUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cblxuICAvKipcbiAgICogQG5nZG9jIG1ldGhvZFxuICAgKiBAbmFtZSAkY29tcGlsZVByb3ZpZGVyI2FIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0XG4gICAqIEBraW5kIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBSZXRyaWV2ZXMgb3Igb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGlzIHVzZWQgZm9yIHdoaXRlbGlzdGluZyBvZiBzYWZlXG4gICAqIHVybHMgZHVyaW5nIGFbaHJlZl0gc2FuaXRpemF0aW9uLlxuICAgKlxuICAgKiBUaGUgc2FuaXRpemF0aW9uIGlzIGEgc2VjdXJpdHkgbWVhc3VyZSBhaW1lZCBhdCBwcmV2ZW50IFhTUyBhdHRhY2tzIHZpYSBodG1sIGxpbmtzLlxuICAgKlxuICAgKiBBbnkgdXJsIGFib3V0IHRvIGJlIGFzc2lnbmVkIHRvIGFbaHJlZl0gdmlhIGRhdGEtYmluZGluZyBpcyBmaXJzdCBub3JtYWxpemVkIGFuZCB0dXJuZWQgaW50b1xuICAgKiBhbiBhYnNvbHV0ZSB1cmwuIEFmdGVyd2FyZHMsIHRoZSB1cmwgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBgYUhyZWZTYW5pdGl6YXRpb25XaGl0ZWxpc3RgXG4gICAqIHJlZ3VsYXIgZXhwcmVzc2lvbi4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgdGhlIG9yaWdpbmFsIHVybCBpcyB3cml0dGVuIGludG8gdGhlIGRvbS4gT3RoZXJ3aXNlLFxuICAgKiB0aGUgYWJzb2x1dGUgdXJsIGlzIHByZWZpeGVkIHdpdGggYCd1bnNhZmU6J2Agc3RyaW5nIGFuZCBvbmx5IHRoZW4gaXMgaXQgd3JpdHRlbiBpbnRvIHRoZSBET00uXG4gICAqXG4gICAqIEBwYXJhbSB7UmVnRXhwPX0gcmVnZXhwIE5ldyByZWdleHAgdG8gd2hpdGVsaXN0IHVybHMgd2l0aC5cbiAgICogQHJldHVybnMge1JlZ0V4cHxuZy4kY29tcGlsZVByb3ZpZGVyfSBDdXJyZW50IFJlZ0V4cCBpZiBjYWxsZWQgd2l0aG91dCB2YWx1ZSBvciBzZWxmIGZvclxuICAgKiAgICBjaGFpbmluZyBvdGhlcndpc2UuXG4gICAqL1xuICB0aGlzLmFIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0ID0gZnVuY3Rpb24ocmVnZXhwKSB7XG4gICAgaWYgKGlzRGVmaW5lZChyZWdleHApKSB7XG4gICAgICAkJHNhbml0aXplVXJpUHJvdmlkZXIuYUhyZWZTYW5pdGl6YXRpb25XaGl0ZWxpc3QocmVnZXhwKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJCRzYW5pdGl6ZVVyaVByb3ZpZGVyLmFIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0KCk7XG4gICAgfVxuICB9O1xuXG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgJGNvbXBpbGVQcm92aWRlciNpbWdTcmNTYW5pdGl6YXRpb25XaGl0ZWxpc3RcbiAgICogQGtpbmQgZnVuY3Rpb25cbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFJldHJpZXZlcyBvciBvdmVycmlkZXMgdGhlIGRlZmF1bHQgcmVndWxhciBleHByZXNzaW9uIHRoYXQgaXMgdXNlZCBmb3Igd2hpdGVsaXN0aW5nIG9mIHNhZmVcbiAgICogdXJscyBkdXJpbmcgaW1nW3NyY10gc2FuaXRpemF0aW9uLlxuICAgKlxuICAgKiBUaGUgc2FuaXRpemF0aW9uIGlzIGEgc2VjdXJpdHkgbWVhc3VyZSBhaW1lZCBhdCBwcmV2ZW50IFhTUyBhdHRhY2tzIHZpYSBodG1sIGxpbmtzLlxuICAgKlxuICAgKiBBbnkgdXJsIGFib3V0IHRvIGJlIGFzc2lnbmVkIHRvIGltZ1tzcmNdIHZpYSBkYXRhLWJpbmRpbmcgaXMgZmlyc3Qgbm9ybWFsaXplZCBhbmQgdHVybmVkIGludG9cbiAgICogYW4gYWJzb2x1dGUgdXJsLiBBZnRlcndhcmRzLCB0aGUgdXJsIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgYGltZ1NyY1Nhbml0aXphdGlvbldoaXRlbGlzdGBcbiAgICogcmVndWxhciBleHByZXNzaW9uLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCB0aGUgb3JpZ2luYWwgdXJsIGlzIHdyaXR0ZW4gaW50byB0aGUgZG9tLiBPdGhlcndpc2UsXG4gICAqIHRoZSBhYnNvbHV0ZSB1cmwgaXMgcHJlZml4ZWQgd2l0aCBgJ3Vuc2FmZTonYCBzdHJpbmcgYW5kIG9ubHkgdGhlbiBpcyBpdCB3cml0dGVuIGludG8gdGhlIERPTS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWdFeHA9fSByZWdleHAgTmV3IHJlZ2V4cCB0byB3aGl0ZWxpc3QgdXJscyB3aXRoLlxuICAgKiBAcmV0dXJucyB7UmVnRXhwfG5nLiRjb21waWxlUHJvdmlkZXJ9IEN1cnJlbnQgUmVnRXhwIGlmIGNhbGxlZCB3aXRob3V0IHZhbHVlIG9yIHNlbGYgZm9yXG4gICAqICAgIGNoYWluaW5nIG90aGVyd2lzZS5cbiAgICovXG4gIHRoaXMuaW1nU3JjU2FuaXRpemF0aW9uV2hpdGVsaXN0ID0gZnVuY3Rpb24ocmVnZXhwKSB7XG4gICAgaWYgKGlzRGVmaW5lZChyZWdleHApKSB7XG4gICAgICAkJHNhbml0aXplVXJpUHJvdmlkZXIuaW1nU3JjU2FuaXRpemF0aW9uV2hpdGVsaXN0KHJlZ2V4cCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICQkc2FuaXRpemVVcmlQcm92aWRlci5pbWdTcmNTYW5pdGl6YXRpb25XaGl0ZWxpc3QoKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgICRjb21waWxlUHJvdmlkZXIjZGVidWdJbmZvRW5hYmxlZFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBlbmFibGVkIHVwZGF0ZSB0aGUgZGVidWdJbmZvRW5hYmxlZCBzdGF0ZSBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRoZVxuICAgKiBjdXJyZW50IGRlYnVnSW5mb0VuYWJsZWQgc3RhdGVcbiAgICogQHJldHVybnMgeyp9IGN1cnJlbnQgdmFsdWUgaWYgdXNlZCBhcyBnZXR0ZXIgb3IgaXRzZWxmIChjaGFpbmluZykgaWYgdXNlZCBhcyBzZXR0ZXJcbiAgICpcbiAgICogQGtpbmQgZnVuY3Rpb25cbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENhbGwgdGhpcyBtZXRob2QgdG8gZW5hYmxlL2Rpc2FibGUgdmFyaW91cyBkZWJ1ZyBydW50aW1lIGluZm9ybWF0aW9uIGluIHRoZSBjb21waWxlciBzdWNoIGFzIGFkZGluZ1xuICAgKiBiaW5kaW5nIGluZm9ybWF0aW9uIGFuZCBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBzY29wZSBvbiB0byBET00gZWxlbWVudHMuXG4gICAqIElmIGVuYWJsZWQsIHRoZSBjb21waWxlciB3aWxsIGFkZCB0aGUgZm9sbG93aW5nIHRvIERPTSBlbGVtZW50cyB0aGF0IGhhdmUgYmVlbiBib3VuZCB0byB0aGUgc2NvcGVcbiAgICogKiBgbmctYmluZGluZ2AgQ1NTIGNsYXNzXG4gICAqICogYCRiaW5kaW5nYCBkYXRhIHByb3BlcnR5IGNvbnRhaW5pbmcgYW4gYXJyYXkgb2YgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnNcbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIHVzZSB0aGlzIGluIHByb2R1Y3Rpb24gZm9yIGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYm9vc3QuIFNlZVxuICAgKiB7QGxpbmsgZ3VpZGUvcHJvZHVjdGlvbiNkaXNhYmxpbmctZGVidWctZGF0YSBEaXNhYmxpbmcgRGVidWcgRGF0YX0gZm9yIG1vcmUuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAqL1xuICB2YXIgZGVidWdJbmZvRW5hYmxlZCA9IHRydWU7XG4gIHRoaXMuZGVidWdJbmZvRW5hYmxlZCA9IGZ1bmN0aW9uKGVuYWJsZWQpIHtcbiAgICBpZiAoaXNEZWZpbmVkKGVuYWJsZWQpKSB7XG4gICAgICBkZWJ1Z0luZm9FbmFibGVkID0gZW5hYmxlZDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gZGVidWdJbmZvRW5hYmxlZDtcbiAgfTtcblxuICB0aGlzLiRnZXQgPSBbXG4gICAgICAgICAgICAnJGluamVjdG9yJywgJyRpbnRlcnBvbGF0ZScsICckZXhjZXB0aW9uSGFuZGxlcicsICckdGVtcGxhdGVSZXF1ZXN0JywgJyRwYXJzZScsXG4gICAgICAgICAgICAnJGNvbnRyb2xsZXInLCAnJHJvb3RTY29wZScsICckZG9jdW1lbnQnLCAnJHNjZScsICckYW5pbWF0ZScsICckJHNhbml0aXplVXJpJyxcbiAgICBmdW5jdGlvbigkaW5qZWN0b3IsICAgJGludGVycG9sYXRlLCAgICRleGNlcHRpb25IYW5kbGVyLCAgICR0ZW1wbGF0ZVJlcXVlc3QsICAgJHBhcnNlLFxuICAgICAgICAgICAgICRjb250cm9sbGVyLCAgICRyb290U2NvcGUsICAgJGRvY3VtZW50LCAgICRzY2UsICAgJGFuaW1hdGUsICAgJCRzYW5pdGl6ZVVyaSkge1xuXG4gICAgdmFyIEF0dHJpYnV0ZXMgPSBmdW5jdGlvbihlbGVtZW50LCBhdHRyaWJ1dGVzVG9Db3B5KSB7XG4gICAgICBpZiAoYXR0cmlidXRlc1RvQ29weSkge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZXNUb0NvcHkpO1xuICAgICAgICB2YXIgaSwgbCwga2V5O1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgdGhpc1trZXldID0gYXR0cmlidXRlc1RvQ29weVtrZXldO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRhdHRyID0ge307XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJCRlbGVtZW50ID0gZWxlbWVudDtcbiAgICB9O1xuXG4gICAgQXR0cmlidXRlcy5wcm90b3R5cGUgPSB7XG4gICAgICAkbm9ybWFsaXplOiBkaXJlY3RpdmVOb3JtYWxpemUsXG5cblxuICAgICAgLyoqXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICAgKiBAbmFtZSAkY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlcyMkYWRkQ2xhc3NcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXG4gICAgICAgKlxuICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgKiBBZGRzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFzc1ZhbCBwYXJhbWV0ZXIgdG8gdGhlIGVsZW1lbnQuIElmIGFuaW1hdGlvbnNcbiAgICAgICAqIGFyZSBlbmFibGVkIHRoZW4gYW4gYW5pbWF0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkIGZvciB0aGUgY2xhc3MgYWRkaXRpb24uXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzVmFsIFRoZSBjbGFzc05hbWUgdmFsdWUgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbGVtZW50XG4gICAgICAgKi9cbiAgICAgICRhZGRDbGFzczogZnVuY3Rpb24oY2xhc3NWYWwpIHtcbiAgICAgICAgaWYgKGNsYXNzVmFsICYmIGNsYXNzVmFsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAkYW5pbWF0ZS5hZGRDbGFzcyh0aGlzLiQkZWxlbWVudCwgY2xhc3NWYWwpO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICAqIEBuYW1lICRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzIyRyZW1vdmVDbGFzc1xuICAgICAgICogQGtpbmQgZnVuY3Rpb25cbiAgICAgICAqXG4gICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAqIFJlbW92ZXMgdGhlIENTUyBjbGFzcyB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzVmFsIHBhcmFtZXRlciBmcm9tIHRoZSBlbGVtZW50LiBJZlxuICAgICAgICogYW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdnZXJlZCBmb3IgdGhlIGNsYXNzIHJlbW92YWwuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzVmFsIFRoZSBjbGFzc05hbWUgdmFsdWUgdGhhdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgZWxlbWVudFxuICAgICAgICovXG4gICAgICAkcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKGNsYXNzVmFsKSB7XG4gICAgICAgIGlmIChjbGFzc1ZhbCAmJiBjbGFzc1ZhbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgJGFuaW1hdGUucmVtb3ZlQ2xhc3ModGhpcy4kJGVsZW1lbnQsIGNsYXNzVmFsKTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICAgKiBAbmFtZSAkY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlcyMkdXBkYXRlQ2xhc3NcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXG4gICAgICAgKlxuICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgKiBBZGRzIGFuZCByZW1vdmVzIHRoZSBhcHByb3ByaWF0ZSBDU1MgY2xhc3MgdmFsdWVzIHRvIHRoZSBlbGVtZW50IGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlXG4gICAgICAgKiBiZXR3ZWVuIHRoZSBuZXcgYW5kIG9sZCBDU1MgY2xhc3MgdmFsdWVzIChzcGVjaWZpZWQgYXMgbmV3Q2xhc3NlcyBhbmQgb2xkQ2xhc3NlcykuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld0NsYXNzZXMgVGhlIGN1cnJlbnQgQ1NTIGNsYXNzTmFtZSB2YWx1ZVxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG9sZENsYXNzZXMgVGhlIGZvcm1lciBDU1MgY2xhc3NOYW1lIHZhbHVlXG4gICAgICAgKi9cbiAgICAgICR1cGRhdGVDbGFzczogZnVuY3Rpb24obmV3Q2xhc3Nlcywgb2xkQ2xhc3Nlcykge1xuICAgICAgICB2YXIgdG9BZGQgPSB0b2tlbkRpZmZlcmVuY2UobmV3Q2xhc3Nlcywgb2xkQ2xhc3Nlcyk7XG4gICAgICAgIGlmICh0b0FkZCAmJiB0b0FkZC5sZW5ndGgpIHtcbiAgICAgICAgICAkYW5pbWF0ZS5hZGRDbGFzcyh0aGlzLiQkZWxlbWVudCwgdG9BZGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRvUmVtb3ZlID0gdG9rZW5EaWZmZXJlbmNlKG9sZENsYXNzZXMsIG5ld0NsYXNzZXMpO1xuICAgICAgICBpZiAodG9SZW1vdmUgJiYgdG9SZW1vdmUubGVuZ3RoKSB7XG4gICAgICAgICAgJGFuaW1hdGUucmVtb3ZlQ2xhc3ModGhpcy4kJGVsZW1lbnQsIHRvUmVtb3ZlKTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBTZXQgYSBub3JtYWxpemVkIGF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudCBpbiBhIHdheSBzdWNoIHRoYXQgYWxsIGRpcmVjdGl2ZXNcbiAgICAgICAqIGNhbiBzaGFyZSB0aGUgYXR0cmlidXRlLiBUaGlzIGZ1bmN0aW9uIHByb3Blcmx5IGhhbmRsZXMgYm9vbGVhbiBhdHRyaWJ1dGVzLlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBOb3JtYWxpemVkIGtleS4gKGllIG5nQXR0cmlidXRlKVxuICAgICAgICogQHBhcmFtIHtzdHJpbmd8Ym9vbGVhbn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC4gSWYgYG51bGxgIGF0dHJpYnV0ZSB3aWxsIGJlIGRlbGV0ZWQuXG4gICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSB3cml0ZUF0dHIgSWYgZmFsc2UsIGRvZXMgbm90IHdyaXRlIHRoZSB2YWx1ZSB0byBET00gZWxlbWVudCBhdHRyaWJ1dGUuXG4gICAgICAgKiAgICAgRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gYXR0ck5hbWUgT3B0aW9uYWwgbm9uZSBub3JtYWxpemVkIG5hbWUuIERlZmF1bHRzIHRvIGtleS5cbiAgICAgICAqL1xuICAgICAgJHNldDogZnVuY3Rpb24oa2V5LCB2YWx1ZSwgd3JpdGVBdHRyLCBhdHRyTmFtZSkge1xuICAgICAgICAvLyBUT0RPOiBkZWNpZGUgd2hldGhlciBvciBub3QgdG8gdGhyb3cgYW4gZXJyb3IgaWYgXCJjbGFzc1wiXG4gICAgICAgIC8vaXMgc2V0IHRocm91Z2ggdGhpcyBmdW5jdGlvbiBzaW5jZSBpdCBtYXkgY2F1c2UgJHVwZGF0ZUNsYXNzIHRvXG4gICAgICAgIC8vYmVjb21lIHVuc3RhYmxlLlxuXG4gICAgICAgIHZhciBub2RlID0gdGhpcy4kJGVsZW1lbnRbMF0sXG4gICAgICAgICAgICBib29sZWFuS2V5ID0gZ2V0Qm9vbGVhbkF0dHJOYW1lKG5vZGUsIGtleSksXG4gICAgICAgICAgICBhbGlhc2VkS2V5ID0gZ2V0QWxpYXNlZEF0dHJOYW1lKG5vZGUsIGtleSksXG4gICAgICAgICAgICBvYnNlcnZlciA9IGtleSxcbiAgICAgICAgICAgIG5vZGVOYW1lO1xuXG4gICAgICAgIGlmIChib29sZWFuS2V5KSB7XG4gICAgICAgICAgdGhpcy4kJGVsZW1lbnQucHJvcChrZXksIHZhbHVlKTtcbiAgICAgICAgICBhdHRyTmFtZSA9IGJvb2xlYW5LZXk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWxpYXNlZEtleSkge1xuICAgICAgICAgIHRoaXNbYWxpYXNlZEtleV0gPSB2YWx1ZTtcbiAgICAgICAgICBvYnNlcnZlciA9IGFsaWFzZWRLZXk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZTtcblxuICAgICAgICAvLyB0cmFuc2xhdGUgbm9ybWFsaXplZCBrZXkgdG8gYWN0dWFsIGtleVxuICAgICAgICBpZiAoYXR0ck5hbWUpIHtcbiAgICAgICAgICB0aGlzLiRhdHRyW2tleV0gPSBhdHRyTmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdHRyTmFtZSA9IHRoaXMuJGF0dHJba2V5XTtcbiAgICAgICAgICBpZiAoIWF0dHJOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLiRhdHRyW2tleV0gPSBhdHRyTmFtZSA9IHNuYWtlX2Nhc2Uoa2V5LCAnLScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGVOYW1lID0gbm9kZU5hbWVfKHRoaXMuJCRlbGVtZW50KTtcblxuICAgICAgICBpZiAoKG5vZGVOYW1lID09PSAnYScgJiYga2V5ID09PSAnaHJlZicpIHx8XG4gICAgICAgICAgICAobm9kZU5hbWUgPT09ICdpbWcnICYmIGtleSA9PT0gJ3NyYycpKSB7XG4gICAgICAgICAgLy8gc2FuaXRpemUgYVtocmVmXSBhbmQgaW1nW3NyY10gdmFsdWVzXG4gICAgICAgICAgdGhpc1trZXldID0gdmFsdWUgPSAkJHNhbml0aXplVXJpKHZhbHVlLCBrZXkgPT09ICdzcmMnKTtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlTmFtZSA9PT0gJ2ltZycgJiYga2V5ID09PSAnc3Jjc2V0Jykge1xuICAgICAgICAgIC8vIHNhbml0aXplIGltZ1tzcmNzZXRdIHZhbHVlc1xuICAgICAgICAgIHZhciByZXN1bHQgPSBcIlwiO1xuXG4gICAgICAgICAgLy8gZmlyc3QgY2hlY2sgaWYgdGhlcmUgYXJlIHNwYWNlcyBiZWNhdXNlIGl0J3Mgbm90IHRoZSBzYW1lIHBhdHRlcm5cbiAgICAgICAgICB2YXIgdHJpbW1lZFNyY3NldCA9IHRyaW0odmFsdWUpO1xuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICggICA5OTl4ICAgLHwgICA5OTl3ICAgLHwgICAsfCwgICApXG4gICAgICAgICAgdmFyIHNyY1BhdHRlcm4gPSAvKFxccytcXGQreFxccyosfFxccytcXGQrd1xccyosfFxccyssfCxcXHMrKS87XG4gICAgICAgICAgdmFyIHBhdHRlcm4gPSAvXFxzLy50ZXN0KHRyaW1tZWRTcmNzZXQpID8gc3JjUGF0dGVybiA6IC8oLCkvO1xuXG4gICAgICAgICAgLy8gc3BsaXQgc3Jjc2V0IGludG8gdHVwbGUgb2YgdXJpIGFuZCBkZXNjcmlwdG9yIGV4Y2VwdCBmb3IgdGhlIGxhc3QgaXRlbVxuICAgICAgICAgIHZhciByYXdVcmlzID0gdHJpbW1lZFNyY3NldC5zcGxpdChwYXR0ZXJuKTtcblxuICAgICAgICAgIC8vIGZvciBlYWNoIHR1cGxlc1xuICAgICAgICAgIHZhciBuYnJVcmlzV2l0aDJwYXJ0cyA9IE1hdGguZmxvb3IocmF3VXJpcy5sZW5ndGggLyAyKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5iclVyaXNXaXRoMnBhcnRzOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBpbm5lcklkeCA9IGkgKiAyO1xuICAgICAgICAgICAgLy8gc2FuaXRpemUgdGhlIHVyaVxuICAgICAgICAgICAgcmVzdWx0ICs9ICQkc2FuaXRpemVVcmkodHJpbShyYXdVcmlzW2lubmVySWR4XSksIHRydWUpO1xuICAgICAgICAgICAgLy8gYWRkIHRoZSBkZXNjcmlwdG9yXG4gICAgICAgICAgICByZXN1bHQgKz0gKFwiIFwiICsgdHJpbShyYXdVcmlzW2lubmVySWR4ICsgMV0pKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzcGxpdCB0aGUgbGFzdCBpdGVtIGludG8gdXJpIGFuZCBkZXNjcmlwdG9yXG4gICAgICAgICAgdmFyIGxhc3RUdXBsZSA9IHRyaW0ocmF3VXJpc1tpICogMl0pLnNwbGl0KC9cXHMvKTtcblxuICAgICAgICAgIC8vIHNhbml0aXplIHRoZSBsYXN0IHVyaVxuICAgICAgICAgIHJlc3VsdCArPSAkJHNhbml0aXplVXJpKHRyaW0obGFzdFR1cGxlWzBdKSwgdHJ1ZSk7XG5cbiAgICAgICAgICAvLyBhbmQgYWRkIHRoZSBsYXN0IGRlc2NyaXB0b3IgaWYgYW55XG4gICAgICAgICAgaWYgKGxhc3RUdXBsZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAoXCIgXCIgKyB0cmltKGxhc3RUdXBsZVsxXSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZSA9IHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3cml0ZUF0dHIgIT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuJCRlbGVtZW50LnJlbW92ZUF0dHIoYXR0ck5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiQkZWxlbWVudC5hdHRyKGF0dHJOYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmlyZSBvYnNlcnZlcnNcbiAgICAgICAgdmFyICQkb2JzZXJ2ZXJzID0gdGhpcy4kJG9ic2VydmVycztcbiAgICAgICAgJCRvYnNlcnZlcnMgJiYgZm9yRWFjaCgkJG9ic2VydmVyc1tvYnNlcnZlcl0sIGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuXG4gICAgICAvKipcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICAqIEBuYW1lICRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzIyRvYnNlcnZlXG4gICAgICAgKiBAa2luZCBmdW5jdGlvblxuICAgICAgICpcbiAgICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgICogT2JzZXJ2ZXMgYW4gaW50ZXJwb2xhdGVkIGF0dHJpYnV0ZS5cbiAgICAgICAqXG4gICAgICAgKiBUaGUgb2JzZXJ2ZXIgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIG9uY2UgZHVyaW5nIHRoZSBuZXh0IGAkZGlnZXN0YCBmb2xsb3dpbmdcbiAgICAgICAqIGNvbXBpbGF0aW9uLiBUaGUgb2JzZXJ2ZXIgaXMgdGhlbiBpbnZva2VkIHdoZW5ldmVyIHRoZSBpbnRlcnBvbGF0ZWQgdmFsdWVcbiAgICAgICAqIGNoYW5nZXMuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBOb3JtYWxpemVkIGtleS4gKGllIG5nQXR0cmlidXRlKSAuXG4gICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGludGVycG9sYXRlZFZhbHVlKX0gZm4gRnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlclxuICAgICAgICAgICAgICAgIHRoZSBpbnRlcnBvbGF0ZWQgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBjaGFuZ2VzLlxuICAgICAgICogICAgICAgIFNlZSB0aGUge0BsaW5rIGd1aWRlL2RpcmVjdGl2ZSN0ZXh0LWFuZC1hdHRyaWJ1dGUtYmluZGluZ3MgRGlyZWN0aXZlc30gZ3VpZGUgZm9yIG1vcmUgaW5mby5cbiAgICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbigpfSBSZXR1cm5zIGEgZGVyZWdpc3RyYXRpb24gZnVuY3Rpb24gZm9yIHRoaXMgb2JzZXJ2ZXIuXG4gICAgICAgKi9cbiAgICAgICRvYnNlcnZlOiBmdW5jdGlvbihrZXksIGZuKSB7XG4gICAgICAgIHZhciBhdHRycyA9IHRoaXMsXG4gICAgICAgICAgICAkJG9ic2VydmVycyA9IChhdHRycy4kJG9ic2VydmVycyB8fCAoYXR0cnMuJCRvYnNlcnZlcnMgPSBjcmVhdGVNYXAoKSkpLFxuICAgICAgICAgICAgbGlzdGVuZXJzID0gKCQkb2JzZXJ2ZXJzW2tleV0gfHwgKCQkb2JzZXJ2ZXJzW2tleV0gPSBbXSkpO1xuXG4gICAgICAgIGxpc3RlbmVycy5wdXNoKGZuKTtcbiAgICAgICAgJHJvb3RTY29wZS4kZXZhbEFzeW5jKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICghbGlzdGVuZXJzLiQkaW50ZXIgJiYgYXR0cnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgLy8gbm8gb25lIHJlZ2lzdGVyZWQgYXR0cmlidXRlIGludGVycG9sYXRpb24gZnVuY3Rpb24sIHNvIGxldHMgY2FsbCBpdCBtYW51YWxseVxuICAgICAgICAgICAgZm4oYXR0cnNba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgYXJyYXlSZW1vdmUobGlzdGVuZXJzLCBmbik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuXG4gICAgZnVuY3Rpb24gc2FmZUFkZENsYXNzKCRlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgICRlbGVtZW50LmFkZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlnbm9yZSwgc2luY2UgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIHNldCBjbGFzcyBvblxuICAgICAgICAvLyBTVkcgZWxlbWVudCwgd2hlcmUgY2xhc3MgbmFtZSBpcyByZWFkLW9ubHkuXG4gICAgICB9XG4gICAgfVxuXG5cbiAgICB2YXIgc3RhcnRTeW1ib2wgPSAkaW50ZXJwb2xhdGUuc3RhcnRTeW1ib2woKSxcbiAgICAgICAgZW5kU3ltYm9sID0gJGludGVycG9sYXRlLmVuZFN5bWJvbCgpLFxuICAgICAgICBkZW5vcm1hbGl6ZVRlbXBsYXRlID0gKHN0YXJ0U3ltYm9sID09ICd7eycgfHwgZW5kU3ltYm9sICA9PSAnfX0nKVxuICAgICAgICAgICAgPyBpZGVudGl0eVxuICAgICAgICAgICAgOiBmdW5jdGlvbiBkZW5vcm1hbGl6ZVRlbXBsYXRlKHRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9cXHtcXHsvZywgc3RhcnRTeW1ib2wpLnJlcGxhY2UoL319L2csIGVuZFN5bWJvbCk7XG4gICAgICAgIH0sXG4gICAgICAgIE5HX0FUVFJfQklORElORyA9IC9ebmdBdHRyW0EtWl0vO1xuXG4gICAgY29tcGlsZS4kJGFkZEJpbmRpbmdJbmZvID0gZGVidWdJbmZvRW5hYmxlZCA/IGZ1bmN0aW9uICQkYWRkQmluZGluZ0luZm8oJGVsZW1lbnQsIGJpbmRpbmcpIHtcbiAgICAgIHZhciBiaW5kaW5ncyA9ICRlbGVtZW50LmRhdGEoJyRiaW5kaW5nJykgfHwgW107XG5cbiAgICAgIGlmIChpc0FycmF5KGJpbmRpbmcpKSB7XG4gICAgICAgIGJpbmRpbmdzID0gYmluZGluZ3MuY29uY2F0KGJpbmRpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmluZGluZ3MucHVzaChiaW5kaW5nKTtcbiAgICAgIH1cblxuICAgICAgJGVsZW1lbnQuZGF0YSgnJGJpbmRpbmcnLCBiaW5kaW5ncyk7XG4gICAgfSA6IG5vb3A7XG5cbiAgICBjb21waWxlLiQkYWRkQmluZGluZ0NsYXNzID0gZGVidWdJbmZvRW5hYmxlZCA/IGZ1bmN0aW9uICQkYWRkQmluZGluZ0NsYXNzKCRlbGVtZW50KSB7XG4gICAgICBzYWZlQWRkQ2xhc3MoJGVsZW1lbnQsICduZy1iaW5kaW5nJyk7XG4gICAgfSA6IG5vb3A7XG5cbiAgICBjb21waWxlLiQkYWRkU2NvcGVJbmZvID0gZGVidWdJbmZvRW5hYmxlZCA/IGZ1bmN0aW9uICQkYWRkU2NvcGVJbmZvKCRlbGVtZW50LCBzY29wZSwgaXNvbGF0ZWQsIG5vVGVtcGxhdGUpIHtcbiAgICAgIHZhciBkYXRhTmFtZSA9IGlzb2xhdGVkID8gKG5vVGVtcGxhdGUgPyAnJGlzb2xhdGVTY29wZU5vVGVtcGxhdGUnIDogJyRpc29sYXRlU2NvcGUnKSA6ICckc2NvcGUnO1xuICAgICAgJGVsZW1lbnQuZGF0YShkYXRhTmFtZSwgc2NvcGUpO1xuICAgIH0gOiBub29wO1xuXG4gICAgY29tcGlsZS4kJGFkZFNjb3BlQ2xhc3MgPSBkZWJ1Z0luZm9FbmFibGVkID8gZnVuY3Rpb24gJCRhZGRTY29wZUNsYXNzKCRlbGVtZW50LCBpc29sYXRlZCkge1xuICAgICAgc2FmZUFkZENsYXNzKCRlbGVtZW50LCBpc29sYXRlZCA/ICduZy1pc29sYXRlLXNjb3BlJyA6ICduZy1zY29wZScpO1xuICAgIH0gOiBub29wO1xuXG4gICAgcmV0dXJuIGNvbXBpbGU7XG5cbiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICBmdW5jdGlvbiBjb21waWxlKCRjb21waWxlTm9kZXMsIHRyYW5zY2x1ZGVGbiwgbWF4UHJpb3JpdHksIGlnbm9yZURpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ29tcGlsZUNvbnRleHQpIHtcbiAgICAgIGlmICghKCRjb21waWxlTm9kZXMgaW5zdGFuY2VvZiBqcUxpdGUpKSB7XG4gICAgICAgIC8vIGpxdWVyeSBhbHdheXMgcmV3cmFwcywgd2hlcmVhcyB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBzZWxlY3RvciBzbyB0aGF0IHdlIGNhblxuICAgICAgICAvLyBtb2RpZnkgaXQuXG4gICAgICAgICRjb21waWxlTm9kZXMgPSBqcUxpdGUoJGNvbXBpbGVOb2Rlcyk7XG4gICAgICB9XG4gICAgICAvLyBXZSBjYW4gbm90IGNvbXBpbGUgdG9wIGxldmVsIHRleHQgZWxlbWVudHMgc2luY2UgdGV4dCBub2RlcyBjYW4gYmUgbWVyZ2VkIGFuZCB3ZSB3aWxsXG4gICAgICAvLyBub3QgYmUgYWJsZSB0byBhdHRhY2ggc2NvcGUgZGF0YSB0byB0aGVtLCBzbyB3ZSB3aWxsIHdyYXAgdGhlbSBpbiA8c3Bhbj5cbiAgICAgIGZvckVhY2goJGNvbXBpbGVOb2RlcywgZnVuY3Rpb24obm9kZSwgaW5kZXgpIHtcbiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gTk9ERV9UWVBFX1RFWFQgJiYgbm9kZS5ub2RlVmFsdWUubWF0Y2goL1xcUysvKSAvKiBub24tZW1wdHkgKi8gKSB7XG4gICAgICAgICAgJGNvbXBpbGVOb2Rlc1tpbmRleF0gPSBqcUxpdGUobm9kZSkud3JhcCgnPHNwYW4+PC9zcGFuPicpLnBhcmVudCgpWzBdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHZhciBjb21wb3NpdGVMaW5rRm4gPVxuICAgICAgICAgICAgICBjb21waWxlTm9kZXMoJGNvbXBpbGVOb2RlcywgdHJhbnNjbHVkZUZuLCAkY29tcGlsZU5vZGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4UHJpb3JpdHksIGlnbm9yZURpcmVjdGl2ZSwgcHJldmlvdXNDb21waWxlQ29udGV4dCk7XG4gICAgICBjb21waWxlLiQkYWRkU2NvcGVDbGFzcygkY29tcGlsZU5vZGVzKTtcbiAgICAgIHZhciBuYW1lc3BhY2UgPSBudWxsO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHB1YmxpY0xpbmtGbihzY29wZSwgY2xvbmVDb25uZWN0Rm4sIG9wdGlvbnMpIHtcbiAgICAgICAgYXNzZXJ0QXJnKHNjb3BlLCAnc2NvcGUnKTtcblxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgdmFyIHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuID0gb3B0aW9ucy5wYXJlbnRCb3VuZFRyYW5zY2x1ZGVGbixcbiAgICAgICAgICB0cmFuc2NsdWRlQ29udHJvbGxlcnMgPSBvcHRpb25zLnRyYW5zY2x1ZGVDb250cm9sbGVycyxcbiAgICAgICAgICBmdXR1cmVQYXJlbnRFbGVtZW50ID0gb3B0aW9ucy5mdXR1cmVQYXJlbnRFbGVtZW50O1xuXG4gICAgICAgIC8vIFdoZW4gYHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuYCBpcyBwYXNzZWQsIGl0IGlzIGFcbiAgICAgICAgLy8gYGNvbnRyb2xsZXJzQm91bmRUcmFuc2NsdWRlYCBmdW5jdGlvbiAoaXQgd2FzIHByZXZpb3VzbHkgcGFzc2VkXG4gICAgICAgIC8vIGFzIGB0cmFuc2NsdWRlYCB0byBkaXJlY3RpdmUubGluaykgc28gd2UgbXVzdCB1bndyYXAgaXQgdG8gZ2V0XG4gICAgICAgIC8vIGl0cyBgYm91bmRUcmFuc2NsdWRlRm5gXG4gICAgICAgIGlmIChwYXJlbnRCb3VuZFRyYW5zY2x1ZGVGbiAmJiBwYXJlbnRCb3VuZFRyYW5zY2x1ZGVGbi4kJGJvdW5kVHJhbnNjbHVkZSkge1xuICAgICAgICAgIHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuID0gcGFyZW50Qm91bmRUcmFuc2NsdWRlRm4uJCRib3VuZFRyYW5zY2x1ZGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5hbWVzcGFjZSkge1xuICAgICAgICAgIG5hbWVzcGFjZSA9IGRldGVjdE5hbWVzcGFjZUZvckNoaWxkRWxlbWVudHMoZnV0dXJlUGFyZW50RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyICRsaW5rTm9kZTtcbiAgICAgICAgaWYgKG5hbWVzcGFjZSAhPT0gJ2h0bWwnKSB7XG4gICAgICAgICAgLy8gV2hlbiB1c2luZyBhIGRpcmVjdGl2ZSB3aXRoIHJlcGxhY2U6dHJ1ZSBhbmQgdGVtcGxhdGVVcmwgdGhlICRjb21waWxlTm9kZXNcbiAgICAgICAgICAvLyAob3IgYSBjaGlsZCBlbGVtZW50IGluc2lkZSBvZiB0aGVtKVxuICAgICAgICAgIC8vIG1pZ2h0IGNoYW5nZSwgc28gd2UgbmVlZCB0byByZWNyZWF0ZSB0aGUgbmFtZXNwYWNlIGFkYXB0ZWQgY29tcGlsZU5vZGVzXG4gICAgICAgICAgLy8gZm9yIGNhbGwgdG8gdGhlIGxpbmsgZnVuY3Rpb24uXG4gICAgICAgICAgLy8gTm90ZTogVGhpcyB3aWxsIGFscmVhZHkgY2xvbmUgdGhlIG5vZGVzLi4uXG4gICAgICAgICAgJGxpbmtOb2RlID0ganFMaXRlKFxuICAgICAgICAgICAgd3JhcFRlbXBsYXRlKG5hbWVzcGFjZSwganFMaXRlKCc8ZGl2PicpLmFwcGVuZCgkY29tcGlsZU5vZGVzKS5odG1sKCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChjbG9uZUNvbm5lY3RGbikge1xuICAgICAgICAgIC8vIGltcG9ydGFudCEhOiB3ZSBtdXN0IGNhbGwgb3VyIGpxTGl0ZS5jbG9uZSgpIHNpbmNlIHRoZSBqUXVlcnkgb25lIGlzIHRyeWluZyB0byBiZSBzbWFydFxuICAgICAgICAgIC8vIGFuZCBzb21ldGltZXMgY2hhbmdlcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBET00uXG4gICAgICAgICAgJGxpbmtOb2RlID0gSlFMaXRlUHJvdG90eXBlLmNsb25lLmNhbGwoJGNvbXBpbGVOb2Rlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGxpbmtOb2RlID0gJGNvbXBpbGVOb2RlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cmFuc2NsdWRlQ29udHJvbGxlcnMpIHtcbiAgICAgICAgICBmb3IgKHZhciBjb250cm9sbGVyTmFtZSBpbiB0cmFuc2NsdWRlQ29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgICRsaW5rTm9kZS5kYXRhKCckJyArIGNvbnRyb2xsZXJOYW1lICsgJ0NvbnRyb2xsZXInLCB0cmFuc2NsdWRlQ29udHJvbGxlcnNbY29udHJvbGxlck5hbWVdLmluc3RhbmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb21waWxlLiQkYWRkU2NvcGVJbmZvKCRsaW5rTm9kZSwgc2NvcGUpO1xuXG4gICAgICAgIGlmIChjbG9uZUNvbm5lY3RGbikgY2xvbmVDb25uZWN0Rm4oJGxpbmtOb2RlLCBzY29wZSk7XG4gICAgICAgIGlmIChjb21wb3NpdGVMaW5rRm4pIGNvbXBvc2l0ZUxpbmtGbihzY29wZSwgJGxpbmtOb2RlLCAkbGlua05vZGUsIHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuKTtcbiAgICAgICAgcmV0dXJuICRsaW5rTm9kZTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGV0ZWN0TmFtZXNwYWNlRm9yQ2hpbGRFbGVtZW50cyhwYXJlbnRFbGVtZW50KSB7XG4gICAgICAvLyBUT0RPOiBNYWtlIHRoaXMgZGV0ZWN0IE1hdGhNTCBhcyB3ZWxsLi4uXG4gICAgICB2YXIgbm9kZSA9IHBhcmVudEVsZW1lbnQgJiYgcGFyZW50RWxlbWVudFswXTtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICByZXR1cm4gJ2h0bWwnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5vZGVOYW1lXyhub2RlKSAhPT0gJ2ZvcmVpZ25vYmplY3QnICYmIG5vZGUudG9TdHJpbmcoKS5tYXRjaCgvU1ZHLykgPyAnc3ZnJyA6ICdodG1sJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21waWxlIGZ1bmN0aW9uIG1hdGNoZXMgZWFjaCBub2RlIGluIG5vZGVMaXN0IGFnYWluc3QgdGhlIGRpcmVjdGl2ZXMuIE9uY2UgYWxsIGRpcmVjdGl2ZXNcbiAgICAgKiBmb3IgYSBwYXJ0aWN1bGFyIG5vZGUgYXJlIGNvbGxlY3RlZCB0aGVpciBjb21waWxlIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQuIFRoZSBjb21waWxlXG4gICAgICogZnVuY3Rpb25zIHJldHVybiB2YWx1ZXMgLSB0aGUgbGlua2luZyBmdW5jdGlvbnMgLSBhcmUgY29tYmluZWQgaW50byBhIGNvbXBvc2l0ZSBsaW5raW5nXG4gICAgICogZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBhIGxpbmtpbmcgZnVuY3Rpb24gZm9yIHRoZSBub2RlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtOb2RlTGlzdH0gbm9kZUxpc3QgYW4gYXJyYXkgb2Ygbm9kZXMgb3IgTm9kZUxpc3QgdG8gY29tcGlsZVxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oYW5ndWxhci5TY29wZSwgY2xvbmVBdHRhY2hGbj0pfSB0cmFuc2NsdWRlRm4gQSBsaW5raW5nIGZ1bmN0aW9uLCB3aGVyZSB0aGVcbiAgICAgKiAgICAgICAgc2NvcGUgYXJndW1lbnQgaXMgYXV0by1nZW5lcmF0ZWQgdG8gdGhlIG5ldyBjaGlsZCBvZiB0aGUgdHJhbnNjbHVkZWQgcGFyZW50IHNjb3BlLlxuICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudD19ICRyb290RWxlbWVudCBJZiB0aGUgbm9kZUxpc3QgaXMgdGhlIHJvb3Qgb2YgdGhlIGNvbXBpbGF0aW9uIHRyZWUgdGhlblxuICAgICAqICAgICAgICB0aGUgcm9vdEVsZW1lbnQgbXVzdCBiZSBzZXQgdGhlIGpxTGl0ZSBjb2xsZWN0aW9uIG9mIHRoZSBjb21waWxlIHJvb3QuIFRoaXMgaXNcbiAgICAgKiAgICAgICAgbmVlZGVkIHNvIHRoYXQgdGhlIGpxTGl0ZSBjb2xsZWN0aW9uIGl0ZW1zIGNhbiBiZSByZXBsYWNlZCB3aXRoIHdpZGdldHMuXG4gICAgICogQHBhcmFtIHtudW1iZXI9fSBtYXhQcmlvcml0eSBNYXggZGlyZWN0aXZlIHByaW9yaXR5LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBjb21wb3NpdGUgbGlua2luZyBmdW5jdGlvbiBvZiBhbGwgb2YgdGhlIG1hdGNoZWQgZGlyZWN0aXZlcyBvciBudWxsLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBpbGVOb2Rlcyhub2RlTGlzdCwgdHJhbnNjbHVkZUZuLCAkcm9vdEVsZW1lbnQsIG1heFByaW9yaXR5LCBpZ25vcmVEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNDb21waWxlQ29udGV4dCkge1xuICAgICAgdmFyIGxpbmtGbnMgPSBbXSxcbiAgICAgICAgICBhdHRycywgZGlyZWN0aXZlcywgbm9kZUxpbmtGbiwgY2hpbGROb2RlcywgY2hpbGRMaW5rRm4sIGxpbmtGbkZvdW5kLCBub2RlTGlua0ZuRm91bmQ7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXR0cnMgPSBuZXcgQXR0cmlidXRlcygpO1xuXG4gICAgICAgIC8vIHdlIG11c3QgYWx3YXlzIHJlZmVyIHRvIG5vZGVMaXN0W2ldIHNpbmNlIHRoZSBub2RlcyBjYW4gYmUgcmVwbGFjZWQgdW5kZXJuZWF0aCB1cy5cbiAgICAgICAgZGlyZWN0aXZlcyA9IGNvbGxlY3REaXJlY3RpdmVzKG5vZGVMaXN0W2ldLCBbXSwgYXR0cnMsIGkgPT09IDAgPyBtYXhQcmlvcml0eSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVEaXJlY3RpdmUpO1xuXG4gICAgICAgIG5vZGVMaW5rRm4gPSAoZGlyZWN0aXZlcy5sZW5ndGgpXG4gICAgICAgICAgICA/IGFwcGx5RGlyZWN0aXZlc1RvTm9kZShkaXJlY3RpdmVzLCBub2RlTGlzdFtpXSwgYXR0cnMsIHRyYW5zY2x1ZGVGbiwgJHJvb3RFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBbXSwgW10sIHByZXZpb3VzQ29tcGlsZUNvbnRleHQpXG4gICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgaWYgKG5vZGVMaW5rRm4gJiYgbm9kZUxpbmtGbi5zY29wZSkge1xuICAgICAgICAgIGNvbXBpbGUuJCRhZGRTY29wZUNsYXNzKGF0dHJzLiQkZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZExpbmtGbiA9IChub2RlTGlua0ZuICYmIG5vZGVMaW5rRm4udGVybWluYWwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAhKGNoaWxkTm9kZXMgPSBub2RlTGlzdFtpXS5jaGlsZE5vZGVzKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICFjaGlsZE5vZGVzLmxlbmd0aClcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBjb21waWxlTm9kZXMoY2hpbGROb2RlcyxcbiAgICAgICAgICAgICAgICAgbm9kZUxpbmtGbiA/IChcbiAgICAgICAgICAgICAgICAgIChub2RlTGlua0ZuLnRyYW5zY2x1ZGVPblRoaXNFbGVtZW50IHx8ICFub2RlTGlua0ZuLnRlbXBsYXRlT25UaGlzRWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgICYmIG5vZGVMaW5rRm4udHJhbnNjbHVkZSkgOiB0cmFuc2NsdWRlRm4pO1xuXG4gICAgICAgIGlmIChub2RlTGlua0ZuIHx8IGNoaWxkTGlua0ZuKSB7XG4gICAgICAgICAgbGlua0Zucy5wdXNoKGksIG5vZGVMaW5rRm4sIGNoaWxkTGlua0ZuKTtcbiAgICAgICAgICBsaW5rRm5Gb3VuZCA9IHRydWU7XG4gICAgICAgICAgbm9kZUxpbmtGbkZvdW5kID0gbm9kZUxpbmtGbkZvdW5kIHx8IG5vZGVMaW5rRm47XG4gICAgICAgIH1cblxuICAgICAgICAvL3VzZSB0aGUgcHJldmlvdXMgY29udGV4dCBvbmx5IGZvciB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgdmlydHVhbCBncm91cFxuICAgICAgICBwcmV2aW91c0NvbXBpbGVDb250ZXh0ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gcmV0dXJuIGEgbGlua2luZyBmdW5jdGlvbiBpZiB3ZSBoYXZlIGZvdW5kIGFueXRoaW5nLCBudWxsIG90aGVyd2lzZVxuICAgICAgcmV0dXJuIGxpbmtGbkZvdW5kID8gY29tcG9zaXRlTGlua0ZuIDogbnVsbDtcblxuICAgICAgZnVuY3Rpb24gY29tcG9zaXRlTGlua0ZuKHNjb3BlLCBub2RlTGlzdCwgJHJvb3RFbGVtZW50LCBwYXJlbnRCb3VuZFRyYW5zY2x1ZGVGbikge1xuICAgICAgICB2YXIgbm9kZUxpbmtGbiwgY2hpbGRMaW5rRm4sIG5vZGUsIGNoaWxkU2NvcGUsIGksIGlpLCBpZHgsIGNoaWxkQm91bmRUcmFuc2NsdWRlRm47XG4gICAgICAgIHZhciBzdGFibGVOb2RlTGlzdDtcblxuXG4gICAgICAgIGlmIChub2RlTGlua0ZuRm91bmQpIHtcbiAgICAgICAgICAvLyBjb3B5IG5vZGVMaXN0IHNvIHRoYXQgaWYgYSBub2RlTGlua0ZuIHJlbW92ZXMgb3IgYWRkcyBhbiBlbGVtZW50IGF0IHRoaXMgRE9NIGxldmVsIG91clxuICAgICAgICAgIC8vIG9mZnNldHMgZG9uJ3QgZ2V0IHNjcmV3ZWQgdXBcbiAgICAgICAgICB2YXIgbm9kZUxpc3RMZW5ndGggPSBub2RlTGlzdC5sZW5ndGg7XG4gICAgICAgICAgc3RhYmxlTm9kZUxpc3QgPSBuZXcgQXJyYXkobm9kZUxpc3RMZW5ndGgpO1xuXG4gICAgICAgICAgLy8gY3JlYXRlIGEgc3BhcnNlIGFycmF5IGJ5IG9ubHkgY29weWluZyB0aGUgZWxlbWVudHMgd2hpY2ggaGF2ZSBhIGxpbmtGblxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5rRm5zLmxlbmd0aDsgaSs9Mykge1xuICAgICAgICAgICAgaWR4ID0gbGlua0Zuc1tpXTtcbiAgICAgICAgICAgIHN0YWJsZU5vZGVMaXN0W2lkeF0gPSBub2RlTGlzdFtpZHhdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFibGVOb2RlTGlzdCA9IG5vZGVMaXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBsaW5rRm5zLmxlbmd0aDsgaSA8IGlpOykge1xuICAgICAgICAgIG5vZGUgPSBzdGFibGVOb2RlTGlzdFtsaW5rRm5zW2krK11dO1xuICAgICAgICAgIG5vZGVMaW5rRm4gPSBsaW5rRm5zW2krK107XG4gICAgICAgICAgY2hpbGRMaW5rRm4gPSBsaW5rRm5zW2krK107XG5cbiAgICAgICAgICBpZiAobm9kZUxpbmtGbikge1xuICAgICAgICAgICAgaWYgKG5vZGVMaW5rRm4uc2NvcGUpIHtcbiAgICAgICAgICAgICAgY2hpbGRTY29wZSA9IHNjb3BlLiRuZXcoKTtcbiAgICAgICAgICAgICAgY29tcGlsZS4kJGFkZFNjb3BlSW5mbyhqcUxpdGUobm9kZSksIGNoaWxkU2NvcGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hpbGRTY29wZSA9IHNjb3BlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobm9kZUxpbmtGbi50cmFuc2NsdWRlT25UaGlzRWxlbWVudCkge1xuICAgICAgICAgICAgICBjaGlsZEJvdW5kVHJhbnNjbHVkZUZuID0gY3JlYXRlQm91bmRUcmFuc2NsdWRlRm4oXG4gICAgICAgICAgICAgICAgICBzY29wZSwgbm9kZUxpbmtGbi50cmFuc2NsdWRlLCBwYXJlbnRCb3VuZFRyYW5zY2x1ZGVGbixcbiAgICAgICAgICAgICAgICAgIG5vZGVMaW5rRm4uZWxlbWVudFRyYW5zY2x1ZGVPblRoaXNFbGVtZW50KTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmICghbm9kZUxpbmtGbi50ZW1wbGF0ZU9uVGhpc0VsZW1lbnQgJiYgcGFyZW50Qm91bmRUcmFuc2NsdWRlRm4pIHtcbiAgICAgICAgICAgICAgY2hpbGRCb3VuZFRyYW5zY2x1ZGVGbiA9IHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFwYXJlbnRCb3VuZFRyYW5zY2x1ZGVGbiAmJiB0cmFuc2NsdWRlRm4pIHtcbiAgICAgICAgICAgICAgY2hpbGRCb3VuZFRyYW5zY2x1ZGVGbiA9IGNyZWF0ZUJvdW5kVHJhbnNjbHVkZUZuKHNjb3BlLCB0cmFuc2NsdWRlRm4pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaGlsZEJvdW5kVHJhbnNjbHVkZUZuID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm9kZUxpbmtGbihjaGlsZExpbmtGbiwgY2hpbGRTY29wZSwgbm9kZSwgJHJvb3RFbGVtZW50LCBjaGlsZEJvdW5kVHJhbnNjbHVkZUZuKTtcblxuICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRMaW5rRm4pIHtcbiAgICAgICAgICAgIGNoaWxkTGlua0ZuKHNjb3BlLCBub2RlLmNoaWxkTm9kZXMsIHVuZGVmaW5lZCwgcGFyZW50Qm91bmRUcmFuc2NsdWRlRm4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUJvdW5kVHJhbnNjbHVkZUZuKHNjb3BlLCB0cmFuc2NsdWRlRm4sIHByZXZpb3VzQm91bmRUcmFuc2NsdWRlRm4sIGVsZW1lbnRUcmFuc2NsdXNpb24pIHtcblxuICAgICAgdmFyIGJvdW5kVHJhbnNjbHVkZUZuID0gZnVuY3Rpb24odHJhbnNjbHVkZWRTY29wZSwgY2xvbmVGbiwgY29udHJvbGxlcnMsIGZ1dHVyZVBhcmVudEVsZW1lbnQsIGNvbnRhaW5pbmdTY29wZSkge1xuXG4gICAgICAgIGlmICghdHJhbnNjbHVkZWRTY29wZSkge1xuICAgICAgICAgIHRyYW5zY2x1ZGVkU2NvcGUgPSBzY29wZS4kbmV3KGZhbHNlLCBjb250YWluaW5nU2NvcGUpO1xuICAgICAgICAgIHRyYW5zY2x1ZGVkU2NvcGUuJCR0cmFuc2NsdWRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJhbnNjbHVkZUZuKHRyYW5zY2x1ZGVkU2NvcGUsIGNsb25lRm4sIHtcbiAgICAgICAgICBwYXJlbnRCb3VuZFRyYW5zY2x1ZGVGbjogcHJldmlvdXNCb3VuZFRyYW5zY2x1ZGVGbixcbiAgICAgICAgICB0cmFuc2NsdWRlQ29udHJvbGxlcnM6IGNvbnRyb2xsZXJzLFxuICAgICAgICAgIGZ1dHVyZVBhcmVudEVsZW1lbnQ6IGZ1dHVyZVBhcmVudEVsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gYm91bmRUcmFuc2NsdWRlRm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9va3MgZm9yIGRpcmVjdGl2ZXMgb24gdGhlIGdpdmVuIG5vZGUgYW5kIGFkZHMgdGhlbSB0byB0aGUgZGlyZWN0aXZlIGNvbGxlY3Rpb24gd2hpY2ggaXNcbiAgICAgKiBzb3J0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZSBOb2RlIHRvIHNlYXJjaC5cbiAgICAgKiBAcGFyYW0gZGlyZWN0aXZlcyBBbiBhcnJheSB0byB3aGljaCB0aGUgZGlyZWN0aXZlcyBhcmUgYWRkZWQgdG8uIFRoaXMgYXJyYXkgaXMgc29ydGVkIGJlZm9yZVxuICAgICAqICAgICAgICB0aGUgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKiBAcGFyYW0gYXR0cnMgVGhlIHNoYXJlZCBhdHRycyBvYmplY3Qgd2hpY2ggaXMgdXNlZCB0byBwb3B1bGF0ZSB0aGUgbm9ybWFsaXplZCBhdHRyaWJ1dGVzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gbWF4UHJpb3JpdHkgTWF4IGRpcmVjdGl2ZSBwcmlvcml0eS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb2xsZWN0RGlyZWN0aXZlcyhub2RlLCBkaXJlY3RpdmVzLCBhdHRycywgbWF4UHJpb3JpdHksIGlnbm9yZURpcmVjdGl2ZSkge1xuICAgICAgdmFyIG5vZGVUeXBlID0gbm9kZS5ub2RlVHlwZSxcbiAgICAgICAgICBhdHRyc01hcCA9IGF0dHJzLiRhdHRyLFxuICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgIGNsYXNzTmFtZTtcblxuICAgICAgc3dpdGNoIChub2RlVHlwZSkge1xuICAgICAgICBjYXNlIE5PREVfVFlQRV9FTEVNRU5UOiAvKiBFbGVtZW50ICovXG4gICAgICAgICAgLy8gdXNlIHRoZSBub2RlIG5hbWU6IDxkaXJlY3RpdmU+XG4gICAgICAgICAgYWRkRGlyZWN0aXZlKGRpcmVjdGl2ZXMsXG4gICAgICAgICAgICAgIGRpcmVjdGl2ZU5vcm1hbGl6ZShub2RlTmFtZV8obm9kZSkpLCAnRScsIG1heFByaW9yaXR5LCBpZ25vcmVEaXJlY3RpdmUpO1xuXG4gICAgICAgICAgLy8gaXRlcmF0ZSBvdmVyIHRoZSBhdHRyaWJ1dGVzXG4gICAgICAgICAgZm9yICh2YXIgYXR0ciwgbmFtZSwgbk5hbWUsIG5nQXR0ck5hbWUsIHZhbHVlLCBpc05nQXR0ciwgbkF0dHJzID0gbm9kZS5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgIGogPSAwLCBqaiA9IG5BdHRycyAmJiBuQXR0cnMubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgdmFyIGF0dHJTdGFydE5hbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBhdHRyRW5kTmFtZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBhdHRyID0gbkF0dHJzW2pdO1xuICAgICAgICAgICAgbmFtZSA9IGF0dHIubmFtZTtcbiAgICAgICAgICAgIHZhbHVlID0gdHJpbShhdHRyLnZhbHVlKTtcblxuICAgICAgICAgICAgLy8gc3VwcG9ydCBuZ0F0dHIgYXR0cmlidXRlIGJpbmRpbmdcbiAgICAgICAgICAgIG5nQXR0ck5hbWUgPSBkaXJlY3RpdmVOb3JtYWxpemUobmFtZSk7XG4gICAgICAgICAgICBpZiAoaXNOZ0F0dHIgPSBOR19BVFRSX0JJTkRJTkcudGVzdChuZ0F0dHJOYW1lKSkge1xuICAgICAgICAgICAgICBuYW1lID0gc25ha2VfY2FzZShuZ0F0dHJOYW1lLnN1YnN0cig2KSwgJy0nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGRpcmVjdGl2ZU5OYW1lID0gbmdBdHRyTmFtZS5yZXBsYWNlKC8oU3RhcnR8RW5kKSQvLCAnJyk7XG4gICAgICAgICAgICBpZiAoZGlyZWN0aXZlSXNNdWx0RWxlbWVudChkaXJlY3RpdmVOTmFtZSkpIHtcbiAgICAgICAgICAgICAgaWYgKG5nQXR0ck5hbWUgPT09IGRpcmVjdGl2ZU5OYW1lICsgJ1N0YXJ0Jykge1xuICAgICAgICAgICAgICAgIGF0dHJTdGFydE5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIGF0dHJFbmROYW1lID0gbmFtZS5zdWJzdHIoMCwgbmFtZS5sZW5ndGggLSA1KSArICdlbmQnO1xuICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cigwLCBuYW1lLmxlbmd0aCAtIDYpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5OYW1lID0gZGlyZWN0aXZlTm9ybWFsaXplKG5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICBhdHRyc01hcFtuTmFtZV0gPSBuYW1lO1xuICAgICAgICAgICAgaWYgKGlzTmdBdHRyIHx8ICFhdHRycy5oYXNPd25Qcm9wZXJ0eShuTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBhdHRyc1tuTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Qm9vbGVhbkF0dHJOYW1lKG5vZGUsIG5OYW1lKSkge1xuICAgICAgICAgICAgICAgICAgYXR0cnNbbk5hbWVdID0gdHJ1ZTsgLy8gcHJlc2VuY2UgbWVhbnMgdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZEF0dHJJbnRlcnBvbGF0ZURpcmVjdGl2ZShub2RlLCBkaXJlY3RpdmVzLCB2YWx1ZSwgbk5hbWUsIGlzTmdBdHRyKTtcbiAgICAgICAgICAgIGFkZERpcmVjdGl2ZShkaXJlY3RpdmVzLCBuTmFtZSwgJ0EnLCBtYXhQcmlvcml0eSwgaWdub3JlRGlyZWN0aXZlLCBhdHRyU3RhcnROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyRW5kTmFtZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gdXNlIGNsYXNzIGFzIGRpcmVjdGl2ZVxuICAgICAgICAgIGNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lO1xuICAgICAgICAgIGlmIChpc1N0cmluZyhjbGFzc05hbWUpICYmIGNsYXNzTmFtZSAhPT0gJycpIHtcbiAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IENMQVNTX0RJUkVDVElWRV9SRUdFWFAuZXhlYyhjbGFzc05hbWUpKSB7XG4gICAgICAgICAgICAgIG5OYW1lID0gZGlyZWN0aXZlTm9ybWFsaXplKG1hdGNoWzJdKTtcbiAgICAgICAgICAgICAgaWYgKGFkZERpcmVjdGl2ZShkaXJlY3RpdmVzLCBuTmFtZSwgJ0MnLCBtYXhQcmlvcml0eSwgaWdub3JlRGlyZWN0aXZlKSkge1xuICAgICAgICAgICAgICAgIGF0dHJzW25OYW1lXSA9IHRyaW0obWF0Y2hbM10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5zdWJzdHIobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBOT0RFX1RZUEVfVEVYVDogLyogVGV4dCBOb2RlICovXG4gICAgICAgICAgYWRkVGV4dEludGVycG9sYXRlRGlyZWN0aXZlKGRpcmVjdGl2ZXMsIG5vZGUubm9kZVZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBOT0RFX1RZUEVfQ09NTUVOVDogLyogQ29tbWVudCAqL1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtYXRjaCA9IENPTU1FTlRfRElSRUNUSVZFX1JFR0VYUC5leGVjKG5vZGUubm9kZVZhbHVlKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICBuTmFtZSA9IGRpcmVjdGl2ZU5vcm1hbGl6ZShtYXRjaFsxXSk7XG4gICAgICAgICAgICAgIGlmIChhZGREaXJlY3RpdmUoZGlyZWN0aXZlcywgbk5hbWUsICdNJywgbWF4UHJpb3JpdHksIGlnbm9yZURpcmVjdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICBhdHRyc1tuTmFtZV0gPSB0cmltKG1hdGNoWzJdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIHR1cm5zIG91dCB0aGF0IHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcyBJRTkgdGhyb3dzIGVycm9ycyB3aGVuIG9uZSBhdHRlbXB0cyB0byByZWFkXG4gICAgICAgICAgICAvLyBjb21tZW50J3Mgbm9kZSB2YWx1ZS5cbiAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIGl0IGFuZCBjb250aW51ZS4gKENhbid0IHNlZW0gdG8gcmVwcm9kdWNlIGluIHRlc3QgY2FzZS4pXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBkaXJlY3RpdmVzLnNvcnQoYnlQcmlvcml0eSk7XG4gICAgICByZXR1cm4gZGlyZWN0aXZlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIG5vZGUgd2l0aCBhbiBkaXJlY3RpdmUtc3RhcnQgaXQgY29sbGVjdHMgYWxsIG9mIHRoZSBzaWJsaW5ncyB1bnRpbCBpdCBmaW5kc1xuICAgICAqIGRpcmVjdGl2ZS1lbmQuXG4gICAgICogQHBhcmFtIG5vZGVcbiAgICAgKiBAcGFyYW0gYXR0clN0YXJ0XG4gICAgICogQHBhcmFtIGF0dHJFbmRcbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBncm91cFNjYW4obm9kZSwgYXR0clN0YXJ0LCBhdHRyRW5kKSB7XG4gICAgICB2YXIgbm9kZXMgPSBbXTtcbiAgICAgIHZhciBkZXB0aCA9IDA7XG4gICAgICBpZiAoYXR0clN0YXJ0ICYmIG5vZGUuaGFzQXR0cmlidXRlICYmIG5vZGUuaGFzQXR0cmlidXRlKGF0dHJTdGFydCkpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgdGhyb3cgJGNvbXBpbGVNaW5FcnIoJ3V0ZXJkaXInLFxuICAgICAgICAgICAgICAgICAgICAgIFwiVW50ZXJtaW5hdGVkIGF0dHJpYnV0ZSwgZm91bmQgJ3swfScgYnV0IG5vIG1hdGNoaW5nICd7MX0nIGZvdW5kLlwiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJTdGFydCwgYXR0ckVuZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IE5PREVfVFlQRV9FTEVNRU5UKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYXR0clN0YXJ0KSkgZGVwdGgrKztcbiAgICAgICAgICAgIGlmIChub2RlLmhhc0F0dHJpYnV0ZShhdHRyRW5kKSkgZGVwdGgtLTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgICAgfSB3aGlsZSAoZGVwdGggPiAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBqcUxpdGUobm9kZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdyYXBwZXIgZm9yIGxpbmtpbmcgZnVuY3Rpb24gd2hpY2ggY29udmVydHMgbm9ybWFsIGxpbmtpbmcgZnVuY3Rpb24gaW50byBhIGdyb3VwZWRcbiAgICAgKiBsaW5raW5nIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSBsaW5rRm5cbiAgICAgKiBAcGFyYW0gYXR0clN0YXJ0XG4gICAgICogQHBhcmFtIGF0dHJFbmRcbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gICAgICovXG4gICAgZnVuY3Rpb24gZ3JvdXBFbGVtZW50c0xpbmtGbldyYXBwZXIobGlua0ZuLCBhdHRyU3RhcnQsIGF0dHJFbmQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIGNvbnRyb2xsZXJzLCB0cmFuc2NsdWRlRm4pIHtcbiAgICAgICAgZWxlbWVudCA9IGdyb3VwU2NhbihlbGVtZW50WzBdLCBhdHRyU3RhcnQsIGF0dHJFbmQpO1xuICAgICAgICByZXR1cm4gbGlua0ZuKHNjb3BlLCBlbGVtZW50LCBhdHRycywgY29udHJvbGxlcnMsIHRyYW5zY2x1ZGVGbik7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uY2UgdGhlIGRpcmVjdGl2ZXMgaGF2ZSBiZWVuIGNvbGxlY3RlZCwgdGhlaXIgY29tcGlsZSBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkLiBUaGlzIG1ldGhvZFxuICAgICAqIGlzIHJlc3BvbnNpYmxlIGZvciBpbmxpbmluZyBkaXJlY3RpdmUgdGVtcGxhdGVzIGFzIHdlbGwgYXMgdGVybWluYXRpbmcgdGhlIGFwcGxpY2F0aW9uXG4gICAgICogb2YgdGhlIGRpcmVjdGl2ZXMgaWYgdGhlIHRlcm1pbmFsIGRpcmVjdGl2ZSBoYXMgYmVlbiByZWFjaGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBcnJheX0gZGlyZWN0aXZlcyBBcnJheSBvZiBjb2xsZWN0ZWQgZGlyZWN0aXZlcyB0byBleGVjdXRlIHRoZWlyIGNvbXBpbGUgZnVuY3Rpb24uXG4gICAgICogICAgICAgIHRoaXMgbmVlZHMgdG8gYmUgcHJlLXNvcnRlZCBieSBwcmlvcml0eSBvcmRlci5cbiAgICAgKiBAcGFyYW0ge05vZGV9IGNvbXBpbGVOb2RlIFRoZSByYXcgRE9NIG5vZGUgdG8gYXBwbHkgdGhlIGNvbXBpbGUgZnVuY3Rpb25zIHRvXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHRlbXBsYXRlQXR0cnMgVGhlIHNoYXJlZCBhdHRyaWJ1dGUgZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGFuZ3VsYXIuU2NvcGUsIGNsb25lQXR0YWNoRm49KX0gdHJhbnNjbHVkZUZuIEEgbGlua2luZyBmdW5jdGlvbiwgd2hlcmUgdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlIGFyZ3VtZW50IGlzIGF1dG8tZ2VuZXJhdGVkIHRvIHRoZSBuZXdcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQgb2YgdGhlIHRyYW5zY2x1ZGVkIHBhcmVudCBzY29wZS5cbiAgICAgKiBAcGFyYW0ge0pRTGl0ZX0ganFDb2xsZWN0aW9uIElmIHdlIGFyZSB3b3JraW5nIG9uIHRoZSByb290IG9mIHRoZSBjb21waWxlIHRyZWUgdGhlbiB0aGlzXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCBoYXMgdGhlIHJvb3QganFMaXRlIGFycmF5IHNvIHRoYXQgd2UgY2FuIHJlcGxhY2Ugbm9kZXNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIGl0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3JpZ2luYWxSZXBsYWNlRGlyZWN0aXZlIEFuIG9wdGlvbmFsIGRpcmVjdGl2ZSB0aGF0IHdpbGwgYmUgaWdub3JlZCB3aGVuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsaW5nIHRoZSB0cmFuc2NsdXNpb24uXG4gICAgICogQHBhcmFtIHtBcnJheS48RnVuY3Rpb24+fSBwcmVMaW5rRm5zXG4gICAgICogQHBhcmFtIHtBcnJheS48RnVuY3Rpb24+fSBwb3N0TGlua0Zuc1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcmV2aW91c0NvbXBpbGVDb250ZXh0IENvbnRleHQgdXNlZCBmb3IgcHJldmlvdXMgY29tcGlsYXRpb24gb2YgdGhlIGN1cnJlbnRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBsaW5rRm5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcHBseURpcmVjdGl2ZXNUb05vZGUoZGlyZWN0aXZlcywgY29tcGlsZU5vZGUsIHRlbXBsYXRlQXR0cnMsIHRyYW5zY2x1ZGVGbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganFDb2xsZWN0aW9uLCBvcmlnaW5hbFJlcGxhY2VEaXJlY3RpdmUsIHByZUxpbmtGbnMsIHBvc3RMaW5rRm5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0NvbXBpbGVDb250ZXh0KSB7XG4gICAgICBwcmV2aW91c0NvbXBpbGVDb250ZXh0ID0gcHJldmlvdXNDb21waWxlQ29udGV4dCB8fCB7fTtcblxuICAgICAgdmFyIHRlcm1pbmFsUHJpb3JpdHkgPSAtTnVtYmVyLk1BWF9WQUxVRSxcbiAgICAgICAgICBuZXdTY29wZURpcmVjdGl2ZSxcbiAgICAgICAgICBjb250cm9sbGVyRGlyZWN0aXZlcyA9IHByZXZpb3VzQ29tcGlsZUNvbnRleHQuY29udHJvbGxlckRpcmVjdGl2ZXMsXG4gICAgICAgICAgY29udHJvbGxlcnMsXG4gICAgICAgICAgbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlID0gcHJldmlvdXNDb21waWxlQ29udGV4dC5uZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUsXG4gICAgICAgICAgdGVtcGxhdGVEaXJlY3RpdmUgPSBwcmV2aW91c0NvbXBpbGVDb250ZXh0LnRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgIG5vblRsYlRyYW5zY2x1ZGVEaXJlY3RpdmUgPSBwcmV2aW91c0NvbXBpbGVDb250ZXh0Lm5vblRsYlRyYW5zY2x1ZGVEaXJlY3RpdmUsXG4gICAgICAgICAgaGFzVHJhbnNjbHVkZURpcmVjdGl2ZSA9IGZhbHNlLFxuICAgICAgICAgIGhhc1RlbXBsYXRlID0gZmFsc2UsXG4gICAgICAgICAgaGFzRWxlbWVudFRyYW5zY2x1ZGVEaXJlY3RpdmUgPSBwcmV2aW91c0NvbXBpbGVDb250ZXh0Lmhhc0VsZW1lbnRUcmFuc2NsdWRlRGlyZWN0aXZlLFxuICAgICAgICAgICRjb21waWxlTm9kZSA9IHRlbXBsYXRlQXR0cnMuJCRlbGVtZW50ID0ganFMaXRlKGNvbXBpbGVOb2RlKSxcbiAgICAgICAgICBkaXJlY3RpdmUsXG4gICAgICAgICAgZGlyZWN0aXZlTmFtZSxcbiAgICAgICAgICAkdGVtcGxhdGUsXG4gICAgICAgICAgcmVwbGFjZURpcmVjdGl2ZSA9IG9yaWdpbmFsUmVwbGFjZURpcmVjdGl2ZSxcbiAgICAgICAgICBjaGlsZFRyYW5zY2x1ZGVGbiA9IHRyYW5zY2x1ZGVGbixcbiAgICAgICAgICBsaW5rRm4sXG4gICAgICAgICAgZGlyZWN0aXZlVmFsdWU7XG5cbiAgICAgIC8vIGV4ZWN1dGVzIGFsbCBkaXJlY3RpdmVzIG9uIHRoZSBjdXJyZW50IGVsZW1lbnRcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGRpcmVjdGl2ZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBkaXJlY3RpdmUgPSBkaXJlY3RpdmVzW2ldO1xuICAgICAgICB2YXIgYXR0clN0YXJ0ID0gZGlyZWN0aXZlLiQkc3RhcnQ7XG4gICAgICAgIHZhciBhdHRyRW5kID0gZGlyZWN0aXZlLiQkZW5kO1xuXG4gICAgICAgIC8vIGNvbGxlY3QgbXVsdGlibG9jayBzZWN0aW9uc1xuICAgICAgICBpZiAoYXR0clN0YXJ0KSB7XG4gICAgICAgICAgJGNvbXBpbGVOb2RlID0gZ3JvdXBTY2FuKGNvbXBpbGVOb2RlLCBhdHRyU3RhcnQsIGF0dHJFbmQpO1xuICAgICAgICB9XG4gICAgICAgICR0ZW1wbGF0ZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodGVybWluYWxQcmlvcml0eSA+IGRpcmVjdGl2ZS5wcmlvcml0eSkge1xuICAgICAgICAgIGJyZWFrOyAvLyBwcmV2ZW50IGZ1cnRoZXIgcHJvY2Vzc2luZyBvZiBkaXJlY3RpdmVzXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlyZWN0aXZlVmFsdWUgPSBkaXJlY3RpdmUuc2NvcGUpIHtcblxuICAgICAgICAgIC8vIHNraXAgdGhlIGNoZWNrIGZvciBkaXJlY3RpdmVzIHdpdGggYXN5bmMgdGVtcGxhdGVzLCB3ZSdsbCBjaGVjayB0aGUgZGVyaXZlZCBzeW5jXG4gICAgICAgICAgLy8gZGlyZWN0aXZlIHdoZW4gdGhlIHRlbXBsYXRlIGFycml2ZXNcbiAgICAgICAgICBpZiAoIWRpcmVjdGl2ZS50ZW1wbGF0ZVVybCkge1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGRpcmVjdGl2ZVZhbHVlKSkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGRpcmVjdGl2ZSBpcyB0cnlpbmcgdG8gYWRkIGFuIGlzb2xhdGVkIHNjb3BlLlxuICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIHNjb3BlIG9mIGFueSBraW5kIGFscmVhZHlcbiAgICAgICAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGUoJ25ldy9pc29sYXRlZCBzY29wZScsIG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZSB8fCBuZXdTY29wZURpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlLCAkY29tcGlsZU5vZGUpO1xuICAgICAgICAgICAgICBuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUaGlzIGRpcmVjdGl2ZSBpcyB0cnlpbmcgdG8gYWRkIGEgY2hpbGQgc2NvcGUuXG4gICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgaXMgbm8gaXNvbGF0ZWQgc2NvcGUgYWxyZWFkeVxuICAgICAgICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZSgnbmV3L2lzb2xhdGVkIHNjb3BlJywgbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlLCBkaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21waWxlTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3U2NvcGVEaXJlY3RpdmUgPSBuZXdTY29wZURpcmVjdGl2ZSB8fCBkaXJlY3RpdmU7XG4gICAgICAgIH1cblxuICAgICAgICBkaXJlY3RpdmVOYW1lID0gZGlyZWN0aXZlLm5hbWU7XG5cbiAgICAgICAgaWYgKCFkaXJlY3RpdmUudGVtcGxhdGVVcmwgJiYgZGlyZWN0aXZlLmNvbnRyb2xsZXIpIHtcbiAgICAgICAgICBkaXJlY3RpdmVWYWx1ZSA9IGRpcmVjdGl2ZS5jb250cm9sbGVyO1xuICAgICAgICAgIGNvbnRyb2xsZXJEaXJlY3RpdmVzID0gY29udHJvbGxlckRpcmVjdGl2ZXMgfHwge307XG4gICAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGUoXCInXCIgKyBkaXJlY3RpdmVOYW1lICsgXCInIGNvbnRyb2xsZXJcIixcbiAgICAgICAgICAgICAgY29udHJvbGxlckRpcmVjdGl2ZXNbZGlyZWN0aXZlTmFtZV0sIGRpcmVjdGl2ZSwgJGNvbXBpbGVOb2RlKTtcbiAgICAgICAgICBjb250cm9sbGVyRGlyZWN0aXZlc1tkaXJlY3RpdmVOYW1lXSA9IGRpcmVjdGl2ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXJlY3RpdmVWYWx1ZSA9IGRpcmVjdGl2ZS50cmFuc2NsdWRlKSB7XG4gICAgICAgICAgaGFzVHJhbnNjbHVkZURpcmVjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgbmdJZiBhbmQgbmdSZXBlYXQgc28gdGhhdCB3ZSBkb24ndCBjb21wbGFpbiBhYm91dCBkdXBsaWNhdGUgdHJhbnNjbHVzaW9uLlxuICAgICAgICAgIC8vIFRoaXMgb3B0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgZGlyZWN0aXZlcyB0aGF0IGtub3cgaG93IHRvIHNhZmVseSBoYW5kbGUgZWxlbWVudCB0cmFuc2NsdXNpb24sXG4gICAgICAgICAgLy8gd2hlcmUgdGhlIHRyYW5zY2x1ZGVkIG5vZGVzIGFyZSBhZGRlZCBvciByZXBsYWNlZCBhZnRlciBsaW5raW5nLlxuICAgICAgICAgIGlmICghZGlyZWN0aXZlLiQkdGxiKSB7XG4gICAgICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZSgndHJhbnNjbHVzaW9uJywgbm9uVGxiVHJhbnNjbHVkZURpcmVjdGl2ZSwgZGlyZWN0aXZlLCAkY29tcGlsZU5vZGUpO1xuICAgICAgICAgICAgbm9uVGxiVHJhbnNjbHVkZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGlyZWN0aXZlVmFsdWUgPT0gJ2VsZW1lbnQnKSB7XG4gICAgICAgICAgICBoYXNFbGVtZW50VHJhbnNjbHVkZURpcmVjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0ZXJtaW5hbFByaW9yaXR5ID0gZGlyZWN0aXZlLnByaW9yaXR5O1xuICAgICAgICAgICAgJHRlbXBsYXRlID0gJGNvbXBpbGVOb2RlO1xuICAgICAgICAgICAgJGNvbXBpbGVOb2RlID0gdGVtcGxhdGVBdHRycy4kJGVsZW1lbnQgPVxuICAgICAgICAgICAgICAgIGpxTGl0ZShkb2N1bWVudC5jcmVhdGVDb21tZW50KCcgJyArIGRpcmVjdGl2ZU5hbWUgKyAnOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUF0dHJzW2RpcmVjdGl2ZU5hbWVdICsgJyAnKSk7XG4gICAgICAgICAgICBjb21waWxlTm9kZSA9ICRjb21waWxlTm9kZVswXTtcbiAgICAgICAgICAgIHJlcGxhY2VXaXRoKGpxQ29sbGVjdGlvbiwgc2xpY2VBcmdzKCR0ZW1wbGF0ZSksIGNvbXBpbGVOb2RlKTtcblxuICAgICAgICAgICAgY2hpbGRUcmFuc2NsdWRlRm4gPSBjb21waWxlKCR0ZW1wbGF0ZSwgdHJhbnNjbHVkZUZuLCB0ZXJtaW5hbFByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VEaXJlY3RpdmUgJiYgcmVwbGFjZURpcmVjdGl2ZS5uYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBwYXNzIGluOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLSBjb250cm9sbGVyRGlyZWN0aXZlcyAtIG90aGVyd2lzZSB3ZSdsbCBjcmVhdGUgZHVwbGljYXRlcyBjb250cm9sbGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLSBuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUgb3IgdGVtcGxhdGVEaXJlY3RpdmUgLSBjb21iaW5pbmcgdGVtcGxhdGVzIHdpdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgZWxlbWVudCB0cmFuc2NsdXNpb24gZG9lc24ndCBtYWtlIHNlbnNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgb25seSBub25UbGJUcmFuc2NsdWRlRGlyZWN0aXZlIHNvIHRoYXQgd2UgcHJldmVudCBwdXR0aW5nIHRyYW5zY2x1c2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb24gdGhlIHNhbWUgZWxlbWVudCBtb3JlIHRoYW4gb25jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vblRsYlRyYW5zY2x1ZGVEaXJlY3RpdmU6IG5vblRsYlRyYW5zY2x1ZGVEaXJlY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJHRlbXBsYXRlID0ganFMaXRlKGpxTGl0ZUNsb25lKGNvbXBpbGVOb2RlKSkuY29udGVudHMoKTtcbiAgICAgICAgICAgICRjb21waWxlTm9kZS5lbXB0eSgpOyAvLyBjbGVhciBjb250ZW50c1xuICAgICAgICAgICAgY2hpbGRUcmFuc2NsdWRlRm4gPSBjb21waWxlKCR0ZW1wbGF0ZSwgdHJhbnNjbHVkZUZuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlyZWN0aXZlLnRlbXBsYXRlKSB7XG4gICAgICAgICAgaGFzVGVtcGxhdGUgPSB0cnVlO1xuICAgICAgICAgIGFzc2VydE5vRHVwbGljYXRlKCd0ZW1wbGF0ZScsIHRlbXBsYXRlRGlyZWN0aXZlLCBkaXJlY3RpdmUsICRjb21waWxlTm9kZSk7XG4gICAgICAgICAgdGVtcGxhdGVEaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG5cbiAgICAgICAgICBkaXJlY3RpdmVWYWx1ZSA9IChpc0Z1bmN0aW9uKGRpcmVjdGl2ZS50ZW1wbGF0ZSkpXG4gICAgICAgICAgICAgID8gZGlyZWN0aXZlLnRlbXBsYXRlKCRjb21waWxlTm9kZSwgdGVtcGxhdGVBdHRycylcbiAgICAgICAgICAgICAgOiBkaXJlY3RpdmUudGVtcGxhdGU7XG5cbiAgICAgICAgICBkaXJlY3RpdmVWYWx1ZSA9IGRlbm9ybWFsaXplVGVtcGxhdGUoZGlyZWN0aXZlVmFsdWUpO1xuXG4gICAgICAgICAgaWYgKGRpcmVjdGl2ZS5yZXBsYWNlKSB7XG4gICAgICAgICAgICByZXBsYWNlRGlyZWN0aXZlID0gZGlyZWN0aXZlO1xuICAgICAgICAgICAgaWYgKGpxTGl0ZUlzVGV4dE5vZGUoZGlyZWN0aXZlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICR0ZW1wbGF0ZSA9IFtdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgJHRlbXBsYXRlID0gcmVtb3ZlQ29tbWVudHMod3JhcFRlbXBsYXRlKGRpcmVjdGl2ZS50ZW1wbGF0ZU5hbWVzcGFjZSwgdHJpbShkaXJlY3RpdmVWYWx1ZSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBpbGVOb2RlID0gJHRlbXBsYXRlWzBdO1xuXG4gICAgICAgICAgICBpZiAoJHRlbXBsYXRlLmxlbmd0aCAhPSAxIHx8IGNvbXBpbGVOb2RlLm5vZGVUeXBlICE9PSBOT0RFX1RZUEVfRUxFTUVOVCkge1xuICAgICAgICAgICAgICB0aHJvdyAkY29tcGlsZU1pbkVycigndHBscnQnLFxuICAgICAgICAgICAgICAgICAgXCJUZW1wbGF0ZSBmb3IgZGlyZWN0aXZlICd7MH0nIG11c3QgaGF2ZSBleGFjdGx5IG9uZSByb290IGVsZW1lbnQuIHsxfVwiLFxuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlTmFtZSwgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXBsYWNlV2l0aChqcUNvbGxlY3Rpb24sICRjb21waWxlTm9kZSwgY29tcGlsZU5vZGUpO1xuXG4gICAgICAgICAgICB2YXIgbmV3VGVtcGxhdGVBdHRycyA9IHskYXR0cjoge319O1xuXG4gICAgICAgICAgICAvLyBjb21iaW5lIGRpcmVjdGl2ZXMgZnJvbSB0aGUgb3JpZ2luYWwgbm9kZSBhbmQgZnJvbSB0aGUgdGVtcGxhdGU6XG4gICAgICAgICAgICAvLyAtIHRha2UgdGhlIGFycmF5IG9mIGRpcmVjdGl2ZXMgZm9yIHRoaXMgZWxlbWVudFxuICAgICAgICAgICAgLy8gLSBzcGxpdCBpdCBpbnRvIHR3byBwYXJ0cywgdGhvc2UgdGhhdCBhbHJlYWR5IGFwcGxpZWQgKHByb2Nlc3NlZCkgYW5kIHRob3NlIHRoYXQgd2VyZW4ndCAodW5wcm9jZXNzZWQpXG4gICAgICAgICAgICAvLyAtIGNvbGxlY3QgZGlyZWN0aXZlcyBmcm9tIHRoZSB0ZW1wbGF0ZSBhbmQgc29ydCB0aGVtIGJ5IHByaW9yaXR5XG4gICAgICAgICAgICAvLyAtIGNvbWJpbmUgZGlyZWN0aXZlcyBhczogcHJvY2Vzc2VkICsgdGVtcGxhdGUgKyB1bnByb2Nlc3NlZFxuICAgICAgICAgICAgdmFyIHRlbXBsYXRlRGlyZWN0aXZlcyA9IGNvbGxlY3REaXJlY3RpdmVzKGNvbXBpbGVOb2RlLCBbXSwgbmV3VGVtcGxhdGVBdHRycyk7XG4gICAgICAgICAgICB2YXIgdW5wcm9jZXNzZWREaXJlY3RpdmVzID0gZGlyZWN0aXZlcy5zcGxpY2UoaSArIDEsIGRpcmVjdGl2ZXMubGVuZ3RoIC0gKGkgKyAxKSk7XG5cbiAgICAgICAgICAgIGlmIChuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgICAgbWFya0RpcmVjdGl2ZXNBc0lzb2xhdGUodGVtcGxhdGVEaXJlY3RpdmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzLmNvbmNhdCh0ZW1wbGF0ZURpcmVjdGl2ZXMpLmNvbmNhdCh1bnByb2Nlc3NlZERpcmVjdGl2ZXMpO1xuICAgICAgICAgICAgbWVyZ2VUZW1wbGF0ZUF0dHJpYnV0ZXModGVtcGxhdGVBdHRycywgbmV3VGVtcGxhdGVBdHRycyk7XG5cbiAgICAgICAgICAgIGlpID0gZGlyZWN0aXZlcy5sZW5ndGg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRjb21waWxlTm9kZS5odG1sKGRpcmVjdGl2ZVZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlyZWN0aXZlLnRlbXBsYXRlVXJsKSB7XG4gICAgICAgICAgaGFzVGVtcGxhdGUgPSB0cnVlO1xuICAgICAgICAgIGFzc2VydE5vRHVwbGljYXRlKCd0ZW1wbGF0ZScsIHRlbXBsYXRlRGlyZWN0aXZlLCBkaXJlY3RpdmUsICRjb21waWxlTm9kZSk7XG4gICAgICAgICAgdGVtcGxhdGVEaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG5cbiAgICAgICAgICBpZiAoZGlyZWN0aXZlLnJlcGxhY2UpIHtcbiAgICAgICAgICAgIHJlcGxhY2VEaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbm9kZUxpbmtGbiA9IGNvbXBpbGVUZW1wbGF0ZVVybChkaXJlY3RpdmVzLnNwbGljZShpLCBkaXJlY3RpdmVzLmxlbmd0aCAtIGkpLCAkY29tcGlsZU5vZGUsXG4gICAgICAgICAgICAgIHRlbXBsYXRlQXR0cnMsIGpxQ29sbGVjdGlvbiwgaGFzVHJhbnNjbHVkZURpcmVjdGl2ZSAmJiBjaGlsZFRyYW5zY2x1ZGVGbiwgcHJlTGlua0ZucywgcG9zdExpbmtGbnMsIHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyRGlyZWN0aXZlczogY29udHJvbGxlckRpcmVjdGl2ZXMsXG4gICAgICAgICAgICAgICAgbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlOiBuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVEaXJlY3RpdmU6IHRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgIG5vblRsYlRyYW5zY2x1ZGVEaXJlY3RpdmU6IG5vblRsYlRyYW5zY2x1ZGVEaXJlY3RpdmVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgaWkgPSBkaXJlY3RpdmVzLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIGlmIChkaXJlY3RpdmUuY29tcGlsZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsaW5rRm4gPSBkaXJlY3RpdmUuY29tcGlsZSgkY29tcGlsZU5vZGUsIHRlbXBsYXRlQXR0cnMsIGNoaWxkVHJhbnNjbHVkZUZuKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGxpbmtGbikpIHtcbiAgICAgICAgICAgICAgYWRkTGlua0ZucyhudWxsLCBsaW5rRm4sIGF0dHJTdGFydCwgYXR0ckVuZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmtGbikge1xuICAgICAgICAgICAgICBhZGRMaW5rRm5zKGxpbmtGbi5wcmUsIGxpbmtGbi5wb3N0LCBhdHRyU3RhcnQsIGF0dHJFbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUsIHN0YXJ0aW5nVGFnKCRjb21waWxlTm9kZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXJlY3RpdmUudGVybWluYWwpIHtcbiAgICAgICAgICBub2RlTGlua0ZuLnRlcm1pbmFsID0gdHJ1ZTtcbiAgICAgICAgICB0ZXJtaW5hbFByaW9yaXR5ID0gTWF0aC5tYXgodGVybWluYWxQcmlvcml0eSwgZGlyZWN0aXZlLnByaW9yaXR5KTtcbiAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIG5vZGVMaW5rRm4uc2NvcGUgPSBuZXdTY29wZURpcmVjdGl2ZSAmJiBuZXdTY29wZURpcmVjdGl2ZS5zY29wZSA9PT0gdHJ1ZTtcbiAgICAgIG5vZGVMaW5rRm4udHJhbnNjbHVkZU9uVGhpc0VsZW1lbnQgPSBoYXNUcmFuc2NsdWRlRGlyZWN0aXZlO1xuICAgICAgbm9kZUxpbmtGbi5lbGVtZW50VHJhbnNjbHVkZU9uVGhpc0VsZW1lbnQgPSBoYXNFbGVtZW50VHJhbnNjbHVkZURpcmVjdGl2ZTtcbiAgICAgIG5vZGVMaW5rRm4udGVtcGxhdGVPblRoaXNFbGVtZW50ID0gaGFzVGVtcGxhdGU7XG4gICAgICBub2RlTGlua0ZuLnRyYW5zY2x1ZGUgPSBjaGlsZFRyYW5zY2x1ZGVGbjtcblxuICAgICAgcHJldmlvdXNDb21waWxlQ29udGV4dC5oYXNFbGVtZW50VHJhbnNjbHVkZURpcmVjdGl2ZSA9IGhhc0VsZW1lbnRUcmFuc2NsdWRlRGlyZWN0aXZlO1xuXG4gICAgICAvLyBtaWdodCBiZSBub3JtYWwgb3IgZGVsYXllZCBub2RlTGlua0ZuIGRlcGVuZGluZyBvbiBpZiB0ZW1wbGF0ZVVybCBpcyBwcmVzZW50XG4gICAgICByZXR1cm4gbm9kZUxpbmtGbjtcblxuICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgZnVuY3Rpb24gYWRkTGlua0ZucyhwcmUsIHBvc3QsIGF0dHJTdGFydCwgYXR0ckVuZCkge1xuICAgICAgICBpZiAocHJlKSB7XG4gICAgICAgICAgaWYgKGF0dHJTdGFydCkgcHJlID0gZ3JvdXBFbGVtZW50c0xpbmtGbldyYXBwZXIocHJlLCBhdHRyU3RhcnQsIGF0dHJFbmQpO1xuICAgICAgICAgIHByZS5yZXF1aXJlID0gZGlyZWN0aXZlLnJlcXVpcmU7XG4gICAgICAgICAgcHJlLmRpcmVjdGl2ZU5hbWUgPSBkaXJlY3RpdmVOYW1lO1xuICAgICAgICAgIGlmIChuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUgPT09IGRpcmVjdGl2ZSB8fCBkaXJlY3RpdmUuJCRpc29sYXRlU2NvcGUpIHtcbiAgICAgICAgICAgIHByZSA9IGNsb25lQW5kQW5ub3RhdGVGbihwcmUsIHtpc29sYXRlU2NvcGU6IHRydWV9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJlTGlua0Zucy5wdXNoKHByZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc3QpIHtcbiAgICAgICAgICBpZiAoYXR0clN0YXJ0KSBwb3N0ID0gZ3JvdXBFbGVtZW50c0xpbmtGbldyYXBwZXIocG9zdCwgYXR0clN0YXJ0LCBhdHRyRW5kKTtcbiAgICAgICAgICBwb3N0LnJlcXVpcmUgPSBkaXJlY3RpdmUucmVxdWlyZTtcbiAgICAgICAgICBwb3N0LmRpcmVjdGl2ZU5hbWUgPSBkaXJlY3RpdmVOYW1lO1xuICAgICAgICAgIGlmIChuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUgPT09IGRpcmVjdGl2ZSB8fCBkaXJlY3RpdmUuJCRpc29sYXRlU2NvcGUpIHtcbiAgICAgICAgICAgIHBvc3QgPSBjbG9uZUFuZEFubm90YXRlRm4ocG9zdCwge2lzb2xhdGVTY29wZTogdHJ1ZX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwb3N0TGlua0Zucy5wdXNoKHBvc3QpO1xuICAgICAgICB9XG4gICAgICB9XG5cblxuICAgICAgZnVuY3Rpb24gZ2V0Q29udHJvbGxlcnMoZGlyZWN0aXZlTmFtZSwgcmVxdWlyZSwgJGVsZW1lbnQsIGVsZW1lbnRDb250cm9sbGVycykge1xuICAgICAgICB2YXIgdmFsdWUsIHJldHJpZXZhbE1ldGhvZCA9ICdkYXRhJywgb3B0aW9uYWwgPSBmYWxzZTtcbiAgICAgICAgdmFyICRzZWFyY2hFbGVtZW50ID0gJGVsZW1lbnQ7XG4gICAgICAgIHZhciBtYXRjaDtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHJlcXVpcmUpKSB7XG4gICAgICAgICAgbWF0Y2ggPSByZXF1aXJlLm1hdGNoKFJFUVVJUkVfUFJFRklYX1JFR0VYUCk7XG4gICAgICAgICAgcmVxdWlyZSA9IHJlcXVpcmUuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7XG5cbiAgICAgICAgICBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkgbWF0Y2hbM10gPSBudWxsO1xuICAgICAgICAgICAgZWxzZSBtYXRjaFsxXSA9IG1hdGNoWzNdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWF0Y2hbMV0gPT09ICdeJykge1xuICAgICAgICAgICAgcmV0cmlldmFsTWV0aG9kID0gJ2luaGVyaXRlZERhdGEnO1xuICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hbMV0gPT09ICdeXicpIHtcbiAgICAgICAgICAgIHJldHJpZXZhbE1ldGhvZCA9ICdpbmhlcml0ZWREYXRhJztcbiAgICAgICAgICAgICRzZWFyY2hFbGVtZW50ID0gJGVsZW1lbnQucGFyZW50KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXRjaFsyXSA9PT0gJz8nKSB7XG4gICAgICAgICAgICBvcHRpb25hbCA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKGVsZW1lbnRDb250cm9sbGVycyAmJiByZXRyaWV2YWxNZXRob2QgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgaWYgKHZhbHVlID0gZWxlbWVudENvbnRyb2xsZXJzW3JlcXVpcmVdKSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuaW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlID0gdmFsdWUgfHwgJHNlYXJjaEVsZW1lbnRbcmV0cmlldmFsTWV0aG9kXSgnJCcgKyByZXF1aXJlICsgJ0NvbnRyb2xsZXInKTtcblxuICAgICAgICAgIGlmICghdmFsdWUgJiYgIW9wdGlvbmFsKSB7XG4gICAgICAgICAgICB0aHJvdyAkY29tcGlsZU1pbkVycignY3RyZXEnLFxuICAgICAgICAgICAgICAgIFwiQ29udHJvbGxlciAnezB9JywgcmVxdWlyZWQgYnkgZGlyZWN0aXZlICd7MX0nLCBjYW4ndCBiZSBmb3VuZCFcIixcbiAgICAgICAgICAgICAgICByZXF1aXJlLCBkaXJlY3RpdmVOYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlIHx8IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShyZXF1aXJlKSkge1xuICAgICAgICAgIHZhbHVlID0gW107XG4gICAgICAgICAgZm9yRWFjaChyZXF1aXJlLCBmdW5jdGlvbihyZXF1aXJlKSB7XG4gICAgICAgICAgICB2YWx1ZS5wdXNoKGdldENvbnRyb2xsZXJzKGRpcmVjdGl2ZU5hbWUsIHJlcXVpcmUsICRlbGVtZW50LCBlbGVtZW50Q29udHJvbGxlcnMpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG5cblxuICAgICAgZnVuY3Rpb24gbm9kZUxpbmtGbihjaGlsZExpbmtGbiwgc2NvcGUsIGxpbmtOb2RlLCAkcm9vdEVsZW1lbnQsIGJvdW5kVHJhbnNjbHVkZUZuKSB7XG4gICAgICAgIHZhciBpLCBpaSwgbGlua0ZuLCBjb250cm9sbGVyLCBpc29sYXRlU2NvcGUsIGVsZW1lbnRDb250cm9sbGVycywgdHJhbnNjbHVkZUZuLCAkZWxlbWVudCxcbiAgICAgICAgICAgIGF0dHJzO1xuXG4gICAgICAgIGlmIChjb21waWxlTm9kZSA9PT0gbGlua05vZGUpIHtcbiAgICAgICAgICBhdHRycyA9IHRlbXBsYXRlQXR0cnM7XG4gICAgICAgICAgJGVsZW1lbnQgPSB0ZW1wbGF0ZUF0dHJzLiQkZWxlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkZWxlbWVudCA9IGpxTGl0ZShsaW5rTm9kZSk7XG4gICAgICAgICAgYXR0cnMgPSBuZXcgQXR0cmlidXRlcygkZWxlbWVudCwgdGVtcGxhdGVBdHRycyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlKSB7XG4gICAgICAgICAgaXNvbGF0ZVNjb3BlID0gc2NvcGUuJG5ldyh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib3VuZFRyYW5zY2x1ZGVGbikge1xuICAgICAgICAgIC8vIHRyYWNrIGBib3VuZFRyYW5zY2x1ZGVGbmAgc28gaXQgY2FuIGJlIHVud3JhcHBlZCBpZiBgdHJhbnNjbHVkZUZuYFxuICAgICAgICAgIC8vIGlzIGxhdGVyIHBhc3NlZCBhcyBgcGFyZW50Qm91bmRUcmFuc2NsdWRlRm5gIHRvIGBwdWJsaWNMaW5rRm5gXG4gICAgICAgICAgdHJhbnNjbHVkZUZuID0gY29udHJvbGxlcnNCb3VuZFRyYW5zY2x1ZGU7XG4gICAgICAgICAgdHJhbnNjbHVkZUZuLiQkYm91bmRUcmFuc2NsdWRlID0gYm91bmRUcmFuc2NsdWRlRm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udHJvbGxlckRpcmVjdGl2ZXMpIHtcbiAgICAgICAgICAvLyBUT0RPOiBtZXJnZSBgY29udHJvbGxlcnNgIGFuZCBgZWxlbWVudENvbnRyb2xsZXJzYCBpbnRvIHNpbmdsZSBvYmplY3QuXG4gICAgICAgICAgY29udHJvbGxlcnMgPSB7fTtcbiAgICAgICAgICBlbGVtZW50Q29udHJvbGxlcnMgPSB7fTtcbiAgICAgICAgICBmb3JFYWNoKGNvbnRyb2xsZXJEaXJlY3RpdmVzLCBmdW5jdGlvbihkaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbHMgPSB7XG4gICAgICAgICAgICAgICRzY29wZTogZGlyZWN0aXZlID09PSBuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUgfHwgZGlyZWN0aXZlLiQkaXNvbGF0ZVNjb3BlID8gaXNvbGF0ZVNjb3BlIDogc2NvcGUsXG4gICAgICAgICAgICAgICRlbGVtZW50OiAkZWxlbWVudCxcbiAgICAgICAgICAgICAgJGF0dHJzOiBhdHRycyxcbiAgICAgICAgICAgICAgJHRyYW5zY2x1ZGU6IHRyYW5zY2x1ZGVGblxuICAgICAgICAgICAgfSwgY29udHJvbGxlckluc3RhbmNlO1xuXG4gICAgICAgICAgICBjb250cm9sbGVyID0gZGlyZWN0aXZlLmNvbnRyb2xsZXI7XG4gICAgICAgICAgICBpZiAoY29udHJvbGxlciA9PSAnQCcpIHtcbiAgICAgICAgICAgICAgY29udHJvbGxlciA9IGF0dHJzW2RpcmVjdGl2ZS5uYW1lXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udHJvbGxlckluc3RhbmNlID0gJGNvbnRyb2xsZXIoY29udHJvbGxlciwgbG9jYWxzLCB0cnVlLCBkaXJlY3RpdmUuY29udHJvbGxlckFzKTtcblxuICAgICAgICAgICAgLy8gRm9yIGRpcmVjdGl2ZXMgd2l0aCBlbGVtZW50IHRyYW5zY2x1c2lvbiB0aGUgZWxlbWVudCBpcyBhIGNvbW1lbnQsXG4gICAgICAgICAgICAvLyBidXQgalF1ZXJ5IC5kYXRhIGRvZXNuJ3Qgc3VwcG9ydCBhdHRhY2hpbmcgZGF0YSB0byBjb21tZW50IG5vZGVzIGFzIGl0J3MgaGFyZCB0b1xuICAgICAgICAgICAgLy8gY2xlYW4gdXAgKGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzgzMzUpLlxuICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2Ugc2F2ZSB0aGUgY29udHJvbGxlcnMgZm9yIHRoZSBlbGVtZW50IGluIGEgbG9jYWwgaGFzaCBhbmQgYXR0YWNoIHRvIC5kYXRhXG4gICAgICAgICAgICAvLyBsYXRlciwgb25jZSB3ZSBoYXZlIHRoZSBhY3R1YWwgZWxlbWVudC5cbiAgICAgICAgICAgIGVsZW1lbnRDb250cm9sbGVyc1tkaXJlY3RpdmUubmFtZV0gPSBjb250cm9sbGVySW5zdGFuY2U7XG4gICAgICAgICAgICBpZiAoIWhhc0VsZW1lbnRUcmFuc2NsdWRlRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICAgICRlbGVtZW50LmRhdGEoJyQnICsgZGlyZWN0aXZlLm5hbWUgKyAnQ29udHJvbGxlcicsIGNvbnRyb2xsZXJJbnN0YW5jZS5pbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRyb2xsZXJzW2RpcmVjdGl2ZS5uYW1lXSA9IGNvbnRyb2xsZXJJbnN0YW5jZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICBjb21waWxlLiQkYWRkU2NvcGVJbmZvKCRlbGVtZW50LCBpc29sYXRlU2NvcGUsIHRydWUsICEodGVtcGxhdGVEaXJlY3RpdmUgJiYgKHRlbXBsYXRlRGlyZWN0aXZlID09PSBuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUgfHxcbiAgICAgICAgICAgICAgdGVtcGxhdGVEaXJlY3RpdmUgPT09IG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZS4kJG9yaWdpbmFsRGlyZWN0aXZlKSkpO1xuICAgICAgICAgIGNvbXBpbGUuJCRhZGRTY29wZUNsYXNzKCRlbGVtZW50LCB0cnVlKTtcblxuICAgICAgICAgIHZhciBpc29sYXRlU2NvcGVDb250cm9sbGVyID0gY29udHJvbGxlcnMgJiYgY29udHJvbGxlcnNbbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlLm5hbWVdO1xuICAgICAgICAgIHZhciBpc29sYXRlQmluZGluZ0NvbnRleHQgPSBpc29sYXRlU2NvcGU7XG4gICAgICAgICAgaWYgKGlzb2xhdGVTY29wZUNvbnRyb2xsZXIgJiYgaXNvbGF0ZVNjb3BlQ29udHJvbGxlci5pZGVudGlmaWVyICYmXG4gICAgICAgICAgICAgIG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZS5iaW5kVG9Db250cm9sbGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpc29sYXRlQmluZGluZ0NvbnRleHQgPSBpc29sYXRlU2NvcGVDb250cm9sbGVyLmluc3RhbmNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvckVhY2goaXNvbGF0ZVNjb3BlLiQkaXNvbGF0ZUJpbmRpbmdzID0gbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlLiQkaXNvbGF0ZUJpbmRpbmdzLCBmdW5jdGlvbihkZWZpbml0aW9uLCBzY29wZU5hbWUpIHtcbiAgICAgICAgICAgIHZhciBhdHRyTmFtZSA9IGRlZmluaXRpb24uYXR0ck5hbWUsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWwgPSBkZWZpbml0aW9uLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgIG1vZGUgPSBkZWZpbml0aW9uLm1vZGUsIC8vIEAsID0sIG9yICZcbiAgICAgICAgICAgICAgICBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgcGFyZW50R2V0LCBwYXJlbnRTZXQsIGNvbXBhcmU7XG5cbiAgICAgICAgICAgIHN3aXRjaCAobW9kZSkge1xuXG4gICAgICAgICAgICAgIGNhc2UgJ0AnOlxuICAgICAgICAgICAgICAgIGF0dHJzLiRvYnNlcnZlKGF0dHJOYW1lLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgaXNvbGF0ZUJpbmRpbmdDb250ZXh0W3Njb3BlTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhdHRycy4kJG9ic2VydmVyc1thdHRyTmFtZV0uJCRzY29wZSA9IHNjb3BlO1xuICAgICAgICAgICAgICAgIGlmIChhdHRyc1thdHRyTmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUgaGFzIGJlZW4gcHJvdmlkZWQgdGhlbiB3ZSB0cmlnZ2VyIGFuIGludGVycG9sYXRpb24gdG8gZW5zdXJlXG4gICAgICAgICAgICAgICAgICAvLyB0aGUgdmFsdWUgaXMgdGhlcmUgZm9yIHVzZSBpbiB0aGUgbGluayBmblxuICAgICAgICAgICAgICAgICAgaXNvbGF0ZUJpbmRpbmdDb250ZXh0W3Njb3BlTmFtZV0gPSAkaW50ZXJwb2xhdGUoYXR0cnNbYXR0ck5hbWVdKShzY29wZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJz0nOlxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25hbCAmJiAhYXR0cnNbYXR0ck5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcmVudEdldCA9ICRwYXJzZShhdHRyc1thdHRyTmFtZV0pO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRHZXQubGl0ZXJhbCkge1xuICAgICAgICAgICAgICAgICAgY29tcGFyZSA9IGVxdWFscztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY29tcGFyZSA9IGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGEgPT09IGIgfHwgKGEgIT09IGEgJiYgYiAhPT0gYik7IH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcmVudFNldCA9IHBhcmVudEdldC5hc3NpZ24gfHwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAvLyByZXNldCB0aGUgY2hhbmdlLCBvciB3ZSB3aWxsIHRocm93IHRoaXMgZXhjZXB0aW9uIG9uIGV2ZXJ5ICRkaWdlc3RcbiAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IGlzb2xhdGVCaW5kaW5nQ29udGV4dFtzY29wZU5hbWVdID0gcGFyZW50R2V0KHNjb3BlKTtcbiAgICAgICAgICAgICAgICAgIHRocm93ICRjb21waWxlTWluRXJyKCdub25hc3NpZ24nLFxuICAgICAgICAgICAgICAgICAgICAgIFwiRXhwcmVzc2lvbiAnezB9JyB1c2VkIHdpdGggZGlyZWN0aXZlICd7MX0nIGlzIG5vbi1hc3NpZ25hYmxlIVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzW2F0dHJOYW1lXSwgbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlLm5hbWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbGFzdFZhbHVlID0gaXNvbGF0ZUJpbmRpbmdDb250ZXh0W3Njb3BlTmFtZV0gPSBwYXJlbnRHZXQoc2NvcGUpO1xuICAgICAgICAgICAgICAgIHZhciBwYXJlbnRWYWx1ZVdhdGNoID0gZnVuY3Rpb24gcGFyZW50VmFsdWVXYXRjaChwYXJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlKHBhcmVudFZhbHVlLCBpc29sYXRlQmluZGluZ0NvbnRleHRbc2NvcGVOYW1lXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgYXJlIG91dCBvZiBzeW5jIGFuZCBuZWVkIHRvIGNvcHlcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlKHBhcmVudFZhbHVlLCBsYXN0VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gcGFyZW50IGNoYW5nZWQgYW5kIGl0IGhhcyBwcmVjZWRlbmNlXG4gICAgICAgICAgICAgICAgICAgICAgaXNvbGF0ZUJpbmRpbmdDb250ZXh0W3Njb3BlTmFtZV0gPSBwYXJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcGFyZW50IGNhbiBiZSBhc3NpZ25lZCB0aGVuIGRvIHNvXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50U2V0KHNjb3BlLCBwYXJlbnRWYWx1ZSA9IGlzb2xhdGVCaW5kaW5nQ29udGV4dFtzY29wZU5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RWYWx1ZSA9IHBhcmVudFZhbHVlO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcGFyZW50VmFsdWVXYXRjaC4kc3RhdGVmdWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciB1bndhdGNoO1xuICAgICAgICAgICAgICAgIGlmIChkZWZpbml0aW9uLmNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgIHVud2F0Y2ggPSBzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKGF0dHJzW2F0dHJOYW1lXSwgcGFyZW50VmFsdWVXYXRjaCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHVud2F0Y2ggPSBzY29wZS4kd2F0Y2goJHBhcnNlKGF0dHJzW2F0dHJOYW1lXSwgcGFyZW50VmFsdWVXYXRjaCksIG51bGwsIHBhcmVudEdldC5saXRlcmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXNvbGF0ZVNjb3BlLiRvbignJGRlc3Ryb3knLCB1bndhdGNoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICcmJzpcbiAgICAgICAgICAgICAgICBwYXJlbnRHZXQgPSAkcGFyc2UoYXR0cnNbYXR0ck5hbWVdKTtcbiAgICAgICAgICAgICAgICBpc29sYXRlQmluZGluZ0NvbnRleHRbc2NvcGVOYW1lXSA9IGZ1bmN0aW9uKGxvY2Fscykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudEdldChzY29wZSwgbG9jYWxzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9sbGVycykge1xuICAgICAgICAgIGZvckVhY2goY29udHJvbGxlcnMsIGZ1bmN0aW9uKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb250cm9sbGVycyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQUkVMSU5LSU5HXG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gcHJlTGlua0Zucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgbGlua0ZuID0gcHJlTGlua0Zuc1tpXTtcbiAgICAgICAgICBpbnZva2VMaW5rRm4obGlua0ZuLFxuICAgICAgICAgICAgICBsaW5rRm4uaXNvbGF0ZVNjb3BlID8gaXNvbGF0ZVNjb3BlIDogc2NvcGUsXG4gICAgICAgICAgICAgICRlbGVtZW50LFxuICAgICAgICAgICAgICBhdHRycyxcbiAgICAgICAgICAgICAgbGlua0ZuLnJlcXVpcmUgJiYgZ2V0Q29udHJvbGxlcnMobGlua0ZuLmRpcmVjdGl2ZU5hbWUsIGxpbmtGbi5yZXF1aXJlLCAkZWxlbWVudCwgZWxlbWVudENvbnRyb2xsZXJzKSxcbiAgICAgICAgICAgICAgdHJhbnNjbHVkZUZuXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJFQ1VSU0lPTlxuICAgICAgICAvLyBXZSBvbmx5IHBhc3MgdGhlIGlzb2xhdGUgc2NvcGUsIGlmIHRoZSBpc29sYXRlIGRpcmVjdGl2ZSBoYXMgYSB0ZW1wbGF0ZSxcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHRoZSBjaGlsZCBlbGVtZW50cyBkbyBub3QgYmVsb25nIHRvIHRoZSBpc29sYXRlIGRpcmVjdGl2ZS5cbiAgICAgICAgdmFyIHNjb3BlVG9DaGlsZCA9IHNjb3BlO1xuICAgICAgICBpZiAobmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlICYmIChuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUudGVtcGxhdGUgfHwgbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlLnRlbXBsYXRlVXJsID09PSBudWxsKSkge1xuICAgICAgICAgIHNjb3BlVG9DaGlsZCA9IGlzb2xhdGVTY29wZTtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZExpbmtGbiAmJiBjaGlsZExpbmtGbihzY29wZVRvQ2hpbGQsIGxpbmtOb2RlLmNoaWxkTm9kZXMsIHVuZGVmaW5lZCwgYm91bmRUcmFuc2NsdWRlRm4pO1xuXG4gICAgICAgIC8vIFBPU1RMSU5LSU5HXG4gICAgICAgIGZvciAoaSA9IHBvc3RMaW5rRm5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgbGlua0ZuID0gcG9zdExpbmtGbnNbaV07XG4gICAgICAgICAgaW52b2tlTGlua0ZuKGxpbmtGbixcbiAgICAgICAgICAgICAgbGlua0ZuLmlzb2xhdGVTY29wZSA/IGlzb2xhdGVTY29wZSA6IHNjb3BlLFxuICAgICAgICAgICAgICAkZWxlbWVudCxcbiAgICAgICAgICAgICAgYXR0cnMsXG4gICAgICAgICAgICAgIGxpbmtGbi5yZXF1aXJlICYmIGdldENvbnRyb2xsZXJzKGxpbmtGbi5kaXJlY3RpdmVOYW1lLCBsaW5rRm4ucmVxdWlyZSwgJGVsZW1lbnQsIGVsZW1lbnRDb250cm9sbGVycyksXG4gICAgICAgICAgICAgIHRyYW5zY2x1ZGVGblxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGlzIGluamVjdGVkIGFzIGAkdHJhbnNjbHVkZWAuXG4gICAgICAgIC8vIE5vdGU6IGFsbCBhcmd1bWVudHMgYXJlIG9wdGlvbmFsIVxuICAgICAgICBmdW5jdGlvbiBjb250cm9sbGVyc0JvdW5kVHJhbnNjbHVkZShzY29wZSwgY2xvbmVBdHRhY2hGbiwgZnV0dXJlUGFyZW50RWxlbWVudCkge1xuICAgICAgICAgIHZhciB0cmFuc2NsdWRlQ29udHJvbGxlcnM7XG5cbiAgICAgICAgICAvLyBObyBzY29wZSBwYXNzZWQgaW46XG4gICAgICAgICAgaWYgKCFpc1Njb3BlKHNjb3BlKSkge1xuICAgICAgICAgICAgZnV0dXJlUGFyZW50RWxlbWVudCA9IGNsb25lQXR0YWNoRm47XG4gICAgICAgICAgICBjbG9uZUF0dGFjaEZuID0gc2NvcGU7XG4gICAgICAgICAgICBzY29wZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaGFzRWxlbWVudFRyYW5zY2x1ZGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRyYW5zY2x1ZGVDb250cm9sbGVycyA9IGVsZW1lbnRDb250cm9sbGVycztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmdXR1cmVQYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBmdXR1cmVQYXJlbnRFbGVtZW50ID0gaGFzRWxlbWVudFRyYW5zY2x1ZGVEaXJlY3RpdmUgPyAkZWxlbWVudC5wYXJlbnQoKSA6ICRlbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYm91bmRUcmFuc2NsdWRlRm4oc2NvcGUsIGNsb25lQXR0YWNoRm4sIHRyYW5zY2x1ZGVDb250cm9sbGVycywgZnV0dXJlUGFyZW50RWxlbWVudCwgc2NvcGVUb0NoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcmtEaXJlY3RpdmVzQXNJc29sYXRlKGRpcmVjdGl2ZXMpIHtcbiAgICAgIC8vIG1hcmsgYWxsIGRpcmVjdGl2ZXMgYXMgbmVlZGluZyBpc29sYXRlIHNjb3BlLlxuICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gZGlyZWN0aXZlcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgIGRpcmVjdGl2ZXNbal0gPSBpbmhlcml0KGRpcmVjdGl2ZXNbal0sIHskJGlzb2xhdGVTY29wZTogdHJ1ZX0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGxvb2tzIHVwIHRoZSBkaXJlY3RpdmUgYW5kIGRlY29yYXRlcyBpdCB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyBhbmQgcHJvcGVyIHBhcmFtZXRlcnMuIFdlXG4gICAgICogY2FsbCB0aGlzIHRoZSBib3VuZERpcmVjdGl2ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGRpcmVjdGl2ZSB0byBsb29rIHVwLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBUaGUgZGlyZWN0aXZlIG11c3QgYmUgZm91bmQgaW4gc3BlY2lmaWMgZm9ybWF0LlxuICAgICAqICAgU3RyaW5nIGNvbnRhaW5pbmcgYW55IG9mIHRoZXNlcyBjaGFyYWN0ZXJzOlxuICAgICAqXG4gICAgICogICAqIGBFYDogZWxlbWVudCBuYW1lXG4gICAgICogICAqIGBBJzogYXR0cmlidXRlXG4gICAgICogICAqIGBDYDogY2xhc3NcbiAgICAgKiAgICogYE1gOiBjb21tZW50XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgZGlyZWN0aXZlIHdhcyBhZGRlZC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZGREaXJlY3RpdmUodERpcmVjdGl2ZXMsIG5hbWUsIGxvY2F0aW9uLCBtYXhQcmlvcml0eSwgaWdub3JlRGlyZWN0aXZlLCBzdGFydEF0dHJOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRBdHRyTmFtZSkge1xuICAgICAgaWYgKG5hbWUgPT09IGlnbm9yZURpcmVjdGl2ZSkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgbWF0Y2ggPSBudWxsO1xuICAgICAgaWYgKGhhc0RpcmVjdGl2ZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgZm9yICh2YXIgZGlyZWN0aXZlLCBkaXJlY3RpdmVzID0gJGluamVjdG9yLmdldChuYW1lICsgU3VmZml4KSxcbiAgICAgICAgICAgIGkgPSAwLCBpaSA9IGRpcmVjdGl2ZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkaXJlY3RpdmUgPSBkaXJlY3RpdmVzW2ldO1xuICAgICAgICAgICAgaWYgKChtYXhQcmlvcml0eSA9PT0gdW5kZWZpbmVkIHx8IG1heFByaW9yaXR5ID4gZGlyZWN0aXZlLnByaW9yaXR5KSAmJlxuICAgICAgICAgICAgICAgICBkaXJlY3RpdmUucmVzdHJpY3QuaW5kZXhPZihsb2NhdGlvbikgIT0gLTEpIHtcbiAgICAgICAgICAgICAgaWYgKHN0YXJ0QXR0ck5hbWUpIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmUgPSBpbmhlcml0KGRpcmVjdGl2ZSwgeyQkc3RhcnQ6IHN0YXJ0QXR0ck5hbWUsICQkZW5kOiBlbmRBdHRyTmFtZX0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHREaXJlY3RpdmVzLnB1c2goZGlyZWN0aXZlKTtcbiAgICAgICAgICAgICAgbWF0Y2ggPSBkaXJlY3RpdmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkgeyAkZXhjZXB0aW9uSGFuZGxlcihlKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBsb29rcyB1cCB0aGUgZGlyZWN0aXZlIGFuZCByZXR1cm5zIHRydWUgaWYgaXQgaXMgYSBtdWx0aS1lbGVtZW50IGRpcmVjdGl2ZSxcbiAgICAgKiBhbmQgdGhlcmVmb3JlIHJlcXVpcmVzIERPTSBub2RlcyBiZXR3ZWVuIC1zdGFydCBhbmQgLWVuZCBtYXJrZXJzIHRvIGJlIGdyb3VwZWRcbiAgICAgKiB0b2dldGhlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGRpcmVjdGl2ZSB0byBsb29rIHVwLlxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgZGlyZWN0aXZlIHdhcyByZWdpc3RlcmVkIGFzIG11bHRpLWVsZW1lbnQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGlyZWN0aXZlSXNNdWx0RWxlbWVudChuYW1lKSB7XG4gICAgICBpZiAoaGFzRGlyZWN0aXZlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBmb3IgKHZhciBkaXJlY3RpdmUsIGRpcmVjdGl2ZXMgPSAkaW5qZWN0b3IuZ2V0KG5hbWUgKyBTdWZmaXgpLFxuICAgICAgICAgICAgaSA9IDAsIGlpID0gZGlyZWN0aXZlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgZGlyZWN0aXZlID0gZGlyZWN0aXZlc1tpXTtcbiAgICAgICAgICBpZiAoZGlyZWN0aXZlLm11bHRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHRoZSBlbGVtZW50IGlzIHJlcGxhY2VkIHdpdGggSFRNTCB0ZW1wbGF0ZSB0aGVuIHRoZSBuZXcgYXR0cmlidXRlc1xuICAgICAqIG9uIHRoZSB0ZW1wbGF0ZSBuZWVkIHRvIGJlIG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyBhdHRyaWJ1dGVzIGluIHRoZSBET00uXG4gICAgICogVGhlIGRlc2lyZWQgZWZmZWN0IGlzIHRvIGhhdmUgYm90aCBvZiB0aGUgYXR0cmlidXRlcyBwcmVzZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRzdCBkZXN0aW5hdGlvbiBhdHRyaWJ1dGVzIChvcmlnaW5hbCBET00pXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHNyYyBzb3VyY2UgYXR0cmlidXRlcyAoZnJvbSB0aGUgZGlyZWN0aXZlIHRlbXBsYXRlKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lcmdlVGVtcGxhdGVBdHRyaWJ1dGVzKGRzdCwgc3JjKSB7XG4gICAgICB2YXIgc3JjQXR0ciA9IHNyYy4kYXR0cixcbiAgICAgICAgICBkc3RBdHRyID0gZHN0LiRhdHRyLFxuICAgICAgICAgICRlbGVtZW50ID0gZHN0LiQkZWxlbWVudDtcblxuICAgICAgLy8gcmVhcHBseSB0aGUgb2xkIGF0dHJpYnV0ZXMgdG8gdGhlIG5ldyBlbGVtZW50XG4gICAgICBmb3JFYWNoKGRzdCwgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICBpZiAoa2V5LmNoYXJBdCgwKSAhPSAnJCcpIHtcbiAgICAgICAgICBpZiAoc3JjW2tleV0gJiYgc3JjW2tleV0gIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZSArPSAoa2V5ID09PSAnc3R5bGUnID8gJzsnIDogJyAnKSArIHNyY1trZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkc3QuJHNldChrZXksIHZhbHVlLCB0cnVlLCBzcmNBdHRyW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gY29weSB0aGUgbmV3IGF0dHJpYnV0ZXMgb24gdGhlIG9sZCBhdHRycyBvYmplY3RcbiAgICAgIGZvckVhY2goc3JjLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT0gJ2NsYXNzJykge1xuICAgICAgICAgIHNhZmVBZGRDbGFzcygkZWxlbWVudCwgdmFsdWUpO1xuICAgICAgICAgIGRzdFsnY2xhc3MnXSA9IChkc3RbJ2NsYXNzJ10gPyBkc3RbJ2NsYXNzJ10gKyAnICcgOiAnJykgKyB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gJ3N0eWxlJykge1xuICAgICAgICAgICRlbGVtZW50LmF0dHIoJ3N0eWxlJywgJGVsZW1lbnQuYXR0cignc3R5bGUnKSArICc7JyArIHZhbHVlKTtcbiAgICAgICAgICBkc3RbJ3N0eWxlJ10gPSAoZHN0WydzdHlsZSddID8gZHN0WydzdHlsZSddICsgJzsnIDogJycpICsgdmFsdWU7XG4gICAgICAgICAgLy8gYGRzdGAgd2lsbCBuZXZlciBjb250YWluIGhhc093blByb3BlcnR5IGFzIERPTSBwYXJzZXIgd29uJ3QgbGV0IGl0LlxuICAgICAgICAgIC8vIFlvdSB3aWxsIGdldCBhbiBcIkludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1XCIgZXJyb3IgaWYgeW91XG4gICAgICAgICAgLy8gaGF2ZSBhbiBhdHRyaWJ1dGUgbGlrZSBcImhhcy1vd24tcHJvcGVydHlcIiBvciBcImRhdGEtaGFzLW93bi1wcm9wZXJ0eVwiLCBldGMuXG4gICAgICAgIH0gZWxzZSBpZiAoa2V5LmNoYXJBdCgwKSAhPSAnJCcgJiYgIWRzdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgZHN0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICBkc3RBdHRyW2tleV0gPSBzcmNBdHRyW2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gY29tcGlsZVRlbXBsYXRlVXJsKGRpcmVjdGl2ZXMsICRjb21waWxlTm9kZSwgdEF0dHJzLFxuICAgICAgICAkcm9vdEVsZW1lbnQsIGNoaWxkVHJhbnNjbHVkZUZuLCBwcmVMaW5rRm5zLCBwb3N0TGlua0ZucywgcHJldmlvdXNDb21waWxlQ29udGV4dCkge1xuICAgICAgdmFyIGxpbmtRdWV1ZSA9IFtdLFxuICAgICAgICAgIGFmdGVyVGVtcGxhdGVOb2RlTGlua0ZuLFxuICAgICAgICAgIGFmdGVyVGVtcGxhdGVDaGlsZExpbmtGbixcbiAgICAgICAgICBiZWZvcmVUZW1wbGF0ZUNvbXBpbGVOb2RlID0gJGNvbXBpbGVOb2RlWzBdLFxuICAgICAgICAgIG9yaWdBc3luY0RpcmVjdGl2ZSA9IGRpcmVjdGl2ZXMuc2hpZnQoKSxcbiAgICAgICAgICAvLyBUaGUgZmFjdCB0aGF0IHdlIGhhdmUgdG8gY29weSBhbmQgcGF0Y2ggdGhlIGRpcmVjdGl2ZSBzZWVtcyB3cm9uZyFcbiAgICAgICAgICBkZXJpdmVkU3luY0RpcmVjdGl2ZSA9IGV4dGVuZCh7fSwgb3JpZ0FzeW5jRGlyZWN0aXZlLCB7XG4gICAgICAgICAgICB0ZW1wbGF0ZVVybDogbnVsbCwgdHJhbnNjbHVkZTogbnVsbCwgcmVwbGFjZTogbnVsbCwgJCRvcmlnaW5hbERpcmVjdGl2ZTogb3JpZ0FzeW5jRGlyZWN0aXZlXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGVtcGxhdGVVcmwgPSAoaXNGdW5jdGlvbihvcmlnQXN5bmNEaXJlY3RpdmUudGVtcGxhdGVVcmwpKVxuICAgICAgICAgICAgICA/IG9yaWdBc3luY0RpcmVjdGl2ZS50ZW1wbGF0ZVVybCgkY29tcGlsZU5vZGUsIHRBdHRycylcbiAgICAgICAgICAgICAgOiBvcmlnQXN5bmNEaXJlY3RpdmUudGVtcGxhdGVVcmwsXG4gICAgICAgICAgdGVtcGxhdGVOYW1lc3BhY2UgPSBvcmlnQXN5bmNEaXJlY3RpdmUudGVtcGxhdGVOYW1lc3BhY2U7XG5cbiAgICAgICRjb21waWxlTm9kZS5lbXB0eSgpO1xuXG4gICAgICAkdGVtcGxhdGVSZXF1ZXN0KCRzY2UuZ2V0VHJ1c3RlZFJlc291cmNlVXJsKHRlbXBsYXRlVXJsKSlcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24oY29udGVudCkge1xuICAgICAgICAgIHZhciBjb21waWxlTm9kZSwgdGVtcFRlbXBsYXRlQXR0cnMsICR0ZW1wbGF0ZSwgY2hpbGRCb3VuZFRyYW5zY2x1ZGVGbjtcblxuICAgICAgICAgIGNvbnRlbnQgPSBkZW5vcm1hbGl6ZVRlbXBsYXRlKGNvbnRlbnQpO1xuXG4gICAgICAgICAgaWYgKG9yaWdBc3luY0RpcmVjdGl2ZS5yZXBsYWNlKSB7XG4gICAgICAgICAgICBpZiAoanFMaXRlSXNUZXh0Tm9kZShjb250ZW50KSkge1xuICAgICAgICAgICAgICAkdGVtcGxhdGUgPSBbXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICR0ZW1wbGF0ZSA9IHJlbW92ZUNvbW1lbnRzKHdyYXBUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWVzcGFjZSwgdHJpbShjb250ZW50KSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGlsZU5vZGUgPSAkdGVtcGxhdGVbMF07XG5cbiAgICAgICAgICAgIGlmICgkdGVtcGxhdGUubGVuZ3RoICE9IDEgfHwgY29tcGlsZU5vZGUubm9kZVR5cGUgIT09IE5PREVfVFlQRV9FTEVNRU5UKSB7XG4gICAgICAgICAgICAgIHRocm93ICRjb21waWxlTWluRXJyKCd0cGxydCcsXG4gICAgICAgICAgICAgICAgICBcIlRlbXBsYXRlIGZvciBkaXJlY3RpdmUgJ3swfScgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHJvb3QgZWxlbWVudC4gezF9XCIsXG4gICAgICAgICAgICAgICAgICBvcmlnQXN5bmNEaXJlY3RpdmUubmFtZSwgdGVtcGxhdGVVcmwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0ZW1wVGVtcGxhdGVBdHRycyA9IHskYXR0cjoge319O1xuICAgICAgICAgICAgcmVwbGFjZVdpdGgoJHJvb3RFbGVtZW50LCAkY29tcGlsZU5vZGUsIGNvbXBpbGVOb2RlKTtcbiAgICAgICAgICAgIHZhciB0ZW1wbGF0ZURpcmVjdGl2ZXMgPSBjb2xsZWN0RGlyZWN0aXZlcyhjb21waWxlTm9kZSwgW10sIHRlbXBUZW1wbGF0ZUF0dHJzKTtcblxuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KG9yaWdBc3luY0RpcmVjdGl2ZS5zY29wZSkpIHtcbiAgICAgICAgICAgICAgbWFya0RpcmVjdGl2ZXNBc0lzb2xhdGUodGVtcGxhdGVEaXJlY3RpdmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpcmVjdGl2ZXMgPSB0ZW1wbGF0ZURpcmVjdGl2ZXMuY29uY2F0KGRpcmVjdGl2ZXMpO1xuICAgICAgICAgICAgbWVyZ2VUZW1wbGF0ZUF0dHJpYnV0ZXModEF0dHJzLCB0ZW1wVGVtcGxhdGVBdHRycyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbXBpbGVOb2RlID0gYmVmb3JlVGVtcGxhdGVDb21waWxlTm9kZTtcbiAgICAgICAgICAgICRjb21waWxlTm9kZS5odG1sKGNvbnRlbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpcmVjdGl2ZXMudW5zaGlmdChkZXJpdmVkU3luY0RpcmVjdGl2ZSk7XG5cbiAgICAgICAgICBhZnRlclRlbXBsYXRlTm9kZUxpbmtGbiA9IGFwcGx5RGlyZWN0aXZlc1RvTm9kZShkaXJlY3RpdmVzLCBjb21waWxlTm9kZSwgdEF0dHJzLFxuICAgICAgICAgICAgICBjaGlsZFRyYW5zY2x1ZGVGbiwgJGNvbXBpbGVOb2RlLCBvcmlnQXN5bmNEaXJlY3RpdmUsIHByZUxpbmtGbnMsIHBvc3RMaW5rRm5zLFxuICAgICAgICAgICAgICBwcmV2aW91c0NvbXBpbGVDb250ZXh0KTtcbiAgICAgICAgICBmb3JFYWNoKCRyb290RWxlbWVudCwgZnVuY3Rpb24obm9kZSwgaSkge1xuICAgICAgICAgICAgaWYgKG5vZGUgPT0gY29tcGlsZU5vZGUpIHtcbiAgICAgICAgICAgICAgJHJvb3RFbGVtZW50W2ldID0gJGNvbXBpbGVOb2RlWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFmdGVyVGVtcGxhdGVDaGlsZExpbmtGbiA9IGNvbXBpbGVOb2RlcygkY29tcGlsZU5vZGVbMF0uY2hpbGROb2RlcywgY2hpbGRUcmFuc2NsdWRlRm4pO1xuXG4gICAgICAgICAgd2hpbGUgKGxpbmtRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBzY29wZSA9IGxpbmtRdWV1ZS5zaGlmdCgpLFxuICAgICAgICAgICAgICAgIGJlZm9yZVRlbXBsYXRlTGlua05vZGUgPSBsaW5rUXVldWUuc2hpZnQoKSxcbiAgICAgICAgICAgICAgICBsaW5rUm9vdEVsZW1lbnQgPSBsaW5rUXVldWUuc2hpZnQoKSxcbiAgICAgICAgICAgICAgICBib3VuZFRyYW5zY2x1ZGVGbiA9IGxpbmtRdWV1ZS5zaGlmdCgpLFxuICAgICAgICAgICAgICAgIGxpbmtOb2RlID0gJGNvbXBpbGVOb2RlWzBdO1xuXG4gICAgICAgICAgICBpZiAoc2NvcGUuJCRkZXN0cm95ZWQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoYmVmb3JlVGVtcGxhdGVMaW5rTm9kZSAhPT0gYmVmb3JlVGVtcGxhdGVDb21waWxlTm9kZSkge1xuICAgICAgICAgICAgICB2YXIgb2xkQ2xhc3NlcyA9IGJlZm9yZVRlbXBsYXRlTGlua05vZGUuY2xhc3NOYW1lO1xuXG4gICAgICAgICAgICAgIGlmICghKHByZXZpb3VzQ29tcGlsZUNvbnRleHQuaGFzRWxlbWVudFRyYW5zY2x1ZGVEaXJlY3RpdmUgJiZcbiAgICAgICAgICAgICAgICAgIG9yaWdBc3luY0RpcmVjdGl2ZS5yZXBsYWNlKSkge1xuICAgICAgICAgICAgICAgIC8vIGl0IHdhcyBjbG9uZWQgdGhlcmVmb3JlIHdlIGhhdmUgdG8gY2xvbmUgYXMgd2VsbC5cbiAgICAgICAgICAgICAgICBsaW5rTm9kZSA9IGpxTGl0ZUNsb25lKGNvbXBpbGVOb2RlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXBsYWNlV2l0aChsaW5rUm9vdEVsZW1lbnQsIGpxTGl0ZShiZWZvcmVUZW1wbGF0ZUxpbmtOb2RlKSwgbGlua05vZGUpO1xuXG4gICAgICAgICAgICAgIC8vIENvcHkgaW4gQ1NTIGNsYXNzZXMgZnJvbSBvcmlnaW5hbCBub2RlXG4gICAgICAgICAgICAgIHNhZmVBZGRDbGFzcyhqcUxpdGUobGlua05vZGUpLCBvbGRDbGFzc2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhZnRlclRlbXBsYXRlTm9kZUxpbmtGbi50cmFuc2NsdWRlT25UaGlzRWxlbWVudCkge1xuICAgICAgICAgICAgICBjaGlsZEJvdW5kVHJhbnNjbHVkZUZuID0gY3JlYXRlQm91bmRUcmFuc2NsdWRlRm4oc2NvcGUsIGFmdGVyVGVtcGxhdGVOb2RlTGlua0ZuLnRyYW5zY2x1ZGUsIGJvdW5kVHJhbnNjbHVkZUZuKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNoaWxkQm91bmRUcmFuc2NsdWRlRm4gPSBib3VuZFRyYW5zY2x1ZGVGbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFmdGVyVGVtcGxhdGVOb2RlTGlua0ZuKGFmdGVyVGVtcGxhdGVDaGlsZExpbmtGbiwgc2NvcGUsIGxpbmtOb2RlLCAkcm9vdEVsZW1lbnQsXG4gICAgICAgICAgICAgIGNoaWxkQm91bmRUcmFuc2NsdWRlRm4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsaW5rUXVldWUgPSBudWxsO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGRlbGF5ZWROb2RlTGlua0ZuKGlnbm9yZUNoaWxkTGlua0ZuLCBzY29wZSwgbm9kZSwgcm9vdEVsZW1lbnQsIGJvdW5kVHJhbnNjbHVkZUZuKSB7XG4gICAgICAgIHZhciBjaGlsZEJvdW5kVHJhbnNjbHVkZUZuID0gYm91bmRUcmFuc2NsdWRlRm47XG4gICAgICAgIGlmIChzY29wZS4kJGRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICBpZiAobGlua1F1ZXVlKSB7XG4gICAgICAgICAgbGlua1F1ZXVlLnB1c2goc2NvcGUpO1xuICAgICAgICAgIGxpbmtRdWV1ZS5wdXNoKG5vZGUpO1xuICAgICAgICAgIGxpbmtRdWV1ZS5wdXNoKHJvb3RFbGVtZW50KTtcbiAgICAgICAgICBsaW5rUXVldWUucHVzaChjaGlsZEJvdW5kVHJhbnNjbHVkZUZuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoYWZ0ZXJUZW1wbGF0ZU5vZGVMaW5rRm4udHJhbnNjbHVkZU9uVGhpc0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNoaWxkQm91bmRUcmFuc2NsdWRlRm4gPSBjcmVhdGVCb3VuZFRyYW5zY2x1ZGVGbihzY29wZSwgYWZ0ZXJUZW1wbGF0ZU5vZGVMaW5rRm4udHJhbnNjbHVkZSwgYm91bmRUcmFuc2NsdWRlRm4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZnRlclRlbXBsYXRlTm9kZUxpbmtGbihhZnRlclRlbXBsYXRlQ2hpbGRMaW5rRm4sIHNjb3BlLCBub2RlLCByb290RWxlbWVudCwgY2hpbGRCb3VuZFRyYW5zY2x1ZGVGbik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBTb3J0aW5nIGZ1bmN0aW9uIGZvciBib3VuZCBkaXJlY3RpdmVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJ5UHJpb3JpdHkoYSwgYikge1xuICAgICAgdmFyIGRpZmYgPSBiLnByaW9yaXR5IC0gYS5wcmlvcml0eTtcbiAgICAgIGlmIChkaWZmICE9PSAwKSByZXR1cm4gZGlmZjtcbiAgICAgIGlmIChhLm5hbWUgIT09IGIubmFtZSkgcmV0dXJuIChhLm5hbWUgPCBiLm5hbWUpID8gLTEgOiAxO1xuICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYXNzZXJ0Tm9EdXBsaWNhdGUod2hhdCwgcHJldmlvdXNEaXJlY3RpdmUsIGRpcmVjdGl2ZSwgZWxlbWVudCkge1xuICAgICAgaWYgKHByZXZpb3VzRGlyZWN0aXZlKSB7XG4gICAgICAgIHRocm93ICRjb21waWxlTWluRXJyKCdtdWx0aWRpcicsICdNdWx0aXBsZSBkaXJlY3RpdmVzIFt7MH0sIHsxfV0gYXNraW5nIGZvciB7Mn0gb246IHszfScsXG4gICAgICAgICAgICBwcmV2aW91c0RpcmVjdGl2ZS5uYW1lLCBkaXJlY3RpdmUubmFtZSwgd2hhdCwgc3RhcnRpbmdUYWcoZWxlbWVudCkpO1xuICAgICAgfVxuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gYWRkVGV4dEludGVycG9sYXRlRGlyZWN0aXZlKGRpcmVjdGl2ZXMsIHRleHQpIHtcbiAgICAgIHZhciBpbnRlcnBvbGF0ZUZuID0gJGludGVycG9sYXRlKHRleHQsIHRydWUpO1xuICAgICAgaWYgKGludGVycG9sYXRlRm4pIHtcbiAgICAgICAgZGlyZWN0aXZlcy5wdXNoKHtcbiAgICAgICAgICBwcmlvcml0eTogMCxcbiAgICAgICAgICBjb21waWxlOiBmdW5jdGlvbiB0ZXh0SW50ZXJwb2xhdGVDb21waWxlRm4odGVtcGxhdGVOb2RlKSB7XG4gICAgICAgICAgICB2YXIgdGVtcGxhdGVOb2RlUGFyZW50ID0gdGVtcGxhdGVOb2RlLnBhcmVudCgpLFxuICAgICAgICAgICAgICAgIGhhc0NvbXBpbGVQYXJlbnQgPSAhIXRlbXBsYXRlTm9kZVBhcmVudC5sZW5ndGg7XG5cbiAgICAgICAgICAgIC8vIFdoZW4gdHJhbnNjbHVkaW5nIGEgdGVtcGxhdGUgdGhhdCBoYXMgYmluZGluZ3MgaW4gdGhlIHJvb3RcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgYSBwYXJlbnQgYW5kIHRodXMgbmVlZCB0byBhZGQgdGhlIGNsYXNzIGR1cmluZyBsaW5raW5nIGZuLlxuICAgICAgICAgICAgaWYgKGhhc0NvbXBpbGVQYXJlbnQpIGNvbXBpbGUuJCRhZGRCaW5kaW5nQ2xhc3ModGVtcGxhdGVOb2RlUGFyZW50KTtcblxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRleHRJbnRlcnBvbGF0ZUxpbmtGbihzY29wZSwgbm9kZSkge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQoKTtcbiAgICAgICAgICAgICAgaWYgKCFoYXNDb21waWxlUGFyZW50KSBjb21waWxlLiQkYWRkQmluZGluZ0NsYXNzKHBhcmVudCk7XG4gICAgICAgICAgICAgIGNvbXBpbGUuJCRhZGRCaW5kaW5nSW5mbyhwYXJlbnQsIGludGVycG9sYXRlRm4uZXhwcmVzc2lvbnMpO1xuICAgICAgICAgICAgICBzY29wZS4kd2F0Y2goaW50ZXJwb2xhdGVGbiwgZnVuY3Rpb24gaW50ZXJwb2xhdGVGbldhdGNoQWN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbm9kZVswXS5ub2RlVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiB3cmFwVGVtcGxhdGUodHlwZSwgdGVtcGxhdGUpIHtcbiAgICAgIHR5cGUgPSBsb3dlcmNhc2UodHlwZSB8fCAnaHRtbCcpO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzdmcnOlxuICAgICAgY2FzZSAnbWF0aCc6XG4gICAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHdyYXBwZXIuaW5uZXJIVE1MID0gJzwnICsgdHlwZSArICc+JyArIHRlbXBsYXRlICsgJzwvJyArIHR5cGUgKyAnPic7XG4gICAgICAgIHJldHVybiB3cmFwcGVyLmNoaWxkTm9kZXNbMF0uY2hpbGROb2RlcztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGdldFRydXN0ZWRDb250ZXh0KG5vZGUsIGF0dHJOb3JtYWxpemVkTmFtZSkge1xuICAgICAgaWYgKGF0dHJOb3JtYWxpemVkTmFtZSA9PSBcInNyY2RvY1wiKSB7XG4gICAgICAgIHJldHVybiAkc2NlLkhUTUw7XG4gICAgICB9XG4gICAgICB2YXIgdGFnID0gbm9kZU5hbWVfKG5vZGUpO1xuICAgICAgLy8gbWFjdGlvblt4bGluazpocmVmXSBjYW4gc291cmNlIFNWRy4gIEl0J3Mgbm90IGxpbWl0ZWQgdG8gPG1hY3Rpb24+LlxuICAgICAgaWYgKGF0dHJOb3JtYWxpemVkTmFtZSA9PSBcInhsaW5rSHJlZlwiIHx8XG4gICAgICAgICAgKHRhZyA9PSBcImZvcm1cIiAmJiBhdHRyTm9ybWFsaXplZE5hbWUgPT0gXCJhY3Rpb25cIikgfHxcbiAgICAgICAgICAodGFnICE9IFwiaW1nXCIgJiYgKGF0dHJOb3JtYWxpemVkTmFtZSA9PSBcInNyY1wiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ck5vcm1hbGl6ZWROYW1lID09IFwibmdTcmNcIikpKSB7XG4gICAgICAgIHJldHVybiAkc2NlLlJFU09VUkNFX1VSTDtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGFkZEF0dHJJbnRlcnBvbGF0ZURpcmVjdGl2ZShub2RlLCBkaXJlY3RpdmVzLCB2YWx1ZSwgbmFtZSwgYWxsT3JOb3RoaW5nKSB7XG4gICAgICB2YXIgaW50ZXJwb2xhdGVGbiA9ICRpbnRlcnBvbGF0ZSh2YWx1ZSwgdHJ1ZSk7XG5cbiAgICAgIC8vIG5vIGludGVycG9sYXRpb24gZm91bmQgLT4gaWdub3JlXG4gICAgICBpZiAoIWludGVycG9sYXRlRm4pIHJldHVybjtcblxuXG4gICAgICBpZiAobmFtZSA9PT0gXCJtdWx0aXBsZVwiICYmIG5vZGVOYW1lXyhub2RlKSA9PT0gXCJzZWxlY3RcIikge1xuICAgICAgICB0aHJvdyAkY29tcGlsZU1pbkVycihcInNlbG11bHRpXCIsXG4gICAgICAgICAgICBcIkJpbmRpbmcgdG8gdGhlICdtdWx0aXBsZScgYXR0cmlidXRlIGlzIG5vdCBzdXBwb3J0ZWQuIEVsZW1lbnQ6IHswfVwiLFxuICAgICAgICAgICAgc3RhcnRpbmdUYWcobm9kZSkpO1xuICAgICAgfVxuXG4gICAgICBkaXJlY3RpdmVzLnB1c2goe1xuICAgICAgICBwcmlvcml0eTogMTAwLFxuICAgICAgICBjb21waWxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHByZTogZnVuY3Rpb24gYXR0ckludGVycG9sYXRlUHJlTGlua0ZuKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7XG4gICAgICAgICAgICAgICAgdmFyICQkb2JzZXJ2ZXJzID0gKGF0dHIuJCRvYnNlcnZlcnMgfHwgKGF0dHIuJCRvYnNlcnZlcnMgPSB7fSkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKEVWRU5UX0hBTkRMRVJfQVRUUl9SRUdFWFAudGVzdChuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgJGNvbXBpbGVNaW5FcnIoJ25vZG9tZXZlbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgICBcIkludGVycG9sYXRpb25zIGZvciBIVE1MIERPTSBldmVudCBhdHRyaWJ1dGVzIGFyZSBkaXNhbGxvd2VkLiAgUGxlYXNlIHVzZSB0aGUgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5nLSB2ZXJzaW9ucyAoc3VjaCBhcyBuZy1jbGljayBpbnN0ZWFkIG9mIG9uY2xpY2spIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUgd2FzIHJlbW92ZWQsIHRoZW4gd2UgYXJlIGRvbmVcbiAgICAgICAgICAgICAgICBpZiAoIWF0dHJbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGludGVycG9sYXRlIGFnYWluLCBpbiBjYXNlIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaGFzIGJlZW4gdXBkYXRlZFxuICAgICAgICAgICAgICAgIC8vIChlLmcuIGJ5IGFub3RoZXIgZGlyZWN0aXZlJ3MgY29tcGlsZSBmdW5jdGlvbilcbiAgICAgICAgICAgICAgICBpbnRlcnBvbGF0ZUZuID0gJGludGVycG9sYXRlKGF0dHJbbmFtZV0sIHRydWUsIGdldFRydXN0ZWRDb250ZXh0KG5vZGUsIG5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBBTExfT1JfTk9USElOR19BVFRSU1tuYW1lXSB8fCBhbGxPck5vdGhpbmcpO1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgYXR0cmlidXRlIHdhcyB1cGRhdGVkIHNvIHRoYXQgdGhlcmUgaXMgbm8gaW50ZXJwb2xhdGlvbiBnb2luZyBvbiB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgYW55IG9ic2VydmVyc1xuICAgICAgICAgICAgICAgIGlmICghaW50ZXJwb2xhdGVGbikgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBhdHRyIG9iamVjdCBzbyB0aGF0IGl0J3MgcmVhZHkgaW4gY2FzZSB3ZSBuZWVkIHRoZSB2YWx1ZSBmb3IgaXNvbGF0ZVxuICAgICAgICAgICAgICAgIC8vIHNjb3BlIGluaXRpYWxpemF0aW9uLCBvdGhlcndpc2UgdGhlIHZhbHVlIHdvdWxkIG5vdCBiZSBhdmFpbGFibGUgZnJvbSBpc29sYXRlXG4gICAgICAgICAgICAgICAgLy8gZGlyZWN0aXZlJ3MgbGlua2luZyBmbiBkdXJpbmcgbGlua2luZyBwaGFzZVxuICAgICAgICAgICAgICAgIGF0dHJbbmFtZV0gPSBpbnRlcnBvbGF0ZUZuKHNjb3BlKTtcblxuICAgICAgICAgICAgICAgICgkJG9ic2VydmVyc1tuYW1lXSB8fCAoJCRvYnNlcnZlcnNbbmFtZV0gPSBbXSkpLiQkaW50ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIChhdHRyLiQkb2JzZXJ2ZXJzICYmIGF0dHIuJCRvYnNlcnZlcnNbbmFtZV0uJCRzY29wZSB8fCBzY29wZSkuXG4gICAgICAgICAgICAgICAgICAkd2F0Y2goaW50ZXJwb2xhdGVGbiwgZnVuY3Rpb24gaW50ZXJwb2xhdGVGbldhdGNoQWN0aW9uKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAvL3NwZWNpYWwgY2FzZSBmb3IgY2xhc3MgYXR0cmlidXRlIGFkZGl0aW9uICsgcmVtb3ZhbFxuICAgICAgICAgICAgICAgICAgICAvL3NvIHRoYXQgY2xhc3MgY2hhbmdlcyBjYW4gdGFwIGludG8gdGhlIGFuaW1hdGlvblxuICAgICAgICAgICAgICAgICAgICAvL2hvb2tzIHByb3ZpZGVkIGJ5IHRoZSAkYW5pbWF0ZSBzZXJ2aWNlLiBCZSBzdXJlIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vc2tpcCBhbmltYXRpb25zIHdoZW4gdGhlIGZpcnN0IGRpZ2VzdCBvY2N1cnMgKHdoZW5cbiAgICAgICAgICAgICAgICAgICAgLy9ib3RoIHRoZSBuZXcgYW5kIHRoZSBvbGQgdmFsdWVzIGFyZSB0aGUgc2FtZSkgc2luY2VcbiAgICAgICAgICAgICAgICAgICAgLy90aGUgQ1NTIGNsYXNzZXMgYXJlIHRoZSBub24taW50ZXJwb2xhdGVkIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2NsYXNzJyAmJiBuZXdWYWx1ZSAhPSBvbGRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHIuJHVwZGF0ZUNsYXNzKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0ci4kc2V0KG5hbWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGEgc3BlY2lhbCBqcUxpdGUucmVwbGFjZVdpdGgsIHdoaWNoIGNhbiByZXBsYWNlIGl0ZW1zIHdoaWNoXG4gICAgICogaGF2ZSBubyBwYXJlbnRzLCBwcm92aWRlZCB0aGF0IHRoZSBjb250YWluaW5nIGpxTGl0ZSBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtKcUxpdGU9fSAkcm9vdEVsZW1lbnQgVGhlIHJvb3Qgb2YgdGhlIGNvbXBpbGUgdHJlZS4gVXNlZCBzbyB0aGF0IHdlIGNhbiByZXBsYWNlIG5vZGVzXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHJvb3Qgb2YgdGhlIHRyZWUuXG4gICAgICogQHBhcmFtIHtKcUxpdGV9IGVsZW1lbnRzVG9SZW1vdmUgVGhlIGpxTGl0ZSBlbGVtZW50IHdoaWNoIHdlIGFyZSBnb2luZyB0byByZXBsYWNlLiBXZSBrZWVwXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNoZWxsLCBidXQgcmVwbGFjZSBpdHMgRE9NIG5vZGUgcmVmZXJlbmNlLlxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbmV3Tm9kZSBUaGUgbmV3IERPTSBub2RlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlcGxhY2VXaXRoKCRyb290RWxlbWVudCwgZWxlbWVudHNUb1JlbW92ZSwgbmV3Tm9kZSkge1xuICAgICAgdmFyIGZpcnN0RWxlbWVudFRvUmVtb3ZlID0gZWxlbWVudHNUb1JlbW92ZVswXSxcbiAgICAgICAgICByZW1vdmVDb3VudCA9IGVsZW1lbnRzVG9SZW1vdmUubGVuZ3RoLFxuICAgICAgICAgIHBhcmVudCA9IGZpcnN0RWxlbWVudFRvUmVtb3ZlLnBhcmVudE5vZGUsXG4gICAgICAgICAgaSwgaWk7XG5cbiAgICAgIGlmICgkcm9vdEVsZW1lbnQpIHtcbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSAkcm9vdEVsZW1lbnQubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIGlmICgkcm9vdEVsZW1lbnRbaV0gPT0gZmlyc3RFbGVtZW50VG9SZW1vdmUpIHtcbiAgICAgICAgICAgICRyb290RWxlbWVudFtpKytdID0gbmV3Tm9kZTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSBpLCBqMiA9IGogKyByZW1vdmVDb3VudCAtIDEsXG4gICAgICAgICAgICAgICAgICAgICBqaiA9ICRyb290RWxlbWVudC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgIGogPCBqajsgaisrLCBqMisrKSB7XG4gICAgICAgICAgICAgIGlmIChqMiA8IGpqKSB7XG4gICAgICAgICAgICAgICAgJHJvb3RFbGVtZW50W2pdID0gJHJvb3RFbGVtZW50W2oyXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgJHJvb3RFbGVtZW50W2pdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkcm9vdEVsZW1lbnQubGVuZ3RoIC09IHJlbW92ZUNvdW50IC0gMTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIHJlcGxhY2VkIGVsZW1lbnQgaXMgYWxzbyB0aGUgalF1ZXJ5IC5jb250ZXh0IHRoZW4gcmVwbGFjZSBpdFxuICAgICAgICAgICAgLy8gLmNvbnRleHQgaXMgYSBkZXByZWNhdGVkIGpRdWVyeSBhcGksIHNvIHdlIHNob3VsZCBzZXQgaXQgb25seSB3aGVuIGpRdWVyeSBzZXQgaXRcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jb250ZXh0L1xuICAgICAgICAgICAgaWYgKCRyb290RWxlbWVudC5jb250ZXh0ID09PSBmaXJzdEVsZW1lbnRUb1JlbW92ZSkge1xuICAgICAgICAgICAgICAkcm9vdEVsZW1lbnQuY29udGV4dCA9IG5ld05vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKG5ld05vZGUsIGZpcnN0RWxlbWVudFRvUmVtb3ZlKTtcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETyhwZXJmKTogd2hhdCdzIHRoaXMgZG9jdW1lbnQgZnJhZ21lbnQgZm9yPyBpcyBpdCBuZWVkZWQ/IGNhbiB3ZSBhdCBsZWFzdCByZXVzZSBpdD9cbiAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGZpcnN0RWxlbWVudFRvUmVtb3ZlKTtcblxuICAgICAgLy8gQ29weSBvdmVyIHVzZXIgZGF0YSAodGhhdCBpbmNsdWRlcyBBbmd1bGFyJ3MgJHNjb3BlIGV0Yy4pLiBEb24ndCBjb3B5IHByaXZhdGVcbiAgICAgIC8vIGRhdGEgaGVyZSBiZWNhdXNlIHRoZXJlJ3Mgbm8gcHVibGljIGludGVyZmFjZSBpbiBqUXVlcnkgdG8gZG8gdGhhdCBhbmQgY29weWluZyBvdmVyXG4gICAgICAvLyBldmVudCBsaXN0ZW5lcnMgKHdoaWNoIGlzIHRoZSBtYWluIHVzZSBvZiBwcml2YXRlIGRhdGEpIHdvdWxkbid0IHdvcmsgYW55d2F5LlxuICAgICAganFMaXRlKG5ld05vZGUpLmRhdGEoanFMaXRlKGZpcnN0RWxlbWVudFRvUmVtb3ZlKS5kYXRhKCkpO1xuXG4gICAgICAvLyBSZW1vdmUgZGF0YSBvZiB0aGUgcmVwbGFjZWQgZWxlbWVudC4gV2UgY2Fubm90IGp1c3QgY2FsbCAucmVtb3ZlKClcbiAgICAgIC8vIG9uIHRoZSBlbGVtZW50IGl0IHNpbmNlIHRoYXQgd291bGQgZGVhbGxvY2F0ZSBzY29wZSB0aGF0IGlzIG5lZWRlZFxuICAgICAgLy8gZm9yIHRoZSBuZXcgbm9kZS4gSW5zdGVhZCwgcmVtb3ZlIHRoZSBkYXRhIFwibWFudWFsbHlcIi5cbiAgICAgIGlmICghalF1ZXJ5KSB7XG4gICAgICAgIGRlbGV0ZSBqcUxpdGUuY2FjaGVbZmlyc3RFbGVtZW50VG9SZW1vdmVbanFMaXRlLmV4cGFuZG9dXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGpRdWVyeSAyLnggZG9lc24ndCBleHBvc2UgdGhlIGRhdGEgc3RvcmFnZS4gVXNlIGpRdWVyeS5jbGVhbkRhdGEgdG8gY2xlYW4gdXAgYWZ0ZXJcbiAgICAgICAgLy8gdGhlIHJlcGxhY2VkIGVsZW1lbnQuIFRoZSBjbGVhbkRhdGEgdmVyc2lvbiBtb25rZXktcGF0Y2hlZCBieSBBbmd1bGFyIHdvdWxkIGNhdXNlXG4gICAgICAgIC8vIHRoZSBzY29wZSB0byBiZSB0cmFzaGVkIGFuZCB3ZSBkbyBuZWVkIHRoZSB2ZXJ5IHNhbWUgc2NvcGUgdG8gd29yayB3aXRoIHRoZSBuZXdcbiAgICAgICAgLy8gZWxlbWVudC4gSG93ZXZlciwgd2UgY2Fubm90IGp1c3QgY2FjaGUgdGhlIG5vbi1wYXRjaGVkIHZlcnNpb24gYW5kIHVzZSBpdCBoZXJlIGFzXG4gICAgICAgIC8vIHRoYXQgd291bGQgYnJlYWsgaWYgYW5vdGhlciBsaWJyYXJ5IHBhdGNoZXMgdGhlIG1ldGhvZCBhZnRlciBBbmd1bGFyIGRvZXMgKG9uZVxuICAgICAgICAvLyBleGFtcGxlIGlzIGpRdWVyeSBVSSkuIEluc3RlYWQsIHNldCBhIGZsYWcgaW5kaWNhdGluZyBzY29wZSBkZXN0cm95aW5nIHNob3VsZCBiZVxuICAgICAgICAvLyBza2lwcGVkIHRoaXMgb25lIHRpbWUuXG4gICAgICAgIHNraXBEZXN0cm95T25OZXh0SlF1ZXJ5Q2xlYW5EYXRhID0gdHJ1ZTtcbiAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YShbZmlyc3RFbGVtZW50VG9SZW1vdmVdKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgayA9IDEsIGtrID0gZWxlbWVudHNUb1JlbW92ZS5sZW5ndGg7IGsgPCBrazsgaysrKSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gZWxlbWVudHNUb1JlbW92ZVtrXTtcbiAgICAgICAganFMaXRlKGVsZW1lbnQpLnJlbW92ZSgpOyAvLyBtdXN0IGRvIHRoaXMgd2F5IHRvIGNsZWFuIHVwIGV4cGFuZG9cbiAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgIGRlbGV0ZSBlbGVtZW50c1RvUmVtb3ZlW2tdO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50c1RvUmVtb3ZlWzBdID0gbmV3Tm9kZTtcbiAgICAgIGVsZW1lbnRzVG9SZW1vdmUubGVuZ3RoID0gMTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGNsb25lQW5kQW5ub3RhdGVGbihmbiwgYW5ub3RhdGlvbikge1xuICAgICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbigpIHsgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH0sIGZuLCBhbm5vdGF0aW9uKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGludm9rZUxpbmtGbihsaW5rRm4sIHNjb3BlLCAkZWxlbWVudCwgYXR0cnMsIGNvbnRyb2xsZXJzLCB0cmFuc2NsdWRlRm4pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxpbmtGbihzY29wZSwgJGVsZW1lbnQsIGF0dHJzLCBjb250cm9sbGVycywgdHJhbnNjbHVkZUZuKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSwgc3RhcnRpbmdUYWcoJGVsZW1lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dO1xufVxuXG52YXIgUFJFRklYX1JFR0VYUCA9IC9eKCg/Onh8ZGF0YSlbXFw6XFwtX10pL2k7XG4vKipcbiAqIENvbnZlcnRzIGFsbCBhY2NlcHRlZCBkaXJlY3RpdmVzIGZvcm1hdCBpbnRvIHByb3BlciBkaXJlY3RpdmUgbmFtZS5cbiAqIEFsbCBvZiB0aGVzZSB3aWxsIGJlY29tZSAnbXlEaXJlY3RpdmUnOlxuICogICBteTpEaXJlY3RpdmVcbiAqICAgbXktZGlyZWN0aXZlXG4gKiAgIHgtbXktZGlyZWN0aXZlXG4gKiAgIGRhdGEtbXk6ZGlyZWN0aXZlXG4gKlxuICogQWxzbyB0aGVyZSBpcyBzcGVjaWFsIGNhc2UgZm9yIE1veiBwcmVmaXggc3RhcnRpbmcgd2l0aCB1cHBlciBjYXNlIGxldHRlci5cbiAqIEBwYXJhbSBuYW1lIE5hbWUgdG8gbm9ybWFsaXplXG4gKi9cbmZ1bmN0aW9uIGRpcmVjdGl2ZU5vcm1hbGl6ZShuYW1lKSB7XG4gIHJldHVybiBjYW1lbENhc2UobmFtZS5yZXBsYWNlKFBSRUZJWF9SRUdFWFAsICcnKSk7XG59XG5cbi8qKlxuICogQG5nZG9jIHR5cGVcbiAqIEBuYW1lICRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBIHNoYXJlZCBvYmplY3QgYmV0d2VlbiBkaXJlY3RpdmUgY29tcGlsZSAvIGxpbmtpbmcgZnVuY3Rpb25zIHdoaWNoIGNvbnRhaW5zIG5vcm1hbGl6ZWQgRE9NXG4gKiBlbGVtZW50IGF0dHJpYnV0ZXMuIFRoZSB2YWx1ZXMgcmVmbGVjdCBjdXJyZW50IGJpbmRpbmcgc3RhdGUgYHt7IH19YC4gVGhlIG5vcm1hbGl6YXRpb24gaXNcbiAqIG5lZWRlZCBzaW5jZSBhbGwgb2YgdGhlc2UgYXJlIHRyZWF0ZWQgYXMgZXF1aXZhbGVudCBpbiBBbmd1bGFyOlxuICpcbiAqIGBgYFxuICogICAgPHNwYW4gbmc6YmluZD1cImFcIiBuZy1iaW5kPVwiYVwiIGRhdGEtbmctYmluZD1cImFcIiB4LW5nLWJpbmQ9XCJhXCI+XG4gKiBgYGBcbiAqL1xuXG4vKipcbiAqIEBuZ2RvYyBwcm9wZXJ0eVxuICogQG5hbWUgJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXMjJGF0dHJcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgbWFwIG9mIERPTSBlbGVtZW50IGF0dHJpYnV0ZSBuYW1lcyB0byB0aGUgbm9ybWFsaXplZCBuYW1lLiBUaGlzIGlzXG4gKiBuZWVkZWQgdG8gZG8gcmV2ZXJzZSBsb29rdXAgZnJvbSBub3JtYWxpemVkIG5hbWUgYmFjayB0byBhY3R1YWwgbmFtZS5cbiAqL1xuXG5cbi8qKlxuICogQG5nZG9jIG1ldGhvZFxuICogQG5hbWUgJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXMjJHNldFxuICogQGtpbmQgZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNldCBET00gZWxlbWVudCBhdHRyaWJ1dGUgdmFsdWUuXG4gKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5vcm1hbGl6ZWQgZWxlbWVudCBhdHRyaWJ1dGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gbW9kaWZ5LiBUaGUgbmFtZSBpc1xuICogICAgICAgICAgcmV2ZXJzZS10cmFuc2xhdGVkIHVzaW5nIHRoZSB7QGxpbmsgbmcuJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXMjJGF0dHIgJGF0dHJ9XG4gKiAgICAgICAgICBwcm9wZXJ0eSB0byB0aGUgb3JpZ2luYWwgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byBzZXQgdGhlIGF0dHJpYnV0ZSB0by4gVGhlIHZhbHVlIGNhbiBiZSBhbiBpbnRlcnBvbGF0ZWQgc3RyaW5nLlxuICovXG5cblxuXG4vKipcbiAqIENsb3N1cmUgY29tcGlsZXIgdHlwZSBpbmZvcm1hdGlvblxuICovXG5cbmZ1bmN0aW9uIG5vZGVzZXRMaW5raW5nRm4oXG4gIC8qIGFuZ3VsYXIuU2NvcGUgKi8gc2NvcGUsXG4gIC8qIE5vZGVMaXN0ICovIG5vZGVMaXN0LFxuICAvKiBFbGVtZW50ICovIHJvb3RFbGVtZW50LFxuICAvKiBmdW5jdGlvbihGdW5jdGlvbikgKi8gYm91bmRUcmFuc2NsdWRlRm5cbikge31cblxuZnVuY3Rpb24gZGlyZWN0aXZlTGlua2luZ0ZuKFxuICAvKiBub2Rlc2V0TGlua2luZ0ZuICovIG5vZGVzZXRMaW5raW5nRm4sXG4gIC8qIGFuZ3VsYXIuU2NvcGUgKi8gc2NvcGUsXG4gIC8qIE5vZGUgKi8gbm9kZSxcbiAgLyogRWxlbWVudCAqLyByb290RWxlbWVudCxcbiAgLyogZnVuY3Rpb24oRnVuY3Rpb24pICovIGJvdW5kVHJhbnNjbHVkZUZuXG4pIHt9XG5cbmZ1bmN0aW9uIHRva2VuRGlmZmVyZW5jZShzdHIxLCBzdHIyKSB7XG4gIHZhciB2YWx1ZXMgPSAnJyxcbiAgICAgIHRva2VuczEgPSBzdHIxLnNwbGl0KC9cXHMrLyksXG4gICAgICB0b2tlbnMyID0gc3RyMi5zcGxpdCgvXFxzKy8pO1xuXG4gIG91dGVyOlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2VuczEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnMxW2ldO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgdG9rZW5zMi5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKHRva2VuID09IHRva2VuczJbal0pIGNvbnRpbnVlIG91dGVyO1xuICAgIH1cbiAgICB2YWx1ZXMgKz0gKHZhbHVlcy5sZW5ndGggPiAwID8gJyAnIDogJycpICsgdG9rZW47XG4gIH1cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29tbWVudHMoanFOb2Rlcykge1xuICBqcU5vZGVzID0ganFMaXRlKGpxTm9kZXMpO1xuICB2YXIgaSA9IGpxTm9kZXMubGVuZ3RoO1xuXG4gIGlmIChpIDw9IDEpIHtcbiAgICByZXR1cm4ganFOb2RlcztcbiAgfVxuXG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIgbm9kZSA9IGpxTm9kZXNbaV07XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRV9DT01NRU5UKSB7XG4gICAgICBzcGxpY2UuY2FsbChqcU5vZGVzLCBpLCAxKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGpxTm9kZXM7XG59XG5cbi8qKlxuICogQG5nZG9jIHByb3ZpZGVyXG4gKiBAbmFtZSAkY29udHJvbGxlclByb3ZpZGVyXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSB7QGxpbmsgbmcuJGNvbnRyb2xsZXIgJGNvbnRyb2xsZXIgc2VydmljZX0gaXMgdXNlZCBieSBBbmd1bGFyIHRvIGNyZWF0ZSBuZXdcbiAqIGNvbnRyb2xsZXJzLlxuICpcbiAqIFRoaXMgcHJvdmlkZXIgYWxsb3dzIGNvbnRyb2xsZXIgcmVnaXN0cmF0aW9uIHZpYSB0aGVcbiAqIHtAbGluayBuZy4kY29udHJvbGxlclByb3ZpZGVyI3JlZ2lzdGVyIHJlZ2lzdGVyfSBtZXRob2QuXG4gKi9cbmZ1bmN0aW9uICRDb250cm9sbGVyUHJvdmlkZXIoKSB7XG4gIHZhciBjb250cm9sbGVycyA9IHt9LFxuICAgICAgZ2xvYmFscyA9IGZhbHNlLFxuICAgICAgQ05UUkxfUkVHID0gL14oXFxTKykoXFxzK2FzXFxzKyhcXHcrKSk/JC87XG5cblxuICAvKipcbiAgICogQG5nZG9jIG1ldGhvZFxuICAgKiBAbmFtZSAkY29udHJvbGxlclByb3ZpZGVyI3JlZ2lzdGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gbmFtZSBDb250cm9sbGVyIG5hbWUsIG9yIGFuIG9iamVjdCBtYXAgb2YgY29udHJvbGxlcnMgd2hlcmUgdGhlIGtleXMgYXJlXG4gICAqICAgIHRoZSBuYW1lcyBhbmQgdGhlIHZhbHVlcyBhcmUgdGhlIGNvbnN0cnVjdG9ycy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbnxBcnJheX0gY29uc3RydWN0b3IgQ29udHJvbGxlciBjb25zdHJ1Y3RvciBmbiAob3B0aW9uYWxseSBkZWNvcmF0ZWQgd2l0aCBESVxuICAgKiAgICBhbm5vdGF0aW9ucyBpbiB0aGUgYXJyYXkgbm90YXRpb24pLlxuICAgKi9cbiAgdGhpcy5yZWdpc3RlciA9IGZ1bmN0aW9uKG5hbWUsIGNvbnN0cnVjdG9yKSB7XG4gICAgYXNzZXJ0Tm90SGFzT3duUHJvcGVydHkobmFtZSwgJ2NvbnRyb2xsZXInKTtcbiAgICBpZiAoaXNPYmplY3QobmFtZSkpIHtcbiAgICAgIGV4dGVuZChjb250cm9sbGVycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2xsZXJzW25hbWVdID0gY29uc3RydWN0b3I7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAbmdkb2MgbWV0aG9kXG4gICAqIEBuYW1lICRjb250cm9sbGVyUHJvdmlkZXIjYWxsb3dHbG9iYWxzXG4gICAqIEBkZXNjcmlwdGlvbiBJZiBjYWxsZWQsIGFsbG93cyBgJGNvbnRyb2xsZXJgIHRvIGZpbmQgY29udHJvbGxlciBjb25zdHJ1Y3RvcnMgb24gYHdpbmRvd2BcbiAgICovXG4gIHRoaXMuYWxsb3dHbG9iYWxzID0gZnVuY3Rpb24oKSB7XG4gICAgZ2xvYmFscyA9IHRydWU7XG4gIH07XG5cblxuICB0aGlzLiRnZXQgPSBbJyRpbmplY3RvcicsICckd2luZG93JywgZnVuY3Rpb24oJGluamVjdG9yLCAkd2luZG93KSB7XG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2Mgc2VydmljZVxuICAgICAqIEBuYW1lICRjb250cm9sbGVyXG4gICAgICogQHJlcXVpcmVzICRpbmplY3RvclxuICAgICAqXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGNvbnN0cnVjdG9yIElmIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb24gdGhlbiBpdCdzIGNvbnNpZGVyZWQgdG8gYmUgdGhlXG4gICAgICogICAgY29udHJvbGxlciBjb25zdHJ1Y3RvciBmdW5jdGlvbi4gT3RoZXJ3aXNlIGl0J3MgY29uc2lkZXJlZCB0byBiZSBhIHN0cmluZyB3aGljaCBpcyB1c2VkXG4gICAgICogICAgdG8gcmV0cmlldmUgdGhlIGNvbnRyb2xsZXIgY29uc3RydWN0b3IgdXNpbmcgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgICAgKlxuICAgICAqICAgICogY2hlY2sgaWYgYSBjb250cm9sbGVyIHdpdGggZ2l2ZW4gbmFtZSBpcyByZWdpc3RlcmVkIHZpYSBgJGNvbnRyb2xsZXJQcm92aWRlcmBcbiAgICAgKiAgICAqIGNoZWNrIGlmIGV2YWx1YXRpbmcgdGhlIHN0cmluZyBvbiB0aGUgY3VycmVudCBzY29wZSByZXR1cm5zIGEgY29uc3RydWN0b3JcbiAgICAgKiAgICAqIGlmICRjb250cm9sbGVyUHJvdmlkZXIjYWxsb3dHbG9iYWxzLCBjaGVjayBgd2luZG93W2NvbnN0cnVjdG9yXWAgb24gdGhlIGdsb2JhbFxuICAgICAqICAgICAgYHdpbmRvd2Agb2JqZWN0IChub3QgcmVjb21tZW5kZWQpXG4gICAgICpcbiAgICAgKiAgICBUaGUgc3RyaW5nIGNhbiB1c2UgdGhlIGBjb250cm9sbGVyIGFzIHByb3BlcnR5YCBzeW50YXgsIHdoZXJlIHRoZSBjb250cm9sbGVyIGluc3RhbmNlIGlzIHB1Ymxpc2hlZFxuICAgICAqICAgIGFzIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgb24gdGhlIGBzY29wZWA7IHRoZSBgc2NvcGVgIG11c3QgYmUgaW5qZWN0ZWQgaW50byBgbG9jYWxzYCBwYXJhbSBmb3IgdGhpc1xuICAgICAqICAgIHRvIHdvcmsgY29ycmVjdGx5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGxvY2FscyBJbmplY3Rpb24gbG9jYWxzIGZvciBDb250cm9sbGVyLlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gSW5zdGFuY2Ugb2YgZ2l2ZW4gY29udHJvbGxlci5cbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIGAkY29udHJvbGxlcmAgc2VydmljZSBpcyByZXNwb25zaWJsZSBmb3IgaW5zdGFudGlhdGluZyBjb250cm9sbGVycy5cbiAgICAgKlxuICAgICAqIEl0J3MganVzdCBhIHNpbXBsZSBjYWxsIHRvIHtAbGluayBhdXRvLiRpbmplY3RvciAkaW5qZWN0b3J9LCBidXQgZXh0cmFjdGVkIGludG9cbiAgICAgKiBhIHNlcnZpY2UsIHNvIHRoYXQgb25lIGNhbiBvdmVycmlkZSB0aGlzIHNlcnZpY2Ugd2l0aCBbQkMgdmVyc2lvbl0oaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTY0OTc4OCkuXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGV4cHJlc3Npb24sIGxvY2FscywgbGF0ZXIsIGlkZW50KSB7XG4gICAgICAvLyBQUklWQVRFIEFQSTpcbiAgICAgIC8vICAgcGFyYW0gYGxhdGVyYCAtLS0gaW5kaWNhdGVzIHRoYXQgdGhlIGNvbnRyb2xsZXIncyBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIGF0IGEgbGF0ZXIgdGltZS5cbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgSWYgdHJ1ZSwgJGNvbnRyb2xsZXIgd2lsbCBhbGxvY2F0ZSB0aGUgb2JqZWN0IHdpdGggdGhlIGNvcnJlY3RcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlIGNoYWluLCBidXQgd2lsbCBub3QgaW52b2tlIHRoZSBjb250cm9sbGVyIHVudGlsIGEgcmV0dXJuZWRcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgaXMgaW52b2tlZC5cbiAgICAgIC8vICAgcGFyYW0gYGlkZW50YCAtLS0gQW4gb3B0aW9uYWwgbGFiZWwgd2hpY2ggb3ZlcnJpZGVzIHRoZSBsYWJlbCBwYXJzZWQgZnJvbSB0aGUgY29udHJvbGxlclxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uLCBpZiBhbnkuXG4gICAgICB2YXIgaW5zdGFuY2UsIG1hdGNoLCBjb25zdHJ1Y3RvciwgaWRlbnRpZmllcjtcbiAgICAgIGxhdGVyID0gbGF0ZXIgPT09IHRydWU7XG4gICAgICBpZiAoaWRlbnQgJiYgaXNTdHJpbmcoaWRlbnQpKSB7XG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzU3RyaW5nKGV4cHJlc3Npb24pKSB7XG4gICAgICAgIG1hdGNoID0gZXhwcmVzc2lvbi5tYXRjaChDTlRSTF9SRUcpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IG1hdGNoWzFdLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllciB8fCBtYXRjaFszXTtcbiAgICAgICAgZXhwcmVzc2lvbiA9IGNvbnRyb2xsZXJzLmhhc093blByb3BlcnR5KGNvbnN0cnVjdG9yKVxuICAgICAgICAgICAgPyBjb250cm9sbGVyc1tjb25zdHJ1Y3Rvcl1cbiAgICAgICAgICAgIDogZ2V0dGVyKGxvY2Fscy4kc2NvcGUsIGNvbnN0cnVjdG9yLCB0cnVlKSB8fFxuICAgICAgICAgICAgICAgIChnbG9iYWxzID8gZ2V0dGVyKCR3aW5kb3csIGNvbnN0cnVjdG9yLCB0cnVlKSA6IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgYXNzZXJ0QXJnRm4oZXhwcmVzc2lvbiwgY29uc3RydWN0b3IsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAobGF0ZXIpIHtcbiAgICAgICAgLy8gSW5zdGFudGlhdGUgY29udHJvbGxlciBsYXRlcjpcbiAgICAgICAgLy8gVGhpcyBtYWNoaW5lcnkgaXMgdXNlZCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIG9iamVjdCBiZWZvcmUgY2FsbGluZyB0aGVcbiAgICAgICAgLy8gY29udHJvbGxlcidzIGNvbnN0cnVjdG9yIGl0c2VsZi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhpcyBhbGxvd3MgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byB0aGUgY29udHJvbGxlciBiZWZvcmUgdGhlIGNvbnN0cnVjdG9yIGlzXG4gICAgICAgIC8vIGludm9rZWQuIFByaW1hcmlseSwgdGhpcyBpcyB1c2VkIGZvciBpc29sYXRlIHNjb3BlIGJpbmRpbmdzIGluICRjb21waWxlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGlzIGZlYXR1cmUgaXMgbm90IGludGVuZGVkIGZvciB1c2UgYnkgYXBwbGljYXRpb25zLCBhbmQgaXMgdGh1cyBub3QgZG9jdW1lbnRlZFxuICAgICAgICAvLyBwdWJsaWNseS5cbiAgICAgICAgdmFyIENvbnN0cnVjdG9yID0gZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gKGlzQXJyYXkoZXhwcmVzc2lvbikgP1xuICAgICAgICAgIGV4cHJlc3Npb25bZXhwcmVzc2lvbi5sZW5ndGggLSAxXSA6IGV4cHJlc3Npb24pLnByb3RvdHlwZTtcbiAgICAgICAgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcblxuICAgICAgICBpZiAoaWRlbnRpZmllcikge1xuICAgICAgICAgIGFkZElkZW50aWZpZXIobG9jYWxzLCBpZGVudGlmaWVyLCBpbnN0YW5jZSwgY29uc3RydWN0b3IgfHwgZXhwcmVzc2lvbi5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJGluamVjdG9yLmludm9rZShleHByZXNzaW9uLCBpbnN0YW5jZSwgbG9jYWxzLCBjb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9LCB7XG4gICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXJcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlID0gJGluamVjdG9yLmluc3RhbnRpYXRlKGV4cHJlc3Npb24sIGxvY2FscywgY29uc3RydWN0b3IpO1xuXG4gICAgICBpZiAoaWRlbnRpZmllcikge1xuICAgICAgICBhZGRJZGVudGlmaWVyKGxvY2FscywgaWRlbnRpZmllciwgaW5zdGFuY2UsIGNvbnN0cnVjdG9yIHx8IGV4cHJlc3Npb24ubmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gYWRkSWRlbnRpZmllcihsb2NhbHMsIGlkZW50aWZpZXIsIGluc3RhbmNlLCBuYW1lKSB7XG4gICAgICBpZiAoIShsb2NhbHMgJiYgaXNPYmplY3QobG9jYWxzLiRzY29wZSkpKSB7XG4gICAgICAgIHRocm93IG1pbkVycignJGNvbnRyb2xsZXInKSgnbm9zY3AnLFxuICAgICAgICAgIFwiQ2Fubm90IGV4cG9ydCBjb250cm9sbGVyICd7MH0nIGFzICd7MX0nISBObyAkc2NvcGUgb2JqZWN0IHByb3ZpZGVkIHZpYSBgbG9jYWxzYC5cIixcbiAgICAgICAgICBuYW1lLCBpZGVudGlmaWVyKTtcbiAgICAgIH1cblxuICAgICAgbG9jYWxzLiRzY29wZVtpZGVudGlmaWVyXSA9IGluc3RhbmNlO1xuICAgIH1cbiAgfV07XG59XG5cbi8qKlxuICogQG5nZG9jIHNlcnZpY2VcbiAqIEBuYW1lICRkb2N1bWVudFxuICogQHJlcXVpcmVzICR3aW5kb3dcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEge0BsaW5rIGFuZ3VsYXIuZWxlbWVudCBqUXVlcnkgb3IganFMaXRlfSB3cmFwcGVyIGZvciB0aGUgYnJvd3NlcidzIGB3aW5kb3cuZG9jdW1lbnRgIG9iamVjdC5cbiAqXG4gKiBAZXhhbXBsZVxuICAgPGV4YW1wbGUgbW9kdWxlPVwiZG9jdW1lbnRFeGFtcGxlXCI+XG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cbiAgICAgICAgIDxwPiRkb2N1bWVudCB0aXRsZTogPGIgbmctYmluZD1cInRpdGxlXCI+PC9iPjwvcD5cbiAgICAgICAgIDxwPndpbmRvdy5kb2N1bWVudCB0aXRsZTogPGIgbmctYmluZD1cIndpbmRvd1RpdGxlXCI+PC9iPjwvcD5cbiAgICAgICA8L2Rpdj5cbiAgICAgPC9maWxlPlxuICAgICA8ZmlsZSBuYW1lPVwic2NyaXB0LmpzXCI+XG4gICAgICAgYW5ndWxhci5tb2R1bGUoJ2RvY3VtZW50RXhhbXBsZScsIFtdKVxuICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCAnJGRvY3VtZW50JywgZnVuY3Rpb24oJHNjb3BlLCAkZG9jdW1lbnQpIHtcbiAgICAgICAgICAgJHNjb3BlLnRpdGxlID0gJGRvY3VtZW50WzBdLnRpdGxlO1xuICAgICAgICAgICAkc2NvcGUud2luZG93VGl0bGUgPSBhbmd1bGFyLmVsZW1lbnQod2luZG93LmRvY3VtZW50KVswXS50aXRsZTtcbiAgICAgICAgIH1dKTtcbiAgICAgPC9maWxlPlxuICAgPC9leGFtcGxlPlxuICovXG5mdW5jdGlvbiAkRG9jdW1lbnRQcm92aWRlcigpIHtcbiAgdGhpcy4kZ2V0ID0gWyckd2luZG93JywgZnVuY3Rpb24od2luZG93KSB7XG4gICAgcmV0dXJuIGpxTGl0ZSh3aW5kb3cuZG9jdW1lbnQpO1xuICB9XTtcbn1cblxuLyoqXG4gKiBAbmdkb2Mgc2VydmljZVxuICogQG5hbWUgJGV4Y2VwdGlvbkhhbmRsZXJcbiAqIEByZXF1aXJlcyBuZy4kbG9nXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBbnkgdW5jYXVnaHQgZXhjZXB0aW9uIGluIGFuZ3VsYXIgZXhwcmVzc2lvbnMgaXMgZGVsZWdhdGVkIHRvIHRoaXMgc2VydmljZS5cbiAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNpbXBseSBkZWxlZ2F0ZXMgdG8gYCRsb2cuZXJyb3JgIHdoaWNoIGxvZ3MgaXQgaW50b1xuICogdGhlIGJyb3dzZXIgY29uc29sZS5cbiAqXG4gKiBJbiB1bml0IHRlc3RzLCBpZiBgYW5ndWxhci1tb2Nrcy5qc2AgaXMgbG9hZGVkLCB0aGlzIHNlcnZpY2UgaXMgb3ZlcnJpZGRlbiBieVxuICoge0BsaW5rIG5nTW9jay4kZXhjZXB0aW9uSGFuZGxlciBtb2NrICRleGNlcHRpb25IYW5kbGVyfSB3aGljaCBhaWRzIGluIHRlc3RpbmcuXG4gKlxuICogIyMgRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogICBhbmd1bGFyLm1vZHVsZSgnZXhjZXB0aW9uT3ZlcnJpZGUnLCBbXSkuZmFjdG9yeSgnJGV4Y2VwdGlvbkhhbmRsZXInLCBmdW5jdGlvbigpIHtcbiAqICAgICByZXR1cm4gZnVuY3Rpb24oZXhjZXB0aW9uLCBjYXVzZSkge1xuICogICAgICAgZXhjZXB0aW9uLm1lc3NhZ2UgKz0gJyAoY2F1c2VkIGJ5IFwiJyArIGNhdXNlICsgJ1wiKSc7XG4gKiAgICAgICB0aHJvdyBleGNlcHRpb247XG4gKiAgICAgfTtcbiAqICAgfSk7XG4gKiBgYGBcbiAqXG4gKiBUaGlzIGV4YW1wbGUgd2lsbCBvdmVycmlkZSB0aGUgbm9ybWFsIGFjdGlvbiBvZiBgJGV4Y2VwdGlvbkhhbmRsZXJgLCB0byBtYWtlIGFuZ3VsYXJcbiAqIGV4Y2VwdGlvbnMgZmFpbCBoYXJkIHdoZW4gdGhleSBoYXBwZW4sIGluc3RlYWQgb2YganVzdCBsb2dnaW5nIHRvIHRoZSBjb25zb2xlLlxuICpcbiAqIDxociAvPlxuICogTm90ZSwgdGhhdCBjb2RlIGV4ZWN1dGVkIGluIGV2ZW50LWxpc3RlbmVycyAoZXZlbiB0aG9zZSByZWdpc3RlcmVkIHVzaW5nIGpxTGl0ZSdzIGBvbmAvYGJpbmRgXG4gKiBtZXRob2RzKSBkb2VzIG5vdCBkZWxlZ2F0ZSBleGNlcHRpb25zIHRvIHRoZSB7QGxpbmsgbmcuJGV4Y2VwdGlvbkhhbmRsZXIgJGV4Y2VwdGlvbkhhbmRsZXJ9XG4gKiAodW5sZXNzIGV4ZWN1dGVkIGR1cmluZyBhIGRpZ2VzdCkuXG4gKlxuICogSWYgeW91IHdpc2gsIHlvdSBjYW4gbWFudWFsbHkgZGVsZWdhdGUgZXhjZXB0aW9ucywgZS5nLlxuICogYHRyeSB7IC4uLiB9IGNhdGNoKGUpIHsgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7IH1gXG4gKlxuICogQHBhcmFtIHtFcnJvcn0gZXhjZXB0aW9uIEV4Y2VwdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGVycm9yLlxuICogQHBhcmFtIHtzdHJpbmc9fSBjYXVzZSBvcHRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udGV4dCBpbiB3aGljaFxuICogICAgICAgdGhlIGVycm9yIHdhcyB0aHJvd24uXG4gKlxuICovXG5mdW5jdGlvbiAkRXhjZXB0aW9uSGFuZGxlclByb3ZpZGVyKCkge1xuICB0aGlzLiRnZXQgPSBbJyRsb2cnLCBmdW5jdGlvbigkbG9nKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGV4Y2VwdGlvbiwgY2F1c2UpIHtcbiAgICAgICRsb2cuZXJyb3IuYXBwbHkoJGxvZywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XTtcbn1cblxudmFyIEFQUExJQ0FUSU9OX0pTT04gPSAnYXBwbGljYXRpb24vanNvbic7XG52YXIgQ09OVEVOVF9UWVBFX0FQUExJQ0FUSU9OX0pTT04gPSB7J0NvbnRlbnQtVHlwZSc6IEFQUExJQ0FUSU9OX0pTT04gKyAnO2NoYXJzZXQ9dXRmLTgnfTtcbnZhciBKU09OX1NUQVJUID0gL15cXHMqKFxcW3xcXHtbXlxce10pLztcbnZhciBKU09OX0VORCA9IC9bXFx9XFxdXVxccyokLztcbnZhciBKU09OX1BST1RFQ1RJT05fUFJFRklYID0gL15cXClcXF1cXH0nLD9cXG4vO1xuXG5mdW5jdGlvbiBkZWZhdWx0SHR0cFJlc3BvbnNlVHJhbnNmb3JtKGRhdGEsIGhlYWRlcnMpIHtcbiAgaWYgKGlzU3RyaW5nKGRhdGEpKSB7XG4gICAgLy8gc3RyaXAganNvbiB2dWxuZXJhYmlsaXR5IHByb3RlY3Rpb24gcHJlZml4XG4gICAgZGF0YSA9IGRhdGEucmVwbGFjZShKU09OX1BST1RFQ1RJT05fUFJFRklYLCAnJyk7XG4gICAgdmFyIGNvbnRlbnRUeXBlID0gaGVhZGVycygnQ29udGVudC1UeXBlJyk7XG4gICAgaWYgKChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5pbmRleE9mKEFQUExJQ0FUSU9OX0pTT04pID09PSAwICYmIGRhdGEudHJpbSgpKSB8fFxuICAgICAgICAoSlNPTl9TVEFSVC50ZXN0KGRhdGEpICYmIEpTT05fRU5ELnRlc3QoZGF0YSkpKSB7XG4gICAgICBkYXRhID0gZnJvbUpzb24oZGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBrZXkgdmFsdWUgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlcnMgUmF3IGhlYWRlcnMgYXMgYSBzdHJpbmdcbiAqIEByZXR1cm5zIHtPYmplY3R9IFBhcnNlZCBoZWFkZXJzIGFzIGtleSB2YWx1ZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9LCBrZXksIHZhbCwgaTtcblxuICBpZiAoIWhlYWRlcnMpIHJldHVybiBwYXJzZWQ7XG5cbiAgZm9yRWFjaChoZWFkZXJzLnNwbGl0KCdcXG4nKSwgZnVuY3Rpb24obGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSBsb3dlcmNhc2UodHJpbShsaW5lLnN1YnN0cigwLCBpKSkpO1xuICAgIHZhbCA9IHRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgYWNjZXNzIHRvIHBhcnNlZCBoZWFkZXJzLlxuICpcbiAqIEhlYWRlcnMgYXJlIGxhenkgcGFyc2VkIHdoZW4gZmlyc3QgcmVxdWVzdGVkLlxuICogQHNlZSBwYXJzZUhlYWRlcnNcbiAqXG4gKiBAcGFyYW0geyhzdHJpbmd8T2JqZWN0KX0gaGVhZGVycyBIZWFkZXJzIHRvIHByb3ZpZGUgYWNjZXNzIHRvLlxuICogQHJldHVybnMge2Z1bmN0aW9uKHN0cmluZz0pfSBSZXR1cm5zIGEgZ2V0dGVyIGZ1bmN0aW9uIHdoaWNoIGlmIGNhbGxlZCB3aXRoOlxuICpcbiAqICAgLSBpZiBjYWxsZWQgd2l0aCBzaW5nbGUgYW4gYXJndW1lbnQgcmV0dXJucyBhIHNpbmdsZSBoZWFkZXIgdmFsdWUgb3IgbnVsbFxuICogICAtIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cyByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIGFsbCBoZWFkZXJzLlxuICovXG5mdW5jdGlvbiBoZWFkZXJzR2V0dGVyKGhlYWRlcnMpIHtcbiAgdmFyIGhlYWRlcnNPYmogPSBpc09iamVjdChoZWFkZXJzKSA/IGhlYWRlcnMgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBpZiAoIWhlYWRlcnNPYmopIGhlYWRlcnNPYmogPSAgcGFyc2VIZWFkZXJzKGhlYWRlcnMpO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiBoZWFkZXJzT2JqW2xvd2VyY2FzZShuYW1lKV0gfHwgbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc09iajtcbiAgfTtcbn1cblxuXG4vKipcbiAqIENoYWluIGFsbCBnaXZlbiBmdW5jdGlvbnNcbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdHJhbnNmb3JtaW5nXG4gKlxuICogQHBhcmFtIHsqfSBkYXRhIERhdGEgdG8gdHJhbnNmb3JtLlxuICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmc9KX0gaGVhZGVycyBIdHRwIGhlYWRlcnMgZ2V0dGVyIGZuLlxuICogQHBhcmFtIHsoRnVuY3Rpb258QXJyYXkuPEZ1bmN0aW9uPil9IGZucyBGdW5jdGlvbiBvciBhbiBhcnJheSBvZiBmdW5jdGlvbnMuXG4gKiBAcmV0dXJucyB7Kn0gVHJhbnNmb3JtZWQgZGF0YS5cbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgaWYgKGlzRnVuY3Rpb24oZm5zKSlcbiAgICByZXR1cm4gZm5zKGRhdGEsIGhlYWRlcnMpO1xuXG4gIGZvckVhY2goZm5zLCBmdW5jdGlvbihmbikge1xuICAgIGRhdGEgPSBmbihkYXRhLCBoZWFkZXJzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cblxuZnVuY3Rpb24gaXNTdWNjZXNzKHN0YXR1cykge1xuICByZXR1cm4gMjAwIDw9IHN0YXR1cyAmJiBzdGF0dXMgPCAzMDA7XG59XG5cblxuLyoqXG4gKiBAbmdkb2MgcHJvdmlkZXJcbiAqIEBuYW1lICRodHRwUHJvdmlkZXJcbiAqIEBkZXNjcmlwdGlvblxuICogVXNlIGAkaHR0cFByb3ZpZGVyYCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIHtAbGluayBuZy4kaHR0cCAkaHR0cH0gc2VydmljZS5cbiAqICovXG5mdW5jdGlvbiAkSHR0cFByb3ZpZGVyKCkge1xuICAvKipcbiAgICogQG5nZG9jIHByb3BlcnR5XG4gICAqIEBuYW1lICRodHRwUHJvdmlkZXIjZGVmYXVsdHNcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE9iamVjdCBjb250YWluaW5nIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwge0BsaW5rIG5nLiRodHRwICRodHRwfSByZXF1ZXN0cy5cbiAgICpcbiAgICogLSAqKmBkZWZhdWx0cy54c3JmQ29va2llTmFtZWAqKiAtIHtzdHJpbmd9IC0gTmFtZSBvZiBjb29raWUgY29udGFpbmluZyB0aGUgWFNSRiB0b2tlbi5cbiAgICogRGVmYXVsdHMgdmFsdWUgaXMgYCdYU1JGLVRPS0VOJ2AuXG4gICAqXG4gICAqIC0gKipgZGVmYXVsdHMueHNyZkhlYWRlck5hbWVgKiogLSB7c3RyaW5nfSAtIE5hbWUgb2YgSFRUUCBoZWFkZXIgdG8gcG9wdWxhdGUgd2l0aCB0aGVcbiAgICogWFNSRiB0b2tlbi4gRGVmYXVsdHMgdmFsdWUgaXMgYCdYLVhTUkYtVE9LRU4nYC5cbiAgICpcbiAgICogLSAqKmBkZWZhdWx0cy5oZWFkZXJzYCoqIC0ge09iamVjdH0gLSBEZWZhdWx0IGhlYWRlcnMgZm9yIGFsbCAkaHR0cCByZXF1ZXN0cy5cbiAgICogUmVmZXIgdG8ge0BsaW5rIG5nLiRodHRwI3NldHRpbmctaHR0cC1oZWFkZXJzICRodHRwfSBmb3IgZG9jdW1lbnRhdGlvbiBvblxuICAgKiBzZXR0aW5nIGRlZmF1bHQgaGVhZGVycy5cbiAgICogICAgIC0gKipgZGVmYXVsdHMuaGVhZGVycy5jb21tb25gKipcbiAgICogICAgIC0gKipgZGVmYXVsdHMuaGVhZGVycy5wb3N0YCoqXG4gICAqICAgICAtICoqYGRlZmF1bHRzLmhlYWRlcnMucHV0YCoqXG4gICAqICAgICAtICoqYGRlZmF1bHRzLmhlYWRlcnMucGF0Y2hgKipcbiAgICoqL1xuICB2YXIgZGVmYXVsdHMgPSB0aGlzLmRlZmF1bHRzID0ge1xuICAgIC8vIHRyYW5zZm9ybSBpbmNvbWluZyByZXNwb25zZSBkYXRhXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IFtkZWZhdWx0SHR0cFJlc3BvbnNlVHJhbnNmb3JtXSxcblxuICAgIC8vIHRyYW5zZm9ybSBvdXRnb2luZyByZXF1ZXN0IGRhdGFcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGQpICYmICFpc0ZpbGUoZCkgJiYgIWlzQmxvYihkKSA/IHRvSnNvbihkKSA6IGQ7XG4gICAgfV0sXG5cbiAgICAvLyBkZWZhdWx0IGhlYWRlcnNcbiAgICBoZWFkZXJzOiB7XG4gICAgICBjb21tb246IHtcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gICAgICB9LFxuICAgICAgcG9zdDogICBzaGFsbG93Q29weShDT05URU5UX1RZUEVfQVBQTElDQVRJT05fSlNPTiksXG4gICAgICBwdXQ6ICAgIHNoYWxsb3dDb3B5KENPTlRFTlRfVFlQRV9BUFBMSUNBVElPTl9KU09OKSxcbiAgICAgIHBhdGNoOiAgc2hhbGxvd0NvcHkoQ09OVEVOVF9UWVBFX0FQUExJQ0FUSU9OX0pTT04pXG4gICAgfSxcblxuICAgIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gICAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nXG4gIH07XG5cbiAgdmFyIHVzZUFwcGx5QXN5bmMgPSBmYWxzZTtcbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgJGh0dHBQcm92aWRlciN1c2VBcHBseUFzeW5jXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBDb25maWd1cmUgJGh0dHAgc2VydmljZSB0byBjb21iaW5lIHByb2Nlc3Npbmcgb2YgbXVsdGlwbGUgaHR0cCByZXNwb25zZXMgcmVjZWl2ZWQgYXQgYXJvdW5kXG4gICAqIHRoZSBzYW1lIHRpbWUgdmlhIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRhcHBseUFzeW5jICRyb290U2NvcGUuJGFwcGx5QXN5bmN9LiBUaGlzIGNhbiByZXN1bHQgaW5cbiAgICogc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgZm9yIGJpZ2dlciBhcHBsaWNhdGlvbnMgdGhhdCBtYWtlIG1hbnkgSFRUUCByZXF1ZXN0c1xuICAgKiBjb25jdXJyZW50bHkgKGNvbW1vbiBkdXJpbmcgYXBwbGljYXRpb24gYm9vdHN0cmFwKS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gZmFsc2UuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmVkLCByZXR1cm5zIHRoZSBjdXJyZW50IGNvbmZpZ3VyZWQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbj19IHZhbHVlIElmIHRydWUsIHdoZW4gcmVxdWVzdHMgYXJlIGxvYWRlZCwgdGhleSB3aWxsIHNjaGVkdWxlIGEgZGVmZXJyZWRcbiAgICogICAgXCJhcHBseVwiIG9uIHRoZSBuZXh0IHRpY2ssIGdpdmluZyB0aW1lIGZvciBzdWJzZXF1ZW50IHJlcXVlc3RzIGluIGEgcm91Z2hseSB+MTBtcyB3aW5kb3dcbiAgICogICAgdG8gbG9hZCBhbmQgc2hhcmUgdGhlIHNhbWUgZGlnZXN0IGN5Y2xlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbnxPYmplY3R9IElmIGEgdmFsdWUgaXMgc3BlY2lmaWVkLCByZXR1cm5zIHRoZSAkaHR0cFByb3ZpZGVyIGZvciBjaGFpbmluZy5cbiAgICogICAgb3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBjdXJyZW50IGNvbmZpZ3VyZWQgdmFsdWUuXG4gICAqKi9cbiAgdGhpcy51c2VBcHBseUFzeW5jID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdXNlQXBwbHlBc3luYyA9ICEhdmFsdWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIHVzZUFwcGx5QXN5bmM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBwcm9wZXJ0eVxuICAgKiBAbmFtZSAkaHR0cFByb3ZpZGVyI2ludGVyY2VwdG9yc1xuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQXJyYXkgY29udGFpbmluZyBzZXJ2aWNlIGZhY3RvcmllcyBmb3IgYWxsIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cyB7QGxpbmsgbmcuJGh0dHAgJGh0dHB9XG4gICAqIHByZS1wcm9jZXNzaW5nIG9mIHJlcXVlc3Qgb3IgcG9zdHByb2Nlc3Npbmcgb2YgcmVzcG9uc2VzLlxuICAgKlxuICAgKiBUaGVzZSBzZXJ2aWNlIGZhY3RvcmllcyBhcmUgb3JkZXJlZCBieSByZXF1ZXN0LCBpLmUuIHRoZXkgYXJlIGFwcGxpZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlXG4gICAqIGFycmF5LCBvbiByZXF1ZXN0LCBidXQgcmV2ZXJzZSBvcmRlciwgb24gcmVzcG9uc2UuXG4gICAqXG4gICAqIHtAbGluayBuZy4kaHR0cCNpbnRlcmNlcHRvcnMgSW50ZXJjZXB0b3JzIGRldGFpbGVkIGluZm99XG4gICAqKi9cbiAgdmFyIGludGVyY2VwdG9yRmFjdG9yaWVzID0gdGhpcy5pbnRlcmNlcHRvcnMgPSBbXTtcblxuICB0aGlzLiRnZXQgPSBbJyRodHRwQmFja2VuZCcsICckYnJvd3NlcicsICckY2FjaGVGYWN0b3J5JywgJyRyb290U2NvcGUnLCAnJHEnLCAnJGluamVjdG9yJyxcbiAgICAgIGZ1bmN0aW9uKCRodHRwQmFja2VuZCwgJGJyb3dzZXIsICRjYWNoZUZhY3RvcnksICRyb290U2NvcGUsICRxLCAkaW5qZWN0b3IpIHtcblxuICAgIHZhciBkZWZhdWx0Q2FjaGUgPSAkY2FjaGVGYWN0b3J5KCckaHR0cCcpO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJjZXB0b3JzIHN0b3JlZCBpbiByZXZlcnNlIG9yZGVyLiBJbm5lciBpbnRlcmNlcHRvcnMgYmVmb3JlIG91dGVyIGludGVyY2VwdG9ycy5cbiAgICAgKiBUaGUgcmV2ZXJzYWwgaXMgbmVlZGVkIHNvIHRoYXQgd2UgY2FuIGJ1aWxkIHVwIHRoZSBpbnRlcmNlcHRpb24gY2hhaW4gYXJvdW5kIHRoZVxuICAgICAqIHNlcnZlciByZXF1ZXN0LlxuICAgICAqL1xuICAgIHZhciByZXZlcnNlZEludGVyY2VwdG9ycyA9IFtdO1xuXG4gICAgZm9yRWFjaChpbnRlcmNlcHRvckZhY3RvcmllcywgZnVuY3Rpb24oaW50ZXJjZXB0b3JGYWN0b3J5KSB7XG4gICAgICByZXZlcnNlZEludGVyY2VwdG9ycy51bnNoaWZ0KGlzU3RyaW5nKGludGVyY2VwdG9yRmFjdG9yeSlcbiAgICAgICAgICA/ICRpbmplY3Rvci5nZXQoaW50ZXJjZXB0b3JGYWN0b3J5KSA6ICRpbmplY3Rvci5pbnZva2UoaW50ZXJjZXB0b3JGYWN0b3J5KSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2Mgc2VydmljZVxuICAgICAqIEBraW5kIGZ1bmN0aW9uXG4gICAgICogQG5hbWUgJGh0dHBcbiAgICAgKiBAcmVxdWlyZXMgbmcuJGh0dHBCYWNrZW5kXG4gICAgICogQHJlcXVpcmVzICRjYWNoZUZhY3RvcnlcbiAgICAgKiBAcmVxdWlyZXMgJHJvb3RTY29wZVxuICAgICAqIEByZXF1aXJlcyAkcVxuICAgICAqIEByZXF1aXJlcyAkaW5qZWN0b3JcbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgJGh0dHBgIHNlcnZpY2UgaXMgYSBjb3JlIEFuZ3VsYXIgc2VydmljZSB0aGF0IGZhY2lsaXRhdGVzIGNvbW11bmljYXRpb24gd2l0aCB0aGUgcmVtb3RlXG4gICAgICogSFRUUCBzZXJ2ZXJzIHZpYSB0aGUgYnJvd3NlcidzIFtYTUxIdHRwUmVxdWVzdF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4veG1saHR0cHJlcXVlc3QpXG4gICAgICogb2JqZWN0IG9yIHZpYSBbSlNPTlBdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSlNPTlApLlxuICAgICAqXG4gICAgICogRm9yIHVuaXQgdGVzdGluZyBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgYCRodHRwYCBzZXJ2aWNlLCBzZWVcbiAgICAgKiB7QGxpbmsgbmdNb2NrLiRodHRwQmFja2VuZCAkaHR0cEJhY2tlbmQgbW9ja30uXG4gICAgICpcbiAgICAgKiBGb3IgYSBoaWdoZXIgbGV2ZWwgb2YgYWJzdHJhY3Rpb24sIHBsZWFzZSBjaGVjayBvdXQgdGhlIHtAbGluayBuZ1Jlc291cmNlLiRyZXNvdXJjZVxuICAgICAqICRyZXNvdXJjZX0gc2VydmljZS5cbiAgICAgKlxuICAgICAqIFRoZSAkaHR0cCBBUEkgaXMgYmFzZWQgb24gdGhlIHtAbGluayBuZy4kcSBkZWZlcnJlZC9wcm9taXNlIEFQSXN9IGV4cG9zZWQgYnlcbiAgICAgKiB0aGUgJHEgc2VydmljZS4gV2hpbGUgZm9yIHNpbXBsZSB1c2FnZSBwYXR0ZXJucyB0aGlzIGRvZXNuJ3QgbWF0dGVyIG11Y2gsIGZvciBhZHZhbmNlZCB1c2FnZVxuICAgICAqIGl0IGlzIGltcG9ydGFudCB0byBmYW1pbGlhcml6ZSB5b3Vyc2VsZiB3aXRoIHRoZXNlIEFQSXMgYW5kIHRoZSBndWFyYW50ZWVzIHRoZXkgcHJvdmlkZS5cbiAgICAgKlxuICAgICAqXG4gICAgICogIyMgR2VuZXJhbCB1c2FnZVxuICAgICAqIFRoZSBgJGh0dHBgIHNlcnZpY2UgaXMgYSBmdW5jdGlvbiB3aGljaCB0YWtlcyBhIHNpbmdsZSBhcmd1bWVudCDigJQgYSBjb25maWd1cmF0aW9uIG9iamVjdCDigJRcbiAgICAgKiB0aGF0IGlzIHVzZWQgdG8gZ2VuZXJhdGUgYW4gSFRUUCByZXF1ZXN0IGFuZCByZXR1cm5zICBhIHtAbGluayBuZy4kcSBwcm9taXNlfVxuICAgICAqIHdpdGggdHdvICRodHRwIHNwZWNpZmljIG1ldGhvZHM6IGBzdWNjZXNzYCBhbmQgYGVycm9yYC5cbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogICAvLyBTaW1wbGUgR0VUIHJlcXVlc3QgZXhhbXBsZSA6XG4gICAgICogICAkaHR0cC5nZXQoJy9zb21lVXJsJykuXG4gICAgICogICAgIHN1Y2Nlc3MoZnVuY3Rpb24oZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgKiAgICAgICAvLyB0aGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGFzeW5jaHJvbm91c2x5XG4gICAgICogICAgICAgLy8gd2hlbiB0aGUgcmVzcG9uc2UgaXMgYXZhaWxhYmxlXG4gICAgICogICAgIH0pLlxuICAgICAqICAgICBlcnJvcihmdW5jdGlvbihkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAqICAgICAgIC8vIGNhbGxlZCBhc3luY2hyb25vdXNseSBpZiBhbiBlcnJvciBvY2N1cnNcbiAgICAgKiAgICAgICAvLyBvciBzZXJ2ZXIgcmV0dXJucyByZXNwb25zZSB3aXRoIGFuIGVycm9yIHN0YXR1cy5cbiAgICAgKiAgICAgfSk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqICAgLy8gU2ltcGxlIFBPU1QgcmVxdWVzdCBleGFtcGxlIChwYXNzaW5nIGRhdGEpIDpcbiAgICAgKiAgICRodHRwLnBvc3QoJy9zb21lVXJsJywge21zZzonaGVsbG8gd29yZCEnfSkuXG4gICAgICogICAgIHN1Y2Nlc3MoZnVuY3Rpb24oZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgKiAgICAgICAvLyB0aGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGFzeW5jaHJvbm91c2x5XG4gICAgICogICAgICAgLy8gd2hlbiB0aGUgcmVzcG9uc2UgaXMgYXZhaWxhYmxlXG4gICAgICogICAgIH0pLlxuICAgICAqICAgICBlcnJvcihmdW5jdGlvbihkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xuICAgICAqICAgICAgIC8vIGNhbGxlZCBhc3luY2hyb25vdXNseSBpZiBhbiBlcnJvciBvY2N1cnNcbiAgICAgKiAgICAgICAvLyBvciBzZXJ2ZXIgcmV0dXJucyByZXNwb25zZSB3aXRoIGFuIGVycm9yIHN0YXR1cy5cbiAgICAgKiAgICAgfSk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKlxuICAgICAqIFNpbmNlIHRoZSByZXR1cm5lZCB2YWx1ZSBvZiBjYWxsaW5nIHRoZSAkaHR0cCBmdW5jdGlvbiBpcyBhIGBwcm9taXNlYCwgeW91IGNhbiBhbHNvIHVzZVxuICAgICAqIHRoZSBgdGhlbmAgbWV0aG9kIHRvIHJlZ2lzdGVyIGNhbGxiYWNrcywgYW5kIHRoZXNlIGNhbGxiYWNrcyB3aWxsIHJlY2VpdmUgYSBzaW5nbGUgYXJndW1lbnQg4oCTXG4gICAgICogYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzcG9uc2UuIFNlZSB0aGUgQVBJIHNpZ25hdHVyZSBhbmQgdHlwZSBpbmZvIGJlbG93IGZvciBtb3JlXG4gICAgICogZGV0YWlscy5cbiAgICAgKlxuICAgICAqIEEgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgYmV0d2VlbiAyMDAgYW5kIDI5OSBpcyBjb25zaWRlcmVkIGEgc3VjY2VzcyBzdGF0dXMgYW5kXG4gICAgICogd2lsbCByZXN1bHQgaW4gdGhlIHN1Y2Nlc3MgY2FsbGJhY2sgYmVpbmcgY2FsbGVkLiBOb3RlIHRoYXQgaWYgdGhlIHJlc3BvbnNlIGlzIGEgcmVkaXJlY3QsXG4gICAgICogWE1MSHR0cFJlcXVlc3Qgd2lsbCB0cmFuc3BhcmVudGx5IGZvbGxvdyBpdCwgbWVhbmluZyB0aGF0IHRoZSBlcnJvciBjYWxsYmFjayB3aWxsIG5vdCBiZVxuICAgICAqIGNhbGxlZCBmb3Igc3VjaCByZXNwb25zZXMuXG4gICAgICpcbiAgICAgKiAjIyBXcml0aW5nIFVuaXQgVGVzdHMgdGhhdCB1c2UgJGh0dHBcbiAgICAgKiBXaGVuIHVuaXQgdGVzdGluZyAodXNpbmcge0BsaW5rIG5nTW9jayBuZ01vY2t9KSwgaXQgaXMgbmVjZXNzYXJ5IHRvIGNhbGxcbiAgICAgKiB7QGxpbmsgbmdNb2NrLiRodHRwQmFja2VuZCNmbHVzaCAkaHR0cEJhY2tlbmQuZmx1c2goKX0gdG8gZmx1c2ggZWFjaCBwZW5kaW5nXG4gICAgICogcmVxdWVzdCB1c2luZyB0cmFpbmVkIHJlc3BvbnNlcy5cbiAgICAgKlxuICAgICAqIGBgYFxuICAgICAqICRodHRwQmFja2VuZC5leHBlY3RHRVQoLi4uKTtcbiAgICAgKiAkaHR0cC5nZXQoLi4uKTtcbiAgICAgKiAkaHR0cEJhY2tlbmQuZmx1c2goKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqICMjIFNob3J0Y3V0IG1ldGhvZHNcbiAgICAgKlxuICAgICAqIFNob3J0Y3V0IG1ldGhvZHMgYXJlIGFsc28gYXZhaWxhYmxlLiBBbGwgc2hvcnRjdXQgbWV0aG9kcyByZXF1aXJlIHBhc3NpbmcgaW4gdGhlIFVSTCwgYW5kXG4gICAgICogcmVxdWVzdCBkYXRhIG11c3QgYmUgcGFzc2VkIGluIGZvciBQT1NUL1BVVCByZXF1ZXN0cy5cbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogICAkaHR0cC5nZXQoJy9zb21lVXJsJykuc3VjY2VzcyhzdWNjZXNzQ2FsbGJhY2spO1xuICAgICAqICAgJGh0dHAucG9zdCgnL3NvbWVVcmwnLCBkYXRhKS5zdWNjZXNzKHN1Y2Nlc3NDYWxsYmFjayk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBDb21wbGV0ZSBsaXN0IG9mIHNob3J0Y3V0IG1ldGhvZHM6XG4gICAgICpcbiAgICAgKiAtIHtAbGluayBuZy4kaHR0cCNnZXQgJGh0dHAuZ2V0fVxuICAgICAqIC0ge0BsaW5rIG5nLiRodHRwI2hlYWQgJGh0dHAuaGVhZH1cbiAgICAgKiAtIHtAbGluayBuZy4kaHR0cCNwb3N0ICRodHRwLnBvc3R9XG4gICAgICogLSB7QGxpbmsgbmcuJGh0dHAjcHV0ICRodHRwLnB1dH1cbiAgICAgKiAtIHtAbGluayBuZy4kaHR0cCNkZWxldGUgJGh0dHAuZGVsZXRlfVxuICAgICAqIC0ge0BsaW5rIG5nLiRodHRwI2pzb25wICRodHRwLmpzb25wfVxuICAgICAqIC0ge0BsaW5rIG5nLiRodHRwI3BhdGNoICRodHRwLnBhdGNofVxuICAgICAqXG4gICAgICpcbiAgICAgKiAjIyBTZXR0aW5nIEhUVFAgSGVhZGVyc1xuICAgICAqXG4gICAgICogVGhlICRodHRwIHNlcnZpY2Ugd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCBjZXJ0YWluIEhUVFAgaGVhZGVycyB0byBhbGwgcmVxdWVzdHMuIFRoZXNlIGRlZmF1bHRzXG4gICAgICogY2FuIGJlIGZ1bGx5IGNvbmZpZ3VyZWQgYnkgYWNjZXNzaW5nIHRoZSBgJGh0dHBQcm92aWRlci5kZWZhdWx0cy5oZWFkZXJzYCBjb25maWd1cmF0aW9uXG4gICAgICogb2JqZWN0LCB3aGljaCBjdXJyZW50bHkgY29udGFpbnMgdGhpcyBkZWZhdWx0IGNvbmZpZ3VyYXRpb246XG4gICAgICpcbiAgICAgKiAtIGAkaHR0cFByb3ZpZGVyLmRlZmF1bHRzLmhlYWRlcnMuY29tbW9uYCAoaGVhZGVycyB0aGF0IGFyZSBjb21tb24gZm9yIGFsbCByZXF1ZXN0cyk6XG4gICAgICogICAtIGBBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICogLyAqYFxuICAgICAqIC0gYCRodHRwUHJvdmlkZXIuZGVmYXVsdHMuaGVhZGVycy5wb3N0YDogKGhlYWRlciBkZWZhdWx0cyBmb3IgUE9TVCByZXF1ZXN0cylcbiAgICAgKiAgIC0gYENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbmBcbiAgICAgKiAtIGAkaHR0cFByb3ZpZGVyLmRlZmF1bHRzLmhlYWRlcnMucHV0YCAoaGVhZGVyIGRlZmF1bHRzIGZvciBQVVQgcmVxdWVzdHMpXG4gICAgICogICAtIGBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25gXG4gICAgICpcbiAgICAgKiBUbyBhZGQgb3Igb3ZlcndyaXRlIHRoZXNlIGRlZmF1bHRzLCBzaW1wbHkgYWRkIG9yIHJlbW92ZSBhIHByb3BlcnR5IGZyb20gdGhlc2UgY29uZmlndXJhdGlvblxuICAgICAqIG9iamVjdHMuIFRvIGFkZCBoZWFkZXJzIGZvciBhbiBIVFRQIG1ldGhvZCBvdGhlciB0aGFuIFBPU1Qgb3IgUFVULCBzaW1wbHkgYWRkIGEgbmV3IG9iamVjdFxuICAgICAqIHdpdGggdGhlIGxvd2VyY2FzZWQgSFRUUCBtZXRob2QgbmFtZSBhcyB0aGUga2V5LCBlLmcuXG4gICAgICogYCRodHRwUHJvdmlkZXIuZGVmYXVsdHMuaGVhZGVycy5nZXQgPSB7ICdNeS1IZWFkZXInIDogJ3ZhbHVlJyB9LlxuICAgICAqXG4gICAgICogVGhlIGRlZmF1bHRzIGNhbiBhbHNvIGJlIHNldCBhdCBydW50aW1lIHZpYSB0aGUgYCRodHRwLmRlZmF1bHRzYCBvYmplY3QgaW4gdGhlIHNhbWVcbiAgICAgKiBmYXNoaW9uLiBGb3IgZXhhbXBsZTpcbiAgICAgKlxuICAgICAqIGBgYFxuICAgICAqIG1vZHVsZS5ydW4oZnVuY3Rpb24oJGh0dHApIHtcbiAgICAgKiAgICRodHRwLmRlZmF1bHRzLmhlYWRlcnMuY29tbW9uLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgWW1WbGNEcGliMjl3J1xuICAgICAqIH0pO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogSW4gYWRkaXRpb24sIHlvdSBjYW4gc3VwcGx5IGEgYGhlYWRlcnNgIHByb3BlcnR5IGluIHRoZSBjb25maWcgb2JqZWN0IHBhc3NlZCB3aGVuXG4gICAgICogY2FsbGluZyBgJGh0dHAoY29uZmlnKWAsIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdHMgd2l0aG91dCBjaGFuZ2luZyB0aGVtIGdsb2JhbGx5LlxuICAgICAqXG4gICAgICpcbiAgICAgKiAjIyBUcmFuc2Zvcm1pbmcgUmVxdWVzdHMgYW5kIFJlc3BvbnNlc1xuICAgICAqXG4gICAgICogQm90aCByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzIGNhbiBiZSB0cmFuc2Zvcm1lZCB1c2luZyB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbnM6IGB0cmFuc2Zvcm1SZXF1ZXN0YFxuICAgICAqIGFuZCBgdHJhbnNmb3JtUmVzcG9uc2VgLiBUaGVzZSBwcm9wZXJ0aWVzIGNhbiBiZSBhIHNpbmdsZSBmdW5jdGlvbiB0aGF0IHJldHVybnNcbiAgICAgKiB0aGUgdHJhbnNmb3JtZWQgdmFsdWUgKGB7ZnVuY3Rpb24oZGF0YSwgaGVhZGVyc0dldHRlcilgKSBvciBhbiBhcnJheSBvZiBzdWNoIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9ucyxcbiAgICAgKiB3aGljaCBhbGxvd3MgeW91IHRvIGBwdXNoYCBvciBgdW5zaGlmdGAgYSBuZXcgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24gaW50byB0aGUgdHJhbnNmb3JtYXRpb24gY2hhaW4uXG4gICAgICpcbiAgICAgKiAjIyMgRGVmYXVsdCBUcmFuc2Zvcm1hdGlvbnNcbiAgICAgKlxuICAgICAqIFRoZSBgJGh0dHBQcm92aWRlcmAgcHJvdmlkZXIgYW5kIGAkaHR0cGAgc2VydmljZSBleHBvc2UgYGRlZmF1bHRzLnRyYW5zZm9ybVJlcXVlc3RgIGFuZFxuICAgICAqIGBkZWZhdWx0cy50cmFuc2Zvcm1SZXNwb25zZWAgcHJvcGVydGllcy4gSWYgYSByZXF1ZXN0IGRvZXMgbm90IHByb3ZpZGUgaXRzIG93biB0cmFuc2Zvcm1hdGlvbnNcbiAgICAgKiB0aGVuIHRoZXNlIHdpbGwgYmUgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gYXVnbWVudCBvciByZXBsYWNlIHRoZSBkZWZhdWx0IHRyYW5zZm9ybWF0aW9ucyBieSBtb2RpZnlpbmcgdGhlc2UgcHJvcGVydGllcyBieSBhZGRpbmcgdG8gb3JcbiAgICAgKiByZXBsYWNpbmcgdGhlIGFycmF5LlxuICAgICAqXG4gICAgICogQW5ndWxhciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGRlZmF1bHQgdHJhbnNmb3JtYXRpb25zOlxuICAgICAqXG4gICAgICogUmVxdWVzdCB0cmFuc2Zvcm1hdGlvbnMgKGAkaHR0cFByb3ZpZGVyLmRlZmF1bHRzLnRyYW5zZm9ybVJlcXVlc3RgIGFuZCBgJGh0dHAuZGVmYXVsdHMudHJhbnNmb3JtUmVxdWVzdGApOlxuICAgICAqXG4gICAgICogLSBJZiB0aGUgYGRhdGFgIHByb3BlcnR5IG9mIHRoZSByZXF1ZXN0IGNvbmZpZ3VyYXRpb24gb2JqZWN0IGNvbnRhaW5zIGFuIG9iamVjdCwgc2VyaWFsaXplIGl0XG4gICAgICogICBpbnRvIEpTT04gZm9ybWF0LlxuICAgICAqXG4gICAgICogUmVzcG9uc2UgdHJhbnNmb3JtYXRpb25zIChgJGh0dHBQcm92aWRlci5kZWZhdWx0cy50cmFuc2Zvcm1SZXNwb25zZWAgYW5kIGAkaHR0cC5kZWZhdWx0cy50cmFuc2Zvcm1SZXNwb25zZWApOlxuICAgICAqXG4gICAgICogIC0gSWYgWFNSRiBwcmVmaXggaXMgZGV0ZWN0ZWQsIHN0cmlwIGl0IChzZWUgU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMgc2VjdGlvbiBiZWxvdykuXG4gICAgICogIC0gSWYgSlNPTiByZXNwb25zZSBpcyBkZXRlY3RlZCwgZGVzZXJpYWxpemUgaXQgdXNpbmcgYSBKU09OIHBhcnNlci5cbiAgICAgKlxuICAgICAqXG4gICAgICogIyMjIE92ZXJyaWRpbmcgdGhlIERlZmF1bHQgVHJhbnNmb3JtYXRpb25zIFBlciBSZXF1ZXN0XG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2lzaCBvdmVycmlkZSB0aGUgcmVxdWVzdC9yZXNwb25zZSB0cmFuc2Zvcm1hdGlvbnMgb25seSBmb3IgYSBzaW5nbGUgcmVxdWVzdCB0aGVuIHByb3ZpZGVcbiAgICAgKiBgdHJhbnNmb3JtUmVxdWVzdGAgYW5kL29yIGB0cmFuc2Zvcm1SZXNwb25zZWAgcHJvcGVydGllcyBvbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QgcGFzc2VkXG4gICAgICogaW50byBgJGh0dHBgLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IGlmIHlvdSBwcm92aWRlIHRoZXNlIHByb3BlcnRpZXMgb24gdGhlIGNvbmZpZyBvYmplY3QgdGhlIGRlZmF1bHQgdHJhbnNmb3JtYXRpb25zIHdpbGwgYmVcbiAgICAgKiBvdmVyd3JpdHRlbi4gSWYgeW91IHdpc2ggdG8gYXVnbWVudCB0aGUgZGVmYXVsdCB0cmFuc2Zvcm1hdGlvbnMgdGhlbiB5b3UgbXVzdCBpbmNsdWRlIHRoZW0gaW4geW91clxuICAgICAqIGxvY2FsIHRyYW5zZm9ybWF0aW9uIGFycmF5LlxuICAgICAqXG4gICAgICogVGhlIGZvbGxvd2luZyBjb2RlIGRlbW9uc3RyYXRlcyBhZGRpbmcgYSBuZXcgcmVzcG9uc2UgdHJhbnNmb3JtYXRpb24gdG8gYmUgcnVuIGFmdGVyIHRoZSBkZWZhdWx0IHJlc3BvbnNlXG4gICAgICogdHJhbnNmb3JtYXRpb25zIGhhdmUgYmVlbiBydW4uXG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGZ1bmN0aW9uIGFwcGVuZFRyYW5zZm9ybShkZWZhdWx0cywgdHJhbnNmb3JtKSB7XG4gICAgICpcbiAgICAgKiAgIC8vIFdlIGNhbid0IGd1YXJhbnRlZSB0aGF0IHRoZSBkZWZhdWx0IHRyYW5zZm9ybWF0aW9uIGlzIGFuIGFycmF5XG4gICAgICogICBkZWZhdWx0cyA9IGFuZ3VsYXIuaXNBcnJheShkZWZhdWx0cykgPyBkZWZhdWx0cyA6IFtkZWZhdWx0c107XG4gICAgICpcbiAgICAgKiAgIC8vIEFwcGVuZCB0aGUgbmV3IHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBkZWZhdWx0c1xuICAgICAqICAgcmV0dXJuIGRlZmF1bHRzLmNvbmNhdCh0cmFuc2Zvcm0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqICRodHRwKHtcbiAgICAgKiAgIHVybDogJy4uLicsXG4gICAgICogICBtZXRob2Q6ICdHRVQnLFxuICAgICAqICAgdHJhbnNmb3JtUmVzcG9uc2U6IGFwcGVuZFRyYW5zZm9ybSgkaHR0cC5kZWZhdWx0cy50cmFuc2Zvcm1SZXNwb25zZSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgICAgcmV0dXJuIGRvVHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgKiAgIH0pXG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKlxuICAgICAqICMjIENhY2hpbmdcbiAgICAgKlxuICAgICAqIFRvIGVuYWJsZSBjYWNoaW5nLCBzZXQgdGhlIHJlcXVlc3QgY29uZmlndXJhdGlvbiBgY2FjaGVgIHByb3BlcnR5IHRvIGB0cnVlYCAodG8gdXNlIGRlZmF1bHRcbiAgICAgKiBjYWNoZSkgb3IgdG8gYSBjdXN0b20gY2FjaGUgb2JqZWN0IChidWlsdCB3aXRoIHtAbGluayBuZy4kY2FjaGVGYWN0b3J5IGAkY2FjaGVGYWN0b3J5YH0pLlxuICAgICAqIFdoZW4gdGhlIGNhY2hlIGlzIGVuYWJsZWQsIGAkaHR0cGAgc3RvcmVzIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdGhlIHNwZWNpZmllZFxuICAgICAqIGNhY2hlLiBUaGUgbmV4dCB0aW1lIHRoZSBzYW1lIHJlcXVlc3QgaXMgbWFkZSwgdGhlIHJlc3BvbnNlIGlzIHNlcnZlZCBmcm9tIHRoZSBjYWNoZSB3aXRob3V0XG4gICAgICogc2VuZGluZyBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlci5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCBldmVuIGlmIHRoZSByZXNwb25zZSBpcyBzZXJ2ZWQgZnJvbSBjYWNoZSwgZGVsaXZlcnkgb2YgdGhlIGRhdGEgaXMgYXN5bmNocm9ub3VzIGluXG4gICAgICogdGhlIHNhbWUgd2F5IHRoYXQgcmVhbCByZXF1ZXN0cyBhcmUuXG4gICAgICpcbiAgICAgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgR0VUIHJlcXVlc3RzIGZvciB0aGUgc2FtZSBVUkwgdGhhdCBzaG91bGQgYmUgY2FjaGVkIHVzaW5nIHRoZSBzYW1lXG4gICAgICogY2FjaGUsIGJ1dCB0aGUgY2FjaGUgaXMgbm90IHBvcHVsYXRlZCB5ZXQsIG9ubHkgb25lIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB3aWxsIGJlIG1hZGUgYW5kXG4gICAgICogdGhlIHJlbWFpbmluZyByZXF1ZXN0cyB3aWxsIGJlIGZ1bGZpbGxlZCB1c2luZyB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgZmlyc3QgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gY2hhbmdlIHRoZSBkZWZhdWx0IGNhY2hlIHRvIGEgbmV3IG9iamVjdCAoYnVpbHQgd2l0aFxuICAgICAqIHtAbGluayBuZy4kY2FjaGVGYWN0b3J5IGAkY2FjaGVGYWN0b3J5YH0pIGJ5IHVwZGF0aW5nIHRoZVxuICAgICAqIHtAbGluayBuZy4kaHR0cCNkZWZhdWx0cyBgJGh0dHAuZGVmYXVsdHMuY2FjaGVgfSBwcm9wZXJ0eS4gQWxsIHJlcXVlc3RzIHdobyBzZXRcbiAgICAgKiB0aGVpciBgY2FjaGVgIHByb3BlcnR5IHRvIGB0cnVlYCB3aWxsIG5vdyB1c2UgdGhpcyBjYWNoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugc2V0IHRoZSBkZWZhdWx0IGNhY2hlIHRvIGBmYWxzZWAgdGhlbiBvbmx5IHJlcXVlc3RzIHRoYXQgc3BlY2lmeSB0aGVpciBvd24gY3VzdG9tXG4gICAgICogY2FjaGUgb2JqZWN0IHdpbGwgYmUgY2FjaGVkLlxuICAgICAqXG4gICAgICogIyMgSW50ZXJjZXB0b3JzXG4gICAgICpcbiAgICAgKiBCZWZvcmUgeW91IHN0YXJ0IGNyZWF0aW5nIGludGVyY2VwdG9ycywgYmUgc3VyZSB0byB1bmRlcnN0YW5kIHRoZVxuICAgICAqIHtAbGluayBuZy4kcSAkcSBhbmQgZGVmZXJyZWQvcHJvbWlzZSBBUElzfS5cbiAgICAgKlxuICAgICAqIEZvciBwdXJwb3NlcyBvZiBnbG9iYWwgZXJyb3IgaGFuZGxpbmcsIGF1dGhlbnRpY2F0aW9uLCBvciBhbnkga2luZCBvZiBzeW5jaHJvbm91cyBvclxuICAgICAqIGFzeW5jaHJvbm91cyBwcmUtcHJvY2Vzc2luZyBvZiByZXF1ZXN0IG9yIHBvc3Rwcm9jZXNzaW5nIG9mIHJlc3BvbnNlcywgaXQgaXMgZGVzaXJhYmxlIHRvIGJlXG4gICAgICogYWJsZSB0byBpbnRlcmNlcHQgcmVxdWVzdHMgYmVmb3JlIHRoZXkgYXJlIGhhbmRlZCB0byB0aGUgc2VydmVyIGFuZFxuICAgICAqIHJlc3BvbnNlcyBiZWZvcmUgdGhleSBhcmUgaGFuZGVkIG92ZXIgdG8gdGhlIGFwcGxpY2F0aW9uIGNvZGUgdGhhdFxuICAgICAqIGluaXRpYXRlZCB0aGVzZSByZXF1ZXN0cy4gVGhlIGludGVyY2VwdG9ycyBsZXZlcmFnZSB0aGUge0BsaW5rIG5nLiRxXG4gICAgICogcHJvbWlzZSBBUElzfSB0byBmdWxmaWxsIHRoaXMgbmVlZCBmb3IgYm90aCBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHByZS1wcm9jZXNzaW5nLlxuICAgICAqXG4gICAgICogVGhlIGludGVyY2VwdG9ycyBhcmUgc2VydmljZSBmYWN0b3JpZXMgdGhhdCBhcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBgJGh0dHBQcm92aWRlcmAgYnlcbiAgICAgKiBhZGRpbmcgdGhlbSB0byB0aGUgYCRodHRwUHJvdmlkZXIuaW50ZXJjZXB0b3JzYCBhcnJheS4gVGhlIGZhY3RvcnkgaXMgY2FsbGVkIGFuZFxuICAgICAqIGluamVjdGVkIHdpdGggZGVwZW5kZW5jaWVzIChpZiBzcGVjaWZpZWQpIGFuZCByZXR1cm5zIHRoZSBpbnRlcmNlcHRvci5cbiAgICAgKlxuICAgICAqIFRoZXJlIGFyZSB0d28ga2luZHMgb2YgaW50ZXJjZXB0b3JzIChhbmQgdHdvIGtpbmRzIG9mIHJlamVjdGlvbiBpbnRlcmNlcHRvcnMpOlxuICAgICAqXG4gICAgICogICAqIGByZXF1ZXN0YDogaW50ZXJjZXB0b3JzIGdldCBjYWxsZWQgd2l0aCBhIGh0dHAgYGNvbmZpZ2Agb2JqZWN0LiBUaGUgZnVuY3Rpb24gaXMgZnJlZSB0b1xuICAgICAqICAgICBtb2RpZnkgdGhlIGBjb25maWdgIG9iamVjdCBvciBjcmVhdGUgYSBuZXcgb25lLiBUaGUgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIHRoZSBgY29uZmlnYFxuICAgICAqICAgICBvYmplY3QgZGlyZWN0bHksIG9yIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSBgY29uZmlnYCBvciBhIG5ldyBgY29uZmlnYCBvYmplY3QuXG4gICAgICogICAqIGByZXF1ZXN0RXJyb3JgOiBpbnRlcmNlcHRvciBnZXRzIGNhbGxlZCB3aGVuIGEgcHJldmlvdXMgaW50ZXJjZXB0b3IgdGhyZXcgYW4gZXJyb3Igb3JcbiAgICAgKiAgICAgcmVzb2x2ZWQgd2l0aCBhIHJlamVjdGlvbi5cbiAgICAgKiAgICogYHJlc3BvbnNlYDogaW50ZXJjZXB0b3JzIGdldCBjYWxsZWQgd2l0aCBodHRwIGByZXNwb25zZWAgb2JqZWN0LiBUaGUgZnVuY3Rpb24gaXMgZnJlZSB0b1xuICAgICAqICAgICBtb2RpZnkgdGhlIGByZXNwb25zZWAgb2JqZWN0IG9yIGNyZWF0ZSBhIG5ldyBvbmUuIFRoZSBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4gdGhlIGByZXNwb25zZWBcbiAgICAgKiAgICAgb2JqZWN0IGRpcmVjdGx5LCBvciBhcyBhIHByb21pc2UgY29udGFpbmluZyB0aGUgYHJlc3BvbnNlYCBvciBhIG5ldyBgcmVzcG9uc2VgIG9iamVjdC5cbiAgICAgKiAgICogYHJlc3BvbnNlRXJyb3JgOiBpbnRlcmNlcHRvciBnZXRzIGNhbGxlZCB3aGVuIGEgcHJldmlvdXMgaW50ZXJjZXB0b3IgdGhyZXcgYW4gZXJyb3Igb3JcbiAgICAgKiAgICAgcmVzb2x2ZWQgd2l0aCBhIHJlamVjdGlvbi5cbiAgICAgKlxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiAgIC8vIHJlZ2lzdGVyIHRoZSBpbnRlcmNlcHRvciBhcyBhIHNlcnZpY2VcbiAgICAgKiAgICRwcm92aWRlLmZhY3RvcnkoJ215SHR0cEludGVyY2VwdG9yJywgZnVuY3Rpb24oJHEsIGRlcGVuZGVuY3kxLCBkZXBlbmRlbmN5Mikge1xuICAgICAqICAgICByZXR1cm4ge1xuICAgICAqICAgICAgIC8vIG9wdGlvbmFsIG1ldGhvZFxuICAgICAqICAgICAgICdyZXF1ZXN0JzogZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgICogICAgICAgICAvLyBkbyBzb21ldGhpbmcgb24gc3VjY2Vzc1xuICAgICAqICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgKiAgICAgICB9LFxuICAgICAqXG4gICAgICogICAgICAgLy8gb3B0aW9uYWwgbWV0aG9kXG4gICAgICogICAgICAncmVxdWVzdEVycm9yJzogZnVuY3Rpb24ocmVqZWN0aW9uKSB7XG4gICAgICogICAgICAgICAvLyBkbyBzb21ldGhpbmcgb24gZXJyb3JcbiAgICAgKiAgICAgICAgIGlmIChjYW5SZWNvdmVyKHJlamVjdGlvbikpIHtcbiAgICAgKiAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlT3JOZXdQcm9taXNlXG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgICByZXR1cm4gJHEucmVqZWN0KHJlamVjdGlvbik7XG4gICAgICogICAgICAgfSxcbiAgICAgKlxuICAgICAqXG4gICAgICpcbiAgICAgKiAgICAgICAvLyBvcHRpb25hbCBtZXRob2RcbiAgICAgKiAgICAgICAncmVzcG9uc2UnOiBmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAqICAgICAgICAgLy8gZG8gc29tZXRoaW5nIG9uIHN1Y2Nlc3NcbiAgICAgKiAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgKiAgICAgICB9LFxuICAgICAqXG4gICAgICogICAgICAgLy8gb3B0aW9uYWwgbWV0aG9kXG4gICAgICogICAgICAncmVzcG9uc2VFcnJvcic6IGZ1bmN0aW9uKHJlamVjdGlvbikge1xuICAgICAqICAgICAgICAgLy8gZG8gc29tZXRoaW5nIG9uIGVycm9yXG4gICAgICogICAgICAgICBpZiAoY2FuUmVjb3ZlcihyZWplY3Rpb24pKSB7XG4gICAgICogICAgICAgICAgIHJldHVybiByZXNwb25zZU9yTmV3UHJvbWlzZVxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgICAgcmV0dXJuICRxLnJlamVjdChyZWplY3Rpb24pO1xuICAgICAqICAgICAgIH1cbiAgICAgKiAgICAgfTtcbiAgICAgKiAgIH0pO1xuICAgICAqXG4gICAgICogICAkaHR0cFByb3ZpZGVyLmludGVyY2VwdG9ycy5wdXNoKCdteUh0dHBJbnRlcmNlcHRvcicpO1xuICAgICAqXG4gICAgICpcbiAgICAgKiAgIC8vIGFsdGVybmF0aXZlbHksIHJlZ2lzdGVyIHRoZSBpbnRlcmNlcHRvciB2aWEgYW4gYW5vbnltb3VzIGZhY3RvcnlcbiAgICAgKiAgICRodHRwUHJvdmlkZXIuaW50ZXJjZXB0b3JzLnB1c2goZnVuY3Rpb24oJHEsIGRlcGVuZGVuY3kxLCBkZXBlbmRlbmN5Mikge1xuICAgICAqICAgICByZXR1cm4ge1xuICAgICAqICAgICAgJ3JlcXVlc3QnOiBmdW5jdGlvbihjb25maWcpIHtcbiAgICAgKiAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlXG4gICAgICogICAgICAgfSxcbiAgICAgKlxuICAgICAqICAgICAgICdyZXNwb25zZSc6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICogICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZVxuICAgICAqICAgICAgIH1cbiAgICAgKiAgICAgfTtcbiAgICAgKiAgIH0pO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogIyMgU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnNcbiAgICAgKlxuICAgICAqIFdoZW4gZGVzaWduaW5nIHdlYiBhcHBsaWNhdGlvbnMsIGNvbnNpZGVyIHNlY3VyaXR5IHRocmVhdHMgZnJvbTpcbiAgICAgKlxuICAgICAqIC0gW0pTT04gdnVsbmVyYWJpbGl0eV0oaHR0cDovL2hhYWNrZWQuY29tL2FyY2hpdmUvMjAwOC8xMS8yMC9hbmF0b215LW9mLWEtc3VidGxlLWpzb24tdnVsbmVyYWJpbGl0eS5hc3B4KVxuICAgICAqIC0gW1hTUkZdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3Jvc3Mtc2l0ZV9yZXF1ZXN0X2ZvcmdlcnkpXG4gICAgICpcbiAgICAgKiBCb3RoIHNlcnZlciBhbmQgdGhlIGNsaWVudCBtdXN0IGNvb3BlcmF0ZSBpbiBvcmRlciB0byBlbGltaW5hdGUgdGhlc2UgdGhyZWF0cy4gQW5ndWxhciBjb21lc1xuICAgICAqIHByZS1jb25maWd1cmVkIHdpdGggc3RyYXRlZ2llcyB0aGF0IGFkZHJlc3MgdGhlc2UgaXNzdWVzLCBidXQgZm9yIHRoaXMgdG8gd29yayBiYWNrZW5kIHNlcnZlclxuICAgICAqIGNvb3BlcmF0aW9uIGlzIHJlcXVpcmVkLlxuICAgICAqXG4gICAgICogIyMjIEpTT04gVnVsbmVyYWJpbGl0eSBQcm90ZWN0aW9uXG4gICAgICpcbiAgICAgKiBBIFtKU09OIHZ1bG5lcmFiaWxpdHldKGh0dHA6Ly9oYWFja2VkLmNvbS9hcmNoaXZlLzIwMDgvMTEvMjAvYW5hdG9teS1vZi1hLXN1YnRsZS1qc29uLXZ1bG5lcmFiaWxpdHkuYXNweClcbiAgICAgKiBhbGxvd3MgdGhpcmQgcGFydHkgd2Vic2l0ZSB0byB0dXJuIHlvdXIgSlNPTiByZXNvdXJjZSBVUkwgaW50b1xuICAgICAqIFtKU09OUF0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9KU09OUCkgcmVxdWVzdCB1bmRlciBzb21lIGNvbmRpdGlvbnMuIFRvXG4gICAgICogY291bnRlciB0aGlzIHlvdXIgc2VydmVyIGNhbiBwcmVmaXggYWxsIEpTT04gcmVxdWVzdHMgd2l0aCBmb2xsb3dpbmcgc3RyaW5nIGBcIildfScsXFxuXCJgLlxuICAgICAqIEFuZ3VsYXIgd2lsbCBhdXRvbWF0aWNhbGx5IHN0cmlwIHRoZSBwcmVmaXggYmVmb3JlIHByb2Nlc3NpbmcgaXQgYXMgSlNPTi5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlIGlmIHlvdXIgc2VydmVyIG5lZWRzIHRvIHJldHVybjpcbiAgICAgKiBgYGBqc1xuICAgICAqIFsnb25lJywndHdvJ11cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIHdoaWNoIGlzIHZ1bG5lcmFibGUgdG8gYXR0YWNrLCB5b3VyIHNlcnZlciBjYW4gcmV0dXJuOlxuICAgICAqIGBgYGpzXG4gICAgICogKV19JyxcbiAgICAgKiBbJ29uZScsJ3R3byddXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBBbmd1bGFyIHdpbGwgc3RyaXAgdGhlIHByZWZpeCwgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIEpTT04uXG4gICAgICpcbiAgICAgKlxuICAgICAqICMjIyBDcm9zcyBTaXRlIFJlcXVlc3QgRm9yZ2VyeSAoWFNSRikgUHJvdGVjdGlvblxuICAgICAqXG4gICAgICogW1hTUkZdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3Jvc3Mtc2l0ZV9yZXF1ZXN0X2ZvcmdlcnkpIGlzIGEgdGVjaG5pcXVlIGJ5IHdoaWNoXG4gICAgICogYW4gdW5hdXRob3JpemVkIHNpdGUgY2FuIGdhaW4geW91ciB1c2VyJ3MgcHJpdmF0ZSBkYXRhLiBBbmd1bGFyIHByb3ZpZGVzIGEgbWVjaGFuaXNtXG4gICAgICogdG8gY291bnRlciBYU1JGLiBXaGVuIHBlcmZvcm1pbmcgWEhSIHJlcXVlc3RzLCB0aGUgJGh0dHAgc2VydmljZSByZWFkcyBhIHRva2VuIGZyb20gYSBjb29raWVcbiAgICAgKiAoYnkgZGVmYXVsdCwgYFhTUkYtVE9LRU5gKSBhbmQgc2V0cyBpdCBhcyBhbiBIVFRQIGhlYWRlciAoYFgtWFNSRi1UT0tFTmApLiBTaW5jZSBvbmx5XG4gICAgICogSmF2YVNjcmlwdCB0aGF0IHJ1bnMgb24geW91ciBkb21haW4gY291bGQgcmVhZCB0aGUgY29va2llLCB5b3VyIHNlcnZlciBjYW4gYmUgYXNzdXJlZCB0aGF0XG4gICAgICogdGhlIFhIUiBjYW1lIGZyb20gSmF2YVNjcmlwdCBydW5uaW5nIG9uIHlvdXIgZG9tYWluLiBUaGUgaGVhZGVyIHdpbGwgbm90IGJlIHNldCBmb3JcbiAgICAgKiBjcm9zcy1kb21haW4gcmVxdWVzdHMuXG4gICAgICpcbiAgICAgKiBUbyB0YWtlIGFkdmFudGFnZSBvZiB0aGlzLCB5b3VyIHNlcnZlciBuZWVkcyB0byBzZXQgYSB0b2tlbiBpbiBhIEphdmFTY3JpcHQgcmVhZGFibGUgc2Vzc2lvblxuICAgICAqIGNvb2tpZSBjYWxsZWQgYFhTUkYtVE9LRU5gIG9uIHRoZSBmaXJzdCBIVFRQIEdFVCByZXF1ZXN0LiBPbiBzdWJzZXF1ZW50IFhIUiByZXF1ZXN0cyB0aGVcbiAgICAgKiBzZXJ2ZXIgY2FuIHZlcmlmeSB0aGF0IHRoZSBjb29raWUgbWF0Y2hlcyBgWC1YU1JGLVRPS0VOYCBIVFRQIGhlYWRlciwgYW5kIHRoZXJlZm9yZSBiZSBzdXJlXG4gICAgICogdGhhdCBvbmx5IEphdmFTY3JpcHQgcnVubmluZyBvbiB5b3VyIGRvbWFpbiBjb3VsZCBoYXZlIHNlbnQgdGhlIHJlcXVlc3QuIFRoZSB0b2tlbiBtdXN0IGJlXG4gICAgICogdW5pcXVlIGZvciBlYWNoIHVzZXIgYW5kIG11c3QgYmUgdmVyaWZpYWJsZSBieSB0aGUgc2VydmVyICh0byBwcmV2ZW50IHRoZSBKYXZhU2NyaXB0IGZyb21cbiAgICAgKiBtYWtpbmcgdXAgaXRzIG93biB0b2tlbnMpLiBXZSByZWNvbW1lbmQgdGhhdCB0aGUgdG9rZW4gaXMgYSBkaWdlc3Qgb2YgeW91ciBzaXRlJ3NcbiAgICAgKiBhdXRoZW50aWNhdGlvbiBjb29raWUgd2l0aCBhIFtzYWx0XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TYWx0XyhjcnlwdG9ncmFwaHkmIzQxOylcbiAgICAgKiBmb3IgYWRkZWQgc2VjdXJpdHkuXG4gICAgICpcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgaGVhZGVycyBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSB4c3JmSGVhZGVyTmFtZSBhbmQgeHNyZkNvb2tpZU5hbWVcbiAgICAgKiBwcm9wZXJ0aWVzIG9mIGVpdGhlciAkaHR0cFByb3ZpZGVyLmRlZmF1bHRzIGF0IGNvbmZpZy10aW1lLCAkaHR0cC5kZWZhdWx0cyBhdCBydW4tdGltZSxcbiAgICAgKiBvciB0aGUgcGVyLXJlcXVlc3QgY29uZmlnIG9iamVjdC5cbiAgICAgKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBPYmplY3QgZGVzY3JpYmluZyB0aGUgcmVxdWVzdCB0byBiZSBtYWRlIGFuZCBob3cgaXQgc2hvdWxkIGJlXG4gICAgICogICAgcHJvY2Vzc2VkLiBUaGUgb2JqZWN0IGhhcyBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICAgKlxuICAgICAqICAgIC0gKiptZXRob2QqKiDigJMgYHtzdHJpbmd9YCDigJMgSFRUUCBtZXRob2QgKGUuZy4gJ0dFVCcsICdQT1NUJywgZXRjKVxuICAgICAqICAgIC0gKip1cmwqKiDigJMgYHtzdHJpbmd9YCDigJMgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIG9mIHRoZSByZXNvdXJjZSB0aGF0IGlzIGJlaW5nIHJlcXVlc3RlZC5cbiAgICAgKiAgICAtICoqcGFyYW1zKiog4oCTIGB7T2JqZWN0LjxzdHJpbmd8T2JqZWN0Pn1gIOKAkyBNYXAgb2Ygc3RyaW5ncyBvciBvYmplY3RzIHdoaWNoIHdpbGwgYmUgdHVybmVkXG4gICAgICogICAgICB0byBgP2tleTE9dmFsdWUxJmtleTI9dmFsdWUyYCBhZnRlciB0aGUgdXJsLiBJZiB0aGUgdmFsdWUgaXMgbm90IGEgc3RyaW5nLCBpdCB3aWxsIGJlXG4gICAgICogICAgICBKU09OaWZpZWQuXG4gICAgICogICAgLSAqKmRhdGEqKiDigJMgYHtzdHJpbmd8T2JqZWN0fWAg4oCTIERhdGEgdG8gYmUgc2VudCBhcyB0aGUgcmVxdWVzdCBtZXNzYWdlIGRhdGEuXG4gICAgICogICAgLSAqKmhlYWRlcnMqKiDigJMgYHtPYmplY3R9YCDigJMgTWFwIG9mIHN0cmluZ3Mgb3IgZnVuY3Rpb25zIHdoaWNoIHJldHVybiBzdHJpbmdzIHJlcHJlc2VudGluZ1xuICAgICAqICAgICAgSFRUUCBoZWFkZXJzIHRvIHNlbmQgdG8gdGhlIHNlcnZlci4gSWYgdGhlIHJldHVybiB2YWx1ZSBvZiBhIGZ1bmN0aW9uIGlzIG51bGwsIHRoZVxuICAgICAqICAgICAgaGVhZGVyIHdpbGwgbm90IGJlIHNlbnQuXG4gICAgICogICAgLSAqKnhzcmZIZWFkZXJOYW1lKiog4oCTIGB7c3RyaW5nfWAg4oCTIE5hbWUgb2YgSFRUUCBoZWFkZXIgdG8gcG9wdWxhdGUgd2l0aCB0aGUgWFNSRiB0b2tlbi5cbiAgICAgKiAgICAtICoqeHNyZkNvb2tpZU5hbWUqKiDigJMgYHtzdHJpbmd9YCDigJMgTmFtZSBvZiBjb29raWUgY29udGFpbmluZyB0aGUgWFNSRiB0b2tlbi5cbiAgICAgKiAgICAtICoqdHJhbnNmb3JtUmVxdWVzdCoqIOKAk1xuICAgICAqICAgICAgYHtmdW5jdGlvbihkYXRhLCBoZWFkZXJzR2V0dGVyKXxBcnJheS48ZnVuY3Rpb24oZGF0YSwgaGVhZGVyc0dldHRlcik+fWAg4oCTXG4gICAgICogICAgICB0cmFuc2Zvcm0gZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3VjaCBmdW5jdGlvbnMuIFRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gdGFrZXMgdGhlIGh0dHBcbiAgICAgKiAgICAgIHJlcXVlc3QgYm9keSBhbmQgaGVhZGVycyBhbmQgcmV0dXJucyBpdHMgdHJhbnNmb3JtZWQgKHR5cGljYWxseSBzZXJpYWxpemVkKSB2ZXJzaW9uLlxuICAgICAqICAgICAgU2VlIHtAbGluayAjb3ZlcnJpZGluZy10aGUtZGVmYXVsdC10cmFuc2Zvcm1hdGlvbnMtcGVyLXJlcXVlc3QgT3ZlcnJpZGluZyB0aGUgRGVmYXVsdCBUcmFuc2Zvcm1hdGlvbnN9XG4gICAgICogICAgLSAqKnRyYW5zZm9ybVJlc3BvbnNlKiog4oCTXG4gICAgICogICAgICBge2Z1bmN0aW9uKGRhdGEsIGhlYWRlcnNHZXR0ZXIpfEFycmF5LjxmdW5jdGlvbihkYXRhLCBoZWFkZXJzR2V0dGVyKT59YCDigJNcbiAgICAgKiAgICAgIHRyYW5zZm9ybSBmdW5jdGlvbiBvciBhbiBhcnJheSBvZiBzdWNoIGZ1bmN0aW9ucy4gVGhlIHRyYW5zZm9ybSBmdW5jdGlvbiB0YWtlcyB0aGUgaHR0cFxuICAgICAqICAgICAgcmVzcG9uc2UgYm9keSBhbmQgaGVhZGVycyBhbmQgcmV0dXJucyBpdHMgdHJhbnNmb3JtZWQgKHR5cGljYWxseSBkZXNlcmlhbGl6ZWQpIHZlcnNpb24uXG4gICAgICogICAgICBTZWUge0BsaW5rICNvdmVycmlkaW5nLXRoZS1kZWZhdWx0LXRyYW5zZm9ybWF0aW9ucy1wZXItcmVxdWVzdCBPdmVycmlkaW5nIHRoZSBEZWZhdWx0IFRyYW5zZm9ybWF0aW9uc31cbiAgICAgKiAgICAtICoqY2FjaGUqKiDigJMgYHtib29sZWFufENhY2hlfWAg4oCTIElmIHRydWUsIGEgZGVmYXVsdCAkaHR0cCBjYWNoZSB3aWxsIGJlIHVzZWQgdG8gY2FjaGUgdGhlXG4gICAgICogICAgICBHRVQgcmVxdWVzdCwgb3RoZXJ3aXNlIGlmIGEgY2FjaGUgaW5zdGFuY2UgYnVpbHQgd2l0aFxuICAgICAqICAgICAge0BsaW5rIG5nLiRjYWNoZUZhY3RvcnkgJGNhY2hlRmFjdG9yeX0sIHRoaXMgY2FjaGUgd2lsbCBiZSB1c2VkIGZvclxuICAgICAqICAgICAgY2FjaGluZy5cbiAgICAgKiAgICAtICoqdGltZW91dCoqIOKAkyBge251bWJlcnxQcm9taXNlfWAg4oCTIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciB7QGxpbmsgbmcuJHEgcHJvbWlzZX1cbiAgICAgKiAgICAgIHRoYXQgc2hvdWxkIGFib3J0IHRoZSByZXF1ZXN0IHdoZW4gcmVzb2x2ZWQuXG4gICAgICogICAgLSAqKndpdGhDcmVkZW50aWFscyoqIC0gYHtib29sZWFufWAgLSB3aGV0aGVyIHRvIHNldCB0aGUgYHdpdGhDcmVkZW50aWFsc2AgZmxhZyBvbiB0aGVcbiAgICAgKiAgICAgIFhIUiBvYmplY3QuIFNlZSBbcmVxdWVzdHMgd2l0aCBjcmVkZW50aWFsc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRUUC9BY2Nlc3NfY29udHJvbF9DT1JTI1JlcXVlc3RzX3dpdGhfY3JlZGVudGlhbHMpXG4gICAgICogICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKiAgICAtICoqcmVzcG9uc2VUeXBlKiogLSBge3N0cmluZ31gIC0gc2VlXG4gICAgICogICAgICBbcmVxdWVzdFR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL1hNTEh0dHBSZXF1ZXN0I3Jlc3BvbnNlVHlwZSkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7SHR0cFByb21pc2V9IFJldHVybnMgYSB7QGxpbmsgbmcuJHEgcHJvbWlzZX0gb2JqZWN0IHdpdGggdGhlXG4gICAgICogICBzdGFuZGFyZCBgdGhlbmAgbWV0aG9kIGFuZCB0d28gaHR0cCBzcGVjaWZpYyBtZXRob2RzOiBgc3VjY2Vzc2AgYW5kIGBlcnJvcmAuIFRoZSBgdGhlbmBcbiAgICAgKiAgIG1ldGhvZCB0YWtlcyB0d28gYXJndW1lbnRzIGEgc3VjY2VzcyBhbmQgYW4gZXJyb3IgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2l0aCBhXG4gICAgICogICByZXNwb25zZSBvYmplY3QuIFRoZSBgc3VjY2Vzc2AgYW5kIGBlcnJvcmAgbWV0aG9kcyB0YWtlIGEgc2luZ2xlIGFyZ3VtZW50IC0gYSBmdW5jdGlvbiB0aGF0XG4gICAgICogICB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IHN1Y2NlZWRzIG9yIGZhaWxzIHJlc3BlY3RpdmVseS4gVGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50b1xuICAgICAqICAgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZXN0cnVjdHVyZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlc3BvbnNlIG9iamVjdCBwYXNzZWQgaW50byB0aGVcbiAgICAgKiAgIGB0aGVuYCBtZXRob2QuIFRoZSByZXNwb25zZSBvYmplY3QgaGFzIHRoZXNlIHByb3BlcnRpZXM6XG4gICAgICpcbiAgICAgKiAgIC0gKipkYXRhKiog4oCTIGB7c3RyaW5nfE9iamVjdH1gIOKAkyBUaGUgcmVzcG9uc2UgYm9keSB0cmFuc2Zvcm1lZCB3aXRoIHRoZSB0cmFuc2Zvcm1cbiAgICAgKiAgICAgZnVuY3Rpb25zLlxuICAgICAqICAgLSAqKnN0YXR1cyoqIOKAkyBge251bWJlcn1gIOKAkyBIVFRQIHN0YXR1cyBjb2RlIG9mIHRoZSByZXNwb25zZS5cbiAgICAgKiAgIC0gKipoZWFkZXJzKiog4oCTIGB7ZnVuY3Rpb24oW2hlYWRlck5hbWVdKX1gIOKAkyBIZWFkZXIgZ2V0dGVyIGZ1bmN0aW9uLlxuICAgICAqICAgLSAqKmNvbmZpZyoqIOKAkyBge09iamVjdH1gIOKAkyBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdGhhdCB3YXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcmVxdWVzdC5cbiAgICAgKiAgIC0gKipzdGF0dXNUZXh0Kiog4oCTIGB7c3RyaW5nfWAg4oCTIEhUVFAgc3RhdHVzIHRleHQgb2YgdGhlIHJlc3BvbnNlLlxuICAgICAqXG4gICAgICogQHByb3BlcnR5IHtBcnJheS48T2JqZWN0Pn0gcGVuZGluZ1JlcXVlc3RzIEFycmF5IG9mIGNvbmZpZyBvYmplY3RzIGZvciBjdXJyZW50bHkgcGVuZGluZ1xuICAgICAqICAgcmVxdWVzdHMuIFRoaXMgaXMgcHJpbWFyaWx5IG1lYW50IHRvIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiAgICAgKlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbjxleGFtcGxlIG1vZHVsZT1cImh0dHBFeGFtcGxlXCI+XG48ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJGZXRjaENvbnRyb2xsZXJcIj5cbiAgICA8c2VsZWN0IG5nLW1vZGVsPVwibWV0aG9kXCI+XG4gICAgICA8b3B0aW9uPkdFVDwvb3B0aW9uPlxuICAgICAgPG9wdGlvbj5KU09OUDwvb3B0aW9uPlxuICAgIDwvc2VsZWN0PlxuICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5nLW1vZGVsPVwidXJsXCIgc2l6ZT1cIjgwXCIvPlxuICAgIDxidXR0b24gaWQ9XCJmZXRjaGJ0blwiIG5nLWNsaWNrPVwiZmV0Y2goKVwiPmZldGNoPC9idXR0b24+PGJyPlxuICAgIDxidXR0b24gaWQ9XCJzYW1wbGVnZXRidG5cIiBuZy1jbGljaz1cInVwZGF0ZU1vZGVsKCdHRVQnLCAnaHR0cC1oZWxsby5odG1sJylcIj5TYW1wbGUgR0VUPC9idXR0b24+XG4gICAgPGJ1dHRvbiBpZD1cInNhbXBsZWpzb25wYnRuXCJcbiAgICAgIG5nLWNsaWNrPVwidXBkYXRlTW9kZWwoJ0pTT05QJyxcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vYW5ndWxhcmpzLm9yZy9ncmVldC5waHA/Y2FsbGJhY2s9SlNPTl9DQUxMQkFDSyZuYW1lPVN1cGVyJTIwSGVybycpXCI+XG4gICAgICBTYW1wbGUgSlNPTlBcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGlkPVwiaW52YWxpZGpzb25wYnRuXCJcbiAgICAgIG5nLWNsaWNrPVwidXBkYXRlTW9kZWwoJ0pTT05QJywgJ2h0dHBzOi8vYW5ndWxhcmpzLm9yZy9kb2VzbnRleGlzdCZjYWxsYmFjaz1KU09OX0NBTExCQUNLJylcIj5cbiAgICAgICAgSW52YWxpZCBKU09OUFxuICAgICAgPC9idXR0b24+XG4gICAgPHByZT5odHRwIHN0YXR1cyBjb2RlOiB7e3N0YXR1c319PC9wcmU+XG4gICAgPHByZT5odHRwIHJlc3BvbnNlIGRhdGE6IHt7ZGF0YX19PC9wcmU+XG4gIDwvZGl2PlxuPC9maWxlPlxuPGZpbGUgbmFtZT1cInNjcmlwdC5qc1wiPlxuICBhbmd1bGFyLm1vZHVsZSgnaHR0cEV4YW1wbGUnLCBbXSlcbiAgICAuY29udHJvbGxlcignRmV0Y2hDb250cm9sbGVyJywgWyckc2NvcGUnLCAnJGh0dHAnLCAnJHRlbXBsYXRlQ2FjaGUnLFxuICAgICAgZnVuY3Rpb24oJHNjb3BlLCAkaHR0cCwgJHRlbXBsYXRlQ2FjaGUpIHtcbiAgICAgICAgJHNjb3BlLm1ldGhvZCA9ICdHRVQnO1xuICAgICAgICAkc2NvcGUudXJsID0gJ2h0dHAtaGVsbG8uaHRtbCc7XG5cbiAgICAgICAgJHNjb3BlLmZldGNoID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJHNjb3BlLmNvZGUgPSBudWxsO1xuICAgICAgICAgICRzY29wZS5yZXNwb25zZSA9IG51bGw7XG5cbiAgICAgICAgICAkaHR0cCh7bWV0aG9kOiAkc2NvcGUubWV0aG9kLCB1cmw6ICRzY29wZS51cmwsIGNhY2hlOiAkdGVtcGxhdGVDYWNoZX0pLlxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbihkYXRhLCBzdGF0dXMpIHtcbiAgICAgICAgICAgICAgJHNjb3BlLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgICAgICAgJHNjb3BlLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgfSkuXG4gICAgICAgICAgICBlcnJvcihmdW5jdGlvbihkYXRhLCBzdGF0dXMpIHtcbiAgICAgICAgICAgICAgJHNjb3BlLmRhdGEgPSBkYXRhIHx8IFwiUmVxdWVzdCBmYWlsZWRcIjtcbiAgICAgICAgICAgICAgJHNjb3BlLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICAkc2NvcGUudXBkYXRlTW9kZWwgPSBmdW5jdGlvbihtZXRob2QsIHVybCkge1xuICAgICAgICAgICRzY29wZS5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgICAgJHNjb3BlLnVybCA9IHVybDtcbiAgICAgICAgfTtcbiAgICAgIH1dKTtcbjwvZmlsZT5cbjxmaWxlIG5hbWU9XCJodHRwLWhlbGxvLmh0bWxcIj5cbiAgSGVsbG8sICRodHRwIVxuPC9maWxlPlxuPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICB2YXIgc3RhdHVzID0gZWxlbWVudChieS5iaW5kaW5nKCdzdGF0dXMnKSk7XG4gIHZhciBkYXRhID0gZWxlbWVudChieS5iaW5kaW5nKCdkYXRhJykpO1xuICB2YXIgZmV0Y2hCdG4gPSBlbGVtZW50KGJ5LmlkKCdmZXRjaGJ0bicpKTtcbiAgdmFyIHNhbXBsZUdldEJ0biA9IGVsZW1lbnQoYnkuaWQoJ3NhbXBsZWdldGJ0bicpKTtcbiAgdmFyIHNhbXBsZUpzb25wQnRuID0gZWxlbWVudChieS5pZCgnc2FtcGxlanNvbnBidG4nKSk7XG4gIHZhciBpbnZhbGlkSnNvbnBCdG4gPSBlbGVtZW50KGJ5LmlkKCdpbnZhbGlkanNvbnBidG4nKSk7XG5cbiAgaXQoJ3Nob3VsZCBtYWtlIGFuIHhociBHRVQgcmVxdWVzdCcsIGZ1bmN0aW9uKCkge1xuICAgIHNhbXBsZUdldEJ0bi5jbGljaygpO1xuICAgIGZldGNoQnRuLmNsaWNrKCk7XG4gICAgZXhwZWN0KHN0YXR1cy5nZXRUZXh0KCkpLnRvTWF0Y2goJzIwMCcpO1xuICAgIGV4cGVjdChkYXRhLmdldFRleHQoKSkudG9NYXRjaCgvSGVsbG8sIFxcJGh0dHAhLyk7XG4gIH0pO1xuXG4vLyBDb21tZW50ZWQgb3V0IGR1ZSB0byBmbGFrZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL2lzc3Vlcy85MTg1XG4vLyBpdCgnc2hvdWxkIG1ha2UgYSBKU09OUCByZXF1ZXN0IHRvIGFuZ3VsYXJqcy5vcmcnLCBmdW5jdGlvbigpIHtcbi8vICAgc2FtcGxlSnNvbnBCdG4uY2xpY2soKTtcbi8vICAgZmV0Y2hCdG4uY2xpY2soKTtcbi8vICAgZXhwZWN0KHN0YXR1cy5nZXRUZXh0KCkpLnRvTWF0Y2goJzIwMCcpO1xuLy8gICBleHBlY3QoZGF0YS5nZXRUZXh0KCkpLnRvTWF0Y2goL1N1cGVyIEhlcm8hLyk7XG4vLyB9KTtcblxuICBpdCgnc2hvdWxkIG1ha2UgSlNPTlAgcmVxdWVzdCB0byBpbnZhbGlkIFVSTCBhbmQgaW52b2tlIHRoZSBlcnJvciBoYW5kbGVyJyxcbiAgICAgIGZ1bmN0aW9uKCkge1xuICAgIGludmFsaWRKc29ucEJ0bi5jbGljaygpO1xuICAgIGZldGNoQnRuLmNsaWNrKCk7XG4gICAgZXhwZWN0KHN0YXR1cy5nZXRUZXh0KCkpLnRvTWF0Y2goJzAnKTtcbiAgICBleHBlY3QoZGF0YS5nZXRUZXh0KCkpLnRvTWF0Y2goJ1JlcXVlc3QgZmFpbGVkJyk7XG4gIH0pO1xuPC9maWxlPlxuPC9leGFtcGxlPlxuICAgICAqL1xuICAgIGZ1bmN0aW9uICRodHRwKHJlcXVlc3RDb25maWcpIHtcbiAgICAgIHZhciBjb25maWcgPSB7XG4gICAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRzLnRyYW5zZm9ybVJlcXVlc3QsXG4gICAgICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0cy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgfTtcbiAgICAgIHZhciBoZWFkZXJzID0gbWVyZ2VIZWFkZXJzKHJlcXVlc3RDb25maWcpO1xuXG4gICAgICBleHRlbmQoY29uZmlnLCByZXF1ZXN0Q29uZmlnKTtcbiAgICAgIGNvbmZpZy5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgIGNvbmZpZy5tZXRob2QgPSB1cHBlcmNhc2UoY29uZmlnLm1ldGhvZCk7XG5cbiAgICAgIHZhciBzZXJ2ZXJSZXF1ZXN0ID0gZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgICAgIGhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcbiAgICAgICAgdmFyIHJlcURhdGEgPSB0cmFuc2Zvcm1EYXRhKGNvbmZpZy5kYXRhLCBoZWFkZXJzR2V0dGVyKGhlYWRlcnMpLCBjb25maWcudHJhbnNmb3JtUmVxdWVzdCk7XG5cbiAgICAgICAgLy8gc3RyaXAgY29udGVudC10eXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChyZXFEYXRhKSkge1xuICAgICAgICAgIGZvckVhY2goaGVhZGVycywgZnVuY3Rpb24odmFsdWUsIGhlYWRlcikge1xuICAgICAgICAgICAgaWYgKGxvd2VyY2FzZShoZWFkZXIpID09PSAnY29udGVudC10eXBlJykge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNVbmRlZmluZWQoY29uZmlnLndpdGhDcmVkZW50aWFscykgJiYgIWlzVW5kZWZpbmVkKGRlZmF1bHRzLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgICAgICBjb25maWcud2l0aENyZWRlbnRpYWxzID0gZGVmYXVsdHMud2l0aENyZWRlbnRpYWxzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2VuZCByZXF1ZXN0XG4gICAgICAgIHJldHVybiBzZW5kUmVxKGNvbmZpZywgcmVxRGF0YSwgaGVhZGVycykudGhlbih0cmFuc2Zvcm1SZXNwb25zZSwgdHJhbnNmb3JtUmVzcG9uc2UpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGNoYWluID0gW3NlcnZlclJlcXVlc3QsIHVuZGVmaW5lZF07XG4gICAgICB2YXIgcHJvbWlzZSA9ICRxLndoZW4oY29uZmlnKTtcblxuICAgICAgLy8gYXBwbHkgaW50ZXJjZXB0b3JzXG4gICAgICBmb3JFYWNoKHJldmVyc2VkSW50ZXJjZXB0b3JzLCBmdW5jdGlvbihpbnRlcmNlcHRvcikge1xuICAgICAgICBpZiAoaW50ZXJjZXB0b3IucmVxdWVzdCB8fCBpbnRlcmNlcHRvci5yZXF1ZXN0RXJyb3IpIHtcbiAgICAgICAgICBjaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLnJlcXVlc3QsIGludGVyY2VwdG9yLnJlcXVlc3RFcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGludGVyY2VwdG9yLnJlc3BvbnNlIHx8IGludGVyY2VwdG9yLnJlc3BvbnNlRXJyb3IpIHtcbiAgICAgICAgICBjaGFpbi5wdXNoKGludGVyY2VwdG9yLnJlc3BvbnNlLCBpbnRlcmNlcHRvci5yZXNwb25zZUVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHdoaWxlIChjaGFpbi5sZW5ndGgpIHtcbiAgICAgICAgdmFyIHRoZW5GbiA9IGNoYWluLnNoaWZ0KCk7XG4gICAgICAgIHZhciByZWplY3RGbiA9IGNoYWluLnNoaWZ0KCk7XG5cbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbih0aGVuRm4sIHJlamVjdEZuKTtcbiAgICAgIH1cblxuICAgICAgcHJvbWlzZS5zdWNjZXNzID0gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgZm4ocmVzcG9uc2UuZGF0YSwgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLCBjb25maWcpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICB9O1xuXG4gICAgICBwcm9taXNlLmVycm9yID0gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgcHJvbWlzZS50aGVuKG51bGwsIGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgZm4ocmVzcG9uc2UuZGF0YSwgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLCBjb25maWcpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcblxuICAgICAgZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICAgICAgLy8gbWFrZSBhIGNvcHkgc2luY2UgdGhlIHJlc3BvbnNlIG11c3QgYmUgY2FjaGVhYmxlXG4gICAgICAgIHZhciByZXNwID0gZXh0ZW5kKHt9LCByZXNwb25zZSk7XG4gICAgICAgIGlmICghcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIHJlc3AuZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzcC5kYXRhID0gdHJhbnNmb3JtRGF0YShyZXNwb25zZS5kYXRhLCByZXNwb25zZS5oZWFkZXJzLCBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoaXNTdWNjZXNzKHJlc3BvbnNlLnN0YXR1cykpXG4gICAgICAgICAgPyByZXNwXG4gICAgICAgICAgOiAkcS5yZWplY3QocmVzcCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIG1lcmdlSGVhZGVycyhjb25maWcpIHtcbiAgICAgICAgdmFyIGRlZkhlYWRlcnMgPSBkZWZhdWx0cy5oZWFkZXJzLFxuICAgICAgICAgICAgcmVxSGVhZGVycyA9IGV4dGVuZCh7fSwgY29uZmlnLmhlYWRlcnMpLFxuICAgICAgICAgICAgZGVmSGVhZGVyTmFtZSwgbG93ZXJjYXNlRGVmSGVhZGVyTmFtZSwgcmVxSGVhZGVyTmFtZTtcblxuICAgICAgICBkZWZIZWFkZXJzID0gZXh0ZW5kKHt9LCBkZWZIZWFkZXJzLmNvbW1vbiwgZGVmSGVhZGVyc1tsb3dlcmNhc2UoY29uZmlnLm1ldGhvZCldKTtcblxuICAgICAgICAvLyB1c2luZyBmb3ItaW4gaW5zdGVhZCBvZiBmb3JFYWNoIHRvIGF2b2lkIHVuZWNlc3NhcnkgaXRlcmF0aW9uIGFmdGVyIGhlYWRlciBoYXMgYmVlbiBmb3VuZFxuICAgICAgICBkZWZhdWx0SGVhZGVyc0l0ZXJhdGlvbjpcbiAgICAgICAgZm9yIChkZWZIZWFkZXJOYW1lIGluIGRlZkhlYWRlcnMpIHtcbiAgICAgICAgICBsb3dlcmNhc2VEZWZIZWFkZXJOYW1lID0gbG93ZXJjYXNlKGRlZkhlYWRlck5hbWUpO1xuXG4gICAgICAgICAgZm9yIChyZXFIZWFkZXJOYW1lIGluIHJlcUhlYWRlcnMpIHtcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UocmVxSGVhZGVyTmFtZSkgPT09IGxvd2VyY2FzZURlZkhlYWRlck5hbWUpIHtcbiAgICAgICAgICAgICAgY29udGludWUgZGVmYXVsdEhlYWRlcnNJdGVyYXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVxSGVhZGVyc1tkZWZIZWFkZXJOYW1lXSA9IGRlZkhlYWRlcnNbZGVmSGVhZGVyTmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBleGVjdXRlIGlmIGhlYWRlciB2YWx1ZSBpcyBhIGZ1bmN0aW9uIGZvciBtZXJnZWQgaGVhZGVyc1xuICAgICAgICBleGVjSGVhZGVycyhyZXFIZWFkZXJzKTtcbiAgICAgICAgcmV0dXJuIHJlcUhlYWRlcnM7XG5cbiAgICAgICAgZnVuY3Rpb24gZXhlY0hlYWRlcnMoaGVhZGVycykge1xuICAgICAgICAgIHZhciBoZWFkZXJDb250ZW50O1xuXG4gICAgICAgICAgZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbihoZWFkZXJGbiwgaGVhZGVyKSB7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihoZWFkZXJGbikpIHtcbiAgICAgICAgICAgICAgaGVhZGVyQ29udGVudCA9IGhlYWRlckZuKCk7XG4gICAgICAgICAgICAgIGlmIChoZWFkZXJDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzW2hlYWRlcl0gPSBoZWFkZXJDb250ZW50O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICRodHRwLnBlbmRpbmdSZXF1ZXN0cyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAqIEBuYW1lICRodHRwI2dldFxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogU2hvcnRjdXQgbWV0aG9kIHRvIHBlcmZvcm0gYEdFVGAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgUmVsYXRpdmUgb3IgYWJzb2x1dGUgVVJMIHNwZWNpZnlpbmcgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSByZXF1ZXN0XG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICAgKiBAcmV0dXJucyB7SHR0cFByb21pc2V9IEZ1dHVyZSBvYmplY3RcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgKiBAbmFtZSAkaHR0cCNkZWxldGVcbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFNob3J0Y3V0IG1ldGhvZCB0byBwZXJmb3JtIGBERUxFVEVgIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFJlbGF0aXZlIG9yIGFic29sdXRlIFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVxdWVzdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAgICogQHJldHVybnMge0h0dHBQcm9taXNlfSBGdXR1cmUgb2JqZWN0XG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICogQG5hbWUgJGh0dHAjaGVhZFxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogU2hvcnRjdXQgbWV0aG9kIHRvIHBlcmZvcm0gYEhFQURgIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFJlbGF0aXZlIG9yIGFic29sdXRlIFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVxdWVzdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAgICogQHJldHVybnMge0h0dHBQcm9taXNlfSBGdXR1cmUgb2JqZWN0XG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICogQG5hbWUgJGh0dHAjanNvbnBcbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFNob3J0Y3V0IG1ldGhvZCB0byBwZXJmb3JtIGBKU09OUGAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgUmVsYXRpdmUgb3IgYWJzb2x1dGUgVVJMIHNwZWNpZnlpbmcgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSByZXF1ZXN0LlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGNhbGxiYWNrIHNob3VsZCBiZSB0aGUgc3RyaW5nIGBKU09OX0NBTExCQUNLYC5cbiAgICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgICAqIEByZXR1cm5zIHtIdHRwUHJvbWlzZX0gRnV0dXJlIG9iamVjdFxuICAgICAqL1xuICAgIGNyZWF0ZVNob3J0TWV0aG9kcygnZ2V0JywgJ2RlbGV0ZScsICdoZWFkJywgJ2pzb25wJyk7XG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICogQG5hbWUgJGh0dHAjcG9zdFxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogU2hvcnRjdXQgbWV0aG9kIHRvIHBlcmZvcm0gYFBPU1RgIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFJlbGF0aXZlIG9yIGFic29sdXRlIFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVxdWVzdFxuICAgICAqIEBwYXJhbSB7Kn0gZGF0YSBSZXF1ZXN0IGNvbnRlbnRcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgICAqIEByZXR1cm5zIHtIdHRwUHJvbWlzZX0gRnV0dXJlIG9iamVjdFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAqIEBuYW1lICRodHRwI3B1dFxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogU2hvcnRjdXQgbWV0aG9kIHRvIHBlcmZvcm0gYFBVVGAgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgUmVsYXRpdmUgb3IgYWJzb2x1dGUgVVJMIHNwZWNpZnlpbmcgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSByZXF1ZXN0XG4gICAgICogQHBhcmFtIHsqfSBkYXRhIFJlcXVlc3QgY29udGVudFxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAgICogQHJldHVybnMge0h0dHBQcm9taXNlfSBGdXR1cmUgb2JqZWN0XG4gICAgICovXG5cbiAgICAgLyoqXG4gICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICogQG5hbWUgJGh0dHAjcGF0Y2hcbiAgICAgICpcbiAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAqIFNob3J0Y3V0IG1ldGhvZCB0byBwZXJmb3JtIGBQQVRDSGAgcmVxdWVzdC5cbiAgICAgICpcbiAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBSZWxhdGl2ZSBvciBhYnNvbHV0ZSBVUkwgc3BlY2lmeWluZyB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHJlcXVlc3RcbiAgICAgICogQHBhcmFtIHsqfSBkYXRhIFJlcXVlc3QgY29udGVudFxuICAgICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgICAgKiBAcmV0dXJucyB7SHR0cFByb21pc2V9IEZ1dHVyZSBvYmplY3RcbiAgICAgICovXG4gICAgY3JlYXRlU2hvcnRNZXRob2RzV2l0aERhdGEoJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJyk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBuZ2RvYyBwcm9wZXJ0eVxuICAgICAgICAgKiBAbmFtZSAkaHR0cCNkZWZhdWx0c1xuICAgICAgICAgKlxuICAgICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAgICogUnVudGltZSBlcXVpdmFsZW50IG9mIHRoZSBgJGh0dHBQcm92aWRlci5kZWZhdWx0c2AgcHJvcGVydHkuIEFsbG93cyBjb25maWd1cmF0aW9uIG9mXG4gICAgICAgICAqIGRlZmF1bHQgaGVhZGVycywgd2l0aENyZWRlbnRpYWxzIGFzIHdlbGwgYXMgcmVxdWVzdCBhbmQgcmVzcG9uc2UgdHJhbnNmb3JtYXRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBTZWUgXCJTZXR0aW5nIEhUVFAgSGVhZGVyc1wiIGFuZCBcIlRyYW5zZm9ybWluZyBSZXF1ZXN0cyBhbmQgUmVzcG9uc2VzXCIgc2VjdGlvbnMgYWJvdmUuXG4gICAgICAgICAqL1xuICAgICRodHRwLmRlZmF1bHRzID0gZGVmYXVsdHM7XG5cblxuICAgIHJldHVybiAkaHR0cDtcblxuXG4gICAgZnVuY3Rpb24gY3JlYXRlU2hvcnRNZXRob2RzKG5hbWVzKSB7XG4gICAgICBmb3JFYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAkaHR0cFtuYW1lXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgICAgICAgcmV0dXJuICRodHRwKGV4dGVuZChjb25maWcgfHwge30sIHtcbiAgICAgICAgICAgIG1ldGhvZDogbmFtZSxcbiAgICAgICAgICAgIHVybDogdXJsXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBjcmVhdGVTaG9ydE1ldGhvZHNXaXRoRGF0YShuYW1lKSB7XG4gICAgICBmb3JFYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAkaHR0cFtuYW1lXSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICAgICAgcmV0dXJuICRodHRwKGV4dGVuZChjb25maWcgfHwge30sIHtcbiAgICAgICAgICAgIG1ldGhvZDogbmFtZSxcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogTWFrZXMgdGhlIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiAhISEgQUNDRVNTRVMgQ0xPU1VSRSBWQVJTOlxuICAgICAqICRodHRwQmFja2VuZCwgZGVmYXVsdHMsICRsb2csICRyb290U2NvcGUsIGRlZmF1bHRDYWNoZSwgJGh0dHAucGVuZGluZ1JlcXVlc3RzXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2VuZFJlcShjb25maWcsIHJlcURhdGEsIHJlcUhlYWRlcnMpIHtcbiAgICAgIHZhciBkZWZlcnJlZCA9ICRxLmRlZmVyKCksXG4gICAgICAgICAgcHJvbWlzZSA9IGRlZmVycmVkLnByb21pc2UsXG4gICAgICAgICAgY2FjaGUsXG4gICAgICAgICAgY2FjaGVkUmVzcCxcbiAgICAgICAgICB1cmwgPSBidWlsZFVybChjb25maWcudXJsLCBjb25maWcucGFyYW1zKTtcblxuICAgICAgJGh0dHAucGVuZGluZ1JlcXVlc3RzLnB1c2goY29uZmlnKTtcbiAgICAgIHByb21pc2UudGhlbihyZW1vdmVQZW5kaW5nUmVxLCByZW1vdmVQZW5kaW5nUmVxKTtcblxuXG4gICAgICBpZiAoKGNvbmZpZy5jYWNoZSB8fCBkZWZhdWx0cy5jYWNoZSkgJiYgY29uZmlnLmNhY2hlICE9PSBmYWxzZSAmJlxuICAgICAgICAgIChjb25maWcubWV0aG9kID09PSAnR0VUJyB8fCBjb25maWcubWV0aG9kID09PSAnSlNPTlAnKSkge1xuICAgICAgICBjYWNoZSA9IGlzT2JqZWN0KGNvbmZpZy5jYWNoZSkgPyBjb25maWcuY2FjaGVcbiAgICAgICAgICAgICAgOiBpc09iamVjdChkZWZhdWx0cy5jYWNoZSkgPyBkZWZhdWx0cy5jYWNoZVxuICAgICAgICAgICAgICA6IGRlZmF1bHRDYWNoZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNhY2hlKSB7XG4gICAgICAgIGNhY2hlZFJlc3AgPSBjYWNoZS5nZXQodXJsKTtcbiAgICAgICAgaWYgKGlzRGVmaW5lZChjYWNoZWRSZXNwKSkge1xuICAgICAgICAgIGlmIChpc1Byb21pc2VMaWtlKGNhY2hlZFJlc3ApKSB7XG4gICAgICAgICAgICAvLyBjYWNoZWQgcmVxdWVzdCBoYXMgYWxyZWFkeSBiZWVuIHNlbnQsIGJ1dCB0aGVyZSBpcyBubyByZXNwb25zZSB5ZXRcbiAgICAgICAgICAgIGNhY2hlZFJlc3AudGhlbihyZW1vdmVQZW5kaW5nUmVxLCByZW1vdmVQZW5kaW5nUmVxKTtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRSZXNwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzZXJ2aW5nIGZyb20gY2FjaGVcbiAgICAgICAgICAgIGlmIChpc0FycmF5KGNhY2hlZFJlc3ApKSB7XG4gICAgICAgICAgICAgIHJlc29sdmVQcm9taXNlKGNhY2hlZFJlc3BbMV0sIGNhY2hlZFJlc3BbMF0sIHNoYWxsb3dDb3B5KGNhY2hlZFJlc3BbMl0pLCBjYWNoZWRSZXNwWzNdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmVQcm9taXNlKGNhY2hlZFJlc3AsIDIwMCwge30sICdPSycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBwdXQgdGhlIHByb21pc2UgZm9yIHRoZSBub24tdHJhbnNmb3JtZWQgcmVzcG9uc2UgaW50byBjYWNoZSBhcyBhIHBsYWNlaG9sZGVyXG4gICAgICAgICAgY2FjaGUucHV0KHVybCwgcHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuXG4gICAgICAvLyBpZiB3ZSB3b24ndCBoYXZlIHRoZSByZXNwb25zZSBpbiBjYWNoZSwgc2V0IHRoZSB4c3JmIGhlYWRlcnMgYW5kXG4gICAgICAvLyBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kXG4gICAgICBpZiAoaXNVbmRlZmluZWQoY2FjaGVkUmVzcCkpIHtcbiAgICAgICAgdmFyIHhzcmZWYWx1ZSA9IHVybElzU2FtZU9yaWdpbihjb25maWcudXJsKVxuICAgICAgICAgICAgPyAkYnJvd3Nlci5jb29raWVzKClbY29uZmlnLnhzcmZDb29raWVOYW1lIHx8IGRlZmF1bHRzLnhzcmZDb29raWVOYW1lXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgICByZXFIZWFkZXJzWyhjb25maWcueHNyZkhlYWRlck5hbWUgfHwgZGVmYXVsdHMueHNyZkhlYWRlck5hbWUpXSA9IHhzcmZWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgICRodHRwQmFja2VuZChjb25maWcubWV0aG9kLCB1cmwsIHJlcURhdGEsIGRvbmUsIHJlcUhlYWRlcnMsIGNvbmZpZy50aW1lb3V0LFxuICAgICAgICAgICAgY29uZmlnLndpdGhDcmVkZW50aWFscywgY29uZmlnLnJlc3BvbnNlVHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuXG5cbiAgICAgIC8qKlxuICAgICAgICogQ2FsbGJhY2sgcmVnaXN0ZXJlZCB0byAkaHR0cEJhY2tlbmQoKTpcbiAgICAgICAqICAtIGNhY2hlcyB0aGUgcmVzcG9uc2UgaWYgZGVzaXJlZFxuICAgICAgICogIC0gcmVzb2x2ZXMgdGhlIHJhdyAkaHR0cCBwcm9taXNlXG4gICAgICAgKiAgLSBjYWxscyAkYXBwbHlcbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gZG9uZShzdGF0dXMsIHJlc3BvbnNlLCBoZWFkZXJzU3RyaW5nLCBzdGF0dXNUZXh0KSB7XG4gICAgICAgIGlmIChjYWNoZSkge1xuICAgICAgICAgIGlmIChpc1N1Y2Nlc3Moc3RhdHVzKSkge1xuICAgICAgICAgICAgY2FjaGUucHV0KHVybCwgW3N0YXR1cywgcmVzcG9uc2UsIHBhcnNlSGVhZGVycyhoZWFkZXJzU3RyaW5nKSwgc3RhdHVzVGV4dF0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgcHJvbWlzZSBmcm9tIHRoZSBjYWNoZVxuICAgICAgICAgICAgY2FjaGUucmVtb3ZlKHVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUh0dHBQcm9taXNlKCkge1xuICAgICAgICAgIHJlc29sdmVQcm9taXNlKHJlc3BvbnNlLCBzdGF0dXMsIGhlYWRlcnNTdHJpbmcsIHN0YXR1c1RleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVzZUFwcGx5QXN5bmMpIHtcbiAgICAgICAgICAkcm9vdFNjb3BlLiRhcHBseUFzeW5jKHJlc29sdmVIdHRwUHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZUh0dHBQcm9taXNlKCk7XG4gICAgICAgICAgaWYgKCEkcm9vdFNjb3BlLiQkcGhhc2UpICRyb290U2NvcGUuJGFwcGx5KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuXG4gICAgICAvKipcbiAgICAgICAqIFJlc29sdmVzIHRoZSByYXcgJGh0dHAgcHJvbWlzZS5cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVByb21pc2UocmVzcG9uc2UsIHN0YXR1cywgaGVhZGVycywgc3RhdHVzVGV4dCkge1xuICAgICAgICAvLyBub3JtYWxpemUgaW50ZXJuYWwgc3RhdHVzZXMgdG8gMFxuICAgICAgICBzdGF0dXMgPSBNYXRoLm1heChzdGF0dXMsIDApO1xuXG4gICAgICAgIChpc1N1Y2Nlc3Moc3RhdHVzKSA/IGRlZmVycmVkLnJlc29sdmUgOiBkZWZlcnJlZC5yZWplY3QpKHtcbiAgICAgICAgICBkYXRhOiByZXNwb25zZSxcbiAgICAgICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzR2V0dGVyKGhlYWRlcnMpLFxuICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHN0YXR1c1RleHRcbiAgICAgICAgfSk7XG4gICAgICB9XG5cblxuICAgICAgZnVuY3Rpb24gcmVtb3ZlUGVuZGluZ1JlcSgpIHtcbiAgICAgICAgdmFyIGlkeCA9ICRodHRwLnBlbmRpbmdSZXF1ZXN0cy5pbmRleE9mKGNvbmZpZyk7XG4gICAgICAgIGlmIChpZHggIT09IC0xKSAkaHR0cC5wZW5kaW5nUmVxdWVzdHMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBidWlsZFVybCh1cmwsIHBhcmFtcykge1xuICAgICAgaWYgKCFwYXJhbXMpIHJldHVybiB1cmw7XG4gICAgICB2YXIgcGFydHMgPSBbXTtcbiAgICAgIGZvckVhY2hTb3J0ZWQocGFyYW1zLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCBpc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcbiAgICAgICAgaWYgKCFpc0FycmF5KHZhbHVlKSkgdmFsdWUgPSBbdmFsdWVdO1xuXG4gICAgICAgIGZvckVhY2godmFsdWUsIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICBpZiAoaXNPYmplY3QodikpIHtcbiAgICAgICAgICAgIGlmIChpc0RhdGUodikpIHtcbiAgICAgICAgICAgICAgdiA9IHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHYgPSB0b0pzb24odik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcnRzLnB1c2goZW5jb2RlVXJpUXVlcnkoa2V5KSArICc9JyArXG4gICAgICAgICAgICAgICAgICAgICBlbmNvZGVVcmlRdWVyeSh2KSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICB1cmwgKz0gKCh1cmwuaW5kZXhPZignPycpID09IC0xKSA/ICc/JyA6ICcmJykgKyBwYXJ0cy5qb2luKCcmJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgfV07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVhocigpIHtcbiAgICByZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xufVxuXG4vKipcbiAqIEBuZ2RvYyBzZXJ2aWNlXG4gKiBAbmFtZSAkaHR0cEJhY2tlbmRcbiAqIEByZXF1aXJlcyAkd2luZG93XG4gKiBAcmVxdWlyZXMgJGRvY3VtZW50XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBIVFRQIGJhY2tlbmQgdXNlZCBieSB0aGUge0BsaW5rIG5nLiRodHRwIHNlcnZpY2V9IHRoYXQgZGVsZWdhdGVzIHRvXG4gKiBYTUxIdHRwUmVxdWVzdCBvYmplY3Qgb3IgSlNPTlAgYW5kIGRlYWxzIHdpdGggYnJvd3NlciBpbmNvbXBhdGliaWxpdGllcy5cbiAqXG4gKiBZb3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gdXNlIHRoaXMgc2VydmljZSBkaXJlY3RseSwgaW5zdGVhZCB1c2UgdGhlIGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbnM6XG4gKiB7QGxpbmsgbmcuJGh0dHAgJGh0dHB9IG9yIHtAbGluayBuZ1Jlc291cmNlLiRyZXNvdXJjZSAkcmVzb3VyY2V9LlxuICpcbiAqIER1cmluZyB0ZXN0aW5nIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgc3dhcHBlZCB3aXRoIHtAbGluayBuZ01vY2suJGh0dHBCYWNrZW5kIG1vY2tcbiAqICRodHRwQmFja2VuZH0gd2hpY2ggY2FuIGJlIHRyYWluZWQgd2l0aCByZXNwb25zZXMuXG4gKi9cbmZ1bmN0aW9uICRIdHRwQmFja2VuZFByb3ZpZGVyKCkge1xuICB0aGlzLiRnZXQgPSBbJyRicm93c2VyJywgJyR3aW5kb3cnLCAnJGRvY3VtZW50JywgZnVuY3Rpb24oJGJyb3dzZXIsICR3aW5kb3csICRkb2N1bWVudCkge1xuICAgIHJldHVybiBjcmVhdGVIdHRwQmFja2VuZCgkYnJvd3NlciwgY3JlYXRlWGhyLCAkYnJvd3Nlci5kZWZlciwgJHdpbmRvdy5hbmd1bGFyLmNhbGxiYWNrcywgJGRvY3VtZW50WzBdKTtcbiAgfV07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUh0dHBCYWNrZW5kKCRicm93c2VyLCBjcmVhdGVYaHIsICRicm93c2VyRGVmZXIsIGNhbGxiYWNrcywgcmF3RG9jdW1lbnQpIHtcbiAgLy8gVE9ETyh2b2p0YSk6IGZpeCB0aGUgc2lnbmF0dXJlXG4gIHJldHVybiBmdW5jdGlvbihtZXRob2QsIHVybCwgcG9zdCwgY2FsbGJhY2ssIGhlYWRlcnMsIHRpbWVvdXQsIHdpdGhDcmVkZW50aWFscywgcmVzcG9uc2VUeXBlKSB7XG4gICAgJGJyb3dzZXIuJCRpbmNPdXRzdGFuZGluZ1JlcXVlc3RDb3VudCgpO1xuICAgIHVybCA9IHVybCB8fCAkYnJvd3Nlci51cmwoKTtcblxuICAgIGlmIChsb3dlcmNhc2UobWV0aG9kKSA9PSAnanNvbnAnKSB7XG4gICAgICB2YXIgY2FsbGJhY2tJZCA9ICdfJyArIChjYWxsYmFja3MuY291bnRlcisrKS50b1N0cmluZygzNik7XG4gICAgICBjYWxsYmFja3NbY2FsbGJhY2tJZF0gPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgIGNhbGxiYWNrc1tjYWxsYmFja0lkXS5kYXRhID0gZGF0YTtcbiAgICAgICAgY2FsbGJhY2tzW2NhbGxiYWNrSWRdLmNhbGxlZCA9IHRydWU7XG4gICAgICB9O1xuXG4gICAgICB2YXIganNvbnBEb25lID0ganNvbnBSZXEodXJsLnJlcGxhY2UoJ0pTT05fQ0FMTEJBQ0snLCAnYW5ndWxhci5jYWxsYmFja3MuJyArIGNhbGxiYWNrSWQpLFxuICAgICAgICAgIGNhbGxiYWNrSWQsIGZ1bmN0aW9uKHN0YXR1cywgdGV4dCkge1xuICAgICAgICBjb21wbGV0ZVJlcXVlc3QoY2FsbGJhY2ssIHN0YXR1cywgY2FsbGJhY2tzW2NhbGxiYWNrSWRdLmRhdGEsIFwiXCIsIHRleHQpO1xuICAgICAgICBjYWxsYmFja3NbY2FsbGJhY2tJZF0gPSBub29wO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgdmFyIHhociA9IGNyZWF0ZVhocigpO1xuXG4gICAgICB4aHIub3BlbihtZXRob2QsIHVybCwgdHJ1ZSk7XG4gICAgICBmb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uIHJlcXVlc3RMb2FkZWQoKSB7XG4gICAgICAgIHZhciBzdGF0dXNUZXh0ID0geGhyLnN0YXR1c1RleHQgfHwgJyc7XG5cbiAgICAgICAgLy8gcmVzcG9uc2VUZXh0IGlzIHRoZSBvbGQtc2Nob29sIHdheSBvZiByZXRyaWV2aW5nIHJlc3BvbnNlIChzdXBwb3J0ZWQgYnkgSUU4ICYgOSlcbiAgICAgICAgLy8gcmVzcG9uc2UvcmVzcG9uc2VUeXBlIHByb3BlcnRpZXMgd2VyZSBpbnRyb2R1Y2VkIGluIFhIUiBMZXZlbDIgc3BlYyAoc3VwcG9ydGVkIGJ5IElFMTApXG4gICAgICAgIHZhciByZXNwb25zZSA9ICgncmVzcG9uc2UnIGluIHhocikgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0O1xuXG4gICAgICAgIC8vIG5vcm1hbGl6ZSBJRTkgYnVnIChodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xNDUwKVxuICAgICAgICB2YXIgc3RhdHVzID0geGhyLnN0YXR1cyA9PT0gMTIyMyA/IDIwNCA6IHhoci5zdGF0dXM7XG5cbiAgICAgICAgLy8gZml4IHN0YXR1cyBjb2RlIHdoZW4gaXQgaXMgMCAoMCBzdGF0dXMgaXMgdW5kb2N1bWVudGVkKS5cbiAgICAgICAgLy8gT2NjdXJzIHdoZW4gYWNjZXNzaW5nIGZpbGUgcmVzb3VyY2VzIG9yIG9uIEFuZHJvaWQgNC4xIHN0b2NrIGJyb3dzZXJcbiAgICAgICAgLy8gd2hpbGUgcmV0cmlldmluZyBmaWxlcyBmcm9tIGFwcGxpY2F0aW9uIGNhY2hlLlxuICAgICAgICBpZiAoc3RhdHVzID09PSAwKSB7XG4gICAgICAgICAgc3RhdHVzID0gcmVzcG9uc2UgPyAyMDAgOiB1cmxSZXNvbHZlKHVybCkucHJvdG9jb2wgPT0gJ2ZpbGUnID8gNDA0IDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBsZXRlUmVxdWVzdChjYWxsYmFjayxcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLFxuICAgICAgICAgICAgc3RhdHVzVGV4dCk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgcmVxdWVzdEVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIFRoZSByZXNwb25zZSBpcyBhbHdheXMgZW1wdHlcbiAgICAgICAgLy8gU2VlIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1lcnJvci1zdGVwcyBhbmQgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtbmV0d29yay1lcnJvclxuICAgICAgICBjb21wbGV0ZVJlcXVlc3QoY2FsbGJhY2ssIC0xLCBudWxsLCBudWxsLCAnJyk7XG4gICAgICB9O1xuXG4gICAgICB4aHIub25lcnJvciA9IHJlcXVlc3RFcnJvcjtcbiAgICAgIHhoci5vbmFib3J0ID0gcmVxdWVzdEVycm9yO1xuXG4gICAgICBpZiAod2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2VUeXBlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIFdlYktpdCBhZGRlZCBzdXBwb3J0IGZvciB0aGUganNvbiByZXNwb25zZVR5cGUgdmFsdWUgb24gMDkvMDMvMjAxM1xuICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY0OC4gVmVyc2lvbnMgb2YgU2FmYXJpIHByaW9yIHRvIDcgYXJlXG4gICAgICAgICAgLy8ga25vd24gdG8gdGhyb3cgd2hlbiBzZXR0aW5nIHRoZSB2YWx1ZSBcImpzb25cIiBhcyB0aGUgcmVzcG9uc2UgdHlwZS4gT3RoZXIgb2xkZXJcbiAgICAgICAgICAvLyBicm93c2VycyBpbXBsZW1lbnRpbmcgdGhlIHJlc3BvbnNlVHlwZVxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhlIGpzb24gcmVzcG9uc2UgdHlwZSBjYW4gYmUgaWdub3JlZCBpZiBub3Qgc3VwcG9ydGVkLCBiZWNhdXNlIEpTT04gcGF5bG9hZHMgYXJlXG4gICAgICAgICAgLy8gcGFyc2VkIG9uIHRoZSBjbGllbnQtc2lkZSByZWdhcmRsZXNzLlxuICAgICAgICAgIGlmIChyZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgeGhyLnNlbmQocG9zdCB8fCBudWxsKTtcbiAgICB9XG5cbiAgICBpZiAodGltZW91dCA+IDApIHtcbiAgICAgIHZhciB0aW1lb3V0SWQgPSAkYnJvd3NlckRlZmVyKHRpbWVvdXRSZXF1ZXN0LCB0aW1lb3V0KTtcbiAgICB9IGVsc2UgaWYgKGlzUHJvbWlzZUxpa2UodGltZW91dCkpIHtcbiAgICAgIHRpbWVvdXQudGhlbih0aW1lb3V0UmVxdWVzdCk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiB0aW1lb3V0UmVxdWVzdCgpIHtcbiAgICAgIGpzb25wRG9uZSAmJiBqc29ucERvbmUoKTtcbiAgICAgIHhociAmJiB4aHIuYWJvcnQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wbGV0ZVJlcXVlc3QoY2FsbGJhY2ssIHN0YXR1cywgcmVzcG9uc2UsIGhlYWRlcnNTdHJpbmcsIHN0YXR1c1RleHQpIHtcbiAgICAgIC8vIGNhbmNlbCB0aW1lb3V0IGFuZCBzdWJzZXF1ZW50IHRpbWVvdXQgcHJvbWlzZSByZXNvbHV0aW9uXG4gICAgICB0aW1lb3V0SWQgJiYgJGJyb3dzZXJEZWZlci5jYW5jZWwodGltZW91dElkKTtcbiAgICAgIGpzb25wRG9uZSA9IHhociA9IG51bGw7XG5cbiAgICAgIGNhbGxiYWNrKHN0YXR1cywgcmVzcG9uc2UsIGhlYWRlcnNTdHJpbmcsIHN0YXR1c1RleHQpO1xuICAgICAgJGJyb3dzZXIuJCRjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdChub29wKTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24ganNvbnBSZXEodXJsLCBjYWxsYmFja0lkLCBkb25lKSB7XG4gICAgLy8gd2UgY2FuJ3QgdXNlIGpRdWVyeS9qcUxpdGUgaGVyZSBiZWNhdXNlIGpRdWVyeSBkb2VzIGNyYXp5IHNoaXQgd2l0aCBzY3JpcHQgZWxlbWVudHMsIGUuZy46XG4gICAgLy8gLSBmZXRjaGVzIGxvY2FsIHNjcmlwdHMgdmlhIFhIUiBhbmQgZXZhbHMgdGhlbVxuICAgIC8vIC0gYWRkcyBhbmQgaW1tZWRpYXRlbHkgcmVtb3ZlcyBzY3JpcHQgZWxlbWVudHMgZnJvbSB0aGUgZG9jdW1lbnRcbiAgICB2YXIgc2NyaXB0ID0gcmF3RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JyksIGNhbGxiYWNrID0gbnVsbDtcbiAgICBzY3JpcHQudHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCI7XG4gICAgc2NyaXB0LnNyYyA9IHVybDtcbiAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuXG4gICAgY2FsbGJhY2sgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lckZuKHNjcmlwdCwgXCJsb2FkXCIsIGNhbGxiYWNrKTtcbiAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXJGbihzY3JpcHQsIFwiZXJyb3JcIiwgY2FsbGJhY2spO1xuICAgICAgcmF3RG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgc2NyaXB0ID0gbnVsbDtcbiAgICAgIHZhciBzdGF0dXMgPSAtMTtcbiAgICAgIHZhciB0ZXh0ID0gXCJ1bmtub3duXCI7XG5cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJsb2FkXCIgJiYgIWNhbGxiYWNrc1tjYWxsYmFja0lkXS5jYWxsZWQpIHtcbiAgICAgICAgICBldmVudCA9IHsgdHlwZTogXCJlcnJvclwiIH07XG4gICAgICAgIH1cbiAgICAgICAgdGV4dCA9IGV2ZW50LnR5cGU7XG4gICAgICAgIHN0YXR1cyA9IGV2ZW50LnR5cGUgPT09IFwiZXJyb3JcIiA/IDQwNCA6IDIwMDtcbiAgICAgIH1cblxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgZG9uZShzdGF0dXMsIHRleHQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBhZGRFdmVudExpc3RlbmVyRm4oc2NyaXB0LCBcImxvYWRcIiwgY2FsbGJhY2spO1xuICAgIGFkZEV2ZW50TGlzdGVuZXJGbihzY3JpcHQsIFwiZXJyb3JcIiwgY2FsbGJhY2spO1xuICAgIHJhd0RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICByZXR1cm4gY2FsbGJhY2s7XG4gIH1cbn1cblxudmFyICRpbnRlcnBvbGF0ZU1pbkVyciA9IG1pbkVycignJGludGVycG9sYXRlJyk7XG5cbi8qKlxuICogQG5nZG9jIHByb3ZpZGVyXG4gKiBAbmFtZSAkaW50ZXJwb2xhdGVQcm92aWRlclxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIFVzZWQgZm9yIGNvbmZpZ3VyaW5nIHRoZSBpbnRlcnBvbGF0aW9uIG1hcmt1cC4gRGVmYXVsdHMgdG8gYHt7YCBhbmQgYH19YC5cbiAqXG4gKiBAZXhhbXBsZVxuPGV4YW1wbGUgbW9kdWxlPVwiY3VzdG9tSW50ZXJwb2xhdGlvbkFwcFwiPlxuPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbjxzY3JpcHQ+XG4gIHZhciBjdXN0b21JbnRlcnBvbGF0aW9uQXBwID0gYW5ndWxhci5tb2R1bGUoJ2N1c3RvbUludGVycG9sYXRpb25BcHAnLCBbXSk7XG5cbiAgY3VzdG9tSW50ZXJwb2xhdGlvbkFwcC5jb25maWcoZnVuY3Rpb24oJGludGVycG9sYXRlUHJvdmlkZXIpIHtcbiAgICAkaW50ZXJwb2xhdGVQcm92aWRlci5zdGFydFN5bWJvbCgnLy8nKTtcbiAgICAkaW50ZXJwb2xhdGVQcm92aWRlci5lbmRTeW1ib2woJy8vJyk7XG4gIH0pO1xuXG5cbiAgY3VzdG9tSW50ZXJwb2xhdGlvbkFwcC5jb250cm9sbGVyKCdEZW1vQ29udHJvbGxlcicsIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5sYWJlbCA9IFwiVGhpcyBiaW5kaW5nIGlzIGJyb3VnaHQgeW91IGJ5IC8vIGludGVycG9sYXRpb24gc3ltYm9scy5cIjtcbiAgfSk7XG48L3NjcmlwdD5cbjxkaXYgbmctYXBwPVwiQXBwXCIgbmctY29udHJvbGxlcj1cIkRlbW9Db250cm9sbGVyIGFzIGRlbW9cIj5cbiAgICAvL2RlbW8ubGFiZWwvL1xuPC9kaXY+XG48L2ZpbGU+XG48ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gIGl0KCdzaG91bGQgaW50ZXJwb2xhdGUgYmluZGluZyB3aXRoIGN1c3RvbSBzeW1ib2xzJywgZnVuY3Rpb24oKSB7XG4gICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygnZGVtby5sYWJlbCcpKS5nZXRUZXh0KCkpLnRvQmUoJ1RoaXMgYmluZGluZyBpcyBicm91Z2h0IHlvdSBieSAvLyBpbnRlcnBvbGF0aW9uIHN5bWJvbHMuJyk7XG4gIH0pO1xuPC9maWxlPlxuPC9leGFtcGxlPlxuICovXG5mdW5jdGlvbiAkSW50ZXJwb2xhdGVQcm92aWRlcigpIHtcbiAgdmFyIHN0YXJ0U3ltYm9sID0gJ3t7JztcbiAgdmFyIGVuZFN5bWJvbCA9ICd9fSc7XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgJGludGVycG9sYXRlUHJvdmlkZXIjc3RhcnRTeW1ib2xcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFN5bWJvbCB0byBkZW5vdGUgc3RhcnQgb2YgZXhwcmVzc2lvbiBpbiB0aGUgaW50ZXJwb2xhdGVkIHN0cmluZy4gRGVmYXVsdHMgdG8gYHt7YC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmc9fSB2YWx1ZSBuZXcgdmFsdWUgdG8gc2V0IHRoZSBzdGFydGluZyBzeW1ib2wgdG8uXG4gICAqIEByZXR1cm5zIHtzdHJpbmd8c2VsZn0gUmV0dXJucyB0aGUgc3ltYm9sIHdoZW4gdXNlZCBhcyBnZXR0ZXIgYW5kIHNlbGYgaWYgdXNlZCBhcyBzZXR0ZXIuXG4gICAqL1xuICB0aGlzLnN0YXJ0U3ltYm9sID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHN0YXJ0U3ltYm9sID0gdmFsdWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0YXJ0U3ltYm9sO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQG5nZG9jIG1ldGhvZFxuICAgKiBAbmFtZSAkaW50ZXJwb2xhdGVQcm92aWRlciNlbmRTeW1ib2xcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFN5bWJvbCB0byBkZW5vdGUgdGhlIGVuZCBvZiBleHByZXNzaW9uIGluIHRoZSBpbnRlcnBvbGF0ZWQgc3RyaW5nLiBEZWZhdWx0cyB0byBgfX1gLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZz19IHZhbHVlIG5ldyB2YWx1ZSB0byBzZXQgdGhlIGVuZGluZyBzeW1ib2wgdG8uXG4gICAqIEByZXR1cm5zIHtzdHJpbmd8c2VsZn0gUmV0dXJucyB0aGUgc3ltYm9sIHdoZW4gdXNlZCBhcyBnZXR0ZXIgYW5kIHNlbGYgaWYgdXNlZCBhcyBzZXR0ZXIuXG4gICAqL1xuICB0aGlzLmVuZFN5bWJvbCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBlbmRTeW1ib2wgPSB2YWx1ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZW5kU3ltYm9sO1xuICAgIH1cbiAgfTtcblxuXG4gIHRoaXMuJGdldCA9IFsnJHBhcnNlJywgJyRleGNlcHRpb25IYW5kbGVyJywgJyRzY2UnLCBmdW5jdGlvbigkcGFyc2UsICRleGNlcHRpb25IYW5kbGVyLCAkc2NlKSB7XG4gICAgdmFyIHN0YXJ0U3ltYm9sTGVuZ3RoID0gc3RhcnRTeW1ib2wubGVuZ3RoLFxuICAgICAgICBlbmRTeW1ib2xMZW5ndGggPSBlbmRTeW1ib2wubGVuZ3RoLFxuICAgICAgICBlc2NhcGVkU3RhcnRSZWdleHAgPSBuZXcgUmVnRXhwKHN0YXJ0U3ltYm9sLnJlcGxhY2UoLy4vZywgZXNjYXBlKSwgJ2cnKSxcbiAgICAgICAgZXNjYXBlZEVuZFJlZ2V4cCA9IG5ldyBSZWdFeHAoZW5kU3ltYm9sLnJlcGxhY2UoLy4vZywgZXNjYXBlKSwgJ2cnKTtcblxuICAgIGZ1bmN0aW9uIGVzY2FwZShjaCkge1xuICAgICAgcmV0dXJuICdcXFxcXFxcXFxcXFwnICsgY2g7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5nZG9jIHNlcnZpY2VcbiAgICAgKiBAbmFtZSAkaW50ZXJwb2xhdGVcbiAgICAgKiBAa2luZCBmdW5jdGlvblxuICAgICAqXG4gICAgICogQHJlcXVpcmVzICRwYXJzZVxuICAgICAqIEByZXF1aXJlcyAkc2NlXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKlxuICAgICAqIENvbXBpbGVzIGEgc3RyaW5nIHdpdGggbWFya3VwIGludG8gYW4gaW50ZXJwb2xhdGlvbiBmdW5jdGlvbi4gVGhpcyBzZXJ2aWNlIGlzIHVzZWQgYnkgdGhlXG4gICAgICogSFRNTCB7QGxpbmsgbmcuJGNvbXBpbGUgJGNvbXBpbGV9IHNlcnZpY2UgZm9yIGRhdGEgYmluZGluZy4gU2VlXG4gICAgICoge0BsaW5rIG5nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyICRpbnRlcnBvbGF0ZVByb3ZpZGVyfSBmb3IgY29uZmlndXJpbmcgdGhlXG4gICAgICogaW50ZXJwb2xhdGlvbiBtYXJrdXAuXG4gICAgICpcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogICB2YXIgJGludGVycG9sYXRlID0gLi4uOyAvLyBpbmplY3RlZFxuICAgICAqICAgdmFyIGV4cCA9ICRpbnRlcnBvbGF0ZSgnSGVsbG8ge3tuYW1lIHwgdXBwZXJjYXNlfX0hJyk7XG4gICAgICogICBleHBlY3QoZXhwKHtuYW1lOidBbmd1bGFyJ30pLnRvRXF1YWwoJ0hlbGxvIEFOR1VMQVIhJyk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgJGludGVycG9sYXRlYCB0YWtlcyBhbiBvcHRpb25hbCBmb3VydGggYXJndW1lbnQsIGBhbGxPck5vdGhpbmdgLiBJZiBgYWxsT3JOb3RoaW5nYCBpc1xuICAgICAqIGB0cnVlYCwgdGhlIGludGVycG9sYXRpb24gZnVuY3Rpb24gd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAgdW5sZXNzIGFsbCBlbWJlZGRlZCBleHByZXNzaW9uc1xuICAgICAqIGV2YWx1YXRlIHRvIGEgdmFsdWUgb3RoZXIgdGhhbiBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogICB2YXIgJGludGVycG9sYXRlID0gLi4uOyAvLyBpbmplY3RlZFxuICAgICAqICAgdmFyIGNvbnRleHQgPSB7Z3JlZXRpbmc6ICdIZWxsbycsIG5hbWU6IHVuZGVmaW5lZCB9O1xuICAgICAqXG4gICAgICogICAvLyBkZWZhdWx0IFwiZm9yZ2l2aW5nXCIgbW9kZVxuICAgICAqICAgdmFyIGV4cCA9ICRpbnRlcnBvbGF0ZSgne3tncmVldGluZ319IHt7bmFtZX19IScpO1xuICAgICAqICAgZXhwZWN0KGV4cChjb250ZXh0KSkudG9FcXVhbCgnSGVsbG8gIScpO1xuICAgICAqXG4gICAgICogICAvLyBcImFsbE9yTm90aGluZ1wiIG1vZGVcbiAgICAgKiAgIGV4cCA9ICRpbnRlcnBvbGF0ZSgne3tncmVldGluZ319IHt7bmFtZX19IScsIGZhbHNlLCBudWxsLCB0cnVlKTtcbiAgICAgKiAgIGV4cGVjdChleHAoY29udGV4dCkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgKiAgIGNvbnRleHQubmFtZSA9ICdBbmd1bGFyJztcbiAgICAgKiAgIGV4cGVjdChleHAoY29udGV4dCkpLnRvRXF1YWwoJ0hlbGxvIEFuZ3VsYXIhJyk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYWxsT3JOb3RoaW5nYCBpcyB1c2VmdWwgZm9yIGludGVycG9sYXRpbmcgVVJMcy4gYG5nU3JjYCBhbmQgYG5nU3Jjc2V0YCB1c2UgdGhpcyBiZWhhdmlvci5cbiAgICAgKlxuICAgICAqICMjIyNFc2NhcGVkIEludGVycG9sYXRpb25cbiAgICAgKiAkaW50ZXJwb2xhdGUgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIGVzY2FwaW5nIGludGVycG9sYXRpb24gbWFya2Vycy4gU3RhcnQgYW5kIGVuZCBtYXJrZXJzXG4gICAgICogY2FuIGJlIGVzY2FwZWQgYnkgcHJlY2VkaW5nIGVhY2ggb2YgdGhlaXIgY2hhcmFjdGVycyB3aXRoIGEgUkVWRVJTRSBTT0xJRFVTIFUrMDA1QyAoYmFja3NsYXNoKS5cbiAgICAgKiBJdCB3aWxsIGJlIHJlbmRlcmVkIGFzIGEgcmVndWxhciBzdGFydC9lbmQgbWFya2VyLCBhbmQgd2lsbCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gZXhwcmVzc2lvblxuICAgICAqIG9yIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBUaGlzIGVuYWJsZXMgd2ViLXNlcnZlcnMgdG8gcHJldmVudCBzY3JpcHQgaW5qZWN0aW9uIGF0dGFja3MgYW5kIGRlZmFjaW5nIGF0dGFja3MsIHRvIHNvbWVcbiAgICAgKiBkZWdyZWUsIHdoaWxlIGFsc28gZW5hYmxpbmcgY29kZSBleGFtcGxlcyB0byB3b3JrIHdpdGhvdXQgcmVseWluZyBvbiB0aGVcbiAgICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nTm9uQmluZGFibGUgbmdOb25CaW5kYWJsZX0gZGlyZWN0aXZlLlxuICAgICAqXG4gICAgICogKipGb3Igc2VjdXJpdHkgcHVycG9zZXMsIGl0IGlzIHN0cm9uZ2x5IGVuY291cmFnZWQgdGhhdCB3ZWIgc2VydmVycyBlc2NhcGUgdXNlci1zdXBwbGllZCBkYXRhLFxuICAgICAqIHJlcGxhY2luZyBhbmdsZSBicmFja2V0cyAoJmx0OywgJmd0Oykgd2l0aCAmYW1wO2x0OyBhbmQgJmFtcDtndDsgcmVzcGVjdGl2ZWx5LCBhbmQgcmVwbGFjaW5nIGFsbFxuICAgICAqIGludGVycG9sYXRpb24gc3RhcnQvZW5kIG1hcmtlcnMgd2l0aCB0aGVpciBlc2NhcGVkIGNvdW50ZXJwYXJ0cy4qKlxuICAgICAqXG4gICAgICogRXNjYXBlZCBpbnRlcnBvbGF0aW9uIG1hcmtlcnMgYXJlIG9ubHkgcmVwbGFjZWQgd2l0aCB0aGUgYWN0dWFsIGludGVycG9sYXRpb24gbWFya2VycyBpbiByZW5kZXJlZFxuICAgICAqIG91dHB1dCB3aGVuIHRoZSAkaW50ZXJwb2xhdGUgc2VydmljZSBwcm9jZXNzZXMgdGhlIHRleHQuIFNvLCBmb3IgSFRNTCBlbGVtZW50cyBpbnRlcnBvbGF0ZWRcbiAgICAgKiBieSB7QGxpbmsgbmcuJGNvbXBpbGUgJGNvbXBpbGV9LCBvciBvdGhlcndpc2UgaW50ZXJwb2xhdGVkIHdpdGggdGhlIGBtdXN0SGF2ZUV4cHJlc3Npb25gIHBhcmFtZXRlclxuICAgICAqIHNldCB0byBgdHJ1ZWAsIHRoZSBpbnRlcnBvbGF0ZWQgdGV4dCBtdXN0IGNvbnRhaW4gYW4gdW5lc2NhcGVkIGludGVycG9sYXRpb24gZXhwcmVzc2lvbi4gQXMgc3VjaCxcbiAgICAgKiB0aGlzIGlzIHR5cGljYWxseSB1c2VmdWwgb25seSB3aGVuIHVzZXItZGF0YSBpcyB1c2VkIGluIHJlbmRlcmluZyBhIHRlbXBsYXRlIGZyb20gdGhlIHNlcnZlciwgb3JcbiAgICAgKiB3aGVuIG90aGVyd2lzZSB1bnRydXN0ZWQgZGF0YSBpcyB1c2VkIGJ5IGEgZGlyZWN0aXZlLlxuICAgICAqXG4gICAgICogPGV4YW1wbGU+XG4gICAgICogIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICogICAgPGRpdiBuZy1pbml0PVwidXNlcm5hbWU9J0EgdXNlcidcIj5cbiAgICAgKiAgICAgIDxwIG5nLWluaXQ9XCJhcHB0aXRsZT0nRXNjYXBpbmcgZGVtbydcIj57e2FwcHRpdGxlfX06IFxce1xceyB1c2VybmFtZSA9IFwiZGVmYWNlZCB2YWx1ZVwiOyBcXH1cXH1cbiAgICAgKiAgICAgICAgPC9wPlxuICAgICAqICAgICAgPHA+PHN0cm9uZz57e3VzZXJuYW1lfX08L3N0cm9uZz4gYXR0ZW1wdHMgdG8gaW5qZWN0IGNvZGUgd2hpY2ggd2lsbCBkZWZhY2UgdGhlXG4gICAgICogICAgICAgIGFwcGxpY2F0aW9uLCBidXQgZmFpbHMgdG8gYWNjb21wbGlzaCB0aGVpciB0YXNrLCBiZWNhdXNlIHRoZSBzZXJ2ZXIgaGFzIGNvcnJlY3RseVxuICAgICAqICAgICAgICBlc2NhcGVkIHRoZSBpbnRlcnBvbGF0aW9uIHN0YXJ0L2VuZCBtYXJrZXJzIHdpdGggUkVWRVJTRSBTT0xJRFVTIFUrMDA1QyAoYmFja3NsYXNoKVxuICAgICAqICAgICAgICBjaGFyYWN0ZXJzLjwvcD5cbiAgICAgKiAgICAgIDxwPkluc3RlYWQsIHRoZSByZXN1bHQgb2YgdGhlIGF0dGVtcHRlZCBzY3JpcHQgaW5qZWN0aW9uIGlzIHZpc2libGUsIGFuZCBjYW4gYmUgcmVtb3ZlZFxuICAgICAqICAgICAgICBmcm9tIHRoZSBkYXRhYmFzZSBieSBhbiBhZG1pbmlzdHJhdG9yLjwvcD5cbiAgICAgKiAgICA8L2Rpdj5cbiAgICAgKiAgPC9maWxlPlxuICAgICAqIDwvZXhhbXBsZT5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRoZSB0ZXh0IHdpdGggbWFya3VwIHRvIGludGVycG9sYXRlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IG11c3RIYXZlRXhwcmVzc2lvbiBpZiBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBpbnRlcnBvbGF0aW9uIHN0cmluZyBtdXN0IGhhdmVcbiAgICAgKiAgICBlbWJlZGRlZCBleHByZXNzaW9uIGluIG9yZGVyIHRvIHJldHVybiBhbiBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uLiBTdHJpbmdzIHdpdGggbm9cbiAgICAgKiAgICBlbWJlZGRlZCBleHByZXNzaW9uIHdpbGwgcmV0dXJuIG51bGwgZm9yIHRoZSBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gdHJ1c3RlZENvbnRleHQgd2hlbiBwcm92aWRlZCwgdGhlIHJldHVybmVkIGZ1bmN0aW9uIHBhc3NlcyB0aGUgaW50ZXJwb2xhdGVkXG4gICAgICogICAgcmVzdWx0IHRocm91Z2gge0BsaW5rIG5nLiRzY2UjZ2V0VHJ1c3RlZCAkc2NlLmdldFRydXN0ZWQoaW50ZXJwb2xhdGVkUmVzdWx0LFxuICAgICAqICAgIHRydXN0ZWRDb250ZXh0KX0gYmVmb3JlIHJldHVybmluZyBpdC4gIFJlZmVyIHRvIHRoZSB7QGxpbmsgbmcuJHNjZSAkc2NlfSBzZXJ2aWNlIHRoYXRcbiAgICAgKiAgICBwcm92aWRlcyBTdHJpY3QgQ29udGV4dHVhbCBFc2NhcGluZyBmb3IgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBhbGxPck5vdGhpbmcgaWYgYHRydWVgLCB0aGVuIHRoZSByZXR1cm5lZCBmdW5jdGlvbiByZXR1cm5zIHVuZGVmaW5lZFxuICAgICAqICAgIHVubGVzcyBhbGwgZW1iZWRkZWQgZXhwcmVzc2lvbnMgZXZhbHVhdGUgdG8gYSB2YWx1ZSBvdGhlciB0aGFuIGB1bmRlZmluZWRgLlxuICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbihjb250ZXh0KX0gYW4gaW50ZXJwb2xhdGlvbiBmdW5jdGlvbiB3aGljaCBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlXG4gICAgICogICAgaW50ZXJwb2xhdGVkIHN0cmluZy4gVGhlIGZ1bmN0aW9uIGhhcyB0aGVzZSBwYXJhbWV0ZXJzOlxuICAgICAqXG4gICAgICogLSBgY29udGV4dGA6IGV2YWx1YXRpb24gY29udGV4dCBmb3IgYWxsIGV4cHJlc3Npb25zIGVtYmVkZGVkIGluIHRoZSBpbnRlcnBvbGF0ZWQgdGV4dFxuICAgICAqL1xuICAgIGZ1bmN0aW9uICRpbnRlcnBvbGF0ZSh0ZXh0LCBtdXN0SGF2ZUV4cHJlc3Npb24sIHRydXN0ZWRDb250ZXh0LCBhbGxPck5vdGhpbmcpIHtcbiAgICAgIGFsbE9yTm90aGluZyA9ICEhYWxsT3JOb3RoaW5nO1xuICAgICAgdmFyIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgZW5kSW5kZXgsXG4gICAgICAgICAgaW5kZXggPSAwLFxuICAgICAgICAgIGV4cHJlc3Npb25zID0gW10sXG4gICAgICAgICAgcGFyc2VGbnMgPSBbXSxcbiAgICAgICAgICB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGgsXG4gICAgICAgICAgZXhwLFxuICAgICAgICAgIGNvbmNhdCA9IFtdLFxuICAgICAgICAgIGV4cHJlc3Npb25Qb3NpdGlvbnMgPSBbXTtcblxuICAgICAgd2hpbGUgKGluZGV4IDwgdGV4dExlbmd0aCkge1xuICAgICAgICBpZiAoKChzdGFydEluZGV4ID0gdGV4dC5pbmRleE9mKHN0YXJ0U3ltYm9sLCBpbmRleCkpICE9IC0xKSAmJlxuICAgICAgICAgICAgICgoZW5kSW5kZXggPSB0ZXh0LmluZGV4T2YoZW5kU3ltYm9sLCBzdGFydEluZGV4ICsgc3RhcnRTeW1ib2xMZW5ndGgpKSAhPSAtMSkpIHtcbiAgICAgICAgICBpZiAoaW5kZXggIT09IHN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgIGNvbmNhdC5wdXNoKHVuZXNjYXBlVGV4dCh0ZXh0LnN1YnN0cmluZyhpbmRleCwgc3RhcnRJbmRleCkpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXhwID0gdGV4dC5zdWJzdHJpbmcoc3RhcnRJbmRleCArIHN0YXJ0U3ltYm9sTGVuZ3RoLCBlbmRJbmRleCk7XG4gICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChleHApO1xuICAgICAgICAgIHBhcnNlRm5zLnB1c2goJHBhcnNlKGV4cCwgcGFyc2VTdHJpbmdpZnlJbnRlcmNlcHRvcikpO1xuICAgICAgICAgIGluZGV4ID0gZW5kSW5kZXggKyBlbmRTeW1ib2xMZW5ndGg7XG4gICAgICAgICAgZXhwcmVzc2lvblBvc2l0aW9ucy5wdXNoKGNvbmNhdC5sZW5ndGgpO1xuICAgICAgICAgIGNvbmNhdC5wdXNoKCcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB3ZSBkaWQgbm90IGZpbmQgYW4gaW50ZXJwb2xhdGlvbiwgc28gd2UgaGF2ZSB0byBhZGQgdGhlIHJlbWFpbmRlciB0byB0aGUgc2VwYXJhdG9ycyBhcnJheVxuICAgICAgICAgIGlmIChpbmRleCAhPT0gdGV4dExlbmd0aCkge1xuICAgICAgICAgICAgY29uY2F0LnB1c2godW5lc2NhcGVUZXh0KHRleHQuc3Vic3RyaW5nKGluZGV4KSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDb25jYXRlbmF0aW5nIGV4cHJlc3Npb25zIG1ha2VzIGl0IGhhcmQgdG8gcmVhc29uIGFib3V0IHdoZXRoZXIgc29tZSBjb21iaW5hdGlvbiBvZlxuICAgICAgLy8gY29uY2F0ZW5hdGVkIHZhbHVlcyBhcmUgdW5zYWZlIHRvIHVzZSBhbmQgY291bGQgZWFzaWx5IGxlYWQgdG8gWFNTLiAgQnkgcmVxdWlyaW5nIHRoYXQgYVxuICAgICAgLy8gc2luZ2xlIGV4cHJlc3Npb24gYmUgdXNlZCBmb3IgaWZyYW1lW3NyY10sIG9iamVjdFtzcmNdLCBldGMuLCB3ZSBlbnN1cmUgdGhhdCB0aGUgdmFsdWVcbiAgICAgIC8vIHRoYXQncyB1c2VkIGlzIGFzc2lnbmVkIG9yIGNvbnN0cnVjdGVkIGJ5IHNvbWUgSlMgY29kZSBzb21ld2hlcmUgdGhhdCBpcyBtb3JlIHRlc3RhYmxlIG9yXG4gICAgICAvLyBtYWtlIGl0IG9idmlvdXMgdGhhdCB5b3UgYm91bmQgdGhlIHZhbHVlIHRvIHNvbWUgdXNlciBjb250cm9sbGVkIHZhbHVlLiAgVGhpcyBoZWxwcyByZWR1Y2VcbiAgICAgIC8vIHRoZSBsb2FkIHdoZW4gYXVkaXRpbmcgZm9yIFhTUyBpc3N1ZXMuXG4gICAgICBpZiAodHJ1c3RlZENvbnRleHQgJiYgY29uY2F0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyAkaW50ZXJwb2xhdGVNaW5FcnIoJ25vY29uY2F0JyxcbiAgICAgICAgICAgICAgXCJFcnJvciB3aGlsZSBpbnRlcnBvbGF0aW5nOiB7MH1cXG5TdHJpY3QgQ29udGV4dHVhbCBFc2NhcGluZyBkaXNhbGxvd3MgXCIgK1xuICAgICAgICAgICAgICBcImludGVycG9sYXRpb25zIHRoYXQgY29uY2F0ZW5hdGUgbXVsdGlwbGUgZXhwcmVzc2lvbnMgd2hlbiBhIHRydXN0ZWQgdmFsdWUgaXMgXCIgK1xuICAgICAgICAgICAgICBcInJlcXVpcmVkLiAgU2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2VcIiwgdGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghbXVzdEhhdmVFeHByZXNzaW9uIHx8IGV4cHJlc3Npb25zLmxlbmd0aCkge1xuICAgICAgICB2YXIgY29tcHV0ZSA9IGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhbGxPck5vdGhpbmcgJiYgaXNVbmRlZmluZWQodmFsdWVzW2ldKSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uY2F0W2V4cHJlc3Npb25Qb3NpdGlvbnNbaV1dID0gdmFsdWVzW2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29uY2F0LmpvaW4oJycpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBnZXRWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydXN0ZWRDb250ZXh0ID9cbiAgICAgICAgICAgICRzY2UuZ2V0VHJ1c3RlZCh0cnVzdGVkQ29udGV4dCwgdmFsdWUpIDpcbiAgICAgICAgICAgICRzY2UudmFsdWVPZih2YWx1ZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHN0cmluZ2lmeSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsgLy8gbnVsbCB8fCB1bmRlZmluZWRcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgICAgdmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHZhbHVlID0gdG9Kc29uKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbiBpbnRlcnBvbGF0aW9uRm4oY29udGV4dCkge1xuICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgdmFyIGlpID0gZXhwcmVzc2lvbnMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG5ldyBBcnJheShpaSk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGZvciAoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhbHVlc1tpXSA9IHBhcnNlRm5zW2ldKGNvbnRleHQpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGUodmFsdWVzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICB2YXIgbmV3RXJyID0gJGludGVycG9sYXRlTWluRXJyKCdpbnRlcnInLCBcIkNhbid0IGludGVycG9sYXRlOiB7MH1cXG57MX1cIiwgdGV4dCxcbiAgICAgICAgICAgICAgICAgIGVyci50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIobmV3RXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAvLyBhbGwgb2YgdGhlc2UgcHJvcGVydGllcyBhcmUgdW5kb2N1bWVudGVkIGZvciBub3dcbiAgICAgICAgICBleHA6IHRleHQsIC8vanVzdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHJlZ3VsYXIgd2F0Y2hlcnMgY3JlYXRlZCB2aWEgJHdhdGNoXG4gICAgICAgICAgZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25zLFxuICAgICAgICAgICQkd2F0Y2hEZWxlZ2F0ZTogZnVuY3Rpb24oc2NvcGUsIGxpc3RlbmVyLCBvYmplY3RFcXVhbGl0eSkge1xuICAgICAgICAgICAgdmFyIGxhc3RWYWx1ZTtcbiAgICAgICAgICAgIHJldHVybiBzY29wZS4kd2F0Y2hHcm91cChwYXJzZUZucywgZnVuY3Rpb24gaW50ZXJwb2xhdGVGbldhdGNoZXIodmFsdWVzLCBvbGRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgdmFyIGN1cnJWYWx1ZSA9IGNvbXB1dGUodmFsdWVzKTtcbiAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24obGlzdGVuZXIpKSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBjdXJyVmFsdWUsIHZhbHVlcyAhPT0gb2xkVmFsdWVzID8gbGFzdFZhbHVlIDogY3VyclZhbHVlLCBzY29wZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGFzdFZhbHVlID0gY3VyclZhbHVlO1xuICAgICAgICAgICAgfSwgb2JqZWN0RXF1YWxpdHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHVuZXNjYXBlVGV4dCh0ZXh0KSB7XG4gICAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoZXNjYXBlZFN0YXJ0UmVnZXhwLCBzdGFydFN5bWJvbCkuXG4gICAgICAgICAgcmVwbGFjZShlc2NhcGVkRW5kUmVnZXhwLCBlbmRTeW1ib2wpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBwYXJzZVN0cmluZ2lmeUludGVyY2VwdG9yKHZhbHVlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFsdWUgPSBnZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgcmV0dXJuIGFsbE9yTm90aGluZyAmJiAhaXNEZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdmFyIG5ld0VyciA9ICRpbnRlcnBvbGF0ZU1pbkVycignaW50ZXJyJywgXCJDYW4ndCBpbnRlcnBvbGF0ZTogezB9XFxuezF9XCIsIHRleHQsXG4gICAgICAgICAgICBlcnIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIobmV3RXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAqIEBuYW1lICRpbnRlcnBvbGF0ZSNzdGFydFN5bWJvbFxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFN5bWJvbCB0byBkZW5vdGUgdGhlIHN0YXJ0IG9mIGV4cHJlc3Npb24gaW4gdGhlIGludGVycG9sYXRlZCBzdHJpbmcuIERlZmF1bHRzIHRvIGB7e2AuXG4gICAgICpcbiAgICAgKiBVc2Uge0BsaW5rIG5nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyI3N0YXJ0U3ltYm9sIGAkaW50ZXJwb2xhdGVQcm92aWRlci5zdGFydFN5bWJvbGB9IHRvIGNoYW5nZVxuICAgICAqIHRoZSBzeW1ib2wuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdGFydCBzeW1ib2wuXG4gICAgICovXG4gICAgJGludGVycG9sYXRlLnN0YXJ0U3ltYm9sID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc3RhcnRTeW1ib2w7XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAqIEBuYW1lICRpbnRlcnBvbGF0ZSNlbmRTeW1ib2xcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBTeW1ib2wgdG8gZGVub3RlIHRoZSBlbmQgb2YgZXhwcmVzc2lvbiBpbiB0aGUgaW50ZXJwb2xhdGVkIHN0cmluZy4gRGVmYXVsdHMgdG8gYH19YC5cbiAgICAgKlxuICAgICAqIFVzZSB7QGxpbmsgbmcuJGludGVycG9sYXRlUHJvdmlkZXIjZW5kU3ltYm9sIGAkaW50ZXJwb2xhdGVQcm92aWRlci5lbmRTeW1ib2xgfSB0byBjaGFuZ2VcbiAgICAgKiB0aGUgc3ltYm9sLlxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ30gZW5kIHN5bWJvbC5cbiAgICAgKi9cbiAgICAkaW50ZXJwb2xhdGUuZW5kU3ltYm9sID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZW5kU3ltYm9sO1xuICAgIH07XG5cbiAgICByZXR1cm4gJGludGVycG9sYXRlO1xuICB9XTtcbn1cblxuZnVuY3Rpb24gJEludGVydmFsUHJvdmlkZXIoKSB7XG4gIHRoaXMuJGdldCA9IFsnJHJvb3RTY29wZScsICckd2luZG93JywgJyRxJywgJyQkcScsXG4gICAgICAgZnVuY3Rpb24oJHJvb3RTY29wZSwgICAkd2luZG93LCAgICRxLCAgICQkcSkge1xuICAgIHZhciBpbnRlcnZhbHMgPSB7fTtcblxuXG4gICAgIC8qKlxuICAgICAgKiBAbmdkb2Mgc2VydmljZVxuICAgICAgKiBAbmFtZSAkaW50ZXJ2YWxcbiAgICAgICpcbiAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAqIEFuZ3VsYXIncyB3cmFwcGVyIGZvciBgd2luZG93LnNldEludGVydmFsYC4gVGhlIGBmbmAgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZXZlcnkgYGRlbGF5YFxuICAgICAgKiBtaWxsaXNlY29uZHMuXG4gICAgICAqXG4gICAgICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgcmVnaXN0ZXJpbmcgYW4gaW50ZXJ2YWwgZnVuY3Rpb24gaXMgYSBwcm9taXNlLiBUaGlzIHByb21pc2Ugd2lsbCBiZVxuICAgICAgKiBub3RpZmllZCB1cG9uIGVhY2ggdGljayBvZiB0aGUgaW50ZXJ2YWwsIGFuZCB3aWxsIGJlIHJlc29sdmVkIGFmdGVyIGBjb3VudGAgaXRlcmF0aW9ucywgb3JcbiAgICAgICogcnVuIGluZGVmaW5pdGVseSBpZiBgY291bnRgIGlzIG5vdCBkZWZpbmVkLiBUaGUgdmFsdWUgb2YgdGhlIG5vdGlmaWNhdGlvbiB3aWxsIGJlIHRoZVxuICAgICAgKiBudW1iZXIgb2YgaXRlcmF0aW9ucyB0aGF0IGhhdmUgcnVuLlxuICAgICAgKiBUbyBjYW5jZWwgYW4gaW50ZXJ2YWwsIGNhbGwgYCRpbnRlcnZhbC5jYW5jZWwocHJvbWlzZSlgLlxuICAgICAgKlxuICAgICAgKiBJbiB0ZXN0cyB5b3UgY2FuIHVzZSB7QGxpbmsgbmdNb2NrLiRpbnRlcnZhbCNmbHVzaCBgJGludGVydmFsLmZsdXNoKG1pbGxpcylgfSB0b1xuICAgICAgKiBtb3ZlIGZvcndhcmQgYnkgYG1pbGxpc2AgbWlsbGlzZWNvbmRzIGFuZCB0cmlnZ2VyIGFueSBmdW5jdGlvbnMgc2NoZWR1bGVkIHRvIHJ1biBpbiB0aGF0XG4gICAgICAqIHRpbWUuXG4gICAgICAqXG4gICAgICAqIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCI+XG4gICAgICAqICoqTm90ZSoqOiBJbnRlcnZhbHMgY3JlYXRlZCBieSB0aGlzIHNlcnZpY2UgbXVzdCBiZSBleHBsaWNpdGx5IGRlc3Ryb3llZCB3aGVuIHlvdSBhcmUgZmluaXNoZWRcbiAgICAgICogd2l0aCB0aGVtLiAgSW4gcGFydGljdWxhciB0aGV5IGFyZSBub3QgYXV0b21hdGljYWxseSBkZXN0cm95ZWQgd2hlbiBhIGNvbnRyb2xsZXIncyBzY29wZSBvciBhXG4gICAgICAqIGRpcmVjdGl2ZSdzIGVsZW1lbnQgYXJlIGRlc3Ryb3llZC5cbiAgICAgICogWW91IHNob3VsZCB0YWtlIHRoaXMgaW50byBjb25zaWRlcmF0aW9uIGFuZCBtYWtlIHN1cmUgdG8gYWx3YXlzIGNhbmNlbCB0aGUgaW50ZXJ2YWwgYXQgdGhlXG4gICAgICAqIGFwcHJvcHJpYXRlIG1vbWVudC4gIFNlZSB0aGUgZXhhbXBsZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzIG9uIGhvdyBhbmQgd2hlbiB0byBkbyB0aGlzLlxuICAgICAgKiA8L2Rpdj5cbiAgICAgICpcbiAgICAgICogQHBhcmFtIHtmdW5jdGlvbigpfSBmbiBBIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCByZXBlYXRlZGx5LlxuICAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGVhY2ggZnVuY3Rpb24gY2FsbC5cbiAgICAgICogQHBhcmFtIHtudW1iZXI9fSBbY291bnQ9MF0gTnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdC4gSWYgbm90IHNldCwgb3IgMCwgd2lsbCByZXBlYXRcbiAgICAgICogICBpbmRlZmluaXRlbHkuXG4gICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IFtpbnZva2VBcHBseT10cnVlXSBJZiBzZXQgdG8gYGZhbHNlYCBza2lwcyBtb2RlbCBkaXJ0eSBjaGVja2luZywgb3RoZXJ3aXNlXG4gICAgICAqICAgd2lsbCBpbnZva2UgYGZuYCB3aXRoaW4gdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRhcHBseSAkYXBwbHl9IGJsb2NrLlxuICAgICAgKiBAcmV0dXJucyB7cHJvbWlzZX0gQSBwcm9taXNlIHdoaWNoIHdpbGwgYmUgbm90aWZpZWQgb24gZWFjaCBpdGVyYXRpb24uXG4gICAgICAqXG4gICAgICAqIEBleGFtcGxlXG4gICAgICAqIDxleGFtcGxlIG1vZHVsZT1cImludGVydmFsRXhhbXBsZVwiPlxuICAgICAgKiA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgKiAgIDxzY3JpcHQ+XG4gICAgICAqICAgICBhbmd1bGFyLm1vZHVsZSgnaW50ZXJ2YWxFeGFtcGxlJywgW10pXG4gICAgICAqICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRpbnRlcnZhbCcsXG4gICAgICAqICAgICAgICAgZnVuY3Rpb24oJHNjb3BlLCAkaW50ZXJ2YWwpIHtcbiAgICAgICogICAgICAgICAgICRzY29wZS5mb3JtYXQgPSAnTS9kL3l5IGg6bW06c3MgYSc7XG4gICAgICAqICAgICAgICAgICAkc2NvcGUuYmxvb2RfMSA9IDEwMDtcbiAgICAgICogICAgICAgICAgICRzY29wZS5ibG9vZF8yID0gMTIwO1xuICAgICAgKlxuICAgICAgKiAgICAgICAgICAgdmFyIHN0b3A7XG4gICAgICAqICAgICAgICAgICAkc2NvcGUuZmlnaHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICogICAgICAgICAgICAgLy8gRG9uJ3Qgc3RhcnQgYSBuZXcgZmlnaHQgaWYgd2UgYXJlIGFscmVhZHkgZmlnaHRpbmdcbiAgICAgICogICAgICAgICAgICAgaWYgKCBhbmd1bGFyLmlzRGVmaW5lZChzdG9wKSApIHJldHVybjtcbiAgICAgICpcbiAgICAgICogICAgICAgICAgIHN0b3AgPSAkaW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgICAqICAgICAgICAgICAgIGlmICgkc2NvcGUuYmxvb2RfMSA+IDAgJiYgJHNjb3BlLmJsb29kXzIgPiAwKSB7XG4gICAgICAqICAgICAgICAgICAgICAgJHNjb3BlLmJsb29kXzEgPSAkc2NvcGUuYmxvb2RfMSAtIDM7XG4gICAgICAqICAgICAgICAgICAgICAgJHNjb3BlLmJsb29kXzIgPSAkc2NvcGUuYmxvb2RfMiAtIDQ7XG4gICAgICAqICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAqICAgICAgICAgICAgICAgJHNjb3BlLnN0b3BGaWdodCgpO1xuICAgICAgKiAgICAgICAgICAgICB9XG4gICAgICAqICAgICAgICAgICB9LCAxMDApO1xuICAgICAgKiAgICAgICAgIH07XG4gICAgICAqXG4gICAgICAqICAgICAgICAgJHNjb3BlLnN0b3BGaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgKiAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKHN0b3ApKSB7XG4gICAgICAqICAgICAgICAgICAgICRpbnRlcnZhbC5jYW5jZWwoc3RvcCk7XG4gICAgICAqICAgICAgICAgICAgIHN0b3AgPSB1bmRlZmluZWQ7XG4gICAgICAqICAgICAgICAgICB9XG4gICAgICAqICAgICAgICAgfTtcbiAgICAgICpcbiAgICAgICogICAgICAgICAkc2NvcGUucmVzZXRGaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgICAgKiAgICAgICAgICAgJHNjb3BlLmJsb29kXzEgPSAxMDA7XG4gICAgICAqICAgICAgICAgICAkc2NvcGUuYmxvb2RfMiA9IDEyMDtcbiAgICAgICogICAgICAgICB9O1xuICAgICAgKlxuICAgICAgKiAgICAgICAgICRzY29wZS4kb24oJyRkZXN0cm95JywgZnVuY3Rpb24oKSB7XG4gICAgICAqICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaW50ZXJ2YWwgaXMgZGVzdHJveWVkIHRvb1xuICAgICAgKiAgICAgICAgICAgJHNjb3BlLnN0b3BGaWdodCgpO1xuICAgICAgKiAgICAgICAgIH0pO1xuICAgICAgKiAgICAgICB9XSlcbiAgICAgICogICAgICAgLy8gUmVnaXN0ZXIgdGhlICdteUN1cnJlbnRUaW1lJyBkaXJlY3RpdmUgZmFjdG9yeSBtZXRob2QuXG4gICAgICAqICAgICAgIC8vIFdlIGluamVjdCAkaW50ZXJ2YWwgYW5kIGRhdGVGaWx0ZXIgc2VydmljZSBzaW5jZSB0aGUgZmFjdG9yeSBtZXRob2QgaXMgREkuXG4gICAgICAqICAgICAgIC5kaXJlY3RpdmUoJ215Q3VycmVudFRpbWUnLCBbJyRpbnRlcnZhbCcsICdkYXRlRmlsdGVyJyxcbiAgICAgICogICAgICAgICBmdW5jdGlvbigkaW50ZXJ2YWwsIGRhdGVGaWx0ZXIpIHtcbiAgICAgICogICAgICAgICAgIC8vIHJldHVybiB0aGUgZGlyZWN0aXZlIGxpbmsgZnVuY3Rpb24uIChjb21waWxlIGZ1bmN0aW9uIG5vdCBuZWVkZWQpXG4gICAgICAqICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICAqICAgICAgICAgICAgIHZhciBmb3JtYXQsICAvLyBkYXRlIGZvcm1hdFxuICAgICAgKiAgICAgICAgICAgICAgICAgc3RvcFRpbWU7IC8vIHNvIHRoYXQgd2UgY2FuIGNhbmNlbCB0aGUgdGltZSB1cGRhdGVzXG4gICAgICAqXG4gICAgICAqICAgICAgICAgICAgIC8vIHVzZWQgdG8gdXBkYXRlIHRoZSBVSVxuICAgICAgKiAgICAgICAgICAgICBmdW5jdGlvbiB1cGRhdGVUaW1lKCkge1xuICAgICAgKiAgICAgICAgICAgICAgIGVsZW1lbnQudGV4dChkYXRlRmlsdGVyKG5ldyBEYXRlKCksIGZvcm1hdCkpO1xuICAgICAgKiAgICAgICAgICAgICB9XG4gICAgICAqXG4gICAgICAqICAgICAgICAgICAgIC8vIHdhdGNoIHRoZSBleHByZXNzaW9uLCBhbmQgdXBkYXRlIHRoZSBVSSBvbiBjaGFuZ2UuXG4gICAgICAqICAgICAgICAgICAgIHNjb3BlLiR3YXRjaChhdHRycy5teUN1cnJlbnRUaW1lLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgKiAgICAgICAgICAgICAgIGZvcm1hdCA9IHZhbHVlO1xuICAgICAgKiAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoKTtcbiAgICAgICogICAgICAgICAgICAgfSk7XG4gICAgICAqXG4gICAgICAqICAgICAgICAgICAgIHN0b3BUaW1lID0gJGludGVydmFsKHVwZGF0ZVRpbWUsIDEwMDApO1xuICAgICAgKlxuICAgICAgKiAgICAgICAgICAgICAvLyBsaXN0ZW4gb24gRE9NIGRlc3Ryb3kgKHJlbW92YWwpIGV2ZW50LCBhbmQgY2FuY2VsIHRoZSBuZXh0IFVJIHVwZGF0ZVxuICAgICAgKiAgICAgICAgICAgICAvLyB0byBwcmV2ZW50IHVwZGF0aW5nIHRpbWUgYWZ0ZXIgdGhlIERPTSBlbGVtZW50IHdhcyByZW1vdmVkLlxuICAgICAgKiAgICAgICAgICAgICBlbGVtZW50Lm9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgICAgKiAgICAgICAgICAgICAgICRpbnRlcnZhbC5jYW5jZWwoc3RvcFRpbWUpO1xuICAgICAgKiAgICAgICAgICAgICB9KTtcbiAgICAgICogICAgICAgICAgIH1cbiAgICAgICogICAgICAgICB9XSk7XG4gICAgICAqICAgPC9zY3JpcHQ+XG4gICAgICAqXG4gICAgICAqICAgPGRpdj5cbiAgICAgICogICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XG4gICAgICAqICAgICAgIERhdGUgZm9ybWF0OiA8aW5wdXQgbmctbW9kZWw9XCJmb3JtYXRcIj4gPGhyLz5cbiAgICAgICogICAgICAgQ3VycmVudCB0aW1lIGlzOiA8c3BhbiBteS1jdXJyZW50LXRpbWU9XCJmb3JtYXRcIj48L3NwYW4+XG4gICAgICAqICAgICAgIDxoci8+XG4gICAgICAqICAgICAgIEJsb29kIDEgOiA8Zm9udCBjb2xvcj0ncmVkJz57e2Jsb29kXzF9fTwvZm9udD5cbiAgICAgICogICAgICAgQmxvb2QgMiA6IDxmb250IGNvbG9yPSdyZWQnPnt7Ymxvb2RfMn19PC9mb250PlxuICAgICAgKiAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLW5nLWNsaWNrPVwiZmlnaHQoKVwiPkZpZ2h0PC9idXR0b24+XG4gICAgICAqICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtbmctY2xpY2s9XCJzdG9wRmlnaHQoKVwiPlN0b3BGaWdodDwvYnV0dG9uPlxuICAgICAgKiAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLW5nLWNsaWNrPVwicmVzZXRGaWdodCgpXCI+cmVzZXRGaWdodDwvYnV0dG9uPlxuICAgICAgKiAgICAgPC9kaXY+XG4gICAgICAqICAgPC9kaXY+XG4gICAgICAqXG4gICAgICAqIDwvZmlsZT5cbiAgICAgICogPC9leGFtcGxlPlxuICAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnRlcnZhbChmbiwgZGVsYXksIGNvdW50LCBpbnZva2VBcHBseSkge1xuICAgICAgdmFyIHNldEludGVydmFsID0gJHdpbmRvdy5zZXRJbnRlcnZhbCxcbiAgICAgICAgICBjbGVhckludGVydmFsID0gJHdpbmRvdy5jbGVhckludGVydmFsLFxuICAgICAgICAgIGl0ZXJhdGlvbiA9IDAsXG4gICAgICAgICAgc2tpcEFwcGx5ID0gKGlzRGVmaW5lZChpbnZva2VBcHBseSkgJiYgIWludm9rZUFwcGx5KSxcbiAgICAgICAgICBkZWZlcnJlZCA9IChza2lwQXBwbHkgPyAkJHEgOiAkcSkuZGVmZXIoKSxcbiAgICAgICAgICBwcm9taXNlID0gZGVmZXJyZWQucHJvbWlzZTtcblxuICAgICAgY291bnQgPSBpc0RlZmluZWQoY291bnQpID8gY291bnQgOiAwO1xuXG4gICAgICBwcm9taXNlLnRoZW4obnVsbCwgbnVsbCwgZm4pO1xuXG4gICAgICBwcm9taXNlLiQkaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGZ1bmN0aW9uIHRpY2soKSB7XG4gICAgICAgIGRlZmVycmVkLm5vdGlmeShpdGVyYXRpb24rKyk7XG5cbiAgICAgICAgaWYgKGNvdW50ID4gMCAmJiBpdGVyYXRpb24gPj0gY291bnQpIHtcbiAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKGl0ZXJhdGlvbik7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChwcm9taXNlLiQkaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgZGVsZXRlIGludGVydmFsc1twcm9taXNlLiQkaW50ZXJ2YWxJZF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNraXBBcHBseSkgJHJvb3RTY29wZS4kYXBwbHkoKTtcblxuICAgICAgfSwgZGVsYXkpO1xuXG4gICAgICBpbnRlcnZhbHNbcHJvbWlzZS4kJGludGVydmFsSWRdID0gZGVmZXJyZWQ7XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuXG4gICAgIC8qKlxuICAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICAqIEBuYW1lICRpbnRlcnZhbCNjYW5jZWxcbiAgICAgICpcbiAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAqIENhbmNlbHMgYSB0YXNrIGFzc29jaWF0ZWQgd2l0aCB0aGUgYHByb21pc2VgLlxuICAgICAgKlxuICAgICAgKiBAcGFyYW0ge3Byb21pc2V9IHByb21pc2UgcmV0dXJuZWQgYnkgdGhlIGAkaW50ZXJ2YWxgIGZ1bmN0aW9uLlxuICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRhc2sgd2FzIHN1Y2Nlc3NmdWxseSBjYW5jZWxlZC5cbiAgICAgICovXG4gICAgaW50ZXJ2YWwuY2FuY2VsID0gZnVuY3Rpb24ocHJvbWlzZSkge1xuICAgICAgaWYgKHByb21pc2UgJiYgcHJvbWlzZS4kJGludGVydmFsSWQgaW4gaW50ZXJ2YWxzKSB7XG4gICAgICAgIGludGVydmFsc1twcm9taXNlLiQkaW50ZXJ2YWxJZF0ucmVqZWN0KCdjYW5jZWxlZCcpO1xuICAgICAgICAkd2luZG93LmNsZWFySW50ZXJ2YWwocHJvbWlzZS4kJGludGVydmFsSWQpO1xuICAgICAgICBkZWxldGUgaW50ZXJ2YWxzW3Byb21pc2UuJCRpbnRlcnZhbElkXTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIHJldHVybiBpbnRlcnZhbDtcbiAgfV07XG59XG5cbi8qKlxuICogQG5nZG9jIHNlcnZpY2VcbiAqIEBuYW1lICRsb2NhbGVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqICRsb2NhbGUgc2VydmljZSBwcm92aWRlcyBsb2NhbGl6YXRpb24gcnVsZXMgZm9yIHZhcmlvdXMgQW5ndWxhciBjb21wb25lbnRzLiBBcyBvZiByaWdodCBub3cgdGhlXG4gKiBvbmx5IHB1YmxpYyBhcGkgaXM6XG4gKlxuICogKiBgaWRgIOKAkyBge3N0cmluZ31gIOKAkyBsb2NhbGUgaWQgZm9ybWF0dGVkIGFzIGBsYW5ndWFnZUlkLWNvdW50cnlJZGAgKGUuZy4gYGVuLXVzYClcbiAqL1xuZnVuY3Rpb24gJExvY2FsZVByb3ZpZGVyKCkge1xuICB0aGlzLiRnZXQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6ICdlbi11cycsXG5cbiAgICAgIE5VTUJFUl9GT1JNQVRTOiB7XG4gICAgICAgIERFQ0lNQUxfU0VQOiAnLicsXG4gICAgICAgIEdST1VQX1NFUDogJywnLFxuICAgICAgICBQQVRURVJOUzogW1xuICAgICAgICAgIHsgLy8gRGVjaW1hbCBQYXR0ZXJuXG4gICAgICAgICAgICBtaW5JbnQ6IDEsXG4gICAgICAgICAgICBtaW5GcmFjOiAwLFxuICAgICAgICAgICAgbWF4RnJhYzogMyxcbiAgICAgICAgICAgIHBvc1ByZTogJycsXG4gICAgICAgICAgICBwb3NTdWY6ICcnLFxuICAgICAgICAgICAgbmVnUHJlOiAnLScsXG4gICAgICAgICAgICBuZWdTdWY6ICcnLFxuICAgICAgICAgICAgZ1NpemU6IDMsXG4gICAgICAgICAgICBsZ1NpemU6IDNcbiAgICAgICAgICB9LHsgLy9DdXJyZW5jeSBQYXR0ZXJuXG4gICAgICAgICAgICBtaW5JbnQ6IDEsXG4gICAgICAgICAgICBtaW5GcmFjOiAyLFxuICAgICAgICAgICAgbWF4RnJhYzogMixcbiAgICAgICAgICAgIHBvc1ByZTogJ1xcdTAwQTQnLFxuICAgICAgICAgICAgcG9zU3VmOiAnJyxcbiAgICAgICAgICAgIG5lZ1ByZTogJyhcXHUwMEE0JyxcbiAgICAgICAgICAgIG5lZ1N1ZjogJyknLFxuICAgICAgICAgICAgZ1NpemU6IDMsXG4gICAgICAgICAgICBsZ1NpemU6IDNcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIENVUlJFTkNZX1NZTTogJyQnXG4gICAgICB9LFxuXG4gICAgICBEQVRFVElNRV9GT1JNQVRTOiB7XG4gICAgICAgIE1PTlRIOlxuICAgICAgICAgICAgJ0phbnVhcnksRmVicnVhcnksTWFyY2gsQXByaWwsTWF5LEp1bmUsSnVseSxBdWd1c3QsU2VwdGVtYmVyLE9jdG9iZXIsTm92ZW1iZXIsRGVjZW1iZXInXG4gICAgICAgICAgICAuc3BsaXQoJywnKSxcbiAgICAgICAgU0hPUlRNT05USDogICdKYW4sRmViLE1hcixBcHIsTWF5LEp1bixKdWwsQXVnLFNlcCxPY3QsTm92LERlYycuc3BsaXQoJywnKSxcbiAgICAgICAgREFZOiAnU3VuZGF5LE1vbmRheSxUdWVzZGF5LFdlZG5lc2RheSxUaHVyc2RheSxGcmlkYXksU2F0dXJkYXknLnNwbGl0KCcsJyksXG4gICAgICAgIFNIT1JUREFZOiAnU3VuLE1vbixUdWUsV2VkLFRodSxGcmksU2F0Jy5zcGxpdCgnLCcpLFxuICAgICAgICBBTVBNUzogWydBTScsJ1BNJ10sXG4gICAgICAgIG1lZGl1bTogJ01NTSBkLCB5IGg6bW06c3MgYScsXG4gICAgICAgICdzaG9ydCc6ICdNL2QveXkgaDptbSBhJyxcbiAgICAgICAgZnVsbERhdGU6ICdFRUVFLCBNTU1NIGQsIHknLFxuICAgICAgICBsb25nRGF0ZTogJ01NTU0gZCwgeScsXG4gICAgICAgIG1lZGl1bURhdGU6ICdNTU0gZCwgeScsXG4gICAgICAgIHNob3J0RGF0ZTogJ00vZC95eScsXG4gICAgICAgIG1lZGl1bVRpbWU6ICdoOm1tOnNzIGEnLFxuICAgICAgICBzaG9ydFRpbWU6ICdoOm1tIGEnXG4gICAgICB9LFxuXG4gICAgICBwbHVyYWxDYXQ6IGZ1bmN0aW9uKG51bSkge1xuICAgICAgICBpZiAobnVtID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuICdvbmUnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnb3RoZXInO1xuICAgICAgfVxuICAgIH07XG4gIH07XG59XG5cbnZhciBQQVRIX01BVENIID0gL14oW15cXD8jXSopKFxcPyhbXiNdKikpPygjKC4qKSk/JC8sXG4gICAgREVGQVVMVF9QT1JUUyA9IHsnaHR0cCc6IDgwLCAnaHR0cHMnOiA0NDMsICdmdHAnOiAyMX07XG52YXIgJGxvY2F0aW9uTWluRXJyID0gbWluRXJyKCckbG9jYXRpb24nKTtcblxuXG4vKipcbiAqIEVuY29kZSBwYXRoIHVzaW5nIGVuY29kZVVyaVNlZ21lbnQsIGlnbm9yaW5nIGZvcndhcmQgc2xhc2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggdG8gZW5jb2RlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlbmNvZGVQYXRoKHBhdGgpIHtcbiAgdmFyIHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLycpLFxuICAgICAgaSA9IHNlZ21lbnRzLmxlbmd0aDtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgc2VnbWVudHNbaV0gPSBlbmNvZGVVcmlTZWdtZW50KHNlZ21lbnRzW2ldKTtcbiAgfVxuXG4gIHJldHVybiBzZWdtZW50cy5qb2luKCcvJyk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQWJzb2x1dGVVcmwoYWJzb2x1dGVVcmwsIGxvY2F0aW9uT2JqKSB7XG4gIHZhciBwYXJzZWRVcmwgPSB1cmxSZXNvbHZlKGFic29sdXRlVXJsKTtcblxuICBsb2NhdGlvbk9iai4kJHByb3RvY29sID0gcGFyc2VkVXJsLnByb3RvY29sO1xuICBsb2NhdGlvbk9iai4kJGhvc3QgPSBwYXJzZWRVcmwuaG9zdG5hbWU7XG4gIGxvY2F0aW9uT2JqLiQkcG9ydCA9IGludChwYXJzZWRVcmwucG9ydCkgfHwgREVGQVVMVF9QT1JUU1twYXJzZWRVcmwucHJvdG9jb2xdIHx8IG51bGw7XG59XG5cblxuZnVuY3Rpb24gcGFyc2VBcHBVcmwocmVsYXRpdmVVcmwsIGxvY2F0aW9uT2JqKSB7XG4gIHZhciBwcmVmaXhlZCA9IChyZWxhdGl2ZVVybC5jaGFyQXQoMCkgIT09ICcvJyk7XG4gIGlmIChwcmVmaXhlZCkge1xuICAgIHJlbGF0aXZlVXJsID0gJy8nICsgcmVsYXRpdmVVcmw7XG4gIH1cbiAgdmFyIG1hdGNoID0gdXJsUmVzb2x2ZShyZWxhdGl2ZVVybCk7XG4gIGxvY2F0aW9uT2JqLiQkcGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudChwcmVmaXhlZCAmJiBtYXRjaC5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJyA/XG4gICAgICBtYXRjaC5wYXRobmFtZS5zdWJzdHJpbmcoMSkgOiBtYXRjaC5wYXRobmFtZSk7XG4gIGxvY2F0aW9uT2JqLiQkc2VhcmNoID0gcGFyc2VLZXlWYWx1ZShtYXRjaC5zZWFyY2gpO1xuICBsb2NhdGlvbk9iai4kJGhhc2ggPSBkZWNvZGVVUklDb21wb25lbnQobWF0Y2guaGFzaCk7XG5cbiAgLy8gbWFrZSBzdXJlIHBhdGggc3RhcnRzIHdpdGggJy8nO1xuICBpZiAobG9jYXRpb25PYmouJCRwYXRoICYmIGxvY2F0aW9uT2JqLiQkcGF0aC5jaGFyQXQoMCkgIT0gJy8nKSB7XG4gICAgbG9jYXRpb25PYmouJCRwYXRoID0gJy8nICsgbG9jYXRpb25PYmouJCRwYXRoO1xuICB9XG59XG5cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJlZ2luXG4gKiBAcGFyYW0ge3N0cmluZ30gd2hvbGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHJldHVybnMgdGV4dCBmcm9tIHdob2xlIGFmdGVyIGJlZ2luIG9yIHVuZGVmaW5lZCBpZiBpdCBkb2VzIG5vdCBiZWdpbiB3aXRoXG4gKiAgICAgICAgICAgICAgICAgICBleHBlY3RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJlZ2luc1dpdGgoYmVnaW4sIHdob2xlKSB7XG4gIGlmICh3aG9sZS5pbmRleE9mKGJlZ2luKSA9PT0gMCkge1xuICAgIHJldHVybiB3aG9sZS5zdWJzdHIoYmVnaW4ubGVuZ3RoKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHN0cmlwSGFzaCh1cmwpIHtcbiAgdmFyIGluZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgcmV0dXJuIGluZGV4ID09IC0xID8gdXJsIDogdXJsLnN1YnN0cigwLCBpbmRleCk7XG59XG5cblxuZnVuY3Rpb24gc3RyaXBGaWxlKHVybCkge1xuICByZXR1cm4gdXJsLnN1YnN0cigwLCBzdHJpcEhhc2godXJsKS5sYXN0SW5kZXhPZignLycpICsgMSk7XG59XG5cbi8qIHJldHVybiB0aGUgc2VydmVyIG9ubHkgKHNjaGVtZTovL2hvc3Q6cG9ydCkgKi9cbmZ1bmN0aW9uIHNlcnZlckJhc2UodXJsKSB7XG4gIHJldHVybiB1cmwuc3Vic3RyaW5nKDAsIHVybC5pbmRleE9mKCcvJywgdXJsLmluZGV4T2YoJy8vJykgKyAyKSk7XG59XG5cblxuLyoqXG4gKiBMb2NhdGlvbkh0bWw1VXJsIHJlcHJlc2VudHMgYW4gdXJsXG4gKiBUaGlzIG9iamVjdCBpcyBleHBvc2VkIGFzICRsb2NhdGlvbiBzZXJ2aWNlIHdoZW4gSFRNTDUgbW9kZSBpcyBlbmFibGVkIGFuZCBzdXBwb3J0ZWRcbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBCYXNlIGFwcGxpY2F0aW9uIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVByZWZpeCB1cmwgcGF0aCBwcmVmaXhcbiAqL1xuZnVuY3Rpb24gTG9jYXRpb25IdG1sNVVybChhcHBCYXNlLCBiYXNlUHJlZml4KSB7XG4gIHRoaXMuJCRodG1sNSA9IHRydWU7XG4gIGJhc2VQcmVmaXggPSBiYXNlUHJlZml4IHx8ICcnO1xuICB2YXIgYXBwQmFzZU5vRmlsZSA9IHN0cmlwRmlsZShhcHBCYXNlKTtcbiAgcGFyc2VBYnNvbHV0ZVVybChhcHBCYXNlLCB0aGlzKTtcblxuXG4gIC8qKlxuICAgKiBQYXJzZSBnaXZlbiBodG1sNSAocmVndWxhcikgdXJsIHN0cmluZyBpbnRvIHByb3BlcnRpZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBIVE1MNSB1cmxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRoaXMuJCRwYXJzZSA9IGZ1bmN0aW9uKHVybCkge1xuICAgIHZhciBwYXRoVXJsID0gYmVnaW5zV2l0aChhcHBCYXNlTm9GaWxlLCB1cmwpO1xuICAgIGlmICghaXNTdHJpbmcocGF0aFVybCkpIHtcbiAgICAgIHRocm93ICRsb2NhdGlvbk1pbkVycignaXB0aHByZngnLCAnSW52YWxpZCB1cmwgXCJ7MH1cIiwgbWlzc2luZyBwYXRoIHByZWZpeCBcInsxfVwiLicsIHVybCxcbiAgICAgICAgICBhcHBCYXNlTm9GaWxlKTtcbiAgICB9XG5cbiAgICBwYXJzZUFwcFVybChwYXRoVXJsLCB0aGlzKTtcblxuICAgIGlmICghdGhpcy4kJHBhdGgpIHtcbiAgICAgIHRoaXMuJCRwYXRoID0gJy8nO1xuICAgIH1cblxuICAgIHRoaXMuJCRjb21wb3NlKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbXBvc2UgdXJsIGFuZCB1cGRhdGUgYGFic1VybGAgcHJvcGVydHlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRoaXMuJCRjb21wb3NlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNlYXJjaCA9IHRvS2V5VmFsdWUodGhpcy4kJHNlYXJjaCksXG4gICAgICAgIGhhc2ggPSB0aGlzLiQkaGFzaCA/ICcjJyArIGVuY29kZVVyaVNlZ21lbnQodGhpcy4kJGhhc2gpIDogJyc7XG5cbiAgICB0aGlzLiQkdXJsID0gZW5jb2RlUGF0aCh0aGlzLiQkcGF0aCkgKyAoc2VhcmNoID8gJz8nICsgc2VhcmNoIDogJycpICsgaGFzaDtcbiAgICB0aGlzLiQkYWJzVXJsID0gYXBwQmFzZU5vRmlsZSArIHRoaXMuJCR1cmwuc3Vic3RyKDEpOyAvLyBmaXJzdCBjaGFyIGlzIGFsd2F5cyAnLydcbiAgfTtcblxuICB0aGlzLiQkcGFyc2VMaW5rVXJsID0gZnVuY3Rpb24odXJsLCByZWxIcmVmKSB7XG4gICAgaWYgKHJlbEhyZWYgJiYgcmVsSHJlZlswXSA9PT0gJyMnKSB7XG4gICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIGxpbmtzIHRvIGhhc2ggZnJhZ21lbnRzOlxuICAgICAgLy8ga2VlcCB0aGUgb2xkIHVybCBhbmQgb25seSByZXBsYWNlIHRoZSBoYXNoIGZyYWdtZW50XG4gICAgICB0aGlzLmhhc2gocmVsSHJlZi5zbGljZSgxKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGFwcFVybCwgcHJldkFwcFVybDtcbiAgICB2YXIgcmV3cml0dGVuVXJsO1xuXG4gICAgaWYgKChhcHBVcmwgPSBiZWdpbnNXaXRoKGFwcEJhc2UsIHVybCkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByZXZBcHBVcmwgPSBhcHBVcmw7XG4gICAgICBpZiAoKGFwcFVybCA9IGJlZ2luc1dpdGgoYmFzZVByZWZpeCwgYXBwVXJsKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXdyaXR0ZW5VcmwgPSBhcHBCYXNlTm9GaWxlICsgKGJlZ2luc1dpdGgoJy8nLCBhcHBVcmwpIHx8IGFwcFVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXdyaXR0ZW5VcmwgPSBhcHBCYXNlICsgcHJldkFwcFVybDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKChhcHBVcmwgPSBiZWdpbnNXaXRoKGFwcEJhc2VOb0ZpbGUsIHVybCkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJld3JpdHRlblVybCA9IGFwcEJhc2VOb0ZpbGUgKyBhcHBVcmw7XG4gICAgfSBlbHNlIGlmIChhcHBCYXNlTm9GaWxlID09IHVybCArICcvJykge1xuICAgICAgcmV3cml0dGVuVXJsID0gYXBwQmFzZU5vRmlsZTtcbiAgICB9XG4gICAgaWYgKHJld3JpdHRlblVybCkge1xuICAgICAgdGhpcy4kJHBhcnNlKHJld3JpdHRlblVybCk7XG4gICAgfVxuICAgIHJldHVybiAhIXJld3JpdHRlblVybDtcbiAgfTtcbn1cblxuXG4vKipcbiAqIExvY2F0aW9uSGFzaGJhbmdVcmwgcmVwcmVzZW50cyB1cmxcbiAqIFRoaXMgb2JqZWN0IGlzIGV4cG9zZWQgYXMgJGxvY2F0aW9uIHNlcnZpY2Ugd2hlbiBkZXZlbG9wZXIgZG9lc24ndCBvcHQgaW50byBodG1sNSBtb2RlLlxuICogSXQgYWxzbyBzZXJ2ZXMgYXMgdGhlIGJhc2UgY2xhc3MgZm9yIGh0bWw1IG1vZGUgZmFsbGJhY2sgb24gbGVnYWN5IGJyb3dzZXJzLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtzdHJpbmd9IGFwcEJhc2UgYXBwbGljYXRpb24gYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoUHJlZml4IGhhc2hiYW5nIHByZWZpeFxuICovXG5mdW5jdGlvbiBMb2NhdGlvbkhhc2hiYW5nVXJsKGFwcEJhc2UsIGhhc2hQcmVmaXgpIHtcbiAgdmFyIGFwcEJhc2VOb0ZpbGUgPSBzdHJpcEZpbGUoYXBwQmFzZSk7XG5cbiAgcGFyc2VBYnNvbHV0ZVVybChhcHBCYXNlLCB0aGlzKTtcblxuXG4gIC8qKlxuICAgKiBQYXJzZSBnaXZlbiBoYXNoYmFuZyB1cmwgaW50byBwcm9wZXJ0aWVzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgSGFzaGJhbmcgdXJsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0aGlzLiQkcGFyc2UgPSBmdW5jdGlvbih1cmwpIHtcbiAgICB2YXIgd2l0aG91dEJhc2VVcmwgPSBiZWdpbnNXaXRoKGFwcEJhc2UsIHVybCkgfHwgYmVnaW5zV2l0aChhcHBCYXNlTm9GaWxlLCB1cmwpO1xuICAgIHZhciB3aXRob3V0SGFzaFVybCA9IHdpdGhvdXRCYXNlVXJsLmNoYXJBdCgwKSA9PSAnIydcbiAgICAgICAgPyBiZWdpbnNXaXRoKGhhc2hQcmVmaXgsIHdpdGhvdXRCYXNlVXJsKVxuICAgICAgICA6ICh0aGlzLiQkaHRtbDUpXG4gICAgICAgICAgPyB3aXRob3V0QmFzZVVybFxuICAgICAgICAgIDogJyc7XG5cbiAgICBpZiAoIWlzU3RyaW5nKHdpdGhvdXRIYXNoVXJsKSkge1xuICAgICAgdGhyb3cgJGxvY2F0aW9uTWluRXJyKCdpaHNocHJmeCcsICdJbnZhbGlkIHVybCBcInswfVwiLCBtaXNzaW5nIGhhc2ggcHJlZml4IFwiezF9XCIuJywgdXJsLFxuICAgICAgICAgIGhhc2hQcmVmaXgpO1xuICAgIH1cbiAgICBwYXJzZUFwcFVybCh3aXRob3V0SGFzaFVybCwgdGhpcyk7XG5cbiAgICB0aGlzLiQkcGF0aCA9IHJlbW92ZVdpbmRvd3NEcml2ZU5hbWUodGhpcy4kJHBhdGgsIHdpdGhvdXRIYXNoVXJsLCBhcHBCYXNlKTtcblxuICAgIHRoaXMuJCRjb21wb3NlKCk7XG5cbiAgICAvKlxuICAgICAqIEluIFdpbmRvd3MsIG9uIGFuIGFuY2hvciBub2RlIG9uIGRvY3VtZW50cyBsb2FkZWQgZnJvbVxuICAgICAqIHRoZSBmaWxlc3lzdGVtLCB0aGUgYnJvd3NlciB3aWxsIHJldHVybiBhIHBhdGhuYW1lXG4gICAgICogcHJlZml4ZWQgd2l0aCB0aGUgZHJpdmUgbmFtZSAoJy9DOi9wYXRoJykgd2hlbiBhXG4gICAgICogcGF0aG5hbWUgd2l0aG91dCBhIGRyaXZlIGlzIHNldDpcbiAgICAgKiAgKiBhLnNldEF0dHJpYnV0ZSgnaHJlZicsICcvZm9vJylcbiAgICAgKiAgICogYS5wYXRobmFtZSA9PT0gJy9DOi9mb28nIC8vdHJ1ZVxuICAgICAqXG4gICAgICogSW5zaWRlIG9mIEFuZ3VsYXIsIHdlJ3JlIGFsd2F5cyB1c2luZyBwYXRobmFtZXMgdGhhdFxuICAgICAqIGRvIG5vdCBpbmNsdWRlIGRyaXZlIG5hbWVzIGZvciByb3V0aW5nLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlbW92ZVdpbmRvd3NEcml2ZU5hbWUocGF0aCwgdXJsLCBiYXNlKSB7XG4gICAgICAvKlxuICAgICAgTWF0Y2hlcyBwYXRocyBmb3IgZmlsZSBwcm90b2NvbCBvbiB3aW5kb3dzLFxuICAgICAgc3VjaCBhcyAvQzovZm9vL2JhciwgYW5kIGNhcHR1cmVzIG9ubHkgL2Zvby9iYXIuXG4gICAgICAqL1xuICAgICAgdmFyIHdpbmRvd3NGaWxlUGF0aEV4cCA9IC9eXFwvW0EtWl06KFxcLy4qKS87XG5cbiAgICAgIHZhciBmaXJzdFBhdGhTZWdtZW50TWF0Y2g7XG5cbiAgICAgIC8vR2V0IHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGlucHV0IFVSTC5cbiAgICAgIGlmICh1cmwuaW5kZXhPZihiYXNlKSA9PT0gMCkge1xuICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShiYXNlLCAnJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBpbnB1dCBVUkwgaW50ZW50aW9uYWxseSBjb250YWlucyBhIGZpcnN0IHBhdGggc2VnbWVudCB0aGF0IGVuZHMgd2l0aCBhIGNvbG9uLlxuICAgICAgaWYgKHdpbmRvd3NGaWxlUGF0aEV4cC5leGVjKHVybCkpIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICB9XG5cbiAgICAgIGZpcnN0UGF0aFNlZ21lbnRNYXRjaCA9IHdpbmRvd3NGaWxlUGF0aEV4cC5leGVjKHBhdGgpO1xuICAgICAgcmV0dXJuIGZpcnN0UGF0aFNlZ21lbnRNYXRjaCA/IGZpcnN0UGF0aFNlZ21lbnRNYXRjaFsxXSA6IHBhdGg7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBDb21wb3NlIGhhc2hiYW5nIHVybCBhbmQgdXBkYXRlIGBhYnNVcmxgIHByb3BlcnR5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0aGlzLiQkY29tcG9zZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzZWFyY2ggPSB0b0tleVZhbHVlKHRoaXMuJCRzZWFyY2gpLFxuICAgICAgICBoYXNoID0gdGhpcy4kJGhhc2ggPyAnIycgKyBlbmNvZGVVcmlTZWdtZW50KHRoaXMuJCRoYXNoKSA6ICcnO1xuXG4gICAgdGhpcy4kJHVybCA9IGVuY29kZVBhdGgodGhpcy4kJHBhdGgpICsgKHNlYXJjaCA/ICc/JyArIHNlYXJjaCA6ICcnKSArIGhhc2g7XG4gICAgdGhpcy4kJGFic1VybCA9IGFwcEJhc2UgKyAodGhpcy4kJHVybCA/IGhhc2hQcmVmaXggKyB0aGlzLiQkdXJsIDogJycpO1xuICB9O1xuXG4gIHRoaXMuJCRwYXJzZUxpbmtVcmwgPSBmdW5jdGlvbih1cmwsIHJlbEhyZWYpIHtcbiAgICBpZiAoc3RyaXBIYXNoKGFwcEJhc2UpID09IHN0cmlwSGFzaCh1cmwpKSB7XG4gICAgICB0aGlzLiQkcGFyc2UodXJsKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG59XG5cblxuLyoqXG4gKiBMb2NhdGlvbkhhc2hiYW5nVXJsIHJlcHJlc2VudHMgdXJsXG4gKiBUaGlzIG9iamVjdCBpcyBleHBvc2VkIGFzICRsb2NhdGlvbiBzZXJ2aWNlIHdoZW4gaHRtbDUgaGlzdG9yeSBhcGkgaXMgZW5hYmxlZCBidXQgdGhlIGJyb3dzZXJcbiAqIGRvZXMgbm90IHN1cHBvcnQgaXQuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwQmFzZSBhcHBsaWNhdGlvbiBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2hQcmVmaXggaGFzaGJhbmcgcHJlZml4XG4gKi9cbmZ1bmN0aW9uIExvY2F0aW9uSGFzaGJhbmdJbkh0bWw1VXJsKGFwcEJhc2UsIGhhc2hQcmVmaXgpIHtcbiAgdGhpcy4kJGh0bWw1ID0gdHJ1ZTtcbiAgTG9jYXRpb25IYXNoYmFuZ1VybC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIHZhciBhcHBCYXNlTm9GaWxlID0gc3RyaXBGaWxlKGFwcEJhc2UpO1xuXG4gIHRoaXMuJCRwYXJzZUxpbmtVcmwgPSBmdW5jdGlvbih1cmwsIHJlbEhyZWYpIHtcbiAgICBpZiAocmVsSHJlZiAmJiByZWxIcmVmWzBdID09PSAnIycpIHtcbiAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgbGlua3MgdG8gaGFzaCBmcmFnbWVudHM6XG4gICAgICAvLyBrZWVwIHRoZSBvbGQgdXJsIGFuZCBvbmx5IHJlcGxhY2UgdGhlIGhhc2ggZnJhZ21lbnRcbiAgICAgIHRoaXMuaGFzaChyZWxIcmVmLnNsaWNlKDEpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciByZXdyaXR0ZW5Vcmw7XG4gICAgdmFyIGFwcFVybDtcblxuICAgIGlmIChhcHBCYXNlID09IHN0cmlwSGFzaCh1cmwpKSB7XG4gICAgICByZXdyaXR0ZW5VcmwgPSB1cmw7XG4gICAgfSBlbHNlIGlmICgoYXBwVXJsID0gYmVnaW5zV2l0aChhcHBCYXNlTm9GaWxlLCB1cmwpKSkge1xuICAgICAgcmV3cml0dGVuVXJsID0gYXBwQmFzZSArIGhhc2hQcmVmaXggKyBhcHBVcmw7XG4gICAgfSBlbHNlIGlmIChhcHBCYXNlTm9GaWxlID09PSB1cmwgKyAnLycpIHtcbiAgICAgIHJld3JpdHRlblVybCA9IGFwcEJhc2VOb0ZpbGU7XG4gICAgfVxuICAgIGlmIChyZXdyaXR0ZW5VcmwpIHtcbiAgICAgIHRoaXMuJCRwYXJzZShyZXdyaXR0ZW5VcmwpO1xuICAgIH1cbiAgICByZXR1cm4gISFyZXdyaXR0ZW5Vcmw7XG4gIH07XG5cbiAgdGhpcy4kJGNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2VhcmNoID0gdG9LZXlWYWx1ZSh0aGlzLiQkc2VhcmNoKSxcbiAgICAgICAgaGFzaCA9IHRoaXMuJCRoYXNoID8gJyMnICsgZW5jb2RlVXJpU2VnbWVudCh0aGlzLiQkaGFzaCkgOiAnJztcblxuICAgIHRoaXMuJCR1cmwgPSBlbmNvZGVQYXRoKHRoaXMuJCRwYXRoKSArIChzZWFyY2ggPyAnPycgKyBzZWFyY2ggOiAnJykgKyBoYXNoO1xuICAgIC8vIGluY2x1ZGUgaGFzaFByZWZpeCBpbiAkJGFic1VybCB3aGVuICQkdXJsIGlzIGVtcHR5IHNvIElFOCAmIDkgZG8gbm90IHJlbG9hZCBwYWdlIGJlY2F1c2Ugb2YgcmVtb3ZhbCBvZiAnIydcbiAgICB0aGlzLiQkYWJzVXJsID0gYXBwQmFzZSArIGhhc2hQcmVmaXggKyB0aGlzLiQkdXJsO1xuICB9O1xuXG59XG5cblxudmFyIGxvY2F0aW9uUHJvdG90eXBlID0ge1xuXG4gIC8qKlxuICAgKiBBcmUgd2UgaW4gaHRtbDUgbW9kZT9cbiAgICogQHByaXZhdGVcbiAgICovXG4gICQkaHRtbDU6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBIYXMgYW55IGNoYW5nZSBiZWVuIHJlcGxhY2luZz9cbiAgICogQHByaXZhdGVcbiAgICovXG4gICQkcmVwbGFjZTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgJGxvY2F0aW9uI2Fic1VybFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIG9ubHkuXG4gICAqXG4gICAqIFJldHVybiBmdWxsIHVybCByZXByZXNlbnRhdGlvbiB3aXRoIGFsbCBzZWdtZW50cyBlbmNvZGVkIGFjY29yZGluZyB0byBydWxlcyBzcGVjaWZpZWQgaW5cbiAgICogW1JGQyAzOTg2XShodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzOTg2LnR4dCkuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gZnVsbCB1cmxcbiAgICovXG4gIGFic1VybDogbG9jYXRpb25HZXR0ZXIoJyQkYWJzVXJsJyksXG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgJGxvY2F0aW9uI3VybFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIC8gc2V0dGVyLlxuICAgKlxuICAgKiBSZXR1cm4gdXJsIChlLmcuIGAvcGF0aD9hPWIjaGFzaGApIHdoZW4gY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlci5cbiAgICpcbiAgICogQ2hhbmdlIHBhdGgsIHNlYXJjaCBhbmQgaGFzaCwgd2hlbiBjYWxsZWQgd2l0aCBwYXJhbWV0ZXIgYW5kIHJldHVybiBgJGxvY2F0aW9uYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmc9fSB1cmwgTmV3IHVybCB3aXRob3V0IGJhc2UgcHJlZml4IChlLmcuIGAvcGF0aD9hPWIjaGFzaGApXG4gICAqIEByZXR1cm4ge3N0cmluZ30gdXJsXG4gICAqL1xuICB1cmw6IGZ1bmN0aW9uKHVybCkge1xuICAgIGlmIChpc1VuZGVmaW5lZCh1cmwpKVxuICAgICAgcmV0dXJuIHRoaXMuJCR1cmw7XG5cbiAgICB2YXIgbWF0Y2ggPSBQQVRIX01BVENILmV4ZWModXJsKTtcbiAgICBpZiAobWF0Y2hbMV0pIHRoaXMucGF0aChkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbMV0pKTtcbiAgICBpZiAobWF0Y2hbMl0gfHwgbWF0Y2hbMV0pIHRoaXMuc2VhcmNoKG1hdGNoWzNdIHx8ICcnKTtcbiAgICB0aGlzLmhhc2gobWF0Y2hbNV0gfHwgJycpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgJGxvY2F0aW9uI3Byb3RvY29sXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGlzIG1ldGhvZCBpcyBnZXR0ZXIgb25seS5cbiAgICpcbiAgICogUmV0dXJuIHByb3RvY29sIG9mIGN1cnJlbnQgdXJsLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHByb3RvY29sIG9mIGN1cnJlbnQgdXJsXG4gICAqL1xuICBwcm90b2NvbDogbG9jYXRpb25HZXR0ZXIoJyQkcHJvdG9jb2wnKSxcblxuICAvKipcbiAgICogQG5nZG9jIG1ldGhvZFxuICAgKiBAbmFtZSAkbG9jYXRpb24jaG9zdFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIG9ubHkuXG4gICAqXG4gICAqIFJldHVybiBob3N0IG9mIGN1cnJlbnQgdXJsLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGhvc3Qgb2YgY3VycmVudCB1cmwuXG4gICAqL1xuICBob3N0OiBsb2NhdGlvbkdldHRlcignJCRob3N0JyksXG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgJGxvY2F0aW9uI3BvcnRcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoaXMgbWV0aG9kIGlzIGdldHRlciBvbmx5LlxuICAgKlxuICAgKiBSZXR1cm4gcG9ydCBvZiBjdXJyZW50IHVybC5cbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBwb3J0XG4gICAqL1xuICBwb3J0OiBsb2NhdGlvbkdldHRlcignJCRwb3J0JyksXG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgJGxvY2F0aW9uI3BhdGhcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoaXMgbWV0aG9kIGlzIGdldHRlciAvIHNldHRlci5cbiAgICpcbiAgICogUmV0dXJuIHBhdGggb2YgY3VycmVudCB1cmwgd2hlbiBjYWxsZWQgd2l0aG91dCBhbnkgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBDaGFuZ2UgcGF0aCB3aGVuIGNhbGxlZCB3aXRoIHBhcmFtZXRlciBhbmQgcmV0dXJuIGAkbG9jYXRpb25gLlxuICAgKlxuICAgKiBOb3RlOiBQYXRoIHNob3VsZCBhbHdheXMgYmVnaW4gd2l0aCBmb3J3YXJkIHNsYXNoICgvKSwgdGhpcyBtZXRob2Qgd2lsbCBhZGQgdGhlIGZvcndhcmQgc2xhc2hcbiAgICogaWYgaXQgaXMgbWlzc2luZy5cbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nfG51bWJlcik9fSBwYXRoIE5ldyBwYXRoXG4gICAqIEByZXR1cm4ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgcGF0aDogbG9jYXRpb25HZXR0ZXJTZXR0ZXIoJyQkcGF0aCcsIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICBwYXRoID0gcGF0aCAhPT0gbnVsbCA/IHBhdGgudG9TdHJpbmcoKSA6ICcnO1xuICAgIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PSAnLycgPyBwYXRoIDogJy8nICsgcGF0aDtcbiAgfSksXG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgJGxvY2F0aW9uI3NlYXJjaFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIC8gc2V0dGVyLlxuICAgKlxuICAgKiBSZXR1cm4gc2VhcmNoIHBhcnQgKGFzIG9iamVjdCkgb2YgY3VycmVudCB1cmwgd2hlbiBjYWxsZWQgd2l0aG91dCBhbnkgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBDaGFuZ2Ugc2VhcmNoIHBhcnQgd2hlbiBjYWxsZWQgd2l0aCBwYXJhbWV0ZXIgYW5kIHJldHVybiBgJGxvY2F0aW9uYC5cbiAgICpcbiAgICpcbiAgICogYGBganNcbiAgICogLy8gZ2l2ZW4gdXJsIGh0dHA6Ly9leGFtcGxlLmNvbS8jL3NvbWUvcGF0aD9mb289YmFyJmJhej14b3hvXG4gICAqIHZhciBzZWFyY2hPYmplY3QgPSAkbG9jYXRpb24uc2VhcmNoKCk7XG4gICAqIC8vID0+IHtmb286ICdiYXInLCBiYXo6ICd4b3hvJ31cbiAgICpcbiAgICpcbiAgICogLy8gc2V0IGZvbyB0byAneWlwZWUnXG4gICAqICRsb2NhdGlvbi5zZWFyY2goJ2ZvbycsICd5aXBlZScpO1xuICAgKiAvLyA9PiAkbG9jYXRpb25cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdC48c3RyaW5nPnxPYmplY3QuPEFycmF5LjxzdHJpbmc+Pn0gc2VhcmNoIE5ldyBzZWFyY2ggcGFyYW1zIC0gc3RyaW5nIG9yXG4gICAqIGhhc2ggb2JqZWN0LlxuICAgKlxuICAgKiBXaGVuIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IHRoZSBtZXRob2QgYWN0cyBhcyBhIHNldHRlciwgc2V0dGluZyB0aGUgYHNlYXJjaGAgY29tcG9uZW50XG4gICAqIG9mIGAkbG9jYXRpb25gIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuXG4gICAqXG4gICAqIElmIHRoZSBhcmd1bWVudCBpcyBhIGhhc2ggb2JqZWN0IGNvbnRhaW5pbmcgYW4gYXJyYXkgb2YgdmFsdWVzLCB0aGVzZSB2YWx1ZXMgd2lsbCBiZSBlbmNvZGVkXG4gICAqIGFzIGR1cGxpY2F0ZSBzZWFyY2ggcGFyYW1ldGVycyBpbiB0aGUgdXJsLlxuICAgKlxuICAgKiBAcGFyYW0geyhzdHJpbmd8TnVtYmVyfEFycmF5PHN0cmluZz58Ym9vbGVhbik9fSBwYXJhbVZhbHVlIElmIGBzZWFyY2hgIGlzIGEgc3RyaW5nIG9yIG51bWJlciwgdGhlbiBgcGFyYW1WYWx1ZWBcbiAgICogd2lsbCBvdmVycmlkZSBvbmx5IGEgc2luZ2xlIHNlYXJjaCBwcm9wZXJ0eS5cbiAgICpcbiAgICogSWYgYHBhcmFtVmFsdWVgIGlzIGFuIGFycmF5LCBpdCB3aWxsIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBvZiB0aGUgYHNlYXJjaGAgY29tcG9uZW50IG9mXG4gICAqIGAkbG9jYXRpb25gIHNwZWNpZmllZCB2aWEgdGhlIGZpcnN0IGFyZ3VtZW50LlxuICAgKlxuICAgKiBJZiBgcGFyYW1WYWx1ZWAgaXMgYG51bGxgLCB0aGUgcHJvcGVydHkgc3BlY2lmaWVkIHZpYSB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBkZWxldGVkLlxuICAgKlxuICAgKiBJZiBgcGFyYW1WYWx1ZWAgaXMgYHRydWVgLCB0aGUgcHJvcGVydHkgc3BlY2lmaWVkIHZpYSB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBhZGRlZCB3aXRoIG5vXG4gICAqIHZhbHVlIG5vciB0cmFpbGluZyBlcXVhbCBzaWduLlxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IElmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cyByZXR1cm5zIHRoZSBwYXJzZWQgYHNlYXJjaGAgb2JqZWN0LiBJZiBjYWxsZWQgd2l0aFxuICAgKiBvbmUgb3IgbW9yZSBhcmd1bWVudHMgcmV0dXJucyBgJGxvY2F0aW9uYCBvYmplY3QgaXRzZWxmLlxuICAgKi9cbiAgc2VhcmNoOiBmdW5jdGlvbihzZWFyY2gsIHBhcmFtVmFsdWUpIHtcbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgcmV0dXJuIHRoaXMuJCRzZWFyY2g7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIGlmIChpc1N0cmluZyhzZWFyY2gpIHx8IGlzTnVtYmVyKHNlYXJjaCkpIHtcbiAgICAgICAgICBzZWFyY2ggPSBzZWFyY2gudG9TdHJpbmcoKTtcbiAgICAgICAgICB0aGlzLiQkc2VhcmNoID0gcGFyc2VLZXlWYWx1ZShzZWFyY2gpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNlYXJjaCkpIHtcbiAgICAgICAgICBzZWFyY2ggPSBjb3B5KHNlYXJjaCwge30pO1xuICAgICAgICAgIC8vIHJlbW92ZSBvYmplY3QgdW5kZWZpbmVkIG9yIG51bGwgcHJvcGVydGllc1xuICAgICAgICAgIGZvckVhY2goc2VhcmNoLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgZGVsZXRlIHNlYXJjaFtrZXldO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy4kJHNlYXJjaCA9IHNlYXJjaDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyAkbG9jYXRpb25NaW5FcnIoJ2lzcmNoYXJnJyxcbiAgICAgICAgICAgICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBvZiB0aGUgYCRsb2NhdGlvbiNzZWFyY2goKWAgY2FsbCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIG9iamVjdC4nKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChwYXJhbVZhbHVlKSB8fCBwYXJhbVZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuJCRzZWFyY2hbc2VhcmNoXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiQkc2VhcmNoW3NlYXJjaF0gPSBwYXJhbVZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy4kJGNvbXBvc2UoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICAvKipcbiAgICogQG5nZG9jIG1ldGhvZFxuICAgKiBAbmFtZSAkbG9jYXRpb24jaGFzaFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIC8gc2V0dGVyLlxuICAgKlxuICAgKiBSZXR1cm4gaGFzaCBmcmFnbWVudCB3aGVuIGNhbGxlZCB3aXRob3V0IGFueSBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIENoYW5nZSBoYXNoIGZyYWdtZW50IHdoZW4gY2FsbGVkIHdpdGggcGFyYW1ldGVyIGFuZCByZXR1cm4gYCRsb2NhdGlvbmAuXG4gICAqXG4gICAqIEBwYXJhbSB7KHN0cmluZ3xudW1iZXIpPX0gaGFzaCBOZXcgaGFzaCBmcmFnbWVudFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGhhc2hcbiAgICovXG4gIGhhc2g6IGxvY2F0aW9uR2V0dGVyU2V0dGVyKCckJGhhc2gnLCBmdW5jdGlvbihoYXNoKSB7XG4gICAgcmV0dXJuIGhhc2ggIT09IG51bGwgPyBoYXNoLnRvU3RyaW5nKCkgOiAnJztcbiAgfSksXG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgJGxvY2F0aW9uI3JlcGxhY2VcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIElmIGNhbGxlZCwgYWxsIGNoYW5nZXMgdG8gJGxvY2F0aW9uIGR1cmluZyBjdXJyZW50IGAkZGlnZXN0YCB3aWxsIGJlIHJlcGxhY2luZyBjdXJyZW50IGhpc3RvcnlcbiAgICogcmVjb3JkLCBpbnN0ZWFkIG9mIGFkZGluZyBuZXcgb25lLlxuICAgKi9cbiAgcmVwbGFjZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy4kJHJlcGxhY2UgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59O1xuXG5mb3JFYWNoKFtMb2NhdGlvbkhhc2hiYW5nSW5IdG1sNVVybCwgTG9jYXRpb25IYXNoYmFuZ1VybCwgTG9jYXRpb25IdG1sNVVybF0sIGZ1bmN0aW9uKExvY2F0aW9uKSB7XG4gIExvY2F0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUobG9jYXRpb25Qcm90b3R5cGUpO1xuXG4gIC8qKlxuICAgKiBAbmdkb2MgbWV0aG9kXG4gICAqIEBuYW1lICRsb2NhdGlvbiNzdGF0ZVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIC8gc2V0dGVyLlxuICAgKlxuICAgKiBSZXR1cm4gdGhlIGhpc3Rvcnkgc3RhdGUgb2JqZWN0IHdoZW4gY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlci5cbiAgICpcbiAgICogQ2hhbmdlIHRoZSBoaXN0b3J5IHN0YXRlIG9iamVjdCB3aGVuIGNhbGxlZCB3aXRoIG9uZSBwYXJhbWV0ZXIgYW5kIHJldHVybiBgJGxvY2F0aW9uYC5cbiAgICogVGhlIHN0YXRlIG9iamVjdCBpcyBsYXRlciBwYXNzZWQgdG8gYHB1c2hTdGF0ZWAgb3IgYHJlcGxhY2VTdGF0ZWAuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWV0aG9kIGlzIHN1cHBvcnRlZCBvbmx5IGluIEhUTUw1IG1vZGUgYW5kIG9ubHkgaW4gYnJvd3NlcnMgc3VwcG9ydGluZ1xuICAgKiB0aGUgSFRNTDUgSGlzdG9yeSBBUEkgKGkuZS4gbWV0aG9kcyBgcHVzaFN0YXRlYCBhbmQgYHJlcGxhY2VTdGF0ZWApLiBJZiB5b3UgbmVlZCB0byBzdXBwb3J0XG4gICAqIG9sZGVyIGJyb3dzZXJzIChsaWtlIElFOSBvciBBbmRyb2lkIDwgNC4wKSwgZG9uJ3QgdXNlIHRoaXMgbWV0aG9kLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdD19IHN0YXRlIFN0YXRlIG9iamVjdCBmb3IgcHVzaFN0YXRlIG9yIHJlcGxhY2VTdGF0ZVxuICAgKiBAcmV0dXJuIHtvYmplY3R9IHN0YXRlXG4gICAqL1xuICBMb2NhdGlvbi5wcm90b3R5cGUuc3RhdGUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aClcbiAgICAgIHJldHVybiB0aGlzLiQkc3RhdGU7XG5cbiAgICBpZiAoTG9jYXRpb24gIT09IExvY2F0aW9uSHRtbDVVcmwgfHwgIXRoaXMuJCRodG1sNSkge1xuICAgICAgdGhyb3cgJGxvY2F0aW9uTWluRXJyKCdub3N0YXRlJywgJ0hpc3RvcnkgQVBJIHN0YXRlIHN1cHBvcnQgaXMgYXZhaWxhYmxlIG9ubHkgJyArXG4gICAgICAgICdpbiBIVE1MNSBtb2RlIGFuZCBvbmx5IGluIGJyb3dzZXJzIHN1cHBvcnRpbmcgSFRNTDUgSGlzdG9yeSBBUEknKTtcbiAgICB9XG4gICAgLy8gVGhlIHVzZXIgbWlnaHQgbW9kaWZ5IGBzdGF0ZU9iamVjdGAgYWZ0ZXIgaW52b2tpbmcgYCRsb2NhdGlvbi5zdGF0ZShzdGF0ZU9iamVjdClgXG4gICAgLy8gYnV0IHdlJ3JlIGNoYW5naW5nIHRoZSAkJHN0YXRlIHJlZmVyZW5jZSB0byAkYnJvd3Nlci5zdGF0ZSgpIGR1cmluZyB0aGUgJGRpZ2VzdFxuICAgIC8vIHNvIHRoZSBtb2RpZmljYXRpb24gd2luZG93IGlzIG5hcnJvdy5cbiAgICB0aGlzLiQkc3RhdGUgPSBpc1VuZGVmaW5lZChzdGF0ZSkgPyBudWxsIDogc3RhdGU7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbn0pO1xuXG5cbmZ1bmN0aW9uIGxvY2F0aW9uR2V0dGVyKHByb3BlcnR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpc1twcm9wZXJ0eV07XG4gIH07XG59XG5cblxuZnVuY3Rpb24gbG9jYXRpb25HZXR0ZXJTZXR0ZXIocHJvcGVydHksIHByZXByb2Nlc3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSlcbiAgICAgIHJldHVybiB0aGlzW3Byb3BlcnR5XTtcblxuICAgIHRoaXNbcHJvcGVydHldID0gcHJlcHJvY2Vzcyh2YWx1ZSk7XG4gICAgdGhpcy4kJGNvbXBvc2UoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xufVxuXG5cbi8qKlxuICogQG5nZG9jIHNlcnZpY2VcbiAqIEBuYW1lICRsb2NhdGlvblxuICpcbiAqIEByZXF1aXJlcyAkcm9vdEVsZW1lbnRcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSAkbG9jYXRpb24gc2VydmljZSBwYXJzZXMgdGhlIFVSTCBpbiB0aGUgYnJvd3NlciBhZGRyZXNzIGJhciAoYmFzZWQgb24gdGhlXG4gKiBbd2luZG93LmxvY2F0aW9uXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi93aW5kb3cubG9jYXRpb24pKSBhbmQgbWFrZXMgdGhlIFVSTFxuICogYXZhaWxhYmxlIHRvIHlvdXIgYXBwbGljYXRpb24uIENoYW5nZXMgdG8gdGhlIFVSTCBpbiB0aGUgYWRkcmVzcyBiYXIgYXJlIHJlZmxlY3RlZCBpbnRvXG4gKiAkbG9jYXRpb24gc2VydmljZSBhbmQgY2hhbmdlcyB0byAkbG9jYXRpb24gYXJlIHJlZmxlY3RlZCBpbnRvIHRoZSBicm93c2VyIGFkZHJlc3MgYmFyLlxuICpcbiAqICoqVGhlICRsb2NhdGlvbiBzZXJ2aWNlOioqXG4gKlxuICogLSBFeHBvc2VzIHRoZSBjdXJyZW50IFVSTCBpbiB0aGUgYnJvd3NlciBhZGRyZXNzIGJhciwgc28geW91IGNhblxuICogICAtIFdhdGNoIGFuZCBvYnNlcnZlIHRoZSBVUkwuXG4gKiAgIC0gQ2hhbmdlIHRoZSBVUkwuXG4gKiAtIFN5bmNocm9uaXplcyB0aGUgVVJMIHdpdGggdGhlIGJyb3dzZXIgd2hlbiB0aGUgdXNlclxuICogICAtIENoYW5nZXMgdGhlIGFkZHJlc3MgYmFyLlxuICogICAtIENsaWNrcyB0aGUgYmFjayBvciBmb3J3YXJkIGJ1dHRvbiAob3IgY2xpY2tzIGEgSGlzdG9yeSBsaW5rKS5cbiAqICAgLSBDbGlja3Mgb24gYSBsaW5rLlxuICogLSBSZXByZXNlbnRzIHRoZSBVUkwgb2JqZWN0IGFzIGEgc2V0IG9mIG1ldGhvZHMgKHByb3RvY29sLCBob3N0LCBwb3J0LCBwYXRoLCBzZWFyY2gsIGhhc2gpLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB7QGxpbmsgZ3VpZGUvJGxvY2F0aW9uIERldmVsb3BlciBHdWlkZTogVXNpbmcgJGxvY2F0aW9ufVxuICovXG5cbi8qKlxuICogQG5nZG9jIHByb3ZpZGVyXG4gKiBAbmFtZSAkbG9jYXRpb25Qcm92aWRlclxuICogQGRlc2NyaXB0aW9uXG4gKiBVc2UgdGhlIGAkbG9jYXRpb25Qcm92aWRlcmAgdG8gY29uZmlndXJlIGhvdyB0aGUgYXBwbGljYXRpb24gZGVlcCBsaW5raW5nIHBhdGhzIGFyZSBzdG9yZWQuXG4gKi9cbmZ1bmN0aW9uICRMb2NhdGlvblByb3ZpZGVyKCkge1xuICB2YXIgaGFzaFByZWZpeCA9ICcnLFxuICAgICAgaHRtbDVNb2RlID0ge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgcmVxdWlyZUJhc2U6IHRydWUsXG4gICAgICAgIHJld3JpdGVMaW5rczogdHJ1ZVxuICAgICAgfTtcblxuICAvKipcbiAgICogQG5nZG9jIG1ldGhvZFxuICAgKiBAbmFtZSAkbG9jYXRpb25Qcm92aWRlciNoYXNoUHJlZml4XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZz19IHByZWZpeCBQcmVmaXggZm9yIGhhc2ggcGFydCAoY29udGFpbmluZyBwYXRoIGFuZCBzZWFyY2gpXG4gICAqIEByZXR1cm5zIHsqfSBjdXJyZW50IHZhbHVlIGlmIHVzZWQgYXMgZ2V0dGVyIG9yIGl0c2VsZiAoY2hhaW5pbmcpIGlmIHVzZWQgYXMgc2V0dGVyXG4gICAqL1xuICB0aGlzLmhhc2hQcmVmaXggPSBmdW5jdGlvbihwcmVmaXgpIHtcbiAgICBpZiAoaXNEZWZpbmVkKHByZWZpeCkpIHtcbiAgICAgIGhhc2hQcmVmaXggPSBwcmVmaXg7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGhhc2hQcmVmaXg7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAbmdkb2MgbWV0aG9kXG4gICAqIEBuYW1lICRsb2NhdGlvblByb3ZpZGVyI2h0bWw1TW9kZVxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQHBhcmFtIHsoYm9vbGVhbnxPYmplY3QpPX0gbW9kZSBJZiBib29sZWFuLCBzZXRzIGBodG1sNU1vZGUuZW5hYmxlZGAgdG8gdmFsdWUuXG4gICAqICAgSWYgb2JqZWN0LCBzZXRzIGBlbmFibGVkYCwgYHJlcXVpcmVCYXNlYCBhbmQgYHJld3JpdGVMaW5rc2AgdG8gcmVzcGVjdGl2ZSB2YWx1ZXMuIFN1cHBvcnRlZFxuICAgKiAgIHByb3BlcnRpZXM6XG4gICAqICAgLSAqKmVuYWJsZWQqKiDigJMgYHtib29sZWFufWAg4oCTIChkZWZhdWx0OiBmYWxzZSkgSWYgdHJ1ZSwgd2lsbCByZWx5IG9uIGBoaXN0b3J5LnB1c2hTdGF0ZWAgdG9cbiAgICogICAgIGNoYW5nZSB1cmxzIHdoZXJlIHN1cHBvcnRlZC4gV2lsbCBmYWxsIGJhY2sgdG8gaGFzaC1wcmVmaXhlZCBwYXRocyBpbiBicm93c2VycyB0aGF0IGRvIG5vdFxuICAgKiAgICAgc3VwcG9ydCBgcHVzaFN0YXRlYC5cbiAgICogICAtICoqcmVxdWlyZUJhc2UqKiAtIGB7Ym9vbGVhbn1gIC0gKGRlZmF1bHQ6IGB0cnVlYCkgV2hlbiBodG1sNU1vZGUgaXMgZW5hYmxlZCwgc3BlY2lmaWVzXG4gICAqICAgICB3aGV0aGVyIG9yIG5vdCBhIDxiYXNlPiB0YWcgaXMgcmVxdWlyZWQgdG8gYmUgcHJlc2VudC4gSWYgYGVuYWJsZWRgIGFuZCBgcmVxdWlyZUJhc2VgIGFyZVxuICAgKiAgICAgdHJ1ZSwgYW5kIGEgYmFzZSB0YWcgaXMgbm90IHByZXNlbnQsIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duIHdoZW4gYCRsb2NhdGlvbmAgaXMgaW5qZWN0ZWQuXG4gICAqICAgICBTZWUgdGhlIHtAbGluayBndWlkZS8kbG9jYXRpb24gJGxvY2F0aW9uIGd1aWRlIGZvciBtb3JlIGluZm9ybWF0aW9ufVxuICAgKiAgIC0gKipyZXdyaXRlTGlua3MqKiAtIGB7Ym9vbGVhbn1gIC0gKGRlZmF1bHQ6IGB0cnVlYCkgV2hlbiBodG1sNU1vZGUgaXMgZW5hYmxlZCxcbiAgICogICAgIGVuYWJsZXMvZGlzYWJsZXMgdXJsIHJld3JpdGluZyBmb3IgcmVsYXRpdmUgbGlua3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IGh0bWw1TW9kZSBvYmplY3QgaWYgdXNlZCBhcyBnZXR0ZXIgb3IgaXRzZWxmIChjaGFpbmluZykgaWYgdXNlZCBhcyBzZXR0ZXJcbiAgICovXG4gIHRoaXMuaHRtbDVNb2RlID0gZnVuY3Rpb24obW9kZSkge1xuICAgIGlmIChpc0Jvb2xlYW4obW9kZSkpIHtcbiAgICAgIGh0bWw1TW9kZS5lbmFibGVkID0gbW9kZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QobW9kZSkpIHtcblxuICAgICAgaWYgKGlzQm9vbGVhbihtb2RlLmVuYWJsZWQpKSB7XG4gICAgICAgIGh0bWw1TW9kZS5lbmFibGVkID0gbW9kZS5lbmFibGVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNCb29sZWFuKG1vZGUucmVxdWlyZUJhc2UpKSB7XG4gICAgICAgIGh0bWw1TW9kZS5yZXF1aXJlQmFzZSA9IG1vZGUucmVxdWlyZUJhc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0Jvb2xlYW4obW9kZS5yZXdyaXRlTGlua3MpKSB7XG4gICAgICAgIGh0bWw1TW9kZS5yZXdyaXRlTGlua3MgPSBtb2RlLnJld3JpdGVMaW5rcztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBodG1sNU1vZGU7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAbmdkb2MgZXZlbnRcbiAgICogQG5hbWUgJGxvY2F0aW9uIyRsb2NhdGlvbkNoYW5nZVN0YXJ0XG4gICAqIEBldmVudFR5cGUgYnJvYWRjYXN0IG9uIHJvb3Qgc2NvcGVcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEJyb2FkY2FzdGVkIGJlZm9yZSBhIFVSTCB3aWxsIGNoYW5nZS5cbiAgICpcbiAgICogVGhpcyBjaGFuZ2UgY2FuIGJlIHByZXZlbnRlZCBieSBjYWxsaW5nXG4gICAqIGBwcmV2ZW50RGVmYXVsdGAgbWV0aG9kIG9mIHRoZSBldmVudC4gU2VlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRvbn0gZm9yIG1vcmVcbiAgICogZGV0YWlscyBhYm91dCBldmVudCBvYmplY3QuIFVwb24gc3VjY2Vzc2Z1bCBjaGFuZ2VcbiAgICoge0BsaW5rIG5nLiRsb2NhdGlvbiMkbG9jYXRpb25DaGFuZ2VTdWNjZXNzICRsb2NhdGlvbkNoYW5nZVN1Y2Nlc3N9IGlzIGZpcmVkLlxuICAgKlxuICAgKiBUaGUgYG5ld1N0YXRlYCBhbmQgYG9sZFN0YXRlYCBwYXJhbWV0ZXJzIG1heSBiZSBkZWZpbmVkIG9ubHkgaW4gSFRNTDUgbW9kZSBhbmQgd2hlblxuICAgKiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGUgSFRNTDUgSGlzdG9yeSBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhbmd1bGFyRXZlbnQgU3ludGhldGljIGV2ZW50IG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld1VybCBOZXcgVVJMXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb2xkVXJsIFVSTCB0aGF0IHdhcyBiZWZvcmUgaXQgd2FzIGNoYW5nZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmV3U3RhdGUgTmV3IGhpc3Rvcnkgc3RhdGUgb2JqZWN0XG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb2xkU3RhdGUgSGlzdG9yeSBzdGF0ZSBvYmplY3QgdGhhdCB3YXMgYmVmb3JlIGl0IHdhcyBjaGFuZ2VkLlxuICAgKi9cblxuICAvKipcbiAgICogQG5nZG9jIGV2ZW50XG4gICAqIEBuYW1lICRsb2NhdGlvbiMkbG9jYXRpb25DaGFuZ2VTdWNjZXNzXG4gICAqIEBldmVudFR5cGUgYnJvYWRjYXN0IG9uIHJvb3Qgc2NvcGVcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEJyb2FkY2FzdGVkIGFmdGVyIGEgVVJMIHdhcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBUaGUgYG5ld1N0YXRlYCBhbmQgYG9sZFN0YXRlYCBwYXJhbWV0ZXJzIG1heSBiZSBkZWZpbmVkIG9ubHkgaW4gSFRNTDUgbW9kZSBhbmQgd2hlblxuICAgKiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGUgSFRNTDUgSGlzdG9yeSBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhbmd1bGFyRXZlbnQgU3ludGhldGljIGV2ZW50IG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld1VybCBOZXcgVVJMXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb2xkVXJsIFVSTCB0aGF0IHdhcyBiZWZvcmUgaXQgd2FzIGNoYW5nZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmV3U3RhdGUgTmV3IGhpc3Rvcnkgc3RhdGUgb2JqZWN0XG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb2xkU3RhdGUgSGlzdG9yeSBzdGF0ZSBvYmplY3QgdGhhdCB3YXMgYmVmb3JlIGl0IHdhcyBjaGFuZ2VkLlxuICAgKi9cblxuICB0aGlzLiRnZXQgPSBbJyRyb290U2NvcGUnLCAnJGJyb3dzZXInLCAnJHNuaWZmZXInLCAnJHJvb3RFbGVtZW50JyxcbiAgICAgIGZ1bmN0aW9uKCRyb290U2NvcGUsICRicm93c2VyLCAkc25pZmZlciwgJHJvb3RFbGVtZW50KSB7XG4gICAgdmFyICRsb2NhdGlvbixcbiAgICAgICAgTG9jYXRpb25Nb2RlLFxuICAgICAgICBiYXNlSHJlZiA9ICRicm93c2VyLmJhc2VIcmVmKCksIC8vIGlmIGJhc2VbaHJlZl0gaXMgdW5kZWZpbmVkLCBpdCBkZWZhdWx0cyB0byAnJ1xuICAgICAgICBpbml0aWFsVXJsID0gJGJyb3dzZXIudXJsKCksXG4gICAgICAgIGFwcEJhc2U7XG5cbiAgICBpZiAoaHRtbDVNb2RlLmVuYWJsZWQpIHtcbiAgICAgIGlmICghYmFzZUhyZWYgJiYgaHRtbDVNb2RlLnJlcXVpcmVCYXNlKSB7XG4gICAgICAgIHRocm93ICRsb2NhdGlvbk1pbkVycignbm9iYXNlJyxcbiAgICAgICAgICBcIiRsb2NhdGlvbiBpbiBIVE1MNSBtb2RlIHJlcXVpcmVzIGEgPGJhc2U+IHRhZyB0byBiZSBwcmVzZW50IVwiKTtcbiAgICAgIH1cbiAgICAgIGFwcEJhc2UgPSBzZXJ2ZXJCYXNlKGluaXRpYWxVcmwpICsgKGJhc2VIcmVmIHx8ICcvJyk7XG4gICAgICBMb2NhdGlvbk1vZGUgPSAkc25pZmZlci5oaXN0b3J5ID8gTG9jYXRpb25IdG1sNVVybCA6IExvY2F0aW9uSGFzaGJhbmdJbkh0bWw1VXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBCYXNlID0gc3RyaXBIYXNoKGluaXRpYWxVcmwpO1xuICAgICAgTG9jYXRpb25Nb2RlID0gTG9jYXRpb25IYXNoYmFuZ1VybDtcbiAgICB9XG4gICAgJGxvY2F0aW9uID0gbmV3IExvY2F0aW9uTW9kZShhcHBCYXNlLCAnIycgKyBoYXNoUHJlZml4KTtcbiAgICAkbG9jYXRpb24uJCRwYXJzZUxpbmtVcmwoaW5pdGlhbFVybCwgaW5pdGlhbFVybCk7XG5cbiAgICAkbG9jYXRpb24uJCRzdGF0ZSA9ICRicm93c2VyLnN0YXRlKCk7XG5cbiAgICB2YXIgSUdOT1JFX1VSSV9SRUdFWFAgPSAvXlxccyooamF2YXNjcmlwdHxtYWlsdG8pOi9pO1xuXG4gICAgZnVuY3Rpb24gc2V0QnJvd3NlclVybFdpdGhGYWxsYmFjayh1cmwsIHJlcGxhY2UsIHN0YXRlKSB7XG4gICAgICB2YXIgb2xkVXJsID0gJGxvY2F0aW9uLnVybCgpO1xuICAgICAgdmFyIG9sZFN0YXRlID0gJGxvY2F0aW9uLiQkc3RhdGU7XG4gICAgICB0cnkge1xuICAgICAgICAkYnJvd3Nlci51cmwodXJsLCByZXBsYWNlLCBzdGF0ZSk7XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlICRsb2NhdGlvbi5zdGF0ZSgpIHJldHVybnMgcmVmZXJlbnRpYWxseSBpZGVudGljYWwgKG5vdCBqdXN0IGRlZXBseSBlcXVhbClcbiAgICAgICAgLy8gc3RhdGUgb2JqZWN0OyB0aGlzIG1ha2VzIHBvc3NpYmxlIHF1aWNrIGNoZWNraW5nIGlmIHRoZSBzdGF0ZSBjaGFuZ2VkIGluIHRoZSBkaWdlc3RcbiAgICAgICAgLy8gbG9vcC4gQ2hlY2tpbmcgZGVlcCBlcXVhbGl0eSB3b3VsZCBiZSB0b28gZXhwZW5zaXZlLlxuICAgICAgICAkbG9jYXRpb24uJCRzdGF0ZSA9ICRicm93c2VyLnN0YXRlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIFJlc3RvcmUgb2xkIHZhbHVlcyBpZiBwdXNoU3RhdGUgZmFpbHNcbiAgICAgICAgJGxvY2F0aW9uLnVybChvbGRVcmwpO1xuICAgICAgICAkbG9jYXRpb24uJCRzdGF0ZSA9IG9sZFN0YXRlO1xuXG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJHJvb3RFbGVtZW50Lm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAvLyBUT0RPKHZvanRhKTogcmV3cml0ZSBsaW5rIHdoZW4gb3BlbmluZyBpbiBuZXcgdGFiL3dpbmRvdyAoaW4gbGVnYWN5IGJyb3dzZXIpXG4gICAgICAvLyBjdXJyZW50bHkgd2Ugb3BlbiBuaWNlIHVybCBsaW5rIGFuZCByZWRpcmVjdCB0aGVuXG5cbiAgICAgIGlmICghaHRtbDVNb2RlLnJld3JpdGVMaW5rcyB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQud2hpY2ggPT0gMikgcmV0dXJuO1xuXG4gICAgICB2YXIgZWxtID0ganFMaXRlKGV2ZW50LnRhcmdldCk7XG5cbiAgICAgIC8vIHRyYXZlcnNlIHRoZSBET00gdXAgdG8gZmluZCBmaXJzdCBBIHRhZ1xuICAgICAgd2hpbGUgKG5vZGVOYW1lXyhlbG1bMF0pICE9PSAnYScpIHtcbiAgICAgICAgLy8gaWdub3JlIHJld3JpdGluZyBpZiBubyBBIHRhZyAocmVhY2hlZCByb290IGVsZW1lbnQsIG9yIG5vIHBhcmVudCAtIHJlbW92ZWQgZnJvbSBkb2N1bWVudClcbiAgICAgICAgaWYgKGVsbVswXSA9PT0gJHJvb3RFbGVtZW50WzBdIHx8ICEoZWxtID0gZWxtLnBhcmVudCgpKVswXSkgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWJzSHJlZiA9IGVsbS5wcm9wKCdocmVmJyk7XG4gICAgICAvLyBnZXQgdGhlIGFjdHVhbCBocmVmIGF0dHJpYnV0ZSAtIHNlZVxuICAgICAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2RkMzQ3MTQ4KHY9dnMuODUpLmFzcHhcbiAgICAgIHZhciByZWxIcmVmID0gZWxtLmF0dHIoJ2hyZWYnKSB8fCBlbG0uYXR0cigneGxpbms6aHJlZicpO1xuXG4gICAgICBpZiAoaXNPYmplY3QoYWJzSHJlZikgJiYgYWJzSHJlZi50b1N0cmluZygpID09PSAnW29iamVjdCBTVkdBbmltYXRlZFN0cmluZ10nKSB7XG4gICAgICAgIC8vIFNWR0FuaW1hdGVkU3RyaW5nLmFuaW1WYWwgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBTVkdBbmltYXRlZFN0cmluZy5iYXNlVmFsLCB1bmxlc3MgZHVyaW5nXG4gICAgICAgIC8vIGFuIGFuaW1hdGlvbi5cbiAgICAgICAgYWJzSHJlZiA9IHVybFJlc29sdmUoYWJzSHJlZi5hbmltVmFsKS5ocmVmO1xuICAgICAgfVxuXG4gICAgICAvLyBJZ25vcmUgd2hlbiB1cmwgaXMgc3RhcnRlZCB3aXRoIGphdmFzY3JpcHQ6IG9yIG1haWx0bzpcbiAgICAgIGlmIChJR05PUkVfVVJJX1JFR0VYUC50ZXN0KGFic0hyZWYpKSByZXR1cm47XG5cbiAgICAgIGlmIChhYnNIcmVmICYmICFlbG0uYXR0cigndGFyZ2V0JykgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIGlmICgkbG9jYXRpb24uJCRwYXJzZUxpbmtVcmwoYWJzSHJlZiwgcmVsSHJlZikpIHtcbiAgICAgICAgICAvLyBXZSBkbyBhIHByZXZlbnREZWZhdWx0IGZvciBhbGwgdXJscyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBhbmd1bGFyIGFwcGxpY2F0aW9uLFxuICAgICAgICAgIC8vIGluIGh0bWw1bW9kZSBhbmQgYWxzbyB3aXRob3V0LCBzbyB0aGF0IHdlIGFyZSBhYmxlIHRvIGFib3J0IG5hdmlnYXRpb24gd2l0aG91dFxuICAgICAgICAgIC8vIGdldHRpbmcgZG91YmxlIGVudHJpZXMgaW4gdGhlIGxvY2F0aW9uIGhpc3RvcnkuXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAvLyB1cGRhdGUgbG9jYXRpb24gbWFudWFsbHlcbiAgICAgICAgICBpZiAoJGxvY2F0aW9uLmFic1VybCgpICE9ICRicm93c2VyLnVybCgpKSB7XG4gICAgICAgICAgICAkcm9vdFNjb3BlLiRhcHBseSgpO1xuICAgICAgICAgICAgLy8gaGFjayB0byB3b3JrIGFyb3VuZCBGRjYgYnVnIDY4NDIwOCB3aGVuIHNjZW5hcmlvIHJ1bm5lciBjbGlja3Mgb24gbGlua3NcbiAgICAgICAgICAgIHdpbmRvdy5hbmd1bGFyWydmZi02ODQyMDgtcHJldmVudERlZmF1bHQnXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cblxuICAgIC8vIHJld3JpdGUgaGFzaGJhbmcgdXJsIDw+IGh0bWw1IHVybFxuICAgIGlmICgkbG9jYXRpb24uYWJzVXJsKCkgIT0gaW5pdGlhbFVybCkge1xuICAgICAgJGJyb3dzZXIudXJsKCRsb2NhdGlvbi5hYnNVcmwoKSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdmFyIGluaXRpYWxpemluZyA9IHRydWU7XG5cbiAgICAvLyB1cGRhdGUgJGxvY2F0aW9uIHdoZW4gJGJyb3dzZXIgdXJsIGNoYW5nZXNcbiAgICAkYnJvd3Nlci5vblVybENoYW5nZShmdW5jdGlvbihuZXdVcmwsIG5ld1N0YXRlKSB7XG4gICAgICAkcm9vdFNjb3BlLiRldmFsQXN5bmMoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBvbGRVcmwgPSAkbG9jYXRpb24uYWJzVXJsKCk7XG4gICAgICAgIHZhciBvbGRTdGF0ZSA9ICRsb2NhdGlvbi4kJHN0YXRlO1xuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZDtcblxuICAgICAgICAkbG9jYXRpb24uJCRwYXJzZShuZXdVcmwpO1xuICAgICAgICAkbG9jYXRpb24uJCRzdGF0ZSA9IG5ld1N0YXRlO1xuXG4gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSAkcm9vdFNjb3BlLiRicm9hZGNhc3QoJyRsb2NhdGlvbkNoYW5nZVN0YXJ0JywgbmV3VXJsLCBvbGRVcmwsXG4gICAgICAgICAgICBuZXdTdGF0ZSwgb2xkU3RhdGUpLmRlZmF1bHRQcmV2ZW50ZWQ7XG5cbiAgICAgICAgLy8gaWYgdGhlIGxvY2F0aW9uIHdhcyBjaGFuZ2VkIGJ5IGEgYCRsb2NhdGlvbkNoYW5nZVN0YXJ0YCBoYW5kbGVyIHRoZW4gc3RvcFxuICAgICAgICAvLyBwcm9jZXNzaW5nIHRoaXMgbG9jYXRpb24gY2hhbmdlXG4gICAgICAgIGlmICgkbG9jYXRpb24uYWJzVXJsKCkgIT09IG5ld1VybCkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgJGxvY2F0aW9uLiQkcGFyc2Uob2xkVXJsKTtcbiAgICAgICAgICAkbG9jYXRpb24uJCRzdGF0ZSA9IG9sZFN0YXRlO1xuICAgICAgICAgIHNldEJyb3dzZXJVcmxXaXRoRmFsbGJhY2sob2xkVXJsLCBmYWxzZSwgb2xkU3RhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGluaXRpYWxpemluZyA9IGZhbHNlO1xuICAgICAgICAgIGFmdGVyTG9jYXRpb25DaGFuZ2Uob2xkVXJsLCBvbGRTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCEkcm9vdFNjb3BlLiQkcGhhc2UpICRyb290U2NvcGUuJGRpZ2VzdCgpO1xuICAgIH0pO1xuXG4gICAgLy8gdXBkYXRlIGJyb3dzZXJcbiAgICAkcm9vdFNjb3BlLiR3YXRjaChmdW5jdGlvbiAkbG9jYXRpb25XYXRjaCgpIHtcbiAgICAgIHZhciBvbGRVcmwgPSAkYnJvd3Nlci51cmwoKTtcbiAgICAgIHZhciBvbGRTdGF0ZSA9ICRicm93c2VyLnN0YXRlKCk7XG4gICAgICB2YXIgY3VycmVudFJlcGxhY2UgPSAkbG9jYXRpb24uJCRyZXBsYWNlO1xuICAgICAgdmFyIHVybE9yU3RhdGVDaGFuZ2VkID0gb2xkVXJsICE9PSAkbG9jYXRpb24uYWJzVXJsKCkgfHxcbiAgICAgICAgKCRsb2NhdGlvbi4kJGh0bWw1ICYmICRzbmlmZmVyLmhpc3RvcnkgJiYgb2xkU3RhdGUgIT09ICRsb2NhdGlvbi4kJHN0YXRlKTtcblxuICAgICAgaWYgKGluaXRpYWxpemluZyB8fCB1cmxPclN0YXRlQ2hhbmdlZCkge1xuICAgICAgICBpbml0aWFsaXppbmcgPSBmYWxzZTtcblxuICAgICAgICAkcm9vdFNjb3BlLiRldmFsQXN5bmMoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIG5ld1VybCA9ICRsb2NhdGlvbi5hYnNVcmwoKTtcbiAgICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9ICRyb290U2NvcGUuJGJyb2FkY2FzdCgnJGxvY2F0aW9uQ2hhbmdlU3RhcnQnLCBuZXdVcmwsIG9sZFVybCxcbiAgICAgICAgICAgICAgJGxvY2F0aW9uLiQkc3RhdGUsIG9sZFN0YXRlKS5kZWZhdWx0UHJldmVudGVkO1xuXG4gICAgICAgICAgLy8gaWYgdGhlIGxvY2F0aW9uIHdhcyBjaGFuZ2VkIGJ5IGEgYCRsb2NhdGlvbkNoYW5nZVN0YXJ0YCBoYW5kbGVyIHRoZW4gc3RvcFxuICAgICAgICAgIC8vIHByb2Nlc3NpbmcgdGhpcyBsb2NhdGlvbiBjaGFuZ2VcbiAgICAgICAgICBpZiAoJGxvY2F0aW9uLmFic1VybCgpICE9PSBuZXdVcmwpIHJldHVybjtcblxuICAgICAgICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAkbG9jYXRpb24uJCRwYXJzZShvbGRVcmwpO1xuICAgICAgICAgICAgJGxvY2F0aW9uLiQkc3RhdGUgPSBvbGRTdGF0ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHVybE9yU3RhdGVDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgIHNldEJyb3dzZXJVcmxXaXRoRmFsbGJhY2sobmV3VXJsLCBjdXJyZW50UmVwbGFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRTdGF0ZSA9PT0gJGxvY2F0aW9uLiQkc3RhdGUgPyBudWxsIDogJGxvY2F0aW9uLiQkc3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWZ0ZXJMb2NhdGlvbkNoYW5nZShvbGRVcmwsIG9sZFN0YXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAkbG9jYXRpb24uJCRyZXBsYWNlID0gZmFsc2U7XG5cbiAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gcmV0dXJuIGFueXRoaW5nIGJlY2F1c2UgJGV2YWxBc3luYyB3aWxsIG1ha2UgdGhlIGRpZ2VzdCBsb29wIGRpcnR5IHdoZW5cbiAgICAgIC8vIHRoZXJlIGlzIGEgY2hhbmdlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGxvY2F0aW9uO1xuXG4gICAgZnVuY3Rpb24gYWZ0ZXJMb2NhdGlvbkNoYW5nZShvbGRVcmwsIG9sZFN0YXRlKSB7XG4gICAgICAkcm9vdFNjb3BlLiRicm9hZGNhc3QoJyRsb2NhdGlvbkNoYW5nZVN1Y2Nlc3MnLCAkbG9jYXRpb24uYWJzVXJsKCksIG9sZFVybCxcbiAgICAgICAgJGxvY2F0aW9uLiQkc3RhdGUsIG9sZFN0YXRlKTtcbiAgICB9XG59XTtcbn1cblxuLyoqXG4gKiBAbmdkb2Mgc2VydmljZVxuICogQG5hbWUgJGxvZ1xuICogQHJlcXVpcmVzICR3aW5kb3dcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNpbXBsZSBzZXJ2aWNlIGZvciBsb2dnaW5nLiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHNhZmVseSB3cml0ZXMgdGhlIG1lc3NhZ2VcbiAqIGludG8gdGhlIGJyb3dzZXIncyBjb25zb2xlIChpZiBwcmVzZW50KS5cbiAqXG4gKiBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgc2VydmljZSBpcyB0byBzaW1wbGlmeSBkZWJ1Z2dpbmcgYW5kIHRyb3VibGVzaG9vdGluZy5cbiAqXG4gKiBUaGUgZGVmYXVsdCBpcyB0byBsb2cgYGRlYnVnYCBtZXNzYWdlcy4gWW91IGNhbiB1c2VcbiAqIHtAbGluayBuZy4kbG9nUHJvdmlkZXIgbmcuJGxvZ1Byb3ZpZGVyI2RlYnVnRW5hYmxlZH0gdG8gY2hhbmdlIHRoaXMuXG4gKlxuICogQGV4YW1wbGVcbiAgIDxleGFtcGxlIG1vZHVsZT1cImxvZ0V4YW1wbGVcIj5cbiAgICAgPGZpbGUgbmFtZT1cInNjcmlwdC5qc1wiPlxuICAgICAgIGFuZ3VsYXIubW9kdWxlKCdsb2dFeGFtcGxlJywgW10pXG4gICAgICAgICAuY29udHJvbGxlcignTG9nQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRsb2cnLCBmdW5jdGlvbigkc2NvcGUsICRsb2cpIHtcbiAgICAgICAgICAgJHNjb3BlLiRsb2cgPSAkbG9nO1xuICAgICAgICAgICAkc2NvcGUubWVzc2FnZSA9ICdIZWxsbyBXb3JsZCEnO1xuICAgICAgICAgfV0pO1xuICAgICA8L2ZpbGU+XG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiTG9nQ29udHJvbGxlclwiPlxuICAgICAgICAgPHA+UmVsb2FkIHRoaXMgcGFnZSB3aXRoIG9wZW4gY29uc29sZSwgZW50ZXIgdGV4dCBhbmQgaGl0IHRoZSBsb2cgYnV0dG9uLi4uPC9wPlxuICAgICAgICAgTWVzc2FnZTpcbiAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5nLW1vZGVsPVwibWVzc2FnZVwiLz5cbiAgICAgICAgIDxidXR0b24gbmctY2xpY2s9XCIkbG9nLmxvZyhtZXNzYWdlKVwiPmxvZzwvYnV0dG9uPlxuICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz1cIiRsb2cud2FybihtZXNzYWdlKVwiPndhcm48L2J1dHRvbj5cbiAgICAgICAgIDxidXR0b24gbmctY2xpY2s9XCIkbG9nLmluZm8obWVzc2FnZSlcIj5pbmZvPC9idXR0b24+XG4gICAgICAgICA8YnV0dG9uIG5nLWNsaWNrPVwiJGxvZy5lcnJvcihtZXNzYWdlKVwiPmVycm9yPC9idXR0b24+XG4gICAgICAgPC9kaXY+XG4gICAgIDwvZmlsZT5cbiAgIDwvZXhhbXBsZT5cbiAqL1xuXG4vKipcbiAqIEBuZ2RvYyBwcm92aWRlclxuICogQG5hbWUgJGxvZ1Byb3ZpZGVyXG4gKiBAZGVzY3JpcHRpb25cbiAqIFVzZSB0aGUgYCRsb2dQcm92aWRlcmAgdG8gY29uZmlndXJlIGhvdyB0aGUgYXBwbGljYXRpb24gbG9ncyBtZXNzYWdlc1xuICovXG5mdW5jdGlvbiAkTG9nUHJvdmlkZXIoKSB7XG4gIHZhciBkZWJ1ZyA9IHRydWUsXG4gICAgICBzZWxmID0gdGhpcztcblxuICAvKipcbiAgICogQG5nZG9jIG1ldGhvZFxuICAgKiBAbmFtZSAkbG9nUHJvdmlkZXIjZGVidWdFbmFibGVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBmbGFnIGVuYWJsZSBvciBkaXNhYmxlIGRlYnVnIGxldmVsIG1lc3NhZ2VzXG4gICAqIEByZXR1cm5zIHsqfSBjdXJyZW50IHZhbHVlIGlmIHVzZWQgYXMgZ2V0dGVyIG9yIGl0c2VsZiAoY2hhaW5pbmcpIGlmIHVzZWQgYXMgc2V0dGVyXG4gICAqL1xuICB0aGlzLmRlYnVnRW5hYmxlZCA9IGZ1bmN0aW9uKGZsYWcpIHtcbiAgICBpZiAoaXNEZWZpbmVkKGZsYWcpKSB7XG4gICAgICBkZWJ1ZyA9IGZsYWc7XG4gICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZWJ1ZztcbiAgICB9XG4gIH07XG5cbiAgdGhpcy4kZ2V0ID0gWyckd2luZG93JywgZnVuY3Rpb24oJHdpbmRvdykge1xuICAgIHJldHVybiB7XG4gICAgICAvKipcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICAqIEBuYW1lICRsb2cjbG9nXG4gICAgICAgKlxuICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgKiBXcml0ZSBhIGxvZyBtZXNzYWdlXG4gICAgICAgKi9cbiAgICAgIGxvZzogY29uc29sZUxvZygnbG9nJyksXG5cbiAgICAgIC8qKlxuICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICogQG5hbWUgJGxvZyNpbmZvXG4gICAgICAgKlxuICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgKiBXcml0ZSBhbiBpbmZvcm1hdGlvbiBtZXNzYWdlXG4gICAgICAgKi9cbiAgICAgIGluZm86IGNvbnNvbGVMb2coJ2luZm8nKSxcblxuICAgICAgLyoqXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICAgKiBAbmFtZSAkbG9nI3dhcm5cbiAgICAgICAqXG4gICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAqIFdyaXRlIGEgd2FybmluZyBtZXNzYWdlXG4gICAgICAgKi9cbiAgICAgIHdhcm46IGNvbnNvbGVMb2coJ3dhcm4nKSxcblxuICAgICAgLyoqXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICAgKiBAbmFtZSAkbG9nI2Vycm9yXG4gICAgICAgKlxuICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgKiBXcml0ZSBhbiBlcnJvciBtZXNzYWdlXG4gICAgICAgKi9cbiAgICAgIGVycm9yOiBjb25zb2xlTG9nKCdlcnJvcicpLFxuXG4gICAgICAvKipcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICAqIEBuYW1lICRsb2cjZGVidWdcbiAgICAgICAqXG4gICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAqIFdyaXRlIGEgZGVidWcgbWVzc2FnZVxuICAgICAgICovXG4gICAgICBkZWJ1ZzogKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZm4gPSBjb25zb2xlTG9nKCdkZWJ1ZycpO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KHNlbGYsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSgpKVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBmb3JtYXRFcnJvcihhcmcpIHtcbiAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBpZiAoYXJnLnN0YWNrKSB7XG4gICAgICAgICAgYXJnID0gKGFyZy5tZXNzYWdlICYmIGFyZy5zdGFjay5pbmRleE9mKGFyZy5tZXNzYWdlKSA9PT0gLTEpXG4gICAgICAgICAgICAgID8gJ0Vycm9yOiAnICsgYXJnLm1lc3NhZ2UgKyAnXFxuJyArIGFyZy5zdGFja1xuICAgICAgICAgICAgICA6IGFyZy5zdGFjaztcbiAgICAgICAgfSBlbHNlIGlmIChhcmcuc291cmNlVVJMKSB7XG4gICAgICAgICAgYXJnID0gYXJnLm1lc3NhZ2UgKyAnXFxuJyArIGFyZy5zb3VyY2VVUkwgKyAnOicgKyBhcmcubGluZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFyZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25zb2xlTG9nKHR5cGUpIHtcbiAgICAgIHZhciBjb25zb2xlID0gJHdpbmRvdy5jb25zb2xlIHx8IHt9LFxuICAgICAgICAgIGxvZ0ZuID0gY29uc29sZVt0eXBlXSB8fCBjb25zb2xlLmxvZyB8fCBub29wLFxuICAgICAgICAgIGhhc0FwcGx5ID0gZmFsc2U7XG5cbiAgICAgIC8vIE5vdGU6IHJlYWRpbmcgbG9nRm4uYXBwbHkgdGhyb3dzIGFuIGVycm9yIGluIElFMTEgaW4gSUU4IGRvY3VtZW50IG1vZGUuXG4gICAgICAvLyBUaGUgcmVhc29uIGJlaGluZCB0aGlzIGlzIHRoYXQgY29uc29sZS5sb2cgaGFzIHR5cGUgXCJvYmplY3RcIiBpbiBJRTguLi5cbiAgICAgIHRyeSB7XG4gICAgICAgIGhhc0FwcGx5ID0gISFsb2dGbi5hcHBseTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICAgIGlmIChoYXNBcHBseSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICBmb3JFYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgICAgICBhcmdzLnB1c2goZm9ybWF0RXJyb3IoYXJnKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGxvZ0ZuLmFwcGx5KGNvbnNvbGUsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyB3ZSBhcmUgSUUgd2hpY2ggZWl0aGVyIGRvZXNuJ3QgaGF2ZSB3aW5kb3cuY29uc29sZSA9PiB0aGlzIGlzIG5vb3AgYW5kIHdlIGRvIG5vdGhpbmcsXG4gICAgICAvLyBvciB3ZSBhcmUgSUUgd2hlcmUgY29uc29sZS5sb2cgZG9lc24ndCBoYXZlIGFwcGx5IHNvIHdlIGxvZyBhdCBsZWFzdCBmaXJzdCAyIGFyZ3NcbiAgICAgIHJldHVybiBmdW5jdGlvbihhcmcxLCBhcmcyKSB7XG4gICAgICAgIGxvZ0ZuKGFyZzEsIGFyZzIgPT0gbnVsbCA/ICcnIDogYXJnMik7XG4gICAgICB9O1xuICAgIH1cbiAgfV07XG59XG5cbnZhciAkcGFyc2VNaW5FcnIgPSBtaW5FcnIoJyRwYXJzZScpO1xuXG4vLyBTYW5kYm94aW5nIEFuZ3VsYXIgRXhwcmVzc2lvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQW5ndWxhciBleHByZXNzaW9ucyBhcmUgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgc2FmZSBiZWNhdXNlIHRoZXNlIGV4cHJlc3Npb25zIG9ubHkgaGF2ZSBkaXJlY3Rcbi8vIGFjY2VzcyB0byBgJHNjb3BlYCBhbmQgbG9jYWxzLiBIb3dldmVyLCBvbmUgY2FuIG9idGFpbiB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBKUyBjb2RlIGJ5XG4vLyBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gbmF0aXZlIEpTIGZ1bmN0aW9ucyBzdWNoIGFzIHRoZSBGdW5jdGlvbiBjb25zdHJ1Y3Rvci5cbi8vXG4vLyBBcyBhbiBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIEFuZ3VsYXIgZXhwcmVzc2lvbjpcbi8vXG4vLyAgIHt9LnRvU3RyaW5nLmNvbnN0cnVjdG9yKCdhbGVydChcImV2aWwgSlMgY29kZVwiKScpXG4vL1xuLy8gVGhpcyBzYW5kYm94aW5nIHRlY2huaXF1ZSBpcyBub3QgcGVyZmVjdCBhbmQgZG9lc24ndCBhaW0gdG8gYmUuIFRoZSBnb2FsIGlzIHRvIHByZXZlbnQgZXhwbG9pdHNcbi8vIGFnYWluc3QgdGhlIGV4cHJlc3Npb24gbGFuZ3VhZ2UsIGJ1dCBub3QgdG8gcHJldmVudCBleHBsb2l0cyB0aGF0IHdlcmUgZW5hYmxlZCBieSBleHBvc2luZ1xuLy8gc2Vuc2l0aXZlIEphdmFTY3JpcHQgb3IgYnJvd3NlciBBUElzIG9uIFNjb3BlLiBFeHBvc2luZyBzdWNoIG9iamVjdHMgb24gYSBTY29wZSBpcyBuZXZlciBhIGdvb2Rcbi8vIHByYWN0aWNlIGFuZCB0aGVyZWZvcmUgd2UgYXJlIG5vdCBldmVuIHRyeWluZyB0byBwcm90ZWN0IGFnYWluc3QgaW50ZXJhY3Rpb24gd2l0aCBhbiBvYmplY3Rcbi8vIGV4cGxpY2l0bHkgZXhwb3NlZCBpbiB0aGlzIHdheS5cbi8vXG4vLyBJbiBnZW5lcmFsLCBpdCBpcyBub3QgcG9zc2libGUgdG8gYWNjZXNzIGEgV2luZG93IG9iamVjdCBmcm9tIGFuIGFuZ3VsYXIgZXhwcmVzc2lvbiB1bmxlc3MgYVxuLy8gd2luZG93IG9yIHNvbWUgRE9NIG9iamVjdCB0aGF0IGhhcyBhIHJlZmVyZW5jZSB0byB3aW5kb3cgaXMgcHVibGlzaGVkIG9udG8gYSBTY29wZS5cbi8vIFNpbWlsYXJseSB3ZSBwcmV2ZW50IGludm9jYXRpb25zIG9mIGZ1bmN0aW9uIGtub3duIHRvIGJlIGRhbmdlcm91cywgYXMgd2VsbCBhcyBhc3NpZ25tZW50cyB0b1xuLy8gbmF0aXZlIG9iamVjdHMuXG4vL1xuLy8gU2VlIGh0dHBzOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL3NlY3VyaXR5XG5cblxuZnVuY3Rpb24gZW5zdXJlU2FmZU1lbWJlck5hbWUobmFtZSwgZnVsbEV4cHJlc3Npb24pIHtcbiAgaWYgKG5hbWUgPT09IFwiX19kZWZpbmVHZXR0ZXJfX1wiIHx8IG5hbWUgPT09IFwiX19kZWZpbmVTZXR0ZXJfX1wiXG4gICAgICB8fCBuYW1lID09PSBcIl9fbG9va3VwR2V0dGVyX19cIiB8fCBuYW1lID09PSBcIl9fbG9va3VwU2V0dGVyX19cIlxuICAgICAgfHwgbmFtZSA9PT0gXCJfX3Byb3RvX19cIikge1xuICAgIHRocm93ICRwYXJzZU1pbkVycignaXNlY2ZsZCcsXG4gICAgICAgICdBdHRlbXB0aW5nIHRvIGFjY2VzcyBhIGRpc2FsbG93ZWQgZmllbGQgaW4gQW5ndWxhciBleHByZXNzaW9ucyEgJ1xuICAgICAgICArICdFeHByZXNzaW9uOiB7MH0nLCBmdWxsRXhwcmVzc2lvbik7XG4gIH1cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZVNhZmVPYmplY3Qob2JqLCBmdWxsRXhwcmVzc2lvbikge1xuICAvLyBuaWZ0eSBjaGVjayBpZiBvYmogaXMgRnVuY3Rpb24gdGhhdCBpcyBmYXN0IGFuZCB3b3JrcyBhY3Jvc3MgaWZyYW1lcyBhbmQgb3RoZXIgY29udGV4dHNcbiAgaWYgKG9iaikge1xuICAgIGlmIChvYmouY29uc3RydWN0b3IgPT09IG9iaikge1xuICAgICAgdGhyb3cgJHBhcnNlTWluRXJyKCdpc2VjZm4nLFxuICAgICAgICAgICdSZWZlcmVuY2luZyBGdW5jdGlvbiBpbiBBbmd1bGFyIGV4cHJlc3Npb25zIGlzIGRpc2FsbG93ZWQhIEV4cHJlc3Npb246IHswfScsXG4gICAgICAgICAgZnVsbEV4cHJlc3Npb24pO1xuICAgIH0gZWxzZSBpZiAoLy8gaXNXaW5kb3cob2JqKVxuICAgICAgICBvYmoud2luZG93ID09PSBvYmopIHtcbiAgICAgIHRocm93ICRwYXJzZU1pbkVycignaXNlY3dpbmRvdycsXG4gICAgICAgICAgJ1JlZmVyZW5jaW5nIHRoZSBXaW5kb3cgaW4gQW5ndWxhciBleHByZXNzaW9ucyBpcyBkaXNhbGxvd2VkISBFeHByZXNzaW9uOiB7MH0nLFxuICAgICAgICAgIGZ1bGxFeHByZXNzaW9uKTtcbiAgICB9IGVsc2UgaWYgKC8vIGlzRWxlbWVudChvYmopXG4gICAgICAgIG9iai5jaGlsZHJlbiAmJiAob2JqLm5vZGVOYW1lIHx8IChvYmoucHJvcCAmJiBvYmouYXR0ciAmJiBvYmouZmluZCkpKSB7XG4gICAgICB0aHJvdyAkcGFyc2VNaW5FcnIoJ2lzZWNkb20nLFxuICAgICAgICAgICdSZWZlcmVuY2luZyBET00gbm9kZXMgaW4gQW5ndWxhciBleHByZXNzaW9ucyBpcyBkaXNhbGxvd2VkISBFeHByZXNzaW9uOiB7MH0nLFxuICAgICAgICAgIGZ1bGxFeHByZXNzaW9uKTtcbiAgICB9IGVsc2UgaWYgKC8vIGJsb2NrIE9iamVjdCBzbyB0aGF0IHdlIGNhbid0IGdldCBob2xkIG9mIGRhbmdlcm91cyBPYmplY3QuKiBtZXRob2RzXG4gICAgICAgIG9iaiA9PT0gT2JqZWN0KSB7XG4gICAgICB0aHJvdyAkcGFyc2VNaW5FcnIoJ2lzZWNvYmonLFxuICAgICAgICAgICdSZWZlcmVuY2luZyBPYmplY3QgaW4gQW5ndWxhciBleHByZXNzaW9ucyBpcyBkaXNhbGxvd2VkISBFeHByZXNzaW9uOiB7MH0nLFxuICAgICAgICAgIGZ1bGxFeHByZXNzaW9uKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxudmFyIENBTEwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbnZhciBBUFBMWSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcbnZhciBCSU5EID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5cbmZ1bmN0aW9uIGVuc3VyZVNhZmVGdW5jdGlvbihvYmosIGZ1bGxFeHByZXNzaW9uKSB7XG4gIGlmIChvYmopIHtcbiAgICBpZiAob2JqLmNvbnN0cnVjdG9yID09PSBvYmopIHtcbiAgICAgIHRocm93ICRwYXJzZU1pbkVycignaXNlY2ZuJyxcbiAgICAgICAgJ1JlZmVyZW5jaW5nIEZ1bmN0aW9uIGluIEFuZ3VsYXIgZXhwcmVzc2lvbnMgaXMgZGlzYWxsb3dlZCEgRXhwcmVzc2lvbjogezB9JyxcbiAgICAgICAgZnVsbEV4cHJlc3Npb24pO1xuICAgIH0gZWxzZSBpZiAob2JqID09PSBDQUxMIHx8IG9iaiA9PT0gQVBQTFkgfHwgb2JqID09PSBCSU5EKSB7XG4gICAgICB0aHJvdyAkcGFyc2VNaW5FcnIoJ2lzZWNmZicsXG4gICAgICAgICdSZWZlcmVuY2luZyBjYWxsLCBhcHBseSBvciBiaW5kIGluIEFuZ3VsYXIgZXhwcmVzc2lvbnMgaXMgZGlzYWxsb3dlZCEgRXhwcmVzc2lvbjogezB9JyxcbiAgICAgICAgZnVsbEV4cHJlc3Npb24pO1xuICAgIH1cbiAgfVxufVxuXG4vL0tleXdvcmQgY29uc3RhbnRzXG52YXIgQ09OU1RBTlRTID0gY3JlYXRlTWFwKCk7XG5mb3JFYWNoKHtcbiAgJ251bGwnOiBmdW5jdGlvbigpIHsgcmV0dXJuIG51bGw7IH0sXG4gICd0cnVlJzogZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9LFxuICAnZmFsc2UnOiBmdW5jdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9LFxuICAndW5kZWZpbmVkJzogZnVuY3Rpb24oKSB7fVxufSwgZnVuY3Rpb24oY29uc3RhbnRHZXR0ZXIsIG5hbWUpIHtcbiAgY29uc3RhbnRHZXR0ZXIuY29uc3RhbnQgPSBjb25zdGFudEdldHRlci5saXRlcmFsID0gY29uc3RhbnRHZXR0ZXIuc2hhcmVkR2V0dGVyID0gdHJ1ZTtcbiAgQ09OU1RBTlRTW25hbWVdID0gY29uc3RhbnRHZXR0ZXI7XG59KTtcblxuLy9Ob3QgcXVpdGUgYSBjb25zdGFudCwgYnV0IGNhbiBiZSBsZXgvcGFyc2VkIHRoZSBzYW1lXG5DT05TVEFOVFNbJ3RoaXMnXSA9IGZ1bmN0aW9uKHNlbGYpIHsgcmV0dXJuIHNlbGY7IH07XG5DT05TVEFOVFNbJ3RoaXMnXS5zaGFyZWRHZXR0ZXIgPSB0cnVlO1xuXG5cbi8vT3BlcmF0b3JzIC0gd2lsbCBiZSB3cmFwcGVkIGJ5IGJpbmFyeUZuL3VuYXJ5Rm4vYXNzaWdubWVudC9maWx0ZXJcbnZhciBPUEVSQVRPUlMgPSBleHRlbmQoY3JlYXRlTWFwKCksIHtcbiAgICAnKyc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLCBiKSB7XG4gICAgICBhPWEoc2VsZiwgbG9jYWxzKTsgYj1iKHNlbGYsIGxvY2Fscyk7XG4gICAgICBpZiAoaXNEZWZpbmVkKGEpKSB7XG4gICAgICAgIGlmIChpc0RlZmluZWQoYikpIHtcbiAgICAgICAgICByZXR1cm4gYSArIGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNEZWZpbmVkKGIpID8gYiA6IHVuZGVmaW5lZDt9LFxuICAgICctJzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsIGIpIHtcbiAgICAgICAgICBhPWEoc2VsZiwgbG9jYWxzKTsgYj1iKHNlbGYsIGxvY2Fscyk7XG4gICAgICAgICAgcmV0dXJuIChpc0RlZmluZWQoYSkgPyBhIDogMCkgLSAoaXNEZWZpbmVkKGIpID8gYiA6IDApO1xuICAgICAgICB9LFxuICAgICcqJzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsIGIpIHtyZXR1cm4gYShzZWxmLCBsb2NhbHMpICogYihzZWxmLCBsb2NhbHMpO30sXG4gICAgJy8nOmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSwgYikge3JldHVybiBhKHNlbGYsIGxvY2FscykgLyBiKHNlbGYsIGxvY2Fscyk7fSxcbiAgICAnJSc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLCBiKSB7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKSAlIGIoc2VsZiwgbG9jYWxzKTt9LFxuICAgICc9PT0nOmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSwgYikge3JldHVybiBhKHNlbGYsIGxvY2FscykgPT09IGIoc2VsZiwgbG9jYWxzKTt9LFxuICAgICchPT0nOmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSwgYikge3JldHVybiBhKHNlbGYsIGxvY2FscykgIT09IGIoc2VsZiwgbG9jYWxzKTt9LFxuICAgICc9PSc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLCBiKSB7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKSA9PSBiKHNlbGYsIGxvY2Fscyk7fSxcbiAgICAnIT0nOmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSwgYikge3JldHVybiBhKHNlbGYsIGxvY2FscykgIT0gYihzZWxmLCBsb2NhbHMpO30sXG4gICAgJzwnOmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSwgYikge3JldHVybiBhKHNlbGYsIGxvY2FscykgPCBiKHNlbGYsIGxvY2Fscyk7fSxcbiAgICAnPic6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLCBiKSB7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKSA+IGIoc2VsZiwgbG9jYWxzKTt9LFxuICAgICc8PSc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLCBiKSB7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKSA8PSBiKHNlbGYsIGxvY2Fscyk7fSxcbiAgICAnPj0nOmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSwgYikge3JldHVybiBhKHNlbGYsIGxvY2FscykgPj0gYihzZWxmLCBsb2NhbHMpO30sXG4gICAgJyYmJzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsIGIpIHtyZXR1cm4gYShzZWxmLCBsb2NhbHMpICYmIGIoc2VsZiwgbG9jYWxzKTt9LFxuICAgICd8fCc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLCBiKSB7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKSB8fCBiKHNlbGYsIGxvY2Fscyk7fSxcbiAgICAnISc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhKSB7cmV0dXJuICFhKHNlbGYsIGxvY2Fscyk7fSxcblxuICAgIC8vVG9rZW5pemVkIGFzIG9wZXJhdG9ycyBidXQgcGFyc2VkIGFzIGFzc2lnbm1lbnQvZmlsdGVyc1xuICAgICc9Jzp0cnVlLFxuICAgICd8Jzp0cnVlXG59KTtcbnZhciBFU0NBUEUgPSB7XCJuXCI6XCJcXG5cIiwgXCJmXCI6XCJcXGZcIiwgXCJyXCI6XCJcXHJcIiwgXCJ0XCI6XCJcXHRcIiwgXCJ2XCI6XCJcXHZcIiwgXCInXCI6XCInXCIsICdcIic6J1wiJ307XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICovXG52YXIgTGV4ZXIgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG59O1xuXG5MZXhlci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBMZXhlcixcblxuICBsZXg6IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuaW5kZXggPSAwO1xuICAgIHRoaXMudG9rZW5zID0gW107XG5cbiAgICB3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMudGV4dC5sZW5ndGgpIHtcbiAgICAgIHZhciBjaCA9IHRoaXMudGV4dC5jaGFyQXQodGhpcy5pbmRleCk7XG4gICAgICBpZiAoY2ggPT09ICdcIicgfHwgY2ggPT09IFwiJ1wiKSB7XG4gICAgICAgIHRoaXMucmVhZFN0cmluZyhjaCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNOdW1iZXIoY2gpIHx8IGNoID09PSAnLicgJiYgdGhpcy5pc051bWJlcih0aGlzLnBlZWsoKSkpIHtcbiAgICAgICAgdGhpcy5yZWFkTnVtYmVyKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNJZGVudChjaCkpIHtcbiAgICAgICAgdGhpcy5yZWFkSWRlbnQoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pcyhjaCwgJygpe31bXS4sOzo/JykpIHtcbiAgICAgICAgdGhpcy50b2tlbnMucHVzaCh7aW5kZXg6IHRoaXMuaW5kZXgsIHRleHQ6IGNofSk7XG4gICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1doaXRlc3BhY2UoY2gpKSB7XG4gICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBjaDIgPSBjaCArIHRoaXMucGVlaygpO1xuICAgICAgICB2YXIgY2gzID0gY2gyICsgdGhpcy5wZWVrKDIpO1xuICAgICAgICB2YXIgb3AxID0gT1BFUkFUT1JTW2NoXTtcbiAgICAgICAgdmFyIG9wMiA9IE9QRVJBVE9SU1tjaDJdO1xuICAgICAgICB2YXIgb3AzID0gT1BFUkFUT1JTW2NoM107XG4gICAgICAgIGlmIChvcDEgfHwgb3AyIHx8IG9wMykge1xuICAgICAgICAgIHZhciB0b2tlbiA9IG9wMyA/IGNoMyA6IChvcDIgPyBjaDIgOiBjaCk7XG4gICAgICAgICAgdGhpcy50b2tlbnMucHVzaCh7aW5kZXg6IHRoaXMuaW5kZXgsIHRleHQ6IHRva2VuLCBvcGVyYXRvcjogdHJ1ZX0pO1xuICAgICAgICAgIHRoaXMuaW5kZXggKz0gdG9rZW4ubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudGhyb3dFcnJvcignVW5leHBlY3RlZCBuZXh0IGNoYXJhY3RlciAnLCB0aGlzLmluZGV4LCB0aGlzLmluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9LFxuXG4gIGlzOiBmdW5jdGlvbihjaCwgY2hhcnMpIHtcbiAgICByZXR1cm4gY2hhcnMuaW5kZXhPZihjaCkgIT09IC0xO1xuICB9LFxuXG4gIHBlZWs6IGZ1bmN0aW9uKGkpIHtcbiAgICB2YXIgbnVtID0gaSB8fCAxO1xuICAgIHJldHVybiAodGhpcy5pbmRleCArIG51bSA8IHRoaXMudGV4dC5sZW5ndGgpID8gdGhpcy50ZXh0LmNoYXJBdCh0aGlzLmluZGV4ICsgbnVtKSA6IGZhbHNlO1xuICB9LFxuXG4gIGlzTnVtYmVyOiBmdW5jdGlvbihjaCkge1xuICAgIHJldHVybiAoJzAnIDw9IGNoICYmIGNoIDw9ICc5JykgJiYgdHlwZW9mIGNoID09PSBcInN0cmluZ1wiO1xuICB9LFxuXG4gIGlzV2hpdGVzcGFjZTogZnVuY3Rpb24oY2gpIHtcbiAgICAvLyBJRSB0cmVhdHMgbm9uLWJyZWFraW5nIHNwYWNlIGFzIFxcdTAwQTBcbiAgICByZXR1cm4gKGNoID09PSAnICcgfHwgY2ggPT09ICdcXHInIHx8IGNoID09PSAnXFx0JyB8fFxuICAgICAgICAgICAgY2ggPT09ICdcXG4nIHx8IGNoID09PSAnXFx2JyB8fCBjaCA9PT0gJ1xcdTAwQTAnKTtcbiAgfSxcblxuICBpc0lkZW50OiBmdW5jdGlvbihjaCkge1xuICAgIHJldHVybiAoJ2EnIDw9IGNoICYmIGNoIDw9ICd6JyB8fFxuICAgICAgICAgICAgJ0EnIDw9IGNoICYmIGNoIDw9ICdaJyB8fFxuICAgICAgICAgICAgJ18nID09PSBjaCB8fCBjaCA9PT0gJyQnKTtcbiAgfSxcblxuICBpc0V4cE9wZXJhdG9yOiBmdW5jdGlvbihjaCkge1xuICAgIHJldHVybiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnIHx8IHRoaXMuaXNOdW1iZXIoY2gpKTtcbiAgfSxcblxuICB0aHJvd0Vycm9yOiBmdW5jdGlvbihlcnJvciwgc3RhcnQsIGVuZCkge1xuICAgIGVuZCA9IGVuZCB8fCB0aGlzLmluZGV4O1xuICAgIHZhciBjb2xTdHIgPSAoaXNEZWZpbmVkKHN0YXJ0KVxuICAgICAgICAgICAgPyAncyAnICsgc3RhcnQgKyAgJy0nICsgdGhpcy5pbmRleCArICcgWycgKyB0aGlzLnRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpICsgJ10nXG4gICAgICAgICAgICA6ICcgJyArIGVuZCk7XG4gICAgdGhyb3cgJHBhcnNlTWluRXJyKCdsZXhlcnInLCAnTGV4ZXIgRXJyb3I6IHswfSBhdCBjb2x1bW57MX0gaW4gZXhwcmVzc2lvbiBbezJ9XS4nLFxuICAgICAgICBlcnJvciwgY29sU3RyLCB0aGlzLnRleHQpO1xuICB9LFxuXG4gIHJlYWROdW1iZXI6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBudW1iZXIgPSAnJztcbiAgICB2YXIgc3RhcnQgPSB0aGlzLmluZGV4O1xuICAgIHdoaWxlICh0aGlzLmluZGV4IDwgdGhpcy50ZXh0Lmxlbmd0aCkge1xuICAgICAgdmFyIGNoID0gbG93ZXJjYXNlKHRoaXMudGV4dC5jaGFyQXQodGhpcy5pbmRleCkpO1xuICAgICAgaWYgKGNoID09ICcuJyB8fCB0aGlzLmlzTnVtYmVyKGNoKSkge1xuICAgICAgICBudW1iZXIgKz0gY2g7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcGVla0NoID0gdGhpcy5wZWVrKCk7XG4gICAgICAgIGlmIChjaCA9PSAnZScgJiYgdGhpcy5pc0V4cE9wZXJhdG9yKHBlZWtDaCkpIHtcbiAgICAgICAgICBudW1iZXIgKz0gY2g7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0V4cE9wZXJhdG9yKGNoKSAmJlxuICAgICAgICAgICAgcGVla0NoICYmIHRoaXMuaXNOdW1iZXIocGVla0NoKSAmJlxuICAgICAgICAgICAgbnVtYmVyLmNoYXJBdChudW1iZXIubGVuZ3RoIC0gMSkgPT0gJ2UnKSB7XG4gICAgICAgICAgbnVtYmVyICs9IGNoO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNFeHBPcGVyYXRvcihjaCkgJiZcbiAgICAgICAgICAgICghcGVla0NoIHx8ICF0aGlzLmlzTnVtYmVyKHBlZWtDaCkpICYmXG4gICAgICAgICAgICBudW1iZXIuY2hhckF0KG51bWJlci5sZW5ndGggLSAxKSA9PSAnZScpIHtcbiAgICAgICAgICB0aGlzLnRocm93RXJyb3IoJ0ludmFsaWQgZXhwb25lbnQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5pbmRleCsrO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgIGluZGV4OiBzdGFydCxcbiAgICAgIHRleHQ6IG51bWJlcixcbiAgICAgIGNvbnN0YW50OiB0cnVlLFxuICAgICAgdmFsdWU6IE51bWJlcihudW1iZXIpXG4gICAgfSk7XG4gIH0sXG5cbiAgcmVhZElkZW50OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhcnQgPSB0aGlzLmluZGV4O1xuICAgIHdoaWxlICh0aGlzLmluZGV4IDwgdGhpcy50ZXh0Lmxlbmd0aCkge1xuICAgICAgdmFyIGNoID0gdGhpcy50ZXh0LmNoYXJBdCh0aGlzLmluZGV4KTtcbiAgICAgIGlmICghKHRoaXMuaXNJZGVudChjaCkgfHwgdGhpcy5pc051bWJlcihjaCkpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdGhpcy5pbmRleCsrO1xuICAgIH1cbiAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgIGluZGV4OiBzdGFydCxcbiAgICAgIHRleHQ6IHRoaXMudGV4dC5zbGljZShzdGFydCwgdGhpcy5pbmRleCksXG4gICAgICBpZGVudGlmaWVyOiB0cnVlXG4gICAgfSk7XG4gIH0sXG5cbiAgcmVhZFN0cmluZzogZnVuY3Rpb24ocXVvdGUpIHtcbiAgICB2YXIgc3RhcnQgPSB0aGlzLmluZGV4O1xuICAgIHRoaXMuaW5kZXgrKztcbiAgICB2YXIgc3RyaW5nID0gJyc7XG4gICAgdmFyIHJhd1N0cmluZyA9IHF1b3RlO1xuICAgIHZhciBlc2NhcGUgPSBmYWxzZTtcbiAgICB3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMudGV4dC5sZW5ndGgpIHtcbiAgICAgIHZhciBjaCA9IHRoaXMudGV4dC5jaGFyQXQodGhpcy5pbmRleCk7XG4gICAgICByYXdTdHJpbmcgKz0gY2g7XG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIGlmIChjaCA9PT0gJ3UnKSB7XG4gICAgICAgICAgdmFyIGhleCA9IHRoaXMudGV4dC5zdWJzdHJpbmcodGhpcy5pbmRleCArIDEsIHRoaXMuaW5kZXggKyA1KTtcbiAgICAgICAgICBpZiAoIWhleC5tYXRjaCgvW1xcZGEtZl17NH0vaSkpXG4gICAgICAgICAgICB0aGlzLnRocm93RXJyb3IoJ0ludmFsaWQgdW5pY29kZSBlc2NhcGUgW1xcXFx1JyArIGhleCArICddJyk7XG4gICAgICAgICAgdGhpcy5pbmRleCArPSA0O1xuICAgICAgICAgIHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGhleCwgMTYpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcmVwID0gRVNDQVBFW2NoXTtcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcgKyAocmVwIHx8IGNoKTtcbiAgICAgICAgfVxuICAgICAgICBlc2NhcGUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcXFxcJykge1xuICAgICAgICBlc2NhcGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gcXVvdGUpIHtcbiAgICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogc3RhcnQsXG4gICAgICAgICAgdGV4dDogcmF3U3RyaW5nLFxuICAgICAgICAgIGNvbnN0YW50OiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiBzdHJpbmdcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5kZXgrKztcbiAgICB9XG4gICAgdGhpcy50aHJvd0Vycm9yKCdVbnRlcm1pbmF0ZWQgcXVvdGUnLCBzdGFydCk7XG4gIH1cbn07XG5cblxuZnVuY3Rpb24gaXNDb25zdGFudChleHApIHtcbiAgcmV0dXJuIGV4cC5jb25zdGFudDtcbn1cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqL1xudmFyIFBhcnNlciA9IGZ1bmN0aW9uKGxleGVyLCAkZmlsdGVyLCBvcHRpb25zKSB7XG4gIHRoaXMubGV4ZXIgPSBsZXhlcjtcbiAgdGhpcy4kZmlsdGVyID0gJGZpbHRlcjtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbn07XG5cblBhcnNlci5aRVJPID0gZXh0ZW5kKGZ1bmN0aW9uKCkge1xuICByZXR1cm4gMDtcbn0sIHtcbiAgc2hhcmVkR2V0dGVyOiB0cnVlLFxuICBjb25zdGFudDogdHJ1ZVxufSk7XG5cblBhcnNlci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBQYXJzZXIsXG5cbiAgcGFyc2U6IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMudG9rZW5zID0gdGhpcy5sZXhlci5sZXgodGV4dCk7XG5cbiAgICB2YXIgdmFsdWUgPSB0aGlzLnN0YXRlbWVudHMoKTtcblxuICAgIGlmICh0aGlzLnRva2Vucy5sZW5ndGggIT09IDApIHtcbiAgICAgIHRoaXMudGhyb3dFcnJvcignaXMgYW4gdW5leHBlY3RlZCB0b2tlbicsIHRoaXMudG9rZW5zWzBdKTtcbiAgICB9XG5cbiAgICB2YWx1ZS5saXRlcmFsID0gISF2YWx1ZS5saXRlcmFsO1xuICAgIHZhbHVlLmNvbnN0YW50ID0gISF2YWx1ZS5jb25zdGFudDtcblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcblxuICBwcmltYXJ5OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgcHJpbWFyeTtcbiAgICBpZiAodGhpcy5leHBlY3QoJygnKSkge1xuICAgICAgcHJpbWFyeSA9IHRoaXMuZmlsdGVyQ2hhaW4oKTtcbiAgICAgIHRoaXMuY29uc3VtZSgnKScpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5leHBlY3QoJ1snKSkge1xuICAgICAgcHJpbWFyeSA9IHRoaXMuYXJyYXlEZWNsYXJhdGlvbigpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5leHBlY3QoJ3snKSkge1xuICAgICAgcHJpbWFyeSA9IHRoaXMub2JqZWN0KCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBlZWsoKS5pZGVudGlmaWVyKSB7XG4gICAgICBwcmltYXJ5ID0gdGhpcy5pZGVudGlmaWVyKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBlZWsoKS5jb25zdGFudCkge1xuICAgICAgcHJpbWFyeSA9IHRoaXMuY29uc3RhbnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50aHJvd0Vycm9yKCdub3QgYSBwcmltYXJ5IGV4cHJlc3Npb24nLCB0aGlzLnBlZWsoKSk7XG4gICAgfVxuXG4gICAgdmFyIG5leHQsIGNvbnRleHQ7XG4gICAgd2hpbGUgKChuZXh0ID0gdGhpcy5leHBlY3QoJygnLCAnWycsICcuJykpKSB7XG4gICAgICBpZiAobmV4dC50ZXh0ID09PSAnKCcpIHtcbiAgICAgICAgcHJpbWFyeSA9IHRoaXMuZnVuY3Rpb25DYWxsKHByaW1hcnksIGNvbnRleHQpO1xuICAgICAgICBjb250ZXh0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAobmV4dC50ZXh0ID09PSAnWycpIHtcbiAgICAgICAgY29udGV4dCA9IHByaW1hcnk7XG4gICAgICAgIHByaW1hcnkgPSB0aGlzLm9iamVjdEluZGV4KHByaW1hcnkpO1xuICAgICAgfSBlbHNlIGlmIChuZXh0LnRleHQgPT09ICcuJykge1xuICAgICAgICBjb250ZXh0ID0gcHJpbWFyeTtcbiAgICAgICAgcHJpbWFyeSA9IHRoaXMuZmllbGRBY2Nlc3MocHJpbWFyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRocm93RXJyb3IoJ0lNUE9TU0lCTEUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByaW1hcnk7XG4gIH0sXG5cbiAgdGhyb3dFcnJvcjogZnVuY3Rpb24obXNnLCB0b2tlbikge1xuICAgIHRocm93ICRwYXJzZU1pbkVycignc3ludGF4JyxcbiAgICAgICAgJ1N5bnRheCBFcnJvcjogVG9rZW4gXFwnezB9XFwnIHsxfSBhdCBjb2x1bW4gezJ9IG9mIHRoZSBleHByZXNzaW9uIFt7M31dIHN0YXJ0aW5nIGF0IFt7NH1dLicsXG4gICAgICAgICAgdG9rZW4udGV4dCwgbXNnLCAodG9rZW4uaW5kZXggKyAxKSwgdGhpcy50ZXh0LCB0aGlzLnRleHQuc3Vic3RyaW5nKHRva2VuLmluZGV4KSk7XG4gIH0sXG5cbiAgcGVla1Rva2VuOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoID09PSAwKVxuICAgICAgdGhyb3cgJHBhcnNlTWluRXJyKCd1ZW9lJywgJ1VuZXhwZWN0ZWQgZW5kIG9mIGV4cHJlc3Npb246IHswfScsIHRoaXMudGV4dCk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zWzBdO1xuICB9LFxuXG4gIHBlZWs6IGZ1bmN0aW9uKGUxLCBlMiwgZTMsIGU0KSB7XG4gICAgcmV0dXJuIHRoaXMucGVla0FoZWFkKDAsIGUxLCBlMiwgZTMsIGU0KTtcbiAgfSxcbiAgcGVla0FoZWFkOiBmdW5jdGlvbihpLCBlMSwgZTIsIGUzLCBlNCkge1xuICAgIGlmICh0aGlzLnRva2Vucy5sZW5ndGggPiBpKSB7XG4gICAgICB2YXIgdG9rZW4gPSB0aGlzLnRva2Vuc1tpXTtcbiAgICAgIHZhciB0ID0gdG9rZW4udGV4dDtcbiAgICAgIGlmICh0ID09PSBlMSB8fCB0ID09PSBlMiB8fCB0ID09PSBlMyB8fCB0ID09PSBlNCB8fFxuICAgICAgICAgICghZTEgJiYgIWUyICYmICFlMyAmJiAhZTQpKSB7XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuXG4gIGV4cGVjdDogZnVuY3Rpb24oZTEsIGUyLCBlMywgZTQpIHtcbiAgICB2YXIgdG9rZW4gPSB0aGlzLnBlZWsoZTEsIGUyLCBlMywgZTQpO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgdGhpcy50b2tlbnMuc2hpZnQoKTtcbiAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuXG4gIGNvbnN1bWU6IGZ1bmN0aW9uKGUxKSB7XG4gICAgaWYgKHRoaXMudG9rZW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgJHBhcnNlTWluRXJyKCd1ZW9lJywgJ1VuZXhwZWN0ZWQgZW5kIG9mIGV4cHJlc3Npb246IHswfScsIHRoaXMudGV4dCk7XG4gICAgfVxuXG4gICAgdmFyIHRva2VuID0gdGhpcy5leHBlY3QoZTEpO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHRoaXMudGhyb3dFcnJvcignaXMgdW5leHBlY3RlZCwgZXhwZWN0aW5nIFsnICsgZTEgKyAnXScsIHRoaXMucGVlaygpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuO1xuICB9LFxuXG4gIHVuYXJ5Rm46IGZ1bmN0aW9uKG9wLCByaWdodCkge1xuICAgIHZhciBmbiA9IE9QRVJBVE9SU1tvcF07XG4gICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbiAkcGFyc2VVbmFyeUZuKHNlbGYsIGxvY2Fscykge1xuICAgICAgcmV0dXJuIGZuKHNlbGYsIGxvY2FscywgcmlnaHQpO1xuICAgIH0sIHtcbiAgICAgIGNvbnN0YW50OnJpZ2h0LmNvbnN0YW50LFxuICAgICAgaW5wdXRzOiBbcmlnaHRdXG4gICAgfSk7XG4gIH0sXG5cbiAgYmluYXJ5Rm46IGZ1bmN0aW9uKGxlZnQsIG9wLCByaWdodCwgaXNCcmFuY2hpbmcpIHtcbiAgICB2YXIgZm4gPSBPUEVSQVRPUlNbb3BdO1xuICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gJHBhcnNlQmluYXJ5Rm4oc2VsZiwgbG9jYWxzKSB7XG4gICAgICByZXR1cm4gZm4oc2VsZiwgbG9jYWxzLCBsZWZ0LCByaWdodCk7XG4gICAgfSwge1xuICAgICAgY29uc3RhbnQ6IGxlZnQuY29uc3RhbnQgJiYgcmlnaHQuY29uc3RhbnQsXG4gICAgICBpbnB1dHM6ICFpc0JyYW5jaGluZyAmJiBbbGVmdCwgcmlnaHRdXG4gICAgfSk7XG4gIH0sXG5cbiAgaWRlbnRpZmllcjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGlkID0gdGhpcy5jb25zdW1lKCkudGV4dDtcblxuICAgIC8vQ29udGludWUgcmVhZGluZyBlYWNoIGAuaWRlbnRpZmllcmAgdW5sZXNzIGl0IGlzIGEgbWV0aG9kIGludm9jYXRpb25cbiAgICB3aGlsZSAodGhpcy5wZWVrKCcuJykgJiYgdGhpcy5wZWVrQWhlYWQoMSkuaWRlbnRpZmllciAmJiAhdGhpcy5wZWVrQWhlYWQoMiwgJygnKSkge1xuICAgICAgaWQgKz0gdGhpcy5jb25zdW1lKCkudGV4dCArIHRoaXMuY29uc3VtZSgpLnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIENPTlNUQU5UU1tpZF0gfHwgZ2V0dGVyRm4oaWQsIHRoaXMub3B0aW9ucywgdGhpcy50ZXh0KTtcbiAgfSxcblxuICBjb25zdGFudDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5jb25zdW1lKCkudmFsdWU7XG5cbiAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICRwYXJzZUNvbnN0YW50KCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sIHtcbiAgICAgIGNvbnN0YW50OiB0cnVlLFxuICAgICAgbGl0ZXJhbDogdHJ1ZVxuICAgIH0pO1xuICB9LFxuXG4gIHN0YXRlbWVudHM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGF0ZW1lbnRzID0gW107XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLnRva2Vucy5sZW5ndGggPiAwICYmICF0aGlzLnBlZWsoJ30nLCAnKScsICc7JywgJ10nKSlcbiAgICAgICAgc3RhdGVtZW50cy5wdXNoKHRoaXMuZmlsdGVyQ2hhaW4oKSk7XG4gICAgICBpZiAoIXRoaXMuZXhwZWN0KCc7JykpIHtcbiAgICAgICAgLy8gb3B0aW1pemUgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSB0aGVyZSBpcyBvbmx5IG9uZSBzdGF0ZW1lbnQuXG4gICAgICAgIC8vIFRPRE8oc2l6ZSk6IG1heWJlIHdlIHNob3VsZCBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzdGF0ZW1lbnRzP1xuICAgICAgICByZXR1cm4gKHN0YXRlbWVudHMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgPyBzdGF0ZW1lbnRzWzBdXG4gICAgICAgICAgICA6IGZ1bmN0aW9uICRwYXJzZVN0YXRlbWVudHMoc2VsZiwgbG9jYWxzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHN0YXRlbWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdGF0ZW1lbnRzW2ldKHNlbGYsIGxvY2Fscyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZmlsdGVyQ2hhaW46IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZWZ0ID0gdGhpcy5leHByZXNzaW9uKCk7XG4gICAgdmFyIHRva2VuO1xuICAgIHdoaWxlICgodG9rZW4gPSB0aGlzLmV4cGVjdCgnfCcpKSkge1xuICAgICAgbGVmdCA9IHRoaXMuZmlsdGVyKGxlZnQpO1xuICAgIH1cbiAgICByZXR1cm4gbGVmdDtcbiAgfSxcblxuICBmaWx0ZXI6IGZ1bmN0aW9uKGlucHV0Rm4pIHtcbiAgICB2YXIgZm4gPSB0aGlzLiRmaWx0ZXIodGhpcy5jb25zdW1lKCkudGV4dCk7XG4gICAgdmFyIGFyZ3NGbjtcbiAgICB2YXIgYXJncztcblxuICAgIGlmICh0aGlzLnBlZWsoJzonKSkge1xuICAgICAgYXJnc0ZuID0gW107XG4gICAgICBhcmdzID0gW107IC8vIHdlIGNhbiBzYWZlbHkgcmV1c2UgdGhlIGFycmF5XG4gICAgICB3aGlsZSAodGhpcy5leHBlY3QoJzonKSkge1xuICAgICAgICBhcmdzRm4ucHVzaCh0aGlzLmV4cHJlc3Npb24oKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlucHV0cyA9IFtpbnB1dEZuXS5jb25jYXQoYXJnc0ZuIHx8IFtdKTtcblxuICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gJHBhcnNlRmlsdGVyKHNlbGYsIGxvY2Fscykge1xuICAgICAgdmFyIGlucHV0ID0gaW5wdXRGbihzZWxmLCBsb2NhbHMpO1xuICAgICAgaWYgKGFyZ3MpIHtcbiAgICAgICAgYXJnc1swXSA9IGlucHV0O1xuXG4gICAgICAgIHZhciBpID0gYXJnc0ZuLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIGFyZ3NbaSArIDFdID0gYXJnc0ZuW2ldKHNlbGYsIGxvY2Fscyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm4uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZuKGlucHV0KTtcbiAgICB9LCB7XG4gICAgICBjb25zdGFudDogIWZuLiRzdGF0ZWZ1bCAmJiBpbnB1dHMuZXZlcnkoaXNDb25zdGFudCksXG4gICAgICBpbnB1dHM6ICFmbi4kc3RhdGVmdWwgJiYgaW5wdXRzXG4gICAgfSk7XG4gIH0sXG5cbiAgZXhwcmVzc2lvbjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNzaWdubWVudCgpO1xuICB9LFxuXG4gIGFzc2lnbm1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZWZ0ID0gdGhpcy50ZXJuYXJ5KCk7XG4gICAgdmFyIHJpZ2h0O1xuICAgIHZhciB0b2tlbjtcbiAgICBpZiAoKHRva2VuID0gdGhpcy5leHBlY3QoJz0nKSkpIHtcbiAgICAgIGlmICghbGVmdC5hc3NpZ24pIHtcbiAgICAgICAgdGhpcy50aHJvd0Vycm9yKCdpbXBsaWVzIGFzc2lnbm1lbnQgYnV0IFsnICtcbiAgICAgICAgICAgIHRoaXMudGV4dC5zdWJzdHJpbmcoMCwgdG9rZW4uaW5kZXgpICsgJ10gY2FuIG5vdCBiZSBhc3NpZ25lZCB0bycsIHRva2VuKTtcbiAgICAgIH1cbiAgICAgIHJpZ2h0ID0gdGhpcy50ZXJuYXJ5KCk7XG4gICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICRwYXJzZUFzc2lnbm1lbnQoc2NvcGUsIGxvY2Fscykge1xuICAgICAgICByZXR1cm4gbGVmdC5hc3NpZ24oc2NvcGUsIHJpZ2h0KHNjb3BlLCBsb2NhbHMpLCBsb2NhbHMpO1xuICAgICAgfSwge1xuICAgICAgICBpbnB1dHM6IFtsZWZ0LCByaWdodF1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGVmdDtcbiAgfSxcblxuICB0ZXJuYXJ5OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVmdCA9IHRoaXMubG9naWNhbE9SKCk7XG4gICAgdmFyIG1pZGRsZTtcbiAgICB2YXIgdG9rZW47XG4gICAgaWYgKCh0b2tlbiA9IHRoaXMuZXhwZWN0KCc/JykpKSB7XG4gICAgICBtaWRkbGUgPSB0aGlzLmFzc2lnbm1lbnQoKTtcbiAgICAgIGlmICh0aGlzLmNvbnN1bWUoJzonKSkge1xuICAgICAgICB2YXIgcmlnaHQgPSB0aGlzLmFzc2lnbm1lbnQoKTtcblxuICAgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICRwYXJzZVRlcm5hcnkoc2VsZiwgbG9jYWxzKSB7XG4gICAgICAgICAgcmV0dXJuIGxlZnQoc2VsZiwgbG9jYWxzKSA/IG1pZGRsZShzZWxmLCBsb2NhbHMpIDogcmlnaHQoc2VsZiwgbG9jYWxzKTtcbiAgICAgICAgfSwge1xuICAgICAgICAgIGNvbnN0YW50OiBsZWZ0LmNvbnN0YW50ICYmIG1pZGRsZS5jb25zdGFudCAmJiByaWdodC5jb25zdGFudFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGVmdDtcbiAgfSxcblxuICBsb2dpY2FsT1I6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZWZ0ID0gdGhpcy5sb2dpY2FsQU5EKCk7XG4gICAgdmFyIHRva2VuO1xuICAgIHdoaWxlICgodG9rZW4gPSB0aGlzLmV4cGVjdCgnfHwnKSkpIHtcbiAgICAgIGxlZnQgPSB0aGlzLmJpbmFyeUZuKGxlZnQsIHRva2VuLnRleHQsIHRoaXMubG9naWNhbEFORCgpLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGxlZnQ7XG4gIH0sXG5cbiAgbG9naWNhbEFORDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxlZnQgPSB0aGlzLmVxdWFsaXR5KCk7XG4gICAgdmFyIHRva2VuO1xuICAgIGlmICgodG9rZW4gPSB0aGlzLmV4cGVjdCgnJiYnKSkpIHtcbiAgICAgIGxlZnQgPSB0aGlzLmJpbmFyeUZuKGxlZnQsIHRva2VuLnRleHQsIHRoaXMubG9naWNhbEFORCgpLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGxlZnQ7XG4gIH0sXG5cbiAgZXF1YWxpdHk6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZWZ0ID0gdGhpcy5yZWxhdGlvbmFsKCk7XG4gICAgdmFyIHRva2VuO1xuICAgIGlmICgodG9rZW4gPSB0aGlzLmV4cGVjdCgnPT0nLCchPScsJz09PScsJyE9PScpKSkge1xuICAgICAgbGVmdCA9IHRoaXMuYmluYXJ5Rm4obGVmdCwgdG9rZW4udGV4dCwgdGhpcy5lcXVhbGl0eSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGxlZnQ7XG4gIH0sXG5cbiAgcmVsYXRpb25hbDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxlZnQgPSB0aGlzLmFkZGl0aXZlKCk7XG4gICAgdmFyIHRva2VuO1xuICAgIGlmICgodG9rZW4gPSB0aGlzLmV4cGVjdCgnPCcsICc+JywgJzw9JywgJz49JykpKSB7XG4gICAgICBsZWZ0ID0gdGhpcy5iaW5hcnlGbihsZWZ0LCB0b2tlbi50ZXh0LCB0aGlzLnJlbGF0aW9uYWwoKSk7XG4gICAgfVxuICAgIHJldHVybiBsZWZ0O1xuICB9LFxuXG4gIGFkZGl0aXZlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVmdCA9IHRoaXMubXVsdGlwbGljYXRpdmUoKTtcbiAgICB2YXIgdG9rZW47XG4gICAgd2hpbGUgKCh0b2tlbiA9IHRoaXMuZXhwZWN0KCcrJywnLScpKSkge1xuICAgICAgbGVmdCA9IHRoaXMuYmluYXJ5Rm4obGVmdCwgdG9rZW4udGV4dCwgdGhpcy5tdWx0aXBsaWNhdGl2ZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGxlZnQ7XG4gIH0sXG5cbiAgbXVsdGlwbGljYXRpdmU6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZWZ0ID0gdGhpcy51bmFyeSgpO1xuICAgIHZhciB0b2tlbjtcbiAgICB3aGlsZSAoKHRva2VuID0gdGhpcy5leHBlY3QoJyonLCcvJywnJScpKSkge1xuICAgICAgbGVmdCA9IHRoaXMuYmluYXJ5Rm4obGVmdCwgdG9rZW4udGV4dCwgdGhpcy51bmFyeSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGxlZnQ7XG4gIH0sXG5cbiAgdW5hcnk6IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0b2tlbjtcbiAgICBpZiAodGhpcy5leHBlY3QoJysnKSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJpbWFyeSgpO1xuICAgIH0gZWxzZSBpZiAoKHRva2VuID0gdGhpcy5leHBlY3QoJy0nKSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmJpbmFyeUZuKFBhcnNlci5aRVJPLCB0b2tlbi50ZXh0LCB0aGlzLnVuYXJ5KCkpO1xuICAgIH0gZWxzZSBpZiAoKHRva2VuID0gdGhpcy5leHBlY3QoJyEnKSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnVuYXJ5Rm4odG9rZW4udGV4dCwgdGhpcy51bmFyeSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucHJpbWFyeSgpO1xuICAgIH1cbiAgfSxcblxuICBmaWVsZEFjY2VzczogZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGV4cHJlc3Npb24gPSB0aGlzLnRleHQ7XG4gICAgdmFyIGZpZWxkID0gdGhpcy5jb25zdW1lKCkudGV4dDtcbiAgICB2YXIgZ2V0dGVyID0gZ2V0dGVyRm4oZmllbGQsIHRoaXMub3B0aW9ucywgZXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICRwYXJzZUZpZWxkQWNjZXNzKHNjb3BlLCBsb2NhbHMsIHNlbGYpIHtcbiAgICAgIHJldHVybiBnZXR0ZXIoc2VsZiB8fCBvYmplY3Qoc2NvcGUsIGxvY2FscykpO1xuICAgIH0sIHtcbiAgICAgIGFzc2lnbjogZnVuY3Rpb24oc2NvcGUsIHZhbHVlLCBsb2NhbHMpIHtcbiAgICAgICAgdmFyIG8gPSBvYmplY3Qoc2NvcGUsIGxvY2Fscyk7XG4gICAgICAgIGlmICghbykgb2JqZWN0LmFzc2lnbihzY29wZSwgbyA9IHt9KTtcbiAgICAgICAgcmV0dXJuIHNldHRlcihvLCBmaWVsZCwgdmFsdWUsIGV4cHJlc3Npb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuXG4gIG9iamVjdEluZGV4OiBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgZXhwcmVzc2lvbiA9IHRoaXMudGV4dDtcblxuICAgIHZhciBpbmRleEZuID0gdGhpcy5leHByZXNzaW9uKCk7XG4gICAgdGhpcy5jb25zdW1lKCddJyk7XG5cbiAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICRwYXJzZU9iamVjdEluZGV4KHNlbGYsIGxvY2Fscykge1xuICAgICAgdmFyIG8gPSBvYmooc2VsZiwgbG9jYWxzKSxcbiAgICAgICAgICBpID0gaW5kZXhGbihzZWxmLCBsb2NhbHMpLFxuICAgICAgICAgIHY7XG5cbiAgICAgIGVuc3VyZVNhZmVNZW1iZXJOYW1lKGksIGV4cHJlc3Npb24pO1xuICAgICAgaWYgKCFvKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgdiA9IGVuc3VyZVNhZmVPYmplY3Qob1tpXSwgZXhwcmVzc2lvbik7XG4gICAgICByZXR1cm4gdjtcbiAgICB9LCB7XG4gICAgICBhc3NpZ246IGZ1bmN0aW9uKHNlbGYsIHZhbHVlLCBsb2NhbHMpIHtcbiAgICAgICAgdmFyIGtleSA9IGVuc3VyZVNhZmVNZW1iZXJOYW1lKGluZGV4Rm4oc2VsZiwgbG9jYWxzKSwgZXhwcmVzc2lvbik7XG4gICAgICAgIC8vIHByZXZlbnQgb3ZlcndyaXRpbmcgb2YgRnVuY3Rpb24uY29uc3RydWN0b3Igd2hpY2ggd291bGQgYnJlYWsgZW5zdXJlU2FmZU9iamVjdCBjaGVja1xuICAgICAgICB2YXIgbyA9IGVuc3VyZVNhZmVPYmplY3Qob2JqKHNlbGYsIGxvY2FscyksIGV4cHJlc3Npb24pO1xuICAgICAgICBpZiAoIW8pIG9iai5hc3NpZ24oc2VsZiwgbyA9IHt9KTtcbiAgICAgICAgcmV0dXJuIG9ba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuXG4gIGZ1bmN0aW9uQ2FsbDogZnVuY3Rpb24oZm5HZXR0ZXIsIGNvbnRleHRHZXR0ZXIpIHtcbiAgICB2YXIgYXJnc0ZuID0gW107XG4gICAgaWYgKHRoaXMucGVla1Rva2VuKCkudGV4dCAhPT0gJyknKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGFyZ3NGbi5wdXNoKHRoaXMuZXhwcmVzc2lvbigpKTtcbiAgICAgIH0gd2hpbGUgKHRoaXMuZXhwZWN0KCcsJykpO1xuICAgIH1cbiAgICB0aGlzLmNvbnN1bWUoJyknKTtcblxuICAgIHZhciBleHByZXNzaW9uVGV4dCA9IHRoaXMudGV4dDtcbiAgICAvLyB3ZSBjYW4gc2FmZWx5IHJldXNlIHRoZSBhcnJheSBhY3Jvc3MgaW52b2NhdGlvbnNcbiAgICB2YXIgYXJncyA9IGFyZ3NGbi5sZW5ndGggPyBbXSA6IG51bGw7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gJHBhcnNlRnVuY3Rpb25DYWxsKHNjb3BlLCBsb2NhbHMpIHtcbiAgICAgIHZhciBjb250ZXh0ID0gY29udGV4dEdldHRlciA/IGNvbnRleHRHZXR0ZXIoc2NvcGUsIGxvY2FscykgOiBzY29wZTtcbiAgICAgIHZhciBmbiA9IGZuR2V0dGVyKHNjb3BlLCBsb2NhbHMsIGNvbnRleHQpIHx8IG5vb3A7XG5cbiAgICAgIGlmIChhcmdzKSB7XG4gICAgICAgIHZhciBpID0gYXJnc0ZuLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIGFyZ3NbaV0gPSBlbnN1cmVTYWZlT2JqZWN0KGFyZ3NGbltpXShzY29wZSwgbG9jYWxzKSwgZXhwcmVzc2lvblRleHQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVuc3VyZVNhZmVPYmplY3QoY29udGV4dCwgZXhwcmVzc2lvblRleHQpO1xuICAgICAgZW5zdXJlU2FmZUZ1bmN0aW9uKGZuLCBleHByZXNzaW9uVGV4dCk7XG5cbiAgICAgIC8vIElFIHN0dXBpZGl0eSEgKElFIGRvZXNuJ3QgaGF2ZSBhcHBseSBmb3Igc29tZSBuYXRpdmUgZnVuY3Rpb25zKVxuICAgICAgdmFyIHYgPSBmbi5hcHBseVxuICAgICAgICAgICAgPyBmbi5hcHBseShjb250ZXh0LCBhcmdzKVxuICAgICAgICAgICAgOiBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTtcblxuICAgICAgcmV0dXJuIGVuc3VyZVNhZmVPYmplY3QodiwgZXhwcmVzc2lvblRleHQpO1xuICAgIH07XG4gIH0sXG5cbiAgLy8gVGhpcyBpcyB1c2VkIHdpdGgganNvbiBhcnJheSBkZWNsYXJhdGlvblxuICBhcnJheURlY2xhcmF0aW9uOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZWxlbWVudEZucyA9IFtdO1xuICAgIGlmICh0aGlzLnBlZWtUb2tlbigpLnRleHQgIT09ICddJykge1xuICAgICAgZG8ge1xuICAgICAgICBpZiAodGhpcy5wZWVrKCddJykpIHtcbiAgICAgICAgICAvLyBTdXBwb3J0IHRyYWlsaW5nIGNvbW1hcyBwZXIgRVM1LjEuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudEZucy5wdXNoKHRoaXMuZXhwcmVzc2lvbigpKTtcbiAgICAgIH0gd2hpbGUgKHRoaXMuZXhwZWN0KCcsJykpO1xuICAgIH1cbiAgICB0aGlzLmNvbnN1bWUoJ10nKTtcblxuICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gJHBhcnNlQXJyYXlMaXRlcmFsKHNlbGYsIGxvY2Fscykge1xuICAgICAgdmFyIGFycmF5ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBlbGVtZW50Rm5zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgYXJyYXkucHVzaChlbGVtZW50Rm5zW2ldKHNlbGYsIGxvY2FscykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH0sIHtcbiAgICAgIGxpdGVyYWw6IHRydWUsXG4gICAgICBjb25zdGFudDogZWxlbWVudEZucy5ldmVyeShpc0NvbnN0YW50KSxcbiAgICAgIGlucHV0czogZWxlbWVudEZuc1xuICAgIH0pO1xuICB9LFxuXG4gIG9iamVjdDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGtleXMgPSBbXSwgdmFsdWVGbnMgPSBbXTtcbiAgICBpZiAodGhpcy5wZWVrVG9rZW4oKS50ZXh0ICE9PSAnfScpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMucGVlaygnfScpKSB7XG4gICAgICAgICAgLy8gU3VwcG9ydCB0cmFpbGluZyBjb21tYXMgcGVyIEVTNS4xLlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b2tlbiA9IHRoaXMuY29uc3VtZSgpO1xuICAgICAgICBpZiAodG9rZW4uY29uc3RhbnQpIHtcbiAgICAgICAgICBrZXlzLnB1c2godG9rZW4udmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRva2VuLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICBrZXlzLnB1c2godG9rZW4udGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50aHJvd0Vycm9yKFwiaW52YWxpZCBrZXlcIiwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uc3VtZSgnOicpO1xuICAgICAgICB2YWx1ZUZucy5wdXNoKHRoaXMuZXhwcmVzc2lvbigpKTtcbiAgICAgIH0gd2hpbGUgKHRoaXMuZXhwZWN0KCcsJykpO1xuICAgIH1cbiAgICB0aGlzLmNvbnN1bWUoJ30nKTtcblxuICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gJHBhcnNlT2JqZWN0TGl0ZXJhbChzZWxmLCBsb2NhbHMpIHtcbiAgICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHZhbHVlRm5zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgb2JqZWN0W2tleXNbaV1dID0gdmFsdWVGbnNbaV0oc2VsZiwgbG9jYWxzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfSwge1xuICAgICAgbGl0ZXJhbDogdHJ1ZSxcbiAgICAgIGNvbnN0YW50OiB2YWx1ZUZucy5ldmVyeShpc0NvbnN0YW50KSxcbiAgICAgIGlucHV0czogdmFsdWVGbnNcbiAgICB9KTtcbiAgfVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUGFyc2VyIGhlbHBlciBmdW5jdGlvbnNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHNldHRlcihvYmosIHBhdGgsIHNldFZhbHVlLCBmdWxsRXhwKSB7XG4gIGVuc3VyZVNhZmVPYmplY3Qob2JqLCBmdWxsRXhwKTtcblxuICB2YXIgZWxlbWVudCA9IHBhdGguc3BsaXQoJy4nKSwga2V5O1xuICBmb3IgKHZhciBpID0gMDsgZWxlbWVudC5sZW5ndGggPiAxOyBpKyspIHtcbiAgICBrZXkgPSBlbnN1cmVTYWZlTWVtYmVyTmFtZShlbGVtZW50LnNoaWZ0KCksIGZ1bGxFeHApO1xuICAgIHZhciBwcm9wZXJ0eU9iaiA9IGVuc3VyZVNhZmVPYmplY3Qob2JqW2tleV0sIGZ1bGxFeHApO1xuICAgIGlmICghcHJvcGVydHlPYmopIHtcbiAgICAgIHByb3BlcnR5T2JqID0ge307XG4gICAgICBvYmpba2V5XSA9IHByb3BlcnR5T2JqO1xuICAgIH1cbiAgICBvYmogPSBwcm9wZXJ0eU9iajtcbiAgfVxuICBrZXkgPSBlbnN1cmVTYWZlTWVtYmVyTmFtZShlbGVtZW50LnNoaWZ0KCksIGZ1bGxFeHApO1xuICBlbnN1cmVTYWZlT2JqZWN0KG9ialtrZXldLCBmdWxsRXhwKTtcbiAgb2JqW2tleV0gPSBzZXRWYWx1ZTtcbiAgcmV0dXJuIHNldFZhbHVlO1xufVxuXG52YXIgZ2V0dGVyRm5DYWNoZURlZmF1bHQgPSBjcmVhdGVNYXAoKTtcbnZhciBnZXR0ZXJGbkNhY2hlRXhwZW5zaXZlID0gY3JlYXRlTWFwKCk7XG5cbmZ1bmN0aW9uIGlzUG9zc2libHlEYW5nZXJvdXNNZW1iZXJOYW1lKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgPT0gJ2NvbnN0cnVjdG9yJztcbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgXCJCbGFjayBIb2xlXCIgdmFyaWFudCBmcm9tOlxuICogLSBodHRwOi8vanNwZXJmLmNvbS9hbmd1bGFyanMtcGFyc2UtZ2V0dGVyLzRcbiAqIC0gaHR0cDovL2pzcGVyZi5jb20vcGF0aC1ldmFsdWF0aW9uLXNpbXBsaWZpZWQvN1xuICovXG5mdW5jdGlvbiBjc3BTYWZlR2V0dGVyRm4oa2V5MCwga2V5MSwga2V5Miwga2V5Mywga2V5NCwgZnVsbEV4cCwgZXhwZW5zaXZlQ2hlY2tzKSB7XG4gIGVuc3VyZVNhZmVNZW1iZXJOYW1lKGtleTAsIGZ1bGxFeHApO1xuICBlbnN1cmVTYWZlTWVtYmVyTmFtZShrZXkxLCBmdWxsRXhwKTtcbiAgZW5zdXJlU2FmZU1lbWJlck5hbWUoa2V5MiwgZnVsbEV4cCk7XG4gIGVuc3VyZVNhZmVNZW1iZXJOYW1lKGtleTMsIGZ1bGxFeHApO1xuICBlbnN1cmVTYWZlTWVtYmVyTmFtZShrZXk0LCBmdWxsRXhwKTtcbiAgdmFyIGVzbyA9IGZ1bmN0aW9uKG8pIHtcbiAgICByZXR1cm4gZW5zdXJlU2FmZU9iamVjdChvLCBmdWxsRXhwKTtcbiAgfTtcbiAgdmFyIGVzbzAgPSAoZXhwZW5zaXZlQ2hlY2tzIHx8IGlzUG9zc2libHlEYW5nZXJvdXNNZW1iZXJOYW1lKGtleTApKSA/IGVzbyA6IGlkZW50aXR5O1xuICB2YXIgZXNvMSA9IChleHBlbnNpdmVDaGVja3MgfHwgaXNQb3NzaWJseURhbmdlcm91c01lbWJlck5hbWUoa2V5MSkpID8gZXNvIDogaWRlbnRpdHk7XG4gIHZhciBlc28yID0gKGV4cGVuc2l2ZUNoZWNrcyB8fCBpc1Bvc3NpYmx5RGFuZ2Vyb3VzTWVtYmVyTmFtZShrZXkyKSkgPyBlc28gOiBpZGVudGl0eTtcbiAgdmFyIGVzbzMgPSAoZXhwZW5zaXZlQ2hlY2tzIHx8IGlzUG9zc2libHlEYW5nZXJvdXNNZW1iZXJOYW1lKGtleTMpKSA/IGVzbyA6IGlkZW50aXR5O1xuICB2YXIgZXNvNCA9IChleHBlbnNpdmVDaGVja3MgfHwgaXNQb3NzaWJseURhbmdlcm91c01lbWJlck5hbWUoa2V5NCkpID8gZXNvIDogaWRlbnRpdHk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNzcFNhZmVHZXR0ZXIoc2NvcGUsIGxvY2Fscykge1xuICAgIHZhciBwYXRoVmFsID0gKGxvY2FscyAmJiBsb2NhbHMuaGFzT3duUHJvcGVydHkoa2V5MCkpID8gbG9jYWxzIDogc2NvcGU7XG5cbiAgICBpZiAocGF0aFZhbCA9PSBudWxsKSByZXR1cm4gcGF0aFZhbDtcbiAgICBwYXRoVmFsID0gZXNvMChwYXRoVmFsW2tleTBdKTtcblxuICAgIGlmICgha2V5MSkgcmV0dXJuIHBhdGhWYWw7XG4gICAgaWYgKHBhdGhWYWwgPT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBwYXRoVmFsID0gZXNvMShwYXRoVmFsW2tleTFdKTtcblxuICAgIGlmICgha2V5MikgcmV0dXJuIHBhdGhWYWw7XG4gICAgaWYgKHBhdGhWYWwgPT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBwYXRoVmFsID0gZXNvMihwYXRoVmFsW2tleTJdKTtcblxuICAgIGlmICgha2V5MykgcmV0dXJuIHBhdGhWYWw7XG4gICAgaWYgKHBhdGhWYWwgPT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBwYXRoVmFsID0gZXNvMyhwYXRoVmFsW2tleTNdKTtcblxuICAgIGlmICgha2V5NCkgcmV0dXJuIHBhdGhWYWw7XG4gICAgaWYgKHBhdGhWYWwgPT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBwYXRoVmFsID0gZXNvNChwYXRoVmFsW2tleTRdKTtcblxuICAgIHJldHVybiBwYXRoVmFsO1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXR0ZXJGbldpdGhFbnN1cmVTYWZlT2JqZWN0KGZuLCBmdWxsRXhwcmVzc2lvbikge1xuICByZXR1cm4gZnVuY3Rpb24ocywgbCkge1xuICAgIHJldHVybiBmbihzLCBsLCBlbnN1cmVTYWZlT2JqZWN0LCBmdWxsRXhwcmVzc2lvbik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldHRlckZuKHBhdGgsIG9wdGlvbnMsIGZ1bGxFeHApIHtcbiAgdmFyIGV4cGVuc2l2ZUNoZWNrcyA9IG9wdGlvbnMuZXhwZW5zaXZlQ2hlY2tzO1xuICB2YXIgZ2V0dGVyRm5DYWNoZSA9IChleHBlbnNpdmVDaGVja3MgPyBnZXR0ZXJGbkNhY2hlRXhwZW5zaXZlIDogZ2V0dGVyRm5DYWNoZURlZmF1bHQpO1xuICB2YXIgZm4gPSBnZXR0ZXJGbkNhY2hlW3BhdGhdO1xuICBpZiAoZm4pIHJldHVybiBmbjtcblxuXG4gIHZhciBwYXRoS2V5cyA9IHBhdGguc3BsaXQoJy4nKSxcbiAgICAgIHBhdGhLZXlzTGVuZ3RoID0gcGF0aEtleXMubGVuZ3RoO1xuXG4gIC8vIGh0dHA6Ly9qc3BlcmYuY29tL2FuZ3VsYXJqcy1wYXJzZS1nZXR0ZXIvNlxuICBpZiAob3B0aW9ucy5jc3ApIHtcbiAgICBpZiAocGF0aEtleXNMZW5ndGggPCA2KSB7XG4gICAgICBmbiA9IGNzcFNhZmVHZXR0ZXJGbihwYXRoS2V5c1swXSwgcGF0aEtleXNbMV0sIHBhdGhLZXlzWzJdLCBwYXRoS2V5c1szXSwgcGF0aEtleXNbNF0sIGZ1bGxFeHAsIGV4cGVuc2l2ZUNoZWNrcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZuID0gZnVuY3Rpb24gY3NwU2FmZUdldHRlcihzY29wZSwgbG9jYWxzKSB7XG4gICAgICAgIHZhciBpID0gMCwgdmFsO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgdmFsID0gY3NwU2FmZUdldHRlckZuKHBhdGhLZXlzW2krK10sIHBhdGhLZXlzW2krK10sIHBhdGhLZXlzW2krK10sIHBhdGhLZXlzW2krK10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhLZXlzW2krK10sIGZ1bGxFeHAsIGV4cGVuc2l2ZUNoZWNrcykoc2NvcGUsIGxvY2Fscyk7XG5cbiAgICAgICAgICBsb2NhbHMgPSB1bmRlZmluZWQ7IC8vIGNsZWFyIGFmdGVyIGZpcnN0IGl0ZXJhdGlvblxuICAgICAgICAgIHNjb3BlID0gdmFsO1xuICAgICAgICB9IHdoaWxlIChpIDwgcGF0aEtleXNMZW5ndGgpO1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNvZGUgPSAnJztcbiAgICBpZiAoZXhwZW5zaXZlQ2hlY2tzKSB7XG4gICAgICBjb2RlICs9ICdzID0gZXNvKHMsIGZlKTtcXG5sID0gZXNvKGwsIGZlKTtcXG4nO1xuICAgIH1cbiAgICB2YXIgbmVlZHNFbnN1cmVTYWZlT2JqZWN0ID0gZXhwZW5zaXZlQ2hlY2tzO1xuICAgIGZvckVhY2gocGF0aEtleXMsIGZ1bmN0aW9uKGtleSwgaW5kZXgpIHtcbiAgICAgIGVuc3VyZVNhZmVNZW1iZXJOYW1lKGtleSwgZnVsbEV4cCk7XG4gICAgICB2YXIgbG9va3VwSnMgPSAoaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBzaW1wbHkgZGVyZWZlcmVuY2UgJ3MnIG9uIGFueSAuZG90IG5vdGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgPyAncydcbiAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgaWYgd2UgYXJlIGZpcnN0IHRoZW4gd2UgY2hlY2sgbG9jYWxzIGZpcnN0LCBhbmQgaWYgc28gcmVhZCBpdCBmaXJzdFxuICAgICAgICAgICAgICAgICAgICAgIDogJygobCYmbC5oYXNPd25Qcm9wZXJ0eShcIicgKyBrZXkgKyAnXCIpKT9sOnMpJykgKyAnLicgKyBrZXk7XG4gICAgICBpZiAoZXhwZW5zaXZlQ2hlY2tzIHx8IGlzUG9zc2libHlEYW5nZXJvdXNNZW1iZXJOYW1lKGtleSkpIHtcbiAgICAgICAgbG9va3VwSnMgPSAnZXNvKCcgKyBsb29rdXBKcyArICcsIGZlKSc7XG4gICAgICAgIG5lZWRzRW5zdXJlU2FmZU9iamVjdCA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb2RlICs9ICdpZihzID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XFxuJyArXG4gICAgICAgICAgICAgICdzPScgKyBsb29rdXBKcyArICc7XFxuJztcbiAgICB9KTtcbiAgICBjb2RlICs9ICdyZXR1cm4gczsnO1xuXG4gICAgLyoganNoaW50IC1XMDU0ICovXG4gICAgdmFyIGV2YWxlZEZuR2V0dGVyID0gbmV3IEZ1bmN0aW9uKCdzJywgJ2wnLCAnZXNvJywgJ2ZlJywgY29kZSk7IC8vIHM9c2NvcGUsIGw9bG9jYWxzLCBlc289ZW5zdXJlU2FmZU9iamVjdFxuICAgIC8qIGpzaGludCArVzA1NCAqL1xuICAgIGV2YWxlZEZuR2V0dGVyLnRvU3RyaW5nID0gdmFsdWVGbihjb2RlKTtcbiAgICBpZiAobmVlZHNFbnN1cmVTYWZlT2JqZWN0KSB7XG4gICAgICBldmFsZWRGbkdldHRlciA9IGdldHRlckZuV2l0aEVuc3VyZVNhZmVPYmplY3QoZXZhbGVkRm5HZXR0ZXIsIGZ1bGxFeHApO1xuICAgIH1cbiAgICBmbiA9IGV2YWxlZEZuR2V0dGVyO1xuICB9XG5cbiAgZm4uc2hhcmVkR2V0dGVyID0gdHJ1ZTtcbiAgZm4uYXNzaWduID0gZnVuY3Rpb24oc2VsZiwgdmFsdWUpIHtcbiAgICByZXR1cm4gc2V0dGVyKHNlbGYsIHBhdGgsIHZhbHVlLCBwYXRoKTtcbiAgfTtcbiAgZ2V0dGVyRm5DYWNoZVtwYXRoXSA9IGZuO1xuICByZXR1cm4gZm47XG59XG5cbnZhciBvYmplY3RWYWx1ZU9mID0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mO1xuXG5mdW5jdGlvbiBnZXRWYWx1ZU9mKHZhbHVlKSB7XG4gIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlLnZhbHVlT2YpID8gdmFsdWUudmFsdWVPZigpIDogb2JqZWN0VmFsdWVPZi5jYWxsKHZhbHVlKTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBAbmdkb2Mgc2VydmljZVxuICogQG5hbWUgJHBhcnNlXG4gKiBAa2luZCBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIENvbnZlcnRzIEFuZ3VsYXIge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaW50byBhIGZ1bmN0aW9uLlxuICpcbiAqIGBgYGpzXG4gKiAgIHZhciBnZXR0ZXIgPSAkcGFyc2UoJ3VzZXIubmFtZScpO1xuICogICB2YXIgc2V0dGVyID0gZ2V0dGVyLmFzc2lnbjtcbiAqICAgdmFyIGNvbnRleHQgPSB7dXNlcjp7bmFtZTonYW5ndWxhcid9fTtcbiAqICAgdmFyIGxvY2FscyA9IHt1c2VyOntuYW1lOidsb2NhbCd9fTtcbiAqXG4gKiAgIGV4cGVjdChnZXR0ZXIoY29udGV4dCkpLnRvRXF1YWwoJ2FuZ3VsYXInKTtcbiAqICAgc2V0dGVyKGNvbnRleHQsICduZXdWYWx1ZScpO1xuICogICBleHBlY3QoY29udGV4dC51c2VyLm5hbWUpLnRvRXF1YWwoJ25ld1ZhbHVlJyk7XG4gKiAgIGV4cGVjdChnZXR0ZXIoY29udGV4dCwgbG9jYWxzKSkudG9FcXVhbCgnbG9jYWwnKTtcbiAqIGBgYFxuICpcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiBTdHJpbmcgZXhwcmVzc2lvbiB0byBjb21waWxlLlxuICogQHJldHVybnMge2Z1bmN0aW9uKGNvbnRleHQsIGxvY2Fscyl9IGEgZnVuY3Rpb24gd2hpY2ggcmVwcmVzZW50cyB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbjpcbiAqXG4gKiAgICAqIGBjb250ZXh0YCDigJMgYHtvYmplY3R9YCDigJMgYW4gb2JqZWN0IGFnYWluc3Qgd2hpY2ggYW55IGV4cHJlc3Npb25zIGVtYmVkZGVkIGluIHRoZSBzdHJpbmdzXG4gKiAgICAgIGFyZSBldmFsdWF0ZWQgYWdhaW5zdCAodHlwaWNhbGx5IGEgc2NvcGUgb2JqZWN0KS5cbiAqICAgICogYGxvY2Fsc2Ag4oCTIGB7b2JqZWN0PX1gIOKAkyBsb2NhbCB2YXJpYWJsZXMgY29udGV4dCBvYmplY3QsIHVzZWZ1bCBmb3Igb3ZlcnJpZGluZyB2YWx1ZXMgaW5cbiAqICAgICAgYGNvbnRleHRgLlxuICpcbiAqICAgIFRoZSByZXR1cm5lZCBmdW5jdGlvbiBhbHNvIGhhcyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKiAgICAgICogYGxpdGVyYWxgIOKAkyBge2Jvb2xlYW59YCDigJMgd2hldGhlciB0aGUgZXhwcmVzc2lvbidzIHRvcC1sZXZlbCBub2RlIGlzIGEgSmF2YVNjcmlwdFxuICogICAgICAgIGxpdGVyYWwuXG4gKiAgICAgICogYGNvbnN0YW50YCDigJMgYHtib29sZWFufWAg4oCTIHdoZXRoZXIgdGhlIGV4cHJlc3Npb24gaXMgbWFkZSBlbnRpcmVseSBvZiBKYXZhU2NyaXB0XG4gKiAgICAgICAgY29uc3RhbnQgbGl0ZXJhbHMuXG4gKiAgICAgICogYGFzc2lnbmAg4oCTIGB7P2Z1bmN0aW9uKGNvbnRleHQsIHZhbHVlKX1gIOKAkyBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhc3NpZ25hYmxlLCB0aGlzIHdpbGwgYmVcbiAqICAgICAgICBzZXQgdG8gYSBmdW5jdGlvbiB0byBjaGFuZ2UgaXRzIHZhbHVlIG9uIHRoZSBnaXZlbiBjb250ZXh0LlxuICpcbiAqL1xuXG5cbi8qKlxuICogQG5nZG9jIHByb3ZpZGVyXG4gKiBAbmFtZSAkcGFyc2VQcm92aWRlclxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogYCRwYXJzZVByb3ZpZGVyYCBjYW4gYmUgdXNlZCBmb3IgY29uZmlndXJpbmcgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIHtAbGluayBuZy4kcGFyc2UgJHBhcnNlfVxuICogIHNlcnZpY2UuXG4gKi9cbmZ1bmN0aW9uICRQYXJzZVByb3ZpZGVyKCkge1xuICB2YXIgY2FjaGVEZWZhdWx0ID0gY3JlYXRlTWFwKCk7XG4gIHZhciBjYWNoZUV4cGVuc2l2ZSA9IGNyZWF0ZU1hcCgpO1xuXG5cblxuICB0aGlzLiRnZXQgPSBbJyRmaWx0ZXInLCAnJHNuaWZmZXInLCBmdW5jdGlvbigkZmlsdGVyLCAkc25pZmZlcikge1xuICAgIHZhciAkcGFyc2VPcHRpb25zID0ge1xuICAgICAgICAgIGNzcDogJHNuaWZmZXIuY3NwLFxuICAgICAgICAgIGV4cGVuc2l2ZUNoZWNrczogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgJHBhcnNlT3B0aW9uc0V4cGVuc2l2ZSA9IHtcbiAgICAgICAgICBjc3A6ICRzbmlmZmVyLmNzcCxcbiAgICAgICAgICBleHBlbnNpdmVDaGVja3M6IHRydWVcbiAgICAgICAgfTtcblxuICAgIGZ1bmN0aW9uIHdyYXBTaGFyZWRFeHByZXNzaW9uKGV4cCkge1xuICAgICAgdmFyIHdyYXBwZWQgPSBleHA7XG5cbiAgICAgIGlmIChleHAuc2hhcmVkR2V0dGVyKSB7XG4gICAgICAgIHdyYXBwZWQgPSBmdW5jdGlvbiAkcGFyc2VXcmFwcGVyKHNlbGYsIGxvY2Fscykge1xuICAgICAgICAgIHJldHVybiBleHAoc2VsZiwgbG9jYWxzKTtcbiAgICAgICAgfTtcbiAgICAgICAgd3JhcHBlZC5saXRlcmFsID0gZXhwLmxpdGVyYWw7XG4gICAgICAgIHdyYXBwZWQuY29uc3RhbnQgPSBleHAuY29uc3RhbnQ7XG4gICAgICAgIHdyYXBwZWQuYXNzaWduID0gZXhwLmFzc2lnbjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdyYXBwZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICRwYXJzZShleHAsIGludGVyY2VwdG9yRm4sIGV4cGVuc2l2ZUNoZWNrcykge1xuICAgICAgdmFyIHBhcnNlZEV4cHJlc3Npb24sIG9uZVRpbWUsIGNhY2hlS2V5O1xuXG4gICAgICBzd2l0Y2ggKHR5cGVvZiBleHApIHtcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICBjYWNoZUtleSA9IGV4cCA9IGV4cC50cmltKCk7XG5cbiAgICAgICAgICB2YXIgY2FjaGUgPSAoZXhwZW5zaXZlQ2hlY2tzID8gY2FjaGVFeHBlbnNpdmUgOiBjYWNoZURlZmF1bHQpO1xuICAgICAgICAgIHBhcnNlZEV4cHJlc3Npb24gPSBjYWNoZVtjYWNoZUtleV07XG5cbiAgICAgICAgICBpZiAoIXBhcnNlZEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGlmIChleHAuY2hhckF0KDApID09PSAnOicgJiYgZXhwLmNoYXJBdCgxKSA9PT0gJzonKSB7XG4gICAgICAgICAgICAgIG9uZVRpbWUgPSB0cnVlO1xuICAgICAgICAgICAgICBleHAgPSBleHAuc3Vic3RyaW5nKDIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcGFyc2VPcHRpb25zID0gZXhwZW5zaXZlQ2hlY2tzID8gJHBhcnNlT3B0aW9uc0V4cGVuc2l2ZSA6ICRwYXJzZU9wdGlvbnM7XG4gICAgICAgICAgICB2YXIgbGV4ZXIgPSBuZXcgTGV4ZXIocGFyc2VPcHRpb25zKTtcbiAgICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgUGFyc2VyKGxleGVyLCAkZmlsdGVyLCBwYXJzZU9wdGlvbnMpO1xuICAgICAgICAgICAgcGFyc2VkRXhwcmVzc2lvbiA9IHBhcnNlci5wYXJzZShleHApO1xuXG4gICAgICAgICAgICBpZiAocGFyc2VkRXhwcmVzc2lvbi5jb25zdGFudCkge1xuICAgICAgICAgICAgICBwYXJzZWRFeHByZXNzaW9uLiQkd2F0Y2hEZWxlZ2F0ZSA9IGNvbnN0YW50V2F0Y2hEZWxlZ2F0ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob25lVGltZSkge1xuICAgICAgICAgICAgICAvL29uZVRpbWUgaXMgbm90IHBhcnQgb2YgdGhlIGV4cCBwYXNzZWQgdG8gdGhlIFBhcnNlciBzbyB3ZSBtYXkgaGF2ZSB0b1xuICAgICAgICAgICAgICAvL3dyYXAgdGhlIHBhcnNlZEV4cHJlc3Npb24gYmVmb3JlIGFkZGluZyBhICQkd2F0Y2hEZWxlZ2F0ZVxuICAgICAgICAgICAgICBwYXJzZWRFeHByZXNzaW9uID0gd3JhcFNoYXJlZEV4cHJlc3Npb24ocGFyc2VkRXhwcmVzc2lvbik7XG4gICAgICAgICAgICAgIHBhcnNlZEV4cHJlc3Npb24uJCR3YXRjaERlbGVnYXRlID0gcGFyc2VkRXhwcmVzc2lvbi5saXRlcmFsID9cbiAgICAgICAgICAgICAgICBvbmVUaW1lTGl0ZXJhbFdhdGNoRGVsZWdhdGUgOiBvbmVUaW1lV2F0Y2hEZWxlZ2F0ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2VkRXhwcmVzc2lvbi5pbnB1dHMpIHtcbiAgICAgICAgICAgICAgcGFyc2VkRXhwcmVzc2lvbi4kJHdhdGNoRGVsZWdhdGUgPSBpbnB1dHNXYXRjaERlbGVnYXRlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWNoZVtjYWNoZUtleV0gPSBwYXJzZWRFeHByZXNzaW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWRkSW50ZXJjZXB0b3IocGFyc2VkRXhwcmVzc2lvbiwgaW50ZXJjZXB0b3JGbik7XG5cbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIHJldHVybiBhZGRJbnRlcmNlcHRvcihleHAsIGludGVyY2VwdG9yRm4pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGFkZEludGVyY2VwdG9yKG5vb3AsIGludGVyY2VwdG9yRm4pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjb2xsZWN0RXhwcmVzc2lvbklucHV0cyhpbnB1dHMsIGxpc3QpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGlucHV0cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGlucHV0c1tpXTtcbiAgICAgICAgaWYgKCFpbnB1dC5jb25zdGFudCkge1xuICAgICAgICAgIGlmIChpbnB1dC5pbnB1dHMpIHtcbiAgICAgICAgICAgIGNvbGxlY3RFeHByZXNzaW9uSW5wdXRzKGlucHV0LmlucHV0cywgbGlzdCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChsaXN0LmluZGV4T2YoaW5wdXQpID09PSAtMSkgeyAvLyBUT0RPKHBlcmYpIGNhbiB3ZSBkbyBiZXR0ZXI/XG4gICAgICAgICAgICBsaXN0LnB1c2goaW5wdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHByZXNzaW9uSW5wdXREaXJ0eUNoZWNrKG5ld1ZhbHVlLCBvbGRWYWx1ZU9mVmFsdWUpIHtcblxuICAgICAgaWYgKG5ld1ZhbHVlID09IG51bGwgfHwgb2xkVmFsdWVPZlZhbHVlID09IG51bGwpIHsgLy8gbnVsbC91bmRlZmluZWRcbiAgICAgICAgcmV0dXJuIG5ld1ZhbHVlID09PSBvbGRWYWx1ZU9mVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09ICdvYmplY3QnKSB7XG5cbiAgICAgICAgLy8gYXR0ZW1wdCB0byBjb252ZXJ0IHRoZSB2YWx1ZSB0byBhIHByaW1pdGl2ZSB0eXBlXG4gICAgICAgIC8vIFRPRE8oZG9jcyk6IGFkZCBhIG5vdGUgdG8gZG9jcyB0aGF0IGJ5IGltcGxlbWVudGluZyB2YWx1ZU9mIGV2ZW4gb2JqZWN0cyBhbmQgYXJyYXlzIGNhblxuICAgICAgICAvLyAgICAgICAgICAgICBiZSBjaGVhcGx5IGRpcnR5LWNoZWNrZWRcbiAgICAgICAgbmV3VmFsdWUgPSBnZXRWYWx1ZU9mKG5ld1ZhbHVlKTtcblxuICAgICAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIC8vIG9iamVjdHMvYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIC0gZGVlcC13YXRjaGluZyB0aGVtIHdvdWxkIGJlIHRvbyBleHBlbnNpdmVcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmYWxsLXRocm91Z2ggdG8gdGhlIHByaW1pdGl2ZSBlcXVhbGl0eSBjaGVja1xuICAgICAgfVxuXG4gICAgICAvL1ByaW1pdGl2ZSBvciBOYU5cbiAgICAgIHJldHVybiBuZXdWYWx1ZSA9PT0gb2xkVmFsdWVPZlZhbHVlIHx8IChuZXdWYWx1ZSAhPT0gbmV3VmFsdWUgJiYgb2xkVmFsdWVPZlZhbHVlICE9PSBvbGRWYWx1ZU9mVmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlucHV0c1dhdGNoRGVsZWdhdGUoc2NvcGUsIGxpc3RlbmVyLCBvYmplY3RFcXVhbGl0eSwgcGFyc2VkRXhwcmVzc2lvbikge1xuICAgICAgdmFyIGlucHV0RXhwcmVzc2lvbnMgPSBwYXJzZWRFeHByZXNzaW9uLiQkaW5wdXRzIHx8XG4gICAgICAgICAgICAgICAgICAgIChwYXJzZWRFeHByZXNzaW9uLiQkaW5wdXRzID0gY29sbGVjdEV4cHJlc3Npb25JbnB1dHMocGFyc2VkRXhwcmVzc2lvbi5pbnB1dHMsIFtdKSk7XG5cbiAgICAgIHZhciBsYXN0UmVzdWx0O1xuXG4gICAgICBpZiAoaW5wdXRFeHByZXNzaW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFyIG9sZElucHV0VmFsdWUgPSBleHByZXNzaW9uSW5wdXREaXJ0eUNoZWNrOyAvLyBpbml0IHRvIHNvbWV0aGluZyB1bmlxdWUgc28gdGhhdCBlcXVhbHMgY2hlY2sgZmFpbHNcbiAgICAgICAgaW5wdXRFeHByZXNzaW9ucyA9IGlucHV0RXhwcmVzc2lvbnNbMF07XG4gICAgICAgIHJldHVybiBzY29wZS4kd2F0Y2goZnVuY3Rpb24gZXhwcmVzc2lvbklucHV0V2F0Y2goc2NvcGUpIHtcbiAgICAgICAgICB2YXIgbmV3SW5wdXRWYWx1ZSA9IGlucHV0RXhwcmVzc2lvbnMoc2NvcGUpO1xuICAgICAgICAgIGlmICghZXhwcmVzc2lvbklucHV0RGlydHlDaGVjayhuZXdJbnB1dFZhbHVlLCBvbGRJbnB1dFZhbHVlKSkge1xuICAgICAgICAgICAgbGFzdFJlc3VsdCA9IHBhcnNlZEV4cHJlc3Npb24oc2NvcGUpO1xuICAgICAgICAgICAgb2xkSW5wdXRWYWx1ZSA9IG5ld0lucHV0VmFsdWUgJiYgZ2V0VmFsdWVPZihuZXdJbnB1dFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgICAgIH0sIGxpc3RlbmVyLCBvYmplY3RFcXVhbGl0eSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvbGRJbnB1dFZhbHVlT2ZWYWx1ZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGlucHV0RXhwcmVzc2lvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBvbGRJbnB1dFZhbHVlT2ZWYWx1ZXNbaV0gPSBleHByZXNzaW9uSW5wdXREaXJ0eUNoZWNrOyAvLyBpbml0IHRvIHNvbWV0aGluZyB1bmlxdWUgc28gdGhhdCBlcXVhbHMgY2hlY2sgZmFpbHNcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNjb3BlLiR3YXRjaChmdW5jdGlvbiBleHByZXNzaW9uSW5wdXRzV2F0Y2goc2NvcGUpIHtcbiAgICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBpbnB1dEV4cHJlc3Npb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICB2YXIgbmV3SW5wdXRWYWx1ZSA9IGlucHV0RXhwcmVzc2lvbnNbaV0oc2NvcGUpO1xuICAgICAgICAgIGlmIChjaGFuZ2VkIHx8IChjaGFuZ2VkID0gIWV4cHJlc3Npb25JbnB1dERpcnR5Q2hlY2sobmV3SW5wdXRWYWx1ZSwgb2xkSW5wdXRWYWx1ZU9mVmFsdWVzW2ldKSkpIHtcbiAgICAgICAgICAgIG9sZElucHV0VmFsdWVPZlZhbHVlc1tpXSA9IG5ld0lucHV0VmFsdWUgJiYgZ2V0VmFsdWVPZihuZXdJbnB1dFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgIGxhc3RSZXN1bHQgPSBwYXJzZWRFeHByZXNzaW9uKHNjb3BlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgICAgfSwgbGlzdGVuZXIsIG9iamVjdEVxdWFsaXR5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbmVUaW1lV2F0Y2hEZWxlZ2F0ZShzY29wZSwgbGlzdGVuZXIsIG9iamVjdEVxdWFsaXR5LCBwYXJzZWRFeHByZXNzaW9uKSB7XG4gICAgICB2YXIgdW53YXRjaCwgbGFzdFZhbHVlO1xuICAgICAgcmV0dXJuIHVud2F0Y2ggPSBzY29wZS4kd2F0Y2goZnVuY3Rpb24gb25lVGltZVdhdGNoKHNjb3BlKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWRFeHByZXNzaW9uKHNjb3BlKTtcbiAgICAgIH0sIGZ1bmN0aW9uIG9uZVRpbWVMaXN0ZW5lcih2YWx1ZSwgb2xkLCBzY29wZSkge1xuICAgICAgICBsYXN0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24obGlzdGVuZXIpKSB7XG4gICAgICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICAgIHNjb3BlLiQkcG9zdERpZ2VzdChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQobGFzdFZhbHVlKSkge1xuICAgICAgICAgICAgICB1bndhdGNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIG9iamVjdEVxdWFsaXR5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbmVUaW1lTGl0ZXJhbFdhdGNoRGVsZWdhdGUoc2NvcGUsIGxpc3RlbmVyLCBvYmplY3RFcXVhbGl0eSwgcGFyc2VkRXhwcmVzc2lvbikge1xuICAgICAgdmFyIHVud2F0Y2gsIGxhc3RWYWx1ZTtcbiAgICAgIHJldHVybiB1bndhdGNoID0gc2NvcGUuJHdhdGNoKGZ1bmN0aW9uIG9uZVRpbWVXYXRjaChzY29wZSkge1xuICAgICAgICByZXR1cm4gcGFyc2VkRXhwcmVzc2lvbihzY29wZSk7XG4gICAgICB9LCBmdW5jdGlvbiBvbmVUaW1lTGlzdGVuZXIodmFsdWUsIG9sZCwgc2NvcGUpIHtcbiAgICAgICAgbGFzdFZhbHVlID0gdmFsdWU7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVyKSkge1xuICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgdmFsdWUsIG9sZCwgc2NvcGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FsbERlZmluZWQodmFsdWUpKSB7XG4gICAgICAgICAgc2NvcGUuJCRwb3N0RGlnZXN0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGlzQWxsRGVmaW5lZChsYXN0VmFsdWUpKSB1bndhdGNoKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIG9iamVjdEVxdWFsaXR5KTtcblxuICAgICAgZnVuY3Rpb24gaXNBbGxEZWZpbmVkKHZhbHVlKSB7XG4gICAgICAgIHZhciBhbGxEZWZpbmVkID0gdHJ1ZTtcbiAgICAgICAgZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgaWYgKCFpc0RlZmluZWQodmFsKSkgYWxsRGVmaW5lZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFsbERlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uc3RhbnRXYXRjaERlbGVnYXRlKHNjb3BlLCBsaXN0ZW5lciwgb2JqZWN0RXF1YWxpdHksIHBhcnNlZEV4cHJlc3Npb24pIHtcbiAgICAgIHZhciB1bndhdGNoO1xuICAgICAgcmV0dXJuIHVud2F0Y2ggPSBzY29wZS4kd2F0Y2goZnVuY3Rpb24gY29uc3RhbnRXYXRjaChzY29wZSkge1xuICAgICAgICByZXR1cm4gcGFyc2VkRXhwcmVzc2lvbihzY29wZSk7XG4gICAgICB9LCBmdW5jdGlvbiBjb25zdGFudExpc3RlbmVyKHZhbHVlLCBvbGQsIHNjb3BlKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVyKSkge1xuICAgICAgICAgIGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgdW53YXRjaCgpO1xuICAgICAgfSwgb2JqZWN0RXF1YWxpdHkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZEludGVyY2VwdG9yKHBhcnNlZEV4cHJlc3Npb24sIGludGVyY2VwdG9yRm4pIHtcbiAgICAgIGlmICghaW50ZXJjZXB0b3JGbikgcmV0dXJuIHBhcnNlZEV4cHJlc3Npb247XG4gICAgICB2YXIgd2F0Y2hEZWxlZ2F0ZSA9IHBhcnNlZEV4cHJlc3Npb24uJCR3YXRjaERlbGVnYXRlO1xuXG4gICAgICB2YXIgcmVndWxhcldhdGNoID1cbiAgICAgICAgICB3YXRjaERlbGVnYXRlICE9PSBvbmVUaW1lTGl0ZXJhbFdhdGNoRGVsZWdhdGUgJiZcbiAgICAgICAgICB3YXRjaERlbGVnYXRlICE9PSBvbmVUaW1lV2F0Y2hEZWxlZ2F0ZTtcblxuICAgICAgdmFyIGZuID0gcmVndWxhcldhdGNoID8gZnVuY3Rpb24gcmVndWxhckludGVyY2VwdGVkRXhwcmVzc2lvbihzY29wZSwgbG9jYWxzKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnNlZEV4cHJlc3Npb24oc2NvcGUsIGxvY2Fscyk7XG4gICAgICAgIHJldHVybiBpbnRlcmNlcHRvckZuKHZhbHVlLCBzY29wZSwgbG9jYWxzKTtcbiAgICAgIH0gOiBmdW5jdGlvbiBvbmVUaW1lSW50ZXJjZXB0ZWRFeHByZXNzaW9uKHNjb3BlLCBsb2NhbHMpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VkRXhwcmVzc2lvbihzY29wZSwgbG9jYWxzKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGludGVyY2VwdG9yRm4odmFsdWUsIHNjb3BlLCBsb2NhbHMpO1xuICAgICAgICAvLyB3ZSBvbmx5IHJldHVybiB0aGUgaW50ZXJjZXB0b3IncyByZXN1bHQgaWYgdGhlXG4gICAgICAgIC8vIGluaXRpYWwgdmFsdWUgaXMgZGVmaW5lZCAoZm9yIGJpbmQtb25jZSlcbiAgICAgICAgcmV0dXJuIGlzRGVmaW5lZCh2YWx1ZSkgPyByZXN1bHQgOiB2YWx1ZTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFByb3BhZ2F0ZSAkJHdhdGNoRGVsZWdhdGVzIG90aGVyIHRoZW4gaW5wdXRzV2F0Y2hEZWxlZ2F0ZVxuICAgICAgaWYgKHBhcnNlZEV4cHJlc3Npb24uJCR3YXRjaERlbGVnYXRlICYmXG4gICAgICAgICAgcGFyc2VkRXhwcmVzc2lvbi4kJHdhdGNoRGVsZWdhdGUgIT09IGlucHV0c1dhdGNoRGVsZWdhdGUpIHtcbiAgICAgICAgZm4uJCR3YXRjaERlbGVnYXRlID0gcGFyc2VkRXhwcmVzc2lvbi4kJHdhdGNoRGVsZWdhdGU7XG4gICAgICB9IGVsc2UgaWYgKCFpbnRlcmNlcHRvckZuLiRzdGF0ZWZ1bCkge1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbiBpbnRlcmNlcHRvciwgYnV0IG5vIHdhdGNoRGVsZWdhdGUgdGhlbiB0cmVhdCB0aGUgaW50ZXJjZXB0b3IgbGlrZVxuICAgICAgICAvLyB3ZSB0cmVhdCBmaWx0ZXJzIC0gaXQgaXMgYXNzdW1lZCB0byBiZSBhIHB1cmUgZnVuY3Rpb24gdW5sZXNzIGZsYWdnZWQgd2l0aCAkc3RhdGVmdWxcbiAgICAgICAgZm4uJCR3YXRjaERlbGVnYXRlID0gaW5wdXRzV2F0Y2hEZWxlZ2F0ZTtcbiAgICAgICAgZm4uaW5wdXRzID0gW3BhcnNlZEV4cHJlc3Npb25dO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm47XG4gICAgfVxuICB9XTtcbn1cblxuLyoqXG4gKiBAbmdkb2Mgc2VydmljZVxuICogQG5hbWUgJHFcbiAqIEByZXF1aXJlcyAkcm9vdFNjb3BlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBIHNlcnZpY2UgdGhhdCBoZWxwcyB5b3UgcnVuIGZ1bmN0aW9ucyBhc3luY2hyb25vdXNseSwgYW5kIHVzZSB0aGVpciByZXR1cm4gdmFsdWVzIChvciBleGNlcHRpb25zKVxuICogd2hlbiB0aGV5IGFyZSBkb25lIHByb2Nlc3NpbmcuXG4gKlxuICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBwcm9taXNlcy9kZWZlcnJlZCBvYmplY3RzIGluc3BpcmVkIGJ5XG4gKiBbS3JpcyBLb3dhbCdzIFFdKGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlza293YWwvcSkuXG4gKlxuICogJHEgY2FuIGJlIHVzZWQgaW4gdHdvIGZhc2hpb25zIC0tLSBvbmUgd2hpY2ggaXMgbW9yZSBzaW1pbGFyIHRvIEtyaXMgS293YWwncyBRIG9yIGpRdWVyeSdzIERlZmVycmVkXG4gKiBpbXBsZW1lbnRhdGlvbnMsIGFuZCB0aGUgb3RoZXIgd2hpY2ggcmVzZW1ibGVzIEVTNiBwcm9taXNlcyB0byBzb21lIGRlZ3JlZS5cbiAqXG4gKiAjICRxIGNvbnN0cnVjdG9yXG4gKlxuICogVGhlIHN0cmVhbWxpbmVkIEVTNiBzdHlsZSBwcm9taXNlIGlzIGVzc2VudGlhbGx5IGp1c3QgdXNpbmcgJHEgYXMgYSBjb25zdHJ1Y3RvciB3aGljaCB0YWtlcyBhIGByZXNvbHZlcmBcbiAqIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBuYXRpdmUgUHJvbWlzZSBpbXBsZW1lbnRhdGlvbiBmcm9tIEVTNiBIYXJtb255LFxuICogc2VlIFtNRE5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1Byb21pc2UpLlxuICpcbiAqIFdoaWxlIHRoZSBjb25zdHJ1Y3Rvci1zdHlsZSB1c2UgaXMgc3VwcG9ydGVkLCBub3QgYWxsIG9mIHRoZSBzdXBwb3J0aW5nIG1ldGhvZHMgZnJvbSBFUzYgSGFybW9ueSBwcm9taXNlcyBhcmVcbiAqIGF2YWlsYWJsZSB5ZXQuXG4gKlxuICogSXQgY2FuIGJlIHVzZWQgbGlrZSBzbzpcbiAqXG4gKiBgYGBqc1xuICogICAvLyBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBleGFtcGxlIGxldCdzIGFzc3VtZSB0aGF0IHZhcmlhYmxlcyBgJHFgIGFuZCBgb2tUb0dyZWV0YFxuICogICAvLyBhcmUgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IGxleGljYWwgc2NvcGUgKHRoZXkgY291bGQgaGF2ZSBiZWVuIGluamVjdGVkIG9yIHBhc3NlZCBpbikuXG4gKlxuICogICBmdW5jdGlvbiBhc3luY0dyZWV0KG5hbWUpIHtcbiAqICAgICAvLyBwZXJmb3JtIHNvbWUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiwgcmVzb2x2ZSBvciByZWplY3QgdGhlIHByb21pc2Ugd2hlbiBhcHByb3ByaWF0ZS5cbiAqICAgICByZXR1cm4gJHEoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gKiAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICogICAgICAgICBpZiAob2tUb0dyZWV0KG5hbWUpKSB7XG4gKiAgICAgICAgICAgcmVzb2x2ZSgnSGVsbG8sICcgKyBuYW1lICsgJyEnKTtcbiAqICAgICAgICAgfSBlbHNlIHtcbiAqICAgICAgICAgICByZWplY3QoJ0dyZWV0aW5nICcgKyBuYW1lICsgJyBpcyBub3QgYWxsb3dlZC4nKTtcbiAqICAgICAgICAgfVxuICogICAgICAgfSwgMTAwMCk7XG4gKiAgICAgfSk7XG4gKiAgIH1cbiAqXG4gKiAgIHZhciBwcm9taXNlID0gYXN5bmNHcmVldCgnUm9iaW4gSG9vZCcpO1xuICogICBwcm9taXNlLnRoZW4oZnVuY3Rpb24oZ3JlZXRpbmcpIHtcbiAqICAgICBhbGVydCgnU3VjY2VzczogJyArIGdyZWV0aW5nKTtcbiAqICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gKiAgICAgYWxlcnQoJ0ZhaWxlZDogJyArIHJlYXNvbik7XG4gKiAgIH0pO1xuICogYGBgXG4gKlxuICogTm90ZTogcHJvZ3Jlc3Mvbm90aWZ5IGNhbGxiYWNrcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgdmlhIHRoZSBFUzYtc3R5bGUgaW50ZXJmYWNlLlxuICpcbiAqIEhvd2V2ZXIsIHRoZSBtb3JlIHRyYWRpdGlvbmFsIENvbW1vbkpTLXN0eWxlIHVzYWdlIGlzIHN0aWxsIGF2YWlsYWJsZSwgYW5kIGRvY3VtZW50ZWQgYmVsb3cuXG4gKlxuICogW1RoZSBDb21tb25KUyBQcm9taXNlIHByb3Bvc2FsXShodHRwOi8vd2lraS5jb21tb25qcy5vcmcvd2lraS9Qcm9taXNlcykgZGVzY3JpYmVzIGEgcHJvbWlzZSBhcyBhblxuICogaW50ZXJmYWNlIGZvciBpbnRlcmFjdGluZyB3aXRoIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiBhbiBhY3Rpb24gdGhhdCBpc1xuICogcGVyZm9ybWVkIGFzeW5jaHJvbm91c2x5LCBhbmQgbWF5IG9yIG1heSBub3QgYmUgZmluaXNoZWQgYXQgYW55IGdpdmVuIHBvaW50IGluIHRpbWUuXG4gKlxuICogRnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgZGVhbGluZyB3aXRoIGVycm9yIGhhbmRsaW5nLCBkZWZlcnJlZCBhbmQgcHJvbWlzZSBBUElzIGFyZSB0b1xuICogYXN5bmNocm9ub3VzIHByb2dyYW1taW5nIHdoYXQgYHRyeWAsIGBjYXRjaGAgYW5kIGB0aHJvd2Aga2V5d29yZHMgYXJlIHRvIHN5bmNocm9ub3VzIHByb2dyYW1taW5nLlxuICpcbiAqIGBgYGpzXG4gKiAgIC8vIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIGV4YW1wbGUgbGV0J3MgYXNzdW1lIHRoYXQgdmFyaWFibGVzIGAkcWAgYW5kIGBva1RvR3JlZXRgXG4gKiAgIC8vIGFyZSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgbGV4aWNhbCBzY29wZSAodGhleSBjb3VsZCBoYXZlIGJlZW4gaW5qZWN0ZWQgb3IgcGFzc2VkIGluKS5cbiAqXG4gKiAgIGZ1bmN0aW9uIGFzeW5jR3JlZXQobmFtZSkge1xuICogICAgIHZhciBkZWZlcnJlZCA9ICRxLmRlZmVyKCk7XG4gKlxuICogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gKiAgICAgICBkZWZlcnJlZC5ub3RpZnkoJ0Fib3V0IHRvIGdyZWV0ICcgKyBuYW1lICsgJy4nKTtcbiAqXG4gKiAgICAgICBpZiAob2tUb0dyZWV0KG5hbWUpKSB7XG4gKiAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoJ0hlbGxvLCAnICsgbmFtZSArICchJyk7XG4gKiAgICAgICB9IGVsc2Uge1xuICogICAgICAgICBkZWZlcnJlZC5yZWplY3QoJ0dyZWV0aW5nICcgKyBuYW1lICsgJyBpcyBub3QgYWxsb3dlZC4nKTtcbiAqICAgICAgIH1cbiAqICAgICB9LCAxMDAwKTtcbiAqXG4gKiAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7XG4gKiAgIH1cbiAqXG4gKiAgIHZhciBwcm9taXNlID0gYXN5bmNHcmVldCgnUm9iaW4gSG9vZCcpO1xuICogICBwcm9taXNlLnRoZW4oZnVuY3Rpb24oZ3JlZXRpbmcpIHtcbiAqICAgICBhbGVydCgnU3VjY2VzczogJyArIGdyZWV0aW5nKTtcbiAqICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gKiAgICAgYWxlcnQoJ0ZhaWxlZDogJyArIHJlYXNvbik7XG4gKiAgIH0sIGZ1bmN0aW9uKHVwZGF0ZSkge1xuICogICAgIGFsZXJ0KCdHb3Qgbm90aWZpY2F0aW9uOiAnICsgdXBkYXRlKTtcbiAqICAgfSk7XG4gKiBgYGBcbiAqXG4gKiBBdCBmaXJzdCBpdCBtaWdodCBub3QgYmUgb2J2aW91cyB3aHkgdGhpcyBleHRyYSBjb21wbGV4aXR5IGlzIHdvcnRoIHRoZSB0cm91YmxlLiBUaGUgcGF5b2ZmXG4gKiBjb21lcyBpbiB0aGUgd2F5IG9mIGd1YXJhbnRlZXMgdGhhdCBwcm9taXNlIGFuZCBkZWZlcnJlZCBBUElzIG1ha2UsIHNlZVxuICogaHR0cHM6Ly9naXRodWIuY29tL2tyaXNrb3dhbC91bmNvbW1vbmpzL2Jsb2IvbWFzdGVyL3Byb21pc2VzL3NwZWNpZmljYXRpb24ubWQuXG4gKlxuICogQWRkaXRpb25hbGx5IHRoZSBwcm9taXNlIGFwaSBhbGxvd3MgZm9yIGNvbXBvc2l0aW9uIHRoYXQgaXMgdmVyeSBoYXJkIHRvIGRvIHdpdGggdGhlXG4gKiB0cmFkaXRpb25hbCBjYWxsYmFjayAoW0NQU10oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db250aW51YXRpb24tcGFzc2luZ19zdHlsZSkpIGFwcHJvYWNoLlxuICogRm9yIG1vcmUgb24gdGhpcyBwbGVhc2Ugc2VlIHRoZSBbUSBkb2N1bWVudGF0aW9uXShodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2FsL3EpIGVzcGVjaWFsbHkgdGhlXG4gKiBzZWN0aW9uIG9uIHNlcmlhbCBvciBwYXJhbGxlbCBqb2luaW5nIG9mIHByb21pc2VzLlxuICpcbiAqICMgVGhlIERlZmVycmVkIEFQSVxuICpcbiAqIEEgbmV3IGluc3RhbmNlIG9mIGRlZmVycmVkIGlzIGNvbnN0cnVjdGVkIGJ5IGNhbGxpbmcgYCRxLmRlZmVyKClgLlxuICpcbiAqIFRoZSBwdXJwb3NlIG9mIHRoZSBkZWZlcnJlZCBvYmplY3QgaXMgdG8gZXhwb3NlIHRoZSBhc3NvY2lhdGVkIFByb21pc2UgaW5zdGFuY2UgYXMgd2VsbCBhcyBBUElzXG4gKiB0aGF0IGNhbiBiZSB1c2VkIGZvciBzaWduYWxpbmcgdGhlIHN1Y2Nlc3NmdWwgb3IgdW5zdWNjZXNzZnVsIGNvbXBsZXRpb24sIGFzIHdlbGwgYXMgdGhlIHN0YXR1c1xuICogb2YgdGhlIHRhc2suXG4gKlxuICogKipNZXRob2RzKipcbiAqXG4gKiAtIGByZXNvbHZlKHZhbHVlKWAg4oCTIHJlc29sdmVzIHRoZSBkZXJpdmVkIHByb21pc2Ugd2l0aCB0aGUgYHZhbHVlYC4gSWYgdGhlIHZhbHVlIGlzIGEgcmVqZWN0aW9uXG4gKiAgIGNvbnN0cnVjdGVkIHZpYSBgJHEucmVqZWN0YCwgdGhlIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCBpbnN0ZWFkLlxuICogLSBgcmVqZWN0KHJlYXNvbilgIOKAkyByZWplY3RzIHRoZSBkZXJpdmVkIHByb21pc2Ugd2l0aCB0aGUgYHJlYXNvbmAuIFRoaXMgaXMgZXF1aXZhbGVudCB0b1xuICogICByZXNvbHZpbmcgaXQgd2l0aCBhIHJlamVjdGlvbiBjb25zdHJ1Y3RlZCB2aWEgYCRxLnJlamVjdGAuXG4gKiAtIGBub3RpZnkodmFsdWUpYCAtIHByb3ZpZGVzIHVwZGF0ZXMgb24gdGhlIHN0YXR1cyBvZiB0aGUgcHJvbWlzZSdzIGV4ZWN1dGlvbi4gVGhpcyBtYXkgYmUgY2FsbGVkXG4gKiAgIG11bHRpcGxlIHRpbWVzIGJlZm9yZSB0aGUgcHJvbWlzZSBpcyBlaXRoZXIgcmVzb2x2ZWQgb3IgcmVqZWN0ZWQuXG4gKlxuICogKipQcm9wZXJ0aWVzKipcbiAqXG4gKiAtIHByb21pc2Ug4oCTIGB7UHJvbWlzZX1gIOKAkyBwcm9taXNlIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWZlcnJlZC5cbiAqXG4gKlxuICogIyBUaGUgUHJvbWlzZSBBUElcbiAqXG4gKiBBIG5ldyBwcm9taXNlIGluc3RhbmNlIGlzIGNyZWF0ZWQgd2hlbiBhIGRlZmVycmVkIGluc3RhbmNlIGlzIGNyZWF0ZWQgYW5kIGNhbiBiZSByZXRyaWV2ZWQgYnlcbiAqIGNhbGxpbmcgYGRlZmVycmVkLnByb21pc2VgLlxuICpcbiAqIFRoZSBwdXJwb3NlIG9mIHRoZSBwcm9taXNlIG9iamVjdCBpcyB0byBhbGxvdyBmb3IgaW50ZXJlc3RlZCBwYXJ0aWVzIHRvIGdldCBhY2Nlc3MgdG8gdGhlIHJlc3VsdFxuICogb2YgdGhlIGRlZmVycmVkIHRhc2sgd2hlbiBpdCBjb21wbGV0ZXMuXG4gKlxuICogKipNZXRob2RzKipcbiAqXG4gKiAtIGB0aGVuKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgbm90aWZ5Q2FsbGJhY2spYCDigJMgcmVnYXJkbGVzcyBvZiB3aGVuIHRoZSBwcm9taXNlIHdhcyBvclxuICogICB3aWxsIGJlIHJlc29sdmVkIG9yIHJlamVjdGVkLCBgdGhlbmAgY2FsbHMgb25lIG9mIHRoZSBzdWNjZXNzIG9yIGVycm9yIGNhbGxiYWNrcyBhc3luY2hyb25vdXNseVxuICogICBhcyBzb29uIGFzIHRoZSByZXN1bHQgaXMgYXZhaWxhYmxlLiBUaGUgY2FsbGJhY2tzIGFyZSBjYWxsZWQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudDogdGhlIHJlc3VsdFxuICogICBvciByZWplY3Rpb24gcmVhc29uLiBBZGRpdGlvbmFsbHksIHRoZSBub3RpZnkgY2FsbGJhY2sgbWF5IGJlIGNhbGxlZCB6ZXJvIG9yIG1vcmUgdGltZXMgdG9cbiAqICAgcHJvdmlkZSBhIHByb2dyZXNzIGluZGljYXRpb24sIGJlZm9yZSB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBvciByZWplY3RlZC5cbiAqXG4gKiAgIFRoaXMgbWV0aG9kICpyZXR1cm5zIGEgbmV3IHByb21pc2UqIHdoaWNoIGlzIHJlc29sdmVkIG9yIHJlamVjdGVkIHZpYSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZVxuICogICBgc3VjY2Vzc0NhbGxiYWNrYCwgYGVycm9yQ2FsbGJhY2tgLiBJdCBhbHNvIG5vdGlmaWVzIHZpYSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZVxuICogICBgbm90aWZ5Q2FsbGJhY2tgIG1ldGhvZC4gVGhlIHByb21pc2UgY2Fubm90IGJlIHJlc29sdmVkIG9yIHJlamVjdGVkIGZyb20gdGhlIG5vdGlmeUNhbGxiYWNrXG4gKiAgIG1ldGhvZC5cbiAqXG4gKiAtIGBjYXRjaChlcnJvckNhbGxiYWNrKWAg4oCTIHNob3J0aGFuZCBmb3IgYHByb21pc2UudGhlbihudWxsLCBlcnJvckNhbGxiYWNrKWBcbiAqXG4gKiAtIGBmaW5hbGx5KGNhbGxiYWNrLCBub3RpZnlDYWxsYmFjaylgIOKAkyBhbGxvd3MgeW91IHRvIG9ic2VydmUgZWl0aGVyIHRoZSBmdWxmaWxsbWVudCBvciByZWplY3Rpb24gb2YgYSBwcm9taXNlLFxuICogICBidXQgdG8gZG8gc28gd2l0aG91dCBtb2RpZnlpbmcgdGhlIGZpbmFsIHZhbHVlLiBUaGlzIGlzIHVzZWZ1bCB0byByZWxlYXNlIHJlc291cmNlcyBvciBkbyBzb21lXG4gKiAgIGNsZWFuLXVwIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSB3aGV0aGVyIHRoZSBwcm9taXNlIHdhcyByZWplY3RlZCBvciByZXNvbHZlZC4gU2VlIHRoZSBbZnVsbFxuICogICBzcGVjaWZpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2FsL3Evd2lraS9BUEktUmVmZXJlbmNlI3Byb21pc2VmaW5hbGx5Y2FsbGJhY2spIGZvclxuICogICBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqICMgQ2hhaW5pbmcgcHJvbWlzZXNcbiAqXG4gKiBCZWNhdXNlIGNhbGxpbmcgdGhlIGB0aGVuYCBtZXRob2Qgb2YgYSBwcm9taXNlIHJldHVybnMgYSBuZXcgZGVyaXZlZCBwcm9taXNlLCBpdCBpcyBlYXNpbHlcbiAqIHBvc3NpYmxlIHRvIGNyZWF0ZSBhIGNoYWluIG9mIHByb21pc2VzOlxuICpcbiAqIGBgYGpzXG4gKiAgIHByb21pc2VCID0gcHJvbWlzZUEudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAqICAgICByZXR1cm4gcmVzdWx0ICsgMTtcbiAqICAgfSk7XG4gKlxuICogICAvLyBwcm9taXNlQiB3aWxsIGJlIHJlc29sdmVkIGltbWVkaWF0ZWx5IGFmdGVyIHByb21pc2VBIGlzIHJlc29sdmVkIGFuZCBpdHMgdmFsdWVcbiAqICAgLy8gd2lsbCBiZSB0aGUgcmVzdWx0IG9mIHByb21pc2VBIGluY3JlbWVudGVkIGJ5IDFcbiAqIGBgYFxuICpcbiAqIEl0IGlzIHBvc3NpYmxlIHRvIGNyZWF0ZSBjaGFpbnMgb2YgYW55IGxlbmd0aCBhbmQgc2luY2UgYSBwcm9taXNlIGNhbiBiZSByZXNvbHZlZCB3aXRoIGFub3RoZXJcbiAqIHByb21pc2UgKHdoaWNoIHdpbGwgZGVmZXIgaXRzIHJlc29sdXRpb24gZnVydGhlciksIGl0IGlzIHBvc3NpYmxlIHRvIHBhdXNlL2RlZmVyIHJlc29sdXRpb24gb2ZcbiAqIHRoZSBwcm9taXNlcyBhdCBhbnkgcG9pbnQgaW4gdGhlIGNoYWluLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCBwb3dlcmZ1bCBBUElzIGxpa2VcbiAqICRodHRwJ3MgcmVzcG9uc2UgaW50ZXJjZXB0b3JzLlxuICpcbiAqXG4gKiAjIERpZmZlcmVuY2VzIGJldHdlZW4gS3JpcyBLb3dhbCdzIFEgYW5kICRxXG4gKlxuICogIFRoZXJlIGFyZSB0d28gbWFpbiBkaWZmZXJlbmNlczpcbiAqXG4gKiAtICRxIGlzIGludGVncmF0ZWQgd2l0aCB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGV9IFNjb3BlIG1vZGVsIG9ic2VydmF0aW9uXG4gKiAgIG1lY2hhbmlzbSBpbiBhbmd1bGFyLCB3aGljaCBtZWFucyBmYXN0ZXIgcHJvcGFnYXRpb24gb2YgcmVzb2x1dGlvbiBvciByZWplY3Rpb24gaW50byB5b3VyXG4gKiAgIG1vZGVscyBhbmQgYXZvaWRpbmcgdW5uZWNlc3NhcnkgYnJvd3NlciByZXBhaW50cywgd2hpY2ggd291bGQgcmVzdWx0IGluIGZsaWNrZXJpbmcgVUkuXG4gKiAtIFEgaGFzIG1hbnkgbW9yZSBmZWF0dXJlcyB0aGFuICRxLCBidXQgdGhhdCBjb21lcyBhdCBhIGNvc3Qgb2YgYnl0ZXMuICRxIGlzIHRpbnksIGJ1dCBjb250YWluc1xuICogICBhbGwgdGhlIGltcG9ydGFudCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgY29tbW9uIGFzeW5jIHRhc2tzLlxuICpcbiAqICAjIFRlc3RpbmdcbiAqXG4gKiAgYGBganNcbiAqICAgIGl0KCdzaG91bGQgc2ltdWxhdGUgcHJvbWlzZScsIGluamVjdChmdW5jdGlvbigkcSwgJHJvb3RTY29wZSkge1xuICogICAgICB2YXIgZGVmZXJyZWQgPSAkcS5kZWZlcigpO1xuICogICAgICB2YXIgcHJvbWlzZSA9IGRlZmVycmVkLnByb21pc2U7XG4gKiAgICAgIHZhciByZXNvbHZlZFZhbHVlO1xuICpcbiAqICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7IHJlc29sdmVkVmFsdWUgPSB2YWx1ZTsgfSk7XG4gKiAgICAgIGV4cGVjdChyZXNvbHZlZFZhbHVlKS50b0JlVW5kZWZpbmVkKCk7XG4gKlxuICogICAgICAvLyBTaW11bGF0ZSByZXNvbHZpbmcgb2YgcHJvbWlzZVxuICogICAgICBkZWZlcnJlZC5yZXNvbHZlKDEyMyk7XG4gKiAgICAgIC8vIE5vdGUgdGhhdCB0aGUgJ3RoZW4nIGZ1bmN0aW9uIGRvZXMgbm90IGdldCBjYWxsZWQgc3luY2hyb25vdXNseS5cbiAqICAgICAgLy8gVGhpcyBpcyBiZWNhdXNlIHdlIHdhbnQgdGhlIHByb21pc2UgQVBJIHRvIGFsd2F5cyBiZSBhc3luYywgd2hldGhlciBvciBub3RcbiAqICAgICAgLy8gaXQgZ290IGNhbGxlZCBzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5LlxuICogICAgICBleHBlY3QocmVzb2x2ZWRWYWx1ZSkudG9CZVVuZGVmaW5lZCgpO1xuICpcbiAqICAgICAgLy8gUHJvcGFnYXRlIHByb21pc2UgcmVzb2x1dGlvbiB0byAndGhlbicgZnVuY3Rpb25zIHVzaW5nICRhcHBseSgpLlxuICogICAgICAkcm9vdFNjb3BlLiRhcHBseSgpO1xuICogICAgICBleHBlY3QocmVzb2x2ZWRWYWx1ZSkudG9FcXVhbCgxMjMpO1xuICogICAgfSkpO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oZnVuY3Rpb24sIGZ1bmN0aW9uKX0gcmVzb2x2ZXIgRnVuY3Rpb24gd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHJlc29sdmluZyBvclxuICogICByZWplY3RpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgcHJvbWlzZS4gVGhlIGZpcnN0IHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9uIHdoaWNoIHJlc29sdmVzIHRoZVxuICogICBwcm9taXNlLCB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9uIHdoaWNoIHJlamVjdHMgdGhlIHByb21pc2UuXG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBuZXdseSBjcmVhdGVkIHByb21pc2UuXG4gKi9cbmZ1bmN0aW9uICRRUHJvdmlkZXIoKSB7XG5cbiAgdGhpcy4kZ2V0ID0gWyckcm9vdFNjb3BlJywgJyRleGNlcHRpb25IYW5kbGVyJywgZnVuY3Rpb24oJHJvb3RTY29wZSwgJGV4Y2VwdGlvbkhhbmRsZXIpIHtcbiAgICByZXR1cm4gcUZhY3RvcnkoZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICRyb290U2NvcGUuJGV2YWxBc3luYyhjYWxsYmFjayk7XG4gICAgfSwgJGV4Y2VwdGlvbkhhbmRsZXIpO1xuICB9XTtcbn1cblxuZnVuY3Rpb24gJCRRUHJvdmlkZXIoKSB7XG4gIHRoaXMuJGdldCA9IFsnJGJyb3dzZXInLCAnJGV4Y2VwdGlvbkhhbmRsZXInLCBmdW5jdGlvbigkYnJvd3NlciwgJGV4Y2VwdGlvbkhhbmRsZXIpIHtcbiAgICByZXR1cm4gcUZhY3RvcnkoZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgICRicm93c2VyLmRlZmVyKGNhbGxiYWNrKTtcbiAgICB9LCAkZXhjZXB0aW9uSGFuZGxlcik7XG4gIH1dO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBwcm9taXNlIG1hbmFnZXIuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbihmdW5jdGlvbil9IG5leHRUaWNrIEZ1bmN0aW9uIGZvciBleGVjdXRpbmcgZnVuY3Rpb25zIGluIHRoZSBuZXh0IHR1cm4uXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKC4uLiopfSBleGNlcHRpb25IYW5kbGVyIEZ1bmN0aW9uIGludG8gd2hpY2ggdW5leHBlY3RlZCBleGNlcHRpb25zIGFyZSBwYXNzZWQgZm9yXG4gKiAgICAgZGVidWdnaW5nIHB1cnBvc2VzLlxuICogQHJldHVybnMge29iamVjdH0gUHJvbWlzZSBtYW5hZ2VyLlxuICovXG5mdW5jdGlvbiBxRmFjdG9yeShuZXh0VGljaywgZXhjZXB0aW9uSGFuZGxlcikge1xuICB2YXIgJHFNaW5FcnIgPSBtaW5FcnIoJyRxJywgVHlwZUVycm9yKTtcbiAgZnVuY3Rpb24gY2FsbE9uY2Uoc2VsZiwgcmVzb2x2ZUZuLCByZWplY3RGbikge1xuICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiB3cmFwKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgaWYgKGNhbGxlZCkgcmV0dXJuO1xuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICBmbi5jYWxsKHNlbGYsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIFt3cmFwKHJlc29sdmVGbiksIHdyYXAocmVqZWN0Rm4pXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmdkb2MgbWV0aG9kXG4gICAqIEBuYW1lIG5nLiRxI2RlZmVyXG4gICAqIEBraW5kIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDcmVhdGVzIGEgYERlZmVycmVkYCBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyBhIHRhc2sgd2hpY2ggd2lsbCBmaW5pc2ggaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIGRlZmVycmVkLlxuICAgKi9cbiAgdmFyIGRlZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBEZWZlcnJlZCgpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIFByb21pc2UoKSB7XG4gICAgdGhpcy4kJHN0YXRlID0geyBzdGF0dXM6IDAgfTtcbiAgfVxuXG4gIFByb21pc2UucHJvdG90eXBlID0ge1xuICAgIHRoZW46IGZ1bmN0aW9uKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9ncmVzc0JhY2spIHtcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgRGVmZXJyZWQoKTtcblxuICAgICAgdGhpcy4kJHN0YXRlLnBlbmRpbmcgPSB0aGlzLiQkc3RhdGUucGVuZGluZyB8fCBbXTtcbiAgICAgIHRoaXMuJCRzdGF0ZS5wZW5kaW5nLnB1c2goW3Jlc3VsdCwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb2dyZXNzQmFja10pO1xuICAgICAgaWYgKHRoaXMuJCRzdGF0ZS5zdGF0dXMgPiAwKSBzY2hlZHVsZVByb2Nlc3NRdWV1ZSh0aGlzLiQkc3RhdGUpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0LnByb21pc2U7XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgY2FsbGJhY2spO1xuICAgIH0sXG5cbiAgICBcImZpbmFsbHlcIjogZnVuY3Rpb24oY2FsbGJhY2ssIHByb2dyZXNzQmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaGFuZGxlQ2FsbGJhY2sodmFsdWUsIHRydWUsIGNhbGxiYWNrKTtcbiAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVDYWxsYmFjayhlcnJvciwgZmFsc2UsIGNhbGxiYWNrKTtcbiAgICAgIH0sIHByb2dyZXNzQmFjayk7XG4gICAgfVxuICB9O1xuXG4gIC8vRmFzdGVyLCBtb3JlIGJhc2ljIHRoYW4gYW5ndWxhci5iaW5kIGh0dHA6Ly9qc3BlcmYuY29tL2FuZ3VsYXItYmluZC12cy1jdXN0b20tdnMtbmF0aXZlXG4gIGZ1bmN0aW9uIHNpbXBsZUJpbmQoY29udGV4dCwgZm4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGZuLmNhbGwoY29udGV4dCwgdmFsdWUpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzUXVldWUoc3RhdGUpIHtcbiAgICB2YXIgZm4sIHByb21pc2UsIHBlbmRpbmc7XG5cbiAgICBwZW5kaW5nID0gc3RhdGUucGVuZGluZztcbiAgICBzdGF0ZS5wcm9jZXNzU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgc3RhdGUucGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwZW5kaW5nLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIHByb21pc2UgPSBwZW5kaW5nW2ldWzBdO1xuICAgICAgZm4gPSBwZW5kaW5nW2ldW3N0YXRlLnN0YXR1c107XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihmbikpIHtcbiAgICAgICAgICBwcm9taXNlLnJlc29sdmUoZm4oc3RhdGUudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5zdGF0dXMgPT09IDEpIHtcbiAgICAgICAgICBwcm9taXNlLnJlc29sdmUoc3RhdGUudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb21pc2UucmVqZWN0KHN0YXRlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBwcm9taXNlLnJlamVjdChlKTtcbiAgICAgICAgZXhjZXB0aW9uSGFuZGxlcihlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY2hlZHVsZVByb2Nlc3NRdWV1ZShzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5wcm9jZXNzU2NoZWR1bGVkIHx8ICFzdGF0ZS5wZW5kaW5nKSByZXR1cm47XG4gICAgc3RhdGUucHJvY2Vzc1NjaGVkdWxlZCA9IHRydWU7XG4gICAgbmV4dFRpY2soZnVuY3Rpb24oKSB7IHByb2Nlc3NRdWV1ZShzdGF0ZSk7IH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gRGVmZXJyZWQoKSB7XG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKTtcbiAgICAvL05lY2Vzc2FyeSB0byBzdXBwb3J0IHVuYm91bmQgZXhlY3V0aW9uIDovXG4gICAgdGhpcy5yZXNvbHZlID0gc2ltcGxlQmluZCh0aGlzLCB0aGlzLnJlc29sdmUpO1xuICAgIHRoaXMucmVqZWN0ID0gc2ltcGxlQmluZCh0aGlzLCB0aGlzLnJlamVjdCk7XG4gICAgdGhpcy5ub3RpZnkgPSBzaW1wbGVCaW5kKHRoaXMsIHRoaXMubm90aWZ5KTtcbiAgfVxuXG4gIERlZmVycmVkLnByb3RvdHlwZSA9IHtcbiAgICByZXNvbHZlOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLnByb21pc2UuJCRzdGF0ZS5zdGF0dXMpIHJldHVybjtcbiAgICAgIGlmICh2YWwgPT09IHRoaXMucHJvbWlzZSkge1xuICAgICAgICB0aGlzLiQkcmVqZWN0KCRxTWluRXJyKFxuICAgICAgICAgICdxY3ljbGUnLFxuICAgICAgICAgIFwiRXhwZWN0ZWQgcHJvbWlzZSB0byBiZSByZXNvbHZlZCB3aXRoIHZhbHVlIG90aGVyIHRoYW4gaXRzZWxmICd7MH0nXCIsXG4gICAgICAgICAgdmFsKSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy4kJHJlc29sdmUodmFsKTtcbiAgICAgIH1cblxuICAgIH0sXG5cbiAgICAkJHJlc29sdmU6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgdmFyIHRoZW4sIGZucztcblxuICAgICAgZm5zID0gY2FsbE9uY2UodGhpcywgdGhpcy4kJHJlc29sdmUsIHRoaXMuJCRyZWplY3QpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKChpc09iamVjdCh2YWwpIHx8IGlzRnVuY3Rpb24odmFsKSkpIHRoZW4gPSB2YWwgJiYgdmFsLnRoZW47XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoZW4pKSB7XG4gICAgICAgICAgdGhpcy5wcm9taXNlLiQkc3RhdGUuc3RhdHVzID0gLTE7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbCwgZm5zWzBdLCBmbnNbMV0sIHRoaXMubm90aWZ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb21pc2UuJCRzdGF0ZS52YWx1ZSA9IHZhbDtcbiAgICAgICAgICB0aGlzLnByb21pc2UuJCRzdGF0ZS5zdGF0dXMgPSAxO1xuICAgICAgICAgIHNjaGVkdWxlUHJvY2Vzc1F1ZXVlKHRoaXMucHJvbWlzZS4kJHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBmbnNbMV0oZSk7XG4gICAgICAgIGV4Y2VwdGlvbkhhbmRsZXIoZSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlamVjdDogZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICBpZiAodGhpcy5wcm9taXNlLiQkc3RhdGUuc3RhdHVzKSByZXR1cm47XG4gICAgICB0aGlzLiQkcmVqZWN0KHJlYXNvbik7XG4gICAgfSxcblxuICAgICQkcmVqZWN0OiBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAgIHRoaXMucHJvbWlzZS4kJHN0YXRlLnZhbHVlID0gcmVhc29uO1xuICAgICAgdGhpcy5wcm9taXNlLiQkc3RhdGUuc3RhdHVzID0gMjtcbiAgICAgIHNjaGVkdWxlUHJvY2Vzc1F1ZXVlKHRoaXMucHJvbWlzZS4kJHN0YXRlKTtcbiAgICB9LFxuXG4gICAgbm90aWZ5OiBmdW5jdGlvbihwcm9ncmVzcykge1xuICAgICAgdmFyIGNhbGxiYWNrcyA9IHRoaXMucHJvbWlzZS4kJHN0YXRlLnBlbmRpbmc7XG5cbiAgICAgIGlmICgodGhpcy5wcm9taXNlLiQkc3RhdGUuc3RhdHVzIDw9IDApICYmIGNhbGxiYWNrcyAmJiBjYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICAgIG5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBjYWxsYmFjaywgcmVzdWx0O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBjYWxsYmFja3NbaV1bMF07XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrc1tpXVszXTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5ub3RpZnkoaXNGdW5jdGlvbihjYWxsYmFjaykgPyBjYWxsYmFjayhwcm9ncmVzcykgOiBwcm9ncmVzcyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXIoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgJHEjcmVqZWN0XG4gICAqIEBraW5kIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDcmVhdGVzIGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIGFzIHJlamVjdGVkIHdpdGggdGhlIHNwZWNpZmllZCBgcmVhc29uYC4gVGhpcyBhcGkgc2hvdWxkIGJlXG4gICAqIHVzZWQgdG8gZm9yd2FyZCByZWplY3Rpb24gaW4gYSBjaGFpbiBvZiBwcm9taXNlcy4gSWYgeW91IGFyZSBkZWFsaW5nIHdpdGggdGhlIGxhc3QgcHJvbWlzZSBpblxuICAgKiBhIHByb21pc2UgY2hhaW4sIHlvdSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0LlxuICAgKlxuICAgKiBXaGVuIGNvbXBhcmluZyBkZWZlcnJlZHMvcHJvbWlzZXMgdG8gdGhlIGZhbWlsaWFyIGJlaGF2aW9yIG9mIHRyeS9jYXRjaC90aHJvdywgdGhpbmsgb2ZcbiAgICogYHJlamVjdGAgYXMgdGhlIGB0aHJvd2Aga2V5d29yZCBpbiBKYXZhU2NyaXB0LiBUaGlzIGFsc28gbWVhbnMgdGhhdCBpZiB5b3UgXCJjYXRjaFwiIGFuIGVycm9yIHZpYVxuICAgKiBhIHByb21pc2UgZXJyb3IgY2FsbGJhY2sgYW5kIHlvdSB3YW50IHRvIGZvcndhcmQgdGhlIGVycm9yIHRvIHRoZSBwcm9taXNlIGRlcml2ZWQgZnJvbSB0aGVcbiAgICogY3VycmVudCBwcm9taXNlLCB5b3UgaGF2ZSB0byBcInJldGhyb3dcIiB0aGUgZXJyb3IgYnkgcmV0dXJuaW5nIGEgcmVqZWN0aW9uIGNvbnN0cnVjdGVkIHZpYVxuICAgKiBgcmVqZWN0YC5cbiAgICpcbiAgICogYGBganNcbiAgICogICBwcm9taXNlQiA9IHByb21pc2VBLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAqICAgICAvLyBzdWNjZXNzOiBkbyBzb21ldGhpbmcgYW5kIHJlc29sdmUgcHJvbWlzZUJcbiAgICogICAgIC8vICAgICAgICAgIHdpdGggdGhlIG9sZCBvciBhIG5ldyByZXN1bHRcbiAgICogICAgIHJldHVybiByZXN1bHQ7XG4gICAqICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAqICAgICAvLyBlcnJvcjogaGFuZGxlIHRoZSBlcnJvciBpZiBwb3NzaWJsZSBhbmRcbiAgICogICAgIC8vICAgICAgICByZXNvbHZlIHByb21pc2VCIHdpdGggbmV3UHJvbWlzZU9yVmFsdWUsXG4gICAqICAgICAvLyAgICAgICAgb3RoZXJ3aXNlIGZvcndhcmQgdGhlIHJlamVjdGlvbiB0byBwcm9taXNlQlxuICAgKiAgICAgaWYgKGNhbkhhbmRsZShyZWFzb24pKSB7XG4gICAqICAgICAgLy8gaGFuZGxlIHRoZSBlcnJvciBhbmQgcmVjb3ZlclxuICAgKiAgICAgIHJldHVybiBuZXdQcm9taXNlT3JWYWx1ZTtcbiAgICogICAgIH1cbiAgICogICAgIHJldHVybiAkcS5yZWplY3QocmVhc29uKTtcbiAgICogICB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gcmVhc29uIENvbnN0YW50LCBtZXNzYWdlLCBleGNlcHRpb24gb3IgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVqZWN0aW9uIHJlYXNvbi5cbiAgICogQHJldHVybnMge1Byb21pc2V9IFJldHVybnMgYSBwcm9taXNlIHRoYXQgd2FzIGFscmVhZHkgcmVzb2x2ZWQgYXMgcmVqZWN0ZWQgd2l0aCB0aGUgYHJlYXNvbmAuXG4gICAqL1xuICB2YXIgcmVqZWN0ID0gZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBEZWZlcnJlZCgpO1xuICAgIHJlc3VsdC5yZWplY3QocmVhc29uKTtcbiAgICByZXR1cm4gcmVzdWx0LnByb21pc2U7XG4gIH07XG5cbiAgdmFyIG1ha2VQcm9taXNlID0gZnVuY3Rpb24gbWFrZVByb21pc2UodmFsdWUsIHJlc29sdmVkKSB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBEZWZlcnJlZCgpO1xuICAgIGlmIChyZXNvbHZlZCkge1xuICAgICAgcmVzdWx0LnJlc29sdmUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucmVqZWN0KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5wcm9taXNlO1xuICB9O1xuXG4gIHZhciBoYW5kbGVDYWxsYmFjayA9IGZ1bmN0aW9uIGhhbmRsZUNhbGxiYWNrKHZhbHVlLCBpc1Jlc29sdmVkLCBjYWxsYmFjaykge1xuICAgIHZhciBjYWxsYmFja091dHB1dCA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgY2FsbGJhY2tPdXRwdXQgPSBjYWxsYmFjaygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBtYWtlUHJvbWlzZShlLCBmYWxzZSk7XG4gICAgfVxuICAgIGlmIChpc1Byb21pc2VMaWtlKGNhbGxiYWNrT3V0cHV0KSkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrT3V0cHV0LnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBtYWtlUHJvbWlzZSh2YWx1ZSwgaXNSZXNvbHZlZCk7XG4gICAgICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICByZXR1cm4gbWFrZVByb21pc2UoZXJyb3IsIGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWFrZVByb21pc2UodmFsdWUsIGlzUmVzb2x2ZWQpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQG5nZG9jIG1ldGhvZFxuICAgKiBAbmFtZSAkcSN3aGVuXG4gICAqIEBraW5kIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXcmFwcyBhbiBvYmplY3QgdGhhdCBtaWdodCBiZSBhIHZhbHVlIG9yIGEgKDNyZCBwYXJ0eSkgdGhlbi1hYmxlIHByb21pc2UgaW50byBhICRxIHByb21pc2UuXG4gICAqIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGFyZSBkZWFsaW5nIHdpdGggYW4gb2JqZWN0IHRoYXQgbWlnaHQgb3IgbWlnaHQgbm90IGJlIGEgcHJvbWlzZSwgb3IgaWZcbiAgICogdGhlIHByb21pc2UgY29tZXMgZnJvbSBhIHNvdXJjZSB0aGF0IGNhbid0IGJlIHRydXN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgb3IgYSBwcm9taXNlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXR1cm5zIGEgcHJvbWlzZSBvZiB0aGUgcGFzc2VkIHZhbHVlIG9yIHByb21pc2VcbiAgICovXG5cblxuICB2YXIgd2hlbiA9IGZ1bmN0aW9uKHZhbHVlLCBjYWxsYmFjaywgZXJyYmFjaywgcHJvZ3Jlc3NCYWNrKSB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBEZWZlcnJlZCgpO1xuICAgIHJlc3VsdC5yZXNvbHZlKHZhbHVlKTtcbiAgICByZXR1cm4gcmVzdWx0LnByb21pc2UudGhlbihjYWxsYmFjaywgZXJyYmFjaywgcHJvZ3Jlc3NCYWNrKTtcbiAgfTtcblxuICAvKipcbiAgICogQG5nZG9jIG1ldGhvZFxuICAgKiBAbmFtZSAkcSNhbGxcbiAgICogQGtpbmQgZnVuY3Rpb25cbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENvbWJpbmVzIG11bHRpcGxlIHByb21pc2VzIGludG8gYSBzaW5nbGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gYWxsIG9mIHRoZSBpbnB1dFxuICAgKiBwcm9taXNlcyBhcmUgcmVzb2x2ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPFByb21pc2U+fE9iamVjdC48UHJvbWlzZT59IHByb21pc2VzIEFuIGFycmF5IG9yIGhhc2ggb2YgcHJvbWlzZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXR1cm5zIGEgc2luZ2xlIHByb21pc2UgdGhhdCB3aWxsIGJlIHJlc29sdmVkIHdpdGggYW4gYXJyYXkvaGFzaCBvZiB2YWx1ZXMsXG4gICAqICAgZWFjaCB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9taXNlIGF0IHRoZSBzYW1lIGluZGV4L2tleSBpbiB0aGUgYHByb21pc2VzYCBhcnJheS9oYXNoLlxuICAgKiAgIElmIGFueSBvZiB0aGUgcHJvbWlzZXMgaXMgcmVzb2x2ZWQgd2l0aCBhIHJlamVjdGlvbiwgdGhpcyByZXN1bHRpbmcgcHJvbWlzZSB3aWxsIGJlIHJlamVjdGVkXG4gICAqICAgd2l0aCB0aGUgc2FtZSByZWplY3Rpb24gdmFsdWUuXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICAgIHZhciBkZWZlcnJlZCA9IG5ldyBEZWZlcnJlZCgpLFxuICAgICAgICBjb3VudGVyID0gMCxcbiAgICAgICAgcmVzdWx0cyA9IGlzQXJyYXkocHJvbWlzZXMpID8gW10gOiB7fTtcblxuICAgIGZvckVhY2gocHJvbWlzZXMsIGZ1bmN0aW9uKHByb21pc2UsIGtleSkge1xuICAgICAgY291bnRlcisrO1xuICAgICAgd2hlbihwcm9taXNlKS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGlmIChyZXN1bHRzLmhhc093blByb3BlcnR5KGtleSkpIHJldHVybjtcbiAgICAgICAgcmVzdWx0c1trZXldID0gdmFsdWU7XG4gICAgICAgIGlmICghKC0tY291bnRlcikpIGRlZmVycmVkLnJlc29sdmUocmVzdWx0cyk7XG4gICAgICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAgICAgaWYgKHJlc3VsdHMuaGFzT3duUHJvcGVydHkoa2V5KSkgcmV0dXJuO1xuICAgICAgICBkZWZlcnJlZC5yZWplY3QocmVhc29uKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGNvdW50ZXIgPT09IDApIHtcbiAgICAgIGRlZmVycmVkLnJlc29sdmUocmVzdWx0cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7XG4gIH1cblxuICB2YXIgJFEgPSBmdW5jdGlvbiBRKHJlc29sdmVyKSB7XG4gICAgaWYgKCFpc0Z1bmN0aW9uKHJlc29sdmVyKSkge1xuICAgICAgdGhyb3cgJHFNaW5FcnIoJ25vcnNsdnInLCBcIkV4cGVjdGVkIHJlc29sdmVyRm4sIGdvdCAnezB9J1wiLCByZXNvbHZlcik7XG4gICAgfVxuXG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFEpKSB7XG4gICAgICAvLyBNb3JlIHVzZWZ1bCB3aGVuICRRIGlzIHRoZSBQcm9taXNlIGl0c2VsZi5cbiAgICAgIHJldHVybiBuZXcgUShyZXNvbHZlcik7XG4gICAgfVxuXG4gICAgdmFyIGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlRm4odmFsdWUpIHtcbiAgICAgIGRlZmVycmVkLnJlc29sdmUodmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlamVjdEZuKHJlYXNvbikge1xuICAgICAgZGVmZXJyZWQucmVqZWN0KHJlYXNvbik7XG4gICAgfVxuXG4gICAgcmVzb2x2ZXIocmVzb2x2ZUZuLCByZWplY3RGbik7XG5cbiAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTtcbiAgfTtcblxuICAkUS5kZWZlciA9IGRlZmVyO1xuICAkUS5yZWplY3QgPSByZWplY3Q7XG4gICRRLndoZW4gPSB3aGVuO1xuICAkUS5hbGwgPSBhbGw7XG5cbiAgcmV0dXJuICRRO1xufVxuXG5mdW5jdGlvbiAkJFJBRlByb3ZpZGVyKCkgeyAvL3JBRlxuICB0aGlzLiRnZXQgPSBbJyR3aW5kb3cnLCAnJHRpbWVvdXQnLCBmdW5jdGlvbigkd2luZG93LCAkdGltZW91dCkge1xuICAgIHZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAkd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZTtcblxuICAgIHZhciBjYW5jZWxBbmltYXRpb25GcmFtZSA9ICR3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2luZG93LndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdpbmRvdy5tb3pDYW5jZWxBbmltYXRpb25GcmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aW5kb3cud2Via2l0Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuXG4gICAgdmFyIHJhZlN1cHBvcnRlZCA9ICEhcmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuICAgIHZhciByYWYgPSByYWZTdXBwb3J0ZWRcbiAgICAgID8gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgICB2YXIgaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZm4pO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICA6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgICAgdmFyIHRpbWVyID0gJHRpbWVvdXQoZm4sIDE2LjY2LCBmYWxzZSk7IC8vIDEwMDAgLyA2MCA9IDE2LjY2NlxuICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICR0aW1lb3V0LmNhbmNlbCh0aW1lcik7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgIHJhZi5zdXBwb3J0ZWQgPSByYWZTdXBwb3J0ZWQ7XG5cbiAgICByZXR1cm4gcmFmO1xuICB9XTtcbn1cblxuLyoqXG4gKiBERVNJR04gTk9URVNcbiAqXG4gKiBUaGUgZGVzaWduIGRlY2lzaW9ucyBiZWhpbmQgdGhlIHNjb3BlIGFyZSBoZWF2aWx5IGZhdm9yZWQgZm9yIHNwZWVkIGFuZCBtZW1vcnkgY29uc3VtcHRpb24uXG4gKlxuICogVGhlIHR5cGljYWwgdXNlIG9mIHNjb3BlIGlzIHRvIHdhdGNoIHRoZSBleHByZXNzaW9ucywgd2hpY2ggbW9zdCBvZiB0aGUgdGltZSByZXR1cm4gdGhlIHNhbWVcbiAqIHZhbHVlIGFzIGxhc3QgdGltZSBzbyB3ZSBvcHRpbWl6ZSB0aGUgb3BlcmF0aW9uLlxuICpcbiAqIENsb3N1cmVzIGNvbnN0cnVjdGlvbiBpcyBleHBlbnNpdmUgaW4gdGVybXMgb2Ygc3BlZWQgYXMgd2VsbCBhcyBtZW1vcnk6XG4gKiAgIC0gTm8gY2xvc3VyZXMsIGluc3RlYWQgdXNlIHByb3RvdHlwaWNhbCBpbmhlcml0YW5jZSBmb3IgQVBJXG4gKiAgIC0gSW50ZXJuYWwgc3RhdGUgbmVlZHMgdG8gYmUgc3RvcmVkIG9uIHNjb3BlIGRpcmVjdGx5LCB3aGljaCBtZWFucyB0aGF0IHByaXZhdGUgc3RhdGUgaXNcbiAqICAgICBleHBvc2VkIGFzICQkX19fXyBwcm9wZXJ0aWVzXG4gKlxuICogTG9vcCBvcGVyYXRpb25zIGFyZSBvcHRpbWl6ZWQgYnkgdXNpbmcgd2hpbGUoY291bnQtLSkgeyAuLi4gfVxuICogICAtIHRoaXMgbWVhbnMgdGhhdCBpbiBvcmRlciB0byBrZWVwIHRoZSBzYW1lIG9yZGVyIG9mIGV4ZWN1dGlvbiBhcyBhZGRpdGlvbiB3ZSBoYXZlIHRvIGFkZFxuICogICAgIGl0ZW1zIHRvIHRoZSBhcnJheSBhdCB0aGUgYmVnaW5uaW5nICh1bnNoaWZ0KSBpbnN0ZWFkIG9mIGF0IHRoZSBlbmQgKHB1c2gpXG4gKlxuICogQ2hpbGQgc2NvcGVzIGFyZSBjcmVhdGVkIGFuZCByZW1vdmVkIG9mdGVuXG4gKiAgIC0gVXNpbmcgYW4gYXJyYXkgd291bGQgYmUgc2xvdyBzaW5jZSBpbnNlcnRzIGluIG1pZGRsZSBhcmUgZXhwZW5zaXZlIHNvIHdlIHVzZSBsaW5rZWQgbGlzdFxuICpcbiAqIFRoZXJlIGFyZSBmZXcgd2F0Y2hlcyB0aGVuIGEgbG90IG9mIG9ic2VydmVycy4gVGhpcyBpcyB3aHkgeW91IGRvbid0IHdhbnQgdGhlIG9ic2VydmVyIHRvIGJlXG4gKiBpbXBsZW1lbnRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgd2F0Y2guIFdhdGNoIHJlcXVpcmVzIHJldHVybiBvZiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiB3aGljaFxuICogYXJlIGV4cGVuc2l2ZSB0byBjb25zdHJ1Y3QuXG4gKi9cblxuXG4vKipcbiAqIEBuZ2RvYyBwcm92aWRlclxuICogQG5hbWUgJHJvb3RTY29wZVByb3ZpZGVyXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBQcm92aWRlciBmb3IgdGhlICRyb290U2NvcGUgc2VydmljZS5cbiAqL1xuXG4vKipcbiAqIEBuZ2RvYyBtZXRob2RcbiAqIEBuYW1lICRyb290U2NvcGVQcm92aWRlciNkaWdlc3RUdGxcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIFNldHMgdGhlIG51bWJlciBvZiBgJGRpZ2VzdGAgaXRlcmF0aW9ucyB0aGUgc2NvcGUgc2hvdWxkIGF0dGVtcHQgdG8gZXhlY3V0ZSBiZWZvcmUgZ2l2aW5nIHVwIGFuZFxuICogYXNzdW1pbmcgdGhhdCB0aGUgbW9kZWwgaXMgdW5zdGFibGUuXG4gKlxuICogVGhlIGN1cnJlbnQgZGVmYXVsdCBpcyAxMCBpdGVyYXRpb25zLlxuICpcbiAqIEluIGNvbXBsZXggYXBwbGljYXRpb25zIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gYCR3YXRjaGBzIHdpbGwgcmVzdWx0IGluXG4gKiBzZXZlcmFsIGRpZ2VzdCBpdGVyYXRpb25zLiBIb3dldmVyIGlmIGFuIGFwcGxpY2F0aW9uIG5lZWRzIG1vcmUgdGhhbiB0aGUgZGVmYXVsdCAxMCBkaWdlc3RcbiAqIGl0ZXJhdGlvbnMgZm9yIGl0cyBtb2RlbCB0byBzdGFiaWxpemUgdGhlbiB5b3Ugc2hvdWxkIGludmVzdGlnYXRlIHdoYXQgaXMgY2F1c2luZyB0aGUgbW9kZWwgdG9cbiAqIGNvbnRpbnVvdXNseSBjaGFuZ2UgZHVyaW5nIHRoZSBkaWdlc3QuXG4gKlxuICogSW5jcmVhc2luZyB0aGUgVFRMIGNvdWxkIGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBzbyB5b3Ugc2hvdWxkIG5vdCBjaGFuZ2UgaXQgd2l0aG91dFxuICogcHJvcGVyIGp1c3RpZmljYXRpb24uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IFRoZSBudW1iZXIgb2YgZGlnZXN0IGl0ZXJhdGlvbnMuXG4gKi9cblxuXG4vKipcbiAqIEBuZ2RvYyBzZXJ2aWNlXG4gKiBAbmFtZSAkcm9vdFNjb3BlXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBFdmVyeSBhcHBsaWNhdGlvbiBoYXMgYSBzaW5nbGUgcm9vdCB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSBzY29wZX0uXG4gKiBBbGwgb3RoZXIgc2NvcGVzIGFyZSBkZXNjZW5kYW50IHNjb3BlcyBvZiB0aGUgcm9vdCBzY29wZS4gU2NvcGVzIHByb3ZpZGUgc2VwYXJhdGlvblxuICogYmV0d2VlbiB0aGUgbW9kZWwgYW5kIHRoZSB2aWV3LCB2aWEgYSBtZWNoYW5pc20gZm9yIHdhdGNoaW5nIHRoZSBtb2RlbCBmb3IgY2hhbmdlcy5cbiAqIFRoZXkgYWxzbyBwcm92aWRlIGFuIGV2ZW50IGVtaXNzaW9uL2Jyb2FkY2FzdCBhbmQgc3Vic2NyaXB0aW9uIGZhY2lsaXR5LiBTZWUgdGhlXG4gKiB7QGxpbmsgZ3VpZGUvc2NvcGUgZGV2ZWxvcGVyIGd1aWRlIG9uIHNjb3Blc30uXG4gKi9cbmZ1bmN0aW9uICRSb290U2NvcGVQcm92aWRlcigpIHtcbiAgdmFyIFRUTCA9IDEwO1xuICB2YXIgJHJvb3RTY29wZU1pbkVyciA9IG1pbkVycignJHJvb3RTY29wZScpO1xuICB2YXIgbGFzdERpcnR5V2F0Y2ggPSBudWxsO1xuICB2YXIgYXBwbHlBc3luY0lkID0gbnVsbDtcblxuICB0aGlzLmRpZ2VzdFR0bCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIFRUTCA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gVFRMO1xuICB9O1xuXG4gIHRoaXMuJGdldCA9IFsnJGluamVjdG9yJywgJyRleGNlcHRpb25IYW5kbGVyJywgJyRwYXJzZScsICckYnJvd3NlcicsXG4gICAgICBmdW5jdGlvbigkaW5qZWN0b3IsICRleGNlcHRpb25IYW5kbGVyLCAkcGFyc2UsICRicm93c2VyKSB7XG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgdHlwZVxuICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGVcbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIEEgcm9vdCBzY29wZSBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZSAkcm9vdFNjb3BlfSBrZXkgZnJvbSB0aGVcbiAgICAgKiB7QGxpbmsgYXV0by4kaW5qZWN0b3IgJGluamVjdG9yfS4gQ2hpbGQgc2NvcGVzIGFyZSBjcmVhdGVkIHVzaW5nIHRoZVxuICAgICAqIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRuZXcgJG5ldygpfSBtZXRob2QuIChNb3N0IHNjb3BlcyBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW5cbiAgICAgKiBjb21waWxlZCBIVE1MIHRlbXBsYXRlIGlzIGV4ZWN1dGVkLilcbiAgICAgKlxuICAgICAqIEhlcmUgaXMgYSBzaW1wbGUgc2NvcGUgc25pcHBldCB0byBzaG93IGhvdyB5b3UgY2FuIGludGVyYWN0IHdpdGggdGhlIHNjb3BlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8ZmlsZSBzcmM9XCIuL3Rlc3Qvbmcvcm9vdFNjb3BlU3BlYy5qc1wiIHRhZz1cImRvY3MxXCIgLz5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqICMgSW5oZXJpdGFuY2VcbiAgICAgKiBBIHNjb3BlIGNhbiBpbmhlcml0IGZyb20gYSBwYXJlbnQgc2NvcGUsIGFzIGluIHRoaXMgZXhhbXBsZTpcbiAgICAgKiBgYGBqc1xuICAgICAgICAgdmFyIHBhcmVudCA9ICRyb290U2NvcGU7XG4gICAgICAgICB2YXIgY2hpbGQgPSBwYXJlbnQuJG5ldygpO1xuXG4gICAgICAgICBwYXJlbnQuc2FsdXRhdGlvbiA9IFwiSGVsbG9cIjtcbiAgICAgICAgIGNoaWxkLm5hbWUgPSBcIldvcmxkXCI7XG4gICAgICAgICBleHBlY3QoY2hpbGQuc2FsdXRhdGlvbikudG9FcXVhbCgnSGVsbG8nKTtcblxuICAgICAgICAgY2hpbGQuc2FsdXRhdGlvbiA9IFwiV2VsY29tZVwiO1xuICAgICAgICAgZXhwZWN0KGNoaWxkLnNhbHV0YXRpb24pLnRvRXF1YWwoJ1dlbGNvbWUnKTtcbiAgICAgICAgIGV4cGVjdChwYXJlbnQuc2FsdXRhdGlvbikudG9FcXVhbCgnSGVsbG8nKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBgU2NvcGVgIGluIHRlc3RzLCBhZGRpdGlvbmFsIGhlbHBlciBtZXRob2RzIGFyZSBhdmFpbGFibGUgb24gdGhlXG4gICAgICogaW5zdGFuY2VzIG9mIGBTY29wZWAgdHlwZS4gU2VlIHtAbGluayBuZ01vY2suJHJvb3RTY29wZS5TY29wZSBuZ01vY2sgU2NvcGV9IGZvciBhZGRpdGlvbmFsXG4gICAgICogZGV0YWlscy5cbiAgICAgKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgZnVuY3Rpb24oKT49fSBwcm92aWRlcnMgTWFwIG9mIHNlcnZpY2UgZmFjdG9yeSB3aGljaCBuZWVkIHRvIGJlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBmb3IgdGhlIGN1cnJlbnQgc2NvcGUuIERlZmF1bHRzIHRvIHtAbGluayBuZ30uXG4gICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgKj49fSBpbnN0YW5jZUNhY2hlIFByb3ZpZGVzIHByZS1pbnN0YW50aWF0ZWQgc2VydmljZXMgd2hpY2ggc2hvdWxkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQvb3ZlcnJpZGUgc2VydmljZXMgcHJvdmlkZWQgYnkgYHByb3ZpZGVyc2AuIFRoaXMgaXMgaGFuZHlcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdW5pdC10ZXN0aW5nIGFuZCBoYXZpbmcgdGhlIG5lZWQgdG8gb3ZlcnJpZGUgYSBkZWZhdWx0XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IE5ld2x5IGNyZWF0ZWQgc2NvcGUuXG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBTY29wZSgpIHtcbiAgICAgIHRoaXMuJGlkID0gbmV4dFVpZCgpO1xuICAgICAgdGhpcy4kJHBoYXNlID0gdGhpcy4kcGFyZW50ID0gdGhpcy4kJHdhdGNoZXJzID1cbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCRuZXh0U2libGluZyA9IHRoaXMuJCRwcmV2U2libGluZyA9XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLiQkY2hpbGRIZWFkID0gdGhpcy4kJGNoaWxkVGFpbCA9IG51bGw7XG4gICAgICB0aGlzLiRyb290ID0gdGhpcztcbiAgICAgIHRoaXMuJCRkZXN0cm95ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuJCRsaXN0ZW5lcnMgPSB7fTtcbiAgICAgIHRoaXMuJCRsaXN0ZW5lckNvdW50ID0ge307XG4gICAgICB0aGlzLiQkaXNvbGF0ZUJpbmRpbmdzID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgcHJvcGVydHlcbiAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyRpZFxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogVW5pcXVlIHNjb3BlIElEIChtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcpIHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxuICAgICAqL1xuXG4gICAgIC8qKlxuICAgICAgKiBAbmdkb2MgcHJvcGVydHlcbiAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkcGFyZW50XG4gICAgICAqXG4gICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBzY29wZS5cbiAgICAgICovXG5cbiAgICAgIC8qKlxuICAgICAgICogQG5nZG9jIHByb3BlcnR5XG4gICAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyRyb290XG4gICAgICAgKlxuICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIHJvb3Qgc2NvcGUuXG4gICAgICAgKi9cblxuICAgIFNjb3BlLnByb3RvdHlwZSA9IHtcbiAgICAgIGNvbnN0cnVjdG9yOiBTY29wZSxcbiAgICAgIC8qKlxuICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkbmV3XG4gICAgICAgKiBAa2luZCBmdW5jdGlvblxuICAgICAgICpcbiAgICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgICogQ3JlYXRlcyBhIG5ldyBjaGlsZCB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSBzY29wZX0uXG4gICAgICAgKlxuICAgICAgICogVGhlIHBhcmVudCBzY29wZSB3aWxsIHByb3BhZ2F0ZSB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0KCl9IGV2ZW50LlxuICAgICAgICogVGhlIHNjb3BlIGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIHNjb3BlIGhpZXJhcmNoeSB1c2luZyB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGVzdHJveSAkZGVzdHJveSgpfS5cbiAgICAgICAqXG4gICAgICAgKiB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGVzdHJveSAkZGVzdHJveSgpfSBtdXN0IGJlIGNhbGxlZCBvbiBhIHNjb3BlIHdoZW4gaXQgaXNcbiAgICAgICAqIGRlc2lyZWQgZm9yIHRoZSBzY29wZSBhbmQgaXRzIGNoaWxkIHNjb3BlcyB0byBiZSBwZXJtYW5lbnRseSBkZXRhY2hlZCBmcm9tIHRoZSBwYXJlbnQgYW5kXG4gICAgICAgKiB0aHVzIHN0b3AgcGFydGljaXBhdGluZyBpbiBtb2RlbCBjaGFuZ2UgZGV0ZWN0aW9uIGFuZCBsaXN0ZW5lciBub3RpZmljYXRpb24gYnkgaW52b2tpbmcuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtib29sZWFufSBpc29sYXRlIElmIHRydWUsIHRoZW4gdGhlIHNjb3BlIGRvZXMgbm90IHByb3RvdHlwaWNhbGx5IGluaGVyaXQgZnJvbSB0aGVcbiAgICAgICAqICAgICAgICAgcGFyZW50IHNjb3BlLiBUaGUgc2NvcGUgaXMgaXNvbGF0ZWQsIGFzIGl0IGNhbiBub3Qgc2VlIHBhcmVudCBzY29wZSBwcm9wZXJ0aWVzLlxuICAgICAgICogICAgICAgICBXaGVuIGNyZWF0aW5nIHdpZGdldHMsIGl0IGlzIHVzZWZ1bCBmb3IgdGhlIHdpZGdldCB0byBub3QgYWNjaWRlbnRhbGx5IHJlYWQgcGFyZW50XG4gICAgICAgKiAgICAgICAgIHN0YXRlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7U2NvcGV9IFtwYXJlbnQ9dGhpc10gVGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIGBTY29wZWB9IHRoYXQgd2lsbCBiZSB0aGUgYCRwYXJlbnRgXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBuZXdseSBjcmVhdGVkIHNjb3BlLiBEZWZhdWx0cyB0byBgdGhpc2Agc2NvcGUgaWYgbm90IHByb3ZpZGVkLlxuICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRyYW5zY2x1ZGUgc2NvcGUgdG8gY29ycmVjdGx5IHBsYWNlIGl0XG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBzY29wZSBoaWVyYXJjaHkgd2hpbGUgbWFpbnRhaW5pbmcgdGhlIGNvcnJlY3QgcHJvdG90eXBpY2FsXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRhbmNlLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBuZXdseSBjcmVhdGVkIGNoaWxkIHNjb3BlLlxuICAgICAgICpcbiAgICAgICAqL1xuICAgICAgJG5ldzogZnVuY3Rpb24oaXNvbGF0ZSwgcGFyZW50KSB7XG4gICAgICAgIHZhciBjaGlsZDtcblxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQgfHwgdGhpcztcblxuICAgICAgICBpZiAoaXNvbGF0ZSkge1xuICAgICAgICAgIGNoaWxkID0gbmV3IFNjb3BlKCk7XG4gICAgICAgICAgY2hpbGQuJHJvb3QgPSB0aGlzLiRyb290O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE9ubHkgY3JlYXRlIGEgY2hpbGQgc2NvcGUgY2xhc3MgaWYgc29tZWJvZHkgYXNrcyBmb3Igb25lLFxuICAgICAgICAgIC8vIGJ1dCBjYWNoZSBpdCB0byBhbGxvdyB0aGUgVk0gdG8gb3B0aW1pemUgbG9va3Vwcy5cbiAgICAgICAgICBpZiAoIXRoaXMuJCRDaGlsZFNjb3BlKSB7XG4gICAgICAgICAgICB0aGlzLiQkQ2hpbGRTY29wZSA9IGZ1bmN0aW9uIENoaWxkU2NvcGUoKSB7XG4gICAgICAgICAgICAgIHRoaXMuJCR3YXRjaGVycyA9IHRoaXMuJCRuZXh0U2libGluZyA9XG4gICAgICAgICAgICAgICAgICB0aGlzLiQkY2hpbGRIZWFkID0gdGhpcy4kJGNoaWxkVGFpbCA9IG51bGw7XG4gICAgICAgICAgICAgIHRoaXMuJCRsaXN0ZW5lcnMgPSB7fTtcbiAgICAgICAgICAgICAgdGhpcy4kJGxpc3RlbmVyQ291bnQgPSB7fTtcbiAgICAgICAgICAgICAgdGhpcy4kaWQgPSBuZXh0VWlkKCk7XG4gICAgICAgICAgICAgIHRoaXMuJCRDaGlsZFNjb3BlID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLiQkQ2hpbGRTY29wZS5wcm90b3R5cGUgPSB0aGlzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjaGlsZCA9IG5ldyB0aGlzLiQkQ2hpbGRTY29wZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkLiRwYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIGNoaWxkLiQkcHJldlNpYmxpbmcgPSBwYXJlbnQuJCRjaGlsZFRhaWw7XG4gICAgICAgIGlmIChwYXJlbnQuJCRjaGlsZEhlYWQpIHtcbiAgICAgICAgICBwYXJlbnQuJCRjaGlsZFRhaWwuJCRuZXh0U2libGluZyA9IGNoaWxkO1xuICAgICAgICAgIHBhcmVudC4kJGNoaWxkVGFpbCA9IGNoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudC4kJGNoaWxkSGVhZCA9IHBhcmVudC4kJGNoaWxkVGFpbCA9IGNoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2hlbiB0aGUgbmV3IHNjb3BlIGlzIG5vdCBpc29sYXRlZCBvciB3ZSBpbmhlcml0IGZyb20gYHRoaXNgLCBhbmRcbiAgICAgICAgLy8gdGhlIHBhcmVudCBzY29wZSBpcyBkZXN0cm95ZWQsIHRoZSBwcm9wZXJ0eSBgJCRkZXN0cm95ZWRgIGlzIGluaGVyaXRlZFxuICAgICAgICAvLyBwcm90b3R5cGljYWxseS4gSW4gYWxsIG90aGVyIGNhc2VzLCB0aGlzIHByb3BlcnR5IG5lZWRzIHRvIGJlIHNldFxuICAgICAgICAvLyB3aGVuIHRoZSBwYXJlbnQgc2NvcGUgaXMgZGVzdHJveWVkLlxuICAgICAgICAvLyBUaGUgbGlzdGVuZXIgbmVlZHMgdG8gYmUgYWRkZWQgYWZ0ZXIgdGhlIHBhcmVudCBpcyBzZXRcbiAgICAgICAgaWYgKGlzb2xhdGUgfHwgcGFyZW50ICE9IHRoaXMpIGNoaWxkLiRvbignJGRlc3Ryb3knLCBkZXN0cm95Q2hpbGQpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZDtcblxuICAgICAgICBmdW5jdGlvbiBkZXN0cm95Q2hpbGQoKSB7XG4gICAgICAgICAgY2hpbGQuJCRkZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJHdhdGNoXG4gICAgICAgKiBAa2luZCBmdW5jdGlvblxuICAgICAgICpcbiAgICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgICogUmVnaXN0ZXJzIGEgYGxpc3RlbmVyYCBjYWxsYmFjayB0byBiZSBleGVjdXRlZCB3aGVuZXZlciB0aGUgYHdhdGNoRXhwcmVzc2lvbmAgY2hhbmdlcy5cbiAgICAgICAqXG4gICAgICAgKiAtIFRoZSBgd2F0Y2hFeHByZXNzaW9uYCBpcyBjYWxsZWQgb24gZXZlcnkgY2FsbCB0byB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0XG4gICAgICAgKiAgICRkaWdlc3QoKX0gYW5kIHNob3VsZCByZXR1cm4gdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSB3YXRjaGVkLiAoU2luY2VcbiAgICAgICAqICAge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0KCl9IHJlcnVucyB3aGVuIGl0IGRldGVjdHMgY2hhbmdlcyB0aGVcbiAgICAgICAqICAgYHdhdGNoRXhwcmVzc2lvbmAgY2FuIGV4ZWN1dGUgbXVsdGlwbGUgdGltZXMgcGVyXG4gICAgICAgKiAgIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3QgJGRpZ2VzdCgpfSBhbmQgc2hvdWxkIGJlIGlkZW1wb3RlbnQuKVxuICAgICAgICogLSBUaGUgYGxpc3RlbmVyYCBpcyBjYWxsZWQgb25seSB3aGVuIHRoZSB2YWx1ZSBmcm9tIHRoZSBjdXJyZW50IGB3YXRjaEV4cHJlc3Npb25gIGFuZCB0aGVcbiAgICAgICAqICAgcHJldmlvdXMgY2FsbCB0byBgd2F0Y2hFeHByZXNzaW9uYCBhcmUgbm90IGVxdWFsICh3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGluaXRpYWwgcnVuLFxuICAgICAgICogICBzZWUgYmVsb3cpLiBJbmVxdWFsaXR5IGlzIGRldGVybWluZWQgYWNjb3JkaW5nIHRvIHJlZmVyZW5jZSBpbmVxdWFsaXR5LFxuICAgICAgICogICBbc3RyaWN0IGNvbXBhcmlzb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy9Db21wYXJpc29uX09wZXJhdG9ycylcbiAgICAgICAqICAgIHZpYSB0aGUgYCE9PWAgSmF2YXNjcmlwdCBvcGVyYXRvciwgdW5sZXNzIGBvYmplY3RFcXVhbGl0eSA9PSB0cnVlYFxuICAgICAgICogICAoc2VlIG5leHQgcG9pbnQpXG4gICAgICAgKiAtIFdoZW4gYG9iamVjdEVxdWFsaXR5ID09IHRydWVgLCBpbmVxdWFsaXR5IG9mIHRoZSBgd2F0Y2hFeHByZXNzaW9uYCBpcyBkZXRlcm1pbmVkXG4gICAgICAgKiAgIGFjY29yZGluZyB0byB0aGUge0BsaW5rIGFuZ3VsYXIuZXF1YWxzfSBmdW5jdGlvbi4gVG8gc2F2ZSB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBmb3JcbiAgICAgICAqICAgbGF0ZXIgY29tcGFyaXNvbiwgdGhlIHtAbGluayBhbmd1bGFyLmNvcHl9IGZ1bmN0aW9uIGlzIHVzZWQuIFRoaXMgdGhlcmVmb3JlIG1lYW5zIHRoYXRcbiAgICAgICAqICAgd2F0Y2hpbmcgY29tcGxleCBvYmplY3RzIHdpbGwgaGF2ZSBhZHZlcnNlIG1lbW9yeSBhbmQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLlxuICAgICAgICogLSBUaGUgd2F0Y2ggYGxpc3RlbmVyYCBtYXkgY2hhbmdlIHRoZSBtb2RlbCwgd2hpY2ggbWF5IHRyaWdnZXIgb3RoZXIgYGxpc3RlbmVyYHMgdG8gZmlyZS5cbiAgICAgICAqICAgVGhpcyBpcyBhY2hpZXZlZCBieSByZXJ1bm5pbmcgdGhlIHdhdGNoZXJzIHVudGlsIG5vIGNoYW5nZXMgYXJlIGRldGVjdGVkLiBUaGUgcmVydW5cbiAgICAgICAqICAgaXRlcmF0aW9uIGxpbWl0IGlzIDEwIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBkZWFkbG9jay5cbiAgICAgICAqXG4gICAgICAgKlxuICAgICAgICogSWYgeW91IHdhbnQgdG8gYmUgbm90aWZpZWQgd2hlbmV2ZXIge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0fSBpcyBjYWxsZWQsXG4gICAgICAgKiB5b3UgY2FuIHJlZ2lzdGVyIGEgYHdhdGNoRXhwcmVzc2lvbmAgZnVuY3Rpb24gd2l0aCBubyBgbGlzdGVuZXJgLiAoU2luY2UgYHdhdGNoRXhwcmVzc2lvbmBcbiAgICAgICAqIGNhbiBleGVjdXRlIG11bHRpcGxlIHRpbWVzIHBlciB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0ICRkaWdlc3R9IGN5Y2xlIHdoZW4gYVxuICAgICAgICogY2hhbmdlIGlzIGRldGVjdGVkLCBiZSBwcmVwYXJlZCBmb3IgbXVsdGlwbGUgY2FsbHMgdG8geW91ciBsaXN0ZW5lci4pXG4gICAgICAgKlxuICAgICAgICogQWZ0ZXIgYSB3YXRjaGVyIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc2NvcGUsIHRoZSBgbGlzdGVuZXJgIGZuIGlzIGNhbGxlZCBhc3luY2hyb25vdXNseVxuICAgICAgICogKHZpYSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZXZhbEFzeW5jICRldmFsQXN5bmN9KSB0byBpbml0aWFsaXplIHRoZVxuICAgICAgICogd2F0Y2hlci4gSW4gcmFyZSBjYXNlcywgdGhpcyBpcyB1bmRlc2lyYWJsZSBiZWNhdXNlIHRoZSBsaXN0ZW5lciBpcyBjYWxsZWQgd2hlbiB0aGUgcmVzdWx0XG4gICAgICAgKiBvZiBgd2F0Y2hFeHByZXNzaW9uYCBkaWRuJ3QgY2hhbmdlLiBUbyBkZXRlY3QgdGhpcyBzY2VuYXJpbyB3aXRoaW4gdGhlIGBsaXN0ZW5lcmAgZm4sIHlvdVxuICAgICAgICogY2FuIGNvbXBhcmUgdGhlIGBuZXdWYWxgIGFuZCBgb2xkVmFsYC4gSWYgdGhlc2UgdHdvIHZhbHVlcyBhcmUgaWRlbnRpY2FsIChgPT09YCkgdGhlbiB0aGVcbiAgICAgICAqIGxpc3RlbmVyIHdhcyBjYWxsZWQgZHVlIHRvIGluaXRpYWxpemF0aW9uLlxuICAgICAgICpcbiAgICAgICAqXG4gICAgICAgKlxuICAgICAgICogIyBFeGFtcGxlXG4gICAgICAgKiBgYGBqc1xuICAgICAgICAgICAvLyBsZXQncyBhc3N1bWUgdGhhdCBzY29wZSB3YXMgZGVwZW5kZW5jeSBpbmplY3RlZCBhcyB0aGUgJHJvb3RTY29wZVxuICAgICAgICAgICB2YXIgc2NvcGUgPSAkcm9vdFNjb3BlO1xuICAgICAgICAgICBzY29wZS5uYW1lID0gJ21pc2tvJztcbiAgICAgICAgICAgc2NvcGUuY291bnRlciA9IDA7XG5cbiAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMCk7XG4gICAgICAgICAgIHNjb3BlLiR3YXRjaCgnbmFtZScsIGZ1bmN0aW9uKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICAgICAgIHNjb3BlLmNvdW50ZXIgPSBzY29wZS5jb3VudGVyICsgMTtcbiAgICAgICAgICAgfSk7XG4gICAgICAgICAgIGV4cGVjdChzY29wZS5jb3VudGVyKS50b0VxdWFsKDApO1xuXG4gICAgICAgICAgIHNjb3BlLiRkaWdlc3QoKTtcbiAgICAgICAgICAgLy8gdGhlIGxpc3RlbmVyIGlzIGFsd2F5cyBjYWxsZWQgZHVyaW5nIHRoZSBmaXJzdCAkZGlnZXN0IGxvb3AgYWZ0ZXIgaXQgd2FzIHJlZ2lzdGVyZWRcbiAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMSk7XG5cbiAgICAgICAgICAgc2NvcGUuJGRpZ2VzdCgpO1xuICAgICAgICAgICAvLyBidXQgbm93IGl0IHdpbGwgbm90IGJlIGNhbGxlZCB1bmxlc3MgdGhlIHZhbHVlIGNoYW5nZXNcbiAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMSk7XG5cbiAgICAgICAgICAgc2NvcGUubmFtZSA9ICdhZGFtJztcbiAgICAgICAgICAgc2NvcGUuJGRpZ2VzdCgpO1xuICAgICAgICAgICBleHBlY3Qoc2NvcGUuY291bnRlcikudG9FcXVhbCgyKTtcblxuXG5cbiAgICAgICAgICAgLy8gVXNpbmcgYSBmdW5jdGlvbiBhcyBhIHdhdGNoRXhwcmVzc2lvblxuICAgICAgICAgICB2YXIgZm9vZDtcbiAgICAgICAgICAgc2NvcGUuZm9vZENvdW50ZXIgPSAwO1xuICAgICAgICAgICBleHBlY3Qoc2NvcGUuZm9vZENvdW50ZXIpLnRvRXF1YWwoMCk7XG4gICAgICAgICAgIHNjb3BlLiR3YXRjaChcbiAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIGJlaW5nIHdhdGNoZWQuIEl0IGlzIGNhbGxlZCBmb3IgZWFjaCB0dXJuIG9mIHRoZSAkZGlnZXN0IGxvb3BcbiAgICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIGZvb2Q7IH0sXG4gICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY2hhbmdlIGxpc3RlbmVyLCBjYWxsZWQgd2hlbiB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGUgYWJvdmUgZnVuY3Rpb24gY2hhbmdlc1xuICAgICAgICAgICAgIGZ1bmN0aW9uKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICAgICAgICAgaWYgKCBuZXdWYWx1ZSAhPT0gb2xkVmFsdWUgKSB7XG4gICAgICAgICAgICAgICAgIC8vIE9ubHkgaW5jcmVtZW50IHRoZSBjb3VudGVyIGlmIHRoZSB2YWx1ZSBjaGFuZ2VkXG4gICAgICAgICAgICAgICAgIHNjb3BlLmZvb2RDb3VudGVyID0gc2NvcGUuZm9vZENvdW50ZXIgKyAxO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgKTtcbiAgICAgICAgICAgLy8gTm8gZGlnZXN0IGhhcyBiZWVuIHJ1biBzbyB0aGUgY291bnRlciB3aWxsIGJlIHplcm9cbiAgICAgICAgICAgZXhwZWN0KHNjb3BlLmZvb2RDb3VudGVyKS50b0VxdWFsKDApO1xuXG4gICAgICAgICAgIC8vIFJ1biB0aGUgZGlnZXN0IGJ1dCBzaW5jZSBmb29kIGhhcyBub3QgY2hhbmdlZCBjb3VudCB3aWxsIHN0aWxsIGJlIHplcm9cbiAgICAgICAgICAgc2NvcGUuJGRpZ2VzdCgpO1xuICAgICAgICAgICBleHBlY3Qoc2NvcGUuZm9vZENvdW50ZXIpLnRvRXF1YWwoMCk7XG5cbiAgICAgICAgICAgLy8gVXBkYXRlIGZvb2QgYW5kIHJ1biBkaWdlc3QuICBOb3cgdGhlIGNvdW50ZXIgd2lsbCBpbmNyZW1lbnRcbiAgICAgICAgICAgZm9vZCA9ICdjaGVlc2VidXJnZXInO1xuICAgICAgICAgICBzY29wZS4kZGlnZXN0KCk7XG4gICAgICAgICAgIGV4cGVjdChzY29wZS5mb29kQ291bnRlcikudG9FcXVhbCgxKTtcblxuICAgICAgICogYGBgXG4gICAgICAgKlxuICAgICAgICpcbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0geyhmdW5jdGlvbigpfHN0cmluZyl9IHdhdGNoRXhwcmVzc2lvbiBFeHByZXNzaW9uIHRoYXQgaXMgZXZhbHVhdGVkIG9uIGVhY2hcbiAgICAgICAqICAgIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3QgJGRpZ2VzdH0gY3ljbGUuIEEgY2hhbmdlIGluIHRoZSByZXR1cm4gdmFsdWUgdHJpZ2dlcnNcbiAgICAgICAqICAgIGEgY2FsbCB0byB0aGUgYGxpc3RlbmVyYC5cbiAgICAgICAqXG4gICAgICAgKiAgICAtIGBzdHJpbmdgOiBFdmFsdWF0ZWQgYXMge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn1cbiAgICAgICAqICAgIC0gYGZ1bmN0aW9uKHNjb3BlKWA6IGNhbGxlZCB3aXRoIGN1cnJlbnQgYHNjb3BlYCBhcyBhIHBhcmFtZXRlci5cbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24obmV3VmFsLCBvbGRWYWwsIHNjb3BlKX0gbGlzdGVuZXIgQ2FsbGJhY2sgY2FsbGVkIHdoZW5ldmVyIHRoZSB2YWx1ZVxuICAgICAgICogICAgb2YgYHdhdGNoRXhwcmVzc2lvbmAgY2hhbmdlcy5cbiAgICAgICAqXG4gICAgICAgKiAgICAtIGBuZXdWYWxgIGNvbnRhaW5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBgd2F0Y2hFeHByZXNzaW9uYFxuICAgICAgICogICAgLSBgb2xkVmFsYCBjb250YWlucyB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGB3YXRjaEV4cHJlc3Npb25gXG4gICAgICAgKiAgICAtIGBzY29wZWAgcmVmZXJzIHRvIHRoZSBjdXJyZW50IHNjb3BlXG4gICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBvYmplY3RFcXVhbGl0eSBDb21wYXJlIGZvciBvYmplY3QgZXF1YWxpdHkgdXNpbmcge0BsaW5rIGFuZ3VsYXIuZXF1YWxzfSBpbnN0ZWFkIG9mXG4gICAgICAgKiAgICAgY29tcGFyaW5nIGZvciByZWZlcmVuY2UgZXF1YWxpdHkuXG4gICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24oKX0gUmV0dXJucyBhIGRlcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGZvciB0aGlzIGxpc3RlbmVyLlxuICAgICAgICovXG4gICAgICAkd2F0Y2g6IGZ1bmN0aW9uKHdhdGNoRXhwLCBsaXN0ZW5lciwgb2JqZWN0RXF1YWxpdHkpIHtcbiAgICAgICAgdmFyIGdldCA9ICRwYXJzZSh3YXRjaEV4cCk7XG5cbiAgICAgICAgaWYgKGdldC4kJHdhdGNoRGVsZWdhdGUpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0LiQkd2F0Y2hEZWxlZ2F0ZSh0aGlzLCBsaXN0ZW5lciwgb2JqZWN0RXF1YWxpdHksIGdldCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNjb3BlID0gdGhpcyxcbiAgICAgICAgICAgIGFycmF5ID0gc2NvcGUuJCR3YXRjaGVycyxcbiAgICAgICAgICAgIHdhdGNoZXIgPSB7XG4gICAgICAgICAgICAgIGZuOiBsaXN0ZW5lcixcbiAgICAgICAgICAgICAgbGFzdDogaW5pdFdhdGNoVmFsLFxuICAgICAgICAgICAgICBnZXQ6IGdldCxcbiAgICAgICAgICAgICAgZXhwOiB3YXRjaEV4cCxcbiAgICAgICAgICAgICAgZXE6ICEhb2JqZWN0RXF1YWxpdHlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgbGFzdERpcnR5V2F0Y2ggPSBudWxsO1xuXG4gICAgICAgIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpIHtcbiAgICAgICAgICB3YXRjaGVyLmZuID0gbm9vcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYXJyYXkpIHtcbiAgICAgICAgICBhcnJheSA9IHNjb3BlLiQkd2F0Y2hlcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSB1c2UgdW5zaGlmdCBzaW5jZSB3ZSB1c2UgYSB3aGlsZSBsb29wIGluICRkaWdlc3QgZm9yIHNwZWVkLlxuICAgICAgICAvLyB0aGUgd2hpbGUgbG9vcCByZWFkcyBpbiByZXZlcnNlIG9yZGVyLlxuICAgICAgICBhcnJheS51bnNoaWZ0KHdhdGNoZXIpO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBkZXJlZ2lzdGVyV2F0Y2goKSB7XG4gICAgICAgICAgYXJyYXlSZW1vdmUoYXJyYXksIHdhdGNoZXIpO1xuICAgICAgICAgIGxhc3REaXJ0eVdhdGNoID0gbnVsbDtcbiAgICAgICAgfTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkd2F0Y2hHcm91cFxuICAgICAgICogQGtpbmQgZnVuY3Rpb25cbiAgICAgICAqXG4gICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAqIEEgdmFyaWFudCBvZiB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkd2F0Y2ggJHdhdGNoKCl9IHdoZXJlIGl0IHdhdGNoZXMgYW4gYXJyYXkgb2YgYHdhdGNoRXhwcmVzc2lvbnNgLlxuICAgICAgICogSWYgYW55IG9uZSBleHByZXNzaW9uIGluIHRoZSBjb2xsZWN0aW9uIGNoYW5nZXMgdGhlIGBsaXN0ZW5lcmAgaXMgZXhlY3V0ZWQuXG4gICAgICAgKlxuICAgICAgICogLSBUaGUgaXRlbXMgaW4gdGhlIGB3YXRjaEV4cHJlc3Npb25zYCBhcnJheSBhcmUgb2JzZXJ2ZWQgdmlhIHN0YW5kYXJkICR3YXRjaCBvcGVyYXRpb24gYW5kIGFyZSBleGFtaW5lZCBvbiBldmVyeVxuICAgICAgICogICBjYWxsIHRvICRkaWdlc3QoKSB0byBzZWUgaWYgYW55IGl0ZW1zIGNoYW5nZXMuXG4gICAgICAgKiAtIFRoZSBgbGlzdGVuZXJgIGlzIGNhbGxlZCB3aGVuZXZlciBhbnkgZXhwcmVzc2lvbiBpbiB0aGUgYHdhdGNoRXhwcmVzc2lvbnNgIGFycmF5IGNoYW5nZXMuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nfEZ1bmN0aW9uKHNjb3BlKT59IHdhdGNoRXhwcmVzc2lvbnMgQXJyYXkgb2YgZXhwcmVzc2lvbnMgdGhhdCB3aWxsIGJlIGluZGl2aWR1YWxseVxuICAgICAgICogd2F0Y2hlZCB1c2luZyB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkd2F0Y2ggJHdhdGNoKCl9XG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtmdW5jdGlvbihuZXdWYWx1ZXMsIG9sZFZhbHVlcywgc2NvcGUpfSBsaXN0ZW5lciBDYWxsYmFjayBjYWxsZWQgd2hlbmV2ZXIgdGhlIHJldHVybiB2YWx1ZSBvZiBhbnlcbiAgICAgICAqICAgIGV4cHJlc3Npb24gaW4gYHdhdGNoRXhwcmVzc2lvbnNgIGNoYW5nZXNcbiAgICAgICAqICAgIFRoZSBgbmV3VmFsdWVzYCBhcnJheSBjb250YWlucyB0aGUgY3VycmVudCB2YWx1ZXMgb2YgdGhlIGB3YXRjaEV4cHJlc3Npb25zYCwgd2l0aCB0aGUgaW5kZXhlcyBtYXRjaGluZ1xuICAgICAgICogICAgdGhvc2Ugb2YgYHdhdGNoRXhwcmVzc2lvbmBcbiAgICAgICAqICAgIGFuZCB0aGUgYG9sZFZhbHVlc2AgYXJyYXkgY29udGFpbnMgdGhlIHByZXZpb3VzIHZhbHVlcyBvZiB0aGUgYHdhdGNoRXhwcmVzc2lvbnNgLCB3aXRoIHRoZSBpbmRleGVzIG1hdGNoaW5nXG4gICAgICAgKiAgICB0aG9zZSBvZiBgd2F0Y2hFeHByZXNzaW9uYFxuICAgICAgICogICAgVGhlIGBzY29wZWAgcmVmZXJzIHRvIHRoZSBjdXJyZW50IHNjb3BlLlxuICAgICAgICogQHJldHVybnMge2Z1bmN0aW9uKCl9IFJldHVybnMgYSBkZS1yZWdpc3RyYXRpb24gZnVuY3Rpb24gZm9yIGFsbCBsaXN0ZW5lcnMuXG4gICAgICAgKi9cbiAgICAgICR3YXRjaEdyb3VwOiBmdW5jdGlvbih3YXRjaEV4cHJlc3Npb25zLCBsaXN0ZW5lcikge1xuICAgICAgICB2YXIgb2xkVmFsdWVzID0gbmV3IEFycmF5KHdhdGNoRXhwcmVzc2lvbnMubGVuZ3RoKTtcbiAgICAgICAgdmFyIG5ld1ZhbHVlcyA9IG5ldyBBcnJheSh3YXRjaEV4cHJlc3Npb25zLmxlbmd0aCk7XG4gICAgICAgIHZhciBkZXJlZ2lzdGVyRm5zID0gW107XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgdmFyIGNoYW5nZVJlYWN0aW9uU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBmaXJzdFJ1biA9IHRydWU7XG5cbiAgICAgICAgaWYgKCF3YXRjaEV4cHJlc3Npb25zLmxlbmd0aCkge1xuICAgICAgICAgIC8vIE5vIGV4cHJlc3Npb25zIG1lYW5zIHdlIGNhbGwgdGhlIGxpc3RlbmVyIEFTQVBcbiAgICAgICAgICB2YXIgc2hvdWxkQ2FsbCA9IHRydWU7XG4gICAgICAgICAgc2VsZi4kZXZhbEFzeW5jKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKHNob3VsZENhbGwpIGxpc3RlbmVyKG5ld1ZhbHVlcywgbmV3VmFsdWVzLCBzZWxmKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZGVyZWdpc3RlcldhdGNoR3JvdXAoKSB7XG4gICAgICAgICAgICBzaG91bGRDYWxsID0gZmFsc2U7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3YXRjaEV4cHJlc3Npb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBzaXplIG9mIG9uZVxuICAgICAgICAgIHJldHVybiB0aGlzLiR3YXRjaCh3YXRjaEV4cHJlc3Npb25zWzBdLCBmdW5jdGlvbiB3YXRjaEdyb3VwQWN0aW9uKHZhbHVlLCBvbGRWYWx1ZSwgc2NvcGUpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlc1swXSA9IHZhbHVlO1xuICAgICAgICAgICAgb2xkVmFsdWVzWzBdID0gb2xkVmFsdWU7XG4gICAgICAgICAgICBsaXN0ZW5lcihuZXdWYWx1ZXMsICh2YWx1ZSA9PT0gb2xkVmFsdWUpID8gbmV3VmFsdWVzIDogb2xkVmFsdWVzLCBzY29wZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JFYWNoKHdhdGNoRXhwcmVzc2lvbnMsIGZ1bmN0aW9uKGV4cHIsIGkpIHtcbiAgICAgICAgICB2YXIgdW53YXRjaEZuID0gc2VsZi4kd2F0Y2goZXhwciwgZnVuY3Rpb24gd2F0Y2hHcm91cFN1YkFjdGlvbih2YWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlc1tpXSA9IHZhbHVlO1xuICAgICAgICAgICAgb2xkVmFsdWVzW2ldID0gb2xkVmFsdWU7XG4gICAgICAgICAgICBpZiAoIWNoYW5nZVJlYWN0aW9uU2NoZWR1bGVkKSB7XG4gICAgICAgICAgICAgIGNoYW5nZVJlYWN0aW9uU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgc2VsZi4kZXZhbEFzeW5jKHdhdGNoR3JvdXBBY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRlcmVnaXN0ZXJGbnMucHVzaCh1bndhdGNoRm4pO1xuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiB3YXRjaEdyb3VwQWN0aW9uKCkge1xuICAgICAgICAgIGNoYW5nZVJlYWN0aW9uU2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoZmlyc3RSdW4pIHtcbiAgICAgICAgICAgIGZpcnN0UnVuID0gZmFsc2U7XG4gICAgICAgICAgICBsaXN0ZW5lcihuZXdWYWx1ZXMsIG5ld1ZhbHVlcywgc2VsZik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpc3RlbmVyKG5ld1ZhbHVlcywgb2xkVmFsdWVzLCBzZWxmKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gZGVyZWdpc3RlcldhdGNoR3JvdXAoKSB7XG4gICAgICAgICAgd2hpbGUgKGRlcmVnaXN0ZXJGbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBkZXJlZ2lzdGVyRm5zLnNoaWZ0KCkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9LFxuXG5cbiAgICAgIC8qKlxuICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkd2F0Y2hDb2xsZWN0aW9uXG4gICAgICAgKiBAa2luZCBmdW5jdGlvblxuICAgICAgICpcbiAgICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgICogU2hhbGxvdyB3YXRjaGVzIHRoZSBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdCBhbmQgZmlyZXMgd2hlbmV2ZXIgYW55IG9mIHRoZSBwcm9wZXJ0aWVzIGNoYW5nZVxuICAgICAgICogKGZvciBhcnJheXMsIHRoaXMgaW1wbGllcyB3YXRjaGluZyB0aGUgYXJyYXkgaXRlbXM7IGZvciBvYmplY3QgbWFwcywgdGhpcyBpbXBsaWVzIHdhdGNoaW5nXG4gICAgICAgKiB0aGUgcHJvcGVydGllcykuIElmIGEgY2hhbmdlIGlzIGRldGVjdGVkLCB0aGUgYGxpc3RlbmVyYCBjYWxsYmFjayBpcyBmaXJlZC5cbiAgICAgICAqXG4gICAgICAgKiAtIFRoZSBgb2JqYCBjb2xsZWN0aW9uIGlzIG9ic2VydmVkIHZpYSBzdGFuZGFyZCAkd2F0Y2ggb3BlcmF0aW9uIGFuZCBpcyBleGFtaW5lZCBvbiBldmVyeVxuICAgICAgICogICBjYWxsIHRvICRkaWdlc3QoKSB0byBzZWUgaWYgYW55IGl0ZW1zIGhhdmUgYmVlbiBhZGRlZCwgcmVtb3ZlZCwgb3IgbW92ZWQuXG4gICAgICAgKiAtIFRoZSBgbGlzdGVuZXJgIGlzIGNhbGxlZCB3aGVuZXZlciBhbnl0aGluZyB3aXRoaW4gdGhlIGBvYmpgIGhhcyBjaGFuZ2VkLiBFeGFtcGxlcyBpbmNsdWRlXG4gICAgICAgKiAgIGFkZGluZywgcmVtb3ZpbmcsIGFuZCBtb3ZpbmcgaXRlbXMgYmVsb25naW5nIHRvIGFuIG9iamVjdCBvciBhcnJheS5cbiAgICAgICAqXG4gICAgICAgKlxuICAgICAgICogIyBFeGFtcGxlXG4gICAgICAgKiBgYGBqc1xuICAgICAgICAgICRzY29wZS5uYW1lcyA9IFsnaWdvcicsICdtYXRpYXMnLCAnbWlza28nLCAnamFtZXMnXTtcbiAgICAgICAgICAkc2NvcGUuZGF0YUNvdW50ID0gNDtcblxuICAgICAgICAgICRzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKCduYW1lcycsIGZ1bmN0aW9uKG5ld05hbWVzLCBvbGROYW1lcykge1xuICAgICAgICAgICAgJHNjb3BlLmRhdGFDb3VudCA9IG5ld05hbWVzLmxlbmd0aDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGV4cGVjdCgkc2NvcGUuZGF0YUNvdW50KS50b0VxdWFsKDQpO1xuICAgICAgICAgICRzY29wZS4kZGlnZXN0KCk7XG5cbiAgICAgICAgICAvL3N0aWxsIGF0IDQgLi4uIG5vIGNoYW5nZXNcbiAgICAgICAgICBleHBlY3QoJHNjb3BlLmRhdGFDb3VudCkudG9FcXVhbCg0KTtcblxuICAgICAgICAgICRzY29wZS5uYW1lcy5wb3AoKTtcbiAgICAgICAgICAkc2NvcGUuJGRpZ2VzdCgpO1xuXG4gICAgICAgICAgLy9ub3cgdGhlcmUncyBiZWVuIGEgY2hhbmdlXG4gICAgICAgICAgZXhwZWN0KCRzY29wZS5kYXRhQ291bnQpLnRvRXF1YWwoMyk7XG4gICAgICAgKiBgYGBcbiAgICAgICAqXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd8ZnVuY3Rpb24oc2NvcGUpfSBvYmogRXZhbHVhdGVkIGFzIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259LiBUaGVcbiAgICAgICAqICAgIGV4cHJlc3Npb24gdmFsdWUgc2hvdWxkIGV2YWx1YXRlIHRvIGFuIG9iamVjdCBvciBhbiBhcnJheSB3aGljaCBpcyBvYnNlcnZlZCBvbiBlYWNoXG4gICAgICAgKiAgICB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0ICRkaWdlc3R9IGN5Y2xlLiBBbnkgc2hhbGxvdyBjaGFuZ2Ugd2l0aGluIHRoZVxuICAgICAgICogICAgY29sbGVjdGlvbiB3aWxsIHRyaWdnZXIgYSBjYWxsIHRvIHRoZSBgbGlzdGVuZXJgLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24obmV3Q29sbGVjdGlvbiwgb2xkQ29sbGVjdGlvbiwgc2NvcGUpfSBsaXN0ZW5lciBhIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZFxuICAgICAgICogICAgd2hlbiBhIGNoYW5nZSBpcyBkZXRlY3RlZC5cbiAgICAgICAqICAgIC0gVGhlIGBuZXdDb2xsZWN0aW9uYCBvYmplY3QgaXMgdGhlIG5ld2x5IG1vZGlmaWVkIGRhdGEgb2J0YWluZWQgZnJvbSB0aGUgYG9iamAgZXhwcmVzc2lvblxuICAgICAgICogICAgLSBUaGUgYG9sZENvbGxlY3Rpb25gIG9iamVjdCBpcyBhIGNvcHkgb2YgdGhlIGZvcm1lciBjb2xsZWN0aW9uIGRhdGEuXG4gICAgICAgKiAgICAgIER1ZSB0byBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucywgdGhlYG9sZENvbGxlY3Rpb25gIHZhbHVlIGlzIGNvbXB1dGVkIG9ubHkgaWYgdGhlXG4gICAgICAgKiAgICAgIGBsaXN0ZW5lcmAgZnVuY3Rpb24gZGVjbGFyZXMgdHdvIG9yIG1vcmUgYXJndW1lbnRzLlxuICAgICAgICogICAgLSBUaGUgYHNjb3BlYCBhcmd1bWVudCByZWZlcnMgdG8gdGhlIGN1cnJlbnQgc2NvcGUuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMge2Z1bmN0aW9uKCl9IFJldHVybnMgYSBkZS1yZWdpc3RyYXRpb24gZnVuY3Rpb24gZm9yIHRoaXMgbGlzdGVuZXIuIFdoZW4gdGhlXG4gICAgICAgKiAgICBkZS1yZWdpc3RyYXRpb24gZnVuY3Rpb24gaXMgZXhlY3V0ZWQsIHRoZSBpbnRlcm5hbCB3YXRjaCBvcGVyYXRpb24gaXMgdGVybWluYXRlZC5cbiAgICAgICAqL1xuICAgICAgJHdhdGNoQ29sbGVjdGlvbjogZnVuY3Rpb24ob2JqLCBsaXN0ZW5lcikge1xuICAgICAgICAkd2F0Y2hDb2xsZWN0aW9uSW50ZXJjZXB0b3IuJHN0YXRlZnVsID0gdHJ1ZTtcblxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIC8vIHRoZSBjdXJyZW50IHZhbHVlLCB1cGRhdGVkIG9uIGVhY2ggZGlydHktY2hlY2sgcnVuXG4gICAgICAgIHZhciBuZXdWYWx1ZTtcbiAgICAgICAgLy8gYSBzaGFsbG93IGNvcHkgb2YgdGhlIG5ld1ZhbHVlIGZyb20gdGhlIGxhc3QgZGlydHktY2hlY2sgcnVuLFxuICAgICAgICAvLyB1cGRhdGVkIHRvIG1hdGNoIG5ld1ZhbHVlIGR1cmluZyBkaXJ0eS1jaGVjayBydW5cbiAgICAgICAgdmFyIG9sZFZhbHVlO1xuICAgICAgICAvLyBhIHNoYWxsb3cgY29weSBvZiB0aGUgbmV3VmFsdWUgZnJvbSB3aGVuIHRoZSBsYXN0IGNoYW5nZSBoYXBwZW5lZFxuICAgICAgICB2YXIgdmVyeU9sZFZhbHVlO1xuICAgICAgICAvLyBvbmx5IHRyYWNrIHZlcnlPbGRWYWx1ZSBpZiB0aGUgbGlzdGVuZXIgaXMgYXNraW5nIGZvciBpdFxuICAgICAgICB2YXIgdHJhY2tWZXJ5T2xkVmFsdWUgPSAobGlzdGVuZXIubGVuZ3RoID4gMSk7XG4gICAgICAgIHZhciBjaGFuZ2VEZXRlY3RlZCA9IDA7XG4gICAgICAgIHZhciBjaGFuZ2VEZXRlY3RvciA9ICRwYXJzZShvYmosICR3YXRjaENvbGxlY3Rpb25JbnRlcmNlcHRvcik7XG4gICAgICAgIHZhciBpbnRlcm5hbEFycmF5ID0gW107XG4gICAgICAgIHZhciBpbnRlcm5hbE9iamVjdCA9IHt9O1xuICAgICAgICB2YXIgaW5pdFJ1biA9IHRydWU7XG4gICAgICAgIHZhciBvbGRMZW5ndGggPSAwO1xuXG4gICAgICAgIGZ1bmN0aW9uICR3YXRjaENvbGxlY3Rpb25JbnRlcmNlcHRvcihfdmFsdWUpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IF92YWx1ZTtcbiAgICAgICAgICB2YXIgbmV3TGVuZ3RoLCBrZXksIGJvdGhOYU4sIG5ld0l0ZW0sIG9sZEl0ZW07XG5cbiAgICAgICAgICAvLyBJZiB0aGUgbmV3IHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdW5kZWZpbmVkIGFzIHRoZSB3YXRjaCBtYXkgYmUgYSBvbmUtdGltZSB3YXRjaFxuICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChuZXdWYWx1ZSkpIHJldHVybjtcblxuICAgICAgICAgIGlmICghaXNPYmplY3QobmV3VmFsdWUpKSB7IC8vIGlmIHByaW1pdGl2ZVxuICAgICAgICAgICAgaWYgKG9sZFZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICBvbGRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RlZCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheUxpa2UobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAob2xkVmFsdWUgIT09IGludGVybmFsQXJyYXkpIHtcbiAgICAgICAgICAgICAgLy8gd2UgYXJlIHRyYW5zaXRpb25pbmcgZnJvbSBzb21ldGhpbmcgd2hpY2ggd2FzIG5vdCBhbiBhcnJheSBpbnRvIGFycmF5LlxuICAgICAgICAgICAgICBvbGRWYWx1ZSA9IGludGVybmFsQXJyYXk7XG4gICAgICAgICAgICAgIG9sZExlbmd0aCA9IG9sZFZhbHVlLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgIGNoYW5nZURldGVjdGVkKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5ld0xlbmd0aCA9IG5ld1ZhbHVlLmxlbmd0aDtcblxuICAgICAgICAgICAgaWYgKG9sZExlbmd0aCAhPT0gbmV3TGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIGlmIGxlbmd0aHMgZG8gbm90IG1hdGNoIHdlIG5lZWQgdG8gdHJpZ2dlciBjaGFuZ2Ugbm90aWZpY2F0aW9uXG4gICAgICAgICAgICAgIGNoYW5nZURldGVjdGVkKys7XG4gICAgICAgICAgICAgIG9sZFZhbHVlLmxlbmd0aCA9IG9sZExlbmd0aCA9IG5ld0xlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvcHkgdGhlIGl0ZW1zIHRvIG9sZFZhbHVlIGFuZCBsb29rIGZvciBjaGFuZ2VzLlxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBvbGRJdGVtID0gb2xkVmFsdWVbaV07XG4gICAgICAgICAgICAgIG5ld0l0ZW0gPSBuZXdWYWx1ZVtpXTtcblxuICAgICAgICAgICAgICBib3RoTmFOID0gKG9sZEl0ZW0gIT09IG9sZEl0ZW0pICYmIChuZXdJdGVtICE9PSBuZXdJdGVtKTtcbiAgICAgICAgICAgICAgaWYgKCFib3RoTmFOICYmIChvbGRJdGVtICE9PSBuZXdJdGVtKSkge1xuICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGVkKys7XG4gICAgICAgICAgICAgICAgb2xkVmFsdWVbaV0gPSBuZXdJdGVtO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gaW50ZXJuYWxPYmplY3QpIHtcbiAgICAgICAgICAgICAgLy8gd2UgYXJlIHRyYW5zaXRpb25pbmcgZnJvbSBzb21ldGhpbmcgd2hpY2ggd2FzIG5vdCBhbiBvYmplY3QgaW50byBvYmplY3QuXG4gICAgICAgICAgICAgIG9sZFZhbHVlID0gaW50ZXJuYWxPYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgb2xkTGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0ZWQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvcHkgdGhlIGl0ZW1zIHRvIG9sZFZhbHVlIGFuZCBsb29rIGZvciBjaGFuZ2VzLlxuICAgICAgICAgICAgbmV3TGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGZvciAoa2V5IGluIG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgIGlmIChuZXdWYWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgbmV3TGVuZ3RoKys7XG4gICAgICAgICAgICAgICAgbmV3SXRlbSA9IG5ld1ZhbHVlW2tleV07XG4gICAgICAgICAgICAgICAgb2xkSXRlbSA9IG9sZFZhbHVlW2tleV07XG5cbiAgICAgICAgICAgICAgICBpZiAoa2V5IGluIG9sZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBib3RoTmFOID0gKG9sZEl0ZW0gIT09IG9sZEl0ZW0pICYmIChuZXdJdGVtICE9PSBuZXdJdGVtKTtcbiAgICAgICAgICAgICAgICAgIGlmICghYm90aE5hTiAmJiAob2xkSXRlbSAhPT0gbmV3SXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0ZWQrKztcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWVba2V5XSA9IG5ld0l0ZW07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG9sZExlbmd0aCsrO1xuICAgICAgICAgICAgICAgICAgb2xkVmFsdWVba2V5XSA9IG5ld0l0ZW07XG4gICAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RlZCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9sZExlbmd0aCA+IG5ld0xlbmd0aCkge1xuICAgICAgICAgICAgICAvLyB3ZSB1c2VkIHRvIGhhdmUgbW9yZSBrZXlzLCBuZWVkIHRvIGZpbmQgdGhlbSBhbmQgZGVzdHJveSB0aGVtLlxuICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RlZCsrO1xuICAgICAgICAgICAgICBmb3IgKGtleSBpbiBvbGRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghbmV3VmFsdWUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgb2xkTGVuZ3RoLS07XG4gICAgICAgICAgICAgICAgICBkZWxldGUgb2xkVmFsdWVba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNoYW5nZURldGVjdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gJHdhdGNoQ29sbGVjdGlvbkFjdGlvbigpIHtcbiAgICAgICAgICBpZiAoaW5pdFJ1bikge1xuICAgICAgICAgICAgaW5pdFJ1biA9IGZhbHNlO1xuICAgICAgICAgICAgbGlzdGVuZXIobmV3VmFsdWUsIG5ld1ZhbHVlLCBzZWxmKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGlzdGVuZXIobmV3VmFsdWUsIHZlcnlPbGRWYWx1ZSwgc2VsZik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gbWFrZSBhIGNvcHkgZm9yIHRoZSBuZXh0IHRpbWUgYSBjb2xsZWN0aW9uIGlzIGNoYW5nZWRcbiAgICAgICAgICBpZiAodHJhY2tWZXJ5T2xkVmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghaXNPYmplY3QobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgIC8vcHJpbWl0aXZlXG4gICAgICAgICAgICAgIHZlcnlPbGRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5TGlrZShuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgdmVyeU9sZFZhbHVlID0gbmV3IEFycmF5KG5ld1ZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3VmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2ZXJ5T2xkVmFsdWVbaV0gPSBuZXdWYWx1ZVtpXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gaWYgb2JqZWN0XG4gICAgICAgICAgICAgIHZlcnlPbGRWYWx1ZSA9IHt9O1xuICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChuZXdWYWx1ZSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgdmVyeU9sZFZhbHVlW2tleV0gPSBuZXdWYWx1ZVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLiR3YXRjaChjaGFuZ2VEZXRlY3RvciwgJHdhdGNoQ29sbGVjdGlvbkFjdGlvbik7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdFxuICAgICAgICogQGtpbmQgZnVuY3Rpb25cbiAgICAgICAqXG4gICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAqIFByb2Nlc3NlcyBhbGwgb2YgdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyR3YXRjaCB3YXRjaGVyc30gb2YgdGhlIGN1cnJlbnQgc2NvcGUgYW5kXG4gICAgICAgKiBpdHMgY2hpbGRyZW4uIEJlY2F1c2UgYSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkd2F0Y2ggd2F0Y2hlcn0ncyBsaXN0ZW5lciBjYW4gY2hhbmdlXG4gICAgICAgKiB0aGUgbW9kZWwsIHRoZSBgJGRpZ2VzdCgpYCBrZWVwcyBjYWxsaW5nIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkd2F0Y2ggd2F0Y2hlcnN9XG4gICAgICAgKiB1bnRpbCBubyBtb3JlIGxpc3RlbmVycyBhcmUgZmlyaW5nLiBUaGlzIG1lYW5zIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gZ2V0IGludG8gYW4gaW5maW5pdGVcbiAgICAgICAqIGxvb3AuIFRoaXMgZnVuY3Rpb24gd2lsbCB0aHJvdyBgJ01heGltdW0gaXRlcmF0aW9uIGxpbWl0IGV4Y2VlZGVkLidgIGlmIHRoZSBudW1iZXIgb2ZcbiAgICAgICAqIGl0ZXJhdGlvbnMgZXhjZWVkcyAxMC5cbiAgICAgICAqXG4gICAgICAgKiBVc3VhbGx5LCB5b3UgZG9uJ3QgY2FsbCBgJGRpZ2VzdCgpYCBkaXJlY3RseSBpblxuICAgICAgICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NvbnRyb2xsZXIgY29udHJvbGxlcnN9IG9yIGluXG4gICAgICAgKiB7QGxpbmsgbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmUgZGlyZWN0aXZlc30uXG4gICAgICAgKiBJbnN0ZWFkLCB5b3Ugc2hvdWxkIGNhbGwge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGFwcGx5ICRhcHBseSgpfSAodHlwaWNhbGx5IGZyb20gd2l0aGluXG4gICAgICAgKiBhIHtAbGluayBuZy4kY29tcGlsZVByb3ZpZGVyI2RpcmVjdGl2ZSBkaXJlY3RpdmV9KSwgd2hpY2ggd2lsbCBmb3JjZSBhIGAkZGlnZXN0KClgLlxuICAgICAgICpcbiAgICAgICAqIElmIHlvdSB3YW50IHRvIGJlIG5vdGlmaWVkIHdoZW5ldmVyIGAkZGlnZXN0KClgIGlzIGNhbGxlZCxcbiAgICAgICAqIHlvdSBjYW4gcmVnaXN0ZXIgYSBgd2F0Y2hFeHByZXNzaW9uYCBmdW5jdGlvbiB3aXRoXG4gICAgICAgKiB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkd2F0Y2ggJHdhdGNoKCl9IHdpdGggbm8gYGxpc3RlbmVyYC5cbiAgICAgICAqXG4gICAgICAgKiBJbiB1bml0IHRlc3RzLCB5b3UgbWF5IG5lZWQgdG8gY2FsbCBgJGRpZ2VzdCgpYCB0byBzaW11bGF0ZSB0aGUgc2NvcGUgbGlmZSBjeWNsZS5cbiAgICAgICAqXG4gICAgICAgKiAjIEV4YW1wbGVcbiAgICAgICAqIGBgYGpzXG4gICAgICAgICAgIHZhciBzY29wZSA9IC4uLjtcbiAgICAgICAgICAgc2NvcGUubmFtZSA9ICdtaXNrbyc7XG4gICAgICAgICAgIHNjb3BlLmNvdW50ZXIgPSAwO1xuXG4gICAgICAgICAgIGV4cGVjdChzY29wZS5jb3VudGVyKS50b0VxdWFsKDApO1xuICAgICAgICAgICBzY29wZS4kd2F0Y2goJ25hbWUnLCBmdW5jdGlvbihuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgICAgICBzY29wZS5jb3VudGVyID0gc2NvcGUuY291bnRlciArIDE7XG4gICAgICAgICAgIH0pO1xuICAgICAgICAgICBleHBlY3Qoc2NvcGUuY291bnRlcikudG9FcXVhbCgwKTtcblxuICAgICAgICAgICBzY29wZS4kZGlnZXN0KCk7XG4gICAgICAgICAgIC8vIHRoZSBsaXN0ZW5lciBpcyBhbHdheXMgY2FsbGVkIGR1cmluZyB0aGUgZmlyc3QgJGRpZ2VzdCBsb29wIGFmdGVyIGl0IHdhcyByZWdpc3RlcmVkXG4gICAgICAgICAgIGV4cGVjdChzY29wZS5jb3VudGVyKS50b0VxdWFsKDEpO1xuXG4gICAgICAgICAgIHNjb3BlLiRkaWdlc3QoKTtcbiAgICAgICAgICAgLy8gYnV0IG5vdyBpdCB3aWxsIG5vdCBiZSBjYWxsZWQgdW5sZXNzIHRoZSB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgICAgIGV4cGVjdChzY29wZS5jb3VudGVyKS50b0VxdWFsKDEpO1xuXG4gICAgICAgICAgIHNjb3BlLm5hbWUgPSAnYWRhbSc7XG4gICAgICAgICAgIHNjb3BlLiRkaWdlc3QoKTtcbiAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMik7XG4gICAgICAgKiBgYGBcbiAgICAgICAqXG4gICAgICAgKi9cbiAgICAgICRkaWdlc3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgd2F0Y2gsIHZhbHVlLCBsYXN0LFxuICAgICAgICAgICAgd2F0Y2hlcnMsXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICBkaXJ0eSwgdHRsID0gVFRMLFxuICAgICAgICAgICAgbmV4dCwgY3VycmVudCwgdGFyZ2V0ID0gdGhpcyxcbiAgICAgICAgICAgIHdhdGNoTG9nID0gW10sXG4gICAgICAgICAgICBsb2dJZHgsIGxvZ01zZywgYXN5bmNUYXNrO1xuXG4gICAgICAgIGJlZ2luUGhhc2UoJyRkaWdlc3QnKTtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGNoYW5nZXMgdG8gYnJvd3NlciB1cmwgdGhhdCBoYXBwZW5lZCBpbiBzeW5jIGJlZm9yZSB0aGUgY2FsbCB0byAkZGlnZXN0XG4gICAgICAgICRicm93c2VyLiQkY2hlY2tVcmxDaGFuZ2UoKTtcblxuICAgICAgICBpZiAodGhpcyA9PT0gJHJvb3RTY29wZSAmJiBhcHBseUFzeW5jSWQgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSByb290IHNjb3BlLCBhbmQgJGFwcGx5QXN5bmMgaGFzIHNjaGVkdWxlZCBhIGRlZmVycmVkICRhcHBseSgpLCB0aGVuXG4gICAgICAgICAgLy8gY2FuY2VsIHRoZSBzY2hlZHVsZWQgJGFwcGx5IGFuZCBmbHVzaCB0aGUgcXVldWUgb2YgZXhwcmVzc2lvbnMgdG8gYmUgZXZhbHVhdGVkLlxuICAgICAgICAgICRicm93c2VyLmRlZmVyLmNhbmNlbChhcHBseUFzeW5jSWQpO1xuICAgICAgICAgIGZsdXNoQXBwbHlBc3luYygpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdERpcnR5V2F0Y2ggPSBudWxsO1xuXG4gICAgICAgIGRvIHsgLy8gXCJ3aGlsZSBkaXJ0eVwiIGxvb3BcbiAgICAgICAgICBkaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgIGN1cnJlbnQgPSB0YXJnZXQ7XG5cbiAgICAgICAgICB3aGlsZSAoYXN5bmNRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGFzeW5jVGFzayA9IGFzeW5jUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgYXN5bmNUYXNrLnNjb3BlLiRldmFsKGFzeW5jVGFzay5leHByZXNzaW9uKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0RGlydHlXYXRjaCA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJhdmVyc2VTY29wZXNMb29wOlxuICAgICAgICAgIGRvIHsgLy8gXCJ0cmF2ZXJzZSB0aGUgc2NvcGVzXCIgbG9vcFxuICAgICAgICAgICAgaWYgKCh3YXRjaGVycyA9IGN1cnJlbnQuJCR3YXRjaGVycykpIHtcbiAgICAgICAgICAgICAgLy8gcHJvY2VzcyBvdXIgd2F0Y2hlc1xuICAgICAgICAgICAgICBsZW5ndGggPSB3YXRjaGVycy5sZW5ndGg7XG4gICAgICAgICAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICB3YXRjaCA9IHdhdGNoZXJzW2xlbmd0aF07XG4gICAgICAgICAgICAgICAgICAvLyBNb3N0IGNvbW1vbiB3YXRjaGVzIGFyZSBvbiBwcmltaXRpdmVzLCBpbiB3aGljaCBjYXNlIHdlIGNhbiBzaG9ydFxuICAgICAgICAgICAgICAgICAgLy8gY2lyY3VpdCBpdCB3aXRoID09PSBvcGVyYXRvciwgb25seSB3aGVuID09PSBmYWlscyBkbyB3ZSB1c2UgLmVxdWFsc1xuICAgICAgICAgICAgICAgICAgaWYgKHdhdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgodmFsdWUgPSB3YXRjaC5nZXQoY3VycmVudCkpICE9PSAobGFzdCA9IHdhdGNoLmxhc3QpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhKHdhdGNoLmVxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlcXVhbHModmFsdWUsIGxhc3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgbGFzdCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpc05hTih2YWx1ZSkgJiYgaXNOYU4obGFzdCkpKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0RGlydHlXYXRjaCA9IHdhdGNoO1xuICAgICAgICAgICAgICAgICAgICAgIHdhdGNoLmxhc3QgPSB3YXRjaC5lcSA/IGNvcHkodmFsdWUsIG51bGwpIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgd2F0Y2guZm4odmFsdWUsICgobGFzdCA9PT0gaW5pdFdhdGNoVmFsKSA/IHZhbHVlIDogbGFzdCksIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmICh0dGwgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dJZHggPSA0IC0gdHRsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3YXRjaExvZ1tsb2dJZHhdKSB3YXRjaExvZ1tsb2dJZHhdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXRjaExvZ1tsb2dJZHhdLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c6IGlzRnVuY3Rpb24od2F0Y2guZXhwKSA/ICdmbjogJyArICh3YXRjaC5leHAubmFtZSB8fCB3YXRjaC5leHAudG9TdHJpbmcoKSkgOiB3YXRjaC5leHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZhbDogbGFzdFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdhdGNoID09PSBsYXN0RGlydHlXYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBtb3N0IHJlY2VudGx5IGRpcnR5IHdhdGNoZXIgaXMgbm93IGNsZWFuLCBzaG9ydCBjaXJjdWl0IHNpbmNlIHRoZSByZW1haW5pbmcgd2F0Y2hlcnNcbiAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGFscmVhZHkgYmVlbiB0ZXN0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgZGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhayB0cmF2ZXJzZVNjb3Blc0xvb3A7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSW5zYW5pdHkgV2FybmluZzogc2NvcGUgZGVwdGgtZmlyc3QgdHJhdmVyc2FsXG4gICAgICAgICAgICAvLyB5ZXMsIHRoaXMgY29kZSBpcyBhIGJpdCBjcmF6eSwgYnV0IGl0IHdvcmtzIGFuZCB3ZSBoYXZlIHRlc3RzIHRvIHByb3ZlIGl0IVxuICAgICAgICAgICAgLy8gdGhpcyBwaWVjZSBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIHRyYXZlcnNhbCBpbiAkYnJvYWRjYXN0XG4gICAgICAgICAgICBpZiAoIShuZXh0ID0gKGN1cnJlbnQuJCRjaGlsZEhlYWQgfHxcbiAgICAgICAgICAgICAgICAoY3VycmVudCAhPT0gdGFyZ2V0ICYmIGN1cnJlbnQuJCRuZXh0U2libGluZykpKSkge1xuICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudCAhPT0gdGFyZ2V0ICYmICEobmV4dCA9IGN1cnJlbnQuJCRuZXh0U2libGluZykpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC4kcGFyZW50O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSB3aGlsZSAoKGN1cnJlbnQgPSBuZXh0KSk7XG5cbiAgICAgICAgICAvLyBgYnJlYWsgdHJhdmVyc2VTY29wZXNMb29wO2AgdGFrZXMgdXMgdG8gaGVyZVxuXG4gICAgICAgICAgaWYgKChkaXJ0eSB8fCBhc3luY1F1ZXVlLmxlbmd0aCkgJiYgISh0dGwtLSkpIHtcbiAgICAgICAgICAgIGNsZWFyUGhhc2UoKTtcbiAgICAgICAgICAgIHRocm93ICRyb290U2NvcGVNaW5FcnIoJ2luZmRpZycsXG4gICAgICAgICAgICAgICAgJ3swfSAkZGlnZXN0KCkgaXRlcmF0aW9ucyByZWFjaGVkLiBBYm9ydGluZyFcXG4nICtcbiAgICAgICAgICAgICAgICAnV2F0Y2hlcnMgZmlyZWQgaW4gdGhlIGxhc3QgNSBpdGVyYXRpb25zOiB7MX0nLFxuICAgICAgICAgICAgICAgIFRUTCwgd2F0Y2hMb2cpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9IHdoaWxlIChkaXJ0eSB8fCBhc3luY1F1ZXVlLmxlbmd0aCk7XG5cbiAgICAgICAgY2xlYXJQaGFzZSgpO1xuXG4gICAgICAgIHdoaWxlIChwb3N0RGlnZXN0UXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBvc3REaWdlc3RRdWV1ZS5zaGlmdCgpKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG5cbiAgICAgIC8qKlxuICAgICAgICogQG5nZG9jIGV2ZW50XG4gICAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyRkZXN0cm95XG4gICAgICAgKiBAZXZlbnRUeXBlIGJyb2FkY2FzdCBvbiBzY29wZSBiZWluZyBkZXN0cm95ZWRcbiAgICAgICAqXG4gICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAqIEJyb2FkY2FzdGVkIHdoZW4gYSBzY29wZSBhbmQgaXRzIGNoaWxkcmVuIGFyZSBiZWluZyBkZXN0cm95ZWQuXG4gICAgICAgKlxuICAgICAgICogTm90ZSB0aGF0LCBpbiBBbmd1bGFySlMsIHRoZXJlIGlzIGFsc28gYSBgJGRlc3Ryb3lgIGpRdWVyeSBldmVudCwgd2hpY2ggY2FuIGJlIHVzZWQgdG9cbiAgICAgICAqIGNsZWFuIHVwIERPTSBiaW5kaW5ncyBiZWZvcmUgYW4gZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIERPTS5cbiAgICAgICAqL1xuXG4gICAgICAvKipcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJGRlc3Ryb3lcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXG4gICAgICAgKlxuICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgKiBSZW1vdmVzIHRoZSBjdXJyZW50IHNjb3BlIChhbmQgYWxsIG9mIGl0cyBjaGlsZHJlbikgZnJvbSB0aGUgcGFyZW50IHNjb3BlLiBSZW1vdmFsIGltcGxpZXNcbiAgICAgICAqIHRoYXQgY2FsbHMgdG8ge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0KCl9IHdpbGwgbm8gbG9uZ2VyXG4gICAgICAgKiBwcm9wYWdhdGUgdG8gdGhlIGN1cnJlbnQgc2NvcGUgYW5kIGl0cyBjaGlsZHJlbi4gUmVtb3ZhbCBhbHNvIGltcGxpZXMgdGhhdCB0aGUgY3VycmVudFxuICAgICAgICogc2NvcGUgaXMgZWxpZ2libGUgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbi5cbiAgICAgICAqXG4gICAgICAgKiBUaGUgYCRkZXN0cm95KClgIGlzIHVzdWFsbHkgdXNlZCBieSBkaXJlY3RpdmVzIHN1Y2ggYXNcbiAgICAgICAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdSZXBlYXQgbmdSZXBlYXR9IGZvciBtYW5hZ2luZyB0aGVcbiAgICAgICAqIHVucm9sbGluZyBvZiB0aGUgbG9vcC5cbiAgICAgICAqXG4gICAgICAgKiBKdXN0IGJlZm9yZSBhIHNjb3BlIGlzIGRlc3Ryb3llZCwgYSBgJGRlc3Ryb3lgIGV2ZW50IGlzIGJyb2FkY2FzdGVkIG9uIHRoaXMgc2NvcGUuXG4gICAgICAgKiBBcHBsaWNhdGlvbiBjb2RlIGNhbiByZWdpc3RlciBhIGAkZGVzdHJveWAgZXZlbnQgaGFuZGxlciB0aGF0IHdpbGwgZ2l2ZSBpdCBhIGNoYW5jZSB0b1xuICAgICAgICogcGVyZm9ybSBhbnkgbmVjZXNzYXJ5IGNsZWFudXAuXG4gICAgICAgKlxuICAgICAgICogTm90ZSB0aGF0LCBpbiBBbmd1bGFySlMsIHRoZXJlIGlzIGFsc28gYSBgJGRlc3Ryb3lgIGpRdWVyeSBldmVudCwgd2hpY2ggY2FuIGJlIHVzZWQgdG9cbiAgICAgICAqIGNsZWFuIHVwIERPTSBiaW5kaW5ncyBiZWZvcmUgYW4gZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIERPTS5cbiAgICAgICAqL1xuICAgICAgJGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyB3ZSBjYW4ndCBkZXN0cm95IHRoZSByb290IHNjb3BlIG9yIGEgc2NvcGUgdGhhdCBoYXMgYmVlbiBhbHJlYWR5IGRlc3Ryb3llZFxuICAgICAgICBpZiAodGhpcy4kJGRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuXG4gICAgICAgIHRoaXMuJGJyb2FkY2FzdCgnJGRlc3Ryb3knKTtcbiAgICAgICAgdGhpcy4kJGRlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzID09PSAkcm9vdFNjb3BlKSByZXR1cm47XG5cbiAgICAgICAgZm9yICh2YXIgZXZlbnROYW1lIGluIHRoaXMuJCRsaXN0ZW5lckNvdW50KSB7XG4gICAgICAgICAgZGVjcmVtZW50TGlzdGVuZXJDb3VudCh0aGlzLCB0aGlzLiQkbGlzdGVuZXJDb3VudFtldmVudE5hbWVdLCBldmVudE5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2V2ZXIgYWxsIHRoZSByZWZlcmVuY2VzIHRvIHBhcmVudCBzY29wZXMgKGFmdGVyIHRoaXMgY2xlYW51cCwgdGhlIGN1cnJlbnQgc2NvcGUgc2hvdWxkXG4gICAgICAgIC8vIG5vdCBiZSByZXRhaW5lZCBieSBhbnkgb2Ygb3VyIHJlZmVyZW5jZXMgYW5kIHNob3VsZCBiZSBlbGlnaWJsZSBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uKVxuICAgICAgICBpZiAocGFyZW50LiQkY2hpbGRIZWFkID09IHRoaXMpIHBhcmVudC4kJGNoaWxkSGVhZCA9IHRoaXMuJCRuZXh0U2libGluZztcbiAgICAgICAgaWYgKHBhcmVudC4kJGNoaWxkVGFpbCA9PSB0aGlzKSBwYXJlbnQuJCRjaGlsZFRhaWwgPSB0aGlzLiQkcHJldlNpYmxpbmc7XG4gICAgICAgIGlmICh0aGlzLiQkcHJldlNpYmxpbmcpIHRoaXMuJCRwcmV2U2libGluZy4kJG5leHRTaWJsaW5nID0gdGhpcy4kJG5leHRTaWJsaW5nO1xuICAgICAgICBpZiAodGhpcy4kJG5leHRTaWJsaW5nKSB0aGlzLiQkbmV4dFNpYmxpbmcuJCRwcmV2U2libGluZyA9IHRoaXMuJCRwcmV2U2libGluZztcblxuICAgICAgICAvLyBEaXNhYmxlIGxpc3RlbmVycywgd2F0Y2hlcnMgYW5kIGFwcGx5L2RpZ2VzdCBtZXRob2RzXG4gICAgICAgIHRoaXMuJGRlc3Ryb3kgPSB0aGlzLiRkaWdlc3QgPSB0aGlzLiRhcHBseSA9IHRoaXMuJGV2YWxBc3luYyA9IHRoaXMuJGFwcGx5QXN5bmMgPSBub29wO1xuICAgICAgICB0aGlzLiRvbiA9IHRoaXMuJHdhdGNoID0gdGhpcy4kd2F0Y2hHcm91cCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9vcDsgfTtcbiAgICAgICAgdGhpcy4kJGxpc3RlbmVycyA9IHt9O1xuXG4gICAgICAgIC8vIEFsbCBvZiB0aGUgY29kZSBiZWxvdyBpcyBib2d1cyBjb2RlIHRoYXQgd29ya3MgYXJvdW5kIFY4J3MgbWVtb3J5IGxlYWsgdmlhIG9wdGltaXplZCBjb2RlXG4gICAgICAgIC8vIGFuZCBpbmxpbmUgY2FjaGVzLlxuICAgICAgICAvL1xuICAgICAgICAvLyBzZWU6XG4gICAgICAgIC8vIC0gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTIwNzMjYzI2XG4gICAgICAgIC8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5qcy9pc3N1ZXMvNjc5NCNpc3N1ZWNvbW1lbnQtMzg2NDg5MDlcbiAgICAgICAgLy8gLSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL2lzc3Vlcy8xMzEzI2lzc3VlY29tbWVudC0xMDM3ODQ1MVxuXG4gICAgICAgIHRoaXMuJHBhcmVudCA9IHRoaXMuJCRuZXh0U2libGluZyA9IHRoaXMuJCRwcmV2U2libGluZyA9IHRoaXMuJCRjaGlsZEhlYWQgPVxuICAgICAgICAgICAgdGhpcy4kJGNoaWxkVGFpbCA9IHRoaXMuJHJvb3QgPSB0aGlzLiQkd2F0Y2hlcnMgPSBudWxsO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyRldmFsXG4gICAgICAgKiBAa2luZCBmdW5jdGlvblxuICAgICAgICpcbiAgICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgICogRXhlY3V0ZXMgdGhlIGBleHByZXNzaW9uYCBvbiB0aGUgY3VycmVudCBzY29wZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LiBBbnkgZXhjZXB0aW9ucyBpblxuICAgICAgICogdGhlIGV4cHJlc3Npb24gYXJlIHByb3BhZ2F0ZWQgKHVuY2F1Z2h0KS4gVGhpcyBpcyB1c2VmdWwgd2hlbiBldmFsdWF0aW5nIEFuZ3VsYXJcbiAgICAgICAqIGV4cHJlc3Npb25zLlxuICAgICAgICpcbiAgICAgICAqICMgRXhhbXBsZVxuICAgICAgICogYGBganNcbiAgICAgICAgICAgdmFyIHNjb3BlID0gbmcuJHJvb3RTY29wZS5TY29wZSgpO1xuICAgICAgICAgICBzY29wZS5hID0gMTtcbiAgICAgICAgICAgc2NvcGUuYiA9IDI7XG5cbiAgICAgICAgICAgZXhwZWN0KHNjb3BlLiRldmFsKCdhK2InKSkudG9FcXVhbCgzKTtcbiAgICAgICAgICAgZXhwZWN0KHNjb3BlLiRldmFsKGZ1bmN0aW9uKHNjb3BlKXsgcmV0dXJuIHNjb3BlLmEgKyBzY29wZS5iOyB9KSkudG9FcXVhbCgzKTtcbiAgICAgICAqIGBgYFxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7KHN0cmluZ3xmdW5jdGlvbigpKT19IGV4cHJlc3Npb24gQW4gYW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkLlxuICAgICAgICpcbiAgICAgICAqICAgIC0gYHN0cmluZ2A6IGV4ZWN1dGUgdXNpbmcgdGhlIHJ1bGVzIGFzIGRlZmluZWQgaW4gIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259LlxuICAgICAgICogICAgLSBgZnVuY3Rpb24oc2NvcGUpYDogZXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgY3VycmVudCBgc2NvcGVgIHBhcmFtZXRlci5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0geyhvYmplY3QpPX0gbG9jYWxzIExvY2FsIHZhcmlhYmxlcyBvYmplY3QsIHVzZWZ1bCBmb3Igb3ZlcnJpZGluZyB2YWx1ZXMgaW4gc2NvcGUuXG4gICAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uLlxuICAgICAgICovXG4gICAgICAkZXZhbDogZnVuY3Rpb24oZXhwciwgbG9jYWxzKSB7XG4gICAgICAgIHJldHVybiAkcGFyc2UoZXhwcikodGhpcywgbG9jYWxzKTtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkZXZhbEFzeW5jXG4gICAgICAgKiBAa2luZCBmdW5jdGlvblxuICAgICAgICpcbiAgICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgICogRXhlY3V0ZXMgdGhlIGV4cHJlc3Npb24gb24gdGhlIGN1cnJlbnQgc2NvcGUgYXQgYSBsYXRlciBwb2ludCBpbiB0aW1lLlxuICAgICAgICpcbiAgICAgICAqIFRoZSBgJGV2YWxBc3luY2AgbWFrZXMgbm8gZ3VhcmFudGVlcyBhcyB0byB3aGVuIHRoZSBgZXhwcmVzc2lvbmAgd2lsbCBiZSBleGVjdXRlZCwgb25seVxuICAgICAgICogdGhhdDpcbiAgICAgICAqXG4gICAgICAgKiAgIC0gaXQgd2lsbCBleGVjdXRlIGFmdGVyIHRoZSBmdW5jdGlvbiB0aGF0IHNjaGVkdWxlZCB0aGUgZXZhbHVhdGlvbiAocHJlZmVyYWJseSBiZWZvcmUgRE9NXG4gICAgICAgKiAgICAgcmVuZGVyaW5nKS5cbiAgICAgICAqICAgLSBhdCBsZWFzdCBvbmUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0IGN5Y2xlfSB3aWxsIGJlIHBlcmZvcm1lZCBhZnRlclxuICAgICAgICogICAgIGBleHByZXNzaW9uYCBleGVjdXRpb24uXG4gICAgICAgKlxuICAgICAgICogQW55IGV4Y2VwdGlvbnMgZnJvbSB0aGUgZXhlY3V0aW9uIG9mIHRoZSBleHByZXNzaW9uIGFyZSBmb3J3YXJkZWQgdG8gdGhlXG4gICAgICAgKiB7QGxpbmsgbmcuJGV4Y2VwdGlvbkhhbmRsZXIgJGV4Y2VwdGlvbkhhbmRsZXJ9IHNlcnZpY2UuXG4gICAgICAgKlxuICAgICAgICogX19Ob3RlOl9fIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG91dHNpZGUgb2YgYSBgJGRpZ2VzdGAgY3ljbGUsIGEgbmV3IGAkZGlnZXN0YCBjeWNsZVxuICAgICAgICogd2lsbCBiZSBzY2hlZHVsZWQuIEhvd2V2ZXIsIGl0IGlzIGVuY291cmFnZWQgdG8gYWx3YXlzIGNhbGwgY29kZSB0aGF0IGNoYW5nZXMgdGhlIG1vZGVsXG4gICAgICAgKiBmcm9tIHdpdGhpbiBhbiBgJGFwcGx5YCBjYWxsLiBUaGF0IGluY2x1ZGVzIGNvZGUgZXZhbHVhdGVkIHZpYSBgJGV2YWxBc3luY2AuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHsoc3RyaW5nfGZ1bmN0aW9uKCkpPX0gZXhwcmVzc2lvbiBBbiBhbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQuXG4gICAgICAgKlxuICAgICAgICogICAgLSBgc3RyaW5nYDogZXhlY3V0ZSB1c2luZyB0aGUgcnVsZXMgYXMgZGVmaW5lZCBpbiB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufS5cbiAgICAgICAqICAgIC0gYGZ1bmN0aW9uKHNjb3BlKWA6IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGN1cnJlbnQgYHNjb3BlYCBwYXJhbWV0ZXIuXG4gICAgICAgKlxuICAgICAgICovXG4gICAgICAkZXZhbEFzeW5jOiBmdW5jdGlvbihleHByKSB7XG4gICAgICAgIC8vIGlmIHdlIGFyZSBvdXRzaWRlIG9mIGFuICRkaWdlc3QgbG9vcCBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSBhcmUgc2NoZWR1bGluZyBhc3luY1xuICAgICAgICAvLyB0YXNrIGFsc28gc2NoZWR1bGUgYXN5bmMgYXV0by1mbHVzaFxuICAgICAgICBpZiAoISRyb290U2NvcGUuJCRwaGFzZSAmJiAhYXN5bmNRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAkYnJvd3Nlci5kZWZlcihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmIChhc3luY1F1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAkcm9vdFNjb3BlLiRkaWdlc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFzeW5jUXVldWUucHVzaCh7c2NvcGU6IHRoaXMsIGV4cHJlc3Npb246IGV4cHJ9KTtcbiAgICAgIH0sXG5cbiAgICAgICQkcG9zdERpZ2VzdDogZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgcG9zdERpZ2VzdFF1ZXVlLnB1c2goZm4pO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyRhcHBseVxuICAgICAgICogQGtpbmQgZnVuY3Rpb25cbiAgICAgICAqXG4gICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAqIGAkYXBwbHkoKWAgaXMgdXNlZCB0byBleGVjdXRlIGFuIGV4cHJlc3Npb24gaW4gYW5ndWxhciBmcm9tIG91dHNpZGUgb2YgdGhlIGFuZ3VsYXJcbiAgICAgICAqIGZyYW1ld29yay4gKEZvciBleGFtcGxlIGZyb20gYnJvd3NlciBET00gZXZlbnRzLCBzZXRUaW1lb3V0LCBYSFIgb3IgdGhpcmQgcGFydHkgbGlicmFyaWVzKS5cbiAgICAgICAqIEJlY2F1c2Ugd2UgYXJlIGNhbGxpbmcgaW50byB0aGUgYW5ndWxhciBmcmFtZXdvcmsgd2UgbmVlZCB0byBwZXJmb3JtIHByb3BlciBzY29wZSBsaWZlXG4gICAgICAgKiBjeWNsZSBvZiB7QGxpbmsgbmcuJGV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uIGhhbmRsaW5nfSxcbiAgICAgICAqIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3QgZXhlY3V0aW5nIHdhdGNoZXN9LlxuICAgICAgICpcbiAgICAgICAqICMjIExpZmUgY3ljbGVcbiAgICAgICAqXG4gICAgICAgKiAjIFBzZXVkby1Db2RlIG9mIGAkYXBwbHkoKWBcbiAgICAgICAqIGBgYGpzXG4gICAgICAgICAgIGZ1bmN0aW9uICRhcHBseShleHByKSB7XG4gICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgIHJldHVybiAkZXZhbChleHByKTtcbiAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTtcbiAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgJHJvb3QuJGRpZ2VzdCgpO1xuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgfVxuICAgICAgICogYGBgXG4gICAgICAgKlxuICAgICAgICpcbiAgICAgICAqIFNjb3BlJ3MgYCRhcHBseSgpYCBtZXRob2QgdHJhbnNpdGlvbnMgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHN0YWdlczpcbiAgICAgICAqXG4gICAgICAgKiAxLiBUaGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaXMgZXhlY3V0ZWQgdXNpbmcgdGhlXG4gICAgICAgKiAgICB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZXZhbCAkZXZhbCgpfSBtZXRob2QuXG4gICAgICAgKiAyLiBBbnkgZXhjZXB0aW9ucyBmcm9tIHRoZSBleGVjdXRpb24gb2YgdGhlIGV4cHJlc3Npb24gYXJlIGZvcndhcmRlZCB0byB0aGVcbiAgICAgICAqICAgIHtAbGluayBuZy4kZXhjZXB0aW9uSGFuZGxlciAkZXhjZXB0aW9uSGFuZGxlcn0gc2VydmljZS5cbiAgICAgICAqIDMuIFRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkd2F0Y2ggd2F0Y2h9IGxpc3RlbmVycyBhcmUgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlXG4gICAgICAgKiAgICBleHByZXNzaW9uIHdhcyBleGVjdXRlZCB1c2luZyB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0KCl9IG1ldGhvZC5cbiAgICAgICAqXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHsoc3RyaW5nfGZ1bmN0aW9uKCkpPX0gZXhwIEFuIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZC5cbiAgICAgICAqXG4gICAgICAgKiAgICAtIGBzdHJpbmdgOiBleGVjdXRlIHVzaW5nIHRoZSBydWxlcyBhcyBkZWZpbmVkIGluIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259LlxuICAgICAgICogICAgLSBgZnVuY3Rpb24oc2NvcGUpYDogZXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCBjdXJyZW50IGBzY29wZWAgcGFyYW1ldGVyLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24uXG4gICAgICAgKi9cbiAgICAgICRhcHBseTogZnVuY3Rpb24oZXhwcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGJlZ2luUGhhc2UoJyRhcHBseScpO1xuICAgICAgICAgIHJldHVybiB0aGlzLiRldmFsKGV4cHIpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgY2xlYXJQaGFzZSgpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAkcm9vdFNjb3BlLiRkaWdlc3QoKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJGFwcGx5QXN5bmNcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXG4gICAgICAgKlxuICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgKiBTY2hlZHVsZSB0aGUgaW52b2thdGlvbiBvZiAkYXBwbHkgdG8gb2NjdXIgYXQgYSBsYXRlciB0aW1lLiBUaGUgYWN0dWFsIHRpbWUgZGlmZmVyZW5jZVxuICAgICAgICogdmFyaWVzIGFjcm9zcyBicm93c2VycywgYnV0IGlzIHR5cGljYWxseSBhcm91bmQgfjEwIG1pbGxpc2Vjb25kcy5cbiAgICAgICAqXG4gICAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHF1ZXVlIHVwIG11bHRpcGxlIGV4cHJlc3Npb25zIHdoaWNoIG5lZWQgdG8gYmUgZXZhbHVhdGVkIGluIHRoZSBzYW1lXG4gICAgICAgKiBkaWdlc3QuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHsoc3RyaW5nfGZ1bmN0aW9uKCkpPX0gZXhwIEFuIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZC5cbiAgICAgICAqXG4gICAgICAgKiAgICAtIGBzdHJpbmdgOiBleGVjdXRlIHVzaW5nIHRoZSBydWxlcyBhcyBkZWZpbmVkIGluIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259LlxuICAgICAgICogICAgLSBgZnVuY3Rpb24oc2NvcGUpYDogZXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCBjdXJyZW50IGBzY29wZWAgcGFyYW1ldGVyLlxuICAgICAgICovXG4gICAgICAkYXBwbHlBc3luYzogZnVuY3Rpb24oZXhwcikge1xuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzO1xuICAgICAgICBleHByICYmIGFwcGx5QXN5bmNRdWV1ZS5wdXNoKCRhcHBseUFzeW5jRXhwcmVzc2lvbik7XG4gICAgICAgIHNjaGVkdWxlQXBwbHlBc3luYygpO1xuXG4gICAgICAgIGZ1bmN0aW9uICRhcHBseUFzeW5jRXhwcmVzc2lvbigpIHtcbiAgICAgICAgICBzY29wZS4kZXZhbChleHByKTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyRvblxuICAgICAgICogQGtpbmQgZnVuY3Rpb25cbiAgICAgICAqXG4gICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAqIExpc3RlbnMgb24gZXZlbnRzIG9mIGEgZ2l2ZW4gdHlwZS4gU2VlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRlbWl0ICRlbWl0fSBmb3JcbiAgICAgICAqIGRpc2N1c3Npb24gb2YgZXZlbnQgbGlmZSBjeWNsZS5cbiAgICAgICAqXG4gICAgICAgKiBUaGUgZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb24gZm9ybWF0IGlzOiBgZnVuY3Rpb24oZXZlbnQsIGFyZ3MuLi4pYC4gVGhlIGBldmVudGAgb2JqZWN0XG4gICAgICAgKiBwYXNzZWQgaW50byB0aGUgbGlzdGVuZXIgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAgICAgICAqXG4gICAgICAgKiAgIC0gYHRhcmdldFNjb3BlYCAtIGB7U2NvcGV9YDogdGhlIHNjb3BlIG9uIHdoaWNoIHRoZSBldmVudCB3YXMgYCRlbWl0YC1lZCBvclxuICAgICAgICogICAgIGAkYnJvYWRjYXN0YC1lZC5cbiAgICAgICAqICAgLSBgY3VycmVudFNjb3BlYCAtIGB7U2NvcGV9YDogdGhlIHNjb3BlIHRoYXQgaXMgY3VycmVudGx5IGhhbmRsaW5nIHRoZSBldmVudC4gT25jZSB0aGVcbiAgICAgICAqICAgICBldmVudCBwcm9wYWdhdGVzIHRocm91Z2ggdGhlIHNjb3BlIGhpZXJhcmNoeSwgdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gbnVsbC5cbiAgICAgICAqICAgLSBgbmFtZWAgLSBge3N0cmluZ31gOiBuYW1lIG9mIHRoZSBldmVudC5cbiAgICAgICAqICAgLSBgc3RvcFByb3BhZ2F0aW9uYCAtIGB7ZnVuY3Rpb249fWA6IGNhbGxpbmcgYHN0b3BQcm9wYWdhdGlvbmAgZnVuY3Rpb24gd2lsbCBjYW5jZWxcbiAgICAgICAqICAgICBmdXJ0aGVyIGV2ZW50IHByb3BhZ2F0aW9uIChhdmFpbGFibGUgb25seSBmb3IgZXZlbnRzIHRoYXQgd2VyZSBgJGVtaXRgLWVkKS5cbiAgICAgICAqICAgLSBgcHJldmVudERlZmF1bHRgIC0gYHtmdW5jdGlvbn1gOiBjYWxsaW5nIGBwcmV2ZW50RGVmYXVsdGAgc2V0cyBgZGVmYXVsdFByZXZlbnRlZGAgZmxhZ1xuICAgICAgICogICAgIHRvIHRydWUuXG4gICAgICAgKiAgIC0gYGRlZmF1bHRQcmV2ZW50ZWRgIC0gYHtib29sZWFufWA6IHRydWUgaWYgYHByZXZlbnREZWZhdWx0YCB3YXMgY2FsbGVkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEV2ZW50IG5hbWUgdG8gbGlzdGVuIG9uLlxuICAgICAgICogQHBhcmFtIHtmdW5jdGlvbihldmVudCwgLi4uYXJncyl9IGxpc3RlbmVyIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZXZlbnQgaXMgZW1pdHRlZC5cbiAgICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbigpfSBSZXR1cm5zIGEgZGVyZWdpc3RyYXRpb24gZnVuY3Rpb24gZm9yIHRoaXMgbGlzdGVuZXIuXG4gICAgICAgKi9cbiAgICAgICRvbjogZnVuY3Rpb24obmFtZSwgbGlzdGVuZXIpIHtcbiAgICAgICAgdmFyIG5hbWVkTGlzdGVuZXJzID0gdGhpcy4kJGxpc3RlbmVyc1tuYW1lXTtcbiAgICAgICAgaWYgKCFuYW1lZExpc3RlbmVycykge1xuICAgICAgICAgIHRoaXMuJCRsaXN0ZW5lcnNbbmFtZV0gPSBuYW1lZExpc3RlbmVycyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVkTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcztcbiAgICAgICAgZG8ge1xuICAgICAgICAgIGlmICghY3VycmVudC4kJGxpc3RlbmVyQ291bnRbbmFtZV0pIHtcbiAgICAgICAgICAgIGN1cnJlbnQuJCRsaXN0ZW5lckNvdW50W25hbWVdID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudC4kJGxpc3RlbmVyQ291bnRbbmFtZV0rKztcbiAgICAgICAgfSB3aGlsZSAoKGN1cnJlbnQgPSBjdXJyZW50LiRwYXJlbnQpKTtcblxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgaW5kZXhPZkxpc3RlbmVyID0gbmFtZWRMaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgICAgICAgaWYgKGluZGV4T2ZMaXN0ZW5lciAhPT0gLTEpIHtcbiAgICAgICAgICAgIG5hbWVkTGlzdGVuZXJzW2luZGV4T2ZMaXN0ZW5lcl0gPSBudWxsO1xuICAgICAgICAgICAgZGVjcmVtZW50TGlzdGVuZXJDb3VudChzZWxmLCAxLCBuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9LFxuXG5cbiAgICAgIC8qKlxuICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkZW1pdFxuICAgICAgICogQGtpbmQgZnVuY3Rpb25cbiAgICAgICAqXG4gICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAqIERpc3BhdGNoZXMgYW4gZXZlbnQgYG5hbWVgIHVwd2FyZHMgdGhyb3VnaCB0aGUgc2NvcGUgaGllcmFyY2h5IG5vdGlmeWluZyB0aGVcbiAgICAgICAqIHJlZ2lzdGVyZWQge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJG9ufSBsaXN0ZW5lcnMuXG4gICAgICAgKlxuICAgICAgICogVGhlIGV2ZW50IGxpZmUgY3ljbGUgc3RhcnRzIGF0IHRoZSBzY29wZSBvbiB3aGljaCBgJGVtaXRgIHdhcyBjYWxsZWQuIEFsbFxuICAgICAgICoge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJG9uIGxpc3RlbmVyc30gbGlzdGVuaW5nIGZvciBgbmFtZWAgZXZlbnQgb24gdGhpcyBzY29wZSBnZXRcbiAgICAgICAqIG5vdGlmaWVkLiBBZnRlcndhcmRzLCB0aGUgZXZlbnQgdHJhdmVyc2VzIHVwd2FyZHMgdG93YXJkIHRoZSByb290IHNjb3BlIGFuZCBjYWxscyBhbGxcbiAgICAgICAqIHJlZ2lzdGVyZWQgbGlzdGVuZXJzIGFsb25nIHRoZSB3YXkuIFRoZSBldmVudCB3aWxsIHN0b3AgcHJvcGFnYXRpbmcgaWYgb25lIG9mIHRoZSBsaXN0ZW5lcnNcbiAgICAgICAqIGNhbmNlbHMgaXQuXG4gICAgICAgKlxuICAgICAgICogQW55IGV4Y2VwdGlvbiBlbWl0dGVkIGZyb20gdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRvbiBsaXN0ZW5lcnN9IHdpbGwgYmUgcGFzc2VkXG4gICAgICAgKiBvbnRvIHRoZSB7QGxpbmsgbmcuJGV4Y2VwdGlvbkhhbmRsZXIgJGV4Y2VwdGlvbkhhbmRsZXJ9IHNlcnZpY2UuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRXZlbnQgbmFtZSB0byBlbWl0LlxuICAgICAgICogQHBhcmFtIHsuLi4qfSBhcmdzIE9wdGlvbmFsIG9uZSBvciBtb3JlIGFyZ3VtZW50cyB3aGljaCB3aWxsIGJlIHBhc3NlZCBvbnRvIHRoZSBldmVudCBsaXN0ZW5lcnMuXG4gICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEV2ZW50IG9iamVjdCAoc2VlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRvbn0pLlxuICAgICAgICovXG4gICAgICAkZW1pdDogZnVuY3Rpb24obmFtZSwgYXJncykge1xuICAgICAgICB2YXIgZW1wdHkgPSBbXSxcbiAgICAgICAgICAgIG5hbWVkTGlzdGVuZXJzLFxuICAgICAgICAgICAgc2NvcGUgPSB0aGlzLFxuICAgICAgICAgICAgc3RvcFByb3BhZ2F0aW9uID0gZmFsc2UsXG4gICAgICAgICAgICBldmVudCA9IHtcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgdGFyZ2V0U2NvcGU6IHNjb3BlLFxuICAgICAgICAgICAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge3N0b3BQcm9wYWdhdGlvbiA9IHRydWU7fSxcbiAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkZWZhdWx0UHJldmVudGVkOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpc3RlbmVyQXJncyA9IGNvbmNhdChbZXZlbnRdLCBhcmd1bWVudHMsIDEpLFxuICAgICAgICAgICAgaSwgbGVuZ3RoO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICBuYW1lZExpc3RlbmVycyA9IHNjb3BlLiQkbGlzdGVuZXJzW25hbWVdIHx8IGVtcHR5O1xuICAgICAgICAgIGV2ZW50LmN1cnJlbnRTY29wZSA9IHNjb3BlO1xuICAgICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG5hbWVkTGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgICAgIC8vIGlmIGxpc3RlbmVycyB3ZXJlIGRlcmVnaXN0ZXJlZCwgZGVmcmFnbWVudCB0aGUgYXJyYXlcbiAgICAgICAgICAgIGlmICghbmFtZWRMaXN0ZW5lcnNbaV0pIHtcbiAgICAgICAgICAgICAgbmFtZWRMaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgIGxlbmd0aC0tO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIC8vYWxsb3cgYWxsIGxpc3RlbmVycyBhdHRhY2hlZCB0byB0aGUgY3VycmVudCBzY29wZSB0byBydW5cbiAgICAgICAgICAgICAgbmFtZWRMaXN0ZW5lcnNbaV0uYXBwbHkobnVsbCwgbGlzdGVuZXJBcmdzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vaWYgYW55IGxpc3RlbmVyIG9uIHRoZSBjdXJyZW50IHNjb3BlIHN0b3BzIHByb3BhZ2F0aW9uLCBwcmV2ZW50IGJ1YmJsaW5nXG4gICAgICAgICAgaWYgKHN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgICAgICAgZXZlbnQuY3VycmVudFNjb3BlID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBldmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy90cmF2ZXJzZSB1cHdhcmRzXG4gICAgICAgICAgc2NvcGUgPSBzY29wZS4kcGFyZW50O1xuICAgICAgICB9IHdoaWxlIChzY29wZSk7XG5cbiAgICAgICAgZXZlbnQuY3VycmVudFNjb3BlID0gbnVsbDtcblxuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9LFxuXG5cbiAgICAgIC8qKlxuICAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkYnJvYWRjYXN0XG4gICAgICAgKiBAa2luZCBmdW5jdGlvblxuICAgICAgICpcbiAgICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgICogRGlzcGF0Y2hlcyBhbiBldmVudCBgbmFtZWAgZG93bndhcmRzIHRvIGFsbCBjaGlsZCBzY29wZXMgKGFuZCB0aGVpciBjaGlsZHJlbikgbm90aWZ5aW5nIHRoZVxuICAgICAgICogcmVnaXN0ZXJlZCB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkb259IGxpc3RlbmVycy5cbiAgICAgICAqXG4gICAgICAgKiBUaGUgZXZlbnQgbGlmZSBjeWNsZSBzdGFydHMgYXQgdGhlIHNjb3BlIG9uIHdoaWNoIGAkYnJvYWRjYXN0YCB3YXMgY2FsbGVkLiBBbGxcbiAgICAgICAqIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRvbiBsaXN0ZW5lcnN9IGxpc3RlbmluZyBmb3IgYG5hbWVgIGV2ZW50IG9uIHRoaXMgc2NvcGUgZ2V0XG4gICAgICAgKiBub3RpZmllZC4gQWZ0ZXJ3YXJkcywgdGhlIGV2ZW50IHByb3BhZ2F0ZXMgdG8gYWxsIGRpcmVjdCBhbmQgaW5kaXJlY3Qgc2NvcGVzIG9mIHRoZSBjdXJyZW50XG4gICAgICAgKiBzY29wZSBhbmQgY2FsbHMgYWxsIHJlZ2lzdGVyZWQgbGlzdGVuZXJzIGFsb25nIHRoZSB3YXkuIFRoZSBldmVudCBjYW5ub3QgYmUgY2FuY2VsZWQuXG4gICAgICAgKlxuICAgICAgICogQW55IGV4Y2VwdGlvbiBlbWl0dGVkIGZyb20gdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRvbiBsaXN0ZW5lcnN9IHdpbGwgYmUgcGFzc2VkXG4gICAgICAgKiBvbnRvIHRoZSB7QGxpbmsgbmcuJGV4Y2VwdGlvbkhhbmRsZXIgJGV4Y2VwdGlvbkhhbmRsZXJ9IHNlcnZpY2UuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRXZlbnQgbmFtZSB0byBicm9hZGNhc3QuXG4gICAgICAgKiBAcGFyYW0gey4uLip9IGFyZ3MgT3B0aW9uYWwgb25lIG9yIG1vcmUgYXJndW1lbnRzIHdoaWNoIHdpbGwgYmUgcGFzc2VkIG9udG8gdGhlIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gRXZlbnQgb2JqZWN0LCBzZWUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJG9ufVxuICAgICAgICovXG4gICAgICAkYnJvYWRjYXN0OiBmdW5jdGlvbihuYW1lLCBhcmdzKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLFxuICAgICAgICAgICAgY3VycmVudCA9IHRhcmdldCxcbiAgICAgICAgICAgIG5leHQgPSB0YXJnZXQsXG4gICAgICAgICAgICBldmVudCA9IHtcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgdGFyZ2V0U2NvcGU6IHRhcmdldCxcbiAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkZWZhdWx0UHJldmVudGVkOiBmYWxzZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICBpZiAoIXRhcmdldC4kJGxpc3RlbmVyQ291bnRbbmFtZV0pIHJldHVybiBldmVudDtcblxuICAgICAgICB2YXIgbGlzdGVuZXJBcmdzID0gY29uY2F0KFtldmVudF0sIGFyZ3VtZW50cywgMSksXG4gICAgICAgICAgICBsaXN0ZW5lcnMsIGksIGxlbmd0aDtcblxuICAgICAgICAvL2Rvd24gd2hpbGUgeW91IGNhbiwgdGhlbiB1cCBhbmQgbmV4dCBzaWJsaW5nIG9yIHVwIGFuZCBuZXh0IHNpYmxpbmcgdW50aWwgYmFjayBhdCByb290XG4gICAgICAgIHdoaWxlICgoY3VycmVudCA9IG5leHQpKSB7XG4gICAgICAgICAgZXZlbnQuY3VycmVudFNjb3BlID0gY3VycmVudDtcbiAgICAgICAgICBsaXN0ZW5lcnMgPSBjdXJyZW50LiQkbGlzdGVuZXJzW25hbWVdIHx8IFtdO1xuICAgICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgLy8gaWYgbGlzdGVuZXJzIHdlcmUgZGVyZWdpc3RlcmVkLCBkZWZyYWdtZW50IHRoZSBhcnJheVxuICAgICAgICAgICAgaWYgKCFsaXN0ZW5lcnNbaV0pIHtcbiAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICBsZW5ndGgtLTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5hcHBseShudWxsLCBsaXN0ZW5lckFyZ3MpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJbnNhbml0eSBXYXJuaW5nOiBzY29wZSBkZXB0aC1maXJzdCB0cmF2ZXJzYWxcbiAgICAgICAgICAvLyB5ZXMsIHRoaXMgY29kZSBpcyBhIGJpdCBjcmF6eSwgYnV0IGl0IHdvcmtzIGFuZCB3ZSBoYXZlIHRlc3RzIHRvIHByb3ZlIGl0IVxuICAgICAgICAgIC8vIHRoaXMgcGllY2Ugc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSB0cmF2ZXJzYWwgaW4gJGRpZ2VzdFxuICAgICAgICAgIC8vICh0aG91Z2ggaXQgZGlmZmVycyBkdWUgdG8gaGF2aW5nIHRoZSBleHRyYSBjaGVjayBmb3IgJCRsaXN0ZW5lckNvdW50KVxuICAgICAgICAgIGlmICghKG5leHQgPSAoKGN1cnJlbnQuJCRsaXN0ZW5lckNvdW50W25hbWVdICYmIGN1cnJlbnQuJCRjaGlsZEhlYWQpIHx8XG4gICAgICAgICAgICAgIChjdXJyZW50ICE9PSB0YXJnZXQgJiYgY3VycmVudC4kJG5leHRTaWJsaW5nKSkpKSB7XG4gICAgICAgICAgICB3aGlsZSAoY3VycmVudCAhPT0gdGFyZ2V0ICYmICEobmV4dCA9IGN1cnJlbnQuJCRuZXh0U2libGluZykpIHtcbiAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuJHBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5jdXJyZW50U2NvcGUgPSBudWxsO1xuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciAkcm9vdFNjb3BlID0gbmV3IFNjb3BlKCk7XG5cbiAgICAvL1RoZSBpbnRlcm5hbCBxdWV1ZXMuIEV4cG9zZSB0aGVtIG9uIHRoZSAkcm9vdFNjb3BlIGZvciBkZWJ1Z2dpbmcvdGVzdGluZyBwdXJwb3Nlcy5cbiAgICB2YXIgYXN5bmNRdWV1ZSA9ICRyb290U2NvcGUuJCRhc3luY1F1ZXVlID0gW107XG4gICAgdmFyIHBvc3REaWdlc3RRdWV1ZSA9ICRyb290U2NvcGUuJCRwb3N0RGlnZXN0UXVldWUgPSBbXTtcbiAgICB2YXIgYXBwbHlBc3luY1F1ZXVlID0gJHJvb3RTY29wZS4kJGFwcGx5QXN5bmNRdWV1ZSA9IFtdO1xuXG4gICAgcmV0dXJuICRyb290U2NvcGU7XG5cblxuICAgIGZ1bmN0aW9uIGJlZ2luUGhhc2UocGhhc2UpIHtcbiAgICAgIGlmICgkcm9vdFNjb3BlLiQkcGhhc2UpIHtcbiAgICAgICAgdGhyb3cgJHJvb3RTY29wZU1pbkVycignaW5wcm9nJywgJ3swfSBhbHJlYWR5IGluIHByb2dyZXNzJywgJHJvb3RTY29wZS4kJHBoYXNlKTtcbiAgICAgIH1cblxuICAgICAgJHJvb3RTY29wZS4kJHBoYXNlID0gcGhhc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYXJQaGFzZSgpIHtcbiAgICAgICRyb290U2NvcGUuJCRwaGFzZSA9IG51bGw7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBkZWNyZW1lbnRMaXN0ZW5lckNvdW50KGN1cnJlbnQsIGNvdW50LCBuYW1lKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGN1cnJlbnQuJCRsaXN0ZW5lckNvdW50W25hbWVdIC09IGNvdW50O1xuXG4gICAgICAgIGlmIChjdXJyZW50LiQkbGlzdGVuZXJDb3VudFtuYW1lXSA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSBjdXJyZW50LiQkbGlzdGVuZXJDb3VudFtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoKGN1cnJlbnQgPSBjdXJyZW50LiRwYXJlbnQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBmdW5jdGlvbiB1c2VkIGFzIGFuIGluaXRpYWwgdmFsdWUgZm9yIHdhdGNoZXJzLlxuICAgICAqIGJlY2F1c2UgaXQncyB1bmlxdWUgd2UgY2FuIGVhc2lseSB0ZWxsIGl0IGFwYXJ0IGZyb20gb3RoZXIgdmFsdWVzXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdFdhdGNoVmFsKCkge31cblxuICAgIGZ1bmN0aW9uIGZsdXNoQXBwbHlBc3luYygpIHtcbiAgICAgIHdoaWxlIChhcHBseUFzeW5jUXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXBwbHlBc3luY1F1ZXVlLnNoaWZ0KCkoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhcHBseUFzeW5jSWQgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlQXBwbHlBc3luYygpIHtcbiAgICAgIGlmIChhcHBseUFzeW5jSWQgPT09IG51bGwpIHtcbiAgICAgICAgYXBwbHlBc3luY0lkID0gJGJyb3dzZXIuZGVmZXIoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJHJvb3RTY29wZS4kYXBwbHkoZmx1c2hBcHBseUFzeW5jKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFByaXZhdGUgc2VydmljZSB0byBzYW5pdGl6ZSB1cmlzIGZvciBsaW5rcyBhbmQgaW1hZ2VzLiBVc2VkIGJ5ICRjb21waWxlIGFuZCAkc2FuaXRpemUuXG4gKi9cbmZ1bmN0aW9uICQkU2FuaXRpemVVcmlQcm92aWRlcigpIHtcbiAgdmFyIGFIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0ID0gL15cXHMqKGh0dHBzP3xmdHB8bWFpbHRvfHRlbHxmaWxlKTovLFxuICAgIGltZ1NyY1Nhbml0aXphdGlvbldoaXRlbGlzdCA9IC9eXFxzKigoaHR0cHM/fGZ0cHxmaWxlfGJsb2IpOnxkYXRhOmltYWdlXFwvKS87XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBSZXRyaWV2ZXMgb3Igb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGlzIHVzZWQgZm9yIHdoaXRlbGlzdGluZyBvZiBzYWZlXG4gICAqIHVybHMgZHVyaW5nIGFbaHJlZl0gc2FuaXRpemF0aW9uLlxuICAgKlxuICAgKiBUaGUgc2FuaXRpemF0aW9uIGlzIGEgc2VjdXJpdHkgbWVhc3VyZSBhaW1lZCBhdCBwcmV2ZW50IFhTUyBhdHRhY2tzIHZpYSBodG1sIGxpbmtzLlxuICAgKlxuICAgKiBBbnkgdXJsIGFib3V0IHRvIGJlIGFzc2lnbmVkIHRvIGFbaHJlZl0gdmlhIGRhdGEtYmluZGluZyBpcyBmaXJzdCBub3JtYWxpemVkIGFuZCB0dXJuZWQgaW50b1xuICAgKiBhbiBhYnNvbHV0ZSB1cmwuIEFmdGVyd2FyZHMsIHRoZSB1cmwgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBgYUhyZWZTYW5pdGl6YXRpb25XaGl0ZWxpc3RgXG4gICAqIHJlZ3VsYXIgZXhwcmVzc2lvbi4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgdGhlIG9yaWdpbmFsIHVybCBpcyB3cml0dGVuIGludG8gdGhlIGRvbS4gT3RoZXJ3aXNlLFxuICAgKiB0aGUgYWJzb2x1dGUgdXJsIGlzIHByZWZpeGVkIHdpdGggYCd1bnNhZmU6J2Agc3RyaW5nIGFuZCBvbmx5IHRoZW4gaXMgaXQgd3JpdHRlbiBpbnRvIHRoZSBET00uXG4gICAqXG4gICAqIEBwYXJhbSB7UmVnRXhwPX0gcmVnZXhwIE5ldyByZWdleHAgdG8gd2hpdGVsaXN0IHVybHMgd2l0aC5cbiAgICogQHJldHVybnMge1JlZ0V4cHxuZy4kY29tcGlsZVByb3ZpZGVyfSBDdXJyZW50IFJlZ0V4cCBpZiBjYWxsZWQgd2l0aG91dCB2YWx1ZSBvciBzZWxmIGZvclxuICAgKiAgICBjaGFpbmluZyBvdGhlcndpc2UuXG4gICAqL1xuICB0aGlzLmFIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0ID0gZnVuY3Rpb24ocmVnZXhwKSB7XG4gICAgaWYgKGlzRGVmaW5lZChyZWdleHApKSB7XG4gICAgICBhSHJlZlNhbml0aXphdGlvbldoaXRlbGlzdCA9IHJlZ2V4cDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gYUhyZWZTYW5pdGl6YXRpb25XaGl0ZWxpc3Q7XG4gIH07XG5cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFJldHJpZXZlcyBvciBvdmVycmlkZXMgdGhlIGRlZmF1bHQgcmVndWxhciBleHByZXNzaW9uIHRoYXQgaXMgdXNlZCBmb3Igd2hpdGVsaXN0aW5nIG9mIHNhZmVcbiAgICogdXJscyBkdXJpbmcgaW1nW3NyY10gc2FuaXRpemF0aW9uLlxuICAgKlxuICAgKiBUaGUgc2FuaXRpemF0aW9uIGlzIGEgc2VjdXJpdHkgbWVhc3VyZSBhaW1lZCBhdCBwcmV2ZW50IFhTUyBhdHRhY2tzIHZpYSBodG1sIGxpbmtzLlxuICAgKlxuICAgKiBBbnkgdXJsIGFib3V0IHRvIGJlIGFzc2lnbmVkIHRvIGltZ1tzcmNdIHZpYSBkYXRhLWJpbmRpbmcgaXMgZmlyc3Qgbm9ybWFsaXplZCBhbmQgdHVybmVkIGludG9cbiAgICogYW4gYWJzb2x1dGUgdXJsLiBBZnRlcndhcmRzLCB0aGUgdXJsIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgYGltZ1NyY1Nhbml0aXphdGlvbldoaXRlbGlzdGBcbiAgICogcmVndWxhciBleHByZXNzaW9uLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCB0aGUgb3JpZ2luYWwgdXJsIGlzIHdyaXR0ZW4gaW50byB0aGUgZG9tLiBPdGhlcndpc2UsXG4gICAqIHRoZSBhYnNvbHV0ZSB1cmwgaXMgcHJlZml4ZWQgd2l0aCBgJ3Vuc2FmZTonYCBzdHJpbmcgYW5kIG9ubHkgdGhlbiBpcyBpdCB3cml0dGVuIGludG8gdGhlIERPTS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWdFeHA9fSByZWdleHAgTmV3IHJlZ2V4cCB0byB3aGl0ZWxpc3QgdXJscyB3aXRoLlxuICAgKiBAcmV0dXJucyB7UmVnRXhwfG5nLiRjb21waWxlUHJvdmlkZXJ9IEN1cnJlbnQgUmVnRXhwIGlmIGNhbGxlZCB3aXRob3V0IHZhbHVlIG9yIHNlbGYgZm9yXG4gICAqICAgIGNoYWluaW5nIG90aGVyd2lzZS5cbiAgICovXG4gIHRoaXMuaW1nU3JjU2FuaXRpemF0aW9uV2hpdGVsaXN0ID0gZnVuY3Rpb24ocmVnZXhwKSB7XG4gICAgaWYgKGlzRGVmaW5lZChyZWdleHApKSB7XG4gICAgICBpbWdTcmNTYW5pdGl6YXRpb25XaGl0ZWxpc3QgPSByZWdleHA7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIGltZ1NyY1Nhbml0aXphdGlvbldoaXRlbGlzdDtcbiAgfTtcblxuICB0aGlzLiRnZXQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gc2FuaXRpemVVcmkodXJpLCBpc0ltYWdlKSB7XG4gICAgICB2YXIgcmVnZXggPSBpc0ltYWdlID8gaW1nU3JjU2FuaXRpemF0aW9uV2hpdGVsaXN0IDogYUhyZWZTYW5pdGl6YXRpb25XaGl0ZWxpc3Q7XG4gICAgICB2YXIgbm9ybWFsaXplZFZhbDtcbiAgICAgIG5vcm1hbGl6ZWRWYWwgPSB1cmxSZXNvbHZlKHVyaSkuaHJlZjtcbiAgICAgIGlmIChub3JtYWxpemVkVmFsICE9PSAnJyAmJiAhbm9ybWFsaXplZFZhbC5tYXRjaChyZWdleCkpIHtcbiAgICAgICAgcmV0dXJuICd1bnNhZmU6JyArIG5vcm1hbGl6ZWRWYWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXJpO1xuICAgIH07XG4gIH07XG59XG5cbnZhciAkc2NlTWluRXJyID0gbWluRXJyKCckc2NlJyk7XG5cbnZhciBTQ0VfQ09OVEVYVFMgPSB7XG4gIEhUTUw6ICdodG1sJyxcbiAgQ1NTOiAnY3NzJyxcbiAgVVJMOiAndXJsJyxcbiAgLy8gUkVTT1VSQ0VfVVJMIGlzIGEgc3VidHlwZSBvZiBVUkwgdXNlZCBpbiBjb250ZXh0cyB3aGVyZSBhIHByaXZpbGVnZWQgcmVzb3VyY2UgaXMgc291cmNlZCBmcm9tIGFcbiAgLy8gdXJsLiAgKGUuZy4gbmctaW5jbHVkZSwgc2NyaXB0IHNyYywgdGVtcGxhdGVVcmwpXG4gIFJFU09VUkNFX1VSTDogJ3Jlc291cmNlVXJsJyxcbiAgSlM6ICdqcydcbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9sbG93LlxuXG5mdW5jdGlvbiBhZGp1c3RNYXRjaGVyKG1hdGNoZXIpIHtcbiAgaWYgKG1hdGNoZXIgPT09ICdzZWxmJykge1xuICAgIHJldHVybiBtYXRjaGVyO1xuICB9IGVsc2UgaWYgKGlzU3RyaW5nKG1hdGNoZXIpKSB7XG4gICAgLy8gU3RyaW5ncyBtYXRjaCBleGFjdGx5IGV4Y2VwdCBmb3IgMiB3aWxkY2FyZHMgLSAnKicgYW5kICcqKicuXG4gICAgLy8gJyonIG1hdGNoZXMgYW55IGNoYXJhY3RlciBleGNlcHQgdGhvc2UgZnJvbSB0aGUgc2V0ICc6Ly4/JicuXG4gICAgLy8gJyoqJyBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgKGxpa2UgLiogaW4gYSBSZWdFeHApLlxuICAgIC8vIE1vcmUgdGhhbiAyIConcyByYWlzZXMgYW4gZXJyb3IgYXMgaXQncyBpbGwgZGVmaW5lZC5cbiAgICBpZiAobWF0Y2hlci5pbmRleE9mKCcqKionKSA+IC0xKSB7XG4gICAgICB0aHJvdyAkc2NlTWluRXJyKCdpd2NhcmQnLFxuICAgICAgICAgICdJbGxlZ2FsIHNlcXVlbmNlICoqKiBpbiBzdHJpbmcgbWF0Y2hlci4gIFN0cmluZzogezB9JywgbWF0Y2hlcik7XG4gICAgfVxuICAgIG1hdGNoZXIgPSBlc2NhcGVGb3JSZWdleHAobWF0Y2hlcikuXG4gICAgICAgICAgICAgICAgICByZXBsYWNlKCdcXFxcKlxcXFwqJywgJy4qJykuXG4gICAgICAgICAgICAgICAgICByZXBsYWNlKCdcXFxcKicsICdbXjovLj8mO10qJyk7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nICsgbWF0Y2hlciArICckJyk7XG4gIH0gZWxzZSBpZiAoaXNSZWdFeHAobWF0Y2hlcikpIHtcbiAgICAvLyBUaGUgb25seSBvdGhlciB0eXBlIG9mIG1hdGNoZXIgYWxsb3dlZCBpcyBhIFJlZ2V4cC5cbiAgICAvLyBNYXRjaCBlbnRpcmUgVVJMIC8gZGlzYWxsb3cgcGFydGlhbCBtYXRjaGVzLlxuICAgIC8vIEZsYWdzIGFyZSByZXNldCAoaS5lLiBubyBnbG9iYWwsIGlnbm9yZUNhc2Ugb3IgbXVsdGlsaW5lKVxuICAgIHJldHVybiBuZXcgUmVnRXhwKCdeJyArIG1hdGNoZXIuc291cmNlICsgJyQnKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyAkc2NlTWluRXJyKCdpbWF0Y2hlcicsXG4gICAgICAgICdNYXRjaGVycyBtYXkgb25seSBiZSBcInNlbGZcIiwgc3RyaW5nIHBhdHRlcm5zIG9yIFJlZ0V4cCBvYmplY3RzJyk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBhZGp1c3RNYXRjaGVycyhtYXRjaGVycykge1xuICB2YXIgYWRqdXN0ZWRNYXRjaGVycyA9IFtdO1xuICBpZiAoaXNEZWZpbmVkKG1hdGNoZXJzKSkge1xuICAgIGZvckVhY2gobWF0Y2hlcnMsIGZ1bmN0aW9uKG1hdGNoZXIpIHtcbiAgICAgIGFkanVzdGVkTWF0Y2hlcnMucHVzaChhZGp1c3RNYXRjaGVyKG1hdGNoZXIpKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYWRqdXN0ZWRNYXRjaGVycztcbn1cblxuXG4vKipcbiAqIEBuZ2RvYyBzZXJ2aWNlXG4gKiBAbmFtZSAkc2NlRGVsZWdhdGVcbiAqIEBraW5kIGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogYCRzY2VEZWxlZ2F0ZWAgaXMgYSBzZXJ2aWNlIHRoYXQgaXMgdXNlZCBieSB0aGUgYCRzY2VgIHNlcnZpY2UgdG8gcHJvdmlkZSB7QGxpbmsgbmcuJHNjZSBTdHJpY3RcbiAqIENvbnRleHR1YWwgRXNjYXBpbmcgKFNDRSl9IHNlcnZpY2VzIHRvIEFuZ3VsYXJKUy5cbiAqXG4gKiBUeXBpY2FsbHksIHlvdSB3b3VsZCBjb25maWd1cmUgb3Igb3ZlcnJpZGUgdGhlIHtAbGluayBuZy4kc2NlRGVsZWdhdGUgJHNjZURlbGVnYXRlfSBpbnN0ZWFkIG9mXG4gKiB0aGUgYCRzY2VgIHNlcnZpY2UgdG8gY3VzdG9taXplIHRoZSB3YXkgU3RyaWN0IENvbnRleHR1YWwgRXNjYXBpbmcgd29ya3MgaW4gQW5ndWxhckpTLiAgVGhpcyBpc1xuICogYmVjYXVzZSwgd2hpbGUgdGhlIGAkc2NlYCBwcm92aWRlcyBudW1lcm91cyBzaG9ydGhhbmQgbWV0aG9kcywgZXRjLiwgeW91IHJlYWxseSBvbmx5IG5lZWQgdG9cbiAqIG92ZXJyaWRlIDMgY29yZSBmdW5jdGlvbnMgKGB0cnVzdEFzYCwgYGdldFRydXN0ZWRgIGFuZCBgdmFsdWVPZmApIHRvIHJlcGxhY2UgdGhlIHdheSB0aGluZ3NcbiAqIHdvcmsgYmVjYXVzZSBgJHNjZWAgZGVsZWdhdGVzIHRvIGAkc2NlRGVsZWdhdGVgIGZvciB0aGVzZSBvcGVyYXRpb25zLlxuICpcbiAqIFJlZmVyIHtAbGluayBuZy4kc2NlRGVsZWdhdGVQcm92aWRlciAkc2NlRGVsZWdhdGVQcm92aWRlcn0gdG8gY29uZmlndXJlIHRoaXMgc2VydmljZS5cbiAqXG4gKiBUaGUgZGVmYXVsdCBpbnN0YW5jZSBvZiBgJHNjZURlbGVnYXRlYCBzaG91bGQgd29yayBvdXQgb2YgdGhlIGJveCB3aXRoIGxpdHRsZSBwYWluLiAgV2hpbGUgeW91XG4gKiBjYW4gb3ZlcnJpZGUgaXQgY29tcGxldGVseSB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIGAkc2NlYCwgdGhlIGNvbW1vbiBjYXNlIHdvdWxkXG4gKiBpbnZvbHZlIGNvbmZpZ3VyaW5nIHRoZSB7QGxpbmsgbmcuJHNjZURlbGVnYXRlUHJvdmlkZXIgJHNjZURlbGVnYXRlUHJvdmlkZXJ9IGluc3RlYWQgYnkgc2V0dGluZ1xuICogeW91ciBvd24gd2hpdGVsaXN0cyBhbmQgYmxhY2tsaXN0cyBmb3IgdHJ1c3RpbmcgVVJMcyB1c2VkIGZvciBsb2FkaW5nIEFuZ3VsYXJKUyByZXNvdXJjZXMgc3VjaCBhc1xuICogdGVtcGxhdGVzLiAgUmVmZXIge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyI3Jlc291cmNlVXJsV2hpdGVsaXN0XG4gKiAkc2NlRGVsZWdhdGVQcm92aWRlci5yZXNvdXJjZVVybFdoaXRlbGlzdH0gYW5kIHtAbGlua1xuICogbmcuJHNjZURlbGVnYXRlUHJvdmlkZXIjcmVzb3VyY2VVcmxCbGFja2xpc3QgJHNjZURlbGVnYXRlUHJvdmlkZXIucmVzb3VyY2VVcmxCbGFja2xpc3R9XG4gKi9cblxuLyoqXG4gKiBAbmdkb2MgcHJvdmlkZXJcbiAqIEBuYW1lICRzY2VEZWxlZ2F0ZVByb3ZpZGVyXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBUaGUgYCRzY2VEZWxlZ2F0ZVByb3ZpZGVyYCBwcm92aWRlciBhbGxvd3MgZGV2ZWxvcGVycyB0byBjb25maWd1cmUgdGhlIHtAbGluayBuZy4kc2NlRGVsZWdhdGVcbiAqICRzY2VEZWxlZ2F0ZX0gc2VydmljZS4gIFRoaXMgYWxsb3dzIG9uZSB0byBnZXQvc2V0IHRoZSB3aGl0ZWxpc3RzIGFuZCBibGFja2xpc3RzIHVzZWQgdG8gZW5zdXJlXG4gKiB0aGF0IHRoZSBVUkxzIHVzZWQgZm9yIHNvdXJjaW5nIEFuZ3VsYXIgdGVtcGxhdGVzIGFyZSBzYWZlLiAgUmVmZXIge0BsaW5rXG4gKiBuZy4kc2NlRGVsZWdhdGVQcm92aWRlciNyZXNvdXJjZVVybFdoaXRlbGlzdCAkc2NlRGVsZWdhdGVQcm92aWRlci5yZXNvdXJjZVVybFdoaXRlbGlzdH0gYW5kXG4gKiB7QGxpbmsgbmcuJHNjZURlbGVnYXRlUHJvdmlkZXIjcmVzb3VyY2VVcmxCbGFja2xpc3QgJHNjZURlbGVnYXRlUHJvdmlkZXIucmVzb3VyY2VVcmxCbGFja2xpc3R9XG4gKlxuICogRm9yIHRoZSBnZW5lcmFsIGRldGFpbHMgYWJvdXQgdGhpcyBzZXJ2aWNlIGluIEFuZ3VsYXIsIHJlYWQgdGhlIG1haW4gcGFnZSBmb3Ige0BsaW5rIG5nLiRzY2VcbiAqIFN0cmljdCBDb250ZXh0dWFsIEVzY2FwaW5nIChTQ0UpfS5cbiAqXG4gKiAqKkV4YW1wbGUqKjogIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY2FzZS4gPGEgbmFtZT1cImV4YW1wbGVcIj48L2E+XG4gKlxuICogLSB5b3VyIGFwcCBpcyBob3N0ZWQgYXQgdXJsIGBodHRwOi8vbXlhcHAuZXhhbXBsZS5jb20vYFxuICogLSBidXQgc29tZSBvZiB5b3VyIHRlbXBsYXRlcyBhcmUgaG9zdGVkIG9uIG90aGVyIGRvbWFpbnMgeW91IGNvbnRyb2wgc3VjaCBhc1xuICogICBgaHR0cDovL3NydjAxLmFzc2V0cy5leGFtcGxlLmNvbS9gLMKgIGBodHRwOi8vc3J2MDIuYXNzZXRzLmV4YW1wbGUuY29tL2AsIGV0Yy5cbiAqIC0gYW5kIHlvdSBoYXZlIGFuIG9wZW4gcmVkaXJlY3QgYXQgYGh0dHA6Ly9teWFwcC5leGFtcGxlLmNvbS9jbGlja1RocnU/Li4uYC5cbiAqXG4gKiBIZXJlIGlzIHdoYXQgYSBzZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBzY2VuYXJpbyBtaWdodCBsb29rIGxpa2U6XG4gKlxuICogYGBgXG4gKiAgYW5ndWxhci5tb2R1bGUoJ215QXBwJywgW10pLmNvbmZpZyhmdW5jdGlvbigkc2NlRGVsZWdhdGVQcm92aWRlcikge1xuICogICAgJHNjZURlbGVnYXRlUHJvdmlkZXIucmVzb3VyY2VVcmxXaGl0ZWxpc3QoW1xuICogICAgICAvLyBBbGxvdyBzYW1lIG9yaWdpbiByZXNvdXJjZSBsb2Fkcy5cbiAqICAgICAgJ3NlbGYnLFxuICogICAgICAvLyBBbGxvdyBsb2FkaW5nIGZyb20gb3VyIGFzc2V0cyBkb21haW4uICBOb3RpY2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAqIGFuZCAqKi5cbiAqICAgICAgJ2h0dHA6Ly9zcnYqLmFzc2V0cy5leGFtcGxlLmNvbS8qKidcbiAqICAgIF0pO1xuICpcbiAqICAgIC8vIFRoZSBibGFja2xpc3Qgb3ZlcnJpZGVzIHRoZSB3aGl0ZWxpc3Qgc28gdGhlIG9wZW4gcmVkaXJlY3QgaGVyZSBpcyBibG9ja2VkLlxuICogICAgJHNjZURlbGVnYXRlUHJvdmlkZXIucmVzb3VyY2VVcmxCbGFja2xpc3QoW1xuICogICAgICAnaHR0cDovL215YXBwLmV4YW1wbGUuY29tL2NsaWNrVGhydSoqJ1xuICogICAgXSk7XG4gKiAgfSk7XG4gKiBgYGBcbiAqL1xuXG5mdW5jdGlvbiAkU2NlRGVsZWdhdGVQcm92aWRlcigpIHtcbiAgdGhpcy5TQ0VfQ09OVEVYVFMgPSBTQ0VfQ09OVEVYVFM7XG5cbiAgLy8gUmVzb3VyY2UgVVJMcyBjYW4gYWxzbyBiZSB0cnVzdGVkIGJ5IHBvbGljeS5cbiAgdmFyIHJlc291cmNlVXJsV2hpdGVsaXN0ID0gWydzZWxmJ10sXG4gICAgICByZXNvdXJjZVVybEJsYWNrbGlzdCA9IFtdO1xuXG4gIC8qKlxuICAgKiBAbmdkb2MgbWV0aG9kXG4gICAqIEBuYW1lICRzY2VEZWxlZ2F0ZVByb3ZpZGVyI3Jlc291cmNlVXJsV2hpdGVsaXN0XG4gICAqIEBraW5kIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk9fSB3aGl0ZWxpc3QgV2hlbiBwcm92aWRlZCwgcmVwbGFjZXMgdGhlIHJlc291cmNlVXJsV2hpdGVsaXN0IHdpdGggdGhlIHZhbHVlXG4gICAqICAgICBwcm92aWRlZC4gIFRoaXMgbXVzdCBiZSBhbiBhcnJheSBvciBudWxsLiAgQSBzbmFwc2hvdCBvZiB0aGlzIGFycmF5IGlzIHVzZWQgc28gZnVydGhlclxuICAgKiAgICAgY2hhbmdlcyB0byB0aGUgYXJyYXkgYXJlIGlnbm9yZWQuXG4gICAqXG4gICAqICAgICBGb2xsb3cge0BsaW5rIG5nLiRzY2UjcmVzb3VyY2VVcmxQYXR0ZXJuSXRlbSB0aGlzIGxpbmt9IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBpdGVtc1xuICAgKiAgICAgYWxsb3dlZCBpbiB0aGlzIGFycmF5LlxuICAgKlxuICAgKiAgICAgTm90ZTogKiphbiBlbXB0eSB3aGl0ZWxpc3QgYXJyYXkgd2lsbCBibG9jayBhbGwgVVJMcyoqIVxuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheX0gdGhlIGN1cnJlbnRseSBzZXQgd2hpdGVsaXN0IGFycmF5LlxuICAgKlxuICAgKiBUaGUgKipkZWZhdWx0IHZhbHVlKiogd2hlbiBubyB3aGl0ZWxpc3QgaGFzIGJlZW4gZXhwbGljaXRseSBzZXQgaXMgYFsnc2VsZiddYCBhbGxvd2luZyBvbmx5XG4gICAqIHNhbWUgb3JpZ2luIHJlc291cmNlIHJlcXVlc3RzLlxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cy9HZXRzIHRoZSB3aGl0ZWxpc3Qgb2YgdHJ1c3RlZCByZXNvdXJjZSBVUkxzLlxuICAgKi9cbiAgdGhpcy5yZXNvdXJjZVVybFdoaXRlbGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJlc291cmNlVXJsV2hpdGVsaXN0ID0gYWRqdXN0TWF0Y2hlcnModmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb3VyY2VVcmxXaGl0ZWxpc3Q7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgJHNjZURlbGVnYXRlUHJvdmlkZXIjcmVzb3VyY2VVcmxCbGFja2xpc3RcbiAgICogQGtpbmQgZnVuY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheT19IGJsYWNrbGlzdCBXaGVuIHByb3ZpZGVkLCByZXBsYWNlcyB0aGUgcmVzb3VyY2VVcmxCbGFja2xpc3Qgd2l0aCB0aGUgdmFsdWVcbiAgICogICAgIHByb3ZpZGVkLiAgVGhpcyBtdXN0IGJlIGFuIGFycmF5IG9yIG51bGwuICBBIHNuYXBzaG90IG9mIHRoaXMgYXJyYXkgaXMgdXNlZCBzbyBmdXJ0aGVyXG4gICAqICAgICBjaGFuZ2VzIHRvIHRoZSBhcnJheSBhcmUgaWdub3JlZC5cbiAgICpcbiAgICogICAgIEZvbGxvdyB7QGxpbmsgbmcuJHNjZSNyZXNvdXJjZVVybFBhdHRlcm5JdGVtIHRoaXMgbGlua30gZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGl0ZW1zXG4gICAqICAgICBhbGxvd2VkIGluIHRoaXMgYXJyYXkuXG4gICAqXG4gICAqICAgICBUaGUgdHlwaWNhbCB1c2FnZSBmb3IgdGhlIGJsYWNrbGlzdCBpcyB0byAqKmJsb2NrXG4gICAqICAgICBbb3BlbiByZWRpcmVjdHNdKGh0dHA6Ly9jd2UubWl0cmUub3JnL2RhdGEvZGVmaW5pdGlvbnMvNjAxLmh0bWwpKiogc2VydmVkIGJ5IHlvdXIgZG9tYWluIGFzXG4gICAqICAgICB0aGVzZSB3b3VsZCBvdGhlcndpc2UgYmUgdHJ1c3RlZCBidXQgYWN0dWFsbHkgcmV0dXJuIGNvbnRlbnQgZnJvbSB0aGUgcmVkaXJlY3RlZCBkb21haW4uXG4gICAqXG4gICAqICAgICBGaW5hbGx5LCAqKnRoZSBibGFja2xpc3Qgb3ZlcnJpZGVzIHRoZSB3aGl0ZWxpc3QqKiBhbmQgaGFzIHRoZSBmaW5hbCBzYXkuXG4gICAqXG4gICAqIEByZXR1cm4ge0FycmF5fSB0aGUgY3VycmVudGx5IHNldCBibGFja2xpc3QgYXJyYXkuXG4gICAqXG4gICAqIFRoZSAqKmRlZmF1bHQgdmFsdWUqKiB3aGVuIG5vIHdoaXRlbGlzdCBoYXMgYmVlbiBleHBsaWNpdGx5IHNldCBpcyB0aGUgZW1wdHkgYXJyYXkgKGkuZS4gdGhlcmVcbiAgICogaXMgbm8gYmxhY2tsaXN0LilcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMvR2V0cyB0aGUgYmxhY2tsaXN0IG9mIHRydXN0ZWQgcmVzb3VyY2UgVVJMcy5cbiAgICovXG5cbiAgdGhpcy5yZXNvdXJjZVVybEJsYWNrbGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJlc291cmNlVXJsQmxhY2tsaXN0ID0gYWRqdXN0TWF0Y2hlcnModmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb3VyY2VVcmxCbGFja2xpc3Q7XG4gIH07XG5cbiAgdGhpcy4kZ2V0ID0gWyckaW5qZWN0b3InLCBmdW5jdGlvbigkaW5qZWN0b3IpIHtcblxuICAgIHZhciBodG1sU2FuaXRpemVyID0gZnVuY3Rpb24gaHRtbFNhbml0aXplcihodG1sKSB7XG4gICAgICB0aHJvdyAkc2NlTWluRXJyKCd1bnNhZmUnLCAnQXR0ZW1wdGluZyB0byB1c2UgYW4gdW5zYWZlIHZhbHVlIGluIGEgc2FmZSBjb250ZXh0LicpO1xuICAgIH07XG5cbiAgICBpZiAoJGluamVjdG9yLmhhcygnJHNhbml0aXplJykpIHtcbiAgICAgIGh0bWxTYW5pdGl6ZXIgPSAkaW5qZWN0b3IuZ2V0KCckc2FuaXRpemUnKTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIG1hdGNoVXJsKG1hdGNoZXIsIHBhcnNlZFVybCkge1xuICAgICAgaWYgKG1hdGNoZXIgPT09ICdzZWxmJykge1xuICAgICAgICByZXR1cm4gdXJsSXNTYW1lT3JpZ2luKHBhcnNlZFVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkZWZpbml0ZWx5IGEgcmVnZXguICBTZWUgYWRqdXN0TWF0Y2hlcnMoKVxuICAgICAgICByZXR1cm4gISFtYXRjaGVyLmV4ZWMocGFyc2VkVXJsLmhyZWYpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUmVzb3VyY2VVcmxBbGxvd2VkQnlQb2xpY3kodXJsKSB7XG4gICAgICB2YXIgcGFyc2VkVXJsID0gdXJsUmVzb2x2ZSh1cmwudG9TdHJpbmcoKSk7XG4gICAgICB2YXIgaSwgbiwgYWxsb3dlZCA9IGZhbHNlO1xuICAgICAgLy8gRW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGl0ZW0gZnJvbSB0aGUgd2hpdGVsaXN0IGFsbG93cyB0aGlzIHVybC5cbiAgICAgIGZvciAoaSA9IDAsIG4gPSByZXNvdXJjZVVybFdoaXRlbGlzdC5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgaWYgKG1hdGNoVXJsKHJlc291cmNlVXJsV2hpdGVsaXN0W2ldLCBwYXJzZWRVcmwpKSB7XG4gICAgICAgICAgYWxsb3dlZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChhbGxvd2VkKSB7XG4gICAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIGl0ZW0gZnJvbSB0aGUgYmxhY2tsaXN0IGJsb2NrZWQgdGhpcyB1cmwuXG4gICAgICAgIGZvciAoaSA9IDAsIG4gPSByZXNvdXJjZVVybEJsYWNrbGlzdC5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBpZiAobWF0Y2hVcmwocmVzb3VyY2VVcmxCbGFja2xpc3RbaV0sIHBhcnNlZFVybCkpIHtcbiAgICAgICAgICAgIGFsbG93ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFsbG93ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVIb2xkZXJUeXBlKEJhc2UpIHtcbiAgICAgIHZhciBob2xkZXJUeXBlID0gZnVuY3Rpb24gVHJ1c3RlZFZhbHVlSG9sZGVyVHlwZSh0cnVzdGVkVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kJHVud3JhcFRydXN0ZWRWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB0cnVzdGVkVmFsdWU7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgaWYgKEJhc2UpIHtcbiAgICAgICAgaG9sZGVyVHlwZS5wcm90b3R5cGUgPSBuZXcgQmFzZSgpO1xuICAgICAgfVxuICAgICAgaG9sZGVyVHlwZS5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uIHNjZVZhbHVlT2YoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiQkdW53cmFwVHJ1c3RlZFZhbHVlKCk7XG4gICAgICB9O1xuICAgICAgaG9sZGVyVHlwZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiBzY2VUb1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJCR1bndyYXBUcnVzdGVkVmFsdWUoKS50b1N0cmluZygpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBob2xkZXJUeXBlO1xuICAgIH1cblxuICAgIHZhciB0cnVzdGVkVmFsdWVIb2xkZXJCYXNlID0gZ2VuZXJhdGVIb2xkZXJUeXBlKCksXG4gICAgICAgIGJ5VHlwZSA9IHt9O1xuXG4gICAgYnlUeXBlW1NDRV9DT05URVhUUy5IVE1MXSA9IGdlbmVyYXRlSG9sZGVyVHlwZSh0cnVzdGVkVmFsdWVIb2xkZXJCYXNlKTtcbiAgICBieVR5cGVbU0NFX0NPTlRFWFRTLkNTU10gPSBnZW5lcmF0ZUhvbGRlclR5cGUodHJ1c3RlZFZhbHVlSG9sZGVyQmFzZSk7XG4gICAgYnlUeXBlW1NDRV9DT05URVhUUy5VUkxdID0gZ2VuZXJhdGVIb2xkZXJUeXBlKHRydXN0ZWRWYWx1ZUhvbGRlckJhc2UpO1xuICAgIGJ5VHlwZVtTQ0VfQ09OVEVYVFMuSlNdID0gZ2VuZXJhdGVIb2xkZXJUeXBlKHRydXN0ZWRWYWx1ZUhvbGRlckJhc2UpO1xuICAgIGJ5VHlwZVtTQ0VfQ09OVEVYVFMuUkVTT1VSQ0VfVVJMXSA9IGdlbmVyYXRlSG9sZGVyVHlwZShieVR5cGVbU0NFX0NPTlRFWFRTLlVSTF0pO1xuXG4gICAgLyoqXG4gICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAqIEBuYW1lICRzY2VEZWxlZ2F0ZSN0cnVzdEFzXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGlzIHRydXN0ZWQgYnkgYW5ndWxhciBmb3IgdXNlIGluIHNwZWNpZmllZCBzdHJpY3RcbiAgICAgKiBjb250ZXh0dWFsIGVzY2FwaW5nIGNvbnRleHRzIChzdWNoIGFzIG5nLWJpbmQtaHRtbCwgbmctaW5jbHVkZSwgYW55IHNyY1xuICAgICAqIGF0dHJpYnV0ZSBpbnRlcnBvbGF0aW9uLCBhbnkgZG9tIGV2ZW50IGJpbmRpbmcgYXR0cmlidXRlIGludGVycG9sYXRpb25cbiAgICAgKiBzdWNoIGFzIGZvciBvbmNsaWNrLCAgZXRjLikgdGhhdCB1c2VzIHRoZSBwcm92aWRlZCB2YWx1ZS5cbiAgICAgKiBTZWUge0BsaW5rIG5nLiRzY2UgJHNjZX0gZm9yIGVuYWJsaW5nIHN0cmljdCBjb250ZXh0dWFsIGVzY2FwaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGtpbmQgb2YgY29udGV4dCBpbiB3aGljaCB0aGlzIHZhbHVlIGlzIHNhZmUgZm9yIHVzZS4gIGUuZy4gdXJsLFxuICAgICAqICAgcmVzb3VyY2VVcmwsIGh0bWwsIGpzIGFuZCBjc3MuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdGhhdCB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkIHRydXN0ZWQvc2FmZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gQSB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHN0YW5kIGluIGZvciB0aGUgcHJvdmlkZWQgYHZhbHVlYCBpbiBwbGFjZXNcbiAgICAgKiB3aGVyZSBBbmd1bGFyIGV4cGVjdHMgYSAkc2NlLnRydXN0QXMoKSByZXR1cm4gdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJ1c3RBcyh0eXBlLCB0cnVzdGVkVmFsdWUpIHtcbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IChieVR5cGUuaGFzT3duUHJvcGVydHkodHlwZSkgPyBieVR5cGVbdHlwZV0gOiBudWxsKTtcbiAgICAgIGlmICghQ29uc3RydWN0b3IpIHtcbiAgICAgICAgdGhyb3cgJHNjZU1pbkVycignaWNvbnRleHQnLFxuICAgICAgICAgICAgJ0F0dGVtcHRlZCB0byB0cnVzdCBhIHZhbHVlIGluIGludmFsaWQgY29udGV4dC4gQ29udGV4dDogezB9OyBWYWx1ZTogezF9JyxcbiAgICAgICAgICAgIHR5cGUsIHRydXN0ZWRWYWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAodHJ1c3RlZFZhbHVlID09PSBudWxsIHx8IHRydXN0ZWRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHRydXN0ZWRWYWx1ZSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHRydXN0ZWRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIC8vIEFsbCB0aGUgY3VycmVudCBjb250ZXh0cyBpbiBTQ0VfQ09OVEVYVFMgaGFwcGVuIHRvIGJlIHN0cmluZ3MuICBJbiBvcmRlciB0byBhdm9pZCB0cnVzdGluZ1xuICAgICAgLy8gbXV0YWJsZSBvYmplY3RzLCB3ZSBlbnN1cmUgaGVyZSB0aGF0IHRoZSB2YWx1ZSBwYXNzZWQgaW4gaXMgYWN0dWFsbHkgYSBzdHJpbmcuXG4gICAgICBpZiAodHlwZW9mIHRydXN0ZWRWYWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgJHNjZU1pbkVycignaXR5cGUnLFxuICAgICAgICAgICAgJ0F0dGVtcHRlZCB0byB0cnVzdCBhIG5vbi1zdHJpbmcgdmFsdWUgaW4gYSBjb250ZW50IHJlcXVpcmluZyBhIHN0cmluZzogQ29udGV4dDogezB9JyxcbiAgICAgICAgICAgIHR5cGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0cnVzdGVkVmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgKiBAbmFtZSAkc2NlRGVsZWdhdGUjdmFsdWVPZlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogSWYgdGhlIHBhc3NlZCBwYXJhbWV0ZXIgaGFkIGJlZW4gcmV0dXJuZWQgYnkgYSBwcmlvciBjYWxsIHRvIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjdHJ1c3RBc1xuICAgICAqIGAkc2NlRGVsZWdhdGUudHJ1c3RBc2B9LCByZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IGhhZCBiZWVuIHBhc3NlZCB0byB7QGxpbmtcbiAgICAgKiBuZy4kc2NlRGVsZWdhdGUjdHJ1c3RBcyBgJHNjZURlbGVnYXRlLnRydXN0QXNgfS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBwYXNzZWQgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbHVlIHRoYXQgaGFkIGJlZW4gcmV0dXJuZWQgYnkge0BsaW5rXG4gICAgICogbmcuJHNjZURlbGVnYXRlI3RydXN0QXMgYCRzY2VEZWxlZ2F0ZS50cnVzdEFzYH0sIHJldHVybnMgaXQgYXMtaXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSByZXN1bHQgb2YgYSBwcmlvciB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXMgYCRzY2VEZWxlZ2F0ZS50cnVzdEFzYH1cbiAgICAgKiAgICAgIGNhbGwgb3IgYW55dGhpbmcgZWxzZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIGB2YWx1ZWAgdGhhdCB3YXMgb3JpZ2luYWxseSBwcm92aWRlZCB0byB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXNcbiAgICAgKiAgICAgYCRzY2VEZWxlZ2F0ZS50cnVzdEFzYH0gaWYgYHZhbHVlYCBpcyB0aGUgcmVzdWx0IG9mIHN1Y2ggYSBjYWxsLiAgT3RoZXJ3aXNlLCByZXR1cm5zXG4gICAgICogICAgIGB2YWx1ZWAgdW5jaGFuZ2VkLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHZhbHVlT2YobWF5YmVUcnVzdGVkKSB7XG4gICAgICBpZiAobWF5YmVUcnVzdGVkIGluc3RhbmNlb2YgdHJ1c3RlZFZhbHVlSG9sZGVyQmFzZSkge1xuICAgICAgICByZXR1cm4gbWF5YmVUcnVzdGVkLiQkdW53cmFwVHJ1c3RlZFZhbHVlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWF5YmVUcnVzdGVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgKiBAbmFtZSAkc2NlRGVsZWdhdGUjZ2V0VHJ1c3RlZFxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogVGFrZXMgdGhlIHJlc3VsdCBvZiBhIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjdHJ1c3RBcyBgJHNjZURlbGVnYXRlLnRydXN0QXNgfSBjYWxsIGFuZFxuICAgICAqIHJldHVybnMgdGhlIG9yaWdpbmFsbHkgc3VwcGxpZWQgdmFsdWUgaWYgdGhlIHF1ZXJpZWQgY29udGV4dCB0eXBlIGlzIGEgc3VwZXJ0eXBlIG9mIHRoZVxuICAgICAqIGNyZWF0ZWQgdHlwZS4gIElmIHRoaXMgY29uZGl0aW9uIGlzbid0IHNhdGlzZmllZCwgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBraW5kIG9mIGNvbnRleHQgaW4gd2hpY2ggdGhpcyB2YWx1ZSBpcyB0byBiZSB1c2VkLlxuICAgICAqIEBwYXJhbSB7Kn0gbWF5YmVUcnVzdGVkIFRoZSByZXN1bHQgb2YgYSBwcmlvciB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXNcbiAgICAgKiAgICAgYCRzY2VEZWxlZ2F0ZS50cnVzdEFzYH0gY2FsbC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoZSB3YXMgb3JpZ2luYWxseSBwcm92aWRlZCB0byB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXNcbiAgICAgKiAgICAgYCRzY2VEZWxlZ2F0ZS50cnVzdEFzYH0gaWYgdmFsaWQgaW4gdGhpcyBjb250ZXh0LiAgT3RoZXJ3aXNlLCB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFRydXN0ZWQodHlwZSwgbWF5YmVUcnVzdGVkKSB7XG4gICAgICBpZiAobWF5YmVUcnVzdGVkID09PSBudWxsIHx8IG1heWJlVHJ1c3RlZCA9PT0gdW5kZWZpbmVkIHx8IG1heWJlVHJ1c3RlZCA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIG1heWJlVHJ1c3RlZDtcbiAgICAgIH1cbiAgICAgIHZhciBjb25zdHJ1Y3RvciA9IChieVR5cGUuaGFzT3duUHJvcGVydHkodHlwZSkgPyBieVR5cGVbdHlwZV0gOiBudWxsKTtcbiAgICAgIGlmIChjb25zdHJ1Y3RvciAmJiBtYXliZVRydXN0ZWQgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgICAgICByZXR1cm4gbWF5YmVUcnVzdGVkLiQkdW53cmFwVHJ1c3RlZFZhbHVlKCk7XG4gICAgICB9XG4gICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlbiB3ZSBtYXkgb25seSB0YWtlIG9uZSBvZiB0d28gYWN0aW9ucy5cbiAgICAgIC8vIDEuIHNhbml0aXplIHRoZSB2YWx1ZSBmb3IgdGhlIHJlcXVlc3RlZCB0eXBlLCBvclxuICAgICAgLy8gMi4gdGhyb3cgYW4gZXhjZXB0aW9uLlxuICAgICAgaWYgKHR5cGUgPT09IFNDRV9DT05URVhUUy5SRVNPVVJDRV9VUkwpIHtcbiAgICAgICAgaWYgKGlzUmVzb3VyY2VVcmxBbGxvd2VkQnlQb2xpY3kobWF5YmVUcnVzdGVkKSkge1xuICAgICAgICAgIHJldHVybiBtYXliZVRydXN0ZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgJHNjZU1pbkVycignaW5zZWN1cmwnLFxuICAgICAgICAgICAgICAnQmxvY2tlZCBsb2FkaW5nIHJlc291cmNlIGZyb20gdXJsIG5vdCBhbGxvd2VkIGJ5ICRzY2VEZWxlZ2F0ZSBwb2xpY3kuICBVUkw6IHswfScsXG4gICAgICAgICAgICAgIG1heWJlVHJ1c3RlZC50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBTQ0VfQ09OVEVYVFMuSFRNTCkge1xuICAgICAgICByZXR1cm4gaHRtbFNhbml0aXplcihtYXliZVRydXN0ZWQpO1xuICAgICAgfVxuICAgICAgdGhyb3cgJHNjZU1pbkVycigndW5zYWZlJywgJ0F0dGVtcHRpbmcgdG8gdXNlIGFuIHVuc2FmZSB2YWx1ZSBpbiBhIHNhZmUgY29udGV4dC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB0cnVzdEFzOiB0cnVzdEFzLFxuICAgICAgICAgICAgIGdldFRydXN0ZWQ6IGdldFRydXN0ZWQsXG4gICAgICAgICAgICAgdmFsdWVPZjogdmFsdWVPZiB9O1xuICB9XTtcbn1cblxuXG4vKipcbiAqIEBuZ2RvYyBwcm92aWRlclxuICogQG5hbWUgJHNjZVByb3ZpZGVyXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBUaGUgJHNjZVByb3ZpZGVyIHByb3ZpZGVyIGFsbG93cyBkZXZlbG9wZXJzIHRvIGNvbmZpZ3VyZSB0aGUge0BsaW5rIG5nLiRzY2UgJHNjZX0gc2VydmljZS5cbiAqIC0gICBlbmFibGUvZGlzYWJsZSBTdHJpY3QgQ29udGV4dHVhbCBFc2NhcGluZyAoU0NFKSBpbiBhIG1vZHVsZVxuICogLSAgIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpdGggYSBjdXN0b20gZGVsZWdhdGVcbiAqXG4gKiBSZWFkIG1vcmUgYWJvdXQge0BsaW5rIG5nLiRzY2UgU3RyaWN0IENvbnRleHR1YWwgRXNjYXBpbmcgKFNDRSl9LlxuICovXG5cbi8qIGpzaGludCBtYXhsZW46IGZhbHNlKi9cblxuLyoqXG4gKiBAbmdkb2Mgc2VydmljZVxuICogQG5hbWUgJHNjZVxuICogQGtpbmQgZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBgJHNjZWAgaXMgYSBzZXJ2aWNlIHRoYXQgcHJvdmlkZXMgU3RyaWN0IENvbnRleHR1YWwgRXNjYXBpbmcgc2VydmljZXMgdG8gQW5ndWxhckpTLlxuICpcbiAqICMgU3RyaWN0IENvbnRleHR1YWwgRXNjYXBpbmdcbiAqXG4gKiBTdHJpY3QgQ29udGV4dHVhbCBFc2NhcGluZyAoU0NFKSBpcyBhIG1vZGUgaW4gd2hpY2ggQW5ndWxhckpTIHJlcXVpcmVzIGJpbmRpbmdzIGluIGNlcnRhaW5cbiAqIGNvbnRleHRzIHRvIHJlc3VsdCBpbiBhIHZhbHVlIHRoYXQgaXMgbWFya2VkIGFzIHNhZmUgdG8gdXNlIGZvciB0aGF0IGNvbnRleHQuICBPbmUgZXhhbXBsZSBvZlxuICogc3VjaCBhIGNvbnRleHQgaXMgYmluZGluZyBhcmJpdHJhcnkgaHRtbCBjb250cm9sbGVkIGJ5IHRoZSB1c2VyIHZpYSBgbmctYmluZC1odG1sYC4gIFdlIHJlZmVyXG4gKiB0byB0aGVzZSBjb250ZXh0cyBhcyBwcml2aWxlZ2VkIG9yIFNDRSBjb250ZXh0cy5cbiAqXG4gKiBBcyBvZiB2ZXJzaW9uIDEuMiwgQW5ndWxhciBzaGlwcyB3aXRoIFNDRSBlbmFibGVkIGJ5IGRlZmF1bHQuXG4gKlxuICogTm90ZTogIFdoZW4gZW5hYmxlZCAodGhlIGRlZmF1bHQpLCBJRTwxMSBpbiBxdWlya3MgbW9kZSBpcyBub3Qgc3VwcG9ydGVkLiAgSW4gdGhpcyBtb2RlLCBJRTwxMSBhbGxvd1xuICogb25lIHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGphdmFzY3JpcHQgYnkgdGhlIHVzZSBvZiB0aGUgZXhwcmVzc2lvbigpIHN5bnRheC4gIFJlZmVyXG4gKiA8aHR0cDovL2Jsb2dzLm1zZG4uY29tL2IvaWUvYXJjaGl2ZS8yMDA4LzEwLzE2L2VuZGluZy1leHByZXNzaW9ucy5hc3B4PiB0byBsZWFybiBtb3JlIGFib3V0IHRoZW0uXG4gKiBZb3UgY2FuIGVuc3VyZSB5b3VyIGRvY3VtZW50IGlzIGluIHN0YW5kYXJkcyBtb2RlIGFuZCBub3QgcXVpcmtzIG1vZGUgYnkgYWRkaW5nIGA8IWRvY3R5cGUgaHRtbD5gXG4gKiB0byB0aGUgdG9wIG9mIHlvdXIgSFRNTCBkb2N1bWVudC5cbiAqXG4gKiBTQ0UgYXNzaXN0cyBpbiB3cml0aW5nIGNvZGUgaW4gd2F5IHRoYXQgKGEpIGlzIHNlY3VyZSBieSBkZWZhdWx0IGFuZCAoYikgbWFrZXMgYXVkaXRpbmcgZm9yXG4gKiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgc3VjaCBhcyBYU1MsIGNsaWNramFja2luZywgZXRjLiBhIGxvdCBlYXNpZXIuXG4gKlxuICogSGVyZSdzIGFuIGV4YW1wbGUgb2YgYSBiaW5kaW5nIGluIGEgcHJpdmlsZWdlZCBjb250ZXh0OlxuICpcbiAqIGBgYFxuICogPGlucHV0IG5nLW1vZGVsPVwidXNlckh0bWxcIj5cbiAqIDxkaXYgbmctYmluZC1odG1sPVwidXNlckh0bWxcIj48L2Rpdj5cbiAqIGBgYFxuICpcbiAqIE5vdGljZSB0aGF0IGBuZy1iaW5kLWh0bWxgIGlzIGJvdW5kIHRvIGB1c2VySHRtbGAgY29udHJvbGxlZCBieSB0aGUgdXNlci4gIFdpdGggU0NFXG4gKiBkaXNhYmxlZCwgdGhpcyBhcHBsaWNhdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gcmVuZGVyIGFyYml0cmFyeSBIVE1MIGludG8gdGhlIERJVi5cbiAqIEluIGEgbW9yZSByZWFsaXN0aWMgZXhhbXBsZSwgb25lIG1heSBiZSByZW5kZXJpbmcgdXNlciBjb21tZW50cywgYmxvZyBhcnRpY2xlcywgZXRjLiB2aWFcbiAqIGJpbmRpbmdzLiAgKEhUTUwgaXMganVzdCBvbmUgZXhhbXBsZSBvZiBhIGNvbnRleHQgd2hlcmUgcmVuZGVyaW5nIHVzZXIgY29udHJvbGxlZCBpbnB1dCBjcmVhdGVzXG4gKiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuKVxuICpcbiAqIEZvciB0aGUgY2FzZSBvZiBIVE1MLCB5b3UgbWlnaHQgdXNlIGEgbGlicmFyeSwgZWl0aGVyIG9uIHRoZSBjbGllbnQgc2lkZSwgb3Igb24gdGhlIHNlcnZlciBzaWRlLFxuICogdG8gc2FuaXRpemUgdW5zYWZlIEhUTUwgYmVmb3JlIGJpbmRpbmcgdG8gdGhlIHZhbHVlIGFuZCByZW5kZXJpbmcgaXQgaW4gdGhlIGRvY3VtZW50LlxuICpcbiAqIEhvdyB3b3VsZCB5b3UgZW5zdXJlIHRoYXQgZXZlcnkgcGxhY2UgdGhhdCB1c2VkIHRoZXNlIHR5cGVzIG9mIGJpbmRpbmdzIHdhcyBib3VuZCB0byBhIHZhbHVlIHRoYXRcbiAqIHdhcyBzYW5pdGl6ZWQgYnkgeW91ciBsaWJyYXJ5IChvciByZXR1cm5lZCBhcyBzYWZlIGZvciByZW5kZXJpbmcgYnkgeW91ciBzZXJ2ZXI/KSAgSG93IGNhbiB5b3VcbiAqIGVuc3VyZSB0aGF0IHlvdSBkaWRuJ3QgYWNjaWRlbnRhbGx5IGRlbGV0ZSB0aGUgbGluZSB0aGF0IHNhbml0aXplZCB0aGUgdmFsdWUsIG9yIHJlbmFtZWQgc29tZVxuICogcHJvcGVydGllcy9maWVsZHMgYW5kIGZvcmdvdCB0byB1cGRhdGUgdGhlIGJpbmRpbmcgdG8gdGhlIHNhbml0aXplZCB2YWx1ZT9cbiAqXG4gKiBUbyBiZSBzZWN1cmUgYnkgZGVmYXVsdCwgeW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgYW55IHN1Y2ggYmluZGluZ3MgYXJlIGRpc2FsbG93ZWQgdW5sZXNzIHlvdSBjYW5cbiAqIGRldGVybWluZSB0aGF0IHNvbWV0aGluZyBleHBsaWNpdGx5IHNheXMgaXQncyBzYWZlIHRvIHVzZSBhIHZhbHVlIGZvciBiaW5kaW5nIGluIHRoYXRcbiAqIGNvbnRleHQuICBZb3UgY2FuIHRoZW4gYXVkaXQgeW91ciBjb2RlIChhIHNpbXBsZSBncmVwIHdvdWxkIGRvKSB0byBlbnN1cmUgdGhhdCB0aGlzIGlzIG9ubHkgZG9uZVxuICogZm9yIHRob3NlIHZhbHVlcyB0aGF0IHlvdSBjYW4gZWFzaWx5IHRlbGwgYXJlIHNhZmUgLSBiZWNhdXNlIHRoZXkgd2VyZSByZWNlaXZlZCBmcm9tIHlvdXIgc2VydmVyLFxuICogc2FuaXRpemVkIGJ5IHlvdXIgbGlicmFyeSwgZXRjLiAgWW91IGNhbiBvcmdhbml6ZSB5b3VyIGNvZGViYXNlIHRvIGhlbHAgd2l0aCB0aGlzIC0gcGVyaGFwc1xuICogYWxsb3dpbmcgb25seSB0aGUgZmlsZXMgaW4gYSBzcGVjaWZpYyBkaXJlY3RvcnkgdG8gZG8gdGhpcy4gIEVuc3VyaW5nIHRoYXQgdGhlIGludGVybmFsIEFQSVxuICogZXhwb3NlZCBieSB0aGF0IGNvZGUgZG9lc24ndCBtYXJrdXAgYXJiaXRyYXJ5IHZhbHVlcyBhcyBzYWZlIHRoZW4gYmVjb21lcyBhIG1vcmUgbWFuYWdlYWJsZSB0YXNrLlxuICpcbiAqIEluIHRoZSBjYXNlIG9mIEFuZ3VsYXJKUycgU0NFIHNlcnZpY2UsIG9uZSB1c2VzIHtAbGluayBuZy4kc2NlI3RydXN0QXMgJHNjZS50cnVzdEFzfVxuICogKGFuZCBzaG9ydGhhbmQgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBuZy4kc2NlI3RydXN0QXNIdG1sICRzY2UudHJ1c3RBc0h0bWx9LCBldGMuKSB0b1xuICogb2J0YWluIHZhbHVlcyB0aGF0IHdpbGwgYmUgYWNjZXB0ZWQgYnkgU0NFIC8gcHJpdmlsZWdlZCBjb250ZXh0cy5cbiAqXG4gKlxuICogIyMgSG93IGRvZXMgaXQgd29yaz9cbiAqXG4gKiBJbiBwcml2aWxlZ2VkIGNvbnRleHRzLCBkaXJlY3RpdmVzIGFuZCBjb2RlIHdpbGwgYmluZCB0byB0aGUgcmVzdWx0IG9mIHtAbGluayBuZy4kc2NlI2dldFRydXN0ZWRcbiAqICRzY2UuZ2V0VHJ1c3RlZChjb250ZXh0LCB2YWx1ZSl9IHJhdGhlciB0aGFuIHRvIHRoZSB2YWx1ZSBkaXJlY3RseS4gIERpcmVjdGl2ZXMgdXNlIHtAbGlua1xuICogbmcuJHNjZSNwYXJzZUFzICRzY2UucGFyc2VBc30gcmF0aGVyIHRoYW4gYCRwYXJzZWAgdG8gd2F0Y2ggYXR0cmlidXRlIGJpbmRpbmdzLCB3aGljaCBwZXJmb3JtcyB0aGVcbiAqIHtAbGluayBuZy4kc2NlI2dldFRydXN0ZWQgJHNjZS5nZXRUcnVzdGVkfSBiZWhpbmQgdGhlIHNjZW5lcyBvbiBub24tY29uc3RhbnQgbGl0ZXJhbHMuXG4gKlxuICogQXMgYW4gZXhhbXBsZSwge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0JpbmRIdG1sIG5nQmluZEh0bWx9IHVzZXMge0BsaW5rXG4gKiBuZy4kc2NlI3BhcnNlQXNIdG1sICRzY2UucGFyc2VBc0h0bWwoYmluZGluZyBleHByZXNzaW9uKX0uICBIZXJlJ3MgdGhlIGFjdHVhbCBjb2RlIChzbGlnaHRseVxuICogc2ltcGxpZmllZCk6XG4gKlxuICogYGBgXG4gKiB2YXIgbmdCaW5kSHRtbERpcmVjdGl2ZSA9IFsnJHNjZScsIGZ1bmN0aW9uKCRzY2UpIHtcbiAqICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7XG4gKiAgICAgc2NvcGUuJHdhdGNoKCRzY2UucGFyc2VBc0h0bWwoYXR0ci5uZ0JpbmRIdG1sKSwgZnVuY3Rpb24odmFsdWUpIHtcbiAqICAgICAgIGVsZW1lbnQuaHRtbCh2YWx1ZSB8fCAnJyk7XG4gKiAgICAgfSk7XG4gKiAgIH07XG4gKiB9XTtcbiAqIGBgYFxuICpcbiAqICMjIEltcGFjdCBvbiBsb2FkaW5nIHRlbXBsYXRlc1xuICpcbiAqIFRoaXMgYXBwbGllcyBib3RoIHRvIHRoZSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nSW5jbHVkZSBgbmctaW5jbHVkZWB9IGRpcmVjdGl2ZSBhcyB3ZWxsIGFzXG4gKiBgdGVtcGxhdGVVcmxgJ3Mgc3BlY2lmaWVkIGJ5IHtAbGluayBndWlkZS9kaXJlY3RpdmUgZGlyZWN0aXZlc30uXG4gKlxuICogQnkgZGVmYXVsdCwgQW5ndWxhciBvbmx5IGxvYWRzIHRlbXBsYXRlcyBmcm9tIHRoZSBzYW1lIGRvbWFpbiBhbmQgcHJvdG9jb2wgYXMgdGhlIGFwcGxpY2F0aW9uXG4gKiBkb2N1bWVudC4gIFRoaXMgaXMgZG9uZSBieSBjYWxsaW5nIHtAbGluayBuZy4kc2NlI2dldFRydXN0ZWRSZXNvdXJjZVVybFxuICogJHNjZS5nZXRUcnVzdGVkUmVzb3VyY2VVcmx9IG9uIHRoZSB0ZW1wbGF0ZSBVUkwuICBUbyBsb2FkIHRlbXBsYXRlcyBmcm9tIG90aGVyIGRvbWFpbnMgYW5kL29yXG4gKiBwcm90b2NvbHMsIHlvdSBtYXkgZWl0aGVyIGVpdGhlciB7QGxpbmsgbmcuJHNjZURlbGVnYXRlUHJvdmlkZXIjcmVzb3VyY2VVcmxXaGl0ZWxpc3Qgd2hpdGVsaXN0XG4gKiB0aGVtfSBvciB7QGxpbmsgbmcuJHNjZSN0cnVzdEFzUmVzb3VyY2VVcmwgd3JhcCBpdH0gaW50byBhIHRydXN0ZWQgdmFsdWUuXG4gKlxuICogKlBsZWFzZSBub3RlKjpcbiAqIFRoZSBicm93c2VyJ3NcbiAqIFtTYW1lIE9yaWdpbiBQb2xpY3ldKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvYnJvd3NlcnNlYy93aWtpL1BhcnQyI1NhbWUtb3JpZ2luX3BvbGljeV9mb3JfWE1MSHR0cFJlcXVlc3QpXG4gKiBhbmQgW0Nyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nIChDT1JTKV0oaHR0cDovL3d3dy53My5vcmcvVFIvY29ycy8pXG4gKiBwb2xpY3kgYXBwbHkgaW4gYWRkaXRpb24gdG8gdGhpcyBhbmQgbWF5IGZ1cnRoZXIgcmVzdHJpY3Qgd2hldGhlciB0aGUgdGVtcGxhdGUgaXMgc3VjY2Vzc2Z1bGx5XG4gKiBsb2FkZWQuICBUaGlzIG1lYW5zIHRoYXQgd2l0aG91dCB0aGUgcmlnaHQgQ09SUyBwb2xpY3ksIGxvYWRpbmcgdGVtcGxhdGVzIGZyb20gYSBkaWZmZXJlbnQgZG9tYWluXG4gKiB3b24ndCB3b3JrIG9uIGFsbCBicm93c2Vycy4gIEFsc28sIGxvYWRpbmcgdGVtcGxhdGVzIGZyb20gYGZpbGU6Ly9gIFVSTCBkb2VzIG5vdCB3b3JrIG9uIHNvbWVcbiAqIGJyb3dzZXJzLlxuICpcbiAqICMjIFRoaXMgZmVlbHMgbGlrZSB0b28gbXVjaCBvdmVyaGVhZFxuICpcbiAqIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgU0NFIG9ubHkgYXBwbGllcyB0byBpbnRlcnBvbGF0aW9uIGV4cHJlc3Npb25zLlxuICpcbiAqIElmIHlvdXIgZXhwcmVzc2lvbnMgYXJlIGNvbnN0YW50IGxpdGVyYWxzLCB0aGV5J3JlIGF1dG9tYXRpY2FsbHkgdHJ1c3RlZCBhbmQgeW91IGRvbid0IG5lZWQgdG9cbiAqIGNhbGwgYCRzY2UudHJ1c3RBc2Agb24gdGhlbSAocmVtZW1iZXIgdG8gaW5jbHVkZSB0aGUgYG5nU2FuaXRpemVgIG1vZHVsZSkgKGUuZy5cbiAqIGA8ZGl2IG5nLWJpbmQtaHRtbD1cIic8Yj5pbXBsaWNpdGx5IHRydXN0ZWQ8L2I+J1wiPjwvZGl2PmApIGp1c3Qgd29ya3MuXG4gKlxuICogQWRkaXRpb25hbGx5LCBgYVtocmVmXWAgYW5kIGBpbWdbc3JjXWAgYXV0b21hdGljYWxseSBzYW5pdGl6ZSB0aGVpciBVUkxzIGFuZCBkbyBub3QgcGFzcyB0aGVtXG4gKiB0aHJvdWdoIHtAbGluayBuZy4kc2NlI2dldFRydXN0ZWQgJHNjZS5nZXRUcnVzdGVkfS4gIFNDRSBkb2Vzbid0IHBsYXkgYSByb2xlIGhlcmUuXG4gKlxuICogVGhlIGluY2x1ZGVkIHtAbGluayBuZy4kc2NlRGVsZWdhdGUgJHNjZURlbGVnYXRlfSBjb21lcyB3aXRoIHNhbmUgZGVmYXVsdHMgdG8gYWxsb3cgeW91IHRvIGxvYWRcbiAqIHRlbXBsYXRlcyBpbiBgbmctaW5jbHVkZWAgZnJvbSB5b3VyIGFwcGxpY2F0aW9uJ3MgZG9tYWluIHdpdGhvdXQgaGF2aW5nIHRvIGV2ZW4ga25vdyBhYm91dCBTQ0UuXG4gKiBJdCBibG9ja3MgbG9hZGluZyB0ZW1wbGF0ZXMgZnJvbSBvdGhlciBkb21haW5zIG9yIGxvYWRpbmcgdGVtcGxhdGVzIG92ZXIgaHR0cCBmcm9tIGFuIGh0dHBzXG4gKiBzZXJ2ZWQgZG9jdW1lbnQuICBZb3UgY2FuIGNoYW5nZSB0aGVzZSBieSBzZXR0aW5nIHlvdXIgb3duIGN1c3RvbSB7QGxpbmtcbiAqIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyI3Jlc291cmNlVXJsV2hpdGVsaXN0IHdoaXRlbGlzdHN9IGFuZCB7QGxpbmtcbiAqIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyI3Jlc291cmNlVXJsQmxhY2tsaXN0IGJsYWNrbGlzdHN9IGZvciBtYXRjaGluZyBzdWNoIFVSTHMuXG4gKlxuICogVGhpcyBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIG92ZXJoZWFkLiAgSXQgaXMgZmFyIGVhc2llciB0byBwYXkgdGhlIHNtYWxsIG92ZXJoZWFkIGFuZCBoYXZlIGFuXG4gKiBhcHBsaWNhdGlvbiB0aGF0J3Mgc2VjdXJlIGFuZCBjYW4gYmUgYXVkaXRlZCB0byB2ZXJpZnkgdGhhdCB3aXRoIG11Y2ggbW9yZSBlYXNlIHRoYW4gYm9sdGluZ1xuICogc2VjdXJpdHkgb250byBhbiBhcHBsaWNhdGlvbiBsYXRlci5cbiAqXG4gKiA8YSBuYW1lPVwiY29udGV4dHNcIj48L2E+XG4gKiAjIyBXaGF0IHRydXN0ZWQgY29udGV4dCB0eXBlcyBhcmUgc3VwcG9ydGVkP1xuICpcbiAqIHwgQ29udGV4dCAgICAgICAgICAgICB8IE5vdGVzICAgICAgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgYCRzY2UuSFRNTGAgICAgICAgICB8IEZvciBIVE1MIHRoYXQncyBzYWZlIHRvIHNvdXJjZSBpbnRvIHRoZSBhcHBsaWNhdGlvbi4gIFRoZSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQmluZEh0bWwgbmdCaW5kSHRtbH0gZGlyZWN0aXZlIHVzZXMgdGhpcyBjb250ZXh0IGZvciBiaW5kaW5ncy4gSWYgYW4gdW5zYWZlIHZhbHVlIGlzIGVuY291bnRlcmVkIGFuZCB0aGUge0BsaW5rIG5nU2FuaXRpemUgJHNhbml0aXplfSBtb2R1bGUgaXMgcHJlc2VudCB0aGlzIHdpbGwgc2FuaXRpemUgdGhlIHZhbHVlIGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IuIHxcbiAqIHwgYCRzY2UuQ1NTYCAgICAgICAgICB8IEZvciBDU1MgdGhhdCdzIHNhZmUgdG8gc291cmNlIGludG8gdGhlIGFwcGxpY2F0aW9uLiAgQ3VycmVudGx5IHVudXNlZC4gIEZlZWwgZnJlZSB0byB1c2UgaXQgaW4geW91ciBvd24gZGlyZWN0aXZlcy4gfFxuICogfCBgJHNjZS5VUkxgICAgICAgICAgIHwgRm9yIFVSTHMgdGhhdCBhcmUgc2FmZSB0byBmb2xsb3cgYXMgbGlua3MuICBDdXJyZW50bHkgdW51c2VkIChgPGEgaHJlZj1gIGFuZCBgPGltZyBzcmM9YCBzYW5pdGl6ZSB0aGVpciB1cmxzIGFuZCBkb24ndCBjb25zdGl0dXRlIGFuIFNDRSBjb250ZXh0LiB8XG4gKiB8IGAkc2NlLlJFU09VUkNFX1VSTGAgfCBGb3IgVVJMcyB0aGF0IGFyZSBub3Qgb25seSBzYWZlIHRvIGZvbGxvdyBhcyBsaW5rcywgYnV0IHdob3NlIGNvbnRlbnRzIGFyZSBhbHNvIHNhZmUgdG8gaW5jbHVkZSBpbiB5b3VyIGFwcGxpY2F0aW9uLiAgRXhhbXBsZXMgaW5jbHVkZSBgbmctaW5jbHVkZWAsIGBzcmNgIC8gYG5nU3JjYCBiaW5kaW5ncyBmb3IgdGFncyBvdGhlciB0aGFuIGBJTUdgIChlLmcuIGBJRlJBTUVgLCBgT0JKRUNUYCwgZXRjLikgIDxicj48YnI+Tm90ZSB0aGF0IGAkc2NlLlJFU09VUkNFX1VSTGAgbWFrZXMgYSBzdHJvbmdlciBzdGF0ZW1lbnQgYWJvdXQgdGhlIFVSTCB0aGFuIGAkc2NlLlVSTGAgZG9lcyBhbmQgdGhlcmVmb3JlIGNvbnRleHRzIHJlcXVpcmluZyB2YWx1ZXMgdHJ1c3RlZCBmb3IgYCRzY2UuUkVTT1VSQ0VfVVJMYCBjYW4gYmUgdXNlZCBhbnl3aGVyZSB0aGF0IHZhbHVlcyB0cnVzdGVkIGZvciBgJHNjZS5VUkxgIGFyZSByZXF1aXJlZC4gfFxuICogfCBgJHNjZS5KU2AgICAgICAgICAgIHwgRm9yIEphdmFTY3JpcHQgdGhhdCBpcyBzYWZlIHRvIGV4ZWN1dGUgaW4geW91ciBhcHBsaWNhdGlvbidzIGNvbnRleHQuICBDdXJyZW50bHkgdW51c2VkLiAgRmVlbCBmcmVlIHRvIHVzZSBpdCBpbiB5b3VyIG93biBkaXJlY3RpdmVzLiB8XG4gKlxuICogIyMgRm9ybWF0IG9mIGl0ZW1zIGluIHtAbGluayBuZy4kc2NlRGVsZWdhdGVQcm92aWRlciNyZXNvdXJjZVVybFdoaXRlbGlzdCByZXNvdXJjZVVybFdoaXRlbGlzdH0ve0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyI3Jlc291cmNlVXJsQmxhY2tsaXN0IEJsYWNrbGlzdH0gPGEgbmFtZT1cInJlc291cmNlVXJsUGF0dGVybkl0ZW1cIj48L2E+XG4gKlxuICogIEVhY2ggZWxlbWVudCBpbiB0aGVzZSBhcnJheXMgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAgLSAqKidzZWxmJyoqXG4gKiAgICAtIFRoZSBzcGVjaWFsICoqc3RyaW5nKiosIGAnc2VsZidgLCBjYW4gYmUgdXNlZCB0byBtYXRjaCBhZ2FpbnN0IGFsbCBVUkxzIG9mIHRoZSAqKnNhbWVcbiAqICAgICAgZG9tYWluKiogYXMgdGhlIGFwcGxpY2F0aW9uIGRvY3VtZW50IHVzaW5nIHRoZSAqKnNhbWUgcHJvdG9jb2wqKi5cbiAqICAtICoqU3RyaW5nKiogKGV4Y2VwdCB0aGUgc3BlY2lhbCB2YWx1ZSBgJ3NlbGYnYClcbiAqICAgIC0gVGhlIHN0cmluZyBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIGZ1bGwgKm5vcm1hbGl6ZWQgLyBhYnNvbHV0ZSBVUkwqIG9mIHRoZSByZXNvdXJjZVxuICogICAgICBiZWluZyB0ZXN0ZWQgKHN1YnN0cmluZyBtYXRjaGVzIGFyZSBub3QgZ29vZCBlbm91Z2guKVxuICogICAgLSBUaGVyZSBhcmUgZXhhY3RseSAqKnR3byB3aWxkY2FyZCBzZXF1ZW5jZXMqKiAtIGAqYCBhbmQgYCoqYC4gIEFsbCBvdGhlciBjaGFyYWN0ZXJzXG4gKiAgICAgIG1hdGNoIHRoZW1zZWx2ZXMuXG4gKiAgICAtIGAqYDogbWF0Y2hlcyB6ZXJvIG9yIG1vcmUgb2NjdXJyZW5jZXMgb2YgYW55IGNoYXJhY3RlciBvdGhlciB0aGFuIG9uZSBvZiB0aGUgZm9sbG93aW5nIDZcbiAqICAgICAgY2hhcmFjdGVyczogJ2A6YCcsICdgL2AnLCAnYC5gJywgJ2A/YCcsICdgJmAnIGFuZCAnOycuICBJdCdzIGEgdXNlZnVsIHdpbGRjYXJkIGZvciB1c2VcbiAqICAgICAgaW4gYSB3aGl0ZWxpc3QuXG4gKiAgICAtIGAqKmA6IG1hdGNoZXMgemVybyBvciBtb3JlIG9jY3VycmVuY2VzIG9mICphbnkqIGNoYXJhY3Rlci4gIEFzIHN1Y2gsIGl0J3Mgbm90XG4gKiAgICAgIG5vdCBhcHByb3ByaWF0ZSB0byB1c2UgaW4gZm9yIGEgc2NoZW1lLCBkb21haW4sIGV0Yy4gYXMgaXQgd291bGQgbWF0Y2ggdG9vIG11Y2guICAoZS5nLlxuICogICAgICBodHRwOi8vKiouZXhhbXBsZS5jb20vIHdvdWxkIG1hdGNoIGh0dHA6Ly9ldmlsLmNvbS8/aWdub3JlPS5leGFtcGxlLmNvbS8gYW5kIHRoYXQgbWlnaHRcbiAqICAgICAgbm90IGhhdmUgYmVlbiB0aGUgaW50ZW50aW9uLikgIEl0cyB1c2FnZSBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIHBhdGggaXMgb2suICAoZS5nLlxuICogICAgICBodHRwOi8vZm9vLmV4YW1wbGUuY29tL3RlbXBsYXRlcy8qKikuXG4gKiAgLSAqKlJlZ0V4cCoqICgqc2VlIGNhdmVhdCBiZWxvdyopXG4gKiAgICAtICpDYXZlYXQqOiAgV2hpbGUgcmVndWxhciBleHByZXNzaW9ucyBhcmUgcG93ZXJmdWwgYW5kIG9mZmVyIGdyZWF0IGZsZXhpYmlsaXR5LCAgdGhlaXIgc3ludGF4XG4gKiAgICAgIChhbmQgYWxsIHRoZSBpbmV2aXRhYmxlIGVzY2FwaW5nKSBtYWtlcyB0aGVtICpoYXJkZXIgdG8gbWFpbnRhaW4qLiAgSXQncyBlYXN5IHRvXG4gKiAgICAgIGFjY2lkZW50YWxseSBpbnRyb2R1Y2UgYSBidWcgd2hlbiBvbmUgdXBkYXRlcyBhIGNvbXBsZXggZXhwcmVzc2lvbiAoaW1obywgYWxsIHJlZ2V4ZXMgc2hvdWxkXG4gKiAgICAgIGhhdmUgZ29vZCB0ZXN0IGNvdmVyYWdlLikuICBGb3IgaW5zdGFuY2UsIHRoZSB1c2Ugb2YgYC5gIGluIHRoZSByZWdleCBpcyBjb3JyZWN0IG9ubHkgaW4gYVxuICogICAgICBzbWFsbCBudW1iZXIgb2YgY2FzZXMuICBBIGAuYCBjaGFyYWN0ZXIgaW4gdGhlIHJlZ2V4IHVzZWQgd2hlbiBtYXRjaGluZyB0aGUgc2NoZW1lIG9yIGFcbiAqICAgICAgc3ViZG9tYWluIGNvdWxkIGJlIG1hdGNoZWQgYWdhaW5zdCBhIGA6YCBvciBsaXRlcmFsIGAuYCB0aGF0IHdhcyBsaWtlbHkgbm90IGludGVuZGVkLiAgIEl0XG4gKiAgICAgIGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byB1c2UgdGhlIHN0cmluZyBwYXR0ZXJucyBhbmQgb25seSBmYWxsIGJhY2sgdG8gcmVndWxhciBleHByZXNzaW9uc1xuICogICAgICBpZiB0aGV5IGFzIGEgbGFzdCByZXNvcnQuXG4gKiAgICAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBSZWdFeHAgKGkuZS4gbm90IGEgc3RyaW5nLikgIEl0IGlzXG4gKiAgICAgIG1hdGNoZWQgYWdhaW5zdCB0aGUgKiplbnRpcmUqKiAqbm9ybWFsaXplZCAvIGFic29sdXRlIFVSTCogb2YgdGhlIHJlc291cmNlIGJlaW5nIHRlc3RlZFxuICogICAgICAoZXZlbiB3aGVuIHRoZSBSZWdFeHAgZGlkIG5vdCBoYXZlIHRoZSBgXmAgYW5kIGAkYCBjb2Rlcy4pICBJbiBhZGRpdGlvbiwgYW55IGZsYWdzXG4gKiAgICAgIHByZXNlbnQgb24gdGhlIFJlZ0V4cCAoc3VjaCBhcyBtdWx0aWxpbmUsIGdsb2JhbCwgaWdub3JlQ2FzZSkgYXJlIGlnbm9yZWQuXG4gKiAgICAtIElmIHlvdSBhcmUgZ2VuZXJhdGluZyB5b3VyIEphdmFTY3JpcHQgZnJvbSBzb21lIG90aGVyIHRlbXBsYXRpbmcgZW5naW5lIChub3RcbiAqICAgICAgcmVjb21tZW5kZWQsIGUuZy4gaW4gaXNzdWUgWyM0MDA2XShodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL2lzc3Vlcy80MDA2KSksXG4gKiAgICAgIHJlbWVtYmVyIHRvIGVzY2FwZSB5b3VyIHJlZ3VsYXIgZXhwcmVzc2lvbiAoYW5kIGJlIGF3YXJlIHRoYXQgeW91IG1pZ2h0IG5lZWQgbW9yZSB0aGFuXG4gKiAgICAgIG9uZSBsZXZlbCBvZiBlc2NhcGluZyBkZXBlbmRpbmcgb24geW91ciB0ZW1wbGF0aW5nIGVuZ2luZSBhbmQgdGhlIHdheSB5b3UgaW50ZXJwb2xhdGVkXG4gKiAgICAgIHRoZSB2YWx1ZS4pICBEbyBtYWtlIHVzZSBvZiB5b3VyIHBsYXRmb3JtJ3MgZXNjYXBpbmcgbWVjaGFuaXNtIGFzIGl0IG1pZ2h0IGJlIGdvb2RcbiAqICAgICAgZW5vdWdoIGJlZm9yZSBjb2RpbmcgeW91ciBvd24uICBlLmcuIFJ1YnkgaGFzXG4gKiAgICAgIFtSZWdleHAuZXNjYXBlKHN0cildKGh0dHA6Ly93d3cucnVieS1kb2Mub3JnL2NvcmUtMi4wLjAvUmVnZXhwLmh0bWwjbWV0aG9kLWMtZXNjYXBlKVxuICogICAgICBhbmQgUHl0aG9uIGhhcyBbcmUuZXNjYXBlXShodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvcmUuaHRtbCNyZS5lc2NhcGUpLlxuICogICAgICBKYXZhc2NyaXB0IGxhY2tzIGEgc2ltaWxhciBidWlsdCBpbiBmdW5jdGlvbiBmb3IgZXNjYXBpbmcuICBUYWtlIGEgbG9vayBhdCBHb29nbGVcbiAqICAgICAgQ2xvc3VyZSBsaWJyYXJ5J3MgW2dvb2cuc3RyaW5nLnJlZ0V4cEVzY2FwZShzKV0oXG4gKiAgICAgIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX3N0cmluZ19zdHJpbmcuanMuc291cmNlLmh0bWwjbGluZTk2MikuXG4gKlxuICogUmVmZXIge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyICRzY2VEZWxlZ2F0ZVByb3ZpZGVyfSBmb3IgYW4gZXhhbXBsZS5cbiAqXG4gKiAjIyBTaG93IG1lIGFuIGV4YW1wbGUgdXNpbmcgU0NFLlxuICpcbiAqIDxleGFtcGxlIG1vZHVsZT1cIm15U2NlQXBwXCIgZGVwcz1cImFuZ3VsYXItc2FuaXRpemUuanNcIj5cbiAqIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gKiAgIDxkaXYgbmctY29udHJvbGxlcj1cIkFwcENvbnRyb2xsZXIgYXMgbXlDdHJsXCI+XG4gKiAgICAgPGkgbmctYmluZC1odG1sPVwibXlDdHJsLmV4cGxpY2l0bHlUcnVzdGVkSHRtbFwiIGlkPVwiZXhwbGljaXRseVRydXN0ZWRIdG1sXCI+PC9pPjxicj48YnI+XG4gKiAgICAgPGI+VXNlciBjb21tZW50czwvYj48YnI+XG4gKiAgICAgQnkgZGVmYXVsdCwgSFRNTCB0aGF0IGlzbid0IGV4cGxpY2l0bHkgdHJ1c3RlZCAoZS5nLiBBbGljZSdzIGNvbW1lbnQpIGlzIHNhbml0aXplZCB3aGVuXG4gKiAgICAgJHNhbml0aXplIGlzIGF2YWlsYWJsZS4gIElmICRzYW5pdGl6ZSBpc24ndCBhdmFpbGFibGUsIHRoaXMgcmVzdWx0cyBpbiBhbiBlcnJvciBpbnN0ZWFkIG9mIGFuXG4gKiAgICAgZXhwbG9pdC5cbiAqICAgICA8ZGl2IGNsYXNzPVwid2VsbFwiPlxuICogICAgICAgPGRpdiBuZy1yZXBlYXQ9XCJ1c2VyQ29tbWVudCBpbiBteUN0cmwudXNlckNvbW1lbnRzXCI+XG4gKiAgICAgICAgIDxiPnt7dXNlckNvbW1lbnQubmFtZX19PC9iPjpcbiAqICAgICAgICAgPHNwYW4gbmctYmluZC1odG1sPVwidXNlckNvbW1lbnQuaHRtbENvbW1lbnRcIiBjbGFzcz1cImh0bWxDb21tZW50XCI+PC9zcGFuPlxuICogICAgICAgICA8YnI+XG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICA8L2Rpdj5cbiAqICAgPC9kaXY+XG4gKiA8L2ZpbGU+XG4gKlxuICogPGZpbGUgbmFtZT1cInNjcmlwdC5qc1wiPlxuICogICBhbmd1bGFyLm1vZHVsZSgnbXlTY2VBcHAnLCBbJ25nU2FuaXRpemUnXSlcbiAqICAgICAuY29udHJvbGxlcignQXBwQ29udHJvbGxlcicsIFsnJGh0dHAnLCAnJHRlbXBsYXRlQ2FjaGUnLCAnJHNjZScsXG4gKiAgICAgICBmdW5jdGlvbigkaHR0cCwgJHRlbXBsYXRlQ2FjaGUsICRzY2UpIHtcbiAqICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICogICAgICAgICAkaHR0cC5nZXQoXCJ0ZXN0X2RhdGEuanNvblwiLCB7Y2FjaGU6ICR0ZW1wbGF0ZUNhY2hlfSkuc3VjY2VzcyhmdW5jdGlvbih1c2VyQ29tbWVudHMpIHtcbiAqICAgICAgICAgICBzZWxmLnVzZXJDb21tZW50cyA9IHVzZXJDb21tZW50cztcbiAqICAgICAgICAgfSk7XG4gKiAgICAgICAgIHNlbGYuZXhwbGljaXRseVRydXN0ZWRIdG1sID0gJHNjZS50cnVzdEFzSHRtbChcbiAqICAgICAgICAgICAgICc8c3BhbiBvbm1vdXNlb3Zlcj1cInRoaXMudGV4dENvbnRlbnQ9JnF1b3Q7RXhwbGljaXRseSB0cnVzdGVkIEhUTUwgYnlwYXNzZXMgJyArXG4gKiAgICAgICAgICAgICAnc2FuaXRpemF0aW9uLiZxdW90O1wiPkhvdmVyIG92ZXIgdGhpcyB0ZXh0Ljwvc3Bhbj4nKTtcbiAqICAgICAgIH1dKTtcbiAqIDwvZmlsZT5cbiAqXG4gKiA8ZmlsZSBuYW1lPVwidGVzdF9kYXRhLmpzb25cIj5cbiAqIFtcbiAqICAgeyBcIm5hbWVcIjogXCJBbGljZVwiLFxuICogICAgIFwiaHRtbENvbW1lbnRcIjpcbiAqICAgICAgICAgXCI8c3BhbiBvbm1vdXNlb3Zlcj0ndGhpcy50ZXh0Q29udGVudD1cXFwiUFdOM0QhXFxcIic+SXMgPGk+YW55b25lPC9pPiByZWFkaW5nIHRoaXM/PC9zcGFuPlwiXG4gKiAgIH0sXG4gKiAgIHsgXCJuYW1lXCI6IFwiQm9iXCIsXG4gKiAgICAgXCJodG1sQ29tbWVudFwiOiBcIjxpPlllcyE8L2k+ICBBbSBJIHRoZSBvbmx5IG90aGVyIG9uZT9cIlxuICogICB9XG4gKiBdXG4gKiA8L2ZpbGU+XG4gKlxuICogPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICogICBkZXNjcmliZSgnU0NFIGRvYyBkZW1vJywgZnVuY3Rpb24oKSB7XG4gKiAgICAgaXQoJ3Nob3VsZCBzYW5pdGl6ZSB1bnRydXN0ZWQgdmFsdWVzJywgZnVuY3Rpb24oKSB7XG4gKiAgICAgICBleHBlY3QoZWxlbWVudC5hbGwoYnkuY3NzKCcuaHRtbENvbW1lbnQnKSkuZmlyc3QoKS5nZXRJbm5lckh0bWwoKSlcbiAqICAgICAgICAgICAudG9CZSgnPHNwYW4+SXMgPGk+YW55b25lPC9pPiByZWFkaW5nIHRoaXM/PC9zcGFuPicpO1xuICogICAgIH0pO1xuICpcbiAqICAgICBpdCgnc2hvdWxkIE5PVCBzYW5pdGl6ZSBleHBsaWNpdGx5IHRydXN0ZWQgdmFsdWVzJywgZnVuY3Rpb24oKSB7XG4gKiAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnZXhwbGljaXRseVRydXN0ZWRIdG1sJykpLmdldElubmVySHRtbCgpKS50b0JlKFxuICogICAgICAgICAgICc8c3BhbiBvbm1vdXNlb3Zlcj1cInRoaXMudGV4dENvbnRlbnQ9JnF1b3Q7RXhwbGljaXRseSB0cnVzdGVkIEhUTUwgYnlwYXNzZXMgJyArXG4gKiAgICAgICAgICAgJ3Nhbml0aXphdGlvbi4mcXVvdDtcIj5Ib3ZlciBvdmVyIHRoaXMgdGV4dC48L3NwYW4+Jyk7XG4gKiAgICAgfSk7XG4gKiAgIH0pO1xuICogPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqXG4gKlxuICogIyMgQ2FuIEkgZGlzYWJsZSBTQ0UgY29tcGxldGVseT9cbiAqXG4gKiBZZXMsIHlvdSBjYW4uICBIb3dldmVyLCB0aGlzIGlzIHN0cm9uZ2x5IGRpc2NvdXJhZ2VkLiAgU0NFIGdpdmVzIHlvdSBhIGxvdCBvZiBzZWN1cml0eSBiZW5lZml0c1xuICogZm9yIGxpdHRsZSBjb2Rpbmcgb3ZlcmhlYWQuICBJdCB3aWxsIGJlIG11Y2ggaGFyZGVyIHRvIHRha2UgYW4gU0NFIGRpc2FibGVkIGFwcGxpY2F0aW9uIGFuZFxuICogZWl0aGVyIHNlY3VyZSBpdCBvbiB5b3VyIG93biBvciBlbmFibGUgU0NFIGF0IGEgbGF0ZXIgc3RhZ2UuICBJdCBtaWdodCBtYWtlIHNlbnNlIHRvIGRpc2FibGUgU0NFXG4gKiBmb3IgY2FzZXMgd2hlcmUgeW91IGhhdmUgYSBsb3Qgb2YgZXhpc3RpbmcgY29kZSB0aGF0IHdhcyB3cml0dGVuIGJlZm9yZSBTQ0Ugd2FzIGludHJvZHVjZWQgYW5kXG4gKiB5b3UncmUgbWlncmF0aW5nIHRoZW0gYSBtb2R1bGUgYXQgYSB0aW1lLlxuICpcbiAqIFRoYXQgc2FpZCwgaGVyZSdzIGhvdyB5b3UgY2FuIGNvbXBsZXRlbHkgZGlzYWJsZSBTQ0U6XG4gKlxuICogYGBgXG4gKiBhbmd1bGFyLm1vZHVsZSgnbXlBcHBXaXRoU2NlRGlzYWJsZWRteUFwcCcsIFtdKS5jb25maWcoZnVuY3Rpb24oJHNjZVByb3ZpZGVyKSB7XG4gKiAgIC8vIENvbXBsZXRlbHkgZGlzYWJsZSBTQ0UuICBGb3IgZGVtb25zdHJhdGlvbiBwdXJwb3NlcyBvbmx5IVxuICogICAvLyBEbyBub3QgdXNlIGluIG5ldyBwcm9qZWN0cy5cbiAqICAgJHNjZVByb3ZpZGVyLmVuYWJsZWQoZmFsc2UpO1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKi9cbi8qIGpzaGludCBtYXhsZW46IDEwMCAqL1xuXG5mdW5jdGlvbiAkU2NlUHJvdmlkZXIoKSB7XG4gIHZhciBlbmFibGVkID0gdHJ1ZTtcblxuICAvKipcbiAgICogQG5nZG9jIG1ldGhvZFxuICAgKiBAbmFtZSAkc2NlUHJvdmlkZXIjZW5hYmxlZFxuICAgKiBAa2luZCBmdW5jdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW49fSB2YWx1ZSBJZiBwcm92aWRlZCwgdGhlbiBlbmFibGVzL2Rpc2FibGVzIFNDRS5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBTQ0UgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRW5hYmxlcy9kaXNhYmxlcyBTQ0UgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUuXG4gICAqL1xuICB0aGlzLmVuYWJsZWQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICBlbmFibGVkID0gISF2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGVuYWJsZWQ7XG4gIH07XG5cblxuICAvKiBEZXNpZ24gbm90ZXMgb24gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIFNDRS5cbiAgICpcbiAgICogVGhlIEFQSSBjb250cmFjdCBmb3IgdGhlIFNDRSBkZWxlZ2F0ZVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIFRoZSBTQ0UgZGVsZWdhdGUgb2JqZWN0IG11c3QgcHJvdmlkZSB0aGUgZm9sbG93aW5nIDMgbWV0aG9kczpcbiAgICpcbiAgICogLSB0cnVzdEFzKGNvbnRleHRFbnVtLCB2YWx1ZSlcbiAgICogICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gdGVsbCB0aGUgU0NFIHNlcnZpY2UgdGhhdCB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgT0sgdG8gdXNlIGluIHRoZVxuICAgKiAgICAgY29udGV4dHMgc3BlY2lmaWVkIGJ5IGNvbnRleHRFbnVtLiAgSXQgbXVzdCByZXR1cm4gYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhY2NlcHRlZCBieVxuICAgKiAgICAgZ2V0VHJ1c3RlZCgpIGZvciBhIGNvbXBhdGlibGUgY29udGV4dEVudW0gYW5kIHJldHVybiB0aGlzIHZhbHVlLlxuICAgKlxuICAgKiAtIHZhbHVlT2YodmFsdWUpXG4gICAqICAgICBGb3IgdmFsdWVzIHRoYXQgd2VyZSBub3QgcHJvZHVjZWQgYnkgdHJ1c3RBcygpLCByZXR1cm4gdGhlbSBhcyBpcy4gIEZvciB2YWx1ZXMgdGhhdCB3ZXJlXG4gICAqICAgICBwcm9kdWNlZCBieSB0cnVzdEFzKCksIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBpbnB1dCB2YWx1ZSB0byB0cnVzdEFzLiAgQmFzaWNhbGx5LCBpZlxuICAgKiAgICAgdHJ1c3RBcyBpcyB3cmFwcGluZyB0aGUgZ2l2ZW4gdmFsdWVzIGludG8gc29tZSB0eXBlLCB0aGlzIG9wZXJhdGlvbiB1bndyYXBzIGl0IHdoZW4gZ2l2ZW5cbiAgICogICAgIHN1Y2ggYSB2YWx1ZS5cbiAgICpcbiAgICogLSBnZXRUcnVzdGVkKGNvbnRleHRFbnVtLCB2YWx1ZSlcbiAgICogICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB0aGUgYSB2YWx1ZSB0aGF0IGlzIHNhZmUgdG8gdXNlIGluIHRoZSBjb250ZXh0IHNwZWNpZmllZCBieVxuICAgKiAgICAgY29udGV4dEVudW0gb3IgdGhyb3cgYW5kIGV4Y2VwdGlvbiBvdGhlcndpc2UuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgY29udHJhY3QgZGVsaWJlcmF0ZWx5IGRvZXMgTk9UIHN0YXRlIHRoYXQgdmFsdWVzIHJldHVybmVkIGJ5IHRydXN0QXMoKSBtdXN0IGJlXG4gICAqIG9wYXF1ZSBvciB3cmFwcGVkIGluIHNvbWUgaG9sZGVyIG9iamVjdC4gIFRoYXQgaGFwcGVucyB0byBiZSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuICBGb3JcbiAgICogaW5zdGFuY2UsIGFuIGltcGxlbWVudGF0aW9uIGNvdWxkIG1haW50YWluIGEgcmVnaXN0cnkgb2YgYWxsIHRydXN0ZWQgb2JqZWN0cyBieSBjb250ZXh0LiAgSW5cbiAgICogc3VjaCBhIGNhc2UsIHRydXN0QXMoKSB3b3VsZCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZCBpbi4gIGdldFRydXN0ZWQoKSB3b3VsZFxuICAgKiByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHBhc3NlZCBpbiBpZiBpdCB3YXMgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5IHVuZGVyIGEgY29tcGF0aWJsZSBjb250ZXh0IG9yXG4gICAqIHRocm93IGFuIGV4Y2VwdGlvbiBvdGhlcndpc2UuICBBbiBpbXBsZW1lbnRhdGlvbiBtaWdodCBvbmx5IHdyYXAgdmFsdWVzIHNvbWUgb2YgdGhlIHRpbWUgYmFzZWRcbiAgICogb24gc29tZSBjcml0ZXJpYS4gIGdldFRydXN0ZWQoKSBtaWdodCByZXR1cm4gYSB2YWx1ZSBhbmQgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBmb3Igc3BlY2lhbFxuICAgKiBjb25zdGFudHMgb3Igb2JqZWN0cyBldmVuIGlmIG5vdCB3cmFwcGVkLiAgQWxsIHN1Y2ggaW1wbGVtZW50YXRpb25zIGZ1bGZpbGwgdGhpcyBjb250cmFjdC5cbiAgICpcbiAgICpcbiAgICogQSBub3RlIG9uIHRoZSBpbmhlcml0YW5jZSBtb2RlbCBmb3IgU0NFIGNvbnRleHRzXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBJJ3ZlIHVzZWQgaW5oZXJpdGFuY2UgYW5kIG1hZGUgUkVTT1VSQ0VfVVJMIHdyYXBwZWQgdHlwZXMgYSBzdWJ0eXBlIG9mIFVSTCB3cmFwcGVkIHR5cGVzLiAgVGhpc1xuICAgKiBpcyBwdXJlbHkgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlscy5cbiAgICpcbiAgICogVGhlIGNvbnRyYWN0IGlzIHNpbXBseSB0aGlzOlxuICAgKlxuICAgKiAgICAgZ2V0VHJ1c3RlZCgkc2NlLlJFU09VUkNFX1VSTCwgdmFsdWUpIHN1Y2NlZWRpbmcgaW1wbGllcyB0aGF0IGdldFRydXN0ZWQoJHNjZS5VUkwsIHZhbHVlKVxuICAgKiAgICAgd2lsbCBhbHNvIHN1Y2NlZWQuXG4gICAqXG4gICAqIEluaGVyaXRhbmNlIGhhcHBlbnMgdG8gY2FwdHVyZSB0aGlzIGluIGEgbmF0dXJhbCB3YXkuICBJbiBzb21lIGZ1dHVyZSwgd2VcbiAgICogbWF5IG5vdCB1c2UgaW5oZXJpdGFuY2UgYW55bW9yZS4gIFRoYXQgaXMgT0sgYmVjYXVzZSBubyBjb2RlIG91dHNpZGUgb2ZcbiAgICogc2NlLmpzIGFuZCBzY2VTcGVjcy5qcyB3b3VsZCBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoaXMgZGV0YWlsLlxuICAgKi9cblxuICB0aGlzLiRnZXQgPSBbJyRwYXJzZScsICckc2NlRGVsZWdhdGUnLCBmdW5jdGlvbihcbiAgICAgICAgICAgICAgICAkcGFyc2UsICAgJHNjZURlbGVnYXRlKSB7XG4gICAgLy8gUHJlcmVxOiBFbnN1cmUgdGhhdCB3ZSdyZSBub3QgcnVubmluZyBpbiBJRTwxMSBxdWlya3MgbW9kZS4gIEluIHRoYXQgbW9kZSwgSUUgPCAxMSBhbGxvd1xuICAgIC8vIHRoZSBcImV4cHJlc3Npb24oamF2YXNjcmlwdCBleHByZXNzaW9uKVwiIHN5bnRheCB3aGljaCBpcyBpbnNlY3VyZS5cbiAgICBpZiAoZW5hYmxlZCAmJiBtc2llIDwgOCkge1xuICAgICAgdGhyb3cgJHNjZU1pbkVycignaWVxdWlya3MnLFxuICAgICAgICAnU3RyaWN0IENvbnRleHR1YWwgRXNjYXBpbmcgZG9lcyBub3Qgc3VwcG9ydCBJbnRlcm5ldCBFeHBsb3JlciB2ZXJzaW9uIDwgMTEgaW4gcXVpcmtzICcgK1xuICAgICAgICAnbW9kZS4gIFlvdSBjYW4gZml4IHRoaXMgYnkgYWRkaW5nIHRoZSB0ZXh0IDwhZG9jdHlwZSBodG1sPiB0byB0aGUgdG9wIG9mIHlvdXIgSFRNTCAnICtcbiAgICAgICAgJ2RvY3VtZW50LiAgU2VlIGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nLiRzY2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyk7XG4gICAgfVxuXG4gICAgdmFyIHNjZSA9IHNoYWxsb3dDb3B5KFNDRV9DT05URVhUUyk7XG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICogQG5hbWUgJHNjZSNpc0VuYWJsZWRcbiAgICAgKiBAa2luZCBmdW5jdGlvblxuICAgICAqXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBTQ0UgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgSWYgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSwgeW91XG4gICAgICogaGF2ZSB0byBkbyBpdCBhdCBtb2R1bGUgY29uZmlnIHRpbWUgb24ge0BsaW5rIG5nLiRzY2VQcm92aWRlciAkc2NlUHJvdmlkZXJ9LlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBTQ0UgaXMgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBzY2UuaXNFbmFibGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZW5hYmxlZDtcbiAgICB9O1xuICAgIHNjZS50cnVzdEFzID0gJHNjZURlbGVnYXRlLnRydXN0QXM7XG4gICAgc2NlLmdldFRydXN0ZWQgPSAkc2NlRGVsZWdhdGUuZ2V0VHJ1c3RlZDtcbiAgICBzY2UudmFsdWVPZiA9ICRzY2VEZWxlZ2F0ZS52YWx1ZU9mO1xuXG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICBzY2UudHJ1c3RBcyA9IHNjZS5nZXRUcnVzdGVkID0gZnVuY3Rpb24odHlwZSwgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuICAgICAgc2NlLnZhbHVlT2YgPSBpZGVudGl0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICogQG5hbWUgJHNjZSNwYXJzZUFzXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBDb252ZXJ0cyBBbmd1bGFyIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259IGludG8gYSBmdW5jdGlvbi4gIFRoaXMgaXMgbGlrZSB7QGxpbmtcbiAgICAgKiBuZy4kcGFyc2UgJHBhcnNlfSBhbmQgaXMgaWRlbnRpY2FsIHdoZW4gdGhlIGV4cHJlc3Npb24gaXMgYSBsaXRlcmFsIGNvbnN0YW50LiAgT3RoZXJ3aXNlLCBpdFxuICAgICAqIHdyYXBzIHRoZSBleHByZXNzaW9uIGluIGEgY2FsbCB0byB7QGxpbmsgbmcuJHNjZSNnZXRUcnVzdGVkICRzY2UuZ2V0VHJ1c3RlZCgqdHlwZSosXG4gICAgICogKnJlc3VsdCopfVxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGtpbmQgb2YgU0NFIGNvbnRleHQgaW4gd2hpY2ggdGhpcyByZXN1bHQgd2lsbCBiZSB1c2VkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIFN0cmluZyBleHByZXNzaW9uIHRvIGNvbXBpbGUuXG4gICAgICogQHJldHVybnMge2Z1bmN0aW9uKGNvbnRleHQsIGxvY2Fscyl9IGEgZnVuY3Rpb24gd2hpY2ggcmVwcmVzZW50cyB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbjpcbiAgICAgKlxuICAgICAqICAgICogYGNvbnRleHRgIOKAkyBge29iamVjdH1gIOKAkyBhbiBvYmplY3QgYWdhaW5zdCB3aGljaCBhbnkgZXhwcmVzc2lvbnMgZW1iZWRkZWQgaW4gdGhlIHN0cmluZ3NcbiAgICAgKiAgICAgIGFyZSBldmFsdWF0ZWQgYWdhaW5zdCAodHlwaWNhbGx5IGEgc2NvcGUgb2JqZWN0KS5cbiAgICAgKiAgICAqIGBsb2NhbHNgIOKAkyBge29iamVjdD19YCDigJMgbG9jYWwgdmFyaWFibGVzIGNvbnRleHQgb2JqZWN0LCB1c2VmdWwgZm9yIG92ZXJyaWRpbmcgdmFsdWVzIGluXG4gICAgICogICAgICBgY29udGV4dGAuXG4gICAgICovXG4gICAgc2NlLnBhcnNlQXMgPSBmdW5jdGlvbiBzY2VQYXJzZUFzKHR5cGUsIGV4cHIpIHtcbiAgICAgIHZhciBwYXJzZWQgPSAkcGFyc2UoZXhwcik7XG4gICAgICBpZiAocGFyc2VkLmxpdGVyYWwgJiYgcGFyc2VkLmNvbnN0YW50KSB7XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJHBhcnNlKGV4cHIsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHNjZS5nZXRUcnVzdGVkKHR5cGUsIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgKiBAbmFtZSAkc2NlI3RydXN0QXNcbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIERlbGVnYXRlcyB0byB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXMgYCRzY2VEZWxlZ2F0ZS50cnVzdEFzYH0uICBBcyBzdWNoLFxuICAgICAqIHJldHVybnMgYW4gb2JqZWN0IHRoYXQgaXMgdHJ1c3RlZCBieSBhbmd1bGFyIGZvciB1c2UgaW4gc3BlY2lmaWVkIHN0cmljdCBjb250ZXh0dWFsXG4gICAgICogZXNjYXBpbmcgY29udGV4dHMgKHN1Y2ggYXMgbmctYmluZC1odG1sLCBuZy1pbmNsdWRlLCBhbnkgc3JjIGF0dHJpYnV0ZVxuICAgICAqIGludGVycG9sYXRpb24sIGFueSBkb20gZXZlbnQgYmluZGluZyBhdHRyaWJ1dGUgaW50ZXJwb2xhdGlvbiBzdWNoIGFzIGZvciBvbmNsaWNrLCAgZXRjLilcbiAgICAgKiB0aGF0IHVzZXMgdGhlIHByb3ZpZGVkIHZhbHVlLiAgU2VlICoge0BsaW5rIG5nLiRzY2UgJHNjZX0gZm9yIGVuYWJsaW5nIHN0cmljdCBjb250ZXh0dWFsXG4gICAgICogZXNjYXBpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUga2luZCBvZiBjb250ZXh0IGluIHdoaWNoIHRoaXMgdmFsdWUgaXMgc2FmZSBmb3IgdXNlLiAgZS5nLiB1cmwsXG4gICAgICogICByZXNvdXJjZV91cmwsIGh0bWwsIGpzIGFuZCBjc3MuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdGhhdCB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkIHRydXN0ZWQvc2FmZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gQSB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHN0YW5kIGluIGZvciB0aGUgcHJvdmlkZWQgYHZhbHVlYCBpbiBwbGFjZXNcbiAgICAgKiB3aGVyZSBBbmd1bGFyIGV4cGVjdHMgYSAkc2NlLnRydXN0QXMoKSByZXR1cm4gdmFsdWUuXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICogQG5hbWUgJHNjZSN0cnVzdEFzSHRtbFxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLnRydXN0QXNIdG1sKHZhbHVlKWAg4oaSXG4gICAgICogICAgIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjdHJ1c3RBcyBgJHNjZURlbGVnYXRlLnRydXN0QXMoJHNjZS5IVE1MLCB2YWx1ZSlgfVxuICAgICAqXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gdHJ1c3RBcy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gQW4gb2JqZWN0IHRoYXQgY2FuIGJlIHBhc3NlZCB0byB7QGxpbmsgbmcuJHNjZSNnZXRUcnVzdGVkSHRtbFxuICAgICAqICAgICAkc2NlLmdldFRydXN0ZWRIdG1sKHZhbHVlKX0gdG8gb2J0YWluIHRoZSBvcmlnaW5hbCB2YWx1ZS4gIChwcml2aWxlZ2VkIGRpcmVjdGl2ZXNcbiAgICAgKiAgICAgb25seSBhY2NlcHQgZXhwcmVzc2lvbnMgdGhhdCBhcmUgZWl0aGVyIGxpdGVyYWwgY29uc3RhbnRzIG9yIGFyZSB0aGVcbiAgICAgKiAgICAgcmV0dXJuIHZhbHVlIG9mIHtAbGluayBuZy4kc2NlI3RydXN0QXMgJHNjZS50cnVzdEFzfS4pXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICogQG5hbWUgJHNjZSN0cnVzdEFzVXJsXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBTaG9ydGhhbmQgbWV0aG9kLiAgYCRzY2UudHJ1c3RBc1VybCh2YWx1ZSlgIOKGklxuICAgICAqICAgICB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXMgYCRzY2VEZWxlZ2F0ZS50cnVzdEFzKCRzY2UuVVJMLCB2YWx1ZSlgfVxuICAgICAqXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gdHJ1c3RBcy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gQW4gb2JqZWN0IHRoYXQgY2FuIGJlIHBhc3NlZCB0byB7QGxpbmsgbmcuJHNjZSNnZXRUcnVzdGVkVXJsXG4gICAgICogICAgICRzY2UuZ2V0VHJ1c3RlZFVybCh2YWx1ZSl9IHRvIG9idGFpbiB0aGUgb3JpZ2luYWwgdmFsdWUuICAocHJpdmlsZWdlZCBkaXJlY3RpdmVzXG4gICAgICogICAgIG9ubHkgYWNjZXB0IGV4cHJlc3Npb25zIHRoYXQgYXJlIGVpdGhlciBsaXRlcmFsIGNvbnN0YW50cyBvciBhcmUgdGhlXG4gICAgICogICAgIHJldHVybiB2YWx1ZSBvZiB7QGxpbmsgbmcuJHNjZSN0cnVzdEFzICRzY2UudHJ1c3RBc30uKVxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAqIEBuYW1lICRzY2UjdHJ1c3RBc1Jlc291cmNlVXJsXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBTaG9ydGhhbmQgbWV0aG9kLiAgYCRzY2UudHJ1c3RBc1Jlc291cmNlVXJsKHZhbHVlKWAg4oaSXG4gICAgICogICAgIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjdHJ1c3RBcyBgJHNjZURlbGVnYXRlLnRydXN0QXMoJHNjZS5SRVNPVVJDRV9VUkwsIHZhbHVlKWB9XG4gICAgICpcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB0cnVzdEFzLlxuICAgICAqIEByZXR1cm5zIHsqfSBBbiBvYmplY3QgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHtAbGluayBuZy4kc2NlI2dldFRydXN0ZWRSZXNvdXJjZVVybFxuICAgICAqICAgICAkc2NlLmdldFRydXN0ZWRSZXNvdXJjZVVybCh2YWx1ZSl9IHRvIG9idGFpbiB0aGUgb3JpZ2luYWwgdmFsdWUuICAocHJpdmlsZWdlZCBkaXJlY3RpdmVzXG4gICAgICogICAgIG9ubHkgYWNjZXB0IGV4cHJlc3Npb25zIHRoYXQgYXJlIGVpdGhlciBsaXRlcmFsIGNvbnN0YW50cyBvciBhcmUgdGhlIHJldHVyblxuICAgICAqICAgICB2YWx1ZSBvZiB7QGxpbmsgbmcuJHNjZSN0cnVzdEFzICRzY2UudHJ1c3RBc30uKVxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAqIEBuYW1lICRzY2UjdHJ1c3RBc0pzXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBTaG9ydGhhbmQgbWV0aG9kLiAgYCRzY2UudHJ1c3RBc0pzKHZhbHVlKWAg4oaSXG4gICAgICogICAgIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjdHJ1c3RBcyBgJHNjZURlbGVnYXRlLnRydXN0QXMoJHNjZS5KUywgdmFsdWUpYH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHRydXN0QXMuXG4gICAgICogQHJldHVybnMgeyp9IEFuIG9iamVjdCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8ge0BsaW5rIG5nLiRzY2UjZ2V0VHJ1c3RlZEpzXG4gICAgICogICAgICRzY2UuZ2V0VHJ1c3RlZEpzKHZhbHVlKX0gdG8gb2J0YWluIHRoZSBvcmlnaW5hbCB2YWx1ZS4gIChwcml2aWxlZ2VkIGRpcmVjdGl2ZXNcbiAgICAgKiAgICAgb25seSBhY2NlcHQgZXhwcmVzc2lvbnMgdGhhdCBhcmUgZWl0aGVyIGxpdGVyYWwgY29uc3RhbnRzIG9yIGFyZSB0aGVcbiAgICAgKiAgICAgcmV0dXJuIHZhbHVlIG9mIHtAbGluayBuZy4kc2NlI3RydXN0QXMgJHNjZS50cnVzdEFzfS4pXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICogQG5hbWUgJHNjZSNnZXRUcnVzdGVkXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBEZWxlZ2F0ZXMgdG8ge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZSNnZXRUcnVzdGVkIGAkc2NlRGVsZWdhdGUuZ2V0VHJ1c3RlZGB9LiAgQXMgc3VjaCxcbiAgICAgKiB0YWtlcyB0aGUgcmVzdWx0IG9mIGEge0BsaW5rIG5nLiRzY2UjdHJ1c3RBcyBgJHNjZS50cnVzdEFzYH0oKSBjYWxsIGFuZCByZXR1cm5zIHRoZVxuICAgICAqIG9yaWdpbmFsbHkgc3VwcGxpZWQgdmFsdWUgaWYgdGhlIHF1ZXJpZWQgY29udGV4dCB0eXBlIGlzIGEgc3VwZXJ0eXBlIG9mIHRoZSBjcmVhdGVkIHR5cGUuXG4gICAgICogSWYgdGhpcyBjb25kaXRpb24gaXNuJ3Qgc2F0aXNmaWVkLCB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGtpbmQgb2YgY29udGV4dCBpbiB3aGljaCB0aGlzIHZhbHVlIGlzIHRvIGJlIHVzZWQuXG4gICAgICogQHBhcmFtIHsqfSBtYXliZVRydXN0ZWQgVGhlIHJlc3VsdCBvZiBhIHByaW9yIHtAbGluayBuZy4kc2NlI3RydXN0QXMgYCRzY2UudHJ1c3RBc2B9XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoZSB3YXMgb3JpZ2luYWxseSBwcm92aWRlZCB0b1xuICAgICAqICAgICAgICAgICAgICB7QGxpbmsgbmcuJHNjZSN0cnVzdEFzIGAkc2NlLnRydXN0QXNgfSBpZiB2YWxpZCBpbiB0aGlzIGNvbnRleHQuXG4gICAgICogICAgICAgICAgICAgIE90aGVyd2lzZSwgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgKiBAbmFtZSAkc2NlI2dldFRydXN0ZWRIdG1sXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBTaG9ydGhhbmQgbWV0aG9kLiAgYCRzY2UuZ2V0VHJ1c3RlZEh0bWwodmFsdWUpYCDihpJcbiAgICAgKiAgICAge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZSNnZXRUcnVzdGVkIGAkc2NlRGVsZWdhdGUuZ2V0VHJ1c3RlZCgkc2NlLkhUTUwsIHZhbHVlKWB9XG4gICAgICpcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwYXNzIHRvIGAkc2NlLmdldFRydXN0ZWRgLlxuICAgICAqIEByZXR1cm5zIHsqfSBUaGUgcmV0dXJuIHZhbHVlIG9mIGAkc2NlLmdldFRydXN0ZWQoJHNjZS5IVE1MLCB2YWx1ZSlgXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICogQG5hbWUgJHNjZSNnZXRUcnVzdGVkQ3NzXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBTaG9ydGhhbmQgbWV0aG9kLiAgYCRzY2UuZ2V0VHJ1c3RlZENzcyh2YWx1ZSlgIOKGklxuICAgICAqICAgICB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI2dldFRydXN0ZWQgYCRzY2VEZWxlZ2F0ZS5nZXRUcnVzdGVkKCRzY2UuQ1NTLCB2YWx1ZSlgfVxuICAgICAqXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcGFzcyB0byBgJHNjZS5nZXRUcnVzdGVkYC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHJldHVybiB2YWx1ZSBvZiBgJHNjZS5nZXRUcnVzdGVkKCRzY2UuQ1NTLCB2YWx1ZSlgXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICogQG5hbWUgJHNjZSNnZXRUcnVzdGVkVXJsXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBTaG9ydGhhbmQgbWV0aG9kLiAgYCRzY2UuZ2V0VHJ1c3RlZFVybCh2YWx1ZSlgIOKGklxuICAgICAqICAgICB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI2dldFRydXN0ZWQgYCRzY2VEZWxlZ2F0ZS5nZXRUcnVzdGVkKCRzY2UuVVJMLCB2YWx1ZSlgfVxuICAgICAqXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcGFzcyB0byBgJHNjZS5nZXRUcnVzdGVkYC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHJldHVybiB2YWx1ZSBvZiBgJHNjZS5nZXRUcnVzdGVkKCRzY2UuVVJMLCB2YWx1ZSlgXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICogQG5hbWUgJHNjZSNnZXRUcnVzdGVkUmVzb3VyY2VVcmxcbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFNob3J0aGFuZCBtZXRob2QuICBgJHNjZS5nZXRUcnVzdGVkUmVzb3VyY2VVcmwodmFsdWUpYCDihpJcbiAgICAgKiAgICAge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZSNnZXRUcnVzdGVkIGAkc2NlRGVsZWdhdGUuZ2V0VHJ1c3RlZCgkc2NlLlJFU09VUkNFX1VSTCwgdmFsdWUpYH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHBhc3MgdG8gYCRzY2VEZWxlZ2F0ZS5nZXRUcnVzdGVkYC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHJldHVybiB2YWx1ZSBvZiBgJHNjZS5nZXRUcnVzdGVkKCRzY2UuUkVTT1VSQ0VfVVJMLCB2YWx1ZSlgXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICogQG5hbWUgJHNjZSNnZXRUcnVzdGVkSnNcbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFNob3J0aGFuZCBtZXRob2QuICBgJHNjZS5nZXRUcnVzdGVkSnModmFsdWUpYCDihpJcbiAgICAgKiAgICAge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZSNnZXRUcnVzdGVkIGAkc2NlRGVsZWdhdGUuZ2V0VHJ1c3RlZCgkc2NlLkpTLCB2YWx1ZSlgfVxuICAgICAqXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcGFzcyB0byBgJHNjZS5nZXRUcnVzdGVkYC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHJldHVybiB2YWx1ZSBvZiBgJHNjZS5nZXRUcnVzdGVkKCRzY2UuSlMsIHZhbHVlKWBcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgKiBAbmFtZSAkc2NlI3BhcnNlQXNIdG1sXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBTaG9ydGhhbmQgbWV0aG9kLiAgYCRzY2UucGFyc2VBc0h0bWwoZXhwcmVzc2lvbiBzdHJpbmcpYCDihpJcbiAgICAgKiAgICAge0BsaW5rIG5nLiRzY2UjcGFyc2VBcyBgJHNjZS5wYXJzZUFzKCRzY2UuSFRNTCwgdmFsdWUpYH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIFN0cmluZyBleHByZXNzaW9uIHRvIGNvbXBpbGUuXG4gICAgICogQHJldHVybnMge2Z1bmN0aW9uKGNvbnRleHQsIGxvY2Fscyl9IGEgZnVuY3Rpb24gd2hpY2ggcmVwcmVzZW50cyB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbjpcbiAgICAgKlxuICAgICAqICAgICogYGNvbnRleHRgIOKAkyBge29iamVjdH1gIOKAkyBhbiBvYmplY3QgYWdhaW5zdCB3aGljaCBhbnkgZXhwcmVzc2lvbnMgZW1iZWRkZWQgaW4gdGhlIHN0cmluZ3NcbiAgICAgKiAgICAgIGFyZSBldmFsdWF0ZWQgYWdhaW5zdCAodHlwaWNhbGx5IGEgc2NvcGUgb2JqZWN0KS5cbiAgICAgKiAgICAqIGBsb2NhbHNgIOKAkyBge29iamVjdD19YCDigJMgbG9jYWwgdmFyaWFibGVzIGNvbnRleHQgb2JqZWN0LCB1c2VmdWwgZm9yIG92ZXJyaWRpbmcgdmFsdWVzIGluXG4gICAgICogICAgICBgY29udGV4dGAuXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgbWV0aG9kXG4gICAgICogQG5hbWUgJHNjZSNwYXJzZUFzQ3NzXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBTaG9ydGhhbmQgbWV0aG9kLiAgYCRzY2UucGFyc2VBc0Nzcyh2YWx1ZSlgIOKGklxuICAgICAqICAgICB7QGxpbmsgbmcuJHNjZSNwYXJzZUFzIGAkc2NlLnBhcnNlQXMoJHNjZS5DU1MsIHZhbHVlKWB9XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiBTdHJpbmcgZXhwcmVzc2lvbiB0byBjb21waWxlLlxuICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbihjb250ZXh0LCBsb2NhbHMpfSBhIGZ1bmN0aW9uIHdoaWNoIHJlcHJlc2VudHMgdGhlIGNvbXBpbGVkIGV4cHJlc3Npb246XG4gICAgICpcbiAgICAgKiAgICAqIGBjb250ZXh0YCDigJMgYHtvYmplY3R9YCDigJMgYW4gb2JqZWN0IGFnYWluc3Qgd2hpY2ggYW55IGV4cHJlc3Npb25zIGVtYmVkZGVkIGluIHRoZSBzdHJpbmdzXG4gICAgICogICAgICBhcmUgZXZhbHVhdGVkIGFnYWluc3QgKHR5cGljYWxseSBhIHNjb3BlIG9iamVjdCkuXG4gICAgICogICAgKiBgbG9jYWxzYCDigJMgYHtvYmplY3Q9fWAg4oCTIGxvY2FsIHZhcmlhYmxlcyBjb250ZXh0IG9iamVjdCwgdXNlZnVsIGZvciBvdmVycmlkaW5nIHZhbHVlcyBpblxuICAgICAqICAgICAgYGNvbnRleHRgLlxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAqIEBuYW1lICRzY2UjcGFyc2VBc1VybFxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLnBhcnNlQXNVcmwodmFsdWUpYCDihpJcbiAgICAgKiAgICAge0BsaW5rIG5nLiRzY2UjcGFyc2VBcyBgJHNjZS5wYXJzZUFzKCRzY2UuVVJMLCB2YWx1ZSlgfVxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gU3RyaW5nIGV4cHJlc3Npb24gdG8gY29tcGlsZS5cbiAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24oY29udGV4dCwgbG9jYWxzKX0gYSBmdW5jdGlvbiB3aGljaCByZXByZXNlbnRzIHRoZSBjb21waWxlZCBleHByZXNzaW9uOlxuICAgICAqXG4gICAgICogICAgKiBgY29udGV4dGAg4oCTIGB7b2JqZWN0fWAg4oCTIGFuIG9iamVjdCBhZ2FpbnN0IHdoaWNoIGFueSBleHByZXNzaW9ucyBlbWJlZGRlZCBpbiB0aGUgc3RyaW5nc1xuICAgICAqICAgICAgYXJlIGV2YWx1YXRlZCBhZ2FpbnN0ICh0eXBpY2FsbHkgYSBzY29wZSBvYmplY3QpLlxuICAgICAqICAgICogYGxvY2Fsc2Ag4oCTIGB7b2JqZWN0PX1gIOKAkyBsb2NhbCB2YXJpYWJsZXMgY29udGV4dCBvYmplY3QsIHVzZWZ1bCBmb3Igb3ZlcnJpZGluZyB2YWx1ZXMgaW5cbiAgICAgKiAgICAgIGBjb250ZXh0YC5cbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEBuZ2RvYyBtZXRob2RcbiAgICAgKiBAbmFtZSAkc2NlI3BhcnNlQXNSZXNvdXJjZVVybFxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLnBhcnNlQXNSZXNvdXJjZVVybCh2YWx1ZSlgIOKGklxuICAgICAqICAgICB7QGxpbmsgbmcuJHNjZSNwYXJzZUFzIGAkc2NlLnBhcnNlQXMoJHNjZS5SRVNPVVJDRV9VUkwsIHZhbHVlKWB9XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiBTdHJpbmcgZXhwcmVzc2lvbiB0byBjb21waWxlLlxuICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbihjb250ZXh0LCBsb2NhbHMpfSBhIGZ1bmN0aW9uIHdoaWNoIHJlcHJlc2VudHMgdGhlIGNvbXBpbGVkIGV4cHJlc3Npb246XG4gICAgICpcbiAgICAgKiAgICAqIGBjb250ZXh0YCDigJMgYHtvYmplY3R9YCDigJMgYW4gb2JqZWN0IGFnYWluc3Qgd2hpY2ggYW55IGV4cHJlc3Npb25zIGVtYmVkZGVkIGluIHRoZSBzdHJpbmdzXG4gICAgICogICAgICBhcmUgZXZhbHVhdGVkIGFnYWluc3QgKHR5cGljYWxseSBhIHNjb3BlIG9iamVjdCkuXG4gICAgICogICAgKiBgbG9jYWxzYCDigJMgYHtvYmplY3Q9fWAg4oCTIGxvY2FsIHZhcmlhYmxlcyBjb250ZXh0IG9iamVjdCwgdXNlZnVsIGZvciBvdmVycmlkaW5nIHZhbHVlcyBpblxuICAgICAqICAgICAgYGNvbnRleHRgLlxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAqIEBuYW1lICRzY2UjcGFyc2VBc0pzXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBTaG9ydGhhbmQgbWV0aG9kLiAgYCRzY2UucGFyc2VBc0pzKHZhbHVlKWAg4oaSXG4gICAgICogICAgIHtAbGluayBuZy4kc2NlI3BhcnNlQXMgYCRzY2UucGFyc2VBcygkc2NlLkpTLCB2YWx1ZSlgfVxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gU3RyaW5nIGV4cHJlc3Npb24gdG8gY29tcGlsZS5cbiAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24oY29udGV4dCwgbG9jYWxzKX0gYSBmdW5jdGlvbiB3aGljaCByZXByZXNlbnRzIHRoZSBjb21waWxlZCBleHByZXNzaW9uOlxuICAgICAqXG4gICAgICogICAgKiBgY29udGV4dGAg4oCTIGB7b2JqZWN0fWAg4oCTIGFuIG9iamVjdCBhZ2FpbnN0IHdoaWNoIGFueSBleHByZXNzaW9ucyBlbWJlZGRlZCBpbiB0aGUgc3RyaW5nc1xuICAgICAqICAgICAgYXJlIGV2YWx1YXRlZCBhZ2FpbnN0ICh0eXBpY2FsbHkgYSBzY29wZSBvYmplY3QpLlxuICAgICAqICAgICogYGxvY2Fsc2Ag4oCTIGB7b2JqZWN0PX1gIOKAkyBsb2NhbCB2YXJpYWJsZXMgY29udGV4dCBvYmplY3QsIHVzZWZ1bCBmb3Igb3ZlcnJpZGluZyB2YWx1ZXMgaW5cbiAgICAgKiAgICAgIGBjb250ZXh0YC5cbiAgICAgKi9cblxuICAgIC8vIFNob3J0aGFuZCBkZWxlZ2F0aW9ucy5cbiAgICB2YXIgcGFyc2UgPSBzY2UucGFyc2VBcyxcbiAgICAgICAgZ2V0VHJ1c3RlZCA9IHNjZS5nZXRUcnVzdGVkLFxuICAgICAgICB0cnVzdEFzID0gc2NlLnRydXN0QXM7XG5cbiAgICBmb3JFYWNoKFNDRV9DT05URVhUUywgZnVuY3Rpb24oZW51bVZhbHVlLCBuYW1lKSB7XG4gICAgICB2YXIgbE5hbWUgPSBsb3dlcmNhc2UobmFtZSk7XG4gICAgICBzY2VbY2FtZWxDYXNlKFwicGFyc2VfYXNfXCIgKyBsTmFtZSldID0gZnVuY3Rpb24oZXhwcikge1xuICAgICAgICByZXR1cm4gcGFyc2UoZW51bVZhbHVlLCBleHByKTtcbiAgICAgIH07XG4gICAgICBzY2VbY2FtZWxDYXNlKFwiZ2V0X3RydXN0ZWRfXCIgKyBsTmFtZSldID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGdldFRydXN0ZWQoZW51bVZhbHVlLCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgc2NlW2NhbWVsQ2FzZShcInRydXN0X2FzX1wiICsgbE5hbWUpXSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0cnVzdEFzKGVudW1WYWx1ZSwgdmFsdWUpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzY2U7XG4gIH1dO1xufVxuXG4vKipcbiAqICEhISBUaGlzIGlzIGFuIHVuZG9jdW1lbnRlZCBcInByaXZhdGVcIiBzZXJ2aWNlICEhIVxuICpcbiAqIEBuYW1lICRzbmlmZmVyXG4gKiBAcmVxdWlyZXMgJHdpbmRvd1xuICogQHJlcXVpcmVzICRkb2N1bWVudFxuICpcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaGlzdG9yeSBEb2VzIHRoZSBicm93c2VyIHN1cHBvcnQgaHRtbDUgaGlzdG9yeSBhcGkgP1xuICogQHByb3BlcnR5IHtib29sZWFufSB0cmFuc2l0aW9ucyBEb2VzIHRoZSBicm93c2VyIHN1cHBvcnQgQ1NTIHRyYW5zaXRpb24gZXZlbnRzID9cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYW5pbWF0aW9ucyBEb2VzIHRoZSBicm93c2VyIHN1cHBvcnQgQ1NTIGFuaW1hdGlvbiBldmVudHMgP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBpcyB2ZXJ5IHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiB0ZXN0aW5nIGJyb3dzZXIncyBmZWF0dXJlcy5cbiAqL1xuZnVuY3Rpb24gJFNuaWZmZXJQcm92aWRlcigpIHtcbiAgdGhpcy4kZ2V0ID0gWyckd2luZG93JywgJyRkb2N1bWVudCcsIGZ1bmN0aW9uKCR3aW5kb3csICRkb2N1bWVudCkge1xuICAgIHZhciBldmVudFN1cHBvcnQgPSB7fSxcbiAgICAgICAgYW5kcm9pZCA9XG4gICAgICAgICAgaW50KCgvYW5kcm9pZCAoXFxkKykvLmV4ZWMobG93ZXJjYXNlKCgkd2luZG93Lm5hdmlnYXRvciB8fCB7fSkudXNlckFnZW50KSkgfHwgW10pWzFdKSxcbiAgICAgICAgYm94ZWUgPSAvQm94ZWUvaS50ZXN0KCgkd2luZG93Lm5hdmlnYXRvciB8fCB7fSkudXNlckFnZW50KSxcbiAgICAgICAgZG9jdW1lbnQgPSAkZG9jdW1lbnRbMF0gfHwge30sXG4gICAgICAgIHZlbmRvclByZWZpeCxcbiAgICAgICAgdmVuZG9yUmVnZXggPSAvXihNb3p8d2Via2l0fG1zKSg/PVtBLVpdKS8sXG4gICAgICAgIGJvZHlTdHlsZSA9IGRvY3VtZW50LmJvZHkgJiYgZG9jdW1lbnQuYm9keS5zdHlsZSxcbiAgICAgICAgdHJhbnNpdGlvbnMgPSBmYWxzZSxcbiAgICAgICAgYW5pbWF0aW9ucyA9IGZhbHNlLFxuICAgICAgICBtYXRjaDtcblxuICAgIGlmIChib2R5U3R5bGUpIHtcbiAgICAgIGZvciAodmFyIHByb3AgaW4gYm9keVN0eWxlKSB7XG4gICAgICAgIGlmIChtYXRjaCA9IHZlbmRvclJlZ2V4LmV4ZWMocHJvcCkpIHtcbiAgICAgICAgICB2ZW5kb3JQcmVmaXggPSBtYXRjaFswXTtcbiAgICAgICAgICB2ZW5kb3JQcmVmaXggPSB2ZW5kb3JQcmVmaXguc3Vic3RyKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyB2ZW5kb3JQcmVmaXguc3Vic3RyKDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdmVuZG9yUHJlZml4KSB7XG4gICAgICAgIHZlbmRvclByZWZpeCA9ICgnV2Via2l0T3BhY2l0eScgaW4gYm9keVN0eWxlKSAmJiAnd2Via2l0JztcbiAgICAgIH1cblxuICAgICAgdHJhbnNpdGlvbnMgPSAhISgoJ3RyYW5zaXRpb24nIGluIGJvZHlTdHlsZSkgfHwgKHZlbmRvclByZWZpeCArICdUcmFuc2l0aW9uJyBpbiBib2R5U3R5bGUpKTtcbiAgICAgIGFuaW1hdGlvbnMgID0gISEoKCdhbmltYXRpb24nIGluIGJvZHlTdHlsZSkgfHwgKHZlbmRvclByZWZpeCArICdBbmltYXRpb24nIGluIGJvZHlTdHlsZSkpO1xuXG4gICAgICBpZiAoYW5kcm9pZCAmJiAoIXRyYW5zaXRpb25zIHx8ICAhYW5pbWF0aW9ucykpIHtcbiAgICAgICAgdHJhbnNpdGlvbnMgPSBpc1N0cmluZyhkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFRyYW5zaXRpb24pO1xuICAgICAgICBhbmltYXRpb25zID0gaXNTdHJpbmcoZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRBbmltYXRpb24pO1xuICAgICAgfVxuICAgIH1cblxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFuZHJvaWQgaGFzIGhpc3RvcnkucHVzaFN0YXRlLCBidXQgaXQgZG9lcyBub3QgdXBkYXRlIGxvY2F0aW9uIGNvcnJlY3RseVxuICAgICAgLy8gc28gbGV0J3Mgbm90IHVzZSB0aGUgaGlzdG9yeSBBUEkgYXQgYWxsLlxuICAgICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2RldGFpbD9pZD0xNzQ3MVxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5qcy9pc3N1ZXMvOTA0XG5cbiAgICAgIC8vIG9sZGVyIHdlYmtpdCBicm93c2VyICg1MzMuOSkgb24gQm94ZWUgYm94IGhhcyBleGFjdGx5IHRoZSBzYW1lIHByb2JsZW0gYXMgQW5kcm9pZCBoYXNcbiAgICAgIC8vIHNvIGxldCdzIG5vdCB1c2UgdGhlIGhpc3RvcnkgQVBJIGFsc29cbiAgICAgIC8vIFdlIGFyZSBwdXJwb3NlZnVsbHkgdXNpbmcgYCEoYW5kcm9pZCA8IDQpYCB0byBjb3ZlciB0aGUgY2FzZSB3aGVuIGBhbmRyb2lkYCBpcyB1bmRlZmluZWRcbiAgICAgIC8vIGpzaGludCAtVzAxOFxuICAgICAgaGlzdG9yeTogISEoJHdpbmRvdy5oaXN0b3J5ICYmICR3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUgJiYgIShhbmRyb2lkIDwgNCkgJiYgIWJveGVlKSxcbiAgICAgIC8vIGpzaGludCArVzAxOFxuICAgICAgaGFzRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIC8vIElFOSBpbXBsZW1lbnRzICdpbnB1dCcgZXZlbnQgaXQncyBzbyBmdWJhcmVkIHRoYXQgd2UgcmF0aGVyIHByZXRlbmQgdGhhdCBpdCBkb2Vzbid0IGhhdmVcbiAgICAgICAgLy8gaXQuIEluIHBhcnRpY3VsYXIgdGhlIGV2ZW50IGlzIG5vdCBmaXJlZCB3aGVuIGJhY2tzcGFjZSBvciBkZWxldGUga2V5IGFyZSBwcmVzc2VkIG9yXG4gICAgICAgIC8vIHdoZW4gY3V0IG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQuXG4gICAgICAgIGlmIChldmVudCA9PSAnaW5wdXQnICYmIG1zaWUgPT0gOSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChldmVudFN1cHBvcnRbZXZlbnRdKSkge1xuICAgICAgICAgIHZhciBkaXZFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICBldmVudFN1cHBvcnRbZXZlbnRdID0gJ29uJyArIGV2ZW50IGluIGRpdkVsbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBldmVudFN1cHBvcnRbZXZlbnRdO1xuICAgICAgfSxcbiAgICAgIGNzcDogY3NwKCksXG4gICAgICB2ZW5kb3JQcmVmaXg6IHZlbmRvclByZWZpeCxcbiAgICAgIHRyYW5zaXRpb25zOiB0cmFuc2l0aW9ucyxcbiAgICAgIGFuaW1hdGlvbnM6IGFuaW1hdGlvbnMsXG4gICAgICBhbmRyb2lkOiBhbmRyb2lkXG4gICAgfTtcbiAgfV07XG59XG5cbnZhciAkY29tcGlsZU1pbkVyciA9IG1pbkVycignJGNvbXBpbGUnKTtcblxuLyoqXG4gKiBAbmdkb2Mgc2VydmljZVxuICogQG5hbWUgJHRlbXBsYXRlUmVxdWVzdFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIGAkdGVtcGxhdGVSZXF1ZXN0YCBzZXJ2aWNlIGRvd25sb2FkcyB0aGUgcHJvdmlkZWQgdGVtcGxhdGUgdXNpbmcgYCRodHRwYCBhbmQsIHVwb24gc3VjY2VzcyxcbiAqIHN0b3JlcyB0aGUgY29udGVudHMgaW5zaWRlIG9mIGAkdGVtcGxhdGVDYWNoZWAuIElmIHRoZSBIVFRQIHJlcXVlc3QgZmFpbHMgb3IgdGhlIHJlc3BvbnNlIGRhdGFcbiAqIG9mIHRoZSBIVFRQIHJlcXVlc3QgaXMgZW1wdHkgdGhlbiBhIGAkY29tcGlsZWAgZXJyb3Igd2lsbCBiZSB0aHJvd24gKHRoZSBleGNlcHRpb24gY2FuIGJlIHRod2FydGVkXG4gKiBieSBzZXR0aW5nIHRoZSAybmQgcGFyYW1ldGVyIG9mIHRoZSBmdW5jdGlvbiB0byB0cnVlKS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHBsIFRoZSBIVFRQIHJlcXVlc3QgdGVtcGxhdGUgVVJMXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBpZ25vcmVSZXF1ZXN0RXJyb3IgV2hldGhlciBvciBub3QgdG8gaWdub3JlIHRoZSBleGNlcHRpb24gd2hlbiB0aGUgcmVxdWVzdCBmYWlscyBvciB0aGUgdGVtcGxhdGUgaXMgZW1wdHlcbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlfSB0aGUgSFRUUCBQcm9taXNlIGZvciB0aGUgZ2l2ZW4uXG4gKlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvdGFsUGVuZGluZ1JlcXVlc3RzIHRvdGFsIGFtb3VudCBvZiBwZW5kaW5nIHRlbXBsYXRlIHJlcXVlc3RzIGJlaW5nIGRvd25sb2FkZWQuXG4gKi9cbmZ1bmN0aW9uICRUZW1wbGF0ZVJlcXVlc3RQcm92aWRlcigpIHtcbiAgdGhpcy4kZ2V0ID0gWyckdGVtcGxhdGVDYWNoZScsICckaHR0cCcsICckcScsIGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlLCAkaHR0cCwgJHEpIHtcbiAgICBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0Rm4odHBsLCBpZ25vcmVSZXF1ZXN0RXJyb3IpIHtcbiAgICAgIHZhciBzZWxmID0gaGFuZGxlUmVxdWVzdEZuO1xuICAgICAgc2VsZi50b3RhbFBlbmRpbmdSZXF1ZXN0cysrO1xuXG4gICAgICB2YXIgdHJhbnNmb3JtUmVzcG9uc2UgPSAkaHR0cC5kZWZhdWx0cyAmJiAkaHR0cC5kZWZhdWx0cy50cmFuc2Zvcm1SZXNwb25zZTtcblxuICAgICAgaWYgKGlzQXJyYXkodHJhbnNmb3JtUmVzcG9uc2UpKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbCA9IHRyYW5zZm9ybVJlc3BvbnNlO1xuICAgICAgICB0cmFuc2Zvcm1SZXNwb25zZSA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yaWdpbmFsLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgdmFyIHRyYW5zZm9ybWVyID0gb3JpZ2luYWxbaV07XG4gICAgICAgICAgaWYgKHRyYW5zZm9ybWVyICE9PSBkZWZhdWx0SHR0cFJlc3BvbnNlVHJhbnNmb3JtKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1SZXNwb25zZS5wdXNoKHRyYW5zZm9ybWVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHJhbnNmb3JtUmVzcG9uc2UgPT09IGRlZmF1bHRIdHRwUmVzcG9uc2VUcmFuc2Zvcm0pIHtcbiAgICAgICAgdHJhbnNmb3JtUmVzcG9uc2UgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgaHR0cE9wdGlvbnMgPSB7XG4gICAgICAgIGNhY2hlOiAkdGVtcGxhdGVDYWNoZSxcbiAgICAgICAgdHJhbnNmb3JtUmVzcG9uc2U6IHRyYW5zZm9ybVJlc3BvbnNlXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gJGh0dHAuZ2V0KHRwbCwgaHR0cE9wdGlvbnMpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgdmFyIGh0bWwgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgIHNlbGYudG90YWxQZW5kaW5nUmVxdWVzdHMtLTtcbiAgICAgICAgICAkdGVtcGxhdGVDYWNoZS5wdXQodHBsLCBodG1sKTtcbiAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgfSwgaGFuZGxlRXJyb3IpO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgICAgc2VsZi50b3RhbFBlbmRpbmdSZXF1ZXN0cy0tO1xuICAgICAgICBpZiAoIWlnbm9yZVJlcXVlc3RFcnJvcikge1xuICAgICAgICAgIHRocm93ICRjb21waWxlTWluRXJyKCd0cGxvYWQnLCAnRmFpbGVkIHRvIGxvYWQgdGVtcGxhdGU6IHswfScsIHRwbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICRxLnJlamVjdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZVJlcXVlc3RGbi50b3RhbFBlbmRpbmdSZXF1ZXN0cyA9IDA7XG5cbiAgICByZXR1cm4gaGFuZGxlUmVxdWVzdEZuO1xuICB9XTtcbn1cblxuZnVuY3Rpb24gJCRUZXN0YWJpbGl0eVByb3ZpZGVyKCkge1xuICB0aGlzLiRnZXQgPSBbJyRyb290U2NvcGUnLCAnJGJyb3dzZXInLCAnJGxvY2F0aW9uJyxcbiAgICAgICBmdW5jdGlvbigkcm9vdFNjb3BlLCAgICRicm93c2VyLCAgICRsb2NhdGlvbikge1xuXG4gICAgLyoqXG4gICAgICogQG5hbWUgJHRlc3RhYmlsaXR5XG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBUaGUgcHJpdmF0ZSAkJHRlc3RhYmlsaXR5IHNlcnZpY2UgcHJvdmlkZXMgYSBjb2xsZWN0aW9uIG9mIG1ldGhvZHMgZm9yIHVzZSB3aGVuIGRlYnVnZ2luZ1xuICAgICAqIG9yIGJ5IGF1dG9tYXRlZCB0ZXN0IGFuZCBkZWJ1Z2dpbmcgdG9vbHMuXG4gICAgICovXG4gICAgdmFyIHRlc3RhYmlsaXR5ID0ge307XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSAkJHRlc3RhYmlsaXR5I2ZpbmRCaW5kaW5nc1xuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IGFyZSBib3VuZCAodmlhIG5nLWJpbmQgb3Ige3t9fSlcbiAgICAgKiB0byBleHByZXNzaW9ucyBtYXRjaGluZyB0aGUgaW5wdXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQgcm9vdCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiBUaGUgYmluZGluZyBleHByZXNzaW9uIHRvIG1hdGNoLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0X2V4YWN0TWF0Y2ggSWYgdHJ1ZSwgb25seSByZXR1cm5zIGV4YWN0IG1hdGNoZXNcbiAgICAgKiAgICAgZm9yIHRoZSBleHByZXNzaW9uLiBGaWx0ZXJzIGFuZCB3aGl0ZXNwYWNlIGFyZSBpZ25vcmVkLlxuICAgICAqL1xuICAgIHRlc3RhYmlsaXR5LmZpbmRCaW5kaW5ncyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Npb24sIG9wdF9leGFjdE1hdGNoKSB7XG4gICAgICB2YXIgYmluZGluZ3MgPSBlbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ25nLWJpbmRpbmcnKTtcbiAgICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbihiaW5kaW5nKSB7XG4gICAgICAgIHZhciBkYXRhQmluZGluZyA9IGFuZ3VsYXIuZWxlbWVudChiaW5kaW5nKS5kYXRhKCckYmluZGluZycpO1xuICAgICAgICBpZiAoZGF0YUJpbmRpbmcpIHtcbiAgICAgICAgICBmb3JFYWNoKGRhdGFCaW5kaW5nLCBmdW5jdGlvbihiaW5kaW5nTmFtZSkge1xuICAgICAgICAgICAgaWYgKG9wdF9leGFjdE1hdGNoKSB7XG4gICAgICAgICAgICAgIHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4cCgnKF58XFxcXHMpJyArIGVzY2FwZUZvclJlZ2V4cChleHByZXNzaW9uKSArICcoXFxcXHN8XFxcXHx8JCknKTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoZXIudGVzdChiaW5kaW5nTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2goYmluZGluZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChiaW5kaW5nTmFtZS5pbmRleE9mKGV4cHJlc3Npb24pICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKGJpbmRpbmcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lICQkdGVzdGFiaWxpdHkjZmluZE1vZGVsc1xuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IGFyZSB0d28td2F5IGZvdW5kIHZpYSBuZy1tb2RlbCB0b1xuICAgICAqIGV4cHJlc3Npb25zIG1hdGNoaW5nIHRoZSBpbnB1dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCByb290IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIFRoZSBtb2RlbCBleHByZXNzaW9uIHRvIG1hdGNoLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0X2V4YWN0TWF0Y2ggSWYgdHJ1ZSwgb25seSByZXR1cm5zIGV4YWN0IG1hdGNoZXNcbiAgICAgKiAgICAgZm9yIHRoZSBleHByZXNzaW9uLlxuICAgICAqL1xuICAgIHRlc3RhYmlsaXR5LmZpbmRNb2RlbHMgPSBmdW5jdGlvbihlbGVtZW50LCBleHByZXNzaW9uLCBvcHRfZXhhY3RNYXRjaCkge1xuICAgICAgdmFyIHByZWZpeGVzID0gWyduZy0nLCAnZGF0YS1uZy0nLCAnbmdcXFxcOiddO1xuICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCBwcmVmaXhlcy5sZW5ndGg7ICsrcCkge1xuICAgICAgICB2YXIgYXR0cmlidXRlRXF1YWxzID0gb3B0X2V4YWN0TWF0Y2ggPyAnPScgOiAnKj0nO1xuICAgICAgICB2YXIgc2VsZWN0b3IgPSAnWycgKyBwcmVmaXhlc1twXSArICdtb2RlbCcgKyBhdHRyaWJ1dGVFcXVhbHMgKyAnXCInICsgZXhwcmVzc2lvbiArICdcIl0nO1xuICAgICAgICB2YXIgZWxlbWVudHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lICQkdGVzdGFiaWxpdHkjZ2V0TG9jYXRpb25cbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFNob3J0Y3V0IGZvciBnZXR0aW5nIHRoZSBsb2NhdGlvbiBpbiBhIGJyb3dzZXIgYWdub3N0aWMgd2F5LiBSZXR1cm5zXG4gICAgICogICAgIHRoZSBwYXRoLCBzZWFyY2gsIGFuZCBoYXNoLiAoZS5nLiAvcGF0aD9hPWIjaGFzaClcbiAgICAgKi9cbiAgICB0ZXN0YWJpbGl0eS5nZXRMb2NhdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICRsb2NhdGlvbi51cmwoKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQG5hbWUgJCR0ZXN0YWJpbGl0eSNzZXRMb2NhdGlvblxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogU2hvcnRjdXQgZm9yIG5hdmlnYXRpbmcgdG8gYSBsb2NhdGlvbiB3aXRob3V0IGRvaW5nIGEgZnVsbCBwYWdlIHJlbG9hZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGxvY2F0aW9uIHVybCAocGF0aCwgc2VhcmNoIGFuZCBoYXNoLFxuICAgICAqICAgICBlLmcuIC9wYXRoP2E9YiNoYXNoKSB0byBnbyB0by5cbiAgICAgKi9cbiAgICB0ZXN0YWJpbGl0eS5zZXRMb2NhdGlvbiA9IGZ1bmN0aW9uKHVybCkge1xuICAgICAgaWYgKHVybCAhPT0gJGxvY2F0aW9uLnVybCgpKSB7XG4gICAgICAgICRsb2NhdGlvbi51cmwodXJsKTtcbiAgICAgICAgJHJvb3RTY29wZS4kZGlnZXN0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lICQkdGVzdGFiaWxpdHkjd2hlblN0YWJsZVxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogQ2FsbHMgdGhlIGNhbGxiYWNrIHdoZW4gJHRpbWVvdXQgYW5kICRodHRwIHJlcXVlc3RzIGFyZSBjb21wbGV0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAqL1xuICAgIHRlc3RhYmlsaXR5LndoZW5TdGFibGUgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgJGJyb3dzZXIubm90aWZ5V2hlbk5vT3V0c3RhbmRpbmdSZXF1ZXN0cyhjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHJldHVybiB0ZXN0YWJpbGl0eTtcbiAgfV07XG59XG5cbmZ1bmN0aW9uICRUaW1lb3V0UHJvdmlkZXIoKSB7XG4gIHRoaXMuJGdldCA9IFsnJHJvb3RTY29wZScsICckYnJvd3NlcicsICckcScsICckJHEnLCAnJGV4Y2VwdGlvbkhhbmRsZXInLFxuICAgICAgIGZ1bmN0aW9uKCRyb290U2NvcGUsICAgJGJyb3dzZXIsICAgJHEsICAgJCRxLCAgICRleGNlcHRpb25IYW5kbGVyKSB7XG4gICAgdmFyIGRlZmVycmVkcyA9IHt9O1xuXG5cbiAgICAgLyoqXG4gICAgICAqIEBuZ2RvYyBzZXJ2aWNlXG4gICAgICAqIEBuYW1lICR0aW1lb3V0XG4gICAgICAqXG4gICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAgKiBBbmd1bGFyJ3Mgd3JhcHBlciBmb3IgYHdpbmRvdy5zZXRUaW1lb3V0YC4gVGhlIGBmbmAgZnVuY3Rpb24gaXMgd3JhcHBlZCBpbnRvIGEgdHJ5L2NhdGNoXG4gICAgICAqIGJsb2NrIGFuZCBkZWxlZ2F0ZXMgYW55IGV4Y2VwdGlvbnMgdG9cbiAgICAgICoge0BsaW5rIG5nLiRleGNlcHRpb25IYW5kbGVyICRleGNlcHRpb25IYW5kbGVyfSBzZXJ2aWNlLlxuICAgICAgKlxuICAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHJlZ2lzdGVyaW5nIGEgdGltZW91dCBmdW5jdGlvbiBpcyBhIHByb21pc2UsIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgd2hlblxuICAgICAgKiB0aGUgdGltZW91dCBpcyByZWFjaGVkIGFuZCB0aGUgdGltZW91dCBmdW5jdGlvbiBpcyBleGVjdXRlZC5cbiAgICAgICpcbiAgICAgICogVG8gY2FuY2VsIGEgdGltZW91dCByZXF1ZXN0LCBjYWxsIGAkdGltZW91dC5jYW5jZWwocHJvbWlzZSlgLlxuICAgICAgKlxuICAgICAgKiBJbiB0ZXN0cyB5b3UgY2FuIHVzZSB7QGxpbmsgbmdNb2NrLiR0aW1lb3V0IGAkdGltZW91dC5mbHVzaCgpYH0gdG9cbiAgICAgICogc3luY2hyb25vdXNseSBmbHVzaCB0aGUgcXVldWUgb2YgZGVmZXJyZWQgZnVuY3Rpb25zLlxuICAgICAgKlxuICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGZuIEEgZnVuY3Rpb24sIHdob3NlIGV4ZWN1dGlvbiBzaG91bGQgYmUgZGVsYXllZC5cbiAgICAgICogQHBhcmFtIHtudW1iZXI9fSBbZGVsYXk9MF0gRGVsYXkgaW4gbWlsbGlzZWNvbmRzLlxuICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBbaW52b2tlQXBwbHk9dHJ1ZV0gSWYgc2V0IHRvIGBmYWxzZWAgc2tpcHMgbW9kZWwgZGlydHkgY2hlY2tpbmcsIG90aGVyd2lzZVxuICAgICAgKiAgIHdpbGwgaW52b2tlIGBmbmAgd2l0aGluIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkYXBwbHkgJGFwcGx5fSBibG9jay5cbiAgICAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgdGhhdCB3aWxsIGJlIHJlc29sdmVkIHdoZW4gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC4gVGhlIHZhbHVlIHRoaXNcbiAgICAgICogICBwcm9taXNlIHdpbGwgYmUgcmVzb2x2ZWQgd2l0aCBpcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBgZm5gIGZ1bmN0aW9uLlxuICAgICAgKlxuICAgICAgKi9cbiAgICBmdW5jdGlvbiB0aW1lb3V0KGZuLCBkZWxheSwgaW52b2tlQXBwbHkpIHtcbiAgICAgIHZhciBza2lwQXBwbHkgPSAoaXNEZWZpbmVkKGludm9rZUFwcGx5KSAmJiAhaW52b2tlQXBwbHkpLFxuICAgICAgICAgIGRlZmVycmVkID0gKHNraXBBcHBseSA/ICQkcSA6ICRxKS5kZWZlcigpLFxuICAgICAgICAgIHByb21pc2UgPSBkZWZlcnJlZC5wcm9taXNlLFxuICAgICAgICAgIHRpbWVvdXRJZDtcblxuICAgICAgdGltZW91dElkID0gJGJyb3dzZXIuZGVmZXIoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZShmbigpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGRlZmVycmVkLnJlamVjdChlKTtcbiAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICBkZWxldGUgZGVmZXJyZWRzW3Byb21pc2UuJCR0aW1lb3V0SWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFza2lwQXBwbHkpICRyb290U2NvcGUuJGFwcGx5KCk7XG4gICAgICB9LCBkZWxheSk7XG5cbiAgICAgIHByb21pc2UuJCR0aW1lb3V0SWQgPSB0aW1lb3V0SWQ7XG4gICAgICBkZWZlcnJlZHNbdGltZW91dElkXSA9IGRlZmVycmVkO1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cblxuICAgICAvKipcbiAgICAgICogQG5nZG9jIG1ldGhvZFxuICAgICAgKiBAbmFtZSAkdGltZW91dCNjYW5jZWxcbiAgICAgICpcbiAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAqIENhbmNlbHMgYSB0YXNrIGFzc29jaWF0ZWQgd2l0aCB0aGUgYHByb21pc2VgLiBBcyBhIHJlc3VsdCBvZiB0aGlzLCB0aGUgcHJvbWlzZSB3aWxsIGJlXG4gICAgICAqIHJlc29sdmVkIHdpdGggYSByZWplY3Rpb24uXG4gICAgICAqXG4gICAgICAqIEBwYXJhbSB7UHJvbWlzZT19IHByb21pc2UgUHJvbWlzZSByZXR1cm5lZCBieSB0aGUgYCR0aW1lb3V0YCBmdW5jdGlvbi5cbiAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB0YXNrIGhhc24ndCBleGVjdXRlZCB5ZXQgYW5kIHdhcyBzdWNjZXNzZnVsbHlcbiAgICAgICogICBjYW5jZWxlZC5cbiAgICAgICovXG4gICAgdGltZW91dC5jYW5jZWwgPSBmdW5jdGlvbihwcm9taXNlKSB7XG4gICAgICBpZiAocHJvbWlzZSAmJiBwcm9taXNlLiQkdGltZW91dElkIGluIGRlZmVycmVkcykge1xuICAgICAgICBkZWZlcnJlZHNbcHJvbWlzZS4kJHRpbWVvdXRJZF0ucmVqZWN0KCdjYW5jZWxlZCcpO1xuICAgICAgICBkZWxldGUgZGVmZXJyZWRzW3Byb21pc2UuJCR0aW1lb3V0SWRdO1xuICAgICAgICByZXR1cm4gJGJyb3dzZXIuZGVmZXIuY2FuY2VsKHByb21pc2UuJCR0aW1lb3V0SWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGltZW91dDtcbiAgfV07XG59XG5cbi8vIE5PVEU6ICBUaGUgdXNhZ2Ugb2Ygd2luZG93IGFuZCBkb2N1bWVudCBpbnN0ZWFkIG9mICR3aW5kb3cgYW5kICRkb2N1bWVudCBoZXJlIGlzXG4vLyBkZWxpYmVyYXRlLiAgVGhpcyBzZXJ2aWNlIGRlcGVuZHMgb24gdGhlIHNwZWNpZmljIGJlaGF2aW9yIG9mIGFuY2hvciBub2RlcyBjcmVhdGVkIGJ5IHRoZVxuLy8gYnJvd3NlciAocmVzb2x2aW5nIGFuZCBwYXJzaW5nIFVSTHMpIHRoYXQgaXMgdW5saWtlbHkgdG8gYmUgcHJvdmlkZWQgYnkgbW9jayBvYmplY3RzIGFuZFxuLy8gY2F1c2UgdXMgdG8gYnJlYWsgdGVzdHMuICBJbiBhZGRpdGlvbiwgd2hlbiB0aGUgYnJvd3NlciByZXNvbHZlcyBhIFVSTCBmb3IgWEhSLCBpdFxuLy8gZG9lc24ndCBrbm93IGFib3V0IG1vY2tlZCBsb2NhdGlvbnMgYW5kIHJlc29sdmVzIFVSTHMgdG8gdGhlIHJlYWwgZG9jdW1lbnQgLSB3aGljaCBpc1xuLy8gZXhhY3RseSB0aGUgYmVoYXZpb3IgbmVlZGVkIGhlcmUuICBUaGVyZSBpcyBsaXR0bGUgdmFsdWUgaXMgbW9ja2luZyB0aGVzZSBvdXQgZm9yIHRoaXNcbi8vIHNlcnZpY2UuXG52YXIgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbnZhciBvcmlnaW5VcmwgPSB1cmxSZXNvbHZlKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuXG4vKipcbiAqXG4gKiBJbXBsZW1lbnRhdGlvbiBOb3RlcyBmb3Igbm9uLUlFIGJyb3dzZXJzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBBc3NpZ25pbmcgYSBVUkwgdG8gdGhlIGhyZWYgcHJvcGVydHkgb2YgYW4gYW5jaG9yIERPTSBub2RlLCBldmVuIG9uZSBhdHRhY2hlZCB0byB0aGUgRE9NLFxuICogcmVzdWx0cyBib3RoIGluIHRoZSBub3JtYWxpemluZyBhbmQgcGFyc2luZyBvZiB0aGUgVVJMLiAgTm9ybWFsaXppbmcgbWVhbnMgdGhhdCBhIHJlbGF0aXZlXG4gKiBVUkwgd2lsbCBiZSByZXNvbHZlZCBpbnRvIGFuIGFic29sdXRlIFVSTCBpbiB0aGUgY29udGV4dCBvZiB0aGUgYXBwbGljYXRpb24gZG9jdW1lbnQuXG4gKiBQYXJzaW5nIG1lYW5zIHRoYXQgdGhlIGFuY2hvciBub2RlJ3MgaG9zdCwgaG9zdG5hbWUsIHByb3RvY29sLCBwb3J0LCBwYXRobmFtZSBhbmQgcmVsYXRlZFxuICogcHJvcGVydGllcyBhcmUgYWxsIHBvcHVsYXRlZCB0byByZWZsZWN0IHRoZSBub3JtYWxpemVkIFVSTC4gIFRoaXMgYXBwcm9hY2ggaGFzIHdpZGVcbiAqIGNvbXBhdGliaWxpdHkgLSBTYWZhcmkgMSssIE1vemlsbGEgMSssIE9wZXJhIDcrLGUgZXRjLiAgU2VlXG4gKiBodHRwOi8vd3d3LmFwdGFuYS5jb20vcmVmZXJlbmNlL2h0bWwvYXBpL0hUTUxBbmNob3JFbGVtZW50Lmh0bWxcbiAqXG4gKiBJbXBsZW1lbnRhdGlvbiBOb3RlcyBmb3IgSUVcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogSUUgPj0gOCBhbmQgPD0gMTAgbm9ybWFsaXplcyB0aGUgVVJMIHdoZW4gYXNzaWduZWQgdG8gdGhlIGFuY2hvciBub2RlIHNpbWlsYXIgdG8gdGhlIG90aGVyXG4gKiBicm93c2Vycy4gIEhvd2V2ZXIsIHRoZSBwYXJzZWQgY29tcG9uZW50cyB3aWxsIG5vdCBiZSBzZXQgaWYgdGhlIFVSTCBhc3NpZ25lZCBkaWQgbm90IHNwZWNpZnlcbiAqIHRoZW0uICAoZS5nLiBpZiB5b3UgYXNzaWduIGEuaHJlZiA9IFwiZm9vXCIsIHRoZW4gYS5wcm90b2NvbCwgYS5ob3N0LCBldGMuIHdpbGwgYmUgZW1wdHkuKSAgV2VcbiAqIHdvcmsgYXJvdW5kIHRoYXQgYnkgcGVyZm9ybWluZyB0aGUgcGFyc2luZyBpbiBhIDJuZCBzdGVwIGJ5IHRha2luZyBhIHByZXZpb3VzbHkgbm9ybWFsaXplZFxuICogVVJMIChlLmcuIGJ5IGFzc2lnbmluZyB0byBhLmhyZWYpIGFuZCBhc3NpZ25pbmcgaXQgYS5ocmVmIGFnYWluLiAgVGhpcyBjb3JyZWN0bHkgcG9wdWxhdGVzIHRoZVxuICogcHJvcGVydGllcyBzdWNoIGFzIHByb3RvY29sLCBob3N0bmFtZSwgcG9ydCwgZXRjLlxuICpcbiAqIElFNyBkb2VzIG5vdCBub3JtYWxpemUgdGhlIFVSTCB3aGVuIGFzc2lnbmVkIHRvIGFuIGFuY2hvciBub2RlLiAgKEFwcGFyZW50bHksIGl0IGRvZXMsIGlmIG9uZVxuICogdXNlcyB0aGUgaW5uZXIgSFRNTCBhcHByb2FjaCB0byBhc3NpZ24gdGhlIFVSTCBhcyBwYXJ0IG9mIGFuIEhUTUwgc25pcHBldCAtXG4gKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80NzI3MjkpICBIb3dldmVyLCBzZXR0aW5nIGltZ1tzcmNdIGRvZXMgbm9ybWFsaXplIHRoZSBVUkwuXG4gKiBVbmZvcnR1bmF0ZWx5LCBzZXR0aW5nIGltZ1tzcmNdIHRvIHNvbWV0aGluZyBsaWtlIFwiamF2YXNjcmlwdDpmb29cIiBvbiBJRSB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuICogU2luY2UgdGhlIHByaW1hcnkgdXNhZ2UgZm9yIG5vcm1hbGl6aW5nIFVSTHMgaXMgdG8gc2FuaXRpemUgc3VjaCBVUkxzLCB3ZSBjYW4ndCB1c2UgdGhhdFxuICogbWV0aG9kIGFuZCBJRSA8IDggaXMgdW5zdXBwb3J0ZWQuXG4gKlxuICogUmVmZXJlbmNlczpcbiAqICAgaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEFuY2hvckVsZW1lbnRcbiAqICAgaHR0cDovL3d3dy5hcHRhbmEuY29tL3JlZmVyZW5jZS9odG1sL2FwaS9IVE1MQW5jaG9yRWxlbWVudC5odG1sXG4gKiAgIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICogICBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL3B1bGwvMjkwMlxuICogICBodHRwOi8vamFtZXMucGFkb2xzZXkuY29tL2phdmFzY3JpcHQvcGFyc2luZy11cmxzLXdpdGgtdGhlLWRvbS9cbiAqXG4gKiBAa2luZCBmdW5jdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZC5cbiAqIEBkZXNjcmlwdGlvbiBOb3JtYWxpemVzIGFuZCBwYXJzZXMgYSBVUkwuXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIHRoZSBub3JtYWxpemVkIFVSTCBhcyBhIGRpY3Rpb25hcnkuXG4gKlxuICogICB8IG1lbWJlciBuYW1lICAgfCBEZXNjcmlwdGlvbiAgICB8XG4gKiAgIHwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXxcbiAqICAgfCBocmVmICAgICAgICAgIHwgQSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIHByb3ZpZGVkIFVSTCBpZiBpdCB3YXMgbm90IGFuIGFic29sdXRlIFVSTCB8XG4gKiAgIHwgcHJvdG9jb2wgICAgICB8IFRoZSBwcm90b2NvbCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIGNvbG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICB8IGhvc3QgICAgICAgICAgfCBUaGUgaG9zdCBhbmQgcG9ydCAoaWYgdGhlIHBvcnQgaXMgbm9uLWRlZmF1bHQpIG9mIHRoZSBub3JtYWxpemVkVXJsICAgIHxcbiAqICAgfCBzZWFyY2ggICAgICAgIHwgVGhlIHNlYXJjaCBwYXJhbXMsIG1pbnVzIHRoZSBxdWVzdGlvbiBtYXJrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgIHwgaGFzaCAgICAgICAgICB8IFRoZSBoYXNoIHN0cmluZywgbWludXMgdGhlIGhhc2ggc3ltYm9sXG4gKiAgIHwgaG9zdG5hbWUgICAgICB8IFRoZSBob3N0bmFtZVxuICogICB8IHBvcnQgICAgICAgICAgfCBUaGUgcG9ydCwgd2l0aG91dCBcIjpcIlxuICogICB8IHBhdGhuYW1lICAgICAgfCBUaGUgcGF0aG5hbWUsIGJlZ2lubmluZyB3aXRoIFwiL1wiXG4gKlxuICovXG5mdW5jdGlvbiB1cmxSZXNvbHZlKHVybCkge1xuICB2YXIgaHJlZiA9IHVybDtcblxuICBpZiAobXNpZSkge1xuICAgIC8vIE5vcm1hbGl6ZSBiZWZvcmUgcGFyc2UuICBSZWZlciBJbXBsZW1lbnRhdGlvbiBOb3RlcyBvbiB3aHkgdGhpcyBpc1xuICAgIC8vIGRvbmUgaW4gdHdvIHN0ZXBzIG9uIElFLlxuICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgaHJlZik7XG4gICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gIH1cblxuICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gIHJldHVybiB7XG4gICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJylcbiAgICAgID8gdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgIDogJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHJlcXVlc3QgVVJMIGFuZCBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGEgc2FtZS1vcmlnaW4gcmVxdWVzdCBhcyB0aGUgYXBwbGljYXRpb24gZG9jdW1lbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZXF1ZXN0VXJsIFRoZSB1cmwgb2YgdGhlIHJlcXVlc3QgYXMgYSBzdHJpbmcgdGhhdCB3aWxsIGJlIHJlc29sdmVkXG4gKiBvciBhIHBhcnNlZCBVUkwgb2JqZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHJlcXVlc3QgaXMgZm9yIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgYXBwbGljYXRpb24gZG9jdW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHVybElzU2FtZU9yaWdpbihyZXF1ZXN0VXJsKSB7XG4gIHZhciBwYXJzZWQgPSAoaXNTdHJpbmcocmVxdWVzdFVybCkpID8gdXJsUmVzb2x2ZShyZXF1ZXN0VXJsKSA6IHJlcXVlc3RVcmw7XG4gIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VcmwucHJvdG9jb2wgJiZcbiAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVXJsLmhvc3QpO1xufVxuXG4vKipcbiAqIEBuZ2RvYyBzZXJ2aWNlXG4gKiBAbmFtZSAkd2luZG93XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBIHJlZmVyZW5jZSB0byB0aGUgYnJvd3NlcidzIGB3aW5kb3dgIG9iamVjdC4gV2hpbGUgYHdpbmRvd2BcbiAqIGlzIGdsb2JhbGx5IGF2YWlsYWJsZSBpbiBKYXZhU2NyaXB0LCBpdCBjYXVzZXMgdGVzdGFiaWxpdHkgcHJvYmxlbXMsIGJlY2F1c2VcbiAqIGl0IGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiBJbiBhbmd1bGFyIHdlIGFsd2F5cyByZWZlciB0byBpdCB0aHJvdWdoIHRoZVxuICogYCR3aW5kb3dgIHNlcnZpY2UsIHNvIGl0IG1heSBiZSBvdmVycmlkZGVuLCByZW1vdmVkIG9yIG1vY2tlZCBmb3IgdGVzdGluZy5cbiAqXG4gKiBFeHByZXNzaW9ucywgbGlrZSB0aGUgb25lIGRlZmluZWQgZm9yIHRoZSBgbmdDbGlja2AgZGlyZWN0aXZlIGluIHRoZSBleGFtcGxlXG4gKiBiZWxvdywgYXJlIGV2YWx1YXRlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGN1cnJlbnQgc2NvcGUuICBUaGVyZWZvcmUsIHRoZXJlIGlzXG4gKiBubyByaXNrIG9mIGluYWR2ZXJ0ZW50bHkgY29kaW5nIGluIGEgZGVwZW5kZW5jeSBvbiBhIGdsb2JhbCB2YWx1ZSBpbiBzdWNoIGFuXG4gKiBleHByZXNzaW9uLlxuICpcbiAqIEBleGFtcGxlXG4gICA8ZXhhbXBsZSBtb2R1bGU9XCJ3aW5kb3dFeGFtcGxlXCI+XG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgPHNjcmlwdD5cbiAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCd3aW5kb3dFeGFtcGxlJywgW10pXG4gICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyR3aW5kb3cnLCBmdW5jdGlvbigkc2NvcGUsICR3aW5kb3cpIHtcbiAgICAgICAgICAgICAkc2NvcGUuZ3JlZXRpbmcgPSAnSGVsbG8sIFdvcmxkISc7XG4gICAgICAgICAgICAgJHNjb3BlLmRvR3JlZXRpbmcgPSBmdW5jdGlvbihncmVldGluZykge1xuICAgICAgICAgICAgICAgJHdpbmRvdy5hbGVydChncmVldGluZyk7XG4gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgfV0pO1xuICAgICAgIDwvc2NyaXB0PlxuICAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XG4gICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuZy1tb2RlbD1cImdyZWV0aW5nXCIgLz5cbiAgICAgICAgIDxidXR0b24gbmctY2xpY2s9XCJkb0dyZWV0aW5nKGdyZWV0aW5nKVwiPkFMRVJUPC9idXR0b24+XG4gICAgICAgPC9kaXY+XG4gICAgIDwvZmlsZT5cbiAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgaXQoJ3Nob3VsZCBkaXNwbGF5IHRoZSBncmVldGluZyBpbiB0aGUgaW5wdXQgYm94JywgZnVuY3Rpb24oKSB7XG4gICAgICAgZWxlbWVudChieS5tb2RlbCgnZ3JlZXRpbmcnKSkuc2VuZEtleXMoJ0hlbGxvLCBFMkUgVGVzdHMnKTtcbiAgICAgICAvLyBJZiB3ZSBjbGljayB0aGUgYnV0dG9uIGl0IHdpbGwgYmxvY2sgdGhlIHRlc3QgcnVubmVyXG4gICAgICAgLy8gZWxlbWVudCgnOmJ1dHRvbicpLmNsaWNrKCk7XG4gICAgICB9KTtcbiAgICAgPC9maWxlPlxuICAgPC9leGFtcGxlPlxuICovXG5mdW5jdGlvbiAkV2luZG93UHJvdmlkZXIoKSB7XG4gIHRoaXMuJGdldCA9IHZhbHVlRm4od2luZG93KTtcbn1cblxuLyogZ2xvYmFsIGN1cnJlbmN5RmlsdGVyOiB0cnVlLFxuIGRhdGVGaWx0ZXI6IHRydWUsXG4gZmlsdGVyRmlsdGVyOiB0cnVlLFxuIGpzb25GaWx0ZXI6IHRydWUsXG4gbGltaXRUb0ZpbHRlcjogdHJ1ZSxcbiBsb3dlcmNhc2VGaWx0ZXI6IHRydWUsXG4gbnVtYmVyRmlsdGVyOiB0cnVlLFxuIG9yZGVyQnlGaWx0ZXI6IHRydWUsXG4gdXBwZXJjYXNlRmlsdGVyOiB0cnVlLFxuICovXG5cbi8qKlxuICogQG5nZG9jIHByb3ZpZGVyXG4gKiBAbmFtZSAkZmlsdGVyUHJvdmlkZXJcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIEZpbHRlcnMgYXJlIGp1c3QgZnVuY3Rpb25zIHdoaWNoIHRyYW5zZm9ybSBpbnB1dCB0byBhbiBvdXRwdXQuIEhvd2V2ZXIgZmlsdGVycyBuZWVkIHRvIGJlXG4gKiBEZXBlbmRlbmN5IEluamVjdGVkLiBUbyBhY2hpZXZlIHRoaXMgYSBmaWx0ZXIgZGVmaW5pdGlvbiBjb25zaXN0cyBvZiBhIGZhY3RvcnkgZnVuY3Rpb24gd2hpY2ggaXNcbiAqIGFubm90YXRlZCB3aXRoIGRlcGVuZGVuY2llcyBhbmQgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGEgZmlsdGVyIGZ1bmN0aW9uLlxuICpcbiAqIGBgYGpzXG4gKiAgIC8vIEZpbHRlciByZWdpc3RyYXRpb25cbiAqICAgZnVuY3Rpb24gTXlNb2R1bGUoJHByb3ZpZGUsICRmaWx0ZXJQcm92aWRlcikge1xuICogICAgIC8vIGNyZWF0ZSBhIHNlcnZpY2UgdG8gZGVtb25zdHJhdGUgaW5qZWN0aW9uIChub3QgYWx3YXlzIG5lZWRlZClcbiAqICAgICAkcHJvdmlkZS52YWx1ZSgnZ3JlZXQnLCBmdW5jdGlvbihuYW1lKXtcbiAqICAgICAgIHJldHVybiAnSGVsbG8gJyArIG5hbWUgKyAnISc7XG4gKiAgICAgfSk7XG4gKlxuICogICAgIC8vIHJlZ2lzdGVyIGEgZmlsdGVyIGZhY3Rvcnkgd2hpY2ggdXNlcyB0aGVcbiAqICAgICAvLyBncmVldCBzZXJ2aWNlIHRvIGRlbW9uc3RyYXRlIERJLlxuICogICAgICRmaWx0ZXJQcm92aWRlci5yZWdpc3RlcignZ3JlZXQnLCBmdW5jdGlvbihncmVldCl7XG4gKiAgICAgICAvLyByZXR1cm4gdGhlIGZpbHRlciBmdW5jdGlvbiB3aGljaCB1c2VzIHRoZSBncmVldCBzZXJ2aWNlXG4gKiAgICAgICAvLyB0byBnZW5lcmF0ZSBzYWx1dGF0aW9uXG4gKiAgICAgICByZXR1cm4gZnVuY3Rpb24odGV4dCkge1xuICogICAgICAgICAvLyBmaWx0ZXJzIG5lZWQgdG8gYmUgZm9yZ2l2aW5nIHNvIGNoZWNrIGlucHV0IHZhbGlkaXR5XG4gKiAgICAgICAgIHJldHVybiB0ZXh0ICYmIGdyZWV0KHRleHQpIHx8IHRleHQ7XG4gKiAgICAgICB9O1xuICogICAgIH0pO1xuICogICB9XG4gKiBgYGBcbiAqXG4gKiBUaGUgZmlsdGVyIGZ1bmN0aW9uIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYCRpbmplY3RvcmAgdW5kZXIgdGhlIGZpbHRlciBuYW1lIHN1ZmZpeCB3aXRoXG4gKiBgRmlsdGVyYC5cbiAqXG4gKiBgYGBqc1xuICogICBpdCgnc2hvdWxkIGJlIHRoZSBzYW1lIGluc3RhbmNlJywgaW5qZWN0KFxuICogICAgIGZ1bmN0aW9uKCRmaWx0ZXJQcm92aWRlcikge1xuICogICAgICAgJGZpbHRlclByb3ZpZGVyLnJlZ2lzdGVyKCdyZXZlcnNlJywgZnVuY3Rpb24oKXtcbiAqICAgICAgICAgcmV0dXJuIC4uLjtcbiAqICAgICAgIH0pO1xuICogICAgIH0sXG4gKiAgICAgZnVuY3Rpb24oJGZpbHRlciwgcmV2ZXJzZUZpbHRlcikge1xuICogICAgICAgZXhwZWN0KCRmaWx0ZXIoJ3JldmVyc2UnKSkudG9CZShyZXZlcnNlRmlsdGVyKTtcbiAqICAgICB9KTtcbiAqIGBgYFxuICpcbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgYW5ndWxhciBmaWx0ZXJzIHdvcmssIGFuZCBob3cgdG8gY3JlYXRlIHlvdXIgb3duIGZpbHRlcnMsIHNlZVxuICoge0BsaW5rIGd1aWRlL2ZpbHRlciBGaWx0ZXJzfSBpbiB0aGUgQW5ndWxhciBEZXZlbG9wZXIgR3VpZGUuXG4gKi9cblxuLyoqXG4gKiBAbmdkb2Mgc2VydmljZVxuICogQG5hbWUgJGZpbHRlclxuICogQGtpbmQgZnVuY3Rpb25cbiAqIEBkZXNjcmlwdGlvblxuICogRmlsdGVycyBhcmUgdXNlZCBmb3IgZm9ybWF0dGluZyBkYXRhIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAqXG4gKiBUaGUgZ2VuZXJhbCBzeW50YXggaW4gdGVtcGxhdGVzIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogICAgICAgICB7eyBleHByZXNzaW9uIFt8IGZpbHRlcl9uYW1lWzpwYXJhbWV0ZXJfdmFsdWVdIC4uLiBdIH19XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgZmlsdGVyIGZ1bmN0aW9uIHRvIHJldHJpZXZlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gdGhlIGZpbHRlciBmdW5jdGlvblxuICogQGV4YW1wbGVcbiAgIDxleGFtcGxlIG5hbWU9XCIkZmlsdGVyXCIgbW9kdWxlPVwiZmlsdGVyRXhhbXBsZVwiPlxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIk1haW5DdHJsXCI+XG4gICAgICAgIDxoMz57eyBvcmlnaW5hbFRleHQgfX08L2gzPlxuICAgICAgICA8aDM+e3sgZmlsdGVyZWRUZXh0IH19PC9oMz5cbiAgICAgICA8L2Rpdj5cbiAgICAgPC9maWxlPlxuXG4gICAgIDxmaWxlIG5hbWU9XCJzY3JpcHQuanNcIj5cbiAgICAgIGFuZ3VsYXIubW9kdWxlKCdmaWx0ZXJFeGFtcGxlJywgW10pXG4gICAgICAuY29udHJvbGxlcignTWFpbkN0cmwnLCBmdW5jdGlvbigkc2NvcGUsICRmaWx0ZXIpIHtcbiAgICAgICAgJHNjb3BlLm9yaWdpbmFsVGV4dCA9ICdoZWxsbyc7XG4gICAgICAgICRzY29wZS5maWx0ZXJlZFRleHQgPSAkZmlsdGVyKCd1cHBlcmNhc2UnKSgkc2NvcGUub3JpZ2luYWxUZXh0KTtcbiAgICAgIH0pO1xuICAgICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG4gICovXG4kRmlsdGVyUHJvdmlkZXIuJGluamVjdCA9IFsnJHByb3ZpZGUnXTtcbmZ1bmN0aW9uICRGaWx0ZXJQcm92aWRlcigkcHJvdmlkZSkge1xuICB2YXIgc3VmZml4ID0gJ0ZpbHRlcic7XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgJGZpbHRlclByb3ZpZGVyI3JlZ2lzdGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gbmFtZSBOYW1lIG9mIHRoZSBmaWx0ZXIgZnVuY3Rpb24sIG9yIGFuIG9iamVjdCBtYXAgb2YgZmlsdGVycyB3aGVyZVxuICAgKiAgICB0aGUga2V5cyBhcmUgdGhlIGZpbHRlciBuYW1lcyBhbmQgdGhlIHZhbHVlcyBhcmUgdGhlIGZpbHRlciBmYWN0b3JpZXMuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJlZ2lzdGVyZWQgZmlsdGVyIGluc3RhbmNlLCBvciBpZiBhIG1hcCBvZiBmaWx0ZXJzIHdhcyBwcm92aWRlZCB0aGVuIGEgbWFwXG4gICAqICAgIG9mIHRoZSByZWdpc3RlcmVkIGZpbHRlciBpbnN0YW5jZXMuXG4gICAqL1xuICBmdW5jdGlvbiByZWdpc3RlcihuYW1lLCBmYWN0b3J5KSB7XG4gICAgaWYgKGlzT2JqZWN0KG5hbWUpKSB7XG4gICAgICB2YXIgZmlsdGVycyA9IHt9O1xuICAgICAgZm9yRWFjaChuYW1lLCBmdW5jdGlvbihmaWx0ZXIsIGtleSkge1xuICAgICAgICBmaWx0ZXJzW2tleV0gPSByZWdpc3RlcihrZXksIGZpbHRlcik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJHByb3ZpZGUuZmFjdG9yeShuYW1lICsgc3VmZml4LCBmYWN0b3J5KTtcbiAgICB9XG4gIH1cbiAgdGhpcy5yZWdpc3RlciA9IHJlZ2lzdGVyO1xuXG4gIHRoaXMuJGdldCA9IFsnJGluamVjdG9yJywgZnVuY3Rpb24oJGluamVjdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHJldHVybiAkaW5qZWN0b3IuZ2V0KG5hbWUgKyBzdWZmaXgpO1xuICAgIH07XG4gIH1dO1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvKiBnbG9iYWxcbiAgICBjdXJyZW5jeUZpbHRlcjogZmFsc2UsXG4gICAgZGF0ZUZpbHRlcjogZmFsc2UsXG4gICAgZmlsdGVyRmlsdGVyOiBmYWxzZSxcbiAgICBqc29uRmlsdGVyOiBmYWxzZSxcbiAgICBsaW1pdFRvRmlsdGVyOiBmYWxzZSxcbiAgICBsb3dlcmNhc2VGaWx0ZXI6IGZhbHNlLFxuICAgIG51bWJlckZpbHRlcjogZmFsc2UsXG4gICAgb3JkZXJCeUZpbHRlcjogZmFsc2UsXG4gICAgdXBwZXJjYXNlRmlsdGVyOiBmYWxzZSxcbiAgKi9cblxuICByZWdpc3RlcignY3VycmVuY3knLCBjdXJyZW5jeUZpbHRlcik7XG4gIHJlZ2lzdGVyKCdkYXRlJywgZGF0ZUZpbHRlcik7XG4gIHJlZ2lzdGVyKCdmaWx0ZXInLCBmaWx0ZXJGaWx0ZXIpO1xuICByZWdpc3RlcignanNvbicsIGpzb25GaWx0ZXIpO1xuICByZWdpc3RlcignbGltaXRUbycsIGxpbWl0VG9GaWx0ZXIpO1xuICByZWdpc3RlcignbG93ZXJjYXNlJywgbG93ZXJjYXNlRmlsdGVyKTtcbiAgcmVnaXN0ZXIoJ251bWJlcicsIG51bWJlckZpbHRlcik7XG4gIHJlZ2lzdGVyKCdvcmRlckJ5Jywgb3JkZXJCeUZpbHRlcik7XG4gIHJlZ2lzdGVyKCd1cHBlcmNhc2UnLCB1cHBlcmNhc2VGaWx0ZXIpO1xufVxuXG4vKipcbiAqIEBuZ2RvYyBmaWx0ZXJcbiAqIEBuYW1lIGZpbHRlclxuICogQGtpbmQgZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNlbGVjdHMgYSBzdWJzZXQgb2YgaXRlbXMgZnJvbSBgYXJyYXlgIGFuZCByZXR1cm5zIGl0IGFzIGEgbmV3IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3VyY2UgYXJyYXkuXG4gKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R8ZnVuY3Rpb24oKX0gZXhwcmVzc2lvbiBUaGUgcHJlZGljYXRlIHRvIGJlIHVzZWQgZm9yIHNlbGVjdGluZyBpdGVtcyBmcm9tXG4gKiAgIGBhcnJheWAuXG4gKlxuICogICBDYW4gYmUgb25lIG9mOlxuICpcbiAqICAgLSBgc3RyaW5nYDogVGhlIHN0cmluZyBpcyBldmFsdWF0ZWQgYXMgYW4gZXhwcmVzc2lvbiBhbmQgdGhlIHJlc3VsdGluZyB2YWx1ZSBpcyB1c2VkIGZvciBzdWJzdHJpbmcgbWF0Y2ggYWdhaW5zdFxuICogICAgIHRoZSBjb250ZW50cyBvZiB0aGUgYGFycmF5YC4gQWxsIHN0cmluZ3Mgb3Igb2JqZWN0cyB3aXRoIHN0cmluZyBwcm9wZXJ0aWVzIGluIGBhcnJheWAgdGhhdCBjb250YWluIHRoaXMgc3RyaW5nXG4gKiAgICAgd2lsbCBiZSByZXR1cm5lZC4gVGhlIHByZWRpY2F0ZSBjYW4gYmUgbmVnYXRlZCBieSBwcmVmaXhpbmcgdGhlIHN0cmluZyB3aXRoIGAhYC5cbiAqXG4gKiAgIC0gYE9iamVjdGA6IEEgcGF0dGVybiBvYmplY3QgY2FuIGJlIHVzZWQgdG8gZmlsdGVyIHNwZWNpZmljIHByb3BlcnRpZXMgb24gb2JqZWN0cyBjb250YWluZWRcbiAqICAgICBieSBgYXJyYXlgLiBGb3IgZXhhbXBsZSBge25hbWU6XCJNXCIsIHBob25lOlwiMVwifWAgcHJlZGljYXRlIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIGl0ZW1zXG4gKiAgICAgd2hpY2ggaGF2ZSBwcm9wZXJ0eSBgbmFtZWAgY29udGFpbmluZyBcIk1cIiBhbmQgcHJvcGVydHkgYHBob25lYCBjb250YWluaW5nIFwiMVwiLiBBIHNwZWNpYWxcbiAqICAgICBwcm9wZXJ0eSBuYW1lIGAkYCBjYW4gYmUgdXNlZCAoYXMgaW4gYHskOlwidGV4dFwifWApIHRvIGFjY2VwdCBhIG1hdGNoIGFnYWluc3QgYW55XG4gKiAgICAgcHJvcGVydHkgb2YgdGhlIG9iamVjdC4gVGhhdCdzIGVxdWl2YWxlbnQgdG8gdGhlIHNpbXBsZSBzdWJzdHJpbmcgbWF0Y2ggd2l0aCBhIGBzdHJpbmdgXG4gKiAgICAgYXMgZGVzY3JpYmVkIGFib3ZlLiBUaGUgcHJlZGljYXRlIGNhbiBiZSBuZWdhdGVkIGJ5IHByZWZpeGluZyB0aGUgc3RyaW5nIHdpdGggYCFgLlxuICogICAgIEZvciBFeGFtcGxlIGB7bmFtZTogXCIhTVwifWAgcHJlZGljYXRlIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIGl0ZW1zIHdoaWNoIGhhdmUgcHJvcGVydHkgYG5hbWVgXG4gKiAgICAgbm90IGNvbnRhaW5pbmcgXCJNXCIuXG4gKlxuICogICAtIGBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpYDogQSBwcmVkaWNhdGUgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gd3JpdGUgYXJiaXRyYXJ5IGZpbHRlcnMuIFRoZVxuICogICAgIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAuIFRoZSBmaW5hbCByZXN1bHQgaXMgYW4gYXJyYXkgb2YgdGhvc2VcbiAqICAgICBlbGVtZW50cyB0aGF0IHRoZSBwcmVkaWNhdGUgcmV0dXJuZWQgdHJ1ZSBmb3IuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbihhY3R1YWwsIGV4cGVjdGVkKXx0cnVlfHVuZGVmaW5lZH0gY29tcGFyYXRvciBDb21wYXJhdG9yIHdoaWNoIGlzIHVzZWQgaW5cbiAqICAgICBkZXRlcm1pbmluZyBpZiB0aGUgZXhwZWN0ZWQgdmFsdWUgKGZyb20gdGhlIGZpbHRlciBleHByZXNzaW9uKSBhbmQgYWN0dWFsIHZhbHVlIChmcm9tXG4gKiAgICAgdGhlIG9iamVjdCBpbiB0aGUgYXJyYXkpIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgbWF0Y2guXG4gKlxuICogICBDYW4gYmUgb25lIG9mOlxuICpcbiAqICAgLSBgZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZClgOlxuICogICAgIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGdpdmVuIHRoZSBvYmplY3QgdmFsdWUgYW5kIHRoZSBwcmVkaWNhdGUgdmFsdWUgdG8gY29tcGFyZSBhbmRcbiAqICAgICBzaG91bGQgcmV0dXJuIHRydWUgaWYgdGhlIGl0ZW0gc2hvdWxkIGJlIGluY2x1ZGVkIGluIGZpbHRlcmVkIHJlc3VsdC5cbiAqXG4gKiAgIC0gYHRydWVgOiBBIHNob3J0aGFuZCBmb3IgYGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpIHsgcmV0dXJuIGFuZ3VsYXIuZXF1YWxzKGV4cGVjdGVkLCBhY3R1YWwpfWAuXG4gKiAgICAgdGhpcyBpcyBlc3NlbnRpYWxseSBzdHJpY3QgY29tcGFyaXNvbiBvZiBleHBlY3RlZCBhbmQgYWN0dWFsLlxuICpcbiAqICAgLSBgZmFsc2V8dW5kZWZpbmVkYDogQSBzaG9ydCBoYW5kIGZvciBhIGZ1bmN0aW9uIHdoaWNoIHdpbGwgbG9vayBmb3IgYSBzdWJzdHJpbmcgbWF0Y2ggaW4gY2FzZVxuICogICAgIGluc2Vuc2l0aXZlIHdheS5cbiAqXG4gKiBAZXhhbXBsZVxuICAgPGV4YW1wbGU+XG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgPGRpdiBuZy1pbml0PVwiZnJpZW5kcyA9IFt7bmFtZTonSm9obicsIHBob25lOic1NTUtMTI3Nid9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bmFtZTonTWFyeScsIHBob25lOic4MDAtQklHLU1BUlknfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge25hbWU6J01pa2UnLCBwaG9uZTonNTU1LTQzMjEnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge25hbWU6J0FkYW0nLCBwaG9uZTonNTU1LTU2NzgnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge25hbWU6J0p1bGllJywgcGhvbmU6JzU1NS04NzY1J30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOidKdWxpZXR0ZScsIHBob25lOic1NTUtNTY3OCd9XVwiPjwvZGl2PlxuXG4gICAgICAgU2VhcmNoOiA8aW5wdXQgbmctbW9kZWw9XCJzZWFyY2hUZXh0XCI+XG4gICAgICAgPHRhYmxlIGlkPVwic2VhcmNoVGV4dFJlc3VsdHNcIj5cbiAgICAgICAgIDx0cj48dGg+TmFtZTwvdGg+PHRoPlBob25lPC90aD48L3RyPlxuICAgICAgICAgPHRyIG5nLXJlcGVhdD1cImZyaWVuZCBpbiBmcmllbmRzIHwgZmlsdGVyOnNlYXJjaFRleHRcIj5cbiAgICAgICAgICAgPHRkPnt7ZnJpZW5kLm5hbWV9fTwvdGQ+XG4gICAgICAgICAgIDx0ZD57e2ZyaWVuZC5waG9uZX19PC90ZD5cbiAgICAgICAgIDwvdHI+XG4gICAgICAgPC90YWJsZT5cbiAgICAgICA8aHI+XG4gICAgICAgQW55OiA8aW5wdXQgbmctbW9kZWw9XCJzZWFyY2guJFwiPiA8YnI+XG4gICAgICAgTmFtZSBvbmx5IDxpbnB1dCBuZy1tb2RlbD1cInNlYXJjaC5uYW1lXCI+PGJyPlxuICAgICAgIFBob25lIG9ubHkgPGlucHV0IG5nLW1vZGVsPVwic2VhcmNoLnBob25lXCI+PGJyPlxuICAgICAgIEVxdWFsaXR5IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuZy1tb2RlbD1cInN0cmljdFwiPjxicj5cbiAgICAgICA8dGFibGUgaWQ9XCJzZWFyY2hPYmpSZXN1bHRzXCI+XG4gICAgICAgICA8dHI+PHRoPk5hbWU8L3RoPjx0aD5QaG9uZTwvdGg+PC90cj5cbiAgICAgICAgIDx0ciBuZy1yZXBlYXQ9XCJmcmllbmRPYmogaW4gZnJpZW5kcyB8IGZpbHRlcjpzZWFyY2g6c3RyaWN0XCI+XG4gICAgICAgICAgIDx0ZD57e2ZyaWVuZE9iai5uYW1lfX08L3RkPlxuICAgICAgICAgICA8dGQ+e3tmcmllbmRPYmoucGhvbmV9fTwvdGQ+XG4gICAgICAgICA8L3RyPlxuICAgICAgIDwvdGFibGU+XG4gICAgIDwvZmlsZT5cbiAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgIHZhciBleHBlY3RGcmllbmROYW1lcyA9IGZ1bmN0aW9uKGV4cGVjdGVkTmFtZXMsIGtleSkge1xuICAgICAgICAgZWxlbWVudC5hbGwoYnkucmVwZWF0ZXIoa2V5ICsgJyBpbiBmcmllbmRzJykuY29sdW1uKGtleSArICcubmFtZScpKS50aGVuKGZ1bmN0aW9uKGFycikge1xuICAgICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbih3ZCwgaSkge1xuICAgICAgICAgICAgIGV4cGVjdCh3ZC5nZXRUZXh0KCkpLnRvTWF0Y2goZXhwZWN0ZWROYW1lc1tpXSk7XG4gICAgICAgICAgIH0pO1xuICAgICAgICAgfSk7XG4gICAgICAgfTtcblxuICAgICAgIGl0KCdzaG91bGQgc2VhcmNoIGFjcm9zcyBhbGwgZmllbGRzIHdoZW4gZmlsdGVyaW5nIHdpdGggYSBzdHJpbmcnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgIHZhciBzZWFyY2hUZXh0ID0gZWxlbWVudChieS5tb2RlbCgnc2VhcmNoVGV4dCcpKTtcbiAgICAgICAgIHNlYXJjaFRleHQuY2xlYXIoKTtcbiAgICAgICAgIHNlYXJjaFRleHQuc2VuZEtleXMoJ20nKTtcbiAgICAgICAgIGV4cGVjdEZyaWVuZE5hbWVzKFsnTWFyeScsICdNaWtlJywgJ0FkYW0nXSwgJ2ZyaWVuZCcpO1xuXG4gICAgICAgICBzZWFyY2hUZXh0LmNsZWFyKCk7XG4gICAgICAgICBzZWFyY2hUZXh0LnNlbmRLZXlzKCc3NicpO1xuICAgICAgICAgZXhwZWN0RnJpZW5kTmFtZXMoWydKb2huJywgJ0p1bGllJ10sICdmcmllbmQnKTtcbiAgICAgICB9KTtcblxuICAgICAgIGl0KCdzaG91bGQgc2VhcmNoIGluIHNwZWNpZmljIGZpZWxkcyB3aGVuIGZpbHRlcmluZyB3aXRoIGEgcHJlZGljYXRlIG9iamVjdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgdmFyIHNlYXJjaEFueSA9IGVsZW1lbnQoYnkubW9kZWwoJ3NlYXJjaC4kJykpO1xuICAgICAgICAgc2VhcmNoQW55LmNsZWFyKCk7XG4gICAgICAgICBzZWFyY2hBbnkuc2VuZEtleXMoJ2knKTtcbiAgICAgICAgIGV4cGVjdEZyaWVuZE5hbWVzKFsnTWFyeScsICdNaWtlJywgJ0p1bGllJywgJ0p1bGlldHRlJ10sICdmcmllbmRPYmonKTtcbiAgICAgICB9KTtcbiAgICAgICBpdCgnc2hvdWxkIHVzZSBhIGVxdWFsIGNvbXBhcmlzb24gd2hlbiBjb21wYXJhdG9yIGlzIHRydWUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgIHZhciBzZWFyY2hOYW1lID0gZWxlbWVudChieS5tb2RlbCgnc2VhcmNoLm5hbWUnKSk7XG4gICAgICAgICB2YXIgc3RyaWN0ID0gZWxlbWVudChieS5tb2RlbCgnc3RyaWN0JykpO1xuICAgICAgICAgc2VhcmNoTmFtZS5jbGVhcigpO1xuICAgICAgICAgc2VhcmNoTmFtZS5zZW5kS2V5cygnSnVsaWUnKTtcbiAgICAgICAgIHN0cmljdC5jbGljaygpO1xuICAgICAgICAgZXhwZWN0RnJpZW5kTmFtZXMoWydKdWxpZSddLCAnZnJpZW5kT2JqJyk7XG4gICAgICAgfSk7XG4gICAgIDwvZmlsZT5cbiAgIDwvZXhhbXBsZT5cbiAqL1xuZnVuY3Rpb24gZmlsdGVyRmlsdGVyKCkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGV4cHJlc3Npb24sIGNvbXBhcmF0b3IpIHtcbiAgICBpZiAoIWlzQXJyYXkoYXJyYXkpKSByZXR1cm4gYXJyYXk7XG5cbiAgICB2YXIgY29tcGFyYXRvclR5cGUgPSB0eXBlb2YoY29tcGFyYXRvciksXG4gICAgICAgIHByZWRpY2F0ZXMgPSBbXTtcblxuICAgIHByZWRpY2F0ZXMuY2hlY2sgPSBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJlZGljYXRlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoIXByZWRpY2F0ZXNbal0odmFsdWUsIGluZGV4KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIGlmIChjb21wYXJhdG9yVHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGNvbXBhcmF0b3JUeXBlID09PSAnYm9vbGVhbicgJiYgY29tcGFyYXRvcikge1xuICAgICAgICBjb21wYXJhdG9yID0gZnVuY3Rpb24ob2JqLCB0ZXh0KSB7XG4gICAgICAgICAgcmV0dXJuIGFuZ3VsYXIuZXF1YWxzKG9iaiwgdGV4dCk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wYXJhdG9yID0gZnVuY3Rpb24ob2JqLCB0ZXh0KSB7XG4gICAgICAgICAgaWYgKG9iaiAmJiB0ZXh0ICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHR5cGVvZiB0ZXh0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZm9yICh2YXIgb2JqS2V5IGluIG9iaikge1xuICAgICAgICAgICAgICBpZiAob2JqS2V5LmNoYXJBdCgwKSAhPT0gJyQnICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBvYmpLZXkpICYmXG4gICAgICAgICAgICAgICAgICBjb21wYXJhdG9yKG9ialtvYmpLZXldLCB0ZXh0W29iaktleV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dCA9ICgnJyArIHRleHQpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgcmV0dXJuICgnJyArIG9iaikudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRleHQpID4gLTE7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNlYXJjaCA9IGZ1bmN0aW9uKG9iaiwgdGV4dCkge1xuICAgICAgaWYgKHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJyAmJiB0ZXh0LmNoYXJBdCgwKSA9PT0gJyEnKSB7XG4gICAgICAgIHJldHVybiAhc2VhcmNoKG9iaiwgdGV4dC5zdWJzdHIoMSkpO1xuICAgICAgfVxuICAgICAgc3dpdGNoICh0eXBlb2Ygb2JqKSB7XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIHJldHVybiBjb21wYXJhdG9yKG9iaiwgdGV4dCk7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgc3dpdGNoICh0eXBlb2YgdGV4dCkge1xuICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmF0b3Iob2JqLCB0ZXh0KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGZvciAodmFyIG9iaktleSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqS2V5LmNoYXJBdCgwKSAhPT0gJyQnICYmIHNlYXJjaChvYmpbb2JqS2V5XSwgdGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjYXNlICdhcnJheSc6XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChzZWFyY2gob2JqW2ldLCB0ZXh0KSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHN3aXRjaCAodHlwZW9mIGV4cHJlc3Npb24pIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIC8vIFNldCB1cCBleHByZXNzaW9uIG9iamVjdCBhbmQgZmFsbCB0aHJvdWdoXG4gICAgICAgIGV4cHJlc3Npb24gPSB7JDpleHByZXNzaW9ufTtcbiAgICAgICAgLy8ganNoaW50IC1XMDg2XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAvLyBqc2hpbnQgK1cwODZcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGV4cHJlc3Npb24pIHtcbiAgICAgICAgICAoZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHByZXNzaW9uW3BhdGhdID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgICAgICAgICAgcHJlZGljYXRlcy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZWFyY2gocGF0aCA9PSAnJCcgPyB2YWx1ZSA6ICh2YWx1ZSAmJiB2YWx1ZVtwYXRoXSksIGV4cHJlc3Npb25bcGF0aF0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgcHJlZGljYXRlcy5wdXNoKGV4cHJlc3Npb24pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG4gICAgdmFyIGZpbHRlcmVkID0gW107XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcnJheS5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbal07XG4gICAgICBpZiAocHJlZGljYXRlcy5jaGVjayh2YWx1ZSwgaikpIHtcbiAgICAgICAgZmlsdGVyZWQucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgfTtcbn1cblxuLyoqXG4gKiBAbmdkb2MgZmlsdGVyXG4gKiBAbmFtZSBjdXJyZW5jeVxuICogQGtpbmQgZnVuY3Rpb25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEZvcm1hdHMgYSBudW1iZXIgYXMgYSBjdXJyZW5jeSAoaWUgJDEsMjM0LjU2KS4gV2hlbiBubyBjdXJyZW5jeSBzeW1ib2wgaXMgcHJvdmlkZWQsIGRlZmF1bHRcbiAqIHN5bWJvbCBmb3IgY3VycmVudCBsb2NhbGUgaXMgdXNlZC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IElucHV0IHRvIGZpbHRlci5cbiAqIEBwYXJhbSB7c3RyaW5nPX0gc3ltYm9sIEN1cnJlbmN5IHN5bWJvbCBvciBpZGVudGlmaWVyIHRvIGJlIGRpc3BsYXllZC5cbiAqIEBwYXJhbSB7bnVtYmVyPX0gZnJhY3Rpb25TaXplIE51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyB0byByb3VuZCB0aGUgYW1vdW50IHRvLlxuICogQHJldHVybnMge3N0cmluZ30gRm9ybWF0dGVkIG51bWJlci5cbiAqXG4gKlxuICogQGV4YW1wbGVcbiAgIDxleGFtcGxlIG1vZHVsZT1cImN1cnJlbmN5RXhhbXBsZVwiPlxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICBhbmd1bGFyLm1vZHVsZSgnY3VycmVuY3lFeGFtcGxlJywgW10pXG4gICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XG4gICAgICAgICAgICAgJHNjb3BlLmFtb3VudCA9IDEyMzQuNTY7XG4gICAgICAgICAgIH1dKTtcbiAgICAgICA8L3NjcmlwdD5cbiAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxuICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBuZy1tb2RlbD1cImFtb3VudFwiPiA8YnI+XG4gICAgICAgICBkZWZhdWx0IGN1cnJlbmN5IHN5bWJvbCAoJCk6IDxzcGFuIGlkPVwiY3VycmVuY3ktZGVmYXVsdFwiPnt7YW1vdW50IHwgY3VycmVuY3l9fTwvc3Bhbj48YnI+XG4gICAgICAgICBjdXN0b20gY3VycmVuY3kgaWRlbnRpZmllciAoVVNEJCk6IDxzcGFuIGlkPVwiY3VycmVuY3ktY3VzdG9tXCI+e3thbW91bnQgfCBjdXJyZW5jeTpcIlVTRCRcIn19PC9zcGFuPlxuICAgICAgICAgbm8gZnJhY3Rpb25zICgwKTogPHNwYW4gaWQ9XCJjdXJyZW5jeS1uby1mcmFjdGlvbnNcIj57e2Ftb3VudCB8IGN1cnJlbmN5OlwiVVNEJFwiOjB9fTwvc3Bhbj5cbiAgICAgICA8L2Rpdj5cbiAgICAgPC9maWxlPlxuICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gICAgICAgaXQoJ3Nob3VsZCBpbml0IHdpdGggMTIzNC41NicsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2N1cnJlbmN5LWRlZmF1bHQnKSkuZ2V0VGV4dCgpKS50b0JlKCckMSwyMzQuNTYnKTtcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdjdXJyZW5jeS1jdXN0b20nKSkuZ2V0VGV4dCgpKS50b0JlKCdVU0QkMSwyMzQuNTYnKTtcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdjdXJyZW5jeS1uby1mcmFjdGlvbnMnKSkuZ2V0VGV4dCgpKS50b0JlKCdVU0QkMSwyMzUnKTtcbiAgICAgICB9KTtcbiAgICAgICBpdCgnc2hvdWxkIHVwZGF0ZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgaWYgKGJyb3dzZXIucGFyYW1zLmJyb3dzZXIgPT0gJ3NhZmFyaScpIHtcbiAgICAgICAgICAgLy8gU2FmYXJpIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIG1pbnVzIGtleS4gU2VlXG4gICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL3Byb3RyYWN0b3IvaXNzdWVzLzQ4MVxuICAgICAgICAgICByZXR1cm47XG4gICAgICAgICB9XG4gICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdhbW91bnQnKSkuY2xlYXIoKTtcbiAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ2Ftb3VudCcpKS5zZW5kS2V5cygnLTEyMzQnKTtcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdjdXJyZW5jeS1kZWZhdWx0JykpLmdldFRleHQoKSkudG9CZSgnKCQxLDIzNC4wMCknKTtcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdjdXJyZW5jeS1jdXN0b20nKSkuZ2V0VGV4dCgpKS50b0JlKCcoVVNEJDEsMjM0LjAwKScpO1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2N1cnJlbmN5LW5vLWZyYWN0aW9ucycpKS5nZXRUZXh0KCkpLnRvQmUoJyhVU0QkMSwyMzQpJyk7XG4gICAgICAgfSk7XG4gICAgIDwvZmlsZT5cbiAgIDwvZXhhbXBsZT5cbiAqL1xuY3VycmVuY3lGaWx0ZXIuJGluamVjdCA9IFsnJGxvY2FsZSddO1xuZnVuY3Rpb24gY3VycmVuY3lGaWx0ZXIoJGxvY2FsZSkge1xuICB2YXIgZm9ybWF0cyA9ICRsb2NhbGUuTlVNQkVSX0ZPUk1BVFM7XG4gIHJldHVybiBmdW5jdGlvbihhbW91bnQsIGN1cnJlbmN5U3ltYm9sLCBmcmFjdGlvblNpemUpIHtcbiAgICBpZiAoaXNVbmRlZmluZWQoY3VycmVuY3lTeW1ib2wpKSB7XG4gICAgICBjdXJyZW5jeVN5bWJvbCA9IGZvcm1hdHMuQ1VSUkVOQ1lfU1lNO1xuICAgIH1cblxuICAgIGlmIChpc1VuZGVmaW5lZChmcmFjdGlvblNpemUpKSB7XG4gICAgICAvLyBUT0RPOiByZWFkIHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gdGhlIGxvY2FsZSBmaWxlXG4gICAgICBmcmFjdGlvblNpemUgPSAyO1xuICAgIH1cblxuICAgIC8vIGlmIG51bGwgb3IgdW5kZWZpbmVkIHBhc3MgaXQgdGhyb3VnaFxuICAgIHJldHVybiAoYW1vdW50ID09IG51bGwpXG4gICAgICAgID8gYW1vdW50XG4gICAgICAgIDogZm9ybWF0TnVtYmVyKGFtb3VudCwgZm9ybWF0cy5QQVRURVJOU1sxXSwgZm9ybWF0cy5HUk9VUF9TRVAsIGZvcm1hdHMuREVDSU1BTF9TRVAsIGZyYWN0aW9uU2l6ZSkuXG4gICAgICAgICAgICByZXBsYWNlKC9cXHUwMEE0L2csIGN1cnJlbmN5U3ltYm9sKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAbmdkb2MgZmlsdGVyXG4gKiBAbmFtZSBudW1iZXJcbiAqIEBraW5kIGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBGb3JtYXRzIGEgbnVtYmVyIGFzIHRleHQuXG4gKlxuICogSWYgdGhlIGlucHV0IGlzIG5vdCBhIG51bWJlciBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBudW1iZXIgTnVtYmVyIHRvIGZvcm1hdC5cbiAqIEBwYXJhbSB7KG51bWJlcnxzdHJpbmcpPX0gZnJhY3Rpb25TaXplIE51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyB0byByb3VuZCB0aGUgbnVtYmVyIHRvLlxuICogSWYgdGhpcyBpcyBub3QgcHJvdmlkZWQgdGhlbiB0aGUgZnJhY3Rpb24gc2l6ZSBpcyBjb21wdXRlZCBmcm9tIHRoZSBjdXJyZW50IGxvY2FsZSdzIG51bWJlclxuICogZm9ybWF0dGluZyBwYXR0ZXJuLiBJbiB0aGUgY2FzZSBvZiB0aGUgZGVmYXVsdCBsb2NhbGUsIGl0IHdpbGwgYmUgMy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IE51bWJlciByb3VuZGVkIHRvIGRlY2ltYWxQbGFjZXMgYW5kIHBsYWNlcyBhIOKAnCzigJ0gYWZ0ZXIgZWFjaCB0aGlyZCBkaWdpdC5cbiAqXG4gKiBAZXhhbXBsZVxuICAgPGV4YW1wbGUgbW9kdWxlPVwibnVtYmVyRmlsdGVyRXhhbXBsZVwiPlxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICBhbmd1bGFyLm1vZHVsZSgnbnVtYmVyRmlsdGVyRXhhbXBsZScsIFtdKVxuICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xuICAgICAgICAgICAgICRzY29wZS52YWwgPSAxMjM0LjU2Nzg5O1xuICAgICAgICAgICB9XSk7XG4gICAgICAgPC9zY3JpcHQ+XG4gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cbiAgICAgICAgIEVudGVyIG51bWJlcjogPGlucHV0IG5nLW1vZGVsPSd2YWwnPjxicj5cbiAgICAgICAgIERlZmF1bHQgZm9ybWF0dGluZzogPHNwYW4gaWQ9J251bWJlci1kZWZhdWx0Jz57e3ZhbCB8IG51bWJlcn19PC9zcGFuPjxicj5cbiAgICAgICAgIE5vIGZyYWN0aW9uczogPHNwYW4+e3t2YWwgfCBudW1iZXI6MH19PC9zcGFuPjxicj5cbiAgICAgICAgIE5lZ2F0aXZlIG51bWJlcjogPHNwYW4+e3stdmFsIHwgbnVtYmVyOjR9fTwvc3Bhbj5cbiAgICAgICA8L2Rpdj5cbiAgICAgPC9maWxlPlxuICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gICAgICAgaXQoJ3Nob3VsZCBmb3JtYXQgbnVtYmVycycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ251bWJlci1kZWZhdWx0JykpLmdldFRleHQoKSkudG9CZSgnMSwyMzQuNTY4Jyk7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCd2YWwgfCBudW1iZXI6MCcpKS5nZXRUZXh0KCkpLnRvQmUoJzEsMjM1Jyk7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCctdmFsIHwgbnVtYmVyOjQnKSkuZ2V0VGV4dCgpKS50b0JlKCctMSwyMzQuNTY3OScpO1xuICAgICAgIH0pO1xuXG4gICAgICAgaXQoJ3Nob3VsZCB1cGRhdGUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3ZhbCcpKS5jbGVhcigpO1xuICAgICAgICAgZWxlbWVudChieS5tb2RlbCgndmFsJykpLnNlbmRLZXlzKCczMzc0LjMzMycpO1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ251bWJlci1kZWZhdWx0JykpLmdldFRleHQoKSkudG9CZSgnMywzNzQuMzMzJyk7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCd2YWwgfCBudW1iZXI6MCcpKS5nZXRUZXh0KCkpLnRvQmUoJzMsMzc0Jyk7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCctdmFsIHwgbnVtYmVyOjQnKSkuZ2V0VGV4dCgpKS50b0JlKCctMywzNzQuMzMzMCcpO1xuICAgICAgfSk7XG4gICAgIDwvZmlsZT5cbiAgIDwvZXhhbXBsZT5cbiAqL1xuXG5cbm51bWJlckZpbHRlci4kaW5qZWN0ID0gWyckbG9jYWxlJ107XG5mdW5jdGlvbiBudW1iZXJGaWx0ZXIoJGxvY2FsZSkge1xuICB2YXIgZm9ybWF0cyA9ICRsb2NhbGUuTlVNQkVSX0ZPUk1BVFM7XG4gIHJldHVybiBmdW5jdGlvbihudW1iZXIsIGZyYWN0aW9uU2l6ZSkge1xuXG4gICAgLy8gaWYgbnVsbCBvciB1bmRlZmluZWQgcGFzcyBpdCB0aHJvdWdoXG4gICAgcmV0dXJuIChudW1iZXIgPT0gbnVsbClcbiAgICAgICAgPyBudW1iZXJcbiAgICAgICAgOiBmb3JtYXROdW1iZXIobnVtYmVyLCBmb3JtYXRzLlBBVFRFUk5TWzBdLCBmb3JtYXRzLkdST1VQX1NFUCwgZm9ybWF0cy5ERUNJTUFMX1NFUCxcbiAgICAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25TaXplKTtcbiAgfTtcbn1cblxudmFyIERFQ0lNQUxfU0VQID0gJy4nO1xuZnVuY3Rpb24gZm9ybWF0TnVtYmVyKG51bWJlciwgcGF0dGVybiwgZ3JvdXBTZXAsIGRlY2ltYWxTZXAsIGZyYWN0aW9uU2l6ZSkge1xuICBpZiAoIWlzRmluaXRlKG51bWJlcikgfHwgaXNPYmplY3QobnVtYmVyKSkgcmV0dXJuICcnO1xuXG4gIHZhciBpc05lZ2F0aXZlID0gbnVtYmVyIDwgMDtcbiAgbnVtYmVyID0gTWF0aC5hYnMobnVtYmVyKTtcbiAgdmFyIG51bVN0ciA9IG51bWJlciArICcnLFxuICAgICAgZm9ybWF0ZWRUZXh0ID0gJycsXG4gICAgICBwYXJ0cyA9IFtdO1xuXG4gIHZhciBoYXNFeHBvbmVudCA9IGZhbHNlO1xuICBpZiAobnVtU3RyLmluZGV4T2YoJ2UnKSAhPT0gLTEpIHtcbiAgICB2YXIgbWF0Y2ggPSBudW1TdHIubWF0Y2goLyhbXFxkXFwuXSspZSgtPykoXFxkKykvKTtcbiAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMl0gPT0gJy0nICYmIG1hdGNoWzNdID4gZnJhY3Rpb25TaXplICsgMSkge1xuICAgICAgbnVtU3RyID0gJzAnO1xuICAgICAgbnVtYmVyID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybWF0ZWRUZXh0ID0gbnVtU3RyO1xuICAgICAgaGFzRXhwb25lbnQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaGFzRXhwb25lbnQpIHtcbiAgICB2YXIgZnJhY3Rpb25MZW4gPSAobnVtU3RyLnNwbGl0KERFQ0lNQUxfU0VQKVsxXSB8fCAnJykubGVuZ3RoO1xuXG4gICAgLy8gZGV0ZXJtaW5lIGZyYWN0aW9uU2l6ZSBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkXG4gICAgaWYgKGlzVW5kZWZpbmVkKGZyYWN0aW9uU2l6ZSkpIHtcbiAgICAgIGZyYWN0aW9uU2l6ZSA9IE1hdGgubWluKE1hdGgubWF4KHBhdHRlcm4ubWluRnJhYywgZnJhY3Rpb25MZW4pLCBwYXR0ZXJuLm1heEZyYWMpO1xuICAgIH1cblxuICAgIC8vIHNhZmVseSByb3VuZCBudW1iZXJzIGluIEpTIHdpdGhvdXQgaGl0dGluZyBpbXByZWNpc2lvbnMgb2YgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpY3NcbiAgICAvLyBpbnNwaXJlZCBieTpcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3JvdW5kXG4gICAgbnVtYmVyID0gKyhNYXRoLnJvdW5kKCsobnVtYmVyLnRvU3RyaW5nKCkgKyAnZScgKyBmcmFjdGlvblNpemUpKS50b1N0cmluZygpICsgJ2UnICsgLWZyYWN0aW9uU2l6ZSk7XG5cbiAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICBpc05lZ2F0aXZlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGZyYWN0aW9uID0gKCcnICsgbnVtYmVyKS5zcGxpdChERUNJTUFMX1NFUCk7XG4gICAgdmFyIHdob2xlID0gZnJhY3Rpb25bMF07XG4gICAgZnJhY3Rpb24gPSBmcmFjdGlvblsxXSB8fCAnJztcblxuICAgIHZhciBpLCBwb3MgPSAwLFxuICAgICAgICBsZ3JvdXAgPSBwYXR0ZXJuLmxnU2l6ZSxcbiAgICAgICAgZ3JvdXAgPSBwYXR0ZXJuLmdTaXplO1xuXG4gICAgaWYgKHdob2xlLmxlbmd0aCA+PSAobGdyb3VwICsgZ3JvdXApKSB7XG4gICAgICBwb3MgPSB3aG9sZS5sZW5ndGggLSBsZ3JvdXA7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcG9zOyBpKyspIHtcbiAgICAgICAgaWYgKChwb3MgLSBpKSAlIGdyb3VwID09PSAwICYmIGkgIT09IDApIHtcbiAgICAgICAgICBmb3JtYXRlZFRleHQgKz0gZ3JvdXBTZXA7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybWF0ZWRUZXh0ICs9IHdob2xlLmNoYXJBdChpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGkgPSBwb3M7IGkgPCB3aG9sZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCh3aG9sZS5sZW5ndGggLSBpKSAlIGxncm91cCA9PT0gMCAmJiBpICE9PSAwKSB7XG4gICAgICAgIGZvcm1hdGVkVGV4dCArPSBncm91cFNlcDtcbiAgICAgIH1cbiAgICAgIGZvcm1hdGVkVGV4dCArPSB3aG9sZS5jaGFyQXQoaSk7XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGZyYWN0aW9uIHBhcnQuXG4gICAgd2hpbGUgKGZyYWN0aW9uLmxlbmd0aCA8IGZyYWN0aW9uU2l6ZSkge1xuICAgICAgZnJhY3Rpb24gKz0gJzAnO1xuICAgIH1cblxuICAgIGlmIChmcmFjdGlvblNpemUgJiYgZnJhY3Rpb25TaXplICE9PSBcIjBcIikgZm9ybWF0ZWRUZXh0ICs9IGRlY2ltYWxTZXAgKyBmcmFjdGlvbi5zdWJzdHIoMCwgZnJhY3Rpb25TaXplKTtcbiAgfSBlbHNlIHtcblxuICAgIGlmIChmcmFjdGlvblNpemUgPiAwICYmIG51bWJlciA+IC0xICYmIG51bWJlciA8IDEpIHtcbiAgICAgIGZvcm1hdGVkVGV4dCA9IG51bWJlci50b0ZpeGVkKGZyYWN0aW9uU2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgcGFydHMucHVzaChpc05lZ2F0aXZlID8gcGF0dGVybi5uZWdQcmUgOiBwYXR0ZXJuLnBvc1ByZSk7XG4gIHBhcnRzLnB1c2goZm9ybWF0ZWRUZXh0KTtcbiAgcGFydHMucHVzaChpc05lZ2F0aXZlID8gcGF0dGVybi5uZWdTdWYgOiBwYXR0ZXJuLnBvc1N1Zik7XG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbn1cblxuZnVuY3Rpb24gcGFkTnVtYmVyKG51bSwgZGlnaXRzLCB0cmltKSB7XG4gIHZhciBuZWcgPSAnJztcbiAgaWYgKG51bSA8IDApIHtcbiAgICBuZWcgPSAgJy0nO1xuICAgIG51bSA9IC1udW07XG4gIH1cbiAgbnVtID0gJycgKyBudW07XG4gIHdoaWxlIChudW0ubGVuZ3RoIDwgZGlnaXRzKSBudW0gPSAnMCcgKyBudW07XG4gIGlmICh0cmltKVxuICAgIG51bSA9IG51bS5zdWJzdHIobnVtLmxlbmd0aCAtIGRpZ2l0cyk7XG4gIHJldHVybiBuZWcgKyBudW07XG59XG5cblxuZnVuY3Rpb24gZGF0ZUdldHRlcihuYW1lLCBzaXplLCBvZmZzZXQsIHRyaW0pIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG4gIHJldHVybiBmdW5jdGlvbihkYXRlKSB7XG4gICAgdmFyIHZhbHVlID0gZGF0ZVsnZ2V0JyArIG5hbWVdKCk7XG4gICAgaWYgKG9mZnNldCA+IDAgfHwgdmFsdWUgPiAtb2Zmc2V0KVxuICAgICAgdmFsdWUgKz0gb2Zmc2V0O1xuICAgIGlmICh2YWx1ZSA9PT0gMCAmJiBvZmZzZXQgPT0gLTEyKSB2YWx1ZSA9IDEyO1xuICAgIHJldHVybiBwYWROdW1iZXIodmFsdWUsIHNpemUsIHRyaW0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkYXRlU3RyR2V0dGVyKG5hbWUsIHNob3J0Rm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oZGF0ZSwgZm9ybWF0cykge1xuICAgIHZhciB2YWx1ZSA9IGRhdGVbJ2dldCcgKyBuYW1lXSgpO1xuICAgIHZhciBnZXQgPSB1cHBlcmNhc2Uoc2hvcnRGb3JtID8gKCdTSE9SVCcgKyBuYW1lKSA6IG5hbWUpO1xuXG4gICAgcmV0dXJuIGZvcm1hdHNbZ2V0XVt2YWx1ZV07XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRpbWVab25lR2V0dGVyKGRhdGUpIHtcbiAgdmFyIHpvbmUgPSAtMSAqIGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgdmFyIHBhZGRlZFpvbmUgPSAoem9uZSA+PSAwKSA/IFwiK1wiIDogXCJcIjtcblxuICBwYWRkZWRab25lICs9IHBhZE51bWJlcihNYXRoW3pvbmUgPiAwID8gJ2Zsb29yJyA6ICdjZWlsJ10oem9uZSAvIDYwKSwgMikgK1xuICAgICAgICAgICAgICAgIHBhZE51bWJlcihNYXRoLmFicyh6b25lICUgNjApLCAyKTtcblxuICByZXR1cm4gcGFkZGVkWm9uZTtcbn1cblxuZnVuY3Rpb24gZ2V0Rmlyc3RUaHVyc2RheU9mWWVhcih5ZWFyKSB7XG4gICAgLy8gMCA9IGluZGV4IG9mIEphbnVhcnlcbiAgICB2YXIgZGF5T2ZXZWVrT25GaXJzdCA9IChuZXcgRGF0ZSh5ZWFyLCAwLCAxKSkuZ2V0RGF5KCk7XG4gICAgLy8gNCA9IGluZGV4IG9mIFRodXJzZGF5ICgrMSB0byBhY2NvdW50IGZvciAxc3QgPSA1KVxuICAgIC8vIDExID0gaW5kZXggb2YgKm5leHQqIFRodXJzZGF5ICgrMSBhY2NvdW50IGZvciAxc3QgPSAxMilcbiAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgMCwgKChkYXlPZldlZWtPbkZpcnN0IDw9IDQpID8gNSA6IDEyKSAtIGRheU9mV2Vla09uRmlyc3QpO1xufVxuXG5mdW5jdGlvbiBnZXRUaHVyc2RheVRoaXNXZWVrKGRhdGV0aW1lKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGV0aW1lLmdldEZ1bGxZZWFyKCksIGRhdGV0aW1lLmdldE1vbnRoKCksXG4gICAgICAvLyA0ID0gaW5kZXggb2YgVGh1cnNkYXlcbiAgICAgIGRhdGV0aW1lLmdldERhdGUoKSArICg0IC0gZGF0ZXRpbWUuZ2V0RGF5KCkpKTtcbn1cblxuZnVuY3Rpb24gd2Vla0dldHRlcihzaXplKSB7XG4gICByZXR1cm4gZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgdmFyIGZpcnN0VGh1cnMgPSBnZXRGaXJzdFRodXJzZGF5T2ZZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSksXG4gICAgICAgICB0aGlzVGh1cnMgPSBnZXRUaHVyc2RheVRoaXNXZWVrKGRhdGUpO1xuXG4gICAgICB2YXIgZGlmZiA9ICt0aGlzVGh1cnMgLSArZmlyc3RUaHVycyxcbiAgICAgICAgIHJlc3VsdCA9IDEgKyBNYXRoLnJvdW5kKGRpZmYgLyA2LjA0OGU4KTsgLy8gNi4wNDhlOCBtcyBwZXIgd2Vla1xuXG4gICAgICByZXR1cm4gcGFkTnVtYmVyKHJlc3VsdCwgc2l6ZSk7XG4gICB9O1xufVxuXG5mdW5jdGlvbiBhbXBtR2V0dGVyKGRhdGUsIGZvcm1hdHMpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKSA8IDEyID8gZm9ybWF0cy5BTVBNU1swXSA6IGZvcm1hdHMuQU1QTVNbMV07XG59XG5cbnZhciBEQVRFX0ZPUk1BVFMgPSB7XG4gIHl5eXk6IGRhdGVHZXR0ZXIoJ0Z1bGxZZWFyJywgNCksXG4gICAgeXk6IGRhdGVHZXR0ZXIoJ0Z1bGxZZWFyJywgMiwgMCwgdHJ1ZSksXG4gICAgIHk6IGRhdGVHZXR0ZXIoJ0Z1bGxZZWFyJywgMSksXG4gIE1NTU06IGRhdGVTdHJHZXR0ZXIoJ01vbnRoJyksXG4gICBNTU06IGRhdGVTdHJHZXR0ZXIoJ01vbnRoJywgdHJ1ZSksXG4gICAgTU06IGRhdGVHZXR0ZXIoJ01vbnRoJywgMiwgMSksXG4gICAgIE06IGRhdGVHZXR0ZXIoJ01vbnRoJywgMSwgMSksXG4gICAgZGQ6IGRhdGVHZXR0ZXIoJ0RhdGUnLCAyKSxcbiAgICAgZDogZGF0ZUdldHRlcignRGF0ZScsIDEpLFxuICAgIEhIOiBkYXRlR2V0dGVyKCdIb3VycycsIDIpLFxuICAgICBIOiBkYXRlR2V0dGVyKCdIb3VycycsIDEpLFxuICAgIGhoOiBkYXRlR2V0dGVyKCdIb3VycycsIDIsIC0xMiksXG4gICAgIGg6IGRhdGVHZXR0ZXIoJ0hvdXJzJywgMSwgLTEyKSxcbiAgICBtbTogZGF0ZUdldHRlcignTWludXRlcycsIDIpLFxuICAgICBtOiBkYXRlR2V0dGVyKCdNaW51dGVzJywgMSksXG4gICAgc3M6IGRhdGVHZXR0ZXIoJ1NlY29uZHMnLCAyKSxcbiAgICAgczogZGF0ZUdldHRlcignU2Vjb25kcycsIDEpLFxuICAgICAvLyB3aGlsZSBJU08gODYwMSByZXF1aXJlcyBmcmFjdGlvbnMgdG8gYmUgcHJlZml4ZWQgd2l0aCBgLmAgb3IgYCxgXG4gICAgIC8vIHdlIGNhbiBiZSBqdXN0IHNhZmVseSByZWx5IG9uIHVzaW5nIGBzc3NgIHNpbmNlIHdlIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IHNpbmdsZSBvciB0d28gZGlnaXQgZnJhY3Rpb25zXG4gICBzc3M6IGRhdGVHZXR0ZXIoJ01pbGxpc2Vjb25kcycsIDMpLFxuICBFRUVFOiBkYXRlU3RyR2V0dGVyKCdEYXknKSxcbiAgIEVFRTogZGF0ZVN0ckdldHRlcignRGF5JywgdHJ1ZSksXG4gICAgIGE6IGFtcG1HZXR0ZXIsXG4gICAgIFo6IHRpbWVab25lR2V0dGVyLFxuICAgIHd3OiB3ZWVrR2V0dGVyKDIpLFxuICAgICB3OiB3ZWVrR2V0dGVyKDEpXG59O1xuXG52YXIgREFURV9GT1JNQVRTX1NQTElUID0gLygoPzpbXnlNZEhobXNhWkV3J10rKXwoPzonKD86W14nXXwnJykqJyl8KD86RSt8eSt8TSt8ZCt8SCt8aCt8bSt8cyt8YXxafHcrKSkoLiopLyxcbiAgICBOVU1CRVJfU1RSSU5HID0gL15cXC0/XFxkKyQvO1xuXG4vKipcbiAqIEBuZ2RvYyBmaWx0ZXJcbiAqIEBuYW1lIGRhdGVcbiAqIEBraW5kIGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiAgIEZvcm1hdHMgYGRhdGVgIHRvIGEgc3RyaW5nIGJhc2VkIG9uIHRoZSByZXF1ZXN0ZWQgYGZvcm1hdGAuXG4gKlxuICogICBgZm9ybWF0YCBzdHJpbmcgY2FuIGJlIGNvbXBvc2VkIG9mIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6XG4gKlxuICogICAqIGAneXl5eSdgOiA0IGRpZ2l0IHJlcHJlc2VudGF0aW9uIG9mIHllYXIgKGUuZy4gQUQgMSA9PiAwMDAxLCBBRCAyMDEwID0+IDIwMTApXG4gKiAgICogYCd5eSdgOiAyIGRpZ2l0IHJlcHJlc2VudGF0aW9uIG9mIHllYXIsIHBhZGRlZCAoMDAtOTkpLiAoZS5nLiBBRCAyMDAxID0+IDAxLCBBRCAyMDEwID0+IDEwKVxuICogICAqIGAneSdgOiAxIGRpZ2l0IHJlcHJlc2VudGF0aW9uIG9mIHllYXIsIGUuZy4gKEFEIDEgPT4gMSwgQUQgMTk5ID0+IDE5OSlcbiAqICAgKiBgJ01NTU0nYDogTW9udGggaW4geWVhciAoSmFudWFyeS1EZWNlbWJlcilcbiAqICAgKiBgJ01NTSdgOiBNb250aCBpbiB5ZWFyIChKYW4tRGVjKVxuICogICAqIGAnTU0nYDogTW9udGggaW4geWVhciwgcGFkZGVkICgwMS0xMilcbiAqICAgKiBgJ00nYDogTW9udGggaW4geWVhciAoMS0xMilcbiAqICAgKiBgJ2RkJ2A6IERheSBpbiBtb250aCwgcGFkZGVkICgwMS0zMSlcbiAqICAgKiBgJ2QnYDogRGF5IGluIG1vbnRoICgxLTMxKVxuICogICAqIGAnRUVFRSdgOiBEYXkgaW4gV2VlaywoU3VuZGF5LVNhdHVyZGF5KVxuICogICAqIGAnRUVFJ2A6IERheSBpbiBXZWVrLCAoU3VuLVNhdClcbiAqICAgKiBgJ0hIJ2A6IEhvdXIgaW4gZGF5LCBwYWRkZWQgKDAwLTIzKVxuICogICAqIGAnSCdgOiBIb3VyIGluIGRheSAoMC0yMylcbiAqICAgKiBgJ2hoJ2A6IEhvdXIgaW4gQU0vUE0sIHBhZGRlZCAoMDEtMTIpXG4gKiAgICogYCdoJ2A6IEhvdXIgaW4gQU0vUE0sICgxLTEyKVxuICogICAqIGAnbW0nYDogTWludXRlIGluIGhvdXIsIHBhZGRlZCAoMDAtNTkpXG4gKiAgICogYCdtJ2A6IE1pbnV0ZSBpbiBob3VyICgwLTU5KVxuICogICAqIGAnc3MnYDogU2Vjb25kIGluIG1pbnV0ZSwgcGFkZGVkICgwMC01OSlcbiAqICAgKiBgJ3MnYDogU2Vjb25kIGluIG1pbnV0ZSAoMC01OSlcbiAqICAgKiBgJy5zc3MnIG9yICcsc3NzJ2A6IE1pbGxpc2Vjb25kIGluIHNlY29uZCwgcGFkZGVkICgwMDAtOTk5KVxuICogICAqIGAnYSdgOiBBTS9QTSBtYXJrZXJcbiAqICAgKiBgJ1onYDogNCBkaWdpdCAoK3NpZ24pIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aW1lem9uZSBvZmZzZXQgKC0xMjAwLSsxMjAwKVxuICogICAqIGAnd3cnYDogSVNPLTg2MDEgd2VlayBvZiB5ZWFyICgwMC01MylcbiAqICAgKiBgJ3cnYDogSVNPLTg2MDEgd2VlayBvZiB5ZWFyICgwLTUzKVxuICpcbiAqICAgYGZvcm1hdGAgc3RyaW5nIGNhbiBhbHNvIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHByZWRlZmluZWRcbiAqICAge0BsaW5rIGd1aWRlL2kxOG4gbG9jYWxpemFibGUgZm9ybWF0c306XG4gKlxuICogICAqIGAnbWVkaXVtJ2A6IGVxdWl2YWxlbnQgdG8gYCdNTU0gZCwgeSBoOm1tOnNzIGEnYCBmb3IgZW5fVVMgbG9jYWxlXG4gKiAgICAgKGUuZy4gU2VwIDMsIDIwMTAgMTI6MDU6MDggUE0pXG4gKiAgICogYCdzaG9ydCdgOiBlcXVpdmFsZW50IHRvIGAnTS9kL3l5IGg6bW0gYSdgIGZvciBlbl9VUyAgbG9jYWxlIChlLmcuIDkvMy8xMCAxMjowNSBQTSlcbiAqICAgKiBgJ2Z1bGxEYXRlJ2A6IGVxdWl2YWxlbnQgdG8gYCdFRUVFLCBNTU1NIGQsIHknYCBmb3IgZW5fVVMgIGxvY2FsZVxuICogICAgIChlLmcuIEZyaWRheSwgU2VwdGVtYmVyIDMsIDIwMTApXG4gKiAgICogYCdsb25nRGF0ZSdgOiBlcXVpdmFsZW50IHRvIGAnTU1NTSBkLCB5J2AgZm9yIGVuX1VTICBsb2NhbGUgKGUuZy4gU2VwdGVtYmVyIDMsIDIwMTApXG4gKiAgICogYCdtZWRpdW1EYXRlJ2A6IGVxdWl2YWxlbnQgdG8gYCdNTU0gZCwgeSdgIGZvciBlbl9VUyAgbG9jYWxlIChlLmcuIFNlcCAzLCAyMDEwKVxuICogICAqIGAnc2hvcnREYXRlJ2A6IGVxdWl2YWxlbnQgdG8gYCdNL2QveXknYCBmb3IgZW5fVVMgbG9jYWxlIChlLmcuIDkvMy8xMClcbiAqICAgKiBgJ21lZGl1bVRpbWUnYDogZXF1aXZhbGVudCB0byBgJ2g6bW06c3MgYSdgIGZvciBlbl9VUyBsb2NhbGUgKGUuZy4gMTI6MDU6MDggUE0pXG4gKiAgICogYCdzaG9ydFRpbWUnYDogZXF1aXZhbGVudCB0byBgJ2g6bW0gYSdgIGZvciBlbl9VUyBsb2NhbGUgKGUuZy4gMTI6MDUgUE0pXG4gKlxuICogICBgZm9ybWF0YCBzdHJpbmcgY2FuIGNvbnRhaW4gbGl0ZXJhbCB2YWx1ZXMuIFRoZXNlIG5lZWQgdG8gYmUgZXNjYXBlZCBieSBzdXJyb3VuZGluZyB3aXRoIHNpbmdsZSBxdW90ZXMgKGUuZy5cbiAqICAgYFwiaCAnaW4gdGhlIG1vcm5pbmcnXCJgKS4gSW4gb3JkZXIgdG8gb3V0cHV0IGEgc2luZ2xlIHF1b3RlLCBlc2NhcGUgaXQgLSBpLmUuLCB0d28gc2luZ2xlIHF1b3RlcyBpbiBhIHNlcXVlbmNlXG4gKiAgIChlLmcuIGBcImggJ28nJ2Nsb2NrJ1wiYCkuXG4gKlxuICogQHBhcmFtIHsoRGF0ZXxudW1iZXJ8c3RyaW5nKX0gZGF0ZSBEYXRlIHRvIGZvcm1hdCBlaXRoZXIgYXMgRGF0ZSBvYmplY3QsIG1pbGxpc2Vjb25kcyAoc3RyaW5nIG9yXG4gKiAgICBudW1iZXIpIG9yIHZhcmlvdXMgSVNPIDg2MDEgZGF0ZXRpbWUgc3RyaW5nIGZvcm1hdHMgKGUuZy4geXl5eS1NTS1kZFRISDptbTpzcy5zc3NaIGFuZCBpdHNcbiAqICAgIHNob3J0ZXIgdmVyc2lvbnMgbGlrZSB5eXl5LU1NLWRkVEhIOm1tWiwgeXl5eS1NTS1kZCBvciB5eXl5TU1kZFRISG1tc3NaKS4gSWYgbm8gdGltZXpvbmUgaXNcbiAqICAgIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGlucHV0LCB0aGUgdGltZSBpcyBjb25zaWRlcmVkIHRvIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqIEBwYXJhbSB7c3RyaW5nPX0gZm9ybWF0IEZvcm1hdHRpbmcgcnVsZXMgKHNlZSBEZXNjcmlwdGlvbikuIElmIG5vdCBzcGVjaWZpZWQsXG4gKiAgICBgbWVkaXVtRGF0ZWAgaXMgdXNlZC5cbiAqIEBwYXJhbSB7c3RyaW5nPX0gdGltZXpvbmUgVGltZXpvbmUgdG8gYmUgdXNlZCBmb3IgZm9ybWF0dGluZy4gUmlnaHQgbm93LCBvbmx5IGAnVVRDJ2AgaXMgc3VwcG9ydGVkLlxuICogICAgSWYgbm90IHNwZWNpZmllZCwgdGhlIHRpbWV6b25lIG9mIHRoZSBicm93c2VyIHdpbGwgYmUgdXNlZC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEZvcm1hdHRlZCBzdHJpbmcgb3IgdGhlIGlucHV0IGlmIGlucHV0IGlzIG5vdCByZWNvZ25pemVkIGFzIGRhdGUvbWlsbGlzLlxuICpcbiAqIEBleGFtcGxlXG4gICA8ZXhhbXBsZT5cbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgICA8c3BhbiBuZy1ub24tYmluZGFibGU+e3sxMjg4MzIzNjIzMDA2IHwgZGF0ZTonbWVkaXVtJ319PC9zcGFuPjpcbiAgICAgICAgICAgPHNwYW4+e3sxMjg4MzIzNjIzMDA2IHwgZGF0ZTonbWVkaXVtJ319PC9zcGFuPjxicj5cbiAgICAgICA8c3BhbiBuZy1ub24tYmluZGFibGU+e3sxMjg4MzIzNjIzMDA2IHwgZGF0ZToneXl5eS1NTS1kZCBISDptbTpzcyBaJ319PC9zcGFuPjpcbiAgICAgICAgICA8c3Bhbj57ezEyODgzMjM2MjMwMDYgfCBkYXRlOid5eXl5LU1NLWRkIEhIOm1tOnNzIFonfX08L3NwYW4+PGJyPlxuICAgICAgIDxzcGFuIG5nLW5vbi1iaW5kYWJsZT57ezEyODgzMjM2MjMwMDYgfCBkYXRlOidNTS9kZC95eXl5IEAgaDptbWEnfX08L3NwYW4+OlxuICAgICAgICAgIDxzcGFuPnt7JzEyODgzMjM2MjMwMDYnIHwgZGF0ZTonTU0vZGQveXl5eSBAIGg6bW1hJ319PC9zcGFuPjxicj5cbiAgICAgICA8c3BhbiBuZy1ub24tYmluZGFibGU+e3sxMjg4MzIzNjIzMDA2IHwgZGF0ZTpcIk1NL2RkL3l5eXkgJ2F0JyBoOm1tYVwifX08L3NwYW4+OlxuICAgICAgICAgIDxzcGFuPnt7JzEyODgzMjM2MjMwMDYnIHwgZGF0ZTpcIk1NL2RkL3l5eXkgJ2F0JyBoOm1tYVwifX08L3NwYW4+PGJyPlxuICAgICA8L2ZpbGU+XG4gICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cbiAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBkYXRlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKFwiMTI4ODMyMzYyMzAwNiB8IGRhdGU6J21lZGl1bSdcIikpLmdldFRleHQoKSkuXG4gICAgICAgICAgICB0b01hdGNoKC9PY3QgMlxcZCwgMjAxMCBcXGR7MSwyfTpcXGR7Mn06XFxkezJ9IChBTXxQTSkvKTtcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoXCIxMjg4MzIzNjIzMDA2IHwgZGF0ZToneXl5eS1NTS1kZCBISDptbTpzcyBaJ1wiKSkuZ2V0VGV4dCgpKS5cbiAgICAgICAgICAgIHRvTWF0Y2goLzIwMTBcXC0xMFxcLTJcXGQgXFxkezJ9OlxcZHsyfTpcXGR7Mn0gKFxcLXxcXCspP1xcZHs0fS8pO1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZyhcIicxMjg4MzIzNjIzMDA2JyB8IGRhdGU6J01NL2RkL3l5eXkgQCBoOm1tYSdcIikpLmdldFRleHQoKSkuXG4gICAgICAgICAgICB0b01hdGNoKC8xMFxcLzJcXGRcXC8yMDEwIEAgXFxkezEsMn06XFxkezJ9KEFNfFBNKS8pO1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZyhcIicxMjg4MzIzNjIzMDA2JyB8IGRhdGU6XFxcIk1NL2RkL3l5eXkgJ2F0JyBoOm1tYVxcXCJcIikpLmdldFRleHQoKSkuXG4gICAgICAgICAgICB0b01hdGNoKC8xMFxcLzJcXGRcXC8yMDEwIGF0IFxcZHsxLDJ9OlxcZHsyfShBTXxQTSkvKTtcbiAgICAgICB9KTtcbiAgICAgPC9maWxlPlxuICAgPC9leGFtcGxlPlxuICovXG5kYXRlRmlsdGVyLiRpbmplY3QgPSBbJyRsb2NhbGUnXTtcbmZ1bmN0aW9uIGRhdGVGaWx0ZXIoJGxvY2FsZSkge1xuXG5cbiAgdmFyIFJfSVNPODYwMV9TVFIgPSAvXihcXGR7NH0pLT8oXFxkXFxkKS0/KFxcZFxcZCkoPzpUKFxcZFxcZCkoPzo6PyhcXGRcXGQpKD86Oj8oXFxkXFxkKSg/OlxcLihcXGQrKSk/KT8pPyhafChbKy1dKShcXGRcXGQpOj8oXFxkXFxkKSk/KT8kLztcbiAgICAgICAgICAgICAgICAgICAgIC8vIDEgICAgICAgIDIgICAgICAgMyAgICAgICAgIDQgICAgICAgICAgNSAgICAgICAgICA2ICAgICAgICAgIDcgICAgICAgICAgOCAgOSAgICAgMTAgICAgICAxMVxuICBmdW5jdGlvbiBqc29uU3RyaW5nVG9EYXRlKHN0cmluZykge1xuICAgIHZhciBtYXRjaDtcbiAgICBpZiAobWF0Y2ggPSBzdHJpbmcubWF0Y2goUl9JU084NjAxX1NUUikpIHtcbiAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoMCksXG4gICAgICAgICAgdHpIb3VyID0gMCxcbiAgICAgICAgICB0ek1pbiAgPSAwLFxuICAgICAgICAgIGRhdGVTZXR0ZXIgPSBtYXRjaFs4XSA/IGRhdGUuc2V0VVRDRnVsbFllYXIgOiBkYXRlLnNldEZ1bGxZZWFyLFxuICAgICAgICAgIHRpbWVTZXR0ZXIgPSBtYXRjaFs4XSA/IGRhdGUuc2V0VVRDSG91cnMgOiBkYXRlLnNldEhvdXJzO1xuXG4gICAgICBpZiAobWF0Y2hbOV0pIHtcbiAgICAgICAgdHpIb3VyID0gaW50KG1hdGNoWzldICsgbWF0Y2hbMTBdKTtcbiAgICAgICAgdHpNaW4gPSBpbnQobWF0Y2hbOV0gKyBtYXRjaFsxMV0pO1xuICAgICAgfVxuICAgICAgZGF0ZVNldHRlci5jYWxsKGRhdGUsIGludChtYXRjaFsxXSksIGludChtYXRjaFsyXSkgLSAxLCBpbnQobWF0Y2hbM10pKTtcbiAgICAgIHZhciBoID0gaW50KG1hdGNoWzRdIHx8IDApIC0gdHpIb3VyO1xuICAgICAgdmFyIG0gPSBpbnQobWF0Y2hbNV0gfHwgMCkgLSB0ek1pbjtcbiAgICAgIHZhciBzID0gaW50KG1hdGNoWzZdIHx8IDApO1xuICAgICAgdmFyIG1zID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KCcwLicgKyAobWF0Y2hbN10gfHwgMCkpICogMTAwMCk7XG4gICAgICB0aW1lU2V0dGVyLmNhbGwoZGF0ZSwgaCwgbSwgcywgbXMpO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuXG4gIHJldHVybiBmdW5jdGlvbihkYXRlLCBmb3JtYXQsIHRpbWV6b25lKSB7XG4gICAgdmFyIHRleHQgPSAnJyxcbiAgICAgICAgcGFydHMgPSBbXSxcbiAgICAgICAgZm4sIG1hdGNoO1xuXG4gICAgZm9ybWF0ID0gZm9ybWF0IHx8ICdtZWRpdW1EYXRlJztcbiAgICBmb3JtYXQgPSAkbG9jYWxlLkRBVEVUSU1FX0ZPUk1BVFNbZm9ybWF0XSB8fCBmb3JtYXQ7XG4gICAgaWYgKGlzU3RyaW5nKGRhdGUpKSB7XG4gICAgICBkYXRlID0gTlVNQkVSX1NUUklORy50ZXN0KGRhdGUpID8gaW50KGRhdGUpIDoganNvblN0cmluZ1RvRGF0ZShkYXRlKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOdW1iZXIoZGF0ZSkpIHtcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRGF0ZShkYXRlKSkge1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgd2hpbGUgKGZvcm1hdCkge1xuICAgICAgbWF0Y2ggPSBEQVRFX0ZPUk1BVFNfU1BMSVQuZXhlYyhmb3JtYXQpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHBhcnRzID0gY29uY2F0KHBhcnRzLCBtYXRjaCwgMSk7XG4gICAgICAgIGZvcm1hdCA9IHBhcnRzLnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFydHMucHVzaChmb3JtYXQpO1xuICAgICAgICBmb3JtYXQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aW1lem9uZSAmJiB0aW1lem9uZSA9PT0gJ1VUQycpIHtcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gICAgICBkYXRlLnNldE1pbnV0ZXMoZGF0ZS5nZXRNaW51dGVzKCkgKyBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgIH1cbiAgICBmb3JFYWNoKHBhcnRzLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgZm4gPSBEQVRFX0ZPUk1BVFNbdmFsdWVdO1xuICAgICAgdGV4dCArPSBmbiA/IGZuKGRhdGUsICRsb2NhbGUuREFURVRJTUVfRk9STUFUUylcbiAgICAgICAgICAgICAgICAgOiB2YWx1ZS5yZXBsYWNlKC8oXid8JyQpL2csICcnKS5yZXBsYWNlKC8nJy9nLCBcIidcIik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGV4dDtcbiAgfTtcbn1cblxuXG4vKipcbiAqIEBuZ2RvYyBmaWx0ZXJcbiAqIEBuYW1lIGpzb25cbiAqIEBraW5kIGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiAgIEFsbG93cyB5b3UgdG8gY29udmVydCBhIEphdmFTY3JpcHQgb2JqZWN0IGludG8gSlNPTiBzdHJpbmcuXG4gKlxuICogICBUaGlzIGZpbHRlciBpcyBtb3N0bHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuIFdoZW4gdXNpbmcgdGhlIGRvdWJsZSBjdXJseSB7e3ZhbHVlfX0gbm90YXRpb25cbiAqICAgdGhlIGJpbmRpbmcgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gSlNPTi5cbiAqXG4gKiBAcGFyYW0geyp9IG9iamVjdCBBbnkgSmF2YVNjcmlwdCBvYmplY3QgKGluY2x1ZGluZyBhcnJheXMgYW5kIHByaW1pdGl2ZSB0eXBlcykgdG8gZmlsdGVyLlxuICogQHJldHVybnMge3N0cmluZ30gSlNPTiBzdHJpbmcuXG4gKlxuICpcbiAqIEBleGFtcGxlXG4gICA8ZXhhbXBsZT5cbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgICA8cHJlPnt7IHsnbmFtZSc6J3ZhbHVlJ30gfCBqc29uIH19PC9wcmU+XG4gICAgIDwvZmlsZT5cbiAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgIGl0KCdzaG91bGQganNvbmlmeSBmaWx0ZXJlZCBvYmplY3RzJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKFwieyduYW1lJzondmFsdWUnfVwiKSkuZ2V0VGV4dCgpKS50b01hdGNoKC9cXHtcXG4gIFwibmFtZVwiOiA/XCJ2YWx1ZVwiXFxufS8pO1xuICAgICAgIH0pO1xuICAgICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG4gKlxuICovXG5mdW5jdGlvbiBqc29uRmlsdGVyKCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIHRvSnNvbihvYmplY3QsIHRydWUpO1xuICB9O1xufVxuXG5cbi8qKlxuICogQG5nZG9jIGZpbHRlclxuICogQG5hbWUgbG93ZXJjYXNlXG4gKiBAa2luZCBmdW5jdGlvblxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0cyBzdHJpbmcgdG8gbG93ZXJjYXNlLlxuICogQHNlZSBhbmd1bGFyLmxvd2VyY2FzZVxuICovXG52YXIgbG93ZXJjYXNlRmlsdGVyID0gdmFsdWVGbihsb3dlcmNhc2UpO1xuXG5cbi8qKlxuICogQG5nZG9jIGZpbHRlclxuICogQG5hbWUgdXBwZXJjYXNlXG4gKiBAa2luZCBmdW5jdGlvblxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0cyBzdHJpbmcgdG8gdXBwZXJjYXNlLlxuICogQHNlZSBhbmd1bGFyLnVwcGVyY2FzZVxuICovXG52YXIgdXBwZXJjYXNlRmlsdGVyID0gdmFsdWVGbih1cHBlcmNhc2UpO1xuXG4vKipcbiAqIEBuZ2RvYyBmaWx0ZXJcbiAqIEBuYW1lIGxpbWl0VG9cbiAqIEBraW5kIGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDcmVhdGVzIGEgbmV3IGFycmF5IG9yIHN0cmluZyBjb250YWluaW5nIG9ubHkgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGVsZW1lbnRzLiBUaGUgZWxlbWVudHNcbiAqIGFyZSB0YWtlbiBmcm9tIGVpdGhlciB0aGUgYmVnaW5uaW5nIG9yIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBhcnJheSwgc3RyaW5nIG9yIG51bWJlciwgYXMgc3BlY2lmaWVkIGJ5XG4gKiB0aGUgdmFsdWUgYW5kIHNpZ24gKHBvc2l0aXZlIG9yIG5lZ2F0aXZlKSBvZiBgbGltaXRgLiBJZiBhIG51bWJlciBpcyB1c2VkIGFzIGlucHV0LCBpdCBpc1xuICogY29udmVydGVkIHRvIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfG51bWJlcn0gaW5wdXQgU291cmNlIGFycmF5LCBzdHJpbmcgb3IgbnVtYmVyIHRvIGJlIGxpbWl0ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGxpbWl0IFRoZSBsZW5ndGggb2YgdGhlIHJldHVybmVkIGFycmF5IG9yIHN0cmluZy4gSWYgdGhlIGBsaW1pdGAgbnVtYmVyXG4gKiAgICAgaXMgcG9zaXRpdmUsIGBsaW1pdGAgbnVtYmVyIG9mIGl0ZW1zIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc291cmNlIGFycmF5L3N0cmluZyBhcmUgY29waWVkLlxuICogICAgIElmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUsIGBsaW1pdGAgbnVtYmVyICBvZiBpdGVtcyBmcm9tIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBhcnJheS9zdHJpbmdcbiAqICAgICBhcmUgY29waWVkLiBUaGUgYGxpbWl0YCB3aWxsIGJlIHRyaW1tZWQgaWYgaXQgZXhjZWVkcyBgYXJyYXkubGVuZ3RoYFxuICogQHJldHVybnMge0FycmF5fHN0cmluZ30gQSBuZXcgc3ViLWFycmF5IG9yIHN1YnN0cmluZyBvZiBsZW5ndGggYGxpbWl0YCBvciBsZXNzIGlmIGlucHV0IGFycmF5XG4gKiAgICAgaGFkIGxlc3MgdGhhbiBgbGltaXRgIGVsZW1lbnRzLlxuICpcbiAqIEBleGFtcGxlXG4gICA8ZXhhbXBsZSBtb2R1bGU9XCJsaW1pdFRvRXhhbXBsZVwiPlxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICBhbmd1bGFyLm1vZHVsZSgnbGltaXRUb0V4YW1wbGUnLCBbXSlcbiAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcbiAgICAgICAgICAgICAkc2NvcGUubnVtYmVycyA9IFsxLDIsMyw0LDUsNiw3LDgsOV07XG4gICAgICAgICAgICAgJHNjb3BlLmxldHRlcnMgPSBcImFiY2RlZmdoaVwiO1xuICAgICAgICAgICAgICRzY29wZS5sb25nTnVtYmVyID0gMjM0NTQzMjM0MjtcbiAgICAgICAgICAgICAkc2NvcGUubnVtTGltaXQgPSAzO1xuICAgICAgICAgICAgICRzY29wZS5sZXR0ZXJMaW1pdCA9IDM7XG4gICAgICAgICAgICAgJHNjb3BlLmxvbmdOdW1iZXJMaW1pdCA9IDM7XG4gICAgICAgICAgIH1dKTtcbiAgICAgICA8L3NjcmlwdD5cbiAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxuICAgICAgICAgTGltaXQge3tudW1iZXJzfX0gdG86IDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgc3RlcD1cIjFcIiBuZy1tb2RlbD1cIm51bUxpbWl0XCI+XG4gICAgICAgICA8cD5PdXRwdXQgbnVtYmVyczoge3sgbnVtYmVycyB8IGxpbWl0VG86bnVtTGltaXQgfX08L3A+XG4gICAgICAgICBMaW1pdCB7e2xldHRlcnN9fSB0bzogPGlucHV0IHR5cGU9XCJudW1iZXJcIiBzdGVwPVwiMVwiIG5nLW1vZGVsPVwibGV0dGVyTGltaXRcIj5cbiAgICAgICAgIDxwPk91dHB1dCBsZXR0ZXJzOiB7eyBsZXR0ZXJzIHwgbGltaXRUbzpsZXR0ZXJMaW1pdCB9fTwvcD5cbiAgICAgICAgIExpbWl0IHt7bG9uZ051bWJlcn19IHRvOiA8aW5wdXQgdHlwZT1cIm51bWJlclwiIHN0ZXA9XCIxXCIgbmctbW9kZWw9XCJsb25nTnVtYmVyTGltaXRcIj5cbiAgICAgICAgIDxwPk91dHB1dCBsb25nIG51bWJlcjoge3sgbG9uZ051bWJlciB8IGxpbWl0VG86bG9uZ051bWJlckxpbWl0IH19PC9wPlxuICAgICAgIDwvZGl2PlxuICAgICA8L2ZpbGU+XG4gICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cbiAgICAgICB2YXIgbnVtTGltaXRJbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ251bUxpbWl0JykpO1xuICAgICAgIHZhciBsZXR0ZXJMaW1pdElucHV0ID0gZWxlbWVudChieS5tb2RlbCgnbGV0dGVyTGltaXQnKSk7XG4gICAgICAgdmFyIGxvbmdOdW1iZXJMaW1pdElucHV0ID0gZWxlbWVudChieS5tb2RlbCgnbG9uZ051bWJlckxpbWl0JykpO1xuICAgICAgIHZhciBsaW1pdGVkTnVtYmVycyA9IGVsZW1lbnQoYnkuYmluZGluZygnbnVtYmVycyB8IGxpbWl0VG86bnVtTGltaXQnKSk7XG4gICAgICAgdmFyIGxpbWl0ZWRMZXR0ZXJzID0gZWxlbWVudChieS5iaW5kaW5nKCdsZXR0ZXJzIHwgbGltaXRUbzpsZXR0ZXJMaW1pdCcpKTtcbiAgICAgICB2YXIgbGltaXRlZExvbmdOdW1iZXIgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ2xvbmdOdW1iZXIgfCBsaW1pdFRvOmxvbmdOdW1iZXJMaW1pdCcpKTtcblxuICAgICAgIGl0KCdzaG91bGQgbGltaXQgdGhlIG51bWJlciBhcnJheSB0byBmaXJzdCB0aHJlZSBpdGVtcycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgZXhwZWN0KG51bUxpbWl0SW5wdXQuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKS50b0JlKCczJyk7XG4gICAgICAgICBleHBlY3QobGV0dGVyTGltaXRJbnB1dC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRvQmUoJzMnKTtcbiAgICAgICAgIGV4cGVjdChsb25nTnVtYmVyTGltaXRJbnB1dC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRvQmUoJzMnKTtcbiAgICAgICAgIGV4cGVjdChsaW1pdGVkTnVtYmVycy5nZXRUZXh0KCkpLnRvRXF1YWwoJ091dHB1dCBudW1iZXJzOiBbMSwyLDNdJyk7XG4gICAgICAgICBleHBlY3QobGltaXRlZExldHRlcnMuZ2V0VGV4dCgpKS50b0VxdWFsKCdPdXRwdXQgbGV0dGVyczogYWJjJyk7XG4gICAgICAgICBleHBlY3QobGltaXRlZExvbmdOdW1iZXIuZ2V0VGV4dCgpKS50b0VxdWFsKCdPdXRwdXQgbG9uZyBudW1iZXI6IDIzNCcpO1xuICAgICAgIH0pO1xuXG4gICAgICAgLy8gVGhlcmUgaXMgYSBidWcgaW4gc2FmYXJpIGFuZCBwcm90cmFjdG9yIHRoYXQgZG9lc24ndCBsaWtlIHRoZSBtaW51cyBrZXlcbiAgICAgICAvLyBpdCgnc2hvdWxkIHVwZGF0ZSB0aGUgb3V0cHV0IHdoZW4gLTMgaXMgZW50ZXJlZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgIC8vICAgbnVtTGltaXRJbnB1dC5jbGVhcigpO1xuICAgICAgIC8vICAgbnVtTGltaXRJbnB1dC5zZW5kS2V5cygnLTMnKTtcbiAgICAgICAvLyAgIGxldHRlckxpbWl0SW5wdXQuY2xlYXIoKTtcbiAgICAgICAvLyAgIGxldHRlckxpbWl0SW5wdXQuc2VuZEtleXMoJy0zJyk7XG4gICAgICAgLy8gICBsb25nTnVtYmVyTGltaXRJbnB1dC5jbGVhcigpO1xuICAgICAgIC8vICAgbG9uZ051bWJlckxpbWl0SW5wdXQuc2VuZEtleXMoJy0zJyk7XG4gICAgICAgLy8gICBleHBlY3QobGltaXRlZE51bWJlcnMuZ2V0VGV4dCgpKS50b0VxdWFsKCdPdXRwdXQgbnVtYmVyczogWzcsOCw5XScpO1xuICAgICAgIC8vICAgZXhwZWN0KGxpbWl0ZWRMZXR0ZXJzLmdldFRleHQoKSkudG9FcXVhbCgnT3V0cHV0IGxldHRlcnM6IGdoaScpO1xuICAgICAgIC8vICAgZXhwZWN0KGxpbWl0ZWRMb25nTnVtYmVyLmdldFRleHQoKSkudG9FcXVhbCgnT3V0cHV0IGxvbmcgbnVtYmVyOiAzNDInKTtcbiAgICAgICAvLyB9KTtcblxuICAgICAgIGl0KCdzaG91bGQgbm90IGV4Y2VlZCB0aGUgbWF4aW11bSBzaXplIG9mIGlucHV0IGFycmF5JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICBudW1MaW1pdElucHV0LmNsZWFyKCk7XG4gICAgICAgICBudW1MaW1pdElucHV0LnNlbmRLZXlzKCcxMDAnKTtcbiAgICAgICAgIGxldHRlckxpbWl0SW5wdXQuY2xlYXIoKTtcbiAgICAgICAgIGxldHRlckxpbWl0SW5wdXQuc2VuZEtleXMoJzEwMCcpO1xuICAgICAgICAgbG9uZ051bWJlckxpbWl0SW5wdXQuY2xlYXIoKTtcbiAgICAgICAgIGxvbmdOdW1iZXJMaW1pdElucHV0LnNlbmRLZXlzKCcxMDAnKTtcbiAgICAgICAgIGV4cGVjdChsaW1pdGVkTnVtYmVycy5nZXRUZXh0KCkpLnRvRXF1YWwoJ091dHB1dCBudW1iZXJzOiBbMSwyLDMsNCw1LDYsNyw4LDldJyk7XG4gICAgICAgICBleHBlY3QobGltaXRlZExldHRlcnMuZ2V0VGV4dCgpKS50b0VxdWFsKCdPdXRwdXQgbGV0dGVyczogYWJjZGVmZ2hpJyk7XG4gICAgICAgICBleHBlY3QobGltaXRlZExvbmdOdW1iZXIuZ2V0VGV4dCgpKS50b0VxdWFsKCdPdXRwdXQgbG9uZyBudW1iZXI6IDIzNDU0MzIzNDInKTtcbiAgICAgICB9KTtcbiAgICAgPC9maWxlPlxuICAgPC9leGFtcGxlPlxuKi9cbmZ1bmN0aW9uIGxpbWl0VG9GaWx0ZXIoKSB7XG4gIHJldHVybiBmdW5jdGlvbihpbnB1dCwgbGltaXQpIHtcbiAgICBpZiAoaXNOdW1iZXIoaW5wdXQpKSBpbnB1dCA9IGlucHV0LnRvU3RyaW5nKCk7XG4gICAgaWYgKCFpc0FycmF5KGlucHV0KSAmJiAhaXNTdHJpbmcoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG5cbiAgICBpZiAoTWF0aC5hYnMoTnVtYmVyKGxpbWl0KSkgPT09IEluZmluaXR5KSB7XG4gICAgICBsaW1pdCA9IE51bWJlcihsaW1pdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbWl0ID0gaW50KGxpbWl0KTtcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoaW5wdXQpKSB7XG4gICAgICAvL05hTiBjaGVjayBvbiBsaW1pdFxuICAgICAgaWYgKGxpbWl0KSB7XG4gICAgICAgIHJldHVybiBsaW1pdCA+PSAwID8gaW5wdXQuc2xpY2UoMCwgbGltaXQpIDogaW5wdXQuc2xpY2UobGltaXQsIGlucHV0Lmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgb3V0ID0gW10sXG4gICAgICBpLCBuO1xuXG4gICAgLy8gaWYgYWJzKGxpbWl0KSBleGNlZWRzIG1heGltdW0gbGVuZ3RoLCB0cmltIGl0XG4gICAgaWYgKGxpbWl0ID4gaW5wdXQubGVuZ3RoKVxuICAgICAgbGltaXQgPSBpbnB1dC5sZW5ndGg7XG4gICAgZWxzZSBpZiAobGltaXQgPCAtaW5wdXQubGVuZ3RoKVxuICAgICAgbGltaXQgPSAtaW5wdXQubGVuZ3RoO1xuXG4gICAgaWYgKGxpbWl0ID4gMCkge1xuICAgICAgaSA9IDA7XG4gICAgICBuID0gbGltaXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkgPSBpbnB1dC5sZW5ndGggKyBsaW1pdDtcbiAgICAgIG4gPSBpbnB1dC5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yICg7IGkgPCBuOyBpKyspIHtcbiAgICAgIG91dC5wdXNoKGlucHV0W2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xuICB9O1xufVxuXG4vKipcbiAqIEBuZ2RvYyBmaWx0ZXJcbiAqIEBuYW1lIG9yZGVyQnlcbiAqIEBraW5kIGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBPcmRlcnMgYSBzcGVjaWZpZWQgYGFycmF5YCBieSB0aGUgYGV4cHJlc3Npb25gIHByZWRpY2F0ZS4gSXQgaXMgb3JkZXJlZCBhbHBoYWJldGljYWxseVxuICogZm9yIHN0cmluZ3MgYW5kIG51bWVyaWNhbGx5IGZvciBudW1iZXJzLiBOb3RlOiBpZiB5b3Ugbm90aWNlIG51bWJlcnMgYXJlIG5vdCBiZWluZyBzb3J0ZWRcbiAqIGNvcnJlY3RseSwgbWFrZSBzdXJlIHRoZXkgYXJlIGFjdHVhbGx5IGJlaW5nIHNhdmVkIGFzIG51bWJlcnMgYW5kIG5vdCBzdHJpbmdzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbigqKXxzdHJpbmd8QXJyYXkuPChmdW5jdGlvbigqKXxzdHJpbmcpPj19IGV4cHJlc3Npb24gQSBwcmVkaWNhdGUgdG8gYmVcbiAqICAgIHVzZWQgYnkgdGhlIGNvbXBhcmF0b3IgdG8gZGV0ZXJtaW5lIHRoZSBvcmRlciBvZiBlbGVtZW50cy5cbiAqXG4gKiAgICBDYW4gYmUgb25lIG9mOlxuICpcbiAqICAgIC0gYGZ1bmN0aW9uYDogR2V0dGVyIGZ1bmN0aW9uLiBUaGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBzb3J0ZWQgdXNpbmcgdGhlXG4gKiAgICAgIGA8YCwgYD1gLCBgPmAgb3BlcmF0b3IuXG4gKiAgICAtIGBzdHJpbmdgOiBBbiBBbmd1bGFyIGV4cHJlc3Npb24uIFRoZSByZXN1bHQgb2YgdGhpcyBleHByZXNzaW9uIGlzIHVzZWQgdG8gY29tcGFyZSBlbGVtZW50c1xuICogICAgICAoZm9yIGV4YW1wbGUgYG5hbWVgIHRvIHNvcnQgYnkgYSBwcm9wZXJ0eSBjYWxsZWQgYG5hbWVgIG9yIGBuYW1lLnN1YnN0cigwLCAzKWAgdG8gc29ydCBieVxuICogICAgICAzIGZpcnN0IGNoYXJhY3RlcnMgb2YgYSBwcm9wZXJ0eSBjYWxsZWQgYG5hbWVgKS4gVGhlIHJlc3VsdCBvZiBhIGNvbnN0YW50IGV4cHJlc3Npb25cbiAqICAgICAgaXMgaW50ZXJwcmV0ZWQgYXMgYSBwcm9wZXJ0eSBuYW1lIHRvIGJlIHVzZWQgaW4gY29tcGFyaXNvbnMgKGZvciBleGFtcGxlIGBcInNwZWNpYWwgbmFtZVwiYFxuICogICAgICB0byBzb3J0IG9iamVjdCBieSB0aGUgdmFsdWUgb2YgdGhlaXIgYHNwZWNpYWwgbmFtZWAgcHJvcGVydHkpLiBBbiBleHByZXNzaW9uIGNhbiBiZVxuICogICAgICBvcHRpb25hbGx5IHByZWZpeGVkIHdpdGggYCtgIG9yIGAtYCB0byBjb250cm9sIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nIHNvcnQgb3JkZXJcbiAqICAgICAgKGZvciBleGFtcGxlLCBgK25hbWVgIG9yIGAtbmFtZWApLiBJZiBubyBwcm9wZXJ0eSBpcyBwcm92aWRlZCwgKGUuZy4gYCcrJ2ApIHRoZW4gdGhlIGFycmF5XG4gKiAgICAgIGVsZW1lbnQgaXRzZWxmIGlzIHVzZWQgdG8gY29tcGFyZSB3aGVyZSBzb3J0aW5nLlxuICogICAgLSBgQXJyYXlgOiBBbiBhcnJheSBvZiBmdW5jdGlvbiBvciBzdHJpbmcgcHJlZGljYXRlcy4gVGhlIGZpcnN0IHByZWRpY2F0ZSBpbiB0aGUgYXJyYXlcbiAqICAgICAgaXMgdXNlZCBmb3Igc29ydGluZywgYnV0IHdoZW4gdHdvIGl0ZW1zIGFyZSBlcXVpdmFsZW50LCB0aGUgbmV4dCBwcmVkaWNhdGUgaXMgdXNlZC5cbiAqXG4gKiAgICBJZiB0aGUgcHJlZGljYXRlIGlzIG1pc3Npbmcgb3IgZW1wdHkgdGhlbiBpdCBkZWZhdWx0cyB0byBgJysnYC5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSByZXZlcnNlIFJldmVyc2UgdGhlIG9yZGVyIG9mIHRoZSBhcnJheS5cbiAqIEByZXR1cm5zIHtBcnJheX0gU29ydGVkIGNvcHkgb2YgdGhlIHNvdXJjZSBhcnJheS5cbiAqXG4gKiBAZXhhbXBsZVxuICAgPGV4YW1wbGUgbW9kdWxlPVwib3JkZXJCeUV4YW1wbGVcIj5cbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgICA8c2NyaXB0PlxuICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ29yZGVyQnlFeGFtcGxlJywgW10pXG4gICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XG4gICAgICAgICAgICAgJHNjb3BlLmZyaWVuZHMgPVxuICAgICAgICAgICAgICAgICBbe25hbWU6J0pvaG4nLCBwaG9uZTonNTU1LTEyMTInLCBhZ2U6MTB9LFxuICAgICAgICAgICAgICAgICAge25hbWU6J01hcnknLCBwaG9uZTonNTU1LTk4NzYnLCBhZ2U6MTl9LFxuICAgICAgICAgICAgICAgICAge25hbWU6J01pa2UnLCBwaG9uZTonNTU1LTQzMjEnLCBhZ2U6MjF9LFxuICAgICAgICAgICAgICAgICAge25hbWU6J0FkYW0nLCBwaG9uZTonNTU1LTU2NzgnLCBhZ2U6MzV9LFxuICAgICAgICAgICAgICAgICAge25hbWU6J0p1bGllJywgcGhvbmU6JzU1NS04NzY1JywgYWdlOjI5fV07XG4gICAgICAgICAgICAgJHNjb3BlLnByZWRpY2F0ZSA9ICctYWdlJztcbiAgICAgICAgICAgfV0pO1xuICAgICAgIDwvc2NyaXB0PlxuICAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XG4gICAgICAgICA8cHJlPlNvcnRpbmcgcHJlZGljYXRlID0ge3twcmVkaWNhdGV9fTsgcmV2ZXJzZSA9IHt7cmV2ZXJzZX19PC9wcmU+XG4gICAgICAgICA8aHIvPlxuICAgICAgICAgWyA8YSBocmVmPVwiXCIgbmctY2xpY2s9XCJwcmVkaWNhdGU9JydcIj51bnNvcnRlZDwvYT4gXVxuICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZnJpZW5kXCI+XG4gICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICA8dGg+PGEgaHJlZj1cIlwiIG5nLWNsaWNrPVwicHJlZGljYXRlID0gJ25hbWUnOyByZXZlcnNlPWZhbHNlXCI+TmFtZTwvYT5cbiAgICAgICAgICAgICAgICAgKDxhIGhyZWY9XCJcIiBuZy1jbGljaz1cInByZWRpY2F0ZSA9ICctbmFtZSc7IHJldmVyc2U9ZmFsc2VcIj5ePC9hPik8L3RoPlxuICAgICAgICAgICAgIDx0aD48YSBocmVmPVwiXCIgbmctY2xpY2s9XCJwcmVkaWNhdGUgPSAncGhvbmUnOyByZXZlcnNlPSFyZXZlcnNlXCI+UGhvbmUgTnVtYmVyPC9hPjwvdGg+XG4gICAgICAgICAgICAgPHRoPjxhIGhyZWY9XCJcIiBuZy1jbGljaz1cInByZWRpY2F0ZSA9ICdhZ2UnOyByZXZlcnNlPSFyZXZlcnNlXCI+QWdlPC9hPjwvdGg+XG4gICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgIDx0ciBuZy1yZXBlYXQ9XCJmcmllbmQgaW4gZnJpZW5kcyB8IG9yZGVyQnk6cHJlZGljYXRlOnJldmVyc2VcIj5cbiAgICAgICAgICAgICA8dGQ+e3tmcmllbmQubmFtZX19PC90ZD5cbiAgICAgICAgICAgICA8dGQ+e3tmcmllbmQucGhvbmV9fTwvdGQ+XG4gICAgICAgICAgICAgPHRkPnt7ZnJpZW5kLmFnZX19PC90ZD5cbiAgICAgICAgICAgPC90cj5cbiAgICAgICAgIDwvdGFibGU+XG4gICAgICAgPC9kaXY+XG4gICAgIDwvZmlsZT5cbiAgIDwvZXhhbXBsZT5cbiAqXG4gKiBJdCdzIGFsc28gcG9zc2libGUgdG8gY2FsbCB0aGUgb3JkZXJCeSBmaWx0ZXIgbWFudWFsbHksIGJ5IGluamVjdGluZyBgJGZpbHRlcmAsIHJldHJpZXZpbmcgdGhlXG4gKiBmaWx0ZXIgcm91dGluZSB3aXRoIGAkZmlsdGVyKCdvcmRlckJ5JylgLCBhbmQgY2FsbGluZyB0aGUgcmV0dXJuZWQgZmlsdGVyIHJvdXRpbmUgd2l0aCB0aGVcbiAqIGRlc2lyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIEBleGFtcGxlXG4gIDxleGFtcGxlIG1vZHVsZT1cIm9yZGVyQnlFeGFtcGxlXCI+XG4gICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cImZyaWVuZFwiPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aD48YSBocmVmPVwiXCIgbmctY2xpY2s9XCJyZXZlcnNlPWZhbHNlO29yZGVyKCduYW1lJywgZmFsc2UpXCI+TmFtZTwvYT5cbiAgICAgICAgICAgICAgKDxhIGhyZWY9XCJcIiBuZy1jbGljaz1cIm9yZGVyKCctbmFtZScsZmFsc2UpXCI+XjwvYT4pPC90aD5cbiAgICAgICAgICAgIDx0aD48YSBocmVmPVwiXCIgbmctY2xpY2s9XCJyZXZlcnNlPSFyZXZlcnNlO29yZGVyKCdwaG9uZScsIHJldmVyc2UpXCI+UGhvbmUgTnVtYmVyPC9hPjwvdGg+XG4gICAgICAgICAgICA8dGg+PGEgaHJlZj1cIlwiIG5nLWNsaWNrPVwicmV2ZXJzZT0hcmV2ZXJzZTtvcmRlcignYWdlJyxyZXZlcnNlKVwiPkFnZTwvYT48L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyIG5nLXJlcGVhdD1cImZyaWVuZCBpbiBmcmllbmRzXCI+XG4gICAgICAgICAgICA8dGQ+e3tmcmllbmQubmFtZX19PC90ZD5cbiAgICAgICAgICAgIDx0ZD57e2ZyaWVuZC5waG9uZX19PC90ZD5cbiAgICAgICAgICAgIDx0ZD57e2ZyaWVuZC5hZ2V9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZmlsZT5cblxuICAgIDxmaWxlIG5hbWU9XCJzY3JpcHQuanNcIj5cbiAgICAgIGFuZ3VsYXIubW9kdWxlKCdvcmRlckJ5RXhhbXBsZScsIFtdKVxuICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsICckZmlsdGVyJywgZnVuY3Rpb24oJHNjb3BlLCAkZmlsdGVyKSB7XG4gICAgICAgICAgdmFyIG9yZGVyQnkgPSAkZmlsdGVyKCdvcmRlckJ5Jyk7XG4gICAgICAgICAgJHNjb3BlLmZyaWVuZHMgPSBbXG4gICAgICAgICAgICB7IG5hbWU6ICdKb2huJywgICAgcGhvbmU6ICc1NTUtMTIxMicsICAgIGFnZTogMTAgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ01hcnknLCAgICBwaG9uZTogJzU1NS05ODc2JywgICAgYWdlOiAxOSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnTWlrZScsICAgIHBob25lOiAnNTU1LTQzMjEnLCAgICBhZ2U6IDIxIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdBZGFtJywgICAgcGhvbmU6ICc1NTUtNTY3OCcsICAgIGFnZTogMzUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ0p1bGllJywgICBwaG9uZTogJzU1NS04NzY1JywgICAgYWdlOiAyOSB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICAkc2NvcGUub3JkZXIgPSBmdW5jdGlvbihwcmVkaWNhdGUsIHJldmVyc2UpIHtcbiAgICAgICAgICAgICRzY29wZS5mcmllbmRzID0gb3JkZXJCeSgkc2NvcGUuZnJpZW5kcywgcHJlZGljYXRlLCByZXZlcnNlKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgICRzY29wZS5vcmRlcignLWFnZScsZmFsc2UpO1xuICAgICAgICB9XSk7XG4gICAgPC9maWxlPlxuPC9leGFtcGxlPlxuICovXG5vcmRlckJ5RmlsdGVyLiRpbmplY3QgPSBbJyRwYXJzZSddO1xuZnVuY3Rpb24gb3JkZXJCeUZpbHRlcigkcGFyc2UpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBzb3J0UHJlZGljYXRlLCByZXZlcnNlT3JkZXIpIHtcbiAgICBpZiAoIShpc0FycmF5TGlrZShhcnJheSkpKSByZXR1cm4gYXJyYXk7XG4gICAgc29ydFByZWRpY2F0ZSA9IGlzQXJyYXkoc29ydFByZWRpY2F0ZSkgPyBzb3J0UHJlZGljYXRlIDogW3NvcnRQcmVkaWNhdGVdO1xuICAgIGlmIChzb3J0UHJlZGljYXRlLmxlbmd0aCA9PT0gMCkgeyBzb3J0UHJlZGljYXRlID0gWycrJ107IH1cbiAgICBzb3J0UHJlZGljYXRlID0gc29ydFByZWRpY2F0ZS5tYXAoZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgICB2YXIgZGVzY2VuZGluZyA9IGZhbHNlLCBnZXQgPSBwcmVkaWNhdGUgfHwgaWRlbnRpdHk7XG4gICAgICBpZiAoaXNTdHJpbmcocHJlZGljYXRlKSkge1xuICAgICAgICBpZiAoKHByZWRpY2F0ZS5jaGFyQXQoMCkgPT0gJysnIHx8IHByZWRpY2F0ZS5jaGFyQXQoMCkgPT0gJy0nKSkge1xuICAgICAgICAgIGRlc2NlbmRpbmcgPSBwcmVkaWNhdGUuY2hhckF0KDApID09ICctJztcbiAgICAgICAgICBwcmVkaWNhdGUgPSBwcmVkaWNhdGUuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVkaWNhdGUgPT09ICcnKSB7XG4gICAgICAgICAgLy8gRWZmZWN0aXZlbHkgbm8gcHJlZGljYXRlIHdhcyBwYXNzZWQgc28gd2UgY29tcGFyZSBpZGVudGl0eVxuICAgICAgICAgIHJldHVybiByZXZlcnNlQ29tcGFyYXRvcihmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcGFyZShhLCBiKTtcbiAgICAgICAgICB9LCBkZXNjZW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgPSAkcGFyc2UocHJlZGljYXRlKTtcbiAgICAgICAgaWYgKGdldC5jb25zdGFudCkge1xuICAgICAgICAgIHZhciBrZXkgPSBnZXQoKTtcbiAgICAgICAgICByZXR1cm4gcmV2ZXJzZUNvbXBhcmF0b3IoZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmUoYVtrZXldLCBiW2tleV0pO1xuICAgICAgICAgIH0sIGRlc2NlbmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV2ZXJzZUNvbXBhcmF0b3IoZnVuY3Rpb24oYSwgYikge1xuICAgICAgICByZXR1cm4gY29tcGFyZShnZXQoYSksZ2V0KGIpKTtcbiAgICAgIH0sIGRlc2NlbmRpbmcpO1xuICAgIH0pO1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5KS5zb3J0KHJldmVyc2VDb21wYXJhdG9yKGNvbXBhcmF0b3IsIHJldmVyc2VPcmRlcikpO1xuXG4gICAgZnVuY3Rpb24gY29tcGFyYXRvcihvMSwgbzIpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc29ydFByZWRpY2F0ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29tcCA9IHNvcnRQcmVkaWNhdGVbaV0obzEsIG8yKTtcbiAgICAgICAgaWYgKGNvbXAgIT09IDApIHJldHVybiBjb21wO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJldmVyc2VDb21wYXJhdG9yKGNvbXAsIGRlc2NlbmRpbmcpIHtcbiAgICAgIHJldHVybiBkZXNjZW5kaW5nXG4gICAgICAgICAgPyBmdW5jdGlvbihhLCBiKSB7cmV0dXJuIGNvbXAoYixhKTt9XG4gICAgICAgICAgOiBjb21wO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21wYXJlKHYxLCB2Mikge1xuICAgICAgdmFyIHQxID0gdHlwZW9mIHYxO1xuICAgICAgdmFyIHQyID0gdHlwZW9mIHYyO1xuICAgICAgaWYgKHQxID09IHQyKSB7XG4gICAgICAgIGlmIChpc0RhdGUodjEpICYmIGlzRGF0ZSh2MikpIHtcbiAgICAgICAgICB2MSA9IHYxLnZhbHVlT2YoKTtcbiAgICAgICAgICB2MiA9IHYyLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodDEgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICB2MSA9IHYxLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgIHYyID0gdjIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodjEgPT09IHYyKSByZXR1cm4gMDtcbiAgICAgICAgcmV0dXJuIHYxIDwgdjIgPyAtMSA6IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdDEgPCB0MiA/IC0xIDogMTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIG5nRGlyZWN0aXZlKGRpcmVjdGl2ZSkge1xuICBpZiAoaXNGdW5jdGlvbihkaXJlY3RpdmUpKSB7XG4gICAgZGlyZWN0aXZlID0ge1xuICAgICAgbGluazogZGlyZWN0aXZlXG4gICAgfTtcbiAgfVxuICBkaXJlY3RpdmUucmVzdHJpY3QgPSBkaXJlY3RpdmUucmVzdHJpY3QgfHwgJ0FDJztcbiAgcmV0dXJuIHZhbHVlRm4oZGlyZWN0aXZlKTtcbn1cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBhXG4gKiBAcmVzdHJpY3QgRVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogTW9kaWZpZXMgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIGh0bWwgQSB0YWcgc28gdGhhdCB0aGUgZGVmYXVsdCBhY3Rpb24gaXMgcHJldmVudGVkIHdoZW5cbiAqIHRoZSBocmVmIGF0dHJpYnV0ZSBpcyBlbXB0eS5cbiAqXG4gKiBUaGlzIGNoYW5nZSBwZXJtaXRzIHRoZSBlYXN5IGNyZWF0aW9uIG9mIGFjdGlvbiBsaW5rcyB3aXRoIHRoZSBgbmdDbGlja2AgZGlyZWN0aXZlXG4gKiB3aXRob3V0IGNoYW5naW5nIHRoZSBsb2NhdGlvbiBvciBjYXVzaW5nIHBhZ2UgcmVsb2FkcywgZS5nLjpcbiAqIGA8YSBocmVmPVwiXCIgbmctY2xpY2s9XCJsaXN0LmFkZEl0ZW0oKVwiPkFkZCBJdGVtPC9hPmBcbiAqL1xudmFyIGh0bWxBbmNob3JEaXJlY3RpdmUgPSB2YWx1ZUZuKHtcbiAgcmVzdHJpY3Q6ICdFJyxcbiAgY29tcGlsZTogZnVuY3Rpb24oZWxlbWVudCwgYXR0cikge1xuICAgIGlmICghYXR0ci5ocmVmICYmICFhdHRyLnhsaW5rSHJlZiAmJiAhYXR0ci5uYW1lKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQpIHtcbiAgICAgICAgLy8gU1ZHQUVsZW1lbnQgZG9lcyBub3QgdXNlIHRoZSBocmVmIGF0dHJpYnV0ZSwgYnV0IHJhdGhlciB0aGUgJ3hsaW5rSHJlZicgYXR0cmlidXRlLlxuICAgICAgICB2YXIgaHJlZiA9IHRvU3RyaW5nLmNhbGwoZWxlbWVudC5wcm9wKCdocmVmJykpID09PSAnW29iamVjdCBTVkdBbmltYXRlZFN0cmluZ10nID9cbiAgICAgICAgICAgICAgICAgICAneGxpbms6aHJlZicgOiAnaHJlZic7XG4gICAgICAgIGVsZW1lbnQub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAvLyBpZiB3ZSBoYXZlIG5vIGhyZWYgdXJsLCB0aGVuIGRvbid0IG5hdmlnYXRlIGFueXdoZXJlLlxuICAgICAgICAgIGlmICghZWxlbWVudC5hdHRyKGhyZWYpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgbmdIcmVmXG4gKiBAcmVzdHJpY3QgQVxuICogQHByaW9yaXR5IDk5XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBVc2luZyBBbmd1bGFyIG1hcmt1cCBsaWtlIGB7e2hhc2h9fWAgaW4gYW4gaHJlZiBhdHRyaWJ1dGUgd2lsbFxuICogbWFrZSB0aGUgbGluayBnbyB0byB0aGUgd3JvbmcgVVJMIGlmIHRoZSB1c2VyIGNsaWNrcyBpdCBiZWZvcmVcbiAqIEFuZ3VsYXIgaGFzIGEgY2hhbmNlIHRvIHJlcGxhY2UgdGhlIGB7e2hhc2h9fWAgbWFya3VwIHdpdGggaXRzXG4gKiB2YWx1ZS4gVW50aWwgQW5ndWxhciByZXBsYWNlcyB0aGUgbWFya3VwIHRoZSBsaW5rIHdpbGwgYmUgYnJva2VuXG4gKiBhbmQgd2lsbCBtb3N0IGxpa2VseSByZXR1cm4gYSA0MDQgZXJyb3IuXG4gKlxuICogVGhlIGBuZ0hyZWZgIGRpcmVjdGl2ZSBzb2x2ZXMgdGhpcyBwcm9ibGVtLlxuICpcbiAqIFRoZSB3cm9uZyB3YXkgdG8gd3JpdGUgaXQ6XG4gKiBgYGBodG1sXG4gKiA8YSBocmVmPVwiaHR0cDovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyL3t7aGFzaH19XCI+bGluazE8L2E+XG4gKiBgYGBcbiAqXG4gKiBUaGUgY29ycmVjdCB3YXkgdG8gd3JpdGUgaXQ6XG4gKiBgYGBodG1sXG4gKiA8YSBuZy1ocmVmPVwiaHR0cDovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyL3t7aGFzaH19XCI+bGluazE8L2E+XG4gKiBgYGBcbiAqXG4gKiBAZWxlbWVudCBBXG4gKiBAcGFyYW0ge3RlbXBsYXRlfSBuZ0hyZWYgYW55IHN0cmluZyB3aGljaCBjYW4gY29udGFpbiBge3t9fWAgbWFya3VwLlxuICpcbiAqIEBleGFtcGxlXG4gKiBUaGlzIGV4YW1wbGUgc2hvd3MgdmFyaW91cyBjb21iaW5hdGlvbnMgb2YgYGhyZWZgLCBgbmctaHJlZmAgYW5kIGBuZy1jbGlja2AgYXR0cmlidXRlc1xuICogaW4gbGlua3MgYW5kIHRoZWlyIGRpZmZlcmVudCBiZWhhdmlvcnM6XG4gICAgPGV4YW1wbGU+XG4gICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgICA8aW5wdXQgbmctbW9kZWw9XCJ2YWx1ZVwiIC8+PGJyIC8+XG4gICAgICAgIDxhIGlkPVwibGluay0xXCIgaHJlZiBuZy1jbGljaz1cInZhbHVlID0gMVwiPmxpbmsgMTwvYT4gKGxpbmssIGRvbid0IHJlbG9hZCk8YnIgLz5cbiAgICAgICAgPGEgaWQ9XCJsaW5rLTJcIiBocmVmPVwiXCIgbmctY2xpY2s9XCJ2YWx1ZSA9IDJcIj5saW5rIDI8L2E+IChsaW5rLCBkb24ndCByZWxvYWQpPGJyIC8+XG4gICAgICAgIDxhIGlkPVwibGluay0zXCIgbmctaHJlZj1cIi97eycxMjMnfX1cIj5saW5rIDM8L2E+IChsaW5rLCByZWxvYWQhKTxiciAvPlxuICAgICAgICA8YSBpZD1cImxpbmstNFwiIGhyZWY9XCJcIiBuYW1lPVwieHhcIiBuZy1jbGljaz1cInZhbHVlID0gNFwiPmFuY2hvcjwvYT4gKGxpbmssIGRvbid0IHJlbG9hZCk8YnIgLz5cbiAgICAgICAgPGEgaWQ9XCJsaW5rLTVcIiBuYW1lPVwieHh4XCIgbmctY2xpY2s9XCJ2YWx1ZSA9IDVcIj5hbmNob3I8L2E+IChubyBsaW5rKTxiciAvPlxuICAgICAgICA8YSBpZD1cImxpbmstNlwiIG5nLWhyZWY9XCJ7e3ZhbHVlfX1cIj5saW5rPC9hPiAobGluaywgY2hhbmdlIGxvY2F0aW9uKVxuICAgICAgPC9maWxlPlxuICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgICBpdCgnc2hvdWxkIGV4ZWN1dGUgbmctY2xpY2sgYnV0IG5vdCByZWxvYWQgd2hlbiBocmVmIHdpdGhvdXQgdmFsdWUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBlbGVtZW50KGJ5LmlkKCdsaW5rLTEnKSkuY2xpY2soKTtcbiAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5tb2RlbCgndmFsdWUnKSkuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKS50b0VxdWFsKCcxJyk7XG4gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2xpbmstMScpKS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSkudG9CZSgnJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZXhlY3V0ZSBuZy1jbGljayBidXQgbm90IHJlbG9hZCB3aGVuIGhyZWYgZW1wdHkgc3RyaW5nJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZWxlbWVudChieS5pZCgnbGluay0yJykpLmNsaWNrKCk7XG4gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkubW9kZWwoJ3ZhbHVlJykpLmdldEF0dHJpYnV0ZSgndmFsdWUnKSkudG9FcXVhbCgnMicpO1xuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdsaW5rLTInKSkuZ2V0QXR0cmlidXRlKCdocmVmJykpLnRvQmUoJycpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGV4ZWN1dGUgbmctY2xpY2sgYW5kIGNoYW5nZSB1cmwgd2hlbiBuZy1ocmVmIHNwZWNpZmllZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdsaW5rLTMnKSkuZ2V0QXR0cmlidXRlKCdocmVmJykpLnRvTWF0Y2goL1xcLzEyMyQvKTtcblxuICAgICAgICAgIGVsZW1lbnQoYnkuaWQoJ2xpbmstMycpKS5jbGljaygpO1xuXG4gICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgbmF2aWdhdGUgYXdheSBmcm9tIGFuIEFuZ3VsYXIgcGFnZSwgc28gd2UgbmVlZFxuICAgICAgICAgIC8vIHRvIHVzZSBicm93c2VyLmRyaXZlciB0byBnZXQgdGhlIGJhc2Ugd2ViZHJpdmVyLlxuXG4gICAgICAgICAgYnJvd3Nlci53YWl0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGJyb3dzZXIuZHJpdmVyLmdldEN1cnJlbnRVcmwoKS50aGVuKGZ1bmN0aW9uKHVybCkge1xuICAgICAgICAgICAgICByZXR1cm4gdXJsLm1hdGNoKC9cXC8xMjMkLyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LCA1MDAwLCAncGFnZSBzaG91bGQgbmF2aWdhdGUgdG8gLzEyMycpO1xuICAgICAgICB9KTtcblxuICAgICAgICB4aXQoJ3Nob3VsZCBleGVjdXRlIG5nLWNsaWNrIGJ1dCBub3QgcmVsb2FkIHdoZW4gaHJlZiBlbXB0eSBzdHJpbmcgYW5kIG5hbWUgc3BlY2lmaWVkJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZWxlbWVudChieS5pZCgnbGluay00JykpLmNsaWNrKCk7XG4gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkubW9kZWwoJ3ZhbHVlJykpLmdldEF0dHJpYnV0ZSgndmFsdWUnKSkudG9FcXVhbCgnNCcpO1xuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdsaW5rLTQnKSkuZ2V0QXR0cmlidXRlKCdocmVmJykpLnRvQmUoJycpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGV4ZWN1dGUgbmctY2xpY2sgYnV0IG5vdCByZWxvYWQgd2hlbiBubyBocmVmIGJ1dCBuYW1lIHNwZWNpZmllZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGVsZW1lbnQoYnkuaWQoJ2xpbmstNScpKS5jbGljaygpO1xuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5Lm1vZGVsKCd2YWx1ZScpKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRvRXF1YWwoJzUnKTtcbiAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnbGluay01JykpLmdldEF0dHJpYnV0ZSgnaHJlZicpKS50b0JlKG51bGwpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIG9ubHkgY2hhbmdlIHVybCB3aGVuIG9ubHkgbmctaHJlZicsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3ZhbHVlJykpLmNsZWFyKCk7XG4gICAgICAgICAgZWxlbWVudChieS5tb2RlbCgndmFsdWUnKSkuc2VuZEtleXMoJzYnKTtcbiAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnbGluay02JykpLmdldEF0dHJpYnV0ZSgnaHJlZicpKS50b01hdGNoKC9cXC82JC8pO1xuXG4gICAgICAgICAgZWxlbWVudChieS5pZCgnbGluay02JykpLmNsaWNrKCk7XG5cbiAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBuYXZpZ2F0ZSBhd2F5IGZyb20gYW4gQW5ndWxhciBwYWdlLCBzbyB3ZSBuZWVkXG4gICAgICAgICAgLy8gdG8gdXNlIGJyb3dzZXIuZHJpdmVyIHRvIGdldCB0aGUgYmFzZSB3ZWJkcml2ZXIuXG4gICAgICAgICAgYnJvd3Nlci53YWl0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGJyb3dzZXIuZHJpdmVyLmdldEN1cnJlbnRVcmwoKS50aGVuKGZ1bmN0aW9uKHVybCkge1xuICAgICAgICAgICAgICByZXR1cm4gdXJsLm1hdGNoKC9cXC82JC8pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgNTAwMCwgJ3BhZ2Ugc2hvdWxkIG5hdmlnYXRlIHRvIC82Jyk7XG4gICAgICAgIH0pO1xuICAgICAgPC9maWxlPlxuICAgIDwvZXhhbXBsZT5cbiAqL1xuXG4vKipcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAqIEBuYW1lIG5nU3JjXG4gKiBAcmVzdHJpY3QgQVxuICogQHByaW9yaXR5IDk5XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBVc2luZyBBbmd1bGFyIG1hcmt1cCBsaWtlIGB7e2hhc2h9fWAgaW4gYSBgc3JjYCBhdHRyaWJ1dGUgZG9lc24ndFxuICogd29yayByaWdodDogVGhlIGJyb3dzZXIgd2lsbCBmZXRjaCBmcm9tIHRoZSBVUkwgd2l0aCB0aGUgbGl0ZXJhbFxuICogdGV4dCBge3toYXNofX1gIHVudGlsIEFuZ3VsYXIgcmVwbGFjZXMgdGhlIGV4cHJlc3Npb24gaW5zaWRlXG4gKiBge3toYXNofX1gLiBUaGUgYG5nU3JjYCBkaXJlY3RpdmUgc29sdmVzIHRoaXMgcHJvYmxlbS5cbiAqXG4gKiBUaGUgYnVnZ3kgd2F5IHRvIHdyaXRlIGl0OlxuICogYGBgaHRtbFxuICogPGltZyBzcmM9XCJodHRwOi8vd3d3LmdyYXZhdGFyLmNvbS9hdmF0YXIve3toYXNofX1cIi8+XG4gKiBgYGBcbiAqXG4gKiBUaGUgY29ycmVjdCB3YXkgdG8gd3JpdGUgaXQ6XG4gKiBgYGBodG1sXG4gKiA8aW1nIG5nLXNyYz1cImh0dHA6Ly93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci97e2hhc2h9fVwiLz5cbiAqIGBgYFxuICpcbiAqIEBlbGVtZW50IElNR1xuICogQHBhcmFtIHt0ZW1wbGF0ZX0gbmdTcmMgYW55IHN0cmluZyB3aGljaCBjYW4gY29udGFpbiBge3t9fWAgbWFya3VwLlxuICovXG5cbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgbmdTcmNzZXRcbiAqIEByZXN0cmljdCBBXG4gKiBAcHJpb3JpdHkgOTlcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFVzaW5nIEFuZ3VsYXIgbWFya3VwIGxpa2UgYHt7aGFzaH19YCBpbiBhIGBzcmNzZXRgIGF0dHJpYnV0ZSBkb2Vzbid0XG4gKiB3b3JrIHJpZ2h0OiBUaGUgYnJvd3NlciB3aWxsIGZldGNoIGZyb20gdGhlIFVSTCB3aXRoIHRoZSBsaXRlcmFsXG4gKiB0ZXh0IGB7e2hhc2h9fWAgdW50aWwgQW5ndWxhciByZXBsYWNlcyB0aGUgZXhwcmVzc2lvbiBpbnNpZGVcbiAqIGB7e2hhc2h9fWAuIFRoZSBgbmdTcmNzZXRgIGRpcmVjdGl2ZSBzb2x2ZXMgdGhpcyBwcm9ibGVtLlxuICpcbiAqIFRoZSBidWdneSB3YXkgdG8gd3JpdGUgaXQ6XG4gKiBgYGBodG1sXG4gKiA8aW1nIHNyY3NldD1cImh0dHA6Ly93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci97e2hhc2h9fSAyeFwiLz5cbiAqIGBgYFxuICpcbiAqIFRoZSBjb3JyZWN0IHdheSB0byB3cml0ZSBpdDpcbiAqIGBgYGh0bWxcbiAqIDxpbWcgbmctc3Jjc2V0PVwiaHR0cDovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyL3t7aGFzaH19IDJ4XCIvPlxuICogYGBgXG4gKlxuICogQGVsZW1lbnQgSU1HXG4gKiBAcGFyYW0ge3RlbXBsYXRlfSBuZ1NyY3NldCBhbnkgc3RyaW5nIHdoaWNoIGNhbiBjb250YWluIGB7e319YCBtYXJrdXAuXG4gKi9cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ0Rpc2FibGVkXG4gKiBAcmVzdHJpY3QgQVxuICogQHByaW9yaXR5IDEwMFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIFdlIHNob3VsZG4ndCBkbyB0aGlzLCBiZWNhdXNlIGl0IHdpbGwgbWFrZSB0aGUgYnV0dG9uIGVuYWJsZWQgb24gQ2hyb21lL0ZpcmVmb3ggYnV0IG5vdCBvbiBJRTggYW5kIG9sZGVyIElFczpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgbmctaW5pdD1cInNjb3BlID0geyBpc0Rpc2FibGVkOiBmYWxzZSB9XCI+XG4gKiAgPGJ1dHRvbiBkaXNhYmxlZD1cInt7c2NvcGUuaXNEaXNhYmxlZH19XCI+RGlzYWJsZWQ8L2J1dHRvbj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKlxuICogVGhlIEhUTUwgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCByZXF1aXJlIGJyb3dzZXJzIHRvIHByZXNlcnZlIHRoZSB2YWx1ZXMgb2YgYm9vbGVhbiBhdHRyaWJ1dGVzXG4gKiBzdWNoIGFzIGRpc2FibGVkLiAoVGhlaXIgcHJlc2VuY2UgbWVhbnMgdHJ1ZSBhbmQgdGhlaXIgYWJzZW5jZSBtZWFucyBmYWxzZS4pXG4gKiBJZiB3ZSBwdXQgYW4gQW5ndWxhciBpbnRlcnBvbGF0aW9uIGV4cHJlc3Npb24gaW50byBzdWNoIGFuIGF0dHJpYnV0ZSB0aGVuIHRoZVxuICogYmluZGluZyBpbmZvcm1hdGlvbiB3b3VsZCBiZSBsb3N0IHdoZW4gdGhlIGJyb3dzZXIgcmVtb3ZlcyB0aGUgYXR0cmlidXRlLlxuICogVGhlIGBuZ0Rpc2FibGVkYCBkaXJlY3RpdmUgc29sdmVzIHRoaXMgcHJvYmxlbSBmb3IgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlLlxuICogVGhpcyBjb21wbGVtZW50YXJ5IGRpcmVjdGl2ZSBpcyBub3QgcmVtb3ZlZCBieSB0aGUgYnJvd3NlciBhbmQgc28gcHJvdmlkZXNcbiAqIGEgcGVybWFuZW50IHJlbGlhYmxlIHBsYWNlIHRvIHN0b3JlIHRoZSBiaW5kaW5nIGluZm9ybWF0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gICAgPGV4YW1wbGU+XG4gICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgICBDbGljayBtZSB0byB0b2dnbGU6IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuZy1tb2RlbD1cImNoZWNrZWRcIj48YnIvPlxuICAgICAgICA8YnV0dG9uIG5nLW1vZGVsPVwiYnV0dG9uXCIgbmctZGlzYWJsZWQ9XCJjaGVja2VkXCI+QnV0dG9uPC9idXR0b24+XG4gICAgICA8L2ZpbGU+XG4gICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gICAgICAgIGl0KCdzaG91bGQgdG9nZ2xlIGJ1dHRvbicsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnYnV0dG9uJykpLmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSkudG9CZUZhbHN5KCk7XG4gICAgICAgICAgZWxlbWVudChieS5tb2RlbCgnY2hlY2tlZCcpKS5jbGljaygpO1xuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnYnV0dG9uJykpLmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSkudG9CZVRydXRoeSgpO1xuICAgICAgICB9KTtcbiAgICAgIDwvZmlsZT5cbiAgICA8L2V4YW1wbGU+XG4gKlxuICogQGVsZW1lbnQgSU5QVVRcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdEaXNhYmxlZCBJZiB0aGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaXMgdHJ1dGh5LFxuICogICAgIHRoZW4gc3BlY2lhbCBhdHRyaWJ1dGUgXCJkaXNhYmxlZFwiIHdpbGwgYmUgc2V0IG9uIHRoZSBlbGVtZW50XG4gKi9cblxuXG4vKipcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAqIEBuYW1lIG5nQ2hlY2tlZFxuICogQHJlc3RyaWN0IEFcbiAqIEBwcmlvcml0eSAxMDBcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBIVE1MIHNwZWNpZmljYXRpb24gZG9lcyBub3QgcmVxdWlyZSBicm93c2VycyB0byBwcmVzZXJ2ZSB0aGUgdmFsdWVzIG9mIGJvb2xlYW4gYXR0cmlidXRlc1xuICogc3VjaCBhcyBjaGVja2VkLiAoVGhlaXIgcHJlc2VuY2UgbWVhbnMgdHJ1ZSBhbmQgdGhlaXIgYWJzZW5jZSBtZWFucyBmYWxzZS4pXG4gKiBJZiB3ZSBwdXQgYW4gQW5ndWxhciBpbnRlcnBvbGF0aW9uIGV4cHJlc3Npb24gaW50byBzdWNoIGFuIGF0dHJpYnV0ZSB0aGVuIHRoZVxuICogYmluZGluZyBpbmZvcm1hdGlvbiB3b3VsZCBiZSBsb3N0IHdoZW4gdGhlIGJyb3dzZXIgcmVtb3ZlcyB0aGUgYXR0cmlidXRlLlxuICogVGhlIGBuZ0NoZWNrZWRgIGRpcmVjdGl2ZSBzb2x2ZXMgdGhpcyBwcm9ibGVtIGZvciB0aGUgYGNoZWNrZWRgIGF0dHJpYnV0ZS5cbiAqIFRoaXMgY29tcGxlbWVudGFyeSBkaXJlY3RpdmUgaXMgbm90IHJlbW92ZWQgYnkgdGhlIGJyb3dzZXIgYW5kIHNvIHByb3ZpZGVzXG4gKiBhIHBlcm1hbmVudCByZWxpYWJsZSBwbGFjZSB0byBzdG9yZSB0aGUgYmluZGluZyBpbmZvcm1hdGlvbi5cbiAqIEBleGFtcGxlXG4gICAgPGV4YW1wbGU+XG4gICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgICBDaGVjayBtZSB0byBjaGVjayBib3RoOiA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmctbW9kZWw9XCJtYXN0ZXJcIj48YnIvPlxuICAgICAgICA8aW5wdXQgaWQ9XCJjaGVja1NsYXZlXCIgdHlwZT1cImNoZWNrYm94XCIgbmctY2hlY2tlZD1cIm1hc3RlclwiPlxuICAgICAgPC9maWxlPlxuICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgICBpdCgnc2hvdWxkIGNoZWNrIGJvdGggY2hlY2tCb3hlcycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdjaGVja1NsYXZlJykpLmdldEF0dHJpYnV0ZSgnY2hlY2tlZCcpKS50b0JlRmFsc3koKTtcbiAgICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdtYXN0ZXInKSkuY2xpY2soKTtcbiAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnY2hlY2tTbGF2ZScpKS5nZXRBdHRyaWJ1dGUoJ2NoZWNrZWQnKSkudG9CZVRydXRoeSgpO1xuICAgICAgICB9KTtcbiAgICAgIDwvZmlsZT5cbiAgICA8L2V4YW1wbGU+XG4gKlxuICogQGVsZW1lbnQgSU5QVVRcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdDaGVja2VkIElmIHRoZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufSBpcyB0cnV0aHksXG4gKiAgICAgdGhlbiBzcGVjaWFsIGF0dHJpYnV0ZSBcImNoZWNrZWRcIiB3aWxsIGJlIHNldCBvbiB0aGUgZWxlbWVudFxuICovXG5cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ1JlYWRvbmx5XG4gKiBAcmVzdHJpY3QgQVxuICogQHByaW9yaXR5IDEwMFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIEhUTUwgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCByZXF1aXJlIGJyb3dzZXJzIHRvIHByZXNlcnZlIHRoZSB2YWx1ZXMgb2YgYm9vbGVhbiBhdHRyaWJ1dGVzXG4gKiBzdWNoIGFzIHJlYWRvbmx5LiAoVGhlaXIgcHJlc2VuY2UgbWVhbnMgdHJ1ZSBhbmQgdGhlaXIgYWJzZW5jZSBtZWFucyBmYWxzZS4pXG4gKiBJZiB3ZSBwdXQgYW4gQW5ndWxhciBpbnRlcnBvbGF0aW9uIGV4cHJlc3Npb24gaW50byBzdWNoIGFuIGF0dHJpYnV0ZSB0aGVuIHRoZVxuICogYmluZGluZyBpbmZvcm1hdGlvbiB3b3VsZCBiZSBsb3N0IHdoZW4gdGhlIGJyb3dzZXIgcmVtb3ZlcyB0aGUgYXR0cmlidXRlLlxuICogVGhlIGBuZ1JlYWRvbmx5YCBkaXJlY3RpdmUgc29sdmVzIHRoaXMgcHJvYmxlbSBmb3IgdGhlIGByZWFkb25seWAgYXR0cmlidXRlLlxuICogVGhpcyBjb21wbGVtZW50YXJ5IGRpcmVjdGl2ZSBpcyBub3QgcmVtb3ZlZCBieSB0aGUgYnJvd3NlciBhbmQgc28gcHJvdmlkZXNcbiAqIGEgcGVybWFuZW50IHJlbGlhYmxlIHBsYWNlIHRvIHN0b3JlIHRoZSBiaW5kaW5nIGluZm9ybWF0aW9uLlxuICogQGV4YW1wbGVcbiAgICA8ZXhhbXBsZT5cbiAgICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgIENoZWNrIG1lIHRvIG1ha2UgdGV4dCByZWFkb25seTogPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5nLW1vZGVsPVwiY2hlY2tlZFwiPjxici8+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5nLXJlYWRvbmx5PVwiY2hlY2tlZFwiIHZhbHVlPVwiSSdtIEFuZ3VsYXJcIi8+XG4gICAgICA8L2ZpbGU+XG4gICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gICAgICAgIGl0KCdzaG91bGQgdG9nZ2xlIHJlYWRvbmx5IGF0dHInLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5jc3MoJ1t0eXBlPVwidGV4dFwiXScpKS5nZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpLnRvQmVGYWxzeSgpO1xuICAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ2NoZWNrZWQnKSkuY2xpY2soKTtcbiAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5jc3MoJ1t0eXBlPVwidGV4dFwiXScpKS5nZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgfSk7XG4gICAgICA8L2ZpbGU+XG4gICAgPC9leGFtcGxlPlxuICpcbiAqIEBlbGVtZW50IElOUFVUXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nUmVhZG9ubHkgSWYgdGhlIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259IGlzIHRydXRoeSxcbiAqICAgICB0aGVuIHNwZWNpYWwgYXR0cmlidXRlIFwicmVhZG9ubHlcIiB3aWxsIGJlIHNldCBvbiB0aGUgZWxlbWVudFxuICovXG5cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ1NlbGVjdGVkXG4gKiBAcmVzdHJpY3QgQVxuICogQHByaW9yaXR5IDEwMFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIEhUTUwgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCByZXF1aXJlIGJyb3dzZXJzIHRvIHByZXNlcnZlIHRoZSB2YWx1ZXMgb2YgYm9vbGVhbiBhdHRyaWJ1dGVzXG4gKiBzdWNoIGFzIHNlbGVjdGVkLiAoVGhlaXIgcHJlc2VuY2UgbWVhbnMgdHJ1ZSBhbmQgdGhlaXIgYWJzZW5jZSBtZWFucyBmYWxzZS4pXG4gKiBJZiB3ZSBwdXQgYW4gQW5ndWxhciBpbnRlcnBvbGF0aW9uIGV4cHJlc3Npb24gaW50byBzdWNoIGFuIGF0dHJpYnV0ZSB0aGVuIHRoZVxuICogYmluZGluZyBpbmZvcm1hdGlvbiB3b3VsZCBiZSBsb3N0IHdoZW4gdGhlIGJyb3dzZXIgcmVtb3ZlcyB0aGUgYXR0cmlidXRlLlxuICogVGhlIGBuZ1NlbGVjdGVkYCBkaXJlY3RpdmUgc29sdmVzIHRoaXMgcHJvYmxlbSBmb3IgdGhlIGBzZWxlY3RlZGAgYXR0cmlidXRlLlxuICogVGhpcyBjb21wbGVtZW50YXJ5IGRpcmVjdGl2ZSBpcyBub3QgcmVtb3ZlZCBieSB0aGUgYnJvd3NlciBhbmQgc28gcHJvdmlkZXNcbiAqIGEgcGVybWFuZW50IHJlbGlhYmxlIHBsYWNlIHRvIHN0b3JlIHRoZSBiaW5kaW5nIGluZm9ybWF0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gICAgPGV4YW1wbGU+XG4gICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgICBDaGVjayBtZSB0byBzZWxlY3Q6IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuZy1tb2RlbD1cInNlbGVjdGVkXCI+PGJyLz5cbiAgICAgICAgPHNlbGVjdD5cbiAgICAgICAgICA8b3B0aW9uPkhlbGxvITwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gaWQ9XCJncmVldFwiIG5nLXNlbGVjdGVkPVwic2VsZWN0ZWRcIj5HcmVldGluZ3MhPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9maWxlPlxuICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgICBpdCgnc2hvdWxkIHNlbGVjdCBHcmVldGluZ3MhJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2dyZWV0JykpLmdldEF0dHJpYnV0ZSgnc2VsZWN0ZWQnKSkudG9CZUZhbHN5KCk7XG4gICAgICAgICAgZWxlbWVudChieS5tb2RlbCgnc2VsZWN0ZWQnKSkuY2xpY2soKTtcbiAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnZ3JlZXQnKSkuZ2V0QXR0cmlidXRlKCdzZWxlY3RlZCcpKS50b0JlVHJ1dGh5KCk7XG4gICAgICAgIH0pO1xuICAgICAgPC9maWxlPlxuICAgIDwvZXhhbXBsZT5cbiAqXG4gKiBAZWxlbWVudCBPUFRJT05cbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdTZWxlY3RlZCBJZiB0aGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaXMgdHJ1dGh5LFxuICogICAgIHRoZW4gc3BlY2lhbCBhdHRyaWJ1dGUgXCJzZWxlY3RlZFwiIHdpbGwgYmUgc2V0IG9uIHRoZSBlbGVtZW50XG4gKi9cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ09wZW5cbiAqIEByZXN0cmljdCBBXG4gKiBAcHJpb3JpdHkgMTAwXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgSFRNTCBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IHJlcXVpcmUgYnJvd3NlcnMgdG8gcHJlc2VydmUgdGhlIHZhbHVlcyBvZiBib29sZWFuIGF0dHJpYnV0ZXNcbiAqIHN1Y2ggYXMgb3Blbi4gKFRoZWlyIHByZXNlbmNlIG1lYW5zIHRydWUgYW5kIHRoZWlyIGFic2VuY2UgbWVhbnMgZmFsc2UuKVxuICogSWYgd2UgcHV0IGFuIEFuZ3VsYXIgaW50ZXJwb2xhdGlvbiBleHByZXNzaW9uIGludG8gc3VjaCBhbiBhdHRyaWJ1dGUgdGhlbiB0aGVcbiAqIGJpbmRpbmcgaW5mb3JtYXRpb24gd291bGQgYmUgbG9zdCB3aGVuIHRoZSBicm93c2VyIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZS5cbiAqIFRoZSBgbmdPcGVuYCBkaXJlY3RpdmUgc29sdmVzIHRoaXMgcHJvYmxlbSBmb3IgdGhlIGBvcGVuYCBhdHRyaWJ1dGUuXG4gKiBUaGlzIGNvbXBsZW1lbnRhcnkgZGlyZWN0aXZlIGlzIG5vdCByZW1vdmVkIGJ5IHRoZSBicm93c2VyIGFuZCBzbyBwcm92aWRlc1xuICogYSBwZXJtYW5lbnQgcmVsaWFibGUgcGxhY2UgdG8gc3RvcmUgdGhlIGJpbmRpbmcgaW5mb3JtYXRpb24uXG4gKiBAZXhhbXBsZVxuICAgICA8ZXhhbXBsZT5cbiAgICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgICAgQ2hlY2sgbWUgY2hlY2sgbXVsdGlwbGU6IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuZy1tb2RlbD1cIm9wZW5cIj48YnIvPlxuICAgICAgICAgPGRldGFpbHMgaWQ9XCJkZXRhaWxzXCIgbmctb3Blbj1cIm9wZW5cIj5cbiAgICAgICAgICAgIDxzdW1tYXJ5PlNob3cvSGlkZSBtZTwvc3VtbWFyeT5cbiAgICAgICAgIDwvZGV0YWlscz5cbiAgICAgICA8L2ZpbGU+XG4gICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgICAgaXQoJ3Nob3VsZCB0b2dnbGUgb3BlbicsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnZGV0YWlscycpKS5nZXRBdHRyaWJ1dGUoJ29wZW4nKSkudG9CZUZhbHN5KCk7XG4gICAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ29wZW4nKSkuY2xpY2soKTtcbiAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2RldGFpbHMnKSkuZ2V0QXR0cmlidXRlKCdvcGVuJykpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgIH0pO1xuICAgICAgIDwvZmlsZT5cbiAgICAgPC9leGFtcGxlPlxuICpcbiAqIEBlbGVtZW50IERFVEFJTFNcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdPcGVuIElmIHRoZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufSBpcyB0cnV0aHksXG4gKiAgICAgdGhlbiBzcGVjaWFsIGF0dHJpYnV0ZSBcIm9wZW5cIiB3aWxsIGJlIHNldCBvbiB0aGUgZWxlbWVudFxuICovXG5cbnZhciBuZ0F0dHJpYnV0ZUFsaWFzRGlyZWN0aXZlcyA9IHt9O1xuXG5cbi8vIGJvb2xlYW4gYXR0cnMgYXJlIGV2YWx1YXRlZFxuZm9yRWFjaChCT09MRUFOX0FUVFIsIGZ1bmN0aW9uKHByb3BOYW1lLCBhdHRyTmFtZSkge1xuICAvLyBiaW5kaW5nIHRvIG11bHRpcGxlIGlzIG5vdCBzdXBwb3J0ZWRcbiAgaWYgKHByb3BOYW1lID09IFwibXVsdGlwbGVcIikgcmV0dXJuO1xuXG4gIHZhciBub3JtYWxpemVkID0gZGlyZWN0aXZlTm9ybWFsaXplKCduZy0nICsgYXR0ck5hbWUpO1xuICBuZ0F0dHJpYnV0ZUFsaWFzRGlyZWN0aXZlc1tub3JtYWxpemVkXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZXN0cmljdDogJ0EnLFxuICAgICAgcHJpb3JpdHk6IDEwMCxcbiAgICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7XG4gICAgICAgIHNjb3BlLiR3YXRjaChhdHRyW25vcm1hbGl6ZWRdLCBmdW5jdGlvbiBuZ0Jvb2xlYW5BdHRyV2F0Y2hBY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICBhdHRyLiRzZXQoYXR0ck5hbWUsICEhdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xufSk7XG5cbi8vIGFsaWFzZWQgaW5wdXQgYXR0cnMgYXJlIGV2YWx1YXRlZFxuZm9yRWFjaChBTElBU0VEX0FUVFIsIGZ1bmN0aW9uKGh0bWxBdHRyLCBuZ0F0dHIpIHtcbiAgbmdBdHRyaWJ1dGVBbGlhc0RpcmVjdGl2ZXNbbmdBdHRyXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwcmlvcml0eTogMTAwLFxuICAgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIpIHtcbiAgICAgICAgLy9zcGVjaWFsIGNhc2UgbmdQYXR0ZXJuIHdoZW4gYSBsaXRlcmFsIHJlZ3VsYXIgZXhwcmVzc2lvbiB2YWx1ZVxuICAgICAgICAvL2lzIHVzZWQgYXMgdGhlIGV4cHJlc3Npb24gKHRoaXMgd2F5IHdlIGRvbid0IGhhdmUgdG8gd2F0Y2ggYW55dGhpbmcpLlxuICAgICAgICBpZiAobmdBdHRyID09PSBcIm5nUGF0dGVyblwiICYmIGF0dHIubmdQYXR0ZXJuLmNoYXJBdCgwKSA9PSBcIi9cIikge1xuICAgICAgICAgIHZhciBtYXRjaCA9IGF0dHIubmdQYXR0ZXJuLm1hdGNoKFJFR0VYX1NUUklOR19SRUdFWFApO1xuICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgYXR0ci4kc2V0KFwibmdQYXR0ZXJuXCIsIG5ldyBSZWdFeHAobWF0Y2hbMV0sIG1hdGNoWzJdKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2NvcGUuJHdhdGNoKGF0dHJbbmdBdHRyXSwgZnVuY3Rpb24gbmdBdHRyQWxpYXNXYXRjaEFjdGlvbih2YWx1ZSkge1xuICAgICAgICAgIGF0dHIuJHNldChuZ0F0dHIsIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn0pO1xuXG4vLyBuZy1zcmMsIG5nLXNyY3NldCwgbmctaHJlZiBhcmUgaW50ZXJwb2xhdGVkXG5mb3JFYWNoKFsnc3JjJywgJ3NyY3NldCcsICdocmVmJ10sIGZ1bmN0aW9uKGF0dHJOYW1lKSB7XG4gIHZhciBub3JtYWxpemVkID0gZGlyZWN0aXZlTm9ybWFsaXplKCduZy0nICsgYXR0ck5hbWUpO1xuICBuZ0F0dHJpYnV0ZUFsaWFzRGlyZWN0aXZlc1tub3JtYWxpemVkXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwcmlvcml0eTogOTksIC8vIGl0IG5lZWRzIHRvIHJ1biBhZnRlciB0aGUgYXR0cmlidXRlcyBhcmUgaW50ZXJwb2xhdGVkXG4gICAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSBhdHRyTmFtZSxcbiAgICAgICAgICAgIG5hbWUgPSBhdHRyTmFtZTtcblxuICAgICAgICBpZiAoYXR0ck5hbWUgPT09ICdocmVmJyAmJlxuICAgICAgICAgICAgdG9TdHJpbmcuY2FsbChlbGVtZW50LnByb3AoJ2hyZWYnKSkgPT09ICdbb2JqZWN0IFNWR0FuaW1hdGVkU3RyaW5nXScpIHtcbiAgICAgICAgICBuYW1lID0gJ3hsaW5rSHJlZic7XG4gICAgICAgICAgYXR0ci4kYXR0cltuYW1lXSA9ICd4bGluazpocmVmJztcbiAgICAgICAgICBwcm9wTmFtZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBhdHRyLiRvYnNlcnZlKG5vcm1hbGl6ZWQsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKGF0dHJOYW1lID09PSAnaHJlZicpIHtcbiAgICAgICAgICAgICAgYXR0ci4kc2V0KG5hbWUsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF0dHIuJHNldChuYW1lLCB2YWx1ZSk7XG5cbiAgICAgICAgICAvLyBvbiBJRSwgaWYgXCJuZzpzcmNcIiBkaXJlY3RpdmUgZGVjbGFyYXRpb24gaXMgdXNlZCBhbmQgXCJzcmNcIiBhdHRyaWJ1dGUgZG9lc24ndCBleGlzdFxuICAgICAgICAgIC8vIHRoZW4gY2FsbGluZyBlbGVtZW50LnNldEF0dHJpYnV0ZSgnc3JjJywgJ2ZvbycpIGRvZXNuJ3QgZG8gYW55dGhpbmcsIHNvIHdlIG5lZWRcbiAgICAgICAgICAvLyB0byBzZXQgdGhlIHByb3BlcnR5IGFzIHdlbGwgdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCBlZmZlY3QuXG4gICAgICAgICAgLy8gd2UgdXNlIGF0dHJbYXR0ck5hbWVdIHZhbHVlIHNpbmNlICRzZXQgY2FuIHNhbml0aXplIHRoZSB1cmwuXG4gICAgICAgICAgaWYgKG1zaWUgJiYgcHJvcE5hbWUpIGVsZW1lbnQucHJvcChwcm9wTmFtZSwgYXR0cltuYW1lXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH07XG59KTtcblxuLyogZ2xvYmFsIC1udWxsRm9ybUN0cmwsIC1TVUJNSVRURURfQ0xBU1MsIGFkZFNldFZhbGlkaXR5TWV0aG9kOiB0cnVlXG4gKi9cbnZhciBudWxsRm9ybUN0cmwgPSB7XG4gICRhZGRDb250cm9sOiBub29wLFxuICAkJHJlbmFtZUNvbnRyb2w6IG51bGxGb3JtUmVuYW1lQ29udHJvbCxcbiAgJHJlbW92ZUNvbnRyb2w6IG5vb3AsXG4gICRzZXRWYWxpZGl0eTogbm9vcCxcbiAgJHNldERpcnR5OiBub29wLFxuICAkc2V0UHJpc3RpbmU6IG5vb3AsXG4gICRzZXRTdWJtaXR0ZWQ6IG5vb3Bcbn0sXG5TVUJNSVRURURfQ0xBU1MgPSAnbmctc3VibWl0dGVkJztcblxuZnVuY3Rpb24gbnVsbEZvcm1SZW5hbWVDb250cm9sKGNvbnRyb2wsIG5hbWUpIHtcbiAgY29udHJvbC4kbmFtZSA9IG5hbWU7XG59XG5cbi8qKlxuICogQG5nZG9jIHR5cGVcbiAqIEBuYW1lIGZvcm0uRm9ybUNvbnRyb2xsZXJcbiAqXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59ICRwcmlzdGluZSBUcnVlIGlmIHVzZXIgaGFzIG5vdCBpbnRlcmFjdGVkIHdpdGggdGhlIGZvcm0geWV0LlxuICogQHByb3BlcnR5IHtib29sZWFufSAkZGlydHkgVHJ1ZSBpZiB1c2VyIGhhcyBhbHJlYWR5IGludGVyYWN0ZWQgd2l0aCB0aGUgZm9ybS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gJHZhbGlkIFRydWUgaWYgYWxsIG9mIHRoZSBjb250YWluaW5nIGZvcm1zIGFuZCBjb250cm9scyBhcmUgdmFsaWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59ICRpbnZhbGlkIFRydWUgaWYgYXQgbGVhc3Qgb25lIGNvbnRhaW5pbmcgY29udHJvbCBvciBmb3JtIGlzIGludmFsaWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59ICRzdWJtaXR0ZWQgVHJ1ZSBpZiB1c2VyIGhhcyBzdWJtaXR0ZWQgdGhlIGZvcm0gZXZlbiBpZiBpdHMgaW52YWxpZC5cbiAqXG4gKiBAcHJvcGVydHkge09iamVjdH0gJGVycm9yIElzIGFuIG9iamVjdCBoYXNoLCBjb250YWluaW5nIHJlZmVyZW5jZXMgdG8gY29udHJvbHMgb3JcbiAqICBmb3JtcyB3aXRoIGZhaWxpbmcgdmFsaWRhdG9ycywgd2hlcmU6XG4gKlxuICogIC0ga2V5cyBhcmUgdmFsaWRhdGlvbiB0b2tlbnMgKGVycm9yIG5hbWVzKSxcbiAqICAtIHZhbHVlcyBhcmUgYXJyYXlzIG9mIGNvbnRyb2xzIG9yIGZvcm1zIHRoYXQgaGF2ZSBhIGZhaWxpbmcgdmFsaWRhdG9yIGZvciBnaXZlbiBlcnJvciBuYW1lLlxuICpcbiAqICBCdWlsdC1pbiB2YWxpZGF0aW9uIHRva2VuczpcbiAqXG4gKiAgLSBgZW1haWxgXG4gKiAgLSBgbWF4YFxuICogIC0gYG1heGxlbmd0aGBcbiAqICAtIGBtaW5gXG4gKiAgLSBgbWlubGVuZ3RoYFxuICogIC0gYG51bWJlcmBcbiAqICAtIGBwYXR0ZXJuYFxuICogIC0gYHJlcXVpcmVkYFxuICogIC0gYHVybGBcbiAqICAtIGBkYXRlYFxuICogIC0gYGRhdGV0aW1lbG9jYWxgXG4gKiAgLSBgdGltZWBcbiAqICAtIGB3ZWVrYFxuICogIC0gYG1vbnRoYFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogYEZvcm1Db250cm9sbGVyYCBrZWVwcyB0cmFjayBvZiBhbGwgaXRzIGNvbnRyb2xzIGFuZCBuZXN0ZWQgZm9ybXMgYXMgd2VsbCBhcyB0aGUgc3RhdGUgb2YgdGhlbSxcbiAqIHN1Y2ggYXMgYmVpbmcgdmFsaWQvaW52YWxpZCBvciBkaXJ0eS9wcmlzdGluZS5cbiAqXG4gKiBFYWNoIHtAbGluayBuZy5kaXJlY3RpdmU6Zm9ybSBmb3JtfSBkaXJlY3RpdmUgY3JlYXRlcyBhbiBpbnN0YW5jZVxuICogb2YgYEZvcm1Db250cm9sbGVyYC5cbiAqXG4gKi9cbi8vYXNrcyBmb3IgJHNjb3BlIHRvIGZvb2wgdGhlIEJDIGNvbnRyb2xsZXIgbW9kdWxlXG5Gb3JtQ29udHJvbGxlci4kaW5qZWN0ID0gWyckZWxlbWVudCcsICckYXR0cnMnLCAnJHNjb3BlJywgJyRhbmltYXRlJywgJyRpbnRlcnBvbGF0ZSddO1xuZnVuY3Rpb24gRm9ybUNvbnRyb2xsZXIoZWxlbWVudCwgYXR0cnMsICRzY29wZSwgJGFuaW1hdGUsICRpbnRlcnBvbGF0ZSkge1xuICB2YXIgZm9ybSA9IHRoaXMsXG4gICAgICBjb250cm9scyA9IFtdO1xuXG4gIHZhciBwYXJlbnRGb3JtID0gZm9ybS4kJHBhcmVudEZvcm0gPSBlbGVtZW50LnBhcmVudCgpLmNvbnRyb2xsZXIoJ2Zvcm0nKSB8fCBudWxsRm9ybUN0cmw7XG5cbiAgLy8gaW5pdCBzdGF0ZVxuICBmb3JtLiRlcnJvciA9IHt9O1xuICBmb3JtLiQkc3VjY2VzcyA9IHt9O1xuICBmb3JtLiRwZW5kaW5nID0gdW5kZWZpbmVkO1xuICBmb3JtLiRuYW1lID0gJGludGVycG9sYXRlKGF0dHJzLm5hbWUgfHwgYXR0cnMubmdGb3JtIHx8ICcnKSgkc2NvcGUpO1xuICBmb3JtLiRkaXJ0eSA9IGZhbHNlO1xuICBmb3JtLiRwcmlzdGluZSA9IHRydWU7XG4gIGZvcm0uJHZhbGlkID0gdHJ1ZTtcbiAgZm9ybS4kaW52YWxpZCA9IGZhbHNlO1xuICBmb3JtLiRzdWJtaXR0ZWQgPSBmYWxzZTtcblxuICBwYXJlbnRGb3JtLiRhZGRDb250cm9sKGZvcm0pO1xuXG4gIC8qKlxuICAgKiBAbmdkb2MgbWV0aG9kXG4gICAqIEBuYW1lIGZvcm0uRm9ybUNvbnRyb2xsZXIjJHJvbGxiYWNrVmlld1ZhbHVlXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBSb2xsYmFjayBhbGwgZm9ybSBjb250cm9scyBwZW5kaW5nIHVwZGF0ZXMgdG8gdGhlIGAkbW9kZWxWYWx1ZWAuXG4gICAqXG4gICAqIFVwZGF0ZXMgbWF5IGJlIHBlbmRpbmcgYnkgYSBkZWJvdW5jZWQgZXZlbnQgb3IgYmVjYXVzZSB0aGUgaW5wdXQgaXMgd2FpdGluZyBmb3IgYSBzb21lIGZ1dHVyZVxuICAgKiBldmVudCBkZWZpbmVkIGluIGBuZy1tb2RlbC1vcHRpb25zYC4gVGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5IG5lZWRlZCBieSB0aGUgcmVzZXQgYnV0dG9uIG9mXG4gICAqIGEgZm9ybSB0aGF0IHVzZXMgYG5nLW1vZGVsLW9wdGlvbnNgIHRvIHBlbmQgdXBkYXRlcy5cbiAgICovXG4gIGZvcm0uJHJvbGxiYWNrVmlld1ZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yRWFjaChjb250cm9scywgZnVuY3Rpb24oY29udHJvbCkge1xuICAgICAgY29udHJvbC4kcm9sbGJhY2tWaWV3VmFsdWUoKTtcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQG5nZG9jIG1ldGhvZFxuICAgKiBAbmFtZSBmb3JtLkZvcm1Db250cm9sbGVyIyRjb21taXRWaWV3VmFsdWVcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENvbW1pdCBhbGwgZm9ybSBjb250cm9scyBwZW5kaW5nIHVwZGF0ZXMgdG8gdGhlIGAkbW9kZWxWYWx1ZWAuXG4gICAqXG4gICAqIFVwZGF0ZXMgbWF5IGJlIHBlbmRpbmcgYnkgYSBkZWJvdW5jZWQgZXZlbnQgb3IgYmVjYXVzZSB0aGUgaW5wdXQgaXMgd2FpdGluZyBmb3IgYSBzb21lIGZ1dHVyZVxuICAgKiBldmVudCBkZWZpbmVkIGluIGBuZy1tb2RlbC1vcHRpb25zYC4gVGhpcyBtZXRob2QgaXMgcmFyZWx5IG5lZWRlZCBhcyBgTmdNb2RlbENvbnRyb2xsZXJgXG4gICAqIHVzdWFsbHkgaGFuZGxlcyBjYWxsaW5nIHRoaXMgaW4gcmVzcG9uc2UgdG8gaW5wdXQgZXZlbnRzLlxuICAgKi9cbiAgZm9ybS4kY29tbWl0Vmlld1ZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yRWFjaChjb250cm9scywgZnVuY3Rpb24oY29udHJvbCkge1xuICAgICAgY29udHJvbC4kY29tbWl0Vmlld1ZhbHVlKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgZm9ybS5Gb3JtQ29udHJvbGxlciMkYWRkQ29udHJvbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogUmVnaXN0ZXIgYSBjb250cm9sIHdpdGggdGhlIGZvcm0uXG4gICAqXG4gICAqIElucHV0IGVsZW1lbnRzIHVzaW5nIG5nTW9kZWxDb250cm9sbGVyIGRvIHRoaXMgYXV0b21hdGljYWxseSB3aGVuIHRoZXkgYXJlIGxpbmtlZC5cbiAgICovXG4gIGZvcm0uJGFkZENvbnRyb2wgPSBmdW5jdGlvbihjb250cm9sKSB7XG4gICAgLy8gQnJlYWtpbmcgY2hhbmdlIC0gYmVmb3JlLCBpbnB1dHMgd2hvc2UgbmFtZSB3YXMgXCJoYXNPd25Qcm9wZXJ0eVwiIHdlcmUgcXVpZXRseSBpZ25vcmVkXG4gICAgLy8gYW5kIG5vdCBhZGRlZCB0byB0aGUgc2NvcGUuICBOb3cgd2UgdGhyb3cgYW4gZXJyb3IuXG4gICAgYXNzZXJ0Tm90SGFzT3duUHJvcGVydHkoY29udHJvbC4kbmFtZSwgJ2lucHV0Jyk7XG4gICAgY29udHJvbHMucHVzaChjb250cm9sKTtcblxuICAgIGlmIChjb250cm9sLiRuYW1lKSB7XG4gICAgICBmb3JtW2NvbnRyb2wuJG5hbWVdID0gY29udHJvbDtcbiAgICB9XG4gIH07XG5cbiAgLy8gUHJpdmF0ZSBBUEk6IHJlbmFtZSBhIGZvcm0gY29udHJvbFxuICBmb3JtLiQkcmVuYW1lQ29udHJvbCA9IGZ1bmN0aW9uKGNvbnRyb2wsIG5ld05hbWUpIHtcbiAgICB2YXIgb2xkTmFtZSA9IGNvbnRyb2wuJG5hbWU7XG5cbiAgICBpZiAoZm9ybVtvbGROYW1lXSA9PT0gY29udHJvbCkge1xuICAgICAgZGVsZXRlIGZvcm1bb2xkTmFtZV07XG4gICAgfVxuICAgIGZvcm1bbmV3TmFtZV0gPSBjb250cm9sO1xuICAgIGNvbnRyb2wuJG5hbWUgPSBuZXdOYW1lO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAbmdkb2MgbWV0aG9kXG4gICAqIEBuYW1lIGZvcm0uRm9ybUNvbnRyb2xsZXIjJHJlbW92ZUNvbnRyb2xcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERlcmVnaXN0ZXIgYSBjb250cm9sIGZyb20gdGhlIGZvcm0uXG4gICAqXG4gICAqIElucHV0IGVsZW1lbnRzIHVzaW5nIG5nTW9kZWxDb250cm9sbGVyIGRvIHRoaXMgYXV0b21hdGljYWxseSB3aGVuIHRoZXkgYXJlIGRlc3Ryb3llZC5cbiAgICovXG4gIGZvcm0uJHJlbW92ZUNvbnRyb2wgPSBmdW5jdGlvbihjb250cm9sKSB7XG4gICAgaWYgKGNvbnRyb2wuJG5hbWUgJiYgZm9ybVtjb250cm9sLiRuYW1lXSA9PT0gY29udHJvbCkge1xuICAgICAgZGVsZXRlIGZvcm1bY29udHJvbC4kbmFtZV07XG4gICAgfVxuICAgIGZvckVhY2goZm9ybS4kcGVuZGluZywgZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIGZvcm0uJHNldFZhbGlkaXR5KG5hbWUsIG51bGwsIGNvbnRyb2wpO1xuICAgIH0pO1xuICAgIGZvckVhY2goZm9ybS4kZXJyb3IsIGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICBmb3JtLiRzZXRWYWxpZGl0eShuYW1lLCBudWxsLCBjb250cm9sKTtcbiAgICB9KTtcblxuICAgIGFycmF5UmVtb3ZlKGNvbnRyb2xzLCBjb250cm9sKTtcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBAbmdkb2MgbWV0aG9kXG4gICAqIEBuYW1lIGZvcm0uRm9ybUNvbnRyb2xsZXIjJHNldFZhbGlkaXR5XG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIHRoZSB2YWxpZGl0eSBvZiBhIGZvcm0gY29udHJvbC5cbiAgICpcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBhbHNvIHByb3BhZ2F0ZSB0byBwYXJlbnQgZm9ybXMuXG4gICAqL1xuICBhZGRTZXRWYWxpZGl0eU1ldGhvZCh7XG4gICAgY3RybDogdGhpcyxcbiAgICAkZWxlbWVudDogZWxlbWVudCxcbiAgICBzZXQ6IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHksIGNvbnRyb2wpIHtcbiAgICAgIHZhciBsaXN0ID0gb2JqZWN0W3Byb3BlcnR5XTtcbiAgICAgIGlmICghbGlzdCkge1xuICAgICAgICBvYmplY3RbcHJvcGVydHldID0gW2NvbnRyb2xdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGluZGV4ID0gbGlzdC5pbmRleE9mKGNvbnRyb2wpO1xuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgbGlzdC5wdXNoKGNvbnRyb2wpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB1bnNldDogZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSwgY29udHJvbCkge1xuICAgICAgdmFyIGxpc3QgPSBvYmplY3RbcHJvcGVydHldO1xuICAgICAgaWYgKCFsaXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFycmF5UmVtb3ZlKGxpc3QsIGNvbnRyb2wpO1xuICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGFyZW50Rm9ybTogcGFyZW50Rm9ybSxcbiAgICAkYW5pbWF0ZTogJGFuaW1hdGVcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgZm9ybS5Gb3JtQ29udHJvbGxlciMkc2V0RGlydHlcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIGZvcm0gdG8gYSBkaXJ0eSBzdGF0ZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCB0byBhZGQgdGhlICduZy1kaXJ0eScgY2xhc3MgYW5kIHNldCB0aGUgZm9ybSB0byBhIGRpcnR5XG4gICAqIHN0YXRlIChuZy1kaXJ0eSBjbGFzcykuIFRoaXMgbWV0aG9kIHdpbGwgYWxzbyBwcm9wYWdhdGUgdG8gcGFyZW50IGZvcm1zLlxuICAgKi9cbiAgZm9ybS4kc2V0RGlydHkgPSBmdW5jdGlvbigpIHtcbiAgICAkYW5pbWF0ZS5yZW1vdmVDbGFzcyhlbGVtZW50LCBQUklTVElORV9DTEFTUyk7XG4gICAgJGFuaW1hdGUuYWRkQ2xhc3MoZWxlbWVudCwgRElSVFlfQ0xBU1MpO1xuICAgIGZvcm0uJGRpcnR5ID0gdHJ1ZTtcbiAgICBmb3JtLiRwcmlzdGluZSA9IGZhbHNlO1xuICAgIHBhcmVudEZvcm0uJHNldERpcnR5KCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgZm9ybS5Gb3JtQ29udHJvbGxlciMkc2V0UHJpc3RpbmVcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIGZvcm0gdG8gaXRzIHByaXN0aW5lIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgJ25nLWRpcnR5JyBjbGFzcyBhbmQgc2V0IHRoZSBmb3JtIHRvIGl0cyBwcmlzdGluZVxuICAgKiBzdGF0ZSAobmctcHJpc3RpbmUgY2xhc3MpLiBUaGlzIG1ldGhvZCB3aWxsIGFsc28gcHJvcGFnYXRlIHRvIGFsbCB0aGUgY29udHJvbHMgY29udGFpbmVkXG4gICAqIGluIHRoaXMgZm9ybS5cbiAgICpcbiAgICogU2V0dGluZyBhIGZvcm0gYmFjayB0byBhIHByaXN0aW5lIHN0YXRlIGlzIG9mdGVuIHVzZWZ1bCB3aGVuIHdlIHdhbnQgdG8gJ3JldXNlJyBhIGZvcm0gYWZ0ZXJcbiAgICogc2F2aW5nIG9yIHJlc2V0dGluZyBpdC5cbiAgICovXG4gIGZvcm0uJHNldFByaXN0aW5lID0gZnVuY3Rpb24oKSB7XG4gICAgJGFuaW1hdGUuc2V0Q2xhc3MoZWxlbWVudCwgUFJJU1RJTkVfQ0xBU1MsIERJUlRZX0NMQVNTICsgJyAnICsgU1VCTUlUVEVEX0NMQVNTKTtcbiAgICBmb3JtLiRkaXJ0eSA9IGZhbHNlO1xuICAgIGZvcm0uJHByaXN0aW5lID0gdHJ1ZTtcbiAgICBmb3JtLiRzdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICBmb3JFYWNoKGNvbnRyb2xzLCBmdW5jdGlvbihjb250cm9sKSB7XG4gICAgICBjb250cm9sLiRzZXRQcmlzdGluZSgpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAbmdkb2MgbWV0aG9kXG4gICAqIEBuYW1lIGZvcm0uRm9ybUNvbnRyb2xsZXIjJHNldFVudG91Y2hlZFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyB0aGUgZm9ybSB0byBpdHMgdW50b3VjaGVkIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgJ25nLXRvdWNoZWQnIGNsYXNzIGFuZCBzZXQgdGhlIGZvcm0gY29udHJvbHMgdG8gdGhlaXJcbiAgICogdW50b3VjaGVkIHN0YXRlIChuZy11bnRvdWNoZWQgY2xhc3MpLlxuICAgKlxuICAgKiBTZXR0aW5nIGEgZm9ybSBjb250cm9scyBiYWNrIHRvIHRoZWlyIHVudG91Y2hlZCBzdGF0ZSBpcyBvZnRlbiB1c2VmdWwgd2hlbiBzZXR0aW5nIHRoZSBmb3JtXG4gICAqIGJhY2sgdG8gaXRzIHByaXN0aW5lIHN0YXRlLlxuICAgKi9cbiAgZm9ybS4kc2V0VW50b3VjaGVkID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yRWFjaChjb250cm9scywgZnVuY3Rpb24oY29udHJvbCkge1xuICAgICAgY29udHJvbC4kc2V0VW50b3VjaGVkKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgZm9ybS5Gb3JtQ29udHJvbGxlciMkc2V0U3VibWl0dGVkXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIHRoZSBmb3JtIHRvIGl0cyBzdWJtaXR0ZWQgc3RhdGUuXG4gICAqL1xuICBmb3JtLiRzZXRTdWJtaXR0ZWQgPSBmdW5jdGlvbigpIHtcbiAgICAkYW5pbWF0ZS5hZGRDbGFzcyhlbGVtZW50LCBTVUJNSVRURURfQ0xBU1MpO1xuICAgIGZvcm0uJHN1Ym1pdHRlZCA9IHRydWU7XG4gICAgcGFyZW50Rm9ybS4kc2V0U3VibWl0dGVkKCk7XG4gIH07XG59XG5cbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgbmdGb3JtXG4gKiBAcmVzdHJpY3QgRUFDXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBOZXN0YWJsZSBhbGlhcyBvZiB7QGxpbmsgbmcuZGlyZWN0aXZlOmZvcm0gYGZvcm1gfSBkaXJlY3RpdmUuIEhUTUxcbiAqIGRvZXMgbm90IGFsbG93IG5lc3Rpbmcgb2YgZm9ybSBlbGVtZW50cy4gSXQgaXMgdXNlZnVsIHRvIG5lc3QgZm9ybXMsIGZvciBleGFtcGxlIGlmIHRoZSB2YWxpZGl0eSBvZiBhXG4gKiBzdWItZ3JvdXAgb2YgY29udHJvbHMgbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZC5cbiAqXG4gKiBOb3RlOiB0aGUgcHVycG9zZSBvZiBgbmdGb3JtYCBpcyB0byBncm91cCBjb250cm9scyxcbiAqIGJ1dCBub3QgdG8gYmUgYSByZXBsYWNlbWVudCBmb3IgdGhlIGA8Zm9ybT5gIHRhZyB3aXRoIGFsbCBvZiBpdHMgY2FwYWJpbGl0aWVzXG4gKiAoZS5nLiBwb3N0aW5nIHRvIHRoZSBzZXJ2ZXIsIC4uLikuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBuZ0Zvcm18bmFtZSBOYW1lIG9mIHRoZSBmb3JtLiBJZiBzcGVjaWZpZWQsIHRoZSBmb3JtIGNvbnRyb2xsZXIgd2lsbCBiZSBwdWJsaXNoZWQgaW50b1xuICogICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWQgc2NvcGUsIHVuZGVyIHRoaXMgbmFtZS5cbiAqXG4gKi9cblxuIC8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgZm9ybVxuICogQHJlc3RyaWN0IEVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIERpcmVjdGl2ZSB0aGF0IGluc3RhbnRpYXRlc1xuICoge0BsaW5rIGZvcm0uRm9ybUNvbnRyb2xsZXIgRm9ybUNvbnRyb2xsZXJ9LlxuICpcbiAqIElmIHRoZSBgbmFtZWAgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgdGhlIGZvcm0gY29udHJvbGxlciBpcyBwdWJsaXNoZWQgb250byB0aGUgY3VycmVudCBzY29wZSB1bmRlclxuICogdGhpcyBuYW1lLlxuICpcbiAqICMgQWxpYXM6IHtAbGluayBuZy5kaXJlY3RpdmU6bmdGb3JtIGBuZ0Zvcm1gfVxuICpcbiAqIEluIEFuZ3VsYXIgZm9ybXMgY2FuIGJlIG5lc3RlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBvdXRlciBmb3JtIGlzIHZhbGlkIHdoZW4gYWxsIG9mIHRoZSBjaGlsZFxuICogZm9ybXMgYXJlIHZhbGlkIGFzIHdlbGwuIEhvd2V2ZXIsIGJyb3dzZXJzIGRvIG5vdCBhbGxvdyBuZXN0aW5nIG9mIGA8Zm9ybT5gIGVsZW1lbnRzLCBzb1xuICogQW5ndWxhciBwcm92aWRlcyB0aGUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0Zvcm0gYG5nRm9ybWB9IGRpcmVjdGl2ZSB3aGljaCBiZWhhdmVzIGlkZW50aWNhbGx5IHRvXG4gKiBgPGZvcm0+YCBidXQgY2FuIGJlIG5lc3RlZC4gIFRoaXMgYWxsb3dzIHlvdSB0byBoYXZlIG5lc3RlZCBmb3Jtcywgd2hpY2ggaXMgdmVyeSB1c2VmdWwgd2hlblxuICogdXNpbmcgQW5ndWxhciB2YWxpZGF0aW9uIGRpcmVjdGl2ZXMgaW4gZm9ybXMgdGhhdCBhcmUgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHVzaW5nIHRoZVxuICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ1JlcGVhdCBgbmdSZXBlYXRgfSBkaXJlY3RpdmUuIFNpbmNlIHlvdSBjYW5ub3QgZHluYW1pY2FsbHkgZ2VuZXJhdGUgdGhlIGBuYW1lYFxuICogYXR0cmlidXRlIG9mIGlucHV0IGVsZW1lbnRzIHVzaW5nIGludGVycG9sYXRpb24sIHlvdSBoYXZlIHRvIHdyYXAgZWFjaCBzZXQgb2YgcmVwZWF0ZWQgaW5wdXRzIGluIGFuXG4gKiBgbmdGb3JtYCBkaXJlY3RpdmUgYW5kIG5lc3QgdGhlc2UgaW4gYW4gb3V0ZXIgYGZvcm1gIGVsZW1lbnQuXG4gKlxuICpcbiAqICMgQ1NTIGNsYXNzZXNcbiAqICAtIGBuZy12YWxpZGAgaXMgc2V0IGlmIHRoZSBmb3JtIGlzIHZhbGlkLlxuICogIC0gYG5nLWludmFsaWRgIGlzIHNldCBpZiB0aGUgZm9ybSBpcyBpbnZhbGlkLlxuICogIC0gYG5nLXByaXN0aW5lYCBpcyBzZXQgaWYgdGhlIGZvcm0gaXMgcHJpc3RpbmUuXG4gKiAgLSBgbmctZGlydHlgIGlzIHNldCBpZiB0aGUgZm9ybSBpcyBkaXJ0eS5cbiAqICAtIGBuZy1zdWJtaXR0ZWRgIGlzIHNldCBpZiB0aGUgZm9ybSB3YXMgc3VibWl0dGVkLlxuICpcbiAqIEtlZXAgaW4gbWluZCB0aGF0IG5nQW5pbWF0ZSBjYW4gZGV0ZWN0IGVhY2ggb2YgdGhlc2UgY2xhc3NlcyB3aGVuIGFkZGVkIGFuZCByZW1vdmVkLlxuICpcbiAqXG4gKiAjIFN1Ym1pdHRpbmcgYSBmb3JtIGFuZCBwcmV2ZW50aW5nIHRoZSBkZWZhdWx0IGFjdGlvblxuICpcbiAqIFNpbmNlIHRoZSByb2xlIG9mIGZvcm1zIGluIGNsaWVudC1zaWRlIEFuZ3VsYXIgYXBwbGljYXRpb25zIGlzIGRpZmZlcmVudCB0aGFuIGluIGNsYXNzaWNhbFxuICogcm91bmR0cmlwIGFwcHMsIGl0IGlzIGRlc2lyYWJsZSBmb3IgdGhlIGJyb3dzZXIgbm90IHRvIHRyYW5zbGF0ZSB0aGUgZm9ybSBzdWJtaXNzaW9uIGludG8gYSBmdWxsXG4gKiBwYWdlIHJlbG9hZCB0aGF0IHNlbmRzIHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXIuIEluc3RlYWQgc29tZSBqYXZhc2NyaXB0IGxvZ2ljIHNob3VsZCBiZSB0cmlnZ2VyZWRcbiAqIHRvIGhhbmRsZSB0aGUgZm9ybSBzdWJtaXNzaW9uIGluIGFuIGFwcGxpY2F0aW9uLXNwZWNpZmljIHdheS5cbiAqXG4gKiBGb3IgdGhpcyByZWFzb24sIEFuZ3VsYXIgcHJldmVudHMgdGhlIGRlZmF1bHQgYWN0aW9uIChmb3JtIHN1Ym1pc3Npb24gdG8gdGhlIHNlcnZlcikgdW5sZXNzIHRoZVxuICogYDxmb3JtPmAgZWxlbWVudCBoYXMgYW4gYGFjdGlvbmAgYXR0cmlidXRlIHNwZWNpZmllZC5cbiAqXG4gKiBZb3UgY2FuIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0d28gd2F5cyB0byBzcGVjaWZ5IHdoYXQgamF2YXNjcmlwdCBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCB3aGVuXG4gKiBhIGZvcm0gaXMgc3VibWl0dGVkOlxuICpcbiAqIC0ge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ1N1Ym1pdCBuZ1N1Ym1pdH0gZGlyZWN0aXZlIG9uIHRoZSBmb3JtIGVsZW1lbnRcbiAqIC0ge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NsaWNrIG5nQ2xpY2t9IGRpcmVjdGl2ZSBvbiB0aGUgZmlyc3RcbiAgKiAgYnV0dG9uIG9yIGlucHV0IGZpZWxkIG9mIHR5cGUgc3VibWl0IChpbnB1dFt0eXBlPXN1Ym1pdF0pXG4gKlxuICogVG8gcHJldmVudCBkb3VibGUgZXhlY3V0aW9uIG9mIHRoZSBoYW5kbGVyLCB1c2Ugb25seSBvbmUgb2YgdGhlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdTdWJtaXQgbmdTdWJtaXR9XG4gKiBvciB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ2xpY2sgbmdDbGlja30gZGlyZWN0aXZlcy5cbiAqIFRoaXMgaXMgYmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGZvcm0gc3VibWlzc2lvbiBydWxlcyBpbiB0aGUgSFRNTCBzcGVjaWZpY2F0aW9uOlxuICpcbiAqIC0gSWYgYSBmb3JtIGhhcyBvbmx5IG9uZSBpbnB1dCBmaWVsZCB0aGVuIGhpdHRpbmcgZW50ZXIgaW4gdGhpcyBmaWVsZCB0cmlnZ2VycyBmb3JtIHN1Ym1pdFxuICogKGBuZ1N1Ym1pdGApXG4gKiAtIGlmIGEgZm9ybSBoYXMgMisgaW5wdXQgZmllbGRzIGFuZCBubyBidXR0b25zIG9yIGlucHV0W3R5cGU9c3VibWl0XSB0aGVuIGhpdHRpbmcgZW50ZXJcbiAqIGRvZXNuJ3QgdHJpZ2dlciBzdWJtaXRcbiAqIC0gaWYgYSBmb3JtIGhhcyBvbmUgb3IgbW9yZSBpbnB1dCBmaWVsZHMgYW5kIG9uZSBvciBtb3JlIGJ1dHRvbnMgb3IgaW5wdXRbdHlwZT1zdWJtaXRdIHRoZW5cbiAqIGhpdHRpbmcgZW50ZXIgaW4gYW55IG9mIHRoZSBpbnB1dCBmaWVsZHMgd2lsbCB0cmlnZ2VyIHRoZSBjbGljayBoYW5kbGVyIG9uIHRoZSAqZmlyc3QqIGJ1dHRvbiBvclxuICogaW5wdXRbdHlwZT1zdWJtaXRdIChgbmdDbGlja2ApICphbmQqIGEgc3VibWl0IGhhbmRsZXIgb24gdGhlIGVuY2xvc2luZyBmb3JtIChgbmdTdWJtaXRgKVxuICpcbiAqIEFueSBwZW5kaW5nIGBuZ01vZGVsT3B0aW9uc2AgY2hhbmdlcyB3aWxsIHRha2UgcGxhY2UgaW1tZWRpYXRlbHkgd2hlbiBhbiBlbmNsb3NpbmcgZm9ybSBpc1xuICogc3VibWl0dGVkLiBOb3RlIHRoYXQgYG5nQ2xpY2tgIGV2ZW50cyB3aWxsIG9jY3VyIGJlZm9yZSB0aGUgbW9kZWwgaXMgdXBkYXRlZC4gVXNlIGBuZ1N1Ym1pdGBcbiAqIHRvIGhhdmUgYWNjZXNzIHRvIHRoZSB1cGRhdGVkIG1vZGVsLlxuICpcbiAqICMjIEFuaW1hdGlvbiBIb29rc1xuICpcbiAqIEFuaW1hdGlvbnMgaW4gbmdGb3JtIGFyZSB0cmlnZ2VyZWQgd2hlbiBhbnkgb2YgdGhlIGFzc29jaWF0ZWQgQ1NTIGNsYXNzZXMgYXJlIGFkZGVkIGFuZCByZW1vdmVkLlxuICogVGhlc2UgY2xhc3NlcyBhcmU6IGAubmctcHJpc3RpbmVgLCBgLm5nLWRpcnR5YCwgYC5uZy1pbnZhbGlkYCBhbmQgYC5uZy12YWxpZGAgYXMgd2VsbCBhcyBhbnlcbiAqIG90aGVyIHZhbGlkYXRpb25zIHRoYXQgYXJlIHBlcmZvcm1lZCB3aXRoaW4gdGhlIGZvcm0uIEFuaW1hdGlvbnMgaW4gbmdGb3JtIGFyZSBzaW1pbGFyIHRvIGhvd1xuICogdGhleSB3b3JrIGluIG5nQ2xhc3MgYW5kIGFuaW1hdGlvbnMgY2FuIGJlIGhvb2tlZCBpbnRvIHVzaW5nIENTUyB0cmFuc2l0aW9ucywga2V5ZnJhbWVzIGFzIHdlbGxcbiAqIGFzIEpTIGFuaW1hdGlvbnMuXG4gKlxuICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGEgc2ltcGxlIHdheSB0byB1dGlsaXplIENTUyB0cmFuc2l0aW9ucyB0byBzdHlsZSBhIGZvcm0gZWxlbWVudFxuICogdGhhdCBoYXMgYmVlbiByZW5kZXJlZCBhcyBpbnZhbGlkIGFmdGVyIGl0IGhhcyBiZWVuIHZhbGlkYXRlZDpcbiAqXG4gKiA8cHJlPlxuICogLy9iZSBzdXJlIHRvIGluY2x1ZGUgbmdBbmltYXRlIGFzIGEgbW9kdWxlIHRvIGhvb2sgaW50byBtb3JlXG4gKiAvL2FkdmFuY2VkIGFuaW1hdGlvbnNcbiAqIC5teS1mb3JtIHtcbiAqICAgdHJhbnNpdGlvbjowLjVzIGxpbmVhciBhbGw7XG4gKiAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICogfVxuICogLm15LWZvcm0ubmctaW52YWxpZCB7XG4gKiAgIGJhY2tncm91bmQ6IHJlZDtcbiAqICAgY29sb3I6d2hpdGU7XG4gKiB9XG4gKiA8L3ByZT5cbiAqXG4gKiBAZXhhbXBsZVxuICAgIDxleGFtcGxlIGRlcHM9XCJhbmd1bGFyLWFuaW1hdGUuanNcIiBhbmltYXRpb25zPVwidHJ1ZVwiIGZpeEJhc2U9XCJ0cnVlXCIgbW9kdWxlPVwiZm9ybUV4YW1wbGVcIj5cbiAgICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgPHNjcmlwdD5cbiAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdmb3JtRXhhbXBsZScsIFtdKVxuICAgICAgICAgICAuY29udHJvbGxlcignRm9ybUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xuICAgICAgICAgICAgICRzY29wZS51c2VyVHlwZSA9ICdndWVzdCc7XG4gICAgICAgICAgIH1dKTtcbiAgICAgICA8L3NjcmlwdD5cbiAgICAgICA8c3R5bGU+XG4gICAgICAgIC5teS1mb3JtIHtcbiAgICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246YWxsIGxpbmVhciAwLjVzO1xuICAgICAgICAgIHRyYW5zaXRpb246YWxsIGxpbmVhciAwLjVzO1xuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIC5teS1mb3JtLm5nLWludmFsaWQge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHJlZDtcbiAgICAgICAgfVxuICAgICAgIDwvc3R5bGU+XG4gICAgICAgPGZvcm0gbmFtZT1cIm15Rm9ybVwiIG5nLWNvbnRyb2xsZXI9XCJGb3JtQ29udHJvbGxlclwiIGNsYXNzPVwibXktZm9ybVwiPlxuICAgICAgICAgdXNlclR5cGU6IDxpbnB1dCBuYW1lPVwiaW5wdXRcIiBuZy1tb2RlbD1cInVzZXJUeXBlXCIgcmVxdWlyZWQ+XG4gICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yXCIgbmctc2hvdz1cIm15Rm9ybS5pbnB1dC4kZXJyb3IucmVxdWlyZWRcIj5SZXF1aXJlZCE8L3NwYW4+PGJyPlxuICAgICAgICAgPHR0PnVzZXJUeXBlID0ge3t1c2VyVHlwZX19PC90dD48YnI+XG4gICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiR2YWxpZCA9IHt7bXlGb3JtLmlucHV0LiR2YWxpZH19PC90dD48YnI+XG4gICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiRlcnJvciA9IHt7bXlGb3JtLmlucHV0LiRlcnJvcn19PC90dD48YnI+XG4gICAgICAgICA8dHQ+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48YnI+XG4gICAgICAgICA8dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVkfX08L3R0Pjxicj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9maWxlPlxuICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgdXNlclR5cGUgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ3VzZXJUeXBlJykpO1xuICAgICAgICAgIHZhciB2YWxpZCA9IGVsZW1lbnQoYnkuYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKTtcblxuICAgICAgICAgIGV4cGVjdCh1c2VyVHlwZS5nZXRUZXh0KCkpLnRvQ29udGFpbignZ3Vlc3QnKTtcbiAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3RydWUnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHVzZXJUeXBlID0gZWxlbWVudChieS5iaW5kaW5nKCd1c2VyVHlwZScpKTtcbiAgICAgICAgICB2YXIgdmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSk7XG4gICAgICAgICAgdmFyIHVzZXJJbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ3VzZXJUeXBlJykpO1xuXG4gICAgICAgICAgdXNlcklucHV0LmNsZWFyKCk7XG4gICAgICAgICAgdXNlcklucHV0LnNlbmRLZXlzKCcnKTtcblxuICAgICAgICAgIGV4cGVjdCh1c2VyVHlwZS5nZXRUZXh0KCkpLnRvRXF1YWwoJ3VzZXJUeXBlID0nKTtcbiAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7XG4gICAgICAgIH0pO1xuICAgICAgPC9maWxlPlxuICAgIDwvZXhhbXBsZT5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgTmFtZSBvZiB0aGUgZm9ybS4gSWYgc3BlY2lmaWVkLCB0aGUgZm9ybSBjb250cm9sbGVyIHdpbGwgYmUgcHVibGlzaGVkIGludG9cbiAqICAgICAgICAgICAgICAgICAgICAgICByZWxhdGVkIHNjb3BlLCB1bmRlciB0aGlzIG5hbWUuXG4gKi9cbnZhciBmb3JtRGlyZWN0aXZlRmFjdG9yeSA9IGZ1bmN0aW9uKGlzTmdGb3JtKSB7XG4gIHJldHVybiBbJyR0aW1lb3V0JywgZnVuY3Rpb24oJHRpbWVvdXQpIHtcbiAgICB2YXIgZm9ybURpcmVjdGl2ZSA9IHtcbiAgICAgIG5hbWU6ICdmb3JtJyxcbiAgICAgIHJlc3RyaWN0OiBpc05nRm9ybSA/ICdFQUMnIDogJ0UnLFxuICAgICAgY29udHJvbGxlcjogRm9ybUNvbnRyb2xsZXIsXG4gICAgICBjb21waWxlOiBmdW5jdGlvbiBuZ0Zvcm1Db21waWxlKGZvcm1FbGVtZW50KSB7XG4gICAgICAgIC8vIFNldHVwIGluaXRpYWwgc3RhdGUgb2YgdGhlIGNvbnRyb2xcbiAgICAgICAgZm9ybUVsZW1lbnQuYWRkQ2xhc3MoUFJJU1RJTkVfQ0xBU1MpLmFkZENsYXNzKFZBTElEX0NMQVNTKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByZTogZnVuY3Rpb24gbmdGb3JtUHJlTGluayhzY29wZSwgZm9ybUVsZW1lbnQsIGF0dHIsIGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIC8vIGlmIGBhY3Rpb25gIGF0dHIgaXMgbm90IHByZXNlbnQgb24gdGhlIGZvcm0sIHByZXZlbnQgdGhlIGRlZmF1bHQgYWN0aW9uIChzdWJtaXNzaW9uKVxuICAgICAgICAgICAgaWYgKCEoJ2FjdGlvbicgaW4gYXR0cikpIHtcbiAgICAgICAgICAgICAgLy8gd2UgY2FuJ3QgdXNlIGpxIGV2ZW50cyBiZWNhdXNlIGlmIGEgZm9ybSBpcyBkZXN0cm95ZWQgZHVyaW5nIHN1Ym1pc3Npb24gdGhlIGRlZmF1bHRcbiAgICAgICAgICAgICAgLy8gYWN0aW9uIGlzIG5vdCBwcmV2ZW50ZWQuIHNlZSAjMTIzOFxuICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAvLyBJRSA5IGlzIG5vdCBhZmZlY3RlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgZmlyZSBhIHN1Ym1pdCBldmVudCBhbmQgdHJ5IHRvIGRvIGEgZnVsbFxuICAgICAgICAgICAgICAvLyBwYWdlIHJlbG9hZCBpZiB0aGUgZm9ybSB3YXMgZGVzdHJveWVkIGJ5IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0gdmlhIGEgY2xpY2sgaGFuZGxlclxuICAgICAgICAgICAgICAvLyBvbiBhIGJ1dHRvbiBpbiB0aGUgZm9ybS4gTG9va3MgbGlrZSBhbiBJRTkgc3BlY2lmaWMgYnVnLlxuICAgICAgICAgICAgICB2YXIgaGFuZGxlRm9ybVN1Ym1pc3Npb24gPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuJGNvbW1pdFZpZXdWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgY29udHJvbGxlci4kc2V0U3VibWl0dGVkKCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdFxuICAgICAgICAgICAgICAgICAgPyBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICA6IGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7IC8vIElFXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lckZuKGZvcm1FbGVtZW50WzBdLCAnc3VibWl0JywgaGFuZGxlRm9ybVN1Ym1pc3Npb24pO1xuXG4gICAgICAgICAgICAgIC8vIHVucmVnaXN0ZXIgdGhlIHByZXZlbnREZWZhdWx0IGxpc3RlbmVyIHNvIHRoYXQgd2UgZG9uJ3Qgbm90IGxlYWsgbWVtb3J5IGJ1dCBpbiBhXG4gICAgICAgICAgICAgIC8vIHdheSB0aGF0IHdpbGwgYWNoaWV2ZSB0aGUgcHJldmVudGlvbiBvZiB0aGUgZGVmYXVsdCBhY3Rpb24uXG4gICAgICAgICAgICAgIGZvcm1FbGVtZW50Lm9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lckZuKGZvcm1FbGVtZW50WzBdLCAnc3VibWl0JywgaGFuZGxlRm9ybVN1Ym1pc3Npb24pO1xuICAgICAgICAgICAgICAgIH0sIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBwYXJlbnRGb3JtQ3RybCA9IGNvbnRyb2xsZXIuJCRwYXJlbnRGb3JtLFxuICAgICAgICAgICAgICAgIGFsaWFzID0gY29udHJvbGxlci4kbmFtZTtcblxuICAgICAgICAgICAgaWYgKGFsaWFzKSB7XG4gICAgICAgICAgICAgIHNldHRlcihzY29wZSwgYWxpYXMsIGNvbnRyb2xsZXIsIGFsaWFzKTtcbiAgICAgICAgICAgICAgYXR0ci4kb2JzZXJ2ZShhdHRyLm5hbWUgPyAnbmFtZScgOiAnbmdGb3JtJywgZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWxpYXMgPT09IG5ld1ZhbHVlKSByZXR1cm47XG4gICAgICAgICAgICAgICAgc2V0dGVyKHNjb3BlLCBhbGlhcywgdW5kZWZpbmVkLCBhbGlhcyk7XG4gICAgICAgICAgICAgICAgYWxpYXMgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICBzZXR0ZXIoc2NvcGUsIGFsaWFzLCBjb250cm9sbGVyLCBhbGlhcyk7XG4gICAgICAgICAgICAgICAgcGFyZW50Rm9ybUN0cmwuJCRyZW5hbWVDb250cm9sKGNvbnRyb2xsZXIsIGFsaWFzKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3JtRWxlbWVudC5vbignJGRlc3Ryb3knLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcGFyZW50Rm9ybUN0cmwuJHJlbW92ZUNvbnRyb2woY29udHJvbGxlcik7XG4gICAgICAgICAgICAgIGlmIChhbGlhcykge1xuICAgICAgICAgICAgICAgIHNldHRlcihzY29wZSwgYWxpYXMsIHVuZGVmaW5lZCwgYWxpYXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGV4dGVuZChjb250cm9sbGVyLCBudWxsRm9ybUN0cmwpOyAvL3N0b3AgcHJvcGFnYXRpbmcgY2hpbGQgZGVzdHJ1Y3Rpb24gaGFuZGxlcnMgdXB3YXJkc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZm9ybURpcmVjdGl2ZTtcbiAgfV07XG59O1xuXG52YXIgZm9ybURpcmVjdGl2ZSA9IGZvcm1EaXJlY3RpdmVGYWN0b3J5KCk7XG52YXIgbmdGb3JtRGlyZWN0aXZlID0gZm9ybURpcmVjdGl2ZUZhY3RvcnkodHJ1ZSk7XG5cbi8qIGdsb2JhbCBWQUxJRF9DTEFTUzogdHJ1ZSxcbiAgSU5WQUxJRF9DTEFTUzogdHJ1ZSxcbiAgUFJJU1RJTkVfQ0xBU1M6IHRydWUsXG4gIERJUlRZX0NMQVNTOiB0cnVlLFxuICBVTlRPVUNIRURfQ0xBU1M6IHRydWUsXG4gIFRPVUNIRURfQ0xBU1M6IHRydWUsXG4qL1xuXG4vLyBSZWdleCBjb2RlIGlzIG9idGFpbmVkIGZyb20gU086IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzMxNDMwNzAvamF2YXNjcmlwdC1yZWdleC1pc28tZGF0ZXRpbWUjYW5zd2VyLTMxNDMyMzFcbnZhciBJU09fREFURV9SRUdFWFAgPSAvXFxkezR9LVswMV1cXGQtWzAtM11cXGRUWzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGRcXC5cXGQrKFsrLV1bMC0yXVxcZDpbMC01XVxcZHxaKS87XG52YXIgVVJMX1JFR0VYUCA9IC9eKGZ0cHxodHRwfGh0dHBzKTpcXC9cXC8oXFx3Kzp7MCwxfVxcdypAKT8oXFxTKykoOlswLTldKyk/KFxcL3xcXC8oW1xcdyMhOi4/Kz0mJUAhXFwtXFwvXSkpPyQvO1xudmFyIEVNQUlMX1JFR0VYUCA9IC9eW2EtejAtOSEjJCUmJyorXFwvPT9eX2B7fH1+Li1dK0BbYS16MC05XShbYS16MC05LV0qW2EtejAtOV0pPyhcXC5bYS16MC05XShbYS16MC05LV0qW2EtejAtOV0pPykqJC9pO1xudmFyIE5VTUJFUl9SRUdFWFAgPSAvXlxccyooXFwtfFxcKyk/KFxcZCt8KFxcZCooXFwuXFxkKikpKVxccyokLztcbnZhciBEQVRFX1JFR0VYUCA9IC9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSkkLztcbnZhciBEQVRFVElNRUxPQ0FMX1JFR0VYUCA9IC9eKFxcZHs0fSktKFxcZFxcZCktKFxcZFxcZClUKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkoXFwuXFxkezEsM30pPyk/JC87XG52YXIgV0VFS19SRUdFWFAgPSAvXihcXGR7NH0pLVcoXFxkXFxkKSQvO1xudmFyIE1PTlRIX1JFR0VYUCA9IC9eKFxcZHs0fSktKFxcZFxcZCkkLztcbnZhciBUSU1FX1JFR0VYUCA9IC9eKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkoXFwuXFxkezEsM30pPyk/JC87XG52YXIgREVGQVVMVF9SRUdFWFAgPSAvKFxccyt8XilkZWZhdWx0KFxccyt8JCkvO1xuXG52YXIgJG5nTW9kZWxNaW5FcnIgPSBuZXcgbWluRXJyKCduZ01vZGVsJyk7XG5cbnZhciBpbnB1dFR5cGUgPSB7XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBpbnB1dFxuICAgKiBAbmFtZSBpbnB1dFt0ZXh0XVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU3RhbmRhcmQgSFRNTCB0ZXh0IGlucHV0IHdpdGggYW5ndWxhciBkYXRhIGJpbmRpbmcsIGluaGVyaXRlZCBieSBtb3N0IG9mIHRoZSBgaW5wdXRgIGVsZW1lbnRzLlxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBlbnRlcmVkLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSBhbmQgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgdG9cbiAgICogICAgdGhlIGVsZW1lbnQgd2hlbiB0aGUgbmdSZXF1aXJlZCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLiBVc2UgYG5nUmVxdWlyZWRgIGluc3RlYWQgb2ZcbiAgICogICAgYHJlcXVpcmVkYCB3aGVuIHlvdSB3YW50IHRvIGRhdGEtYmluZCB0byB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNaW5sZW5ndGggU2V0cyBgbWlubGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgc2hvcnRlciB0aGFuXG4gICAqICAgIG1pbmxlbmd0aC5cbiAgICogQHBhcmFtIHtudW1iZXI9fSBuZ01heGxlbmd0aCBTZXRzIGBtYXhsZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBsb25nZXIgdGhhblxuICAgKiAgICBtYXhsZW5ndGguXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gcGF0dGVybiBTaW1pbGFyIHRvIGBuZ1BhdHRlcm5gIGV4Y2VwdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgaXMgdGhlIGFjdHVhbCBzdHJpbmdcbiAgICogICAgdGhhdCBjb250YWlucyB0aGUgcmVndWxhciBleHByZXNzaW9uIGJvZHkgdGhhdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvblxuICAgKiAgICBhcyBpbiB0aGUgbmdQYXR0ZXJuIGRpcmVjdGl2ZS5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1BhdHRlcm4gU2V0cyBgcGF0dGVybmAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIG5nTW9kZWwgdmFsdWUgZG9lcyBub3QgbWF0Y2hcbiAgICogICAgYSBSZWdFeHAgZm91bmQgYnkgZXZhbHVhdGluZyB0aGUgQW5ndWxhciBleHByZXNzaW9uIGdpdmVuIGluIHRoZSBhdHRyaWJ1dGUgdmFsdWUuXG4gICAqICAgIElmIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIFJlZ0V4cCBvYmplY3QgdGhlbiB0aGlzIGlzIHVzZWQgZGlyZWN0bHkuXG4gICAqICAgIElmIHRoZSBleHByZXNzaW9uIGlzIGEgc3RyaW5nIHRoZW4gaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBSZWdFeHAgYWZ0ZXIgd3JhcHBpbmcgaXQgaW4gYF5gIGFuZCBgJGBcbiAgICogICAgY2hhcmFjdGVycy4gRm9yIGluc3RhbmNlLCBgXCJhYmNcImAgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYG5ldyBSZWdFeHAoJ15hYmMkJylgLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXJcbiAgICogICAgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICogQHBhcmFtIHtib29sZWFuPX0gW25nVHJpbT10cnVlXSBJZiBzZXQgdG8gZmFsc2UgQW5ndWxhciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHRyaW0gdGhlIGlucHV0LlxuICAgKiAgICBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGZvciBpbnB1dFt0eXBlPXBhc3N3b3JkXSBjb250cm9scywgd2hpY2ggd2lsbCBuZXZlciB0cmltIHRoZVxuICAgKiAgICBpbnB1dC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICAgIDxleGFtcGxlIG5hbWU9XCJ0ZXh0LWlucHV0LWRpcmVjdGl2ZVwiIG1vZHVsZT1cInRleHRJbnB1dEV4YW1wbGVcIj5cbiAgICAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCd0ZXh0SW5wdXRFeGFtcGxlJywgW10pXG4gICAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcbiAgICAgICAgICAgICAgICRzY29wZS50ZXh0ID0gJ2d1ZXN0JztcbiAgICAgICAgICAgICAgICRzY29wZS53b3JkID0gL15cXHMqXFx3KlxccyokLztcbiAgICAgICAgICAgICB9XSk7XG4gICAgICAgICA8L3NjcmlwdD5cbiAgICAgICAgIDxmb3JtIG5hbWU9XCJteUZvcm1cIiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cbiAgICAgICAgICAgU2luZ2xlIHdvcmQ6IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJpbnB1dFwiIG5nLW1vZGVsPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmctcGF0dGVybj1cIndvcmRcIiByZXF1aXJlZCBuZy10cmltPVwiZmFsc2VcIj5cbiAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiIG5nLXNob3c9XCJteUZvcm0uaW5wdXQuJGVycm9yLnJlcXVpcmVkXCI+XG4gICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPlxuICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yXCIgbmctc2hvdz1cIm15Rm9ybS5pbnB1dC4kZXJyb3IucGF0dGVyblwiPlxuICAgICAgICAgICAgIFNpbmdsZSB3b3JkIG9ubHkhPC9zcGFuPlxuXG4gICAgICAgICAgIDx0dD50ZXh0ID0ge3t0ZXh0fX08L3R0Pjxici8+XG4gICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0Pjxici8+XG4gICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJGVycm9yID0ge3tteUZvcm0uaW5wdXQuJGVycm9yfX08L3R0Pjxici8+XG4gICAgICAgICAgIDx0dD5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0uJHZhbGlkfX08L3R0Pjxici8+XG4gICAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyLz5cbiAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvZmlsZT5cbiAgICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgICAgIHZhciB0ZXh0ID0gZWxlbWVudChieS5iaW5kaW5nKCd0ZXh0JykpO1xuICAgICAgICAgIHZhciB2YWxpZCA9IGVsZW1lbnQoYnkuYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKTtcbiAgICAgICAgICB2YXIgaW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCd0ZXh0JykpO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBleHBlY3QodGV4dC5nZXRUZXh0KCkpLnRvQ29udGFpbignZ3Vlc3QnKTtcbiAgICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbigndHJ1ZScpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpbnB1dC5jbGVhcigpO1xuICAgICAgICAgICAgaW5wdXQuc2VuZEtleXMoJycpO1xuXG4gICAgICAgICAgICBleHBlY3QodGV4dC5nZXRUZXh0KCkpLnRvRXF1YWwoJ3RleHQgPScpO1xuICAgICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdmYWxzZScpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIG11bHRpIHdvcmQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlucHV0LmNsZWFyKCk7XG4gICAgICAgICAgICBpbnB1dC5zZW5kS2V5cygnaGVsbG8gd29ybGQnKTtcblxuICAgICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdmYWxzZScpO1xuICAgICAgICAgIH0pO1xuICAgICAgICA8L2ZpbGU+XG4gICAgICA8L2V4YW1wbGU+XG4gICAqL1xuICAndGV4dCc6IHRleHRJbnB1dFR5cGUsXG5cbiAgICAvKipcbiAgICAgKiBAbmdkb2MgaW5wdXRcbiAgICAgKiBAbmFtZSBpbnB1dFtkYXRlXVxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogSW5wdXQgd2l0aCBkYXRlIHZhbGlkYXRpb24gYW5kIHRyYW5zZm9ybWF0aW9uLiBJbiBicm93c2VycyB0aGF0IGRvIG5vdCB5ZXQgc3VwcG9ydFxuICAgICAqIHRoZSBIVE1MNSBkYXRlIGlucHV0LCBhIHRleHQgZWxlbWVudCB3aWxsIGJlIHVzZWQuIEluIHRoYXQgY2FzZSwgdGV4dCBtdXN0IGJlIGVudGVyZWQgaW4gYSB2YWxpZCBJU08tODYwMVxuICAgICAqIGRhdGUgZm9ybWF0ICh5eXl5LU1NLWRkKSwgZm9yIGV4YW1wbGU6IGAyMDA5LTAxLTA2YC4gU2luY2UgbWFueVxuICAgICAqIG1vZGVybiBicm93c2VycyBkbyBub3QgeWV0IHN1cHBvcnQgdGhpcyBpbnB1dCB0eXBlLCBpdCBpcyBpbXBvcnRhbnQgdG8gcHJvdmlkZSBjdWVzIHRvIHVzZXJzIG9uIHRoZVxuICAgICAqIGV4cGVjdGVkIGlucHV0IGZvcm1hdCB2aWEgYSBwbGFjZWhvbGRlciBvciBsYWJlbC5cbiAgICAgKlxuICAgICAqIFRoZSBtb2RlbCBtdXN0IGFsd2F5cyBiZSBhIERhdGUgb2JqZWN0LCBvdGhlcndpc2UgQW5ndWxhciB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgICAqIEludmFsaWQgYERhdGVgIG9iamVjdHMgKGRhdGVzIHdob3NlIGBnZXRUaW1lKClgIGlzIGBOYU5gKSB3aWxsIGJlIHJlbmRlcmVkIGFzIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgKlxuICAgICAqIFRoZSB0aW1lem9uZSB0byBiZSB1c2VkIHRvIHJlYWQvd3JpdGUgdGhlIGBEYXRlYCBpbnN0YW5jZSBpbiB0aGUgbW9kZWwgY2FuIGJlIGRlZmluZWQgdXNpbmdcbiAgICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nTW9kZWxPcHRpb25zIG5nTW9kZWxPcHRpb25zfS4gQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgdGltZXpvbmUgb2YgdGhlIGJyb3dzZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uXG4gICAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gbWluIFNldHMgdGhlIGBtaW5gIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIGxlc3MgdGhhbiBgbWluYC4gVGhpcyBtdXN0IGJlIGFcbiAgICAgKiB2YWxpZCBJU08gZGF0ZSBzdHJpbmcgKHl5eXktTU0tZGQpLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gbWF4IFNldHMgdGhlIGBtYXhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIGdyZWF0ZXIgdGhhbiBgbWF4YC4gVGhpcyBtdXN0IGJlXG4gICAgICogYSB2YWxpZCBJU08gZGF0ZSBzdHJpbmcgKHl5eXktTU0tZGQpLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gcmVxdWlyZWQgU2V0cyBgcmVxdWlyZWRgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBub3QgZW50ZXJlZC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSBhbmQgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgdG9cbiAgICAgKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZlxuICAgICAqICAgIGByZXF1aXJlZGAgd2hlbiB5b3Ugd2FudCB0byBkYXRhLWJpbmQgdG8gdGhlIGByZXF1aXJlZGAgYXR0cmlidXRlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNlclxuICAgICAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICA8ZXhhbXBsZSBuYW1lPVwiZGF0ZS1pbnB1dC1kaXJlY3RpdmVcIiBtb2R1bGU9XCJkYXRlSW5wdXRFeGFtcGxlXCI+XG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgPHNjcmlwdD5cbiAgICAgICAgICBhbmd1bGFyLm1vZHVsZSgnZGF0ZUlucHV0RXhhbXBsZScsIFtdKVxuICAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0RhdGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcbiAgICAgICAgICAgICAgJHNjb3BlLnZhbHVlID0gbmV3IERhdGUoMjAxMywgOSwgMjIpO1xuICAgICAgICAgICAgfV0pO1xuICAgICAgIDwvc2NyaXB0PlxuICAgICAgIDxmb3JtIG5hbWU9XCJteUZvcm1cIiBuZy1jb250cm9sbGVyPVwiRGF0ZUNvbnRyb2xsZXIgYXMgZGF0ZUN0cmxcIj5cbiAgICAgICAgICBQaWNrIGEgZGF0ZSBpbiAyMDEzOlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGlkPVwiZXhhbXBsZUlucHV0XCIgbmFtZT1cImlucHV0XCIgbmctbW9kZWw9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwieXl5eS1NTS1kZFwiIG1pbj1cIjIwMTMtMDEtMDFcIiBtYXg9XCIyMDEzLTEyLTMxXCIgcmVxdWlyZWQgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yXCIgbmctc2hvdz1cIm15Rm9ybS5pbnB1dC4kZXJyb3IucmVxdWlyZWRcIj5cbiAgICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci5kYXRlXCI+XG4gICAgICAgICAgICAgIE5vdCBhIHZhbGlkIGRhdGUhPC9zcGFuPlxuICAgICAgICAgICA8dHQ+dmFsdWUgPSB7e3ZhbHVlIHwgZGF0ZTogXCJ5eXl5LU1NLWRkXCJ9fTwvdHQ+PGJyLz5cbiAgICAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kdmFsaWQgPSB7e215Rm9ybS5pbnB1dC4kdmFsaWR9fTwvdHQ+PGJyLz5cbiAgICAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz5cbiAgICAgICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz5cbiAgICAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IucmVxdWlyZWQgPSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1aXJlZH19PC90dD48YnIvPlxuICAgICAgIDwvZm9ybT5cbiAgICAgPC9maWxlPlxuICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gICAgICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQoYnkuYmluZGluZygndmFsdWUgfCBkYXRlOiBcInl5eXktTU0tZGRcIicpKTtcbiAgICAgICAgdmFyIHZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpO1xuICAgICAgICB2YXIgaW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCd2YWx1ZScpKTtcblxuICAgICAgICAvLyBjdXJyZW50bHkgcHJvdHJhY3Rvci93ZWJkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydFxuICAgICAgICAvLyBzZW5kaW5nIGtleXMgdG8gYWxsIGtub3duIEhUTUw1IGlucHV0IGNvbnRyb2xzXG4gICAgICAgIC8vIGZvciB2YXJpb3VzIGJyb3dzZXJzIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvcHJvdHJhY3Rvci9pc3N1ZXMvNTYyKS5cbiAgICAgICAgZnVuY3Rpb24gc2V0SW5wdXQodmFsKSB7XG4gICAgICAgICAgLy8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCBhbmQgZm9yY2UgdmFsaWRhdGlvbi5cbiAgICAgICAgICB2YXIgc2NyID0gXCJ2YXIgaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4YW1wbGVJbnB1dCcpOyBcIiArXG4gICAgICAgICAgXCJpcHQudmFsdWUgPSAnXCIgKyB2YWwgKyBcIic7XCIgK1xuICAgICAgICAgIFwiYW5ndWxhci5lbGVtZW50KGlwdCkuc2NvcGUoKS4kYXBwbHkoZnVuY3Rpb24ocykgeyBzLm15Rm9ybVtpcHQubmFtZV0uJHNldFZpZXdWYWx1ZSgnXCIgKyB2YWwgKyBcIicpOyB9KTtcIjtcbiAgICAgICAgICBicm93c2VyLmV4ZWN1dGVTY3JpcHQoc2NyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvQ29udGFpbignMjAxMy0xMC0yMicpO1xuICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignbXlGb3JtLmlucHV0LiR2YWxpZCA9IHRydWUnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgc2V0SW5wdXQoJycpO1xuICAgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvRXF1YWwoJ3ZhbHVlID0nKTtcbiAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSBmYWxzZScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgb3ZlciBtYXgnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBzZXRJbnB1dCgnMjAxNS0wMS0wMScpO1xuICAgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvQ29udGFpbignJyk7XG4gICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdteUZvcm0uaW5wdXQuJHZhbGlkID0gZmFsc2UnKTtcbiAgICAgICAgfSk7XG4gICAgIDwvZmlsZT5cbiAgICAgPC9leGFtcGxlPlxuICAgICAqL1xuICAnZGF0ZSc6IGNyZWF0ZURhdGVJbnB1dFR5cGUoJ2RhdGUnLCBEQVRFX1JFR0VYUCxcbiAgICAgICAgIGNyZWF0ZURhdGVQYXJzZXIoREFURV9SRUdFWFAsIFsneXl5eScsICdNTScsICdkZCddKSxcbiAgICAgICAgICd5eXl5LU1NLWRkJyksXG5cbiAgIC8qKlxuICAgICogQG5nZG9jIGlucHV0XG4gICAgKiBAbmFtZSBpbnB1dFtkYXRldGltZS1sb2NhbF1cbiAgICAqXG4gICAgKiBAZGVzY3JpcHRpb25cbiAgICAqIElucHV0IHdpdGggZGF0ZXRpbWUgdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb24uIEluIGJyb3dzZXJzIHRoYXQgZG8gbm90IHlldCBzdXBwb3J0XG4gICAgKiB0aGUgSFRNTDUgZGF0ZSBpbnB1dCwgYSB0ZXh0IGVsZW1lbnQgd2lsbCBiZSB1c2VkLiBJbiB0aGF0IGNhc2UsIHRoZSB0ZXh0IG11c3QgYmUgZW50ZXJlZCBpbiBhIHZhbGlkIElTTy04NjAxXG4gICAgKiBsb2NhbCBkYXRldGltZSBmb3JtYXQgKHl5eXktTU0tZGRUSEg6bW06c3MpLCBmb3IgZXhhbXBsZTogYDIwMTAtMTItMjhUMTQ6NTc6MDBgLlxuICAgICpcbiAgICAqIFRoZSBtb2RlbCBtdXN0IGFsd2F5cyBiZSBhIERhdGUgb2JqZWN0LCBvdGhlcndpc2UgQW5ndWxhciB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgICogSW52YWxpZCBgRGF0ZWAgb2JqZWN0cyAoZGF0ZXMgd2hvc2UgYGdldFRpbWUoKWAgaXMgYE5hTmApIHdpbGwgYmUgcmVuZGVyZWQgYXMgYW4gZW1wdHkgc3RyaW5nLlxuICAgICpcbiAgICAqIFRoZSB0aW1lem9uZSB0byBiZSB1c2VkIHRvIHJlYWQvd3JpdGUgdGhlIGBEYXRlYCBpbnN0YW5jZSBpbiB0aGUgbW9kZWwgY2FuIGJlIGRlZmluZWQgdXNpbmdcbiAgICAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdNb2RlbE9wdGlvbnMgbmdNb2RlbE9wdGlvbnN9LiBCeSBkZWZhdWx0LCB0aGlzIGlzIHRoZSB0aW1lem9uZSBvZiB0aGUgYnJvd3Nlci5cbiAgICAqXG4gICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uXG4gICAgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuXG4gICAgKiBAcGFyYW0ge3N0cmluZz19IG1pbiBTZXRzIHRoZSBgbWluYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBsZXNzIHRoYW4gYG1pbmAuIFRoaXMgbXVzdCBiZSBhXG4gICAgKiB2YWxpZCBJU08gZGF0ZXRpbWUgZm9ybWF0ICh5eXl5LU1NLWRkVEhIOm1tOnNzKS5cbiAgICAqIEBwYXJhbSB7c3RyaW5nPX0gbWF4IFNldHMgdGhlIGBtYXhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIGdyZWF0ZXIgdGhhbiBgbWF4YC4gVGhpcyBtdXN0IGJlXG4gICAgKiBhIHZhbGlkIElTTyBkYXRldGltZSBmb3JtYXQgKHl5eXktTU0tZGRUSEg6bW06c3MpLlxuICAgICogQHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBTZXRzIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBlbnRlcmVkLlxuICAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1JlcXVpcmVkIEFkZHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgYW5kIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBjb25zdHJhaW50IHRvXG4gICAgKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZlxuICAgICogICAgYHJlcXVpcmVkYCB3aGVuIHlvdSB3YW50IHRvIGRhdGEtYmluZCB0byB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUuXG4gICAgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXJcbiAgICAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuXG4gICAgKlxuICAgICogQGV4YW1wbGVcbiAgICA8ZXhhbXBsZSBuYW1lPVwiZGF0ZXRpbWVsb2NhbC1pbnB1dC1kaXJlY3RpdmVcIiBtb2R1bGU9XCJkYXRlRXhhbXBsZVwiPlxuICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICA8c2NyaXB0PlxuICAgICAgICBhbmd1bGFyLm1vZHVsZSgnZGF0ZUV4YW1wbGUnLCBbXSlcbiAgICAgICAgICAuY29udHJvbGxlcignRGF0ZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xuICAgICAgICAgICAgJHNjb3BlLnZhbHVlID0gbmV3IERhdGUoMjAxMCwgMTEsIDI4LCAxNCwgNTcpO1xuICAgICAgICAgIH1dKTtcbiAgICAgIDwvc2NyaXB0PlxuICAgICAgPGZvcm0gbmFtZT1cIm15Rm9ybVwiIG5nLWNvbnRyb2xsZXI9XCJEYXRlQ29udHJvbGxlciBhcyBkYXRlQ3RybFwiPlxuICAgICAgICBQaWNrIGEgZGF0ZSBiZXR3ZWVuIGluIDIwMTM6XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBpZD1cImV4YW1wbGVJbnB1dFwiIG5hbWU9XCJpbnB1dFwiIG5nLW1vZGVsPVwidmFsdWVcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ5eXl5LU1NLWRkVEhIOm1tOnNzXCIgbWluPVwiMjAwMS0wMS0wMVQwMDowMDowMFwiIG1heD1cIjIwMTMtMTItMzFUMDA6MDA6MDBcIiByZXF1aXJlZCAvPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yXCIgbmctc2hvdz1cIm15Rm9ybS5pbnB1dC4kZXJyb3IucmVxdWlyZWRcIj5cbiAgICAgICAgICAgIFJlcXVpcmVkITwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiIG5nLXNob3c9XCJteUZvcm0uaW5wdXQuJGVycm9yLmRhdGV0aW1lbG9jYWxcIj5cbiAgICAgICAgICAgIE5vdCBhIHZhbGlkIGRhdGUhPC9zcGFuPlxuICAgICAgICA8dHQ+dmFsdWUgPSB7e3ZhbHVlIHwgZGF0ZTogXCJ5eXl5LU1NLWRkVEhIOm1tOnNzXCJ9fTwvdHQ+PGJyLz5cbiAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kdmFsaWQgPSB7e215Rm9ybS5pbnB1dC4kdmFsaWR9fTwvdHQ+PGJyLz5cbiAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz5cbiAgICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz5cbiAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IucmVxdWlyZWQgPSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1aXJlZH19PC90dD48YnIvPlxuICAgICAgPC9mb3JtPlxuICAgIDwvZmlsZT5cbiAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gICAgICB2YXIgdmFsdWUgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ3ZhbHVlIHwgZGF0ZTogXCJ5eXl5LU1NLWRkVEhIOm1tOnNzXCInKSk7XG4gICAgICB2YXIgdmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSk7XG4gICAgICB2YXIgaW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCd2YWx1ZScpKTtcblxuICAgICAgLy8gY3VycmVudGx5IHByb3RyYWN0b3Ivd2ViZHJpdmVyIGRvZXMgbm90IHN1cHBvcnRcbiAgICAgIC8vIHNlbmRpbmcga2V5cyB0byBhbGwga25vd24gSFRNTDUgaW5wdXQgY29udHJvbHNcbiAgICAgIC8vIGZvciB2YXJpb3VzIGJyb3dzZXJzIChodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9wcm90cmFjdG9yL2lzc3Vlcy81NjIpLlxuICAgICAgZnVuY3Rpb24gc2V0SW5wdXQodmFsKSB7XG4gICAgICAgIC8vIHNldCB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgYW5kIGZvcmNlIHZhbGlkYXRpb24uXG4gICAgICAgIHZhciBzY3IgPSBcInZhciBpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhhbXBsZUlucHV0Jyk7IFwiICtcbiAgICAgICAgXCJpcHQudmFsdWUgPSAnXCIgKyB2YWwgKyBcIic7XCIgK1xuICAgICAgICBcImFuZ3VsYXIuZWxlbWVudChpcHQpLnNjb3BlKCkuJGFwcGx5KGZ1bmN0aW9uKHMpIHsgcy5teUZvcm1baXB0Lm5hbWVdLiRzZXRWaWV3VmFsdWUoJ1wiICsgdmFsICsgXCInKTsgfSk7XCI7XG4gICAgICAgIGJyb3dzZXIuZXhlY3V0ZVNjcmlwdChzY3IpO1xuICAgICAgfVxuXG4gICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgZXhwZWN0KHZhbHVlLmdldFRleHQoKSkudG9Db250YWluKCcyMDEwLTEyLTI4VDE0OjU3OjAwJyk7XG4gICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignbXlGb3JtLmlucHV0LiR2YWxpZCA9IHRydWUnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgZW1wdHknLCBmdW5jdGlvbigpIHtcbiAgICAgICAgc2V0SW5wdXQoJycpO1xuICAgICAgICBleHBlY3QodmFsdWUuZ2V0VGV4dCgpKS50b0VxdWFsKCd2YWx1ZSA9Jyk7XG4gICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignbXlGb3JtLmlucHV0LiR2YWxpZCA9IGZhbHNlJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIG92ZXIgbWF4JywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNldElucHV0KCcyMDE1LTAxLTAxVDIzOjU5OjAwJyk7XG4gICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvQ29udGFpbignJyk7XG4gICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignbXlGb3JtLmlucHV0LiR2YWxpZCA9IGZhbHNlJyk7XG4gICAgICB9KTtcbiAgICA8L2ZpbGU+XG4gICAgPC9leGFtcGxlPlxuICAgICovXG4gICdkYXRldGltZS1sb2NhbCc6IGNyZWF0ZURhdGVJbnB1dFR5cGUoJ2RhdGV0aW1lbG9jYWwnLCBEQVRFVElNRUxPQ0FMX1JFR0VYUCxcbiAgICAgIGNyZWF0ZURhdGVQYXJzZXIoREFURVRJTUVMT0NBTF9SRUdFWFAsIFsneXl5eScsICdNTScsICdkZCcsICdISCcsICdtbScsICdzcycsICdzc3MnXSksXG4gICAgICAneXl5eS1NTS1kZFRISDptbTpzcy5zc3MnKSxcblxuICAvKipcbiAgICogQG5nZG9jIGlucHV0XG4gICAqIEBuYW1lIGlucHV0W3RpbWVdXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbnB1dCB3aXRoIHRpbWUgdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb24uIEluIGJyb3dzZXJzIHRoYXQgZG8gbm90IHlldCBzdXBwb3J0XG4gICAqIHRoZSBIVE1MNSBkYXRlIGlucHV0LCBhIHRleHQgZWxlbWVudCB3aWxsIGJlIHVzZWQuIEluIHRoYXQgY2FzZSwgdGhlIHRleHQgbXVzdCBiZSBlbnRlcmVkIGluIGEgdmFsaWQgSVNPLTg2MDFcbiAgICogbG9jYWwgdGltZSBmb3JtYXQgKEhIOm1tOnNzKSwgZm9yIGV4YW1wbGU6IGAxNDo1NzowMGAuIE1vZGVsIG11c3QgYmUgYSBEYXRlIG9iamVjdC4gVGhpcyBiaW5kaW5nIHdpbGwgYWx3YXlzIG91dHB1dCBhXG4gICAqIERhdGUgb2JqZWN0IHRvIHRoZSBtb2RlbCBvZiBKYW51YXJ5IDEsIDE5NzAsIG9yIGxvY2FsIGRhdGUgYG5ldyBEYXRlKDE5NzAsIDAsIDEsIEhILCBtbSwgc3MpYC5cbiAgICpcbiAgICogVGhlIG1vZGVsIG11c3QgYWx3YXlzIGJlIGEgRGF0ZSBvYmplY3QsIG90aGVyd2lzZSBBbmd1bGFyIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAqIEludmFsaWQgYERhdGVgIG9iamVjdHMgKGRhdGVzIHdob3NlIGBnZXRUaW1lKClgIGlzIGBOYU5gKSB3aWxsIGJlIHJlbmRlcmVkIGFzIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogVGhlIHRpbWV6b25lIHRvIGJlIHVzZWQgdG8gcmVhZC93cml0ZSB0aGUgYERhdGVgIGluc3RhbmNlIGluIHRoZSBtb2RlbCBjYW4gYmUgZGVmaW5lZCB1c2luZ1xuICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nTW9kZWxPcHRpb25zIG5nTW9kZWxPcHRpb25zfS4gQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgdGltZXpvbmUgb2YgdGhlIGJyb3dzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG1pbiBTZXRzIHRoZSBgbWluYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBsZXNzIHRoYW4gYG1pbmAuIFRoaXMgbXVzdCBiZSBhXG4gICAqIHZhbGlkIElTTyB0aW1lIGZvcm1hdCAoSEg6bW06c3MpLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG1heCBTZXRzIHRoZSBgbWF4YCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBncmVhdGVyIHRoYW4gYG1heGAuIFRoaXMgbXVzdCBiZSBhXG4gICAqIHZhbGlkIElTTyB0aW1lIGZvcm1hdCAoSEg6bW06c3MpLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0b1xuICAgKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZlxuICAgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyXG4gICAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICA8ZXhhbXBsZSBuYW1lPVwidGltZS1pbnB1dC1kaXJlY3RpdmVcIiBtb2R1bGU9XCJ0aW1lRXhhbXBsZVwiPlxuICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgPHNjcmlwdD5cbiAgICAgIGFuZ3VsYXIubW9kdWxlKCd0aW1lRXhhbXBsZScsIFtdKVxuICAgICAgICAuY29udHJvbGxlcignRGF0ZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xuICAgICAgICAgICRzY29wZS52YWx1ZSA9IG5ldyBEYXRlKDE5NzAsIDAsIDEsIDE0LCA1NywgMCk7XG4gICAgICAgIH1dKTtcbiAgICAgPC9zY3JpcHQ+XG4gICAgIDxmb3JtIG5hbWU9XCJteUZvcm1cIiBuZy1jb250cm9sbGVyPVwiRGF0ZUNvbnRyb2xsZXIgYXMgZGF0ZUN0cmxcIj5cbiAgICAgICAgUGljayBhIGJldHdlZW4gOGFtIGFuZCA1cG06XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGltZVwiIGlkPVwiZXhhbXBsZUlucHV0XCIgbmFtZT1cImlucHV0XCIgbmctbW9kZWw9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkhIOm1tOnNzXCIgbWluPVwiMDg6MDA6MDBcIiBtYXg9XCIxNzowMDowMFwiIHJlcXVpcmVkIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci5yZXF1aXJlZFwiPlxuICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yXCIgbmctc2hvdz1cIm15Rm9ybS5pbnB1dC4kZXJyb3IudGltZVwiPlxuICAgICAgICAgICAgTm90IGEgdmFsaWQgZGF0ZSE8L3NwYW4+XG4gICAgICAgIDx0dD52YWx1ZSA9IHt7dmFsdWUgfCBkYXRlOiBcIkhIOm1tOnNzXCJ9fTwvdHQ+PGJyLz5cbiAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kdmFsaWQgPSB7e215Rm9ybS5pbnB1dC4kdmFsaWR9fTwvdHQ+PGJyLz5cbiAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz5cbiAgICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz5cbiAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IucmVxdWlyZWQgPSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1aXJlZH19PC90dD48YnIvPlxuICAgICA8L2Zvcm0+XG4gICA8L2ZpbGU+XG4gICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gICAgICB2YXIgdmFsdWUgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ3ZhbHVlIHwgZGF0ZTogXCJISDptbTpzc1wiJykpO1xuICAgICAgdmFyIHZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpO1xuICAgICAgdmFyIGlucHV0ID0gZWxlbWVudChieS5tb2RlbCgndmFsdWUnKSk7XG5cbiAgICAgIC8vIGN1cnJlbnRseSBwcm90cmFjdG9yL3dlYmRyaXZlciBkb2VzIG5vdCBzdXBwb3J0XG4gICAgICAvLyBzZW5kaW5nIGtleXMgdG8gYWxsIGtub3duIEhUTUw1IGlucHV0IGNvbnRyb2xzXG4gICAgICAvLyBmb3IgdmFyaW91cyBicm93c2VycyAoaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvcHJvdHJhY3Rvci9pc3N1ZXMvNTYyKS5cbiAgICAgIGZ1bmN0aW9uIHNldElucHV0KHZhbCkge1xuICAgICAgICAvLyBzZXQgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IGFuZCBmb3JjZSB2YWxpZGF0aW9uLlxuICAgICAgICB2YXIgc2NyID0gXCJ2YXIgaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4YW1wbGVJbnB1dCcpOyBcIiArXG4gICAgICAgIFwiaXB0LnZhbHVlID0gJ1wiICsgdmFsICsgXCInO1wiICtcbiAgICAgICAgXCJhbmd1bGFyLmVsZW1lbnQoaXB0KS5zY29wZSgpLiRhcHBseShmdW5jdGlvbihzKSB7IHMubXlGb3JtW2lwdC5uYW1lXS4kc2V0Vmlld1ZhbHVlKCdcIiArIHZhbCArIFwiJyk7IH0pO1wiO1xuICAgICAgICBicm93c2VyLmV4ZWN1dGVTY3JpcHQoc2NyKTtcbiAgICAgIH1cblxuICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvQ29udGFpbignMTQ6NTc6MDAnKTtcbiAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdteUZvcm0uaW5wdXQuJHZhbGlkID0gdHJ1ZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkge1xuICAgICAgICBzZXRJbnB1dCgnJyk7XG4gICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvRXF1YWwoJ3ZhbHVlID0nKTtcbiAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdteUZvcm0uaW5wdXQuJHZhbGlkID0gZmFsc2UnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgb3ZlciBtYXgnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgc2V0SW5wdXQoJzIzOjU5OjAwJyk7XG4gICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvQ29udGFpbignJyk7XG4gICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignbXlGb3JtLmlucHV0LiR2YWxpZCA9IGZhbHNlJyk7XG4gICAgICB9KTtcbiAgIDwvZmlsZT5cbiAgIDwvZXhhbXBsZT5cbiAgICovXG4gICd0aW1lJzogY3JlYXRlRGF0ZUlucHV0VHlwZSgndGltZScsIFRJTUVfUkVHRVhQLFxuICAgICAgY3JlYXRlRGF0ZVBhcnNlcihUSU1FX1JFR0VYUCwgWydISCcsICdtbScsICdzcycsICdzc3MnXSksXG4gICAgICdISDptbTpzcy5zc3MnKSxcblxuICAgLyoqXG4gICAgKiBAbmdkb2MgaW5wdXRcbiAgICAqIEBuYW1lIGlucHV0W3dlZWtdXG4gICAgKlxuICAgICogQGRlc2NyaXB0aW9uXG4gICAgKiBJbnB1dCB3aXRoIHdlZWstb2YtdGhlLXllYXIgdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb24gdG8gRGF0ZS4gSW4gYnJvd3NlcnMgdGhhdCBkbyBub3QgeWV0IHN1cHBvcnRcbiAgICAqIHRoZSBIVE1MNSB3ZWVrIGlucHV0LCBhIHRleHQgZWxlbWVudCB3aWxsIGJlIHVzZWQuIEluIHRoYXQgY2FzZSwgdGhlIHRleHQgbXVzdCBiZSBlbnRlcmVkIGluIGEgdmFsaWQgSVNPLTg2MDFcbiAgICAqIHdlZWsgZm9ybWF0ICh5eXl5LVcjIyksIGZvciBleGFtcGxlOiBgMjAxMy1XMDJgLlxuICAgICpcbiAgICAqIFRoZSBtb2RlbCBtdXN0IGFsd2F5cyBiZSBhIERhdGUgb2JqZWN0LCBvdGhlcndpc2UgQW5ndWxhciB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgICogSW52YWxpZCBgRGF0ZWAgb2JqZWN0cyAoZGF0ZXMgd2hvc2UgYGdldFRpbWUoKWAgaXMgYE5hTmApIHdpbGwgYmUgcmVuZGVyZWQgYXMgYW4gZW1wdHkgc3RyaW5nLlxuICAgICpcbiAgICAqIFRoZSB0aW1lem9uZSB0byBiZSB1c2VkIHRvIHJlYWQvd3JpdGUgdGhlIGBEYXRlYCBpbnN0YW5jZSBpbiB0aGUgbW9kZWwgY2FuIGJlIGRlZmluZWQgdXNpbmdcbiAgICAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdNb2RlbE9wdGlvbnMgbmdNb2RlbE9wdGlvbnN9LiBCeSBkZWZhdWx0LCB0aGlzIGlzIHRoZSB0aW1lem9uZSBvZiB0aGUgYnJvd3Nlci5cbiAgICAqXG4gICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uXG4gICAgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuXG4gICAgKiBAcGFyYW0ge3N0cmluZz19IG1pbiBTZXRzIHRoZSBgbWluYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBsZXNzIHRoYW4gYG1pbmAuIFRoaXMgbXVzdCBiZSBhXG4gICAgKiB2YWxpZCBJU08gd2VlayBmb3JtYXQgKHl5eXktVyMjKS5cbiAgICAqIEBwYXJhbSB7c3RyaW5nPX0gbWF4IFNldHMgdGhlIGBtYXhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIGdyZWF0ZXIgdGhhbiBgbWF4YC4gVGhpcyBtdXN0IGJlXG4gICAgKiBhIHZhbGlkIElTTyB3ZWVrIGZvcm1hdCAoeXl5eS1XIyMpLlxuICAgICogQHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBTZXRzIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBlbnRlcmVkLlxuICAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1JlcXVpcmVkIEFkZHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgYW5kIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBjb25zdHJhaW50IHRvXG4gICAgKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZlxuICAgICogICAgYHJlcXVpcmVkYCB3aGVuIHlvdSB3YW50IHRvIGRhdGEtYmluZCB0byB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUuXG4gICAgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXJcbiAgICAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuXG4gICAgKlxuICAgICogQGV4YW1wbGVcbiAgICA8ZXhhbXBsZSBuYW1lPVwid2Vlay1pbnB1dC1kaXJlY3RpdmVcIiBtb2R1bGU9XCJ3ZWVrRXhhbXBsZVwiPlxuICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICA8c2NyaXB0PlxuICAgICAgYW5ndWxhci5tb2R1bGUoJ3dlZWtFeGFtcGxlJywgW10pXG4gICAgICAgIC5jb250cm9sbGVyKCdEYXRlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XG4gICAgICAgICAgJHNjb3BlLnZhbHVlID0gbmV3IERhdGUoMjAxMywgMCwgMyk7XG4gICAgICAgIH1dKTtcbiAgICAgIDwvc2NyaXB0PlxuICAgICAgPGZvcm0gbmFtZT1cIm15Rm9ybVwiIG5nLWNvbnRyb2xsZXI9XCJEYXRlQ29udHJvbGxlciBhcyBkYXRlQ3RybFwiPlxuICAgICAgICBQaWNrIGEgZGF0ZSBiZXR3ZWVuIGluIDIwMTM6XG4gICAgICAgIDxpbnB1dCBpZD1cImV4YW1wbGVJbnB1dFwiIHR5cGU9XCJ3ZWVrXCIgbmFtZT1cImlucHV0XCIgbmctbW9kZWw9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIllZWVktVyMjXCIgbWluPVwiMjAxMi1XMzJcIiBtYXg9XCIyMDEzLVc1MlwiIHJlcXVpcmVkIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci5yZXF1aXJlZFwiPlxuICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yXCIgbmctc2hvdz1cIm15Rm9ybS5pbnB1dC4kZXJyb3Iud2Vla1wiPlxuICAgICAgICAgICAgTm90IGEgdmFsaWQgZGF0ZSE8L3NwYW4+XG4gICAgICAgIDx0dD52YWx1ZSA9IHt7dmFsdWUgfCBkYXRlOiBcInl5eXktV3d3XCJ9fTwvdHQ+PGJyLz5cbiAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kdmFsaWQgPSB7e215Rm9ybS5pbnB1dC4kdmFsaWR9fTwvdHQ+PGJyLz5cbiAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz5cbiAgICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz5cbiAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IucmVxdWlyZWQgPSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1aXJlZH19PC90dD48YnIvPlxuICAgICAgPC9mb3JtPlxuICAgIDwvZmlsZT5cbiAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gICAgICB2YXIgdmFsdWUgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ3ZhbHVlIHwgZGF0ZTogXCJ5eXl5LVd3d1wiJykpO1xuICAgICAgdmFyIHZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpO1xuICAgICAgdmFyIGlucHV0ID0gZWxlbWVudChieS5tb2RlbCgndmFsdWUnKSk7XG5cbiAgICAgIC8vIGN1cnJlbnRseSBwcm90cmFjdG9yL3dlYmRyaXZlciBkb2VzIG5vdCBzdXBwb3J0XG4gICAgICAvLyBzZW5kaW5nIGtleXMgdG8gYWxsIGtub3duIEhUTUw1IGlucHV0IGNvbnRyb2xzXG4gICAgICAvLyBmb3IgdmFyaW91cyBicm93c2VycyAoaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvcHJvdHJhY3Rvci9pc3N1ZXMvNTYyKS5cbiAgICAgIGZ1bmN0aW9uIHNldElucHV0KHZhbCkge1xuICAgICAgICAvLyBzZXQgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IGFuZCBmb3JjZSB2YWxpZGF0aW9uLlxuICAgICAgICB2YXIgc2NyID0gXCJ2YXIgaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4YW1wbGVJbnB1dCcpOyBcIiArXG4gICAgICAgIFwiaXB0LnZhbHVlID0gJ1wiICsgdmFsICsgXCInO1wiICtcbiAgICAgICAgXCJhbmd1bGFyLmVsZW1lbnQoaXB0KS5zY29wZSgpLiRhcHBseShmdW5jdGlvbihzKSB7IHMubXlGb3JtW2lwdC5uYW1lXS4kc2V0Vmlld1ZhbHVlKCdcIiArIHZhbCArIFwiJyk7IH0pO1wiO1xuICAgICAgICBicm93c2VyLmV4ZWN1dGVTY3JpcHQoc2NyKTtcbiAgICAgIH1cblxuICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvQ29udGFpbignMjAxMy1XMDEnKTtcbiAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdteUZvcm0uaW5wdXQuJHZhbGlkID0gdHJ1ZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkge1xuICAgICAgICBzZXRJbnB1dCgnJyk7XG4gICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvRXF1YWwoJ3ZhbHVlID0nKTtcbiAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdteUZvcm0uaW5wdXQuJHZhbGlkID0gZmFsc2UnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgb3ZlciBtYXgnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgc2V0SW5wdXQoJzIwMTUtVzAxJyk7XG4gICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvQ29udGFpbignJyk7XG4gICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignbXlGb3JtLmlucHV0LiR2YWxpZCA9IGZhbHNlJyk7XG4gICAgICB9KTtcbiAgICA8L2ZpbGU+XG4gICAgPC9leGFtcGxlPlxuICAgICovXG4gICd3ZWVrJzogY3JlYXRlRGF0ZUlucHV0VHlwZSgnd2VlaycsIFdFRUtfUkVHRVhQLCB3ZWVrUGFyc2VyLCAneXl5eS1Xd3cnKSxcblxuICAvKipcbiAgICogQG5nZG9jIGlucHV0XG4gICAqIEBuYW1lIGlucHV0W21vbnRoXVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5wdXQgd2l0aCBtb250aCB2YWxpZGF0aW9uIGFuZCB0cmFuc2Zvcm1hdGlvbi4gSW4gYnJvd3NlcnMgdGhhdCBkbyBub3QgeWV0IHN1cHBvcnRcbiAgICogdGhlIEhUTUw1IG1vbnRoIGlucHV0LCBhIHRleHQgZWxlbWVudCB3aWxsIGJlIHVzZWQuIEluIHRoYXQgY2FzZSwgdGhlIHRleHQgbXVzdCBiZSBlbnRlcmVkIGluIGEgdmFsaWQgSVNPLTg2MDFcbiAgICogbW9udGggZm9ybWF0ICh5eXl5LU1NKSwgZm9yIGV4YW1wbGU6IGAyMDA5LTAxYC5cbiAgICpcbiAgICogVGhlIG1vZGVsIG11c3QgYWx3YXlzIGJlIGEgRGF0ZSBvYmplY3QsIG90aGVyd2lzZSBBbmd1bGFyIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAqIEludmFsaWQgYERhdGVgIG9iamVjdHMgKGRhdGVzIHdob3NlIGBnZXRUaW1lKClgIGlzIGBOYU5gKSB3aWxsIGJlIHJlbmRlcmVkIGFzIGFuIGVtcHR5IHN0cmluZy5cbiAgICogSWYgdGhlIG1vZGVsIGlzIG5vdCBzZXQgdG8gdGhlIGZpcnN0IG9mIHRoZSBtb250aCwgdGhlIG5leHQgdmlldyB0byBtb2RlbCB1cGRhdGUgd2lsbCBzZXQgaXRcbiAgICogdG8gdGhlIGZpcnN0IG9mIHRoZSBtb250aC5cbiAgICpcbiAgICogVGhlIHRpbWV6b25lIHRvIGJlIHVzZWQgdG8gcmVhZC93cml0ZSB0aGUgYERhdGVgIGluc3RhbmNlIGluIHRoZSBtb2RlbCBjYW4gYmUgZGVmaW5lZCB1c2luZ1xuICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nTW9kZWxPcHRpb25zIG5nTW9kZWxPcHRpb25zfS4gQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgdGltZXpvbmUgb2YgdGhlIGJyb3dzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG1pbiBTZXRzIHRoZSBgbWluYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBsZXNzIHRoYW4gYG1pbmAuIFRoaXMgbXVzdCBiZVxuICAgKiBhIHZhbGlkIElTTyBtb250aCBmb3JtYXQgKHl5eXktTU0pLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG1heCBTZXRzIHRoZSBgbWF4YCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBncmVhdGVyIHRoYW4gYG1heGAuIFRoaXMgbXVzdFxuICAgKiBiZSBhIHZhbGlkIElTTyBtb250aCBmb3JtYXQgKHl5eXktTU0pLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0b1xuICAgKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZlxuICAgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyXG4gICAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICA8ZXhhbXBsZSBuYW1lPVwibW9udGgtaW5wdXQtZGlyZWN0aXZlXCIgbW9kdWxlPVwibW9udGhFeGFtcGxlXCI+XG4gICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICA8c2NyaXB0PlxuICAgICAgYW5ndWxhci5tb2R1bGUoJ21vbnRoRXhhbXBsZScsIFtdKVxuICAgICAgICAuY29udHJvbGxlcignRGF0ZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xuICAgICAgICAgICRzY29wZS52YWx1ZSA9IG5ldyBEYXRlKDIwMTMsIDksIDEpO1xuICAgICAgICB9XSk7XG4gICAgIDwvc2NyaXB0PlxuICAgICA8Zm9ybSBuYW1lPVwibXlGb3JtXCIgbmctY29udHJvbGxlcj1cIkRhdGVDb250cm9sbGVyIGFzIGRhdGVDdHJsXCI+XG4gICAgICAgUGljayBhIG1vbnRoIGludCAyMDEzOlxuICAgICAgIDxpbnB1dCBpZD1cImV4YW1wbGVJbnB1dFwiIHR5cGU9XCJtb250aFwiIG5hbWU9XCJpbnB1dFwiIG5nLW1vZGVsPVwidmFsdWVcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwieXl5eS1NTVwiIG1pbj1cIjIwMTMtMDFcIiBtYXg9XCIyMDEzLTEyXCIgcmVxdWlyZWQgLz5cbiAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yXCIgbmctc2hvdz1cIm15Rm9ybS5pbnB1dC4kZXJyb3IucmVxdWlyZWRcIj5cbiAgICAgICAgICBSZXF1aXJlZCE8L3NwYW4+XG4gICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiIG5nLXNob3c9XCJteUZvcm0uaW5wdXQuJGVycm9yLm1vbnRoXCI+XG4gICAgICAgICAgTm90IGEgdmFsaWQgbW9udGghPC9zcGFuPlxuICAgICAgIDx0dD52YWx1ZSA9IHt7dmFsdWUgfCBkYXRlOiBcInl5eXktTU1cIn19PC90dD48YnIvPlxuICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0Pjxici8+XG4gICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz5cbiAgICAgICA8dHQ+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48YnIvPlxuICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyLz5cbiAgICAgPC9mb3JtPlxuICAgPC9maWxlPlxuICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgdmFyIHZhbHVlID0gZWxlbWVudChieS5iaW5kaW5nKCd2YWx1ZSB8IGRhdGU6IFwieXl5eS1NTVwiJykpO1xuICAgICAgdmFyIHZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpO1xuICAgICAgdmFyIGlucHV0ID0gZWxlbWVudChieS5tb2RlbCgndmFsdWUnKSk7XG5cbiAgICAgIC8vIGN1cnJlbnRseSBwcm90cmFjdG9yL3dlYmRyaXZlciBkb2VzIG5vdCBzdXBwb3J0XG4gICAgICAvLyBzZW5kaW5nIGtleXMgdG8gYWxsIGtub3duIEhUTUw1IGlucHV0IGNvbnRyb2xzXG4gICAgICAvLyBmb3IgdmFyaW91cyBicm93c2VycyAoaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvcHJvdHJhY3Rvci9pc3N1ZXMvNTYyKS5cbiAgICAgIGZ1bmN0aW9uIHNldElucHV0KHZhbCkge1xuICAgICAgICAvLyBzZXQgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IGFuZCBmb3JjZSB2YWxpZGF0aW9uLlxuICAgICAgICB2YXIgc2NyID0gXCJ2YXIgaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4YW1wbGVJbnB1dCcpOyBcIiArXG4gICAgICAgIFwiaXB0LnZhbHVlID0gJ1wiICsgdmFsICsgXCInO1wiICtcbiAgICAgICAgXCJhbmd1bGFyLmVsZW1lbnQoaXB0KS5zY29wZSgpLiRhcHBseShmdW5jdGlvbihzKSB7IHMubXlGb3JtW2lwdC5uYW1lXS4kc2V0Vmlld1ZhbHVlKCdcIiArIHZhbCArIFwiJyk7IH0pO1wiO1xuICAgICAgICBicm93c2VyLmV4ZWN1dGVTY3JpcHQoc2NyKTtcbiAgICAgIH1cblxuICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvQ29udGFpbignMjAxMy0xMCcpO1xuICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSB0cnVlJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNldElucHV0KCcnKTtcbiAgICAgICAgZXhwZWN0KHZhbHVlLmdldFRleHQoKSkudG9FcXVhbCgndmFsdWUgPScpO1xuICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSBmYWxzZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBvdmVyIG1heCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICBzZXRJbnB1dCgnMjAxNS0wMScpO1xuICAgICAgICBleHBlY3QodmFsdWUuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJycpO1xuICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSBmYWxzZScpO1xuICAgICAgfSk7XG4gICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG4gICAqL1xuICAnbW9udGgnOiBjcmVhdGVEYXRlSW5wdXRUeXBlKCdtb250aCcsIE1PTlRIX1JFR0VYUCxcbiAgICAgY3JlYXRlRGF0ZVBhcnNlcihNT05USF9SRUdFWFAsIFsneXl5eScsICdNTSddKSxcbiAgICAgJ3l5eXktTU0nKSxcblxuICAvKipcbiAgICogQG5nZG9jIGlucHV0XG4gICAqIEBuYW1lIGlucHV0W251bWJlcl1cbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRleHQgaW5wdXQgd2l0aCBudW1iZXIgdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb24uIFNldHMgdGhlIGBudW1iZXJgIHZhbGlkYXRpb25cbiAgICogZXJyb3IgaWYgbm90IGEgdmFsaWQgbnVtYmVyLlxuICAgKlxuICAgKiBUaGUgbW9kZWwgbXVzdCBhbHdheXMgYmUgYSBudW1iZXIsIG90aGVyd2lzZSBBbmd1bGFyIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG1pbiBTZXRzIHRoZSBgbWluYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBsZXNzIHRoYW4gYG1pbmAuXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbWF4IFNldHMgdGhlIGBtYXhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIGdyZWF0ZXIgdGhhbiBgbWF4YC5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBTZXRzIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBlbnRlcmVkLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSBhbmQgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgdG9cbiAgICogICAgdGhlIGVsZW1lbnQgd2hlbiB0aGUgbmdSZXF1aXJlZCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLiBVc2UgYG5nUmVxdWlyZWRgIGluc3RlYWQgb2ZcbiAgICogICAgYHJlcXVpcmVkYCB3aGVuIHlvdSB3YW50IHRvIGRhdGEtYmluZCB0byB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNaW5sZW5ndGggU2V0cyBgbWlubGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgc2hvcnRlciB0aGFuXG4gICAqICAgIG1pbmxlbmd0aC5cbiAgICogQHBhcmFtIHtudW1iZXI9fSBuZ01heGxlbmd0aCBTZXRzIGBtYXhsZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBsb25nZXIgdGhhblxuICAgKiAgICBtYXhsZW5ndGguXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gcGF0dGVybiBTaW1pbGFyIHRvIGBuZ1BhdHRlcm5gIGV4Y2VwdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgaXMgdGhlIGFjdHVhbCBzdHJpbmdcbiAgICogICAgdGhhdCBjb250YWlucyB0aGUgcmVndWxhciBleHByZXNzaW9uIGJvZHkgdGhhdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvblxuICAgKiAgICBhcyBpbiB0aGUgbmdQYXR0ZXJuIGRpcmVjdGl2ZS5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1BhdHRlcm4gU2V0cyBgcGF0dGVybmAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIG5nTW9kZWwgdmFsdWUgZG9lcyBub3QgbWF0Y2hcbiAgICogICAgYSBSZWdFeHAgZm91bmQgYnkgZXZhbHVhdGluZyB0aGUgQW5ndWxhciBleHByZXNzaW9uIGdpdmVuIGluIHRoZSBhdHRyaWJ1dGUgdmFsdWUuXG4gICAqICAgIElmIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIFJlZ0V4cCBvYmplY3QgdGhlbiB0aGlzIGlzIHVzZWQgZGlyZWN0bHkuXG4gICAqICAgIElmIHRoZSBleHByZXNzaW9uIGlzIGEgc3RyaW5nIHRoZW4gaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBSZWdFeHAgYWZ0ZXIgd3JhcHBpbmcgaXQgaW4gYF5gIGFuZCBgJGBcbiAgICogICAgY2hhcmFjdGVycy4gRm9yIGluc3RhbmNlLCBgXCJhYmNcImAgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYG5ldyBSZWdFeHAoJ15hYmMkJylgLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXJcbiAgICogICAgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICAgIDxleGFtcGxlIG5hbWU9XCJudW1iZXItaW5wdXQtZGlyZWN0aXZlXCIgbW9kdWxlPVwibnVtYmVyRXhhbXBsZVwiPlxuICAgICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgICAgPHNjcmlwdD5cbiAgICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ251bWJlckV4YW1wbGUnLCBbXSlcbiAgICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xuICAgICAgICAgICAgICAgJHNjb3BlLnZhbHVlID0gMTI7XG4gICAgICAgICAgICAgfV0pO1xuICAgICAgICAgPC9zY3JpcHQ+XG4gICAgICAgICA8Zm9ybSBuYW1lPVwibXlGb3JtXCIgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XG4gICAgICAgICAgIE51bWJlcjogPGlucHV0IHR5cGU9XCJudW1iZXJcIiBuYW1lPVwiaW5wdXRcIiBuZy1tb2RlbD1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiIG1heD1cIjk5XCIgcmVxdWlyZWQ+XG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci5yZXF1aXJlZFwiPlxuICAgICAgICAgICAgIFJlcXVpcmVkITwvc3Bhbj5cbiAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiIG5nLXNob3c9XCJteUZvcm0uaW5wdXQuJGVycm9yLm51bWJlclwiPlxuICAgICAgICAgICAgIE5vdCB2YWxpZCBudW1iZXIhPC9zcGFuPlxuICAgICAgICAgICA8dHQ+dmFsdWUgPSB7e3ZhbHVlfX08L3R0Pjxici8+XG4gICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0Pjxici8+XG4gICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJGVycm9yID0ge3tteUZvcm0uaW5wdXQuJGVycm9yfX08L3R0Pjxici8+XG4gICAgICAgICAgIDx0dD5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0uJHZhbGlkfX08L3R0Pjxici8+XG4gICAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyLz5cbiAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvZmlsZT5cbiAgICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQoYnkuYmluZGluZygndmFsdWUnKSk7XG4gICAgICAgICAgdmFyIHZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpO1xuICAgICAgICAgIHZhciBpbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ3ZhbHVlJykpO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBleHBlY3QodmFsdWUuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJzEyJyk7XG4gICAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3RydWUnKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaW5wdXQuY2xlYXIoKTtcbiAgICAgICAgICAgIGlucHV0LnNlbmRLZXlzKCcnKTtcbiAgICAgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvRXF1YWwoJ3ZhbHVlID0nKTtcbiAgICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBvdmVyIG1heCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaW5wdXQuY2xlYXIoKTtcbiAgICAgICAgICAgIGlucHV0LnNlbmRLZXlzKCcxMjMnKTtcbiAgICAgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvRXF1YWwoJ3ZhbHVlID0nKTtcbiAgICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgPC9maWxlPlxuICAgICAgPC9leGFtcGxlPlxuICAgKi9cbiAgJ251bWJlcic6IG51bWJlcklucHV0VHlwZSxcblxuXG4gIC8qKlxuICAgKiBAbmdkb2MgaW5wdXRcbiAgICogQG5hbWUgaW5wdXRbdXJsXVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGV4dCBpbnB1dCB3aXRoIFVSTCB2YWxpZGF0aW9uLiBTZXRzIHRoZSBgdXJsYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgY29udGVudCBpcyBub3QgYVxuICAgKiB2YWxpZCBVUkwuXG4gICAqXG4gICAqIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCI+XG4gICAqICoqTm90ZToqKiBgaW5wdXRbdXJsXWAgdXNlcyBhIHJlZ2V4IHRvIHZhbGlkYXRlIHVybHMgdGhhdCBpcyBkZXJpdmVkIGZyb20gdGhlIHJlZ2V4XG4gICAqIHVzZWQgaW4gQ2hyb21pdW0uIElmIHlvdSBuZWVkIHN0cmljdGVyIHZhbGlkYXRpb24sIHlvdSBjYW4gdXNlIGBuZy1wYXR0ZXJuYCBvciBtb2RpZnlcbiAgICogdGhlIGJ1aWx0LWluIHZhbGlkYXRvcnMgKHNlZSB0aGUge0BsaW5rIGd1aWRlL2Zvcm1zIEZvcm1zIGd1aWRlfSlcbiAgICogPC9kaXY+XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0b1xuICAgKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZlxuICAgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS5cbiAgICogQHBhcmFtIHtudW1iZXI9fSBuZ01pbmxlbmd0aCBTZXRzIGBtaW5sZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBzaG9ydGVyIHRoYW5cbiAgICogICAgbWlubGVuZ3RoLlxuICAgKiBAcGFyYW0ge251bWJlcj19IG5nTWF4bGVuZ3RoIFNldHMgYG1heGxlbmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIGxvbmdlciB0aGFuXG4gICAqICAgIG1heGxlbmd0aC5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSBwYXR0ZXJuIFNpbWlsYXIgdG8gYG5nUGF0dGVybmAgZXhjZXB0IHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpcyB0aGUgYWN0dWFsIHN0cmluZ1xuICAgKiAgICB0aGF0IGNvbnRhaW5zIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gYm9keSB0aGF0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgcmVndWxhciBleHByZXNzaW9uXG4gICAqICAgIGFzIGluIHRoZSBuZ1BhdHRlcm4gZGlyZWN0aXZlLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUGF0dGVybiBTZXRzIGBwYXR0ZXJuYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgbmdNb2RlbCB2YWx1ZSBkb2VzIG5vdCBtYXRjaFxuICAgKiAgICBhIFJlZ0V4cCBmb3VuZCBieSBldmFsdWF0aW5nIHRoZSBBbmd1bGFyIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICogICAgSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgUmVnRXhwIG9iamVjdCB0aGVuIHRoaXMgaXMgdXNlZCBkaXJlY3RseS5cbiAgICogICAgSWYgdGhlIGV4cHJlc3Npb24gaXMgYSBzdHJpbmcgdGhlbiBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIFJlZ0V4cCBhZnRlciB3cmFwcGluZyBpdCBpbiBgXmAgYW5kIGAkYFxuICAgKiAgICBjaGFyYWN0ZXJzLiBGb3IgaW5zdGFuY2UsIGBcImFiY1wiYCB3aWxsIGJlIGNvbnZlcnRlZCB0byBgbmV3IFJlZ0V4cCgnXmFiYyQnKWAuXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNlclxuICAgKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgICAgPGV4YW1wbGUgbmFtZT1cInVybC1pbnB1dC1kaXJlY3RpdmVcIiBtb2R1bGU9XCJ1cmxFeGFtcGxlXCI+XG4gICAgICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgICA8c2NyaXB0PlxuICAgICAgICAgICBhbmd1bGFyLm1vZHVsZSgndXJsRXhhbXBsZScsIFtdKVxuICAgICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XG4gICAgICAgICAgICAgICAkc2NvcGUudGV4dCA9ICdodHRwOi8vZ29vZ2xlLmNvbSc7XG4gICAgICAgICAgICAgfV0pO1xuICAgICAgICAgPC9zY3JpcHQ+XG4gICAgICAgICA8Zm9ybSBuYW1lPVwibXlGb3JtXCIgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XG4gICAgICAgICAgIFVSTDogPGlucHV0IHR5cGU9XCJ1cmxcIiBuYW1lPVwiaW5wdXRcIiBuZy1tb2RlbD1cInRleHRcIiByZXF1aXJlZD5cbiAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiIG5nLXNob3c9XCJteUZvcm0uaW5wdXQuJGVycm9yLnJlcXVpcmVkXCI+XG4gICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPlxuICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yXCIgbmctc2hvdz1cIm15Rm9ybS5pbnB1dC4kZXJyb3IudXJsXCI+XG4gICAgICAgICAgICAgTm90IHZhbGlkIHVybCE8L3NwYW4+XG4gICAgICAgICAgIDx0dD50ZXh0ID0ge3t0ZXh0fX08L3R0Pjxici8+XG4gICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0Pjxici8+XG4gICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJGVycm9yID0ge3tteUZvcm0uaW5wdXQuJGVycm9yfX08L3R0Pjxici8+XG4gICAgICAgICAgIDx0dD5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0uJHZhbGlkfX08L3R0Pjxici8+XG4gICAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyLz5cbiAgICAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IudXJsID0ge3shIW15Rm9ybS4kZXJyb3IudXJsfX08L3R0Pjxici8+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L2ZpbGU+XG4gICAgICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cbiAgICAgICAgICB2YXIgdGV4dCA9IGVsZW1lbnQoYnkuYmluZGluZygndGV4dCcpKTtcbiAgICAgICAgICB2YXIgdmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSk7XG4gICAgICAgICAgdmFyIGlucHV0ID0gZWxlbWVudChieS5tb2RlbCgndGV4dCcpKTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRleHQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2h0dHA6Ly9nb29nbGUuY29tJyk7XG4gICAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3RydWUnKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaW5wdXQuY2xlYXIoKTtcbiAgICAgICAgICAgIGlucHV0LnNlbmRLZXlzKCcnKTtcblxuICAgICAgICAgICAgZXhwZWN0KHRleHQuZ2V0VGV4dCgpKS50b0VxdWFsKCd0ZXh0ID0nKTtcbiAgICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBub3QgdXJsJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpbnB1dC5jbGVhcigpO1xuICAgICAgICAgICAgaW5wdXQuc2VuZEtleXMoJ2JveCcpO1xuXG4gICAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIDwvZmlsZT5cbiAgICAgIDwvZXhhbXBsZT5cbiAgICovXG4gICd1cmwnOiB1cmxJbnB1dFR5cGUsXG5cblxuICAvKipcbiAgICogQG5nZG9jIGlucHV0XG4gICAqIEBuYW1lIGlucHV0W2VtYWlsXVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGV4dCBpbnB1dCB3aXRoIGVtYWlsIHZhbGlkYXRpb24uIFNldHMgdGhlIGBlbWFpbGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgbm90IGEgdmFsaWQgZW1haWxcbiAgICogYWRkcmVzcy5cbiAgICpcbiAgICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIj5cbiAgICogKipOb3RlOioqIGBpbnB1dFtlbWFpbF1gIHVzZXMgYSByZWdleCB0byB2YWxpZGF0ZSBlbWFpbCBhZGRyZXNzZXMgdGhhdCBpcyBkZXJpdmVkIGZyb20gdGhlIHJlZ2V4XG4gICAqIHVzZWQgaW4gQ2hyb21pdW0uIElmIHlvdSBuZWVkIHN0cmljdGVyIHZhbGlkYXRpb24gKGUuZy4gcmVxdWlyaW5nIGEgdG9wLWxldmVsIGRvbWFpbiksIHlvdSBjYW5cbiAgICogdXNlIGBuZy1wYXR0ZXJuYCBvciBtb2RpZnkgdGhlIGJ1aWx0LWluIHZhbGlkYXRvcnMgKHNlZSB0aGUge0BsaW5rIGd1aWRlL2Zvcm1zIEZvcm1zIGd1aWRlfSlcbiAgICogPC9kaXY+XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0b1xuICAgKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZlxuICAgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS5cbiAgICogQHBhcmFtIHtudW1iZXI9fSBuZ01pbmxlbmd0aCBTZXRzIGBtaW5sZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBzaG9ydGVyIHRoYW5cbiAgICogICAgbWlubGVuZ3RoLlxuICAgKiBAcGFyYW0ge251bWJlcj19IG5nTWF4bGVuZ3RoIFNldHMgYG1heGxlbmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIGxvbmdlciB0aGFuXG4gICAqICAgIG1heGxlbmd0aC5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSBwYXR0ZXJuIFNpbWlsYXIgdG8gYG5nUGF0dGVybmAgZXhjZXB0IHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpcyB0aGUgYWN0dWFsIHN0cmluZ1xuICAgKiAgICB0aGF0IGNvbnRhaW5zIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gYm9keSB0aGF0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgcmVndWxhciBleHByZXNzaW9uXG4gICAqICAgIGFzIGluIHRoZSBuZ1BhdHRlcm4gZGlyZWN0aXZlLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUGF0dGVybiBTZXRzIGBwYXR0ZXJuYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgbmdNb2RlbCB2YWx1ZSBkb2VzIG5vdCBtYXRjaFxuICAgKiAgICBhIFJlZ0V4cCBmb3VuZCBieSBldmFsdWF0aW5nIHRoZSBBbmd1bGFyIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICogICAgSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgUmVnRXhwIG9iamVjdCB0aGVuIHRoaXMgaXMgdXNlZCBkaXJlY3RseS5cbiAgICogICAgSWYgdGhlIGV4cHJlc3Npb24gaXMgYSBzdHJpbmcgdGhlbiBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIFJlZ0V4cCBhZnRlciB3cmFwcGluZyBpdCBpbiBgXmAgYW5kIGAkYFxuICAgKiAgICBjaGFyYWN0ZXJzLiBGb3IgaW5zdGFuY2UsIGBcImFiY1wiYCB3aWxsIGJlIGNvbnZlcnRlZCB0byBgbmV3IFJlZ0V4cCgnXmFiYyQnKWAuXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNlclxuICAgKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgICAgPGV4YW1wbGUgbmFtZT1cImVtYWlsLWlucHV0LWRpcmVjdGl2ZVwiIG1vZHVsZT1cImVtYWlsRXhhbXBsZVwiPlxuICAgICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgICAgPHNjcmlwdD5cbiAgICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ2VtYWlsRXhhbXBsZScsIFtdKVxuICAgICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XG4gICAgICAgICAgICAgICAkc2NvcGUudGV4dCA9ICdtZUBleGFtcGxlLmNvbSc7XG4gICAgICAgICAgICAgfV0pO1xuICAgICAgICAgPC9zY3JpcHQ+XG4gICAgICAgICAgIDxmb3JtIG5hbWU9XCJteUZvcm1cIiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cbiAgICAgICAgICAgICBFbWFpbDogPGlucHV0IHR5cGU9XCJlbWFpbFwiIG5hbWU9XCJpbnB1dFwiIG5nLW1vZGVsPVwidGV4dFwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci5yZXF1aXJlZFwiPlxuICAgICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPlxuICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci5lbWFpbFwiPlxuICAgICAgICAgICAgICAgTm90IHZhbGlkIGVtYWlsITwvc3Bhbj5cbiAgICAgICAgICAgICA8dHQ+dGV4dCA9IHt7dGV4dH19PC90dD48YnIvPlxuICAgICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0Pjxici8+XG4gICAgICAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz5cbiAgICAgICAgICAgICA8dHQ+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48YnIvPlxuICAgICAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyLz5cbiAgICAgICAgICAgICA8dHQ+bXlGb3JtLiRlcnJvci5lbWFpbCA9IHt7ISFteUZvcm0uJGVycm9yLmVtYWlsfX08L3R0Pjxici8+XG4gICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgIDwvZmlsZT5cbiAgICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgICAgIHZhciB0ZXh0ID0gZWxlbWVudChieS5iaW5kaW5nKCd0ZXh0JykpO1xuICAgICAgICAgIHZhciB2YWxpZCA9IGVsZW1lbnQoYnkuYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKTtcbiAgICAgICAgICB2YXIgaW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCd0ZXh0JykpO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBleHBlY3QodGV4dC5nZXRUZXh0KCkpLnRvQ29udGFpbignbWVAZXhhbXBsZS5jb20nKTtcbiAgICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbigndHJ1ZScpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpbnB1dC5jbGVhcigpO1xuICAgICAgICAgICAgaW5wdXQuc2VuZEtleXMoJycpO1xuICAgICAgICAgICAgZXhwZWN0KHRleHQuZ2V0VGV4dCgpKS50b0VxdWFsKCd0ZXh0ID0nKTtcbiAgICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBub3QgZW1haWwnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlucHV0LmNsZWFyKCk7XG4gICAgICAgICAgICBpbnB1dC5zZW5kS2V5cygneHh4Jyk7XG5cbiAgICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgPC9maWxlPlxuICAgICAgPC9leGFtcGxlPlxuICAgKi9cbiAgJ2VtYWlsJzogZW1haWxJbnB1dFR5cGUsXG5cblxuICAvKipcbiAgICogQG5nZG9jIGlucHV0XG4gICAqIEBuYW1lIGlucHV0W3JhZGlvXVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSFRNTCByYWRpbyBidXR0b24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFRoZSB2YWx1ZSB0byB3aGljaCB0aGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgc2V0IHdoZW4gc2VsZWN0ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyXG4gICAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZ1ZhbHVlIEFuZ3VsYXIgZXhwcmVzc2lvbiB3aGljaCBzZXRzIHRoZSB2YWx1ZSB0byB3aGljaCB0aGUgZXhwcmVzc2lvbiBzaG91bGRcbiAgICogICAgYmUgc2V0IHdoZW4gc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAgICA8ZXhhbXBsZSBuYW1lPVwicmFkaW8taW5wdXQtZGlyZWN0aXZlXCIgbW9kdWxlPVwicmFkaW9FeGFtcGxlXCI+XG4gICAgICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgICA8c2NyaXB0PlxuICAgICAgICAgICBhbmd1bGFyLm1vZHVsZSgncmFkaW9FeGFtcGxlJywgW10pXG4gICAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcbiAgICAgICAgICAgICAgICRzY29wZS5jb2xvciA9ICdibHVlJztcbiAgICAgICAgICAgICAgICRzY29wZS5zcGVjaWFsVmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgIFwiaWRcIjogXCIxMjM0NVwiLFxuICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IFwiZ3JlZW5cIlxuICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICB9XSk7XG4gICAgICAgICA8L3NjcmlwdD5cbiAgICAgICAgIDxmb3JtIG5hbWU9XCJteUZvcm1cIiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cbiAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5nLW1vZGVsPVwiY29sb3JcIiB2YWx1ZT1cInJlZFwiPiAgUmVkIDxici8+XG4gICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuZy1tb2RlbD1cImNvbG9yXCIgbmctdmFsdWU9XCJzcGVjaWFsVmFsdWVcIj4gR3JlZW4gPGJyLz5cbiAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5nLW1vZGVsPVwiY29sb3JcIiB2YWx1ZT1cImJsdWVcIj4gQmx1ZSA8YnIvPlxuICAgICAgICAgICA8dHQ+Y29sb3IgPSB7e2NvbG9yIHwganNvbn19PC90dD48YnIvPlxuICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICBOb3RlIHRoYXQgYG5nLXZhbHVlPVwic3BlY2lhbFZhbHVlXCJgIHNldHMgcmFkaW8gaXRlbSdzIHZhbHVlIHRvIGJlIHRoZSB2YWx1ZSBvZiBgJHNjb3BlLnNwZWNpYWxWYWx1ZWAuXG4gICAgICAgIDwvZmlsZT5cbiAgICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgICAgIGl0KCdzaG91bGQgY2hhbmdlIHN0YXRlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgY29sb3IgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ2NvbG9yJykpO1xuXG4gICAgICAgICAgICBleHBlY3QoY29sb3IuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2JsdWUnKTtcblxuICAgICAgICAgICAgZWxlbWVudC5hbGwoYnkubW9kZWwoJ2NvbG9yJykpLmdldCgwKS5jbGljaygpO1xuXG4gICAgICAgICAgICBleHBlY3QoY29sb3IuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3JlZCcpO1xuICAgICAgICAgIH0pO1xuICAgICAgICA8L2ZpbGU+XG4gICAgICA8L2V4YW1wbGU+XG4gICAqL1xuICAncmFkaW8nOiByYWRpb0lucHV0VHlwZSxcblxuXG4gIC8qKlxuICAgKiBAbmdkb2MgaW5wdXRcbiAgICogQG5hbWUgaW5wdXRbY2hlY2tib3hdXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBIVE1MIGNoZWNrYm94LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC5cbiAgICogQHBhcmFtIHtleHByZXNzaW9uPX0gbmdUcnVlVmFsdWUgVGhlIHZhbHVlIHRvIHdoaWNoIHRoZSBleHByZXNzaW9uIHNob3VsZCBiZSBzZXQgd2hlbiBzZWxlY3RlZC5cbiAgICogQHBhcmFtIHtleHByZXNzaW9uPX0gbmdGYWxzZVZhbHVlIFRoZSB2YWx1ZSB0byB3aGljaCB0aGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgc2V0IHdoZW4gbm90IHNlbGVjdGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXJcbiAgICogICAgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICAgIDxleGFtcGxlIG5hbWU9XCJjaGVja2JveC1pbnB1dC1kaXJlY3RpdmVcIiBtb2R1bGU9XCJjaGVja2JveEV4YW1wbGVcIj5cbiAgICAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdjaGVja2JveEV4YW1wbGUnLCBbXSlcbiAgICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xuICAgICAgICAgICAgICAgJHNjb3BlLnZhbHVlMSA9IHRydWU7XG4gICAgICAgICAgICAgICAkc2NvcGUudmFsdWUyID0gJ1lFUydcbiAgICAgICAgICAgICB9XSk7XG4gICAgICAgICA8L3NjcmlwdD5cbiAgICAgICAgIDxmb3JtIG5hbWU9XCJteUZvcm1cIiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cbiAgICAgICAgICAgVmFsdWUxOiA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmctbW9kZWw9XCJ2YWx1ZTFcIj4gPGJyLz5cbiAgICAgICAgICAgVmFsdWUyOiA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmctbW9kZWw9XCJ2YWx1ZTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBuZy10cnVlLXZhbHVlPVwiJ1lFUydcIiBuZy1mYWxzZS12YWx1ZT1cIidOTydcIj4gPGJyLz5cbiAgICAgICAgICAgPHR0PnZhbHVlMSA9IHt7dmFsdWUxfX08L3R0Pjxici8+XG4gICAgICAgICAgIDx0dD52YWx1ZTIgPSB7e3ZhbHVlMn19PC90dD48YnIvPlxuICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgPC9maWxlPlxuICAgICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gICAgICAgICAgaXQoJ3Nob3VsZCBjaGFuZ2Ugc3RhdGUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZTEgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ3ZhbHVlMScpKTtcbiAgICAgICAgICAgIHZhciB2YWx1ZTIgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ3ZhbHVlMicpKTtcblxuICAgICAgICAgICAgZXhwZWN0KHZhbHVlMS5nZXRUZXh0KCkpLnRvQ29udGFpbigndHJ1ZScpO1xuICAgICAgICAgICAgZXhwZWN0KHZhbHVlMi5nZXRUZXh0KCkpLnRvQ29udGFpbignWUVTJyk7XG5cbiAgICAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3ZhbHVlMScpKS5jbGljaygpO1xuICAgICAgICAgICAgZWxlbWVudChieS5tb2RlbCgndmFsdWUyJykpLmNsaWNrKCk7XG5cbiAgICAgICAgICAgIGV4cGVjdCh2YWx1ZTEuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7XG4gICAgICAgICAgICBleHBlY3QodmFsdWUyLmdldFRleHQoKSkudG9Db250YWluKCdOTycpO1xuICAgICAgICAgIH0pO1xuICAgICAgICA8L2ZpbGU+XG4gICAgICA8L2V4YW1wbGU+XG4gICAqL1xuICAnY2hlY2tib3gnOiBjaGVja2JveElucHV0VHlwZSxcblxuICAnaGlkZGVuJzogbm9vcCxcbiAgJ2J1dHRvbic6IG5vb3AsXG4gICdzdWJtaXQnOiBub29wLFxuICAncmVzZXQnOiBub29wLFxuICAnZmlsZSc6IG5vb3Bcbn07XG5cbmZ1bmN0aW9uIHN0cmluZ0Jhc2VkSW5wdXRUeXBlKGN0cmwpIHtcbiAgY3RybC4kZm9ybWF0dGVycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGN0cmwuJGlzRW1wdHkodmFsdWUpID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdGV4dElucHV0VHlwZShzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCwgJHNuaWZmZXIsICRicm93c2VyKSB7XG4gIGJhc2VJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3Nlcik7XG4gIHN0cmluZ0Jhc2VkSW5wdXRUeXBlKGN0cmwpO1xufVxuXG5mdW5jdGlvbiBiYXNlSW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpIHtcbiAgdmFyIHBsYWNlaG9sZGVyID0gZWxlbWVudFswXS5wbGFjZWhvbGRlciwgbm9ldmVudCA9IHt9O1xuICB2YXIgdHlwZSA9IGxvd2VyY2FzZShlbGVtZW50WzBdLnR5cGUpO1xuXG4gIC8vIEluIGNvbXBvc2l0aW9uIG1vZGUsIHVzZXJzIGFyZSBzdGlsbCBpbnB1dGluZyBpbnRlcm1lZGlhdGUgdGV4dCBidWZmZXIsXG4gIC8vIGhvbGQgdGhlIGxpc3RlbmVyIHVudGlsIGNvbXBvc2l0aW9uIGlzIGRvbmUuXG4gIC8vIE1vcmUgYWJvdXQgY29tcG9zaXRpb24gZXZlbnRzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ29tcG9zaXRpb25FdmVudFxuICBpZiAoISRzbmlmZmVyLmFuZHJvaWQpIHtcbiAgICB2YXIgY29tcG9zaW5nID0gZmFsc2U7XG5cbiAgICBlbGVtZW50Lm9uKCdjb21wb3NpdGlvbnN0YXJ0JywgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgY29tcG9zaW5nID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGVsZW1lbnQub24oJ2NvbXBvc2l0aW9uZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICBjb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbihldikge1xuICAgIGlmIChjb21wb3NpbmcpIHJldHVybjtcbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbCgpLFxuICAgICAgICBldmVudCA9IGV2ICYmIGV2LnR5cGU7XG5cbiAgICAvLyBJRSAoMTEgYW5kIHVuZGVyKSBzZWVtIHRvIGVtaXQgYW4gJ2lucHV0JyBldmVudCBpZiB0aGUgcGxhY2Vob2xkZXIgdmFsdWUgY2hhbmdlcy5cbiAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRpcnR5IHRoZSB2YWx1ZSB3aGVuIHRoaXMgaGFwcGVucywgc28gd2UgYWJvcnQgaGVyZS4gVW5mb3J0dW5hdGVseSxcbiAgICAvLyBJRSBhbHNvIHNlbmRzIGlucHV0IGV2ZW50cyBmb3Igb3RoZXIgbm9uLWlucHV0LXJlbGF0ZWQgdGhpbmdzLCAoc3VjaCBhcyBmb2N1c2luZyBvbiBhXG4gICAgLy8gZm9ybSBjb250cm9sKSwgc28gdGhpcyBjaGFuZ2UgaXMgbm90IGVudGlyZWx5IGVub3VnaCB0byBzb2x2ZSB0aGlzLlxuICAgIGlmIChtc2llICYmIChldiB8fCBub2V2ZW50KS50eXBlID09PSAnaW5wdXQnICYmIGVsZW1lbnRbMF0ucGxhY2Vob2xkZXIgIT09IHBsYWNlaG9sZGVyKSB7XG4gICAgICBwbGFjZWhvbGRlciA9IGVsZW1lbnRbMF0ucGxhY2Vob2xkZXI7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQnkgZGVmYXVsdCB3ZSB3aWxsIHRyaW0gdGhlIHZhbHVlXG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZSBuZy10cmltIGV4aXN0cyB3ZSB3aWxsIGF2b2lkIHRyaW1taW5nXG4gICAgLy8gSWYgaW5wdXQgdHlwZSBpcyAncGFzc3dvcmQnLCB0aGUgdmFsdWUgaXMgbmV2ZXIgdHJpbW1lZFxuICAgIGlmICh0eXBlICE9PSAncGFzc3dvcmQnICYmICghYXR0ci5uZ1RyaW0gfHwgYXR0ci5uZ1RyaW0gIT09ICdmYWxzZScpKSB7XG4gICAgICB2YWx1ZSA9IHRyaW0odmFsdWUpO1xuICAgIH1cblxuICAgIC8vIElmIGEgY29udHJvbCBpcyBzdWZmZXJpbmcgZnJvbSBiYWQgaW5wdXQgKGR1ZSB0byBuYXRpdmUgdmFsaWRhdG9ycyksIGJyb3dzZXJzIGRpc2NhcmQgaXRzXG4gICAgLy8gdmFsdWUsIHNvIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gcmV2YWxpZGF0ZSAoYnkgY2FsbGluZyAkc2V0Vmlld1ZhbHVlIGFnYWluKSBldmVuIGlmIHRoZVxuICAgIC8vIGNvbnRyb2wncyB2YWx1ZSBpcyB0aGUgc2FtZSBlbXB0eSB2YWx1ZSB0d2ljZSBpbiBhIHJvdy5cbiAgICBpZiAoY3RybC4kdmlld1ZhbHVlICE9PSB2YWx1ZSB8fCAodmFsdWUgPT09ICcnICYmIGN0cmwuJCRoYXNOYXRpdmVWYWxpZGF0b3JzKSkge1xuICAgICAgY3RybC4kc2V0Vmlld1ZhbHVlKHZhbHVlLCBldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGlmIHRoZSBicm93c2VyIGRvZXMgc3VwcG9ydCBcImlucHV0XCIgZXZlbnQsIHdlIGFyZSBmaW5lIC0gZXhjZXB0IG9uIElFOSB3aGljaCBkb2Vzbid0IGZpcmUgdGhlXG4gIC8vIGlucHV0IGV2ZW50IG9uIGJhY2tzcGFjZSwgZGVsZXRlIG9yIGN1dFxuICBpZiAoJHNuaWZmZXIuaGFzRXZlbnQoJ2lucHV0JykpIHtcbiAgICBlbGVtZW50Lm9uKCdpbnB1dCcsIGxpc3RlbmVyKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdGltZW91dDtcblxuICAgIHZhciBkZWZlckxpc3RlbmVyID0gZnVuY3Rpb24oZXYpIHtcbiAgICAgIGlmICghdGltZW91dCkge1xuICAgICAgICB0aW1lb3V0ID0gJGJyb3dzZXIuZGVmZXIoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbGlzdGVuZXIoZXYpO1xuICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZWxlbWVudC5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZTtcblxuICAgICAgLy8gaWdub3JlXG4gICAgICAvLyAgICBjb21tYW5kICAgICAgICAgICAgbW9kaWZpZXJzICAgICAgICAgICAgICAgICAgIGFycm93c1xuICAgICAgaWYgKGtleSA9PT0gOTEgfHwgKDE1IDwga2V5ICYmIGtleSA8IDE5KSB8fCAoMzcgPD0ga2V5ICYmIGtleSA8PSA0MCkpIHJldHVybjtcblxuICAgICAgZGVmZXJMaXN0ZW5lcihldmVudCk7XG4gICAgfSk7XG5cbiAgICAvLyBpZiB1c2VyIG1vZGlmaWVzIGlucHV0IHZhbHVlIHVzaW5nIGNvbnRleHQgbWVudSBpbiBJRSwgd2UgbmVlZCBcInBhc3RlXCIgYW5kIFwiY3V0XCIgZXZlbnRzIHRvIGNhdGNoIGl0XG4gICAgaWYgKCRzbmlmZmVyLmhhc0V2ZW50KCdwYXN0ZScpKSB7XG4gICAgICBlbGVtZW50Lm9uKCdwYXN0ZSBjdXQnLCBkZWZlckxpc3RlbmVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB1c2VyIHBhc3RlIGludG8gaW5wdXQgdXNpbmcgbW91c2Ugb24gb2xkZXIgYnJvd3NlclxuICAvLyBvciBmb3JtIGF1dG9jb21wbGV0ZSBvbiBuZXdlciBicm93c2VyLCB3ZSBuZWVkIFwiY2hhbmdlXCIgZXZlbnQgdG8gY2F0Y2ggaXRcbiAgZWxlbWVudC5vbignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gIGN0cmwuJHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICAgIGVsZW1lbnQudmFsKGN0cmwuJGlzRW1wdHkoY3RybC4kbW9kZWxWYWx1ZSkgPyAnJyA6IGN0cmwuJHZpZXdWYWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHdlZWtQYXJzZXIoaXNvV2VlaywgZXhpc3RpbmdEYXRlKSB7XG4gIGlmIChpc0RhdGUoaXNvV2VlaykpIHtcbiAgICByZXR1cm4gaXNvV2VlaztcbiAgfVxuXG4gIGlmIChpc1N0cmluZyhpc29XZWVrKSkge1xuICAgIFdFRUtfUkVHRVhQLmxhc3RJbmRleCA9IDA7XG4gICAgdmFyIHBhcnRzID0gV0VFS19SRUdFWFAuZXhlYyhpc29XZWVrKTtcbiAgICBpZiAocGFydHMpIHtcbiAgICAgIHZhciB5ZWFyID0gK3BhcnRzWzFdLFxuICAgICAgICAgIHdlZWsgPSArcGFydHNbMl0sXG4gICAgICAgICAgaG91cnMgPSAwLFxuICAgICAgICAgIG1pbnV0ZXMgPSAwLFxuICAgICAgICAgIHNlY29uZHMgPSAwLFxuICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IDAsXG4gICAgICAgICAgZmlyc3RUaHVycyA9IGdldEZpcnN0VGh1cnNkYXlPZlllYXIoeWVhciksXG4gICAgICAgICAgYWRkRGF5cyA9ICh3ZWVrIC0gMSkgKiA3O1xuXG4gICAgICBpZiAoZXhpc3RpbmdEYXRlKSB7XG4gICAgICAgIGhvdXJzID0gZXhpc3RpbmdEYXRlLmdldEhvdXJzKCk7XG4gICAgICAgIG1pbnV0ZXMgPSBleGlzdGluZ0RhdGUuZ2V0TWludXRlcygpO1xuICAgICAgICBzZWNvbmRzID0gZXhpc3RpbmdEYXRlLmdldFNlY29uZHMoKTtcbiAgICAgICAgbWlsbGlzZWNvbmRzID0gZXhpc3RpbmdEYXRlLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgMCwgZmlyc3RUaHVycy5nZXREYXRlKCkgKyBhZGREYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTmFOO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEYXRlUGFyc2VyKHJlZ2V4cCwgbWFwcGluZykge1xuICByZXR1cm4gZnVuY3Rpb24oaXNvLCBkYXRlKSB7XG4gICAgdmFyIHBhcnRzLCBtYXA7XG5cbiAgICBpZiAoaXNEYXRlKGlzbykpIHtcbiAgICAgIHJldHVybiBpc287XG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGlzbykpIHtcbiAgICAgIC8vIFdoZW4gYSBkYXRlIGlzIEpTT04naWZpZWQgdG8gd3JhcHMgaXRzZWxmIGluc2lkZSBvZiBhbiBleHRyYVxuICAgICAgLy8gc2V0IG9mIGRvdWJsZSBxdW90ZXMuIFRoaXMgbWFrZXMgdGhlIGRhdGUgcGFyc2luZyBjb2RlIHVuYWJsZVxuICAgICAgLy8gdG8gbWF0Y2ggdGhlIGRhdGUgc3RyaW5nIGFuZCBwYXJzZSBpdCBhcyBhIGRhdGUuXG4gICAgICBpZiAoaXNvLmNoYXJBdCgwKSA9PSAnXCInICYmIGlzby5jaGFyQXQoaXNvLmxlbmd0aCAtIDEpID09ICdcIicpIHtcbiAgICAgICAgaXNvID0gaXNvLnN1YnN0cmluZygxLCBpc28ubGVuZ3RoIC0gMSk7XG4gICAgICB9XG4gICAgICBpZiAoSVNPX0RBVEVfUkVHRVhQLnRlc3QoaXNvKSkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoaXNvKTtcbiAgICAgIH1cbiAgICAgIHJlZ2V4cC5sYXN0SW5kZXggPSAwO1xuICAgICAgcGFydHMgPSByZWdleHAuZXhlYyhpc28pO1xuXG4gICAgICBpZiAocGFydHMpIHtcbiAgICAgICAgcGFydHMuc2hpZnQoKTtcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICBtYXAgPSB7XG4gICAgICAgICAgICB5eXl5OiBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICBNTTogZGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgIGRkOiBkYXRlLmdldERhdGUoKSxcbiAgICAgICAgICAgIEhIOiBkYXRlLmdldEhvdXJzKCksXG4gICAgICAgICAgICBtbTogZGF0ZS5nZXRNaW51dGVzKCksXG4gICAgICAgICAgICBzczogZGF0ZS5nZXRTZWNvbmRzKCksXG4gICAgICAgICAgICBzc3M6IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLyAxMDAwXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYXAgPSB7IHl5eXk6IDE5NzAsIE1NOiAxLCBkZDogMSwgSEg6IDAsIG1tOiAwLCBzczogMCwgc3NzOiAwIH07XG4gICAgICAgIH1cblxuICAgICAgICBmb3JFYWNoKHBhcnRzLCBmdW5jdGlvbihwYXJ0LCBpbmRleCkge1xuICAgICAgICAgIGlmIChpbmRleCA8IG1hcHBpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICBtYXBbbWFwcGluZ1tpbmRleF1dID0gK3BhcnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG1hcC55eXl5LCBtYXAuTU0gLSAxLCBtYXAuZGQsIG1hcC5ISCwgbWFwLm1tLCBtYXAuc3MgfHwgMCwgbWFwLnNzcyAqIDEwMDAgfHwgMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIE5hTjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGF0ZUlucHV0VHlwZSh0eXBlLCByZWdleHAsIHBhcnNlRGF0ZSwgZm9ybWF0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBkeW5hbWljRGF0ZUlucHV0VHlwZShzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCwgJHNuaWZmZXIsICRicm93c2VyLCAkZmlsdGVyKSB7XG4gICAgYmFkSW5wdXRDaGVja2VyKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsKTtcbiAgICBiYXNlSW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpO1xuICAgIHZhciB0aW1lem9uZSA9IGN0cmwgJiYgY3RybC4kb3B0aW9ucyAmJiBjdHJsLiRvcHRpb25zLnRpbWV6b25lO1xuICAgIHZhciBwcmV2aW91c0RhdGU7XG5cbiAgICBjdHJsLiQkcGFyc2VyTmFtZSA9IHR5cGU7XG4gICAgY3RybC4kcGFyc2Vycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICBpZiAoY3RybC4kaXNFbXB0eSh2YWx1ZSkpIHJldHVybiBudWxsO1xuICAgICAgaWYgKHJlZ2V4cC50ZXN0KHZhbHVlKSkge1xuICAgICAgICAvLyBOb3RlOiBXZSBjYW5ub3QgcmVhZCBjdHJsLiRtb2RlbFZhbHVlLCBhcyB0aGVyZSBtaWdodCBiZSBhIGRpZmZlcmVudFxuICAgICAgICAvLyBwYXJzZXIvZm9ybWF0dGVyIGluIHRoZSBwcm9jZXNzaW5nIGNoYWluIHNvIHRoYXQgdGhlIG1vZGVsXG4gICAgICAgIC8vIGNvbnRhaW5zIHNvbWUgZGlmZmVyZW50IGRhdGEgZm9ybWF0IVxuICAgICAgICB2YXIgcGFyc2VkRGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSwgcHJldmlvdXNEYXRlKTtcbiAgICAgICAgaWYgKHRpbWV6b25lID09PSAnVVRDJykge1xuICAgICAgICAgIHBhcnNlZERhdGUuc2V0TWludXRlcyhwYXJzZWREYXRlLmdldE1pbnV0ZXMoKSAtIHBhcnNlZERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlZERhdGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0pO1xuXG4gICAgY3RybC4kZm9ybWF0dGVycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICBpZiAoIWN0cmwuJGlzRW1wdHkodmFsdWUpKSB7XG4gICAgICAgIGlmICghaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICAgIHRocm93ICRuZ01vZGVsTWluRXJyKCdkYXRlZm10JywgJ0V4cGVjdGVkIGB7MH1gIHRvIGJlIGEgZGF0ZScsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91c0RhdGUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHByZXZpb3VzRGF0ZSAmJiB0aW1lem9uZSA9PT0gJ1VUQycpIHtcbiAgICAgICAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSA2MDAwMCAqIHByZXZpb3VzRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgICAgICAgIHByZXZpb3VzRGF0ZSA9IG5ldyBEYXRlKHByZXZpb3VzRGF0ZS5nZXRUaW1lKCkgKyB0aW1lem9uZU9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICRmaWx0ZXIoJ2RhdGUnKSh2YWx1ZSwgZm9ybWF0LCB0aW1lem9uZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmV2aW91c0RhdGUgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xuXG4gICAgaWYgKGlzRGVmaW5lZChhdHRyLm1pbikgfHwgYXR0ci5uZ01pbikge1xuICAgICAgdmFyIG1pblZhbDtcbiAgICAgIGN0cmwuJHZhbGlkYXRvcnMubWluID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGN0cmwuJGlzRW1wdHkodmFsdWUpIHx8IGlzVW5kZWZpbmVkKG1pblZhbCkgfHwgcGFyc2VEYXRlKHZhbHVlKSA+PSBtaW5WYWw7XG4gICAgICB9O1xuICAgICAgYXR0ci4kb2JzZXJ2ZSgnbWluJywgZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIG1pblZhbCA9IHBhcnNlT2JzZXJ2ZWREYXRlVmFsdWUodmFsKTtcbiAgICAgICAgY3RybC4kdmFsaWRhdGUoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc0RlZmluZWQoYXR0ci5tYXgpIHx8IGF0dHIubmdNYXgpIHtcbiAgICAgIHZhciBtYXhWYWw7XG4gICAgICBjdHJsLiR2YWxpZGF0b3JzLm1heCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjdHJsLiRpc0VtcHR5KHZhbHVlKSB8fCBpc1VuZGVmaW5lZChtYXhWYWwpIHx8IHBhcnNlRGF0ZSh2YWx1ZSkgPD0gbWF4VmFsO1xuICAgICAgfTtcbiAgICAgIGF0dHIuJG9ic2VydmUoJ21heCcsIGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICBtYXhWYWwgPSBwYXJzZU9ic2VydmVkRGF0ZVZhbHVlKHZhbCk7XG4gICAgICAgIGN0cmwuJHZhbGlkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gT3ZlcnJpZGUgdGhlIHN0YW5kYXJkICRpc0VtcHR5IHRvIGRldGVjdCBpbnZhbGlkIGRhdGVzIGFzIHdlbGxcbiAgICBjdHJsLiRpc0VtcHR5ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIC8vIEludmFsaWQgRGF0ZTogZ2V0VGltZSgpIHJldHVybnMgTmFOXG4gICAgICByZXR1cm4gIXZhbHVlIHx8ICh2YWx1ZS5nZXRUaW1lICYmIHZhbHVlLmdldFRpbWUoKSAhPT0gdmFsdWUuZ2V0VGltZSgpKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcGFyc2VPYnNlcnZlZERhdGVWYWx1ZSh2YWwpIHtcbiAgICAgIHJldHVybiBpc0RlZmluZWQodmFsKSA/IChpc0RhdGUodmFsKSA/IHZhbCA6IHBhcnNlRGF0ZSh2YWwpKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGJhZElucHV0Q2hlY2tlcihzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCkge1xuICB2YXIgbm9kZSA9IGVsZW1lbnRbMF07XG4gIHZhciBuYXRpdmVWYWxpZGF0aW9uID0gY3RybC4kJGhhc05hdGl2ZVZhbGlkYXRvcnMgPSBpc09iamVjdChub2RlLnZhbGlkaXR5KTtcbiAgaWYgKG5hdGl2ZVZhbGlkYXRpb24pIHtcbiAgICBjdHJsLiRwYXJzZXJzLnB1c2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciB2YWxpZGl0eSA9IGVsZW1lbnQucHJvcChWQUxJRElUWV9TVEFURV9QUk9QRVJUWSkgfHwge307XG4gICAgICAvLyBEZXRlY3QgYnVnIGluIEZGMzUgZm9yIGlucHV0W2VtYWlsXSAoaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NDQzMCk6XG4gICAgICAvLyAtIGFsc28gc2V0cyB2YWxpZGl0eS5iYWRJbnB1dCAoc2hvdWxkIG9ubHkgYmUgdmFsaWRpdHkudHlwZU1pc21hdGNoKS5cbiAgICAgIC8vIC0gc2VlIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjZS1tYWlsLXN0YXRlLSh0eXBlPWVtYWlsKVxuICAgICAgLy8gLSBjYW4gaWdub3JlIHRoaXMgY2FzZSBhcyB3ZSBjYW4gc3RpbGwgcmVhZCBvdXQgdGhlIGVycm9uZW91cyBlbWFpbC4uLlxuICAgICAgcmV0dXJuIHZhbGlkaXR5LmJhZElucHV0ICYmICF2YWxpZGl0eS50eXBlTWlzbWF0Y2ggPyB1bmRlZmluZWQgOiB2YWx1ZTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBudW1iZXJJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3Nlcikge1xuICBiYWRJbnB1dENoZWNrZXIoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwpO1xuICBiYXNlSW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpO1xuXG4gIGN0cmwuJCRwYXJzZXJOYW1lID0gJ251bWJlcic7XG4gIGN0cmwuJHBhcnNlcnMucHVzaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIGlmIChjdHJsLiRpc0VtcHR5KHZhbHVlKSkgICAgICByZXR1cm4gbnVsbDtcbiAgICBpZiAoTlVNQkVSX1JFR0VYUC50ZXN0KHZhbHVlKSkgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0pO1xuXG4gIGN0cmwuJGZvcm1hdHRlcnMucHVzaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIGlmICghY3RybC4kaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgIHRocm93ICRuZ01vZGVsTWluRXJyKCdudW1mbXQnLCAnRXhwZWN0ZWQgYHswfWAgdG8gYmUgYSBudW1iZXInLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSk7XG5cbiAgaWYgKGF0dHIubWluIHx8IGF0dHIubmdNaW4pIHtcbiAgICB2YXIgbWluVmFsO1xuICAgIGN0cmwuJHZhbGlkYXRvcnMubWluID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBjdHJsLiRpc0VtcHR5KHZhbHVlKSB8fCBpc1VuZGVmaW5lZChtaW5WYWwpIHx8IHZhbHVlID49IG1pblZhbDtcbiAgICB9O1xuXG4gICAgYXR0ci4kb2JzZXJ2ZSgnbWluJywgZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAoaXNEZWZpbmVkKHZhbCkgJiYgIWlzTnVtYmVyKHZhbCkpIHtcbiAgICAgICAgdmFsID0gcGFyc2VGbG9hdCh2YWwsIDEwKTtcbiAgICAgIH1cbiAgICAgIG1pblZhbCA9IGlzTnVtYmVyKHZhbCkgJiYgIWlzTmFOKHZhbCkgPyB2YWwgOiB1bmRlZmluZWQ7XG4gICAgICAvLyBUT0RPKG1hdHNrbyk6IGltcGxlbWVudCB2YWxpZGF0ZUxhdGVyIHRvIHJlZHVjZSBudW1iZXIgb2YgdmFsaWRhdGlvbnNcbiAgICAgIGN0cmwuJHZhbGlkYXRlKCk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoYXR0ci5tYXggfHwgYXR0ci5uZ01heCkge1xuICAgIHZhciBtYXhWYWw7XG4gICAgY3RybC4kdmFsaWRhdG9ycy5tYXggPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGN0cmwuJGlzRW1wdHkodmFsdWUpIHx8IGlzVW5kZWZpbmVkKG1heFZhbCkgfHwgdmFsdWUgPD0gbWF4VmFsO1xuICAgIH07XG5cbiAgICBhdHRyLiRvYnNlcnZlKCdtYXgnLCBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmIChpc0RlZmluZWQodmFsKSAmJiAhaXNOdW1iZXIodmFsKSkge1xuICAgICAgICB2YWwgPSBwYXJzZUZsb2F0KHZhbCwgMTApO1xuICAgICAgfVxuICAgICAgbWF4VmFsID0gaXNOdW1iZXIodmFsKSAmJiAhaXNOYU4odmFsKSA/IHZhbCA6IHVuZGVmaW5lZDtcbiAgICAgIC8vIFRPRE8obWF0c2tvKTogaW1wbGVtZW50IHZhbGlkYXRlTGF0ZXIgdG8gcmVkdWNlIG51bWJlciBvZiB2YWxpZGF0aW9uc1xuICAgICAgY3RybC4kdmFsaWRhdGUoKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cmxJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3Nlcikge1xuICAvLyBOb3RlOiBubyBiYWRJbnB1dENoZWNrZXIgaGVyZSBieSBwdXJwb3NlIGFzIGB1cmxgIGlzIG9ubHkgYSB2YWxpZGF0aW9uXG4gIC8vIGluIGJyb3dzZXJzLCBpLmUuIHdlIGNhbiBhbHdheXMgcmVhZCBvdXQgaW5wdXQudmFsdWUgZXZlbiBpZiBpdCBpcyBub3QgdmFsaWQhXG4gIGJhc2VJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3Nlcik7XG4gIHN0cmluZ0Jhc2VkSW5wdXRUeXBlKGN0cmwpO1xuXG4gIGN0cmwuJCRwYXJzZXJOYW1lID0gJ3VybCc7XG4gIGN0cmwuJHZhbGlkYXRvcnMudXJsID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gY3RybC4kaXNFbXB0eSh2YWx1ZSkgfHwgVVJMX1JFR0VYUC50ZXN0KHZhbHVlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1haWxJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3Nlcikge1xuICAvLyBOb3RlOiBubyBiYWRJbnB1dENoZWNrZXIgaGVyZSBieSBwdXJwb3NlIGFzIGB1cmxgIGlzIG9ubHkgYSB2YWxpZGF0aW9uXG4gIC8vIGluIGJyb3dzZXJzLCBpLmUuIHdlIGNhbiBhbHdheXMgcmVhZCBvdXQgaW5wdXQudmFsdWUgZXZlbiBpZiBpdCBpcyBub3QgdmFsaWQhXG4gIGJhc2VJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3Nlcik7XG4gIHN0cmluZ0Jhc2VkSW5wdXRUeXBlKGN0cmwpO1xuXG4gIGN0cmwuJCRwYXJzZXJOYW1lID0gJ2VtYWlsJztcbiAgY3RybC4kdmFsaWRhdG9ycy5lbWFpbCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGN0cmwuJGlzRW1wdHkodmFsdWUpIHx8IEVNQUlMX1JFR0VYUC50ZXN0KHZhbHVlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmFkaW9JbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwpIHtcbiAgLy8gbWFrZSB0aGUgbmFtZSB1bmlxdWUsIGlmIG5vdCBkZWZpbmVkXG4gIGlmIChpc1VuZGVmaW5lZChhdHRyLm5hbWUpKSB7XG4gICAgZWxlbWVudC5hdHRyKCduYW1lJywgbmV4dFVpZCgpKTtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uKGV2KSB7XG4gICAgaWYgKGVsZW1lbnRbMF0uY2hlY2tlZCkge1xuICAgICAgY3RybC4kc2V0Vmlld1ZhbHVlKGF0dHIudmFsdWUsIGV2ICYmIGV2LnR5cGUpO1xuICAgIH1cbiAgfTtcblxuICBlbGVtZW50Lm9uKCdjbGljaycsIGxpc3RlbmVyKTtcblxuICBjdHJsLiRyZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUgPSBhdHRyLnZhbHVlO1xuICAgIGVsZW1lbnRbMF0uY2hlY2tlZCA9ICh2YWx1ZSA9PSBjdHJsLiR2aWV3VmFsdWUpO1xuICB9O1xuXG4gIGF0dHIuJG9ic2VydmUoJ3ZhbHVlJywgY3RybC4kcmVuZGVyKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb25zdGFudEV4cHIoJHBhcnNlLCBjb250ZXh0LCBuYW1lLCBleHByZXNzaW9uLCBmYWxsYmFjaykge1xuICB2YXIgcGFyc2VGbjtcbiAgaWYgKGlzRGVmaW5lZChleHByZXNzaW9uKSkge1xuICAgIHBhcnNlRm4gPSAkcGFyc2UoZXhwcmVzc2lvbik7XG4gICAgaWYgKCFwYXJzZUZuLmNvbnN0YW50KSB7XG4gICAgICB0aHJvdyBtaW5FcnIoJ25nTW9kZWwnKSgnY29uc3RleHByJywgJ0V4cGVjdGVkIGNvbnN0YW50IGV4cHJlc3Npb24gZm9yIGB7MH1gLCBidXQgc2F3ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYHsxfWAuJywgbmFtZSwgZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUZuKGNvbnRleHQpO1xuICB9XG4gIHJldHVybiBmYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gY2hlY2tib3hJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3NlciwgJGZpbHRlciwgJHBhcnNlKSB7XG4gIHZhciB0cnVlVmFsdWUgPSBwYXJzZUNvbnN0YW50RXhwcigkcGFyc2UsIHNjb3BlLCAnbmdUcnVlVmFsdWUnLCBhdHRyLm5nVHJ1ZVZhbHVlLCB0cnVlKTtcbiAgdmFyIGZhbHNlVmFsdWUgPSBwYXJzZUNvbnN0YW50RXhwcigkcGFyc2UsIHNjb3BlLCAnbmdGYWxzZVZhbHVlJywgYXR0ci5uZ0ZhbHNlVmFsdWUsIGZhbHNlKTtcblxuICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbihldikge1xuICAgIGN0cmwuJHNldFZpZXdWYWx1ZShlbGVtZW50WzBdLmNoZWNrZWQsIGV2ICYmIGV2LnR5cGUpO1xuICB9O1xuXG4gIGVsZW1lbnQub24oJ2NsaWNrJywgbGlzdGVuZXIpO1xuXG4gIGN0cmwuJHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICAgIGVsZW1lbnRbMF0uY2hlY2tlZCA9IGN0cmwuJHZpZXdWYWx1ZTtcbiAgfTtcblxuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYCRpc0VtcHR5YCBiZWNhdXNlIGFuIGVtcHR5IGNoZWNrYm94IGlzIG5ldmVyIGVxdWFsIHRvIHRoZSB0cnVlVmFsdWVcbiAgY3RybC4kaXNFbXB0eSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB0cnVlVmFsdWU7XG4gIH07XG5cbiAgY3RybC4kZm9ybWF0dGVycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVxdWFscyh2YWx1ZSwgdHJ1ZVZhbHVlKTtcbiAgfSk7XG5cbiAgY3RybC4kcGFyc2Vycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID8gdHJ1ZVZhbHVlIDogZmFsc2VWYWx1ZTtcbiAgfSk7XG59XG5cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSB0ZXh0YXJlYVxuICogQHJlc3RyaWN0IEVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEhUTUwgdGV4dGFyZWEgZWxlbWVudCBjb250cm9sIHdpdGggYW5ndWxhciBkYXRhLWJpbmRpbmcuIFRoZSBkYXRhLWJpbmRpbmcgYW5kIHZhbGlkYXRpb25cbiAqIHByb3BlcnRpZXMgb2YgdGhpcyBlbGVtZW50IGFyZSBleGFjdGx5IHRoZSBzYW1lIGFzIHRob3NlIG9mIHRoZVxuICoge0BsaW5rIG5nLmRpcmVjdGl2ZTppbnB1dCBpbnB1dCBlbGVtZW50fS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uXG4gKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuXG4gKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuXG4gKiBAcGFyYW0ge3N0cmluZz19IG5nUmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSBhbmQgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgdG9cbiAqICAgIHRoZSBlbGVtZW50IHdoZW4gdGhlIG5nUmVxdWlyZWQgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gdHJ1ZS4gVXNlIGBuZ1JlcXVpcmVkYCBpbnN0ZWFkIG9mXG4gKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS5cbiAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNaW5sZW5ndGggU2V0cyBgbWlubGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgc2hvcnRlciB0aGFuXG4gKiAgICBtaW5sZW5ndGguXG4gKiBAcGFyYW0ge251bWJlcj19IG5nTWF4bGVuZ3RoIFNldHMgYG1heGxlbmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIGxvbmdlciB0aGFuXG4gKiAgICBtYXhsZW5ndGguXG4gKiBAcGFyYW0ge3N0cmluZz19IG5nUGF0dGVybiBTZXRzIGBwYXR0ZXJuYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZG9lcyBub3QgbWF0Y2ggdGhlXG4gKiAgICBSZWdFeHAgcGF0dGVybiBleHByZXNzaW9uLiBFeHBlY3RlZCB2YWx1ZSBpcyBgL3JlZ2V4cC9gIGZvciBpbmxpbmUgcGF0dGVybnMgb3IgYHJlZ2V4cGAgZm9yXG4gKiAgICBwYXR0ZXJucyBkZWZpbmVkIGFzIHNjb3BlIGV4cHJlc3Npb25zLlxuICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyXG4gKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LlxuICogQHBhcmFtIHtib29sZWFuPX0gW25nVHJpbT10cnVlXSBJZiBzZXQgdG8gZmFsc2UgQW5ndWxhciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHRyaW0gdGhlIGlucHV0LlxuICovXG5cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBpbnB1dFxuICogQHJlc3RyaWN0IEVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEhUTUwgaW5wdXQgZWxlbWVudCBjb250cm9sLiBXaGVuIHVzZWQgdG9nZXRoZXIgd2l0aCB7QGxpbmsgbmdNb2RlbCBgbmdNb2RlbGB9LCBpdCBwcm92aWRlcyBkYXRhLWJpbmRpbmcsXG4gKiBpbnB1dCBzdGF0ZSBjb250cm9sLCBhbmQgdmFsaWRhdGlvbi5cbiAqIElucHV0IGNvbnRyb2wgZm9sbG93cyBIVE1MNSBpbnB1dCB0eXBlcyBhbmQgcG9seWZpbGxzIHRoZSBIVE1MNSB2YWxpZGF0aW9uIGJlaGF2aW9yIGZvciBvbGRlciBicm93c2Vycy5cbiAqXG4gKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiPlxuICogKipOb3RlOioqIE5vdCBldmVyeSBmZWF0dXJlIG9mZmVyZWQgaXMgYXZhaWxhYmxlIGZvciBhbGwgaW5wdXQgdHlwZXMuXG4gKiBTcGVjaWZpY2FsbHksIGRhdGEgYmluZGluZyBhbmQgZXZlbnQgaGFuZGxpbmcgdmlhIGBuZy1tb2RlbGAgaXMgdW5zdXBwb3J0ZWQgZm9yIGBpbnB1dFtmaWxlXWAuXG4gKiA8L2Rpdj5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uXG4gKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuXG4gKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBuZ1JlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgaWYgc2V0IHRvIHRydWVcbiAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNaW5sZW5ndGggU2V0cyBgbWlubGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgc2hvcnRlciB0aGFuXG4gKiAgICBtaW5sZW5ndGguXG4gKiBAcGFyYW0ge251bWJlcj19IG5nTWF4bGVuZ3RoIFNldHMgYG1heGxlbmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIGxvbmdlciB0aGFuXG4gKiAgICBtYXhsZW5ndGguXG4gKiBAcGFyYW0ge3N0cmluZz19IG5nUGF0dGVybiBTZXRzIGBwYXR0ZXJuYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZG9lcyBub3QgbWF0Y2ggdGhlXG4gKiAgICBSZWdFeHAgcGF0dGVybiBleHByZXNzaW9uLiBFeHBlY3RlZCB2YWx1ZSBpcyBgL3JlZ2V4cC9gIGZvciBpbmxpbmUgcGF0dGVybnMgb3IgYHJlZ2V4cGAgZm9yXG4gKiAgICBwYXR0ZXJucyBkZWZpbmVkIGFzIHNjb3BlIGV4cHJlc3Npb25zLlxuICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyXG4gKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LlxuICogQHBhcmFtIHtib29sZWFuPX0gW25nVHJpbT10cnVlXSBJZiBzZXQgdG8gZmFsc2UgQW5ndWxhciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHRyaW0gdGhlIGlucHV0LlxuICogICAgVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBmb3IgaW5wdXRbdHlwZT1wYXNzd29yZF0gY29udHJvbHMsIHdoaWNoIHdpbGwgbmV2ZXIgdHJpbSB0aGVcbiAqICAgIGlucHV0LlxuICpcbiAqIEBleGFtcGxlXG4gICAgPGV4YW1wbGUgbmFtZT1cImlucHV0LWRpcmVjdGl2ZVwiIG1vZHVsZT1cImlucHV0RXhhbXBsZVwiPlxuICAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgICA8c2NyaXB0PlxuICAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdpbnB1dEV4YW1wbGUnLCBbXSlcbiAgICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XG4gICAgICAgICAgICAgICRzY29wZS51c2VyID0ge25hbWU6ICdndWVzdCcsIGxhc3Q6ICd2aXNpdG9yJ307XG4gICAgICAgICAgICB9XSk7XG4gICAgICAgPC9zY3JpcHQ+XG4gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cbiAgICAgICAgIDxmb3JtIG5hbWU9XCJteUZvcm1cIj5cbiAgICAgICAgICAgVXNlciBuYW1lOiA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwidXNlck5hbWVcIiBuZy1tb2RlbD1cInVzZXIubmFtZVwiIHJlcXVpcmVkPlxuICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yXCIgbmctc2hvdz1cIm15Rm9ybS51c2VyTmFtZS4kZXJyb3IucmVxdWlyZWRcIj5cbiAgICAgICAgICAgICBSZXF1aXJlZCE8L3NwYW4+PGJyPlxuICAgICAgICAgICBMYXN0IG5hbWU6IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJsYXN0TmFtZVwiIG5nLW1vZGVsPVwidXNlci5sYXN0XCJcbiAgICAgICAgICAgICBuZy1taW5sZW5ndGg9XCIzXCIgbmctbWF4bGVuZ3RoPVwiMTBcIj5cbiAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiIG5nLXNob3c9XCJteUZvcm0ubGFzdE5hbWUuJGVycm9yLm1pbmxlbmd0aFwiPlxuICAgICAgICAgICAgIFRvbyBzaG9ydCE8L3NwYW4+XG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmxhc3ROYW1lLiRlcnJvci5tYXhsZW5ndGhcIj5cbiAgICAgICAgICAgICBUb28gbG9uZyE8L3NwYW4+PGJyPlxuICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgPGhyPlxuICAgICAgICAgPHR0PnVzZXIgPSB7e3VzZXJ9fTwvdHQ+PGJyLz5cbiAgICAgICAgIDx0dD5teUZvcm0udXNlck5hbWUuJHZhbGlkID0ge3tteUZvcm0udXNlck5hbWUuJHZhbGlkfX08L3R0Pjxicj5cbiAgICAgICAgIDx0dD5teUZvcm0udXNlck5hbWUuJGVycm9yID0ge3tteUZvcm0udXNlck5hbWUuJGVycm9yfX08L3R0Pjxicj5cbiAgICAgICAgIDx0dD5teUZvcm0ubGFzdE5hbWUuJHZhbGlkID0ge3tteUZvcm0ubGFzdE5hbWUuJHZhbGlkfX08L3R0Pjxicj5cbiAgICAgICAgIDx0dD5teUZvcm0ubGFzdE5hbWUuJGVycm9yID0ge3tteUZvcm0ubGFzdE5hbWUuJGVycm9yfX08L3R0Pjxicj5cbiAgICAgICAgIDx0dD5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0uJHZhbGlkfX08L3R0Pjxicj5cbiAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyPlxuICAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IubWlubGVuZ3RoID0ge3shIW15Rm9ybS4kZXJyb3IubWlubGVuZ3RofX08L3R0Pjxicj5cbiAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLm1heGxlbmd0aCA9IHt7ISFteUZvcm0uJGVycm9yLm1heGxlbmd0aH19PC90dD48YnI+XG4gICAgICAgPC9kaXY+XG4gICAgICA8L2ZpbGU+XG4gICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gICAgICAgIHZhciB1c2VyID0gZWxlbWVudChieS5leGFjdEJpbmRpbmcoJ3VzZXInKSk7XG4gICAgICAgIHZhciB1c2VyTmFtZVZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0udXNlck5hbWUuJHZhbGlkJykpO1xuICAgICAgICB2YXIgbGFzdE5hbWVWYWxpZCA9IGVsZW1lbnQoYnkuYmluZGluZygnbXlGb3JtLmxhc3ROYW1lLiR2YWxpZCcpKTtcbiAgICAgICAgdmFyIGxhc3ROYW1lRXJyb3IgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS5sYXN0TmFtZS4kZXJyb3InKSk7XG4gICAgICAgIHZhciBmb3JtVmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS4kdmFsaWQnKSk7XG4gICAgICAgIHZhciB1c2VyTmFtZUlucHV0ID0gZWxlbWVudChieS5tb2RlbCgndXNlci5uYW1lJykpO1xuICAgICAgICB2YXIgdXNlckxhc3RJbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ3VzZXIubGFzdCcpKTtcblxuICAgICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBleHBlY3QodXNlci5nZXRUZXh0KCkpLnRvQ29udGFpbigne1wibmFtZVwiOlwiZ3Vlc3RcIixcImxhc3RcIjpcInZpc2l0b3JcIn0nKTtcbiAgICAgICAgICBleHBlY3QodXNlck5hbWVWYWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbigndHJ1ZScpO1xuICAgICAgICAgIGV4cGVjdChmb3JtVmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3RydWUnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5IHdoZW4gcmVxdWlyZWQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB1c2VyTmFtZUlucHV0LmNsZWFyKCk7XG4gICAgICAgICAgdXNlck5hbWVJbnB1dC5zZW5kS2V5cygnJyk7XG5cbiAgICAgICAgICBleHBlY3QodXNlci5nZXRUZXh0KCkpLnRvQ29udGFpbigne1wibGFzdFwiOlwidmlzaXRvclwifScpO1xuICAgICAgICAgIGV4cGVjdCh1c2VyTmFtZVZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdmYWxzZScpO1xuICAgICAgICAgIGV4cGVjdChmb3JtVmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgYmUgdmFsaWQgaWYgZW1wdHkgd2hlbiBtaW4gbGVuZ3RoIGlzIHNldCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHVzZXJMYXN0SW5wdXQuY2xlYXIoKTtcbiAgICAgICAgICB1c2VyTGFzdElucHV0LnNlbmRLZXlzKCcnKTtcblxuICAgICAgICAgIGV4cGVjdCh1c2VyLmdldFRleHQoKSkudG9Db250YWluKCd7XCJuYW1lXCI6XCJndWVzdFwiLFwibGFzdFwiOlwiXCJ9Jyk7XG4gICAgICAgICAgZXhwZWN0KGxhc3ROYW1lVmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3RydWUnKTtcbiAgICAgICAgICBleHBlY3QoZm9ybVZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCd0cnVlJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBsZXNzIHRoYW4gcmVxdWlyZWQgbWluIGxlbmd0aCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHVzZXJMYXN0SW5wdXQuY2xlYXIoKTtcbiAgICAgICAgICB1c2VyTGFzdElucHV0LnNlbmRLZXlzKCd4eCcpO1xuXG4gICAgICAgICAgZXhwZWN0KHVzZXIuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3tcIm5hbWVcIjpcImd1ZXN0XCJ9Jyk7XG4gICAgICAgICAgZXhwZWN0KGxhc3ROYW1lVmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7XG4gICAgICAgICAgZXhwZWN0KGxhc3ROYW1lRXJyb3IuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ21pbmxlbmd0aCcpO1xuICAgICAgICAgIGV4cGVjdChmb3JtVmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBsb25nZXIgdGhhbiBtYXggbGVuZ3RoJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdXNlckxhc3RJbnB1dC5jbGVhcigpO1xuICAgICAgICAgIHVzZXJMYXN0SW5wdXQuc2VuZEtleXMoJ3NvbWUgcmlkaWN1bG91c2x5IGxvbmcgbmFtZScpO1xuXG4gICAgICAgICAgZXhwZWN0KHVzZXIuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3tcIm5hbWVcIjpcImd1ZXN0XCJ9Jyk7XG4gICAgICAgICAgZXhwZWN0KGxhc3ROYW1lVmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7XG4gICAgICAgICAgZXhwZWN0KGxhc3ROYW1lRXJyb3IuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ21heGxlbmd0aCcpO1xuICAgICAgICAgIGV4cGVjdChmb3JtVmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7XG4gICAgICAgIH0pO1xuICAgICAgPC9maWxlPlxuICAgIDwvZXhhbXBsZT5cbiAqL1xudmFyIGlucHV0RGlyZWN0aXZlID0gWyckYnJvd3NlcicsICckc25pZmZlcicsICckZmlsdGVyJywgJyRwYXJzZScsXG4gICAgZnVuY3Rpb24oJGJyb3dzZXIsICRzbmlmZmVyLCAkZmlsdGVyLCAkcGFyc2UpIHtcbiAgcmV0dXJuIHtcbiAgICByZXN0cmljdDogJ0UnLFxuICAgIHJlcXVpcmU6IFsnP25nTW9kZWwnXSxcbiAgICBsaW5rOiB7XG4gICAgICBwcmU6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJscykge1xuICAgICAgICBpZiAoY3RybHNbMF0pIHtcbiAgICAgICAgICAoaW5wdXRUeXBlW2xvd2VyY2FzZShhdHRyLnR5cGUpXSB8fCBpbnB1dFR5cGUudGV4dCkoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmxzWzBdLCAkc25pZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJyb3dzZXIsICRmaWx0ZXIsICRwYXJzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59XTtcblxudmFyIFZBTElEX0NMQVNTID0gJ25nLXZhbGlkJyxcbiAgICBJTlZBTElEX0NMQVNTID0gJ25nLWludmFsaWQnLFxuICAgIFBSSVNUSU5FX0NMQVNTID0gJ25nLXByaXN0aW5lJyxcbiAgICBESVJUWV9DTEFTUyA9ICduZy1kaXJ0eScsXG4gICAgVU5UT1VDSEVEX0NMQVNTID0gJ25nLXVudG91Y2hlZCcsXG4gICAgVE9VQ0hFRF9DTEFTUyA9ICduZy10b3VjaGVkJyxcbiAgICBQRU5ESU5HX0NMQVNTID0gJ25nLXBlbmRpbmcnO1xuXG4vKipcbiAqIEBuZ2RvYyB0eXBlXG4gKiBAbmFtZSBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9ICR2aWV3VmFsdWUgQWN0dWFsIHN0cmluZyB2YWx1ZSBpbiB0aGUgdmlldy5cbiAqIEBwcm9wZXJ0eSB7Kn0gJG1vZGVsVmFsdWUgVGhlIHZhbHVlIGluIHRoZSBtb2RlbCB0aGF0IHRoZSBjb250cm9sIGlzIGJvdW5kIHRvLlxuICogQHByb3BlcnR5IHtBcnJheS48RnVuY3Rpb24+fSAkcGFyc2VycyBBcnJheSBvZiBmdW5jdGlvbnMgdG8gZXhlY3V0ZSwgYXMgYSBwaXBlbGluZSwgd2hlbmV2ZXJcbiAgICAgICB0aGUgY29udHJvbCByZWFkcyB2YWx1ZSBmcm9tIHRoZSBET00uIFRoZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpbiBhcnJheSBvcmRlciwgZWFjaCBwYXNzaW5nXG4gICAgICAgaXRzIHJldHVybiB2YWx1ZSB0aHJvdWdoIHRvIHRoZSBuZXh0LiBUaGUgbGFzdCByZXR1cm4gdmFsdWUgaXMgZm9yd2FyZGVkIHRvIHRoZVxuICAgICAgIHtAbGluayBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyIyR2YWxpZGF0b3JzIGAkdmFsaWRhdG9yc2B9IGNvbGxlY3Rpb24uXG5cblBhcnNlcnMgYXJlIHVzZWQgdG8gc2FuaXRpemUgLyBjb252ZXJ0IHRoZSB7QGxpbmsgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkdmlld1ZhbHVlXG5gJHZpZXdWYWx1ZWB9LlxuXG5SZXR1cm5pbmcgYHVuZGVmaW5lZGAgZnJvbSBhIHBhcnNlciBtZWFucyBhIHBhcnNlIGVycm9yIG9jY3VycmVkLiBJbiB0aGF0IGNhc2UsXG5ubyB7QGxpbmsgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkdmFsaWRhdG9ycyBgJHZhbGlkYXRvcnNgfSB3aWxsIHJ1biBhbmQgdGhlIGBuZ01vZGVsYFxud2lsbCBiZSBzZXQgdG8gYHVuZGVmaW5lZGAgdW5sZXNzIHtAbGluayBuZ01vZGVsT3B0aW9ucyBgbmdNb2RlbE9wdGlvbnMuYWxsb3dJbnZhbGlkYH1cbmlzIHNldCB0byBgdHJ1ZWAuIFRoZSBwYXJzZSBlcnJvciBpcyBzdG9yZWQgaW4gYG5nTW9kZWwuJGVycm9yLnBhcnNlYC5cblxuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXkuPEZ1bmN0aW9uPn0gJGZvcm1hdHRlcnMgQXJyYXkgb2YgZnVuY3Rpb25zIHRvIGV4ZWN1dGUsIGFzIGEgcGlwZWxpbmUsIHdoZW5ldmVyXG4gICAgICAgdGhlIG1vZGVsIHZhbHVlIGNoYW5nZXMuIFRoZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpbiByZXZlcnNlIGFycmF5IG9yZGVyLCBlYWNoIHBhc3NpbmcgdGhlIHZhbHVlIHRocm91Z2ggdG8gdGhlXG4gICAgICAgbmV4dC4gVGhlIGxhc3QgcmV0dXJuIHZhbHVlIGlzIHVzZWQgYXMgdGhlIGFjdHVhbCBET00gdmFsdWUuXG4gICAgICAgVXNlZCB0byBmb3JtYXQgLyBjb252ZXJ0IHZhbHVlcyBmb3IgZGlzcGxheSBpbiB0aGUgY29udHJvbC5cbiAqIGBgYGpzXG4gKiBmdW5jdGlvbiBmb3JtYXR0ZXIodmFsdWUpIHtcbiAqICAgaWYgKHZhbHVlKSB7XG4gKiAgICAgcmV0dXJuIHZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gKiAgIH1cbiAqIH1cbiAqIG5nTW9kZWwuJGZvcm1hdHRlcnMucHVzaChmb3JtYXR0ZXIpO1xuICogYGBgXG4gKlxuICogQHByb3BlcnR5IHtPYmplY3QuPHN0cmluZywgZnVuY3Rpb24+fSAkdmFsaWRhdG9ycyBBIGNvbGxlY3Rpb24gb2YgdmFsaWRhdG9ycyB0aGF0IGFyZSBhcHBsaWVkXG4gKiAgICAgIHdoZW5ldmVyIHRoZSBtb2RlbCB2YWx1ZSBjaGFuZ2VzLiBUaGUga2V5IHZhbHVlIHdpdGhpbiB0aGUgb2JqZWN0IHJlZmVycyB0byB0aGUgbmFtZSBvZiB0aGVcbiAqICAgICAgdmFsaWRhdG9yIHdoaWxlIHRoZSBmdW5jdGlvbiByZWZlcnMgdG8gdGhlIHZhbGlkYXRpb24gb3BlcmF0aW9uLiBUaGUgdmFsaWRhdGlvbiBvcGVyYXRpb24gaXNcbiAqICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgbW9kZWwgdmFsdWUgYXMgYW4gYXJndW1lbnQgYW5kIG11c3QgcmV0dXJuIGEgdHJ1ZSBvciBmYWxzZSB2YWx1ZSBkZXBlbmRpbmdcbiAqICAgICAgb24gdGhlIHJlc3BvbnNlIG9mIHRoYXQgdmFsaWRhdGlvbi5cbiAqXG4gKiBgYGBqc1xuICogbmdNb2RlbC4kdmFsaWRhdG9ycy52YWxpZENoYXJhY3RlcnMgPSBmdW5jdGlvbihtb2RlbFZhbHVlLCB2aWV3VmFsdWUpIHtcbiAqICAgdmFyIHZhbHVlID0gbW9kZWxWYWx1ZSB8fCB2aWV3VmFsdWU7XG4gKiAgIHJldHVybiAvWzAtOV0rLy50ZXN0KHZhbHVlKSAmJlxuICogICAgICAgICAgL1thLXpdKy8udGVzdCh2YWx1ZSkgJiZcbiAqICAgICAgICAgIC9bQS1aXSsvLnRlc3QodmFsdWUpICYmXG4gKiAgICAgICAgICAvXFxXKy8udGVzdCh2YWx1ZSk7XG4gKiB9O1xuICogYGBgXG4gKlxuICogQHByb3BlcnR5IHtPYmplY3QuPHN0cmluZywgZnVuY3Rpb24+fSAkYXN5bmNWYWxpZGF0b3JzIEEgY29sbGVjdGlvbiBvZiB2YWxpZGF0aW9ucyB0aGF0IGFyZSBleHBlY3RlZCB0b1xuICogICAgICBwZXJmb3JtIGFuIGFzeW5jaHJvbm91cyB2YWxpZGF0aW9uIChlLmcuIGEgSFRUUCByZXF1ZXN0KS4gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gdGhhdCBpcyBwcm92aWRlZFxuICogICAgICBpcyBleHBlY3RlZCB0byByZXR1cm4gYSBwcm9taXNlIHdoZW4gaXQgaXMgcnVuIGR1cmluZyB0aGUgbW9kZWwgdmFsaWRhdGlvbiBwcm9jZXNzLiBPbmNlIHRoZSBwcm9taXNlXG4gKiAgICAgIGlzIGRlbGl2ZXJlZCB0aGVuIHRoZSB2YWxpZGF0aW9uIHN0YXR1cyB3aWxsIGJlIHNldCB0byB0cnVlIHdoZW4gZnVsZmlsbGVkIGFuZCBmYWxzZSB3aGVuIHJlamVjdGVkLlxuICogICAgICBXaGVuIHRoZSBhc3luY2hyb25vdXMgdmFsaWRhdG9ycyBhcmUgdHJpZ2dlcmVkLCBlYWNoIG9mIHRoZSB2YWxpZGF0b3JzIHdpbGwgcnVuIGluIHBhcmFsbGVsIGFuZCB0aGUgbW9kZWxcbiAqICAgICAgdmFsdWUgd2lsbCBvbmx5IGJlIHVwZGF0ZWQgb25jZSBhbGwgdmFsaWRhdG9ycyBoYXZlIGJlZW4gZnVsZmlsbGVkLiBBcyBsb25nIGFzIGFuIGFzeW5jaHJvbm91cyB2YWxpZGF0b3JcbiAqICAgICAgaXMgdW5mdWxmaWxsZWQsIGl0cyBrZXkgd2lsbCBiZSBhZGRlZCB0byB0aGUgY29udHJvbGxlcnMgYCRwZW5kaW5nYCBwcm9wZXJ0eS4gQWxzbywgYWxsIGFzeW5jaHJvbm91cyB2YWxpZGF0b3JzXG4gKiAgICAgIHdpbGwgb25seSBydW4gb25jZSBhbGwgc3luY2hyb25vdXMgdmFsaWRhdG9ycyBoYXZlIHBhc3NlZC5cbiAqXG4gKiBQbGVhc2Ugbm90ZSB0aGF0IGlmICRodHRwIGlzIHVzZWQgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgc2VydmVyIHJldHVybnMgYSBzdWNjZXNzIEhUVFAgcmVzcG9uc2UgY29kZVxuICogaW4gb3JkZXIgdG8gZnVsZmlsbCB0aGUgdmFsaWRhdGlvbiBhbmQgYSBzdGF0dXMgbGV2ZWwgb2YgYDR4eGAgaW4gb3JkZXIgdG8gcmVqZWN0IHRoZSB2YWxpZGF0aW9uLlxuICpcbiAqIGBgYGpzXG4gKiBuZ01vZGVsLiRhc3luY1ZhbGlkYXRvcnMudW5pcXVlVXNlcm5hbWUgPSBmdW5jdGlvbihtb2RlbFZhbHVlLCB2aWV3VmFsdWUpIHtcbiAqICAgdmFyIHZhbHVlID0gbW9kZWxWYWx1ZSB8fCB2aWV3VmFsdWU7XG4gKlxuICogICAvLyBMb29rdXAgdXNlciBieSB1c2VybmFtZVxuICogICByZXR1cm4gJGh0dHAuZ2V0KCcvYXBpL3VzZXJzLycgKyB2YWx1ZSkuXG4gKiAgICAgIHRoZW4oZnVuY3Rpb24gcmVzb2x2ZWQoKSB7XG4gKiAgICAgICAgLy91c2VybmFtZSBleGlzdHMsIHRoaXMgbWVhbnMgdmFsaWRhdGlvbiBmYWlsc1xuICogICAgICAgIHJldHVybiAkcS5yZWplY3QoJ2V4aXN0cycpO1xuICogICAgICB9LCBmdW5jdGlvbiByZWplY3RlZCgpIHtcbiAqICAgICAgICAvL3VzZXJuYW1lIGRvZXMgbm90IGV4aXN0LCB0aGVyZWZvcmUgdGhpcyB2YWxpZGF0aW9uIHBhc3Nlc1xuICogICAgICAgIHJldHVybiB0cnVlO1xuICogICAgICB9KTtcbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBAcHJvcGVydHkge0FycmF5LjxGdW5jdGlvbj59ICR2aWV3Q2hhbmdlTGlzdGVuZXJzIEFycmF5IG9mIGZ1bmN0aW9ucyB0byBleGVjdXRlIHdoZW5ldmVyIHRoZVxuICogICAgIHZpZXcgdmFsdWUgaGFzIGNoYW5nZWQuIEl0IGlzIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cywgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC5cbiAqICAgICBUaGlzIGNhbiBiZSB1c2VkIGluIHBsYWNlIG9mIGFkZGl0aW9uYWwgJHdhdGNoZXMgYWdhaW5zdCB0aGUgbW9kZWwgdmFsdWUuXG4gKlxuICogQHByb3BlcnR5IHtPYmplY3R9ICRlcnJvciBBbiBvYmplY3QgaGFzaCB3aXRoIGFsbCBmYWlsaW5nIHZhbGlkYXRvciBpZHMgYXMga2V5cy5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSAkcGVuZGluZyBBbiBvYmplY3QgaGFzaCB3aXRoIGFsbCBwZW5kaW5nIHZhbGlkYXRvciBpZHMgYXMga2V5cy5cbiAqXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59ICR1bnRvdWNoZWQgVHJ1ZSBpZiBjb250cm9sIGhhcyBub3QgbG9zdCBmb2N1cyB5ZXQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59ICR0b3VjaGVkIFRydWUgaWYgY29udHJvbCBoYXMgbG9zdCBmb2N1cy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gJHByaXN0aW5lIFRydWUgaWYgdXNlciBoYXMgbm90IGludGVyYWN0ZWQgd2l0aCB0aGUgY29udHJvbCB5ZXQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59ICRkaXJ0eSBUcnVlIGlmIHVzZXIgaGFzIGFscmVhZHkgaW50ZXJhY3RlZCB3aXRoIHRoZSBjb250cm9sLlxuICogQHByb3BlcnR5IHtib29sZWFufSAkdmFsaWQgVHJ1ZSBpZiB0aGVyZSBpcyBubyBlcnJvci5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gJGludmFsaWQgVHJ1ZSBpZiBhdCBsZWFzdCBvbmUgZXJyb3Igb24gdGhlIGNvbnRyb2wuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gJG5hbWUgVGhlIG5hbWUgYXR0cmlidXRlIG9mIHRoZSBjb250cm9sLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIGBOZ01vZGVsQ29udHJvbGxlcmAgcHJvdmlkZXMgQVBJIGZvciB0aGUgYG5nLW1vZGVsYCBkaXJlY3RpdmUuIFRoZSBjb250cm9sbGVyIGNvbnRhaW5zXG4gKiBzZXJ2aWNlcyBmb3IgZGF0YS1iaW5kaW5nLCB2YWxpZGF0aW9uLCBDU1MgdXBkYXRlcywgYW5kIHZhbHVlIGZvcm1hdHRpbmcgYW5kIHBhcnNpbmcuIEl0XG4gKiBwdXJwb3NlZnVsbHkgZG9lcyBub3QgY29udGFpbiBhbnkgbG9naWMgd2hpY2ggZGVhbHMgd2l0aCBET00gcmVuZGVyaW5nIG9yIGxpc3RlbmluZyB0b1xuICogRE9NIGV2ZW50cy4gU3VjaCBET00gcmVsYXRlZCBsb2dpYyBzaG91bGQgYmUgcHJvdmlkZWQgYnkgb3RoZXIgZGlyZWN0aXZlcyB3aGljaCBtYWtlIHVzZSBvZlxuICogYE5nTW9kZWxDb250cm9sbGVyYCBmb3IgZGF0YS1iaW5kaW5nLlxuICpcbiAqICMjIEN1c3RvbSBDb250cm9sIEV4YW1wbGVcbiAqIFRoaXMgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIGBOZ01vZGVsQ29udHJvbGxlcmAgd2l0aCBhIGN1c3RvbSBjb250cm9sIHRvIGFjaGlldmVcbiAqIGRhdGEtYmluZGluZy4gTm90aWNlIGhvdyBkaWZmZXJlbnQgZGlyZWN0aXZlcyAoYGNvbnRlbnRlZGl0YWJsZWAsIGBuZy1tb2RlbGAsIGFuZCBgcmVxdWlyZWRgKVxuICogY29sbGFib3JhdGUgdG9nZXRoZXIgdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCByZXN1bHQuXG4gKlxuICogTm90ZSB0aGF0IGBjb250ZW50ZWRpdGFibGVgIGlzIGFuIEhUTUw1IGF0dHJpYnV0ZSwgd2hpY2ggdGVsbHMgdGhlIGJyb3dzZXIgdG8gbGV0IHRoZSBlbGVtZW50XG4gKiBjb250ZW50cyBiZSBlZGl0ZWQgaW4gcGxhY2UgYnkgdGhlIHVzZXIuICBUaGlzIHdpbGwgbm90IHdvcmsgb24gb2xkZXIgYnJvd3NlcnMuXG4gKlxuICogV2UgYXJlIHVzaW5nIHRoZSB7QGxpbmsgbmcuc2VydmljZTokc2NlICRzY2V9IHNlcnZpY2UgaGVyZSBhbmQgaW5jbHVkZSB0aGUge0BsaW5rIG5nU2FuaXRpemUgJHNhbml0aXplfVxuICogbW9kdWxlIHRvIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIFwiYmFkXCIgY29udGVudCBsaWtlIGlubGluZSBldmVudCBsaXN0ZW5lciAoZS5nLiBgPHNwYW4gb25jbGljaz1cIi4uLlwiPmApLlxuICogSG93ZXZlciwgYXMgd2UgYXJlIHVzaW5nIGAkc2NlYCB0aGUgbW9kZWwgY2FuIHN0aWxsIGRlY2lkZSB0byBwcm92aWRlIHVuc2FmZSBjb250ZW50IGlmIGl0IG1hcmtzXG4gKiB0aGF0IGNvbnRlbnQgdXNpbmcgdGhlIGAkc2NlYCBzZXJ2aWNlLlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJOZ01vZGVsQ29udHJvbGxlclwiIG1vZHVsZT1cImN1c3RvbUNvbnRyb2xcIiBkZXBzPVwiYW5ndWxhci1zYW5pdGl6ZS5qc1wiPlxuICAgIDxmaWxlIG5hbWU9XCJzdHlsZS5jc3NcIj5cbiAgICAgIFtjb250ZW50ZWRpdGFibGVdIHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICBtaW4taGVpZ2h0OiAyMHB4O1xuICAgICAgfVxuXG4gICAgICAubmctaW52YWxpZCB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJlZDtcbiAgICAgIH1cblxuICAgIDwvZmlsZT5cbiAgICA8ZmlsZSBuYW1lPVwic2NyaXB0LmpzXCI+XG4gICAgICBhbmd1bGFyLm1vZHVsZSgnY3VzdG9tQ29udHJvbCcsIFsnbmdTYW5pdGl6ZSddKS5cbiAgICAgICAgZGlyZWN0aXZlKCdjb250ZW50ZWRpdGFibGUnLCBbJyRzY2UnLCBmdW5jdGlvbigkc2NlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc3RyaWN0OiAnQScsIC8vIG9ubHkgYWN0aXZhdGUgb24gZWxlbWVudCBhdHRyaWJ1dGVcbiAgICAgICAgICAgIHJlcXVpcmU6ICc/bmdNb2RlbCcsIC8vIGdldCBhIGhvbGQgb2YgTmdNb2RlbENvbnRyb2xsZXJcbiAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycywgbmdNb2RlbCkge1xuICAgICAgICAgICAgICBpZiAoIW5nTW9kZWwpIHJldHVybjsgLy8gZG8gbm90aGluZyBpZiBubyBuZy1tb2RlbFxuXG4gICAgICAgICAgICAgIC8vIFNwZWNpZnkgaG93IFVJIHNob3VsZCBiZSB1cGRhdGVkXG4gICAgICAgICAgICAgIG5nTW9kZWwuJHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuaHRtbCgkc2NlLmdldFRydXN0ZWRIdG1sKG5nTW9kZWwuJHZpZXdWYWx1ZSB8fCAnJykpO1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIC8vIExpc3RlbiBmb3IgY2hhbmdlIGV2ZW50cyB0byBlbmFibGUgYmluZGluZ1xuICAgICAgICAgICAgICBlbGVtZW50Lm9uKCdibHVyIGtleXVwIGNoYW5nZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLiRldmFsQXN5bmMocmVhZCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZWFkKCk7IC8vIGluaXRpYWxpemVcblxuICAgICAgICAgICAgICAvLyBXcml0ZSBkYXRhIHRvIHRoZSBtb2RlbFxuICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgICAgIHZhciBodG1sID0gZWxlbWVudC5odG1sKCk7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSBjbGVhciB0aGUgY29udGVudCBlZGl0YWJsZSB0aGUgYnJvd3NlciBsZWF2ZXMgYSA8YnI+IGJlaGluZFxuICAgICAgICAgICAgICAgIC8vIElmIHN0cmlwLWJyIGF0dHJpYnV0ZSBpcyBwcm92aWRlZCB0aGVuIHdlIHN0cmlwIHRoaXMgb3V0XG4gICAgICAgICAgICAgICAgaWYgKCBhdHRycy5zdHJpcEJyICYmIGh0bWwgPT0gJzxicj4nICkge1xuICAgICAgICAgICAgICAgICAgaHRtbCA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZ01vZGVsLiRzZXRWaWV3VmFsdWUoaHRtbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XSk7XG4gICAgPC9maWxlPlxuICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICA8Zm9ybSBuYW1lPVwibXlGb3JtXCI+XG4gICAgICAgPGRpdiBjb250ZW50ZWRpdGFibGVcbiAgICAgICAgICAgIG5hbWU9XCJteVdpZGdldFwiIG5nLW1vZGVsPVwidXNlckNvbnRlbnRcIlxuICAgICAgICAgICAgc3RyaXAtYnI9XCJ0cnVlXCJcbiAgICAgICAgICAgIHJlcXVpcmVkPkNoYW5nZSBtZSE8L2Rpdj5cbiAgICAgICAgPHNwYW4gbmctc2hvdz1cIm15Rm9ybS5teVdpZGdldC4kZXJyb3IucmVxdWlyZWRcIj5SZXF1aXJlZCE8L3NwYW4+XG4gICAgICAgPGhyPlxuICAgICAgIDx0ZXh0YXJlYSBuZy1tb2RlbD1cInVzZXJDb250ZW50XCI+PC90ZXh0YXJlYT5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2ZpbGU+XG4gICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgIGl0KCdzaG91bGQgZGF0YS1iaW5kIGFuZCBiZWNvbWUgaW52YWxpZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKGJyb3dzZXIucGFyYW1zLmJyb3dzZXIgPT0gJ3NhZmFyaScgfHwgYnJvd3Nlci5wYXJhbXMuYnJvd3NlciA9PSAnZmlyZWZveCcpIHtcbiAgICAgICAgLy8gU2FmYXJpRHJpdmVyIGNhbid0IGhhbmRsZSBjb250ZW50ZWRpdGFibGVcbiAgICAgICAgLy8gYW5kIEZpcmVmb3ggZHJpdmVyIGNhbid0IGNsZWFyIGNvbnRlbnRlZGl0YWJsZXMgdmVyeSB3ZWxsXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBjb250ZW50RWRpdGFibGUgPSBlbGVtZW50KGJ5LmNzcygnW2NvbnRlbnRlZGl0YWJsZV0nKSk7XG4gICAgICB2YXIgY29udGVudCA9ICdDaGFuZ2UgbWUhJztcblxuICAgICAgZXhwZWN0KGNvbnRlbnRFZGl0YWJsZS5nZXRUZXh0KCkpLnRvRXF1YWwoY29udGVudCk7XG5cbiAgICAgIGNvbnRlbnRFZGl0YWJsZS5jbGVhcigpO1xuICAgICAgY29udGVudEVkaXRhYmxlLnNlbmRLZXlzKHByb3RyYWN0b3IuS2V5LkJBQ0tfU1BBQ0UpO1xuICAgICAgZXhwZWN0KGNvbnRlbnRFZGl0YWJsZS5nZXRUZXh0KCkpLnRvRXF1YWwoJycpO1xuICAgICAgZXhwZWN0KGNvbnRlbnRFZGl0YWJsZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykpLnRvTWF0Y2goL25nLWludmFsaWQtcmVxdWlyZWQvKTtcbiAgICB9KTtcbiAgICA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICpcbiAqL1xudmFyIE5nTW9kZWxDb250cm9sbGVyID0gWyckc2NvcGUnLCAnJGV4Y2VwdGlvbkhhbmRsZXInLCAnJGF0dHJzJywgJyRlbGVtZW50JywgJyRwYXJzZScsICckYW5pbWF0ZScsICckdGltZW91dCcsICckcm9vdFNjb3BlJywgJyRxJywgJyRpbnRlcnBvbGF0ZScsXG4gICAgZnVuY3Rpb24oJHNjb3BlLCAkZXhjZXB0aW9uSGFuZGxlciwgJGF0dHIsICRlbGVtZW50LCAkcGFyc2UsICRhbmltYXRlLCAkdGltZW91dCwgJHJvb3RTY29wZSwgJHEsICRpbnRlcnBvbGF0ZSkge1xuICB0aGlzLiR2aWV3VmFsdWUgPSBOdW1iZXIuTmFOO1xuICB0aGlzLiRtb2RlbFZhbHVlID0gTnVtYmVyLk5hTjtcbiAgdGhpcy4kdmFsaWRhdG9ycyA9IHt9O1xuICB0aGlzLiRhc3luY1ZhbGlkYXRvcnMgPSB7fTtcbiAgdGhpcy4kcGFyc2VycyA9IFtdO1xuICB0aGlzLiRmb3JtYXR0ZXJzID0gW107XG4gIHRoaXMuJHZpZXdDaGFuZ2VMaXN0ZW5lcnMgPSBbXTtcbiAgdGhpcy4kdW50b3VjaGVkID0gdHJ1ZTtcbiAgdGhpcy4kdG91Y2hlZCA9IGZhbHNlO1xuICB0aGlzLiRwcmlzdGluZSA9IHRydWU7XG4gIHRoaXMuJGRpcnR5ID0gZmFsc2U7XG4gIHRoaXMuJHZhbGlkID0gdHJ1ZTtcbiAgdGhpcy4kaW52YWxpZCA9IGZhbHNlO1xuICB0aGlzLiRlcnJvciA9IHt9OyAvLyBrZWVwIGludmFsaWQga2V5cyBoZXJlXG4gIHRoaXMuJCRzdWNjZXNzID0ge307IC8vIGtlZXAgdmFsaWQga2V5cyBoZXJlXG4gIHRoaXMuJHBlbmRpbmcgPSB1bmRlZmluZWQ7IC8vIGtlZXAgcGVuZGluZyBrZXlzIGhlcmVcbiAgdGhpcy4kbmFtZSA9ICRpbnRlcnBvbGF0ZSgkYXR0ci5uYW1lIHx8ICcnLCBmYWxzZSkoJHNjb3BlKTtcblxuXG4gIHZhciBwYXJzZWROZ01vZGVsID0gJHBhcnNlKCRhdHRyLm5nTW9kZWwpLFxuICAgICAgcGVuZGluZ0RlYm91bmNlID0gbnVsbCxcbiAgICAgIGN0cmwgPSB0aGlzO1xuXG4gIHZhciBuZ01vZGVsR2V0ID0gZnVuY3Rpb24gbmdNb2RlbEdldCgpIHtcbiAgICB2YXIgbW9kZWxWYWx1ZSA9IHBhcnNlZE5nTW9kZWwoJHNjb3BlKTtcbiAgICBpZiAoY3RybC4kb3B0aW9ucyAmJiBjdHJsLiRvcHRpb25zLmdldHRlclNldHRlciAmJiBpc0Z1bmN0aW9uKG1vZGVsVmFsdWUpKSB7XG4gICAgICBtb2RlbFZhbHVlID0gbW9kZWxWYWx1ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbW9kZWxWYWx1ZTtcbiAgfTtcblxuICB2YXIgbmdNb2RlbFNldCA9IGZ1bmN0aW9uIG5nTW9kZWxTZXQobmV3VmFsdWUpIHtcbiAgICB2YXIgZ2V0dGVyU2V0dGVyO1xuICAgIGlmIChjdHJsLiRvcHRpb25zICYmIGN0cmwuJG9wdGlvbnMuZ2V0dGVyU2V0dGVyICYmXG4gICAgICAgIGlzRnVuY3Rpb24oZ2V0dGVyU2V0dGVyID0gcGFyc2VkTmdNb2RlbCgkc2NvcGUpKSkge1xuXG4gICAgICBnZXR0ZXJTZXR0ZXIoY3RybC4kbW9kZWxWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZE5nTW9kZWwuYXNzaWduKCRzY29wZSwgY3RybC4kbW9kZWxWYWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMuJCRzZXRPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIGN0cmwuJG9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKCFwYXJzZWROZ01vZGVsLmFzc2lnbiAmJiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMuZ2V0dGVyU2V0dGVyKSkge1xuICAgICAgdGhyb3cgJG5nTW9kZWxNaW5FcnIoJ25vbmFzc2lnbicsIFwiRXhwcmVzc2lvbiAnezB9JyBpcyBub24tYXNzaWduYWJsZS4gRWxlbWVudDogezF9XCIsXG4gICAgICAgICAgJGF0dHIubmdNb2RlbCwgc3RhcnRpbmdUYWcoJGVsZW1lbnQpKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkcmVuZGVyXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdmlldyBuZWVkcyB0byBiZSB1cGRhdGVkLiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSB1c2VyIG9mIHRoZSBuZy1tb2RlbFxuICAgKiBkaXJlY3RpdmUgd2lsbCBpbXBsZW1lbnQgdGhpcyBtZXRob2QuXG4gICAqXG4gICAqIFRoZSBgJHJlbmRlcigpYCBtZXRob2QgaXMgaW52b2tlZCBpbiB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbnM6XG4gICAqXG4gICAqICogYCRyb2xsYmFja1ZpZXdWYWx1ZSgpYCBpcyBjYWxsZWQuICBJZiB3ZSBhcmUgcm9sbGluZyBiYWNrIHRoZSB2aWV3IHZhbHVlIHRvIHRoZSBsYXN0XG4gICAqICAgY29tbWl0dGVkIHZhbHVlIHRoZW4gYCRyZW5kZXIoKWAgaXMgY2FsbGVkIHRvIHVwZGF0ZSB0aGUgaW5wdXQgY29udHJvbC5cbiAgICogKiBUaGUgdmFsdWUgcmVmZXJlbmNlZCBieSBgbmctbW9kZWxgIGlzIGNoYW5nZWQgcHJvZ3JhbW1hdGljYWxseSBhbmQgYm90aCB0aGUgYCRtb2RlbFZhbHVlYCBhbmRcbiAgICogICB0aGUgYCR2aWV3VmFsdWVgIGFyZSBkaWZmZXJlbnQgdG8gbGFzdCB0aW1lLlxuICAgKlxuICAgKiBTaW5jZSBgbmctbW9kZWxgIGRvZXMgbm90IGRvIGEgZGVlcCB3YXRjaCwgYCRyZW5kZXIoKWAgaXMgb25seSBpbnZva2VkIGlmIHRoZSB2YWx1ZXMgb2ZcbiAgICogYCRtb2RlbFZhbHVlYCBhbmQgYCR2aWV3VmFsdWVgIGFyZSBhY3R1YWxseSBkaWZmZXJlbnQgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWUuIElmIGAkbW9kZWxWYWx1ZWBcbiAgICogb3IgYCR2aWV3VmFsdWVgIGFyZSBvYmplY3RzIChyYXRoZXIgdGhhbiBhIHN0cmluZyBvciBudW1iZXIpIHRoZW4gYCRyZW5kZXIoKWAgd2lsbCBub3QgYmVcbiAgICogaW52b2tlZCBpZiB5b3Ugb25seSBjaGFuZ2UgYSBwcm9wZXJ0eSBvbiB0aGUgb2JqZWN0cy5cbiAgICovXG4gIHRoaXMuJHJlbmRlciA9IG5vb3A7XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkaXNFbXB0eVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgdmFsdWUgb2YgdGhlIGlucHV0IGlzIGVtcHR5LlxuICAgKlxuICAgKiBGb3IgaW5zdGFuY2UsIHRoZSByZXF1aXJlZCBkaXJlY3RpdmUgZG9lcyB0aGlzIHRvIHdvcmsgb3V0IGlmIHRoZSBpbnB1dCBoYXMgZGF0YSBvciBub3QuXG4gICAqIFRoZSBkZWZhdWx0IGAkaXNFbXB0eWAgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIGlzIGB1bmRlZmluZWRgLCBgJydgLCBgbnVsbGAgb3IgYE5hTmAuXG4gICAqXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBmb3IgaW5wdXQgZGlyZWN0aXZlcyB3aG9zZSBjb25jZXB0IG9mIGJlaW5nIGVtcHR5IGlzIGRpZmZlcmVudCB0byB0aGVcbiAgICogZGVmYXVsdC4gVGhlIGBjaGVja2JveElucHV0VHlwZWAgZGlyZWN0aXZlIGRvZXMgdGhpcyBiZWNhdXNlIGluIGl0cyBjYXNlIGEgdmFsdWUgb2YgYGZhbHNlYFxuICAgKiBpbXBsaWVzIGVtcHR5LlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIE1vZGVsIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBgdmFsdWVgIGlzIGVtcHR5LlxuICAgKi9cbiAgdGhpcy4kaXNFbXB0eSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSB8fCB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlO1xuICB9O1xuXG4gIHZhciBwYXJlbnRGb3JtID0gJGVsZW1lbnQuaW5oZXJpdGVkRGF0YSgnJGZvcm1Db250cm9sbGVyJykgfHwgbnVsbEZvcm1DdHJsLFxuICAgICAgY3VycmVudFZhbGlkYXRpb25SdW5JZCA9IDA7XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkc2V0VmFsaWRpdHlcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENoYW5nZSB0aGUgdmFsaWRpdHkgc3RhdGUsIGFuZCBub3RpZnkgdGhlIGZvcm0uXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgd2l0aGluICRwYXJzZXJzLyRmb3JtYXR0ZXJzIG9yIGEgY3VzdG9tIHZhbGlkYXRpb24gaW1wbGVtZW50YXRpb24uXG4gICAqIEhvd2V2ZXIsIGluIG1vc3QgY2FzZXMgaXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdXNlIHRoZSBgbmdNb2RlbC4kdmFsaWRhdG9yc2AgYW5kXG4gICAqIGBuZ01vZGVsLiRhc3luY1ZhbGlkYXRvcnNgIGNvbGxlY3Rpb25zIHdoaWNoIHdpbGwgY2FsbCBgJHNldFZhbGlkaXR5YCBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsaWRhdGlvbkVycm9yS2V5IE5hbWUgb2YgdGhlIHZhbGlkYXRvci4gVGhlIGB2YWxpZGF0aW9uRXJyb3JLZXlgIHdpbGwgYmUgYXNzaWduZWRcbiAgICogICAgICAgIHRvIGVpdGhlciBgJGVycm9yW3ZhbGlkYXRpb25FcnJvcktleV1gIG9yIGAkcGVuZGluZ1t2YWxpZGF0aW9uRXJyb3JLZXldYFxuICAgKiAgICAgICAgKGZvciB1bmZ1bGZpbGxlZCBgJGFzeW5jVmFsaWRhdG9yc2ApLCBzbyB0aGF0IGl0IGlzIGF2YWlsYWJsZSBmb3IgZGF0YS1iaW5kaW5nLlxuICAgKiAgICAgICAgVGhlIGB2YWxpZGF0aW9uRXJyb3JLZXlgIHNob3VsZCBiZSBpbiBjYW1lbENhc2UgYW5kIHdpbGwgZ2V0IGNvbnZlcnRlZCBpbnRvIGRhc2gtY2FzZVxuICAgKiAgICAgICAgZm9yIGNsYXNzIG5hbWUuIEV4YW1wbGU6IGBteUVycm9yYCB3aWxsIHJlc3VsdCBpbiBgbmctdmFsaWQtbXktZXJyb3JgIGFuZCBgbmctaW52YWxpZC1teS1lcnJvcmBcbiAgICogICAgICAgIGNsYXNzIGFuZCBjYW4gYmUgYm91bmQgdG8gYXMgIGB7e3NvbWVGb3JtLnNvbWVDb250cm9sLiRlcnJvci5teUVycm9yfX1gIC5cbiAgICogQHBhcmFtIHtib29sZWFufSBpc1ZhbGlkIFdoZXRoZXIgdGhlIGN1cnJlbnQgc3RhdGUgaXMgdmFsaWQgKHRydWUpLCBpbnZhbGlkIChmYWxzZSksIHBlbmRpbmcgKHVuZGVmaW5lZCksXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvciBza2lwcGVkIChudWxsKS4gUGVuZGluZyBpcyB1c2VkIGZvciB1bmZ1bGZpbGxlZCBgJGFzeW5jVmFsaWRhdG9yc2AuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBTa2lwcGVkIGlzIHVzZWQgYnkgQW5ndWxhciB3aGVuIHZhbGlkYXRvcnMgZG8gbm90IHJ1biBiZWNhdXNlIG9mIHBhcnNlIGVycm9ycyBhbmRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYCRhc3luY1ZhbGlkYXRvcnNgIGRvIG5vdCBydW4gYmVjYXVzZSBhbnkgb2YgdGhlIGAkdmFsaWRhdG9yc2AgZmFpbGVkLlxuICAgKi9cbiAgYWRkU2V0VmFsaWRpdHlNZXRob2Qoe1xuICAgIGN0cmw6IHRoaXMsXG4gICAgJGVsZW1lbnQ6ICRlbGVtZW50LFxuICAgIHNldDogZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IHRydWU7XG4gICAgfSxcbiAgICB1bnNldDogZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgICAgZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07XG4gICAgfSxcbiAgICBwYXJlbnRGb3JtOiBwYXJlbnRGb3JtLFxuICAgICRhbmltYXRlOiAkYW5pbWF0ZVxuICB9KTtcblxuICAvKipcbiAgICogQG5nZG9jIG1ldGhvZFxuICAgKiBAbmFtZSBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyIyRzZXRQcmlzdGluZVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyB0aGUgY29udHJvbCB0byBpdHMgcHJpc3RpbmUgc3RhdGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gcmVtb3ZlIHRoZSAnbmctZGlydHknIGNsYXNzIGFuZCBzZXQgdGhlIGNvbnRyb2wgdG8gaXRzIHByaXN0aW5lXG4gICAqIHN0YXRlIChuZy1wcmlzdGluZSBjbGFzcykuIEEgbW9kZWwgaXMgY29uc2lkZXJlZCB0byBiZSBwcmlzdGluZSB3aGVuIHRoZSBtb2RlbCBoYXMgbm90IGJlZW4gY2hhbmdlZFxuICAgKiBmcm9tIHdoZW4gZmlyc3QgY29tcGlsZWQgd2l0aGluIHRoZW4gZm9ybS5cbiAgICovXG4gIHRoaXMuJHNldFByaXN0aW5lID0gZnVuY3Rpb24oKSB7XG4gICAgY3RybC4kZGlydHkgPSBmYWxzZTtcbiAgICBjdHJsLiRwcmlzdGluZSA9IHRydWU7XG4gICAgJGFuaW1hdGUucmVtb3ZlQ2xhc3MoJGVsZW1lbnQsIERJUlRZX0NMQVNTKTtcbiAgICAkYW5pbWF0ZS5hZGRDbGFzcygkZWxlbWVudCwgUFJJU1RJTkVfQ0xBU1MpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAbmdkb2MgbWV0aG9kXG4gICAqIEBuYW1lIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJHNldFVudG91Y2hlZFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyB0aGUgY29udHJvbCB0byBpdHMgdW50b3VjaGVkIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgJ25nLXRvdWNoZWQnIGNsYXNzIGFuZCBzZXQgdGhlIGNvbnRyb2wgdG8gaXRzXG4gICAqIHVudG91Y2hlZCBzdGF0ZSAobmctdW50b3VjaGVkIGNsYXNzKS4gVXBvbiBjb21waWxhdGlvbiwgYSBtb2RlbCBpcyBzZXQgYXMgdW50b3VjaGVkXG4gICAqIGJ5IGRlZmF1bHQsIGhvd2V2ZXIgdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byByZXN0b3JlIHRoYXQgc3RhdGUgaWYgdGhlIG1vZGVsIGhhc1xuICAgKiBhbHJlYWR5IGJlZW4gdG91Y2hlZCBieSB0aGUgdXNlci5cbiAgICovXG4gIHRoaXMuJHNldFVudG91Y2hlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGN0cmwuJHRvdWNoZWQgPSBmYWxzZTtcbiAgICBjdHJsLiR1bnRvdWNoZWQgPSB0cnVlO1xuICAgICRhbmltYXRlLnNldENsYXNzKCRlbGVtZW50LCBVTlRPVUNIRURfQ0xBU1MsIFRPVUNIRURfQ0xBU1MpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAbmdkb2MgbWV0aG9kXG4gICAqIEBuYW1lIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJHNldFRvdWNoZWRcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIGNvbnRyb2wgdG8gaXRzIHRvdWNoZWQgc3RhdGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gcmVtb3ZlIHRoZSAnbmctdW50b3VjaGVkJyBjbGFzcyBhbmQgc2V0IHRoZSBjb250cm9sIHRvIGl0c1xuICAgKiB0b3VjaGVkIHN0YXRlIChuZy10b3VjaGVkIGNsYXNzKS4gQSBtb2RlbCBpcyBjb25zaWRlcmVkIHRvIGJlIHRvdWNoZWQgd2hlbiB0aGUgdXNlciBoYXNcbiAgICogZmlyc3QgaW50ZXJhY3RlZCAoZm9jdXNzZWQpIG9uIHRoZSBtb2RlbCBpbnB1dCBlbGVtZW50IGFuZCB0aGVuIHNoaWZ0ZWQgZm9jdXMgYXdheSAoYmx1cnJlZClcbiAgICogZnJvbSB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICovXG4gIHRoaXMuJHNldFRvdWNoZWQgPSBmdW5jdGlvbigpIHtcbiAgICBjdHJsLiR0b3VjaGVkID0gdHJ1ZTtcbiAgICBjdHJsLiR1bnRvdWNoZWQgPSBmYWxzZTtcbiAgICAkYW5pbWF0ZS5zZXRDbGFzcygkZWxlbWVudCwgVE9VQ0hFRF9DTEFTUywgVU5UT1VDSEVEX0NMQVNTKTtcbiAgfTtcblxuICAvKipcbiAgICogQG5nZG9jIG1ldGhvZFxuICAgKiBAbmFtZSBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyIyRyb2xsYmFja1ZpZXdWYWx1ZVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQ2FuY2VsIGFuIHVwZGF0ZSBhbmQgcmVzZXQgdGhlIGlucHV0IGVsZW1lbnQncyB2YWx1ZSB0byBwcmV2ZW50IGFuIHVwZGF0ZSB0byB0aGUgYCRtb2RlbFZhbHVlYCxcbiAgICogd2hpY2ggbWF5IGJlIGNhdXNlZCBieSBhIHBlbmRpbmcgZGVib3VuY2VkIGV2ZW50IG9yIGJlY2F1c2UgdGhlIGlucHV0IGlzIHdhaXRpbmcgZm9yIGEgc29tZVxuICAgKiBmdXR1cmUgZXZlbnQuXG4gICAqXG4gICAqIElmIHlvdSBoYXZlIGFuIGlucHV0IHRoYXQgdXNlcyBgbmctbW9kZWwtb3B0aW9uc2AgdG8gc2V0IHVwIGRlYm91bmNlZCBldmVudHMgb3IgZXZlbnRzIHN1Y2hcbiAgICogYXMgYmx1ciB5b3UgY2FuIGhhdmUgYSBzaXR1YXRpb24gd2hlcmUgdGhlcmUgaXMgYSBwZXJpb2Qgd2hlbiB0aGUgYCR2aWV3VmFsdWVgXG4gICAqIGlzIG91dCBvZiBzeW5jaCB3aXRoIHRoZSBuZ01vZGVsJ3MgYCRtb2RlbFZhbHVlYC5cbiAgICpcbiAgICogSW4gdGhpcyBjYXNlLCB5b3UgY2FuIHJ1biBpbnRvIGRpZmZpY3VsdGllcyBpZiB5b3UgdHJ5IHRvIHVwZGF0ZSB0aGUgbmdNb2RlbCdzIGAkbW9kZWxWYWx1ZWBcbiAgICogcHJvZ3JhbW1hdGljYWxseSBiZWZvcmUgdGhlc2UgZGVib3VuY2VkL2Z1dHVyZSBldmVudHMgaGF2ZSByZXNvbHZlZC9vY2N1cnJlZCwgYmVjYXVzZSBBbmd1bGFyJ3NcbiAgICogZGlydHkgY2hlY2tpbmcgbWVjaGFuaXNtIGlzIG5vdCBhYmxlIHRvIHRlbGwgd2hldGhlciB0aGUgbW9kZWwgaGFzIGFjdHVhbGx5IGNoYW5nZWQgb3Igbm90LlxuICAgKlxuICAgKiBUaGUgYCRyb2xsYmFja1ZpZXdWYWx1ZSgpYCBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgcHJvZ3JhbW1hdGljYWxseSBjaGFuZ2luZyB0aGUgbW9kZWwgb2YgYW5cbiAgICogaW5wdXQgd2hpY2ggbWF5IGhhdmUgc3VjaCBldmVudHMgcGVuZGluZy4gVGhpcyBpcyBpbXBvcnRhbnQgaW4gb3JkZXIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlXG4gICAqIGlucHV0IGZpZWxkIHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBuZXcgbW9kZWwgdmFsdWUgYW5kIGFueSBwZW5kaW5nIG9wZXJhdGlvbnMgYXJlIGNhbmNlbGxlZC5cbiAgICpcbiAgICogPGV4YW1wbGUgbmFtZT1cIm5nLW1vZGVsLWNhbmNlbC11cGRhdGVcIiBtb2R1bGU9XCJjYW5jZWwtdXBkYXRlLWV4YW1wbGVcIj5cbiAgICogICA8ZmlsZSBuYW1lPVwiYXBwLmpzXCI+XG4gICAqICAgICBhbmd1bGFyLm1vZHVsZSgnY2FuY2VsLXVwZGF0ZS1leGFtcGxlJywgW10pXG4gICAqXG4gICAqICAgICAuY29udHJvbGxlcignQ2FuY2VsVXBkYXRlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XG4gICAqICAgICAgICRzY29wZS5yZXNldFdpdGhDYW5jZWwgPSBmdW5jdGlvbihlKSB7XG4gICAqICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAyNykge1xuICAgKiAgICAgICAgICAgJHNjb3BlLm15Rm9ybS5teUlucHV0MS4kcm9sbGJhY2tWaWV3VmFsdWUoKTtcbiAgICogICAgICAgICAgICRzY29wZS5teVZhbHVlID0gJyc7XG4gICAqICAgICAgICAgfVxuICAgKiAgICAgICB9O1xuICAgKiAgICAgICAkc2NvcGUucmVzZXRXaXRob3V0Q2FuY2VsID0gZnVuY3Rpb24oZSkge1xuICAgKiAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMjcpIHtcbiAgICogICAgICAgICAgICRzY29wZS5teVZhbHVlID0gJyc7XG4gICAqICAgICAgICAgfVxuICAgKiAgICAgICB9O1xuICAgKiAgICAgfV0pO1xuICAgKiAgIDwvZmlsZT5cbiAgICogICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgKiAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiQ2FuY2VsVXBkYXRlQ29udHJvbGxlclwiPlxuICAgKiAgICAgICA8cD5UcnkgdHlwaW5nIHNvbWV0aGluZyBpbiBlYWNoIGlucHV0LiAgU2VlIHRoYXQgdGhlIG1vZGVsIG9ubHkgdXBkYXRlcyB3aGVuIHlvdVxuICAgKiAgICAgICAgICBibHVyIG9mZiB0aGUgaW5wdXQuXG4gICAqICAgICAgICA8L3A+XG4gICAqICAgICAgICA8cD5Ob3cgc2VlIHdoYXQgaGFwcGVucyBpZiB5b3Ugc3RhcnQgdHlwaW5nIHRoZW4gcHJlc3MgdGhlIEVzY2FwZSBrZXk8L3A+XG4gICAqXG4gICAqICAgICAgIDxmb3JtIG5hbWU9XCJteUZvcm1cIiBuZy1tb2RlbC1vcHRpb25zPVwieyB1cGRhdGVPbjogJ2JsdXInIH1cIj5cbiAgICogICAgICAgICA8cD5XaXRoICRyb2xsYmFja1ZpZXdWYWx1ZSgpPC9wPlxuICAgKiAgICAgICAgIDxpbnB1dCBuYW1lPVwibXlJbnB1dDFcIiBuZy1tb2RlbD1cIm15VmFsdWVcIiBuZy1rZXlkb3duPVwicmVzZXRXaXRoQ2FuY2VsKCRldmVudClcIj48YnIvPlxuICAgKiAgICAgICAgIG15VmFsdWU6IFwie3sgbXlWYWx1ZSB9fVwiXG4gICAqXG4gICAqICAgICAgICAgPHA+V2l0aG91dCAkcm9sbGJhY2tWaWV3VmFsdWUoKTwvcD5cbiAgICogICAgICAgICA8aW5wdXQgbmFtZT1cIm15SW5wdXQyXCIgbmctbW9kZWw9XCJteVZhbHVlXCIgbmcta2V5ZG93bj1cInJlc2V0V2l0aG91dENhbmNlbCgkZXZlbnQpXCI+PGJyLz5cbiAgICogICAgICAgICBteVZhbHVlOiBcInt7IG15VmFsdWUgfX1cIlxuICAgKiAgICAgICA8L2Zvcm0+XG4gICAqICAgICA8L2Rpdj5cbiAgICogICA8L2ZpbGU+XG4gICAqIDwvZXhhbXBsZT5cbiAgICovXG4gIHRoaXMuJHJvbGxiYWNrVmlld1ZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgJHRpbWVvdXQuY2FuY2VsKHBlbmRpbmdEZWJvdW5jZSk7XG4gICAgY3RybC4kdmlld1ZhbHVlID0gY3RybC4kJGxhc3RDb21taXR0ZWRWaWV3VmFsdWU7XG4gICAgY3RybC4kcmVuZGVyKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBuZ2RvYyBtZXRob2RcbiAgICogQG5hbWUgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkdmFsaWRhdGVcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFJ1bnMgZWFjaCBvZiB0aGUgcmVnaXN0ZXJlZCB2YWxpZGF0b3JzIChmaXJzdCBzeW5jaHJvbm91cyB2YWxpZGF0b3JzIGFuZCB0aGVuIGFzeW5jaHJvbm91cyB2YWxpZGF0b3JzKS5cbiAgICovXG4gIHRoaXMuJHZhbGlkYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgLy8gaWdub3JlICR2YWxpZGF0ZSBiZWZvcmUgbW9kZWwgaXMgaW5pdGlhbGl6ZWRcbiAgICBpZiAoaXNOdW1iZXIoY3RybC4kbW9kZWxWYWx1ZSkgJiYgaXNOYU4oY3RybC4kbW9kZWxWYWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy4kJHBhcnNlQW5kVmFsaWRhdGUoKTtcbiAgfTtcblxuICB0aGlzLiQkcnVuVmFsaWRhdG9ycyA9IGZ1bmN0aW9uKHBhcnNlVmFsaWQsIG1vZGVsVmFsdWUsIHZpZXdWYWx1ZSwgZG9uZUNhbGxiYWNrKSB7XG4gICAgY3VycmVudFZhbGlkYXRpb25SdW5JZCsrO1xuICAgIHZhciBsb2NhbFZhbGlkYXRpb25SdW5JZCA9IGN1cnJlbnRWYWxpZGF0aW9uUnVuSWQ7XG5cbiAgICAvLyBjaGVjayBwYXJzZXIgZXJyb3JcbiAgICBpZiAoIXByb2Nlc3NQYXJzZUVycm9ycyhwYXJzZVZhbGlkKSkge1xuICAgICAgdmFsaWRhdGlvbkRvbmUoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXByb2Nlc3NTeW5jVmFsaWRhdG9ycygpKSB7XG4gICAgICB2YWxpZGF0aW9uRG9uZShmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHByb2Nlc3NBc3luY1ZhbGlkYXRvcnMoKTtcblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NQYXJzZUVycm9ycyhwYXJzZVZhbGlkKSB7XG4gICAgICB2YXIgZXJyb3JLZXkgPSBjdHJsLiQkcGFyc2VyTmFtZSB8fCAncGFyc2UnO1xuICAgICAgaWYgKHBhcnNlVmFsaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZXRWYWxpZGl0eShlcnJvcktleSwgbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRWYWxpZGl0eShlcnJvcktleSwgcGFyc2VWYWxpZCk7XG4gICAgICAgIGlmICghcGFyc2VWYWxpZCkge1xuICAgICAgICAgIGZvckVhY2goY3RybC4kdmFsaWRhdG9ycywgZnVuY3Rpb24odiwgbmFtZSkge1xuICAgICAgICAgICAgc2V0VmFsaWRpdHkobmFtZSwgbnVsbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZm9yRWFjaChjdHJsLiRhc3luY1ZhbGlkYXRvcnMsIGZ1bmN0aW9uKHYsIG5hbWUpIHtcbiAgICAgICAgICAgIHNldFZhbGlkaXR5KG5hbWUsIG51bGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1N5bmNWYWxpZGF0b3JzKCkge1xuICAgICAgdmFyIHN5bmNWYWxpZGF0b3JzVmFsaWQgPSB0cnVlO1xuICAgICAgZm9yRWFjaChjdHJsLiR2YWxpZGF0b3JzLCBmdW5jdGlvbih2YWxpZGF0b3IsIG5hbWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHZhbGlkYXRvcihtb2RlbFZhbHVlLCB2aWV3VmFsdWUpO1xuICAgICAgICBzeW5jVmFsaWRhdG9yc1ZhbGlkID0gc3luY1ZhbGlkYXRvcnNWYWxpZCAmJiByZXN1bHQ7XG4gICAgICAgIHNldFZhbGlkaXR5KG5hbWUsIHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICAgIGlmICghc3luY1ZhbGlkYXRvcnNWYWxpZCkge1xuICAgICAgICBmb3JFYWNoKGN0cmwuJGFzeW5jVmFsaWRhdG9ycywgZnVuY3Rpb24odiwgbmFtZSkge1xuICAgICAgICAgIHNldFZhbGlkaXR5KG5hbWUsIG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0FzeW5jVmFsaWRhdG9ycygpIHtcbiAgICAgIHZhciB2YWxpZGF0b3JQcm9taXNlcyA9IFtdO1xuICAgICAgdmFyIGFsbFZhbGlkID0gdHJ1ZTtcbiAgICAgIGZvckVhY2goY3RybC4kYXN5bmNWYWxpZGF0b3JzLCBmdW5jdGlvbih2YWxpZGF0b3IsIG5hbWUpIHtcbiAgICAgICAgdmFyIHByb21pc2UgPSB2YWxpZGF0b3IobW9kZWxWYWx1ZSwgdmlld1ZhbHVlKTtcbiAgICAgICAgaWYgKCFpc1Byb21pc2VMaWtlKHByb21pc2UpKSB7XG4gICAgICAgICAgdGhyb3cgJG5nTW9kZWxNaW5FcnIoXCIkYXN5bmNWYWxpZGF0b3JzXCIsXG4gICAgICAgICAgICBcIkV4cGVjdGVkIGFzeW5jaHJvbm91cyB2YWxpZGF0b3IgdG8gcmV0dXJuIGEgcHJvbWlzZSBidXQgZ290ICd7MH0nIGluc3RlYWQuXCIsIHByb21pc2UpO1xuICAgICAgICB9XG4gICAgICAgIHNldFZhbGlkaXR5KG5hbWUsIHVuZGVmaW5lZCk7XG4gICAgICAgIHZhbGlkYXRvclByb21pc2VzLnB1c2gocHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHNldFZhbGlkaXR5KG5hbWUsIHRydWUpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIGFsbFZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgc2V0VmFsaWRpdHkobmFtZSwgZmFsc2UpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICAgIGlmICghdmFsaWRhdG9yUHJvbWlzZXMubGVuZ3RoKSB7XG4gICAgICAgIHZhbGlkYXRpb25Eb25lKHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJHEuYWxsKHZhbGlkYXRvclByb21pc2VzKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhbGlkYXRpb25Eb25lKGFsbFZhbGlkKTtcbiAgICAgICAgfSwgbm9vcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0VmFsaWRpdHkobmFtZSwgaXNWYWxpZCkge1xuICAgICAgaWYgKGxvY2FsVmFsaWRhdGlvblJ1bklkID09PSBjdXJyZW50VmFsaWRhdGlvblJ1bklkKSB7XG4gICAgICAgIGN0cmwuJHNldFZhbGlkaXR5KG5hbWUsIGlzVmFsaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRpb25Eb25lKGFsbFZhbGlkKSB7XG4gICAgICBpZiAobG9jYWxWYWxpZGF0aW9uUnVuSWQgPT09IGN1cnJlbnRWYWxpZGF0aW9uUnVuSWQpIHtcblxuICAgICAgICBkb25lQ2FsbGJhY2soYWxsVmFsaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQG5nZG9jIG1ldGhvZFxuICAgKiBAbmFtZSBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyIyRjb21taXRWaWV3VmFsdWVcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIENvbW1pdCBhIHBlbmRpbmcgdXBkYXRlIHRvIHRoZSBgJG1vZGVsVmFsdWVgLlxuICAgKlxuICAgKiBVcGRhdGVzIG1heSBiZSBwZW5kaW5nIGJ5IGEgZGVib3VuY2VkIGV2ZW50IG9yIGJlY2F1c2UgdGhlIGlucHV0IGlzIHdhaXRpbmcgZm9yIGEgc29tZSBmdXR1cmVcbiAgICogZXZlbnQgZGVmaW5lZCBpbiBgbmctbW9kZWwtb3B0aW9uc2AuIHRoaXMgbWV0aG9kIGlzIHJhcmVseSBuZWVkZWQgYXMgYE5nTW9kZWxDb250cm9sbGVyYFxuICAgKiB1c3VhbGx5IGhhbmRsZXMgY2FsbGluZyB0aGlzIGluIHJlc3BvbnNlIHRvIGlucHV0IGV2ZW50cy5cbiAgICovXG4gIHRoaXMuJGNvbW1pdFZpZXdWYWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2aWV3VmFsdWUgPSBjdHJsLiR2aWV3VmFsdWU7XG5cbiAgICAkdGltZW91dC5jYW5jZWwocGVuZGluZ0RlYm91bmNlKTtcblxuICAgIC8vIElmIHRoZSB2aWV3IHZhbHVlIGhhcyBub3QgY2hhbmdlZCB0aGVuIHdlIHNob3VsZCBqdXN0IGV4aXQsIGV4Y2VwdCBpbiB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpc1xuICAgIC8vIGEgbmF0aXZlIHZhbGlkYXRvciBvbiB0aGUgZWxlbWVudC4gSW4gdGhpcyBjYXNlIHRoZSB2YWxpZGF0aW9uIHN0YXRlIG1heSBoYXZlIGNoYW5nZWQgZXZlbiB0aG91Z2hcbiAgICAvLyB0aGUgdmlld1ZhbHVlIGhhcyBzdGF5ZWQgZW1wdHkuXG4gICAgaWYgKGN0cmwuJCRsYXN0Q29tbWl0dGVkVmlld1ZhbHVlID09PSB2aWV3VmFsdWUgJiYgKHZpZXdWYWx1ZSAhPT0gJycgfHwgIWN0cmwuJCRoYXNOYXRpdmVWYWxpZGF0b3JzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdHJsLiQkbGFzdENvbW1pdHRlZFZpZXdWYWx1ZSA9IHZpZXdWYWx1ZTtcblxuICAgIC8vIGNoYW5nZSB0byBkaXJ0eVxuICAgIGlmIChjdHJsLiRwcmlzdGluZSkge1xuICAgICAgY3RybC4kZGlydHkgPSB0cnVlO1xuICAgICAgY3RybC4kcHJpc3RpbmUgPSBmYWxzZTtcbiAgICAgICRhbmltYXRlLnJlbW92ZUNsYXNzKCRlbGVtZW50LCBQUklTVElORV9DTEFTUyk7XG4gICAgICAkYW5pbWF0ZS5hZGRDbGFzcygkZWxlbWVudCwgRElSVFlfQ0xBU1MpO1xuICAgICAgcGFyZW50Rm9ybS4kc2V0RGlydHkoKTtcbiAgICB9XG4gICAgdGhpcy4kJHBhcnNlQW5kVmFsaWRhdGUoKTtcbiAgfTtcblxuICB0aGlzLiQkcGFyc2VBbmRWYWxpZGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2aWV3VmFsdWUgPSBjdHJsLiQkbGFzdENvbW1pdHRlZFZpZXdWYWx1ZTtcbiAgICB2YXIgbW9kZWxWYWx1ZSA9IHZpZXdWYWx1ZTtcbiAgICB2YXIgcGFyc2VyVmFsaWQgPSBpc1VuZGVmaW5lZChtb2RlbFZhbHVlKSA/IHVuZGVmaW5lZCA6IHRydWU7XG5cbiAgICBpZiAocGFyc2VyVmFsaWQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3RybC4kcGFyc2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtb2RlbFZhbHVlID0gY3RybC4kcGFyc2Vyc1tpXShtb2RlbFZhbHVlKTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKG1vZGVsVmFsdWUpKSB7XG4gICAgICAgICAgcGFyc2VyVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIoY3RybC4kbW9kZWxWYWx1ZSkgJiYgaXNOYU4oY3RybC4kbW9kZWxWYWx1ZSkpIHtcbiAgICAgIC8vIGN0cmwuJG1vZGVsVmFsdWUgaGFzIG5vdCBiZWVuIHRvdWNoZWQgeWV0Li4uXG4gICAgICBjdHJsLiRtb2RlbFZhbHVlID0gbmdNb2RlbEdldCgpO1xuICAgIH1cbiAgICB2YXIgcHJldk1vZGVsVmFsdWUgPSBjdHJsLiRtb2RlbFZhbHVlO1xuICAgIHZhciBhbGxvd0ludmFsaWQgPSBjdHJsLiRvcHRpb25zICYmIGN0cmwuJG9wdGlvbnMuYWxsb3dJbnZhbGlkO1xuICAgIGlmIChhbGxvd0ludmFsaWQpIHtcbiAgICAgIGN0cmwuJG1vZGVsVmFsdWUgPSBtb2RlbFZhbHVlO1xuICAgICAgd3JpdGVUb01vZGVsSWZOZWVkZWQoKTtcbiAgICB9XG4gICAgY3RybC4kJHJ1blZhbGlkYXRvcnMocGFyc2VyVmFsaWQsIG1vZGVsVmFsdWUsIHZpZXdWYWx1ZSwgZnVuY3Rpb24oYWxsVmFsaWQpIHtcbiAgICAgIGlmICghYWxsb3dJbnZhbGlkKSB7XG4gICAgICAgIC8vIE5vdGU6IERvbid0IGNoZWNrIGN0cmwuJHZhbGlkIGhlcmUsIGFzIHdlIGNvdWxkIGhhdmVcbiAgICAgICAgLy8gZXh0ZXJuYWwgdmFsaWRhdG9ycyAoZS5nLiBjYWxjdWxhdGVkIG9uIHRoZSBzZXJ2ZXIpLFxuICAgICAgICAvLyB0aGF0IGp1c3QgY2FsbCAkc2V0VmFsaWRpdHkgYW5kIG5lZWQgdGhlIG1vZGVsIHZhbHVlXG4gICAgICAgIC8vIHRvIGNhbGN1bGF0ZSB0aGVpciB2YWxpZGl0eS5cbiAgICAgICAgY3RybC4kbW9kZWxWYWx1ZSA9IGFsbFZhbGlkID8gbW9kZWxWYWx1ZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgd3JpdGVUb01vZGVsSWZOZWVkZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHdyaXRlVG9Nb2RlbElmTmVlZGVkKCkge1xuICAgICAgaWYgKGN0cmwuJG1vZGVsVmFsdWUgIT09IHByZXZNb2RlbFZhbHVlKSB7XG4gICAgICAgIGN0cmwuJCR3cml0ZU1vZGVsVG9TY29wZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB0aGlzLiQkd3JpdGVNb2RlbFRvU2NvcGUgPSBmdW5jdGlvbigpIHtcbiAgICBuZ01vZGVsU2V0KGN0cmwuJG1vZGVsVmFsdWUpO1xuICAgIGZvckVhY2goY3RybC4kdmlld0NoYW5nZUxpc3RlbmVycywgZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxpc3RlbmVyKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAbmdkb2MgbWV0aG9kXG4gICAqIEBuYW1lIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJHNldFZpZXdWYWx1ZVxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVXBkYXRlIHRoZSB2aWV3IHZhbHVlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYW4gaW5wdXQgZGlyZWN0aXZlIHdhbnQgdG8gY2hhbmdlIHRoZSB2aWV3IHZhbHVlOyB0eXBpY2FsbHksXG4gICAqIHRoaXMgaXMgZG9uZSBmcm9tIHdpdGhpbiBhIERPTSBldmVudCBoYW5kbGVyLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSB7QGxpbmsgbmcuZGlyZWN0aXZlOmlucHV0IGlucHV0fSBjYWxscyBpdCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgY2hhbmdlcyBhbmRcbiAgICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpzZWxlY3Qgc2VsZWN0fSBjYWxscyBpdCB3aGVuIGFuIG9wdGlvbiBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogSWYgdGhlIG5ldyBgdmFsdWVgIGlzIGFuIG9iamVjdCAocmF0aGVyIHRoYW4gYSBzdHJpbmcgb3IgYSBudW1iZXIpLCB3ZSBzaG91bGQgbWFrZSBhIGNvcHkgb2YgdGhlXG4gICAqIG9iamVjdCBiZWZvcmUgcGFzc2luZyBpdCB0byBgJHNldFZpZXdWYWx1ZWAuICBUaGlzIGlzIGJlY2F1c2UgYG5nTW9kZWxgIGRvZXMgbm90IHBlcmZvcm0gYSBkZWVwXG4gICAqIHdhdGNoIG9mIG9iamVjdHMsIGl0IG9ubHkgbG9va3MgZm9yIGEgY2hhbmdlIG9mIGlkZW50aXR5LiBJZiB5b3Ugb25seSBjaGFuZ2UgdGhlIHByb3BlcnR5IG9mXG4gICAqIHRoZSBvYmplY3QgdGhlbiBuZ01vZGVsIHdpbGwgbm90IHJlYWxpc2UgdGhhdCB0aGUgb2JqZWN0IGhhcyBjaGFuZ2VkIGFuZCB3aWxsIG5vdCBpbnZva2UgdGhlXG4gICAqIGAkcGFyc2Vyc2AgYW5kIGAkdmFsaWRhdG9yc2AgcGlwZWxpbmVzLlxuICAgKlxuICAgKiBGb3IgdGhpcyByZWFzb24sIHlvdSBzaG91bGQgbm90IGNoYW5nZSBwcm9wZXJ0aWVzIG9mIHRoZSBjb3B5IG9uY2UgaXQgaGFzIGJlZW4gcGFzc2VkIHRvXG4gICAqIGAkc2V0Vmlld1ZhbHVlYC4gT3RoZXJ3aXNlIHlvdSBtYXkgY2F1c2UgdGhlIG1vZGVsIHZhbHVlIG9uIHRoZSBzY29wZSB0byBjaGFuZ2UgaW5jb3JyZWN0bHkuXG4gICAqXG4gICAqIFdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCB0aGUgbmV3IGB2YWx1ZWAgd2lsbCBiZSBzdGFnZWQgZm9yIGNvbW1pdHRpbmcgdGhyb3VnaCB0aGUgYCRwYXJzZXJzYFxuICAgKiBhbmQgYCR2YWxpZGF0b3JzYCBwaXBlbGluZXMuIElmIHRoZXJlIGFyZSBubyBzcGVjaWFsIHtAbGluayBuZ01vZGVsT3B0aW9uc30gc3BlY2lmaWVkIHRoZW4gdGhlIHN0YWdlZFxuICAgKiB2YWx1ZSBzZW50IGRpcmVjdGx5IGZvciBwcm9jZXNzaW5nLCBmaW5hbGx5IHRvIGJlIGFwcGxpZWQgdG8gYCRtb2RlbFZhbHVlYCBhbmQgdGhlbiB0aGVcbiAgICogKipleHByZXNzaW9uKiogc3BlY2lmaWVkIGluIHRoZSBgbmctbW9kZWxgIGF0dHJpYnV0ZS5cbiAgICpcbiAgICogTGFzdGx5LCBhbGwgdGhlIHJlZ2lzdGVyZWQgY2hhbmdlIGxpc3RlbmVycywgaW4gdGhlIGAkdmlld0NoYW5nZUxpc3RlbmVyc2AgbGlzdCwgYXJlIGNhbGxlZC5cbiAgICpcbiAgICogSW4gY2FzZSB0aGUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ01vZGVsT3B0aW9ucyBuZ01vZGVsT3B0aW9uc30gZGlyZWN0aXZlIGlzIHVzZWQgd2l0aCBgdXBkYXRlT25gXG4gICAqIGFuZCB0aGUgYGRlZmF1bHRgIHRyaWdnZXIgaXMgbm90IGxpc3RlZCwgYWxsIHRob3NlIGFjdGlvbnMgd2lsbCByZW1haW4gcGVuZGluZyB1bnRpbCBvbmUgb2YgdGhlXG4gICAqIGB1cGRhdGVPbmAgZXZlbnRzIGlzIHRyaWdnZXJlZCBvbiB0aGUgRE9NIGVsZW1lbnQuXG4gICAqIEFsbCB0aGVzZSBhY3Rpb25zIHdpbGwgYmUgZGVib3VuY2VkIGlmIHRoZSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nTW9kZWxPcHRpb25zIG5nTW9kZWxPcHRpb25zfVxuICAgKiBkaXJlY3RpdmUgaXMgdXNlZCB3aXRoIGEgY3VzdG9tIGRlYm91bmNlIGZvciB0aGlzIHBhcnRpY3VsYXIgZXZlbnQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdHJpZ2dlciBhIGAkZGlnZXN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFZhbHVlIGZyb20gdGhlIHZpZXcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0cmlnZ2VyIEV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSB1cGRhdGUuXG4gICAqL1xuICB0aGlzLiRzZXRWaWV3VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSwgdHJpZ2dlcikge1xuICAgIGN0cmwuJHZpZXdWYWx1ZSA9IHZhbHVlO1xuICAgIGlmICghY3RybC4kb3B0aW9ucyB8fCBjdHJsLiRvcHRpb25zLnVwZGF0ZU9uRGVmYXVsdCkge1xuICAgICAgY3RybC4kJGRlYm91bmNlVmlld1ZhbHVlQ29tbWl0KHRyaWdnZXIpO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLiQkZGVib3VuY2VWaWV3VmFsdWVDb21taXQgPSBmdW5jdGlvbih0cmlnZ2VyKSB7XG4gICAgdmFyIGRlYm91bmNlRGVsYXkgPSAwLFxuICAgICAgICBvcHRpb25zID0gY3RybC4kb3B0aW9ucyxcbiAgICAgICAgZGVib3VuY2U7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBpc0RlZmluZWQob3B0aW9ucy5kZWJvdW5jZSkpIHtcbiAgICAgIGRlYm91bmNlID0gb3B0aW9ucy5kZWJvdW5jZTtcbiAgICAgIGlmIChpc051bWJlcihkZWJvdW5jZSkpIHtcbiAgICAgICAgZGVib3VuY2VEZWxheSA9IGRlYm91bmNlO1xuICAgICAgfSBlbHNlIGlmIChpc051bWJlcihkZWJvdW5jZVt0cmlnZ2VyXSkpIHtcbiAgICAgICAgZGVib3VuY2VEZWxheSA9IGRlYm91bmNlW3RyaWdnZXJdO1xuICAgICAgfSBlbHNlIGlmIChpc051bWJlcihkZWJvdW5jZVsnZGVmYXVsdCddKSkge1xuICAgICAgICBkZWJvdW5jZURlbGF5ID0gZGVib3VuY2VbJ2RlZmF1bHQnXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAkdGltZW91dC5jYW5jZWwocGVuZGluZ0RlYm91bmNlKTtcbiAgICBpZiAoZGVib3VuY2VEZWxheSkge1xuICAgICAgcGVuZGluZ0RlYm91bmNlID0gJHRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIGN0cmwuJGNvbW1pdFZpZXdWYWx1ZSgpO1xuICAgICAgfSwgZGVib3VuY2VEZWxheSk7XG4gICAgfSBlbHNlIGlmICgkcm9vdFNjb3BlLiQkcGhhc2UpIHtcbiAgICAgIGN0cmwuJGNvbW1pdFZpZXdWYWx1ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCkge1xuICAgICAgICBjdHJsLiRjb21taXRWaWV3VmFsdWUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICAvLyBtb2RlbCAtPiB2YWx1ZVxuICAvLyBOb3RlOiB3ZSBjYW5ub3QgdXNlIGEgbm9ybWFsIHNjb3BlLiR3YXRjaCBhcyB3ZSB3YW50IHRvIGRldGVjdCB0aGUgZm9sbG93aW5nOlxuICAvLyAxLiBzY29wZSB2YWx1ZSBpcyAnYSdcbiAgLy8gMi4gdXNlciBlbnRlcnMgJ2InXG4gIC8vIDMuIG5nLWNoYW5nZSBraWNrcyBpbiBhbmQgcmV2ZXJ0cyBzY29wZSB2YWx1ZSB0byAnYSdcbiAgLy8gICAgLT4gc2NvcGUgdmFsdWUgZGlkIG5vdCBjaGFuZ2Ugc2luY2UgdGhlIGxhc3QgZGlnZXN0IGFzXG4gIC8vICAgICAgIG5nLWNoYW5nZSBleGVjdXRlcyBpbiBhcHBseSBwaGFzZVxuICAvLyA0LiB2aWV3IHNob3VsZCBiZSBjaGFuZ2VkIGJhY2sgdG8gJ2EnXG4gICRzY29wZS4kd2F0Y2goZnVuY3Rpb24gbmdNb2RlbFdhdGNoKCkge1xuICAgIHZhciBtb2RlbFZhbHVlID0gbmdNb2RlbEdldCgpO1xuXG4gICAgLy8gaWYgc2NvcGUgbW9kZWwgdmFsdWUgYW5kIG5nTW9kZWwgdmFsdWUgYXJlIG91dCBvZiBzeW5jXG4gICAgLy8gVE9ETyhwZXJmKTogd2h5IG5vdCBtb3ZlIHRoaXMgdG8gdGhlIGFjdGlvbiBmbj9cbiAgICBpZiAobW9kZWxWYWx1ZSAhPT0gY3RybC4kbW9kZWxWYWx1ZSkge1xuICAgICAgY3RybC4kbW9kZWxWYWx1ZSA9IG1vZGVsVmFsdWU7XG5cbiAgICAgIHZhciBmb3JtYXR0ZXJzID0gY3RybC4kZm9ybWF0dGVycyxcbiAgICAgICAgICBpZHggPSBmb3JtYXR0ZXJzLmxlbmd0aDtcblxuICAgICAgdmFyIHZpZXdWYWx1ZSA9IG1vZGVsVmFsdWU7XG4gICAgICB3aGlsZSAoaWR4LS0pIHtcbiAgICAgICAgdmlld1ZhbHVlID0gZm9ybWF0dGVyc1tpZHhdKHZpZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoY3RybC4kdmlld1ZhbHVlICE9PSB2aWV3VmFsdWUpIHtcbiAgICAgICAgY3RybC4kdmlld1ZhbHVlID0gY3RybC4kJGxhc3RDb21taXR0ZWRWaWV3VmFsdWUgPSB2aWV3VmFsdWU7XG4gICAgICAgIGN0cmwuJHJlbmRlcigpO1xuXG4gICAgICAgIGN0cmwuJCRydW5WYWxpZGF0b3JzKHVuZGVmaW5lZCwgbW9kZWxWYWx1ZSwgdmlld1ZhbHVlLCBub29wKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kZWxWYWx1ZTtcbiAgfSk7XG59XTtcblxuXG4vKipcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAqIEBuYW1lIG5nTW9kZWxcbiAqXG4gKiBAZWxlbWVudCBpbnB1dFxuICogQHByaW9yaXR5IDFcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBgbmdNb2RlbGAgZGlyZWN0aXZlIGJpbmRzIGFuIGBpbnB1dGAsYHNlbGVjdGAsIGB0ZXh0YXJlYWAgKG9yIGN1c3RvbSBmb3JtIGNvbnRyb2wpIHRvIGFcbiAqIHByb3BlcnR5IG9uIHRoZSBzY29wZSB1c2luZyB7QGxpbmsgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciBOZ01vZGVsQ29udHJvbGxlcn0sXG4gKiB3aGljaCBpcyBjcmVhdGVkIGFuZCBleHBvc2VkIGJ5IHRoaXMgZGlyZWN0aXZlLlxuICpcbiAqIGBuZ01vZGVsYCBpcyByZXNwb25zaWJsZSBmb3I6XG4gKlxuICogLSBCaW5kaW5nIHRoZSB2aWV3IGludG8gdGhlIG1vZGVsLCB3aGljaCBvdGhlciBkaXJlY3RpdmVzIHN1Y2ggYXMgYGlucHV0YCwgYHRleHRhcmVhYCBvciBgc2VsZWN0YFxuICogICByZXF1aXJlLlxuICogLSBQcm92aWRpbmcgdmFsaWRhdGlvbiBiZWhhdmlvciAoaS5lLiByZXF1aXJlZCwgbnVtYmVyLCBlbWFpbCwgdXJsKS5cbiAqIC0gS2VlcGluZyB0aGUgc3RhdGUgb2YgdGhlIGNvbnRyb2wgKHZhbGlkL2ludmFsaWQsIGRpcnR5L3ByaXN0aW5lLCB0b3VjaGVkL3VudG91Y2hlZCwgdmFsaWRhdGlvbiBlcnJvcnMpLlxuICogLSBTZXR0aW5nIHJlbGF0ZWQgY3NzIGNsYXNzZXMgb24gdGhlIGVsZW1lbnQgKGBuZy12YWxpZGAsIGBuZy1pbnZhbGlkYCwgYG5nLWRpcnR5YCwgYG5nLXByaXN0aW5lYCwgYG5nLXRvdWNoZWRgLCBgbmctdW50b3VjaGVkYCkgaW5jbHVkaW5nIGFuaW1hdGlvbnMuXG4gKiAtIFJlZ2lzdGVyaW5nIHRoZSBjb250cm9sIHdpdGggaXRzIHBhcmVudCB7QGxpbmsgbmcuZGlyZWN0aXZlOmZvcm0gZm9ybX0uXG4gKlxuICogTm90ZTogYG5nTW9kZWxgIHdpbGwgdHJ5IHRvIGJpbmQgdG8gdGhlIHByb3BlcnR5IGdpdmVuIGJ5IGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24gb24gdGhlXG4gKiBjdXJyZW50IHNjb3BlLiBJZiB0aGUgcHJvcGVydHkgZG9lc24ndCBhbHJlYWR5IGV4aXN0IG9uIHRoaXMgc2NvcGUsIGl0IHdpbGwgYmUgY3JlYXRlZFxuICogaW1wbGljaXRseSBhbmQgYWRkZWQgdG8gdGhlIHNjb3BlLlxuICpcbiAqIEZvciBiZXN0IHByYWN0aWNlcyBvbiB1c2luZyBgbmdNb2RlbGAsIHNlZTpcbiAqXG4gKiAgLSBbVW5kZXJzdGFuZGluZyBTY29wZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIuanMvd2lraS9VbmRlcnN0YW5kaW5nLVNjb3BlcylcbiAqXG4gKiBGb3IgYmFzaWMgZXhhbXBsZXMsIGhvdyB0byB1c2UgYG5nTW9kZWxgLCBzZWU6XG4gKlxuICogIC0ge0BsaW5rIG5nLmRpcmVjdGl2ZTppbnB1dCBpbnB1dH1cbiAqICAgIC0ge0BsaW5rIGlucHV0W3RleHRdIHRleHR9XG4gKiAgICAtIHtAbGluayBpbnB1dFtjaGVja2JveF0gY2hlY2tib3h9XG4gKiAgICAtIHtAbGluayBpbnB1dFtyYWRpb10gcmFkaW99XG4gKiAgICAtIHtAbGluayBpbnB1dFtudW1iZXJdIG51bWJlcn1cbiAqICAgIC0ge0BsaW5rIGlucHV0W2VtYWlsXSBlbWFpbH1cbiAqICAgIC0ge0BsaW5rIGlucHV0W3VybF0gdXJsfVxuICogICAgLSB7QGxpbmsgaW5wdXRbZGF0ZV0gZGF0ZX1cbiAqICAgIC0ge0BsaW5rIGlucHV0W2RhdGV0aW1lLWxvY2FsXSBkYXRldGltZS1sb2NhbH1cbiAqICAgIC0ge0BsaW5rIGlucHV0W3RpbWVdIHRpbWV9XG4gKiAgICAtIHtAbGluayBpbnB1dFttb250aF0gbW9udGh9XG4gKiAgICAtIHtAbGluayBpbnB1dFt3ZWVrXSB3ZWVrfVxuICogIC0ge0BsaW5rIG5nLmRpcmVjdGl2ZTpzZWxlY3Qgc2VsZWN0fVxuICogIC0ge0BsaW5rIG5nLmRpcmVjdGl2ZTp0ZXh0YXJlYSB0ZXh0YXJlYX1cbiAqXG4gKiAjIENTUyBjbGFzc2VzXG4gKiBUaGUgZm9sbG93aW5nIENTUyBjbGFzc2VzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCBvbiB0aGUgYXNzb2NpYXRlZCBpbnB1dC9zZWxlY3QvdGV4dGFyZWEgZWxlbWVudFxuICogZGVwZW5kaW5nIG9uIHRoZSB2YWxpZGl0eSBvZiB0aGUgbW9kZWwuXG4gKlxuICogIC0gYG5nLXZhbGlkYDogdGhlIG1vZGVsIGlzIHZhbGlkXG4gKiAgLSBgbmctaW52YWxpZGA6IHRoZSBtb2RlbCBpcyBpbnZhbGlkXG4gKiAgLSBgbmctdmFsaWQtW2tleV1gOiBmb3IgZWFjaCB2YWxpZCBrZXkgYWRkZWQgYnkgYCRzZXRWYWxpZGl0eWBcbiAqICAtIGBuZy1pbnZhbGlkLVtrZXldYDogZm9yIGVhY2ggaW52YWxpZCBrZXkgYWRkZWQgYnkgYCRzZXRWYWxpZGl0eWBcbiAqICAtIGBuZy1wcmlzdGluZWA6IHRoZSBjb250cm9sIGhhc24ndCBiZWVuIGludGVyYWN0ZWQgd2l0aCB5ZXRcbiAqICAtIGBuZy1kaXJ0eWA6IHRoZSBjb250cm9sIGhhcyBiZWVuIGludGVyYWN0ZWQgd2l0aFxuICogIC0gYG5nLXRvdWNoZWRgOiB0aGUgY29udHJvbCBoYXMgYmVlbiBibHVycmVkXG4gKiAgLSBgbmctdW50b3VjaGVkYDogdGhlIGNvbnRyb2wgaGFzbid0IGJlZW4gYmx1cnJlZFxuICogIC0gYG5nLXBlbmRpbmdgOiBhbnkgYCRhc3luY1ZhbGlkYXRvcnNgIGFyZSB1bmZ1bGZpbGxlZFxuICpcbiAqIEtlZXAgaW4gbWluZCB0aGF0IG5nQW5pbWF0ZSBjYW4gZGV0ZWN0IGVhY2ggb2YgdGhlc2UgY2xhc3NlcyB3aGVuIGFkZGVkIGFuZCByZW1vdmVkLlxuICpcbiAqICMjIEFuaW1hdGlvbiBIb29rc1xuICpcbiAqIEFuaW1hdGlvbnMgd2l0aGluIG1vZGVscyBhcmUgdHJpZ2dlcmVkIHdoZW4gYW55IG9mIHRoZSBhc3NvY2lhdGVkIENTUyBjbGFzc2VzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZFxuICogb24gdGhlIGlucHV0IGVsZW1lbnQgd2hpY2ggaXMgYXR0YWNoZWQgdG8gdGhlIG1vZGVsLiBUaGVzZSBjbGFzc2VzIGFyZTogYC5uZy1wcmlzdGluZWAsIGAubmctZGlydHlgLFxuICogYC5uZy1pbnZhbGlkYCBhbmQgYC5uZy12YWxpZGAgYXMgd2VsbCBhcyBhbnkgb3RoZXIgdmFsaWRhdGlvbnMgdGhhdCBhcmUgcGVyZm9ybWVkIG9uIHRoZSBtb2RlbCBpdHNlbGYuXG4gKiBUaGUgYW5pbWF0aW9ucyB0aGF0IGFyZSB0cmlnZ2VyZWQgd2l0aGluIG5nTW9kZWwgYXJlIHNpbWlsYXIgdG8gaG93IHRoZXkgd29yayBpbiBuZ0NsYXNzIGFuZFxuICogYW5pbWF0aW9ucyBjYW4gYmUgaG9va2VkIGludG8gdXNpbmcgQ1NTIHRyYW5zaXRpb25zLCBrZXlmcmFtZXMgYXMgd2VsbCBhcyBKUyBhbmltYXRpb25zLlxuICpcbiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBhIHNpbXBsZSB3YXkgdG8gdXRpbGl6ZSBDU1MgdHJhbnNpdGlvbnMgdG8gc3R5bGUgYW4gaW5wdXQgZWxlbWVudFxuICogdGhhdCBoYXMgYmVlbiByZW5kZXJlZCBhcyBpbnZhbGlkIGFmdGVyIGl0IGhhcyBiZWVuIHZhbGlkYXRlZDpcbiAqXG4gKiA8cHJlPlxuICogLy9iZSBzdXJlIHRvIGluY2x1ZGUgbmdBbmltYXRlIGFzIGEgbW9kdWxlIHRvIGhvb2sgaW50byBtb3JlXG4gKiAvL2FkdmFuY2VkIGFuaW1hdGlvbnNcbiAqIC5teS1pbnB1dCB7XG4gKiAgIHRyYW5zaXRpb246MC41cyBsaW5lYXIgYWxsO1xuICogICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAqIH1cbiAqIC5teS1pbnB1dC5uZy1pbnZhbGlkIHtcbiAqICAgYmFja2dyb3VuZDogcmVkO1xuICogICBjb2xvcjp3aGl0ZTtcbiAqIH1cbiAqIDwvcHJlPlxuICpcbiAqIEBleGFtcGxlXG4gKiA8ZXhhbXBsZSBkZXBzPVwiYW5ndWxhci1hbmltYXRlLmpzXCIgYW5pbWF0aW9ucz1cInRydWVcIiBmaXhCYXNlPVwidHJ1ZVwiIG1vZHVsZT1cImlucHV0RXhhbXBsZVwiPlxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgIDxzY3JpcHQ+XG4gICAgICAgIGFuZ3VsYXIubW9kdWxlKCdpbnB1dEV4YW1wbGUnLCBbXSlcbiAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xuICAgICAgICAgICAgJHNjb3BlLnZhbCA9ICcxJztcbiAgICAgICAgICB9XSk7XG4gICAgICAgPC9zY3JpcHQ+XG4gICAgICAgPHN0eWxlPlxuICAgICAgICAgLm15LWlucHV0IHtcbiAgICAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOmFsbCBsaW5lYXIgMC41cztcbiAgICAgICAgICAgdHJhbnNpdGlvbjphbGwgbGluZWFyIDAuNXM7XG4gICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgfVxuICAgICAgICAgLm15LWlucHV0Lm5nLWludmFsaWQge1xuICAgICAgICAgICBjb2xvcjp3aGl0ZTtcbiAgICAgICAgICAgYmFja2dyb3VuZDogcmVkO1xuICAgICAgICAgfVxuICAgICAgIDwvc3R5bGU+XG4gICAgICAgVXBkYXRlIGlucHV0IHRvIHNlZSB0cmFuc2l0aW9ucyB3aGVuIHZhbGlkL2ludmFsaWQuXG4gICAgICAgSW50ZWdlciBpcyBhIHZhbGlkIHZhbHVlLlxuICAgICAgIDxmb3JtIG5hbWU9XCJ0ZXN0Rm9ybVwiIG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxuICAgICAgICAgPGlucHV0IG5nLW1vZGVsPVwidmFsXCIgbmctcGF0dGVybj1cIi9eXFxkKyQvXCIgbmFtZT1cImFuaW1cIiBjbGFzcz1cIm15LWlucHV0XCIgLz5cbiAgICAgICA8L2Zvcm0+XG4gICAgIDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiAjIyBCaW5kaW5nIHRvIGEgZ2V0dGVyL3NldHRlclxuICpcbiAqIFNvbWV0aW1lcyBpdCdzIGhlbHBmdWwgdG8gYmluZCBgbmdNb2RlbGAgdG8gYSBnZXR0ZXIvc2V0dGVyIGZ1bmN0aW9uLiAgQSBnZXR0ZXIvc2V0dGVyIGlzIGFcbiAqIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCB3aGVuIGNhbGxlZCB3aXRoIHplcm8gYXJndW1lbnRzLCBhbmQgc2V0c1xuICogdGhlIGludGVybmFsIHN0YXRlIG9mIGEgbW9kZWwgd2hlbiBjYWxsZWQgd2l0aCBhbiBhcmd1bWVudC4gSXQncyBzb21ldGltZXMgdXNlZnVsIHRvIHVzZSB0aGlzXG4gKiBmb3IgbW9kZWxzIHRoYXQgaGF2ZSBhbiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiB0aGF0J3MgZGlmZmVyZW50IHRoYW4gd2hhdCB0aGUgbW9kZWwgZXhwb3Nlc1xuICogdG8gdGhlIHZpZXcuXG4gKlxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXN1Y2Nlc3NcIj5cbiAqICoqQmVzdCBQcmFjdGljZToqKiBJdCdzIGJlc3QgdG8ga2VlcCBnZXR0ZXJzIGZhc3QgYmVjYXVzZSBBbmd1bGFyIGlzIGxpa2VseSB0byBjYWxsIHRoZW0gbW9yZVxuICogZnJlcXVlbnRseSB0aGFuIG90aGVyIHBhcnRzIG9mIHlvdXIgY29kZS5cbiAqIDwvZGl2PlxuICpcbiAqIFlvdSB1c2UgdGhpcyBiZWhhdmlvciBieSBhZGRpbmcgYG5nLW1vZGVsLW9wdGlvbnM9XCJ7IGdldHRlclNldHRlcjogdHJ1ZSB9XCJgIHRvIGFuIGVsZW1lbnQgdGhhdFxuICogaGFzIGBuZy1tb2RlbGAgYXR0YWNoZWQgdG8gaXQuIFlvdSBjYW4gYWxzbyBhZGQgYG5nLW1vZGVsLW9wdGlvbnM9XCJ7IGdldHRlclNldHRlcjogdHJ1ZSB9XCJgIHRvXG4gKiBhIGA8Zm9ybT5gLCB3aGljaCB3aWxsIGVuYWJsZSB0aGlzIGJlaGF2aW9yIGZvciBhbGwgYDxpbnB1dD5gcyB3aXRoaW4gaXQuIFNlZVxuICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ01vZGVsT3B0aW9ucyBgbmdNb2RlbE9wdGlvbnNgfSBmb3IgbW9yZS5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHVzZSBgbmdNb2RlbGAgd2l0aCBhIGdldHRlci9zZXR0ZXI6XG4gKlxuICogQGV4YW1wbGVcbiAqIDxleGFtcGxlIG5hbWU9XCJuZ01vZGVsLWdldHRlci1zZXR0ZXJcIiBtb2R1bGU9XCJnZXR0ZXJTZXR0ZXJFeGFtcGxlXCI+XG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cbiAgICAgICAgIDxmb3JtIG5hbWU9XCJ1c2VyRm9ybVwiPlxuICAgICAgICAgICBOYW1lOlxuICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwidXNlck5hbWVcIlxuICAgICAgICAgICAgICAgICAgbmctbW9kZWw9XCJ1c2VyLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgbmctbW9kZWwtb3B0aW9ucz1cInsgZ2V0dGVyU2V0dGVyOiB0cnVlIH1cIiAvPlxuICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgPHByZT51c2VyLm5hbWUgPSA8c3BhbiBuZy1iaW5kPVwidXNlci5uYW1lKClcIj48L3NwYW4+PC9wcmU+XG4gICAgICAgPC9kaXY+XG4gICAgIDwvZmlsZT5cbiAgICAgPGZpbGUgbmFtZT1cImFwcC5qc1wiPlxuICAgICAgIGFuZ3VsYXIubW9kdWxlKCdnZXR0ZXJTZXR0ZXJFeGFtcGxlJywgW10pXG4gICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xuICAgICAgICAgICB2YXIgX25hbWUgPSAnQnJpYW4nO1xuICAgICAgICAgICAkc2NvcGUudXNlciA9IHtcbiAgICAgICAgICAgICBuYW1lOiBmdW5jdGlvbihuZXdOYW1lKSB7XG4gICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQobmV3TmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgX25hbWUgPSBuZXdOYW1lO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgcmV0dXJuIF9uYW1lO1xuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgfTtcbiAgICAgICAgIH1dKTtcbiAgICAgPC9maWxlPlxuICogPC9leGFtcGxlPlxuICovXG52YXIgbmdNb2RlbERpcmVjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHJlc3RyaWN0OiAnQScsXG4gICAgcmVxdWlyZTogWyduZ01vZGVsJywgJ14/Zm9ybScsICdeP25nTW9kZWxPcHRpb25zJ10sXG4gICAgY29udHJvbGxlcjogTmdNb2RlbENvbnRyb2xsZXIsXG4gICAgLy8gUHJlbGluayBuZWVkcyB0byBydW4gYmVmb3JlIGFueSBpbnB1dCBkaXJlY3RpdmVcbiAgICAvLyBzbyB0aGF0IHdlIGNhbiBzZXQgdGhlIE5nTW9kZWxPcHRpb25zIGluIE5nTW9kZWxDb250cm9sbGVyXG4gICAgLy8gYmVmb3JlIGFueW9uZSBlbHNlIHVzZXMgaXQuXG4gICAgcHJpb3JpdHk6IDEsXG4gICAgY29tcGlsZTogZnVuY3Rpb24gbmdNb2RlbENvbXBpbGUoZWxlbWVudCkge1xuICAgICAgLy8gU2V0dXAgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgY29udHJvbFxuICAgICAgZWxlbWVudC5hZGRDbGFzcyhQUklTVElORV9DTEFTUykuYWRkQ2xhc3MoVU5UT1VDSEVEX0NMQVNTKS5hZGRDbGFzcyhWQUxJRF9DTEFTUyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZTogZnVuY3Rpb24gbmdNb2RlbFByZUxpbmsoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmxzKSB7XG4gICAgICAgICAgdmFyIG1vZGVsQ3RybCA9IGN0cmxzWzBdLFxuICAgICAgICAgICAgICBmb3JtQ3RybCA9IGN0cmxzWzFdIHx8IG51bGxGb3JtQ3RybDtcblxuICAgICAgICAgIG1vZGVsQ3RybC4kJHNldE9wdGlvbnMoY3RybHNbMl0gJiYgY3RybHNbMl0uJG9wdGlvbnMpO1xuXG4gICAgICAgICAgLy8gbm90aWZ5IG90aGVycywgZXNwZWNpYWxseSBwYXJlbnQgZm9ybXNcbiAgICAgICAgICBmb3JtQ3RybC4kYWRkQ29udHJvbChtb2RlbEN0cmwpO1xuXG4gICAgICAgICAgYXR0ci4kb2JzZXJ2ZSgnbmFtZScsIGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBpZiAobW9kZWxDdHJsLiRuYW1lICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICBmb3JtQ3RybC4kJHJlbmFtZUNvbnRyb2wobW9kZWxDdHJsLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzY29wZS4kb24oJyRkZXN0cm95JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmb3JtQ3RybC4kcmVtb3ZlQ29udHJvbChtb2RlbEN0cmwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0OiBmdW5jdGlvbiBuZ01vZGVsUG9zdExpbmsoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmxzKSB7XG4gICAgICAgICAgdmFyIG1vZGVsQ3RybCA9IGN0cmxzWzBdO1xuICAgICAgICAgIGlmIChtb2RlbEN0cmwuJG9wdGlvbnMgJiYgbW9kZWxDdHJsLiRvcHRpb25zLnVwZGF0ZU9uKSB7XG4gICAgICAgICAgICBlbGVtZW50Lm9uKG1vZGVsQ3RybC4kb3B0aW9ucy51cGRhdGVPbiwgZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgICAgICAgbW9kZWxDdHJsLiQkZGVib3VuY2VWaWV3VmFsdWVDb21taXQoZXYgJiYgZXYudHlwZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbGVtZW50Lm9uKCdibHVyJywgZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgICAgIGlmIChtb2RlbEN0cmwuJHRvdWNoZWQpIHJldHVybjtcblxuICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBtb2RlbEN0cmwuJHNldFRvdWNoZWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ0NoYW5nZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogRXZhbHVhdGUgdGhlIGdpdmVuIGV4cHJlc3Npb24gd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBpbnB1dC5cbiAqIFRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBpbW1lZGlhdGVseSwgdW5saWtlIHRoZSBKYXZhU2NyaXB0IG9uY2hhbmdlIGV2ZW50XG4gKiB3aGljaCBvbmx5IHRyaWdnZXJzIGF0IHRoZSBlbmQgb2YgYSBjaGFuZ2UgKHVzdWFsbHksIHdoZW4gdGhlIHVzZXIgbGVhdmVzIHRoZVxuICogZm9ybSBlbGVtZW50IG9yIHByZXNzZXMgdGhlIHJldHVybiBrZXkpLlxuICpcbiAqIFRoZSBgbmdDaGFuZ2VgIGV4cHJlc3Npb24gaXMgb25seSBldmFsdWF0ZWQgd2hlbiBhIGNoYW5nZSBpbiB0aGUgaW5wdXQgdmFsdWUgY2F1c2VzXG4gKiBhIG5ldyB2YWx1ZSB0byBiZSBjb21taXR0ZWQgdG8gdGhlIG1vZGVsLlxuICpcbiAqIEl0IHdpbGwgbm90IGJlIGV2YWx1YXRlZDpcbiAqICogaWYgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gdGhlIGAkcGFyc2Vyc2AgdHJhbnNmb3JtYXRpb24gcGlwZWxpbmUgaGFzIG5vdCBjaGFuZ2VkXG4gKiAqIGlmIHRoZSBpbnB1dCBoYXMgY29udGludWVkIHRvIGJlIGludmFsaWQgc2luY2UgdGhlIG1vZGVsIHdpbGwgc3RheSBgbnVsbGBcbiAqICogaWYgdGhlIG1vZGVsIGlzIGNoYW5nZWQgcHJvZ3JhbW1hdGljYWxseSBhbmQgbm90IGJ5IGEgY2hhbmdlIHRvIHRoZSBpbnB1dCB2YWx1ZVxuICpcbiAqXG4gKiBOb3RlLCB0aGlzIGRpcmVjdGl2ZSByZXF1aXJlcyBgbmdNb2RlbGAgdG8gYmUgcHJlc2VudC5cbiAqXG4gKiBAZWxlbWVudCBpbnB1dFxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0NoYW5nZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uIGNoYW5nZVxuICogaW4gaW5wdXQgdmFsdWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIDxleGFtcGxlIG5hbWU9XCJuZ0NoYW5nZS1kaXJlY3RpdmVcIiBtb2R1bGU9XCJjaGFuZ2VFeGFtcGxlXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gKiAgICAgPHNjcmlwdD5cbiAqICAgICAgIGFuZ3VsYXIubW9kdWxlKCdjaGFuZ2VFeGFtcGxlJywgW10pXG4gKiAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XG4gKiAgICAgICAgICAgJHNjb3BlLmNvdW50ZXIgPSAwO1xuICogICAgICAgICAgICRzY29wZS5jaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAqICAgICAgICAgICAgICRzY29wZS5jb3VudGVyKys7XG4gKiAgICAgICAgICAgfTtcbiAqICAgICAgICAgfV0pO1xuICogICAgIDwvc2NyaXB0PlxuICogICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XG4gKiAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmctbW9kZWw9XCJjb25maXJtZWRcIiBuZy1jaGFuZ2U9XCJjaGFuZ2UoKVwiIGlkPVwibmctY2hhbmdlLWV4YW1wbGUxXCIgLz5cbiAqICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuZy1tb2RlbD1cImNvbmZpcm1lZFwiIGlkPVwibmctY2hhbmdlLWV4YW1wbGUyXCIgLz5cbiAqICAgICAgIDxsYWJlbCBmb3I9XCJuZy1jaGFuZ2UtZXhhbXBsZTJcIj5Db25maXJtZWQ8L2xhYmVsPjxiciAvPlxuICogICAgICAgPHR0PmRlYnVnID0ge3tjb25maXJtZWR9fTwvdHQ+PGJyLz5cbiAqICAgICAgIDx0dD5jb3VudGVyID0ge3tjb3VudGVyfX08L3R0Pjxici8+XG4gKiAgICAgPC9kaXY+XG4gKiAgIDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICogICAgIHZhciBjb3VudGVyID0gZWxlbWVudChieS5iaW5kaW5nKCdjb3VudGVyJykpO1xuICogICAgIHZhciBkZWJ1ZyA9IGVsZW1lbnQoYnkuYmluZGluZygnY29uZmlybWVkJykpO1xuICpcbiAqICAgICBpdCgnc2hvdWxkIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGlmIGNoYW5naW5nIGZyb20gdmlldycsIGZ1bmN0aW9uKCkge1xuICogICAgICAgZXhwZWN0KGNvdW50ZXIuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJzAnKTtcbiAqXG4gKiAgICAgICBlbGVtZW50KGJ5LmlkKCduZy1jaGFuZ2UtZXhhbXBsZTEnKSkuY2xpY2soKTtcbiAqXG4gKiAgICAgICBleHBlY3QoY291bnRlci5nZXRUZXh0KCkpLnRvQ29udGFpbignMScpO1xuICogICAgICAgZXhwZWN0KGRlYnVnLmdldFRleHQoKSkudG9Db250YWluKCd0cnVlJyk7XG4gKiAgICAgfSk7XG4gKlxuICogICAgIGl0KCdzaG91bGQgbm90IGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGlmIGNoYW5naW5nIGZyb20gbW9kZWwnLCBmdW5jdGlvbigpIHtcbiAqICAgICAgIGVsZW1lbnQoYnkuaWQoJ25nLWNoYW5nZS1leGFtcGxlMicpKS5jbGljaygpO1xuXG4gKiAgICAgICBleHBlY3QoY291bnRlci5nZXRUZXh0KCkpLnRvQ29udGFpbignMCcpO1xuICogICAgICAgZXhwZWN0KGRlYnVnLmdldFRleHQoKSkudG9Db250YWluKCd0cnVlJyk7XG4gKiAgICAgfSk7XG4gKiAgIDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqL1xudmFyIG5nQ2hhbmdlRGlyZWN0aXZlID0gdmFsdWVGbih7XG4gIHJlc3RyaWN0OiAnQScsXG4gIHJlcXVpcmU6ICduZ01vZGVsJyxcbiAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwpIHtcbiAgICBjdHJsLiR2aWV3Q2hhbmdlTGlzdGVuZXJzLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICBzY29wZS4kZXZhbChhdHRyLm5nQ2hhbmdlKTtcbiAgICB9KTtcbiAgfVxufSk7XG5cblxudmFyIHJlcXVpcmVkRGlyZWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgcmVzdHJpY3Q6ICdBJyxcbiAgICByZXF1aXJlOiAnP25nTW9kZWwnLFxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbG0sIGF0dHIsIGN0cmwpIHtcbiAgICAgIGlmICghY3RybCkgcmV0dXJuO1xuICAgICAgYXR0ci5yZXF1aXJlZCA9IHRydWU7IC8vIGZvcmNlIHRydXRoeSBpbiBjYXNlIHdlIGFyZSBvbiBub24gaW5wdXQgZWxlbWVudFxuXG4gICAgICBjdHJsLiR2YWxpZGF0b3JzLnJlcXVpcmVkID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICFhdHRyLnJlcXVpcmVkIHx8ICFjdHJsLiRpc0VtcHR5KHZhbHVlKTtcbiAgICAgIH07XG5cbiAgICAgIGF0dHIuJG9ic2VydmUoJ3JlcXVpcmVkJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGN0cmwuJHZhbGlkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59O1xuXG5cbnZhciBwYXR0ZXJuRGlyZWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgcmVzdHJpY3Q6ICdBJyxcbiAgICByZXF1aXJlOiAnP25nTW9kZWwnLFxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbG0sIGF0dHIsIGN0cmwpIHtcbiAgICAgIGlmICghY3RybCkgcmV0dXJuO1xuXG4gICAgICB2YXIgcmVnZXhwLCBwYXR0ZXJuRXhwID0gYXR0ci5uZ1BhdHRlcm4gfHwgYXR0ci5wYXR0ZXJuO1xuICAgICAgYXR0ci4kb2JzZXJ2ZSgncGF0dGVybicsIGZ1bmN0aW9uKHJlZ2V4KSB7XG4gICAgICAgIGlmIChpc1N0cmluZyhyZWdleCkgJiYgcmVnZXgubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXicgKyByZWdleCArICckJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVnZXggJiYgIXJlZ2V4LnRlc3QpIHtcbiAgICAgICAgICB0aHJvdyBtaW5FcnIoJ25nUGF0dGVybicpKCdub3JlZ2V4cCcsXG4gICAgICAgICAgICAnRXhwZWN0ZWQgezB9IHRvIGJlIGEgUmVnRXhwIGJ1dCB3YXMgezF9LiBFbGVtZW50OiB7Mn0nLCBwYXR0ZXJuRXhwLFxuICAgICAgICAgICAgcmVnZXgsIHN0YXJ0aW5nVGFnKGVsbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnZXhwID0gcmVnZXggfHwgdW5kZWZpbmVkO1xuICAgICAgICBjdHJsLiR2YWxpZGF0ZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGN0cmwuJHZhbGlkYXRvcnMucGF0dGVybiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjdHJsLiRpc0VtcHR5KHZhbHVlKSB8fCBpc1VuZGVmaW5lZChyZWdleHApIHx8IHJlZ2V4cC50ZXN0KHZhbHVlKTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuXG52YXIgbWF4bGVuZ3RoRGlyZWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgcmVzdHJpY3Q6ICdBJyxcbiAgICByZXF1aXJlOiAnP25nTW9kZWwnLFxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbG0sIGF0dHIsIGN0cmwpIHtcbiAgICAgIGlmICghY3RybCkgcmV0dXJuO1xuXG4gICAgICB2YXIgbWF4bGVuZ3RoID0gMDtcbiAgICAgIGF0dHIuJG9ic2VydmUoJ21heGxlbmd0aCcsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIG1heGxlbmd0aCA9IGludCh2YWx1ZSkgfHwgMDtcbiAgICAgICAgY3RybC4kdmFsaWRhdGUoKTtcbiAgICAgIH0pO1xuICAgICAgY3RybC4kdmFsaWRhdG9ycy5tYXhsZW5ndGggPSBmdW5jdGlvbihtb2RlbFZhbHVlLCB2aWV3VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGN0cmwuJGlzRW1wdHkobW9kZWxWYWx1ZSkgfHwgdmlld1ZhbHVlLmxlbmd0aCA8PSBtYXhsZW5ndGg7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBtaW5sZW5ndGhEaXJlY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICByZXN0cmljdDogJ0EnLFxuICAgIHJlcXVpcmU6ICc/bmdNb2RlbCcsXG4gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsbSwgYXR0ciwgY3RybCkge1xuICAgICAgaWYgKCFjdHJsKSByZXR1cm47XG5cbiAgICAgIHZhciBtaW5sZW5ndGggPSAwO1xuICAgICAgYXR0ci4kb2JzZXJ2ZSgnbWlubGVuZ3RoJywgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgbWlubGVuZ3RoID0gaW50KHZhbHVlKSB8fCAwO1xuICAgICAgICBjdHJsLiR2YWxpZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgICBjdHJsLiR2YWxpZGF0b3JzLm1pbmxlbmd0aCA9IGZ1bmN0aW9uKG1vZGVsVmFsdWUsIHZpZXdWYWx1ZSkge1xuICAgICAgICByZXR1cm4gY3RybC4kaXNFbXB0eShtb2RlbFZhbHVlKSB8fCB2aWV3VmFsdWUubGVuZ3RoID49IG1pbmxlbmd0aDtcbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuXG4vKipcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAqIEBuYW1lIG5nTGlzdFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGV4dCBpbnB1dCB0aGF0IGNvbnZlcnRzIGJldHdlZW4gYSBkZWxpbWl0ZWQgc3RyaW5nIGFuZCBhbiBhcnJheSBvZiBzdHJpbmdzLiBUaGUgZGVmYXVsdFxuICogZGVsaW1pdGVyIGlzIGEgY29tbWEgZm9sbG93ZWQgYnkgYSBzcGFjZSAtIGVxdWl2YWxlbnQgdG8gYG5nLWxpc3Q9XCIsIFwiYC4gWW91IGNhbiBzcGVjaWZ5IGEgY3VzdG9tXG4gKiBkZWxpbWl0ZXIgYXMgdGhlIHZhbHVlIG9mIHRoZSBgbmdMaXN0YCBhdHRyaWJ1dGUgLSBmb3IgZXhhbXBsZSwgYG5nLWxpc3Q9XCIgfCBcImAuXG4gKlxuICogVGhlIGJlaGF2aW91ciBvZiB0aGUgZGlyZWN0aXZlIGlzIGFmZmVjdGVkIGJ5IHRoZSB1c2Ugb2YgdGhlIGBuZ1RyaW1gIGF0dHJpYnV0ZS5cbiAqICogSWYgYG5nVHJpbWAgaXMgc2V0IHRvIGBcImZhbHNlXCJgIHRoZW4gd2hpdGVzcGFjZSBhcm91bmQgYm90aCB0aGUgc2VwYXJhdG9yIGFuZCBlYWNoXG4gKiAgIGxpc3QgaXRlbSBpcyByZXNwZWN0ZWQuIFRoaXMgaW1wbGllcyB0aGF0IHRoZSB1c2VyIG9mIHRoZSBkaXJlY3RpdmUgaXMgcmVzcG9uc2libGUgZm9yXG4gKiAgIGRlYWxpbmcgd2l0aCB3aGl0ZXNwYWNlIGJ1dCBhbHNvIGFsbG93cyB5b3UgdG8gdXNlIHdoaXRlc3BhY2UgYXMgYSBkZWxpbWl0ZXIsIHN1Y2ggYXMgYVxuICogICB0YWIgb3IgbmV3bGluZSBjaGFyYWN0ZXIuXG4gKiAqIE90aGVyd2lzZSB3aGl0ZXNwYWNlIGFyb3VuZCB0aGUgZGVsaW1pdGVyIGlzIGlnbm9yZWQgd2hlbiBzcGxpdHRpbmcgKGFsdGhvdWdoIGl0IGlzIHJlc3BlY3RlZFxuICogICB3aGVuIGpvaW5pbmcgdGhlIGxpc3QgaXRlbXMgYmFjayB0b2dldGhlcikgYW5kIHdoaXRlc3BhY2UgYXJvdW5kIGVhY2ggbGlzdCBpdGVtIGlzIHN0cmlwcGVkXG4gKiAgIGJlZm9yZSBpdCBpcyBhZGRlZCB0byB0aGUgbW9kZWwuXG4gKlxuICogIyMjIEV4YW1wbGUgd2l0aCBWYWxpZGF0aW9uXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cIm5nTGlzdC1kaXJlY3RpdmVcIiBtb2R1bGU9XCJsaXN0RXhhbXBsZVwiPlxuICogICA8ZmlsZSBuYW1lPVwiYXBwLmpzXCI+XG4gKiAgICAgIGFuZ3VsYXIubW9kdWxlKCdsaXN0RXhhbXBsZScsIFtdKVxuICogICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XG4gKiAgICAgICAgICAkc2NvcGUubmFtZXMgPSBbJ21vcnBoZXVzJywgJ25lbycsICd0cmluaXR5J107XG4gKiAgICAgICAgfV0pO1xuICogICA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gKiAgICA8Zm9ybSBuYW1lPVwibXlGb3JtXCIgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XG4gKiAgICAgIExpc3Q6IDxpbnB1dCBuYW1lPVwibmFtZXNJbnB1dFwiIG5nLW1vZGVsPVwibmFtZXNcIiBuZy1saXN0IHJlcXVpcmVkPlxuICogICAgICA8c3BhbiBjbGFzcz1cImVycm9yXCIgbmctc2hvdz1cIm15Rm9ybS5uYW1lc0lucHV0LiRlcnJvci5yZXF1aXJlZFwiPlxuICogICAgICAgIFJlcXVpcmVkITwvc3Bhbj5cbiAqICAgICAgPGJyPlxuICogICAgICA8dHQ+bmFtZXMgPSB7e25hbWVzfX08L3R0Pjxici8+XG4gKiAgICAgIDx0dD5teUZvcm0ubmFtZXNJbnB1dC4kdmFsaWQgPSB7e215Rm9ybS5uYW1lc0lucHV0LiR2YWxpZH19PC90dD48YnIvPlxuICogICAgICA8dHQ+bXlGb3JtLm5hbWVzSW5wdXQuJGVycm9yID0ge3tteUZvcm0ubmFtZXNJbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz5cbiAqICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz5cbiAqICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IucmVxdWlyZWQgPSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1aXJlZH19PC90dD48YnIvPlxuICogICAgIDwvZm9ybT5cbiAqICAgPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gKiAgICAgdmFyIGxpc3RJbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ25hbWVzJykpO1xuICogICAgIHZhciBuYW1lcyA9IGVsZW1lbnQoYnkuZXhhY3RCaW5kaW5nKCduYW1lcycpKTtcbiAqICAgICB2YXIgdmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS5uYW1lc0lucHV0LiR2YWxpZCcpKTtcbiAqICAgICB2YXIgZXJyb3IgPSBlbGVtZW50KGJ5LmNzcygnc3Bhbi5lcnJvcicpKTtcbiAqXG4gKiAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7XG4gKiAgICAgICBleHBlY3QobmFtZXMuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ1tcIm1vcnBoZXVzXCIsXCJuZW9cIixcInRyaW5pdHlcIl0nKTtcbiAqICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbigndHJ1ZScpO1xuICogICAgICAgZXhwZWN0KGVycm9yLmdldENzc1ZhbHVlKCdkaXNwbGF5JykpLnRvQmUoJ25vbmUnKTtcbiAqICAgICB9KTtcbiAqXG4gKiAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7XG4gKiAgICAgICBsaXN0SW5wdXQuY2xlYXIoKTtcbiAqICAgICAgIGxpc3RJbnB1dC5zZW5kS2V5cygnJyk7XG4gKlxuICogICAgICAgZXhwZWN0KG5hbWVzLmdldFRleHQoKSkudG9Db250YWluKCcnKTtcbiAqICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTtcbiAqICAgICAgIGV4cGVjdChlcnJvci5nZXRDc3NWYWx1ZSgnZGlzcGxheScpKS5ub3QudG9CZSgnbm9uZScpO1xuICogICAgIH0pO1xuICogICA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogIyMjIEV4YW1wbGUgLSBzcGxpdHRpbmcgb24gd2hpdGVzcGFjZVxuICogPGV4YW1wbGUgbmFtZT1cIm5nTGlzdC1kaXJlY3RpdmUtbmV3bGluZXNcIj5cbiAqICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAqICAgIDx0ZXh0YXJlYSBuZy1tb2RlbD1cImxpc3RcIiBuZy1saXN0PVwiJiMxMDtcIiBuZy10cmltPVwiZmFsc2VcIj48L3RleHRhcmVhPlxuICogICAgPHByZT57eyBsaXN0IHwganNvbiB9fTwvcHJlPlxuICogICA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cbiAqICAgICBpdChcInNob3VsZCBzcGxpdCB0aGUgdGV4dCBieSBuZXdsaW5lc1wiLCBmdW5jdGlvbigpIHtcbiAqICAgICAgIHZhciBsaXN0SW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCdsaXN0JykpO1xuICogICAgICAgdmFyIG91dHB1dCA9IGVsZW1lbnQoYnkuYmluZGluZygnbGlzdCB8IGpzb24nKSk7XG4gKiAgICAgICBsaXN0SW5wdXQuc2VuZEtleXMoJ2FiY1xcbmRlZlxcbmdoaScpO1xuICogICAgICAgZXhwZWN0KG91dHB1dC5nZXRUZXh0KCkpLnRvQ29udGFpbignW1xcbiAgXCJhYmNcIixcXG4gIFwiZGVmXCIsXFxuICBcImdoaVwiXFxuXScpO1xuICogICAgIH0pO1xuICogICA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogQGVsZW1lbnQgaW5wdXRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbmdMaXN0IG9wdGlvbmFsIGRlbGltaXRlciB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHNwbGl0IHRoZSB2YWx1ZS5cbiAqL1xudmFyIG5nTGlzdERpcmVjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4ge1xuICAgIHJlc3RyaWN0OiAnQScsXG4gICAgcHJpb3JpdHk6IDEwMCxcbiAgICByZXF1aXJlOiAnbmdNb2RlbCcsXG4gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwpIHtcbiAgICAgIC8vIFdlIHdhbnQgdG8gY29udHJvbCB3aGl0ZXNwYWNlIHRyaW1taW5nIHNvIHdlIHVzZSB0aGlzIGNvbnZvbHV0ZWQgYXBwcm9hY2hcbiAgICAgIC8vIHRvIGFjY2VzcyB0aGUgbmdMaXN0IGF0dHJpYnV0ZSwgd2hpY2ggZG9lc24ndCBwcmUtdHJpbSB0aGUgYXR0cmlidXRlXG4gICAgICB2YXIgbmdMaXN0ID0gZWxlbWVudC5hdHRyKGF0dHIuJGF0dHIubmdMaXN0KSB8fCAnLCAnO1xuICAgICAgdmFyIHRyaW1WYWx1ZXMgPSBhdHRyLm5nVHJpbSAhPT0gJ2ZhbHNlJztcbiAgICAgIHZhciBzZXBhcmF0b3IgPSB0cmltVmFsdWVzID8gdHJpbShuZ0xpc3QpIDogbmdMaXN0O1xuXG4gICAgICB2YXIgcGFyc2UgPSBmdW5jdGlvbih2aWV3VmFsdWUpIHtcbiAgICAgICAgLy8gSWYgdGhlIHZpZXdWYWx1ZSBpcyBpbnZhbGlkIChzYXkgcmVxdWlyZWQgYnV0IGVtcHR5KSBpdCB3aWxsIGJlIGB1bmRlZmluZWRgXG4gICAgICAgIGlmIChpc1VuZGVmaW5lZCh2aWV3VmFsdWUpKSByZXR1cm47XG5cbiAgICAgICAgdmFyIGxpc3QgPSBbXTtcblxuICAgICAgICBpZiAodmlld1ZhbHVlKSB7XG4gICAgICAgICAgZm9yRWFjaCh2aWV3VmFsdWUuc3BsaXQoc2VwYXJhdG9yKSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkgbGlzdC5wdXNoKHRyaW1WYWx1ZXMgPyB0cmltKHZhbHVlKSA6IHZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgICAgfTtcblxuICAgICAgY3RybC4kcGFyc2Vycy5wdXNoKHBhcnNlKTtcbiAgICAgIGN0cmwuJGZvcm1hdHRlcnMucHVzaChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUuam9pbihuZ0xpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgJGlzRW1wdHkgYmVjYXVzZSBhbiBlbXB0eSBhcnJheSBtZWFucyB0aGUgaW5wdXQgaXMgZW1wdHkuXG4gICAgICBjdHJsLiRpc0VtcHR5ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICF2YWx1ZSB8fCAhdmFsdWUubGVuZ3RoO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG5cbnZhciBDT05TVEFOVF9WQUxVRV9SRUdFWFAgPSAvXih0cnVlfGZhbHNlfFxcZCspJC87XG4vKipcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAqIEBuYW1lIG5nVmFsdWVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEJpbmRzIHRoZSBnaXZlbiBleHByZXNzaW9uIHRvIHRoZSB2YWx1ZSBvZiBgPG9wdGlvbj5gIG9yIHtAbGluayBpbnB1dFtyYWRpb10gYGlucHV0W3JhZGlvXWB9LFxuICogc28gdGhhdCB3aGVuIHRoZSBlbGVtZW50IGlzIHNlbGVjdGVkLCB0aGUge0BsaW5rIG5nTW9kZWwgYG5nTW9kZWxgfSBvZiB0aGF0IGVsZW1lbnQgaXMgc2V0IHRvXG4gKiB0aGUgYm91bmQgdmFsdWUuXG4gKlxuICogYG5nVmFsdWVgIGlzIHVzZWZ1bCB3aGVuIGR5bmFtaWNhbGx5IGdlbmVyYXRpbmcgbGlzdHMgb2YgcmFkaW8gYnV0dG9ucyB1c2luZ1xuICoge0BsaW5rIG5nUmVwZWF0IGBuZ1JlcGVhdGB9LCBhcyBzaG93biBiZWxvdy5cbiAqXG4gKiBMaWtld2lzZSwgYG5nVmFsdWVgIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIGA8b3B0aW9uPmAgZWxlbWVudHMgZm9yXG4gKiB0aGUge0BsaW5rIHNlbGVjdCBgc2VsZWN0YH0gZWxlbWVudC4gSW4gdGhhdCBjYXNlIGhvd2V2ZXIsIG9ubHkgc3RyaW5ncyBhcmUgc3VwcG9ydGVkXG4gKiBmb3IgdGhlIGB2YWx1ZSBgYXR0cmlidXRlLCBzbyB0aGUgcmVzdWx0aW5nIGBuZ01vZGVsYCB3aWxsIGFsd2F5cyBiZSBhIHN0cmluZy5cbiAqIFN1cHBvcnQgZm9yIGBzZWxlY3RgIG1vZGVscyB3aXRoIG5vbi1zdHJpbmcgdmFsdWVzIGlzIGF2YWlsYWJsZSB2aWEgYG5nT3B0aW9uc2AuXG4gKlxuICogQGVsZW1lbnQgaW5wdXRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbmdWYWx1ZSBhbmd1bGFyIGV4cHJlc3Npb24sIHdob3NlIHZhbHVlIHdpbGwgYmUgYm91bmQgdG8gdGhlIGB2YWx1ZWAgYXR0cmlidXRlXG4gKiAgIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnRcbiAqXG4gKiBAZXhhbXBsZVxuICAgIDxleGFtcGxlIG5hbWU9XCJuZ1ZhbHVlLWRpcmVjdGl2ZVwiIG1vZHVsZT1cInZhbHVlRXhhbXBsZVwiPlxuICAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgICA8c2NyaXB0PlxuICAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCd2YWx1ZUV4YW1wbGUnLCBbXSlcbiAgICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XG4gICAgICAgICAgICAgICRzY29wZS5uYW1lcyA9IFsncGl6emEnLCAndW5pY29ybnMnLCAncm9ib3RzJ107XG4gICAgICAgICAgICAgICRzY29wZS5teSA9IHsgZmF2b3JpdGU6ICd1bmljb3JucycgfTtcbiAgICAgICAgICAgIH1dKTtcbiAgICAgICA8L3NjcmlwdD5cbiAgICAgICAgPGZvcm0gbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XG4gICAgICAgICAgPGgyPldoaWNoIGlzIHlvdXIgZmF2b3JpdGU/PC9oMj5cbiAgICAgICAgICAgIDxsYWJlbCBuZy1yZXBlYXQ9XCJuYW1lIGluIG5hbWVzXCIgZm9yPVwie3tuYW1lfX1cIj5cbiAgICAgICAgICAgICAge3tuYW1lfX1cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICBuZy1tb2RlbD1cIm15LmZhdm9yaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgIG5nLXZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICBpZD1cInt7bmFtZX19XCJcbiAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmYXZvcml0ZVwiPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2PllvdSBjaG9zZSB7e215LmZhdm9yaXRlfX08L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9maWxlPlxuICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgICB2YXIgZmF2b3JpdGUgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215LmZhdm9yaXRlJykpO1xuXG4gICAgICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGV4cGVjdChmYXZvcml0ZS5nZXRUZXh0KCkpLnRvQ29udGFpbigndW5pY29ybnMnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgYmluZCB0aGUgdmFsdWVzIHRvIHRoZSBpbnB1dHMnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBlbGVtZW50LmFsbChieS5tb2RlbCgnbXkuZmF2b3JpdGUnKSkuZ2V0KDApLmNsaWNrKCk7XG4gICAgICAgICAgZXhwZWN0KGZhdm9yaXRlLmdldFRleHQoKSkudG9Db250YWluKCdwaXp6YScpO1xuICAgICAgICB9KTtcbiAgICAgIDwvZmlsZT5cbiAgICA8L2V4YW1wbGU+XG4gKi9cbnZhciBuZ1ZhbHVlRGlyZWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgcmVzdHJpY3Q6ICdBJyxcbiAgICBwcmlvcml0eTogMTAwLFxuICAgIGNvbXBpbGU6IGZ1bmN0aW9uKHRwbCwgdHBsQXR0cikge1xuICAgICAgaWYgKENPTlNUQU5UX1ZBTFVFX1JFR0VYUC50ZXN0KHRwbEF0dHIubmdWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5nVmFsdWVDb25zdGFudExpbmsoc2NvcGUsIGVsbSwgYXR0cikge1xuICAgICAgICAgIGF0dHIuJHNldCgndmFsdWUnLCBzY29wZS4kZXZhbChhdHRyLm5nVmFsdWUpKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBuZ1ZhbHVlTGluayhzY29wZSwgZWxtLCBhdHRyKSB7XG4gICAgICAgICAgc2NvcGUuJHdhdGNoKGF0dHIubmdWYWx1ZSwgZnVuY3Rpb24gdmFsdWVXYXRjaEFjdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgYXR0ci4kc2V0KCd2YWx1ZScsIHZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAqIEBuYW1lIG5nTW9kZWxPcHRpb25zXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBbGxvd3MgdHVuaW5nIGhvdyBtb2RlbCB1cGRhdGVzIGFyZSBkb25lLiBVc2luZyBgbmdNb2RlbE9wdGlvbnNgIHlvdSBjYW4gc3BlY2lmeSBhIGN1c3RvbSBsaXN0IG9mXG4gKiBldmVudHMgdGhhdCB3aWxsIHRyaWdnZXIgYSBtb2RlbCB1cGRhdGUgYW5kL29yIGEgZGVib3VuY2luZyBkZWxheSBzbyB0aGF0IHRoZSBhY3R1YWwgdXBkYXRlIG9ubHlcbiAqIHRha2VzIHBsYWNlIHdoZW4gYSB0aW1lciBleHBpcmVzOyB0aGlzIHRpbWVyIHdpbGwgYmUgcmVzZXQgYWZ0ZXIgYW5vdGhlciBjaGFuZ2UgdGFrZXMgcGxhY2UuXG4gKlxuICogR2l2ZW4gdGhlIG5hdHVyZSBvZiBgbmdNb2RlbE9wdGlvbnNgLCB0aGUgdmFsdWUgZGlzcGxheWVkIGluc2lkZSBpbnB1dCBmaWVsZHMgaW4gdGhlIHZpZXcgbWlnaHRcbiAqIGJlIGRpZmZlcmVudCB0aGFuIHRoZSB2YWx1ZSBpbiB0aGUgYWN0dWFsIG1vZGVsLiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IHVwZGF0ZSB0aGUgbW9kZWwgeW91XG4gKiBzaG91bGQgYWxzbyBpbnZva2Uge0BsaW5rIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIgYCRyb2xsYmFja1ZpZXdWYWx1ZWB9IG9uIHRoZSByZWxldmFudCBpbnB1dCBmaWVsZCBpblxuICogb3JkZXIgdG8gbWFrZSBzdXJlIGl0IGlzIHN5bmNocm9uaXplZCB3aXRoIHRoZSBtb2RlbCBhbmQgdGhhdCBhbnkgZGVib3VuY2VkIGFjdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBUaGUgZWFzaWVzdCB3YXkgdG8gcmVmZXJlbmNlIHRoZSBjb250cm9sJ3Mge0BsaW5rIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIgYCRyb2xsYmFja1ZpZXdWYWx1ZWB9XG4gKiBtZXRob2QgaXMgYnkgbWFraW5nIHN1cmUgdGhlIGlucHV0IGlzIHBsYWNlZCBpbnNpZGUgYSBmb3JtIHRoYXQgaGFzIGEgYG5hbWVgIGF0dHJpYnV0ZS4gVGhpcyBpc1xuICogaW1wb3J0YW50IGJlY2F1c2UgYGZvcm1gIGNvbnRyb2xsZXJzIGFyZSBwdWJsaXNoZWQgdG8gdGhlIHJlbGF0ZWQgc2NvcGUgdW5kZXIgdGhlIG5hbWUgaW4gdGhlaXJcbiAqIGBuYW1lYCBhdHRyaWJ1dGUuXG4gKlxuICogQW55IHBlbmRpbmcgY2hhbmdlcyB3aWxsIHRha2UgcGxhY2UgaW1tZWRpYXRlbHkgd2hlbiBhbiBlbmNsb3NpbmcgZm9ybSBpcyBzdWJtaXR0ZWQgdmlhIHRoZVxuICogYHN1Ym1pdGAgZXZlbnQuIE5vdGUgdGhhdCBgbmdDbGlja2AgZXZlbnRzIHdpbGwgb2NjdXIgYmVmb3JlIHRoZSBtb2RlbCBpcyB1cGRhdGVkLiBVc2UgYG5nU3VibWl0YFxuICogdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIHVwZGF0ZWQgbW9kZWwuXG4gKlxuICogYG5nTW9kZWxPcHRpb25zYCBoYXMgYW4gZWZmZWN0IG9uIHRoZSBlbGVtZW50IGl0J3MgZGVjbGFyZWQgb24gYW5kIGl0cyBkZXNjZW5kYW50cy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gbmdNb2RlbE9wdGlvbnMgb3B0aW9ucyB0byBhcHBseSB0byB0aGUgY3VycmVudCBtb2RlbC4gVmFsaWQga2V5cyBhcmU6XG4gKiAgIC0gYHVwZGF0ZU9uYDogc3RyaW5nIHNwZWNpZnlpbmcgd2hpY2ggZXZlbnQgc2hvdWxkIHRoZSBpbnB1dCBiZSBib3VuZCB0by4gWW91IGNhbiBzZXQgc2V2ZXJhbFxuICogICAgIGV2ZW50cyB1c2luZyBhbiBzcGFjZSBkZWxpbWl0ZWQgbGlzdC4gVGhlcmUgaXMgYSBzcGVjaWFsIGV2ZW50IGNhbGxlZCBgZGVmYXVsdGAgdGhhdFxuICogICAgIG1hdGNoZXMgdGhlIGRlZmF1bHQgZXZlbnRzIGJlbG9uZ2luZyBvZiB0aGUgY29udHJvbC5cbiAqICAgLSBgZGVib3VuY2VgOiBpbnRlZ2VyIHZhbHVlIHdoaWNoIGNvbnRhaW5zIHRoZSBkZWJvdW5jZSBtb2RlbCB1cGRhdGUgdmFsdWUgaW4gbWlsbGlzZWNvbmRzLiBBXG4gKiAgICAgdmFsdWUgb2YgMCB0cmlnZ2VycyBhbiBpbW1lZGlhdGUgdXBkYXRlLiBJZiBhbiBvYmplY3QgaXMgc3VwcGxpZWQgaW5zdGVhZCwgeW91IGNhbiBzcGVjaWZ5IGFcbiAqICAgICBjdXN0b20gdmFsdWUgZm9yIGVhY2ggZXZlbnQuIEZvciBleGFtcGxlOlxuICogICAgIGBuZy1tb2RlbC1vcHRpb25zPVwieyB1cGRhdGVPbjogJ2RlZmF1bHQgYmx1cicsIGRlYm91bmNlOiB7J2RlZmF1bHQnOiA1MDAsICdibHVyJzogMH0gfVwiYFxuICogICAtIGBhbGxvd0ludmFsaWRgOiBib29sZWFuIHZhbHVlIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBtb2RlbCBjYW4gYmUgc2V0IHdpdGggdmFsdWVzIHRoYXQgZGlkXG4gKiAgICAgbm90IHZhbGlkYXRlIGNvcnJlY3RseSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHNldHRpbmcgdGhlIG1vZGVsIHRvIHVuZGVmaW5lZC5cbiAqICAgLSBgZ2V0dGVyU2V0dGVyYDogYm9vbGVhbiB2YWx1ZSB3aGljaCBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRvIHRyZWF0IGZ1bmN0aW9ucyBib3VuZCB0b1xuICAgICAgIGBuZ01vZGVsYCBhcyBnZXR0ZXJzL3NldHRlcnMuXG4gKiAgIC0gYHRpbWV6b25lYDogRGVmaW5lcyB0aGUgdGltZXpvbmUgdG8gYmUgdXNlZCB0byByZWFkL3dyaXRlIHRoZSBgRGF0ZWAgaW5zdGFuY2UgaW4gdGhlIG1vZGVsIGZvclxuICogICAgIGA8aW5wdXQgdHlwZT1cImRhdGVcIj5gLCBgPGlucHV0IHR5cGU9XCJ0aW1lXCI+YCwgLi4uIC4gUmlnaHQgbm93LCB0aGUgb25seSBzdXBwb3J0ZWQgdmFsdWUgaXMgYCdVVEMnYCxcbiAqICAgICBvdGhlcndpc2UgdGhlIGRlZmF1bHQgdGltZXpvbmUgb2YgdGhlIGJyb3dzZXIgd2lsbCBiZSB1c2VkLlxuICpcbiAqIEBleGFtcGxlXG5cbiAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBvdmVycmlkZSBpbW1lZGlhdGUgdXBkYXRlcy4gQ2hhbmdlcyBvbiB0aGUgaW5wdXRzIHdpdGhpbiB0aGVcbiAgZm9ybSB3aWxsIHVwZGF0ZSB0aGUgbW9kZWwgb25seSB3aGVuIHRoZSBjb250cm9sIGxvc2VzIGZvY3VzIChibHVyIGV2ZW50KS4gSWYgYGVzY2FwZWAga2V5IGlzXG4gIHByZXNzZWQgd2hpbGUgdGhlIGlucHV0IGZpZWxkIGlzIGZvY3VzZWQsIHRoZSB2YWx1ZSBpcyByZXNldCB0byB0aGUgdmFsdWUgaW4gdGhlIGN1cnJlbnQgbW9kZWwuXG5cbiAgPGV4YW1wbGUgbmFtZT1cIm5nTW9kZWxPcHRpb25zLWRpcmVjdGl2ZS1ibHVyXCIgbW9kdWxlPVwib3B0aW9uc0V4YW1wbGVcIj5cbiAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cbiAgICAgICAgPGZvcm0gbmFtZT1cInVzZXJGb3JtXCI+XG4gICAgICAgICAgTmFtZTpcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwidXNlck5hbWVcIlxuICAgICAgICAgICAgICAgICBuZy1tb2RlbD1cInVzZXIubmFtZVwiXG4gICAgICAgICAgICAgICAgIG5nLW1vZGVsLW9wdGlvbnM9XCJ7IHVwZGF0ZU9uOiAnYmx1cicgfVwiXG4gICAgICAgICAgICAgICAgIG5nLWtleXVwPVwiY2FuY2VsKCRldmVudClcIiAvPjxiciAvPlxuXG4gICAgICAgICAgT3RoZXIgZGF0YTpcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuZy1tb2RlbD1cInVzZXIuZGF0YVwiIC8+PGJyIC8+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgICAgPHByZT51c2VyLm5hbWUgPSA8c3BhbiBuZy1iaW5kPVwidXNlci5uYW1lXCI+PC9zcGFuPjwvcHJlPlxuICAgICAgPC9kaXY+XG4gICAgPC9maWxlPlxuICAgIDxmaWxlIG5hbWU9XCJhcHAuanNcIj5cbiAgICAgIGFuZ3VsYXIubW9kdWxlKCdvcHRpb25zRXhhbXBsZScsIFtdKVxuICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xuICAgICAgICAgICRzY29wZS51c2VyID0geyBuYW1lOiAnc2F5JywgZGF0YTogJycgfTtcblxuICAgICAgICAgICRzY29wZS5jYW5jZWwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDI3KSB7XG4gICAgICAgICAgICAgICRzY29wZS51c2VyRm9ybS51c2VyTmFtZS4kcm9sbGJhY2tWaWV3VmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XSk7XG4gICAgPC9maWxlPlxuICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cbiAgICAgIHZhciBtb2RlbCA9IGVsZW1lbnQoYnkuYmluZGluZygndXNlci5uYW1lJykpO1xuICAgICAgdmFyIGlucHV0ID0gZWxlbWVudChieS5tb2RlbCgndXNlci5uYW1lJykpO1xuICAgICAgdmFyIG90aGVyID0gZWxlbWVudChieS5tb2RlbCgndXNlci5kYXRhJykpO1xuXG4gICAgICBpdCgnc2hvdWxkIGFsbG93IGN1c3RvbSBldmVudHMnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgaW5wdXQuc2VuZEtleXMoJyBoZWxsbycpO1xuICAgICAgICBpbnB1dC5jbGljaygpO1xuICAgICAgICBleHBlY3QobW9kZWwuZ2V0VGV4dCgpKS50b0VxdWFsKCdzYXknKTtcbiAgICAgICAgb3RoZXIuY2xpY2soKTtcbiAgICAgICAgZXhwZWN0KG1vZGVsLmdldFRleHQoKSkudG9FcXVhbCgnc2F5IGhlbGxvJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCAkcm9sbGJhY2tWaWV3VmFsdWUgd2hlbiBtb2RlbCBjaGFuZ2VzJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlucHV0LnNlbmRLZXlzKCcgaGVsbG8nKTtcbiAgICAgICAgZXhwZWN0KGlucHV0LmdldEF0dHJpYnV0ZSgndmFsdWUnKSkudG9FcXVhbCgnc2F5IGhlbGxvJyk7XG4gICAgICAgIGlucHV0LnNlbmRLZXlzKHByb3RyYWN0b3IuS2V5LkVTQ0FQRSk7XG4gICAgICAgIGV4cGVjdChpbnB1dC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRvRXF1YWwoJ3NheScpO1xuICAgICAgICBvdGhlci5jbGljaygpO1xuICAgICAgICBleHBlY3QobW9kZWwuZ2V0VGV4dCgpKS50b0VxdWFsKCdzYXknKTtcbiAgICAgIH0pO1xuICAgIDwvZmlsZT5cbiAgPC9leGFtcGxlPlxuXG4gIFRoaXMgb25lIHNob3dzIGhvdyB0byBkZWJvdW5jZSBtb2RlbCBjaGFuZ2VzLiBNb2RlbCB3aWxsIGJlIHVwZGF0ZWQgb25seSAxIHNlYyBhZnRlciBsYXN0IGNoYW5nZS5cbiAgSWYgdGhlIGBDbGVhcmAgYnV0dG9uIGlzIHByZXNzZWQsIGFueSBkZWJvdW5jZWQgYWN0aW9uIGlzIGNhbmNlbGVkIGFuZCB0aGUgdmFsdWUgYmVjb21lcyBlbXB0eS5cblxuICA8ZXhhbXBsZSBuYW1lPVwibmdNb2RlbE9wdGlvbnMtZGlyZWN0aXZlLWRlYm91bmNlXCIgbW9kdWxlPVwib3B0aW9uc0V4YW1wbGVcIj5cbiAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cbiAgICAgICAgPGZvcm0gbmFtZT1cInVzZXJGb3JtXCI+XG4gICAgICAgICAgTmFtZTpcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwidXNlck5hbWVcIlxuICAgICAgICAgICAgICAgICBuZy1tb2RlbD1cInVzZXIubmFtZVwiXG4gICAgICAgICAgICAgICAgIG5nLW1vZGVsLW9wdGlvbnM9XCJ7IGRlYm91bmNlOiAxMDAwIH1cIiAvPlxuICAgICAgICAgIDxidXR0b24gbmctY2xpY2s9XCJ1c2VyRm9ybS51c2VyTmFtZS4kcm9sbGJhY2tWaWV3VmFsdWUoKTsgdXNlci5uYW1lPScnXCI+Q2xlYXI8L2J1dHRvbj48YnIgLz5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgICA8cHJlPnVzZXIubmFtZSA9IDxzcGFuIG5nLWJpbmQ9XCJ1c2VyLm5hbWVcIj48L3NwYW4+PC9wcmU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2ZpbGU+XG4gICAgPGZpbGUgbmFtZT1cImFwcC5qc1wiPlxuICAgICAgYW5ndWxhci5tb2R1bGUoJ29wdGlvbnNFeGFtcGxlJywgW10pXG4gICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XG4gICAgICAgICAgJHNjb3BlLnVzZXIgPSB7IG5hbWU6ICdzYXknIH07XG4gICAgICAgIH1dKTtcbiAgICA8L2ZpbGU+XG4gIDwvZXhhbXBsZT5cblxuICBUaGlzIG9uZSBzaG93cyBob3cgdG8gYmluZCB0byBnZXR0ZXIvc2V0dGVyczpcblxuICA8ZXhhbXBsZSBuYW1lPVwibmdNb2RlbE9wdGlvbnMtZGlyZWN0aXZlLWdldHRlci1zZXR0ZXJcIiBtb2R1bGU9XCJnZXR0ZXJTZXR0ZXJFeGFtcGxlXCI+XG4gICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XG4gICAgICAgIDxmb3JtIG5hbWU9XCJ1c2VyRm9ybVwiPlxuICAgICAgICAgIE5hbWU6XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInVzZXJOYW1lXCJcbiAgICAgICAgICAgICAgICAgbmctbW9kZWw9XCJ1c2VyLm5hbWVcIlxuICAgICAgICAgICAgICAgICBuZy1tb2RlbC1vcHRpb25zPVwieyBnZXR0ZXJTZXR0ZXI6IHRydWUgfVwiIC8+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgICAgPHByZT51c2VyLm5hbWUgPSA8c3BhbiBuZy1iaW5kPVwidXNlci5uYW1lKClcIj48L3NwYW4+PC9wcmU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2ZpbGU+XG4gICAgPGZpbGUgbmFtZT1cImFwcC5qc1wiPlxuICAgICAgYW5ndWxhci5tb2R1bGUoJ2dldHRlclNldHRlckV4YW1wbGUnLCBbXSlcbiAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcbiAgICAgICAgICB2YXIgX25hbWUgPSAnQnJpYW4nO1xuICAgICAgICAgICRzY29wZS51c2VyID0ge1xuICAgICAgICAgICAgbmFtZTogZnVuY3Rpb24obmV3TmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gYW5ndWxhci5pc0RlZmluZWQobmV3TmFtZSkgPyAoX25hbWUgPSBuZXdOYW1lKSA6IF9uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1dKTtcbiAgICA8L2ZpbGU+XG4gIDwvZXhhbXBsZT5cbiAqL1xudmFyIG5nTW9kZWxPcHRpb25zRGlyZWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB7XG4gICAgcmVzdHJpY3Q6ICdBJyxcbiAgICBjb250cm9sbGVyOiBbJyRzY29wZScsICckYXR0cnMnLCBmdW5jdGlvbigkc2NvcGUsICRhdHRycykge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdGhpcy4kb3B0aW9ucyA9ICRzY29wZS4kZXZhbCgkYXR0cnMubmdNb2RlbE9wdGlvbnMpO1xuICAgICAgLy8gQWxsb3cgYWRkaW5nL292ZXJyaWRpbmcgYm91bmQgZXZlbnRzXG4gICAgICBpZiAodGhpcy4kb3B0aW9ucy51cGRhdGVPbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuJG9wdGlvbnMudXBkYXRlT25EZWZhdWx0ID0gZmFsc2U7XG4gICAgICAgIC8vIGV4dHJhY3QgXCJkZWZhdWx0XCIgcHNldWRvLWV2ZW50IGZyb20gbGlzdCBvZiBldmVudHMgdGhhdCBjYW4gdHJpZ2dlciBhIG1vZGVsIHVwZGF0ZVxuICAgICAgICB0aGlzLiRvcHRpb25zLnVwZGF0ZU9uID0gdHJpbSh0aGlzLiRvcHRpb25zLnVwZGF0ZU9uLnJlcGxhY2UoREVGQVVMVF9SRUdFWFAsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRoYXQuJG9wdGlvbnMudXBkYXRlT25EZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gJyAnO1xuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRvcHRpb25zLnVwZGF0ZU9uRGVmYXVsdCA9IHRydWU7XG4gICAgICB9XG4gICAgfV1cbiAgfTtcbn07XG5cbi8vIGhlbHBlciBtZXRob2RzXG5mdW5jdGlvbiBhZGRTZXRWYWxpZGl0eU1ldGhvZChjb250ZXh0KSB7XG4gIHZhciBjdHJsID0gY29udGV4dC5jdHJsLFxuICAgICAgJGVsZW1lbnQgPSBjb250ZXh0LiRlbGVtZW50LFxuICAgICAgY2xhc3NDYWNoZSA9IHt9LFxuICAgICAgc2V0ID0gY29udGV4dC5zZXQsXG4gICAgICB1bnNldCA9IGNvbnRleHQudW5zZXQsXG4gICAgICBwYXJlbnRGb3JtID0gY29udGV4dC5wYXJlbnRGb3JtLFxuICAgICAgJGFuaW1hdGUgPSBjb250ZXh0LiRhbmltYXRlO1xuXG4gIGNsYXNzQ2FjaGVbSU5WQUxJRF9DTEFTU10gPSAhKGNsYXNzQ2FjaGVbVkFMSURfQ0xBU1NdID0gJGVsZW1lbnQuaGFzQ2xhc3MoVkFMSURfQ0xBU1MpKTtcblxuICBjdHJsLiRzZXRWYWxpZGl0eSA9IHNldFZhbGlkaXR5O1xuXG4gIGZ1bmN0aW9uIHNldFZhbGlkaXR5KHZhbGlkYXRpb25FcnJvcktleSwgc3RhdGUsIG9wdGlvbnMpIHtcbiAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY3JlYXRlQW5kU2V0KCckcGVuZGluZycsIHZhbGlkYXRpb25FcnJvcktleSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2V0QW5kQ2xlYW51cCgnJHBlbmRpbmcnLCB2YWxpZGF0aW9uRXJyb3JLZXksIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoIWlzQm9vbGVhbihzdGF0ZSkpIHtcbiAgICAgIHVuc2V0KGN0cmwuJGVycm9yLCB2YWxpZGF0aW9uRXJyb3JLZXksIG9wdGlvbnMpO1xuICAgICAgdW5zZXQoY3RybC4kJHN1Y2Nlc3MsIHZhbGlkYXRpb25FcnJvcktleSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICB1bnNldChjdHJsLiRlcnJvciwgdmFsaWRhdGlvbkVycm9yS2V5LCBvcHRpb25zKTtcbiAgICAgICAgc2V0KGN0cmwuJCRzdWNjZXNzLCB2YWxpZGF0aW9uRXJyb3JLZXksIG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0KGN0cmwuJGVycm9yLCB2YWxpZGF0aW9uRXJyb3JLZXksIG9wdGlvbnMpO1xuICAgICAgICB1bnNldChjdHJsLiQkc3VjY2VzcywgdmFsaWRhdGlvbkVycm9yS2V5LCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGN0cmwuJHBlbmRpbmcpIHtcbiAgICAgIGNhY2hlZFRvZ2dsZUNsYXNzKFBFTkRJTkdfQ0xBU1MsIHRydWUpO1xuICAgICAgY3RybC4kdmFsaWQgPSBjdHJsLiRpbnZhbGlkID0gdW5kZWZpbmVkO1xuICAgICAgdG9nZ2xlVmFsaWRhdGlvbkNzcygnJywgbnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlZFRvZ2dsZUNsYXNzKFBFTkRJTkdfQ0xBU1MsIGZhbHNlKTtcbiAgICAgIGN0cmwuJHZhbGlkID0gaXNPYmplY3RFbXB0eShjdHJsLiRlcnJvcik7XG4gICAgICBjdHJsLiRpbnZhbGlkID0gIWN0cmwuJHZhbGlkO1xuICAgICAgdG9nZ2xlVmFsaWRhdGlvbkNzcygnJywgY3RybC4kdmFsaWQpO1xuICAgIH1cblxuICAgIC8vIHJlLXJlYWQgdGhlIHN0YXRlIGFzIHRoZSBzZXQvdW5zZXQgbWV0aG9kcyBjb3VsZCBoYXZlXG4gICAgLy8gY29tYmluZWQgc3RhdGUgaW4gY3RybC4kZXJyb3JbdmFsaWRhdGlvbkVycm9yXSAodXNlZCBmb3IgZm9ybXMpLFxuICAgIC8vIHdoZXJlIHNldHRpbmcvdW5zZXR0aW5nIG9ubHkgaW5jcmVtZW50cy9kZWNyZW1lbnRzIHRoZSB2YWx1ZSxcbiAgICAvLyBhbmQgZG9lcyBub3QgcmVwbGFjZSBpdC5cbiAgICB2YXIgY29tYmluZWRTdGF0ZTtcbiAgICBpZiAoY3RybC4kcGVuZGluZyAmJiBjdHJsLiRwZW5kaW5nW3ZhbGlkYXRpb25FcnJvcktleV0pIHtcbiAgICAgIGNvbWJpbmVkU3RhdGUgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChjdHJsLiRlcnJvclt2YWxpZGF0aW9uRXJyb3JLZXldKSB7XG4gICAgICBjb21iaW5lZFN0YXRlID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChjdHJsLiQkc3VjY2Vzc1t2YWxpZGF0aW9uRXJyb3JLZXldKSB7XG4gICAgICBjb21iaW5lZFN0YXRlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tYmluZWRTdGF0ZSA9IG51bGw7XG4gICAgfVxuICAgIHRvZ2dsZVZhbGlkYXRpb25Dc3ModmFsaWRhdGlvbkVycm9yS2V5LCBjb21iaW5lZFN0YXRlKTtcbiAgICBwYXJlbnRGb3JtLiRzZXRWYWxpZGl0eSh2YWxpZGF0aW9uRXJyb3JLZXksIGNvbWJpbmVkU3RhdGUsIGN0cmwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW5kU2V0KG5hbWUsIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjdHJsW25hbWVdKSB7XG4gICAgICBjdHJsW25hbWVdID0ge307XG4gICAgfVxuICAgIHNldChjdHJsW25hbWVdLCB2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cblxuICBmdW5jdGlvbiB1bnNldEFuZENsZWFudXAobmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICBpZiAoY3RybFtuYW1lXSkge1xuICAgICAgdW5zZXQoY3RybFtuYW1lXSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoaXNPYmplY3RFbXB0eShjdHJsW25hbWVdKSkge1xuICAgICAgY3RybFtuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjYWNoZWRUb2dnbGVDbGFzcyhjbGFzc05hbWUsIHN3aXRjaFZhbHVlKSB7XG4gICAgaWYgKHN3aXRjaFZhbHVlICYmICFjbGFzc0NhY2hlW2NsYXNzTmFtZV0pIHtcbiAgICAgICRhbmltYXRlLmFkZENsYXNzKCRlbGVtZW50LCBjbGFzc05hbWUpO1xuICAgICAgY2xhc3NDYWNoZVtjbGFzc05hbWVdID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCFzd2l0Y2hWYWx1ZSAmJiBjbGFzc0NhY2hlW2NsYXNzTmFtZV0pIHtcbiAgICAgICRhbmltYXRlLnJlbW92ZUNsYXNzKCRlbGVtZW50LCBjbGFzc05hbWUpO1xuICAgICAgY2xhc3NDYWNoZVtjbGFzc05hbWVdID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlVmFsaWRhdGlvbkNzcyh2YWxpZGF0aW9uRXJyb3JLZXksIGlzVmFsaWQpIHtcbiAgICB2YWxpZGF0aW9uRXJyb3JLZXkgPSB2YWxpZGF0aW9uRXJyb3JLZXkgPyAnLScgKyBzbmFrZV9jYXNlKHZhbGlkYXRpb25FcnJvcktleSwgJy0nKSA6ICcnO1xuXG4gICAgY2FjaGVkVG9nZ2xlQ2xhc3MoVkFMSURfQ0xBU1MgKyB2YWxpZGF0aW9uRXJyb3JLZXksIGlzVmFsaWQgPT09IHRydWUpO1xuICAgIGNhY2hlZFRvZ2dsZUNsYXNzKElOVkFMSURfQ0xBU1MgKyB2YWxpZGF0aW9uRXJyb3JLZXksIGlzVmFsaWQgPT09IGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iaikge1xuICBpZiAob2JqKSB7XG4gICAgZm9yICh2YXIgcHJvcCBpbiBvYmopIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgbmdCaW5kXG4gKiBAcmVzdHJpY3QgQUNcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBgbmdCaW5kYCBhdHRyaWJ1dGUgdGVsbHMgQW5ndWxhciB0byByZXBsYWNlIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIHNwZWNpZmllZCBIVE1MIGVsZW1lbnRcbiAqIHdpdGggdGhlIHZhbHVlIG9mIGEgZ2l2ZW4gZXhwcmVzc2lvbiwgYW5kIHRvIHVwZGF0ZSB0aGUgdGV4dCBjb250ZW50IHdoZW4gdGhlIHZhbHVlIG9mIHRoYXRcbiAqIGV4cHJlc3Npb24gY2hhbmdlcy5cbiAqXG4gKiBUeXBpY2FsbHksIHlvdSBkb24ndCB1c2UgYG5nQmluZGAgZGlyZWN0bHksIGJ1dCBpbnN0ZWFkIHlvdSB1c2UgdGhlIGRvdWJsZSBjdXJseSBtYXJrdXAgbGlrZVxuICogYHt7IGV4cHJlc3Npb24gfX1gIHdoaWNoIGlzIHNpbWlsYXIgYnV0IGxlc3MgdmVyYm9zZS5cbiAqXG4gKiBJdCBpcyBwcmVmZXJhYmxlIHRvIHVzZSBgbmdCaW5kYCBpbnN0ZWFkIG9mIGB7eyBleHByZXNzaW9uIH19YCBpZiBhIHRlbXBsYXRlIGlzIG1vbWVudGFyaWx5XG4gKiBkaXNwbGF5ZWQgYnkgdGhlIGJyb3dzZXIgaW4gaXRzIHJhdyBzdGF0ZSBiZWZvcmUgQW5ndWxhciBjb21waWxlcyBpdC4gU2luY2UgYG5nQmluZGAgaXMgYW5cbiAqIGVsZW1lbnQgYXR0cmlidXRlLCBpdCBtYWtlcyB0aGUgYmluZGluZ3MgaW52aXNpYmxlIHRvIHRoZSB1c2VyIHdoaWxlIHRoZSBwYWdlIGlzIGxvYWRpbmcuXG4gKlxuICogQW4gYWx0ZXJuYXRpdmUgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIHdvdWxkIGJlIHVzaW5nIHRoZVxuICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0Nsb2FrIG5nQ2xvYWt9IGRpcmVjdGl2ZS5cbiAqXG4gKlxuICogQGVsZW1lbnQgQU5ZXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQmluZCB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogRW50ZXIgYSBuYW1lIGluIHRoZSBMaXZlIFByZXZpZXcgdGV4dCBib3g7IHRoZSBncmVldGluZyBiZWxvdyB0aGUgdGV4dCBib3ggY2hhbmdlcyBpbnN0YW50bHkuXG4gICA8ZXhhbXBsZSBtb2R1bGU9XCJiaW5kRXhhbXBsZVwiPlxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICBhbmd1bGFyLm1vZHVsZSgnYmluZEV4YW1wbGUnLCBbXSlcbiAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcbiAgICAgICAgICAgICAkc2NvcGUubmFtZSA9ICdXaGlybGVkJztcbiAgICAgICAgICAgfV0pO1xuICAgICAgIDwvc2NyaXB0PlxuICAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XG4gICAgICAgICBFbnRlciBuYW1lOiA8aW5wdXQgdHlwZT1cInRleHRcIiBuZy1tb2RlbD1cIm5hbWVcIj48YnI+XG4gICAgICAgICBIZWxsbyA8c3BhbiBuZy1iaW5kPVwibmFtZVwiPjwvc3Bhbj4hXG4gICAgICAgPC9kaXY+XG4gICAgIDwvZmlsZT5cbiAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctYmluZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgdmFyIG5hbWVJbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ25hbWUnKSk7XG5cbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJ25hbWUnKSkuZ2V0VGV4dCgpKS50b0JlKCdXaGlybGVkJyk7XG4gICAgICAgICBuYW1lSW5wdXQuY2xlYXIoKTtcbiAgICAgICAgIG5hbWVJbnB1dC5zZW5kS2V5cygnd29ybGQnKTtcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJ25hbWUnKSkuZ2V0VGV4dCgpKS50b0JlKCd3b3JsZCcpO1xuICAgICAgIH0pO1xuICAgICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG4gKi9cbnZhciBuZ0JpbmREaXJlY3RpdmUgPSBbJyRjb21waWxlJywgZnVuY3Rpb24oJGNvbXBpbGUpIHtcbiAgcmV0dXJuIHtcbiAgICByZXN0cmljdDogJ0FDJyxcbiAgICBjb21waWxlOiBmdW5jdGlvbiBuZ0JpbmRDb21waWxlKHRlbXBsYXRlRWxlbWVudCkge1xuICAgICAgJGNvbXBpbGUuJCRhZGRCaW5kaW5nQ2xhc3ModGVtcGxhdGVFbGVtZW50KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBuZ0JpbmRMaW5rKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7XG4gICAgICAgICRjb21waWxlLiQkYWRkQmluZGluZ0luZm8oZWxlbWVudCwgYXR0ci5uZ0JpbmQpO1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudFswXTtcbiAgICAgICAgc2NvcGUuJHdhdGNoKGF0dHIubmdCaW5kLCBmdW5jdGlvbiBuZ0JpbmRXYXRjaEFjdGlvbih2YWx1ZSkge1xuICAgICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gJycgOiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn1dO1xuXG5cbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgbmdCaW5kVGVtcGxhdGVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBgbmdCaW5kVGVtcGxhdGVgIGRpcmVjdGl2ZSBzcGVjaWZpZXMgdGhhdCB0aGUgZWxlbWVudFxuICogdGV4dCBjb250ZW50IHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZSBpbnRlcnBvbGF0aW9uIG9mIHRoZSB0ZW1wbGF0ZVxuICogaW4gdGhlIGBuZ0JpbmRUZW1wbGF0ZWAgYXR0cmlidXRlLlxuICogVW5saWtlIGBuZ0JpbmRgLCB0aGUgYG5nQmluZFRlbXBsYXRlYCBjYW4gY29udGFpbiBtdWx0aXBsZSBge3tgIGB9fWBcbiAqIGV4cHJlc3Npb25zLiBUaGlzIGRpcmVjdGl2ZSBpcyBuZWVkZWQgc2luY2Ugc29tZSBIVE1MIGVsZW1lbnRzXG4gKiAoc3VjaCBhcyBUSVRMRSBhbmQgT1BUSU9OKSBjYW5ub3QgY29udGFpbiBTUEFOIGVsZW1lbnRzLlxuICpcbiAqIEBlbGVtZW50IEFOWVxuICogQHBhcmFtIHtzdHJpbmd9IG5nQmluZFRlbXBsYXRlIHRlbXBsYXRlIG9mIGZvcm1cbiAqICAgPHR0Pnt7PC90dD4gPHR0PmV4cHJlc3Npb248L3R0PiA8dHQ+fX08L3R0PiB0byBldmFsLlxuICpcbiAqIEBleGFtcGxlXG4gKiBUcnkgaXQgaGVyZTogZW50ZXIgdGV4dCBpbiB0ZXh0IGJveCBhbmQgd2F0Y2ggdGhlIGdyZWV0aW5nIGNoYW5nZS5cbiAgIDxleGFtcGxlIG1vZHVsZT1cImJpbmRFeGFtcGxlXCI+XG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgPHNjcmlwdD5cbiAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdiaW5kRXhhbXBsZScsIFtdKVxuICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xuICAgICAgICAgICAgICRzY29wZS5zYWx1dGF0aW9uID0gJ0hlbGxvJztcbiAgICAgICAgICAgICAkc2NvcGUubmFtZSA9ICdXb3JsZCc7XG4gICAgICAgICAgIH1dKTtcbiAgICAgICA8L3NjcmlwdD5cbiAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxuICAgICAgICBTYWx1dGF0aW9uOiA8aW5wdXQgdHlwZT1cInRleHRcIiBuZy1tb2RlbD1cInNhbHV0YXRpb25cIj48YnI+XG4gICAgICAgIE5hbWU6IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5nLW1vZGVsPVwibmFtZVwiPjxicj5cbiAgICAgICAgPHByZSBuZy1iaW5kLXRlbXBsYXRlPVwie3tzYWx1dGF0aW9ufX0ge3tuYW1lfX0hXCI+PC9wcmU+XG4gICAgICAgPC9kaXY+XG4gICAgIDwvZmlsZT5cbiAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctYmluZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgdmFyIHNhbHV0YXRpb25FbGVtID0gZWxlbWVudChieS5iaW5kaW5nKCdzYWx1dGF0aW9uJykpO1xuICAgICAgICAgdmFyIHNhbHV0YXRpb25JbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ3NhbHV0YXRpb24nKSk7XG4gICAgICAgICB2YXIgbmFtZUlucHV0ID0gZWxlbWVudChieS5tb2RlbCgnbmFtZScpKTtcblxuICAgICAgICAgZXhwZWN0KHNhbHV0YXRpb25FbGVtLmdldFRleHQoKSkudG9CZSgnSGVsbG8gV29ybGQhJyk7XG5cbiAgICAgICAgIHNhbHV0YXRpb25JbnB1dC5jbGVhcigpO1xuICAgICAgICAgc2FsdXRhdGlvbklucHV0LnNlbmRLZXlzKCdHcmVldGluZ3MnKTtcbiAgICAgICAgIG5hbWVJbnB1dC5jbGVhcigpO1xuICAgICAgICAgbmFtZUlucHV0LnNlbmRLZXlzKCd1c2VyJyk7XG5cbiAgICAgICAgIGV4cGVjdChzYWx1dGF0aW9uRWxlbS5nZXRUZXh0KCkpLnRvQmUoJ0dyZWV0aW5ncyB1c2VyIScpO1xuICAgICAgIH0pO1xuICAgICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG4gKi9cbnZhciBuZ0JpbmRUZW1wbGF0ZURpcmVjdGl2ZSA9IFsnJGludGVycG9sYXRlJywgJyRjb21waWxlJywgZnVuY3Rpb24oJGludGVycG9sYXRlLCAkY29tcGlsZSkge1xuICByZXR1cm4ge1xuICAgIGNvbXBpbGU6IGZ1bmN0aW9uIG5nQmluZFRlbXBsYXRlQ29tcGlsZSh0ZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICAgICRjb21waWxlLiQkYWRkQmluZGluZ0NsYXNzKHRlbXBsYXRlRWxlbWVudCk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gbmdCaW5kVGVtcGxhdGVMaW5rKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7XG4gICAgICAgIHZhciBpbnRlcnBvbGF0ZUZuID0gJGludGVycG9sYXRlKGVsZW1lbnQuYXR0cihhdHRyLiRhdHRyLm5nQmluZFRlbXBsYXRlKSk7XG4gICAgICAgICRjb21waWxlLiQkYWRkQmluZGluZ0luZm8oZWxlbWVudCwgaW50ZXJwb2xhdGVGbi5leHByZXNzaW9ucyk7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50WzBdO1xuICAgICAgICBhdHRyLiRvYnNlcnZlKCduZ0JpbmRUZW1wbGF0ZScsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IHZhbHVlID09PSB1bmRlZmluZWQgPyAnJyA6IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xufV07XG5cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ0JpbmRIdG1sXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDcmVhdGVzIGEgYmluZGluZyB0aGF0IHdpbGwgaW5uZXJIVE1MIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyB0aGUgYGV4cHJlc3Npb25gIGludG8gdGhlIGN1cnJlbnRcbiAqIGVsZW1lbnQgaW4gYSBzZWN1cmUgd2F5LiAgQnkgZGVmYXVsdCwgdGhlIGlubmVySFRNTC1lZCBjb250ZW50IHdpbGwgYmUgc2FuaXRpemVkIHVzaW5nIHRoZSB7QGxpbmtcbiAqIG5nU2FuaXRpemUuJHNhbml0aXplICRzYW5pdGl6ZX0gc2VydmljZS4gIFRvIHV0aWxpemUgdGhpcyBmdW5jdGlvbmFsaXR5LCBlbnN1cmUgdGhhdCBgJHNhbml0aXplYFxuICogaXMgYXZhaWxhYmxlLCBmb3IgZXhhbXBsZSwgYnkgaW5jbHVkaW5nIHtAbGluayBuZ1Nhbml0aXplfSBpbiB5b3VyIG1vZHVsZSdzIGRlcGVuZGVuY2llcyAobm90IGluXG4gKiBjb3JlIEFuZ3VsYXIpLiBJbiBvcmRlciB0byB1c2Uge0BsaW5rIG5nU2FuaXRpemV9IGluIHlvdXIgbW9kdWxlJ3MgZGVwZW5kZW5jaWVzLCB5b3UgbmVlZCB0b1xuICogaW5jbHVkZSBcImFuZ3VsYXItc2FuaXRpemUuanNcIiBpbiB5b3VyIGFwcGxpY2F0aW9uLlxuICpcbiAqIFlvdSBtYXkgYWxzbyBieXBhc3Mgc2FuaXRpemF0aW9uIGZvciB2YWx1ZXMgeW91IGtub3cgYXJlIHNhZmUuIFRvIGRvIHNvLCBiaW5kIHRvXG4gKiBhbiBleHBsaWNpdGx5IHRydXN0ZWQgdmFsdWUgdmlhIHtAbGluayBuZy4kc2NlI3RydXN0QXNIdG1sICRzY2UudHJ1c3RBc0h0bWx9LiAgU2VlIHRoZSBleGFtcGxlXG4gKiB1bmRlciB7QGxpbmsgbmcuJHNjZSNzaG93LW1lLWFuLWV4YW1wbGUtdXNpbmctc2NlLSBTdHJpY3QgQ29udGV4dHVhbCBFc2NhcGluZyAoU0NFKX0uXG4gKlxuICogTm90ZTogSWYgYSBgJHNhbml0aXplYCBzZXJ2aWNlIGlzIHVuYXZhaWxhYmxlIGFuZCB0aGUgYm91bmQgdmFsdWUgaXNuJ3QgZXhwbGljaXRseSB0cnVzdGVkLCB5b3VcbiAqIHdpbGwgaGF2ZSBhbiBleGNlcHRpb24gKGluc3RlYWQgb2YgYW4gZXhwbG9pdC4pXG4gKlxuICogQGVsZW1lbnQgQU5ZXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQmluZEh0bWwge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUuXG4gKlxuICogQGV4YW1wbGVcblxuICAgPGV4YW1wbGUgbW9kdWxlPVwiYmluZEh0bWxFeGFtcGxlXCIgZGVwcz1cImFuZ3VsYXItc2FuaXRpemUuanNcIj5cbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxuICAgICAgICA8cCBuZy1iaW5kLWh0bWw9XCJteUhUTUxcIj48L3A+XG4gICAgICAgPC9kaXY+XG4gICAgIDwvZmlsZT5cblxuICAgICA8ZmlsZSBuYW1lPVwic2NyaXB0LmpzXCI+XG4gICAgICAgYW5ndWxhci5tb2R1bGUoJ2JpbmRIdG1sRXhhbXBsZScsIFsnbmdTYW5pdGl6ZSddKVxuICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcbiAgICAgICAgICAgJHNjb3BlLm15SFRNTCA9XG4gICAgICAgICAgICAgICdJIGFtIGFuIDxjb2RlPkhUTUw8L2NvZGU+c3RyaW5nIHdpdGggJyArXG4gICAgICAgICAgICAgICc8YSBocmVmPVwiI1wiPmxpbmtzITwvYT4gYW5kIG90aGVyIDxlbT5zdHVmZjwvZW0+JztcbiAgICAgICAgIH1dKTtcbiAgICAgPC9maWxlPlxuXG4gICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cbiAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLWJpbmQtaHRtbCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygnbXlIVE1MJykpLmdldFRleHQoKSkudG9CZShcbiAgICAgICAgICAgICAnSSBhbSBhbiBIVE1Mc3RyaW5nIHdpdGggbGlua3MhIGFuZCBvdGhlciBzdHVmZicpO1xuICAgICAgIH0pO1xuICAgICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG4gKi9cbnZhciBuZ0JpbmRIdG1sRGlyZWN0aXZlID0gWyckc2NlJywgJyRwYXJzZScsICckY29tcGlsZScsIGZ1bmN0aW9uKCRzY2UsICRwYXJzZSwgJGNvbXBpbGUpIHtcbiAgcmV0dXJuIHtcbiAgICByZXN0cmljdDogJ0EnLFxuICAgIGNvbXBpbGU6IGZ1bmN0aW9uIG5nQmluZEh0bWxDb21waWxlKHRFbGVtZW50LCB0QXR0cnMpIHtcbiAgICAgIHZhciBuZ0JpbmRIdG1sR2V0dGVyID0gJHBhcnNlKHRBdHRycy5uZ0JpbmRIdG1sKTtcbiAgICAgIHZhciBuZ0JpbmRIdG1sV2F0Y2ggPSAkcGFyc2UodEF0dHJzLm5nQmluZEh0bWwsIGZ1bmN0aW9uIGdldFN0cmluZ1ZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUgfHwgJycpLnRvU3RyaW5nKCk7XG4gICAgICB9KTtcbiAgICAgICRjb21waWxlLiQkYWRkQmluZGluZ0NsYXNzKHRFbGVtZW50KTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5nQmluZEh0bWxMaW5rKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7XG4gICAgICAgICRjb21waWxlLiQkYWRkQmluZGluZ0luZm8oZWxlbWVudCwgYXR0ci5uZ0JpbmRIdG1sKTtcblxuICAgICAgICBzY29wZS4kd2F0Y2gobmdCaW5kSHRtbFdhdGNoLCBmdW5jdGlvbiBuZ0JpbmRIdG1sV2F0Y2hBY3Rpb24oKSB7XG4gICAgICAgICAgLy8gd2UgcmUtZXZhbHVhdGUgdGhlIGV4cHIgYmVjYXVzZSB3ZSB3YW50IGEgVHJ1c3RlZFZhbHVlSG9sZGVyVHlwZVxuICAgICAgICAgIC8vIGZvciAkc2NlLCBub3QgYSBzdHJpbmdcbiAgICAgICAgICBlbGVtZW50Lmh0bWwoJHNjZS5nZXRUcnVzdGVkSHRtbChuZ0JpbmRIdG1sR2V0dGVyKHNjb3BlKSkgfHwgJycpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xufV07XG5cbmZ1bmN0aW9uIGNsYXNzRGlyZWN0aXZlKG5hbWUsIHNlbGVjdG9yKSB7XG4gIG5hbWUgPSAnbmdDbGFzcycgKyBuYW1lO1xuICByZXR1cm4gWyckYW5pbWF0ZScsIGZ1bmN0aW9uKCRhbmltYXRlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3RyaWN0OiAnQUMnLFxuICAgICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIpIHtcbiAgICAgICAgdmFyIG9sZFZhbDtcblxuICAgICAgICBzY29wZS4kd2F0Y2goYXR0cltuYW1lXSwgbmdDbGFzc1dhdGNoQWN0aW9uLCB0cnVlKTtcblxuICAgICAgICBhdHRyLiRvYnNlcnZlKCdjbGFzcycsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgbmdDbGFzc1dhdGNoQWN0aW9uKHNjb3BlLiRldmFsKGF0dHJbbmFtZV0pKTtcbiAgICAgICAgfSk7XG5cblxuICAgICAgICBpZiAobmFtZSAhPT0gJ25nQ2xhc3MnKSB7XG4gICAgICAgICAgc2NvcGUuJHdhdGNoKCckaW5kZXgnLCBmdW5jdGlvbigkaW5kZXgsIG9sZCRpbmRleCkge1xuICAgICAgICAgICAgLy8ganNoaW50IGJpdHdpc2U6IGZhbHNlXG4gICAgICAgICAgICB2YXIgbW9kID0gJGluZGV4ICYgMTtcbiAgICAgICAgICAgIGlmIChtb2QgIT09IChvbGQkaW5kZXggJiAxKSkge1xuICAgICAgICAgICAgICB2YXIgY2xhc3NlcyA9IGFycmF5Q2xhc3NlcyhzY29wZS4kZXZhbChhdHRyW25hbWVdKSk7XG4gICAgICAgICAgICAgIG1vZCA9PT0gc2VsZWN0b3IgP1xuICAgICAgICAgICAgICAgIGFkZENsYXNzZXMoY2xhc3NlcykgOlxuICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzZXMoY2xhc3Nlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBhZGRDbGFzc2VzKGNsYXNzZXMpIHtcbiAgICAgICAgICB2YXIgbmV3Q2xhc3NlcyA9IGRpZ2VzdENsYXNzQ291bnRzKGNsYXNzZXMsIDEpO1xuICAgICAgICAgIGF0dHIuJGFkZENsYXNzKG5ld0NsYXNzZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlQ2xhc3NlcyhjbGFzc2VzKSB7XG4gICAgICAgICAgdmFyIG5ld0NsYXNzZXMgPSBkaWdlc3RDbGFzc0NvdW50cyhjbGFzc2VzLCAtMSk7XG4gICAgICAgICAgYXR0ci4kcmVtb3ZlQ2xhc3MobmV3Q2xhc3Nlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBkaWdlc3RDbGFzc0NvdW50cyhjbGFzc2VzLCBjb3VudCkge1xuICAgICAgICAgIHZhciBjbGFzc0NvdW50cyA9IGVsZW1lbnQuZGF0YSgnJGNsYXNzQ291bnRzJykgfHwge307XG4gICAgICAgICAgdmFyIGNsYXNzZXNUb1VwZGF0ZSA9IFtdO1xuICAgICAgICAgIGZvckVhY2goY2xhc3NlcywgZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBpZiAoY291bnQgPiAwIHx8IGNsYXNzQ291bnRzW2NsYXNzTmFtZV0pIHtcbiAgICAgICAgICAgICAgY2xhc3NDb3VudHNbY2xhc3NOYW1lXSA9IChjbGFzc0NvdW50c1tjbGFzc05hbWVdIHx8IDApICsgY291bnQ7XG4gICAgICAgICAgICAgIGlmIChjbGFzc0NvdW50c1tjbGFzc05hbWVdID09PSArKGNvdW50ID4gMCkpIHtcbiAgICAgICAgICAgICAgICBjbGFzc2VzVG9VcGRhdGUucHVzaChjbGFzc05hbWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZWxlbWVudC5kYXRhKCckY2xhc3NDb3VudHMnLCBjbGFzc0NvdW50cyk7XG4gICAgICAgICAgcmV0dXJuIGNsYXNzZXNUb1VwZGF0ZS5qb2luKCcgJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVDbGFzc2VzKG9sZENsYXNzZXMsIG5ld0NsYXNzZXMpIHtcbiAgICAgICAgICB2YXIgdG9BZGQgPSBhcnJheURpZmZlcmVuY2UobmV3Q2xhc3Nlcywgb2xkQ2xhc3Nlcyk7XG4gICAgICAgICAgdmFyIHRvUmVtb3ZlID0gYXJyYXlEaWZmZXJlbmNlKG9sZENsYXNzZXMsIG5ld0NsYXNzZXMpO1xuICAgICAgICAgIHRvQWRkID0gZGlnZXN0Q2xhc3NDb3VudHModG9BZGQsIDEpO1xuICAgICAgICAgIHRvUmVtb3ZlID0gZGlnZXN0Q2xhc3NDb3VudHModG9SZW1vdmUsIC0xKTtcbiAgICAgICAgICBpZiAodG9BZGQgJiYgdG9BZGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAkYW5pbWF0ZS5hZGRDbGFzcyhlbGVtZW50LCB0b0FkZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0b1JlbW92ZSAmJiB0b1JlbW92ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICRhbmltYXRlLnJlbW92ZUNsYXNzKGVsZW1lbnQsIHRvUmVtb3ZlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBuZ0NsYXNzV2F0Y2hBY3Rpb24obmV3VmFsKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdG9yID09PSB0cnVlIHx8IHNjb3BlLiRpbmRleCAlIDIgPT09IHNlbGVjdG9yKSB7XG4gICAgICAgICAgICB2YXIgbmV3Q2xhc3NlcyA9IGFycmF5Q2xhc3NlcyhuZXdWYWwgfHwgW10pO1xuICAgICAgICAgICAgaWYgKCFvbGRWYWwpIHtcbiAgICAgICAgICAgICAgYWRkQ2xhc3NlcyhuZXdDbGFzc2VzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWVxdWFscyhuZXdWYWwsb2xkVmFsKSkge1xuICAgICAgICAgICAgICB2YXIgb2xkQ2xhc3NlcyA9IGFycmF5Q2xhc3NlcyhvbGRWYWwpO1xuICAgICAgICAgICAgICB1cGRhdGVDbGFzc2VzKG9sZENsYXNzZXMsIG5ld0NsYXNzZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBvbGRWYWwgPSBzaGFsbG93Q29weShuZXdWYWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGFycmF5RGlmZmVyZW5jZSh0b2tlbnMxLCB0b2tlbnMyKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG5cbiAgICAgIG91dGVyOlxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB0b2tlbiA9IHRva2VuczFbaV07XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdG9rZW5zMi5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGlmICh0b2tlbiA9PSB0b2tlbnMyW2pdKSBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXMucHVzaCh0b2tlbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFycmF5Q2xhc3NlcyhjbGFzc1ZhbCkge1xuICAgICAgaWYgKGlzQXJyYXkoY2xhc3NWYWwpKSB7XG4gICAgICAgIHJldHVybiBjbGFzc1ZhbDtcbiAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoY2xhc3NWYWwpKSB7XG4gICAgICAgIHJldHVybiBjbGFzc1ZhbC5zcGxpdCgnICcpO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChjbGFzc1ZhbCkpIHtcbiAgICAgICAgdmFyIGNsYXNzZXMgPSBbXTtcbiAgICAgICAgZm9yRWFjaChjbGFzc1ZhbCwgZnVuY3Rpb24odiwgaykge1xuICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5jb25jYXQoay5zcGxpdCgnICcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2xhc3NlcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc1ZhbDtcbiAgICB9XG4gIH1dO1xufVxuXG4vKipcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAqIEBuYW1lIG5nQ2xhc3NcbiAqIEByZXN0cmljdCBBQ1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIGBuZ0NsYXNzYCBkaXJlY3RpdmUgYWxsb3dzIHlvdSB0byBkeW5hbWljYWxseSBzZXQgQ1NTIGNsYXNzZXMgb24gYW4gSFRNTCBlbGVtZW50IGJ5IGRhdGFiaW5kaW5nXG4gKiBhbiBleHByZXNzaW9uIHRoYXQgcmVwcmVzZW50cyBhbGwgY2xhc3NlcyB0byBiZSBhZGRlZC5cbiAqXG4gKiBUaGUgZGlyZWN0aXZlIG9wZXJhdGVzIGluIHRocmVlIGRpZmZlcmVudCB3YXlzLCBkZXBlbmRpbmcgb24gd2hpY2ggb2YgdGhyZWUgdHlwZXMgdGhlIGV4cHJlc3Npb25cbiAqIGV2YWx1YXRlcyB0bzpcbiAqXG4gKiAxLiBJZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSBzdHJpbmcsIHRoZSBzdHJpbmcgc2hvdWxkIGJlIG9uZSBvciBtb3JlIHNwYWNlLWRlbGltaXRlZCBjbGFzc1xuICogbmFtZXMuXG4gKlxuICogMi4gSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGFuIGFycmF5LCBlYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IHNob3VsZCBiZSBhIHN0cmluZyB0aGF0IGlzXG4gKiBvbmUgb3IgbW9yZSBzcGFjZS1kZWxpbWl0ZWQgY2xhc3MgbmFtZXMuXG4gKlxuICogMy4gSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGFuIG9iamVjdCwgdGhlbiBmb3IgZWFjaCBrZXktdmFsdWUgcGFpciBvZiB0aGVcbiAqIG9iamVjdCB3aXRoIGEgdHJ1dGh5IHZhbHVlIHRoZSBjb3JyZXNwb25kaW5nIGtleSBpcyB1c2VkIGFzIGEgY2xhc3MgbmFtZS5cbiAqXG4gKiBUaGUgZGlyZWN0aXZlIHdvbid0IGFkZCBkdXBsaWNhdGUgY2xhc3NlcyBpZiBhIHBhcnRpY3VsYXIgY2xhc3Mgd2FzIGFscmVhZHkgc2V0LlxuICpcbiAqIFdoZW4gdGhlIGV4cHJlc3Npb24gY2hhbmdlcywgdGhlIHByZXZpb3VzbHkgYWRkZWQgY2xhc3NlcyBhcmUgcmVtb3ZlZCBhbmQgb25seSB0aGVuIHRoZVxuICogbmV3IGNsYXNzZXMgYXJlIGFkZGVkLlxuICpcbiAqIEBhbmltYXRpb25zXG4gKiBhZGQgLSBoYXBwZW5zIGp1c3QgYmVmb3JlIHRoZSBjbGFzcyBpcyBhcHBsaWVkIHRvIHRoZSBlbGVtZW50XG4gKiByZW1vdmUgLSBoYXBwZW5zIGp1c3QgYmVmb3JlIHRoZSBjbGFzcyBpcyByZW1vdmVkIGZyb20gdGhlIGVsZW1lbnRcbiAqXG4gKiBAZWxlbWVudCBBTllcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdDbGFzcyB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsLiBUaGUgcmVzdWx0XG4gKiAgIG9mIHRoZSBldmFsdWF0aW9uIGNhbiBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgc3BhY2UgZGVsaW1pdGVkIGNsYXNzXG4gKiAgIG5hbWVzLCBhbiBhcnJheSwgb3IgYSBtYXAgb2YgY2xhc3MgbmFtZXMgdG8gYm9vbGVhbiB2YWx1ZXMuIEluIHRoZSBjYXNlIG9mIGEgbWFwLCB0aGVcbiAqICAgbmFtZXMgb2YgdGhlIHByb3BlcnRpZXMgd2hvc2UgdmFsdWVzIGFyZSB0cnV0aHkgd2lsbCBiZSBhZGRlZCBhcyBjc3MgY2xhc3NlcyB0byB0aGVcbiAqICAgZWxlbWVudC5cbiAqXG4gKiBAZXhhbXBsZSBFeGFtcGxlIHRoYXQgZGVtb25zdHJhdGVzIGJhc2ljIGJpbmRpbmdzIHZpYSBuZ0NsYXNzIGRpcmVjdGl2ZS5cbiAgIDxleGFtcGxlPlxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgIDxwIG5nLWNsYXNzPVwie3N0cmlrZTogZGVsZXRlZCwgYm9sZDogaW1wb3J0YW50LCByZWQ6IGVycm9yfVwiPk1hcCBTeW50YXggRXhhbXBsZTwvcD5cbiAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmctbW9kZWw9XCJkZWxldGVkXCI+IGRlbGV0ZWQgKGFwcGx5IFwic3RyaWtlXCIgY2xhc3MpPGJyPlxuICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuZy1tb2RlbD1cImltcG9ydGFudFwiPiBpbXBvcnRhbnQgKGFwcGx5IFwiYm9sZFwiIGNsYXNzKTxicj5cbiAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmctbW9kZWw9XCJlcnJvclwiPiBlcnJvciAoYXBwbHkgXCJyZWRcIiBjbGFzcylcbiAgICAgICA8aHI+XG4gICAgICAgPHAgbmctY2xhc3M9XCJzdHlsZVwiPlVzaW5nIFN0cmluZyBTeW50YXg8L3A+XG4gICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmctbW9kZWw9XCJzdHlsZVwiIHBsYWNlaG9sZGVyPVwiVHlwZTogYm9sZCBzdHJpa2UgcmVkXCI+XG4gICAgICAgPGhyPlxuICAgICAgIDxwIG5nLWNsYXNzPVwiW3N0eWxlMSwgc3R5bGUyLCBzdHlsZTNdXCI+VXNpbmcgQXJyYXkgU3ludGF4PC9wPlxuICAgICAgIDxpbnB1dCBuZy1tb2RlbD1cInN0eWxlMVwiIHBsYWNlaG9sZGVyPVwiVHlwZTogYm9sZCwgc3RyaWtlIG9yIHJlZFwiPjxicj5cbiAgICAgICA8aW5wdXQgbmctbW9kZWw9XCJzdHlsZTJcIiBwbGFjZWhvbGRlcj1cIlR5cGU6IGJvbGQsIHN0cmlrZSBvciByZWRcIj48YnI+XG4gICAgICAgPGlucHV0IG5nLW1vZGVsPVwic3R5bGUzXCIgcGxhY2Vob2xkZXI9XCJUeXBlOiBib2xkLCBzdHJpa2Ugb3IgcmVkXCI+PGJyPlxuICAgICA8L2ZpbGU+XG4gICAgIDxmaWxlIG5hbWU9XCJzdHlsZS5jc3NcIj5cbiAgICAgICAuc3RyaWtlIHtcbiAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1xuICAgICAgIH1cbiAgICAgICAuYm9sZCB7XG4gICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgIH1cbiAgICAgICAucmVkIHtcbiAgICAgICAgICAgY29sb3I6IHJlZDtcbiAgICAgICB9XG4gICAgIDwvZmlsZT5cbiAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgIHZhciBwcyA9IGVsZW1lbnQuYWxsKGJ5LmNzcygncCcpKTtcblxuICAgICAgIGl0KCdzaG91bGQgbGV0IHlvdSB0b2dnbGUgdGhlIGNsYXNzJywgZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgIGV4cGVjdChwcy5maXJzdCgpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkubm90LnRvTWF0Y2goL2JvbGQvKTtcbiAgICAgICAgIGV4cGVjdChwcy5maXJzdCgpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkubm90LnRvTWF0Y2goL3JlZC8pO1xuXG4gICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdpbXBvcnRhbnQnKSkuY2xpY2soKTtcbiAgICAgICAgIGV4cGVjdChwcy5maXJzdCgpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkudG9NYXRjaCgvYm9sZC8pO1xuXG4gICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdlcnJvcicpKS5jbGljaygpO1xuICAgICAgICAgZXhwZWN0KHBzLmZpcnN0KCkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS50b01hdGNoKC9yZWQvKTtcbiAgICAgICB9KTtcblxuICAgICAgIGl0KCdzaG91bGQgbGV0IHlvdSB0b2dnbGUgc3RyaW5nIGV4YW1wbGUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgIGV4cGVjdChwcy5nZXQoMSkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS50b0JlKCcnKTtcbiAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3N0eWxlJykpLmNsZWFyKCk7XG4gICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdzdHlsZScpKS5zZW5kS2V5cygncmVkJyk7XG4gICAgICAgICBleHBlY3QocHMuZ2V0KDEpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkudG9CZSgncmVkJyk7XG4gICAgICAgfSk7XG5cbiAgICAgICBpdCgnYXJyYXkgZXhhbXBsZSBzaG91bGQgaGF2ZSAzIGNsYXNzZXMnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgIGV4cGVjdChwcy5sYXN0KCkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS50b0JlKCcnKTtcbiAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3N0eWxlMScpKS5zZW5kS2V5cygnYm9sZCcpO1xuICAgICAgICAgZWxlbWVudChieS5tb2RlbCgnc3R5bGUyJykpLnNlbmRLZXlzKCdzdHJpa2UnKTtcbiAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3N0eWxlMycpKS5zZW5kS2V5cygncmVkJyk7XG4gICAgICAgICBleHBlY3QocHMubGFzdCgpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkudG9CZSgnYm9sZCBzdHJpa2UgcmVkJyk7XG4gICAgICAgfSk7XG4gICAgIDwvZmlsZT5cbiAgIDwvZXhhbXBsZT5cblxuICAgIyMgQW5pbWF0aW9uc1xuXG4gICBUaGUgZXhhbXBsZSBiZWxvdyBkZW1vbnN0cmF0ZXMgaG93IHRvIHBlcmZvcm0gYW5pbWF0aW9ucyB1c2luZyBuZ0NsYXNzLlxuXG4gICA8ZXhhbXBsZSBtb2R1bGU9XCJuZ0FuaW1hdGVcIiBkZXBzPVwiYW5ndWxhci1hbmltYXRlLmpzXCIgYW5pbWF0aW9ucz1cInRydWVcIj5cbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgIDxpbnB1dCBpZD1cInNldGJ0blwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cInNldFwiIG5nLWNsaWNrPVwibXlWYXI9J215LWNsYXNzJ1wiPlxuICAgICAgPGlucHV0IGlkPVwiY2xlYXJidG5cIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJjbGVhclwiIG5nLWNsaWNrPVwibXlWYXI9JydcIj5cbiAgICAgIDxicj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYmFzZS1jbGFzc1wiIG5nLWNsYXNzPVwibXlWYXJcIj5TYW1wbGUgVGV4dDwvc3Bhbj5cbiAgICAgPC9maWxlPlxuICAgICA8ZmlsZSBuYW1lPVwic3R5bGUuY3NzXCI+XG4gICAgICAgLmJhc2UtY2xhc3Mge1xuICAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOmFsbCBjdWJpYy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1MCwgMC45NDApIDAuNXM7XG4gICAgICAgICB0cmFuc2l0aW9uOmFsbCBjdWJpYy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1MCwgMC45NDApIDAuNXM7XG4gICAgICAgfVxuXG4gICAgICAgLmJhc2UtY2xhc3MubXktY2xhc3Mge1xuICAgICAgICAgY29sb3I6IHJlZDtcbiAgICAgICAgIGZvbnQtc2l6ZTozZW07XG4gICAgICAgfVxuICAgICA8L2ZpbGU+XG4gICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cbiAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLWNsYXNzJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5jc3MoJy5iYXNlLWNsYXNzJykpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkubm90LlxuICAgICAgICAgICB0b01hdGNoKC9teS1jbGFzcy8pO1xuXG4gICAgICAgICBlbGVtZW50KGJ5LmlkKCdzZXRidG4nKSkuY2xpY2soKTtcblxuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuY3NzKCcuYmFzZS1jbGFzcycpKS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykpLlxuICAgICAgICAgICB0b01hdGNoKC9teS1jbGFzcy8pO1xuXG4gICAgICAgICBlbGVtZW50KGJ5LmlkKCdjbGVhcmJ0bicpKS5jbGljaygpO1xuXG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5jc3MoJy5iYXNlLWNsYXNzJykpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkubm90LlxuICAgICAgICAgICB0b01hdGNoKC9teS1jbGFzcy8pO1xuICAgICAgIH0pO1xuICAgICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG5cblxuICAgIyMgbmdDbGFzcyBhbmQgcHJlLWV4aXN0aW5nIENTUzMgVHJhbnNpdGlvbnMvQW5pbWF0aW9uc1xuICAgVGhlIG5nQ2xhc3MgZGlyZWN0aXZlIHN0aWxsIHN1cHBvcnRzIENTUzMgVHJhbnNpdGlvbnMvQW5pbWF0aW9ucyBldmVuIGlmIHRoZXkgZG8gbm90IGZvbGxvdyB0aGUgbmdBbmltYXRlIENTUyBuYW1pbmcgc3RydWN0dXJlLlxuICAgVXBvbiBhbmltYXRpb24gbmdBbmltYXRlIHdpbGwgYXBwbHkgc3VwcGxlbWVudGFyeSBDU1MgY2xhc3NlcyB0byB0cmFjayB0aGUgc3RhcnQgYW5kIGVuZCBvZiBhbiBhbmltYXRpb24sIGJ1dCB0aGlzIHdpbGwgbm90IGhpbmRlclxuICAgYW55IHByZS1leGlzdGluZyBDU1MgdHJhbnNpdGlvbnMgYWxyZWFkeSBvbiB0aGUgZWxlbWVudC4gVG8gZ2V0IGFuIGlkZWEgb2Ygd2hhdCBoYXBwZW5zIGR1cmluZyBhIGNsYXNzLWJhc2VkIGFuaW1hdGlvbiwgYmUgc3VyZVxuICAgdG8gdmlldyB0aGUgc3RlcCBieSBzdGVwIGRldGFpbHMgb2Yge0BsaW5rIG5nLiRhbmltYXRlI2FkZENsYXNzICRhbmltYXRlLmFkZENsYXNzfSBhbmRcbiAgIHtAbGluayBuZy4kYW5pbWF0ZSNyZW1vdmVDbGFzcyAkYW5pbWF0ZS5yZW1vdmVDbGFzc30uXG4gKi9cbnZhciBuZ0NsYXNzRGlyZWN0aXZlID0gY2xhc3NEaXJlY3RpdmUoJycsIHRydWUpO1xuXG4vKipcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAqIEBuYW1lIG5nQ2xhc3NPZGRcbiAqIEByZXN0cmljdCBBQ1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIGBuZ0NsYXNzT2RkYCBhbmQgYG5nQ2xhc3NFdmVuYCBkaXJlY3RpdmVzIHdvcmsgZXhhY3RseSBhc1xuICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NsYXNzIG5nQ2xhc3N9LCBleGNlcHQgdGhleSB3b3JrIGluXG4gKiBjb25qdW5jdGlvbiB3aXRoIGBuZ1JlcGVhdGAgYW5kIHRha2UgZWZmZWN0IG9ubHkgb24gb2RkIChldmVuKSByb3dzLlxuICpcbiAqIFRoaXMgZGlyZWN0aXZlIGNhbiBiZSBhcHBsaWVkIG9ubHkgd2l0aGluIHRoZSBzY29wZSBvZiBhblxuICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ1JlcGVhdCBuZ1JlcGVhdH0uXG4gKlxuICogQGVsZW1lbnQgQU5ZXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQ2xhc3NPZGQge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbC4gVGhlIHJlc3VsdFxuICogICBvZiB0aGUgZXZhbHVhdGlvbiBjYW4gYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHNwYWNlIGRlbGltaXRlZCBjbGFzcyBuYW1lcyBvciBhbiBhcnJheS5cbiAqXG4gKiBAZXhhbXBsZVxuICAgPGV4YW1wbGU+XG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgIDxvbCBuZy1pbml0PVwibmFtZXM9WydKb2huJywgJ01hcnknLCAnQ2F0ZScsICdTdXonXVwiPlxuICAgICAgICAgIDxsaSBuZy1yZXBlYXQ9XCJuYW1lIGluIG5hbWVzXCI+XG4gICAgICAgICAgIDxzcGFuIG5nLWNsYXNzLW9kZD1cIidvZGQnXCIgbmctY2xhc3MtZXZlbj1cIidldmVuJ1wiPlxuICAgICAgICAgICAgIHt7bmFtZX19XG4gICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICA8L29sPlxuICAgICA8L2ZpbGU+XG4gICAgIDxmaWxlIG5hbWU9XCJzdHlsZS5jc3NcIj5cbiAgICAgICAub2RkIHtcbiAgICAgICAgIGNvbG9yOiByZWQ7XG4gICAgICAgfVxuICAgICAgIC5ldmVuIHtcbiAgICAgICAgIGNvbG9yOiBibHVlO1xuICAgICAgIH1cbiAgICAgPC9maWxlPlxuICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1jbGFzcy1vZGQgYW5kIG5nLWNsYXNzLWV2ZW4nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LnJlcGVhdGVyKCduYW1lIGluIG5hbWVzJykucm93KDApLmNvbHVtbignbmFtZScpKS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykpLlxuICAgICAgICAgICB0b01hdGNoKC9vZGQvKTtcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LnJlcGVhdGVyKCduYW1lIGluIG5hbWVzJykucm93KDEpLmNvbHVtbignbmFtZScpKS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykpLlxuICAgICAgICAgICB0b01hdGNoKC9ldmVuLyk7XG4gICAgICAgfSk7XG4gICAgIDwvZmlsZT5cbiAgIDwvZXhhbXBsZT5cbiAqL1xudmFyIG5nQ2xhc3NPZGREaXJlY3RpdmUgPSBjbGFzc0RpcmVjdGl2ZSgnT2RkJywgMCk7XG5cbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgbmdDbGFzc0V2ZW5cbiAqIEByZXN0cmljdCBBQ1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIGBuZ0NsYXNzT2RkYCBhbmQgYG5nQ2xhc3NFdmVuYCBkaXJlY3RpdmVzIHdvcmsgZXhhY3RseSBhc1xuICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NsYXNzIG5nQ2xhc3N9LCBleGNlcHQgdGhleSB3b3JrIGluXG4gKiBjb25qdW5jdGlvbiB3aXRoIGBuZ1JlcGVhdGAgYW5kIHRha2UgZWZmZWN0IG9ubHkgb24gb2RkIChldmVuKSByb3dzLlxuICpcbiAqIFRoaXMgZGlyZWN0aXZlIGNhbiBiZSBhcHBsaWVkIG9ubHkgd2l0aGluIHRoZSBzY29wZSBvZiBhblxuICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ1JlcGVhdCBuZ1JlcGVhdH0uXG4gKlxuICogQGVsZW1lbnQgQU5ZXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQ2xhc3NFdmVuIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWwuIFRoZVxuICogICByZXN1bHQgb2YgdGhlIGV2YWx1YXRpb24gY2FuIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBzcGFjZSBkZWxpbWl0ZWQgY2xhc3MgbmFtZXMgb3IgYW4gYXJyYXkuXG4gKlxuICogQGV4YW1wbGVcbiAgIDxleGFtcGxlPlxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgICA8b2wgbmctaW5pdD1cIm5hbWVzPVsnSm9obicsICdNYXJ5JywgJ0NhdGUnLCAnU3V6J11cIj5cbiAgICAgICAgICA8bGkgbmctcmVwZWF0PVwibmFtZSBpbiBuYW1lc1wiPlxuICAgICAgICAgICA8c3BhbiBuZy1jbGFzcy1vZGQ9XCInb2RkJ1wiIG5nLWNsYXNzLWV2ZW49XCInZXZlbidcIj5cbiAgICAgICAgICAgICB7e25hbWV9fSAmbmJzcDsgJm5ic3A7ICZuYnNwO1xuICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC9vbD5cbiAgICAgPC9maWxlPlxuICAgICA8ZmlsZSBuYW1lPVwic3R5bGUuY3NzXCI+XG4gICAgICAgLm9kZCB7XG4gICAgICAgICBjb2xvcjogcmVkO1xuICAgICAgIH1cbiAgICAgICAuZXZlbiB7XG4gICAgICAgICBjb2xvcjogYmx1ZTtcbiAgICAgICB9XG4gICAgIDwvZmlsZT5cbiAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctY2xhc3Mtb2RkIGFuZCBuZy1jbGFzcy1ldmVuJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5yZXBlYXRlcignbmFtZSBpbiBuYW1lcycpLnJvdygwKS5jb2x1bW4oJ25hbWUnKSkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS5cbiAgICAgICAgICAgdG9NYXRjaCgvb2RkLyk7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5yZXBlYXRlcignbmFtZSBpbiBuYW1lcycpLnJvdygxKS5jb2x1bW4oJ25hbWUnKSkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS5cbiAgICAgICAgICAgdG9NYXRjaCgvZXZlbi8pO1xuICAgICAgIH0pO1xuICAgICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG4gKi9cbnZhciBuZ0NsYXNzRXZlbkRpcmVjdGl2ZSA9IGNsYXNzRGlyZWN0aXZlKCdFdmVuJywgMSk7XG5cbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgbmdDbG9ha1xuICogQHJlc3RyaWN0IEFDXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgYG5nQ2xvYWtgIGRpcmVjdGl2ZSBpcyB1c2VkIHRvIHByZXZlbnQgdGhlIEFuZ3VsYXIgaHRtbCB0ZW1wbGF0ZSBmcm9tIGJlaW5nIGJyaWVmbHlcbiAqIGRpc3BsYXllZCBieSB0aGUgYnJvd3NlciBpbiBpdHMgcmF3ICh1bmNvbXBpbGVkKSBmb3JtIHdoaWxlIHlvdXIgYXBwbGljYXRpb24gaXMgbG9hZGluZy4gVXNlIHRoaXNcbiAqIGRpcmVjdGl2ZSB0byBhdm9pZCB0aGUgdW5kZXNpcmFibGUgZmxpY2tlciBlZmZlY3QgY2F1c2VkIGJ5IHRoZSBodG1sIHRlbXBsYXRlIGRpc3BsYXkuXG4gKlxuICogVGhlIGRpcmVjdGl2ZSBjYW4gYmUgYXBwbGllZCB0byB0aGUgYDxib2R5PmAgZWxlbWVudCwgYnV0IHRoZSBwcmVmZXJyZWQgdXNhZ2UgaXMgdG8gYXBwbHlcbiAqIG11bHRpcGxlIGBuZ0Nsb2FrYCBkaXJlY3RpdmVzIHRvIHNtYWxsIHBvcnRpb25zIG9mIHRoZSBwYWdlIHRvIHBlcm1pdCBwcm9ncmVzc2l2ZSByZW5kZXJpbmdcbiAqIG9mIHRoZSBicm93c2VyIHZpZXcuXG4gKlxuICogYG5nQ2xvYWtgIHdvcmtzIGluIGNvb3BlcmF0aW9uIHdpdGggdGhlIGZvbGxvd2luZyBjc3MgcnVsZSBlbWJlZGRlZCB3aXRoaW4gYGFuZ3VsYXIuanNgIGFuZFxuICogYGFuZ3VsYXIubWluLmpzYC5cbiAqIEZvciBDU1AgbW9kZSBwbGVhc2UgYWRkIGBhbmd1bGFyLWNzcC5jc3NgIHRvIHlvdXIgaHRtbCBmaWxlIChzZWUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NzcCBuZ0NzcH0pLlxuICpcbiAqIGBgYGNzc1xuICogW25nXFw6Y2xvYWtdLCBbbmctY2xvYWtdLCBbZGF0YS1uZy1jbG9ha10sIFt4LW5nLWNsb2FrXSwgLm5nLWNsb2FrLCAueC1uZy1jbG9hayB7XG4gKiAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFdoZW4gdGhpcyBjc3MgcnVsZSBpcyBsb2FkZWQgYnkgdGhlIGJyb3dzZXIsIGFsbCBodG1sIGVsZW1lbnRzIChpbmNsdWRpbmcgdGhlaXIgY2hpbGRyZW4pIHRoYXRcbiAqIGFyZSB0YWdnZWQgd2l0aCB0aGUgYG5nQ2xvYWtgIGRpcmVjdGl2ZSBhcmUgaGlkZGVuLiBXaGVuIEFuZ3VsYXIgZW5jb3VudGVycyB0aGlzIGRpcmVjdGl2ZVxuICogZHVyaW5nIHRoZSBjb21waWxhdGlvbiBvZiB0aGUgdGVtcGxhdGUgaXQgZGVsZXRlcyB0aGUgYG5nQ2xvYWtgIGVsZW1lbnQgYXR0cmlidXRlLCBtYWtpbmdcbiAqIHRoZSBjb21waWxlZCBlbGVtZW50IHZpc2libGUuXG4gKlxuICogRm9yIHRoZSBiZXN0IHJlc3VsdCwgdGhlIGBhbmd1bGFyLmpzYCBzY3JpcHQgbXVzdCBiZSBsb2FkZWQgaW4gdGhlIGhlYWQgc2VjdGlvbiBvZiB0aGUgaHRtbFxuICogZG9jdW1lbnQ7IGFsdGVybmF0aXZlbHksIHRoZSBjc3MgcnVsZSBhYm92ZSBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBleHRlcm5hbCBzdHlsZXNoZWV0IG9mIHRoZVxuICogYXBwbGljYXRpb24uXG4gKlxuICogTGVnYWN5IGJyb3dzZXJzLCBsaWtlIElFNywgZG8gbm90IHByb3ZpZGUgYXR0cmlidXRlIHNlbGVjdG9yIHN1cHBvcnQgKGFkZGVkIGluIENTUyAyLjEpIHNvIHRoZXlcbiAqIGNhbm5vdCBtYXRjaCB0aGUgYFtuZ1xcOmNsb2FrXWAgc2VsZWN0b3IuIFRvIHdvcmsgYXJvdW5kIHRoaXMgbGltaXRhdGlvbiwgeW91IG11c3QgYWRkIHRoZSBjc3NcbiAqIGNsYXNzIGBuZy1jbG9ha2AgaW4gYWRkaXRpb24gdG8gdGhlIGBuZ0Nsb2FrYCBkaXJlY3RpdmUgYXMgc2hvd24gaW4gdGhlIGV4YW1wbGUgYmVsb3cuXG4gKlxuICogQGVsZW1lbnQgQU5ZXG4gKlxuICogQGV4YW1wbGVcbiAgIDxleGFtcGxlPlxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgICA8ZGl2IGlkPVwidGVtcGxhdGUxXCIgbmctY2xvYWs+e3sgJ2hlbGxvJyB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwidGVtcGxhdGUyXCIgbmctY2xvYWsgY2xhc3M9XCJuZy1jbG9ha1wiPnt7ICdoZWxsbyBJRTcnIH19PC9kaXY+XG4gICAgIDwvZmlsZT5cbiAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgIGl0KCdzaG91bGQgcmVtb3ZlIHRoZSB0ZW1wbGF0ZSBkaXJlY3RpdmUgYW5kIGNzcyBjbGFzcycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgZXhwZWN0KCQoJyN0ZW1wbGF0ZTEnKS5nZXRBdHRyaWJ1dGUoJ25nLWNsb2FrJykpLlxuICAgICAgICAgICB0b0JlTnVsbCgpO1xuICAgICAgICAgZXhwZWN0KCQoJyN0ZW1wbGF0ZTInKS5nZXRBdHRyaWJ1dGUoJ25nLWNsb2FrJykpLlxuICAgICAgICAgICB0b0JlTnVsbCgpO1xuICAgICAgIH0pO1xuICAgICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG4gKlxuICovXG52YXIgbmdDbG9ha0RpcmVjdGl2ZSA9IG5nRGlyZWN0aXZlKHtcbiAgY29tcGlsZTogZnVuY3Rpb24oZWxlbWVudCwgYXR0cikge1xuICAgIGF0dHIuJHNldCgnbmdDbG9haycsIHVuZGVmaW5lZCk7XG4gICAgZWxlbWVudC5yZW1vdmVDbGFzcygnbmctY2xvYWsnKTtcbiAgfVxufSk7XG5cbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgbmdDb250cm9sbGVyXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgYG5nQ29udHJvbGxlcmAgZGlyZWN0aXZlIGF0dGFjaGVzIGEgY29udHJvbGxlciBjbGFzcyB0byB0aGUgdmlldy4gVGhpcyBpcyBhIGtleSBhc3BlY3Qgb2YgaG93IGFuZ3VsYXJcbiAqIHN1cHBvcnRzIHRoZSBwcmluY2lwbGVzIGJlaGluZCB0aGUgTW9kZWwtVmlldy1Db250cm9sbGVyIGRlc2lnbiBwYXR0ZXJuLlxuICpcbiAqIE1WQyBjb21wb25lbnRzIGluIGFuZ3VsYXI6XG4gKlxuICogKiBNb2RlbCDigJQgTW9kZWxzIGFyZSB0aGUgcHJvcGVydGllcyBvZiBhIHNjb3BlOyBzY29wZXMgYXJlIGF0dGFjaGVkIHRvIHRoZSBET00gd2hlcmUgc2NvcGUgcHJvcGVydGllc1xuICogICBhcmUgYWNjZXNzZWQgdGhyb3VnaCBiaW5kaW5ncy5cbiAqICogVmlldyDigJQgVGhlIHRlbXBsYXRlIChIVE1MIHdpdGggZGF0YSBiaW5kaW5ncykgdGhhdCBpcyByZW5kZXJlZCBpbnRvIHRoZSBWaWV3LlxuICogKiBDb250cm9sbGVyIOKAlCBUaGUgYG5nQ29udHJvbGxlcmAgZGlyZWN0aXZlIHNwZWNpZmllcyBhIENvbnRyb2xsZXIgY2xhc3M7IHRoZSBjbGFzcyBjb250YWlucyBidXNpbmVzc1xuICogICBsb2dpYyBiZWhpbmQgdGhlIGFwcGxpY2F0aW9uIHRvIGRlY29yYXRlIHRoZSBzY29wZSB3aXRoIGZ1bmN0aW9ucyBhbmQgdmFsdWVzXG4gKlxuICogTm90ZSB0aGF0IHlvdSBjYW4gYWxzbyBhdHRhY2ggY29udHJvbGxlcnMgdG8gdGhlIERPTSBieSBkZWNsYXJpbmcgaXQgaW4gYSByb3V0ZSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIHtAbGluayBuZ1JvdXRlLiRyb3V0ZSAkcm91dGV9IHNlcnZpY2UuIEEgY29tbW9uIG1pc3Rha2UgaXMgdG8gZGVjbGFyZSB0aGUgY29udHJvbGxlclxuICogYWdhaW4gdXNpbmcgYG5nLWNvbnRyb2xsZXJgIGluIHRoZSB0ZW1wbGF0ZSBpdHNlbGYuICBUaGlzIHdpbGwgY2F1c2UgdGhlIGNvbnRyb2xsZXIgdG8gYmUgYXR0YWNoZWRcbiAqIGFuZCBleGVjdXRlZCB0d2ljZS5cbiAqXG4gKiBAZWxlbWVudCBBTllcbiAqIEBzY29wZVxuICogQHByaW9yaXR5IDUwMFxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0NvbnRyb2xsZXIgTmFtZSBvZiBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgd2l0aCB0aGUgY3VycmVudFxuICoge0BsaW5rIG5nLiRjb250cm9sbGVyUHJvdmlkZXIgJGNvbnRyb2xsZXJQcm92aWRlcn0gb3IgYW4ge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn1cbiAqIHRoYXQgb24gdGhlIGN1cnJlbnQgc2NvcGUgZXZhbHVhdGVzIHRvIGEgY29uc3RydWN0b3IgZnVuY3Rpb24uXG4gKlxuICogVGhlIGNvbnRyb2xsZXIgaW5zdGFuY2UgY2FuIGJlIHB1Ymxpc2hlZCBpbnRvIGEgc2NvcGUgcHJvcGVydHkgYnkgc3BlY2lmeWluZ1xuICogYG5nLWNvbnRyb2xsZXI9XCJhcyBwcm9wZXJ0eU5hbWVcImAuXG4gKlxuICogSWYgdGhlIGN1cnJlbnQgYCRjb250cm9sbGVyUHJvdmlkZXJgIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGdsb2JhbHMgKHZpYVxuICoge0BsaW5rIG5nLiRjb250cm9sbGVyUHJvdmlkZXIjYWxsb3dHbG9iYWxzIGAkY29udHJvbGxlclByb3ZpZGVyLmFsbG93R2xvYmFscygpYCB9KSwgdGhpcyBtYXlcbiAqIGFsc28gYmUgdGhlIG5hbWUgb2YgYSBnbG9iYWxseSBhY2Nlc3NpYmxlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIChub3QgcmVjb21tZW5kZWQpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBIZXJlIGlzIGEgc2ltcGxlIGZvcm0gZm9yIGVkaXRpbmcgdXNlciBjb250YWN0IGluZm9ybWF0aW9uLiBBZGRpbmcsIHJlbW92aW5nLCBjbGVhcmluZywgYW5kXG4gKiBncmVldGluZyBhcmUgbWV0aG9kcyBkZWNsYXJlZCBvbiB0aGUgY29udHJvbGxlciAoc2VlIHNvdXJjZSB0YWIpLiBUaGVzZSBtZXRob2RzIGNhblxuICogZWFzaWx5IGJlIGNhbGxlZCBmcm9tIHRoZSBhbmd1bGFyIG1hcmt1cC4gQW55IGNoYW5nZXMgdG8gdGhlIGRhdGEgYXJlIGF1dG9tYXRpY2FsbHkgcmVmbGVjdGVkXG4gKiBpbiB0aGUgVmlldyB3aXRob3V0IHRoZSBuZWVkIGZvciBhIG1hbnVhbCB1cGRhdGUuXG4gKlxuICogVHdvIGRpZmZlcmVudCBkZWNsYXJhdGlvbiBzdHlsZXMgYXJlIGluY2x1ZGVkIGJlbG93OlxuICpcbiAqICogb25lIGJpbmRzIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgZGlyZWN0bHkgb250byB0aGUgY29udHJvbGxlciB1c2luZyBgdGhpc2A6XG4gKiBgbmctY29udHJvbGxlcj1cIlNldHRpbmdzQ29udHJvbGxlcjEgYXMgc2V0dGluZ3NcImBcbiAqICogb25lIGluamVjdHMgYCRzY29wZWAgaW50byB0aGUgY29udHJvbGxlcjpcbiAqIGBuZy1jb250cm9sbGVyPVwiU2V0dGluZ3NDb250cm9sbGVyMlwiYFxuICpcbiAqIFRoZSBzZWNvbmQgb3B0aW9uIGlzIG1vcmUgY29tbW9uIGluIHRoZSBBbmd1bGFyIGNvbW11bml0eSwgYW5kIGlzIGdlbmVyYWxseSB1c2VkIGluIGJvaWxlcnBsYXRlc1xuICogYW5kIGluIHRoaXMgZ3VpZGUuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhZHZhbnRhZ2VzIHRvIGJpbmRpbmcgcHJvcGVydGllcyBkaXJlY3RseSB0byB0aGUgY29udHJvbGxlclxuICogYW5kIGF2b2lkaW5nIHNjb3BlLlxuICpcbiAqICogVXNpbmcgYGNvbnRyb2xsZXIgYXNgIG1ha2VzIGl0IG9idmlvdXMgd2hpY2ggY29udHJvbGxlciB5b3UgYXJlIGFjY2Vzc2luZyBpbiB0aGUgdGVtcGxhdGUgd2hlblxuICogbXVsdGlwbGUgY29udHJvbGxlcnMgYXBwbHkgdG8gYW4gZWxlbWVudC5cbiAqICogSWYgeW91IGFyZSB3cml0aW5nIHlvdXIgY29udHJvbGxlcnMgYXMgY2xhc3NlcyB5b3UgaGF2ZSBlYXNpZXIgYWNjZXNzIHRvIHRoZSBwcm9wZXJ0aWVzIGFuZFxuICogbWV0aG9kcywgd2hpY2ggd2lsbCBhcHBlYXIgb24gdGhlIHNjb3BlLCBmcm9tIGluc2lkZSB0aGUgY29udHJvbGxlciBjb2RlLlxuICogKiBTaW5jZSB0aGVyZSBpcyBhbHdheXMgYSBgLmAgaW4gdGhlIGJpbmRpbmdzLCB5b3UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBwcm90b3R5cGFsXG4gKiBpbmhlcml0YW5jZSBtYXNraW5nIHByaW1pdGl2ZXMuXG4gKlxuICogVGhpcyBleGFtcGxlIGRlbW9uc3RyYXRlcyB0aGUgYGNvbnRyb2xsZXIgYXNgIHN5bnRheC5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwibmdDb250cm9sbGVyQXNcIiBtb2R1bGU9XCJjb250cm9sbGVyQXNFeGFtcGxlXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gKiAgICA8ZGl2IGlkPVwiY3RybC1hcy1leG1wbFwiIG5nLWNvbnRyb2xsZXI9XCJTZXR0aW5nc0NvbnRyb2xsZXIxIGFzIHNldHRpbmdzXCI+XG4gKiAgICAgIE5hbWU6IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5nLW1vZGVsPVwic2V0dGluZ3MubmFtZVwiLz5cbiAqICAgICAgWyA8YSBocmVmPVwiXCIgbmctY2xpY2s9XCJzZXR0aW5ncy5ncmVldCgpXCI+Z3JlZXQ8L2E+IF08YnIvPlxuICogICAgICBDb250YWN0OlxuICogICAgICA8dWw+XG4gKiAgICAgICAgPGxpIG5nLXJlcGVhdD1cImNvbnRhY3QgaW4gc2V0dGluZ3MuY29udGFjdHNcIj5cbiAqICAgICAgICAgIDxzZWxlY3QgbmctbW9kZWw9XCJjb250YWN0LnR5cGVcIj5cbiAqICAgICAgICAgICAgIDxvcHRpb24+cGhvbmU8L29wdGlvbj5cbiAqICAgICAgICAgICAgIDxvcHRpb24+ZW1haWw8L29wdGlvbj5cbiAqICAgICAgICAgIDwvc2VsZWN0PlxuICogICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmctbW9kZWw9XCJjb250YWN0LnZhbHVlXCIvPlxuICogICAgICAgICAgWyA8YSBocmVmPVwiXCIgbmctY2xpY2s9XCJzZXR0aW5ncy5jbGVhckNvbnRhY3QoY29udGFjdClcIj5jbGVhcjwvYT5cbiAqICAgICAgICAgIHwgPGEgaHJlZj1cIlwiIG5nLWNsaWNrPVwic2V0dGluZ3MucmVtb3ZlQ29udGFjdChjb250YWN0KVwiPlg8L2E+IF1cbiAqICAgICAgICA8L2xpPlxuICogICAgICAgIDxsaT5bIDxhIGhyZWY9XCJcIiBuZy1jbGljaz1cInNldHRpbmdzLmFkZENvbnRhY3QoKVwiPmFkZDwvYT4gXTwvbGk+XG4gKiAgICAgPC91bD5cbiAqICAgIDwvZGl2PlxuICogICA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJhcHAuanNcIj5cbiAqICAgIGFuZ3VsYXIubW9kdWxlKCdjb250cm9sbGVyQXNFeGFtcGxlJywgW10pXG4gKiAgICAgIC5jb250cm9sbGVyKCdTZXR0aW5nc0NvbnRyb2xsZXIxJywgU2V0dGluZ3NDb250cm9sbGVyMSk7XG4gKlxuICogICAgZnVuY3Rpb24gU2V0dGluZ3NDb250cm9sbGVyMSgpIHtcbiAqICAgICAgdGhpcy5uYW1lID0gXCJKb2huIFNtaXRoXCI7XG4gKiAgICAgIHRoaXMuY29udGFjdHMgPSBbXG4gKiAgICAgICAge3R5cGU6ICdwaG9uZScsIHZhbHVlOiAnNDA4IDU1NSAxMjEyJ30sXG4gKiAgICAgICAge3R5cGU6ICdlbWFpbCcsIHZhbHVlOiAnam9obi5zbWl0aEBleGFtcGxlLm9yZyd9IF07XG4gKiAgICB9XG4gKlxuICogICAgU2V0dGluZ3NDb250cm9sbGVyMS5wcm90b3R5cGUuZ3JlZXQgPSBmdW5jdGlvbigpIHtcbiAqICAgICAgYWxlcnQodGhpcy5uYW1lKTtcbiAqICAgIH07XG4gKlxuICogICAgU2V0dGluZ3NDb250cm9sbGVyMS5wcm90b3R5cGUuYWRkQ29udGFjdCA9IGZ1bmN0aW9uKCkge1xuICogICAgICB0aGlzLmNvbnRhY3RzLnB1c2goe3R5cGU6ICdlbWFpbCcsIHZhbHVlOiAneW91cm5hbWVAZXhhbXBsZS5vcmcnfSk7XG4gKiAgICB9O1xuICpcbiAqICAgIFNldHRpbmdzQ29udHJvbGxlcjEucHJvdG90eXBlLnJlbW92ZUNvbnRhY3QgPSBmdW5jdGlvbihjb250YWN0VG9SZW1vdmUpIHtcbiAqICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbnRhY3RzLmluZGV4T2YoY29udGFjdFRvUmVtb3ZlKTtcbiAqICAgICAgdGhpcy5jb250YWN0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICogICAgfTtcbiAqXG4gKiAgICBTZXR0aW5nc0NvbnRyb2xsZXIxLnByb3RvdHlwZS5jbGVhckNvbnRhY3QgPSBmdW5jdGlvbihjb250YWN0KSB7XG4gKiAgICAgIGNvbnRhY3QudHlwZSA9ICdwaG9uZSc7XG4gKiAgICAgIGNvbnRhY3QudmFsdWUgPSAnJztcbiAqICAgIH07XG4gKiAgIDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICogICAgIGl0KCdzaG91bGQgY2hlY2sgY29udHJvbGxlciBhcycsIGZ1bmN0aW9uKCkge1xuICogICAgICAgdmFyIGNvbnRhaW5lciA9IGVsZW1lbnQoYnkuaWQoJ2N0cmwtYXMtZXhtcGwnKSk7XG4gKiAgICAgICAgIGV4cGVjdChjb250YWluZXIuZWxlbWVudChieS5tb2RlbCgnc2V0dGluZ3MubmFtZScpKVxuICogICAgICAgICAgIC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRvQmUoJ0pvaG4gU21pdGgnKTtcbiAqXG4gKiAgICAgICB2YXIgZmlyc3RSZXBlYXQgPVxuICogICAgICAgICAgIGNvbnRhaW5lci5lbGVtZW50KGJ5LnJlcGVhdGVyKCdjb250YWN0IGluIHNldHRpbmdzLmNvbnRhY3RzJykucm93KDApKTtcbiAqICAgICAgIHZhciBzZWNvbmRSZXBlYXQgPVxuICogICAgICAgICAgIGNvbnRhaW5lci5lbGVtZW50KGJ5LnJlcGVhdGVyKCdjb250YWN0IGluIHNldHRpbmdzLmNvbnRhY3RzJykucm93KDEpKTtcbiAqXG4gKiAgICAgICBleHBlY3QoZmlyc3RSZXBlYXQuZWxlbWVudChieS5tb2RlbCgnY29udGFjdC52YWx1ZScpKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpXG4gKiAgICAgICAgICAgLnRvQmUoJzQwOCA1NTUgMTIxMicpO1xuICpcbiAqICAgICAgIGV4cGVjdChzZWNvbmRSZXBlYXQuZWxlbWVudChieS5tb2RlbCgnY29udGFjdC52YWx1ZScpKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpXG4gKiAgICAgICAgICAgLnRvQmUoJ2pvaG4uc21pdGhAZXhhbXBsZS5vcmcnKTtcbiAqXG4gKiAgICAgICBmaXJzdFJlcGVhdC5lbGVtZW50KGJ5LmxpbmtUZXh0KCdjbGVhcicpKS5jbGljaygpO1xuICpcbiAqICAgICAgIGV4cGVjdChmaXJzdFJlcGVhdC5lbGVtZW50KGJ5Lm1vZGVsKCdjb250YWN0LnZhbHVlJykpLmdldEF0dHJpYnV0ZSgndmFsdWUnKSlcbiAqICAgICAgICAgICAudG9CZSgnJyk7XG4gKlxuICogICAgICAgY29udGFpbmVyLmVsZW1lbnQoYnkubGlua1RleHQoJ2FkZCcpKS5jbGljaygpO1xuICpcbiAqICAgICAgIGV4cGVjdChjb250YWluZXIuZWxlbWVudChieS5yZXBlYXRlcignY29udGFjdCBpbiBzZXR0aW5ncy5jb250YWN0cycpLnJvdygyKSlcbiAqICAgICAgICAgICAuZWxlbWVudChieS5tb2RlbCgnY29udGFjdC52YWx1ZScpKVxuICogICAgICAgICAgIC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpXG4gKiAgICAgICAgICAgLnRvQmUoJ3lvdXJuYW1lQGV4YW1wbGUub3JnJyk7XG4gKiAgICAgfSk7XG4gKiAgIDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiBUaGlzIGV4YW1wbGUgZGVtb25zdHJhdGVzIHRoZSBcImF0dGFjaCB0byBgJHNjb3BlYFwiIHN0eWxlIG9mIGNvbnRyb2xsZXIuXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cIm5nQ29udHJvbGxlclwiIG1vZHVsZT1cImNvbnRyb2xsZXJFeGFtcGxlXCI+XG4gKiAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAqICAgPGRpdiBpZD1cImN0cmwtZXhtcGxcIiBuZy1jb250cm9sbGVyPVwiU2V0dGluZ3NDb250cm9sbGVyMlwiPlxuICogICAgIE5hbWU6IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5nLW1vZGVsPVwibmFtZVwiLz5cbiAqICAgICBbIDxhIGhyZWY9XCJcIiBuZy1jbGljaz1cImdyZWV0KClcIj5ncmVldDwvYT4gXTxici8+XG4gKiAgICAgQ29udGFjdDpcbiAqICAgICA8dWw+XG4gKiAgICAgICA8bGkgbmctcmVwZWF0PVwiY29udGFjdCBpbiBjb250YWN0c1wiPlxuICogICAgICAgICA8c2VsZWN0IG5nLW1vZGVsPVwiY29udGFjdC50eXBlXCI+XG4gKiAgICAgICAgICAgIDxvcHRpb24+cGhvbmU8L29wdGlvbj5cbiAqICAgICAgICAgICAgPG9wdGlvbj5lbWFpbDwvb3B0aW9uPlxuICogICAgICAgICA8L3NlbGVjdD5cbiAqICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmctbW9kZWw9XCJjb250YWN0LnZhbHVlXCIvPlxuICogICAgICAgICBbIDxhIGhyZWY9XCJcIiBuZy1jbGljaz1cImNsZWFyQ29udGFjdChjb250YWN0KVwiPmNsZWFyPC9hPlxuICogICAgICAgICB8IDxhIGhyZWY9XCJcIiBuZy1jbGljaz1cInJlbW92ZUNvbnRhY3QoY29udGFjdClcIj5YPC9hPiBdXG4gKiAgICAgICA8L2xpPlxuICogICAgICAgPGxpPlsgPGEgaHJlZj1cIlwiIG5nLWNsaWNrPVwiYWRkQ29udGFjdCgpXCI+YWRkPC9hPiBdPC9saT5cbiAqICAgIDwvdWw+XG4gKiAgIDwvZGl2PlxuICogIDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwiYXBwLmpzXCI+XG4gKiAgIGFuZ3VsYXIubW9kdWxlKCdjb250cm9sbGVyRXhhbXBsZScsIFtdKVxuICogICAgIC5jb250cm9sbGVyKCdTZXR0aW5nc0NvbnRyb2xsZXIyJywgWyckc2NvcGUnLCBTZXR0aW5nc0NvbnRyb2xsZXIyXSk7XG4gKlxuICogICBmdW5jdGlvbiBTZXR0aW5nc0NvbnRyb2xsZXIyKCRzY29wZSkge1xuICogICAgICRzY29wZS5uYW1lID0gXCJKb2huIFNtaXRoXCI7XG4gKiAgICAgJHNjb3BlLmNvbnRhY3RzID0gW1xuICogICAgICAge3R5cGU6J3Bob25lJywgdmFsdWU6JzQwOCA1NTUgMTIxMid9LFxuICogICAgICAge3R5cGU6J2VtYWlsJywgdmFsdWU6J2pvaG4uc21pdGhAZXhhbXBsZS5vcmcnfSBdO1xuICpcbiAqICAgICAkc2NvcGUuZ3JlZXQgPSBmdW5jdGlvbigpIHtcbiAqICAgICAgIGFsZXJ0KCRzY29wZS5uYW1lKTtcbiAqICAgICB9O1xuICpcbiAqICAgICAkc2NvcGUuYWRkQ29udGFjdCA9IGZ1bmN0aW9uKCkge1xuICogICAgICAgJHNjb3BlLmNvbnRhY3RzLnB1c2goe3R5cGU6J2VtYWlsJywgdmFsdWU6J3lvdXJuYW1lQGV4YW1wbGUub3JnJ30pO1xuICogICAgIH07XG4gKlxuICogICAgICRzY29wZS5yZW1vdmVDb250YWN0ID0gZnVuY3Rpb24oY29udGFjdFRvUmVtb3ZlKSB7XG4gKiAgICAgICB2YXIgaW5kZXggPSAkc2NvcGUuY29udGFjdHMuaW5kZXhPZihjb250YWN0VG9SZW1vdmUpO1xuICogICAgICAgJHNjb3BlLmNvbnRhY3RzLnNwbGljZShpbmRleCwgMSk7XG4gKiAgICAgfTtcbiAqXG4gKiAgICAgJHNjb3BlLmNsZWFyQ29udGFjdCA9IGZ1bmN0aW9uKGNvbnRhY3QpIHtcbiAqICAgICAgIGNvbnRhY3QudHlwZSA9ICdwaG9uZSc7XG4gKiAgICAgICBjb250YWN0LnZhbHVlID0gJyc7XG4gKiAgICAgfTtcbiAqICAgfVxuICogIDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gKiAgICBpdCgnc2hvdWxkIGNoZWNrIGNvbnRyb2xsZXInLCBmdW5jdGlvbigpIHtcbiAqICAgICAgdmFyIGNvbnRhaW5lciA9IGVsZW1lbnQoYnkuaWQoJ2N0cmwtZXhtcGwnKSk7XG4gKlxuICogICAgICBleHBlY3QoY29udGFpbmVyLmVsZW1lbnQoYnkubW9kZWwoJ25hbWUnKSlcbiAqICAgICAgICAgIC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRvQmUoJ0pvaG4gU21pdGgnKTtcbiAqXG4gKiAgICAgIHZhciBmaXJzdFJlcGVhdCA9XG4gKiAgICAgICAgICBjb250YWluZXIuZWxlbWVudChieS5yZXBlYXRlcignY29udGFjdCBpbiBjb250YWN0cycpLnJvdygwKSk7XG4gKiAgICAgIHZhciBzZWNvbmRSZXBlYXQgPVxuICogICAgICAgICAgY29udGFpbmVyLmVsZW1lbnQoYnkucmVwZWF0ZXIoJ2NvbnRhY3QgaW4gY29udGFjdHMnKS5yb3coMSkpO1xuICpcbiAqICAgICAgZXhwZWN0KGZpcnN0UmVwZWF0LmVsZW1lbnQoYnkubW9kZWwoJ2NvbnRhY3QudmFsdWUnKSkuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKVxuICogICAgICAgICAgLnRvQmUoJzQwOCA1NTUgMTIxMicpO1xuICogICAgICBleHBlY3Qoc2Vjb25kUmVwZWF0LmVsZW1lbnQoYnkubW9kZWwoJ2NvbnRhY3QudmFsdWUnKSkuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKVxuICogICAgICAgICAgLnRvQmUoJ2pvaG4uc21pdGhAZXhhbXBsZS5vcmcnKTtcbiAqXG4gKiAgICAgIGZpcnN0UmVwZWF0LmVsZW1lbnQoYnkubGlua1RleHQoJ2NsZWFyJykpLmNsaWNrKCk7XG4gKlxuICogICAgICBleHBlY3QoZmlyc3RSZXBlYXQuZWxlbWVudChieS5tb2RlbCgnY29udGFjdC52YWx1ZScpKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpXG4gKiAgICAgICAgICAudG9CZSgnJyk7XG4gKlxuICogICAgICBjb250YWluZXIuZWxlbWVudChieS5saW5rVGV4dCgnYWRkJykpLmNsaWNrKCk7XG4gKlxuICogICAgICBleHBlY3QoY29udGFpbmVyLmVsZW1lbnQoYnkucmVwZWF0ZXIoJ2NvbnRhY3QgaW4gY29udGFjdHMnKS5yb3coMikpXG4gKiAgICAgICAgICAuZWxlbWVudChieS5tb2RlbCgnY29udGFjdC52YWx1ZScpKVxuICogICAgICAgICAgLmdldEF0dHJpYnV0ZSgndmFsdWUnKSlcbiAqICAgICAgICAgIC50b0JlKCd5b3VybmFtZUBleGFtcGxlLm9yZycpO1xuICogICAgfSk7XG4gKiAgPC9maWxlPlxuICo8L2V4YW1wbGU+XG5cbiAqL1xudmFyIG5nQ29udHJvbGxlckRpcmVjdGl2ZSA9IFtmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtcbiAgICByZXN0cmljdDogJ0EnLFxuICAgIHNjb3BlOiB0cnVlLFxuICAgIGNvbnRyb2xsZXI6ICdAJyxcbiAgICBwcmlvcml0eTogNTAwXG4gIH07XG59XTtcblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ0NzcFxuICpcbiAqIEBlbGVtZW50IGh0bWxcbiAqIEBkZXNjcmlwdGlvblxuICogRW5hYmxlcyBbQ1NQIChDb250ZW50IFNlY3VyaXR5IFBvbGljeSldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL1NlY3VyaXR5L0NTUCkgc3VwcG9ydC5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSB3aGVuIGRldmVsb3BpbmcgdGhpbmdzIGxpa2UgR29vZ2xlIENocm9tZSBFeHRlbnNpb25zIG9yIFVuaXZlcnNhbCBXaW5kb3dzIEFwcHMuXG4gKlxuICogQ1NQIGZvcmJpZHMgYXBwcyB0byB1c2UgYGV2YWxgIG9yIGBGdW5jdGlvbihzdHJpbmcpYCBnZW5lcmF0ZWQgZnVuY3Rpb25zIChhbW9uZyBvdGhlciB0aGluZ3MpLlxuICogRm9yIEFuZ3VsYXIgdG8gYmUgQ1NQIGNvbXBhdGlibGUgdGhlcmUgYXJlIG9ubHkgdHdvIHRoaW5ncyB0aGF0IHdlIG5lZWQgdG8gZG8gZGlmZmVyZW50bHk6XG4gKlxuICogLSBkb24ndCB1c2UgYEZ1bmN0aW9uYCBjb25zdHJ1Y3RvciB0byBnZW5lcmF0ZSBvcHRpbWl6ZWQgdmFsdWUgZ2V0dGVyc1xuICogLSBkb24ndCBpbmplY3QgY3VzdG9tIHN0eWxlc2hlZXQgaW50byB0aGUgZG9jdW1lbnRcbiAqXG4gKiBBbmd1bGFySlMgdXNlcyBgRnVuY3Rpb24oc3RyaW5nKWAgZ2VuZXJhdGVkIGZ1bmN0aW9ucyBhcyBhIHNwZWVkIG9wdGltaXphdGlvbi4gQXBwbHlpbmcgdGhlIGBuZ0NzcGBcbiAqIGRpcmVjdGl2ZSB3aWxsIGNhdXNlIEFuZ3VsYXIgdG8gdXNlIENTUCBjb21wYXRpYmlsaXR5IG1vZGUuIFdoZW4gdGhpcyBtb2RlIGlzIG9uIEFuZ3VsYXJKUyB3aWxsXG4gKiBldmFsdWF0ZSBhbGwgZXhwcmVzc2lvbnMgdXAgdG8gMzAlIHNsb3dlciB0aGFuIGluIG5vbi1DU1AgbW9kZSwgYnV0IG5vIHNlY3VyaXR5IHZpb2xhdGlvbnMgd2lsbFxuICogYmUgcmFpc2VkLlxuICpcbiAqIENTUCBmb3JiaWRzIEphdmFTY3JpcHQgdG8gaW5saW5lIHN0eWxlc2hlZXQgcnVsZXMuIEluIG5vbiBDU1AgbW9kZSBBbmd1bGFyIGF1dG9tYXRpY2FsbHlcbiAqIGluY2x1ZGVzIHNvbWUgQ1NTIHJ1bGVzIChlLmcuIHtAbGluayBuZy5kaXJlY3RpdmU6bmdDbG9hayBuZ0Nsb2FrfSkuXG4gKiBUbyBtYWtlIHRob3NlIGRpcmVjdGl2ZXMgd29yayBpbiBDU1AgbW9kZSwgaW5jbHVkZSB0aGUgYGFuZ3VsYXItY3NwLmNzc2AgbWFudWFsbHkuXG4gKlxuICogQW5ndWxhciB0cmllcyB0byBhdXRvZGV0ZWN0IGlmIENTUCBpcyBhY3RpdmUgYW5kIGF1dG9tYXRpY2FsbHkgdHVybiBvbiB0aGUgQ1NQLXNhZmUgbW9kZS4gVGhpc1xuICogYXV0b2RldGVjdGlvbiBob3dldmVyIHRyaWdnZXJzIGEgQ1NQIGVycm9yIHRvIGJlIGxvZ2dlZCBpbiB0aGUgY29uc29sZTpcbiAqXG4gKiBgYGBcbiAqIFJlZnVzZWQgdG8gZXZhbHVhdGUgYSBzdHJpbmcgYXMgSmF2YVNjcmlwdCBiZWNhdXNlICd1bnNhZmUtZXZhbCcgaXMgbm90IGFuIGFsbG93ZWQgc291cmNlIG9mXG4gKiBzY3JpcHQgaW4gdGhlIGZvbGxvd2luZyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBkaXJlY3RpdmU6IFwiZGVmYXVsdC1zcmMgJ3NlbGYnXCIuIE5vdGUgdGhhdFxuICogJ3NjcmlwdC1zcmMnIHdhcyBub3QgZXhwbGljaXRseSBzZXQsIHNvICdkZWZhdWx0LXNyYycgaXMgdXNlZCBhcyBhIGZhbGxiYWNrLlxuICogYGBgXG4gKlxuICogVGhpcyBlcnJvciBpcyBoYXJtbGVzcyBidXQgYW5ub3lpbmcuIFRvIHByZXZlbnQgdGhlIGVycm9yIGZyb20gc2hvd2luZyB1cCwgcHV0IHRoZSBgbmdDc3BgXG4gKiBkaXJlY3RpdmUgb24gdGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgYXBwbGljYXRpb24gb3Igb24gdGhlIGBhbmd1bGFyLmpzYCBzY3JpcHQgdGFnLCB3aGljaGV2ZXJcbiAqIGFwcGVhcnMgZmlyc3QgaW4gdGhlIGh0bWwgZG9jdW1lbnQuXG4gKlxuICogKk5vdGU6IFRoaXMgZGlyZWN0aXZlIGlzIG9ubHkgYXZhaWxhYmxlIGluIHRoZSBgbmctY3NwYCBhbmQgYGRhdGEtbmctY3NwYCBhdHRyaWJ1dGUgZm9ybS4qXG4gKlxuICogQGV4YW1wbGVcbiAqIFRoaXMgZXhhbXBsZSBzaG93cyBob3cgdG8gYXBwbHkgdGhlIGBuZ0NzcGAgZGlyZWN0aXZlIHRvIHRoZSBgaHRtbGAgdGFnLlxuICAgYGBgaHRtbFxuICAgICA8IWRvY3R5cGUgaHRtbD5cbiAgICAgPGh0bWwgbmctYXBwIG5nLWNzcD5cbiAgICAgLi4uXG4gICAgIC4uLlxuICAgICA8L2h0bWw+XG4gICBgYGBcbiAgKiBAZXhhbXBsZVxuICAgICAgLy8gTm90ZTogdGhlIHN1ZmZpeCBgLmNzcGAgaW4gdGhlIGV4YW1wbGUgbmFtZSB0cmlnZ2Vyc1xuICAgICAgLy8gY3NwIG1vZGUgaW4gb3VyIGh0dHAgc2VydmVyIVxuICAgICAgPGV4YW1wbGUgbmFtZT1cImV4YW1wbGUuY3NwXCIgbW9kdWxlPVwiY3NwRXhhbXBsZVwiIG5nLWNzcD1cInRydWVcIj5cbiAgICAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJNYWluQ29udHJvbGxlciBhcyBjdHJsXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uIG5nLWNsaWNrPVwiY3RybC5pbmMoKVwiIGlkPVwiaW5jXCI+SW5jcmVtZW50PC9idXR0b24+XG4gICAgICAgICAgICAgIDxzcGFuIGlkPVwiY291bnRlclwiPlxuICAgICAgICAgICAgICAgIHt7Y3RybC5jb3VudGVyfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxidXR0b24gbmctY2xpY2s9XCJjdHJsLmV2aWwoKVwiIGlkPVwiZXZpbFwiPkV2aWw8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJldmlsRXJyb3JcIj5cbiAgICAgICAgICAgICAgICB7e2N0cmwuZXZpbEVycm9yfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmlsZT5cbiAgICAgICAgPGZpbGUgbmFtZT1cInNjcmlwdC5qc1wiPlxuICAgICAgICAgICBhbmd1bGFyLm1vZHVsZSgnY3NwRXhhbXBsZScsIFtdKVxuICAgICAgICAgICAgIC5jb250cm9sbGVyKCdNYWluQ29udHJvbGxlcicsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY291bnRlciA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRlcisrO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5ldmlsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAvLyBqc2hpbnQgZXZpbDp0cnVlXG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBldmFsKCcxKzInKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmlsRXJyb3IgPSBlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgIDwvZmlsZT5cbiAgICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgICAgIHZhciB1dGlsLCB3ZWJkcml2ZXI7XG5cbiAgICAgICAgICB2YXIgaW5jQnRuID0gZWxlbWVudChieS5pZCgnaW5jJykpO1xuICAgICAgICAgIHZhciBjb3VudGVyID0gZWxlbWVudChieS5pZCgnY291bnRlcicpKTtcbiAgICAgICAgICB2YXIgZXZpbEJ0biA9IGVsZW1lbnQoYnkuaWQoJ2V2aWwnKSk7XG4gICAgICAgICAgdmFyIGV2aWxFcnJvciA9IGVsZW1lbnQoYnkuaWQoJ2V2aWxFcnJvcicpKTtcblxuICAgICAgICAgIGZ1bmN0aW9uIGdldEFuZENsZWFyU2V2ZXJlRXJyb3JzKCkge1xuICAgICAgICAgICAgcmV0dXJuIGJyb3dzZXIubWFuYWdlKCkubG9ncygpLmdldCgnYnJvd3NlcicpLnRoZW4oZnVuY3Rpb24oYnJvd3NlckxvZykge1xuICAgICAgICAgICAgICByZXR1cm4gYnJvd3NlckxvZy5maWx0ZXIoZnVuY3Rpb24obG9nRW50cnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9nRW50cnkubGV2ZWwudmFsdWUgPiB3ZWJkcml2ZXIubG9nZ2luZy5MZXZlbC5XQVJOSU5HLnZhbHVlO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZ1bmN0aW9uIGNsZWFyRXJyb3JzKCkge1xuICAgICAgICAgICAgZ2V0QW5kQ2xlYXJTZXZlcmVFcnJvcnMoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmdW5jdGlvbiBleHBlY3ROb0Vycm9ycygpIHtcbiAgICAgICAgICAgIGdldEFuZENsZWFyU2V2ZXJlRXJyb3JzKCkudGhlbihmdW5jdGlvbihmaWx0ZXJlZExvZykge1xuICAgICAgICAgICAgICBleHBlY3QoZmlsdGVyZWRMb2cubGVuZ3RoKS50b0VxdWFsKDApO1xuICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRMb2cubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2Jyb3dzZXIgY29uc29sZSBlcnJvcnM6ICcgKyB1dGlsLmluc3BlY3QoZmlsdGVyZWRMb2cpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZnVuY3Rpb24gZXhwZWN0RXJyb3IocmVnZXgpIHtcbiAgICAgICAgICAgIGdldEFuZENsZWFyU2V2ZXJlRXJyb3JzKCkudGhlbihmdW5jdGlvbihmaWx0ZXJlZExvZykge1xuICAgICAgICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgZmlsdGVyZWRMb2cuZm9yRWFjaChmdW5jdGlvbihsb2cpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9nLm1lc3NhZ2UubWF0Y2gocmVnZXgpKSB7XG4gICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgYW4gZXJyb3IgdGhhdCBtYXRjaGVzICcgKyByZWdleCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuICAgICAgICAgICAgd2ViZHJpdmVyID0gcmVxdWlyZSgncHJvdHJhY3Rvci9ub2RlX21vZHVsZXMvc2VsZW5pdW0td2ViZHJpdmVyJyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBGb3Igbm93LCB3ZSBvbmx5IHRlc3Qgb24gQ2hyb21lLFxuICAgICAgICAgIC8vIGFzIFNhZmFyaSBkb2VzIG5vdCBsb2FkIHRoZSBwYWdlIHdpdGggUHJvdHJhY3RvcidzIGluamVjdGVkIHNjcmlwdHMsXG4gICAgICAgICAgLy8gYW5kIEZpcmVmb3ggd2ViZHJpdmVyIGFsd2F5cyBkaXNhYmxlcyBjb250ZW50IHNlY3VyaXR5IHBvbGljeSAoIzYzNTgpXG4gICAgICAgICAgaWYgKGJyb3dzZXIucGFyYW1zLmJyb3dzZXIgIT09ICdjaHJvbWUnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaXQoJ3Nob3VsZCBub3QgcmVwb3J0IGVycm9ycyB3aGVuIHRoZSBwYWdlIGlzIGxvYWRlZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgLy8gY2xlYXIgZXJyb3JzIHNvIHdlIGFyZSBub3QgZGVwZW5kZW50IG9uIHByZXZpb3VzIHRlc3RzXG4gICAgICAgICAgICBjbGVhckVycm9ycygpO1xuICAgICAgICAgICAgLy8gTmVlZCB0byByZWxvYWQgdGhlIHBhZ2UgYXMgdGhlIHBhZ2UgaXMgYWxyZWFkeSBsb2FkZWQgd2hlblxuICAgICAgICAgICAgLy8gd2UgY29tZSBoZXJlXG4gICAgICAgICAgICBicm93c2VyLmRyaXZlci5nZXRDdXJyZW50VXJsKCkudGhlbihmdW5jdGlvbih1cmwpIHtcbiAgICAgICAgICAgICAgYnJvd3Nlci5nZXQodXJsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZXhwZWN0Tm9FcnJvcnMoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGl0KCdzaG91bGQgZXZhbHVhdGUgZXhwcmVzc2lvbnMnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGV4cGVjdChjb3VudGVyLmdldFRleHQoKSkudG9FcXVhbCgnMCcpO1xuICAgICAgICAgICAgaW5jQnRuLmNsaWNrKCk7XG4gICAgICAgICAgICBleHBlY3QoY291bnRlci5nZXRUZXh0KCkpLnRvRXF1YWwoJzEnKTtcbiAgICAgICAgICAgIGV4cGVjdE5vRXJyb3JzKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpdCgnc2hvdWxkIHRocm93IGFuZCByZXBvcnQgYW4gZXJyb3Igd2hlbiB1c2luZyBcImV2YWxcIicsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZXZpbEJ0bi5jbGljaygpO1xuICAgICAgICAgICAgZXhwZWN0KGV2aWxFcnJvci5nZXRUZXh0KCkpLnRvTWF0Y2goL0NvbnRlbnQgU2VjdXJpdHkgUG9saWN5Lyk7XG4gICAgICAgICAgICBleHBlY3RFcnJvcigvQ29udGVudCBTZWN1cml0eSBQb2xpY3kvKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgPC9maWxlPlxuICAgICAgPC9leGFtcGxlPlxuICAqL1xuXG4vLyBuZ0NzcCBpcyBub3QgaW1wbGVtZW50ZWQgYXMgYSBwcm9wZXIgZGlyZWN0aXZlIGFueSBtb3JlLCBiZWNhdXNlIHdlIG5lZWQgaXQgYmUgcHJvY2Vzc2VkIHdoaWxlIHdlXG4vLyBib290c3RyYXAgdGhlIHN5c3RlbSAoYmVmb3JlICRwYXJzZSBpcyBpbnN0YW50aWF0ZWQpLCBmb3IgdGhpcyByZWFzb24gd2UganVzdCBoYXZlXG4vLyB0aGUgY3NwLmlzQWN0aXZlKCkgZm4gdGhhdCBsb29rcyBmb3IgbmctY3NwIGF0dHJpYnV0ZSBhbnl3aGVyZSBpbiB0aGUgY3VycmVudCBkb2NcblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ0NsaWNrXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgbmdDbGljayBkaXJlY3RpdmUgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciB3aGVuXG4gKiBhbiBlbGVtZW50IGlzIGNsaWNrZWQuXG4gKlxuICogQGVsZW1lbnQgQU5ZXG4gKiBAcHJpb3JpdHkgMFxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0NsaWNrIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb25cbiAqIGNsaWNrLiAoe0BsaW5rIGd1aWRlL2V4cHJlc3Npb24jLWV2ZW50LSBFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgfSlcbiAqXG4gKiBAZXhhbXBsZVxuICAgPGV4YW1wbGU+XG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICA8YnV0dG9uIG5nLWNsaWNrPVwiY291bnQgPSBjb3VudCArIDFcIiBuZy1pbml0PVwiY291bnQ9MFwiPlxuICAgICAgICBJbmNyZW1lbnRcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPHNwYW4+XG4gICAgICAgIGNvdW50OiB7e2NvdW50fX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgPC9maWxlPlxuICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1jbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygnY291bnQnKSkuZ2V0VGV4dCgpKS50b01hdGNoKCcwJyk7XG4gICAgICAgICBlbGVtZW50KGJ5LmNzcygnYnV0dG9uJykpLmNsaWNrKCk7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCdjb3VudCcpKS5nZXRUZXh0KCkpLnRvTWF0Y2goJzEnKTtcbiAgICAgICB9KTtcbiAgICAgPC9maWxlPlxuICAgPC9leGFtcGxlPlxuICovXG4vKlxuICogQSBjb2xsZWN0aW9uIG9mIGRpcmVjdGl2ZXMgdGhhdCBhbGxvd3MgY3JlYXRpb24gb2YgY3VzdG9tIGV2ZW50IGhhbmRsZXJzIHRoYXQgYXJlIGRlZmluZWQgYXNcbiAqIGFuZ3VsYXIgZXhwcmVzc2lvbnMgYW5kIGFyZSBjb21waWxlZCBhbmQgZXhlY3V0ZWQgd2l0aGluIHRoZSBjdXJyZW50IHNjb3BlLlxuICovXG52YXIgbmdFdmVudERpcmVjdGl2ZXMgPSB7fTtcblxuLy8gRm9yIGV2ZW50cyB0aGF0IG1pZ2h0IGZpcmUgc3luY2hyb25vdXNseSBkdXJpbmcgRE9NIG1hbmlwdWxhdGlvblxuLy8gd2UgbmVlZCB0byBleGVjdXRlIHRoZWlyIGV2ZW50IGhhbmRsZXJzIGFzeW5jaHJvbm91c2x5IHVzaW5nICRldmFsQXN5bmMsXG4vLyBzbyB0aGF0IHRoZXkgYXJlIG5vdCBleGVjdXRlZCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXG52YXIgZm9yY2VBc3luY0V2ZW50cyA9IHtcbiAgJ2JsdXInOiB0cnVlLFxuICAnZm9jdXMnOiB0cnVlXG59O1xuZm9yRWFjaChcbiAgJ2NsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZW1vdmUgbW91c2VlbnRlciBtb3VzZWxlYXZlIGtleWRvd24ga2V5dXAga2V5cHJlc3Mgc3VibWl0IGZvY3VzIGJsdXIgY29weSBjdXQgcGFzdGUnLnNwbGl0KCcgJyksXG4gIGZ1bmN0aW9uKGV2ZW50TmFtZSkge1xuICAgIHZhciBkaXJlY3RpdmVOYW1lID0gZGlyZWN0aXZlTm9ybWFsaXplKCduZy0nICsgZXZlbnROYW1lKTtcbiAgICBuZ0V2ZW50RGlyZWN0aXZlc1tkaXJlY3RpdmVOYW1lXSA9IFsnJHBhcnNlJywgJyRyb290U2NvcGUnLCBmdW5jdGlvbigkcGFyc2UsICRyb290U2NvcGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3RyaWN0OiAnQScsXG4gICAgICAgIGNvbXBpbGU6IGZ1bmN0aW9uKCRlbGVtZW50LCBhdHRyKSB7XG4gICAgICAgICAgLy8gV2UgZXhwb3NlIHRoZSBwb3dlcmZ1bCAkZXZlbnQgb2JqZWN0IG9uIHRoZSBzY29wZSB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgV2luZG93LFxuICAgICAgICAgIC8vIGV0Yy4gdGhhdCBpc24ndCBwcm90ZWN0ZWQgYnkgdGhlIGZhc3QgcGF0aHMgaW4gJHBhcnNlLiAgV2UgZXhwbGljaXRseSByZXF1ZXN0IGJldHRlclxuICAgICAgICAgIC8vIGNoZWNrcyBhdCB0aGUgY29zdCBvZiBzcGVlZCBzaW5jZSBldmVudCBoYW5kbGVyIGV4cHJlc3Npb25zIGFyZSBub3QgZXhlY3V0ZWQgYXNcbiAgICAgICAgICAvLyBmcmVxdWVudGx5IGFzIHJlZ3VsYXIgY2hhbmdlIGRldGVjdGlvbi5cbiAgICAgICAgICB2YXIgZm4gPSAkcGFyc2UoYXR0cltkaXJlY3RpdmVOYW1lXSwgLyogaW50ZXJjZXB0b3JGbiAqLyBudWxsLCAvKiBleHBlbnNpdmVDaGVja3MgKi8gdHJ1ZSk7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5nRXZlbnRIYW5kbGVyKHNjb3BlLCBlbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50Lm9uKGV2ZW50TmFtZSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgZm4oc2NvcGUsIHskZXZlbnQ6ZXZlbnR9KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgaWYgKGZvcmNlQXN5bmNFdmVudHNbZXZlbnROYW1lXSAmJiAkcm9vdFNjb3BlLiQkcGhhc2UpIHtcbiAgICAgICAgICAgICAgICBzY29wZS4kZXZhbEFzeW5jKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoY2FsbGJhY2spO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1dO1xuICB9XG4pO1xuXG4vKipcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAqIEBuYW1lIG5nRGJsY2xpY2tcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBgbmdEYmxjbGlja2AgZGlyZWN0aXZlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24gYSBkYmxjbGljayBldmVudC5cbiAqXG4gKiBAZWxlbWVudCBBTllcbiAqIEBwcmlvcml0eSAwXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nRGJsY2xpY2sge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvblxuICogYSBkYmxjbGljay4gKFRoZSBFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgKVxuICpcbiAqIEBleGFtcGxlXG4gICA8ZXhhbXBsZT5cbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgIDxidXR0b24gbmctZGJsY2xpY2s9XCJjb3VudCA9IGNvdW50ICsgMVwiIG5nLWluaXQ9XCJjb3VudD0wXCI+XG4gICAgICAgIEluY3JlbWVudCAob24gZG91YmxlIGNsaWNrKVxuICAgICAgPC9idXR0b24+XG4gICAgICBjb3VudDoge3tjb3VudH19XG4gICAgIDwvZmlsZT5cbiAgIDwvZXhhbXBsZT5cbiAqL1xuXG5cbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgbmdNb3VzZWRvd25cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBuZ01vdXNlZG93biBkaXJlY3RpdmUgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBtb3VzZWRvd24gZXZlbnQuXG4gKlxuICogQGVsZW1lbnQgQU5ZXG4gKiBAcHJpb3JpdHkgMFxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ01vdXNlZG93biB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uXG4gKiBtb3VzZWRvd24uICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGB9KVxuICpcbiAqIEBleGFtcGxlXG4gICA8ZXhhbXBsZT5cbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgIDxidXR0b24gbmctbW91c2Vkb3duPVwiY291bnQgPSBjb3VudCArIDFcIiBuZy1pbml0PVwiY291bnQ9MFwiPlxuICAgICAgICBJbmNyZW1lbnQgKG9uIG1vdXNlIGRvd24pXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIGNvdW50OiB7e2NvdW50fX1cbiAgICAgPC9maWxlPlxuICAgPC9leGFtcGxlPlxuICovXG5cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ01vdXNldXBcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIG1vdXNldXAgZXZlbnQuXG4gKlxuICogQGVsZW1lbnQgQU5ZXG4gKiBAcHJpb3JpdHkgMFxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ01vdXNldXAge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvblxuICogbW91c2V1cC4gKHtAbGluayBndWlkZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YH0pXG4gKlxuICogQGV4YW1wbGVcbiAgIDxleGFtcGxlPlxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgPGJ1dHRvbiBuZy1tb3VzZXVwPVwiY291bnQgPSBjb3VudCArIDFcIiBuZy1pbml0PVwiY291bnQ9MFwiPlxuICAgICAgICBJbmNyZW1lbnQgKG9uIG1vdXNlIHVwKVxuICAgICAgPC9idXR0b24+XG4gICAgICBjb3VudDoge3tjb3VudH19XG4gICAgIDwvZmlsZT5cbiAgIDwvZXhhbXBsZT5cbiAqL1xuXG4vKipcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAqIEBuYW1lIG5nTW91c2VvdmVyXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBtb3VzZW92ZXIgZXZlbnQuXG4gKlxuICogQGVsZW1lbnQgQU5ZXG4gKiBAcHJpb3JpdHkgMFxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ01vdXNlb3ZlciB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uXG4gKiBtb3VzZW92ZXIuICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGB9KVxuICpcbiAqIEBleGFtcGxlXG4gICA8ZXhhbXBsZT5cbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgIDxidXR0b24gbmctbW91c2VvdmVyPVwiY291bnQgPSBjb3VudCArIDFcIiBuZy1pbml0PVwiY291bnQ9MFwiPlxuICAgICAgICBJbmNyZW1lbnQgKHdoZW4gbW91c2UgaXMgb3ZlcilcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgY291bnQ6IHt7Y291bnR9fVxuICAgICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG4gKi9cblxuXG4vKipcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAqIEBuYW1lIG5nTW91c2VlbnRlclxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24gbW91c2VlbnRlciBldmVudC5cbiAqXG4gKiBAZWxlbWVudCBBTllcbiAqIEBwcmlvcml0eSAwXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nTW91c2VlbnRlciB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uXG4gKiBtb3VzZWVudGVyLiAoe0BsaW5rIGd1aWRlL2V4cHJlc3Npb24jLWV2ZW50LSBFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgfSlcbiAqXG4gKiBAZXhhbXBsZVxuICAgPGV4YW1wbGU+XG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICA8YnV0dG9uIG5nLW1vdXNlZW50ZXI9XCJjb3VudCA9IGNvdW50ICsgMVwiIG5nLWluaXQ9XCJjb3VudD0wXCI+XG4gICAgICAgIEluY3JlbWVudCAod2hlbiBtb3VzZSBlbnRlcnMpXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIGNvdW50OiB7e2NvdW50fX1cbiAgICAgPC9maWxlPlxuICAgPC9leGFtcGxlPlxuICovXG5cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ01vdXNlbGVhdmVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIG1vdXNlbGVhdmUgZXZlbnQuXG4gKlxuICogQGVsZW1lbnQgQU5ZXG4gKiBAcHJpb3JpdHkgMFxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ01vdXNlbGVhdmUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvblxuICogbW91c2VsZWF2ZS4gKHtAbGluayBndWlkZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YH0pXG4gKlxuICogQGV4YW1wbGVcbiAgIDxleGFtcGxlPlxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgPGJ1dHRvbiBuZy1tb3VzZWxlYXZlPVwiY291bnQgPSBjb3VudCArIDFcIiBuZy1pbml0PVwiY291bnQ9MFwiPlxuICAgICAgICBJbmNyZW1lbnQgKHdoZW4gbW91c2UgbGVhdmVzKVxuICAgICAgPC9idXR0b24+XG4gICAgICBjb3VudDoge3tjb3VudH19XG4gICAgIDwvZmlsZT5cbiAgIDwvZXhhbXBsZT5cbiAqL1xuXG5cbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgbmdNb3VzZW1vdmVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIG1vdXNlbW92ZSBldmVudC5cbiAqXG4gKiBAZWxlbWVudCBBTllcbiAqIEBwcmlvcml0eSAwXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nTW91c2Vtb3ZlIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb25cbiAqIG1vdXNlbW92ZS4gKHtAbGluayBndWlkZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YH0pXG4gKlxuICogQGV4YW1wbGVcbiAgIDxleGFtcGxlPlxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgPGJ1dHRvbiBuZy1tb3VzZW1vdmU9XCJjb3VudCA9IGNvdW50ICsgMVwiIG5nLWluaXQ9XCJjb3VudD0wXCI+XG4gICAgICAgIEluY3JlbWVudCAod2hlbiBtb3VzZSBtb3ZlcylcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgY291bnQ6IHt7Y291bnR9fVxuICAgICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG4gKi9cblxuXG4vKipcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAqIEBuYW1lIG5nS2V5ZG93blxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24ga2V5ZG93biBldmVudC5cbiAqXG4gKiBAZWxlbWVudCBBTllcbiAqIEBwcmlvcml0eSAwXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nS2V5ZG93biB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uXG4gKiBrZXlkb3duLiAoRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YCBhbmQgY2FuIGJlIGludGVycm9nYXRlZCBmb3Iga2V5Q29kZSwgYWx0S2V5LCBldGMuKVxuICpcbiAqIEBleGFtcGxlXG4gICA8ZXhhbXBsZT5cbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgIDxpbnB1dCBuZy1rZXlkb3duPVwiY291bnQgPSBjb3VudCArIDFcIiBuZy1pbml0PVwiY291bnQ9MFwiPlxuICAgICAga2V5IGRvd24gY291bnQ6IHt7Y291bnR9fVxuICAgICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG4gKi9cblxuXG4vKipcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAqIEBuYW1lIG5nS2V5dXBcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIGtleXVwIGV2ZW50LlxuICpcbiAqIEBlbGVtZW50IEFOWVxuICogQHByaW9yaXR5IDBcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdLZXl1cCB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uXG4gKiBrZXl1cC4gKEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGAgYW5kIGNhbiBiZSBpbnRlcnJvZ2F0ZWQgZm9yIGtleUNvZGUsIGFsdEtleSwgZXRjLilcbiAqXG4gKiBAZXhhbXBsZVxuICAgPGV4YW1wbGU+XG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgPHA+VHlwaW5nIGluIHRoZSBpbnB1dCBib3ggYmVsb3cgdXBkYXRlcyB0aGUga2V5IGNvdW50PC9wPlxuICAgICAgIDxpbnB1dCBuZy1rZXl1cD1cImNvdW50ID0gY291bnQgKyAxXCIgbmctaW5pdD1cImNvdW50PTBcIj4ga2V5IHVwIGNvdW50OiB7e2NvdW50fX1cblxuICAgICAgIDxwPlR5cGluZyBpbiB0aGUgaW5wdXQgYm94IGJlbG93IHVwZGF0ZXMgdGhlIGtleWNvZGU8L3A+XG4gICAgICAgPGlucHV0IG5nLWtleXVwPVwiZXZlbnQ9JGV2ZW50XCI+XG4gICAgICAgPHA+ZXZlbnQga2V5Q29kZToge3sgZXZlbnQua2V5Q29kZSB9fTwvcD5cbiAgICAgICA8cD5ldmVudCBhbHRLZXk6IHt7IGV2ZW50LmFsdEtleSB9fTwvcD5cbiAgICAgPC9maWxlPlxuICAgPC9leGFtcGxlPlxuICovXG5cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ0tleXByZXNzXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBrZXlwcmVzcyBldmVudC5cbiAqXG4gKiBAZWxlbWVudCBBTllcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdLZXlwcmVzcyB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uXG4gKiBrZXlwcmVzcy4gKHtAbGluayBndWlkZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YH1cbiAqIGFuZCBjYW4gYmUgaW50ZXJyb2dhdGVkIGZvciBrZXlDb2RlLCBhbHRLZXksIGV0Yy4pXG4gKlxuICogQGV4YW1wbGVcbiAgIDxleGFtcGxlPlxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgPGlucHV0IG5nLWtleXByZXNzPVwiY291bnQgPSBjb3VudCArIDFcIiBuZy1pbml0PVwiY291bnQ9MFwiPlxuICAgICAga2V5IHByZXNzIGNvdW50OiB7e2NvdW50fX1cbiAgICAgPC9maWxlPlxuICAgPC9leGFtcGxlPlxuICovXG5cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ1N1Ym1pdFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogRW5hYmxlcyBiaW5kaW5nIGFuZ3VsYXIgZXhwcmVzc2lvbnMgdG8gb25zdWJtaXQgZXZlbnRzLlxuICpcbiAqIEFkZGl0aW9uYWxseSBpdCBwcmV2ZW50cyB0aGUgZGVmYXVsdCBhY3Rpb24gKHdoaWNoIGZvciBmb3JtIG1lYW5zIHNlbmRpbmcgdGhlIHJlcXVlc3QgdG8gdGhlXG4gKiBzZXJ2ZXIgYW5kIHJlbG9hZGluZyB0aGUgY3VycmVudCBwYWdlKSwgYnV0IG9ubHkgaWYgdGhlIGZvcm0gZG9lcyBub3QgY29udGFpbiBgYWN0aW9uYCxcbiAqIGBkYXRhLWFjdGlvbmAsIG9yIGB4LWFjdGlvbmAgYXR0cmlidXRlcy5cbiAqXG4gKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiPlxuICogKipXYXJuaW5nOioqIEJlIGNhcmVmdWwgbm90IHRvIGNhdXNlIFwiZG91YmxlLXN1Ym1pc3Npb25cIiBieSB1c2luZyBib3RoIHRoZSBgbmdDbGlja2AgYW5kXG4gKiBgbmdTdWJtaXRgIGhhbmRsZXJzIHRvZ2V0aGVyLiBTZWUgdGhlXG4gKiB7QGxpbmsgZm9ybSNzdWJtaXR0aW5nLWEtZm9ybS1hbmQtcHJldmVudGluZy10aGUtZGVmYXVsdC1hY3Rpb24gYGZvcm1gIGRpcmVjdGl2ZSBkb2N1bWVudGF0aW9ufVxuICogZm9yIGEgZGV0YWlsZWQgZGlzY3Vzc2lvbiBvZiB3aGVuIGBuZ1N1Ym1pdGAgbWF5IGJlIHRyaWdnZXJlZC5cbiAqIDwvZGl2PlxuICpcbiAqIEBlbGVtZW50IGZvcm1cbiAqIEBwcmlvcml0eSAwXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nU3VibWl0IHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWwuXG4gKiAoe0BsaW5rIGd1aWRlL2V4cHJlc3Npb24jLWV2ZW50LSBFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgfSlcbiAqXG4gKiBAZXhhbXBsZVxuICAgPGV4YW1wbGUgbW9kdWxlPVwic3VibWl0RXhhbXBsZVwiPlxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgPHNjcmlwdD5cbiAgICAgICAgYW5ndWxhci5tb2R1bGUoJ3N1Ym1pdEV4YW1wbGUnLCBbXSlcbiAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xuICAgICAgICAgICAgJHNjb3BlLmxpc3QgPSBbXTtcbiAgICAgICAgICAgICRzY29wZS50ZXh0ID0gJ2hlbGxvJztcbiAgICAgICAgICAgICRzY29wZS5zdWJtaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgaWYgKCRzY29wZS50ZXh0KSB7XG4gICAgICAgICAgICAgICAgJHNjb3BlLmxpc3QucHVzaCh0aGlzLnRleHQpO1xuICAgICAgICAgICAgICAgICRzY29wZS50ZXh0ID0gJyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfV0pO1xuICAgICAgPC9zY3JpcHQ+XG4gICAgICA8Zm9ybSBuZy1zdWJtaXQ9XCJzdWJtaXQoKVwiIG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxuICAgICAgICBFbnRlciB0ZXh0IGFuZCBoaXQgZW50ZXI6XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5nLW1vZGVsPVwidGV4dFwiIG5hbWU9XCJ0ZXh0XCIgLz5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBpZD1cInN1Ym1pdFwiIHZhbHVlPVwiU3VibWl0XCIgLz5cbiAgICAgICAgPHByZT5saXN0PXt7bGlzdH19PC9wcmU+XG4gICAgICA8L2Zvcm0+XG4gICAgIDwvZmlsZT5cbiAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctc3VibWl0JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCdsaXN0JykpLmdldFRleHQoKSkudG9CZSgnbGlzdD1bXScpO1xuICAgICAgICAgZWxlbWVudChieS5jc3MoJyNzdWJtaXQnKSkuY2xpY2soKTtcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJ2xpc3QnKSkuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2hlbGxvJyk7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5tb2RlbCgndGV4dCcpKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRvQmUoJycpO1xuICAgICAgIH0pO1xuICAgICAgIGl0KCdzaG91bGQgaWdub3JlIGVtcHR5IHN0cmluZ3MnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJ2xpc3QnKSkuZ2V0VGV4dCgpKS50b0JlKCdsaXN0PVtdJyk7XG4gICAgICAgICBlbGVtZW50KGJ5LmNzcygnI3N1Ym1pdCcpKS5jbGljaygpO1xuICAgICAgICAgZWxlbWVudChieS5jc3MoJyNzdWJtaXQnKSkuY2xpY2soKTtcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJ2xpc3QnKSkuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2hlbGxvJyk7XG4gICAgICAgIH0pO1xuICAgICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG4gKi9cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ0ZvY3VzXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBmb2N1cyBldmVudC5cbiAqXG4gKiBOb3RlOiBBcyB0aGUgYGZvY3VzYCBldmVudCBpcyBleGVjdXRlZCBzeW5jaHJvbm91c2x5IHdoZW4gY2FsbGluZyBgaW5wdXQuZm9jdXMoKWBcbiAqIEFuZ3VsYXJKUyBleGVjdXRlcyB0aGUgZXhwcmVzc2lvbiB1c2luZyBgc2NvcGUuJGV2YWxBc3luY2AgaWYgdGhlIGV2ZW50IGlzIGZpcmVkXG4gKiBkdXJpbmcgYW4gYCRhcHBseWAgdG8gZW5zdXJlIGEgY29uc2lzdGVudCBzdGF0ZS5cbiAqXG4gKiBAZWxlbWVudCB3aW5kb3csIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBhXG4gKiBAcHJpb3JpdHkgMFxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0ZvY3VzIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb25cbiAqIGZvY3VzLiAoe0BsaW5rIGd1aWRlL2V4cHJlc3Npb24jLWV2ZW50LSBFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgfSlcbiAqXG4gKiBAZXhhbXBsZVxuICogU2VlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdDbGljayBuZ0NsaWNrfVxuICovXG5cbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgbmdCbHVyXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBibHVyIGV2ZW50LlxuICpcbiAqIEEgW2JsdXIgZXZlbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9ibHVyKSBmaXJlcyB3aGVuXG4gKiBhbiBlbGVtZW50IGhhcyBsb3N0IGZvY3VzLlxuICpcbiAqIE5vdGU6IEFzIHRoZSBgYmx1cmAgZXZlbnQgaXMgZXhlY3V0ZWQgc3luY2hyb25vdXNseSBhbHNvIGR1cmluZyBET00gbWFuaXB1bGF0aW9uc1xuICogKGUuZy4gcmVtb3ZpbmcgYSBmb2N1c3NlZCBpbnB1dCksXG4gKiBBbmd1bGFySlMgZXhlY3V0ZXMgdGhlIGV4cHJlc3Npb24gdXNpbmcgYHNjb3BlLiRldmFsQXN5bmNgIGlmIHRoZSBldmVudCBpcyBmaXJlZFxuICogZHVyaW5nIGFuIGAkYXBwbHlgIHRvIGVuc3VyZSBhIGNvbnNpc3RlbnQgc3RhdGUuXG4gKlxuICogQGVsZW1lbnQgd2luZG93LCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVxuICogQHByaW9yaXR5IDBcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdCbHVyIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb25cbiAqIGJsdXIuICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGB9KVxuICpcbiAqIEBleGFtcGxlXG4gKiBTZWUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NsaWNrIG5nQ2xpY2t9XG4gKi9cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ0NvcHlcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIGNvcHkgZXZlbnQuXG4gKlxuICogQGVsZW1lbnQgd2luZG93LCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVxuICogQHByaW9yaXR5IDBcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdDb3B5IHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb25cbiAqIGNvcHkuICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGB9KVxuICpcbiAqIEBleGFtcGxlXG4gICA8ZXhhbXBsZT5cbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgIDxpbnB1dCBuZy1jb3B5PVwiY29waWVkPXRydWVcIiBuZy1pbml0PVwiY29waWVkPWZhbHNlOyB2YWx1ZT0nY29weSBtZSdcIiBuZy1tb2RlbD1cInZhbHVlXCI+XG4gICAgICBjb3BpZWQ6IHt7Y29waWVkfX1cbiAgICAgPC9maWxlPlxuICAgPC9leGFtcGxlPlxuICovXG5cbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgbmdDdXRcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIGN1dCBldmVudC5cbiAqXG4gKiBAZWxlbWVudCB3aW5kb3csIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBhXG4gKiBAcHJpb3JpdHkgMFxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0N1dCB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uXG4gKiBjdXQuICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGB9KVxuICpcbiAqIEBleGFtcGxlXG4gICA8ZXhhbXBsZT5cbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgIDxpbnB1dCBuZy1jdXQ9XCJjdXQ9dHJ1ZVwiIG5nLWluaXQ9XCJjdXQ9ZmFsc2U7IHZhbHVlPSdjdXQgbWUnXCIgbmctbW9kZWw9XCJ2YWx1ZVwiPlxuICAgICAgY3V0OiB7e2N1dH19XG4gICAgIDwvZmlsZT5cbiAgIDwvZXhhbXBsZT5cbiAqL1xuXG4vKipcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAqIEBuYW1lIG5nUGFzdGVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIHBhc3RlIGV2ZW50LlxuICpcbiAqIEBlbGVtZW50IHdpbmRvdywgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGFcbiAqIEBwcmlvcml0eSAwXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nUGFzdGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvblxuICogcGFzdGUuICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGB9KVxuICpcbiAqIEBleGFtcGxlXG4gICA8ZXhhbXBsZT5cbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgIDxpbnB1dCBuZy1wYXN0ZT1cInBhc3RlPXRydWVcIiBuZy1pbml0PVwicGFzdGU9ZmFsc2VcIiBwbGFjZWhvbGRlcj0ncGFzdGUgaGVyZSc+XG4gICAgICBwYXN0ZWQ6IHt7cGFzdGV9fVxuICAgICA8L2ZpbGU+XG4gICA8L2V4YW1wbGU+XG4gKi9cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ0lmXG4gKiBAcmVzdHJpY3QgQVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIGBuZ0lmYCBkaXJlY3RpdmUgcmVtb3ZlcyBvciByZWNyZWF0ZXMgYSBwb3J0aW9uIG9mIHRoZSBET00gdHJlZSBiYXNlZCBvbiBhblxuICoge2V4cHJlc3Npb259LiBJZiB0aGUgZXhwcmVzc2lvbiBhc3NpZ25lZCB0byBgbmdJZmAgZXZhbHVhdGVzIHRvIGEgZmFsc2VcbiAqIHZhbHVlIHRoZW4gdGhlIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00sIG90aGVyd2lzZSBhIGNsb25lIG9mIHRoZVxuICogZWxlbWVudCBpcyByZWluc2VydGVkIGludG8gdGhlIERPTS5cbiAqXG4gKiBgbmdJZmAgZGlmZmVycyBmcm9tIGBuZ1Nob3dgIGFuZCBgbmdIaWRlYCBpbiB0aGF0IGBuZ0lmYCBjb21wbGV0ZWx5IHJlbW92ZXMgYW5kIHJlY3JlYXRlcyB0aGVcbiAqIGVsZW1lbnQgaW4gdGhlIERPTSByYXRoZXIgdGhhbiBjaGFuZ2luZyBpdHMgdmlzaWJpbGl0eSB2aWEgdGhlIGBkaXNwbGF5YCBjc3MgcHJvcGVydHkuICBBIGNvbW1vblxuICogY2FzZSB3aGVuIHRoaXMgZGlmZmVyZW5jZSBpcyBzaWduaWZpY2FudCBpcyB3aGVuIHVzaW5nIGNzcyBzZWxlY3RvcnMgdGhhdCByZWx5IG9uIGFuIGVsZW1lbnQnc1xuICogcG9zaXRpb24gd2l0aGluIHRoZSBET00sIHN1Y2ggYXMgdGhlIGA6Zmlyc3QtY2hpbGRgIG9yIGA6bGFzdC1jaGlsZGAgcHNldWRvLWNsYXNzZXMuXG4gKlxuICogTm90ZSB0aGF0IHdoZW4gYW4gZWxlbWVudCBpcyByZW1vdmVkIHVzaW5nIGBuZ0lmYCBpdHMgc2NvcGUgaXMgZGVzdHJveWVkIGFuZCBhIG5ldyBzY29wZVxuICogaXMgY3JlYXRlZCB3aGVuIHRoZSBlbGVtZW50IGlzIHJlc3RvcmVkLiAgVGhlIHNjb3BlIGNyZWF0ZWQgd2l0aGluIGBuZ0lmYCBpbmhlcml0cyBmcm9tXG4gKiBpdHMgcGFyZW50IHNjb3BlIHVzaW5nXG4gKiBbcHJvdG90eXBhbCBpbmhlcml0YW5jZV0oaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5qcy93aWtpL1VuZGVyc3RhbmRpbmctU2NvcGVzI2phdmFzY3JpcHQtcHJvdG90eXBhbC1pbmhlcml0YW5jZSkuXG4gKiBBbiBpbXBvcnRhbnQgaW1wbGljYXRpb24gb2YgdGhpcyBpcyBpZiBgbmdNb2RlbGAgaXMgdXNlZCB3aXRoaW4gYG5nSWZgIHRvIGJpbmQgdG9cbiAqIGEgamF2YXNjcmlwdCBwcmltaXRpdmUgZGVmaW5lZCBpbiB0aGUgcGFyZW50IHNjb3BlLiBJbiB0aGlzIGNhc2UgYW55IG1vZGlmaWNhdGlvbnMgbWFkZSB0byB0aGVcbiAqIHZhcmlhYmxlIHdpdGhpbiB0aGUgY2hpbGQgc2NvcGUgd2lsbCBvdmVycmlkZSAoaGlkZSkgdGhlIHZhbHVlIGluIHRoZSBwYXJlbnQgc2NvcGUuXG4gKlxuICogQWxzbywgYG5nSWZgIHJlY3JlYXRlcyBlbGVtZW50cyB1c2luZyB0aGVpciBjb21waWxlZCBzdGF0ZS4gQW4gZXhhbXBsZSBvZiB0aGlzIGJlaGF2aW9yXG4gKiBpcyBpZiBhbiBlbGVtZW50J3MgY2xhc3MgYXR0cmlidXRlIGlzIGRpcmVjdGx5IG1vZGlmaWVkIGFmdGVyIGl0J3MgY29tcGlsZWQsIHVzaW5nIHNvbWV0aGluZyBsaWtlXG4gKiBqUXVlcnkncyBgLmFkZENsYXNzKClgIG1ldGhvZCwgYW5kIHRoZSBlbGVtZW50IGlzIGxhdGVyIHJlbW92ZWQuIFdoZW4gYG5nSWZgIHJlY3JlYXRlcyB0aGUgZWxlbWVudFxuICogdGhlIGFkZGVkIGNsYXNzIHdpbGwgYmUgbG9zdCBiZWNhdXNlIHRoZSBvcmlnaW5hbCBjb21waWxlZCBzdGF0ZSBpcyB1c2VkIHRvIHJlZ2VuZXJhdGUgdGhlIGVsZW1lbnQuXG4gKlxuICogQWRkaXRpb25hbGx5LCB5b3UgY2FuIHByb3ZpZGUgYW5pbWF0aW9ucyB2aWEgdGhlIGBuZ0FuaW1hdGVgIG1vZHVsZSB0byBhbmltYXRlIHRoZSBgZW50ZXJgXG4gKiBhbmQgYGxlYXZlYCBlZmZlY3RzLlxuICpcbiAqIEBhbmltYXRpb25zXG4gKiBlbnRlciAtIGhhcHBlbnMganVzdCBhZnRlciB0aGUgYG5nSWZgIGNvbnRlbnRzIGNoYW5nZSBhbmQgYSBuZXcgRE9NIGVsZW1lbnQgaXMgY3JlYXRlZCBhbmQgaW5qZWN0ZWQgaW50byB0aGUgYG5nSWZgIGNvbnRhaW5lclxuICogbGVhdmUgLSBoYXBwZW5zIGp1c3QgYmVmb3JlIHRoZSBgbmdJZmAgY29udGVudHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgRE9NXG4gKlxuICogQGVsZW1lbnQgQU5ZXG4gKiBAc2NvcGVcbiAqIEBwcmlvcml0eSA2MDBcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdJZiBJZiB0aGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaXMgZmFsc3kgdGhlblxuICogICAgIHRoZSBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NIHRyZWUuIElmIGl0IGlzIHRydXRoeSBhIGNvcHkgb2YgdGhlIGNvbXBpbGVkXG4gKiAgICAgZWxlbWVudCBpcyBhZGRlZCB0byB0aGUgRE9NIHRyZWUuXG4gKlxuICogQGV4YW1wbGVcbiAgPGV4YW1wbGUgbW9kdWxlPVwibmdBbmltYXRlXCIgZGVwcz1cImFuZ3VsYXItYW5pbWF0ZS5qc1wiIGFuaW1hdGlvbnM9XCJ0cnVlXCI+XG4gICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgIENsaWNrIG1lOiA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmctbW9kZWw9XCJjaGVja2VkXCIgbmctaW5pdD1cImNoZWNrZWQ9dHJ1ZVwiIC8+PGJyLz5cbiAgICAgIFNob3cgd2hlbiBjaGVja2VkOlxuICAgICAgPHNwYW4gbmctaWY9XCJjaGVja2VkXCIgY2xhc3M9XCJhbmltYXRlLWlmXCI+XG4gICAgICAgIFRoaXMgaXMgcmVtb3ZlZCB3aGVuIHRoZSBjaGVja2JveCBpcyB1bmNoZWNrZWQuXG4gICAgICA8L3NwYW4+XG4gICAgPC9maWxlPlxuICAgIDxmaWxlIG5hbWU9XCJhbmltYXRpb25zLmNzc1wiPlxuICAgICAgLmFuaW1hdGUtaWYge1xuICAgICAgICBiYWNrZ3JvdW5kOndoaXRlO1xuICAgICAgICBib3JkZXI6MXB4IHNvbGlkIGJsYWNrO1xuICAgICAgICBwYWRkaW5nOjEwcHg7XG4gICAgICB9XG5cbiAgICAgIC5hbmltYXRlLWlmLm5nLWVudGVyLCAuYW5pbWF0ZS1pZi5uZy1sZWF2ZSB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjphbGwgY3ViaWMtYmV6aWVyKDAuMjUwLCAwLjQ2MCwgMC40NTAsIDAuOTQwKSAwLjVzO1xuICAgICAgICB0cmFuc2l0aW9uOmFsbCBjdWJpYy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1MCwgMC45NDApIDAuNXM7XG4gICAgICB9XG5cbiAgICAgIC5hbmltYXRlLWlmLm5nLWVudGVyLFxuICAgICAgLmFuaW1hdGUtaWYubmctbGVhdmUubmctbGVhdmUtYWN0aXZlIHtcbiAgICAgICAgb3BhY2l0eTowO1xuICAgICAgfVxuXG4gICAgICAuYW5pbWF0ZS1pZi5uZy1sZWF2ZSxcbiAgICAgIC5hbmltYXRlLWlmLm5nLWVudGVyLm5nLWVudGVyLWFjdGl2ZSB7XG4gICAgICAgIG9wYWNpdHk6MTtcbiAgICAgIH1cbiAgICA8L2ZpbGU+XG4gIDwvZXhhbXBsZT5cbiAqL1xudmFyIG5nSWZEaXJlY3RpdmUgPSBbJyRhbmltYXRlJywgZnVuY3Rpb24oJGFuaW1hdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBtdWx0RWxlbWVudDogdHJ1ZSxcbiAgICB0cmFuc2NsdWRlOiAnZWxlbWVudCcsXG4gICAgcHJpb3JpdHk6IDYwMCxcbiAgICB0ZXJtaW5hbDogdHJ1ZSxcbiAgICByZXN0cmljdDogJ0EnLFxuICAgICQkdGxiOiB0cnVlLFxuICAgIGxpbms6IGZ1bmN0aW9uKCRzY29wZSwgJGVsZW1lbnQsICRhdHRyLCBjdHJsLCAkdHJhbnNjbHVkZSkge1xuICAgICAgICB2YXIgYmxvY2ssIGNoaWxkU2NvcGUsIHByZXZpb3VzRWxlbWVudHM7XG4gICAgICAgICRzY29wZS4kd2F0Y2goJGF0dHIubmdJZiwgZnVuY3Rpb24gbmdJZldhdGNoQWN0aW9uKHZhbHVlKSB7XG5cbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghY2hpbGRTY29wZSkge1xuICAgICAgICAgICAgICAkdHJhbnNjbHVkZShmdW5jdGlvbihjbG9uZSwgbmV3U2NvcGUpIHtcbiAgICAgICAgICAgICAgICBjaGlsZFNjb3BlID0gbmV3U2NvcGU7XG4gICAgICAgICAgICAgICAgY2xvbmVbY2xvbmUubGVuZ3RoKytdID0gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnIGVuZCBuZ0lmOiAnICsgJGF0dHIubmdJZiArICcgJyk7XG4gICAgICAgICAgICAgICAgLy8gTm90ZTogV2Ugb25seSBuZWVkIHRoZSBmaXJzdC9sYXN0IG5vZGUgb2YgdGhlIGNsb25lZCBub2Rlcy5cbiAgICAgICAgICAgICAgICAvLyBIb3dldmVyLCB3ZSBuZWVkIHRvIGtlZXAgdGhlIHJlZmVyZW5jZSB0byB0aGUganFsaXRlIHdyYXBwZXIgYXMgaXQgbWlnaHQgYmUgY2hhbmdlZCBsYXRlclxuICAgICAgICAgICAgICAgIC8vIGJ5IGEgZGlyZWN0aXZlIHdpdGggdGVtcGxhdGVVcmwgd2hlbiBpdHMgdGVtcGxhdGUgYXJyaXZlcy5cbiAgICAgICAgICAgICAgICBibG9jayA9IHtcbiAgICAgICAgICAgICAgICAgIGNsb25lOiBjbG9uZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgJGFuaW1hdGUuZW50ZXIoY2xvbmUsICRlbGVtZW50LnBhcmVudCgpLCAkZWxlbWVudCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNFbGVtZW50cykge1xuICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnRzLnJlbW92ZSgpO1xuICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnRzID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGlsZFNjb3BlKSB7XG4gICAgICAgICAgICAgIGNoaWxkU2NvcGUuJGRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgY2hpbGRTY29wZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYmxvY2spIHtcbiAgICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50cyA9IGdldEJsb2NrTm9kZXMoYmxvY2suY2xvbmUpO1xuICAgICAgICAgICAgICAkYW5pbWF0ZS5sZWF2ZShwcmV2aW91c0VsZW1lbnRzKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHByZXZpb3VzRWxlbWVudHMgPSBudWxsO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYmxvY2sgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9O1xufV07XG5cbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgbmdJbmNsdWRlXG4gKiBAcmVzdHJpY3QgRUNBXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBGZXRjaGVzLCBjb21waWxlcyBhbmQgaW5jbHVkZXMgYW4gZXh0ZXJuYWwgSFRNTCBmcmFnbWVudC5cbiAqXG4gKiBCeSBkZWZhdWx0LCB0aGUgdGVtcGxhdGUgVVJMIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIHNhbWUgZG9tYWluIGFuZCBwcm90b2NvbCBhcyB0aGVcbiAqIGFwcGxpY2F0aW9uIGRvY3VtZW50LiBUaGlzIGlzIGRvbmUgYnkgY2FsbGluZyB7QGxpbmsgJHNjZSNnZXRUcnVzdGVkUmVzb3VyY2VVcmxcbiAqICRzY2UuZ2V0VHJ1c3RlZFJlc291cmNlVXJsfSBvbiBpdC4gVG8gbG9hZCB0ZW1wbGF0ZXMgZnJvbSBvdGhlciBkb21haW5zIG9yIHByb3RvY29sc1xuICogeW91IG1heSBlaXRoZXIge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyI3Jlc291cmNlVXJsV2hpdGVsaXN0IHdoaXRlbGlzdCB0aGVtfSBvclxuICoge0BsaW5rICRzY2UjdHJ1c3RBc1Jlc291cmNlVXJsIHdyYXAgdGhlbX0gYXMgdHJ1c3RlZCB2YWx1ZXMuIFJlZmVyIHRvIEFuZ3VsYXIncyB7QGxpbmtcbiAqIG5nLiRzY2UgU3RyaWN0IENvbnRleHR1YWwgRXNjYXBpbmd9LlxuICpcbiAqIEluIGFkZGl0aW9uLCB0aGUgYnJvd3NlcidzXG4gKiBbU2FtZSBPcmlnaW4gUG9saWN5XShodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Jyb3dzZXJzZWMvd2lraS9QYXJ0MiNTYW1lLW9yaWdpbl9wb2xpY3lfZm9yX1hNTEh0dHBSZXF1ZXN0KVxuICogYW5kIFtDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZyAoQ09SUyldKGh0dHA6Ly93d3cudzMub3JnL1RSL2NvcnMvKVxuICogcG9saWN5IG1heSBmdXJ0aGVyIHJlc3RyaWN0IHdoZXRoZXIgdGhlIHRlbXBsYXRlIGlzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gKiBGb3IgZXhhbXBsZSwgYG5nSW5jbHVkZWAgd29uJ3Qgd29yayBmb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzIG9uIGFsbCBicm93c2VycyBhbmQgZm9yIGBmaWxlOi8vYFxuICogYWNjZXNzIG9uIHNvbWUgYnJvd3NlcnMuXG4gKlxuICogQGFuaW1hdGlvbnNcbiAqIGVudGVyIC0gYW5pbWF0aW9uIGlzIHVzZWQgdG8gYnJpbmcgbmV3IGNvbnRlbnQgaW50byB0aGUgYnJvd3Nlci5cbiAqIGxlYXZlIC0gYW5pbWF0aW9uIGlzIHVzZWQgdG8gYW5pbWF0ZSBleGlzdGluZyBjb250ZW50IGF3YXkuXG4gKlxuICogVGhlIGVudGVyIGFuZCBsZWF2ZSBhbmltYXRpb24gb2NjdXIgY29uY3VycmVudGx5LlxuICpcbiAqIEBzY29wZVxuICogQHByaW9yaXR5IDQwMFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuZ0luY2x1ZGV8c3JjIGFuZ3VsYXIgZXhwcmVzc2lvbiBldmFsdWF0aW5nIHRvIFVSTC4gSWYgdGhlIHNvdXJjZSBpcyBhIHN0cmluZyBjb25zdGFudCxcbiAqICAgICAgICAgICAgICAgICBtYWtlIHN1cmUgeW91IHdyYXAgaXQgaW4gKipzaW5nbGUqKiBxdW90ZXMsIGUuZy4gYHNyYz1cIidteVBhcnRpYWxUZW1wbGF0ZS5odG1sJ1wiYC5cbiAqIEBwYXJhbSB7c3RyaW5nPX0gb25sb2FkIEV4cHJlc3Npb24gdG8gZXZhbHVhdGUgd2hlbiBhIG5ldyBwYXJ0aWFsIGlzIGxvYWRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz19IGF1dG9zY3JvbGwgV2hldGhlciBgbmdJbmNsdWRlYCBzaG91bGQgY2FsbCB7QGxpbmsgbmcuJGFuY2hvclNjcm9sbFxuICogICAgICAgICAgICAgICAgICAkYW5jaG9yU2Nyb2xsfSB0byBzY3JvbGwgdGhlIHZpZXdwb3J0IGFmdGVyIHRoZSBjb250ZW50IGlzIGxvYWRlZC5cbiAqXG4gKiAgICAgICAgICAgICAgICAgIC0gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCBkaXNhYmxlIHNjcm9sbGluZy5cbiAqICAgICAgICAgICAgICAgICAgLSBJZiB0aGUgYXR0cmlidXRlIGlzIHNldCB3aXRob3V0IHZhbHVlLCBlbmFibGUgc2Nyb2xsaW5nLlxuICogICAgICAgICAgICAgICAgICAtIE90aGVyd2lzZSBlbmFibGUgc2Nyb2xsaW5nIG9ubHkgaWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydXRoeSB2YWx1ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICA8ZXhhbXBsZSBtb2R1bGU9XCJpbmNsdWRlRXhhbXBsZVwiIGRlcHM9XCJhbmd1bGFyLWFuaW1hdGUuanNcIiBhbmltYXRpb25zPVwidHJ1ZVwiPlxuICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XG4gICAgICAgPHNlbGVjdCBuZy1tb2RlbD1cInRlbXBsYXRlXCIgbmctb3B0aW9ucz1cInQubmFtZSBmb3IgdCBpbiB0ZW1wbGF0ZXNcIj5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPihibGFuayk8L29wdGlvbj5cbiAgICAgICA8L3NlbGVjdD5cbiAgICAgICB1cmwgb2YgdGhlIHRlbXBsYXRlOiA8dHQ+e3t0ZW1wbGF0ZS51cmx9fTwvdHQ+XG4gICAgICAgPGhyLz5cbiAgICAgICA8ZGl2IGNsYXNzPVwic2xpZGUtYW5pbWF0ZS1jb250YWluZXJcIj5cbiAgICAgICAgIDxkaXYgY2xhc3M9XCJzbGlkZS1hbmltYXRlXCIgbmctaW5jbHVkZT1cInRlbXBsYXRlLnVybFwiPjwvZGl2PlxuICAgICAgIDwvZGl2PlxuICAgICA8L2Rpdj5cbiAgICA8L2ZpbGU+XG4gICAgPGZpbGUgbmFtZT1cInNjcmlwdC5qc1wiPlxuICAgICAgYW5ndWxhci5tb2R1bGUoJ2luY2x1ZGVFeGFtcGxlJywgWyduZ0FuaW1hdGUnXSlcbiAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcbiAgICAgICAgICAkc2NvcGUudGVtcGxhdGVzID1cbiAgICAgICAgICAgIFsgeyBuYW1lOiAndGVtcGxhdGUxLmh0bWwnLCB1cmw6ICd0ZW1wbGF0ZTEuaHRtbCd9LFxuICAgICAgICAgICAgICB7IG5hbWU6ICd0ZW1wbGF0ZTIuaHRtbCcsIHVybDogJ3RlbXBsYXRlMi5odG1sJ30gXTtcbiAgICAgICAgICAkc2NvcGUudGVtcGxhdGUgPSAkc2NvcGUudGVtcGxhdGVzWzBdO1xuICAgICAgICB9XSk7XG4gICAgIDwvZmlsZT5cbiAgICA8ZmlsZSBuYW1lPVwidGVtcGxhdGUxLmh0bWxcIj5cbiAgICAgIENvbnRlbnQgb2YgdGVtcGxhdGUxLmh0bWxcbiAgICA8L2ZpbGU+XG4gICAgPGZpbGUgbmFtZT1cInRlbXBsYXRlMi5odG1sXCI+XG4gICAgICBDb250ZW50IG9mIHRlbXBsYXRlMi5odG1sXG4gICAgPC9maWxlPlxuICAgIDxmaWxlIG5hbWU9XCJhbmltYXRpb25zLmNzc1wiPlxuICAgICAgLnNsaWRlLWFuaW1hdGUtY29udGFpbmVyIHtcbiAgICAgICAgcG9zaXRpb246cmVsYXRpdmU7XG4gICAgICAgIGJhY2tncm91bmQ6d2hpdGU7XG4gICAgICAgIGJvcmRlcjoxcHggc29saWQgYmxhY2s7XG4gICAgICAgIGhlaWdodDo0MHB4O1xuICAgICAgICBvdmVyZmxvdzpoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIC5zbGlkZS1hbmltYXRlIHtcbiAgICAgICAgcGFkZGluZzoxMHB4O1xuICAgICAgfVxuXG4gICAgICAuc2xpZGUtYW5pbWF0ZS5uZy1lbnRlciwgLnNsaWRlLWFuaW1hdGUubmctbGVhdmUge1xuICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246YWxsIGN1YmljLWJlemllcigwLjI1MCwgMC40NjAsIDAuNDUwLCAwLjk0MCkgMC41cztcbiAgICAgICAgdHJhbnNpdGlvbjphbGwgY3ViaWMtYmV6aWVyKDAuMjUwLCAwLjQ2MCwgMC40NTAsIDAuOTQwKSAwLjVzO1xuXG4gICAgICAgIHBvc2l0aW9uOmFic29sdXRlO1xuICAgICAgICB0b3A6MDtcbiAgICAgICAgbGVmdDowO1xuICAgICAgICByaWdodDowO1xuICAgICAgICBib3R0b206MDtcbiAgICAgICAgZGlzcGxheTpibG9jaztcbiAgICAgICAgcGFkZGluZzoxMHB4O1xuICAgICAgfVxuXG4gICAgICAuc2xpZGUtYW5pbWF0ZS5uZy1lbnRlciB7XG4gICAgICAgIHRvcDotNTBweDtcbiAgICAgIH1cbiAgICAgIC5zbGlkZS1hbmltYXRlLm5nLWVudGVyLm5nLWVudGVyLWFjdGl2ZSB7XG4gICAgICAgIHRvcDowO1xuICAgICAgfVxuXG4gICAgICAuc2xpZGUtYW5pbWF0ZS5uZy1sZWF2ZSB7XG4gICAgICAgIHRvcDowO1xuICAgICAgfVxuICAgICAgLnNsaWRlLWFuaW1hdGUubmctbGVhdmUubmctbGVhdmUtYWN0aXZlIHtcbiAgICAgICAgdG9wOjUwcHg7XG4gICAgICB9XG4gICAgPC9maWxlPlxuICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cbiAgICAgIHZhciB0ZW1wbGF0ZVNlbGVjdCA9IGVsZW1lbnQoYnkubW9kZWwoJ3RlbXBsYXRlJykpO1xuICAgICAgdmFyIGluY2x1ZGVFbGVtID0gZWxlbWVudChieS5jc3MoJ1tuZy1pbmNsdWRlXScpKTtcblxuICAgICAgaXQoJ3Nob3VsZCBsb2FkIHRlbXBsYXRlMS5odG1sJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGV4cGVjdChpbmNsdWRlRWxlbS5nZXRUZXh0KCkpLnRvTWF0Y2goL0NvbnRlbnQgb2YgdGVtcGxhdGUxLmh0bWwvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGxvYWQgdGVtcGxhdGUyLmh0bWwnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKGJyb3dzZXIucGFyYW1zLmJyb3dzZXIgPT0gJ2ZpcmVmb3gnKSB7XG4gICAgICAgICAgLy8gRmlyZWZveCBjYW4ndCBoYW5kbGUgdXNpbmcgc2VsZWN0c1xuICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9wcm90cmFjdG9yL2lzc3Vlcy80ODBcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGVtcGxhdGVTZWxlY3QuY2xpY2soKTtcbiAgICAgICAgdGVtcGxhdGVTZWxlY3QuYWxsKGJ5LmNzcygnb3B0aW9uJykpLmdldCgyKS5jbGljaygpO1xuICAgICAgICBleHBlY3QoaW5jbHVkZUVsZW0uZ2V0VGV4dCgpKS50b01hdGNoKC9Db250ZW50IG9mIHRlbXBsYXRlMi5odG1sLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjaGFuZ2UgdG8gYmxhbmsnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKGJyb3dzZXIucGFyYW1zLmJyb3dzZXIgPT0gJ2ZpcmVmb3gnKSB7XG4gICAgICAgICAgLy8gRmlyZWZveCBjYW4ndCBoYW5kbGUgdXNpbmcgc2VsZWN0c1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wbGF0ZVNlbGVjdC5jbGljaygpO1xuICAgICAgICB0ZW1wbGF0ZVNlbGVjdC5hbGwoYnkuY3NzKCdvcHRpb24nKSkuZ2V0KDApLmNsaWNrKCk7XG4gICAgICAgIGV4cGVjdChpbmNsdWRlRWxlbS5pc1ByZXNlbnQoKSkudG9CZShmYWxzZSk7XG4gICAgICB9KTtcbiAgICA8L2ZpbGU+XG4gIDwvZXhhbXBsZT5cbiAqL1xuXG5cbi8qKlxuICogQG5nZG9jIGV2ZW50XG4gKiBAbmFtZSBuZ0luY2x1ZGUjJGluY2x1ZGVDb250ZW50UmVxdWVzdGVkXG4gKiBAZXZlbnRUeXBlIGVtaXQgb24gdGhlIHNjb3BlIG5nSW5jbHVkZSB3YXMgZGVjbGFyZWQgaW5cbiAqIEBkZXNjcmlwdGlvblxuICogRW1pdHRlZCBldmVyeSB0aW1lIHRoZSBuZ0luY2x1ZGUgY29udGVudCBpcyByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFuZ3VsYXJFdmVudCBTeW50aGV0aWMgZXZlbnQgb2JqZWN0LlxuICogQHBhcmFtIHtTdHJpbmd9IHNyYyBVUkwgb2YgY29udGVudCB0byBsb2FkLlxuICovXG5cblxuLyoqXG4gKiBAbmdkb2MgZXZlbnRcbiAqIEBuYW1lIG5nSW5jbHVkZSMkaW5jbHVkZUNvbnRlbnRMb2FkZWRcbiAqIEBldmVudFR5cGUgZW1pdCBvbiB0aGUgY3VycmVudCBuZ0luY2x1ZGUgc2NvcGVcbiAqIEBkZXNjcmlwdGlvblxuICogRW1pdHRlZCBldmVyeSB0aW1lIHRoZSBuZ0luY2x1ZGUgY29udGVudCBpcyByZWxvYWRlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYW5ndWxhckV2ZW50IFN5bnRoZXRpYyBldmVudCBvYmplY3QuXG4gKiBAcGFyYW0ge1N0cmluZ30gc3JjIFVSTCBvZiBjb250ZW50IHRvIGxvYWQuXG4gKi9cblxuXG4vKipcbiAqIEBuZ2RvYyBldmVudFxuICogQG5hbWUgbmdJbmNsdWRlIyRpbmNsdWRlQ29udGVudEVycm9yXG4gKiBAZXZlbnRUeXBlIGVtaXQgb24gdGhlIHNjb3BlIG5nSW5jbHVkZSB3YXMgZGVjbGFyZWQgaW5cbiAqIEBkZXNjcmlwdGlvblxuICogRW1pdHRlZCB3aGVuIGEgdGVtcGxhdGUgSFRUUCByZXF1ZXN0IHlpZWxkcyBhbiBlcnJvbm91cyByZXNwb25zZSAoc3RhdHVzIDwgMjAwIHx8IHN0YXR1cyA+IDI5OSlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYW5ndWxhckV2ZW50IFN5bnRoZXRpYyBldmVudCBvYmplY3QuXG4gKiBAcGFyYW0ge1N0cmluZ30gc3JjIFVSTCBvZiBjb250ZW50IHRvIGxvYWQuXG4gKi9cbnZhciBuZ0luY2x1ZGVEaXJlY3RpdmUgPSBbJyR0ZW1wbGF0ZVJlcXVlc3QnLCAnJGFuY2hvclNjcm9sbCcsICckYW5pbWF0ZScsICckc2NlJyxcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCR0ZW1wbGF0ZVJlcXVlc3QsICAgJGFuY2hvclNjcm9sbCwgICAkYW5pbWF0ZSwgICAkc2NlKSB7XG4gIHJldHVybiB7XG4gICAgcmVzdHJpY3Q6ICdFQ0EnLFxuICAgIHByaW9yaXR5OiA0MDAsXG4gICAgdGVybWluYWw6IHRydWUsXG4gICAgdHJhbnNjbHVkZTogJ2VsZW1lbnQnLFxuICAgIGNvbnRyb2xsZXI6IGFuZ3VsYXIubm9vcCxcbiAgICBjb21waWxlOiBmdW5jdGlvbihlbGVtZW50LCBhdHRyKSB7XG4gICAgICB2YXIgc3JjRXhwID0gYXR0ci5uZ0luY2x1ZGUgfHwgYXR0ci5zcmMsXG4gICAgICAgICAgb25sb2FkRXhwID0gYXR0ci5vbmxvYWQgfHwgJycsXG4gICAgICAgICAgYXV0b1Njcm9sbEV4cCA9IGF0dHIuYXV0b3Njcm9sbDtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCAkZWxlbWVudCwgJGF0dHIsIGN0cmwsICR0cmFuc2NsdWRlKSB7XG4gICAgICAgIHZhciBjaGFuZ2VDb3VudGVyID0gMCxcbiAgICAgICAgICAgIGN1cnJlbnRTY29wZSxcbiAgICAgICAgICAgIHByZXZpb3VzRWxlbWVudCxcbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50O1xuXG4gICAgICAgIHZhciBjbGVhbnVwTGFzdEluY2x1ZGVDb250ZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKHByZXZpb3VzRWxlbWVudCkge1xuICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGN1cnJlbnRTY29wZSkge1xuICAgICAgICAgICAgY3VycmVudFNjb3BlLiRkZXN0cm95KCk7XG4gICAgICAgICAgICBjdXJyZW50U2NvcGUgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICRhbmltYXRlLmxlYXZlKGN1cnJlbnRFbGVtZW50KS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQgPSBjdXJyZW50RWxlbWVudDtcbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUuJHdhdGNoKCRzY2UucGFyc2VBc1Jlc291cmNlVXJsKHNyY0V4cCksIGZ1bmN0aW9uIG5nSW5jbHVkZVdhdGNoQWN0aW9uKHNyYykge1xuICAgICAgICAgIHZhciBhZnRlckFuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZChhdXRvU2Nyb2xsRXhwKSAmJiAoIWF1dG9TY3JvbGxFeHAgfHwgc2NvcGUuJGV2YWwoYXV0b1Njcm9sbEV4cCkpKSB7XG4gICAgICAgICAgICAgICRhbmNob3JTY3JvbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHZhciB0aGlzQ2hhbmdlSWQgPSArK2NoYW5nZUNvdW50ZXI7XG5cbiAgICAgICAgICBpZiAoc3JjKSB7XG4gICAgICAgICAgICAvL3NldCB0aGUgMm5kIHBhcmFtIHRvIHRydWUgdG8gaWdub3JlIHRoZSB0ZW1wbGF0ZSByZXF1ZXN0IGVycm9yIHNvIHRoYXQgdGhlIGlubmVyXG4gICAgICAgICAgICAvL2NvbnRlbnRzIGFuZCBzY29wZSBjYW4gYmUgY2xlYW5lZCB1cC5cbiAgICAgICAgICAgICR0ZW1wbGF0ZVJlcXVlc3Qoc3JjLCB0cnVlKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzQ2hhbmdlSWQgIT09IGNoYW5nZUNvdW50ZXIpIHJldHVybjtcbiAgICAgICAgICAgICAgdmFyIG5ld1Njb3BlID0gc2NvcGUuJG5ldygpO1xuICAgICAgICAgICAgICBjdHJsLnRlbXBsYXRlID0gcmVzcG9uc2U7XG5cbiAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyB3aWxsIGFsc28gbGluayBhbGwgY2hpbGRyZW4gb2YgbmctaW5jbHVkZSB0aGF0IHdlcmUgY29udGFpbmVkIGluIHRoZSBvcmlnaW5hbFxuICAgICAgICAgICAgICAvLyBodG1sLiBJZiB0aGF0IGNvbnRlbnQgY29udGFpbnMgY29udHJvbGxlcnMsIC4uLiB0aGV5IGNvdWxkIHBvbGx1dGUvY2hhbmdlIHRoZSBzY29wZS5cbiAgICAgICAgICAgICAgLy8gSG93ZXZlciwgdXNpbmcgbmctaW5jbHVkZSBvbiBhbiBlbGVtZW50IHdpdGggYWRkaXRpb25hbCBjb250ZW50IGRvZXMgbm90IG1ha2Ugc2Vuc2UuLi5cbiAgICAgICAgICAgICAgLy8gTm90ZTogV2UgY2FuJ3QgcmVtb3ZlIHRoZW0gaW4gdGhlIGNsb25lQXR0Y2hGbiBvZiAkdHJhbnNjbHVkZSBhcyB0aGF0XG4gICAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgbGlua2luZyB0aGUgY29udGVudCwgd2hpY2ggd291bGQgYXBwbHkgY2hpbGRcbiAgICAgICAgICAgICAgLy8gZGlyZWN0aXZlcyB0byBub24gZXhpc3RpbmcgZWxlbWVudHMuXG4gICAgICAgICAgICAgIHZhciBjbG9uZSA9ICR0cmFuc2NsdWRlKG5ld1Njb3BlLCBmdW5jdGlvbihjbG9uZSkge1xuICAgICAgICAgICAgICAgIGNsZWFudXBMYXN0SW5jbHVkZUNvbnRlbnQoKTtcbiAgICAgICAgICAgICAgICAkYW5pbWF0ZS5lbnRlcihjbG9uZSwgbnVsbCwgJGVsZW1lbnQpLnRoZW4oYWZ0ZXJBbmltYXRpb24pO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBjdXJyZW50U2NvcGUgPSBuZXdTY29wZTtcbiAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQgPSBjbG9uZTtcblxuICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuJGVtaXQoJyRpbmNsdWRlQ29udGVudExvYWRlZCcsIHNyYyk7XG4gICAgICAgICAgICAgIHNjb3BlLiRldmFsKG9ubG9hZEV4cCk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXNDaGFuZ2VJZCA9PT0gY2hhbmdlQ291bnRlcikge1xuICAgICAgICAgICAgICAgIGNsZWFudXBMYXN0SW5jbHVkZUNvbnRlbnQoKTtcbiAgICAgICAgICAgICAgICBzY29wZS4kZW1pdCgnJGluY2x1ZGVDb250ZW50RXJyb3InLCBzcmMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNjb3BlLiRlbWl0KCckaW5jbHVkZUNvbnRlbnRSZXF1ZXN0ZWQnLCBzcmMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGVhbnVwTGFzdEluY2x1ZGVDb250ZW50KCk7XG4gICAgICAgICAgICBjdHJsLnRlbXBsYXRlID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG59XTtcblxuLy8gVGhpcyBkaXJlY3RpdmUgaXMgY2FsbGVkIGR1cmluZyB0aGUgJHRyYW5zY2x1ZGUgY2FsbCBvZiB0aGUgZmlyc3QgYG5nSW5jbHVkZWAgZGlyZWN0aXZlLlxuLy8gSXQgd2lsbCByZXBsYWNlIGFuZCBjb21waWxlIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50IHdpdGggdGhlIGxvYWRlZCB0ZW1wbGF0ZS5cbi8vIFdlIG5lZWQgdGhpcyBkaXJlY3RpdmUgc28gdGhhdCB0aGUgZWxlbWVudCBjb250ZW50IGlzIGFscmVhZHkgZmlsbGVkIHdoZW5cbi8vIHRoZSBsaW5rIGZ1bmN0aW9uIG9mIGFub3RoZXIgZGlyZWN0aXZlIG9uIHRoZSBzYW1lIGVsZW1lbnQgYXMgbmdJbmNsdWRlXG4vLyBpcyBjYWxsZWQuXG52YXIgbmdJbmNsdWRlRmlsbENvbnRlbnREaXJlY3RpdmUgPSBbJyRjb21waWxlJyxcbiAgZnVuY3Rpb24oJGNvbXBpbGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdHJpY3Q6ICdFQ0EnLFxuICAgICAgcHJpb3JpdHk6IC00MDAsXG4gICAgICByZXF1aXJlOiAnbmdJbmNsdWRlJyxcbiAgICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCAkZWxlbWVudCwgJGF0dHIsIGN0cmwpIHtcbiAgICAgICAgaWYgKC9TVkcvLnRlc3QoJGVsZW1lbnRbMF0udG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAvLyBXZWJLaXQ6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU2OTggLS0tIFNWRyBlbGVtZW50cyBkbyBub3RcbiAgICAgICAgICAvLyBzdXBwb3J0IGlubmVySFRNTCwgc28gZGV0ZWN0IHRoaXMgaGVyZSBhbmQgdHJ5IHRvIGdlbmVyYXRlIHRoZSBjb250ZW50c1xuICAgICAgICAgIC8vIHNwZWNpYWxseS5cbiAgICAgICAgICAkZWxlbWVudC5lbXB0eSgpO1xuICAgICAgICAgICRjb21waWxlKGpxTGl0ZUJ1aWxkRnJhZ21lbnQoY3RybC50ZW1wbGF0ZSwgZG9jdW1lbnQpLmNoaWxkTm9kZXMpKHNjb3BlLFxuICAgICAgICAgICAgICBmdW5jdGlvbiBuYW1lc3BhY2VBZGFwdGVkQ2xvbmUoY2xvbmUpIHtcbiAgICAgICAgICAgICRlbGVtZW50LmFwcGVuZChjbG9uZSk7XG4gICAgICAgICAgfSwge2Z1dHVyZVBhcmVudEVsZW1lbnQ6ICRlbGVtZW50fSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgJGVsZW1lbnQuaHRtbChjdHJsLnRlbXBsYXRlKTtcbiAgICAgICAgJGNvbXBpbGUoJGVsZW1lbnQuY29udGVudHMoKSkoc2NvcGUpO1xuICAgICAgfVxuICAgIH07XG4gIH1dO1xuXG4vKipcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAqIEBuYW1lIG5nSW5pdFxuICogQHJlc3RyaWN0IEFDXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgYG5nSW5pdGAgZGlyZWN0aXZlIGFsbG93cyB5b3UgdG8gZXZhbHVhdGUgYW4gZXhwcmVzc2lvbiBpbiB0aGVcbiAqIGN1cnJlbnQgc2NvcGUuXG4gKlxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWVycm9yXCI+XG4gKiBUaGUgb25seSBhcHByb3ByaWF0ZSB1c2Ugb2YgYG5nSW5pdGAgaXMgZm9yIGFsaWFzaW5nIHNwZWNpYWwgcHJvcGVydGllcyBvZlxuICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ1JlcGVhdCBgbmdSZXBlYXRgfSwgYXMgc2VlbiBpbiB0aGUgZGVtbyBiZWxvdy4gQmVzaWRlcyB0aGlzIGNhc2UsIHlvdVxuICogc2hvdWxkIHVzZSB7QGxpbmsgZ3VpZGUvY29udHJvbGxlciBjb250cm9sbGVyc30gcmF0aGVyIHRoYW4gYG5nSW5pdGBcbiAqIHRvIGluaXRpYWxpemUgdmFsdWVzIG9uIGEgc2NvcGUuXG4gKiA8L2Rpdj5cbiAqIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCI+XG4gKiAqKk5vdGUqKjogSWYgeW91IGhhdmUgYXNzaWdubWVudCBpbiBgbmdJbml0YCBhbG9uZyB3aXRoIHtAbGluayBuZy4kZmlsdGVyIGAkZmlsdGVyYH0sIG1ha2VcbiAqIHN1cmUgeW91IGhhdmUgcGFyZW50aGVzaXMgZm9yIGNvcnJlY3QgcHJlY2VkZW5jZTpcbiAqIDxwcmUgY2xhc3M9XCJwcmV0dHlwcmludFwiPlxuICogICA8ZGl2IG5nLWluaXQ9XCJ0ZXN0MSA9IChkYXRhIHwgb3JkZXJCeTonbmFtZScpXCI+PC9kaXY+XG4gKiA8L3ByZT5cbiAqIDwvZGl2PlxuICpcbiAqIEBwcmlvcml0eSA0NTBcbiAqXG4gKiBAZWxlbWVudCBBTllcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdJbml0IHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWwuXG4gKlxuICogQGV4YW1wbGVcbiAgIDxleGFtcGxlIG1vZHVsZT1cImluaXRFeGFtcGxlXCI+XG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICA8c2NyaXB0PlxuICAgICBhbmd1bGFyLm1vZHVsZSgnaW5pdEV4YW1wbGUnLCBbXSlcbiAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xuICAgICAgICAgJHNjb3BlLmxpc3QgPSBbWydhJywgJ2InXSwgWydjJywgJ2QnXV07XG4gICAgICAgfV0pO1xuICAgPC9zY3JpcHQ+XG4gICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxuICAgICA8ZGl2IG5nLXJlcGVhdD1cImlubmVyTGlzdCBpbiBsaXN0XCIgbmctaW5pdD1cIm91dGVySW5kZXggPSAkaW5kZXhcIj5cbiAgICAgICA8ZGl2IG5nLXJlcGVhdD1cInZhbHVlIGluIGlubmVyTGlzdFwiIG5nLWluaXQ9XCJpbm5lckluZGV4ID0gJGluZGV4XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJleGFtcGxlLWluaXRcIj5saXN0WyB7e291dGVySW5kZXh9fSBdWyB7e2lubmVySW5kZXh9fSBdID0ge3t2YWx1ZX19Ozwvc3Bhbj5cbiAgICAgICA8L2Rpdj5cbiAgICAgPC9kaXY+XG4gICA8L2Rpdj5cbiAgICAgPC9maWxlPlxuICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gICAgICAgaXQoJ3Nob3VsZCBhbGlhcyBpbmRleCBwb3NpdGlvbnMnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgIHZhciBlbGVtZW50cyA9IGVsZW1lbnQuYWxsKGJ5LmNzcygnLmV4YW1wbGUtaW5pdCcpKTtcbiAgICAgICAgIGV4cGVjdChlbGVtZW50cy5nZXQoMCkuZ2V0VGV4dCgpKS50b0JlKCdsaXN0WyAwIF1bIDAgXSA9IGE7Jyk7XG4gICAgICAgICBleHBlY3QoZWxlbWVudHMuZ2V0KDEpLmdldFRleHQoKSkudG9CZSgnbGlzdFsgMCBdWyAxIF0gPSBiOycpO1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnRzLmdldCgyKS5nZXRUZXh0KCkpLnRvQmUoJ2xpc3RbIDEgXVsgMCBdID0gYzsnKTtcbiAgICAgICAgIGV4cGVjdChlbGVtZW50cy5nZXQoMykuZ2V0VGV4dCgpKS50b0JlKCdsaXN0WyAxIF1bIDEgXSA9IGQ7Jyk7XG4gICAgICAgfSk7XG4gICAgIDwvZmlsZT5cbiAgIDwvZXhhbXBsZT5cbiAqL1xudmFyIG5nSW5pdERpcmVjdGl2ZSA9IG5nRGlyZWN0aXZlKHtcbiAgcHJpb3JpdHk6IDQ1MCxcbiAgY29tcGlsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByZTogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSB7XG4gICAgICAgIHNjb3BlLiRldmFsKGF0dHJzLm5nSW5pdCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufSk7XG5cbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgbmdOb25CaW5kYWJsZVxuICogQHJlc3RyaWN0IEFDXG4gKiBAcHJpb3JpdHkgMTAwMFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIGBuZ05vbkJpbmRhYmxlYCBkaXJlY3RpdmUgdGVsbHMgQW5ndWxhciBub3QgdG8gY29tcGlsZSBvciBiaW5kIHRoZSBjb250ZW50cyBvZiB0aGUgY3VycmVudFxuICogRE9NIGVsZW1lbnQuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSBlbGVtZW50IGNvbnRhaW5zIHdoYXQgYXBwZWFycyB0byBiZSBBbmd1bGFyIGRpcmVjdGl2ZXMgYW5kXG4gKiBiaW5kaW5ncyBidXQgd2hpY2ggc2hvdWxkIGJlIGlnbm9yZWQgYnkgQW5ndWxhci4gVGhpcyBjb3VsZCBiZSB0aGUgY2FzZSBpZiB5b3UgaGF2ZSBhIHNpdGUgdGhhdFxuICogZGlzcGxheXMgc25pcHBldHMgb2YgY29kZSwgZm9yIGluc3RhbmNlLlxuICpcbiAqIEBlbGVtZW50IEFOWVxuICpcbiAqIEBleGFtcGxlXG4gKiBJbiB0aGlzIGV4YW1wbGUgdGhlcmUgYXJlIHR3byBsb2NhdGlvbnMgd2hlcmUgYSBzaW1wbGUgaW50ZXJwb2xhdGlvbiBiaW5kaW5nIChge3t9fWApIGlzIHByZXNlbnQsXG4gKiBidXQgdGhlIG9uZSB3cmFwcGVkIGluIGBuZ05vbkJpbmRhYmxlYCBpcyBsZWZ0IGFsb25lLlxuICpcbiAqIEBleGFtcGxlXG4gICAgPGV4YW1wbGU+XG4gICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgICA8ZGl2Pk5vcm1hbDoge3sxICsgMn19PC9kaXY+XG4gICAgICAgIDxkaXYgbmctbm9uLWJpbmRhYmxlPklnbm9yZWQ6IHt7MSArIDJ9fTwvZGl2PlxuICAgICAgPC9maWxlPlxuICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctbm9uLWJpbmRhYmxlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCcxICsgMicpKS5nZXRUZXh0KCkpLnRvQ29udGFpbignMycpO1xuICAgICAgICAgZXhwZWN0KGVsZW1lbnQuYWxsKGJ5LmNzcygnZGl2JykpLmxhc3QoKS5nZXRUZXh0KCkpLnRvTWF0Y2goLzEgXFwrIDIvKTtcbiAgICAgICB9KTtcbiAgICAgIDwvZmlsZT5cbiAgICA8L2V4YW1wbGU+XG4gKi9cbnZhciBuZ05vbkJpbmRhYmxlRGlyZWN0aXZlID0gbmdEaXJlY3RpdmUoeyB0ZXJtaW5hbDogdHJ1ZSwgcHJpb3JpdHk6IDEwMDAgfSk7XG5cbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgbmdQbHVyYWxpemVcbiAqIEByZXN0cmljdCBFQVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogYG5nUGx1cmFsaXplYCBpcyBhIGRpcmVjdGl2ZSB0aGF0IGRpc3BsYXlzIG1lc3NhZ2VzIGFjY29yZGluZyB0byBlbi1VUyBsb2NhbGl6YXRpb24gcnVsZXMuXG4gKiBUaGVzZSBydWxlcyBhcmUgYnVuZGxlZCB3aXRoIGFuZ3VsYXIuanMsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlblxuICogKHNlZSB7QGxpbmsgZ3VpZGUvaTE4biBBbmd1bGFyIGkxOG59IGRldiBndWlkZSkuIFlvdSBjb25maWd1cmUgbmdQbHVyYWxpemUgZGlyZWN0aXZlXG4gKiBieSBzcGVjaWZ5aW5nIHRoZSBtYXBwaW5ncyBiZXR3ZWVuXG4gKiBbcGx1cmFsIGNhdGVnb3JpZXNdKGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcy9jbGRyLXRtcC90cnVuay9kaWZmL3N1cHBsZW1lbnRhbC9sYW5ndWFnZV9wbHVyYWxfcnVsZXMuaHRtbClcbiAqIGFuZCB0aGUgc3RyaW5ncyB0byBiZSBkaXNwbGF5ZWQuXG4gKlxuICogIyBQbHVyYWwgY2F0ZWdvcmllcyBhbmQgZXhwbGljaXQgbnVtYmVyIHJ1bGVzXG4gKiBUaGVyZSBhcmUgdHdvXG4gKiBbcGx1cmFsIGNhdGVnb3JpZXNdKGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcy9jbGRyLXRtcC90cnVuay9kaWZmL3N1cHBsZW1lbnRhbC9sYW5ndWFnZV9wbHVyYWxfcnVsZXMuaHRtbClcbiAqIGluIEFuZ3VsYXIncyBkZWZhdWx0IGVuLVVTIGxvY2FsZTogXCJvbmVcIiBhbmQgXCJvdGhlclwiLlxuICpcbiAqIFdoaWxlIGEgcGx1cmFsIGNhdGVnb3J5IG1heSBtYXRjaCBtYW55IG51bWJlcnMgKGZvciBleGFtcGxlLCBpbiBlbi1VUyBsb2NhbGUsIFwib3RoZXJcIiBjYW4gbWF0Y2hcbiAqIGFueSBudW1iZXIgdGhhdCBpcyBub3QgMSksIGFuIGV4cGxpY2l0IG51bWJlciBydWxlIGNhbiBvbmx5IG1hdGNoIG9uZSBudW1iZXIuIEZvciBleGFtcGxlLCB0aGVcbiAqIGV4cGxpY2l0IG51bWJlciBydWxlIGZvciBcIjNcIiBtYXRjaGVzIHRoZSBudW1iZXIgMy4gVGhlcmUgYXJlIGV4YW1wbGVzIG9mIHBsdXJhbCBjYXRlZ29yaWVzXG4gKiBhbmQgZXhwbGljaXQgbnVtYmVyIHJ1bGVzIHRocm91Z2hvdXQgdGhlIHJlc3Qgb2YgdGhpcyBkb2N1bWVudGF0aW9uLlxuICpcbiAqICMgQ29uZmlndXJpbmcgbmdQbHVyYWxpemVcbiAqIFlvdSBjb25maWd1cmUgbmdQbHVyYWxpemUgYnkgcHJvdmlkaW5nIDIgYXR0cmlidXRlczogYGNvdW50YCBhbmQgYHdoZW5gLlxuICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYW4gb3B0aW9uYWwgYXR0cmlidXRlLCBgb2Zmc2V0YC5cbiAqXG4gKiBUaGUgdmFsdWUgb2YgdGhlIGBjb3VudGAgYXR0cmlidXRlIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW4ge0BsaW5rIGd1aWRlL2V4cHJlc3Npb25cbiAqIEFuZ3VsYXIgZXhwcmVzc2lvbn07IHRoZXNlIGFyZSBldmFsdWF0ZWQgb24gdGhlIGN1cnJlbnQgc2NvcGUgZm9yIGl0cyBib3VuZCB2YWx1ZS5cbiAqXG4gKiBUaGUgYHdoZW5gIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIG1hcHBpbmdzIGJldHdlZW4gcGx1cmFsIGNhdGVnb3JpZXMgYW5kIHRoZSBhY3R1YWxcbiAqIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQuIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIHNob3VsZCBiZSBhIEpTT04gb2JqZWN0LlxuICpcbiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gY29uZmlndXJlIG5nUGx1cmFsaXplOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxuZy1wbHVyYWxpemUgY291bnQ9XCJwZXJzb25Db3VudFwiXG4gICAgICAgICAgICAgICAgIHdoZW49XCJ7JzAnOiAnTm9ib2R5IGlzIHZpZXdpbmcuJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICdvbmUnOiAnMSBwZXJzb24gaXMgdmlld2luZy4nLFxuICogICAgICAgICAgICAgICAgICAgICAgJ290aGVyJzogJ3t9IHBlb3BsZSBhcmUgdmlld2luZy4nfVwiPlxuICogPC9uZy1wbHVyYWxpemU+XG4gKmBgYFxuICpcbiAqIEluIHRoZSBleGFtcGxlLCBgXCIwOiBOb2JvZHkgaXMgdmlld2luZy5cImAgaXMgYW4gZXhwbGljaXQgbnVtYmVyIHJ1bGUuIElmIHlvdSBkaWQgbm90XG4gKiBzcGVjaWZ5IHRoaXMgcnVsZSwgMCB3b3VsZCBiZSBtYXRjaGVkIHRvIHRoZSBcIm90aGVyXCIgY2F0ZWdvcnkgYW5kIFwiMCBwZW9wbGUgYXJlIHZpZXdpbmdcIlxuICogd291bGQgYmUgc2hvd24gaW5zdGVhZCBvZiBcIk5vYm9keSBpcyB2aWV3aW5nXCIuIFlvdSBjYW4gc3BlY2lmeSBhbiBleHBsaWNpdCBudW1iZXIgcnVsZSBmb3JcbiAqIG90aGVyIG51bWJlcnMsIGZvciBleGFtcGxlIDEyLCBzbyB0aGF0IGluc3RlYWQgb2Ygc2hvd2luZyBcIjEyIHBlb3BsZSBhcmUgdmlld2luZ1wiLCB5b3UgY2FuXG4gKiBzaG93IFwiYSBkb3plbiBwZW9wbGUgYXJlIHZpZXdpbmdcIi5cbiAqXG4gKiBZb3UgY2FuIHVzZSBhIHNldCBvZiBjbG9zZWQgYnJhY2VzIChge31gKSBhcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgbnVtYmVyIHRoYXQgeW91IHdhbnQgc3Vic3RpdHV0ZWRcbiAqIGludG8gcGx1cmFsaXplZCBzdHJpbmdzLiBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgQW5ndWxhciB3aWxsIHJlcGxhY2UgYHt9YCB3aXRoXG4gKiA8c3BhbiBuZy1ub24tYmluZGFibGU+YHt7cGVyc29uQ291bnR9fWA8L3NwYW4+LiBUaGUgY2xvc2VkIGJyYWNlcyBge31gIGlzIGEgcGxhY2Vob2xkZXJcbiAqIGZvciA8c3BhbiBuZy1ub24tYmluZGFibGU+e3tudW1iZXJFeHByZXNzaW9ufX08L3NwYW4+LlxuICpcbiAqICMgQ29uZmlndXJpbmcgbmdQbHVyYWxpemUgd2l0aCBvZmZzZXRcbiAqIFRoZSBgb2Zmc2V0YCBhdHRyaWJ1dGUgYWxsb3dzIGZ1cnRoZXIgY3VzdG9taXphdGlvbiBvZiBwbHVyYWxpemVkIHRleHQsIHdoaWNoIGNhbiByZXN1bHQgaW5cbiAqIGEgYmV0dGVyIHVzZXIgZXhwZXJpZW5jZS4gRm9yIGV4YW1wbGUsIGluc3RlYWQgb2YgdGhlIG1lc3NhZ2UgXCI0IHBlb3BsZSBhcmUgdmlld2luZyB0aGlzIGRvY3VtZW50XCIsXG4gKiB5b3UgbWlnaHQgZGlzcGxheSBcIkpvaG4sIEthdGUgYW5kIDIgb3RoZXJzIGFyZSB2aWV3aW5nIHRoaXMgZG9jdW1lbnRcIi5cbiAqIFRoZSBvZmZzZXQgYXR0cmlidXRlIGFsbG93cyB5b3UgdG8gb2Zmc2V0IGEgbnVtYmVyIGJ5IGFueSBkZXNpcmVkIHZhbHVlLlxuICogTGV0J3MgdGFrZSBhIGxvb2sgYXQgYW4gZXhhbXBsZTpcbiAqXG4gKiBgYGBodG1sXG4gKiA8bmctcGx1cmFsaXplIGNvdW50PVwicGVyc29uQ291bnRcIiBvZmZzZXQ9MlxuICogICAgICAgICAgICAgICB3aGVuPVwieycwJzogJ05vYm9keSBpcyB2aWV3aW5nLicsXG4gKiAgICAgICAgICAgICAgICAgICAgICAnMSc6ICd7e3BlcnNvbjF9fSBpcyB2aWV3aW5nLicsXG4gKiAgICAgICAgICAgICAgICAgICAgICAnMic6ICd7e3BlcnNvbjF9fSBhbmQge3twZXJzb24yfX0gYXJlIHZpZXdpbmcuJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICdvbmUnOiAne3twZXJzb24xfX0sIHt7cGVyc29uMn19IGFuZCBvbmUgb3RoZXIgcGVyc29uIGFyZSB2aWV3aW5nLicsXG4gKiAgICAgICAgICAgICAgICAgICAgICAnb3RoZXInOiAne3twZXJzb24xfX0sIHt7cGVyc29uMn19IGFuZCB7fSBvdGhlciBwZW9wbGUgYXJlIHZpZXdpbmcuJ31cIj5cbiAqIDwvbmctcGx1cmFsaXplPlxuICogYGBgXG4gKlxuICogTm90aWNlIHRoYXQgd2UgYXJlIHN0aWxsIHVzaW5nIHR3byBwbHVyYWwgY2F0ZWdvcmllcyhvbmUsIG90aGVyKSwgYnV0IHdlIGFkZGVkXG4gKiB0aHJlZSBleHBsaWNpdCBudW1iZXIgcnVsZXMgMCwgMSBhbmQgMi5cbiAqIFdoZW4gb25lIHBlcnNvbiwgcGVyaGFwcyBKb2huLCB2aWV3cyB0aGUgZG9jdW1lbnQsIFwiSm9obiBpcyB2aWV3aW5nXCIgd2lsbCBiZSBzaG93bi5cbiAqIFdoZW4gdGhyZWUgcGVvcGxlIHZpZXcgdGhlIGRvY3VtZW50LCBubyBleHBsaWNpdCBudW1iZXIgcnVsZSBpcyBmb3VuZCwgc29cbiAqIGFuIG9mZnNldCBvZiAyIGlzIHRha2VuIG9mZiAzLCBhbmQgQW5ndWxhciB1c2VzIDEgdG8gZGVjaWRlIHRoZSBwbHVyYWwgY2F0ZWdvcnkuXG4gKiBJbiB0aGlzIGNhc2UsIHBsdXJhbCBjYXRlZ29yeSAnb25lJyBpcyBtYXRjaGVkIGFuZCBcIkpvaG4sIE1hcnkgYW5kIG9uZSBvdGhlciBwZXJzb24gYXJlIHZpZXdpbmdcIlxuICogaXMgc2hvd24uXG4gKlxuICogTm90ZSB0aGF0IHdoZW4geW91IHNwZWNpZnkgb2Zmc2V0cywgeW91IG11c3QgcHJvdmlkZSBleHBsaWNpdCBudW1iZXIgcnVsZXMgZm9yXG4gKiBudW1iZXJzIGZyb20gMCB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBvZmZzZXQuIElmIHlvdSB1c2UgYW4gb2Zmc2V0IG9mIDMsIGZvciBleGFtcGxlLFxuICogeW91IG11c3QgcHJvdmlkZSBleHBsaWNpdCBudW1iZXIgcnVsZXMgZm9yIDAsIDEsIDIgYW5kIDMuIFlvdSBtdXN0IGFsc28gcHJvdmlkZSBwbHVyYWwgc3RyaW5ncyBmb3JcbiAqIHBsdXJhbCBjYXRlZ29yaWVzIFwib25lXCIgYW5kIFwib3RoZXJcIi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xleHByZXNzaW9ufSBjb3VudCBUaGUgdmFyaWFibGUgdG8gYmUgYm91bmQgdG8uXG4gKiBAcGFyYW0ge3N0cmluZ30gd2hlbiBUaGUgbWFwcGluZyBiZXR3ZWVuIHBsdXJhbCBjYXRlZ29yeSB0byBpdHMgY29ycmVzcG9uZGluZyBzdHJpbmdzLlxuICogQHBhcmFtIHtudW1iZXI9fSBvZmZzZXQgT2Zmc2V0IHRvIGRlZHVjdCBmcm9tIHRoZSB0b3RhbCBudW1iZXIuXG4gKlxuICogQGV4YW1wbGVcbiAgICA8ZXhhbXBsZSBtb2R1bGU9XCJwbHVyYWxpemVFeGFtcGxlXCI+XG4gICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgICA8c2NyaXB0PlxuICAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdwbHVyYWxpemVFeGFtcGxlJywgW10pXG4gICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xuICAgICAgICAgICAgICAkc2NvcGUucGVyc29uMSA9ICdJZ29yJztcbiAgICAgICAgICAgICAgJHNjb3BlLnBlcnNvbjIgPSAnTWlza28nO1xuICAgICAgICAgICAgICAkc2NvcGUucGVyc29uQ291bnQgPSAxO1xuICAgICAgICAgICAgfV0pO1xuICAgICAgICA8L3NjcmlwdD5cbiAgICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cbiAgICAgICAgICBQZXJzb24gMTo8aW5wdXQgdHlwZT1cInRleHRcIiBuZy1tb2RlbD1cInBlcnNvbjFcIiB2YWx1ZT1cIklnb3JcIiAvPjxici8+XG4gICAgICAgICAgUGVyc29uIDI6PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmctbW9kZWw9XCJwZXJzb24yXCIgdmFsdWU9XCJNaXNrb1wiIC8+PGJyLz5cbiAgICAgICAgICBOdW1iZXIgb2YgUGVvcGxlOjxpbnB1dCB0eXBlPVwidGV4dFwiIG5nLW1vZGVsPVwicGVyc29uQ291bnRcIiB2YWx1ZT1cIjFcIiAvPjxici8+XG5cbiAgICAgICAgICA8IS0tLSBFeGFtcGxlIHdpdGggc2ltcGxlIHBsdXJhbGl6YXRpb24gcnVsZXMgZm9yIGVuIGxvY2FsZSAtLS0+XG4gICAgICAgICAgV2l0aG91dCBPZmZzZXQ6XG4gICAgICAgICAgPG5nLXBsdXJhbGl6ZSBjb3VudD1cInBlcnNvbkNvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZW49XCJ7JzAnOiAnTm9ib2R5IGlzIHZpZXdpbmcuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25lJzogJzEgcGVyc29uIGlzIHZpZXdpbmcuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3RoZXInOiAne30gcGVvcGxlIGFyZSB2aWV3aW5nLid9XCI+XG4gICAgICAgICAgPC9uZy1wbHVyYWxpemU+PGJyPlxuXG4gICAgICAgICAgPCEtLS0gRXhhbXBsZSB3aXRoIG9mZnNldCAtLS0+XG4gICAgICAgICAgV2l0aCBPZmZzZXQoMik6XG4gICAgICAgICAgPG5nLXBsdXJhbGl6ZSBjb3VudD1cInBlcnNvbkNvdW50XCIgb2Zmc2V0PTJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZW49XCJ7JzAnOiAnTm9ib2R5IGlzIHZpZXdpbmcuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMSc6ICd7e3BlcnNvbjF9fSBpcyB2aWV3aW5nLicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzInOiAne3twZXJzb24xfX0gYW5kIHt7cGVyc29uMn19IGFyZSB2aWV3aW5nLicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uZSc6ICd7e3BlcnNvbjF9fSwge3twZXJzb24yfX0gYW5kIG9uZSBvdGhlciBwZXJzb24gYXJlIHZpZXdpbmcuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3RoZXInOiAne3twZXJzb24xfX0sIHt7cGVyc29uMn19IGFuZCB7fSBvdGhlciBwZW9wbGUgYXJlIHZpZXdpbmcuJ31cIj5cbiAgICAgICAgICA8L25nLXBsdXJhbGl6ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2ZpbGU+XG4gICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gICAgICAgIGl0KCdzaG91bGQgc2hvdyBjb3JyZWN0IHBsdXJhbGl6ZWQgc3RyaW5nJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHdpdGhvdXRPZmZzZXQgPSBlbGVtZW50LmFsbChieS5jc3MoJ25nLXBsdXJhbGl6ZScpKS5nZXQoMCk7XG4gICAgICAgICAgdmFyIHdpdGhPZmZzZXQgPSBlbGVtZW50LmFsbChieS5jc3MoJ25nLXBsdXJhbGl6ZScpKS5nZXQoMSk7XG4gICAgICAgICAgdmFyIGNvdW50SW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCdwZXJzb25Db3VudCcpKTtcblxuICAgICAgICAgIGV4cGVjdCh3aXRob3V0T2Zmc2V0LmdldFRleHQoKSkudG9FcXVhbCgnMSBwZXJzb24gaXMgdmlld2luZy4nKTtcbiAgICAgICAgICBleHBlY3Qod2l0aE9mZnNldC5nZXRUZXh0KCkpLnRvRXF1YWwoJ0lnb3IgaXMgdmlld2luZy4nKTtcblxuICAgICAgICAgIGNvdW50SW5wdXQuY2xlYXIoKTtcbiAgICAgICAgICBjb3VudElucHV0LnNlbmRLZXlzKCcwJyk7XG5cbiAgICAgICAgICBleHBlY3Qod2l0aG91dE9mZnNldC5nZXRUZXh0KCkpLnRvRXF1YWwoJ05vYm9keSBpcyB2aWV3aW5nLicpO1xuICAgICAgICAgIGV4cGVjdCh3aXRoT2Zmc2V0LmdldFRleHQoKSkudG9FcXVhbCgnTm9ib2R5IGlzIHZpZXdpbmcuJyk7XG5cbiAgICAgICAgICBjb3VudElucHV0LmNsZWFyKCk7XG4gICAgICAgICAgY291bnRJbnB1dC5zZW5kS2V5cygnMicpO1xuXG4gICAgICAgICAgZXhwZWN0KHdpdGhvdXRPZmZzZXQuZ2V0VGV4dCgpKS50b0VxdWFsKCcyIHBlb3BsZSBhcmUgdmlld2luZy4nKTtcbiAgICAgICAgICBleHBlY3Qod2l0aE9mZnNldC5nZXRUZXh0KCkpLnRvRXF1YWwoJ0lnb3IgYW5kIE1pc2tvIGFyZSB2aWV3aW5nLicpO1xuXG4gICAgICAgICAgY291bnRJbnB1dC5jbGVhcigpO1xuICAgICAgICAgIGNvdW50SW5wdXQuc2VuZEtleXMoJzMnKTtcblxuICAgICAgICAgIGV4cGVjdCh3aXRob3V0T2Zmc2V0LmdldFRleHQoKSkudG9FcXVhbCgnMyBwZW9wbGUgYXJlIHZpZXdpbmcuJyk7XG4gICAgICAgICAgZXhwZWN0KHdpdGhPZmZzZXQuZ2V0VGV4dCgpKS50b0VxdWFsKCdJZ29yLCBNaXNrbyBhbmQgb25lIG90aGVyIHBlcnNvbiBhcmUgdmlld2luZy4nKTtcblxuICAgICAgICAgIGNvdW50SW5wdXQuY2xlYXIoKTtcbiAgICAgICAgICBjb3VudElucHV0LnNlbmRLZXlzKCc0Jyk7XG5cbiAgICAgICAgICBleHBlY3Qod2l0aG91dE9mZnNldC5nZXRUZXh0KCkpLnRvRXF1YWwoJzQgcGVvcGxlIGFyZSB2aWV3aW5nLicpO1xuICAgICAgICAgIGV4cGVjdCh3aXRoT2Zmc2V0LmdldFRleHQoKSkudG9FcXVhbCgnSWdvciwgTWlza28gYW5kIDIgb3RoZXIgcGVvcGxlIGFyZSB2aWV3aW5nLicpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCBzaG93IGRhdGEtYm91bmQgbmFtZXMnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgd2l0aE9mZnNldCA9IGVsZW1lbnQuYWxsKGJ5LmNzcygnbmctcGx1cmFsaXplJykpLmdldCgxKTtcbiAgICAgICAgICB2YXIgcGVyc29uQ291bnQgPSBlbGVtZW50KGJ5Lm1vZGVsKCdwZXJzb25Db3VudCcpKTtcbiAgICAgICAgICB2YXIgcGVyc29uMSA9IGVsZW1lbnQoYnkubW9kZWwoJ3BlcnNvbjEnKSk7XG4gICAgICAgICAgdmFyIHBlcnNvbjIgPSBlbGVtZW50KGJ5Lm1vZGVsKCdwZXJzb24yJykpO1xuICAgICAgICAgIHBlcnNvbkNvdW50LmNsZWFyKCk7XG4gICAgICAgICAgcGVyc29uQ291bnQuc2VuZEtleXMoJzQnKTtcbiAgICAgICAgICBwZXJzb24xLmNsZWFyKCk7XG4gICAgICAgICAgcGVyc29uMS5zZW5kS2V5cygnRGknKTtcbiAgICAgICAgICBwZXJzb24yLmNsZWFyKCk7XG4gICAgICAgICAgcGVyc29uMi5zZW5kS2V5cygnVm9qdGEnKTtcbiAgICAgICAgICBleHBlY3Qod2l0aE9mZnNldC5nZXRUZXh0KCkpLnRvRXF1YWwoJ0RpLCBWb2p0YSBhbmQgMiBvdGhlciBwZW9wbGUgYXJlIHZpZXdpbmcuJyk7XG4gICAgICAgIH0pO1xuICAgICAgPC9maWxlPlxuICAgIDwvZXhhbXBsZT5cbiAqL1xudmFyIG5nUGx1cmFsaXplRGlyZWN0aXZlID0gWyckbG9jYWxlJywgJyRpbnRlcnBvbGF0ZScsIGZ1bmN0aW9uKCRsb2NhbGUsICRpbnRlcnBvbGF0ZSkge1xuICB2YXIgQlJBQ0UgPSAve30vZztcbiAgcmV0dXJuIHtcbiAgICByZXN0cmljdDogJ0VBJyxcbiAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikge1xuICAgICAgdmFyIG51bWJlckV4cCA9IGF0dHIuY291bnQsXG4gICAgICAgICAgd2hlbkV4cCA9IGF0dHIuJGF0dHIud2hlbiAmJiBlbGVtZW50LmF0dHIoYXR0ci4kYXR0ci53aGVuKSwgLy8gd2UgaGF2ZSB7e319IGluIGF0dHJzXG4gICAgICAgICAgb2Zmc2V0ID0gYXR0ci5vZmZzZXQgfHwgMCxcbiAgICAgICAgICB3aGVucyA9IHNjb3BlLiRldmFsKHdoZW5FeHApIHx8IHt9LFxuICAgICAgICAgIHdoZW5zRXhwRm5zID0ge30sXG4gICAgICAgICAgc3RhcnRTeW1ib2wgPSAkaW50ZXJwb2xhdGUuc3RhcnRTeW1ib2woKSxcbiAgICAgICAgICBlbmRTeW1ib2wgPSAkaW50ZXJwb2xhdGUuZW5kU3ltYm9sKCksXG4gICAgICAgICAgaXNXaGVuID0gL153aGVuKE1pbnVzKT8oLispJC87XG5cbiAgICAgIGZvckVhY2goYXR0ciwgZnVuY3Rpb24oZXhwcmVzc2lvbiwgYXR0cmlidXRlTmFtZSkge1xuICAgICAgICBpZiAoaXNXaGVuLnRlc3QoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgICB3aGVuc1tsb3dlcmNhc2UoYXR0cmlidXRlTmFtZS5yZXBsYWNlKCd3aGVuJywgJycpLnJlcGxhY2UoJ01pbnVzJywgJy0nKSldID1cbiAgICAgICAgICAgIGVsZW1lbnQuYXR0cihhdHRyLiRhdHRyW2F0dHJpYnV0ZU5hbWVdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmb3JFYWNoKHdoZW5zLCBmdW5jdGlvbihleHByZXNzaW9uLCBrZXkpIHtcbiAgICAgICAgd2hlbnNFeHBGbnNba2V5XSA9XG4gICAgICAgICAgJGludGVycG9sYXRlKGV4cHJlc3Npb24ucmVwbGFjZShCUkFDRSwgc3RhcnRTeW1ib2wgKyBudW1iZXJFeHAgKyAnLScgK1xuICAgICAgICAgICAgb2Zmc2V0ICsgZW5kU3ltYm9sKSk7XG4gICAgICB9KTtcblxuICAgICAgc2NvcGUuJHdhdGNoKGZ1bmN0aW9uIG5nUGx1cmFsaXplV2F0Y2goKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnNlRmxvYXQoc2NvcGUuJGV2YWwobnVtYmVyRXhwKSk7XG5cbiAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAvL2lmIGV4cGxpY2l0IG51bWJlciBydWxlIHN1Y2ggYXMgMSwgMiwgMy4uLiBpcyBkZWZpbmVkLCBqdXN0IHVzZSBpdC4gT3RoZXJ3aXNlLFxuICAgICAgICAgIC8vY2hlY2sgaXQgYWdhaW5zdCBwbHVyYWxpemF0aW9uIHJ1bGVzIGluICRsb2NhbGUgc2VydmljZVxuICAgICAgICAgIGlmICghKHZhbHVlIGluIHdoZW5zKSkgdmFsdWUgPSAkbG9jYWxlLnBsdXJhbENhdCh2YWx1ZSAtIG9mZnNldCk7XG4gICAgICAgICAgIHJldHVybiB3aGVuc0V4cEZuc1t2YWx1ZV0oc2NvcGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgfSwgZnVuY3Rpb24gbmdQbHVyYWxpemVXYXRjaEFjdGlvbihuZXdWYWwpIHtcbiAgICAgICAgZWxlbWVudC50ZXh0KG5ld1ZhbCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XTtcblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ1JlcGVhdFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIGBuZ1JlcGVhdGAgZGlyZWN0aXZlIGluc3RhbnRpYXRlcyBhIHRlbXBsYXRlIG9uY2UgcGVyIGl0ZW0gZnJvbSBhIGNvbGxlY3Rpb24uIEVhY2ggdGVtcGxhdGVcbiAqIGluc3RhbmNlIGdldHMgaXRzIG93biBzY29wZSwgd2hlcmUgdGhlIGdpdmVuIGxvb3AgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGNvbGxlY3Rpb24gaXRlbSxcbiAqIGFuZCBgJGluZGV4YCBpcyBzZXQgdG8gdGhlIGl0ZW0gaW5kZXggb3Iga2V5LlxuICpcbiAqIFNwZWNpYWwgcHJvcGVydGllcyBhcmUgZXhwb3NlZCBvbiB0aGUgbG9jYWwgc2NvcGUgb2YgZWFjaCB0ZW1wbGF0ZSBpbnN0YW5jZSwgaW5jbHVkaW5nOlxuICpcbiAqIHwgVmFyaWFibGUgIHwgVHlwZSAgICAgICAgICAgIHwgRGV0YWlscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgYCRpbmRleGAgIHwge0B0eXBlIG51bWJlcn0gIHwgaXRlcmF0b3Igb2Zmc2V0IG9mIHRoZSByZXBlYXRlZCBlbGVtZW50ICgwLi5sZW5ndGgtMSkgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYCRmaXJzdGAgIHwge0B0eXBlIGJvb2xlYW59IHwgdHJ1ZSBpZiB0aGUgcmVwZWF0ZWQgZWxlbWVudCBpcyBmaXJzdCBpbiB0aGUgaXRlcmF0b3IuICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYCRtaWRkbGVgIHwge0B0eXBlIGJvb2xlYW59IHwgdHJ1ZSBpZiB0aGUgcmVwZWF0ZWQgZWxlbWVudCBpcyBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgbGFzdCBpbiB0aGUgaXRlcmF0b3IuIHxcbiAqIHwgYCRsYXN0YCAgIHwge0B0eXBlIGJvb2xlYW59IHwgdHJ1ZSBpZiB0aGUgcmVwZWF0ZWQgZWxlbWVudCBpcyBsYXN0IGluIHRoZSBpdGVyYXRvci4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYCRldmVuYCAgIHwge0B0eXBlIGJvb2xlYW59IHwgdHJ1ZSBpZiB0aGUgaXRlcmF0b3IgcG9zaXRpb24gYCRpbmRleGAgaXMgZXZlbiAob3RoZXJ3aXNlIGZhbHNlKS4gICAgICAgICAgIHxcbiAqIHwgYCRvZGRgICAgIHwge0B0eXBlIGJvb2xlYW59IHwgdHJ1ZSBpZiB0aGUgaXRlcmF0b3IgcG9zaXRpb24gYCRpbmRleGAgaXMgb2RkIChvdGhlcndpc2UgZmFsc2UpLiAgICAgICAgICAgIHxcbiAqXG4gKiBDcmVhdGluZyBhbGlhc2VzIGZvciB0aGVzZSBwcm9wZXJ0aWVzIGlzIHBvc3NpYmxlIHdpdGgge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0luaXQgYG5nSW5pdGB9LlxuICogVGhpcyBtYXkgYmUgdXNlZnVsIHdoZW4sIGZvciBpbnN0YW5jZSwgbmVzdGluZyBuZ1JlcGVhdHMuXG4gKlxuICogIyBTcGVjaWFsIHJlcGVhdCBzdGFydCBhbmQgZW5kIHBvaW50c1xuICogVG8gcmVwZWF0IGEgc2VyaWVzIG9mIGVsZW1lbnRzIGluc3RlYWQgb2YganVzdCBvbmUgcGFyZW50IGVsZW1lbnQsIG5nUmVwZWF0IChhcyB3ZWxsIGFzIG90aGVyIG5nIGRpcmVjdGl2ZXMpIHN1cHBvcnRzIGV4dGVuZGluZ1xuICogdGhlIHJhbmdlIG9mIHRoZSByZXBlYXRlciBieSBkZWZpbmluZyBleHBsaWNpdCBzdGFydCBhbmQgZW5kIHBvaW50cyBieSB1c2luZyAqKm5nLXJlcGVhdC1zdGFydCoqIGFuZCAqKm5nLXJlcGVhdC1lbmQqKiByZXNwZWN0aXZlbHkuXG4gKiBUaGUgKipuZy1yZXBlYXQtc3RhcnQqKiBkaXJlY3RpdmUgd29ya3MgdGhlIHNhbWUgYXMgKipuZy1yZXBlYXQqKiwgYnV0IHdpbGwgcmVwZWF0IGFsbCB0aGUgSFRNTCBjb2RlIChpbmNsdWRpbmcgdGhlIHRhZyBpdCdzIGRlZmluZWQgb24pXG4gKiB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBlbmRpbmcgSFRNTCB0YWcgd2hlcmUgKipuZy1yZXBlYXQtZW5kKiogaXMgcGxhY2VkLlxuICpcbiAqIFRoZSBleGFtcGxlIGJlbG93IG1ha2VzIHVzZSBvZiB0aGlzIGZlYXR1cmU6XG4gKiBgYGBodG1sXG4gKiAgIDxoZWFkZXIgbmctcmVwZWF0LXN0YXJ0PVwiaXRlbSBpbiBpdGVtc1wiPlxuICogICAgIEhlYWRlciB7eyBpdGVtIH19XG4gKiAgIDwvaGVhZGVyPlxuICogICA8ZGl2IGNsYXNzPVwiYm9keVwiPlxuICogICAgIEJvZHkge3sgaXRlbSB9fVxuICogICA8L2Rpdj5cbiAqICAgPGZvb3RlciBuZy1yZXBlYXQtZW5kPlxuICogICAgIEZvb3RlciB7eyBpdGVtIH19XG4gKiAgIDwvZm9vdGVyPlxuICogYGBgXG4gKlxuICogQW5kIHdpdGggYW4gaW5wdXQgb2Yge0B0eXBlIFsnQScsJ0InXX0gZm9yIHRoZSBpdGVtcyB2YXJpYWJsZSBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlIG91dHB1dCB3aWxsIGV2YWx1YXRlIHRvOlxuICogYGBgaHRtbFxuICogICA8aGVhZGVyPlxuICogICAgIEhlYWRlciBBXG4gKiAgIDwvaGVhZGVyPlxuICogICA8ZGl2IGNsYXNzPVwiYm9keVwiPlxuICogICAgIEJvZHkgQVxuICogICA8L2Rpdj5cbiAqICAgPGZvb3Rlcj5cbiAqICAgICBGb290ZXIgQVxuICogICA8L2Zvb3Rlcj5cbiAqICAgPGhlYWRlcj5cbiAqICAgICBIZWFkZXIgQlxuICogICA8L2hlYWRlcj5cbiAqICAgPGRpdiBjbGFzcz1cImJvZHlcIj5cbiAqICAgICBCb2R5IEJcbiAqICAgPC9kaXY+XG4gKiAgIDxmb290ZXI+XG4gKiAgICAgRm9vdGVyIEJcbiAqICAgPC9mb290ZXI+XG4gKiBgYGBcbiAqXG4gKiBUaGUgY3VzdG9tIHN0YXJ0IGFuZCBlbmQgcG9pbnRzIGZvciBuZ1JlcGVhdCBhbHNvIHN1cHBvcnQgYWxsIG90aGVyIEhUTUwgZGlyZWN0aXZlIHN5bnRheCBmbGF2b3JzIHByb3ZpZGVkIGluIEFuZ3VsYXJKUyAoc3VjaFxuICogYXMgKipkYXRhLW5nLXJlcGVhdC1zdGFydCoqLCAqKngtbmctcmVwZWF0LXN0YXJ0KiogYW5kICoqbmc6cmVwZWF0LXN0YXJ0KiopLlxuICpcbiAqIEBhbmltYXRpb25zXG4gKiAqKi5lbnRlcioqIC0gd2hlbiBhIG5ldyBpdGVtIGlzIGFkZGVkIHRvIHRoZSBsaXN0IG9yIHdoZW4gYW4gaXRlbSBpcyByZXZlYWxlZCBhZnRlciBhIGZpbHRlclxuICpcbiAqICoqLmxlYXZlKiogLSB3aGVuIGFuIGl0ZW0gaXMgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IG9yIHdoZW4gYW4gaXRlbSBpcyBmaWx0ZXJlZCBvdXRcbiAqXG4gKiAqKi5tb3ZlKiogLSB3aGVuIGFuIGFkamFjZW50IGl0ZW0gaXMgZmlsdGVyZWQgb3V0IGNhdXNpbmcgYSByZW9yZGVyIG9yIHdoZW4gdGhlIGl0ZW0gY29udGVudHMgYXJlIHJlb3JkZXJlZFxuICpcbiAqIEBlbGVtZW50IEFOWVxuICogQHNjb3BlXG4gKiBAcHJpb3JpdHkgMTAwMFxuICogQHBhcmFtIHtyZXBlYXRfZXhwcmVzc2lvbn0gbmdSZXBlYXQgVGhlIGV4cHJlc3Npb24gaW5kaWNhdGluZyBob3cgdG8gZW51bWVyYXRlIGEgY29sbGVjdGlvbi4gVGhlc2VcbiAqICAgZm9ybWF0cyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDpcbiAqXG4gKiAgICogYHZhcmlhYmxlIGluIGV4cHJlc3Npb25gIOKAkyB3aGVyZSB2YXJpYWJsZSBpcyB0aGUgdXNlciBkZWZpbmVkIGxvb3AgdmFyaWFibGUgYW5kIGBleHByZXNzaW9uYFxuICogICAgIGlzIGEgc2NvcGUgZXhwcmVzc2lvbiBnaXZpbmcgdGhlIGNvbGxlY3Rpb24gdG8gZW51bWVyYXRlLlxuICpcbiAqICAgICBGb3IgZXhhbXBsZTogYGFsYnVtIGluIGFydGlzdC5hbGJ1bXNgLlxuICpcbiAqICAgKiBgKGtleSwgdmFsdWUpIGluIGV4cHJlc3Npb25gIOKAkyB3aGVyZSBga2V5YCBhbmQgYHZhbHVlYCBjYW4gYmUgYW55IHVzZXIgZGVmaW5lZCBpZGVudGlmaWVycyxcbiAqICAgICBhbmQgYGV4cHJlc3Npb25gIGlzIHRoZSBzY29wZSBleHByZXNzaW9uIGdpdmluZyB0aGUgY29sbGVjdGlvbiB0byBlbnVtZXJhdGUuXG4gKlxuICogICAgIEZvciBleGFtcGxlOiBgKG5hbWUsIGFnZSkgaW4geydhZGFtJzoxMCwgJ2FtYWxpZSc6MTJ9YC5cbiAqXG4gKiAgICogYHZhcmlhYmxlIGluIGV4cHJlc3Npb24gdHJhY2sgYnkgdHJhY2tpbmdfZXhwcmVzc2lvbmAg4oCTIFlvdSBjYW4gYWxzbyBwcm92aWRlIGFuIG9wdGlvbmFsIHRyYWNraW5nIGZ1bmN0aW9uXG4gKiAgICAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYXNzb2NpYXRlIHRoZSBvYmplY3RzIGluIHRoZSBjb2xsZWN0aW9uIHdpdGggdGhlIERPTSBlbGVtZW50cy4gSWYgbm8gdHJhY2tpbmcgZnVuY3Rpb25cbiAqICAgICBpcyBzcGVjaWZpZWQgdGhlIG5nLXJlcGVhdCBhc3NvY2lhdGVzIGVsZW1lbnRzIGJ5IGlkZW50aXR5IGluIHRoZSBjb2xsZWN0aW9uLiBJdCBpcyBhbiBlcnJvciB0byBoYXZlXG4gKiAgICAgbW9yZSB0aGFuIG9uZSB0cmFja2luZyBmdW5jdGlvbiB0byByZXNvbHZlIHRvIHRoZSBzYW1lIGtleS4gKFRoaXMgd291bGQgbWVhbiB0aGF0IHR3byBkaXN0aW5jdCBvYmplY3RzIGFyZVxuICogICAgIG1hcHBlZCB0byB0aGUgc2FtZSBET00gZWxlbWVudCwgd2hpY2ggaXMgbm90IHBvc3NpYmxlLikgIEZpbHRlcnMgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIGV4cHJlc3Npb24sXG4gKiAgICAgYmVmb3JlIHNwZWNpZnlpbmcgYSB0cmFja2luZyBleHByZXNzaW9uLlxuICpcbiAqICAgICBGb3IgZXhhbXBsZTogYGl0ZW0gaW4gaXRlbXNgIGlzIGVxdWl2YWxlbnQgdG8gYGl0ZW0gaW4gaXRlbXMgdHJhY2sgYnkgJGlkKGl0ZW0pYC4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIERPTSBlbGVtZW50c1xuICogICAgIHdpbGwgYmUgYXNzb2NpYXRlZCBieSBpdGVtIGlkZW50aXR5IGluIHRoZSBhcnJheS5cbiAqXG4gKiAgICAgRm9yIGV4YW1wbGU6IGBpdGVtIGluIGl0ZW1zIHRyYWNrIGJ5ICRpZChpdGVtKWAuIEEgYnVpbHQgaW4gYCRpZCgpYCBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBhc3NpZ24gYSB1bmlxdWVcbiAqICAgICBgJCRoYXNoS2V5YCBwcm9wZXJ0eSB0byBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5LiBUaGlzIHByb3BlcnR5IGlzIHRoZW4gdXNlZCBhcyBhIGtleSB0byBhc3NvY2lhdGVkIERPTSBlbGVtZW50c1xuICogICAgIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaXRlbSBpbiB0aGUgYXJyYXkgYnkgaWRlbnRpdHkuIE1vdmluZyB0aGUgc2FtZSBvYmplY3QgaW4gYXJyYXkgd291bGQgbW92ZSB0aGUgRE9NXG4gKiAgICAgZWxlbWVudCBpbiB0aGUgc2FtZSB3YXkgaW4gdGhlIERPTS5cbiAqXG4gKiAgICAgRm9yIGV4YW1wbGU6IGBpdGVtIGluIGl0ZW1zIHRyYWNrIGJ5IGl0ZW0uaWRgIGlzIGEgdHlwaWNhbCBwYXR0ZXJuIHdoZW4gdGhlIGl0ZW1zIGNvbWUgZnJvbSB0aGUgZGF0YWJhc2UuIEluIHRoaXNcbiAqICAgICBjYXNlIHRoZSBvYmplY3QgaWRlbnRpdHkgZG9lcyBub3QgbWF0dGVyLiBUd28gb2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IGFzIGxvbmcgYXMgdGhlaXIgYGlkYFxuICogICAgIHByb3BlcnR5IGlzIHNhbWUuXG4gKlxuICogICAgIEZvciBleGFtcGxlOiBgaXRlbSBpbiBpdGVtcyB8IGZpbHRlcjpzZWFyY2hUZXh0IHRyYWNrIGJ5IGl0ZW0uaWRgIGlzIGEgcGF0dGVybiB0aGF0IG1pZ2h0IGJlIHVzZWQgdG8gYXBwbHkgYSBmaWx0ZXJcbiAqICAgICB0byBpdGVtcyBpbiBjb25qdW5jdGlvbiB3aXRoIGEgdHJhY2tpbmcgZXhwcmVzc2lvbi5cbiAqXG4gKiAgICogYHZhcmlhYmxlIGluIGV4cHJlc3Npb24gYXMgYWxpYXNfZXhwcmVzc2lvbmAg4oCTIFlvdSBjYW4gYWxzbyBwcm92aWRlIGFuIG9wdGlvbmFsIGFsaWFzIGV4cHJlc3Npb24gd2hpY2ggd2lsbCB0aGVuIHN0b3JlIHRoZVxuICogICAgIGludGVybWVkaWF0ZSByZXN1bHRzIG9mIHRoZSByZXBlYXRlciBhZnRlciB0aGUgZmlsdGVycyBoYXZlIGJlZW4gYXBwbGllZC4gVHlwaWNhbGx5IHRoaXMgaXMgdXNlZCB0byByZW5kZXIgYSBzcGVjaWFsIG1lc3NhZ2VcbiAqICAgICB3aGVuIGEgZmlsdGVyIGlzIGFjdGl2ZSBvbiB0aGUgcmVwZWF0ZXIsIGJ1dCB0aGUgZmlsdGVyZWQgcmVzdWx0IHNldCBpcyBlbXB0eS5cbiAqXG4gKiAgICAgRm9yIGV4YW1wbGU6IGBpdGVtIGluIGl0ZW1zIHwgZmlsdGVyOnggYXMgcmVzdWx0c2Agd2lsbCBzdG9yZSB0aGUgZnJhZ21lbnQgb2YgdGhlIHJlcGVhdGVkIGl0ZW1zIGFzIGByZXN1bHRzYCwgYnV0IG9ubHkgYWZ0ZXJcbiAqICAgICB0aGUgaXRlbXMgaGF2ZSBiZWVuIHByb2Nlc3NlZCB0aHJvdWdoIHRoZSBmaWx0ZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIFRoaXMgZXhhbXBsZSBpbml0aWFsaXplcyB0aGUgc2NvcGUgdG8gYSBsaXN0IG9mIG5hbWVzIGFuZFxuICogdGhlbiB1c2VzIGBuZ1JlcGVhdGAgdG8gZGlzcGxheSBldmVyeSBwZXJzb246XG4gIDxleGFtcGxlIG1vZHVsZT1cIm5nQW5pbWF0ZVwiIGRlcHM9XCJhbmd1bGFyLWFuaW1hdGUuanNcIiBhbmltYXRpb25zPVwidHJ1ZVwiPlxuICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICA8ZGl2IG5nLWluaXQ9XCJmcmllbmRzID0gW1xuICAgICAgICB7bmFtZTonSm9obicsIGFnZToyNSwgZ2VuZGVyOidib3knfSxcbiAgICAgICAge25hbWU6J0plc3NpZScsIGFnZTozMCwgZ2VuZGVyOidnaXJsJ30sXG4gICAgICAgIHtuYW1lOidKb2hhbm5hJywgYWdlOjI4LCBnZW5kZXI6J2dpcmwnfSxcbiAgICAgICAge25hbWU6J0pveScsIGFnZToxNSwgZ2VuZGVyOidnaXJsJ30sXG4gICAgICAgIHtuYW1lOidNYXJ5JywgYWdlOjI4LCBnZW5kZXI6J2dpcmwnfSxcbiAgICAgICAge25hbWU6J1BldGVyJywgYWdlOjk1LCBnZW5kZXI6J2JveSd9LFxuICAgICAgICB7bmFtZTonU2ViYXN0aWFuJywgYWdlOjUwLCBnZW5kZXI6J2JveSd9LFxuICAgICAgICB7bmFtZTonRXJpa2EnLCBhZ2U6MjcsIGdlbmRlcjonZ2lybCd9LFxuICAgICAgICB7bmFtZTonUGF0cmljaycsIGFnZTo0MCwgZ2VuZGVyOidib3knfSxcbiAgICAgICAge25hbWU6J1NhbWFudGhhJywgYWdlOjYwLCBnZW5kZXI6J2dpcmwnfVxuICAgICAgXVwiPlxuICAgICAgICBJIGhhdmUge3tmcmllbmRzLmxlbmd0aH19IGZyaWVuZHMuIFRoZXkgYXJlOlxuICAgICAgICA8aW5wdXQgdHlwZT1cInNlYXJjaFwiIG5nLW1vZGVsPVwicVwiIHBsYWNlaG9sZGVyPVwiZmlsdGVyIGZyaWVuZHMuLi5cIiAvPlxuICAgICAgICA8dWwgY2xhc3M9XCJleGFtcGxlLWFuaW1hdGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgPGxpIGNsYXNzPVwiYW5pbWF0ZS1yZXBlYXRcIiBuZy1yZXBlYXQ9XCJmcmllbmQgaW4gZnJpZW5kcyB8IGZpbHRlcjpxIGFzIHJlc3VsdHNcIj5cbiAgICAgICAgICAgIFt7eyRpbmRleCArIDF9fV0ge3tmcmllbmQubmFtZX19IHdobyBpcyB7e2ZyaWVuZC5hZ2V9fSB5ZWFycyBvbGQuXG4gICAgICAgICAgPC9saT5cbiAgICAgICAgICA8bGkgY2xhc3M9XCJhbmltYXRlLXJlcGVhdFwiIG5nLWlmPVwicmVzdWx0cy5sZW5ndGggPT0gMFwiPlxuICAgICAgICAgICAgPHN0cm9uZz5ObyByZXN1bHRzIGZvdW5kLi4uPC9zdHJvbmc+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZmlsZT5cbiAgICA8ZmlsZSBuYW1lPVwiYW5pbWF0aW9ucy5jc3NcIj5cbiAgICAgIC5leGFtcGxlLWFuaW1hdGUtY29udGFpbmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDp3aGl0ZTtcbiAgICAgICAgYm9yZGVyOjFweCBzb2xpZCBibGFjaztcbiAgICAgICAgbGlzdC1zdHlsZTpub25lO1xuICAgICAgICBtYXJnaW46MDtcbiAgICAgICAgcGFkZGluZzowIDEwcHg7XG4gICAgICB9XG5cbiAgICAgIC5hbmltYXRlLXJlcGVhdCB7XG4gICAgICAgIGxpbmUtaGVpZ2h0OjQwcHg7XG4gICAgICAgIGxpc3Qtc3R5bGU6bm9uZTtcbiAgICAgICAgYm94LXNpemluZzpib3JkZXItYm94O1xuICAgICAgfVxuXG4gICAgICAuYW5pbWF0ZS1yZXBlYXQubmctbW92ZSxcbiAgICAgIC5hbmltYXRlLXJlcGVhdC5uZy1lbnRlcixcbiAgICAgIC5hbmltYXRlLXJlcGVhdC5uZy1sZWF2ZSB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjphbGwgbGluZWFyIDAuNXM7XG4gICAgICAgIHRyYW5zaXRpb246YWxsIGxpbmVhciAwLjVzO1xuICAgICAgfVxuXG4gICAgICAuYW5pbWF0ZS1yZXBlYXQubmctbGVhdmUubmctbGVhdmUtYWN0aXZlLFxuICAgICAgLmFuaW1hdGUtcmVwZWF0Lm5nLW1vdmUsXG4gICAgICAuYW5pbWF0ZS1yZXBlYXQubmctZW50ZXIge1xuICAgICAgICBvcGFjaXR5OjA7XG4gICAgICAgIG1heC1oZWlnaHQ6MDtcbiAgICAgIH1cblxuICAgICAgLmFuaW1hdGUtcmVwZWF0Lm5nLWxlYXZlLFxuICAgICAgLmFuaW1hdGUtcmVwZWF0Lm5nLW1vdmUubmctbW92ZS1hY3RpdmUsXG4gICAgICAuYW5pbWF0ZS1yZXBlYXQubmctZW50ZXIubmctZW50ZXItYWN0aXZlIHtcbiAgICAgICAgb3BhY2l0eToxO1xuICAgICAgICBtYXgtaGVpZ2h0OjQwcHg7XG4gICAgICB9XG4gICAgPC9maWxlPlxuICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cbiAgICAgIHZhciBmcmllbmRzID0gZWxlbWVudC5hbGwoYnkucmVwZWF0ZXIoJ2ZyaWVuZCBpbiBmcmllbmRzJykpO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlbmRlciBpbml0aWFsIGRhdGEgc2V0JywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGV4cGVjdChmcmllbmRzLmNvdW50KCkpLnRvQmUoMTApO1xuICAgICAgICBleHBlY3QoZnJpZW5kcy5nZXQoMCkuZ2V0VGV4dCgpKS50b0VxdWFsKCdbMV0gSm9obiB3aG8gaXMgMjUgeWVhcnMgb2xkLicpO1xuICAgICAgICBleHBlY3QoZnJpZW5kcy5nZXQoMSkuZ2V0VGV4dCgpKS50b0VxdWFsKCdbMl0gSmVzc2llIHdobyBpcyAzMCB5ZWFycyBvbGQuJyk7XG4gICAgICAgIGV4cGVjdChmcmllbmRzLmxhc3QoKS5nZXRUZXh0KCkpLnRvRXF1YWwoJ1sxMF0gU2FtYW50aGEgd2hvIGlzIDYwIHllYXJzIG9sZC4nKTtcbiAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygnZnJpZW5kcy5sZW5ndGgnKSkuZ2V0VGV4dCgpKVxuICAgICAgICAgICAgLnRvTWF0Y2goXCJJIGhhdmUgMTAgZnJpZW5kcy4gVGhleSBhcmU6XCIpO1xuICAgICAgfSk7XG5cbiAgICAgICBpdCgnc2hvdWxkIHVwZGF0ZSByZXBlYXRlciB3aGVuIGZpbHRlciBwcmVkaWNhdGUgY2hhbmdlcycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgZXhwZWN0KGZyaWVuZHMuY291bnQoKSkudG9CZSgxMCk7XG5cbiAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3EnKSkuc2VuZEtleXMoJ21hJyk7XG5cbiAgICAgICAgIGV4cGVjdChmcmllbmRzLmNvdW50KCkpLnRvQmUoMik7XG4gICAgICAgICBleHBlY3QoZnJpZW5kcy5nZXQoMCkuZ2V0VGV4dCgpKS50b0VxdWFsKCdbMV0gTWFyeSB3aG8gaXMgMjggeWVhcnMgb2xkLicpO1xuICAgICAgICAgZXhwZWN0KGZyaWVuZHMubGFzdCgpLmdldFRleHQoKSkudG9FcXVhbCgnWzJdIFNhbWFudGhhIHdobyBpcyA2MCB5ZWFycyBvbGQuJyk7XG4gICAgICAgfSk7XG4gICAgICA8L2ZpbGU+XG4gICAgPC9leGFtcGxlPlxuICovXG52YXIgbmdSZXBlYXREaXJlY3RpdmUgPSBbJyRwYXJzZScsICckYW5pbWF0ZScsIGZ1bmN0aW9uKCRwYXJzZSwgJGFuaW1hdGUpIHtcbiAgdmFyIE5HX1JFTU9WRUQgPSAnJCROR19SRU1PVkVEJztcbiAgdmFyIG5nUmVwZWF0TWluRXJyID0gbWluRXJyKCduZ1JlcGVhdCcpO1xuXG4gIHZhciB1cGRhdGVTY29wZSA9IGZ1bmN0aW9uKHNjb3BlLCBpbmRleCwgdmFsdWVJZGVudGlmaWVyLCB2YWx1ZSwga2V5SWRlbnRpZmllciwga2V5LCBhcnJheUxlbmd0aCkge1xuICAgIC8vIFRPRE8ocGVyZik6IGdlbmVyYXRlIHNldHRlcnMgdG8gc2hhdmUgb2ZmIH40MG1zIG9yIDEtMS41JVxuICAgIHNjb3BlW3ZhbHVlSWRlbnRpZmllcl0gPSB2YWx1ZTtcbiAgICBpZiAoa2V5SWRlbnRpZmllcikgc2NvcGVba2V5SWRlbnRpZmllcl0gPSBrZXk7XG4gICAgc2NvcGUuJGluZGV4ID0gaW5kZXg7XG4gICAgc2NvcGUuJGZpcnN0ID0gKGluZGV4ID09PSAwKTtcbiAgICBzY29wZS4kbGFzdCA9IChpbmRleCA9PT0gKGFycmF5TGVuZ3RoIC0gMSkpO1xuICAgIHNjb3BlLiRtaWRkbGUgPSAhKHNjb3BlLiRmaXJzdCB8fCBzY29wZS4kbGFzdCk7XG4gICAgLy8ganNoaW50IGJpdHdpc2U6IGZhbHNlXG4gICAgc2NvcGUuJG9kZCA9ICEoc2NvcGUuJGV2ZW4gPSAoaW5kZXgmMSkgPT09IDApO1xuICAgIC8vIGpzaGludCBiaXR3aXNlOiB0cnVlXG4gIH07XG5cbiAgdmFyIGdldEJsb2NrU3RhcnQgPSBmdW5jdGlvbihibG9jaykge1xuICAgIHJldHVybiBibG9jay5jbG9uZVswXTtcbiAgfTtcblxuICB2YXIgZ2V0QmxvY2tFbmQgPSBmdW5jdGlvbihibG9jaykge1xuICAgIHJldHVybiBibG9jay5jbG9uZVtibG9jay5jbG9uZS5sZW5ndGggLSAxXTtcbiAgfTtcblxuXG4gIHJldHVybiB7XG4gICAgcmVzdHJpY3Q6ICdBJyxcbiAgICBtdWx0RWxlbWVudDogdHJ1ZSxcbiAgICB0cmFuc2NsdWRlOiAnZWxlbWVudCcsXG4gICAgcHJpb3JpdHk6IDEwMDAsXG4gICAgdGVybWluYWw6IHRydWUsXG4gICAgJCR0bGI6IHRydWUsXG4gICAgY29tcGlsZTogZnVuY3Rpb24gbmdSZXBlYXRDb21waWxlKCRlbGVtZW50LCAkYXR0cikge1xuICAgICAgdmFyIGV4cHJlc3Npb24gPSAkYXR0ci5uZ1JlcGVhdDtcbiAgICAgIHZhciBuZ1JlcGVhdEVuZENvbW1lbnQgPSBkb2N1bWVudC5jcmVhdGVDb21tZW50KCcgZW5kIG5nUmVwZWF0OiAnICsgZXhwcmVzc2lvbiArICcgJyk7XG5cbiAgICAgIHZhciBtYXRjaCA9IGV4cHJlc3Npb24ubWF0Y2goL15cXHMqKFtcXHNcXFNdKz8pXFxzK2luXFxzKyhbXFxzXFxTXSs/KSg/Olxccythc1xccysoW1xcc1xcU10rPykpPyg/Olxccyt0cmFja1xccytieVxccysoW1xcc1xcU10rPykpP1xccyokLyk7XG5cbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhyb3cgbmdSZXBlYXRNaW5FcnIoJ2lleHAnLCBcIkV4cGVjdGVkIGV4cHJlc3Npb24gaW4gZm9ybSBvZiAnX2l0ZW1fIGluIF9jb2xsZWN0aW9uX1sgdHJhY2sgYnkgX2lkX10nIGJ1dCBnb3QgJ3swfScuXCIsXG4gICAgICAgICAgICBleHByZXNzaW9uKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxocyA9IG1hdGNoWzFdO1xuICAgICAgdmFyIHJocyA9IG1hdGNoWzJdO1xuICAgICAgdmFyIGFsaWFzQXMgPSBtYXRjaFszXTtcbiAgICAgIHZhciB0cmFja0J5RXhwID0gbWF0Y2hbNF07XG5cbiAgICAgIG1hdGNoID0gbGhzLm1hdGNoKC9eKD86KFtcXCRcXHddKyl8XFwoKFtcXCRcXHddKylcXHMqLFxccyooW1xcJFxcd10rKVxcKSkkLyk7XG5cbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhyb3cgbmdSZXBlYXRNaW5FcnIoJ2lpZGV4cCcsIFwiJ19pdGVtXycgaW4gJ19pdGVtXyBpbiBfY29sbGVjdGlvbl8nIHNob3VsZCBiZSBhbiBpZGVudGlmaWVyIG9yICcoX2tleV8sIF92YWx1ZV8pJyBleHByZXNzaW9uLCBidXQgZ290ICd7MH0nLlwiLFxuICAgICAgICAgICAgbGhzKTtcbiAgICAgIH1cbiAgICAgIHZhciB2YWx1ZUlkZW50aWZpZXIgPSBtYXRjaFszXSB8fCBtYXRjaFsxXTtcbiAgICAgIHZhciBrZXlJZGVudGlmaWVyID0gbWF0Y2hbMl07XG5cbiAgICAgIGlmIChhbGlhc0FzICYmICghL15bJGEtekEtWl9dWyRhLXpBLVowLTlfXSokLy50ZXN0KGFsaWFzQXMpIHx8XG4gICAgICAgICAgL14obnVsbHx1bmRlZmluZWR8dGhpc3xcXCRpbmRleHxcXCRmaXJzdHxcXCRtaWRkbGV8XFwkbGFzdHxcXCRldmVufFxcJG9kZHxcXCRwYXJlbnQpJC8udGVzdChhbGlhc0FzKSkpIHtcbiAgICAgICAgdGhyb3cgbmdSZXBlYXRNaW5FcnIoJ2JhZGlkZW50JywgXCJhbGlhcyAnezB9JyBpcyBpbnZhbGlkIC0tLSBtdXN0IGJlIGEgdmFsaWQgSlMgaWRlbnRpZmllciB3aGljaCBpcyBub3QgYSByZXNlcnZlZCBuYW1lLlwiLFxuICAgICAgICAgIGFsaWFzQXMpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdHJhY2tCeUV4cEdldHRlciwgdHJhY2tCeUlkRXhwRm4sIHRyYWNrQnlJZEFycmF5Rm4sIHRyYWNrQnlJZE9iakZuO1xuICAgICAgdmFyIGhhc2hGbkxvY2FscyA9IHskaWQ6IGhhc2hLZXl9O1xuXG4gICAgICBpZiAodHJhY2tCeUV4cCkge1xuICAgICAgICB0cmFja0J5RXhwR2V0dGVyID0gJHBhcnNlKHRyYWNrQnlFeHApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhY2tCeUlkQXJyYXlGbiA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gaGFzaEtleSh2YWx1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIHRyYWNrQnlJZE9iakZuID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5nUmVwZWF0TGluaygkc2NvcGUsICRlbGVtZW50LCAkYXR0ciwgY3RybCwgJHRyYW5zY2x1ZGUpIHtcblxuICAgICAgICBpZiAodHJhY2tCeUV4cEdldHRlcikge1xuICAgICAgICAgIHRyYWNrQnlJZEV4cEZuID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgICAgIC8vIGFzc2lnbiBrZXksIHZhbHVlLCBhbmQgJGluZGV4IHRvIHRoZSBsb2NhbHMgc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIGluIGhhc2ggZnVuY3Rpb25zXG4gICAgICAgICAgICBpZiAoa2V5SWRlbnRpZmllcikgaGFzaEZuTG9jYWxzW2tleUlkZW50aWZpZXJdID0ga2V5O1xuICAgICAgICAgICAgaGFzaEZuTG9jYWxzW3ZhbHVlSWRlbnRpZmllcl0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGhhc2hGbkxvY2Fscy4kaW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIHJldHVybiB0cmFja0J5RXhwR2V0dGVyKCRzY29wZSwgaGFzaEZuTG9jYWxzKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RvcmUgYSBsaXN0IG9mIGVsZW1lbnRzIGZyb20gcHJldmlvdXMgcnVuLiBUaGlzIGlzIGEgaGFzaCB3aGVyZSBrZXkgaXMgdGhlIGl0ZW0gZnJvbSB0aGVcbiAgICAgICAgLy8gaXRlcmF0b3IsIGFuZCB0aGUgdmFsdWUgaXMgb2JqZWN0cyB3aXRoIGZvbGxvd2luZyBwcm9wZXJ0aWVzLlxuICAgICAgICAvLyAgIC0gc2NvcGU6IGJvdW5kIHNjb3BlXG4gICAgICAgIC8vICAgLSBlbGVtZW50OiBwcmV2aW91cyBlbGVtZW50LlxuICAgICAgICAvLyAgIC0gaW5kZXg6IHBvc2l0aW9uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdlIGFyZSB1c2luZyBuby1wcm90byBvYmplY3Qgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGd1YXJkIGFnYWluc3QgaW5oZXJpdGVkIHByb3BzIHZpYVxuICAgICAgICAvLyBoYXNPd25Qcm9wZXJ0eS5cbiAgICAgICAgdmFyIGxhc3RCbG9ja01hcCA9IGNyZWF0ZU1hcCgpO1xuXG4gICAgICAgIC8vd2F0Y2ggcHJvcHNcbiAgICAgICAgJHNjb3BlLiR3YXRjaENvbGxlY3Rpb24ocmhzLCBmdW5jdGlvbiBuZ1JlcGVhdEFjdGlvbihjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgdmFyIGluZGV4LCBsZW5ndGgsXG4gICAgICAgICAgICAgIHByZXZpb3VzTm9kZSA9ICRlbGVtZW50WzBdLCAgICAgLy8gbm9kZSB0aGF0IGNsb25lZCBub2RlcyBzaG91bGQgYmUgaW5zZXJ0ZWQgYWZ0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplZCB0byB0aGUgY29tbWVudCBub2RlIGFuY2hvclxuICAgICAgICAgICAgICBuZXh0Tm9kZSxcbiAgICAgICAgICAgICAgLy8gU2FtZSBhcyBsYXN0QmxvY2tNYXAgYnV0IGl0IGhhcyB0aGUgY3VycmVudCBzdGF0ZS4gSXQgd2lsbCBiZWNvbWUgdGhlXG4gICAgICAgICAgICAgIC8vIGxhc3RCbG9ja01hcCBvbiB0aGUgbmV4dCBpdGVyYXRpb24uXG4gICAgICAgICAgICAgIG5leHRCbG9ja01hcCA9IGNyZWF0ZU1hcCgpLFxuICAgICAgICAgICAgICBjb2xsZWN0aW9uTGVuZ3RoLFxuICAgICAgICAgICAgICBrZXksIHZhbHVlLCAvLyBrZXkvdmFsdWUgb2YgaXRlcmF0aW9uXG4gICAgICAgICAgICAgIHRyYWNrQnlJZCxcbiAgICAgICAgICAgICAgdHJhY2tCeUlkRm4sXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25LZXlzLFxuICAgICAgICAgICAgICBibG9jaywgICAgICAgLy8gbGFzdCBvYmplY3QgaW5mb3JtYXRpb24ge3Njb3BlLCBlbGVtZW50LCBpZH1cbiAgICAgICAgICAgICAgbmV4dEJsb2NrT3JkZXIsXG4gICAgICAgICAgICAgIGVsZW1lbnRzVG9SZW1vdmU7XG5cbiAgICAgICAgICBpZiAoYWxpYXNBcykge1xuICAgICAgICAgICAgJHNjb3BlW2FsaWFzQXNdID0gY29sbGVjdGlvbjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25LZXlzID0gY29sbGVjdGlvbjtcbiAgICAgICAgICAgIHRyYWNrQnlJZEZuID0gdHJhY2tCeUlkRXhwRm4gfHwgdHJhY2tCeUlkQXJyYXlGbjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJhY2tCeUlkRm4gPSB0cmFja0J5SWRFeHBGbiB8fCB0cmFja0J5SWRPYmpGbjtcbiAgICAgICAgICAgIC8vIGlmIG9iamVjdCwgZXh0cmFjdCBrZXlzLCBzb3J0IHRoZW0gYW5kIHVzZSB0byBkZXRlcm1pbmUgb3JkZXIgb2YgaXRlcmF0aW9uIG92ZXIgb2JqIHByb3BzXG4gICAgICAgICAgICBjb2xsZWN0aW9uS2V5cyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaXRlbUtleSBpbiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uLmhhc093blByb3BlcnR5KGl0ZW1LZXkpICYmIGl0ZW1LZXkuY2hhckF0KDApICE9ICckJykge1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25LZXlzLnB1c2goaXRlbUtleSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbGxlY3Rpb25LZXlzLnNvcnQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb2xsZWN0aW9uTGVuZ3RoID0gY29sbGVjdGlvbktleXMubGVuZ3RoO1xuICAgICAgICAgIG5leHRCbG9ja09yZGVyID0gbmV3IEFycmF5KGNvbGxlY3Rpb25MZW5ndGgpO1xuXG4gICAgICAgICAgLy8gbG9jYXRlIGV4aXN0aW5nIGl0ZW1zXG4gICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY29sbGVjdGlvbkxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAga2V5ID0gKGNvbGxlY3Rpb24gPT09IGNvbGxlY3Rpb25LZXlzKSA/IGluZGV4IDogY29sbGVjdGlvbktleXNbaW5kZXhdO1xuICAgICAgICAgICAgdmFsdWUgPSBjb2xsZWN0aW9uW2tleV07XG4gICAgICAgICAgICB0cmFja0J5SWQgPSB0cmFja0J5SWRGbihrZXksIHZhbHVlLCBpbmRleCk7XG4gICAgICAgICAgICBpZiAobGFzdEJsb2NrTWFwW3RyYWNrQnlJZF0pIHtcbiAgICAgICAgICAgICAgLy8gZm91bmQgcHJldmlvdXNseSBzZWVuIGJsb2NrXG4gICAgICAgICAgICAgIGJsb2NrID0gbGFzdEJsb2NrTWFwW3RyYWNrQnlJZF07XG4gICAgICAgICAgICAgIGRlbGV0ZSBsYXN0QmxvY2tNYXBbdHJhY2tCeUlkXTtcbiAgICAgICAgICAgICAgbmV4dEJsb2NrTWFwW3RyYWNrQnlJZF0gPSBibG9jaztcbiAgICAgICAgICAgICAgbmV4dEJsb2NrT3JkZXJbaW5kZXhdID0gYmxvY2s7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5leHRCbG9ja01hcFt0cmFja0J5SWRdKSB7XG4gICAgICAgICAgICAgIC8vIGlmIGNvbGxpc2lvbiBkZXRlY3RlZC4gcmVzdG9yZSBsYXN0QmxvY2tNYXAgYW5kIHRocm93IGFuIGVycm9yXG4gICAgICAgICAgICAgIGZvckVhY2gobmV4dEJsb2NrT3JkZXIsIGZ1bmN0aW9uKGJsb2NrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJsb2NrICYmIGJsb2NrLnNjb3BlKSBsYXN0QmxvY2tNYXBbYmxvY2suaWRdID0gYmxvY2s7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aHJvdyBuZ1JlcGVhdE1pbkVycignZHVwZXMnLFxuICAgICAgICAgICAgICAgICAgXCJEdXBsaWNhdGVzIGluIGEgcmVwZWF0ZXIgYXJlIG5vdCBhbGxvd2VkLiBVc2UgJ3RyYWNrIGJ5JyBleHByZXNzaW9uIHRvIHNwZWNpZnkgdW5pcXVlIGtleXMuIFJlcGVhdGVyOiB7MH0sIER1cGxpY2F0ZSBrZXk6IHsxfSwgRHVwbGljYXRlIHZhbHVlOiB7Mn1cIixcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24sIHRyYWNrQnlJZCwgdmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gbmV3IG5ldmVyIGJlZm9yZSBzZWVuIGJsb2NrXG4gICAgICAgICAgICAgIG5leHRCbG9ja09yZGVyW2luZGV4XSA9IHtpZDogdHJhY2tCeUlkLCBzY29wZTogdW5kZWZpbmVkLCBjbG9uZTogdW5kZWZpbmVkfTtcbiAgICAgICAgICAgICAgbmV4dEJsb2NrTWFwW3RyYWNrQnlJZF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHJlbW92ZSBsZWZ0b3ZlciBpdGVtc1xuICAgICAgICAgIGZvciAodmFyIGJsb2NrS2V5IGluIGxhc3RCbG9ja01hcCkge1xuICAgICAgICAgICAgYmxvY2sgPSBsYXN0QmxvY2tNYXBbYmxvY2tLZXldO1xuICAgICAgICAgICAgZWxlbWVudHNUb1JlbW92ZSA9IGdldEJsb2NrTm9kZXMoYmxvY2suY2xvbmUpO1xuICAgICAgICAgICAgJGFuaW1hdGUubGVhdmUoZWxlbWVudHNUb1JlbW92ZSk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudHNUb1JlbW92ZVswXS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHRoZSBlbGVtZW50IHdhcyBub3QgcmVtb3ZlZCB5ZXQgYmVjYXVzZSBvZiBwZW5kaW5nIGFuaW1hdGlvbiwgbWFyayBpdCBhcyBkZWxldGVkXG4gICAgICAgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGlnbm9yZSBpdCBsYXRlclxuICAgICAgICAgICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gZWxlbWVudHNUb1JlbW92ZS5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHNUb1JlbW92ZVtpbmRleF1bTkdfUkVNT1ZFRF0gPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBibG9jay5zY29wZS4kZGVzdHJveSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHdlIGFyZSBub3QgdXNpbmcgZm9yRWFjaCBmb3IgcGVyZiByZWFzb25zICh0cnlpbmcgdG8gYXZvaWQgI2NhbGwpXG4gICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY29sbGVjdGlvbkxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAga2V5ID0gKGNvbGxlY3Rpb24gPT09IGNvbGxlY3Rpb25LZXlzKSA/IGluZGV4IDogY29sbGVjdGlvbktleXNbaW5kZXhdO1xuICAgICAgICAgICAgdmFsdWUgPSBjb2xsZWN0aW9uW2tleV07XG4gICAgICAgICAgICBibG9jayA9IG5leHRCbG9ja09yZGVyW2luZGV4XTtcblxuICAgICAgICAgICAgaWYgKGJsb2NrLnNjb3BlKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgYWxyZWFkeSBzZWVuIHRoaXMgb2JqZWN0LCB0aGVuIHdlIG5lZWQgdG8gcmV1c2UgdGhlXG4gICAgICAgICAgICAgIC8vIGFzc29jaWF0ZWQgc2NvcGUvZWxlbWVudFxuXG4gICAgICAgICAgICAgIG5leHROb2RlID0gcHJldmlvdXNOb2RlO1xuXG4gICAgICAgICAgICAgIC8vIHNraXAgbm9kZXMgdGhhdCBhcmUgYWxyZWFkeSBwZW5kaW5nIHJlbW92YWwgdmlhIGxlYXZlIGFuaW1hdGlvblxuICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgfSB3aGlsZSAobmV4dE5vZGUgJiYgbmV4dE5vZGVbTkdfUkVNT1ZFRF0pO1xuXG4gICAgICAgICAgICAgIGlmIChnZXRCbG9ja1N0YXJ0KGJsb2NrKSAhPSBuZXh0Tm9kZSkge1xuICAgICAgICAgICAgICAgIC8vIGV4aXN0aW5nIGl0ZW0gd2hpY2ggZ290IG1vdmVkXG4gICAgICAgICAgICAgICAgJGFuaW1hdGUubW92ZShnZXRCbG9ja05vZGVzKGJsb2NrLmNsb25lKSwgbnVsbCwganFMaXRlKHByZXZpb3VzTm9kZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHByZXZpb3VzTm9kZSA9IGdldEJsb2NrRW5kKGJsb2NrKTtcbiAgICAgICAgICAgICAgdXBkYXRlU2NvcGUoYmxvY2suc2NvcGUsIGluZGV4LCB2YWx1ZUlkZW50aWZpZXIsIHZhbHVlLCBrZXlJZGVudGlmaWVyLCBrZXksIGNvbGxlY3Rpb25MZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gbmV3IGl0ZW0gd2hpY2ggd2UgZG9uJ3Qga25vdyBhYm91dFxuICAgICAgICAgICAgICAkdHJhbnNjbHVkZShmdW5jdGlvbiBuZ1JlcGVhdFRyYW5zY2x1ZGUoY2xvbmUsIHNjb3BlKSB7XG4gICAgICAgICAgICAgICAgYmxvY2suc2NvcGUgPSBzY29wZTtcbiAgICAgICAgICAgICAgICAvLyBodHRwOi8vanNwZXJmLmNvbS9jbG9uZS12cy1jcmVhdGVjb21tZW50XG4gICAgICAgICAgICAgICAgdmFyIGVuZE5vZGUgPSBuZ1JlcGVhdEVuZENvbW1lbnQuY2xvbmVOb2RlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBjbG9uZVtjbG9uZS5sZW5ndGgrK10gPSBlbmROb2RlO1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyhwZXJmKTogc3VwcG9ydCBuYWtlZCBwcmV2aW91c05vZGUgaW4gYGVudGVyYCB0byBhdm9pZCBjcmVhdGlvbiBvZiBqcUxpdGUgd3JhcHBlcj9cbiAgICAgICAgICAgICAgICAkYW5pbWF0ZS5lbnRlcihjbG9uZSwgbnVsbCwganFMaXRlKHByZXZpb3VzTm9kZSkpO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzTm9kZSA9IGVuZE5vZGU7XG4gICAgICAgICAgICAgICAgLy8gTm90ZTogV2Ugb25seSBuZWVkIHRoZSBmaXJzdC9sYXN0IG5vZGUgb2YgdGhlIGNsb25lZCBub2Rlcy5cbiAgICAgICAgICAgICAgICAvLyBIb3dldmVyLCB3ZSBuZWVkIHRvIGtlZXAgdGhlIHJlZmVyZW5jZSB0byB0aGUganFsaXRlIHdyYXBwZXIgYXMgaXQgbWlnaHQgYmUgY2hhbmdlZCBsYXRlclxuICAgICAgICAgICAgICAgIC8vIGJ5IGEgZGlyZWN0aXZlIHdpdGggdGVtcGxhdGVVcmwgd2hlbiBpdHMgdGVtcGxhdGUgYXJyaXZlcy5cbiAgICAgICAgICAgICAgICBibG9jay5jbG9uZSA9IGNsb25lO1xuICAgICAgICAgICAgICAgIG5leHRCbG9ja01hcFtibG9jay5pZF0gPSBibG9jaztcbiAgICAgICAgICAgICAgICB1cGRhdGVTY29wZShibG9jay5zY29wZSwgaW5kZXgsIHZhbHVlSWRlbnRpZmllciwgdmFsdWUsIGtleUlkZW50aWZpZXIsIGtleSwgY29sbGVjdGlvbkxlbmd0aCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBsYXN0QmxvY2tNYXAgPSBuZXh0QmxvY2tNYXA7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG59XTtcblxudmFyIE5HX0hJREVfQ0xBU1MgPSAnbmctaGlkZSc7XG52YXIgTkdfSElERV9JTl9QUk9HUkVTU19DTEFTUyA9ICduZy1oaWRlLWFuaW1hdGUnO1xuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ1Nob3dcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBgbmdTaG93YCBkaXJlY3RpdmUgc2hvd3Mgb3IgaGlkZXMgdGhlIGdpdmVuIEhUTUwgZWxlbWVudCBiYXNlZCBvbiB0aGUgZXhwcmVzc2lvblxuICogcHJvdmlkZWQgdG8gdGhlIGBuZ1Nob3dgIGF0dHJpYnV0ZS4gVGhlIGVsZW1lbnQgaXMgc2hvd24gb3IgaGlkZGVuIGJ5IHJlbW92aW5nIG9yIGFkZGluZ1xuICogdGhlIGAubmctaGlkZWAgQ1NTIGNsYXNzIG9udG8gdGhlIGVsZW1lbnQuIFRoZSBgLm5nLWhpZGVgIENTUyBjbGFzcyBpcyBwcmVkZWZpbmVkXG4gKiBpbiBBbmd1bGFySlMgYW5kIHNldHMgdGhlIGRpc3BsYXkgc3R5bGUgdG8gbm9uZSAodXNpbmcgYW4gIWltcG9ydGFudCBmbGFnKS5cbiAqIEZvciBDU1AgbW9kZSBwbGVhc2UgYWRkIGBhbmd1bGFyLWNzcC5jc3NgIHRvIHlvdXIgaHRtbCBmaWxlIChzZWUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NzcCBuZ0NzcH0pLlxuICpcbiAqIGBgYGh0bWxcbiAqIDwhLS0gd2hlbiAkc2NvcGUubXlWYWx1ZSBpcyB0cnV0aHkgKGVsZW1lbnQgaXMgdmlzaWJsZSkgLS0+XG4gKiA8ZGl2IG5nLXNob3c9XCJteVZhbHVlXCI+PC9kaXY+XG4gKlxuICogPCEtLSB3aGVuICRzY29wZS5teVZhbHVlIGlzIGZhbHN5IChlbGVtZW50IGlzIGhpZGRlbikgLS0+XG4gKiA8ZGl2IG5nLXNob3c9XCJteVZhbHVlXCIgY2xhc3M9XCJuZy1oaWRlXCI+PC9kaXY+XG4gKiBgYGBcbiAqXG4gKiBXaGVuIHRoZSBgbmdTaG93YCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIGZhbHN5IHZhbHVlIHRoZW4gdGhlIGAubmctaGlkZWAgQ1NTIGNsYXNzIGlzIGFkZGVkIHRvIHRoZSBjbGFzc1xuICogYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50IGNhdXNpbmcgaXQgdG8gYmVjb21lIGhpZGRlbi4gV2hlbiB0cnV0aHksIHRoZSBgLm5nLWhpZGVgIENTUyBjbGFzcyBpcyByZW1vdmVkXG4gKiBmcm9tIHRoZSBlbGVtZW50IGNhdXNpbmcgdGhlIGVsZW1lbnQgbm90IHRvIGFwcGVhciBoaWRkZW4uXG4gKlxuICogIyMgV2h5IGlzICFpbXBvcnRhbnQgdXNlZD9cbiAqXG4gKiBZb3UgbWF5IGJlIHdvbmRlcmluZyB3aHkgIWltcG9ydGFudCBpcyB1c2VkIGZvciB0aGUgYC5uZy1oaWRlYCBDU1MgY2xhc3MuIFRoaXMgaXMgYmVjYXVzZSB0aGUgYC5uZy1oaWRlYCBzZWxlY3RvclxuICogY2FuIGJlIGVhc2lseSBvdmVycmlkZGVuIGJ5IGhlYXZpZXIgc2VsZWN0b3JzLiBGb3IgZXhhbXBsZSwgc29tZXRoaW5nIGFzIHNpbXBsZVxuICogYXMgY2hhbmdpbmcgdGhlIGRpc3BsYXkgc3R5bGUgb24gYSBIVE1MIGxpc3QgaXRlbSB3b3VsZCBtYWtlIGhpZGRlbiBlbGVtZW50cyBhcHBlYXIgdmlzaWJsZS5cbiAqIFRoaXMgYWxzbyBiZWNvbWVzIGEgYmlnZ2VyIGlzc3VlIHdoZW4gZGVhbGluZyB3aXRoIENTUyBmcmFtZXdvcmtzLlxuICpcbiAqIEJ5IHVzaW5nICFpbXBvcnRhbnQsIHRoZSBzaG93IGFuZCBoaWRlIGJlaGF2aW9yIHdpbGwgd29yayBhcyBleHBlY3RlZCBkZXNwaXRlIGFueSBjbGFzaCBiZXR3ZWVuIENTUyBzZWxlY3RvclxuICogc3BlY2lmaWNpdHkgKHdoZW4gIWltcG9ydGFudCBpc24ndCB1c2VkIHdpdGggYW55IGNvbmZsaWN0aW5nIHN0eWxlcykuIElmIGEgZGV2ZWxvcGVyIGNob29zZXMgdG8gb3ZlcnJpZGUgdGhlXG4gKiBzdHlsaW5nIHRvIGNoYW5nZSBob3cgdG8gaGlkZSBhbiBlbGVtZW50IHRoZW4gaXQgaXMganVzdCBhIG1hdHRlciBvZiB1c2luZyAhaW1wb3J0YW50IGluIHRoZWlyIG93biBDU1MgY29kZS5cbiAqXG4gKiAjIyMgT3ZlcnJpZGluZyBgLm5nLWhpZGVgXG4gKlxuICogQnkgZGVmYXVsdCwgdGhlIGAubmctaGlkZWAgY2xhc3Mgd2lsbCBzdHlsZSB0aGUgZWxlbWVudCB3aXRoIGBkaXNwbGF5Om5vbmUhaW1wb3J0YW50YC4gSWYgeW91IHdpc2ggdG8gY2hhbmdlXG4gKiB0aGUgaGlkZSBiZWhhdmlvciB3aXRoIG5nU2hvdy9uZ0hpZGUgdGhlbiB0aGlzIGNhbiBiZSBhY2hpZXZlZCBieSByZXN0YXRpbmcgdGhlIHN0eWxlcyBmb3IgdGhlIGAubmctaGlkZWBcbiAqIGNsYXNzIGluIENTUzpcbiAqXG4gKiBgYGBjc3NcbiAqIC5uZy1oaWRlIHtcbiAqICAgLyYjNDI7IHRoaXMgaXMganVzdCBhbm90aGVyIGZvcm0gb2YgaGlkaW5nIGFuIGVsZW1lbnQgJiM0MjsvXG4gKiAgIGRpc3BsYXk6YmxvY2shaW1wb3J0YW50O1xuICogICBwb3NpdGlvbjphYnNvbHV0ZTtcbiAqICAgdG9wOi05OTk5cHg7XG4gKiAgIGxlZnQ6LTk5OTlweDtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEJ5IGRlZmF1bHQgeW91IGRvbid0IG5lZWQgdG8gb3ZlcnJpZGUgaW4gQ1NTIGFueXRoaW5nIGFuZCB0aGUgYW5pbWF0aW9ucyB3aWxsIHdvcmsgYXJvdW5kIHRoZSBkaXNwbGF5IHN0eWxlLlxuICpcbiAqICMjIEEgbm90ZSBhYm91dCBhbmltYXRpb25zIHdpdGggYG5nU2hvd2BcbiAqXG4gKiBBbmltYXRpb25zIGluIG5nU2hvdy9uZ0hpZGUgd29yayB3aXRoIHRoZSBzaG93IGFuZCBoaWRlIGV2ZW50cyB0aGF0IGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZGlyZWN0aXZlIGV4cHJlc3Npb25cbiAqIGlzIHRydWUgYW5kIGZhbHNlLiBUaGlzIHN5c3RlbSB3b3JrcyBsaWtlIHRoZSBhbmltYXRpb24gc3lzdGVtIHByZXNlbnQgd2l0aCBuZ0NsYXNzIGV4Y2VwdCB0aGF0XG4gKiB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhlICFpbXBvcnRhbnQgZmxhZyB0byBvdmVycmlkZSB0aGUgZGlzcGxheSBwcm9wZXJ0eVxuICogc28gdGhhdCB5b3UgY2FuIHBlcmZvcm0gYW4gYW5pbWF0aW9uIHdoZW4gdGhlIGVsZW1lbnQgaXMgaGlkZGVuIGR1cmluZyB0aGUgdGltZSBvZiB0aGUgYW5pbWF0aW9uLlxuICpcbiAqIGBgYGNzc1xuICogLy9cbiAqIC8vYSB3b3JraW5nIGV4YW1wbGUgY2FuIGJlIGZvdW5kIGF0IHRoZSBib3R0b20gb2YgdGhpcyBwYWdlXG4gKiAvL1xuICogLm15LWVsZW1lbnQubmctaGlkZS1hZGQsIC5teS1lbGVtZW50Lm5nLWhpZGUtcmVtb3ZlIHtcbiAqICAgLyYjNDI7IHRoaXMgaXMgcmVxdWlyZWQgYXMgb2YgMS4zeCB0byBwcm9wZXJseVxuICogICAgICBhcHBseSBhbGwgc3R5bGluZyBpbiBhIHNob3cvaGlkZSBhbmltYXRpb24gJiM0MjsvXG4gKiAgIHRyYW5zaXRpb246MHMgbGluZWFyIGFsbDtcbiAqIH1cbiAqXG4gKiAubXktZWxlbWVudC5uZy1oaWRlLWFkZC1hY3RpdmUsXG4gKiAubXktZWxlbWVudC5uZy1oaWRlLXJlbW92ZS1hY3RpdmUge1xuICogICAvJiM0MjsgdGhlIHRyYW5zaXRpb24gaXMgZGVmaW5lZCBpbiB0aGUgYWN0aXZlIGNsYXNzICYjNDI7L1xuICogICB0cmFuc2l0aW9uOjFzIGxpbmVhciBhbGw7XG4gKiB9XG4gKlxuICogLm15LWVsZW1lbnQubmctaGlkZS1hZGQgeyAuLi4gfVxuICogLm15LWVsZW1lbnQubmctaGlkZS1hZGQubmctaGlkZS1hZGQtYWN0aXZlIHsgLi4uIH1cbiAqIC5teS1lbGVtZW50Lm5nLWhpZGUtcmVtb3ZlIHsgLi4uIH1cbiAqIC5teS1lbGVtZW50Lm5nLWhpZGUtcmVtb3ZlLm5nLWhpZGUtcmVtb3ZlLWFjdGl2ZSB7IC4uLiB9XG4gKiBgYGBcbiAqXG4gKiBLZWVwIGluIG1pbmQgdGhhdCwgYXMgb2YgQW5ndWxhckpTIHZlcnNpb24gMS4zLjAtYmV0YS4xMSwgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGFuZ2UgdGhlIGRpc3BsYXlcbiAqIHByb3BlcnR5IHRvIGJsb2NrIGR1cmluZyBhbmltYXRpb24gc3RhdGVzLS1uZ0FuaW1hdGUgd2lsbCBoYW5kbGUgdGhlIHN0eWxlIHRvZ2dsaW5nIGF1dG9tYXRpY2FsbHkgZm9yIHlvdS5cbiAqXG4gKiBAYW5pbWF0aW9uc1xuICogYWRkQ2xhc3M6IGAubmctaGlkZWAgLSBoYXBwZW5zIGFmdGVyIHRoZSBgbmdTaG93YCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIHRydXRoeSB2YWx1ZSBhbmQgdGhlIGp1c3QgYmVmb3JlIGNvbnRlbnRzIGFyZSBzZXQgdG8gdmlzaWJsZVxuICogcmVtb3ZlQ2xhc3M6IGAubmctaGlkZWAgLSBoYXBwZW5zIGFmdGVyIHRoZSBgbmdTaG93YCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIG5vbiB0cnV0aHkgdmFsdWUgYW5kIGp1c3QgYmVmb3JlIHRoZSBjb250ZW50cyBhcmUgc2V0IHRvIGhpZGRlblxuICpcbiAqIEBlbGVtZW50IEFOWVxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ1Nob3cgSWYgdGhlIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259IGlzIHRydXRoeVxuICogICAgIHRoZW4gdGhlIGVsZW1lbnQgaXMgc2hvd24gb3IgaGlkZGVuIHJlc3BlY3RpdmVseS5cbiAqXG4gKiBAZXhhbXBsZVxuICA8ZXhhbXBsZSBtb2R1bGU9XCJuZ0FuaW1hdGVcIiBkZXBzPVwiYW5ndWxhci1hbmltYXRlLmpzXCIgYW5pbWF0aW9ucz1cInRydWVcIj5cbiAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgQ2xpY2sgbWU6IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuZy1tb2RlbD1cImNoZWNrZWRcIj48YnIvPlxuICAgICAgPGRpdj5cbiAgICAgICAgU2hvdzpcbiAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWVsZW1lbnQgYW5pbWF0ZS1zaG93XCIgbmctc2hvdz1cImNoZWNrZWRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tdGh1bWJzLXVwXCI+PC9zcGFuPiBJIHNob3cgdXAgd2hlbiB5b3VyIGNoZWNrYm94IGlzIGNoZWNrZWQuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICBIaWRlOlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2stZWxlbWVudCBhbmltYXRlLXNob3dcIiBuZy1oaWRlPVwiY2hlY2tlZFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2x5cGhpY29uIGdseXBoaWNvbi10aHVtYnMtZG93blwiPjwvc3Bhbj4gSSBoaWRlIHdoZW4geW91ciBjaGVja2JveCBpcyBjaGVja2VkLlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZmlsZT5cbiAgICA8ZmlsZSBuYW1lPVwiZ2x5cGhpY29ucy5jc3NcIj5cbiAgICAgIEBpbXBvcnQgdXJsKC4uLy4uL2NvbXBvbmVudHMvYm9vdHN0cmFwLTMuMS4xL2Nzcy9ib290c3RyYXAuY3NzKTtcbiAgICA8L2ZpbGU+XG4gICAgPGZpbGUgbmFtZT1cImFuaW1hdGlvbnMuY3NzXCI+XG4gICAgICAuYW5pbWF0ZS1zaG93IHtcbiAgICAgICAgbGluZS1oZWlnaHQ6MjBweDtcbiAgICAgICAgb3BhY2l0eToxO1xuICAgICAgICBwYWRkaW5nOjEwcHg7XG4gICAgICAgIGJvcmRlcjoxcHggc29saWQgYmxhY2s7XG4gICAgICAgIGJhY2tncm91bmQ6d2hpdGU7XG4gICAgICB9XG5cbiAgICAgIC5hbmltYXRlLXNob3cubmctaGlkZS1hZGQubmctaGlkZS1hZGQtYWN0aXZlLFxuICAgICAgLmFuaW1hdGUtc2hvdy5uZy1oaWRlLXJlbW92ZS5uZy1oaWRlLXJlbW92ZS1hY3RpdmUge1xuICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246YWxsIGxpbmVhciAwLjVzO1xuICAgICAgICB0cmFuc2l0aW9uOmFsbCBsaW5lYXIgMC41cztcbiAgICAgIH1cblxuICAgICAgLmFuaW1hdGUtc2hvdy5uZy1oaWRlIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6MDtcbiAgICAgICAgb3BhY2l0eTowO1xuICAgICAgICBwYWRkaW5nOjAgMTBweDtcbiAgICAgIH1cblxuICAgICAgLmNoZWNrLWVsZW1lbnQge1xuICAgICAgICBwYWRkaW5nOjEwcHg7XG4gICAgICAgIGJvcmRlcjoxcHggc29saWQgYmxhY2s7XG4gICAgICAgIGJhY2tncm91bmQ6d2hpdGU7XG4gICAgICB9XG4gICAgPC9maWxlPlxuICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cbiAgICAgIHZhciB0aHVtYnNVcCA9IGVsZW1lbnQoYnkuY3NzKCdzcGFuLmdseXBoaWNvbi10aHVtYnMtdXAnKSk7XG4gICAgICB2YXIgdGh1bWJzRG93biA9IGVsZW1lbnQoYnkuY3NzKCdzcGFuLmdseXBoaWNvbi10aHVtYnMtZG93bicpKTtcblxuICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1zaG93IC8gbmctaGlkZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICBleHBlY3QodGh1bWJzVXAuaXNEaXNwbGF5ZWQoKSkudG9CZUZhbHN5KCk7XG4gICAgICAgIGV4cGVjdCh0aHVtYnNEb3duLmlzRGlzcGxheWVkKCkpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdjaGVja2VkJykpLmNsaWNrKCk7XG5cbiAgICAgICAgZXhwZWN0KHRodW1ic1VwLmlzRGlzcGxheWVkKCkpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgZXhwZWN0KHRodW1ic0Rvd24uaXNEaXNwbGF5ZWQoKSkudG9CZUZhbHN5KCk7XG4gICAgICB9KTtcbiAgICA8L2ZpbGU+XG4gIDwvZXhhbXBsZT5cbiAqL1xudmFyIG5nU2hvd0RpcmVjdGl2ZSA9IFsnJGFuaW1hdGUnLCBmdW5jdGlvbigkYW5pbWF0ZSkge1xuICByZXR1cm4ge1xuICAgIHJlc3RyaWN0OiAnQScsXG4gICAgbXVsdEVsZW1lbnQ6IHRydWUsXG4gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIpIHtcbiAgICAgIHNjb3BlLiR3YXRjaChhdHRyLm5nU2hvdywgZnVuY3Rpb24gbmdTaG93V2F0Y2hBY3Rpb24odmFsdWUpIHtcbiAgICAgICAgLy8gd2UncmUgYWRkaW5nIGEgdGVtcG9yYXJ5LCBhbmltYXRpb24tc3BlY2lmaWMgY2xhc3MgZm9yIG5nLWhpZGUgc2luY2UgdGhpcyB3YXlcbiAgICAgICAgLy8gd2UgY2FuIGNvbnRyb2wgd2hlbiB0aGUgZWxlbWVudCBpcyBhY3R1YWxseSBkaXNwbGF5ZWQgb24gc2NyZWVuIHdpdGhvdXQgaGF2aW5nXG4gICAgICAgIC8vIHRvIGhhdmUgYSBnbG9iYWwvZ3JlZWR5IENTUyBzZWxlY3RvciB0aGF0IGJyZWFrcyB3aGVuIG90aGVyIGFuaW1hdGlvbnMgYXJlIHJ1bi5cbiAgICAgICAgLy8gUmVhZDogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5qcy9pc3N1ZXMvOTEwMyNpc3N1ZWNvbW1lbnQtNTgzMzU4NDVcbiAgICAgICAgJGFuaW1hdGVbdmFsdWUgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oZWxlbWVudCwgTkdfSElERV9DTEFTUywge1xuICAgICAgICAgIHRlbXBDbGFzc2VzOiBOR19ISURFX0lOX1BST0dSRVNTX0NMQVNTXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufV07XG5cblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ0hpZGVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBgbmdIaWRlYCBkaXJlY3RpdmUgc2hvd3Mgb3IgaGlkZXMgdGhlIGdpdmVuIEhUTUwgZWxlbWVudCBiYXNlZCBvbiB0aGUgZXhwcmVzc2lvblxuICogcHJvdmlkZWQgdG8gdGhlIGBuZ0hpZGVgIGF0dHJpYnV0ZS4gVGhlIGVsZW1lbnQgaXMgc2hvd24gb3IgaGlkZGVuIGJ5IHJlbW92aW5nIG9yIGFkZGluZ1xuICogdGhlIGBuZy1oaWRlYCBDU1MgY2xhc3Mgb250byB0aGUgZWxlbWVudC4gVGhlIGAubmctaGlkZWAgQ1NTIGNsYXNzIGlzIHByZWRlZmluZWRcbiAqIGluIEFuZ3VsYXJKUyBhbmQgc2V0cyB0aGUgZGlzcGxheSBzdHlsZSB0byBub25lICh1c2luZyBhbiAhaW1wb3J0YW50IGZsYWcpLlxuICogRm9yIENTUCBtb2RlIHBsZWFzZSBhZGQgYGFuZ3VsYXItY3NwLmNzc2AgdG8geW91ciBodG1sIGZpbGUgKHNlZSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ3NwIG5nQ3NwfSkuXG4gKlxuICogYGBgaHRtbFxuICogPCEtLSB3aGVuICRzY29wZS5teVZhbHVlIGlzIHRydXRoeSAoZWxlbWVudCBpcyBoaWRkZW4pIC0tPlxuICogPGRpdiBuZy1oaWRlPVwibXlWYWx1ZVwiIGNsYXNzPVwibmctaGlkZVwiPjwvZGl2PlxuICpcbiAqIDwhLS0gd2hlbiAkc2NvcGUubXlWYWx1ZSBpcyBmYWxzeSAoZWxlbWVudCBpcyB2aXNpYmxlKSAtLT5cbiAqIDxkaXYgbmctaGlkZT1cIm15VmFsdWVcIj48L2Rpdj5cbiAqIGBgYFxuICpcbiAqIFdoZW4gdGhlIGBuZ0hpZGVgIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgdHJ1dGh5IHZhbHVlIHRoZW4gdGhlIGAubmctaGlkZWAgQ1NTIGNsYXNzIGlzIGFkZGVkIHRvIHRoZSBjbGFzc1xuICogYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50IGNhdXNpbmcgaXQgdG8gYmVjb21lIGhpZGRlbi4gV2hlbiBmYWxzeSwgdGhlIGAubmctaGlkZWAgQ1NTIGNsYXNzIGlzIHJlbW92ZWRcbiAqIGZyb20gdGhlIGVsZW1lbnQgY2F1c2luZyB0aGUgZWxlbWVudCBub3QgdG8gYXBwZWFyIGhpZGRlbi5cbiAqXG4gKiAjIyBXaHkgaXMgIWltcG9ydGFudCB1c2VkP1xuICpcbiAqIFlvdSBtYXkgYmUgd29uZGVyaW5nIHdoeSAhaW1wb3J0YW50IGlzIHVzZWQgZm9yIHRoZSBgLm5nLWhpZGVgIENTUyBjbGFzcy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBgLm5nLWhpZGVgIHNlbGVjdG9yXG4gKiBjYW4gYmUgZWFzaWx5IG92ZXJyaWRkZW4gYnkgaGVhdmllciBzZWxlY3RvcnMuIEZvciBleGFtcGxlLCBzb21ldGhpbmcgYXMgc2ltcGxlXG4gKiBhcyBjaGFuZ2luZyB0aGUgZGlzcGxheSBzdHlsZSBvbiBhIEhUTUwgbGlzdCBpdGVtIHdvdWxkIG1ha2UgaGlkZGVuIGVsZW1lbnRzIGFwcGVhciB2aXNpYmxlLlxuICogVGhpcyBhbHNvIGJlY29tZXMgYSBiaWdnZXIgaXNzdWUgd2hlbiBkZWFsaW5nIHdpdGggQ1NTIGZyYW1ld29ya3MuXG4gKlxuICogQnkgdXNpbmcgIWltcG9ydGFudCwgdGhlIHNob3cgYW5kIGhpZGUgYmVoYXZpb3Igd2lsbCB3b3JrIGFzIGV4cGVjdGVkIGRlc3BpdGUgYW55IGNsYXNoIGJldHdlZW4gQ1NTIHNlbGVjdG9yXG4gKiBzcGVjaWZpY2l0eSAod2hlbiAhaW1wb3J0YW50IGlzbid0IHVzZWQgd2l0aCBhbnkgY29uZmxpY3Rpbmcgc3R5bGVzKS4gSWYgYSBkZXZlbG9wZXIgY2hvb3NlcyB0byBvdmVycmlkZSB0aGVcbiAqIHN0eWxpbmcgdG8gY2hhbmdlIGhvdyB0byBoaWRlIGFuIGVsZW1lbnQgdGhlbiBpdCBpcyBqdXN0IGEgbWF0dGVyIG9mIHVzaW5nICFpbXBvcnRhbnQgaW4gdGhlaXIgb3duIENTUyBjb2RlLlxuICpcbiAqICMjIyBPdmVycmlkaW5nIGAubmctaGlkZWBcbiAqXG4gKiBCeSBkZWZhdWx0LCB0aGUgYC5uZy1oaWRlYCBjbGFzcyB3aWxsIHN0eWxlIHRoZSBlbGVtZW50IHdpdGggYGRpc3BsYXk6bm9uZSFpbXBvcnRhbnRgLiBJZiB5b3Ugd2lzaCB0byBjaGFuZ2VcbiAqIHRoZSBoaWRlIGJlaGF2aW9yIHdpdGggbmdTaG93L25nSGlkZSB0aGVuIHRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHJlc3RhdGluZyB0aGUgc3R5bGVzIGZvciB0aGUgYC5uZy1oaWRlYFxuICogY2xhc3MgaW4gQ1NTOlxuICpcbiAqIGBgYGNzc1xuICogLm5nLWhpZGUge1xuICogICAvJiM0MjsgdGhpcyBpcyBqdXN0IGFub3RoZXIgZm9ybSBvZiBoaWRpbmcgYW4gZWxlbWVudCAmIzQyOy9cbiAqICAgZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7XG4gKiAgIHBvc2l0aW9uOmFic29sdXRlO1xuICogICB0b3A6LTk5OTlweDtcbiAqICAgbGVmdDotOTk5OXB4O1xuICogfVxuICogYGBgXG4gKlxuICogQnkgZGVmYXVsdCB5b3UgZG9uJ3QgbmVlZCB0byBvdmVycmlkZSBpbiBDU1MgYW55dGhpbmcgYW5kIHRoZSBhbmltYXRpb25zIHdpbGwgd29yayBhcm91bmQgdGhlIGRpc3BsYXkgc3R5bGUuXG4gKlxuICogIyMgQSBub3RlIGFib3V0IGFuaW1hdGlvbnMgd2l0aCBgbmdIaWRlYFxuICpcbiAqIEFuaW1hdGlvbnMgaW4gbmdTaG93L25nSGlkZSB3b3JrIHdpdGggdGhlIHNob3cgYW5kIGhpZGUgZXZlbnRzIHRoYXQgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBkaXJlY3RpdmUgZXhwcmVzc2lvblxuICogaXMgdHJ1ZSBhbmQgZmFsc2UuIFRoaXMgc3lzdGVtIHdvcmtzIGxpa2UgdGhlIGFuaW1hdGlvbiBzeXN0ZW0gcHJlc2VudCB3aXRoIG5nQ2xhc3MsIGV4Y2VwdCB0aGF0IHRoZSBgLm5nLWhpZGVgXG4gKiBDU1MgY2xhc3MgaXMgYWRkZWQgYW5kIHJlbW92ZWQgZm9yIHlvdSBpbnN0ZWFkIG9mIHlvdXIgb3duIENTUyBjbGFzcy5cbiAqXG4gKiBgYGBjc3NcbiAqIC8vXG4gKiAvL2Egd29ya2luZyBleGFtcGxlIGNhbiBiZSBmb3VuZCBhdCB0aGUgYm90dG9tIG9mIHRoaXMgcGFnZVxuICogLy9cbiAqIC5teS1lbGVtZW50Lm5nLWhpZGUtYWRkLCAubXktZWxlbWVudC5uZy1oaWRlLXJlbW92ZSB7XG4gKiAgIHRyYW5zaXRpb246MC41cyBsaW5lYXIgYWxsO1xuICogfVxuICpcbiAqIC5teS1lbGVtZW50Lm5nLWhpZGUtYWRkIHsgLi4uIH1cbiAqIC5teS1lbGVtZW50Lm5nLWhpZGUtYWRkLm5nLWhpZGUtYWRkLWFjdGl2ZSB7IC4uLiB9XG4gKiAubXktZWxlbWVudC5uZy1oaWRlLXJlbW92ZSB7IC4uLiB9XG4gKiAubXktZWxlbWVudC5uZy1oaWRlLXJlbW92ZS5uZy1oaWRlLXJlbW92ZS1hY3RpdmUgeyAuLi4gfVxuICogYGBgXG4gKlxuICogS2VlcCBpbiBtaW5kIHRoYXQsIGFzIG9mIEFuZ3VsYXJKUyB2ZXJzaW9uIDEuMy4wLWJldGEuMTEsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hhbmdlIHRoZSBkaXNwbGF5XG4gKiBwcm9wZXJ0eSB0byBibG9jayBkdXJpbmcgYW5pbWF0aW9uIHN0YXRlcy0tbmdBbmltYXRlIHdpbGwgaGFuZGxlIHRoZSBzdHlsZSB0b2dnbGluZyBhdXRvbWF0aWNhbGx5IGZvciB5b3UuXG4gKlxuICogQGFuaW1hdGlvbnNcbiAqIHJlbW92ZUNsYXNzOiBgLm5nLWhpZGVgIC0gaGFwcGVucyBhZnRlciB0aGUgYG5nSGlkZWAgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSB0cnV0aHkgdmFsdWUgYW5kIGp1c3QgYmVmb3JlIHRoZSBjb250ZW50cyBhcmUgc2V0IHRvIGhpZGRlblxuICogYWRkQ2xhc3M6IGAubmctaGlkZWAgLSBoYXBwZW5zIGFmdGVyIHRoZSBgbmdIaWRlYCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIG5vbiB0cnV0aHkgdmFsdWUgYW5kIGp1c3QgYmVmb3JlIHRoZSBjb250ZW50cyBhcmUgc2V0IHRvIHZpc2libGVcbiAqXG4gKiBAZWxlbWVudCBBTllcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdIaWRlIElmIHRoZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufSBpcyB0cnV0aHkgdGhlblxuICogICAgIHRoZSBlbGVtZW50IGlzIHNob3duIG9yIGhpZGRlbiByZXNwZWN0aXZlbHkuXG4gKlxuICogQGV4YW1wbGVcbiAgPGV4YW1wbGUgbW9kdWxlPVwibmdBbmltYXRlXCIgZGVwcz1cImFuZ3VsYXItYW5pbWF0ZS5qc1wiIGFuaW1hdGlvbnM9XCJ0cnVlXCI+XG4gICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgIENsaWNrIG1lOiA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmctbW9kZWw9XCJjaGVja2VkXCI+PGJyLz5cbiAgICAgIDxkaXY+XG4gICAgICAgIFNob3c6XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1lbGVtZW50IGFuaW1hdGUtaGlkZVwiIG5nLXNob3c9XCJjaGVja2VkXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLXRodW1icy11cFwiPjwvc3Bhbj4gSSBzaG93IHVwIHdoZW4geW91ciBjaGVja2JveCBpcyBjaGVja2VkLlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgSGlkZTpcbiAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWVsZW1lbnQgYW5pbWF0ZS1oaWRlXCIgbmctaGlkZT1cImNoZWNrZWRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tdGh1bWJzLWRvd25cIj48L3NwYW4+IEkgaGlkZSB3aGVuIHlvdXIgY2hlY2tib3ggaXMgY2hlY2tlZC5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2ZpbGU+XG4gICAgPGZpbGUgbmFtZT1cImdseXBoaWNvbnMuY3NzXCI+XG4gICAgICBAaW1wb3J0IHVybCguLi8uLi9jb21wb25lbnRzL2Jvb3RzdHJhcC0zLjEuMS9jc3MvYm9vdHN0cmFwLmNzcyk7XG4gICAgPC9maWxlPlxuICAgIDxmaWxlIG5hbWU9XCJhbmltYXRpb25zLmNzc1wiPlxuICAgICAgLmFuaW1hdGUtaGlkZSB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjphbGwgbGluZWFyIDAuNXM7XG4gICAgICAgIHRyYW5zaXRpb246YWxsIGxpbmVhciAwLjVzO1xuICAgICAgICBsaW5lLWhlaWdodDoyMHB4O1xuICAgICAgICBvcGFjaXR5OjE7XG4gICAgICAgIHBhZGRpbmc6MTBweDtcbiAgICAgICAgYm9yZGVyOjFweCBzb2xpZCBibGFjaztcbiAgICAgICAgYmFja2dyb3VuZDp3aGl0ZTtcbiAgICAgIH1cblxuICAgICAgLmFuaW1hdGUtaGlkZS5uZy1oaWRlIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6MDtcbiAgICAgICAgb3BhY2l0eTowO1xuICAgICAgICBwYWRkaW5nOjAgMTBweDtcbiAgICAgIH1cblxuICAgICAgLmNoZWNrLWVsZW1lbnQge1xuICAgICAgICBwYWRkaW5nOjEwcHg7XG4gICAgICAgIGJvcmRlcjoxcHggc29saWQgYmxhY2s7XG4gICAgICAgIGJhY2tncm91bmQ6d2hpdGU7XG4gICAgICB9XG4gICAgPC9maWxlPlxuICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cbiAgICAgIHZhciB0aHVtYnNVcCA9IGVsZW1lbnQoYnkuY3NzKCdzcGFuLmdseXBoaWNvbi10aHVtYnMtdXAnKSk7XG4gICAgICB2YXIgdGh1bWJzRG93biA9IGVsZW1lbnQoYnkuY3NzKCdzcGFuLmdseXBoaWNvbi10aHVtYnMtZG93bicpKTtcblxuICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1zaG93IC8gbmctaGlkZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICBleHBlY3QodGh1bWJzVXAuaXNEaXNwbGF5ZWQoKSkudG9CZUZhbHN5KCk7XG4gICAgICAgIGV4cGVjdCh0aHVtYnNEb3duLmlzRGlzcGxheWVkKCkpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdjaGVja2VkJykpLmNsaWNrKCk7XG5cbiAgICAgICAgZXhwZWN0KHRodW1ic1VwLmlzRGlzcGxheWVkKCkpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgZXhwZWN0KHRodW1ic0Rvd24uaXNEaXNwbGF5ZWQoKSkudG9CZUZhbHN5KCk7XG4gICAgICB9KTtcbiAgICA8L2ZpbGU+XG4gIDwvZXhhbXBsZT5cbiAqL1xudmFyIG5nSGlkZURpcmVjdGl2ZSA9IFsnJGFuaW1hdGUnLCBmdW5jdGlvbigkYW5pbWF0ZSkge1xuICByZXR1cm4ge1xuICAgIHJlc3RyaWN0OiAnQScsXG4gICAgbXVsdEVsZW1lbnQ6IHRydWUsXG4gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIpIHtcbiAgICAgIHNjb3BlLiR3YXRjaChhdHRyLm5nSGlkZSwgZnVuY3Rpb24gbmdIaWRlV2F0Y2hBY3Rpb24odmFsdWUpIHtcbiAgICAgICAgLy8gVGhlIGNvbW1lbnQgaW5zaWRlIG9mIHRoZSBuZ1Nob3dEaXJlY3RpdmUgZXhwbGFpbnMgd2h5IHdlIGFkZCBhbmRcbiAgICAgICAgLy8gcmVtb3ZlIGEgdGVtcG9yYXJ5IGNsYXNzIGZvciB0aGUgc2hvdy9oaWRlIGFuaW1hdGlvblxuICAgICAgICAkYW5pbWF0ZVt2YWx1ZSA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShlbGVtZW50LE5HX0hJREVfQ0xBU1MsIHtcbiAgICAgICAgICB0ZW1wQ2xhc3NlczogTkdfSElERV9JTl9QUk9HUkVTU19DTEFTU1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1dO1xuXG4vKipcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcbiAqIEBuYW1lIG5nU3R5bGVcbiAqIEByZXN0cmljdCBBQ1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIGBuZ1N0eWxlYCBkaXJlY3RpdmUgYWxsb3dzIHlvdSB0byBzZXQgQ1NTIHN0eWxlIG9uIGFuIEhUTUwgZWxlbWVudCBjb25kaXRpb25hbGx5LlxuICpcbiAqIEBlbGVtZW50IEFOWVxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ1N0eWxlXG4gKlxuICoge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gd2hpY2ggZXZhbHMgdG8gYW5cbiAqIG9iamVjdCB3aG9zZSBrZXlzIGFyZSBDU1Mgc3R5bGUgbmFtZXMgYW5kIHZhbHVlcyBhcmUgY29ycmVzcG9uZGluZyB2YWx1ZXMgZm9yIHRob3NlIENTU1xuICoga2V5cy5cbiAqXG4gKiBTaW5jZSBzb21lIENTUyBzdHlsZSBuYW1lcyBhcmUgbm90IHZhbGlkIGtleXMgZm9yIGFuIG9iamVjdCwgdGhleSBtdXN0IGJlIHF1b3RlZC5cbiAqIFNlZSB0aGUgJ2JhY2tncm91bmQtY29sb3InIHN0eWxlIGluIHRoZSBleGFtcGxlIGJlbG93LlxuICpcbiAqIEBleGFtcGxlXG4gICA8ZXhhbXBsZT5cbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cInNldCBjb2xvclwiIG5nLWNsaWNrPVwibXlTdHlsZT17Y29sb3I6J3JlZCd9XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJzZXQgYmFja2dyb3VuZFwiIG5nLWNsaWNrPVwibXlTdHlsZT17J2JhY2tncm91bmQtY29sb3InOidibHVlJ31cIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cImNsZWFyXCIgbmctY2xpY2s9XCJteVN0eWxlPXt9XCI+XG4gICAgICAgIDxici8+XG4gICAgICAgIDxzcGFuIG5nLXN0eWxlPVwibXlTdHlsZVwiPlNhbXBsZSBUZXh0PC9zcGFuPlxuICAgICAgICA8cHJlPm15U3R5bGU9e3tteVN0eWxlfX08L3ByZT5cbiAgICAgPC9maWxlPlxuICAgICA8ZmlsZSBuYW1lPVwic3R5bGUuY3NzXCI+XG4gICAgICAgc3BhbiB7XG4gICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgfVxuICAgICA8L2ZpbGU+XG4gICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cbiAgICAgICB2YXIgY29sb3JTcGFuID0gZWxlbWVudChieS5jc3MoJ3NwYW4nKSk7XG5cbiAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLXN0eWxlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICBleHBlY3QoY29sb3JTcGFuLmdldENzc1ZhbHVlKCdjb2xvcicpKS50b0JlKCdyZ2JhKDAsIDAsIDAsIDEpJyk7XG4gICAgICAgICBlbGVtZW50KGJ5LmNzcygnaW5wdXRbdmFsdWU9XFwnc2V0IGNvbG9yXFwnXScpKS5jbGljaygpO1xuICAgICAgICAgZXhwZWN0KGNvbG9yU3Bhbi5nZXRDc3NWYWx1ZSgnY29sb3InKSkudG9CZSgncmdiYSgyNTUsIDAsIDAsIDEpJyk7XG4gICAgICAgICBlbGVtZW50KGJ5LmNzcygnaW5wdXRbdmFsdWU9Y2xlYXJdJykpLmNsaWNrKCk7XG4gICAgICAgICBleHBlY3QoY29sb3JTcGFuLmdldENzc1ZhbHVlKCdjb2xvcicpKS50b0JlKCdyZ2JhKDAsIDAsIDAsIDEpJyk7XG4gICAgICAgfSk7XG4gICAgIDwvZmlsZT5cbiAgIDwvZXhhbXBsZT5cbiAqL1xudmFyIG5nU3R5bGVEaXJlY3RpdmUgPSBuZ0RpcmVjdGl2ZShmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikge1xuICBzY29wZS4kd2F0Y2goYXR0ci5uZ1N0eWxlLCBmdW5jdGlvbiBuZ1N0eWxlV2F0Y2hBY3Rpb24obmV3U3R5bGVzLCBvbGRTdHlsZXMpIHtcbiAgICBpZiAob2xkU3R5bGVzICYmIChuZXdTdHlsZXMgIT09IG9sZFN0eWxlcykpIHtcbiAgICAgIGZvckVhY2gob2xkU3R5bGVzLCBmdW5jdGlvbih2YWwsIHN0eWxlKSB7IGVsZW1lbnQuY3NzKHN0eWxlLCAnJyk7fSk7XG4gICAgfVxuICAgIGlmIChuZXdTdHlsZXMpIGVsZW1lbnQuY3NzKG5ld1N0eWxlcyk7XG4gIH0sIHRydWUpO1xufSk7XG5cbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgbmdTd2l0Y2hcbiAqIEByZXN0cmljdCBFQVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIGBuZ1N3aXRjaGAgZGlyZWN0aXZlIGlzIHVzZWQgdG8gY29uZGl0aW9uYWxseSBzd2FwIERPTSBzdHJ1Y3R1cmUgb24geW91ciB0ZW1wbGF0ZSBiYXNlZCBvbiBhIHNjb3BlIGV4cHJlc3Npb24uXG4gKiBFbGVtZW50cyB3aXRoaW4gYG5nU3dpdGNoYCBidXQgd2l0aG91dCBgbmdTd2l0Y2hXaGVuYCBvciBgbmdTd2l0Y2hEZWZhdWx0YCBkaXJlY3RpdmVzIHdpbGwgYmUgcHJlc2VydmVkIGF0IHRoZSBsb2NhdGlvblxuICogYXMgc3BlY2lmaWVkIGluIHRoZSB0ZW1wbGF0ZS5cbiAqXG4gKiBUaGUgZGlyZWN0aXZlIGl0c2VsZiB3b3JrcyBzaW1pbGFyIHRvIG5nSW5jbHVkZSwgaG93ZXZlciwgaW5zdGVhZCBvZiBkb3dubG9hZGluZyB0ZW1wbGF0ZSBjb2RlIChvciBsb2FkaW5nIGl0XG4gKiBmcm9tIHRoZSB0ZW1wbGF0ZSBjYWNoZSksIGBuZ1N3aXRjaGAgc2ltcGx5IGNob29zZXMgb25lIG9mIHRoZSBuZXN0ZWQgZWxlbWVudHMgYW5kIG1ha2VzIGl0IHZpc2libGUgYmFzZWQgb24gd2hpY2ggZWxlbWVudFxuICogbWF0Y2hlcyB0aGUgdmFsdWUgb2J0YWluZWQgZnJvbSB0aGUgZXZhbHVhdGVkIGV4cHJlc3Npb24uIEluIG90aGVyIHdvcmRzLCB5b3UgZGVmaW5lIGEgY29udGFpbmVyIGVsZW1lbnRcbiAqICh3aGVyZSB5b3UgcGxhY2UgdGhlIGRpcmVjdGl2ZSksIHBsYWNlIGFuIGV4cHJlc3Npb24gb24gdGhlICoqYG9uPVwiLi4uXCJgIGF0dHJpYnV0ZSoqXG4gKiAob3IgdGhlICoqYG5nLXN3aXRjaD1cIi4uLlwiYCBhdHRyaWJ1dGUqKiksIGRlZmluZSBhbnkgaW5uZXIgZWxlbWVudHMgaW5zaWRlIG9mIHRoZSBkaXJlY3RpdmUgYW5kIHBsYWNlXG4gKiBhIHdoZW4gYXR0cmlidXRlIHBlciBlbGVtZW50LiBUaGUgd2hlbiBhdHRyaWJ1dGUgaXMgdXNlZCB0byBpbmZvcm0gbmdTd2l0Y2ggd2hpY2ggZWxlbWVudCB0byBkaXNwbGF5IHdoZW4gdGhlIG9uXG4gKiBleHByZXNzaW9uIGlzIGV2YWx1YXRlZC4gSWYgYSBtYXRjaGluZyBleHByZXNzaW9uIGlzIG5vdCBmb3VuZCB2aWEgYSB3aGVuIGF0dHJpYnV0ZSB0aGVuIGFuIGVsZW1lbnQgd2l0aCB0aGUgZGVmYXVsdFxuICogYXR0cmlidXRlIGlzIGRpc3BsYXllZC5cbiAqXG4gKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxuICogQmUgYXdhcmUgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlcyB0byBtYXRjaCBhZ2FpbnN0IGNhbm5vdCBiZSBleHByZXNzaW9ucy4gVGhleSBhcmUgaW50ZXJwcmV0ZWRcbiAqIGFzIGxpdGVyYWwgc3RyaW5nIHZhbHVlcyB0byBtYXRjaCBhZ2FpbnN0LlxuICogRm9yIGV4YW1wbGUsICoqYG5nLXN3aXRjaC13aGVuPVwic29tZVZhbFwiYCoqIHdpbGwgbWF0Y2ggYWdhaW5zdCB0aGUgc3RyaW5nIGBcInNvbWVWYWxcImAgbm90IGFnYWluc3QgdGhlXG4gKiB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBgJHNjb3BlLnNvbWVWYWxgLlxuICogPC9kaXY+XG5cbiAqIEBhbmltYXRpb25zXG4gKiBlbnRlciAtIGhhcHBlbnMgYWZ0ZXIgdGhlIG5nU3dpdGNoIGNvbnRlbnRzIGNoYW5nZSBhbmQgdGhlIG1hdGNoZWQgY2hpbGQgZWxlbWVudCBpcyBwbGFjZWQgaW5zaWRlIHRoZSBjb250YWluZXJcbiAqIGxlYXZlIC0gaGFwcGVucyBqdXN0IGFmdGVyIHRoZSBuZ1N3aXRjaCBjb250ZW50cyBjaGFuZ2UgYW5kIGp1c3QgYmVmb3JlIHRoZSBmb3JtZXIgY29udGVudHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgRE9NXG4gKlxuICogQHVzYWdlXG4gKlxuICogYGBgXG4gKiA8QU5ZIG5nLXN3aXRjaD1cImV4cHJlc3Npb25cIj5cbiAqICAgPEFOWSBuZy1zd2l0Y2gtd2hlbj1cIm1hdGNoVmFsdWUxXCI+Li4uPC9BTlk+XG4gKiAgIDxBTlkgbmctc3dpdGNoLXdoZW49XCJtYXRjaFZhbHVlMlwiPi4uLjwvQU5ZPlxuICogICA8QU5ZIG5nLXN3aXRjaC1kZWZhdWx0Pi4uLjwvQU5ZPlxuICogPC9BTlk+XG4gKiBgYGBcbiAqXG4gKlxuICogQHNjb3BlXG4gKiBAcHJpb3JpdHkgMTIwMFxuICogQHBhcmFtIHsqfSBuZ1N3aXRjaHxvbiBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QgPHR0Pm5nLXN3aXRjaC13aGVuPC90dD4uXG4gKiBPbiBjaGlsZCBlbGVtZW50cyBhZGQ6XG4gKlxuICogKiBgbmdTd2l0Y2hXaGVuYDogdGhlIGNhc2Ugc3RhdGVtZW50IHRvIG1hdGNoIGFnYWluc3QuIElmIG1hdGNoIHRoZW4gdGhpc1xuICogICBjYXNlIHdpbGwgYmUgZGlzcGxheWVkLiBJZiB0aGUgc2FtZSBtYXRjaCBhcHBlYXJzIG11bHRpcGxlIHRpbWVzLCBhbGwgdGhlXG4gKiAgIGVsZW1lbnRzIHdpbGwgYmUgZGlzcGxheWVkLlxuICogKiBgbmdTd2l0Y2hEZWZhdWx0YDogdGhlIGRlZmF1bHQgY2FzZSB3aGVuIG5vIG90aGVyIGNhc2UgbWF0Y2guIElmIHRoZXJlXG4gKiAgIGFyZSBtdWx0aXBsZSBkZWZhdWx0IGNhc2VzLCBhbGwgb2YgdGhlbSB3aWxsIGJlIGRpc3BsYXllZCB3aGVuIG5vIG90aGVyXG4gKiAgIGNhc2UgbWF0Y2guXG4gKlxuICpcbiAqIEBleGFtcGxlXG4gIDxleGFtcGxlIG1vZHVsZT1cInN3aXRjaEV4YW1wbGVcIiBkZXBzPVwiYW5ndWxhci1hbmltYXRlLmpzXCIgYW5pbWF0aW9ucz1cInRydWVcIj5cbiAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cbiAgICAgICAgPHNlbGVjdCBuZy1tb2RlbD1cInNlbGVjdGlvblwiIG5nLW9wdGlvbnM9XCJpdGVtIGZvciBpdGVtIGluIGl0ZW1zXCI+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8dHQ+c2VsZWN0aW9uPXt7c2VsZWN0aW9ufX08L3R0PlxuICAgICAgICA8aHIvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYW5pbWF0ZS1zd2l0Y2gtY29udGFpbmVyXCJcbiAgICAgICAgICBuZy1zd2l0Y2ggb249XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbmltYXRlLXN3aXRjaFwiIG5nLXN3aXRjaC13aGVuPVwic2V0dGluZ3NcIj5TZXR0aW5ncyBEaXY8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbmltYXRlLXN3aXRjaFwiIG5nLXN3aXRjaC13aGVuPVwiaG9tZVwiPkhvbWUgU3BhbjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFuaW1hdGUtc3dpdGNoXCIgbmctc3dpdGNoLWRlZmF1bHQ+ZGVmYXVsdDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZmlsZT5cbiAgICA8ZmlsZSBuYW1lPVwic2NyaXB0LmpzXCI+XG4gICAgICBhbmd1bGFyLm1vZHVsZSgnc3dpdGNoRXhhbXBsZScsIFsnbmdBbmltYXRlJ10pXG4gICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XG4gICAgICAgICAgJHNjb3BlLml0ZW1zID0gWydzZXR0aW5ncycsICdob21lJywgJ290aGVyJ107XG4gICAgICAgICAgJHNjb3BlLnNlbGVjdGlvbiA9ICRzY29wZS5pdGVtc1swXTtcbiAgICAgICAgfV0pO1xuICAgIDwvZmlsZT5cbiAgICA8ZmlsZSBuYW1lPVwiYW5pbWF0aW9ucy5jc3NcIj5cbiAgICAgIC5hbmltYXRlLXN3aXRjaC1jb250YWluZXIge1xuICAgICAgICBwb3NpdGlvbjpyZWxhdGl2ZTtcbiAgICAgICAgYmFja2dyb3VuZDp3aGl0ZTtcbiAgICAgICAgYm9yZGVyOjFweCBzb2xpZCBibGFjaztcbiAgICAgICAgaGVpZ2h0OjQwcHg7XG4gICAgICAgIG92ZXJmbG93OmhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgLmFuaW1hdGUtc3dpdGNoIHtcbiAgICAgICAgcGFkZGluZzoxMHB4O1xuICAgICAgfVxuXG4gICAgICAuYW5pbWF0ZS1zd2l0Y2gubmctYW5pbWF0ZSB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjphbGwgY3ViaWMtYmV6aWVyKDAuMjUwLCAwLjQ2MCwgMC40NTAsIDAuOTQwKSAwLjVzO1xuICAgICAgICB0cmFuc2l0aW9uOmFsbCBjdWJpYy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1MCwgMC45NDApIDAuNXM7XG5cbiAgICAgICAgcG9zaXRpb246YWJzb2x1dGU7XG4gICAgICAgIHRvcDowO1xuICAgICAgICBsZWZ0OjA7XG4gICAgICAgIHJpZ2h0OjA7XG4gICAgICAgIGJvdHRvbTowO1xuICAgICAgfVxuXG4gICAgICAuYW5pbWF0ZS1zd2l0Y2gubmctbGVhdmUubmctbGVhdmUtYWN0aXZlLFxuICAgICAgLmFuaW1hdGUtc3dpdGNoLm5nLWVudGVyIHtcbiAgICAgICAgdG9wOi01MHB4O1xuICAgICAgfVxuICAgICAgLmFuaW1hdGUtc3dpdGNoLm5nLWxlYXZlLFxuICAgICAgLmFuaW1hdGUtc3dpdGNoLm5nLWVudGVyLm5nLWVudGVyLWFjdGl2ZSB7XG4gICAgICAgIHRvcDowO1xuICAgICAgfVxuICAgIDwvZmlsZT5cbiAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XG4gICAgICB2YXIgc3dpdGNoRWxlbSA9IGVsZW1lbnQoYnkuY3NzKCdbbmctc3dpdGNoXScpKTtcbiAgICAgIHZhciBzZWxlY3QgPSBlbGVtZW50KGJ5Lm1vZGVsKCdzZWxlY3Rpb24nKSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc3RhcnQgaW4gc2V0dGluZ3MnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgZXhwZWN0KHN3aXRjaEVsZW0uZ2V0VGV4dCgpKS50b01hdGNoKC9TZXR0aW5ncyBEaXYvKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBjaGFuZ2UgdG8gaG9tZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICBzZWxlY3QuYWxsKGJ5LmNzcygnb3B0aW9uJykpLmdldCgxKS5jbGljaygpO1xuICAgICAgICBleHBlY3Qoc3dpdGNoRWxlbS5nZXRUZXh0KCkpLnRvTWF0Y2goL0hvbWUgU3Bhbi8pO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHNlbGVjdCBkZWZhdWx0JywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGVjdC5hbGwoYnkuY3NzKCdvcHRpb24nKSkuZ2V0KDIpLmNsaWNrKCk7XG4gICAgICAgIGV4cGVjdChzd2l0Y2hFbGVtLmdldFRleHQoKSkudG9NYXRjaCgvZGVmYXVsdC8pO1xuICAgICAgfSk7XG4gICAgPC9maWxlPlxuICA8L2V4YW1wbGU+XG4gKi9cbnZhciBuZ1N3aXRjaERpcmVjdGl2ZSA9IFsnJGFuaW1hdGUnLCBmdW5jdGlvbigkYW5pbWF0ZSkge1xuICByZXR1cm4ge1xuICAgIHJlc3RyaWN0OiAnRUEnLFxuICAgIHJlcXVpcmU6ICduZ1N3aXRjaCcsXG5cbiAgICAvLyBhc2tzIGZvciAkc2NvcGUgdG8gZm9vbCB0aGUgQkMgY29udHJvbGxlciBtb2R1bGVcbiAgICBjb250cm9sbGVyOiBbJyRzY29wZScsIGZ1bmN0aW9uIG5nU3dpdGNoQ29udHJvbGxlcigpIHtcbiAgICAgdGhpcy5jYXNlcyA9IHt9O1xuICAgIH1dLFxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBuZ1N3aXRjaENvbnRyb2xsZXIpIHtcbiAgICAgIHZhciB3YXRjaEV4cHIgPSBhdHRyLm5nU3dpdGNoIHx8IGF0dHIub24sXG4gICAgICAgICAgc2VsZWN0ZWRUcmFuc2NsdWRlcyA9IFtdLFxuICAgICAgICAgIHNlbGVjdGVkRWxlbWVudHMgPSBbXSxcbiAgICAgICAgICBwcmV2aW91c0xlYXZlQW5pbWF0aW9ucyA9IFtdLFxuICAgICAgICAgIHNlbGVjdGVkU2NvcGVzID0gW107XG5cbiAgICAgIHZhciBzcGxpY2VGYWN0b3J5ID0gZnVuY3Rpb24oYXJyYXksIGluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyBhcnJheS5zcGxpY2UoaW5kZXgsIDEpOyB9O1xuICAgICAgfTtcblxuICAgICAgc2NvcGUuJHdhdGNoKHdhdGNoRXhwciwgZnVuY3Rpb24gbmdTd2l0Y2hXYXRjaEFjdGlvbih2YWx1ZSkge1xuICAgICAgICB2YXIgaSwgaWk7XG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gcHJldmlvdXNMZWF2ZUFuaW1hdGlvbnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICRhbmltYXRlLmNhbmNlbChwcmV2aW91c0xlYXZlQW5pbWF0aW9uc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXNMZWF2ZUFuaW1hdGlvbnMubGVuZ3RoID0gMDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHNlbGVjdGVkU2NvcGVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBnZXRCbG9ja05vZGVzKHNlbGVjdGVkRWxlbWVudHNbaV0uY2xvbmUpO1xuICAgICAgICAgIHNlbGVjdGVkU2NvcGVzW2ldLiRkZXN0cm95KCk7XG4gICAgICAgICAgdmFyIHByb21pc2UgPSBwcmV2aW91c0xlYXZlQW5pbWF0aW9uc1tpXSA9ICRhbmltYXRlLmxlYXZlKHNlbGVjdGVkKTtcbiAgICAgICAgICBwcm9taXNlLnRoZW4oc3BsaWNlRmFjdG9yeShwcmV2aW91c0xlYXZlQW5pbWF0aW9ucywgaSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPSAwO1xuICAgICAgICBzZWxlY3RlZFNjb3Blcy5sZW5ndGggPSAwO1xuXG4gICAgICAgIGlmICgoc2VsZWN0ZWRUcmFuc2NsdWRlcyA9IG5nU3dpdGNoQ29udHJvbGxlci5jYXNlc1snIScgKyB2YWx1ZV0gfHwgbmdTd2l0Y2hDb250cm9sbGVyLmNhc2VzWyc/J10pKSB7XG4gICAgICAgICAgZm9yRWFjaChzZWxlY3RlZFRyYW5zY2x1ZGVzLCBmdW5jdGlvbihzZWxlY3RlZFRyYW5zY2x1ZGUpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkVHJhbnNjbHVkZS50cmFuc2NsdWRlKGZ1bmN0aW9uKGNhc2VFbGVtZW50LCBzZWxlY3RlZFNjb3BlKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkU2NvcGVzLnB1c2goc2VsZWN0ZWRTY29wZSk7XG4gICAgICAgICAgICAgIHZhciBhbmNob3IgPSBzZWxlY3RlZFRyYW5zY2x1ZGUuZWxlbWVudDtcbiAgICAgICAgICAgICAgY2FzZUVsZW1lbnRbY2FzZUVsZW1lbnQubGVuZ3RoKytdID0gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnIGVuZCBuZ1N3aXRjaFdoZW46ICcpO1xuICAgICAgICAgICAgICB2YXIgYmxvY2sgPSB7IGNsb25lOiBjYXNlRWxlbWVudCB9O1xuXG4gICAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudHMucHVzaChibG9jayk7XG4gICAgICAgICAgICAgICRhbmltYXRlLmVudGVyKGNhc2VFbGVtZW50LCBhbmNob3IucGFyZW50KCksIGFuY2hvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufV07XG5cbnZhciBuZ1N3aXRjaFdoZW5EaXJlY3RpdmUgPSBuZ0RpcmVjdGl2ZSh7XG4gIHRyYW5zY2x1ZGU6ICdlbGVtZW50JyxcbiAgcHJpb3JpdHk6IDEyMDAsXG4gIHJlcXVpcmU6ICdebmdTd2l0Y2gnLFxuICBtdWx0RWxlbWVudDogdHJ1ZSxcbiAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzLCBjdHJsLCAkdHJhbnNjbHVkZSkge1xuICAgIGN0cmwuY2FzZXNbJyEnICsgYXR0cnMubmdTd2l0Y2hXaGVuXSA9IChjdHJsLmNhc2VzWychJyArIGF0dHJzLm5nU3dpdGNoV2hlbl0gfHwgW10pO1xuICAgIGN0cmwuY2FzZXNbJyEnICsgYXR0cnMubmdTd2l0Y2hXaGVuXS5wdXNoKHsgdHJhbnNjbHVkZTogJHRyYW5zY2x1ZGUsIGVsZW1lbnQ6IGVsZW1lbnQgfSk7XG4gIH1cbn0pO1xuXG52YXIgbmdTd2l0Y2hEZWZhdWx0RGlyZWN0aXZlID0gbmdEaXJlY3RpdmUoe1xuICB0cmFuc2NsdWRlOiAnZWxlbWVudCcsXG4gIHByaW9yaXR5OiAxMjAwLFxuICByZXF1aXJlOiAnXm5nU3dpdGNoJyxcbiAgbXVsdEVsZW1lbnQ6IHRydWUsXG4gIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkdHJhbnNjbHVkZSkge1xuICAgIGN0cmwuY2FzZXNbJz8nXSA9IChjdHJsLmNhc2VzWyc/J10gfHwgW10pO1xuICAgIGN0cmwuY2FzZXNbJz8nXS5wdXNoKHsgdHJhbnNjbHVkZTogJHRyYW5zY2x1ZGUsIGVsZW1lbnQ6IGVsZW1lbnQgfSk7XG4gICB9XG59KTtcblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBuZ1RyYW5zY2x1ZGVcbiAqIEByZXN0cmljdCBFQUNcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIERpcmVjdGl2ZSB0aGF0IG1hcmtzIHRoZSBpbnNlcnRpb24gcG9pbnQgZm9yIHRoZSB0cmFuc2NsdWRlZCBET00gb2YgdGhlIG5lYXJlc3QgcGFyZW50IGRpcmVjdGl2ZSB0aGF0IHVzZXMgdHJhbnNjbHVzaW9uLlxuICpcbiAqIEFueSBleGlzdGluZyBjb250ZW50IG9mIHRoZSBlbGVtZW50IHRoYXQgdGhpcyBkaXJlY3RpdmUgaXMgcGxhY2VkIG9uIHdpbGwgYmUgcmVtb3ZlZCBiZWZvcmUgdGhlIHRyYW5zY2x1ZGVkIGNvbnRlbnQgaXMgaW5zZXJ0ZWQuXG4gKlxuICogQGVsZW1lbnQgQU5ZXG4gKlxuICogQGV4YW1wbGVcbiAgIDxleGFtcGxlIG1vZHVsZT1cInRyYW5zY2x1ZGVFeGFtcGxlXCI+XG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XG4gICAgICAgPHNjcmlwdD5cbiAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCd0cmFuc2NsdWRlRXhhbXBsZScsIFtdKVxuICAgICAgICAgIC5kaXJlY3RpdmUoJ3BhbmUnLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICAgICAgICAgdHJhbnNjbHVkZTogdHJ1ZSxcbiAgICAgICAgICAgICAgIHNjb3BlOiB7IHRpdGxlOidAJyB9LFxuICAgICAgICAgICAgICAgdGVtcGxhdGU6ICc8ZGl2IHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgYmxhY2s7XCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IGdyYXlcIj57e3RpdGxlfX08L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bmctdHJhbnNjbHVkZT48L25nLXRyYW5zY2x1ZGU+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PidcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgfSlcbiAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XG4gICAgICAgICAgICRzY29wZS50aXRsZSA9ICdMb3JlbSBJcHN1bSc7XG4gICAgICAgICAgICRzY29wZS50ZXh0ID0gJ05lcXVlIHBvcnJvIHF1aXNxdWFtIGVzdCBxdWkgZG9sb3JlbSBpcHN1bSBxdWlhIGRvbG9yLi4uJztcbiAgICAgICAgIH1dKTtcbiAgICAgICA8L3NjcmlwdD5cbiAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxuICAgICAgICAgPGlucHV0IG5nLW1vZGVsPVwidGl0bGVcIj48YnI+XG4gICAgICAgICA8dGV4dGFyZWEgbmctbW9kZWw9XCJ0ZXh0XCI+PC90ZXh0YXJlYT4gPGJyLz5cbiAgICAgICAgIDxwYW5lIHRpdGxlPVwie3t0aXRsZX19XCI+e3t0ZXh0fX08L3BhbmU+XG4gICAgICAgPC9kaXY+XG4gICAgIDwvZmlsZT5cbiAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgdHJhbnNjbHVkZWQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgdGl0bGVFbGVtZW50ID0gZWxlbWVudChieS5tb2RlbCgndGl0bGUnKSk7XG4gICAgICAgICAgdGl0bGVFbGVtZW50LmNsZWFyKCk7XG4gICAgICAgICAgdGl0bGVFbGVtZW50LnNlbmRLZXlzKCdUSVRMRScpO1xuICAgICAgICAgIHZhciB0ZXh0RWxlbWVudCA9IGVsZW1lbnQoYnkubW9kZWwoJ3RleHQnKSk7XG4gICAgICAgICAgdGV4dEVsZW1lbnQuY2xlYXIoKTtcbiAgICAgICAgICB0ZXh0RWxlbWVudC5zZW5kS2V5cygnVEVYVCcpO1xuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJ3RpdGxlJykpLmdldFRleHQoKSkudG9FcXVhbCgnVElUTEUnKTtcbiAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCd0ZXh0JykpLmdldFRleHQoKSkudG9FcXVhbCgnVEVYVCcpO1xuICAgICAgICB9KTtcbiAgICAgPC9maWxlPlxuICAgPC9leGFtcGxlPlxuICpcbiAqL1xudmFyIG5nVHJhbnNjbHVkZURpcmVjdGl2ZSA9IG5nRGlyZWN0aXZlKHtcbiAgcmVzdHJpY3Q6ICdFQUMnLFxuICBsaW5rOiBmdW5jdGlvbigkc2NvcGUsICRlbGVtZW50LCAkYXR0cnMsIGNvbnRyb2xsZXIsICR0cmFuc2NsdWRlKSB7XG4gICAgaWYgKCEkdHJhbnNjbHVkZSkge1xuICAgICAgdGhyb3cgbWluRXJyKCduZ1RyYW5zY2x1ZGUnKSgnb3JwaGFuJyxcbiAgICAgICAnSWxsZWdhbCB1c2Ugb2YgbmdUcmFuc2NsdWRlIGRpcmVjdGl2ZSBpbiB0aGUgdGVtcGxhdGUhICcgK1xuICAgICAgICdObyBwYXJlbnQgZGlyZWN0aXZlIHRoYXQgcmVxdWlyZXMgYSB0cmFuc2NsdXNpb24gZm91bmQuICcgK1xuICAgICAgICdFbGVtZW50OiB7MH0nLFxuICAgICAgIHN0YXJ0aW5nVGFnKCRlbGVtZW50KSk7XG4gICAgfVxuXG4gICAgJHRyYW5zY2x1ZGUoZnVuY3Rpb24oY2xvbmUpIHtcbiAgICAgICRlbGVtZW50LmVtcHR5KCk7XG4gICAgICAkZWxlbWVudC5hcHBlbmQoY2xvbmUpO1xuICAgIH0pO1xuICB9XG59KTtcblxuLyoqXG4gKiBAbmdkb2MgZGlyZWN0aXZlXG4gKiBAbmFtZSBzY3JpcHRcbiAqIEByZXN0cmljdCBFXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBMb2FkIHRoZSBjb250ZW50IG9mIGEgYDxzY3JpcHQ+YCBlbGVtZW50IGludG8ge0BsaW5rIG5nLiR0ZW1wbGF0ZUNhY2hlIGAkdGVtcGxhdGVDYWNoZWB9LCBzbyB0aGF0IHRoZVxuICogdGVtcGxhdGUgY2FuIGJlIHVzZWQgYnkge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0luY2x1ZGUgYG5nSW5jbHVkZWB9LFxuICoge0BsaW5rIG5nUm91dGUuZGlyZWN0aXZlOm5nVmlldyBgbmdWaWV3YH0sIG9yIHtAbGluayBndWlkZS9kaXJlY3RpdmUgZGlyZWN0aXZlc30uIFRoZSB0eXBlIG9mIHRoZVxuICogYDxzY3JpcHQ+YCBlbGVtZW50IG11c3QgYmUgc3BlY2lmaWVkIGFzIGB0ZXh0L25nLXRlbXBsYXRlYCwgYW5kIGEgY2FjaGUgbmFtZSBmb3IgdGhlIHRlbXBsYXRlIG11c3QgYmVcbiAqIGFzc2lnbmVkIHRocm91Z2ggdGhlIGVsZW1lbnQncyBgaWRgLCB3aGljaCBjYW4gdGhlbiBiZSB1c2VkIGFzIGEgZGlyZWN0aXZlJ3MgYHRlbXBsYXRlVXJsYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBNdXN0IGJlIHNldCB0byBgJ3RleHQvbmctdGVtcGxhdGUnYC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBDYWNoZSBuYW1lIG9mIHRoZSB0ZW1wbGF0ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICA8ZXhhbXBsZT5cbiAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dC9uZy10ZW1wbGF0ZVwiIGlkPVwiL3RwbC5odG1sXCI+XG4gICAgICAgIENvbnRlbnQgb2YgdGhlIHRlbXBsYXRlLlxuICAgICAgPC9zY3JpcHQ+XG5cbiAgICAgIDxhIG5nLWNsaWNrPVwiY3VycmVudFRwbD0nL3RwbC5odG1sJ1wiIGlkPVwidHBsLWxpbmtcIj5Mb2FkIGlubGluZWQgdGVtcGxhdGU8L2E+XG4gICAgICA8ZGl2IGlkPVwidHBsLWNvbnRlbnRcIiBuZy1pbmNsdWRlIHNyYz1cImN1cnJlbnRUcGxcIj48L2Rpdj5cbiAgICA8L2ZpbGU+XG4gICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgaXQoJ3Nob3VsZCBsb2FkIHRlbXBsYXRlIGRlZmluZWQgaW5zaWRlIHNjcmlwdCB0YWcnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgZWxlbWVudChieS5jc3MoJyN0cGwtbGluaycpKS5jbGljaygpO1xuICAgICAgICBleHBlY3QoZWxlbWVudChieS5jc3MoJyN0cGwtY29udGVudCcpKS5nZXRUZXh0KCkpLnRvTWF0Y2goL0NvbnRlbnQgb2YgdGhlIHRlbXBsYXRlLyk7XG4gICAgICB9KTtcbiAgICA8L2ZpbGU+XG4gIDwvZXhhbXBsZT5cbiAqL1xudmFyIHNjcmlwdERpcmVjdGl2ZSA9IFsnJHRlbXBsYXRlQ2FjaGUnLCBmdW5jdGlvbigkdGVtcGxhdGVDYWNoZSkge1xuICByZXR1cm4ge1xuICAgIHJlc3RyaWN0OiAnRScsXG4gICAgdGVybWluYWw6IHRydWUsXG4gICAgY29tcGlsZTogZnVuY3Rpb24oZWxlbWVudCwgYXR0cikge1xuICAgICAgaWYgKGF0dHIudHlwZSA9PSAndGV4dC9uZy10ZW1wbGF0ZScpIHtcbiAgICAgICAgdmFyIHRlbXBsYXRlVXJsID0gYXR0ci5pZCxcbiAgICAgICAgICAgIC8vIElFIGlzIG5vdCBjb25zaXN0ZW50LCBpbiBzY3JpcHRzIHdlIGhhdmUgdG8gcmVhZCAudGV4dCBidXQgaW4gb3RoZXIgbm9kZXMgd2UgaGF2ZSB0byByZWFkIC50ZXh0Q29udGVudFxuICAgICAgICAgICAgdGV4dCA9IGVsZW1lbnRbMF0udGV4dDtcblxuICAgICAgICAkdGVtcGxhdGVDYWNoZS5wdXQodGVtcGxhdGVVcmwsIHRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1dO1xuXG52YXIgbmdPcHRpb25zTWluRXJyID0gbWluRXJyKCduZ09wdGlvbnMnKTtcbi8qKlxuICogQG5nZG9jIGRpcmVjdGl2ZVxuICogQG5hbWUgc2VsZWN0XG4gKiBAcmVzdHJpY3QgRVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSFRNTCBgU0VMRUNUYCBlbGVtZW50IHdpdGggYW5ndWxhciBkYXRhLWJpbmRpbmcuXG4gKlxuICogIyBgbmdPcHRpb25zYFxuICpcbiAqIFRoZSBgbmdPcHRpb25zYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gZHluYW1pY2FsbHkgZ2VuZXJhdGUgYSBsaXN0IG9mIGA8b3B0aW9uPmBcbiAqIGVsZW1lbnRzIGZvciB0aGUgYDxzZWxlY3Q+YCBlbGVtZW50IHVzaW5nIHRoZSBhcnJheSBvciBvYmplY3Qgb2J0YWluZWQgYnkgZXZhbHVhdGluZyB0aGVcbiAqIGBuZ09wdGlvbnNgIGNvbXByZWhlbnNpb25fZXhwcmVzc2lvbi5cbiAqXG4gKiBJbiBtYW55IGNhc2VzLCBgbmdSZXBlYXRgIGNhbiBiZSB1c2VkIG9uIGA8b3B0aW9uPmAgZWxlbWVudHMgaW5zdGVhZCBvZiBgbmdPcHRpb25zYCB0byBhY2hpZXZlIGFcbiAqIHNpbWlsYXIgcmVzdWx0LiBIb3dldmVyLCB0aGUgYG5nT3B0aW9uc2AgcHJvdmlkZXMgc29tZSBiZW5lZml0cyBzdWNoIGFzIHJlZHVjaW5nIG1lbW9yeSBhbmRcbiAqIGluY3JlYXNpbmcgc3BlZWQgYnkgbm90IGNyZWF0aW5nIGEgbmV3IHNjb3BlIGZvciBlYWNoIHJlcGVhdGVkIGluc3RhbmNlLCBhcyB3ZWxsIGFzIHByb3ZpZGluZ1xuICogbW9yZSBmbGV4aWJpbGl0eSBpbiBob3cgdGhlIGBzZWxlY3RgJ3MgbW9kZWwgaXMgYXNzaWduZWQgdmlhIGBzZWxlY3QgYXNgLiBgbmdPcHRpb25zYCBzaG91bGQgYmVcbiAqIHVzZWQgd2hlbiB0aGUgYHNlbGVjdGAgbW9kZWwgbmVlZHMgdG8gYmUgYm91bmQgdG8gYSBub24tc3RyaW5nIHZhbHVlLiBUaGlzIGlzIGJlY2F1c2UgYW4gb3B0aW9uXG4gKiBlbGVtZW50IGNhbiBvbmx5IGJlIGJvdW5kIHRvIHN0cmluZyB2YWx1ZXMgYXQgcHJlc2VudC5cbiAqXG4gKiBXaGVuIGFuIGl0ZW0gaW4gdGhlIGA8c2VsZWN0PmAgbWVudSBpcyBzZWxlY3RlZCwgdGhlIGFycmF5IGVsZW1lbnQgb3Igb2JqZWN0IHByb3BlcnR5XG4gKiByZXByZXNlbnRlZCBieSB0aGUgc2VsZWN0ZWQgb3B0aW9uIHdpbGwgYmUgYm91bmQgdG8gdGhlIG1vZGVsIGlkZW50aWZpZWQgYnkgdGhlIGBuZ01vZGVsYFxuICogZGlyZWN0aXZlLlxuICpcbiAqIE9wdGlvbmFsbHksIGEgc2luZ2xlIGhhcmQtY29kZWQgYDxvcHRpb24+YCBlbGVtZW50LCB3aXRoIHRoZSB2YWx1ZSBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nLCBjYW5cbiAqIGJlIG5lc3RlZCBpbnRvIHRoZSBgPHNlbGVjdD5gIGVsZW1lbnQuIFRoaXMgZWxlbWVudCB3aWxsIHRoZW4gcmVwcmVzZW50IHRoZSBgbnVsbGAgb3IgXCJub3Qgc2VsZWN0ZWRcIlxuICogb3B0aW9uLiBTZWUgZXhhbXBsZSBiZWxvdyBmb3IgZGVtb25zdHJhdGlvbi5cbiAqXG4gKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiPlxuICogKipOb3RlOioqIGBuZ01vZGVsYCBjb21wYXJlcyBieSByZWZlcmVuY2UsIG5vdCB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiBiaW5kaW5nIHRvIGFuXG4gKiBhcnJheSBvZiBvYmplY3RzLiBTZWUgYW4gZXhhbXBsZSBbaW4gdGhpcyBqc2ZpZGRsZV0oaHR0cDovL2pzZmlkZGxlLm5ldC9xV3pUYi8pLlxuICogPC9kaXY+XG4gKlxuICogIyMgYHNlbGVjdCBhc2BcbiAqXG4gKiBVc2luZyBgc2VsZWN0IGFzYCB3aWxsIGJpbmQgdGhlIHJlc3VsdCBvZiB0aGUgYHNlbGVjdCBhc2AgZXhwcmVzc2lvbiB0byB0aGUgbW9kZWwsIGJ1dFxuICogdGhlIHZhbHVlIG9mIHRoZSBgPHNlbGVjdD5gIGFuZCBgPG9wdGlvbj5gIGh0bWwgZWxlbWVudHMgd2lsbCBiZSBlaXRoZXIgdGhlIGluZGV4IChmb3IgYXJyYXkgZGF0YSBzb3VyY2VzKVxuICogb3IgcHJvcGVydHkgbmFtZSAoZm9yIG9iamVjdCBkYXRhIHNvdXJjZXMpIG9mIHRoZSB2YWx1ZSB3aXRoaW4gdGhlIGNvbGxlY3Rpb24uIElmIGEgYHRyYWNrIGJ5YCBleHByZXNzaW9uXG4gKiBpcyB1c2VkLCB0aGUgcmVzdWx0IG9mIHRoYXQgZXhwcmVzc2lvbiB3aWxsIGJlIHNldCBhcyB0aGUgdmFsdWUgb2YgdGhlIGBvcHRpb25gIGFuZCBgc2VsZWN0YCBlbGVtZW50cy5cbiAqXG4gKiAjIyMgYHNlbGVjdCBhc2Agd2l0aCBgdHJhY2tleHByYFxuICpcbiAqIFVzaW5nIGBzZWxlY3QgYXNgIHRvZ2V0aGVyIHdpdGggYHRyYWNrZXhwcmAgaXMgbm90IHJlY29tbWVuZGVkLiBSZWFzb25pbmc6XG4gKlxuICogLSBFeGFtcGxlOiAmbHQ7c2VsZWN0IG5nLW9wdGlvbnM9XCJpdGVtLnN1Ykl0ZW0gYXMgaXRlbS5sYWJlbCBmb3IgaXRlbSBpbiB2YWx1ZXMgdHJhY2sgYnkgaXRlbS5pZFwiIG5nLW1vZGVsPVwic2VsZWN0ZWRcIiZndDtcbiAqICAgdmFsdWVzOiBbe2lkOiAxLCBsYWJlbDogJ2FMYWJlbCcsIHN1Ykl0ZW06IHtuYW1lOiAnYVN1Ykl0ZW0nfX0sIHtpZDogMiwgbGFiZWw6ICdiTGFiZWwnLCBzdWJJdGVtOiB7bmFtZTogJ2JTdWJJdGVtJ319XSxcbiAqICAgJHNjb3BlLnNlbGVjdGVkID0ge25hbWU6ICdhU3ViSXRlbSd9O1xuICogLSB0cmFjayBieSBpcyBhbHdheXMgYXBwbGllZCB0byBgdmFsdWVgLCB3aXRoIHRoZSBwdXJwb3NlIG9mIHByZXNlcnZpbmcgdGhlIHNlbGVjdGlvbixcbiAqICAgKHRvIGBpdGVtYCBpbiB0aGlzIGNhc2UpXG4gKiAtIHRvIGNhbGN1bGF0ZSB3aGV0aGVyIGFuIGl0ZW0gaXMgc2VsZWN0ZWQgd2UgZG8gdGhlIGZvbGxvd2luZzpcbiAqICAgMS4gYXBwbHkgYHRyYWNrIGJ5YCB0byB0aGUgdmFsdWVzIGluIHRoZSBhcnJheSwgZS5nLlxuICogICAgICBJbiB0aGUgZXhhbXBsZTogWzEsMl1cbiAqICAgMi4gYXBwbHkgYHRyYWNrIGJ5YCB0byB0aGUgYWxyZWFkeSBzZWxlY3RlZCB2YWx1ZSBpbiBgbmdNb2RlbGA6XG4gKiAgICAgIEluIHRoZSBleGFtcGxlOiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYXMgYHRyYWNrIGJ5YCByZWZlcnMgdG8gYGl0ZW0uaWRgLCBidXQgdGhlIHNlbGVjdGVkXG4gKiAgICAgIHZhbHVlIGZyb20gYG5nTW9kZWxgIGlzIGB7bmFtZTogYVN1Ykl0ZW19YC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uXG4gKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuXG4gKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFRoZSBjb250cm9sIGlzIGNvbnNpZGVyZWQgdmFsaWQgb25seSBpZiB2YWx1ZSBpcyBlbnRlcmVkLlxuICogQHBhcmFtIHtzdHJpbmc9fSBuZ1JlcXVpcmVkIEFkZHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgYW5kIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBjb25zdHJhaW50IHRvXG4gKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZlxuICogICAgYHJlcXVpcmVkYCB3aGVuIHlvdSB3YW50IHRvIGRhdGEtYmluZCB0byB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUuXG4gKiBAcGFyYW0ge2NvbXByZWhlbnNpb25fZXhwcmVzc2lvbj19IG5nT3B0aW9ucyBpbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczpcbiAqXG4gKiAgICogZm9yIGFycmF5IGRhdGEgc291cmNlczpcbiAqICAgICAqIGBsYWJlbGAgKipgZm9yYCoqIGB2YWx1ZWAgKipgaW5gKiogYGFycmF5YFxuICogICAgICogYHNlbGVjdGAgKipgYXNgKiogYGxhYmVsYCAqKmBmb3JgKiogYHZhbHVlYCAqKmBpbmAqKiBgYXJyYXlgXG4gKiAgICAgKiBgbGFiZWxgICAqKmBncm91cCBieWAqKiBgZ3JvdXBgICoqYGZvcmAqKiBgdmFsdWVgICoqYGluYCoqIGBhcnJheWBcbiAqICAgICAqIGBzZWxlY3RgICoqYGFzYCoqIGBsYWJlbGAgKipgZ3JvdXAgYnlgKiogYGdyb3VwYCAqKmBmb3JgKiogYHZhbHVlYCAqKmBpbmAqKiBgYXJyYXlgICoqYHRyYWNrIGJ5YCoqIGB0cmFja2V4cHJgXG4gKiAgICogZm9yIG9iamVjdCBkYXRhIHNvdXJjZXM6XG4gKiAgICAgKiBgbGFiZWxgICoqYGZvciAoYCoqYGtleWAgKipgLGAqKiBgdmFsdWVgKipgKSBpbmAqKiBgb2JqZWN0YFxuICogICAgICogYHNlbGVjdGAgKipgYXNgKiogYGxhYmVsYCAqKmBmb3IgKGAqKmBrZXlgICoqYCxgKiogYHZhbHVlYCoqYCkgaW5gKiogYG9iamVjdGBcbiAqICAgICAqIGBsYWJlbGAgKipgZ3JvdXAgYnlgKiogYGdyb3VwYCAqKmBmb3IgKGAqKmBrZXlgKipgLGAqKiBgdmFsdWVgKipgKSBpbmAqKiBgb2JqZWN0YFxuICogICAgICogYHNlbGVjdGAgKipgYXNgKiogYGxhYmVsYCAqKmBncm91cCBieWAqKiBgZ3JvdXBgXG4gKiAgICAgICAgICoqYGZvcmAgYChgKipga2V5YCoqYCxgKiogYHZhbHVlYCoqYCkgaW5gKiogYG9iamVjdGBcbiAqXG4gKiBXaGVyZTpcbiAqXG4gKiAgICogYGFycmF5YCAvIGBvYmplY3RgOiBhbiBleHByZXNzaW9uIHdoaWNoIGV2YWx1YXRlcyB0byBhbiBhcnJheSAvIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiAgICogYHZhbHVlYDogbG9jYWwgdmFyaWFibGUgd2hpY2ggd2lsbCByZWZlciB0byBlYWNoIGl0ZW0gaW4gdGhlIGBhcnJheWAgb3IgZWFjaCBwcm9wZXJ0eSB2YWx1ZVxuICogICAgICBvZiBgb2JqZWN0YCBkdXJpbmcgaXRlcmF0aW9uLlxuICogICAqIGBrZXlgOiBsb2NhbCB2YXJpYWJsZSB3aGljaCB3aWxsIHJlZmVyIHRvIGEgcHJvcGVydHkgbmFtZSBpbiBgb2JqZWN0YCBkdXJpbmcgaXRlcmF0aW9uLlxuICogICAqIGBsYWJlbGA6IFRoZSByZXN1bHQgb2YgdGhpcyBleHByZXNzaW9uIHdpbGwgYmUgdGhlIGxhYmVsIGZvciBgPG9wdGlvbj5gIGVsZW1lbnQuIFRoZVxuICogICAgIGBleHByZXNzaW9uYCB3aWxsIG1vc3QgbGlrZWx5IHJlZmVyIHRvIHRoZSBgdmFsdWVgIHZhcmlhYmxlIChlLmcuIGB2YWx1ZS5wcm9wZXJ0eU5hbWVgKS5cbiAqICAgKiBgc2VsZWN0YDogVGhlIHJlc3VsdCBvZiB0aGlzIGV4cHJlc3Npb24gd2lsbCBiZSBib3VuZCB0byB0aGUgbW9kZWwgb2YgdGhlIHBhcmVudCBgPHNlbGVjdD5gXG4gKiAgICAgIGVsZW1lbnQuIElmIG5vdCBzcGVjaWZpZWQsIGBzZWxlY3RgIGV4cHJlc3Npb24gd2lsbCBkZWZhdWx0IHRvIGB2YWx1ZWAuXG4gKiAgICogYGdyb3VwYDogVGhlIHJlc3VsdCBvZiB0aGlzIGV4cHJlc3Npb24gd2lsbCBiZSB1c2VkIHRvIGdyb3VwIG9wdGlvbnMgdXNpbmcgdGhlIGA8b3B0Z3JvdXA+YFxuICogICAgICBET00gZWxlbWVudC5cbiAqICAgKiBgdHJhY2tleHByYDogVXNlZCB3aGVuIHdvcmtpbmcgd2l0aCBhbiBhcnJheSBvZiBvYmplY3RzLiBUaGUgcmVzdWx0IG9mIHRoaXMgZXhwcmVzc2lvbiB3aWxsIGJlXG4gKiAgICAgIHVzZWQgdG8gaWRlbnRpZnkgdGhlIG9iamVjdHMgaW4gdGhlIGFycmF5LiBUaGUgYHRyYWNrZXhwcmAgd2lsbCBtb3N0IGxpa2VseSByZWZlciB0byB0aGVcbiAqICAgICBgdmFsdWVgIHZhcmlhYmxlIChlLmcuIGB2YWx1ZS5wcm9wZXJ0eU5hbWVgKS4gV2l0aCB0aGlzIHRoZSBzZWxlY3Rpb24gaXMgcHJlc2VydmVkXG4gKiAgICAgIGV2ZW4gd2hlbiB0aGUgb3B0aW9ucyBhcmUgcmVjcmVhdGVkIChlLmcuIHJlbG9hZGVkIGZyb20gdGhlIHNlcnZlcikuXG4gKlxuICogQGV4YW1wbGVcbiAgICA8ZXhhbXBsZSBtb2R1bGU9XCJzZWxlY3RFeGFtcGxlXCI+XG4gICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxuICAgICAgICA8c2NyaXB0PlxuICAgICAgICBhbmd1bGFyLm1vZHVsZSgnc2VsZWN0RXhhbXBsZScsIFtdKVxuICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XG4gICAgICAgICAgICAkc2NvcGUuY29sb3JzID0gW1xuICAgICAgICAgICAgICB7bmFtZTonYmxhY2snLCBzaGFkZTonZGFyayd9LFxuICAgICAgICAgICAgICB7bmFtZTond2hpdGUnLCBzaGFkZTonbGlnaHQnfSxcbiAgICAgICAgICAgICAge25hbWU6J3JlZCcsIHNoYWRlOidkYXJrJ30sXG4gICAgICAgICAgICAgIHtuYW1lOidibHVlJywgc2hhZGU6J2RhcmsnfSxcbiAgICAgICAgICAgICAge25hbWU6J3llbGxvdycsIHNoYWRlOidsaWdodCd9XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgJHNjb3BlLm15Q29sb3IgPSAkc2NvcGUuY29sb3JzWzJdOyAvLyByZWRcbiAgICAgICAgICB9XSk7XG4gICAgICAgIDwvc2NyaXB0PlxuICAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxuICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgIDxsaSBuZy1yZXBlYXQ9XCJjb2xvciBpbiBjb2xvcnNcIj5cbiAgICAgICAgICAgICAgTmFtZTogPGlucHV0IG5nLW1vZGVsPVwiY29sb3IubmFtZVwiPlxuICAgICAgICAgICAgICBbPGEgaHJlZiBuZy1jbGljaz1cImNvbG9ycy5zcGxpY2UoJGluZGV4LCAxKVwiPlg8L2E+XVxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgWzxhIGhyZWYgbmctY2xpY2s9XCJjb2xvcnMucHVzaCh7fSlcIj5hZGQ8L2E+XVxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDxoci8+XG4gICAgICAgICAgQ29sb3IgKG51bGwgbm90IGFsbG93ZWQpOlxuICAgICAgICAgIDxzZWxlY3QgbmctbW9kZWw9XCJteUNvbG9yXCIgbmctb3B0aW9ucz1cImNvbG9yLm5hbWUgZm9yIGNvbG9yIGluIGNvbG9yc1wiPjwvc2VsZWN0Pjxicj5cblxuICAgICAgICAgIENvbG9yIChudWxsIGFsbG93ZWQpOlxuICAgICAgICAgIDxzcGFuICBjbGFzcz1cIm51bGxhYmxlXCI+XG4gICAgICAgICAgICA8c2VsZWN0IG5nLW1vZGVsPVwibXlDb2xvclwiIG5nLW9wdGlvbnM9XCJjb2xvci5uYW1lIGZvciBjb2xvciBpbiBjb2xvcnNcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIGNob29zZSBjb2xvciAtLTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9zcGFuPjxici8+XG5cbiAgICAgICAgICBDb2xvciBncm91cGVkIGJ5IHNoYWRlOlxuICAgICAgICAgIDxzZWxlY3QgbmctbW9kZWw9XCJteUNvbG9yXCIgbmctb3B0aW9ucz1cImNvbG9yLm5hbWUgZ3JvdXAgYnkgY29sb3Iuc2hhZGUgZm9yIGNvbG9yIGluIGNvbG9yc1wiPlxuICAgICAgICAgIDwvc2VsZWN0Pjxici8+XG5cblxuICAgICAgICAgIFNlbGVjdCA8YSBocmVmIG5nLWNsaWNrPVwibXlDb2xvciA9IHsgbmFtZTonbm90IGluIGxpc3QnLCBzaGFkZTogJ290aGVyJyB9XCI+Ym9ndXM8L2E+Ljxicj5cbiAgICAgICAgICA8aHIvPlxuICAgICAgICAgIEN1cnJlbnRseSBzZWxlY3RlZDoge3sge3NlbGVjdGVkX2NvbG9yOm15Q29sb3J9IH19XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImJvcmRlcjpzb2xpZCAxcHggYmxhY2s7IGhlaWdodDoyMHB4XCJcbiAgICAgICAgICAgICAgIG5nLXN0eWxlPVwieydiYWNrZ3JvdW5kLWNvbG9yJzpteUNvbG9yLm5hbWV9XCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9maWxlPlxuICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxuICAgICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1vcHRpb25zJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJ3tzZWxlY3RlZF9jb2xvcjpteUNvbG9yfScpKS5nZXRUZXh0KCkpLnRvTWF0Y2goJ3JlZCcpO1xuICAgICAgICAgICBlbGVtZW50LmFsbChieS5tb2RlbCgnbXlDb2xvcicpKS5maXJzdCgpLmNsaWNrKCk7XG4gICAgICAgICAgIGVsZW1lbnQuYWxsKGJ5LmNzcygnc2VsZWN0W25nLW1vZGVsPVwibXlDb2xvclwiXSBvcHRpb24nKSkuZmlyc3QoKS5jbGljaygpO1xuICAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCd7c2VsZWN0ZWRfY29sb3I6bXlDb2xvcn0nKSkuZ2V0VGV4dCgpKS50b01hdGNoKCdibGFjaycpO1xuICAgICAgICAgICBlbGVtZW50KGJ5LmNzcygnLm51bGxhYmxlIHNlbGVjdFtuZy1tb2RlbD1cIm15Q29sb3JcIl0nKSkuY2xpY2soKTtcbiAgICAgICAgICAgZWxlbWVudC5hbGwoYnkuY3NzKCcubnVsbGFibGUgc2VsZWN0W25nLW1vZGVsPVwibXlDb2xvclwiXSBvcHRpb24nKSkuZmlyc3QoKS5jbGljaygpO1xuICAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCd7c2VsZWN0ZWRfY29sb3I6bXlDb2xvcn0nKSkuZ2V0VGV4dCgpKS50b01hdGNoKCdudWxsJyk7XG4gICAgICAgICB9KTtcbiAgICAgIDwvZmlsZT5cbiAgICA8L2V4YW1wbGU+XG4gKi9cblxudmFyIG5nT3B0aW9uc0RpcmVjdGl2ZSA9IHZhbHVlRm4oe1xuICByZXN0cmljdDogJ0EnLFxuICB0ZXJtaW5hbDogdHJ1ZVxufSk7XG5cbi8vIGpzaGludCBtYXhsZW46IGZhbHNlXG52YXIgc2VsZWN0RGlyZWN0aXZlID0gWyckY29tcGlsZScsICckcGFyc2UnLCBmdW5jdGlvbigkY29tcGlsZSwgICAkcGFyc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAvLzAwMDAxMTExMTExMTExMDAwMDAwMDAwMDAyMjIyMjIyMjIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMzMzMzMzMzMzAwMDAwMDAwMDAwMDAwNDQ0NDQ0NDQ0NDQ0NDQ0MDAwMDAwMDAwNTU1NTU1NTU1NTU1NTU1MDAwMDAwMDY2NjY2NjY2NjY2NjY2NjAwMDAwMDAwMDAwMDAwMDc3Nzc3Nzc3NzcwMDAwMDAwMDAwMDAwMDAwMDAwODg4ODg4ODg4OFxuICB2YXIgTkdfT1BUSU9OU19SRUdFWFAgPSAvXlxccyooW1xcc1xcU10rPykoPzpcXHMrYXNcXHMrKFtcXHNcXFNdKz8pKT8oPzpcXHMrZ3JvdXBcXHMrYnlcXHMrKFtcXHNcXFNdKz8pKT9cXHMrZm9yXFxzKyg/OihbXFwkXFx3XVtcXCRcXHddKil8KD86XFwoXFxzKihbXFwkXFx3XVtcXCRcXHddKilcXHMqLFxccyooW1xcJFxcd11bXFwkXFx3XSopXFxzKlxcKSkpXFxzK2luXFxzKyhbXFxzXFxTXSs/KSg/Olxccyt0cmFja1xccytieVxccysoW1xcc1xcU10rPykpPyQvLFxuICAgICAgbnVsbE1vZGVsQ3RybCA9IHskc2V0Vmlld1ZhbHVlOiBub29wfTtcbi8vIGpzaGludCBtYXhsZW46IDEwMFxuXG4gIHJldHVybiB7XG4gICAgcmVzdHJpY3Q6ICdFJyxcbiAgICByZXF1aXJlOiBbJ3NlbGVjdCcsICc/bmdNb2RlbCddLFxuICAgIGNvbnRyb2xsZXI6IFsnJGVsZW1lbnQnLCAnJHNjb3BlJywgJyRhdHRycycsIGZ1bmN0aW9uKCRlbGVtZW50LCAkc2NvcGUsICRhdHRycykge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICAgIG9wdGlvbnNNYXAgPSB7fSxcbiAgICAgICAgICBuZ01vZGVsQ3RybCA9IG51bGxNb2RlbEN0cmwsXG4gICAgICAgICAgbnVsbE9wdGlvbixcbiAgICAgICAgICB1bmtub3duT3B0aW9uO1xuXG5cbiAgICAgIHNlbGYuZGF0YWJvdW5kID0gJGF0dHJzLm5nTW9kZWw7XG5cblxuICAgICAgc2VsZi5pbml0ID0gZnVuY3Rpb24obmdNb2RlbEN0cmxfLCBudWxsT3B0aW9uXywgdW5rbm93bk9wdGlvbl8pIHtcbiAgICAgICAgbmdNb2RlbEN0cmwgPSBuZ01vZGVsQ3RybF87XG4gICAgICAgIG51bGxPcHRpb24gPSBudWxsT3B0aW9uXztcbiAgICAgICAgdW5rbm93bk9wdGlvbiA9IHVua25vd25PcHRpb25fO1xuICAgICAgfTtcblxuXG4gICAgICBzZWxmLmFkZE9wdGlvbiA9IGZ1bmN0aW9uKHZhbHVlLCBlbGVtZW50KSB7XG4gICAgICAgIGFzc2VydE5vdEhhc093blByb3BlcnR5KHZhbHVlLCAnXCJvcHRpb24gdmFsdWVcIicpO1xuICAgICAgICBvcHRpb25zTWFwW3ZhbHVlXSA9IHRydWU7XG5cbiAgICAgICAgaWYgKG5nTW9kZWxDdHJsLiR2aWV3VmFsdWUgPT0gdmFsdWUpIHtcbiAgICAgICAgICAkZWxlbWVudC52YWwodmFsdWUpO1xuICAgICAgICAgIGlmICh1bmtub3duT3B0aW9uLnBhcmVudCgpKSB1bmtub3duT3B0aW9uLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zODE0NTlcbiAgICAgICAgLy8gQWRkaW5nIGFuIDxvcHRpb24gc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiPiBlbGVtZW50IHRvIGEgPHNlbGVjdCByZXF1aXJlZD1cInJlcXVpcmVkXCI+IHNob3VsZFxuICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IHNlbGVjdCB0aGUgbmV3IGVsZW1lbnRcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudFswXS5oYXNBdHRyaWJ1dGUoJ3NlbGVjdGVkJykpIHtcbiAgICAgICAgICBlbGVtZW50WzBdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuXG4gICAgICBzZWxmLnJlbW92ZU9wdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc09wdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICBkZWxldGUgb3B0aW9uc01hcFt2YWx1ZV07XG4gICAgICAgICAgaWYgKG5nTW9kZWxDdHJsLiR2aWV3VmFsdWUgPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVW5rbm93bk9wdGlvbih2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG5cbiAgICAgIHNlbGYucmVuZGVyVW5rbm93bk9wdGlvbiA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB2YXIgdW5rbm93blZhbCA9ICc/ICcgKyBoYXNoS2V5KHZhbCkgKyAnID8nO1xuICAgICAgICB1bmtub3duT3B0aW9uLnZhbCh1bmtub3duVmFsKTtcbiAgICAgICAgJGVsZW1lbnQucHJlcGVuZCh1bmtub3duT3B0aW9uKTtcbiAgICAgICAgJGVsZW1lbnQudmFsKHVua25vd25WYWwpO1xuICAgICAgICB1bmtub3duT3B0aW9uLnByb3AoJ3NlbGVjdGVkJywgdHJ1ZSk7IC8vIG5lZWRlZCBmb3IgSUVcbiAgICAgIH07XG5cblxuICAgICAgc2VsZi5oYXNPcHRpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gb3B0aW9uc01hcC5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICB9O1xuXG4gICAgICAkc2NvcGUuJG9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBkaXNhYmxlIHVua25vd24gb3B0aW9uIHNvIHRoYXQgd2UgZG9uJ3QgZG8gd29yayB3aGVuIHRoZSB3aG9sZSBzZWxlY3QgaXMgYmVpbmcgZGVzdHJveWVkXG4gICAgICAgIHNlbGYucmVuZGVyVW5rbm93bk9wdGlvbiA9IG5vb3A7XG4gICAgICB9KTtcbiAgICB9XSxcblxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJscykge1xuICAgICAgLy8gaWYgbmdNb2RlbCBpcyBub3QgZGVmaW5lZCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZ1xuICAgICAgaWYgKCFjdHJsc1sxXSkgcmV0dXJuO1xuXG4gICAgICB2YXIgc2VsZWN0Q3RybCA9IGN0cmxzWzBdLFxuICAgICAgICAgIG5nTW9kZWxDdHJsID0gY3RybHNbMV0sXG4gICAgICAgICAgbXVsdGlwbGUgPSBhdHRyLm11bHRpcGxlLFxuICAgICAgICAgIG9wdGlvbnNFeHAgPSBhdHRyLm5nT3B0aW9ucyxcbiAgICAgICAgICBudWxsT3B0aW9uID0gZmFsc2UsIC8vIGlmIGZhbHNlLCB1c2VyIHdpbGwgbm90IGJlIGFibGUgdG8gc2VsZWN0IGl0ICh1c2VkIGJ5IG5nT3B0aW9ucylcbiAgICAgICAgICBlbXB0eU9wdGlvbixcbiAgICAgICAgICByZW5kZXJTY2hlZHVsZWQgPSBmYWxzZSxcbiAgICAgICAgICAvLyB3ZSBjYW4ndCBqdXN0IGpxTGl0ZSgnPG9wdGlvbj4nKSBzaW5jZSBqcUxpdGUgaXMgbm90IHNtYXJ0IGVub3VnaFxuICAgICAgICAgIC8vIHRvIGNyZWF0ZSBpdCBpbiA8c2VsZWN0PiBhbmQgSUUgYmFyZnMgb3RoZXJ3aXNlLlxuICAgICAgICAgIG9wdGlvblRlbXBsYXRlID0ganFMaXRlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpKSxcbiAgICAgICAgICBvcHRHcm91cFRlbXBsYXRlID1qcUxpdGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0Z3JvdXAnKSksXG4gICAgICAgICAgdW5rbm93bk9wdGlvbiA9IG9wdGlvblRlbXBsYXRlLmNsb25lKCk7XG5cbiAgICAgIC8vIGZpbmQgXCJudWxsXCIgb3B0aW9uXG4gICAgICBmb3IgKHZhciBpID0gMCwgY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuKCksIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBpZiAoY2hpbGRyZW5baV0udmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgZW1wdHlPcHRpb24gPSBudWxsT3B0aW9uID0gY2hpbGRyZW4uZXEoaSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2VsZWN0Q3RybC5pbml0KG5nTW9kZWxDdHJsLCBudWxsT3B0aW9uLCB1bmtub3duT3B0aW9uKTtcblxuICAgICAgLy8gcmVxdWlyZWQgdmFsaWRhdG9yXG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgbmdNb2RlbEN0cmwuJGlzRW1wdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiAhdmFsdWUgfHwgdmFsdWUubGVuZ3RoID09PSAwO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9uc0V4cCkgc2V0dXBBc09wdGlvbnMoc2NvcGUsIGVsZW1lbnQsIG5nTW9kZWxDdHJsKTtcbiAgICAgIGVsc2UgaWYgKG11bHRpcGxlKSBzZXR1cEFzTXVsdGlwbGUoc2NvcGUsIGVsZW1lbnQsIG5nTW9kZWxDdHJsKTtcbiAgICAgIGVsc2Ugc2V0dXBBc1NpbmdsZShzY29wZSwgZWxlbWVudCwgbmdNb2RlbEN0cmwsIHNlbGVjdEN0cmwpO1xuXG5cbiAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG5cbiAgICAgIGZ1bmN0aW9uIHNldHVwQXNTaW5nbGUoc2NvcGUsIHNlbGVjdEVsZW1lbnQsIG5nTW9kZWxDdHJsLCBzZWxlY3RDdHJsKSB7XG4gICAgICAgIG5nTW9kZWxDdHJsLiRyZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgdmlld1ZhbHVlID0gbmdNb2RlbEN0cmwuJHZpZXdWYWx1ZTtcblxuICAgICAgICAgIGlmIChzZWxlY3RDdHJsLmhhc09wdGlvbih2aWV3VmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAodW5rbm93bk9wdGlvbi5wYXJlbnQoKSkgdW5rbm93bk9wdGlvbi5yZW1vdmUoKTtcbiAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQudmFsKHZpZXdWYWx1ZSk7XG4gICAgICAgICAgICBpZiAodmlld1ZhbHVlID09PSAnJykgZW1wdHlPcHRpb24ucHJvcCgnc2VsZWN0ZWQnLCB0cnVlKTsgLy8gdG8gbWFrZSBJRTkgaGFwcHlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZpZXdWYWx1ZSkgJiYgZW1wdHlPcHRpb24pIHtcbiAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC52YWwoJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZWN0Q3RybC5yZW5kZXJVbmtub3duT3B0aW9uKHZpZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGVjdEVsZW1lbnQub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh1bmtub3duT3B0aW9uLnBhcmVudCgpKSB1bmtub3duT3B0aW9uLnJlbW92ZSgpO1xuICAgICAgICAgICAgbmdNb2RlbEN0cmwuJHNldFZpZXdWYWx1ZShzZWxlY3RFbGVtZW50LnZhbCgpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNldHVwQXNNdWx0aXBsZShzY29wZSwgc2VsZWN0RWxlbWVudCwgY3RybCkge1xuICAgICAgICB2YXIgbGFzdFZpZXc7XG4gICAgICAgIGN0cmwuJHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpdGVtcyA9IG5ldyBIYXNoTWFwKGN0cmwuJHZpZXdWYWx1ZSk7XG4gICAgICAgICAgZm9yRWFjaChzZWxlY3RFbGVtZW50LmZpbmQoJ29wdGlvbicpLCBmdW5jdGlvbihvcHRpb24pIHtcbiAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IGlzRGVmaW5lZChpdGVtcy5nZXQob3B0aW9uLnZhbHVlKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gd2UgaGF2ZSB0byBkbyBpdCBvbiBlYWNoIHdhdGNoIHNpbmNlIG5nTW9kZWwgd2F0Y2hlcyByZWZlcmVuY2UsIGJ1dFxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHdvcmsgb2YgYW4gYXJyYXksIHNvIHdlIG5lZWQgdG8gc2VlIGlmIGFueXRoaW5nIHdhcyBpbnNlcnRlZC9yZW1vdmVkXG4gICAgICAgIHNjb3BlLiR3YXRjaChmdW5jdGlvbiBzZWxlY3RNdWx0aXBsZVdhdGNoKCkge1xuICAgICAgICAgIGlmICghZXF1YWxzKGxhc3RWaWV3LCBjdHJsLiR2aWV3VmFsdWUpKSB7XG4gICAgICAgICAgICBsYXN0VmlldyA9IHNoYWxsb3dDb3B5KGN0cmwuJHZpZXdWYWx1ZSk7XG4gICAgICAgICAgICBjdHJsLiRyZW5kZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlbGVjdEVsZW1lbnQub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBhcnJheSA9IFtdO1xuICAgICAgICAgICAgZm9yRWFjaChzZWxlY3RFbGVtZW50LmZpbmQoJ29wdGlvbicpLCBmdW5jdGlvbihvcHRpb24pIHtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGFycmF5LnB1c2gob3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjdHJsLiRzZXRWaWV3VmFsdWUoYXJyYXkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gc2V0dXBBc09wdGlvbnMoc2NvcGUsIHNlbGVjdEVsZW1lbnQsIGN0cmwpIHtcbiAgICAgICAgdmFyIG1hdGNoO1xuXG4gICAgICAgIGlmICghKG1hdGNoID0gb3B0aW9uc0V4cC5tYXRjaChOR19PUFRJT05TX1JFR0VYUCkpKSB7XG4gICAgICAgICAgdGhyb3cgbmdPcHRpb25zTWluRXJyKCdpZXhwJyxcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgZXhwcmVzc2lvbiBpbiBmb3JtIG9mIFwiICtcbiAgICAgICAgICAgIFwiJ19zZWxlY3RfIChhcyBfbGFiZWxfKT8gZm9yIChfa2V5XywpP192YWx1ZV8gaW4gX2NvbGxlY3Rpb25fJ1wiICtcbiAgICAgICAgICAgIFwiIGJ1dCBnb3QgJ3swfScuIEVsZW1lbnQ6IHsxfVwiLFxuICAgICAgICAgICAgb3B0aW9uc0V4cCwgc3RhcnRpbmdUYWcoc2VsZWN0RWxlbWVudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRpc3BsYXlGbiA9ICRwYXJzZShtYXRjaFsyXSB8fCBtYXRjaFsxXSksXG4gICAgICAgICAgICB2YWx1ZU5hbWUgPSBtYXRjaFs0XSB8fCBtYXRjaFs2XSxcbiAgICAgICAgICAgIHNlbGVjdEFzID0gLyBhcyAvLnRlc3QobWF0Y2hbMF0pICYmIG1hdGNoWzFdLFxuICAgICAgICAgICAgc2VsZWN0QXNGbiA9IHNlbGVjdEFzID8gJHBhcnNlKHNlbGVjdEFzKSA6IG51bGwsXG4gICAgICAgICAgICBrZXlOYW1lID0gbWF0Y2hbNV0sXG4gICAgICAgICAgICBncm91cEJ5Rm4gPSAkcGFyc2UobWF0Y2hbM10gfHwgJycpLFxuICAgICAgICAgICAgdmFsdWVGbiA9ICRwYXJzZShtYXRjaFsyXSA/IG1hdGNoWzFdIDogdmFsdWVOYW1lKSxcbiAgICAgICAgICAgIHZhbHVlc0ZuID0gJHBhcnNlKG1hdGNoWzddKSxcbiAgICAgICAgICAgIHRyYWNrID0gbWF0Y2hbOF0sXG4gICAgICAgICAgICB0cmFja0ZuID0gdHJhY2sgPyAkcGFyc2UobWF0Y2hbOF0pIDogbnVsbCxcbiAgICAgICAgICAgIHRyYWNrS2V5c0NhY2hlID0ge30sXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGFycmF5IG9mIGFycmF5IG9mIGV4aXN0aW5nIG9wdGlvbiBncm91cHMgaW4gRE9NLlxuICAgICAgICAgICAgLy8gV2UgdHJ5IHRvIHJldXNlIHRoZXNlIGlmIHBvc3NpYmxlXG4gICAgICAgICAgICAvLyAtIG9wdGlvbkdyb3Vwc0NhY2hlWzBdIGlzIHRoZSBvcHRpb25zIHdpdGggbm8gb3B0aW9uIGdyb3VwXG4gICAgICAgICAgICAvLyAtIG9wdGlvbkdyb3Vwc0NhY2hlWz9dWzBdIGlzIHRoZSBwYXJlbnQ6IGVpdGhlciB0aGUgU0VMRUNUIG9yIE9QVEdST1VQIGVsZW1lbnRcbiAgICAgICAgICAgIG9wdGlvbkdyb3Vwc0NhY2hlID0gW1t7ZWxlbWVudDogc2VsZWN0RWxlbWVudCwgbGFiZWw6Jyd9XV0sXG4gICAgICAgICAgICAvL3JlLXVzYWJsZSBvYmplY3QgdG8gcmVwcmVzZW50IG9wdGlvbidzIGxvY2Fsc1xuICAgICAgICAgICAgbG9jYWxzID0ge307XG5cbiAgICAgICAgaWYgKG51bGxPcHRpb24pIHtcbiAgICAgICAgICAvLyBjb21waWxlIHRoZSBlbGVtZW50IHNpbmNlIHRoZXJlIG1pZ2h0IGJlIGJpbmRpbmdzIGluIGl0XG4gICAgICAgICAgJGNvbXBpbGUobnVsbE9wdGlvbikoc2NvcGUpO1xuXG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSBjbGFzcywgd2hpY2ggaXMgYWRkZWQgYXV0b21hdGljYWxseSBiZWNhdXNlIHdlIHJlY29tcGlsZSB0aGUgZWxlbWVudCBhbmQgaXRcbiAgICAgICAgICAvLyBiZWNvbWVzIHRoZSBjb21waWxhdGlvbiByb290XG4gICAgICAgICAgbnVsbE9wdGlvbi5yZW1vdmVDbGFzcygnbmctc2NvcGUnKTtcblxuICAgICAgICAgIC8vIHdlIG5lZWQgdG8gcmVtb3ZlIGl0IGJlZm9yZSBjYWxsaW5nIHNlbGVjdEVsZW1lbnQuZW1wdHkoKSBiZWNhdXNlIG90aGVyd2lzZSBJRSB3aWxsXG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSBsYWJlbCBmcm9tIHRoZSBlbGVtZW50LiB3dGY/XG4gICAgICAgICAgbnVsbE9wdGlvbi5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIGNvbnRlbnRzLCB3ZSdsbCBhZGQgd2hhdCdzIG5lZWRlZCBiYXNlZCBvbiB0aGUgbW9kZWxcbiAgICAgICAgc2VsZWN0RWxlbWVudC5lbXB0eSgpO1xuXG4gICAgICAgIHNlbGVjdEVsZW1lbnQub24oJ2NoYW5nZScsIHNlbGVjdGlvbkNoYW5nZWQpO1xuXG4gICAgICAgIGN0cmwuJHJlbmRlciA9IHJlbmRlcjtcblxuICAgICAgICBzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKHZhbHVlc0ZuLCBzY2hlZHVsZVJlbmRlcmluZyk7XG4gICAgICAgIHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oZ2V0TGFiZWxzLCBzY2hlZHVsZVJlbmRlcmluZyk7XG5cbiAgICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbihmdW5jdGlvbigpIHsgcmV0dXJuIGN0cmwuJG1vZGVsVmFsdWU7IH0sIHNjaGVkdWxlUmVuZGVyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gICAgICAgIGZ1bmN0aW9uIGNhbGxFeHByZXNzaW9uKGV4cHJGbiwga2V5LCB2YWx1ZSkge1xuICAgICAgICAgIGxvY2Fsc1t2YWx1ZU5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgaWYgKGtleU5hbWUpIGxvY2Fsc1trZXlOYW1lXSA9IGtleTtcbiAgICAgICAgICByZXR1cm4gZXhwckZuKHNjb3BlLCBsb2NhbHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2VsZWN0aW9uQ2hhbmdlZCgpIHtcbiAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgY29sbGVjdGlvbiA9IHZhbHVlc0ZuKHNjb3BlKSB8fCBbXTtcbiAgICAgICAgICAgIHZhciB2aWV3VmFsdWU7XG4gICAgICAgICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgdmlld1ZhbHVlID0gW107XG4gICAgICAgICAgICAgIGZvckVhY2goc2VsZWN0RWxlbWVudC52YWwoKSwgZnVuY3Rpb24oc2VsZWN0ZWRLZXkpIHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkS2V5ID0gdHJhY2tGbiA/IHRyYWNrS2V5c0NhY2hlW3NlbGVjdGVkS2V5XSA6IHNlbGVjdGVkS2V5O1xuICAgICAgICAgICAgICAgIHZpZXdWYWx1ZS5wdXNoKGdldFZpZXdWYWx1ZShzZWxlY3RlZEtleSwgY29sbGVjdGlvbltzZWxlY3RlZEtleV0pKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRLZXkgPSB0cmFja0ZuID8gdHJhY2tLZXlzQ2FjaGVbc2VsZWN0RWxlbWVudC52YWwoKV0gOiBzZWxlY3RFbGVtZW50LnZhbCgpO1xuICAgICAgICAgICAgICB2aWV3VmFsdWUgPSBnZXRWaWV3VmFsdWUoc2VsZWN0ZWRLZXksIGNvbGxlY3Rpb25bc2VsZWN0ZWRLZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN0cmwuJHNldFZpZXdWYWx1ZSh2aWV3VmFsdWUpO1xuICAgICAgICAgICAgcmVuZGVyKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXRWaWV3VmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgIGlmIChrZXkgPT09ICc/Jykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdmlld1ZhbHVlRm4gPSBzZWxlY3RBc0ZuID8gc2VsZWN0QXNGbiA6IHZhbHVlRm47XG4gICAgICAgICAgICByZXR1cm4gY2FsbEV4cHJlc3Npb24odmlld1ZhbHVlRm4sIGtleSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldExhYmVscygpIHtcbiAgICAgICAgICB2YXIgdmFsdWVzID0gdmFsdWVzRm4oc2NvcGUpO1xuICAgICAgICAgIHZhciB0b0Rpc3BsYXk7XG4gICAgICAgICAgaWYgKHZhbHVlcyAmJiBpc0FycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgIHRvRGlzcGxheSA9IG5ldyBBcnJheSh2YWx1ZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHZhbHVlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgIHRvRGlzcGxheVtpXSA9IGNhbGxFeHByZXNzaW9uKGRpc3BsYXlGbiwgaSwgdmFsdWVzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0b0Rpc3BsYXk7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEFkZCBhIHRlc3QgZm9yIHRoaXMgY2FzZVxuICAgICAgICAgICAgdG9EaXNwbGF5ID0ge307XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHZhbHVlcykge1xuICAgICAgICAgICAgICBpZiAodmFsdWVzLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgICAgICAgICAgdG9EaXNwbGF5W3Byb3BdID0gY2FsbEV4cHJlc3Npb24oZGlzcGxheUZuLCBwcm9wLCB2YWx1ZXNbcHJvcF0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0b0Rpc3BsYXk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVJc1NlbGVjdGVkRm4odmlld1ZhbHVlKSB7XG4gICAgICAgICAgdmFyIHNlbGVjdGVkU2V0O1xuICAgICAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKHRyYWNrRm4gJiYgaXNBcnJheSh2aWV3VmFsdWUpKSB7XG5cbiAgICAgICAgICAgICAgc2VsZWN0ZWRTZXQgPSBuZXcgSGFzaE1hcChbXSk7XG4gICAgICAgICAgICAgIGZvciAodmFyIHRyYWNrSW5kZXggPSAwOyB0cmFja0luZGV4IDwgdmlld1ZhbHVlLmxlbmd0aDsgdHJhY2tJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgLy8gdHJhY2tpbmcgYnkga2V5XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRTZXQucHV0KGNhbGxFeHByZXNzaW9uKHRyYWNrRm4sIG51bGwsIHZpZXdWYWx1ZVt0cmFja0luZGV4XSksIHRydWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWxlY3RlZFNldCA9IG5ldyBIYXNoTWFwKHZpZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0cmFja0ZuKSB7XG4gICAgICAgICAgICB2aWV3VmFsdWUgPSBjYWxsRXhwcmVzc2lvbih0cmFja0ZuLCBudWxsLCB2aWV3VmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBpc1NlbGVjdGVkKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb21wYXJlVmFsdWVGbjtcbiAgICAgICAgICAgIGlmICh0cmFja0ZuKSB7XG4gICAgICAgICAgICAgIGNvbXBhcmVWYWx1ZUZuID0gdHJhY2tGbjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0QXNGbikge1xuICAgICAgICAgICAgICBjb21wYXJlVmFsdWVGbiA9IHNlbGVjdEFzRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb21wYXJlVmFsdWVGbiA9IHZhbHVlRm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICAgICAgICByZXR1cm4gaXNEZWZpbmVkKHNlbGVjdGVkU2V0LnJlbW92ZShjYWxsRXhwcmVzc2lvbihjb21wYXJlVmFsdWVGbiwga2V5LCB2YWx1ZSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiB2aWV3VmFsdWUgPT09IGNhbGxFeHByZXNzaW9uKGNvbXBhcmVWYWx1ZUZuLCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2NoZWR1bGVSZW5kZXJpbmcoKSB7XG4gICAgICAgICAgaWYgKCFyZW5kZXJTY2hlZHVsZWQpIHtcbiAgICAgICAgICAgIHNjb3BlLiQkcG9zdERpZ2VzdChyZW5kZXIpO1xuICAgICAgICAgICAgcmVuZGVyU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQSBuZXcgbGFiZWxNYXAgaXMgY3JlYXRlZCB3aXRoIGVhY2ggcmVuZGVyLlxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZWFjaCBleGlzdGluZyBvcHRpb24gd2l0aCBhZGRlZD1mYWxzZSxcbiAgICAgICAgICogYW5kIGVhY2ggbmV3IG9wdGlvbiB3aXRoIGFkZGVkPXRydWUuXG4gICAgICAgICAqIC0gTGFiZWxzIHRoYXQgYXJlIHBhc3NlZCB0byB0aGlzIG1ldGhvZCB0d2ljZSxcbiAgICAgICAgICogKG9uY2Ugd2l0aCBhZGRlZD10cnVlIGFuZCBvbmNlIHdpdGggYWRkZWQ9ZmFsc2UpIHdpbGwgZW5kIHVwIHdpdGggYSB2YWx1ZSBvZiAwLCBhbmRcbiAgICAgICAgICogd2lsbCBjYXVzZSBubyBjaGFuZ2UgdG8gaGFwcGVuIHRvIHRoZSBjb3JyZXNwb25kaW5nIG9wdGlvbi5cbiAgICAgICAgICogLSBMYWJlbHMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoaXMgbWV0aG9kIG9ubHkgb25jZSB3aXRoIGFkZGVkPWZhbHNlIHdpbGwgZW5kIHVwIHdpdGggYVxuICAgICAgICAgKiB2YWx1ZSBvZiAtMSBhbmQgd2lsbCBldmVudHVhbGx5IGJlIHBhc3NlZCB0byBzZWxlY3RDdHJsLnJlbW92ZU9wdGlvbigpXG4gICAgICAgICAqIC0gTGFiZWxzIHRoYXQgYXJlIHBhc3NlZCB0byB0aGlzIG1ldGhvZCBvbmx5IG9uY2Ugd2l0aCBhZGRlZD10cnVlIHdpbGwgZW5kIHVwIHdpdGggYVxuICAgICAgICAgKiB2YWx1ZSBvZiAxIGFuZCB3aWxsIGV2ZW50dWFsbHkgYmUgcGFzc2VkIHRvIHNlbGVjdEN0cmwuYWRkT3B0aW9uKClcbiAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlTGFiZWxNYXAobGFiZWxNYXAsIGxhYmVsLCBhZGRlZCkge1xuICAgICAgICAgIGxhYmVsTWFwW2xhYmVsXSA9IGxhYmVsTWFwW2xhYmVsXSB8fCAwO1xuICAgICAgICAgIGxhYmVsTWFwW2xhYmVsXSArPSAoYWRkZWQgPyAxIDogLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgIHJlbmRlclNjaGVkdWxlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgLy8gVGVtcG9yYXJ5IGxvY2F0aW9uIGZvciB0aGUgb3B0aW9uIGdyb3VwcyBiZWZvcmUgd2UgcmVuZGVyIHRoZW1cbiAgICAgICAgICB2YXIgb3B0aW9uR3JvdXBzID0geycnOltdfSxcbiAgICAgICAgICAgICAgb3B0aW9uR3JvdXBOYW1lcyA9IFsnJ10sXG4gICAgICAgICAgICAgIG9wdGlvbkdyb3VwTmFtZSxcbiAgICAgICAgICAgICAgb3B0aW9uR3JvdXAsXG4gICAgICAgICAgICAgIG9wdGlvbixcbiAgICAgICAgICAgICAgZXhpc3RpbmdQYXJlbnQsIGV4aXN0aW5nT3B0aW9ucywgZXhpc3RpbmdPcHRpb24sXG4gICAgICAgICAgICAgIHZpZXdWYWx1ZSA9IGN0cmwuJHZpZXdWYWx1ZSxcbiAgICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVzRm4oc2NvcGUpIHx8IFtdLFxuICAgICAgICAgICAgICBrZXlzID0ga2V5TmFtZSA/IHNvcnRlZEtleXModmFsdWVzKSA6IHZhbHVlcyxcbiAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgZ3JvdXBMZW5ndGgsIGxlbmd0aCxcbiAgICAgICAgICAgICAgZ3JvdXBJbmRleCwgaW5kZXgsXG4gICAgICAgICAgICAgIGxhYmVsTWFwID0ge30sXG4gICAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgICBpc1NlbGVjdGVkID0gY3JlYXRlSXNTZWxlY3RlZEZuKHZpZXdWYWx1ZSksXG4gICAgICAgICAgICAgIGFueVNlbGVjdGVkID0gZmFsc2UsXG4gICAgICAgICAgICAgIGxhc3RFbGVtZW50LFxuICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgb3B0aW9uSWQ7XG5cbiAgICAgICAgICB0cmFja0tleXNDYWNoZSA9IHt9O1xuXG4gICAgICAgICAgLy8gV2Ugbm93IGJ1aWxkIHVwIHRoZSBsaXN0IG9mIG9wdGlvbnMgd2UgbmVlZCAod2UgbWVyZ2UgbGF0ZXIpXG4gICAgICAgICAgZm9yIChpbmRleCA9IDA7IGxlbmd0aCA9IGtleXMubGVuZ3RoLCBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAga2V5ID0gaW5kZXg7XG4gICAgICAgICAgICBpZiAoa2V5TmFtZSkge1xuICAgICAgICAgICAgICBrZXkgPSBrZXlzW2luZGV4XTtcbiAgICAgICAgICAgICAgaWYgKGtleS5jaGFyQXQoMCkgPT09ICckJykgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlc1trZXldO1xuXG4gICAgICAgICAgICBvcHRpb25Hcm91cE5hbWUgPSBjYWxsRXhwcmVzc2lvbihncm91cEJ5Rm4sIGtleSwgdmFsdWUpIHx8ICcnO1xuICAgICAgICAgICAgaWYgKCEob3B0aW9uR3JvdXAgPSBvcHRpb25Hcm91cHNbb3B0aW9uR3JvdXBOYW1lXSkpIHtcbiAgICAgICAgICAgICAgb3B0aW9uR3JvdXAgPSBvcHRpb25Hcm91cHNbb3B0aW9uR3JvdXBOYW1lXSA9IFtdO1xuICAgICAgICAgICAgICBvcHRpb25Hcm91cE5hbWVzLnB1c2gob3B0aW9uR3JvdXBOYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VsZWN0ZWQgPSBpc1NlbGVjdGVkKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgYW55U2VsZWN0ZWQgPSBhbnlTZWxlY3RlZCB8fCBzZWxlY3RlZDtcblxuICAgICAgICAgICAgbGFiZWwgPSBjYWxsRXhwcmVzc2lvbihkaXNwbGF5Rm4sIGtleSwgdmFsdWUpOyAvLyB3aGF0IHdpbGwgYmUgc2VlbiBieSB0aGUgdXNlclxuXG4gICAgICAgICAgICAvLyBkb2luZyBkaXNwbGF5Rm4oc2NvcGUsIGxvY2FscykgfHwgJycgb3ZlcndyaXRlcyB6ZXJvIHZhbHVlc1xuICAgICAgICAgICAgbGFiZWwgPSBpc0RlZmluZWQobGFiZWwpID8gbGFiZWwgOiAnJztcbiAgICAgICAgICAgIG9wdGlvbklkID0gdHJhY2tGbiA/IHRyYWNrRm4oc2NvcGUsIGxvY2FscykgOiAoa2V5TmFtZSA/IGtleXNbaW5kZXhdIDogaW5kZXgpO1xuICAgICAgICAgICAgaWYgKHRyYWNrRm4pIHtcbiAgICAgICAgICAgICAgdHJhY2tLZXlzQ2FjaGVbb3B0aW9uSWRdID0ga2V5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvcHRpb25Hcm91cC5wdXNoKHtcbiAgICAgICAgICAgICAgLy8gZWl0aGVyIHRoZSBpbmRleCBpbnRvIGFycmF5IG9yIGtleSBmcm9tIG9iamVjdFxuICAgICAgICAgICAgICBpZDogb3B0aW9uSWQsXG4gICAgICAgICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHNlbGVjdGVkICAgICAgICAgICAgICAgICAgIC8vIGRldGVybWluZSBpZiB3ZSBzaG91bGQgYmUgc2VsZWN0ZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIW11bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAobnVsbE9wdGlvbiB8fCB2aWV3VmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gaW5zZXJ0IG51bGwgb3B0aW9uIGlmIHdlIGhhdmUgYSBwbGFjZWhvbGRlciwgb3IgdGhlIG1vZGVsIGlzIG51bGxcbiAgICAgICAgICAgICAgb3B0aW9uR3JvdXBzWycnXS51bnNoaWZ0KHtpZDonJywgbGFiZWw6JycsIHNlbGVjdGVkOiFhbnlTZWxlY3RlZH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghYW55U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgLy8gb3B0aW9uIGNvdWxkIG5vdCBiZSBmb3VuZCwgd2UgaGF2ZSB0byBpbnNlcnQgdGhlIHVuZGVmaW5lZCBpdGVtXG4gICAgICAgICAgICAgIG9wdGlvbkdyb3Vwc1snJ10udW5zaGlmdCh7aWQ6Jz8nLCBsYWJlbDonJywgc2VsZWN0ZWQ6dHJ1ZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE5vdyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgbGlzdCBvZiBET00gbm9kZXMgdG8gbWF0Y2ggdGhlIG9wdGlvbkdyb3VwcyB3ZSBjb21wdXRlZCBhYm92ZVxuICAgICAgICAgIGZvciAoZ3JvdXBJbmRleCA9IDAsIGdyb3VwTGVuZ3RoID0gb3B0aW9uR3JvdXBOYW1lcy5sZW5ndGg7XG4gICAgICAgICAgICAgICBncm91cEluZGV4IDwgZ3JvdXBMZW5ndGg7XG4gICAgICAgICAgICAgICBncm91cEluZGV4KyspIHtcbiAgICAgICAgICAgIC8vIGN1cnJlbnQgb3B0aW9uIGdyb3VwIG5hbWUgb3IgJycgaWYgbm8gZ3JvdXBcbiAgICAgICAgICAgIG9wdGlvbkdyb3VwTmFtZSA9IG9wdGlvbkdyb3VwTmFtZXNbZ3JvdXBJbmRleF07XG5cbiAgICAgICAgICAgIC8vIGxpc3Qgb2Ygb3B0aW9ucyBmb3IgdGhhdCBncm91cC4gKGZpcnN0IGl0ZW0gaGFzIHRoZSBwYXJlbnQpXG4gICAgICAgICAgICBvcHRpb25Hcm91cCA9IG9wdGlvbkdyb3Vwc1tvcHRpb25Hcm91cE5hbWVdO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9uR3JvdXBzQ2FjaGUubGVuZ3RoIDw9IGdyb3VwSW5kZXgpIHtcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBncm93IHRoZSBvcHRpb25Hcm91cHNcbiAgICAgICAgICAgICAgZXhpc3RpbmdQYXJlbnQgPSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudDogb3B0R3JvdXBUZW1wbGF0ZS5jbG9uZSgpLmF0dHIoJ2xhYmVsJywgb3B0aW9uR3JvdXBOYW1lKSxcbiAgICAgICAgICAgICAgICBsYWJlbDogb3B0aW9uR3JvdXAubGFiZWxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgZXhpc3RpbmdPcHRpb25zID0gW2V4aXN0aW5nUGFyZW50XTtcbiAgICAgICAgICAgICAgb3B0aW9uR3JvdXBzQ2FjaGUucHVzaChleGlzdGluZ09wdGlvbnMpO1xuICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LmFwcGVuZChleGlzdGluZ1BhcmVudC5lbGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGV4aXN0aW5nT3B0aW9ucyA9IG9wdGlvbkdyb3Vwc0NhY2hlW2dyb3VwSW5kZXhdO1xuICAgICAgICAgICAgICBleGlzdGluZ1BhcmVudCA9IGV4aXN0aW5nT3B0aW9uc1swXTsgIC8vIGVpdGhlciBTRUxFQ1QgKG5vIGdyb3VwKSBvciBPUFRHUk9VUCBlbGVtZW50XG5cbiAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBPUFRHUk9VUCBsYWJlbCBpZiBub3QgdGhlIHNhbWUuXG4gICAgICAgICAgICAgIGlmIChleGlzdGluZ1BhcmVudC5sYWJlbCAhPSBvcHRpb25Hcm91cE5hbWUpIHtcbiAgICAgICAgICAgICAgICBleGlzdGluZ1BhcmVudC5lbGVtZW50LmF0dHIoJ2xhYmVsJywgZXhpc3RpbmdQYXJlbnQubGFiZWwgPSBvcHRpb25Hcm91cE5hbWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxhc3RFbGVtZW50ID0gbnVsbDsgIC8vIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmdcbiAgICAgICAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBvcHRpb25Hcm91cC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgIG9wdGlvbiA9IG9wdGlvbkdyb3VwW2luZGV4XTtcbiAgICAgICAgICAgICAgaWYgKChleGlzdGluZ09wdGlvbiA9IGV4aXN0aW5nT3B0aW9uc1tpbmRleCArIDFdKSkge1xuICAgICAgICAgICAgICAgIC8vIHJldXNlIGVsZW1lbnRzXG4gICAgICAgICAgICAgICAgbGFzdEVsZW1lbnQgPSBleGlzdGluZ09wdGlvbi5lbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ09wdGlvbi5sYWJlbCAhPT0gb3B0aW9uLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICB1cGRhdGVMYWJlbE1hcChsYWJlbE1hcCwgZXhpc3RpbmdPcHRpb24ubGFiZWwsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZUxhYmVsTWFwKGxhYmVsTWFwLCBvcHRpb24ubGFiZWwsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgbGFzdEVsZW1lbnQudGV4dChleGlzdGluZ09wdGlvbi5sYWJlbCA9IG9wdGlvbi5sYWJlbCk7XG4gICAgICAgICAgICAgICAgICBsYXN0RWxlbWVudC5wcm9wKCdsYWJlbCcsIGV4aXN0aW5nT3B0aW9uLmxhYmVsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nT3B0aW9uLmlkICE9PSBvcHRpb24uaWQpIHtcbiAgICAgICAgICAgICAgICAgIGxhc3RFbGVtZW50LnZhbChleGlzdGluZ09wdGlvbi5pZCA9IG9wdGlvbi5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGxhc3RFbGVtZW50LnByb3AoJ3NlbGVjdGVkJykgcHJvdmlkZWQgYnkgalF1ZXJ5IGhhcyBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgICAgICBpZiAobGFzdEVsZW1lbnRbMF0uc2VsZWN0ZWQgIT09IG9wdGlvbi5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgbGFzdEVsZW1lbnQucHJvcCgnc2VsZWN0ZWQnLCAoZXhpc3RpbmdPcHRpb24uc2VsZWN0ZWQgPSBvcHRpb24uc2VsZWN0ZWQpKTtcbiAgICAgICAgICAgICAgICAgIGlmIChtc2llKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNlZSAjNzY5MlxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc2VsZWN0ZWQgaXRlbSB3b3VsZG4ndCB2aXN1YWxseSB1cGRhdGUgb24gSUUgd2l0aG91dCB0aGlzLlxuICAgICAgICAgICAgICAgICAgICAvLyBUZXN0ZWQgb24gV2luNzogSUU5LCBJRTEwIGFuZCBJRTExLiBGdXR1cmUgSUVzIHNob3VsZCBiZSB0ZXN0ZWQgYXMgd2VsbFxuICAgICAgICAgICAgICAgICAgICBsYXN0RWxlbWVudC5wcm9wKCdzZWxlY3RlZCcsIGV4aXN0aW5nT3B0aW9uLnNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZ3JvdyBlbGVtZW50c1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgaXQncyBhIG51bGwgb3B0aW9uXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5pZCA9PT0gJycgJiYgbnVsbE9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgLy8gcHV0IGJhY2sgdGhlIHByZS1jb21waWxlZCBlbGVtZW50XG4gICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbnVsbE9wdGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8galF1ZXJ5KHYxLjQuMikgQnVnOiBXZSBzaG91bGQgYmUgYWJsZSB0byBjaGFpbiB0aGUgbWV0aG9kIGNhbGxzLCBidXRcbiAgICAgICAgICAgICAgICAgIC8vIGluIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnkgb24gc29tZSBicm93c2VyIHRoZSAudGV4dCgpIHJldHVybnMgYSBzdHJpbmdcbiAgICAgICAgICAgICAgICAgIC8vIHJhdGhlciB0aGVuIHRoZSBlbGVtZW50LlxuICAgICAgICAgICAgICAgICAgKGVsZW1lbnQgPSBvcHRpb25UZW1wbGF0ZS5jbG9uZSgpKVxuICAgICAgICAgICAgICAgICAgICAgIC52YWwob3B0aW9uLmlkKVxuICAgICAgICAgICAgICAgICAgICAgIC5wcm9wKCdzZWxlY3RlZCcsIG9wdGlvbi5zZWxlY3RlZClcbiAgICAgICAgICAgICAgICAgICAgICAuYXR0cignc2VsZWN0ZWQnLCBvcHRpb24uc2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgICAgLnByb3AoJ2xhYmVsJywgb3B0aW9uLmxhYmVsKVxuICAgICAgICAgICAgICAgICAgICAgIC50ZXh0KG9wdGlvbi5sYWJlbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdPcHRpb25zLnB1c2goZXhpc3RpbmdPcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBvcHRpb24ubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIGlkOiBvcHRpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBvcHRpb24uc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB1cGRhdGVMYWJlbE1hcChsYWJlbE1hcCwgb3B0aW9uLmxhYmVsLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgIGxhc3RFbGVtZW50LmFmdGVyKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ1BhcmVudC5lbGVtZW50LmFwcGVuZChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGFzdEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyByZW1vdmUgYW55IGV4Y2Vzc2l2ZSBPUFRJT05zIGluIGEgZ3JvdXBcbiAgICAgICAgICAgIGluZGV4Kys7IC8vIGluY3JlbWVudCBzaW5jZSB0aGUgZXhpc3RpbmdPcHRpb25zWzBdIGlzIHBhcmVudCBlbGVtZW50IG5vdCBPUFRJT05cbiAgICAgICAgICAgIHdoaWxlIChleGlzdGluZ09wdGlvbnMubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgICAgICAgICAgb3B0aW9uID0gZXhpc3RpbmdPcHRpb25zLnBvcCgpO1xuICAgICAgICAgICAgICB1cGRhdGVMYWJlbE1hcChsYWJlbE1hcCwgb3B0aW9uLmxhYmVsLCBmYWxzZSk7XG4gICAgICAgICAgICAgIG9wdGlvbi5lbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yRWFjaChsYWJlbE1hcCwgZnVuY3Rpb24oY291bnQsIGxhYmVsKSB7XG4gICAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RDdHJsLmFkZE9wdGlvbihsYWJlbCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPCAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0Q3RybC5yZW1vdmVPcHRpb24obGFiZWwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVtb3ZlIGFueSBleGNlc3NpdmUgT1BUR1JPVVBzIGZyb20gc2VsZWN0XG4gICAgICAgICAgd2hpbGUgKG9wdGlvbkdyb3Vwc0NhY2hlLmxlbmd0aCA+IGdyb3VwSW5kZXgpIHtcbiAgICAgICAgICAgIG9wdGlvbkdyb3Vwc0NhY2hlLnBvcCgpWzBdLmVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufV07XG5cbnZhciBvcHRpb25EaXJlY3RpdmUgPSBbJyRpbnRlcnBvbGF0ZScsIGZ1bmN0aW9uKCRpbnRlcnBvbGF0ZSkge1xuICB2YXIgbnVsbFNlbGVjdEN0cmwgPSB7XG4gICAgYWRkT3B0aW9uOiBub29wLFxuICAgIHJlbW92ZU9wdGlvbjogbm9vcFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgcmVzdHJpY3Q6ICdFJyxcbiAgICBwcmlvcml0eTogMTAwLFxuICAgIGNvbXBpbGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHIpIHtcbiAgICAgIGlmIChpc1VuZGVmaW5lZChhdHRyLnZhbHVlKSkge1xuICAgICAgICB2YXIgaW50ZXJwb2xhdGVGbiA9ICRpbnRlcnBvbGF0ZShlbGVtZW50LnRleHQoKSwgdHJ1ZSk7XG4gICAgICAgIGlmICghaW50ZXJwb2xhdGVGbikge1xuICAgICAgICAgIGF0dHIuJHNldCgndmFsdWUnLCBlbGVtZW50LnRleHQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7XG4gICAgICAgIHZhciBzZWxlY3RDdHJsTmFtZSA9ICckc2VsZWN0Q29udHJvbGxlcicsXG4gICAgICAgICAgICBwYXJlbnQgPSBlbGVtZW50LnBhcmVudCgpLFxuICAgICAgICAgICAgc2VsZWN0Q3RybCA9IHBhcmVudC5kYXRhKHNlbGVjdEN0cmxOYW1lKSB8fFxuICAgICAgICAgICAgICBwYXJlbnQucGFyZW50KCkuZGF0YShzZWxlY3RDdHJsTmFtZSk7IC8vIGluIGNhc2Ugd2UgYXJlIGluIG9wdGdyb3VwXG5cbiAgICAgICAgaWYgKCFzZWxlY3RDdHJsIHx8ICFzZWxlY3RDdHJsLmRhdGFib3VuZCkge1xuICAgICAgICAgIHNlbGVjdEN0cmwgPSBudWxsU2VsZWN0Q3RybDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlcnBvbGF0ZUZuKSB7XG4gICAgICAgICAgc2NvcGUuJHdhdGNoKGludGVycG9sYXRlRm4sIGZ1bmN0aW9uIGludGVycG9sYXRlV2F0Y2hBY3Rpb24obmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgICAgICAgIGF0dHIuJHNldCgndmFsdWUnLCBuZXdWYWwpO1xuICAgICAgICAgICAgaWYgKG9sZFZhbCAhPT0gbmV3VmFsKSB7XG4gICAgICAgICAgICAgIHNlbGVjdEN0cmwucmVtb3ZlT3B0aW9uKG9sZFZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxlY3RDdHJsLmFkZE9wdGlvbihuZXdWYWwsIGVsZW1lbnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlbGVjdEN0cmwuYWRkT3B0aW9uKGF0dHIudmFsdWUsIGVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudC5vbignJGRlc3Ryb3knLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBzZWxlY3RDdHJsLnJlbW92ZU9wdGlvbihhdHRyLnZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn1dO1xuXG52YXIgc3R5bGVEaXJlY3RpdmUgPSB2YWx1ZUZuKHtcbiAgcmVzdHJpY3Q6ICdFJyxcbiAgdGVybWluYWw6IGZhbHNlXG59KTtcblxuICBpZiAod2luZG93LmFuZ3VsYXIuYm9vdHN0cmFwKSB7XG4gICAgLy9Bbmd1bGFySlMgaXMgYWxyZWFkeSBsb2FkZWQsIHNvIHdlIGNhbiByZXR1cm4gaGVyZS4uLlxuICAgIGNvbnNvbGUubG9nKCdXQVJOSU5HOiBUcmllZCB0byBsb2FkIGFuZ3VsYXIgbW9yZSB0aGFuIG9uY2UuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy90cnkgdG8gYmluZCB0byBqcXVlcnkgbm93IHNvIHRoYXQgb25lIGNhbiB3cml0ZSBqcUxpdGUoZG9jdW1lbnQpLnJlYWR5KClcbiAgLy9idXQgd2Ugd2lsbCByZWJpbmQgb24gYm9vdHN0cmFwIGFnYWluLlxuICBiaW5kSlF1ZXJ5KCk7XG5cbiAgcHVibGlzaEV4dGVybmFsQVBJKGFuZ3VsYXIpO1xuXG4gIGpxTGl0ZShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7XG4gICAgYW5ndWxhckluaXQoZG9jdW1lbnQsIGJvb3RzdHJhcCk7XG4gIH0pO1xuXG59KSh3aW5kb3csIGRvY3VtZW50KTtcblxuIXdpbmRvdy5hbmd1bGFyLiQkY3NwKCkgJiYgd2luZG93LmFuZ3VsYXIuZWxlbWVudChkb2N1bWVudCkuZmluZCgnaGVhZCcpLnByZXBlbmQoJzxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5AY2hhcnNldCBcIlVURi04XCI7W25nXFxcXDpjbG9ha10sW25nLWNsb2FrXSxbZGF0YS1uZy1jbG9ha10sW3gtbmctY2xvYWtdLC5uZy1jbG9haywueC1uZy1jbG9haywubmctaGlkZTpub3QoLm5nLWhpZGUtYW5pbWF0ZSl7ZGlzcGxheTpub25lICFpbXBvcnRhbnQ7fW5nXFxcXDpmb3Jte2Rpc3BsYXk6YmxvY2s7fTwvc3R5bGU+Jyk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFuZ3VsYXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJhbmd1bGFyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlIEFuZ3VsYXJKUyB2MS4zLjNcclxuICogKGMpIDIwMTAtMjAxNCBHb29nbGUsIEluYy4gaHR0cDovL2FuZ3VsYXJqcy5vcmdcclxuICogTGljZW5zZTogTUlUXHJcbiAqL1xyXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkKSB7J3VzZSBzdHJpY3QnO1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKlxyXG4gKiBUaGlzIG9iamVjdCBwcm92aWRlcyBhIHV0aWxpdHkgZm9yIHByb2R1Y2luZyByaWNoIEVycm9yIG1lc3NhZ2VzIHdpdGhpblxyXG4gKiBBbmd1bGFyLiBJdCBjYW4gYmUgY2FsbGVkIGFzIGZvbGxvd3M6XHJcbiAqXHJcbiAqIHZhciBleGFtcGxlTWluRXJyID0gbWluRXJyKCdleGFtcGxlJyk7XHJcbiAqIHRocm93IGV4YW1wbGVNaW5FcnIoJ29uZScsICdUaGlzIHswfSBpcyB7MX0nLCBmb28sIGJhcik7XHJcbiAqXHJcbiAqIFRoZSBhYm92ZSBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIG1pbkVyciBpbiB0aGUgZXhhbXBsZSBuYW1lc3BhY2UuIFRoZVxyXG4gKiByZXN1bHRpbmcgZXJyb3Igd2lsbCBoYXZlIGEgbmFtZXNwYWNlZCBlcnJvciBjb2RlIG9mIGV4YW1wbGUub25lLiAgVGhlXHJcbiAqIHJlc3VsdGluZyBlcnJvciB3aWxsIHJlcGxhY2UgezB9IHdpdGggdGhlIHZhbHVlIG9mIGZvbywgYW5kIHsxfSB3aXRoIHRoZVxyXG4gKiB2YWx1ZSBvZiBiYXIuIFRoZSBvYmplY3QgaXMgbm90IHJlc3RyaWN0ZWQgaW4gdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaXQgY2FuXHJcbiAqIHRha2UuXHJcbiAqXHJcbiAqIElmIGZld2VyIGFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkIHRoYW4gbmVjZXNzYXJ5IGZvciBpbnRlcnBvbGF0aW9uLCB0aGUgZXh0cmFcclxuICogaW50ZXJwb2xhdGlvbiBtYXJrZXJzIHdpbGwgYmUgcHJlc2VydmVkIGluIHRoZSBmaW5hbCBzdHJpbmcuXHJcbiAqXHJcbiAqIFNpbmNlIGRhdGEgd2lsbCBiZSBwYXJzZWQgc3RhdGljYWxseSBkdXJpbmcgYSBidWlsZCBzdGVwLCBzb21lIHJlc3RyaWN0aW9uc1xyXG4gKiBhcmUgYXBwbGllZCB3aXRoIHJlc3BlY3QgdG8gaG93IG1pbkVyciBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQgYW5kIGNhbGxlZC5cclxuICogSW5zdGFuY2VzIHNob3VsZCBoYXZlIG5hbWVzIG9mIHRoZSBmb3JtIG5hbWVzcGFjZU1pbkVyciBmb3IgYSBtaW5FcnIgY3JlYXRlZFxyXG4gKiB1c2luZyBtaW5FcnIoJ25hbWVzcGFjZScpIC4gRXJyb3IgY29kZXMsIG5hbWVzcGFjZXMgYW5kIHRlbXBsYXRlIHN0cmluZ3NcclxuICogc2hvdWxkIGFsbCBiZSBzdGF0aWMgc3RyaW5ncywgbm90IHZhcmlhYmxlcyBvciBnZW5lcmFsIGV4cHJlc3Npb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlIFRoZSBuYW1lc3BhY2UgdG8gdXNlIGZvciB0aGUgbmV3IG1pbkVyciBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtmdW5jdGlvbn0gRXJyb3JDb25zdHJ1Y3RvciBDdXN0b20gZXJyb3IgY29uc3RydWN0b3IgdG8gYmUgaW5zdGFudGlhdGVkIHdoZW4gcmV0dXJuaW5nXHJcbiAqICAgZXJyb3IgZnJvbSByZXR1cm5lZCBmdW5jdGlvbiwgZm9yIGNhc2VzIHdoZW4gYSBwYXJ0aWN1bGFyIHR5cGUgb2YgZXJyb3IgaXMgdXNlZnVsLlxyXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oY29kZTpzdHJpbmcsIHRlbXBsYXRlOnN0cmluZywgLi4udGVtcGxhdGVBcmdzKTogRXJyb3J9IG1pbkVyciBpbnN0YW5jZVxyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIG1pbkVycihtb2R1bGUsIEVycm9yQ29uc3RydWN0b3IpIHtcclxuICBFcnJvckNvbnN0cnVjdG9yID0gRXJyb3JDb25zdHJ1Y3RvciB8fCBFcnJvcjtcclxuICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgY29kZSA9IGFyZ3VtZW50c1swXSxcclxuICAgICAgcHJlZml4ID0gJ1snICsgKG1vZHVsZSA/IG1vZHVsZSArICc6JyA6ICcnKSArIGNvZGUgKyAnXSAnLFxyXG4gICAgICB0ZW1wbGF0ZSA9IGFyZ3VtZW50c1sxXSxcclxuICAgICAgdGVtcGxhdGVBcmdzID0gYXJndW1lbnRzLFxyXG5cclxuICAgICAgbWVzc2FnZSwgaTtcclxuXHJcbiAgICBtZXNzYWdlID0gcHJlZml4ICsgdGVtcGxhdGUucmVwbGFjZSgvXFx7XFxkK1xcfS9nLCBmdW5jdGlvbihtYXRjaCkge1xyXG4gICAgICB2YXIgaW5kZXggPSArbWF0Y2guc2xpY2UoMSwgLTEpLCBhcmc7XHJcblxyXG4gICAgICBpZiAoaW5kZXggKyAyIDwgdGVtcGxhdGVBcmdzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiB0b0RlYnVnU3RyaW5nKHRlbXBsYXRlQXJnc1tpbmRleCArIDJdKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbWF0Y2g7XHJcbiAgICB9KTtcclxuXHJcbiAgICBtZXNzYWdlID0gbWVzc2FnZSArICdcXG5odHRwOi8vZXJyb3JzLmFuZ3VsYXJqcy5vcmcvMS4zLjMvJyArXHJcbiAgICAgIChtb2R1bGUgPyBtb2R1bGUgKyAnLycgOiAnJykgKyBjb2RlO1xyXG4gICAgZm9yIChpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBtZXNzYWdlID0gbWVzc2FnZSArIChpID09IDIgPyAnPycgOiAnJicpICsgJ3AnICsgKGkgLSAyKSArICc9JyArXHJcbiAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHRvRGVidWdTdHJpbmcoYXJndW1lbnRzW2ldKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IEVycm9yQ29uc3RydWN0b3IobWVzc2FnZSk7XHJcbiAgfTtcclxufVxyXG5cclxuLyogV2UgbmVlZCB0byB0ZWxsIGpzaGludCB3aGF0IHZhcmlhYmxlcyBhcmUgYmVpbmcgZXhwb3J0ZWQgKi9cclxuLyogZ2xvYmFsIGFuZ3VsYXI6IHRydWUsXHJcbiAgbXNpZTogdHJ1ZSxcclxuICBqcUxpdGU6IHRydWUsXHJcbiAgalF1ZXJ5OiB0cnVlLFxyXG4gIHNsaWNlOiB0cnVlLFxyXG4gIHNwbGljZTogdHJ1ZSxcclxuICBwdXNoOiB0cnVlLFxyXG4gIHRvU3RyaW5nOiB0cnVlLFxyXG4gIG5nTWluRXJyOiB0cnVlLFxyXG4gIGFuZ3VsYXJNb2R1bGU6IHRydWUsXHJcbiAgdWlkOiB0cnVlLFxyXG4gIFJFR0VYX1NUUklOR19SRUdFWFA6IHRydWUsXHJcbiAgVkFMSURJVFlfU1RBVEVfUFJPUEVSVFk6IHRydWUsXHJcblxyXG4gIGxvd2VyY2FzZTogdHJ1ZSxcclxuICB1cHBlcmNhc2U6IHRydWUsXHJcbiAgbWFudWFsTG93ZXJjYXNlOiB0cnVlLFxyXG4gIG1hbnVhbFVwcGVyY2FzZTogdHJ1ZSxcclxuICBub2RlTmFtZV86IHRydWUsXHJcbiAgaXNBcnJheUxpa2U6IHRydWUsXHJcbiAgZm9yRWFjaDogdHJ1ZSxcclxuICBzb3J0ZWRLZXlzOiB0cnVlLFxyXG4gIGZvckVhY2hTb3J0ZWQ6IHRydWUsXHJcbiAgcmV2ZXJzZVBhcmFtczogdHJ1ZSxcclxuICBuZXh0VWlkOiB0cnVlLFxyXG4gIHNldEhhc2hLZXk6IHRydWUsXHJcbiAgZXh0ZW5kOiB0cnVlLFxyXG4gIGludDogdHJ1ZSxcclxuICBpbmhlcml0OiB0cnVlLFxyXG4gIG5vb3A6IHRydWUsXHJcbiAgaWRlbnRpdHk6IHRydWUsXHJcbiAgdmFsdWVGbjogdHJ1ZSxcclxuICBpc1VuZGVmaW5lZDogdHJ1ZSxcclxuICBpc0RlZmluZWQ6IHRydWUsXHJcbiAgaXNPYmplY3Q6IHRydWUsXHJcbiAgaXNTdHJpbmc6IHRydWUsXHJcbiAgaXNOdW1iZXI6IHRydWUsXHJcbiAgaXNEYXRlOiB0cnVlLFxyXG4gIGlzQXJyYXk6IHRydWUsXHJcbiAgaXNGdW5jdGlvbjogdHJ1ZSxcclxuICBpc1JlZ0V4cDogdHJ1ZSxcclxuICBpc1dpbmRvdzogdHJ1ZSxcclxuICBpc1Njb3BlOiB0cnVlLFxyXG4gIGlzRmlsZTogdHJ1ZSxcclxuICBpc0Jsb2I6IHRydWUsXHJcbiAgaXNCb29sZWFuOiB0cnVlLFxyXG4gIGlzUHJvbWlzZUxpa2U6IHRydWUsXHJcbiAgdHJpbTogdHJ1ZSxcclxuICBlc2NhcGVGb3JSZWdleHA6IHRydWUsXHJcbiAgaXNFbGVtZW50OiB0cnVlLFxyXG4gIG1ha2VNYXA6IHRydWUsXHJcbiAgaW5jbHVkZXM6IHRydWUsXHJcbiAgYXJyYXlSZW1vdmU6IHRydWUsXHJcbiAgY29weTogdHJ1ZSxcclxuICBzaGFsbG93Q29weTogdHJ1ZSxcclxuICBlcXVhbHM6IHRydWUsXHJcbiAgY3NwOiB0cnVlLFxyXG4gIGNvbmNhdDogdHJ1ZSxcclxuICBzbGljZUFyZ3M6IHRydWUsXHJcbiAgYmluZDogdHJ1ZSxcclxuICB0b0pzb25SZXBsYWNlcjogdHJ1ZSxcclxuICB0b0pzb246IHRydWUsXHJcbiAgZnJvbUpzb246IHRydWUsXHJcbiAgc3RhcnRpbmdUYWc6IHRydWUsXHJcbiAgdHJ5RGVjb2RlVVJJQ29tcG9uZW50OiB0cnVlLFxyXG4gIHBhcnNlS2V5VmFsdWU6IHRydWUsXHJcbiAgdG9LZXlWYWx1ZTogdHJ1ZSxcclxuICBlbmNvZGVVcmlTZWdtZW50OiB0cnVlLFxyXG4gIGVuY29kZVVyaVF1ZXJ5OiB0cnVlLFxyXG4gIGFuZ3VsYXJJbml0OiB0cnVlLFxyXG4gIGJvb3RzdHJhcDogdHJ1ZSxcclxuICBnZXRUZXN0YWJpbGl0eTogdHJ1ZSxcclxuICBzbmFrZV9jYXNlOiB0cnVlLFxyXG4gIGJpbmRKUXVlcnk6IHRydWUsXHJcbiAgYXNzZXJ0QXJnOiB0cnVlLFxyXG4gIGFzc2VydEFyZ0ZuOiB0cnVlLFxyXG4gIGFzc2VydE5vdEhhc093blByb3BlcnR5OiB0cnVlLFxyXG4gIGdldHRlcjogdHJ1ZSxcclxuICBnZXRCbG9ja05vZGVzOiB0cnVlLFxyXG4gIGhhc093blByb3BlcnR5OiB0cnVlLFxyXG4gIGNyZWF0ZU1hcDogdHJ1ZSxcclxuXHJcbiAgTk9ERV9UWVBFX0VMRU1FTlQ6IHRydWUsXHJcbiAgTk9ERV9UWVBFX1RFWFQ6IHRydWUsXHJcbiAgTk9ERV9UWVBFX0NPTU1FTlQ6IHRydWUsXHJcbiAgTk9ERV9UWVBFX0RPQ1VNRU5UOiB0cnVlLFxyXG4gIE5PREVfVFlQRV9ET0NVTUVOVF9GUkFHTUVOVDogdHJ1ZSxcclxuKi9cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBtb2R1bGVcclxuICogQG5hbWUgbmdcclxuICogQG1vZHVsZSBuZ1xyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogIyBuZyAoY29yZSBtb2R1bGUpXHJcbiAqIFRoZSBuZyBtb2R1bGUgaXMgbG9hZGVkIGJ5IGRlZmF1bHQgd2hlbiBhbiBBbmd1bGFySlMgYXBwbGljYXRpb24gaXMgc3RhcnRlZC4gVGhlIG1vZHVsZSBpdHNlbGZcclxuICogY29udGFpbnMgdGhlIGVzc2VudGlhbCBjb21wb25lbnRzIGZvciBhbiBBbmd1bGFySlMgYXBwbGljYXRpb24gdG8gZnVuY3Rpb24uIFRoZSB0YWJsZSBiZWxvd1xyXG4gKiBsaXN0cyBhIGhpZ2ggbGV2ZWwgYnJlYWtkb3duIG9mIGVhY2ggb2YgdGhlIHNlcnZpY2VzL2ZhY3RvcmllcywgZmlsdGVycywgZGlyZWN0aXZlcyBhbmQgdGVzdGluZ1xyXG4gKiBjb21wb25lbnRzIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBjb3JlIG1vZHVsZS5cclxuICpcclxuICogPGRpdiBkb2MtbW9kdWxlLWNvbXBvbmVudHM9XCJuZ1wiPjwvZGl2PlxyXG4gKi9cclxuXHJcbnZhciBSRUdFWF9TVFJJTkdfUkVHRVhQID0gL15cXC8oLispXFwvKFthLXpdKikkLztcclxuXHJcbi8vIFRoZSBuYW1lIG9mIGEgZm9ybSBjb250cm9sJ3MgVmFsaWRpdHlTdGF0ZSBwcm9wZXJ0eS5cclxuLy8gVGhpcyBpcyB1c2VkIHNvIHRoYXQgaXQncyBwb3NzaWJsZSBmb3IgaW50ZXJuYWwgdGVzdHMgdG8gY3JlYXRlIG1vY2sgVmFsaWRpdHlTdGF0ZXMuXHJcbnZhciBWQUxJRElUWV9TVEFURV9QUk9QRVJUWSA9ICd2YWxpZGl0eSc7XHJcblxyXG4vKipcclxuICogQG5nZG9jIGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGFuZ3VsYXIubG93ZXJjYXNlXHJcbiAqIEBtb2R1bGUgbmdcclxuICogQGtpbmQgZnVuY3Rpb25cclxuICpcclxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgc3RyaW5nIHRvIGxvd2VyY2FzZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTdHJpbmcgdG8gYmUgY29udmVydGVkIHRvIGxvd2VyY2FzZS5cclxuICogQHJldHVybnMge3N0cmluZ30gTG93ZXJjYXNlZCBzdHJpbmcuXHJcbiAqL1xyXG52YXIgbG93ZXJjYXNlID0gZnVuY3Rpb24oc3RyaW5nKSB7cmV0dXJuIGlzU3RyaW5nKHN0cmluZykgPyBzdHJpbmcudG9Mb3dlckNhc2UoKSA6IHN0cmluZzt9O1xyXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBmdW5jdGlvblxyXG4gKiBAbmFtZSBhbmd1bGFyLnVwcGVyY2FzZVxyXG4gKiBAbW9kdWxlIG5nXHJcbiAqIEBraW5kIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIHN0cmluZyB0byB1cHBlcmNhc2UuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU3RyaW5nIHRvIGJlIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UuXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVwcGVyY2FzZWQgc3RyaW5nLlxyXG4gKi9cclxudmFyIHVwcGVyY2FzZSA9IGZ1bmN0aW9uKHN0cmluZykge3JldHVybiBpc1N0cmluZyhzdHJpbmcpID8gc3RyaW5nLnRvVXBwZXJDYXNlKCkgOiBzdHJpbmc7fTtcclxuXHJcblxyXG52YXIgbWFudWFsTG93ZXJjYXNlID0gZnVuY3Rpb24ocykge1xyXG4gIC8qIGpzaGludCBiaXR3aXNlOiBmYWxzZSAqL1xyXG4gIHJldHVybiBpc1N0cmluZyhzKVxyXG4gICAgICA/IHMucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24oY2gpIHtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaC5jaGFyQ29kZUF0KDApIHwgMzIpO30pXHJcbiAgICAgIDogcztcclxufTtcclxudmFyIG1hbnVhbFVwcGVyY2FzZSA9IGZ1bmN0aW9uKHMpIHtcclxuICAvKiBqc2hpbnQgYml0d2lzZTogZmFsc2UgKi9cclxuICByZXR1cm4gaXNTdHJpbmcocylcclxuICAgICAgPyBzLnJlcGxhY2UoL1thLXpdL2csIGZ1bmN0aW9uKGNoKSB7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY2guY2hhckNvZGVBdCgwKSAmIH4zMik7fSlcclxuICAgICAgOiBzO1xyXG59O1xyXG5cclxuXHJcbi8vIFN0cmluZyN0b0xvd2VyQ2FzZSBhbmQgU3RyaW5nI3RvVXBwZXJDYXNlIGRvbid0IHByb2R1Y2UgY29ycmVjdCByZXN1bHRzIGluIGJyb3dzZXJzIHdpdGggVHVya2lzaFxyXG4vLyBsb2NhbGUsIGZvciB0aGlzIHJlYXNvbiB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzIGNhc2UgYW5kIHJlZGVmaW5lIGxvd2VyY2FzZS91cHBlcmNhc2UgbWV0aG9kc1xyXG4vLyB3aXRoIGNvcnJlY3QgYnV0IHNsb3dlciBhbHRlcm5hdGl2ZXMuXHJcbmlmICgnaScgIT09ICdJJy50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgbG93ZXJjYXNlID0gbWFudWFsTG93ZXJjYXNlO1xyXG4gIHVwcGVyY2FzZSA9IG1hbnVhbFVwcGVyY2FzZTtcclxufVxyXG5cclxuXHJcbnZhciAvKiogaG9sZHMgbWFqb3IgdmVyc2lvbiBudW1iZXIgZm9yIElFIG9yIE5hTiBmb3IgcmVhbCBicm93c2VycyAqL1xyXG4gICAgbXNpZSxcclxuICAgIGpxTGl0ZSwgICAgICAgICAgIC8vIGRlbGF5IGJpbmRpbmcgc2luY2UgalF1ZXJ5IGNvdWxkIGJlIGxvYWRlZCBhZnRlciB1cy5cclxuICAgIGpRdWVyeSwgICAgICAgICAgIC8vIGRlbGF5IGJpbmRpbmdcclxuICAgIHNsaWNlICAgICAgICAgICAgID0gW10uc2xpY2UsXHJcbiAgICBzcGxpY2UgICAgICAgICAgICA9IFtdLnNwbGljZSxcclxuICAgIHB1c2ggICAgICAgICAgICAgID0gW10ucHVzaCxcclxuICAgIHRvU3RyaW5nICAgICAgICAgID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxcclxuICAgIG5nTWluRXJyICAgICAgICAgID0gbWluRXJyKCduZycpLFxyXG5cclxuICAgIC8qKiBAbmFtZSBhbmd1bGFyICovXHJcbiAgICBhbmd1bGFyICAgICAgICAgICA9IHdpbmRvdy5hbmd1bGFyIHx8ICh3aW5kb3cuYW5ndWxhciA9IHt9KSxcclxuICAgIGFuZ3VsYXJNb2R1bGUsXHJcbiAgICB1aWQgICAgICAgICAgICAgICA9IDA7XHJcblxyXG4vKipcclxuICogZG9jdW1lbnRNb2RlIGlzIGFuIElFLW9ubHkgcHJvcGVydHlcclxuICogaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2NjMTk2OTg4KHY9dnMuODUpLmFzcHhcclxuICovXHJcbm1zaWUgPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XHJcblxyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqIEBwYXJhbSB7Kn0gb2JqXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBgb2JqYCBpcyBhbiBhcnJheSBvciBhcnJheS1saWtlIG9iamVjdCAoTm9kZUxpc3QsIEFyZ3VtZW50cyxcclxuICogICAgICAgICAgICAgICAgICAgU3RyaW5nIC4uLilcclxuICovXHJcbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKG9iaikge1xyXG4gIGlmIChvYmogPT0gbnVsbCB8fCBpc1dpbmRvdyhvYmopKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB2YXIgbGVuZ3RoID0gb2JqLmxlbmd0aDtcclxuXHJcbiAgaWYgKG9iai5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFX0VMRU1FTlQgJiYgbGVuZ3RoKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJldHVybiBpc1N0cmluZyhvYmopIHx8IGlzQXJyYXkob2JqKSB8fCBsZW5ndGggPT09IDAgfHxcclxuICAgICAgICAgdHlwZW9mIGxlbmd0aCA9PT0gJ251bWJlcicgJiYgbGVuZ3RoID4gMCAmJiAobGVuZ3RoIC0gMSkgaW4gb2JqO1xyXG59XHJcblxyXG4vKipcclxuICogQG5nZG9jIGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGFuZ3VsYXIuZm9yRWFjaFxyXG4gKiBAbW9kdWxlIG5nXHJcbiAqIEBraW5kIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBJbnZva2VzIHRoZSBgaXRlcmF0b3JgIGZ1bmN0aW9uIG9uY2UgZm9yIGVhY2ggaXRlbSBpbiBgb2JqYCBjb2xsZWN0aW9uLCB3aGljaCBjYW4gYmUgZWl0aGVyIGFuXHJcbiAqIG9iamVjdCBvciBhbiBhcnJheS4gVGhlIGBpdGVyYXRvcmAgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIGBpdGVyYXRvcih2YWx1ZSwga2V5LCBvYmopYCwgd2hlcmUgYHZhbHVlYFxyXG4gKiBpcyB0aGUgdmFsdWUgb2YgYW4gb2JqZWN0IHByb3BlcnR5IG9yIGFuIGFycmF5IGVsZW1lbnQsIGBrZXlgIGlzIHRoZSBvYmplY3QgcHJvcGVydHkga2V5IG9yXHJcbiAqIGFycmF5IGVsZW1lbnQgaW5kZXggYW5kIG9iaiBpcyB0aGUgYG9iamAgaXRzZWxmLiBTcGVjaWZ5aW5nIGEgYGNvbnRleHRgIGZvciB0aGUgZnVuY3Rpb24gaXMgb3B0aW9uYWwuXHJcbiAqXHJcbiAqIEl0IGlzIHdvcnRoIG5vdGluZyB0aGF0IGAuZm9yRWFjaGAgZG9lcyBub3QgaXRlcmF0ZSBvdmVyIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGJlY2F1c2UgaXQgZmlsdGVyc1xyXG4gKiB1c2luZyB0aGUgYGhhc093blByb3BlcnR5YCBtZXRob2QuXHJcbiAqXHJcbiAqIFVubGlrZSBFUzI2MidzXHJcbiAqIFtBcnJheS5wcm90b3R5cGUuZm9yRWFjaF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTE1LjQuNC4xOCksXHJcbiAqIFByb3ZpZGluZyAndW5kZWZpbmVkJyBvciAnbnVsbCcgdmFsdWVzIGZvciBgb2JqYCB3aWxsIG5vdCB0aHJvdyBhIFR5cGVFcnJvciwgYnV0IHJhdGhlciBqdXN0XHJcbiAqIHJldHVybiB0aGUgdmFsdWUgcHJvdmlkZWQuXHJcbiAqXHJcbiAgIGBgYGpzXHJcbiAgICAgdmFyIHZhbHVlcyA9IHtuYW1lOiAnbWlza28nLCBnZW5kZXI6ICdtYWxlJ307XHJcbiAgICAgdmFyIGxvZyA9IFtdO1xyXG4gICAgIGFuZ3VsYXIuZm9yRWFjaCh2YWx1ZXMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcclxuICAgICAgIHRoaXMucHVzaChrZXkgKyAnOiAnICsgdmFsdWUpO1xyXG4gICAgIH0sIGxvZyk7XHJcbiAgICAgZXhwZWN0KGxvZykudG9FcXVhbChbJ25hbWU6IG1pc2tvJywgJ2dlbmRlcjogbWFsZSddKTtcclxuICAgYGBgXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogT2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3IgSXRlcmF0b3IgZnVuY3Rpb24uXHJcbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29udGV4dCBPYmplY3QgdG8gYmVjb21lIGNvbnRleHQgKGB0aGlzYCkgZm9yIHRoZSBpdGVyYXRvciBmdW5jdGlvbi5cclxuICogQHJldHVybnMge09iamVjdHxBcnJheX0gUmVmZXJlbmNlIHRvIGBvYmpgLlxyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xyXG4gIHZhciBrZXksIGxlbmd0aDtcclxuICBpZiAob2JqKSB7XHJcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopKSB7XHJcbiAgICAgIGZvciAoa2V5IGluIG9iaikge1xyXG4gICAgICAgIC8vIE5lZWQgdG8gY2hlY2sgaWYgaGFzT3duUHJvcGVydHkgZXhpc3RzLFxyXG4gICAgICAgIC8vIGFzIG9uIElFOCB0aGUgcmVzdWx0IG9mIHF1ZXJ5U2VsZWN0b3JBbGwgaXMgYW4gb2JqZWN0IHdpdGhvdXQgYSBoYXNPd25Qcm9wZXJ0eSBmdW5jdGlvblxyXG4gICAgICAgIGlmIChrZXkgIT0gJ3Byb3RvdHlwZScgJiYga2V5ICE9ICdsZW5ndGgnICYmIGtleSAhPSAnbmFtZScgJiYgKCFvYmouaGFzT3duUHJvcGVydHkgfHwgb2JqLmhhc093blByb3BlcnR5KGtleSkpKSB7XHJcbiAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXldLCBrZXksIG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqKSB8fCBpc0FycmF5TGlrZShvYmopKSB7XHJcbiAgICAgIHZhciBpc1ByaW1pdGl2ZSA9IHR5cGVvZiBvYmogIT09ICdvYmplY3QnO1xyXG4gICAgICBmb3IgKGtleSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGtleSA8IGxlbmd0aDsga2V5KyspIHtcclxuICAgICAgICBpZiAoaXNQcmltaXRpdmUgfHwga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpba2V5XSwga2V5LCBvYmopO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChvYmouZm9yRWFjaCAmJiBvYmouZm9yRWFjaCAhPT0gZm9yRWFjaCkge1xyXG4gICAgICAgIG9iai5mb3JFYWNoKGl0ZXJhdG9yLCBjb250ZXh0LCBvYmopO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXldLCBrZXksIG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBvYmo7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNvcnRlZEtleXMob2JqKSB7XHJcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikuc29ydCgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmb3JFYWNoU29ydGVkKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcclxuICB2YXIga2V5cyA9IHNvcnRlZEtleXMob2JqKTtcclxuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2tleXNbaV1dLCBrZXlzW2ldKTtcclxuICB9XHJcbiAgcmV0dXJuIGtleXM7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogd2hlbiB1c2luZyBmb3JFYWNoIHRoZSBwYXJhbXMgYXJlIHZhbHVlLCBrZXksIGJ1dCBpdCBpcyBvZnRlbiB1c2VmdWwgdG8gaGF2ZSBrZXksIHZhbHVlLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZywgKil9IGl0ZXJhdG9yRm5cclxuICogQHJldHVybnMge2Z1bmN0aW9uKCosIHN0cmluZyl9XHJcbiAqL1xyXG5mdW5jdGlvbiByZXZlcnNlUGFyYW1zKGl0ZXJhdG9yRm4pIHtcclxuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGtleSkgeyBpdGVyYXRvckZuKGtleSwgdmFsdWUpOyB9O1xyXG59XHJcblxyXG4vKipcclxuICogQSBjb25zaXN0ZW50IHdheSBvZiBjcmVhdGluZyB1bmlxdWUgSURzIGluIGFuZ3VsYXIuXHJcbiAqXHJcbiAqIFVzaW5nIHNpbXBsZSBudW1iZXJzIGFsbG93cyB1cyB0byBnZW5lcmF0ZSAyOC42IG1pbGxpb24gdW5pcXVlIGlkcyBwZXIgc2Vjb25kIGZvciAxMCB5ZWFycyBiZWZvcmVcclxuICogd2UgaGl0IG51bWJlciBwcmVjaXNpb24gaXNzdWVzIGluIEphdmFTY3JpcHQuXHJcbiAqXHJcbiAqIE1hdGgucG93KDIsNTMpIC8gNjAgLyA2MCAvIDI0IC8gMzY1IC8gMTAgPSAyOC42TVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBhbiB1bmlxdWUgYWxwaGEtbnVtZXJpYyBzdHJpbmdcclxuICovXHJcbmZ1bmN0aW9uIG5leHRVaWQoKSB7XHJcbiAgcmV0dXJuICsrdWlkO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIFNldCBvciBjbGVhciB0aGUgaGFzaGtleSBmb3IgYW4gb2JqZWN0LlxyXG4gKiBAcGFyYW0gb2JqIG9iamVjdFxyXG4gKiBAcGFyYW0gaCB0aGUgaGFzaGtleSAoIXRydXRoeSB0byBkZWxldGUgdGhlIGhhc2hrZXkpXHJcbiAqL1xyXG5mdW5jdGlvbiBzZXRIYXNoS2V5KG9iaiwgaCkge1xyXG4gIGlmIChoKSB7XHJcbiAgICBvYmouJCRoYXNoS2V5ID0gaDtcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBkZWxldGUgb2JqLiQkaGFzaEtleTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZnVuY3Rpb25cclxuICogQG5hbWUgYW5ndWxhci5leHRlbmRcclxuICogQG1vZHVsZSBuZ1xyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogRXh0ZW5kcyB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGBkc3RgIGJ5IGNvcHlpbmcgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBmcm9tIHRoZSBgc3JjYCBvYmplY3QocylcclxuICogdG8gYGRzdGAuIFlvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSBgc3JjYCBvYmplY3RzLiBJZiB5b3Ugd2FudCB0byBwcmVzZXJ2ZSBvcmlnaW5hbCBvYmplY3RzLCB5b3UgY2FuIGRvIHNvXHJcbiAqIGJ5IHBhc3NpbmcgYW4gZW1wdHkgb2JqZWN0IGFzIHRoZSB0YXJnZXQ6IGB2YXIgb2JqZWN0ID0gYW5ndWxhci5leHRlbmQoe30sIG9iamVjdDEsIG9iamVjdDIpYC5cclxuICogTm90ZTogS2VlcCBpbiBtaW5kIHRoYXQgYGFuZ3VsYXIuZXh0ZW5kYCBkb2VzIG5vdCBzdXBwb3J0IHJlY3Vyc2l2ZSBtZXJnZSAoZGVlcCBjb3B5KS5cclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IGRzdCBEZXN0aW5hdGlvbiBvYmplY3QuXHJcbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzcmMgU291cmNlIG9iamVjdChzKS5cclxuICogQHJldHVybnMge09iamVjdH0gUmVmZXJlbmNlIHRvIGBkc3RgLlxyXG4gKi9cclxuZnVuY3Rpb24gZXh0ZW5kKGRzdCkge1xyXG4gIHZhciBoID0gZHN0LiQkaGFzaEtleTtcclxuXHJcbiAgZm9yICh2YXIgaSA9IDEsIGlpID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcclxuICAgIHZhciBvYmogPSBhcmd1bWVudHNbaV07XHJcbiAgICBpZiAob2JqKSB7XHJcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcclxuICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0ga2V5cy5sZW5ndGg7IGogPCBqajsgaisrKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGtleXNbal07XHJcbiAgICAgICAgZHN0W2tleV0gPSBvYmpba2V5XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0SGFzaEtleShkc3QsIGgpO1xyXG4gIHJldHVybiBkc3Q7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGludChzdHIpIHtcclxuICByZXR1cm4gcGFyc2VJbnQoc3RyLCAxMCk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBpbmhlcml0KHBhcmVudCwgZXh0cmEpIHtcclxuICByZXR1cm4gZXh0ZW5kKG5ldyAoZXh0ZW5kKGZ1bmN0aW9uKCkge30sIHtwcm90b3R5cGU6cGFyZW50fSkpKCksIGV4dHJhKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBmdW5jdGlvblxyXG4gKiBAbmFtZSBhbmd1bGFyLm5vb3BcclxuICogQG1vZHVsZSBuZ1xyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIG5vIG9wZXJhdGlvbnMuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWZ1bCB3aGVuIHdyaXRpbmcgY29kZSBpbiB0aGVcclxuICogZnVuY3Rpb25hbCBzdHlsZS5cclxuICAgYGBganNcclxuICAgICBmdW5jdGlvbiBmb28oY2FsbGJhY2spIHtcclxuICAgICAgIHZhciByZXN1bHQgPSBjYWxjdWxhdGVSZXN1bHQoKTtcclxuICAgICAgIChjYWxsYmFjayB8fCBhbmd1bGFyLm5vb3ApKHJlc3VsdCk7XHJcbiAgICAgfVxyXG4gICBgYGBcclxuICovXHJcbmZ1bmN0aW9uIG5vb3AoKSB7fVxyXG5ub29wLiRpbmplY3QgPSBbXTtcclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGFuZ3VsYXIuaWRlbnRpdHlcclxuICogQG1vZHVsZSBuZ1xyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgaXRzIGZpcnN0IGFyZ3VtZW50LiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB3aGVuIHdyaXRpbmcgY29kZSBpbiB0aGVcclxuICogZnVuY3Rpb25hbCBzdHlsZS5cclxuICpcclxuICAgYGBganNcclxuICAgICBmdW5jdGlvbiB0cmFuc2Zvcm1lcih0cmFuc2Zvcm1hdGlvbkZuLCB2YWx1ZSkge1xyXG4gICAgICAgcmV0dXJuICh0cmFuc2Zvcm1hdGlvbkZuIHx8IGFuZ3VsYXIuaWRlbnRpdHkpKHZhbHVlKTtcclxuICAgICB9O1xyXG4gICBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGlkZW50aXR5KCQpIHtyZXR1cm4gJDt9XHJcbmlkZW50aXR5LiRpbmplY3QgPSBbXTtcclxuXHJcblxyXG5mdW5jdGlvbiB2YWx1ZUZuKHZhbHVlKSB7cmV0dXJuIGZ1bmN0aW9uKCkge3JldHVybiB2YWx1ZTt9O31cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZnVuY3Rpb25cclxuICogQG5hbWUgYW5ndWxhci5pc1VuZGVmaW5lZFxyXG4gKiBAbW9kdWxlIG5nXHJcbiAqIEBraW5kIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBEZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIHVuZGVmaW5lZC5cclxuICpcclxuICogQHBhcmFtIHsqfSB2YWx1ZSBSZWZlcmVuY2UgdG8gY2hlY2suXHJcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgdW5kZWZpbmVkLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJzt9XHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBmdW5jdGlvblxyXG4gKiBAbmFtZSBhbmd1bGFyLmlzRGVmaW5lZFxyXG4gKiBAbW9kdWxlIG5nXHJcbiAqIEBraW5kIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBEZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIGRlZmluZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVmZXJlbmNlIHRvIGNoZWNrLlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBgdmFsdWVgIGlzIGRlZmluZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0RlZmluZWQodmFsdWUpIHtyZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJzt9XHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBmdW5jdGlvblxyXG4gKiBAbmFtZSBhbmd1bGFyLmlzT2JqZWN0XHJcbiAqIEBtb2R1bGUgbmdcclxuICogQGtpbmQgZnVuY3Rpb25cclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIERldGVybWluZXMgaWYgYSByZWZlcmVuY2UgaXMgYW4gYE9iamVjdGAuIFVubGlrZSBgdHlwZW9mYCBpbiBKYXZhU2NyaXB0LCBgbnVsbGBzIGFyZSBub3RcclxuICogY29uc2lkZXJlZCB0byBiZSBvYmplY3RzLiBOb3RlIHRoYXQgSmF2YVNjcmlwdCBhcnJheXMgYXJlIG9iamVjdHMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVmZXJlbmNlIHRvIGNoZWNrLlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBgdmFsdWVgIGlzIGFuIGBPYmplY3RgIGJ1dCBub3QgYG51bGxgLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcclxuICAvLyBodHRwOi8vanNwZXJmLmNvbS9pc29iamVjdDRcclxuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JztcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZnVuY3Rpb25cclxuICogQG5hbWUgYW5ndWxhci5pc1N0cmluZ1xyXG4gKiBAbW9kdWxlIG5nXHJcbiAqIEBraW5kIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBEZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIGEgYFN0cmluZ2AuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVmZXJlbmNlIHRvIGNoZWNrLlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBgdmFsdWVgIGlzIGEgYFN0cmluZ2AuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge3JldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO31cclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGFuZ3VsYXIuaXNOdW1iZXJcclxuICogQG1vZHVsZSBuZ1xyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogRGV0ZXJtaW5lcyBpZiBhIHJlZmVyZW5jZSBpcyBhIGBOdW1iZXJgLlxyXG4gKlxyXG4gKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay5cclxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBpcyBhIGBOdW1iZXJgLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJzt9XHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBmdW5jdGlvblxyXG4gKiBAbmFtZSBhbmd1bGFyLmlzRGF0ZVxyXG4gKiBAbW9kdWxlIG5nXHJcbiAqIEBraW5kIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBEZXRlcm1pbmVzIGlmIGEgdmFsdWUgaXMgYSBkYXRlLlxyXG4gKlxyXG4gKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay5cclxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBpcyBhIGBEYXRlYC5cclxuICovXHJcbmZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xyXG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBmdW5jdGlvblxyXG4gKiBAbmFtZSBhbmd1bGFyLmlzQXJyYXlcclxuICogQG1vZHVsZSBuZ1xyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogRGV0ZXJtaW5lcyBpZiBhIHJlZmVyZW5jZSBpcyBhbiBgQXJyYXlgLlxyXG4gKlxyXG4gKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay5cclxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBpcyBhbiBgQXJyYXlgLlxyXG4gKi9cclxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBmdW5jdGlvblxyXG4gKiBAbmFtZSBhbmd1bGFyLmlzRnVuY3Rpb25cclxuICogQG1vZHVsZSBuZ1xyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogRGV0ZXJtaW5lcyBpZiBhIHJlZmVyZW5jZSBpcyBhIGBGdW5jdGlvbmAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgUmVmZXJlbmNlIHRvIGNoZWNrLlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBgdmFsdWVgIGlzIGEgYEZ1bmN0aW9uYC5cclxuICovXHJcbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO31cclxuXHJcblxyXG4vKipcclxuICogRGV0ZXJtaW5lcyBpZiBhIHZhbHVlIGlzIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdC5cclxuICpcclxuICogQHByaXZhdGVcclxuICogQHBhcmFtIHsqfSB2YWx1ZSBSZWZlcmVuY2UgdG8gY2hlY2suXHJcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIGB2YWx1ZWAgaXMgYSBgUmVnRXhwYC5cclxuICovXHJcbmZ1bmN0aW9uIGlzUmVnRXhwKHZhbHVlKSB7XHJcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBSZWdFeHBdJztcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYG9iamAgaXMgYSB3aW5kb3cgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBAcGFyYW0geyp9IG9iaiBPYmplY3QgdG8gY2hlY2tcclxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYG9iamAgaXMgYSB3aW5kb3cgb2JqLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNXaW5kb3cob2JqKSB7XHJcbiAgcmV0dXJuIG9iaiAmJiBvYmoud2luZG93ID09PSBvYmo7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBpc1Njb3BlKG9iaikge1xyXG4gIHJldHVybiBvYmogJiYgb2JqLiRldmFsQXN5bmMgJiYgb2JqLiR3YXRjaDtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzRmlsZShvYmopIHtcclxuICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBGaWxlXSc7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBpc0Jsb2Iob2JqKSB7XHJcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XHJcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gaXNQcm9taXNlTGlrZShvYmopIHtcclxuICByZXR1cm4gb2JqICYmIGlzRnVuY3Rpb24ob2JqLnRoZW4pO1xyXG59XHJcblxyXG5cclxudmFyIHRyaW0gPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gIHJldHVybiBpc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZS50cmltKCkgOiB2YWx1ZTtcclxufTtcclxuXHJcbi8vIENvcGllZCBmcm9tOlxyXG4vLyBodHRwOi8vZG9jcy5jbG9zdXJlLWxpYnJhcnkuZ29vZ2xlY29kZS5jb20vZ2l0L2xvY2FsX2Nsb3N1cmVfZ29vZ19zdHJpbmdfc3RyaW5nLmpzLnNvdXJjZS5odG1sI2xpbmUxMDIxXHJcbi8vIFByZXJlcTogcyBpcyBhIHN0cmluZy5cclxudmFyIGVzY2FwZUZvclJlZ2V4cCA9IGZ1bmN0aW9uKHMpIHtcclxuICByZXR1cm4gcy5yZXBsYWNlKC8oWy0oKVxcW1xcXXt9Kz8qLiRcXF58LDojPCFcXFxcXSkvZywgJ1xcXFwkMScpLlxyXG4gICAgICAgICAgIHJlcGxhY2UoL1xceDA4L2csICdcXFxceDA4Jyk7XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBmdW5jdGlvblxyXG4gKiBAbmFtZSBhbmd1bGFyLmlzRWxlbWVudFxyXG4gKiBAbW9kdWxlIG5nXHJcbiAqIEBraW5kIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBEZXRlcm1pbmVzIGlmIGEgcmVmZXJlbmNlIGlzIGEgRE9NIGVsZW1lbnQgKG9yIHdyYXBwZWQgalF1ZXJ5IGVsZW1lbnQpLlxyXG4gKlxyXG4gKiBAcGFyYW0geyp9IHZhbHVlIFJlZmVyZW5jZSB0byBjaGVjay5cclxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBpcyBhIERPTSBlbGVtZW50IChvciB3cmFwcGVkIGpRdWVyeSBlbGVtZW50KS5cclxuICovXHJcbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XHJcbiAgcmV0dXJuICEhKG5vZGUgJiZcclxuICAgIChub2RlLm5vZGVOYW1lICAvLyB3ZSBhcmUgYSBkaXJlY3QgZWxlbWVudFxyXG4gICAgfHwgKG5vZGUucHJvcCAmJiBub2RlLmF0dHIgJiYgbm9kZS5maW5kKSkpOyAgLy8gd2UgaGF2ZSBhbiBvbiBhbmQgZmluZCBtZXRob2QgcGFydCBvZiBqUXVlcnkgQVBJXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gc3RyICdrZXkxLGtleTIsLi4uJ1xyXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBpbiB0aGUgZm9ybSBvZiB7a2V5MTp0cnVlLCBrZXkyOnRydWUsIC4uLn1cclxuICovXHJcbmZ1bmN0aW9uIG1ha2VNYXAoc3RyKSB7XHJcbiAgdmFyIG9iaiA9IHt9LCBpdGVtcyA9IHN0ci5zcGxpdChcIixcIiksIGk7XHJcbiAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAgb2JqWyBpdGVtc1tpXSBdID0gdHJ1ZTtcclxuICByZXR1cm4gb2JqO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gbm9kZU5hbWVfKGVsZW1lbnQpIHtcclxuICByZXR1cm4gbG93ZXJjYXNlKGVsZW1lbnQubm9kZU5hbWUgfHwgZWxlbWVudFswXS5ub2RlTmFtZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCBvYmopIHtcclxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChhcnJheSwgb2JqKSAhPSAtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gYXJyYXlSZW1vdmUoYXJyYXksIHZhbHVlKSB7XHJcbiAgdmFyIGluZGV4ID0gYXJyYXkuaW5kZXhPZih2YWx1ZSk7XHJcbiAgaWYgKGluZGV4ID49IDApXHJcbiAgICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIHJldHVybiB2YWx1ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBmdW5jdGlvblxyXG4gKiBAbmFtZSBhbmd1bGFyLmNvcHlcclxuICogQG1vZHVsZSBuZ1xyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQ3JlYXRlcyBhIGRlZXAgY29weSBvZiBgc291cmNlYCwgd2hpY2ggc2hvdWxkIGJlIGFuIG9iamVjdCBvciBhbiBhcnJheS5cclxuICpcclxuICogKiBJZiBubyBkZXN0aW5hdGlvbiBpcyBzdXBwbGllZCwgYSBjb3B5IG9mIHRoZSBvYmplY3Qgb3IgYXJyYXkgaXMgY3JlYXRlZC5cclxuICogKiBJZiBhIGRlc3RpbmF0aW9uIGlzIHByb3ZpZGVkLCBhbGwgb2YgaXRzIGVsZW1lbnRzIChmb3IgYXJyYXkpIG9yIHByb3BlcnRpZXMgKGZvciBvYmplY3RzKVxyXG4gKiAgIGFyZSBkZWxldGVkIGFuZCB0aGVuIGFsbCBlbGVtZW50cy9wcm9wZXJ0aWVzIGZyb20gdGhlIHNvdXJjZSBhcmUgY29waWVkIHRvIGl0LlxyXG4gKiAqIElmIGBzb3VyY2VgIGlzIG5vdCBhbiBvYmplY3Qgb3IgYXJyYXkgKGluYy4gYG51bGxgIGFuZCBgdW5kZWZpbmVkYCksIGBzb3VyY2VgIGlzIHJldHVybmVkLlxyXG4gKiAqIElmIGBzb3VyY2VgIGlzIGlkZW50aWNhbCB0byAnZGVzdGluYXRpb24nIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi5cclxuICpcclxuICogQHBhcmFtIHsqfSBzb3VyY2UgVGhlIHNvdXJjZSB0aGF0IHdpbGwgYmUgdXNlZCB0byBtYWtlIGEgY29weS5cclxuICogICAgICAgICAgICAgICAgICAgQ2FuIGJlIGFueSB0eXBlLCBpbmNsdWRpbmcgcHJpbWl0aXZlcywgYG51bGxgLCBhbmQgYHVuZGVmaW5lZGAuXHJcbiAqIEBwYXJhbSB7KE9iamVjdHxBcnJheSk9fSBkZXN0aW5hdGlvbiBEZXN0aW5hdGlvbiBpbnRvIHdoaWNoIHRoZSBzb3VyY2UgaXMgY29waWVkLiBJZlxyXG4gKiAgICAgcHJvdmlkZWQsIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZSBhcyBgc291cmNlYC5cclxuICogQHJldHVybnMgeyp9IFRoZSBjb3B5IG9yIHVwZGF0ZWQgYGRlc3RpbmF0aW9uYCwgaWYgYGRlc3RpbmF0aW9uYCB3YXMgc3BlY2lmaWVkLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gPGV4YW1wbGUgbW9kdWxlPVwiY29weUV4YW1wbGVcIj5cclxuIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxyXG4gPGZvcm0gbm92YWxpZGF0ZSBjbGFzcz1cInNpbXBsZS1mb3JtXCI+XHJcbiBOYW1lOiA8aW5wdXQgdHlwZT1cInRleHRcIiBuZy1tb2RlbD1cInVzZXIubmFtZVwiIC8+PGJyIC8+XHJcbiBFLW1haWw6IDxpbnB1dCB0eXBlPVwiZW1haWxcIiBuZy1tb2RlbD1cInVzZXIuZW1haWxcIiAvPjxiciAvPlxyXG4gR2VuZGVyOiA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmctbW9kZWw9XCJ1c2VyLmdlbmRlclwiIHZhbHVlPVwibWFsZVwiIC8+bWFsZVxyXG4gPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5nLW1vZGVsPVwidXNlci5nZW5kZXJcIiB2YWx1ZT1cImZlbWFsZVwiIC8+ZmVtYWxlPGJyIC8+XHJcbiA8YnV0dG9uIG5nLWNsaWNrPVwicmVzZXQoKVwiPlJFU0VUPC9idXR0b24+XHJcbiA8YnV0dG9uIG5nLWNsaWNrPVwidXBkYXRlKHVzZXIpXCI+U0FWRTwvYnV0dG9uPlxyXG4gPC9mb3JtPlxyXG4gPHByZT5mb3JtID0ge3t1c2VyIHwganNvbn19PC9wcmU+XHJcbiA8cHJlPm1hc3RlciA9IHt7bWFzdGVyIHwganNvbn19PC9wcmU+XHJcbiA8L2Rpdj5cclxuXHJcbiA8c2NyaXB0PlxyXG4gIGFuZ3VsYXIubW9kdWxlKCdjb3B5RXhhbXBsZScsIFtdKVxyXG4gICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcclxuICAgICAgJHNjb3BlLm1hc3Rlcj0ge307XHJcblxyXG4gICAgICAkc2NvcGUudXBkYXRlID0gZnVuY3Rpb24odXNlcikge1xyXG4gICAgICAgIC8vIEV4YW1wbGUgd2l0aCAxIGFyZ3VtZW50XHJcbiAgICAgICAgJHNjb3BlLm1hc3Rlcj0gYW5ndWxhci5jb3B5KHVzZXIpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgJHNjb3BlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gRXhhbXBsZSB3aXRoIDIgYXJndW1lbnRzXHJcbiAgICAgICAgYW5ndWxhci5jb3B5KCRzY29wZS5tYXN0ZXIsICRzY29wZS51c2VyKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgICRzY29wZS5yZXNldCgpO1xyXG4gICAgfV0pO1xyXG4gPC9zY3JpcHQ+XHJcbiA8L2ZpbGU+XHJcbiA8L2V4YW1wbGU+XHJcbiAqL1xyXG5mdW5jdGlvbiBjb3B5KHNvdXJjZSwgZGVzdGluYXRpb24sIHN0YWNrU291cmNlLCBzdGFja0Rlc3QpIHtcclxuICBpZiAoaXNXaW5kb3coc291cmNlKSB8fCBpc1Njb3BlKHNvdXJjZSkpIHtcclxuICAgIHRocm93IG5nTWluRXJyKCdjcHdzJyxcclxuICAgICAgXCJDYW4ndCBjb3B5ISBNYWtpbmcgY29waWVzIG9mIFdpbmRvdyBvciBTY29wZSBpbnN0YW5jZXMgaXMgbm90IHN1cHBvcnRlZC5cIik7XHJcbiAgfVxyXG5cclxuICBpZiAoIWRlc3RpbmF0aW9uKSB7XHJcbiAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTtcclxuICAgIGlmIChzb3VyY2UpIHtcclxuICAgICAgaWYgKGlzQXJyYXkoc291cmNlKSkge1xyXG4gICAgICAgIGRlc3RpbmF0aW9uID0gY29weShzb3VyY2UsIFtdLCBzdGFja1NvdXJjZSwgc3RhY2tEZXN0KTtcclxuICAgICAgfSBlbHNlIGlmIChpc0RhdGUoc291cmNlKSkge1xyXG4gICAgICAgIGRlc3RpbmF0aW9uID0gbmV3IERhdGUoc291cmNlLmdldFRpbWUoKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXNSZWdFeHAoc291cmNlKSkge1xyXG4gICAgICAgIGRlc3RpbmF0aW9uID0gbmV3IFJlZ0V4cChzb3VyY2Uuc291cmNlLCBzb3VyY2UudG9TdHJpbmcoKS5tYXRjaCgvW15cXC9dKiQvKVswXSk7XHJcbiAgICAgICAgZGVzdGluYXRpb24ubGFzdEluZGV4ID0gc291cmNlLmxhc3RJbmRleDtcclxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChzb3VyY2UpKSB7XHJcbiAgICAgICAgdmFyIGVtcHR5T2JqZWN0ID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlKSk7XHJcbiAgICAgICAgZGVzdGluYXRpb24gPSBjb3B5KHNvdXJjZSwgZW1wdHlPYmplY3QsIHN0YWNrU291cmNlLCBzdGFja0Rlc3QpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChzb3VyY2UgPT09IGRlc3RpbmF0aW9uKSB0aHJvdyBuZ01pbkVycignY3BpJyxcclxuICAgICAgXCJDYW4ndCBjb3B5ISBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBpZGVudGljYWwuXCIpO1xyXG5cclxuICAgIHN0YWNrU291cmNlID0gc3RhY2tTb3VyY2UgfHwgW107XHJcbiAgICBzdGFja0Rlc3QgPSBzdGFja0Rlc3QgfHwgW107XHJcblxyXG4gICAgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcclxuICAgICAgdmFyIGluZGV4ID0gc3RhY2tTb3VyY2UuaW5kZXhPZihzb3VyY2UpO1xyXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSByZXR1cm4gc3RhY2tEZXN0W2luZGV4XTtcclxuXHJcbiAgICAgIHN0YWNrU291cmNlLnB1c2goc291cmNlKTtcclxuICAgICAgc3RhY2tEZXN0LnB1c2goZGVzdGluYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByZXN1bHQ7XHJcbiAgICBpZiAoaXNBcnJheShzb3VyY2UpKSB7XHJcbiAgICAgIGRlc3RpbmF0aW9uLmxlbmd0aCA9IDA7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gY29weShzb3VyY2VbaV0sIG51bGwsIHN0YWNrU291cmNlLCBzdGFja0Rlc3QpO1xyXG4gICAgICAgIGlmIChpc09iamVjdChzb3VyY2VbaV0pKSB7XHJcbiAgICAgICAgICBzdGFja1NvdXJjZS5wdXNoKHNvdXJjZVtpXSk7XHJcbiAgICAgICAgICBzdGFja0Rlc3QucHVzaChyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZXN0aW5hdGlvbi5wdXNoKHJlc3VsdCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhciBoID0gZGVzdGluYXRpb24uJCRoYXNoS2V5O1xyXG4gICAgICBpZiAoaXNBcnJheShkZXN0aW5hdGlvbikpIHtcclxuICAgICAgICBkZXN0aW5hdGlvbi5sZW5ndGggPSAwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvckVhY2goZGVzdGluYXRpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcclxuICAgICAgICAgIGRlbGV0ZSBkZXN0aW5hdGlvbltrZXldO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcclxuICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IGNvcHkoc291cmNlW2tleV0sIG51bGwsIHN0YWNrU291cmNlLCBzdGFja0Rlc3QpO1xyXG4gICAgICAgICAgaWYgKGlzT2JqZWN0KHNvdXJjZVtrZXldKSkge1xyXG4gICAgICAgICAgICBzdGFja1NvdXJjZS5wdXNoKHNvdXJjZVtrZXldKTtcclxuICAgICAgICAgICAgc3RhY2tEZXN0LnB1c2gocmVzdWx0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRlc3RpbmF0aW9uW2tleV0gPSByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHNldEhhc2hLZXkoZGVzdGluYXRpb24saCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICByZXR1cm4gZGVzdGluYXRpb247XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mIGFuIG9iamVjdCwgYW4gYXJyYXkgb3IgYSBwcmltaXRpdmUuXHJcbiAqXHJcbiAqIEFzc3VtZXMgdGhhdCB0aGVyZSBhcmUgbm8gcHJvdG8gcHJvcGVydGllcyBmb3Igb2JqZWN0cy5cclxuICovXHJcbmZ1bmN0aW9uIHNoYWxsb3dDb3B5KHNyYywgZHN0KSB7XHJcbiAgaWYgKGlzQXJyYXkoc3JjKSkge1xyXG4gICAgZHN0ID0gZHN0IHx8IFtdO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHNyYy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XHJcbiAgICAgIGRzdFtpXSA9IHNyY1tpXTtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNyYykpIHtcclxuICAgIGRzdCA9IGRzdCB8fCB7fTtcclxuXHJcbiAgICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XHJcbiAgICAgIGlmICghKGtleS5jaGFyQXQoMCkgPT09ICckJyAmJiBrZXkuY2hhckF0KDEpID09PSAnJCcpKSB7XHJcbiAgICAgICAgZHN0W2tleV0gPSBzcmNba2V5XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGRzdCB8fCBzcmM7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGFuZ3VsYXIuZXF1YWxzXHJcbiAqIEBtb2R1bGUgbmdcclxuICogQGtpbmQgZnVuY3Rpb25cclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIERldGVybWluZXMgaWYgdHdvIG9iamVjdHMgb3IgdHdvIHZhbHVlcyBhcmUgZXF1aXZhbGVudC4gU3VwcG9ydHMgdmFsdWUgdHlwZXMsIHJlZ3VsYXJcclxuICogZXhwcmVzc2lvbnMsIGFycmF5cyBhbmQgb2JqZWN0cy5cclxuICpcclxuICogVHdvIG9iamVjdHMgb3IgdmFsdWVzIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgaWYgYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcclxuICpcclxuICogKiBCb3RoIG9iamVjdHMgb3IgdmFsdWVzIHBhc3MgYD09PWAgY29tcGFyaXNvbi5cclxuICogKiBCb3RoIG9iamVjdHMgb3IgdmFsdWVzIGFyZSBvZiB0aGUgc2FtZSB0eXBlIGFuZCBhbGwgb2YgdGhlaXIgcHJvcGVydGllcyBhcmUgZXF1YWwgYnlcclxuICogICBjb21wYXJpbmcgdGhlbSB3aXRoIGBhbmd1bGFyLmVxdWFsc2AuXHJcbiAqICogQm90aCB2YWx1ZXMgYXJlIE5hTi4gKEluIEphdmFTY3JpcHQsIE5hTiA9PSBOYU4gPT4gZmFsc2UuIEJ1dCB3ZSBjb25zaWRlciB0d28gTmFOIGFzIGVxdWFsKVxyXG4gKiAqIEJvdGggdmFsdWVzIHJlcHJlc2VudCB0aGUgc2FtZSByZWd1bGFyIGV4cHJlc3Npb24gKEluIEphdmFTY3JpcHQsXHJcbiAqICAgL2FiYy8gPT0gL2FiYy8gPT4gZmFsc2UuIEJ1dCB3ZSBjb25zaWRlciB0d28gcmVndWxhciBleHByZXNzaW9ucyBhcyBlcXVhbCB3aGVuIHRoZWlyIHRleHR1YWxcclxuICogICByZXByZXNlbnRhdGlvbiBtYXRjaGVzKS5cclxuICpcclxuICogRHVyaW5nIGEgcHJvcGVydHkgY29tcGFyaXNvbiwgcHJvcGVydGllcyBvZiBgZnVuY3Rpb25gIHR5cGUgYW5kIHByb3BlcnRpZXMgd2l0aCBuYW1lc1xyXG4gKiB0aGF0IGJlZ2luIHdpdGggYCRgIGFyZSBpZ25vcmVkLlxyXG4gKlxyXG4gKiBTY29wZSBhbmQgRE9NV2luZG93IG9iamVjdHMgYXJlIGJlaW5nIGNvbXBhcmVkIG9ubHkgYnkgaWRlbnRpZnkgKGA9PT1gKS5cclxuICpcclxuICogQHBhcmFtIHsqfSBvMSBPYmplY3Qgb3IgdmFsdWUgdG8gY29tcGFyZS5cclxuICogQHBhcmFtIHsqfSBvMiBPYmplY3Qgb3IgdmFsdWUgdG8gY29tcGFyZS5cclxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYXJndW1lbnRzIGFyZSBlcXVhbC5cclxuICovXHJcbmZ1bmN0aW9uIGVxdWFscyhvMSwgbzIpIHtcclxuICBpZiAobzEgPT09IG8yKSByZXR1cm4gdHJ1ZTtcclxuICBpZiAobzEgPT09IG51bGwgfHwgbzIgPT09IG51bGwpIHJldHVybiBmYWxzZTtcclxuICBpZiAobzEgIT09IG8xICYmIG8yICE9PSBvMikgcmV0dXJuIHRydWU7IC8vIE5hTiA9PT0gTmFOXHJcbiAgdmFyIHQxID0gdHlwZW9mIG8xLCB0MiA9IHR5cGVvZiBvMiwgbGVuZ3RoLCBrZXksIGtleVNldDtcclxuICBpZiAodDEgPT0gdDIpIHtcclxuICAgIGlmICh0MSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICBpZiAoaXNBcnJheShvMSkpIHtcclxuICAgICAgICBpZiAoIWlzQXJyYXkobzIpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKChsZW5ndGggPSBvMS5sZW5ndGgpID09IG8yLmxlbmd0aCkge1xyXG4gICAgICAgICAgZm9yIChrZXkgPSAwOyBrZXkgPCBsZW5ndGg7IGtleSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKG8xKSkge1xyXG4gICAgICAgIGlmICghaXNEYXRlKG8yKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBlcXVhbHMobzEuZ2V0VGltZSgpLCBvMi5nZXRUaW1lKCkpO1xyXG4gICAgICB9IGVsc2UgaWYgKGlzUmVnRXhwKG8xKSAmJiBpc1JlZ0V4cChvMikpIHtcclxuICAgICAgICByZXR1cm4gbzEudG9TdHJpbmcoKSA9PSBvMi50b1N0cmluZygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpc1Njb3BlKG8xKSB8fCBpc1Njb3BlKG8yKSB8fCBpc1dpbmRvdyhvMSkgfHwgaXNXaW5kb3cobzIpIHx8IGlzQXJyYXkobzIpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAga2V5U2V0ID0ge307XHJcbiAgICAgICAgZm9yIChrZXkgaW4gbzEpIHtcclxuICAgICAgICAgIGlmIChrZXkuY2hhckF0KDApID09PSAnJCcgfHwgaXNGdW5jdGlvbihvMVtrZXldKSkgY29udGludWU7XHJcbiAgICAgICAgICBpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAga2V5U2V0W2tleV0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGtleSBpbiBvMikge1xyXG4gICAgICAgICAgaWYgKCFrZXlTZXQuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxyXG4gICAgICAgICAgICAgIGtleS5jaGFyQXQoMCkgIT09ICckJyAmJlxyXG4gICAgICAgICAgICAgIG8yW2tleV0gIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgICFpc0Z1bmN0aW9uKG8yW2tleV0pKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxudmFyIGNzcCA9IGZ1bmN0aW9uKCkge1xyXG4gIGlmIChpc0RlZmluZWQoY3NwLmlzQWN0aXZlXykpIHJldHVybiBjc3AuaXNBY3RpdmVfO1xyXG5cclxuICB2YXIgYWN0aXZlID0gISEoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW25nLWNzcF0nKSB8fFxyXG4gICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1uZy1jc3BdJykpO1xyXG5cclxuICBpZiAoIWFjdGl2ZSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgLyoganNoaW50IC1XMDMxLCAtVzA1NCAqL1xyXG4gICAgICBuZXcgRnVuY3Rpb24oJycpO1xyXG4gICAgICAvKiBqc2hpbnQgK1cwMzEsICtXMDU0ICovXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGFjdGl2ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gKGNzcC5pc0FjdGl2ZV8gPSBhY3RpdmUpO1xyXG59O1xyXG5cclxuXHJcblxyXG5mdW5jdGlvbiBjb25jYXQoYXJyYXkxLCBhcnJheTIsIGluZGV4KSB7XHJcbiAgcmV0dXJuIGFycmF5MS5jb25jYXQoc2xpY2UuY2FsbChhcnJheTIsIGluZGV4KSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNsaWNlQXJncyhhcmdzLCBzdGFydEluZGV4KSB7XHJcbiAgcmV0dXJuIHNsaWNlLmNhbGwoYXJncywgc3RhcnRJbmRleCB8fCAwKTtcclxufVxyXG5cclxuXHJcbi8qIGpzaGludCAtVzEwMSAqL1xyXG4vKipcclxuICogQG5nZG9jIGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGFuZ3VsYXIuYmluZFxyXG4gKiBAbW9kdWxlIG5nXHJcbiAqIEBraW5kIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FsbHMgZnVuY3Rpb24gYGZuYCBib3VuZCB0byBgc2VsZmAgKGBzZWxmYCBiZWNvbWVzIHRoZSBgdGhpc2AgZm9yXHJcbiAqIGBmbmApLiBZb3UgY2FuIHN1cHBseSBvcHRpb25hbCBgYXJnc2AgdGhhdCBhcmUgcHJlYm91bmQgdG8gdGhlIGZ1bmN0aW9uLiBUaGlzIGZlYXR1cmUgaXMgYWxzb1xyXG4gKiBrbm93biBhcyBbcGFydGlhbCBhcHBsaWNhdGlvbl0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QYXJ0aWFsX2FwcGxpY2F0aW9uKSwgYXNcclxuICogZGlzdGluZ3Vpc2hlZCBmcm9tIFtmdW5jdGlvbiBjdXJyeWluZ10oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DdXJyeWluZyNDb250cmFzdF93aXRoX3BhcnRpYWxfZnVuY3Rpb25fYXBwbGljYXRpb24pLlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gc2VsZiBDb250ZXh0IHdoaWNoIGBmbmAgc2hvdWxkIGJlIGV2YWx1YXRlZCBpbi5cclxuICogQHBhcmFtIHtmdW5jdGlvbigpfSBmbiBGdW5jdGlvbiB0byBiZSBib3VuZC5cclxuICogQHBhcmFtIHsuLi4qfSBhcmdzIE9wdGlvbmFsIGFyZ3VtZW50cyB0byBiZSBwcmVib3VuZCB0byB0aGUgYGZuYCBmdW5jdGlvbiBjYWxsLlxyXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oKX0gRnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgYGZuYCB3aXRoIGFsbCB0aGUgc3BlY2lmaWVkIGJpbmRpbmdzLlxyXG4gKi9cclxuLyoganNoaW50ICtXMTAxICovXHJcbmZ1bmN0aW9uIGJpbmQoc2VsZiwgZm4pIHtcclxuICB2YXIgY3VycnlBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBzbGljZUFyZ3MoYXJndW1lbnRzLCAyKSA6IFtdO1xyXG4gIGlmIChpc0Z1bmN0aW9uKGZuKSAmJiAhKGZuIGluc3RhbmNlb2YgUmVnRXhwKSkge1xyXG4gICAgcmV0dXJuIGN1cnJ5QXJncy5sZW5ndGhcclxuICAgICAgPyBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXHJcbiAgICAgICAgICAgID8gZm4uYXBwbHkoc2VsZiwgY29uY2F0KGN1cnJ5QXJncywgYXJndW1lbnRzLCAwKSlcclxuICAgICAgICAgICAgOiBmbi5hcHBseShzZWxmLCBjdXJyeUFyZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXHJcbiAgICAgICAgICAgID8gZm4uYXBwbHkoc2VsZiwgYXJndW1lbnRzKVxyXG4gICAgICAgICAgICA6IGZuLmNhbGwoc2VsZik7XHJcbiAgICAgICAgfTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gaW4gSUUsIG5hdGl2ZSBtZXRob2RzIGFyZSBub3QgZnVuY3Rpb25zIHNvIHRoZXkgY2Fubm90IGJlIGJvdW5kIChub3RlOiB0aGV5IGRvbid0IG5lZWQgdG8gYmUpXHJcbiAgICByZXR1cm4gZm47XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gdG9Kc29uUmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xyXG4gIHZhciB2YWwgPSB2YWx1ZTtcclxuXHJcbiAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleS5jaGFyQXQoMCkgPT09ICckJyAmJiBrZXkuY2hhckF0KDEpID09PSAnJCcpIHtcclxuICAgIHZhbCA9IHVuZGVmaW5lZDtcclxuICB9IGVsc2UgaWYgKGlzV2luZG93KHZhbHVlKSkge1xyXG4gICAgdmFsID0gJyRXSU5ET1cnO1xyXG4gIH0gZWxzZSBpZiAodmFsdWUgJiYgIGRvY3VtZW50ID09PSB2YWx1ZSkge1xyXG4gICAgdmFsID0gJyRET0NVTUVOVCc7XHJcbiAgfSBlbHNlIGlmIChpc1Njb3BlKHZhbHVlKSkge1xyXG4gICAgdmFsID0gJyRTQ09QRSc7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdmFsO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBmdW5jdGlvblxyXG4gKiBAbmFtZSBhbmd1bGFyLnRvSnNvblxyXG4gKiBAbW9kdWxlIG5nXHJcbiAqIEBraW5kIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBTZXJpYWxpemVzIGlucHV0IGludG8gYSBKU09OLWZvcm1hdHRlZCBzdHJpbmcuIFByb3BlcnRpZXMgd2l0aCBsZWFkaW5nICQkIGNoYXJhY3RlcnMgd2lsbCBiZVxyXG4gKiBzdHJpcHBlZCBzaW5jZSBhbmd1bGFyIHVzZXMgdGhpcyBub3RhdGlvbiBpbnRlcm5hbGx5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheXxEYXRlfHN0cmluZ3xudW1iZXJ9IG9iaiBJbnB1dCB0byBiZSBzZXJpYWxpemVkIGludG8gSlNPTi5cclxuICogQHBhcmFtIHtib29sZWFuPX0gcHJldHR5IElmIHNldCB0byB0cnVlLCB0aGUgSlNPTiBvdXRwdXQgd2lsbCBjb250YWluIG5ld2xpbmVzIGFuZCB3aGl0ZXNwYWNlLlxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gSlNPTi1pZmllZCBzdHJpbmcgcmVwcmVzZW50aW5nIGBvYmpgLlxyXG4gKi9cclxuZnVuY3Rpb24gdG9Kc29uKG9iaiwgcHJldHR5KSB7XHJcbiAgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIHRvSnNvblJlcGxhY2VyLCBwcmV0dHkgPyAnICAnIDogbnVsbCk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGFuZ3VsYXIuZnJvbUpzb25cclxuICogQG1vZHVsZSBuZ1xyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogRGVzZXJpYWxpemVzIGEgSlNPTiBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBqc29uIEpTT04gc3RyaW5nIHRvIGRlc2VyaWFsaXplLlxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fEFycmF5fHN0cmluZ3xudW1iZXJ9IERlc2VyaWFsaXplZCB0aGluZ3kuXHJcbiAqL1xyXG5mdW5jdGlvbiBmcm9tSnNvbihqc29uKSB7XHJcbiAgcmV0dXJuIGlzU3RyaW5nKGpzb24pXHJcbiAgICAgID8gSlNPTi5wYXJzZShqc29uKVxyXG4gICAgICA6IGpzb247XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbGVtZW50LlxyXG4gKi9cclxuZnVuY3Rpb24gc3RhcnRpbmdUYWcoZWxlbWVudCkge1xyXG4gIGVsZW1lbnQgPSBqcUxpdGUoZWxlbWVudCkuY2xvbmUoKTtcclxuICB0cnkge1xyXG4gICAgLy8gdHVybnMgb3V0IElFIGRvZXMgbm90IGxldCB5b3Ugc2V0IC5odG1sKCkgb24gZWxlbWVudHMgd2hpY2hcclxuICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0byBoYXZlIGNoaWxkcmVuLiBTbyB3ZSBqdXN0IGlnbm9yZSBpdC5cclxuICAgIGVsZW1lbnQuZW1wdHkoKTtcclxuICB9IGNhdGNoIChlKSB7fVxyXG4gIHZhciBlbGVtSHRtbCA9IGpxTGl0ZSgnPGRpdj4nKS5hcHBlbmQoZWxlbWVudCkuaHRtbCgpO1xyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gZWxlbWVudFswXS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFX1RFWFQgPyBsb3dlcmNhc2UoZWxlbUh0bWwpIDpcclxuICAgICAgICBlbGVtSHRtbC5cclxuICAgICAgICAgIG1hdGNoKC9eKDxbXj5dKz4pLylbMV0uXHJcbiAgICAgICAgICByZXBsYWNlKC9ePChbXFx3XFwtXSspLywgZnVuY3Rpb24obWF0Y2gsIG5vZGVOYW1lKSB7IHJldHVybiAnPCcgKyBsb3dlcmNhc2Uobm9kZU5hbWUpOyB9KTtcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICByZXR1cm4gbG93ZXJjYXNlKGVsZW1IdG1sKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuLyoqXHJcbiAqIFRyaWVzIHRvIGRlY29kZSB0aGUgVVJJIGNvbXBvbmVudCB3aXRob3V0IHRocm93aW5nIGFuIGV4Y2VwdGlvbi5cclxuICpcclxuICogQHByaXZhdGVcclxuICogQHBhcmFtIHN0ciB2YWx1ZSBwb3RlbnRpYWwgVVJJIGNvbXBvbmVudCB0byBjaGVjay5cclxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYHZhbHVlYCBjYW4gYmUgZGVjb2RlZFxyXG4gKiB3aXRoIHRoZSBkZWNvZGVVUklDb21wb25lbnQgZnVuY3Rpb24uXHJcbiAqL1xyXG5mdW5jdGlvbiB0cnlEZWNvZGVVUklDb21wb25lbnQodmFsdWUpIHtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgLy8gSWdub3JlIGFueSBpbnZhbGlkIHVyaSBjb21wb25lbnRcclxuICB9XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogUGFyc2VzIGFuIGVzY2FwZWQgdXJsIHF1ZXJ5IHN0cmluZyBpbnRvIGtleS12YWx1ZSBwYWlycy5cclxuICogQHJldHVybnMge09iamVjdC48c3RyaW5nLGJvb2xlYW58QXJyYXk+fVxyXG4gKi9cclxuZnVuY3Rpb24gcGFyc2VLZXlWYWx1ZSgvKipzdHJpbmcqL2tleVZhbHVlKSB7XHJcbiAgdmFyIG9iaiA9IHt9LCBrZXlfdmFsdWUsIGtleTtcclxuICBmb3JFYWNoKChrZXlWYWx1ZSB8fCBcIlwiKS5zcGxpdCgnJicpLCBmdW5jdGlvbihrZXlWYWx1ZSkge1xyXG4gICAgaWYgKGtleVZhbHVlKSB7XHJcbiAgICAgIGtleV92YWx1ZSA9IGtleVZhbHVlLnJlcGxhY2UoL1xcKy9nLCclMjAnKS5zcGxpdCgnPScpO1xyXG4gICAgICBrZXkgPSB0cnlEZWNvZGVVUklDb21wb25lbnQoa2V5X3ZhbHVlWzBdKTtcclxuICAgICAgaWYgKGlzRGVmaW5lZChrZXkpKSB7XHJcbiAgICAgICAgdmFyIHZhbCA9IGlzRGVmaW5lZChrZXlfdmFsdWVbMV0pID8gdHJ5RGVjb2RlVVJJQ29tcG9uZW50KGtleV92YWx1ZVsxXSkgOiB0cnVlO1xyXG4gICAgICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcclxuICAgICAgICAgIG9ialtrZXldID0gdmFsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba2V5XSkpIHtcclxuICAgICAgICAgIG9ialtrZXldLnB1c2godmFsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb2JqW2tleV0gPSBbb2JqW2tleV0sdmFsXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuICByZXR1cm4gb2JqO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b0tleVZhbHVlKG9iaikge1xyXG4gIHZhciBwYXJ0cyA9IFtdO1xyXG4gIGZvckVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XHJcbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24oYXJyYXlWYWx1ZSkge1xyXG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlVXJpUXVlcnkoa2V5LCB0cnVlKSArXHJcbiAgICAgICAgICAgICAgICAgICAoYXJyYXlWYWx1ZSA9PT0gdHJ1ZSA/ICcnIDogJz0nICsgZW5jb2RlVXJpUXVlcnkoYXJyYXlWYWx1ZSwgdHJ1ZSkpKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgcGFydHMucHVzaChlbmNvZGVVcmlRdWVyeShrZXksIHRydWUpICtcclxuICAgICAgICAgICAgICAgKHZhbHVlID09PSB0cnVlID8gJycgOiAnPScgKyBlbmNvZGVVcmlRdWVyeSh2YWx1ZSwgdHJ1ZSkpKTtcclxuICAgIH1cclxuICB9KTtcclxuICByZXR1cm4gcGFydHMubGVuZ3RoID8gcGFydHMuam9pbignJicpIDogJyc7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogV2UgbmVlZCBvdXIgY3VzdG9tIG1ldGhvZCBiZWNhdXNlIGVuY29kZVVSSUNvbXBvbmVudCBpcyB0b28gYWdncmVzc2l2ZSBhbmQgZG9lc24ndCBmb2xsb3dcclxuICogaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzk4Ni50eHQgd2l0aCByZWdhcmRzIHRvIHRoZSBjaGFyYWN0ZXIgc2V0IChwY2hhcikgYWxsb3dlZCBpbiBwYXRoXHJcbiAqIHNlZ21lbnRzOlxyXG4gKiAgICBzZWdtZW50ICAgICAgID0gKnBjaGFyXHJcbiAqICAgIHBjaGFyICAgICAgICAgPSB1bnJlc2VydmVkIC8gcGN0LWVuY29kZWQgLyBzdWItZGVsaW1zIC8gXCI6XCIgLyBcIkBcIlxyXG4gKiAgICBwY3QtZW5jb2RlZCAgID0gXCIlXCIgSEVYRElHIEhFWERJR1xyXG4gKiAgICB1bnJlc2VydmVkICAgID0gQUxQSEEgLyBESUdJVCAvIFwiLVwiIC8gXCIuXCIgLyBcIl9cIiAvIFwiflwiXHJcbiAqICAgIHN1Yi1kZWxpbXMgICAgPSBcIiFcIiAvIFwiJFwiIC8gXCImXCIgLyBcIidcIiAvIFwiKFwiIC8gXCIpXCJcclxuICogICAgICAgICAgICAgICAgICAgICAvIFwiKlwiIC8gXCIrXCIgLyBcIixcIiAvIFwiO1wiIC8gXCI9XCJcclxuICovXHJcbmZ1bmN0aW9uIGVuY29kZVVyaVNlZ21lbnQodmFsKSB7XHJcbiAgcmV0dXJuIGVuY29kZVVyaVF1ZXJ5KHZhbCwgdHJ1ZSkuXHJcbiAgICAgICAgICAgICByZXBsYWNlKC8lMjYvZ2ksICcmJykuXHJcbiAgICAgICAgICAgICByZXBsYWNlKC8lM0QvZ2ksICc9JykuXHJcbiAgICAgICAgICAgICByZXBsYWNlKC8lMkIvZ2ksICcrJyk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgZm9yIGVuY29kaW5nICprZXkqIG9yICp2YWx1ZSogcGFydHMgb2YgcXVlcnkgY29tcG9uZW50LiBXZSBuZWVkIGEgY3VzdG9tXHJcbiAqIG1ldGhvZCBiZWNhdXNlIGVuY29kZVVSSUNvbXBvbmVudCBpcyB0b28gYWdncmVzc2l2ZSBhbmQgZW5jb2RlcyBzdHVmZiB0aGF0IGRvZXNuJ3QgaGF2ZSB0byBiZVxyXG4gKiBlbmNvZGVkIHBlciBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2OlxyXG4gKiAgICBxdWVyeSAgICAgICA9ICooIHBjaGFyIC8gXCIvXCIgLyBcIj9cIiApXHJcbiAqICAgIHBjaGFyICAgICAgICAgPSB1bnJlc2VydmVkIC8gcGN0LWVuY29kZWQgLyBzdWItZGVsaW1zIC8gXCI6XCIgLyBcIkBcIlxyXG4gKiAgICB1bnJlc2VydmVkICAgID0gQUxQSEEgLyBESUdJVCAvIFwiLVwiIC8gXCIuXCIgLyBcIl9cIiAvIFwiflwiXHJcbiAqICAgIHBjdC1lbmNvZGVkICAgPSBcIiVcIiBIRVhESUcgSEVYRElHXHJcbiAqICAgIHN1Yi1kZWxpbXMgICAgPSBcIiFcIiAvIFwiJFwiIC8gXCImXCIgLyBcIidcIiAvIFwiKFwiIC8gXCIpXCJcclxuICogICAgICAgICAgICAgICAgICAgICAvIFwiKlwiIC8gXCIrXCIgLyBcIixcIiAvIFwiO1wiIC8gXCI9XCJcclxuICovXHJcbmZ1bmN0aW9uIGVuY29kZVVyaVF1ZXJ5KHZhbCwgcGN0RW5jb2RlU3BhY2VzKSB7XHJcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxyXG4gICAgICAgICAgICAgcmVwbGFjZSgvJTQwL2dpLCAnQCcpLlxyXG4gICAgICAgICAgICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxyXG4gICAgICAgICAgICAgcmVwbGFjZSgvJTI0L2csICckJykuXHJcbiAgICAgICAgICAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXHJcbiAgICAgICAgICAgICByZXBsYWNlKC8lM0IvZ2ksICc7JykuXHJcbiAgICAgICAgICAgICByZXBsYWNlKC8lMjAvZywgKHBjdEVuY29kZVNwYWNlcyA/ICclMjAnIDogJysnKSk7XHJcbn1cclxuXHJcbnZhciBuZ0F0dHJQcmVmaXhlcyA9IFsnbmctJywgJ2RhdGEtbmctJywgJ25nOicsICd4LW5nLSddO1xyXG5cclxuZnVuY3Rpb24gZ2V0TmdBdHRyaWJ1dGUoZWxlbWVudCwgbmdBdHRyKSB7XHJcbiAgdmFyIGF0dHIsIGksIGlpID0gbmdBdHRyUHJlZml4ZXMubGVuZ3RoO1xyXG4gIGVsZW1lbnQgPSBqcUxpdGUoZWxlbWVudCk7XHJcbiAgZm9yIChpID0gMDsgaSA8IGlpOyArK2kpIHtcclxuICAgIGF0dHIgPSBuZ0F0dHJQcmVmaXhlc1tpXSArIG5nQXR0cjtcclxuICAgIGlmIChpc1N0cmluZyhhdHRyID0gZWxlbWVudC5hdHRyKGF0dHIpKSkge1xyXG4gICAgICByZXR1cm4gYXR0cjtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIG5nQXBwXHJcbiAqIEBtb2R1bGUgbmdcclxuICpcclxuICogQGVsZW1lbnQgQU5ZXHJcbiAqIEBwYXJhbSB7YW5ndWxhci5Nb2R1bGV9IG5nQXBwIGFuIG9wdGlvbmFsIGFwcGxpY2F0aW9uXHJcbiAqICAge0BsaW5rIGFuZ3VsYXIubW9kdWxlIG1vZHVsZX0gbmFtZSB0byBsb2FkLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBuZ1N0cmljdERpIGlmIHRoaXMgYXR0cmlidXRlIGlzIHByZXNlbnQgb24gdGhlIGFwcCBlbGVtZW50LCB0aGUgaW5qZWN0b3Igd2lsbCBiZVxyXG4gKiAgIGNyZWF0ZWQgaW4gXCJzdHJpY3QtZGlcIiBtb2RlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHdpbGwgZmFpbCB0byBpbnZva2UgZnVuY3Rpb25zIHdoaWNoXHJcbiAqICAgZG8gbm90IHVzZSBleHBsaWNpdCBmdW5jdGlvbiBhbm5vdGF0aW9uIChhbmQgYXJlIHRodXMgdW5zdWl0YWJsZSBmb3IgbWluaWZpY2F0aW9uKSwgYXMgZGVzY3JpYmVkXHJcbiAqICAgaW4ge0BsaW5rIGd1aWRlL2RpIHRoZSBEZXBlbmRlbmN5IEluamVjdGlvbiBndWlkZX0sIGFuZCB1c2VmdWwgZGVidWdnaW5nIGluZm8gd2lsbCBhc3Npc3QgaW5cclxuICogICB0cmFja2luZyBkb3duIHRoZSByb290IG9mIHRoZXNlIGJ1Z3MuXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKlxyXG4gKiBVc2UgdGhpcyBkaXJlY3RpdmUgdG8gKiphdXRvLWJvb3RzdHJhcCoqIGFuIEFuZ3VsYXJKUyBhcHBsaWNhdGlvbi4gVGhlIGBuZ0FwcGAgZGlyZWN0aXZlXHJcbiAqIGRlc2lnbmF0ZXMgdGhlICoqcm9vdCBlbGVtZW50Kiogb2YgdGhlIGFwcGxpY2F0aW9uIGFuZCBpcyB0eXBpY2FsbHkgcGxhY2VkIG5lYXIgdGhlIHJvb3QgZWxlbWVudFxyXG4gKiBvZiB0aGUgcGFnZSAtIGUuZy4gb24gdGhlIGA8Ym9keT5gIG9yIGA8aHRtbD5gIHRhZ3MuXHJcbiAqXHJcbiAqIE9ubHkgb25lIEFuZ3VsYXJKUyBhcHBsaWNhdGlvbiBjYW4gYmUgYXV0by1ib290c3RyYXBwZWQgcGVyIEhUTUwgZG9jdW1lbnQuIFRoZSBmaXJzdCBgbmdBcHBgXHJcbiAqIGZvdW5kIGluIHRoZSBkb2N1bWVudCB3aWxsIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSByb290IGVsZW1lbnQgdG8gYXV0by1ib290c3RyYXAgYXMgYW5cclxuICogYXBwbGljYXRpb24uIFRvIHJ1biBtdWx0aXBsZSBhcHBsaWNhdGlvbnMgaW4gYW4gSFRNTCBkb2N1bWVudCB5b3UgbXVzdCBtYW51YWxseSBib290c3RyYXAgdGhlbSB1c2luZ1xyXG4gKiB7QGxpbmsgYW5ndWxhci5ib290c3RyYXB9IGluc3RlYWQuIEFuZ3VsYXJKUyBhcHBsaWNhdGlvbnMgY2Fubm90IGJlIG5lc3RlZCB3aXRoaW4gZWFjaCBvdGhlci5cclxuICpcclxuICogWW91IGNhbiBzcGVjaWZ5IGFuICoqQW5ndWxhckpTIG1vZHVsZSoqIHRvIGJlIHVzZWQgYXMgdGhlIHJvb3QgbW9kdWxlIGZvciB0aGUgYXBwbGljYXRpb24uICBUaGlzXHJcbiAqIG1vZHVsZSB3aWxsIGJlIGxvYWRlZCBpbnRvIHRoZSB7QGxpbmsgYXV0by4kaW5qZWN0b3J9IHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIGJvb3RzdHJhcHBlZCBhbmRcclxuICogc2hvdWxkIGNvbnRhaW4gdGhlIGFwcGxpY2F0aW9uIGNvZGUgbmVlZGVkIG9yIGhhdmUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG1vZHVsZXMgdGhhdCB3aWxsXHJcbiAqIGNvbnRhaW4gdGhlIGNvZGUuIFNlZSB7QGxpbmsgYW5ndWxhci5tb2R1bGV9IGZvciBtb3JlIGluZm9ybWF0aW9uLlxyXG4gKlxyXG4gKiBJbiB0aGUgZXhhbXBsZSBiZWxvdyBpZiB0aGUgYG5nQXBwYCBkaXJlY3RpdmUgd2VyZSBub3QgcGxhY2VkIG9uIHRoZSBgaHRtbGAgZWxlbWVudCB0aGVuIHRoZVxyXG4gKiBkb2N1bWVudCB3b3VsZCBub3QgYmUgY29tcGlsZWQsIHRoZSBgQXBwQ29udHJvbGxlcmAgd291bGQgbm90IGJlIGluc3RhbnRpYXRlZCBhbmQgdGhlIGB7eyBhK2IgfX1gXHJcbiAqIHdvdWxkIG5vdCBiZSByZXNvbHZlZCB0byBgM2AuXHJcbiAqXHJcbiAqIGBuZ0FwcGAgaXMgdGhlIGVhc2llc3QsIGFuZCBtb3N0IGNvbW1vbiwgd2F5IHRvIGJvb3RzdHJhcCBhbiBhcHBsaWNhdGlvbi5cclxuICpcclxuIDxleGFtcGxlIG1vZHVsZT1cIm5nQXBwRGVtb1wiPlxyXG4gICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJuZ0FwcERlbW9Db250cm9sbGVyXCI+XHJcbiAgICAgSSBjYW4gYWRkOiB7e2F9fSArIHt7Yn19ID0gIHt7IGErYiB9fVxyXG4gICA8L2Rpdj5cclxuICAgPC9maWxlPlxyXG4gICA8ZmlsZSBuYW1lPVwic2NyaXB0LmpzXCI+XHJcbiAgIGFuZ3VsYXIubW9kdWxlKCduZ0FwcERlbW8nLCBbXSkuY29udHJvbGxlcignbmdBcHBEZW1vQ29udHJvbGxlcicsIGZ1bmN0aW9uKCRzY29wZSkge1xyXG4gICAgICRzY29wZS5hID0gMTtcclxuICAgICAkc2NvcGUuYiA9IDI7XHJcbiAgIH0pO1xyXG4gICA8L2ZpbGU+XHJcbiA8L2V4YW1wbGU+XHJcbiAqXHJcbiAqIFVzaW5nIGBuZ1N0cmljdERpYCwgeW91IHdvdWxkIHNlZSBzb21ldGhpbmcgbGlrZSB0aGlzOlxyXG4gKlxyXG4gPGV4YW1wbGUgbmctYXBwLWluY2x1ZGVkPVwidHJ1ZVwiPlxyXG4gICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICA8ZGl2IG5nLWFwcD1cIm5nQXBwU3RyaWN0RGVtb1wiIG5nLXN0cmljdC1kaT5cclxuICAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkdvb2RDb250cm9sbGVyMVwiPlxyXG4gICAgICAgICAgIEkgY2FuIGFkZDoge3thfX0gKyB7e2J9fSA9ICB7eyBhK2IgfX1cclxuXHJcbiAgICAgICAgICAgPHA+VGhpcyByZW5kZXJzIGJlY2F1c2UgdGhlIGNvbnRyb2xsZXIgZG9lcyBub3QgZmFpbCB0b1xyXG4gICAgICAgICAgICAgIGluc3RhbnRpYXRlLCBieSB1c2luZyBleHBsaWNpdCBhbm5vdGF0aW9uIHN0eWxlIChzZWVcclxuICAgICAgICAgICAgICBzY3JpcHQuanMgZm9yIGRldGFpbHMpXHJcbiAgICAgICAgICAgPC9wPlxyXG4gICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiR29vZENvbnRyb2xsZXIyXCI+XHJcbiAgICAgICAgICAgTmFtZTogPGlucHV0IG5nLW1vZGVsPVwibmFtZVwiPjxiciAvPlxyXG4gICAgICAgICAgIEhlbGxvLCB7e25hbWV9fSFcclxuXHJcbiAgICAgICAgICAgPHA+VGhpcyByZW5kZXJzIGJlY2F1c2UgdGhlIGNvbnRyb2xsZXIgZG9lcyBub3QgZmFpbCB0b1xyXG4gICAgICAgICAgICAgIGluc3RhbnRpYXRlLCBieSB1c2luZyBleHBsaWNpdCBhbm5vdGF0aW9uIHN0eWxlXHJcbiAgICAgICAgICAgICAgKHNlZSBzY3JpcHQuanMgZm9yIGRldGFpbHMpXHJcbiAgICAgICAgICAgPC9wPlxyXG4gICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiQmFkQ29udHJvbGxlclwiPlxyXG4gICAgICAgICAgIEkgY2FuIGFkZDoge3thfX0gKyB7e2J9fSA9ICB7eyBhK2IgfX1cclxuXHJcbiAgICAgICAgICAgPHA+VGhlIGNvbnRyb2xsZXIgY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCwgZHVlIHRvIHJlbHlpbmdcclxuICAgICAgICAgICAgICBvbiBhdXRvbWF0aWMgZnVuY3Rpb24gYW5ub3RhdGlvbnMgKHdoaWNoIGFyZSBkaXNhYmxlZCBpblxyXG4gICAgICAgICAgICAgIHN0cmljdCBtb2RlKS4gQXMgc3VjaCwgdGhlIGNvbnRlbnQgb2YgdGhpcyBzZWN0aW9uIGlzIG5vdFxyXG4gICAgICAgICAgICAgIGludGVycG9sYXRlZCwgYW5kIHRoZXJlIHNob3VsZCBiZSBhbiBlcnJvciBpbiB5b3VyIHdlYiBjb25zb2xlLlxyXG4gICAgICAgICAgIDwvcD5cclxuICAgICAgIDwvZGl2PlxyXG4gICA8L2Rpdj5cclxuICAgPC9maWxlPlxyXG4gICA8ZmlsZSBuYW1lPVwic2NyaXB0LmpzXCI+XHJcbiAgIGFuZ3VsYXIubW9kdWxlKCduZ0FwcFN0cmljdERlbW8nLCBbXSlcclxuICAgICAvLyBCYWRDb250cm9sbGVyIHdpbGwgZmFpbCB0byBpbnN0YW50aWF0ZSwgZHVlIHRvIHJlbHlpbmcgb24gYXV0b21hdGljIGZ1bmN0aW9uIGFubm90YXRpb24sXHJcbiAgICAgLy8gcmF0aGVyIHRoYW4gYW4gZXhwbGljaXQgYW5ub3RhdGlvblxyXG4gICAgIC5jb250cm9sbGVyKCdCYWRDb250cm9sbGVyJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAgICAgICAkc2NvcGUuYSA9IDE7XHJcbiAgICAgICAkc2NvcGUuYiA9IDI7XHJcbiAgICAgfSlcclxuICAgICAvLyBVbmxpa2UgQmFkQ29udHJvbGxlciwgR29vZENvbnRyb2xsZXIxIGFuZCBHb29kQ29udHJvbGxlcjIgd2lsbCBub3QgZmFpbCB0byBiZSBpbnN0YW50aWF0ZWQsXHJcbiAgICAgLy8gZHVlIHRvIHVzaW5nIGV4cGxpY2l0IGFubm90YXRpb25zIHVzaW5nIHRoZSBhcnJheSBzdHlsZSBhbmQgJGluamVjdCBwcm9wZXJ0eSwgcmVzcGVjdGl2ZWx5LlxyXG4gICAgIC5jb250cm9sbGVyKCdHb29kQ29udHJvbGxlcjEnLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xyXG4gICAgICAgJHNjb3BlLmEgPSAxO1xyXG4gICAgICAgJHNjb3BlLmIgPSAyO1xyXG4gICAgIH1dKVxyXG4gICAgIC5jb250cm9sbGVyKCdHb29kQ29udHJvbGxlcjInLCBHb29kQ29udHJvbGxlcjIpO1xyXG4gICAgIGZ1bmN0aW9uIEdvb2RDb250cm9sbGVyMigkc2NvcGUpIHtcclxuICAgICAgICRzY29wZS5uYW1lID0gXCJXb3JsZFwiO1xyXG4gICAgIH1cclxuICAgICBHb29kQ29udHJvbGxlcjIuJGluamVjdCA9IFsnJHNjb3BlJ107XHJcbiAgIDwvZmlsZT5cclxuICAgPGZpbGUgbmFtZT1cInN0eWxlLmNzc1wiPlxyXG4gICBkaXZbbmctY29udHJvbGxlcl0ge1xyXG4gICAgICAgbWFyZ2luLWJvdHRvbTogMWVtO1xyXG4gICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgICBib3JkZXI6IDFweCBzb2xpZDtcclxuICAgICAgIHBhZGRpbmc6IC41ZW07XHJcbiAgIH1cclxuICAgZGl2W25nLWNvbnRyb2xsZXJePUdvb2RdIHtcclxuICAgICAgIGJvcmRlci1jb2xvcjogI2Q2ZTljNjtcclxuICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkZmYwZDg7XHJcbiAgICAgICBjb2xvcjogIzNjNzYzZDtcclxuICAgfVxyXG4gICBkaXZbbmctY29udHJvbGxlcl49QmFkXSB7XHJcbiAgICAgICBib3JkZXItY29sb3I6ICNlYmNjZDE7XHJcbiAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlO1xyXG4gICAgICAgY29sb3I6ICNhOTQ0NDI7XHJcbiAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xyXG4gICB9XHJcbiAgIDwvZmlsZT5cclxuIDwvZXhhbXBsZT5cclxuICovXHJcbmZ1bmN0aW9uIGFuZ3VsYXJJbml0KGVsZW1lbnQsIGJvb3RzdHJhcCkge1xyXG4gIHZhciBhcHBFbGVtZW50LFxyXG4gICAgICBtb2R1bGUsXHJcbiAgICAgIGNvbmZpZyA9IHt9O1xyXG5cclxuICAvLyBUaGUgZWxlbWVudCBgZWxlbWVudGAgaGFzIHByaW9yaXR5IG92ZXIgYW55IG90aGVyIGVsZW1lbnRcclxuICBmb3JFYWNoKG5nQXR0clByZWZpeGVzLCBmdW5jdGlvbihwcmVmaXgpIHtcclxuICAgIHZhciBuYW1lID0gcHJlZml4ICsgJ2FwcCc7XHJcblxyXG4gICAgaWYgKCFhcHBFbGVtZW50ICYmIGVsZW1lbnQuaGFzQXR0cmlidXRlICYmIGVsZW1lbnQuaGFzQXR0cmlidXRlKG5hbWUpKSB7XHJcbiAgICAgIGFwcEVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICBtb2R1bGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTtcclxuICAgIH1cclxuICB9KTtcclxuICBmb3JFYWNoKG5nQXR0clByZWZpeGVzLCBmdW5jdGlvbihwcmVmaXgpIHtcclxuICAgIHZhciBuYW1lID0gcHJlZml4ICsgJ2FwcCc7XHJcbiAgICB2YXIgY2FuZGlkYXRlO1xyXG5cclxuICAgIGlmICghYXBwRWxlbWVudCAmJiAoY2FuZGlkYXRlID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbJyArIG5hbWUucmVwbGFjZSgnOicsICdcXFxcOicpICsgJ10nKSkpIHtcclxuICAgICAgYXBwRWxlbWVudCA9IGNhbmRpZGF0ZTtcclxuICAgICAgbW9kdWxlID0gY2FuZGlkYXRlLmdldEF0dHJpYnV0ZShuYW1lKTtcclxuICAgIH1cclxuICB9KTtcclxuICBpZiAoYXBwRWxlbWVudCkge1xyXG4gICAgY29uZmlnLnN0cmljdERpID0gZ2V0TmdBdHRyaWJ1dGUoYXBwRWxlbWVudCwgXCJzdHJpY3QtZGlcIikgIT09IG51bGw7XHJcbiAgICBib290c3RyYXAoYXBwRWxlbWVudCwgbW9kdWxlID8gW21vZHVsZV0gOiBbXSwgY29uZmlnKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZnVuY3Rpb25cclxuICogQG5hbWUgYW5ndWxhci5ib290c3RyYXBcclxuICogQG1vZHVsZSBuZ1xyXG4gKiBAZGVzY3JpcHRpb25cclxuICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gbWFudWFsbHkgc3RhcnQgdXAgYW5ndWxhciBhcHBsaWNhdGlvbi5cclxuICpcclxuICogU2VlOiB7QGxpbmsgZ3VpZGUvYm9vdHN0cmFwIEJvb3RzdHJhcH1cclxuICpcclxuICogTm90ZSB0aGF0IFByb3RyYWN0b3IgYmFzZWQgZW5kLXRvLWVuZCB0ZXN0cyBjYW5ub3QgdXNlIHRoaXMgZnVuY3Rpb24gdG8gYm9vdHN0cmFwIG1hbnVhbGx5LlxyXG4gKiBUaGV5IG11c3QgdXNlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdBcHAgbmdBcHB9LlxyXG4gKlxyXG4gKiBBbmd1bGFyIHdpbGwgZGV0ZWN0IGlmIGl0IGhhcyBiZWVuIGxvYWRlZCBpbnRvIHRoZSBicm93c2VyIG1vcmUgdGhhbiBvbmNlIGFuZCBvbmx5IGFsbG93IHRoZVxyXG4gKiBmaXJzdCBsb2FkZWQgc2NyaXB0IHRvIGJlIGJvb3RzdHJhcHBlZCBhbmQgd2lsbCByZXBvcnQgYSB3YXJuaW5nIHRvIHRoZSBicm93c2VyIGNvbnNvbGUgZm9yXHJcbiAqIGVhY2ggb2YgdGhlIHN1YnNlcXVlbnQgc2NyaXB0cy4gVGhpcyBwcmV2ZW50cyBzdHJhbmdlIHJlc3VsdHMgaW4gYXBwbGljYXRpb25zLCB3aGVyZSBvdGhlcndpc2VcclxuICogbXVsdGlwbGUgaW5zdGFuY2VzIG9mIEFuZ3VsYXIgdHJ5IHRvIHdvcmsgb24gdGhlIERPTS5cclxuICpcclxuICogYGBgaHRtbFxyXG4gKiA8IWRvY3R5cGUgaHRtbD5cclxuICogPGh0bWw+XHJcbiAqIDxib2R5PlxyXG4gKiA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJXZWxjb21lQ29udHJvbGxlclwiPlxyXG4gKiAgIHt7Z3JlZXRpbmd9fVxyXG4gKiA8L2Rpdj5cclxuICpcclxuICogPHNjcmlwdCBzcmM9XCJhbmd1bGFyLmpzXCI+PC9zY3JpcHQ+XHJcbiAqIDxzY3JpcHQ+XHJcbiAqICAgdmFyIGFwcCA9IGFuZ3VsYXIubW9kdWxlKCdkZW1vJywgW10pXHJcbiAqICAgLmNvbnRyb2xsZXIoJ1dlbGNvbWVDb250cm9sbGVyJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAqICAgICAgICRzY29wZS5ncmVldGluZyA9ICdXZWxjb21lISc7XHJcbiAqICAgfSk7XHJcbiAqICAgYW5ndWxhci5ib290c3RyYXAoZG9jdW1lbnQsIFsnZGVtbyddKTtcclxuICogPC9zY3JpcHQ+XHJcbiAqIDwvYm9keT5cclxuICogPC9odG1sPlxyXG4gKiBgYGBcclxuICpcclxuICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IERPTSBlbGVtZW50IHdoaWNoIGlzIHRoZSByb290IG9mIGFuZ3VsYXIgYXBwbGljYXRpb24uXHJcbiAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfEZ1bmN0aW9ufEFycmF5Pj19IG1vZHVsZXMgYW4gYXJyYXkgb2YgbW9kdWxlcyB0byBsb2FkIGludG8gdGhlIGFwcGxpY2F0aW9uLlxyXG4gKiAgICAgRWFjaCBpdGVtIGluIHRoZSBhcnJheSBzaG91bGQgYmUgdGhlIG5hbWUgb2YgYSBwcmVkZWZpbmVkIG1vZHVsZSBvciBhIChESSBhbm5vdGF0ZWQpXHJcbiAqICAgICBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW52b2tlZCBieSB0aGUgaW5qZWN0b3IgYXMgYSBydW4gYmxvY2suXHJcbiAqICAgICBTZWU6IHtAbGluayBhbmd1bGFyLm1vZHVsZSBtb2R1bGVzfVxyXG4gKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBhbiBvYmplY3QgZm9yIGRlZmluaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGFwcGxpY2F0aW9uLiBUaGVcclxuICogICAgIGZvbGxvd2luZyBrZXlzIGFyZSBzdXBwb3J0ZWQ6XHJcbiAqXHJcbiAqICAgICAtIGBzdHJpY3REaWA6IGRpc2FibGUgYXV0b21hdGljIGZ1bmN0aW9uIGFubm90YXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbi4gVGhpcyBpcyBtZWFudCB0b1xyXG4gKiAgICAgICBhc3Npc3QgaW4gZmluZGluZyBidWdzIHdoaWNoIGJyZWFrIG1pbmlmaWVkIGNvZGUuXHJcbiAqXHJcbiAqIEByZXR1cm5zIHthdXRvLiRpbmplY3Rvcn0gUmV0dXJucyB0aGUgbmV3bHkgY3JlYXRlZCBpbmplY3RvciBmb3IgdGhpcyBhcHAuXHJcbiAqL1xyXG5mdW5jdGlvbiBib290c3RyYXAoZWxlbWVudCwgbW9kdWxlcywgY29uZmlnKSB7XHJcbiAgaWYgKCFpc09iamVjdChjb25maWcpKSBjb25maWcgPSB7fTtcclxuICB2YXIgZGVmYXVsdENvbmZpZyA9IHtcclxuICAgIHN0cmljdERpOiBmYWxzZVxyXG4gIH07XHJcbiAgY29uZmlnID0gZXh0ZW5kKGRlZmF1bHRDb25maWcsIGNvbmZpZyk7XHJcbiAgdmFyIGRvQm9vdHN0cmFwID0gZnVuY3Rpb24oKSB7XHJcbiAgICBlbGVtZW50ID0ganFMaXRlKGVsZW1lbnQpO1xyXG5cclxuICAgIGlmIChlbGVtZW50LmluamVjdG9yKCkpIHtcclxuICAgICAgdmFyIHRhZyA9IChlbGVtZW50WzBdID09PSBkb2N1bWVudCkgPyAnZG9jdW1lbnQnIDogc3RhcnRpbmdUYWcoZWxlbWVudCk7XHJcbiAgICAgIC8vRW5jb2RlIGFuZ2xlIGJyYWNrZXRzIHRvIHByZXZlbnQgaW5wdXQgZnJvbSBiZWluZyBzYW5pdGl6ZWQgdG8gZW1wdHkgc3RyaW5nICM4NjgzXHJcbiAgICAgIHRocm93IG5nTWluRXJyKFxyXG4gICAgICAgICAgJ2J0c3RycGQnLFxyXG4gICAgICAgICAgXCJBcHAgQWxyZWFkeSBCb290c3RyYXBwZWQgd2l0aCB0aGlzIEVsZW1lbnQgJ3swfSdcIixcclxuICAgICAgICAgIHRhZy5yZXBsYWNlKC88LywnJmx0OycpLnJlcGxhY2UoLz4vLCcmZ3Q7JykpO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZXMgPSBtb2R1bGVzIHx8IFtdO1xyXG4gICAgbW9kdWxlcy51bnNoaWZ0KFsnJHByb3ZpZGUnLCBmdW5jdGlvbigkcHJvdmlkZSkge1xyXG4gICAgICAkcHJvdmlkZS52YWx1ZSgnJHJvb3RFbGVtZW50JywgZWxlbWVudCk7XHJcbiAgICB9XSk7XHJcblxyXG4gICAgaWYgKGNvbmZpZy5kZWJ1Z0luZm9FbmFibGVkKSB7XHJcbiAgICAgIC8vIFB1c2hpbmcgc28gdGhhdCB0aGlzIG92ZXJyaWRlcyBgZGVidWdJbmZvRW5hYmxlZGAgc2V0dGluZyBkZWZpbmVkIGluIHVzZXIncyBgbW9kdWxlc2AuXHJcbiAgICAgIG1vZHVsZXMucHVzaChbJyRjb21waWxlUHJvdmlkZXInLCBmdW5jdGlvbigkY29tcGlsZVByb3ZpZGVyKSB7XHJcbiAgICAgICAgJGNvbXBpbGVQcm92aWRlci5kZWJ1Z0luZm9FbmFibGVkKHRydWUpO1xyXG4gICAgICB9XSk7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlcy51bnNoaWZ0KCduZycpO1xyXG4gICAgdmFyIGluamVjdG9yID0gY3JlYXRlSW5qZWN0b3IobW9kdWxlcywgY29uZmlnLnN0cmljdERpKTtcclxuICAgIGluamVjdG9yLmludm9rZShbJyRyb290U2NvcGUnLCAnJHJvb3RFbGVtZW50JywgJyRjb21waWxlJywgJyRpbmplY3RvcicsXHJcbiAgICAgICBmdW5jdGlvbiBib290c3RyYXBBcHBseShzY29wZSwgZWxlbWVudCwgY29tcGlsZSwgaW5qZWN0b3IpIHtcclxuICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICBlbGVtZW50LmRhdGEoJyRpbmplY3RvcicsIGluamVjdG9yKTtcclxuICAgICAgICAgIGNvbXBpbGUoZWxlbWVudCkoc2NvcGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XVxyXG4gICAgKTtcclxuICAgIHJldHVybiBpbmplY3RvcjtcclxuICB9O1xyXG5cclxuICB2YXIgTkdfRU5BQkxFX0RFQlVHX0lORk8gPSAvXk5HX0VOQUJMRV9ERUJVR19JTkZPIS87XHJcbiAgdmFyIE5HX0RFRkVSX0JPT1RTVFJBUCA9IC9eTkdfREVGRVJfQk9PVFNUUkFQIS87XHJcblxyXG4gIGlmICh3aW5kb3cgJiYgTkdfRU5BQkxFX0RFQlVHX0lORk8udGVzdCh3aW5kb3cubmFtZSkpIHtcclxuICAgIGNvbmZpZy5kZWJ1Z0luZm9FbmFibGVkID0gdHJ1ZTtcclxuICAgIHdpbmRvdy5uYW1lID0gd2luZG93Lm5hbWUucmVwbGFjZShOR19FTkFCTEVfREVCVUdfSU5GTywgJycpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHdpbmRvdyAmJiAhTkdfREVGRVJfQk9PVFNUUkFQLnRlc3Qod2luZG93Lm5hbWUpKSB7XHJcbiAgICByZXR1cm4gZG9Cb290c3RyYXAoKTtcclxuICB9XHJcblxyXG4gIHdpbmRvdy5uYW1lID0gd2luZG93Lm5hbWUucmVwbGFjZShOR19ERUZFUl9CT09UU1RSQVAsICcnKTtcclxuICBhbmd1bGFyLnJlc3VtZUJvb3RzdHJhcCA9IGZ1bmN0aW9uKGV4dHJhTW9kdWxlcykge1xyXG4gICAgZm9yRWFjaChleHRyYU1vZHVsZXMsIGZ1bmN0aW9uKG1vZHVsZSkge1xyXG4gICAgICBtb2R1bGVzLnB1c2gobW9kdWxlKTtcclxuICAgIH0pO1xyXG4gICAgZG9Cb290c3RyYXAoKTtcclxuICB9O1xyXG59XHJcblxyXG4vKipcclxuICogQG5nZG9jIGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGFuZ3VsYXIucmVsb2FkV2l0aERlYnVnSW5mb1xyXG4gKiBAbW9kdWxlIG5nXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBVc2UgdGhpcyBmdW5jdGlvbiB0byByZWxvYWQgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gd2l0aCBkZWJ1ZyBpbmZvcm1hdGlvbiB0dXJuZWQgb24uXHJcbiAqIFRoaXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGEgY2FsbCB0byBgJGNvbXBpbGVQcm92aWRlci5kZWJ1Z0luZm9FbmFibGVkKGZhbHNlKWAuXHJcbiAqXHJcbiAqIFNlZSB7QGxpbmsgbmcuJGNvbXBpbGVQcm92aWRlciNkZWJ1Z0luZm9FbmFibGVkfSBmb3IgbW9yZS5cclxuICovXHJcbmZ1bmN0aW9uIHJlbG9hZFdpdGhEZWJ1Z0luZm8oKSB7XHJcbiAgd2luZG93Lm5hbWUgPSAnTkdfRU5BQkxFX0RFQlVHX0lORk8hJyArIHdpbmRvdy5uYW1lO1xyXG4gIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGFuZ3VsYXIuZ2V0VGVzdGFiaWxpdHlcclxuICogQG1vZHVsZSBuZ1xyXG4gKiBAZGVzY3JpcHRpb25cclxuICogR2V0IHRoZSB0ZXN0YWJpbGl0eSBzZXJ2aWNlIGZvciB0aGUgaW5zdGFuY2Ugb2YgQW5ndWxhciBvbiB0aGUgZ2l2ZW5cclxuICogZWxlbWVudC5cclxuICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IERPTSBlbGVtZW50IHdoaWNoIGlzIHRoZSByb290IG9mIGFuZ3VsYXIgYXBwbGljYXRpb24uXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUZXN0YWJpbGl0eShyb290RWxlbWVudCkge1xyXG4gIHJldHVybiBhbmd1bGFyLmVsZW1lbnQocm9vdEVsZW1lbnQpLmluamVjdG9yKCkuZ2V0KCckJHRlc3RhYmlsaXR5Jyk7XHJcbn1cclxuXHJcbnZhciBTTkFLRV9DQVNFX1JFR0VYUCA9IC9bQS1aXS9nO1xyXG5mdW5jdGlvbiBzbmFrZV9jYXNlKG5hbWUsIHNlcGFyYXRvcikge1xyXG4gIHNlcGFyYXRvciA9IHNlcGFyYXRvciB8fCAnXyc7XHJcbiAgcmV0dXJuIG5hbWUucmVwbGFjZShTTkFLRV9DQVNFX1JFR0VYUCwgZnVuY3Rpb24obGV0dGVyLCBwb3MpIHtcclxuICAgIHJldHVybiAocG9zID8gc2VwYXJhdG9yIDogJycpICsgbGV0dGVyLnRvTG93ZXJDYXNlKCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbnZhciBiaW5kSlF1ZXJ5RmlyZWQgPSBmYWxzZTtcclxudmFyIHNraXBEZXN0cm95T25OZXh0SlF1ZXJ5Q2xlYW5EYXRhO1xyXG5mdW5jdGlvbiBiaW5kSlF1ZXJ5KCkge1xyXG4gIHZhciBvcmlnaW5hbENsZWFuRGF0YTtcclxuXHJcbiAgaWYgKGJpbmRKUXVlcnlGaXJlZCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgLy8gYmluZCB0byBqUXVlcnkgaWYgcHJlc2VudDtcclxuICBqUXVlcnkgPSB3aW5kb3cualF1ZXJ5O1xyXG4gIC8vIFVzZSBqUXVlcnkgaWYgaXQgZXhpc3RzIHdpdGggcHJvcGVyIGZ1bmN0aW9uYWxpdHksIG90aGVyd2lzZSBkZWZhdWx0IHRvIHVzLlxyXG4gIC8vIEFuZ3VsYXIgMS4yKyByZXF1aXJlcyBqUXVlcnkgMS43KyBmb3Igb24oKS9vZmYoKSBzdXBwb3J0LlxyXG4gIC8vIEFuZ3VsYXIgMS4zKyB0ZWNobmljYWxseSByZXF1aXJlcyBhdCBsZWFzdCBqUXVlcnkgMi4xKyBidXQgaXQgbWF5IHdvcmsgd2l0aCBvbGRlclxyXG4gIC8vIHZlcnNpb25zLiBJdCB3aWxsIG5vdCB3b3JrIGZvciBzdXJlIHdpdGggalF1ZXJ5IDwxLjcsIHRob3VnaC5cclxuICBpZiAoalF1ZXJ5ICYmIGpRdWVyeS5mbi5vbikge1xyXG4gICAganFMaXRlID0galF1ZXJ5O1xyXG4gICAgZXh0ZW5kKGpRdWVyeS5mbiwge1xyXG4gICAgICBzY29wZTogSlFMaXRlUHJvdG90eXBlLnNjb3BlLFxyXG4gICAgICBpc29sYXRlU2NvcGU6IEpRTGl0ZVByb3RvdHlwZS5pc29sYXRlU2NvcGUsXHJcbiAgICAgIGNvbnRyb2xsZXI6IEpRTGl0ZVByb3RvdHlwZS5jb250cm9sbGVyLFxyXG4gICAgICBpbmplY3RvcjogSlFMaXRlUHJvdG90eXBlLmluamVjdG9yLFxyXG4gICAgICBpbmhlcml0ZWREYXRhOiBKUUxpdGVQcm90b3R5cGUuaW5oZXJpdGVkRGF0YVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQWxsIG5vZGVzIHJlbW92ZWQgZnJvbSB0aGUgRE9NIHZpYSB2YXJpb3VzIGpRdWVyeSBBUElzIGxpa2UgLnJlbW92ZSgpXHJcbiAgICAvLyBhcmUgcGFzc2VkIHRocm91Z2ggalF1ZXJ5LmNsZWFuRGF0YS4gTW9ua2V5LXBhdGNoIHRoaXMgbWV0aG9kIHRvIGZpcmVcclxuICAgIC8vIHRoZSAkZGVzdHJveSBldmVudCBvbiBhbGwgcmVtb3ZlZCBub2Rlcy5cclxuICAgIG9yaWdpbmFsQ2xlYW5EYXRhID0galF1ZXJ5LmNsZWFuRGF0YTtcclxuICAgIGpRdWVyeS5jbGVhbkRhdGEgPSBmdW5jdGlvbihlbGVtcykge1xyXG4gICAgICB2YXIgZXZlbnRzO1xyXG4gICAgICBpZiAoIXNraXBEZXN0cm95T25OZXh0SlF1ZXJ5Q2xlYW5EYXRhKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGVsZW07IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKykge1xyXG4gICAgICAgICAgZXZlbnRzID0galF1ZXJ5Ll9kYXRhKGVsZW0sIFwiZXZlbnRzXCIpO1xyXG4gICAgICAgICAgaWYgKGV2ZW50cyAmJiBldmVudHMuJGRlc3Ryb3kpIHtcclxuICAgICAgICAgICAgalF1ZXJ5KGVsZW0pLnRyaWdnZXJIYW5kbGVyKCckZGVzdHJveScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBza2lwRGVzdHJveU9uTmV4dEpRdWVyeUNsZWFuRGF0YSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIG9yaWdpbmFsQ2xlYW5EYXRhKGVsZW1zKTtcclxuICAgIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIGpxTGl0ZSA9IEpRTGl0ZTtcclxuICB9XHJcblxyXG4gIGFuZ3VsYXIuZWxlbWVudCA9IGpxTGl0ZTtcclxuXHJcbiAgLy8gUHJldmVudCBkb3VibGUtcHJveHlpbmcuXHJcbiAgYmluZEpRdWVyeUZpcmVkID0gdHJ1ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIHRocm93IGVycm9yIGlmIHRoZSBhcmd1bWVudCBpcyBmYWxzeS5cclxuICovXHJcbmZ1bmN0aW9uIGFzc2VydEFyZyhhcmcsIG5hbWUsIHJlYXNvbikge1xyXG4gIGlmICghYXJnKSB7XHJcbiAgICB0aHJvdyBuZ01pbkVycignYXJlcScsIFwiQXJndW1lbnQgJ3swfScgaXMgezF9XCIsIChuYW1lIHx8ICc/JyksIChyZWFzb24gfHwgXCJyZXF1aXJlZFwiKSk7XHJcbiAgfVxyXG4gIHJldHVybiBhcmc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFzc2VydEFyZ0ZuKGFyZywgbmFtZSwgYWNjZXB0QXJyYXlBbm5vdGF0aW9uKSB7XHJcbiAgaWYgKGFjY2VwdEFycmF5QW5ub3RhdGlvbiAmJiBpc0FycmF5KGFyZykpIHtcclxuICAgICAgYXJnID0gYXJnW2FyZy5sZW5ndGggLSAxXTtcclxuICB9XHJcblxyXG4gIGFzc2VydEFyZyhpc0Z1bmN0aW9uKGFyZyksIG5hbWUsICdub3QgYSBmdW5jdGlvbiwgZ290ICcgK1xyXG4gICAgICAoYXJnICYmIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnID8gYXJnLmNvbnN0cnVjdG9yLm5hbWUgfHwgJ09iamVjdCcgOiB0eXBlb2YgYXJnKSk7XHJcbiAgcmV0dXJuIGFyZztcclxufVxyXG5cclxuLyoqXHJcbiAqIHRocm93IGVycm9yIGlmIHRoZSBuYW1lIGdpdmVuIGlzIGhhc093blByb3BlcnR5XHJcbiAqIEBwYXJhbSAge1N0cmluZ30gbmFtZSAgICB0aGUgbmFtZSB0byB0ZXN0XHJcbiAqIEBwYXJhbSAge1N0cmluZ30gY29udGV4dCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUgbmFtZSBpcyB1c2VkLCBzdWNoIGFzIG1vZHVsZSBvciBkaXJlY3RpdmVcclxuICovXHJcbmZ1bmN0aW9uIGFzc2VydE5vdEhhc093blByb3BlcnR5KG5hbWUsIGNvbnRleHQpIHtcclxuICBpZiAobmFtZSA9PT0gJ2hhc093blByb3BlcnR5Jykge1xyXG4gICAgdGhyb3cgbmdNaW5FcnIoJ2JhZG5hbWUnLCBcImhhc093blByb3BlcnR5IGlzIG5vdCBhIHZhbGlkIHswfSBuYW1lXCIsIGNvbnRleHQpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiB0aGUgdmFsdWUgYWNjZXNzaWJsZSBmcm9tIHRoZSBvYmplY3QgYnkgcGF0aC4gQW55IHVuZGVmaW5lZCB0cmF2ZXJzYWxzIGFyZSBpZ25vcmVkXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogc3RhcnRpbmcgb2JqZWN0XHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIHBhdGggdG8gdHJhdmVyc2VcclxuICogQHBhcmFtIHtib29sZWFufSBbYmluZEZuVG9TY29wZT10cnVlXVxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB2YWx1ZSBhcyBhY2Nlc3NpYmxlIGJ5IHBhdGhcclxuICovXHJcbi8vVE9ETyhtaXNrbyk6IHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmVtb3ZlZFxyXG5mdW5jdGlvbiBnZXR0ZXIob2JqLCBwYXRoLCBiaW5kRm5Ub1Njb3BlKSB7XHJcbiAgaWYgKCFwYXRoKSByZXR1cm4gb2JqO1xyXG4gIHZhciBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xyXG4gIHZhciBrZXk7XHJcbiAgdmFyIGxhc3RJbnN0YW5jZSA9IG9iajtcclxuICB2YXIgbGVuID0ga2V5cy5sZW5ndGg7XHJcblxyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgIGtleSA9IGtleXNbaV07XHJcbiAgICBpZiAob2JqKSB7XHJcbiAgICAgIG9iaiA9IChsYXN0SW5zdGFuY2UgPSBvYmopW2tleV07XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmICghYmluZEZuVG9TY29wZSAmJiBpc0Z1bmN0aW9uKG9iaikpIHtcclxuICAgIHJldHVybiBiaW5kKGxhc3RJbnN0YW5jZSwgb2JqKTtcclxuICB9XHJcbiAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiB0aGUgRE9NIHNpYmxpbmdzIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBsYXN0IG5vZGUgaW4gdGhlIGdpdmVuIGFycmF5LlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBsaWtlIG9iamVjdFxyXG4gKiBAcmV0dXJucyB7anFMaXRlfSBqcUxpdGUgY29sbGVjdGlvbiBjb250YWluaW5nIHRoZSBub2Rlc1xyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QmxvY2tOb2Rlcyhub2Rlcykge1xyXG4gIC8vIFRPRE8ocGVyZik6IGp1c3QgY2hlY2sgaWYgYWxsIGl0ZW1zIGluIGBub2Rlc2AgYXJlIHNpYmxpbmdzIGFuZCBpZiB0aGV5IGFyZSByZXR1cm4gdGhlIG9yaWdpbmFsXHJcbiAgLy8gICAgICAgICAgICAgY29sbGVjdGlvbiwgb3RoZXJ3aXNlIHVwZGF0ZSB0aGUgb3JpZ2luYWwgY29sbGVjdGlvbi5cclxuICB2YXIgbm9kZSA9IG5vZGVzWzBdO1xyXG4gIHZhciBlbmROb2RlID0gbm9kZXNbbm9kZXMubGVuZ3RoIC0gMV07XHJcbiAgdmFyIGJsb2NrTm9kZXMgPSBbbm9kZV07XHJcblxyXG4gIGRvIHtcclxuICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xyXG4gICAgaWYgKCFub2RlKSBicmVhaztcclxuICAgIGJsb2NrTm9kZXMucHVzaChub2RlKTtcclxuICB9IHdoaWxlIChub2RlICE9PSBlbmROb2RlKTtcclxuXHJcbiAgcmV0dXJuIGpxTGl0ZShibG9ja05vZGVzKTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG9iamVjdCB3aXRob3V0IGEgcHJvdG90eXBlLiBUaGlzIG9iamVjdCBpcyB1c2VmdWwgZm9yIGxvb2t1cCB3aXRob3V0IGhhdmluZyB0b1xyXG4gKiBndWFyZCBhZ2FpbnN0IHByb3RvdHlwaWNhbGx5IGluaGVyaXRlZCBwcm9wZXJ0aWVzIHZpYSBoYXNPd25Qcm9wZXJ0eS5cclxuICpcclxuICogUmVsYXRlZCBtaWNyby1iZW5jaG1hcmtzOlxyXG4gKiAtIGh0dHA6Ly9qc3BlcmYuY29tL29iamVjdC1jcmVhdGUyXHJcbiAqIC0gaHR0cDovL2pzcGVyZi5jb20vcHJvdG8tbWFwLWxvb2t1cC8yXHJcbiAqIC0gaHR0cDovL2pzcGVyZi5jb20vZm9yLWluLXZzLW9iamVjdC1rZXlzMlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlTWFwKCkge1xyXG4gIHJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG59XHJcblxyXG52YXIgTk9ERV9UWVBFX0VMRU1FTlQgPSAxO1xyXG52YXIgTk9ERV9UWVBFX1RFWFQgPSAzO1xyXG52YXIgTk9ERV9UWVBFX0NPTU1FTlQgPSA4O1xyXG52YXIgTk9ERV9UWVBFX0RPQ1VNRU5UID0gOTtcclxudmFyIE5PREVfVFlQRV9ET0NVTUVOVF9GUkFHTUVOVCA9IDExO1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyB0eXBlXHJcbiAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlXHJcbiAqIEBtb2R1bGUgbmdcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqXHJcbiAqIEludGVyZmFjZSBmb3IgY29uZmlndXJpbmcgYW5ndWxhciB7QGxpbmsgYW5ndWxhci5tb2R1bGUgbW9kdWxlc30uXHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gc2V0dXBNb2R1bGVMb2FkZXIod2luZG93KSB7XHJcblxyXG4gIHZhciAkaW5qZWN0b3JNaW5FcnIgPSBtaW5FcnIoJyRpbmplY3RvcicpO1xyXG4gIHZhciBuZ01pbkVyciA9IG1pbkVycignbmcnKTtcclxuXHJcbiAgZnVuY3Rpb24gZW5zdXJlKG9iaiwgbmFtZSwgZmFjdG9yeSkge1xyXG4gICAgcmV0dXJuIG9ialtuYW1lXSB8fCAob2JqW25hbWVdID0gZmFjdG9yeSgpKTtcclxuICB9XHJcblxyXG4gIHZhciBhbmd1bGFyID0gZW5zdXJlKHdpbmRvdywgJ2FuZ3VsYXInLCBPYmplY3QpO1xyXG5cclxuICAvLyBXZSBuZWVkIHRvIGV4cG9zZSBgYW5ndWxhci4kJG1pbkVycmAgdG8gbW9kdWxlcyBzdWNoIGFzIGBuZ1Jlc291cmNlYCB0aGF0IHJlZmVyZW5jZSBpdCBkdXJpbmcgYm9vdHN0cmFwXHJcbiAgYW5ndWxhci4kJG1pbkVyciA9IGFuZ3VsYXIuJCRtaW5FcnIgfHwgbWluRXJyO1xyXG5cclxuICByZXR1cm4gZW5zdXJlKGFuZ3VsYXIsICdtb2R1bGUnLCBmdW5jdGlvbigpIHtcclxuICAgIC8qKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIGFuZ3VsYXIuTW9kdWxlPn0gKi9cclxuICAgIHZhciBtb2R1bGVzID0ge307XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmdkb2MgZnVuY3Rpb25cclxuICAgICAqIEBuYW1lIGFuZ3VsYXIubW9kdWxlXHJcbiAgICAgKiBAbW9kdWxlIG5nXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqXHJcbiAgICAgKiBUaGUgYGFuZ3VsYXIubW9kdWxlYCBpcyBhIGdsb2JhbCBwbGFjZSBmb3IgY3JlYXRpbmcsIHJlZ2lzdGVyaW5nIGFuZCByZXRyaWV2aW5nIEFuZ3VsYXJcclxuICAgICAqIG1vZHVsZXMuXHJcbiAgICAgKiBBbGwgbW9kdWxlcyAoYW5ndWxhciBjb3JlIG9yIDNyZCBwYXJ0eSkgdGhhdCBzaG91bGQgYmUgYXZhaWxhYmxlIHRvIGFuIGFwcGxpY2F0aW9uIG11c3QgYmVcclxuICAgICAqIHJlZ2lzdGVyZWQgdXNpbmcgdGhpcyBtZWNoYW5pc20uXHJcbiAgICAgKlxyXG4gICAgICogV2hlbiBwYXNzZWQgdHdvIG9yIG1vcmUgYXJndW1lbnRzLCBhIG5ldyBtb2R1bGUgaXMgY3JlYXRlZC4gIElmIHBhc3NlZCBvbmx5IG9uZSBhcmd1bWVudCwgYW5cclxuICAgICAqIGV4aXN0aW5nIG1vZHVsZSAodGhlIG5hbWUgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBgbW9kdWxlYCkgaXMgcmV0cmlldmVkLlxyXG4gICAgICpcclxuICAgICAqXHJcbiAgICAgKiAjIE1vZHVsZVxyXG4gICAgICpcclxuICAgICAqIEEgbW9kdWxlIGlzIGEgY29sbGVjdGlvbiBvZiBzZXJ2aWNlcywgZGlyZWN0aXZlcywgY29udHJvbGxlcnMsIGZpbHRlcnMsIGFuZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLlxyXG4gICAgICogYGFuZ3VsYXIubW9kdWxlYCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUge0BsaW5rIGF1dG8uJGluamVjdG9yICRpbmplY3Rvcn0uXHJcbiAgICAgKlxyXG4gICAgICogYGBganNcclxuICAgICAqIC8vIENyZWF0ZSBhIG5ldyBtb2R1bGVcclxuICAgICAqIHZhciBteU1vZHVsZSA9IGFuZ3VsYXIubW9kdWxlKCdteU1vZHVsZScsIFtdKTtcclxuICAgICAqXHJcbiAgICAgKiAvLyByZWdpc3RlciBhIG5ldyBzZXJ2aWNlXHJcbiAgICAgKiBteU1vZHVsZS52YWx1ZSgnYXBwTmFtZScsICdNeUNvb2xBcHAnKTtcclxuICAgICAqXHJcbiAgICAgKiAvLyBjb25maWd1cmUgZXhpc3Rpbmcgc2VydmljZXMgaW5zaWRlIGluaXRpYWxpemF0aW9uIGJsb2Nrcy5cclxuICAgICAqIG15TW9kdWxlLmNvbmZpZyhbJyRsb2NhdGlvblByb3ZpZGVyJywgZnVuY3Rpb24oJGxvY2F0aW9uUHJvdmlkZXIpIHtcclxuICAgICAqICAgLy8gQ29uZmlndXJlIGV4aXN0aW5nIHByb3ZpZGVyc1xyXG4gICAgICogICAkbG9jYXRpb25Qcm92aWRlci5oYXNoUHJlZml4KCchJyk7XHJcbiAgICAgKiB9XSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBUaGVuIHlvdSBjYW4gY3JlYXRlIGFuIGluamVjdG9yIGFuZCBsb2FkIHlvdXIgbW9kdWxlcyBsaWtlIHRoaXM6XHJcbiAgICAgKlxyXG4gICAgICogYGBganNcclxuICAgICAqIHZhciBpbmplY3RvciA9IGFuZ3VsYXIuaW5qZWN0b3IoWyduZycsICdteU1vZHVsZSddKVxyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogSG93ZXZlciBpdCdzIG1vcmUgbGlrZWx5IHRoYXQgeW91J2xsIGp1c3QgdXNlXHJcbiAgICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQXBwIG5nQXBwfSBvclxyXG4gICAgICoge0BsaW5rIGFuZ3VsYXIuYm9vdHN0cmFwfSB0byBzaW1wbGlmeSB0aGlzIHByb2Nlc3MgZm9yIHlvdS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyFzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBjcmVhdGUgb3IgcmV0cmlldmUuXHJcbiAgICAgKiBAcGFyYW0geyFBcnJheS48c3RyaW5nPj19IHJlcXVpcmVzIElmIHNwZWNpZmllZCB0aGVuIG5ldyBtb2R1bGUgaXMgYmVpbmcgY3JlYXRlZC4gSWZcclxuICAgICAqICAgICAgICB1bnNwZWNpZmllZCB0aGVuIHRoZSBtb2R1bGUgaXMgYmVpbmcgcmV0cmlldmVkIGZvciBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY29uZmlnRm4gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIG1vZHVsZS4gU2FtZSBhc1xyXG4gICAgICogICAgICAgIHtAbGluayBhbmd1bGFyLk1vZHVsZSNjb25maWcgTW9kdWxlI2NvbmZpZygpfS5cclxuICAgICAqIEByZXR1cm5zIHttb2R1bGV9IG5ldyBtb2R1bGUgd2l0aCB0aGUge0BsaW5rIGFuZ3VsYXIuTW9kdWxlfSBhcGkuXHJcbiAgICAgKi9cclxuICAgIHJldHVybiBmdW5jdGlvbiBtb2R1bGUobmFtZSwgcmVxdWlyZXMsIGNvbmZpZ0ZuKSB7XHJcbiAgICAgIHZhciBhc3NlcnROb3RIYXNPd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKG5hbWUsIGNvbnRleHQpIHtcclxuICAgICAgICBpZiAobmFtZSA9PT0gJ2hhc093blByb3BlcnR5Jykge1xyXG4gICAgICAgICAgdGhyb3cgbmdNaW5FcnIoJ2JhZG5hbWUnLCAnaGFzT3duUHJvcGVydHkgaXMgbm90IGEgdmFsaWQgezB9IG5hbWUnLCBjb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBhc3NlcnROb3RIYXNPd25Qcm9wZXJ0eShuYW1lLCAnbW9kdWxlJyk7XHJcbiAgICAgIGlmIChyZXF1aXJlcyAmJiBtb2R1bGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgbW9kdWxlc1tuYW1lXSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGVuc3VyZShtb2R1bGVzLCBuYW1lLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoIXJlcXVpcmVzKSB7XHJcbiAgICAgICAgICB0aHJvdyAkaW5qZWN0b3JNaW5FcnIoJ25vbW9kJywgXCJNb2R1bGUgJ3swfScgaXMgbm90IGF2YWlsYWJsZSEgWW91IGVpdGhlciBtaXNzcGVsbGVkIFwiICtcclxuICAgICAgICAgICAgIFwidGhlIG1vZHVsZSBuYW1lIG9yIGZvcmdvdCB0byBsb2FkIGl0LiBJZiByZWdpc3RlcmluZyBhIG1vZHVsZSBlbnN1cmUgdGhhdCB5b3UgXCIgK1xyXG4gICAgICAgICAgICAgXCJzcGVjaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cIiwgbmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiogQHR5cGUgeyFBcnJheS48QXJyYXkuPCo+Pn0gKi9cclxuICAgICAgICB2YXIgaW52b2tlUXVldWUgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqIEB0eXBlIHshQXJyYXkuPEZ1bmN0aW9uPn0gKi9cclxuICAgICAgICB2YXIgY29uZmlnQmxvY2tzID0gW107XHJcblxyXG4gICAgICAgIC8qKiBAdHlwZSB7IUFycmF5LjxGdW5jdGlvbj59ICovXHJcbiAgICAgICAgdmFyIHJ1bkJsb2NrcyA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgY29uZmlnID0gaW52b2tlTGF0ZXIoJyRpbmplY3RvcicsICdpbnZva2UnLCAncHVzaCcsIGNvbmZpZ0Jsb2Nrcyk7XHJcblxyXG4gICAgICAgIC8qKiBAdHlwZSB7YW5ndWxhci5Nb2R1bGV9ICovXHJcbiAgICAgICAgdmFyIG1vZHVsZUluc3RhbmNlID0ge1xyXG4gICAgICAgICAgLy8gUHJpdmF0ZSBzdGF0ZVxyXG4gICAgICAgICAgX2ludm9rZVF1ZXVlOiBpbnZva2VRdWV1ZSxcclxuICAgICAgICAgIF9jb25maWdCbG9ja3M6IGNvbmZpZ0Jsb2NrcyxcclxuICAgICAgICAgIF9ydW5CbG9ja3M6IHJ1bkJsb2NrcyxcclxuXHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIEBuZ2RvYyBwcm9wZXJ0eVxyXG4gICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjcmVxdWlyZXNcclxuICAgICAgICAgICAqIEBtb2R1bGUgbmdcclxuICAgICAgICAgICAqXHJcbiAgICAgICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgICAgICAqIEhvbGRzIHRoZSBsaXN0IG9mIG1vZHVsZXMgd2hpY2ggdGhlIGluamVjdG9yIHdpbGwgbG9hZCBiZWZvcmUgdGhlIGN1cnJlbnQgbW9kdWxlIGlzXHJcbiAgICAgICAgICAgKiBsb2FkZWQuXHJcbiAgICAgICAgICAgKi9cclxuICAgICAgICAgIHJlcXVpcmVzOiByZXF1aXJlcyxcclxuXHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIEBuZ2RvYyBwcm9wZXJ0eVxyXG4gICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjbmFtZVxyXG4gICAgICAgICAgICogQG1vZHVsZSBuZ1xyXG4gICAgICAgICAgICpcclxuICAgICAgICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAgICAgICogTmFtZSBvZiB0aGUgbW9kdWxlLlxyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICBuYW1lOiBuYW1lLFxyXG5cclxuXHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI3Byb3ZpZGVyXHJcbiAgICAgICAgICAgKiBAbW9kdWxlIG5nXHJcbiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBzZXJ2aWNlIG5hbWVcclxuICAgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3ZpZGVyVHlwZSBDb25zdHJ1Y3Rpb24gZnVuY3Rpb24gZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZSBvZiB0aGVcclxuICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLlxyXG4gICAgICAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgKiBTZWUge0BsaW5rIGF1dG8uJHByb3ZpZGUjcHJvdmlkZXIgJHByb3ZpZGUucHJvdmlkZXIoKX0uXHJcbiAgICAgICAgICAgKi9cclxuICAgICAgICAgIHByb3ZpZGVyOiBpbnZva2VMYXRlcignJHByb3ZpZGUnLCAncHJvdmlkZXInKSxcclxuXHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI2ZhY3RvcnlcclxuICAgICAgICAgICAqIEBtb2R1bGUgbmdcclxuICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHNlcnZpY2UgbmFtZVxyXG4gICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvdmlkZXJGdW5jdGlvbiBGdW5jdGlvbiBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlIG9mIHRoZSBzZXJ2aWNlLlxyXG4gICAgICAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgKiBTZWUge0BsaW5rIGF1dG8uJHByb3ZpZGUjZmFjdG9yeSAkcHJvdmlkZS5mYWN0b3J5KCl9LlxyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICBmYWN0b3J5OiBpbnZva2VMYXRlcignJHByb3ZpZGUnLCAnZmFjdG9yeScpLFxyXG5cclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjc2VydmljZVxyXG4gICAgICAgICAgICogQG1vZHVsZSBuZ1xyXG4gICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgc2VydmljZSBuYW1lXHJcbiAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25zdHJ1Y3RvciBBIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBpbnN0YW50aWF0ZWQuXHJcbiAgICAgICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgICAgICAqIFNlZSB7QGxpbmsgYXV0by4kcHJvdmlkZSNzZXJ2aWNlICRwcm92aWRlLnNlcnZpY2UoKX0uXHJcbiAgICAgICAgICAgKi9cclxuICAgICAgICAgIHNlcnZpY2U6IGludm9rZUxhdGVyKCckcHJvdmlkZScsICdzZXJ2aWNlJyksXHJcblxyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSN2YWx1ZVxyXG4gICAgICAgICAgICogQG1vZHVsZSBuZ1xyXG4gICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgc2VydmljZSBuYW1lXHJcbiAgICAgICAgICAgKiBAcGFyYW0geyp9IG9iamVjdCBTZXJ2aWNlIGluc3RhbmNlIG9iamVjdC5cclxuICAgICAgICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAgICAgICogU2VlIHtAbGluayBhdXRvLiRwcm92aWRlI3ZhbHVlICRwcm92aWRlLnZhbHVlKCl9LlxyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICB2YWx1ZTogaW52b2tlTGF0ZXIoJyRwcm92aWRlJywgJ3ZhbHVlJyksXHJcblxyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSNjb25zdGFudFxyXG4gICAgICAgICAgICogQG1vZHVsZSBuZ1xyXG4gICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgY29uc3RhbnQgbmFtZVxyXG4gICAgICAgICAgICogQHBhcmFtIHsqfSBvYmplY3QgQ29uc3RhbnQgdmFsdWUuXHJcbiAgICAgICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgICAgICAqIEJlY2F1c2UgdGhlIGNvbnN0YW50IGFyZSBmaXhlZCwgdGhleSBnZXQgYXBwbGllZCBiZWZvcmUgb3RoZXIgcHJvdmlkZSBtZXRob2RzLlxyXG4gICAgICAgICAgICogU2VlIHtAbGluayBhdXRvLiRwcm92aWRlI2NvbnN0YW50ICRwcm92aWRlLmNvbnN0YW50KCl9LlxyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICBjb25zdGFudDogaW52b2tlTGF0ZXIoJyRwcm92aWRlJywgJ2NvbnN0YW50JywgJ3Vuc2hpZnQnKSxcclxuXHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI2FuaW1hdGlvblxyXG4gICAgICAgICAgICogQG1vZHVsZSBuZ1xyXG4gICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgYW5pbWF0aW9uIG5hbWVcclxuICAgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFuaW1hdGlvbkZhY3RvcnkgRmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlIG9mIGFuXHJcbiAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi5cclxuICAgICAgICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAgICAgICpcclxuICAgICAgICAgICAqICoqTk9URSoqOiBhbmltYXRpb25zIHRha2UgZWZmZWN0IG9ubHkgaWYgdGhlICoqbmdBbmltYXRlKiogbW9kdWxlIGlzIGxvYWRlZC5cclxuICAgICAgICAgICAqXHJcbiAgICAgICAgICAgKlxyXG4gICAgICAgICAgICogRGVmaW5lcyBhbiBhbmltYXRpb24gaG9vayB0aGF0IGNhbiBiZSBsYXRlciB1c2VkIHdpdGhcclxuICAgICAgICAgICAqIHtAbGluayBuZ0FuaW1hdGUuJGFuaW1hdGUgJGFuaW1hdGV9IHNlcnZpY2UgYW5kIGRpcmVjdGl2ZXMgdGhhdCB1c2UgdGhpcyBzZXJ2aWNlLlxyXG4gICAgICAgICAgICpcclxuICAgICAgICAgICAqIGBgYGpzXHJcbiAgICAgICAgICAgKiBtb2R1bGUuYW5pbWF0aW9uKCcuYW5pbWF0aW9uLW5hbWUnLCBmdW5jdGlvbigkaW5qZWN0MSwgJGluamVjdDIpIHtcclxuICAgICAgICAgICAqICAgcmV0dXJuIHtcclxuICAgICAgICAgICAqICAgICBldmVudE5hbWUgOiBmdW5jdGlvbihlbGVtZW50LCBkb25lKSB7XHJcbiAgICAgICAgICAgKiAgICAgICAvL2NvZGUgdG8gcnVuIHRoZSBhbmltYXRpb25cclxuICAgICAgICAgICAqICAgICAgIC8vb25jZSBjb21wbGV0ZSwgdGhlbiBydW4gZG9uZSgpXHJcbiAgICAgICAgICAgKiAgICAgICByZXR1cm4gZnVuY3Rpb24gY2FuY2VsbGF0aW9uRnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgICAgICogICAgICAgICAvL2NvZGUgdG8gY2FuY2VsIHRoZSBhbmltYXRpb25cclxuICAgICAgICAgICAqICAgICAgIH1cclxuICAgICAgICAgICAqICAgICB9XHJcbiAgICAgICAgICAgKiAgIH1cclxuICAgICAgICAgICAqIH0pXHJcbiAgICAgICAgICAgKiBgYGBcclxuICAgICAgICAgICAqXHJcbiAgICAgICAgICAgKiBTZWUge0BsaW5rIG5nLiRhbmltYXRlUHJvdmlkZXIjcmVnaXN0ZXIgJGFuaW1hdGVQcm92aWRlci5yZWdpc3RlcigpfSBhbmRcclxuICAgICAgICAgICAqIHtAbGluayBuZ0FuaW1hdGUgbmdBbmltYXRlIG1vZHVsZX0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXHJcbiAgICAgICAgICAgKi9cclxuICAgICAgICAgIGFuaW1hdGlvbjogaW52b2tlTGF0ZXIoJyRhbmltYXRlUHJvdmlkZXInLCAncmVnaXN0ZXInKSxcclxuXHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICAgICAqIEBuYW1lIGFuZ3VsYXIuTW9kdWxlI2ZpbHRlclxyXG4gICAgICAgICAgICogQG1vZHVsZSBuZ1xyXG4gICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRmlsdGVyIG5hbWUuXHJcbiAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaWx0ZXJGYWN0b3J5IEZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZSBvZiBmaWx0ZXIuXHJcbiAgICAgICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgICAgICAqIFNlZSB7QGxpbmsgbmcuJGZpbHRlclByb3ZpZGVyI3JlZ2lzdGVyICRmaWx0ZXJQcm92aWRlci5yZWdpc3RlcigpfS5cclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgZmlsdGVyOiBpbnZva2VMYXRlcignJGZpbHRlclByb3ZpZGVyJywgJ3JlZ2lzdGVyJyksXHJcblxyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSNjb250cm9sbGVyXHJcbiAgICAgICAgICAgKiBAbW9kdWxlIG5nXHJcbiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IG5hbWUgQ29udHJvbGxlciBuYW1lLCBvciBhbiBvYmplY3QgbWFwIG9mIGNvbnRyb2xsZXJzIHdoZXJlIHRoZVxyXG4gICAgICAgICAgICogICAga2V5cyBhcmUgdGhlIG5hbWVzIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUgY29uc3RydWN0b3JzLlxyXG4gICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29uc3RydWN0b3IgQ29udHJvbGxlciBjb25zdHJ1Y3RvciBmdW5jdGlvbi5cclxuICAgICAgICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAgICAgICogU2VlIHtAbGluayBuZy4kY29udHJvbGxlclByb3ZpZGVyI3JlZ2lzdGVyICRjb250cm9sbGVyUHJvdmlkZXIucmVnaXN0ZXIoKX0uXHJcbiAgICAgICAgICAgKi9cclxuICAgICAgICAgIGNvbnRyb2xsZXI6IGludm9rZUxhdGVyKCckY29udHJvbGxlclByb3ZpZGVyJywgJ3JlZ2lzdGVyJyksXHJcblxyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSNkaXJlY3RpdmVcclxuICAgICAgICAgICAqIEBtb2R1bGUgbmdcclxuICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gbmFtZSBEaXJlY3RpdmUgbmFtZSwgb3IgYW4gb2JqZWN0IG1hcCBvZiBkaXJlY3RpdmVzIHdoZXJlIHRoZVxyXG4gICAgICAgICAgICogICAga2V5cyBhcmUgdGhlIG5hbWVzIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUgZmFjdG9yaWVzLlxyXG4gICAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZGlyZWN0aXZlRmFjdG9yeSBGYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2Ugb2ZcclxuICAgICAgICAgICAqIGRpcmVjdGl2ZXMuXHJcbiAgICAgICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgICAgICAqIFNlZSB7QGxpbmsgbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmUgJGNvbXBpbGVQcm92aWRlci5kaXJlY3RpdmUoKX0uXHJcbiAgICAgICAgICAgKi9cclxuICAgICAgICAgIGRpcmVjdGl2ZTogaW52b2tlTGF0ZXIoJyRjb21waWxlUHJvdmlkZXInLCAnZGlyZWN0aXZlJyksXHJcblxyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAgICAgKiBAbmFtZSBhbmd1bGFyLk1vZHVsZSNjb25maWdcclxuICAgICAgICAgICAqIEBtb2R1bGUgbmdcclxuICAgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbmZpZ0ZuIEV4ZWN1dGUgdGhpcyBmdW5jdGlvbiBvbiBtb2R1bGUgbG9hZC4gVXNlZnVsIGZvciBzZXJ2aWNlXHJcbiAgICAgICAgICAgKiAgICBjb25maWd1cmF0aW9uLlxyXG4gICAgICAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgd29yayB3aGljaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgb24gbW9kdWxlIGxvYWRpbmcuXHJcbiAgICAgICAgICAgKiBGb3IgbW9yZSBhYm91dCBob3cgdG8gY29uZmlndXJlIHNlcnZpY2VzLCBzZWVcclxuICAgICAgICAgICAqIHtAbGluayBwcm92aWRlcnMjcHJvdmlkZXItcmVjaXBlIFByb3ZpZGVyIFJlY2lwZX0uXHJcbiAgICAgICAgICAgKi9cclxuICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxyXG5cclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICAgICAgICogQG5hbWUgYW5ndWxhci5Nb2R1bGUjcnVuXHJcbiAgICAgICAgICAgKiBAbW9kdWxlIG5nXHJcbiAgICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpbml0aWFsaXphdGlvbkZuIEV4ZWN1dGUgdGhpcyBmdW5jdGlvbiBhZnRlciBpbmplY3RvciBjcmVhdGlvbi5cclxuICAgICAgICAgICAqICAgIFVzZWZ1bCBmb3IgYXBwbGljYXRpb24gaW5pdGlhbGl6YXRpb24uXHJcbiAgICAgICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgICAgICAqIFVzZSB0aGlzIG1ldGhvZCB0byByZWdpc3RlciB3b3JrIHdoaWNoIHNob3VsZCBiZSBwZXJmb3JtZWQgd2hlbiB0aGUgaW5qZWN0b3IgaXMgZG9uZVxyXG4gICAgICAgICAgICogbG9hZGluZyBhbGwgbW9kdWxlcy5cclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgcnVuOiBmdW5jdGlvbihibG9jaykge1xyXG4gICAgICAgICAgICBydW5CbG9ja3MucHVzaChibG9jayk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChjb25maWdGbikge1xyXG4gICAgICAgICAgY29uZmlnKGNvbmZpZ0ZuKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtb2R1bGVJbnN0YW5jZTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3ZpZGVyXHJcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gaW5zZXJ0TWV0aG9kXHJcbiAgICAgICAgICogQHJldHVybnMge2FuZ3VsYXIuTW9kdWxlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZ1bmN0aW9uIGludm9rZUxhdGVyKHByb3ZpZGVyLCBtZXRob2QsIGluc2VydE1ldGhvZCwgcXVldWUpIHtcclxuICAgICAgICAgIGlmICghcXVldWUpIHF1ZXVlID0gaW52b2tlUXVldWU7XHJcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHF1ZXVlW2luc2VydE1ldGhvZCB8fCAncHVzaCddKFtwcm92aWRlciwgbWV0aG9kLCBhcmd1bWVudHNdKTtcclxuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZUluc3RhbmNlO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICB9KTtcclxuXHJcbn1cclxuXHJcbi8qIGdsb2JhbDogdG9EZWJ1Z1N0cmluZzogdHJ1ZSAqL1xyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplT2JqZWN0KG9iaikge1xyXG4gIHZhciBzZWVuID0gW107XHJcblxyXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIGZ1bmN0aW9uKGtleSwgdmFsKSB7XHJcbiAgICB2YWwgPSB0b0pzb25SZXBsYWNlcihrZXksIHZhbCk7XHJcbiAgICBpZiAoaXNPYmplY3QodmFsKSkge1xyXG5cclxuICAgICAgaWYgKHNlZW4uaW5kZXhPZih2YWwpID49IDApIHJldHVybiAnPDxhbHJlYWR5IHNlZW4+Pic7XHJcblxyXG4gICAgICBzZWVuLnB1c2godmFsKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWw7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvRGVidWdTdHJpbmcob2JqKSB7XHJcbiAgaWYgKHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcclxuICAgIHJldHVybiBvYmoudG9TdHJpbmcoKS5yZXBsYWNlKC8gXFx7W1xcc1xcU10qJC8sICcnKTtcclxuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XHJcbiAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqICE9PSAnc3RyaW5nJykge1xyXG4gICAgcmV0dXJuIHNlcmlhbGl6ZU9iamVjdChvYmopO1xyXG4gIH1cclxuICByZXR1cm4gb2JqO1xyXG59XHJcblxyXG4vKiBnbG9iYWwgYW5ndWxhck1vZHVsZTogdHJ1ZSxcclxuICB2ZXJzaW9uOiB0cnVlLFxyXG5cclxuICAkTG9jYWxlUHJvdmlkZXIsXHJcbiAgJENvbXBpbGVQcm92aWRlcixcclxuXHJcbiAgaHRtbEFuY2hvckRpcmVjdGl2ZSxcclxuICBpbnB1dERpcmVjdGl2ZSxcclxuICBpbnB1dERpcmVjdGl2ZSxcclxuICBmb3JtRGlyZWN0aXZlLFxyXG4gIHNjcmlwdERpcmVjdGl2ZSxcclxuICBzZWxlY3REaXJlY3RpdmUsXHJcbiAgc3R5bGVEaXJlY3RpdmUsXHJcbiAgb3B0aW9uRGlyZWN0aXZlLFxyXG4gIG5nQmluZERpcmVjdGl2ZSxcclxuICBuZ0JpbmRIdG1sRGlyZWN0aXZlLFxyXG4gIG5nQmluZFRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIG5nQ2xhc3NEaXJlY3RpdmUsXHJcbiAgbmdDbGFzc0V2ZW5EaXJlY3RpdmUsXHJcbiAgbmdDbGFzc09kZERpcmVjdGl2ZSxcclxuICBuZ0NzcERpcmVjdGl2ZSxcclxuICBuZ0Nsb2FrRGlyZWN0aXZlLFxyXG4gIG5nQ29udHJvbGxlckRpcmVjdGl2ZSxcclxuICBuZ0Zvcm1EaXJlY3RpdmUsXHJcbiAgbmdIaWRlRGlyZWN0aXZlLFxyXG4gIG5nSWZEaXJlY3RpdmUsXHJcbiAgbmdJbmNsdWRlRGlyZWN0aXZlLFxyXG4gIG5nSW5jbHVkZUZpbGxDb250ZW50RGlyZWN0aXZlLFxyXG4gIG5nSW5pdERpcmVjdGl2ZSxcclxuICBuZ05vbkJpbmRhYmxlRGlyZWN0aXZlLFxyXG4gIG5nUGx1cmFsaXplRGlyZWN0aXZlLFxyXG4gIG5nUmVwZWF0RGlyZWN0aXZlLFxyXG4gIG5nU2hvd0RpcmVjdGl2ZSxcclxuICBuZ1N0eWxlRGlyZWN0aXZlLFxyXG4gIG5nU3dpdGNoRGlyZWN0aXZlLFxyXG4gIG5nU3dpdGNoV2hlbkRpcmVjdGl2ZSxcclxuICBuZ1N3aXRjaERlZmF1bHREaXJlY3RpdmUsXHJcbiAgbmdPcHRpb25zRGlyZWN0aXZlLFxyXG4gIG5nVHJhbnNjbHVkZURpcmVjdGl2ZSxcclxuICBuZ01vZGVsRGlyZWN0aXZlLFxyXG4gIG5nTGlzdERpcmVjdGl2ZSxcclxuICBuZ0NoYW5nZURpcmVjdGl2ZSxcclxuICBwYXR0ZXJuRGlyZWN0aXZlLFxyXG4gIHBhdHRlcm5EaXJlY3RpdmUsXHJcbiAgcmVxdWlyZWREaXJlY3RpdmUsXHJcbiAgcmVxdWlyZWREaXJlY3RpdmUsXHJcbiAgbWlubGVuZ3RoRGlyZWN0aXZlLFxyXG4gIG1pbmxlbmd0aERpcmVjdGl2ZSxcclxuICBtYXhsZW5ndGhEaXJlY3RpdmUsXHJcbiAgbWF4bGVuZ3RoRGlyZWN0aXZlLFxyXG4gIG5nVmFsdWVEaXJlY3RpdmUsXHJcbiAgbmdNb2RlbE9wdGlvbnNEaXJlY3RpdmUsXHJcbiAgbmdBdHRyaWJ1dGVBbGlhc0RpcmVjdGl2ZXMsXHJcbiAgbmdFdmVudERpcmVjdGl2ZXMsXHJcblxyXG4gICRBbmNob3JTY3JvbGxQcm92aWRlcixcclxuICAkQW5pbWF0ZVByb3ZpZGVyLFxyXG4gICRCcm93c2VyUHJvdmlkZXIsXHJcbiAgJENhY2hlRmFjdG9yeVByb3ZpZGVyLFxyXG4gICRDb250cm9sbGVyUHJvdmlkZXIsXHJcbiAgJERvY3VtZW50UHJvdmlkZXIsXHJcbiAgJEV4Y2VwdGlvbkhhbmRsZXJQcm92aWRlcixcclxuICAkRmlsdGVyUHJvdmlkZXIsXHJcbiAgJEludGVycG9sYXRlUHJvdmlkZXIsXHJcbiAgJEludGVydmFsUHJvdmlkZXIsXHJcbiAgJEh0dHBQcm92aWRlcixcclxuICAkSHR0cEJhY2tlbmRQcm92aWRlcixcclxuICAkTG9jYXRpb25Qcm92aWRlcixcclxuICAkTG9nUHJvdmlkZXIsXHJcbiAgJFBhcnNlUHJvdmlkZXIsXHJcbiAgJFJvb3RTY29wZVByb3ZpZGVyLFxyXG4gICRRUHJvdmlkZXIsXHJcbiAgJCRRUHJvdmlkZXIsXHJcbiAgJCRTYW5pdGl6ZVVyaVByb3ZpZGVyLFxyXG4gICRTY2VQcm92aWRlcixcclxuICAkU2NlRGVsZWdhdGVQcm92aWRlcixcclxuICAkU25pZmZlclByb3ZpZGVyLFxyXG4gICRUZW1wbGF0ZUNhY2hlUHJvdmlkZXIsXHJcbiAgJFRlbXBsYXRlUmVxdWVzdFByb3ZpZGVyLFxyXG4gICQkVGVzdGFiaWxpdHlQcm92aWRlcixcclxuICAkVGltZW91dFByb3ZpZGVyLFxyXG4gICQkUkFGUHJvdmlkZXIsXHJcbiAgJCRBc3luY0NhbGxiYWNrUHJvdmlkZXIsXHJcbiAgJFdpbmRvd1Byb3ZpZGVyXHJcbiovXHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBvYmplY3RcclxuICogQG5hbWUgYW5ndWxhci52ZXJzaW9uXHJcbiAqIEBtb2R1bGUgbmdcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IEFuZ3VsYXJKUyB2ZXJzaW9uLiBUaGlzIG9iamVjdCBoYXMgdGhlXHJcbiAqIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxyXG4gKlxyXG4gKiAtIGBmdWxsYCDigJMgYHtzdHJpbmd9YCDigJMgRnVsbCB2ZXJzaW9uIHN0cmluZywgc3VjaCBhcyBcIjAuOS4xOFwiLlxyXG4gKiAtIGBtYWpvcmAg4oCTIGB7bnVtYmVyfWAg4oCTIE1ham9yIHZlcnNpb24gbnVtYmVyLCBzdWNoIGFzIFwiMFwiLlxyXG4gKiAtIGBtaW5vcmAg4oCTIGB7bnVtYmVyfWAg4oCTIE1pbm9yIHZlcnNpb24gbnVtYmVyLCBzdWNoIGFzIFwiOVwiLlxyXG4gKiAtIGBkb3RgIOKAkyBge251bWJlcn1gIOKAkyBEb3QgdmVyc2lvbiBudW1iZXIsIHN1Y2ggYXMgXCIxOFwiLlxyXG4gKiAtIGBjb2RlTmFtZWAg4oCTIGB7c3RyaW5nfWAg4oCTIENvZGUgbmFtZSBvZiB0aGUgcmVsZWFzZSwgc3VjaCBhcyBcImppZ2dsaW5nLWFybWZhdFwiLlxyXG4gKi9cclxudmFyIHZlcnNpb24gPSB7XHJcbiAgZnVsbDogJzEuMy4zJywgICAgLy8gYWxsIG9mIHRoZXNlIHBsYWNlaG9sZGVyIHN0cmluZ3Mgd2lsbCBiZSByZXBsYWNlZCBieSBncnVudCdzXHJcbiAgbWFqb3I6IDEsICAgIC8vIHBhY2thZ2UgdGFza1xyXG4gIG1pbm9yOiAzLFxyXG4gIGRvdDogMyxcclxuICBjb2RlTmFtZTogJ3VuZGVyc2VhLWFyaXRobWV0aWMnXHJcbn07XHJcblxyXG5cclxuZnVuY3Rpb24gcHVibGlzaEV4dGVybmFsQVBJKGFuZ3VsYXIpIHtcclxuICBleHRlbmQoYW5ndWxhciwge1xyXG4gICAgJ2Jvb3RzdHJhcCc6IGJvb3RzdHJhcCxcclxuICAgICdjb3B5JzogY29weSxcclxuICAgICdleHRlbmQnOiBleHRlbmQsXHJcbiAgICAnZXF1YWxzJzogZXF1YWxzLFxyXG4gICAgJ2VsZW1lbnQnOiBqcUxpdGUsXHJcbiAgICAnZm9yRWFjaCc6IGZvckVhY2gsXHJcbiAgICAnaW5qZWN0b3InOiBjcmVhdGVJbmplY3RvcixcclxuICAgICdub29wJzogbm9vcCxcclxuICAgICdiaW5kJzogYmluZCxcclxuICAgICd0b0pzb24nOiB0b0pzb24sXHJcbiAgICAnZnJvbUpzb24nOiBmcm9tSnNvbixcclxuICAgICdpZGVudGl0eSc6IGlkZW50aXR5LFxyXG4gICAgJ2lzVW5kZWZpbmVkJzogaXNVbmRlZmluZWQsXHJcbiAgICAnaXNEZWZpbmVkJzogaXNEZWZpbmVkLFxyXG4gICAgJ2lzU3RyaW5nJzogaXNTdHJpbmcsXHJcbiAgICAnaXNGdW5jdGlvbic6IGlzRnVuY3Rpb24sXHJcbiAgICAnaXNPYmplY3QnOiBpc09iamVjdCxcclxuICAgICdpc051bWJlcic6IGlzTnVtYmVyLFxyXG4gICAgJ2lzRWxlbWVudCc6IGlzRWxlbWVudCxcclxuICAgICdpc0FycmF5JzogaXNBcnJheSxcclxuICAgICd2ZXJzaW9uJzogdmVyc2lvbixcclxuICAgICdpc0RhdGUnOiBpc0RhdGUsXHJcbiAgICAnbG93ZXJjYXNlJzogbG93ZXJjYXNlLFxyXG4gICAgJ3VwcGVyY2FzZSc6IHVwcGVyY2FzZSxcclxuICAgICdjYWxsYmFja3MnOiB7Y291bnRlcjogMH0sXHJcbiAgICAnZ2V0VGVzdGFiaWxpdHknOiBnZXRUZXN0YWJpbGl0eSxcclxuICAgICckJG1pbkVycic6IG1pbkVycixcclxuICAgICckJGNzcCc6IGNzcCxcclxuICAgICdyZWxvYWRXaXRoRGVidWdJbmZvJzogcmVsb2FkV2l0aERlYnVnSW5mb1xyXG4gIH0pO1xyXG5cclxuICBhbmd1bGFyTW9kdWxlID0gc2V0dXBNb2R1bGVMb2FkZXIod2luZG93KTtcclxuICB0cnkge1xyXG4gICAgYW5ndWxhck1vZHVsZSgnbmdMb2NhbGUnKTtcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICBhbmd1bGFyTW9kdWxlKCduZ0xvY2FsZScsIFtdKS5wcm92aWRlcignJGxvY2FsZScsICRMb2NhbGVQcm92aWRlcik7XHJcbiAgfVxyXG5cclxuICBhbmd1bGFyTW9kdWxlKCduZycsIFsnbmdMb2NhbGUnXSwgWyckcHJvdmlkZScsXHJcbiAgICBmdW5jdGlvbiBuZ01vZHVsZSgkcHJvdmlkZSkge1xyXG4gICAgICAvLyAkJHNhbml0aXplVXJpUHJvdmlkZXIgbmVlZHMgdG8gYmUgYmVmb3JlICRjb21waWxlUHJvdmlkZXIgYXMgaXQgaXMgdXNlZCBieSBpdC5cclxuICAgICAgJHByb3ZpZGUucHJvdmlkZXIoe1xyXG4gICAgICAgICQkc2FuaXRpemVVcmk6ICQkU2FuaXRpemVVcmlQcm92aWRlclxyXG4gICAgICB9KTtcclxuICAgICAgJHByb3ZpZGUucHJvdmlkZXIoJyRjb21waWxlJywgJENvbXBpbGVQcm92aWRlcikuXHJcbiAgICAgICAgZGlyZWN0aXZlKHtcclxuICAgICAgICAgICAgYTogaHRtbEFuY2hvckRpcmVjdGl2ZSxcclxuICAgICAgICAgICAgaW5wdXQ6IGlucHV0RGlyZWN0aXZlLFxyXG4gICAgICAgICAgICB0ZXh0YXJlYTogaW5wdXREaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIGZvcm06IGZvcm1EaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIHNjcmlwdDogc2NyaXB0RGlyZWN0aXZlLFxyXG4gICAgICAgICAgICBzZWxlY3Q6IHNlbGVjdERpcmVjdGl2ZSxcclxuICAgICAgICAgICAgc3R5bGU6IHN0eWxlRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICBvcHRpb246IG9wdGlvbkRpcmVjdGl2ZSxcclxuICAgICAgICAgICAgbmdCaW5kOiBuZ0JpbmREaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIG5nQmluZEh0bWw6IG5nQmluZEh0bWxEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIG5nQmluZFRlbXBsYXRlOiBuZ0JpbmRUZW1wbGF0ZURpcmVjdGl2ZSxcclxuICAgICAgICAgICAgbmdDbGFzczogbmdDbGFzc0RpcmVjdGl2ZSxcclxuICAgICAgICAgICAgbmdDbGFzc0V2ZW46IG5nQ2xhc3NFdmVuRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICBuZ0NsYXNzT2RkOiBuZ0NsYXNzT2RkRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICBuZ0Nsb2FrOiBuZ0Nsb2FrRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICBuZ0NvbnRyb2xsZXI6IG5nQ29udHJvbGxlckRpcmVjdGl2ZSxcclxuICAgICAgICAgICAgbmdGb3JtOiBuZ0Zvcm1EaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIG5nSGlkZTogbmdIaWRlRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICBuZ0lmOiBuZ0lmRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICBuZ0luY2x1ZGU6IG5nSW5jbHVkZURpcmVjdGl2ZSxcclxuICAgICAgICAgICAgbmdJbml0OiBuZ0luaXREaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIG5nTm9uQmluZGFibGU6IG5nTm9uQmluZGFibGVEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIG5nUGx1cmFsaXplOiBuZ1BsdXJhbGl6ZURpcmVjdGl2ZSxcclxuICAgICAgICAgICAgbmdSZXBlYXQ6IG5nUmVwZWF0RGlyZWN0aXZlLFxyXG4gICAgICAgICAgICBuZ1Nob3c6IG5nU2hvd0RpcmVjdGl2ZSxcclxuICAgICAgICAgICAgbmdTdHlsZTogbmdTdHlsZURpcmVjdGl2ZSxcclxuICAgICAgICAgICAgbmdTd2l0Y2g6IG5nU3dpdGNoRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICBuZ1N3aXRjaFdoZW46IG5nU3dpdGNoV2hlbkRpcmVjdGl2ZSxcclxuICAgICAgICAgICAgbmdTd2l0Y2hEZWZhdWx0OiBuZ1N3aXRjaERlZmF1bHREaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIG5nT3B0aW9uczogbmdPcHRpb25zRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICBuZ1RyYW5zY2x1ZGU6IG5nVHJhbnNjbHVkZURpcmVjdGl2ZSxcclxuICAgICAgICAgICAgbmdNb2RlbDogbmdNb2RlbERpcmVjdGl2ZSxcclxuICAgICAgICAgICAgbmdMaXN0OiBuZ0xpc3REaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIG5nQ2hhbmdlOiBuZ0NoYW5nZURpcmVjdGl2ZSxcclxuICAgICAgICAgICAgcGF0dGVybjogcGF0dGVybkRpcmVjdGl2ZSxcclxuICAgICAgICAgICAgbmdQYXR0ZXJuOiBwYXR0ZXJuRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICByZXF1aXJlZDogcmVxdWlyZWREaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIG5nUmVxdWlyZWQ6IHJlcXVpcmVkRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICBtaW5sZW5ndGg6IG1pbmxlbmd0aERpcmVjdGl2ZSxcclxuICAgICAgICAgICAgbmdNaW5sZW5ndGg6IG1pbmxlbmd0aERpcmVjdGl2ZSxcclxuICAgICAgICAgICAgbWF4bGVuZ3RoOiBtYXhsZW5ndGhEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIG5nTWF4bGVuZ3RoOiBtYXhsZW5ndGhEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIG5nVmFsdWU6IG5nVmFsdWVEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIG5nTW9kZWxPcHRpb25zOiBuZ01vZGVsT3B0aW9uc0RpcmVjdGl2ZVxyXG4gICAgICAgIH0pLlxyXG4gICAgICAgIGRpcmVjdGl2ZSh7XHJcbiAgICAgICAgICBuZ0luY2x1ZGU6IG5nSW5jbHVkZUZpbGxDb250ZW50RGlyZWN0aXZlXHJcbiAgICAgICAgfSkuXHJcbiAgICAgICAgZGlyZWN0aXZlKG5nQXR0cmlidXRlQWxpYXNEaXJlY3RpdmVzKS5cclxuICAgICAgICBkaXJlY3RpdmUobmdFdmVudERpcmVjdGl2ZXMpO1xyXG4gICAgICAkcHJvdmlkZS5wcm92aWRlcih7XHJcbiAgICAgICAgJGFuY2hvclNjcm9sbDogJEFuY2hvclNjcm9sbFByb3ZpZGVyLFxyXG4gICAgICAgICRhbmltYXRlOiAkQW5pbWF0ZVByb3ZpZGVyLFxyXG4gICAgICAgICRicm93c2VyOiAkQnJvd3NlclByb3ZpZGVyLFxyXG4gICAgICAgICRjYWNoZUZhY3Rvcnk6ICRDYWNoZUZhY3RvcnlQcm92aWRlcixcclxuICAgICAgICAkY29udHJvbGxlcjogJENvbnRyb2xsZXJQcm92aWRlcixcclxuICAgICAgICAkZG9jdW1lbnQ6ICREb2N1bWVudFByb3ZpZGVyLFxyXG4gICAgICAgICRleGNlcHRpb25IYW5kbGVyOiAkRXhjZXB0aW9uSGFuZGxlclByb3ZpZGVyLFxyXG4gICAgICAgICRmaWx0ZXI6ICRGaWx0ZXJQcm92aWRlcixcclxuICAgICAgICAkaW50ZXJwb2xhdGU6ICRJbnRlcnBvbGF0ZVByb3ZpZGVyLFxyXG4gICAgICAgICRpbnRlcnZhbDogJEludGVydmFsUHJvdmlkZXIsXHJcbiAgICAgICAgJGh0dHA6ICRIdHRwUHJvdmlkZXIsXHJcbiAgICAgICAgJGh0dHBCYWNrZW5kOiAkSHR0cEJhY2tlbmRQcm92aWRlcixcclxuICAgICAgICAkbG9jYXRpb246ICRMb2NhdGlvblByb3ZpZGVyLFxyXG4gICAgICAgICRsb2c6ICRMb2dQcm92aWRlcixcclxuICAgICAgICAkcGFyc2U6ICRQYXJzZVByb3ZpZGVyLFxyXG4gICAgICAgICRyb290U2NvcGU6ICRSb290U2NvcGVQcm92aWRlcixcclxuICAgICAgICAkcTogJFFQcm92aWRlcixcclxuICAgICAgICAkJHE6ICQkUVByb3ZpZGVyLFxyXG4gICAgICAgICRzY2U6ICRTY2VQcm92aWRlcixcclxuICAgICAgICAkc2NlRGVsZWdhdGU6ICRTY2VEZWxlZ2F0ZVByb3ZpZGVyLFxyXG4gICAgICAgICRzbmlmZmVyOiAkU25pZmZlclByb3ZpZGVyLFxyXG4gICAgICAgICR0ZW1wbGF0ZUNhY2hlOiAkVGVtcGxhdGVDYWNoZVByb3ZpZGVyLFxyXG4gICAgICAgICR0ZW1wbGF0ZVJlcXVlc3Q6ICRUZW1wbGF0ZVJlcXVlc3RQcm92aWRlcixcclxuICAgICAgICAkJHRlc3RhYmlsaXR5OiAkJFRlc3RhYmlsaXR5UHJvdmlkZXIsXHJcbiAgICAgICAgJHRpbWVvdXQ6ICRUaW1lb3V0UHJvdmlkZXIsXHJcbiAgICAgICAgJHdpbmRvdzogJFdpbmRvd1Byb3ZpZGVyLFxyXG4gICAgICAgICQkckFGOiAkJFJBRlByb3ZpZGVyLFxyXG4gICAgICAgICQkYXN5bmNDYWxsYmFjazogJCRBc3luY0NhbGxiYWNrUHJvdmlkZXJcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgXSk7XHJcbn1cclxuXHJcbi8qIGdsb2JhbCBKUUxpdGVQcm90b3R5cGU6IHRydWUsXHJcbiAgYWRkRXZlbnRMaXN0ZW5lckZuOiB0cnVlLFxyXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXJGbjogdHJ1ZSxcclxuICBCT09MRUFOX0FUVFI6IHRydWUsXHJcbiAgQUxJQVNFRF9BVFRSOiB0cnVlLFxyXG4qL1xyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vL0pRTGl0ZVxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4vKipcclxuICogQG5nZG9jIGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGFuZ3VsYXIuZWxlbWVudFxyXG4gKiBAbW9kdWxlIG5nXHJcbiAqIEBraW5kIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBXcmFwcyBhIHJhdyBET00gZWxlbWVudCBvciBIVE1MIHN0cmluZyBhcyBhIFtqUXVlcnldKGh0dHA6Ly9qcXVlcnkuY29tKSBlbGVtZW50LlxyXG4gKlxyXG4gKiBJZiBqUXVlcnkgaXMgYXZhaWxhYmxlLCBgYW5ndWxhci5lbGVtZW50YCBpcyBhbiBhbGlhcyBmb3IgdGhlXHJcbiAqIFtqUXVlcnldKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9qUXVlcnkvKSBmdW5jdGlvbi4gSWYgalF1ZXJ5IGlzIG5vdCBhdmFpbGFibGUsIGBhbmd1bGFyLmVsZW1lbnRgXHJcbiAqIGRlbGVnYXRlcyB0byBBbmd1bGFyJ3MgYnVpbHQtaW4gc3Vic2V0IG9mIGpRdWVyeSwgY2FsbGVkIFwialF1ZXJ5IGxpdGVcIiBvciBcImpxTGl0ZS5cIlxyXG4gKlxyXG4gKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtc3VjY2Vzc1wiPmpxTGl0ZSBpcyBhIHRpbnksIEFQSS1jb21wYXRpYmxlIHN1YnNldCBvZiBqUXVlcnkgdGhhdCBhbGxvd3NcclxuICogQW5ndWxhciB0byBtYW5pcHVsYXRlIHRoZSBET00gaW4gYSBjcm9zcy1icm93c2VyIGNvbXBhdGlibGUgd2F5LiAqKmpxTGl0ZSoqIGltcGxlbWVudHMgb25seSB0aGUgbW9zdFxyXG4gKiBjb21tb25seSBuZWVkZWQgZnVuY3Rpb25hbGl0eSB3aXRoIHRoZSBnb2FsIG9mIGhhdmluZyBhIHZlcnkgc21hbGwgZm9vdHByaW50LjwvZGl2PlxyXG4gKlxyXG4gKiBUbyB1c2UgalF1ZXJ5LCBzaW1wbHkgbG9hZCBpdCBiZWZvcmUgYERPTUNvbnRlbnRMb2FkZWRgIGV2ZW50IGZpcmVkLlxyXG4gKlxyXG4gKiA8ZGl2IGNsYXNzPVwiYWxlcnRcIj4qKk5vdGU6KiogYWxsIGVsZW1lbnQgcmVmZXJlbmNlcyBpbiBBbmd1bGFyIGFyZSBhbHdheXMgd3JhcHBlZCB3aXRoIGpRdWVyeSBvclxyXG4gKiBqcUxpdGU7IHRoZXkgYXJlIG5ldmVyIHJhdyBET00gcmVmZXJlbmNlcy48L2Rpdj5cclxuICpcclxuICogIyMgQW5ndWxhcidzIGpxTGl0ZVxyXG4gKiBqcUxpdGUgcHJvdmlkZXMgb25seSB0aGUgZm9sbG93aW5nIGpRdWVyeSBtZXRob2RzOlxyXG4gKlxyXG4gKiAtIFtgYWRkQ2xhc3MoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9hZGRDbGFzcy8pXHJcbiAqIC0gW2BhZnRlcigpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2FmdGVyLylcclxuICogLSBbYGFwcGVuZCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2FwcGVuZC8pXHJcbiAqIC0gW2BhdHRyKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vYXR0ci8pIC0gRG9lcyBub3Qgc3VwcG9ydCBmdW5jdGlvbnMgYXMgcGFyYW1ldGVyc1xyXG4gKiAtIFtgYmluZCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2JpbmQvKSAtIERvZXMgbm90IHN1cHBvcnQgbmFtZXNwYWNlcywgc2VsZWN0b3JzIG9yIGV2ZW50RGF0YVxyXG4gKiAtIFtgY2hpbGRyZW4oKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jaGlsZHJlbi8pIC0gRG9lcyBub3Qgc3VwcG9ydCBzZWxlY3RvcnNcclxuICogLSBbYGNsb25lKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vY2xvbmUvKVxyXG4gKiAtIFtgY29udGVudHMoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jb250ZW50cy8pXHJcbiAqIC0gW2Bjc3MoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jc3MvKSAtIE9ubHkgcmV0cmlldmVzIGlubGluZS1zdHlsZXMsIGRvZXMgbm90IGNhbGwgYGdldENvbXB1dGVkU3R5bGUoKWBcclxuICogLSBbYGRhdGEoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9kYXRhLylcclxuICogLSBbYGRldGFjaCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2RldGFjaC8pXHJcbiAqIC0gW2BlbXB0eSgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2VtcHR5LylcclxuICogLSBbYGVxKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vZXEvKVxyXG4gKiAtIFtgZmluZCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL2ZpbmQvKSAtIExpbWl0ZWQgdG8gbG9va3VwcyBieSB0YWcgbmFtZVxyXG4gKiAtIFtgaGFzQ2xhc3MoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9oYXNDbGFzcy8pXHJcbiAqIC0gW2BodG1sKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vaHRtbC8pXHJcbiAqIC0gW2BuZXh0KClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vbmV4dC8pIC0gRG9lcyBub3Qgc3VwcG9ydCBzZWxlY3RvcnNcclxuICogLSBbYG9uKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vb24vKSAtIERvZXMgbm90IHN1cHBvcnQgbmFtZXNwYWNlcywgc2VsZWN0b3JzIG9yIGV2ZW50RGF0YVxyXG4gKiAtIFtgb2ZmKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vb2ZmLykgLSBEb2VzIG5vdCBzdXBwb3J0IG5hbWVzcGFjZXMgb3Igc2VsZWN0b3JzXHJcbiAqIC0gW2BvbmUoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9vbmUvKSAtIERvZXMgbm90IHN1cHBvcnQgbmFtZXNwYWNlcyBvciBzZWxlY3RvcnNcclxuICogLSBbYHBhcmVudCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3BhcmVudC8pIC0gRG9lcyBub3Qgc3VwcG9ydCBzZWxlY3RvcnNcclxuICogLSBbYHByZXBlbmQoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9wcmVwZW5kLylcclxuICogLSBbYHByb3AoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9wcm9wLylcclxuICogLSBbYHJlYWR5KClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vcmVhZHkvKVxyXG4gKiAtIFtgcmVtb3ZlKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vcmVtb3ZlLylcclxuICogLSBbYHJlbW92ZUF0dHIoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9yZW1vdmVBdHRyLylcclxuICogLSBbYHJlbW92ZUNsYXNzKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vcmVtb3ZlQ2xhc3MvKVxyXG4gKiAtIFtgcmVtb3ZlRGF0YSgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3JlbW92ZURhdGEvKVxyXG4gKiAtIFtgcmVwbGFjZVdpdGgoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9yZXBsYWNlV2l0aC8pXHJcbiAqIC0gW2B0ZXh0KClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vdGV4dC8pXHJcbiAqIC0gW2B0b2dnbGVDbGFzcygpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3RvZ2dsZUNsYXNzLylcclxuICogLSBbYHRyaWdnZXJIYW5kbGVyKClgXShodHRwOi8vYXBpLmpxdWVyeS5jb20vdHJpZ2dlckhhbmRsZXIvKSAtIFBhc3NlcyBhIGR1bW15IGV2ZW50IG9iamVjdCB0byBoYW5kbGVycy5cclxuICogLSBbYHVuYmluZCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3VuYmluZC8pIC0gRG9lcyBub3Qgc3VwcG9ydCBuYW1lc3BhY2VzXHJcbiAqIC0gW2B2YWwoKWBdKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS92YWwvKVxyXG4gKiAtIFtgd3JhcCgpYF0oaHR0cDovL2FwaS5qcXVlcnkuY29tL3dyYXAvKVxyXG4gKlxyXG4gKiAjIyBqUXVlcnkvanFMaXRlIEV4dHJhc1xyXG4gKiBBbmd1bGFyIGFsc28gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG1ldGhvZHMgYW5kIGV2ZW50cyB0byBib3RoIGpRdWVyeSBhbmQganFMaXRlOlxyXG4gKlxyXG4gKiAjIyMgRXZlbnRzXHJcbiAqIC0gYCRkZXN0cm95YCAtIEFuZ3VsYXJKUyBpbnRlcmNlcHRzIGFsbCBqcUxpdGUvalF1ZXJ5J3MgRE9NIGRlc3RydWN0aW9uIGFwaXMgYW5kIGZpcmVzIHRoaXMgZXZlbnRcclxuICogICAgb24gYWxsIERPTSBub2RlcyBiZWluZyByZW1vdmVkLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBjbGVhbiB1cCBhbnkgM3JkIHBhcnR5IGJpbmRpbmdzIHRvIHRoZSBET01cclxuICogICAgZWxlbWVudCBiZWZvcmUgaXQgaXMgcmVtb3ZlZC5cclxuICpcclxuICogIyMjIE1ldGhvZHNcclxuICogLSBgY29udHJvbGxlcihuYW1lKWAgLSByZXRyaWV2ZXMgdGhlIGNvbnRyb2xsZXIgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBvciBpdHMgcGFyZW50LiBCeSBkZWZhdWx0XHJcbiAqICAgcmV0cmlldmVzIGNvbnRyb2xsZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBgbmdDb250cm9sbGVyYCBkaXJlY3RpdmUuIElmIGBuYW1lYCBpcyBwcm92aWRlZCBhc1xyXG4gKiAgIGNhbWVsQ2FzZSBkaXJlY3RpdmUgbmFtZSwgdGhlbiB0aGUgY29udHJvbGxlciBmb3IgdGhpcyBkaXJlY3RpdmUgd2lsbCBiZSByZXRyaWV2ZWQgKGUuZy5cclxuICogICBgJ25nTW9kZWwnYCkuXHJcbiAqIC0gYGluamVjdG9yKClgIC0gcmV0cmlldmVzIHRoZSBpbmplY3RvciBvZiB0aGUgY3VycmVudCBlbGVtZW50IG9yIGl0cyBwYXJlbnQuXHJcbiAqIC0gYHNjb3BlKClgIC0gcmV0cmlldmVzIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSBzY29wZX0gb2YgdGhlIGN1cnJlbnRcclxuICogICBlbGVtZW50IG9yIGl0cyBwYXJlbnQuXHJcbiAqIC0gYGlzb2xhdGVTY29wZSgpYCAtIHJldHJpZXZlcyBhbiBpc29sYXRlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIHNjb3BlfSBpZiBvbmUgaXMgYXR0YWNoZWQgZGlyZWN0bHkgdG8gdGhlXHJcbiAqICAgY3VycmVudCBlbGVtZW50LiBUaGlzIGdldHRlciBzaG91bGQgYmUgdXNlZCBvbmx5IG9uIGVsZW1lbnRzIHRoYXQgY29udGFpbiBhIGRpcmVjdGl2ZSB3aGljaCBzdGFydHMgYSBuZXcgaXNvbGF0ZVxyXG4gKiAgIHNjb3BlLiBDYWxsaW5nIGBzY29wZSgpYCBvbiB0aGlzIGVsZW1lbnQgYWx3YXlzIHJldHVybnMgdGhlIG9yaWdpbmFsIG5vbi1pc29sYXRlIHNjb3BlLlxyXG4gKiAtIGBpbmhlcml0ZWREYXRhKClgIC0gc2FtZSBhcyBgZGF0YSgpYCwgYnV0IHdhbGtzIHVwIHRoZSBET00gdW50aWwgYSB2YWx1ZSBpcyBmb3VuZCBvciB0aGUgdG9wXHJcbiAqICAgcGFyZW50IGVsZW1lbnQgaXMgcmVhY2hlZC5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd8RE9NRWxlbWVudH0gZWxlbWVudCBIVE1MIHN0cmluZyBvciBET01FbGVtZW50IHRvIGJlIHdyYXBwZWQgaW50byBqUXVlcnkuXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9IGpRdWVyeSBvYmplY3QuXHJcbiAqL1xyXG5cclxuSlFMaXRlLmV4cGFuZG8gPSAnbmczMzknO1xyXG5cclxudmFyIGpxQ2FjaGUgPSBKUUxpdGUuY2FjaGUgPSB7fSxcclxuICAgIGpxSWQgPSAxLFxyXG4gICAgYWRkRXZlbnRMaXN0ZW5lckZuID0gZnVuY3Rpb24oZWxlbWVudCwgdHlwZSwgZm4pIHtcclxuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCBmYWxzZSk7XHJcbiAgICB9LFxyXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lckZuID0gZnVuY3Rpb24oZWxlbWVudCwgdHlwZSwgZm4pIHtcclxuICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZuLCBmYWxzZSk7XHJcbiAgICB9O1xyXG5cclxuLypcclxuICogISEhIFRoaXMgaXMgYW4gdW5kb2N1bWVudGVkIFwicHJpdmF0ZVwiIGZ1bmN0aW9uICEhIVxyXG4gKi9cclxuSlFMaXRlLl9kYXRhID0gZnVuY3Rpb24obm9kZSkge1xyXG4gIC8valF1ZXJ5IGFsd2F5cyByZXR1cm5zIGFuIG9iamVjdCBvbiBjYWNoZSBtaXNzXHJcbiAgcmV0dXJuIHRoaXMuY2FjaGVbbm9kZVt0aGlzLmV4cGFuZG9dXSB8fCB7fTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGpxTmV4dElkKCkgeyByZXR1cm4gKytqcUlkOyB9XHJcblxyXG5cclxudmFyIFNQRUNJQUxfQ0hBUlNfUkVHRVhQID0gLyhbXFw6XFwtXFxfXSsoLikpL2c7XHJcbnZhciBNT1pfSEFDS19SRUdFWFAgPSAvXm1veihbQS1aXSkvO1xyXG52YXIgTU9VU0VfRVZFTlRfTUFQPSB7IG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIiwgbW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIn07XHJcbnZhciBqcUxpdGVNaW5FcnIgPSBtaW5FcnIoJ2pxTGl0ZScpO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHNuYWtlX2Nhc2UgdG8gY2FtZWxDYXNlLlxyXG4gKiBBbHNvIHRoZXJlIGlzIHNwZWNpYWwgY2FzZSBmb3IgTW96IHByZWZpeCBzdGFydGluZyB3aXRoIHVwcGVyIGNhc2UgbGV0dGVyLlxyXG4gKiBAcGFyYW0gbmFtZSBOYW1lIHRvIG5vcm1hbGl6ZVxyXG4gKi9cclxuZnVuY3Rpb24gY2FtZWxDYXNlKG5hbWUpIHtcclxuICByZXR1cm4gbmFtZS5cclxuICAgIHJlcGxhY2UoU1BFQ0lBTF9DSEFSU19SRUdFWFAsIGZ1bmN0aW9uKF8sIHNlcGFyYXRvciwgbGV0dGVyLCBvZmZzZXQpIHtcclxuICAgICAgcmV0dXJuIG9mZnNldCA/IGxldHRlci50b1VwcGVyQ2FzZSgpIDogbGV0dGVyO1xyXG4gICAgfSkuXHJcbiAgICByZXBsYWNlKE1PWl9IQUNLX1JFR0VYUCwgJ01veiQxJyk7XHJcbn1cclxuXHJcbnZhciBTSU5HTEVfVEFHX1JFR0VYUCA9IC9ePChcXHcrKVxccypcXC8/Pig/OjxcXC9cXDE+fCkkLztcclxudmFyIEhUTUxfUkVHRVhQID0gLzx8JiM/XFx3KzsvO1xyXG52YXIgVEFHX05BTUVfUkVHRVhQID0gLzwoW1xcdzpdKykvO1xyXG52YXIgWEhUTUxfVEFHX1JFR0VYUCA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcXHc6XSspW14+XSopXFwvPi9naTtcclxuXHJcbnZhciB3cmFwTWFwID0ge1xyXG4gICdvcHRpb24nOiBbMSwgJzxzZWxlY3QgbXVsdGlwbGU9XCJtdWx0aXBsZVwiPicsICc8L3NlbGVjdD4nXSxcclxuXHJcbiAgJ3RoZWFkJzogWzEsICc8dGFibGU+JywgJzwvdGFibGU+J10sXHJcbiAgJ2NvbCc6IFsyLCAnPHRhYmxlPjxjb2xncm91cD4nLCAnPC9jb2xncm91cD48L3RhYmxlPiddLFxyXG4gICd0cic6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48L3RhYmxlPiddLFxyXG4gICd0ZCc6IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddLFxyXG4gICdfZGVmYXVsdCc6IFswLCBcIlwiLCBcIlwiXVxyXG59O1xyXG5cclxud3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uO1xyXG53cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkO1xyXG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcclxuXHJcblxyXG5mdW5jdGlvbiBqcUxpdGVJc1RleHROb2RlKGh0bWwpIHtcclxuICByZXR1cm4gIUhUTUxfUkVHRVhQLnRlc3QoaHRtbCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGpxTGl0ZUFjY2VwdHNEYXRhKG5vZGUpIHtcclxuICAvLyBUaGUgd2luZG93IG9iamVjdCBjYW4gYWNjZXB0IGRhdGEgYnV0IGhhcyBubyBub2RlVHlwZVxyXG4gIC8vIE90aGVyd2lzZSB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGVsZW1lbnRzICgxKSBhbmQgZG9jdW1lbnRzICg5KVxyXG4gIHZhciBub2RlVHlwZSA9IG5vZGUubm9kZVR5cGU7XHJcbiAgcmV0dXJuIG5vZGVUeXBlID09PSBOT0RFX1RZUEVfRUxFTUVOVCB8fCAhbm9kZVR5cGUgfHwgbm9kZVR5cGUgPT09IE5PREVfVFlQRV9ET0NVTUVOVDtcclxufVxyXG5cclxuZnVuY3Rpb24ganFMaXRlQnVpbGRGcmFnbWVudChodG1sLCBjb250ZXh0KSB7XHJcbiAgdmFyIHRtcCwgdGFnLCB3cmFwLFxyXG4gICAgICBmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG4gICAgICBub2RlcyA9IFtdLCBpO1xyXG5cclxuICBpZiAoanFMaXRlSXNUZXh0Tm9kZShodG1sKSkge1xyXG4gICAgLy8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXHJcbiAgICBub2Rlcy5wdXNoKGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoaHRtbCkpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXNcclxuICAgIHRtcCA9IHRtcCB8fCBmcmFnbWVudC5hcHBlbmRDaGlsZChjb250ZXh0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xyXG4gICAgdGFnID0gKFRBR19OQU1FX1JFR0VYUC5leGVjKGh0bWwpIHx8IFtcIlwiLCBcIlwiXSlbMV0udG9Mb3dlckNhc2UoKTtcclxuICAgIHdyYXAgPSB3cmFwTWFwW3RhZ10gfHwgd3JhcE1hcC5fZGVmYXVsdDtcclxuICAgIHRtcC5pbm5lckhUTUwgPSB3cmFwWzFdICsgaHRtbC5yZXBsYWNlKFhIVE1MX1RBR19SRUdFWFAsIFwiPCQxPjwvJDI+XCIpICsgd3JhcFsyXTtcclxuXHJcbiAgICAvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcclxuICAgIGkgPSB3cmFwWzBdO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICB0bXAgPSB0bXAubGFzdENoaWxkO1xyXG4gICAgfVxyXG5cclxuICAgIG5vZGVzID0gY29uY2F0KG5vZGVzLCB0bXAuY2hpbGROb2Rlcyk7XHJcblxyXG4gICAgdG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcclxuICAgIHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XHJcbiAgZnJhZ21lbnQudGV4dENvbnRlbnQgPSBcIlwiO1xyXG4gIGZyYWdtZW50LmlubmVySFRNTCA9IFwiXCI7IC8vIENsZWFyIGlubmVyIEhUTUxcclxuICBmb3JFYWNoKG5vZGVzLCBmdW5jdGlvbihub2RlKSB7XHJcbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChub2RlKTtcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIGZyYWdtZW50O1xyXG59XHJcblxyXG5mdW5jdGlvbiBqcUxpdGVQYXJzZUhUTUwoaHRtbCwgY29udGV4dCkge1xyXG4gIGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xyXG4gIHZhciBwYXJzZWQ7XHJcblxyXG4gIGlmICgocGFyc2VkID0gU0lOR0xFX1RBR19SRUdFWFAuZXhlYyhodG1sKSkpIHtcclxuICAgIHJldHVybiBbY29udGV4dC5jcmVhdGVFbGVtZW50KHBhcnNlZFsxXSldO1xyXG4gIH1cclxuXHJcbiAgaWYgKChwYXJzZWQgPSBqcUxpdGVCdWlsZEZyYWdtZW50KGh0bWwsIGNvbnRleHQpKSkge1xyXG4gICAgcmV0dXJuIHBhcnNlZC5jaGlsZE5vZGVzO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIFtdO1xyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuZnVuY3Rpb24gSlFMaXRlKGVsZW1lbnQpIHtcclxuICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEpRTGl0ZSkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICB2YXIgYXJnSXNTdHJpbmc7XHJcblxyXG4gIGlmIChpc1N0cmluZyhlbGVtZW50KSkge1xyXG4gICAgZWxlbWVudCA9IHRyaW0oZWxlbWVudCk7XHJcbiAgICBhcmdJc1N0cmluZyA9IHRydWU7XHJcbiAgfVxyXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBKUUxpdGUpKSB7XHJcbiAgICBpZiAoYXJnSXNTdHJpbmcgJiYgZWxlbWVudC5jaGFyQXQoMCkgIT0gJzwnKSB7XHJcbiAgICAgIHRocm93IGpxTGl0ZU1pbkVycignbm9zZWwnLCAnTG9va2luZyB1cCBlbGVtZW50cyB2aWEgc2VsZWN0b3JzIGlzIG5vdCBzdXBwb3J0ZWQgYnkganFMaXRlISBTZWU6IGh0dHA6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL2FuZ3VsYXIuZWxlbWVudCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBKUUxpdGUoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBpZiAoYXJnSXNTdHJpbmcpIHtcclxuICAgIGpxTGl0ZUFkZE5vZGVzKHRoaXMsIGpxTGl0ZVBhcnNlSFRNTChlbGVtZW50KSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGpxTGl0ZUFkZE5vZGVzKHRoaXMsIGVsZW1lbnQpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24ganFMaXRlQ2xvbmUoZWxlbWVudCkge1xyXG4gIHJldHVybiBlbGVtZW50LmNsb25lTm9kZSh0cnVlKTtcclxufVxyXG5cclxuZnVuY3Rpb24ganFMaXRlRGVhbG9jKGVsZW1lbnQsIG9ubHlEZXNjZW5kYW50cykge1xyXG4gIGlmICghb25seURlc2NlbmRhbnRzKSBqcUxpdGVSZW1vdmVEYXRhKGVsZW1lbnQpO1xyXG5cclxuICBpZiAoZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKSB7XHJcbiAgICB2YXIgZGVzY2VuZGFudHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyonKTtcclxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gZGVzY2VuZGFudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgIGpxTGl0ZVJlbW92ZURhdGEoZGVzY2VuZGFudHNbaV0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24ganFMaXRlT2ZmKGVsZW1lbnQsIHR5cGUsIGZuLCB1bnN1cHBvcnRlZCkge1xyXG4gIGlmIChpc0RlZmluZWQodW5zdXBwb3J0ZWQpKSB0aHJvdyBqcUxpdGVNaW5FcnIoJ29mZmFyZ3MnLCAnanFMaXRlI29mZigpIGRvZXMgbm90IHN1cHBvcnQgdGhlIGBzZWxlY3RvcmAgYXJndW1lbnQnKTtcclxuXHJcbiAgdmFyIGV4cGFuZG9TdG9yZSA9IGpxTGl0ZUV4cGFuZG9TdG9yZShlbGVtZW50KTtcclxuICB2YXIgZXZlbnRzID0gZXhwYW5kb1N0b3JlICYmIGV4cGFuZG9TdG9yZS5ldmVudHM7XHJcbiAgdmFyIGhhbmRsZSA9IGV4cGFuZG9TdG9yZSAmJiBleHBhbmRvU3RvcmUuaGFuZGxlO1xyXG5cclxuICBpZiAoIWhhbmRsZSkgcmV0dXJuOyAvL25vIGxpc3RlbmVycyByZWdpc3RlcmVkXHJcblxyXG4gIGlmICghdHlwZSkge1xyXG4gICAgZm9yICh0eXBlIGluIGV2ZW50cykge1xyXG4gICAgICBpZiAodHlwZSAhPT0gJyRkZXN0cm95Jykge1xyXG4gICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXJGbihlbGVtZW50LCB0eXBlLCBoYW5kbGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGZvckVhY2godHlwZS5zcGxpdCgnICcpLCBmdW5jdGlvbih0eXBlKSB7XHJcbiAgICAgIGlmIChpc0RlZmluZWQoZm4pKSB7XHJcbiAgICAgICAgdmFyIGxpc3RlbmVyRm5zID0gZXZlbnRzW3R5cGVdO1xyXG4gICAgICAgIGFycmF5UmVtb3ZlKGxpc3RlbmVyRm5zIHx8IFtdLCBmbik7XHJcbiAgICAgICAgaWYgKGxpc3RlbmVyRm5zICYmIGxpc3RlbmVyRm5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXJGbihlbGVtZW50LCB0eXBlLCBoYW5kbGUpO1xyXG4gICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBqcUxpdGVSZW1vdmVEYXRhKGVsZW1lbnQsIG5hbWUpIHtcclxuICB2YXIgZXhwYW5kb0lkID0gZWxlbWVudC5uZzMzOTtcclxuICB2YXIgZXhwYW5kb1N0b3JlID0gZXhwYW5kb0lkICYmIGpxQ2FjaGVbZXhwYW5kb0lkXTtcclxuXHJcbiAgaWYgKGV4cGFuZG9TdG9yZSkge1xyXG4gICAgaWYgKG5hbWUpIHtcclxuICAgICAgZGVsZXRlIGV4cGFuZG9TdG9yZS5kYXRhW25hbWVdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4cGFuZG9TdG9yZS5oYW5kbGUpIHtcclxuICAgICAgaWYgKGV4cGFuZG9TdG9yZS5ldmVudHMuJGRlc3Ryb3kpIHtcclxuICAgICAgICBleHBhbmRvU3RvcmUuaGFuZGxlKHt9LCAnJGRlc3Ryb3knKTtcclxuICAgICAgfVxyXG4gICAgICBqcUxpdGVPZmYoZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICBkZWxldGUganFDYWNoZVtleHBhbmRvSWRdO1xyXG4gICAgZWxlbWVudC5uZzMzOSA9IHVuZGVmaW5lZDsgLy8gZG9uJ3QgZGVsZXRlIERPTSBleHBhbmRvcy4gSUUgYW5kIENocm9tZSBkb24ndCBsaWtlIGl0XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24ganFMaXRlRXhwYW5kb1N0b3JlKGVsZW1lbnQsIGNyZWF0ZUlmTmVjZXNzYXJ5KSB7XHJcbiAgdmFyIGV4cGFuZG9JZCA9IGVsZW1lbnQubmczMzksXHJcbiAgICAgIGV4cGFuZG9TdG9yZSA9IGV4cGFuZG9JZCAmJiBqcUNhY2hlW2V4cGFuZG9JZF07XHJcblxyXG4gIGlmIChjcmVhdGVJZk5lY2Vzc2FyeSAmJiAhZXhwYW5kb1N0b3JlKSB7XHJcbiAgICBlbGVtZW50Lm5nMzM5ID0gZXhwYW5kb0lkID0ganFOZXh0SWQoKTtcclxuICAgIGV4cGFuZG9TdG9yZSA9IGpxQ2FjaGVbZXhwYW5kb0lkXSA9IHtldmVudHM6IHt9LCBkYXRhOiB7fSwgaGFuZGxlOiB1bmRlZmluZWR9O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGV4cGFuZG9TdG9yZTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGpxTGl0ZURhdGEoZWxlbWVudCwga2V5LCB2YWx1ZSkge1xyXG4gIGlmIChqcUxpdGVBY2NlcHRzRGF0YShlbGVtZW50KSkge1xyXG5cclxuICAgIHZhciBpc1NpbXBsZVNldHRlciA9IGlzRGVmaW5lZCh2YWx1ZSk7XHJcbiAgICB2YXIgaXNTaW1wbGVHZXR0ZXIgPSAhaXNTaW1wbGVTZXR0ZXIgJiYga2V5ICYmICFpc09iamVjdChrZXkpO1xyXG4gICAgdmFyIG1hc3NHZXR0ZXIgPSAha2V5O1xyXG4gICAgdmFyIGV4cGFuZG9TdG9yZSA9IGpxTGl0ZUV4cGFuZG9TdG9yZShlbGVtZW50LCAhaXNTaW1wbGVHZXR0ZXIpO1xyXG4gICAgdmFyIGRhdGEgPSBleHBhbmRvU3RvcmUgJiYgZXhwYW5kb1N0b3JlLmRhdGE7XHJcblxyXG4gICAgaWYgKGlzU2ltcGxlU2V0dGVyKSB7IC8vIGRhdGEoJ2tleScsIHZhbHVlKVxyXG4gICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChtYXNzR2V0dGVyKSB7ICAvLyBkYXRhKClcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaXNTaW1wbGVHZXR0ZXIpIHsgLy8gZGF0YSgna2V5JylcclxuICAgICAgICAgIC8vIGRvbid0IGZvcmNlIGNyZWF0aW9uIG9mIGV4cGFuZG9TdG9yZSBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldFxyXG4gICAgICAgICAgcmV0dXJuIGRhdGEgJiYgZGF0YVtrZXldO1xyXG4gICAgICAgIH0gZWxzZSB7IC8vIG1hc3Mtc2V0dGVyOiBkYXRhKHtrZXkxOiB2YWwxLCBrZXkyOiB2YWwyfSlcclxuICAgICAgICAgIGV4dGVuZChkYXRhLCBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24ganFMaXRlSGFzQ2xhc3MoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICBpZiAoIWVsZW1lbnQuZ2V0QXR0cmlidXRlKSByZXR1cm4gZmFsc2U7XHJcbiAgcmV0dXJuICgoXCIgXCIgKyAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpICsgXCIgXCIpLnJlcGxhY2UoL1tcXG5cXHRdL2csIFwiIFwiKS5cclxuICAgICAgaW5kZXhPZihcIiBcIiArIHNlbGVjdG9yICsgXCIgXCIpID4gLTEpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBqcUxpdGVSZW1vdmVDbGFzcyhlbGVtZW50LCBjc3NDbGFzc2VzKSB7XHJcbiAgaWYgKGNzc0NsYXNzZXMgJiYgZWxlbWVudC5zZXRBdHRyaWJ1dGUpIHtcclxuICAgIGZvckVhY2goY3NzQ2xhc3Nlcy5zcGxpdCgnICcpLCBmdW5jdGlvbihjc3NDbGFzcykge1xyXG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCB0cmltKFxyXG4gICAgICAgICAgKFwiIFwiICsgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnKSArIFwiIFwiKVxyXG4gICAgICAgICAgLnJlcGxhY2UoL1tcXG5cXHRdL2csIFwiIFwiKVxyXG4gICAgICAgICAgLnJlcGxhY2UoXCIgXCIgKyB0cmltKGNzc0NsYXNzKSArIFwiIFwiLCBcIiBcIikpXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGpxTGl0ZUFkZENsYXNzKGVsZW1lbnQsIGNzc0NsYXNzZXMpIHtcclxuICBpZiAoY3NzQ2xhc3NlcyAmJiBlbGVtZW50LnNldEF0dHJpYnV0ZSkge1xyXG4gICAgdmFyIGV4aXN0aW5nQ2xhc3NlcyA9ICgnICcgKyAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpICsgJyAnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXG5cXHRdL2csIFwiIFwiKTtcclxuXHJcbiAgICBmb3JFYWNoKGNzc0NsYXNzZXMuc3BsaXQoJyAnKSwgZnVuY3Rpb24oY3NzQ2xhc3MpIHtcclxuICAgICAgY3NzQ2xhc3MgPSB0cmltKGNzc0NsYXNzKTtcclxuICAgICAgaWYgKGV4aXN0aW5nQ2xhc3Nlcy5pbmRleE9mKCcgJyArIGNzc0NsYXNzICsgJyAnKSA9PT0gLTEpIHtcclxuICAgICAgICBleGlzdGluZ0NsYXNzZXMgKz0gY3NzQ2xhc3MgKyAnICc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIHRyaW0oZXhpc3RpbmdDbGFzc2VzKSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24ganFMaXRlQWRkTm9kZXMocm9vdCwgZWxlbWVudHMpIHtcclxuICAvLyBUSElTIENPREUgSVMgVkVSWSBIT1QuIERvbid0IG1ha2UgY2hhbmdlcyB3aXRob3V0IGJlbmNobWFya2luZy5cclxuXHJcbiAgaWYgKGVsZW1lbnRzKSB7XHJcblxyXG4gICAgLy8gaWYgYSBOb2RlICh0aGUgbW9zdCBjb21tb24gY2FzZSlcclxuICAgIGlmIChlbGVtZW50cy5ub2RlVHlwZSkge1xyXG4gICAgICByb290W3Jvb3QubGVuZ3RoKytdID0gZWxlbWVudHM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xyXG5cclxuICAgICAgLy8gaWYgYW4gQXJyYXkgb3IgTm9kZUxpc3QgYW5kIG5vdCBhIFdpbmRvd1xyXG4gICAgICBpZiAodHlwZW9mIGxlbmd0aCA9PT0gJ251bWJlcicgJiYgZWxlbWVudHMud2luZG93ICE9PSBlbGVtZW50cykge1xyXG4gICAgICAgIGlmIChsZW5ndGgpIHtcclxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcm9vdFtyb290Lmxlbmd0aCsrXSA9IGVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByb290W3Jvb3QubGVuZ3RoKytdID0gZWxlbWVudHM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBqcUxpdGVDb250cm9sbGVyKGVsZW1lbnQsIG5hbWUpIHtcclxuICByZXR1cm4ganFMaXRlSW5oZXJpdGVkRGF0YShlbGVtZW50LCAnJCcgKyAobmFtZSB8fCAnbmdDb250cm9sbGVyJykgKyAnQ29udHJvbGxlcicpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBqcUxpdGVJbmhlcml0ZWREYXRhKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XHJcbiAgLy8gaWYgZWxlbWVudCBpcyB0aGUgZG9jdW1lbnQgb2JqZWN0IHdvcmsgd2l0aCB0aGUgaHRtbCBlbGVtZW50IGluc3RlYWRcclxuICAvLyB0aGlzIG1ha2VzICQoZG9jdW1lbnQpLnNjb3BlKCkgcG9zc2libGVcclxuICBpZiAoZWxlbWVudC5ub2RlVHlwZSA9PSBOT0RFX1RZUEVfRE9DVU1FTlQpIHtcclxuICAgIGVsZW1lbnQgPSBlbGVtZW50LmRvY3VtZW50RWxlbWVudDtcclxuICB9XHJcbiAgdmFyIG5hbWVzID0gaXNBcnJheShuYW1lKSA/IG5hbWUgOiBbbmFtZV07XHJcblxyXG4gIHdoaWxlIChlbGVtZW50KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBuYW1lcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XHJcbiAgICAgIGlmICgodmFsdWUgPSBqcUxpdGUuZGF0YShlbGVtZW50LCBuYW1lc1tpXSkpICE9PSB1bmRlZmluZWQpIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiBkZWFsaW5nIHdpdGggYSBkb2N1bWVudCBmcmFnbWVudCBub2RlIHdpdGggYSBob3N0IGVsZW1lbnQsIGFuZCBubyBwYXJlbnQsIHVzZSB0aGUgaG9zdFxyXG4gICAgLy8gZWxlbWVudCBhcyB0aGUgcGFyZW50LiBUaGlzIGVuYWJsZXMgZGlyZWN0aXZlcyB3aXRoaW4gYSBTaGFkb3cgRE9NIG9yIHBvbHlmaWxsZWQgU2hhZG93IERPTVxyXG4gICAgLy8gdG8gbG9va3VwIHBhcmVudCBjb250cm9sbGVycy5cclxuICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUgfHwgKGVsZW1lbnQubm9kZVR5cGUgPT09IE5PREVfVFlQRV9ET0NVTUVOVF9GUkFHTUVOVCAmJiBlbGVtZW50Lmhvc3QpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24ganFMaXRlRW1wdHkoZWxlbWVudCkge1xyXG4gIGpxTGl0ZURlYWxvYyhlbGVtZW50LCB0cnVlKTtcclxuICB3aGlsZSAoZWxlbWVudC5maXJzdENoaWxkKSB7XHJcbiAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuZmlyc3RDaGlsZCk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBqcUxpdGVSZW1vdmUoZWxlbWVudCwga2VlcERhdGEpIHtcclxuICBpZiAoIWtlZXBEYXRhKSBqcUxpdGVEZWFsb2MoZWxlbWVudCk7XHJcbiAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBqcUxpdGVEb2N1bWVudExvYWRlZChhY3Rpb24sIHdpbikge1xyXG4gIHdpbiA9IHdpbiB8fCB3aW5kb3c7XHJcbiAgaWYgKHdpbi5kb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7XHJcbiAgICAvLyBGb3JjZSB0aGUgYWN0aW9uIHRvIGJlIHJ1biBhc3luYyBmb3IgY29uc2lzdGVudCBiZWhhdmlvdXJcclxuICAgIC8vIGZyb20gdGhlIGFjdGlvbidzIHBvaW50IG9mIHZpZXdcclxuICAgIC8vIGkuZS4gaXQgd2lsbCBkZWZpbml0ZWx5IG5vdCBiZSBpbiBhICRhcHBseVxyXG4gICAgd2luLnNldFRpbWVvdXQoYWN0aW9uKTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gTm8gbmVlZCB0byB1bmJpbmQgdGhpcyBoYW5kbGVyIGFzIGxvYWQgaXMgb25seSBldmVyIGNhbGxlZCBvbmNlXHJcbiAgICBqcUxpdGUod2luKS5vbignbG9hZCcsIGFjdGlvbik7XHJcbiAgfVxyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gRnVuY3Rpb25zIHdoaWNoIGFyZSBkZWNsYXJlZCBkaXJlY3RseS5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbnZhciBKUUxpdGVQcm90b3R5cGUgPSBKUUxpdGUucHJvdG90eXBlID0ge1xyXG4gIHJlYWR5OiBmdW5jdGlvbihmbikge1xyXG4gICAgdmFyIGZpcmVkID0gZmFsc2U7XHJcblxyXG4gICAgZnVuY3Rpb24gdHJpZ2dlcigpIHtcclxuICAgICAgaWYgKGZpcmVkKSByZXR1cm47XHJcbiAgICAgIGZpcmVkID0gdHJ1ZTtcclxuICAgICAgZm4oKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjaGVjayBpZiBkb2N1bWVudCBpcyBhbHJlYWR5IGxvYWRlZFxyXG4gICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcclxuICAgICAgc2V0VGltZW91dCh0cmlnZ2VyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub24oJ0RPTUNvbnRlbnRMb2FkZWQnLCB0cmlnZ2VyKTsgLy8gd29ya3MgZm9yIG1vZGVybiBicm93c2VycyBhbmQgSUU5XHJcbiAgICAgIC8vIHdlIGNhbiBub3QgdXNlIGpxTGl0ZSBzaW5jZSB3ZSBhcmUgbm90IGRvbmUgbG9hZGluZyBhbmQgalF1ZXJ5IGNvdWxkIGJlIGxvYWRlZCBsYXRlci5cclxuICAgICAgLy8ganNoaW50IC1XMDY0XHJcbiAgICAgIEpRTGl0ZSh3aW5kb3cpLm9uKCdsb2FkJywgdHJpZ2dlcik7IC8vIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQgZm9yIG90aGVyc1xyXG4gICAgICAvLyBqc2hpbnQgK1cwNjRcclxuICAgIH1cclxuICB9LFxyXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgIHZhciB2YWx1ZSA9IFtdO1xyXG4gICAgZm9yRWFjaCh0aGlzLCBmdW5jdGlvbihlKSB7IHZhbHVlLnB1c2goJycgKyBlKTt9KTtcclxuICAgIHJldHVybiAnWycgKyB2YWx1ZS5qb2luKCcsICcpICsgJ10nO1xyXG4gIH0sXHJcblxyXG4gIGVxOiBmdW5jdGlvbihpbmRleCkge1xyXG4gICAgICByZXR1cm4gKGluZGV4ID49IDApID8ganFMaXRlKHRoaXNbaW5kZXhdKSA6IGpxTGl0ZSh0aGlzW3RoaXMubGVuZ3RoICsgaW5kZXhdKTtcclxuICB9LFxyXG5cclxuICBsZW5ndGg6IDAsXHJcbiAgcHVzaDogcHVzaCxcclxuICBzb3J0OiBbXS5zb3J0LFxyXG4gIHNwbGljZTogW10uc3BsaWNlXHJcbn07XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gRnVuY3Rpb25zIGl0ZXJhdGluZyBnZXR0ZXIvc2V0dGVycy5cclxuLy8gdGhlc2UgZnVuY3Rpb25zIHJldHVybiBzZWxmIG9uIHNldHRlciBhbmRcclxuLy8gdmFsdWUgb24gZ2V0LlxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxudmFyIEJPT0xFQU5fQVRUUiA9IHt9O1xyXG5mb3JFYWNoKCdtdWx0aXBsZSxzZWxlY3RlZCxjaGVja2VkLGRpc2FibGVkLHJlYWRPbmx5LHJlcXVpcmVkLG9wZW4nLnNwbGl0KCcsJyksIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgQk9PTEVBTl9BVFRSW2xvd2VyY2FzZSh2YWx1ZSldID0gdmFsdWU7XHJcbn0pO1xyXG52YXIgQk9PTEVBTl9FTEVNRU5UUyA9IHt9O1xyXG5mb3JFYWNoKCdpbnB1dCxzZWxlY3Qsb3B0aW9uLHRleHRhcmVhLGJ1dHRvbixmb3JtLGRldGFpbHMnLnNwbGl0KCcsJyksIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgQk9PTEVBTl9FTEVNRU5UU1t2YWx1ZV0gPSB0cnVlO1xyXG59KTtcclxudmFyIEFMSUFTRURfQVRUUiA9IHtcclxuICAnbmdNaW5sZW5ndGgnOiAnbWlubGVuZ3RoJyxcclxuICAnbmdNYXhsZW5ndGgnOiAnbWF4bGVuZ3RoJyxcclxuICAnbmdNaW4nOiAnbWluJyxcclxuICAnbmdNYXgnOiAnbWF4JyxcclxuICAnbmdQYXR0ZXJuJzogJ3BhdHRlcm4nXHJcbn07XHJcblxyXG5mdW5jdGlvbiBnZXRCb29sZWFuQXR0ck5hbWUoZWxlbWVudCwgbmFtZSkge1xyXG4gIC8vIGNoZWNrIGRvbSBsYXN0IHNpbmNlIHdlIHdpbGwgbW9zdCBsaWtlbHkgZmFpbCBvbiBuYW1lXHJcbiAgdmFyIGJvb2xlYW5BdHRyID0gQk9PTEVBTl9BVFRSW25hbWUudG9Mb3dlckNhc2UoKV07XHJcblxyXG4gIC8vIGJvb2xlYW5BdHRyIGlzIGhlcmUgdHdpY2UgdG8gbWluaW1pemUgRE9NIGFjY2Vzc1xyXG4gIHJldHVybiBib29sZWFuQXR0ciAmJiBCT09MRUFOX0VMRU1FTlRTW25vZGVOYW1lXyhlbGVtZW50KV0gJiYgYm9vbGVhbkF0dHI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEFsaWFzZWRBdHRyTmFtZShlbGVtZW50LCBuYW1lKSB7XHJcbiAgdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcclxuICByZXR1cm4gKG5vZGVOYW1lID09PSAnSU5QVVQnIHx8IG5vZGVOYW1lID09PSAnVEVYVEFSRUEnKSAmJiBBTElBU0VEX0FUVFJbbmFtZV07XHJcbn1cclxuXHJcbmZvckVhY2goe1xyXG4gIGRhdGE6IGpxTGl0ZURhdGEsXHJcbiAgcmVtb3ZlRGF0YToganFMaXRlUmVtb3ZlRGF0YVxyXG59LCBmdW5jdGlvbihmbiwgbmFtZSkge1xyXG4gIEpRTGl0ZVtuYW1lXSA9IGZuO1xyXG59KTtcclxuXHJcbmZvckVhY2goe1xyXG4gIGRhdGE6IGpxTGl0ZURhdGEsXHJcbiAgaW5oZXJpdGVkRGF0YToganFMaXRlSW5oZXJpdGVkRGF0YSxcclxuXHJcbiAgc2NvcGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIC8vIENhbid0IHVzZSBqcUxpdGVEYXRhIGhlcmUgZGlyZWN0bHkgc28gd2Ugc3RheSBjb21wYXRpYmxlIHdpdGggalF1ZXJ5IVxyXG4gICAgcmV0dXJuIGpxTGl0ZS5kYXRhKGVsZW1lbnQsICckc2NvcGUnKSB8fCBqcUxpdGVJbmhlcml0ZWREYXRhKGVsZW1lbnQucGFyZW50Tm9kZSB8fCBlbGVtZW50LCBbJyRpc29sYXRlU2NvcGUnLCAnJHNjb3BlJ10pO1xyXG4gIH0sXHJcblxyXG4gIGlzb2xhdGVTY29wZTogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgLy8gQ2FuJ3QgdXNlIGpxTGl0ZURhdGEgaGVyZSBkaXJlY3RseSBzbyB3ZSBzdGF5IGNvbXBhdGlibGUgd2l0aCBqUXVlcnkhXHJcbiAgICByZXR1cm4ganFMaXRlLmRhdGEoZWxlbWVudCwgJyRpc29sYXRlU2NvcGUnKSB8fCBqcUxpdGUuZGF0YShlbGVtZW50LCAnJGlzb2xhdGVTY29wZU5vVGVtcGxhdGUnKTtcclxuICB9LFxyXG5cclxuICBjb250cm9sbGVyOiBqcUxpdGVDb250cm9sbGVyLFxyXG5cclxuICBpbmplY3RvcjogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIGpxTGl0ZUluaGVyaXRlZERhdGEoZWxlbWVudCwgJyRpbmplY3RvcicpO1xyXG4gIH0sXHJcblxyXG4gIHJlbW92ZUF0dHI6IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUpIHtcclxuICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xyXG4gIH0sXHJcblxyXG4gIGhhc0NsYXNzOiBqcUxpdGVIYXNDbGFzcyxcclxuXHJcbiAgY3NzOiBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xyXG4gICAgbmFtZSA9IGNhbWVsQ2FzZShuYW1lKTtcclxuXHJcbiAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xyXG4gICAgICBlbGVtZW50LnN0eWxlW25hbWVdID0gdmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZWxlbWVudC5zdHlsZVtuYW1lXTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICBhdHRyOiBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xyXG4gICAgdmFyIGxvd2VyY2FzZWROYW1lID0gbG93ZXJjYXNlKG5hbWUpO1xyXG4gICAgaWYgKEJPT0xFQU5fQVRUUltsb3dlcmNhc2VkTmFtZV0pIHtcclxuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcclxuICAgICAgICBpZiAoISF2YWx1ZSkge1xyXG4gICAgICAgICAgZWxlbWVudFtuYW1lXSA9IHRydWU7XHJcbiAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCBsb3dlcmNhc2VkTmFtZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGVsZW1lbnRbbmFtZV0gPSBmYWxzZTtcclxuICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGxvd2VyY2FzZWROYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChlbGVtZW50W25hbWVdIHx8XHJcbiAgICAgICAgICAgICAgICAgKGVsZW1lbnQuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0obmFtZSkgfHwgbm9vcCkuc3BlY2lmaWVkKVxyXG4gICAgICAgICAgICAgICA/IGxvd2VyY2FzZWROYW1lXHJcbiAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcclxuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xyXG4gICAgfSBlbHNlIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSkge1xyXG4gICAgICAvLyB0aGUgZXh0cmEgYXJndW1lbnQgXCIyXCIgaXMgdG8gZ2V0IHRoZSByaWdodCB0aGluZyBmb3IgYS5ocmVmIGluIElFLCBzZWUgalF1ZXJ5IGNvZGVcclxuICAgICAgLy8gc29tZSBlbGVtZW50cyAoZS5nLiBEb2N1bWVudCkgZG9uJ3QgaGF2ZSBnZXQgYXR0cmlidXRlLCBzbyByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgIHZhciByZXQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lLCAyKTtcclxuICAgICAgLy8gbm9ybWFsaXplIG5vbi1leGlzdGluZyBhdHRyaWJ1dGVzIHRvIHVuZGVmaW5lZCAoYXMgalF1ZXJ5KVxyXG4gICAgICByZXR1cm4gcmV0ID09PSBudWxsID8gdW5kZWZpbmVkIDogcmV0O1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIHByb3A6IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XHJcbiAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xyXG4gICAgICBlbGVtZW50W25hbWVdID0gdmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZWxlbWVudFtuYW1lXTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICB0ZXh0OiAoZnVuY3Rpb24oKSB7XHJcbiAgICBnZXRUZXh0LiRkdiA9ICcnO1xyXG4gICAgcmV0dXJuIGdldFRleHQ7XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0VGV4dChlbGVtZW50LCB2YWx1ZSkge1xyXG4gICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSB7XHJcbiAgICAgICAgdmFyIG5vZGVUeXBlID0gZWxlbWVudC5ub2RlVHlwZTtcclxuICAgICAgICByZXR1cm4gKG5vZGVUeXBlID09PSBOT0RFX1RZUEVfRUxFTUVOVCB8fCBub2RlVHlwZSA9PT0gTk9ERV9UWVBFX1RFWFQpID8gZWxlbWVudC50ZXh0Q29udGVudCA6ICcnO1xyXG4gICAgICB9XHJcbiAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSB2YWx1ZTtcclxuICAgIH1cclxuICB9KSgpLFxyXG5cclxuICB2YWw6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7XHJcbiAgICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSB7XHJcbiAgICAgIGlmIChlbGVtZW50Lm11bHRpcGxlICYmIG5vZGVOYW1lXyhlbGVtZW50KSA9PT0gJ3NlbGVjdCcpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgZm9yRWFjaChlbGVtZW50Lm9wdGlvbnMsIGZ1bmN0aW9uKG9wdGlvbikge1xyXG4gICAgICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChvcHRpb24udmFsdWUgfHwgb3B0aW9uLnRleHQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAwID8gbnVsbCA6IHJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZWxlbWVudC52YWx1ZTtcclxuICAgIH1cclxuICAgIGVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcclxuICB9LFxyXG5cclxuICBodG1sOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSkge1xyXG4gICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gZWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICB9XHJcbiAgICBqcUxpdGVEZWFsb2MoZWxlbWVudCwgdHJ1ZSk7XHJcbiAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlO1xyXG4gIH0sXHJcblxyXG4gIGVtcHR5OiBqcUxpdGVFbXB0eVxyXG59LCBmdW5jdGlvbihmbiwgbmFtZSkge1xyXG4gIC8qKlxyXG4gICAqIFByb3BlcnRpZXM6IHdyaXRlcyByZXR1cm4gc2VsZWN0aW9uLCByZWFkcyByZXR1cm4gZmlyc3QgdmFsdWVcclxuICAgKi9cclxuICBKUUxpdGUucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oYXJnMSwgYXJnMikge1xyXG4gICAgdmFyIGksIGtleTtcclxuICAgIHZhciBub2RlQ291bnQgPSB0aGlzLmxlbmd0aDtcclxuXHJcbiAgICAvLyBqcUxpdGVIYXNDbGFzcyBoYXMgb25seSB0d28gYXJndW1lbnRzLCBidXQgaXMgYSBnZXR0ZXItb25seSBmbiwgc28gd2UgbmVlZCB0byBzcGVjaWFsLWNhc2UgaXRcclxuICAgIC8vIGluIGEgd2F5IHRoYXQgc3Vydml2ZXMgbWluaWZpY2F0aW9uLlxyXG4gICAgLy8ganFMaXRlRW1wdHkgdGFrZXMgbm8gYXJndW1lbnRzIGJ1dCBpcyBhIHNldHRlci5cclxuICAgIGlmIChmbiAhPT0ganFMaXRlRW1wdHkgJiZcclxuICAgICAgICAoKChmbi5sZW5ndGggPT0gMiAmJiAoZm4gIT09IGpxTGl0ZUhhc0NsYXNzICYmIGZuICE9PSBqcUxpdGVDb250cm9sbGVyKSkgPyBhcmcxIDogYXJnMikgPT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgaWYgKGlzT2JqZWN0KGFyZzEpKSB7XHJcblxyXG4gICAgICAgIC8vIHdlIGFyZSBhIHdyaXRlLCBidXQgdGhlIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSB0aGUga2V5L3ZhbHVlc1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBub2RlQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGZuID09PSBqcUxpdGVEYXRhKSB7XHJcbiAgICAgICAgICAgIC8vIGRhdGEoKSB0YWtlcyB0aGUgd2hvbGUgb2JqZWN0IGluIGpRdWVyeVxyXG4gICAgICAgICAgICBmbih0aGlzW2ldLCBhcmcxKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZzEpIHtcclxuICAgICAgICAgICAgICBmbih0aGlzW2ldLCBrZXksIGFyZzFba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmV0dXJuIHNlbGYgZm9yIGNoYWluaW5nXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gd2UgYXJlIGEgcmVhZCwgc28gcmVhZCB0aGUgZmlyc3QgY2hpbGQuXHJcbiAgICAgICAgLy8gVE9ETzogZG8gd2Ugc3RpbGwgbmVlZCB0aGlzP1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGZuLiRkdjtcclxuICAgICAgICAvLyBPbmx5IGlmIHdlIGhhdmUgJGR2IGRvIHdlIGl0ZXJhdGUgb3ZlciBhbGwsIG90aGVyd2lzZSBpdCBpcyBqdXN0IHRoZSBmaXJzdCBlbGVtZW50LlxyXG4gICAgICAgIHZhciBqaiA9ICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IE1hdGgubWluKG5vZGVDb3VudCwgMSkgOiBub2RlQ291bnQ7XHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBqajsgaisrKSB7XHJcbiAgICAgICAgICB2YXIgbm9kZVZhbHVlID0gZm4odGhpc1tqXSwgYXJnMSwgYXJnMik7XHJcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlID8gdmFsdWUgKyBub2RlVmFsdWUgOiBub2RlVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gd2UgYXJlIGEgd3JpdGUsIHNvIGFwcGx5IHRvIGFsbCBjaGlsZHJlblxyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbm9kZUNvdW50OyBpKyspIHtcclxuICAgICAgICBmbih0aGlzW2ldLCBhcmcxLCBhcmcyKTtcclxuICAgICAgfVxyXG4gICAgICAvLyByZXR1cm4gc2VsZiBmb3IgY2hhaW5pbmdcclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgfTtcclxufSk7XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVFdmVudEhhbmRsZXIoZWxlbWVudCwgZXZlbnRzKSB7XHJcbiAgdmFyIGV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50LCB0eXBlKSB7XHJcbiAgICAvLyBqUXVlcnkgc3BlY2lmaWMgYXBpXHJcbiAgICBldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBldmVudEZucyA9IGV2ZW50c1t0eXBlIHx8IGV2ZW50LnR5cGVdO1xyXG4gICAgdmFyIGV2ZW50Rm5zTGVuZ3RoID0gZXZlbnRGbnMgPyBldmVudEZucy5sZW5ndGggOiAwO1xyXG5cclxuICAgIGlmICghZXZlbnRGbnNMZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBpZiAoaXNVbmRlZmluZWQoZXZlbnQuaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKSkge1xyXG4gICAgICB2YXIgb3JpZ2luYWxTdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPSBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247XHJcbiAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGV2ZW50LmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcclxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9yaWdpbmFsU3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKSB7XHJcbiAgICAgICAgICBvcmlnaW5hbFN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbi5jYWxsKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIGV2ZW50LmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9PT0gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gQ29weSBldmVudCBoYW5kbGVycyBpbiBjYXNlIGV2ZW50IGhhbmRsZXJzIGFycmF5IGlzIG1vZGlmaWVkIGR1cmluZyBleGVjdXRpb24uXHJcbiAgICBpZiAoKGV2ZW50Rm5zTGVuZ3RoID4gMSkpIHtcclxuICAgICAgZXZlbnRGbnMgPSBzaGFsbG93Q29weShldmVudEZucyk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudEZuc0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICghZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xyXG4gICAgICAgIGV2ZW50Rm5zW2ldLmNhbGwoZWxlbWVudCwgZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2sgZm9yIGFuZ3VsYXJNb2Nrcy9jbGVhckRhdGFDYWNoZSB0aGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRlcmVnaXN0ZXIgYWxsXHJcbiAgLy8gICAgICAgZXZlbnRzIG9uIGBlbGVtZW50YFxyXG4gIGV2ZW50SGFuZGxlci5lbGVtID0gZWxlbWVudDtcclxuICByZXR1cm4gZXZlbnRIYW5kbGVyO1xyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gRnVuY3Rpb25zIGl0ZXJhdGluZyB0cmF2ZXJzYWwuXHJcbi8vIFRoZXNlIGZ1bmN0aW9ucyBjaGFpbiByZXN1bHRzIGludG8gYSBzaW5nbGVcclxuLy8gc2VsZWN0b3IuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5mb3JFYWNoKHtcclxuICByZW1vdmVEYXRhOiBqcUxpdGVSZW1vdmVEYXRhLFxyXG5cclxuICBvbjogZnVuY3Rpb24ganFMaXRlT24oZWxlbWVudCwgdHlwZSwgZm4sIHVuc3VwcG9ydGVkKSB7XHJcbiAgICBpZiAoaXNEZWZpbmVkKHVuc3VwcG9ydGVkKSkgdGhyb3cganFMaXRlTWluRXJyKCdvbmFyZ3MnLCAnanFMaXRlI29uKCkgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYHNlbGVjdG9yYCBvciBgZXZlbnREYXRhYCBwYXJhbWV0ZXJzJyk7XHJcblxyXG4gICAgLy8gRG8gbm90IGFkZCBldmVudCBoYW5kbGVycyB0byBub24tZWxlbWVudHMgYmVjYXVzZSB0aGV5IHdpbGwgbm90IGJlIGNsZWFuZWQgdXAuXHJcbiAgICBpZiAoIWpxTGl0ZUFjY2VwdHNEYXRhKGVsZW1lbnQpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZXhwYW5kb1N0b3JlID0ganFMaXRlRXhwYW5kb1N0b3JlKGVsZW1lbnQsIHRydWUpO1xyXG4gICAgdmFyIGV2ZW50cyA9IGV4cGFuZG9TdG9yZS5ldmVudHM7XHJcbiAgICB2YXIgaGFuZGxlID0gZXhwYW5kb1N0b3JlLmhhbmRsZTtcclxuXHJcbiAgICBpZiAoIWhhbmRsZSkge1xyXG4gICAgICBoYW5kbGUgPSBleHBhbmRvU3RvcmUuaGFuZGxlID0gY3JlYXRlRXZlbnRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaHR0cDovL2pzcGVyZi5jb20vc3RyaW5nLWluZGV4b2YtdnMtc3BsaXRcclxuICAgIHZhciB0eXBlcyA9IHR5cGUuaW5kZXhPZignICcpID49IDAgPyB0eXBlLnNwbGl0KCcgJykgOiBbdHlwZV07XHJcbiAgICB2YXIgaSA9IHR5cGVzLmxlbmd0aDtcclxuXHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgIHR5cGUgPSB0eXBlc1tpXTtcclxuICAgICAgdmFyIGV2ZW50Rm5zID0gZXZlbnRzW3R5cGVdO1xyXG5cclxuICAgICAgaWYgKCFldmVudEZucykge1xyXG4gICAgICAgIGV2ZW50c1t0eXBlXSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gJ21vdXNlZW50ZXInIHx8IHR5cGUgPT09ICdtb3VzZWxlYXZlJykge1xyXG4gICAgICAgICAgLy8gUmVmZXIgdG8galF1ZXJ5J3MgaW1wbGVtZW50YXRpb24gb2YgbW91c2VlbnRlciAmIG1vdXNlbGVhdmVcclxuICAgICAgICAgIC8vIFJlYWQgYWJvdXQgbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZTpcclxuICAgICAgICAgIC8vIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX21vdXNlLmh0bWwjbGluazhcclxuXHJcbiAgICAgICAgICBqcUxpdGVPbihlbGVtZW50LCBNT1VTRV9FVkVOVF9NQVBbdHlwZV0sIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLCByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldDtcclxuICAgICAgICAgICAgLy8gRm9yIG1vdXNlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LlxyXG4gICAgICAgICAgICAvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xyXG4gICAgICAgICAgICBpZiAoIXJlbGF0ZWQgfHwgKHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhdGFyZ2V0LmNvbnRhaW5zKHJlbGF0ZWQpKSkge1xyXG4gICAgICAgICAgICAgIGhhbmRsZShldmVudCwgdHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHR5cGUgIT09ICckZGVzdHJveScpIHtcclxuICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lckZuKGVsZW1lbnQsIHR5cGUsIGhhbmRsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV2ZW50Rm5zID0gZXZlbnRzW3R5cGVdO1xyXG4gICAgICB9XHJcbiAgICAgIGV2ZW50Rm5zLnB1c2goZm4pO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIG9mZjoganFMaXRlT2ZmLFxyXG5cclxuICBvbmU6IGZ1bmN0aW9uKGVsZW1lbnQsIHR5cGUsIGZuKSB7XHJcbiAgICBlbGVtZW50ID0ganFMaXRlKGVsZW1lbnQpO1xyXG5cclxuICAgIC8vYWRkIHRoZSBsaXN0ZW5lciB0d2ljZSBzbyB0aGF0IHdoZW4gaXQgaXMgY2FsbGVkXHJcbiAgICAvL3lvdSBjYW4gcmVtb3ZlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBhbmQgc3RpbGwgYmVcclxuICAgIC8vYWJsZSB0byBjYWxsIGVsZW1lbnQub2ZmKGV2LCBmbikgbm9ybWFsbHlcclxuICAgIGVsZW1lbnQub24odHlwZSwgZnVuY3Rpb24gb25GbigpIHtcclxuICAgICAgZWxlbWVudC5vZmYodHlwZSwgZm4pO1xyXG4gICAgICBlbGVtZW50Lm9mZih0eXBlLCBvbkZuKTtcclxuICAgIH0pO1xyXG4gICAgZWxlbWVudC5vbih0eXBlLCBmbik7XHJcbiAgfSxcclxuXHJcbiAgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKGVsZW1lbnQsIHJlcGxhY2VOb2RlKSB7XHJcbiAgICB2YXIgaW5kZXgsIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgIGpxTGl0ZURlYWxvYyhlbGVtZW50KTtcclxuICAgIGZvckVhY2gobmV3IEpRTGl0ZShyZXBsYWNlTm9kZSksIGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgaWYgKGluZGV4KSB7XHJcbiAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShub2RlLCBpbmRleC5uZXh0U2libGluZyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZChub2RlLCBlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICBpbmRleCA9IG5vZGU7XHJcbiAgICB9KTtcclxuICB9LFxyXG5cclxuICBjaGlsZHJlbjogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgdmFyIGNoaWxkcmVuID0gW107XHJcbiAgICBmb3JFYWNoKGVsZW1lbnQuY2hpbGROb2RlcywgZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICBpZiAoZWxlbWVudC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFX0VMRU1FTlQpXHJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChlbGVtZW50KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNoaWxkcmVuO1xyXG4gIH0sXHJcblxyXG4gIGNvbnRlbnRzOiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5jb250ZW50RG9jdW1lbnQgfHwgZWxlbWVudC5jaGlsZE5vZGVzIHx8IFtdO1xyXG4gIH0sXHJcblxyXG4gIGFwcGVuZDogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkge1xyXG4gICAgdmFyIG5vZGVUeXBlID0gZWxlbWVudC5ub2RlVHlwZTtcclxuICAgIGlmIChub2RlVHlwZSAhPT0gTk9ERV9UWVBFX0VMRU1FTlQgJiYgbm9kZVR5cGUgIT09IE5PREVfVFlQRV9ET0NVTUVOVF9GUkFHTUVOVCkgcmV0dXJuO1xyXG5cclxuICAgIG5vZGUgPSBuZXcgSlFMaXRlKG5vZGUpO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG5vZGUubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xyXG4gICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xyXG4gICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICBwcmVwZW5kOiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7XHJcbiAgICBpZiAoZWxlbWVudC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFX0VMRU1FTlQpIHtcclxuICAgICAgdmFyIGluZGV4ID0gZWxlbWVudC5maXJzdENoaWxkO1xyXG4gICAgICBmb3JFYWNoKG5ldyBKUUxpdGUobm9kZSksIGZ1bmN0aW9uKGNoaWxkKSB7XHJcbiAgICAgICAgZWxlbWVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIGluZGV4KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgd3JhcDogZnVuY3Rpb24oZWxlbWVudCwgd3JhcE5vZGUpIHtcclxuICAgIHdyYXBOb2RlID0ganFMaXRlKHdyYXBOb2RlKS5lcSgwKS5jbG9uZSgpWzBdO1xyXG4gICAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCh3cmFwTm9kZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICB3cmFwTm9kZS5hcHBlbmRDaGlsZChlbGVtZW50KTtcclxuICB9LFxyXG5cclxuICByZW1vdmU6IGpxTGl0ZVJlbW92ZSxcclxuXHJcbiAgZGV0YWNoOiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICBqcUxpdGVSZW1vdmUoZWxlbWVudCwgdHJ1ZSk7XHJcbiAgfSxcclxuXHJcbiAgYWZ0ZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld0VsZW1lbnQpIHtcclxuICAgIHZhciBpbmRleCA9IGVsZW1lbnQsIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgIG5ld0VsZW1lbnQgPSBuZXcgSlFMaXRlKG5ld0VsZW1lbnQpO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG5ld0VsZW1lbnQubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xyXG4gICAgICB2YXIgbm9kZSA9IG5ld0VsZW1lbnRbaV07XHJcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUobm9kZSwgaW5kZXgubmV4dFNpYmxpbmcpO1xyXG4gICAgICBpbmRleCA9IG5vZGU7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgYWRkQ2xhc3M6IGpxTGl0ZUFkZENsYXNzLFxyXG4gIHJlbW92ZUNsYXNzOiBqcUxpdGVSZW1vdmVDbGFzcyxcclxuXHJcbiAgdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKGVsZW1lbnQsIHNlbGVjdG9yLCBjb25kaXRpb24pIHtcclxuICAgIGlmIChzZWxlY3Rvcikge1xyXG4gICAgICBmb3JFYWNoKHNlbGVjdG9yLnNwbGl0KCcgJyksIGZ1bmN0aW9uKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIHZhciBjbGFzc0NvbmRpdGlvbiA9IGNvbmRpdGlvbjtcclxuICAgICAgICBpZiAoaXNVbmRlZmluZWQoY2xhc3NDb25kaXRpb24pKSB7XHJcbiAgICAgICAgICBjbGFzc0NvbmRpdGlvbiA9ICFqcUxpdGVIYXNDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAoY2xhc3NDb25kaXRpb24gPyBqcUxpdGVBZGRDbGFzcyA6IGpxTGl0ZVJlbW92ZUNsYXNzKShlbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICBwYXJlbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XHJcbiAgICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gTk9ERV9UWVBFX0RPQ1VNRU5UX0ZSQUdNRU5UID8gcGFyZW50IDogbnVsbDtcclxuICB9LFxyXG5cclxuICBuZXh0OiBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgfSxcclxuXHJcbiAgZmluZDogZnVuY3Rpb24oZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgIGlmIChlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKSB7XHJcbiAgICAgIHJldHVybiBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKHNlbGVjdG9yKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICBjbG9uZToganFMaXRlQ2xvbmUsXHJcblxyXG4gIHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbihlbGVtZW50LCBldmVudCwgZXh0cmFQYXJhbWV0ZXJzKSB7XHJcblxyXG4gICAgdmFyIGR1bW15RXZlbnQsIGV2ZW50Rm5zQ29weSwgaGFuZGxlckFyZ3M7XHJcbiAgICB2YXIgZXZlbnROYW1lID0gZXZlbnQudHlwZSB8fCBldmVudDtcclxuICAgIHZhciBleHBhbmRvU3RvcmUgPSBqcUxpdGVFeHBhbmRvU3RvcmUoZWxlbWVudCk7XHJcbiAgICB2YXIgZXZlbnRzID0gZXhwYW5kb1N0b3JlICYmIGV4cGFuZG9TdG9yZS5ldmVudHM7XHJcbiAgICB2YXIgZXZlbnRGbnMgPSBldmVudHMgJiYgZXZlbnRzW2V2ZW50TmFtZV07XHJcblxyXG4gICAgaWYgKGV2ZW50Rm5zKSB7XHJcbiAgICAgIC8vIENyZWF0ZSBhIGR1bW15IGV2ZW50IHRvIHBhc3MgdG8gdGhlIGhhbmRsZXJzXHJcbiAgICAgIGR1bW15RXZlbnQgPSB7XHJcbiAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9LFxyXG4gICAgICAgIGlzRGVmYXVsdFByZXZlbnRlZDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPT09IHRydWU7IH0sXHJcbiAgICAgICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsgdGhpcy5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlOyB9LFxyXG4gICAgICAgIGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID09PSB0cnVlOyB9LFxyXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbjogbm9vcCxcclxuICAgICAgICB0eXBlOiBldmVudE5hbWUsXHJcbiAgICAgICAgdGFyZ2V0OiBlbGVtZW50XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBJZiBhIGN1c3RvbSBldmVudCB3YXMgcHJvdmlkZWQgdGhlbiBleHRlbmQgb3VyIGR1bW15IGV2ZW50IHdpdGggaXRcclxuICAgICAgaWYgKGV2ZW50LnR5cGUpIHtcclxuICAgICAgICBkdW1teUV2ZW50ID0gZXh0ZW5kKGR1bW15RXZlbnQsIGV2ZW50KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ29weSBldmVudCBoYW5kbGVycyBpbiBjYXNlIGV2ZW50IGhhbmRsZXJzIGFycmF5IGlzIG1vZGlmaWVkIGR1cmluZyBleGVjdXRpb24uXHJcbiAgICAgIGV2ZW50Rm5zQ29weSA9IHNoYWxsb3dDb3B5KGV2ZW50Rm5zKTtcclxuICAgICAgaGFuZGxlckFyZ3MgPSBleHRyYVBhcmFtZXRlcnMgPyBbZHVtbXlFdmVudF0uY29uY2F0KGV4dHJhUGFyYW1ldGVycykgOiBbZHVtbXlFdmVudF07XHJcblxyXG4gICAgICBmb3JFYWNoKGV2ZW50Rm5zQ29weSwgZnVuY3Rpb24oZm4pIHtcclxuICAgICAgICBpZiAoIWR1bW15RXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xyXG4gICAgICAgICAgZm4uYXBwbHkoZWxlbWVudCwgaGFuZGxlckFyZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59LCBmdW5jdGlvbihmbiwgbmFtZSkge1xyXG4gIC8qKlxyXG4gICAqIGNoYWluaW5nIGZ1bmN0aW9uc1xyXG4gICAqL1xyXG4gIEpRTGl0ZS5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XHJcbiAgICB2YXIgdmFsdWU7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XHJcbiAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcclxuICAgICAgICB2YWx1ZSA9IGZuKHRoaXNbaV0sIGFyZzEsIGFyZzIsIGFyZzMpO1xyXG4gICAgICAgIGlmIChpc0RlZmluZWQodmFsdWUpKSB7XHJcbiAgICAgICAgICAvLyBhbnkgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhIHZhbHVlIG5lZWRzIHRvIGJlIHdyYXBwZWRcclxuICAgICAgICAgIHZhbHVlID0ganFMaXRlKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAganFMaXRlQWRkTm9kZXModmFsdWUsIGZuKHRoaXNbaV0sIGFyZzEsIGFyZzIsIGFyZzMpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzRGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHRoaXM7XHJcbiAgfTtcclxuXHJcbiAgLy8gYmluZCBsZWdhY3kgYmluZC91bmJpbmQgdG8gb24vb2ZmXHJcbiAgSlFMaXRlLnByb3RvdHlwZS5iaW5kID0gSlFMaXRlLnByb3RvdHlwZS5vbjtcclxuICBKUUxpdGUucHJvdG90eXBlLnVuYmluZCA9IEpRTGl0ZS5wcm90b3R5cGUub2ZmO1xyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBDb21wdXRlcyBhIGhhc2ggb2YgYW4gJ29iaicuXHJcbiAqIEhhc2ggb2YgYTpcclxuICogIHN0cmluZyBpcyBzdHJpbmdcclxuICogIG51bWJlciBpcyBudW1iZXIgYXMgc3RyaW5nXHJcbiAqICBvYmplY3QgaXMgZWl0aGVyIHJlc3VsdCBvZiBjYWxsaW5nICQkaGFzaEtleSBmdW5jdGlvbiBvbiB0aGUgb2JqZWN0IG9yIHVuaXF1ZWx5IGdlbmVyYXRlZCBpZCxcclxuICogICAgICAgICB0aGF0IGlzIGFsc28gYXNzaWduZWQgdG8gdGhlICQkaGFzaEtleSBwcm9wZXJ0eSBvZiB0aGUgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gb2JqXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGhhc2ggc3RyaW5nIHN1Y2ggdGhhdCB0aGUgc2FtZSBpbnB1dCB3aWxsIGhhdmUgdGhlIHNhbWUgaGFzaCBzdHJpbmcuXHJcbiAqICAgICAgICAgVGhlIHJlc3VsdGluZyBzdHJpbmcga2V5IGlzIGluICd0eXBlOmhhc2hLZXknIGZvcm1hdC5cclxuICovXHJcbmZ1bmN0aW9uIGhhc2hLZXkob2JqLCBuZXh0VWlkRm4pIHtcclxuICB2YXIga2V5ID0gb2JqICYmIG9iai4kJGhhc2hLZXk7XHJcblxyXG4gIGlmIChrZXkpIHtcclxuICAgIGlmICh0eXBlb2Yga2V5ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGtleSA9IG9iai4kJGhhc2hLZXkoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBrZXk7XHJcbiAgfVxyXG5cclxuICB2YXIgb2JqVHlwZSA9IHR5cGVvZiBvYmo7XHJcbiAgaWYgKG9ialR5cGUgPT0gJ2Z1bmN0aW9uJyB8fCAob2JqVHlwZSA9PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGwpKSB7XHJcbiAgICBrZXkgPSBvYmouJCRoYXNoS2V5ID0gb2JqVHlwZSArICc6JyArIChuZXh0VWlkRm4gfHwgbmV4dFVpZCkoKTtcclxuICB9IGVsc2Uge1xyXG4gICAga2V5ID0gb2JqVHlwZSArICc6JyArIG9iajtcclxuICB9XHJcblxyXG4gIHJldHVybiBrZXk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBIYXNoTWFwIHdoaWNoIGNhbiB1c2Ugb2JqZWN0cyBhcyBrZXlzXHJcbiAqL1xyXG5mdW5jdGlvbiBIYXNoTWFwKGFycmF5LCBpc29sYXRlZFVpZCkge1xyXG4gIGlmIChpc29sYXRlZFVpZCkge1xyXG4gICAgdmFyIHVpZCA9IDA7XHJcbiAgICB0aGlzLm5leHRVaWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuICsrdWlkO1xyXG4gICAgfTtcclxuICB9XHJcbiAgZm9yRWFjaChhcnJheSwgdGhpcy5wdXQsIHRoaXMpO1xyXG59XHJcbkhhc2hNYXAucHJvdG90eXBlID0ge1xyXG4gIC8qKlxyXG4gICAqIFN0b3JlIGtleSB2YWx1ZSBwYWlyXHJcbiAgICogQHBhcmFtIGtleSBrZXkgdG8gc3RvcmUgY2FuIGJlIGFueSB0eXBlXHJcbiAgICogQHBhcmFtIHZhbHVlIHZhbHVlIHRvIHN0b3JlIGNhbiBiZSBhbnkgdHlwZVxyXG4gICAqL1xyXG4gIHB1dDogZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xyXG4gICAgdGhpc1toYXNoS2V5KGtleSwgdGhpcy5uZXh0VWlkKV0gPSB2YWx1ZTtcclxuICB9LFxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0ga2V5XHJcbiAgICogQHJldHVybnMge09iamVjdH0gdGhlIHZhbHVlIGZvciB0aGUga2V5XHJcbiAgICovXHJcbiAgZ2V0OiBmdW5jdGlvbihrZXkpIHtcclxuICAgIHJldHVybiB0aGlzW2hhc2hLZXkoa2V5LCB0aGlzLm5leHRVaWQpXTtcclxuICB9LFxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgdGhlIGtleS92YWx1ZSBwYWlyXHJcbiAgICogQHBhcmFtIGtleVxyXG4gICAqL1xyXG4gIHJlbW92ZTogZnVuY3Rpb24oa2V5KSB7XHJcbiAgICB2YXIgdmFsdWUgPSB0aGlzW2tleSA9IGhhc2hLZXkoa2V5LCB0aGlzLm5leHRVaWQpXTtcclxuICAgIGRlbGV0ZSB0aGlzW2tleV07XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBmdW5jdGlvblxyXG4gKiBAbW9kdWxlIG5nXHJcbiAqIEBuYW1lIGFuZ3VsYXIuaW5qZWN0b3JcclxuICogQGtpbmQgZnVuY3Rpb25cclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIENyZWF0ZXMgYW4gaW5qZWN0b3Igb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgZm9yIHJldHJpZXZpbmcgc2VydmljZXMgYXMgd2VsbCBhcyBmb3JcclxuICogZGVwZW5kZW5jeSBpbmplY3Rpb24gKHNlZSB7QGxpbmsgZ3VpZGUvZGkgZGVwZW5kZW5jeSBpbmplY3Rpb259KS5cclxuICpcclxuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZ3xGdW5jdGlvbj59IG1vZHVsZXMgQSBsaXN0IG9mIG1vZHVsZSBmdW5jdGlvbnMgb3IgdGhlaXIgYWxpYXNlcy4gU2VlXHJcbiAqICAgICAgICB7QGxpbmsgYW5ndWxhci5tb2R1bGV9LiBUaGUgYG5nYCBtb2R1bGUgbXVzdCBiZSBleHBsaWNpdGx5IGFkZGVkLlxyXG4gKiBAcmV0dXJucyB7aW5qZWN0b3J9IEluamVjdG9yIG9iamVjdC4gU2VlIHtAbGluayBhdXRvLiRpbmplY3RvciAkaW5qZWN0b3J9LlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBUeXBpY2FsIHVzYWdlXHJcbiAqIGBgYGpzXHJcbiAqICAgLy8gY3JlYXRlIGFuIGluamVjdG9yXHJcbiAqICAgdmFyICRpbmplY3RvciA9IGFuZ3VsYXIuaW5qZWN0b3IoWyduZyddKTtcclxuICpcclxuICogICAvLyB1c2UgdGhlIGluamVjdG9yIHRvIGtpY2sgb2ZmIHlvdXIgYXBwbGljYXRpb25cclxuICogICAvLyB1c2UgdGhlIHR5cGUgaW5mZXJlbmNlIHRvIGF1dG8gaW5qZWN0IGFyZ3VtZW50cywgb3IgdXNlIGltcGxpY2l0IGluamVjdGlvblxyXG4gKiAgICRpbmplY3Rvci5pbnZva2UoZnVuY3Rpb24oJHJvb3RTY29wZSwgJGNvbXBpbGUsICRkb2N1bWVudCkge1xyXG4gKiAgICAgJGNvbXBpbGUoJGRvY3VtZW50KSgkcm9vdFNjb3BlKTtcclxuICogICAgICRyb290U2NvcGUuJGRpZ2VzdCgpO1xyXG4gKiAgIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogU29tZXRpbWVzIHlvdSB3YW50IHRvIGdldCBhY2Nlc3MgdG8gdGhlIGluamVjdG9yIG9mIGEgY3VycmVudGx5IHJ1bm5pbmcgQW5ndWxhciBhcHBcclxuICogZnJvbSBvdXRzaWRlIEFuZ3VsYXIuIFBlcmhhcHMsIHlvdSB3YW50IHRvIGluamVjdCBhbmQgY29tcGlsZSBzb21lIG1hcmt1cCBhZnRlciB0aGVcclxuICogYXBwbGljYXRpb24gaGFzIGJlZW4gYm9vdHN0cmFwcGVkLiBZb3UgY2FuIGRvIHRoaXMgdXNpbmcgdGhlIGV4dHJhIGBpbmplY3RvcigpYCBhZGRlZFxyXG4gKiB0byBKUXVlcnkvanFMaXRlIGVsZW1lbnRzLiBTZWUge0BsaW5rIGFuZ3VsYXIuZWxlbWVudH0uXHJcbiAqXHJcbiAqICpUaGlzIGlzIGZhaXJseSByYXJlIGJ1dCBjb3VsZCBiZSB0aGUgY2FzZSBpZiBhIHRoaXJkIHBhcnR5IGxpYnJhcnkgaXMgaW5qZWN0aW5nIHRoZVxyXG4gKiBtYXJrdXAuKlxyXG4gKlxyXG4gKiBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgYSBuZXcgYmxvY2sgb2YgSFRNTCBjb250YWluaW5nIGEgYG5nLWNvbnRyb2xsZXJgXHJcbiAqIGRpcmVjdGl2ZSBpcyBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudCBib2R5IGJ5IEpRdWVyeS4gV2UgdGhlbiBjb21waWxlIGFuZCBsaW5rXHJcbiAqIGl0IGludG8gdGhlIGN1cnJlbnQgQW5ndWxhckpTIHNjb3BlLlxyXG4gKlxyXG4gKiBgYGBqc1xyXG4gKiB2YXIgJGRpdiA9ICQoJzxkaXYgbmctY29udHJvbGxlcj1cIk15Q3RybFwiPnt7Y29udGVudC5sYWJlbH19PC9kaXY+Jyk7XHJcbiAqICQoZG9jdW1lbnQuYm9keSkuYXBwZW5kKCRkaXYpO1xyXG4gKlxyXG4gKiBhbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQpLmluamVjdG9yKCkuaW52b2tlKGZ1bmN0aW9uKCRjb21waWxlKSB7XHJcbiAqICAgdmFyIHNjb3BlID0gYW5ndWxhci5lbGVtZW50KCRkaXYpLnNjb3BlKCk7XHJcbiAqICAgJGNvbXBpbGUoJGRpdikoc2NvcGUpO1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqL1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgbW9kdWxlXHJcbiAqIEBuYW1lIGF1dG9cclxuICogQGRlc2NyaXB0aW9uXHJcbiAqXHJcbiAqIEltcGxpY2l0IG1vZHVsZSB3aGljaCBnZXRzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gZWFjaCB7QGxpbmsgYXV0by4kaW5qZWN0b3IgJGluamVjdG9yfS5cclxuICovXHJcblxyXG52YXIgRk5fQVJHUyA9IC9eZnVuY3Rpb25cXHMqW15cXChdKlxcKFxccyooW15cXCldKilcXCkvbTtcclxudmFyIEZOX0FSR19TUExJVCA9IC8sLztcclxudmFyIEZOX0FSRyA9IC9eXFxzKihfPykoXFxTKz8pXFwxXFxzKiQvO1xyXG52YXIgU1RSSVBfQ09NTUVOVFMgPSAvKChcXC9cXC8uKiQpfChcXC9cXCpbXFxzXFxTXSo/XFwqXFwvKSkvbWc7XHJcbnZhciAkaW5qZWN0b3JNaW5FcnIgPSBtaW5FcnIoJyRpbmplY3RvcicpO1xyXG5cclxuZnVuY3Rpb24gYW5vbkZuKGZuKSB7XHJcbiAgLy8gRm9yIGFub255bW91cyBmdW5jdGlvbnMsIHNob3dpbmcgYXQgdGhlIHZlcnkgbGVhc3QgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBjYW4gaGVscCBpblxyXG4gIC8vIGRlYnVnZ2luZy5cclxuICB2YXIgZm5UZXh0ID0gZm4udG9TdHJpbmcoKS5yZXBsYWNlKFNUUklQX0NPTU1FTlRTLCAnJyksXHJcbiAgICAgIGFyZ3MgPSBmblRleHQubWF0Y2goRk5fQVJHUyk7XHJcbiAgaWYgKGFyZ3MpIHtcclxuICAgIHJldHVybiAnZnVuY3Rpb24oJyArIChhcmdzWzFdIHx8ICcnKS5yZXBsYWNlKC9bXFxzXFxyXFxuXSsvLCAnICcpICsgJyknO1xyXG4gIH1cclxuICByZXR1cm4gJ2ZuJztcclxufVxyXG5cclxuZnVuY3Rpb24gYW5ub3RhdGUoZm4sIHN0cmljdERpLCBuYW1lKSB7XHJcbiAgdmFyICRpbmplY3QsXHJcbiAgICAgIGZuVGV4dCxcclxuICAgICAgYXJnRGVjbCxcclxuICAgICAgbGFzdDtcclxuXHJcbiAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgaWYgKCEoJGluamVjdCA9IGZuLiRpbmplY3QpKSB7XHJcbiAgICAgICRpbmplY3QgPSBbXTtcclxuICAgICAgaWYgKGZuLmxlbmd0aCkge1xyXG4gICAgICAgIGlmIChzdHJpY3REaSkge1xyXG4gICAgICAgICAgaWYgKCFpc1N0cmluZyhuYW1lKSB8fCAhbmFtZSkge1xyXG4gICAgICAgICAgICBuYW1lID0gZm4ubmFtZSB8fCBhbm9uRm4oZm4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhyb3cgJGluamVjdG9yTWluRXJyKCdzdHJpY3RkaScsXHJcbiAgICAgICAgICAgICd7MH0gaXMgbm90IHVzaW5nIGV4cGxpY2l0IGFubm90YXRpb24gYW5kIGNhbm5vdCBiZSBpbnZva2VkIGluIHN0cmljdCBtb2RlJywgbmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuVGV4dCA9IGZuLnRvU3RyaW5nKCkucmVwbGFjZShTVFJJUF9DT01NRU5UUywgJycpO1xyXG4gICAgICAgIGFyZ0RlY2wgPSBmblRleHQubWF0Y2goRk5fQVJHUyk7XHJcbiAgICAgICAgZm9yRWFjaChhcmdEZWNsWzFdLnNwbGl0KEZOX0FSR19TUExJVCksIGZ1bmN0aW9uKGFyZykge1xyXG4gICAgICAgICAgYXJnLnJlcGxhY2UoRk5fQVJHLCBmdW5jdGlvbihhbGwsIHVuZGVyc2NvcmUsIG5hbWUpIHtcclxuICAgICAgICAgICAgJGluamVjdC5wdXNoKG5hbWUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZm4uJGluamVjdCA9ICRpbmplY3Q7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChpc0FycmF5KGZuKSkge1xyXG4gICAgbGFzdCA9IGZuLmxlbmd0aCAtIDE7XHJcbiAgICBhc3NlcnRBcmdGbihmbltsYXN0XSwgJ2ZuJyk7XHJcbiAgICAkaW5qZWN0ID0gZm4uc2xpY2UoMCwgbGFzdCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGFzc2VydEFyZ0ZuKGZuLCAnZm4nLCB0cnVlKTtcclxuICB9XHJcbiAgcmV0dXJuICRpbmplY3Q7XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBzZXJ2aWNlXHJcbiAqIEBuYW1lICRpbmplY3RvclxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogYCRpbmplY3RvcmAgaXMgdXNlZCB0byByZXRyaWV2ZSBvYmplY3QgaW5zdGFuY2VzIGFzIGRlZmluZWQgYnlcclxuICoge0BsaW5rIGF1dG8uJHByb3ZpZGUgcHJvdmlkZXJ9LCBpbnN0YW50aWF0ZSB0eXBlcywgaW52b2tlIG1ldGhvZHMsXHJcbiAqIGFuZCBsb2FkIG1vZHVsZXMuXHJcbiAqXHJcbiAqIFRoZSBmb2xsb3dpbmcgYWx3YXlzIGhvbGRzIHRydWU6XHJcbiAqXHJcbiAqIGBgYGpzXHJcbiAqICAgdmFyICRpbmplY3RvciA9IGFuZ3VsYXIuaW5qZWN0b3IoKTtcclxuICogICBleHBlY3QoJGluamVjdG9yLmdldCgnJGluamVjdG9yJykpLnRvQmUoJGluamVjdG9yKTtcclxuICogICBleHBlY3QoJGluamVjdG9yLmludm9rZShmdW5jdGlvbigkaW5qZWN0b3IpIHtcclxuICogICAgIHJldHVybiAkaW5qZWN0b3I7XHJcbiAqICAgfSkpLnRvQmUoJGluamVjdG9yKTtcclxuICogYGBgXHJcbiAqXHJcbiAqICMgSW5qZWN0aW9uIEZ1bmN0aW9uIEFubm90YXRpb25cclxuICpcclxuICogSmF2YVNjcmlwdCBkb2VzIG5vdCBoYXZlIGFubm90YXRpb25zLCBhbmQgYW5ub3RhdGlvbnMgYXJlIG5lZWRlZCBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24uIFRoZVxyXG4gKiBmb2xsb3dpbmcgYXJlIGFsbCB2YWxpZCB3YXlzIG9mIGFubm90YXRpbmcgZnVuY3Rpb24gd2l0aCBpbmplY3Rpb24gYXJndW1lbnRzIGFuZCBhcmUgZXF1aXZhbGVudC5cclxuICpcclxuICogYGBganNcclxuICogICAvLyBpbmZlcnJlZCAob25seSB3b3JrcyBpZiBjb2RlIG5vdCBtaW5pZmllZC9vYmZ1c2NhdGVkKVxyXG4gKiAgICRpbmplY3Rvci5pbnZva2UoZnVuY3Rpb24oc2VydmljZUEpe30pO1xyXG4gKlxyXG4gKiAgIC8vIGFubm90YXRlZFxyXG4gKiAgIGZ1bmN0aW9uIGV4cGxpY2l0KHNlcnZpY2VBKSB7fTtcclxuICogICBleHBsaWNpdC4kaW5qZWN0ID0gWydzZXJ2aWNlQSddO1xyXG4gKiAgICRpbmplY3Rvci5pbnZva2UoZXhwbGljaXQpO1xyXG4gKlxyXG4gKiAgIC8vIGlubGluZVxyXG4gKiAgICRpbmplY3Rvci5pbnZva2UoWydzZXJ2aWNlQScsIGZ1bmN0aW9uKHNlcnZpY2VBKXt9XSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiAjIyBJbmZlcmVuY2VcclxuICpcclxuICogSW4gSmF2YVNjcmlwdCBjYWxsaW5nIGB0b1N0cmluZygpYCBvbiBhIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uIFRoZSBkZWZpbml0aW9uXHJcbiAqIGNhbiB0aGVuIGJlIHBhcnNlZCBhbmQgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBjYW4gYmUgZXh0cmFjdGVkLiAqTk9URToqIFRoaXMgZG9lcyBub3Qgd29yayB3aXRoXHJcbiAqIG1pbmlmaWNhdGlvbiwgYW5kIG9iZnVzY2F0aW9uIHRvb2xzIHNpbmNlIHRoZXNlIHRvb2xzIGNoYW5nZSB0aGUgYXJndW1lbnQgbmFtZXMuXHJcbiAqXHJcbiAqICMjIGAkaW5qZWN0YCBBbm5vdGF0aW9uXHJcbiAqIEJ5IGFkZGluZyBhbiBgJGluamVjdGAgcHJvcGVydHkgb250byBhIGZ1bmN0aW9uIHRoZSBpbmplY3Rpb24gcGFyYW1ldGVycyBjYW4gYmUgc3BlY2lmaWVkLlxyXG4gKlxyXG4gKiAjIyBJbmxpbmVcclxuICogQXMgYW4gYXJyYXkgb2YgaW5qZWN0aW9uIG5hbWVzLCB3aGVyZSB0aGUgbGFzdCBpdGVtIGluIHRoZSBhcnJheSBpcyB0aGUgZnVuY3Rpb24gdG8gY2FsbC5cclxuICovXHJcblxyXG4vKipcclxuICogQG5nZG9jIG1ldGhvZFxyXG4gKiBAbmFtZSAkaW5qZWN0b3IjZ2V0XHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBSZXR1cm4gYW4gaW5zdGFuY2Ugb2YgdGhlIHNlcnZpY2UuXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBpbnN0YW5jZSB0byByZXRyaWV2ZS5cclxuICogQHJldHVybiB7Kn0gVGhlIGluc3RhbmNlLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgbWV0aG9kXHJcbiAqIEBuYW1lICRpbmplY3RvciNpbnZva2VcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEludm9rZSB0aGUgbWV0aG9kIGFuZCBzdXBwbHkgdGhlIG1ldGhvZCBhcmd1bWVudHMgZnJvbSB0aGUgYCRpbmplY3RvcmAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7IUZ1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLiBGdW5jdGlvbiBwYXJhbWV0ZXJzIGFyZSBpbmplY3RlZCBhY2NvcmRpbmcgdG8gdGhlXHJcbiAqICAge0BsaW5rIGd1aWRlL2RpICRpbmplY3QgQW5ub3RhdGlvbn0gcnVsZXMuXHJcbiAqIEBwYXJhbSB7T2JqZWN0PX0gc2VsZiBUaGUgYHRoaXNgIGZvciB0aGUgaW52b2tlZCBtZXRob2QuXHJcbiAqIEBwYXJhbSB7T2JqZWN0PX0gbG9jYWxzIE9wdGlvbmFsIG9iamVjdC4gSWYgcHJlc2V0IHRoZW4gYW55IGFyZ3VtZW50IG5hbWVzIGFyZSByZWFkIGZyb20gdGhpc1xyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgZmlyc3QsIGJlZm9yZSB0aGUgYCRpbmplY3RvcmAgaXMgY29uc3VsdGVkLlxyXG4gKiBAcmV0dXJucyB7Kn0gdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBpbnZva2VkIGBmbmAgZnVuY3Rpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBtZXRob2RcclxuICogQG5hbWUgJGluamVjdG9yI2hhc1xyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQWxsb3dzIHRoZSB1c2VyIHRvIHF1ZXJ5IGlmIHRoZSBwYXJ0aWN1bGFyIHNlcnZpY2UgZXhpc3RzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBzZXJ2aWNlIHRvIHF1ZXJ5LlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGluamVjdG9yIGhhcyBnaXZlbiBzZXJ2aWNlLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgbWV0aG9kXHJcbiAqIEBuYW1lICRpbmplY3RvciNpbnN0YW50aWF0ZVxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEpTIHR5cGUuIFRoZSBtZXRob2QgdGFrZXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiwgaW52b2tlcyB0aGUgbmV3XHJcbiAqIG9wZXJhdG9yLCBhbmQgc3VwcGxpZXMgYWxsIG9mIHRoZSBhcmd1bWVudHMgdG8gdGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGFzIHNwZWNpZmllZCBieSB0aGVcclxuICogY29uc3RydWN0b3IgYW5ub3RhdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gVHlwZSBBbm5vdGF0ZWQgY29uc3RydWN0b3IgZnVuY3Rpb24uXHJcbiAqIEBwYXJhbSB7T2JqZWN0PX0gbG9jYWxzIE9wdGlvbmFsIG9iamVjdC4gSWYgcHJlc2V0IHRoZW4gYW55IGFyZ3VtZW50IG5hbWVzIGFyZSByZWFkIGZyb20gdGhpc1xyXG4gKiBvYmplY3QgZmlyc3QsIGJlZm9yZSB0aGUgYCRpbmplY3RvcmAgaXMgY29uc3VsdGVkLlxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXcgaW5zdGFuY2Ugb2YgYFR5cGVgLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgbWV0aG9kXHJcbiAqIEBuYW1lICRpbmplY3RvciNhbm5vdGF0ZVxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogUmV0dXJucyBhbiBhcnJheSBvZiBzZXJ2aWNlIG5hbWVzIHdoaWNoIHRoZSBmdW5jdGlvbiBpcyByZXF1ZXN0aW5nIGZvciBpbmplY3Rpb24uIFRoaXMgQVBJIGlzXHJcbiAqIHVzZWQgYnkgdGhlIGluamVjdG9yIHRvIGRldGVybWluZSB3aGljaCBzZXJ2aWNlcyBuZWVkIHRvIGJlIGluamVjdGVkIGludG8gdGhlIGZ1bmN0aW9uIHdoZW4gdGhlXHJcbiAqIGZ1bmN0aW9uIGlzIGludm9rZWQuIFRoZXJlIGFyZSB0aHJlZSB3YXlzIGluIHdoaWNoIHRoZSBmdW5jdGlvbiBjYW4gYmUgYW5ub3RhdGVkIHdpdGggdGhlIG5lZWRlZFxyXG4gKiBkZXBlbmRlbmNpZXMuXHJcbiAqXHJcbiAqICMgQXJndW1lbnQgbmFtZXNcclxuICpcclxuICogVGhlIHNpbXBsZXN0IGZvcm0gaXMgdG8gZXh0cmFjdCB0aGUgZGVwZW5kZW5jaWVzIGZyb20gdGhlIGFyZ3VtZW50cyBvZiB0aGUgZnVuY3Rpb24uIFRoaXMgaXMgZG9uZVxyXG4gKiBieSBjb252ZXJ0aW5nIHRoZSBmdW5jdGlvbiBpbnRvIGEgc3RyaW5nIHVzaW5nIGB0b1N0cmluZygpYCBtZXRob2QgYW5kIGV4dHJhY3RpbmcgdGhlIGFyZ3VtZW50XHJcbiAqIG5hbWVzLlxyXG4gKiBgYGBqc1xyXG4gKiAgIC8vIEdpdmVuXHJcbiAqICAgZnVuY3Rpb24gTXlDb250cm9sbGVyKCRzY29wZSwgJHJvdXRlKSB7XHJcbiAqICAgICAvLyAuLi5cclxuICogICB9XHJcbiAqXHJcbiAqICAgLy8gVGhlblxyXG4gKiAgIGV4cGVjdChpbmplY3Rvci5hbm5vdGF0ZShNeUNvbnRyb2xsZXIpKS50b0VxdWFsKFsnJHNjb3BlJywgJyRyb3V0ZSddKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHdvcmsgd2l0aCBjb2RlIG1pbmlmaWNhdGlvbiAvIG9iZnVzY2F0aW9uLiBGb3IgdGhpcyByZWFzb24gdGhlIGZvbGxvd2luZ1xyXG4gKiBhbm5vdGF0aW9uIHN0cmF0ZWdpZXMgYXJlIHN1cHBvcnRlZC5cclxuICpcclxuICogIyBUaGUgYCRpbmplY3RgIHByb3BlcnR5XHJcbiAqXHJcbiAqIElmIGEgZnVuY3Rpb24gaGFzIGFuIGAkaW5qZWN0YCBwcm9wZXJ0eSBhbmQgaXRzIHZhbHVlIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MsIHRoZW4gdGhlIHN0cmluZ3NcclxuICogcmVwcmVzZW50IG5hbWVzIG9mIHNlcnZpY2VzIHRvIGJlIGluamVjdGVkIGludG8gdGhlIGZ1bmN0aW9uLlxyXG4gKiBgYGBqc1xyXG4gKiAgIC8vIEdpdmVuXHJcbiAqICAgdmFyIE15Q29udHJvbGxlciA9IGZ1bmN0aW9uKG9iZnVzY2F0ZWRTY29wZSwgb2JmdXNjYXRlZFJvdXRlKSB7XHJcbiAqICAgICAvLyAuLi5cclxuICogICB9XHJcbiAqICAgLy8gRGVmaW5lIGZ1bmN0aW9uIGRlcGVuZGVuY2llc1xyXG4gKiAgIE15Q29udHJvbGxlclsnJGluamVjdCddID0gWyckc2NvcGUnLCAnJHJvdXRlJ107XHJcbiAqXHJcbiAqICAgLy8gVGhlblxyXG4gKiAgIGV4cGVjdChpbmplY3Rvci5hbm5vdGF0ZShNeUNvbnRyb2xsZXIpKS50b0VxdWFsKFsnJHNjb3BlJywgJyRyb3V0ZSddKTtcclxuICogYGBgXHJcbiAqXHJcbiAqICMgVGhlIGFycmF5IG5vdGF0aW9uXHJcbiAqXHJcbiAqIEl0IGlzIG9mdGVuIGRlc2lyYWJsZSB0byBpbmxpbmUgSW5qZWN0ZWQgZnVuY3Rpb25zIGFuZCB0aGF0J3Mgd2hlbiBzZXR0aW5nIHRoZSBgJGluamVjdGAgcHJvcGVydHlcclxuICogaXMgdmVyeSBpbmNvbnZlbmllbnQuIEluIHRoZXNlIHNpdHVhdGlvbnMgdXNpbmcgdGhlIGFycmF5IG5vdGF0aW9uIHRvIHNwZWNpZnkgdGhlIGRlcGVuZGVuY2llcyBpblxyXG4gKiBhIHdheSB0aGF0IHN1cnZpdmVzIG1pbmlmaWNhdGlvbiBpcyBhIGJldHRlciBjaG9pY2U6XHJcbiAqXHJcbiAqIGBgYGpzXHJcbiAqICAgLy8gV2Ugd2lzaCB0byB3cml0ZSB0aGlzIChub3QgbWluaWZpY2F0aW9uIC8gb2JmdXNjYXRpb24gc2FmZSlcclxuICogICBpbmplY3Rvci5pbnZva2UoZnVuY3Rpb24oJGNvbXBpbGUsICRyb290U2NvcGUpIHtcclxuICogICAgIC8vIC4uLlxyXG4gKiAgIH0pO1xyXG4gKlxyXG4gKiAgIC8vIFdlIGFyZSBmb3JjZWQgdG8gd3JpdGUgYnJlYWsgaW5saW5pbmdcclxuICogICB2YXIgdG1wRm4gPSBmdW5jdGlvbihvYmZ1c2NhdGVkQ29tcGlsZSwgb2JmdXNjYXRlZFJvb3RTY29wZSkge1xyXG4gKiAgICAgLy8gLi4uXHJcbiAqICAgfTtcclxuICogICB0bXBGbi4kaW5qZWN0ID0gWyckY29tcGlsZScsICckcm9vdFNjb3BlJ107XHJcbiAqICAgaW5qZWN0b3IuaW52b2tlKHRtcEZuKTtcclxuICpcclxuICogICAvLyBUbyBiZXR0ZXIgc3VwcG9ydCBpbmxpbmUgZnVuY3Rpb24gdGhlIGlubGluZSBhbm5vdGF0aW9uIGlzIHN1cHBvcnRlZFxyXG4gKiAgIGluamVjdG9yLmludm9rZShbJyRjb21waWxlJywgJyRyb290U2NvcGUnLCBmdW5jdGlvbihvYmZDb21waWxlLCBvYmZSb290U2NvcGUpIHtcclxuICogICAgIC8vIC4uLlxyXG4gKiAgIH1dKTtcclxuICpcclxuICogICAvLyBUaGVyZWZvcmVcclxuICogICBleHBlY3QoaW5qZWN0b3IuYW5ub3RhdGUoXHJcbiAqICAgICAgWyckY29tcGlsZScsICckcm9vdFNjb3BlJywgZnVuY3Rpb24ob2JmdXNfJGNvbXBpbGUsIG9iZnVzXyRyb290U2NvcGUpIHt9XSlcclxuICogICAgKS50b0VxdWFsKFsnJGNvbXBpbGUnLCAnJHJvb3RTY29wZSddKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXkuPHN0cmluZ3xGdW5jdGlvbj59IGZuIEZ1bmN0aW9uIGZvciB3aGljaCBkZXBlbmRlbnQgc2VydmljZSBuYW1lcyBuZWVkIHRvXHJcbiAqIGJlIHJldHJpZXZlZCBhcyBkZXNjcmliZWQgYWJvdmUuXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn0gVGhlIG5hbWVzIG9mIHRoZSBzZXJ2aWNlcyB3aGljaCB0aGUgZnVuY3Rpb24gcmVxdWlyZXMuXHJcbiAqL1xyXG5cclxuXHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBzZXJ2aWNlXHJcbiAqIEBuYW1lICRwcm92aWRlXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKlxyXG4gKiBUaGUge0BsaW5rIGF1dG8uJHByb3ZpZGUgJHByb3ZpZGV9IHNlcnZpY2UgaGFzIGEgbnVtYmVyIG9mIG1ldGhvZHMgZm9yIHJlZ2lzdGVyaW5nIGNvbXBvbmVudHNcclxuICogd2l0aCB0aGUge0BsaW5rIGF1dG8uJGluamVjdG9yICRpbmplY3Rvcn0uIE1hbnkgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbHNvIGV4cG9zZWQgb25cclxuICoge0BsaW5rIGFuZ3VsYXIuTW9kdWxlfS5cclxuICpcclxuICogQW4gQW5ndWxhciAqKnNlcnZpY2UqKiBpcyBhIHNpbmdsZXRvbiBvYmplY3QgY3JlYXRlZCBieSBhICoqc2VydmljZSBmYWN0b3J5KiouICBUaGVzZSAqKnNlcnZpY2VcclxuICogZmFjdG9yaWVzKiogYXJlIGZ1bmN0aW9ucyB3aGljaCwgaW4gdHVybiwgYXJlIGNyZWF0ZWQgYnkgYSAqKnNlcnZpY2UgcHJvdmlkZXIqKi5cclxuICogVGhlICoqc2VydmljZSBwcm92aWRlcnMqKiBhcmUgY29uc3RydWN0b3IgZnVuY3Rpb25zLiBXaGVuIGluc3RhbnRpYXRlZCB0aGV5IG11c3QgY29udGFpbiBhXHJcbiAqIHByb3BlcnR5IGNhbGxlZCBgJGdldGAsIHdoaWNoIGhvbGRzIHRoZSAqKnNlcnZpY2UgZmFjdG9yeSoqIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBXaGVuIHlvdSByZXF1ZXN0IGEgc2VydmljZSwgdGhlIHtAbGluayBhdXRvLiRpbmplY3RvciAkaW5qZWN0b3J9IGlzIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIHRoZVxyXG4gKiBjb3JyZWN0ICoqc2VydmljZSBwcm92aWRlcioqLCBpbnN0YW50aWF0aW5nIGl0IGFuZCB0aGVuIGNhbGxpbmcgaXRzIGAkZ2V0YCAqKnNlcnZpY2UgZmFjdG9yeSoqXHJcbiAqIGZ1bmN0aW9uIHRvIGdldCB0aGUgaW5zdGFuY2Ugb2YgdGhlICoqc2VydmljZSoqLlxyXG4gKlxyXG4gKiBPZnRlbiBzZXJ2aWNlcyBoYXZlIG5vIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBhZGQgbWV0aG9kcyB0byB0aGUgc2VydmljZVxyXG4gKiBwcm92aWRlci4gIFRoZSBwcm92aWRlciB3aWxsIGJlIG5vIG1vcmUgdGhhbiBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHdpdGggYSBgJGdldGAgcHJvcGVydHkuIEZvclxyXG4gKiB0aGVzZSBjYXNlcyB0aGUge0BsaW5rIGF1dG8uJHByb3ZpZGUgJHByb3ZpZGV9IHNlcnZpY2UgaGFzIGFkZGl0aW9uYWwgaGVscGVyIG1ldGhvZHMgdG8gcmVnaXN0ZXJcclxuICogc2VydmljZXMgd2l0aG91dCBzcGVjaWZ5aW5nIGEgcHJvdmlkZXIuXHJcbiAqXHJcbiAqICoge0BsaW5rIGF1dG8uJHByb3ZpZGUjcHJvdmlkZXIgcHJvdmlkZXIocHJvdmlkZXIpfSAtIHJlZ2lzdGVycyBhICoqc2VydmljZSBwcm92aWRlcioqIHdpdGggdGhlXHJcbiAqICAgICB7QGxpbmsgYXV0by4kaW5qZWN0b3IgJGluamVjdG9yfVxyXG4gKiAqIHtAbGluayBhdXRvLiRwcm92aWRlI2NvbnN0YW50IGNvbnN0YW50KG9iail9IC0gcmVnaXN0ZXJzIGEgdmFsdWUvb2JqZWN0IHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGJ5XHJcbiAqICAgICBwcm92aWRlcnMgYW5kIHNlcnZpY2VzLlxyXG4gKiAqIHtAbGluayBhdXRvLiRwcm92aWRlI3ZhbHVlIHZhbHVlKG9iail9IC0gcmVnaXN0ZXJzIGEgdmFsdWUvb2JqZWN0IHRoYXQgY2FuIG9ubHkgYmUgYWNjZXNzZWQgYnlcclxuICogICAgIHNlcnZpY2VzLCBub3QgcHJvdmlkZXJzLlxyXG4gKiAqIHtAbGluayBhdXRvLiRwcm92aWRlI2ZhY3RvcnkgZmFjdG9yeShmbil9IC0gcmVnaXN0ZXJzIGEgc2VydmljZSAqKmZhY3RvcnkgZnVuY3Rpb24qKiwgYGZuYCxcclxuICogICAgIHRoYXQgd2lsbCBiZSB3cmFwcGVkIGluIGEgKipzZXJ2aWNlIHByb3ZpZGVyKiogb2JqZWN0LCB3aG9zZSBgJGdldGAgcHJvcGVydHkgd2lsbCBjb250YWluIHRoZVxyXG4gKiAgICAgZ2l2ZW4gZmFjdG9yeSBmdW5jdGlvbi5cclxuICogKiB7QGxpbmsgYXV0by4kcHJvdmlkZSNzZXJ2aWNlIHNlcnZpY2UoY2xhc3MpfSAtIHJlZ2lzdGVycyBhICoqY29uc3RydWN0b3IgZnVuY3Rpb24qKiwgYGNsYXNzYFxyXG4gKiAgICAgdGhhdCB3aWxsIGJlIHdyYXBwZWQgaW4gYSAqKnNlcnZpY2UgcHJvdmlkZXIqKiBvYmplY3QsIHdob3NlIGAkZ2V0YCBwcm9wZXJ0eSB3aWxsIGluc3RhbnRpYXRlXHJcbiAqICAgICAgYSBuZXcgb2JqZWN0IHVzaW5nIHRoZSBnaXZlbiBjb25zdHJ1Y3RvciBmdW5jdGlvbi5cclxuICpcclxuICogU2VlIHRoZSBpbmRpdmlkdWFsIG1ldGhvZHMgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgbWV0aG9kXHJcbiAqIEBuYW1lICRwcm92aWRlI3Byb3ZpZGVyXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKlxyXG4gKiBSZWdpc3RlciBhICoqcHJvdmlkZXIgZnVuY3Rpb24qKiB3aXRoIHRoZSB7QGxpbmsgYXV0by4kaW5qZWN0b3IgJGluamVjdG9yfS4gUHJvdmlkZXIgZnVuY3Rpb25zXHJcbiAqIGFyZSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMsIHdob3NlIGluc3RhbmNlcyBhcmUgcmVzcG9uc2libGUgZm9yIFwicHJvdmlkaW5nXCIgYSBmYWN0b3J5IGZvciBhXHJcbiAqIHNlcnZpY2UuXHJcbiAqXHJcbiAqIFNlcnZpY2UgcHJvdmlkZXIgbmFtZXMgc3RhcnQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc2VydmljZSB0aGV5IHByb3ZpZGUgZm9sbG93ZWQgYnkgYFByb3ZpZGVyYC5cclxuICogRm9yIGV4YW1wbGUsIHRoZSB7QGxpbmsgbmcuJGxvZyAkbG9nfSBzZXJ2aWNlIGhhcyBhIHByb3ZpZGVyIGNhbGxlZFxyXG4gKiB7QGxpbmsgbmcuJGxvZ1Byb3ZpZGVyICRsb2dQcm92aWRlcn0uXHJcbiAqXHJcbiAqIFNlcnZpY2UgcHJvdmlkZXIgb2JqZWN0cyBjYW4gaGF2ZSBhZGRpdGlvbmFsIG1ldGhvZHMgd2hpY2ggYWxsb3cgY29uZmlndXJhdGlvbiBvZiB0aGUgcHJvdmlkZXJcclxuICogYW5kIGl0cyBzZXJ2aWNlLiBJbXBvcnRhbnRseSwgeW91IGNhbiBjb25maWd1cmUgd2hhdCBraW5kIG9mIHNlcnZpY2UgaXMgY3JlYXRlZCBieSB0aGUgYCRnZXRgXHJcbiAqIG1ldGhvZCwgb3IgaG93IHRoYXQgc2VydmljZSB3aWxsIGFjdC4gRm9yIGV4YW1wbGUsIHRoZSB7QGxpbmsgbmcuJGxvZ1Byb3ZpZGVyICRsb2dQcm92aWRlcn0gaGFzIGFcclxuICogbWV0aG9kIHtAbGluayBuZy4kbG9nUHJvdmlkZXIjZGVidWdFbmFibGVkIGRlYnVnRW5hYmxlZH1cclxuICogd2hpY2ggbGV0cyB5b3Ugc3BlY2lmeSB3aGV0aGVyIHRoZSB7QGxpbmsgbmcuJGxvZyAkbG9nfSBzZXJ2aWNlIHdpbGwgbG9nIGRlYnVnIG1lc3NhZ2VzIHRvIHRoZVxyXG4gKiBjb25zb2xlIG9yIG5vdC5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlLiBOT1RFOiB0aGUgcHJvdmlkZXIgd2lsbCBiZSBhdmFpbGFibGUgdW5kZXIgYG5hbWUgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnUHJvdmlkZXInYCBrZXkuXHJcbiAqIEBwYXJhbSB7KE9iamVjdHxmdW5jdGlvbigpKX0gcHJvdmlkZXIgSWYgdGhlIHByb3ZpZGVyIGlzOlxyXG4gKlxyXG4gKiAgIC0gYE9iamVjdGA6IHRoZW4gaXQgc2hvdWxkIGhhdmUgYSBgJGdldGAgbWV0aG9kLiBUaGUgYCRnZXRgIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgdXNpbmdcclxuICogICAgIHtAbGluayBhdXRvLiRpbmplY3RvciNpbnZva2UgJGluamVjdG9yLmludm9rZSgpfSB3aGVuIGFuIGluc3RhbmNlIG5lZWRzIHRvIGJlIGNyZWF0ZWQuXHJcbiAqICAgLSBgQ29uc3RydWN0b3JgOiBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgcHJvdmlkZXIgd2lsbCBiZSBjcmVhdGVkIHVzaW5nXHJcbiAqICAgICB7QGxpbmsgYXV0by4kaW5qZWN0b3IjaW5zdGFudGlhdGUgJGluamVjdG9yLmluc3RhbnRpYXRlKCl9LCB0aGVuIHRyZWF0ZWQgYXMgYG9iamVjdGAuXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlZ2lzdGVyZWQgcHJvdmlkZXIgaW5zdGFuY2VcclxuXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gY3JlYXRlIGEgc2ltcGxlIGV2ZW50IHRyYWNraW5nIHNlcnZpY2UgYW5kIHJlZ2lzdGVyIGl0IHVzaW5nXHJcbiAqIHtAbGluayBhdXRvLiRwcm92aWRlI3Byb3ZpZGVyICRwcm92aWRlLnByb3ZpZGVyKCl9LlxyXG4gKlxyXG4gKiBgYGBqc1xyXG4gKiAgLy8gRGVmaW5lIHRoZSBldmVudFRyYWNrZXIgcHJvdmlkZXJcclxuICogIGZ1bmN0aW9uIEV2ZW50VHJhY2tlclByb3ZpZGVyKCkge1xyXG4gKiAgICB2YXIgdHJhY2tpbmdVcmwgPSAnL3RyYWNrJztcclxuICpcclxuICogICAgLy8gQSBwcm92aWRlciBtZXRob2QgZm9yIGNvbmZpZ3VyaW5nIHdoZXJlIHRoZSB0cmFja2VkIGV2ZW50cyBzaG91bGQgYmVlbiBzYXZlZFxyXG4gKiAgICB0aGlzLnNldFRyYWNraW5nVXJsID0gZnVuY3Rpb24odXJsKSB7XHJcbiAqICAgICAgdHJhY2tpbmdVcmwgPSB1cmw7XHJcbiAqICAgIH07XHJcbiAqXHJcbiAqICAgIC8vIFRoZSBzZXJ2aWNlIGZhY3RvcnkgZnVuY3Rpb25cclxuICogICAgdGhpcy4kZ2V0ID0gWyckaHR0cCcsIGZ1bmN0aW9uKCRodHRwKSB7XHJcbiAqICAgICAgdmFyIHRyYWNrZWRFdmVudHMgPSB7fTtcclxuICogICAgICByZXR1cm4ge1xyXG4gKiAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIHRyYWNrIGFuIGV2ZW50XHJcbiAqICAgICAgICBldmVudDogZnVuY3Rpb24oZXZlbnQpIHtcclxuICogICAgICAgICAgdmFyIGNvdW50ID0gdHJhY2tlZEV2ZW50c1tldmVudF0gfHwgMDtcclxuICogICAgICAgICAgY291bnQgKz0gMTtcclxuICogICAgICAgICAgdHJhY2tlZEV2ZW50c1tldmVudF0gPSBjb3VudDtcclxuICogICAgICAgICAgcmV0dXJuIGNvdW50O1xyXG4gKiAgICAgICAgfSxcclxuICogICAgICAgIC8vIENhbGwgdGhpcyB0byBzYXZlIHRoZSB0cmFja2VkIGV2ZW50cyB0byB0aGUgdHJhY2tpbmdVcmxcclxuICogICAgICAgIHNhdmU6IGZ1bmN0aW9uKCkge1xyXG4gKiAgICAgICAgICAkaHR0cC5wb3N0KHRyYWNraW5nVXJsLCB0cmFja2VkRXZlbnRzKTtcclxuICogICAgICAgIH1cclxuICogICAgICB9O1xyXG4gKiAgICB9XTtcclxuICogIH1cclxuICpcclxuICogIGRlc2NyaWJlKCdldmVudFRyYWNrZXInLCBmdW5jdGlvbigpIHtcclxuICogICAgdmFyIHBvc3RTcHk7XHJcbiAqXHJcbiAqICAgIGJlZm9yZUVhY2gobW9kdWxlKGZ1bmN0aW9uKCRwcm92aWRlKSB7XHJcbiAqICAgICAgLy8gUmVnaXN0ZXIgdGhlIGV2ZW50VHJhY2tlciBwcm92aWRlclxyXG4gKiAgICAgICRwcm92aWRlLnByb3ZpZGVyKCdldmVudFRyYWNrZXInLCBFdmVudFRyYWNrZXJQcm92aWRlcik7XHJcbiAqICAgIH0pKTtcclxuICpcclxuICogICAgYmVmb3JlRWFjaChtb2R1bGUoZnVuY3Rpb24oZXZlbnRUcmFja2VyUHJvdmlkZXIpIHtcclxuICogICAgICAvLyBDb25maWd1cmUgZXZlbnRUcmFja2VyIHByb3ZpZGVyXHJcbiAqICAgICAgZXZlbnRUcmFja2VyUHJvdmlkZXIuc2V0VHJhY2tpbmdVcmwoJy9jdXN0b20tdHJhY2snKTtcclxuICogICAgfSkpO1xyXG4gKlxyXG4gKiAgICBpdCgndHJhY2tzIGV2ZW50cycsIGluamVjdChmdW5jdGlvbihldmVudFRyYWNrZXIpIHtcclxuICogICAgICBleHBlY3QoZXZlbnRUcmFja2VyLmV2ZW50KCdsb2dpbicpKS50b0VxdWFsKDEpO1xyXG4gKiAgICAgIGV4cGVjdChldmVudFRyYWNrZXIuZXZlbnQoJ2xvZ2luJykpLnRvRXF1YWwoMik7XHJcbiAqICAgIH0pKTtcclxuICpcclxuICogICAgaXQoJ3NhdmVzIHRvIHRoZSB0cmFja2luZyB1cmwnLCBpbmplY3QoZnVuY3Rpb24oZXZlbnRUcmFja2VyLCAkaHR0cCkge1xyXG4gKiAgICAgIHBvc3RTcHkgPSBzcHlPbigkaHR0cCwgJ3Bvc3QnKTtcclxuICogICAgICBldmVudFRyYWNrZXIuZXZlbnQoJ2xvZ2luJyk7XHJcbiAqICAgICAgZXZlbnRUcmFja2VyLnNhdmUoKTtcclxuICogICAgICBleHBlY3QocG9zdFNweSkudG9IYXZlQmVlbkNhbGxlZCgpO1xyXG4gKiAgICAgIGV4cGVjdChwb3N0U3B5Lm1vc3RSZWNlbnRDYWxsLmFyZ3NbMF0pLm5vdC50b0VxdWFsKCcvdHJhY2snKTtcclxuICogICAgICBleHBlY3QocG9zdFNweS5tb3N0UmVjZW50Q2FsbC5hcmdzWzBdKS50b0VxdWFsKCcvY3VzdG9tLXRyYWNrJyk7XHJcbiAqICAgICAgZXhwZWN0KHBvc3RTcHkubW9zdFJlY2VudENhbGwuYXJnc1sxXSkudG9FcXVhbCh7ICdsb2dpbic6IDEgfSk7XHJcbiAqICAgIH0pKTtcclxuICogIH0pO1xyXG4gKiBgYGBcclxuICovXHJcblxyXG4vKipcclxuICogQG5nZG9jIG1ldGhvZFxyXG4gKiBAbmFtZSAkcHJvdmlkZSNmYWN0b3J5XHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKlxyXG4gKiBSZWdpc3RlciBhICoqc2VydmljZSBmYWN0b3J5KiosIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHRvIHJldHVybiB0aGUgc2VydmljZSBpbnN0YW5jZS5cclxuICogVGhpcyBpcyBzaG9ydCBmb3IgcmVnaXN0ZXJpbmcgYSBzZXJ2aWNlIHdoZXJlIGl0cyBwcm92aWRlciBjb25zaXN0cyBvZiBvbmx5IGEgYCRnZXRgIHByb3BlcnR5LFxyXG4gKiB3aGljaCBpcyB0aGUgZ2l2ZW4gc2VydmljZSBmYWN0b3J5IGZ1bmN0aW9uLlxyXG4gKiBZb3Ugc2hvdWxkIHVzZSB7QGxpbmsgYXV0by4kcHJvdmlkZSNmYWN0b3J5ICRwcm92aWRlLmZhY3RvcnkoZ2V0Rm4pfSBpZiB5b3UgZG8gbm90IG5lZWQgdG9cclxuICogY29uZmlndXJlIHlvdXIgc2VydmljZSBpbiBhIHByb3ZpZGVyLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gJGdldEZuIFRoZSAkZ2V0Rm4gZm9yIHRoZSBpbnN0YW5jZSBjcmVhdGlvbi4gSW50ZXJuYWxseSB0aGlzIGlzIGEgc2hvcnQgaGFuZFxyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYCRwcm92aWRlLnByb3ZpZGVyKG5hbWUsIHskZ2V0OiAkZ2V0Rm59KWAuXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlZ2lzdGVyZWQgcHJvdmlkZXIgaW5zdGFuY2VcclxuICpcclxuICogQGV4YW1wbGVcclxuICogSGVyZSBpcyBhbiBleGFtcGxlIG9mIHJlZ2lzdGVyaW5nIGEgc2VydmljZVxyXG4gKiBgYGBqc1xyXG4gKiAgICRwcm92aWRlLmZhY3RvcnkoJ3BpbmcnLCBbJyRodHRwJywgZnVuY3Rpb24oJGh0dHApIHtcclxuICogICAgIHJldHVybiBmdW5jdGlvbiBwaW5nKCkge1xyXG4gKiAgICAgICByZXR1cm4gJGh0dHAuc2VuZCgnL3BpbmcnKTtcclxuICogICAgIH07XHJcbiAqICAgfV0pO1xyXG4gKiBgYGBcclxuICogWW91IHdvdWxkIHRoZW4gaW5qZWN0IGFuZCB1c2UgdGhpcyBzZXJ2aWNlIGxpa2UgdGhpczpcclxuICogYGBganNcclxuICogICBzb21lTW9kdWxlLmNvbnRyb2xsZXIoJ0N0cmwnLCBbJ3BpbmcnLCBmdW5jdGlvbihwaW5nKSB7XHJcbiAqICAgICBwaW5nKCk7XHJcbiAqICAgfV0pO1xyXG4gKiBgYGBcclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBtZXRob2RcclxuICogQG5hbWUgJHByb3ZpZGUjc2VydmljZVxyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogUmVnaXN0ZXIgYSAqKnNlcnZpY2UgY29uc3RydWN0b3IqKiwgd2hpY2ggd2lsbCBiZSBpbnZva2VkIHdpdGggYG5ld2AgdG8gY3JlYXRlIHRoZSBzZXJ2aWNlXHJcbiAqIGluc3RhbmNlLlxyXG4gKiBUaGlzIGlzIHNob3J0IGZvciByZWdpc3RlcmluZyBhIHNlcnZpY2Ugd2hlcmUgaXRzIHByb3ZpZGVyJ3MgYCRnZXRgIHByb3BlcnR5IGlzIHRoZSBzZXJ2aWNlXHJcbiAqIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGluc3RhbnRpYXRlIHRoZSBzZXJ2aWNlIGluc3RhbmNlLlxyXG4gKlxyXG4gKiBZb3Ugc2hvdWxkIHVzZSB7QGxpbmsgYXV0by4kcHJvdmlkZSNzZXJ2aWNlICRwcm92aWRlLnNlcnZpY2UoY2xhc3MpfSBpZiB5b3UgZGVmaW5lIHlvdXIgc2VydmljZVxyXG4gKiBhcyBhIHR5cGUvY2xhc3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBpbnN0YW5jZS5cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29uc3RydWN0b3IgQSBjbGFzcyAoY29uc3RydWN0b3IgZnVuY3Rpb24pIHRoYXQgd2lsbCBiZSBpbnN0YW50aWF0ZWQuXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlZ2lzdGVyZWQgcHJvdmlkZXIgaW5zdGFuY2VcclxuICpcclxuICogQGV4YW1wbGVcclxuICogSGVyZSBpcyBhbiBleGFtcGxlIG9mIHJlZ2lzdGVyaW5nIGEgc2VydmljZSB1c2luZ1xyXG4gKiB7QGxpbmsgYXV0by4kcHJvdmlkZSNzZXJ2aWNlICRwcm92aWRlLnNlcnZpY2UoY2xhc3MpfS5cclxuICogYGBganNcclxuICogICB2YXIgUGluZyA9IGZ1bmN0aW9uKCRodHRwKSB7XHJcbiAqICAgICB0aGlzLiRodHRwID0gJGh0dHA7XHJcbiAqICAgfTtcclxuICpcclxuICogICBQaW5nLiRpbmplY3QgPSBbJyRodHRwJ107XHJcbiAqXHJcbiAqICAgUGluZy5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uKCkge1xyXG4gKiAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KCcvcGluZycpO1xyXG4gKiAgIH07XHJcbiAqICAgJHByb3ZpZGUuc2VydmljZSgncGluZycsIFBpbmcpO1xyXG4gKiBgYGBcclxuICogWW91IHdvdWxkIHRoZW4gaW5qZWN0IGFuZCB1c2UgdGhpcyBzZXJ2aWNlIGxpa2UgdGhpczpcclxuICogYGBganNcclxuICogICBzb21lTW9kdWxlLmNvbnRyb2xsZXIoJ0N0cmwnLCBbJ3BpbmcnLCBmdW5jdGlvbihwaW5nKSB7XHJcbiAqICAgICBwaW5nLnNlbmQoKTtcclxuICogICB9XSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIG1ldGhvZFxyXG4gKiBAbmFtZSAkcHJvdmlkZSN2YWx1ZVxyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogUmVnaXN0ZXIgYSAqKnZhbHVlIHNlcnZpY2UqKiB3aXRoIHRoZSB7QGxpbmsgYXV0by4kaW5qZWN0b3IgJGluamVjdG9yfSwgc3VjaCBhcyBhIHN0cmluZywgYVxyXG4gKiBudW1iZXIsIGFuIGFycmF5LCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbi4gIFRoaXMgaXMgc2hvcnQgZm9yIHJlZ2lzdGVyaW5nIGEgc2VydmljZSB3aGVyZSBpdHNcclxuICogcHJvdmlkZXIncyBgJGdldGAgcHJvcGVydHkgaXMgYSBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQgdGFrZXMgbm8gYXJndW1lbnRzIGFuZCByZXR1cm5zIHRoZSAqKnZhbHVlXHJcbiAqIHNlcnZpY2UqKi5cclxuICpcclxuICogVmFsdWUgc2VydmljZXMgYXJlIHNpbWlsYXIgdG8gY29uc3RhbnQgc2VydmljZXMsIGV4Y2VwdCB0aGF0IHRoZXkgY2Fubm90IGJlIGluamVjdGVkIGludG8gYVxyXG4gKiBtb2R1bGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbiAoc2VlIHtAbGluayBhbmd1bGFyLk1vZHVsZSNjb25maWd9KSBidXQgdGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBieVxyXG4gKiBhbiBBbmd1bGFyXHJcbiAqIHtAbGluayBhdXRvLiRwcm92aWRlI2RlY29yYXRvciBkZWNvcmF0b3J9LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlLlxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSByZWdpc3RlcmVkIHByb3ZpZGVyIGluc3RhbmNlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgb2YgY3JlYXRpbmcgdmFsdWUgc2VydmljZXMuXHJcbiAqIGBgYGpzXHJcbiAqICAgJHByb3ZpZGUudmFsdWUoJ0FETUlOX1VTRVInLCAnYWRtaW4nKTtcclxuICpcclxuICogICAkcHJvdmlkZS52YWx1ZSgnUm9sZUxvb2t1cCcsIHsgYWRtaW46IDAsIHdyaXRlcjogMSwgcmVhZGVyOiAyIH0pO1xyXG4gKlxyXG4gKiAgICRwcm92aWRlLnZhbHVlKCdoYWxmT2YnLCBmdW5jdGlvbih2YWx1ZSkge1xyXG4gKiAgICAgcmV0dXJuIHZhbHVlIC8gMjtcclxuICogICB9KTtcclxuICogYGBgXHJcbiAqL1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgbWV0aG9kXHJcbiAqIEBuYW1lICRwcm92aWRlI2NvbnN0YW50XHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKlxyXG4gKiBSZWdpc3RlciBhICoqY29uc3RhbnQgc2VydmljZSoqLCBzdWNoIGFzIGEgc3RyaW5nLCBhIG51bWJlciwgYW4gYXJyYXksIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uLFxyXG4gKiB3aXRoIHRoZSB7QGxpbmsgYXV0by4kaW5qZWN0b3IgJGluamVjdG9yfS4gVW5saWtlIHtAbGluayBhdXRvLiRwcm92aWRlI3ZhbHVlIHZhbHVlfSBpdCBjYW4gYmVcclxuICogaW5qZWN0ZWQgaW50byBhIG1vZHVsZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uIChzZWUge0BsaW5rIGFuZ3VsYXIuTW9kdWxlI2NvbmZpZ30pIGFuZCBpdCBjYW5ub3RcclxuICogYmUgb3ZlcnJpZGRlbiBieSBhbiBBbmd1bGFyIHtAbGluayBhdXRvLiRwcm92aWRlI2RlY29yYXRvciBkZWNvcmF0b3J9LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY29uc3RhbnQuXHJcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIGNvbnN0YW50IHZhbHVlLlxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSByZWdpc3RlcmVkIGluc3RhbmNlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIEhlcmUgYSBzb21lIGV4YW1wbGVzIG9mIGNyZWF0aW5nIGNvbnN0YW50czpcclxuICogYGBganNcclxuICogICAkcHJvdmlkZS5jb25zdGFudCgnU0hBUkRfSEVJR0hUJywgMzA2KTtcclxuICpcclxuICogICAkcHJvdmlkZS5jb25zdGFudCgnTVlfQ09MT1VSUycsIFsncmVkJywgJ2JsdWUnLCAnZ3JleSddKTtcclxuICpcclxuICogICAkcHJvdmlkZS5jb25zdGFudCgnZG91YmxlJywgZnVuY3Rpb24odmFsdWUpIHtcclxuICogICAgIHJldHVybiB2YWx1ZSAqIDI7XHJcbiAqICAgfSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIG1ldGhvZFxyXG4gKiBAbmFtZSAkcHJvdmlkZSNkZWNvcmF0b3JcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqXHJcbiAqIFJlZ2lzdGVyIGEgKipzZXJ2aWNlIGRlY29yYXRvcioqIHdpdGggdGhlIHtAbGluayBhdXRvLiRpbmplY3RvciAkaW5qZWN0b3J9LiBBIHNlcnZpY2UgZGVjb3JhdG9yXHJcbiAqIGludGVyY2VwdHMgdGhlIGNyZWF0aW9uIG9mIGEgc2VydmljZSwgYWxsb3dpbmcgaXQgdG8gb3ZlcnJpZGUgb3IgbW9kaWZ5IHRoZSBiZWhhdmlvdXIgb2YgdGhlXHJcbiAqIHNlcnZpY2UuIFRoZSBvYmplY3QgcmV0dXJuZWQgYnkgdGhlIGRlY29yYXRvciBtYXkgYmUgdGhlIG9yaWdpbmFsIHNlcnZpY2UsIG9yIGEgbmV3IHNlcnZpY2VcclxuICogb2JqZWN0IHdoaWNoIHJlcGxhY2VzIG9yIHdyYXBzIGFuZCBkZWxlZ2F0ZXMgdG8gdGhlIG9yaWdpbmFsIHNlcnZpY2UuXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIHRvIGRlY29yYXRlLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGRlY29yYXRvciBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCB3aGVuIHRoZSBzZXJ2aWNlIG5lZWRzIHRvIGJlXHJcbiAqICAgIGluc3RhbnRpYXRlZCBhbmQgc2hvdWxkIHJldHVybiB0aGUgZGVjb3JhdGVkIHNlcnZpY2UgaW5zdGFuY2UuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgdXNpbmdcclxuICogICAgdGhlIHtAbGluayBhdXRvLiRpbmplY3RvciNpbnZva2UgaW5qZWN0b3IuaW52b2tlfSBtZXRob2QgYW5kIGlzIHRoZXJlZm9yZSBmdWxseSBpbmplY3RhYmxlLlxyXG4gKiAgICBMb2NhbCBpbmplY3Rpb24gYXJndW1lbnRzOlxyXG4gKlxyXG4gKiAgICAqIGAkZGVsZWdhdGVgIC0gVGhlIG9yaWdpbmFsIHNlcnZpY2UgaW5zdGFuY2UsIHdoaWNoIGNhbiBiZSBtb25rZXkgcGF0Y2hlZCwgY29uZmlndXJlZCxcclxuICogICAgICBkZWNvcmF0ZWQgb3IgZGVsZWdhdGVkIHRvLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBIZXJlIHdlIGRlY29yYXRlIHRoZSB7QGxpbmsgbmcuJGxvZyAkbG9nfSBzZXJ2aWNlIHRvIGNvbnZlcnQgd2FybmluZ3MgdG8gZXJyb3JzIGJ5IGludGVyY2VwdGluZ1xyXG4gKiBjYWxscyB0byB7QGxpbmsgbmcuJGxvZyNlcnJvciAkbG9nLndhcm4oKX0uXHJcbiAqIGBgYGpzXHJcbiAqICAgJHByb3ZpZGUuZGVjb3JhdG9yKCckbG9nJywgWyckZGVsZWdhdGUnLCBmdW5jdGlvbigkZGVsZWdhdGUpIHtcclxuICogICAgICRkZWxlZ2F0ZS53YXJuID0gJGRlbGVnYXRlLmVycm9yO1xyXG4gKiAgICAgcmV0dXJuICRkZWxlZ2F0ZTtcclxuICogICB9XSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuXHJcblxyXG5mdW5jdGlvbiBjcmVhdGVJbmplY3Rvcihtb2R1bGVzVG9Mb2FkLCBzdHJpY3REaSkge1xyXG4gIHN0cmljdERpID0gKHN0cmljdERpID09PSB0cnVlKTtcclxuICB2YXIgSU5TVEFOVElBVElORyA9IHt9LFxyXG4gICAgICBwcm92aWRlclN1ZmZpeCA9ICdQcm92aWRlcicsXHJcbiAgICAgIHBhdGggPSBbXSxcclxuICAgICAgbG9hZGVkTW9kdWxlcyA9IG5ldyBIYXNoTWFwKFtdLCB0cnVlKSxcclxuICAgICAgcHJvdmlkZXJDYWNoZSA9IHtcclxuICAgICAgICAkcHJvdmlkZToge1xyXG4gICAgICAgICAgICBwcm92aWRlcjogc3VwcG9ydE9iamVjdChwcm92aWRlciksXHJcbiAgICAgICAgICAgIGZhY3Rvcnk6IHN1cHBvcnRPYmplY3QoZmFjdG9yeSksXHJcbiAgICAgICAgICAgIHNlcnZpY2U6IHN1cHBvcnRPYmplY3Qoc2VydmljZSksXHJcbiAgICAgICAgICAgIHZhbHVlOiBzdXBwb3J0T2JqZWN0KHZhbHVlKSxcclxuICAgICAgICAgICAgY29uc3RhbnQ6IHN1cHBvcnRPYmplY3QoY29uc3RhbnQpLFxyXG4gICAgICAgICAgICBkZWNvcmF0b3I6IGRlY29yYXRvclxyXG4gICAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBwcm92aWRlckluamVjdG9yID0gKHByb3ZpZGVyQ2FjaGUuJGluamVjdG9yID1cclxuICAgICAgICAgIGNyZWF0ZUludGVybmFsSW5qZWN0b3IocHJvdmlkZXJDYWNoZSwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHRocm93ICRpbmplY3Rvck1pbkVycigndW5wcicsIFwiVW5rbm93biBwcm92aWRlcjogezB9XCIsIHBhdGguam9pbignIDwtICcpKTtcclxuICAgICAgICAgIH0pKSxcclxuICAgICAgaW5zdGFuY2VDYWNoZSA9IHt9LFxyXG4gICAgICBpbnN0YW5jZUluamVjdG9yID0gKGluc3RhbmNlQ2FjaGUuJGluamVjdG9yID1cclxuICAgICAgICAgIGNyZWF0ZUludGVybmFsSW5qZWN0b3IoaW5zdGFuY2VDYWNoZSwgZnVuY3Rpb24oc2VydmljZW5hbWUpIHtcclxuICAgICAgICAgICAgdmFyIHByb3ZpZGVyID0gcHJvdmlkZXJJbmplY3Rvci5nZXQoc2VydmljZW5hbWUgKyBwcm92aWRlclN1ZmZpeCk7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZUluamVjdG9yLmludm9rZShwcm92aWRlci4kZ2V0LCBwcm92aWRlciwgdW5kZWZpbmVkLCBzZXJ2aWNlbmFtZSk7XHJcbiAgICAgICAgICB9KSk7XHJcblxyXG5cclxuICBmb3JFYWNoKGxvYWRNb2R1bGVzKG1vZHVsZXNUb0xvYWQpLCBmdW5jdGlvbihmbikgeyBpbnN0YW5jZUluamVjdG9yLmludm9rZShmbiB8fCBub29wKTsgfSk7XHJcblxyXG4gIHJldHVybiBpbnN0YW5jZUluamVjdG9yO1xyXG5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAvLyAkcHJvdmlkZXJcclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgZnVuY3Rpb24gc3VwcG9ydE9iamVjdChkZWxlZ2F0ZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcclxuICAgICAgaWYgKGlzT2JqZWN0KGtleSkpIHtcclxuICAgICAgICBmb3JFYWNoKGtleSwgcmV2ZXJzZVBhcmFtcyhkZWxlZ2F0ZSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBkZWxlZ2F0ZShrZXksIHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHByb3ZpZGVyKG5hbWUsIHByb3ZpZGVyXykge1xyXG4gICAgYXNzZXJ0Tm90SGFzT3duUHJvcGVydHkobmFtZSwgJ3NlcnZpY2UnKTtcclxuICAgIGlmIChpc0Z1bmN0aW9uKHByb3ZpZGVyXykgfHwgaXNBcnJheShwcm92aWRlcl8pKSB7XHJcbiAgICAgIHByb3ZpZGVyXyA9IHByb3ZpZGVySW5qZWN0b3IuaW5zdGFudGlhdGUocHJvdmlkZXJfKTtcclxuICAgIH1cclxuICAgIGlmICghcHJvdmlkZXJfLiRnZXQpIHtcclxuICAgICAgdGhyb3cgJGluamVjdG9yTWluRXJyKCdwZ2V0JywgXCJQcm92aWRlciAnezB9JyBtdXN0IGRlZmluZSAkZ2V0IGZhY3RvcnkgbWV0aG9kLlwiLCBuYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm92aWRlckNhY2hlW25hbWUgKyBwcm92aWRlclN1ZmZpeF0gPSBwcm92aWRlcl87XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBlbmZvcmNlUmV0dXJuVmFsdWUobmFtZSwgZmFjdG9yeSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGVuZm9yY2VkUmV0dXJuVmFsdWUoKSB7XHJcbiAgICAgIHZhciByZXN1bHQgPSBpbnN0YW5jZUluamVjdG9yLmludm9rZShmYWN0b3J5LCB0aGlzLCB1bmRlZmluZWQsIG5hbWUpO1xyXG4gICAgICBpZiAoaXNVbmRlZmluZWQocmVzdWx0KSkge1xyXG4gICAgICAgIHRocm93ICRpbmplY3Rvck1pbkVycigndW5kZWYnLCBcIlByb3ZpZGVyICd7MH0nIG11c3QgcmV0dXJuIGEgdmFsdWUgZnJvbSAkZ2V0IGZhY3RvcnkgbWV0aG9kLlwiLCBuYW1lKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZhY3RvcnkobmFtZSwgZmFjdG9yeUZuLCBlbmZvcmNlKSB7XHJcbiAgICByZXR1cm4gcHJvdmlkZXIobmFtZSwge1xyXG4gICAgICAkZ2V0OiBlbmZvcmNlICE9PSBmYWxzZSA/IGVuZm9yY2VSZXR1cm5WYWx1ZShuYW1lLCBmYWN0b3J5Rm4pIDogZmFjdG9yeUZuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNlcnZpY2UobmFtZSwgY29uc3RydWN0b3IpIHtcclxuICAgIHJldHVybiBmYWN0b3J5KG5hbWUsIFsnJGluamVjdG9yJywgZnVuY3Rpb24oJGluamVjdG9yKSB7XHJcbiAgICAgIHJldHVybiAkaW5qZWN0b3IuaW5zdGFudGlhdGUoY29uc3RydWN0b3IpO1xyXG4gICAgfV0pO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdmFsdWUobmFtZSwgdmFsKSB7IHJldHVybiBmYWN0b3J5KG5hbWUsIHZhbHVlRm4odmFsKSwgZmFsc2UpOyB9XHJcblxyXG4gIGZ1bmN0aW9uIGNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XHJcbiAgICBhc3NlcnROb3RIYXNPd25Qcm9wZXJ0eShuYW1lLCAnY29uc3RhbnQnKTtcclxuICAgIHByb3ZpZGVyQ2FjaGVbbmFtZV0gPSB2YWx1ZTtcclxuICAgIGluc3RhbmNlQ2FjaGVbbmFtZV0gPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRlY29yYXRvcihzZXJ2aWNlTmFtZSwgZGVjb3JGbikge1xyXG4gICAgdmFyIG9yaWdQcm92aWRlciA9IHByb3ZpZGVySW5qZWN0b3IuZ2V0KHNlcnZpY2VOYW1lICsgcHJvdmlkZXJTdWZmaXgpLFxyXG4gICAgICAgIG9yaWckZ2V0ID0gb3JpZ1Byb3ZpZGVyLiRnZXQ7XHJcblxyXG4gICAgb3JpZ1Byb3ZpZGVyLiRnZXQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgdmFyIG9yaWdJbnN0YW5jZSA9IGluc3RhbmNlSW5qZWN0b3IuaW52b2tlKG9yaWckZ2V0LCBvcmlnUHJvdmlkZXIpO1xyXG4gICAgICByZXR1cm4gaW5zdGFuY2VJbmplY3Rvci5pbnZva2UoZGVjb3JGbiwgbnVsbCwgeyRkZWxlZ2F0ZTogb3JpZ0luc3RhbmNlfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgLy8gTW9kdWxlIExvYWRpbmdcclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBmdW5jdGlvbiBsb2FkTW9kdWxlcyhtb2R1bGVzVG9Mb2FkKSB7XHJcbiAgICB2YXIgcnVuQmxvY2tzID0gW10sIG1vZHVsZUZuO1xyXG4gICAgZm9yRWFjaChtb2R1bGVzVG9Mb2FkLCBmdW5jdGlvbihtb2R1bGUpIHtcclxuICAgICAgaWYgKGxvYWRlZE1vZHVsZXMuZ2V0KG1vZHVsZSkpIHJldHVybjtcclxuICAgICAgbG9hZGVkTW9kdWxlcy5wdXQobW9kdWxlLCB0cnVlKTtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIHJ1bkludm9rZVF1ZXVlKHF1ZXVlKSB7XHJcbiAgICAgICAgdmFyIGksIGlpO1xyXG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gcXVldWUubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xyXG4gICAgICAgICAgdmFyIGludm9rZUFyZ3MgPSBxdWV1ZVtpXSxcclxuICAgICAgICAgICAgICBwcm92aWRlciA9IHByb3ZpZGVySW5qZWN0b3IuZ2V0KGludm9rZUFyZ3NbMF0pO1xyXG5cclxuICAgICAgICAgIHByb3ZpZGVyW2ludm9rZUFyZ3NbMV1dLmFwcGx5KHByb3ZpZGVyLCBpbnZva2VBcmdzWzJdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKG1vZHVsZSkpIHtcclxuICAgICAgICAgIG1vZHVsZUZuID0gYW5ndWxhck1vZHVsZShtb2R1bGUpO1xyXG4gICAgICAgICAgcnVuQmxvY2tzID0gcnVuQmxvY2tzLmNvbmNhdChsb2FkTW9kdWxlcyhtb2R1bGVGbi5yZXF1aXJlcykpLmNvbmNhdChtb2R1bGVGbi5fcnVuQmxvY2tzKTtcclxuICAgICAgICAgIHJ1bkludm9rZVF1ZXVlKG1vZHVsZUZuLl9pbnZva2VRdWV1ZSk7XHJcbiAgICAgICAgICBydW5JbnZva2VRdWV1ZShtb2R1bGVGbi5fY29uZmlnQmxvY2tzKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24obW9kdWxlKSkge1xyXG4gICAgICAgICAgICBydW5CbG9ja3MucHVzaChwcm92aWRlckluamVjdG9yLmludm9rZShtb2R1bGUpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkobW9kdWxlKSkge1xyXG4gICAgICAgICAgICBydW5CbG9ja3MucHVzaChwcm92aWRlckluamVjdG9yLmludm9rZShtb2R1bGUpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYXNzZXJ0QXJnRm4obW9kdWxlLCAnbW9kdWxlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgaWYgKGlzQXJyYXkobW9kdWxlKSkge1xyXG4gICAgICAgICAgbW9kdWxlID0gbW9kdWxlW21vZHVsZS5sZW5ndGggLSAxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGUubWVzc2FnZSAmJiBlLnN0YWNrICYmIGUuc3RhY2suaW5kZXhPZihlLm1lc3NhZ2UpID09IC0xKSB7XHJcbiAgICAgICAgICAvLyBTYWZhcmkgJiBGRidzIHN0YWNrIHRyYWNlcyBkb24ndCBjb250YWluIGVycm9yLm1lc3NhZ2UgY29udGVudFxyXG4gICAgICAgICAgLy8gdW5saWtlIHRob3NlIG9mIENocm9tZSBhbmQgSUVcclxuICAgICAgICAgIC8vIFNvIGlmIHN0YWNrIGRvZXNuJ3QgY29udGFpbiBtZXNzYWdlLCB3ZSBjcmVhdGUgYSBuZXcgc3RyaW5nIHRoYXQgY29udGFpbnMgYm90aC5cclxuICAgICAgICAgIC8vIFNpbmNlIGVycm9yLnN0YWNrIGlzIHJlYWQtb25seSBpbiBTYWZhcmksIEknbSBvdmVycmlkaW5nIGUgYW5kIG5vdCBlLnN0YWNrIGhlcmUuXHJcbiAgICAgICAgICAvKiBqc2hpbnQgLVcwMjIgKi9cclxuICAgICAgICAgIGUgPSBlLm1lc3NhZ2UgKyAnXFxuJyArIGUuc3RhY2s7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93ICRpbmplY3Rvck1pbkVycignbW9kdWxlcnInLCBcIkZhaWxlZCB0byBpbnN0YW50aWF0ZSBtb2R1bGUgezB9IGR1ZSB0bzpcXG57MX1cIixcclxuICAgICAgICAgICAgICAgICAgbW9kdWxlLCBlLnN0YWNrIHx8IGUubWVzc2FnZSB8fCBlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcnVuQmxvY2tzO1xyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgLy8gaW50ZXJuYWwgSW5qZWN0b3JcclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgZnVuY3Rpb24gY3JlYXRlSW50ZXJuYWxJbmplY3RvcihjYWNoZSwgZmFjdG9yeSkge1xyXG5cclxuICAgIGZ1bmN0aW9uIGdldFNlcnZpY2Uoc2VydmljZU5hbWUpIHtcclxuICAgICAgaWYgKGNhY2hlLmhhc093blByb3BlcnR5KHNlcnZpY2VOYW1lKSkge1xyXG4gICAgICAgIGlmIChjYWNoZVtzZXJ2aWNlTmFtZV0gPT09IElOU1RBTlRJQVRJTkcpIHtcclxuICAgICAgICAgIHRocm93ICRpbmplY3Rvck1pbkVycignY2RlcCcsICdDaXJjdWxhciBkZXBlbmRlbmN5IGZvdW5kOiB7MH0nLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2VOYW1lICsgJyA8LSAnICsgcGF0aC5qb2luKCcgPC0gJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2FjaGVbc2VydmljZU5hbWVdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBwYXRoLnVuc2hpZnQoc2VydmljZU5hbWUpO1xyXG4gICAgICAgICAgY2FjaGVbc2VydmljZU5hbWVdID0gSU5TVEFOVElBVElORztcclxuICAgICAgICAgIHJldHVybiBjYWNoZVtzZXJ2aWNlTmFtZV0gPSBmYWN0b3J5KHNlcnZpY2VOYW1lKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgIGlmIChjYWNoZVtzZXJ2aWNlTmFtZV0gPT09IElOU1RBTlRJQVRJTkcpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGNhY2hlW3NlcnZpY2VOYW1lXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgcGF0aC5zaGlmdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGludm9rZShmbiwgc2VsZiwgbG9jYWxzLCBzZXJ2aWNlTmFtZSkge1xyXG4gICAgICBpZiAodHlwZW9mIGxvY2FscyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBzZXJ2aWNlTmFtZSA9IGxvY2FscztcclxuICAgICAgICBsb2NhbHMgPSBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgYXJncyA9IFtdLFxyXG4gICAgICAgICAgJGluamVjdCA9IGFubm90YXRlKGZuLCBzdHJpY3REaSwgc2VydmljZU5hbWUpLFxyXG4gICAgICAgICAgbGVuZ3RoLCBpLFxyXG4gICAgICAgICAga2V5O1xyXG5cclxuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gJGluamVjdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGtleSA9ICRpbmplY3RbaV07XHJcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICB0aHJvdyAkaW5qZWN0b3JNaW5FcnIoJ2l0a24nLFxyXG4gICAgICAgICAgICAgICAgICAnSW5jb3JyZWN0IGluamVjdGlvbiB0b2tlbiEgRXhwZWN0ZWQgc2VydmljZSBuYW1lIGFzIHN0cmluZywgZ290IHswfScsIGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFyZ3MucHVzaChcclxuICAgICAgICAgIGxvY2FscyAmJiBsb2NhbHMuaGFzT3duUHJvcGVydHkoa2V5KVxyXG4gICAgICAgICAgPyBsb2NhbHNba2V5XVxyXG4gICAgICAgICAgOiBnZXRTZXJ2aWNlKGtleSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpc0FycmF5KGZuKSkge1xyXG4gICAgICAgIGZuID0gZm5bbGVuZ3RoXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gaHR0cDovL2pzcGVyZi5jb20vYW5ndWxhcmpzLWludm9rZS1hcHBseS12cy1zd2l0Y2hcclxuICAgICAgLy8gIzUzODhcclxuICAgICAgcmV0dXJuIGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGluc3RhbnRpYXRlKFR5cGUsIGxvY2Fscywgc2VydmljZU5hbWUpIHtcclxuICAgICAgdmFyIENvbnN0cnVjdG9yID0gZnVuY3Rpb24oKSB7fSxcclxuICAgICAgICAgIGluc3RhbmNlLCByZXR1cm5lZFZhbHVlO1xyXG5cclxuICAgICAgLy8gQ2hlY2sgaWYgVHlwZSBpcyBhbm5vdGF0ZWQgYW5kIHVzZSBqdXN0IHRoZSBnaXZlbiBmdW5jdGlvbiBhdCBuLTEgYXMgcGFyYW1ldGVyXHJcbiAgICAgIC8vIGUuZy4gc29tZU1vZHVsZS5mYWN0b3J5KCdncmVldGVyJywgWyckd2luZG93JywgZnVuY3Rpb24ocmVuYW1lZCR3aW5kb3cpIHt9XSk7XHJcbiAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IChpc0FycmF5KFR5cGUpID8gVHlwZVtUeXBlLmxlbmd0aCAtIDFdIDogVHlwZSkucHJvdG90eXBlO1xyXG4gICAgICBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xyXG4gICAgICByZXR1cm5lZFZhbHVlID0gaW52b2tlKFR5cGUsIGluc3RhbmNlLCBsb2NhbHMsIHNlcnZpY2VOYW1lKTtcclxuXHJcbiAgICAgIHJldHVybiBpc09iamVjdChyZXR1cm5lZFZhbHVlKSB8fCBpc0Z1bmN0aW9uKHJldHVybmVkVmFsdWUpID8gcmV0dXJuZWRWYWx1ZSA6IGluc3RhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGludm9rZTogaW52b2tlLFxyXG4gICAgICBpbnN0YW50aWF0ZTogaW5zdGFudGlhdGUsXHJcbiAgICAgIGdldDogZ2V0U2VydmljZSxcclxuICAgICAgYW5ub3RhdGU6IGFubm90YXRlLFxyXG4gICAgICBoYXM6IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gcHJvdmlkZXJDYWNoZS5oYXNPd25Qcm9wZXJ0eShuYW1lICsgcHJvdmlkZXJTdWZmaXgpIHx8IGNhY2hlLmhhc093blByb3BlcnR5KG5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG5cclxuY3JlYXRlSW5qZWN0b3IuJCRhbm5vdGF0ZSA9IGFubm90YXRlO1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBwcm92aWRlclxyXG4gKiBAbmFtZSAkYW5jaG9yU2Nyb2xsUHJvdmlkZXJcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFVzZSBgJGFuY2hvclNjcm9sbFByb3ZpZGVyYCB0byBkaXNhYmxlIGF1dG9tYXRpYyBzY3JvbGxpbmcgd2hlbmV2ZXJcclxuICoge0BsaW5rIG5nLiRsb2NhdGlvbiNoYXNoICRsb2NhdGlvbi5oYXNoKCl9IGNoYW5nZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiAkQW5jaG9yU2Nyb2xsUHJvdmlkZXIoKSB7XHJcblxyXG4gIHZhciBhdXRvU2Nyb2xsaW5nRW5hYmxlZCA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSAkYW5jaG9yU2Nyb2xsUHJvdmlkZXIjZGlzYWJsZUF1dG9TY3JvbGxpbmdcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIEJ5IGRlZmF1bHQsIHtAbGluayBuZy4kYW5jaG9yU2Nyb2xsICRhbmNob3JTY3JvbGwoKX0gd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCBjaGFuZ2VzIHRvXHJcbiAgICoge0BsaW5rIG5nLiRsb2NhdGlvbiNoYXNoICRsb2NhdGlvbi5oYXNoKCl9IGFuZCBzY3JvbGwgdG8gdGhlIGVsZW1lbnQgbWF0Y2hpbmcgdGhlIG5ldyBoYXNoLjxiciAvPlxyXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBkaXNhYmxlIGF1dG9tYXRpYyBzY3JvbGxpbmcuXHJcbiAgICpcclxuICAgKiBJZiBhdXRvbWF0aWMgc2Nyb2xsaW5nIGlzIGRpc2FibGVkLCBvbmUgbXVzdCBleHBsaWNpdGx5IGNhbGxcclxuICAgKiB7QGxpbmsgbmcuJGFuY2hvclNjcm9sbCAkYW5jaG9yU2Nyb2xsKCl9IGluIG9yZGVyIHRvIHNjcm9sbCB0byB0aGUgZWxlbWVudCByZWxhdGVkIHRvIHRoZVxyXG4gICAqIGN1cnJlbnQgaGFzaC5cclxuICAgKi9cclxuICB0aGlzLmRpc2FibGVBdXRvU2Nyb2xsaW5nID0gZnVuY3Rpb24oKSB7XHJcbiAgICBhdXRvU2Nyb2xsaW5nRW5hYmxlZCA9IGZhbHNlO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBzZXJ2aWNlXHJcbiAgICogQG5hbWUgJGFuY2hvclNjcm9sbFxyXG4gICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICogQHJlcXVpcmVzICR3aW5kb3dcclxuICAgKiBAcmVxdWlyZXMgJGxvY2F0aW9uXHJcbiAgICogQHJlcXVpcmVzICRyb290U2NvcGVcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIFdoZW4gY2FsbGVkLCBpdCBjaGVja3MgdGhlIGN1cnJlbnQgdmFsdWUgb2Yge0BsaW5rIG5nLiRsb2NhdGlvbiNoYXNoICRsb2NhdGlvbi5oYXNoKCl9IGFuZFxyXG4gICAqIHNjcm9sbHMgdG8gdGhlIHJlbGF0ZWQgZWxlbWVudCwgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBzcGVjaWZpZWQgaW4gdGhlXHJcbiAgICogW0h0bWw1IHNwZWNdKGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCN0aGUtaW5kaWNhdGVkLXBhcnQtb2YtdGhlLWRvY3VtZW50KS5cclxuICAgKlxyXG4gICAqIEl0IGFsc28gd2F0Y2hlcyB0aGUge0BsaW5rIG5nLiRsb2NhdGlvbiNoYXNoICRsb2NhdGlvbi5oYXNoKCl9IGFuZCBhdXRvbWF0aWNhbGx5IHNjcm9sbHMgdG9cclxuICAgKiBtYXRjaCBhbnkgYW5jaG9yIHdoZW5ldmVyIGl0IGNoYW5nZXMuIFRoaXMgY2FuIGJlIGRpc2FibGVkIGJ5IGNhbGxpbmdcclxuICAgKiB7QGxpbmsgbmcuJGFuY2hvclNjcm9sbFByb3ZpZGVyI2Rpc2FibGVBdXRvU2Nyb2xsaW5nICRhbmNob3JTY3JvbGxQcm92aWRlci5kaXNhYmxlQXV0b1Njcm9sbGluZygpfS5cclxuICAgKlxyXG4gICAqIEFkZGl0aW9uYWxseSwgeW91IGNhbiB1c2UgaXRzIHtAbGluayBuZy4kYW5jaG9yU2Nyb2xsI3lPZmZzZXQgeU9mZnNldH0gcHJvcGVydHkgdG8gc3BlY2lmeSBhXHJcbiAgICogdmVydGljYWwgc2Nyb2xsLW9mZnNldCAoZWl0aGVyIGZpeGVkIG9yIGR5bmFtaWMpLlxyXG4gICAqXHJcbiAgICogQHByb3BlcnR5IHsobnVtYmVyfGZ1bmN0aW9ufGpxTGl0ZSl9IHlPZmZzZXRcclxuICAgKiBJZiBzZXQsIHNwZWNpZmllcyBhIHZlcnRpY2FsIHNjcm9sbC1vZmZzZXQuIFRoaXMgaXMgb2Z0ZW4gdXNlZnVsIHdoZW4gdGhlcmUgYXJlIGZpeGVkXHJcbiAgICogcG9zaXRpb25lZCBlbGVtZW50cyBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlLCBzdWNoIGFzIG5hdmJhcnMsIGhlYWRlcnMgZXRjLlxyXG4gICAqXHJcbiAgICogYHlPZmZzZXRgIGNhbiBiZSBzcGVjaWZpZWQgaW4gdmFyaW91cyB3YXlzOlxyXG4gICAqIC0gKipudW1iZXIqKjogQSBmaXhlZCBudW1iZXIgb2YgcGl4ZWxzIHRvIGJlIHVzZWQgYXMgb2Zmc2V0LjxiciAvPjxiciAvPlxyXG4gICAqIC0gKipmdW5jdGlvbioqOiBBIGdldHRlciBmdW5jdGlvbiBjYWxsZWQgZXZlcnl0aW1lIGAkYW5jaG9yU2Nyb2xsKClgIGlzIGV4ZWN1dGVkLiBNdXN0IHJldHVyblxyXG4gICAqICAgYSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBvZmZzZXQgKGluIHBpeGVscykuPGJyIC8+PGJyIC8+XHJcbiAgICogLSAqKmpxTGl0ZSoqOiBBIGpxTGl0ZS9qUXVlcnkgZWxlbWVudCB0byBiZSB1c2VkIGZvciBzcGVjaWZ5aW5nIHRoZSBvZmZzZXQuIFRoZSBkaXN0YW5jZSBmcm9tXHJcbiAgICogICB0aGUgdG9wIG9mIHRoZSBwYWdlIHRvIHRoZSBlbGVtZW50J3MgYm90dG9tIHdpbGwgYmUgdXNlZCBhcyBvZmZzZXQuPGJyIC8+XHJcbiAgICogICAqKk5vdGUqKjogVGhlIGVsZW1lbnQgd2lsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgb25seSBhcyBsb25nIGFzIGl0cyBgcG9zaXRpb25gIGlzIHNldCB0b1xyXG4gICAqICAgYGZpeGVkYC4gVGhpcyBvcHRpb24gaXMgdXNlZnVsLCB3aGVuIGRlYWxpbmcgd2l0aCByZXNwb25zaXZlIG5hdmJhcnMvaGVhZGVycyB0aGF0IGFkanVzdFxyXG4gICAqICAgdGhlaXIgaGVpZ2h0IGFuZC9vciBwb3NpdGlvbmluZyBhY2NvcmRpbmcgdG8gdGhlIHZpZXdwb3J0J3Mgc2l6ZS5cclxuICAgKlxyXG4gICAqIDxiciAvPlxyXG4gICAqIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCI+XHJcbiAgICogSW4gb3JkZXIgZm9yIGB5T2Zmc2V0YCB0byB3b3JrIHByb3Blcmx5LCBzY3JvbGxpbmcgc2hvdWxkIHRha2UgcGxhY2Ugb24gdGhlIGRvY3VtZW50J3Mgcm9vdCBhbmRcclxuICAgKiBub3Qgc29tZSBjaGlsZCBlbGVtZW50LlxyXG4gICAqIDwvZGl2PlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgICA8ZXhhbXBsZSBtb2R1bGU9XCJhbmNob3JTY3JvbGxFeGFtcGxlXCI+XHJcbiAgICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgICA8ZGl2IGlkPVwic2Nyb2xsQXJlYVwiIG5nLWNvbnRyb2xsZXI9XCJTY3JvbGxDb250cm9sbGVyXCI+XHJcbiAgICAgICAgICAgPGEgbmctY2xpY2s9XCJnb3RvQm90dG9tKClcIj5HbyB0byBib3R0b208L2E+XHJcbiAgICAgICAgICAgPGEgaWQ9XCJib3R0b21cIj48L2E+IFlvdSdyZSBhdCB0aGUgYm90dG9tIVxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICAgIDwvZmlsZT5cclxuICAgICAgIDxmaWxlIG5hbWU9XCJzY3JpcHQuanNcIj5cclxuICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ2FuY2hvclNjcm9sbEV4YW1wbGUnLCBbXSlcclxuICAgICAgICAgICAuY29udHJvbGxlcignU2Nyb2xsQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRsb2NhdGlvbicsICckYW5jaG9yU2Nyb2xsJyxcclxuICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRsb2NhdGlvbiwgJGFuY2hvclNjcm9sbCkge1xyXG4gICAgICAgICAgICAgICAkc2NvcGUuZ290b0JvdHRvbSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgbG9jYXRpb24uaGFzaCB0byB0aGUgaWQgb2ZcclxuICAgICAgICAgICAgICAgICAvLyB0aGUgZWxlbWVudCB5b3Ugd2lzaCB0byBzY3JvbGwgdG8uXHJcbiAgICAgICAgICAgICAgICAgJGxvY2F0aW9uLmhhc2goJ2JvdHRvbScpO1xyXG5cclxuICAgICAgICAgICAgICAgICAvLyBjYWxsICRhbmNob3JTY3JvbGwoKVxyXG4gICAgICAgICAgICAgICAgICRhbmNob3JTY3JvbGwoKTtcclxuICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgIH1dKTtcclxuICAgICAgIDwvZmlsZT5cclxuICAgICAgIDxmaWxlIG5hbWU9XCJzdHlsZS5jc3NcIj5cclxuICAgICAgICAgI3Njcm9sbEFyZWEge1xyXG4gICAgICAgICAgIGhlaWdodDogMjgwcHg7XHJcbiAgICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICNib3R0b20ge1xyXG4gICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgIG1hcmdpbi10b3A6IDIwMDBweDtcclxuICAgICAgICAgfVxyXG4gICAgICAgPC9maWxlPlxyXG4gICAgIDwvZXhhbXBsZT5cclxuICAgKlxyXG4gICAqIDxociAvPlxyXG4gICAqIFRoZSBleGFtcGxlIGJlbG93IGlsbHVzdHJhdGVzIHRoZSB1c2Ugb2YgYSB2ZXJ0aWNhbCBzY3JvbGwtb2Zmc2V0IChzcGVjaWZpZWQgYXMgYSBmaXhlZCB2YWx1ZSkuXHJcbiAgICogU2VlIHtAbGluayBuZy4kYW5jaG9yU2Nyb2xsI3lPZmZzZXQgJGFuY2hvclNjcm9sbC55T2Zmc2V0fSBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgICA8ZXhhbXBsZSBtb2R1bGU9XCJhbmNob3JTY3JvbGxPZmZzZXRFeGFtcGxlXCI+XHJcbiAgICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwiZml4ZWQtaGVhZGVyXCIgbmctY29udHJvbGxlcj1cImhlYWRlckN0cmxcIj5cclxuICAgICAgICAgICA8YSBocmVmPVwiXCIgbmctY2xpY2s9XCJnb3RvQW5jaG9yKHgpXCIgbmctcmVwZWF0PVwieCBpbiBbMSwyLDMsNCw1XVwiPlxyXG4gICAgICAgICAgICAgR28gdG8gYW5jaG9yIHt7eH19XHJcbiAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgPGRpdiBpZD1cImFuY2hvcnt7eH19XCIgY2xhc3M9XCJhbmNob3JcIiBuZy1yZXBlYXQ9XCJ4IGluIFsxLDIsMyw0LDVdXCI+XHJcbiAgICAgICAgICAgQW5jaG9yIHt7eH19IG9mIDVcclxuICAgICAgICAgPC9kaXY+XHJcbiAgICAgICA8L2ZpbGU+XHJcbiAgICAgICA8ZmlsZSBuYW1lPVwic2NyaXB0LmpzXCI+XHJcbiAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdhbmNob3JTY3JvbGxPZmZzZXRFeGFtcGxlJywgW10pXHJcbiAgICAgICAgICAgLnJ1bihbJyRhbmNob3JTY3JvbGwnLCBmdW5jdGlvbigkYW5jaG9yU2Nyb2xsKSB7XHJcbiAgICAgICAgICAgICAkYW5jaG9yU2Nyb2xsLnlPZmZzZXQgPSA1MDsgICAvLyBhbHdheXMgc2Nyb2xsIGJ5IDUwIGV4dHJhIHBpeGVsc1xyXG4gICAgICAgICAgIH1dKVxyXG4gICAgICAgICAgIC5jb250cm9sbGVyKCdoZWFkZXJDdHJsJywgWyckYW5jaG9yU2Nyb2xsJywgJyRsb2NhdGlvbicsICckc2NvcGUnLFxyXG4gICAgICAgICAgICAgZnVuY3Rpb24gKCRhbmNob3JTY3JvbGwsICRsb2NhdGlvbiwgJHNjb3BlKSB7XHJcbiAgICAgICAgICAgICAgICRzY29wZS5nb3RvQW5jaG9yID0gZnVuY3Rpb24oeCkge1xyXG4gICAgICAgICAgICAgICAgIHZhciBuZXdIYXNoID0gJ2FuY2hvcicgKyB4O1xyXG4gICAgICAgICAgICAgICAgIGlmICgkbG9jYXRpb24uaGFzaCgpICE9PSBuZXdIYXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAvLyBzZXQgdGhlICRsb2NhdGlvbi5oYXNoIHRvIGBuZXdIYXNoYCBhbmRcclxuICAgICAgICAgICAgICAgICAgIC8vICRhbmNob3JTY3JvbGwgd2lsbCBhdXRvbWF0aWNhbGx5IHNjcm9sbCB0byBpdFxyXG4gICAgICAgICAgICAgICAgICAgJGxvY2F0aW9uLmhhc2goJ2FuY2hvcicgKyB4KTtcclxuICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgLy8gY2FsbCAkYW5jaG9yU2Nyb2xsKCkgZXhwbGljaXRseSxcclxuICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlICRsb2NhdGlvbi5oYXNoIGhhc24ndCBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICAgICAkYW5jaG9yU2Nyb2xsKCk7XHJcbiAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIF0pO1xyXG4gICAgICAgPC9maWxlPlxyXG4gICAgICAgPGZpbGUgbmFtZT1cInN0eWxlLmNzc1wiPlxyXG4gICAgICAgICBib2R5IHtcclxuICAgICAgICAgICBwYWRkaW5nLXRvcDogNTBweDtcclxuICAgICAgICAgfVxyXG5cclxuICAgICAgICAgLmFuY2hvciB7XHJcbiAgICAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkIERhcmtPcmNoaWQ7XHJcbiAgICAgICAgICAgcGFkZGluZzogMTBweCAxMHB4IDIwMHB4IDEwcHg7XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIC5maXhlZC1oZWFkZXIge1xyXG4gICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yKTtcclxuICAgICAgICAgICBoZWlnaHQ6IDUwcHg7XHJcbiAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICAgICAgIHRvcDogMDsgbGVmdDogMDsgcmlnaHQ6IDA7XHJcbiAgICAgICAgIH1cclxuXHJcbiAgICAgICAgIC5maXhlZC1oZWFkZXIgPiBhIHtcclxuICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgbWFyZ2luOiA1cHggMTVweDtcclxuICAgICAgICAgfVxyXG4gICAgICAgPC9maWxlPlxyXG4gICAgIDwvZXhhbXBsZT5cclxuICAgKi9cclxuICB0aGlzLiRnZXQgPSBbJyR3aW5kb3cnLCAnJGxvY2F0aW9uJywgJyRyb290U2NvcGUnLCBmdW5jdGlvbigkd2luZG93LCAkbG9jYXRpb24sICRyb290U2NvcGUpIHtcclxuICAgIHZhciBkb2N1bWVudCA9ICR3aW5kb3cuZG9jdW1lbnQ7XHJcblxyXG4gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCBmaXJzdCBhbmNob3IgZnJvbSBhIE5vZGVMaXN0XHJcbiAgICAvLyAodXNpbmcgYEFycmF5I3NvbWUoKWAgaW5zdGVhZCBvZiBgYW5ndWxhciNmb3JFYWNoKClgIHNpbmNlIGl0J3MgbW9yZSBwZXJmb3JtYW50XHJcbiAgICAvLyAgYW5kIHdvcmtpbmcgaW4gYWxsIHN1cHBvcnRlZCBicm93c2Vycy4pXHJcbiAgICBmdW5jdGlvbiBnZXRGaXJzdEFuY2hvcihsaXN0KSB7XHJcbiAgICAgIHZhciByZXN1bHQgPSBudWxsO1xyXG4gICAgICBBcnJheS5wcm90b3R5cGUuc29tZS5jYWxsKGxpc3QsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAobm9kZU5hbWVfKGVsZW1lbnQpID09PSAnYScpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldFlPZmZzZXQoKSB7XHJcblxyXG4gICAgICB2YXIgb2Zmc2V0ID0gc2Nyb2xsLnlPZmZzZXQ7XHJcblxyXG4gICAgICBpZiAoaXNGdW5jdGlvbihvZmZzZXQpKSB7XHJcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0KCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXNFbGVtZW50KG9mZnNldCkpIHtcclxuICAgICAgICB2YXIgZWxlbSA9IG9mZnNldFswXTtcclxuICAgICAgICB2YXIgc3R5bGUgPSAkd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbSk7XHJcbiAgICAgICAgaWYgKHN0eWxlLnBvc2l0aW9uICE9PSAnZml4ZWQnKSB7XHJcbiAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvZmZzZXQgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoIWlzTnVtYmVyKG9mZnNldCkpIHtcclxuICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gb2Zmc2V0O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNjcm9sbFRvKGVsZW0pIHtcclxuICAgICAgaWYgKGVsZW0pIHtcclxuICAgICAgICBlbGVtLnNjcm9sbEludG9WaWV3KCk7XHJcblxyXG4gICAgICAgIHZhciBvZmZzZXQgPSBnZXRZT2Zmc2V0KCk7XHJcblxyXG4gICAgICAgIGlmIChvZmZzZXQpIHtcclxuICAgICAgICAgIC8vIGBvZmZzZXRgIGlzIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHdlIHNob3VsZCBzY3JvbGwgVVAgaW4gb3JkZXIgdG8gYWxpZ24gYGVsZW1gIHByb3Blcmx5LlxyXG4gICAgICAgICAgLy8gVGhpcyBpcyB0cnVlIE9OTFkgaWYgdGhlIGNhbGwgdG8gYGVsZW0uc2Nyb2xsSW50b1ZpZXcoKWAgaW5pdGlhbGx5IGFsaWducyBgZWxlbWAgYXQgdGhlXHJcbiAgICAgICAgICAvLyB0b3Agb2YgdGhlIHZpZXdwb3J0LlxyXG4gICAgICAgICAgLy9cclxuICAgICAgICAgIC8vIElGIHRoZSBudW1iZXIgb2YgcGl4ZWxzIGZyb20gdGhlIHRvcCBvZiBgZWxlbWAgdG8gdGhlIGVuZCBvZiB0aGUgcGFnZSdzIGNvbnRlbnQgaXMgbGVzc1xyXG4gICAgICAgICAgLy8gdGhhbiB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydCwgdGhlbiBgZWxlbS5zY3JvbGxJbnRvVmlldygpYCB3aWxsIGFsaWduIHRoZSBgZWxlbWAgc29tZVxyXG4gICAgICAgICAgLy8gd2F5IGRvd24gdGhlIHBhZ2UuXHJcbiAgICAgICAgICAvL1xyXG4gICAgICAgICAgLy8gVGhpcyBpcyBvZnRlbiB0aGUgY2FzZSBmb3IgZWxlbWVudHMgbmVhciB0aGUgYm90dG9tIG9mIHRoZSBwYWdlLlxyXG4gICAgICAgICAgLy9cclxuICAgICAgICAgIC8vIEluIHN1Y2ggY2FzZXMgd2UgZG8gbm90IG5lZWQgdG8gc2Nyb2xsIHRoZSB3aG9sZSBgb2Zmc2V0YCB1cCwganVzdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuXHJcbiAgICAgICAgICAvLyB0aGUgdG9wIG9mIHRoZSBlbGVtZW50IGFuZCB0aGUgb2Zmc2V0LCB3aGljaCBpcyBlbm91Z2ggdG8gYWxpZ24gdGhlIHRvcCBvZiBgZWxlbWAgYXQgdGhlXHJcbiAgICAgICAgICAvLyBkZXNpcmVkIHBvc2l0aW9uLlxyXG4gICAgICAgICAgdmFyIGVsZW1Ub3AgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxuICAgICAgICAgICR3aW5kb3cuc2Nyb2xsQnkoMCwgZWxlbVRvcCAtIG9mZnNldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICR3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzY3JvbGwoKSB7XHJcbiAgICAgIHZhciBoYXNoID0gJGxvY2F0aW9uLmhhc2goKSwgZWxtO1xyXG5cclxuICAgICAgLy8gZW1wdHkgaGFzaCwgc2Nyb2xsIHRvIHRoZSB0b3Agb2YgdGhlIHBhZ2VcclxuICAgICAgaWYgKCFoYXNoKSBzY3JvbGxUbyhudWxsKTtcclxuXHJcbiAgICAgIC8vIGVsZW1lbnQgd2l0aCBnaXZlbiBpZFxyXG4gICAgICBlbHNlIGlmICgoZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaCkpKSBzY3JvbGxUbyhlbG0pO1xyXG5cclxuICAgICAgLy8gZmlyc3QgYW5jaG9yIHdpdGggZ2l2ZW4gbmFtZSA6LURcclxuICAgICAgZWxzZSBpZiAoKGVsbSA9IGdldEZpcnN0QW5jaG9yKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGhhc2gpKSkpIHNjcm9sbFRvKGVsbSk7XHJcblxyXG4gICAgICAvLyBubyBlbGVtZW50IGFuZCBoYXNoID09ICd0b3AnLCBzY3JvbGwgdG8gdGhlIHRvcCBvZiB0aGUgcGFnZVxyXG4gICAgICBlbHNlIGlmIChoYXNoID09PSAndG9wJykgc2Nyb2xsVG8obnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZG9lcyBub3Qgc2Nyb2xsIHdoZW4gdXNlciBjbGlja3Mgb24gYW5jaG9yIGxpbmsgdGhhdCBpcyBjdXJyZW50bHkgb25cclxuICAgIC8vIChubyB1cmwgY2hhbmdlLCBubyAkbG9jYXRpb24uaGFzaCgpIGNoYW5nZSksIGJyb3dzZXIgbmF0aXZlIGRvZXMgc2Nyb2xsXHJcbiAgICBpZiAoYXV0b1Njcm9sbGluZ0VuYWJsZWQpIHtcclxuICAgICAgJHJvb3RTY29wZS4kd2F0Y2goZnVuY3Rpb24gYXV0b1Njcm9sbFdhdGNoKCkge3JldHVybiAkbG9jYXRpb24uaGFzaCgpO30sXHJcbiAgICAgICAgZnVuY3Rpb24gYXV0b1Njcm9sbFdhdGNoQWN0aW9uKG5ld1ZhbCwgb2xkVmFsKSB7XHJcbiAgICAgICAgICAvLyBza2lwIHRoZSBpbml0aWFsIHNjcm9sbCBpZiAkbG9jYXRpb24uaGFzaCBpcyBlbXB0eVxyXG4gICAgICAgICAgaWYgKG5ld1ZhbCA9PT0gb2xkVmFsICYmIG5ld1ZhbCA9PT0gJycpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBqcUxpdGVEb2N1bWVudExvYWRlZChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgJHJvb3RTY29wZS4kZXZhbEFzeW5jKHNjcm9sbCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2Nyb2xsO1xyXG4gIH1dO1xyXG59XHJcblxyXG52YXIgJGFuaW1hdGVNaW5FcnIgPSBtaW5FcnIoJyRhbmltYXRlJyk7XHJcblxyXG4vKipcclxuICogQG5nZG9jIHByb3ZpZGVyXHJcbiAqIEBuYW1lICRhbmltYXRlUHJvdmlkZXJcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgJGFuaW1hdGUgdGhhdCBkb2Vzbid0IHBlcmZvcm0gYW55IGFuaW1hdGlvbnMsIGluc3RlYWQganVzdFxyXG4gKiBzeW5jaHJvbm91c2x5IHBlcmZvcm1zIERPTVxyXG4gKiB1cGRhdGVzIGFuZCBjYWxscyBkb25lKCkgY2FsbGJhY2tzLlxyXG4gKlxyXG4gKiBJbiBvcmRlciB0byBlbmFibGUgYW5pbWF0aW9ucyB0aGUgbmdBbmltYXRlIG1vZHVsZSBoYXMgdG8gYmUgbG9hZGVkLlxyXG4gKlxyXG4gKiBUbyBzZWUgdGhlIGZ1bmN0aW9uYWwgaW1wbGVtZW50YXRpb24gY2hlY2sgb3V0IHNyYy9uZ0FuaW1hdGUvYW5pbWF0ZS5qc1xyXG4gKi9cclxudmFyICRBbmltYXRlUHJvdmlkZXIgPSBbJyRwcm92aWRlJywgZnVuY3Rpb24oJHByb3ZpZGUpIHtcclxuXHJcblxyXG4gIHRoaXMuJCRzZWxlY3RvcnMgPSB7fTtcclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSAkYW5pbWF0ZVByb3ZpZGVyI3JlZ2lzdGVyXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBSZWdpc3RlcnMgYSBuZXcgaW5qZWN0YWJsZSBhbmltYXRpb24gZmFjdG9yeSBmdW5jdGlvbi4gVGhlIGZhY3RvcnkgZnVuY3Rpb24gcHJvZHVjZXMgdGhlXHJcbiAgICogYW5pbWF0aW9uIG9iamVjdCB3aGljaCBjb250YWlucyBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIGVhY2ggZXZlbnQgdGhhdCBpcyBleHBlY3RlZCB0byBiZVxyXG4gICAqIGFuaW1hdGVkLlxyXG4gICAqXHJcbiAgICogICAqIGBldmVudEZuYDogYGZ1bmN0aW9uKEVsZW1lbnQsIGRvbmVGdW5jdGlvbilgIFRoZSBlbGVtZW50IHRvIGFuaW1hdGUsIHRoZSBgZG9uZUZ1bmN0aW9uYFxyXG4gICAqICAgbXVzdCBiZSBjYWxsZWQgb25jZSB0aGUgZWxlbWVudCBhbmltYXRpb24gaXMgY29tcGxldGUuIElmIGEgZnVuY3Rpb24gaXMgcmV0dXJuZWQgdGhlbiB0aGVcclxuICAgKiAgIGFuaW1hdGlvbiBzZXJ2aWNlIHdpbGwgdXNlIHRoaXMgZnVuY3Rpb24gdG8gY2FuY2VsIHRoZSBhbmltYXRpb24gd2hlbmV2ZXIgYSBjYW5jZWwgZXZlbnQgaXNcclxuICAgKiAgIHRyaWdnZXJlZC5cclxuICAgKlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiAgIHJldHVybiB7XHJcbiAgICAgKiAgICAgZXZlbnRGbiA6IGZ1bmN0aW9uKGVsZW1lbnQsIGRvbmUpIHtcclxuICAgICAqICAgICAgIC8vY29kZSB0byBydW4gdGhlIGFuaW1hdGlvblxyXG4gICAgICogICAgICAgLy9vbmNlIGNvbXBsZXRlLCB0aGVuIHJ1biBkb25lKClcclxuICAgICAqICAgICAgIHJldHVybiBmdW5jdGlvbiBjYW5jZWxsYXRpb25GdW5jdGlvbigpIHtcclxuICAgICAqICAgICAgICAgLy9jb2RlIHRvIGNhbmNlbCB0aGUgYW5pbWF0aW9uXHJcbiAgICAgKiAgICAgICB9XHJcbiAgICAgKiAgICAgfVxyXG4gICAgICogICB9XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZhY3RvcnkgVGhlIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHRvIHJldHVybiB0aGUgYW5pbWF0aW9uXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuXHJcbiAgICovXHJcbiAgdGhpcy5yZWdpc3RlciA9IGZ1bmN0aW9uKG5hbWUsIGZhY3RvcnkpIHtcclxuICAgIHZhciBrZXkgPSBuYW1lICsgJy1hbmltYXRpb24nO1xyXG4gICAgaWYgKG5hbWUgJiYgbmFtZS5jaGFyQXQoMCkgIT0gJy4nKSB0aHJvdyAkYW5pbWF0ZU1pbkVycignbm90Y3NlbCcsXHJcbiAgICAgICAgXCJFeHBlY3RpbmcgY2xhc3Mgc2VsZWN0b3Igc3RhcnRpbmcgd2l0aCAnLicgZ290ICd7MH0nLlwiLCBuYW1lKTtcclxuICAgIHRoaXMuJCRzZWxlY3RvcnNbbmFtZS5zdWJzdHIoMSldID0ga2V5O1xyXG4gICAgJHByb3ZpZGUuZmFjdG9yeShrZXksIGZhY3RvcnkpO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSAkYW5pbWF0ZVByb3ZpZGVyI2NsYXNzTmFtZUZpbHRlclxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogU2V0cyBhbmQvb3IgcmV0dXJucyB0aGUgQ1NTIGNsYXNzIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGlzIGNoZWNrZWQgd2hlbiBwZXJmb3JtaW5nXHJcbiAgICogYW4gYW5pbWF0aW9uLiBVcG9uIGJvb3RzdHJhcCB0aGUgY2xhc3NOYW1lRmlsdGVyIHZhbHVlIGlzIG5vdCBzZXQgYXQgYWxsIGFuZCB3aWxsXHJcbiAgICogdGhlcmVmb3JlIGVuYWJsZSAkYW5pbWF0ZSB0byBhdHRlbXB0IHRvIHBlcmZvcm0gYW4gYW5pbWF0aW9uIG9uIGFueSBlbGVtZW50LlxyXG4gICAqIFdoZW4gc2V0dGluZyB0aGUgY2xhc3NOYW1lRmlsdGVyIHZhbHVlLCBhbmltYXRpb25zIHdpbGwgb25seSBiZSBwZXJmb3JtZWQgb24gZWxlbWVudHNcclxuICAgKiB0aGF0IHN1Y2Nlc3NmdWxseSBtYXRjaCB0aGUgZmlsdGVyIGV4cHJlc3Npb24uIFRoaXMgaW4gdHVybiBjYW4gYm9vc3QgcGVyZm9ybWFuY2VcclxuICAgKiBmb3IgbG93LXBvd2VyZWQgZGV2aWNlcyBhcyB3ZWxsIGFzIGFwcGxpY2F0aW9ucyBjb250YWluaW5nIGEgbG90IG9mIHN0cnVjdHVyYWwgb3BlcmF0aW9ucy5cclxuICAgKiBAcGFyYW0ge1JlZ0V4cD19IGV4cHJlc3Npb24gVGhlIGNsYXNzTmFtZSBleHByZXNzaW9uIHdoaWNoIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IGFsbCBhbmltYXRpb25zXHJcbiAgICogQHJldHVybiB7UmVnRXhwfSBUaGUgY3VycmVudCBDU1MgY2xhc3NOYW1lIGV4cHJlc3Npb24gdmFsdWUuIElmIG51bGwgdGhlbiB0aGVyZSBpcyBubyBleHByZXNzaW9uIHZhbHVlXHJcbiAgICovXHJcbiAgdGhpcy5jbGFzc05hbWVGaWx0ZXIgPSBmdW5jdGlvbihleHByZXNzaW9uKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICB0aGlzLiQkY2xhc3NOYW1lRmlsdGVyID0gKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBSZWdFeHApID8gZXhwcmVzc2lvbiA6IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy4kJGNsYXNzTmFtZUZpbHRlcjtcclxuICB9O1xyXG5cclxuICB0aGlzLiRnZXQgPSBbJyQkcScsICckJGFzeW5jQ2FsbGJhY2snLCAnJHJvb3RTY29wZScsIGZ1bmN0aW9uKCQkcSwgJCRhc3luY0NhbGxiYWNrLCAkcm9vdFNjb3BlKSB7XHJcblxyXG4gICAgdmFyIGN1cnJlbnREZWZlcjtcclxuXHJcbiAgICBmdW5jdGlvbiBydW5BbmltYXRpb25Qb3N0RGlnZXN0KGZuKSB7XHJcbiAgICAgIHZhciBjYW5jZWxGbiwgZGVmZXIgPSAkJHEuZGVmZXIoKTtcclxuICAgICAgZGVmZXIucHJvbWlzZS4kJGNhbmNlbEZuID0gZnVuY3Rpb24gbmdBbmltYXRlTWF5YmVDYW5jZWwoKSB7XHJcbiAgICAgICAgY2FuY2VsRm4gJiYgY2FuY2VsRm4oKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgICRyb290U2NvcGUuJCRwb3N0RGlnZXN0KGZ1bmN0aW9uIG5nQW5pbWF0ZVBvc3REaWdlc3QoKSB7XHJcbiAgICAgICAgY2FuY2VsRm4gPSBmbihmdW5jdGlvbiBuZ0FuaW1hdGVOb3RpZnlDb21wbGV0ZSgpIHtcclxuICAgICAgICAgIGRlZmVyLnJlc29sdmUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gZGVmZXIucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZXNvbHZlRWxlbWVudENsYXNzZXMoZWxlbWVudCwgY2xhc3Nlcykge1xyXG4gICAgICB2YXIgdG9BZGQgPSBbXSwgdG9SZW1vdmUgPSBbXTtcclxuXHJcbiAgICAgIHZhciBoYXNDbGFzc2VzID0gY3JlYXRlTWFwKCk7XHJcbiAgICAgIGZvckVhY2goKGVsZW1lbnQuYXR0cignY2xhc3MnKSB8fCAnJykuc3BsaXQoL1xccysvKSwgZnVuY3Rpb24oY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgaGFzQ2xhc3Nlc1tjbGFzc05hbWVdID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBmb3JFYWNoKGNsYXNzZXMsIGZ1bmN0aW9uKHN0YXR1cywgY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgdmFyIGhhc0NsYXNzID0gaGFzQ2xhc3Nlc1tjbGFzc05hbWVdO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgbW9zdCByZWNlbnQgY2xhc3MgbWFuaXB1bGF0aW9uICh2aWEgJGFuaW1hdGUpIHdhcyB0byByZW1vdmUgdGhlIGNsYXNzLCBhbmQgdGhlXHJcbiAgICAgICAgLy8gZWxlbWVudCBjdXJyZW50bHkgaGFzIHRoZSBjbGFzcywgdGhlIGNsYXNzIGlzIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbC4gT3RoZXJ3aXNlLCBpZlxyXG4gICAgICAgIC8vIHRoZSBtb3N0IHJlY2VudCBjbGFzcyBtYW5pcHVsYXRpb24gKHZpYSAkYW5pbWF0ZSkgd2FzIHRvIGFkZCB0aGUgY2xhc3MsIGFuZCB0aGVcclxuICAgICAgICAvLyBlbGVtZW50IGRvZXMgbm90IGN1cnJlbnRseSBoYXZlIHRoZSBjbGFzcywgdGhlIGNsYXNzIGlzIHNjaGVkdWxlZCB0byBiZSBhZGRlZC5cclxuICAgICAgICBpZiAoc3RhdHVzID09PSBmYWxzZSAmJiBoYXNDbGFzcykge1xyXG4gICAgICAgICAgdG9SZW1vdmUucHVzaChjbGFzc05hbWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSB0cnVlICYmICFoYXNDbGFzcykge1xyXG4gICAgICAgICAgdG9BZGQucHVzaChjbGFzc05hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gKHRvQWRkLmxlbmd0aCArIHRvUmVtb3ZlLmxlbmd0aCkgPiAwICYmXHJcbiAgICAgICAgW3RvQWRkLmxlbmd0aCA/IHRvQWRkIDogbnVsbCwgdG9SZW1vdmUubGVuZ3RoID8gdG9SZW1vdmUgOiBudWxsXTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjYWNoZWRDbGFzc01hbmlwdWxhdGlvbihjYWNoZSwgY2xhc3Nlcywgb3ApIHtcclxuICAgICAgZm9yICh2YXIgaT0wLCBpaSA9IGNsYXNzZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgIHZhciBjbGFzc05hbWUgPSBjbGFzc2VzW2ldO1xyXG4gICAgICAgIGNhY2hlW2NsYXNzTmFtZV0gPSBvcDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGFzeW5jUHJvbWlzZSgpIHtcclxuICAgICAgLy8gb25seSBzZXJ2ZSBvbmUgaW5zdGFuY2Ugb2YgYSBwcm9taXNlIGluIG9yZGVyIHRvIHNhdmUgQ1BVIGN5Y2xlc1xyXG4gICAgICBpZiAoIWN1cnJlbnREZWZlcikge1xyXG4gICAgICAgIGN1cnJlbnREZWZlciA9ICQkcS5kZWZlcigpO1xyXG4gICAgICAgICQkYXN5bmNDYWxsYmFjayhmdW5jdGlvbigpIHtcclxuICAgICAgICAgIGN1cnJlbnREZWZlci5yZXNvbHZlKCk7XHJcbiAgICAgICAgICBjdXJyZW50RGVmZXIgPSBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjdXJyZW50RGVmZXIucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBhcHBseVN0eWxlcyhlbGVtZW50LCBvcHRpb25zKSB7XHJcbiAgICAgIGlmIChhbmd1bGFyLmlzT2JqZWN0KG9wdGlvbnMpKSB7XHJcbiAgICAgICAgdmFyIHN0eWxlcyA9IGV4dGVuZChvcHRpb25zLmZyb20gfHwge30sIG9wdGlvbnMudG8gfHwge30pO1xyXG4gICAgICAgIGVsZW1lbnQuY3NzKHN0eWxlcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAbmdkb2Mgc2VydmljZVxyXG4gICAgICogQG5hbWUgJGFuaW1hdGVcclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgJGFuaW1hdGUgc2VydmljZSBwcm92aWRlcyBydWRpbWVudGFyeSBET00gbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyB0b1xyXG4gICAgICogaW5zZXJ0LCByZW1vdmUgYW5kIG1vdmUgZWxlbWVudHMgd2l0aGluIHRoZSBET00sIGFzIHdlbGwgYXMgYWRkaW5nIGFuZCByZW1vdmluZyBjbGFzc2VzLlxyXG4gICAgICogVGhpcyBzZXJ2aWNlIGlzIHRoZSBjb3JlIHNlcnZpY2UgdXNlZCBieSB0aGUgbmdBbmltYXRlICRhbmltYXRvciBzZXJ2aWNlIHdoaWNoIHByb3ZpZGVzXHJcbiAgICAgKiBoaWdoLWxldmVsIGFuaW1hdGlvbiBob29rcyBmb3IgQ1NTIGFuZCBKYXZhU2NyaXB0LlxyXG4gICAgICpcclxuICAgICAqICRhbmltYXRlIGlzIGF2YWlsYWJsZSBpbiB0aGUgQW5ndWxhckpTIGNvcmUsIGhvd2V2ZXIsIHRoZSBuZ0FuaW1hdGUgbW9kdWxlIG11c3QgYmUgaW5jbHVkZWRcclxuICAgICAqIHRvIGVuYWJsZSBmdWxsIG91dCBhbmltYXRpb24gc3VwcG9ydC4gT3RoZXJ3aXNlLCAkYW5pbWF0ZSB3aWxsIG9ubHkgcGVyZm9ybSBzaW1wbGUgRE9NXHJcbiAgICAgKiBtYW5pcHVsYXRpb24gb3BlcmF0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBUbyBsZWFybiBtb3JlIGFib3V0IGVuYWJsaW5nIGFuaW1hdGlvbiBzdXBwb3J0LCBjbGljayBoZXJlIHRvIHZpc2l0IHRoZSB7QGxpbmsgbmdBbmltYXRlXHJcbiAgICAgKiBuZ0FuaW1hdGUgbW9kdWxlIHBhZ2V9IGFzIHdlbGwgYXMgdGhlIHtAbGluayBuZ0FuaW1hdGUuJGFuaW1hdGUgbmdBbmltYXRlICRhbmltYXRlIHNlcnZpY2VcclxuICAgICAqIHBhZ2V9LlxyXG4gICAgICovXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhbmltYXRlOiBmdW5jdGlvbihlbGVtZW50LCBmcm9tLCB0bykge1xyXG4gICAgICAgIGFwcGx5U3R5bGVzKGVsZW1lbnQsIHsgZnJvbTogZnJvbSwgdG86IHRvIH0pO1xyXG4gICAgICAgIHJldHVybiBhc3luY1Byb21pc2UoKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAqIEBuYW1lICRhbmltYXRlI2VudGVyXHJcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBJbnNlcnRzIHRoZSBlbGVtZW50IGludG8gdGhlIERPTSBlaXRoZXIgYWZ0ZXIgdGhlIGBhZnRlcmAgZWxlbWVudCBvclxyXG4gICAgICAgKiBhcyB0aGUgZmlyc3QgY2hpbGQgd2l0aGluIHRoZSBgcGFyZW50YCBlbGVtZW50LiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYSBwcm9taXNlXHJcbiAgICAgICAqIGlzIHJldHVybmVkIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBhdCBhIGxhdGVyIHRpbWUuXHJcbiAgICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVudCB0aGUgZWxlbWVudCB3aGljaCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIERPTVxyXG4gICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IHBhcmVudCB0aGUgcGFyZW50IGVsZW1lbnQgd2hpY2ggd2lsbCBhcHBlbmQgdGhlIGVsZW1lbnQgYXNcclxuICAgICAgICogICBhIGNoaWxkIChpZiB0aGUgYWZ0ZXIgZWxlbWVudCBpcyBub3QgcHJlc2VudClcclxuICAgICAgICogQHBhcmFtIHtET01FbGVtZW50fSBhZnRlciB0aGUgc2libGluZyBlbGVtZW50IHdoaWNoIHdpbGwgYXBwZW5kIHRoZSBlbGVtZW50XHJcbiAgICAgICAqICAgYWZ0ZXIgaXRzZWxmXHJcbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0PX0gb3B0aW9ucyBhbiBvcHRpb25hbCBjb2xsZWN0aW9uIG9mIHN0eWxlcyB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudC5cclxuICAgICAgICogQHJldHVybiB7UHJvbWlzZX0gdGhlIGFuaW1hdGlvbiBjYWxsYmFjayBwcm9taXNlXHJcbiAgICAgICAqL1xyXG4gICAgICBlbnRlcjogZnVuY3Rpb24oZWxlbWVudCwgcGFyZW50LCBhZnRlciwgb3B0aW9ucykge1xyXG4gICAgICAgIGFwcGx5U3R5bGVzKGVsZW1lbnQsIG9wdGlvbnMpO1xyXG4gICAgICAgIGFmdGVyID8gYWZ0ZXIuYWZ0ZXIoZWxlbWVudClcclxuICAgICAgICAgICAgICA6IHBhcmVudC5wcmVwZW5kKGVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBhc3luY1Byb21pc2UoKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAqIEBuYW1lICRhbmltYXRlI2xlYXZlXHJcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBSZW1vdmVzIHRoZSBlbGVtZW50IGZyb20gdGhlIERPTS4gV2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGEgcHJvbWlzZVxyXG4gICAgICAgKiBpcyByZXR1cm5lZCB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgYXQgYSBsYXRlciB0aW1lLlxyXG4gICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgd2hpY2ggd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIERPTVxyXG4gICAgICAgKiBAcGFyYW0ge29iamVjdD19IG9wdGlvbnMgYW4gb3B0aW9uYWwgY29sbGVjdGlvbiBvZiBvcHRpb25zIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50LlxyXG4gICAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSB0aGUgYW5pbWF0aW9uIGNhbGxiYWNrIHByb21pc2VcclxuICAgICAgICovXHJcbiAgICAgIGxlYXZlOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKSB7XHJcbiAgICAgICAgZWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgICByZXR1cm4gYXN5bmNQcm9taXNlKCk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICpcclxuICAgICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICAgKiBAbmFtZSAkYW5pbWF0ZSNtb3ZlXHJcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBNb3ZlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHByb3ZpZGVkIGVsZW1lbnQgd2l0aGluIHRoZSBET00gdG8gYmUgcGxhY2VkXHJcbiAgICAgICAqIGVpdGhlciBhZnRlciB0aGUgYGFmdGVyYCBlbGVtZW50IG9yIGluc2lkZSBvZiB0aGUgYHBhcmVudGAgZWxlbWVudC4gV2hlbiB0aGUgZnVuY3Rpb25cclxuICAgICAgICogaXMgY2FsbGVkIGEgcHJvbWlzZSBpcyByZXR1cm5lZCB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgYXQgYSBsYXRlciB0aW1lLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgd2hpY2ggd2lsbCBiZSBtb3ZlZCBhcm91bmQgd2l0aGluIHRoZVxyXG4gICAgICAgKiAgIERPTVxyXG4gICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IHBhcmVudCB0aGUgcGFyZW50IGVsZW1lbnQgd2hlcmUgdGhlIGVsZW1lbnQgd2lsbCBiZVxyXG4gICAgICAgKiAgIGluc2VydGVkIGludG8gKGlmIHRoZSBhZnRlciBlbGVtZW50IGlzIG5vdCBwcmVzZW50KVxyXG4gICAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGFmdGVyIHRoZSBzaWJsaW5nIGVsZW1lbnQgd2hlcmUgdGhlIGVsZW1lbnQgd2lsbCBiZVxyXG4gICAgICAgKiAgIHBvc2l0aW9uZWQgbmV4dCB0b1xyXG4gICAgICAgKiBAcGFyYW0ge29iamVjdD19IG9wdGlvbnMgYW4gb3B0aW9uYWwgY29sbGVjdGlvbiBvZiBvcHRpb25zIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50LlxyXG4gICAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSB0aGUgYW5pbWF0aW9uIGNhbGxiYWNrIHByb21pc2VcclxuICAgICAgICovXHJcbiAgICAgIG1vdmU6IGZ1bmN0aW9uKGVsZW1lbnQsIHBhcmVudCwgYWZ0ZXIsIG9wdGlvbnMpIHtcclxuICAgICAgICAvLyBEbyBub3QgcmVtb3ZlIGVsZW1lbnQgYmVmb3JlIGluc2VydC4gUmVtb3Zpbmcgd2lsbCBjYXVzZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGVcclxuICAgICAgICAvLyBlbGVtZW50IHRvIGJlIGRyb3BwZWQuIEluc2VydCB3aWxsIGltcGxpY2l0bHkgZG8gdGhlIHJlbW92ZS5cclxuICAgICAgICByZXR1cm4gdGhpcy5lbnRlcihlbGVtZW50LCBwYXJlbnQsIGFmdGVyLCBvcHRpb25zKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAqIEBuYW1lICRhbmltYXRlI2FkZENsYXNzXHJcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBBZGRzIHRoZSBwcm92aWRlZCBjbGFzc05hbWUgQ1NTIGNsYXNzIHZhbHVlIHRvIHRoZSBwcm92aWRlZCBlbGVtZW50LlxyXG4gICAgICAgKiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYSBwcm9taXNlIGlzIHJldHVybmVkIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBhdCBhIGxhdGVyIHRpbWUuXHJcbiAgICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVudCB0aGUgZWxlbWVudCB3aGljaCB3aWxsIGhhdmUgdGhlIGNsYXNzTmFtZSB2YWx1ZVxyXG4gICAgICAgKiAgIGFkZGVkIHRvIGl0XHJcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbGVtZW50XHJcbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0PX0gb3B0aW9ucyBhbiBvcHRpb25hbCBjb2xsZWN0aW9uIG9mIG9wdGlvbnMgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQuXHJcbiAgICAgICAqIEByZXR1cm4ge1Byb21pc2V9IHRoZSBhbmltYXRpb24gY2FsbGJhY2sgcHJvbWlzZVxyXG4gICAgICAgKi9cclxuICAgICAgYWRkQ2xhc3M6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSwgb3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldENsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSwgW10sIG9wdGlvbnMpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgJCRhZGRDbGFzc0ltbWVkaWF0ZWx5OiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUsIG9wdGlvbnMpIHtcclxuICAgICAgICBlbGVtZW50ID0ganFMaXRlKGVsZW1lbnQpO1xyXG4gICAgICAgIGNsYXNzTmFtZSA9ICFpc1N0cmluZyhjbGFzc05hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKGlzQXJyYXkoY2xhc3NOYW1lKSA/IGNsYXNzTmFtZS5qb2luKCcgJykgOiAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjbGFzc05hbWU7XHJcbiAgICAgICAgZm9yRWFjaChlbGVtZW50LCBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgICBqcUxpdGVBZGRDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGFwcGx5U3R5bGVzKGVsZW1lbnQsIG9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiBhc3luY1Byb21pc2UoKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAqIEBuYW1lICRhbmltYXRlI3JlbW92ZUNsYXNzXHJcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvbiBSZW1vdmVzIHRoZSBwcm92aWRlZCBjbGFzc05hbWUgQ1NTIGNsYXNzIHZhbHVlIGZyb20gdGhlIHByb3ZpZGVkIGVsZW1lbnQuXHJcbiAgICAgICAqIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBhIHByb21pc2UgaXMgcmV0dXJuZWQgdGhhdCB3aWxsIGJlIHJlc29sdmVkIGF0IGEgbGF0ZXIgdGltZS5cclxuICAgICAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHdoaWNoIHdpbGwgaGF2ZSB0aGUgY2xhc3NOYW1lIHZhbHVlXHJcbiAgICAgICAqICAgcmVtb3ZlZCBmcm9tIGl0XHJcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyB3aGljaCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgZWxlbWVudFxyXG4gICAgICAgKiBAcGFyYW0ge29iamVjdD19IG9wdGlvbnMgYW4gb3B0aW9uYWwgY29sbGVjdGlvbiBvZiBvcHRpb25zIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50LlxyXG4gICAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSB0aGUgYW5pbWF0aW9uIGNhbGxiYWNrIHByb21pc2VcclxuICAgICAgICovXHJcbiAgICAgIHJlbW92ZUNsYXNzOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUsIG9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRDbGFzcyhlbGVtZW50LCBbXSwgY2xhc3NOYW1lLCBvcHRpb25zKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgICQkcmVtb3ZlQ2xhc3NJbW1lZGlhdGVseTogZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lLCBvcHRpb25zKSB7XHJcbiAgICAgICAgZWxlbWVudCA9IGpxTGl0ZShlbGVtZW50KTtcclxuICAgICAgICBjbGFzc05hbWUgPSAhaXNTdHJpbmcoY2xhc3NOYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChpc0FycmF5KGNsYXNzTmFtZSkgPyBjbGFzc05hbWUuam9pbignICcpIDogJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY2xhc3NOYW1lO1xyXG4gICAgICAgIGZvckVhY2goZWxlbWVudCwgZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgICAganFMaXRlUmVtb3ZlQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBhcHBseVN0eWxlcyhlbGVtZW50LCBvcHRpb25zKTtcclxuICAgICAgICByZXR1cm4gYXN5bmNQcm9taXNlKCk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICpcclxuICAgICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICAgKiBAbmFtZSAkYW5pbWF0ZSNzZXRDbGFzc1xyXG4gICAgICAgKiBAa2luZCBmdW5jdGlvblxyXG4gICAgICAgKiBAZGVzY3JpcHRpb24gQWRkcyBhbmQvb3IgcmVtb3ZlcyB0aGUgZ2l2ZW4gQ1NTIGNsYXNzZXMgdG8gYW5kIGZyb20gdGhlIGVsZW1lbnQuXHJcbiAgICAgICAqIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBhIHByb21pc2UgaXMgcmV0dXJuZWQgdGhhdCB3aWxsIGJlIHJlc29sdmVkIGF0IGEgbGF0ZXIgdGltZS5cclxuICAgICAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHdoaWNoIHdpbGwgaGF2ZSBpdHMgQ1NTIGNsYXNzZXMgY2hhbmdlZFxyXG4gICAgICAgKiAgIHJlbW92ZWQgZnJvbSBpdFxyXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkIHRoZSBDU1MgY2xhc3NlcyB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbGVtZW50XHJcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZW1vdmUgdGhlIENTUyBjbGFzcyB3aGljaCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgZWxlbWVudFxyXG4gICAgICAgKiBAcGFyYW0ge29iamVjdD19IG9wdGlvbnMgYW4gb3B0aW9uYWwgY29sbGVjdGlvbiBvZiBvcHRpb25zIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50LlxyXG4gICAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSB0aGUgYW5pbWF0aW9uIGNhbGxiYWNrIHByb21pc2VcclxuICAgICAgICovXHJcbiAgICAgIHNldENsYXNzOiBmdW5jdGlvbihlbGVtZW50LCBhZGQsIHJlbW92ZSwgb3B0aW9ucykge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB2YXIgU1RPUkFHRV9LRVkgPSAnJCRhbmltYXRlQ2xhc3Nlcyc7XHJcbiAgICAgICAgdmFyIGNyZWF0ZWRDYWNoZSA9IGZhbHNlO1xyXG4gICAgICAgIGVsZW1lbnQgPSBqcUxpdGUoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIHZhciBjYWNoZSA9IGVsZW1lbnQuZGF0YShTVE9SQUdFX0tFWSk7XHJcbiAgICAgICAgaWYgKCFjYWNoZSkge1xyXG4gICAgICAgICAgY2FjaGUgPSB7XHJcbiAgICAgICAgICAgIGNsYXNzZXM6IHt9LFxyXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgY3JlYXRlZENhY2hlID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMgJiYgY2FjaGUub3B0aW9ucykge1xyXG4gICAgICAgICAgY2FjaGUub3B0aW9ucyA9IGFuZ3VsYXIuZXh0ZW5kKGNhY2hlLm9wdGlvbnMgfHwge30sIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNsYXNzZXMgPSBjYWNoZS5jbGFzc2VzO1xyXG5cclxuICAgICAgICBhZGQgPSBpc0FycmF5KGFkZCkgPyBhZGQgOiBhZGQuc3BsaXQoJyAnKTtcclxuICAgICAgICByZW1vdmUgPSBpc0FycmF5KHJlbW92ZSkgPyByZW1vdmUgOiByZW1vdmUuc3BsaXQoJyAnKTtcclxuICAgICAgICBjYWNoZWRDbGFzc01hbmlwdWxhdGlvbihjbGFzc2VzLCBhZGQsIHRydWUpO1xyXG4gICAgICAgIGNhY2hlZENsYXNzTWFuaXB1bGF0aW9uKGNsYXNzZXMsIHJlbW92ZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICBpZiAoY3JlYXRlZENhY2hlKSB7XHJcbiAgICAgICAgICBjYWNoZS5wcm9taXNlID0gcnVuQW5pbWF0aW9uUG9zdERpZ2VzdChmdW5jdGlvbihkb25lKSB7XHJcbiAgICAgICAgICAgIHZhciBjYWNoZSA9IGVsZW1lbnQuZGF0YShTVE9SQUdFX0tFWSk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRGF0YShTVE9SQUdFX0tFWSk7XHJcblxyXG4gICAgICAgICAgICAvLyBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgZWxlbWVudCBpcyByZW1vdmVkIGJlZm9yZSBwb3N0RGlnZXN0XHJcbiAgICAgICAgICAgIC8vIGlzIHJ1biB0aGVuIHRoZSBjYWNoZSB3aWxsIGJlIHVuZGVmaW5lZCBhbmQgdGhlcmUgd2lsbCBiZVxyXG4gICAgICAgICAgICAvLyBubyBuZWVkIGFueW1vcmUgdG8gYWRkIG9yIHJlbW92ZSBhbmQgb2YgdGhlIGVsZW1lbnQgY2xhc3Nlc1xyXG4gICAgICAgICAgICBpZiAoY2FjaGUpIHtcclxuICAgICAgICAgICAgICB2YXIgY2xhc3NlcyA9IHJlc29sdmVFbGVtZW50Q2xhc3NlcyhlbGVtZW50LCBjYWNoZS5jbGFzc2VzKTtcclxuICAgICAgICAgICAgICBpZiAoY2xhc3Nlcykge1xyXG4gICAgICAgICAgICAgICAgc2VsZi4kJHNldENsYXNzSW1tZWRpYXRlbHkoZWxlbWVudCwgY2xhc3Nlc1swXSwgY2xhc3Nlc1sxXSwgY2FjaGUub3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkb25lKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGVsZW1lbnQuZGF0YShTVE9SQUdFX0tFWSwgY2FjaGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNhY2hlLnByb21pc2U7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAkJHNldENsYXNzSW1tZWRpYXRlbHk6IGZ1bmN0aW9uKGVsZW1lbnQsIGFkZCwgcmVtb3ZlLCBvcHRpb25zKSB7XHJcbiAgICAgICAgYWRkICYmIHRoaXMuJCRhZGRDbGFzc0ltbWVkaWF0ZWx5KGVsZW1lbnQsIGFkZCk7XHJcbiAgICAgICAgcmVtb3ZlICYmIHRoaXMuJCRyZW1vdmVDbGFzc0ltbWVkaWF0ZWx5KGVsZW1lbnQsIHJlbW92ZSk7XHJcbiAgICAgICAgYXBwbHlTdHlsZXMoZWxlbWVudCwgb3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIGFzeW5jUHJvbWlzZSgpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgZW5hYmxlZDogbm9vcCxcclxuICAgICAgY2FuY2VsOiBub29wXHJcbiAgICB9O1xyXG4gIH1dO1xyXG59XTtcclxuXHJcbmZ1bmN0aW9uICQkQXN5bmNDYWxsYmFja1Byb3ZpZGVyKCkge1xyXG4gIHRoaXMuJGdldCA9IFsnJCRyQUYnLCAnJHRpbWVvdXQnLCBmdW5jdGlvbigkJHJBRiwgJHRpbWVvdXQpIHtcclxuICAgIHJldHVybiAkJHJBRi5zdXBwb3J0ZWRcclxuICAgICAgPyBmdW5jdGlvbihmbikgeyByZXR1cm4gJCRyQUYoZm4pOyB9XHJcbiAgICAgIDogZnVuY3Rpb24oZm4pIHtcclxuICAgICAgICByZXR1cm4gJHRpbWVvdXQoZm4sIDAsIGZhbHNlKTtcclxuICAgICAgfTtcclxuICB9XTtcclxufVxyXG5cclxuLyogZ2xvYmFsIHN0cmlwSGFzaDogdHJ1ZSAqL1xyXG5cclxuLyoqXHJcbiAqICEgVGhpcyBpcyBhIHByaXZhdGUgdW5kb2N1bWVudGVkIHNlcnZpY2UgIVxyXG4gKlxyXG4gKiBAbmFtZSAkYnJvd3NlclxyXG4gKiBAcmVxdWlyZXMgJGxvZ1xyXG4gKiBAZGVzY3JpcHRpb25cclxuICogVGhpcyBvYmplY3QgaGFzIHR3byBnb2FsczpcclxuICpcclxuICogLSBoaWRlIGFsbCB0aGUgZ2xvYmFsIHN0YXRlIGluIHRoZSBicm93c2VyIGNhdXNlZCBieSB0aGUgd2luZG93IG9iamVjdFxyXG4gKiAtIGFic3RyYWN0IGF3YXkgYWxsIHRoZSBicm93c2VyIHNwZWNpZmljIGZlYXR1cmVzIGFuZCBpbmNvbnNpc3RlbmNpZXNcclxuICpcclxuICogRm9yIHRlc3RzIHdlIHByb3ZpZGUge0BsaW5rIG5nTW9jay4kYnJvd3NlciBtb2NrIGltcGxlbWVudGF0aW9ufSBvZiB0aGUgYCRicm93c2VyYFxyXG4gKiBzZXJ2aWNlLCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgY29udmVuaWVudCB0ZXN0aW5nIG9mIHRoZSBhcHBsaWNhdGlvbiB3aXRob3V0IHRoZSBpbnRlcmFjdGlvbiB3aXRoXHJcbiAqIHRoZSByZWFsIGJyb3dzZXIgYXBpcy5cclxuICovXHJcbi8qKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gd2luZG93IFRoZSBnbG9iYWwgd2luZG93IG9iamVjdC5cclxuICogQHBhcmFtIHtvYmplY3R9IGRvY3VtZW50IGpRdWVyeSB3cmFwcGVkIGRvY3VtZW50LlxyXG4gKiBAcGFyYW0ge29iamVjdH0gJGxvZyB3aW5kb3cuY29uc29sZSBvciBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBpbnRlcmZhY2UuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSAkc25pZmZlciAkc25pZmZlciBzZXJ2aWNlXHJcbiAqL1xyXG5mdW5jdGlvbiBCcm93c2VyKHdpbmRvdywgZG9jdW1lbnQsICRsb2csICRzbmlmZmVyKSB7XHJcbiAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICByYXdEb2N1bWVudCA9IGRvY3VtZW50WzBdLFxyXG4gICAgICBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbixcclxuICAgICAgaGlzdG9yeSA9IHdpbmRvdy5oaXN0b3J5LFxyXG4gICAgICBzZXRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQsXHJcbiAgICAgIGNsZWFyVGltZW91dCA9IHdpbmRvdy5jbGVhclRpbWVvdXQsXHJcbiAgICAgIHBlbmRpbmdEZWZlcklkcyA9IHt9O1xyXG5cclxuICBzZWxmLmlzTW9jayA9IGZhbHNlO1xyXG5cclxuICB2YXIgb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQgPSAwO1xyXG4gIHZhciBvdXRzdGFuZGluZ1JlcXVlc3RDYWxsYmFja3MgPSBbXTtcclxuXHJcbiAgLy8gVE9ETyh2b2p0YSk6IHJlbW92ZSB0aGlzIHRlbXBvcmFyeSBhcGlcclxuICBzZWxmLiQkY29tcGxldGVPdXRzdGFuZGluZ1JlcXVlc3QgPSBjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdDtcclxuICBzZWxmLiQkaW5jT3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQgPSBmdW5jdGlvbigpIHsgb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQrKzsgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZXMgdGhlIGBmbmAgZnVuY3Rpb24oc3VwcG9ydHMgY3VycnlpbmcpIGFuZCBkZWNyZW1lbnRzIHRoZSBgb3V0c3RhbmRpbmdSZXF1ZXN0Q2FsbGJhY2tzYFxyXG4gICAqIGNvdW50ZXIuIElmIHRoZSBjb3VudGVyIHJlYWNoZXMgMCwgYWxsIHRoZSBgb3V0c3RhbmRpbmdSZXF1ZXN0Q2FsbGJhY2tzYCBhcmUgZXhlY3V0ZWQuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gY29tcGxldGVPdXRzdGFuZGluZ1JlcXVlc3QoZm4pIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGZuLmFwcGx5KG51bGwsIHNsaWNlQXJncyhhcmd1bWVudHMsIDEpKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIG91dHN0YW5kaW5nUmVxdWVzdENvdW50LS07XHJcbiAgICAgIGlmIChvdXRzdGFuZGluZ1JlcXVlc3RDb3VudCA9PT0gMCkge1xyXG4gICAgICAgIHdoaWxlIChvdXRzdGFuZGluZ1JlcXVlc3RDYWxsYmFja3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBvdXRzdGFuZGluZ1JlcXVlc3RDYWxsYmFja3MucG9wKCkoKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgJGxvZy5lcnJvcihlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogTm90ZTogdGhpcyBtZXRob2QgaXMgdXNlZCBvbmx5IGJ5IHNjZW5hcmlvIHJ1bm5lclxyXG4gICAqIFRPRE8odm9qdGEpOiBwcmVmaXggdGhpcyBtZXRob2Qgd2l0aCAkJCA/XHJcbiAgICogQHBhcmFtIHtmdW5jdGlvbigpfSBjYWxsYmFjayBGdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gbm8gb3V0c3RhbmRpbmcgcmVxdWVzdFxyXG4gICAqL1xyXG4gIHNlbGYubm90aWZ5V2hlbk5vT3V0c3RhbmRpbmdSZXF1ZXN0cyA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAvLyBmb3JjZSBicm93c2VyIHRvIGV4ZWN1dGUgYWxsIHBvbGxGbnMgLSB0aGlzIGlzIG5lZWRlZCBzbyB0aGF0IGNvb2tpZXMgYW5kIG90aGVyIHBvbGxlcnMgZmlyZVxyXG4gICAgLy8gYXQgc29tZSBkZXRlcm1pbmlzdGljIHRpbWUgaW4gcmVzcGVjdCB0byB0aGUgdGVzdCBydW5uZXIncyBhY3Rpb25zLiBMZWF2aW5nIHRoaW5ncyB1cCB0byB0aGVcclxuICAgIC8vIHJlZ3VsYXIgcG9sbGVyIHdvdWxkIHJlc3VsdCBpbiBmbGFreSB0ZXN0cy5cclxuICAgIGZvckVhY2gocG9sbEZucywgZnVuY3Rpb24ocG9sbEZuKSB7IHBvbGxGbigpOyB9KTtcclxuXHJcbiAgICBpZiAob3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQgPT09IDApIHtcclxuICAgICAgY2FsbGJhY2soKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG91dHN0YW5kaW5nUmVxdWVzdENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIC8vIFBvbGwgV2F0Y2hlciBBUElcclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIHZhciBwb2xsRm5zID0gW10sXHJcbiAgICAgIHBvbGxUaW1lb3V0O1xyXG5cclxuICAvKipcclxuICAgKiBAbmFtZSAkYnJvd3NlciNhZGRQb2xsRm5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gZm4gUG9sbCBmdW5jdGlvbiB0byBhZGRcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIEFkZHMgYSBmdW5jdGlvbiB0byB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBwb2xsZXIgcGVyaW9kaWNhbGx5IGV4ZWN1dGVzLFxyXG4gICAqIGFuZCBzdGFydHMgcG9sbGluZyBpZiBub3Qgc3RhcnRlZCB5ZXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24oKX0gdGhlIGFkZGVkIGZ1bmN0aW9uXHJcbiAgICovXHJcbiAgc2VsZi5hZGRQb2xsRm4gPSBmdW5jdGlvbihmbikge1xyXG4gICAgaWYgKGlzVW5kZWZpbmVkKHBvbGxUaW1lb3V0KSkgc3RhcnRQb2xsZXIoMTAwLCBzZXRUaW1lb3V0KTtcclxuICAgIHBvbGxGbnMucHVzaChmbik7XHJcbiAgICByZXR1cm4gZm47XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGludGVydmFsIEhvdyBvZnRlbiBzaG91bGQgYnJvd3NlciBjYWxsIHBvbGwgZnVuY3Rpb25zIChtcylcclxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IHNldFRpbWVvdXQgUmVmZXJlbmNlIHRvIGEgcmVhbCBvciBmYWtlIGBzZXRUaW1lb3V0YCBmdW5jdGlvbi5cclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIENvbmZpZ3VyZXMgdGhlIHBvbGxlciB0byBydW4gaW4gdGhlIHNwZWNpZmllZCBpbnRlcnZhbHMsIHVzaW5nIHRoZSBzcGVjaWZpZWRcclxuICAgKiBzZXRUaW1lb3V0IGZuIGFuZCBraWNrcyBpdCBvZmYuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gc3RhcnRQb2xsZXIoaW50ZXJ2YWwsIHNldFRpbWVvdXQpIHtcclxuICAgIChmdW5jdGlvbiBjaGVjaygpIHtcclxuICAgICAgZm9yRWFjaChwb2xsRm5zLCBmdW5jdGlvbihwb2xsRm4pIHsgcG9sbEZuKCk7IH0pO1xyXG4gICAgICBwb2xsVGltZW91dCA9IHNldFRpbWVvdXQoY2hlY2ssIGludGVydmFsKTtcclxuICAgIH0pKCk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIC8vIFVSTCBBUElcclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICB2YXIgY2FjaGVkU3RhdGUsIGxhc3RIaXN0b3J5U3RhdGUsXHJcbiAgICAgIGxhc3RCcm93c2VyVXJsID0gbG9jYXRpb24uaHJlZixcclxuICAgICAgYmFzZUVsZW1lbnQgPSBkb2N1bWVudC5maW5kKCdiYXNlJyksXHJcbiAgICAgIHJlbG9hZExvY2F0aW9uID0gbnVsbDtcclxuXHJcbiAgY2FjaGVTdGF0ZSgpO1xyXG4gIGxhc3RIaXN0b3J5U3RhdGUgPSBjYWNoZWRTdGF0ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG5hbWUgJGJyb3dzZXIjdXJsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBHRVRURVI6XHJcbiAgICogV2l0aG91dCBhbnkgYXJndW1lbnQsIHRoaXMgbWV0aG9kIGp1c3QgcmV0dXJucyBjdXJyZW50IHZhbHVlIG9mIGxvY2F0aW9uLmhyZWYuXHJcbiAgICpcclxuICAgKiBTRVRURVI6XHJcbiAgICogV2l0aCBhdCBsZWFzdCBvbmUgYXJndW1lbnQsIHRoaXMgbWV0aG9kIHNldHMgdXJsIHRvIG5ldyB2YWx1ZS5cclxuICAgKiBJZiBodG1sNSBoaXN0b3J5IGFwaSBzdXBwb3J0ZWQsIHB1c2hTdGF0ZS9yZXBsYWNlU3RhdGUgaXMgdXNlZCwgb3RoZXJ3aXNlXHJcbiAgICogbG9jYXRpb24uaHJlZi9sb2NhdGlvbi5yZXBsYWNlIGlzIHVzZWQuXHJcbiAgICogUmV0dXJucyBpdHMgb3duIGluc3RhbmNlIHRvIGFsbG93IGNoYWluaW5nXHJcbiAgICpcclxuICAgKiBOT1RFOiB0aGlzIGFwaSBpcyBpbnRlbmRlZCBmb3IgdXNlIG9ubHkgYnkgdGhlICRsb2NhdGlvbiBzZXJ2aWNlLiBQbGVhc2UgdXNlIHRoZVxyXG4gICAqIHtAbGluayBuZy4kbG9jYXRpb24gJGxvY2F0aW9uIHNlcnZpY2V9IHRvIGNoYW5nZSB1cmwuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIE5ldyB1cmwgKHdoZW4gdXNlZCBhcyBzZXR0ZXIpXHJcbiAgICogQHBhcmFtIHtib29sZWFuPX0gcmVwbGFjZSBTaG91bGQgbmV3IHVybCByZXBsYWNlIGN1cnJlbnQgaGlzdG9yeSByZWNvcmQ/XHJcbiAgICogQHBhcmFtIHtvYmplY3Q9fSBzdGF0ZSBvYmplY3QgdG8gdXNlIHdpdGggcHVzaFN0YXRlL3JlcGxhY2VTdGF0ZVxyXG4gICAqL1xyXG4gIHNlbGYudXJsID0gZnVuY3Rpb24odXJsLCByZXBsYWNlLCBzdGF0ZSkge1xyXG4gICAgLy8gSW4gbW9kZXJuIGJyb3dzZXJzIGBoaXN0b3J5LnN0YXRlYCBpcyBgbnVsbGAgYnkgZGVmYXVsdDsgdHJlYXRpbmcgaXQgc2VwYXJhdGVseVxyXG4gICAgLy8gZnJvbSBgdW5kZWZpbmVkYCB3b3VsZCBjYXVzZSBgJGJyb3dzZXIudXJsKCcvZm9vJylgIHRvIGNoYW5nZSBgaGlzdG9yeS5zdGF0ZWBcclxuICAgIC8vIHRvIHVuZGVmaW5lZCB2aWEgYHB1c2hTdGF0ZWAuIEluc3RlYWQsIGxldCdzIGNoYW5nZSBgdW5kZWZpbmVkYCB0byBgbnVsbGAgaGVyZS5cclxuICAgIGlmIChpc1VuZGVmaW5lZChzdGF0ZSkpIHtcclxuICAgICAgc3RhdGUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFuZHJvaWQgQnJvd3NlciBCRkNhY2hlIGNhdXNlcyBsb2NhdGlvbiwgaGlzdG9yeSByZWZlcmVuY2UgdG8gYmVjb21lIHN0YWxlLlxyXG4gICAgaWYgKGxvY2F0aW9uICE9PSB3aW5kb3cubG9jYXRpb24pIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uO1xyXG4gICAgaWYgKGhpc3RvcnkgIT09IHdpbmRvdy5oaXN0b3J5KSBoaXN0b3J5ID0gd2luZG93Lmhpc3Rvcnk7XHJcblxyXG4gICAgLy8gc2V0dGVyXHJcbiAgICBpZiAodXJsKSB7XHJcbiAgICAgIHZhciBzYW1lU3RhdGUgPSBsYXN0SGlzdG9yeVN0YXRlID09PSBzdGF0ZTtcclxuXHJcbiAgICAgIC8vIERvbid0IGNoYW5nZSBhbnl0aGluZyBpZiBwcmV2aW91cyBhbmQgY3VycmVudCBVUkxzIGFuZCBzdGF0ZXMgbWF0Y2guIFRoaXMgYWxzbyBwcmV2ZW50c1xyXG4gICAgICAvLyBJRTwxMCBmcm9tIGdldHRpbmcgaW50byByZWRpcmVjdCBsb29wIHdoZW4gaW4gTG9jYXRpb25IYXNoYmFuZ0luSHRtbDVVcmwgbW9kZS5cclxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIuanMvY29tbWl0L2ZmYjI3MDFcclxuICAgICAgaWYgKGxhc3RCcm93c2VyVXJsID09PSB1cmwgJiYgKCEkc25pZmZlci5oaXN0b3J5IHx8IHNhbWVTdGF0ZSkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdmFyIHNhbWVCYXNlID0gbGFzdEJyb3dzZXJVcmwgJiYgc3RyaXBIYXNoKGxhc3RCcm93c2VyVXJsKSA9PT0gc3RyaXBIYXNoKHVybCk7XHJcbiAgICAgIGxhc3RCcm93c2VyVXJsID0gdXJsO1xyXG4gICAgICBsYXN0SGlzdG9yeVN0YXRlID0gc3RhdGU7XHJcbiAgICAgIC8vIERvbid0IHVzZSBoaXN0b3J5IEFQSSBpZiBvbmx5IHRoZSBoYXNoIGNoYW5nZWRcclxuICAgICAgLy8gZHVlIHRvIGEgYnVnIGluIElFMTAvSUUxMSB3aGljaCBsZWFkc1xyXG4gICAgICAvLyB0byBub3QgZmlyaW5nIGEgYGhhc2hjaGFuZ2VgIG5vciBgcG9wc3RhdGVgIGV2ZW50XHJcbiAgICAgIC8vIGluIHNvbWUgY2FzZXMgKHNlZSAjOTE0MykuXHJcbiAgICAgIGlmICgkc25pZmZlci5oaXN0b3J5ICYmICghc2FtZUJhc2UgfHwgIXNhbWVTdGF0ZSkpIHtcclxuICAgICAgICBoaXN0b3J5W3JlcGxhY2UgPyAncmVwbGFjZVN0YXRlJyA6ICdwdXNoU3RhdGUnXShzdGF0ZSwgJycsIHVybCk7XHJcbiAgICAgICAgY2FjaGVTdGF0ZSgpO1xyXG4gICAgICAgIC8vIERvIHRoZSBhc3NpZ25tZW50IGFnYWluIHNvIHRoYXQgdGhvc2UgdHdvIHZhcmlhYmxlcyBhcmUgcmVmZXJlbnRpYWxseSBpZGVudGljYWwuXHJcbiAgICAgICAgbGFzdEhpc3RvcnlTdGF0ZSA9IGNhY2hlZFN0YXRlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghc2FtZUJhc2UpIHtcclxuICAgICAgICAgIHJlbG9hZExvY2F0aW9uID0gdXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwbGFjZSkge1xyXG4gICAgICAgICAgbG9jYXRpb24ucmVwbGFjZSh1cmwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc2VsZjtcclxuICAgIC8vIGdldHRlclxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gLSByZWxvYWRMb2NhdGlvbiBpcyBuZWVkZWQgYXMgYnJvd3NlcnMgZG9uJ3QgYWxsb3cgdG8gcmVhZCBvdXRcclxuICAgICAgLy8gICB0aGUgbmV3IGxvY2F0aW9uLmhyZWYgaWYgYSByZWxvYWQgaGFwcGVuZWQuXHJcbiAgICAgIC8vIC0gdGhlIHJlcGxhY2VtZW50IGlzIGEgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA3MTcyXHJcbiAgICAgIHJldHVybiByZWxvYWRMb2NhdGlvbiB8fCBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoLyUyNy9nLFwiJ1wiKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBAbmFtZSAkYnJvd3NlciNzdGF0ZVxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogVGhpcyBtZXRob2QgaXMgYSBnZXR0ZXIuXHJcbiAgICpcclxuICAgKiBSZXR1cm4gaGlzdG9yeS5zdGF0ZSBvciBudWxsIGlmIGhpc3Rvcnkuc3RhdGUgaXMgdW5kZWZpbmVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge29iamVjdH0gc3RhdGVcclxuICAgKi9cclxuICBzZWxmLnN0YXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gY2FjaGVkU3RhdGU7XHJcbiAgfTtcclxuXHJcbiAgdmFyIHVybENoYW5nZUxpc3RlbmVycyA9IFtdLFxyXG4gICAgICB1cmxDaGFuZ2VJbml0ID0gZmFsc2U7XHJcblxyXG4gIGZ1bmN0aW9uIGNhY2hlU3RhdGVBbmRGaXJlVXJsQ2hhbmdlKCkge1xyXG4gICAgY2FjaGVTdGF0ZSgpO1xyXG4gICAgZmlyZVVybENoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gVGhpcyB2YXJpYWJsZSBzaG91bGQgYmUgdXNlZCAqb25seSogaW5zaWRlIHRoZSBjYWNoZVN0YXRlIGZ1bmN0aW9uLlxyXG4gIHZhciBsYXN0Q2FjaGVkU3RhdGUgPSBudWxsO1xyXG4gIGZ1bmN0aW9uIGNhY2hlU3RhdGUoKSB7XHJcbiAgICAvLyBUaGlzIHNob3VsZCBiZSB0aGUgb25seSBwbGFjZSBpbiAkYnJvd3NlciB3aGVyZSBgaGlzdG9yeS5zdGF0ZWAgaXMgcmVhZC5cclxuICAgIGNhY2hlZFN0YXRlID0gd2luZG93Lmhpc3Rvcnkuc3RhdGU7XHJcbiAgICBjYWNoZWRTdGF0ZSA9IGlzVW5kZWZpbmVkKGNhY2hlZFN0YXRlKSA/IG51bGwgOiBjYWNoZWRTdGF0ZTtcclxuXHJcbiAgICAvLyBQcmV2ZW50IGNhbGxiYWNrcyBmbyBmaXJlIHR3aWNlIGlmIGJvdGggaGFzaGNoYW5nZSAmIHBvcHN0YXRlIHdlcmUgZmlyZWQuXHJcbiAgICBpZiAoZXF1YWxzKGNhY2hlZFN0YXRlLCBsYXN0Q2FjaGVkU3RhdGUpKSB7XHJcbiAgICAgIGNhY2hlZFN0YXRlID0gbGFzdENhY2hlZFN0YXRlO1xyXG4gICAgfVxyXG4gICAgbGFzdENhY2hlZFN0YXRlID0gY2FjaGVkU3RhdGU7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmaXJlVXJsQ2hhbmdlKCkge1xyXG4gICAgaWYgKGxhc3RCcm93c2VyVXJsID09PSBzZWxmLnVybCgpICYmIGxhc3RIaXN0b3J5U3RhdGUgPT09IGNhY2hlZFN0YXRlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsYXN0QnJvd3NlclVybCA9IHNlbGYudXJsKCk7XHJcbiAgICBsYXN0SGlzdG9yeVN0YXRlID0gY2FjaGVkU3RhdGU7XHJcbiAgICBmb3JFYWNoKHVybENoYW5nZUxpc3RlbmVycywgZnVuY3Rpb24obGlzdGVuZXIpIHtcclxuICAgICAgbGlzdGVuZXIoc2VsZi51cmwoKSwgY2FjaGVkU3RhdGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAbmFtZSAkYnJvd3NlciNvblVybENoYW5nZVxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogUmVnaXN0ZXIgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCwgd2hlbiB1cmwgY2hhbmdlcy5cclxuICAgKlxyXG4gICAqIEl0J3Mgb25seSBjYWxsZWQgd2hlbiB0aGUgdXJsIGlzIGNoYW5nZWQgZnJvbSBvdXRzaWRlIG9mIGFuZ3VsYXI6XHJcbiAgICogLSB1c2VyIHR5cGVzIGRpZmZlcmVudCB1cmwgaW50byBhZGRyZXNzIGJhclxyXG4gICAqIC0gdXNlciBjbGlja3Mgb24gaGlzdG9yeSAoZm9yd2FyZC9iYWNrKSBidXR0b25cclxuICAgKiAtIHVzZXIgY2xpY2tzIG9uIGEgbGlua1xyXG4gICAqXHJcbiAgICogSXQncyBub3QgY2FsbGVkIHdoZW4gdXJsIGlzIGNoYW5nZWQgYnkgJGJyb3dzZXIudXJsKCkgbWV0aG9kXHJcbiAgICpcclxuICAgKiBUaGUgbGlzdGVuZXIgZ2V0cyBjYWxsZWQgd2l0aCBuZXcgdXJsIGFzIHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIE5PVEU6IHRoaXMgYXBpIGlzIGludGVuZGVkIGZvciB1c2Ugb25seSBieSB0aGUgJGxvY2F0aW9uIHNlcnZpY2UuIFBsZWFzZSB1c2UgdGhlXHJcbiAgICoge0BsaW5rIG5nLiRsb2NhdGlvbiAkbG9jYXRpb24gc2VydmljZX0gdG8gbW9uaXRvciB1cmwgY2hhbmdlcyBpbiBhbmd1bGFyIGFwcHMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyl9IGxpc3RlbmVyIExpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHVybCBjaGFuZ2VzLlxyXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyl9IFJldHVybnMgdGhlIHJlZ2lzdGVyZWQgbGlzdGVuZXIgZm4gLSBoYW5keSBpZiB0aGUgZm4gaXMgYW5vbnltb3VzLlxyXG4gICAqL1xyXG4gIHNlbGYub25VcmxDaGFuZ2UgPSBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgLy8gVE9ETyh2b2p0YSk6IHJlZmFjdG9yIHRvIHVzZSBub2RlJ3Mgc3ludGF4IGZvciBldmVudHNcclxuICAgIGlmICghdXJsQ2hhbmdlSW5pdCkge1xyXG4gICAgICAvLyBXZSBsaXN0ZW4gb24gYm90aCAoaGFzaGNoYW5nZS9wb3BzdGF0ZSkgd2hlbiBhdmFpbGFibGUsIGFzIHNvbWUgYnJvd3NlcnMgKGUuZy4gT3BlcmEpXHJcbiAgICAgIC8vIGRvbid0IGZpcmUgcG9wc3RhdGUgd2hlbiB1c2VyIGNoYW5nZSB0aGUgYWRkcmVzcyBiYXIgYW5kIGRvbid0IGZpcmUgaGFzaGNoYW5nZSB3aGVuIHVybFxyXG4gICAgICAvLyBjaGFuZ2VkIGJ5IHB1c2gvcmVwbGFjZVN0YXRlXHJcblxyXG4gICAgICAvLyBodG1sNSBoaXN0b3J5IGFwaSAtIHBvcHN0YXRlIGV2ZW50XHJcbiAgICAgIGlmICgkc25pZmZlci5oaXN0b3J5KSBqcUxpdGUod2luZG93KS5vbigncG9wc3RhdGUnLCBjYWNoZVN0YXRlQW5kRmlyZVVybENoYW5nZSk7XHJcbiAgICAgIC8vIGhhc2hjaGFuZ2UgZXZlbnRcclxuICAgICAganFMaXRlKHdpbmRvdykub24oJ2hhc2hjaGFuZ2UnLCBjYWNoZVN0YXRlQW5kRmlyZVVybENoYW5nZSk7XHJcblxyXG4gICAgICB1cmxDaGFuZ2VJbml0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB1cmxDaGFuZ2VMaXN0ZW5lcnMucHVzaChjYWxsYmFjayk7XHJcbiAgICByZXR1cm4gY2FsbGJhY2s7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHVybCBoYXMgY2hhbmdlZCBvdXRzaWRlIG9mIEFuZ3VsYXIuXHJcbiAgICogTmVlZHMgdG8gYmUgZXhwb3J0ZWQgdG8gYmUgYWJsZSB0byBjaGVjayBmb3IgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBkb25lIGluIHN5bmMsXHJcbiAgICogYXMgaGFzaGNoYW5nZS9wb3BzdGF0ZSBldmVudHMgZmlyZSBpbiBhc3luYy5cclxuICAgKi9cclxuICBzZWxmLiQkY2hlY2tVcmxDaGFuZ2UgPSBmaXJlVXJsQ2hhbmdlO1xyXG5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIC8vIE1pc2MgQVBJXHJcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgLyoqXHJcbiAgICogQG5hbWUgJGJyb3dzZXIjYmFzZUhyZWZcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIFJldHVybnMgY3VycmVudCA8YmFzZSBocmVmPlxyXG4gICAqIChhbHdheXMgcmVsYXRpdmUgLSB3aXRob3V0IGRvbWFpbilcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjdXJyZW50IGJhc2UgaHJlZlxyXG4gICAqL1xyXG4gIHNlbGYuYmFzZUhyZWYgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBocmVmID0gYmFzZUVsZW1lbnQuYXR0cignaHJlZicpO1xyXG4gICAgcmV0dXJuIGhyZWYgPyBocmVmLnJlcGxhY2UoL14oaHR0cHM/XFw6KT9cXC9cXC9bXlxcL10qLywgJycpIDogJyc7XHJcbiAgfTtcclxuXHJcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAvLyBDb29raWVzIEFQSVxyXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgdmFyIGxhc3RDb29raWVzID0ge307XHJcbiAgdmFyIGxhc3RDb29raWVTdHJpbmcgPSAnJztcclxuICB2YXIgY29va2llUGF0aCA9IHNlbGYuYmFzZUhyZWYoKTtcclxuXHJcbiAgZnVuY3Rpb24gc2FmZURlY29kZVVSSUNvbXBvbmVudChzdHIpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3RyKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBuYW1lICRicm93c2VyI2Nvb2tpZXNcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBDb29raWUgbmFtZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gdmFsdWUgQ29va2llIHZhbHVlXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBUaGUgY29va2llcyBtZXRob2QgcHJvdmlkZXMgYSAncHJpdmF0ZScgbG93IGxldmVsIGFjY2VzcyB0byBicm93c2VyIGNvb2tpZXMuXHJcbiAgICogSXQgaXMgbm90IG1lYW50IHRvIGJlIHVzZWQgZGlyZWN0bHksIHVzZSB0aGUgJGNvb2tpZSBzZXJ2aWNlIGluc3RlYWQuXHJcbiAgICpcclxuICAgKiBUaGUgcmV0dXJuIHZhbHVlcyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgYXJndW1lbnRzIHRoYXQgdGhlIG1ldGhvZCB3YXMgY2FsbGVkIHdpdGggYXMgZm9sbG93czpcclxuICAgKlxyXG4gICAqIC0gY29va2llcygpIC0+IGhhc2ggb2YgYWxsIGNvb2tpZXMsIHRoaXMgaXMgTk9UIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgc3RhdGUsIHNvIGRvIG5vdCBtb2RpZnlcclxuICAgKiAgIGl0XHJcbiAgICogLSBjb29raWVzKG5hbWUsIHZhbHVlKSAtPiBzZXQgbmFtZSB0byB2YWx1ZSwgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGRlbGV0ZSB0aGUgY29va2llXHJcbiAgICogLSBjb29raWVzKG5hbWUpIC0+IHRoZSBzYW1lIGFzIChuYW1lLCB1bmRlZmluZWQpID09IERFTEVURVMgKG5vIG9uZSBjYWxscyBpdCByaWdodCBub3cgdGhhdFxyXG4gICAqICAgd2F5KVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09iamVjdH0gSGFzaCBvZiBhbGwgY29va2llcyAoaWYgY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlcilcclxuICAgKi9cclxuICBzZWxmLmNvb2tpZXMgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xyXG4gICAgdmFyIGNvb2tpZUxlbmd0aCwgY29va2llQXJyYXksIGNvb2tpZSwgaSwgaW5kZXg7XHJcblxyXG4gICAgaWYgKG5hbWUpIHtcclxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByYXdEb2N1bWVudC5jb29raWUgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSkgKyBcIj07cGF0aD1cIiArIGNvb2tpZVBhdGggK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiO2V4cGlyZXM9VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVRcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XHJcbiAgICAgICAgICBjb29raWVMZW5ndGggPSAocmF3RG9jdW1lbnQuY29va2llID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJztwYXRoPScgKyBjb29raWVQYXRoKS5sZW5ndGggKyAxO1xyXG5cclxuICAgICAgICAgIC8vIHBlciBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyMTA5LnR4dCBicm93c2VyIG11c3QgYWxsb3cgYXQgbWluaW11bTpcclxuICAgICAgICAgIC8vIC0gMzAwIGNvb2tpZXNcclxuICAgICAgICAgIC8vIC0gMjAgY29va2llcyBwZXIgdW5pcXVlIGRvbWFpblxyXG4gICAgICAgICAgLy8gLSA0MDk2IGJ5dGVzIHBlciBjb29raWVcclxuICAgICAgICAgIGlmIChjb29raWVMZW5ndGggPiA0MDk2KSB7XHJcbiAgICAgICAgICAgICRsb2cud2FybihcIkNvb2tpZSAnXCIgKyBuYW1lICtcclxuICAgICAgICAgICAgICBcIicgcG9zc2libHkgbm90IHNldCBvciBvdmVyZmxvd2VkIGJlY2F1c2UgaXQgd2FzIHRvbyBsYXJnZSAoXCIgK1xyXG4gICAgICAgICAgICAgIGNvb2tpZUxlbmd0aCArIFwiID4gNDA5NiBieXRlcykhXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHJhd0RvY3VtZW50LmNvb2tpZSAhPT0gbGFzdENvb2tpZVN0cmluZykge1xyXG4gICAgICAgIGxhc3RDb29raWVTdHJpbmcgPSByYXdEb2N1bWVudC5jb29raWU7XHJcbiAgICAgICAgY29va2llQXJyYXkgPSBsYXN0Q29va2llU3RyaW5nLnNwbGl0KFwiOyBcIik7XHJcbiAgICAgICAgbGFzdENvb2tpZXMgPSB7fTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb2tpZUFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb29raWUgPSBjb29raWVBcnJheVtpXTtcclxuICAgICAgICAgIGluZGV4ID0gY29va2llLmluZGV4T2YoJz0nKTtcclxuICAgICAgICAgIGlmIChpbmRleCA+IDApIHsgLy9pZ25vcmUgbmFtZWxlc3MgY29va2llc1xyXG4gICAgICAgICAgICBuYW1lID0gc2FmZURlY29kZVVSSUNvbXBvbmVudChjb29raWUuc3Vic3RyaW5nKDAsIGluZGV4KSk7XHJcbiAgICAgICAgICAgIC8vIHRoZSBmaXJzdCB2YWx1ZSB0aGF0IGlzIHNlZW4gZm9yIGEgY29va2llIGlzIHRoZSBtb3N0XHJcbiAgICAgICAgICAgIC8vIHNwZWNpZmljIG9uZS4gIHZhbHVlcyBmb3IgdGhlIHNhbWUgY29va2llIG5hbWUgdGhhdFxyXG4gICAgICAgICAgICAvLyBmb2xsb3cgYXJlIGZvciBsZXNzIHNwZWNpZmljIHBhdGhzLlxyXG4gICAgICAgICAgICBpZiAobGFzdENvb2tpZXNbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIGxhc3RDb29raWVzW25hbWVdID0gc2FmZURlY29kZVVSSUNvbXBvbmVudChjb29raWUuc3Vic3RyaW5nKGluZGV4ICsgMSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBsYXN0Q29va2llcztcclxuICAgIH1cclxuICB9O1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQG5hbWUgJGJyb3dzZXIjZGVmZXJcclxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGZuIEEgZnVuY3Rpb24sIHdobydzIGV4ZWN1dGlvbiBzaG91bGQgYmUgZGVmZXJyZWQuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBbZGVsYXk9MF0gb2YgbWlsbGlzZWNvbmRzIHRvIGRlZmVyIHRoZSBmdW5jdGlvbiBleGVjdXRpb24uXHJcbiAgICogQHJldHVybnMgeyp9IERlZmVySWQgdGhhdCBjYW4gYmUgdXNlZCB0byBjYW5jZWwgdGhlIHRhc2sgdmlhIGAkYnJvd3Nlci5kZWZlci5jYW5jZWwoKWAuXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBFeGVjdXRlcyBhIGZuIGFzeW5jaHJvbm91c2x5IHZpYSBgc2V0VGltZW91dChmbiwgZGVsYXkpYC5cclxuICAgKlxyXG4gICAqIFVubGlrZSB3aGVuIGNhbGxpbmcgYHNldFRpbWVvdXRgIGRpcmVjdGx5LCBpbiB0ZXN0IHRoaXMgZnVuY3Rpb24gaXMgbW9ja2VkIGFuZCBpbnN0ZWFkIG9mIHVzaW5nXHJcbiAgICogYHNldFRpbWVvdXRgIGluIHRlc3RzLCB0aGUgZm5zIGFyZSBxdWV1ZWQgaW4gYW4gYXJyYXksIHdoaWNoIGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IGZsdXNoZWRcclxuICAgKiB2aWEgYCRicm93c2VyLmRlZmVyLmZsdXNoKClgLlxyXG4gICAqXHJcbiAgICovXHJcbiAgc2VsZi5kZWZlciA9IGZ1bmN0aW9uKGZuLCBkZWxheSkge1xyXG4gICAgdmFyIHRpbWVvdXRJZDtcclxuICAgIG91dHN0YW5kaW5nUmVxdWVzdENvdW50Kys7XHJcbiAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICBkZWxldGUgcGVuZGluZ0RlZmVySWRzW3RpbWVvdXRJZF07XHJcbiAgICAgIGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1ZXN0KGZuKTtcclxuICAgIH0sIGRlbGF5IHx8IDApO1xyXG4gICAgcGVuZGluZ0RlZmVySWRzW3RpbWVvdXRJZF0gPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRpbWVvdXRJZDtcclxuICB9O1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQG5hbWUgJGJyb3dzZXIjZGVmZXIuY2FuY2VsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBDYW5jZWxzIGEgZGVmZXJyZWQgdGFzayBpZGVudGlmaWVkIHdpdGggYGRlZmVySWRgLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsqfSBkZWZlcklkIFRva2VuIHJldHVybmVkIGJ5IHRoZSBgJGJyb3dzZXIuZGVmZXJgIGZ1bmN0aW9uLlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdGFzayBoYXNuJ3QgZXhlY3V0ZWQgeWV0IGFuZCB3YXMgc3VjY2Vzc2Z1bGx5XHJcbiAgICogICAgICAgICAgICAgICAgICAgIGNhbmNlbGVkLlxyXG4gICAqL1xyXG4gIHNlbGYuZGVmZXIuY2FuY2VsID0gZnVuY3Rpb24oZGVmZXJJZCkge1xyXG4gICAgaWYgKHBlbmRpbmdEZWZlcklkc1tkZWZlcklkXSkge1xyXG4gICAgICBkZWxldGUgcGVuZGluZ0RlZmVySWRzW2RlZmVySWRdO1xyXG4gICAgICBjbGVhclRpbWVvdXQoZGVmZXJJZCk7XHJcbiAgICAgIGNvbXBsZXRlT3V0c3RhbmRpbmdSZXF1ZXN0KG5vb3ApO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9O1xyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gJEJyb3dzZXJQcm92aWRlcigpIHtcclxuICB0aGlzLiRnZXQgPSBbJyR3aW5kb3cnLCAnJGxvZycsICckc25pZmZlcicsICckZG9jdW1lbnQnLFxyXG4gICAgICBmdW5jdGlvbigkd2luZG93LCAkbG9nLCAkc25pZmZlciwgJGRvY3VtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCcm93c2VyKCR3aW5kb3csICRkb2N1bWVudCwgJGxvZywgJHNuaWZmZXIpO1xyXG4gICAgICB9XTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBzZXJ2aWNlXHJcbiAqIEBuYW1lICRjYWNoZUZhY3RvcnlcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEZhY3RvcnkgdGhhdCBjb25zdHJ1Y3RzIHtAbGluayAkY2FjaGVGYWN0b3J5LkNhY2hlIENhY2hlfSBvYmplY3RzIGFuZCBnaXZlcyBhY2Nlc3MgdG9cclxuICogdGhlbS5cclxuICpcclxuICogYGBganNcclxuICpcclxuICogIHZhciBjYWNoZSA9ICRjYWNoZUZhY3RvcnkoJ2NhY2hlSWQnKTtcclxuICogIGV4cGVjdCgkY2FjaGVGYWN0b3J5LmdldCgnY2FjaGVJZCcpKS50b0JlKGNhY2hlKTtcclxuICogIGV4cGVjdCgkY2FjaGVGYWN0b3J5LmdldCgnbm9TdWNoQ2FjaGVJZCcpKS5ub3QudG9CZURlZmluZWQoKTtcclxuICpcclxuICogIGNhY2hlLnB1dChcImtleVwiLCBcInZhbHVlXCIpO1xyXG4gKiAgY2FjaGUucHV0KFwiYW5vdGhlciBrZXlcIiwgXCJhbm90aGVyIHZhbHVlXCIpO1xyXG4gKlxyXG4gKiAgLy8gV2UndmUgc3BlY2lmaWVkIG5vIG9wdGlvbnMgb24gY3JlYXRpb25cclxuICogIGV4cGVjdChjYWNoZS5pbmZvKCkpLnRvRXF1YWwoe2lkOiAnY2FjaGVJZCcsIHNpemU6IDJ9KTtcclxuICpcclxuICogYGBgXHJcbiAqXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZUlkIE5hbWUgb3IgaWQgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgY2FjaGUuXHJcbiAqIEBwYXJhbSB7b2JqZWN0PX0gb3B0aW9ucyBPcHRpb25zIG9iamVjdCB0aGF0IHNwZWNpZmllcyB0aGUgY2FjaGUgYmVoYXZpb3IuIFByb3BlcnRpZXM6XHJcbiAqXHJcbiAqICAgLSBge251bWJlcj19YCBgY2FwYWNpdHlgIOKAlCB0dXJucyB0aGUgY2FjaGUgaW50byBMUlUgY2FjaGUuXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtvYmplY3R9IE5ld2x5IGNyZWF0ZWQgY2FjaGUgb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBzZXQgb2YgbWV0aG9kczpcclxuICpcclxuICogLSBge29iamVjdH1gIGBpbmZvKClgIOKAlCBSZXR1cm5zIGlkLCBzaXplLCBhbmQgb3B0aW9ucyBvZiBjYWNoZS5cclxuICogLSBge3sqfX1gIGBwdXQoe3N0cmluZ30ga2V5LCB7Kn0gdmFsdWUpYCDigJQgUHV0cyBhIG5ldyBrZXktdmFsdWUgcGFpciBpbnRvIHRoZSBjYWNoZSBhbmQgcmV0dXJuc1xyXG4gKiAgIGl0LlxyXG4gKiAtIGB7eyp9fWAgYGdldCh7c3RyaW5nfSBrZXkpYCDigJQgUmV0dXJucyBjYWNoZWQgdmFsdWUgZm9yIGBrZXlgIG9yIHVuZGVmaW5lZCBmb3IgY2FjaGUgbWlzcy5cclxuICogLSBge3ZvaWR9YCBgcmVtb3ZlKHtzdHJpbmd9IGtleSlgIOKAlCBSZW1vdmVzIGEga2V5LXZhbHVlIHBhaXIgZnJvbSB0aGUgY2FjaGUuXHJcbiAqIC0gYHt2b2lkfWAgYHJlbW92ZUFsbCgpYCDigJQgUmVtb3ZlcyBhbGwgY2FjaGVkIHZhbHVlcy5cclxuICogLSBge3ZvaWR9YCBgZGVzdHJveSgpYCDigJQgUmVtb3ZlcyByZWZlcmVuY2VzIHRvIHRoaXMgY2FjaGUgZnJvbSAkY2FjaGVGYWN0b3J5LlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICA8ZXhhbXBsZSBtb2R1bGU9XCJjYWNoZUV4YW1wbGVBcHBcIj5cclxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiQ2FjaGVDb250cm9sbGVyXCI+XHJcbiAgICAgICAgIDxpbnB1dCBuZy1tb2RlbD1cIm5ld0NhY2hlS2V5XCIgcGxhY2Vob2xkZXI9XCJLZXlcIj5cclxuICAgICAgICAgPGlucHV0IG5nLW1vZGVsPVwibmV3Q2FjaGVWYWx1ZVwiIHBsYWNlaG9sZGVyPVwiVmFsdWVcIj5cclxuICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz1cInB1dChuZXdDYWNoZUtleSwgbmV3Q2FjaGVWYWx1ZSlcIj5DYWNoZTwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgPHAgbmctaWY9XCJrZXlzLmxlbmd0aFwiPkNhY2hlZCBWYWx1ZXM8L3A+XHJcbiAgICAgICAgIDxkaXYgbmctcmVwZWF0PVwia2V5IGluIGtleXNcIj5cclxuICAgICAgICAgICA8c3BhbiBuZy1iaW5kPVwia2V5XCI+PC9zcGFuPlxyXG4gICAgICAgICAgIDxzcGFuPjogPC9zcGFuPlxyXG4gICAgICAgICAgIDxiIG5nLWJpbmQ9XCJjYWNoZS5nZXQoa2V5KVwiPjwvYj5cclxuICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICA8cD5DYWNoZSBJbmZvPC9wPlxyXG4gICAgICAgICA8ZGl2IG5nLXJlcGVhdD1cIihrZXksIHZhbHVlKSBpbiBjYWNoZS5pbmZvKClcIj5cclxuICAgICAgICAgICA8c3BhbiBuZy1iaW5kPVwia2V5XCI+PC9zcGFuPlxyXG4gICAgICAgICAgIDxzcGFuPjogPC9zcGFuPlxyXG4gICAgICAgICAgIDxiIG5nLWJpbmQ9XCJ2YWx1ZVwiPjwvYj5cclxuICAgICAgICAgPC9kaXY+XHJcbiAgICAgICA8L2Rpdj5cclxuICAgICA8L2ZpbGU+XHJcbiAgICAgPGZpbGUgbmFtZT1cInNjcmlwdC5qc1wiPlxyXG4gICAgICAgYW5ndWxhci5tb2R1bGUoJ2NhY2hlRXhhbXBsZUFwcCcsIFtdKS5cclxuICAgICAgICAgY29udHJvbGxlcignQ2FjaGVDb250cm9sbGVyJywgWyckc2NvcGUnLCAnJGNhY2hlRmFjdG9yeScsIGZ1bmN0aW9uKCRzY29wZSwgJGNhY2hlRmFjdG9yeSkge1xyXG4gICAgICAgICAgICRzY29wZS5rZXlzID0gW107XHJcbiAgICAgICAgICAgJHNjb3BlLmNhY2hlID0gJGNhY2hlRmFjdG9yeSgnY2FjaGVJZCcpO1xyXG4gICAgICAgICAgICRzY29wZS5wdXQgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICBpZiAoJHNjb3BlLmNhY2hlLmdldChrZXkpID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgJHNjb3BlLmtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgJHNjb3BlLmNhY2hlLnB1dChrZXksIHZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogdmFsdWUpO1xyXG4gICAgICAgICAgIH07XHJcbiAgICAgICAgIH1dKTtcclxuICAgICA8L2ZpbGU+XHJcbiAgICAgPGZpbGUgbmFtZT1cInN0eWxlLmNzc1wiPlxyXG4gICAgICAgcCB7XHJcbiAgICAgICAgIG1hcmdpbjogMTBweCAwIDNweDtcclxuICAgICAgIH1cclxuICAgICA8L2ZpbGU+XHJcbiAgIDwvZXhhbXBsZT5cclxuICovXHJcbmZ1bmN0aW9uICRDYWNoZUZhY3RvcnlQcm92aWRlcigpIHtcclxuXHJcbiAgdGhpcy4kZ2V0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgY2FjaGVzID0ge307XHJcblxyXG4gICAgZnVuY3Rpb24gY2FjaGVGYWN0b3J5KGNhY2hlSWQsIG9wdGlvbnMpIHtcclxuICAgICAgaWYgKGNhY2hlSWQgaW4gY2FjaGVzKSB7XHJcbiAgICAgICAgdGhyb3cgbWluRXJyKCckY2FjaGVGYWN0b3J5JykoJ2lpZCcsIFwiQ2FjaGVJZCAnezB9JyBpcyBhbHJlYWR5IHRha2VuIVwiLCBjYWNoZUlkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHNpemUgPSAwLFxyXG4gICAgICAgICAgc3RhdHMgPSBleHRlbmQoe30sIG9wdGlvbnMsIHtpZDogY2FjaGVJZH0pLFxyXG4gICAgICAgICAgZGF0YSA9IHt9LFxyXG4gICAgICAgICAgY2FwYWNpdHkgPSAob3B0aW9ucyAmJiBvcHRpb25zLmNhcGFjaXR5KSB8fCBOdW1iZXIuTUFYX1ZBTFVFLFxyXG4gICAgICAgICAgbHJ1SGFzaCA9IHt9LFxyXG4gICAgICAgICAgZnJlc2hFbmQgPSBudWxsLFxyXG4gICAgICAgICAgc3RhbGVFbmQgPSBudWxsO1xyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBuZ2RvYyB0eXBlXHJcbiAgICAgICAqIEBuYW1lICRjYWNoZUZhY3RvcnkuQ2FjaGVcclxuICAgICAgICpcclxuICAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICAqIEEgY2FjaGUgb2JqZWN0IHVzZWQgdG8gc3RvcmUgYW5kIHJldHJpZXZlIGRhdGEsIHByaW1hcmlseSB1c2VkIGJ5XHJcbiAgICAgICAqIHtAbGluayAkaHR0cCAkaHR0cH0gYW5kIHRoZSB7QGxpbmsgbmcuZGlyZWN0aXZlOnNjcmlwdCBzY3JpcHR9IGRpcmVjdGl2ZSB0byBjYWNoZVxyXG4gICAgICAgKiB0ZW1wbGF0ZXMgYW5kIG90aGVyIGRhdGEuXHJcbiAgICAgICAqXHJcbiAgICAgICAqIGBgYGpzXHJcbiAgICAgICAqICBhbmd1bGFyLm1vZHVsZSgnc3VwZXJDYWNoZScpXHJcbiAgICAgICAqICAgIC5mYWN0b3J5KCdzdXBlckNhY2hlJywgWyckY2FjaGVGYWN0b3J5JywgZnVuY3Rpb24oJGNhY2hlRmFjdG9yeSkge1xyXG4gICAgICAgKiAgICAgIHJldHVybiAkY2FjaGVGYWN0b3J5KCdzdXBlci1jYWNoZScpO1xyXG4gICAgICAgKiAgICB9XSk7XHJcbiAgICAgICAqIGBgYFxyXG4gICAgICAgKlxyXG4gICAgICAgKiBFeGFtcGxlIHRlc3Q6XHJcbiAgICAgICAqXHJcbiAgICAgICAqIGBgYGpzXHJcbiAgICAgICAqICBpdCgnc2hvdWxkIGJlaGF2ZSBsaWtlIGEgY2FjaGUnLCBpbmplY3QoZnVuY3Rpb24oc3VwZXJDYWNoZSkge1xyXG4gICAgICAgKiAgICBzdXBlckNhY2hlLnB1dCgna2V5JywgJ3ZhbHVlJyk7XHJcbiAgICAgICAqICAgIHN1cGVyQ2FjaGUucHV0KCdhbm90aGVyIGtleScsICdhbm90aGVyIHZhbHVlJyk7XHJcbiAgICAgICAqXHJcbiAgICAgICAqICAgIGV4cGVjdChzdXBlckNhY2hlLmluZm8oKSkudG9FcXVhbCh7XHJcbiAgICAgICAqICAgICAgaWQ6ICdzdXBlci1jYWNoZScsXHJcbiAgICAgICAqICAgICAgc2l6ZTogMlxyXG4gICAgICAgKiAgICB9KTtcclxuICAgICAgICpcclxuICAgICAgICogICAgc3VwZXJDYWNoZS5yZW1vdmUoJ2Fub3RoZXIga2V5Jyk7XHJcbiAgICAgICAqICAgIGV4cGVjdChzdXBlckNhY2hlLmdldCgnYW5vdGhlciBrZXknKSkudG9CZVVuZGVmaW5lZCgpO1xyXG4gICAgICAgKlxyXG4gICAgICAgKiAgICBzdXBlckNhY2hlLnJlbW92ZUFsbCgpO1xyXG4gICAgICAgKiAgICBleHBlY3Qoc3VwZXJDYWNoZS5pbmZvKCkpLnRvRXF1YWwoe1xyXG4gICAgICAgKiAgICAgIGlkOiAnc3VwZXItY2FjaGUnLFxyXG4gICAgICAgKiAgICAgIHNpemU6IDBcclxuICAgICAgICogICAgfSk7XHJcbiAgICAgICAqICB9KSk7XHJcbiAgICAgICAqIGBgYFxyXG4gICAgICAgKi9cclxuICAgICAgcmV0dXJuIGNhY2hlc1tjYWNoZUlkXSA9IHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICAgICAqIEBuYW1lICRjYWNoZUZhY3RvcnkuQ2FjaGUjcHV0XHJcbiAgICAgICAgICogQGtpbmQgZnVuY3Rpb25cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAgICAqIEluc2VydHMgYSBuYW1lZCBlbnRyeSBpbnRvIHRoZSB7QGxpbmsgJGNhY2hlRmFjdG9yeS5DYWNoZSBDYWNoZX0gb2JqZWN0IHRvIGJlXHJcbiAgICAgICAgICogcmV0cmlldmVkIGxhdGVyLCBhbmQgaW5jcmVtZW50aW5nIHRoZSBzaXplIG9mIHRoZSBjYWNoZSBpZiB0aGUga2V5IHdhcyBub3QgYWxyZWFkeVxyXG4gICAgICAgICAqIHByZXNlbnQgaW4gdGhlIGNhY2hlLiBJZiBiZWhhdmluZyBsaWtlIGFuIExSVSBjYWNoZSwgaXQgd2lsbCBhbHNvIHJlbW92ZSBzdGFsZVxyXG4gICAgICAgICAqIGVudHJpZXMgZnJvbSB0aGUgc2V0LlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogSXQgd2lsbCBub3QgaW5zZXJ0IHVuZGVmaW5lZCB2YWx1ZXMgaW50byB0aGUgY2FjaGUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IHRoZSBrZXkgdW5kZXIgd2hpY2ggdGhlIGNhY2hlZCBkYXRhIGlzIHN0b3JlZC5cclxuICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIHRoZSB2YWx1ZSB0byBzdG9yZSBhbG9uZ3NpZGUgdGhlIGtleS4gSWYgaXQgaXMgdW5kZWZpbmVkLCB0aGUga2V5XHJcbiAgICAgICAgICogICAgd2lsbCBub3QgYmUgc3RvcmVkLlxyXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSB0aGUgdmFsdWUgc3RvcmVkLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHB1dDogZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgaWYgKGNhcGFjaXR5IDwgTnVtYmVyLk1BWF9WQUxVRSkge1xyXG4gICAgICAgICAgICB2YXIgbHJ1RW50cnkgPSBscnVIYXNoW2tleV0gfHwgKGxydUhhc2hba2V5XSA9IHtrZXk6IGtleX0pO1xyXG5cclxuICAgICAgICAgICAgcmVmcmVzaChscnVFbnRyeSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgaWYgKCEoa2V5IGluIGRhdGEpKSBzaXplKys7XHJcbiAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKHN0YWxlRW5kLmtleSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICAgKiBAbmFtZSAkY2FjaGVGYWN0b3J5LkNhY2hlI2dldFxyXG4gICAgICAgICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgICAgKiBSZXRyaWV2ZXMgbmFtZWQgZGF0YSBzdG9yZWQgaW4gdGhlIHtAbGluayAkY2FjaGVGYWN0b3J5LkNhY2hlIENhY2hlfSBvYmplY3QuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IHRoZSBrZXkgb2YgdGhlIGRhdGEgdG8gYmUgcmV0cmlldmVkXHJcbiAgICAgICAgICogQHJldHVybnMgeyp9IHRoZSB2YWx1ZSBzdG9yZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbihrZXkpIHtcclxuICAgICAgICAgIGlmIChjYXBhY2l0eSA8IE51bWJlci5NQVhfVkFMVUUpIHtcclxuICAgICAgICAgICAgdmFyIGxydUVudHJ5ID0gbHJ1SGFzaFtrZXldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFscnVFbnRyeSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgcmVmcmVzaChscnVFbnRyeSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGRhdGFba2V5XTtcclxuICAgICAgICB9LFxyXG5cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICAgICAqIEBuYW1lICRjYWNoZUZhY3RvcnkuQ2FjaGUjcmVtb3ZlXHJcbiAgICAgICAgICogQGtpbmQgZnVuY3Rpb25cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAgICAqIFJlbW92ZXMgYW4gZW50cnkgZnJvbSB0aGUge0BsaW5rICRjYWNoZUZhY3RvcnkuQ2FjaGUgQ2FjaGV9IG9iamVjdC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdGhlIGtleSBvZiB0aGUgZW50cnkgdG8gYmUgcmVtb3ZlZFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgICAgICBpZiAoY2FwYWNpdHkgPCBOdW1iZXIuTUFYX1ZBTFVFKSB7XHJcbiAgICAgICAgICAgIHZhciBscnVFbnRyeSA9IGxydUhhc2hba2V5XTtcclxuXHJcbiAgICAgICAgICAgIGlmICghbHJ1RW50cnkpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmIChscnVFbnRyeSA9PSBmcmVzaEVuZCkgZnJlc2hFbmQgPSBscnVFbnRyeS5wO1xyXG4gICAgICAgICAgICBpZiAobHJ1RW50cnkgPT0gc3RhbGVFbmQpIHN0YWxlRW5kID0gbHJ1RW50cnkubjtcclxuICAgICAgICAgICAgbGluayhscnVFbnRyeS5uLGxydUVudHJ5LnApO1xyXG5cclxuICAgICAgICAgICAgZGVsZXRlIGxydUhhc2hba2V5XTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBkZWxldGUgZGF0YVtrZXldO1xyXG4gICAgICAgICAgc2l6ZS0tO1xyXG4gICAgICAgIH0sXHJcblxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAgICogQG5hbWUgJGNhY2hlRmFjdG9yeS5DYWNoZSNyZW1vdmVBbGxcclxuICAgICAgICAgKiBAa2luZCBmdW5jdGlvblxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICAgICogQ2xlYXJzIHRoZSBjYWNoZSBvYmplY3Qgb2YgYW55IGVudHJpZXMuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVtb3ZlQWxsOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIGRhdGEgPSB7fTtcclxuICAgICAgICAgIHNpemUgPSAwO1xyXG4gICAgICAgICAgbHJ1SGFzaCA9IHt9O1xyXG4gICAgICAgICAgZnJlc2hFbmQgPSBzdGFsZUVuZCA9IG51bGw7XHJcbiAgICAgICAgfSxcclxuXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICAgKiBAbmFtZSAkY2FjaGVGYWN0b3J5LkNhY2hlI2Rlc3Ryb3lcclxuICAgICAgICAgKiBAa2luZCBmdW5jdGlvblxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICAgICogRGVzdHJveXMgdGhlIHtAbGluayAkY2FjaGVGYWN0b3J5LkNhY2hlIENhY2hlfSBvYmplY3QgZW50aXJlbHksXHJcbiAgICAgICAgICogcmVtb3ZpbmcgaXQgZnJvbSB0aGUge0BsaW5rICRjYWNoZUZhY3RvcnkgJGNhY2hlRmFjdG9yeX0gc2V0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgZGF0YSA9IG51bGw7XHJcbiAgICAgICAgICBzdGF0cyA9IG51bGw7XHJcbiAgICAgICAgICBscnVIYXNoID0gbnVsbDtcclxuICAgICAgICAgIGRlbGV0ZSBjYWNoZXNbY2FjaGVJZF07XHJcbiAgICAgICAgfSxcclxuXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICAgKiBAbmFtZSAkY2FjaGVGYWN0b3J5LkNhY2hlI2luZm9cclxuICAgICAgICAgKiBAa2luZCBmdW5jdGlvblxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICAgICogUmV0cmlldmUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGEgcGFydGljdWxhciB7QGxpbmsgJGNhY2hlRmFjdG9yeS5DYWNoZSBDYWNoZX0uXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XHJcbiAgICAgICAgICogICA8dWw+XHJcbiAgICAgICAgICogICAgIDxsaT4qKmlkKio6IHRoZSBpZCBvZiB0aGUgY2FjaGUgaW5zdGFuY2U8L2xpPlxyXG4gICAgICAgICAqICAgICA8bGk+KipzaXplKio6IHRoZSBudW1iZXIgb2YgZW50cmllcyBrZXB0IGluIHRoZSBjYWNoZSBpbnN0YW5jZTwvbGk+XHJcbiAgICAgICAgICogICAgIDxsaT4qKi4uLioqOiBhbnkgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZyb20gdGhlIG9wdGlvbnMgb2JqZWN0IHdoZW4gY3JlYXRpbmcgdGhlXHJcbiAgICAgICAgICogICAgICAgY2FjaGUuPC9saT5cclxuICAgICAgICAgKiAgIDwvdWw+XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5mbzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBzdGF0cywge3NpemU6IHNpemV9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIG1ha2VzIHRoZSBgZW50cnlgIHRoZSBmcmVzaEVuZCBvZiB0aGUgTFJVIGxpbmtlZCBsaXN0XHJcbiAgICAgICAqL1xyXG4gICAgICBmdW5jdGlvbiByZWZyZXNoKGVudHJ5KSB7XHJcbiAgICAgICAgaWYgKGVudHJ5ICE9IGZyZXNoRW5kKSB7XHJcbiAgICAgICAgICBpZiAoIXN0YWxlRW5kKSB7XHJcbiAgICAgICAgICAgIHN0YWxlRW5kID0gZW50cnk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YWxlRW5kID09IGVudHJ5KSB7XHJcbiAgICAgICAgICAgIHN0YWxlRW5kID0gZW50cnkubjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBsaW5rKGVudHJ5Lm4sIGVudHJ5LnApO1xyXG4gICAgICAgICAgbGluayhlbnRyeSwgZnJlc2hFbmQpO1xyXG4gICAgICAgICAgZnJlc2hFbmQgPSBlbnRyeTtcclxuICAgICAgICAgIGZyZXNoRW5kLm4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBiaWRpcmVjdGlvbmFsbHkgbGlua3MgdHdvIGVudHJpZXMgb2YgdGhlIExSVSBsaW5rZWQgbGlzdFxyXG4gICAgICAgKi9cclxuICAgICAgZnVuY3Rpb24gbGluayhuZXh0RW50cnksIHByZXZFbnRyeSkge1xyXG4gICAgICAgIGlmIChuZXh0RW50cnkgIT0gcHJldkVudHJ5KSB7XHJcbiAgICAgICAgICBpZiAobmV4dEVudHJ5KSBuZXh0RW50cnkucCA9IHByZXZFbnRyeTsgLy9wIHN0YW5kcyBmb3IgcHJldmlvdXMsICdwcmV2JyBkaWRuJ3QgbWluaWZ5XHJcbiAgICAgICAgICBpZiAocHJldkVudHJ5KSBwcmV2RW50cnkubiA9IG5leHRFbnRyeTsgLy9uIHN0YW5kcyBmb3IgbmV4dCwgJ25leHQnIGRpZG4ndCBtaW5pZnlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSAkY2FjaGVGYWN0b3J5I2luZm9cclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIEdldCBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIGNhY2hlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSAtIGtleS12YWx1ZSBtYXAgb2YgYGNhY2hlSWRgIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZyBgY2FjaGUjaW5mb2BcclxuICAgKi9cclxuICAgIGNhY2hlRmFjdG9yeS5pbmZvID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciBpbmZvID0ge307XHJcbiAgICAgIGZvckVhY2goY2FjaGVzLCBmdW5jdGlvbihjYWNoZSwgY2FjaGVJZCkge1xyXG4gICAgICAgIGluZm9bY2FjaGVJZF0gPSBjYWNoZS5pbmZvKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gaW5mbztcclxuICAgIH07XHJcblxyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgJGNhY2hlRmFjdG9yeSNnZXRcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIEdldCBhY2Nlc3MgdG8gYSBjYWNoZSBvYmplY3QgYnkgdGhlIGBjYWNoZUlkYCB1c2VkIHdoZW4gaXQgd2FzIGNyZWF0ZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVJZCBOYW1lIG9yIGlkIG9mIGEgY2FjaGUgdG8gYWNjZXNzLlxyXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhY2hlIG9iamVjdCBpZGVudGlmaWVkIGJ5IHRoZSBjYWNoZUlkIG9yIHVuZGVmaW5lZCBpZiBubyBzdWNoIGNhY2hlLlxyXG4gICAqL1xyXG4gICAgY2FjaGVGYWN0b3J5LmdldCA9IGZ1bmN0aW9uKGNhY2hlSWQpIHtcclxuICAgICAgcmV0dXJuIGNhY2hlc1tjYWNoZUlkXTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIHJldHVybiBjYWNoZUZhY3Rvcnk7XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBzZXJ2aWNlXHJcbiAqIEBuYW1lICR0ZW1wbGF0ZUNhY2hlXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBUaGUgZmlyc3QgdGltZSBhIHRlbXBsYXRlIGlzIHVzZWQsIGl0IGlzIGxvYWRlZCBpbiB0aGUgdGVtcGxhdGUgY2FjaGUgZm9yIHF1aWNrIHJldHJpZXZhbC4gWW91XHJcbiAqIGNhbiBsb2FkIHRlbXBsYXRlcyBkaXJlY3RseSBpbnRvIHRoZSBjYWNoZSBpbiBhIGBzY3JpcHRgIHRhZywgb3IgYnkgY29uc3VtaW5nIHRoZVxyXG4gKiBgJHRlbXBsYXRlQ2FjaGVgIHNlcnZpY2UgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEFkZGluZyB2aWEgdGhlIGBzY3JpcHRgIHRhZzpcclxuICpcclxuICogYGBgaHRtbFxyXG4gKiAgIDxzY3JpcHQgdHlwZT1cInRleHQvbmctdGVtcGxhdGVcIiBpZD1cInRlbXBsYXRlSWQuaHRtbFwiPlxyXG4gKiAgICAgPHA+VGhpcyBpcyB0aGUgY29udGVudCBvZiB0aGUgdGVtcGxhdGU8L3A+XHJcbiAqICAgPC9zY3JpcHQ+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiAqKk5vdGU6KiogdGhlIGBzY3JpcHRgIHRhZyBjb250YWluaW5nIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBuZWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBgaGVhZGAgb2ZcclxuICogdGhlIGRvY3VtZW50LCBidXQgaXQgbXVzdCBiZSBhIGRlc2NlbmRlbnQgb2YgdGhlIHtAbGluayBuZy4kcm9vdEVsZW1lbnQgJHJvb3RFbGVtZW50fSAoSUUsXHJcbiAqIGVsZW1lbnQgd2l0aCBuZy1hcHAgYXR0cmlidXRlKSwgb3RoZXJ3aXNlIHRoZSB0ZW1wbGF0ZSB3aWxsIGJlIGlnbm9yZWQuXHJcbiAqXHJcbiAqIEFkZGluZyB2aWEgdGhlICR0ZW1wbGF0ZUNhY2hlIHNlcnZpY2U6XHJcbiAqXHJcbiAqIGBgYGpzXHJcbiAqIHZhciBteUFwcCA9IGFuZ3VsYXIubW9kdWxlKCdteUFwcCcsIFtdKTtcclxuICogbXlBcHAucnVuKGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlKSB7XHJcbiAqICAgJHRlbXBsYXRlQ2FjaGUucHV0KCd0ZW1wbGF0ZUlkLmh0bWwnLCAnVGhpcyBpcyB0aGUgY29udGVudCBvZiB0aGUgdGVtcGxhdGUnKTtcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUbyByZXRyaWV2ZSB0aGUgdGVtcGxhdGUgbGF0ZXIsIHNpbXBseSB1c2UgaXQgaW4geW91ciBIVE1MOlxyXG4gKiBgYGBodG1sXHJcbiAqIDxkaXYgbmctaW5jbHVkZT1cIiAndGVtcGxhdGVJZC5odG1sJyBcIj48L2Rpdj5cclxuICogYGBgXHJcbiAqXHJcbiAqIG9yIGdldCBpdCB2aWEgSmF2YXNjcmlwdDpcclxuICogYGBganNcclxuICogJHRlbXBsYXRlQ2FjaGUuZ2V0KCd0ZW1wbGF0ZUlkLmh0bWwnKVxyXG4gKiBgYGBcclxuICpcclxuICogU2VlIHtAbGluayBuZy4kY2FjaGVGYWN0b3J5ICRjYWNoZUZhY3Rvcnl9LlxyXG4gKlxyXG4gKi9cclxuZnVuY3Rpb24gJFRlbXBsYXRlQ2FjaGVQcm92aWRlcigpIHtcclxuICB0aGlzLiRnZXQgPSBbJyRjYWNoZUZhY3RvcnknLCBmdW5jdGlvbigkY2FjaGVGYWN0b3J5KSB7XHJcbiAgICByZXR1cm4gJGNhY2hlRmFjdG9yeSgndGVtcGxhdGVzJyk7XHJcbiAgfV07XHJcbn1cclxuXHJcbi8qICEgVkFSSUFCTEUvRlVOQ1RJT04gTkFNSU5HIENPTlZFTlRJT05TIFRIQVQgQVBQTFkgVE8gVEhJUyBGSUxFIVxyXG4gKlxyXG4gKiBET00tcmVsYXRlZCB2YXJpYWJsZXM6XHJcbiAqXHJcbiAqIC0gXCJub2RlXCIgLSBET00gTm9kZVxyXG4gKiAtIFwiZWxlbWVudFwiIC0gRE9NIEVsZW1lbnQgb3IgTm9kZVxyXG4gKiAtIFwiJG5vZGVcIiBvciBcIiRlbGVtZW50XCIgLSBqcUxpdGUtd3JhcHBlZCBub2RlIG9yIGVsZW1lbnRcclxuICpcclxuICpcclxuICogQ29tcGlsZXIgcmVsYXRlZCBzdHVmZjpcclxuICpcclxuICogLSBcImxpbmtGblwiIC0gbGlua2luZyBmbiBvZiBhIHNpbmdsZSBkaXJlY3RpdmVcclxuICogLSBcIm5vZGVMaW5rRm5cIiAtIGZ1bmN0aW9uIHRoYXQgYWdncmVnYXRlcyBhbGwgbGlua2luZyBmbnMgZm9yIGEgcGFydGljdWxhciBub2RlXHJcbiAqIC0gXCJjaGlsZExpbmtGblwiIC0gIGZ1bmN0aW9uIHRoYXQgYWdncmVnYXRlcyBhbGwgbGlua2luZyBmbnMgZm9yIGNoaWxkIG5vZGVzIG9mIGEgcGFydGljdWxhciBub2RlXHJcbiAqIC0gXCJjb21wb3NpdGVMaW5rRm5cIiAtIGZ1bmN0aW9uIHRoYXQgYWdncmVnYXRlcyBhbGwgbGlua2luZyBmbnMgZm9yIGEgY29tcGlsYXRpb24gcm9vdCAobm9kZUxpc3QpXHJcbiAqL1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2Mgc2VydmljZVxyXG4gKiBAbmFtZSAkY29tcGlsZVxyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQ29tcGlsZXMgYW4gSFRNTCBzdHJpbmcgb3IgRE9NIGludG8gYSB0ZW1wbGF0ZSBhbmQgcHJvZHVjZXMgYSB0ZW1wbGF0ZSBmdW5jdGlvbiwgd2hpY2hcclxuICogY2FuIHRoZW4gYmUgdXNlZCB0byBsaW5rIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIGBzY29wZWB9IGFuZCB0aGUgdGVtcGxhdGUgdG9nZXRoZXIuXHJcbiAqXHJcbiAqIFRoZSBjb21waWxhdGlvbiBpcyBhIHByb2Nlc3Mgb2Ygd2Fsa2luZyB0aGUgRE9NIHRyZWUgYW5kIG1hdGNoaW5nIERPTSBlbGVtZW50cyB0b1xyXG4gKiB7QGxpbmsgbmcuJGNvbXBpbGVQcm92aWRlciNkaXJlY3RpdmUgZGlyZWN0aXZlc30uXHJcbiAqXHJcbiAqIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCI+XHJcbiAqICoqTm90ZToqKiBUaGlzIGRvY3VtZW50IGlzIGFuIGluLWRlcHRoIHJlZmVyZW5jZSBvZiBhbGwgZGlyZWN0aXZlIG9wdGlvbnMuXHJcbiAqIEZvciBhIGdlbnRsZSBpbnRyb2R1Y3Rpb24gdG8gZGlyZWN0aXZlcyB3aXRoIGV4YW1wbGVzIG9mIGNvbW1vbiB1c2UgY2FzZXMsXHJcbiAqIHNlZSB0aGUge0BsaW5rIGd1aWRlL2RpcmVjdGl2ZSBkaXJlY3RpdmUgZ3VpZGV9LlxyXG4gKiA8L2Rpdj5cclxuICpcclxuICogIyMgQ29tcHJlaGVuc2l2ZSBEaXJlY3RpdmUgQVBJXHJcbiAqXHJcbiAqIFRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBvcHRpb25zIGZvciBhIGRpcmVjdGl2ZS5cclxuICpcclxuICogVGhlIGRpZmZlcmVuY2UgcmVzaWRlcyBpbiB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmYWN0b3J5IGZ1bmN0aW9uLlxyXG4gKiBZb3UgY2FuIGVpdGhlciByZXR1cm4gYSBcIkRpcmVjdGl2ZSBEZWZpbml0aW9uIE9iamVjdFwiIChzZWUgYmVsb3cpIHRoYXQgZGVmaW5lcyB0aGUgZGlyZWN0aXZlIHByb3BlcnRpZXMsXHJcbiAqIG9yIGp1c3QgdGhlIGBwb3N0TGlua2AgZnVuY3Rpb24gKGFsbCBvdGhlciBwcm9wZXJ0aWVzIHdpbGwgaGF2ZSB0aGUgZGVmYXVsdCB2YWx1ZXMpLlxyXG4gKlxyXG4gKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtc3VjY2Vzc1wiPlxyXG4gKiAqKkJlc3QgUHJhY3RpY2U6KiogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIFwiZGlyZWN0aXZlIGRlZmluaXRpb24gb2JqZWN0XCIgZm9ybS5cclxuICogPC9kaXY+XHJcbiAqXHJcbiAqIEhlcmUncyBhbiBleGFtcGxlIGRpcmVjdGl2ZSBkZWNsYXJlZCB3aXRoIGEgRGlyZWN0aXZlIERlZmluaXRpb24gT2JqZWN0OlxyXG4gKlxyXG4gKiBgYGBqc1xyXG4gKiAgIHZhciBteU1vZHVsZSA9IGFuZ3VsYXIubW9kdWxlKC4uLik7XHJcbiAqXHJcbiAqICAgbXlNb2R1bGUuZGlyZWN0aXZlKCdkaXJlY3RpdmVOYW1lJywgZnVuY3Rpb24gZmFjdG9yeShpbmplY3RhYmxlcykge1xyXG4gKiAgICAgdmFyIGRpcmVjdGl2ZURlZmluaXRpb25PYmplY3QgPSB7XHJcbiAqICAgICAgIHByaW9yaXR5OiAwLFxyXG4gKiAgICAgICB0ZW1wbGF0ZTogJzxkaXY+PC9kaXY+JywgLy8gb3IgLy8gZnVuY3Rpb24odEVsZW1lbnQsIHRBdHRycykgeyAuLi4gfSxcclxuICogICAgICAgLy8gb3JcclxuICogICAgICAgLy8gdGVtcGxhdGVVcmw6ICdkaXJlY3RpdmUuaHRtbCcsIC8vIG9yIC8vIGZ1bmN0aW9uKHRFbGVtZW50LCB0QXR0cnMpIHsgLi4uIH0sXHJcbiAqICAgICAgIHRyYW5zY2x1ZGU6IGZhbHNlLFxyXG4gKiAgICAgICByZXN0cmljdDogJ0EnLFxyXG4gKiAgICAgICB0ZW1wbGF0ZU5hbWVzcGFjZTogJ2h0bWwnLFxyXG4gKiAgICAgICBzY29wZTogZmFsc2UsXHJcbiAqICAgICAgIGNvbnRyb2xsZXI6IGZ1bmN0aW9uKCRzY29wZSwgJGVsZW1lbnQsICRhdHRycywgJHRyYW5zY2x1ZGUsIG90aGVySW5qZWN0YWJsZXMpIHsgLi4uIH0sXHJcbiAqICAgICAgIGNvbnRyb2xsZXJBczogJ3N0cmluZ0FsaWFzJyxcclxuICogICAgICAgcmVxdWlyZTogJ3NpYmxpbmdEaXJlY3RpdmVOYW1lJywgLy8gb3IgLy8gWydecGFyZW50RGlyZWN0aXZlTmFtZScsICc/b3B0aW9uYWxEaXJlY3RpdmVOYW1lJywgJz9eb3B0aW9uYWxQYXJlbnQnXSxcclxuICogICAgICAgY29tcGlsZTogZnVuY3Rpb24gY29tcGlsZSh0RWxlbWVudCwgdEF0dHJzLCB0cmFuc2NsdWRlKSB7XHJcbiAqICAgICAgICAgcmV0dXJuIHtcclxuICogICAgICAgICAgIHByZTogZnVuY3Rpb24gcHJlTGluayhzY29wZSwgRWxlbWVudCwgaUF0dHJzLCBjb250cm9sbGVyKSB7IC4uLiB9LFxyXG4gKiAgICAgICAgICAgcG9zdDogZnVuY3Rpb24gcG9zdExpbmsoc2NvcGUsIEVsZW1lbnQsIGlBdHRycywgY29udHJvbGxlcikgeyAuLi4gfVxyXG4gKiAgICAgICAgIH1cclxuICogICAgICAgICAvLyBvclxyXG4gKiAgICAgICAgIC8vIHJldHVybiBmdW5jdGlvbiBwb3N0TGluayggLi4uICkgeyAuLi4gfVxyXG4gKiAgICAgICB9LFxyXG4gKiAgICAgICAvLyBvclxyXG4gKiAgICAgICAvLyBsaW5rOiB7XHJcbiAqICAgICAgIC8vICBwcmU6IGZ1bmN0aW9uIHByZUxpbmsoc2NvcGUsIEVsZW1lbnQsIGlBdHRycywgY29udHJvbGxlcikgeyAuLi4gfSxcclxuICogICAgICAgLy8gIHBvc3Q6IGZ1bmN0aW9uIHBvc3RMaW5rKHNjb3BlLCBFbGVtZW50LCBpQXR0cnMsIGNvbnRyb2xsZXIpIHsgLi4uIH1cclxuICogICAgICAgLy8gfVxyXG4gKiAgICAgICAvLyBvclxyXG4gKiAgICAgICAvLyBsaW5rOiBmdW5jdGlvbiBwb3N0TGluayggLi4uICkgeyAuLi4gfVxyXG4gKiAgICAgfTtcclxuICogICAgIHJldHVybiBkaXJlY3RpdmVEZWZpbml0aW9uT2JqZWN0O1xyXG4gKiAgIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIj5cclxuICogKipOb3RlOioqIEFueSB1bnNwZWNpZmllZCBvcHRpb25zIHdpbGwgdXNlIHRoZSBkZWZhdWx0IHZhbHVlLiBZb3UgY2FuIHNlZSB0aGUgZGVmYXVsdCB2YWx1ZXMgYmVsb3cuXHJcbiAqIDwvZGl2PlxyXG4gKlxyXG4gKiBUaGVyZWZvcmUgdGhlIGFib3ZlIGNhbiBiZSBzaW1wbGlmaWVkIGFzOlxyXG4gKlxyXG4gKiBgYGBqc1xyXG4gKiAgIHZhciBteU1vZHVsZSA9IGFuZ3VsYXIubW9kdWxlKC4uLik7XHJcbiAqXHJcbiAqICAgbXlNb2R1bGUuZGlyZWN0aXZlKCdkaXJlY3RpdmVOYW1lJywgZnVuY3Rpb24gZmFjdG9yeShpbmplY3RhYmxlcykge1xyXG4gKiAgICAgdmFyIGRpcmVjdGl2ZURlZmluaXRpb25PYmplY3QgPSB7XHJcbiAqICAgICAgIGxpbms6IGZ1bmN0aW9uIHBvc3RMaW5rKHNjb3BlLCBFbGVtZW50LCBpQXR0cnMpIHsgLi4uIH1cclxuICogICAgIH07XHJcbiAqICAgICByZXR1cm4gZGlyZWN0aXZlRGVmaW5pdGlvbk9iamVjdDtcclxuICogICAgIC8vIG9yXHJcbiAqICAgICAvLyByZXR1cm4gZnVuY3Rpb24gcG9zdExpbmsoc2NvcGUsIEVsZW1lbnQsIGlBdHRycykgeyAuLi4gfVxyXG4gKiAgIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICpcclxuICpcclxuICogIyMjIERpcmVjdGl2ZSBEZWZpbml0aW9uIE9iamVjdFxyXG4gKlxyXG4gKiBUaGUgZGlyZWN0aXZlIGRlZmluaXRpb24gb2JqZWN0IHByb3ZpZGVzIGluc3RydWN0aW9ucyB0byB0aGUge0BsaW5rIG5nLiRjb21waWxlXHJcbiAqIGNvbXBpbGVyfS4gVGhlIGF0dHJpYnV0ZXMgYXJlOlxyXG4gKlxyXG4gKiAjIyMjIGBtdWx0RWxlbWVudGBcclxuICogV2hlbiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLCB0aGUgSFRNTCBjb21waWxlciB3aWxsIGNvbGxlY3QgRE9NIG5vZGVzIGJldHdlZW5cclxuICogbm9kZXMgd2l0aCB0aGUgYXR0cmlidXRlcyBgZGlyZWN0aXZlLW5hbWUtc3RhcnRgIGFuZCBgZGlyZWN0aXZlLW5hbWUtZW5kYCwgYW5kIGdyb3VwIHRoZW1cclxuICogdG9nZXRoZXIgYXMgdGhlIGRpcmVjdGl2ZSBlbGVtZW50cy4gSXQgaXMgcmVjb21lbmRlZCB0aGF0IHRoaXMgZmVhdHVyZSBiZSB1c2VkIG9uIGRpcmVjdGl2ZXNcclxuICogd2hpY2ggYXJlIG5vdCBzdHJpY3RseSBiZWhhdmlvdXJhbCAoc3VjaCBhcyB7QGxpbmsgbmdDbGlja30pLCBhbmQgd2hpY2hcclxuICogZG8gbm90IG1hbmlwdWxhdGUgb3IgcmVwbGFjZSBjaGlsZCBub2RlcyAoc3VjaCBhcyB7QGxpbmsgbmdJbmNsdWRlfSkuXHJcbiAqXHJcbiAqICMjIyMgYHByaW9yaXR5YFxyXG4gKiBXaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBkaXJlY3RpdmVzIGRlZmluZWQgb24gYSBzaW5nbGUgRE9NIGVsZW1lbnQsIHNvbWV0aW1lcyBpdFxyXG4gKiBpcyBuZWNlc3NhcnkgdG8gc3BlY2lmeSB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGRpcmVjdGl2ZXMgYXJlIGFwcGxpZWQuIFRoZSBgcHJpb3JpdHlgIGlzIHVzZWRcclxuICogdG8gc29ydCB0aGUgZGlyZWN0aXZlcyBiZWZvcmUgdGhlaXIgYGNvbXBpbGVgIGZ1bmN0aW9ucyBnZXQgY2FsbGVkLiBQcmlvcml0eSBpcyBkZWZpbmVkIGFzIGFcclxuICogbnVtYmVyLiBEaXJlY3RpdmVzIHdpdGggZ3JlYXRlciBudW1lcmljYWwgYHByaW9yaXR5YCBhcmUgY29tcGlsZWQgZmlyc3QuIFByZS1saW5rIGZ1bmN0aW9uc1xyXG4gKiBhcmUgYWxzbyBydW4gaW4gcHJpb3JpdHkgb3JkZXIsIGJ1dCBwb3N0LWxpbmsgZnVuY3Rpb25zIGFyZSBydW4gaW4gcmV2ZXJzZSBvcmRlci4gVGhlIG9yZGVyXHJcbiAqIG9mIGRpcmVjdGl2ZXMgd2l0aCB0aGUgc2FtZSBwcmlvcml0eSBpcyB1bmRlZmluZWQuIFRoZSBkZWZhdWx0IHByaW9yaXR5IGlzIGAwYC5cclxuICpcclxuICogIyMjIyBgdGVybWluYWxgXHJcbiAqIElmIHNldCB0byB0cnVlIHRoZW4gdGhlIGN1cnJlbnQgYHByaW9yaXR5YCB3aWxsIGJlIHRoZSBsYXN0IHNldCBvZiBkaXJlY3RpdmVzXHJcbiAqIHdoaWNoIHdpbGwgZXhlY3V0ZSAoYW55IGRpcmVjdGl2ZXMgYXQgdGhlIGN1cnJlbnQgcHJpb3JpdHkgd2lsbCBzdGlsbCBleGVjdXRlXHJcbiAqIGFzIHRoZSBvcmRlciBvZiBleGVjdXRpb24gb24gc2FtZSBgcHJpb3JpdHlgIGlzIHVuZGVmaW5lZCkuIE5vdGUgdGhhdCBleHByZXNzaW9uc1xyXG4gKiBhbmQgb3RoZXIgZGlyZWN0aXZlcyB1c2VkIGluIHRoZSBkaXJlY3RpdmUncyB0ZW1wbGF0ZSB3aWxsIGFsc28gYmUgZXhjbHVkZWQgZnJvbSBleGVjdXRpb24uXHJcbiAqXHJcbiAqICMjIyMgYHNjb3BlYFxyXG4gKiAqKklmIHNldCB0byBgdHJ1ZWAsKiogdGhlbiBhIG5ldyBzY29wZSB3aWxsIGJlIGNyZWF0ZWQgZm9yIHRoaXMgZGlyZWN0aXZlLiBJZiBtdWx0aXBsZSBkaXJlY3RpdmVzIG9uIHRoZVxyXG4gKiBzYW1lIGVsZW1lbnQgcmVxdWVzdCBhIG5ldyBzY29wZSwgb25seSBvbmUgbmV3IHNjb3BlIGlzIGNyZWF0ZWQuIFRoZSBuZXcgc2NvcGUgcnVsZSBkb2VzIG5vdFxyXG4gKiBhcHBseSBmb3IgdGhlIHJvb3Qgb2YgdGhlIHRlbXBsYXRlIHNpbmNlIHRoZSByb290IG9mIHRoZSB0ZW1wbGF0ZSBhbHdheXMgZ2V0cyBhIG5ldyBzY29wZS5cclxuICpcclxuICogKipJZiBzZXQgdG8gYHt9YCAob2JqZWN0IGhhc2gpLCoqIHRoZW4gYSBuZXcgXCJpc29sYXRlXCIgc2NvcGUgaXMgY3JlYXRlZC4gVGhlICdpc29sYXRlJyBzY29wZSBkaWZmZXJzIGZyb21cclxuICogbm9ybWFsIHNjb3BlIGluIHRoYXQgaXQgZG9lcyBub3QgcHJvdG90eXBpY2FsbHkgaW5oZXJpdCBmcm9tIHRoZSBwYXJlbnQgc2NvcGUuIFRoaXMgaXMgdXNlZnVsXHJcbiAqIHdoZW4gY3JlYXRpbmcgcmV1c2FibGUgY29tcG9uZW50cywgd2hpY2ggc2hvdWxkIG5vdCBhY2NpZGVudGFsbHkgcmVhZCBvciBtb2RpZnkgZGF0YSBpbiB0aGVcclxuICogcGFyZW50IHNjb3BlLlxyXG4gKlxyXG4gKiBUaGUgJ2lzb2xhdGUnIHNjb3BlIHRha2VzIGFuIG9iamVjdCBoYXNoIHdoaWNoIGRlZmluZXMgYSBzZXQgb2YgbG9jYWwgc2NvcGUgcHJvcGVydGllc1xyXG4gKiBkZXJpdmVkIGZyb20gdGhlIHBhcmVudCBzY29wZS4gVGhlc2UgbG9jYWwgcHJvcGVydGllcyBhcmUgdXNlZnVsIGZvciBhbGlhc2luZyB2YWx1ZXMgZm9yXHJcbiAqIHRlbXBsYXRlcy4gTG9jYWxzIGRlZmluaXRpb24gaXMgYSBoYXNoIG9mIGxvY2FsIHNjb3BlIHByb3BlcnR5IHRvIGl0cyBzb3VyY2U6XHJcbiAqXHJcbiAqICogYEBgIG9yIGBAYXR0cmAgLSBiaW5kIGEgbG9jYWwgc2NvcGUgcHJvcGVydHkgdG8gdGhlIHZhbHVlIG9mIERPTSBhdHRyaWJ1dGUuIFRoZSByZXN1bHQgaXNcclxuICogICBhbHdheXMgYSBzdHJpbmcgc2luY2UgRE9NIGF0dHJpYnV0ZXMgYXJlIHN0cmluZ3MuIElmIG5vIGBhdHRyYCBuYW1lIGlzIHNwZWNpZmllZCAgdGhlbiB0aGVcclxuICogICBhdHRyaWJ1dGUgbmFtZSBpcyBhc3N1bWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBsb2NhbCBuYW1lLlxyXG4gKiAgIEdpdmVuIGA8d2lkZ2V0IG15LWF0dHI9XCJoZWxsbyB7e25hbWV9fVwiPmAgYW5kIHdpZGdldCBkZWZpbml0aW9uXHJcbiAqICAgb2YgYHNjb3BlOiB7IGxvY2FsTmFtZTonQG15QXR0cicgfWAsIHRoZW4gd2lkZ2V0IHNjb3BlIHByb3BlcnR5IGBsb2NhbE5hbWVgIHdpbGwgcmVmbGVjdFxyXG4gKiAgIHRoZSBpbnRlcnBvbGF0ZWQgdmFsdWUgb2YgYGhlbGxvIHt7bmFtZX19YC4gQXMgdGhlIGBuYW1lYCBhdHRyaWJ1dGUgY2hhbmdlcyBzbyB3aWxsIHRoZVxyXG4gKiAgIGBsb2NhbE5hbWVgIHByb3BlcnR5IG9uIHRoZSB3aWRnZXQgc2NvcGUuIFRoZSBgbmFtZWAgaXMgcmVhZCBmcm9tIHRoZSBwYXJlbnQgc2NvcGUgKG5vdFxyXG4gKiAgIGNvbXBvbmVudCBzY29wZSkuXHJcbiAqXHJcbiAqICogYD1gIG9yIGA9YXR0cmAgLSBzZXQgdXAgYmktZGlyZWN0aW9uYWwgYmluZGluZyBiZXR3ZWVuIGEgbG9jYWwgc2NvcGUgcHJvcGVydHkgYW5kIHRoZVxyXG4gKiAgIHBhcmVudCBzY29wZSBwcm9wZXJ0eSBvZiBuYW1lIGRlZmluZWQgdmlhIHRoZSB2YWx1ZSBvZiB0aGUgYGF0dHJgIGF0dHJpYnV0ZS4gSWYgbm8gYGF0dHJgXHJcbiAqICAgbmFtZSBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgYXR0cmlidXRlIG5hbWUgaXMgYXNzdW1lZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgbG9jYWwgbmFtZS5cclxuICogICBHaXZlbiBgPHdpZGdldCBteS1hdHRyPVwicGFyZW50TW9kZWxcIj5gIGFuZCB3aWRnZXQgZGVmaW5pdGlvbiBvZlxyXG4gKiAgIGBzY29wZTogeyBsb2NhbE1vZGVsOic9bXlBdHRyJyB9YCwgdGhlbiB3aWRnZXQgc2NvcGUgcHJvcGVydHkgYGxvY2FsTW9kZWxgIHdpbGwgcmVmbGVjdCB0aGVcclxuICogICB2YWx1ZSBvZiBgcGFyZW50TW9kZWxgIG9uIHRoZSBwYXJlbnQgc2NvcGUuIEFueSBjaGFuZ2VzIHRvIGBwYXJlbnRNb2RlbGAgd2lsbCBiZSByZWZsZWN0ZWRcclxuICogICBpbiBgbG9jYWxNb2RlbGAgYW5kIGFueSBjaGFuZ2VzIGluIGBsb2NhbE1vZGVsYCB3aWxsIHJlZmxlY3QgaW4gYHBhcmVudE1vZGVsYC4gSWYgdGhlIHBhcmVudFxyXG4gKiAgIHNjb3BlIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3QsIGl0IHdpbGwgdGhyb3cgYSBOT05fQVNTSUdOQUJMRV9NT0RFTF9FWFBSRVNTSU9OIGV4Y2VwdGlvbi4gWW91XHJcbiAqICAgY2FuIGF2b2lkIHRoaXMgYmVoYXZpb3IgdXNpbmcgYD0/YCBvciBgPT9hdHRyYCBpbiBvcmRlciB0byBmbGFnIHRoZSBwcm9wZXJ0eSBhcyBvcHRpb25hbC4gSWZcclxuICogICB5b3Ugd2FudCB0byBzaGFsbG93IHdhdGNoIGZvciBjaGFuZ2VzIChpLmUuICR3YXRjaENvbGxlY3Rpb24gaW5zdGVhZCBvZiAkd2F0Y2gpIHlvdSBjYW4gdXNlXHJcbiAqICAgYD0qYCBvciBgPSphdHRyYCAoYD0qP2Agb3IgYD0qP2F0dHJgIGlmIHRoZSBwcm9wZXJ0eSBpcyBvcHRpb25hbCkuXHJcbiAqXHJcbiAqICogYCZgIG9yIGAmYXR0cmAgLSBwcm92aWRlcyBhIHdheSB0byBleGVjdXRlIGFuIGV4cHJlc3Npb24gaW4gdGhlIGNvbnRleHQgb2YgdGhlIHBhcmVudCBzY29wZS5cclxuICogICBJZiBubyBgYXR0cmAgbmFtZSBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgYXR0cmlidXRlIG5hbWUgaXMgYXNzdW1lZCB0byBiZSB0aGUgc2FtZSBhcyB0aGVcclxuICogICBsb2NhbCBuYW1lLiBHaXZlbiBgPHdpZGdldCBteS1hdHRyPVwiY291bnQgPSBjb3VudCArIHZhbHVlXCI+YCBhbmQgd2lkZ2V0IGRlZmluaXRpb24gb2ZcclxuICogICBgc2NvcGU6IHsgbG9jYWxGbjonJm15QXR0cicgfWAsIHRoZW4gaXNvbGF0ZSBzY29wZSBwcm9wZXJ0eSBgbG9jYWxGbmAgd2lsbCBwb2ludCB0b1xyXG4gKiAgIGEgZnVuY3Rpb24gd3JhcHBlciBmb3IgdGhlIGBjb3VudCA9IGNvdW50ICsgdmFsdWVgIGV4cHJlc3Npb24uIE9mdGVuIGl0J3MgZGVzaXJhYmxlIHRvXHJcbiAqICAgcGFzcyBkYXRhIGZyb20gdGhlIGlzb2xhdGVkIHNjb3BlIHZpYSBhbiBleHByZXNzaW9uIHRvIHRoZSBwYXJlbnQgc2NvcGUsIHRoaXMgY2FuIGJlXHJcbiAqICAgZG9uZSBieSBwYXNzaW5nIGEgbWFwIG9mIGxvY2FsIHZhcmlhYmxlIG5hbWVzIGFuZCB2YWx1ZXMgaW50byB0aGUgZXhwcmVzc2lvbiB3cmFwcGVyIGZuLlxyXG4gKiAgIEZvciBleGFtcGxlLCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBgaW5jcmVtZW50KGFtb3VudClgIHRoZW4gd2UgY2FuIHNwZWNpZnkgdGhlIGFtb3VudCB2YWx1ZVxyXG4gKiAgIGJ5IGNhbGxpbmcgdGhlIGBsb2NhbEZuYCBhcyBgbG9jYWxGbih7YW1vdW50OiAyMn0pYC5cclxuICpcclxuICpcclxuICogIyMjIyBgYmluZFRvQ29udHJvbGxlcmBcclxuICogV2hlbiBhbiBpc29sYXRlIHNjb3BlIGlzIHVzZWQgZm9yIGEgY29tcG9uZW50IChzZWUgYWJvdmUpLCBhbmQgYGNvbnRyb2xsZXJBc2AgaXMgdXNlZCwgYGJpbmRUb0NvbnRyb2xsZXI6IHRydWVgIHdpbGxcclxuICogYWxsb3cgYSBjb21wb25lbnQgdG8gaGF2ZSBpdHMgcHJvcGVydGllcyBib3VuZCB0byB0aGUgY29udHJvbGxlciwgcmF0aGVyIHRoYW4gdG8gc2NvcGUuIFdoZW4gdGhlIGNvbnRyb2xsZXJcclxuICogaXMgaW5zdGFudGlhdGVkLCB0aGUgaW5pdGlhbCB2YWx1ZXMgb2YgdGhlIGlzb2xhdGUgc2NvcGUgYmluZGluZ3MgYXJlIGFscmVhZHkgYXZhaWxhYmxlLlxyXG4gKlxyXG4gKiAjIyMjIGBjb250cm9sbGVyYFxyXG4gKiBDb250cm9sbGVyIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLiBUaGUgY29udHJvbGxlciBpcyBpbnN0YW50aWF0ZWQgYmVmb3JlIHRoZVxyXG4gKiBwcmUtbGlua2luZyBwaGFzZSBhbmQgaXQgaXMgc2hhcmVkIHdpdGggb3RoZXIgZGlyZWN0aXZlcyAoc2VlXHJcbiAqIGByZXF1aXJlYCBhdHRyaWJ1dGUpLiBUaGlzIGFsbG93cyB0aGUgZGlyZWN0aXZlcyB0byBjb21tdW5pY2F0ZSB3aXRoIGVhY2ggb3RoZXIgYW5kIGF1Z21lbnRcclxuICogZWFjaCBvdGhlcidzIGJlaGF2aW9yLiBUaGUgY29udHJvbGxlciBpcyBpbmplY3RhYmxlIChhbmQgc3VwcG9ydHMgYnJhY2tldCBub3RhdGlvbikgd2l0aCB0aGUgZm9sbG93aW5nIGxvY2FsczpcclxuICpcclxuICogKiBgJHNjb3BlYCAtIEN1cnJlbnQgc2NvcGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50XHJcbiAqICogYCRlbGVtZW50YCAtIEN1cnJlbnQgZWxlbWVudFxyXG4gKiAqIGAkYXR0cnNgIC0gQ3VycmVudCBhdHRyaWJ1dGVzIG9iamVjdCBmb3IgdGhlIGVsZW1lbnRcclxuICogKiBgJHRyYW5zY2x1ZGVgIC0gQSB0cmFuc2NsdWRlIGxpbmtpbmcgZnVuY3Rpb24gcHJlLWJvdW5kIHRvIHRoZSBjb3JyZWN0IHRyYW5zY2x1c2lvbiBzY29wZTpcclxuICogICBgZnVuY3Rpb24oW3Njb3BlXSwgY2xvbmVMaW5raW5nRm4sIGZ1dHVyZVBhcmVudEVsZW1lbnQpYC5cclxuICogICAgKiBgc2NvcGVgOiBvcHRpb25hbCBhcmd1bWVudCB0byBvdmVycmlkZSB0aGUgc2NvcGUuXHJcbiAqICAgICogYGNsb25lTGlua2luZ0ZuYDogb3B0aW9uYWwgYXJndW1lbnQgdG8gY3JlYXRlIGNsb25lcyBvZiB0aGUgb3JpZ2luYWwgdHJhbnNjbHVkZWQgY29udGVudC5cclxuICogICAgKiBgZnV0dXJlUGFyZW50RWxlbWVudGA6XHJcbiAqICAgICAgICAqIGRlZmluZXMgdGhlIHBhcmVudCB0byB3aGljaCB0aGUgYGNsb25lTGlua2luZ0ZuYCB3aWxsIGFkZCB0aGUgY2xvbmVkIGVsZW1lbnRzLlxyXG4gKiAgICAgICAgKiBkZWZhdWx0OiBgJGVsZW1lbnQucGFyZW50KClgIHJlc3AuIGAkZWxlbWVudGAgZm9yIGB0cmFuc2NsdWRlOidlbGVtZW50J2AgcmVzcC4gYHRyYW5zY2x1ZGU6dHJ1ZWAuXHJcbiAqICAgICAgICAqIG9ubHkgbmVlZGVkIGZvciB0cmFuc2NsdWRlcyB0aGF0IGFyZSBhbGxvd2VkIHRvIGNvbnRhaW4gbm9uIGh0bWwgZWxlbWVudHMgKGUuZy4gU1ZHIGVsZW1lbnRzKVxyXG4gKiAgICAgICAgICBhbmQgd2hlbiB0aGUgYGNsb25lTGlua2luRm5gIGlzIHBhc3NlZCxcclxuICogICAgICAgICAgYXMgdGhvc2UgZWxlbWVudHMgbmVlZCB0byBjcmVhdGVkIGFuZCBjbG9uZWQgaW4gYSBzcGVjaWFsIHdheSB3aGVuIHRoZXkgYXJlIGRlZmluZWQgb3V0c2lkZSB0aGVpclxyXG4gKiAgICAgICAgICB1c3VhbCBjb250YWluZXJzIChlLmcuIGxpa2UgYDxzdmc+YCkuXHJcbiAqICAgICAgICAqIFNlZSBhbHNvIHRoZSBgZGlyZWN0aXZlLnRlbXBsYXRlTmFtZXNwYWNlYCBwcm9wZXJ0eS5cclxuICpcclxuICpcclxuICogIyMjIyBgcmVxdWlyZWBcclxuICogUmVxdWlyZSBhbm90aGVyIGRpcmVjdGl2ZSBhbmQgaW5qZWN0IGl0cyBjb250cm9sbGVyIGFzIHRoZSBmb3VydGggYXJndW1lbnQgdG8gdGhlIGxpbmtpbmcgZnVuY3Rpb24uIFRoZVxyXG4gKiBgcmVxdWlyZWAgdGFrZXMgYSBzdHJpbmcgbmFtZSAob3IgYXJyYXkgb2Ygc3RyaW5ncykgb2YgdGhlIGRpcmVjdGl2ZShzKSB0byBwYXNzIGluLiBJZiBhbiBhcnJheSBpcyB1c2VkLCB0aGVcclxuICogaW5qZWN0ZWQgYXJndW1lbnQgd2lsbCBiZSBhbiBhcnJheSBpbiBjb3JyZXNwb25kaW5nIG9yZGVyLiBJZiBubyBzdWNoIGRpcmVjdGl2ZSBjYW4gYmVcclxuICogZm91bmQsIG9yIGlmIHRoZSBkaXJlY3RpdmUgZG9lcyBub3QgaGF2ZSBhIGNvbnRyb2xsZXIsIHRoZW4gYW4gZXJyb3IgaXMgcmFpc2VkLiBUaGUgbmFtZSBjYW4gYmUgcHJlZml4ZWQgd2l0aDpcclxuICpcclxuICogKiAobm8gcHJlZml4KSAtIExvY2F0ZSB0aGUgcmVxdWlyZWQgY29udHJvbGxlciBvbiB0aGUgY3VycmVudCBlbGVtZW50LiBUaHJvdyBhbiBlcnJvciBpZiBub3QgZm91bmQuXHJcbiAqICogYD9gIC0gQXR0ZW1wdCB0byBsb2NhdGUgdGhlIHJlcXVpcmVkIGNvbnRyb2xsZXIgb3IgcGFzcyBgbnVsbGAgdG8gdGhlIGBsaW5rYCBmbiBpZiBub3QgZm91bmQuXHJcbiAqICogYF5gIC0gTG9jYXRlIHRoZSByZXF1aXJlZCBjb250cm9sbGVyIGJ5IHNlYXJjaGluZyB0aGUgZWxlbWVudCBhbmQgaXRzIHBhcmVudHMuIFRocm93IGFuIGVycm9yIGlmIG5vdCBmb3VuZC5cclxuICogKiBgXl5gIC0gTG9jYXRlIHRoZSByZXF1aXJlZCBjb250cm9sbGVyIGJ5IHNlYXJjaGluZyB0aGUgZWxlbWVudCdzIHBhcmVudHMuIFRocm93IGFuIGVycm9yIGlmIG5vdCBmb3VuZC5cclxuICogKiBgP15gIC0gQXR0ZW1wdCB0byBsb2NhdGUgdGhlIHJlcXVpcmVkIGNvbnRyb2xsZXIgYnkgc2VhcmNoaW5nIHRoZSBlbGVtZW50IGFuZCBpdHMgcGFyZW50cyBvciBwYXNzXHJcbiAqICAgYG51bGxgIHRvIHRoZSBgbGlua2AgZm4gaWYgbm90IGZvdW5kLlxyXG4gKiAqIGA/Xl5gIC0gQXR0ZW1wdCB0byBsb2NhdGUgdGhlIHJlcXVpcmVkIGNvbnRyb2xsZXIgYnkgc2VhcmNoaW5nIHRoZSBlbGVtZW50J3MgcGFyZW50cywgb3IgcGFzc1xyXG4gKiAgIGBudWxsYCB0byB0aGUgYGxpbmtgIGZuIGlmIG5vdCBmb3VuZC5cclxuICpcclxuICpcclxuICogIyMjIyBgY29udHJvbGxlckFzYFxyXG4gKiBDb250cm9sbGVyIGFsaWFzIGF0IHRoZSBkaXJlY3RpdmUgc2NvcGUuIEFuIGFsaWFzIGZvciB0aGUgY29udHJvbGxlciBzbyBpdFxyXG4gKiBjYW4gYmUgcmVmZXJlbmNlZCBhdCB0aGUgZGlyZWN0aXZlIHRlbXBsYXRlLiBUaGUgZGlyZWN0aXZlIG5lZWRzIHRvIGRlZmluZSBhIHNjb3BlIGZvciB0aGlzXHJcbiAqIGNvbmZpZ3VyYXRpb24gdG8gYmUgdXNlZC4gVXNlZnVsIGluIHRoZSBjYXNlIHdoZW4gZGlyZWN0aXZlIGlzIHVzZWQgYXMgY29tcG9uZW50LlxyXG4gKlxyXG4gKlxyXG4gKiAjIyMjIGByZXN0cmljdGBcclxuICogU3RyaW5nIG9mIHN1YnNldCBvZiBgRUFDTWAgd2hpY2ggcmVzdHJpY3RzIHRoZSBkaXJlY3RpdmUgdG8gYSBzcGVjaWZpYyBkaXJlY3RpdmVcclxuICogZGVjbGFyYXRpb24gc3R5bGUuIElmIG9taXR0ZWQsIHRoZSBkZWZhdWx0cyAoZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMpIGFyZSB1c2VkLlxyXG4gKlxyXG4gKiAqIGBFYCAtIEVsZW1lbnQgbmFtZSAoZGVmYXVsdCk6IGA8bXktZGlyZWN0aXZlPjwvbXktZGlyZWN0aXZlPmBcclxuICogKiBgQWAgLSBBdHRyaWJ1dGUgKGRlZmF1bHQpOiBgPGRpdiBteS1kaXJlY3RpdmU9XCJleHBcIj48L2Rpdj5gXHJcbiAqICogYENgIC0gQ2xhc3M6IGA8ZGl2IGNsYXNzPVwibXktZGlyZWN0aXZlOiBleHA7XCI+PC9kaXY+YFxyXG4gKiAqIGBNYCAtIENvbW1lbnQ6IGA8IS0tIGRpcmVjdGl2ZTogbXktZGlyZWN0aXZlIGV4cCAtLT5gXHJcbiAqXHJcbiAqXHJcbiAqICMjIyMgYHRlbXBsYXRlTmFtZXNwYWNlYFxyXG4gKiBTdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBkb2N1bWVudCB0eXBlIHVzZWQgYnkgdGhlIG1hcmt1cCBpbiB0aGUgdGVtcGxhdGUuXHJcbiAqIEFuZ3VsYXJKUyBuZWVkcyB0aGlzIGluZm9ybWF0aW9uIGFzIHRob3NlIGVsZW1lbnRzIG5lZWQgdG8gYmUgY3JlYXRlZCBhbmQgY2xvbmVkXHJcbiAqIGluIGEgc3BlY2lhbCB3YXkgd2hlbiB0aGV5IGFyZSBkZWZpbmVkIG91dHNpZGUgdGhlaXIgdXN1YWwgY29udGFpbmVycyBsaWtlIGA8c3ZnPmAgYW5kIGA8bWF0aD5gLlxyXG4gKlxyXG4gKiAqIGBodG1sYCAtIEFsbCByb290IG5vZGVzIGluIHRoZSB0ZW1wbGF0ZSBhcmUgSFRNTC4gUm9vdCBub2RlcyBtYXkgYWxzbyBiZVxyXG4gKiAgIHRvcC1sZXZlbCBlbGVtZW50cyBzdWNoIGFzIGA8c3ZnPmAgb3IgYDxtYXRoPmAuXHJcbiAqICogYHN2Z2AgLSBUaGUgcm9vdCBub2RlcyBpbiB0aGUgdGVtcGxhdGUgYXJlIFNWRyBlbGVtZW50cyAoZXhjbHVkaW5nIGA8bWF0aD5gKS5cclxuICogKiBgbWF0aGAgLSBUaGUgcm9vdCBub2RlcyBpbiB0aGUgdGVtcGxhdGUgYXJlIE1hdGhNTCBlbGVtZW50cyAoZXhjbHVkaW5nIGA8c3ZnPmApLlxyXG4gKlxyXG4gKiBJZiBubyBgdGVtcGxhdGVOYW1lc3BhY2VgIGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgbmFtZXNwYWNlIGlzIGNvbnNpZGVyZWQgdG8gYmUgYGh0bWxgLlxyXG4gKlxyXG4gKiAjIyMjIGB0ZW1wbGF0ZWBcclxuICogSFRNTCBtYXJrdXAgdGhhdCBtYXk6XHJcbiAqICogUmVwbGFjZSB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdGl2ZSdzIGVsZW1lbnQgKGRlZmF1bHQpLlxyXG4gKiAqIFJlcGxhY2UgdGhlIGRpcmVjdGl2ZSdzIGVsZW1lbnQgaXRzZWxmIChpZiBgcmVwbGFjZWAgaXMgdHJ1ZSAtIERFUFJFQ0FURUQpLlxyXG4gKiAqIFdyYXAgdGhlIGNvbnRlbnRzIG9mIHRoZSBkaXJlY3RpdmUncyBlbGVtZW50IChpZiBgdHJhbnNjbHVkZWAgaXMgdHJ1ZSkuXHJcbiAqXHJcbiAqIFZhbHVlIG1heSBiZTpcclxuICpcclxuICogKiBBIHN0cmluZy4gRm9yIGV4YW1wbGUgYDxkaXYgcmVkLW9uLWhvdmVyPnt7ZGVsZXRlX3N0cn19PC9kaXY+YC5cclxuICogKiBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHR3byBhcmd1bWVudHMgYHRFbGVtZW50YCBhbmQgYHRBdHRyc2AgKGRlc2NyaWJlZCBpbiB0aGUgYGNvbXBpbGVgXHJcbiAqICAgZnVuY3Rpb24gYXBpIGJlbG93KSBhbmQgcmV0dXJucyBhIHN0cmluZyB2YWx1ZS5cclxuICpcclxuICpcclxuICogIyMjIyBgdGVtcGxhdGVVcmxgXHJcbiAqIFRoaXMgaXMgc2ltaWxhciB0byBgdGVtcGxhdGVgIGJ1dCB0aGUgdGVtcGxhdGUgaXMgbG9hZGVkIGZyb20gdGhlIHNwZWNpZmllZCBVUkwsIGFzeW5jaHJvbm91c2x5LlxyXG4gKlxyXG4gKiBCZWNhdXNlIHRlbXBsYXRlIGxvYWRpbmcgaXMgYXN5bmNocm9ub3VzIHRoZSBjb21waWxlciB3aWxsIHN1c3BlbmQgY29tcGlsYXRpb24gb2YgZGlyZWN0aXZlcyBvbiB0aGF0IGVsZW1lbnRcclxuICogZm9yIGxhdGVyIHdoZW4gdGhlIHRlbXBsYXRlIGhhcyBiZWVuIHJlc29sdmVkLiAgSW4gdGhlIG1lYW50aW1lIGl0IHdpbGwgY29udGludWUgdG8gY29tcGlsZSBhbmQgbGlua1xyXG4gKiBzaWJsaW5nIGFuZCBwYXJlbnQgZWxlbWVudHMgYXMgdGhvdWdoIHRoaXMgZWxlbWVudCBoYWQgbm90IGNvbnRhaW5lZCBhbnkgZGlyZWN0aXZlcy5cclxuICpcclxuICogVGhlIGNvbXBpbGVyIGRvZXMgbm90IHN1c3BlbmQgdGhlIGVudGlyZSBjb21waWxhdGlvbiB0byB3YWl0IGZvciB0ZW1wbGF0ZXMgdG8gYmUgbG9hZGVkIGJlY2F1c2UgdGhpc1xyXG4gKiB3b3VsZCByZXN1bHQgaW4gdGhlIHdob2xlIGFwcCBcInN0YWxsaW5nXCIgdW50aWwgYWxsIHRlbXBsYXRlcyBhcmUgbG9hZGVkIGFzeW5jaHJvbm91c2x5IC0gZXZlbiBpbiB0aGVcclxuICogY2FzZSB3aGVuIG9ubHkgb25lIGRlZXBseSBuZXN0ZWQgZGlyZWN0aXZlIGhhcyBgdGVtcGxhdGVVcmxgLlxyXG4gKlxyXG4gKiBUZW1wbGF0ZSBsb2FkaW5nIGlzIGFzeW5jaHJvbm91cyBldmVuIGlmIHRoZSB0ZW1wbGF0ZSBoYXMgYmVlbiBwcmVsb2FkZWQgaW50byB0aGUge0BsaW5rICR0ZW1wbGF0ZUNhY2hlfVxyXG4gKlxyXG4gKiBZb3UgY2FuIHNwZWNpZnkgYHRlbXBsYXRlVXJsYCBhcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIFVSTCBvciBhcyBhIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHR3b1xyXG4gKiBhcmd1bWVudHMgYHRFbGVtZW50YCBhbmQgYHRBdHRyc2AgKGRlc2NyaWJlZCBpbiB0aGUgYGNvbXBpbGVgIGZ1bmN0aW9uIGFwaSBiZWxvdykgYW5kIHJldHVybnNcclxuICogYSBzdHJpbmcgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSB1cmwuICBJbiBlaXRoZXIgY2FzZSwgdGhlIHRlbXBsYXRlIFVSTCBpcyBwYXNzZWQgdGhyb3VnaCB7QGxpbmtcclxuICogJHNjZSNnZXRUcnVzdGVkUmVzb3VyY2VVcmwgJHNjZS5nZXRUcnVzdGVkUmVzb3VyY2VVcmx9LlxyXG4gKlxyXG4gKlxyXG4gKiAjIyMjIGByZXBsYWNlYCAoWypERVBSRUNBVEVEKiFdLCB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciByZWxlYXNlIC0gaS5lLiB2Mi4wKVxyXG4gKiBzcGVjaWZ5IHdoYXQgdGhlIHRlbXBsYXRlIHNob3VsZCByZXBsYWNlLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxyXG4gKlxyXG4gKiAqIGB0cnVlYCAtIHRoZSB0ZW1wbGF0ZSB3aWxsIHJlcGxhY2UgdGhlIGRpcmVjdGl2ZSdzIGVsZW1lbnQuXHJcbiAqICogYGZhbHNlYCAtIHRoZSB0ZW1wbGF0ZSB3aWxsIHJlcGxhY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBkaXJlY3RpdmUncyBlbGVtZW50LlxyXG4gKlxyXG4gKiBUaGUgcmVwbGFjZW1lbnQgcHJvY2VzcyBtaWdyYXRlcyBhbGwgb2YgdGhlIGF0dHJpYnV0ZXMgLyBjbGFzc2VzIGZyb20gdGhlIG9sZCBlbGVtZW50IHRvIHRoZSBuZXdcclxuICogb25lLiBTZWUgdGhlIHtAbGluayBndWlkZS9kaXJlY3RpdmUjdGVtcGxhdGUtZXhwYW5kaW5nLWRpcmVjdGl2ZVxyXG4gKiBEaXJlY3RpdmVzIEd1aWRlfSBmb3IgYW4gZXhhbXBsZS5cclxuICpcclxuICogVGhlcmUgYXJlIHZlcnkgZmV3IHNjZW5hcmlvcyB3aGVyZSBlbGVtZW50IHJlcGxhY2VtZW50IGlzIHJlcXVpcmVkIGZvciB0aGUgYXBwbGljYXRpb24gZnVuY3Rpb24sXHJcbiAqIHRoZSBtYWluIG9uZSBiZWluZyByZXVzYWJsZSBjdXN0b20gY29tcG9uZW50cyB0aGF0IGFyZSB1c2VkIHdpdGhpbiBTVkcgY29udGV4dHNcclxuICogKGJlY2F1c2UgU1ZHIGRvZXNuJ3Qgd29yayB3aXRoIGN1c3RvbSBlbGVtZW50cyBpbiB0aGUgRE9NIHRyZWUpLlxyXG4gKlxyXG4gKiAjIyMjIGB0cmFuc2NsdWRlYFxyXG4gKiBFeHRyYWN0IHRoZSBjb250ZW50cyBvZiB0aGUgZWxlbWVudCB3aGVyZSB0aGUgZGlyZWN0aXZlIGFwcGVhcnMgYW5kIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBkaXJlY3RpdmUuXHJcbiAqIFRoZSBjb250ZW50cyBhcmUgY29tcGlsZWQgYW5kIHByb3ZpZGVkIHRvIHRoZSBkaXJlY3RpdmUgYXMgYSAqKnRyYW5zY2x1c2lvbiBmdW5jdGlvbioqLiBTZWUgdGhlXHJcbiAqIHtAbGluayAkY29tcGlsZSN0cmFuc2NsdXNpb24gVHJhbnNjbHVzaW9ufSBzZWN0aW9uIGJlbG93LlxyXG4gKlxyXG4gKiBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIHRyYW5zY2x1c2lvbiBkZXBlbmRpbmcgdXBvbiB3aGV0aGVyIHlvdSB3YW50IHRvIHRyYW5zY2x1ZGUganVzdCB0aGUgY29udGVudHMgb2YgdGhlXHJcbiAqIGRpcmVjdGl2ZSdzIGVsZW1lbnQgb3IgdGhlIGVudGlyZSBlbGVtZW50OlxyXG4gKlxyXG4gKiAqIGB0cnVlYCAtIHRyYW5zY2x1ZGUgdGhlIGNvbnRlbnQgKGkuZS4gdGhlIGNoaWxkIG5vZGVzKSBvZiB0aGUgZGlyZWN0aXZlJ3MgZWxlbWVudC5cclxuICogKiBgJ2VsZW1lbnQnYCAtIHRyYW5zY2x1ZGUgdGhlIHdob2xlIG9mIHRoZSBkaXJlY3RpdmUncyBlbGVtZW50IGluY2x1ZGluZyBhbnkgZGlyZWN0aXZlcyBvbiB0aGlzXHJcbiAqICAgZWxlbWVudCB0aGF0IGRlZmluZWQgYXQgYSBsb3dlciBwcmlvcml0eSB0aGFuIHRoaXMgZGlyZWN0aXZlLiBXaGVuIHVzZWQsIHRoZSBgdGVtcGxhdGVgXHJcbiAqICAgcHJvcGVydHkgaXMgaWdub3JlZC5cclxuICpcclxuICpcclxuICogIyMjIyBgY29tcGlsZWBcclxuICpcclxuICogYGBganNcclxuICogICBmdW5jdGlvbiBjb21waWxlKHRFbGVtZW50LCB0QXR0cnMsIHRyYW5zY2x1ZGUpIHsgLi4uIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBjb21waWxlIGZ1bmN0aW9uIGRlYWxzIHdpdGggdHJhbnNmb3JtaW5nIHRoZSB0ZW1wbGF0ZSBET00uIFNpbmNlIG1vc3QgZGlyZWN0aXZlcyBkbyBub3QgZG9cclxuICogdGVtcGxhdGUgdHJhbnNmb3JtYXRpb24sIGl0IGlzIG5vdCB1c2VkIG9mdGVuLiBUaGUgY29tcGlsZSBmdW5jdGlvbiB0YWtlcyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czpcclxuICpcclxuICogICAqIGB0RWxlbWVudGAgLSB0ZW1wbGF0ZSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgd2hlcmUgdGhlIGRpcmVjdGl2ZSBoYXMgYmVlbiBkZWNsYXJlZC4gSXQgaXNcclxuICogICAgIHNhZmUgdG8gZG8gdGVtcGxhdGUgdHJhbnNmb3JtYXRpb24gb24gdGhlIGVsZW1lbnQgYW5kIGNoaWxkIGVsZW1lbnRzIG9ubHkuXHJcbiAqXHJcbiAqICAgKiBgdEF0dHJzYCAtIHRlbXBsYXRlIGF0dHJpYnV0ZXMgLSBOb3JtYWxpemVkIGxpc3Qgb2YgYXR0cmlidXRlcyBkZWNsYXJlZCBvbiB0aGlzIGVsZW1lbnQgc2hhcmVkXHJcbiAqICAgICBiZXR3ZWVuIGFsbCBkaXJlY3RpdmUgY29tcGlsZSBmdW5jdGlvbnMuXHJcbiAqXHJcbiAqICAgKiBgdHJhbnNjbHVkZWAgLSAgWypERVBSRUNBVEVEKiFdIEEgdHJhbnNjbHVkZSBsaW5raW5nIGZ1bmN0aW9uOiBgZnVuY3Rpb24oc2NvcGUsIGNsb25lTGlua2luZ0ZuKWBcclxuICpcclxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIj5cclxuICogKipOb3RlOioqIFRoZSB0ZW1wbGF0ZSBpbnN0YW5jZSBhbmQgdGhlIGxpbmsgaW5zdGFuY2UgbWF5IGJlIGRpZmZlcmVudCBvYmplY3RzIGlmIHRoZSB0ZW1wbGF0ZSBoYXNcclxuICogYmVlbiBjbG9uZWQuIEZvciB0aGlzIHJlYXNvbiBpdCBpcyAqKm5vdCoqIHNhZmUgdG8gZG8gYW55dGhpbmcgb3RoZXIgdGhhbiBET00gdHJhbnNmb3JtYXRpb25zIHRoYXRcclxuICogYXBwbHkgdG8gYWxsIGNsb25lZCBET00gbm9kZXMgd2l0aGluIHRoZSBjb21waWxlIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIERPTSBsaXN0ZW5lciByZWdpc3RyYXRpb25cclxuICogc2hvdWxkIGJlIGRvbmUgaW4gYSBsaW5raW5nIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGluIGEgY29tcGlsZSBmdW5jdGlvbi5cclxuICogPC9kaXY+XHJcblxyXG4gKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiPlxyXG4gKiAqKk5vdGU6KiogVGhlIGNvbXBpbGUgZnVuY3Rpb24gY2Fubm90IGhhbmRsZSBkaXJlY3RpdmVzIHRoYXQgcmVjdXJzaXZlbHkgdXNlIHRoZW1zZWx2ZXMgaW4gdGhlaXJcclxuICogb3duIHRlbXBsYXRlcyBvciBjb21waWxlIGZ1bmN0aW9ucy4gQ29tcGlsaW5nIHRoZXNlIGRpcmVjdGl2ZXMgcmVzdWx0cyBpbiBhbiBpbmZpbml0ZSBsb29wIGFuZCBhXHJcbiAqIHN0YWNrIG92ZXJmbG93IGVycm9ycy5cclxuICpcclxuICogVGhpcyBjYW4gYmUgYXZvaWRlZCBieSBtYW51YWxseSB1c2luZyAkY29tcGlsZSBpbiB0aGUgcG9zdExpbmsgZnVuY3Rpb24gdG8gaW1wZXJhdGl2ZWx5IGNvbXBpbGVcclxuICogYSBkaXJlY3RpdmUncyB0ZW1wbGF0ZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYXV0b21hdGljIHRlbXBsYXRlIGNvbXBpbGF0aW9uIHZpYSBgdGVtcGxhdGVgIG9yXHJcbiAqIGB0ZW1wbGF0ZVVybGAgZGVjbGFyYXRpb24gb3IgbWFudWFsIGNvbXBpbGF0aW9uIGluc2lkZSB0aGUgY29tcGlsZSBmdW5jdGlvbi5cclxuICogPC9kaXY+XHJcbiAqXHJcbiAqIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1lcnJvclwiPlxyXG4gKiAqKk5vdGU6KiogVGhlIGB0cmFuc2NsdWRlYCBmdW5jdGlvbiB0aGF0IGlzIHBhc3NlZCB0byB0aGUgY29tcGlsZSBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCBhcyBpdFxyXG4gKiAgIGUuZy4gZG9lcyBub3Qga25vdyBhYm91dCB0aGUgcmlnaHQgb3V0ZXIgc2NvcGUuIFBsZWFzZSB1c2UgdGhlIHRyYW5zY2x1ZGUgZnVuY3Rpb24gdGhhdCBpcyBwYXNzZWRcclxuICogICB0byB0aGUgbGluayBmdW5jdGlvbiBpbnN0ZWFkLlxyXG4gKiA8L2Rpdj5cclxuXHJcbiAqIEEgY29tcGlsZSBmdW5jdGlvbiBjYW4gaGF2ZSBhIHJldHVybiB2YWx1ZSB3aGljaCBjYW4gYmUgZWl0aGVyIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0LlxyXG4gKlxyXG4gKiAqIHJldHVybmluZyBhIChwb3N0LWxpbmspIGZ1bmN0aW9uIC0gaXMgZXF1aXZhbGVudCB0byByZWdpc3RlcmluZyB0aGUgbGlua2luZyBmdW5jdGlvbiB2aWEgdGhlXHJcbiAqICAgYGxpbmtgIHByb3BlcnR5IG9mIHRoZSBjb25maWcgb2JqZWN0IHdoZW4gdGhlIGNvbXBpbGUgZnVuY3Rpb24gaXMgZW1wdHkuXHJcbiAqXHJcbiAqICogcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGZ1bmN0aW9uKHMpIHJlZ2lzdGVyZWQgdmlhIGBwcmVgIGFuZCBgcG9zdGAgcHJvcGVydGllcyAtIGFsbG93cyB5b3UgdG9cclxuICogICBjb250cm9sIHdoZW4gYSBsaW5raW5nIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZHVyaW5nIHRoZSBsaW5raW5nIHBoYXNlLiBTZWUgaW5mbyBhYm91dFxyXG4gKiAgIHByZS1saW5raW5nIGFuZCBwb3N0LWxpbmtpbmcgZnVuY3Rpb25zIGJlbG93LlxyXG4gKlxyXG4gKlxyXG4gKiAjIyMjIGBsaW5rYFxyXG4gKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgb25seSBpZiB0aGUgYGNvbXBpbGVgIHByb3BlcnR5IGlzIG5vdCBkZWZpbmVkLlxyXG4gKlxyXG4gKiBgYGBqc1xyXG4gKiAgIGZ1bmN0aW9uIGxpbmsoc2NvcGUsIEVsZW1lbnQsIGlBdHRycywgY29udHJvbGxlciwgdHJhbnNjbHVkZUZuKSB7IC4uLiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgbGluayBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgRE9NIGxpc3RlbmVycyBhcyB3ZWxsIGFzIHVwZGF0aW5nIHRoZSBET00uIEl0IGlzXHJcbiAqIGV4ZWN1dGVkIGFmdGVyIHRoZSB0ZW1wbGF0ZSBoYXMgYmVlbiBjbG9uZWQuIFRoaXMgaXMgd2hlcmUgbW9zdCBvZiB0aGUgZGlyZWN0aXZlIGxvZ2ljIHdpbGwgYmVcclxuICogcHV0LlxyXG4gKlxyXG4gKiAgICogYHNjb3BlYCAtIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIFNjb3BlfSAtIFRoZSBzY29wZSB0byBiZSB1c2VkIGJ5IHRoZVxyXG4gKiAgICAgZGlyZWN0aXZlIGZvciByZWdpc3RlcmluZyB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkd2F0Y2ggd2F0Y2hlc30uXHJcbiAqXHJcbiAqICAgKiBgRWxlbWVudGAgLSBpbnN0YW5jZSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgd2hlcmUgdGhlIGRpcmVjdGl2ZSBpcyB0byBiZSB1c2VkLiBJdCBpcyBzYWZlIHRvXHJcbiAqICAgICBtYW5pcHVsYXRlIHRoZSBjaGlsZHJlbiBvZiB0aGUgZWxlbWVudCBvbmx5IGluIGBwb3N0TGlua2AgZnVuY3Rpb24gc2luY2UgdGhlIGNoaWxkcmVuIGhhdmVcclxuICogICAgIGFscmVhZHkgYmVlbiBsaW5rZWQuXHJcbiAqXHJcbiAqICAgKiBgaUF0dHJzYCAtIGluc3RhbmNlIGF0dHJpYnV0ZXMgLSBOb3JtYWxpemVkIGxpc3Qgb2YgYXR0cmlidXRlcyBkZWNsYXJlZCBvbiB0aGlzIGVsZW1lbnQgc2hhcmVkXHJcbiAqICAgICBiZXR3ZWVuIGFsbCBkaXJlY3RpdmUgbGlua2luZyBmdW5jdGlvbnMuXHJcbiAqXHJcbiAqICAgKiBgY29udHJvbGxlcmAgLSBhIGNvbnRyb2xsZXIgaW5zdGFuY2UgLSBBIGNvbnRyb2xsZXIgaW5zdGFuY2UgaWYgYXQgbGVhc3Qgb25lIGRpcmVjdGl2ZSBvbiB0aGVcclxuICogICAgIGVsZW1lbnQgZGVmaW5lcyBhIGNvbnRyb2xsZXIuIFRoZSBjb250cm9sbGVyIGlzIHNoYXJlZCBhbW9uZyBhbGwgdGhlIGRpcmVjdGl2ZXMsIHdoaWNoIGFsbG93c1xyXG4gKiAgICAgdGhlIGRpcmVjdGl2ZXMgdG8gdXNlIHRoZSBjb250cm9sbGVycyBhcyBhIGNvbW11bmljYXRpb24gY2hhbm5lbC5cclxuICpcclxuICogICAqIGB0cmFuc2NsdWRlRm5gIC0gQSB0cmFuc2NsdWRlIGxpbmtpbmcgZnVuY3Rpb24gcHJlLWJvdW5kIHRvIHRoZSBjb3JyZWN0IHRyYW5zY2x1c2lvbiBzY29wZS5cclxuICogICAgIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGAkdHJhbnNjbHVkZWBcclxuICogICAgIHBhcmFtZXRlciBvZiBkaXJlY3RpdmUgY29udHJvbGxlcnMsIHNlZSB0aGVyZSBmb3IgZGV0YWlscy5cclxuICogICAgIGBmdW5jdGlvbihbc2NvcGVdLCBjbG9uZUxpbmtpbmdGbiwgZnV0dXJlUGFyZW50RWxlbWVudClgLlxyXG4gKlxyXG4gKiAjIyMjIFByZS1saW5raW5nIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEV4ZWN1dGVkIGJlZm9yZSB0aGUgY2hpbGQgZWxlbWVudHMgYXJlIGxpbmtlZC4gTm90IHNhZmUgdG8gZG8gRE9NIHRyYW5zZm9ybWF0aW9uIHNpbmNlIHRoZVxyXG4gKiBjb21waWxlciBsaW5raW5nIGZ1bmN0aW9uIHdpbGwgZmFpbCB0byBsb2NhdGUgdGhlIGNvcnJlY3QgZWxlbWVudHMgZm9yIGxpbmtpbmcuXHJcbiAqXHJcbiAqICMjIyMgUG9zdC1saW5raW5nIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEV4ZWN1dGVkIGFmdGVyIHRoZSBjaGlsZCBlbGVtZW50cyBhcmUgbGlua2VkLlxyXG4gKlxyXG4gKiBOb3RlIHRoYXQgY2hpbGQgZWxlbWVudHMgdGhhdCBjb250YWluIGB0ZW1wbGF0ZVVybGAgZGlyZWN0aXZlcyB3aWxsIG5vdCBoYXZlIGJlZW4gY29tcGlsZWRcclxuICogYW5kIGxpbmtlZCBzaW5jZSB0aGV5IGFyZSB3YWl0aW5nIGZvciB0aGVpciB0ZW1wbGF0ZSB0byBsb2FkIGFzeW5jaHJvbm91c2x5IGFuZCB0aGVpciBvd25cclxuICogY29tcGlsYXRpb24gYW5kIGxpbmtpbmcgaGFzIGJlZW4gc3VzcGVuZGVkIHVudGlsIHRoYXQgb2NjdXJzLlxyXG4gKlxyXG4gKiBJdCBpcyBzYWZlIHRvIGRvIERPTSB0cmFuc2Zvcm1hdGlvbiBpbiB0aGUgcG9zdC1saW5raW5nIGZ1bmN0aW9uIG9uIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCB3YWl0aW5nXHJcbiAqIGZvciB0aGVpciBhc3luYyB0ZW1wbGF0ZXMgdG8gYmUgcmVzb2x2ZWQuXHJcbiAqXHJcbiAqXHJcbiAqICMjIyBUcmFuc2NsdXNpb25cclxuICpcclxuICogVHJhbnNjbHVzaW9uIGlzIHRoZSBwcm9jZXNzIG9mIGV4dHJhY3RpbmcgYSBjb2xsZWN0aW9uIG9mIERPTSBlbGVtZW50IGZyb20gb25lIHBhcnQgb2YgdGhlIERPTSBhbmRcclxuICogY29weWluZyB0aGVtIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgRE9NLCB3aGlsZSBtYWludGFpbmluZyB0aGVpciBjb25uZWN0aW9uIHRvIHRoZSBvcmlnaW5hbCBBbmd1bGFySlNcclxuICogc2NvcGUgZnJvbSB3aGVyZSB0aGV5IHdlcmUgdGFrZW4uXHJcbiAqXHJcbiAqIFRyYW5zY2x1c2lvbiBpcyB1c2VkIChvZnRlbiB3aXRoIHtAbGluayBuZ1RyYW5zY2x1ZGV9KSB0byBpbnNlcnQgdGhlXHJcbiAqIG9yaWdpbmFsIGNvbnRlbnRzIG9mIGEgZGlyZWN0aXZlJ3MgZWxlbWVudCBpbnRvIGEgc3BlY2lmaWVkIHBsYWNlIGluIHRoZSB0ZW1wbGF0ZSBvZiB0aGUgZGlyZWN0aXZlLlxyXG4gKiBUaGUgYmVuZWZpdCBvZiB0cmFuc2NsdXNpb24sIG92ZXIgc2ltcGx5IG1vdmluZyB0aGUgRE9NIGVsZW1lbnRzIG1hbnVhbGx5LCBpcyB0aGF0IHRoZSB0cmFuc2NsdWRlZFxyXG4gKiBjb250ZW50IGhhcyBhY2Nlc3MgdG8gdGhlIHByb3BlcnRpZXMgb24gdGhlIHNjb3BlIGZyb20gd2hpY2ggaXQgd2FzIHRha2VuLCBldmVuIGlmIHRoZSBkaXJlY3RpdmVcclxuICogaGFzIGlzb2xhdGVkIHNjb3BlLlxyXG4gKiBTZWUgdGhlIHtAbGluayBndWlkZS9kaXJlY3RpdmUjY3JlYXRpbmctYS1kaXJlY3RpdmUtdGhhdC13cmFwcy1vdGhlci1lbGVtZW50cyBEaXJlY3RpdmVzIEd1aWRlfS5cclxuICpcclxuICogVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgdGhlIHdpZGdldCB0byBoYXZlIHByaXZhdGUgc3RhdGUgZm9yIGl0cyB0ZW1wbGF0ZSwgd2hpbGUgdGhlIHRyYW5zY2x1ZGVkXHJcbiAqIGNvbnRlbnQgaGFzIGFjY2VzcyB0byBpdHMgb3JpZ2luYXRpbmcgc2NvcGUuXHJcbiAqXHJcbiAqIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCI+XHJcbiAqICoqTm90ZToqKiBXaGVuIHRlc3RpbmcgYW4gZWxlbWVudCB0cmFuc2NsdWRlIGRpcmVjdGl2ZSB5b3UgbXVzdCBub3QgcGxhY2UgdGhlIGRpcmVjdGl2ZSBhdCB0aGUgcm9vdCBvZiB0aGVcclxuICogRE9NIGZyYWdtZW50IHRoYXQgaXMgYmVpbmcgY29tcGlsZWQuIFNlZSB7QGxpbmsgZ3VpZGUvdW5pdC10ZXN0aW5nI3Rlc3RpbmctdHJhbnNjbHVzaW9uLWRpcmVjdGl2ZXNcclxuICogVGVzdGluZyBUcmFuc2NsdXNpb24gRGlyZWN0aXZlc30uXHJcbiAqIDwvZGl2PlxyXG4gKlxyXG4gKiAjIyMjIFRyYW5zY2x1c2lvbiBGdW5jdGlvbnNcclxuICpcclxuICogV2hlbiBhIGRpcmVjdGl2ZSByZXF1ZXN0cyB0cmFuc2NsdXNpb24sIHRoZSBjb21waWxlciBleHRyYWN0cyBpdHMgY29udGVudHMgYW5kIHByb3ZpZGVzIGEgKip0cmFuc2NsdXNpb25cclxuICogZnVuY3Rpb24qKiB0byB0aGUgZGlyZWN0aXZlJ3MgYGxpbmtgIGZ1bmN0aW9uIGFuZCBgY29udHJvbGxlcmAuIFRoaXMgdHJhbnNjbHVzaW9uIGZ1bmN0aW9uIGlzIGEgc3BlY2lhbFxyXG4gKiAqKmxpbmtpbmcgZnVuY3Rpb24qKiB0aGF0IHdpbGwgcmV0dXJuIHRoZSBjb21waWxlZCBjb250ZW50cyBsaW5rZWQgdG8gYSBuZXcgdHJhbnNjbHVzaW9uIHNjb3BlLlxyXG4gKlxyXG4gKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gKiBJZiB5b3UgYXJlIGp1c3QgdXNpbmcge0BsaW5rIG5nVHJhbnNjbHVkZX0gdGhlbiB5b3UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGlzIGZ1bmN0aW9uLCBzaW5jZVxyXG4gKiBuZ1RyYW5zY2x1ZGUgd2lsbCBkZWFsIHdpdGggaXQgZm9yIHVzLlxyXG4gKiA8L2Rpdj5cclxuICpcclxuICogSWYgeW91IHdhbnQgdG8gbWFudWFsbHkgY29udHJvbCB0aGUgaW5zZXJ0aW9uIGFuZCByZW1vdmFsIG9mIHRoZSB0cmFuc2NsdWRlZCBjb250ZW50IGluIHlvdXIgZGlyZWN0aXZlXHJcbiAqIHRoZW4geW91IG11c3QgdXNlIHRoaXMgdHJhbnNjbHVkZSBmdW5jdGlvbi4gV2hlbiB5b3UgY2FsbCBhIHRyYW5zY2x1ZGUgZnVuY3Rpb24gaXQgcmV0dXJucyBhIGEganFMaXRlL0pRdWVyeVxyXG4gKiBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgY29tcGlsZWQgRE9NLCB3aGljaCBpcyBsaW5rZWQgdG8gdGhlIGNvcnJlY3QgdHJhbnNjbHVzaW9uIHNjb3BlLlxyXG4gKlxyXG4gKiBXaGVuIHlvdSBjYWxsIGEgdHJhbnNjbHVzaW9uIGZ1bmN0aW9uIHlvdSBjYW4gcGFzcyBpbiBhICoqY2xvbmUgYXR0YWNoIGZ1bmN0aW9uKiouIFRoaXMgZnVuY3Rpb24gYWNjZXB0c1xyXG4gKiB0d28gcGFyYW1ldGVycywgYGZ1bmN0aW9uKGNsb25lLCBzY29wZSkgeyAuLi4gfWAsIHdoZXJlIHRoZSBgY2xvbmVgIGlzIGEgZnJlc2ggY29tcGlsZWQgY29weSBvZiB5b3VyIHRyYW5zY2x1ZGVkXHJcbiAqIGNvbnRlbnQgYW5kIHRoZSBgc2NvcGVgIGlzIHRoZSBuZXdseSBjcmVhdGVkIHRyYW5zY2x1c2lvbiBzY29wZSwgdG8gd2hpY2ggdGhlIGNsb25lIGlzIGJvdW5kLlxyXG4gKlxyXG4gKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gKiAqKkJlc3QgUHJhY3RpY2UqKjogQWx3YXlzIHByb3ZpZGUgYSBgY2xvbmVGbmAgKGNsb25lIGF0dGFjaCBmdW5jdGlvbikgd2hlbiB5b3UgY2FsbCBhIHRyYW5zbHVkZSBmdW5jdGlvblxyXG4gKiBzaW5jZSB5b3UgdGhlbiBnZXQgYSBmcmVzaCBjbG9uZSBvZiB0aGUgb3JpZ2luYWwgRE9NIGFuZCBhbHNvIGhhdmUgYWNjZXNzIHRvIHRoZSBuZXcgdHJhbnNjbHVzaW9uIHNjb3BlLlxyXG4gKiA8L2Rpdj5cclxuICpcclxuICogSXQgaXMgbm9ybWFsIHByYWN0aWNlIHRvIGF0dGFjaCB5b3VyIHRyYW5zY2x1ZGVkIGNvbnRlbnQgKGBjbG9uZWApIHRvIHRoZSBET00gaW5zaWRlIHlvdXIgKipjbG9uZVxyXG4gKiBhdHRhY2ggZnVuY3Rpb24qKjpcclxuICpcclxuICogYGBganNcclxuICogdmFyIHRyYW5zY2x1ZGVkQ29udGVudCwgdHJhbnNjbHVzaW9uU2NvcGU7XHJcbiAqXHJcbiAqICR0cmFuc2NsdWRlKGZ1bmN0aW9uKGNsb25lLCBzY29wZSkge1xyXG4gKiAgIGVsZW1lbnQuYXBwZW5kKGNsb25lKTtcclxuICogICB0cmFuc2NsdWRlZENvbnRlbnQgPSBjbG9uZTtcclxuICogICB0cmFuc2NsdXNpb25TY29wZSA9IHNjb3BlO1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIExhdGVyLCBpZiB5b3Ugd2FudCB0byByZW1vdmUgdGhlIHRyYW5zY2x1ZGVkIGNvbnRlbnQgZnJvbSB5b3VyIERPTSB0aGVuIHlvdSBzaG91bGQgYWxzbyBkZXN0cm95IHRoZVxyXG4gKiBhc3NvY2lhdGVkIHRyYW5zY2x1c2lvbiBzY29wZTpcclxuICpcclxuICogYGBganNcclxuICogdHJhbnNjbHVkZWRDb250ZW50LnJlbW92ZSgpO1xyXG4gKiB0cmFuc2NsdXNpb25TY29wZS4kZGVzdHJveSgpO1xyXG4gKiBgYGBcclxuICpcclxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cclxuICogKipCZXN0IFByYWN0aWNlKio6IGlmIHlvdSBpbnRlbmQgdG8gYWRkIGFuZCByZW1vdmUgdHJhbnNjbHVkZWQgY29udGVudCBtYW51YWxseSBpbiB5b3VyIGRpcmVjdGl2ZVxyXG4gKiAoYnkgY2FsbGluZyB0aGUgdHJhbnNjbHVkZSBmdW5jdGlvbiB0byBnZXQgdGhlIERPTSBhbmQgYW5kIGNhbGxpbmcgYGVsZW1lbnQucmVtb3ZlKClgIHRvIHJlbW92ZSBpdCksXHJcbiAqIHRoZW4geW91IGFyZSBhbHNvIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGAkZGVzdHJveWAgb24gdGhlIHRyYW5zY2x1c2lvbiBzY29wZS5cclxuICogPC9kaXY+XHJcbiAqXHJcbiAqIFRoZSBidWlsdC1pbiBET00gbWFuaXB1bGF0aW9uIGRpcmVjdGl2ZXMsIHN1Y2ggYXMge0BsaW5rIG5nSWZ9LCB7QGxpbmsgbmdTd2l0Y2h9IGFuZCB7QGxpbmsgbmdSZXBlYXR9XHJcbiAqIGF1dG9tYXRpY2FsbHkgZGVzdHJveSB0aGVpciB0cmFuc2x1ZGVkIGNsb25lcyBhcyBuZWNlc3Nhcnkgc28geW91IGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoaXMgaWZcclxuICogeW91IGFyZSBzaW1wbHkgdXNpbmcge0BsaW5rIG5nVHJhbnNjbHVkZX0gdG8gaW5qZWN0IHRoZSB0cmFuc2NsdXNpb24gaW50byB5b3VyIGRpcmVjdGl2ZS5cclxuICpcclxuICpcclxuICogIyMjIyBUcmFuc2NsdXNpb24gU2NvcGVzXHJcbiAqXHJcbiAqIFdoZW4geW91IGNhbGwgYSB0cmFuc2NsdWRlIGZ1bmN0aW9uIGl0IHJldHVybnMgYSBET00gZnJhZ21lbnQgdGhhdCBpcyBwcmUtYm91bmQgdG8gYSAqKnRyYW5zY2x1c2lvblxyXG4gKiBzY29wZSoqLiBUaGlzIHNjb3BlIGlzIHNwZWNpYWwsIGluIHRoYXQgaXQgaXMgYSBjaGlsZCBvZiB0aGUgZGlyZWN0aXZlJ3Mgc2NvcGUgKGFuZCBzbyBnZXRzIGRlc3Ryb3llZFxyXG4gKiB3aGVuIHRoZSBkaXJlY3RpdmUncyBzY29wZSBnZXRzIGRlc3Ryb3llZCkgYnV0IGl0IGluaGVyaXRzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzY29wZSBmcm9tIHdoaWNoIGl0XHJcbiAqIHdhcyB0YWtlbi5cclxuICpcclxuICogRm9yIGV4YW1wbGUgY29uc2lkZXIgYSBkaXJlY3RpdmUgdGhhdCB1c2VzIHRyYW5zY2x1c2lvbiBhbmQgaXNvbGF0ZWQgc2NvcGUuIFRoZSBET00gaGllcmFyY2h5IG1pZ2h0IGxvb2tcclxuICogbGlrZSB0aGlzOlxyXG4gKlxyXG4gKiBgYGBodG1sXHJcbiAqIDxkaXYgbmctYXBwPlxyXG4gKiAgIDxkaXYgaXNvbGF0ZT5cclxuICogICAgIDxkaXYgdHJhbnNjbHVzaW9uPlxyXG4gKiAgICAgPC9kaXY+XHJcbiAqICAgPC9kaXY+XHJcbiAqIDwvZGl2PlxyXG4gKiBgYGBcclxuICpcclxuICogVGhlIGAkcGFyZW50YCBzY29wZSBoaWVyYXJjaHkgd2lsbCBsb29rIGxpa2UgdGhpczpcclxuICpcclxuICogYGBgXHJcbiAqIC0gJHJvb3RTY29wZVxyXG4gKiAgIC0gaXNvbGF0ZVxyXG4gKiAgICAgLSB0cmFuc2NsdXNpb25cclxuICogYGBgXHJcbiAqXHJcbiAqIGJ1dCB0aGUgc2NvcGVzIHdpbGwgaW5oZXJpdCBwcm90b3R5cGljYWxseSBmcm9tIGRpZmZlcmVudCBzY29wZXMgdG8gdGhlaXIgYCRwYXJlbnRgLlxyXG4gKlxyXG4gKiBgYGBcclxuICogLSAkcm9vdFNjb3BlXHJcbiAqICAgLSB0cmFuc2NsdXNpb25cclxuICogLSBpc29sYXRlXHJcbiAqIGBgYFxyXG4gKlxyXG4gKlxyXG4gKiAjIyMgQXR0cmlidXRlc1xyXG4gKlxyXG4gKiBUaGUge0BsaW5rIG5nLiRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzIEF0dHJpYnV0ZXN9IG9iamVjdCAtIHBhc3NlZCBhcyBhIHBhcmFtZXRlciBpbiB0aGVcclxuICogYGxpbmsoKWAgb3IgYGNvbXBpbGUoKWAgZnVuY3Rpb25zLiBJdCBoYXMgYSB2YXJpZXR5IG9mIHVzZXMuXHJcbiAqXHJcbiAqIGFjY2Vzc2luZyAqTm9ybWFsaXplZCBhdHRyaWJ1dGUgbmFtZXM6KlxyXG4gKiBEaXJlY3RpdmVzIGxpa2UgJ25nQmluZCcgY2FuIGJlIGV4cHJlc3NlZCBpbiBtYW55IHdheXM6ICduZzpiaW5kJywgYGRhdGEtbmctYmluZGAsIG9yICd4LW5nLWJpbmQnLlxyXG4gKiB0aGUgYXR0cmlidXRlcyBvYmplY3QgYWxsb3dzIGZvciBub3JtYWxpemVkIGFjY2VzcyB0b1xyXG4gKiAgIHRoZSBhdHRyaWJ1dGVzLlxyXG4gKlxyXG4gKiAqICpEaXJlY3RpdmUgaW50ZXItY29tbXVuaWNhdGlvbjoqIEFsbCBkaXJlY3RpdmVzIHNoYXJlIHRoZSBzYW1lIGluc3RhbmNlIG9mIHRoZSBhdHRyaWJ1dGVzXHJcbiAqICAgb2JqZWN0IHdoaWNoIGFsbG93cyB0aGUgZGlyZWN0aXZlcyB0byB1c2UgdGhlIGF0dHJpYnV0ZXMgb2JqZWN0IGFzIGludGVyIGRpcmVjdGl2ZVxyXG4gKiAgIGNvbW11bmljYXRpb24uXHJcbiAqXHJcbiAqICogKlN1cHBvcnRzIGludGVycG9sYXRpb246KiBJbnRlcnBvbGF0aW9uIGF0dHJpYnV0ZXMgYXJlIGFzc2lnbmVkIHRvIHRoZSBhdHRyaWJ1dGUgb2JqZWN0XHJcbiAqICAgYWxsb3dpbmcgb3RoZXIgZGlyZWN0aXZlcyB0byByZWFkIHRoZSBpbnRlcnBvbGF0ZWQgdmFsdWUuXHJcbiAqXHJcbiAqICogKk9ic2VydmluZyBpbnRlcnBvbGF0ZWQgYXR0cmlidXRlczoqIFVzZSBgJG9ic2VydmVgIHRvIG9ic2VydmUgdGhlIHZhbHVlIGNoYW5nZXMgb2YgYXR0cmlidXRlc1xyXG4gKiAgIHRoYXQgY29udGFpbiBpbnRlcnBvbGF0aW9uIChlLmcuIGBzcmM9XCJ7e2Jhcn19XCJgKS4gTm90IG9ubHkgaXMgdGhpcyB2ZXJ5IGVmZmljaWVudCBidXQgaXQncyBhbHNvXHJcbiAqICAgdGhlIG9ubHkgd2F5IHRvIGVhc2lseSBnZXQgdGhlIGFjdHVhbCB2YWx1ZSBiZWNhdXNlIGR1cmluZyB0aGUgbGlua2luZyBwaGFzZSB0aGUgaW50ZXJwb2xhdGlvblxyXG4gKiAgIGhhc24ndCBiZWVuIGV2YWx1YXRlZCB5ZXQgYW5kIHNvIHRoZSB2YWx1ZSBpcyBhdCB0aGlzIHRpbWUgc2V0IHRvIGB1bmRlZmluZWRgLlxyXG4gKlxyXG4gKiBgYGBqc1xyXG4gKiBmdW5jdGlvbiBsaW5raW5nRm4oc2NvcGUsIGVsbSwgYXR0cnMsIGN0cmwpIHtcclxuICogICAvLyBnZXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZVxyXG4gKiAgIGNvbnNvbGUubG9nKGF0dHJzLm5nTW9kZWwpO1xyXG4gKlxyXG4gKiAgIC8vIGNoYW5nZSB0aGUgYXR0cmlidXRlXHJcbiAqICAgYXR0cnMuJHNldCgnbmdNb2RlbCcsICduZXcgdmFsdWUnKTtcclxuICpcclxuICogICAvLyBvYnNlcnZlIGNoYW5nZXMgdG8gaW50ZXJwb2xhdGVkIGF0dHJpYnV0ZVxyXG4gKiAgIGF0dHJzLiRvYnNlcnZlKCduZ01vZGVsJywgZnVuY3Rpb24odmFsdWUpIHtcclxuICogICAgIGNvbnNvbGUubG9nKCduZ01vZGVsIGhhcyBjaGFuZ2VkIHZhbHVlIHRvICcgKyB2YWx1ZSk7XHJcbiAqICAgfSk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqICMjIEV4YW1wbGVcclxuICpcclxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIj5cclxuICogKipOb3RlKio6IFR5cGljYWxseSBkaXJlY3RpdmVzIGFyZSByZWdpc3RlcmVkIHdpdGggYG1vZHVsZS5kaXJlY3RpdmVgLiBUaGUgZXhhbXBsZSBiZWxvdyBpc1xyXG4gKiB0byBpbGx1c3RyYXRlIGhvdyBgJGNvbXBpbGVgIHdvcmtzLlxyXG4gKiA8L2Rpdj5cclxuICpcclxuIDxleGFtcGxlIG1vZHVsZT1cImNvbXBpbGVFeGFtcGxlXCI+XHJcbiAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICA8c2NyaXB0PlxyXG4gICAgICBhbmd1bGFyLm1vZHVsZSgnY29tcGlsZUV4YW1wbGUnLCBbXSwgZnVuY3Rpb24oJGNvbXBpbGVQcm92aWRlcikge1xyXG4gICAgICAgIC8vIGNvbmZpZ3VyZSBuZXcgJ2NvbXBpbGUnIGRpcmVjdGl2ZSBieSBwYXNzaW5nIGEgZGlyZWN0aXZlXHJcbiAgICAgICAgLy8gZmFjdG9yeSBmdW5jdGlvbi4gVGhlIGZhY3RvcnkgZnVuY3Rpb24gaW5qZWN0cyB0aGUgJyRjb21waWxlJ1xyXG4gICAgICAgICRjb21waWxlUHJvdmlkZXIuZGlyZWN0aXZlKCdjb21waWxlJywgZnVuY3Rpb24oJGNvbXBpbGUpIHtcclxuICAgICAgICAgIC8vIGRpcmVjdGl2ZSBmYWN0b3J5IGNyZWF0ZXMgYSBsaW5rIGZ1bmN0aW9uXHJcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSB7XHJcbiAgICAgICAgICAgIHNjb3BlLiR3YXRjaChcclxuICAgICAgICAgICAgICBmdW5jdGlvbihzY29wZSkge1xyXG4gICAgICAgICAgICAgICAgIC8vIHdhdGNoIHRoZSAnY29tcGlsZScgZXhwcmVzc2lvbiBmb3IgY2hhbmdlc1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLiRldmFsKGF0dHJzLmNvbXBpbGUpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhlICdjb21waWxlJyBleHByZXNzaW9uIGNoYW5nZXNcclxuICAgICAgICAgICAgICAgIC8vIGFzc2lnbiBpdCBpbnRvIHRoZSBjdXJyZW50IERPTVxyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5odG1sKHZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBjb21waWxlIHRoZSBuZXcgRE9NIGFuZCBsaW5rIGl0IHRvIHRoZSBjdXJyZW50XHJcbiAgICAgICAgICAgICAgICAvLyBzY29wZS5cclxuICAgICAgICAgICAgICAgIC8vIE5PVEU6IHdlIG9ubHkgY29tcGlsZSAuY2hpbGROb2RlcyBzbyB0aGF0XHJcbiAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBnZXQgaW50byBpbmZpbml0ZSBsb29wIGNvbXBpbGluZyBvdXJzZWx2ZXNcclxuICAgICAgICAgICAgICAgICRjb21waWxlKGVsZW1lbnQuY29udGVudHMoKSkoc2NvcGUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jb250cm9sbGVyKCdHcmVldGVyQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAgICAgICAgJHNjb3BlLm5hbWUgPSAnQW5ndWxhcic7XHJcbiAgICAgICAgJHNjb3BlLmh0bWwgPSAnSGVsbG8ge3tuYW1lfX0nO1xyXG4gICAgICB9XSk7XHJcbiAgICA8L3NjcmlwdD5cclxuICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkdyZWV0ZXJDb250cm9sbGVyXCI+XHJcbiAgICAgIDxpbnB1dCBuZy1tb2RlbD1cIm5hbWVcIj4gPGJyPlxyXG4gICAgICA8dGV4dGFyZWEgbmctbW9kZWw9XCJodG1sXCI+PC90ZXh0YXJlYT4gPGJyPlxyXG4gICAgICA8ZGl2IGNvbXBpbGU9XCJodG1sXCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgPC9maWxlPlxyXG4gICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgaXQoJ3Nob3VsZCBhdXRvIGNvbXBpbGUnLCBmdW5jdGlvbigpIHtcclxuICAgICAgIHZhciB0ZXh0YXJlYSA9ICQoJ3RleHRhcmVhJyk7XHJcbiAgICAgICB2YXIgb3V0cHV0ID0gJCgnZGl2W2NvbXBpbGVdJyk7XHJcbiAgICAgICAvLyBUaGUgaW5pdGlhbCBzdGF0ZSByZWFkcyAnSGVsbG8gQW5ndWxhcicuXHJcbiAgICAgICBleHBlY3Qob3V0cHV0LmdldFRleHQoKSkudG9CZSgnSGVsbG8gQW5ndWxhcicpO1xyXG4gICAgICAgdGV4dGFyZWEuY2xlYXIoKTtcclxuICAgICAgIHRleHRhcmVhLnNlbmRLZXlzKCd7e25hbWV9fSEnKTtcclxuICAgICAgIGV4cGVjdChvdXRwdXQuZ2V0VGV4dCgpKS50b0JlKCdBbmd1bGFyIScpO1xyXG4gICAgIH0pO1xyXG4gICA8L2ZpbGU+XHJcbiA8L2V4YW1wbGU+XHJcblxyXG4gKlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ3xET01FbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgb3IgSFRNTCBzdHJpbmcgdG8gY29tcGlsZSBpbnRvIGEgdGVtcGxhdGUgZnVuY3Rpb24uXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oYW5ndWxhci5TY29wZSwgY2xvbmVBdHRhY2hGbj0pfSB0cmFuc2NsdWRlIGZ1bmN0aW9uIGF2YWlsYWJsZSB0byBkaXJlY3RpdmVzIC0gREVQUkVDQVRFRC5cclxuICpcclxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWVycm9yXCI+XHJcbiAqICoqTm90ZToqKiBQYXNzaW5nIGEgYHRyYW5zY2x1ZGVgIGZ1bmN0aW9uIHRvIHRoZSAkY29tcGlsZSBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCBhcyBpdFxyXG4gKiAgIGUuZy4gd2lsbCBub3QgdXNlIHRoZSByaWdodCBvdXRlciBzY29wZS4gUGxlYXNlIHBhc3MgdGhlIHRyYW5zY2x1ZGUgZnVuY3Rpb24gYXMgYVxyXG4gKiAgIGBwYXJlbnRCb3VuZFRyYW5zY2x1ZGVGbmAgdG8gdGhlIGxpbmsgZnVuY3Rpb24gaW5zdGVhZC5cclxuICogPC9kaXY+XHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhQcmlvcml0eSBvbmx5IGFwcGx5IGRpcmVjdGl2ZXMgbG93ZXIgdGhhbiBnaXZlbiBwcmlvcml0eSAoT25seSBlZmZlY3RzIHRoZVxyXG4gKiAgICAgICAgICAgICAgICAgcm9vdCBlbGVtZW50KHMpLCBub3QgdGhlaXIgY2hpbGRyZW4pXHJcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzY29wZSwgY2xvbmVBdHRhY2hGbj0sIG9wdGlvbnM9KX0gYSBsaW5rIGZ1bmN0aW9uIHdoaWNoIGlzIHVzZWQgdG8gYmluZCB0ZW1wbGF0ZVxyXG4gKiAoYSBET00gZWxlbWVudC90cmVlKSB0byBhIHNjb3BlLiBXaGVyZTpcclxuICpcclxuICogICogYHNjb3BlYCAtIEEge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUgU2NvcGV9IHRvIGJpbmQgdG8uXHJcbiAqICAqIGBjbG9uZUF0dGFjaEZuYCAtIElmIGBjbG9uZUF0dGFjaEZuYCBpcyBwcm92aWRlZCwgdGhlbiB0aGUgbGluayBmdW5jdGlvbiB3aWxsIGNsb25lIHRoZVxyXG4gKiAgYHRlbXBsYXRlYCBhbmQgY2FsbCB0aGUgYGNsb25lQXR0YWNoRm5gIGZ1bmN0aW9uIGFsbG93aW5nIHRoZSBjYWxsZXIgdG8gYXR0YWNoIHRoZVxyXG4gKiAgY2xvbmVkIGVsZW1lbnRzIHRvIHRoZSBET00gZG9jdW1lbnQgYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlLiBUaGUgYGNsb25lQXR0YWNoRm5gIGlzXHJcbiAqICBjYWxsZWQgYXM6IDxicj4gYGNsb25lQXR0YWNoRm4oY2xvbmVkRWxlbWVudCwgc2NvcGUpYCB3aGVyZTpcclxuICpcclxuICogICAgICAqIGBjbG9uZWRFbGVtZW50YCAtIGlzIGEgY2xvbmUgb2YgdGhlIG9yaWdpbmFsIGBlbGVtZW50YCBwYXNzZWQgaW50byB0aGUgY29tcGlsZXIuXHJcbiAqICAgICAgKiBgc2NvcGVgIC0gaXMgdGhlIGN1cnJlbnQgc2NvcGUgd2l0aCB3aGljaCB0aGUgbGlua2luZyBmdW5jdGlvbiBpcyB3b3JraW5nIHdpdGguXHJcbiAqXHJcbiAqICAqIGBvcHRpb25zYCAtIEFuIG9wdGlvbmFsIG9iamVjdCBoYXNoIHdpdGggbGlua2luZyBvcHRpb25zLiBJZiBgb3B0aW9uc2AgaXMgcHJvdmlkZWQsIHRoZW4gdGhlIGZvbGxvd2luZ1xyXG4gKiAga2V5cyBtYXkgYmUgdXNlZCB0byBjb250cm9sIGxpbmtpbmcgYmVoYXZpb3I6XHJcbiAqXHJcbiAqICAgICAgKiBgcGFyZW50Qm91bmRUcmFuc2NsdWRlRm5gIC0gdGhlIHRyYW5zY2x1ZGUgZnVuY3Rpb24gbWFkZSBhdmFpbGFibGUgdG9cclxuICogICAgICAgIGRpcmVjdGl2ZXM7IGlmIGdpdmVuLCBpdCB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBsaW5rIGZ1bmN0aW9ucyBvZlxyXG4gKiAgICAgICAgZGlyZWN0aXZlcyBmb3VuZCBpbiBgZWxlbWVudGAgZHVyaW5nIGNvbXBpbGF0aW9uLlxyXG4gKiAgICAgICogYHRyYW5zY2x1ZGVDb250cm9sbGVyc2AgLSBhbiBvYmplY3QgaGFzaCB3aXRoIGtleXMgdGhhdCBtYXAgY29udHJvbGxlciBuYW1lc1xyXG4gKiAgICAgICAgdG8gY29udHJvbGxlciBpbnN0YW5jZXM7IGlmIGdpdmVuLCBpdCB3aWxsIG1ha2UgdGhlIGNvbnRyb2xsZXJzXHJcbiAqICAgICAgICBhdmFpbGFibGUgdG8gZGlyZWN0aXZlcy5cclxuICogICAgICAqIGBmdXR1cmVQYXJlbnRFbGVtZW50YCAtIGRlZmluZXMgdGhlIHBhcmVudCB0byB3aGljaCB0aGUgYGNsb25lQXR0YWNoRm5gIHdpbGwgYWRkXHJcbiAqICAgICAgICB0aGUgY2xvbmVkIGVsZW1lbnRzOyBvbmx5IG5lZWRlZCBmb3IgdHJhbnNjbHVkZXMgdGhhdCBhcmUgYWxsb3dlZCB0byBjb250YWluIG5vbiBodG1sXHJcbiAqICAgICAgICBlbGVtZW50cyAoZS5nLiBTVkcgZWxlbWVudHMpLiBTZWUgYWxzbyB0aGUgZGlyZWN0aXZlLmNvbnRyb2xsZXIgcHJvcGVydHkuXHJcbiAqXHJcbiAqIENhbGxpbmcgdGhlIGxpbmtpbmcgZnVuY3Rpb24gcmV0dXJucyB0aGUgZWxlbWVudCBvZiB0aGUgdGVtcGxhdGUuIEl0IGlzIGVpdGhlciB0aGUgb3JpZ2luYWxcclxuICogZWxlbWVudCBwYXNzZWQgaW4sIG9yIHRoZSBjbG9uZSBvZiB0aGUgZWxlbWVudCBpZiB0aGUgYGNsb25lQXR0YWNoRm5gIGlzIHByb3ZpZGVkLlxyXG4gKlxyXG4gKiBBZnRlciBsaW5raW5nIHRoZSB2aWV3IGlzIG5vdCB1cGRhdGVkIHVudGlsIGFmdGVyIGEgY2FsbCB0byAkZGlnZXN0IHdoaWNoIHR5cGljYWxseSBpcyBkb25lIGJ5XHJcbiAqIEFuZ3VsYXIgYXV0b21hdGljYWxseS5cclxuICpcclxuICogSWYgeW91IG5lZWQgYWNjZXNzIHRvIHRoZSBib3VuZCB2aWV3LCB0aGVyZSBhcmUgdHdvIHdheXMgdG8gZG8gaXQ6XHJcbiAqXHJcbiAqIC0gSWYgeW91IGFyZSBub3QgYXNraW5nIHRoZSBsaW5raW5nIGZ1bmN0aW9uIHRvIGNsb25lIHRoZSB0ZW1wbGF0ZSwgY3JlYXRlIHRoZSBET00gZWxlbWVudChzKVxyXG4gKiAgIGJlZm9yZSB5b3Ugc2VuZCB0aGVtIHRvIHRoZSBjb21waWxlciBhbmQga2VlcCB0aGlzIHJlZmVyZW5jZSBhcm91bmQuXHJcbiAqICAgYGBganNcclxuICogICAgIHZhciBlbGVtZW50ID0gJGNvbXBpbGUoJzxwPnt7dG90YWx9fTwvcD4nKShzY29wZSk7XHJcbiAqICAgYGBgXHJcbiAqXHJcbiAqIC0gaWYgb24gdGhlIG90aGVyIGhhbmQsIHlvdSBuZWVkIHRoZSBlbGVtZW50IHRvIGJlIGNsb25lZCwgdGhlIHZpZXcgcmVmZXJlbmNlIGZyb20gdGhlIG9yaWdpbmFsXHJcbiAqICAgZXhhbXBsZSB3b3VsZCBub3QgcG9pbnQgdG8gdGhlIGNsb25lLCBidXQgcmF0aGVyIHRvIHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZSB0aGF0IHdhcyBjbG9uZWQuIEluXHJcbiAqICAgdGhpcyBjYXNlLCB5b3UgY2FuIGFjY2VzcyB0aGUgY2xvbmUgdmlhIHRoZSBjbG9uZUF0dGFjaEZuOlxyXG4gKiAgIGBgYGpzXHJcbiAqICAgICB2YXIgdGVtcGxhdGVFbGVtZW50ID0gYW5ndWxhci5lbGVtZW50KCc8cD57e3RvdGFsfX08L3A+JyksXHJcbiAqICAgICAgICAgc2NvcGUgPSAuLi4uO1xyXG4gKlxyXG4gKiAgICAgdmFyIGNsb25lZEVsZW1lbnQgPSAkY29tcGlsZSh0ZW1wbGF0ZUVsZW1lbnQpKHNjb3BlLCBmdW5jdGlvbihjbG9uZWRFbGVtZW50LCBzY29wZSkge1xyXG4gKiAgICAgICAvL2F0dGFjaCB0aGUgY2xvbmUgdG8gRE9NIGRvY3VtZW50IGF0IHRoZSByaWdodCBwbGFjZVxyXG4gKiAgICAgfSk7XHJcbiAqXHJcbiAqICAgICAvL25vdyB3ZSBoYXZlIHJlZmVyZW5jZSB0byB0aGUgY2xvbmVkIERPTSB2aWEgYGNsb25lZEVsZW1lbnRgXHJcbiAqICAgYGBgXHJcbiAqXHJcbiAqXHJcbiAqIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdGhlIGNvbXBpbGVyIHdvcmtzLCBzZWUgdGhlXHJcbiAqIHtAbGluayBndWlkZS9jb21waWxlciBBbmd1bGFyIEhUTUwgQ29tcGlsZXJ9IHNlY3Rpb24gb2YgdGhlIERldmVsb3BlciBHdWlkZS5cclxuICovXHJcblxyXG52YXIgJGNvbXBpbGVNaW5FcnIgPSBtaW5FcnIoJyRjb21waWxlJyk7XHJcblxyXG4vKipcclxuICogQG5nZG9jIHByb3ZpZGVyXHJcbiAqIEBuYW1lICRjb21waWxlUHJvdmlkZXJcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqL1xyXG4kQ29tcGlsZVByb3ZpZGVyLiRpbmplY3QgPSBbJyRwcm92aWRlJywgJyQkc2FuaXRpemVVcmlQcm92aWRlciddO1xyXG5mdW5jdGlvbiAkQ29tcGlsZVByb3ZpZGVyKCRwcm92aWRlLCAkJHNhbml0aXplVXJpUHJvdmlkZXIpIHtcclxuICB2YXIgaGFzRGlyZWN0aXZlcyA9IHt9LFxyXG4gICAgICBTdWZmaXggPSAnRGlyZWN0aXZlJyxcclxuICAgICAgQ09NTUVOVF9ESVJFQ1RJVkVfUkVHRVhQID0gL15cXHMqZGlyZWN0aXZlXFw6XFxzKihbXFx3XFwtXSspXFxzKyguKikkLyxcclxuICAgICAgQ0xBU1NfRElSRUNUSVZFX1JFR0VYUCA9IC8oKFtcXHdcXC1dKykoPzpcXDooW147XSspKT87PykvLFxyXG4gICAgICBBTExfT1JfTk9USElOR19BVFRSUyA9IG1ha2VNYXAoJ25nU3JjLG5nU3Jjc2V0LHNyYyxzcmNzZXQnKSxcclxuICAgICAgUkVRVUlSRV9QUkVGSVhfUkVHRVhQID0gL14oPzooXFxeXFxePyk/KFxcPyk/KFxcXlxcXj8pPyk/LztcclxuXHJcbiAgLy8gUmVmOiBodHRwOi8vZGV2ZWxvcGVycy53aGF0d2cub3JnL3dlYmFwcGFwaXMuaHRtbCNldmVudC1oYW5kbGVyLWlkbC1hdHRyaWJ1dGVzXHJcbiAgLy8gVGhlIGFzc3VtcHRpb24gaXMgdGhhdCBmdXR1cmUgRE9NIGV2ZW50IGF0dHJpYnV0ZSBuYW1lcyB3aWxsIGJlZ2luIHdpdGhcclxuICAvLyAnb24nIGFuZCBiZSBjb21wb3NlZCBvZiBvbmx5IEVuZ2xpc2ggbGV0dGVycy5cclxuICB2YXIgRVZFTlRfSEFORExFUl9BVFRSX1JFR0VYUCA9IC9eKG9uW2Etel0rfGZvcm1hY3Rpb24pJC87XHJcblxyXG4gIGZ1bmN0aW9uIHBhcnNlSXNvbGF0ZUJpbmRpbmdzKHNjb3BlLCBkaXJlY3RpdmVOYW1lKSB7XHJcbiAgICB2YXIgTE9DQUxfUkVHRVhQID0gL15cXHMqKFtAJl18PShcXCo/KSkoXFw/PylcXHMqKFxcdyopXFxzKiQvO1xyXG5cclxuICAgIHZhciBiaW5kaW5ncyA9IHt9O1xyXG5cclxuICAgIGZvckVhY2goc2NvcGUsIGZ1bmN0aW9uKGRlZmluaXRpb24sIHNjb3BlTmFtZSkge1xyXG4gICAgICB2YXIgbWF0Y2ggPSBkZWZpbml0aW9uLm1hdGNoKExPQ0FMX1JFR0VYUCk7XHJcblxyXG4gICAgICBpZiAoIW1hdGNoKSB7XHJcbiAgICAgICAgdGhyb3cgJGNvbXBpbGVNaW5FcnIoJ2lzY3AnLFxyXG4gICAgICAgICAgICBcIkludmFsaWQgaXNvbGF0ZSBzY29wZSBkZWZpbml0aW9uIGZvciBkaXJlY3RpdmUgJ3swfScuXCIgK1xyXG4gICAgICAgICAgICBcIiBEZWZpbml0aW9uOiB7Li4uIHsxfTogJ3syfScgLi4ufVwiLFxyXG4gICAgICAgICAgICBkaXJlY3RpdmVOYW1lLCBzY29wZU5hbWUsIGRlZmluaXRpb24pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBiaW5kaW5nc1tzY29wZU5hbWVdID0ge1xyXG4gICAgICAgIG1vZGU6IG1hdGNoWzFdWzBdLFxyXG4gICAgICAgIGNvbGxlY3Rpb246IG1hdGNoWzJdID09PSAnKicsXHJcbiAgICAgICAgb3B0aW9uYWw6IG1hdGNoWzNdID09PSAnPycsXHJcbiAgICAgICAgYXR0ck5hbWU6IG1hdGNoWzRdIHx8IHNjb3BlTmFtZVxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGJpbmRpbmdzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lICRjb21waWxlUHJvdmlkZXIjZGlyZWN0aXZlXHJcbiAgICogQGtpbmQgZnVuY3Rpb25cclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIFJlZ2lzdGVyIGEgbmV3IGRpcmVjdGl2ZSB3aXRoIHRoZSBjb21waWxlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gbmFtZSBOYW1lIG9mIHRoZSBkaXJlY3RpdmUgaW4gY2FtZWwtY2FzZSAoaS5lLiA8Y29kZT5uZ0JpbmQ8L2NvZGU+IHdoaWNoXHJcbiAgICogICAgd2lsbCBtYXRjaCBhcyA8Y29kZT5uZy1iaW5kPC9jb2RlPiksIG9yIGFuIG9iamVjdCBtYXAgb2YgZGlyZWN0aXZlcyB3aGVyZSB0aGUga2V5cyBhcmUgdGhlXHJcbiAgICogICAgbmFtZXMgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZSBmYWN0b3JpZXMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbnxBcnJheX0gZGlyZWN0aXZlRmFjdG9yeSBBbiBpbmplY3RhYmxlIGRpcmVjdGl2ZSBmYWN0b3J5IGZ1bmN0aW9uLiBTZWVcclxuICAgKiAgICB7QGxpbmsgZ3VpZGUvZGlyZWN0aXZlfSBmb3IgbW9yZSBpbmZvLlxyXG4gICAqIEByZXR1cm5zIHtuZy4kY29tcGlsZVByb3ZpZGVyfSBTZWxmIGZvciBjaGFpbmluZy5cclxuICAgKi9cclxuICAgdGhpcy5kaXJlY3RpdmUgPSBmdW5jdGlvbiByZWdpc3RlckRpcmVjdGl2ZShuYW1lLCBkaXJlY3RpdmVGYWN0b3J5KSB7XHJcbiAgICBhc3NlcnROb3RIYXNPd25Qcm9wZXJ0eShuYW1lLCAnZGlyZWN0aXZlJyk7XHJcbiAgICBpZiAoaXNTdHJpbmcobmFtZSkpIHtcclxuICAgICAgYXNzZXJ0QXJnKGRpcmVjdGl2ZUZhY3RvcnksICdkaXJlY3RpdmVGYWN0b3J5Jyk7XHJcbiAgICAgIGlmICghaGFzRGlyZWN0aXZlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgIGhhc0RpcmVjdGl2ZXNbbmFtZV0gPSBbXTtcclxuICAgICAgICAkcHJvdmlkZS5mYWN0b3J5KG5hbWUgKyBTdWZmaXgsIFsnJGluamVjdG9yJywgJyRleGNlcHRpb25IYW5kbGVyJyxcclxuICAgICAgICAgIGZ1bmN0aW9uKCRpbmplY3RvciwgJGV4Y2VwdGlvbkhhbmRsZXIpIHtcclxuICAgICAgICAgICAgdmFyIGRpcmVjdGl2ZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yRWFjaChoYXNEaXJlY3RpdmVzW25hbWVdLCBmdW5jdGlvbihkaXJlY3RpdmVGYWN0b3J5LCBpbmRleCkge1xyXG4gICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGlyZWN0aXZlID0gJGluamVjdG9yLmludm9rZShkaXJlY3RpdmVGYWN0b3J5KTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRpcmVjdGl2ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlID0geyBjb21waWxlOiB2YWx1ZUZuKGRpcmVjdGl2ZSkgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRpcmVjdGl2ZS5jb21waWxlICYmIGRpcmVjdGl2ZS5saW5rKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS5jb21waWxlID0gdmFsdWVGbihkaXJlY3RpdmUubGluayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmUucHJpb3JpdHkgPSBkaXJlY3RpdmUucHJpb3JpdHkgfHwgMDtcclxuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS5pbmRleCA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlLm5hbWUgPSBkaXJlY3RpdmUubmFtZSB8fCBuYW1lO1xyXG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlLnJlcXVpcmUgPSBkaXJlY3RpdmUucmVxdWlyZSB8fCAoZGlyZWN0aXZlLmNvbnRyb2xsZXIgJiYgZGlyZWN0aXZlLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlLnJlc3RyaWN0ID0gZGlyZWN0aXZlLnJlc3RyaWN0IHx8ICdFQSc7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QoZGlyZWN0aXZlLnNjb3BlKSkge1xyXG4gICAgICAgICAgICAgICAgICBkaXJlY3RpdmUuJCRpc29sYXRlQmluZGluZ3MgPSBwYXJzZUlzb2xhdGVCaW5kaW5ncyhkaXJlY3RpdmUuc2NvcGUsIGRpcmVjdGl2ZS5uYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMucHVzaChkaXJlY3RpdmUpO1xyXG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBkaXJlY3RpdmVzO1xyXG4gICAgICAgICAgfV0pO1xyXG4gICAgICB9XHJcbiAgICAgIGhhc0RpcmVjdGl2ZXNbbmFtZV0ucHVzaChkaXJlY3RpdmVGYWN0b3J5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvckVhY2gobmFtZSwgcmV2ZXJzZVBhcmFtcyhyZWdpc3RlckRpcmVjdGl2ZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSAkY29tcGlsZVByb3ZpZGVyI2FIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0XHJcbiAgICogQGtpbmQgZnVuY3Rpb25cclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIFJldHJpZXZlcyBvciBvdmVycmlkZXMgdGhlIGRlZmF1bHQgcmVndWxhciBleHByZXNzaW9uIHRoYXQgaXMgdXNlZCBmb3Igd2hpdGVsaXN0aW5nIG9mIHNhZmVcclxuICAgKiB1cmxzIGR1cmluZyBhW2hyZWZdIHNhbml0aXphdGlvbi5cclxuICAgKlxyXG4gICAqIFRoZSBzYW5pdGl6YXRpb24gaXMgYSBzZWN1cml0eSBtZWFzdXJlIGFpbWVkIGF0IHByZXZlbnQgWFNTIGF0dGFja3MgdmlhIGh0bWwgbGlua3MuXHJcbiAgICpcclxuICAgKiBBbnkgdXJsIGFib3V0IHRvIGJlIGFzc2lnbmVkIHRvIGFbaHJlZl0gdmlhIGRhdGEtYmluZGluZyBpcyBmaXJzdCBub3JtYWxpemVkIGFuZCB0dXJuZWQgaW50b1xyXG4gICAqIGFuIGFic29sdXRlIHVybC4gQWZ0ZXJ3YXJkcywgdGhlIHVybCBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIGBhSHJlZlNhbml0aXphdGlvbldoaXRlbGlzdGBcclxuICAgKiByZWd1bGFyIGV4cHJlc3Npb24uIElmIGEgbWF0Y2ggaXMgZm91bmQsIHRoZSBvcmlnaW5hbCB1cmwgaXMgd3JpdHRlbiBpbnRvIHRoZSBkb20uIE90aGVyd2lzZSxcclxuICAgKiB0aGUgYWJzb2x1dGUgdXJsIGlzIHByZWZpeGVkIHdpdGggYCd1bnNhZmU6J2Agc3RyaW5nIGFuZCBvbmx5IHRoZW4gaXMgaXQgd3JpdHRlbiBpbnRvIHRoZSBET00uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1JlZ0V4cD19IHJlZ2V4cCBOZXcgcmVnZXhwIHRvIHdoaXRlbGlzdCB1cmxzIHdpdGguXHJcbiAgICogQHJldHVybnMge1JlZ0V4cHxuZy4kY29tcGlsZVByb3ZpZGVyfSBDdXJyZW50IFJlZ0V4cCBpZiBjYWxsZWQgd2l0aG91dCB2YWx1ZSBvciBzZWxmIGZvclxyXG4gICAqICAgIGNoYWluaW5nIG90aGVyd2lzZS5cclxuICAgKi9cclxuICB0aGlzLmFIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0ID0gZnVuY3Rpb24ocmVnZXhwKSB7XHJcbiAgICBpZiAoaXNEZWZpbmVkKHJlZ2V4cCkpIHtcclxuICAgICAgJCRzYW5pdGl6ZVVyaVByb3ZpZGVyLmFIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0KHJlZ2V4cCk7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICQkc2FuaXRpemVVcmlQcm92aWRlci5hSHJlZlNhbml0aXphdGlvbldoaXRlbGlzdCgpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgJGNvbXBpbGVQcm92aWRlciNpbWdTcmNTYW5pdGl6YXRpb25XaGl0ZWxpc3RcclxuICAgKiBAa2luZCBmdW5jdGlvblxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogUmV0cmlldmVzIG9yIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBpcyB1c2VkIGZvciB3aGl0ZWxpc3Rpbmcgb2Ygc2FmZVxyXG4gICAqIHVybHMgZHVyaW5nIGltZ1tzcmNdIHNhbml0aXphdGlvbi5cclxuICAgKlxyXG4gICAqIFRoZSBzYW5pdGl6YXRpb24gaXMgYSBzZWN1cml0eSBtZWFzdXJlIGFpbWVkIGF0IHByZXZlbnQgWFNTIGF0dGFja3MgdmlhIGh0bWwgbGlua3MuXHJcbiAgICpcclxuICAgKiBBbnkgdXJsIGFib3V0IHRvIGJlIGFzc2lnbmVkIHRvIGltZ1tzcmNdIHZpYSBkYXRhLWJpbmRpbmcgaXMgZmlyc3Qgbm9ybWFsaXplZCBhbmQgdHVybmVkIGludG9cclxuICAgKiBhbiBhYnNvbHV0ZSB1cmwuIEFmdGVyd2FyZHMsIHRoZSB1cmwgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBgaW1nU3JjU2FuaXRpemF0aW9uV2hpdGVsaXN0YFxyXG4gICAqIHJlZ3VsYXIgZXhwcmVzc2lvbi4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgdGhlIG9yaWdpbmFsIHVybCBpcyB3cml0dGVuIGludG8gdGhlIGRvbS4gT3RoZXJ3aXNlLFxyXG4gICAqIHRoZSBhYnNvbHV0ZSB1cmwgaXMgcHJlZml4ZWQgd2l0aCBgJ3Vuc2FmZTonYCBzdHJpbmcgYW5kIG9ubHkgdGhlbiBpcyBpdCB3cml0dGVuIGludG8gdGhlIERPTS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UmVnRXhwPX0gcmVnZXhwIE5ldyByZWdleHAgdG8gd2hpdGVsaXN0IHVybHMgd2l0aC5cclxuICAgKiBAcmV0dXJucyB7UmVnRXhwfG5nLiRjb21waWxlUHJvdmlkZXJ9IEN1cnJlbnQgUmVnRXhwIGlmIGNhbGxlZCB3aXRob3V0IHZhbHVlIG9yIHNlbGYgZm9yXHJcbiAgICogICAgY2hhaW5pbmcgb3RoZXJ3aXNlLlxyXG4gICAqL1xyXG4gIHRoaXMuaW1nU3JjU2FuaXRpemF0aW9uV2hpdGVsaXN0ID0gZnVuY3Rpb24ocmVnZXhwKSB7XHJcbiAgICBpZiAoaXNEZWZpbmVkKHJlZ2V4cCkpIHtcclxuICAgICAgJCRzYW5pdGl6ZVVyaVByb3ZpZGVyLmltZ1NyY1Nhbml0aXphdGlvbldoaXRlbGlzdChyZWdleHApO1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAkJHNhbml0aXplVXJpUHJvdmlkZXIuaW1nU3JjU2FuaXRpemF0aW9uV2hpdGVsaXN0KCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lICAkY29tcGlsZVByb3ZpZGVyI2RlYnVnSW5mb0VuYWJsZWRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbj19IGVuYWJsZWQgdXBkYXRlIHRoZSBkZWJ1Z0luZm9FbmFibGVkIHN0YXRlIGlmIHByb3ZpZGVkLCBvdGhlcndpc2UganVzdCByZXR1cm4gdGhlXHJcbiAgICogY3VycmVudCBkZWJ1Z0luZm9FbmFibGVkIHN0YXRlXHJcbiAgICogQHJldHVybnMgeyp9IGN1cnJlbnQgdmFsdWUgaWYgdXNlZCBhcyBnZXR0ZXIgb3IgaXRzZWxmIChjaGFpbmluZykgaWYgdXNlZCBhcyBzZXR0ZXJcclxuICAgKlxyXG4gICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBDYWxsIHRoaXMgbWV0aG9kIHRvIGVuYWJsZS9kaXNhYmxlIHZhcmlvdXMgZGVidWcgcnVudGltZSBpbmZvcm1hdGlvbiBpbiB0aGUgY29tcGlsZXIgc3VjaCBhcyBhZGRpbmdcclxuICAgKiBiaW5kaW5nIGluZm9ybWF0aW9uIGFuZCBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBzY29wZSBvbiB0byBET00gZWxlbWVudHMuXHJcbiAgICogSWYgZW5hYmxlZCwgdGhlIGNvbXBpbGVyIHdpbGwgYWRkIHRoZSBmb2xsb3dpbmcgdG8gRE9NIGVsZW1lbnRzIHRoYXQgaGF2ZSBiZWVuIGJvdW5kIHRvIHRoZSBzY29wZVxyXG4gICAqICogYG5nLWJpbmRpbmdgIENTUyBjbGFzc1xyXG4gICAqICogYCRiaW5kaW5nYCBkYXRhIHByb3BlcnR5IGNvbnRhaW5pbmcgYW4gYXJyYXkgb2YgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnNcclxuICAgKlxyXG4gICAqIFlvdSBtYXkgd2FudCB0byB1c2UgdGhpcyBpbiBwcm9kdWN0aW9uIGZvciBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGJvb3N0LiBTZWVcclxuICAgKiB7QGxpbmsgZ3VpZGUvcHJvZHVjdGlvbiNkaXNhYmxpbmctZGVidWctZGF0YSBEaXNhYmxpbmcgRGVidWcgRGF0YX0gZm9yIG1vcmUuXHJcbiAgICpcclxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxyXG4gICAqL1xyXG4gIHZhciBkZWJ1Z0luZm9FbmFibGVkID0gdHJ1ZTtcclxuICB0aGlzLmRlYnVnSW5mb0VuYWJsZWQgPSBmdW5jdGlvbihlbmFibGVkKSB7XHJcbiAgICBpZiAoaXNEZWZpbmVkKGVuYWJsZWQpKSB7XHJcbiAgICAgIGRlYnVnSW5mb0VuYWJsZWQgPSBlbmFibGVkO1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHJldHVybiBkZWJ1Z0luZm9FbmFibGVkO1xyXG4gIH07XHJcblxyXG4gIHRoaXMuJGdldCA9IFtcclxuICAgICAgICAgICAgJyRpbmplY3RvcicsICckaW50ZXJwb2xhdGUnLCAnJGV4Y2VwdGlvbkhhbmRsZXInLCAnJHRlbXBsYXRlUmVxdWVzdCcsICckcGFyc2UnLFxyXG4gICAgICAgICAgICAnJGNvbnRyb2xsZXInLCAnJHJvb3RTY29wZScsICckZG9jdW1lbnQnLCAnJHNjZScsICckYW5pbWF0ZScsICckJHNhbml0aXplVXJpJyxcclxuICAgIGZ1bmN0aW9uKCRpbmplY3RvciwgICAkaW50ZXJwb2xhdGUsICAgJGV4Y2VwdGlvbkhhbmRsZXIsICAgJHRlbXBsYXRlUmVxdWVzdCwgICAkcGFyc2UsXHJcbiAgICAgICAgICAgICAkY29udHJvbGxlciwgICAkcm9vdFNjb3BlLCAgICRkb2N1bWVudCwgICAkc2NlLCAgICRhbmltYXRlLCAgICQkc2FuaXRpemVVcmkpIHtcclxuXHJcbiAgICB2YXIgQXR0cmlidXRlcyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZXNUb0NvcHkpIHtcclxuICAgICAgaWYgKGF0dHJpYnV0ZXNUb0NvcHkpIHtcclxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZXNUb0NvcHkpO1xyXG4gICAgICAgIHZhciBpLCBsLCBrZXk7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAga2V5ID0ga2V5c1tpXTtcclxuICAgICAgICAgIHRoaXNba2V5XSA9IGF0dHJpYnV0ZXNUb0NvcHlba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy4kYXR0ciA9IHt9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLiQkZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICB9O1xyXG5cclxuICAgIEF0dHJpYnV0ZXMucHJvdG90eXBlID0ge1xyXG4gICAgICAkbm9ybWFsaXplOiBkaXJlY3RpdmVOb3JtYWxpemUsXHJcblxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICogQG5hbWUgJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXMjJGFkZENsYXNzXHJcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAgKiBBZGRzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFzc1ZhbCBwYXJhbWV0ZXIgdG8gdGhlIGVsZW1lbnQuIElmIGFuaW1hdGlvbnNcclxuICAgICAgICogYXJlIGVuYWJsZWQgdGhlbiBhbiBhbmltYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWQgZm9yIHRoZSBjbGFzcyBhZGRpdGlvbi5cclxuICAgICAgICpcclxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzVmFsIFRoZSBjbGFzc05hbWUgdmFsdWUgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbGVtZW50XHJcbiAgICAgICAqL1xyXG4gICAgICAkYWRkQ2xhc3M6IGZ1bmN0aW9uKGNsYXNzVmFsKSB7XHJcbiAgICAgICAgaWYgKGNsYXNzVmFsICYmIGNsYXNzVmFsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICRhbmltYXRlLmFkZENsYXNzKHRoaXMuJCRlbGVtZW50LCBjbGFzc1ZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICogQG5hbWUgJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXMjJHJlbW92ZUNsYXNzXHJcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAgKiBSZW1vdmVzIHRoZSBDU1MgY2xhc3MgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBjbGFzc1ZhbCBwYXJhbWV0ZXIgZnJvbSB0aGUgZWxlbWVudC4gSWZcclxuICAgICAgICogYW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB0aGVuIGFuIGFuaW1hdGlvbiB3aWxsIGJlIHRyaWdnZXJlZCBmb3IgdGhlIGNsYXNzIHJlbW92YWwuXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc1ZhbCBUaGUgY2xhc3NOYW1lIHZhbHVlIHRoYXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGVsZW1lbnRcclxuICAgICAgICovXHJcbiAgICAgICRyZW1vdmVDbGFzczogZnVuY3Rpb24oY2xhc3NWYWwpIHtcclxuICAgICAgICBpZiAoY2xhc3NWYWwgJiYgY2xhc3NWYWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgJGFuaW1hdGUucmVtb3ZlQ2xhc3ModGhpcy4kJGVsZW1lbnQsIGNsYXNzVmFsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICAgKiBAbmFtZSAkY29tcGlsZS5kaXJlY3RpdmUuQXR0cmlidXRlcyMkdXBkYXRlQ2xhc3NcclxuICAgICAgICogQGtpbmQgZnVuY3Rpb25cclxuICAgICAgICpcclxuICAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICAqIEFkZHMgYW5kIHJlbW92ZXMgdGhlIGFwcHJvcHJpYXRlIENTUyBjbGFzcyB2YWx1ZXMgdG8gdGhlIGVsZW1lbnQgYmFzZWQgb24gdGhlIGRpZmZlcmVuY2VcclxuICAgICAgICogYmV0d2VlbiB0aGUgbmV3IGFuZCBvbGQgQ1NTIGNsYXNzIHZhbHVlcyAoc3BlY2lmaWVkIGFzIG5ld0NsYXNzZXMgYW5kIG9sZENsYXNzZXMpLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3Q2xhc3NlcyBUaGUgY3VycmVudCBDU1MgY2xhc3NOYW1lIHZhbHVlXHJcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvbGRDbGFzc2VzIFRoZSBmb3JtZXIgQ1NTIGNsYXNzTmFtZSB2YWx1ZVxyXG4gICAgICAgKi9cclxuICAgICAgJHVwZGF0ZUNsYXNzOiBmdW5jdGlvbihuZXdDbGFzc2VzLCBvbGRDbGFzc2VzKSB7XHJcbiAgICAgICAgdmFyIHRvQWRkID0gdG9rZW5EaWZmZXJlbmNlKG5ld0NsYXNzZXMsIG9sZENsYXNzZXMpO1xyXG4gICAgICAgIGlmICh0b0FkZCAmJiB0b0FkZC5sZW5ndGgpIHtcclxuICAgICAgICAgICRhbmltYXRlLmFkZENsYXNzKHRoaXMuJCRlbGVtZW50LCB0b0FkZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdG9SZW1vdmUgPSB0b2tlbkRpZmZlcmVuY2Uob2xkQ2xhc3NlcywgbmV3Q2xhc3Nlcyk7XHJcbiAgICAgICAgaWYgKHRvUmVtb3ZlICYmIHRvUmVtb3ZlLmxlbmd0aCkge1xyXG4gICAgICAgICAgJGFuaW1hdGUucmVtb3ZlQ2xhc3ModGhpcy4kJGVsZW1lbnQsIHRvUmVtb3ZlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogU2V0IGEgbm9ybWFsaXplZCBhdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQgaW4gYSB3YXkgc3VjaCB0aGF0IGFsbCBkaXJlY3RpdmVzXHJcbiAgICAgICAqIGNhbiBzaGFyZSB0aGUgYXR0cmlidXRlLiBUaGlzIGZ1bmN0aW9uIHByb3Blcmx5IGhhbmRsZXMgYm9vbGVhbiBhdHRyaWJ1dGVzLlxyXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IE5vcm1hbGl6ZWQga2V5LiAoaWUgbmdBdHRyaWJ1dGUpXHJcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuIElmIGBudWxsYCBhdHRyaWJ1dGUgd2lsbCBiZSBkZWxldGVkLlxyXG4gICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSB3cml0ZUF0dHIgSWYgZmFsc2UsIGRvZXMgbm90IHdyaXRlIHRoZSB2YWx1ZSB0byBET00gZWxlbWVudCBhdHRyaWJ1dGUuXHJcbiAgICAgICAqICAgICBEZWZhdWx0cyB0byB0cnVlLlxyXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZz19IGF0dHJOYW1lIE9wdGlvbmFsIG5vbmUgbm9ybWFsaXplZCBuYW1lLiBEZWZhdWx0cyB0byBrZXkuXHJcbiAgICAgICAqL1xyXG4gICAgICAkc2V0OiBmdW5jdGlvbihrZXksIHZhbHVlLCB3cml0ZUF0dHIsIGF0dHJOYW1lKSB7XHJcbiAgICAgICAgLy8gVE9ETzogZGVjaWRlIHdoZXRoZXIgb3Igbm90IHRvIHRocm93IGFuIGVycm9yIGlmIFwiY2xhc3NcIlxyXG4gICAgICAgIC8vaXMgc2V0IHRocm91Z2ggdGhpcyBmdW5jdGlvbiBzaW5jZSBpdCBtYXkgY2F1c2UgJHVwZGF0ZUNsYXNzIHRvXHJcbiAgICAgICAgLy9iZWNvbWUgdW5zdGFibGUuXHJcblxyXG4gICAgICAgIHZhciBub2RlID0gdGhpcy4kJGVsZW1lbnRbMF0sXHJcbiAgICAgICAgICAgIGJvb2xlYW5LZXkgPSBnZXRCb29sZWFuQXR0ck5hbWUobm9kZSwga2V5KSxcclxuICAgICAgICAgICAgYWxpYXNlZEtleSA9IGdldEFsaWFzZWRBdHRyTmFtZShub2RlLCBrZXkpLFxyXG4gICAgICAgICAgICBvYnNlcnZlciA9IGtleSxcclxuICAgICAgICAgICAgbm9kZU5hbWU7XHJcblxyXG4gICAgICAgIGlmIChib29sZWFuS2V5KSB7XHJcbiAgICAgICAgICB0aGlzLiQkZWxlbWVudC5wcm9wKGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgYXR0ck5hbWUgPSBib29sZWFuS2V5O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYWxpYXNlZEtleSkge1xyXG4gICAgICAgICAgdGhpc1thbGlhc2VkS2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgb2JzZXJ2ZXIgPSBhbGlhc2VkS2V5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpc1trZXldID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHRyYW5zbGF0ZSBub3JtYWxpemVkIGtleSB0byBhY3R1YWwga2V5XHJcbiAgICAgICAgaWYgKGF0dHJOYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLiRhdHRyW2tleV0gPSBhdHRyTmFtZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYXR0ck5hbWUgPSB0aGlzLiRhdHRyW2tleV07XHJcbiAgICAgICAgICBpZiAoIWF0dHJOYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGF0dHJba2V5XSA9IGF0dHJOYW1lID0gc25ha2VfY2FzZShrZXksICctJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBub2RlTmFtZSA9IG5vZGVOYW1lXyh0aGlzLiQkZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGlmICgobm9kZU5hbWUgPT09ICdhJyAmJiBrZXkgPT09ICdocmVmJykgfHxcclxuICAgICAgICAgICAgKG5vZGVOYW1lID09PSAnaW1nJyAmJiBrZXkgPT09ICdzcmMnKSkge1xyXG4gICAgICAgICAgLy8gc2FuaXRpemUgYVtocmVmXSBhbmQgaW1nW3NyY10gdmFsdWVzXHJcbiAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZSA9ICQkc2FuaXRpemVVcmkodmFsdWUsIGtleSA9PT0gJ3NyYycpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobm9kZU5hbWUgPT09ICdpbWcnICYmIGtleSA9PT0gJ3NyY3NldCcpIHtcclxuICAgICAgICAgIC8vIHNhbml0aXplIGltZ1tzcmNzZXRdIHZhbHVlc1xyXG4gICAgICAgICAgdmFyIHJlc3VsdCA9IFwiXCI7XHJcblxyXG4gICAgICAgICAgLy8gZmlyc3QgY2hlY2sgaWYgdGhlcmUgYXJlIHNwYWNlcyBiZWNhdXNlIGl0J3Mgbm90IHRoZSBzYW1lIHBhdHRlcm5cclxuICAgICAgICAgIHZhciB0cmltbWVkU3Jjc2V0ID0gdHJpbSh2YWx1ZSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAoICAgOTk5eCAgICx8ICAgOTk5dyAgICx8ICAgLHwsICAgKVxyXG4gICAgICAgICAgdmFyIHNyY1BhdHRlcm4gPSAvKFxccytcXGQreFxccyosfFxccytcXGQrd1xccyosfFxccyssfCxcXHMrKS87XHJcbiAgICAgICAgICB2YXIgcGF0dGVybiA9IC9cXHMvLnRlc3QodHJpbW1lZFNyY3NldCkgPyBzcmNQYXR0ZXJuIDogLygsKS87XHJcblxyXG4gICAgICAgICAgLy8gc3BsaXQgc3Jjc2V0IGludG8gdHVwbGUgb2YgdXJpIGFuZCBkZXNjcmlwdG9yIGV4Y2VwdCBmb3IgdGhlIGxhc3QgaXRlbVxyXG4gICAgICAgICAgdmFyIHJhd1VyaXMgPSB0cmltbWVkU3Jjc2V0LnNwbGl0KHBhdHRlcm4pO1xyXG5cclxuICAgICAgICAgIC8vIGZvciBlYWNoIHR1cGxlc1xyXG4gICAgICAgICAgdmFyIG5iclVyaXNXaXRoMnBhcnRzID0gTWF0aC5mbG9vcihyYXdVcmlzLmxlbmd0aCAvIDIpO1xyXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYnJVcmlzV2l0aDJwYXJ0czsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpbm5lcklkeCA9IGkgKiAyO1xyXG4gICAgICAgICAgICAvLyBzYW5pdGl6ZSB0aGUgdXJpXHJcbiAgICAgICAgICAgIHJlc3VsdCArPSAkJHNhbml0aXplVXJpKHRyaW0ocmF3VXJpc1tpbm5lcklkeF0pLCB0cnVlKTtcclxuICAgICAgICAgICAgLy8gYWRkIHRoZSBkZXNjcmlwdG9yXHJcbiAgICAgICAgICAgIHJlc3VsdCArPSAoXCIgXCIgKyB0cmltKHJhd1VyaXNbaW5uZXJJZHggKyAxXSkpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIHNwbGl0IHRoZSBsYXN0IGl0ZW0gaW50byB1cmkgYW5kIGRlc2NyaXB0b3JcclxuICAgICAgICAgIHZhciBsYXN0VHVwbGUgPSB0cmltKHJhd1VyaXNbaSAqIDJdKS5zcGxpdCgvXFxzLyk7XHJcblxyXG4gICAgICAgICAgLy8gc2FuaXRpemUgdGhlIGxhc3QgdXJpXHJcbiAgICAgICAgICByZXN1bHQgKz0gJCRzYW5pdGl6ZVVyaSh0cmltKGxhc3RUdXBsZVswXSksIHRydWUpO1xyXG5cclxuICAgICAgICAgIC8vIGFuZCBhZGQgdGhlIGxhc3QgZGVzY3JpcHRvciBpZiBhbnlcclxuICAgICAgICAgIGlmIChsYXN0VHVwbGUubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSAoXCIgXCIgKyB0cmltKGxhc3RUdXBsZVsxXSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpc1trZXldID0gdmFsdWUgPSByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod3JpdGVBdHRyICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy4kJGVsZW1lbnQucmVtb3ZlQXR0cihhdHRyTmFtZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLiQkZWxlbWVudC5hdHRyKGF0dHJOYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBmaXJlIG9ic2VydmVyc1xyXG4gICAgICAgIHZhciAkJG9ic2VydmVycyA9IHRoaXMuJCRvYnNlcnZlcnM7XHJcbiAgICAgICAgJCRvYnNlcnZlcnMgJiYgZm9yRWFjaCgkJG9ic2VydmVyc1tvYnNlcnZlcl0sIGZ1bmN0aW9uKGZuKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmbih2YWx1ZSk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG5cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAqIEBuYW1lICRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzIyRvYnNlcnZlXHJcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAgKiBPYnNlcnZlcyBhbiBpbnRlcnBvbGF0ZWQgYXR0cmlidXRlLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBUaGUgb2JzZXJ2ZXIgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIG9uY2UgZHVyaW5nIHRoZSBuZXh0IGAkZGlnZXN0YCBmb2xsb3dpbmdcclxuICAgICAgICogY29tcGlsYXRpb24uIFRoZSBvYnNlcnZlciBpcyB0aGVuIGludm9rZWQgd2hlbmV2ZXIgdGhlIGludGVycG9sYXRlZCB2YWx1ZVxyXG4gICAgICAgKiBjaGFuZ2VzLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IE5vcm1hbGl6ZWQga2V5LiAoaWUgbmdBdHRyaWJ1dGUpIC5cclxuICAgICAgICogQHBhcmFtIHtmdW5jdGlvbihpbnRlcnBvbGF0ZWRWYWx1ZSl9IGZuIEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXJcclxuICAgICAgICAgICAgICAgIHRoZSBpbnRlcnBvbGF0ZWQgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBjaGFuZ2VzLlxyXG4gICAgICAgKiAgICAgICAgU2VlIHRoZSB7QGxpbmsgZ3VpZGUvZGlyZWN0aXZlI3RleHQtYW5kLWF0dHJpYnV0ZS1iaW5kaW5ncyBEaXJlY3RpdmVzfSBndWlkZSBmb3IgbW9yZSBpbmZvLlxyXG4gICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24oKX0gUmV0dXJucyBhIGRlcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGZvciB0aGlzIG9ic2VydmVyLlxyXG4gICAgICAgKi9cclxuICAgICAgJG9ic2VydmU6IGZ1bmN0aW9uKGtleSwgZm4pIHtcclxuICAgICAgICB2YXIgYXR0cnMgPSB0aGlzLFxyXG4gICAgICAgICAgICAkJG9ic2VydmVycyA9IChhdHRycy4kJG9ic2VydmVycyB8fCAoYXR0cnMuJCRvYnNlcnZlcnMgPSBjcmVhdGVNYXAoKSkpLFxyXG4gICAgICAgICAgICBsaXN0ZW5lcnMgPSAoJCRvYnNlcnZlcnNba2V5XSB8fCAoJCRvYnNlcnZlcnNba2V5XSA9IFtdKSk7XHJcblxyXG4gICAgICAgIGxpc3RlbmVycy5wdXNoKGZuKTtcclxuICAgICAgICAkcm9vdFNjb3BlLiRldmFsQXN5bmMoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICBpZiAoIWxpc3RlbmVycy4kJGludGVyICYmIGF0dHJzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgLy8gbm8gb25lIHJlZ2lzdGVyZWQgYXR0cmlidXRlIGludGVycG9sYXRpb24gZnVuY3Rpb24sIHNvIGxldHMgY2FsbCBpdCBtYW51YWxseVxyXG4gICAgICAgICAgICBmbihhdHRyc1trZXldKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgYXJyYXlSZW1vdmUobGlzdGVuZXJzLCBmbik7XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcblxyXG4gICAgZnVuY3Rpb24gc2FmZUFkZENsYXNzKCRlbGVtZW50LCBjbGFzc05hbWUpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAkZWxlbWVudC5hZGRDbGFzcyhjbGFzc05hbWUpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgLy8gaWdub3JlLCBzaW5jZSBpdCBtZWFucyB0aGF0IHdlIGFyZSB0cnlpbmcgdG8gc2V0IGNsYXNzIG9uXHJcbiAgICAgICAgLy8gU1ZHIGVsZW1lbnQsIHdoZXJlIGNsYXNzIG5hbWUgaXMgcmVhZC1vbmx5LlxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHZhciBzdGFydFN5bWJvbCA9ICRpbnRlcnBvbGF0ZS5zdGFydFN5bWJvbCgpLFxyXG4gICAgICAgIGVuZFN5bWJvbCA9ICRpbnRlcnBvbGF0ZS5lbmRTeW1ib2woKSxcclxuICAgICAgICBkZW5vcm1hbGl6ZVRlbXBsYXRlID0gKHN0YXJ0U3ltYm9sID09ICd7eycgfHwgZW5kU3ltYm9sICA9PSAnfX0nKVxyXG4gICAgICAgICAgICA/IGlkZW50aXR5XHJcbiAgICAgICAgICAgIDogZnVuY3Rpb24gZGVub3JtYWxpemVUZW1wbGF0ZSh0ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9cXHtcXHsvZywgc3RhcnRTeW1ib2wpLnJlcGxhY2UoL319L2csIGVuZFN5bWJvbCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBOR19BVFRSX0JJTkRJTkcgPSAvXm5nQXR0cltBLVpdLztcclxuXHJcbiAgICBjb21waWxlLiQkYWRkQmluZGluZ0luZm8gPSBkZWJ1Z0luZm9FbmFibGVkID8gZnVuY3Rpb24gJCRhZGRCaW5kaW5nSW5mbygkZWxlbWVudCwgYmluZGluZykge1xyXG4gICAgICB2YXIgYmluZGluZ3MgPSAkZWxlbWVudC5kYXRhKCckYmluZGluZycpIHx8IFtdO1xyXG5cclxuICAgICAgaWYgKGlzQXJyYXkoYmluZGluZykpIHtcclxuICAgICAgICBiaW5kaW5ncyA9IGJpbmRpbmdzLmNvbmNhdChiaW5kaW5nKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBiaW5kaW5ncy5wdXNoKGJpbmRpbmcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAkZWxlbWVudC5kYXRhKCckYmluZGluZycsIGJpbmRpbmdzKTtcclxuICAgIH0gOiBub29wO1xyXG5cclxuICAgIGNvbXBpbGUuJCRhZGRCaW5kaW5nQ2xhc3MgPSBkZWJ1Z0luZm9FbmFibGVkID8gZnVuY3Rpb24gJCRhZGRCaW5kaW5nQ2xhc3MoJGVsZW1lbnQpIHtcclxuICAgICAgc2FmZUFkZENsYXNzKCRlbGVtZW50LCAnbmctYmluZGluZycpO1xyXG4gICAgfSA6IG5vb3A7XHJcblxyXG4gICAgY29tcGlsZS4kJGFkZFNjb3BlSW5mbyA9IGRlYnVnSW5mb0VuYWJsZWQgPyBmdW5jdGlvbiAkJGFkZFNjb3BlSW5mbygkZWxlbWVudCwgc2NvcGUsIGlzb2xhdGVkLCBub1RlbXBsYXRlKSB7XHJcbiAgICAgIHZhciBkYXRhTmFtZSA9IGlzb2xhdGVkID8gKG5vVGVtcGxhdGUgPyAnJGlzb2xhdGVTY29wZU5vVGVtcGxhdGUnIDogJyRpc29sYXRlU2NvcGUnKSA6ICckc2NvcGUnO1xyXG4gICAgICAkZWxlbWVudC5kYXRhKGRhdGFOYW1lLCBzY29wZSk7XHJcbiAgICB9IDogbm9vcDtcclxuXHJcbiAgICBjb21waWxlLiQkYWRkU2NvcGVDbGFzcyA9IGRlYnVnSW5mb0VuYWJsZWQgPyBmdW5jdGlvbiAkJGFkZFNjb3BlQ2xhc3MoJGVsZW1lbnQsIGlzb2xhdGVkKSB7XHJcbiAgICAgIHNhZmVBZGRDbGFzcygkZWxlbWVudCwgaXNvbGF0ZWQgPyAnbmctaXNvbGF0ZS1zY29wZScgOiAnbmctc2NvcGUnKTtcclxuICAgIH0gOiBub29wO1xyXG5cclxuICAgIHJldHVybiBjb21waWxlO1xyXG5cclxuICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgICBmdW5jdGlvbiBjb21waWxlKCRjb21waWxlTm9kZXMsIHRyYW5zY2x1ZGVGbiwgbWF4UHJpb3JpdHksIGlnbm9yZURpcmVjdGl2ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNDb21waWxlQ29udGV4dCkge1xyXG4gICAgICBpZiAoISgkY29tcGlsZU5vZGVzIGluc3RhbmNlb2YganFMaXRlKSkge1xyXG4gICAgICAgIC8vIGpxdWVyeSBhbHdheXMgcmV3cmFwcywgd2hlcmVhcyB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBzZWxlY3RvciBzbyB0aGF0IHdlIGNhblxyXG4gICAgICAgIC8vIG1vZGlmeSBpdC5cclxuICAgICAgICAkY29tcGlsZU5vZGVzID0ganFMaXRlKCRjb21waWxlTm9kZXMpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFdlIGNhbiBub3QgY29tcGlsZSB0b3AgbGV2ZWwgdGV4dCBlbGVtZW50cyBzaW5jZSB0ZXh0IG5vZGVzIGNhbiBiZSBtZXJnZWQgYW5kIHdlIHdpbGxcclxuICAgICAgLy8gbm90IGJlIGFibGUgdG8gYXR0YWNoIHNjb3BlIGRhdGEgdG8gdGhlbSwgc28gd2Ugd2lsbCB3cmFwIHRoZW0gaW4gPHNwYW4+XHJcbiAgICAgIGZvckVhY2goJGNvbXBpbGVOb2RlcywgZnVuY3Rpb24obm9kZSwgaW5kZXgpIHtcclxuICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSBOT0RFX1RZUEVfVEVYVCAmJiBub2RlLm5vZGVWYWx1ZS5tYXRjaCgvXFxTKy8pIC8qIG5vbi1lbXB0eSAqLyApIHtcclxuICAgICAgICAgICRjb21waWxlTm9kZXNbaW5kZXhdID0ganFMaXRlKG5vZGUpLndyYXAoJzxzcGFuPjwvc3Bhbj4nKS5wYXJlbnQoKVswXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB2YXIgY29tcG9zaXRlTGlua0ZuID1cclxuICAgICAgICAgICAgICBjb21waWxlTm9kZXMoJGNvbXBpbGVOb2RlcywgdHJhbnNjbHVkZUZuLCAkY29tcGlsZU5vZGVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhQcmlvcml0eSwgaWdub3JlRGlyZWN0aXZlLCBwcmV2aW91c0NvbXBpbGVDb250ZXh0KTtcclxuICAgICAgY29tcGlsZS4kJGFkZFNjb3BlQ2xhc3MoJGNvbXBpbGVOb2Rlcyk7XHJcbiAgICAgIHZhciBuYW1lc3BhY2UgPSBudWxsO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gcHVibGljTGlua0ZuKHNjb3BlLCBjbG9uZUNvbm5lY3RGbiwgb3B0aW9ucykge1xyXG4gICAgICAgIGFzc2VydEFyZyhzY29wZSwgJ3Njb3BlJyk7XHJcblxyXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgICAgIHZhciBwYXJlbnRCb3VuZFRyYW5zY2x1ZGVGbiA9IG9wdGlvbnMucGFyZW50Qm91bmRUcmFuc2NsdWRlRm4sXHJcbiAgICAgICAgICB0cmFuc2NsdWRlQ29udHJvbGxlcnMgPSBvcHRpb25zLnRyYW5zY2x1ZGVDb250cm9sbGVycyxcclxuICAgICAgICAgIGZ1dHVyZVBhcmVudEVsZW1lbnQgPSBvcHRpb25zLmZ1dHVyZVBhcmVudEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIC8vIFdoZW4gYHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuYCBpcyBwYXNzZWQsIGl0IGlzIGFcclxuICAgICAgICAvLyBgY29udHJvbGxlcnNCb3VuZFRyYW5zY2x1ZGVgIGZ1bmN0aW9uIChpdCB3YXMgcHJldmlvdXNseSBwYXNzZWRcclxuICAgICAgICAvLyBhcyBgdHJhbnNjbHVkZWAgdG8gZGlyZWN0aXZlLmxpbmspIHNvIHdlIG11c3QgdW53cmFwIGl0IHRvIGdldFxyXG4gICAgICAgIC8vIGl0cyBgYm91bmRUcmFuc2NsdWRlRm5gXHJcbiAgICAgICAgaWYgKHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuICYmIHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuLiQkYm91bmRUcmFuc2NsdWRlKSB7XHJcbiAgICAgICAgICBwYXJlbnRCb3VuZFRyYW5zY2x1ZGVGbiA9IHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuLiQkYm91bmRUcmFuc2NsdWRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFuYW1lc3BhY2UpIHtcclxuICAgICAgICAgIG5hbWVzcGFjZSA9IGRldGVjdE5hbWVzcGFjZUZvckNoaWxkRWxlbWVudHMoZnV0dXJlUGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciAkbGlua05vZGU7XHJcbiAgICAgICAgaWYgKG5hbWVzcGFjZSAhPT0gJ2h0bWwnKSB7XHJcbiAgICAgICAgICAvLyBXaGVuIHVzaW5nIGEgZGlyZWN0aXZlIHdpdGggcmVwbGFjZTp0cnVlIGFuZCB0ZW1wbGF0ZVVybCB0aGUgJGNvbXBpbGVOb2Rlc1xyXG4gICAgICAgICAgLy8gKG9yIGEgY2hpbGQgZWxlbWVudCBpbnNpZGUgb2YgdGhlbSlcclxuICAgICAgICAgIC8vIG1pZ2h0IGNoYW5nZSwgc28gd2UgbmVlZCB0byByZWNyZWF0ZSB0aGUgbmFtZXNwYWNlIGFkYXB0ZWQgY29tcGlsZU5vZGVzXHJcbiAgICAgICAgICAvLyBmb3IgY2FsbCB0byB0aGUgbGluayBmdW5jdGlvbi5cclxuICAgICAgICAgIC8vIE5vdGU6IFRoaXMgd2lsbCBhbHJlYWR5IGNsb25lIHRoZSBub2Rlcy4uLlxyXG4gICAgICAgICAgJGxpbmtOb2RlID0ganFMaXRlKFxyXG4gICAgICAgICAgICB3cmFwVGVtcGxhdGUobmFtZXNwYWNlLCBqcUxpdGUoJzxkaXY+JykuYXBwZW5kKCRjb21waWxlTm9kZXMpLmh0bWwoKSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjbG9uZUNvbm5lY3RGbikge1xyXG4gICAgICAgICAgLy8gaW1wb3J0YW50ISE6IHdlIG11c3QgY2FsbCBvdXIganFMaXRlLmNsb25lKCkgc2luY2UgdGhlIGpRdWVyeSBvbmUgaXMgdHJ5aW5nIHRvIGJlIHNtYXJ0XHJcbiAgICAgICAgICAvLyBhbmQgc29tZXRpbWVzIGNoYW5nZXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgRE9NLlxyXG4gICAgICAgICAgJGxpbmtOb2RlID0gSlFMaXRlUHJvdG90eXBlLmNsb25lLmNhbGwoJGNvbXBpbGVOb2Rlcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICRsaW5rTm9kZSA9ICRjb21waWxlTm9kZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHJhbnNjbHVkZUNvbnRyb2xsZXJzKSB7XHJcbiAgICAgICAgICBmb3IgKHZhciBjb250cm9sbGVyTmFtZSBpbiB0cmFuc2NsdWRlQ29udHJvbGxlcnMpIHtcclxuICAgICAgICAgICAgJGxpbmtOb2RlLmRhdGEoJyQnICsgY29udHJvbGxlck5hbWUgKyAnQ29udHJvbGxlcicsIHRyYW5zY2x1ZGVDb250cm9sbGVyc1tjb250cm9sbGVyTmFtZV0uaW5zdGFuY2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29tcGlsZS4kJGFkZFNjb3BlSW5mbygkbGlua05vZGUsIHNjb3BlKTtcclxuXHJcbiAgICAgICAgaWYgKGNsb25lQ29ubmVjdEZuKSBjbG9uZUNvbm5lY3RGbigkbGlua05vZGUsIHNjb3BlKTtcclxuICAgICAgICBpZiAoY29tcG9zaXRlTGlua0ZuKSBjb21wb3NpdGVMaW5rRm4oc2NvcGUsICRsaW5rTm9kZSwgJGxpbmtOb2RlLCBwYXJlbnRCb3VuZFRyYW5zY2x1ZGVGbik7XHJcbiAgICAgICAgcmV0dXJuICRsaW5rTm9kZTtcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBkZXRlY3ROYW1lc3BhY2VGb3JDaGlsZEVsZW1lbnRzKHBhcmVudEVsZW1lbnQpIHtcclxuICAgICAgLy8gVE9ETzogTWFrZSB0aGlzIGRldGVjdCBNYXRoTUwgYXMgd2VsbC4uLlxyXG4gICAgICB2YXIgbm9kZSA9IHBhcmVudEVsZW1lbnQgJiYgcGFyZW50RWxlbWVudFswXTtcclxuICAgICAgaWYgKCFub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuICdodG1sJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbm9kZU5hbWVfKG5vZGUpICE9PSAnZm9yZWlnbm9iamVjdCcgJiYgbm9kZS50b1N0cmluZygpLm1hdGNoKC9TVkcvKSA/ICdzdmcnIDogJ2h0bWwnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb21waWxlIGZ1bmN0aW9uIG1hdGNoZXMgZWFjaCBub2RlIGluIG5vZGVMaXN0IGFnYWluc3QgdGhlIGRpcmVjdGl2ZXMuIE9uY2UgYWxsIGRpcmVjdGl2ZXNcclxuICAgICAqIGZvciBhIHBhcnRpY3VsYXIgbm9kZSBhcmUgY29sbGVjdGVkIHRoZWlyIGNvbXBpbGUgZnVuY3Rpb25zIGFyZSBleGVjdXRlZC4gVGhlIGNvbXBpbGVcclxuICAgICAqIGZ1bmN0aW9ucyByZXR1cm4gdmFsdWVzIC0gdGhlIGxpbmtpbmcgZnVuY3Rpb25zIC0gYXJlIGNvbWJpbmVkIGludG8gYSBjb21wb3NpdGUgbGlua2luZ1xyXG4gICAgICogZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBhIGxpbmtpbmcgZnVuY3Rpb24gZm9yIHRoZSBub2RlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Tm9kZUxpc3R9IG5vZGVMaXN0IGFuIGFycmF5IG9mIG5vZGVzIG9yIE5vZGVMaXN0IHRvIGNvbXBpbGVcclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oYW5ndWxhci5TY29wZSwgY2xvbmVBdHRhY2hGbj0pfSB0cmFuc2NsdWRlRm4gQSBsaW5raW5nIGZ1bmN0aW9uLCB3aGVyZSB0aGVcclxuICAgICAqICAgICAgICBzY29wZSBhcmd1bWVudCBpcyBhdXRvLWdlbmVyYXRlZCB0byB0aGUgbmV3IGNoaWxkIG9mIHRoZSB0cmFuc2NsdWRlZCBwYXJlbnQgc2NvcGUuXHJcbiAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnQ9fSAkcm9vdEVsZW1lbnQgSWYgdGhlIG5vZGVMaXN0IGlzIHRoZSByb290IG9mIHRoZSBjb21waWxhdGlvbiB0cmVlIHRoZW5cclxuICAgICAqICAgICAgICB0aGUgcm9vdEVsZW1lbnQgbXVzdCBiZSBzZXQgdGhlIGpxTGl0ZSBjb2xsZWN0aW9uIG9mIHRoZSBjb21waWxlIHJvb3QuIFRoaXMgaXNcclxuICAgICAqICAgICAgICBuZWVkZWQgc28gdGhhdCB0aGUganFMaXRlIGNvbGxlY3Rpb24gaXRlbXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggd2lkZ2V0cy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gbWF4UHJpb3JpdHkgTWF4IGRpcmVjdGl2ZSBwcmlvcml0eS5cclxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBjb21wb3NpdGUgbGlua2luZyBmdW5jdGlvbiBvZiBhbGwgb2YgdGhlIG1hdGNoZWQgZGlyZWN0aXZlcyBvciBudWxsLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBjb21waWxlTm9kZXMobm9kZUxpc3QsIHRyYW5zY2x1ZGVGbiwgJHJvb3RFbGVtZW50LCBtYXhQcmlvcml0eSwgaWdub3JlRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNDb21waWxlQ29udGV4dCkge1xyXG4gICAgICB2YXIgbGlua0ZucyA9IFtdLFxyXG4gICAgICAgICAgYXR0cnMsIGRpcmVjdGl2ZXMsIG5vZGVMaW5rRm4sIGNoaWxkTm9kZXMsIGNoaWxkTGlua0ZuLCBsaW5rRm5Gb3VuZCwgbm9kZUxpbmtGbkZvdW5kO1xyXG5cclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGF0dHJzID0gbmV3IEF0dHJpYnV0ZXMoKTtcclxuXHJcbiAgICAgICAgLy8gd2UgbXVzdCBhbHdheXMgcmVmZXIgdG8gbm9kZUxpc3RbaV0gc2luY2UgdGhlIG5vZGVzIGNhbiBiZSByZXBsYWNlZCB1bmRlcm5lYXRoIHVzLlxyXG4gICAgICAgIGRpcmVjdGl2ZXMgPSBjb2xsZWN0RGlyZWN0aXZlcyhub2RlTGlzdFtpXSwgW10sIGF0dHJzLCBpID09PSAwID8gbWF4UHJpb3JpdHkgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVEaXJlY3RpdmUpO1xyXG5cclxuICAgICAgICBub2RlTGlua0ZuID0gKGRpcmVjdGl2ZXMubGVuZ3RoKVxyXG4gICAgICAgICAgICA/IGFwcGx5RGlyZWN0aXZlc1RvTm9kZShkaXJlY3RpdmVzLCBub2RlTGlzdFtpXSwgYXR0cnMsIHRyYW5zY2x1ZGVGbiwgJHJvb3RFbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIFtdLCBbXSwgcHJldmlvdXNDb21waWxlQ29udGV4dClcclxuICAgICAgICAgICAgOiBudWxsO1xyXG5cclxuICAgICAgICBpZiAobm9kZUxpbmtGbiAmJiBub2RlTGlua0ZuLnNjb3BlKSB7XHJcbiAgICAgICAgICBjb21waWxlLiQkYWRkU2NvcGVDbGFzcyhhdHRycy4kJGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2hpbGRMaW5rRm4gPSAobm9kZUxpbmtGbiAmJiBub2RlTGlua0ZuLnRlcm1pbmFsIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAhKGNoaWxkTm9kZXMgPSBub2RlTGlzdFtpXS5jaGlsZE5vZGVzKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgIWNoaWxkTm9kZXMubGVuZ3RoKVxyXG4gICAgICAgICAgICA/IG51bGxcclxuICAgICAgICAgICAgOiBjb21waWxlTm9kZXMoY2hpbGROb2RlcyxcclxuICAgICAgICAgICAgICAgICBub2RlTGlua0ZuID8gKFxyXG4gICAgICAgICAgICAgICAgICAobm9kZUxpbmtGbi50cmFuc2NsdWRlT25UaGlzRWxlbWVudCB8fCAhbm9kZUxpbmtGbi50ZW1wbGF0ZU9uVGhpc0VsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICYmIG5vZGVMaW5rRm4udHJhbnNjbHVkZSkgOiB0cmFuc2NsdWRlRm4pO1xyXG5cclxuICAgICAgICBpZiAobm9kZUxpbmtGbiB8fCBjaGlsZExpbmtGbikge1xyXG4gICAgICAgICAgbGlua0Zucy5wdXNoKGksIG5vZGVMaW5rRm4sIGNoaWxkTGlua0ZuKTtcclxuICAgICAgICAgIGxpbmtGbkZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgIG5vZGVMaW5rRm5Gb3VuZCA9IG5vZGVMaW5rRm5Gb3VuZCB8fCBub2RlTGlua0ZuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy91c2UgdGhlIHByZXZpb3VzIGNvbnRleHQgb25seSBmb3IgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHZpcnR1YWwgZ3JvdXBcclxuICAgICAgICBwcmV2aW91c0NvbXBpbGVDb250ZXh0ID0gbnVsbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gcmV0dXJuIGEgbGlua2luZyBmdW5jdGlvbiBpZiB3ZSBoYXZlIGZvdW5kIGFueXRoaW5nLCBudWxsIG90aGVyd2lzZVxyXG4gICAgICByZXR1cm4gbGlua0ZuRm91bmQgPyBjb21wb3NpdGVMaW5rRm4gOiBudWxsO1xyXG5cclxuICAgICAgZnVuY3Rpb24gY29tcG9zaXRlTGlua0ZuKHNjb3BlLCBub2RlTGlzdCwgJHJvb3RFbGVtZW50LCBwYXJlbnRCb3VuZFRyYW5zY2x1ZGVGbikge1xyXG4gICAgICAgIHZhciBub2RlTGlua0ZuLCBjaGlsZExpbmtGbiwgbm9kZSwgY2hpbGRTY29wZSwgaSwgaWksIGlkeCwgY2hpbGRCb3VuZFRyYW5zY2x1ZGVGbjtcclxuICAgICAgICB2YXIgc3RhYmxlTm9kZUxpc3Q7XHJcblxyXG5cclxuICAgICAgICBpZiAobm9kZUxpbmtGbkZvdW5kKSB7XHJcbiAgICAgICAgICAvLyBjb3B5IG5vZGVMaXN0IHNvIHRoYXQgaWYgYSBub2RlTGlua0ZuIHJlbW92ZXMgb3IgYWRkcyBhbiBlbGVtZW50IGF0IHRoaXMgRE9NIGxldmVsIG91clxyXG4gICAgICAgICAgLy8gb2Zmc2V0cyBkb24ndCBnZXQgc2NyZXdlZCB1cFxyXG4gICAgICAgICAgdmFyIG5vZGVMaXN0TGVuZ3RoID0gbm9kZUxpc3QubGVuZ3RoO1xyXG4gICAgICAgICAgc3RhYmxlTm9kZUxpc3QgPSBuZXcgQXJyYXkobm9kZUxpc3RMZW5ndGgpO1xyXG5cclxuICAgICAgICAgIC8vIGNyZWF0ZSBhIHNwYXJzZSBhcnJheSBieSBvbmx5IGNvcHlpbmcgdGhlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYSBsaW5rRm5cclxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaW5rRm5zLmxlbmd0aDsgaSs9Mykge1xyXG4gICAgICAgICAgICBpZHggPSBsaW5rRm5zW2ldO1xyXG4gICAgICAgICAgICBzdGFibGVOb2RlTGlzdFtpZHhdID0gbm9kZUxpc3RbaWR4XTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc3RhYmxlTm9kZUxpc3QgPSBub2RlTGlzdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gbGlua0Zucy5sZW5ndGg7IGkgPCBpaTspIHtcclxuICAgICAgICAgIG5vZGUgPSBzdGFibGVOb2RlTGlzdFtsaW5rRm5zW2krK11dO1xyXG4gICAgICAgICAgbm9kZUxpbmtGbiA9IGxpbmtGbnNbaSsrXTtcclxuICAgICAgICAgIGNoaWxkTGlua0ZuID0gbGlua0Zuc1tpKytdO1xyXG5cclxuICAgICAgICAgIGlmIChub2RlTGlua0ZuKSB7XHJcbiAgICAgICAgICAgIGlmIChub2RlTGlua0ZuLnNjb3BlKSB7XHJcbiAgICAgICAgICAgICAgY2hpbGRTY29wZSA9IHNjb3BlLiRuZXcoKTtcclxuICAgICAgICAgICAgICBjb21waWxlLiQkYWRkU2NvcGVJbmZvKGpxTGl0ZShub2RlKSwgY2hpbGRTY29wZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY2hpbGRTY29wZSA9IHNjb3BlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobm9kZUxpbmtGbi50cmFuc2NsdWRlT25UaGlzRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgIGNoaWxkQm91bmRUcmFuc2NsdWRlRm4gPSBjcmVhdGVCb3VuZFRyYW5zY2x1ZGVGbihcclxuICAgICAgICAgICAgICAgICAgc2NvcGUsIG5vZGVMaW5rRm4udHJhbnNjbHVkZSwgcGFyZW50Qm91bmRUcmFuc2NsdWRlRm4sXHJcbiAgICAgICAgICAgICAgICAgIG5vZGVMaW5rRm4uZWxlbWVudFRyYW5zY2x1ZGVPblRoaXNFbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIW5vZGVMaW5rRm4udGVtcGxhdGVPblRoaXNFbGVtZW50ICYmIHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuKSB7XHJcbiAgICAgICAgICAgICAgY2hpbGRCb3VuZFRyYW5zY2x1ZGVGbiA9IHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIGlmICghcGFyZW50Qm91bmRUcmFuc2NsdWRlRm4gJiYgdHJhbnNjbHVkZUZuKSB7XHJcbiAgICAgICAgICAgICAgY2hpbGRCb3VuZFRyYW5zY2x1ZGVGbiA9IGNyZWF0ZUJvdW5kVHJhbnNjbHVkZUZuKHNjb3BlLCB0cmFuc2NsdWRlRm4pO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjaGlsZEJvdW5kVHJhbnNjbHVkZUZuID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbm9kZUxpbmtGbihjaGlsZExpbmtGbiwgY2hpbGRTY29wZSwgbm9kZSwgJHJvb3RFbGVtZW50LCBjaGlsZEJvdW5kVHJhbnNjbHVkZUZuKTtcclxuXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkTGlua0ZuKSB7XHJcbiAgICAgICAgICAgIGNoaWxkTGlua0ZuKHNjb3BlLCBub2RlLmNoaWxkTm9kZXMsIHVuZGVmaW5lZCwgcGFyZW50Qm91bmRUcmFuc2NsdWRlRm4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUJvdW5kVHJhbnNjbHVkZUZuKHNjb3BlLCB0cmFuc2NsdWRlRm4sIHByZXZpb3VzQm91bmRUcmFuc2NsdWRlRm4sIGVsZW1lbnRUcmFuc2NsdXNpb24pIHtcclxuXHJcbiAgICAgIHZhciBib3VuZFRyYW5zY2x1ZGVGbiA9IGZ1bmN0aW9uKHRyYW5zY2x1ZGVkU2NvcGUsIGNsb25lRm4sIGNvbnRyb2xsZXJzLCBmdXR1cmVQYXJlbnRFbGVtZW50LCBjb250YWluaW5nU2NvcGUpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0cmFuc2NsdWRlZFNjb3BlKSB7XHJcbiAgICAgICAgICB0cmFuc2NsdWRlZFNjb3BlID0gc2NvcGUuJG5ldyhmYWxzZSwgY29udGFpbmluZ1Njb3BlKTtcclxuICAgICAgICAgIHRyYW5zY2x1ZGVkU2NvcGUuJCR0cmFuc2NsdWRlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJhbnNjbHVkZUZuKHRyYW5zY2x1ZGVkU2NvcGUsIGNsb25lRm4sIHtcclxuICAgICAgICAgIHBhcmVudEJvdW5kVHJhbnNjbHVkZUZuOiBwcmV2aW91c0JvdW5kVHJhbnNjbHVkZUZuLFxyXG4gICAgICAgICAgdHJhbnNjbHVkZUNvbnRyb2xsZXJzOiBjb250cm9sbGVycyxcclxuICAgICAgICAgIGZ1dHVyZVBhcmVudEVsZW1lbnQ6IGZ1dHVyZVBhcmVudEVsZW1lbnRcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiBib3VuZFRyYW5zY2x1ZGVGbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIExvb2tzIGZvciBkaXJlY3RpdmVzIG9uIHRoZSBnaXZlbiBub2RlIGFuZCBhZGRzIHRoZW0gdG8gdGhlIGRpcmVjdGl2ZSBjb2xsZWN0aW9uIHdoaWNoIGlzXHJcbiAgICAgKiBzb3J0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG5vZGUgTm9kZSB0byBzZWFyY2guXHJcbiAgICAgKiBAcGFyYW0gZGlyZWN0aXZlcyBBbiBhcnJheSB0byB3aGljaCB0aGUgZGlyZWN0aXZlcyBhcmUgYWRkZWQgdG8uIFRoaXMgYXJyYXkgaXMgc29ydGVkIGJlZm9yZVxyXG4gICAgICogICAgICAgIHRoZSBmdW5jdGlvbiByZXR1cm5zLlxyXG4gICAgICogQHBhcmFtIGF0dHJzIFRoZSBzaGFyZWQgYXR0cnMgb2JqZWN0IHdoaWNoIGlzIHVzZWQgdG8gcG9wdWxhdGUgdGhlIG5vcm1hbGl6ZWQgYXR0cmlidXRlcy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gbWF4UHJpb3JpdHkgTWF4IGRpcmVjdGl2ZSBwcmlvcml0eS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gY29sbGVjdERpcmVjdGl2ZXMobm9kZSwgZGlyZWN0aXZlcywgYXR0cnMsIG1heFByaW9yaXR5LCBpZ25vcmVEaXJlY3RpdmUpIHtcclxuICAgICAgdmFyIG5vZGVUeXBlID0gbm9kZS5ub2RlVHlwZSxcclxuICAgICAgICAgIGF0dHJzTWFwID0gYXR0cnMuJGF0dHIsXHJcbiAgICAgICAgICBtYXRjaCxcclxuICAgICAgICAgIGNsYXNzTmFtZTtcclxuXHJcbiAgICAgIHN3aXRjaCAobm9kZVR5cGUpIHtcclxuICAgICAgICBjYXNlIE5PREVfVFlQRV9FTEVNRU5UOiAvKiBFbGVtZW50ICovXHJcbiAgICAgICAgICAvLyB1c2UgdGhlIG5vZGUgbmFtZTogPGRpcmVjdGl2ZT5cclxuICAgICAgICAgIGFkZERpcmVjdGl2ZShkaXJlY3RpdmVzLFxyXG4gICAgICAgICAgICAgIGRpcmVjdGl2ZU5vcm1hbGl6ZShub2RlTmFtZV8obm9kZSkpLCAnRScsIG1heFByaW9yaXR5LCBpZ25vcmVEaXJlY3RpdmUpO1xyXG5cclxuICAgICAgICAgIC8vIGl0ZXJhdGUgb3ZlciB0aGUgYXR0cmlidXRlc1xyXG4gICAgICAgICAgZm9yICh2YXIgYXR0ciwgbmFtZSwgbk5hbWUsIG5nQXR0ck5hbWUsIHZhbHVlLCBpc05nQXR0ciwgbkF0dHJzID0gbm9kZS5hdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgICAgaiA9IDAsIGpqID0gbkF0dHJzICYmIG5BdHRycy5sZW5ndGg7IGogPCBqajsgaisrKSB7XHJcbiAgICAgICAgICAgIHZhciBhdHRyU3RhcnROYW1lID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBhdHRyRW5kTmFtZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgYXR0ciA9IG5BdHRyc1tqXTtcclxuICAgICAgICAgICAgbmFtZSA9IGF0dHIubmFtZTtcclxuICAgICAgICAgICAgdmFsdWUgPSB0cmltKGF0dHIudmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgLy8gc3VwcG9ydCBuZ0F0dHIgYXR0cmlidXRlIGJpbmRpbmdcclxuICAgICAgICAgICAgbmdBdHRyTmFtZSA9IGRpcmVjdGl2ZU5vcm1hbGl6ZShuYW1lKTtcclxuICAgICAgICAgICAgaWYgKGlzTmdBdHRyID0gTkdfQVRUUl9CSU5ESU5HLnRlc3QobmdBdHRyTmFtZSkpIHtcclxuICAgICAgICAgICAgICBuYW1lID0gc25ha2VfY2FzZShuZ0F0dHJOYW1lLnN1YnN0cig2KSwgJy0nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGRpcmVjdGl2ZU5OYW1lID0gbmdBdHRyTmFtZS5yZXBsYWNlKC8oU3RhcnR8RW5kKSQvLCAnJyk7XHJcbiAgICAgICAgICAgIGlmIChkaXJlY3RpdmVJc011bHRFbGVtZW50KGRpcmVjdGl2ZU5OYW1lKSkge1xyXG4gICAgICAgICAgICAgIGlmIChuZ0F0dHJOYW1lID09PSBkaXJlY3RpdmVOTmFtZSArICdTdGFydCcpIHtcclxuICAgICAgICAgICAgICAgIGF0dHJTdGFydE5hbWUgPSBuYW1lO1xyXG4gICAgICAgICAgICAgICAgYXR0ckVuZE5hbWUgPSBuYW1lLnN1YnN0cigwLCBuYW1lLmxlbmd0aCAtIDUpICsgJ2VuZCc7XHJcbiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMCwgbmFtZS5sZW5ndGggLSA2KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG5OYW1lID0gZGlyZWN0aXZlTm9ybWFsaXplKG5hbWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGF0dHJzTWFwW25OYW1lXSA9IG5hbWU7XHJcbiAgICAgICAgICAgIGlmIChpc05nQXR0ciB8fCAhYXR0cnMuaGFzT3duUHJvcGVydHkobk5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBhdHRyc1tuTmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChnZXRCb29sZWFuQXR0ck5hbWUobm9kZSwgbk5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGF0dHJzW25OYW1lXSA9IHRydWU7IC8vIHByZXNlbmNlIG1lYW5zIHRydWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhZGRBdHRySW50ZXJwb2xhdGVEaXJlY3RpdmUobm9kZSwgZGlyZWN0aXZlcywgdmFsdWUsIG5OYW1lLCBpc05nQXR0cik7XHJcbiAgICAgICAgICAgIGFkZERpcmVjdGl2ZShkaXJlY3RpdmVzLCBuTmFtZSwgJ0EnLCBtYXhQcmlvcml0eSwgaWdub3JlRGlyZWN0aXZlLCBhdHRyU3RhcnROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJFbmROYW1lKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyB1c2UgY2xhc3MgYXMgZGlyZWN0aXZlXHJcbiAgICAgICAgICBjbGFzc05hbWUgPSBub2RlLmNsYXNzTmFtZTtcclxuICAgICAgICAgIGlmIChpc1N0cmluZyhjbGFzc05hbWUpICYmIGNsYXNzTmFtZSAhPT0gJycpIHtcclxuICAgICAgICAgICAgd2hpbGUgKG1hdGNoID0gQ0xBU1NfRElSRUNUSVZFX1JFR0VYUC5leGVjKGNsYXNzTmFtZSkpIHtcclxuICAgICAgICAgICAgICBuTmFtZSA9IGRpcmVjdGl2ZU5vcm1hbGl6ZShtYXRjaFsyXSk7XHJcbiAgICAgICAgICAgICAgaWYgKGFkZERpcmVjdGl2ZShkaXJlY3RpdmVzLCBuTmFtZSwgJ0MnLCBtYXhQcmlvcml0eSwgaWdub3JlRGlyZWN0aXZlKSkge1xyXG4gICAgICAgICAgICAgICAgYXR0cnNbbk5hbWVdID0gdHJpbShtYXRjaFszXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5zdWJzdHIobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIE5PREVfVFlQRV9URVhUOiAvKiBUZXh0IE5vZGUgKi9cclxuICAgICAgICAgIGFkZFRleHRJbnRlcnBvbGF0ZURpcmVjdGl2ZShkaXJlY3RpdmVzLCBub2RlLm5vZGVWYWx1ZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIE5PREVfVFlQRV9DT01NRU5UOiAvKiBDb21tZW50ICovXHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBtYXRjaCA9IENPTU1FTlRfRElSRUNUSVZFX1JFR0VYUC5leGVjKG5vZGUubm9kZVZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgICAgbk5hbWUgPSBkaXJlY3RpdmVOb3JtYWxpemUobWF0Y2hbMV0pO1xyXG4gICAgICAgICAgICAgIGlmIChhZGREaXJlY3RpdmUoZGlyZWN0aXZlcywgbk5hbWUsICdNJywgbWF4UHJpb3JpdHksIGlnbm9yZURpcmVjdGl2ZSkpIHtcclxuICAgICAgICAgICAgICAgIGF0dHJzW25OYW1lXSA9IHRyaW0obWF0Y2hbMl0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyB0dXJucyBvdXQgdGhhdCB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMgSUU5IHRocm93cyBlcnJvcnMgd2hlbiBvbmUgYXR0ZW1wdHMgdG8gcmVhZFxyXG4gICAgICAgICAgICAvLyBjb21tZW50J3Mgbm9kZSB2YWx1ZS5cclxuICAgICAgICAgICAgLy8gSnVzdCBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlLiAoQ2FuJ3Qgc2VlbSB0byByZXByb2R1Y2UgaW4gdGVzdCBjYXNlLilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkaXJlY3RpdmVzLnNvcnQoYnlQcmlvcml0eSk7XHJcbiAgICAgIHJldHVybiBkaXJlY3RpdmVzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBub2RlIHdpdGggYW4gZGlyZWN0aXZlLXN0YXJ0IGl0IGNvbGxlY3RzIGFsbCBvZiB0aGUgc2libGluZ3MgdW50aWwgaXQgZmluZHNcclxuICAgICAqIGRpcmVjdGl2ZS1lbmQuXHJcbiAgICAgKiBAcGFyYW0gbm9kZVxyXG4gICAgICogQHBhcmFtIGF0dHJTdGFydFxyXG4gICAgICogQHBhcmFtIGF0dHJFbmRcclxuICAgICAqIEByZXR1cm5zIHsqfVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBncm91cFNjYW4obm9kZSwgYXR0clN0YXJ0LCBhdHRyRW5kKSB7XHJcbiAgICAgIHZhciBub2RlcyA9IFtdO1xyXG4gICAgICB2YXIgZGVwdGggPSAwO1xyXG4gICAgICBpZiAoYXR0clN0YXJ0ICYmIG5vZGUuaGFzQXR0cmlidXRlICYmIG5vZGUuaGFzQXR0cmlidXRlKGF0dHJTdGFydCkpIHtcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICBpZiAoIW5vZGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgJGNvbXBpbGVNaW5FcnIoJ3V0ZXJkaXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJVbnRlcm1pbmF0ZWQgYXR0cmlidXRlLCBmb3VuZCAnezB9JyBidXQgbm8gbWF0Y2hpbmcgJ3sxfScgZm91bmQuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyU3RhcnQsIGF0dHJFbmQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gTk9ERV9UWVBFX0VMRU1FTlQpIHtcclxuICAgICAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKGF0dHJTdGFydCkpIGRlcHRoKys7XHJcbiAgICAgICAgICAgIGlmIChub2RlLmhhc0F0dHJpYnV0ZShhdHRyRW5kKSkgZGVwdGgtLTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XHJcbiAgICAgICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcclxuICAgICAgICB9IHdoaWxlIChkZXB0aCA+IDApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBqcUxpdGUobm9kZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV3JhcHBlciBmb3IgbGlua2luZyBmdW5jdGlvbiB3aGljaCBjb252ZXJ0cyBub3JtYWwgbGlua2luZyBmdW5jdGlvbiBpbnRvIGEgZ3JvdXBlZFxyXG4gICAgICogbGlua2luZyBmdW5jdGlvbi5cclxuICAgICAqIEBwYXJhbSBsaW5rRm5cclxuICAgICAqIEBwYXJhbSBhdHRyU3RhcnRcclxuICAgICAqIEBwYXJhbSBhdHRyRW5kXHJcbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGdyb3VwRWxlbWVudHNMaW5rRm5XcmFwcGVyKGxpbmtGbiwgYXR0clN0YXJ0LCBhdHRyRW5kKSB7XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIGNvbnRyb2xsZXJzLCB0cmFuc2NsdWRlRm4pIHtcclxuICAgICAgICBlbGVtZW50ID0gZ3JvdXBTY2FuKGVsZW1lbnRbMF0sIGF0dHJTdGFydCwgYXR0ckVuZCk7XHJcbiAgICAgICAgcmV0dXJuIGxpbmtGbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIGNvbnRyb2xsZXJzLCB0cmFuc2NsdWRlRm4pO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT25jZSB0aGUgZGlyZWN0aXZlcyBoYXZlIGJlZW4gY29sbGVjdGVkLCB0aGVpciBjb21waWxlIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQuIFRoaXMgbWV0aG9kXHJcbiAgICAgKiBpcyByZXNwb25zaWJsZSBmb3IgaW5saW5pbmcgZGlyZWN0aXZlIHRlbXBsYXRlcyBhcyB3ZWxsIGFzIHRlcm1pbmF0aW5nIHRoZSBhcHBsaWNhdGlvblxyXG4gICAgICogb2YgdGhlIGRpcmVjdGl2ZXMgaWYgdGhlIHRlcm1pbmFsIGRpcmVjdGl2ZSBoYXMgYmVlbiByZWFjaGVkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGRpcmVjdGl2ZXMgQXJyYXkgb2YgY29sbGVjdGVkIGRpcmVjdGl2ZXMgdG8gZXhlY3V0ZSB0aGVpciBjb21waWxlIGZ1bmN0aW9uLlxyXG4gICAgICogICAgICAgIHRoaXMgbmVlZHMgdG8gYmUgcHJlLXNvcnRlZCBieSBwcmlvcml0eSBvcmRlci5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gY29tcGlsZU5vZGUgVGhlIHJhdyBET00gbm9kZSB0byBhcHBseSB0aGUgY29tcGlsZSBmdW5jdGlvbnMgdG9cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0ZW1wbGF0ZUF0dHJzIFRoZSBzaGFyZWQgYXR0cmlidXRlIGZ1bmN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGFuZ3VsYXIuU2NvcGUsIGNsb25lQXR0YWNoRm49KX0gdHJhbnNjbHVkZUZuIEEgbGlua2luZyBmdW5jdGlvbiwgd2hlcmUgdGhlXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUgYXJndW1lbnQgaXMgYXV0by1nZW5lcmF0ZWQgdG8gdGhlIG5ld1xyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkIG9mIHRoZSB0cmFuc2NsdWRlZCBwYXJlbnQgc2NvcGUuXHJcbiAgICAgKiBAcGFyYW0ge0pRTGl0ZX0ganFDb2xsZWN0aW9uIElmIHdlIGFyZSB3b3JraW5nIG9uIHRoZSByb290IG9mIHRoZSBjb21waWxlIHRyZWUgdGhlbiB0aGlzXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50IGhhcyB0aGUgcm9vdCBqcUxpdGUgYXJyYXkgc28gdGhhdCB3ZSBjYW4gcmVwbGFjZSBub2Rlc1xyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBpdC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3JpZ2luYWxSZXBsYWNlRGlyZWN0aXZlIEFuIG9wdGlvbmFsIGRpcmVjdGl2ZSB0aGF0IHdpbGwgYmUgaWdub3JlZCB3aGVuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxpbmcgdGhlIHRyYW5zY2x1c2lvbi5cclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPEZ1bmN0aW9uPn0gcHJlTGlua0Zuc1xyXG4gICAgICogQHBhcmFtIHtBcnJheS48RnVuY3Rpb24+fSBwb3N0TGlua0Zuc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByZXZpb3VzQ29tcGlsZUNvbnRleHQgQ29udGV4dCB1c2VkIGZvciBwcmV2aW91cyBjb21waWxhdGlvbiBvZiB0aGUgY3VycmVudFxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZVxyXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBsaW5rRm5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gYXBwbHlEaXJlY3RpdmVzVG9Ob2RlKGRpcmVjdGl2ZXMsIGNvbXBpbGVOb2RlLCB0ZW1wbGF0ZUF0dHJzLCB0cmFuc2NsdWRlRm4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganFDb2xsZWN0aW9uLCBvcmlnaW5hbFJlcGxhY2VEaXJlY3RpdmUsIHByZUxpbmtGbnMsIHBvc3RMaW5rRm5zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ29tcGlsZUNvbnRleHQpIHtcclxuICAgICAgcHJldmlvdXNDb21waWxlQ29udGV4dCA9IHByZXZpb3VzQ29tcGlsZUNvbnRleHQgfHwge307XHJcblxyXG4gICAgICB2YXIgdGVybWluYWxQcmlvcml0eSA9IC1OdW1iZXIuTUFYX1ZBTFVFLFxyXG4gICAgICAgICAgbmV3U2NvcGVEaXJlY3RpdmUsXHJcbiAgICAgICAgICBjb250cm9sbGVyRGlyZWN0aXZlcyA9IHByZXZpb3VzQ29tcGlsZUNvbnRleHQuY29udHJvbGxlckRpcmVjdGl2ZXMsXHJcbiAgICAgICAgICBjb250cm9sbGVycyxcclxuICAgICAgICAgIG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZSA9IHByZXZpb3VzQ29tcGlsZUNvbnRleHQubmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlLFxyXG4gICAgICAgICAgdGVtcGxhdGVEaXJlY3RpdmUgPSBwcmV2aW91c0NvbXBpbGVDb250ZXh0LnRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gICAgICAgICAgbm9uVGxiVHJhbnNjbHVkZURpcmVjdGl2ZSA9IHByZXZpb3VzQ29tcGlsZUNvbnRleHQubm9uVGxiVHJhbnNjbHVkZURpcmVjdGl2ZSxcclxuICAgICAgICAgIGhhc1RyYW5zY2x1ZGVEaXJlY3RpdmUgPSBmYWxzZSxcclxuICAgICAgICAgIGhhc1RlbXBsYXRlID0gZmFsc2UsXHJcbiAgICAgICAgICBoYXNFbGVtZW50VHJhbnNjbHVkZURpcmVjdGl2ZSA9IHByZXZpb3VzQ29tcGlsZUNvbnRleHQuaGFzRWxlbWVudFRyYW5zY2x1ZGVEaXJlY3RpdmUsXHJcbiAgICAgICAgICAkY29tcGlsZU5vZGUgPSB0ZW1wbGF0ZUF0dHJzLiQkZWxlbWVudCA9IGpxTGl0ZShjb21waWxlTm9kZSksXHJcbiAgICAgICAgICBkaXJlY3RpdmUsXHJcbiAgICAgICAgICBkaXJlY3RpdmVOYW1lLFxyXG4gICAgICAgICAgJHRlbXBsYXRlLFxyXG4gICAgICAgICAgcmVwbGFjZURpcmVjdGl2ZSA9IG9yaWdpbmFsUmVwbGFjZURpcmVjdGl2ZSxcclxuICAgICAgICAgIGNoaWxkVHJhbnNjbHVkZUZuID0gdHJhbnNjbHVkZUZuLFxyXG4gICAgICAgICAgbGlua0ZuLFxyXG4gICAgICAgICAgZGlyZWN0aXZlVmFsdWU7XHJcblxyXG4gICAgICAvLyBleGVjdXRlcyBhbGwgZGlyZWN0aXZlcyBvbiB0aGUgY3VycmVudCBlbGVtZW50XHJcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGRpcmVjdGl2ZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xyXG4gICAgICAgIGRpcmVjdGl2ZSA9IGRpcmVjdGl2ZXNbaV07XHJcbiAgICAgICAgdmFyIGF0dHJTdGFydCA9IGRpcmVjdGl2ZS4kJHN0YXJ0O1xyXG4gICAgICAgIHZhciBhdHRyRW5kID0gZGlyZWN0aXZlLiQkZW5kO1xyXG5cclxuICAgICAgICAvLyBjb2xsZWN0IG11bHRpYmxvY2sgc2VjdGlvbnNcclxuICAgICAgICBpZiAoYXR0clN0YXJ0KSB7XHJcbiAgICAgICAgICAkY29tcGlsZU5vZGUgPSBncm91cFNjYW4oY29tcGlsZU5vZGUsIGF0dHJTdGFydCwgYXR0ckVuZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICR0ZW1wbGF0ZSA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgaWYgKHRlcm1pbmFsUHJpb3JpdHkgPiBkaXJlY3RpdmUucHJpb3JpdHkpIHtcclxuICAgICAgICAgIGJyZWFrOyAvLyBwcmV2ZW50IGZ1cnRoZXIgcHJvY2Vzc2luZyBvZiBkaXJlY3RpdmVzXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGlyZWN0aXZlVmFsdWUgPSBkaXJlY3RpdmUuc2NvcGUpIHtcclxuXHJcbiAgICAgICAgICAvLyBza2lwIHRoZSBjaGVjayBmb3IgZGlyZWN0aXZlcyB3aXRoIGFzeW5jIHRlbXBsYXRlcywgd2UnbGwgY2hlY2sgdGhlIGRlcml2ZWQgc3luY1xyXG4gICAgICAgICAgLy8gZGlyZWN0aXZlIHdoZW4gdGhlIHRlbXBsYXRlIGFycml2ZXNcclxuICAgICAgICAgIGlmICghZGlyZWN0aXZlLnRlbXBsYXRlVXJsKSB7XHJcbiAgICAgICAgICAgIGlmIChpc09iamVjdChkaXJlY3RpdmVWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAvLyBUaGlzIGRpcmVjdGl2ZSBpcyB0cnlpbmcgdG8gYWRkIGFuIGlzb2xhdGVkIHNjb3BlLlxyXG4gICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgaXMgbm8gc2NvcGUgb2YgYW55IGtpbmQgYWxyZWFkeVxyXG4gICAgICAgICAgICAgIGFzc2VydE5vRHVwbGljYXRlKCduZXcvaXNvbGF0ZWQgc2NvcGUnLCBuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUgfHwgbmV3U2NvcGVEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlLCAkY29tcGlsZU5vZGUpO1xyXG4gICAgICAgICAgICAgIG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBUaGlzIGRpcmVjdGl2ZSBpcyB0cnlpbmcgdG8gYWRkIGEgY2hpbGQgc2NvcGUuXHJcbiAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSBpcyBubyBpc29sYXRlZCBzY29wZSBhbHJlYWR5XHJcbiAgICAgICAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGUoJ25ldy9pc29sYXRlZCBzY29wZScsIG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZSwgZGlyZWN0aXZlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21waWxlTm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBuZXdTY29wZURpcmVjdGl2ZSA9IG5ld1Njb3BlRGlyZWN0aXZlIHx8IGRpcmVjdGl2ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRpcmVjdGl2ZU5hbWUgPSBkaXJlY3RpdmUubmFtZTtcclxuXHJcbiAgICAgICAgaWYgKCFkaXJlY3RpdmUudGVtcGxhdGVVcmwgJiYgZGlyZWN0aXZlLmNvbnRyb2xsZXIpIHtcclxuICAgICAgICAgIGRpcmVjdGl2ZVZhbHVlID0gZGlyZWN0aXZlLmNvbnRyb2xsZXI7XHJcbiAgICAgICAgICBjb250cm9sbGVyRGlyZWN0aXZlcyA9IGNvbnRyb2xsZXJEaXJlY3RpdmVzIHx8IHt9O1xyXG4gICAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGUoXCInXCIgKyBkaXJlY3RpdmVOYW1lICsgXCInIGNvbnRyb2xsZXJcIixcclxuICAgICAgICAgICAgICBjb250cm9sbGVyRGlyZWN0aXZlc1tkaXJlY3RpdmVOYW1lXSwgZGlyZWN0aXZlLCAkY29tcGlsZU5vZGUpO1xyXG4gICAgICAgICAgY29udHJvbGxlckRpcmVjdGl2ZXNbZGlyZWN0aXZlTmFtZV0gPSBkaXJlY3RpdmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGlyZWN0aXZlVmFsdWUgPSBkaXJlY3RpdmUudHJhbnNjbHVkZSkge1xyXG4gICAgICAgICAgaGFzVHJhbnNjbHVkZURpcmVjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIG5nSWYgYW5kIG5nUmVwZWF0IHNvIHRoYXQgd2UgZG9uJ3QgY29tcGxhaW4gYWJvdXQgZHVwbGljYXRlIHRyYW5zY2x1c2lvbi5cclxuICAgICAgICAgIC8vIFRoaXMgb3B0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgZGlyZWN0aXZlcyB0aGF0IGtub3cgaG93IHRvIHNhZmVseSBoYW5kbGUgZWxlbWVudCB0cmFuc2NsdXNpb24sXHJcbiAgICAgICAgICAvLyB3aGVyZSB0aGUgdHJhbnNjbHVkZWQgbm9kZXMgYXJlIGFkZGVkIG9yIHJlcGxhY2VkIGFmdGVyIGxpbmtpbmcuXHJcbiAgICAgICAgICBpZiAoIWRpcmVjdGl2ZS4kJHRsYikge1xyXG4gICAgICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZSgndHJhbnNjbHVzaW9uJywgbm9uVGxiVHJhbnNjbHVkZURpcmVjdGl2ZSwgZGlyZWN0aXZlLCAkY29tcGlsZU5vZGUpO1xyXG4gICAgICAgICAgICBub25UbGJUcmFuc2NsdWRlRGlyZWN0aXZlID0gZGlyZWN0aXZlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChkaXJlY3RpdmVWYWx1ZSA9PSAnZWxlbWVudCcpIHtcclxuICAgICAgICAgICAgaGFzRWxlbWVudFRyYW5zY2x1ZGVEaXJlY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0ZXJtaW5hbFByaW9yaXR5ID0gZGlyZWN0aXZlLnByaW9yaXR5O1xyXG4gICAgICAgICAgICAkdGVtcGxhdGUgPSAkY29tcGlsZU5vZGU7XHJcbiAgICAgICAgICAgICRjb21waWxlTm9kZSA9IHRlbXBsYXRlQXR0cnMuJCRlbGVtZW50ID1cclxuICAgICAgICAgICAgICAgIGpxTGl0ZShkb2N1bWVudC5jcmVhdGVDb21tZW50KCcgJyArIGRpcmVjdGl2ZU5hbWUgKyAnOiAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlQXR0cnNbZGlyZWN0aXZlTmFtZV0gKyAnICcpKTtcclxuICAgICAgICAgICAgY29tcGlsZU5vZGUgPSAkY29tcGlsZU5vZGVbMF07XHJcbiAgICAgICAgICAgIHJlcGxhY2VXaXRoKGpxQ29sbGVjdGlvbiwgc2xpY2VBcmdzKCR0ZW1wbGF0ZSksIGNvbXBpbGVOb2RlKTtcclxuXHJcbiAgICAgICAgICAgIGNoaWxkVHJhbnNjbHVkZUZuID0gY29tcGlsZSgkdGVtcGxhdGUsIHRyYW5zY2x1ZGVGbiwgdGVybWluYWxQcmlvcml0eSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VEaXJlY3RpdmUgJiYgcmVwbGFjZURpcmVjdGl2ZS5uYW1lLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHBhc3MgaW46XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0gY29udHJvbGxlckRpcmVjdGl2ZXMgLSBvdGhlcndpc2Ugd2UnbGwgY3JlYXRlIGR1cGxpY2F0ZXMgY29udHJvbGxlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLSBuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUgb3IgdGVtcGxhdGVEaXJlY3RpdmUgLSBjb21iaW5pbmcgdGVtcGxhdGVzIHdpdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBlbGVtZW50IHRyYW5zY2x1c2lvbiBkb2Vzbid0IG1ha2Ugc2Vuc2UuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgb25seSBub25UbGJUcmFuc2NsdWRlRGlyZWN0aXZlIHNvIHRoYXQgd2UgcHJldmVudCBwdXR0aW5nIHRyYW5zY2x1c2lvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbiB0aGUgc2FtZSBlbGVtZW50IG1vcmUgdGhhbiBvbmNlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25UbGJUcmFuc2NsdWRlRGlyZWN0aXZlOiBub25UbGJUcmFuc2NsdWRlRGlyZWN0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICR0ZW1wbGF0ZSA9IGpxTGl0ZShqcUxpdGVDbG9uZShjb21waWxlTm9kZSkpLmNvbnRlbnRzKCk7XHJcbiAgICAgICAgICAgICRjb21waWxlTm9kZS5lbXB0eSgpOyAvLyBjbGVhciBjb250ZW50c1xyXG4gICAgICAgICAgICBjaGlsZFRyYW5zY2x1ZGVGbiA9IGNvbXBpbGUoJHRlbXBsYXRlLCB0cmFuc2NsdWRlRm4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRpcmVjdGl2ZS50ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgaGFzVGVtcGxhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGUoJ3RlbXBsYXRlJywgdGVtcGxhdGVEaXJlY3RpdmUsIGRpcmVjdGl2ZSwgJGNvbXBpbGVOb2RlKTtcclxuICAgICAgICAgIHRlbXBsYXRlRGlyZWN0aXZlID0gZGlyZWN0aXZlO1xyXG5cclxuICAgICAgICAgIGRpcmVjdGl2ZVZhbHVlID0gKGlzRnVuY3Rpb24oZGlyZWN0aXZlLnRlbXBsYXRlKSlcclxuICAgICAgICAgICAgICA/IGRpcmVjdGl2ZS50ZW1wbGF0ZSgkY29tcGlsZU5vZGUsIHRlbXBsYXRlQXR0cnMpXHJcbiAgICAgICAgICAgICAgOiBkaXJlY3RpdmUudGVtcGxhdGU7XHJcblxyXG4gICAgICAgICAgZGlyZWN0aXZlVmFsdWUgPSBkZW5vcm1hbGl6ZVRlbXBsYXRlKGRpcmVjdGl2ZVZhbHVlKTtcclxuXHJcbiAgICAgICAgICBpZiAoZGlyZWN0aXZlLnJlcGxhY2UpIHtcclxuICAgICAgICAgICAgcmVwbGFjZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcclxuICAgICAgICAgICAgaWYgKGpxTGl0ZUlzVGV4dE5vZGUoZGlyZWN0aXZlVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgJHRlbXBsYXRlID0gW107XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgJHRlbXBsYXRlID0gcmVtb3ZlQ29tbWVudHMod3JhcFRlbXBsYXRlKGRpcmVjdGl2ZS50ZW1wbGF0ZU5hbWVzcGFjZSwgdHJpbShkaXJlY3RpdmVWYWx1ZSkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb21waWxlTm9kZSA9ICR0ZW1wbGF0ZVswXTtcclxuXHJcbiAgICAgICAgICAgIGlmICgkdGVtcGxhdGUubGVuZ3RoICE9IDEgfHwgY29tcGlsZU5vZGUubm9kZVR5cGUgIT09IE5PREVfVFlQRV9FTEVNRU5UKSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgJGNvbXBpbGVNaW5FcnIoJ3RwbHJ0JyxcclxuICAgICAgICAgICAgICAgICAgXCJUZW1wbGF0ZSBmb3IgZGlyZWN0aXZlICd7MH0nIG11c3QgaGF2ZSBleGFjdGx5IG9uZSByb290IGVsZW1lbnQuIHsxfVwiLFxyXG4gICAgICAgICAgICAgICAgICBkaXJlY3RpdmVOYW1lLCAnJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlcGxhY2VXaXRoKGpxQ29sbGVjdGlvbiwgJGNvbXBpbGVOb2RlLCBjb21waWxlTm9kZSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgbmV3VGVtcGxhdGVBdHRycyA9IHskYXR0cjoge319O1xyXG5cclxuICAgICAgICAgICAgLy8gY29tYmluZSBkaXJlY3RpdmVzIGZyb20gdGhlIG9yaWdpbmFsIG5vZGUgYW5kIGZyb20gdGhlIHRlbXBsYXRlOlxyXG4gICAgICAgICAgICAvLyAtIHRha2UgdGhlIGFycmF5IG9mIGRpcmVjdGl2ZXMgZm9yIHRoaXMgZWxlbWVudFxyXG4gICAgICAgICAgICAvLyAtIHNwbGl0IGl0IGludG8gdHdvIHBhcnRzLCB0aG9zZSB0aGF0IGFscmVhZHkgYXBwbGllZCAocHJvY2Vzc2VkKSBhbmQgdGhvc2UgdGhhdCB3ZXJlbid0ICh1bnByb2Nlc3NlZClcclxuICAgICAgICAgICAgLy8gLSBjb2xsZWN0IGRpcmVjdGl2ZXMgZnJvbSB0aGUgdGVtcGxhdGUgYW5kIHNvcnQgdGhlbSBieSBwcmlvcml0eVxyXG4gICAgICAgICAgICAvLyAtIGNvbWJpbmUgZGlyZWN0aXZlcyBhczogcHJvY2Vzc2VkICsgdGVtcGxhdGUgKyB1bnByb2Nlc3NlZFxyXG4gICAgICAgICAgICB2YXIgdGVtcGxhdGVEaXJlY3RpdmVzID0gY29sbGVjdERpcmVjdGl2ZXMoY29tcGlsZU5vZGUsIFtdLCBuZXdUZW1wbGF0ZUF0dHJzKTtcclxuICAgICAgICAgICAgdmFyIHVucHJvY2Vzc2VkRGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXMuc3BsaWNlKGkgKyAxLCBkaXJlY3RpdmVzLmxlbmd0aCAtIChpICsgMSkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZSkge1xyXG4gICAgICAgICAgICAgIG1hcmtEaXJlY3RpdmVzQXNJc29sYXRlKHRlbXBsYXRlRGlyZWN0aXZlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXMuY29uY2F0KHRlbXBsYXRlRGlyZWN0aXZlcykuY29uY2F0KHVucHJvY2Vzc2VkRGlyZWN0aXZlcyk7XHJcbiAgICAgICAgICAgIG1lcmdlVGVtcGxhdGVBdHRyaWJ1dGVzKHRlbXBsYXRlQXR0cnMsIG5ld1RlbXBsYXRlQXR0cnMpO1xyXG5cclxuICAgICAgICAgICAgaWkgPSBkaXJlY3RpdmVzLmxlbmd0aDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICRjb21waWxlTm9kZS5odG1sKGRpcmVjdGl2ZVZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkaXJlY3RpdmUudGVtcGxhdGVVcmwpIHtcclxuICAgICAgICAgIGhhc1RlbXBsYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIGFzc2VydE5vRHVwbGljYXRlKCd0ZW1wbGF0ZScsIHRlbXBsYXRlRGlyZWN0aXZlLCBkaXJlY3RpdmUsICRjb21waWxlTm9kZSk7XHJcbiAgICAgICAgICB0ZW1wbGF0ZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcclxuXHJcbiAgICAgICAgICBpZiAoZGlyZWN0aXZlLnJlcGxhY2UpIHtcclxuICAgICAgICAgICAgcmVwbGFjZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBub2RlTGlua0ZuID0gY29tcGlsZVRlbXBsYXRlVXJsKGRpcmVjdGl2ZXMuc3BsaWNlKGksIGRpcmVjdGl2ZXMubGVuZ3RoIC0gaSksICRjb21waWxlTm9kZSxcclxuICAgICAgICAgICAgICB0ZW1wbGF0ZUF0dHJzLCBqcUNvbGxlY3Rpb24sIGhhc1RyYW5zY2x1ZGVEaXJlY3RpdmUgJiYgY2hpbGRUcmFuc2NsdWRlRm4sIHByZUxpbmtGbnMsIHBvc3RMaW5rRm5zLCB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyRGlyZWN0aXZlczogY29udHJvbGxlckRpcmVjdGl2ZXMsXHJcbiAgICAgICAgICAgICAgICBuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmU6IG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlRGlyZWN0aXZlOiB0ZW1wbGF0ZURpcmVjdGl2ZSxcclxuICAgICAgICAgICAgICAgIG5vblRsYlRyYW5zY2x1ZGVEaXJlY3RpdmU6IG5vblRsYlRyYW5zY2x1ZGVEaXJlY3RpdmVcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlpID0gZGlyZWN0aXZlcy5sZW5ndGg7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaXJlY3RpdmUuY29tcGlsZSkge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGlua0ZuID0gZGlyZWN0aXZlLmNvbXBpbGUoJGNvbXBpbGVOb2RlLCB0ZW1wbGF0ZUF0dHJzLCBjaGlsZFRyYW5zY2x1ZGVGbik7XHJcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGxpbmtGbikpIHtcclxuICAgICAgICAgICAgICBhZGRMaW5rRm5zKG51bGwsIGxpbmtGbiwgYXR0clN0YXJ0LCBhdHRyRW5kKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5rRm4pIHtcclxuICAgICAgICAgICAgICBhZGRMaW5rRm5zKGxpbmtGbi5wcmUsIGxpbmtGbi5wb3N0LCBhdHRyU3RhcnQsIGF0dHJFbmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUsIHN0YXJ0aW5nVGFnKCRjb21waWxlTm9kZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRpcmVjdGl2ZS50ZXJtaW5hbCkge1xyXG4gICAgICAgICAgbm9kZUxpbmtGbi50ZXJtaW5hbCA9IHRydWU7XHJcbiAgICAgICAgICB0ZXJtaW5hbFByaW9yaXR5ID0gTWF0aC5tYXgodGVybWluYWxQcmlvcml0eSwgZGlyZWN0aXZlLnByaW9yaXR5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBub2RlTGlua0ZuLnNjb3BlID0gbmV3U2NvcGVEaXJlY3RpdmUgJiYgbmV3U2NvcGVEaXJlY3RpdmUuc2NvcGUgPT09IHRydWU7XHJcbiAgICAgIG5vZGVMaW5rRm4udHJhbnNjbHVkZU9uVGhpc0VsZW1lbnQgPSBoYXNUcmFuc2NsdWRlRGlyZWN0aXZlO1xyXG4gICAgICBub2RlTGlua0ZuLmVsZW1lbnRUcmFuc2NsdWRlT25UaGlzRWxlbWVudCA9IGhhc0VsZW1lbnRUcmFuc2NsdWRlRGlyZWN0aXZlO1xyXG4gICAgICBub2RlTGlua0ZuLnRlbXBsYXRlT25UaGlzRWxlbWVudCA9IGhhc1RlbXBsYXRlO1xyXG4gICAgICBub2RlTGlua0ZuLnRyYW5zY2x1ZGUgPSBjaGlsZFRyYW5zY2x1ZGVGbjtcclxuXHJcbiAgICAgIHByZXZpb3VzQ29tcGlsZUNvbnRleHQuaGFzRWxlbWVudFRyYW5zY2x1ZGVEaXJlY3RpdmUgPSBoYXNFbGVtZW50VHJhbnNjbHVkZURpcmVjdGl2ZTtcclxuXHJcbiAgICAgIC8vIG1pZ2h0IGJlIG5vcm1hbCBvciBkZWxheWVkIG5vZGVMaW5rRm4gZGVwZW5kaW5nIG9uIGlmIHRlbXBsYXRlVXJsIGlzIHByZXNlbnRcclxuICAgICAgcmV0dXJuIG5vZGVMaW5rRm47XHJcblxyXG4gICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICAgICAgZnVuY3Rpb24gYWRkTGlua0ZucyhwcmUsIHBvc3QsIGF0dHJTdGFydCwgYXR0ckVuZCkge1xyXG4gICAgICAgIGlmIChwcmUpIHtcclxuICAgICAgICAgIGlmIChhdHRyU3RhcnQpIHByZSA9IGdyb3VwRWxlbWVudHNMaW5rRm5XcmFwcGVyKHByZSwgYXR0clN0YXJ0LCBhdHRyRW5kKTtcclxuICAgICAgICAgIHByZS5yZXF1aXJlID0gZGlyZWN0aXZlLnJlcXVpcmU7XHJcbiAgICAgICAgICBwcmUuZGlyZWN0aXZlTmFtZSA9IGRpcmVjdGl2ZU5hbWU7XHJcbiAgICAgICAgICBpZiAobmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlID09PSBkaXJlY3RpdmUgfHwgZGlyZWN0aXZlLiQkaXNvbGF0ZVNjb3BlKSB7XHJcbiAgICAgICAgICAgIHByZSA9IGNsb25lQW5kQW5ub3RhdGVGbihwcmUsIHtpc29sYXRlU2NvcGU6IHRydWV9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHByZUxpbmtGbnMucHVzaChwcmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocG9zdCkge1xyXG4gICAgICAgICAgaWYgKGF0dHJTdGFydCkgcG9zdCA9IGdyb3VwRWxlbWVudHNMaW5rRm5XcmFwcGVyKHBvc3QsIGF0dHJTdGFydCwgYXR0ckVuZCk7XHJcbiAgICAgICAgICBwb3N0LnJlcXVpcmUgPSBkaXJlY3RpdmUucmVxdWlyZTtcclxuICAgICAgICAgIHBvc3QuZGlyZWN0aXZlTmFtZSA9IGRpcmVjdGl2ZU5hbWU7XHJcbiAgICAgICAgICBpZiAobmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlID09PSBkaXJlY3RpdmUgfHwgZGlyZWN0aXZlLiQkaXNvbGF0ZVNjb3BlKSB7XHJcbiAgICAgICAgICAgIHBvc3QgPSBjbG9uZUFuZEFubm90YXRlRm4ocG9zdCwge2lzb2xhdGVTY29wZTogdHJ1ZX0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcG9zdExpbmtGbnMucHVzaChwb3N0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICBmdW5jdGlvbiBnZXRDb250cm9sbGVycyhkaXJlY3RpdmVOYW1lLCByZXF1aXJlLCAkZWxlbWVudCwgZWxlbWVudENvbnRyb2xsZXJzKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlLCByZXRyaWV2YWxNZXRob2QgPSAnZGF0YScsIG9wdGlvbmFsID0gZmFsc2U7XHJcbiAgICAgICAgdmFyICRzZWFyY2hFbGVtZW50ID0gJGVsZW1lbnQ7XHJcbiAgICAgICAgdmFyIG1hdGNoO1xyXG4gICAgICAgIGlmIChpc1N0cmluZyhyZXF1aXJlKSkge1xyXG4gICAgICAgICAgbWF0Y2ggPSByZXF1aXJlLm1hdGNoKFJFUVVJUkVfUFJFRklYX1JFR0VYUCk7XHJcbiAgICAgICAgICByZXF1aXJlID0gcmVxdWlyZS5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICBpZiAobWF0Y2hbM10pIHtcclxuICAgICAgICAgICAgaWYgKG1hdGNoWzFdKSBtYXRjaFszXSA9IG51bGw7XHJcbiAgICAgICAgICAgIGVsc2UgbWF0Y2hbMV0gPSBtYXRjaFszXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChtYXRjaFsxXSA9PT0gJ14nKSB7XHJcbiAgICAgICAgICAgIHJldHJpZXZhbE1ldGhvZCA9ICdpbmhlcml0ZWREYXRhJztcclxuICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hbMV0gPT09ICdeXicpIHtcclxuICAgICAgICAgICAgcmV0cmlldmFsTWV0aG9kID0gJ2luaGVyaXRlZERhdGEnO1xyXG4gICAgICAgICAgICAkc2VhcmNoRWxlbWVudCA9ICRlbGVtZW50LnBhcmVudCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG1hdGNoWzJdID09PSAnPycpIHtcclxuICAgICAgICAgICAgb3B0aW9uYWwgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHZhbHVlID0gbnVsbDtcclxuXHJcbiAgICAgICAgICBpZiAoZWxlbWVudENvbnRyb2xsZXJzICYmIHJldHJpZXZhbE1ldGhvZCA9PT0gJ2RhdGEnKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9IGVsZW1lbnRDb250cm9sbGVyc1tyZXF1aXJlXSkge1xyXG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuaW5zdGFuY2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhbHVlID0gdmFsdWUgfHwgJHNlYXJjaEVsZW1lbnRbcmV0cmlldmFsTWV0aG9kXSgnJCcgKyByZXF1aXJlICsgJ0NvbnRyb2xsZXInKTtcclxuXHJcbiAgICAgICAgICBpZiAoIXZhbHVlICYmICFvcHRpb25hbCkge1xyXG4gICAgICAgICAgICB0aHJvdyAkY29tcGlsZU1pbkVycignY3RyZXEnLFxyXG4gICAgICAgICAgICAgICAgXCJDb250cm9sbGVyICd7MH0nLCByZXF1aXJlZCBieSBkaXJlY3RpdmUgJ3sxfScsIGNhbid0IGJlIGZvdW5kIVwiLFxyXG4gICAgICAgICAgICAgICAgcmVxdWlyZSwgZGlyZWN0aXZlTmFtZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgfHwgbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkocmVxdWlyZSkpIHtcclxuICAgICAgICAgIHZhbHVlID0gW107XHJcbiAgICAgICAgICBmb3JFYWNoKHJlcXVpcmUsIGZ1bmN0aW9uKHJlcXVpcmUpIHtcclxuICAgICAgICAgICAgdmFsdWUucHVzaChnZXRDb250cm9sbGVycyhkaXJlY3RpdmVOYW1lLCByZXF1aXJlLCAkZWxlbWVudCwgZWxlbWVudENvbnRyb2xsZXJzKSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgZnVuY3Rpb24gbm9kZUxpbmtGbihjaGlsZExpbmtGbiwgc2NvcGUsIGxpbmtOb2RlLCAkcm9vdEVsZW1lbnQsIGJvdW5kVHJhbnNjbHVkZUZuKSB7XHJcbiAgICAgICAgdmFyIGksIGlpLCBsaW5rRm4sIGNvbnRyb2xsZXIsIGlzb2xhdGVTY29wZSwgZWxlbWVudENvbnRyb2xsZXJzLCB0cmFuc2NsdWRlRm4sICRlbGVtZW50LFxyXG4gICAgICAgICAgICBhdHRycztcclxuXHJcbiAgICAgICAgaWYgKGNvbXBpbGVOb2RlID09PSBsaW5rTm9kZSkge1xyXG4gICAgICAgICAgYXR0cnMgPSB0ZW1wbGF0ZUF0dHJzO1xyXG4gICAgICAgICAgJGVsZW1lbnQgPSB0ZW1wbGF0ZUF0dHJzLiQkZWxlbWVudDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgJGVsZW1lbnQgPSBqcUxpdGUobGlua05vZGUpO1xyXG4gICAgICAgICAgYXR0cnMgPSBuZXcgQXR0cmlidXRlcygkZWxlbWVudCwgdGVtcGxhdGVBdHRycyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlKSB7XHJcbiAgICAgICAgICBpc29sYXRlU2NvcGUgPSBzY29wZS4kbmV3KHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJvdW5kVHJhbnNjbHVkZUZuKSB7XHJcbiAgICAgICAgICAvLyB0cmFjayBgYm91bmRUcmFuc2NsdWRlRm5gIHNvIGl0IGNhbiBiZSB1bndyYXBwZWQgaWYgYHRyYW5zY2x1ZGVGbmBcclxuICAgICAgICAgIC8vIGlzIGxhdGVyIHBhc3NlZCBhcyBgcGFyZW50Qm91bmRUcmFuc2NsdWRlRm5gIHRvIGBwdWJsaWNMaW5rRm5gXHJcbiAgICAgICAgICB0cmFuc2NsdWRlRm4gPSBjb250cm9sbGVyc0JvdW5kVHJhbnNjbHVkZTtcclxuICAgICAgICAgIHRyYW5zY2x1ZGVGbi4kJGJvdW5kVHJhbnNjbHVkZSA9IGJvdW5kVHJhbnNjbHVkZUZuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbnRyb2xsZXJEaXJlY3RpdmVzKSB7XHJcbiAgICAgICAgICAvLyBUT0RPOiBtZXJnZSBgY29udHJvbGxlcnNgIGFuZCBgZWxlbWVudENvbnRyb2xsZXJzYCBpbnRvIHNpbmdsZSBvYmplY3QuXHJcbiAgICAgICAgICBjb250cm9sbGVycyA9IHt9O1xyXG4gICAgICAgICAgZWxlbWVudENvbnRyb2xsZXJzID0ge307XHJcbiAgICAgICAgICBmb3JFYWNoKGNvbnRyb2xsZXJEaXJlY3RpdmVzLCBmdW5jdGlvbihkaXJlY3RpdmUpIHtcclxuICAgICAgICAgICAgdmFyIGxvY2FscyA9IHtcclxuICAgICAgICAgICAgICAkc2NvcGU6IGRpcmVjdGl2ZSA9PT0gbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlIHx8IGRpcmVjdGl2ZS4kJGlzb2xhdGVTY29wZSA/IGlzb2xhdGVTY29wZSA6IHNjb3BlLFxyXG4gICAgICAgICAgICAgICRlbGVtZW50OiAkZWxlbWVudCxcclxuICAgICAgICAgICAgICAkYXR0cnM6IGF0dHJzLFxyXG4gICAgICAgICAgICAgICR0cmFuc2NsdWRlOiB0cmFuc2NsdWRlRm5cclxuICAgICAgICAgICAgfSwgY29udHJvbGxlckluc3RhbmNlO1xyXG5cclxuICAgICAgICAgICAgY29udHJvbGxlciA9IGRpcmVjdGl2ZS5jb250cm9sbGVyO1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbGxlciA9PSAnQCcpIHtcclxuICAgICAgICAgICAgICBjb250cm9sbGVyID0gYXR0cnNbZGlyZWN0aXZlLm5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb250cm9sbGVySW5zdGFuY2UgPSAkY29udHJvbGxlcihjb250cm9sbGVyLCBsb2NhbHMsIHRydWUsIGRpcmVjdGl2ZS5jb250cm9sbGVyQXMpO1xyXG5cclxuICAgICAgICAgICAgLy8gRm9yIGRpcmVjdGl2ZXMgd2l0aCBlbGVtZW50IHRyYW5zY2x1c2lvbiB0aGUgZWxlbWVudCBpcyBhIGNvbW1lbnQsXHJcbiAgICAgICAgICAgIC8vIGJ1dCBqUXVlcnkgLmRhdGEgZG9lc24ndCBzdXBwb3J0IGF0dGFjaGluZyBkYXRhIHRvIGNvbW1lbnQgbm9kZXMgYXMgaXQncyBoYXJkIHRvXHJcbiAgICAgICAgICAgIC8vIGNsZWFuIHVwIChodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC84MzM1KS5cclxuICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2Ugc2F2ZSB0aGUgY29udHJvbGxlcnMgZm9yIHRoZSBlbGVtZW50IGluIGEgbG9jYWwgaGFzaCBhbmQgYXR0YWNoIHRvIC5kYXRhXHJcbiAgICAgICAgICAgIC8vIGxhdGVyLCBvbmNlIHdlIGhhdmUgdGhlIGFjdHVhbCBlbGVtZW50LlxyXG4gICAgICAgICAgICBlbGVtZW50Q29udHJvbGxlcnNbZGlyZWN0aXZlLm5hbWVdID0gY29udHJvbGxlckluc3RhbmNlO1xyXG4gICAgICAgICAgICBpZiAoIWhhc0VsZW1lbnRUcmFuc2NsdWRlRGlyZWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgJGVsZW1lbnQuZGF0YSgnJCcgKyBkaXJlY3RpdmUubmFtZSArICdDb250cm9sbGVyJywgY29udHJvbGxlckluc3RhbmNlLmluc3RhbmNlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29udHJvbGxlcnNbZGlyZWN0aXZlLm5hbWVdID0gY29udHJvbGxlckluc3RhbmNlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlKSB7XHJcbiAgICAgICAgICBjb21waWxlLiQkYWRkU2NvcGVJbmZvKCRlbGVtZW50LCBpc29sYXRlU2NvcGUsIHRydWUsICEodGVtcGxhdGVEaXJlY3RpdmUgJiYgKHRlbXBsYXRlRGlyZWN0aXZlID09PSBuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUgfHxcclxuICAgICAgICAgICAgICB0ZW1wbGF0ZURpcmVjdGl2ZSA9PT0gbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlLiQkb3JpZ2luYWxEaXJlY3RpdmUpKSk7XHJcbiAgICAgICAgICBjb21waWxlLiQkYWRkU2NvcGVDbGFzcygkZWxlbWVudCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgdmFyIGlzb2xhdGVTY29wZUNvbnRyb2xsZXIgPSBjb250cm9sbGVycyAmJiBjb250cm9sbGVyc1tuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUubmFtZV07XHJcbiAgICAgICAgICB2YXIgaXNvbGF0ZUJpbmRpbmdDb250ZXh0ID0gaXNvbGF0ZVNjb3BlO1xyXG4gICAgICAgICAgaWYgKGlzb2xhdGVTY29wZUNvbnRyb2xsZXIgJiYgaXNvbGF0ZVNjb3BlQ29udHJvbGxlci5pZGVudGlmaWVyICYmXHJcbiAgICAgICAgICAgICAgbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlLmJpbmRUb0NvbnRyb2xsZXIgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaXNvbGF0ZUJpbmRpbmdDb250ZXh0ID0gaXNvbGF0ZVNjb3BlQ29udHJvbGxlci5pbnN0YW5jZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBmb3JFYWNoKGlzb2xhdGVTY29wZS4kJGlzb2xhdGVCaW5kaW5ncyA9IG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZS4kJGlzb2xhdGVCaW5kaW5ncywgZnVuY3Rpb24oZGVmaW5pdGlvbiwgc2NvcGVOYW1lKSB7XHJcbiAgICAgICAgICAgIHZhciBhdHRyTmFtZSA9IGRlZmluaXRpb24uYXR0ck5hbWUsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25hbCA9IGRlZmluaXRpb24ub3B0aW9uYWwsXHJcbiAgICAgICAgICAgICAgICBtb2RlID0gZGVmaW5pdGlvbi5tb2RlLCAvLyBALCA9LCBvciAmXHJcbiAgICAgICAgICAgICAgICBsYXN0VmFsdWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRHZXQsIHBhcmVudFNldCwgY29tcGFyZTtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAobW9kZSkge1xyXG5cclxuICAgICAgICAgICAgICBjYXNlICdAJzpcclxuICAgICAgICAgICAgICAgIGF0dHJzLiRvYnNlcnZlKGF0dHJOYW1lLCBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBpc29sYXRlQmluZGluZ0NvbnRleHRbc2NvcGVOYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBhdHRycy4kJG9ic2VydmVyc1thdHRyTmFtZV0uJCRzY29wZSA9IHNjb3BlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF0dHJzW2F0dHJOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGhhcyBiZWVuIHByb3ZpZGVkIHRoZW4gd2UgdHJpZ2dlciBhbiBpbnRlcnBvbGF0aW9uIHRvIGVuc3VyZVxyXG4gICAgICAgICAgICAgICAgICAvLyB0aGUgdmFsdWUgaXMgdGhlcmUgZm9yIHVzZSBpbiB0aGUgbGluayBmblxyXG4gICAgICAgICAgICAgICAgICBpc29sYXRlQmluZGluZ0NvbnRleHRbc2NvcGVOYW1lXSA9ICRpbnRlcnBvbGF0ZShhdHRyc1thdHRyTmFtZV0pKHNjb3BlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBjYXNlICc9JzpcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25hbCAmJiAhYXR0cnNbYXR0ck5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHBhcmVudEdldCA9ICRwYXJzZShhdHRyc1thdHRyTmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudEdldC5saXRlcmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbXBhcmUgPSBlcXVhbHM7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb21wYXJlID0gZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSA9PT0gYiB8fCAoYSAhPT0gYSAmJiBiICE9PSBiKTsgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHBhcmVudFNldCA9IHBhcmVudEdldC5hc3NpZ24gfHwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHJlc2V0IHRoZSBjaGFuZ2UsIG9yIHdlIHdpbGwgdGhyb3cgdGhpcyBleGNlcHRpb24gb24gZXZlcnkgJGRpZ2VzdFxyXG4gICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBpc29sYXRlQmluZGluZ0NvbnRleHRbc2NvcGVOYW1lXSA9IHBhcmVudEdldChzY29wZSk7XHJcbiAgICAgICAgICAgICAgICAgIHRocm93ICRjb21waWxlTWluRXJyKCdub25hc3NpZ24nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJFeHByZXNzaW9uICd7MH0nIHVzZWQgd2l0aCBkaXJlY3RpdmUgJ3sxfScgaXMgbm9uLWFzc2lnbmFibGUhXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyc1thdHRyTmFtZV0sIG5ld0lzb2xhdGVTY29wZURpcmVjdGl2ZS5uYW1lKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBpc29sYXRlQmluZGluZ0NvbnRleHRbc2NvcGVOYW1lXSA9IHBhcmVudEdldChzY29wZSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyZW50VmFsdWVXYXRjaCA9IGZ1bmN0aW9uIHBhcmVudFZhbHVlV2F0Y2gocGFyZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlKHBhcmVudFZhbHVlLCBpc29sYXRlQmluZGluZ0NvbnRleHRbc2NvcGVOYW1lXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgb3V0IG9mIHN5bmMgYW5kIG5lZWQgdG8gY29weVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShwYXJlbnRWYWx1ZSwgbGFzdFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gcGFyZW50IGNoYW5nZWQgYW5kIGl0IGhhcyBwcmVjZWRlbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICBpc29sYXRlQmluZGluZ0NvbnRleHRbc2NvcGVOYW1lXSA9IHBhcmVudFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcGFyZW50IGNhbiBiZSBhc3NpZ25lZCB0aGVuIGRvIHNvXHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTZXQoc2NvcGUsIHBhcmVudFZhbHVlID0gaXNvbGF0ZUJpbmRpbmdDb250ZXh0W3Njb3BlTmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gbGFzdFZhbHVlID0gcGFyZW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcGFyZW50VmFsdWVXYXRjaC4kc3RhdGVmdWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIHVud2F0Y2g7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVmaW5pdGlvbi5jb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgIHVud2F0Y2ggPSBzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKGF0dHJzW2F0dHJOYW1lXSwgcGFyZW50VmFsdWVXYXRjaCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB1bndhdGNoID0gc2NvcGUuJHdhdGNoKCRwYXJzZShhdHRyc1thdHRyTmFtZV0sIHBhcmVudFZhbHVlV2F0Y2gpLCBudWxsLCBwYXJlbnRHZXQubGl0ZXJhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpc29sYXRlU2NvcGUuJG9uKCckZGVzdHJveScsIHVud2F0Y2gpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgJyYnOlxyXG4gICAgICAgICAgICAgICAgcGFyZW50R2V0ID0gJHBhcnNlKGF0dHJzW2F0dHJOYW1lXSk7XHJcbiAgICAgICAgICAgICAgICBpc29sYXRlQmluZGluZ0NvbnRleHRbc2NvcGVOYW1lXSA9IGZ1bmN0aW9uKGxvY2Fscykge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50R2V0KHNjb3BlLCBsb2NhbHMpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnRyb2xsZXJzKSB7XHJcbiAgICAgICAgICBmb3JFYWNoKGNvbnRyb2xsZXJzLCBmdW5jdGlvbihjb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgIGNvbnRyb2xsZXIoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgY29udHJvbGxlcnMgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUFJFTElOS0lOR1xyXG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gcHJlTGlua0Zucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XHJcbiAgICAgICAgICBsaW5rRm4gPSBwcmVMaW5rRm5zW2ldO1xyXG4gICAgICAgICAgaW52b2tlTGlua0ZuKGxpbmtGbixcclxuICAgICAgICAgICAgICBsaW5rRm4uaXNvbGF0ZVNjb3BlID8gaXNvbGF0ZVNjb3BlIDogc2NvcGUsXHJcbiAgICAgICAgICAgICAgJGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgYXR0cnMsXHJcbiAgICAgICAgICAgICAgbGlua0ZuLnJlcXVpcmUgJiYgZ2V0Q29udHJvbGxlcnMobGlua0ZuLmRpcmVjdGl2ZU5hbWUsIGxpbmtGbi5yZXF1aXJlLCAkZWxlbWVudCwgZWxlbWVudENvbnRyb2xsZXJzKSxcclxuICAgICAgICAgICAgICB0cmFuc2NsdWRlRm5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSRUNVUlNJT05cclxuICAgICAgICAvLyBXZSBvbmx5IHBhc3MgdGhlIGlzb2xhdGUgc2NvcGUsIGlmIHRoZSBpc29sYXRlIGRpcmVjdGl2ZSBoYXMgYSB0ZW1wbGF0ZSxcclxuICAgICAgICAvLyBvdGhlcndpc2UgdGhlIGNoaWxkIGVsZW1lbnRzIGRvIG5vdCBiZWxvbmcgdG8gdGhlIGlzb2xhdGUgZGlyZWN0aXZlLlxyXG4gICAgICAgIHZhciBzY29wZVRvQ2hpbGQgPSBzY29wZTtcclxuICAgICAgICBpZiAobmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlICYmIChuZXdJc29sYXRlU2NvcGVEaXJlY3RpdmUudGVtcGxhdGUgfHwgbmV3SXNvbGF0ZVNjb3BlRGlyZWN0aXZlLnRlbXBsYXRlVXJsID09PSBudWxsKSkge1xyXG4gICAgICAgICAgc2NvcGVUb0NoaWxkID0gaXNvbGF0ZVNjb3BlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjaGlsZExpbmtGbiAmJiBjaGlsZExpbmtGbihzY29wZVRvQ2hpbGQsIGxpbmtOb2RlLmNoaWxkTm9kZXMsIHVuZGVmaW5lZCwgYm91bmRUcmFuc2NsdWRlRm4pO1xyXG5cclxuICAgICAgICAvLyBQT1NUTElOS0lOR1xyXG4gICAgICAgIGZvciAoaSA9IHBvc3RMaW5rRm5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICBsaW5rRm4gPSBwb3N0TGlua0Zuc1tpXTtcclxuICAgICAgICAgIGludm9rZUxpbmtGbihsaW5rRm4sXHJcbiAgICAgICAgICAgICAgbGlua0ZuLmlzb2xhdGVTY29wZSA/IGlzb2xhdGVTY29wZSA6IHNjb3BlLFxyXG4gICAgICAgICAgICAgICRlbGVtZW50LFxyXG4gICAgICAgICAgICAgIGF0dHJzLFxyXG4gICAgICAgICAgICAgIGxpbmtGbi5yZXF1aXJlICYmIGdldENvbnRyb2xsZXJzKGxpbmtGbi5kaXJlY3RpdmVOYW1lLCBsaW5rRm4ucmVxdWlyZSwgJGVsZW1lbnQsIGVsZW1lbnRDb250cm9sbGVycyksXHJcbiAgICAgICAgICAgICAgdHJhbnNjbHVkZUZuXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpcyBpbmplY3RlZCBhcyBgJHRyYW5zY2x1ZGVgLlxyXG4gICAgICAgIC8vIE5vdGU6IGFsbCBhcmd1bWVudHMgYXJlIG9wdGlvbmFsIVxyXG4gICAgICAgIGZ1bmN0aW9uIGNvbnRyb2xsZXJzQm91bmRUcmFuc2NsdWRlKHNjb3BlLCBjbG9uZUF0dGFjaEZuLCBmdXR1cmVQYXJlbnRFbGVtZW50KSB7XHJcbiAgICAgICAgICB2YXIgdHJhbnNjbHVkZUNvbnRyb2xsZXJzO1xyXG5cclxuICAgICAgICAgIC8vIE5vIHNjb3BlIHBhc3NlZCBpbjpcclxuICAgICAgICAgIGlmICghaXNTY29wZShzY29wZSkpIHtcclxuICAgICAgICAgICAgZnV0dXJlUGFyZW50RWxlbWVudCA9IGNsb25lQXR0YWNoRm47XHJcbiAgICAgICAgICAgIGNsb25lQXR0YWNoRm4gPSBzY29wZTtcclxuICAgICAgICAgICAgc2NvcGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGhhc0VsZW1lbnRUcmFuc2NsdWRlRGlyZWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHRyYW5zY2x1ZGVDb250cm9sbGVycyA9IGVsZW1lbnRDb250cm9sbGVycztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghZnV0dXJlUGFyZW50RWxlbWVudCkge1xyXG4gICAgICAgICAgICBmdXR1cmVQYXJlbnRFbGVtZW50ID0gaGFzRWxlbWVudFRyYW5zY2x1ZGVEaXJlY3RpdmUgPyAkZWxlbWVudC5wYXJlbnQoKSA6ICRlbGVtZW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGJvdW5kVHJhbnNjbHVkZUZuKHNjb3BlLCBjbG9uZUF0dGFjaEZuLCB0cmFuc2NsdWRlQ29udHJvbGxlcnMsIGZ1dHVyZVBhcmVudEVsZW1lbnQsIHNjb3BlVG9DaGlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbWFya0RpcmVjdGl2ZXNBc0lzb2xhdGUoZGlyZWN0aXZlcykge1xyXG4gICAgICAvLyBtYXJrIGFsbCBkaXJlY3RpdmVzIGFzIG5lZWRpbmcgaXNvbGF0ZSBzY29wZS5cclxuICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gZGlyZWN0aXZlcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XHJcbiAgICAgICAgZGlyZWN0aXZlc1tqXSA9IGluaGVyaXQoZGlyZWN0aXZlc1tqXSwgeyQkaXNvbGF0ZVNjb3BlOiB0cnVlfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGxvb2tzIHVwIHRoZSBkaXJlY3RpdmUgYW5kIGRlY29yYXRlcyBpdCB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyBhbmQgcHJvcGVyIHBhcmFtZXRlcnMuIFdlXHJcbiAgICAgKiBjYWxsIHRoaXMgdGhlIGJvdW5kRGlyZWN0aXZlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGRpcmVjdGl2ZSB0byBsb29rIHVwLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIFRoZSBkaXJlY3RpdmUgbXVzdCBiZSBmb3VuZCBpbiBzcGVjaWZpYyBmb3JtYXQuXHJcbiAgICAgKiAgIFN0cmluZyBjb250YWluaW5nIGFueSBvZiB0aGVzZXMgY2hhcmFjdGVyczpcclxuICAgICAqXHJcbiAgICAgKiAgICogYEVgOiBlbGVtZW50IG5hbWVcclxuICAgICAqICAgKiBgQSc6IGF0dHJpYnV0ZVxyXG4gICAgICogICAqIGBDYDogY2xhc3NcclxuICAgICAqICAgKiBgTWA6IGNvbW1lbnRcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGRpcmVjdGl2ZSB3YXMgYWRkZWQuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGFkZERpcmVjdGl2ZSh0RGlyZWN0aXZlcywgbmFtZSwgbG9jYXRpb24sIG1heFByaW9yaXR5LCBpZ25vcmVEaXJlY3RpdmUsIHN0YXJ0QXR0ck5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kQXR0ck5hbWUpIHtcclxuICAgICAgaWYgKG5hbWUgPT09IGlnbm9yZURpcmVjdGl2ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIHZhciBtYXRjaCA9IG51bGw7XHJcbiAgICAgIGlmIChoYXNEaXJlY3RpdmVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgZm9yICh2YXIgZGlyZWN0aXZlLCBkaXJlY3RpdmVzID0gJGluamVjdG9yLmdldChuYW1lICsgU3VmZml4KSxcclxuICAgICAgICAgICAgaSA9IDAsIGlpID0gZGlyZWN0aXZlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkaXJlY3RpdmUgPSBkaXJlY3RpdmVzW2ldO1xyXG4gICAgICAgICAgICBpZiAoKG1heFByaW9yaXR5ID09PSB1bmRlZmluZWQgfHwgbWF4UHJpb3JpdHkgPiBkaXJlY3RpdmUucHJpb3JpdHkpICYmXHJcbiAgICAgICAgICAgICAgICAgZGlyZWN0aXZlLnJlc3RyaWN0LmluZGV4T2YobG9jYXRpb24pICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHN0YXJ0QXR0ck5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZSA9IGluaGVyaXQoZGlyZWN0aXZlLCB7JCRzdGFydDogc3RhcnRBdHRyTmFtZSwgJCRlbmQ6IGVuZEF0dHJOYW1lfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHREaXJlY3RpdmVzLnB1c2goZGlyZWN0aXZlKTtcclxuICAgICAgICAgICAgICBtYXRjaCA9IGRpcmVjdGl2ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBjYXRjaCAoZSkgeyAkZXhjZXB0aW9uSGFuZGxlcihlKTsgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbWF0Y2g7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogbG9va3MgdXAgdGhlIGRpcmVjdGl2ZSBhbmQgcmV0dXJucyB0cnVlIGlmIGl0IGlzIGEgbXVsdGktZWxlbWVudCBkaXJlY3RpdmUsXHJcbiAgICAgKiBhbmQgdGhlcmVmb3JlIHJlcXVpcmVzIERPTSBub2RlcyBiZXR3ZWVuIC1zdGFydCBhbmQgLWVuZCBtYXJrZXJzIHRvIGJlIGdyb3VwZWRcclxuICAgICAqIHRvZ2V0aGVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGRpcmVjdGl2ZSB0byBsb29rIHVwLlxyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBkaXJlY3RpdmUgd2FzIHJlZ2lzdGVyZWQgYXMgbXVsdGktZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZGlyZWN0aXZlSXNNdWx0RWxlbWVudChuYW1lKSB7XHJcbiAgICAgIGlmIChoYXNEaXJlY3RpdmVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgZm9yICh2YXIgZGlyZWN0aXZlLCBkaXJlY3RpdmVzID0gJGluamVjdG9yLmdldChuYW1lICsgU3VmZml4KSxcclxuICAgICAgICAgICAgaSA9IDAsIGlpID0gZGlyZWN0aXZlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XHJcbiAgICAgICAgICBkaXJlY3RpdmUgPSBkaXJlY3RpdmVzW2ldO1xyXG4gICAgICAgICAgaWYgKGRpcmVjdGl2ZS5tdWx0RWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiB0aGUgZWxlbWVudCBpcyByZXBsYWNlZCB3aXRoIEhUTUwgdGVtcGxhdGUgdGhlbiB0aGUgbmV3IGF0dHJpYnV0ZXNcclxuICAgICAqIG9uIHRoZSB0ZW1wbGF0ZSBuZWVkIHRvIGJlIG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyBhdHRyaWJ1dGVzIGluIHRoZSBET00uXHJcbiAgICAgKiBUaGUgZGVzaXJlZCBlZmZlY3QgaXMgdG8gaGF2ZSBib3RoIG9mIHRoZSBhdHRyaWJ1dGVzIHByZXNlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRzdCBkZXN0aW5hdGlvbiBhdHRyaWJ1dGVzIChvcmlnaW5hbCBET00pXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gc3JjIHNvdXJjZSBhdHRyaWJ1dGVzIChmcm9tIHRoZSBkaXJlY3RpdmUgdGVtcGxhdGUpXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIG1lcmdlVGVtcGxhdGVBdHRyaWJ1dGVzKGRzdCwgc3JjKSB7XHJcbiAgICAgIHZhciBzcmNBdHRyID0gc3JjLiRhdHRyLFxyXG4gICAgICAgICAgZHN0QXR0ciA9IGRzdC4kYXR0cixcclxuICAgICAgICAgICRlbGVtZW50ID0gZHN0LiQkZWxlbWVudDtcclxuXHJcbiAgICAgIC8vIHJlYXBwbHkgdGhlIG9sZCBhdHRyaWJ1dGVzIHRvIHRoZSBuZXcgZWxlbWVudFxyXG4gICAgICBmb3JFYWNoKGRzdCwgZnVuY3Rpb24odmFsdWUsIGtleSkge1xyXG4gICAgICAgIGlmIChrZXkuY2hhckF0KDApICE9ICckJykge1xyXG4gICAgICAgICAgaWYgKHNyY1trZXldICYmIHNyY1trZXldICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YWx1ZSArPSAoa2V5ID09PSAnc3R5bGUnID8gJzsnIDogJyAnKSArIHNyY1trZXldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZHN0LiRzZXQoa2V5LCB2YWx1ZSwgdHJ1ZSwgc3JjQXR0cltrZXldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gY29weSB0aGUgbmV3IGF0dHJpYnV0ZXMgb24gdGhlIG9sZCBhdHRycyBvYmplY3RcclxuICAgICAgZm9yRWFjaChzcmMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcclxuICAgICAgICBpZiAoa2V5ID09ICdjbGFzcycpIHtcclxuICAgICAgICAgIHNhZmVBZGRDbGFzcygkZWxlbWVudCwgdmFsdWUpO1xyXG4gICAgICAgICAgZHN0WydjbGFzcyddID0gKGRzdFsnY2xhc3MnXSA/IGRzdFsnY2xhc3MnXSArICcgJyA6ICcnKSArIHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICdzdHlsZScpIHtcclxuICAgICAgICAgICRlbGVtZW50LmF0dHIoJ3N0eWxlJywgJGVsZW1lbnQuYXR0cignc3R5bGUnKSArICc7JyArIHZhbHVlKTtcclxuICAgICAgICAgIGRzdFsnc3R5bGUnXSA9IChkc3RbJ3N0eWxlJ10gPyBkc3RbJ3N0eWxlJ10gKyAnOycgOiAnJykgKyB2YWx1ZTtcclxuICAgICAgICAgIC8vIGBkc3RgIHdpbGwgbmV2ZXIgY29udGFpbiBoYXNPd25Qcm9wZXJ0eSBhcyBET00gcGFyc2VyIHdvbid0IGxldCBpdC5cclxuICAgICAgICAgIC8vIFlvdSB3aWxsIGdldCBhbiBcIkludmFsaWRDaGFyYWN0ZXJFcnJvcjogRE9NIEV4Y2VwdGlvbiA1XCIgZXJyb3IgaWYgeW91XHJcbiAgICAgICAgICAvLyBoYXZlIGFuIGF0dHJpYnV0ZSBsaWtlIFwiaGFzLW93bi1wcm9wZXJ0eVwiIG9yIFwiZGF0YS1oYXMtb3duLXByb3BlcnR5XCIsIGV0Yy5cclxuICAgICAgICB9IGVsc2UgaWYgKGtleS5jaGFyQXQoMCkgIT0gJyQnICYmICFkc3QuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgZHN0W2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgIGRzdEF0dHJba2V5XSA9IHNyY0F0dHJba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBjb21waWxlVGVtcGxhdGVVcmwoZGlyZWN0aXZlcywgJGNvbXBpbGVOb2RlLCB0QXR0cnMsXHJcbiAgICAgICAgJHJvb3RFbGVtZW50LCBjaGlsZFRyYW5zY2x1ZGVGbiwgcHJlTGlua0ZucywgcG9zdExpbmtGbnMsIHByZXZpb3VzQ29tcGlsZUNvbnRleHQpIHtcclxuICAgICAgdmFyIGxpbmtRdWV1ZSA9IFtdLFxyXG4gICAgICAgICAgYWZ0ZXJUZW1wbGF0ZU5vZGVMaW5rRm4sXHJcbiAgICAgICAgICBhZnRlclRlbXBsYXRlQ2hpbGRMaW5rRm4sXHJcbiAgICAgICAgICBiZWZvcmVUZW1wbGF0ZUNvbXBpbGVOb2RlID0gJGNvbXBpbGVOb2RlWzBdLFxyXG4gICAgICAgICAgb3JpZ0FzeW5jRGlyZWN0aXZlID0gZGlyZWN0aXZlcy5zaGlmdCgpLFxyXG4gICAgICAgICAgLy8gVGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHRvIGNvcHkgYW5kIHBhdGNoIHRoZSBkaXJlY3RpdmUgc2VlbXMgd3JvbmchXHJcbiAgICAgICAgICBkZXJpdmVkU3luY0RpcmVjdGl2ZSA9IGV4dGVuZCh7fSwgb3JpZ0FzeW5jRGlyZWN0aXZlLCB7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBudWxsLCB0cmFuc2NsdWRlOiBudWxsLCByZXBsYWNlOiBudWxsLCAkJG9yaWdpbmFsRGlyZWN0aXZlOiBvcmlnQXN5bmNEaXJlY3RpdmVcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgdGVtcGxhdGVVcmwgPSAoaXNGdW5jdGlvbihvcmlnQXN5bmNEaXJlY3RpdmUudGVtcGxhdGVVcmwpKVxyXG4gICAgICAgICAgICAgID8gb3JpZ0FzeW5jRGlyZWN0aXZlLnRlbXBsYXRlVXJsKCRjb21waWxlTm9kZSwgdEF0dHJzKVxyXG4gICAgICAgICAgICAgIDogb3JpZ0FzeW5jRGlyZWN0aXZlLnRlbXBsYXRlVXJsLFxyXG4gICAgICAgICAgdGVtcGxhdGVOYW1lc3BhY2UgPSBvcmlnQXN5bmNEaXJlY3RpdmUudGVtcGxhdGVOYW1lc3BhY2U7XHJcblxyXG4gICAgICAkY29tcGlsZU5vZGUuZW1wdHkoKTtcclxuXHJcbiAgICAgICR0ZW1wbGF0ZVJlcXVlc3QoJHNjZS5nZXRUcnVzdGVkUmVzb3VyY2VVcmwodGVtcGxhdGVVcmwpKVxyXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uKGNvbnRlbnQpIHtcclxuICAgICAgICAgIHZhciBjb21waWxlTm9kZSwgdGVtcFRlbXBsYXRlQXR0cnMsICR0ZW1wbGF0ZSwgY2hpbGRCb3VuZFRyYW5zY2x1ZGVGbjtcclxuXHJcbiAgICAgICAgICBjb250ZW50ID0gZGVub3JtYWxpemVUZW1wbGF0ZShjb250ZW50KTtcclxuXHJcbiAgICAgICAgICBpZiAob3JpZ0FzeW5jRGlyZWN0aXZlLnJlcGxhY2UpIHtcclxuICAgICAgICAgICAgaWYgKGpxTGl0ZUlzVGV4dE5vZGUoY29udGVudCkpIHtcclxuICAgICAgICAgICAgICAkdGVtcGxhdGUgPSBbXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAkdGVtcGxhdGUgPSByZW1vdmVDb21tZW50cyh3cmFwVGVtcGxhdGUodGVtcGxhdGVOYW1lc3BhY2UsIHRyaW0oY29udGVudCkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb21waWxlTm9kZSA9ICR0ZW1wbGF0ZVswXTtcclxuXHJcbiAgICAgICAgICAgIGlmICgkdGVtcGxhdGUubGVuZ3RoICE9IDEgfHwgY29tcGlsZU5vZGUubm9kZVR5cGUgIT09IE5PREVfVFlQRV9FTEVNRU5UKSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgJGNvbXBpbGVNaW5FcnIoJ3RwbHJ0JyxcclxuICAgICAgICAgICAgICAgICAgXCJUZW1wbGF0ZSBmb3IgZGlyZWN0aXZlICd7MH0nIG11c3QgaGF2ZSBleGFjdGx5IG9uZSByb290IGVsZW1lbnQuIHsxfVwiLFxyXG4gICAgICAgICAgICAgICAgICBvcmlnQXN5bmNEaXJlY3RpdmUubmFtZSwgdGVtcGxhdGVVcmwpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0ZW1wVGVtcGxhdGVBdHRycyA9IHskYXR0cjoge319O1xyXG4gICAgICAgICAgICByZXBsYWNlV2l0aCgkcm9vdEVsZW1lbnQsICRjb21waWxlTm9kZSwgY29tcGlsZU5vZGUpO1xyXG4gICAgICAgICAgICB2YXIgdGVtcGxhdGVEaXJlY3RpdmVzID0gY29sbGVjdERpcmVjdGl2ZXMoY29tcGlsZU5vZGUsIFtdLCB0ZW1wVGVtcGxhdGVBdHRycyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNPYmplY3Qob3JpZ0FzeW5jRGlyZWN0aXZlLnNjb3BlKSkge1xyXG4gICAgICAgICAgICAgIG1hcmtEaXJlY3RpdmVzQXNJc29sYXRlKHRlbXBsYXRlRGlyZWN0aXZlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGlyZWN0aXZlcyA9IHRlbXBsYXRlRGlyZWN0aXZlcy5jb25jYXQoZGlyZWN0aXZlcyk7XHJcbiAgICAgICAgICAgIG1lcmdlVGVtcGxhdGVBdHRyaWJ1dGVzKHRBdHRycywgdGVtcFRlbXBsYXRlQXR0cnMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29tcGlsZU5vZGUgPSBiZWZvcmVUZW1wbGF0ZUNvbXBpbGVOb2RlO1xyXG4gICAgICAgICAgICAkY29tcGlsZU5vZGUuaHRtbChjb250ZW50KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBkaXJlY3RpdmVzLnVuc2hpZnQoZGVyaXZlZFN5bmNEaXJlY3RpdmUpO1xyXG5cclxuICAgICAgICAgIGFmdGVyVGVtcGxhdGVOb2RlTGlua0ZuID0gYXBwbHlEaXJlY3RpdmVzVG9Ob2RlKGRpcmVjdGl2ZXMsIGNvbXBpbGVOb2RlLCB0QXR0cnMsXHJcbiAgICAgICAgICAgICAgY2hpbGRUcmFuc2NsdWRlRm4sICRjb21waWxlTm9kZSwgb3JpZ0FzeW5jRGlyZWN0aXZlLCBwcmVMaW5rRm5zLCBwb3N0TGlua0ZucyxcclxuICAgICAgICAgICAgICBwcmV2aW91c0NvbXBpbGVDb250ZXh0KTtcclxuICAgICAgICAgIGZvckVhY2goJHJvb3RFbGVtZW50LCBmdW5jdGlvbihub2RlLCBpKSB7XHJcbiAgICAgICAgICAgIGlmIChub2RlID09IGNvbXBpbGVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgJHJvb3RFbGVtZW50W2ldID0gJGNvbXBpbGVOb2RlWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGFmdGVyVGVtcGxhdGVDaGlsZExpbmtGbiA9IGNvbXBpbGVOb2RlcygkY29tcGlsZU5vZGVbMF0uY2hpbGROb2RlcywgY2hpbGRUcmFuc2NsdWRlRm4pO1xyXG5cclxuICAgICAgICAgIHdoaWxlIChsaW5rUXVldWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciBzY29wZSA9IGxpbmtRdWV1ZS5zaGlmdCgpLFxyXG4gICAgICAgICAgICAgICAgYmVmb3JlVGVtcGxhdGVMaW5rTm9kZSA9IGxpbmtRdWV1ZS5zaGlmdCgpLFxyXG4gICAgICAgICAgICAgICAgbGlua1Jvb3RFbGVtZW50ID0gbGlua1F1ZXVlLnNoaWZ0KCksXHJcbiAgICAgICAgICAgICAgICBib3VuZFRyYW5zY2x1ZGVGbiA9IGxpbmtRdWV1ZS5zaGlmdCgpLFxyXG4gICAgICAgICAgICAgICAgbGlua05vZGUgPSAkY29tcGlsZU5vZGVbMF07XHJcblxyXG4gICAgICAgICAgICBpZiAoc2NvcGUuJCRkZXN0cm95ZWQpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGJlZm9yZVRlbXBsYXRlTGlua05vZGUgIT09IGJlZm9yZVRlbXBsYXRlQ29tcGlsZU5vZGUpIHtcclxuICAgICAgICAgICAgICB2YXIgb2xkQ2xhc3NlcyA9IGJlZm9yZVRlbXBsYXRlTGlua05vZGUuY2xhc3NOYW1lO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoIShwcmV2aW91c0NvbXBpbGVDb250ZXh0Lmhhc0VsZW1lbnRUcmFuc2NsdWRlRGlyZWN0aXZlICYmXHJcbiAgICAgICAgICAgICAgICAgIG9yaWdBc3luY0RpcmVjdGl2ZS5yZXBsYWNlKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaXQgd2FzIGNsb25lZCB0aGVyZWZvcmUgd2UgaGF2ZSB0byBjbG9uZSBhcyB3ZWxsLlxyXG4gICAgICAgICAgICAgICAgbGlua05vZGUgPSBqcUxpdGVDbG9uZShjb21waWxlTm9kZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJlcGxhY2VXaXRoKGxpbmtSb290RWxlbWVudCwganFMaXRlKGJlZm9yZVRlbXBsYXRlTGlua05vZGUpLCBsaW5rTm9kZSk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIENvcHkgaW4gQ1NTIGNsYXNzZXMgZnJvbSBvcmlnaW5hbCBub2RlXHJcbiAgICAgICAgICAgICAgc2FmZUFkZENsYXNzKGpxTGl0ZShsaW5rTm9kZSksIG9sZENsYXNzZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhZnRlclRlbXBsYXRlTm9kZUxpbmtGbi50cmFuc2NsdWRlT25UaGlzRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgIGNoaWxkQm91bmRUcmFuc2NsdWRlRm4gPSBjcmVhdGVCb3VuZFRyYW5zY2x1ZGVGbihzY29wZSwgYWZ0ZXJUZW1wbGF0ZU5vZGVMaW5rRm4udHJhbnNjbHVkZSwgYm91bmRUcmFuc2NsdWRlRm4pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNoaWxkQm91bmRUcmFuc2NsdWRlRm4gPSBib3VuZFRyYW5zY2x1ZGVGbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhZnRlclRlbXBsYXRlTm9kZUxpbmtGbihhZnRlclRlbXBsYXRlQ2hpbGRMaW5rRm4sIHNjb3BlLCBsaW5rTm9kZSwgJHJvb3RFbGVtZW50LFxyXG4gICAgICAgICAgICAgIGNoaWxkQm91bmRUcmFuc2NsdWRlRm4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGlua1F1ZXVlID0gbnVsbDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiBkZWxheWVkTm9kZUxpbmtGbihpZ25vcmVDaGlsZExpbmtGbiwgc2NvcGUsIG5vZGUsIHJvb3RFbGVtZW50LCBib3VuZFRyYW5zY2x1ZGVGbikge1xyXG4gICAgICAgIHZhciBjaGlsZEJvdW5kVHJhbnNjbHVkZUZuID0gYm91bmRUcmFuc2NsdWRlRm47XHJcbiAgICAgICAgaWYgKHNjb3BlLiQkZGVzdHJveWVkKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGxpbmtRdWV1ZSkge1xyXG4gICAgICAgICAgbGlua1F1ZXVlLnB1c2goc2NvcGUpO1xyXG4gICAgICAgICAgbGlua1F1ZXVlLnB1c2gobm9kZSk7XHJcbiAgICAgICAgICBsaW5rUXVldWUucHVzaChyb290RWxlbWVudCk7XHJcbiAgICAgICAgICBsaW5rUXVldWUucHVzaChjaGlsZEJvdW5kVHJhbnNjbHVkZUZuKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGFmdGVyVGVtcGxhdGVOb2RlTGlua0ZuLnRyYW5zY2x1ZGVPblRoaXNFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGNoaWxkQm91bmRUcmFuc2NsdWRlRm4gPSBjcmVhdGVCb3VuZFRyYW5zY2x1ZGVGbihzY29wZSwgYWZ0ZXJUZW1wbGF0ZU5vZGVMaW5rRm4udHJhbnNjbHVkZSwgYm91bmRUcmFuc2NsdWRlRm4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYWZ0ZXJUZW1wbGF0ZU5vZGVMaW5rRm4oYWZ0ZXJUZW1wbGF0ZUNoaWxkTGlua0ZuLCBzY29wZSwgbm9kZSwgcm9vdEVsZW1lbnQsIGNoaWxkQm91bmRUcmFuc2NsdWRlRm4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTb3J0aW5nIGZ1bmN0aW9uIGZvciBib3VuZCBkaXJlY3RpdmVzLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBieVByaW9yaXR5KGEsIGIpIHtcclxuICAgICAgdmFyIGRpZmYgPSBiLnByaW9yaXR5IC0gYS5wcmlvcml0eTtcclxuICAgICAgaWYgKGRpZmYgIT09IDApIHJldHVybiBkaWZmO1xyXG4gICAgICBpZiAoYS5uYW1lICE9PSBiLm5hbWUpIHJldHVybiAoYS5uYW1lIDwgYi5uYW1lKSA/IC0xIDogMTtcclxuICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBhc3NlcnROb0R1cGxpY2F0ZSh3aGF0LCBwcmV2aW91c0RpcmVjdGl2ZSwgZGlyZWN0aXZlLCBlbGVtZW50KSB7XHJcbiAgICAgIGlmIChwcmV2aW91c0RpcmVjdGl2ZSkge1xyXG4gICAgICAgIHRocm93ICRjb21waWxlTWluRXJyKCdtdWx0aWRpcicsICdNdWx0aXBsZSBkaXJlY3RpdmVzIFt7MH0sIHsxfV0gYXNraW5nIGZvciB7Mn0gb246IHszfScsXHJcbiAgICAgICAgICAgIHByZXZpb3VzRGlyZWN0aXZlLm5hbWUsIGRpcmVjdGl2ZS5uYW1lLCB3aGF0LCBzdGFydGluZ1RhZyhlbGVtZW50KSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dEludGVycG9sYXRlRGlyZWN0aXZlKGRpcmVjdGl2ZXMsIHRleHQpIHtcclxuICAgICAgdmFyIGludGVycG9sYXRlRm4gPSAkaW50ZXJwb2xhdGUodGV4dCwgdHJ1ZSk7XHJcbiAgICAgIGlmIChpbnRlcnBvbGF0ZUZuKSB7XHJcbiAgICAgICAgZGlyZWN0aXZlcy5wdXNoKHtcclxuICAgICAgICAgIHByaW9yaXR5OiAwLFxyXG4gICAgICAgICAgY29tcGlsZTogZnVuY3Rpb24gdGV4dEludGVycG9sYXRlQ29tcGlsZUZuKHRlbXBsYXRlTm9kZSkge1xyXG4gICAgICAgICAgICB2YXIgdGVtcGxhdGVOb2RlUGFyZW50ID0gdGVtcGxhdGVOb2RlLnBhcmVudCgpLFxyXG4gICAgICAgICAgICAgICAgaGFzQ29tcGlsZVBhcmVudCA9ICEhdGVtcGxhdGVOb2RlUGFyZW50Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIC8vIFdoZW4gdHJhbnNjbHVkaW5nIGEgdGVtcGxhdGUgdGhhdCBoYXMgYmluZGluZ3MgaW4gdGhlIHJvb3RcclxuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSBhIHBhcmVudCBhbmQgdGh1cyBuZWVkIHRvIGFkZCB0aGUgY2xhc3MgZHVyaW5nIGxpbmtpbmcgZm4uXHJcbiAgICAgICAgICAgIGlmIChoYXNDb21waWxlUGFyZW50KSBjb21waWxlLiQkYWRkQmluZGluZ0NsYXNzKHRlbXBsYXRlTm9kZVBhcmVudCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdGV4dEludGVycG9sYXRlTGlua0ZuKHNjb3BlLCBub2RlKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50KCk7XHJcbiAgICAgICAgICAgICAgaWYgKCFoYXNDb21waWxlUGFyZW50KSBjb21waWxlLiQkYWRkQmluZGluZ0NsYXNzKHBhcmVudCk7XHJcbiAgICAgICAgICAgICAgY29tcGlsZS4kJGFkZEJpbmRpbmdJbmZvKHBhcmVudCwgaW50ZXJwb2xhdGVGbi5leHByZXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgc2NvcGUuJHdhdGNoKGludGVycG9sYXRlRm4sIGZ1bmN0aW9uIGludGVycG9sYXRlRm5XYXRjaEFjdGlvbih2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZVswXS5ub2RlVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiB3cmFwVGVtcGxhdGUodHlwZSwgdGVtcGxhdGUpIHtcclxuICAgICAgdHlwZSA9IGxvd2VyY2FzZSh0eXBlIHx8ICdodG1sJyk7XHJcbiAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdzdmcnOlxyXG4gICAgICBjYXNlICdtYXRoJzpcclxuICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHdyYXBwZXIuaW5uZXJIVE1MID0gJzwnICsgdHlwZSArICc+JyArIHRlbXBsYXRlICsgJzwvJyArIHR5cGUgKyAnPic7XHJcbiAgICAgICAgcmV0dXJuIHdyYXBwZXIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRUcnVzdGVkQ29udGV4dChub2RlLCBhdHRyTm9ybWFsaXplZE5hbWUpIHtcclxuICAgICAgaWYgKGF0dHJOb3JtYWxpemVkTmFtZSA9PSBcInNyY2RvY1wiKSB7XHJcbiAgICAgICAgcmV0dXJuICRzY2UuSFRNTDtcclxuICAgICAgfVxyXG4gICAgICB2YXIgdGFnID0gbm9kZU5hbWVfKG5vZGUpO1xyXG4gICAgICAvLyBtYWN0aW9uW3hsaW5rOmhyZWZdIGNhbiBzb3VyY2UgU1ZHLiAgSXQncyBub3QgbGltaXRlZCB0byA8bWFjdGlvbj4uXHJcbiAgICAgIGlmIChhdHRyTm9ybWFsaXplZE5hbWUgPT0gXCJ4bGlua0hyZWZcIiB8fFxyXG4gICAgICAgICAgKHRhZyA9PSBcImZvcm1cIiAmJiBhdHRyTm9ybWFsaXplZE5hbWUgPT0gXCJhY3Rpb25cIikgfHxcclxuICAgICAgICAgICh0YWcgIT0gXCJpbWdcIiAmJiAoYXR0ck5vcm1hbGl6ZWROYW1lID09IFwic3JjXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOb3JtYWxpemVkTmFtZSA9PSBcIm5nU3JjXCIpKSkge1xyXG4gICAgICAgIHJldHVybiAkc2NlLlJFU09VUkNFX1VSTDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBhZGRBdHRySW50ZXJwb2xhdGVEaXJlY3RpdmUobm9kZSwgZGlyZWN0aXZlcywgdmFsdWUsIG5hbWUsIGFsbE9yTm90aGluZykge1xyXG4gICAgICB2YXIgaW50ZXJwb2xhdGVGbiA9ICRpbnRlcnBvbGF0ZSh2YWx1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgICAvLyBubyBpbnRlcnBvbGF0aW9uIGZvdW5kIC0+IGlnbm9yZVxyXG4gICAgICBpZiAoIWludGVycG9sYXRlRm4pIHJldHVybjtcclxuXHJcblxyXG4gICAgICBpZiAobmFtZSA9PT0gXCJtdWx0aXBsZVwiICYmIG5vZGVOYW1lXyhub2RlKSA9PT0gXCJzZWxlY3RcIikge1xyXG4gICAgICAgIHRocm93ICRjb21waWxlTWluRXJyKFwic2VsbXVsdGlcIixcclxuICAgICAgICAgICAgXCJCaW5kaW5nIHRvIHRoZSAnbXVsdGlwbGUnIGF0dHJpYnV0ZSBpcyBub3Qgc3VwcG9ydGVkLiBFbGVtZW50OiB7MH1cIixcclxuICAgICAgICAgICAgc3RhcnRpbmdUYWcobm9kZSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkaXJlY3RpdmVzLnB1c2goe1xyXG4gICAgICAgIHByaW9yaXR5OiAxMDAsXHJcbiAgICAgICAgY29tcGlsZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgcHJlOiBmdW5jdGlvbiBhdHRySW50ZXJwb2xhdGVQcmVMaW5rRm4oc2NvcGUsIGVsZW1lbnQsIGF0dHIpIHtcclxuICAgICAgICAgICAgICAgIHZhciAkJG9ic2VydmVycyA9IChhdHRyLiQkb2JzZXJ2ZXJzIHx8IChhdHRyLiQkb2JzZXJ2ZXJzID0ge30pKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoRVZFTlRfSEFORExFUl9BVFRSX1JFR0VYUC50ZXN0KG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRocm93ICRjb21waWxlTWluRXJyKCdub2RvbWV2ZW50cycsXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIkludGVycG9sYXRpb25zIGZvciBIVE1MIERPTSBldmVudCBhdHRyaWJ1dGVzIGFyZSBkaXNhbGxvd2VkLiAgUGxlYXNlIHVzZSB0aGUgXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwibmctIHZlcnNpb25zIChzdWNoIGFzIG5nLWNsaWNrIGluc3RlYWQgb2Ygb25jbGljaykgaW5zdGVhZC5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGF0dHJpYnV0ZSB3YXMgcmVtb3ZlZCwgdGhlbiB3ZSBhcmUgZG9uZVxyXG4gICAgICAgICAgICAgICAgaWYgKCFhdHRyW25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGludGVycG9sYXRlIGFnYWluLCBpbiBjYXNlIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaGFzIGJlZW4gdXBkYXRlZFxyXG4gICAgICAgICAgICAgICAgLy8gKGUuZy4gYnkgYW5vdGhlciBkaXJlY3RpdmUncyBjb21waWxlIGZ1bmN0aW9uKVxyXG4gICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVGbiA9ICRpbnRlcnBvbGF0ZShhdHRyW25hbWVdLCB0cnVlLCBnZXRUcnVzdGVkQ29udGV4dChub2RlLCBuYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICBBTExfT1JfTk9USElOR19BVFRSU1tuYW1lXSB8fCBhbGxPck5vdGhpbmcpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIGF0dHJpYnV0ZSB3YXMgdXBkYXRlZCBzbyB0aGF0IHRoZXJlIGlzIG5vIGludGVycG9sYXRpb24gZ29pbmcgb24gd2UgZG9uJ3Qgd2FudCB0b1xyXG4gICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgYW55IG9ic2VydmVyc1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpbnRlcnBvbGF0ZUZuKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBhdHRyIG9iamVjdCBzbyB0aGF0IGl0J3MgcmVhZHkgaW4gY2FzZSB3ZSBuZWVkIHRoZSB2YWx1ZSBmb3IgaXNvbGF0ZVxyXG4gICAgICAgICAgICAgICAgLy8gc2NvcGUgaW5pdGlhbGl6YXRpb24sIG90aGVyd2lzZSB0aGUgdmFsdWUgd291bGQgbm90IGJlIGF2YWlsYWJsZSBmcm9tIGlzb2xhdGVcclxuICAgICAgICAgICAgICAgIC8vIGRpcmVjdGl2ZSdzIGxpbmtpbmcgZm4gZHVyaW5nIGxpbmtpbmcgcGhhc2VcclxuICAgICAgICAgICAgICAgIGF0dHJbbmFtZV0gPSBpbnRlcnBvbGF0ZUZuKHNjb3BlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAoJCRvYnNlcnZlcnNbbmFtZV0gfHwgKCQkb2JzZXJ2ZXJzW25hbWVdID0gW10pKS4kJGludGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIChhdHRyLiQkb2JzZXJ2ZXJzICYmIGF0dHIuJCRvYnNlcnZlcnNbbmFtZV0uJCRzY29wZSB8fCBzY29wZSkuXHJcbiAgICAgICAgICAgICAgICAgICR3YXRjaChpbnRlcnBvbGF0ZUZuLCBmdW5jdGlvbiBpbnRlcnBvbGF0ZUZuV2F0Y2hBY3Rpb24obmV3VmFsdWUsIG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9zcGVjaWFsIGNhc2UgZm9yIGNsYXNzIGF0dHJpYnV0ZSBhZGRpdGlvbiArIHJlbW92YWxcclxuICAgICAgICAgICAgICAgICAgICAvL3NvIHRoYXQgY2xhc3MgY2hhbmdlcyBjYW4gdGFwIGludG8gdGhlIGFuaW1hdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIC8vaG9va3MgcHJvdmlkZWQgYnkgdGhlICRhbmltYXRlIHNlcnZpY2UuIEJlIHN1cmUgdG9cclxuICAgICAgICAgICAgICAgICAgICAvL3NraXAgYW5pbWF0aW9ucyB3aGVuIHRoZSBmaXJzdCBkaWdlc3Qgb2NjdXJzICh3aGVuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9ib3RoIHRoZSBuZXcgYW5kIHRoZSBvbGQgdmFsdWVzIGFyZSB0aGUgc2FtZSkgc2luY2VcclxuICAgICAgICAgICAgICAgICAgICAvL3RoZSBDU1MgY2xhc3NlcyBhcmUgdGhlIG5vbi1pbnRlcnBvbGF0ZWQgdmFsdWVzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdjbGFzcycgJiYgbmV3VmFsdWUgIT0gb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGF0dHIuJHVwZGF0ZUNsYXNzKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGF0dHIuJHNldChuYW1lLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgYSBzcGVjaWFsIGpxTGl0ZS5yZXBsYWNlV2l0aCwgd2hpY2ggY2FuIHJlcGxhY2UgaXRlbXMgd2hpY2hcclxuICAgICAqIGhhdmUgbm8gcGFyZW50cywgcHJvdmlkZWQgdGhhdCB0aGUgY29udGFpbmluZyBqcUxpdGUgY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0pxTGl0ZT19ICRyb290RWxlbWVudCBUaGUgcm9vdCBvZiB0aGUgY29tcGlsZSB0cmVlLiBVc2VkIHNvIHRoYXQgd2UgY2FuIHJlcGxhY2Ugbm9kZXNcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSByb290IG9mIHRoZSB0cmVlLlxyXG4gICAgICogQHBhcmFtIHtKcUxpdGV9IGVsZW1lbnRzVG9SZW1vdmUgVGhlIGpxTGl0ZSBlbGVtZW50IHdoaWNoIHdlIGFyZSBnb2luZyB0byByZXBsYWNlLiBXZSBrZWVwXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2hlbGwsIGJ1dCByZXBsYWNlIGl0cyBET00gbm9kZSByZWZlcmVuY2UuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5ld05vZGUgVGhlIG5ldyBET00gbm9kZS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gcmVwbGFjZVdpdGgoJHJvb3RFbGVtZW50LCBlbGVtZW50c1RvUmVtb3ZlLCBuZXdOb2RlKSB7XHJcbiAgICAgIHZhciBmaXJzdEVsZW1lbnRUb1JlbW92ZSA9IGVsZW1lbnRzVG9SZW1vdmVbMF0sXHJcbiAgICAgICAgICByZW1vdmVDb3VudCA9IGVsZW1lbnRzVG9SZW1vdmUubGVuZ3RoLFxyXG4gICAgICAgICAgcGFyZW50ID0gZmlyc3RFbGVtZW50VG9SZW1vdmUucGFyZW50Tm9kZSxcclxuICAgICAgICAgIGksIGlpO1xyXG5cclxuICAgICAgaWYgKCRyb290RWxlbWVudCkge1xyXG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gJHJvb3RFbGVtZW50Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcclxuICAgICAgICAgIGlmICgkcm9vdEVsZW1lbnRbaV0gPT0gZmlyc3RFbGVtZW50VG9SZW1vdmUpIHtcclxuICAgICAgICAgICAgJHJvb3RFbGVtZW50W2krK10gPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gaSwgajIgPSBqICsgcmVtb3ZlQ291bnQgLSAxLFxyXG4gICAgICAgICAgICAgICAgICAgICBqaiA9ICRyb290RWxlbWVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgaiA8IGpqOyBqKyssIGoyKyspIHtcclxuICAgICAgICAgICAgICBpZiAoajIgPCBqaikge1xyXG4gICAgICAgICAgICAgICAgJHJvb3RFbGVtZW50W2pdID0gJHJvb3RFbGVtZW50W2oyXTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlICRyb290RWxlbWVudFtqXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJHJvb3RFbGVtZW50Lmxlbmd0aCAtPSByZW1vdmVDb3VudCAtIDE7XHJcblxyXG4gICAgICAgICAgICAvLyBJZiB0aGUgcmVwbGFjZWQgZWxlbWVudCBpcyBhbHNvIHRoZSBqUXVlcnkgLmNvbnRleHQgdGhlbiByZXBsYWNlIGl0XHJcbiAgICAgICAgICAgIC8vIC5jb250ZXh0IGlzIGEgZGVwcmVjYXRlZCBqUXVlcnkgYXBpLCBzbyB3ZSBzaG91bGQgc2V0IGl0IG9ubHkgd2hlbiBqUXVlcnkgc2V0IGl0XHJcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jb250ZXh0L1xyXG4gICAgICAgICAgICBpZiAoJHJvb3RFbGVtZW50LmNvbnRleHQgPT09IGZpcnN0RWxlbWVudFRvUmVtb3ZlKSB7XHJcbiAgICAgICAgICAgICAgJHJvb3RFbGVtZW50LmNvbnRleHQgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQobmV3Tm9kZSwgZmlyc3RFbGVtZW50VG9SZW1vdmUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBUT0RPKHBlcmYpOiB3aGF0J3MgdGhpcyBkb2N1bWVudCBmcmFnbWVudCBmb3I/IGlzIGl0IG5lZWRlZD8gY2FuIHdlIGF0IGxlYXN0IHJldXNlIGl0P1xyXG4gICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcbiAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGZpcnN0RWxlbWVudFRvUmVtb3ZlKTtcclxuXHJcbiAgICAgIC8vIENvcHkgb3ZlciB1c2VyIGRhdGEgKHRoYXQgaW5jbHVkZXMgQW5ndWxhcidzICRzY29wZSBldGMuKS4gRG9uJ3QgY29weSBwcml2YXRlXHJcbiAgICAgIC8vIGRhdGEgaGVyZSBiZWNhdXNlIHRoZXJlJ3Mgbm8gcHVibGljIGludGVyZmFjZSBpbiBqUXVlcnkgdG8gZG8gdGhhdCBhbmQgY29weWluZyBvdmVyXHJcbiAgICAgIC8vIGV2ZW50IGxpc3RlbmVycyAod2hpY2ggaXMgdGhlIG1haW4gdXNlIG9mIHByaXZhdGUgZGF0YSkgd291bGRuJ3Qgd29yayBhbnl3YXkuXHJcbiAgICAgIGpxTGl0ZShuZXdOb2RlKS5kYXRhKGpxTGl0ZShmaXJzdEVsZW1lbnRUb1JlbW92ZSkuZGF0YSgpKTtcclxuXHJcbiAgICAgIC8vIFJlbW92ZSBkYXRhIG9mIHRoZSByZXBsYWNlZCBlbGVtZW50LiBXZSBjYW5ub3QganVzdCBjYWxsIC5yZW1vdmUoKVxyXG4gICAgICAvLyBvbiB0aGUgZWxlbWVudCBpdCBzaW5jZSB0aGF0IHdvdWxkIGRlYWxsb2NhdGUgc2NvcGUgdGhhdCBpcyBuZWVkZWRcclxuICAgICAgLy8gZm9yIHRoZSBuZXcgbm9kZS4gSW5zdGVhZCwgcmVtb3ZlIHRoZSBkYXRhIFwibWFudWFsbHlcIi5cclxuICAgICAgaWYgKCFqUXVlcnkpIHtcclxuICAgICAgICBkZWxldGUganFMaXRlLmNhY2hlW2ZpcnN0RWxlbWVudFRvUmVtb3ZlW2pxTGl0ZS5leHBhbmRvXV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8galF1ZXJ5IDIueCBkb2Vzbid0IGV4cG9zZSB0aGUgZGF0YSBzdG9yYWdlLiBVc2UgalF1ZXJ5LmNsZWFuRGF0YSB0byBjbGVhbiB1cCBhZnRlclxyXG4gICAgICAgIC8vIHRoZSByZXBsYWNlZCBlbGVtZW50LiBUaGUgY2xlYW5EYXRhIHZlcnNpb24gbW9ua2V5LXBhdGNoZWQgYnkgQW5ndWxhciB3b3VsZCBjYXVzZVxyXG4gICAgICAgIC8vIHRoZSBzY29wZSB0byBiZSB0cmFzaGVkIGFuZCB3ZSBkbyBuZWVkIHRoZSB2ZXJ5IHNhbWUgc2NvcGUgdG8gd29yayB3aXRoIHRoZSBuZXdcclxuICAgICAgICAvLyBlbGVtZW50LiBIb3dldmVyLCB3ZSBjYW5ub3QganVzdCBjYWNoZSB0aGUgbm9uLXBhdGNoZWQgdmVyc2lvbiBhbmQgdXNlIGl0IGhlcmUgYXNcclxuICAgICAgICAvLyB0aGF0IHdvdWxkIGJyZWFrIGlmIGFub3RoZXIgbGlicmFyeSBwYXRjaGVzIHRoZSBtZXRob2QgYWZ0ZXIgQW5ndWxhciBkb2VzIChvbmVcclxuICAgICAgICAvLyBleGFtcGxlIGlzIGpRdWVyeSBVSSkuIEluc3RlYWQsIHNldCBhIGZsYWcgaW5kaWNhdGluZyBzY29wZSBkZXN0cm95aW5nIHNob3VsZCBiZVxyXG4gICAgICAgIC8vIHNraXBwZWQgdGhpcyBvbmUgdGltZS5cclxuICAgICAgICBza2lwRGVzdHJveU9uTmV4dEpRdWVyeUNsZWFuRGF0YSA9IHRydWU7XHJcbiAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YShbZmlyc3RFbGVtZW50VG9SZW1vdmVdKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yICh2YXIgayA9IDEsIGtrID0gZWxlbWVudHNUb1JlbW92ZS5sZW5ndGg7IGsgPCBrazsgaysrKSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBlbGVtZW50c1RvUmVtb3ZlW2tdO1xyXG4gICAgICAgIGpxTGl0ZShlbGVtZW50KS5yZW1vdmUoKTsgLy8gbXVzdCBkbyB0aGlzIHdheSB0byBjbGVhbiB1cCBleHBhbmRvXHJcbiAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XHJcbiAgICAgICAgZGVsZXRlIGVsZW1lbnRzVG9SZW1vdmVba107XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGVsZW1lbnRzVG9SZW1vdmVbMF0gPSBuZXdOb2RlO1xyXG4gICAgICBlbGVtZW50c1RvUmVtb3ZlLmxlbmd0aCA9IDE7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIGNsb25lQW5kQW5ub3RhdGVGbihmbiwgYW5ub3RhdGlvbikge1xyXG4gICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uKCkgeyByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfSwgZm4sIGFubm90YXRpb24pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBpbnZva2VMaW5rRm4obGlua0ZuLCBzY29wZSwgJGVsZW1lbnQsIGF0dHJzLCBjb250cm9sbGVycywgdHJhbnNjbHVkZUZuKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGlua0ZuKHNjb3BlLCAkZWxlbWVudCwgYXR0cnMsIGNvbnRyb2xsZXJzLCB0cmFuc2NsdWRlRm4pO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSwgc3RhcnRpbmdUYWcoJGVsZW1lbnQpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1dO1xyXG59XHJcblxyXG52YXIgUFJFRklYX1JFR0VYUCA9IC9eKCg/Onh8ZGF0YSlbXFw6XFwtX10pL2k7XHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBhbGwgYWNjZXB0ZWQgZGlyZWN0aXZlcyBmb3JtYXQgaW50byBwcm9wZXIgZGlyZWN0aXZlIG5hbWUuXHJcbiAqIEFsbCBvZiB0aGVzZSB3aWxsIGJlY29tZSAnbXlEaXJlY3RpdmUnOlxyXG4gKiAgIG15OkRpcmVjdGl2ZVxyXG4gKiAgIG15LWRpcmVjdGl2ZVxyXG4gKiAgIHgtbXktZGlyZWN0aXZlXHJcbiAqICAgZGF0YS1teTpkaXJlY3RpdmVcclxuICpcclxuICogQWxzbyB0aGVyZSBpcyBzcGVjaWFsIGNhc2UgZm9yIE1veiBwcmVmaXggc3RhcnRpbmcgd2l0aCB1cHBlciBjYXNlIGxldHRlci5cclxuICogQHBhcmFtIG5hbWUgTmFtZSB0byBub3JtYWxpemVcclxuICovXHJcbmZ1bmN0aW9uIGRpcmVjdGl2ZU5vcm1hbGl6ZShuYW1lKSB7XHJcbiAgcmV0dXJuIGNhbWVsQ2FzZShuYW1lLnJlcGxhY2UoUFJFRklYX1JFR0VYUCwgJycpKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyB0eXBlXHJcbiAqIEBuYW1lICRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBBIHNoYXJlZCBvYmplY3QgYmV0d2VlbiBkaXJlY3RpdmUgY29tcGlsZSAvIGxpbmtpbmcgZnVuY3Rpb25zIHdoaWNoIGNvbnRhaW5zIG5vcm1hbGl6ZWQgRE9NXHJcbiAqIGVsZW1lbnQgYXR0cmlidXRlcy4gVGhlIHZhbHVlcyByZWZsZWN0IGN1cnJlbnQgYmluZGluZyBzdGF0ZSBge3sgfX1gLiBUaGUgbm9ybWFsaXphdGlvbiBpc1xyXG4gKiBuZWVkZWQgc2luY2UgYWxsIG9mIHRoZXNlIGFyZSB0cmVhdGVkIGFzIGVxdWl2YWxlbnQgaW4gQW5ndWxhcjpcclxuICpcclxuICogYGBgXHJcbiAqICAgIDxzcGFuIG5nOmJpbmQ9XCJhXCIgbmctYmluZD1cImFcIiBkYXRhLW5nLWJpbmQ9XCJhXCIgeC1uZy1iaW5kPVwiYVwiPlxyXG4gKiBgYGBcclxuICovXHJcblxyXG4vKipcclxuICogQG5nZG9jIHByb3BlcnR5XHJcbiAqIEBuYW1lICRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzIyRhdHRyXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBBIG1hcCBvZiBET00gZWxlbWVudCBhdHRyaWJ1dGUgbmFtZXMgdG8gdGhlIG5vcm1hbGl6ZWQgbmFtZS4gVGhpcyBpc1xyXG4gKiBuZWVkZWQgdG8gZG8gcmV2ZXJzZSBsb29rdXAgZnJvbSBub3JtYWxpemVkIG5hbWUgYmFjayB0byBhY3R1YWwgbmFtZS5cclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBtZXRob2RcclxuICogQG5hbWUgJGNvbXBpbGUuZGlyZWN0aXZlLkF0dHJpYnV0ZXMjJHNldFxyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogU2V0IERPTSBlbGVtZW50IGF0dHJpYnV0ZSB2YWx1ZS5cclxuICpcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTm9ybWFsaXplZCBlbGVtZW50IGF0dHJpYnV0ZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBtb2RpZnkuIFRoZSBuYW1lIGlzXHJcbiAqICAgICAgICAgIHJldmVyc2UtdHJhbnNsYXRlZCB1c2luZyB0aGUge0BsaW5rIG5nLiRjb21waWxlLmRpcmVjdGl2ZS5BdHRyaWJ1dGVzIyRhdHRyICRhdHRyfVxyXG4gKiAgICAgICAgICBwcm9wZXJ0eSB0byB0aGUgb3JpZ2luYWwgbmFtZS5cclxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHNldCB0aGUgYXR0cmlidXRlIHRvLiBUaGUgdmFsdWUgY2FuIGJlIGFuIGludGVycG9sYXRlZCBzdHJpbmcuXHJcbiAqL1xyXG5cclxuXHJcblxyXG4vKipcclxuICogQ2xvc3VyZSBjb21waWxlciB0eXBlIGluZm9ybWF0aW9uXHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gbm9kZXNldExpbmtpbmdGbihcclxuICAvKiBhbmd1bGFyLlNjb3BlICovIHNjb3BlLFxyXG4gIC8qIE5vZGVMaXN0ICovIG5vZGVMaXN0LFxyXG4gIC8qIEVsZW1lbnQgKi8gcm9vdEVsZW1lbnQsXHJcbiAgLyogZnVuY3Rpb24oRnVuY3Rpb24pICovIGJvdW5kVHJhbnNjbHVkZUZuXHJcbikge31cclxuXHJcbmZ1bmN0aW9uIGRpcmVjdGl2ZUxpbmtpbmdGbihcclxuICAvKiBub2Rlc2V0TGlua2luZ0ZuICovIG5vZGVzZXRMaW5raW5nRm4sXHJcbiAgLyogYW5ndWxhci5TY29wZSAqLyBzY29wZSxcclxuICAvKiBOb2RlICovIG5vZGUsXHJcbiAgLyogRWxlbWVudCAqLyByb290RWxlbWVudCxcclxuICAvKiBmdW5jdGlvbihGdW5jdGlvbikgKi8gYm91bmRUcmFuc2NsdWRlRm5cclxuKSB7fVxyXG5cclxuZnVuY3Rpb24gdG9rZW5EaWZmZXJlbmNlKHN0cjEsIHN0cjIpIHtcclxuICB2YXIgdmFsdWVzID0gJycsXHJcbiAgICAgIHRva2VuczEgPSBzdHIxLnNwbGl0KC9cXHMrLyksXHJcbiAgICAgIHRva2VuczIgPSBzdHIyLnNwbGl0KC9cXHMrLyk7XHJcblxyXG4gIG91dGVyOlxyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zMS5sZW5ndGg7IGkrKykge1xyXG4gICAgdmFyIHRva2VuID0gdG9rZW5zMVtpXTtcclxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgdG9rZW5zMi5sZW5ndGg7IGorKykge1xyXG4gICAgICBpZiAodG9rZW4gPT0gdG9rZW5zMltqXSkgY29udGludWUgb3V0ZXI7XHJcbiAgICB9XHJcbiAgICB2YWx1ZXMgKz0gKHZhbHVlcy5sZW5ndGggPiAwID8gJyAnIDogJycpICsgdG9rZW47XHJcbiAgfVxyXG4gIHJldHVybiB2YWx1ZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUNvbW1lbnRzKGpxTm9kZXMpIHtcclxuICBqcU5vZGVzID0ganFMaXRlKGpxTm9kZXMpO1xyXG4gIHZhciBpID0ganFOb2Rlcy5sZW5ndGg7XHJcblxyXG4gIGlmIChpIDw9IDEpIHtcclxuICAgIHJldHVybiBqcU5vZGVzO1xyXG4gIH1cclxuXHJcbiAgd2hpbGUgKGktLSkge1xyXG4gICAgdmFyIG5vZGUgPSBqcU5vZGVzW2ldO1xyXG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRV9DT01NRU5UKSB7XHJcbiAgICAgIHNwbGljZS5jYWxsKGpxTm9kZXMsIGksIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4ganFOb2RlcztcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBwcm92aWRlclxyXG4gKiBAbmFtZSAkY29udHJvbGxlclByb3ZpZGVyXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBUaGUge0BsaW5rIG5nLiRjb250cm9sbGVyICRjb250cm9sbGVyIHNlcnZpY2V9IGlzIHVzZWQgYnkgQW5ndWxhciB0byBjcmVhdGUgbmV3XHJcbiAqIGNvbnRyb2xsZXJzLlxyXG4gKlxyXG4gKiBUaGlzIHByb3ZpZGVyIGFsbG93cyBjb250cm9sbGVyIHJlZ2lzdHJhdGlvbiB2aWEgdGhlXHJcbiAqIHtAbGluayBuZy4kY29udHJvbGxlclByb3ZpZGVyI3JlZ2lzdGVyIHJlZ2lzdGVyfSBtZXRob2QuXHJcbiAqL1xyXG5mdW5jdGlvbiAkQ29udHJvbGxlclByb3ZpZGVyKCkge1xyXG4gIHZhciBjb250cm9sbGVycyA9IHt9LFxyXG4gICAgICBnbG9iYWxzID0gZmFsc2UsXHJcbiAgICAgIENOVFJMX1JFRyA9IC9eKFxcUyspKFxccythc1xccysoXFx3KykpPyQvO1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lICRjb250cm9sbGVyUHJvdmlkZXIjcmVnaXN0ZXJcclxuICAgKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IG5hbWUgQ29udHJvbGxlciBuYW1lLCBvciBhbiBvYmplY3QgbWFwIG9mIGNvbnRyb2xsZXJzIHdoZXJlIHRoZSBrZXlzIGFyZVxyXG4gICAqICAgIHRoZSBuYW1lcyBhbmQgdGhlIHZhbHVlcyBhcmUgdGhlIGNvbnN0cnVjdG9ycy5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufEFycmF5fSBjb25zdHJ1Y3RvciBDb250cm9sbGVyIGNvbnN0cnVjdG9yIGZuIChvcHRpb25hbGx5IGRlY29yYXRlZCB3aXRoIERJXHJcbiAgICogICAgYW5ub3RhdGlvbnMgaW4gdGhlIGFycmF5IG5vdGF0aW9uKS5cclxuICAgKi9cclxuICB0aGlzLnJlZ2lzdGVyID0gZnVuY3Rpb24obmFtZSwgY29uc3RydWN0b3IpIHtcclxuICAgIGFzc2VydE5vdEhhc093blByb3BlcnR5KG5hbWUsICdjb250cm9sbGVyJyk7XHJcbiAgICBpZiAoaXNPYmplY3QobmFtZSkpIHtcclxuICAgICAgZXh0ZW5kKGNvbnRyb2xsZXJzLCBuYW1lKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnRyb2xsZXJzW25hbWVdID0gY29uc3RydWN0b3I7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lICRjb250cm9sbGVyUHJvdmlkZXIjYWxsb3dHbG9iYWxzXHJcbiAgICogQGRlc2NyaXB0aW9uIElmIGNhbGxlZCwgYWxsb3dzIGAkY29udHJvbGxlcmAgdG8gZmluZCBjb250cm9sbGVyIGNvbnN0cnVjdG9ycyBvbiBgd2luZG93YFxyXG4gICAqL1xyXG4gIHRoaXMuYWxsb3dHbG9iYWxzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBnbG9iYWxzID0gdHJ1ZTtcclxuICB9O1xyXG5cclxuXHJcbiAgdGhpcy4kZ2V0ID0gWyckaW5qZWN0b3InLCAnJHdpbmRvdycsIGZ1bmN0aW9uKCRpbmplY3RvciwgJHdpbmRvdykge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5nZG9jIHNlcnZpY2VcclxuICAgICAqIEBuYW1lICRjb250cm9sbGVyXHJcbiAgICAgKiBAcmVxdWlyZXMgJGluamVjdG9yXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGNvbnN0cnVjdG9yIElmIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb24gdGhlbiBpdCdzIGNvbnNpZGVyZWQgdG8gYmUgdGhlXHJcbiAgICAgKiAgICBjb250cm9sbGVyIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLiBPdGhlcndpc2UgaXQncyBjb25zaWRlcmVkIHRvIGJlIGEgc3RyaW5nIHdoaWNoIGlzIHVzZWRcclxuICAgICAqICAgIHRvIHJldHJpZXZlIHRoZSBjb250cm9sbGVyIGNvbnN0cnVjdG9yIHVzaW5nIHRoZSBmb2xsb3dpbmcgc3RlcHM6XHJcbiAgICAgKlxyXG4gICAgICogICAgKiBjaGVjayBpZiBhIGNvbnRyb2xsZXIgd2l0aCBnaXZlbiBuYW1lIGlzIHJlZ2lzdGVyZWQgdmlhIGAkY29udHJvbGxlclByb3ZpZGVyYFxyXG4gICAgICogICAgKiBjaGVjayBpZiBldmFsdWF0aW5nIHRoZSBzdHJpbmcgb24gdGhlIGN1cnJlbnQgc2NvcGUgcmV0dXJucyBhIGNvbnN0cnVjdG9yXHJcbiAgICAgKiAgICAqIGlmICRjb250cm9sbGVyUHJvdmlkZXIjYWxsb3dHbG9iYWxzLCBjaGVjayBgd2luZG93W2NvbnN0cnVjdG9yXWAgb24gdGhlIGdsb2JhbFxyXG4gICAgICogICAgICBgd2luZG93YCBvYmplY3QgKG5vdCByZWNvbW1lbmRlZClcclxuICAgICAqXHJcbiAgICAgKiAgICBUaGUgc3RyaW5nIGNhbiB1c2UgdGhlIGBjb250cm9sbGVyIGFzIHByb3BlcnR5YCBzeW50YXgsIHdoZXJlIHRoZSBjb250cm9sbGVyIGluc3RhbmNlIGlzIHB1Ymxpc2hlZFxyXG4gICAgICogICAgYXMgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBvbiB0aGUgYHNjb3BlYDsgdGhlIGBzY29wZWAgbXVzdCBiZSBpbmplY3RlZCBpbnRvIGBsb2NhbHNgIHBhcmFtIGZvciB0aGlzXHJcbiAgICAgKiAgICB0byB3b3JrIGNvcnJlY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gbG9jYWxzIEluamVjdGlvbiBsb2NhbHMgZm9yIENvbnRyb2xsZXIuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEluc3RhbmNlIG9mIGdpdmVuIGNvbnRyb2xsZXIuXHJcbiAgICAgKlxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiBgJGNvbnRyb2xsZXJgIHNlcnZpY2UgaXMgcmVzcG9uc2libGUgZm9yIGluc3RhbnRpYXRpbmcgY29udHJvbGxlcnMuXHJcbiAgICAgKlxyXG4gICAgICogSXQncyBqdXN0IGEgc2ltcGxlIGNhbGwgdG8ge0BsaW5rIGF1dG8uJGluamVjdG9yICRpbmplY3Rvcn0sIGJ1dCBleHRyYWN0ZWQgaW50b1xyXG4gICAgICogYSBzZXJ2aWNlLCBzbyB0aGF0IG9uZSBjYW4gb3ZlcnJpZGUgdGhpcyBzZXJ2aWNlIHdpdGggW0JDIHZlcnNpb25dKGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzE2NDk3ODgpLlxyXG4gICAgICovXHJcbiAgICByZXR1cm4gZnVuY3Rpb24oZXhwcmVzc2lvbiwgbG9jYWxzLCBsYXRlciwgaWRlbnQpIHtcclxuICAgICAgLy8gUFJJVkFURSBBUEk6XHJcbiAgICAgIC8vICAgcGFyYW0gYGxhdGVyYCAtLS0gaW5kaWNhdGVzIHRoYXQgdGhlIGNvbnRyb2xsZXIncyBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIGF0IGEgbGF0ZXIgdGltZS5cclxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBJZiB0cnVlLCAkY29udHJvbGxlciB3aWxsIGFsbG9jYXRlIHRoZSBvYmplY3Qgd2l0aCB0aGUgY29ycmVjdFxyXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZSBjaGFpbiwgYnV0IHdpbGwgbm90IGludm9rZSB0aGUgY29udHJvbGxlciB1bnRpbCBhIHJldHVybmVkXHJcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgaXMgaW52b2tlZC5cclxuICAgICAgLy8gICBwYXJhbSBgaWRlbnRgIC0tLSBBbiBvcHRpb25hbCBsYWJlbCB3aGljaCBvdmVycmlkZXMgdGhlIGxhYmVsIHBhcnNlZCBmcm9tIHRoZSBjb250cm9sbGVyXHJcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiwgaWYgYW55LlxyXG4gICAgICB2YXIgaW5zdGFuY2UsIG1hdGNoLCBjb25zdHJ1Y3RvciwgaWRlbnRpZmllcjtcclxuICAgICAgbGF0ZXIgPSBsYXRlciA9PT0gdHJ1ZTtcclxuICAgICAgaWYgKGlkZW50ICYmIGlzU3RyaW5nKGlkZW50KSkge1xyXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzU3RyaW5nKGV4cHJlc3Npb24pKSB7XHJcbiAgICAgICAgbWF0Y2ggPSBleHByZXNzaW9uLm1hdGNoKENOVFJMX1JFRyksXHJcbiAgICAgICAgY29uc3RydWN0b3IgPSBtYXRjaFsxXSxcclxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllciB8fCBtYXRjaFszXTtcclxuICAgICAgICBleHByZXNzaW9uID0gY29udHJvbGxlcnMuaGFzT3duUHJvcGVydHkoY29uc3RydWN0b3IpXHJcbiAgICAgICAgICAgID8gY29udHJvbGxlcnNbY29uc3RydWN0b3JdXHJcbiAgICAgICAgICAgIDogZ2V0dGVyKGxvY2Fscy4kc2NvcGUsIGNvbnN0cnVjdG9yLCB0cnVlKSB8fFxyXG4gICAgICAgICAgICAgICAgKGdsb2JhbHMgPyBnZXR0ZXIoJHdpbmRvdywgY29uc3RydWN0b3IsIHRydWUpIDogdW5kZWZpbmVkKTtcclxuXHJcbiAgICAgICAgYXNzZXJ0QXJnRm4oZXhwcmVzc2lvbiwgY29uc3RydWN0b3IsIHRydWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobGF0ZXIpIHtcclxuICAgICAgICAvLyBJbnN0YW50aWF0ZSBjb250cm9sbGVyIGxhdGVyOlxyXG4gICAgICAgIC8vIFRoaXMgbWFjaGluZXJ5IGlzIHVzZWQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBvYmplY3QgYmVmb3JlIGNhbGxpbmcgdGhlXHJcbiAgICAgICAgLy8gY29udHJvbGxlcidzIGNvbnN0cnVjdG9yIGl0c2VsZi5cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vIFRoaXMgYWxsb3dzIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGNvbnRyb2xsZXIgYmVmb3JlIHRoZSBjb25zdHJ1Y3RvciBpc1xyXG4gICAgICAgIC8vIGludm9rZWQuIFByaW1hcmlseSwgdGhpcyBpcyB1c2VkIGZvciBpc29sYXRlIHNjb3BlIGJpbmRpbmdzIGluICRjb21waWxlLlxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gVGhpcyBmZWF0dXJlIGlzIG5vdCBpbnRlbmRlZCBmb3IgdXNlIGJ5IGFwcGxpY2F0aW9ucywgYW5kIGlzIHRodXMgbm90IGRvY3VtZW50ZWRcclxuICAgICAgICAvLyBwdWJsaWNseS5cclxuICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSBmdW5jdGlvbigpIHt9O1xyXG4gICAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IChpc0FycmF5KGV4cHJlc3Npb24pID9cclxuICAgICAgICAgIGV4cHJlc3Npb25bZXhwcmVzc2lvbi5sZW5ndGggLSAxXSA6IGV4cHJlc3Npb24pLnByb3RvdHlwZTtcclxuICAgICAgICBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xyXG5cclxuICAgICAgICBpZiAoaWRlbnRpZmllcikge1xyXG4gICAgICAgICAgYWRkSWRlbnRpZmllcihsb2NhbHMsIGlkZW50aWZpZXIsIGluc3RhbmNlLCBjb25zdHJ1Y3RvciB8fCBleHByZXNzaW9uLm5hbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICRpbmplY3Rvci5pbnZva2UoZXhwcmVzc2lvbiwgaW5zdGFuY2UsIGxvY2FscywgY29uc3RydWN0b3IpO1xyXG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcclxuICAgICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXJcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaW5zdGFuY2UgPSAkaW5qZWN0b3IuaW5zdGFudGlhdGUoZXhwcmVzc2lvbiwgbG9jYWxzLCBjb25zdHJ1Y3Rvcik7XHJcblxyXG4gICAgICBpZiAoaWRlbnRpZmllcikge1xyXG4gICAgICAgIGFkZElkZW50aWZpZXIobG9jYWxzLCBpZGVudGlmaWVyLCBpbnN0YW5jZSwgY29uc3RydWN0b3IgfHwgZXhwcmVzc2lvbi5uYW1lKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGluc3RhbmNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiBhZGRJZGVudGlmaWVyKGxvY2FscywgaWRlbnRpZmllciwgaW5zdGFuY2UsIG5hbWUpIHtcclxuICAgICAgaWYgKCEobG9jYWxzICYmIGlzT2JqZWN0KGxvY2Fscy4kc2NvcGUpKSkge1xyXG4gICAgICAgIHRocm93IG1pbkVycignJGNvbnRyb2xsZXInKSgnbm9zY3AnLFxyXG4gICAgICAgICAgXCJDYW5ub3QgZXhwb3J0IGNvbnRyb2xsZXIgJ3swfScgYXMgJ3sxfSchIE5vICRzY29wZSBvYmplY3QgcHJvdmlkZWQgdmlhIGBsb2NhbHNgLlwiLFxyXG4gICAgICAgICAgbmFtZSwgaWRlbnRpZmllcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxvY2Fscy4kc2NvcGVbaWRlbnRpZmllcl0gPSBpbnN0YW5jZTtcclxuICAgIH1cclxuICB9XTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBzZXJ2aWNlXHJcbiAqIEBuYW1lICRkb2N1bWVudFxyXG4gKiBAcmVxdWlyZXMgJHdpbmRvd1xyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQSB7QGxpbmsgYW5ndWxhci5lbGVtZW50IGpRdWVyeSBvciBqcUxpdGV9IHdyYXBwZXIgZm9yIHRoZSBicm93c2VyJ3MgYHdpbmRvdy5kb2N1bWVudGAgb2JqZWN0LlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICA8ZXhhbXBsZSBtb2R1bGU9XCJkb2N1bWVudEV4YW1wbGVcIj5cclxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cclxuICAgICAgICAgPHA+JGRvY3VtZW50IHRpdGxlOiA8YiBuZy1iaW5kPVwidGl0bGVcIj48L2I+PC9wPlxyXG4gICAgICAgICA8cD53aW5kb3cuZG9jdW1lbnQgdGl0bGU6IDxiIG5nLWJpbmQ9XCJ3aW5kb3dUaXRsZVwiPjwvYj48L3A+XHJcbiAgICAgICA8L2Rpdj5cclxuICAgICA8L2ZpbGU+XHJcbiAgICAgPGZpbGUgbmFtZT1cInNjcmlwdC5qc1wiPlxyXG4gICAgICAgYW5ndWxhci5tb2R1bGUoJ2RvY3VtZW50RXhhbXBsZScsIFtdKVxyXG4gICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsICckZG9jdW1lbnQnLCBmdW5jdGlvbigkc2NvcGUsICRkb2N1bWVudCkge1xyXG4gICAgICAgICAgICRzY29wZS50aXRsZSA9ICRkb2N1bWVudFswXS50aXRsZTtcclxuICAgICAgICAgICAkc2NvcGUud2luZG93VGl0bGUgPSBhbmd1bGFyLmVsZW1lbnQod2luZG93LmRvY3VtZW50KVswXS50aXRsZTtcclxuICAgICAgICAgfV0pO1xyXG4gICAgIDwvZmlsZT5cclxuICAgPC9leGFtcGxlPlxyXG4gKi9cclxuZnVuY3Rpb24gJERvY3VtZW50UHJvdmlkZXIoKSB7XHJcbiAgdGhpcy4kZ2V0ID0gWyckd2luZG93JywgZnVuY3Rpb24od2luZG93KSB7XHJcbiAgICByZXR1cm4ganFMaXRlKHdpbmRvdy5kb2N1bWVudCk7XHJcbiAgfV07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2Mgc2VydmljZVxyXG4gKiBAbmFtZSAkZXhjZXB0aW9uSGFuZGxlclxyXG4gKiBAcmVxdWlyZXMgbmcuJGxvZ1xyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQW55IHVuY2F1Z2h0IGV4Y2VwdGlvbiBpbiBhbmd1bGFyIGV4cHJlc3Npb25zIGlzIGRlbGVnYXRlZCB0byB0aGlzIHNlcnZpY2UuXHJcbiAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNpbXBseSBkZWxlZ2F0ZXMgdG8gYCRsb2cuZXJyb3JgIHdoaWNoIGxvZ3MgaXQgaW50b1xyXG4gKiB0aGUgYnJvd3NlciBjb25zb2xlLlxyXG4gKlxyXG4gKiBJbiB1bml0IHRlc3RzLCBpZiBgYW5ndWxhci1tb2Nrcy5qc2AgaXMgbG9hZGVkLCB0aGlzIHNlcnZpY2UgaXMgb3ZlcnJpZGRlbiBieVxyXG4gKiB7QGxpbmsgbmdNb2NrLiRleGNlcHRpb25IYW5kbGVyIG1vY2sgJGV4Y2VwdGlvbkhhbmRsZXJ9IHdoaWNoIGFpZHMgaW4gdGVzdGluZy5cclxuICpcclxuICogIyMgRXhhbXBsZTpcclxuICpcclxuICogYGBganNcclxuICogICBhbmd1bGFyLm1vZHVsZSgnZXhjZXB0aW9uT3ZlcnJpZGUnLCBbXSkuZmFjdG9yeSgnJGV4Y2VwdGlvbkhhbmRsZXInLCBmdW5jdGlvbigpIHtcclxuICogICAgIHJldHVybiBmdW5jdGlvbihleGNlcHRpb24sIGNhdXNlKSB7XHJcbiAqICAgICAgIGV4Y2VwdGlvbi5tZXNzYWdlICs9ICcgKGNhdXNlZCBieSBcIicgKyBjYXVzZSArICdcIiknO1xyXG4gKiAgICAgICB0aHJvdyBleGNlcHRpb247XHJcbiAqICAgICB9O1xyXG4gKiAgIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogVGhpcyBleGFtcGxlIHdpbGwgb3ZlcnJpZGUgdGhlIG5vcm1hbCBhY3Rpb24gb2YgYCRleGNlcHRpb25IYW5kbGVyYCwgdG8gbWFrZSBhbmd1bGFyXHJcbiAqIGV4Y2VwdGlvbnMgZmFpbCBoYXJkIHdoZW4gdGhleSBoYXBwZW4sIGluc3RlYWQgb2YganVzdCBsb2dnaW5nIHRvIHRoZSBjb25zb2xlLlxyXG4gKlxyXG4gKiA8aHIgLz5cclxuICogTm90ZSwgdGhhdCBjb2RlIGV4ZWN1dGVkIGluIGV2ZW50LWxpc3RlbmVycyAoZXZlbiB0aG9zZSByZWdpc3RlcmVkIHVzaW5nIGpxTGl0ZSdzIGBvbmAvYGJpbmRgXHJcbiAqIG1ldGhvZHMpIGRvZXMgbm90IGRlbGVnYXRlIGV4Y2VwdGlvbnMgdG8gdGhlIHtAbGluayBuZy4kZXhjZXB0aW9uSGFuZGxlciAkZXhjZXB0aW9uSGFuZGxlcn1cclxuICogKHVubGVzcyBleGVjdXRlZCBkdXJpbmcgYSBkaWdlc3QpLlxyXG4gKlxyXG4gKiBJZiB5b3Ugd2lzaCwgeW91IGNhbiBtYW51YWxseSBkZWxlZ2F0ZSBleGNlcHRpb25zLCBlLmcuXHJcbiAqIGB0cnkgeyAuLi4gfSBjYXRjaChlKSB7ICRleGNlcHRpb25IYW5kbGVyKGUpOyB9YFxyXG4gKlxyXG4gKiBAcGFyYW0ge0Vycm9yfSBleGNlcHRpb24gRXhjZXB0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXJyb3IuXHJcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY2F1c2Ugb3B0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbnRleHQgaW4gd2hpY2hcclxuICogICAgICAgdGhlIGVycm9yIHdhcyB0aHJvd24uXHJcbiAqXHJcbiAqL1xyXG5mdW5jdGlvbiAkRXhjZXB0aW9uSGFuZGxlclByb3ZpZGVyKCkge1xyXG4gIHRoaXMuJGdldCA9IFsnJGxvZycsIGZ1bmN0aW9uKCRsb2cpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbihleGNlcHRpb24sIGNhdXNlKSB7XHJcbiAgICAgICRsb2cuZXJyb3IuYXBwbHkoJGxvZywgYXJndW1lbnRzKTtcclxuICAgIH07XHJcbiAgfV07XHJcbn1cclxuXHJcbnZhciBBUFBMSUNBVElPTl9KU09OID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xyXG52YXIgQ09OVEVOVF9UWVBFX0FQUExJQ0FUSU9OX0pTT04gPSB7J0NvbnRlbnQtVHlwZSc6IEFQUExJQ0FUSU9OX0pTT04gKyAnO2NoYXJzZXQ9dXRmLTgnfTtcclxudmFyIEpTT05fU1RBUlQgPSAvXlxccyooXFxbfFxce1teXFx7XSkvO1xyXG52YXIgSlNPTl9FTkQgPSAvW1xcfVxcXV1cXHMqJC87XHJcbnZhciBKU09OX1BST1RFQ1RJT05fUFJFRklYID0gL15cXClcXF1cXH0nLD9cXG4vO1xyXG5cclxuZnVuY3Rpb24gZGVmYXVsdEh0dHBSZXNwb25zZVRyYW5zZm9ybShkYXRhLCBoZWFkZXJzKSB7XHJcbiAgaWYgKGlzU3RyaW5nKGRhdGEpKSB7XHJcbiAgICAvLyBzdHJpcCBqc29uIHZ1bG5lcmFiaWxpdHkgcHJvdGVjdGlvbiBwcmVmaXhcclxuICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoSlNPTl9QUk9URUNUSU9OX1BSRUZJWCwgJycpO1xyXG4gICAgdmFyIGNvbnRlbnRUeXBlID0gaGVhZGVycygnQ29udGVudC1UeXBlJyk7XHJcbiAgICBpZiAoKGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlLmluZGV4T2YoQVBQTElDQVRJT05fSlNPTikgPT09IDAgJiYgZGF0YS50cmltKCkpIHx8XHJcbiAgICAgICAgKEpTT05fU1RBUlQudGVzdChkYXRhKSAmJiBKU09OX0VORC50ZXN0KGRhdGEpKSkge1xyXG4gICAgICBkYXRhID0gZnJvbUpzb24oZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBkYXRhO1xyXG59XHJcblxyXG4vKipcclxuICogUGFyc2UgaGVhZGVycyBpbnRvIGtleSB2YWx1ZSBvYmplY3RcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlcnMgUmF3IGhlYWRlcnMgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge09iamVjdH0gUGFyc2VkIGhlYWRlcnMgYXMga2V5IHZhbHVlIG9iamVjdFxyXG4gKi9cclxuZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcclxuICB2YXIgcGFyc2VkID0ge30sIGtleSwgdmFsLCBpO1xyXG5cclxuICBpZiAoIWhlYWRlcnMpIHJldHVybiBwYXJzZWQ7XHJcblxyXG4gIGZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uKGxpbmUpIHtcclxuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcclxuICAgIGtleSA9IGxvd2VyY2FzZSh0cmltKGxpbmUuc3Vic3RyKDAsIGkpKSk7XHJcbiAgICB2YWwgPSB0cmltKGxpbmUuc3Vic3RyKGkgKyAxKSk7XHJcblxyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gcGFyc2VkO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byBwYXJzZWQgaGVhZGVycy5cclxuICpcclxuICogSGVhZGVycyBhcmUgbGF6eSBwYXJzZWQgd2hlbiBmaXJzdCByZXF1ZXN0ZWQuXHJcbiAqIEBzZWUgcGFyc2VIZWFkZXJzXHJcbiAqXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xPYmplY3QpfSBoZWFkZXJzIEhlYWRlcnMgdG8gcHJvdmlkZSBhY2Nlc3MgdG8uXHJcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmc9KX0gUmV0dXJucyBhIGdldHRlciBmdW5jdGlvbiB3aGljaCBpZiBjYWxsZWQgd2l0aDpcclxuICpcclxuICogICAtIGlmIGNhbGxlZCB3aXRoIHNpbmdsZSBhbiBhcmd1bWVudCByZXR1cm5zIGEgc2luZ2xlIGhlYWRlciB2YWx1ZSBvciBudWxsXHJcbiAqICAgLSBpZiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMgcmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBhbGwgaGVhZGVycy5cclxuICovXHJcbmZ1bmN0aW9uIGhlYWRlcnNHZXR0ZXIoaGVhZGVycykge1xyXG4gIHZhciBoZWFkZXJzT2JqID0gaXNPYmplY3QoaGVhZGVycykgPyBoZWFkZXJzIDogdW5kZWZpbmVkO1xyXG5cclxuICByZXR1cm4gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgaWYgKCFoZWFkZXJzT2JqKSBoZWFkZXJzT2JqID0gIHBhcnNlSGVhZGVycyhoZWFkZXJzKTtcclxuXHJcbiAgICBpZiAobmFtZSkge1xyXG4gICAgICByZXR1cm4gaGVhZGVyc09ialtsb3dlcmNhc2UobmFtZSldIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlYWRlcnNPYmo7XHJcbiAgfTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBDaGFpbiBhbGwgZ2l2ZW4gZnVuY3Rpb25zXHJcbiAqXHJcbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgYm90aCByZXF1ZXN0IGFuZCByZXNwb25zZSB0cmFuc2Zvcm1pbmdcclxuICpcclxuICogQHBhcmFtIHsqfSBkYXRhIERhdGEgdG8gdHJhbnNmb3JtLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZz0pfSBoZWFkZXJzIEh0dHAgaGVhZGVycyBnZXR0ZXIgZm4uXHJcbiAqIEBwYXJhbSB7KEZ1bmN0aW9ufEFycmF5LjxGdW5jdGlvbj4pfSBmbnMgRnVuY3Rpb24gb3IgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLlxyXG4gKiBAcmV0dXJucyB7Kn0gVHJhbnNmb3JtZWQgZGF0YS5cclxuICovXHJcbmZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7XHJcbiAgaWYgKGlzRnVuY3Rpb24oZm5zKSlcclxuICAgIHJldHVybiBmbnMoZGF0YSwgaGVhZGVycyk7XHJcblxyXG4gIGZvckVhY2goZm5zLCBmdW5jdGlvbihmbikge1xyXG4gICAgZGF0YSA9IGZuKGRhdGEsIGhlYWRlcnMpO1xyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gZGF0YTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU3VjY2VzcyhzdGF0dXMpIHtcclxuICByZXR1cm4gMjAwIDw9IHN0YXR1cyAmJiBzdGF0dXMgPCAzMDA7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIHByb3ZpZGVyXHJcbiAqIEBuYW1lICRodHRwUHJvdmlkZXJcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFVzZSBgJGh0dHBQcm92aWRlcmAgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSB7QGxpbmsgbmcuJGh0dHAgJGh0dHB9IHNlcnZpY2UuXHJcbiAqICovXHJcbmZ1bmN0aW9uICRIdHRwUHJvdmlkZXIoKSB7XHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIHByb3BlcnR5XHJcbiAgICogQG5hbWUgJGh0dHBQcm92aWRlciNkZWZhdWx0c1xyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqXHJcbiAgICogT2JqZWN0IGNvbnRhaW5pbmcgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB7QGxpbmsgbmcuJGh0dHAgJGh0dHB9IHJlcXVlc3RzLlxyXG4gICAqXHJcbiAgICogLSAqKmBkZWZhdWx0cy54c3JmQ29va2llTmFtZWAqKiAtIHtzdHJpbmd9IC0gTmFtZSBvZiBjb29raWUgY29udGFpbmluZyB0aGUgWFNSRiB0b2tlbi5cclxuICAgKiBEZWZhdWx0cyB2YWx1ZSBpcyBgJ1hTUkYtVE9LRU4nYC5cclxuICAgKlxyXG4gICAqIC0gKipgZGVmYXVsdHMueHNyZkhlYWRlck5hbWVgKiogLSB7c3RyaW5nfSAtIE5hbWUgb2YgSFRUUCBoZWFkZXIgdG8gcG9wdWxhdGUgd2l0aCB0aGVcclxuICAgKiBYU1JGIHRva2VuLiBEZWZhdWx0cyB2YWx1ZSBpcyBgJ1gtWFNSRi1UT0tFTidgLlxyXG4gICAqXHJcbiAgICogLSAqKmBkZWZhdWx0cy5oZWFkZXJzYCoqIC0ge09iamVjdH0gLSBEZWZhdWx0IGhlYWRlcnMgZm9yIGFsbCAkaHR0cCByZXF1ZXN0cy5cclxuICAgKiBSZWZlciB0byB7QGxpbmsgbmcuJGh0dHAjc2V0dGluZy1odHRwLWhlYWRlcnMgJGh0dHB9IGZvciBkb2N1bWVudGF0aW9uIG9uXHJcbiAgICogc2V0dGluZyBkZWZhdWx0IGhlYWRlcnMuXHJcbiAgICogICAgIC0gKipgZGVmYXVsdHMuaGVhZGVycy5jb21tb25gKipcclxuICAgKiAgICAgLSAqKmBkZWZhdWx0cy5oZWFkZXJzLnBvc3RgKipcclxuICAgKiAgICAgLSAqKmBkZWZhdWx0cy5oZWFkZXJzLnB1dGAqKlxyXG4gICAqICAgICAtICoqYGRlZmF1bHRzLmhlYWRlcnMucGF0Y2hgKipcclxuICAgKiovXHJcbiAgdmFyIGRlZmF1bHRzID0gdGhpcy5kZWZhdWx0cyA9IHtcclxuICAgIC8vIHRyYW5zZm9ybSBpbmNvbWluZyByZXNwb25zZSBkYXRhXHJcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogW2RlZmF1bHRIdHRwUmVzcG9uc2VUcmFuc2Zvcm1dLFxyXG5cclxuICAgIC8vIHRyYW5zZm9ybSBvdXRnb2luZyByZXF1ZXN0IGRhdGFcclxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbihkKSB7XHJcbiAgICAgIHJldHVybiBpc09iamVjdChkKSAmJiAhaXNGaWxlKGQpICYmICFpc0Jsb2IoZCkgPyB0b0pzb24oZCkgOiBkO1xyXG4gICAgfV0sXHJcblxyXG4gICAgLy8gZGVmYXVsdCBoZWFkZXJzXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIGNvbW1vbjoge1xyXG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xyXG4gICAgICB9LFxyXG4gICAgICBwb3N0OiAgIHNoYWxsb3dDb3B5KENPTlRFTlRfVFlQRV9BUFBMSUNBVElPTl9KU09OKSxcclxuICAgICAgcHV0OiAgICBzaGFsbG93Q29weShDT05URU5UX1RZUEVfQVBQTElDQVRJT05fSlNPTiksXHJcbiAgICAgIHBhdGNoOiAgc2hhbGxvd0NvcHkoQ09OVEVOVF9UWVBFX0FQUExJQ0FUSU9OX0pTT04pXHJcbiAgICB9LFxyXG5cclxuICAgIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXHJcbiAgICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTidcclxuICB9O1xyXG5cclxuICB2YXIgdXNlQXBwbHlBc3luYyA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSAkaHR0cFByb3ZpZGVyI3VzZUFwcGx5QXN5bmNcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKlxyXG4gICAqIENvbmZpZ3VyZSAkaHR0cCBzZXJ2aWNlIHRvIGNvbWJpbmUgcHJvY2Vzc2luZyBvZiBtdWx0aXBsZSBodHRwIHJlc3BvbnNlcyByZWNlaXZlZCBhdCBhcm91bmRcclxuICAgKiB0aGUgc2FtZSB0aW1lIHZpYSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkYXBwbHlBc3luYyAkcm9vdFNjb3BlLiRhcHBseUFzeW5jfS4gVGhpcyBjYW4gcmVzdWx0IGluXHJcbiAgICogc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgZm9yIGJpZ2dlciBhcHBsaWNhdGlvbnMgdGhhdCBtYWtlIG1hbnkgSFRUUCByZXF1ZXN0c1xyXG4gICAqIGNvbmN1cnJlbnRseSAoY29tbW9uIGR1cmluZyBhcHBsaWNhdGlvbiBib290c3RyYXApLlxyXG4gICAqXHJcbiAgICogRGVmYXVsdHMgdG8gZmFsc2UuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmVkLCByZXR1cm5zIHRoZSBjdXJyZW50IGNvbmZpZ3VyZWQgdmFsdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW49fSB2YWx1ZSBJZiB0cnVlLCB3aGVuIHJlcXVlc3RzIGFyZSBsb2FkZWQsIHRoZXkgd2lsbCBzY2hlZHVsZSBhIGRlZmVycmVkXHJcbiAgICogICAgXCJhcHBseVwiIG9uIHRoZSBuZXh0IHRpY2ssIGdpdmluZyB0aW1lIGZvciBzdWJzZXF1ZW50IHJlcXVlc3RzIGluIGEgcm91Z2hseSB+MTBtcyB3aW5kb3dcclxuICAgKiAgICB0byBsb2FkIGFuZCBzaGFyZSB0aGUgc2FtZSBkaWdlc3QgY3ljbGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbnxPYmplY3R9IElmIGEgdmFsdWUgaXMgc3BlY2lmaWVkLCByZXR1cm5zIHRoZSAkaHR0cFByb3ZpZGVyIGZvciBjaGFpbmluZy5cclxuICAgKiAgICBvdGhlcndpc2UsIHJldHVybnMgdGhlIGN1cnJlbnQgY29uZmlndXJlZCB2YWx1ZS5cclxuICAgKiovXHJcbiAgdGhpcy51c2VBcHBseUFzeW5jID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIGlmIChpc0RlZmluZWQodmFsdWUpKSB7XHJcbiAgICAgIHVzZUFwcGx5QXN5bmMgPSAhIXZhbHVlO1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHJldHVybiB1c2VBcHBseUFzeW5jO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBwcm9wZXJ0eVxyXG4gICAqIEBuYW1lICRodHRwUHJvdmlkZXIjaW50ZXJjZXB0b3JzXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICpcclxuICAgKiBBcnJheSBjb250YWluaW5nIHNlcnZpY2UgZmFjdG9yaWVzIGZvciBhbGwgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzIHtAbGluayBuZy4kaHR0cCAkaHR0cH1cclxuICAgKiBwcmUtcHJvY2Vzc2luZyBvZiByZXF1ZXN0IG9yIHBvc3Rwcm9jZXNzaW5nIG9mIHJlc3BvbnNlcy5cclxuICAgKlxyXG4gICAqIFRoZXNlIHNlcnZpY2UgZmFjdG9yaWVzIGFyZSBvcmRlcmVkIGJ5IHJlcXVlc3QsIGkuZS4gdGhleSBhcmUgYXBwbGllZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcclxuICAgKiBhcnJheSwgb24gcmVxdWVzdCwgYnV0IHJldmVyc2Ugb3JkZXIsIG9uIHJlc3BvbnNlLlxyXG4gICAqXHJcbiAgICoge0BsaW5rIG5nLiRodHRwI2ludGVyY2VwdG9ycyBJbnRlcmNlcHRvcnMgZGV0YWlsZWQgaW5mb31cclxuICAgKiovXHJcbiAgdmFyIGludGVyY2VwdG9yRmFjdG9yaWVzID0gdGhpcy5pbnRlcmNlcHRvcnMgPSBbXTtcclxuXHJcbiAgdGhpcy4kZ2V0ID0gWyckaHR0cEJhY2tlbmQnLCAnJGJyb3dzZXInLCAnJGNhY2hlRmFjdG9yeScsICckcm9vdFNjb3BlJywgJyRxJywgJyRpbmplY3RvcicsXHJcbiAgICAgIGZ1bmN0aW9uKCRodHRwQmFja2VuZCwgJGJyb3dzZXIsICRjYWNoZUZhY3RvcnksICRyb290U2NvcGUsICRxLCAkaW5qZWN0b3IpIHtcclxuXHJcbiAgICB2YXIgZGVmYXVsdENhY2hlID0gJGNhY2hlRmFjdG9yeSgnJGh0dHAnKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludGVyY2VwdG9ycyBzdG9yZWQgaW4gcmV2ZXJzZSBvcmRlci4gSW5uZXIgaW50ZXJjZXB0b3JzIGJlZm9yZSBvdXRlciBpbnRlcmNlcHRvcnMuXHJcbiAgICAgKiBUaGUgcmV2ZXJzYWwgaXMgbmVlZGVkIHNvIHRoYXQgd2UgY2FuIGJ1aWxkIHVwIHRoZSBpbnRlcmNlcHRpb24gY2hhaW4gYXJvdW5kIHRoZVxyXG4gICAgICogc2VydmVyIHJlcXVlc3QuXHJcbiAgICAgKi9cclxuICAgIHZhciByZXZlcnNlZEludGVyY2VwdG9ycyA9IFtdO1xyXG5cclxuICAgIGZvckVhY2goaW50ZXJjZXB0b3JGYWN0b3JpZXMsIGZ1bmN0aW9uKGludGVyY2VwdG9yRmFjdG9yeSkge1xyXG4gICAgICByZXZlcnNlZEludGVyY2VwdG9ycy51bnNoaWZ0KGlzU3RyaW5nKGludGVyY2VwdG9yRmFjdG9yeSlcclxuICAgICAgICAgID8gJGluamVjdG9yLmdldChpbnRlcmNlcHRvckZhY3RvcnkpIDogJGluamVjdG9yLmludm9rZShpbnRlcmNlcHRvckZhY3RvcnkpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5nZG9jIHNlcnZpY2VcclxuICAgICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICAgKiBAbmFtZSAkaHR0cFxyXG4gICAgICogQHJlcXVpcmVzIG5nLiRodHRwQmFja2VuZFxyXG4gICAgICogQHJlcXVpcmVzICRjYWNoZUZhY3RvcnlcclxuICAgICAqIEByZXF1aXJlcyAkcm9vdFNjb3BlXHJcbiAgICAgKiBAcmVxdWlyZXMgJHFcclxuICAgICAqIEByZXF1aXJlcyAkaW5qZWN0b3JcclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFRoZSBgJGh0dHBgIHNlcnZpY2UgaXMgYSBjb3JlIEFuZ3VsYXIgc2VydmljZSB0aGF0IGZhY2lsaXRhdGVzIGNvbW11bmljYXRpb24gd2l0aCB0aGUgcmVtb3RlXHJcbiAgICAgKiBIVFRQIHNlcnZlcnMgdmlhIHRoZSBicm93c2VyJ3MgW1hNTEh0dHBSZXF1ZXN0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi94bWxodHRwcmVxdWVzdClcclxuICAgICAqIG9iamVjdCBvciB2aWEgW0pTT05QXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0pTT05QKS5cclxuICAgICAqXHJcbiAgICAgKiBGb3IgdW5pdCB0ZXN0aW5nIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBgJGh0dHBgIHNlcnZpY2UsIHNlZVxyXG4gICAgICoge0BsaW5rIG5nTW9jay4kaHR0cEJhY2tlbmQgJGh0dHBCYWNrZW5kIG1vY2t9LlxyXG4gICAgICpcclxuICAgICAqIEZvciBhIGhpZ2hlciBsZXZlbCBvZiBhYnN0cmFjdGlvbiwgcGxlYXNlIGNoZWNrIG91dCB0aGUge0BsaW5rIG5nUmVzb3VyY2UuJHJlc291cmNlXHJcbiAgICAgKiAkcmVzb3VyY2V9IHNlcnZpY2UuXHJcbiAgICAgKlxyXG4gICAgICogVGhlICRodHRwIEFQSSBpcyBiYXNlZCBvbiB0aGUge0BsaW5rIG5nLiRxIGRlZmVycmVkL3Byb21pc2UgQVBJc30gZXhwb3NlZCBieVxyXG4gICAgICogdGhlICRxIHNlcnZpY2UuIFdoaWxlIGZvciBzaW1wbGUgdXNhZ2UgcGF0dGVybnMgdGhpcyBkb2Vzbid0IG1hdHRlciBtdWNoLCBmb3IgYWR2YW5jZWQgdXNhZ2VcclxuICAgICAqIGl0IGlzIGltcG9ydGFudCB0byBmYW1pbGlhcml6ZSB5b3Vyc2VsZiB3aXRoIHRoZXNlIEFQSXMgYW5kIHRoZSBndWFyYW50ZWVzIHRoZXkgcHJvdmlkZS5cclxuICAgICAqXHJcbiAgICAgKlxyXG4gICAgICogIyMgR2VuZXJhbCB1c2FnZVxyXG4gICAgICogVGhlIGAkaHR0cGAgc2VydmljZSBpcyBhIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50IOKAlCBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IOKAlFxyXG4gICAgICogdGhhdCBpcyB1c2VkIHRvIGdlbmVyYXRlIGFuIEhUVFAgcmVxdWVzdCBhbmQgcmV0dXJucyAgYSB7QGxpbmsgbmcuJHEgcHJvbWlzZX1cclxuICAgICAqIHdpdGggdHdvICRodHRwIHNwZWNpZmljIG1ldGhvZHM6IGBzdWNjZXNzYCBhbmQgYGVycm9yYC5cclxuICAgICAqXHJcbiAgICAgKiBgYGBqc1xyXG4gICAgICogICAvLyBTaW1wbGUgR0VUIHJlcXVlc3QgZXhhbXBsZSA6XHJcbiAgICAgKiAgICRodHRwLmdldCgnL3NvbWVVcmwnKS5cclxuICAgICAqICAgICBzdWNjZXNzKGZ1bmN0aW9uKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgKiAgICAgICAvLyB0aGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGFzeW5jaHJvbm91c2x5XHJcbiAgICAgKiAgICAgICAvLyB3aGVuIHRoZSByZXNwb25zZSBpcyBhdmFpbGFibGVcclxuICAgICAqICAgICB9KS5cclxuICAgICAqICAgICBlcnJvcihmdW5jdGlvbihkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICogICAgICAgLy8gY2FsbGVkIGFzeW5jaHJvbm91c2x5IGlmIGFuIGVycm9yIG9jY3Vyc1xyXG4gICAgICogICAgICAgLy8gb3Igc2VydmVyIHJldHVybnMgcmVzcG9uc2Ugd2l0aCBhbiBlcnJvciBzdGF0dXMuXHJcbiAgICAgKiAgICAgfSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBgYGBqc1xyXG4gICAgICogICAvLyBTaW1wbGUgUE9TVCByZXF1ZXN0IGV4YW1wbGUgKHBhc3NpbmcgZGF0YSkgOlxyXG4gICAgICogICAkaHR0cC5wb3N0KCcvc29tZVVybCcsIHttc2c6J2hlbGxvIHdvcmQhJ30pLlxyXG4gICAgICogICAgIHN1Y2Nlc3MoZnVuY3Rpb24oZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAqICAgICAgIC8vIHRoaXMgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgYXN5bmNocm9ub3VzbHlcclxuICAgICAqICAgICAgIC8vIHdoZW4gdGhlIHJlc3BvbnNlIGlzIGF2YWlsYWJsZVxyXG4gICAgICogICAgIH0pLlxyXG4gICAgICogICAgIGVycm9yKGZ1bmN0aW9uKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgKiAgICAgICAvLyBjYWxsZWQgYXN5bmNocm9ub3VzbHkgaWYgYW4gZXJyb3Igb2NjdXJzXHJcbiAgICAgKiAgICAgICAvLyBvciBzZXJ2ZXIgcmV0dXJucyByZXNwb25zZSB3aXRoIGFuIGVycm9yIHN0YXR1cy5cclxuICAgICAqICAgICB9KTtcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqXHJcbiAgICAgKiBTaW5jZSB0aGUgcmV0dXJuZWQgdmFsdWUgb2YgY2FsbGluZyB0aGUgJGh0dHAgZnVuY3Rpb24gaXMgYSBgcHJvbWlzZWAsIHlvdSBjYW4gYWxzbyB1c2VcclxuICAgICAqIHRoZSBgdGhlbmAgbWV0aG9kIHRvIHJlZ2lzdGVyIGNhbGxiYWNrcywgYW5kIHRoZXNlIGNhbGxiYWNrcyB3aWxsIHJlY2VpdmUgYSBzaW5nbGUgYXJndW1lbnQg4oCTXHJcbiAgICAgKiBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNwb25zZS4gU2VlIHRoZSBBUEkgc2lnbmF0dXJlIGFuZCB0eXBlIGluZm8gYmVsb3cgZm9yIG1vcmVcclxuICAgICAqIGRldGFpbHMuXHJcbiAgICAgKlxyXG4gICAgICogQSByZXNwb25zZSBzdGF0dXMgY29kZSBiZXR3ZWVuIDIwMCBhbmQgMjk5IGlzIGNvbnNpZGVyZWQgYSBzdWNjZXNzIHN0YXR1cyBhbmRcclxuICAgICAqIHdpbGwgcmVzdWx0IGluIHRoZSBzdWNjZXNzIGNhbGxiYWNrIGJlaW5nIGNhbGxlZC4gTm90ZSB0aGF0IGlmIHRoZSByZXNwb25zZSBpcyBhIHJlZGlyZWN0LFxyXG4gICAgICogWE1MSHR0cFJlcXVlc3Qgd2lsbCB0cmFuc3BhcmVudGx5IGZvbGxvdyBpdCwgbWVhbmluZyB0aGF0IHRoZSBlcnJvciBjYWxsYmFjayB3aWxsIG5vdCBiZVxyXG4gICAgICogY2FsbGVkIGZvciBzdWNoIHJlc3BvbnNlcy5cclxuICAgICAqXHJcbiAgICAgKiAjIyBXcml0aW5nIFVuaXQgVGVzdHMgdGhhdCB1c2UgJGh0dHBcclxuICAgICAqIFdoZW4gdW5pdCB0ZXN0aW5nICh1c2luZyB7QGxpbmsgbmdNb2NrIG5nTW9ja30pLCBpdCBpcyBuZWNlc3NhcnkgdG8gY2FsbFxyXG4gICAgICoge0BsaW5rIG5nTW9jay4kaHR0cEJhY2tlbmQjZmx1c2ggJGh0dHBCYWNrZW5kLmZsdXNoKCl9IHRvIGZsdXNoIGVhY2ggcGVuZGluZ1xyXG4gICAgICogcmVxdWVzdCB1c2luZyB0cmFpbmVkIHJlc3BvbnNlcy5cclxuICAgICAqXHJcbiAgICAgKiBgYGBcclxuICAgICAqICRodHRwQmFja2VuZC5leHBlY3RHRVQoLi4uKTtcclxuICAgICAqICRodHRwLmdldCguLi4pO1xyXG4gICAgICogJGh0dHBCYWNrZW5kLmZsdXNoKCk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiAjIyBTaG9ydGN1dCBtZXRob2RzXHJcbiAgICAgKlxyXG4gICAgICogU2hvcnRjdXQgbWV0aG9kcyBhcmUgYWxzbyBhdmFpbGFibGUuIEFsbCBzaG9ydGN1dCBtZXRob2RzIHJlcXVpcmUgcGFzc2luZyBpbiB0aGUgVVJMLCBhbmRcclxuICAgICAqIHJlcXVlc3QgZGF0YSBtdXN0IGJlIHBhc3NlZCBpbiBmb3IgUE9TVC9QVVQgcmVxdWVzdHMuXHJcbiAgICAgKlxyXG4gICAgICogYGBganNcclxuICAgICAqICAgJGh0dHAuZ2V0KCcvc29tZVVybCcpLnN1Y2Nlc3Moc3VjY2Vzc0NhbGxiYWNrKTtcclxuICAgICAqICAgJGh0dHAucG9zdCgnL3NvbWVVcmwnLCBkYXRhKS5zdWNjZXNzKHN1Y2Nlc3NDYWxsYmFjayk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBDb21wbGV0ZSBsaXN0IG9mIHNob3J0Y3V0IG1ldGhvZHM6XHJcbiAgICAgKlxyXG4gICAgICogLSB7QGxpbmsgbmcuJGh0dHAjZ2V0ICRodHRwLmdldH1cclxuICAgICAqIC0ge0BsaW5rIG5nLiRodHRwI2hlYWQgJGh0dHAuaGVhZH1cclxuICAgICAqIC0ge0BsaW5rIG5nLiRodHRwI3Bvc3QgJGh0dHAucG9zdH1cclxuICAgICAqIC0ge0BsaW5rIG5nLiRodHRwI3B1dCAkaHR0cC5wdXR9XHJcbiAgICAgKiAtIHtAbGluayBuZy4kaHR0cCNkZWxldGUgJGh0dHAuZGVsZXRlfVxyXG4gICAgICogLSB7QGxpbmsgbmcuJGh0dHAjanNvbnAgJGh0dHAuanNvbnB9XHJcbiAgICAgKiAtIHtAbGluayBuZy4kaHR0cCNwYXRjaCAkaHR0cC5wYXRjaH1cclxuICAgICAqXHJcbiAgICAgKlxyXG4gICAgICogIyMgU2V0dGluZyBIVFRQIEhlYWRlcnNcclxuICAgICAqXHJcbiAgICAgKiBUaGUgJGh0dHAgc2VydmljZSB3aWxsIGF1dG9tYXRpY2FsbHkgYWRkIGNlcnRhaW4gSFRUUCBoZWFkZXJzIHRvIGFsbCByZXF1ZXN0cy4gVGhlc2UgZGVmYXVsdHNcclxuICAgICAqIGNhbiBiZSBmdWxseSBjb25maWd1cmVkIGJ5IGFjY2Vzc2luZyB0aGUgYCRodHRwUHJvdmlkZXIuZGVmYXVsdHMuaGVhZGVyc2AgY29uZmlndXJhdGlvblxyXG4gICAgICogb2JqZWN0LCB3aGljaCBjdXJyZW50bHkgY29udGFpbnMgdGhpcyBkZWZhdWx0IGNvbmZpZ3VyYXRpb246XHJcbiAgICAgKlxyXG4gICAgICogLSBgJGh0dHBQcm92aWRlci5kZWZhdWx0cy5oZWFkZXJzLmNvbW1vbmAgKGhlYWRlcnMgdGhhdCBhcmUgY29tbW9uIGZvciBhbGwgcmVxdWVzdHMpOlxyXG4gICAgICogICAtIGBBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICogLyAqYFxyXG4gICAgICogLSBgJGh0dHBQcm92aWRlci5kZWZhdWx0cy5oZWFkZXJzLnBvc3RgOiAoaGVhZGVyIGRlZmF1bHRzIGZvciBQT1NUIHJlcXVlc3RzKVxyXG4gICAgICogICAtIGBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25gXHJcbiAgICAgKiAtIGAkaHR0cFByb3ZpZGVyLmRlZmF1bHRzLmhlYWRlcnMucHV0YCAoaGVhZGVyIGRlZmF1bHRzIGZvciBQVVQgcmVxdWVzdHMpXHJcbiAgICAgKiAgIC0gYENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbmBcclxuICAgICAqXHJcbiAgICAgKiBUbyBhZGQgb3Igb3ZlcndyaXRlIHRoZXNlIGRlZmF1bHRzLCBzaW1wbHkgYWRkIG9yIHJlbW92ZSBhIHByb3BlcnR5IGZyb20gdGhlc2UgY29uZmlndXJhdGlvblxyXG4gICAgICogb2JqZWN0cy4gVG8gYWRkIGhlYWRlcnMgZm9yIGFuIEhUVFAgbWV0aG9kIG90aGVyIHRoYW4gUE9TVCBvciBQVVQsIHNpbXBseSBhZGQgYSBuZXcgb2JqZWN0XHJcbiAgICAgKiB3aXRoIHRoZSBsb3dlcmNhc2VkIEhUVFAgbWV0aG9kIG5hbWUgYXMgdGhlIGtleSwgZS5nLlxyXG4gICAgICogYCRodHRwUHJvdmlkZXIuZGVmYXVsdHMuaGVhZGVycy5nZXQgPSB7ICdNeS1IZWFkZXInIDogJ3ZhbHVlJyB9LlxyXG4gICAgICpcclxuICAgICAqIFRoZSBkZWZhdWx0cyBjYW4gYWxzbyBiZSBzZXQgYXQgcnVudGltZSB2aWEgdGhlIGAkaHR0cC5kZWZhdWx0c2Agb2JqZWN0IGluIHRoZSBzYW1lXHJcbiAgICAgKiBmYXNoaW9uLiBGb3IgZXhhbXBsZTpcclxuICAgICAqXHJcbiAgICAgKiBgYGBcclxuICAgICAqIG1vZHVsZS5ydW4oZnVuY3Rpb24oJGh0dHApIHtcclxuICAgICAqICAgJGh0dHAuZGVmYXVsdHMuaGVhZGVycy5jb21tb24uQXV0aG9yaXphdGlvbiA9ICdCYXNpYyBZbVZsY0RwaWIyOXcnXHJcbiAgICAgKiB9KTtcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqIEluIGFkZGl0aW9uLCB5b3UgY2FuIHN1cHBseSBhIGBoZWFkZXJzYCBwcm9wZXJ0eSBpbiB0aGUgY29uZmlnIG9iamVjdCBwYXNzZWQgd2hlblxyXG4gICAgICogY2FsbGluZyBgJGh0dHAoY29uZmlnKWAsIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdHMgd2l0aG91dCBjaGFuZ2luZyB0aGVtIGdsb2JhbGx5LlxyXG4gICAgICpcclxuICAgICAqXHJcbiAgICAgKiAjIyBUcmFuc2Zvcm1pbmcgUmVxdWVzdHMgYW5kIFJlc3BvbnNlc1xyXG4gICAgICpcclxuICAgICAqIEJvdGggcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBjYW4gYmUgdHJhbnNmb3JtZWQgdXNpbmcgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb25zOiBgdHJhbnNmb3JtUmVxdWVzdGBcclxuICAgICAqIGFuZCBgdHJhbnNmb3JtUmVzcG9uc2VgLiBUaGVzZSBwcm9wZXJ0aWVzIGNhbiBiZSBhIHNpbmdsZSBmdW5jdGlvbiB0aGF0IHJldHVybnNcclxuICAgICAqIHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSAoYHtmdW5jdGlvbihkYXRhLCBoZWFkZXJzR2V0dGVyKWApIG9yIGFuIGFycmF5IG9mIHN1Y2ggdHJhbnNmb3JtYXRpb24gZnVuY3Rpb25zLFxyXG4gICAgICogd2hpY2ggYWxsb3dzIHlvdSB0byBgcHVzaGAgb3IgYHVuc2hpZnRgIGEgbmV3IHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9uIGludG8gdGhlIHRyYW5zZm9ybWF0aW9uIGNoYWluLlxyXG4gICAgICpcclxuICAgICAqICMjIyBEZWZhdWx0IFRyYW5zZm9ybWF0aW9uc1xyXG4gICAgICpcclxuICAgICAqIFRoZSBgJGh0dHBQcm92aWRlcmAgcHJvdmlkZXIgYW5kIGAkaHR0cGAgc2VydmljZSBleHBvc2UgYGRlZmF1bHRzLnRyYW5zZm9ybVJlcXVlc3RgIGFuZFxyXG4gICAgICogYGRlZmF1bHRzLnRyYW5zZm9ybVJlc3BvbnNlYCBwcm9wZXJ0aWVzLiBJZiBhIHJlcXVlc3QgZG9lcyBub3QgcHJvdmlkZSBpdHMgb3duIHRyYW5zZm9ybWF0aW9uc1xyXG4gICAgICogdGhlbiB0aGVzZSB3aWxsIGJlIGFwcGxpZWQuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBhdWdtZW50IG9yIHJlcGxhY2UgdGhlIGRlZmF1bHQgdHJhbnNmb3JtYXRpb25zIGJ5IG1vZGlmeWluZyB0aGVzZSBwcm9wZXJ0aWVzIGJ5IGFkZGluZyB0byBvclxyXG4gICAgICogcmVwbGFjaW5nIHRoZSBhcnJheS5cclxuICAgICAqXHJcbiAgICAgKiBBbmd1bGFyIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZGVmYXVsdCB0cmFuc2Zvcm1hdGlvbnM6XHJcbiAgICAgKlxyXG4gICAgICogUmVxdWVzdCB0cmFuc2Zvcm1hdGlvbnMgKGAkaHR0cFByb3ZpZGVyLmRlZmF1bHRzLnRyYW5zZm9ybVJlcXVlc3RgIGFuZCBgJGh0dHAuZGVmYXVsdHMudHJhbnNmb3JtUmVxdWVzdGApOlxyXG4gICAgICpcclxuICAgICAqIC0gSWYgdGhlIGBkYXRhYCBwcm9wZXJ0eSBvZiB0aGUgcmVxdWVzdCBjb25maWd1cmF0aW9uIG9iamVjdCBjb250YWlucyBhbiBvYmplY3QsIHNlcmlhbGl6ZSBpdFxyXG4gICAgICogICBpbnRvIEpTT04gZm9ybWF0LlxyXG4gICAgICpcclxuICAgICAqIFJlc3BvbnNlIHRyYW5zZm9ybWF0aW9ucyAoYCRodHRwUHJvdmlkZXIuZGVmYXVsdHMudHJhbnNmb3JtUmVzcG9uc2VgIGFuZCBgJGh0dHAuZGVmYXVsdHMudHJhbnNmb3JtUmVzcG9uc2VgKTpcclxuICAgICAqXHJcbiAgICAgKiAgLSBJZiBYU1JGIHByZWZpeCBpcyBkZXRlY3RlZCwgc3RyaXAgaXQgKHNlZSBTZWN1cml0eSBDb25zaWRlcmF0aW9ucyBzZWN0aW9uIGJlbG93KS5cclxuICAgICAqICAtIElmIEpTT04gcmVzcG9uc2UgaXMgZGV0ZWN0ZWQsIGRlc2VyaWFsaXplIGl0IHVzaW5nIGEgSlNPTiBwYXJzZXIuXHJcbiAgICAgKlxyXG4gICAgICpcclxuICAgICAqICMjIyBPdmVycmlkaW5nIHRoZSBEZWZhdWx0IFRyYW5zZm9ybWF0aW9ucyBQZXIgUmVxdWVzdFxyXG4gICAgICpcclxuICAgICAqIElmIHlvdSB3aXNoIG92ZXJyaWRlIHRoZSByZXF1ZXN0L3Jlc3BvbnNlIHRyYW5zZm9ybWF0aW9ucyBvbmx5IGZvciBhIHNpbmdsZSByZXF1ZXN0IHRoZW4gcHJvdmlkZVxyXG4gICAgICogYHRyYW5zZm9ybVJlcXVlc3RgIGFuZC9vciBgdHJhbnNmb3JtUmVzcG9uc2VgIHByb3BlcnRpZXMgb24gdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHBhc3NlZFxyXG4gICAgICogaW50byBgJGh0dHBgLlxyXG4gICAgICpcclxuICAgICAqIE5vdGUgdGhhdCBpZiB5b3UgcHJvdmlkZSB0aGVzZSBwcm9wZXJ0aWVzIG9uIHRoZSBjb25maWcgb2JqZWN0IHRoZSBkZWZhdWx0IHRyYW5zZm9ybWF0aW9ucyB3aWxsIGJlXHJcbiAgICAgKiBvdmVyd3JpdHRlbi4gSWYgeW91IHdpc2ggdG8gYXVnbWVudCB0aGUgZGVmYXVsdCB0cmFuc2Zvcm1hdGlvbnMgdGhlbiB5b3UgbXVzdCBpbmNsdWRlIHRoZW0gaW4geW91clxyXG4gICAgICogbG9jYWwgdHJhbnNmb3JtYXRpb24gYXJyYXkuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGZvbGxvd2luZyBjb2RlIGRlbW9uc3RyYXRlcyBhZGRpbmcgYSBuZXcgcmVzcG9uc2UgdHJhbnNmb3JtYXRpb24gdG8gYmUgcnVuIGFmdGVyIHRoZSBkZWZhdWx0IHJlc3BvbnNlXHJcbiAgICAgKiB0cmFuc2Zvcm1hdGlvbnMgaGF2ZSBiZWVuIHJ1bi5cclxuICAgICAqXHJcbiAgICAgKiBgYGBqc1xyXG4gICAgICogZnVuY3Rpb24gYXBwZW5kVHJhbnNmb3JtKGRlZmF1bHRzLCB0cmFuc2Zvcm0pIHtcclxuICAgICAqXHJcbiAgICAgKiAgIC8vIFdlIGNhbid0IGd1YXJhbnRlZSB0aGF0IHRoZSBkZWZhdWx0IHRyYW5zZm9ybWF0aW9uIGlzIGFuIGFycmF5XHJcbiAgICAgKiAgIGRlZmF1bHRzID0gYW5ndWxhci5pc0FycmF5KGRlZmF1bHRzKSA/IGRlZmF1bHRzIDogW2RlZmF1bHRzXTtcclxuICAgICAqXHJcbiAgICAgKiAgIC8vIEFwcGVuZCB0aGUgbmV3IHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBkZWZhdWx0c1xyXG4gICAgICogICByZXR1cm4gZGVmYXVsdHMuY29uY2F0KHRyYW5zZm9ybSk7XHJcbiAgICAgKiB9XHJcbiAgICAgKlxyXG4gICAgICogJGh0dHAoe1xyXG4gICAgICogICB1cmw6ICcuLi4nLFxyXG4gICAgICogICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICogICB0cmFuc2Zvcm1SZXNwb25zZTogYXBwZW5kVHJhbnNmb3JtKCRodHRwLmRlZmF1bHRzLnRyYW5zZm9ybVJlc3BvbnNlLCBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICogICAgIHJldHVybiBkb1RyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICAgKiAgIH0pXHJcbiAgICAgKiB9KTtcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqXHJcbiAgICAgKiAjIyBDYWNoaW5nXHJcbiAgICAgKlxyXG4gICAgICogVG8gZW5hYmxlIGNhY2hpbmcsIHNldCB0aGUgcmVxdWVzdCBjb25maWd1cmF0aW9uIGBjYWNoZWAgcHJvcGVydHkgdG8gYHRydWVgICh0byB1c2UgZGVmYXVsdFxyXG4gICAgICogY2FjaGUpIG9yIHRvIGEgY3VzdG9tIGNhY2hlIG9iamVjdCAoYnVpbHQgd2l0aCB7QGxpbmsgbmcuJGNhY2hlRmFjdG9yeSBgJGNhY2hlRmFjdG9yeWB9KS5cclxuICAgICAqIFdoZW4gdGhlIGNhY2hlIGlzIGVuYWJsZWQsIGAkaHR0cGAgc3RvcmVzIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdGhlIHNwZWNpZmllZFxyXG4gICAgICogY2FjaGUuIFRoZSBuZXh0IHRpbWUgdGhlIHNhbWUgcmVxdWVzdCBpcyBtYWRlLCB0aGUgcmVzcG9uc2UgaXMgc2VydmVkIGZyb20gdGhlIGNhY2hlIHdpdGhvdXRcclxuICAgICAqIHNlbmRpbmcgYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuXHJcbiAgICAgKlxyXG4gICAgICogTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIHJlc3BvbnNlIGlzIHNlcnZlZCBmcm9tIGNhY2hlLCBkZWxpdmVyeSBvZiB0aGUgZGF0YSBpcyBhc3luY2hyb25vdXMgaW5cclxuICAgICAqIHRoZSBzYW1lIHdheSB0aGF0IHJlYWwgcmVxdWVzdHMgYXJlLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBHRVQgcmVxdWVzdHMgZm9yIHRoZSBzYW1lIFVSTCB0aGF0IHNob3VsZCBiZSBjYWNoZWQgdXNpbmcgdGhlIHNhbWVcclxuICAgICAqIGNhY2hlLCBidXQgdGhlIGNhY2hlIGlzIG5vdCBwb3B1bGF0ZWQgeWV0LCBvbmx5IG9uZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgd2lsbCBiZSBtYWRlIGFuZFxyXG4gICAgICogdGhlIHJlbWFpbmluZyByZXF1ZXN0cyB3aWxsIGJlIGZ1bGZpbGxlZCB1c2luZyB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgZmlyc3QgcmVxdWVzdC5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIGNoYW5nZSB0aGUgZGVmYXVsdCBjYWNoZSB0byBhIG5ldyBvYmplY3QgKGJ1aWx0IHdpdGhcclxuICAgICAqIHtAbGluayBuZy4kY2FjaGVGYWN0b3J5IGAkY2FjaGVGYWN0b3J5YH0pIGJ5IHVwZGF0aW5nIHRoZVxyXG4gICAgICoge0BsaW5rIG5nLiRodHRwI2RlZmF1bHRzIGAkaHR0cC5kZWZhdWx0cy5jYWNoZWB9IHByb3BlcnR5LiBBbGwgcmVxdWVzdHMgd2hvIHNldFxyXG4gICAgICogdGhlaXIgYGNhY2hlYCBwcm9wZXJ0eSB0byBgdHJ1ZWAgd2lsbCBub3cgdXNlIHRoaXMgY2FjaGUgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIElmIHlvdSBzZXQgdGhlIGRlZmF1bHQgY2FjaGUgdG8gYGZhbHNlYCB0aGVuIG9ubHkgcmVxdWVzdHMgdGhhdCBzcGVjaWZ5IHRoZWlyIG93biBjdXN0b21cclxuICAgICAqIGNhY2hlIG9iamVjdCB3aWxsIGJlIGNhY2hlZC5cclxuICAgICAqXHJcbiAgICAgKiAjIyBJbnRlcmNlcHRvcnNcclxuICAgICAqXHJcbiAgICAgKiBCZWZvcmUgeW91IHN0YXJ0IGNyZWF0aW5nIGludGVyY2VwdG9ycywgYmUgc3VyZSB0byB1bmRlcnN0YW5kIHRoZVxyXG4gICAgICoge0BsaW5rIG5nLiRxICRxIGFuZCBkZWZlcnJlZC9wcm9taXNlIEFQSXN9LlxyXG4gICAgICpcclxuICAgICAqIEZvciBwdXJwb3NlcyBvZiBnbG9iYWwgZXJyb3IgaGFuZGxpbmcsIGF1dGhlbnRpY2F0aW9uLCBvciBhbnkga2luZCBvZiBzeW5jaHJvbm91cyBvclxyXG4gICAgICogYXN5bmNocm9ub3VzIHByZS1wcm9jZXNzaW5nIG9mIHJlcXVlc3Qgb3IgcG9zdHByb2Nlc3Npbmcgb2YgcmVzcG9uc2VzLCBpdCBpcyBkZXNpcmFibGUgdG8gYmVcclxuICAgICAqIGFibGUgdG8gaW50ZXJjZXB0IHJlcXVlc3RzIGJlZm9yZSB0aGV5IGFyZSBoYW5kZWQgdG8gdGhlIHNlcnZlciBhbmRcclxuICAgICAqIHJlc3BvbnNlcyBiZWZvcmUgdGhleSBhcmUgaGFuZGVkIG92ZXIgdG8gdGhlIGFwcGxpY2F0aW9uIGNvZGUgdGhhdFxyXG4gICAgICogaW5pdGlhdGVkIHRoZXNlIHJlcXVlc3RzLiBUaGUgaW50ZXJjZXB0b3JzIGxldmVyYWdlIHRoZSB7QGxpbmsgbmcuJHFcclxuICAgICAqIHByb21pc2UgQVBJc30gdG8gZnVsZmlsbCB0aGlzIG5lZWQgZm9yIGJvdGggc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyBwcmUtcHJvY2Vzc2luZy5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgaW50ZXJjZXB0b3JzIGFyZSBzZXJ2aWNlIGZhY3RvcmllcyB0aGF0IGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIGAkaHR0cFByb3ZpZGVyYCBieVxyXG4gICAgICogYWRkaW5nIHRoZW0gdG8gdGhlIGAkaHR0cFByb3ZpZGVyLmludGVyY2VwdG9yc2AgYXJyYXkuIFRoZSBmYWN0b3J5IGlzIGNhbGxlZCBhbmRcclxuICAgICAqIGluamVjdGVkIHdpdGggZGVwZW5kZW5jaWVzIChpZiBzcGVjaWZpZWQpIGFuZCByZXR1cm5zIHRoZSBpbnRlcmNlcHRvci5cclxuICAgICAqXHJcbiAgICAgKiBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIGludGVyY2VwdG9ycyAoYW5kIHR3byBraW5kcyBvZiByZWplY3Rpb24gaW50ZXJjZXB0b3JzKTpcclxuICAgICAqXHJcbiAgICAgKiAgICogYHJlcXVlc3RgOiBpbnRlcmNlcHRvcnMgZ2V0IGNhbGxlZCB3aXRoIGEgaHR0cCBgY29uZmlnYCBvYmplY3QuIFRoZSBmdW5jdGlvbiBpcyBmcmVlIHRvXHJcbiAgICAgKiAgICAgbW9kaWZ5IHRoZSBgY29uZmlnYCBvYmplY3Qgb3IgY3JlYXRlIGEgbmV3IG9uZS4gVGhlIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiB0aGUgYGNvbmZpZ2BcclxuICAgICAqICAgICBvYmplY3QgZGlyZWN0bHksIG9yIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSBgY29uZmlnYCBvciBhIG5ldyBgY29uZmlnYCBvYmplY3QuXHJcbiAgICAgKiAgICogYHJlcXVlc3RFcnJvcmA6IGludGVyY2VwdG9yIGdldHMgY2FsbGVkIHdoZW4gYSBwcmV2aW91cyBpbnRlcmNlcHRvciB0aHJldyBhbiBlcnJvciBvclxyXG4gICAgICogICAgIHJlc29sdmVkIHdpdGggYSByZWplY3Rpb24uXHJcbiAgICAgKiAgICogYHJlc3BvbnNlYDogaW50ZXJjZXB0b3JzIGdldCBjYWxsZWQgd2l0aCBodHRwIGByZXNwb25zZWAgb2JqZWN0LiBUaGUgZnVuY3Rpb24gaXMgZnJlZSB0b1xyXG4gICAgICogICAgIG1vZGlmeSB0aGUgYHJlc3BvbnNlYCBvYmplY3Qgb3IgY3JlYXRlIGEgbmV3IG9uZS4gVGhlIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiB0aGUgYHJlc3BvbnNlYFxyXG4gICAgICogICAgIG9iamVjdCBkaXJlY3RseSwgb3IgYXMgYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIGByZXNwb25zZWAgb3IgYSBuZXcgYHJlc3BvbnNlYCBvYmplY3QuXHJcbiAgICAgKiAgICogYHJlc3BvbnNlRXJyb3JgOiBpbnRlcmNlcHRvciBnZXRzIGNhbGxlZCB3aGVuIGEgcHJldmlvdXMgaW50ZXJjZXB0b3IgdGhyZXcgYW4gZXJyb3Igb3JcclxuICAgICAqICAgICByZXNvbHZlZCB3aXRoIGEgcmVqZWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqXHJcbiAgICAgKiBgYGBqc1xyXG4gICAgICogICAvLyByZWdpc3RlciB0aGUgaW50ZXJjZXB0b3IgYXMgYSBzZXJ2aWNlXHJcbiAgICAgKiAgICRwcm92aWRlLmZhY3RvcnkoJ215SHR0cEludGVyY2VwdG9yJywgZnVuY3Rpb24oJHEsIGRlcGVuZGVuY3kxLCBkZXBlbmRlbmN5Mikge1xyXG4gICAgICogICAgIHJldHVybiB7XHJcbiAgICAgKiAgICAgICAvLyBvcHRpb25hbCBtZXRob2RcclxuICAgICAqICAgICAgICdyZXF1ZXN0JzogZnVuY3Rpb24oY29uZmlnKSB7XHJcbiAgICAgKiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyBvbiBzdWNjZXNzXHJcbiAgICAgKiAgICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICAgKiAgICAgICB9LFxyXG4gICAgICpcclxuICAgICAqICAgICAgIC8vIG9wdGlvbmFsIG1ldGhvZFxyXG4gICAgICogICAgICAncmVxdWVzdEVycm9yJzogZnVuY3Rpb24ocmVqZWN0aW9uKSB7XHJcbiAgICAgKiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyBvbiBlcnJvclxyXG4gICAgICogICAgICAgICBpZiAoY2FuUmVjb3ZlcihyZWplY3Rpb24pKSB7XHJcbiAgICAgKiAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlT3JOZXdQcm9taXNlXHJcbiAgICAgKiAgICAgICAgIH1cclxuICAgICAqICAgICAgICAgcmV0dXJuICRxLnJlamVjdChyZWplY3Rpb24pO1xyXG4gICAgICogICAgICAgfSxcclxuICAgICAqXHJcbiAgICAgKlxyXG4gICAgICpcclxuICAgICAqICAgICAgIC8vIG9wdGlvbmFsIG1ldGhvZFxyXG4gICAgICogICAgICAgJ3Jlc3BvbnNlJzogZnVuY3Rpb24ocmVzcG9uc2UpIHtcclxuICAgICAqICAgICAgICAgLy8gZG8gc29tZXRoaW5nIG9uIHN1Y2Nlc3NcclxuICAgICAqICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICogICAgICAgfSxcclxuICAgICAqXHJcbiAgICAgKiAgICAgICAvLyBvcHRpb25hbCBtZXRob2RcclxuICAgICAqICAgICAgJ3Jlc3BvbnNlRXJyb3InOiBmdW5jdGlvbihyZWplY3Rpb24pIHtcclxuICAgICAqICAgICAgICAgLy8gZG8gc29tZXRoaW5nIG9uIGVycm9yXHJcbiAgICAgKiAgICAgICAgIGlmIChjYW5SZWNvdmVyKHJlamVjdGlvbikpIHtcclxuICAgICAqICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VPck5ld1Byb21pc2VcclxuICAgICAqICAgICAgICAgfVxyXG4gICAgICogICAgICAgICByZXR1cm4gJHEucmVqZWN0KHJlamVjdGlvbik7XHJcbiAgICAgKiAgICAgICB9XHJcbiAgICAgKiAgICAgfTtcclxuICAgICAqICAgfSk7XHJcbiAgICAgKlxyXG4gICAgICogICAkaHR0cFByb3ZpZGVyLmludGVyY2VwdG9ycy5wdXNoKCdteUh0dHBJbnRlcmNlcHRvcicpO1xyXG4gICAgICpcclxuICAgICAqXHJcbiAgICAgKiAgIC8vIGFsdGVybmF0aXZlbHksIHJlZ2lzdGVyIHRoZSBpbnRlcmNlcHRvciB2aWEgYW4gYW5vbnltb3VzIGZhY3RvcnlcclxuICAgICAqICAgJGh0dHBQcm92aWRlci5pbnRlcmNlcHRvcnMucHVzaChmdW5jdGlvbigkcSwgZGVwZW5kZW5jeTEsIGRlcGVuZGVuY3kyKSB7XHJcbiAgICAgKiAgICAgcmV0dXJuIHtcclxuICAgICAqICAgICAgJ3JlcXVlc3QnOiBmdW5jdGlvbihjb25maWcpIHtcclxuICAgICAqICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmVcclxuICAgICAqICAgICAgIH0sXHJcbiAgICAgKlxyXG4gICAgICogICAgICAgJ3Jlc3BvbnNlJzogZnVuY3Rpb24ocmVzcG9uc2UpIHtcclxuICAgICAqICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmVcclxuICAgICAqICAgICAgIH1cclxuICAgICAqICAgICB9O1xyXG4gICAgICogICB9KTtcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqICMjIFNlY3VyaXR5IENvbnNpZGVyYXRpb25zXHJcbiAgICAgKlxyXG4gICAgICogV2hlbiBkZXNpZ25pbmcgd2ViIGFwcGxpY2F0aW9ucywgY29uc2lkZXIgc2VjdXJpdHkgdGhyZWF0cyBmcm9tOlxyXG4gICAgICpcclxuICAgICAqIC0gW0pTT04gdnVsbmVyYWJpbGl0eV0oaHR0cDovL2hhYWNrZWQuY29tL2FyY2hpdmUvMjAwOC8xMS8yMC9hbmF0b215LW9mLWEtc3VidGxlLWpzb24tdnVsbmVyYWJpbGl0eS5hc3B4KVxyXG4gICAgICogLSBbWFNSRl0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Dcm9zcy1zaXRlX3JlcXVlc3RfZm9yZ2VyeSlcclxuICAgICAqXHJcbiAgICAgKiBCb3RoIHNlcnZlciBhbmQgdGhlIGNsaWVudCBtdXN0IGNvb3BlcmF0ZSBpbiBvcmRlciB0byBlbGltaW5hdGUgdGhlc2UgdGhyZWF0cy4gQW5ndWxhciBjb21lc1xyXG4gICAgICogcHJlLWNvbmZpZ3VyZWQgd2l0aCBzdHJhdGVnaWVzIHRoYXQgYWRkcmVzcyB0aGVzZSBpc3N1ZXMsIGJ1dCBmb3IgdGhpcyB0byB3b3JrIGJhY2tlbmQgc2VydmVyXHJcbiAgICAgKiBjb29wZXJhdGlvbiBpcyByZXF1aXJlZC5cclxuICAgICAqXHJcbiAgICAgKiAjIyMgSlNPTiBWdWxuZXJhYmlsaXR5IFByb3RlY3Rpb25cclxuICAgICAqXHJcbiAgICAgKiBBIFtKU09OIHZ1bG5lcmFiaWxpdHldKGh0dHA6Ly9oYWFja2VkLmNvbS9hcmNoaXZlLzIwMDgvMTEvMjAvYW5hdG9teS1vZi1hLXN1YnRsZS1qc29uLXZ1bG5lcmFiaWxpdHkuYXNweClcclxuICAgICAqIGFsbG93cyB0aGlyZCBwYXJ0eSB3ZWJzaXRlIHRvIHR1cm4geW91ciBKU09OIHJlc291cmNlIFVSTCBpbnRvXHJcbiAgICAgKiBbSlNPTlBdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSlNPTlApIHJlcXVlc3QgdW5kZXIgc29tZSBjb25kaXRpb25zLiBUb1xyXG4gICAgICogY291bnRlciB0aGlzIHlvdXIgc2VydmVyIGNhbiBwcmVmaXggYWxsIEpTT04gcmVxdWVzdHMgd2l0aCBmb2xsb3dpbmcgc3RyaW5nIGBcIildfScsXFxuXCJgLlxyXG4gICAgICogQW5ndWxhciB3aWxsIGF1dG9tYXRpY2FsbHkgc3RyaXAgdGhlIHByZWZpeCBiZWZvcmUgcHJvY2Vzc2luZyBpdCBhcyBKU09OLlxyXG4gICAgICpcclxuICAgICAqIEZvciBleGFtcGxlIGlmIHlvdXIgc2VydmVyIG5lZWRzIHRvIHJldHVybjpcclxuICAgICAqIGBgYGpzXHJcbiAgICAgKiBbJ29uZScsJ3R3byddXHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiB3aGljaCBpcyB2dWxuZXJhYmxlIHRvIGF0dGFjaywgeW91ciBzZXJ2ZXIgY2FuIHJldHVybjpcclxuICAgICAqIGBgYGpzXHJcbiAgICAgKiApXX0nLFxyXG4gICAgICogWydvbmUnLCd0d28nXVxyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogQW5ndWxhciB3aWxsIHN0cmlwIHRoZSBwcmVmaXgsIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBKU09OLlxyXG4gICAgICpcclxuICAgICAqXHJcbiAgICAgKiAjIyMgQ3Jvc3MgU2l0ZSBSZXF1ZXN0IEZvcmdlcnkgKFhTUkYpIFByb3RlY3Rpb25cclxuICAgICAqXHJcbiAgICAgKiBbWFNSRl0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Dcm9zcy1zaXRlX3JlcXVlc3RfZm9yZ2VyeSkgaXMgYSB0ZWNobmlxdWUgYnkgd2hpY2hcclxuICAgICAqIGFuIHVuYXV0aG9yaXplZCBzaXRlIGNhbiBnYWluIHlvdXIgdXNlcidzIHByaXZhdGUgZGF0YS4gQW5ndWxhciBwcm92aWRlcyBhIG1lY2hhbmlzbVxyXG4gICAgICogdG8gY291bnRlciBYU1JGLiBXaGVuIHBlcmZvcm1pbmcgWEhSIHJlcXVlc3RzLCB0aGUgJGh0dHAgc2VydmljZSByZWFkcyBhIHRva2VuIGZyb20gYSBjb29raWVcclxuICAgICAqIChieSBkZWZhdWx0LCBgWFNSRi1UT0tFTmApIGFuZCBzZXRzIGl0IGFzIGFuIEhUVFAgaGVhZGVyIChgWC1YU1JGLVRPS0VOYCkuIFNpbmNlIG9ubHlcclxuICAgICAqIEphdmFTY3JpcHQgdGhhdCBydW5zIG9uIHlvdXIgZG9tYWluIGNvdWxkIHJlYWQgdGhlIGNvb2tpZSwgeW91ciBzZXJ2ZXIgY2FuIGJlIGFzc3VyZWQgdGhhdFxyXG4gICAgICogdGhlIFhIUiBjYW1lIGZyb20gSmF2YVNjcmlwdCBydW5uaW5nIG9uIHlvdXIgZG9tYWluLiBUaGUgaGVhZGVyIHdpbGwgbm90IGJlIHNldCBmb3JcclxuICAgICAqIGNyb3NzLWRvbWFpbiByZXF1ZXN0cy5cclxuICAgICAqXHJcbiAgICAgKiBUbyB0YWtlIGFkdmFudGFnZSBvZiB0aGlzLCB5b3VyIHNlcnZlciBuZWVkcyB0byBzZXQgYSB0b2tlbiBpbiBhIEphdmFTY3JpcHQgcmVhZGFibGUgc2Vzc2lvblxyXG4gICAgICogY29va2llIGNhbGxlZCBgWFNSRi1UT0tFTmAgb24gdGhlIGZpcnN0IEhUVFAgR0VUIHJlcXVlc3QuIE9uIHN1YnNlcXVlbnQgWEhSIHJlcXVlc3RzIHRoZVxyXG4gICAgICogc2VydmVyIGNhbiB2ZXJpZnkgdGhhdCB0aGUgY29va2llIG1hdGNoZXMgYFgtWFNSRi1UT0tFTmAgSFRUUCBoZWFkZXIsIGFuZCB0aGVyZWZvcmUgYmUgc3VyZVxyXG4gICAgICogdGhhdCBvbmx5IEphdmFTY3JpcHQgcnVubmluZyBvbiB5b3VyIGRvbWFpbiBjb3VsZCBoYXZlIHNlbnQgdGhlIHJlcXVlc3QuIFRoZSB0b2tlbiBtdXN0IGJlXHJcbiAgICAgKiB1bmlxdWUgZm9yIGVhY2ggdXNlciBhbmQgbXVzdCBiZSB2ZXJpZmlhYmxlIGJ5IHRoZSBzZXJ2ZXIgKHRvIHByZXZlbnQgdGhlIEphdmFTY3JpcHQgZnJvbVxyXG4gICAgICogbWFraW5nIHVwIGl0cyBvd24gdG9rZW5zKS4gV2UgcmVjb21tZW5kIHRoYXQgdGhlIHRva2VuIGlzIGEgZGlnZXN0IG9mIHlvdXIgc2l0ZSdzXHJcbiAgICAgKiBhdXRoZW50aWNhdGlvbiBjb29raWUgd2l0aCBhIFtzYWx0XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TYWx0XyhjcnlwdG9ncmFwaHkmIzQxOylcclxuICAgICAqIGZvciBhZGRlZCBzZWN1cml0eS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgaGVhZGVycyBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSB4c3JmSGVhZGVyTmFtZSBhbmQgeHNyZkNvb2tpZU5hbWVcclxuICAgICAqIHByb3BlcnRpZXMgb2YgZWl0aGVyICRodHRwUHJvdmlkZXIuZGVmYXVsdHMgYXQgY29uZmlnLXRpbWUsICRodHRwLmRlZmF1bHRzIGF0IHJ1bi10aW1lLFxyXG4gICAgICogb3IgdGhlIHBlci1yZXF1ZXN0IGNvbmZpZyBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgT2JqZWN0IGRlc2NyaWJpbmcgdGhlIHJlcXVlc3QgdG8gYmUgbWFkZSBhbmQgaG93IGl0IHNob3VsZCBiZVxyXG4gICAgICogICAgcHJvY2Vzc2VkLiBUaGUgb2JqZWN0IGhhcyBmb2xsb3dpbmcgcHJvcGVydGllczpcclxuICAgICAqXHJcbiAgICAgKiAgICAtICoqbWV0aG9kKiog4oCTIGB7c3RyaW5nfWAg4oCTIEhUVFAgbWV0aG9kIChlLmcuICdHRVQnLCAnUE9TVCcsIGV0YylcclxuICAgICAqICAgIC0gKip1cmwqKiDigJMgYHtzdHJpbmd9YCDigJMgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIG9mIHRoZSByZXNvdXJjZSB0aGF0IGlzIGJlaW5nIHJlcXVlc3RlZC5cclxuICAgICAqICAgIC0gKipwYXJhbXMqKiDigJMgYHtPYmplY3QuPHN0cmluZ3xPYmplY3Q+fWAg4oCTIE1hcCBvZiBzdHJpbmdzIG9yIG9iamVjdHMgd2hpY2ggd2lsbCBiZSB0dXJuZWRcclxuICAgICAqICAgICAgdG8gYD9rZXkxPXZhbHVlMSZrZXkyPXZhbHVlMmAgYWZ0ZXIgdGhlIHVybC4gSWYgdGhlIHZhbHVlIGlzIG5vdCBhIHN0cmluZywgaXQgd2lsbCBiZVxyXG4gICAgICogICAgICBKU09OaWZpZWQuXHJcbiAgICAgKiAgICAtICoqZGF0YSoqIOKAkyBge3N0cmluZ3xPYmplY3R9YCDigJMgRGF0YSB0byBiZSBzZW50IGFzIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZGF0YS5cclxuICAgICAqICAgIC0gKipoZWFkZXJzKiog4oCTIGB7T2JqZWN0fWAg4oCTIE1hcCBvZiBzdHJpbmdzIG9yIGZ1bmN0aW9ucyB3aGljaCByZXR1cm4gc3RyaW5ncyByZXByZXNlbnRpbmdcclxuICAgICAqICAgICAgSFRUUCBoZWFkZXJzIHRvIHNlbmQgdG8gdGhlIHNlcnZlci4gSWYgdGhlIHJldHVybiB2YWx1ZSBvZiBhIGZ1bmN0aW9uIGlzIG51bGwsIHRoZVxyXG4gICAgICogICAgICBoZWFkZXIgd2lsbCBub3QgYmUgc2VudC5cclxuICAgICAqICAgIC0gKip4c3JmSGVhZGVyTmFtZSoqIOKAkyBge3N0cmluZ31gIOKAkyBOYW1lIG9mIEhUVFAgaGVhZGVyIHRvIHBvcHVsYXRlIHdpdGggdGhlIFhTUkYgdG9rZW4uXHJcbiAgICAgKiAgICAtICoqeHNyZkNvb2tpZU5hbWUqKiDigJMgYHtzdHJpbmd9YCDigJMgTmFtZSBvZiBjb29raWUgY29udGFpbmluZyB0aGUgWFNSRiB0b2tlbi5cclxuICAgICAqICAgIC0gKip0cmFuc2Zvcm1SZXF1ZXN0Kiog4oCTXHJcbiAgICAgKiAgICAgIGB7ZnVuY3Rpb24oZGF0YSwgaGVhZGVyc0dldHRlcil8QXJyYXkuPGZ1bmN0aW9uKGRhdGEsIGhlYWRlcnNHZXR0ZXIpPn1gIOKAk1xyXG4gICAgICogICAgICB0cmFuc2Zvcm0gZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3VjaCBmdW5jdGlvbnMuIFRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gdGFrZXMgdGhlIGh0dHBcclxuICAgICAqICAgICAgcmVxdWVzdCBib2R5IGFuZCBoZWFkZXJzIGFuZCByZXR1cm5zIGl0cyB0cmFuc2Zvcm1lZCAodHlwaWNhbGx5IHNlcmlhbGl6ZWQpIHZlcnNpb24uXHJcbiAgICAgKiAgICAgIFNlZSB7QGxpbmsgI292ZXJyaWRpbmctdGhlLWRlZmF1bHQtdHJhbnNmb3JtYXRpb25zLXBlci1yZXF1ZXN0IE92ZXJyaWRpbmcgdGhlIERlZmF1bHQgVHJhbnNmb3JtYXRpb25zfVxyXG4gICAgICogICAgLSAqKnRyYW5zZm9ybVJlc3BvbnNlKiog4oCTXHJcbiAgICAgKiAgICAgIGB7ZnVuY3Rpb24oZGF0YSwgaGVhZGVyc0dldHRlcil8QXJyYXkuPGZ1bmN0aW9uKGRhdGEsIGhlYWRlcnNHZXR0ZXIpPn1gIOKAk1xyXG4gICAgICogICAgICB0cmFuc2Zvcm0gZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3VjaCBmdW5jdGlvbnMuIFRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gdGFrZXMgdGhlIGh0dHBcclxuICAgICAqICAgICAgcmVzcG9uc2UgYm9keSBhbmQgaGVhZGVycyBhbmQgcmV0dXJucyBpdHMgdHJhbnNmb3JtZWQgKHR5cGljYWxseSBkZXNlcmlhbGl6ZWQpIHZlcnNpb24uXHJcbiAgICAgKiAgICAgIFNlZSB7QGxpbmsgI292ZXJyaWRpbmctdGhlLWRlZmF1bHQtdHJhbnNmb3JtYXRpb25zLXBlci1yZXF1ZXN0IE92ZXJyaWRpbmcgdGhlIERlZmF1bHQgVHJhbnNmb3JtYXRpb25zfVxyXG4gICAgICogICAgLSAqKmNhY2hlKiog4oCTIGB7Ym9vbGVhbnxDYWNoZX1gIOKAkyBJZiB0cnVlLCBhIGRlZmF1bHQgJGh0dHAgY2FjaGUgd2lsbCBiZSB1c2VkIHRvIGNhY2hlIHRoZVxyXG4gICAgICogICAgICBHRVQgcmVxdWVzdCwgb3RoZXJ3aXNlIGlmIGEgY2FjaGUgaW5zdGFuY2UgYnVpbHQgd2l0aFxyXG4gICAgICogICAgICB7QGxpbmsgbmcuJGNhY2hlRmFjdG9yeSAkY2FjaGVGYWN0b3J5fSwgdGhpcyBjYWNoZSB3aWxsIGJlIHVzZWQgZm9yXHJcbiAgICAgKiAgICAgIGNhY2hpbmcuXHJcbiAgICAgKiAgICAtICoqdGltZW91dCoqIOKAkyBge251bWJlcnxQcm9taXNlfWAg4oCTIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciB7QGxpbmsgbmcuJHEgcHJvbWlzZX1cclxuICAgICAqICAgICAgdGhhdCBzaG91bGQgYWJvcnQgdGhlIHJlcXVlc3Qgd2hlbiByZXNvbHZlZC5cclxuICAgICAqICAgIC0gKip3aXRoQ3JlZGVudGlhbHMqKiAtIGB7Ym9vbGVhbn1gIC0gd2hldGhlciB0byBzZXQgdGhlIGB3aXRoQ3JlZGVudGlhbHNgIGZsYWcgb24gdGhlXHJcbiAgICAgKiAgICAgIFhIUiBvYmplY3QuIFNlZSBbcmVxdWVzdHMgd2l0aCBjcmVkZW50aWFsc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRUUC9BY2Nlc3NfY29udHJvbF9DT1JTI1JlcXVlc3RzX3dpdGhfY3JlZGVudGlhbHMpXHJcbiAgICAgKiAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLlxyXG4gICAgICogICAgLSAqKnJlc3BvbnNlVHlwZSoqIC0gYHtzdHJpbmd9YCAtIHNlZVxyXG4gICAgICogICAgICBbcmVxdWVzdFR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL1hNTEh0dHBSZXF1ZXN0I3Jlc3BvbnNlVHlwZSkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge0h0dHBQcm9taXNlfSBSZXR1cm5zIGEge0BsaW5rIG5nLiRxIHByb21pc2V9IG9iamVjdCB3aXRoIHRoZVxyXG4gICAgICogICBzdGFuZGFyZCBgdGhlbmAgbWV0aG9kIGFuZCB0d28gaHR0cCBzcGVjaWZpYyBtZXRob2RzOiBgc3VjY2Vzc2AgYW5kIGBlcnJvcmAuIFRoZSBgdGhlbmBcclxuICAgICAqICAgbWV0aG9kIHRha2VzIHR3byBhcmd1bWVudHMgYSBzdWNjZXNzIGFuZCBhbiBlcnJvciBjYWxsYmFjayB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aXRoIGFcclxuICAgICAqICAgcmVzcG9uc2Ugb2JqZWN0LiBUaGUgYHN1Y2Nlc3NgIGFuZCBgZXJyb3JgIG1ldGhvZHMgdGFrZSBhIHNpbmdsZSBhcmd1bWVudCAtIGEgZnVuY3Rpb24gdGhhdFxyXG4gICAgICogICB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IHN1Y2NlZWRzIG9yIGZhaWxzIHJlc3BlY3RpdmVseS4gVGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50b1xyXG4gICAgICogICB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlc3RydWN0dXJlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IHBhc3NlZCBpbnRvIHRoZVxyXG4gICAgICogICBgdGhlbmAgbWV0aG9kLiBUaGUgcmVzcG9uc2Ugb2JqZWN0IGhhcyB0aGVzZSBwcm9wZXJ0aWVzOlxyXG4gICAgICpcclxuICAgICAqICAgLSAqKmRhdGEqKiDigJMgYHtzdHJpbmd8T2JqZWN0fWAg4oCTIFRoZSByZXNwb25zZSBib2R5IHRyYW5zZm9ybWVkIHdpdGggdGhlIHRyYW5zZm9ybVxyXG4gICAgICogICAgIGZ1bmN0aW9ucy5cclxuICAgICAqICAgLSAqKnN0YXR1cyoqIOKAkyBge251bWJlcn1gIOKAkyBIVFRQIHN0YXR1cyBjb2RlIG9mIHRoZSByZXNwb25zZS5cclxuICAgICAqICAgLSAqKmhlYWRlcnMqKiDigJMgYHtmdW5jdGlvbihbaGVhZGVyTmFtZV0pfWAg4oCTIEhlYWRlciBnZXR0ZXIgZnVuY3Rpb24uXHJcbiAgICAgKiAgIC0gKipjb25maWcqKiDigJMgYHtPYmplY3R9YCDigJMgVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHJlcXVlc3QuXHJcbiAgICAgKiAgIC0gKipzdGF0dXNUZXh0Kiog4oCTIGB7c3RyaW5nfWAg4oCTIEhUVFAgc3RhdHVzIHRleHQgb2YgdGhlIHJlc3BvbnNlLlxyXG4gICAgICpcclxuICAgICAqIEBwcm9wZXJ0eSB7QXJyYXkuPE9iamVjdD59IHBlbmRpbmdSZXF1ZXN0cyBBcnJheSBvZiBjb25maWcgb2JqZWN0cyBmb3IgY3VycmVudGx5IHBlbmRpbmdcclxuICAgICAqICAgcmVxdWVzdHMuIFRoaXMgaXMgcHJpbWFyaWx5IG1lYW50IHRvIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cclxuICAgICAqXHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuPGV4YW1wbGUgbW9kdWxlPVwiaHR0cEV4YW1wbGVcIj5cclxuPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJGZXRjaENvbnRyb2xsZXJcIj5cclxuICAgIDxzZWxlY3QgbmctbW9kZWw9XCJtZXRob2RcIj5cclxuICAgICAgPG9wdGlvbj5HRVQ8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbj5KU09OUDwvb3B0aW9uPlxyXG4gICAgPC9zZWxlY3Q+XHJcbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuZy1tb2RlbD1cInVybFwiIHNpemU9XCI4MFwiLz5cclxuICAgIDxidXR0b24gaWQ9XCJmZXRjaGJ0blwiIG5nLWNsaWNrPVwiZmV0Y2goKVwiPmZldGNoPC9idXR0b24+PGJyPlxyXG4gICAgPGJ1dHRvbiBpZD1cInNhbXBsZWdldGJ0blwiIG5nLWNsaWNrPVwidXBkYXRlTW9kZWwoJ0dFVCcsICdodHRwLWhlbGxvLmh0bWwnKVwiPlNhbXBsZSBHRVQ8L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJzYW1wbGVqc29ucGJ0blwiXHJcbiAgICAgIG5nLWNsaWNrPVwidXBkYXRlTW9kZWwoJ0pTT05QJyxcclxuICAgICAgICAgICAgICAgICAgICAnaHR0cHM6Ly9hbmd1bGFyanMub3JnL2dyZWV0LnBocD9jYWxsYmFjaz1KU09OX0NBTExCQUNLJm5hbWU9U3VwZXIlMjBIZXJvJylcIj5cclxuICAgICAgU2FtcGxlIEpTT05QXHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJpbnZhbGlkanNvbnBidG5cIlxyXG4gICAgICBuZy1jbGljaz1cInVwZGF0ZU1vZGVsKCdKU09OUCcsICdodHRwczovL2FuZ3VsYXJqcy5vcmcvZG9lc250ZXhpc3QmY2FsbGJhY2s9SlNPTl9DQUxMQkFDSycpXCI+XHJcbiAgICAgICAgSW52YWxpZCBKU09OUFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDxwcmU+aHR0cCBzdGF0dXMgY29kZToge3tzdGF0dXN9fTwvcHJlPlxyXG4gICAgPHByZT5odHRwIHJlc3BvbnNlIGRhdGE6IHt7ZGF0YX19PC9wcmU+XHJcbiAgPC9kaXY+XHJcbjwvZmlsZT5cclxuPGZpbGUgbmFtZT1cInNjcmlwdC5qc1wiPlxyXG4gIGFuZ3VsYXIubW9kdWxlKCdodHRwRXhhbXBsZScsIFtdKVxyXG4gICAgLmNvbnRyb2xsZXIoJ0ZldGNoQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRodHRwJywgJyR0ZW1wbGF0ZUNhY2hlJyxcclxuICAgICAgZnVuY3Rpb24oJHNjb3BlLCAkaHR0cCwgJHRlbXBsYXRlQ2FjaGUpIHtcclxuICAgICAgICAkc2NvcGUubWV0aG9kID0gJ0dFVCc7XHJcbiAgICAgICAgJHNjb3BlLnVybCA9ICdodHRwLWhlbGxvLmh0bWwnO1xyXG5cclxuICAgICAgICAkc2NvcGUuZmV0Y2ggPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICRzY29wZS5jb2RlID0gbnVsbDtcclxuICAgICAgICAgICRzY29wZS5yZXNwb25zZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgJGh0dHAoe21ldGhvZDogJHNjb3BlLm1ldGhvZCwgdXJsOiAkc2NvcGUudXJsLCBjYWNoZTogJHRlbXBsYXRlQ2FjaGV9KS5cclxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbihkYXRhLCBzdGF0dXMpIHtcclxuICAgICAgICAgICAgICAkc2NvcGUuc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgICAgICAgICAgICRzY29wZS5kYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uKGRhdGEsIHN0YXR1cykge1xyXG4gICAgICAgICAgICAgICRzY29wZS5kYXRhID0gZGF0YSB8fCBcIlJlcXVlc3QgZmFpbGVkXCI7XHJcbiAgICAgICAgICAgICAgJHNjb3BlLnN0YXR1cyA9IHN0YXR1cztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgICRzY29wZS51cGRhdGVNb2RlbCA9IGZ1bmN0aW9uKG1ldGhvZCwgdXJsKSB7XHJcbiAgICAgICAgICAkc2NvcGUubWV0aG9kID0gbWV0aG9kO1xyXG4gICAgICAgICAgJHNjb3BlLnVybCA9IHVybDtcclxuICAgICAgICB9O1xyXG4gICAgICB9XSk7XHJcbjwvZmlsZT5cclxuPGZpbGUgbmFtZT1cImh0dHAtaGVsbG8uaHRtbFwiPlxyXG4gIEhlbGxvLCAkaHR0cCFcclxuPC9maWxlPlxyXG48ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgdmFyIHN0YXR1cyA9IGVsZW1lbnQoYnkuYmluZGluZygnc3RhdHVzJykpO1xyXG4gIHZhciBkYXRhID0gZWxlbWVudChieS5iaW5kaW5nKCdkYXRhJykpO1xyXG4gIHZhciBmZXRjaEJ0biA9IGVsZW1lbnQoYnkuaWQoJ2ZldGNoYnRuJykpO1xyXG4gIHZhciBzYW1wbGVHZXRCdG4gPSBlbGVtZW50KGJ5LmlkKCdzYW1wbGVnZXRidG4nKSk7XHJcbiAgdmFyIHNhbXBsZUpzb25wQnRuID0gZWxlbWVudChieS5pZCgnc2FtcGxlanNvbnBidG4nKSk7XHJcbiAgdmFyIGludmFsaWRKc29ucEJ0biA9IGVsZW1lbnQoYnkuaWQoJ2ludmFsaWRqc29ucGJ0bicpKTtcclxuXHJcbiAgaXQoJ3Nob3VsZCBtYWtlIGFuIHhociBHRVQgcmVxdWVzdCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgc2FtcGxlR2V0QnRuLmNsaWNrKCk7XHJcbiAgICBmZXRjaEJ0bi5jbGljaygpO1xyXG4gICAgZXhwZWN0KHN0YXR1cy5nZXRUZXh0KCkpLnRvTWF0Y2goJzIwMCcpO1xyXG4gICAgZXhwZWN0KGRhdGEuZ2V0VGV4dCgpKS50b01hdGNoKC9IZWxsbywgXFwkaHR0cCEvKTtcclxuICB9KTtcclxuXHJcbi8vIENvbW1lbnRlZCBvdXQgZHVlIHRvIGZsYWtlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIuanMvaXNzdWVzLzkxODVcclxuLy8gaXQoJ3Nob3VsZCBtYWtlIGEgSlNPTlAgcmVxdWVzdCB0byBhbmd1bGFyanMub3JnJywgZnVuY3Rpb24oKSB7XHJcbi8vICAgc2FtcGxlSnNvbnBCdG4uY2xpY2soKTtcclxuLy8gICBmZXRjaEJ0bi5jbGljaygpO1xyXG4vLyAgIGV4cGVjdChzdGF0dXMuZ2V0VGV4dCgpKS50b01hdGNoKCcyMDAnKTtcclxuLy8gICBleHBlY3QoZGF0YS5nZXRUZXh0KCkpLnRvTWF0Y2goL1N1cGVyIEhlcm8hLyk7XHJcbi8vIH0pO1xyXG5cclxuICBpdCgnc2hvdWxkIG1ha2UgSlNPTlAgcmVxdWVzdCB0byBpbnZhbGlkIFVSTCBhbmQgaW52b2tlIHRoZSBlcnJvciBoYW5kbGVyJyxcclxuICAgICAgZnVuY3Rpb24oKSB7XHJcbiAgICBpbnZhbGlkSnNvbnBCdG4uY2xpY2soKTtcclxuICAgIGZldGNoQnRuLmNsaWNrKCk7XHJcbiAgICBleHBlY3Qoc3RhdHVzLmdldFRleHQoKSkudG9NYXRjaCgnMCcpO1xyXG4gICAgZXhwZWN0KGRhdGEuZ2V0VGV4dCgpKS50b01hdGNoKCdSZXF1ZXN0IGZhaWxlZCcpO1xyXG4gIH0pO1xyXG48L2ZpbGU+XHJcbjwvZXhhbXBsZT5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gJGh0dHAocmVxdWVzdENvbmZpZykge1xyXG4gICAgICB2YXIgY29uZmlnID0ge1xyXG4gICAgICAgIG1ldGhvZDogJ2dldCcsXHJcbiAgICAgICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdHMudHJhbnNmb3JtUmVxdWVzdCxcclxuICAgICAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdHMudHJhbnNmb3JtUmVzcG9uc2VcclxuICAgICAgfTtcclxuICAgICAgdmFyIGhlYWRlcnMgPSBtZXJnZUhlYWRlcnMocmVxdWVzdENvbmZpZyk7XHJcblxyXG4gICAgICBleHRlbmQoY29uZmlnLCByZXF1ZXN0Q29uZmlnKTtcclxuICAgICAgY29uZmlnLmhlYWRlcnMgPSBoZWFkZXJzO1xyXG4gICAgICBjb25maWcubWV0aG9kID0gdXBwZXJjYXNlKGNvbmZpZy5tZXRob2QpO1xyXG5cclxuICAgICAgdmFyIHNlcnZlclJlcXVlc3QgPSBmdW5jdGlvbihjb25maWcpIHtcclxuICAgICAgICBoZWFkZXJzID0gY29uZmlnLmhlYWRlcnM7XHJcbiAgICAgICAgdmFyIHJlcURhdGEgPSB0cmFuc2Zvcm1EYXRhKGNvbmZpZy5kYXRhLCBoZWFkZXJzR2V0dGVyKGhlYWRlcnMpLCBjb25maWcudHJhbnNmb3JtUmVxdWVzdCk7XHJcblxyXG4gICAgICAgIC8vIHN0cmlwIGNvbnRlbnQtdHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxyXG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChyZXFEYXRhKSkge1xyXG4gICAgICAgICAgZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbih2YWx1ZSwgaGVhZGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UoaGVhZGVyKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpICYmICFpc1VuZGVmaW5lZChkZWZhdWx0cy53aXRoQ3JlZGVudGlhbHMpKSB7XHJcbiAgICAgICAgICBjb25maWcud2l0aENyZWRlbnRpYWxzID0gZGVmYXVsdHMud2l0aENyZWRlbnRpYWxzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VuZCByZXF1ZXN0XHJcbiAgICAgICAgcmV0dXJuIHNlbmRSZXEoY29uZmlnLCByZXFEYXRhLCBoZWFkZXJzKS50aGVuKHRyYW5zZm9ybVJlc3BvbnNlLCB0cmFuc2Zvcm1SZXNwb25zZSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB2YXIgY2hhaW4gPSBbc2VydmVyUmVxdWVzdCwgdW5kZWZpbmVkXTtcclxuICAgICAgdmFyIHByb21pc2UgPSAkcS53aGVuKGNvbmZpZyk7XHJcblxyXG4gICAgICAvLyBhcHBseSBpbnRlcmNlcHRvcnNcclxuICAgICAgZm9yRWFjaChyZXZlcnNlZEludGVyY2VwdG9ycywgZnVuY3Rpb24oaW50ZXJjZXB0b3IpIHtcclxuICAgICAgICBpZiAoaW50ZXJjZXB0b3IucmVxdWVzdCB8fCBpbnRlcmNlcHRvci5yZXF1ZXN0RXJyb3IpIHtcclxuICAgICAgICAgIGNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IucmVxdWVzdCwgaW50ZXJjZXB0b3IucmVxdWVzdEVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGludGVyY2VwdG9yLnJlc3BvbnNlIHx8IGludGVyY2VwdG9yLnJlc3BvbnNlRXJyb3IpIHtcclxuICAgICAgICAgIGNoYWluLnB1c2goaW50ZXJjZXB0b3IucmVzcG9uc2UsIGludGVyY2VwdG9yLnJlc3BvbnNlRXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIHRoZW5GbiA9IGNoYWluLnNoaWZ0KCk7XHJcbiAgICAgICAgdmFyIHJlamVjdEZuID0gY2hhaW4uc2hpZnQoKTtcclxuXHJcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbih0aGVuRm4sIHJlamVjdEZuKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcHJvbWlzZS5zdWNjZXNzID0gZnVuY3Rpb24oZm4pIHtcclxuICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcclxuICAgICAgICAgIGZuKHJlc3BvbnNlLmRhdGEsIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UuaGVhZGVycywgY29uZmlnKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcHJvbWlzZTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHByb21pc2UuZXJyb3IgPSBmdW5jdGlvbihmbikge1xyXG4gICAgICAgIHByb21pc2UudGhlbihudWxsLCBmdW5jdGlvbihyZXNwb25zZSkge1xyXG4gICAgICAgICAgZm4ocmVzcG9uc2UuZGF0YSwgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLCBjb25maWcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBwcm9taXNlO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmV0dXJuIHByb21pc2U7XHJcblxyXG4gICAgICBmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShyZXNwb25zZSkge1xyXG4gICAgICAgIC8vIG1ha2UgYSBjb3B5IHNpbmNlIHRoZSByZXNwb25zZSBtdXN0IGJlIGNhY2hlYWJsZVxyXG4gICAgICAgIHZhciByZXNwID0gZXh0ZW5kKHt9LCByZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhKSB7XHJcbiAgICAgICAgICByZXNwLmRhdGEgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXNwLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKHJlc3BvbnNlLmRhdGEsIHJlc3BvbnNlLmhlYWRlcnMsIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaXNTdWNjZXNzKHJlc3BvbnNlLnN0YXR1cykpXHJcbiAgICAgICAgICA/IHJlc3BcclxuICAgICAgICAgIDogJHEucmVqZWN0KHJlc3ApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBtZXJnZUhlYWRlcnMoY29uZmlnKSB7XHJcbiAgICAgICAgdmFyIGRlZkhlYWRlcnMgPSBkZWZhdWx0cy5oZWFkZXJzLFxyXG4gICAgICAgICAgICByZXFIZWFkZXJzID0gZXh0ZW5kKHt9LCBjb25maWcuaGVhZGVycyksXHJcbiAgICAgICAgICAgIGRlZkhlYWRlck5hbWUsIGxvd2VyY2FzZURlZkhlYWRlck5hbWUsIHJlcUhlYWRlck5hbWU7XHJcblxyXG4gICAgICAgIGRlZkhlYWRlcnMgPSBleHRlbmQoe30sIGRlZkhlYWRlcnMuY29tbW9uLCBkZWZIZWFkZXJzW2xvd2VyY2FzZShjb25maWcubWV0aG9kKV0pO1xyXG5cclxuICAgICAgICAvLyB1c2luZyBmb3ItaW4gaW5zdGVhZCBvZiBmb3JFYWNoIHRvIGF2b2lkIHVuZWNlc3NhcnkgaXRlcmF0aW9uIGFmdGVyIGhlYWRlciBoYXMgYmVlbiBmb3VuZFxyXG4gICAgICAgIGRlZmF1bHRIZWFkZXJzSXRlcmF0aW9uOlxyXG4gICAgICAgIGZvciAoZGVmSGVhZGVyTmFtZSBpbiBkZWZIZWFkZXJzKSB7XHJcbiAgICAgICAgICBsb3dlcmNhc2VEZWZIZWFkZXJOYW1lID0gbG93ZXJjYXNlKGRlZkhlYWRlck5hbWUpO1xyXG5cclxuICAgICAgICAgIGZvciAocmVxSGVhZGVyTmFtZSBpbiByZXFIZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIGlmIChsb3dlcmNhc2UocmVxSGVhZGVyTmFtZSkgPT09IGxvd2VyY2FzZURlZkhlYWRlck5hbWUpIHtcclxuICAgICAgICAgICAgICBjb250aW51ZSBkZWZhdWx0SGVhZGVyc0l0ZXJhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJlcUhlYWRlcnNbZGVmSGVhZGVyTmFtZV0gPSBkZWZIZWFkZXJzW2RlZkhlYWRlck5hbWVdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZXhlY3V0ZSBpZiBoZWFkZXIgdmFsdWUgaXMgYSBmdW5jdGlvbiBmb3IgbWVyZ2VkIGhlYWRlcnNcclxuICAgICAgICBleGVjSGVhZGVycyhyZXFIZWFkZXJzKTtcclxuICAgICAgICByZXR1cm4gcmVxSGVhZGVycztcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZXhlY0hlYWRlcnMoaGVhZGVycykge1xyXG4gICAgICAgICAgdmFyIGhlYWRlckNvbnRlbnQ7XHJcblxyXG4gICAgICAgICAgZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbihoZWFkZXJGbiwgaGVhZGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGhlYWRlckZuKSkge1xyXG4gICAgICAgICAgICAgIGhlYWRlckNvbnRlbnQgPSBoZWFkZXJGbigpO1xyXG4gICAgICAgICAgICAgIGlmIChoZWFkZXJDb250ZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnNbaGVhZGVyXSA9IGhlYWRlckNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkaHR0cC5wZW5kaW5nUmVxdWVzdHMgPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAqIEBuYW1lICRodHRwI2dldFxyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogU2hvcnRjdXQgbWV0aG9kIHRvIHBlcmZvcm0gYEdFVGAgcmVxdWVzdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFJlbGF0aXZlIG9yIGFic29sdXRlIFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVxdWVzdFxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3RcclxuICAgICAqIEByZXR1cm5zIHtIdHRwUHJvbWlzZX0gRnV0dXJlIG9iamVjdFxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgKiBAbmFtZSAkaHR0cCNkZWxldGVcclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFNob3J0Y3V0IG1ldGhvZCB0byBwZXJmb3JtIGBERUxFVEVgIHJlcXVlc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBSZWxhdGl2ZSBvciBhYnNvbHV0ZSBVUkwgc3BlY2lmeWluZyB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHJlcXVlc3RcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICAgKiBAcmV0dXJucyB7SHR0cFByb21pc2V9IEZ1dHVyZSBvYmplY3RcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICogQG5hbWUgJGh0dHAjaGVhZFxyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogU2hvcnRjdXQgbWV0aG9kIHRvIHBlcmZvcm0gYEhFQURgIHJlcXVlc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBSZWxhdGl2ZSBvciBhYnNvbHV0ZSBVUkwgc3BlY2lmeWluZyB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHJlcXVlc3RcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICAgKiBAcmV0dXJucyB7SHR0cFByb21pc2V9IEZ1dHVyZSBvYmplY3RcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICogQG5hbWUgJGh0dHAjanNvbnBcclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFNob3J0Y3V0IG1ldGhvZCB0byBwZXJmb3JtIGBKU09OUGAgcmVxdWVzdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFJlbGF0aXZlIG9yIGFic29sdXRlIFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVxdWVzdC5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGNhbGxiYWNrIHNob3VsZCBiZSB0aGUgc3RyaW5nIGBKU09OX0NBTExCQUNLYC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICAgKiBAcmV0dXJucyB7SHR0cFByb21pc2V9IEZ1dHVyZSBvYmplY3RcclxuICAgICAqL1xyXG4gICAgY3JlYXRlU2hvcnRNZXRob2RzKCdnZXQnLCAnZGVsZXRlJywgJ2hlYWQnLCAnanNvbnAnKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAqIEBuYW1lICRodHRwI3Bvc3RcclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFNob3J0Y3V0IG1ldGhvZCB0byBwZXJmb3JtIGBQT1NUYCByZXF1ZXN0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgUmVsYXRpdmUgb3IgYWJzb2x1dGUgVVJMIHNwZWNpZnlpbmcgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSByZXF1ZXN0XHJcbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgUmVxdWVzdCBjb250ZW50XHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdFxyXG4gICAgICogQHJldHVybnMge0h0dHBQcm9taXNlfSBGdXR1cmUgb2JqZWN0XHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAqIEBuYW1lICRodHRwI3B1dFxyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogU2hvcnRjdXQgbWV0aG9kIHRvIHBlcmZvcm0gYFBVVGAgcmVxdWVzdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFJlbGF0aXZlIG9yIGFic29sdXRlIFVSTCBzcGVjaWZ5aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVxdWVzdFxyXG4gICAgICogQHBhcmFtIHsqfSBkYXRhIFJlcXVlc3QgY29udGVudFxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3RcclxuICAgICAqIEByZXR1cm5zIHtIdHRwUHJvbWlzZX0gRnV0dXJlIG9iamVjdFxyXG4gICAgICovXHJcblxyXG4gICAgIC8qKlxyXG4gICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgKiBAbmFtZSAkaHR0cCNwYXRjaFxyXG4gICAgICAqXHJcbiAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICogU2hvcnRjdXQgbWV0aG9kIHRvIHBlcmZvcm0gYFBBVENIYCByZXF1ZXN0LlxyXG4gICAgICAqXHJcbiAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBSZWxhdGl2ZSBvciBhYnNvbHV0ZSBVUkwgc3BlY2lmeWluZyB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHJlcXVlc3RcclxuICAgICAgKiBAcGFyYW0geyp9IGRhdGEgUmVxdWVzdCBjb250ZW50XHJcbiAgICAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3RcclxuICAgICAgKiBAcmV0dXJucyB7SHR0cFByb21pc2V9IEZ1dHVyZSBvYmplY3RcclxuICAgICAgKi9cclxuICAgIGNyZWF0ZVNob3J0TWV0aG9kc1dpdGhEYXRhKCdwb3N0JywgJ3B1dCcsICdwYXRjaCcpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAbmdkb2MgcHJvcGVydHlcclxuICAgICAgICAgKiBAbmFtZSAkaHR0cCNkZWZhdWx0c1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICAgICogUnVudGltZSBlcXVpdmFsZW50IG9mIHRoZSBgJGh0dHBQcm92aWRlci5kZWZhdWx0c2AgcHJvcGVydHkuIEFsbG93cyBjb25maWd1cmF0aW9uIG9mXHJcbiAgICAgICAgICogZGVmYXVsdCBoZWFkZXJzLCB3aXRoQ3JlZGVudGlhbHMgYXMgd2VsbCBhcyByZXF1ZXN0IGFuZCByZXNwb25zZSB0cmFuc2Zvcm1hdGlvbnMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBTZWUgXCJTZXR0aW5nIEhUVFAgSGVhZGVyc1wiIGFuZCBcIlRyYW5zZm9ybWluZyBSZXF1ZXN0cyBhbmQgUmVzcG9uc2VzXCIgc2VjdGlvbnMgYWJvdmUuXHJcbiAgICAgICAgICovXHJcbiAgICAkaHR0cC5kZWZhdWx0cyA9IGRlZmF1bHRzO1xyXG5cclxuXHJcbiAgICByZXR1cm4gJGh0dHA7XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZVNob3J0TWV0aG9kcyhuYW1lcykge1xyXG4gICAgICBmb3JFYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgICRodHRwW25hbWVdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcclxuICAgICAgICAgIHJldHVybiAkaHR0cChleHRlbmQoY29uZmlnIHx8IHt9LCB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogbmFtZSxcclxuICAgICAgICAgICAgdXJsOiB1cmxcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gY3JlYXRlU2hvcnRNZXRob2RzV2l0aERhdGEobmFtZSkge1xyXG4gICAgICBmb3JFYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgICRodHRwW25hbWVdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25maWcpIHtcclxuICAgICAgICAgIHJldHVybiAkaHR0cChleHRlbmQoY29uZmlnIHx8IHt9LCB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogbmFtZSxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYWtlcyB0aGUgcmVxdWVzdC5cclxuICAgICAqXHJcbiAgICAgKiAhISEgQUNDRVNTRVMgQ0xPU1VSRSBWQVJTOlxyXG4gICAgICogJGh0dHBCYWNrZW5kLCBkZWZhdWx0cywgJGxvZywgJHJvb3RTY29wZSwgZGVmYXVsdENhY2hlLCAkaHR0cC5wZW5kaW5nUmVxdWVzdHNcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gc2VuZFJlcShjb25maWcsIHJlcURhdGEsIHJlcUhlYWRlcnMpIHtcclxuICAgICAgdmFyIGRlZmVycmVkID0gJHEuZGVmZXIoKSxcclxuICAgICAgICAgIHByb21pc2UgPSBkZWZlcnJlZC5wcm9taXNlLFxyXG4gICAgICAgICAgY2FjaGUsXHJcbiAgICAgICAgICBjYWNoZWRSZXNwLFxyXG4gICAgICAgICAgdXJsID0gYnVpbGRVcmwoY29uZmlnLnVybCwgY29uZmlnLnBhcmFtcyk7XHJcblxyXG4gICAgICAkaHR0cC5wZW5kaW5nUmVxdWVzdHMucHVzaChjb25maWcpO1xyXG4gICAgICBwcm9taXNlLnRoZW4ocmVtb3ZlUGVuZGluZ1JlcSwgcmVtb3ZlUGVuZGluZ1JlcSk7XHJcblxyXG5cclxuICAgICAgaWYgKChjb25maWcuY2FjaGUgfHwgZGVmYXVsdHMuY2FjaGUpICYmIGNvbmZpZy5jYWNoZSAhPT0gZmFsc2UgJiZcclxuICAgICAgICAgIChjb25maWcubWV0aG9kID09PSAnR0VUJyB8fCBjb25maWcubWV0aG9kID09PSAnSlNPTlAnKSkge1xyXG4gICAgICAgIGNhY2hlID0gaXNPYmplY3QoY29uZmlnLmNhY2hlKSA/IGNvbmZpZy5jYWNoZVxyXG4gICAgICAgICAgICAgIDogaXNPYmplY3QoZGVmYXVsdHMuY2FjaGUpID8gZGVmYXVsdHMuY2FjaGVcclxuICAgICAgICAgICAgICA6IGRlZmF1bHRDYWNoZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNhY2hlKSB7XHJcbiAgICAgICAgY2FjaGVkUmVzcCA9IGNhY2hlLmdldCh1cmwpO1xyXG4gICAgICAgIGlmIChpc0RlZmluZWQoY2FjaGVkUmVzcCkpIHtcclxuICAgICAgICAgIGlmIChpc1Byb21pc2VMaWtlKGNhY2hlZFJlc3ApKSB7XHJcbiAgICAgICAgICAgIC8vIGNhY2hlZCByZXF1ZXN0IGhhcyBhbHJlYWR5IGJlZW4gc2VudCwgYnV0IHRoZXJlIGlzIG5vIHJlc3BvbnNlIHlldFxyXG4gICAgICAgICAgICBjYWNoZWRSZXNwLnRoZW4ocmVtb3ZlUGVuZGluZ1JlcSwgcmVtb3ZlUGVuZGluZ1JlcSk7XHJcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRSZXNwO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gc2VydmluZyBmcm9tIGNhY2hlXHJcbiAgICAgICAgICAgIGlmIChpc0FycmF5KGNhY2hlZFJlc3ApKSB7XHJcbiAgICAgICAgICAgICAgcmVzb2x2ZVByb21pc2UoY2FjaGVkUmVzcFsxXSwgY2FjaGVkUmVzcFswXSwgc2hhbGxvd0NvcHkoY2FjaGVkUmVzcFsyXSksIGNhY2hlZFJlc3BbM10pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJlc29sdmVQcm9taXNlKGNhY2hlZFJlc3AsIDIwMCwge30sICdPSycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIHB1dCB0aGUgcHJvbWlzZSBmb3IgdGhlIG5vbi10cmFuc2Zvcm1lZCByZXNwb25zZSBpbnRvIGNhY2hlIGFzIGEgcGxhY2Vob2xkZXJcclxuICAgICAgICAgIGNhY2hlLnB1dCh1cmwsIHByb21pc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8vIGlmIHdlIHdvbid0IGhhdmUgdGhlIHJlc3BvbnNlIGluIGNhY2hlLCBzZXQgdGhlIHhzcmYgaGVhZGVycyBhbmRcclxuICAgICAgLy8gc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgYmFja2VuZFxyXG4gICAgICBpZiAoaXNVbmRlZmluZWQoY2FjaGVkUmVzcCkpIHtcclxuICAgICAgICB2YXIgeHNyZlZhbHVlID0gdXJsSXNTYW1lT3JpZ2luKGNvbmZpZy51cmwpXHJcbiAgICAgICAgICAgID8gJGJyb3dzZXIuY29va2llcygpW2NvbmZpZy54c3JmQ29va2llTmFtZSB8fCBkZWZhdWx0cy54c3JmQ29va2llTmFtZV1cclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKHhzcmZWYWx1ZSkge1xyXG4gICAgICAgICAgcmVxSGVhZGVyc1soY29uZmlnLnhzcmZIZWFkZXJOYW1lIHx8IGRlZmF1bHRzLnhzcmZIZWFkZXJOYW1lKV0gPSB4c3JmVmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkaHR0cEJhY2tlbmQoY29uZmlnLm1ldGhvZCwgdXJsLCByZXFEYXRhLCBkb25lLCByZXFIZWFkZXJzLCBjb25maWcudGltZW91dCxcclxuICAgICAgICAgICAgY29uZmlnLndpdGhDcmVkZW50aWFscywgY29uZmlnLnJlc3BvbnNlVHlwZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBwcm9taXNlO1xyXG5cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBDYWxsYmFjayByZWdpc3RlcmVkIHRvICRodHRwQmFja2VuZCgpOlxyXG4gICAgICAgKiAgLSBjYWNoZXMgdGhlIHJlc3BvbnNlIGlmIGRlc2lyZWRcclxuICAgICAgICogIC0gcmVzb2x2ZXMgdGhlIHJhdyAkaHR0cCBwcm9taXNlXHJcbiAgICAgICAqICAtIGNhbGxzICRhcHBseVxyXG4gICAgICAgKi9cclxuICAgICAgZnVuY3Rpb24gZG9uZShzdGF0dXMsIHJlc3BvbnNlLCBoZWFkZXJzU3RyaW5nLCBzdGF0dXNUZXh0KSB7XHJcbiAgICAgICAgaWYgKGNhY2hlKSB7XHJcbiAgICAgICAgICBpZiAoaXNTdWNjZXNzKHN0YXR1cykpIHtcclxuICAgICAgICAgICAgY2FjaGUucHV0KHVybCwgW3N0YXR1cywgcmVzcG9uc2UsIHBhcnNlSGVhZGVycyhoZWFkZXJzU3RyaW5nKSwgc3RhdHVzVGV4dF0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIHByb21pc2UgZnJvbSB0aGUgY2FjaGVcclxuICAgICAgICAgICAgY2FjaGUucmVtb3ZlKHVybCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiByZXNvbHZlSHR0cFByb21pc2UoKSB7XHJcbiAgICAgICAgICByZXNvbHZlUHJvbWlzZShyZXNwb25zZSwgc3RhdHVzLCBoZWFkZXJzU3RyaW5nLCBzdGF0dXNUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1c2VBcHBseUFzeW5jKSB7XHJcbiAgICAgICAgICAkcm9vdFNjb3BlLiRhcHBseUFzeW5jKHJlc29sdmVIdHRwUHJvbWlzZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc29sdmVIdHRwUHJvbWlzZSgpO1xyXG4gICAgICAgICAgaWYgKCEkcm9vdFNjb3BlLiQkcGhhc2UpICRyb290U2NvcGUuJGFwcGx5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIFJlc29sdmVzIHRoZSByYXcgJGh0dHAgcHJvbWlzZS5cclxuICAgICAgICovXHJcbiAgICAgIGZ1bmN0aW9uIHJlc29sdmVQcm9taXNlKHJlc3BvbnNlLCBzdGF0dXMsIGhlYWRlcnMsIHN0YXR1c1RleHQpIHtcclxuICAgICAgICAvLyBub3JtYWxpemUgaW50ZXJuYWwgc3RhdHVzZXMgdG8gMFxyXG4gICAgICAgIHN0YXR1cyA9IE1hdGgubWF4KHN0YXR1cywgMCk7XHJcblxyXG4gICAgICAgIChpc1N1Y2Nlc3Moc3RhdHVzKSA/IGRlZmVycmVkLnJlc29sdmUgOiBkZWZlcnJlZC5yZWplY3QpKHtcclxuICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLFxyXG4gICAgICAgICAgc3RhdHVzOiBzdGF0dXMsXHJcbiAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzR2V0dGVyKGhlYWRlcnMpLFxyXG4gICAgICAgICAgY29uZmlnOiBjb25maWcsXHJcbiAgICAgICAgICBzdGF0dXNUZXh0OiBzdGF0dXNUZXh0XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICBmdW5jdGlvbiByZW1vdmVQZW5kaW5nUmVxKCkge1xyXG4gICAgICAgIHZhciBpZHggPSAkaHR0cC5wZW5kaW5nUmVxdWVzdHMuaW5kZXhPZihjb25maWcpO1xyXG4gICAgICAgIGlmIChpZHggIT09IC0xKSAkaHR0cC5wZW5kaW5nUmVxdWVzdHMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gYnVpbGRVcmwodXJsLCBwYXJhbXMpIHtcclxuICAgICAgaWYgKCFwYXJhbXMpIHJldHVybiB1cmw7XHJcbiAgICAgIHZhciBwYXJ0cyA9IFtdO1xyXG4gICAgICBmb3JFYWNoU29ydGVkKHBhcmFtcywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCBpc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcclxuICAgICAgICBpZiAoIWlzQXJyYXkodmFsdWUpKSB2YWx1ZSA9IFt2YWx1ZV07XHJcblxyXG4gICAgICAgIGZvckVhY2godmFsdWUsIGZ1bmN0aW9uKHYpIHtcclxuICAgICAgICAgIGlmIChpc09iamVjdCh2KSkge1xyXG4gICAgICAgICAgICBpZiAoaXNEYXRlKHYpKSB7XHJcbiAgICAgICAgICAgICAgdiA9IHYudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB2ID0gdG9Kc29uKHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZVVyaVF1ZXJ5KGtleSkgKyAnPScgK1xyXG4gICAgICAgICAgICAgICAgICAgICBlbmNvZGVVcmlRdWVyeSh2KSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAocGFydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHVybCArPSAoKHVybC5pbmRleE9mKCc/JykgPT0gLTEpID8gJz8nIDogJyYnKSArIHBhcnRzLmpvaW4oJyYnKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdXJsO1xyXG4gICAgfVxyXG4gIH1dO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVYaHIoKSB7XHJcbiAgICByZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xyXG59XHJcblxyXG4vKipcclxuICogQG5nZG9jIHNlcnZpY2VcclxuICogQG5hbWUgJGh0dHBCYWNrZW5kXHJcbiAqIEByZXF1aXJlcyAkd2luZG93XHJcbiAqIEByZXF1aXJlcyAkZG9jdW1lbnRcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEhUVFAgYmFja2VuZCB1c2VkIGJ5IHRoZSB7QGxpbmsgbmcuJGh0dHAgc2VydmljZX0gdGhhdCBkZWxlZ2F0ZXMgdG9cclxuICogWE1MSHR0cFJlcXVlc3Qgb2JqZWN0IG9yIEpTT05QIGFuZCBkZWFscyB3aXRoIGJyb3dzZXIgaW5jb21wYXRpYmlsaXRpZXMuXHJcbiAqXHJcbiAqIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byB1c2UgdGhpcyBzZXJ2aWNlIGRpcmVjdGx5LCBpbnN0ZWFkIHVzZSB0aGUgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uczpcclxuICoge0BsaW5rIG5nLiRodHRwICRodHRwfSBvciB7QGxpbmsgbmdSZXNvdXJjZS4kcmVzb3VyY2UgJHJlc291cmNlfS5cclxuICpcclxuICogRHVyaW5nIHRlc3RpbmcgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBzd2FwcGVkIHdpdGgge0BsaW5rIG5nTW9jay4kaHR0cEJhY2tlbmQgbW9ja1xyXG4gKiAkaHR0cEJhY2tlbmR9IHdoaWNoIGNhbiBiZSB0cmFpbmVkIHdpdGggcmVzcG9uc2VzLlxyXG4gKi9cclxuZnVuY3Rpb24gJEh0dHBCYWNrZW5kUHJvdmlkZXIoKSB7XHJcbiAgdGhpcy4kZ2V0ID0gWyckYnJvd3NlcicsICckd2luZG93JywgJyRkb2N1bWVudCcsIGZ1bmN0aW9uKCRicm93c2VyLCAkd2luZG93LCAkZG9jdW1lbnQpIHtcclxuICAgIHJldHVybiBjcmVhdGVIdHRwQmFja2VuZCgkYnJvd3NlciwgY3JlYXRlWGhyLCAkYnJvd3Nlci5kZWZlciwgJHdpbmRvdy5hbmd1bGFyLmNhbGxiYWNrcywgJGRvY3VtZW50WzBdKTtcclxuICB9XTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlSHR0cEJhY2tlbmQoJGJyb3dzZXIsIGNyZWF0ZVhociwgJGJyb3dzZXJEZWZlciwgY2FsbGJhY2tzLCByYXdEb2N1bWVudCkge1xyXG4gIC8vIFRPRE8odm9qdGEpOiBmaXggdGhlIHNpZ25hdHVyZVxyXG4gIHJldHVybiBmdW5jdGlvbihtZXRob2QsIHVybCwgcG9zdCwgY2FsbGJhY2ssIGhlYWRlcnMsIHRpbWVvdXQsIHdpdGhDcmVkZW50aWFscywgcmVzcG9uc2VUeXBlKSB7XHJcbiAgICAkYnJvd3Nlci4kJGluY091dHN0YW5kaW5nUmVxdWVzdENvdW50KCk7XHJcbiAgICB1cmwgPSB1cmwgfHwgJGJyb3dzZXIudXJsKCk7XHJcblxyXG4gICAgaWYgKGxvd2VyY2FzZShtZXRob2QpID09ICdqc29ucCcpIHtcclxuICAgICAgdmFyIGNhbGxiYWNrSWQgPSAnXycgKyAoY2FsbGJhY2tzLmNvdW50ZXIrKykudG9TdHJpbmcoMzYpO1xyXG4gICAgICBjYWxsYmFja3NbY2FsbGJhY2tJZF0gPSBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgY2FsbGJhY2tzW2NhbGxiYWNrSWRdLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIGNhbGxiYWNrc1tjYWxsYmFja0lkXS5jYWxsZWQgPSB0cnVlO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgdmFyIGpzb25wRG9uZSA9IGpzb25wUmVxKHVybC5yZXBsYWNlKCdKU09OX0NBTExCQUNLJywgJ2FuZ3VsYXIuY2FsbGJhY2tzLicgKyBjYWxsYmFja0lkKSxcclxuICAgICAgICAgIGNhbGxiYWNrSWQsIGZ1bmN0aW9uKHN0YXR1cywgdGV4dCkge1xyXG4gICAgICAgIGNvbXBsZXRlUmVxdWVzdChjYWxsYmFjaywgc3RhdHVzLCBjYWxsYmFja3NbY2FsbGJhY2tJZF0uZGF0YSwgXCJcIiwgdGV4dCk7XHJcbiAgICAgICAgY2FsbGJhY2tzW2NhbGxiYWNrSWRdID0gbm9vcDtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgdmFyIHhociA9IGNyZWF0ZVhocigpO1xyXG5cclxuICAgICAgeGhyLm9wZW4obWV0aG9kLCB1cmwsIHRydWUpO1xyXG4gICAgICBmb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcclxuICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xyXG4gICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uIHJlcXVlc3RMb2FkZWQoKSB7XHJcbiAgICAgICAgdmFyIHN0YXR1c1RleHQgPSB4aHIuc3RhdHVzVGV4dCB8fCAnJztcclxuXHJcbiAgICAgICAgLy8gcmVzcG9uc2VUZXh0IGlzIHRoZSBvbGQtc2Nob29sIHdheSBvZiByZXRyaWV2aW5nIHJlc3BvbnNlIChzdXBwb3J0ZWQgYnkgSUU4ICYgOSlcclxuICAgICAgICAvLyByZXNwb25zZS9yZXNwb25zZVR5cGUgcHJvcGVydGllcyB3ZXJlIGludHJvZHVjZWQgaW4gWEhSIExldmVsMiBzcGVjIChzdXBwb3J0ZWQgYnkgSUUxMClcclxuICAgICAgICB2YXIgcmVzcG9uc2UgPSAoJ3Jlc3BvbnNlJyBpbiB4aHIpID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dDtcclxuXHJcbiAgICAgICAgLy8gbm9ybWFsaXplIElFOSBidWcgKGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzE0NTApXHJcbiAgICAgICAgdmFyIHN0YXR1cyA9IHhoci5zdGF0dXMgPT09IDEyMjMgPyAyMDQgOiB4aHIuc3RhdHVzO1xyXG5cclxuICAgICAgICAvLyBmaXggc3RhdHVzIGNvZGUgd2hlbiBpdCBpcyAwICgwIHN0YXR1cyBpcyB1bmRvY3VtZW50ZWQpLlxyXG4gICAgICAgIC8vIE9jY3VycyB3aGVuIGFjY2Vzc2luZyBmaWxlIHJlc291cmNlcyBvciBvbiBBbmRyb2lkIDQuMSBzdG9jayBicm93c2VyXHJcbiAgICAgICAgLy8gd2hpbGUgcmV0cmlldmluZyBmaWxlcyBmcm9tIGFwcGxpY2F0aW9uIGNhY2hlLlxyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IDApIHtcclxuICAgICAgICAgIHN0YXR1cyA9IHJlc3BvbnNlID8gMjAwIDogdXJsUmVzb2x2ZSh1cmwpLnByb3RvY29sID09ICdmaWxlJyA/IDQwNCA6IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb21wbGV0ZVJlcXVlc3QoY2FsbGJhY2ssXHJcbiAgICAgICAgICAgIHN0YXR1cyxcclxuICAgICAgICAgICAgcmVzcG9uc2UsXHJcbiAgICAgICAgICAgIHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSxcclxuICAgICAgICAgICAgc3RhdHVzVGV4dCk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB2YXIgcmVxdWVzdEVycm9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gVGhlIHJlc3BvbnNlIGlzIGFsd2F5cyBlbXB0eVxyXG4gICAgICAgIC8vIFNlZSBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtZXJyb3Itc3RlcHMgYW5kIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW5ldHdvcmstZXJyb3JcclxuICAgICAgICBjb21wbGV0ZVJlcXVlc3QoY2FsbGJhY2ssIC0xLCBudWxsLCBudWxsLCAnJyk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB4aHIub25lcnJvciA9IHJlcXVlc3RFcnJvcjtcclxuICAgICAgeGhyLm9uYWJvcnQgPSByZXF1ZXN0RXJyb3I7XHJcblxyXG4gICAgICBpZiAod2l0aENyZWRlbnRpYWxzKSB7XHJcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChyZXNwb25zZVR5cGUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvLyBXZWJLaXQgYWRkZWQgc3VwcG9ydCBmb3IgdGhlIGpzb24gcmVzcG9uc2VUeXBlIHZhbHVlIG9uIDA5LzAzLzIwMTNcclxuICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY0OC4gVmVyc2lvbnMgb2YgU2FmYXJpIHByaW9yIHRvIDcgYXJlXHJcbiAgICAgICAgICAvLyBrbm93biB0byB0aHJvdyB3aGVuIHNldHRpbmcgdGhlIHZhbHVlIFwianNvblwiIGFzIHRoZSByZXNwb25zZSB0eXBlLiBPdGhlciBvbGRlclxyXG4gICAgICAgICAgLy8gYnJvd3NlcnMgaW1wbGVtZW50aW5nIHRoZSByZXNwb25zZVR5cGVcclxuICAgICAgICAgIC8vXHJcbiAgICAgICAgICAvLyBUaGUganNvbiByZXNwb25zZSB0eXBlIGNhbiBiZSBpZ25vcmVkIGlmIG5vdCBzdXBwb3J0ZWQsIGJlY2F1c2UgSlNPTiBwYXlsb2FkcyBhcmVcclxuICAgICAgICAgIC8vIHBhcnNlZCBvbiB0aGUgY2xpZW50LXNpZGUgcmVnYXJkbGVzcy5cclxuICAgICAgICAgIGlmIChyZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgeGhyLnNlbmQocG9zdCB8fCBudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGltZW91dCA+IDApIHtcclxuICAgICAgdmFyIHRpbWVvdXRJZCA9ICRicm93c2VyRGVmZXIodGltZW91dFJlcXVlc3QsIHRpbWVvdXQpO1xyXG4gICAgfSBlbHNlIGlmIChpc1Byb21pc2VMaWtlKHRpbWVvdXQpKSB7XHJcbiAgICAgIHRpbWVvdXQudGhlbih0aW1lb3V0UmVxdWVzdCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIHRpbWVvdXRSZXF1ZXN0KCkge1xyXG4gICAgICBqc29ucERvbmUgJiYganNvbnBEb25lKCk7XHJcbiAgICAgIHhociAmJiB4aHIuYWJvcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjb21wbGV0ZVJlcXVlc3QoY2FsbGJhY2ssIHN0YXR1cywgcmVzcG9uc2UsIGhlYWRlcnNTdHJpbmcsIHN0YXR1c1RleHQpIHtcclxuICAgICAgLy8gY2FuY2VsIHRpbWVvdXQgYW5kIHN1YnNlcXVlbnQgdGltZW91dCBwcm9taXNlIHJlc29sdXRpb25cclxuICAgICAgdGltZW91dElkICYmICRicm93c2VyRGVmZXIuY2FuY2VsKHRpbWVvdXRJZCk7XHJcbiAgICAgIGpzb25wRG9uZSA9IHhociA9IG51bGw7XHJcblxyXG4gICAgICBjYWxsYmFjayhzdGF0dXMsIHJlc3BvbnNlLCBoZWFkZXJzU3RyaW5nLCBzdGF0dXNUZXh0KTtcclxuICAgICAgJGJyb3dzZXIuJCRjb21wbGV0ZU91dHN0YW5kaW5nUmVxdWVzdChub29wKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBmdW5jdGlvbiBqc29ucFJlcSh1cmwsIGNhbGxiYWNrSWQsIGRvbmUpIHtcclxuICAgIC8vIHdlIGNhbid0IHVzZSBqUXVlcnkvanFMaXRlIGhlcmUgYmVjYXVzZSBqUXVlcnkgZG9lcyBjcmF6eSBzaGl0IHdpdGggc2NyaXB0IGVsZW1lbnRzLCBlLmcuOlxyXG4gICAgLy8gLSBmZXRjaGVzIGxvY2FsIHNjcmlwdHMgdmlhIFhIUiBhbmQgZXZhbHMgdGhlbVxyXG4gICAgLy8gLSBhZGRzIGFuZCBpbW1lZGlhdGVseSByZW1vdmVzIHNjcmlwdCBlbGVtZW50cyBmcm9tIHRoZSBkb2N1bWVudFxyXG4gICAgdmFyIHNjcmlwdCA9IHJhd0RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLCBjYWxsYmFjayA9IG51bGw7XHJcbiAgICBzY3JpcHQudHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCI7XHJcbiAgICBzY3JpcHQuc3JjID0gdXJsO1xyXG4gICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcclxuXHJcbiAgICBjYWxsYmFjayA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXJGbihzY3JpcHQsIFwibG9hZFwiLCBjYWxsYmFjayk7XHJcbiAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXJGbihzY3JpcHQsIFwiZXJyb3JcIiwgY2FsbGJhY2spO1xyXG4gICAgICByYXdEb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNjcmlwdCk7XHJcbiAgICAgIHNjcmlwdCA9IG51bGw7XHJcbiAgICAgIHZhciBzdGF0dXMgPSAtMTtcclxuICAgICAgdmFyIHRleHQgPSBcInVua25vd25cIjtcclxuXHJcbiAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgIGlmIChldmVudC50eXBlID09PSBcImxvYWRcIiAmJiAhY2FsbGJhY2tzW2NhbGxiYWNrSWRdLmNhbGxlZCkge1xyXG4gICAgICAgICAgZXZlbnQgPSB7IHR5cGU6IFwiZXJyb3JcIiB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXh0ID0gZXZlbnQudHlwZTtcclxuICAgICAgICBzdGF0dXMgPSBldmVudC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkb25lKSB7XHJcbiAgICAgICAgZG9uZShzdGF0dXMsIHRleHQpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGFkZEV2ZW50TGlzdGVuZXJGbihzY3JpcHQsIFwibG9hZFwiLCBjYWxsYmFjayk7XHJcbiAgICBhZGRFdmVudExpc3RlbmVyRm4oc2NyaXB0LCBcImVycm9yXCIsIGNhbGxiYWNrKTtcclxuICAgIHJhd0RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcclxuICAgIHJldHVybiBjYWxsYmFjaztcclxuICB9XHJcbn1cclxuXHJcbnZhciAkaW50ZXJwb2xhdGVNaW5FcnIgPSBtaW5FcnIoJyRpbnRlcnBvbGF0ZScpO1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBwcm92aWRlclxyXG4gKiBAbmFtZSAkaW50ZXJwb2xhdGVQcm92aWRlclxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogVXNlZCBmb3IgY29uZmlndXJpbmcgdGhlIGludGVycG9sYXRpb24gbWFya3VwLiBEZWZhdWx0cyB0byBge3tgIGFuZCBgfX1gLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG48ZXhhbXBsZSBtb2R1bGU9XCJjdXN0b21JbnRlcnBvbGF0aW9uQXBwXCI+XHJcbjxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbjxzY3JpcHQ+XHJcbiAgdmFyIGN1c3RvbUludGVycG9sYXRpb25BcHAgPSBhbmd1bGFyLm1vZHVsZSgnY3VzdG9tSW50ZXJwb2xhdGlvbkFwcCcsIFtdKTtcclxuXHJcbiAgY3VzdG9tSW50ZXJwb2xhdGlvbkFwcC5jb25maWcoZnVuY3Rpb24oJGludGVycG9sYXRlUHJvdmlkZXIpIHtcclxuICAgICRpbnRlcnBvbGF0ZVByb3ZpZGVyLnN0YXJ0U3ltYm9sKCcvLycpO1xyXG4gICAgJGludGVycG9sYXRlUHJvdmlkZXIuZW5kU3ltYm9sKCcvLycpO1xyXG4gIH0pO1xyXG5cclxuXHJcbiAgY3VzdG9tSW50ZXJwb2xhdGlvbkFwcC5jb250cm9sbGVyKCdEZW1vQ29udHJvbGxlcicsIGZ1bmN0aW9uKCkge1xyXG4gICAgICB0aGlzLmxhYmVsID0gXCJUaGlzIGJpbmRpbmcgaXMgYnJvdWdodCB5b3UgYnkgLy8gaW50ZXJwb2xhdGlvbiBzeW1ib2xzLlwiO1xyXG4gIH0pO1xyXG48L3NjcmlwdD5cclxuPGRpdiBuZy1hcHA9XCJBcHBcIiBuZy1jb250cm9sbGVyPVwiRGVtb0NvbnRyb2xsZXIgYXMgZGVtb1wiPlxyXG4gICAgLy9kZW1vLmxhYmVsLy9cclxuPC9kaXY+XHJcbjwvZmlsZT5cclxuPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gIGl0KCdzaG91bGQgaW50ZXJwb2xhdGUgYmluZGluZyB3aXRoIGN1c3RvbSBzeW1ib2xzJywgZnVuY3Rpb24oKSB7XHJcbiAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCdkZW1vLmxhYmVsJykpLmdldFRleHQoKSkudG9CZSgnVGhpcyBiaW5kaW5nIGlzIGJyb3VnaHQgeW91IGJ5IC8vIGludGVycG9sYXRpb24gc3ltYm9scy4nKTtcclxuICB9KTtcclxuPC9maWxlPlxyXG48L2V4YW1wbGU+XHJcbiAqL1xyXG5mdW5jdGlvbiAkSW50ZXJwb2xhdGVQcm92aWRlcigpIHtcclxuICB2YXIgc3RhcnRTeW1ib2wgPSAne3snO1xyXG4gIHZhciBlbmRTeW1ib2wgPSAnfX0nO1xyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgJGludGVycG9sYXRlUHJvdmlkZXIjc3RhcnRTeW1ib2xcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBTeW1ib2wgdG8gZGVub3RlIHN0YXJ0IG9mIGV4cHJlc3Npb24gaW4gdGhlIGludGVycG9sYXRlZCBzdHJpbmcuIERlZmF1bHRzIHRvIGB7e2AuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZz19IHZhbHVlIG5ldyB2YWx1ZSB0byBzZXQgdGhlIHN0YXJ0aW5nIHN5bWJvbCB0by5cclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfHNlbGZ9IFJldHVybnMgdGhlIHN5bWJvbCB3aGVuIHVzZWQgYXMgZ2V0dGVyIGFuZCBzZWxmIGlmIHVzZWQgYXMgc2V0dGVyLlxyXG4gICAqL1xyXG4gIHRoaXMuc3RhcnRTeW1ib2wgPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHN0YXJ0U3ltYm9sID0gdmFsdWU7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHN0YXJ0U3ltYm9sO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSAkaW50ZXJwb2xhdGVQcm92aWRlciNlbmRTeW1ib2xcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBTeW1ib2wgdG8gZGVub3RlIHRoZSBlbmQgb2YgZXhwcmVzc2lvbiBpbiB0aGUgaW50ZXJwb2xhdGVkIHN0cmluZy4gRGVmYXVsdHMgdG8gYH19YC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gdmFsdWUgbmV3IHZhbHVlIHRvIHNldCB0aGUgZW5kaW5nIHN5bWJvbCB0by5cclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfHNlbGZ9IFJldHVybnMgdGhlIHN5bWJvbCB3aGVuIHVzZWQgYXMgZ2V0dGVyIGFuZCBzZWxmIGlmIHVzZWQgYXMgc2V0dGVyLlxyXG4gICAqL1xyXG4gIHRoaXMuZW5kU3ltYm9sID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBlbmRTeW1ib2wgPSB2YWx1ZTtcclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZW5kU3ltYm9sO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG5cclxuICB0aGlzLiRnZXQgPSBbJyRwYXJzZScsICckZXhjZXB0aW9uSGFuZGxlcicsICckc2NlJywgZnVuY3Rpb24oJHBhcnNlLCAkZXhjZXB0aW9uSGFuZGxlciwgJHNjZSkge1xyXG4gICAgdmFyIHN0YXJ0U3ltYm9sTGVuZ3RoID0gc3RhcnRTeW1ib2wubGVuZ3RoLFxyXG4gICAgICAgIGVuZFN5bWJvbExlbmd0aCA9IGVuZFN5bWJvbC5sZW5ndGgsXHJcbiAgICAgICAgZXNjYXBlZFN0YXJ0UmVnZXhwID0gbmV3IFJlZ0V4cChzdGFydFN5bWJvbC5yZXBsYWNlKC8uL2csIGVzY2FwZSksICdnJyksXHJcbiAgICAgICAgZXNjYXBlZEVuZFJlZ2V4cCA9IG5ldyBSZWdFeHAoZW5kU3ltYm9sLnJlcGxhY2UoLy4vZywgZXNjYXBlKSwgJ2cnKTtcclxuXHJcbiAgICBmdW5jdGlvbiBlc2NhcGUoY2gpIHtcclxuICAgICAgcmV0dXJuICdcXFxcXFxcXFxcXFwnICsgY2g7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmdkb2Mgc2VydmljZVxyXG4gICAgICogQG5hbWUgJGludGVycG9sYXRlXHJcbiAgICAgKiBAa2luZCBmdW5jdGlvblxyXG4gICAgICpcclxuICAgICAqIEByZXF1aXJlcyAkcGFyc2VcclxuICAgICAqIEByZXF1aXJlcyAkc2NlXHJcbiAgICAgKlxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKlxyXG4gICAgICogQ29tcGlsZXMgYSBzdHJpbmcgd2l0aCBtYXJrdXAgaW50byBhbiBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uLiBUaGlzIHNlcnZpY2UgaXMgdXNlZCBieSB0aGVcclxuICAgICAqIEhUTUwge0BsaW5rIG5nLiRjb21waWxlICRjb21waWxlfSBzZXJ2aWNlIGZvciBkYXRhIGJpbmRpbmcuIFNlZVxyXG4gICAgICoge0BsaW5rIG5nLiRpbnRlcnBvbGF0ZVByb3ZpZGVyICRpbnRlcnBvbGF0ZVByb3ZpZGVyfSBmb3IgY29uZmlndXJpbmcgdGhlXHJcbiAgICAgKiBpbnRlcnBvbGF0aW9uIG1hcmt1cC5cclxuICAgICAqXHJcbiAgICAgKlxyXG4gICAgICogYGBganNcclxuICAgICAqICAgdmFyICRpbnRlcnBvbGF0ZSA9IC4uLjsgLy8gaW5qZWN0ZWRcclxuICAgICAqICAgdmFyIGV4cCA9ICRpbnRlcnBvbGF0ZSgnSGVsbG8ge3tuYW1lIHwgdXBwZXJjYXNlfX0hJyk7XHJcbiAgICAgKiAgIGV4cGVjdChleHAoe25hbWU6J0FuZ3VsYXInfSkudG9FcXVhbCgnSGVsbG8gQU5HVUxBUiEnKTtcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqIGAkaW50ZXJwb2xhdGVgIHRha2VzIGFuIG9wdGlvbmFsIGZvdXJ0aCBhcmd1bWVudCwgYGFsbE9yTm90aGluZ2AuIElmIGBhbGxPck5vdGhpbmdgIGlzXHJcbiAgICAgKiBgdHJ1ZWAsIHRoZSBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGB1bmRlZmluZWRgIHVubGVzcyBhbGwgZW1iZWRkZWQgZXhwcmVzc2lvbnNcclxuICAgICAqIGV2YWx1YXRlIHRvIGEgdmFsdWUgb3RoZXIgdGhhbiBgdW5kZWZpbmVkYC5cclxuICAgICAqXHJcbiAgICAgKiBgYGBqc1xyXG4gICAgICogICB2YXIgJGludGVycG9sYXRlID0gLi4uOyAvLyBpbmplY3RlZFxyXG4gICAgICogICB2YXIgY29udGV4dCA9IHtncmVldGluZzogJ0hlbGxvJywgbmFtZTogdW5kZWZpbmVkIH07XHJcbiAgICAgKlxyXG4gICAgICogICAvLyBkZWZhdWx0IFwiZm9yZ2l2aW5nXCIgbW9kZVxyXG4gICAgICogICB2YXIgZXhwID0gJGludGVycG9sYXRlKCd7e2dyZWV0aW5nfX0ge3tuYW1lfX0hJyk7XHJcbiAgICAgKiAgIGV4cGVjdChleHAoY29udGV4dCkpLnRvRXF1YWwoJ0hlbGxvICEnKTtcclxuICAgICAqXHJcbiAgICAgKiAgIC8vIFwiYWxsT3JOb3RoaW5nXCIgbW9kZVxyXG4gICAgICogICBleHAgPSAkaW50ZXJwb2xhdGUoJ3t7Z3JlZXRpbmd9fSB7e25hbWV9fSEnLCBmYWxzZSwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgKiAgIGV4cGVjdChleHAoY29udGV4dCkpLnRvQmVVbmRlZmluZWQoKTtcclxuICAgICAqICAgY29udGV4dC5uYW1lID0gJ0FuZ3VsYXInO1xyXG4gICAgICogICBleHBlY3QoZXhwKGNvbnRleHQpKS50b0VxdWFsKCdIZWxsbyBBbmd1bGFyIScpO1xyXG4gICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogYGFsbE9yTm90aGluZ2AgaXMgdXNlZnVsIGZvciBpbnRlcnBvbGF0aW5nIFVSTHMuIGBuZ1NyY2AgYW5kIGBuZ1NyY3NldGAgdXNlIHRoaXMgYmVoYXZpb3IuXHJcbiAgICAgKlxyXG4gICAgICogIyMjI0VzY2FwZWQgSW50ZXJwb2xhdGlvblxyXG4gICAgICogJGludGVycG9sYXRlIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvciBlc2NhcGluZyBpbnRlcnBvbGF0aW9uIG1hcmtlcnMuIFN0YXJ0IGFuZCBlbmQgbWFya2Vyc1xyXG4gICAgICogY2FuIGJlIGVzY2FwZWQgYnkgcHJlY2VkaW5nIGVhY2ggb2YgdGhlaXIgY2hhcmFjdGVycyB3aXRoIGEgUkVWRVJTRSBTT0xJRFVTIFUrMDA1QyAoYmFja3NsYXNoKS5cclxuICAgICAqIEl0IHdpbGwgYmUgcmVuZGVyZWQgYXMgYSByZWd1bGFyIHN0YXJ0L2VuZCBtYXJrZXIsIGFuZCB3aWxsIG5vdCBiZSBpbnRlcnByZXRlZCBhcyBhbiBleHByZXNzaW9uXHJcbiAgICAgKiBvciBiaW5kaW5nLlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgZW5hYmxlcyB3ZWItc2VydmVycyB0byBwcmV2ZW50IHNjcmlwdCBpbmplY3Rpb24gYXR0YWNrcyBhbmQgZGVmYWNpbmcgYXR0YWNrcywgdG8gc29tZVxyXG4gICAgICogZGVncmVlLCB3aGlsZSBhbHNvIGVuYWJsaW5nIGNvZGUgZXhhbXBsZXMgdG8gd29yayB3aXRob3V0IHJlbHlpbmcgb24gdGhlXHJcbiAgICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nTm9uQmluZGFibGUgbmdOb25CaW5kYWJsZX0gZGlyZWN0aXZlLlxyXG4gICAgICpcclxuICAgICAqICoqRm9yIHNlY3VyaXR5IHB1cnBvc2VzLCBpdCBpcyBzdHJvbmdseSBlbmNvdXJhZ2VkIHRoYXQgd2ViIHNlcnZlcnMgZXNjYXBlIHVzZXItc3VwcGxpZWQgZGF0YSxcclxuICAgICAqIHJlcGxhY2luZyBhbmdsZSBicmFja2V0cyAoJmx0OywgJmd0Oykgd2l0aCAmYW1wO2x0OyBhbmQgJmFtcDtndDsgcmVzcGVjdGl2ZWx5LCBhbmQgcmVwbGFjaW5nIGFsbFxyXG4gICAgICogaW50ZXJwb2xhdGlvbiBzdGFydC9lbmQgbWFya2VycyB3aXRoIHRoZWlyIGVzY2FwZWQgY291bnRlcnBhcnRzLioqXHJcbiAgICAgKlxyXG4gICAgICogRXNjYXBlZCBpbnRlcnBvbGF0aW9uIG1hcmtlcnMgYXJlIG9ubHkgcmVwbGFjZWQgd2l0aCB0aGUgYWN0dWFsIGludGVycG9sYXRpb24gbWFya2VycyBpbiByZW5kZXJlZFxyXG4gICAgICogb3V0cHV0IHdoZW4gdGhlICRpbnRlcnBvbGF0ZSBzZXJ2aWNlIHByb2Nlc3NlcyB0aGUgdGV4dC4gU28sIGZvciBIVE1MIGVsZW1lbnRzIGludGVycG9sYXRlZFxyXG4gICAgICogYnkge0BsaW5rIG5nLiRjb21waWxlICRjb21waWxlfSwgb3Igb3RoZXJ3aXNlIGludGVycG9sYXRlZCB3aXRoIHRoZSBgbXVzdEhhdmVFeHByZXNzaW9uYCBwYXJhbWV0ZXJcclxuICAgICAqIHNldCB0byBgdHJ1ZWAsIHRoZSBpbnRlcnBvbGF0ZWQgdGV4dCBtdXN0IGNvbnRhaW4gYW4gdW5lc2NhcGVkIGludGVycG9sYXRpb24gZXhwcmVzc2lvbi4gQXMgc3VjaCxcclxuICAgICAqIHRoaXMgaXMgdHlwaWNhbGx5IHVzZWZ1bCBvbmx5IHdoZW4gdXNlci1kYXRhIGlzIHVzZWQgaW4gcmVuZGVyaW5nIGEgdGVtcGxhdGUgZnJvbSB0aGUgc2VydmVyLCBvclxyXG4gICAgICogd2hlbiBvdGhlcndpc2UgdW50cnVzdGVkIGRhdGEgaXMgdXNlZCBieSBhIGRpcmVjdGl2ZS5cclxuICAgICAqXHJcbiAgICAgKiA8ZXhhbXBsZT5cclxuICAgICAqICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICogICAgPGRpdiBuZy1pbml0PVwidXNlcm5hbWU9J0EgdXNlcidcIj5cclxuICAgICAqICAgICAgPHAgbmctaW5pdD1cImFwcHRpdGxlPSdFc2NhcGluZyBkZW1vJ1wiPnt7YXBwdGl0bGV9fTogXFx7XFx7IHVzZXJuYW1lID0gXCJkZWZhY2VkIHZhbHVlXCI7IFxcfVxcfVxyXG4gICAgICogICAgICAgIDwvcD5cclxuICAgICAqICAgICAgPHA+PHN0cm9uZz57e3VzZXJuYW1lfX08L3N0cm9uZz4gYXR0ZW1wdHMgdG8gaW5qZWN0IGNvZGUgd2hpY2ggd2lsbCBkZWZhY2UgdGhlXHJcbiAgICAgKiAgICAgICAgYXBwbGljYXRpb24sIGJ1dCBmYWlscyB0byBhY2NvbXBsaXNoIHRoZWlyIHRhc2ssIGJlY2F1c2UgdGhlIHNlcnZlciBoYXMgY29ycmVjdGx5XHJcbiAgICAgKiAgICAgICAgZXNjYXBlZCB0aGUgaW50ZXJwb2xhdGlvbiBzdGFydC9lbmQgbWFya2VycyB3aXRoIFJFVkVSU0UgU09MSURVUyBVKzAwNUMgKGJhY2tzbGFzaClcclxuICAgICAqICAgICAgICBjaGFyYWN0ZXJzLjwvcD5cclxuICAgICAqICAgICAgPHA+SW5zdGVhZCwgdGhlIHJlc3VsdCBvZiB0aGUgYXR0ZW1wdGVkIHNjcmlwdCBpbmplY3Rpb24gaXMgdmlzaWJsZSwgYW5kIGNhbiBiZSByZW1vdmVkXHJcbiAgICAgKiAgICAgICAgZnJvbSB0aGUgZGF0YWJhc2UgYnkgYW4gYWRtaW5pc3RyYXRvci48L3A+XHJcbiAgICAgKiAgICA8L2Rpdj5cclxuICAgICAqICA8L2ZpbGU+XHJcbiAgICAgKiA8L2V4YW1wbGU+XHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGhlIHRleHQgd2l0aCBtYXJrdXAgdG8gaW50ZXJwb2xhdGUuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBtdXN0SGF2ZUV4cHJlc3Npb24gaWYgc2V0IHRvIHRydWUgdGhlbiB0aGUgaW50ZXJwb2xhdGlvbiBzdHJpbmcgbXVzdCBoYXZlXHJcbiAgICAgKiAgICBlbWJlZGRlZCBleHByZXNzaW9uIGluIG9yZGVyIHRvIHJldHVybiBhbiBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uLiBTdHJpbmdzIHdpdGggbm9cclxuICAgICAqICAgIGVtYmVkZGVkIGV4cHJlc3Npb24gd2lsbCByZXR1cm4gbnVsbCBmb3IgdGhlIGludGVycG9sYXRpb24gZnVuY3Rpb24uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZz19IHRydXN0ZWRDb250ZXh0IHdoZW4gcHJvdmlkZWQsIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBwYXNzZXMgdGhlIGludGVycG9sYXRlZFxyXG4gICAgICogICAgcmVzdWx0IHRocm91Z2gge0BsaW5rIG5nLiRzY2UjZ2V0VHJ1c3RlZCAkc2NlLmdldFRydXN0ZWQoaW50ZXJwb2xhdGVkUmVzdWx0LFxyXG4gICAgICogICAgdHJ1c3RlZENvbnRleHQpfSBiZWZvcmUgcmV0dXJuaW5nIGl0LiAgUmVmZXIgdG8gdGhlIHtAbGluayBuZy4kc2NlICRzY2V9IHNlcnZpY2UgdGhhdFxyXG4gICAgICogICAgcHJvdmlkZXMgU3RyaWN0IENvbnRleHR1YWwgRXNjYXBpbmcgZm9yIGRldGFpbHMuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBhbGxPck5vdGhpbmcgaWYgYHRydWVgLCB0aGVuIHRoZSByZXR1cm5lZCBmdW5jdGlvbiByZXR1cm5zIHVuZGVmaW5lZFxyXG4gICAgICogICAgdW5sZXNzIGFsbCBlbWJlZGRlZCBleHByZXNzaW9ucyBldmFsdWF0ZSB0byBhIHZhbHVlIG90aGVyIHRoYW4gYHVuZGVmaW5lZGAuXHJcbiAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24oY29udGV4dCl9IGFuIGludGVycG9sYXRpb24gZnVuY3Rpb24gd2hpY2ggaXMgdXNlZCB0byBjb21wdXRlIHRoZVxyXG4gICAgICogICAgaW50ZXJwb2xhdGVkIHN0cmluZy4gVGhlIGZ1bmN0aW9uIGhhcyB0aGVzZSBwYXJhbWV0ZXJzOlxyXG4gICAgICpcclxuICAgICAqIC0gYGNvbnRleHRgOiBldmFsdWF0aW9uIGNvbnRleHQgZm9yIGFsbCBleHByZXNzaW9ucyBlbWJlZGRlZCBpbiB0aGUgaW50ZXJwb2xhdGVkIHRleHRcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gJGludGVycG9sYXRlKHRleHQsIG11c3RIYXZlRXhwcmVzc2lvbiwgdHJ1c3RlZENvbnRleHQsIGFsbE9yTm90aGluZykge1xyXG4gICAgICBhbGxPck5vdGhpbmcgPSAhIWFsbE9yTm90aGluZztcclxuICAgICAgdmFyIHN0YXJ0SW5kZXgsXHJcbiAgICAgICAgICBlbmRJbmRleCxcclxuICAgICAgICAgIGluZGV4ID0gMCxcclxuICAgICAgICAgIGV4cHJlc3Npb25zID0gW10sXHJcbiAgICAgICAgICBwYXJzZUZucyA9IFtdLFxyXG4gICAgICAgICAgdGV4dExlbmd0aCA9IHRleHQubGVuZ3RoLFxyXG4gICAgICAgICAgZXhwLFxyXG4gICAgICAgICAgY29uY2F0ID0gW10sXHJcbiAgICAgICAgICBleHByZXNzaW9uUG9zaXRpb25zID0gW107XHJcblxyXG4gICAgICB3aGlsZSAoaW5kZXggPCB0ZXh0TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKCgoc3RhcnRJbmRleCA9IHRleHQuaW5kZXhPZihzdGFydFN5bWJvbCwgaW5kZXgpKSAhPSAtMSkgJiZcclxuICAgICAgICAgICAgICgoZW5kSW5kZXggPSB0ZXh0LmluZGV4T2YoZW5kU3ltYm9sLCBzdGFydEluZGV4ICsgc3RhcnRTeW1ib2xMZW5ndGgpKSAhPSAtMSkpIHtcclxuICAgICAgICAgIGlmIChpbmRleCAhPT0gc3RhcnRJbmRleCkge1xyXG4gICAgICAgICAgICBjb25jYXQucHVzaCh1bmVzY2FwZVRleHQodGV4dC5zdWJzdHJpbmcoaW5kZXgsIHN0YXJ0SW5kZXgpKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBleHAgPSB0ZXh0LnN1YnN0cmluZyhzdGFydEluZGV4ICsgc3RhcnRTeW1ib2xMZW5ndGgsIGVuZEluZGV4KTtcclxuICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goZXhwKTtcclxuICAgICAgICAgIHBhcnNlRm5zLnB1c2goJHBhcnNlKGV4cCwgcGFyc2VTdHJpbmdpZnlJbnRlcmNlcHRvcikpO1xyXG4gICAgICAgICAgaW5kZXggPSBlbmRJbmRleCArIGVuZFN5bWJvbExlbmd0aDtcclxuICAgICAgICAgIGV4cHJlc3Npb25Qb3NpdGlvbnMucHVzaChjb25jYXQubGVuZ3RoKTtcclxuICAgICAgICAgIGNvbmNhdC5wdXNoKCcnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gd2UgZGlkIG5vdCBmaW5kIGFuIGludGVycG9sYXRpb24sIHNvIHdlIGhhdmUgdG8gYWRkIHRoZSByZW1haW5kZXIgdG8gdGhlIHNlcGFyYXRvcnMgYXJyYXlcclxuICAgICAgICAgIGlmIChpbmRleCAhPT0gdGV4dExlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25jYXQucHVzaCh1bmVzY2FwZVRleHQodGV4dC5zdWJzdHJpbmcoaW5kZXgpKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENvbmNhdGVuYXRpbmcgZXhwcmVzc2lvbnMgbWFrZXMgaXQgaGFyZCB0byByZWFzb24gYWJvdXQgd2hldGhlciBzb21lIGNvbWJpbmF0aW9uIG9mXHJcbiAgICAgIC8vIGNvbmNhdGVuYXRlZCB2YWx1ZXMgYXJlIHVuc2FmZSB0byB1c2UgYW5kIGNvdWxkIGVhc2lseSBsZWFkIHRvIFhTUy4gIEJ5IHJlcXVpcmluZyB0aGF0IGFcclxuICAgICAgLy8gc2luZ2xlIGV4cHJlc3Npb24gYmUgdXNlZCBmb3IgaWZyYW1lW3NyY10sIG9iamVjdFtzcmNdLCBldGMuLCB3ZSBlbnN1cmUgdGhhdCB0aGUgdmFsdWVcclxuICAgICAgLy8gdGhhdCdzIHVzZWQgaXMgYXNzaWduZWQgb3IgY29uc3RydWN0ZWQgYnkgc29tZSBKUyBjb2RlIHNvbWV3aGVyZSB0aGF0IGlzIG1vcmUgdGVzdGFibGUgb3JcclxuICAgICAgLy8gbWFrZSBpdCBvYnZpb3VzIHRoYXQgeW91IGJvdW5kIHRoZSB2YWx1ZSB0byBzb21lIHVzZXIgY29udHJvbGxlZCB2YWx1ZS4gIFRoaXMgaGVscHMgcmVkdWNlXHJcbiAgICAgIC8vIHRoZSBsb2FkIHdoZW4gYXVkaXRpbmcgZm9yIFhTUyBpc3N1ZXMuXHJcbiAgICAgIGlmICh0cnVzdGVkQ29udGV4dCAmJiBjb25jYXQubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgdGhyb3cgJGludGVycG9sYXRlTWluRXJyKCdub2NvbmNhdCcsXHJcbiAgICAgICAgICAgICAgXCJFcnJvciB3aGlsZSBpbnRlcnBvbGF0aW5nOiB7MH1cXG5TdHJpY3QgQ29udGV4dHVhbCBFc2NhcGluZyBkaXNhbGxvd3MgXCIgK1xyXG4gICAgICAgICAgICAgIFwiaW50ZXJwb2xhdGlvbnMgdGhhdCBjb25jYXRlbmF0ZSBtdWx0aXBsZSBleHByZXNzaW9ucyB3aGVuIGEgdHJ1c3RlZCB2YWx1ZSBpcyBcIiArXHJcbiAgICAgICAgICAgICAgXCJyZXF1aXJlZC4gIFNlZSBodHRwOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZy4kc2NlXCIsIHRleHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIW11c3RIYXZlRXhwcmVzc2lvbiB8fCBleHByZXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgY29tcHV0ZSA9IGZ1bmN0aW9uKHZhbHVlcykge1xyXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZXhwcmVzc2lvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYWxsT3JOb3RoaW5nICYmIGlzVW5kZWZpbmVkKHZhbHVlc1tpXSkpIHJldHVybjtcclxuICAgICAgICAgICAgY29uY2F0W2V4cHJlc3Npb25Qb3NpdGlvbnNbaV1dID0gdmFsdWVzW2ldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGNvbmNhdC5qb2luKCcnKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgZ2V0VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydXN0ZWRDb250ZXh0ID9cclxuICAgICAgICAgICAgJHNjZS5nZXRUcnVzdGVkKHRydXN0ZWRDb250ZXh0LCB2YWx1ZSkgOlxyXG4gICAgICAgICAgICAkc2NlLnZhbHVlT2YodmFsdWUpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciBzdHJpbmdpZnkgPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsgLy8gbnVsbCB8fCB1bmRlZmluZWRcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcclxuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcclxuICAgICAgICAgICAgICB2YWx1ZSA9ICcnICsgdmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSB0b0pzb24odmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uIGludGVycG9sYXRpb25Gbihjb250ZXh0KSB7XHJcbiAgICAgICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICAgICAgdmFyIGlpID0gZXhwcmVzc2lvbnMubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KGlpKTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgZm9yICg7IGkgPCBpaTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gPSBwYXJzZUZuc1tpXShjb250ZXh0KTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHJldHVybiBjb21wdXRlKHZhbHVlcyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgIHZhciBuZXdFcnIgPSAkaW50ZXJwb2xhdGVNaW5FcnIoJ2ludGVycicsIFwiQ2FuJ3QgaW50ZXJwb2xhdGU6IHswfVxcbnsxfVwiLCB0ZXh0LFxyXG4gICAgICAgICAgICAgICAgICBlcnIudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIobmV3RXJyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0sIHtcclxuICAgICAgICAgIC8vIGFsbCBvZiB0aGVzZSBwcm9wZXJ0aWVzIGFyZSB1bmRvY3VtZW50ZWQgZm9yIG5vd1xyXG4gICAgICAgICAgZXhwOiB0ZXh0LCAvL2p1c3QgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCByZWd1bGFyIHdhdGNoZXJzIGNyZWF0ZWQgdmlhICR3YXRjaFxyXG4gICAgICAgICAgZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25zLFxyXG4gICAgICAgICAgJCR3YXRjaERlbGVnYXRlOiBmdW5jdGlvbihzY29wZSwgbGlzdGVuZXIsIG9iamVjdEVxdWFsaXR5KSB7XHJcbiAgICAgICAgICAgIHZhciBsYXN0VmFsdWU7XHJcbiAgICAgICAgICAgIHJldHVybiBzY29wZS4kd2F0Y2hHcm91cChwYXJzZUZucywgZnVuY3Rpb24gaW50ZXJwb2xhdGVGbldhdGNoZXIodmFsdWVzLCBvbGRWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICB2YXIgY3VyclZhbHVlID0gY29tcHV0ZSh2YWx1ZXMpO1xyXG4gICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBjdXJyVmFsdWUsIHZhbHVlcyAhPT0gb2xkVmFsdWVzID8gbGFzdFZhbHVlIDogY3VyclZhbHVlLCBzY29wZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IGN1cnJWYWx1ZTtcclxuICAgICAgICAgICAgfSwgb2JqZWN0RXF1YWxpdHkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiB1bmVzY2FwZVRleHQodGV4dCkge1xyXG4gICAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoZXNjYXBlZFN0YXJ0UmVnZXhwLCBzdGFydFN5bWJvbCkuXHJcbiAgICAgICAgICByZXBsYWNlKGVzY2FwZWRFbmRSZWdleHAsIGVuZFN5bWJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIHBhcnNlU3RyaW5naWZ5SW50ZXJjZXB0b3IodmFsdWUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdmFsdWUgPSBnZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgICByZXR1cm4gYWxsT3JOb3RoaW5nICYmICFpc0RlZmluZWQodmFsdWUpID8gdmFsdWUgOiBzdHJpbmdpZnkodmFsdWUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgdmFyIG5ld0VyciA9ICRpbnRlcnBvbGF0ZU1pbkVycignaW50ZXJyJywgXCJDYW4ndCBpbnRlcnBvbGF0ZTogezB9XFxuezF9XCIsIHRleHQsXHJcbiAgICAgICAgICAgIGVyci50b1N0cmluZygpKTtcclxuICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKG5ld0Vycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICogQG5hbWUgJGludGVycG9sYXRlI3N0YXJ0U3ltYm9sXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFN5bWJvbCB0byBkZW5vdGUgdGhlIHN0YXJ0IG9mIGV4cHJlc3Npb24gaW4gdGhlIGludGVycG9sYXRlZCBzdHJpbmcuIERlZmF1bHRzIHRvIGB7e2AuXHJcbiAgICAgKlxyXG4gICAgICogVXNlIHtAbGluayBuZy4kaW50ZXJwb2xhdGVQcm92aWRlciNzdGFydFN5bWJvbCBgJGludGVycG9sYXRlUHJvdmlkZXIuc3RhcnRTeW1ib2xgfSB0byBjaGFuZ2VcclxuICAgICAqIHRoZSBzeW1ib2wuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gc3RhcnQgc3ltYm9sLlxyXG4gICAgICovXHJcbiAgICAkaW50ZXJwb2xhdGUuc3RhcnRTeW1ib2wgPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHN0YXJ0U3ltYm9sO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgKiBAbmFtZSAkaW50ZXJwb2xhdGUjZW5kU3ltYm9sXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFN5bWJvbCB0byBkZW5vdGUgdGhlIGVuZCBvZiBleHByZXNzaW9uIGluIHRoZSBpbnRlcnBvbGF0ZWQgc3RyaW5nLiBEZWZhdWx0cyB0byBgfX1gLlxyXG4gICAgICpcclxuICAgICAqIFVzZSB7QGxpbmsgbmcuJGludGVycG9sYXRlUHJvdmlkZXIjZW5kU3ltYm9sIGAkaW50ZXJwb2xhdGVQcm92aWRlci5lbmRTeW1ib2xgfSB0byBjaGFuZ2VcclxuICAgICAqIHRoZSBzeW1ib2wuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gZW5kIHN5bWJvbC5cclxuICAgICAqL1xyXG4gICAgJGludGVycG9sYXRlLmVuZFN5bWJvbCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gZW5kU3ltYm9sO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gJGludGVycG9sYXRlO1xyXG4gIH1dO1xyXG59XHJcblxyXG5mdW5jdGlvbiAkSW50ZXJ2YWxQcm92aWRlcigpIHtcclxuICB0aGlzLiRnZXQgPSBbJyRyb290U2NvcGUnLCAnJHdpbmRvdycsICckcScsICckJHEnLFxyXG4gICAgICAgZnVuY3Rpb24oJHJvb3RTY29wZSwgICAkd2luZG93LCAgICRxLCAgICQkcSkge1xyXG4gICAgdmFyIGludGVydmFscyA9IHt9O1xyXG5cclxuXHJcbiAgICAgLyoqXHJcbiAgICAgICogQG5nZG9jIHNlcnZpY2VcclxuICAgICAgKiBAbmFtZSAkaW50ZXJ2YWxcclxuICAgICAgKlxyXG4gICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAqIEFuZ3VsYXIncyB3cmFwcGVyIGZvciBgd2luZG93LnNldEludGVydmFsYC4gVGhlIGBmbmAgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZXZlcnkgYGRlbGF5YFxyXG4gICAgICAqIG1pbGxpc2Vjb25kcy5cclxuICAgICAgKlxyXG4gICAgICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgcmVnaXN0ZXJpbmcgYW4gaW50ZXJ2YWwgZnVuY3Rpb24gaXMgYSBwcm9taXNlLiBUaGlzIHByb21pc2Ugd2lsbCBiZVxyXG4gICAgICAqIG5vdGlmaWVkIHVwb24gZWFjaCB0aWNrIG9mIHRoZSBpbnRlcnZhbCwgYW5kIHdpbGwgYmUgcmVzb2x2ZWQgYWZ0ZXIgYGNvdW50YCBpdGVyYXRpb25zLCBvclxyXG4gICAgICAqIHJ1biBpbmRlZmluaXRlbHkgaWYgYGNvdW50YCBpcyBub3QgZGVmaW5lZC4gVGhlIHZhbHVlIG9mIHRoZSBub3RpZmljYXRpb24gd2lsbCBiZSB0aGVcclxuICAgICAgKiBudW1iZXIgb2YgaXRlcmF0aW9ucyB0aGF0IGhhdmUgcnVuLlxyXG4gICAgICAqIFRvIGNhbmNlbCBhbiBpbnRlcnZhbCwgY2FsbCBgJGludGVydmFsLmNhbmNlbChwcm9taXNlKWAuXHJcbiAgICAgICpcclxuICAgICAgKiBJbiB0ZXN0cyB5b3UgY2FuIHVzZSB7QGxpbmsgbmdNb2NrLiRpbnRlcnZhbCNmbHVzaCBgJGludGVydmFsLmZsdXNoKG1pbGxpcylgfSB0b1xyXG4gICAgICAqIG1vdmUgZm9yd2FyZCBieSBgbWlsbGlzYCBtaWxsaXNlY29uZHMgYW5kIHRyaWdnZXIgYW55IGZ1bmN0aW9ucyBzY2hlZHVsZWQgdG8gcnVuIGluIHRoYXRcclxuICAgICAgKiB0aW1lLlxyXG4gICAgICAqXHJcbiAgICAgICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIj5cclxuICAgICAgKiAqKk5vdGUqKjogSW50ZXJ2YWxzIGNyZWF0ZWQgYnkgdGhpcyBzZXJ2aWNlIG11c3QgYmUgZXhwbGljaXRseSBkZXN0cm95ZWQgd2hlbiB5b3UgYXJlIGZpbmlzaGVkXHJcbiAgICAgICogd2l0aCB0aGVtLiAgSW4gcGFydGljdWxhciB0aGV5IGFyZSBub3QgYXV0b21hdGljYWxseSBkZXN0cm95ZWQgd2hlbiBhIGNvbnRyb2xsZXIncyBzY29wZSBvciBhXHJcbiAgICAgICogZGlyZWN0aXZlJ3MgZWxlbWVudCBhcmUgZGVzdHJveWVkLlxyXG4gICAgICAqIFlvdSBzaG91bGQgdGFrZSB0aGlzIGludG8gY29uc2lkZXJhdGlvbiBhbmQgbWFrZSBzdXJlIHRvIGFsd2F5cyBjYW5jZWwgdGhlIGludGVydmFsIGF0IHRoZVxyXG4gICAgICAqIGFwcHJvcHJpYXRlIG1vbWVudC4gIFNlZSB0aGUgZXhhbXBsZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzIG9uIGhvdyBhbmQgd2hlbiB0byBkbyB0aGlzLlxyXG4gICAgICAqIDwvZGl2PlxyXG4gICAgICAqXHJcbiAgICAgICogQHBhcmFtIHtmdW5jdGlvbigpfSBmbiBBIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCByZXBlYXRlZGx5LlxyXG4gICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWxheSBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJldHdlZW4gZWFjaCBmdW5jdGlvbiBjYWxsLlxyXG4gICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gW2NvdW50PTBdIE51bWJlciBvZiB0aW1lcyB0byByZXBlYXQuIElmIG5vdCBzZXQsIG9yIDAsIHdpbGwgcmVwZWF0XHJcbiAgICAgICogICBpbmRlZmluaXRlbHkuXHJcbiAgICAgICogQHBhcmFtIHtib29sZWFuPX0gW2ludm9rZUFwcGx5PXRydWVdIElmIHNldCB0byBgZmFsc2VgIHNraXBzIG1vZGVsIGRpcnR5IGNoZWNraW5nLCBvdGhlcndpc2VcclxuICAgICAgKiAgIHdpbGwgaW52b2tlIGBmbmAgd2l0aGluIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkYXBwbHkgJGFwcGx5fSBibG9jay5cclxuICAgICAgKiBAcmV0dXJucyB7cHJvbWlzZX0gQSBwcm9taXNlIHdoaWNoIHdpbGwgYmUgbm90aWZpZWQgb24gZWFjaCBpdGVyYXRpb24uXHJcbiAgICAgICpcclxuICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAqIDxleGFtcGxlIG1vZHVsZT1cImludGVydmFsRXhhbXBsZVwiPlxyXG4gICAgICAqIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgICogICA8c2NyaXB0PlxyXG4gICAgICAqICAgICBhbmd1bGFyLm1vZHVsZSgnaW50ZXJ2YWxFeGFtcGxlJywgW10pXHJcbiAgICAgICogICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCAnJGludGVydmFsJyxcclxuICAgICAgKiAgICAgICAgIGZ1bmN0aW9uKCRzY29wZSwgJGludGVydmFsKSB7XHJcbiAgICAgICogICAgICAgICAgICRzY29wZS5mb3JtYXQgPSAnTS9kL3l5IGg6bW06c3MgYSc7XHJcbiAgICAgICogICAgICAgICAgICRzY29wZS5ibG9vZF8xID0gMTAwO1xyXG4gICAgICAqICAgICAgICAgICAkc2NvcGUuYmxvb2RfMiA9IDEyMDtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAgICAgICB2YXIgc3RvcDtcclxuICAgICAgKiAgICAgICAgICAgJHNjb3BlLmZpZ2h0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICogICAgICAgICAgICAgLy8gRG9uJ3Qgc3RhcnQgYSBuZXcgZmlnaHQgaWYgd2UgYXJlIGFscmVhZHkgZmlnaHRpbmdcclxuICAgICAgKiAgICAgICAgICAgICBpZiAoIGFuZ3VsYXIuaXNEZWZpbmVkKHN0b3ApICkgcmV0dXJuO1xyXG4gICAgICAqXHJcbiAgICAgICogICAgICAgICAgIHN0b3AgPSAkaW50ZXJ2YWwoZnVuY3Rpb24oKSB7XHJcbiAgICAgICogICAgICAgICAgICAgaWYgKCRzY29wZS5ibG9vZF8xID4gMCAmJiAkc2NvcGUuYmxvb2RfMiA+IDApIHtcclxuICAgICAgKiAgICAgICAgICAgICAgICRzY29wZS5ibG9vZF8xID0gJHNjb3BlLmJsb29kXzEgLSAzO1xyXG4gICAgICAqICAgICAgICAgICAgICAgJHNjb3BlLmJsb29kXzIgPSAkc2NvcGUuYmxvb2RfMiAtIDQ7XHJcbiAgICAgICogICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgKiAgICAgICAgICAgICAgICRzY29wZS5zdG9wRmlnaHQoKTtcclxuICAgICAgKiAgICAgICAgICAgICB9XHJcbiAgICAgICogICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICogICAgICAgICB9O1xyXG4gICAgICAqXHJcbiAgICAgICogICAgICAgICAkc2NvcGUuc3RvcEZpZ2h0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICogICAgICAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChzdG9wKSkge1xyXG4gICAgICAqICAgICAgICAgICAgICRpbnRlcnZhbC5jYW5jZWwoc3RvcCk7XHJcbiAgICAgICogICAgICAgICAgICAgc3RvcCA9IHVuZGVmaW5lZDtcclxuICAgICAgKiAgICAgICAgICAgfVxyXG4gICAgICAqICAgICAgICAgfTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAgICAgJHNjb3BlLnJlc2V0RmlnaHQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgKiAgICAgICAgICAgJHNjb3BlLmJsb29kXzEgPSAxMDA7XHJcbiAgICAgICogICAgICAgICAgICRzY29wZS5ibG9vZF8yID0gMTIwO1xyXG4gICAgICAqICAgICAgICAgfTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAgICAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCBmdW5jdGlvbigpIHtcclxuICAgICAgKiAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGludGVydmFsIGlzIGRlc3Ryb3llZCB0b29cclxuICAgICAgKiAgICAgICAgICAgJHNjb3BlLnN0b3BGaWdodCgpO1xyXG4gICAgICAqICAgICAgICAgfSk7XHJcbiAgICAgICogICAgICAgfV0pXHJcbiAgICAgICogICAgICAgLy8gUmVnaXN0ZXIgdGhlICdteUN1cnJlbnRUaW1lJyBkaXJlY3RpdmUgZmFjdG9yeSBtZXRob2QuXHJcbiAgICAgICogICAgICAgLy8gV2UgaW5qZWN0ICRpbnRlcnZhbCBhbmQgZGF0ZUZpbHRlciBzZXJ2aWNlIHNpbmNlIHRoZSBmYWN0b3J5IG1ldGhvZCBpcyBESS5cclxuICAgICAgKiAgICAgICAuZGlyZWN0aXZlKCdteUN1cnJlbnRUaW1lJywgWyckaW50ZXJ2YWwnLCAnZGF0ZUZpbHRlcicsXHJcbiAgICAgICogICAgICAgICBmdW5jdGlvbigkaW50ZXJ2YWwsIGRhdGVGaWx0ZXIpIHtcclxuICAgICAgKiAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBkaXJlY3RpdmUgbGluayBmdW5jdGlvbi4gKGNvbXBpbGUgZnVuY3Rpb24gbm90IG5lZWRlZClcclxuICAgICAgKiAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycykge1xyXG4gICAgICAqICAgICAgICAgICAgIHZhciBmb3JtYXQsICAvLyBkYXRlIGZvcm1hdFxyXG4gICAgICAqICAgICAgICAgICAgICAgICBzdG9wVGltZTsgLy8gc28gdGhhdCB3ZSBjYW4gY2FuY2VsIHRoZSB0aW1lIHVwZGF0ZXNcclxuICAgICAgKlxyXG4gICAgICAqICAgICAgICAgICAgIC8vIHVzZWQgdG8gdXBkYXRlIHRoZSBVSVxyXG4gICAgICAqICAgICAgICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVRpbWUoKSB7XHJcbiAgICAgICogICAgICAgICAgICAgICBlbGVtZW50LnRleHQoZGF0ZUZpbHRlcihuZXcgRGF0ZSgpLCBmb3JtYXQpKTtcclxuICAgICAgKiAgICAgICAgICAgICB9XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgICAgICAgICAvLyB3YXRjaCB0aGUgZXhwcmVzc2lvbiwgYW5kIHVwZGF0ZSB0aGUgVUkgb24gY2hhbmdlLlxyXG4gICAgICAqICAgICAgICAgICAgIHNjb3BlLiR3YXRjaChhdHRycy5teUN1cnJlbnRUaW1lLCBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAqICAgICAgICAgICAgICAgZm9ybWF0ID0gdmFsdWU7XHJcbiAgICAgICogICAgICAgICAgICAgICB1cGRhdGVUaW1lKCk7XHJcbiAgICAgICogICAgICAgICAgICAgfSk7XHJcbiAgICAgICpcclxuICAgICAgKiAgICAgICAgICAgICBzdG9wVGltZSA9ICRpbnRlcnZhbCh1cGRhdGVUaW1lLCAxMDAwKTtcclxuICAgICAgKlxyXG4gICAgICAqICAgICAgICAgICAgIC8vIGxpc3RlbiBvbiBET00gZGVzdHJveSAocmVtb3ZhbCkgZXZlbnQsIGFuZCBjYW5jZWwgdGhlIG5leHQgVUkgdXBkYXRlXHJcbiAgICAgICogICAgICAgICAgICAgLy8gdG8gcHJldmVudCB1cGRhdGluZyB0aW1lIGFmdGVyIHRoZSBET00gZWxlbWVudCB3YXMgcmVtb3ZlZC5cclxuICAgICAgKiAgICAgICAgICAgICBlbGVtZW50Lm9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAqICAgICAgICAgICAgICAgJGludGVydmFsLmNhbmNlbChzdG9wVGltZSk7XHJcbiAgICAgICogICAgICAgICAgICAgfSk7XHJcbiAgICAgICogICAgICAgICAgIH1cclxuICAgICAgKiAgICAgICAgIH1dKTtcclxuICAgICAgKiAgIDwvc2NyaXB0PlxyXG4gICAgICAqXHJcbiAgICAgICogICA8ZGl2PlxyXG4gICAgICAqICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxyXG4gICAgICAqICAgICAgIERhdGUgZm9ybWF0OiA8aW5wdXQgbmctbW9kZWw9XCJmb3JtYXRcIj4gPGhyLz5cclxuICAgICAgKiAgICAgICBDdXJyZW50IHRpbWUgaXM6IDxzcGFuIG15LWN1cnJlbnQtdGltZT1cImZvcm1hdFwiPjwvc3Bhbj5cclxuICAgICAgKiAgICAgICA8aHIvPlxyXG4gICAgICAqICAgICAgIEJsb29kIDEgOiA8Zm9udCBjb2xvcj0ncmVkJz57e2Jsb29kXzF9fTwvZm9udD5cclxuICAgICAgKiAgICAgICBCbG9vZCAyIDogPGZvbnQgY29sb3I9J3JlZCc+e3tibG9vZF8yfX08L2ZvbnQ+XHJcbiAgICAgICogICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1uZy1jbGljaz1cImZpZ2h0KClcIj5GaWdodDwvYnV0dG9uPlxyXG4gICAgICAqICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtbmctY2xpY2s9XCJzdG9wRmlnaHQoKVwiPlN0b3BGaWdodDwvYnV0dG9uPlxyXG4gICAgICAqICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtbmctY2xpY2s9XCJyZXNldEZpZ2h0KClcIj5yZXNldEZpZ2h0PC9idXR0b24+XHJcbiAgICAgICogICAgIDwvZGl2PlxyXG4gICAgICAqICAgPC9kaXY+XHJcbiAgICAgICpcclxuICAgICAgKiA8L2ZpbGU+XHJcbiAgICAgICogPC9leGFtcGxlPlxyXG4gICAgICAqL1xyXG4gICAgZnVuY3Rpb24gaW50ZXJ2YWwoZm4sIGRlbGF5LCBjb3VudCwgaW52b2tlQXBwbHkpIHtcclxuICAgICAgdmFyIHNldEludGVydmFsID0gJHdpbmRvdy5zZXRJbnRlcnZhbCxcclxuICAgICAgICAgIGNsZWFySW50ZXJ2YWwgPSAkd2luZG93LmNsZWFySW50ZXJ2YWwsXHJcbiAgICAgICAgICBpdGVyYXRpb24gPSAwLFxyXG4gICAgICAgICAgc2tpcEFwcGx5ID0gKGlzRGVmaW5lZChpbnZva2VBcHBseSkgJiYgIWludm9rZUFwcGx5KSxcclxuICAgICAgICAgIGRlZmVycmVkID0gKHNraXBBcHBseSA/ICQkcSA6ICRxKS5kZWZlcigpLFxyXG4gICAgICAgICAgcHJvbWlzZSA9IGRlZmVycmVkLnByb21pc2U7XHJcblxyXG4gICAgICBjb3VudCA9IGlzRGVmaW5lZChjb3VudCkgPyBjb3VudCA6IDA7XHJcblxyXG4gICAgICBwcm9taXNlLnRoZW4obnVsbCwgbnVsbCwgZm4pO1xyXG5cclxuICAgICAgcHJvbWlzZS4kJGludGVydmFsSWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiB0aWNrKCkge1xyXG4gICAgICAgIGRlZmVycmVkLm5vdGlmeShpdGVyYXRpb24rKyk7XHJcblxyXG4gICAgICAgIGlmIChjb3VudCA+IDAgJiYgaXRlcmF0aW9uID49IGNvdW50KSB7XHJcbiAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKGl0ZXJhdGlvbik7XHJcbiAgICAgICAgICBjbGVhckludGVydmFsKHByb21pc2UuJCRpbnRlcnZhbElkKTtcclxuICAgICAgICAgIGRlbGV0ZSBpbnRlcnZhbHNbcHJvbWlzZS4kJGludGVydmFsSWRdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFza2lwQXBwbHkpICRyb290U2NvcGUuJGFwcGx5KCk7XHJcblxyXG4gICAgICB9LCBkZWxheSk7XHJcblxyXG4gICAgICBpbnRlcnZhbHNbcHJvbWlzZS4kJGludGVydmFsSWRdID0gZGVmZXJyZWQ7XHJcblxyXG4gICAgICByZXR1cm4gcHJvbWlzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgIC8qKlxyXG4gICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgKiBAbmFtZSAkaW50ZXJ2YWwjY2FuY2VsXHJcbiAgICAgICpcclxuICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgKiBDYW5jZWxzIGEgdGFzayBhc3NvY2lhdGVkIHdpdGggdGhlIGBwcm9taXNlYC5cclxuICAgICAgKlxyXG4gICAgICAqIEBwYXJhbSB7cHJvbWlzZX0gcHJvbWlzZSByZXR1cm5lZCBieSB0aGUgYCRpbnRlcnZhbGAgZnVuY3Rpb24uXHJcbiAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB0YXNrIHdhcyBzdWNjZXNzZnVsbHkgY2FuY2VsZWQuXHJcbiAgICAgICovXHJcbiAgICBpbnRlcnZhbC5jYW5jZWwgPSBmdW5jdGlvbihwcm9taXNlKSB7XHJcbiAgICAgIGlmIChwcm9taXNlICYmIHByb21pc2UuJCRpbnRlcnZhbElkIGluIGludGVydmFscykge1xyXG4gICAgICAgIGludGVydmFsc1twcm9taXNlLiQkaW50ZXJ2YWxJZF0ucmVqZWN0KCdjYW5jZWxlZCcpO1xyXG4gICAgICAgICR3aW5kb3cuY2xlYXJJbnRlcnZhbChwcm9taXNlLiQkaW50ZXJ2YWxJZCk7XHJcbiAgICAgICAgZGVsZXRlIGludGVydmFsc1twcm9taXNlLiQkaW50ZXJ2YWxJZF07XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gaW50ZXJ2YWw7XHJcbiAgfV07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2Mgc2VydmljZVxyXG4gKiBAbmFtZSAkbG9jYWxlXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiAkbG9jYWxlIHNlcnZpY2UgcHJvdmlkZXMgbG9jYWxpemF0aW9uIHJ1bGVzIGZvciB2YXJpb3VzIEFuZ3VsYXIgY29tcG9uZW50cy4gQXMgb2YgcmlnaHQgbm93IHRoZVxyXG4gKiBvbmx5IHB1YmxpYyBhcGkgaXM6XHJcbiAqXHJcbiAqICogYGlkYCDigJMgYHtzdHJpbmd9YCDigJMgbG9jYWxlIGlkIGZvcm1hdHRlZCBhcyBgbGFuZ3VhZ2VJZC1jb3VudHJ5SWRgIChlLmcuIGBlbi11c2ApXHJcbiAqL1xyXG5mdW5jdGlvbiAkTG9jYWxlUHJvdmlkZXIoKSB7XHJcbiAgdGhpcy4kZ2V0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpZDogJ2VuLXVzJyxcclxuXHJcbiAgICAgIE5VTUJFUl9GT1JNQVRTOiB7XHJcbiAgICAgICAgREVDSU1BTF9TRVA6ICcuJyxcclxuICAgICAgICBHUk9VUF9TRVA6ICcsJyxcclxuICAgICAgICBQQVRURVJOUzogW1xyXG4gICAgICAgICAgeyAvLyBEZWNpbWFsIFBhdHRlcm5cclxuICAgICAgICAgICAgbWluSW50OiAxLFxyXG4gICAgICAgICAgICBtaW5GcmFjOiAwLFxyXG4gICAgICAgICAgICBtYXhGcmFjOiAzLFxyXG4gICAgICAgICAgICBwb3NQcmU6ICcnLFxyXG4gICAgICAgICAgICBwb3NTdWY6ICcnLFxyXG4gICAgICAgICAgICBuZWdQcmU6ICctJyxcclxuICAgICAgICAgICAgbmVnU3VmOiAnJyxcclxuICAgICAgICAgICAgZ1NpemU6IDMsXHJcbiAgICAgICAgICAgIGxnU2l6ZTogM1xyXG4gICAgICAgICAgfSx7IC8vQ3VycmVuY3kgUGF0dGVyblxyXG4gICAgICAgICAgICBtaW5JbnQ6IDEsXHJcbiAgICAgICAgICAgIG1pbkZyYWM6IDIsXHJcbiAgICAgICAgICAgIG1heEZyYWM6IDIsXHJcbiAgICAgICAgICAgIHBvc1ByZTogJ1xcdTAwQTQnLFxyXG4gICAgICAgICAgICBwb3NTdWY6ICcnLFxyXG4gICAgICAgICAgICBuZWdQcmU6ICcoXFx1MDBBNCcsXHJcbiAgICAgICAgICAgIG5lZ1N1ZjogJyknLFxyXG4gICAgICAgICAgICBnU2l6ZTogMyxcclxuICAgICAgICAgICAgbGdTaXplOiAzXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXSxcclxuICAgICAgICBDVVJSRU5DWV9TWU06ICckJ1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgREFURVRJTUVfRk9STUFUUzoge1xyXG4gICAgICAgIE1PTlRIOlxyXG4gICAgICAgICAgICAnSmFudWFyeSxGZWJydWFyeSxNYXJjaCxBcHJpbCxNYXksSnVuZSxKdWx5LEF1Z3VzdCxTZXB0ZW1iZXIsT2N0b2JlcixOb3ZlbWJlcixEZWNlbWJlcidcclxuICAgICAgICAgICAgLnNwbGl0KCcsJyksXHJcbiAgICAgICAgU0hPUlRNT05USDogICdKYW4sRmViLE1hcixBcHIsTWF5LEp1bixKdWwsQXVnLFNlcCxPY3QsTm92LERlYycuc3BsaXQoJywnKSxcclxuICAgICAgICBEQVk6ICdTdW5kYXksTW9uZGF5LFR1ZXNkYXksV2VkbmVzZGF5LFRodXJzZGF5LEZyaWRheSxTYXR1cmRheScuc3BsaXQoJywnKSxcclxuICAgICAgICBTSE9SVERBWTogJ1N1bixNb24sVHVlLFdlZCxUaHUsRnJpLFNhdCcuc3BsaXQoJywnKSxcclxuICAgICAgICBBTVBNUzogWydBTScsJ1BNJ10sXHJcbiAgICAgICAgbWVkaXVtOiAnTU1NIGQsIHkgaDptbTpzcyBhJyxcclxuICAgICAgICAnc2hvcnQnOiAnTS9kL3l5IGg6bW0gYScsXHJcbiAgICAgICAgZnVsbERhdGU6ICdFRUVFLCBNTU1NIGQsIHknLFxyXG4gICAgICAgIGxvbmdEYXRlOiAnTU1NTSBkLCB5JyxcclxuICAgICAgICBtZWRpdW1EYXRlOiAnTU1NIGQsIHknLFxyXG4gICAgICAgIHNob3J0RGF0ZTogJ00vZC95eScsXHJcbiAgICAgICAgbWVkaXVtVGltZTogJ2g6bW06c3MgYScsXHJcbiAgICAgICAgc2hvcnRUaW1lOiAnaDptbSBhJ1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgcGx1cmFsQ2F0OiBmdW5jdGlvbihudW0pIHtcclxuICAgICAgICBpZiAobnVtID09PSAxKSB7XHJcbiAgICAgICAgICByZXR1cm4gJ29uZSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnb3RoZXInO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuXHJcbnZhciBQQVRIX01BVENIID0gL14oW15cXD8jXSopKFxcPyhbXiNdKikpPygjKC4qKSk/JC8sXHJcbiAgICBERUZBVUxUX1BPUlRTID0geydodHRwJzogODAsICdodHRwcyc6IDQ0MywgJ2Z0cCc6IDIxfTtcclxudmFyICRsb2NhdGlvbk1pbkVyciA9IG1pbkVycignJGxvY2F0aW9uJyk7XHJcblxyXG5cclxuLyoqXHJcbiAqIEVuY29kZSBwYXRoIHVzaW5nIGVuY29kZVVyaVNlZ21lbnQsIGlnbm9yaW5nIGZvcndhcmQgc2xhc2hlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBQYXRoIHRvIGVuY29kZVxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gKi9cclxuZnVuY3Rpb24gZW5jb2RlUGF0aChwYXRoKSB7XHJcbiAgdmFyIHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLycpLFxyXG4gICAgICBpID0gc2VnbWVudHMubGVuZ3RoO1xyXG5cclxuICB3aGlsZSAoaS0tKSB7XHJcbiAgICBzZWdtZW50c1tpXSA9IGVuY29kZVVyaVNlZ21lbnQoc2VnbWVudHNbaV0pO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHNlZ21lbnRzLmpvaW4oJy8nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VBYnNvbHV0ZVVybChhYnNvbHV0ZVVybCwgbG9jYXRpb25PYmopIHtcclxuICB2YXIgcGFyc2VkVXJsID0gdXJsUmVzb2x2ZShhYnNvbHV0ZVVybCk7XHJcblxyXG4gIGxvY2F0aW9uT2JqLiQkcHJvdG9jb2wgPSBwYXJzZWRVcmwucHJvdG9jb2w7XHJcbiAgbG9jYXRpb25PYmouJCRob3N0ID0gcGFyc2VkVXJsLmhvc3RuYW1lO1xyXG4gIGxvY2F0aW9uT2JqLiQkcG9ydCA9IGludChwYXJzZWRVcmwucG9ydCkgfHwgREVGQVVMVF9QT1JUU1twYXJzZWRVcmwucHJvdG9jb2xdIHx8IG51bGw7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBwYXJzZUFwcFVybChyZWxhdGl2ZVVybCwgbG9jYXRpb25PYmopIHtcclxuICB2YXIgcHJlZml4ZWQgPSAocmVsYXRpdmVVcmwuY2hhckF0KDApICE9PSAnLycpO1xyXG4gIGlmIChwcmVmaXhlZCkge1xyXG4gICAgcmVsYXRpdmVVcmwgPSAnLycgKyByZWxhdGl2ZVVybDtcclxuICB9XHJcbiAgdmFyIG1hdGNoID0gdXJsUmVzb2x2ZShyZWxhdGl2ZVVybCk7XHJcbiAgbG9jYXRpb25PYmouJCRwYXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KHByZWZpeGVkICYmIG1hdGNoLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nID9cclxuICAgICAgbWF0Y2gucGF0aG5hbWUuc3Vic3RyaW5nKDEpIDogbWF0Y2gucGF0aG5hbWUpO1xyXG4gIGxvY2F0aW9uT2JqLiQkc2VhcmNoID0gcGFyc2VLZXlWYWx1ZShtYXRjaC5zZWFyY2gpO1xyXG4gIGxvY2F0aW9uT2JqLiQkaGFzaCA9IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaC5oYXNoKTtcclxuXHJcbiAgLy8gbWFrZSBzdXJlIHBhdGggc3RhcnRzIHdpdGggJy8nO1xyXG4gIGlmIChsb2NhdGlvbk9iai4kJHBhdGggJiYgbG9jYXRpb25PYmouJCRwYXRoLmNoYXJBdCgwKSAhPSAnLycpIHtcclxuICAgIGxvY2F0aW9uT2JqLiQkcGF0aCA9ICcvJyArIGxvY2F0aW9uT2JqLiQkcGF0aDtcclxuICB9XHJcbn1cclxuXHJcblxyXG4vKipcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IGJlZ2luXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB3aG9sZVxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSByZXR1cm5zIHRleHQgZnJvbSB3aG9sZSBhZnRlciBiZWdpbiBvciB1bmRlZmluZWQgaWYgaXQgZG9lcyBub3QgYmVnaW4gd2l0aFxyXG4gKiAgICAgICAgICAgICAgICAgICBleHBlY3RlZCBzdHJpbmcuXHJcbiAqL1xyXG5mdW5jdGlvbiBiZWdpbnNXaXRoKGJlZ2luLCB3aG9sZSkge1xyXG4gIGlmICh3aG9sZS5pbmRleE9mKGJlZ2luKSA9PT0gMCkge1xyXG4gICAgcmV0dXJuIHdob2xlLnN1YnN0cihiZWdpbi5sZW5ndGgpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIHN0cmlwSGFzaCh1cmwpIHtcclxuICB2YXIgaW5kZXggPSB1cmwuaW5kZXhPZignIycpO1xyXG4gIHJldHVybiBpbmRleCA9PSAtMSA/IHVybCA6IHVybC5zdWJzdHIoMCwgaW5kZXgpO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gc3RyaXBGaWxlKHVybCkge1xyXG4gIHJldHVybiB1cmwuc3Vic3RyKDAsIHN0cmlwSGFzaCh1cmwpLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcclxufVxyXG5cclxuLyogcmV0dXJuIHRoZSBzZXJ2ZXIgb25seSAoc2NoZW1lOi8vaG9zdDpwb3J0KSAqL1xyXG5mdW5jdGlvbiBzZXJ2ZXJCYXNlKHVybCkge1xyXG4gIHJldHVybiB1cmwuc3Vic3RyaW5nKDAsIHVybC5pbmRleE9mKCcvJywgdXJsLmluZGV4T2YoJy8vJykgKyAyKSk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogTG9jYXRpb25IdG1sNVVybCByZXByZXNlbnRzIGFuIHVybFxyXG4gKiBUaGlzIG9iamVjdCBpcyBleHBvc2VkIGFzICRsb2NhdGlvbiBzZXJ2aWNlIHdoZW4gSFRNTDUgbW9kZSBpcyBlbmFibGVkIGFuZCBzdXBwb3J0ZWRcclxuICpcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBCYXNlIGFwcGxpY2F0aW9uIGJhc2UgVVJMXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlUHJlZml4IHVybCBwYXRoIHByZWZpeFxyXG4gKi9cclxuZnVuY3Rpb24gTG9jYXRpb25IdG1sNVVybChhcHBCYXNlLCBiYXNlUHJlZml4KSB7XHJcbiAgdGhpcy4kJGh0bWw1ID0gdHJ1ZTtcclxuICBiYXNlUHJlZml4ID0gYmFzZVByZWZpeCB8fCAnJztcclxuICB2YXIgYXBwQmFzZU5vRmlsZSA9IHN0cmlwRmlsZShhcHBCYXNlKTtcclxuICBwYXJzZUFic29sdXRlVXJsKGFwcEJhc2UsIHRoaXMpO1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2UgZ2l2ZW4gaHRtbDUgKHJlZ3VsYXIpIHVybCBzdHJpbmcgaW50byBwcm9wZXJ0aWVzXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBIVE1MNSB1cmxcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHRoaXMuJCRwYXJzZSA9IGZ1bmN0aW9uKHVybCkge1xyXG4gICAgdmFyIHBhdGhVcmwgPSBiZWdpbnNXaXRoKGFwcEJhc2VOb0ZpbGUsIHVybCk7XHJcbiAgICBpZiAoIWlzU3RyaW5nKHBhdGhVcmwpKSB7XHJcbiAgICAgIHRocm93ICRsb2NhdGlvbk1pbkVycignaXB0aHByZngnLCAnSW52YWxpZCB1cmwgXCJ7MH1cIiwgbWlzc2luZyBwYXRoIHByZWZpeCBcInsxfVwiLicsIHVybCxcclxuICAgICAgICAgIGFwcEJhc2VOb0ZpbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlQXBwVXJsKHBhdGhVcmwsIHRoaXMpO1xyXG5cclxuICAgIGlmICghdGhpcy4kJHBhdGgpIHtcclxuICAgICAgdGhpcy4kJHBhdGggPSAnLyc7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy4kJGNvbXBvc2UoKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBDb21wb3NlIHVybCBhbmQgdXBkYXRlIGBhYnNVcmxgIHByb3BlcnR5XHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICB0aGlzLiQkY29tcG9zZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHNlYXJjaCA9IHRvS2V5VmFsdWUodGhpcy4kJHNlYXJjaCksXHJcbiAgICAgICAgaGFzaCA9IHRoaXMuJCRoYXNoID8gJyMnICsgZW5jb2RlVXJpU2VnbWVudCh0aGlzLiQkaGFzaCkgOiAnJztcclxuXHJcbiAgICB0aGlzLiQkdXJsID0gZW5jb2RlUGF0aCh0aGlzLiQkcGF0aCkgKyAoc2VhcmNoID8gJz8nICsgc2VhcmNoIDogJycpICsgaGFzaDtcclxuICAgIHRoaXMuJCRhYnNVcmwgPSBhcHBCYXNlTm9GaWxlICsgdGhpcy4kJHVybC5zdWJzdHIoMSk7IC8vIGZpcnN0IGNoYXIgaXMgYWx3YXlzICcvJ1xyXG4gIH07XHJcblxyXG4gIHRoaXMuJCRwYXJzZUxpbmtVcmwgPSBmdW5jdGlvbih1cmwsIHJlbEhyZWYpIHtcclxuICAgIGlmIChyZWxIcmVmICYmIHJlbEhyZWZbMF0gPT09ICcjJykge1xyXG4gICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIGxpbmtzIHRvIGhhc2ggZnJhZ21lbnRzOlxyXG4gICAgICAvLyBrZWVwIHRoZSBvbGQgdXJsIGFuZCBvbmx5IHJlcGxhY2UgdGhlIGhhc2ggZnJhZ21lbnRcclxuICAgICAgdGhpcy5oYXNoKHJlbEhyZWYuc2xpY2UoMSkpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBhcHBVcmwsIHByZXZBcHBVcmw7XHJcbiAgICB2YXIgcmV3cml0dGVuVXJsO1xyXG5cclxuICAgIGlmICgoYXBwVXJsID0gYmVnaW5zV2l0aChhcHBCYXNlLCB1cmwpKSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHByZXZBcHBVcmwgPSBhcHBVcmw7XHJcbiAgICAgIGlmICgoYXBwVXJsID0gYmVnaW5zV2l0aChiYXNlUHJlZml4LCBhcHBVcmwpKSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV3cml0dGVuVXJsID0gYXBwQmFzZU5vRmlsZSArIChiZWdpbnNXaXRoKCcvJywgYXBwVXJsKSB8fCBhcHBVcmwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJld3JpdHRlblVybCA9IGFwcEJhc2UgKyBwcmV2QXBwVXJsO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKChhcHBVcmwgPSBiZWdpbnNXaXRoKGFwcEJhc2VOb0ZpbGUsIHVybCkpICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV3cml0dGVuVXJsID0gYXBwQmFzZU5vRmlsZSArIGFwcFVybDtcclxuICAgIH0gZWxzZSBpZiAoYXBwQmFzZU5vRmlsZSA9PSB1cmwgKyAnLycpIHtcclxuICAgICAgcmV3cml0dGVuVXJsID0gYXBwQmFzZU5vRmlsZTtcclxuICAgIH1cclxuICAgIGlmIChyZXdyaXR0ZW5VcmwpIHtcclxuICAgICAgdGhpcy4kJHBhcnNlKHJld3JpdHRlblVybCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gISFyZXdyaXR0ZW5Vcmw7XHJcbiAgfTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBMb2NhdGlvbkhhc2hiYW5nVXJsIHJlcHJlc2VudHMgdXJsXHJcbiAqIFRoaXMgb2JqZWN0IGlzIGV4cG9zZWQgYXMgJGxvY2F0aW9uIHNlcnZpY2Ugd2hlbiBkZXZlbG9wZXIgZG9lc24ndCBvcHQgaW50byBodG1sNSBtb2RlLlxyXG4gKiBJdCBhbHNvIHNlcnZlcyBhcyB0aGUgYmFzZSBjbGFzcyBmb3IgaHRtbDUgbW9kZSBmYWxsYmFjayBvbiBsZWdhY3kgYnJvd3NlcnMuXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwQmFzZSBhcHBsaWNhdGlvbiBiYXNlIFVSTFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFByZWZpeCBoYXNoYmFuZyBwcmVmaXhcclxuICovXHJcbmZ1bmN0aW9uIExvY2F0aW9uSGFzaGJhbmdVcmwoYXBwQmFzZSwgaGFzaFByZWZpeCkge1xyXG4gIHZhciBhcHBCYXNlTm9GaWxlID0gc3RyaXBGaWxlKGFwcEJhc2UpO1xyXG5cclxuICBwYXJzZUFic29sdXRlVXJsKGFwcEJhc2UsIHRoaXMpO1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2UgZ2l2ZW4gaGFzaGJhbmcgdXJsIGludG8gcHJvcGVydGllc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgSGFzaGJhbmcgdXJsXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICB0aGlzLiQkcGFyc2UgPSBmdW5jdGlvbih1cmwpIHtcclxuICAgIHZhciB3aXRob3V0QmFzZVVybCA9IGJlZ2luc1dpdGgoYXBwQmFzZSwgdXJsKSB8fCBiZWdpbnNXaXRoKGFwcEJhc2VOb0ZpbGUsIHVybCk7XHJcbiAgICB2YXIgd2l0aG91dEhhc2hVcmwgPSB3aXRob3V0QmFzZVVybC5jaGFyQXQoMCkgPT0gJyMnXHJcbiAgICAgICAgPyBiZWdpbnNXaXRoKGhhc2hQcmVmaXgsIHdpdGhvdXRCYXNlVXJsKVxyXG4gICAgICAgIDogKHRoaXMuJCRodG1sNSlcclxuICAgICAgICAgID8gd2l0aG91dEJhc2VVcmxcclxuICAgICAgICAgIDogJyc7XHJcblxyXG4gICAgaWYgKCFpc1N0cmluZyh3aXRob3V0SGFzaFVybCkpIHtcclxuICAgICAgdGhyb3cgJGxvY2F0aW9uTWluRXJyKCdpaHNocHJmeCcsICdJbnZhbGlkIHVybCBcInswfVwiLCBtaXNzaW5nIGhhc2ggcHJlZml4IFwiezF9XCIuJywgdXJsLFxyXG4gICAgICAgICAgaGFzaFByZWZpeCk7XHJcbiAgICB9XHJcbiAgICBwYXJzZUFwcFVybCh3aXRob3V0SGFzaFVybCwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy4kJHBhdGggPSByZW1vdmVXaW5kb3dzRHJpdmVOYW1lKHRoaXMuJCRwYXRoLCB3aXRob3V0SGFzaFVybCwgYXBwQmFzZSk7XHJcblxyXG4gICAgdGhpcy4kJGNvbXBvc2UoKTtcclxuXHJcbiAgICAvKlxyXG4gICAgICogSW4gV2luZG93cywgb24gYW4gYW5jaG9yIG5vZGUgb24gZG9jdW1lbnRzIGxvYWRlZCBmcm9tXHJcbiAgICAgKiB0aGUgZmlsZXN5c3RlbSwgdGhlIGJyb3dzZXIgd2lsbCByZXR1cm4gYSBwYXRobmFtZVxyXG4gICAgICogcHJlZml4ZWQgd2l0aCB0aGUgZHJpdmUgbmFtZSAoJy9DOi9wYXRoJykgd2hlbiBhXHJcbiAgICAgKiBwYXRobmFtZSB3aXRob3V0IGEgZHJpdmUgaXMgc2V0OlxyXG4gICAgICogICogYS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnL2ZvbycpXHJcbiAgICAgKiAgICogYS5wYXRobmFtZSA9PT0gJy9DOi9mb28nIC8vdHJ1ZVxyXG4gICAgICpcclxuICAgICAqIEluc2lkZSBvZiBBbmd1bGFyLCB3ZSdyZSBhbHdheXMgdXNpbmcgcGF0aG5hbWVzIHRoYXRcclxuICAgICAqIGRvIG5vdCBpbmNsdWRlIGRyaXZlIG5hbWVzIGZvciByb3V0aW5nLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiByZW1vdmVXaW5kb3dzRHJpdmVOYW1lKHBhdGgsIHVybCwgYmFzZSkge1xyXG4gICAgICAvKlxyXG4gICAgICBNYXRjaGVzIHBhdGhzIGZvciBmaWxlIHByb3RvY29sIG9uIHdpbmRvd3MsXHJcbiAgICAgIHN1Y2ggYXMgL0M6L2Zvby9iYXIsIGFuZCBjYXB0dXJlcyBvbmx5IC9mb28vYmFyLlxyXG4gICAgICAqL1xyXG4gICAgICB2YXIgd2luZG93c0ZpbGVQYXRoRXhwID0gL15cXC9bQS1aXTooXFwvLiopLztcclxuXHJcbiAgICAgIHZhciBmaXJzdFBhdGhTZWdtZW50TWF0Y2g7XHJcblxyXG4gICAgICAvL0dldCB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBpbnB1dCBVUkwuXHJcbiAgICAgIGlmICh1cmwuaW5kZXhPZihiYXNlKSA9PT0gMCkge1xyXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKGJhc2UsICcnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVGhlIGlucHV0IFVSTCBpbnRlbnRpb25hbGx5IGNvbnRhaW5zIGEgZmlyc3QgcGF0aCBzZWdtZW50IHRoYXQgZW5kcyB3aXRoIGEgY29sb24uXHJcbiAgICAgIGlmICh3aW5kb3dzRmlsZVBhdGhFeHAuZXhlYyh1cmwpKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZpcnN0UGF0aFNlZ21lbnRNYXRjaCA9IHdpbmRvd3NGaWxlUGF0aEV4cC5leGVjKHBhdGgpO1xyXG4gICAgICByZXR1cm4gZmlyc3RQYXRoU2VnbWVudE1hdGNoID8gZmlyc3RQYXRoU2VnbWVudE1hdGNoWzFdIDogcGF0aDtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBDb21wb3NlIGhhc2hiYW5nIHVybCBhbmQgdXBkYXRlIGBhYnNVcmxgIHByb3BlcnR5XHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICB0aGlzLiQkY29tcG9zZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHNlYXJjaCA9IHRvS2V5VmFsdWUodGhpcy4kJHNlYXJjaCksXHJcbiAgICAgICAgaGFzaCA9IHRoaXMuJCRoYXNoID8gJyMnICsgZW5jb2RlVXJpU2VnbWVudCh0aGlzLiQkaGFzaCkgOiAnJztcclxuXHJcbiAgICB0aGlzLiQkdXJsID0gZW5jb2RlUGF0aCh0aGlzLiQkcGF0aCkgKyAoc2VhcmNoID8gJz8nICsgc2VhcmNoIDogJycpICsgaGFzaDtcclxuICAgIHRoaXMuJCRhYnNVcmwgPSBhcHBCYXNlICsgKHRoaXMuJCR1cmwgPyBoYXNoUHJlZml4ICsgdGhpcy4kJHVybCA6ICcnKTtcclxuICB9O1xyXG5cclxuICB0aGlzLiQkcGFyc2VMaW5rVXJsID0gZnVuY3Rpb24odXJsLCByZWxIcmVmKSB7XHJcbiAgICBpZiAoc3RyaXBIYXNoKGFwcEJhc2UpID09IHN0cmlwSGFzaCh1cmwpKSB7XHJcbiAgICAgIHRoaXMuJCRwYXJzZSh1cmwpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9O1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIExvY2F0aW9uSGFzaGJhbmdVcmwgcmVwcmVzZW50cyB1cmxcclxuICogVGhpcyBvYmplY3QgaXMgZXhwb3NlZCBhcyAkbG9jYXRpb24gc2VydmljZSB3aGVuIGh0bWw1IGhpc3RvcnkgYXBpIGlzIGVuYWJsZWQgYnV0IHRoZSBicm93c2VyXHJcbiAqIGRvZXMgbm90IHN1cHBvcnQgaXQuXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwQmFzZSBhcHBsaWNhdGlvbiBiYXNlIFVSTFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFByZWZpeCBoYXNoYmFuZyBwcmVmaXhcclxuICovXHJcbmZ1bmN0aW9uIExvY2F0aW9uSGFzaGJhbmdJbkh0bWw1VXJsKGFwcEJhc2UsIGhhc2hQcmVmaXgpIHtcclxuICB0aGlzLiQkaHRtbDUgPSB0cnVlO1xyXG4gIExvY2F0aW9uSGFzaGJhbmdVcmwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuXHJcbiAgdmFyIGFwcEJhc2VOb0ZpbGUgPSBzdHJpcEZpbGUoYXBwQmFzZSk7XHJcblxyXG4gIHRoaXMuJCRwYXJzZUxpbmtVcmwgPSBmdW5jdGlvbih1cmwsIHJlbEhyZWYpIHtcclxuICAgIGlmIChyZWxIcmVmICYmIHJlbEhyZWZbMF0gPT09ICcjJykge1xyXG4gICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIGxpbmtzIHRvIGhhc2ggZnJhZ21lbnRzOlxyXG4gICAgICAvLyBrZWVwIHRoZSBvbGQgdXJsIGFuZCBvbmx5IHJlcGxhY2UgdGhlIGhhc2ggZnJhZ21lbnRcclxuICAgICAgdGhpcy5oYXNoKHJlbEhyZWYuc2xpY2UoMSkpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcmV3cml0dGVuVXJsO1xyXG4gICAgdmFyIGFwcFVybDtcclxuXHJcbiAgICBpZiAoYXBwQmFzZSA9PSBzdHJpcEhhc2godXJsKSkge1xyXG4gICAgICByZXdyaXR0ZW5VcmwgPSB1cmw7XHJcbiAgICB9IGVsc2UgaWYgKChhcHBVcmwgPSBiZWdpbnNXaXRoKGFwcEJhc2VOb0ZpbGUsIHVybCkpKSB7XHJcbiAgICAgIHJld3JpdHRlblVybCA9IGFwcEJhc2UgKyBoYXNoUHJlZml4ICsgYXBwVXJsO1xyXG4gICAgfSBlbHNlIGlmIChhcHBCYXNlTm9GaWxlID09PSB1cmwgKyAnLycpIHtcclxuICAgICAgcmV3cml0dGVuVXJsID0gYXBwQmFzZU5vRmlsZTtcclxuICAgIH1cclxuICAgIGlmIChyZXdyaXR0ZW5VcmwpIHtcclxuICAgICAgdGhpcy4kJHBhcnNlKHJld3JpdHRlblVybCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gISFyZXdyaXR0ZW5Vcmw7XHJcbiAgfTtcclxuXHJcbiAgdGhpcy4kJGNvbXBvc2UgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBzZWFyY2ggPSB0b0tleVZhbHVlKHRoaXMuJCRzZWFyY2gpLFxyXG4gICAgICAgIGhhc2ggPSB0aGlzLiQkaGFzaCA/ICcjJyArIGVuY29kZVVyaVNlZ21lbnQodGhpcy4kJGhhc2gpIDogJyc7XHJcblxyXG4gICAgdGhpcy4kJHVybCA9IGVuY29kZVBhdGgodGhpcy4kJHBhdGgpICsgKHNlYXJjaCA/ICc/JyArIHNlYXJjaCA6ICcnKSArIGhhc2g7XHJcbiAgICAvLyBpbmNsdWRlIGhhc2hQcmVmaXggaW4gJCRhYnNVcmwgd2hlbiAkJHVybCBpcyBlbXB0eSBzbyBJRTggJiA5IGRvIG5vdCByZWxvYWQgcGFnZSBiZWNhdXNlIG9mIHJlbW92YWwgb2YgJyMnXHJcbiAgICB0aGlzLiQkYWJzVXJsID0gYXBwQmFzZSArIGhhc2hQcmVmaXggKyB0aGlzLiQkdXJsO1xyXG4gIH07XHJcblxyXG59XHJcblxyXG5cclxudmFyIGxvY2F0aW9uUHJvdG90eXBlID0ge1xyXG5cclxuICAvKipcclxuICAgKiBBcmUgd2UgaW4gaHRtbDUgbW9kZT9cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gICQkaHRtbDU6IGZhbHNlLFxyXG5cclxuICAvKipcclxuICAgKiBIYXMgYW55IGNoYW5nZSBiZWVuIHJlcGxhY2luZz9cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gICQkcmVwbGFjZTogZmFsc2UsXHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSAkbG9jYXRpb24jYWJzVXJsXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBUaGlzIG1ldGhvZCBpcyBnZXR0ZXIgb25seS5cclxuICAgKlxyXG4gICAqIFJldHVybiBmdWxsIHVybCByZXByZXNlbnRhdGlvbiB3aXRoIGFsbCBzZWdtZW50cyBlbmNvZGVkIGFjY29yZGluZyB0byBydWxlcyBzcGVjaWZpZWQgaW5cclxuICAgKiBbUkZDIDM5ODZdKGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM5ODYudHh0KS5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge3N0cmluZ30gZnVsbCB1cmxcclxuICAgKi9cclxuICBhYnNVcmw6IGxvY2F0aW9uR2V0dGVyKCckJGFic1VybCcpLFxyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgJGxvY2F0aW9uI3VybFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIC8gc2V0dGVyLlxyXG4gICAqXHJcbiAgICogUmV0dXJuIHVybCAoZS5nLiBgL3BhdGg/YT1iI2hhc2hgKSB3aGVuIGNhbGxlZCB3aXRob3V0IGFueSBwYXJhbWV0ZXIuXHJcbiAgICpcclxuICAgKiBDaGFuZ2UgcGF0aCwgc2VhcmNoIGFuZCBoYXNoLCB3aGVuIGNhbGxlZCB3aXRoIHBhcmFtZXRlciBhbmQgcmV0dXJuIGAkbG9jYXRpb25gLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSB1cmwgTmV3IHVybCB3aXRob3V0IGJhc2UgcHJlZml4IChlLmcuIGAvcGF0aD9hPWIjaGFzaGApXHJcbiAgICogQHJldHVybiB7c3RyaW5nfSB1cmxcclxuICAgKi9cclxuICB1cmw6IGZ1bmN0aW9uKHVybCkge1xyXG4gICAgaWYgKGlzVW5kZWZpbmVkKHVybCkpXHJcbiAgICAgIHJldHVybiB0aGlzLiQkdXJsO1xyXG5cclxuICAgIHZhciBtYXRjaCA9IFBBVEhfTUFUQ0guZXhlYyh1cmwpO1xyXG4gICAgaWYgKG1hdGNoWzFdKSB0aGlzLnBhdGgoZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzFdKSk7XHJcbiAgICBpZiAobWF0Y2hbMl0gfHwgbWF0Y2hbMV0pIHRoaXMuc2VhcmNoKG1hdGNoWzNdIHx8ICcnKTtcclxuICAgIHRoaXMuaGFzaChtYXRjaFs1XSB8fCAnJyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfSxcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lICRsb2NhdGlvbiNwcm90b2NvbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIG9ubHkuXHJcbiAgICpcclxuICAgKiBSZXR1cm4gcHJvdG9jb2wgb2YgY3VycmVudCB1cmwuXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHByb3RvY29sIG9mIGN1cnJlbnQgdXJsXHJcbiAgICovXHJcbiAgcHJvdG9jb2w6IGxvY2F0aW9uR2V0dGVyKCckJHByb3RvY29sJyksXHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSAkbG9jYXRpb24jaG9zdFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIG9ubHkuXHJcbiAgICpcclxuICAgKiBSZXR1cm4gaG9zdCBvZiBjdXJyZW50IHVybC5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge3N0cmluZ30gaG9zdCBvZiBjdXJyZW50IHVybC5cclxuICAgKi9cclxuICBob3N0OiBsb2NhdGlvbkdldHRlcignJCRob3N0JyksXHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSAkbG9jYXRpb24jcG9ydFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIG9ubHkuXHJcbiAgICpcclxuICAgKiBSZXR1cm4gcG9ydCBvZiBjdXJyZW50IHVybC5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge051bWJlcn0gcG9ydFxyXG4gICAqL1xyXG4gIHBvcnQ6IGxvY2F0aW9uR2V0dGVyKCckJHBvcnQnKSxcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lICRsb2NhdGlvbiNwYXRoXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBUaGlzIG1ldGhvZCBpcyBnZXR0ZXIgLyBzZXR0ZXIuXHJcbiAgICpcclxuICAgKiBSZXR1cm4gcGF0aCBvZiBjdXJyZW50IHVybCB3aGVuIGNhbGxlZCB3aXRob3V0IGFueSBwYXJhbWV0ZXIuXHJcbiAgICpcclxuICAgKiBDaGFuZ2UgcGF0aCB3aGVuIGNhbGxlZCB3aXRoIHBhcmFtZXRlciBhbmQgcmV0dXJuIGAkbG9jYXRpb25gLlxyXG4gICAqXHJcbiAgICogTm90ZTogUGF0aCBzaG91bGQgYWx3YXlzIGJlZ2luIHdpdGggZm9yd2FyZCBzbGFzaCAoLyksIHRoaXMgbWV0aG9kIHdpbGwgYWRkIHRoZSBmb3J3YXJkIHNsYXNoXHJcbiAgICogaWYgaXQgaXMgbWlzc2luZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7KHN0cmluZ3xudW1iZXIpPX0gcGF0aCBOZXcgcGF0aFxyXG4gICAqIEByZXR1cm4ge3N0cmluZ30gcGF0aFxyXG4gICAqL1xyXG4gIHBhdGg6IGxvY2F0aW9uR2V0dGVyU2V0dGVyKCckJHBhdGgnLCBmdW5jdGlvbihwYXRoKSB7XHJcbiAgICBwYXRoID0gcGF0aCAhPT0gbnVsbCA/IHBhdGgudG9TdHJpbmcoKSA6ICcnO1xyXG4gICAgcmV0dXJuIHBhdGguY2hhckF0KDApID09ICcvJyA/IHBhdGggOiAnLycgKyBwYXRoO1xyXG4gIH0pLFxyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgJGxvY2F0aW9uI3NlYXJjaFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIC8gc2V0dGVyLlxyXG4gICAqXHJcbiAgICogUmV0dXJuIHNlYXJjaCBwYXJ0IChhcyBvYmplY3QpIG9mIGN1cnJlbnQgdXJsIHdoZW4gY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIENoYW5nZSBzZWFyY2ggcGFydCB3aGVuIGNhbGxlZCB3aXRoIHBhcmFtZXRlciBhbmQgcmV0dXJuIGAkbG9jYXRpb25gLlxyXG4gICAqXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIC8vIGdpdmVuIHVybCBodHRwOi8vZXhhbXBsZS5jb20vIy9zb21lL3BhdGg/Zm9vPWJhciZiYXo9eG94b1xyXG4gICAqIHZhciBzZWFyY2hPYmplY3QgPSAkbG9jYXRpb24uc2VhcmNoKCk7XHJcbiAgICogLy8gPT4ge2ZvbzogJ2JhcicsIGJhejogJ3hveG8nfVxyXG4gICAqXHJcbiAgICpcclxuICAgKiAvLyBzZXQgZm9vIHRvICd5aXBlZSdcclxuICAgKiAkbG9jYXRpb24uc2VhcmNoKCdmb28nLCAneWlwZWUnKTtcclxuICAgKiAvLyA9PiAkbG9jYXRpb25cclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdC48c3RyaW5nPnxPYmplY3QuPEFycmF5LjxzdHJpbmc+Pn0gc2VhcmNoIE5ldyBzZWFyY2ggcGFyYW1zIC0gc3RyaW5nIG9yXHJcbiAgICogaGFzaCBvYmplY3QuXHJcbiAgICpcclxuICAgKiBXaGVuIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IHRoZSBtZXRob2QgYWN0cyBhcyBhIHNldHRlciwgc2V0dGluZyB0aGUgYHNlYXJjaGAgY29tcG9uZW50XHJcbiAgICogb2YgYCRsb2NhdGlvbmAgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS5cclxuICAgKlxyXG4gICAqIElmIHRoZSBhcmd1bWVudCBpcyBhIGhhc2ggb2JqZWN0IGNvbnRhaW5pbmcgYW4gYXJyYXkgb2YgdmFsdWVzLCB0aGVzZSB2YWx1ZXMgd2lsbCBiZSBlbmNvZGVkXHJcbiAgICogYXMgZHVwbGljYXRlIHNlYXJjaCBwYXJhbWV0ZXJzIGluIHRoZSB1cmwuXHJcbiAgICpcclxuICAgKiBAcGFyYW0geyhzdHJpbmd8TnVtYmVyfEFycmF5PHN0cmluZz58Ym9vbGVhbik9fSBwYXJhbVZhbHVlIElmIGBzZWFyY2hgIGlzIGEgc3RyaW5nIG9yIG51bWJlciwgdGhlbiBgcGFyYW1WYWx1ZWBcclxuICAgKiB3aWxsIG92ZXJyaWRlIG9ubHkgYSBzaW5nbGUgc2VhcmNoIHByb3BlcnR5LlxyXG4gICAqXHJcbiAgICogSWYgYHBhcmFtVmFsdWVgIGlzIGFuIGFycmF5LCBpdCB3aWxsIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBvZiB0aGUgYHNlYXJjaGAgY29tcG9uZW50IG9mXHJcbiAgICogYCRsb2NhdGlvbmAgc3BlY2lmaWVkIHZpYSB0aGUgZmlyc3QgYXJndW1lbnQuXHJcbiAgICpcclxuICAgKiBJZiBgcGFyYW1WYWx1ZWAgaXMgYG51bGxgLCB0aGUgcHJvcGVydHkgc3BlY2lmaWVkIHZpYSB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCBiZSBkZWxldGVkLlxyXG4gICAqXHJcbiAgICogSWYgYHBhcmFtVmFsdWVgIGlzIGB0cnVlYCwgdGhlIHByb3BlcnR5IHNwZWNpZmllZCB2aWEgdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYWRkZWQgd2l0aCBub1xyXG4gICAqIHZhbHVlIG5vciB0cmFpbGluZyBlcXVhbCBzaWduLlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7T2JqZWN0fSBJZiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMgcmV0dXJucyB0aGUgcGFyc2VkIGBzZWFyY2hgIG9iamVjdC4gSWYgY2FsbGVkIHdpdGhcclxuICAgKiBvbmUgb3IgbW9yZSBhcmd1bWVudHMgcmV0dXJucyBgJGxvY2F0aW9uYCBvYmplY3QgaXRzZWxmLlxyXG4gICAqL1xyXG4gIHNlYXJjaDogZnVuY3Rpb24oc2VhcmNoLCBwYXJhbVZhbHVlKSB7XHJcbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHJldHVybiB0aGlzLiQkc2VhcmNoO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHNlYXJjaCkgfHwgaXNOdW1iZXIoc2VhcmNoKSkge1xyXG4gICAgICAgICAgc2VhcmNoID0gc2VhcmNoLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICB0aGlzLiQkc2VhcmNoID0gcGFyc2VLZXlWYWx1ZShzZWFyY2gpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3Qoc2VhcmNoKSkge1xyXG4gICAgICAgICAgc2VhcmNoID0gY29weShzZWFyY2gsIHt9KTtcclxuICAgICAgICAgIC8vIHJlbW92ZSBvYmplY3QgdW5kZWZpbmVkIG9yIG51bGwgcHJvcGVydGllc1xyXG4gICAgICAgICAgZm9yRWFjaChzZWFyY2gsIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIGRlbGV0ZSBzZWFyY2hba2V5XTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuJCRzZWFyY2ggPSBzZWFyY2g7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93ICRsb2NhdGlvbk1pbkVycignaXNyY2hhcmcnLFxyXG4gICAgICAgICAgICAgICdUaGUgZmlyc3QgYXJndW1lbnQgb2YgdGhlIGAkbG9jYXRpb24jc2VhcmNoKClgIGNhbGwgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBvYmplY3QuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChwYXJhbVZhbHVlKSB8fCBwYXJhbVZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICBkZWxldGUgdGhpcy4kJHNlYXJjaFtzZWFyY2hdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLiQkc2VhcmNoW3NlYXJjaF0gPSBwYXJhbVZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLiQkY29tcG9zZSgpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfSxcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lICRsb2NhdGlvbiNoYXNoXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBUaGlzIG1ldGhvZCBpcyBnZXR0ZXIgLyBzZXR0ZXIuXHJcbiAgICpcclxuICAgKiBSZXR1cm4gaGFzaCBmcmFnbWVudCB3aGVuIGNhbGxlZCB3aXRob3V0IGFueSBwYXJhbWV0ZXIuXHJcbiAgICpcclxuICAgKiBDaGFuZ2UgaGFzaCBmcmFnbWVudCB3aGVuIGNhbGxlZCB3aXRoIHBhcmFtZXRlciBhbmQgcmV0dXJuIGAkbG9jYXRpb25gLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsoc3RyaW5nfG51bWJlcik9fSBoYXNoIE5ldyBoYXNoIGZyYWdtZW50XHJcbiAgICogQHJldHVybiB7c3RyaW5nfSBoYXNoXHJcbiAgICovXHJcbiAgaGFzaDogbG9jYXRpb25HZXR0ZXJTZXR0ZXIoJyQkaGFzaCcsIGZ1bmN0aW9uKGhhc2gpIHtcclxuICAgIHJldHVybiBoYXNoICE9PSBudWxsID8gaGFzaC50b1N0cmluZygpIDogJyc7XHJcbiAgfSksXHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSAkbG9jYXRpb24jcmVwbGFjZVxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogSWYgY2FsbGVkLCBhbGwgY2hhbmdlcyB0byAkbG9jYXRpb24gZHVyaW5nIGN1cnJlbnQgYCRkaWdlc3RgIHdpbGwgYmUgcmVwbGFjaW5nIGN1cnJlbnQgaGlzdG9yeVxyXG4gICAqIHJlY29yZCwgaW5zdGVhZCBvZiBhZGRpbmcgbmV3IG9uZS5cclxuICAgKi9cclxuICByZXBsYWNlOiBmdW5jdGlvbigpIHtcclxuICAgIHRoaXMuJCRyZXBsYWNlID0gdHJ1ZTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxufTtcclxuXHJcbmZvckVhY2goW0xvY2F0aW9uSGFzaGJhbmdJbkh0bWw1VXJsLCBMb2NhdGlvbkhhc2hiYW5nVXJsLCBMb2NhdGlvbkh0bWw1VXJsXSwgZnVuY3Rpb24oTG9jYXRpb24pIHtcclxuICBMb2NhdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGxvY2F0aW9uUHJvdG90eXBlKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lICRsb2NhdGlvbiNzdGF0ZVxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogVGhpcyBtZXRob2QgaXMgZ2V0dGVyIC8gc2V0dGVyLlxyXG4gICAqXHJcbiAgICogUmV0dXJuIHRoZSBoaXN0b3J5IHN0YXRlIG9iamVjdCB3aGVuIGNhbGxlZCB3aXRob3V0IGFueSBwYXJhbWV0ZXIuXHJcbiAgICpcclxuICAgKiBDaGFuZ2UgdGhlIGhpc3Rvcnkgc3RhdGUgb2JqZWN0IHdoZW4gY2FsbGVkIHdpdGggb25lIHBhcmFtZXRlciBhbmQgcmV0dXJuIGAkbG9jYXRpb25gLlxyXG4gICAqIFRoZSBzdGF0ZSBvYmplY3QgaXMgbGF0ZXIgcGFzc2VkIHRvIGBwdXNoU3RhdGVgIG9yIGByZXBsYWNlU3RhdGVgLlxyXG4gICAqXHJcbiAgICogTk9URTogVGhpcyBtZXRob2QgaXMgc3VwcG9ydGVkIG9ubHkgaW4gSFRNTDUgbW9kZSBhbmQgb25seSBpbiBicm93c2VycyBzdXBwb3J0aW5nXHJcbiAgICogdGhlIEhUTUw1IEhpc3RvcnkgQVBJIChpLmUuIG1ldGhvZHMgYHB1c2hTdGF0ZWAgYW5kIGByZXBsYWNlU3RhdGVgKS4gSWYgeW91IG5lZWQgdG8gc3VwcG9ydFxyXG4gICAqIG9sZGVyIGJyb3dzZXJzIChsaWtlIElFOSBvciBBbmRyb2lkIDwgNC4wKSwgZG9uJ3QgdXNlIHRoaXMgbWV0aG9kLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtvYmplY3Q9fSBzdGF0ZSBTdGF0ZSBvYmplY3QgZm9yIHB1c2hTdGF0ZSBvciByZXBsYWNlU3RhdGVcclxuICAgKiBAcmV0dXJuIHtvYmplY3R9IHN0YXRlXHJcbiAgICovXHJcbiAgTG9jYXRpb24ucHJvdG90eXBlLnN0YXRlID0gZnVuY3Rpb24oc3RhdGUpIHtcclxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aClcclxuICAgICAgcmV0dXJuIHRoaXMuJCRzdGF0ZTtcclxuXHJcbiAgICBpZiAoTG9jYXRpb24gIT09IExvY2F0aW9uSHRtbDVVcmwgfHwgIXRoaXMuJCRodG1sNSkge1xyXG4gICAgICB0aHJvdyAkbG9jYXRpb25NaW5FcnIoJ25vc3RhdGUnLCAnSGlzdG9yeSBBUEkgc3RhdGUgc3VwcG9ydCBpcyBhdmFpbGFibGUgb25seSAnICtcclxuICAgICAgICAnaW4gSFRNTDUgbW9kZSBhbmQgb25seSBpbiBicm93c2VycyBzdXBwb3J0aW5nIEhUTUw1IEhpc3RvcnkgQVBJJyk7XHJcbiAgICB9XHJcbiAgICAvLyBUaGUgdXNlciBtaWdodCBtb2RpZnkgYHN0YXRlT2JqZWN0YCBhZnRlciBpbnZva2luZyBgJGxvY2F0aW9uLnN0YXRlKHN0YXRlT2JqZWN0KWBcclxuICAgIC8vIGJ1dCB3ZSdyZSBjaGFuZ2luZyB0aGUgJCRzdGF0ZSByZWZlcmVuY2UgdG8gJGJyb3dzZXIuc3RhdGUoKSBkdXJpbmcgdGhlICRkaWdlc3RcclxuICAgIC8vIHNvIHRoZSBtb2RpZmljYXRpb24gd2luZG93IGlzIG5hcnJvdy5cclxuICAgIHRoaXMuJCRzdGF0ZSA9IGlzVW5kZWZpbmVkKHN0YXRlKSA/IG51bGwgOiBzdGF0ZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG59KTtcclxuXHJcblxyXG5mdW5jdGlvbiBsb2NhdGlvbkdldHRlcihwcm9wZXJ0eSkge1xyXG4gIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzW3Byb3BlcnR5XTtcclxuICB9O1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gbG9jYXRpb25HZXR0ZXJTZXR0ZXIocHJvcGVydHksIHByZXByb2Nlc3MpIHtcclxuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpXHJcbiAgICAgIHJldHVybiB0aGlzW3Byb3BlcnR5XTtcclxuXHJcbiAgICB0aGlzW3Byb3BlcnR5XSA9IHByZXByb2Nlc3ModmFsdWUpO1xyXG4gICAgdGhpcy4kJGNvbXBvc2UoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBzZXJ2aWNlXHJcbiAqIEBuYW1lICRsb2NhdGlvblxyXG4gKlxyXG4gKiBAcmVxdWlyZXMgJHJvb3RFbGVtZW50XHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBUaGUgJGxvY2F0aW9uIHNlcnZpY2UgcGFyc2VzIHRoZSBVUkwgaW4gdGhlIGJyb3dzZXIgYWRkcmVzcyBiYXIgKGJhc2VkIG9uIHRoZVxyXG4gKiBbd2luZG93LmxvY2F0aW9uXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi93aW5kb3cubG9jYXRpb24pKSBhbmQgbWFrZXMgdGhlIFVSTFxyXG4gKiBhdmFpbGFibGUgdG8geW91ciBhcHBsaWNhdGlvbi4gQ2hhbmdlcyB0byB0aGUgVVJMIGluIHRoZSBhZGRyZXNzIGJhciBhcmUgcmVmbGVjdGVkIGludG9cclxuICogJGxvY2F0aW9uIHNlcnZpY2UgYW5kIGNoYW5nZXMgdG8gJGxvY2F0aW9uIGFyZSByZWZsZWN0ZWQgaW50byB0aGUgYnJvd3NlciBhZGRyZXNzIGJhci5cclxuICpcclxuICogKipUaGUgJGxvY2F0aW9uIHNlcnZpY2U6KipcclxuICpcclxuICogLSBFeHBvc2VzIHRoZSBjdXJyZW50IFVSTCBpbiB0aGUgYnJvd3NlciBhZGRyZXNzIGJhciwgc28geW91IGNhblxyXG4gKiAgIC0gV2F0Y2ggYW5kIG9ic2VydmUgdGhlIFVSTC5cclxuICogICAtIENoYW5nZSB0aGUgVVJMLlxyXG4gKiAtIFN5bmNocm9uaXplcyB0aGUgVVJMIHdpdGggdGhlIGJyb3dzZXIgd2hlbiB0aGUgdXNlclxyXG4gKiAgIC0gQ2hhbmdlcyB0aGUgYWRkcmVzcyBiYXIuXHJcbiAqICAgLSBDbGlja3MgdGhlIGJhY2sgb3IgZm9yd2FyZCBidXR0b24gKG9yIGNsaWNrcyBhIEhpc3RvcnkgbGluaykuXHJcbiAqICAgLSBDbGlja3Mgb24gYSBsaW5rLlxyXG4gKiAtIFJlcHJlc2VudHMgdGhlIFVSTCBvYmplY3QgYXMgYSBzZXQgb2YgbWV0aG9kcyAocHJvdG9jb2wsIGhvc3QsIHBvcnQsIHBhdGgsIHNlYXJjaCwgaGFzaCkuXHJcbiAqXHJcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB7QGxpbmsgZ3VpZGUvJGxvY2F0aW9uIERldmVsb3BlciBHdWlkZTogVXNpbmcgJGxvY2F0aW9ufVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgcHJvdmlkZXJcclxuICogQG5hbWUgJGxvY2F0aW9uUHJvdmlkZXJcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFVzZSB0aGUgYCRsb2NhdGlvblByb3ZpZGVyYCB0byBjb25maWd1cmUgaG93IHRoZSBhcHBsaWNhdGlvbiBkZWVwIGxpbmtpbmcgcGF0aHMgYXJlIHN0b3JlZC5cclxuICovXHJcbmZ1bmN0aW9uICRMb2NhdGlvblByb3ZpZGVyKCkge1xyXG4gIHZhciBoYXNoUHJlZml4ID0gJycsXHJcbiAgICAgIGh0bWw1TW9kZSA9IHtcclxuICAgICAgICBlbmFibGVkOiBmYWxzZSxcclxuICAgICAgICByZXF1aXJlQmFzZTogdHJ1ZSxcclxuICAgICAgICByZXdyaXRlTGlua3M6IHRydWVcclxuICAgICAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lICRsb2NhdGlvblByb3ZpZGVyI2hhc2hQcmVmaXhcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IHByZWZpeCBQcmVmaXggZm9yIGhhc2ggcGFydCAoY29udGFpbmluZyBwYXRoIGFuZCBzZWFyY2gpXHJcbiAgICogQHJldHVybnMgeyp9IGN1cnJlbnQgdmFsdWUgaWYgdXNlZCBhcyBnZXR0ZXIgb3IgaXRzZWxmIChjaGFpbmluZykgaWYgdXNlZCBhcyBzZXR0ZXJcclxuICAgKi9cclxuICB0aGlzLmhhc2hQcmVmaXggPSBmdW5jdGlvbihwcmVmaXgpIHtcclxuICAgIGlmIChpc0RlZmluZWQocHJlZml4KSkge1xyXG4gICAgICBoYXNoUHJlZml4ID0gcHJlZml4O1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBoYXNoUHJlZml4O1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSAkbG9jYXRpb25Qcm92aWRlciNodG1sNU1vZGVcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBAcGFyYW0geyhib29sZWFufE9iamVjdCk9fSBtb2RlIElmIGJvb2xlYW4sIHNldHMgYGh0bWw1TW9kZS5lbmFibGVkYCB0byB2YWx1ZS5cclxuICAgKiAgIElmIG9iamVjdCwgc2V0cyBgZW5hYmxlZGAsIGByZXF1aXJlQmFzZWAgYW5kIGByZXdyaXRlTGlua3NgIHRvIHJlc3BlY3RpdmUgdmFsdWVzLiBTdXBwb3J0ZWRcclxuICAgKiAgIHByb3BlcnRpZXM6XHJcbiAgICogICAtICoqZW5hYmxlZCoqIOKAkyBge2Jvb2xlYW59YCDigJMgKGRlZmF1bHQ6IGZhbHNlKSBJZiB0cnVlLCB3aWxsIHJlbHkgb24gYGhpc3RvcnkucHVzaFN0YXRlYCB0b1xyXG4gICAqICAgICBjaGFuZ2UgdXJscyB3aGVyZSBzdXBwb3J0ZWQuIFdpbGwgZmFsbCBiYWNrIHRvIGhhc2gtcHJlZml4ZWQgcGF0aHMgaW4gYnJvd3NlcnMgdGhhdCBkbyBub3RcclxuICAgKiAgICAgc3VwcG9ydCBgcHVzaFN0YXRlYC5cclxuICAgKiAgIC0gKipyZXF1aXJlQmFzZSoqIC0gYHtib29sZWFufWAgLSAoZGVmYXVsdDogYHRydWVgKSBXaGVuIGh0bWw1TW9kZSBpcyBlbmFibGVkLCBzcGVjaWZpZXNcclxuICAgKiAgICAgd2hldGhlciBvciBub3QgYSA8YmFzZT4gdGFnIGlzIHJlcXVpcmVkIHRvIGJlIHByZXNlbnQuIElmIGBlbmFibGVkYCBhbmQgYHJlcXVpcmVCYXNlYCBhcmVcclxuICAgKiAgICAgdHJ1ZSwgYW5kIGEgYmFzZSB0YWcgaXMgbm90IHByZXNlbnQsIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duIHdoZW4gYCRsb2NhdGlvbmAgaXMgaW5qZWN0ZWQuXHJcbiAgICogICAgIFNlZSB0aGUge0BsaW5rIGd1aWRlLyRsb2NhdGlvbiAkbG9jYXRpb24gZ3VpZGUgZm9yIG1vcmUgaW5mb3JtYXRpb259XHJcbiAgICogICAtICoqcmV3cml0ZUxpbmtzKiogLSBge2Jvb2xlYW59YCAtIChkZWZhdWx0OiBgdHJ1ZWApIFdoZW4gaHRtbDVNb2RlIGlzIGVuYWJsZWQsXHJcbiAgICogICAgIGVuYWJsZXMvZGlzYWJsZXMgdXJsIHJld3JpdGluZyBmb3IgcmVsYXRpdmUgbGlua3MuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBodG1sNU1vZGUgb2JqZWN0IGlmIHVzZWQgYXMgZ2V0dGVyIG9yIGl0c2VsZiAoY2hhaW5pbmcpIGlmIHVzZWQgYXMgc2V0dGVyXHJcbiAgICovXHJcbiAgdGhpcy5odG1sNU1vZGUgPSBmdW5jdGlvbihtb2RlKSB7XHJcbiAgICBpZiAoaXNCb29sZWFuKG1vZGUpKSB7XHJcbiAgICAgIGh0bWw1TW9kZS5lbmFibGVkID0gbW9kZTtcclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KG1vZGUpKSB7XHJcblxyXG4gICAgICBpZiAoaXNCb29sZWFuKG1vZGUuZW5hYmxlZCkpIHtcclxuICAgICAgICBodG1sNU1vZGUuZW5hYmxlZCA9IG1vZGUuZW5hYmxlZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzQm9vbGVhbihtb2RlLnJlcXVpcmVCYXNlKSkge1xyXG4gICAgICAgIGh0bWw1TW9kZS5yZXF1aXJlQmFzZSA9IG1vZGUucmVxdWlyZUJhc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0Jvb2xlYW4obW9kZS5yZXdyaXRlTGlua3MpKSB7XHJcbiAgICAgICAgaHRtbDVNb2RlLnJld3JpdGVMaW5rcyA9IG1vZGUucmV3cml0ZUxpbmtzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBodG1sNU1vZGU7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIGV2ZW50XHJcbiAgICogQG5hbWUgJGxvY2F0aW9uIyRsb2NhdGlvbkNoYW5nZVN0YXJ0XHJcbiAgICogQGV2ZW50VHlwZSBicm9hZGNhc3Qgb24gcm9vdCBzY29wZVxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIEJyb2FkY2FzdGVkIGJlZm9yZSBhIFVSTCB3aWxsIGNoYW5nZS5cclxuICAgKlxyXG4gICAqIFRoaXMgY2hhbmdlIGNhbiBiZSBwcmV2ZW50ZWQgYnkgY2FsbGluZ1xyXG4gICAqIGBwcmV2ZW50RGVmYXVsdGAgbWV0aG9kIG9mIHRoZSBldmVudC4gU2VlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRvbn0gZm9yIG1vcmVcclxuICAgKiBkZXRhaWxzIGFib3V0IGV2ZW50IG9iamVjdC4gVXBvbiBzdWNjZXNzZnVsIGNoYW5nZVxyXG4gICAqIHtAbGluayBuZy4kbG9jYXRpb24jJGxvY2F0aW9uQ2hhbmdlU3VjY2VzcyAkbG9jYXRpb25DaGFuZ2VTdWNjZXNzfSBpcyBmaXJlZC5cclxuICAgKlxyXG4gICAqIFRoZSBgbmV3U3RhdGVgIGFuZCBgb2xkU3RhdGVgIHBhcmFtZXRlcnMgbWF5IGJlIGRlZmluZWQgb25seSBpbiBIVE1MNSBtb2RlIGFuZCB3aGVuXHJcbiAgICogdGhlIGJyb3dzZXIgc3VwcG9ydHMgdGhlIEhUTUw1IEhpc3RvcnkgQVBJLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGFuZ3VsYXJFdmVudCBTeW50aGV0aWMgZXZlbnQgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdVcmwgTmV3IFVSTFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb2xkVXJsIFVSTCB0aGF0IHdhcyBiZWZvcmUgaXQgd2FzIGNoYW5nZWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuZXdTdGF0ZSBOZXcgaGlzdG9yeSBzdGF0ZSBvYmplY3RcclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9sZFN0YXRlIEhpc3Rvcnkgc3RhdGUgb2JqZWN0IHRoYXQgd2FzIGJlZm9yZSBpdCB3YXMgY2hhbmdlZC5cclxuICAgKi9cclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIGV2ZW50XHJcbiAgICogQG5hbWUgJGxvY2F0aW9uIyRsb2NhdGlvbkNoYW5nZVN1Y2Nlc3NcclxuICAgKiBAZXZlbnRUeXBlIGJyb2FkY2FzdCBvbiByb290IHNjb3BlXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogQnJvYWRjYXN0ZWQgYWZ0ZXIgYSBVUkwgd2FzIGNoYW5nZWQuXHJcbiAgICpcclxuICAgKiBUaGUgYG5ld1N0YXRlYCBhbmQgYG9sZFN0YXRlYCBwYXJhbWV0ZXJzIG1heSBiZSBkZWZpbmVkIG9ubHkgaW4gSFRNTDUgbW9kZSBhbmQgd2hlblxyXG4gICAqIHRoZSBicm93c2VyIHN1cHBvcnRzIHRoZSBIVE1MNSBIaXN0b3J5IEFQSS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhbmd1bGFyRXZlbnQgU3ludGhldGljIGV2ZW50IG9iamVjdC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3VXJsIE5ldyBVUkxcclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9sZFVybCBVUkwgdGhhdCB3YXMgYmVmb3JlIGl0IHdhcyBjaGFuZ2VkLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmV3U3RhdGUgTmV3IGhpc3Rvcnkgc3RhdGUgb2JqZWN0XHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvbGRTdGF0ZSBIaXN0b3J5IHN0YXRlIG9iamVjdCB0aGF0IHdhcyBiZWZvcmUgaXQgd2FzIGNoYW5nZWQuXHJcbiAgICovXHJcblxyXG4gIHRoaXMuJGdldCA9IFsnJHJvb3RTY29wZScsICckYnJvd3NlcicsICckc25pZmZlcicsICckcm9vdEVsZW1lbnQnLFxyXG4gICAgICBmdW5jdGlvbigkcm9vdFNjb3BlLCAkYnJvd3NlciwgJHNuaWZmZXIsICRyb290RWxlbWVudCkge1xyXG4gICAgdmFyICRsb2NhdGlvbixcclxuICAgICAgICBMb2NhdGlvbk1vZGUsXHJcbiAgICAgICAgYmFzZUhyZWYgPSAkYnJvd3Nlci5iYXNlSHJlZigpLCAvLyBpZiBiYXNlW2hyZWZdIGlzIHVuZGVmaW5lZCwgaXQgZGVmYXVsdHMgdG8gJydcclxuICAgICAgICBpbml0aWFsVXJsID0gJGJyb3dzZXIudXJsKCksXHJcbiAgICAgICAgYXBwQmFzZTtcclxuXHJcbiAgICBpZiAoaHRtbDVNb2RlLmVuYWJsZWQpIHtcclxuICAgICAgaWYgKCFiYXNlSHJlZiAmJiBodG1sNU1vZGUucmVxdWlyZUJhc2UpIHtcclxuICAgICAgICB0aHJvdyAkbG9jYXRpb25NaW5FcnIoJ25vYmFzZScsXHJcbiAgICAgICAgICBcIiRsb2NhdGlvbiBpbiBIVE1MNSBtb2RlIHJlcXVpcmVzIGEgPGJhc2U+IHRhZyB0byBiZSBwcmVzZW50IVwiKTtcclxuICAgICAgfVxyXG4gICAgICBhcHBCYXNlID0gc2VydmVyQmFzZShpbml0aWFsVXJsKSArIChiYXNlSHJlZiB8fCAnLycpO1xyXG4gICAgICBMb2NhdGlvbk1vZGUgPSAkc25pZmZlci5oaXN0b3J5ID8gTG9jYXRpb25IdG1sNVVybCA6IExvY2F0aW9uSGFzaGJhbmdJbkh0bWw1VXJsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXBwQmFzZSA9IHN0cmlwSGFzaChpbml0aWFsVXJsKTtcclxuICAgICAgTG9jYXRpb25Nb2RlID0gTG9jYXRpb25IYXNoYmFuZ1VybDtcclxuICAgIH1cclxuICAgICRsb2NhdGlvbiA9IG5ldyBMb2NhdGlvbk1vZGUoYXBwQmFzZSwgJyMnICsgaGFzaFByZWZpeCk7XHJcbiAgICAkbG9jYXRpb24uJCRwYXJzZUxpbmtVcmwoaW5pdGlhbFVybCwgaW5pdGlhbFVybCk7XHJcblxyXG4gICAgJGxvY2F0aW9uLiQkc3RhdGUgPSAkYnJvd3Nlci5zdGF0ZSgpO1xyXG5cclxuICAgIHZhciBJR05PUkVfVVJJX1JFR0VYUCA9IC9eXFxzKihqYXZhc2NyaXB0fG1haWx0byk6L2k7XHJcblxyXG4gICAgZnVuY3Rpb24gc2V0QnJvd3NlclVybFdpdGhGYWxsYmFjayh1cmwsIHJlcGxhY2UsIHN0YXRlKSB7XHJcbiAgICAgIHZhciBvbGRVcmwgPSAkbG9jYXRpb24udXJsKCk7XHJcbiAgICAgIHZhciBvbGRTdGF0ZSA9ICRsb2NhdGlvbi4kJHN0YXRlO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgICRicm93c2VyLnVybCh1cmwsIHJlcGxhY2UsIHN0YXRlKTtcclxuXHJcbiAgICAgICAgLy8gTWFrZSBzdXJlICRsb2NhdGlvbi5zdGF0ZSgpIHJldHVybnMgcmVmZXJlbnRpYWxseSBpZGVudGljYWwgKG5vdCBqdXN0IGRlZXBseSBlcXVhbClcclxuICAgICAgICAvLyBzdGF0ZSBvYmplY3Q7IHRoaXMgbWFrZXMgcG9zc2libGUgcXVpY2sgY2hlY2tpbmcgaWYgdGhlIHN0YXRlIGNoYW5nZWQgaW4gdGhlIGRpZ2VzdFxyXG4gICAgICAgIC8vIGxvb3AuIENoZWNraW5nIGRlZXAgZXF1YWxpdHkgd291bGQgYmUgdG9vIGV4cGVuc2l2ZS5cclxuICAgICAgICAkbG9jYXRpb24uJCRzdGF0ZSA9ICRicm93c2VyLnN0YXRlKCk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAvLyBSZXN0b3JlIG9sZCB2YWx1ZXMgaWYgcHVzaFN0YXRlIGZhaWxzXHJcbiAgICAgICAgJGxvY2F0aW9uLnVybChvbGRVcmwpO1xyXG4gICAgICAgICRsb2NhdGlvbi4kJHN0YXRlID0gb2xkU3RhdGU7XHJcblxyXG4gICAgICAgIHRocm93IGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkcm9vdEVsZW1lbnQub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgLy8gVE9ETyh2b2p0YSk6IHJld3JpdGUgbGluayB3aGVuIG9wZW5pbmcgaW4gbmV3IHRhYi93aW5kb3cgKGluIGxlZ2FjeSBicm93c2VyKVxyXG4gICAgICAvLyBjdXJyZW50bHkgd2Ugb3BlbiBuaWNlIHVybCBsaW5rIGFuZCByZWRpcmVjdCB0aGVuXHJcblxyXG4gICAgICBpZiAoIWh0bWw1TW9kZS5yZXdyaXRlTGlua3MgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LndoaWNoID09IDIpIHJldHVybjtcclxuXHJcbiAgICAgIHZhciBlbG0gPSBqcUxpdGUoZXZlbnQudGFyZ2V0KTtcclxuXHJcbiAgICAgIC8vIHRyYXZlcnNlIHRoZSBET00gdXAgdG8gZmluZCBmaXJzdCBBIHRhZ1xyXG4gICAgICB3aGlsZSAobm9kZU5hbWVfKGVsbVswXSkgIT09ICdhJykge1xyXG4gICAgICAgIC8vIGlnbm9yZSByZXdyaXRpbmcgaWYgbm8gQSB0YWcgKHJlYWNoZWQgcm9vdCBlbGVtZW50LCBvciBubyBwYXJlbnQgLSByZW1vdmVkIGZyb20gZG9jdW1lbnQpXHJcbiAgICAgICAgaWYgKGVsbVswXSA9PT0gJHJvb3RFbGVtZW50WzBdIHx8ICEoZWxtID0gZWxtLnBhcmVudCgpKVswXSkgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgYWJzSHJlZiA9IGVsbS5wcm9wKCdocmVmJyk7XHJcbiAgICAgIC8vIGdldCB0aGUgYWN0dWFsIGhyZWYgYXR0cmlidXRlIC0gc2VlXHJcbiAgICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9kZDM0NzE0OCh2PXZzLjg1KS5hc3B4XHJcbiAgICAgIHZhciByZWxIcmVmID0gZWxtLmF0dHIoJ2hyZWYnKSB8fCBlbG0uYXR0cigneGxpbms6aHJlZicpO1xyXG5cclxuICAgICAgaWYgKGlzT2JqZWN0KGFic0hyZWYpICYmIGFic0hyZWYudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgU1ZHQW5pbWF0ZWRTdHJpbmddJykge1xyXG4gICAgICAgIC8vIFNWR0FuaW1hdGVkU3RyaW5nLmFuaW1WYWwgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBTVkdBbmltYXRlZFN0cmluZy5iYXNlVmFsLCB1bmxlc3MgZHVyaW5nXHJcbiAgICAgICAgLy8gYW4gYW5pbWF0aW9uLlxyXG4gICAgICAgIGFic0hyZWYgPSB1cmxSZXNvbHZlKGFic0hyZWYuYW5pbVZhbCkuaHJlZjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSWdub3JlIHdoZW4gdXJsIGlzIHN0YXJ0ZWQgd2l0aCBqYXZhc2NyaXB0OiBvciBtYWlsdG86XHJcbiAgICAgIGlmIChJR05PUkVfVVJJX1JFR0VYUC50ZXN0KGFic0hyZWYpKSByZXR1cm47XHJcblxyXG4gICAgICBpZiAoYWJzSHJlZiAmJiAhZWxtLmF0dHIoJ3RhcmdldCcpICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xyXG4gICAgICAgIGlmICgkbG9jYXRpb24uJCRwYXJzZUxpbmtVcmwoYWJzSHJlZiwgcmVsSHJlZikpIHtcclxuICAgICAgICAgIC8vIFdlIGRvIGEgcHJldmVudERlZmF1bHQgZm9yIGFsbCB1cmxzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGFuZ3VsYXIgYXBwbGljYXRpb24sXHJcbiAgICAgICAgICAvLyBpbiBodG1sNW1vZGUgYW5kIGFsc28gd2l0aG91dCwgc28gdGhhdCB3ZSBhcmUgYWJsZSB0byBhYm9ydCBuYXZpZ2F0aW9uIHdpdGhvdXRcclxuICAgICAgICAgIC8vIGdldHRpbmcgZG91YmxlIGVudHJpZXMgaW4gdGhlIGxvY2F0aW9uIGhpc3RvcnkuXHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgLy8gdXBkYXRlIGxvY2F0aW9uIG1hbnVhbGx5XHJcbiAgICAgICAgICBpZiAoJGxvY2F0aW9uLmFic1VybCgpICE9ICRicm93c2VyLnVybCgpKSB7XHJcbiAgICAgICAgICAgICRyb290U2NvcGUuJGFwcGx5KCk7XHJcbiAgICAgICAgICAgIC8vIGhhY2sgdG8gd29yayBhcm91bmQgRkY2IGJ1ZyA2ODQyMDggd2hlbiBzY2VuYXJpbyBydW5uZXIgY2xpY2tzIG9uIGxpbmtzXHJcbiAgICAgICAgICAgIHdpbmRvdy5hbmd1bGFyWydmZi02ODQyMDgtcHJldmVudERlZmF1bHQnXSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgLy8gcmV3cml0ZSBoYXNoYmFuZyB1cmwgPD4gaHRtbDUgdXJsXHJcbiAgICBpZiAoJGxvY2F0aW9uLmFic1VybCgpICE9IGluaXRpYWxVcmwpIHtcclxuICAgICAgJGJyb3dzZXIudXJsKCRsb2NhdGlvbi5hYnNVcmwoKSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGluaXRpYWxpemluZyA9IHRydWU7XHJcblxyXG4gICAgLy8gdXBkYXRlICRsb2NhdGlvbiB3aGVuICRicm93c2VyIHVybCBjaGFuZ2VzXHJcbiAgICAkYnJvd3Nlci5vblVybENoYW5nZShmdW5jdGlvbihuZXdVcmwsIG5ld1N0YXRlKSB7XHJcbiAgICAgICRyb290U2NvcGUuJGV2YWxBc3luYyhmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgb2xkVXJsID0gJGxvY2F0aW9uLmFic1VybCgpO1xyXG4gICAgICAgIHZhciBvbGRTdGF0ZSA9ICRsb2NhdGlvbi4kJHN0YXRlO1xyXG4gICAgICAgIHZhciBkZWZhdWx0UHJldmVudGVkO1xyXG5cclxuICAgICAgICAkbG9jYXRpb24uJCRwYXJzZShuZXdVcmwpO1xyXG4gICAgICAgICRsb2NhdGlvbi4kJHN0YXRlID0gbmV3U3RhdGU7XHJcblxyXG4gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSAkcm9vdFNjb3BlLiRicm9hZGNhc3QoJyRsb2NhdGlvbkNoYW5nZVN0YXJ0JywgbmV3VXJsLCBvbGRVcmwsXHJcbiAgICAgICAgICAgIG5ld1N0YXRlLCBvbGRTdGF0ZSkuZGVmYXVsdFByZXZlbnRlZDtcclxuXHJcbiAgICAgICAgLy8gaWYgdGhlIGxvY2F0aW9uIHdhcyBjaGFuZ2VkIGJ5IGEgYCRsb2NhdGlvbkNoYW5nZVN0YXJ0YCBoYW5kbGVyIHRoZW4gc3RvcFxyXG4gICAgICAgIC8vIHByb2Nlc3NpbmcgdGhpcyBsb2NhdGlvbiBjaGFuZ2VcclxuICAgICAgICBpZiAoJGxvY2F0aW9uLmFic1VybCgpICE9PSBuZXdVcmwpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpIHtcclxuICAgICAgICAgICRsb2NhdGlvbi4kJHBhcnNlKG9sZFVybCk7XHJcbiAgICAgICAgICAkbG9jYXRpb24uJCRzdGF0ZSA9IG9sZFN0YXRlO1xyXG4gICAgICAgICAgc2V0QnJvd3NlclVybFdpdGhGYWxsYmFjayhvbGRVcmwsIGZhbHNlLCBvbGRTdGF0ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGluaXRpYWxpemluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgYWZ0ZXJMb2NhdGlvbkNoYW5nZShvbGRVcmwsIG9sZFN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoISRyb290U2NvcGUuJCRwaGFzZSkgJHJvb3RTY29wZS4kZGlnZXN0KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyB1cGRhdGUgYnJvd3NlclxyXG4gICAgJHJvb3RTY29wZS4kd2F0Y2goZnVuY3Rpb24gJGxvY2F0aW9uV2F0Y2goKSB7XHJcbiAgICAgIHZhciBvbGRVcmwgPSAkYnJvd3Nlci51cmwoKTtcclxuICAgICAgdmFyIG9sZFN0YXRlID0gJGJyb3dzZXIuc3RhdGUoKTtcclxuICAgICAgdmFyIGN1cnJlbnRSZXBsYWNlID0gJGxvY2F0aW9uLiQkcmVwbGFjZTtcclxuICAgICAgdmFyIHVybE9yU3RhdGVDaGFuZ2VkID0gb2xkVXJsICE9PSAkbG9jYXRpb24uYWJzVXJsKCkgfHxcclxuICAgICAgICAoJGxvY2F0aW9uLiQkaHRtbDUgJiYgJHNuaWZmZXIuaGlzdG9yeSAmJiBvbGRTdGF0ZSAhPT0gJGxvY2F0aW9uLiQkc3RhdGUpO1xyXG5cclxuICAgICAgaWYgKGluaXRpYWxpemluZyB8fCB1cmxPclN0YXRlQ2hhbmdlZCkge1xyXG4gICAgICAgIGluaXRpYWxpemluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAkcm9vdFNjb3BlLiRldmFsQXN5bmMoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICB2YXIgbmV3VXJsID0gJGxvY2F0aW9uLmFic1VybCgpO1xyXG4gICAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSAkcm9vdFNjb3BlLiRicm9hZGNhc3QoJyRsb2NhdGlvbkNoYW5nZVN0YXJ0JywgbmV3VXJsLCBvbGRVcmwsXHJcbiAgICAgICAgICAgICAgJGxvY2F0aW9uLiQkc3RhdGUsIG9sZFN0YXRlKS5kZWZhdWx0UHJldmVudGVkO1xyXG5cclxuICAgICAgICAgIC8vIGlmIHRoZSBsb2NhdGlvbiB3YXMgY2hhbmdlZCBieSBhIGAkbG9jYXRpb25DaGFuZ2VTdGFydGAgaGFuZGxlciB0aGVuIHN0b3BcclxuICAgICAgICAgIC8vIHByb2Nlc3NpbmcgdGhpcyBsb2NhdGlvbiBjaGFuZ2VcclxuICAgICAgICAgIGlmICgkbG9jYXRpb24uYWJzVXJsKCkgIT09IG5ld1VybCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XHJcbiAgICAgICAgICAgICRsb2NhdGlvbi4kJHBhcnNlKG9sZFVybCk7XHJcbiAgICAgICAgICAgICRsb2NhdGlvbi4kJHN0YXRlID0gb2xkU3RhdGU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodXJsT3JTdGF0ZUNoYW5nZWQpIHtcclxuICAgICAgICAgICAgICBzZXRCcm93c2VyVXJsV2l0aEZhbGxiYWNrKG5ld1VybCwgY3VycmVudFJlcGxhY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRTdGF0ZSA9PT0gJGxvY2F0aW9uLiQkc3RhdGUgPyBudWxsIDogJGxvY2F0aW9uLiQkc3RhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFmdGVyTG9jYXRpb25DaGFuZ2Uob2xkVXJsLCBvbGRTdGF0ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICRsb2NhdGlvbi4kJHJlcGxhY2UgPSBmYWxzZTtcclxuXHJcbiAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gcmV0dXJuIGFueXRoaW5nIGJlY2F1c2UgJGV2YWxBc3luYyB3aWxsIG1ha2UgdGhlIGRpZ2VzdCBsb29wIGRpcnR5IHdoZW5cclxuICAgICAgLy8gdGhlcmUgaXMgYSBjaGFuZ2VcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiAkbG9jYXRpb247XHJcblxyXG4gICAgZnVuY3Rpb24gYWZ0ZXJMb2NhdGlvbkNoYW5nZShvbGRVcmwsIG9sZFN0YXRlKSB7XHJcbiAgICAgICRyb290U2NvcGUuJGJyb2FkY2FzdCgnJGxvY2F0aW9uQ2hhbmdlU3VjY2VzcycsICRsb2NhdGlvbi5hYnNVcmwoKSwgb2xkVXJsLFxyXG4gICAgICAgICRsb2NhdGlvbi4kJHN0YXRlLCBvbGRTdGF0ZSk7XHJcbiAgICB9XHJcbn1dO1xyXG59XHJcblxyXG4vKipcclxuICogQG5nZG9jIHNlcnZpY2VcclxuICogQG5hbWUgJGxvZ1xyXG4gKiBAcmVxdWlyZXMgJHdpbmRvd1xyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogU2ltcGxlIHNlcnZpY2UgZm9yIGxvZ2dpbmcuIERlZmF1bHQgaW1wbGVtZW50YXRpb24gc2FmZWx5IHdyaXRlcyB0aGUgbWVzc2FnZVxyXG4gKiBpbnRvIHRoZSBicm93c2VyJ3MgY29uc29sZSAoaWYgcHJlc2VudCkuXHJcbiAqXHJcbiAqIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBzZXJ2aWNlIGlzIHRvIHNpbXBsaWZ5IGRlYnVnZ2luZyBhbmQgdHJvdWJsZXNob290aW5nLlxyXG4gKlxyXG4gKiBUaGUgZGVmYXVsdCBpcyB0byBsb2cgYGRlYnVnYCBtZXNzYWdlcy4gWW91IGNhbiB1c2VcclxuICoge0BsaW5rIG5nLiRsb2dQcm92aWRlciBuZy4kbG9nUHJvdmlkZXIjZGVidWdFbmFibGVkfSB0byBjaGFuZ2UgdGhpcy5cclxuICpcclxuICogQGV4YW1wbGVcclxuICAgPGV4YW1wbGUgbW9kdWxlPVwibG9nRXhhbXBsZVwiPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJzY3JpcHQuanNcIj5cclxuICAgICAgIGFuZ3VsYXIubW9kdWxlKCdsb2dFeGFtcGxlJywgW10pXHJcbiAgICAgICAgIC5jb250cm9sbGVyKCdMb2dDb250cm9sbGVyJywgWyckc2NvcGUnLCAnJGxvZycsIGZ1bmN0aW9uKCRzY29wZSwgJGxvZykge1xyXG4gICAgICAgICAgICRzY29wZS4kbG9nID0gJGxvZztcclxuICAgICAgICAgICAkc2NvcGUubWVzc2FnZSA9ICdIZWxsbyBXb3JsZCEnO1xyXG4gICAgICAgICB9XSk7XHJcbiAgICAgPC9maWxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJMb2dDb250cm9sbGVyXCI+XHJcbiAgICAgICAgIDxwPlJlbG9hZCB0aGlzIHBhZ2Ugd2l0aCBvcGVuIGNvbnNvbGUsIGVudGVyIHRleHQgYW5kIGhpdCB0aGUgbG9nIGJ1dHRvbi4uLjwvcD5cclxuICAgICAgICAgTWVzc2FnZTpcclxuICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmctbW9kZWw9XCJtZXNzYWdlXCIvPlxyXG4gICAgICAgICA8YnV0dG9uIG5nLWNsaWNrPVwiJGxvZy5sb2cobWVzc2FnZSlcIj5sb2c8L2J1dHRvbj5cclxuICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz1cIiRsb2cud2FybihtZXNzYWdlKVwiPndhcm48L2J1dHRvbj5cclxuICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz1cIiRsb2cuaW5mbyhtZXNzYWdlKVwiPmluZm88L2J1dHRvbj5cclxuICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz1cIiRsb2cuZXJyb3IobWVzc2FnZSlcIj5lcnJvcjwvYnV0dG9uPlxyXG4gICAgICAgPC9kaXY+XHJcbiAgICAgPC9maWxlPlxyXG4gICA8L2V4YW1wbGU+XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBwcm92aWRlclxyXG4gKiBAbmFtZSAkbG9nUHJvdmlkZXJcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFVzZSB0aGUgYCRsb2dQcm92aWRlcmAgdG8gY29uZmlndXJlIGhvdyB0aGUgYXBwbGljYXRpb24gbG9ncyBtZXNzYWdlc1xyXG4gKi9cclxuZnVuY3Rpb24gJExvZ1Byb3ZpZGVyKCkge1xyXG4gIHZhciBkZWJ1ZyA9IHRydWUsXHJcbiAgICAgIHNlbGYgPSB0aGlzO1xyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgJGxvZ1Byb3ZpZGVyI2RlYnVnRW5hYmxlZFxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbj19IGZsYWcgZW5hYmxlIG9yIGRpc2FibGUgZGVidWcgbGV2ZWwgbWVzc2FnZXNcclxuICAgKiBAcmV0dXJucyB7Kn0gY3VycmVudCB2YWx1ZSBpZiB1c2VkIGFzIGdldHRlciBvciBpdHNlbGYgKGNoYWluaW5nKSBpZiB1c2VkIGFzIHNldHRlclxyXG4gICAqL1xyXG4gIHRoaXMuZGVidWdFbmFibGVkID0gZnVuY3Rpb24oZmxhZykge1xyXG4gICAgaWYgKGlzRGVmaW5lZChmbGFnKSkge1xyXG4gICAgICBkZWJ1ZyA9IGZsYWc7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBkZWJ1ZztcclxuICAgIH1cclxuICB9O1xyXG5cclxuICB0aGlzLiRnZXQgPSBbJyR3aW5kb3cnLCBmdW5jdGlvbigkd2luZG93KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICAgKiBAbmFtZSAkbG9nI2xvZ1xyXG4gICAgICAgKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgICogV3JpdGUgYSBsb2cgbWVzc2FnZVxyXG4gICAgICAgKi9cclxuICAgICAgbG9nOiBjb25zb2xlTG9nKCdsb2cnKSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAqIEBuYW1lICRsb2cjaW5mb1xyXG4gICAgICAgKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgICogV3JpdGUgYW4gaW5mb3JtYXRpb24gbWVzc2FnZVxyXG4gICAgICAgKi9cclxuICAgICAgaW5mbzogY29uc29sZUxvZygnaW5mbycpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICogQG5hbWUgJGxvZyN3YXJuXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAgKiBXcml0ZSBhIHdhcm5pbmcgbWVzc2FnZVxyXG4gICAgICAgKi9cclxuICAgICAgd2FybjogY29uc29sZUxvZygnd2FybicpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICogQG5hbWUgJGxvZyNlcnJvclxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgICogV3JpdGUgYW4gZXJyb3IgbWVzc2FnZVxyXG4gICAgICAgKi9cclxuICAgICAgZXJyb3I6IGNvbnNvbGVMb2coJ2Vycm9yJyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICAgKiBAbmFtZSAkbG9nI2RlYnVnXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAgKiBXcml0ZSBhIGRlYnVnIG1lc3NhZ2VcclxuICAgICAgICovXHJcbiAgICAgIGRlYnVnOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGZuID0gY29uc29sZUxvZygnZGVidWcnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgaWYgKGRlYnVnKSB7XHJcbiAgICAgICAgICAgIGZuLmFwcGx5KHNlbGYsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgfSgpKVxyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiBmb3JtYXRFcnJvcihhcmcpIHtcclxuICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgaWYgKGFyZy5zdGFjaykge1xyXG4gICAgICAgICAgYXJnID0gKGFyZy5tZXNzYWdlICYmIGFyZy5zdGFjay5pbmRleE9mKGFyZy5tZXNzYWdlKSA9PT0gLTEpXHJcbiAgICAgICAgICAgICAgPyAnRXJyb3I6ICcgKyBhcmcubWVzc2FnZSArICdcXG4nICsgYXJnLnN0YWNrXHJcbiAgICAgICAgICAgICAgOiBhcmcuc3RhY2s7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhcmcuc291cmNlVVJMKSB7XHJcbiAgICAgICAgICBhcmcgPSBhcmcubWVzc2FnZSArICdcXG4nICsgYXJnLnNvdXJjZVVSTCArICc6JyArIGFyZy5saW5lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYXJnO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGNvbnNvbGVMb2codHlwZSkge1xyXG4gICAgICB2YXIgY29uc29sZSA9ICR3aW5kb3cuY29uc29sZSB8fCB7fSxcclxuICAgICAgICAgIGxvZ0ZuID0gY29uc29sZVt0eXBlXSB8fCBjb25zb2xlLmxvZyB8fCBub29wLFxyXG4gICAgICAgICAgaGFzQXBwbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgIC8vIE5vdGU6IHJlYWRpbmcgbG9nRm4uYXBwbHkgdGhyb3dzIGFuIGVycm9yIGluIElFMTEgaW4gSUU4IGRvY3VtZW50IG1vZGUuXHJcbiAgICAgIC8vIFRoZSByZWFzb24gYmVoaW5kIHRoaXMgaXMgdGhhdCBjb25zb2xlLmxvZyBoYXMgdHlwZSBcIm9iamVjdFwiIGluIElFOC4uLlxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGhhc0FwcGx5ID0gISFsb2dGbi5hcHBseTtcclxuICAgICAgfSBjYXRjaCAoZSkge31cclxuXHJcbiAgICAgIGlmIChoYXNBcHBseSkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgICBmb3JFYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24oYXJnKSB7XHJcbiAgICAgICAgICAgIGFyZ3MucHVzaChmb3JtYXRFcnJvcihhcmcpKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIGxvZ0ZuLmFwcGx5KGNvbnNvbGUsIGFyZ3MpO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHdlIGFyZSBJRSB3aGljaCBlaXRoZXIgZG9lc24ndCBoYXZlIHdpbmRvdy5jb25zb2xlID0+IHRoaXMgaXMgbm9vcCBhbmQgd2UgZG8gbm90aGluZyxcclxuICAgICAgLy8gb3Igd2UgYXJlIElFIHdoZXJlIGNvbnNvbGUubG9nIGRvZXNuJ3QgaGF2ZSBhcHBseSBzbyB3ZSBsb2cgYXQgbGVhc3QgZmlyc3QgMiBhcmdzXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbihhcmcxLCBhcmcyKSB7XHJcbiAgICAgICAgbG9nRm4oYXJnMSwgYXJnMiA9PSBudWxsID8gJycgOiBhcmcyKTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XTtcclxufVxyXG5cclxudmFyICRwYXJzZU1pbkVyciA9IG1pbkVycignJHBhcnNlJyk7XHJcblxyXG4vLyBTYW5kYm94aW5nIEFuZ3VsYXIgRXhwcmVzc2lvbnNcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vIEFuZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIGdlbmVyYWxseSBjb25zaWRlcmVkIHNhZmUgYmVjYXVzZSB0aGVzZSBleHByZXNzaW9ucyBvbmx5IGhhdmUgZGlyZWN0XHJcbi8vIGFjY2VzcyB0byBgJHNjb3BlYCBhbmQgbG9jYWxzLiBIb3dldmVyLCBvbmUgY2FuIG9idGFpbiB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBKUyBjb2RlIGJ5XHJcbi8vIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byBuYXRpdmUgSlMgZnVuY3Rpb25zIHN1Y2ggYXMgdGhlIEZ1bmN0aW9uIGNvbnN0cnVjdG9yLlxyXG4vL1xyXG4vLyBBcyBhbiBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIEFuZ3VsYXIgZXhwcmVzc2lvbjpcclxuLy9cclxuLy8gICB7fS50b1N0cmluZy5jb25zdHJ1Y3RvcignYWxlcnQoXCJldmlsIEpTIGNvZGVcIiknKVxyXG4vL1xyXG4vLyBUaGlzIHNhbmRib3hpbmcgdGVjaG5pcXVlIGlzIG5vdCBwZXJmZWN0IGFuZCBkb2Vzbid0IGFpbSB0byBiZS4gVGhlIGdvYWwgaXMgdG8gcHJldmVudCBleHBsb2l0c1xyXG4vLyBhZ2FpbnN0IHRoZSBleHByZXNzaW9uIGxhbmd1YWdlLCBidXQgbm90IHRvIHByZXZlbnQgZXhwbG9pdHMgdGhhdCB3ZXJlIGVuYWJsZWQgYnkgZXhwb3NpbmdcclxuLy8gc2Vuc2l0aXZlIEphdmFTY3JpcHQgb3IgYnJvd3NlciBBUElzIG9uIFNjb3BlLiBFeHBvc2luZyBzdWNoIG9iamVjdHMgb24gYSBTY29wZSBpcyBuZXZlciBhIGdvb2RcclxuLy8gcHJhY3RpY2UgYW5kIHRoZXJlZm9yZSB3ZSBhcmUgbm90IGV2ZW4gdHJ5aW5nIHRvIHByb3RlY3QgYWdhaW5zdCBpbnRlcmFjdGlvbiB3aXRoIGFuIG9iamVjdFxyXG4vLyBleHBsaWNpdGx5IGV4cG9zZWQgaW4gdGhpcyB3YXkuXHJcbi8vXHJcbi8vIEluIGdlbmVyYWwsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBhY2Nlc3MgYSBXaW5kb3cgb2JqZWN0IGZyb20gYW4gYW5ndWxhciBleHByZXNzaW9uIHVubGVzcyBhXHJcbi8vIHdpbmRvdyBvciBzb21lIERPTSBvYmplY3QgdGhhdCBoYXMgYSByZWZlcmVuY2UgdG8gd2luZG93IGlzIHB1Ymxpc2hlZCBvbnRvIGEgU2NvcGUuXHJcbi8vIFNpbWlsYXJseSB3ZSBwcmV2ZW50IGludm9jYXRpb25zIG9mIGZ1bmN0aW9uIGtub3duIHRvIGJlIGRhbmdlcm91cywgYXMgd2VsbCBhcyBhc3NpZ25tZW50cyB0b1xyXG4vLyBuYXRpdmUgb2JqZWN0cy5cclxuLy9cclxuLy8gU2VlIGh0dHBzOi8vZG9jcy5hbmd1bGFyanMub3JnL2d1aWRlL3NlY3VyaXR5XHJcblxyXG5cclxuZnVuY3Rpb24gZW5zdXJlU2FmZU1lbWJlck5hbWUobmFtZSwgZnVsbEV4cHJlc3Npb24pIHtcclxuICBpZiAobmFtZSA9PT0gXCJfX2RlZmluZUdldHRlcl9fXCIgfHwgbmFtZSA9PT0gXCJfX2RlZmluZVNldHRlcl9fXCJcclxuICAgICAgfHwgbmFtZSA9PT0gXCJfX2xvb2t1cEdldHRlcl9fXCIgfHwgbmFtZSA9PT0gXCJfX2xvb2t1cFNldHRlcl9fXCJcclxuICAgICAgfHwgbmFtZSA9PT0gXCJfX3Byb3RvX19cIikge1xyXG4gICAgdGhyb3cgJHBhcnNlTWluRXJyKCdpc2VjZmxkJyxcclxuICAgICAgICAnQXR0ZW1wdGluZyB0byBhY2Nlc3MgYSBkaXNhbGxvd2VkIGZpZWxkIGluIEFuZ3VsYXIgZXhwcmVzc2lvbnMhICdcclxuICAgICAgICArICdFeHByZXNzaW9uOiB7MH0nLCBmdWxsRXhwcmVzc2lvbik7XHJcbiAgfVxyXG4gIHJldHVybiBuYW1lO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbnN1cmVTYWZlT2JqZWN0KG9iaiwgZnVsbEV4cHJlc3Npb24pIHtcclxuICAvLyBuaWZ0eSBjaGVjayBpZiBvYmogaXMgRnVuY3Rpb24gdGhhdCBpcyBmYXN0IGFuZCB3b3JrcyBhY3Jvc3MgaWZyYW1lcyBhbmQgb3RoZXIgY29udGV4dHNcclxuICBpZiAob2JqKSB7XHJcbiAgICBpZiAob2JqLmNvbnN0cnVjdG9yID09PSBvYmopIHtcclxuICAgICAgdGhyb3cgJHBhcnNlTWluRXJyKCdpc2VjZm4nLFxyXG4gICAgICAgICAgJ1JlZmVyZW5jaW5nIEZ1bmN0aW9uIGluIEFuZ3VsYXIgZXhwcmVzc2lvbnMgaXMgZGlzYWxsb3dlZCEgRXhwcmVzc2lvbjogezB9JyxcclxuICAgICAgICAgIGZ1bGxFeHByZXNzaW9uKTtcclxuICAgIH0gZWxzZSBpZiAoLy8gaXNXaW5kb3cob2JqKVxyXG4gICAgICAgIG9iai53aW5kb3cgPT09IG9iaikge1xyXG4gICAgICB0aHJvdyAkcGFyc2VNaW5FcnIoJ2lzZWN3aW5kb3cnLFxyXG4gICAgICAgICAgJ1JlZmVyZW5jaW5nIHRoZSBXaW5kb3cgaW4gQW5ndWxhciBleHByZXNzaW9ucyBpcyBkaXNhbGxvd2VkISBFeHByZXNzaW9uOiB7MH0nLFxyXG4gICAgICAgICAgZnVsbEV4cHJlc3Npb24pO1xyXG4gICAgfSBlbHNlIGlmICgvLyBpc0VsZW1lbnQob2JqKVxyXG4gICAgICAgIG9iai5jaGlsZHJlbiAmJiAob2JqLm5vZGVOYW1lIHx8IChvYmoucHJvcCAmJiBvYmouYXR0ciAmJiBvYmouZmluZCkpKSB7XHJcbiAgICAgIHRocm93ICRwYXJzZU1pbkVycignaXNlY2RvbScsXHJcbiAgICAgICAgICAnUmVmZXJlbmNpbmcgRE9NIG5vZGVzIGluIEFuZ3VsYXIgZXhwcmVzc2lvbnMgaXMgZGlzYWxsb3dlZCEgRXhwcmVzc2lvbjogezB9JyxcclxuICAgICAgICAgIGZ1bGxFeHByZXNzaW9uKTtcclxuICAgIH0gZWxzZSBpZiAoLy8gYmxvY2sgT2JqZWN0IHNvIHRoYXQgd2UgY2FuJ3QgZ2V0IGhvbGQgb2YgZGFuZ2Vyb3VzIE9iamVjdC4qIG1ldGhvZHNcclxuICAgICAgICBvYmogPT09IE9iamVjdCkge1xyXG4gICAgICB0aHJvdyAkcGFyc2VNaW5FcnIoJ2lzZWNvYmonLFxyXG4gICAgICAgICAgJ1JlZmVyZW5jaW5nIE9iamVjdCBpbiBBbmd1bGFyIGV4cHJlc3Npb25zIGlzIGRpc2FsbG93ZWQhIEV4cHJlc3Npb246IHswfScsXHJcbiAgICAgICAgICBmdWxsRXhwcmVzc2lvbik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBvYmo7XHJcbn1cclxuXHJcbnZhciBDQUxMID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XHJcbnZhciBBUFBMWSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcclxudmFyIEJJTkQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcclxuXHJcbmZ1bmN0aW9uIGVuc3VyZVNhZmVGdW5jdGlvbihvYmosIGZ1bGxFeHByZXNzaW9uKSB7XHJcbiAgaWYgKG9iaikge1xyXG4gICAgaWYgKG9iai5jb25zdHJ1Y3RvciA9PT0gb2JqKSB7XHJcbiAgICAgIHRocm93ICRwYXJzZU1pbkVycignaXNlY2ZuJyxcclxuICAgICAgICAnUmVmZXJlbmNpbmcgRnVuY3Rpb24gaW4gQW5ndWxhciBleHByZXNzaW9ucyBpcyBkaXNhbGxvd2VkISBFeHByZXNzaW9uOiB7MH0nLFxyXG4gICAgICAgIGZ1bGxFeHByZXNzaW9uKTtcclxuICAgIH0gZWxzZSBpZiAob2JqID09PSBDQUxMIHx8IG9iaiA9PT0gQVBQTFkgfHwgb2JqID09PSBCSU5EKSB7XHJcbiAgICAgIHRocm93ICRwYXJzZU1pbkVycignaXNlY2ZmJyxcclxuICAgICAgICAnUmVmZXJlbmNpbmcgY2FsbCwgYXBwbHkgb3IgYmluZCBpbiBBbmd1bGFyIGV4cHJlc3Npb25zIGlzIGRpc2FsbG93ZWQhIEV4cHJlc3Npb246IHswfScsXHJcbiAgICAgICAgZnVsbEV4cHJlc3Npb24pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLy9LZXl3b3JkIGNvbnN0YW50c1xyXG52YXIgQ09OU1RBTlRTID0gY3JlYXRlTWFwKCk7XHJcbmZvckVhY2goe1xyXG4gICdudWxsJzogZnVuY3Rpb24oKSB7IHJldHVybiBudWxsOyB9LFxyXG4gICd0cnVlJzogZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9LFxyXG4gICdmYWxzZSc6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0sXHJcbiAgJ3VuZGVmaW5lZCc6IGZ1bmN0aW9uKCkge31cclxufSwgZnVuY3Rpb24oY29uc3RhbnRHZXR0ZXIsIG5hbWUpIHtcclxuICBjb25zdGFudEdldHRlci5jb25zdGFudCA9IGNvbnN0YW50R2V0dGVyLmxpdGVyYWwgPSBjb25zdGFudEdldHRlci5zaGFyZWRHZXR0ZXIgPSB0cnVlO1xyXG4gIENPTlNUQU5UU1tuYW1lXSA9IGNvbnN0YW50R2V0dGVyO1xyXG59KTtcclxuXHJcbi8vTm90IHF1aXRlIGEgY29uc3RhbnQsIGJ1dCBjYW4gYmUgbGV4L3BhcnNlZCB0aGUgc2FtZVxyXG5DT05TVEFOVFNbJ3RoaXMnXSA9IGZ1bmN0aW9uKHNlbGYpIHsgcmV0dXJuIHNlbGY7IH07XHJcbkNPTlNUQU5UU1sndGhpcyddLnNoYXJlZEdldHRlciA9IHRydWU7XHJcblxyXG5cclxuLy9PcGVyYXRvcnMgLSB3aWxsIGJlIHdyYXBwZWQgYnkgYmluYXJ5Rm4vdW5hcnlGbi9hc3NpZ25tZW50L2ZpbHRlclxyXG52YXIgT1BFUkFUT1JTID0gZXh0ZW5kKGNyZWF0ZU1hcCgpLCB7XHJcbiAgICAnKyc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLCBiKSB7XHJcbiAgICAgIGE9YShzZWxmLCBsb2NhbHMpOyBiPWIoc2VsZiwgbG9jYWxzKTtcclxuICAgICAgaWYgKGlzRGVmaW5lZChhKSkge1xyXG4gICAgICAgIGlmIChpc0RlZmluZWQoYikpIHtcclxuICAgICAgICAgIHJldHVybiBhICsgYjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGlzRGVmaW5lZChiKSA/IGIgOiB1bmRlZmluZWQ7fSxcclxuICAgICctJzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsIGIpIHtcclxuICAgICAgICAgIGE9YShzZWxmLCBsb2NhbHMpOyBiPWIoc2VsZiwgbG9jYWxzKTtcclxuICAgICAgICAgIHJldHVybiAoaXNEZWZpbmVkKGEpID8gYSA6IDApIC0gKGlzRGVmaW5lZChiKSA/IGIgOiAwKTtcclxuICAgICAgICB9LFxyXG4gICAgJyonOmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSwgYikge3JldHVybiBhKHNlbGYsIGxvY2FscykgKiBiKHNlbGYsIGxvY2Fscyk7fSxcclxuICAgICcvJzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsIGIpIHtyZXR1cm4gYShzZWxmLCBsb2NhbHMpIC8gYihzZWxmLCBsb2NhbHMpO30sXHJcbiAgICAnJSc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLCBiKSB7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKSAlIGIoc2VsZiwgbG9jYWxzKTt9LFxyXG4gICAgJz09PSc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLCBiKSB7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKSA9PT0gYihzZWxmLCBsb2NhbHMpO30sXHJcbiAgICAnIT09JzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsIGIpIHtyZXR1cm4gYShzZWxmLCBsb2NhbHMpICE9PSBiKHNlbGYsIGxvY2Fscyk7fSxcclxuICAgICc9PSc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLCBiKSB7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKSA9PSBiKHNlbGYsIGxvY2Fscyk7fSxcclxuICAgICchPSc6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLCBiKSB7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKSAhPSBiKHNlbGYsIGxvY2Fscyk7fSxcclxuICAgICc8JzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsIGIpIHtyZXR1cm4gYShzZWxmLCBsb2NhbHMpIDwgYihzZWxmLCBsb2NhbHMpO30sXHJcbiAgICAnPic6ZnVuY3Rpb24oc2VsZiwgbG9jYWxzLCBhLCBiKSB7cmV0dXJuIGEoc2VsZiwgbG9jYWxzKSA+IGIoc2VsZiwgbG9jYWxzKTt9LFxyXG4gICAgJzw9JzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsIGIpIHtyZXR1cm4gYShzZWxmLCBsb2NhbHMpIDw9IGIoc2VsZiwgbG9jYWxzKTt9LFxyXG4gICAgJz49JzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsIGIpIHtyZXR1cm4gYShzZWxmLCBsb2NhbHMpID49IGIoc2VsZiwgbG9jYWxzKTt9LFxyXG4gICAgJyYmJzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsIGIpIHtyZXR1cm4gYShzZWxmLCBsb2NhbHMpICYmIGIoc2VsZiwgbG9jYWxzKTt9LFxyXG4gICAgJ3x8JzpmdW5jdGlvbihzZWxmLCBsb2NhbHMsIGEsIGIpIHtyZXR1cm4gYShzZWxmLCBsb2NhbHMpIHx8IGIoc2VsZiwgbG9jYWxzKTt9LFxyXG4gICAgJyEnOmZ1bmN0aW9uKHNlbGYsIGxvY2FscywgYSkge3JldHVybiAhYShzZWxmLCBsb2NhbHMpO30sXHJcblxyXG4gICAgLy9Ub2tlbml6ZWQgYXMgb3BlcmF0b3JzIGJ1dCBwYXJzZWQgYXMgYXNzaWdubWVudC9maWx0ZXJzXHJcbiAgICAnPSc6dHJ1ZSxcclxuICAgICd8Jzp0cnVlXHJcbn0pO1xyXG52YXIgRVNDQVBFID0ge1wiblwiOlwiXFxuXCIsIFwiZlwiOlwiXFxmXCIsIFwiclwiOlwiXFxyXCIsIFwidFwiOlwiXFx0XCIsIFwidlwiOlwiXFx2XCIsIFwiJ1wiOlwiJ1wiLCAnXCInOidcIid9O1xyXG5cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxudmFyIExleGVyID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbn07XHJcblxyXG5MZXhlci5wcm90b3R5cGUgPSB7XHJcbiAgY29uc3RydWN0b3I6IExleGVyLFxyXG5cclxuICBsZXg6IGZ1bmN0aW9uKHRleHQpIHtcclxuICAgIHRoaXMudGV4dCA9IHRleHQ7XHJcbiAgICB0aGlzLmluZGV4ID0gMDtcclxuICAgIHRoaXMudG9rZW5zID0gW107XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuaW5kZXggPCB0aGlzLnRleHQubGVuZ3RoKSB7XHJcbiAgICAgIHZhciBjaCA9IHRoaXMudGV4dC5jaGFyQXQodGhpcy5pbmRleCk7XHJcbiAgICAgIGlmIChjaCA9PT0gJ1wiJyB8fCBjaCA9PT0gXCInXCIpIHtcclxuICAgICAgICB0aGlzLnJlYWRTdHJpbmcoY2gpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNOdW1iZXIoY2gpIHx8IGNoID09PSAnLicgJiYgdGhpcy5pc051bWJlcih0aGlzLnBlZWsoKSkpIHtcclxuICAgICAgICB0aGlzLnJlYWROdW1iZXIoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSWRlbnQoY2gpKSB7XHJcbiAgICAgICAgdGhpcy5yZWFkSWRlbnQoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzKGNoLCAnKCl7fVtdLiw7Oj8nKSkge1xyXG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2goe2luZGV4OiB0aGlzLmluZGV4LCB0ZXh0OiBjaH0pO1xyXG4gICAgICAgIHRoaXMuaW5kZXgrKztcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzV2hpdGVzcGFjZShjaCkpIHtcclxuICAgICAgICB0aGlzLmluZGV4Kys7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIGNoMiA9IGNoICsgdGhpcy5wZWVrKCk7XHJcbiAgICAgICAgdmFyIGNoMyA9IGNoMiArIHRoaXMucGVlaygyKTtcclxuICAgICAgICB2YXIgb3AxID0gT1BFUkFUT1JTW2NoXTtcclxuICAgICAgICB2YXIgb3AyID0gT1BFUkFUT1JTW2NoMl07XHJcbiAgICAgICAgdmFyIG9wMyA9IE9QRVJBVE9SU1tjaDNdO1xyXG4gICAgICAgIGlmIChvcDEgfHwgb3AyIHx8IG9wMykge1xyXG4gICAgICAgICAgdmFyIHRva2VuID0gb3AzID8gY2gzIDogKG9wMiA/IGNoMiA6IGNoKTtcclxuICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2goe2luZGV4OiB0aGlzLmluZGV4LCB0ZXh0OiB0b2tlbiwgb3BlcmF0b3I6IHRydWV9KTtcclxuICAgICAgICAgIHRoaXMuaW5kZXggKz0gdG9rZW4ubGVuZ3RoO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRocm93RXJyb3IoJ1VuZXhwZWN0ZWQgbmV4dCBjaGFyYWN0ZXIgJywgdGhpcy5pbmRleCwgdGhpcy5pbmRleCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xyXG4gIH0sXHJcblxyXG4gIGlzOiBmdW5jdGlvbihjaCwgY2hhcnMpIHtcclxuICAgIHJldHVybiBjaGFycy5pbmRleE9mKGNoKSAhPT0gLTE7XHJcbiAgfSxcclxuXHJcbiAgcGVlazogZnVuY3Rpb24oaSkge1xyXG4gICAgdmFyIG51bSA9IGkgfHwgMTtcclxuICAgIHJldHVybiAodGhpcy5pbmRleCArIG51bSA8IHRoaXMudGV4dC5sZW5ndGgpID8gdGhpcy50ZXh0LmNoYXJBdCh0aGlzLmluZGV4ICsgbnVtKSA6IGZhbHNlO1xyXG4gIH0sXHJcblxyXG4gIGlzTnVtYmVyOiBmdW5jdGlvbihjaCkge1xyXG4gICAgcmV0dXJuICgnMCcgPD0gY2ggJiYgY2ggPD0gJzknKSAmJiB0eXBlb2YgY2ggPT09IFwic3RyaW5nXCI7XHJcbiAgfSxcclxuXHJcbiAgaXNXaGl0ZXNwYWNlOiBmdW5jdGlvbihjaCkge1xyXG4gICAgLy8gSUUgdHJlYXRzIG5vbi1icmVha2luZyBzcGFjZSBhcyBcXHUwMEEwXHJcbiAgICByZXR1cm4gKGNoID09PSAnICcgfHwgY2ggPT09ICdcXHInIHx8IGNoID09PSAnXFx0JyB8fFxyXG4gICAgICAgICAgICBjaCA9PT0gJ1xcbicgfHwgY2ggPT09ICdcXHYnIHx8IGNoID09PSAnXFx1MDBBMCcpO1xyXG4gIH0sXHJcblxyXG4gIGlzSWRlbnQ6IGZ1bmN0aW9uKGNoKSB7XHJcbiAgICByZXR1cm4gKCdhJyA8PSBjaCAmJiBjaCA8PSAneicgfHxcclxuICAgICAgICAgICAgJ0EnIDw9IGNoICYmIGNoIDw9ICdaJyB8fFxyXG4gICAgICAgICAgICAnXycgPT09IGNoIHx8IGNoID09PSAnJCcpO1xyXG4gIH0sXHJcblxyXG4gIGlzRXhwT3BlcmF0b3I6IGZ1bmN0aW9uKGNoKSB7XHJcbiAgICByZXR1cm4gKGNoID09PSAnLScgfHwgY2ggPT09ICcrJyB8fCB0aGlzLmlzTnVtYmVyKGNoKSk7XHJcbiAgfSxcclxuXHJcbiAgdGhyb3dFcnJvcjogZnVuY3Rpb24oZXJyb3IsIHN0YXJ0LCBlbmQpIHtcclxuICAgIGVuZCA9IGVuZCB8fCB0aGlzLmluZGV4O1xyXG4gICAgdmFyIGNvbFN0ciA9IChpc0RlZmluZWQoc3RhcnQpXHJcbiAgICAgICAgICAgID8gJ3MgJyArIHN0YXJ0ICsgICctJyArIHRoaXMuaW5kZXggKyAnIFsnICsgdGhpcy50ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKSArICddJ1xyXG4gICAgICAgICAgICA6ICcgJyArIGVuZCk7XHJcbiAgICB0aHJvdyAkcGFyc2VNaW5FcnIoJ2xleGVycicsICdMZXhlciBFcnJvcjogezB9IGF0IGNvbHVtbnsxfSBpbiBleHByZXNzaW9uIFt7Mn1dLicsXHJcbiAgICAgICAgZXJyb3IsIGNvbFN0ciwgdGhpcy50ZXh0KTtcclxuICB9LFxyXG5cclxuICByZWFkTnVtYmVyOiBmdW5jdGlvbigpIHtcclxuICAgIHZhciBudW1iZXIgPSAnJztcclxuICAgIHZhciBzdGFydCA9IHRoaXMuaW5kZXg7XHJcbiAgICB3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMudGV4dC5sZW5ndGgpIHtcclxuICAgICAgdmFyIGNoID0gbG93ZXJjYXNlKHRoaXMudGV4dC5jaGFyQXQodGhpcy5pbmRleCkpO1xyXG4gICAgICBpZiAoY2ggPT0gJy4nIHx8IHRoaXMuaXNOdW1iZXIoY2gpKSB7XHJcbiAgICAgICAgbnVtYmVyICs9IGNoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBwZWVrQ2ggPSB0aGlzLnBlZWsoKTtcclxuICAgICAgICBpZiAoY2ggPT0gJ2UnICYmIHRoaXMuaXNFeHBPcGVyYXRvcihwZWVrQ2gpKSB7XHJcbiAgICAgICAgICBudW1iZXIgKz0gY2g7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRXhwT3BlcmF0b3IoY2gpICYmXHJcbiAgICAgICAgICAgIHBlZWtDaCAmJiB0aGlzLmlzTnVtYmVyKHBlZWtDaCkgJiZcclxuICAgICAgICAgICAgbnVtYmVyLmNoYXJBdChudW1iZXIubGVuZ3RoIC0gMSkgPT0gJ2UnKSB7XHJcbiAgICAgICAgICBudW1iZXIgKz0gY2g7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRXhwT3BlcmF0b3IoY2gpICYmXHJcbiAgICAgICAgICAgICghcGVla0NoIHx8ICF0aGlzLmlzTnVtYmVyKHBlZWtDaCkpICYmXHJcbiAgICAgICAgICAgIG51bWJlci5jaGFyQXQobnVtYmVyLmxlbmd0aCAtIDEpID09ICdlJykge1xyXG4gICAgICAgICAgdGhpcy50aHJvd0Vycm9yKCdJbnZhbGlkIGV4cG9uZW50Jyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmluZGV4Kys7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRva2Vucy5wdXNoKHtcclxuICAgICAgaW5kZXg6IHN0YXJ0LFxyXG4gICAgICB0ZXh0OiBudW1iZXIsXHJcbiAgICAgIGNvbnN0YW50OiB0cnVlLFxyXG4gICAgICB2YWx1ZTogTnVtYmVyKG51bWJlcilcclxuICAgIH0pO1xyXG4gIH0sXHJcblxyXG4gIHJlYWRJZGVudDogZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgc3RhcnQgPSB0aGlzLmluZGV4O1xyXG4gICAgd2hpbGUgKHRoaXMuaW5kZXggPCB0aGlzLnRleHQubGVuZ3RoKSB7XHJcbiAgICAgIHZhciBjaCA9IHRoaXMudGV4dC5jaGFyQXQodGhpcy5pbmRleCk7XHJcbiAgICAgIGlmICghKHRoaXMuaXNJZGVudChjaCkgfHwgdGhpcy5pc051bWJlcihjaCkpKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbmRleCsrO1xyXG4gICAgfVxyXG4gICAgdGhpcy50b2tlbnMucHVzaCh7XHJcbiAgICAgIGluZGV4OiBzdGFydCxcclxuICAgICAgdGV4dDogdGhpcy50ZXh0LnNsaWNlKHN0YXJ0LCB0aGlzLmluZGV4KSxcclxuICAgICAgaWRlbnRpZmllcjogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgfSxcclxuXHJcbiAgcmVhZFN0cmluZzogZnVuY3Rpb24ocXVvdGUpIHtcclxuICAgIHZhciBzdGFydCA9IHRoaXMuaW5kZXg7XHJcbiAgICB0aGlzLmluZGV4Kys7XHJcbiAgICB2YXIgc3RyaW5nID0gJyc7XHJcbiAgICB2YXIgcmF3U3RyaW5nID0gcXVvdGU7XHJcbiAgICB2YXIgZXNjYXBlID0gZmFsc2U7XHJcbiAgICB3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMudGV4dC5sZW5ndGgpIHtcclxuICAgICAgdmFyIGNoID0gdGhpcy50ZXh0LmNoYXJBdCh0aGlzLmluZGV4KTtcclxuICAgICAgcmF3U3RyaW5nICs9IGNoO1xyXG4gICAgICBpZiAoZXNjYXBlKSB7XHJcbiAgICAgICAgaWYgKGNoID09PSAndScpIHtcclxuICAgICAgICAgIHZhciBoZXggPSB0aGlzLnRleHQuc3Vic3RyaW5nKHRoaXMuaW5kZXggKyAxLCB0aGlzLmluZGV4ICsgNSk7XHJcbiAgICAgICAgICBpZiAoIWhleC5tYXRjaCgvW1xcZGEtZl17NH0vaSkpXHJcbiAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcignSW52YWxpZCB1bmljb2RlIGVzY2FwZSBbXFxcXHUnICsgaGV4ICsgJ10nKTtcclxuICAgICAgICAgIHRoaXMuaW5kZXggKz0gNDtcclxuICAgICAgICAgIHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGhleCwgMTYpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFyIHJlcCA9IEVTQ0FQRVtjaF07XHJcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcgKyAocmVwIHx8IGNoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZXNjYXBlID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcXFxcJykge1xyXG4gICAgICAgIGVzY2FwZSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IHF1b3RlKSB7XHJcbiAgICAgICAgdGhpcy5pbmRleCsrO1xyXG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2goe1xyXG4gICAgICAgICAgaW5kZXg6IHN0YXJ0LFxyXG4gICAgICAgICAgdGV4dDogcmF3U3RyaW5nLFxyXG4gICAgICAgICAgY29uc3RhbnQ6IHRydWUsXHJcbiAgICAgICAgICB2YWx1ZTogc3RyaW5nXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN0cmluZyArPSBjaDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmluZGV4Kys7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRocm93RXJyb3IoJ1VudGVybWluYXRlZCBxdW90ZScsIHN0YXJ0KTtcclxuICB9XHJcbn07XHJcblxyXG5cclxuZnVuY3Rpb24gaXNDb25zdGFudChleHApIHtcclxuICByZXR1cm4gZXhwLmNvbnN0YW50O1xyXG59XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqL1xyXG52YXIgUGFyc2VyID0gZnVuY3Rpb24obGV4ZXIsICRmaWx0ZXIsIG9wdGlvbnMpIHtcclxuICB0aGlzLmxleGVyID0gbGV4ZXI7XHJcbiAgdGhpcy4kZmlsdGVyID0gJGZpbHRlcjtcclxuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG59O1xyXG5cclxuUGFyc2VyLlpFUk8gPSBleHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIDA7XHJcbn0sIHtcclxuICBzaGFyZWRHZXR0ZXI6IHRydWUsXHJcbiAgY29uc3RhbnQ6IHRydWVcclxufSk7XHJcblxyXG5QYXJzZXIucHJvdG90eXBlID0ge1xyXG4gIGNvbnN0cnVjdG9yOiBQYXJzZXIsXHJcblxyXG4gIHBhcnNlOiBmdW5jdGlvbih0ZXh0KSB7XHJcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xyXG4gICAgdGhpcy50b2tlbnMgPSB0aGlzLmxleGVyLmxleCh0ZXh0KTtcclxuXHJcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnN0YXRlbWVudHMoKTtcclxuXHJcbiAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgIHRoaXMudGhyb3dFcnJvcignaXMgYW4gdW5leHBlY3RlZCB0b2tlbicsIHRoaXMudG9rZW5zWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICB2YWx1ZS5saXRlcmFsID0gISF2YWx1ZS5saXRlcmFsO1xyXG4gICAgdmFsdWUuY29uc3RhbnQgPSAhIXZhbHVlLmNvbnN0YW50O1xyXG5cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9LFxyXG5cclxuICBwcmltYXJ5OiBmdW5jdGlvbigpIHtcclxuICAgIHZhciBwcmltYXJ5O1xyXG4gICAgaWYgKHRoaXMuZXhwZWN0KCcoJykpIHtcclxuICAgICAgcHJpbWFyeSA9IHRoaXMuZmlsdGVyQ2hhaW4oKTtcclxuICAgICAgdGhpcy5jb25zdW1lKCcpJyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZXhwZWN0KCdbJykpIHtcclxuICAgICAgcHJpbWFyeSA9IHRoaXMuYXJyYXlEZWNsYXJhdGlvbigpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmV4cGVjdCgneycpKSB7XHJcbiAgICAgIHByaW1hcnkgPSB0aGlzLm9iamVjdCgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlZWsoKS5pZGVudGlmaWVyKSB7XHJcbiAgICAgIHByaW1hcnkgPSB0aGlzLmlkZW50aWZpZXIoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wZWVrKCkuY29uc3RhbnQpIHtcclxuICAgICAgcHJpbWFyeSA9IHRoaXMuY29uc3RhbnQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGhyb3dFcnJvcignbm90IGEgcHJpbWFyeSBleHByZXNzaW9uJywgdGhpcy5wZWVrKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBuZXh0LCBjb250ZXh0O1xyXG4gICAgd2hpbGUgKChuZXh0ID0gdGhpcy5leHBlY3QoJygnLCAnWycsICcuJykpKSB7XHJcbiAgICAgIGlmIChuZXh0LnRleHQgPT09ICcoJykge1xyXG4gICAgICAgIHByaW1hcnkgPSB0aGlzLmZ1bmN0aW9uQ2FsbChwcmltYXJ5LCBjb250ZXh0KTtcclxuICAgICAgICBjb250ZXh0ID0gbnVsbDtcclxuICAgICAgfSBlbHNlIGlmIChuZXh0LnRleHQgPT09ICdbJykge1xyXG4gICAgICAgIGNvbnRleHQgPSBwcmltYXJ5O1xyXG4gICAgICAgIHByaW1hcnkgPSB0aGlzLm9iamVjdEluZGV4KHByaW1hcnkpO1xyXG4gICAgICB9IGVsc2UgaWYgKG5leHQudGV4dCA9PT0gJy4nKSB7XHJcbiAgICAgICAgY29udGV4dCA9IHByaW1hcnk7XHJcbiAgICAgICAgcHJpbWFyeSA9IHRoaXMuZmllbGRBY2Nlc3MocHJpbWFyeSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50aHJvd0Vycm9yKCdJTVBPU1NJQkxFJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBwcmltYXJ5O1xyXG4gIH0sXHJcblxyXG4gIHRocm93RXJyb3I6IGZ1bmN0aW9uKG1zZywgdG9rZW4pIHtcclxuICAgIHRocm93ICRwYXJzZU1pbkVycignc3ludGF4JyxcclxuICAgICAgICAnU3ludGF4IEVycm9yOiBUb2tlbiBcXCd7MH1cXCcgezF9IGF0IGNvbHVtbiB7Mn0gb2YgdGhlIGV4cHJlc3Npb24gW3szfV0gc3RhcnRpbmcgYXQgW3s0fV0uJyxcclxuICAgICAgICAgIHRva2VuLnRleHQsIG1zZywgKHRva2VuLmluZGV4ICsgMSksIHRoaXMudGV4dCwgdGhpcy50ZXh0LnN1YnN0cmluZyh0b2tlbi5pbmRleCkpO1xyXG4gIH0sXHJcblxyXG4gIHBlZWtUb2tlbjogZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoID09PSAwKVxyXG4gICAgICB0aHJvdyAkcGFyc2VNaW5FcnIoJ3Vlb2UnLCAnVW5leHBlY3RlZCBlbmQgb2YgZXhwcmVzc2lvbjogezB9JywgdGhpcy50ZXh0KTtcclxuICAgIHJldHVybiB0aGlzLnRva2Vuc1swXTtcclxuICB9LFxyXG5cclxuICBwZWVrOiBmdW5jdGlvbihlMSwgZTIsIGUzLCBlNCkge1xyXG4gICAgcmV0dXJuIHRoaXMucGVla0FoZWFkKDAsIGUxLCBlMiwgZTMsIGU0KTtcclxuICB9LFxyXG4gIHBlZWtBaGVhZDogZnVuY3Rpb24oaSwgZTEsIGUyLCBlMywgZTQpIHtcclxuICAgIGlmICh0aGlzLnRva2Vucy5sZW5ndGggPiBpKSB7XHJcbiAgICAgIHZhciB0b2tlbiA9IHRoaXMudG9rZW5zW2ldO1xyXG4gICAgICB2YXIgdCA9IHRva2VuLnRleHQ7XHJcbiAgICAgIGlmICh0ID09PSBlMSB8fCB0ID09PSBlMiB8fCB0ID09PSBlMyB8fCB0ID09PSBlNCB8fFxyXG4gICAgICAgICAgKCFlMSAmJiAhZTIgJiYgIWUzICYmICFlNCkpIHtcclxuICAgICAgICByZXR1cm4gdG9rZW47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9LFxyXG5cclxuICBleHBlY3Q6IGZ1bmN0aW9uKGUxLCBlMiwgZTMsIGU0KSB7XHJcbiAgICB2YXIgdG9rZW4gPSB0aGlzLnBlZWsoZTEsIGUyLCBlMywgZTQpO1xyXG4gICAgaWYgKHRva2VuKSB7XHJcbiAgICAgIHRoaXMudG9rZW5zLnNoaWZ0KCk7XHJcbiAgICAgIHJldHVybiB0b2tlbjtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9LFxyXG5cclxuICBjb25zdW1lOiBmdW5jdGlvbihlMSkge1xyXG4gICAgaWYgKHRoaXMudG9rZW5zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aHJvdyAkcGFyc2VNaW5FcnIoJ3Vlb2UnLCAnVW5leHBlY3RlZCBlbmQgb2YgZXhwcmVzc2lvbjogezB9JywgdGhpcy50ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdG9rZW4gPSB0aGlzLmV4cGVjdChlMSk7XHJcbiAgICBpZiAoIXRva2VuKSB7XHJcbiAgICAgIHRoaXMudGhyb3dFcnJvcignaXMgdW5leHBlY3RlZCwgZXhwZWN0aW5nIFsnICsgZTEgKyAnXScsIHRoaXMucGVlaygpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0b2tlbjtcclxuICB9LFxyXG5cclxuICB1bmFyeUZuOiBmdW5jdGlvbihvcCwgcmlnaHQpIHtcclxuICAgIHZhciBmbiA9IE9QRVJBVE9SU1tvcF07XHJcbiAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICRwYXJzZVVuYXJ5Rm4oc2VsZiwgbG9jYWxzKSB7XHJcbiAgICAgIHJldHVybiBmbihzZWxmLCBsb2NhbHMsIHJpZ2h0KTtcclxuICAgIH0sIHtcclxuICAgICAgY29uc3RhbnQ6cmlnaHQuY29uc3RhbnQsXHJcbiAgICAgIGlucHV0czogW3JpZ2h0XVxyXG4gICAgfSk7XHJcbiAgfSxcclxuXHJcbiAgYmluYXJ5Rm46IGZ1bmN0aW9uKGxlZnQsIG9wLCByaWdodCwgaXNCcmFuY2hpbmcpIHtcclxuICAgIHZhciBmbiA9IE9QRVJBVE9SU1tvcF07XHJcbiAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICRwYXJzZUJpbmFyeUZuKHNlbGYsIGxvY2Fscykge1xyXG4gICAgICByZXR1cm4gZm4oc2VsZiwgbG9jYWxzLCBsZWZ0LCByaWdodCk7XHJcbiAgICB9LCB7XHJcbiAgICAgIGNvbnN0YW50OiBsZWZ0LmNvbnN0YW50ICYmIHJpZ2h0LmNvbnN0YW50LFxyXG4gICAgICBpbnB1dHM6ICFpc0JyYW5jaGluZyAmJiBbbGVmdCwgcmlnaHRdXHJcbiAgICB9KTtcclxuICB9LFxyXG5cclxuICBpZGVudGlmaWVyOiBmdW5jdGlvbigpIHtcclxuICAgIHZhciBpZCA9IHRoaXMuY29uc3VtZSgpLnRleHQ7XHJcblxyXG4gICAgLy9Db250aW51ZSByZWFkaW5nIGVhY2ggYC5pZGVudGlmaWVyYCB1bmxlc3MgaXQgaXMgYSBtZXRob2QgaW52b2NhdGlvblxyXG4gICAgd2hpbGUgKHRoaXMucGVlaygnLicpICYmIHRoaXMucGVla0FoZWFkKDEpLmlkZW50aWZpZXIgJiYgIXRoaXMucGVla0FoZWFkKDIsICcoJykpIHtcclxuICAgICAgaWQgKz0gdGhpcy5jb25zdW1lKCkudGV4dCArIHRoaXMuY29uc3VtZSgpLnRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIENPTlNUQU5UU1tpZF0gfHwgZ2V0dGVyRm4oaWQsIHRoaXMub3B0aW9ucywgdGhpcy50ZXh0KTtcclxuICB9LFxyXG5cclxuICBjb25zdGFudDogZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmNvbnN1bWUoKS52YWx1ZTtcclxuXHJcbiAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICRwYXJzZUNvbnN0YW50KCkge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9LCB7XHJcbiAgICAgIGNvbnN0YW50OiB0cnVlLFxyXG4gICAgICBsaXRlcmFsOiB0cnVlXHJcbiAgICB9KTtcclxuICB9LFxyXG5cclxuICBzdGF0ZW1lbnRzOiBmdW5jdGlvbigpIHtcclxuICAgIHZhciBzdGF0ZW1lbnRzID0gW107XHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoID4gMCAmJiAhdGhpcy5wZWVrKCd9JywgJyknLCAnOycsICddJykpXHJcbiAgICAgICAgc3RhdGVtZW50cy5wdXNoKHRoaXMuZmlsdGVyQ2hhaW4oKSk7XHJcbiAgICAgIGlmICghdGhpcy5leHBlY3QoJzsnKSkge1xyXG4gICAgICAgIC8vIG9wdGltaXplIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlcmUgaXMgb25seSBvbmUgc3RhdGVtZW50LlxyXG4gICAgICAgIC8vIFRPRE8oc2l6ZSk6IG1heWJlIHdlIHNob3VsZCBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzdGF0ZW1lbnRzP1xyXG4gICAgICAgIHJldHVybiAoc3RhdGVtZW50cy5sZW5ndGggPT09IDEpXHJcbiAgICAgICAgICAgID8gc3RhdGVtZW50c1swXVxyXG4gICAgICAgICAgICA6IGZ1bmN0aW9uICRwYXJzZVN0YXRlbWVudHMoc2VsZiwgbG9jYWxzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWU7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzdGF0ZW1lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdGF0ZW1lbnRzW2ldKHNlbGYsIGxvY2Fscyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIGZpbHRlckNoYWluOiBmdW5jdGlvbigpIHtcclxuICAgIHZhciBsZWZ0ID0gdGhpcy5leHByZXNzaW9uKCk7XHJcbiAgICB2YXIgdG9rZW47XHJcbiAgICB3aGlsZSAoKHRva2VuID0gdGhpcy5leHBlY3QoJ3wnKSkpIHtcclxuICAgICAgbGVmdCA9IHRoaXMuZmlsdGVyKGxlZnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlZnQ7XHJcbiAgfSxcclxuXHJcbiAgZmlsdGVyOiBmdW5jdGlvbihpbnB1dEZuKSB7XHJcbiAgICB2YXIgZm4gPSB0aGlzLiRmaWx0ZXIodGhpcy5jb25zdW1lKCkudGV4dCk7XHJcbiAgICB2YXIgYXJnc0ZuO1xyXG4gICAgdmFyIGFyZ3M7XHJcblxyXG4gICAgaWYgKHRoaXMucGVlaygnOicpKSB7XHJcbiAgICAgIGFyZ3NGbiA9IFtdO1xyXG4gICAgICBhcmdzID0gW107IC8vIHdlIGNhbiBzYWZlbHkgcmV1c2UgdGhlIGFycmF5XHJcbiAgICAgIHdoaWxlICh0aGlzLmV4cGVjdCgnOicpKSB7XHJcbiAgICAgICAgYXJnc0ZuLnB1c2godGhpcy5leHByZXNzaW9uKCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGlucHV0cyA9IFtpbnB1dEZuXS5jb25jYXQoYXJnc0ZuIHx8IFtdKTtcclxuXHJcbiAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICRwYXJzZUZpbHRlcihzZWxmLCBsb2NhbHMpIHtcclxuICAgICAgdmFyIGlucHV0ID0gaW5wdXRGbihzZWxmLCBsb2NhbHMpO1xyXG4gICAgICBpZiAoYXJncykge1xyXG4gICAgICAgIGFyZ3NbMF0gPSBpbnB1dDtcclxuXHJcbiAgICAgICAgdmFyIGkgPSBhcmdzRm4ubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgIGFyZ3NbaSArIDFdID0gYXJnc0ZuW2ldKHNlbGYsIGxvY2Fscyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZm4uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGZuKGlucHV0KTtcclxuICAgIH0sIHtcclxuICAgICAgY29uc3RhbnQ6ICFmbi4kc3RhdGVmdWwgJiYgaW5wdXRzLmV2ZXJ5KGlzQ29uc3RhbnQpLFxyXG4gICAgICBpbnB1dHM6ICFmbi4kc3RhdGVmdWwgJiYgaW5wdXRzXHJcbiAgICB9KTtcclxuICB9LFxyXG5cclxuICBleHByZXNzaW9uOiBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmFzc2lnbm1lbnQoKTtcclxuICB9LFxyXG5cclxuICBhc3NpZ25tZW50OiBmdW5jdGlvbigpIHtcclxuICAgIHZhciBsZWZ0ID0gdGhpcy50ZXJuYXJ5KCk7XHJcbiAgICB2YXIgcmlnaHQ7XHJcbiAgICB2YXIgdG9rZW47XHJcbiAgICBpZiAoKHRva2VuID0gdGhpcy5leHBlY3QoJz0nKSkpIHtcclxuICAgICAgaWYgKCFsZWZ0LmFzc2lnbikge1xyXG4gICAgICAgIHRoaXMudGhyb3dFcnJvcignaW1wbGllcyBhc3NpZ25tZW50IGJ1dCBbJyArXHJcbiAgICAgICAgICAgIHRoaXMudGV4dC5zdWJzdHJpbmcoMCwgdG9rZW4uaW5kZXgpICsgJ10gY2FuIG5vdCBiZSBhc3NpZ25lZCB0bycsIHRva2VuKTtcclxuICAgICAgfVxyXG4gICAgICByaWdodCA9IHRoaXMudGVybmFyeSgpO1xyXG4gICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICRwYXJzZUFzc2lnbm1lbnQoc2NvcGUsIGxvY2Fscykge1xyXG4gICAgICAgIHJldHVybiBsZWZ0LmFzc2lnbihzY29wZSwgcmlnaHQoc2NvcGUsIGxvY2FscyksIGxvY2Fscyk7XHJcbiAgICAgIH0sIHtcclxuICAgICAgICBpbnB1dHM6IFtsZWZ0LCByaWdodF1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVmdDtcclxuICB9LFxyXG5cclxuICB0ZXJuYXJ5OiBmdW5jdGlvbigpIHtcclxuICAgIHZhciBsZWZ0ID0gdGhpcy5sb2dpY2FsT1IoKTtcclxuICAgIHZhciBtaWRkbGU7XHJcbiAgICB2YXIgdG9rZW47XHJcbiAgICBpZiAoKHRva2VuID0gdGhpcy5leHBlY3QoJz8nKSkpIHtcclxuICAgICAgbWlkZGxlID0gdGhpcy5hc3NpZ25tZW50KCk7XHJcbiAgICAgIGlmICh0aGlzLmNvbnN1bWUoJzonKSkge1xyXG4gICAgICAgIHZhciByaWdodCA9IHRoaXMuYXNzaWdubWVudCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICRwYXJzZVRlcm5hcnkoc2VsZiwgbG9jYWxzKSB7XHJcbiAgICAgICAgICByZXR1cm4gbGVmdChzZWxmLCBsb2NhbHMpID8gbWlkZGxlKHNlbGYsIGxvY2FscykgOiByaWdodChzZWxmLCBsb2NhbHMpO1xyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgIGNvbnN0YW50OiBsZWZ0LmNvbnN0YW50ICYmIG1pZGRsZS5jb25zdGFudCAmJiByaWdodC5jb25zdGFudFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxlZnQ7XHJcbiAgfSxcclxuXHJcbiAgbG9naWNhbE9SOiBmdW5jdGlvbigpIHtcclxuICAgIHZhciBsZWZ0ID0gdGhpcy5sb2dpY2FsQU5EKCk7XHJcbiAgICB2YXIgdG9rZW47XHJcbiAgICB3aGlsZSAoKHRva2VuID0gdGhpcy5leHBlY3QoJ3x8JykpKSB7XHJcbiAgICAgIGxlZnQgPSB0aGlzLmJpbmFyeUZuKGxlZnQsIHRva2VuLnRleHQsIHRoaXMubG9naWNhbEFORCgpLCB0cnVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBsZWZ0O1xyXG4gIH0sXHJcblxyXG4gIGxvZ2ljYWxBTkQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGxlZnQgPSB0aGlzLmVxdWFsaXR5KCk7XHJcbiAgICB2YXIgdG9rZW47XHJcbiAgICBpZiAoKHRva2VuID0gdGhpcy5leHBlY3QoJyYmJykpKSB7XHJcbiAgICAgIGxlZnQgPSB0aGlzLmJpbmFyeUZuKGxlZnQsIHRva2VuLnRleHQsIHRoaXMubG9naWNhbEFORCgpLCB0cnVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBsZWZ0O1xyXG4gIH0sXHJcblxyXG4gIGVxdWFsaXR5OiBmdW5jdGlvbigpIHtcclxuICAgIHZhciBsZWZ0ID0gdGhpcy5yZWxhdGlvbmFsKCk7XHJcbiAgICB2YXIgdG9rZW47XHJcbiAgICBpZiAoKHRva2VuID0gdGhpcy5leHBlY3QoJz09JywnIT0nLCc9PT0nLCchPT0nKSkpIHtcclxuICAgICAgbGVmdCA9IHRoaXMuYmluYXJ5Rm4obGVmdCwgdG9rZW4udGV4dCwgdGhpcy5lcXVhbGl0eSgpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBsZWZ0O1xyXG4gIH0sXHJcblxyXG4gIHJlbGF0aW9uYWw6IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGxlZnQgPSB0aGlzLmFkZGl0aXZlKCk7XHJcbiAgICB2YXIgdG9rZW47XHJcbiAgICBpZiAoKHRva2VuID0gdGhpcy5leHBlY3QoJzwnLCAnPicsICc8PScsICc+PScpKSkge1xyXG4gICAgICBsZWZ0ID0gdGhpcy5iaW5hcnlGbihsZWZ0LCB0b2tlbi50ZXh0LCB0aGlzLnJlbGF0aW9uYWwoKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVmdDtcclxuICB9LFxyXG5cclxuICBhZGRpdGl2ZTogZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgbGVmdCA9IHRoaXMubXVsdGlwbGljYXRpdmUoKTtcclxuICAgIHZhciB0b2tlbjtcclxuICAgIHdoaWxlICgodG9rZW4gPSB0aGlzLmV4cGVjdCgnKycsJy0nKSkpIHtcclxuICAgICAgbGVmdCA9IHRoaXMuYmluYXJ5Rm4obGVmdCwgdG9rZW4udGV4dCwgdGhpcy5tdWx0aXBsaWNhdGl2ZSgpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBsZWZ0O1xyXG4gIH0sXHJcblxyXG4gIG11bHRpcGxpY2F0aXZlOiBmdW5jdGlvbigpIHtcclxuICAgIHZhciBsZWZ0ID0gdGhpcy51bmFyeSgpO1xyXG4gICAgdmFyIHRva2VuO1xyXG4gICAgd2hpbGUgKCh0b2tlbiA9IHRoaXMuZXhwZWN0KCcqJywnLycsJyUnKSkpIHtcclxuICAgICAgbGVmdCA9IHRoaXMuYmluYXJ5Rm4obGVmdCwgdG9rZW4udGV4dCwgdGhpcy51bmFyeSgpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBsZWZ0O1xyXG4gIH0sXHJcblxyXG4gIHVuYXJ5OiBmdW5jdGlvbigpIHtcclxuICAgIHZhciB0b2tlbjtcclxuICAgIGlmICh0aGlzLmV4cGVjdCgnKycpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnByaW1hcnkoKTtcclxuICAgIH0gZWxzZSBpZiAoKHRva2VuID0gdGhpcy5leHBlY3QoJy0nKSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYmluYXJ5Rm4oUGFyc2VyLlpFUk8sIHRva2VuLnRleHQsIHRoaXMudW5hcnkoKSk7XHJcbiAgICB9IGVsc2UgaWYgKCh0b2tlbiA9IHRoaXMuZXhwZWN0KCchJykpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnVuYXJ5Rm4odG9rZW4udGV4dCwgdGhpcy51bmFyeSgpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnByaW1hcnkoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICBmaWVsZEFjY2VzczogZnVuY3Rpb24ob2JqZWN0KSB7XHJcbiAgICB2YXIgZXhwcmVzc2lvbiA9IHRoaXMudGV4dDtcclxuICAgIHZhciBmaWVsZCA9IHRoaXMuY29uc3VtZSgpLnRleHQ7XHJcbiAgICB2YXIgZ2V0dGVyID0gZ2V0dGVyRm4oZmllbGQsIHRoaXMub3B0aW9ucywgZXhwcmVzc2lvbik7XHJcblxyXG4gICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbiAkcGFyc2VGaWVsZEFjY2VzcyhzY29wZSwgbG9jYWxzLCBzZWxmKSB7XHJcbiAgICAgIHJldHVybiBnZXR0ZXIoc2VsZiB8fCBvYmplY3Qoc2NvcGUsIGxvY2FscykpO1xyXG4gICAgfSwge1xyXG4gICAgICBhc3NpZ246IGZ1bmN0aW9uKHNjb3BlLCB2YWx1ZSwgbG9jYWxzKSB7XHJcbiAgICAgICAgdmFyIG8gPSBvYmplY3Qoc2NvcGUsIGxvY2Fscyk7XHJcbiAgICAgICAgaWYgKCFvKSBvYmplY3QuYXNzaWduKHNjb3BlLCBvID0ge30pO1xyXG4gICAgICAgIHJldHVybiBzZXR0ZXIobywgZmllbGQsIHZhbHVlLCBleHByZXNzaW9uKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSxcclxuXHJcbiAgb2JqZWN0SW5kZXg6IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgdmFyIGV4cHJlc3Npb24gPSB0aGlzLnRleHQ7XHJcblxyXG4gICAgdmFyIGluZGV4Rm4gPSB0aGlzLmV4cHJlc3Npb24oKTtcclxuICAgIHRoaXMuY29uc3VtZSgnXScpO1xyXG5cclxuICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gJHBhcnNlT2JqZWN0SW5kZXgoc2VsZiwgbG9jYWxzKSB7XHJcbiAgICAgIHZhciBvID0gb2JqKHNlbGYsIGxvY2FscyksXHJcbiAgICAgICAgICBpID0gaW5kZXhGbihzZWxmLCBsb2NhbHMpLFxyXG4gICAgICAgICAgdjtcclxuXHJcbiAgICAgIGVuc3VyZVNhZmVNZW1iZXJOYW1lKGksIGV4cHJlc3Npb24pO1xyXG4gICAgICBpZiAoIW8pIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgIHYgPSBlbnN1cmVTYWZlT2JqZWN0KG9baV0sIGV4cHJlc3Npb24pO1xyXG4gICAgICByZXR1cm4gdjtcclxuICAgIH0sIHtcclxuICAgICAgYXNzaWduOiBmdW5jdGlvbihzZWxmLCB2YWx1ZSwgbG9jYWxzKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGVuc3VyZVNhZmVNZW1iZXJOYW1lKGluZGV4Rm4oc2VsZiwgbG9jYWxzKSwgZXhwcmVzc2lvbik7XHJcbiAgICAgICAgLy8gcHJldmVudCBvdmVyd3JpdGluZyBvZiBGdW5jdGlvbi5jb25zdHJ1Y3RvciB3aGljaCB3b3VsZCBicmVhayBlbnN1cmVTYWZlT2JqZWN0IGNoZWNrXHJcbiAgICAgICAgdmFyIG8gPSBlbnN1cmVTYWZlT2JqZWN0KG9iaihzZWxmLCBsb2NhbHMpLCBleHByZXNzaW9uKTtcclxuICAgICAgICBpZiAoIW8pIG9iai5hc3NpZ24oc2VsZiwgbyA9IHt9KTtcclxuICAgICAgICByZXR1cm4gb1trZXldID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH0sXHJcblxyXG4gIGZ1bmN0aW9uQ2FsbDogZnVuY3Rpb24oZm5HZXR0ZXIsIGNvbnRleHRHZXR0ZXIpIHtcclxuICAgIHZhciBhcmdzRm4gPSBbXTtcclxuICAgIGlmICh0aGlzLnBlZWtUb2tlbigpLnRleHQgIT09ICcpJykge1xyXG4gICAgICBkbyB7XHJcbiAgICAgICAgYXJnc0ZuLnB1c2godGhpcy5leHByZXNzaW9uKCkpO1xyXG4gICAgICB9IHdoaWxlICh0aGlzLmV4cGVjdCgnLCcpKTtcclxuICAgIH1cclxuICAgIHRoaXMuY29uc3VtZSgnKScpO1xyXG5cclxuICAgIHZhciBleHByZXNzaW9uVGV4dCA9IHRoaXMudGV4dDtcclxuICAgIC8vIHdlIGNhbiBzYWZlbHkgcmV1c2UgdGhlIGFycmF5IGFjcm9zcyBpbnZvY2F0aW9uc1xyXG4gICAgdmFyIGFyZ3MgPSBhcmdzRm4ubGVuZ3RoID8gW10gOiBudWxsO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiAkcGFyc2VGdW5jdGlvbkNhbGwoc2NvcGUsIGxvY2Fscykge1xyXG4gICAgICB2YXIgY29udGV4dCA9IGNvbnRleHRHZXR0ZXIgPyBjb250ZXh0R2V0dGVyKHNjb3BlLCBsb2NhbHMpIDogc2NvcGU7XHJcbiAgICAgIHZhciBmbiA9IGZuR2V0dGVyKHNjb3BlLCBsb2NhbHMsIGNvbnRleHQpIHx8IG5vb3A7XHJcblxyXG4gICAgICBpZiAoYXJncykge1xyXG4gICAgICAgIHZhciBpID0gYXJnc0ZuLmxlbmd0aDtcclxuICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICBhcmdzW2ldID0gZW5zdXJlU2FmZU9iamVjdChhcmdzRm5baV0oc2NvcGUsIGxvY2FscyksIGV4cHJlc3Npb25UZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGVuc3VyZVNhZmVPYmplY3QoY29udGV4dCwgZXhwcmVzc2lvblRleHQpO1xyXG4gICAgICBlbnN1cmVTYWZlRnVuY3Rpb24oZm4sIGV4cHJlc3Npb25UZXh0KTtcclxuXHJcbiAgICAgIC8vIElFIHN0dXBpZGl0eSEgKElFIGRvZXNuJ3QgaGF2ZSBhcHBseSBmb3Igc29tZSBuYXRpdmUgZnVuY3Rpb25zKVxyXG4gICAgICB2YXIgdiA9IGZuLmFwcGx5XHJcbiAgICAgICAgICAgID8gZm4uYXBwbHkoY29udGV4dCwgYXJncylcclxuICAgICAgICAgICAgOiBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTtcclxuXHJcbiAgICAgIHJldHVybiBlbnN1cmVTYWZlT2JqZWN0KHYsIGV4cHJlc3Npb25UZXh0KTtcclxuICAgIH07XHJcbiAgfSxcclxuXHJcbiAgLy8gVGhpcyBpcyB1c2VkIHdpdGgganNvbiBhcnJheSBkZWNsYXJhdGlvblxyXG4gIGFycmF5RGVjbGFyYXRpb246IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGVsZW1lbnRGbnMgPSBbXTtcclxuICAgIGlmICh0aGlzLnBlZWtUb2tlbigpLnRleHQgIT09ICddJykge1xyXG4gICAgICBkbyB7XHJcbiAgICAgICAgaWYgKHRoaXMucGVlaygnXScpKSB7XHJcbiAgICAgICAgICAvLyBTdXBwb3J0IHRyYWlsaW5nIGNvbW1hcyBwZXIgRVM1LjEuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudEZucy5wdXNoKHRoaXMuZXhwcmVzc2lvbigpKTtcclxuICAgICAgfSB3aGlsZSAodGhpcy5leHBlY3QoJywnKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnN1bWUoJ10nKTtcclxuXHJcbiAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICRwYXJzZUFycmF5TGl0ZXJhbChzZWxmLCBsb2NhbHMpIHtcclxuICAgICAgdmFyIGFycmF5ID0gW107XHJcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGVsZW1lbnRGbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xyXG4gICAgICAgIGFycmF5LnB1c2goZWxlbWVudEZuc1tpXShzZWxmLCBsb2NhbHMpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYXJyYXk7XHJcbiAgICB9LCB7XHJcbiAgICAgIGxpdGVyYWw6IHRydWUsXHJcbiAgICAgIGNvbnN0YW50OiBlbGVtZW50Rm5zLmV2ZXJ5KGlzQ29uc3RhbnQpLFxyXG4gICAgICBpbnB1dHM6IGVsZW1lbnRGbnNcclxuICAgIH0pO1xyXG4gIH0sXHJcblxyXG4gIG9iamVjdDogZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIga2V5cyA9IFtdLCB2YWx1ZUZucyA9IFtdO1xyXG4gICAgaWYgKHRoaXMucGVla1Rva2VuKCkudGV4dCAhPT0gJ30nKSB7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICBpZiAodGhpcy5wZWVrKCd9JykpIHtcclxuICAgICAgICAgIC8vIFN1cHBvcnQgdHJhaWxpbmcgY29tbWFzIHBlciBFUzUuMS5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmNvbnN1bWUoKTtcclxuICAgICAgICBpZiAodG9rZW4uY29uc3RhbnQpIHtcclxuICAgICAgICAgIGtleXMucHVzaCh0b2tlbi52YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0b2tlbi5pZGVudGlmaWVyKSB7XHJcbiAgICAgICAgICBrZXlzLnB1c2godG9rZW4udGV4dCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihcImludmFsaWQga2V5XCIsIHRva2VuKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb25zdW1lKCc6Jyk7XHJcbiAgICAgICAgdmFsdWVGbnMucHVzaCh0aGlzLmV4cHJlc3Npb24oKSk7XHJcbiAgICAgIH0gd2hpbGUgKHRoaXMuZXhwZWN0KCcsJykpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb25zdW1lKCd9Jyk7XHJcblxyXG4gICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbiAkcGFyc2VPYmplY3RMaXRlcmFsKHNlbGYsIGxvY2Fscykge1xyXG4gICAgICB2YXIgb2JqZWN0ID0ge307XHJcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHZhbHVlRm5zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcclxuICAgICAgICBvYmplY3Rba2V5c1tpXV0gPSB2YWx1ZUZuc1tpXShzZWxmLCBsb2NhbHMpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9LCB7XHJcbiAgICAgIGxpdGVyYWw6IHRydWUsXHJcbiAgICAgIGNvbnN0YW50OiB2YWx1ZUZucy5ldmVyeShpc0NvbnN0YW50KSxcclxuICAgICAgaW5wdXRzOiB2YWx1ZUZuc1xyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vIFBhcnNlciBoZWxwZXIgZnVuY3Rpb25zXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBzZXR0ZXIob2JqLCBwYXRoLCBzZXRWYWx1ZSwgZnVsbEV4cCkge1xyXG4gIGVuc3VyZVNhZmVPYmplY3Qob2JqLCBmdWxsRXhwKTtcclxuXHJcbiAgdmFyIGVsZW1lbnQgPSBwYXRoLnNwbGl0KCcuJyksIGtleTtcclxuICBmb3IgKHZhciBpID0gMDsgZWxlbWVudC5sZW5ndGggPiAxOyBpKyspIHtcclxuICAgIGtleSA9IGVuc3VyZVNhZmVNZW1iZXJOYW1lKGVsZW1lbnQuc2hpZnQoKSwgZnVsbEV4cCk7XHJcbiAgICB2YXIgcHJvcGVydHlPYmogPSBlbnN1cmVTYWZlT2JqZWN0KG9ialtrZXldLCBmdWxsRXhwKTtcclxuICAgIGlmICghcHJvcGVydHlPYmopIHtcclxuICAgICAgcHJvcGVydHlPYmogPSB7fTtcclxuICAgICAgb2JqW2tleV0gPSBwcm9wZXJ0eU9iajtcclxuICAgIH1cclxuICAgIG9iaiA9IHByb3BlcnR5T2JqO1xyXG4gIH1cclxuICBrZXkgPSBlbnN1cmVTYWZlTWVtYmVyTmFtZShlbGVtZW50LnNoaWZ0KCksIGZ1bGxFeHApO1xyXG4gIGVuc3VyZVNhZmVPYmplY3Qob2JqW2tleV0sIGZ1bGxFeHApO1xyXG4gIG9ialtrZXldID0gc2V0VmFsdWU7XHJcbiAgcmV0dXJuIHNldFZhbHVlO1xyXG59XHJcblxyXG52YXIgZ2V0dGVyRm5DYWNoZURlZmF1bHQgPSBjcmVhdGVNYXAoKTtcclxudmFyIGdldHRlckZuQ2FjaGVFeHBlbnNpdmUgPSBjcmVhdGVNYXAoKTtcclxuXHJcbmZ1bmN0aW9uIGlzUG9zc2libHlEYW5nZXJvdXNNZW1iZXJOYW1lKG5hbWUpIHtcclxuICByZXR1cm4gbmFtZSA9PSAnY29uc3RydWN0b3InO1xyXG59XHJcblxyXG4vKipcclxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFwiQmxhY2sgSG9sZVwiIHZhcmlhbnQgZnJvbTpcclxuICogLSBodHRwOi8vanNwZXJmLmNvbS9hbmd1bGFyanMtcGFyc2UtZ2V0dGVyLzRcclxuICogLSBodHRwOi8vanNwZXJmLmNvbS9wYXRoLWV2YWx1YXRpb24tc2ltcGxpZmllZC83XHJcbiAqL1xyXG5mdW5jdGlvbiBjc3BTYWZlR2V0dGVyRm4oa2V5MCwga2V5MSwga2V5Miwga2V5Mywga2V5NCwgZnVsbEV4cCwgZXhwZW5zaXZlQ2hlY2tzKSB7XHJcbiAgZW5zdXJlU2FmZU1lbWJlck5hbWUoa2V5MCwgZnVsbEV4cCk7XHJcbiAgZW5zdXJlU2FmZU1lbWJlck5hbWUoa2V5MSwgZnVsbEV4cCk7XHJcbiAgZW5zdXJlU2FmZU1lbWJlck5hbWUoa2V5MiwgZnVsbEV4cCk7XHJcbiAgZW5zdXJlU2FmZU1lbWJlck5hbWUoa2V5MywgZnVsbEV4cCk7XHJcbiAgZW5zdXJlU2FmZU1lbWJlck5hbWUoa2V5NCwgZnVsbEV4cCk7XHJcbiAgdmFyIGVzbyA9IGZ1bmN0aW9uKG8pIHtcclxuICAgIHJldHVybiBlbnN1cmVTYWZlT2JqZWN0KG8sIGZ1bGxFeHApO1xyXG4gIH07XHJcbiAgdmFyIGVzbzAgPSAoZXhwZW5zaXZlQ2hlY2tzIHx8IGlzUG9zc2libHlEYW5nZXJvdXNNZW1iZXJOYW1lKGtleTApKSA/IGVzbyA6IGlkZW50aXR5O1xyXG4gIHZhciBlc28xID0gKGV4cGVuc2l2ZUNoZWNrcyB8fCBpc1Bvc3NpYmx5RGFuZ2Vyb3VzTWVtYmVyTmFtZShrZXkxKSkgPyBlc28gOiBpZGVudGl0eTtcclxuICB2YXIgZXNvMiA9IChleHBlbnNpdmVDaGVja3MgfHwgaXNQb3NzaWJseURhbmdlcm91c01lbWJlck5hbWUoa2V5MikpID8gZXNvIDogaWRlbnRpdHk7XHJcbiAgdmFyIGVzbzMgPSAoZXhwZW5zaXZlQ2hlY2tzIHx8IGlzUG9zc2libHlEYW5nZXJvdXNNZW1iZXJOYW1lKGtleTMpKSA/IGVzbyA6IGlkZW50aXR5O1xyXG4gIHZhciBlc280ID0gKGV4cGVuc2l2ZUNoZWNrcyB8fCBpc1Bvc3NpYmx5RGFuZ2Vyb3VzTWVtYmVyTmFtZShrZXk0KSkgPyBlc28gOiBpZGVudGl0eTtcclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uIGNzcFNhZmVHZXR0ZXIoc2NvcGUsIGxvY2Fscykge1xyXG4gICAgdmFyIHBhdGhWYWwgPSAobG9jYWxzICYmIGxvY2Fscy5oYXNPd25Qcm9wZXJ0eShrZXkwKSkgPyBsb2NhbHMgOiBzY29wZTtcclxuXHJcbiAgICBpZiAocGF0aFZhbCA9PSBudWxsKSByZXR1cm4gcGF0aFZhbDtcclxuICAgIHBhdGhWYWwgPSBlc28wKHBhdGhWYWxba2V5MF0pO1xyXG5cclxuICAgIGlmICgha2V5MSkgcmV0dXJuIHBhdGhWYWw7XHJcbiAgICBpZiAocGF0aFZhbCA9PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgcGF0aFZhbCA9IGVzbzEocGF0aFZhbFtrZXkxXSk7XHJcblxyXG4gICAgaWYgKCFrZXkyKSByZXR1cm4gcGF0aFZhbDtcclxuICAgIGlmIChwYXRoVmFsID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICBwYXRoVmFsID0gZXNvMihwYXRoVmFsW2tleTJdKTtcclxuXHJcbiAgICBpZiAoIWtleTMpIHJldHVybiBwYXRoVmFsO1xyXG4gICAgaWYgKHBhdGhWYWwgPT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIHBhdGhWYWwgPSBlc28zKHBhdGhWYWxba2V5M10pO1xyXG5cclxuICAgIGlmICgha2V5NCkgcmV0dXJuIHBhdGhWYWw7XHJcbiAgICBpZiAocGF0aFZhbCA9PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgcGF0aFZhbCA9IGVzbzQocGF0aFZhbFtrZXk0XSk7XHJcblxyXG4gICAgcmV0dXJuIHBhdGhWYWw7XHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0dGVyRm5XaXRoRW5zdXJlU2FmZU9iamVjdChmbiwgZnVsbEV4cHJlc3Npb24pIHtcclxuICByZXR1cm4gZnVuY3Rpb24ocywgbCkge1xyXG4gICAgcmV0dXJuIGZuKHMsIGwsIGVuc3VyZVNhZmVPYmplY3QsIGZ1bGxFeHByZXNzaW9uKTtcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXR0ZXJGbihwYXRoLCBvcHRpb25zLCBmdWxsRXhwKSB7XHJcbiAgdmFyIGV4cGVuc2l2ZUNoZWNrcyA9IG9wdGlvbnMuZXhwZW5zaXZlQ2hlY2tzO1xyXG4gIHZhciBnZXR0ZXJGbkNhY2hlID0gKGV4cGVuc2l2ZUNoZWNrcyA/IGdldHRlckZuQ2FjaGVFeHBlbnNpdmUgOiBnZXR0ZXJGbkNhY2hlRGVmYXVsdCk7XHJcbiAgdmFyIGZuID0gZ2V0dGVyRm5DYWNoZVtwYXRoXTtcclxuICBpZiAoZm4pIHJldHVybiBmbjtcclxuXHJcblxyXG4gIHZhciBwYXRoS2V5cyA9IHBhdGguc3BsaXQoJy4nKSxcclxuICAgICAgcGF0aEtleXNMZW5ndGggPSBwYXRoS2V5cy5sZW5ndGg7XHJcblxyXG4gIC8vIGh0dHA6Ly9qc3BlcmYuY29tL2FuZ3VsYXJqcy1wYXJzZS1nZXR0ZXIvNlxyXG4gIGlmIChvcHRpb25zLmNzcCkge1xyXG4gICAgaWYgKHBhdGhLZXlzTGVuZ3RoIDwgNikge1xyXG4gICAgICBmbiA9IGNzcFNhZmVHZXR0ZXJGbihwYXRoS2V5c1swXSwgcGF0aEtleXNbMV0sIHBhdGhLZXlzWzJdLCBwYXRoS2V5c1szXSwgcGF0aEtleXNbNF0sIGZ1bGxFeHAsIGV4cGVuc2l2ZUNoZWNrcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmbiA9IGZ1bmN0aW9uIGNzcFNhZmVHZXR0ZXIoc2NvcGUsIGxvY2Fscykge1xyXG4gICAgICAgIHZhciBpID0gMCwgdmFsO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgIHZhbCA9IGNzcFNhZmVHZXR0ZXJGbihwYXRoS2V5c1tpKytdLCBwYXRoS2V5c1tpKytdLCBwYXRoS2V5c1tpKytdLCBwYXRoS2V5c1tpKytdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhLZXlzW2krK10sIGZ1bGxFeHAsIGV4cGVuc2l2ZUNoZWNrcykoc2NvcGUsIGxvY2Fscyk7XHJcblxyXG4gICAgICAgICAgbG9jYWxzID0gdW5kZWZpbmVkOyAvLyBjbGVhciBhZnRlciBmaXJzdCBpdGVyYXRpb25cclxuICAgICAgICAgIHNjb3BlID0gdmFsO1xyXG4gICAgICAgIH0gd2hpbGUgKGkgPCBwYXRoS2V5c0xlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgdmFyIGNvZGUgPSAnJztcclxuICAgIGlmIChleHBlbnNpdmVDaGVja3MpIHtcclxuICAgICAgY29kZSArPSAncyA9IGVzbyhzLCBmZSk7XFxubCA9IGVzbyhsLCBmZSk7XFxuJztcclxuICAgIH1cclxuICAgIHZhciBuZWVkc0Vuc3VyZVNhZmVPYmplY3QgPSBleHBlbnNpdmVDaGVja3M7XHJcbiAgICBmb3JFYWNoKHBhdGhLZXlzLCBmdW5jdGlvbihrZXksIGluZGV4KSB7XHJcbiAgICAgIGVuc3VyZVNhZmVNZW1iZXJOYW1lKGtleSwgZnVsbEV4cCk7XHJcbiAgICAgIHZhciBsb29rdXBKcyA9IChpbmRleFxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugc2ltcGx5IGRlcmVmZXJlbmNlICdzJyBvbiBhbnkgLmRvdCBub3RhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgPyAncydcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBpZiB3ZSBhcmUgZmlyc3QgdGhlbiB3ZSBjaGVjayBsb2NhbHMgZmlyc3QsIGFuZCBpZiBzbyByZWFkIGl0IGZpcnN0XHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICcoKGwmJmwuaGFzT3duUHJvcGVydHkoXCInICsga2V5ICsgJ1wiKSk/bDpzKScpICsgJy4nICsga2V5O1xyXG4gICAgICBpZiAoZXhwZW5zaXZlQ2hlY2tzIHx8IGlzUG9zc2libHlEYW5nZXJvdXNNZW1iZXJOYW1lKGtleSkpIHtcclxuICAgICAgICBsb29rdXBKcyA9ICdlc28oJyArIGxvb2t1cEpzICsgJywgZmUpJztcclxuICAgICAgICBuZWVkc0Vuc3VyZVNhZmVPYmplY3QgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvZGUgKz0gJ2lmKHMgPT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcXG4nICtcclxuICAgICAgICAgICAgICAncz0nICsgbG9va3VwSnMgKyAnO1xcbic7XHJcbiAgICB9KTtcclxuICAgIGNvZGUgKz0gJ3JldHVybiBzOyc7XHJcblxyXG4gICAgLyoganNoaW50IC1XMDU0ICovXHJcbiAgICB2YXIgZXZhbGVkRm5HZXR0ZXIgPSBuZXcgRnVuY3Rpb24oJ3MnLCAnbCcsICdlc28nLCAnZmUnLCBjb2RlKTsgLy8gcz1zY29wZSwgbD1sb2NhbHMsIGVzbz1lbnN1cmVTYWZlT2JqZWN0XHJcbiAgICAvKiBqc2hpbnQgK1cwNTQgKi9cclxuICAgIGV2YWxlZEZuR2V0dGVyLnRvU3RyaW5nID0gdmFsdWVGbihjb2RlKTtcclxuICAgIGlmIChuZWVkc0Vuc3VyZVNhZmVPYmplY3QpIHtcclxuICAgICAgZXZhbGVkRm5HZXR0ZXIgPSBnZXR0ZXJGbldpdGhFbnN1cmVTYWZlT2JqZWN0KGV2YWxlZEZuR2V0dGVyLCBmdWxsRXhwKTtcclxuICAgIH1cclxuICAgIGZuID0gZXZhbGVkRm5HZXR0ZXI7XHJcbiAgfVxyXG5cclxuICBmbi5zaGFyZWRHZXR0ZXIgPSB0cnVlO1xyXG4gIGZuLmFzc2lnbiA9IGZ1bmN0aW9uKHNlbGYsIHZhbHVlKSB7XHJcbiAgICByZXR1cm4gc2V0dGVyKHNlbGYsIHBhdGgsIHZhbHVlLCBwYXRoKTtcclxuICB9O1xyXG4gIGdldHRlckZuQ2FjaGVbcGF0aF0gPSBmbjtcclxuICByZXR1cm4gZm47XHJcbn1cclxuXHJcbnZhciBvYmplY3RWYWx1ZU9mID0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mO1xyXG5cclxuZnVuY3Rpb24gZ2V0VmFsdWVPZih2YWx1ZSkge1xyXG4gIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlLnZhbHVlT2YpID8gdmFsdWUudmFsdWVPZigpIDogb2JqZWN0VmFsdWVPZi5jYWxsKHZhbHVlKTtcclxufVxyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2Mgc2VydmljZVxyXG4gKiBAbmFtZSAkcGFyc2VcclxuICogQGtpbmQgZnVuY3Rpb25cclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqXHJcbiAqIENvbnZlcnRzIEFuZ3VsYXIge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaW50byBhIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBgYGBqc1xyXG4gKiAgIHZhciBnZXR0ZXIgPSAkcGFyc2UoJ3VzZXIubmFtZScpO1xyXG4gKiAgIHZhciBzZXR0ZXIgPSBnZXR0ZXIuYXNzaWduO1xyXG4gKiAgIHZhciBjb250ZXh0ID0ge3VzZXI6e25hbWU6J2FuZ3VsYXInfX07XHJcbiAqICAgdmFyIGxvY2FscyA9IHt1c2VyOntuYW1lOidsb2NhbCd9fTtcclxuICpcclxuICogICBleHBlY3QoZ2V0dGVyKGNvbnRleHQpKS50b0VxdWFsKCdhbmd1bGFyJyk7XHJcbiAqICAgc2V0dGVyKGNvbnRleHQsICduZXdWYWx1ZScpO1xyXG4gKiAgIGV4cGVjdChjb250ZXh0LnVzZXIubmFtZSkudG9FcXVhbCgnbmV3VmFsdWUnKTtcclxuICogICBleHBlY3QoZ2V0dGVyKGNvbnRleHQsIGxvY2FscykpLnRvRXF1YWwoJ2xvY2FsJyk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiBTdHJpbmcgZXhwcmVzc2lvbiB0byBjb21waWxlLlxyXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oY29udGV4dCwgbG9jYWxzKX0gYSBmdW5jdGlvbiB3aGljaCByZXByZXNlbnRzIHRoZSBjb21waWxlZCBleHByZXNzaW9uOlxyXG4gKlxyXG4gKiAgICAqIGBjb250ZXh0YCDigJMgYHtvYmplY3R9YCDigJMgYW4gb2JqZWN0IGFnYWluc3Qgd2hpY2ggYW55IGV4cHJlc3Npb25zIGVtYmVkZGVkIGluIHRoZSBzdHJpbmdzXHJcbiAqICAgICAgYXJlIGV2YWx1YXRlZCBhZ2FpbnN0ICh0eXBpY2FsbHkgYSBzY29wZSBvYmplY3QpLlxyXG4gKiAgICAqIGBsb2NhbHNgIOKAkyBge29iamVjdD19YCDigJMgbG9jYWwgdmFyaWFibGVzIGNvbnRleHQgb2JqZWN0LCB1c2VmdWwgZm9yIG92ZXJyaWRpbmcgdmFsdWVzIGluXHJcbiAqICAgICAgYGNvbnRleHRgLlxyXG4gKlxyXG4gKiAgICBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gYWxzbyBoYXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxyXG4gKiAgICAgICogYGxpdGVyYWxgIOKAkyBge2Jvb2xlYW59YCDigJMgd2hldGhlciB0aGUgZXhwcmVzc2lvbidzIHRvcC1sZXZlbCBub2RlIGlzIGEgSmF2YVNjcmlwdFxyXG4gKiAgICAgICAgbGl0ZXJhbC5cclxuICogICAgICAqIGBjb25zdGFudGAg4oCTIGB7Ym9vbGVhbn1gIOKAkyB3aGV0aGVyIHRoZSBleHByZXNzaW9uIGlzIG1hZGUgZW50aXJlbHkgb2YgSmF2YVNjcmlwdFxyXG4gKiAgICAgICAgY29uc3RhbnQgbGl0ZXJhbHMuXHJcbiAqICAgICAgKiBgYXNzaWduYCDigJMgYHs/ZnVuY3Rpb24oY29udGV4dCwgdmFsdWUpfWAg4oCTIGlmIHRoZSBleHByZXNzaW9uIGlzIGFzc2lnbmFibGUsIHRoaXMgd2lsbCBiZVxyXG4gKiAgICAgICAgc2V0IHRvIGEgZnVuY3Rpb24gdG8gY2hhbmdlIGl0cyB2YWx1ZSBvbiB0aGUgZ2l2ZW4gY29udGV4dC5cclxuICpcclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBwcm92aWRlclxyXG4gKiBAbmFtZSAkcGFyc2VQcm92aWRlclxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogYCRwYXJzZVByb3ZpZGVyYCBjYW4gYmUgdXNlZCBmb3IgY29uZmlndXJpbmcgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIHtAbGluayBuZy4kcGFyc2UgJHBhcnNlfVxyXG4gKiAgc2VydmljZS5cclxuICovXHJcbmZ1bmN0aW9uICRQYXJzZVByb3ZpZGVyKCkge1xyXG4gIHZhciBjYWNoZURlZmF1bHQgPSBjcmVhdGVNYXAoKTtcclxuICB2YXIgY2FjaGVFeHBlbnNpdmUgPSBjcmVhdGVNYXAoKTtcclxuXHJcblxyXG5cclxuICB0aGlzLiRnZXQgPSBbJyRmaWx0ZXInLCAnJHNuaWZmZXInLCBmdW5jdGlvbigkZmlsdGVyLCAkc25pZmZlcikge1xyXG4gICAgdmFyICRwYXJzZU9wdGlvbnMgPSB7XHJcbiAgICAgICAgICBjc3A6ICRzbmlmZmVyLmNzcCxcclxuICAgICAgICAgIGV4cGVuc2l2ZUNoZWNrczogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgICRwYXJzZU9wdGlvbnNFeHBlbnNpdmUgPSB7XHJcbiAgICAgICAgICBjc3A6ICRzbmlmZmVyLmNzcCxcclxuICAgICAgICAgIGV4cGVuc2l2ZUNoZWNrczogdHJ1ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gd3JhcFNoYXJlZEV4cHJlc3Npb24oZXhwKSB7XHJcbiAgICAgIHZhciB3cmFwcGVkID0gZXhwO1xyXG5cclxuICAgICAgaWYgKGV4cC5zaGFyZWRHZXR0ZXIpIHtcclxuICAgICAgICB3cmFwcGVkID0gZnVuY3Rpb24gJHBhcnNlV3JhcHBlcihzZWxmLCBsb2NhbHMpIHtcclxuICAgICAgICAgIHJldHVybiBleHAoc2VsZiwgbG9jYWxzKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHdyYXBwZWQubGl0ZXJhbCA9IGV4cC5saXRlcmFsO1xyXG4gICAgICAgIHdyYXBwZWQuY29uc3RhbnQgPSBleHAuY29uc3RhbnQ7XHJcbiAgICAgICAgd3JhcHBlZC5hc3NpZ24gPSBleHAuYXNzaWduO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gd3JhcHBlZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24gJHBhcnNlKGV4cCwgaW50ZXJjZXB0b3JGbiwgZXhwZW5zaXZlQ2hlY2tzKSB7XHJcbiAgICAgIHZhciBwYXJzZWRFeHByZXNzaW9uLCBvbmVUaW1lLCBjYWNoZUtleTtcclxuXHJcbiAgICAgIHN3aXRjaCAodHlwZW9mIGV4cCkge1xyXG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgICAgICBjYWNoZUtleSA9IGV4cCA9IGV4cC50cmltKCk7XHJcblxyXG4gICAgICAgICAgdmFyIGNhY2hlID0gKGV4cGVuc2l2ZUNoZWNrcyA/IGNhY2hlRXhwZW5zaXZlIDogY2FjaGVEZWZhdWx0KTtcclxuICAgICAgICAgIHBhcnNlZEV4cHJlc3Npb24gPSBjYWNoZVtjYWNoZUtleV07XHJcblxyXG4gICAgICAgICAgaWYgKCFwYXJzZWRFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIGlmIChleHAuY2hhckF0KDApID09PSAnOicgJiYgZXhwLmNoYXJBdCgxKSA9PT0gJzonKSB7XHJcbiAgICAgICAgICAgICAgb25lVGltZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgZXhwID0gZXhwLnN1YnN0cmluZygyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHBhcnNlT3B0aW9ucyA9IGV4cGVuc2l2ZUNoZWNrcyA/ICRwYXJzZU9wdGlvbnNFeHBlbnNpdmUgOiAkcGFyc2VPcHRpb25zO1xyXG4gICAgICAgICAgICB2YXIgbGV4ZXIgPSBuZXcgTGV4ZXIocGFyc2VPcHRpb25zKTtcclxuICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIobGV4ZXIsICRmaWx0ZXIsIHBhcnNlT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHBhcnNlZEV4cHJlc3Npb24gPSBwYXJzZXIucGFyc2UoZXhwKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwYXJzZWRFeHByZXNzaW9uLmNvbnN0YW50KSB7XHJcbiAgICAgICAgICAgICAgcGFyc2VkRXhwcmVzc2lvbi4kJHdhdGNoRGVsZWdhdGUgPSBjb25zdGFudFdhdGNoRGVsZWdhdGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob25lVGltZSkge1xyXG4gICAgICAgICAgICAgIC8vb25lVGltZSBpcyBub3QgcGFydCBvZiB0aGUgZXhwIHBhc3NlZCB0byB0aGUgUGFyc2VyIHNvIHdlIG1heSBoYXZlIHRvXHJcbiAgICAgICAgICAgICAgLy93cmFwIHRoZSBwYXJzZWRFeHByZXNzaW9uIGJlZm9yZSBhZGRpbmcgYSAkJHdhdGNoRGVsZWdhdGVcclxuICAgICAgICAgICAgICBwYXJzZWRFeHByZXNzaW9uID0gd3JhcFNoYXJlZEV4cHJlc3Npb24ocGFyc2VkRXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgICAgcGFyc2VkRXhwcmVzc2lvbi4kJHdhdGNoRGVsZWdhdGUgPSBwYXJzZWRFeHByZXNzaW9uLmxpdGVyYWwgP1xyXG4gICAgICAgICAgICAgICAgb25lVGltZUxpdGVyYWxXYXRjaERlbGVnYXRlIDogb25lVGltZVdhdGNoRGVsZWdhdGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2VkRXhwcmVzc2lvbi5pbnB1dHMpIHtcclxuICAgICAgICAgICAgICBwYXJzZWRFeHByZXNzaW9uLiQkd2F0Y2hEZWxlZ2F0ZSA9IGlucHV0c1dhdGNoRGVsZWdhdGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNhY2hlW2NhY2hlS2V5XSA9IHBhcnNlZEV4cHJlc3Npb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gYWRkSW50ZXJjZXB0b3IocGFyc2VkRXhwcmVzc2lvbiwgaW50ZXJjZXB0b3JGbik7XHJcblxyXG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcclxuICAgICAgICAgIHJldHVybiBhZGRJbnRlcmNlcHRvcihleHAsIGludGVyY2VwdG9yRm4pO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuIGFkZEludGVyY2VwdG9yKG5vb3AsIGludGVyY2VwdG9yRm4pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGNvbGxlY3RFeHByZXNzaW9uSW5wdXRzKGlucHV0cywgbGlzdCkge1xyXG4gICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBpbnB1dHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xyXG4gICAgICAgIHZhciBpbnB1dCA9IGlucHV0c1tpXTtcclxuICAgICAgICBpZiAoIWlucHV0LmNvbnN0YW50KSB7XHJcbiAgICAgICAgICBpZiAoaW5wdXQuaW5wdXRzKSB7XHJcbiAgICAgICAgICAgIGNvbGxlY3RFeHByZXNzaW9uSW5wdXRzKGlucHV0LmlucHV0cywgbGlzdCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGxpc3QuaW5kZXhPZihpbnB1dCkgPT09IC0xKSB7IC8vIFRPRE8ocGVyZikgY2FuIHdlIGRvIGJldHRlcj9cclxuICAgICAgICAgICAgbGlzdC5wdXNoKGlucHV0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBsaXN0O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGV4cHJlc3Npb25JbnB1dERpcnR5Q2hlY2sobmV3VmFsdWUsIG9sZFZhbHVlT2ZWYWx1ZSkge1xyXG5cclxuICAgICAgaWYgKG5ld1ZhbHVlID09IG51bGwgfHwgb2xkVmFsdWVPZlZhbHVlID09IG51bGwpIHsgLy8gbnVsbC91bmRlZmluZWRcclxuICAgICAgICByZXR1cm4gbmV3VmFsdWUgPT09IG9sZFZhbHVlT2ZWYWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuXHJcbiAgICAgICAgLy8gYXR0ZW1wdCB0byBjb252ZXJ0IHRoZSB2YWx1ZSB0byBhIHByaW1pdGl2ZSB0eXBlXHJcbiAgICAgICAgLy8gVE9ETyhkb2NzKTogYWRkIGEgbm90ZSB0byBkb2NzIHRoYXQgYnkgaW1wbGVtZW50aW5nIHZhbHVlT2YgZXZlbiBvYmplY3RzIGFuZCBhcnJheXMgY2FuXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgYmUgY2hlYXBseSBkaXJ0eS1jaGVja2VkXHJcbiAgICAgICAgbmV3VmFsdWUgPSBnZXRWYWx1ZU9mKG5ld1ZhbHVlKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIC8vIG9iamVjdHMvYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIC0gZGVlcC13YXRjaGluZyB0aGVtIHdvdWxkIGJlIHRvbyBleHBlbnNpdmVcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGZhbGwtdGhyb3VnaCB0byB0aGUgcHJpbWl0aXZlIGVxdWFsaXR5IGNoZWNrXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vUHJpbWl0aXZlIG9yIE5hTlxyXG4gICAgICByZXR1cm4gbmV3VmFsdWUgPT09IG9sZFZhbHVlT2ZWYWx1ZSB8fCAobmV3VmFsdWUgIT09IG5ld1ZhbHVlICYmIG9sZFZhbHVlT2ZWYWx1ZSAhPT0gb2xkVmFsdWVPZlZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpbnB1dHNXYXRjaERlbGVnYXRlKHNjb3BlLCBsaXN0ZW5lciwgb2JqZWN0RXF1YWxpdHksIHBhcnNlZEV4cHJlc3Npb24pIHtcclxuICAgICAgdmFyIGlucHV0RXhwcmVzc2lvbnMgPSBwYXJzZWRFeHByZXNzaW9uLiQkaW5wdXRzIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHBhcnNlZEV4cHJlc3Npb24uJCRpbnB1dHMgPSBjb2xsZWN0RXhwcmVzc2lvbklucHV0cyhwYXJzZWRFeHByZXNzaW9uLmlucHV0cywgW10pKTtcclxuXHJcbiAgICAgIHZhciBsYXN0UmVzdWx0O1xyXG5cclxuICAgICAgaWYgKGlucHV0RXhwcmVzc2lvbnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgdmFyIG9sZElucHV0VmFsdWUgPSBleHByZXNzaW9uSW5wdXREaXJ0eUNoZWNrOyAvLyBpbml0IHRvIHNvbWV0aGluZyB1bmlxdWUgc28gdGhhdCBlcXVhbHMgY2hlY2sgZmFpbHNcclxuICAgICAgICBpbnB1dEV4cHJlc3Npb25zID0gaW5wdXRFeHByZXNzaW9uc1swXTtcclxuICAgICAgICByZXR1cm4gc2NvcGUuJHdhdGNoKGZ1bmN0aW9uIGV4cHJlc3Npb25JbnB1dFdhdGNoKHNjb3BlKSB7XHJcbiAgICAgICAgICB2YXIgbmV3SW5wdXRWYWx1ZSA9IGlucHV0RXhwcmVzc2lvbnMoc2NvcGUpO1xyXG4gICAgICAgICAgaWYgKCFleHByZXNzaW9uSW5wdXREaXJ0eUNoZWNrKG5ld0lucHV0VmFsdWUsIG9sZElucHV0VmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGxhc3RSZXN1bHQgPSBwYXJzZWRFeHByZXNzaW9uKHNjb3BlKTtcclxuICAgICAgICAgICAgb2xkSW5wdXRWYWx1ZSA9IG5ld0lucHV0VmFsdWUgJiYgZ2V0VmFsdWVPZihuZXdJbnB1dFZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xyXG4gICAgICAgIH0sIGxpc3RlbmVyLCBvYmplY3RFcXVhbGl0eSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBvbGRJbnB1dFZhbHVlT2ZWYWx1ZXMgPSBbXTtcclxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gaW5wdXRFeHByZXNzaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XHJcbiAgICAgICAgb2xkSW5wdXRWYWx1ZU9mVmFsdWVzW2ldID0gZXhwcmVzc2lvbklucHV0RGlydHlDaGVjazsgLy8gaW5pdCB0byBzb21ldGhpbmcgdW5pcXVlIHNvIHRoYXQgZXF1YWxzIGNoZWNrIGZhaWxzXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBzY29wZS4kd2F0Y2goZnVuY3Rpb24gZXhwcmVzc2lvbklucHV0c1dhdGNoKHNjb3BlKSB7XHJcbiAgICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gaW5wdXRFeHByZXNzaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XHJcbiAgICAgICAgICB2YXIgbmV3SW5wdXRWYWx1ZSA9IGlucHV0RXhwcmVzc2lvbnNbaV0oc2NvcGUpO1xyXG4gICAgICAgICAgaWYgKGNoYW5nZWQgfHwgKGNoYW5nZWQgPSAhZXhwcmVzc2lvbklucHV0RGlydHlDaGVjayhuZXdJbnB1dFZhbHVlLCBvbGRJbnB1dFZhbHVlT2ZWYWx1ZXNbaV0pKSkge1xyXG4gICAgICAgICAgICBvbGRJbnB1dFZhbHVlT2ZWYWx1ZXNbaV0gPSBuZXdJbnB1dFZhbHVlICYmIGdldFZhbHVlT2YobmV3SW5wdXRWYWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICAgICAgbGFzdFJlc3VsdCA9IHBhcnNlZEV4cHJlc3Npb24oc2NvcGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XHJcbiAgICAgIH0sIGxpc3RlbmVyLCBvYmplY3RFcXVhbGl0eSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gb25lVGltZVdhdGNoRGVsZWdhdGUoc2NvcGUsIGxpc3RlbmVyLCBvYmplY3RFcXVhbGl0eSwgcGFyc2VkRXhwcmVzc2lvbikge1xyXG4gICAgICB2YXIgdW53YXRjaCwgbGFzdFZhbHVlO1xyXG4gICAgICByZXR1cm4gdW53YXRjaCA9IHNjb3BlLiR3YXRjaChmdW5jdGlvbiBvbmVUaW1lV2F0Y2goc2NvcGUpIHtcclxuICAgICAgICByZXR1cm4gcGFyc2VkRXhwcmVzc2lvbihzY29wZSk7XHJcbiAgICAgIH0sIGZ1bmN0aW9uIG9uZVRpbWVMaXN0ZW5lcih2YWx1ZSwgb2xkLCBzY29wZSkge1xyXG4gICAgICAgIGxhc3RWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVyKSkge1xyXG4gICAgICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcclxuICAgICAgICAgIHNjb3BlLiQkcG9zdERpZ2VzdChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZChsYXN0VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgdW53YXRjaCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIG9iamVjdEVxdWFsaXR5KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBvbmVUaW1lTGl0ZXJhbFdhdGNoRGVsZWdhdGUoc2NvcGUsIGxpc3RlbmVyLCBvYmplY3RFcXVhbGl0eSwgcGFyc2VkRXhwcmVzc2lvbikge1xyXG4gICAgICB2YXIgdW53YXRjaCwgbGFzdFZhbHVlO1xyXG4gICAgICByZXR1cm4gdW53YXRjaCA9IHNjb3BlLiR3YXRjaChmdW5jdGlvbiBvbmVUaW1lV2F0Y2goc2NvcGUpIHtcclxuICAgICAgICByZXR1cm4gcGFyc2VkRXhwcmVzc2lvbihzY29wZSk7XHJcbiAgICAgIH0sIGZ1bmN0aW9uIG9uZVRpbWVMaXN0ZW5lcih2YWx1ZSwgb2xkLCBzY29wZSkge1xyXG4gICAgICAgIGxhc3RWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVyKSkge1xyXG4gICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCB2YWx1ZSwgb2xkLCBzY29wZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0FsbERlZmluZWQodmFsdWUpKSB7XHJcbiAgICAgICAgICBzY29wZS4kJHBvc3REaWdlc3QoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0FsbERlZmluZWQobGFzdFZhbHVlKSkgdW53YXRjaCgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBvYmplY3RFcXVhbGl0eSk7XHJcblxyXG4gICAgICBmdW5jdGlvbiBpc0FsbERlZmluZWQodmFsdWUpIHtcclxuICAgICAgICB2YXIgYWxsRGVmaW5lZCA9IHRydWU7XHJcbiAgICAgICAgZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24odmFsKSB7XHJcbiAgICAgICAgICBpZiAoIWlzRGVmaW5lZCh2YWwpKSBhbGxEZWZpbmVkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFsbERlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjb25zdGFudFdhdGNoRGVsZWdhdGUoc2NvcGUsIGxpc3RlbmVyLCBvYmplY3RFcXVhbGl0eSwgcGFyc2VkRXhwcmVzc2lvbikge1xyXG4gICAgICB2YXIgdW53YXRjaDtcclxuICAgICAgcmV0dXJuIHVud2F0Y2ggPSBzY29wZS4kd2F0Y2goZnVuY3Rpb24gY29uc3RhbnRXYXRjaChzY29wZSkge1xyXG4gICAgICAgIHJldHVybiBwYXJzZWRFeHByZXNzaW9uKHNjb3BlKTtcclxuICAgICAgfSwgZnVuY3Rpb24gY29uc3RhbnRMaXN0ZW5lcih2YWx1ZSwgb2xkLCBzY29wZSkge1xyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVyKSkge1xyXG4gICAgICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdW53YXRjaCgpO1xyXG4gICAgICB9LCBvYmplY3RFcXVhbGl0eSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYWRkSW50ZXJjZXB0b3IocGFyc2VkRXhwcmVzc2lvbiwgaW50ZXJjZXB0b3JGbikge1xyXG4gICAgICBpZiAoIWludGVyY2VwdG9yRm4pIHJldHVybiBwYXJzZWRFeHByZXNzaW9uO1xyXG4gICAgICB2YXIgd2F0Y2hEZWxlZ2F0ZSA9IHBhcnNlZEV4cHJlc3Npb24uJCR3YXRjaERlbGVnYXRlO1xyXG5cclxuICAgICAgdmFyIHJlZ3VsYXJXYXRjaCA9XHJcbiAgICAgICAgICB3YXRjaERlbGVnYXRlICE9PSBvbmVUaW1lTGl0ZXJhbFdhdGNoRGVsZWdhdGUgJiZcclxuICAgICAgICAgIHdhdGNoRGVsZWdhdGUgIT09IG9uZVRpbWVXYXRjaERlbGVnYXRlO1xyXG5cclxuICAgICAgdmFyIGZuID0gcmVndWxhcldhdGNoID8gZnVuY3Rpb24gcmVndWxhckludGVyY2VwdGVkRXhwcmVzc2lvbihzY29wZSwgbG9jYWxzKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VkRXhwcmVzc2lvbihzY29wZSwgbG9jYWxzKTtcclxuICAgICAgICByZXR1cm4gaW50ZXJjZXB0b3JGbih2YWx1ZSwgc2NvcGUsIGxvY2Fscyk7XHJcbiAgICAgIH0gOiBmdW5jdGlvbiBvbmVUaW1lSW50ZXJjZXB0ZWRFeHByZXNzaW9uKHNjb3BlLCBsb2NhbHMpIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSBwYXJzZWRFeHByZXNzaW9uKHNjb3BlLCBsb2NhbHMpO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBpbnRlcmNlcHRvckZuKHZhbHVlLCBzY29wZSwgbG9jYWxzKTtcclxuICAgICAgICAvLyB3ZSBvbmx5IHJldHVybiB0aGUgaW50ZXJjZXB0b3IncyByZXN1bHQgaWYgdGhlXHJcbiAgICAgICAgLy8gaW5pdGlhbCB2YWx1ZSBpcyBkZWZpbmVkIChmb3IgYmluZC1vbmNlKVxyXG4gICAgICAgIHJldHVybiBpc0RlZmluZWQodmFsdWUpID8gcmVzdWx0IDogdmFsdWU7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBQcm9wYWdhdGUgJCR3YXRjaERlbGVnYXRlcyBvdGhlciB0aGVuIGlucHV0c1dhdGNoRGVsZWdhdGVcclxuICAgICAgaWYgKHBhcnNlZEV4cHJlc3Npb24uJCR3YXRjaERlbGVnYXRlICYmXHJcbiAgICAgICAgICBwYXJzZWRFeHByZXNzaW9uLiQkd2F0Y2hEZWxlZ2F0ZSAhPT0gaW5wdXRzV2F0Y2hEZWxlZ2F0ZSkge1xyXG4gICAgICAgIGZuLiQkd2F0Y2hEZWxlZ2F0ZSA9IHBhcnNlZEV4cHJlc3Npb24uJCR3YXRjaERlbGVnYXRlO1xyXG4gICAgICB9IGVsc2UgaWYgKCFpbnRlcmNlcHRvckZuLiRzdGF0ZWZ1bCkge1xyXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGludGVyY2VwdG9yLCBidXQgbm8gd2F0Y2hEZWxlZ2F0ZSB0aGVuIHRyZWF0IHRoZSBpbnRlcmNlcHRvciBsaWtlXHJcbiAgICAgICAgLy8gd2UgdHJlYXQgZmlsdGVycyAtIGl0IGlzIGFzc3VtZWQgdG8gYmUgYSBwdXJlIGZ1bmN0aW9uIHVubGVzcyBmbGFnZ2VkIHdpdGggJHN0YXRlZnVsXHJcbiAgICAgICAgZm4uJCR3YXRjaERlbGVnYXRlID0gaW5wdXRzV2F0Y2hEZWxlZ2F0ZTtcclxuICAgICAgICBmbi5pbnB1dHMgPSBbcGFyc2VkRXhwcmVzc2lvbl07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBmbjtcclxuICAgIH1cclxuICB9XTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBzZXJ2aWNlXHJcbiAqIEBuYW1lICRxXHJcbiAqIEByZXF1aXJlcyAkcm9vdFNjb3BlXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBBIHNlcnZpY2UgdGhhdCBoZWxwcyB5b3UgcnVuIGZ1bmN0aW9ucyBhc3luY2hyb25vdXNseSwgYW5kIHVzZSB0aGVpciByZXR1cm4gdmFsdWVzIChvciBleGNlcHRpb25zKVxyXG4gKiB3aGVuIHRoZXkgYXJlIGRvbmUgcHJvY2Vzc2luZy5cclxuICpcclxuICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBwcm9taXNlcy9kZWZlcnJlZCBvYmplY3RzIGluc3BpcmVkIGJ5XHJcbiAqIFtLcmlzIEtvd2FsJ3MgUV0oaHR0cHM6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9xKS5cclxuICpcclxuICogJHEgY2FuIGJlIHVzZWQgaW4gdHdvIGZhc2hpb25zIC0tLSBvbmUgd2hpY2ggaXMgbW9yZSBzaW1pbGFyIHRvIEtyaXMgS293YWwncyBRIG9yIGpRdWVyeSdzIERlZmVycmVkXHJcbiAqIGltcGxlbWVudGF0aW9ucywgYW5kIHRoZSBvdGhlciB3aGljaCByZXNlbWJsZXMgRVM2IHByb21pc2VzIHRvIHNvbWUgZGVncmVlLlxyXG4gKlxyXG4gKiAjICRxIGNvbnN0cnVjdG9yXHJcbiAqXHJcbiAqIFRoZSBzdHJlYW1saW5lZCBFUzYgc3R5bGUgcHJvbWlzZSBpcyBlc3NlbnRpYWxseSBqdXN0IHVzaW5nICRxIGFzIGEgY29uc3RydWN0b3Igd2hpY2ggdGFrZXMgYSBgcmVzb2x2ZXJgXHJcbiAqIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBuYXRpdmUgUHJvbWlzZSBpbXBsZW1lbnRhdGlvbiBmcm9tIEVTNiBIYXJtb255LFxyXG4gKiBzZWUgW01ETl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvUHJvbWlzZSkuXHJcbiAqXHJcbiAqIFdoaWxlIHRoZSBjb25zdHJ1Y3Rvci1zdHlsZSB1c2UgaXMgc3VwcG9ydGVkLCBub3QgYWxsIG9mIHRoZSBzdXBwb3J0aW5nIG1ldGhvZHMgZnJvbSBFUzYgSGFybW9ueSBwcm9taXNlcyBhcmVcclxuICogYXZhaWxhYmxlIHlldC5cclxuICpcclxuICogSXQgY2FuIGJlIHVzZWQgbGlrZSBzbzpcclxuICpcclxuICogYGBganNcclxuICogICAvLyBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBleGFtcGxlIGxldCdzIGFzc3VtZSB0aGF0IHZhcmlhYmxlcyBgJHFgIGFuZCBgb2tUb0dyZWV0YFxyXG4gKiAgIC8vIGFyZSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgbGV4aWNhbCBzY29wZSAodGhleSBjb3VsZCBoYXZlIGJlZW4gaW5qZWN0ZWQgb3IgcGFzc2VkIGluKS5cclxuICpcclxuICogICBmdW5jdGlvbiBhc3luY0dyZWV0KG5hbWUpIHtcclxuICogICAgIC8vIHBlcmZvcm0gc29tZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uLCByZXNvbHZlIG9yIHJlamVjdCB0aGUgcHJvbWlzZSB3aGVuIGFwcHJvcHJpYXRlLlxyXG4gKiAgICAgcmV0dXJuICRxKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gKiAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gKiAgICAgICAgIGlmIChva1RvR3JlZXQobmFtZSkpIHtcclxuICogICAgICAgICAgIHJlc29sdmUoJ0hlbGxvLCAnICsgbmFtZSArICchJyk7XHJcbiAqICAgICAgICAgfSBlbHNlIHtcclxuICogICAgICAgICAgIHJlamVjdCgnR3JlZXRpbmcgJyArIG5hbWUgKyAnIGlzIG5vdCBhbGxvd2VkLicpO1xyXG4gKiAgICAgICAgIH1cclxuICogICAgICAgfSwgMTAwMCk7XHJcbiAqICAgICB9KTtcclxuICogICB9XHJcbiAqXHJcbiAqICAgdmFyIHByb21pc2UgPSBhc3luY0dyZWV0KCdSb2JpbiBIb29kJyk7XHJcbiAqICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKGdyZWV0aW5nKSB7XHJcbiAqICAgICBhbGVydCgnU3VjY2VzczogJyArIGdyZWV0aW5nKTtcclxuICogICB9LCBmdW5jdGlvbihyZWFzb24pIHtcclxuICogICAgIGFsZXJ0KCdGYWlsZWQ6ICcgKyByZWFzb24pO1xyXG4gKiAgIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogTm90ZTogcHJvZ3Jlc3Mvbm90aWZ5IGNhbGxiYWNrcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgdmlhIHRoZSBFUzYtc3R5bGUgaW50ZXJmYWNlLlxyXG4gKlxyXG4gKiBIb3dldmVyLCB0aGUgbW9yZSB0cmFkaXRpb25hbCBDb21tb25KUy1zdHlsZSB1c2FnZSBpcyBzdGlsbCBhdmFpbGFibGUsIGFuZCBkb2N1bWVudGVkIGJlbG93LlxyXG4gKlxyXG4gKiBbVGhlIENvbW1vbkpTIFByb21pc2UgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmNvbW1vbmpzLm9yZy93aWtpL1Byb21pc2VzKSBkZXNjcmliZXMgYSBwcm9taXNlIGFzIGFuXHJcbiAqIGludGVyZmFjZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgYW4gYWN0aW9uIHRoYXQgaXNcclxuICogcGVyZm9ybWVkIGFzeW5jaHJvbm91c2x5LCBhbmQgbWF5IG9yIG1heSBub3QgYmUgZmluaXNoZWQgYXQgYW55IGdpdmVuIHBvaW50IGluIHRpbWUuXHJcbiAqXHJcbiAqIEZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGRlYWxpbmcgd2l0aCBlcnJvciBoYW5kbGluZywgZGVmZXJyZWQgYW5kIHByb21pc2UgQVBJcyBhcmUgdG9cclxuICogYXN5bmNocm9ub3VzIHByb2dyYW1taW5nIHdoYXQgYHRyeWAsIGBjYXRjaGAgYW5kIGB0aHJvd2Aga2V5d29yZHMgYXJlIHRvIHN5bmNocm9ub3VzIHByb2dyYW1taW5nLlxyXG4gKlxyXG4gKiBgYGBqc1xyXG4gKiAgIC8vIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIGV4YW1wbGUgbGV0J3MgYXNzdW1lIHRoYXQgdmFyaWFibGVzIGAkcWAgYW5kIGBva1RvR3JlZXRgXHJcbiAqICAgLy8gYXJlIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBsZXhpY2FsIHNjb3BlICh0aGV5IGNvdWxkIGhhdmUgYmVlbiBpbmplY3RlZCBvciBwYXNzZWQgaW4pLlxyXG4gKlxyXG4gKiAgIGZ1bmN0aW9uIGFzeW5jR3JlZXQobmFtZSkge1xyXG4gKiAgICAgdmFyIGRlZmVycmVkID0gJHEuZGVmZXIoKTtcclxuICpcclxuICogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAqICAgICAgIGRlZmVycmVkLm5vdGlmeSgnQWJvdXQgdG8gZ3JlZXQgJyArIG5hbWUgKyAnLicpO1xyXG4gKlxyXG4gKiAgICAgICBpZiAob2tUb0dyZWV0KG5hbWUpKSB7XHJcbiAqICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgnSGVsbG8sICcgKyBuYW1lICsgJyEnKTtcclxuICogICAgICAgfSBlbHNlIHtcclxuICogICAgICAgICBkZWZlcnJlZC5yZWplY3QoJ0dyZWV0aW5nICcgKyBuYW1lICsgJyBpcyBub3QgYWxsb3dlZC4nKTtcclxuICogICAgICAgfVxyXG4gKiAgICAgfSwgMTAwMCk7XHJcbiAqXHJcbiAqICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTtcclxuICogICB9XHJcbiAqXHJcbiAqICAgdmFyIHByb21pc2UgPSBhc3luY0dyZWV0KCdSb2JpbiBIb29kJyk7XHJcbiAqICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKGdyZWV0aW5nKSB7XHJcbiAqICAgICBhbGVydCgnU3VjY2VzczogJyArIGdyZWV0aW5nKTtcclxuICogICB9LCBmdW5jdGlvbihyZWFzb24pIHtcclxuICogICAgIGFsZXJ0KCdGYWlsZWQ6ICcgKyByZWFzb24pO1xyXG4gKiAgIH0sIGZ1bmN0aW9uKHVwZGF0ZSkge1xyXG4gKiAgICAgYWxlcnQoJ0dvdCBub3RpZmljYXRpb246ICcgKyB1cGRhdGUpO1xyXG4gKiAgIH0pO1xyXG4gKiBgYGBcclxuICpcclxuICogQXQgZmlyc3QgaXQgbWlnaHQgbm90IGJlIG9idmlvdXMgd2h5IHRoaXMgZXh0cmEgY29tcGxleGl0eSBpcyB3b3J0aCB0aGUgdHJvdWJsZS4gVGhlIHBheW9mZlxyXG4gKiBjb21lcyBpbiB0aGUgd2F5IG9mIGd1YXJhbnRlZXMgdGhhdCBwcm9taXNlIGFuZCBkZWZlcnJlZCBBUElzIG1ha2UsIHNlZVxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2FsL3VuY29tbW9uanMvYmxvYi9tYXN0ZXIvcHJvbWlzZXMvc3BlY2lmaWNhdGlvbi5tZC5cclxuICpcclxuICogQWRkaXRpb25hbGx5IHRoZSBwcm9taXNlIGFwaSBhbGxvd3MgZm9yIGNvbXBvc2l0aW9uIHRoYXQgaXMgdmVyeSBoYXJkIHRvIGRvIHdpdGggdGhlXHJcbiAqIHRyYWRpdGlvbmFsIGNhbGxiYWNrIChbQ1BTXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbnRpbnVhdGlvbi1wYXNzaW5nX3N0eWxlKSkgYXBwcm9hY2guXHJcbiAqIEZvciBtb3JlIG9uIHRoaXMgcGxlYXNlIHNlZSB0aGUgW1EgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9xKSBlc3BlY2lhbGx5IHRoZVxyXG4gKiBzZWN0aW9uIG9uIHNlcmlhbCBvciBwYXJhbGxlbCBqb2luaW5nIG9mIHByb21pc2VzLlxyXG4gKlxyXG4gKiAjIFRoZSBEZWZlcnJlZCBBUElcclxuICpcclxuICogQSBuZXcgaW5zdGFuY2Ugb2YgZGVmZXJyZWQgaXMgY29uc3RydWN0ZWQgYnkgY2FsbGluZyBgJHEuZGVmZXIoKWAuXHJcbiAqXHJcbiAqIFRoZSBwdXJwb3NlIG9mIHRoZSBkZWZlcnJlZCBvYmplY3QgaXMgdG8gZXhwb3NlIHRoZSBhc3NvY2lhdGVkIFByb21pc2UgaW5zdGFuY2UgYXMgd2VsbCBhcyBBUElzXHJcbiAqIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHNpZ25hbGluZyB0aGUgc3VjY2Vzc2Z1bCBvciB1bnN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgYXMgd2VsbCBhcyB0aGUgc3RhdHVzXHJcbiAqIG9mIHRoZSB0YXNrLlxyXG4gKlxyXG4gKiAqKk1ldGhvZHMqKlxyXG4gKlxyXG4gKiAtIGByZXNvbHZlKHZhbHVlKWAg4oCTIHJlc29sdmVzIHRoZSBkZXJpdmVkIHByb21pc2Ugd2l0aCB0aGUgYHZhbHVlYC4gSWYgdGhlIHZhbHVlIGlzIGEgcmVqZWN0aW9uXHJcbiAqICAgY29uc3RydWN0ZWQgdmlhIGAkcS5yZWplY3RgLCB0aGUgcHJvbWlzZSB3aWxsIGJlIHJlamVjdGVkIGluc3RlYWQuXHJcbiAqIC0gYHJlamVjdChyZWFzb24pYCDigJMgcmVqZWN0cyB0aGUgZGVyaXZlZCBwcm9taXNlIHdpdGggdGhlIGByZWFzb25gLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cclxuICogICByZXNvbHZpbmcgaXQgd2l0aCBhIHJlamVjdGlvbiBjb25zdHJ1Y3RlZCB2aWEgYCRxLnJlamVjdGAuXHJcbiAqIC0gYG5vdGlmeSh2YWx1ZSlgIC0gcHJvdmlkZXMgdXBkYXRlcyBvbiB0aGUgc3RhdHVzIG9mIHRoZSBwcm9taXNlJ3MgZXhlY3V0aW9uLiBUaGlzIG1heSBiZSBjYWxsZWRcclxuICogICBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgdGhlIHByb21pc2UgaXMgZWl0aGVyIHJlc29sdmVkIG9yIHJlamVjdGVkLlxyXG4gKlxyXG4gKiAqKlByb3BlcnRpZXMqKlxyXG4gKlxyXG4gKiAtIHByb21pc2Ug4oCTIGB7UHJvbWlzZX1gIOKAkyBwcm9taXNlIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWZlcnJlZC5cclxuICpcclxuICpcclxuICogIyBUaGUgUHJvbWlzZSBBUElcclxuICpcclxuICogQSBuZXcgcHJvbWlzZSBpbnN0YW5jZSBpcyBjcmVhdGVkIHdoZW4gYSBkZWZlcnJlZCBpbnN0YW5jZSBpcyBjcmVhdGVkIGFuZCBjYW4gYmUgcmV0cmlldmVkIGJ5XHJcbiAqIGNhbGxpbmcgYGRlZmVycmVkLnByb21pc2VgLlxyXG4gKlxyXG4gKiBUaGUgcHVycG9zZSBvZiB0aGUgcHJvbWlzZSBvYmplY3QgaXMgdG8gYWxsb3cgZm9yIGludGVyZXN0ZWQgcGFydGllcyB0byBnZXQgYWNjZXNzIHRvIHRoZSByZXN1bHRcclxuICogb2YgdGhlIGRlZmVycmVkIHRhc2sgd2hlbiBpdCBjb21wbGV0ZXMuXHJcbiAqXHJcbiAqICoqTWV0aG9kcyoqXHJcbiAqXHJcbiAqIC0gYHRoZW4oc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBub3RpZnlDYWxsYmFjaylgIOKAkyByZWdhcmRsZXNzIG9mIHdoZW4gdGhlIHByb21pc2Ugd2FzIG9yXHJcbiAqICAgd2lsbCBiZSByZXNvbHZlZCBvciByZWplY3RlZCwgYHRoZW5gIGNhbGxzIG9uZSBvZiB0aGUgc3VjY2VzcyBvciBlcnJvciBjYWxsYmFja3MgYXN5bmNocm9ub3VzbHlcclxuICogICBhcyBzb29uIGFzIHRoZSByZXN1bHQgaXMgYXZhaWxhYmxlLiBUaGUgY2FsbGJhY2tzIGFyZSBjYWxsZWQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudDogdGhlIHJlc3VsdFxyXG4gKiAgIG9yIHJlamVjdGlvbiByZWFzb24uIEFkZGl0aW9uYWxseSwgdGhlIG5vdGlmeSBjYWxsYmFjayBtYXkgYmUgY2FsbGVkIHplcm8gb3IgbW9yZSB0aW1lcyB0b1xyXG4gKiAgIHByb3ZpZGUgYSBwcm9ncmVzcyBpbmRpY2F0aW9uLCBiZWZvcmUgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgb3IgcmVqZWN0ZWQuXHJcbiAqXHJcbiAqICAgVGhpcyBtZXRob2QgKnJldHVybnMgYSBuZXcgcHJvbWlzZSogd2hpY2ggaXMgcmVzb2x2ZWQgb3IgcmVqZWN0ZWQgdmlhIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlXHJcbiAqICAgYHN1Y2Nlc3NDYWxsYmFja2AsIGBlcnJvckNhbGxiYWNrYC4gSXQgYWxzbyBub3RpZmllcyB2aWEgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGVcclxuICogICBgbm90aWZ5Q2FsbGJhY2tgIG1ldGhvZC4gVGhlIHByb21pc2UgY2Fubm90IGJlIHJlc29sdmVkIG9yIHJlamVjdGVkIGZyb20gdGhlIG5vdGlmeUNhbGxiYWNrXHJcbiAqICAgbWV0aG9kLlxyXG4gKlxyXG4gKiAtIGBjYXRjaChlcnJvckNhbGxiYWNrKWAg4oCTIHNob3J0aGFuZCBmb3IgYHByb21pc2UudGhlbihudWxsLCBlcnJvckNhbGxiYWNrKWBcclxuICpcclxuICogLSBgZmluYWxseShjYWxsYmFjaywgbm90aWZ5Q2FsbGJhY2spYCDigJMgYWxsb3dzIHlvdSB0byBvYnNlcnZlIGVpdGhlciB0aGUgZnVsZmlsbG1lbnQgb3IgcmVqZWN0aW9uIG9mIGEgcHJvbWlzZSxcclxuICogICBidXQgdG8gZG8gc28gd2l0aG91dCBtb2RpZnlpbmcgdGhlIGZpbmFsIHZhbHVlLiBUaGlzIGlzIHVzZWZ1bCB0byByZWxlYXNlIHJlc291cmNlcyBvciBkbyBzb21lXHJcbiAqICAgY2xlYW4tdXAgdGhhdCBuZWVkcyB0byBiZSBkb25lIHdoZXRoZXIgdGhlIHByb21pc2Ugd2FzIHJlamVjdGVkIG9yIHJlc29sdmVkLiBTZWUgdGhlIFtmdWxsXHJcbiAqICAgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9xL3dpa2kvQVBJLVJlZmVyZW5jZSNwcm9taXNlZmluYWxseWNhbGxiYWNrKSBmb3JcclxuICogICBtb3JlIGluZm9ybWF0aW9uLlxyXG4gKlxyXG4gKiAjIENoYWluaW5nIHByb21pc2VzXHJcbiAqXHJcbiAqIEJlY2F1c2UgY2FsbGluZyB0aGUgYHRoZW5gIG1ldGhvZCBvZiBhIHByb21pc2UgcmV0dXJucyBhIG5ldyBkZXJpdmVkIHByb21pc2UsIGl0IGlzIGVhc2lseVxyXG4gKiBwb3NzaWJsZSB0byBjcmVhdGUgYSBjaGFpbiBvZiBwcm9taXNlczpcclxuICpcclxuICogYGBganNcclxuICogICBwcm9taXNlQiA9IHByb21pc2VBLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XHJcbiAqICAgICByZXR1cm4gcmVzdWx0ICsgMTtcclxuICogICB9KTtcclxuICpcclxuICogICAvLyBwcm9taXNlQiB3aWxsIGJlIHJlc29sdmVkIGltbWVkaWF0ZWx5IGFmdGVyIHByb21pc2VBIGlzIHJlc29sdmVkIGFuZCBpdHMgdmFsdWVcclxuICogICAvLyB3aWxsIGJlIHRoZSByZXN1bHQgb2YgcHJvbWlzZUEgaW5jcmVtZW50ZWQgYnkgMVxyXG4gKiBgYGBcclxuICpcclxuICogSXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIGNoYWlucyBvZiBhbnkgbGVuZ3RoIGFuZCBzaW5jZSBhIHByb21pc2UgY2FuIGJlIHJlc29sdmVkIHdpdGggYW5vdGhlclxyXG4gKiBwcm9taXNlICh3aGljaCB3aWxsIGRlZmVyIGl0cyByZXNvbHV0aW9uIGZ1cnRoZXIpLCBpdCBpcyBwb3NzaWJsZSB0byBwYXVzZS9kZWZlciByZXNvbHV0aW9uIG9mXHJcbiAqIHRoZSBwcm9taXNlcyBhdCBhbnkgcG9pbnQgaW4gdGhlIGNoYWluLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCBwb3dlcmZ1bCBBUElzIGxpa2VcclxuICogJGh0dHAncyByZXNwb25zZSBpbnRlcmNlcHRvcnMuXHJcbiAqXHJcbiAqXHJcbiAqICMgRGlmZmVyZW5jZXMgYmV0d2VlbiBLcmlzIEtvd2FsJ3MgUSBhbmQgJHFcclxuICpcclxuICogIFRoZXJlIGFyZSB0d28gbWFpbiBkaWZmZXJlbmNlczpcclxuICpcclxuICogLSAkcSBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlfSBTY29wZSBtb2RlbCBvYnNlcnZhdGlvblxyXG4gKiAgIG1lY2hhbmlzbSBpbiBhbmd1bGFyLCB3aGljaCBtZWFucyBmYXN0ZXIgcHJvcGFnYXRpb24gb2YgcmVzb2x1dGlvbiBvciByZWplY3Rpb24gaW50byB5b3VyXHJcbiAqICAgbW9kZWxzIGFuZCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBicm93c2VyIHJlcGFpbnRzLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gZmxpY2tlcmluZyBVSS5cclxuICogLSBRIGhhcyBtYW55IG1vcmUgZmVhdHVyZXMgdGhhbiAkcSwgYnV0IHRoYXQgY29tZXMgYXQgYSBjb3N0IG9mIGJ5dGVzLiAkcSBpcyB0aW55LCBidXQgY29udGFpbnNcclxuICogICBhbGwgdGhlIGltcG9ydGFudCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgY29tbW9uIGFzeW5jIHRhc2tzLlxyXG4gKlxyXG4gKiAgIyBUZXN0aW5nXHJcbiAqXHJcbiAqICBgYGBqc1xyXG4gKiAgICBpdCgnc2hvdWxkIHNpbXVsYXRlIHByb21pc2UnLCBpbmplY3QoZnVuY3Rpb24oJHEsICRyb290U2NvcGUpIHtcclxuICogICAgICB2YXIgZGVmZXJyZWQgPSAkcS5kZWZlcigpO1xyXG4gKiAgICAgIHZhciBwcm9taXNlID0gZGVmZXJyZWQucHJvbWlzZTtcclxuICogICAgICB2YXIgcmVzb2x2ZWRWYWx1ZTtcclxuICpcclxuICogICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpIHsgcmVzb2x2ZWRWYWx1ZSA9IHZhbHVlOyB9KTtcclxuICogICAgICBleHBlY3QocmVzb2x2ZWRWYWx1ZSkudG9CZVVuZGVmaW5lZCgpO1xyXG4gKlxyXG4gKiAgICAgIC8vIFNpbXVsYXRlIHJlc29sdmluZyBvZiBwcm9taXNlXHJcbiAqICAgICAgZGVmZXJyZWQucmVzb2x2ZSgxMjMpO1xyXG4gKiAgICAgIC8vIE5vdGUgdGhhdCB0aGUgJ3RoZW4nIGZ1bmN0aW9uIGRvZXMgbm90IGdldCBjYWxsZWQgc3luY2hyb25vdXNseS5cclxuICogICAgICAvLyBUaGlzIGlzIGJlY2F1c2Ugd2Ugd2FudCB0aGUgcHJvbWlzZSBBUEkgdG8gYWx3YXlzIGJlIGFzeW5jLCB3aGV0aGVyIG9yIG5vdFxyXG4gKiAgICAgIC8vIGl0IGdvdCBjYWxsZWQgc3luY2hyb25vdXNseSBvciBhc3luY2hyb25vdXNseS5cclxuICogICAgICBleHBlY3QocmVzb2x2ZWRWYWx1ZSkudG9CZVVuZGVmaW5lZCgpO1xyXG4gKlxyXG4gKiAgICAgIC8vIFByb3BhZ2F0ZSBwcm9taXNlIHJlc29sdXRpb24gdG8gJ3RoZW4nIGZ1bmN0aW9ucyB1c2luZyAkYXBwbHkoKS5cclxuICogICAgICAkcm9vdFNjb3BlLiRhcHBseSgpO1xyXG4gKiAgICAgIGV4cGVjdChyZXNvbHZlZFZhbHVlKS50b0VxdWFsKDEyMyk7XHJcbiAqICAgIH0pKTtcclxuICogIGBgYFxyXG4gKlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKGZ1bmN0aW9uLCBmdW5jdGlvbil9IHJlc29sdmVyIEZ1bmN0aW9uIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciByZXNvbHZpbmcgb3JcclxuICogICByZWplY3RpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgcHJvbWlzZS4gVGhlIGZpcnN0IHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9uIHdoaWNoIHJlc29sdmVzIHRoZVxyXG4gKiAgIHByb21pc2UsIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24gd2hpY2ggcmVqZWN0cyB0aGUgcHJvbWlzZS5cclxuICpcclxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBuZXdseSBjcmVhdGVkIHByb21pc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiAkUVByb3ZpZGVyKCkge1xyXG5cclxuICB0aGlzLiRnZXQgPSBbJyRyb290U2NvcGUnLCAnJGV4Y2VwdGlvbkhhbmRsZXInLCBmdW5jdGlvbigkcm9vdFNjb3BlLCAkZXhjZXB0aW9uSGFuZGxlcikge1xyXG4gICAgcmV0dXJuIHFGYWN0b3J5KGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgICRyb290U2NvcGUuJGV2YWxBc3luYyhjYWxsYmFjayk7XHJcbiAgICB9LCAkZXhjZXB0aW9uSGFuZGxlcik7XHJcbiAgfV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uICQkUVByb3ZpZGVyKCkge1xyXG4gIHRoaXMuJGdldCA9IFsnJGJyb3dzZXInLCAnJGV4Y2VwdGlvbkhhbmRsZXInLCBmdW5jdGlvbigkYnJvd3NlciwgJGV4Y2VwdGlvbkhhbmRsZXIpIHtcclxuICAgIHJldHVybiBxRmFjdG9yeShmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgICAkYnJvd3Nlci5kZWZlcihjYWxsYmFjayk7XHJcbiAgICB9LCAkZXhjZXB0aW9uSGFuZGxlcik7XHJcbiAgfV07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb25zdHJ1Y3RzIGEgcHJvbWlzZSBtYW5hZ2VyLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKGZ1bmN0aW9uKX0gbmV4dFRpY2sgRnVuY3Rpb24gZm9yIGV4ZWN1dGluZyBmdW5jdGlvbnMgaW4gdGhlIG5leHQgdHVybi5cclxuICogQHBhcmFtIHtmdW5jdGlvbiguLi4qKX0gZXhjZXB0aW9uSGFuZGxlciBGdW5jdGlvbiBpbnRvIHdoaWNoIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBhcmUgcGFzc2VkIGZvclxyXG4gKiAgICAgZGVidWdnaW5nIHB1cnBvc2VzLlxyXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBQcm9taXNlIG1hbmFnZXIuXHJcbiAqL1xyXG5mdW5jdGlvbiBxRmFjdG9yeShuZXh0VGljaywgZXhjZXB0aW9uSGFuZGxlcikge1xyXG4gIHZhciAkcU1pbkVyciA9IG1pbkVycignJHEnLCBUeXBlRXJyb3IpO1xyXG4gIGZ1bmN0aW9uIGNhbGxPbmNlKHNlbGYsIHJlc29sdmVGbiwgcmVqZWN0Rm4pIHtcclxuICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcclxuICAgIGZ1bmN0aW9uIHdyYXAoZm4pIHtcclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKGNhbGxlZCkgcmV0dXJuO1xyXG4gICAgICAgIGNhbGxlZCA9IHRydWU7XHJcbiAgICAgICAgZm4uY2FsbChzZWxmLCB2YWx1ZSk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFt3cmFwKHJlc29sdmVGbiksIHdyYXAocmVqZWN0Rm4pXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSBuZy4kcSNkZWZlclxyXG4gICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBDcmVhdGVzIGEgYERlZmVycmVkYCBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyBhIHRhc2sgd2hpY2ggd2lsbCBmaW5pc2ggaW4gdGhlIGZ1dHVyZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiBkZWZlcnJlZC5cclxuICAgKi9cclxuICB2YXIgZGVmZXIgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiBuZXcgRGVmZXJyZWQoKTtcclxuICB9O1xyXG5cclxuICBmdW5jdGlvbiBQcm9taXNlKCkge1xyXG4gICAgdGhpcy4kJHN0YXRlID0geyBzdGF0dXM6IDAgfTtcclxuICB9XHJcblxyXG4gIFByb21pc2UucHJvdG90eXBlID0ge1xyXG4gICAgdGhlbjogZnVuY3Rpb24ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb2dyZXNzQmFjaykge1xyXG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IERlZmVycmVkKCk7XHJcblxyXG4gICAgICB0aGlzLiQkc3RhdGUucGVuZGluZyA9IHRoaXMuJCRzdGF0ZS5wZW5kaW5nIHx8IFtdO1xyXG4gICAgICB0aGlzLiQkc3RhdGUucGVuZGluZy5wdXNoKFtyZXN1bHQsIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9ncmVzc0JhY2tdKTtcclxuICAgICAgaWYgKHRoaXMuJCRzdGF0ZS5zdGF0dXMgPiAwKSBzY2hlZHVsZVByb2Nlc3NRdWV1ZSh0aGlzLiQkc3RhdGUpO1xyXG5cclxuICAgICAgcmV0dXJuIHJlc3VsdC5wcm9taXNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgY2FsbGJhY2spO1xyXG4gICAgfSxcclxuXHJcbiAgICBcImZpbmFsbHlcIjogZnVuY3Rpb24oY2FsbGJhY2ssIHByb2dyZXNzQmFjaykge1xyXG4gICAgICByZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIGhhbmRsZUNhbGxiYWNrKHZhbHVlLCB0cnVlLCBjYWxsYmFjayk7XHJcbiAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGhhbmRsZUNhbGxiYWNrKGVycm9yLCBmYWxzZSwgY2FsbGJhY2spO1xyXG4gICAgICB9LCBwcm9ncmVzc0JhY2spO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8vRmFzdGVyLCBtb3JlIGJhc2ljIHRoYW4gYW5ndWxhci5iaW5kIGh0dHA6Ly9qc3BlcmYuY29tL2FuZ3VsYXItYmluZC12cy1jdXN0b20tdnMtbmF0aXZlXHJcbiAgZnVuY3Rpb24gc2ltcGxlQmluZChjb250ZXh0LCBmbikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgIGZuLmNhbGwoY29udGV4dCwgdmFsdWUpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHByb2Nlc3NRdWV1ZShzdGF0ZSkge1xyXG4gICAgdmFyIGZuLCBwcm9taXNlLCBwZW5kaW5nO1xyXG5cclxuICAgIHBlbmRpbmcgPSBzdGF0ZS5wZW5kaW5nO1xyXG4gICAgc3RhdGUucHJvY2Vzc1NjaGVkdWxlZCA9IGZhbHNlO1xyXG4gICAgc3RhdGUucGVuZGluZyA9IHVuZGVmaW5lZDtcclxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHBlbmRpbmcubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICBwcm9taXNlID0gcGVuZGluZ1tpXVswXTtcclxuICAgICAgZm4gPSBwZW5kaW5nW2ldW3N0YXRlLnN0YXR1c107XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZm4pKSB7XHJcbiAgICAgICAgICBwcm9taXNlLnJlc29sdmUoZm4oc3RhdGUudmFsdWUpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnN0YXR1cyA9PT0gMSkge1xyXG4gICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKHN0YXRlLnZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcHJvbWlzZS5yZWplY3Qoc3RhdGUudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIGV4Y2VwdGlvbkhhbmRsZXIoZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNjaGVkdWxlUHJvY2Vzc1F1ZXVlKHN0YXRlKSB7XHJcbiAgICBpZiAoc3RhdGUucHJvY2Vzc1NjaGVkdWxlZCB8fCAhc3RhdGUucGVuZGluZykgcmV0dXJuO1xyXG4gICAgc3RhdGUucHJvY2Vzc1NjaGVkdWxlZCA9IHRydWU7XHJcbiAgICBuZXh0VGljayhmdW5jdGlvbigpIHsgcHJvY2Vzc1F1ZXVlKHN0YXRlKTsgfSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBEZWZlcnJlZCgpIHtcclxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKCk7XHJcbiAgICAvL05lY2Vzc2FyeSB0byBzdXBwb3J0IHVuYm91bmQgZXhlY3V0aW9uIDovXHJcbiAgICB0aGlzLnJlc29sdmUgPSBzaW1wbGVCaW5kKHRoaXMsIHRoaXMucmVzb2x2ZSk7XHJcbiAgICB0aGlzLnJlamVjdCA9IHNpbXBsZUJpbmQodGhpcywgdGhpcy5yZWplY3QpO1xyXG4gICAgdGhpcy5ub3RpZnkgPSBzaW1wbGVCaW5kKHRoaXMsIHRoaXMubm90aWZ5KTtcclxuICB9XHJcblxyXG4gIERlZmVycmVkLnByb3RvdHlwZSA9IHtcclxuICAgIHJlc29sdmU6IGZ1bmN0aW9uKHZhbCkge1xyXG4gICAgICBpZiAodGhpcy5wcm9taXNlLiQkc3RhdGUuc3RhdHVzKSByZXR1cm47XHJcbiAgICAgIGlmICh2YWwgPT09IHRoaXMucHJvbWlzZSkge1xyXG4gICAgICAgIHRoaXMuJCRyZWplY3QoJHFNaW5FcnIoXHJcbiAgICAgICAgICAncWN5Y2xlJyxcclxuICAgICAgICAgIFwiRXhwZWN0ZWQgcHJvbWlzZSB0byBiZSByZXNvbHZlZCB3aXRoIHZhbHVlIG90aGVyIHRoYW4gaXRzZWxmICd7MH0nXCIsXHJcbiAgICAgICAgICB2YWwpKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLiQkcmVzb2x2ZSh2YWwpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAkJHJlc29sdmU6IGZ1bmN0aW9uKHZhbCkge1xyXG4gICAgICB2YXIgdGhlbiwgZm5zO1xyXG5cclxuICAgICAgZm5zID0gY2FsbE9uY2UodGhpcywgdGhpcy4kJHJlc29sdmUsIHRoaXMuJCRyZWplY3QpO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmICgoaXNPYmplY3QodmFsKSB8fCBpc0Z1bmN0aW9uKHZhbCkpKSB0aGVuID0gdmFsICYmIHZhbC50aGVuO1xyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoZW4pKSB7XHJcbiAgICAgICAgICB0aGlzLnByb21pc2UuJCRzdGF0ZS5zdGF0dXMgPSAtMTtcclxuICAgICAgICAgIHRoZW4uY2FsbCh2YWwsIGZuc1swXSwgZm5zWzFdLCB0aGlzLm5vdGlmeSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucHJvbWlzZS4kJHN0YXRlLnZhbHVlID0gdmFsO1xyXG4gICAgICAgICAgdGhpcy5wcm9taXNlLiQkc3RhdGUuc3RhdHVzID0gMTtcclxuICAgICAgICAgIHNjaGVkdWxlUHJvY2Vzc1F1ZXVlKHRoaXMucHJvbWlzZS4kJHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBmbnNbMV0oZSk7XHJcbiAgICAgICAgZXhjZXB0aW9uSGFuZGxlcihlKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICByZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbikge1xyXG4gICAgICBpZiAodGhpcy5wcm9taXNlLiQkc3RhdGUuc3RhdHVzKSByZXR1cm47XHJcbiAgICAgIHRoaXMuJCRyZWplY3QocmVhc29uKTtcclxuICAgIH0sXHJcblxyXG4gICAgJCRyZWplY3Q6IGZ1bmN0aW9uKHJlYXNvbikge1xyXG4gICAgICB0aGlzLnByb21pc2UuJCRzdGF0ZS52YWx1ZSA9IHJlYXNvbjtcclxuICAgICAgdGhpcy5wcm9taXNlLiQkc3RhdGUuc3RhdHVzID0gMjtcclxuICAgICAgc2NoZWR1bGVQcm9jZXNzUXVldWUodGhpcy5wcm9taXNlLiQkc3RhdGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBub3RpZnk6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XHJcbiAgICAgIHZhciBjYWxsYmFja3MgPSB0aGlzLnByb21pc2UuJCRzdGF0ZS5wZW5kaW5nO1xyXG5cclxuICAgICAgaWYgKCh0aGlzLnByb21pc2UuJCRzdGF0ZS5zdGF0dXMgPD0gMCkgJiYgY2FsbGJhY2tzICYmIGNhbGxiYWNrcy5sZW5ndGgpIHtcclxuICAgICAgICBuZXh0VGljayhmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHZhciBjYWxsYmFjaywgcmVzdWx0O1xyXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gY2FsbGJhY2tzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2tzW2ldWzBdO1xyXG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrc1tpXVszXTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICByZXN1bHQubm90aWZ5KGlzRnVuY3Rpb24oY2FsbGJhY2spID8gY2FsbGJhY2socHJvZ3Jlc3MpIDogcHJvZ3Jlc3MpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lICRxI3JlamVjdFxyXG4gICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBDcmVhdGVzIGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIGFzIHJlamVjdGVkIHdpdGggdGhlIHNwZWNpZmllZCBgcmVhc29uYC4gVGhpcyBhcGkgc2hvdWxkIGJlXHJcbiAgICogdXNlZCB0byBmb3J3YXJkIHJlamVjdGlvbiBpbiBhIGNoYWluIG9mIHByb21pc2VzLiBJZiB5b3UgYXJlIGRlYWxpbmcgd2l0aCB0aGUgbGFzdCBwcm9taXNlIGluXHJcbiAgICogYSBwcm9taXNlIGNoYWluLCB5b3UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdC5cclxuICAgKlxyXG4gICAqIFdoZW4gY29tcGFyaW5nIGRlZmVycmVkcy9wcm9taXNlcyB0byB0aGUgZmFtaWxpYXIgYmVoYXZpb3Igb2YgdHJ5L2NhdGNoL3Rocm93LCB0aGluayBvZlxyXG4gICAqIGByZWplY3RgIGFzIHRoZSBgdGhyb3dgIGtleXdvcmQgaW4gSmF2YVNjcmlwdC4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgaWYgeW91IFwiY2F0Y2hcIiBhbiBlcnJvciB2aWFcclxuICAgKiBhIHByb21pc2UgZXJyb3IgY2FsbGJhY2sgYW5kIHlvdSB3YW50IHRvIGZvcndhcmQgdGhlIGVycm9yIHRvIHRoZSBwcm9taXNlIGRlcml2ZWQgZnJvbSB0aGVcclxuICAgKiBjdXJyZW50IHByb21pc2UsIHlvdSBoYXZlIHRvIFwicmV0aHJvd1wiIHRoZSBlcnJvciBieSByZXR1cm5pbmcgYSByZWplY3Rpb24gY29uc3RydWN0ZWQgdmlhXHJcbiAgICogYHJlamVjdGAuXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqICAgcHJvbWlzZUIgPSBwcm9taXNlQS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xyXG4gICAqICAgICAvLyBzdWNjZXNzOiBkbyBzb21ldGhpbmcgYW5kIHJlc29sdmUgcHJvbWlzZUJcclxuICAgKiAgICAgLy8gICAgICAgICAgd2l0aCB0aGUgb2xkIG9yIGEgbmV3IHJlc3VsdFxyXG4gICAqICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAqICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XHJcbiAgICogICAgIC8vIGVycm9yOiBoYW5kbGUgdGhlIGVycm9yIGlmIHBvc3NpYmxlIGFuZFxyXG4gICAqICAgICAvLyAgICAgICAgcmVzb2x2ZSBwcm9taXNlQiB3aXRoIG5ld1Byb21pc2VPclZhbHVlLFxyXG4gICAqICAgICAvLyAgICAgICAgb3RoZXJ3aXNlIGZvcndhcmQgdGhlIHJlamVjdGlvbiB0byBwcm9taXNlQlxyXG4gICAqICAgICBpZiAoY2FuSGFuZGxlKHJlYXNvbikpIHtcclxuICAgKiAgICAgIC8vIGhhbmRsZSB0aGUgZXJyb3IgYW5kIHJlY292ZXJcclxuICAgKiAgICAgIHJldHVybiBuZXdQcm9taXNlT3JWYWx1ZTtcclxuICAgKiAgICAgfVxyXG4gICAqICAgICByZXR1cm4gJHEucmVqZWN0KHJlYXNvbik7XHJcbiAgICogICB9KTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Kn0gcmVhc29uIENvbnN0YW50LCBtZXNzYWdlLCBleGNlcHRpb24gb3IgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVqZWN0aW9uIHJlYXNvbi5cclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmV0dXJucyBhIHByb21pc2UgdGhhdCB3YXMgYWxyZWFkeSByZXNvbHZlZCBhcyByZWplY3RlZCB3aXRoIHRoZSBgcmVhc29uYC5cclxuICAgKi9cclxuICB2YXIgcmVqZWN0ID0gZnVuY3Rpb24ocmVhc29uKSB7XHJcbiAgICB2YXIgcmVzdWx0ID0gbmV3IERlZmVycmVkKCk7XHJcbiAgICByZXN1bHQucmVqZWN0KHJlYXNvbik7XHJcbiAgICByZXR1cm4gcmVzdWx0LnByb21pc2U7XHJcbiAgfTtcclxuXHJcbiAgdmFyIG1ha2VQcm9taXNlID0gZnVuY3Rpb24gbWFrZVByb21pc2UodmFsdWUsIHJlc29sdmVkKSB7XHJcbiAgICB2YXIgcmVzdWx0ID0gbmV3IERlZmVycmVkKCk7XHJcbiAgICBpZiAocmVzb2x2ZWQpIHtcclxuICAgICAgcmVzdWx0LnJlc29sdmUodmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzdWx0LnJlamVjdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0LnByb21pc2U7XHJcbiAgfTtcclxuXHJcbiAgdmFyIGhhbmRsZUNhbGxiYWNrID0gZnVuY3Rpb24gaGFuZGxlQ2FsbGJhY2sodmFsdWUsIGlzUmVzb2x2ZWQsIGNhbGxiYWNrKSB7XHJcbiAgICB2YXIgY2FsbGJhY2tPdXRwdXQgPSBudWxsO1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSBjYWxsYmFja091dHB1dCA9IGNhbGxiYWNrKCk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHJldHVybiBtYWtlUHJvbWlzZShlLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNQcm9taXNlTGlrZShjYWxsYmFja091dHB1dCkpIHtcclxuICAgICAgcmV0dXJuIGNhbGxiYWNrT3V0cHV0LnRoZW4oZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG1ha2VQcm9taXNlKHZhbHVlLCBpc1Jlc29sdmVkKTtcclxuICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHtcclxuICAgICAgICByZXR1cm4gbWFrZVByb21pc2UoZXJyb3IsIGZhbHNlKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbWFrZVByb21pc2UodmFsdWUsIGlzUmVzb2x2ZWQpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSAkcSN3aGVuXHJcbiAgICogQGtpbmQgZnVuY3Rpb25cclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIFdyYXBzIGFuIG9iamVjdCB0aGF0IG1pZ2h0IGJlIGEgdmFsdWUgb3IgYSAoM3JkIHBhcnR5KSB0aGVuLWFibGUgcHJvbWlzZSBpbnRvIGEgJHEgcHJvbWlzZS5cclxuICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBhcmUgZGVhbGluZyB3aXRoIGFuIG9iamVjdCB0aGF0IG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSBhIHByb21pc2UsIG9yIGlmXHJcbiAgICogdGhlIHByb21pc2UgY29tZXMgZnJvbSBhIHNvdXJjZSB0aGF0IGNhbid0IGJlIHRydXN0ZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIG9yIGEgcHJvbWlzZVxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXR1cm5zIGEgcHJvbWlzZSBvZiB0aGUgcGFzc2VkIHZhbHVlIG9yIHByb21pc2VcclxuICAgKi9cclxuXHJcblxyXG4gIHZhciB3aGVuID0gZnVuY3Rpb24odmFsdWUsIGNhbGxiYWNrLCBlcnJiYWNrLCBwcm9ncmVzc0JhY2spIHtcclxuICAgIHZhciByZXN1bHQgPSBuZXcgRGVmZXJyZWQoKTtcclxuICAgIHJlc3VsdC5yZXNvbHZlKHZhbHVlKTtcclxuICAgIHJldHVybiByZXN1bHQucHJvbWlzZS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrLCBwcm9ncmVzc0JhY2spO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSAkcSNhbGxcclxuICAgKiBAa2luZCBmdW5jdGlvblxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogQ29tYmluZXMgbXVsdGlwbGUgcHJvbWlzZXMgaW50byBhIHNpbmdsZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiBhbGwgb2YgdGhlIGlucHV0XHJcbiAgICogcHJvbWlzZXMgYXJlIHJlc29sdmVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheS48UHJvbWlzZT58T2JqZWN0LjxQcm9taXNlPn0gcHJvbWlzZXMgQW4gYXJyYXkgb3IgaGFzaCBvZiBwcm9taXNlcy5cclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmV0dXJucyBhIHNpbmdsZSBwcm9taXNlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCB3aXRoIGFuIGFycmF5L2hhc2ggb2YgdmFsdWVzLFxyXG4gICAqICAgZWFjaCB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9taXNlIGF0IHRoZSBzYW1lIGluZGV4L2tleSBpbiB0aGUgYHByb21pc2VzYCBhcnJheS9oYXNoLlxyXG4gICAqICAgSWYgYW55IG9mIHRoZSBwcm9taXNlcyBpcyByZXNvbHZlZCB3aXRoIGEgcmVqZWN0aW9uLCB0aGlzIHJlc3VsdGluZyBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWRcclxuICAgKiAgIHdpdGggdGhlIHNhbWUgcmVqZWN0aW9uIHZhbHVlLlxyXG4gICAqL1xyXG5cclxuICBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcclxuICAgIHZhciBkZWZlcnJlZCA9IG5ldyBEZWZlcnJlZCgpLFxyXG4gICAgICAgIGNvdW50ZXIgPSAwLFxyXG4gICAgICAgIHJlc3VsdHMgPSBpc0FycmF5KHByb21pc2VzKSA/IFtdIDoge307XHJcblxyXG4gICAgZm9yRWFjaChwcm9taXNlcywgZnVuY3Rpb24ocHJvbWlzZSwga2V5KSB7XHJcbiAgICAgIGNvdW50ZXIrKztcclxuICAgICAgd2hlbihwcm9taXNlKS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdHMuaGFzT3duUHJvcGVydHkoa2V5KSkgcmV0dXJuO1xyXG4gICAgICAgIHJlc3VsdHNba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGlmICghKC0tY291bnRlcikpIGRlZmVycmVkLnJlc29sdmUocmVzdWx0cyk7XHJcbiAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xyXG4gICAgICAgIGlmIChyZXN1bHRzLmhhc093blByb3BlcnR5KGtleSkpIHJldHVybjtcclxuICAgICAgICBkZWZlcnJlZC5yZWplY3QocmVhc29uKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoY291bnRlciA9PT0gMCkge1xyXG4gICAgICBkZWZlcnJlZC5yZXNvbHZlKHJlc3VsdHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgdmFyICRRID0gZnVuY3Rpb24gUShyZXNvbHZlcikge1xyXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHJlc29sdmVyKSkge1xyXG4gICAgICB0aHJvdyAkcU1pbkVycignbm9yc2x2cicsIFwiRXhwZWN0ZWQgcmVzb2x2ZXJGbiwgZ290ICd7MH0nXCIsIHJlc29sdmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUSkpIHtcclxuICAgICAgLy8gTW9yZSB1c2VmdWwgd2hlbiAkUSBpcyB0aGUgUHJvbWlzZSBpdHNlbGYuXHJcbiAgICAgIHJldHVybiBuZXcgUShyZXNvbHZlcik7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XHJcblxyXG4gICAgZnVuY3Rpb24gcmVzb2x2ZUZuKHZhbHVlKSB7XHJcbiAgICAgIGRlZmVycmVkLnJlc29sdmUodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlamVjdEZuKHJlYXNvbikge1xyXG4gICAgICBkZWZlcnJlZC5yZWplY3QocmVhc29uKTtcclxuICAgIH1cclxuXHJcbiAgICByZXNvbHZlcihyZXNvbHZlRm4sIHJlamVjdEZuKTtcclxuXHJcbiAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTtcclxuICB9O1xyXG5cclxuICAkUS5kZWZlciA9IGRlZmVyO1xyXG4gICRRLnJlamVjdCA9IHJlamVjdDtcclxuICAkUS53aGVuID0gd2hlbjtcclxuICAkUS5hbGwgPSBhbGw7XHJcblxyXG4gIHJldHVybiAkUTtcclxufVxyXG5cclxuZnVuY3Rpb24gJCRSQUZQcm92aWRlcigpIHsgLy9yQUZcclxuICB0aGlzLiRnZXQgPSBbJyR3aW5kb3cnLCAnJHRpbWVvdXQnLCBmdW5jdGlvbigkd2luZG93LCAkdGltZW91dCkge1xyXG4gICAgdmFyIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9ICR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZTtcclxuXHJcbiAgICB2YXIgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSAkd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2luZG93LndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2luZG93Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2luZG93LndlYmtpdENhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZTtcclxuXHJcbiAgICB2YXIgcmFmU3VwcG9ydGVkID0gISFyZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XHJcbiAgICB2YXIgcmFmID0gcmFmU3VwcG9ydGVkXHJcbiAgICAgID8gZnVuY3Rpb24oZm4pIHtcclxuICAgICAgICAgIHZhciBpZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShmbik7XHJcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICA6IGZ1bmN0aW9uKGZuKSB7XHJcbiAgICAgICAgICB2YXIgdGltZXIgPSAkdGltZW91dChmbiwgMTYuNjYsIGZhbHNlKTsgLy8gMTAwMCAvIDYwID0gMTYuNjY2XHJcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICR0aW1lb3V0LmNhbmNlbCh0aW1lcik7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgcmFmLnN1cHBvcnRlZCA9IHJhZlN1cHBvcnRlZDtcclxuXHJcbiAgICByZXR1cm4gcmFmO1xyXG4gIH1dO1xyXG59XHJcblxyXG4vKipcclxuICogREVTSUdOIE5PVEVTXHJcbiAqXHJcbiAqIFRoZSBkZXNpZ24gZGVjaXNpb25zIGJlaGluZCB0aGUgc2NvcGUgYXJlIGhlYXZpbHkgZmF2b3JlZCBmb3Igc3BlZWQgYW5kIG1lbW9yeSBjb25zdW1wdGlvbi5cclxuICpcclxuICogVGhlIHR5cGljYWwgdXNlIG9mIHNjb3BlIGlzIHRvIHdhdGNoIHRoZSBleHByZXNzaW9ucywgd2hpY2ggbW9zdCBvZiB0aGUgdGltZSByZXR1cm4gdGhlIHNhbWVcclxuICogdmFsdWUgYXMgbGFzdCB0aW1lIHNvIHdlIG9wdGltaXplIHRoZSBvcGVyYXRpb24uXHJcbiAqXHJcbiAqIENsb3N1cmVzIGNvbnN0cnVjdGlvbiBpcyBleHBlbnNpdmUgaW4gdGVybXMgb2Ygc3BlZWQgYXMgd2VsbCBhcyBtZW1vcnk6XHJcbiAqICAgLSBObyBjbG9zdXJlcywgaW5zdGVhZCB1c2UgcHJvdG90eXBpY2FsIGluaGVyaXRhbmNlIGZvciBBUElcclxuICogICAtIEludGVybmFsIHN0YXRlIG5lZWRzIHRvIGJlIHN0b3JlZCBvbiBzY29wZSBkaXJlY3RseSwgd2hpY2ggbWVhbnMgdGhhdCBwcml2YXRlIHN0YXRlIGlzXHJcbiAqICAgICBleHBvc2VkIGFzICQkX19fXyBwcm9wZXJ0aWVzXHJcbiAqXHJcbiAqIExvb3Agb3BlcmF0aW9ucyBhcmUgb3B0aW1pemVkIGJ5IHVzaW5nIHdoaWxlKGNvdW50LS0pIHsgLi4uIH1cclxuICogICAtIHRoaXMgbWVhbnMgdGhhdCBpbiBvcmRlciB0byBrZWVwIHRoZSBzYW1lIG9yZGVyIG9mIGV4ZWN1dGlvbiBhcyBhZGRpdGlvbiB3ZSBoYXZlIHRvIGFkZFxyXG4gKiAgICAgaXRlbXMgdG8gdGhlIGFycmF5IGF0IHRoZSBiZWdpbm5pbmcgKHVuc2hpZnQpIGluc3RlYWQgb2YgYXQgdGhlIGVuZCAocHVzaClcclxuICpcclxuICogQ2hpbGQgc2NvcGVzIGFyZSBjcmVhdGVkIGFuZCByZW1vdmVkIG9mdGVuXHJcbiAqICAgLSBVc2luZyBhbiBhcnJheSB3b3VsZCBiZSBzbG93IHNpbmNlIGluc2VydHMgaW4gbWlkZGxlIGFyZSBleHBlbnNpdmUgc28gd2UgdXNlIGxpbmtlZCBsaXN0XHJcbiAqXHJcbiAqIFRoZXJlIGFyZSBmZXcgd2F0Y2hlcyB0aGVuIGEgbG90IG9mIG9ic2VydmVycy4gVGhpcyBpcyB3aHkgeW91IGRvbid0IHdhbnQgdGhlIG9ic2VydmVyIHRvIGJlXHJcbiAqIGltcGxlbWVudGVkIGluIHRoZSBzYW1lIHdheSBhcyB3YXRjaC4gV2F0Y2ggcmVxdWlyZXMgcmV0dXJuIG9mIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHdoaWNoXHJcbiAqIGFyZSBleHBlbnNpdmUgdG8gY29uc3RydWN0LlxyXG4gKi9cclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIHByb3ZpZGVyXHJcbiAqIEBuYW1lICRyb290U2NvcGVQcm92aWRlclxyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogUHJvdmlkZXIgZm9yIHRoZSAkcm9vdFNjb3BlIHNlcnZpY2UuXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBtZXRob2RcclxuICogQG5hbWUgJHJvb3RTY29wZVByb3ZpZGVyI2RpZ2VzdFR0bFxyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogU2V0cyB0aGUgbnVtYmVyIG9mIGAkZGlnZXN0YCBpdGVyYXRpb25zIHRoZSBzY29wZSBzaG91bGQgYXR0ZW1wdCB0byBleGVjdXRlIGJlZm9yZSBnaXZpbmcgdXAgYW5kXHJcbiAqIGFzc3VtaW5nIHRoYXQgdGhlIG1vZGVsIGlzIHVuc3RhYmxlLlxyXG4gKlxyXG4gKiBUaGUgY3VycmVudCBkZWZhdWx0IGlzIDEwIGl0ZXJhdGlvbnMuXHJcbiAqXHJcbiAqIEluIGNvbXBsZXggYXBwbGljYXRpb25zIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gYCR3YXRjaGBzIHdpbGwgcmVzdWx0IGluXHJcbiAqIHNldmVyYWwgZGlnZXN0IGl0ZXJhdGlvbnMuIEhvd2V2ZXIgaWYgYW4gYXBwbGljYXRpb24gbmVlZHMgbW9yZSB0aGFuIHRoZSBkZWZhdWx0IDEwIGRpZ2VzdFxyXG4gKiBpdGVyYXRpb25zIGZvciBpdHMgbW9kZWwgdG8gc3RhYmlsaXplIHRoZW4geW91IHNob3VsZCBpbnZlc3RpZ2F0ZSB3aGF0IGlzIGNhdXNpbmcgdGhlIG1vZGVsIHRvXHJcbiAqIGNvbnRpbnVvdXNseSBjaGFuZ2UgZHVyaW5nIHRoZSBkaWdlc3QuXHJcbiAqXHJcbiAqIEluY3JlYXNpbmcgdGhlIFRUTCBjb3VsZCBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgc28geW91IHNob3VsZCBub3QgY2hhbmdlIGl0IHdpdGhvdXRcclxuICogcHJvcGVyIGp1c3RpZmljYXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCBUaGUgbnVtYmVyIG9mIGRpZ2VzdCBpdGVyYXRpb25zLlxyXG4gKi9cclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIHNlcnZpY2VcclxuICogQG5hbWUgJHJvb3RTY29wZVxyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogRXZlcnkgYXBwbGljYXRpb24gaGFzIGEgc2luZ2xlIHJvb3Qge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUgc2NvcGV9LlxyXG4gKiBBbGwgb3RoZXIgc2NvcGVzIGFyZSBkZXNjZW5kYW50IHNjb3BlcyBvZiB0aGUgcm9vdCBzY29wZS4gU2NvcGVzIHByb3ZpZGUgc2VwYXJhdGlvblxyXG4gKiBiZXR3ZWVuIHRoZSBtb2RlbCBhbmQgdGhlIHZpZXcsIHZpYSBhIG1lY2hhbmlzbSBmb3Igd2F0Y2hpbmcgdGhlIG1vZGVsIGZvciBjaGFuZ2VzLlxyXG4gKiBUaGV5IGFsc28gcHJvdmlkZSBhbiBldmVudCBlbWlzc2lvbi9icm9hZGNhc3QgYW5kIHN1YnNjcmlwdGlvbiBmYWNpbGl0eS4gU2VlIHRoZVxyXG4gKiB7QGxpbmsgZ3VpZGUvc2NvcGUgZGV2ZWxvcGVyIGd1aWRlIG9uIHNjb3Blc30uXHJcbiAqL1xyXG5mdW5jdGlvbiAkUm9vdFNjb3BlUHJvdmlkZXIoKSB7XHJcbiAgdmFyIFRUTCA9IDEwO1xyXG4gIHZhciAkcm9vdFNjb3BlTWluRXJyID0gbWluRXJyKCckcm9vdFNjb3BlJyk7XHJcbiAgdmFyIGxhc3REaXJ0eVdhdGNoID0gbnVsbDtcclxuICB2YXIgYXBwbHlBc3luY0lkID0gbnVsbDtcclxuXHJcbiAgdGhpcy5kaWdlc3RUdGwgPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgVFRMID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVFRMO1xyXG4gIH07XHJcblxyXG4gIHRoaXMuJGdldCA9IFsnJGluamVjdG9yJywgJyRleGNlcHRpb25IYW5kbGVyJywgJyRwYXJzZScsICckYnJvd3NlcicsXHJcbiAgICAgIGZ1bmN0aW9uKCRpbmplY3RvciwgJGV4Y2VwdGlvbkhhbmRsZXIsICRwYXJzZSwgJGJyb3dzZXIpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuZ2RvYyB0eXBlXHJcbiAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlXHJcbiAgICAgKlxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiBBIHJvb3Qgc2NvcGUgY2FuIGJlIHJldHJpZXZlZCB1c2luZyB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUgJHJvb3RTY29wZX0ga2V5IGZyb20gdGhlXHJcbiAgICAgKiB7QGxpbmsgYXV0by4kaW5qZWN0b3IgJGluamVjdG9yfS4gQ2hpbGQgc2NvcGVzIGFyZSBjcmVhdGVkIHVzaW5nIHRoZVxyXG4gICAgICoge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJG5ldyAkbmV3KCl9IG1ldGhvZC4gKE1vc3Qgc2NvcGVzIGFyZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2hlblxyXG4gICAgICogY29tcGlsZWQgSFRNTCB0ZW1wbGF0ZSBpcyBleGVjdXRlZC4pXHJcbiAgICAgKlxyXG4gICAgICogSGVyZSBpcyBhIHNpbXBsZSBzY29wZSBzbmlwcGV0IHRvIHNob3cgaG93IHlvdSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgc2NvcGUuXHJcbiAgICAgKiBgYGBodG1sXHJcbiAgICAgKiA8ZmlsZSBzcmM9XCIuL3Rlc3Qvbmcvcm9vdFNjb3BlU3BlYy5qc1wiIHRhZz1cImRvY3MxXCIgLz5cclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqICMgSW5oZXJpdGFuY2VcclxuICAgICAqIEEgc2NvcGUgY2FuIGluaGVyaXQgZnJvbSBhIHBhcmVudCBzY29wZSwgYXMgaW4gdGhpcyBleGFtcGxlOlxyXG4gICAgICogYGBganNcclxuICAgICAgICAgdmFyIHBhcmVudCA9ICRyb290U2NvcGU7XHJcbiAgICAgICAgIHZhciBjaGlsZCA9IHBhcmVudC4kbmV3KCk7XHJcblxyXG4gICAgICAgICBwYXJlbnQuc2FsdXRhdGlvbiA9IFwiSGVsbG9cIjtcclxuICAgICAgICAgY2hpbGQubmFtZSA9IFwiV29ybGRcIjtcclxuICAgICAgICAgZXhwZWN0KGNoaWxkLnNhbHV0YXRpb24pLnRvRXF1YWwoJ0hlbGxvJyk7XHJcblxyXG4gICAgICAgICBjaGlsZC5zYWx1dGF0aW9uID0gXCJXZWxjb21lXCI7XHJcbiAgICAgICAgIGV4cGVjdChjaGlsZC5zYWx1dGF0aW9uKS50b0VxdWFsKCdXZWxjb21lJyk7XHJcbiAgICAgICAgIGV4cGVjdChwYXJlbnQuc2FsdXRhdGlvbikudG9FcXVhbCgnSGVsbG8nKTtcclxuICAgICAqIGBgYFxyXG4gICAgICpcclxuICAgICAqIFdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBgU2NvcGVgIGluIHRlc3RzLCBhZGRpdGlvbmFsIGhlbHBlciBtZXRob2RzIGFyZSBhdmFpbGFibGUgb24gdGhlXHJcbiAgICAgKiBpbnN0YW5jZXMgb2YgYFNjb3BlYCB0eXBlLiBTZWUge0BsaW5rIG5nTW9jay4kcm9vdFNjb3BlLlNjb3BlIG5nTW9jayBTY29wZX0gZm9yIGFkZGl0aW9uYWxcclxuICAgICAqIGRldGFpbHMuXHJcbiAgICAgKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0aW9uKCk+PX0gcHJvdmlkZXJzIE1hcCBvZiBzZXJ2aWNlIGZhY3Rvcnkgd2hpY2ggbmVlZCB0byBiZVxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBmb3IgdGhlIGN1cnJlbnQgc2NvcGUuIERlZmF1bHRzIHRvIHtAbGluayBuZ30uXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCAqPj19IGluc3RhbmNlQ2FjaGUgUHJvdmlkZXMgcHJlLWluc3RhbnRpYXRlZCBzZXJ2aWNlcyB3aGljaCBzaG91bGRcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kL292ZXJyaWRlIHNlcnZpY2VzIHByb3ZpZGVkIGJ5IGBwcm92aWRlcnNgLiBUaGlzIGlzIGhhbmR5XHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdW5pdC10ZXN0aW5nIGFuZCBoYXZpbmcgdGhlIG5lZWQgdG8gb3ZlcnJpZGUgYSBkZWZhdWx0XHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UuXHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBOZXdseSBjcmVhdGVkIHNjb3BlLlxyXG4gICAgICpcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gU2NvcGUoKSB7XHJcbiAgICAgIHRoaXMuJGlkID0gbmV4dFVpZCgpO1xyXG4gICAgICB0aGlzLiQkcGhhc2UgPSB0aGlzLiRwYXJlbnQgPSB0aGlzLiQkd2F0Y2hlcnMgPVxyXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLiQkbmV4dFNpYmxpbmcgPSB0aGlzLiQkcHJldlNpYmxpbmcgPVxyXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLiQkY2hpbGRIZWFkID0gdGhpcy4kJGNoaWxkVGFpbCA9IG51bGw7XHJcbiAgICAgIHRoaXMuJHJvb3QgPSB0aGlzO1xyXG4gICAgICB0aGlzLiQkZGVzdHJveWVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuJCRsaXN0ZW5lcnMgPSB7fTtcclxuICAgICAgdGhpcy4kJGxpc3RlbmVyQ291bnQgPSB7fTtcclxuICAgICAgdGhpcy4kJGlzb2xhdGVCaW5kaW5ncyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmdkb2MgcHJvcGVydHlcclxuICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJGlkXHJcbiAgICAgKlxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiBVbmlxdWUgc2NvcGUgSUQgKG1vbm90b25pY2FsbHkgaW5jcmVhc2luZykgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuXHJcbiAgICAgKi9cclxuXHJcbiAgICAgLyoqXHJcbiAgICAgICogQG5nZG9jIHByb3BlcnR5XHJcbiAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkcGFyZW50XHJcbiAgICAgICpcclxuICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBzY29wZS5cclxuICAgICAgKi9cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbmdkb2MgcHJvcGVydHlcclxuICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkcm9vdFxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgICogUmVmZXJlbmNlIHRvIHRoZSByb290IHNjb3BlLlxyXG4gICAgICAgKi9cclxuXHJcbiAgICBTY29wZS5wcm90b3R5cGUgPSB7XHJcbiAgICAgIGNvbnN0cnVjdG9yOiBTY29wZSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkbmV3XHJcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAgKiBDcmVhdGVzIGEgbmV3IGNoaWxkIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIHNjb3BlfS5cclxuICAgICAgICpcclxuICAgICAgICogVGhlIHBhcmVudCBzY29wZSB3aWxsIHByb3BhZ2F0ZSB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0KCl9IGV2ZW50LlxyXG4gICAgICAgKiBUaGUgc2NvcGUgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2NvcGUgaGllcmFyY2h5IHVzaW5nIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkZXN0cm95ICRkZXN0cm95KCl9LlxyXG4gICAgICAgKlxyXG4gICAgICAgKiB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGVzdHJveSAkZGVzdHJveSgpfSBtdXN0IGJlIGNhbGxlZCBvbiBhIHNjb3BlIHdoZW4gaXQgaXNcclxuICAgICAgICogZGVzaXJlZCBmb3IgdGhlIHNjb3BlIGFuZCBpdHMgY2hpbGQgc2NvcGVzIHRvIGJlIHBlcm1hbmVudGx5IGRldGFjaGVkIGZyb20gdGhlIHBhcmVudCBhbmRcclxuICAgICAgICogdGh1cyBzdG9wIHBhcnRpY2lwYXRpbmcgaW4gbW9kZWwgY2hhbmdlIGRldGVjdGlvbiBhbmQgbGlzdGVuZXIgbm90aWZpY2F0aW9uIGJ5IGludm9raW5nLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzb2xhdGUgSWYgdHJ1ZSwgdGhlbiB0aGUgc2NvcGUgZG9lcyBub3QgcHJvdG90eXBpY2FsbHkgaW5oZXJpdCBmcm9tIHRoZVxyXG4gICAgICAgKiAgICAgICAgIHBhcmVudCBzY29wZS4gVGhlIHNjb3BlIGlzIGlzb2xhdGVkLCBhcyBpdCBjYW4gbm90IHNlZSBwYXJlbnQgc2NvcGUgcHJvcGVydGllcy5cclxuICAgICAgICogICAgICAgICBXaGVuIGNyZWF0aW5nIHdpZGdldHMsIGl0IGlzIHVzZWZ1bCBmb3IgdGhlIHdpZGdldCB0byBub3QgYWNjaWRlbnRhbGx5IHJlYWQgcGFyZW50XHJcbiAgICAgICAqICAgICAgICAgc3RhdGUuXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEBwYXJhbSB7U2NvcGV9IFtwYXJlbnQ9dGhpc10gVGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIGBTY29wZWB9IHRoYXQgd2lsbCBiZSB0aGUgYCRwYXJlbnRgXHJcbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgc2NvcGUuIERlZmF1bHRzIHRvIGB0aGlzYCBzY29wZSBpZiBub3QgcHJvdmlkZWQuXHJcbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0cmFuc2NsdWRlIHNjb3BlIHRvIGNvcnJlY3RseSBwbGFjZSBpdFxyXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBzY29wZSBoaWVyYXJjaHkgd2hpbGUgbWFpbnRhaW5pbmcgdGhlIGNvcnJlY3QgcHJvdG90eXBpY2FsXHJcbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdGFuY2UuXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBuZXdseSBjcmVhdGVkIGNoaWxkIHNjb3BlLlxyXG4gICAgICAgKlxyXG4gICAgICAgKi9cclxuICAgICAgJG5ldzogZnVuY3Rpb24oaXNvbGF0ZSwgcGFyZW50KSB7XHJcbiAgICAgICAgdmFyIGNoaWxkO1xyXG5cclxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQgfHwgdGhpcztcclxuXHJcbiAgICAgICAgaWYgKGlzb2xhdGUpIHtcclxuICAgICAgICAgIGNoaWxkID0gbmV3IFNjb3BlKCk7XHJcbiAgICAgICAgICBjaGlsZC4kcm9vdCA9IHRoaXMuJHJvb3Q7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIE9ubHkgY3JlYXRlIGEgY2hpbGQgc2NvcGUgY2xhc3MgaWYgc29tZWJvZHkgYXNrcyBmb3Igb25lLFxyXG4gICAgICAgICAgLy8gYnV0IGNhY2hlIGl0IHRvIGFsbG93IHRoZSBWTSB0byBvcHRpbWl6ZSBsb29rdXBzLlxyXG4gICAgICAgICAgaWYgKCF0aGlzLiQkQ2hpbGRTY29wZSkge1xyXG4gICAgICAgICAgICB0aGlzLiQkQ2hpbGRTY29wZSA9IGZ1bmN0aW9uIENoaWxkU2NvcGUoKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy4kJHdhdGNoZXJzID0gdGhpcy4kJG5leHRTaWJsaW5nID1cclxuICAgICAgICAgICAgICAgICAgdGhpcy4kJGNoaWxkSGVhZCA9IHRoaXMuJCRjaGlsZFRhaWwgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuJCRsaXN0ZW5lcnMgPSB7fTtcclxuICAgICAgICAgICAgICB0aGlzLiQkbGlzdGVuZXJDb3VudCA9IHt9O1xyXG4gICAgICAgICAgICAgIHRoaXMuJGlkID0gbmV4dFVpZCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuJCRDaGlsZFNjb3BlID0gbnVsbDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy4kJENoaWxkU2NvcGUucHJvdG90eXBlID0gdGhpcztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNoaWxkID0gbmV3IHRoaXMuJCRDaGlsZFNjb3BlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNoaWxkLiRwYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICAgICAgY2hpbGQuJCRwcmV2U2libGluZyA9IHBhcmVudC4kJGNoaWxkVGFpbDtcclxuICAgICAgICBpZiAocGFyZW50LiQkY2hpbGRIZWFkKSB7XHJcbiAgICAgICAgICBwYXJlbnQuJCRjaGlsZFRhaWwuJCRuZXh0U2libGluZyA9IGNoaWxkO1xyXG4gICAgICAgICAgcGFyZW50LiQkY2hpbGRUYWlsID0gY2hpbGQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBhcmVudC4kJGNoaWxkSGVhZCA9IHBhcmVudC4kJGNoaWxkVGFpbCA9IGNoaWxkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gV2hlbiB0aGUgbmV3IHNjb3BlIGlzIG5vdCBpc29sYXRlZCBvciB3ZSBpbmhlcml0IGZyb20gYHRoaXNgLCBhbmRcclxuICAgICAgICAvLyB0aGUgcGFyZW50IHNjb3BlIGlzIGRlc3Ryb3llZCwgdGhlIHByb3BlcnR5IGAkJGRlc3Ryb3llZGAgaXMgaW5oZXJpdGVkXHJcbiAgICAgICAgLy8gcHJvdG90eXBpY2FsbHkuIEluIGFsbCBvdGhlciBjYXNlcywgdGhpcyBwcm9wZXJ0eSBuZWVkcyB0byBiZSBzZXRcclxuICAgICAgICAvLyB3aGVuIHRoZSBwYXJlbnQgc2NvcGUgaXMgZGVzdHJveWVkLlxyXG4gICAgICAgIC8vIFRoZSBsaXN0ZW5lciBuZWVkcyB0byBiZSBhZGRlZCBhZnRlciB0aGUgcGFyZW50IGlzIHNldFxyXG4gICAgICAgIGlmIChpc29sYXRlIHx8IHBhcmVudCAhPSB0aGlzKSBjaGlsZC4kb24oJyRkZXN0cm95JywgZGVzdHJveUNoaWxkKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBkZXN0cm95Q2hpbGQoKSB7XHJcbiAgICAgICAgICBjaGlsZC4kJGRlc3Ryb3llZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkd2F0Y2hcclxuICAgICAgICogQGtpbmQgZnVuY3Rpb25cclxuICAgICAgICpcclxuICAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICAqIFJlZ2lzdGVycyBhIGBsaXN0ZW5lcmAgY2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQgd2hlbmV2ZXIgdGhlIGB3YXRjaEV4cHJlc3Npb25gIGNoYW5nZXMuXHJcbiAgICAgICAqXHJcbiAgICAgICAqIC0gVGhlIGB3YXRjaEV4cHJlc3Npb25gIGlzIGNhbGxlZCBvbiBldmVyeSBjYWxsIHRvIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3RcclxuICAgICAgICogICAkZGlnZXN0KCl9IGFuZCBzaG91bGQgcmV0dXJuIHRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgd2F0Y2hlZC4gKFNpbmNlXHJcbiAgICAgICAqICAge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0KCl9IHJlcnVucyB3aGVuIGl0IGRldGVjdHMgY2hhbmdlcyB0aGVcclxuICAgICAgICogICBgd2F0Y2hFeHByZXNzaW9uYCBjYW4gZXhlY3V0ZSBtdWx0aXBsZSB0aW1lcyBwZXJcclxuICAgICAgICogICB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0ICRkaWdlc3QoKX0gYW5kIHNob3VsZCBiZSBpZGVtcG90ZW50LilcclxuICAgICAgICogLSBUaGUgYGxpc3RlbmVyYCBpcyBjYWxsZWQgb25seSB3aGVuIHRoZSB2YWx1ZSBmcm9tIHRoZSBjdXJyZW50IGB3YXRjaEV4cHJlc3Npb25gIGFuZCB0aGVcclxuICAgICAgICogICBwcmV2aW91cyBjYWxsIHRvIGB3YXRjaEV4cHJlc3Npb25gIGFyZSBub3QgZXF1YWwgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgaW5pdGlhbCBydW4sXHJcbiAgICAgICAqICAgc2VlIGJlbG93KS4gSW5lcXVhbGl0eSBpcyBkZXRlcm1pbmVkIGFjY29yZGluZyB0byByZWZlcmVuY2UgaW5lcXVhbGl0eSxcclxuICAgICAgICogICBbc3RyaWN0IGNvbXBhcmlzb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy9Db21wYXJpc29uX09wZXJhdG9ycylcclxuICAgICAgICogICAgdmlhIHRoZSBgIT09YCBKYXZhc2NyaXB0IG9wZXJhdG9yLCB1bmxlc3MgYG9iamVjdEVxdWFsaXR5ID09IHRydWVgXHJcbiAgICAgICAqICAgKHNlZSBuZXh0IHBvaW50KVxyXG4gICAgICAgKiAtIFdoZW4gYG9iamVjdEVxdWFsaXR5ID09IHRydWVgLCBpbmVxdWFsaXR5IG9mIHRoZSBgd2F0Y2hFeHByZXNzaW9uYCBpcyBkZXRlcm1pbmVkXHJcbiAgICAgICAqICAgYWNjb3JkaW5nIHRvIHRoZSB7QGxpbmsgYW5ndWxhci5lcXVhbHN9IGZ1bmN0aW9uLiBUbyBzYXZlIHRoZSB2YWx1ZSBvZiB0aGUgb2JqZWN0IGZvclxyXG4gICAgICAgKiAgIGxhdGVyIGNvbXBhcmlzb24sIHRoZSB7QGxpbmsgYW5ndWxhci5jb3B5fSBmdW5jdGlvbiBpcyB1c2VkLiBUaGlzIHRoZXJlZm9yZSBtZWFucyB0aGF0XHJcbiAgICAgICAqICAgd2F0Y2hpbmcgY29tcGxleCBvYmplY3RzIHdpbGwgaGF2ZSBhZHZlcnNlIG1lbW9yeSBhbmQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLlxyXG4gICAgICAgKiAtIFRoZSB3YXRjaCBgbGlzdGVuZXJgIG1heSBjaGFuZ2UgdGhlIG1vZGVsLCB3aGljaCBtYXkgdHJpZ2dlciBvdGhlciBgbGlzdGVuZXJgcyB0byBmaXJlLlxyXG4gICAgICAgKiAgIFRoaXMgaXMgYWNoaWV2ZWQgYnkgcmVydW5uaW5nIHRoZSB3YXRjaGVycyB1bnRpbCBubyBjaGFuZ2VzIGFyZSBkZXRlY3RlZC4gVGhlIHJlcnVuXHJcbiAgICAgICAqICAgaXRlcmF0aW9uIGxpbWl0IGlzIDEwIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBkZWFkbG9jay5cclxuICAgICAgICpcclxuICAgICAgICpcclxuICAgICAgICogSWYgeW91IHdhbnQgdG8gYmUgbm90aWZpZWQgd2hlbmV2ZXIge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0fSBpcyBjYWxsZWQsXHJcbiAgICAgICAqIHlvdSBjYW4gcmVnaXN0ZXIgYSBgd2F0Y2hFeHByZXNzaW9uYCBmdW5jdGlvbiB3aXRoIG5vIGBsaXN0ZW5lcmAuIChTaW5jZSBgd2F0Y2hFeHByZXNzaW9uYFxyXG4gICAgICAgKiBjYW4gZXhlY3V0ZSBtdWx0aXBsZSB0aW1lcyBwZXIge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0fSBjeWNsZSB3aGVuIGFcclxuICAgICAgICogY2hhbmdlIGlzIGRldGVjdGVkLCBiZSBwcmVwYXJlZCBmb3IgbXVsdGlwbGUgY2FsbHMgdG8geW91ciBsaXN0ZW5lci4pXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEFmdGVyIGEgd2F0Y2hlciBpcyByZWdpc3RlcmVkIHdpdGggdGhlIHNjb3BlLCB0aGUgYGxpc3RlbmVyYCBmbiBpcyBjYWxsZWQgYXN5bmNocm9ub3VzbHlcclxuICAgICAgICogKHZpYSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZXZhbEFzeW5jICRldmFsQXN5bmN9KSB0byBpbml0aWFsaXplIHRoZVxyXG4gICAgICAgKiB3YXRjaGVyLiBJbiByYXJlIGNhc2VzLCB0aGlzIGlzIHVuZGVzaXJhYmxlIGJlY2F1c2UgdGhlIGxpc3RlbmVyIGlzIGNhbGxlZCB3aGVuIHRoZSByZXN1bHRcclxuICAgICAgICogb2YgYHdhdGNoRXhwcmVzc2lvbmAgZGlkbid0IGNoYW5nZS4gVG8gZGV0ZWN0IHRoaXMgc2NlbmFyaW8gd2l0aGluIHRoZSBgbGlzdGVuZXJgIGZuLCB5b3VcclxuICAgICAgICogY2FuIGNvbXBhcmUgdGhlIGBuZXdWYWxgIGFuZCBgb2xkVmFsYC4gSWYgdGhlc2UgdHdvIHZhbHVlcyBhcmUgaWRlbnRpY2FsIChgPT09YCkgdGhlbiB0aGVcclxuICAgICAgICogbGlzdGVuZXIgd2FzIGNhbGxlZCBkdWUgdG8gaW5pdGlhbGl6YXRpb24uXHJcbiAgICAgICAqXHJcbiAgICAgICAqXHJcbiAgICAgICAqXHJcbiAgICAgICAqICMgRXhhbXBsZVxyXG4gICAgICAgKiBgYGBqc1xyXG4gICAgICAgICAgIC8vIGxldCdzIGFzc3VtZSB0aGF0IHNjb3BlIHdhcyBkZXBlbmRlbmN5IGluamVjdGVkIGFzIHRoZSAkcm9vdFNjb3BlXHJcbiAgICAgICAgICAgdmFyIHNjb3BlID0gJHJvb3RTY29wZTtcclxuICAgICAgICAgICBzY29wZS5uYW1lID0gJ21pc2tvJztcclxuICAgICAgICAgICBzY29wZS5jb3VudGVyID0gMDtcclxuXHJcbiAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMCk7XHJcbiAgICAgICAgICAgc2NvcGUuJHdhdGNoKCduYW1lJywgZnVuY3Rpb24obmV3VmFsdWUsIG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICBzY29wZS5jb3VudGVyID0gc2NvcGUuY291bnRlciArIDE7XHJcbiAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMCk7XHJcblxyXG4gICAgICAgICAgIHNjb3BlLiRkaWdlc3QoKTtcclxuICAgICAgICAgICAvLyB0aGUgbGlzdGVuZXIgaXMgYWx3YXlzIGNhbGxlZCBkdXJpbmcgdGhlIGZpcnN0ICRkaWdlc3QgbG9vcCBhZnRlciBpdCB3YXMgcmVnaXN0ZXJlZFxyXG4gICAgICAgICAgIGV4cGVjdChzY29wZS5jb3VudGVyKS50b0VxdWFsKDEpO1xyXG5cclxuICAgICAgICAgICBzY29wZS4kZGlnZXN0KCk7XHJcbiAgICAgICAgICAgLy8gYnV0IG5vdyBpdCB3aWxsIG5vdCBiZSBjYWxsZWQgdW5sZXNzIHRoZSB2YWx1ZSBjaGFuZ2VzXHJcbiAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMSk7XHJcblxyXG4gICAgICAgICAgIHNjb3BlLm5hbWUgPSAnYWRhbSc7XHJcbiAgICAgICAgICAgc2NvcGUuJGRpZ2VzdCgpO1xyXG4gICAgICAgICAgIGV4cGVjdChzY29wZS5jb3VudGVyKS50b0VxdWFsKDIpO1xyXG5cclxuXHJcblxyXG4gICAgICAgICAgIC8vIFVzaW5nIGEgZnVuY3Rpb24gYXMgYSB3YXRjaEV4cHJlc3Npb25cclxuICAgICAgICAgICB2YXIgZm9vZDtcclxuICAgICAgICAgICBzY29wZS5mb29kQ291bnRlciA9IDA7XHJcbiAgICAgICAgICAgZXhwZWN0KHNjb3BlLmZvb2RDb3VudGVyKS50b0VxdWFsKDApO1xyXG4gICAgICAgICAgIHNjb3BlLiR3YXRjaChcclxuICAgICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgYmVpbmcgd2F0Y2hlZC4gSXQgaXMgY2FsbGVkIGZvciBlYWNoIHR1cm4gb2YgdGhlICRkaWdlc3QgbG9vcFxyXG4gICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiBmb29kOyB9LFxyXG4gICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY2hhbmdlIGxpc3RlbmVyLCBjYWxsZWQgd2hlbiB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGUgYWJvdmUgZnVuY3Rpb24gY2hhbmdlc1xyXG4gICAgICAgICAgICAgZnVuY3Rpb24obmV3VmFsdWUsIG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgIGlmICggbmV3VmFsdWUgIT09IG9sZFZhbHVlICkge1xyXG4gICAgICAgICAgICAgICAgIC8vIE9ubHkgaW5jcmVtZW50IHRoZSBjb3VudGVyIGlmIHRoZSB2YWx1ZSBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICAgc2NvcGUuZm9vZENvdW50ZXIgPSBzY29wZS5mb29kQ291bnRlciArIDE7XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgICApO1xyXG4gICAgICAgICAgIC8vIE5vIGRpZ2VzdCBoYXMgYmVlbiBydW4gc28gdGhlIGNvdW50ZXIgd2lsbCBiZSB6ZXJvXHJcbiAgICAgICAgICAgZXhwZWN0KHNjb3BlLmZvb2RDb3VudGVyKS50b0VxdWFsKDApO1xyXG5cclxuICAgICAgICAgICAvLyBSdW4gdGhlIGRpZ2VzdCBidXQgc2luY2UgZm9vZCBoYXMgbm90IGNoYW5nZWQgY291bnQgd2lsbCBzdGlsbCBiZSB6ZXJvXHJcbiAgICAgICAgICAgc2NvcGUuJGRpZ2VzdCgpO1xyXG4gICAgICAgICAgIGV4cGVjdChzY29wZS5mb29kQ291bnRlcikudG9FcXVhbCgwKTtcclxuXHJcbiAgICAgICAgICAgLy8gVXBkYXRlIGZvb2QgYW5kIHJ1biBkaWdlc3QuICBOb3cgdGhlIGNvdW50ZXIgd2lsbCBpbmNyZW1lbnRcclxuICAgICAgICAgICBmb29kID0gJ2NoZWVzZWJ1cmdlcic7XHJcbiAgICAgICAgICAgc2NvcGUuJGRpZ2VzdCgpO1xyXG4gICAgICAgICAgIGV4cGVjdChzY29wZS5mb29kQ291bnRlcikudG9FcXVhbCgxKTtcclxuXHJcbiAgICAgICAqIGBgYFxyXG4gICAgICAgKlxyXG4gICAgICAgKlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAcGFyYW0geyhmdW5jdGlvbigpfHN0cmluZyl9IHdhdGNoRXhwcmVzc2lvbiBFeHByZXNzaW9uIHRoYXQgaXMgZXZhbHVhdGVkIG9uIGVhY2hcclxuICAgICAgICogICAge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0fSBjeWNsZS4gQSBjaGFuZ2UgaW4gdGhlIHJldHVybiB2YWx1ZSB0cmlnZ2Vyc1xyXG4gICAgICAgKiAgICBhIGNhbGwgdG8gdGhlIGBsaXN0ZW5lcmAuXHJcbiAgICAgICAqXHJcbiAgICAgICAqICAgIC0gYHN0cmluZ2A6IEV2YWx1YXRlZCBhcyB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufVxyXG4gICAgICAgKiAgICAtIGBmdW5jdGlvbihzY29wZSlgOiBjYWxsZWQgd2l0aCBjdXJyZW50IGBzY29wZWAgYXMgYSBwYXJhbWV0ZXIuXHJcbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24obmV3VmFsLCBvbGRWYWwsIHNjb3BlKX0gbGlzdGVuZXIgQ2FsbGJhY2sgY2FsbGVkIHdoZW5ldmVyIHRoZSB2YWx1ZVxyXG4gICAgICAgKiAgICBvZiBgd2F0Y2hFeHByZXNzaW9uYCBjaGFuZ2VzLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiAgICAtIGBuZXdWYWxgIGNvbnRhaW5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBgd2F0Y2hFeHByZXNzaW9uYFxyXG4gICAgICAgKiAgICAtIGBvbGRWYWxgIGNvbnRhaW5zIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYHdhdGNoRXhwcmVzc2lvbmBcclxuICAgICAgICogICAgLSBgc2NvcGVgIHJlZmVycyB0byB0aGUgY3VycmVudCBzY29wZVxyXG4gICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBvYmplY3RFcXVhbGl0eSBDb21wYXJlIGZvciBvYmplY3QgZXF1YWxpdHkgdXNpbmcge0BsaW5rIGFuZ3VsYXIuZXF1YWxzfSBpbnN0ZWFkIG9mXHJcbiAgICAgICAqICAgICBjb21wYXJpbmcgZm9yIHJlZmVyZW5jZSBlcXVhbGl0eS5cclxuICAgICAgICogQHJldHVybnMge2Z1bmN0aW9uKCl9IFJldHVybnMgYSBkZXJlZ2lzdHJhdGlvbiBmdW5jdGlvbiBmb3IgdGhpcyBsaXN0ZW5lci5cclxuICAgICAgICovXHJcbiAgICAgICR3YXRjaDogZnVuY3Rpb24od2F0Y2hFeHAsIGxpc3RlbmVyLCBvYmplY3RFcXVhbGl0eSkge1xyXG4gICAgICAgIHZhciBnZXQgPSAkcGFyc2Uod2F0Y2hFeHApO1xyXG5cclxuICAgICAgICBpZiAoZ2V0LiQkd2F0Y2hEZWxlZ2F0ZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGdldC4kJHdhdGNoRGVsZWdhdGUodGhpcywgbGlzdGVuZXIsIG9iamVjdEVxdWFsaXR5LCBnZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzLFxyXG4gICAgICAgICAgICBhcnJheSA9IHNjb3BlLiQkd2F0Y2hlcnMsXHJcbiAgICAgICAgICAgIHdhdGNoZXIgPSB7XHJcbiAgICAgICAgICAgICAgZm46IGxpc3RlbmVyLFxyXG4gICAgICAgICAgICAgIGxhc3Q6IGluaXRXYXRjaFZhbCxcclxuICAgICAgICAgICAgICBnZXQ6IGdldCxcclxuICAgICAgICAgICAgICBleHA6IHdhdGNoRXhwLFxyXG4gICAgICAgICAgICAgIGVxOiAhIW9iamVjdEVxdWFsaXR5XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgIGxhc3REaXJ0eVdhdGNoID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSkge1xyXG4gICAgICAgICAgd2F0Y2hlci5mbiA9IG5vb3A7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWFycmF5KSB7XHJcbiAgICAgICAgICBhcnJheSA9IHNjb3BlLiQkd2F0Y2hlcnMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2UgdXNlIHVuc2hpZnQgc2luY2Ugd2UgdXNlIGEgd2hpbGUgbG9vcCBpbiAkZGlnZXN0IGZvciBzcGVlZC5cclxuICAgICAgICAvLyB0aGUgd2hpbGUgbG9vcCByZWFkcyBpbiByZXZlcnNlIG9yZGVyLlxyXG4gICAgICAgIGFycmF5LnVuc2hpZnQod2F0Y2hlcik7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBkZXJlZ2lzdGVyV2F0Y2goKSB7XHJcbiAgICAgICAgICBhcnJheVJlbW92ZShhcnJheSwgd2F0Y2hlcik7XHJcbiAgICAgICAgICBsYXN0RGlydHlXYXRjaCA9IG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJHdhdGNoR3JvdXBcclxuICAgICAgICogQGtpbmQgZnVuY3Rpb25cclxuICAgICAgICpcclxuICAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICAqIEEgdmFyaWFudCBvZiB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkd2F0Y2ggJHdhdGNoKCl9IHdoZXJlIGl0IHdhdGNoZXMgYW4gYXJyYXkgb2YgYHdhdGNoRXhwcmVzc2lvbnNgLlxyXG4gICAgICAgKiBJZiBhbnkgb25lIGV4cHJlc3Npb24gaW4gdGhlIGNvbGxlY3Rpb24gY2hhbmdlcyB0aGUgYGxpc3RlbmVyYCBpcyBleGVjdXRlZC5cclxuICAgICAgICpcclxuICAgICAgICogLSBUaGUgaXRlbXMgaW4gdGhlIGB3YXRjaEV4cHJlc3Npb25zYCBhcnJheSBhcmUgb2JzZXJ2ZWQgdmlhIHN0YW5kYXJkICR3YXRjaCBvcGVyYXRpb24gYW5kIGFyZSBleGFtaW5lZCBvbiBldmVyeVxyXG4gICAgICAgKiAgIGNhbGwgdG8gJGRpZ2VzdCgpIHRvIHNlZSBpZiBhbnkgaXRlbXMgY2hhbmdlcy5cclxuICAgICAgICogLSBUaGUgYGxpc3RlbmVyYCBpcyBjYWxsZWQgd2hlbmV2ZXIgYW55IGV4cHJlc3Npb24gaW4gdGhlIGB3YXRjaEV4cHJlc3Npb25zYCBhcnJheSBjaGFuZ2VzLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmd8RnVuY3Rpb24oc2NvcGUpPn0gd2F0Y2hFeHByZXNzaW9ucyBBcnJheSBvZiBleHByZXNzaW9ucyB0aGF0IHdpbGwgYmUgaW5kaXZpZHVhbGx5XHJcbiAgICAgICAqIHdhdGNoZWQgdXNpbmcge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJHdhdGNoICR3YXRjaCgpfVxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG5ld1ZhbHVlcywgb2xkVmFsdWVzLCBzY29wZSl9IGxpc3RlbmVyIENhbGxiYWNrIGNhbGxlZCB3aGVuZXZlciB0aGUgcmV0dXJuIHZhbHVlIG9mIGFueVxyXG4gICAgICAgKiAgICBleHByZXNzaW9uIGluIGB3YXRjaEV4cHJlc3Npb25zYCBjaGFuZ2VzXHJcbiAgICAgICAqICAgIFRoZSBgbmV3VmFsdWVzYCBhcnJheSBjb250YWlucyB0aGUgY3VycmVudCB2YWx1ZXMgb2YgdGhlIGB3YXRjaEV4cHJlc3Npb25zYCwgd2l0aCB0aGUgaW5kZXhlcyBtYXRjaGluZ1xyXG4gICAgICAgKiAgICB0aG9zZSBvZiBgd2F0Y2hFeHByZXNzaW9uYFxyXG4gICAgICAgKiAgICBhbmQgdGhlIGBvbGRWYWx1ZXNgIGFycmF5IGNvbnRhaW5zIHRoZSBwcmV2aW91cyB2YWx1ZXMgb2YgdGhlIGB3YXRjaEV4cHJlc3Npb25zYCwgd2l0aCB0aGUgaW5kZXhlcyBtYXRjaGluZ1xyXG4gICAgICAgKiAgICB0aG9zZSBvZiBgd2F0Y2hFeHByZXNzaW9uYFxyXG4gICAgICAgKiAgICBUaGUgYHNjb3BlYCByZWZlcnMgdG8gdGhlIGN1cnJlbnQgc2NvcGUuXHJcbiAgICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbigpfSBSZXR1cm5zIGEgZGUtcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGZvciBhbGwgbGlzdGVuZXJzLlxyXG4gICAgICAgKi9cclxuICAgICAgJHdhdGNoR3JvdXA6IGZ1bmN0aW9uKHdhdGNoRXhwcmVzc2lvbnMsIGxpc3RlbmVyKSB7XHJcbiAgICAgICAgdmFyIG9sZFZhbHVlcyA9IG5ldyBBcnJheSh3YXRjaEV4cHJlc3Npb25zLmxlbmd0aCk7XHJcbiAgICAgICAgdmFyIG5ld1ZhbHVlcyA9IG5ldyBBcnJheSh3YXRjaEV4cHJlc3Npb25zLmxlbmd0aCk7XHJcbiAgICAgICAgdmFyIGRlcmVnaXN0ZXJGbnMgPSBbXTtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGNoYW5nZVJlYWN0aW9uU2NoZWR1bGVkID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGZpcnN0UnVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKCF3YXRjaEV4cHJlc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgLy8gTm8gZXhwcmVzc2lvbnMgbWVhbnMgd2UgY2FsbCB0aGUgbGlzdGVuZXIgQVNBUFxyXG4gICAgICAgICAgdmFyIHNob3VsZENhbGwgPSB0cnVlO1xyXG4gICAgICAgICAgc2VsZi4kZXZhbEFzeW5jKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2FsbCkgbGlzdGVuZXIobmV3VmFsdWVzLCBuZXdWYWx1ZXMsIHNlbGYpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZGVyZWdpc3RlcldhdGNoR3JvdXAoKSB7XHJcbiAgICAgICAgICAgIHNob3VsZENhbGwgPSBmYWxzZTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod2F0Y2hFeHByZXNzaW9ucy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBzaXplIG9mIG9uZVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuJHdhdGNoKHdhdGNoRXhwcmVzc2lvbnNbMF0sIGZ1bmN0aW9uIHdhdGNoR3JvdXBBY3Rpb24odmFsdWUsIG9sZFZhbHVlLCBzY29wZSkge1xyXG4gICAgICAgICAgICBuZXdWYWx1ZXNbMF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgb2xkVmFsdWVzWzBdID0gb2xkVmFsdWU7XHJcbiAgICAgICAgICAgIGxpc3RlbmVyKG5ld1ZhbHVlcywgKHZhbHVlID09PSBvbGRWYWx1ZSkgPyBuZXdWYWx1ZXMgOiBvbGRWYWx1ZXMsIHNjb3BlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yRWFjaCh3YXRjaEV4cHJlc3Npb25zLCBmdW5jdGlvbihleHByLCBpKSB7XHJcbiAgICAgICAgICB2YXIgdW53YXRjaEZuID0gc2VsZi4kd2F0Y2goZXhwciwgZnVuY3Rpb24gd2F0Y2hHcm91cFN1YkFjdGlvbih2YWx1ZSwgb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgbmV3VmFsdWVzW2ldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIG9sZFZhbHVlc1tpXSA9IG9sZFZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoIWNoYW5nZVJlYWN0aW9uU2NoZWR1bGVkKSB7XHJcbiAgICAgICAgICAgICAgY2hhbmdlUmVhY3Rpb25TY2hlZHVsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHNlbGYuJGV2YWxBc3luYyh3YXRjaEdyb3VwQWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBkZXJlZ2lzdGVyRm5zLnB1c2godW53YXRjaEZuKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd2F0Y2hHcm91cEFjdGlvbigpIHtcclxuICAgICAgICAgIGNoYW5nZVJlYWN0aW9uU2NoZWR1bGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgaWYgKGZpcnN0UnVuKSB7XHJcbiAgICAgICAgICAgIGZpcnN0UnVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxpc3RlbmVyKG5ld1ZhbHVlcywgbmV3VmFsdWVzLCBzZWxmKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxpc3RlbmVyKG5ld1ZhbHVlcywgb2xkVmFsdWVzLCBzZWxmKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBkZXJlZ2lzdGVyV2F0Y2hHcm91cCgpIHtcclxuICAgICAgICAgIHdoaWxlIChkZXJlZ2lzdGVyRm5zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBkZXJlZ2lzdGVyRm5zLnNoaWZ0KCkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICB9LFxyXG5cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJHdhdGNoQ29sbGVjdGlvblxyXG4gICAgICAgKiBAa2luZCBmdW5jdGlvblxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgICogU2hhbGxvdyB3YXRjaGVzIHRoZSBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdCBhbmQgZmlyZXMgd2hlbmV2ZXIgYW55IG9mIHRoZSBwcm9wZXJ0aWVzIGNoYW5nZVxyXG4gICAgICAgKiAoZm9yIGFycmF5cywgdGhpcyBpbXBsaWVzIHdhdGNoaW5nIHRoZSBhcnJheSBpdGVtczsgZm9yIG9iamVjdCBtYXBzLCB0aGlzIGltcGxpZXMgd2F0Y2hpbmdcclxuICAgICAgICogdGhlIHByb3BlcnRpZXMpLiBJZiBhIGNoYW5nZSBpcyBkZXRlY3RlZCwgdGhlIGBsaXN0ZW5lcmAgY2FsbGJhY2sgaXMgZmlyZWQuXHJcbiAgICAgICAqXHJcbiAgICAgICAqIC0gVGhlIGBvYmpgIGNvbGxlY3Rpb24gaXMgb2JzZXJ2ZWQgdmlhIHN0YW5kYXJkICR3YXRjaCBvcGVyYXRpb24gYW5kIGlzIGV4YW1pbmVkIG9uIGV2ZXJ5XHJcbiAgICAgICAqICAgY2FsbCB0byAkZGlnZXN0KCkgdG8gc2VlIGlmIGFueSBpdGVtcyBoYXZlIGJlZW4gYWRkZWQsIHJlbW92ZWQsIG9yIG1vdmVkLlxyXG4gICAgICAgKiAtIFRoZSBgbGlzdGVuZXJgIGlzIGNhbGxlZCB3aGVuZXZlciBhbnl0aGluZyB3aXRoaW4gdGhlIGBvYmpgIGhhcyBjaGFuZ2VkLiBFeGFtcGxlcyBpbmNsdWRlXHJcbiAgICAgICAqICAgYWRkaW5nLCByZW1vdmluZywgYW5kIG1vdmluZyBpdGVtcyBiZWxvbmdpbmcgdG8gYW4gb2JqZWN0IG9yIGFycmF5LlxyXG4gICAgICAgKlxyXG4gICAgICAgKlxyXG4gICAgICAgKiAjIEV4YW1wbGVcclxuICAgICAgICogYGBganNcclxuICAgICAgICAgICRzY29wZS5uYW1lcyA9IFsnaWdvcicsICdtYXRpYXMnLCAnbWlza28nLCAnamFtZXMnXTtcclxuICAgICAgICAgICRzY29wZS5kYXRhQ291bnQgPSA0O1xyXG5cclxuICAgICAgICAgICRzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKCduYW1lcycsIGZ1bmN0aW9uKG5ld05hbWVzLCBvbGROYW1lcykge1xyXG4gICAgICAgICAgICAkc2NvcGUuZGF0YUNvdW50ID0gbmV3TmFtZXMubGVuZ3RoO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgZXhwZWN0KCRzY29wZS5kYXRhQ291bnQpLnRvRXF1YWwoNCk7XHJcbiAgICAgICAgICAkc2NvcGUuJGRpZ2VzdCgpO1xyXG5cclxuICAgICAgICAgIC8vc3RpbGwgYXQgNCAuLi4gbm8gY2hhbmdlc1xyXG4gICAgICAgICAgZXhwZWN0KCRzY29wZS5kYXRhQ291bnQpLnRvRXF1YWwoNCk7XHJcblxyXG4gICAgICAgICAgJHNjb3BlLm5hbWVzLnBvcCgpO1xyXG4gICAgICAgICAgJHNjb3BlLiRkaWdlc3QoKTtcclxuXHJcbiAgICAgICAgICAvL25vdyB0aGVyZSdzIGJlZW4gYSBjaGFuZ2VcclxuICAgICAgICAgIGV4cGVjdCgkc2NvcGUuZGF0YUNvdW50KS50b0VxdWFsKDMpO1xyXG4gICAgICAgKiBgYGBcclxuICAgICAgICpcclxuICAgICAgICpcclxuICAgICAgICogQHBhcmFtIHtzdHJpbmd8ZnVuY3Rpb24oc2NvcGUpfSBvYmogRXZhbHVhdGVkIGFzIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259LiBUaGVcclxuICAgICAgICogICAgZXhwcmVzc2lvbiB2YWx1ZSBzaG91bGQgZXZhbHVhdGUgdG8gYW4gb2JqZWN0IG9yIGFuIGFycmF5IHdoaWNoIGlzIG9ic2VydmVkIG9uIGVhY2hcclxuICAgICAgICogICAge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCAkZGlnZXN0fSBjeWNsZS4gQW55IHNoYWxsb3cgY2hhbmdlIHdpdGhpbiB0aGVcclxuICAgICAgICogICAgY29sbGVjdGlvbiB3aWxsIHRyaWdnZXIgYSBjYWxsIHRvIHRoZSBgbGlzdGVuZXJgLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG5ld0NvbGxlY3Rpb24sIG9sZENvbGxlY3Rpb24sIHNjb3BlKX0gbGlzdGVuZXIgYSBjYWxsYmFjayBmdW5jdGlvbiBjYWxsZWRcclxuICAgICAgICogICAgd2hlbiBhIGNoYW5nZSBpcyBkZXRlY3RlZC5cclxuICAgICAgICogICAgLSBUaGUgYG5ld0NvbGxlY3Rpb25gIG9iamVjdCBpcyB0aGUgbmV3bHkgbW9kaWZpZWQgZGF0YSBvYnRhaW5lZCBmcm9tIHRoZSBgb2JqYCBleHByZXNzaW9uXHJcbiAgICAgICAqICAgIC0gVGhlIGBvbGRDb2xsZWN0aW9uYCBvYmplY3QgaXMgYSBjb3B5IG9mIHRoZSBmb3JtZXIgY29sbGVjdGlvbiBkYXRhLlxyXG4gICAgICAgKiAgICAgIER1ZSB0byBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucywgdGhlYG9sZENvbGxlY3Rpb25gIHZhbHVlIGlzIGNvbXB1dGVkIG9ubHkgaWYgdGhlXHJcbiAgICAgICAqICAgICAgYGxpc3RlbmVyYCBmdW5jdGlvbiBkZWNsYXJlcyB0d28gb3IgbW9yZSBhcmd1bWVudHMuXHJcbiAgICAgICAqICAgIC0gVGhlIGBzY29wZWAgYXJndW1lbnQgcmVmZXJzIHRvIHRoZSBjdXJyZW50IHNjb3BlLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24oKX0gUmV0dXJucyBhIGRlLXJlZ2lzdHJhdGlvbiBmdW5jdGlvbiBmb3IgdGhpcyBsaXN0ZW5lci4gV2hlbiB0aGVcclxuICAgICAgICogICAgZGUtcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkLCB0aGUgaW50ZXJuYWwgd2F0Y2ggb3BlcmF0aW9uIGlzIHRlcm1pbmF0ZWQuXHJcbiAgICAgICAqL1xyXG4gICAgICAkd2F0Y2hDb2xsZWN0aW9uOiBmdW5jdGlvbihvYmosIGxpc3RlbmVyKSB7XHJcbiAgICAgICAgJHdhdGNoQ29sbGVjdGlvbkludGVyY2VwdG9yLiRzdGF0ZWZ1bCA9IHRydWU7XHJcblxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyB0aGUgY3VycmVudCB2YWx1ZSwgdXBkYXRlZCBvbiBlYWNoIGRpcnR5LWNoZWNrIHJ1blxyXG4gICAgICAgIHZhciBuZXdWYWx1ZTtcclxuICAgICAgICAvLyBhIHNoYWxsb3cgY29weSBvZiB0aGUgbmV3VmFsdWUgZnJvbSB0aGUgbGFzdCBkaXJ0eS1jaGVjayBydW4sXHJcbiAgICAgICAgLy8gdXBkYXRlZCB0byBtYXRjaCBuZXdWYWx1ZSBkdXJpbmcgZGlydHktY2hlY2sgcnVuXHJcbiAgICAgICAgdmFyIG9sZFZhbHVlO1xyXG4gICAgICAgIC8vIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBuZXdWYWx1ZSBmcm9tIHdoZW4gdGhlIGxhc3QgY2hhbmdlIGhhcHBlbmVkXHJcbiAgICAgICAgdmFyIHZlcnlPbGRWYWx1ZTtcclxuICAgICAgICAvLyBvbmx5IHRyYWNrIHZlcnlPbGRWYWx1ZSBpZiB0aGUgbGlzdGVuZXIgaXMgYXNraW5nIGZvciBpdFxyXG4gICAgICAgIHZhciB0cmFja1ZlcnlPbGRWYWx1ZSA9IChsaXN0ZW5lci5sZW5ndGggPiAxKTtcclxuICAgICAgICB2YXIgY2hhbmdlRGV0ZWN0ZWQgPSAwO1xyXG4gICAgICAgIHZhciBjaGFuZ2VEZXRlY3RvciA9ICRwYXJzZShvYmosICR3YXRjaENvbGxlY3Rpb25JbnRlcmNlcHRvcik7XHJcbiAgICAgICAgdmFyIGludGVybmFsQXJyYXkgPSBbXTtcclxuICAgICAgICB2YXIgaW50ZXJuYWxPYmplY3QgPSB7fTtcclxuICAgICAgICB2YXIgaW5pdFJ1biA9IHRydWU7XHJcbiAgICAgICAgdmFyIG9sZExlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uICR3YXRjaENvbGxlY3Rpb25JbnRlcmNlcHRvcihfdmFsdWUpIHtcclxuICAgICAgICAgIG5ld1ZhbHVlID0gX3ZhbHVlO1xyXG4gICAgICAgICAgdmFyIG5ld0xlbmd0aCwga2V5LCBib3RoTmFOLCBuZXdJdGVtLCBvbGRJdGVtO1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSBuZXcgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB1bmRlZmluZWQgYXMgdGhlIHdhdGNoIG1heSBiZSBhIG9uZS10aW1lIHdhdGNoXHJcbiAgICAgICAgICBpZiAoaXNVbmRlZmluZWQobmV3VmFsdWUpKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgaWYgKCFpc09iamVjdChuZXdWYWx1ZSkpIHsgLy8gaWYgcHJpbWl0aXZlXHJcbiAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgICBvbGRWYWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgICAgIGNoYW5nZURldGVjdGVkKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheUxpa2UobmV3VmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gaW50ZXJuYWxBcnJheSkge1xyXG4gICAgICAgICAgICAgIC8vIHdlIGFyZSB0cmFuc2l0aW9uaW5nIGZyb20gc29tZXRoaW5nIHdoaWNoIHdhcyBub3QgYW4gYXJyYXkgaW50byBhcnJheS5cclxuICAgICAgICAgICAgICBvbGRWYWx1ZSA9IGludGVybmFsQXJyYXk7XHJcbiAgICAgICAgICAgICAgb2xkTGVuZ3RoID0gb2xkVmFsdWUubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RlZCsrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBuZXdMZW5ndGggPSBuZXdWYWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICBpZiAob2xkTGVuZ3RoICE9PSBuZXdMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAvLyBpZiBsZW5ndGhzIGRvIG5vdCBtYXRjaCB3ZSBuZWVkIHRvIHRyaWdnZXIgY2hhbmdlIG5vdGlmaWNhdGlvblxyXG4gICAgICAgICAgICAgIGNoYW5nZURldGVjdGVkKys7XHJcbiAgICAgICAgICAgICAgb2xkVmFsdWUubGVuZ3RoID0gb2xkTGVuZ3RoID0gbmV3TGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNvcHkgdGhlIGl0ZW1zIHRvIG9sZFZhbHVlIGFuZCBsb29rIGZvciBjaGFuZ2VzLlxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgb2xkSXRlbSA9IG9sZFZhbHVlW2ldO1xyXG4gICAgICAgICAgICAgIG5ld0l0ZW0gPSBuZXdWYWx1ZVtpXTtcclxuXHJcbiAgICAgICAgICAgICAgYm90aE5hTiA9IChvbGRJdGVtICE9PSBvbGRJdGVtKSAmJiAobmV3SXRlbSAhPT0gbmV3SXRlbSk7XHJcbiAgICAgICAgICAgICAgaWYgKCFib3RoTmFOICYmIChvbGRJdGVtICE9PSBuZXdJdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0ZWQrKztcclxuICAgICAgICAgICAgICAgIG9sZFZhbHVlW2ldID0gbmV3SXRlbTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gaW50ZXJuYWxPYmplY3QpIHtcclxuICAgICAgICAgICAgICAvLyB3ZSBhcmUgdHJhbnNpdGlvbmluZyBmcm9tIHNvbWV0aGluZyB3aGljaCB3YXMgbm90IGFuIG9iamVjdCBpbnRvIG9iamVjdC5cclxuICAgICAgICAgICAgICBvbGRWYWx1ZSA9IGludGVybmFsT2JqZWN0ID0ge307XHJcbiAgICAgICAgICAgICAgb2xkTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RlZCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNvcHkgdGhlIGl0ZW1zIHRvIG9sZFZhbHVlIGFuZCBsb29rIGZvciBjaGFuZ2VzLlxyXG4gICAgICAgICAgICBuZXdMZW5ndGggPSAwO1xyXG4gICAgICAgICAgICBmb3IgKGtleSBpbiBuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGlmIChuZXdWYWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdMZW5ndGgrKztcclxuICAgICAgICAgICAgICAgIG5ld0l0ZW0gPSBuZXdWYWx1ZVtrZXldO1xyXG4gICAgICAgICAgICAgICAgb2xkSXRlbSA9IG9sZFZhbHVlW2tleV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGtleSBpbiBvbGRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBib3RoTmFOID0gKG9sZEl0ZW0gIT09IG9sZEl0ZW0pICYmIChuZXdJdGVtICE9PSBuZXdJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKCFib3RoTmFOICYmIChvbGRJdGVtICE9PSBuZXdJdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGVkKys7XHJcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWVba2V5XSA9IG5ld0l0ZW07XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIG9sZExlbmd0aCsrO1xyXG4gICAgICAgICAgICAgICAgICBvbGRWYWx1ZVtrZXldID0gbmV3SXRlbTtcclxuICAgICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0ZWQrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG9sZExlbmd0aCA+IG5ld0xlbmd0aCkge1xyXG4gICAgICAgICAgICAgIC8vIHdlIHVzZWQgdG8gaGF2ZSBtb3JlIGtleXMsIG5lZWQgdG8gZmluZCB0aGVtIGFuZCBkZXN0cm95IHRoZW0uXHJcbiAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0ZWQrKztcclxuICAgICAgICAgICAgICBmb3IgKGtleSBpbiBvbGRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFuZXdWYWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgIG9sZExlbmd0aC0tO1xyXG4gICAgICAgICAgICAgICAgICBkZWxldGUgb2xkVmFsdWVba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBjaGFuZ2VEZXRlY3RlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uICR3YXRjaENvbGxlY3Rpb25BY3Rpb24oKSB7XHJcbiAgICAgICAgICBpZiAoaW5pdFJ1bikge1xyXG4gICAgICAgICAgICBpbml0UnVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxpc3RlbmVyKG5ld1ZhbHVlLCBuZXdWYWx1ZSwgc2VsZik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsaXN0ZW5lcihuZXdWYWx1ZSwgdmVyeU9sZFZhbHVlLCBzZWxmKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBtYWtlIGEgY29weSBmb3IgdGhlIG5leHQgdGltZSBhIGNvbGxlY3Rpb24gaXMgY2hhbmdlZFxyXG4gICAgICAgICAgaWYgKHRyYWNrVmVyeU9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICghaXNPYmplY3QobmV3VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgLy9wcmltaXRpdmVcclxuICAgICAgICAgICAgICB2ZXJ5T2xkVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5TGlrZShuZXdWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICB2ZXJ5T2xkVmFsdWUgPSBuZXcgQXJyYXkobmV3VmFsdWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1ZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJ5T2xkVmFsdWVbaV0gPSBuZXdWYWx1ZVtpXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIGlmIG9iamVjdFxyXG4gICAgICAgICAgICAgIHZlcnlPbGRWYWx1ZSA9IHt9O1xyXG4gICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBuZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwobmV3VmFsdWUsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgdmVyeU9sZFZhbHVlW2tleV0gPSBuZXdWYWx1ZVtrZXldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHdhdGNoKGNoYW5nZURldGVjdG9yLCAkd2F0Y2hDb2xsZWN0aW9uQWN0aW9uKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdFxyXG4gICAgICAgKiBAa2luZCBmdW5jdGlvblxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgICogUHJvY2Vzc2VzIGFsbCBvZiB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJHdhdGNoIHdhdGNoZXJzfSBvZiB0aGUgY3VycmVudCBzY29wZSBhbmRcclxuICAgICAgICogaXRzIGNoaWxkcmVuLiBCZWNhdXNlIGEge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJHdhdGNoIHdhdGNoZXJ9J3MgbGlzdGVuZXIgY2FuIGNoYW5nZVxyXG4gICAgICAgKiB0aGUgbW9kZWwsIHRoZSBgJGRpZ2VzdCgpYCBrZWVwcyBjYWxsaW5nIHRoZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkd2F0Y2ggd2F0Y2hlcnN9XHJcbiAgICAgICAqIHVudGlsIG5vIG1vcmUgbGlzdGVuZXJzIGFyZSBmaXJpbmcuIFRoaXMgbWVhbnMgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBnZXQgaW50byBhbiBpbmZpbml0ZVxyXG4gICAgICAgKiBsb29wLiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGhyb3cgYCdNYXhpbXVtIGl0ZXJhdGlvbiBsaW1pdCBleGNlZWRlZC4nYCBpZiB0aGUgbnVtYmVyIG9mXHJcbiAgICAgICAqIGl0ZXJhdGlvbnMgZXhjZWVkcyAxMC5cclxuICAgICAgICpcclxuICAgICAgICogVXN1YWxseSwgeW91IGRvbid0IGNhbGwgYCRkaWdlc3QoKWAgZGlyZWN0bHkgaW5cclxuICAgICAgICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NvbnRyb2xsZXIgY29udHJvbGxlcnN9IG9yIGluXHJcbiAgICAgICAqIHtAbGluayBuZy4kY29tcGlsZVByb3ZpZGVyI2RpcmVjdGl2ZSBkaXJlY3RpdmVzfS5cclxuICAgICAgICogSW5zdGVhZCwgeW91IHNob3VsZCBjYWxsIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRhcHBseSAkYXBwbHkoKX0gKHR5cGljYWxseSBmcm9tIHdpdGhpblxyXG4gICAgICAgKiBhIHtAbGluayBuZy4kY29tcGlsZVByb3ZpZGVyI2RpcmVjdGl2ZSBkaXJlY3RpdmV9KSwgd2hpY2ggd2lsbCBmb3JjZSBhIGAkZGlnZXN0KClgLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBJZiB5b3Ugd2FudCB0byBiZSBub3RpZmllZCB3aGVuZXZlciBgJGRpZ2VzdCgpYCBpcyBjYWxsZWQsXHJcbiAgICAgICAqIHlvdSBjYW4gcmVnaXN0ZXIgYSBgd2F0Y2hFeHByZXNzaW9uYCBmdW5jdGlvbiB3aXRoXHJcbiAgICAgICAqIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyR3YXRjaCAkd2F0Y2goKX0gd2l0aCBubyBgbGlzdGVuZXJgLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBJbiB1bml0IHRlc3RzLCB5b3UgbWF5IG5lZWQgdG8gY2FsbCBgJGRpZ2VzdCgpYCB0byBzaW11bGF0ZSB0aGUgc2NvcGUgbGlmZSBjeWNsZS5cclxuICAgICAgICpcclxuICAgICAgICogIyBFeGFtcGxlXHJcbiAgICAgICAqIGBgYGpzXHJcbiAgICAgICAgICAgdmFyIHNjb3BlID0gLi4uO1xyXG4gICAgICAgICAgIHNjb3BlLm5hbWUgPSAnbWlza28nO1xyXG4gICAgICAgICAgIHNjb3BlLmNvdW50ZXIgPSAwO1xyXG5cclxuICAgICAgICAgICBleHBlY3Qoc2NvcGUuY291bnRlcikudG9FcXVhbCgwKTtcclxuICAgICAgICAgICBzY29wZS4kd2F0Y2goJ25hbWUnLCBmdW5jdGlvbihuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgIHNjb3BlLmNvdW50ZXIgPSBzY29wZS5jb3VudGVyICsgMTtcclxuICAgICAgICAgICB9KTtcclxuICAgICAgICAgICBleHBlY3Qoc2NvcGUuY291bnRlcikudG9FcXVhbCgwKTtcclxuXHJcbiAgICAgICAgICAgc2NvcGUuJGRpZ2VzdCgpO1xyXG4gICAgICAgICAgIC8vIHRoZSBsaXN0ZW5lciBpcyBhbHdheXMgY2FsbGVkIGR1cmluZyB0aGUgZmlyc3QgJGRpZ2VzdCBsb29wIGFmdGVyIGl0IHdhcyByZWdpc3RlcmVkXHJcbiAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMSk7XHJcblxyXG4gICAgICAgICAgIHNjb3BlLiRkaWdlc3QoKTtcclxuICAgICAgICAgICAvLyBidXQgbm93IGl0IHdpbGwgbm90IGJlIGNhbGxlZCB1bmxlc3MgdGhlIHZhbHVlIGNoYW5nZXNcclxuICAgICAgICAgICBleHBlY3Qoc2NvcGUuY291bnRlcikudG9FcXVhbCgxKTtcclxuXHJcbiAgICAgICAgICAgc2NvcGUubmFtZSA9ICdhZGFtJztcclxuICAgICAgICAgICBzY29wZS4kZGlnZXN0KCk7XHJcbiAgICAgICAgICAgZXhwZWN0KHNjb3BlLmNvdW50ZXIpLnRvRXF1YWwoMik7XHJcbiAgICAgICAqIGBgYFxyXG4gICAgICAgKlxyXG4gICAgICAgKi9cclxuICAgICAgJGRpZ2VzdDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHdhdGNoLCB2YWx1ZSwgbGFzdCxcclxuICAgICAgICAgICAgd2F0Y2hlcnMsXHJcbiAgICAgICAgICAgIGxlbmd0aCxcclxuICAgICAgICAgICAgZGlydHksIHR0bCA9IFRUTCxcclxuICAgICAgICAgICAgbmV4dCwgY3VycmVudCwgdGFyZ2V0ID0gdGhpcyxcclxuICAgICAgICAgICAgd2F0Y2hMb2cgPSBbXSxcclxuICAgICAgICAgICAgbG9nSWR4LCBsb2dNc2csIGFzeW5jVGFzaztcclxuXHJcbiAgICAgICAgYmVnaW5QaGFzZSgnJGRpZ2VzdCcpO1xyXG4gICAgICAgIC8vIENoZWNrIGZvciBjaGFuZ2VzIHRvIGJyb3dzZXIgdXJsIHRoYXQgaGFwcGVuZWQgaW4gc3luYyBiZWZvcmUgdGhlIGNhbGwgdG8gJGRpZ2VzdFxyXG4gICAgICAgICRicm93c2VyLiQkY2hlY2tVcmxDaGFuZ2UoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMgPT09ICRyb290U2NvcGUgJiYgYXBwbHlBc3luY0lkICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSByb290IHNjb3BlLCBhbmQgJGFwcGx5QXN5bmMgaGFzIHNjaGVkdWxlZCBhIGRlZmVycmVkICRhcHBseSgpLCB0aGVuXHJcbiAgICAgICAgICAvLyBjYW5jZWwgdGhlIHNjaGVkdWxlZCAkYXBwbHkgYW5kIGZsdXNoIHRoZSBxdWV1ZSBvZiBleHByZXNzaW9ucyB0byBiZSBldmFsdWF0ZWQuXHJcbiAgICAgICAgICAkYnJvd3Nlci5kZWZlci5jYW5jZWwoYXBwbHlBc3luY0lkKTtcclxuICAgICAgICAgIGZsdXNoQXBwbHlBc3luYygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGFzdERpcnR5V2F0Y2ggPSBudWxsO1xyXG5cclxuICAgICAgICBkbyB7IC8vIFwid2hpbGUgZGlydHlcIiBsb29wXHJcbiAgICAgICAgICBkaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgY3VycmVudCA9IHRhcmdldDtcclxuXHJcbiAgICAgICAgICB3aGlsZSAoYXN5bmNRdWV1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBhc3luY1Rhc2sgPSBhc3luY1F1ZXVlLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgYXN5bmNUYXNrLnNjb3BlLiRldmFsKGFzeW5jVGFzay5leHByZXNzaW9uKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxhc3REaXJ0eVdhdGNoID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0cmF2ZXJzZVNjb3Blc0xvb3A6XHJcbiAgICAgICAgICBkbyB7IC8vIFwidHJhdmVyc2UgdGhlIHNjb3Blc1wiIGxvb3BcclxuICAgICAgICAgICAgaWYgKCh3YXRjaGVycyA9IGN1cnJlbnQuJCR3YXRjaGVycykpIHtcclxuICAgICAgICAgICAgICAvLyBwcm9jZXNzIG91ciB3YXRjaGVzXHJcbiAgICAgICAgICAgICAgbGVuZ3RoID0gd2F0Y2hlcnMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgd2F0Y2ggPSB3YXRjaGVyc1tsZW5ndGhdO1xyXG4gICAgICAgICAgICAgICAgICAvLyBNb3N0IGNvbW1vbiB3YXRjaGVzIGFyZSBvbiBwcmltaXRpdmVzLCBpbiB3aGljaCBjYXNlIHdlIGNhbiBzaG9ydFxyXG4gICAgICAgICAgICAgICAgICAvLyBjaXJjdWl0IGl0IHdpdGggPT09IG9wZXJhdG9yLCBvbmx5IHdoZW4gPT09IGZhaWxzIGRvIHdlIHVzZSAuZXF1YWxzXHJcbiAgICAgICAgICAgICAgICAgIGlmICh3YXRjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgodmFsdWUgPSB3YXRjaC5nZXQoY3VycmVudCkpICE9PSAobGFzdCA9IHdhdGNoLmxhc3QpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICEod2F0Y2guZXFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZXF1YWxzKHZhbHVlLCBsYXN0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgbGFzdCA9PT0gJ251bWJlcidcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGlzTmFOKHZhbHVlKSAmJiBpc05hTihsYXN0KSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBkaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0RGlydHlXYXRjaCA9IHdhdGNoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgd2F0Y2gubGFzdCA9IHdhdGNoLmVxID8gY29weSh2YWx1ZSwgbnVsbCkgOiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIHdhdGNoLmZuKHZhbHVlLCAoKGxhc3QgPT09IGluaXRXYXRjaFZhbCkgPyB2YWx1ZSA6IGxhc3QpLCBjdXJyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh0dGwgPCA1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0lkeCA9IDQgLSB0dGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd2F0Y2hMb2dbbG9nSWR4XSkgd2F0Y2hMb2dbbG9nSWR4XSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXRjaExvZ1tsb2dJZHhdLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1zZzogaXNGdW5jdGlvbih3YXRjaC5leHApID8gJ2ZuOiAnICsgKHdhdGNoLmV4cC5uYW1lIHx8IHdhdGNoLmV4cC50b1N0cmluZygpKSA6IHdhdGNoLmV4cCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWw6IHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZhbDogbGFzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdhdGNoID09PSBsYXN0RGlydHlXYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG1vc3QgcmVjZW50bHkgZGlydHkgd2F0Y2hlciBpcyBub3cgY2xlYW4sIHNob3J0IGNpcmN1aXQgc2luY2UgdGhlIHJlbWFpbmluZyB3YXRjaGVyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBhbHJlYWR5IGJlZW4gdGVzdGVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgZGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHRyYXZlcnNlU2NvcGVzTG9vcDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBJbnNhbml0eSBXYXJuaW5nOiBzY29wZSBkZXB0aC1maXJzdCB0cmF2ZXJzYWxcclxuICAgICAgICAgICAgLy8geWVzLCB0aGlzIGNvZGUgaXMgYSBiaXQgY3JhenksIGJ1dCBpdCB3b3JrcyBhbmQgd2UgaGF2ZSB0ZXN0cyB0byBwcm92ZSBpdCFcclxuICAgICAgICAgICAgLy8gdGhpcyBwaWVjZSBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIHRyYXZlcnNhbCBpbiAkYnJvYWRjYXN0XHJcbiAgICAgICAgICAgIGlmICghKG5leHQgPSAoY3VycmVudC4kJGNoaWxkSGVhZCB8fFxyXG4gICAgICAgICAgICAgICAgKGN1cnJlbnQgIT09IHRhcmdldCAmJiBjdXJyZW50LiQkbmV4dFNpYmxpbmcpKSkpIHtcclxuICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudCAhPT0gdGFyZ2V0ICYmICEobmV4dCA9IGN1cnJlbnQuJCRuZXh0U2libGluZykpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LiRwYXJlbnQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IHdoaWxlICgoY3VycmVudCA9IG5leHQpKTtcclxuXHJcbiAgICAgICAgICAvLyBgYnJlYWsgdHJhdmVyc2VTY29wZXNMb29wO2AgdGFrZXMgdXMgdG8gaGVyZVxyXG5cclxuICAgICAgICAgIGlmICgoZGlydHkgfHwgYXN5bmNRdWV1ZS5sZW5ndGgpICYmICEodHRsLS0pKSB7XHJcbiAgICAgICAgICAgIGNsZWFyUGhhc2UoKTtcclxuICAgICAgICAgICAgdGhyb3cgJHJvb3RTY29wZU1pbkVycignaW5mZGlnJyxcclxuICAgICAgICAgICAgICAgICd7MH0gJGRpZ2VzdCgpIGl0ZXJhdGlvbnMgcmVhY2hlZC4gQWJvcnRpbmchXFxuJyArXHJcbiAgICAgICAgICAgICAgICAnV2F0Y2hlcnMgZmlyZWQgaW4gdGhlIGxhc3QgNSBpdGVyYXRpb25zOiB7MX0nLFxyXG4gICAgICAgICAgICAgICAgVFRMLCB3YXRjaExvZyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gd2hpbGUgKGRpcnR5IHx8IGFzeW5jUXVldWUubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgY2xlYXJQaGFzZSgpO1xyXG5cclxuICAgICAgICB3aGlsZSAocG9zdERpZ2VzdFF1ZXVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcG9zdERpZ2VzdFF1ZXVlLnNoaWZ0KCkoKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbmdkb2MgZXZlbnRcclxuICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkZGVzdHJveVxyXG4gICAgICAgKiBAZXZlbnRUeXBlIGJyb2FkY2FzdCBvbiBzY29wZSBiZWluZyBkZXN0cm95ZWRcclxuICAgICAgICpcclxuICAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICAqIEJyb2FkY2FzdGVkIHdoZW4gYSBzY29wZSBhbmQgaXRzIGNoaWxkcmVuIGFyZSBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICAgICAqXHJcbiAgICAgICAqIE5vdGUgdGhhdCwgaW4gQW5ndWxhckpTLCB0aGVyZSBpcyBhbHNvIGEgYCRkZXN0cm95YCBqUXVlcnkgZXZlbnQsIHdoaWNoIGNhbiBiZSB1c2VkIHRvXHJcbiAgICAgICAqIGNsZWFuIHVwIERPTSBiaW5kaW5ncyBiZWZvcmUgYW4gZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIERPTS5cclxuICAgICAgICovXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyRkZXN0cm95XHJcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAgKiBSZW1vdmVzIHRoZSBjdXJyZW50IHNjb3BlIChhbmQgYWxsIG9mIGl0cyBjaGlsZHJlbikgZnJvbSB0aGUgcGFyZW50IHNjb3BlLiBSZW1vdmFsIGltcGxpZXNcclxuICAgICAgICogdGhhdCBjYWxscyB0byB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZGlnZXN0ICRkaWdlc3QoKX0gd2lsbCBubyBsb25nZXJcclxuICAgICAgICogcHJvcGFnYXRlIHRvIHRoZSBjdXJyZW50IHNjb3BlIGFuZCBpdHMgY2hpbGRyZW4uIFJlbW92YWwgYWxzbyBpbXBsaWVzIHRoYXQgdGhlIGN1cnJlbnRcclxuICAgICAgICogc2NvcGUgaXMgZWxpZ2libGUgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbi5cclxuICAgICAgICpcclxuICAgICAgICogVGhlIGAkZGVzdHJveSgpYCBpcyB1c3VhbGx5IHVzZWQgYnkgZGlyZWN0aXZlcyBzdWNoIGFzXHJcbiAgICAgICAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdSZXBlYXQgbmdSZXBlYXR9IGZvciBtYW5hZ2luZyB0aGVcclxuICAgICAgICogdW5yb2xsaW5nIG9mIHRoZSBsb29wLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBKdXN0IGJlZm9yZSBhIHNjb3BlIGlzIGRlc3Ryb3llZCwgYSBgJGRlc3Ryb3lgIGV2ZW50IGlzIGJyb2FkY2FzdGVkIG9uIHRoaXMgc2NvcGUuXHJcbiAgICAgICAqIEFwcGxpY2F0aW9uIGNvZGUgY2FuIHJlZ2lzdGVyIGEgYCRkZXN0cm95YCBldmVudCBoYW5kbGVyIHRoYXQgd2lsbCBnaXZlIGl0IGEgY2hhbmNlIHRvXHJcbiAgICAgICAqIHBlcmZvcm0gYW55IG5lY2Vzc2FyeSBjbGVhbnVwLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBOb3RlIHRoYXQsIGluIEFuZ3VsYXJKUywgdGhlcmUgaXMgYWxzbyBhIGAkZGVzdHJveWAgalF1ZXJ5IGV2ZW50LCB3aGljaCBjYW4gYmUgdXNlZCB0b1xyXG4gICAgICAgKiBjbGVhbiB1cCBET00gYmluZGluZ3MgYmVmb3JlIGFuIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00uXHJcbiAgICAgICAqL1xyXG4gICAgICAkZGVzdHJveTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gd2UgY2FuJ3QgZGVzdHJveSB0aGUgcm9vdCBzY29wZSBvciBhIHNjb3BlIHRoYXQgaGFzIGJlZW4gYWxyZWFkeSBkZXN0cm95ZWRcclxuICAgICAgICBpZiAodGhpcy4kJGRlc3Ryb3llZCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMuJGJyb2FkY2FzdCgnJGRlc3Ryb3knKTtcclxuICAgICAgICB0aGlzLiQkZGVzdHJveWVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcyA9PT0gJHJvb3RTY29wZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gdGhpcy4kJGxpc3RlbmVyQ291bnQpIHtcclxuICAgICAgICAgIGRlY3JlbWVudExpc3RlbmVyQ291bnQodGhpcywgdGhpcy4kJGxpc3RlbmVyQ291bnRbZXZlbnROYW1lXSwgZXZlbnROYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNldmVyIGFsbCB0aGUgcmVmZXJlbmNlcyB0byBwYXJlbnQgc2NvcGVzIChhZnRlciB0aGlzIGNsZWFudXAsIHRoZSBjdXJyZW50IHNjb3BlIHNob3VsZFxyXG4gICAgICAgIC8vIG5vdCBiZSByZXRhaW5lZCBieSBhbnkgb2Ygb3VyIHJlZmVyZW5jZXMgYW5kIHNob3VsZCBiZSBlbGlnaWJsZSBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uKVxyXG4gICAgICAgIGlmIChwYXJlbnQuJCRjaGlsZEhlYWQgPT0gdGhpcykgcGFyZW50LiQkY2hpbGRIZWFkID0gdGhpcy4kJG5leHRTaWJsaW5nO1xyXG4gICAgICAgIGlmIChwYXJlbnQuJCRjaGlsZFRhaWwgPT0gdGhpcykgcGFyZW50LiQkY2hpbGRUYWlsID0gdGhpcy4kJHByZXZTaWJsaW5nO1xyXG4gICAgICAgIGlmICh0aGlzLiQkcHJldlNpYmxpbmcpIHRoaXMuJCRwcmV2U2libGluZy4kJG5leHRTaWJsaW5nID0gdGhpcy4kJG5leHRTaWJsaW5nO1xyXG4gICAgICAgIGlmICh0aGlzLiQkbmV4dFNpYmxpbmcpIHRoaXMuJCRuZXh0U2libGluZy4kJHByZXZTaWJsaW5nID0gdGhpcy4kJHByZXZTaWJsaW5nO1xyXG5cclxuICAgICAgICAvLyBEaXNhYmxlIGxpc3RlbmVycywgd2F0Y2hlcnMgYW5kIGFwcGx5L2RpZ2VzdCBtZXRob2RzXHJcbiAgICAgICAgdGhpcy4kZGVzdHJveSA9IHRoaXMuJGRpZ2VzdCA9IHRoaXMuJGFwcGx5ID0gdGhpcy4kZXZhbEFzeW5jID0gdGhpcy4kYXBwbHlBc3luYyA9IG5vb3A7XHJcbiAgICAgICAgdGhpcy4kb24gPSB0aGlzLiR3YXRjaCA9IHRoaXMuJHdhdGNoR3JvdXAgPSBmdW5jdGlvbigpIHsgcmV0dXJuIG5vb3A7IH07XHJcbiAgICAgICAgdGhpcy4kJGxpc3RlbmVycyA9IHt9O1xyXG5cclxuICAgICAgICAvLyBBbGwgb2YgdGhlIGNvZGUgYmVsb3cgaXMgYm9ndXMgY29kZSB0aGF0IHdvcmtzIGFyb3VuZCBWOCdzIG1lbW9yeSBsZWFrIHZpYSBvcHRpbWl6ZWQgY29kZVxyXG4gICAgICAgIC8vIGFuZCBpbmxpbmUgY2FjaGVzLlxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gc2VlOlxyXG4gICAgICAgIC8vIC0gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTIwNzMjYzI2XHJcbiAgICAgICAgLy8gLSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL2lzc3Vlcy82Nzk0I2lzc3VlY29tbWVudC0zODY0ODkwOVxyXG4gICAgICAgIC8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5qcy9pc3N1ZXMvMTMxMyNpc3N1ZWNvbW1lbnQtMTAzNzg0NTFcclxuXHJcbiAgICAgICAgdGhpcy4kcGFyZW50ID0gdGhpcy4kJG5leHRTaWJsaW5nID0gdGhpcy4kJHByZXZTaWJsaW5nID0gdGhpcy4kJGNoaWxkSGVhZCA9XHJcbiAgICAgICAgICAgIHRoaXMuJCRjaGlsZFRhaWwgPSB0aGlzLiRyb290ID0gdGhpcy4kJHdhdGNoZXJzID0gbnVsbDtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJGV2YWxcclxuICAgICAgICogQGtpbmQgZnVuY3Rpb25cclxuICAgICAgICpcclxuICAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICAqIEV4ZWN1dGVzIHRoZSBgZXhwcmVzc2lvbmAgb24gdGhlIGN1cnJlbnQgc2NvcGUgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4gQW55IGV4Y2VwdGlvbnMgaW5cclxuICAgICAgICogdGhlIGV4cHJlc3Npb24gYXJlIHByb3BhZ2F0ZWQgKHVuY2F1Z2h0KS4gVGhpcyBpcyB1c2VmdWwgd2hlbiBldmFsdWF0aW5nIEFuZ3VsYXJcclxuICAgICAgICogZXhwcmVzc2lvbnMuXHJcbiAgICAgICAqXHJcbiAgICAgICAqICMgRXhhbXBsZVxyXG4gICAgICAgKiBgYGBqc1xyXG4gICAgICAgICAgIHZhciBzY29wZSA9IG5nLiRyb290U2NvcGUuU2NvcGUoKTtcclxuICAgICAgICAgICBzY29wZS5hID0gMTtcclxuICAgICAgICAgICBzY29wZS5iID0gMjtcclxuXHJcbiAgICAgICAgICAgZXhwZWN0KHNjb3BlLiRldmFsKCdhK2InKSkudG9FcXVhbCgzKTtcclxuICAgICAgICAgICBleHBlY3Qoc2NvcGUuJGV2YWwoZnVuY3Rpb24oc2NvcGUpeyByZXR1cm4gc2NvcGUuYSArIHNjb3BlLmI7IH0pKS50b0VxdWFsKDMpO1xyXG4gICAgICAgKiBgYGBcclxuICAgICAgICpcclxuICAgICAgICogQHBhcmFtIHsoc3RyaW5nfGZ1bmN0aW9uKCkpPX0gZXhwcmVzc2lvbiBBbiBhbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQuXHJcbiAgICAgICAqXHJcbiAgICAgICAqICAgIC0gYHN0cmluZ2A6IGV4ZWN1dGUgdXNpbmcgdGhlIHJ1bGVzIGFzIGRlZmluZWQgaW4gIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259LlxyXG4gICAgICAgKiAgICAtIGBmdW5jdGlvbihzY29wZSlgOiBleGVjdXRlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBjdXJyZW50IGBzY29wZWAgcGFyYW1ldGVyLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAcGFyYW0geyhvYmplY3QpPX0gbG9jYWxzIExvY2FsIHZhcmlhYmxlcyBvYmplY3QsIHVzZWZ1bCBmb3Igb3ZlcnJpZGluZyB2YWx1ZXMgaW4gc2NvcGUuXHJcbiAgICAgICAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24uXHJcbiAgICAgICAqL1xyXG4gICAgICAkZXZhbDogZnVuY3Rpb24oZXhwciwgbG9jYWxzKSB7XHJcbiAgICAgICAgcmV0dXJuICRwYXJzZShleHByKSh0aGlzLCBsb2NhbHMpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkZXZhbEFzeW5jXHJcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAgKiBFeGVjdXRlcyB0aGUgZXhwcmVzc2lvbiBvbiB0aGUgY3VycmVudCBzY29wZSBhdCBhIGxhdGVyIHBvaW50IGluIHRpbWUuXHJcbiAgICAgICAqXHJcbiAgICAgICAqIFRoZSBgJGV2YWxBc3luY2AgbWFrZXMgbm8gZ3VhcmFudGVlcyBhcyB0byB3aGVuIHRoZSBgZXhwcmVzc2lvbmAgd2lsbCBiZSBleGVjdXRlZCwgb25seVxyXG4gICAgICAgKiB0aGF0OlxyXG4gICAgICAgKlxyXG4gICAgICAgKiAgIC0gaXQgd2lsbCBleGVjdXRlIGFmdGVyIHRoZSBmdW5jdGlvbiB0aGF0IHNjaGVkdWxlZCB0aGUgZXZhbHVhdGlvbiAocHJlZmVyYWJseSBiZWZvcmUgRE9NXHJcbiAgICAgICAqICAgICByZW5kZXJpbmcpLlxyXG4gICAgICAgKiAgIC0gYXQgbGVhc3Qgb25lIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3QgJGRpZ2VzdCBjeWNsZX0gd2lsbCBiZSBwZXJmb3JtZWQgYWZ0ZXJcclxuICAgICAgICogICAgIGBleHByZXNzaW9uYCBleGVjdXRpb24uXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEFueSBleGNlcHRpb25zIGZyb20gdGhlIGV4ZWN1dGlvbiBvZiB0aGUgZXhwcmVzc2lvbiBhcmUgZm9yd2FyZGVkIHRvIHRoZVxyXG4gICAgICAgKiB7QGxpbmsgbmcuJGV4Y2VwdGlvbkhhbmRsZXIgJGV4Y2VwdGlvbkhhbmRsZXJ9IHNlcnZpY2UuXHJcbiAgICAgICAqXHJcbiAgICAgICAqIF9fTm90ZTpfXyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvdXRzaWRlIG9mIGEgYCRkaWdlc3RgIGN5Y2xlLCBhIG5ldyBgJGRpZ2VzdGAgY3ljbGVcclxuICAgICAgICogd2lsbCBiZSBzY2hlZHVsZWQuIEhvd2V2ZXIsIGl0IGlzIGVuY291cmFnZWQgdG8gYWx3YXlzIGNhbGwgY29kZSB0aGF0IGNoYW5nZXMgdGhlIG1vZGVsXHJcbiAgICAgICAqIGZyb20gd2l0aGluIGFuIGAkYXBwbHlgIGNhbGwuIFRoYXQgaW5jbHVkZXMgY29kZSBldmFsdWF0ZWQgdmlhIGAkZXZhbEFzeW5jYC5cclxuICAgICAgICpcclxuICAgICAgICogQHBhcmFtIHsoc3RyaW5nfGZ1bmN0aW9uKCkpPX0gZXhwcmVzc2lvbiBBbiBhbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQuXHJcbiAgICAgICAqXHJcbiAgICAgICAqICAgIC0gYHN0cmluZ2A6IGV4ZWN1dGUgdXNpbmcgdGhlIHJ1bGVzIGFzIGRlZmluZWQgaW4ge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0uXHJcbiAgICAgICAqICAgIC0gYGZ1bmN0aW9uKHNjb3BlKWA6IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGN1cnJlbnQgYHNjb3BlYCBwYXJhbWV0ZXIuXHJcbiAgICAgICAqXHJcbiAgICAgICAqL1xyXG4gICAgICAkZXZhbEFzeW5jOiBmdW5jdGlvbihleHByKSB7XHJcbiAgICAgICAgLy8gaWYgd2UgYXJlIG91dHNpZGUgb2YgYW4gJGRpZ2VzdCBsb29wIGFuZCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIGFyZSBzY2hlZHVsaW5nIGFzeW5jXHJcbiAgICAgICAgLy8gdGFzayBhbHNvIHNjaGVkdWxlIGFzeW5jIGF1dG8tZmx1c2hcclxuICAgICAgICBpZiAoISRyb290U2NvcGUuJCRwaGFzZSAmJiAhYXN5bmNRdWV1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICRicm93c2VyLmRlZmVyKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZiAoYXN5bmNRdWV1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAkcm9vdFNjb3BlLiRkaWdlc3QoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhc3luY1F1ZXVlLnB1c2goe3Njb3BlOiB0aGlzLCBleHByZXNzaW9uOiBleHByfSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAkJHBvc3REaWdlc3Q6IGZ1bmN0aW9uKGZuKSB7XHJcbiAgICAgICAgcG9zdERpZ2VzdFF1ZXVlLnB1c2goZm4pO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkYXBwbHlcclxuICAgICAgICogQGtpbmQgZnVuY3Rpb25cclxuICAgICAgICpcclxuICAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICAqIGAkYXBwbHkoKWAgaXMgdXNlZCB0byBleGVjdXRlIGFuIGV4cHJlc3Npb24gaW4gYW5ndWxhciBmcm9tIG91dHNpZGUgb2YgdGhlIGFuZ3VsYXJcclxuICAgICAgICogZnJhbWV3b3JrLiAoRm9yIGV4YW1wbGUgZnJvbSBicm93c2VyIERPTSBldmVudHMsIHNldFRpbWVvdXQsIFhIUiBvciB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMpLlxyXG4gICAgICAgKiBCZWNhdXNlIHdlIGFyZSBjYWxsaW5nIGludG8gdGhlIGFuZ3VsYXIgZnJhbWV3b3JrIHdlIG5lZWQgdG8gcGVyZm9ybSBwcm9wZXIgc2NvcGUgbGlmZVxyXG4gICAgICAgKiBjeWNsZSBvZiB7QGxpbmsgbmcuJGV4Y2VwdGlvbkhhbmRsZXIgZXhjZXB0aW9uIGhhbmRsaW5nfSxcclxuICAgICAgICoge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGRpZ2VzdCBleGVjdXRpbmcgd2F0Y2hlc30uXHJcbiAgICAgICAqXHJcbiAgICAgICAqICMjIExpZmUgY3ljbGVcclxuICAgICAgICpcclxuICAgICAgICogIyBQc2V1ZG8tQ29kZSBvZiBgJGFwcGx5KClgXHJcbiAgICAgICAqIGBgYGpzXHJcbiAgICAgICAgICAgZnVuY3Rpb24gJGFwcGx5KGV4cHIpIHtcclxuICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgIHJldHVybiAkZXZhbChleHByKTtcclxuICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7XHJcbiAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAkcm9vdC4kZGlnZXN0KCk7XHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgKiBgYGBcclxuICAgICAgICpcclxuICAgICAgICpcclxuICAgICAgICogU2NvcGUncyBgJGFwcGx5KClgIG1ldGhvZCB0cmFuc2l0aW9ucyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgc3RhZ2VzOlxyXG4gICAgICAgKlxyXG4gICAgICAgKiAxLiBUaGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaXMgZXhlY3V0ZWQgdXNpbmcgdGhlXHJcbiAgICAgICAqICAgIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRldmFsICRldmFsKCl9IG1ldGhvZC5cclxuICAgICAgICogMi4gQW55IGV4Y2VwdGlvbnMgZnJvbSB0aGUgZXhlY3V0aW9uIG9mIHRoZSBleHByZXNzaW9uIGFyZSBmb3J3YXJkZWQgdG8gdGhlXHJcbiAgICAgICAqICAgIHtAbGluayBuZy4kZXhjZXB0aW9uSGFuZGxlciAkZXhjZXB0aW9uSGFuZGxlcn0gc2VydmljZS5cclxuICAgICAgICogMy4gVGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyR3YXRjaCB3YXRjaH0gbGlzdGVuZXJzIGFyZSBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGVcclxuICAgICAgICogICAgZXhwcmVzc2lvbiB3YXMgZXhlY3V0ZWQgdXNpbmcgdGhlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRkaWdlc3QgJGRpZ2VzdCgpfSBtZXRob2QuXHJcbiAgICAgICAqXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEBwYXJhbSB7KHN0cmluZ3xmdW5jdGlvbigpKT19IGV4cCBBbiBhbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQuXHJcbiAgICAgICAqXHJcbiAgICAgICAqICAgIC0gYHN0cmluZ2A6IGV4ZWN1dGUgdXNpbmcgdGhlIHJ1bGVzIGFzIGRlZmluZWQgaW4ge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0uXHJcbiAgICAgICAqICAgIC0gYGZ1bmN0aW9uKHNjb3BlKWA6IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHdpdGggY3VycmVudCBgc2NvcGVgIHBhcmFtZXRlci5cclxuICAgICAgICpcclxuICAgICAgICogQHJldHVybnMgeyp9IFRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbi5cclxuICAgICAgICovXHJcbiAgICAgICRhcHBseTogZnVuY3Rpb24oZXhwcikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBiZWdpblBoYXNlKCckYXBwbHknKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLiRldmFsKGV4cHIpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICBjbGVhclBoYXNlKCk7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAkcm9vdFNjb3BlLiRkaWdlc3QoKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgJGV4Y2VwdGlvbkhhbmRsZXIoZSk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkYXBwbHlBc3luY1xyXG4gICAgICAgKiBAa2luZCBmdW5jdGlvblxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgICogU2NoZWR1bGUgdGhlIGludm9rYXRpb24gb2YgJGFwcGx5IHRvIG9jY3VyIGF0IGEgbGF0ZXIgdGltZS4gVGhlIGFjdHVhbCB0aW1lIGRpZmZlcmVuY2VcclxuICAgICAgICogdmFyaWVzIGFjcm9zcyBicm93c2VycywgYnV0IGlzIHR5cGljYWxseSBhcm91bmQgfjEwIG1pbGxpc2Vjb25kcy5cclxuICAgICAgICpcclxuICAgICAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBxdWV1ZSB1cCBtdWx0aXBsZSBleHByZXNzaW9ucyB3aGljaCBuZWVkIHRvIGJlIGV2YWx1YXRlZCBpbiB0aGUgc2FtZVxyXG4gICAgICAgKiBkaWdlc3QuXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEBwYXJhbSB7KHN0cmluZ3xmdW5jdGlvbigpKT19IGV4cCBBbiBhbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQuXHJcbiAgICAgICAqXHJcbiAgICAgICAqICAgIC0gYHN0cmluZ2A6IGV4ZWN1dGUgdXNpbmcgdGhlIHJ1bGVzIGFzIGRlZmluZWQgaW4ge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0uXHJcbiAgICAgICAqICAgIC0gYGZ1bmN0aW9uKHNjb3BlKWA6IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHdpdGggY3VycmVudCBgc2NvcGVgIHBhcmFtZXRlci5cclxuICAgICAgICovXHJcbiAgICAgICRhcHBseUFzeW5jOiBmdW5jdGlvbihleHByKSB7XHJcbiAgICAgICAgdmFyIHNjb3BlID0gdGhpcztcclxuICAgICAgICBleHByICYmIGFwcGx5QXN5bmNRdWV1ZS5wdXNoKCRhcHBseUFzeW5jRXhwcmVzc2lvbik7XHJcbiAgICAgICAgc2NoZWR1bGVBcHBseUFzeW5jKCk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uICRhcHBseUFzeW5jRXhwcmVzc2lvbigpIHtcclxuICAgICAgICAgIHNjb3BlLiRldmFsKGV4cHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgICAqIEBuYW1lICRyb290U2NvcGUuU2NvcGUjJG9uXHJcbiAgICAgICAqIEBraW5kIGZ1bmN0aW9uXHJcbiAgICAgICAqXHJcbiAgICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAgKiBMaXN0ZW5zIG9uIGV2ZW50cyBvZiBhIGdpdmVuIHR5cGUuIFNlZSB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkZW1pdCAkZW1pdH0gZm9yXHJcbiAgICAgICAqIGRpc2N1c3Npb24gb2YgZXZlbnQgbGlmZSBjeWNsZS5cclxuICAgICAgICpcclxuICAgICAgICogVGhlIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIGZvcm1hdCBpczogYGZ1bmN0aW9uKGV2ZW50LCBhcmdzLi4uKWAuIFRoZSBgZXZlbnRgIG9iamVjdFxyXG4gICAgICAgKiBwYXNzZWQgaW50byB0aGUgbGlzdGVuZXIgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcclxuICAgICAgICpcclxuICAgICAgICogICAtIGB0YXJnZXRTY29wZWAgLSBge1Njb3BlfWA6IHRoZSBzY29wZSBvbiB3aGljaCB0aGUgZXZlbnQgd2FzIGAkZW1pdGAtZWQgb3JcclxuICAgICAgICogICAgIGAkYnJvYWRjYXN0YC1lZC5cclxuICAgICAgICogICAtIGBjdXJyZW50U2NvcGVgIC0gYHtTY29wZX1gOiB0aGUgc2NvcGUgdGhhdCBpcyBjdXJyZW50bHkgaGFuZGxpbmcgdGhlIGV2ZW50LiBPbmNlIHRoZVxyXG4gICAgICAgKiAgICAgZXZlbnQgcHJvcGFnYXRlcyB0aHJvdWdoIHRoZSBzY29wZSBoaWVyYXJjaHksIHRoaXMgcHJvcGVydHkgaXMgc2V0IHRvIG51bGwuXHJcbiAgICAgICAqICAgLSBgbmFtZWAgLSBge3N0cmluZ31gOiBuYW1lIG9mIHRoZSBldmVudC5cclxuICAgICAgICogICAtIGBzdG9wUHJvcGFnYXRpb25gIC0gYHtmdW5jdGlvbj19YDogY2FsbGluZyBgc3RvcFByb3BhZ2F0aW9uYCBmdW5jdGlvbiB3aWxsIGNhbmNlbFxyXG4gICAgICAgKiAgICAgZnVydGhlciBldmVudCBwcm9wYWdhdGlvbiAoYXZhaWxhYmxlIG9ubHkgZm9yIGV2ZW50cyB0aGF0IHdlcmUgYCRlbWl0YC1lZCkuXHJcbiAgICAgICAqICAgLSBgcHJldmVudERlZmF1bHRgIC0gYHtmdW5jdGlvbn1gOiBjYWxsaW5nIGBwcmV2ZW50RGVmYXVsdGAgc2V0cyBgZGVmYXVsdFByZXZlbnRlZGAgZmxhZ1xyXG4gICAgICAgKiAgICAgdG8gdHJ1ZS5cclxuICAgICAgICogICAtIGBkZWZhdWx0UHJldmVudGVkYCAtIGB7Ym9vbGVhbn1gOiB0cnVlIGlmIGBwcmV2ZW50RGVmYXVsdGAgd2FzIGNhbGxlZC5cclxuICAgICAgICpcclxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRXZlbnQgbmFtZSB0byBsaXN0ZW4gb24uXHJcbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oZXZlbnQsIC4uLmFyZ3MpfSBsaXN0ZW5lciBGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIGVtaXR0ZWQuXHJcbiAgICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbigpfSBSZXR1cm5zIGEgZGVyZWdpc3RyYXRpb24gZnVuY3Rpb24gZm9yIHRoaXMgbGlzdGVuZXIuXHJcbiAgICAgICAqL1xyXG4gICAgICAkb246IGZ1bmN0aW9uKG5hbWUsIGxpc3RlbmVyKSB7XHJcbiAgICAgICAgdmFyIG5hbWVkTGlzdGVuZXJzID0gdGhpcy4kJGxpc3RlbmVyc1tuYW1lXTtcclxuICAgICAgICBpZiAoIW5hbWVkTGlzdGVuZXJzKSB7XHJcbiAgICAgICAgICB0aGlzLiQkbGlzdGVuZXJzW25hbWVdID0gbmFtZWRMaXN0ZW5lcnMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmFtZWRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XHJcblxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcztcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICBpZiAoIWN1cnJlbnQuJCRsaXN0ZW5lckNvdW50W25hbWVdKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnQuJCRsaXN0ZW5lckNvdW50W25hbWVdID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGN1cnJlbnQuJCRsaXN0ZW5lckNvdW50W25hbWVdKys7XHJcbiAgICAgICAgfSB3aGlsZSAoKGN1cnJlbnQgPSBjdXJyZW50LiRwYXJlbnQpKTtcclxuXHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHZhciBpbmRleE9mTGlzdGVuZXIgPSBuYW1lZExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcclxuICAgICAgICAgIGlmIChpbmRleE9mTGlzdGVuZXIgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIG5hbWVkTGlzdGVuZXJzW2luZGV4T2ZMaXN0ZW5lcl0gPSBudWxsO1xyXG4gICAgICAgICAgICBkZWNyZW1lbnRMaXN0ZW5lckNvdW50KHNlbGYsIDEsIG5hbWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0sXHJcblxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgICogQG5hbWUgJHJvb3RTY29wZS5TY29wZSMkZW1pdFxyXG4gICAgICAgKiBAa2luZCBmdW5jdGlvblxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAgICogRGlzcGF0Y2hlcyBhbiBldmVudCBgbmFtZWAgdXB3YXJkcyB0aHJvdWdoIHRoZSBzY29wZSBoaWVyYXJjaHkgbm90aWZ5aW5nIHRoZVxyXG4gICAgICAgKiByZWdpc3RlcmVkIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRvbn0gbGlzdGVuZXJzLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBUaGUgZXZlbnQgbGlmZSBjeWNsZSBzdGFydHMgYXQgdGhlIHNjb3BlIG9uIHdoaWNoIGAkZW1pdGAgd2FzIGNhbGxlZC4gQWxsXHJcbiAgICAgICAqIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRvbiBsaXN0ZW5lcnN9IGxpc3RlbmluZyBmb3IgYG5hbWVgIGV2ZW50IG9uIHRoaXMgc2NvcGUgZ2V0XHJcbiAgICAgICAqIG5vdGlmaWVkLiBBZnRlcndhcmRzLCB0aGUgZXZlbnQgdHJhdmVyc2VzIHVwd2FyZHMgdG93YXJkIHRoZSByb290IHNjb3BlIGFuZCBjYWxscyBhbGxcclxuICAgICAgICogcmVnaXN0ZXJlZCBsaXN0ZW5lcnMgYWxvbmcgdGhlIHdheS4gVGhlIGV2ZW50IHdpbGwgc3RvcCBwcm9wYWdhdGluZyBpZiBvbmUgb2YgdGhlIGxpc3RlbmVyc1xyXG4gICAgICAgKiBjYW5jZWxzIGl0LlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBBbnkgZXhjZXB0aW9uIGVtaXR0ZWQgZnJvbSB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJG9uIGxpc3RlbmVyc30gd2lsbCBiZSBwYXNzZWRcclxuICAgICAgICogb250byB0aGUge0BsaW5rIG5nLiRleGNlcHRpb25IYW5kbGVyICRleGNlcHRpb25IYW5kbGVyfSBzZXJ2aWNlLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBFdmVudCBuYW1lIHRvIGVtaXQuXHJcbiAgICAgICAqIEBwYXJhbSB7Li4uKn0gYXJncyBPcHRpb25hbCBvbmUgb3IgbW9yZSBhcmd1bWVudHMgd2hpY2ggd2lsbCBiZSBwYXNzZWQgb250byB0aGUgZXZlbnQgbGlzdGVuZXJzLlxyXG4gICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEV2ZW50IG9iamVjdCAoc2VlIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRvbn0pLlxyXG4gICAgICAgKi9cclxuICAgICAgJGVtaXQ6IGZ1bmN0aW9uKG5hbWUsIGFyZ3MpIHtcclxuICAgICAgICB2YXIgZW1wdHkgPSBbXSxcclxuICAgICAgICAgICAgbmFtZWRMaXN0ZW5lcnMsXHJcbiAgICAgICAgICAgIHNjb3BlID0gdGhpcyxcclxuICAgICAgICAgICAgc3RvcFByb3BhZ2F0aW9uID0gZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgICAgdGFyZ2V0U2NvcGU6IHNjb3BlLFxyXG4gICAgICAgICAgICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7c3RvcFByb3BhZ2F0aW9uID0gdHJ1ZTt9LFxyXG4gICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZDogZmFsc2VcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbGlzdGVuZXJBcmdzID0gY29uY2F0KFtldmVudF0sIGFyZ3VtZW50cywgMSksXHJcbiAgICAgICAgICAgIGksIGxlbmd0aDtcclxuXHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgbmFtZWRMaXN0ZW5lcnMgPSBzY29wZS4kJGxpc3RlbmVyc1tuYW1lXSB8fCBlbXB0eTtcclxuICAgICAgICAgIGV2ZW50LmN1cnJlbnRTY29wZSA9IHNjb3BlO1xyXG4gICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gbmFtZWRMaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIGxpc3RlbmVycyB3ZXJlIGRlcmVnaXN0ZXJlZCwgZGVmcmFnbWVudCB0aGUgYXJyYXlcclxuICAgICAgICAgICAgaWYgKCFuYW1lZExpc3RlbmVyc1tpXSkge1xyXG4gICAgICAgICAgICAgIG5hbWVkTGlzdGVuZXJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICBpLS07XHJcbiAgICAgICAgICAgICAgbGVuZ3RoLS07XHJcbiAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAvL2FsbG93IGFsbCBsaXN0ZW5lcnMgYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnQgc2NvcGUgdG8gcnVuXHJcbiAgICAgICAgICAgICAgbmFtZWRMaXN0ZW5lcnNbaV0uYXBwbHkobnVsbCwgbGlzdGVuZXJBcmdzKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvL2lmIGFueSBsaXN0ZW5lciBvbiB0aGUgY3VycmVudCBzY29wZSBzdG9wcyBwcm9wYWdhdGlvbiwgcHJldmVudCBidWJibGluZ1xyXG4gICAgICAgICAgaWYgKHN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgICAgICBldmVudC5jdXJyZW50U2NvcGUgPSBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvL3RyYXZlcnNlIHVwd2FyZHNcclxuICAgICAgICAgIHNjb3BlID0gc2NvcGUuJHBhcmVudDtcclxuICAgICAgICB9IHdoaWxlIChzY29wZSk7XHJcblxyXG4gICAgICAgIGV2ZW50LmN1cnJlbnRTY29wZSA9IG51bGw7XHJcblxyXG4gICAgICAgIHJldHVybiBldmVudDtcclxuICAgICAgfSxcclxuXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICAgKiBAbmFtZSAkcm9vdFNjb3BlLlNjb3BlIyRicm9hZGNhc3RcclxuICAgICAgICogQGtpbmQgZnVuY3Rpb25cclxuICAgICAgICpcclxuICAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICAqIERpc3BhdGNoZXMgYW4gZXZlbnQgYG5hbWVgIGRvd253YXJkcyB0byBhbGwgY2hpbGQgc2NvcGVzIChhbmQgdGhlaXIgY2hpbGRyZW4pIG5vdGlmeWluZyB0aGVcclxuICAgICAgICogcmVnaXN0ZXJlZCB7QGxpbmsgbmcuJHJvb3RTY29wZS5TY29wZSMkb259IGxpc3RlbmVycy5cclxuICAgICAgICpcclxuICAgICAgICogVGhlIGV2ZW50IGxpZmUgY3ljbGUgc3RhcnRzIGF0IHRoZSBzY29wZSBvbiB3aGljaCBgJGJyb2FkY2FzdGAgd2FzIGNhbGxlZC4gQWxsXHJcbiAgICAgICAqIHtAbGluayBuZy4kcm9vdFNjb3BlLlNjb3BlIyRvbiBsaXN0ZW5lcnN9IGxpc3RlbmluZyBmb3IgYG5hbWVgIGV2ZW50IG9uIHRoaXMgc2NvcGUgZ2V0XHJcbiAgICAgICAqIG5vdGlmaWVkLiBBZnRlcndhcmRzLCB0aGUgZXZlbnQgcHJvcGFnYXRlcyB0byBhbGwgZGlyZWN0IGFuZCBpbmRpcmVjdCBzY29wZXMgb2YgdGhlIGN1cnJlbnRcclxuICAgICAgICogc2NvcGUgYW5kIGNhbGxzIGFsbCByZWdpc3RlcmVkIGxpc3RlbmVycyBhbG9uZyB0aGUgd2F5LiBUaGUgZXZlbnQgY2Fubm90IGJlIGNhbmNlbGVkLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBBbnkgZXhjZXB0aW9uIGVtaXR0ZWQgZnJvbSB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJG9uIGxpc3RlbmVyc30gd2lsbCBiZSBwYXNzZWRcclxuICAgICAgICogb250byB0aGUge0BsaW5rIG5nLiRleGNlcHRpb25IYW5kbGVyICRleGNlcHRpb25IYW5kbGVyfSBzZXJ2aWNlLlxyXG4gICAgICAgKlxyXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBFdmVudCBuYW1lIHRvIGJyb2FkY2FzdC5cclxuICAgICAgICogQHBhcmFtIHsuLi4qfSBhcmdzIE9wdGlvbmFsIG9uZSBvciBtb3JlIGFyZ3VtZW50cyB3aGljaCB3aWxsIGJlIHBhc3NlZCBvbnRvIHRoZSBldmVudCBsaXN0ZW5lcnMuXHJcbiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gRXZlbnQgb2JqZWN0LCBzZWUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJG9ufVxyXG4gICAgICAgKi9cclxuICAgICAgJGJyb2FkY2FzdDogZnVuY3Rpb24obmFtZSwgYXJncykge1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLFxyXG4gICAgICAgICAgICBjdXJyZW50ID0gdGFyZ2V0LFxyXG4gICAgICAgICAgICBuZXh0ID0gdGFyZ2V0LFxyXG4gICAgICAgICAgICBldmVudCA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICAgIHRhcmdldFNjb3BlOiB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBkZWZhdWx0UHJldmVudGVkOiBmYWxzZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoIXRhcmdldC4kJGxpc3RlbmVyQ291bnRbbmFtZV0pIHJldHVybiBldmVudDtcclxuXHJcbiAgICAgICAgdmFyIGxpc3RlbmVyQXJncyA9IGNvbmNhdChbZXZlbnRdLCBhcmd1bWVudHMsIDEpLFxyXG4gICAgICAgICAgICBsaXN0ZW5lcnMsIGksIGxlbmd0aDtcclxuXHJcbiAgICAgICAgLy9kb3duIHdoaWxlIHlvdSBjYW4sIHRoZW4gdXAgYW5kIG5leHQgc2libGluZyBvciB1cCBhbmQgbmV4dCBzaWJsaW5nIHVudGlsIGJhY2sgYXQgcm9vdFxyXG4gICAgICAgIHdoaWxlICgoY3VycmVudCA9IG5leHQpKSB7XHJcbiAgICAgICAgICBldmVudC5jdXJyZW50U2NvcGUgPSBjdXJyZW50O1xyXG4gICAgICAgICAgbGlzdGVuZXJzID0gY3VycmVudC4kJGxpc3RlbmVyc1tuYW1lXSB8fCBbXTtcclxuICAgICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAvLyBpZiBsaXN0ZW5lcnMgd2VyZSBkZXJlZ2lzdGVyZWQsIGRlZnJhZ21lbnQgdGhlIGFycmF5XHJcbiAgICAgICAgICAgIGlmICghbGlzdGVuZXJzW2ldKSB7XHJcbiAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICBpLS07XHJcbiAgICAgICAgICAgICAgbGVuZ3RoLS07XHJcbiAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgbGlzdGVuZXJzW2ldLmFwcGx5KG51bGwsIGxpc3RlbmVyQXJncyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEluc2FuaXR5IFdhcm5pbmc6IHNjb3BlIGRlcHRoLWZpcnN0IHRyYXZlcnNhbFxyXG4gICAgICAgICAgLy8geWVzLCB0aGlzIGNvZGUgaXMgYSBiaXQgY3JhenksIGJ1dCBpdCB3b3JrcyBhbmQgd2UgaGF2ZSB0ZXN0cyB0byBwcm92ZSBpdCFcclxuICAgICAgICAgIC8vIHRoaXMgcGllY2Ugc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSB0cmF2ZXJzYWwgaW4gJGRpZ2VzdFxyXG4gICAgICAgICAgLy8gKHRob3VnaCBpdCBkaWZmZXJzIGR1ZSB0byBoYXZpbmcgdGhlIGV4dHJhIGNoZWNrIGZvciAkJGxpc3RlbmVyQ291bnQpXHJcbiAgICAgICAgICBpZiAoIShuZXh0ID0gKChjdXJyZW50LiQkbGlzdGVuZXJDb3VudFtuYW1lXSAmJiBjdXJyZW50LiQkY2hpbGRIZWFkKSB8fFxyXG4gICAgICAgICAgICAgIChjdXJyZW50ICE9PSB0YXJnZXQgJiYgY3VycmVudC4kJG5leHRTaWJsaW5nKSkpKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChjdXJyZW50ICE9PSB0YXJnZXQgJiYgIShuZXh0ID0gY3VycmVudC4kJG5leHRTaWJsaW5nKSkge1xyXG4gICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LiRwYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV2ZW50LmN1cnJlbnRTY29wZSA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50O1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciAkcm9vdFNjb3BlID0gbmV3IFNjb3BlKCk7XHJcblxyXG4gICAgLy9UaGUgaW50ZXJuYWwgcXVldWVzLiBFeHBvc2UgdGhlbSBvbiB0aGUgJHJvb3RTY29wZSBmb3IgZGVidWdnaW5nL3Rlc3RpbmcgcHVycG9zZXMuXHJcbiAgICB2YXIgYXN5bmNRdWV1ZSA9ICRyb290U2NvcGUuJCRhc3luY1F1ZXVlID0gW107XHJcbiAgICB2YXIgcG9zdERpZ2VzdFF1ZXVlID0gJHJvb3RTY29wZS4kJHBvc3REaWdlc3RRdWV1ZSA9IFtdO1xyXG4gICAgdmFyIGFwcGx5QXN5bmNRdWV1ZSA9ICRyb290U2NvcGUuJCRhcHBseUFzeW5jUXVldWUgPSBbXTtcclxuXHJcbiAgICByZXR1cm4gJHJvb3RTY29wZTtcclxuXHJcblxyXG4gICAgZnVuY3Rpb24gYmVnaW5QaGFzZShwaGFzZSkge1xyXG4gICAgICBpZiAoJHJvb3RTY29wZS4kJHBoYXNlKSB7XHJcbiAgICAgICAgdGhyb3cgJHJvb3RTY29wZU1pbkVycignaW5wcm9nJywgJ3swfSBhbHJlYWR5IGluIHByb2dyZXNzJywgJHJvb3RTY29wZS4kJHBoYXNlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJHJvb3RTY29wZS4kJHBoYXNlID0gcGhhc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2xlYXJQaGFzZSgpIHtcclxuICAgICAgJHJvb3RTY29wZS4kJHBoYXNlID0gbnVsbDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gZGVjcmVtZW50TGlzdGVuZXJDb3VudChjdXJyZW50LCBjb3VudCwgbmFtZSkge1xyXG4gICAgICBkbyB7XHJcbiAgICAgICAgY3VycmVudC4kJGxpc3RlbmVyQ291bnRbbmFtZV0gLT0gY291bnQ7XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50LiQkbGlzdGVuZXJDb3VudFtuYW1lXSA9PT0gMCkge1xyXG4gICAgICAgICAgZGVsZXRlIGN1cnJlbnQuJCRsaXN0ZW5lckNvdW50W25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSB3aGlsZSAoKGN1cnJlbnQgPSBjdXJyZW50LiRwYXJlbnQpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGZ1bmN0aW9uIHVzZWQgYXMgYW4gaW5pdGlhbCB2YWx1ZSBmb3Igd2F0Y2hlcnMuXHJcbiAgICAgKiBiZWNhdXNlIGl0J3MgdW5pcXVlIHdlIGNhbiBlYXNpbHkgdGVsbCBpdCBhcGFydCBmcm9tIG90aGVyIHZhbHVlc1xyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBpbml0V2F0Y2hWYWwoKSB7fVxyXG5cclxuICAgIGZ1bmN0aW9uIGZsdXNoQXBwbHlBc3luYygpIHtcclxuICAgICAgd2hpbGUgKGFwcGx5QXN5bmNRdWV1ZS5sZW5ndGgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgYXBwbHlBc3luY1F1ZXVlLnNoaWZ0KCkoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgYXBwbHlBc3luY0lkID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzY2hlZHVsZUFwcGx5QXN5bmMoKSB7XHJcbiAgICAgIGlmIChhcHBseUFzeW5jSWQgPT09IG51bGwpIHtcclxuICAgICAgICBhcHBseUFzeW5jSWQgPSAkYnJvd3Nlci5kZWZlcihmdW5jdGlvbigpIHtcclxuICAgICAgICAgICRyb290U2NvcGUuJGFwcGx5KGZsdXNoQXBwbHlBc3luYyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBQcml2YXRlIHNlcnZpY2UgdG8gc2FuaXRpemUgdXJpcyBmb3IgbGlua3MgYW5kIGltYWdlcy4gVXNlZCBieSAkY29tcGlsZSBhbmQgJHNhbml0aXplLlxyXG4gKi9cclxuZnVuY3Rpb24gJCRTYW5pdGl6ZVVyaVByb3ZpZGVyKCkge1xyXG4gIHZhciBhSHJlZlNhbml0aXphdGlvbldoaXRlbGlzdCA9IC9eXFxzKihodHRwcz98ZnRwfG1haWx0b3x0ZWx8ZmlsZSk6LyxcclxuICAgIGltZ1NyY1Nhbml0aXphdGlvbldoaXRlbGlzdCA9IC9eXFxzKigoaHR0cHM/fGZ0cHxmaWxlfGJsb2IpOnxkYXRhOmltYWdlXFwvKS87XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIFJldHJpZXZlcyBvciBvdmVycmlkZXMgdGhlIGRlZmF1bHQgcmVndWxhciBleHByZXNzaW9uIHRoYXQgaXMgdXNlZCBmb3Igd2hpdGVsaXN0aW5nIG9mIHNhZmVcclxuICAgKiB1cmxzIGR1cmluZyBhW2hyZWZdIHNhbml0aXphdGlvbi5cclxuICAgKlxyXG4gICAqIFRoZSBzYW5pdGl6YXRpb24gaXMgYSBzZWN1cml0eSBtZWFzdXJlIGFpbWVkIGF0IHByZXZlbnQgWFNTIGF0dGFja3MgdmlhIGh0bWwgbGlua3MuXHJcbiAgICpcclxuICAgKiBBbnkgdXJsIGFib3V0IHRvIGJlIGFzc2lnbmVkIHRvIGFbaHJlZl0gdmlhIGRhdGEtYmluZGluZyBpcyBmaXJzdCBub3JtYWxpemVkIGFuZCB0dXJuZWQgaW50b1xyXG4gICAqIGFuIGFic29sdXRlIHVybC4gQWZ0ZXJ3YXJkcywgdGhlIHVybCBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIGBhSHJlZlNhbml0aXphdGlvbldoaXRlbGlzdGBcclxuICAgKiByZWd1bGFyIGV4cHJlc3Npb24uIElmIGEgbWF0Y2ggaXMgZm91bmQsIHRoZSBvcmlnaW5hbCB1cmwgaXMgd3JpdHRlbiBpbnRvIHRoZSBkb20uIE90aGVyd2lzZSxcclxuICAgKiB0aGUgYWJzb2x1dGUgdXJsIGlzIHByZWZpeGVkIHdpdGggYCd1bnNhZmU6J2Agc3RyaW5nIGFuZCBvbmx5IHRoZW4gaXMgaXQgd3JpdHRlbiBpbnRvIHRoZSBET00uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1JlZ0V4cD19IHJlZ2V4cCBOZXcgcmVnZXhwIHRvIHdoaXRlbGlzdCB1cmxzIHdpdGguXHJcbiAgICogQHJldHVybnMge1JlZ0V4cHxuZy4kY29tcGlsZVByb3ZpZGVyfSBDdXJyZW50IFJlZ0V4cCBpZiBjYWxsZWQgd2l0aG91dCB2YWx1ZSBvciBzZWxmIGZvclxyXG4gICAqICAgIGNoYWluaW5nIG90aGVyd2lzZS5cclxuICAgKi9cclxuICB0aGlzLmFIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0ID0gZnVuY3Rpb24ocmVnZXhwKSB7XHJcbiAgICBpZiAoaXNEZWZpbmVkKHJlZ2V4cCkpIHtcclxuICAgICAgYUhyZWZTYW5pdGl6YXRpb25XaGl0ZWxpc3QgPSByZWdleHA7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0O1xyXG4gIH07XHJcblxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBSZXRyaWV2ZXMgb3Igb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGlzIHVzZWQgZm9yIHdoaXRlbGlzdGluZyBvZiBzYWZlXHJcbiAgICogdXJscyBkdXJpbmcgaW1nW3NyY10gc2FuaXRpemF0aW9uLlxyXG4gICAqXHJcbiAgICogVGhlIHNhbml0aXphdGlvbiBpcyBhIHNlY3VyaXR5IG1lYXN1cmUgYWltZWQgYXQgcHJldmVudCBYU1MgYXR0YWNrcyB2aWEgaHRtbCBsaW5rcy5cclxuICAgKlxyXG4gICAqIEFueSB1cmwgYWJvdXQgdG8gYmUgYXNzaWduZWQgdG8gaW1nW3NyY10gdmlhIGRhdGEtYmluZGluZyBpcyBmaXJzdCBub3JtYWxpemVkIGFuZCB0dXJuZWQgaW50b1xyXG4gICAqIGFuIGFic29sdXRlIHVybC4gQWZ0ZXJ3YXJkcywgdGhlIHVybCBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIGBpbWdTcmNTYW5pdGl6YXRpb25XaGl0ZWxpc3RgXHJcbiAgICogcmVndWxhciBleHByZXNzaW9uLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCB0aGUgb3JpZ2luYWwgdXJsIGlzIHdyaXR0ZW4gaW50byB0aGUgZG9tLiBPdGhlcndpc2UsXHJcbiAgICogdGhlIGFic29sdXRlIHVybCBpcyBwcmVmaXhlZCB3aXRoIGAndW5zYWZlOidgIHN0cmluZyBhbmQgb25seSB0aGVuIGlzIGl0IHdyaXR0ZW4gaW50byB0aGUgRE9NLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSZWdFeHA9fSByZWdleHAgTmV3IHJlZ2V4cCB0byB3aGl0ZWxpc3QgdXJscyB3aXRoLlxyXG4gICAqIEByZXR1cm5zIHtSZWdFeHB8bmcuJGNvbXBpbGVQcm92aWRlcn0gQ3VycmVudCBSZWdFeHAgaWYgY2FsbGVkIHdpdGhvdXQgdmFsdWUgb3Igc2VsZiBmb3JcclxuICAgKiAgICBjaGFpbmluZyBvdGhlcndpc2UuXHJcbiAgICovXHJcbiAgdGhpcy5pbWdTcmNTYW5pdGl6YXRpb25XaGl0ZWxpc3QgPSBmdW5jdGlvbihyZWdleHApIHtcclxuICAgIGlmIChpc0RlZmluZWQocmVnZXhwKSkge1xyXG4gICAgICBpbWdTcmNTYW5pdGl6YXRpb25XaGl0ZWxpc3QgPSByZWdleHA7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGltZ1NyY1Nhbml0aXphdGlvbldoaXRlbGlzdDtcclxuICB9O1xyXG5cclxuICB0aGlzLiRnZXQgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBzYW5pdGl6ZVVyaSh1cmksIGlzSW1hZ2UpIHtcclxuICAgICAgdmFyIHJlZ2V4ID0gaXNJbWFnZSA/IGltZ1NyY1Nhbml0aXphdGlvbldoaXRlbGlzdCA6IGFIcmVmU2FuaXRpemF0aW9uV2hpdGVsaXN0O1xyXG4gICAgICB2YXIgbm9ybWFsaXplZFZhbDtcclxuICAgICAgbm9ybWFsaXplZFZhbCA9IHVybFJlc29sdmUodXJpKS5ocmVmO1xyXG4gICAgICBpZiAobm9ybWFsaXplZFZhbCAhPT0gJycgJiYgIW5vcm1hbGl6ZWRWYWwubWF0Y2gocmVnZXgpKSB7XHJcbiAgICAgICAgcmV0dXJuICd1bnNhZmU6JyArIG5vcm1hbGl6ZWRWYWw7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHVyaTtcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG5cclxudmFyICRzY2VNaW5FcnIgPSBtaW5FcnIoJyRzY2UnKTtcclxuXHJcbnZhciBTQ0VfQ09OVEVYVFMgPSB7XHJcbiAgSFRNTDogJ2h0bWwnLFxyXG4gIENTUzogJ2NzcycsXHJcbiAgVVJMOiAndXJsJyxcclxuICAvLyBSRVNPVVJDRV9VUkwgaXMgYSBzdWJ0eXBlIG9mIFVSTCB1c2VkIGluIGNvbnRleHRzIHdoZXJlIGEgcHJpdmlsZWdlZCByZXNvdXJjZSBpcyBzb3VyY2VkIGZyb20gYVxyXG4gIC8vIHVybC4gIChlLmcuIG5nLWluY2x1ZGUsIHNjcmlwdCBzcmMsIHRlbXBsYXRlVXJsKVxyXG4gIFJFU09VUkNFX1VSTDogJ3Jlc291cmNlVXJsJyxcclxuICBKUzogJ2pzJ1xyXG59O1xyXG5cclxuLy8gSGVscGVyIGZ1bmN0aW9ucyBmb2xsb3cuXHJcblxyXG5mdW5jdGlvbiBhZGp1c3RNYXRjaGVyKG1hdGNoZXIpIHtcclxuICBpZiAobWF0Y2hlciA9PT0gJ3NlbGYnKSB7XHJcbiAgICByZXR1cm4gbWF0Y2hlcjtcclxuICB9IGVsc2UgaWYgKGlzU3RyaW5nKG1hdGNoZXIpKSB7XHJcbiAgICAvLyBTdHJpbmdzIG1hdGNoIGV4YWN0bHkgZXhjZXB0IGZvciAyIHdpbGRjYXJkcyAtICcqJyBhbmQgJyoqJy5cclxuICAgIC8vICcqJyBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgZXhjZXB0IHRob3NlIGZyb20gdGhlIHNldCAnOi8uPyYnLlxyXG4gICAgLy8gJyoqJyBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgKGxpa2UgLiogaW4gYSBSZWdFeHApLlxyXG4gICAgLy8gTW9yZSB0aGFuIDIgKidzIHJhaXNlcyBhbiBlcnJvciBhcyBpdCdzIGlsbCBkZWZpbmVkLlxyXG4gICAgaWYgKG1hdGNoZXIuaW5kZXhPZignKioqJykgPiAtMSkge1xyXG4gICAgICB0aHJvdyAkc2NlTWluRXJyKCdpd2NhcmQnLFxyXG4gICAgICAgICAgJ0lsbGVnYWwgc2VxdWVuY2UgKioqIGluIHN0cmluZyBtYXRjaGVyLiAgU3RyaW5nOiB7MH0nLCBtYXRjaGVyKTtcclxuICAgIH1cclxuICAgIG1hdGNoZXIgPSBlc2NhcGVGb3JSZWdleHAobWF0Y2hlcikuXHJcbiAgICAgICAgICAgICAgICAgIHJlcGxhY2UoJ1xcXFwqXFxcXConLCAnLionKS5cclxuICAgICAgICAgICAgICAgICAgcmVwbGFjZSgnXFxcXConLCAnW146Ly4/JjtdKicpO1xyXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nICsgbWF0Y2hlciArICckJyk7XHJcbiAgfSBlbHNlIGlmIChpc1JlZ0V4cChtYXRjaGVyKSkge1xyXG4gICAgLy8gVGhlIG9ubHkgb3RoZXIgdHlwZSBvZiBtYXRjaGVyIGFsbG93ZWQgaXMgYSBSZWdleHAuXHJcbiAgICAvLyBNYXRjaCBlbnRpcmUgVVJMIC8gZGlzYWxsb3cgcGFydGlhbCBtYXRjaGVzLlxyXG4gICAgLy8gRmxhZ3MgYXJlIHJlc2V0IChpLmUuIG5vIGdsb2JhbCwgaWdub3JlQ2FzZSBvciBtdWx0aWxpbmUpXHJcbiAgICByZXR1cm4gbmV3IFJlZ0V4cCgnXicgKyBtYXRjaGVyLnNvdXJjZSArICckJyk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93ICRzY2VNaW5FcnIoJ2ltYXRjaGVyJyxcclxuICAgICAgICAnTWF0Y2hlcnMgbWF5IG9ubHkgYmUgXCJzZWxmXCIsIHN0cmluZyBwYXR0ZXJucyBvciBSZWdFeHAgb2JqZWN0cycpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGFkanVzdE1hdGNoZXJzKG1hdGNoZXJzKSB7XHJcbiAgdmFyIGFkanVzdGVkTWF0Y2hlcnMgPSBbXTtcclxuICBpZiAoaXNEZWZpbmVkKG1hdGNoZXJzKSkge1xyXG4gICAgZm9yRWFjaChtYXRjaGVycywgZnVuY3Rpb24obWF0Y2hlcikge1xyXG4gICAgICBhZGp1c3RlZE1hdGNoZXJzLnB1c2goYWRqdXN0TWF0Y2hlcihtYXRjaGVyKSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmV0dXJuIGFkanVzdGVkTWF0Y2hlcnM7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIHNlcnZpY2VcclxuICogQG5hbWUgJHNjZURlbGVnYXRlXHJcbiAqIEBraW5kIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKlxyXG4gKiBgJHNjZURlbGVnYXRlYCBpcyBhIHNlcnZpY2UgdGhhdCBpcyB1c2VkIGJ5IHRoZSBgJHNjZWAgc2VydmljZSB0byBwcm92aWRlIHtAbGluayBuZy4kc2NlIFN0cmljdFxyXG4gKiBDb250ZXh0dWFsIEVzY2FwaW5nIChTQ0UpfSBzZXJ2aWNlcyB0byBBbmd1bGFySlMuXHJcbiAqXHJcbiAqIFR5cGljYWxseSwgeW91IHdvdWxkIGNvbmZpZ3VyZSBvciBvdmVycmlkZSB0aGUge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZSAkc2NlRGVsZWdhdGV9IGluc3RlYWQgb2ZcclxuICogdGhlIGAkc2NlYCBzZXJ2aWNlIHRvIGN1c3RvbWl6ZSB0aGUgd2F5IFN0cmljdCBDb250ZXh0dWFsIEVzY2FwaW5nIHdvcmtzIGluIEFuZ3VsYXJKUy4gIFRoaXMgaXNcclxuICogYmVjYXVzZSwgd2hpbGUgdGhlIGAkc2NlYCBwcm92aWRlcyBudW1lcm91cyBzaG9ydGhhbmQgbWV0aG9kcywgZXRjLiwgeW91IHJlYWxseSBvbmx5IG5lZWQgdG9cclxuICogb3ZlcnJpZGUgMyBjb3JlIGZ1bmN0aW9ucyAoYHRydXN0QXNgLCBgZ2V0VHJ1c3RlZGAgYW5kIGB2YWx1ZU9mYCkgdG8gcmVwbGFjZSB0aGUgd2F5IHRoaW5nc1xyXG4gKiB3b3JrIGJlY2F1c2UgYCRzY2VgIGRlbGVnYXRlcyB0byBgJHNjZURlbGVnYXRlYCBmb3IgdGhlc2Ugb3BlcmF0aW9ucy5cclxuICpcclxuICogUmVmZXIge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyICRzY2VEZWxlZ2F0ZVByb3ZpZGVyfSB0byBjb25maWd1cmUgdGhpcyBzZXJ2aWNlLlxyXG4gKlxyXG4gKiBUaGUgZGVmYXVsdCBpbnN0YW5jZSBvZiBgJHNjZURlbGVnYXRlYCBzaG91bGQgd29yayBvdXQgb2YgdGhlIGJveCB3aXRoIGxpdHRsZSBwYWluLiAgV2hpbGUgeW91XHJcbiAqIGNhbiBvdmVycmlkZSBpdCBjb21wbGV0ZWx5IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgYCRzY2VgLCB0aGUgY29tbW9uIGNhc2Ugd291bGRcclxuICogaW52b2x2ZSBjb25maWd1cmluZyB0aGUge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyICRzY2VEZWxlZ2F0ZVByb3ZpZGVyfSBpbnN0ZWFkIGJ5IHNldHRpbmdcclxuICogeW91ciBvd24gd2hpdGVsaXN0cyBhbmQgYmxhY2tsaXN0cyBmb3IgdHJ1c3RpbmcgVVJMcyB1c2VkIGZvciBsb2FkaW5nIEFuZ3VsYXJKUyByZXNvdXJjZXMgc3VjaCBhc1xyXG4gKiB0ZW1wbGF0ZXMuICBSZWZlciB7QGxpbmsgbmcuJHNjZURlbGVnYXRlUHJvdmlkZXIjcmVzb3VyY2VVcmxXaGl0ZWxpc3RcclxuICogJHNjZURlbGVnYXRlUHJvdmlkZXIucmVzb3VyY2VVcmxXaGl0ZWxpc3R9IGFuZCB7QGxpbmtcclxuICogbmcuJHNjZURlbGVnYXRlUHJvdmlkZXIjcmVzb3VyY2VVcmxCbGFja2xpc3QgJHNjZURlbGVnYXRlUHJvdmlkZXIucmVzb3VyY2VVcmxCbGFja2xpc3R9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBwcm92aWRlclxyXG4gKiBAbmFtZSAkc2NlRGVsZWdhdGVQcm92aWRlclxyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogVGhlIGAkc2NlRGVsZWdhdGVQcm92aWRlcmAgcHJvdmlkZXIgYWxsb3dzIGRldmVsb3BlcnMgdG8gY29uZmlndXJlIHRoZSB7QGxpbmsgbmcuJHNjZURlbGVnYXRlXHJcbiAqICRzY2VEZWxlZ2F0ZX0gc2VydmljZS4gIFRoaXMgYWxsb3dzIG9uZSB0byBnZXQvc2V0IHRoZSB3aGl0ZWxpc3RzIGFuZCBibGFja2xpc3RzIHVzZWQgdG8gZW5zdXJlXHJcbiAqIHRoYXQgdGhlIFVSTHMgdXNlZCBmb3Igc291cmNpbmcgQW5ndWxhciB0ZW1wbGF0ZXMgYXJlIHNhZmUuICBSZWZlciB7QGxpbmtcclxuICogbmcuJHNjZURlbGVnYXRlUHJvdmlkZXIjcmVzb3VyY2VVcmxXaGl0ZWxpc3QgJHNjZURlbGVnYXRlUHJvdmlkZXIucmVzb3VyY2VVcmxXaGl0ZWxpc3R9IGFuZFxyXG4gKiB7QGxpbmsgbmcuJHNjZURlbGVnYXRlUHJvdmlkZXIjcmVzb3VyY2VVcmxCbGFja2xpc3QgJHNjZURlbGVnYXRlUHJvdmlkZXIucmVzb3VyY2VVcmxCbGFja2xpc3R9XHJcbiAqXHJcbiAqIEZvciB0aGUgZ2VuZXJhbCBkZXRhaWxzIGFib3V0IHRoaXMgc2VydmljZSBpbiBBbmd1bGFyLCByZWFkIHRoZSBtYWluIHBhZ2UgZm9yIHtAbGluayBuZy4kc2NlXHJcbiAqIFN0cmljdCBDb250ZXh0dWFsIEVzY2FwaW5nIChTQ0UpfS5cclxuICpcclxuICogKipFeGFtcGxlKio6ICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGNhc2UuIDxhIG5hbWU9XCJleGFtcGxlXCI+PC9hPlxyXG4gKlxyXG4gKiAtIHlvdXIgYXBwIGlzIGhvc3RlZCBhdCB1cmwgYGh0dHA6Ly9teWFwcC5leGFtcGxlLmNvbS9gXHJcbiAqIC0gYnV0IHNvbWUgb2YgeW91ciB0ZW1wbGF0ZXMgYXJlIGhvc3RlZCBvbiBvdGhlciBkb21haW5zIHlvdSBjb250cm9sIHN1Y2ggYXNcclxuICogICBgaHR0cDovL3NydjAxLmFzc2V0cy5leGFtcGxlLmNvbS9gLMKgIGBodHRwOi8vc3J2MDIuYXNzZXRzLmV4YW1wbGUuY29tL2AsIGV0Yy5cclxuICogLSBhbmQgeW91IGhhdmUgYW4gb3BlbiByZWRpcmVjdCBhdCBgaHR0cDovL215YXBwLmV4YW1wbGUuY29tL2NsaWNrVGhydT8uLi5gLlxyXG4gKlxyXG4gKiBIZXJlIGlzIHdoYXQgYSBzZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBzY2VuYXJpbyBtaWdodCBsb29rIGxpa2U6XHJcbiAqXHJcbiAqIGBgYFxyXG4gKiAgYW5ndWxhci5tb2R1bGUoJ215QXBwJywgW10pLmNvbmZpZyhmdW5jdGlvbigkc2NlRGVsZWdhdGVQcm92aWRlcikge1xyXG4gKiAgICAkc2NlRGVsZWdhdGVQcm92aWRlci5yZXNvdXJjZVVybFdoaXRlbGlzdChbXHJcbiAqICAgICAgLy8gQWxsb3cgc2FtZSBvcmlnaW4gcmVzb3VyY2UgbG9hZHMuXHJcbiAqICAgICAgJ3NlbGYnLFxyXG4gKiAgICAgIC8vIEFsbG93IGxvYWRpbmcgZnJvbSBvdXIgYXNzZXRzIGRvbWFpbi4gIE5vdGljZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuICogYW5kICoqLlxyXG4gKiAgICAgICdodHRwOi8vc3J2Ki5hc3NldHMuZXhhbXBsZS5jb20vKionXHJcbiAqICAgIF0pO1xyXG4gKlxyXG4gKiAgICAvLyBUaGUgYmxhY2tsaXN0IG92ZXJyaWRlcyB0aGUgd2hpdGVsaXN0IHNvIHRoZSBvcGVuIHJlZGlyZWN0IGhlcmUgaXMgYmxvY2tlZC5cclxuICogICAgJHNjZURlbGVnYXRlUHJvdmlkZXIucmVzb3VyY2VVcmxCbGFja2xpc3QoW1xyXG4gKiAgICAgICdodHRwOi8vbXlhcHAuZXhhbXBsZS5jb20vY2xpY2tUaHJ1KionXHJcbiAqICAgIF0pO1xyXG4gKiAgfSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuXHJcbmZ1bmN0aW9uICRTY2VEZWxlZ2F0ZVByb3ZpZGVyKCkge1xyXG4gIHRoaXMuU0NFX0NPTlRFWFRTID0gU0NFX0NPTlRFWFRTO1xyXG5cclxuICAvLyBSZXNvdXJjZSBVUkxzIGNhbiBhbHNvIGJlIHRydXN0ZWQgYnkgcG9saWN5LlxyXG4gIHZhciByZXNvdXJjZVVybFdoaXRlbGlzdCA9IFsnc2VsZiddLFxyXG4gICAgICByZXNvdXJjZVVybEJsYWNrbGlzdCA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgJHNjZURlbGVnYXRlUHJvdmlkZXIjcmVzb3VyY2VVcmxXaGl0ZWxpc3RcclxuICAgKiBAa2luZCBmdW5jdGlvblxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheT19IHdoaXRlbGlzdCBXaGVuIHByb3ZpZGVkLCByZXBsYWNlcyB0aGUgcmVzb3VyY2VVcmxXaGl0ZWxpc3Qgd2l0aCB0aGUgdmFsdWVcclxuICAgKiAgICAgcHJvdmlkZWQuICBUaGlzIG11c3QgYmUgYW4gYXJyYXkgb3IgbnVsbC4gIEEgc25hcHNob3Qgb2YgdGhpcyBhcnJheSBpcyB1c2VkIHNvIGZ1cnRoZXJcclxuICAgKiAgICAgY2hhbmdlcyB0byB0aGUgYXJyYXkgYXJlIGlnbm9yZWQuXHJcbiAgICpcclxuICAgKiAgICAgRm9sbG93IHtAbGluayBuZy4kc2NlI3Jlc291cmNlVXJsUGF0dGVybkl0ZW0gdGhpcyBsaW5rfSBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgaXRlbXNcclxuICAgKiAgICAgYWxsb3dlZCBpbiB0aGlzIGFycmF5LlxyXG4gICAqXHJcbiAgICogICAgIE5vdGU6ICoqYW4gZW1wdHkgd2hpdGVsaXN0IGFycmF5IHdpbGwgYmxvY2sgYWxsIFVSTHMqKiFcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0FycmF5fSB0aGUgY3VycmVudGx5IHNldCB3aGl0ZWxpc3QgYXJyYXkuXHJcbiAgICpcclxuICAgKiBUaGUgKipkZWZhdWx0IHZhbHVlKiogd2hlbiBubyB3aGl0ZWxpc3QgaGFzIGJlZW4gZXhwbGljaXRseSBzZXQgaXMgYFsnc2VsZiddYCBhbGxvd2luZyBvbmx5XHJcbiAgICogc2FtZSBvcmlnaW4gcmVzb3VyY2UgcmVxdWVzdHMuXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBTZXRzL0dldHMgdGhlIHdoaXRlbGlzdCBvZiB0cnVzdGVkIHJlc291cmNlIFVSTHMuXHJcbiAgICovXHJcbiAgdGhpcy5yZXNvdXJjZVVybFdoaXRlbGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICByZXNvdXJjZVVybFdoaXRlbGlzdCA9IGFkanVzdE1hdGNoZXJzKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXNvdXJjZVVybFdoaXRlbGlzdDtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgJHNjZURlbGVnYXRlUHJvdmlkZXIjcmVzb3VyY2VVcmxCbGFja2xpc3RcclxuICAgKiBAa2luZCBmdW5jdGlvblxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheT19IGJsYWNrbGlzdCBXaGVuIHByb3ZpZGVkLCByZXBsYWNlcyB0aGUgcmVzb3VyY2VVcmxCbGFja2xpc3Qgd2l0aCB0aGUgdmFsdWVcclxuICAgKiAgICAgcHJvdmlkZWQuICBUaGlzIG11c3QgYmUgYW4gYXJyYXkgb3IgbnVsbC4gIEEgc25hcHNob3Qgb2YgdGhpcyBhcnJheSBpcyB1c2VkIHNvIGZ1cnRoZXJcclxuICAgKiAgICAgY2hhbmdlcyB0byB0aGUgYXJyYXkgYXJlIGlnbm9yZWQuXHJcbiAgICpcclxuICAgKiAgICAgRm9sbG93IHtAbGluayBuZy4kc2NlI3Jlc291cmNlVXJsUGF0dGVybkl0ZW0gdGhpcyBsaW5rfSBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgaXRlbXNcclxuICAgKiAgICAgYWxsb3dlZCBpbiB0aGlzIGFycmF5LlxyXG4gICAqXHJcbiAgICogICAgIFRoZSB0eXBpY2FsIHVzYWdlIGZvciB0aGUgYmxhY2tsaXN0IGlzIHRvICoqYmxvY2tcclxuICAgKiAgICAgW29wZW4gcmVkaXJlY3RzXShodHRwOi8vY3dlLm1pdHJlLm9yZy9kYXRhL2RlZmluaXRpb25zLzYwMS5odG1sKSoqIHNlcnZlZCBieSB5b3VyIGRvbWFpbiBhc1xyXG4gICAqICAgICB0aGVzZSB3b3VsZCBvdGhlcndpc2UgYmUgdHJ1c3RlZCBidXQgYWN0dWFsbHkgcmV0dXJuIGNvbnRlbnQgZnJvbSB0aGUgcmVkaXJlY3RlZCBkb21haW4uXHJcbiAgICpcclxuICAgKiAgICAgRmluYWxseSwgKip0aGUgYmxhY2tsaXN0IG92ZXJyaWRlcyB0aGUgd2hpdGVsaXN0KiogYW5kIGhhcyB0aGUgZmluYWwgc2F5LlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7QXJyYXl9IHRoZSBjdXJyZW50bHkgc2V0IGJsYWNrbGlzdCBhcnJheS5cclxuICAgKlxyXG4gICAqIFRoZSAqKmRlZmF1bHQgdmFsdWUqKiB3aGVuIG5vIHdoaXRlbGlzdCBoYXMgYmVlbiBleHBsaWNpdGx5IHNldCBpcyB0aGUgZW1wdHkgYXJyYXkgKGkuZS4gdGhlcmVcclxuICAgKiBpcyBubyBibGFja2xpc3QuKVxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogU2V0cy9HZXRzIHRoZSBibGFja2xpc3Qgb2YgdHJ1c3RlZCByZXNvdXJjZSBVUkxzLlxyXG4gICAqL1xyXG5cclxuICB0aGlzLnJlc291cmNlVXJsQmxhY2tsaXN0ID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgIHJlc291cmNlVXJsQmxhY2tsaXN0ID0gYWRqdXN0TWF0Y2hlcnModmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc291cmNlVXJsQmxhY2tsaXN0O1xyXG4gIH07XHJcblxyXG4gIHRoaXMuJGdldCA9IFsnJGluamVjdG9yJywgZnVuY3Rpb24oJGluamVjdG9yKSB7XHJcblxyXG4gICAgdmFyIGh0bWxTYW5pdGl6ZXIgPSBmdW5jdGlvbiBodG1sU2FuaXRpemVyKGh0bWwpIHtcclxuICAgICAgdGhyb3cgJHNjZU1pbkVycigndW5zYWZlJywgJ0F0dGVtcHRpbmcgdG8gdXNlIGFuIHVuc2FmZSB2YWx1ZSBpbiBhIHNhZmUgY29udGV4dC4nKTtcclxuICAgIH07XHJcblxyXG4gICAgaWYgKCRpbmplY3Rvci5oYXMoJyRzYW5pdGl6ZScpKSB7XHJcbiAgICAgIGh0bWxTYW5pdGl6ZXIgPSAkaW5qZWN0b3IuZ2V0KCckc2FuaXRpemUnKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gbWF0Y2hVcmwobWF0Y2hlciwgcGFyc2VkVXJsKSB7XHJcbiAgICAgIGlmIChtYXRjaGVyID09PSAnc2VsZicpIHtcclxuICAgICAgICByZXR1cm4gdXJsSXNTYW1lT3JpZ2luKHBhcnNlZFVybCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gZGVmaW5pdGVseSBhIHJlZ2V4LiAgU2VlIGFkanVzdE1hdGNoZXJzKClcclxuICAgICAgICByZXR1cm4gISFtYXRjaGVyLmV4ZWMocGFyc2VkVXJsLmhyZWYpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaXNSZXNvdXJjZVVybEFsbG93ZWRCeVBvbGljeSh1cmwpIHtcclxuICAgICAgdmFyIHBhcnNlZFVybCA9IHVybFJlc29sdmUodXJsLnRvU3RyaW5nKCkpO1xyXG4gICAgICB2YXIgaSwgbiwgYWxsb3dlZCA9IGZhbHNlO1xyXG4gICAgICAvLyBFbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgaXRlbSBmcm9tIHRoZSB3aGl0ZWxpc3QgYWxsb3dzIHRoaXMgdXJsLlxyXG4gICAgICBmb3IgKGkgPSAwLCBuID0gcmVzb3VyY2VVcmxXaGl0ZWxpc3QubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgaWYgKG1hdGNoVXJsKHJlc291cmNlVXJsV2hpdGVsaXN0W2ldLCBwYXJzZWRVcmwpKSB7XHJcbiAgICAgICAgICBhbGxvd2VkID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoYWxsb3dlZCkge1xyXG4gICAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIGl0ZW0gZnJvbSB0aGUgYmxhY2tsaXN0IGJsb2NrZWQgdGhpcyB1cmwuXHJcbiAgICAgICAgZm9yIChpID0gMCwgbiA9IHJlc291cmNlVXJsQmxhY2tsaXN0Lmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgaWYgKG1hdGNoVXJsKHJlc291cmNlVXJsQmxhY2tsaXN0W2ldLCBwYXJzZWRVcmwpKSB7XHJcbiAgICAgICAgICAgIGFsbG93ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhbGxvd2VkO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlSG9sZGVyVHlwZShCYXNlKSB7XHJcbiAgICAgIHZhciBob2xkZXJUeXBlID0gZnVuY3Rpb24gVHJ1c3RlZFZhbHVlSG9sZGVyVHlwZSh0cnVzdGVkVmFsdWUpIHtcclxuICAgICAgICB0aGlzLiQkdW53cmFwVHJ1c3RlZFZhbHVlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1c3RlZFZhbHVlO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChCYXNlKSB7XHJcbiAgICAgICAgaG9sZGVyVHlwZS5wcm90b3R5cGUgPSBuZXcgQmFzZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGhvbGRlclR5cGUucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiBzY2VWYWx1ZU9mKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiQkdW53cmFwVHJ1c3RlZFZhbHVlKCk7XHJcbiAgICAgIH07XHJcbiAgICAgIGhvbGRlclR5cGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gc2NlVG9TdHJpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJCR1bndyYXBUcnVzdGVkVmFsdWUoKS50b1N0cmluZygpO1xyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gaG9sZGVyVHlwZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdHJ1c3RlZFZhbHVlSG9sZGVyQmFzZSA9IGdlbmVyYXRlSG9sZGVyVHlwZSgpLFxyXG4gICAgICAgIGJ5VHlwZSA9IHt9O1xyXG5cclxuICAgIGJ5VHlwZVtTQ0VfQ09OVEVYVFMuSFRNTF0gPSBnZW5lcmF0ZUhvbGRlclR5cGUodHJ1c3RlZFZhbHVlSG9sZGVyQmFzZSk7XHJcbiAgICBieVR5cGVbU0NFX0NPTlRFWFRTLkNTU10gPSBnZW5lcmF0ZUhvbGRlclR5cGUodHJ1c3RlZFZhbHVlSG9sZGVyQmFzZSk7XHJcbiAgICBieVR5cGVbU0NFX0NPTlRFWFRTLlVSTF0gPSBnZW5lcmF0ZUhvbGRlclR5cGUodHJ1c3RlZFZhbHVlSG9sZGVyQmFzZSk7XHJcbiAgICBieVR5cGVbU0NFX0NPTlRFWFRTLkpTXSA9IGdlbmVyYXRlSG9sZGVyVHlwZSh0cnVzdGVkVmFsdWVIb2xkZXJCYXNlKTtcclxuICAgIGJ5VHlwZVtTQ0VfQ09OVEVYVFMuUkVTT1VSQ0VfVVJMXSA9IGdlbmVyYXRlSG9sZGVyVHlwZShieVR5cGVbU0NFX0NPTlRFWFRTLlVSTF0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICogQG5hbWUgJHNjZURlbGVnYXRlI3RydXN0QXNcclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgaXMgdHJ1c3RlZCBieSBhbmd1bGFyIGZvciB1c2UgaW4gc3BlY2lmaWVkIHN0cmljdFxyXG4gICAgICogY29udGV4dHVhbCBlc2NhcGluZyBjb250ZXh0cyAoc3VjaCBhcyBuZy1iaW5kLWh0bWwsIG5nLWluY2x1ZGUsIGFueSBzcmNcclxuICAgICAqIGF0dHJpYnV0ZSBpbnRlcnBvbGF0aW9uLCBhbnkgZG9tIGV2ZW50IGJpbmRpbmcgYXR0cmlidXRlIGludGVycG9sYXRpb25cclxuICAgICAqIHN1Y2ggYXMgZm9yIG9uY2xpY2ssICBldGMuKSB0aGF0IHVzZXMgdGhlIHByb3ZpZGVkIHZhbHVlLlxyXG4gICAgICogU2VlIHtAbGluayBuZy4kc2NlICRzY2V9IGZvciBlbmFibGluZyBzdHJpY3QgY29udGV4dHVhbCBlc2NhcGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUga2luZCBvZiBjb250ZXh0IGluIHdoaWNoIHRoaXMgdmFsdWUgaXMgc2FmZSBmb3IgdXNlLiAgZS5nLiB1cmwsXHJcbiAgICAgKiAgIHJlc291cmNlVXJsLCBodG1sLCBqcyBhbmQgY3NzLlxyXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdGhhdCB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkIHRydXN0ZWQvc2FmZS5cclxuICAgICAqIEByZXR1cm5zIHsqfSBBIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gc3RhbmQgaW4gZm9yIHRoZSBwcm92aWRlZCBgdmFsdWVgIGluIHBsYWNlc1xyXG4gICAgICogd2hlcmUgQW5ndWxhciBleHBlY3RzIGEgJHNjZS50cnVzdEFzKCkgcmV0dXJuIHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiB0cnVzdEFzKHR5cGUsIHRydXN0ZWRWYWx1ZSkge1xyXG4gICAgICB2YXIgQ29uc3RydWN0b3IgPSAoYnlUeXBlLmhhc093blByb3BlcnR5KHR5cGUpID8gYnlUeXBlW3R5cGVdIDogbnVsbCk7XHJcbiAgICAgIGlmICghQ29uc3RydWN0b3IpIHtcclxuICAgICAgICB0aHJvdyAkc2NlTWluRXJyKCdpY29udGV4dCcsXHJcbiAgICAgICAgICAgICdBdHRlbXB0ZWQgdG8gdHJ1c3QgYSB2YWx1ZSBpbiBpbnZhbGlkIGNvbnRleHQuIENvbnRleHQ6IHswfTsgVmFsdWU6IHsxfScsXHJcbiAgICAgICAgICAgIHR5cGUsIHRydXN0ZWRWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRydXN0ZWRWYWx1ZSA9PT0gbnVsbCB8fCB0cnVzdGVkVmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0cnVzdGVkVmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydXN0ZWRWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICAvLyBBbGwgdGhlIGN1cnJlbnQgY29udGV4dHMgaW4gU0NFX0NPTlRFWFRTIGhhcHBlbiB0byBiZSBzdHJpbmdzLiAgSW4gb3JkZXIgdG8gYXZvaWQgdHJ1c3RpbmdcclxuICAgICAgLy8gbXV0YWJsZSBvYmplY3RzLCB3ZSBlbnN1cmUgaGVyZSB0aGF0IHRoZSB2YWx1ZSBwYXNzZWQgaW4gaXMgYWN0dWFsbHkgYSBzdHJpbmcuXHJcbiAgICAgIGlmICh0eXBlb2YgdHJ1c3RlZFZhbHVlICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93ICRzY2VNaW5FcnIoJ2l0eXBlJyxcclxuICAgICAgICAgICAgJ0F0dGVtcHRlZCB0byB0cnVzdCBhIG5vbi1zdHJpbmcgdmFsdWUgaW4gYSBjb250ZW50IHJlcXVpcmluZyBhIHN0cmluZzogQ29udGV4dDogezB9JyxcclxuICAgICAgICAgICAgdHlwZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0cnVzdGVkVmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICogQG5hbWUgJHNjZURlbGVnYXRlI3ZhbHVlT2ZcclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIElmIHRoZSBwYXNzZWQgcGFyYW1ldGVyIGhhZCBiZWVuIHJldHVybmVkIGJ5IGEgcHJpb3IgY2FsbCB0byB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXNcclxuICAgICAqIGAkc2NlRGVsZWdhdGUudHJ1c3RBc2B9LCByZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IGhhZCBiZWVuIHBhc3NlZCB0byB7QGxpbmtcclxuICAgICAqIG5nLiRzY2VEZWxlZ2F0ZSN0cnVzdEFzIGAkc2NlRGVsZWdhdGUudHJ1c3RBc2B9LlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBwYXNzZWQgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbHVlIHRoYXQgaGFkIGJlZW4gcmV0dXJuZWQgYnkge0BsaW5rXHJcbiAgICAgKiBuZy4kc2NlRGVsZWdhdGUjdHJ1c3RBcyBgJHNjZURlbGVnYXRlLnRydXN0QXNgfSwgcmV0dXJucyBpdCBhcy1pcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSByZXN1bHQgb2YgYSBwcmlvciB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXMgYCRzY2VEZWxlZ2F0ZS50cnVzdEFzYH1cclxuICAgICAqICAgICAgY2FsbCBvciBhbnl0aGluZyBlbHNlLlxyXG4gICAgICogQHJldHVybnMgeyp9IFRoZSBgdmFsdWVgIHRoYXQgd2FzIG9yaWdpbmFsbHkgcHJvdmlkZWQgdG8ge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZSN0cnVzdEFzXHJcbiAgICAgKiAgICAgYCRzY2VEZWxlZ2F0ZS50cnVzdEFzYH0gaWYgYHZhbHVlYCBpcyB0aGUgcmVzdWx0IG9mIHN1Y2ggYSBjYWxsLiAgT3RoZXJ3aXNlLCByZXR1cm5zXHJcbiAgICAgKiAgICAgYHZhbHVlYCB1bmNoYW5nZWQuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHZhbHVlT2YobWF5YmVUcnVzdGVkKSB7XHJcbiAgICAgIGlmIChtYXliZVRydXN0ZWQgaW5zdGFuY2VvZiB0cnVzdGVkVmFsdWVIb2xkZXJCYXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIG1heWJlVHJ1c3RlZC4kJHVud3JhcFRydXN0ZWRWYWx1ZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBtYXliZVRydXN0ZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAqIEBuYW1lICRzY2VEZWxlZ2F0ZSNnZXRUcnVzdGVkXHJcbiAgICAgKlxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiBUYWtlcyB0aGUgcmVzdWx0IG9mIGEge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZSN0cnVzdEFzIGAkc2NlRGVsZWdhdGUudHJ1c3RBc2B9IGNhbGwgYW5kXHJcbiAgICAgKiByZXR1cm5zIHRoZSBvcmlnaW5hbGx5IHN1cHBsaWVkIHZhbHVlIGlmIHRoZSBxdWVyaWVkIGNvbnRleHQgdHlwZSBpcyBhIHN1cGVydHlwZSBvZiB0aGVcclxuICAgICAqIGNyZWF0ZWQgdHlwZS4gIElmIHRoaXMgY29uZGl0aW9uIGlzbid0IHNhdGlzZmllZCwgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUga2luZCBvZiBjb250ZXh0IGluIHdoaWNoIHRoaXMgdmFsdWUgaXMgdG8gYmUgdXNlZC5cclxuICAgICAqIEBwYXJhbSB7Kn0gbWF5YmVUcnVzdGVkIFRoZSByZXN1bHQgb2YgYSBwcmlvciB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXNcclxuICAgICAqICAgICBgJHNjZURlbGVnYXRlLnRydXN0QXNgfSBjYWxsLlxyXG4gICAgICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGUgd2FzIG9yaWdpbmFsbHkgcHJvdmlkZWQgdG8ge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZSN0cnVzdEFzXHJcbiAgICAgKiAgICAgYCRzY2VEZWxlZ2F0ZS50cnVzdEFzYH0gaWYgdmFsaWQgaW4gdGhpcyBjb250ZXh0LiAgT3RoZXJ3aXNlLCB0aHJvd3MgYW4gZXhjZXB0aW9uLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBnZXRUcnVzdGVkKHR5cGUsIG1heWJlVHJ1c3RlZCkge1xyXG4gICAgICBpZiAobWF5YmVUcnVzdGVkID09PSBudWxsIHx8IG1heWJlVHJ1c3RlZCA9PT0gdW5kZWZpbmVkIHx8IG1heWJlVHJ1c3RlZCA9PT0gJycpIHtcclxuICAgICAgICByZXR1cm4gbWF5YmVUcnVzdGVkO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBjb25zdHJ1Y3RvciA9IChieVR5cGUuaGFzT3duUHJvcGVydHkodHlwZSkgPyBieVR5cGVbdHlwZV0gOiBudWxsKTtcclxuICAgICAgaWYgKGNvbnN0cnVjdG9yICYmIG1heWJlVHJ1c3RlZCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIG1heWJlVHJ1c3RlZC4kJHVud3JhcFRydXN0ZWRWYWx1ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIElmIHdlIGdldCBoZXJlLCB0aGVuIHdlIG1heSBvbmx5IHRha2Ugb25lIG9mIHR3byBhY3Rpb25zLlxyXG4gICAgICAvLyAxLiBzYW5pdGl6ZSB0aGUgdmFsdWUgZm9yIHRoZSByZXF1ZXN0ZWQgdHlwZSwgb3JcclxuICAgICAgLy8gMi4gdGhyb3cgYW4gZXhjZXB0aW9uLlxyXG4gICAgICBpZiAodHlwZSA9PT0gU0NFX0NPTlRFWFRTLlJFU09VUkNFX1VSTCkge1xyXG4gICAgICAgIGlmIChpc1Jlc291cmNlVXJsQWxsb3dlZEJ5UG9saWN5KG1heWJlVHJ1c3RlZCkpIHtcclxuICAgICAgICAgIHJldHVybiBtYXliZVRydXN0ZWQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93ICRzY2VNaW5FcnIoJ2luc2VjdXJsJyxcclxuICAgICAgICAgICAgICAnQmxvY2tlZCBsb2FkaW5nIHJlc291cmNlIGZyb20gdXJsIG5vdCBhbGxvd2VkIGJ5ICRzY2VEZWxlZ2F0ZSBwb2xpY3kuICBVUkw6IHswfScsXHJcbiAgICAgICAgICAgICAgbWF5YmVUcnVzdGVkLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBTQ0VfQ09OVEVYVFMuSFRNTCkge1xyXG4gICAgICAgIHJldHVybiBodG1sU2FuaXRpemVyKG1heWJlVHJ1c3RlZCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhyb3cgJHNjZU1pbkVycigndW5zYWZlJywgJ0F0dGVtcHRpbmcgdG8gdXNlIGFuIHVuc2FmZSB2YWx1ZSBpbiBhIHNhZmUgY29udGV4dC4nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyB0cnVzdEFzOiB0cnVzdEFzLFxyXG4gICAgICAgICAgICAgZ2V0VHJ1c3RlZDogZ2V0VHJ1c3RlZCxcclxuICAgICAgICAgICAgIHZhbHVlT2Y6IHZhbHVlT2YgfTtcclxuICB9XTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgcHJvdmlkZXJcclxuICogQG5hbWUgJHNjZVByb3ZpZGVyXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKlxyXG4gKiBUaGUgJHNjZVByb3ZpZGVyIHByb3ZpZGVyIGFsbG93cyBkZXZlbG9wZXJzIHRvIGNvbmZpZ3VyZSB0aGUge0BsaW5rIG5nLiRzY2UgJHNjZX0gc2VydmljZS5cclxuICogLSAgIGVuYWJsZS9kaXNhYmxlIFN0cmljdCBDb250ZXh0dWFsIEVzY2FwaW5nIChTQ0UpIGluIGEgbW9kdWxlXHJcbiAqIC0gICBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aXRoIGEgY3VzdG9tIGRlbGVnYXRlXHJcbiAqXHJcbiAqIFJlYWQgbW9yZSBhYm91dCB7QGxpbmsgbmcuJHNjZSBTdHJpY3QgQ29udGV4dHVhbCBFc2NhcGluZyAoU0NFKX0uXHJcbiAqL1xyXG5cclxuLyoganNoaW50IG1heGxlbjogZmFsc2UqL1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBzZXJ2aWNlXHJcbiAqIEBuYW1lICRzY2VcclxuICogQGtpbmQgZnVuY3Rpb25cclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqXHJcbiAqIGAkc2NlYCBpcyBhIHNlcnZpY2UgdGhhdCBwcm92aWRlcyBTdHJpY3QgQ29udGV4dHVhbCBFc2NhcGluZyBzZXJ2aWNlcyB0byBBbmd1bGFySlMuXHJcbiAqXHJcbiAqICMgU3RyaWN0IENvbnRleHR1YWwgRXNjYXBpbmdcclxuICpcclxuICogU3RyaWN0IENvbnRleHR1YWwgRXNjYXBpbmcgKFNDRSkgaXMgYSBtb2RlIGluIHdoaWNoIEFuZ3VsYXJKUyByZXF1aXJlcyBiaW5kaW5ncyBpbiBjZXJ0YWluXHJcbiAqIGNvbnRleHRzIHRvIHJlc3VsdCBpbiBhIHZhbHVlIHRoYXQgaXMgbWFya2VkIGFzIHNhZmUgdG8gdXNlIGZvciB0aGF0IGNvbnRleHQuICBPbmUgZXhhbXBsZSBvZlxyXG4gKiBzdWNoIGEgY29udGV4dCBpcyBiaW5kaW5nIGFyYml0cmFyeSBodG1sIGNvbnRyb2xsZWQgYnkgdGhlIHVzZXIgdmlhIGBuZy1iaW5kLWh0bWxgLiAgV2UgcmVmZXJcclxuICogdG8gdGhlc2UgY29udGV4dHMgYXMgcHJpdmlsZWdlZCBvciBTQ0UgY29udGV4dHMuXHJcbiAqXHJcbiAqIEFzIG9mIHZlcnNpb24gMS4yLCBBbmd1bGFyIHNoaXBzIHdpdGggU0NFIGVuYWJsZWQgYnkgZGVmYXVsdC5cclxuICpcclxuICogTm90ZTogIFdoZW4gZW5hYmxlZCAodGhlIGRlZmF1bHQpLCBJRTwxMSBpbiBxdWlya3MgbW9kZSBpcyBub3Qgc3VwcG9ydGVkLiAgSW4gdGhpcyBtb2RlLCBJRTwxMSBhbGxvd1xyXG4gKiBvbmUgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgamF2YXNjcmlwdCBieSB0aGUgdXNlIG9mIHRoZSBleHByZXNzaW9uKCkgc3ludGF4LiAgUmVmZXJcclxuICogPGh0dHA6Ly9ibG9ncy5tc2RuLmNvbS9iL2llL2FyY2hpdmUvMjAwOC8xMC8xNi9lbmRpbmctZXhwcmVzc2lvbnMuYXNweD4gdG8gbGVhcm4gbW9yZSBhYm91dCB0aGVtLlxyXG4gKiBZb3UgY2FuIGVuc3VyZSB5b3VyIGRvY3VtZW50IGlzIGluIHN0YW5kYXJkcyBtb2RlIGFuZCBub3QgcXVpcmtzIG1vZGUgYnkgYWRkaW5nIGA8IWRvY3R5cGUgaHRtbD5gXHJcbiAqIHRvIHRoZSB0b3Agb2YgeW91ciBIVE1MIGRvY3VtZW50LlxyXG4gKlxyXG4gKiBTQ0UgYXNzaXN0cyBpbiB3cml0aW5nIGNvZGUgaW4gd2F5IHRoYXQgKGEpIGlzIHNlY3VyZSBieSBkZWZhdWx0IGFuZCAoYikgbWFrZXMgYXVkaXRpbmcgZm9yXHJcbiAqIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBzdWNoIGFzIFhTUywgY2xpY2tqYWNraW5nLCBldGMuIGEgbG90IGVhc2llci5cclxuICpcclxuICogSGVyZSdzIGFuIGV4YW1wbGUgb2YgYSBiaW5kaW5nIGluIGEgcHJpdmlsZWdlZCBjb250ZXh0OlxyXG4gKlxyXG4gKiBgYGBcclxuICogPGlucHV0IG5nLW1vZGVsPVwidXNlckh0bWxcIj5cclxuICogPGRpdiBuZy1iaW5kLWh0bWw9XCJ1c2VySHRtbFwiPjwvZGl2PlxyXG4gKiBgYGBcclxuICpcclxuICogTm90aWNlIHRoYXQgYG5nLWJpbmQtaHRtbGAgaXMgYm91bmQgdG8gYHVzZXJIdG1sYCBjb250cm9sbGVkIGJ5IHRoZSB1c2VyLiAgV2l0aCBTQ0VcclxuICogZGlzYWJsZWQsIHRoaXMgYXBwbGljYXRpb24gYWxsb3dzIHRoZSB1c2VyIHRvIHJlbmRlciBhcmJpdHJhcnkgSFRNTCBpbnRvIHRoZSBESVYuXHJcbiAqIEluIGEgbW9yZSByZWFsaXN0aWMgZXhhbXBsZSwgb25lIG1heSBiZSByZW5kZXJpbmcgdXNlciBjb21tZW50cywgYmxvZyBhcnRpY2xlcywgZXRjLiB2aWFcclxuICogYmluZGluZ3MuICAoSFRNTCBpcyBqdXN0IG9uZSBleGFtcGxlIG9mIGEgY29udGV4dCB3aGVyZSByZW5kZXJpbmcgdXNlciBjb250cm9sbGVkIGlucHV0IGNyZWF0ZXNcclxuICogc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLilcclxuICpcclxuICogRm9yIHRoZSBjYXNlIG9mIEhUTUwsIHlvdSBtaWdodCB1c2UgYSBsaWJyYXJ5LCBlaXRoZXIgb24gdGhlIGNsaWVudCBzaWRlLCBvciBvbiB0aGUgc2VydmVyIHNpZGUsXHJcbiAqIHRvIHNhbml0aXplIHVuc2FmZSBIVE1MIGJlZm9yZSBiaW5kaW5nIHRvIHRoZSB2YWx1ZSBhbmQgcmVuZGVyaW5nIGl0IGluIHRoZSBkb2N1bWVudC5cclxuICpcclxuICogSG93IHdvdWxkIHlvdSBlbnN1cmUgdGhhdCBldmVyeSBwbGFjZSB0aGF0IHVzZWQgdGhlc2UgdHlwZXMgb2YgYmluZGluZ3Mgd2FzIGJvdW5kIHRvIGEgdmFsdWUgdGhhdFxyXG4gKiB3YXMgc2FuaXRpemVkIGJ5IHlvdXIgbGlicmFyeSAob3IgcmV0dXJuZWQgYXMgc2FmZSBmb3IgcmVuZGVyaW5nIGJ5IHlvdXIgc2VydmVyPykgIEhvdyBjYW4geW91XHJcbiAqIGVuc3VyZSB0aGF0IHlvdSBkaWRuJ3QgYWNjaWRlbnRhbGx5IGRlbGV0ZSB0aGUgbGluZSB0aGF0IHNhbml0aXplZCB0aGUgdmFsdWUsIG9yIHJlbmFtZWQgc29tZVxyXG4gKiBwcm9wZXJ0aWVzL2ZpZWxkcyBhbmQgZm9yZ290IHRvIHVwZGF0ZSB0aGUgYmluZGluZyB0byB0aGUgc2FuaXRpemVkIHZhbHVlP1xyXG4gKlxyXG4gKiBUbyBiZSBzZWN1cmUgYnkgZGVmYXVsdCwgeW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgYW55IHN1Y2ggYmluZGluZ3MgYXJlIGRpc2FsbG93ZWQgdW5sZXNzIHlvdSBjYW5cclxuICogZGV0ZXJtaW5lIHRoYXQgc29tZXRoaW5nIGV4cGxpY2l0bHkgc2F5cyBpdCdzIHNhZmUgdG8gdXNlIGEgdmFsdWUgZm9yIGJpbmRpbmcgaW4gdGhhdFxyXG4gKiBjb250ZXh0LiAgWW91IGNhbiB0aGVuIGF1ZGl0IHlvdXIgY29kZSAoYSBzaW1wbGUgZ3JlcCB3b3VsZCBkbykgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyBvbmx5IGRvbmVcclxuICogZm9yIHRob3NlIHZhbHVlcyB0aGF0IHlvdSBjYW4gZWFzaWx5IHRlbGwgYXJlIHNhZmUgLSBiZWNhdXNlIHRoZXkgd2VyZSByZWNlaXZlZCBmcm9tIHlvdXIgc2VydmVyLFxyXG4gKiBzYW5pdGl6ZWQgYnkgeW91ciBsaWJyYXJ5LCBldGMuICBZb3UgY2FuIG9yZ2FuaXplIHlvdXIgY29kZWJhc2UgdG8gaGVscCB3aXRoIHRoaXMgLSBwZXJoYXBzXHJcbiAqIGFsbG93aW5nIG9ubHkgdGhlIGZpbGVzIGluIGEgc3BlY2lmaWMgZGlyZWN0b3J5IHRvIGRvIHRoaXMuICBFbnN1cmluZyB0aGF0IHRoZSBpbnRlcm5hbCBBUElcclxuICogZXhwb3NlZCBieSB0aGF0IGNvZGUgZG9lc24ndCBtYXJrdXAgYXJiaXRyYXJ5IHZhbHVlcyBhcyBzYWZlIHRoZW4gYmVjb21lcyBhIG1vcmUgbWFuYWdlYWJsZSB0YXNrLlxyXG4gKlxyXG4gKiBJbiB0aGUgY2FzZSBvZiBBbmd1bGFySlMnIFNDRSBzZXJ2aWNlLCBvbmUgdXNlcyB7QGxpbmsgbmcuJHNjZSN0cnVzdEFzICRzY2UudHJ1c3RBc31cclxuICogKGFuZCBzaG9ydGhhbmQgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBuZy4kc2NlI3RydXN0QXNIdG1sICRzY2UudHJ1c3RBc0h0bWx9LCBldGMuKSB0b1xyXG4gKiBvYnRhaW4gdmFsdWVzIHRoYXQgd2lsbCBiZSBhY2NlcHRlZCBieSBTQ0UgLyBwcml2aWxlZ2VkIGNvbnRleHRzLlxyXG4gKlxyXG4gKlxyXG4gKiAjIyBIb3cgZG9lcyBpdCB3b3JrP1xyXG4gKlxyXG4gKiBJbiBwcml2aWxlZ2VkIGNvbnRleHRzLCBkaXJlY3RpdmVzIGFuZCBjb2RlIHdpbGwgYmluZCB0byB0aGUgcmVzdWx0IG9mIHtAbGluayBuZy4kc2NlI2dldFRydXN0ZWRcclxuICogJHNjZS5nZXRUcnVzdGVkKGNvbnRleHQsIHZhbHVlKX0gcmF0aGVyIHRoYW4gdG8gdGhlIHZhbHVlIGRpcmVjdGx5LiAgRGlyZWN0aXZlcyB1c2Uge0BsaW5rXHJcbiAqIG5nLiRzY2UjcGFyc2VBcyAkc2NlLnBhcnNlQXN9IHJhdGhlciB0aGFuIGAkcGFyc2VgIHRvIHdhdGNoIGF0dHJpYnV0ZSBiaW5kaW5ncywgd2hpY2ggcGVyZm9ybXMgdGhlXHJcbiAqIHtAbGluayBuZy4kc2NlI2dldFRydXN0ZWQgJHNjZS5nZXRUcnVzdGVkfSBiZWhpbmQgdGhlIHNjZW5lcyBvbiBub24tY29uc3RhbnQgbGl0ZXJhbHMuXHJcbiAqXHJcbiAqIEFzIGFuIGV4YW1wbGUsIHtAbGluayBuZy5kaXJlY3RpdmU6bmdCaW5kSHRtbCBuZ0JpbmRIdG1sfSB1c2VzIHtAbGlua1xyXG4gKiBuZy4kc2NlI3BhcnNlQXNIdG1sICRzY2UucGFyc2VBc0h0bWwoYmluZGluZyBleHByZXNzaW9uKX0uICBIZXJlJ3MgdGhlIGFjdHVhbCBjb2RlIChzbGlnaHRseVxyXG4gKiBzaW1wbGlmaWVkKTpcclxuICpcclxuICogYGBgXHJcbiAqIHZhciBuZ0JpbmRIdG1sRGlyZWN0aXZlID0gWyckc2NlJywgZnVuY3Rpb24oJHNjZSkge1xyXG4gKiAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikge1xyXG4gKiAgICAgc2NvcGUuJHdhdGNoKCRzY2UucGFyc2VBc0h0bWwoYXR0ci5uZ0JpbmRIdG1sKSwgZnVuY3Rpb24odmFsdWUpIHtcclxuICogICAgICAgZWxlbWVudC5odG1sKHZhbHVlIHx8ICcnKTtcclxuICogICAgIH0pO1xyXG4gKiAgIH07XHJcbiAqIH1dO1xyXG4gKiBgYGBcclxuICpcclxuICogIyMgSW1wYWN0IG9uIGxvYWRpbmcgdGVtcGxhdGVzXHJcbiAqXHJcbiAqIFRoaXMgYXBwbGllcyBib3RoIHRvIHRoZSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nSW5jbHVkZSBgbmctaW5jbHVkZWB9IGRpcmVjdGl2ZSBhcyB3ZWxsIGFzXHJcbiAqIGB0ZW1wbGF0ZVVybGAncyBzcGVjaWZpZWQgYnkge0BsaW5rIGd1aWRlL2RpcmVjdGl2ZSBkaXJlY3RpdmVzfS5cclxuICpcclxuICogQnkgZGVmYXVsdCwgQW5ndWxhciBvbmx5IGxvYWRzIHRlbXBsYXRlcyBmcm9tIHRoZSBzYW1lIGRvbWFpbiBhbmQgcHJvdG9jb2wgYXMgdGhlIGFwcGxpY2F0aW9uXHJcbiAqIGRvY3VtZW50LiAgVGhpcyBpcyBkb25lIGJ5IGNhbGxpbmcge0BsaW5rIG5nLiRzY2UjZ2V0VHJ1c3RlZFJlc291cmNlVXJsXHJcbiAqICRzY2UuZ2V0VHJ1c3RlZFJlc291cmNlVXJsfSBvbiB0aGUgdGVtcGxhdGUgVVJMLiAgVG8gbG9hZCB0ZW1wbGF0ZXMgZnJvbSBvdGhlciBkb21haW5zIGFuZC9vclxyXG4gKiBwcm90b2NvbHMsIHlvdSBtYXkgZWl0aGVyIGVpdGhlciB7QGxpbmsgbmcuJHNjZURlbGVnYXRlUHJvdmlkZXIjcmVzb3VyY2VVcmxXaGl0ZWxpc3Qgd2hpdGVsaXN0XHJcbiAqIHRoZW19IG9yIHtAbGluayBuZy4kc2NlI3RydXN0QXNSZXNvdXJjZVVybCB3cmFwIGl0fSBpbnRvIGEgdHJ1c3RlZCB2YWx1ZS5cclxuICpcclxuICogKlBsZWFzZSBub3RlKjpcclxuICogVGhlIGJyb3dzZXInc1xyXG4gKiBbU2FtZSBPcmlnaW4gUG9saWN5XShodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Jyb3dzZXJzZWMvd2lraS9QYXJ0MiNTYW1lLW9yaWdpbl9wb2xpY3lfZm9yX1hNTEh0dHBSZXF1ZXN0KVxyXG4gKiBhbmQgW0Nyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nIChDT1JTKV0oaHR0cDovL3d3dy53My5vcmcvVFIvY29ycy8pXHJcbiAqIHBvbGljeSBhcHBseSBpbiBhZGRpdGlvbiB0byB0aGlzIGFuZCBtYXkgZnVydGhlciByZXN0cmljdCB3aGV0aGVyIHRoZSB0ZW1wbGF0ZSBpcyBzdWNjZXNzZnVsbHlcclxuICogbG9hZGVkLiAgVGhpcyBtZWFucyB0aGF0IHdpdGhvdXQgdGhlIHJpZ2h0IENPUlMgcG9saWN5LCBsb2FkaW5nIHRlbXBsYXRlcyBmcm9tIGEgZGlmZmVyZW50IGRvbWFpblxyXG4gKiB3b24ndCB3b3JrIG9uIGFsbCBicm93c2Vycy4gIEFsc28sIGxvYWRpbmcgdGVtcGxhdGVzIGZyb20gYGZpbGU6Ly9gIFVSTCBkb2VzIG5vdCB3b3JrIG9uIHNvbWVcclxuICogYnJvd3NlcnMuXHJcbiAqXHJcbiAqICMjIFRoaXMgZmVlbHMgbGlrZSB0b28gbXVjaCBvdmVyaGVhZFxyXG4gKlxyXG4gKiBJdCdzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IFNDRSBvbmx5IGFwcGxpZXMgdG8gaW50ZXJwb2xhdGlvbiBleHByZXNzaW9ucy5cclxuICpcclxuICogSWYgeW91ciBleHByZXNzaW9ucyBhcmUgY29uc3RhbnQgbGl0ZXJhbHMsIHRoZXkncmUgYXV0b21hdGljYWxseSB0cnVzdGVkIGFuZCB5b3UgZG9uJ3QgbmVlZCB0b1xyXG4gKiBjYWxsIGAkc2NlLnRydXN0QXNgIG9uIHRoZW0gKHJlbWVtYmVyIHRvIGluY2x1ZGUgdGhlIGBuZ1Nhbml0aXplYCBtb2R1bGUpIChlLmcuXHJcbiAqIGA8ZGl2IG5nLWJpbmQtaHRtbD1cIic8Yj5pbXBsaWNpdGx5IHRydXN0ZWQ8L2I+J1wiPjwvZGl2PmApIGp1c3Qgd29ya3MuXHJcbiAqXHJcbiAqIEFkZGl0aW9uYWxseSwgYGFbaHJlZl1gIGFuZCBgaW1nW3NyY11gIGF1dG9tYXRpY2FsbHkgc2FuaXRpemUgdGhlaXIgVVJMcyBhbmQgZG8gbm90IHBhc3MgdGhlbVxyXG4gKiB0aHJvdWdoIHtAbGluayBuZy4kc2NlI2dldFRydXN0ZWQgJHNjZS5nZXRUcnVzdGVkfS4gIFNDRSBkb2Vzbid0IHBsYXkgYSByb2xlIGhlcmUuXHJcbiAqXHJcbiAqIFRoZSBpbmNsdWRlZCB7QGxpbmsgbmcuJHNjZURlbGVnYXRlICRzY2VEZWxlZ2F0ZX0gY29tZXMgd2l0aCBzYW5lIGRlZmF1bHRzIHRvIGFsbG93IHlvdSB0byBsb2FkXHJcbiAqIHRlbXBsYXRlcyBpbiBgbmctaW5jbHVkZWAgZnJvbSB5b3VyIGFwcGxpY2F0aW9uJ3MgZG9tYWluIHdpdGhvdXQgaGF2aW5nIHRvIGV2ZW4ga25vdyBhYm91dCBTQ0UuXHJcbiAqIEl0IGJsb2NrcyBsb2FkaW5nIHRlbXBsYXRlcyBmcm9tIG90aGVyIGRvbWFpbnMgb3IgbG9hZGluZyB0ZW1wbGF0ZXMgb3ZlciBodHRwIGZyb20gYW4gaHR0cHNcclxuICogc2VydmVkIGRvY3VtZW50LiAgWW91IGNhbiBjaGFuZ2UgdGhlc2UgYnkgc2V0dGluZyB5b3VyIG93biBjdXN0b20ge0BsaW5rXHJcbiAqIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyI3Jlc291cmNlVXJsV2hpdGVsaXN0IHdoaXRlbGlzdHN9IGFuZCB7QGxpbmtcclxuICogbmcuJHNjZURlbGVnYXRlUHJvdmlkZXIjcmVzb3VyY2VVcmxCbGFja2xpc3QgYmxhY2tsaXN0c30gZm9yIG1hdGNoaW5nIHN1Y2ggVVJMcy5cclxuICpcclxuICogVGhpcyBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIG92ZXJoZWFkLiAgSXQgaXMgZmFyIGVhc2llciB0byBwYXkgdGhlIHNtYWxsIG92ZXJoZWFkIGFuZCBoYXZlIGFuXHJcbiAqIGFwcGxpY2F0aW9uIHRoYXQncyBzZWN1cmUgYW5kIGNhbiBiZSBhdWRpdGVkIHRvIHZlcmlmeSB0aGF0IHdpdGggbXVjaCBtb3JlIGVhc2UgdGhhbiBib2x0aW5nXHJcbiAqIHNlY3VyaXR5IG9udG8gYW4gYXBwbGljYXRpb24gbGF0ZXIuXHJcbiAqXHJcbiAqIDxhIG5hbWU9XCJjb250ZXh0c1wiPjwvYT5cclxuICogIyMgV2hhdCB0cnVzdGVkIGNvbnRleHQgdHlwZXMgYXJlIHN1cHBvcnRlZD9cclxuICpcclxuICogfCBDb250ZXh0ICAgICAgICAgICAgIHwgTm90ZXMgICAgICAgICAgfFxyXG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18XHJcbiAqIHwgYCRzY2UuSFRNTGAgICAgICAgICB8IEZvciBIVE1MIHRoYXQncyBzYWZlIHRvIHNvdXJjZSBpbnRvIHRoZSBhcHBsaWNhdGlvbi4gIFRoZSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQmluZEh0bWwgbmdCaW5kSHRtbH0gZGlyZWN0aXZlIHVzZXMgdGhpcyBjb250ZXh0IGZvciBiaW5kaW5ncy4gSWYgYW4gdW5zYWZlIHZhbHVlIGlzIGVuY291bnRlcmVkIGFuZCB0aGUge0BsaW5rIG5nU2FuaXRpemUgJHNhbml0aXplfSBtb2R1bGUgaXMgcHJlc2VudCB0aGlzIHdpbGwgc2FuaXRpemUgdGhlIHZhbHVlIGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IuIHxcclxuICogfCBgJHNjZS5DU1NgICAgICAgICAgIHwgRm9yIENTUyB0aGF0J3Mgc2FmZSB0byBzb3VyY2UgaW50byB0aGUgYXBwbGljYXRpb24uICBDdXJyZW50bHkgdW51c2VkLiAgRmVlbCBmcmVlIHRvIHVzZSBpdCBpbiB5b3VyIG93biBkaXJlY3RpdmVzLiB8XHJcbiAqIHwgYCRzY2UuVVJMYCAgICAgICAgICB8IEZvciBVUkxzIHRoYXQgYXJlIHNhZmUgdG8gZm9sbG93IGFzIGxpbmtzLiAgQ3VycmVudGx5IHVudXNlZCAoYDxhIGhyZWY9YCBhbmQgYDxpbWcgc3JjPWAgc2FuaXRpemUgdGhlaXIgdXJscyBhbmQgZG9uJ3QgY29uc3RpdHV0ZSBhbiBTQ0UgY29udGV4dC4gfFxyXG4gKiB8IGAkc2NlLlJFU09VUkNFX1VSTGAgfCBGb3IgVVJMcyB0aGF0IGFyZSBub3Qgb25seSBzYWZlIHRvIGZvbGxvdyBhcyBsaW5rcywgYnV0IHdob3NlIGNvbnRlbnRzIGFyZSBhbHNvIHNhZmUgdG8gaW5jbHVkZSBpbiB5b3VyIGFwcGxpY2F0aW9uLiAgRXhhbXBsZXMgaW5jbHVkZSBgbmctaW5jbHVkZWAsIGBzcmNgIC8gYG5nU3JjYCBiaW5kaW5ncyBmb3IgdGFncyBvdGhlciB0aGFuIGBJTUdgIChlLmcuIGBJRlJBTUVgLCBgT0JKRUNUYCwgZXRjLikgIDxicj48YnI+Tm90ZSB0aGF0IGAkc2NlLlJFU09VUkNFX1VSTGAgbWFrZXMgYSBzdHJvbmdlciBzdGF0ZW1lbnQgYWJvdXQgdGhlIFVSTCB0aGFuIGAkc2NlLlVSTGAgZG9lcyBhbmQgdGhlcmVmb3JlIGNvbnRleHRzIHJlcXVpcmluZyB2YWx1ZXMgdHJ1c3RlZCBmb3IgYCRzY2UuUkVTT1VSQ0VfVVJMYCBjYW4gYmUgdXNlZCBhbnl3aGVyZSB0aGF0IHZhbHVlcyB0cnVzdGVkIGZvciBgJHNjZS5VUkxgIGFyZSByZXF1aXJlZC4gfFxyXG4gKiB8IGAkc2NlLkpTYCAgICAgICAgICAgfCBGb3IgSmF2YVNjcmlwdCB0aGF0IGlzIHNhZmUgdG8gZXhlY3V0ZSBpbiB5b3VyIGFwcGxpY2F0aW9uJ3MgY29udGV4dC4gIEN1cnJlbnRseSB1bnVzZWQuICBGZWVsIGZyZWUgdG8gdXNlIGl0IGluIHlvdXIgb3duIGRpcmVjdGl2ZXMuIHxcclxuICpcclxuICogIyMgRm9ybWF0IG9mIGl0ZW1zIGluIHtAbGluayBuZy4kc2NlRGVsZWdhdGVQcm92aWRlciNyZXNvdXJjZVVybFdoaXRlbGlzdCByZXNvdXJjZVVybFdoaXRlbGlzdH0ve0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyI3Jlc291cmNlVXJsQmxhY2tsaXN0IEJsYWNrbGlzdH0gPGEgbmFtZT1cInJlc291cmNlVXJsUGF0dGVybkl0ZW1cIj48L2E+XHJcbiAqXHJcbiAqICBFYWNoIGVsZW1lbnQgaW4gdGhlc2UgYXJyYXlzIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6XHJcbiAqXHJcbiAqICAtICoqJ3NlbGYnKipcclxuICogICAgLSBUaGUgc3BlY2lhbCAqKnN0cmluZyoqLCBgJ3NlbGYnYCwgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggYWdhaW5zdCBhbGwgVVJMcyBvZiB0aGUgKipzYW1lXHJcbiAqICAgICAgZG9tYWluKiogYXMgdGhlIGFwcGxpY2F0aW9uIGRvY3VtZW50IHVzaW5nIHRoZSAqKnNhbWUgcHJvdG9jb2wqKi5cclxuICogIC0gKipTdHJpbmcqKiAoZXhjZXB0IHRoZSBzcGVjaWFsIHZhbHVlIGAnc2VsZidgKVxyXG4gKiAgICAtIFRoZSBzdHJpbmcgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBmdWxsICpub3JtYWxpemVkIC8gYWJzb2x1dGUgVVJMKiBvZiB0aGUgcmVzb3VyY2VcclxuICogICAgICBiZWluZyB0ZXN0ZWQgKHN1YnN0cmluZyBtYXRjaGVzIGFyZSBub3QgZ29vZCBlbm91Z2guKVxyXG4gKiAgICAtIFRoZXJlIGFyZSBleGFjdGx5ICoqdHdvIHdpbGRjYXJkIHNlcXVlbmNlcyoqIC0gYCpgIGFuZCBgKipgLiAgQWxsIG90aGVyIGNoYXJhY3RlcnNcclxuICogICAgICBtYXRjaCB0aGVtc2VsdmVzLlxyXG4gKiAgICAtIGAqYDogbWF0Y2hlcyB6ZXJvIG9yIG1vcmUgb2NjdXJyZW5jZXMgb2YgYW55IGNoYXJhY3RlciBvdGhlciB0aGFuIG9uZSBvZiB0aGUgZm9sbG93aW5nIDZcclxuICogICAgICBjaGFyYWN0ZXJzOiAnYDpgJywgJ2AvYCcsICdgLmAnLCAnYD9gJywgJ2AmYCcgYW5kICc7Jy4gIEl0J3MgYSB1c2VmdWwgd2lsZGNhcmQgZm9yIHVzZVxyXG4gKiAgICAgIGluIGEgd2hpdGVsaXN0LlxyXG4gKiAgICAtIGAqKmA6IG1hdGNoZXMgemVybyBvciBtb3JlIG9jY3VycmVuY2VzIG9mICphbnkqIGNoYXJhY3Rlci4gIEFzIHN1Y2gsIGl0J3Mgbm90XHJcbiAqICAgICAgbm90IGFwcHJvcHJpYXRlIHRvIHVzZSBpbiBmb3IgYSBzY2hlbWUsIGRvbWFpbiwgZXRjLiBhcyBpdCB3b3VsZCBtYXRjaCB0b28gbXVjaC4gIChlLmcuXHJcbiAqICAgICAgaHR0cDovLyoqLmV4YW1wbGUuY29tLyB3b3VsZCBtYXRjaCBodHRwOi8vZXZpbC5jb20vP2lnbm9yZT0uZXhhbXBsZS5jb20vIGFuZCB0aGF0IG1pZ2h0XHJcbiAqICAgICAgbm90IGhhdmUgYmVlbiB0aGUgaW50ZW50aW9uLikgIEl0cyB1c2FnZSBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIHBhdGggaXMgb2suICAoZS5nLlxyXG4gKiAgICAgIGh0dHA6Ly9mb28uZXhhbXBsZS5jb20vdGVtcGxhdGVzLyoqKS5cclxuICogIC0gKipSZWdFeHAqKiAoKnNlZSBjYXZlYXQgYmVsb3cqKVxyXG4gKiAgICAtICpDYXZlYXQqOiAgV2hpbGUgcmVndWxhciBleHByZXNzaW9ucyBhcmUgcG93ZXJmdWwgYW5kIG9mZmVyIGdyZWF0IGZsZXhpYmlsaXR5LCAgdGhlaXIgc3ludGF4XHJcbiAqICAgICAgKGFuZCBhbGwgdGhlIGluZXZpdGFibGUgZXNjYXBpbmcpIG1ha2VzIHRoZW0gKmhhcmRlciB0byBtYWludGFpbiouICBJdCdzIGVhc3kgdG9cclxuICogICAgICBhY2NpZGVudGFsbHkgaW50cm9kdWNlIGEgYnVnIHdoZW4gb25lIHVwZGF0ZXMgYSBjb21wbGV4IGV4cHJlc3Npb24gKGltaG8sIGFsbCByZWdleGVzIHNob3VsZFxyXG4gKiAgICAgIGhhdmUgZ29vZCB0ZXN0IGNvdmVyYWdlLikuICBGb3IgaW5zdGFuY2UsIHRoZSB1c2Ugb2YgYC5gIGluIHRoZSByZWdleCBpcyBjb3JyZWN0IG9ubHkgaW4gYVxyXG4gKiAgICAgIHNtYWxsIG51bWJlciBvZiBjYXNlcy4gIEEgYC5gIGNoYXJhY3RlciBpbiB0aGUgcmVnZXggdXNlZCB3aGVuIG1hdGNoaW5nIHRoZSBzY2hlbWUgb3IgYVxyXG4gKiAgICAgIHN1YmRvbWFpbiBjb3VsZCBiZSBtYXRjaGVkIGFnYWluc3QgYSBgOmAgb3IgbGl0ZXJhbCBgLmAgdGhhdCB3YXMgbGlrZWx5IG5vdCBpbnRlbmRlZC4gICBJdFxyXG4gKiAgICAgIGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byB1c2UgdGhlIHN0cmluZyBwYXR0ZXJucyBhbmQgb25seSBmYWxsIGJhY2sgdG8gcmVndWxhciBleHByZXNzaW9uc1xyXG4gKiAgICAgIGlmIHRoZXkgYXMgYSBsYXN0IHJlc29ydC5cclxuICogICAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgUmVnRXhwIChpLmUuIG5vdCBhIHN0cmluZy4pICBJdCBpc1xyXG4gKiAgICAgIG1hdGNoZWQgYWdhaW5zdCB0aGUgKiplbnRpcmUqKiAqbm9ybWFsaXplZCAvIGFic29sdXRlIFVSTCogb2YgdGhlIHJlc291cmNlIGJlaW5nIHRlc3RlZFxyXG4gKiAgICAgIChldmVuIHdoZW4gdGhlIFJlZ0V4cCBkaWQgbm90IGhhdmUgdGhlIGBeYCBhbmQgYCRgIGNvZGVzLikgIEluIGFkZGl0aW9uLCBhbnkgZmxhZ3NcclxuICogICAgICBwcmVzZW50IG9uIHRoZSBSZWdFeHAgKHN1Y2ggYXMgbXVsdGlsaW5lLCBnbG9iYWwsIGlnbm9yZUNhc2UpIGFyZSBpZ25vcmVkLlxyXG4gKiAgICAtIElmIHlvdSBhcmUgZ2VuZXJhdGluZyB5b3VyIEphdmFTY3JpcHQgZnJvbSBzb21lIG90aGVyIHRlbXBsYXRpbmcgZW5naW5lIChub3RcclxuICogICAgICByZWNvbW1lbmRlZCwgZS5nLiBpbiBpc3N1ZSBbIzQwMDZdKGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIuanMvaXNzdWVzLzQwMDYpKSxcclxuICogICAgICByZW1lbWJlciB0byBlc2NhcGUgeW91ciByZWd1bGFyIGV4cHJlc3Npb24gKGFuZCBiZSBhd2FyZSB0aGF0IHlvdSBtaWdodCBuZWVkIG1vcmUgdGhhblxyXG4gKiAgICAgIG9uZSBsZXZlbCBvZiBlc2NhcGluZyBkZXBlbmRpbmcgb24geW91ciB0ZW1wbGF0aW5nIGVuZ2luZSBhbmQgdGhlIHdheSB5b3UgaW50ZXJwb2xhdGVkXHJcbiAqICAgICAgdGhlIHZhbHVlLikgIERvIG1ha2UgdXNlIG9mIHlvdXIgcGxhdGZvcm0ncyBlc2NhcGluZyBtZWNoYW5pc20gYXMgaXQgbWlnaHQgYmUgZ29vZFxyXG4gKiAgICAgIGVub3VnaCBiZWZvcmUgY29kaW5nIHlvdXIgb3duLiAgZS5nLiBSdWJ5IGhhc1xyXG4gKiAgICAgIFtSZWdleHAuZXNjYXBlKHN0cildKGh0dHA6Ly93d3cucnVieS1kb2Mub3JnL2NvcmUtMi4wLjAvUmVnZXhwLmh0bWwjbWV0aG9kLWMtZXNjYXBlKVxyXG4gKiAgICAgIGFuZCBQeXRob24gaGFzIFtyZS5lc2NhcGVdKGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9yZS5odG1sI3JlLmVzY2FwZSkuXHJcbiAqICAgICAgSmF2YXNjcmlwdCBsYWNrcyBhIHNpbWlsYXIgYnVpbHQgaW4gZnVuY3Rpb24gZm9yIGVzY2FwaW5nLiAgVGFrZSBhIGxvb2sgYXQgR29vZ2xlXHJcbiAqICAgICAgQ2xvc3VyZSBsaWJyYXJ5J3MgW2dvb2cuc3RyaW5nLnJlZ0V4cEVzY2FwZShzKV0oXHJcbiAqICAgICAgaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9jbG9zdXJlX2dvb2dfc3RyaW5nX3N0cmluZy5qcy5zb3VyY2UuaHRtbCNsaW5lOTYyKS5cclxuICpcclxuICogUmVmZXIge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyICRzY2VEZWxlZ2F0ZVByb3ZpZGVyfSBmb3IgYW4gZXhhbXBsZS5cclxuICpcclxuICogIyMgU2hvdyBtZSBhbiBleGFtcGxlIHVzaW5nIFNDRS5cclxuICpcclxuICogPGV4YW1wbGUgbW9kdWxlPVwibXlTY2VBcHBcIiBkZXBzPVwiYW5ndWxhci1zYW5pdGl6ZS5qc1wiPlxyXG4gKiA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gKiAgIDxkaXYgbmctY29udHJvbGxlcj1cIkFwcENvbnRyb2xsZXIgYXMgbXlDdHJsXCI+XHJcbiAqICAgICA8aSBuZy1iaW5kLWh0bWw9XCJteUN0cmwuZXhwbGljaXRseVRydXN0ZWRIdG1sXCIgaWQ9XCJleHBsaWNpdGx5VHJ1c3RlZEh0bWxcIj48L2k+PGJyPjxicj5cclxuICogICAgIDxiPlVzZXIgY29tbWVudHM8L2I+PGJyPlxyXG4gKiAgICAgQnkgZGVmYXVsdCwgSFRNTCB0aGF0IGlzbid0IGV4cGxpY2l0bHkgdHJ1c3RlZCAoZS5nLiBBbGljZSdzIGNvbW1lbnQpIGlzIHNhbml0aXplZCB3aGVuXHJcbiAqICAgICAkc2FuaXRpemUgaXMgYXZhaWxhYmxlLiAgSWYgJHNhbml0aXplIGlzbid0IGF2YWlsYWJsZSwgdGhpcyByZXN1bHRzIGluIGFuIGVycm9yIGluc3RlYWQgb2YgYW5cclxuICogICAgIGV4cGxvaXQuXHJcbiAqICAgICA8ZGl2IGNsYXNzPVwid2VsbFwiPlxyXG4gKiAgICAgICA8ZGl2IG5nLXJlcGVhdD1cInVzZXJDb21tZW50IGluIG15Q3RybC51c2VyQ29tbWVudHNcIj5cclxuICogICAgICAgICA8Yj57e3VzZXJDb21tZW50Lm5hbWV9fTwvYj46XHJcbiAqICAgICAgICAgPHNwYW4gbmctYmluZC1odG1sPVwidXNlckNvbW1lbnQuaHRtbENvbW1lbnRcIiBjbGFzcz1cImh0bWxDb21tZW50XCI+PC9zcGFuPlxyXG4gKiAgICAgICAgIDxicj5cclxuICogICAgICAgPC9kaXY+XHJcbiAqICAgICA8L2Rpdj5cclxuICogICA8L2Rpdj5cclxuICogPC9maWxlPlxyXG4gKlxyXG4gKiA8ZmlsZSBuYW1lPVwic2NyaXB0LmpzXCI+XHJcbiAqICAgYW5ndWxhci5tb2R1bGUoJ215U2NlQXBwJywgWyduZ1Nhbml0aXplJ10pXHJcbiAqICAgICAuY29udHJvbGxlcignQXBwQ29udHJvbGxlcicsIFsnJGh0dHAnLCAnJHRlbXBsYXRlQ2FjaGUnLCAnJHNjZScsXHJcbiAqICAgICAgIGZ1bmN0aW9uKCRodHRwLCAkdGVtcGxhdGVDYWNoZSwgJHNjZSkge1xyXG4gKiAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICogICAgICAgICAkaHR0cC5nZXQoXCJ0ZXN0X2RhdGEuanNvblwiLCB7Y2FjaGU6ICR0ZW1wbGF0ZUNhY2hlfSkuc3VjY2VzcyhmdW5jdGlvbih1c2VyQ29tbWVudHMpIHtcclxuICogICAgICAgICAgIHNlbGYudXNlckNvbW1lbnRzID0gdXNlckNvbW1lbnRzO1xyXG4gKiAgICAgICAgIH0pO1xyXG4gKiAgICAgICAgIHNlbGYuZXhwbGljaXRseVRydXN0ZWRIdG1sID0gJHNjZS50cnVzdEFzSHRtbChcclxuICogICAgICAgICAgICAgJzxzcGFuIG9ubW91c2VvdmVyPVwidGhpcy50ZXh0Q29udGVudD0mcXVvdDtFeHBsaWNpdGx5IHRydXN0ZWQgSFRNTCBieXBhc3NlcyAnICtcclxuICogICAgICAgICAgICAgJ3Nhbml0aXphdGlvbi4mcXVvdDtcIj5Ib3ZlciBvdmVyIHRoaXMgdGV4dC48L3NwYW4+Jyk7XHJcbiAqICAgICAgIH1dKTtcclxuICogPC9maWxlPlxyXG4gKlxyXG4gKiA8ZmlsZSBuYW1lPVwidGVzdF9kYXRhLmpzb25cIj5cclxuICogW1xyXG4gKiAgIHsgXCJuYW1lXCI6IFwiQWxpY2VcIixcclxuICogICAgIFwiaHRtbENvbW1lbnRcIjpcclxuICogICAgICAgICBcIjxzcGFuIG9ubW91c2VvdmVyPSd0aGlzLnRleHRDb250ZW50PVxcXCJQV04zRCFcXFwiJz5JcyA8aT5hbnlvbmU8L2k+IHJlYWRpbmcgdGhpcz88L3NwYW4+XCJcclxuICogICB9LFxyXG4gKiAgIHsgXCJuYW1lXCI6IFwiQm9iXCIsXHJcbiAqICAgICBcImh0bWxDb21tZW50XCI6IFwiPGk+WWVzITwvaT4gIEFtIEkgdGhlIG9ubHkgb3RoZXIgb25lP1wiXHJcbiAqICAgfVxyXG4gKiBdXHJcbiAqIDwvZmlsZT5cclxuICpcclxuICogPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gKiAgIGRlc2NyaWJlKCdTQ0UgZG9jIGRlbW8nLCBmdW5jdGlvbigpIHtcclxuICogICAgIGl0KCdzaG91bGQgc2FuaXRpemUgdW50cnVzdGVkIHZhbHVlcycsIGZ1bmN0aW9uKCkge1xyXG4gKiAgICAgICBleHBlY3QoZWxlbWVudC5hbGwoYnkuY3NzKCcuaHRtbENvbW1lbnQnKSkuZmlyc3QoKS5nZXRJbm5lckh0bWwoKSlcclxuICogICAgICAgICAgIC50b0JlKCc8c3Bhbj5JcyA8aT5hbnlvbmU8L2k+IHJlYWRpbmcgdGhpcz88L3NwYW4+Jyk7XHJcbiAqICAgICB9KTtcclxuICpcclxuICogICAgIGl0KCdzaG91bGQgTk9UIHNhbml0aXplIGV4cGxpY2l0bHkgdHJ1c3RlZCB2YWx1ZXMnLCBmdW5jdGlvbigpIHtcclxuICogICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2V4cGxpY2l0bHlUcnVzdGVkSHRtbCcpKS5nZXRJbm5lckh0bWwoKSkudG9CZShcclxuICogICAgICAgICAgICc8c3BhbiBvbm1vdXNlb3Zlcj1cInRoaXMudGV4dENvbnRlbnQ9JnF1b3Q7RXhwbGljaXRseSB0cnVzdGVkIEhUTUwgYnlwYXNzZXMgJyArXHJcbiAqICAgICAgICAgICAnc2FuaXRpemF0aW9uLiZxdW90O1wiPkhvdmVyIG92ZXIgdGhpcyB0ZXh0Ljwvc3Bhbj4nKTtcclxuICogICAgIH0pO1xyXG4gKiAgIH0pO1xyXG4gKiA8L2ZpbGU+XHJcbiAqIDwvZXhhbXBsZT5cclxuICpcclxuICpcclxuICpcclxuICogIyMgQ2FuIEkgZGlzYWJsZSBTQ0UgY29tcGxldGVseT9cclxuICpcclxuICogWWVzLCB5b3UgY2FuLiAgSG93ZXZlciwgdGhpcyBpcyBzdHJvbmdseSBkaXNjb3VyYWdlZC4gIFNDRSBnaXZlcyB5b3UgYSBsb3Qgb2Ygc2VjdXJpdHkgYmVuZWZpdHNcclxuICogZm9yIGxpdHRsZSBjb2Rpbmcgb3ZlcmhlYWQuICBJdCB3aWxsIGJlIG11Y2ggaGFyZGVyIHRvIHRha2UgYW4gU0NFIGRpc2FibGVkIGFwcGxpY2F0aW9uIGFuZFxyXG4gKiBlaXRoZXIgc2VjdXJlIGl0IG9uIHlvdXIgb3duIG9yIGVuYWJsZSBTQ0UgYXQgYSBsYXRlciBzdGFnZS4gIEl0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gZGlzYWJsZSBTQ0VcclxuICogZm9yIGNhc2VzIHdoZXJlIHlvdSBoYXZlIGEgbG90IG9mIGV4aXN0aW5nIGNvZGUgdGhhdCB3YXMgd3JpdHRlbiBiZWZvcmUgU0NFIHdhcyBpbnRyb2R1Y2VkIGFuZFxyXG4gKiB5b3UncmUgbWlncmF0aW5nIHRoZW0gYSBtb2R1bGUgYXQgYSB0aW1lLlxyXG4gKlxyXG4gKiBUaGF0IHNhaWQsIGhlcmUncyBob3cgeW91IGNhbiBjb21wbGV0ZWx5IGRpc2FibGUgU0NFOlxyXG4gKlxyXG4gKiBgYGBcclxuICogYW5ndWxhci5tb2R1bGUoJ215QXBwV2l0aFNjZURpc2FibGVkbXlBcHAnLCBbXSkuY29uZmlnKGZ1bmN0aW9uKCRzY2VQcm92aWRlcikge1xyXG4gKiAgIC8vIENvbXBsZXRlbHkgZGlzYWJsZSBTQ0UuICBGb3IgZGVtb25zdHJhdGlvbiBwdXJwb3NlcyBvbmx5IVxyXG4gKiAgIC8vIERvIG5vdCB1c2UgaW4gbmV3IHByb2plY3RzLlxyXG4gKiAgICRzY2VQcm92aWRlci5lbmFibGVkKGZhbHNlKTtcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKi9cclxuLyoganNoaW50IG1heGxlbjogMTAwICovXHJcblxyXG5mdW5jdGlvbiAkU2NlUHJvdmlkZXIoKSB7XHJcbiAgdmFyIGVuYWJsZWQgPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgJHNjZVByb3ZpZGVyI2VuYWJsZWRcclxuICAgKiBAa2luZCBmdW5jdGlvblxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtib29sZWFuPX0gdmFsdWUgSWYgcHJvdmlkZWQsIHRoZW4gZW5hYmxlcy9kaXNhYmxlcyBTQ0UuXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBTQ0UgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogRW5hYmxlcy9kaXNhYmxlcyBTQ0UgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUuXHJcbiAgICovXHJcbiAgdGhpcy5lbmFibGVkID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgIGVuYWJsZWQgPSAhIXZhbHVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVuYWJsZWQ7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qIERlc2lnbiBub3RlcyBvbiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgU0NFLlxyXG4gICAqXHJcbiAgICogVGhlIEFQSSBjb250cmFjdCBmb3IgdGhlIFNDRSBkZWxlZ2F0ZVxyXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgKiBUaGUgU0NFIGRlbGVnYXRlIG9iamVjdCBtdXN0IHByb3ZpZGUgdGhlIGZvbGxvd2luZyAzIG1ldGhvZHM6XHJcbiAgICpcclxuICAgKiAtIHRydXN0QXMoY29udGV4dEVudW0sIHZhbHVlKVxyXG4gICAqICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHRlbGwgdGhlIFNDRSBzZXJ2aWNlIHRoYXQgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIE9LIHRvIHVzZSBpbiB0aGVcclxuICAgKiAgICAgY29udGV4dHMgc3BlY2lmaWVkIGJ5IGNvbnRleHRFbnVtLiAgSXQgbXVzdCByZXR1cm4gYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhY2NlcHRlZCBieVxyXG4gICAqICAgICBnZXRUcnVzdGVkKCkgZm9yIGEgY29tcGF0aWJsZSBjb250ZXh0RW51bSBhbmQgcmV0dXJuIHRoaXMgdmFsdWUuXHJcbiAgICpcclxuICAgKiAtIHZhbHVlT2YodmFsdWUpXHJcbiAgICogICAgIEZvciB2YWx1ZXMgdGhhdCB3ZXJlIG5vdCBwcm9kdWNlZCBieSB0cnVzdEFzKCksIHJldHVybiB0aGVtIGFzIGlzLiAgRm9yIHZhbHVlcyB0aGF0IHdlcmVcclxuICAgKiAgICAgcHJvZHVjZWQgYnkgdHJ1c3RBcygpLCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgaW5wdXQgdmFsdWUgdG8gdHJ1c3RBcy4gIEJhc2ljYWxseSwgaWZcclxuICAgKiAgICAgdHJ1c3RBcyBpcyB3cmFwcGluZyB0aGUgZ2l2ZW4gdmFsdWVzIGludG8gc29tZSB0eXBlLCB0aGlzIG9wZXJhdGlvbiB1bndyYXBzIGl0IHdoZW4gZ2l2ZW5cclxuICAgKiAgICAgc3VjaCBhIHZhbHVlLlxyXG4gICAqXHJcbiAgICogLSBnZXRUcnVzdGVkKGNvbnRleHRFbnVtLCB2YWx1ZSlcclxuICAgKiAgICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBhIHZhbHVlIHRoYXQgaXMgc2FmZSB0byB1c2UgaW4gdGhlIGNvbnRleHQgc3BlY2lmaWVkIGJ5XHJcbiAgICogICAgIGNvbnRleHRFbnVtIG9yIHRocm93IGFuZCBleGNlcHRpb24gb3RoZXJ3aXNlLlxyXG4gICAqXHJcbiAgICogTk9URTogVGhpcyBjb250cmFjdCBkZWxpYmVyYXRlbHkgZG9lcyBOT1Qgc3RhdGUgdGhhdCB2YWx1ZXMgcmV0dXJuZWQgYnkgdHJ1c3RBcygpIG11c3QgYmVcclxuICAgKiBvcGFxdWUgb3Igd3JhcHBlZCBpbiBzb21lIGhvbGRlciBvYmplY3QuICBUaGF0IGhhcHBlbnMgdG8gYmUgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLiAgRm9yXHJcbiAgICogaW5zdGFuY2UsIGFuIGltcGxlbWVudGF0aW9uIGNvdWxkIG1haW50YWluIGEgcmVnaXN0cnkgb2YgYWxsIHRydXN0ZWQgb2JqZWN0cyBieSBjb250ZXh0LiAgSW5cclxuICAgKiBzdWNoIGEgY2FzZSwgdHJ1c3RBcygpIHdvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3QgdGhhdCB3YXMgcGFzc2VkIGluLiAgZ2V0VHJ1c3RlZCgpIHdvdWxkXHJcbiAgICogcmV0dXJuIHRoZSBzYW1lIG9iamVjdCBwYXNzZWQgaW4gaWYgaXQgd2FzIGZvdW5kIGluIHRoZSByZWdpc3RyeSB1bmRlciBhIGNvbXBhdGlibGUgY29udGV4dCBvclxyXG4gICAqIHRocm93IGFuIGV4Y2VwdGlvbiBvdGhlcndpc2UuICBBbiBpbXBsZW1lbnRhdGlvbiBtaWdodCBvbmx5IHdyYXAgdmFsdWVzIHNvbWUgb2YgdGhlIHRpbWUgYmFzZWRcclxuICAgKiBvbiBzb21lIGNyaXRlcmlhLiAgZ2V0VHJ1c3RlZCgpIG1pZ2h0IHJldHVybiBhIHZhbHVlIGFuZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBzcGVjaWFsXHJcbiAgICogY29uc3RhbnRzIG9yIG9iamVjdHMgZXZlbiBpZiBub3Qgd3JhcHBlZC4gIEFsbCBzdWNoIGltcGxlbWVudGF0aW9ucyBmdWxmaWxsIHRoaXMgY29udHJhY3QuXHJcbiAgICpcclxuICAgKlxyXG4gICAqIEEgbm90ZSBvbiB0aGUgaW5oZXJpdGFuY2UgbW9kZWwgZm9yIFNDRSBjb250ZXh0c1xyXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAqIEkndmUgdXNlZCBpbmhlcml0YW5jZSBhbmQgbWFkZSBSRVNPVVJDRV9VUkwgd3JhcHBlZCB0eXBlcyBhIHN1YnR5cGUgb2YgVVJMIHdyYXBwZWQgdHlwZXMuICBUaGlzXHJcbiAgICogaXMgcHVyZWx5IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXHJcbiAgICpcclxuICAgKiBUaGUgY29udHJhY3QgaXMgc2ltcGx5IHRoaXM6XHJcbiAgICpcclxuICAgKiAgICAgZ2V0VHJ1c3RlZCgkc2NlLlJFU09VUkNFX1VSTCwgdmFsdWUpIHN1Y2NlZWRpbmcgaW1wbGllcyB0aGF0IGdldFRydXN0ZWQoJHNjZS5VUkwsIHZhbHVlKVxyXG4gICAqICAgICB3aWxsIGFsc28gc3VjY2VlZC5cclxuICAgKlxyXG4gICAqIEluaGVyaXRhbmNlIGhhcHBlbnMgdG8gY2FwdHVyZSB0aGlzIGluIGEgbmF0dXJhbCB3YXkuICBJbiBzb21lIGZ1dHVyZSwgd2VcclxuICAgKiBtYXkgbm90IHVzZSBpbmhlcml0YW5jZSBhbnltb3JlLiAgVGhhdCBpcyBPSyBiZWNhdXNlIG5vIGNvZGUgb3V0c2lkZSBvZlxyXG4gICAqIHNjZS5qcyBhbmQgc2NlU3BlY3MuanMgd291bGQgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGlzIGRldGFpbC5cclxuICAgKi9cclxuXHJcbiAgdGhpcy4kZ2V0ID0gWyckcGFyc2UnLCAnJHNjZURlbGVnYXRlJywgZnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAkcGFyc2UsICAgJHNjZURlbGVnYXRlKSB7XHJcbiAgICAvLyBQcmVyZXE6IEVuc3VyZSB0aGF0IHdlJ3JlIG5vdCBydW5uaW5nIGluIElFPDExIHF1aXJrcyBtb2RlLiAgSW4gdGhhdCBtb2RlLCBJRSA8IDExIGFsbG93XHJcbiAgICAvLyB0aGUgXCJleHByZXNzaW9uKGphdmFzY3JpcHQgZXhwcmVzc2lvbilcIiBzeW50YXggd2hpY2ggaXMgaW5zZWN1cmUuXHJcbiAgICBpZiAoZW5hYmxlZCAmJiBtc2llIDwgOCkge1xyXG4gICAgICB0aHJvdyAkc2NlTWluRXJyKCdpZXF1aXJrcycsXHJcbiAgICAgICAgJ1N0cmljdCBDb250ZXh0dWFsIEVzY2FwaW5nIGRvZXMgbm90IHN1cHBvcnQgSW50ZXJuZXQgRXhwbG9yZXIgdmVyc2lvbiA8IDExIGluIHF1aXJrcyAnICtcclxuICAgICAgICAnbW9kZS4gIFlvdSBjYW4gZml4IHRoaXMgYnkgYWRkaW5nIHRoZSB0ZXh0IDwhZG9jdHlwZSBodG1sPiB0byB0aGUgdG9wIG9mIHlvdXIgSFRNTCAnICtcclxuICAgICAgICAnZG9jdW1lbnQuICBTZWUgaHR0cDovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcuJHNjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgc2NlID0gc2hhbGxvd0NvcHkoU0NFX0NPTlRFWFRTKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAqIEBuYW1lICRzY2UjaXNFbmFibGVkXHJcbiAgICAgKiBAa2luZCBmdW5jdGlvblxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgU0NFIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZS4gIElmIHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUsIHlvdVxyXG4gICAgICogaGF2ZSB0byBkbyBpdCBhdCBtb2R1bGUgY29uZmlnIHRpbWUgb24ge0BsaW5rIG5nLiRzY2VQcm92aWRlciAkc2NlUHJvdmlkZXJ9LlxyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBTQ0UgaXMgZW5hYmxlZC5cclxuICAgICAqL1xyXG4gICAgc2NlLmlzRW5hYmxlZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gZW5hYmxlZDtcclxuICAgIH07XHJcbiAgICBzY2UudHJ1c3RBcyA9ICRzY2VEZWxlZ2F0ZS50cnVzdEFzO1xyXG4gICAgc2NlLmdldFRydXN0ZWQgPSAkc2NlRGVsZWdhdGUuZ2V0VHJ1c3RlZDtcclxuICAgIHNjZS52YWx1ZU9mID0gJHNjZURlbGVnYXRlLnZhbHVlT2Y7XHJcblxyXG4gICAgaWYgKCFlbmFibGVkKSB7XHJcbiAgICAgIHNjZS50cnVzdEFzID0gc2NlLmdldFRydXN0ZWQgPSBmdW5jdGlvbih0eXBlLCB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XHJcbiAgICAgIHNjZS52YWx1ZU9mID0gaWRlbnRpdHk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgKiBAbmFtZSAkc2NlI3BhcnNlQXNcclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIENvbnZlcnRzIEFuZ3VsYXIge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaW50byBhIGZ1bmN0aW9uLiAgVGhpcyBpcyBsaWtlIHtAbGlua1xyXG4gICAgICogbmcuJHBhcnNlICRwYXJzZX0gYW5kIGlzIGlkZW50aWNhbCB3aGVuIHRoZSBleHByZXNzaW9uIGlzIGEgbGl0ZXJhbCBjb25zdGFudC4gIE90aGVyd2lzZSwgaXRcclxuICAgICAqIHdyYXBzIHRoZSBleHByZXNzaW9uIGluIGEgY2FsbCB0byB7QGxpbmsgbmcuJHNjZSNnZXRUcnVzdGVkICRzY2UuZ2V0VHJ1c3RlZCgqdHlwZSosXHJcbiAgICAgKiAqcmVzdWx0Kil9XHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGtpbmQgb2YgU0NFIGNvbnRleHQgaW4gd2hpY2ggdGhpcyByZXN1bHQgd2lsbCBiZSB1c2VkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gU3RyaW5nIGV4cHJlc3Npb24gdG8gY29tcGlsZS5cclxuICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbihjb250ZXh0LCBsb2NhbHMpfSBhIGZ1bmN0aW9uIHdoaWNoIHJlcHJlc2VudHMgdGhlIGNvbXBpbGVkIGV4cHJlc3Npb246XHJcbiAgICAgKlxyXG4gICAgICogICAgKiBgY29udGV4dGAg4oCTIGB7b2JqZWN0fWAg4oCTIGFuIG9iamVjdCBhZ2FpbnN0IHdoaWNoIGFueSBleHByZXNzaW9ucyBlbWJlZGRlZCBpbiB0aGUgc3RyaW5nc1xyXG4gICAgICogICAgICBhcmUgZXZhbHVhdGVkIGFnYWluc3QgKHR5cGljYWxseSBhIHNjb3BlIG9iamVjdCkuXHJcbiAgICAgKiAgICAqIGBsb2NhbHNgIOKAkyBge29iamVjdD19YCDigJMgbG9jYWwgdmFyaWFibGVzIGNvbnRleHQgb2JqZWN0LCB1c2VmdWwgZm9yIG92ZXJyaWRpbmcgdmFsdWVzIGluXHJcbiAgICAgKiAgICAgIGBjb250ZXh0YC5cclxuICAgICAqL1xyXG4gICAgc2NlLnBhcnNlQXMgPSBmdW5jdGlvbiBzY2VQYXJzZUFzKHR5cGUsIGV4cHIpIHtcclxuICAgICAgdmFyIHBhcnNlZCA9ICRwYXJzZShleHByKTtcclxuICAgICAgaWYgKHBhcnNlZC5saXRlcmFsICYmIHBhcnNlZC5jb25zdGFudCkge1xyXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICRwYXJzZShleHByLCBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHNjZS5nZXRUcnVzdGVkKHR5cGUsIHZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAqIEBuYW1lICRzY2UjdHJ1c3RBc1xyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogRGVsZWdhdGVzIHRvIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjdHJ1c3RBcyBgJHNjZURlbGVnYXRlLnRydXN0QXNgfS4gIEFzIHN1Y2gsXHJcbiAgICAgKiByZXR1cm5zIGFuIG9iamVjdCB0aGF0IGlzIHRydXN0ZWQgYnkgYW5ndWxhciBmb3IgdXNlIGluIHNwZWNpZmllZCBzdHJpY3QgY29udGV4dHVhbFxyXG4gICAgICogZXNjYXBpbmcgY29udGV4dHMgKHN1Y2ggYXMgbmctYmluZC1odG1sLCBuZy1pbmNsdWRlLCBhbnkgc3JjIGF0dHJpYnV0ZVxyXG4gICAgICogaW50ZXJwb2xhdGlvbiwgYW55IGRvbSBldmVudCBiaW5kaW5nIGF0dHJpYnV0ZSBpbnRlcnBvbGF0aW9uIHN1Y2ggYXMgZm9yIG9uY2xpY2ssICBldGMuKVxyXG4gICAgICogdGhhdCB1c2VzIHRoZSBwcm92aWRlZCB2YWx1ZS4gIFNlZSAqIHtAbGluayBuZy4kc2NlICRzY2V9IGZvciBlbmFibGluZyBzdHJpY3QgY29udGV4dHVhbFxyXG4gICAgICogZXNjYXBpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGtpbmQgb2YgY29udGV4dCBpbiB3aGljaCB0aGlzIHZhbHVlIGlzIHNhZmUgZm9yIHVzZS4gIGUuZy4gdXJsLFxyXG4gICAgICogICByZXNvdXJjZV91cmwsIGh0bWwsIGpzIGFuZCBjc3MuXHJcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0aGF0IHRoYXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdHJ1c3RlZC9zYWZlLlxyXG4gICAgICogQHJldHVybnMgeyp9IEEgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCB0byBzdGFuZCBpbiBmb3IgdGhlIHByb3ZpZGVkIGB2YWx1ZWAgaW4gcGxhY2VzXHJcbiAgICAgKiB3aGVyZSBBbmd1bGFyIGV4cGVjdHMgYSAkc2NlLnRydXN0QXMoKSByZXR1cm4gdmFsdWUuXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAqIEBuYW1lICRzY2UjdHJ1c3RBc0h0bWxcclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFNob3J0aGFuZCBtZXRob2QuICBgJHNjZS50cnVzdEFzSHRtbCh2YWx1ZSlgIOKGklxyXG4gICAgICogICAgIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjdHJ1c3RBcyBgJHNjZURlbGVnYXRlLnRydXN0QXMoJHNjZS5IVE1MLCB2YWx1ZSlgfVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHRydXN0QXMuXHJcbiAgICAgKiBAcmV0dXJucyB7Kn0gQW4gb2JqZWN0IHRoYXQgY2FuIGJlIHBhc3NlZCB0byB7QGxpbmsgbmcuJHNjZSNnZXRUcnVzdGVkSHRtbFxyXG4gICAgICogICAgICRzY2UuZ2V0VHJ1c3RlZEh0bWwodmFsdWUpfSB0byBvYnRhaW4gdGhlIG9yaWdpbmFsIHZhbHVlLiAgKHByaXZpbGVnZWQgZGlyZWN0aXZlc1xyXG4gICAgICogICAgIG9ubHkgYWNjZXB0IGV4cHJlc3Npb25zIHRoYXQgYXJlIGVpdGhlciBsaXRlcmFsIGNvbnN0YW50cyBvciBhcmUgdGhlXHJcbiAgICAgKiAgICAgcmV0dXJuIHZhbHVlIG9mIHtAbGluayBuZy4kc2NlI3RydXN0QXMgJHNjZS50cnVzdEFzfS4pXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAqIEBuYW1lICRzY2UjdHJ1c3RBc1VybFxyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLnRydXN0QXNVcmwodmFsdWUpYCDihpJcclxuICAgICAqICAgICB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI3RydXN0QXMgYCRzY2VEZWxlZ2F0ZS50cnVzdEFzKCRzY2UuVVJMLCB2YWx1ZSlgfVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHRydXN0QXMuXHJcbiAgICAgKiBAcmV0dXJucyB7Kn0gQW4gb2JqZWN0IHRoYXQgY2FuIGJlIHBhc3NlZCB0byB7QGxpbmsgbmcuJHNjZSNnZXRUcnVzdGVkVXJsXHJcbiAgICAgKiAgICAgJHNjZS5nZXRUcnVzdGVkVXJsKHZhbHVlKX0gdG8gb2J0YWluIHRoZSBvcmlnaW5hbCB2YWx1ZS4gIChwcml2aWxlZ2VkIGRpcmVjdGl2ZXNcclxuICAgICAqICAgICBvbmx5IGFjY2VwdCBleHByZXNzaW9ucyB0aGF0IGFyZSBlaXRoZXIgbGl0ZXJhbCBjb25zdGFudHMgb3IgYXJlIHRoZVxyXG4gICAgICogICAgIHJldHVybiB2YWx1ZSBvZiB7QGxpbmsgbmcuJHNjZSN0cnVzdEFzICRzY2UudHJ1c3RBc30uKVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgKiBAbmFtZSAkc2NlI3RydXN0QXNSZXNvdXJjZVVybFxyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLnRydXN0QXNSZXNvdXJjZVVybCh2YWx1ZSlgIOKGklxyXG4gICAgICogICAgIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjdHJ1c3RBcyBgJHNjZURlbGVnYXRlLnRydXN0QXMoJHNjZS5SRVNPVVJDRV9VUkwsIHZhbHVlKWB9XHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gdHJ1c3RBcy5cclxuICAgICAqIEByZXR1cm5zIHsqfSBBbiBvYmplY3QgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHtAbGluayBuZy4kc2NlI2dldFRydXN0ZWRSZXNvdXJjZVVybFxyXG4gICAgICogICAgICRzY2UuZ2V0VHJ1c3RlZFJlc291cmNlVXJsKHZhbHVlKX0gdG8gb2J0YWluIHRoZSBvcmlnaW5hbCB2YWx1ZS4gIChwcml2aWxlZ2VkIGRpcmVjdGl2ZXNcclxuICAgICAqICAgICBvbmx5IGFjY2VwdCBleHByZXNzaW9ucyB0aGF0IGFyZSBlaXRoZXIgbGl0ZXJhbCBjb25zdGFudHMgb3IgYXJlIHRoZSByZXR1cm5cclxuICAgICAqICAgICB2YWx1ZSBvZiB7QGxpbmsgbmcuJHNjZSN0cnVzdEFzICRzY2UudHJ1c3RBc30uKVxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgKiBAbmFtZSAkc2NlI3RydXN0QXNKc1xyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLnRydXN0QXNKcyh2YWx1ZSlgIOKGklxyXG4gICAgICogICAgIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjdHJ1c3RBcyBgJHNjZURlbGVnYXRlLnRydXN0QXMoJHNjZS5KUywgdmFsdWUpYH1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB0cnVzdEFzLlxyXG4gICAgICogQHJldHVybnMgeyp9IEFuIG9iamVjdCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8ge0BsaW5rIG5nLiRzY2UjZ2V0VHJ1c3RlZEpzXHJcbiAgICAgKiAgICAgJHNjZS5nZXRUcnVzdGVkSnModmFsdWUpfSB0byBvYnRhaW4gdGhlIG9yaWdpbmFsIHZhbHVlLiAgKHByaXZpbGVnZWQgZGlyZWN0aXZlc1xyXG4gICAgICogICAgIG9ubHkgYWNjZXB0IGV4cHJlc3Npb25zIHRoYXQgYXJlIGVpdGhlciBsaXRlcmFsIGNvbnN0YW50cyBvciBhcmUgdGhlXHJcbiAgICAgKiAgICAgcmV0dXJuIHZhbHVlIG9mIHtAbGluayBuZy4kc2NlI3RydXN0QXMgJHNjZS50cnVzdEFzfS4pXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAqIEBuYW1lICRzY2UjZ2V0VHJ1c3RlZFxyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogRGVsZWdhdGVzIHRvIHtAbGluayBuZy4kc2NlRGVsZWdhdGUjZ2V0VHJ1c3RlZCBgJHNjZURlbGVnYXRlLmdldFRydXN0ZWRgfS4gIEFzIHN1Y2gsXHJcbiAgICAgKiB0YWtlcyB0aGUgcmVzdWx0IG9mIGEge0BsaW5rIG5nLiRzY2UjdHJ1c3RBcyBgJHNjZS50cnVzdEFzYH0oKSBjYWxsIGFuZCByZXR1cm5zIHRoZVxyXG4gICAgICogb3JpZ2luYWxseSBzdXBwbGllZCB2YWx1ZSBpZiB0aGUgcXVlcmllZCBjb250ZXh0IHR5cGUgaXMgYSBzdXBlcnR5cGUgb2YgdGhlIGNyZWF0ZWQgdHlwZS5cclxuICAgICAqIElmIHRoaXMgY29uZGl0aW9uIGlzbid0IHNhdGlzZmllZCwgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUga2luZCBvZiBjb250ZXh0IGluIHdoaWNoIHRoaXMgdmFsdWUgaXMgdG8gYmUgdXNlZC5cclxuICAgICAqIEBwYXJhbSB7Kn0gbWF5YmVUcnVzdGVkIFRoZSByZXN1bHQgb2YgYSBwcmlvciB7QGxpbmsgbmcuJHNjZSN0cnVzdEFzIGAkc2NlLnRydXN0QXNgfVxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgY2FsbC5cclxuICAgICAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgdGhlIHdhcyBvcmlnaW5hbGx5IHByb3ZpZGVkIHRvXHJcbiAgICAgKiAgICAgICAgICAgICAge0BsaW5rIG5nLiRzY2UjdHJ1c3RBcyBgJHNjZS50cnVzdEFzYH0gaWYgdmFsaWQgaW4gdGhpcyBjb250ZXh0LlxyXG4gICAgICogICAgICAgICAgICAgIE90aGVyd2lzZSwgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICogQG5hbWUgJHNjZSNnZXRUcnVzdGVkSHRtbFxyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLmdldFRydXN0ZWRIdG1sKHZhbHVlKWAg4oaSXHJcbiAgICAgKiAgICAge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZSNnZXRUcnVzdGVkIGAkc2NlRGVsZWdhdGUuZ2V0VHJ1c3RlZCgkc2NlLkhUTUwsIHZhbHVlKWB9XHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcGFzcyB0byBgJHNjZS5nZXRUcnVzdGVkYC5cclxuICAgICAqIEByZXR1cm5zIHsqfSBUaGUgcmV0dXJuIHZhbHVlIG9mIGAkc2NlLmdldFRydXN0ZWQoJHNjZS5IVE1MLCB2YWx1ZSlgXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAqIEBuYW1lICRzY2UjZ2V0VHJ1c3RlZENzc1xyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLmdldFRydXN0ZWRDc3ModmFsdWUpYCDihpJcclxuICAgICAqICAgICB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI2dldFRydXN0ZWQgYCRzY2VEZWxlZ2F0ZS5nZXRUcnVzdGVkKCRzY2UuQ1NTLCB2YWx1ZSlgfVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHBhc3MgdG8gYCRzY2UuZ2V0VHJ1c3RlZGAuXHJcbiAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHJldHVybiB2YWx1ZSBvZiBgJHNjZS5nZXRUcnVzdGVkKCRzY2UuQ1NTLCB2YWx1ZSlgXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAqIEBuYW1lICRzY2UjZ2V0VHJ1c3RlZFVybFxyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLmdldFRydXN0ZWRVcmwodmFsdWUpYCDihpJcclxuICAgICAqICAgICB7QGxpbmsgbmcuJHNjZURlbGVnYXRlI2dldFRydXN0ZWQgYCRzY2VEZWxlZ2F0ZS5nZXRUcnVzdGVkKCRzY2UuVVJMLCB2YWx1ZSlgfVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHBhc3MgdG8gYCRzY2UuZ2V0VHJ1c3RlZGAuXHJcbiAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHJldHVybiB2YWx1ZSBvZiBgJHNjZS5nZXRUcnVzdGVkKCRzY2UuVVJMLCB2YWx1ZSlgXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAqIEBuYW1lICRzY2UjZ2V0VHJ1c3RlZFJlc291cmNlVXJsXHJcbiAgICAgKlxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiBTaG9ydGhhbmQgbWV0aG9kLiAgYCRzY2UuZ2V0VHJ1c3RlZFJlc291cmNlVXJsKHZhbHVlKWAg4oaSXHJcbiAgICAgKiAgICAge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZSNnZXRUcnVzdGVkIGAkc2NlRGVsZWdhdGUuZ2V0VHJ1c3RlZCgkc2NlLlJFU09VUkNFX1VSTCwgdmFsdWUpYH1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwYXNzIHRvIGAkc2NlRGVsZWdhdGUuZ2V0VHJ1c3RlZGAuXHJcbiAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHJldHVybiB2YWx1ZSBvZiBgJHNjZS5nZXRUcnVzdGVkKCRzY2UuUkVTT1VSQ0VfVVJMLCB2YWx1ZSlgXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAqIEBuYW1lICRzY2UjZ2V0VHJ1c3RlZEpzXHJcbiAgICAgKlxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiBTaG9ydGhhbmQgbWV0aG9kLiAgYCRzY2UuZ2V0VHJ1c3RlZEpzKHZhbHVlKWAg4oaSXHJcbiAgICAgKiAgICAge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZSNnZXRUcnVzdGVkIGAkc2NlRGVsZWdhdGUuZ2V0VHJ1c3RlZCgkc2NlLkpTLCB2YWx1ZSlgfVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHBhc3MgdG8gYCRzY2UuZ2V0VHJ1c3RlZGAuXHJcbiAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHJldHVybiB2YWx1ZSBvZiBgJHNjZS5nZXRUcnVzdGVkKCRzY2UuSlMsIHZhbHVlKWBcclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICogQG5hbWUgJHNjZSNwYXJzZUFzSHRtbFxyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLnBhcnNlQXNIdG1sKGV4cHJlc3Npb24gc3RyaW5nKWAg4oaSXHJcbiAgICAgKiAgICAge0BsaW5rIG5nLiRzY2UjcGFyc2VBcyBgJHNjZS5wYXJzZUFzKCRzY2UuSFRNTCwgdmFsdWUpYH1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiBTdHJpbmcgZXhwcmVzc2lvbiB0byBjb21waWxlLlxyXG4gICAgICogQHJldHVybnMge2Z1bmN0aW9uKGNvbnRleHQsIGxvY2Fscyl9IGEgZnVuY3Rpb24gd2hpY2ggcmVwcmVzZW50cyB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbjpcclxuICAgICAqXHJcbiAgICAgKiAgICAqIGBjb250ZXh0YCDigJMgYHtvYmplY3R9YCDigJMgYW4gb2JqZWN0IGFnYWluc3Qgd2hpY2ggYW55IGV4cHJlc3Npb25zIGVtYmVkZGVkIGluIHRoZSBzdHJpbmdzXHJcbiAgICAgKiAgICAgIGFyZSBldmFsdWF0ZWQgYWdhaW5zdCAodHlwaWNhbGx5IGEgc2NvcGUgb2JqZWN0KS5cclxuICAgICAqICAgICogYGxvY2Fsc2Ag4oCTIGB7b2JqZWN0PX1gIOKAkyBsb2NhbCB2YXJpYWJsZXMgY29udGV4dCBvYmplY3QsIHVzZWZ1bCBmb3Igb3ZlcnJpZGluZyB2YWx1ZXMgaW5cclxuICAgICAqICAgICAgYGNvbnRleHRgLlxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICAgKiBAbmFtZSAkc2NlI3BhcnNlQXNDc3NcclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFNob3J0aGFuZCBtZXRob2QuICBgJHNjZS5wYXJzZUFzQ3NzKHZhbHVlKWAg4oaSXHJcbiAgICAgKiAgICAge0BsaW5rIG5nLiRzY2UjcGFyc2VBcyBgJHNjZS5wYXJzZUFzKCRzY2UuQ1NTLCB2YWx1ZSlgfVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIFN0cmluZyBleHByZXNzaW9uIHRvIGNvbXBpbGUuXHJcbiAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb24oY29udGV4dCwgbG9jYWxzKX0gYSBmdW5jdGlvbiB3aGljaCByZXByZXNlbnRzIHRoZSBjb21waWxlZCBleHByZXNzaW9uOlxyXG4gICAgICpcclxuICAgICAqICAgICogYGNvbnRleHRgIOKAkyBge29iamVjdH1gIOKAkyBhbiBvYmplY3QgYWdhaW5zdCB3aGljaCBhbnkgZXhwcmVzc2lvbnMgZW1iZWRkZWQgaW4gdGhlIHN0cmluZ3NcclxuICAgICAqICAgICAgYXJlIGV2YWx1YXRlZCBhZ2FpbnN0ICh0eXBpY2FsbHkgYSBzY29wZSBvYmplY3QpLlxyXG4gICAgICogICAgKiBgbG9jYWxzYCDigJMgYHtvYmplY3Q9fWAg4oCTIGxvY2FsIHZhcmlhYmxlcyBjb250ZXh0IG9iamVjdCwgdXNlZnVsIGZvciBvdmVycmlkaW5nIHZhbHVlcyBpblxyXG4gICAgICogICAgICBgY29udGV4dGAuXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAqIEBuYW1lICRzY2UjcGFyc2VBc1VybFxyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogU2hvcnRoYW5kIG1ldGhvZC4gIGAkc2NlLnBhcnNlQXNVcmwodmFsdWUpYCDihpJcclxuICAgICAqICAgICB7QGxpbmsgbmcuJHNjZSNwYXJzZUFzIGAkc2NlLnBhcnNlQXMoJHNjZS5VUkwsIHZhbHVlKWB9XHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gU3RyaW5nIGV4cHJlc3Npb24gdG8gY29tcGlsZS5cclxuICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbihjb250ZXh0LCBsb2NhbHMpfSBhIGZ1bmN0aW9uIHdoaWNoIHJlcHJlc2VudHMgdGhlIGNvbXBpbGVkIGV4cHJlc3Npb246XHJcbiAgICAgKlxyXG4gICAgICogICAgKiBgY29udGV4dGAg4oCTIGB7b2JqZWN0fWAg4oCTIGFuIG9iamVjdCBhZ2FpbnN0IHdoaWNoIGFueSBleHByZXNzaW9ucyBlbWJlZGRlZCBpbiB0aGUgc3RyaW5nc1xyXG4gICAgICogICAgICBhcmUgZXZhbHVhdGVkIGFnYWluc3QgKHR5cGljYWxseSBhIHNjb3BlIG9iamVjdCkuXHJcbiAgICAgKiAgICAqIGBsb2NhbHNgIOKAkyBge29iamVjdD19YCDigJMgbG9jYWwgdmFyaWFibGVzIGNvbnRleHQgb2JqZWN0LCB1c2VmdWwgZm9yIG92ZXJyaWRpbmcgdmFsdWVzIGluXHJcbiAgICAgKiAgICAgIGBjb250ZXh0YC5cclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICogQG5hbWUgJHNjZSNwYXJzZUFzUmVzb3VyY2VVcmxcclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFNob3J0aGFuZCBtZXRob2QuICBgJHNjZS5wYXJzZUFzUmVzb3VyY2VVcmwodmFsdWUpYCDihpJcclxuICAgICAqICAgICB7QGxpbmsgbmcuJHNjZSNwYXJzZUFzIGAkc2NlLnBhcnNlQXMoJHNjZS5SRVNPVVJDRV9VUkwsIHZhbHVlKWB9XHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gU3RyaW5nIGV4cHJlc3Npb24gdG8gY29tcGlsZS5cclxuICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbihjb250ZXh0LCBsb2NhbHMpfSBhIGZ1bmN0aW9uIHdoaWNoIHJlcHJlc2VudHMgdGhlIGNvbXBpbGVkIGV4cHJlc3Npb246XHJcbiAgICAgKlxyXG4gICAgICogICAgKiBgY29udGV4dGAg4oCTIGB7b2JqZWN0fWAg4oCTIGFuIG9iamVjdCBhZ2FpbnN0IHdoaWNoIGFueSBleHByZXNzaW9ucyBlbWJlZGRlZCBpbiB0aGUgc3RyaW5nc1xyXG4gICAgICogICAgICBhcmUgZXZhbHVhdGVkIGFnYWluc3QgKHR5cGljYWxseSBhIHNjb3BlIG9iamVjdCkuXHJcbiAgICAgKiAgICAqIGBsb2NhbHNgIOKAkyBge29iamVjdD19YCDigJMgbG9jYWwgdmFyaWFibGVzIGNvbnRleHQgb2JqZWN0LCB1c2VmdWwgZm9yIG92ZXJyaWRpbmcgdmFsdWVzIGluXHJcbiAgICAgKiAgICAgIGBjb250ZXh0YC5cclxuICAgICAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAgICogQG5hbWUgJHNjZSNwYXJzZUFzSnNcclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFNob3J0aGFuZCBtZXRob2QuICBgJHNjZS5wYXJzZUFzSnModmFsdWUpYCDihpJcclxuICAgICAqICAgICB7QGxpbmsgbmcuJHNjZSNwYXJzZUFzIGAkc2NlLnBhcnNlQXMoJHNjZS5KUywgdmFsdWUpYH1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiBTdHJpbmcgZXhwcmVzc2lvbiB0byBjb21waWxlLlxyXG4gICAgICogQHJldHVybnMge2Z1bmN0aW9uKGNvbnRleHQsIGxvY2Fscyl9IGEgZnVuY3Rpb24gd2hpY2ggcmVwcmVzZW50cyB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbjpcclxuICAgICAqXHJcbiAgICAgKiAgICAqIGBjb250ZXh0YCDigJMgYHtvYmplY3R9YCDigJMgYW4gb2JqZWN0IGFnYWluc3Qgd2hpY2ggYW55IGV4cHJlc3Npb25zIGVtYmVkZGVkIGluIHRoZSBzdHJpbmdzXHJcbiAgICAgKiAgICAgIGFyZSBldmFsdWF0ZWQgYWdhaW5zdCAodHlwaWNhbGx5IGEgc2NvcGUgb2JqZWN0KS5cclxuICAgICAqICAgICogYGxvY2Fsc2Ag4oCTIGB7b2JqZWN0PX1gIOKAkyBsb2NhbCB2YXJpYWJsZXMgY29udGV4dCBvYmplY3QsIHVzZWZ1bCBmb3Igb3ZlcnJpZGluZyB2YWx1ZXMgaW5cclxuICAgICAqICAgICAgYGNvbnRleHRgLlxyXG4gICAgICovXHJcblxyXG4gICAgLy8gU2hvcnRoYW5kIGRlbGVnYXRpb25zLlxyXG4gICAgdmFyIHBhcnNlID0gc2NlLnBhcnNlQXMsXHJcbiAgICAgICAgZ2V0VHJ1c3RlZCA9IHNjZS5nZXRUcnVzdGVkLFxyXG4gICAgICAgIHRydXN0QXMgPSBzY2UudHJ1c3RBcztcclxuXHJcbiAgICBmb3JFYWNoKFNDRV9DT05URVhUUywgZnVuY3Rpb24oZW51bVZhbHVlLCBuYW1lKSB7XHJcbiAgICAgIHZhciBsTmFtZSA9IGxvd2VyY2FzZShuYW1lKTtcclxuICAgICAgc2NlW2NhbWVsQ2FzZShcInBhcnNlX2FzX1wiICsgbE5hbWUpXSA9IGZ1bmN0aW9uKGV4cHIpIHtcclxuICAgICAgICByZXR1cm4gcGFyc2UoZW51bVZhbHVlLCBleHByKTtcclxuICAgICAgfTtcclxuICAgICAgc2NlW2NhbWVsQ2FzZShcImdldF90cnVzdGVkX1wiICsgbE5hbWUpXSA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldFRydXN0ZWQoZW51bVZhbHVlLCB2YWx1ZSk7XHJcbiAgICAgIH07XHJcbiAgICAgIHNjZVtjYW1lbENhc2UoXCJ0cnVzdF9hc19cIiArIGxOYW1lKV0gPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVzdEFzKGVudW1WYWx1ZSwgdmFsdWUpO1xyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHNjZTtcclxuICB9XTtcclxufVxyXG5cclxuLyoqXHJcbiAqICEhISBUaGlzIGlzIGFuIHVuZG9jdW1lbnRlZCBcInByaXZhdGVcIiBzZXJ2aWNlICEhIVxyXG4gKlxyXG4gKiBAbmFtZSAkc25pZmZlclxyXG4gKiBAcmVxdWlyZXMgJHdpbmRvd1xyXG4gKiBAcmVxdWlyZXMgJGRvY3VtZW50XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaGlzdG9yeSBEb2VzIHRoZSBicm93c2VyIHN1cHBvcnQgaHRtbDUgaGlzdG9yeSBhcGkgP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHRyYW5zaXRpb25zIERvZXMgdGhlIGJyb3dzZXIgc3VwcG9ydCBDU1MgdHJhbnNpdGlvbiBldmVudHMgP1xyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFuaW1hdGlvbnMgRG9lcyB0aGUgYnJvd3NlciBzdXBwb3J0IENTUyBhbmltYXRpb24gZXZlbnRzID9cclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRoaXMgaXMgdmVyeSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGVzdGluZyBicm93c2VyJ3MgZmVhdHVyZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiAkU25pZmZlclByb3ZpZGVyKCkge1xyXG4gIHRoaXMuJGdldCA9IFsnJHdpbmRvdycsICckZG9jdW1lbnQnLCBmdW5jdGlvbigkd2luZG93LCAkZG9jdW1lbnQpIHtcclxuICAgIHZhciBldmVudFN1cHBvcnQgPSB7fSxcclxuICAgICAgICBhbmRyb2lkID1cclxuICAgICAgICAgIGludCgoL2FuZHJvaWQgKFxcZCspLy5leGVjKGxvd2VyY2FzZSgoJHdpbmRvdy5uYXZpZ2F0b3IgfHwge30pLnVzZXJBZ2VudCkpIHx8IFtdKVsxXSksXHJcbiAgICAgICAgYm94ZWUgPSAvQm94ZWUvaS50ZXN0KCgkd2luZG93Lm5hdmlnYXRvciB8fCB7fSkudXNlckFnZW50KSxcclxuICAgICAgICBkb2N1bWVudCA9ICRkb2N1bWVudFswXSB8fCB7fSxcclxuICAgICAgICB2ZW5kb3JQcmVmaXgsXHJcbiAgICAgICAgdmVuZG9yUmVnZXggPSAvXihNb3p8d2Via2l0fG1zKSg/PVtBLVpdKS8sXHJcbiAgICAgICAgYm9keVN0eWxlID0gZG9jdW1lbnQuYm9keSAmJiBkb2N1bWVudC5ib2R5LnN0eWxlLFxyXG4gICAgICAgIHRyYW5zaXRpb25zID0gZmFsc2UsXHJcbiAgICAgICAgYW5pbWF0aW9ucyA9IGZhbHNlLFxyXG4gICAgICAgIG1hdGNoO1xyXG5cclxuICAgIGlmIChib2R5U3R5bGUpIHtcclxuICAgICAgZm9yICh2YXIgcHJvcCBpbiBib2R5U3R5bGUpIHtcclxuICAgICAgICBpZiAobWF0Y2ggPSB2ZW5kb3JSZWdleC5leGVjKHByb3ApKSB7XHJcbiAgICAgICAgICB2ZW5kb3JQcmVmaXggPSBtYXRjaFswXTtcclxuICAgICAgICAgIHZlbmRvclByZWZpeCA9IHZlbmRvclByZWZpeC5zdWJzdHIoMCwgMSkudG9VcHBlckNhc2UoKSArIHZlbmRvclByZWZpeC5zdWJzdHIoMSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdmVuZG9yUHJlZml4KSB7XHJcbiAgICAgICAgdmVuZG9yUHJlZml4ID0gKCdXZWJraXRPcGFjaXR5JyBpbiBib2R5U3R5bGUpICYmICd3ZWJraXQnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0cmFuc2l0aW9ucyA9ICEhKCgndHJhbnNpdGlvbicgaW4gYm9keVN0eWxlKSB8fCAodmVuZG9yUHJlZml4ICsgJ1RyYW5zaXRpb24nIGluIGJvZHlTdHlsZSkpO1xyXG4gICAgICBhbmltYXRpb25zICA9ICEhKCgnYW5pbWF0aW9uJyBpbiBib2R5U3R5bGUpIHx8ICh2ZW5kb3JQcmVmaXggKyAnQW5pbWF0aW9uJyBpbiBib2R5U3R5bGUpKTtcclxuXHJcbiAgICAgIGlmIChhbmRyb2lkICYmICghdHJhbnNpdGlvbnMgfHwgICFhbmltYXRpb25zKSkge1xyXG4gICAgICAgIHRyYW5zaXRpb25zID0gaXNTdHJpbmcoZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRUcmFuc2l0aW9uKTtcclxuICAgICAgICBhbmltYXRpb25zID0gaXNTdHJpbmcoZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRBbmltYXRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIC8vIEFuZHJvaWQgaGFzIGhpc3RvcnkucHVzaFN0YXRlLCBidXQgaXQgZG9lcyBub3QgdXBkYXRlIGxvY2F0aW9uIGNvcnJlY3RseVxyXG4gICAgICAvLyBzbyBsZXQncyBub3QgdXNlIHRoZSBoaXN0b3J5IEFQSSBhdCBhbGwuXHJcbiAgICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9MTc0NzFcclxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5qcy9pc3N1ZXMvOTA0XHJcblxyXG4gICAgICAvLyBvbGRlciB3ZWJraXQgYnJvd3NlciAoNTMzLjkpIG9uIEJveGVlIGJveCBoYXMgZXhhY3RseSB0aGUgc2FtZSBwcm9ibGVtIGFzIEFuZHJvaWQgaGFzXHJcbiAgICAgIC8vIHNvIGxldCdzIG5vdCB1c2UgdGhlIGhpc3RvcnkgQVBJIGFsc29cclxuICAgICAgLy8gV2UgYXJlIHB1cnBvc2VmdWxseSB1c2luZyBgIShhbmRyb2lkIDwgNClgIHRvIGNvdmVyIHRoZSBjYXNlIHdoZW4gYGFuZHJvaWRgIGlzIHVuZGVmaW5lZFxyXG4gICAgICAvLyBqc2hpbnQgLVcwMThcclxuICAgICAgaGlzdG9yeTogISEoJHdpbmRvdy5oaXN0b3J5ICYmICR3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUgJiYgIShhbmRyb2lkIDwgNCkgJiYgIWJveGVlKSxcclxuICAgICAgLy8ganNoaW50ICtXMDE4XHJcbiAgICAgIGhhc0V2ZW50OiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgIC8vIElFOSBpbXBsZW1lbnRzICdpbnB1dCcgZXZlbnQgaXQncyBzbyBmdWJhcmVkIHRoYXQgd2UgcmF0aGVyIHByZXRlbmQgdGhhdCBpdCBkb2Vzbid0IGhhdmVcclxuICAgICAgICAvLyBpdC4gSW4gcGFydGljdWxhciB0aGUgZXZlbnQgaXMgbm90IGZpcmVkIHdoZW4gYmFja3NwYWNlIG9yIGRlbGV0ZSBrZXkgYXJlIHByZXNzZWQgb3JcclxuICAgICAgICAvLyB3aGVuIGN1dCBvcGVyYXRpb24gaXMgcGVyZm9ybWVkLlxyXG4gICAgICAgIGlmIChldmVudCA9PSAnaW5wdXQnICYmIG1zaWUgPT0gOSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoaXNVbmRlZmluZWQoZXZlbnRTdXBwb3J0W2V2ZW50XSkpIHtcclxuICAgICAgICAgIHZhciBkaXZFbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgIGV2ZW50U3VwcG9ydFtldmVudF0gPSAnb24nICsgZXZlbnQgaW4gZGl2RWxtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGV2ZW50U3VwcG9ydFtldmVudF07XHJcbiAgICAgIH0sXHJcbiAgICAgIGNzcDogY3NwKCksXHJcbiAgICAgIHZlbmRvclByZWZpeDogdmVuZG9yUHJlZml4LFxyXG4gICAgICB0cmFuc2l0aW9uczogdHJhbnNpdGlvbnMsXHJcbiAgICAgIGFuaW1hdGlvbnM6IGFuaW1hdGlvbnMsXHJcbiAgICAgIGFuZHJvaWQ6IGFuZHJvaWRcclxuICAgIH07XHJcbiAgfV07XHJcbn1cclxuXHJcbnZhciAkY29tcGlsZU1pbkVyciA9IG1pbkVycignJGNvbXBpbGUnKTtcclxuXHJcbi8qKlxyXG4gKiBAbmdkb2Mgc2VydmljZVxyXG4gKiBAbmFtZSAkdGVtcGxhdGVSZXF1ZXN0XHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBUaGUgYCR0ZW1wbGF0ZVJlcXVlc3RgIHNlcnZpY2UgZG93bmxvYWRzIHRoZSBwcm92aWRlZCB0ZW1wbGF0ZSB1c2luZyBgJGh0dHBgIGFuZCwgdXBvbiBzdWNjZXNzLFxyXG4gKiBzdG9yZXMgdGhlIGNvbnRlbnRzIGluc2lkZSBvZiBgJHRlbXBsYXRlQ2FjaGVgLiBJZiB0aGUgSFRUUCByZXF1ZXN0IGZhaWxzIG9yIHRoZSByZXNwb25zZSBkYXRhXHJcbiAqIG9mIHRoZSBIVFRQIHJlcXVlc3QgaXMgZW1wdHkgdGhlbiBhIGAkY29tcGlsZWAgZXJyb3Igd2lsbCBiZSB0aHJvd24gKHRoZSBleGNlcHRpb24gY2FuIGJlIHRod2FydGVkXHJcbiAqIGJ5IHNldHRpbmcgdGhlIDJuZCBwYXJhbWV0ZXIgb2YgdGhlIGZ1bmN0aW9uIHRvIHRydWUpLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdHBsIFRoZSBIVFRQIHJlcXVlc3QgdGVtcGxhdGUgVVJMXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGlnbm9yZVJlcXVlc3RFcnJvciBXaGV0aGVyIG9yIG5vdCB0byBpZ25vcmUgdGhlIGV4Y2VwdGlvbiB3aGVuIHRoZSByZXF1ZXN0IGZhaWxzIG9yIHRoZSB0ZW1wbGF0ZSBpcyBlbXB0eVxyXG4gKlxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfSB0aGUgSFRUUCBQcm9taXNlIGZvciB0aGUgZ2l2ZW4uXHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3RhbFBlbmRpbmdSZXF1ZXN0cyB0b3RhbCBhbW91bnQgb2YgcGVuZGluZyB0ZW1wbGF0ZSByZXF1ZXN0cyBiZWluZyBkb3dubG9hZGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gJFRlbXBsYXRlUmVxdWVzdFByb3ZpZGVyKCkge1xyXG4gIHRoaXMuJGdldCA9IFsnJHRlbXBsYXRlQ2FjaGUnLCAnJGh0dHAnLCAnJHEnLCBmdW5jdGlvbigkdGVtcGxhdGVDYWNoZSwgJGh0dHAsICRxKSB7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0Rm4odHBsLCBpZ25vcmVSZXF1ZXN0RXJyb3IpIHtcclxuICAgICAgdmFyIHNlbGYgPSBoYW5kbGVSZXF1ZXN0Rm47XHJcbiAgICAgIHNlbGYudG90YWxQZW5kaW5nUmVxdWVzdHMrKztcclxuXHJcbiAgICAgIHZhciB0cmFuc2Zvcm1SZXNwb25zZSA9ICRodHRwLmRlZmF1bHRzICYmICRodHRwLmRlZmF1bHRzLnRyYW5zZm9ybVJlc3BvbnNlO1xyXG5cclxuICAgICAgaWYgKGlzQXJyYXkodHJhbnNmb3JtUmVzcG9uc2UpKSB7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsID0gdHJhbnNmb3JtUmVzcG9uc2U7XHJcbiAgICAgICAgdHJhbnNmb3JtUmVzcG9uc2UgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yaWdpbmFsLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICB2YXIgdHJhbnNmb3JtZXIgPSBvcmlnaW5hbFtpXTtcclxuICAgICAgICAgIGlmICh0cmFuc2Zvcm1lciAhPT0gZGVmYXVsdEh0dHBSZXNwb25zZVRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm1SZXNwb25zZS5wdXNoKHRyYW5zZm9ybWVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodHJhbnNmb3JtUmVzcG9uc2UgPT09IGRlZmF1bHRIdHRwUmVzcG9uc2VUcmFuc2Zvcm0pIHtcclxuICAgICAgICB0cmFuc2Zvcm1SZXNwb25zZSA9IG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBodHRwT3B0aW9ucyA9IHtcclxuICAgICAgICBjYWNoZTogJHRlbXBsYXRlQ2FjaGUsXHJcbiAgICAgICAgdHJhbnNmb3JtUmVzcG9uc2U6IHRyYW5zZm9ybVJlc3BvbnNlXHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXR1cm4gJGh0dHAuZ2V0KHRwbCwgaHR0cE9wdGlvbnMpXHJcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcclxuICAgICAgICAgIHZhciBodG1sID0gcmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgIHNlbGYudG90YWxQZW5kaW5nUmVxdWVzdHMtLTtcclxuICAgICAgICAgICR0ZW1wbGF0ZUNhY2hlLnB1dCh0cGwsIGh0bWwpO1xyXG4gICAgICAgICAgcmV0dXJuIGh0bWw7XHJcbiAgICAgICAgfSwgaGFuZGxlRXJyb3IpO1xyXG5cclxuICAgICAgZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XHJcbiAgICAgICAgc2VsZi50b3RhbFBlbmRpbmdSZXF1ZXN0cy0tO1xyXG4gICAgICAgIGlmICghaWdub3JlUmVxdWVzdEVycm9yKSB7XHJcbiAgICAgICAgICB0aHJvdyAkY29tcGlsZU1pbkVycigndHBsb2FkJywgJ0ZhaWxlZCB0byBsb2FkIHRlbXBsYXRlOiB7MH0nLCB0cGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJHEucmVqZWN0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVSZXF1ZXN0Rm4udG90YWxQZW5kaW5nUmVxdWVzdHMgPSAwO1xyXG5cclxuICAgIHJldHVybiBoYW5kbGVSZXF1ZXN0Rm47XHJcbiAgfV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uICQkVGVzdGFiaWxpdHlQcm92aWRlcigpIHtcclxuICB0aGlzLiRnZXQgPSBbJyRyb290U2NvcGUnLCAnJGJyb3dzZXInLCAnJGxvY2F0aW9uJyxcclxuICAgICAgIGZ1bmN0aW9uKCRyb290U2NvcGUsICAgJGJyb3dzZXIsICAgJGxvY2F0aW9uKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSAkdGVzdGFiaWxpdHlcclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFRoZSBwcml2YXRlICQkdGVzdGFiaWxpdHkgc2VydmljZSBwcm92aWRlcyBhIGNvbGxlY3Rpb24gb2YgbWV0aG9kcyBmb3IgdXNlIHdoZW4gZGVidWdnaW5nXHJcbiAgICAgKiBvciBieSBhdXRvbWF0ZWQgdGVzdCBhbmQgZGVidWdnaW5nIHRvb2xzLlxyXG4gICAgICovXHJcbiAgICB2YXIgdGVzdGFiaWxpdHkgPSB7fTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lICQkdGVzdGFiaWxpdHkjZmluZEJpbmRpbmdzXHJcbiAgICAgKlxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGVsZW1lbnRzIHRoYXQgYXJlIGJvdW5kICh2aWEgbmctYmluZCBvciB7e319KVxyXG4gICAgICogdG8gZXhwcmVzc2lvbnMgbWF0Y2hpbmcgdGhlIGlucHV0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCByb290IHRvIHNlYXJjaCBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBtYXRjaC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0X2V4YWN0TWF0Y2ggSWYgdHJ1ZSwgb25seSByZXR1cm5zIGV4YWN0IG1hdGNoZXNcclxuICAgICAqICAgICBmb3IgdGhlIGV4cHJlc3Npb24uIEZpbHRlcnMgYW5kIHdoaXRlc3BhY2UgYXJlIGlnbm9yZWQuXHJcbiAgICAgKi9cclxuICAgIHRlc3RhYmlsaXR5LmZpbmRCaW5kaW5ncyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Npb24sIG9wdF9leGFjdE1hdGNoKSB7XHJcbiAgICAgIHZhciBiaW5kaW5ncyA9IGVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbmctYmluZGluZycpO1xyXG4gICAgICB2YXIgbWF0Y2hlcyA9IFtdO1xyXG4gICAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbihiaW5kaW5nKSB7XHJcbiAgICAgICAgdmFyIGRhdGFCaW5kaW5nID0gYW5ndWxhci5lbGVtZW50KGJpbmRpbmcpLmRhdGEoJyRiaW5kaW5nJyk7XHJcbiAgICAgICAgaWYgKGRhdGFCaW5kaW5nKSB7XHJcbiAgICAgICAgICBmb3JFYWNoKGRhdGFCaW5kaW5nLCBmdW5jdGlvbihiaW5kaW5nTmFtZSkge1xyXG4gICAgICAgICAgICBpZiAob3B0X2V4YWN0TWF0Y2gpIHtcclxuICAgICAgICAgICAgICB2YXIgbWF0Y2hlciA9IG5ldyBSZWdFeHAoJyhefFxcXFxzKScgKyBlc2NhcGVGb3JSZWdleHAoZXhwcmVzc2lvbikgKyAnKFxcXFxzfFxcXFx8fCQpJyk7XHJcbiAgICAgICAgICAgICAgaWYgKG1hdGNoZXIudGVzdChiaW5kaW5nTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaChiaW5kaW5nKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGJpbmRpbmdOYW1lLmluZGV4T2YoZXhwcmVzc2lvbikgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaChiaW5kaW5nKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBtYXRjaGVzO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lICQkdGVzdGFiaWxpdHkjZmluZE1vZGVsc1xyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IGFyZSB0d28td2F5IGZvdW5kIHZpYSBuZy1tb2RlbCB0b1xyXG4gICAgICogZXhwcmVzc2lvbnMgbWF0Y2hpbmcgdGhlIGlucHV0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCByb290IHRvIHNlYXJjaCBmcm9tLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gVGhlIG1vZGVsIGV4cHJlc3Npb24gdG8gbWF0Y2guXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdF9leGFjdE1hdGNoIElmIHRydWUsIG9ubHkgcmV0dXJucyBleGFjdCBtYXRjaGVzXHJcbiAgICAgKiAgICAgZm9yIHRoZSBleHByZXNzaW9uLlxyXG4gICAgICovXHJcbiAgICB0ZXN0YWJpbGl0eS5maW5kTW9kZWxzID0gZnVuY3Rpb24oZWxlbWVudCwgZXhwcmVzc2lvbiwgb3B0X2V4YWN0TWF0Y2gpIHtcclxuICAgICAgdmFyIHByZWZpeGVzID0gWyduZy0nLCAnZGF0YS1uZy0nLCAnbmdcXFxcOiddO1xyXG4gICAgICBmb3IgKHZhciBwID0gMDsgcCA8IHByZWZpeGVzLmxlbmd0aDsgKytwKSB7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZUVxdWFscyA9IG9wdF9leGFjdE1hdGNoID8gJz0nIDogJyo9JztcclxuICAgICAgICB2YXIgc2VsZWN0b3IgPSAnWycgKyBwcmVmaXhlc1twXSArICdtb2RlbCcgKyBhdHRyaWJ1dGVFcXVhbHMgKyAnXCInICsgZXhwcmVzc2lvbiArICdcIl0nO1xyXG4gICAgICAgIHZhciBlbGVtZW50cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XHJcbiAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lICQkdGVzdGFiaWxpdHkjZ2V0TG9jYXRpb25cclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFNob3J0Y3V0IGZvciBnZXR0aW5nIHRoZSBsb2NhdGlvbiBpbiBhIGJyb3dzZXIgYWdub3N0aWMgd2F5LiBSZXR1cm5zXHJcbiAgICAgKiAgICAgdGhlIHBhdGgsIHNlYXJjaCwgYW5kIGhhc2guIChlLmcuIC9wYXRoP2E9YiNoYXNoKVxyXG4gICAgICovXHJcbiAgICB0ZXN0YWJpbGl0eS5nZXRMb2NhdGlvbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gJGxvY2F0aW9uLnVybCgpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lICQkdGVzdGFiaWxpdHkjc2V0TG9jYXRpb25cclxuICAgICAqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFNob3J0Y3V0IGZvciBuYXZpZ2F0aW5nIHRvIGEgbG9jYXRpb24gd2l0aG91dCBkb2luZyBhIGZ1bGwgcGFnZSByZWxvYWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgbG9jYXRpb24gdXJsIChwYXRoLCBzZWFyY2ggYW5kIGhhc2gsXHJcbiAgICAgKiAgICAgZS5nLiAvcGF0aD9hPWIjaGFzaCkgdG8gZ28gdG8uXHJcbiAgICAgKi9cclxuICAgIHRlc3RhYmlsaXR5LnNldExvY2F0aW9uID0gZnVuY3Rpb24odXJsKSB7XHJcbiAgICAgIGlmICh1cmwgIT09ICRsb2NhdGlvbi51cmwoKSkge1xyXG4gICAgICAgICRsb2NhdGlvbi51cmwodXJsKTtcclxuICAgICAgICAkcm9vdFNjb3BlLiRkaWdlc3QoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lICQkdGVzdGFiaWxpdHkjd2hlblN0YWJsZVxyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogQ2FsbHMgdGhlIGNhbGxiYWNrIHdoZW4gJHRpbWVvdXQgYW5kICRodHRwIHJlcXVlc3RzIGFyZSBjb21wbGV0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcclxuICAgICAqL1xyXG4gICAgdGVzdGFiaWxpdHkud2hlblN0YWJsZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgICRicm93c2VyLm5vdGlmeVdoZW5Ob091dHN0YW5kaW5nUmVxdWVzdHMoY2FsbGJhY2spO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGVzdGFiaWxpdHk7XHJcbiAgfV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uICRUaW1lb3V0UHJvdmlkZXIoKSB7XHJcbiAgdGhpcy4kZ2V0ID0gWyckcm9vdFNjb3BlJywgJyRicm93c2VyJywgJyRxJywgJyQkcScsICckZXhjZXB0aW9uSGFuZGxlcicsXHJcbiAgICAgICBmdW5jdGlvbigkcm9vdFNjb3BlLCAgICRicm93c2VyLCAgICRxLCAgICQkcSwgICAkZXhjZXB0aW9uSGFuZGxlcikge1xyXG4gICAgdmFyIGRlZmVycmVkcyA9IHt9O1xyXG5cclxuXHJcbiAgICAgLyoqXHJcbiAgICAgICogQG5nZG9jIHNlcnZpY2VcclxuICAgICAgKiBAbmFtZSAkdGltZW91dFxyXG4gICAgICAqXHJcbiAgICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgICogQW5ndWxhcidzIHdyYXBwZXIgZm9yIGB3aW5kb3cuc2V0VGltZW91dGAuIFRoZSBgZm5gIGZ1bmN0aW9uIGlzIHdyYXBwZWQgaW50byBhIHRyeS9jYXRjaFxyXG4gICAgICAqIGJsb2NrIGFuZCBkZWxlZ2F0ZXMgYW55IGV4Y2VwdGlvbnMgdG9cclxuICAgICAgKiB7QGxpbmsgbmcuJGV4Y2VwdGlvbkhhbmRsZXIgJGV4Y2VwdGlvbkhhbmRsZXJ9IHNlcnZpY2UuXHJcbiAgICAgICpcclxuICAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHJlZ2lzdGVyaW5nIGEgdGltZW91dCBmdW5jdGlvbiBpcyBhIHByb21pc2UsIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgd2hlblxyXG4gICAgICAqIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQgYW5kIHRoZSB0aW1lb3V0IGZ1bmN0aW9uIGlzIGV4ZWN1dGVkLlxyXG4gICAgICAqXHJcbiAgICAgICogVG8gY2FuY2VsIGEgdGltZW91dCByZXF1ZXN0LCBjYWxsIGAkdGltZW91dC5jYW5jZWwocHJvbWlzZSlgLlxyXG4gICAgICAqXHJcbiAgICAgICogSW4gdGVzdHMgeW91IGNhbiB1c2Uge0BsaW5rIG5nTW9jay4kdGltZW91dCBgJHRpbWVvdXQuZmx1c2goKWB9IHRvXHJcbiAgICAgICogc3luY2hyb25vdXNseSBmbHVzaCB0aGUgcXVldWUgb2YgZGVmZXJyZWQgZnVuY3Rpb25zLlxyXG4gICAgICAqXHJcbiAgICAgICogQHBhcmFtIHtmdW5jdGlvbigpfSBmbiBBIGZ1bmN0aW9uLCB3aG9zZSBleGVjdXRpb24gc2hvdWxkIGJlIGRlbGF5ZWQuXHJcbiAgICAgICogQHBhcmFtIHtudW1iZXI9fSBbZGVsYXk9MF0gRGVsYXkgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IFtpbnZva2VBcHBseT10cnVlXSBJZiBzZXQgdG8gYGZhbHNlYCBza2lwcyBtb2RlbCBkaXJ0eSBjaGVja2luZywgb3RoZXJ3aXNlXHJcbiAgICAgICogICB3aWxsIGludm9rZSBgZm5gIHdpdGhpbiB0aGUge0BsaW5rIG5nLiRyb290U2NvcGUuU2NvcGUjJGFwcGx5ICRhcHBseX0gYmxvY2suXHJcbiAgICAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgdGhhdCB3aWxsIGJlIHJlc29sdmVkIHdoZW4gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC4gVGhlIHZhbHVlIHRoaXNcclxuICAgICAgKiAgIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCB3aXRoIGlzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGBmbmAgZnVuY3Rpb24uXHJcbiAgICAgICpcclxuICAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHRpbWVvdXQoZm4sIGRlbGF5LCBpbnZva2VBcHBseSkge1xyXG4gICAgICB2YXIgc2tpcEFwcGx5ID0gKGlzRGVmaW5lZChpbnZva2VBcHBseSkgJiYgIWludm9rZUFwcGx5KSxcclxuICAgICAgICAgIGRlZmVycmVkID0gKHNraXBBcHBseSA/ICQkcSA6ICRxKS5kZWZlcigpLFxyXG4gICAgICAgICAgcHJvbWlzZSA9IGRlZmVycmVkLnByb21pc2UsXHJcbiAgICAgICAgICB0aW1lb3V0SWQ7XHJcblxyXG4gICAgICB0aW1lb3V0SWQgPSAkYnJvd3Nlci5kZWZlcihmdW5jdGlvbigpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZShmbigpKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBkZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICAgICAgICAkZXhjZXB0aW9uSGFuZGxlcihlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICBkZWxldGUgZGVmZXJyZWRzW3Byb21pc2UuJCR0aW1lb3V0SWRdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFza2lwQXBwbHkpICRyb290U2NvcGUuJGFwcGx5KCk7XHJcbiAgICAgIH0sIGRlbGF5KTtcclxuXHJcbiAgICAgIHByb21pc2UuJCR0aW1lb3V0SWQgPSB0aW1lb3V0SWQ7XHJcbiAgICAgIGRlZmVycmVkc1t0aW1lb3V0SWRdID0gZGVmZXJyZWQ7XHJcblxyXG4gICAgICByZXR1cm4gcHJvbWlzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgIC8qKlxyXG4gICAgICAqIEBuZ2RvYyBtZXRob2RcclxuICAgICAgKiBAbmFtZSAkdGltZW91dCNjYW5jZWxcclxuICAgICAgKlxyXG4gICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICAqIENhbmNlbHMgYSB0YXNrIGFzc29jaWF0ZWQgd2l0aCB0aGUgYHByb21pc2VgLiBBcyBhIHJlc3VsdCBvZiB0aGlzLCB0aGUgcHJvbWlzZSB3aWxsIGJlXHJcbiAgICAgICogcmVzb2x2ZWQgd2l0aCBhIHJlamVjdGlvbi5cclxuICAgICAgKlxyXG4gICAgICAqIEBwYXJhbSB7UHJvbWlzZT19IHByb21pc2UgUHJvbWlzZSByZXR1cm5lZCBieSB0aGUgYCR0aW1lb3V0YCBmdW5jdGlvbi5cclxuICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRhc2sgaGFzbid0IGV4ZWN1dGVkIHlldCBhbmQgd2FzIHN1Y2Nlc3NmdWxseVxyXG4gICAgICAqICAgY2FuY2VsZWQuXHJcbiAgICAgICovXHJcbiAgICB0aW1lb3V0LmNhbmNlbCA9IGZ1bmN0aW9uKHByb21pc2UpIHtcclxuICAgICAgaWYgKHByb21pc2UgJiYgcHJvbWlzZS4kJHRpbWVvdXRJZCBpbiBkZWZlcnJlZHMpIHtcclxuICAgICAgICBkZWZlcnJlZHNbcHJvbWlzZS4kJHRpbWVvdXRJZF0ucmVqZWN0KCdjYW5jZWxlZCcpO1xyXG4gICAgICAgIGRlbGV0ZSBkZWZlcnJlZHNbcHJvbWlzZS4kJHRpbWVvdXRJZF07XHJcbiAgICAgICAgcmV0dXJuICRicm93c2VyLmRlZmVyLmNhbmNlbChwcm9taXNlLiQkdGltZW91dElkKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aW1lb3V0O1xyXG4gIH1dO1xyXG59XHJcblxyXG4vLyBOT1RFOiAgVGhlIHVzYWdlIG9mIHdpbmRvdyBhbmQgZG9jdW1lbnQgaW5zdGVhZCBvZiAkd2luZG93IGFuZCAkZG9jdW1lbnQgaGVyZSBpc1xyXG4vLyBkZWxpYmVyYXRlLiAgVGhpcyBzZXJ2aWNlIGRlcGVuZHMgb24gdGhlIHNwZWNpZmljIGJlaGF2aW9yIG9mIGFuY2hvciBub2RlcyBjcmVhdGVkIGJ5IHRoZVxyXG4vLyBicm93c2VyIChyZXNvbHZpbmcgYW5kIHBhcnNpbmcgVVJMcykgdGhhdCBpcyB1bmxpa2VseSB0byBiZSBwcm92aWRlZCBieSBtb2NrIG9iamVjdHMgYW5kXHJcbi8vIGNhdXNlIHVzIHRvIGJyZWFrIHRlc3RzLiAgSW4gYWRkaXRpb24sIHdoZW4gdGhlIGJyb3dzZXIgcmVzb2x2ZXMgYSBVUkwgZm9yIFhIUiwgaXRcclxuLy8gZG9lc24ndCBrbm93IGFib3V0IG1vY2tlZCBsb2NhdGlvbnMgYW5kIHJlc29sdmVzIFVSTHMgdG8gdGhlIHJlYWwgZG9jdW1lbnQgLSB3aGljaCBpc1xyXG4vLyBleGFjdGx5IHRoZSBiZWhhdmlvciBuZWVkZWQgaGVyZS4gIFRoZXJlIGlzIGxpdHRsZSB2YWx1ZSBpcyBtb2NraW5nIHRoZXNlIG91dCBmb3IgdGhpc1xyXG4vLyBzZXJ2aWNlLlxyXG52YXIgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxudmFyIG9yaWdpblVybCA9IHVybFJlc29sdmUod2luZG93LmxvY2F0aW9uLmhyZWYpO1xyXG5cclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBJbXBsZW1lbnRhdGlvbiBOb3RlcyBmb3Igbm9uLUlFIGJyb3dzZXJzXHJcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICogQXNzaWduaW5nIGEgVVJMIHRvIHRoZSBocmVmIHByb3BlcnR5IG9mIGFuIGFuY2hvciBET00gbm9kZSwgZXZlbiBvbmUgYXR0YWNoZWQgdG8gdGhlIERPTSxcclxuICogcmVzdWx0cyBib3RoIGluIHRoZSBub3JtYWxpemluZyBhbmQgcGFyc2luZyBvZiB0aGUgVVJMLiAgTm9ybWFsaXppbmcgbWVhbnMgdGhhdCBhIHJlbGF0aXZlXHJcbiAqIFVSTCB3aWxsIGJlIHJlc29sdmVkIGludG8gYW4gYWJzb2x1dGUgVVJMIGluIHRoZSBjb250ZXh0IG9mIHRoZSBhcHBsaWNhdGlvbiBkb2N1bWVudC5cclxuICogUGFyc2luZyBtZWFucyB0aGF0IHRoZSBhbmNob3Igbm9kZSdzIGhvc3QsIGhvc3RuYW1lLCBwcm90b2NvbCwgcG9ydCwgcGF0aG5hbWUgYW5kIHJlbGF0ZWRcclxuICogcHJvcGVydGllcyBhcmUgYWxsIHBvcHVsYXRlZCB0byByZWZsZWN0IHRoZSBub3JtYWxpemVkIFVSTC4gIFRoaXMgYXBwcm9hY2ggaGFzIHdpZGVcclxuICogY29tcGF0aWJpbGl0eSAtIFNhZmFyaSAxKywgTW96aWxsYSAxKywgT3BlcmEgNyssZSBldGMuICBTZWVcclxuICogaHR0cDovL3d3dy5hcHRhbmEuY29tL3JlZmVyZW5jZS9odG1sL2FwaS9IVE1MQW5jaG9yRWxlbWVudC5odG1sXHJcbiAqXHJcbiAqIEltcGxlbWVudGF0aW9uIE5vdGVzIGZvciBJRVxyXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICogSUUgPj0gOCBhbmQgPD0gMTAgbm9ybWFsaXplcyB0aGUgVVJMIHdoZW4gYXNzaWduZWQgdG8gdGhlIGFuY2hvciBub2RlIHNpbWlsYXIgdG8gdGhlIG90aGVyXHJcbiAqIGJyb3dzZXJzLiAgSG93ZXZlciwgdGhlIHBhcnNlZCBjb21wb25lbnRzIHdpbGwgbm90IGJlIHNldCBpZiB0aGUgVVJMIGFzc2lnbmVkIGRpZCBub3Qgc3BlY2lmeVxyXG4gKiB0aGVtLiAgKGUuZy4gaWYgeW91IGFzc2lnbiBhLmhyZWYgPSBcImZvb1wiLCB0aGVuIGEucHJvdG9jb2wsIGEuaG9zdCwgZXRjLiB3aWxsIGJlIGVtcHR5LikgIFdlXHJcbiAqIHdvcmsgYXJvdW5kIHRoYXQgYnkgcGVyZm9ybWluZyB0aGUgcGFyc2luZyBpbiBhIDJuZCBzdGVwIGJ5IHRha2luZyBhIHByZXZpb3VzbHkgbm9ybWFsaXplZFxyXG4gKiBVUkwgKGUuZy4gYnkgYXNzaWduaW5nIHRvIGEuaHJlZikgYW5kIGFzc2lnbmluZyBpdCBhLmhyZWYgYWdhaW4uICBUaGlzIGNvcnJlY3RseSBwb3B1bGF0ZXMgdGhlXHJcbiAqIHByb3BlcnRpZXMgc3VjaCBhcyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQsIGV0Yy5cclxuICpcclxuICogSUU3IGRvZXMgbm90IG5vcm1hbGl6ZSB0aGUgVVJMIHdoZW4gYXNzaWduZWQgdG8gYW4gYW5jaG9yIG5vZGUuICAoQXBwYXJlbnRseSwgaXQgZG9lcywgaWYgb25lXHJcbiAqIHVzZXMgdGhlIGlubmVyIEhUTUwgYXBwcm9hY2ggdG8gYXNzaWduIHRoZSBVUkwgYXMgcGFydCBvZiBhbiBIVE1MIHNuaXBwZXQgLVxyXG4gKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80NzI3MjkpICBIb3dldmVyLCBzZXR0aW5nIGltZ1tzcmNdIGRvZXMgbm9ybWFsaXplIHRoZSBVUkwuXHJcbiAqIFVuZm9ydHVuYXRlbHksIHNldHRpbmcgaW1nW3NyY10gdG8gc29tZXRoaW5nIGxpa2UgXCJqYXZhc2NyaXB0OmZvb1wiIG9uIElFIHRocm93cyBhbiBleGNlcHRpb24uXHJcbiAqIFNpbmNlIHRoZSBwcmltYXJ5IHVzYWdlIGZvciBub3JtYWxpemluZyBVUkxzIGlzIHRvIHNhbml0aXplIHN1Y2ggVVJMcywgd2UgY2FuJ3QgdXNlIHRoYXRcclxuICogbWV0aG9kIGFuZCBJRSA8IDggaXMgdW5zdXBwb3J0ZWQuXHJcbiAqXHJcbiAqIFJlZmVyZW5jZXM6XHJcbiAqICAgaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEFuY2hvckVsZW1lbnRcclxuICogICBodHRwOi8vd3d3LmFwdGFuYS5jb20vcmVmZXJlbmNlL2h0bWwvYXBpL0hUTUxBbmNob3JFbGVtZW50Lmh0bWxcclxuICogICBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcclxuICogICBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL3B1bGwvMjkwMlxyXG4gKiAgIGh0dHA6Ly9qYW1lcy5wYWRvbHNleS5jb20vamF2YXNjcmlwdC9wYXJzaW5nLXVybHMtd2l0aC10aGUtZG9tL1xyXG4gKlxyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkLlxyXG4gKiBAZGVzY3JpcHRpb24gTm9ybWFsaXplcyBhbmQgcGFyc2VzIGEgVVJMLlxyXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIHRoZSBub3JtYWxpemVkIFVSTCBhcyBhIGRpY3Rpb25hcnkuXHJcbiAqXHJcbiAqICAgfCBtZW1iZXIgbmFtZSAgIHwgRGVzY3JpcHRpb24gICAgfFxyXG4gKiAgIHwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXxcclxuICogICB8IGhyZWYgICAgICAgICAgfCBBIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgcHJvdmlkZWQgVVJMIGlmIGl0IHdhcyBub3QgYW4gYWJzb2x1dGUgVVJMIHxcclxuICogICB8IHByb3RvY29sICAgICAgfCBUaGUgcHJvdG9jb2wgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBjb2xvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICB8IGhvc3QgICAgICAgICAgfCBUaGUgaG9zdCBhbmQgcG9ydCAoaWYgdGhlIHBvcnQgaXMgbm9uLWRlZmF1bHQpIG9mIHRoZSBub3JtYWxpemVkVXJsICAgIHxcclxuICogICB8IHNlYXJjaCAgICAgICAgfCBUaGUgc2VhcmNoIHBhcmFtcywgbWludXMgdGhlIHF1ZXN0aW9uIG1hcmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICB8IGhhc2ggICAgICAgICAgfCBUaGUgaGFzaCBzdHJpbmcsIG1pbnVzIHRoZSBoYXNoIHN5bWJvbFxyXG4gKiAgIHwgaG9zdG5hbWUgICAgICB8IFRoZSBob3N0bmFtZVxyXG4gKiAgIHwgcG9ydCAgICAgICAgICB8IFRoZSBwb3J0LCB3aXRob3V0IFwiOlwiXHJcbiAqICAgfCBwYXRobmFtZSAgICAgIHwgVGhlIHBhdGhuYW1lLCBiZWdpbm5pbmcgd2l0aCBcIi9cIlxyXG4gKlxyXG4gKi9cclxuZnVuY3Rpb24gdXJsUmVzb2x2ZSh1cmwpIHtcclxuICB2YXIgaHJlZiA9IHVybDtcclxuXHJcbiAgaWYgKG1zaWUpIHtcclxuICAgIC8vIE5vcm1hbGl6ZSBiZWZvcmUgcGFyc2UuICBSZWZlciBJbXBsZW1lbnRhdGlvbiBOb3RlcyBvbiB3aHkgdGhpcyBpc1xyXG4gICAgLy8gZG9uZSBpbiB0d28gc3RlcHMgb24gSUUuXHJcbiAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGhyZWYpO1xyXG4gICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XHJcbiAgfVxyXG5cclxuICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcclxuXHJcbiAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xyXG4gIHJldHVybiB7XHJcbiAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxyXG4gICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcclxuICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXHJcbiAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXHJcbiAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxyXG4gICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxyXG4gICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcclxuICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpXHJcbiAgICAgID8gdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcclxuICAgICAgOiAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJzZSBhIHJlcXVlc3QgVVJMIGFuZCBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGEgc2FtZS1vcmlnaW4gcmVxdWVzdCBhcyB0aGUgYXBwbGljYXRpb24gZG9jdW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVxdWVzdFVybCBUaGUgdXJsIG9mIHRoZSByZXF1ZXN0IGFzIGEgc3RyaW5nIHRoYXQgd2lsbCBiZSByZXNvbHZlZFxyXG4gKiBvciBhIHBhcnNlZCBVUkwgb2JqZWN0LlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgcmVxdWVzdCBpcyBmb3IgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBhcHBsaWNhdGlvbiBkb2N1bWVudC5cclxuICovXHJcbmZ1bmN0aW9uIHVybElzU2FtZU9yaWdpbihyZXF1ZXN0VXJsKSB7XHJcbiAgdmFyIHBhcnNlZCA9IChpc1N0cmluZyhyZXF1ZXN0VXJsKSkgPyB1cmxSZXNvbHZlKHJlcXVlc3RVcmwpIDogcmVxdWVzdFVybDtcclxuICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVXJsLnByb3RvY29sICYmXHJcbiAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVXJsLmhvc3QpO1xyXG59XHJcblxyXG4vKipcclxuICogQG5nZG9jIHNlcnZpY2VcclxuICogQG5hbWUgJHdpbmRvd1xyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQSByZWZlcmVuY2UgdG8gdGhlIGJyb3dzZXIncyBgd2luZG93YCBvYmplY3QuIFdoaWxlIGB3aW5kb3dgXHJcbiAqIGlzIGdsb2JhbGx5IGF2YWlsYWJsZSBpbiBKYXZhU2NyaXB0LCBpdCBjYXVzZXMgdGVzdGFiaWxpdHkgcHJvYmxlbXMsIGJlY2F1c2VcclxuICogaXQgaXMgYSBnbG9iYWwgdmFyaWFibGUuIEluIGFuZ3VsYXIgd2UgYWx3YXlzIHJlZmVyIHRvIGl0IHRocm91Z2ggdGhlXHJcbiAqIGAkd2luZG93YCBzZXJ2aWNlLCBzbyBpdCBtYXkgYmUgb3ZlcnJpZGRlbiwgcmVtb3ZlZCBvciBtb2NrZWQgZm9yIHRlc3RpbmcuXHJcbiAqXHJcbiAqIEV4cHJlc3Npb25zLCBsaWtlIHRoZSBvbmUgZGVmaW5lZCBmb3IgdGhlIGBuZ0NsaWNrYCBkaXJlY3RpdmUgaW4gdGhlIGV4YW1wbGVcclxuICogYmVsb3csIGFyZSBldmFsdWF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBjdXJyZW50IHNjb3BlLiAgVGhlcmVmb3JlLCB0aGVyZSBpc1xyXG4gKiBubyByaXNrIG9mIGluYWR2ZXJ0ZW50bHkgY29kaW5nIGluIGEgZGVwZW5kZW5jeSBvbiBhIGdsb2JhbCB2YWx1ZSBpbiBzdWNoIGFuXHJcbiAqIGV4cHJlc3Npb24uXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgIDxleGFtcGxlIG1vZHVsZT1cIndpbmRvd0V4YW1wbGVcIj5cclxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgPHNjcmlwdD5cclxuICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ3dpbmRvd0V4YW1wbGUnLCBbXSlcclxuICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsICckd2luZG93JywgZnVuY3Rpb24oJHNjb3BlLCAkd2luZG93KSB7XHJcbiAgICAgICAgICAgICAkc2NvcGUuZ3JlZXRpbmcgPSAnSGVsbG8sIFdvcmxkISc7XHJcbiAgICAgICAgICAgICAkc2NvcGUuZG9HcmVldGluZyA9IGZ1bmN0aW9uKGdyZWV0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICR3aW5kb3cuYWxlcnQoZ3JlZXRpbmcpO1xyXG4gICAgICAgICAgICAgfTtcclxuICAgICAgICAgICB9XSk7XHJcbiAgICAgICA8L3NjcmlwdD5cclxuICAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XHJcbiAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5nLW1vZGVsPVwiZ3JlZXRpbmdcIiAvPlxyXG4gICAgICAgICA8YnV0dG9uIG5nLWNsaWNrPVwiZG9HcmVldGluZyhncmVldGluZylcIj5BTEVSVDwvYnV0dG9uPlxyXG4gICAgICAgPC9kaXY+XHJcbiAgICAgPC9maWxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgaXQoJ3Nob3VsZCBkaXNwbGF5IHRoZSBncmVldGluZyBpbiB0aGUgaW5wdXQgYm94JywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdncmVldGluZycpKS5zZW5kS2V5cygnSGVsbG8sIEUyRSBUZXN0cycpO1xyXG4gICAgICAgLy8gSWYgd2UgY2xpY2sgdGhlIGJ1dHRvbiBpdCB3aWxsIGJsb2NrIHRoZSB0ZXN0IHJ1bm5lclxyXG4gICAgICAgLy8gZWxlbWVudCgnOmJ1dHRvbicpLmNsaWNrKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgIDwvZmlsZT5cclxuICAgPC9leGFtcGxlPlxyXG4gKi9cclxuZnVuY3Rpb24gJFdpbmRvd1Byb3ZpZGVyKCkge1xyXG4gIHRoaXMuJGdldCA9IHZhbHVlRm4od2luZG93KTtcclxufVxyXG5cclxuLyogZ2xvYmFsIGN1cnJlbmN5RmlsdGVyOiB0cnVlLFxyXG4gZGF0ZUZpbHRlcjogdHJ1ZSxcclxuIGZpbHRlckZpbHRlcjogdHJ1ZSxcclxuIGpzb25GaWx0ZXI6IHRydWUsXHJcbiBsaW1pdFRvRmlsdGVyOiB0cnVlLFxyXG4gbG93ZXJjYXNlRmlsdGVyOiB0cnVlLFxyXG4gbnVtYmVyRmlsdGVyOiB0cnVlLFxyXG4gb3JkZXJCeUZpbHRlcjogdHJ1ZSxcclxuIHVwcGVyY2FzZUZpbHRlcjogdHJ1ZSxcclxuICovXHJcblxyXG4vKipcclxuICogQG5nZG9jIHByb3ZpZGVyXHJcbiAqIEBuYW1lICRmaWx0ZXJQcm92aWRlclxyXG4gKiBAZGVzY3JpcHRpb25cclxuICpcclxuICogRmlsdGVycyBhcmUganVzdCBmdW5jdGlvbnMgd2hpY2ggdHJhbnNmb3JtIGlucHV0IHRvIGFuIG91dHB1dC4gSG93ZXZlciBmaWx0ZXJzIG5lZWQgdG8gYmVcclxuICogRGVwZW5kZW5jeSBJbmplY3RlZC4gVG8gYWNoaWV2ZSB0aGlzIGEgZmlsdGVyIGRlZmluaXRpb24gY29uc2lzdHMgb2YgYSBmYWN0b3J5IGZ1bmN0aW9uIHdoaWNoIGlzXHJcbiAqIGFubm90YXRlZCB3aXRoIGRlcGVuZGVuY2llcyBhbmQgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGEgZmlsdGVyIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBgYGBqc1xyXG4gKiAgIC8vIEZpbHRlciByZWdpc3RyYXRpb25cclxuICogICBmdW5jdGlvbiBNeU1vZHVsZSgkcHJvdmlkZSwgJGZpbHRlclByb3ZpZGVyKSB7XHJcbiAqICAgICAvLyBjcmVhdGUgYSBzZXJ2aWNlIHRvIGRlbW9uc3RyYXRlIGluamVjdGlvbiAobm90IGFsd2F5cyBuZWVkZWQpXHJcbiAqICAgICAkcHJvdmlkZS52YWx1ZSgnZ3JlZXQnLCBmdW5jdGlvbihuYW1lKXtcclxuICogICAgICAgcmV0dXJuICdIZWxsbyAnICsgbmFtZSArICchJztcclxuICogICAgIH0pO1xyXG4gKlxyXG4gKiAgICAgLy8gcmVnaXN0ZXIgYSBmaWx0ZXIgZmFjdG9yeSB3aGljaCB1c2VzIHRoZVxyXG4gKiAgICAgLy8gZ3JlZXQgc2VydmljZSB0byBkZW1vbnN0cmF0ZSBESS5cclxuICogICAgICRmaWx0ZXJQcm92aWRlci5yZWdpc3RlcignZ3JlZXQnLCBmdW5jdGlvbihncmVldCl7XHJcbiAqICAgICAgIC8vIHJldHVybiB0aGUgZmlsdGVyIGZ1bmN0aW9uIHdoaWNoIHVzZXMgdGhlIGdyZWV0IHNlcnZpY2VcclxuICogICAgICAgLy8gdG8gZ2VuZXJhdGUgc2FsdXRhdGlvblxyXG4gKiAgICAgICByZXR1cm4gZnVuY3Rpb24odGV4dCkge1xyXG4gKiAgICAgICAgIC8vIGZpbHRlcnMgbmVlZCB0byBiZSBmb3JnaXZpbmcgc28gY2hlY2sgaW5wdXQgdmFsaWRpdHlcclxuICogICAgICAgICByZXR1cm4gdGV4dCAmJiBncmVldCh0ZXh0KSB8fCB0ZXh0O1xyXG4gKiAgICAgICB9O1xyXG4gKiAgICAgfSk7XHJcbiAqICAgfVxyXG4gKiBgYGBcclxuICpcclxuICogVGhlIGZpbHRlciBmdW5jdGlvbiBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGAkaW5qZWN0b3JgIHVuZGVyIHRoZSBmaWx0ZXIgbmFtZSBzdWZmaXggd2l0aFxyXG4gKiBgRmlsdGVyYC5cclxuICpcclxuICogYGBganNcclxuICogICBpdCgnc2hvdWxkIGJlIHRoZSBzYW1lIGluc3RhbmNlJywgaW5qZWN0KFxyXG4gKiAgICAgZnVuY3Rpb24oJGZpbHRlclByb3ZpZGVyKSB7XHJcbiAqICAgICAgICRmaWx0ZXJQcm92aWRlci5yZWdpc3RlcigncmV2ZXJzZScsIGZ1bmN0aW9uKCl7XHJcbiAqICAgICAgICAgcmV0dXJuIC4uLjtcclxuICogICAgICAgfSk7XHJcbiAqICAgICB9LFxyXG4gKiAgICAgZnVuY3Rpb24oJGZpbHRlciwgcmV2ZXJzZUZpbHRlcikge1xyXG4gKiAgICAgICBleHBlY3QoJGZpbHRlcigncmV2ZXJzZScpKS50b0JlKHJldmVyc2VGaWx0ZXIpO1xyXG4gKiAgICAgfSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKlxyXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgYW5ndWxhciBmaWx0ZXJzIHdvcmssIGFuZCBob3cgdG8gY3JlYXRlIHlvdXIgb3duIGZpbHRlcnMsIHNlZVxyXG4gKiB7QGxpbmsgZ3VpZGUvZmlsdGVyIEZpbHRlcnN9IGluIHRoZSBBbmd1bGFyIERldmVsb3BlciBHdWlkZS5cclxuICovXHJcblxyXG4vKipcclxuICogQG5nZG9jIHNlcnZpY2VcclxuICogQG5hbWUgJGZpbHRlclxyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogRmlsdGVycyBhcmUgdXNlZCBmb3IgZm9ybWF0dGluZyBkYXRhIGRpc3BsYXllZCB0byB0aGUgdXNlci5cclxuICpcclxuICogVGhlIGdlbmVyYWwgc3ludGF4IGluIHRlbXBsYXRlcyBpcyBhcyBmb2xsb3dzOlxyXG4gKlxyXG4gKiAgICAgICAgIHt7IGV4cHJlc3Npb24gW3wgZmlsdGVyX25hbWVbOnBhcmFtZXRlcl92YWx1ZV0gLi4uIF0gfX1cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgZmlsdGVyIGZ1bmN0aW9uIHRvIHJldHJpZXZlXHJcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSB0aGUgZmlsdGVyIGZ1bmN0aW9uXHJcbiAqIEBleGFtcGxlXHJcbiAgIDxleGFtcGxlIG5hbWU9XCIkZmlsdGVyXCIgbW9kdWxlPVwiZmlsdGVyRXhhbXBsZVwiPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJNYWluQ3RybFwiPlxyXG4gICAgICAgIDxoMz57eyBvcmlnaW5hbFRleHQgfX08L2gzPlxyXG4gICAgICAgIDxoMz57eyBmaWx0ZXJlZFRleHQgfX08L2gzPlxyXG4gICAgICAgPC9kaXY+XHJcbiAgICAgPC9maWxlPlxyXG5cclxuICAgICA8ZmlsZSBuYW1lPVwic2NyaXB0LmpzXCI+XHJcbiAgICAgIGFuZ3VsYXIubW9kdWxlKCdmaWx0ZXJFeGFtcGxlJywgW10pXHJcbiAgICAgIC5jb250cm9sbGVyKCdNYWluQ3RybCcsIGZ1bmN0aW9uKCRzY29wZSwgJGZpbHRlcikge1xyXG4gICAgICAgICRzY29wZS5vcmlnaW5hbFRleHQgPSAnaGVsbG8nO1xyXG4gICAgICAgICRzY29wZS5maWx0ZXJlZFRleHQgPSAkZmlsdGVyKCd1cHBlcmNhc2UnKSgkc2NvcGUub3JpZ2luYWxUZXh0KTtcclxuICAgICAgfSk7XHJcbiAgICAgPC9maWxlPlxyXG4gICA8L2V4YW1wbGU+XHJcbiAgKi9cclxuJEZpbHRlclByb3ZpZGVyLiRpbmplY3QgPSBbJyRwcm92aWRlJ107XHJcbmZ1bmN0aW9uICRGaWx0ZXJQcm92aWRlcigkcHJvdmlkZSkge1xyXG4gIHZhciBzdWZmaXggPSAnRmlsdGVyJztcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lICRmaWx0ZXJQcm92aWRlciNyZWdpc3RlclxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gbmFtZSBOYW1lIG9mIHRoZSBmaWx0ZXIgZnVuY3Rpb24sIG9yIGFuIG9iamVjdCBtYXAgb2YgZmlsdGVycyB3aGVyZVxyXG4gICAqICAgIHRoZSBrZXlzIGFyZSB0aGUgZmlsdGVyIG5hbWVzIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUgZmlsdGVyIGZhY3Rvcmllcy5cclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZWdpc3RlcmVkIGZpbHRlciBpbnN0YW5jZSwgb3IgaWYgYSBtYXAgb2YgZmlsdGVycyB3YXMgcHJvdmlkZWQgdGhlbiBhIG1hcFxyXG4gICAqICAgIG9mIHRoZSByZWdpc3RlcmVkIGZpbHRlciBpbnN0YW5jZXMuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gcmVnaXN0ZXIobmFtZSwgZmFjdG9yeSkge1xyXG4gICAgaWYgKGlzT2JqZWN0KG5hbWUpKSB7XHJcbiAgICAgIHZhciBmaWx0ZXJzID0ge307XHJcbiAgICAgIGZvckVhY2gobmFtZSwgZnVuY3Rpb24oZmlsdGVyLCBrZXkpIHtcclxuICAgICAgICBmaWx0ZXJzW2tleV0gPSByZWdpc3RlcihrZXksIGZpbHRlcik7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZmlsdGVycztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAkcHJvdmlkZS5mYWN0b3J5KG5hbWUgKyBzdWZmaXgsIGZhY3RvcnkpO1xyXG4gICAgfVxyXG4gIH1cclxuICB0aGlzLnJlZ2lzdGVyID0gcmVnaXN0ZXI7XHJcblxyXG4gIHRoaXMuJGdldCA9IFsnJGluamVjdG9yJywgZnVuY3Rpb24oJGluamVjdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICByZXR1cm4gJGluamVjdG9yLmdldChuYW1lICsgc3VmZml4KTtcclxuICAgIH07XHJcbiAgfV07XHJcblxyXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgLyogZ2xvYmFsXHJcbiAgICBjdXJyZW5jeUZpbHRlcjogZmFsc2UsXHJcbiAgICBkYXRlRmlsdGVyOiBmYWxzZSxcclxuICAgIGZpbHRlckZpbHRlcjogZmFsc2UsXHJcbiAgICBqc29uRmlsdGVyOiBmYWxzZSxcclxuICAgIGxpbWl0VG9GaWx0ZXI6IGZhbHNlLFxyXG4gICAgbG93ZXJjYXNlRmlsdGVyOiBmYWxzZSxcclxuICAgIG51bWJlckZpbHRlcjogZmFsc2UsXHJcbiAgICBvcmRlckJ5RmlsdGVyOiBmYWxzZSxcclxuICAgIHVwcGVyY2FzZUZpbHRlcjogZmFsc2UsXHJcbiAgKi9cclxuXHJcbiAgcmVnaXN0ZXIoJ2N1cnJlbmN5JywgY3VycmVuY3lGaWx0ZXIpO1xyXG4gIHJlZ2lzdGVyKCdkYXRlJywgZGF0ZUZpbHRlcik7XHJcbiAgcmVnaXN0ZXIoJ2ZpbHRlcicsIGZpbHRlckZpbHRlcik7XHJcbiAgcmVnaXN0ZXIoJ2pzb24nLCBqc29uRmlsdGVyKTtcclxuICByZWdpc3RlcignbGltaXRUbycsIGxpbWl0VG9GaWx0ZXIpO1xyXG4gIHJlZ2lzdGVyKCdsb3dlcmNhc2UnLCBsb3dlcmNhc2VGaWx0ZXIpO1xyXG4gIHJlZ2lzdGVyKCdudW1iZXInLCBudW1iZXJGaWx0ZXIpO1xyXG4gIHJlZ2lzdGVyKCdvcmRlckJ5Jywgb3JkZXJCeUZpbHRlcik7XHJcbiAgcmVnaXN0ZXIoJ3VwcGVyY2FzZScsIHVwcGVyY2FzZUZpbHRlcik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZmlsdGVyXHJcbiAqIEBuYW1lIGZpbHRlclxyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogU2VsZWN0cyBhIHN1YnNldCBvZiBpdGVtcyBmcm9tIGBhcnJheWAgYW5kIHJldHVybnMgaXQgYXMgYSBuZXcgYXJyYXkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3VyY2UgYXJyYXkuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdHxmdW5jdGlvbigpfSBleHByZXNzaW9uIFRoZSBwcmVkaWNhdGUgdG8gYmUgdXNlZCBmb3Igc2VsZWN0aW5nIGl0ZW1zIGZyb21cclxuICogICBgYXJyYXlgLlxyXG4gKlxyXG4gKiAgIENhbiBiZSBvbmUgb2Y6XHJcbiAqXHJcbiAqICAgLSBgc3RyaW5nYDogVGhlIHN0cmluZyBpcyBldmFsdWF0ZWQgYXMgYW4gZXhwcmVzc2lvbiBhbmQgdGhlIHJlc3VsdGluZyB2YWx1ZSBpcyB1c2VkIGZvciBzdWJzdHJpbmcgbWF0Y2ggYWdhaW5zdFxyXG4gKiAgICAgdGhlIGNvbnRlbnRzIG9mIHRoZSBgYXJyYXlgLiBBbGwgc3RyaW5ncyBvciBvYmplY3RzIHdpdGggc3RyaW5nIHByb3BlcnRpZXMgaW4gYGFycmF5YCB0aGF0IGNvbnRhaW4gdGhpcyBzdHJpbmdcclxuICogICAgIHdpbGwgYmUgcmV0dXJuZWQuIFRoZSBwcmVkaWNhdGUgY2FuIGJlIG5lZ2F0ZWQgYnkgcHJlZml4aW5nIHRoZSBzdHJpbmcgd2l0aCBgIWAuXHJcbiAqXHJcbiAqICAgLSBgT2JqZWN0YDogQSBwYXR0ZXJuIG9iamVjdCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgc3BlY2lmaWMgcHJvcGVydGllcyBvbiBvYmplY3RzIGNvbnRhaW5lZFxyXG4gKiAgICAgYnkgYGFycmF5YC4gRm9yIGV4YW1wbGUgYHtuYW1lOlwiTVwiLCBwaG9uZTpcIjFcIn1gIHByZWRpY2F0ZSB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBpdGVtc1xyXG4gKiAgICAgd2hpY2ggaGF2ZSBwcm9wZXJ0eSBgbmFtZWAgY29udGFpbmluZyBcIk1cIiBhbmQgcHJvcGVydHkgYHBob25lYCBjb250YWluaW5nIFwiMVwiLiBBIHNwZWNpYWxcclxuICogICAgIHByb3BlcnR5IG5hbWUgYCRgIGNhbiBiZSB1c2VkIChhcyBpbiBgeyQ6XCJ0ZXh0XCJ9YCkgdG8gYWNjZXB0IGEgbWF0Y2ggYWdhaW5zdCBhbnlcclxuICogICAgIHByb3BlcnR5IG9mIHRoZSBvYmplY3QuIFRoYXQncyBlcXVpdmFsZW50IHRvIHRoZSBzaW1wbGUgc3Vic3RyaW5nIG1hdGNoIHdpdGggYSBgc3RyaW5nYFxyXG4gKiAgICAgYXMgZGVzY3JpYmVkIGFib3ZlLiBUaGUgcHJlZGljYXRlIGNhbiBiZSBuZWdhdGVkIGJ5IHByZWZpeGluZyB0aGUgc3RyaW5nIHdpdGggYCFgLlxyXG4gKiAgICAgRm9yIEV4YW1wbGUgYHtuYW1lOiBcIiFNXCJ9YCBwcmVkaWNhdGUgd2lsbCByZXR1cm4gYW4gYXJyYXkgb2YgaXRlbXMgd2hpY2ggaGF2ZSBwcm9wZXJ0eSBgbmFtZWBcclxuICogICAgIG5vdCBjb250YWluaW5nIFwiTVwiLlxyXG4gKlxyXG4gKiAgIC0gYGZ1bmN0aW9uKHZhbHVlLCBpbmRleClgOiBBIHByZWRpY2F0ZSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byB3cml0ZSBhcmJpdHJhcnkgZmlsdGVycy4gVGhlXHJcbiAqICAgICBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgLiBUaGUgZmluYWwgcmVzdWx0IGlzIGFuIGFycmF5IG9mIHRob3NlXHJcbiAqICAgICBlbGVtZW50cyB0aGF0IHRoZSBwcmVkaWNhdGUgcmV0dXJuZWQgdHJ1ZSBmb3IuXHJcbiAqXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCl8dHJ1ZXx1bmRlZmluZWR9IGNvbXBhcmF0b3IgQ29tcGFyYXRvciB3aGljaCBpcyB1c2VkIGluXHJcbiAqICAgICBkZXRlcm1pbmluZyBpZiB0aGUgZXhwZWN0ZWQgdmFsdWUgKGZyb20gdGhlIGZpbHRlciBleHByZXNzaW9uKSBhbmQgYWN0dWFsIHZhbHVlIChmcm9tXHJcbiAqICAgICB0aGUgb2JqZWN0IGluIHRoZSBhcnJheSkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBtYXRjaC5cclxuICpcclxuICogICBDYW4gYmUgb25lIG9mOlxyXG4gKlxyXG4gKiAgIC0gYGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpYDpcclxuICogICAgIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGdpdmVuIHRoZSBvYmplY3QgdmFsdWUgYW5kIHRoZSBwcmVkaWNhdGUgdmFsdWUgdG8gY29tcGFyZSBhbmRcclxuICogICAgIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiB0aGUgaXRlbSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gZmlsdGVyZWQgcmVzdWx0LlxyXG4gKlxyXG4gKiAgIC0gYHRydWVgOiBBIHNob3J0aGFuZCBmb3IgYGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpIHsgcmV0dXJuIGFuZ3VsYXIuZXF1YWxzKGV4cGVjdGVkLCBhY3R1YWwpfWAuXHJcbiAqICAgICB0aGlzIGlzIGVzc2VudGlhbGx5IHN0cmljdCBjb21wYXJpc29uIG9mIGV4cGVjdGVkIGFuZCBhY3R1YWwuXHJcbiAqXHJcbiAqICAgLSBgZmFsc2V8dW5kZWZpbmVkYDogQSBzaG9ydCBoYW5kIGZvciBhIGZ1bmN0aW9uIHdoaWNoIHdpbGwgbG9vayBmb3IgYSBzdWJzdHJpbmcgbWF0Y2ggaW4gY2FzZVxyXG4gKiAgICAgaW5zZW5zaXRpdmUgd2F5LlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICA8ZXhhbXBsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgPGRpdiBuZy1pbml0PVwiZnJpZW5kcyA9IFt7bmFtZTonSm9obicsIHBob25lOic1NTUtMTI3Nid9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOidNYXJ5JywgcGhvbmU6JzgwMC1CSUctTUFSWSd9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOidNaWtlJywgcGhvbmU6JzU1NS00MzIxJ30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge25hbWU6J0FkYW0nLCBwaG9uZTonNTU1LTU2NzgnfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bmFtZTonSnVsaWUnLCBwaG9uZTonNTU1LTg3NjUnfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bmFtZTonSnVsaWV0dGUnLCBwaG9uZTonNTU1LTU2NzgnfV1cIj48L2Rpdj5cclxuXHJcbiAgICAgICBTZWFyY2g6IDxpbnB1dCBuZy1tb2RlbD1cInNlYXJjaFRleHRcIj5cclxuICAgICAgIDx0YWJsZSBpZD1cInNlYXJjaFRleHRSZXN1bHRzXCI+XHJcbiAgICAgICAgIDx0cj48dGg+TmFtZTwvdGg+PHRoPlBob25lPC90aD48L3RyPlxyXG4gICAgICAgICA8dHIgbmctcmVwZWF0PVwiZnJpZW5kIGluIGZyaWVuZHMgfCBmaWx0ZXI6c2VhcmNoVGV4dFwiPlxyXG4gICAgICAgICAgIDx0ZD57e2ZyaWVuZC5uYW1lfX08L3RkPlxyXG4gICAgICAgICAgIDx0ZD57e2ZyaWVuZC5waG9uZX19PC90ZD5cclxuICAgICAgICAgPC90cj5cclxuICAgICAgIDwvdGFibGU+XHJcbiAgICAgICA8aHI+XHJcbiAgICAgICBBbnk6IDxpbnB1dCBuZy1tb2RlbD1cInNlYXJjaC4kXCI+IDxicj5cclxuICAgICAgIE5hbWUgb25seSA8aW5wdXQgbmctbW9kZWw9XCJzZWFyY2gubmFtZVwiPjxicj5cclxuICAgICAgIFBob25lIG9ubHkgPGlucHV0IG5nLW1vZGVsPVwic2VhcmNoLnBob25lXCI+PGJyPlxyXG4gICAgICAgRXF1YWxpdHkgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5nLW1vZGVsPVwic3RyaWN0XCI+PGJyPlxyXG4gICAgICAgPHRhYmxlIGlkPVwic2VhcmNoT2JqUmVzdWx0c1wiPlxyXG4gICAgICAgICA8dHI+PHRoPk5hbWU8L3RoPjx0aD5QaG9uZTwvdGg+PC90cj5cclxuICAgICAgICAgPHRyIG5nLXJlcGVhdD1cImZyaWVuZE9iaiBpbiBmcmllbmRzIHwgZmlsdGVyOnNlYXJjaDpzdHJpY3RcIj5cclxuICAgICAgICAgICA8dGQ+e3tmcmllbmRPYmoubmFtZX19PC90ZD5cclxuICAgICAgICAgICA8dGQ+e3tmcmllbmRPYmoucGhvbmV9fTwvdGQ+XHJcbiAgICAgICAgIDwvdHI+XHJcbiAgICAgICA8L3RhYmxlPlxyXG4gICAgIDwvZmlsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgICB2YXIgZXhwZWN0RnJpZW5kTmFtZXMgPSBmdW5jdGlvbihleHBlY3RlZE5hbWVzLCBrZXkpIHtcclxuICAgICAgICAgZWxlbWVudC5hbGwoYnkucmVwZWF0ZXIoa2V5ICsgJyBpbiBmcmllbmRzJykuY29sdW1uKGtleSArICcubmFtZScpKS50aGVuKGZ1bmN0aW9uKGFycikge1xyXG4gICAgICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uKHdkLCBpKSB7XHJcbiAgICAgICAgICAgICBleHBlY3Qod2QuZ2V0VGV4dCgpKS50b01hdGNoKGV4cGVjdGVkTmFtZXNbaV0pO1xyXG4gICAgICAgICAgIH0pO1xyXG4gICAgICAgICB9KTtcclxuICAgICAgIH07XHJcblxyXG4gICAgICAgaXQoJ3Nob3VsZCBzZWFyY2ggYWNyb3NzIGFsbCBmaWVsZHMgd2hlbiBmaWx0ZXJpbmcgd2l0aCBhIHN0cmluZycsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICB2YXIgc2VhcmNoVGV4dCA9IGVsZW1lbnQoYnkubW9kZWwoJ3NlYXJjaFRleHQnKSk7XHJcbiAgICAgICAgIHNlYXJjaFRleHQuY2xlYXIoKTtcclxuICAgICAgICAgc2VhcmNoVGV4dC5zZW5kS2V5cygnbScpO1xyXG4gICAgICAgICBleHBlY3RGcmllbmROYW1lcyhbJ01hcnknLCAnTWlrZScsICdBZGFtJ10sICdmcmllbmQnKTtcclxuXHJcbiAgICAgICAgIHNlYXJjaFRleHQuY2xlYXIoKTtcclxuICAgICAgICAgc2VhcmNoVGV4dC5zZW5kS2V5cygnNzYnKTtcclxuICAgICAgICAgZXhwZWN0RnJpZW5kTmFtZXMoWydKb2huJywgJ0p1bGllJ10sICdmcmllbmQnKTtcclxuICAgICAgIH0pO1xyXG5cclxuICAgICAgIGl0KCdzaG91bGQgc2VhcmNoIGluIHNwZWNpZmljIGZpZWxkcyB3aGVuIGZpbHRlcmluZyB3aXRoIGEgcHJlZGljYXRlIG9iamVjdCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICB2YXIgc2VhcmNoQW55ID0gZWxlbWVudChieS5tb2RlbCgnc2VhcmNoLiQnKSk7XHJcbiAgICAgICAgIHNlYXJjaEFueS5jbGVhcigpO1xyXG4gICAgICAgICBzZWFyY2hBbnkuc2VuZEtleXMoJ2knKTtcclxuICAgICAgICAgZXhwZWN0RnJpZW5kTmFtZXMoWydNYXJ5JywgJ01pa2UnLCAnSnVsaWUnLCAnSnVsaWV0dGUnXSwgJ2ZyaWVuZE9iaicpO1xyXG4gICAgICAgfSk7XHJcbiAgICAgICBpdCgnc2hvdWxkIHVzZSBhIGVxdWFsIGNvbXBhcmlzb24gd2hlbiBjb21wYXJhdG9yIGlzIHRydWUnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgdmFyIHNlYXJjaE5hbWUgPSBlbGVtZW50KGJ5Lm1vZGVsKCdzZWFyY2gubmFtZScpKTtcclxuICAgICAgICAgdmFyIHN0cmljdCA9IGVsZW1lbnQoYnkubW9kZWwoJ3N0cmljdCcpKTtcclxuICAgICAgICAgc2VhcmNoTmFtZS5jbGVhcigpO1xyXG4gICAgICAgICBzZWFyY2hOYW1lLnNlbmRLZXlzKCdKdWxpZScpO1xyXG4gICAgICAgICBzdHJpY3QuY2xpY2soKTtcclxuICAgICAgICAgZXhwZWN0RnJpZW5kTmFtZXMoWydKdWxpZSddLCAnZnJpZW5kT2JqJyk7XHJcbiAgICAgICB9KTtcclxuICAgICA8L2ZpbGU+XHJcbiAgIDwvZXhhbXBsZT5cclxuICovXHJcbmZ1bmN0aW9uIGZpbHRlckZpbHRlcigpIHtcclxuICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGV4cHJlc3Npb24sIGNvbXBhcmF0b3IpIHtcclxuICAgIGlmICghaXNBcnJheShhcnJheSkpIHJldHVybiBhcnJheTtcclxuXHJcbiAgICB2YXIgY29tcGFyYXRvclR5cGUgPSB0eXBlb2YoY29tcGFyYXRvciksXHJcbiAgICAgICAgcHJlZGljYXRlcyA9IFtdO1xyXG5cclxuICAgIHByZWRpY2F0ZXMuY2hlY2sgPSBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcclxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcmVkaWNhdGVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKCFwcmVkaWNhdGVzW2pdKHZhbHVlLCBpbmRleCkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChjb21wYXJhdG9yVHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBpZiAoY29tcGFyYXRvclR5cGUgPT09ICdib29sZWFuJyAmJiBjb21wYXJhdG9yKSB7XHJcbiAgICAgICAgY29tcGFyYXRvciA9IGZ1bmN0aW9uKG9iaiwgdGV4dCkge1xyXG4gICAgICAgICAgcmV0dXJuIGFuZ3VsYXIuZXF1YWxzKG9iaiwgdGV4dCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb21wYXJhdG9yID0gZnVuY3Rpb24ob2JqLCB0ZXh0KSB7XHJcbiAgICAgICAgICBpZiAob2JqICYmIHRleHQgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHRleHQgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG9iaktleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgICBpZiAob2JqS2V5LmNoYXJBdCgwKSAhPT0gJyQnICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBvYmpLZXkpICYmXHJcbiAgICAgICAgICAgICAgICAgIGNvbXBhcmF0b3Iob2JqW29iaktleV0sIHRleHRbb2JqS2V5XSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0ZXh0ID0gKCcnICsgdGV4dCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIHJldHVybiAoJycgKyBvYmopLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0ZXh0KSA+IC0xO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgc2VhcmNoID0gZnVuY3Rpb24ob2JqLCB0ZXh0KSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycgJiYgdGV4dC5jaGFyQXQoMCkgPT09ICchJykge1xyXG4gICAgICAgIHJldHVybiAhc2VhcmNoKG9iaiwgdGV4dC5zdWJzdHIoMSkpO1xyXG4gICAgICB9XHJcbiAgICAgIHN3aXRjaCAodHlwZW9mIG9iaikge1xyXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxyXG4gICAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcclxuICAgICAgICAgIHJldHVybiBjb21wYXJhdG9yKG9iaiwgdGV4dCk7XHJcbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcclxuICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHRleHQpIHtcclxuICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzpcclxuICAgICAgICAgICAgICByZXR1cm4gY29tcGFyYXRvcihvYmosIHRleHQpO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGZvciAodmFyIG9iaktleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmpLZXkuY2hhckF0KDApICE9PSAnJCcgJiYgc2VhcmNoKG9ialtvYmpLZXldLCB0ZXh0KSkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgY2FzZSAnYXJyYXknOlxyXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHNlYXJjaChvYmpbaV0sIHRleHQpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgc3dpdGNoICh0eXBlb2YgZXhwcmVzc2lvbikge1xyXG4gICAgICBjYXNlICdib29sZWFuJzpcclxuICAgICAgY2FzZSAnbnVtYmVyJzpcclxuICAgICAgY2FzZSAnc3RyaW5nJzpcclxuICAgICAgICAvLyBTZXQgdXAgZXhwcmVzc2lvbiBvYmplY3QgYW5kIGZhbGwgdGhyb3VnaFxyXG4gICAgICAgIGV4cHJlc3Npb24gPSB7JDpleHByZXNzaW9ufTtcclxuICAgICAgICAvLyBqc2hpbnQgLVcwODZcclxuICAgICAgY2FzZSAnb2JqZWN0JzpcclxuICAgICAgICAvLyBqc2hpbnQgK1cwODZcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgKGZ1bmN0aW9uKHBhdGgpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHByZXNzaW9uW3BhdGhdID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xyXG4gICAgICAgICAgICBwcmVkaWNhdGVzLnB1c2goZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gc2VhcmNoKHBhdGggPT0gJyQnID8gdmFsdWUgOiAodmFsdWUgJiYgdmFsdWVbcGF0aF0pLCBleHByZXNzaW9uW3BhdGhdKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KShrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxyXG4gICAgICAgIHByZWRpY2F0ZXMucHVzaChleHByZXNzaW9uKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gYXJyYXk7XHJcbiAgICB9XHJcbiAgICB2YXIgZmlsdGVyZWQgPSBbXTtcclxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXJyYXkubGVuZ3RoOyBqKyspIHtcclxuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbal07XHJcbiAgICAgIGlmIChwcmVkaWNhdGVzLmNoZWNrKHZhbHVlLCBqKSkge1xyXG4gICAgICAgIGZpbHRlcmVkLnB1c2godmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlsdGVyZWQ7XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBmaWx0ZXJcclxuICogQG5hbWUgY3VycmVuY3lcclxuICogQGtpbmQgZnVuY3Rpb25cclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEZvcm1hdHMgYSBudW1iZXIgYXMgYSBjdXJyZW5jeSAoaWUgJDEsMjM0LjU2KS4gV2hlbiBubyBjdXJyZW5jeSBzeW1ib2wgaXMgcHJvdmlkZWQsIGRlZmF1bHRcclxuICogc3ltYm9sIGZvciBjdXJyZW50IGxvY2FsZSBpcyB1c2VkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IElucHV0IHRvIGZpbHRlci5cclxuICogQHBhcmFtIHtzdHJpbmc9fSBzeW1ib2wgQ3VycmVuY3kgc3ltYm9sIG9yIGlkZW50aWZpZXIgdG8gYmUgZGlzcGxheWVkLlxyXG4gKiBAcGFyYW0ge251bWJlcj19IGZyYWN0aW9uU2l6ZSBOdW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgdG8gcm91bmQgdGhlIGFtb3VudCB0by5cclxuICogQHJldHVybnMge3N0cmluZ30gRm9ybWF0dGVkIG51bWJlci5cclxuICpcclxuICpcclxuICogQGV4YW1wbGVcclxuICAgPGV4YW1wbGUgbW9kdWxlPVwiY3VycmVuY3lFeGFtcGxlXCI+XHJcbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgIDxzY3JpcHQ+XHJcbiAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdjdXJyZW5jeUV4YW1wbGUnLCBbXSlcclxuICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xyXG4gICAgICAgICAgICAgJHNjb3BlLmFtb3VudCA9IDEyMzQuNTY7XHJcbiAgICAgICAgICAgfV0pO1xyXG4gICAgICAgPC9zY3JpcHQ+XHJcbiAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxyXG4gICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG5nLW1vZGVsPVwiYW1vdW50XCI+IDxicj5cclxuICAgICAgICAgZGVmYXVsdCBjdXJyZW5jeSBzeW1ib2wgKCQpOiA8c3BhbiBpZD1cImN1cnJlbmN5LWRlZmF1bHRcIj57e2Ftb3VudCB8IGN1cnJlbmN5fX08L3NwYW4+PGJyPlxyXG4gICAgICAgICBjdXN0b20gY3VycmVuY3kgaWRlbnRpZmllciAoVVNEJCk6IDxzcGFuIGlkPVwiY3VycmVuY3ktY3VzdG9tXCI+e3thbW91bnQgfCBjdXJyZW5jeTpcIlVTRCRcIn19PC9zcGFuPlxyXG4gICAgICAgICBubyBmcmFjdGlvbnMgKDApOiA8c3BhbiBpZD1cImN1cnJlbmN5LW5vLWZyYWN0aW9uc1wiPnt7YW1vdW50IHwgY3VycmVuY3k6XCJVU0QkXCI6MH19PC9zcGFuPlxyXG4gICAgICAgPC9kaXY+XHJcbiAgICAgPC9maWxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgIGl0KCdzaG91bGQgaW5pdCB3aXRoIDEyMzQuNTYnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2N1cnJlbmN5LWRlZmF1bHQnKSkuZ2V0VGV4dCgpKS50b0JlKCckMSwyMzQuNTYnKTtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2N1cnJlbmN5LWN1c3RvbScpKS5nZXRUZXh0KCkpLnRvQmUoJ1VTRCQxLDIzNC41NicpO1xyXG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnY3VycmVuY3ktbm8tZnJhY3Rpb25zJykpLmdldFRleHQoKSkudG9CZSgnVVNEJDEsMjM1Jyk7XHJcbiAgICAgICB9KTtcclxuICAgICAgIGl0KCdzaG91bGQgdXBkYXRlJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgIGlmIChicm93c2VyLnBhcmFtcy5icm93c2VyID09ICdzYWZhcmknKSB7XHJcbiAgICAgICAgICAgLy8gU2FmYXJpIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIG1pbnVzIGtleS4gU2VlXHJcbiAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvcHJvdHJhY3Rvci9pc3N1ZXMvNDgxXHJcbiAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ2Ftb3VudCcpKS5jbGVhcigpO1xyXG4gICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdhbW91bnQnKSkuc2VuZEtleXMoJy0xMjM0Jyk7XHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdjdXJyZW5jeS1kZWZhdWx0JykpLmdldFRleHQoKSkudG9CZSgnKCQxLDIzNC4wMCknKTtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2N1cnJlbmN5LWN1c3RvbScpKS5nZXRUZXh0KCkpLnRvQmUoJyhVU0QkMSwyMzQuMDApJyk7XHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdjdXJyZW5jeS1uby1mcmFjdGlvbnMnKSkuZ2V0VGV4dCgpKS50b0JlKCcoVVNEJDEsMjM0KScpO1xyXG4gICAgICAgfSk7XHJcbiAgICAgPC9maWxlPlxyXG4gICA8L2V4YW1wbGU+XHJcbiAqL1xyXG5jdXJyZW5jeUZpbHRlci4kaW5qZWN0ID0gWyckbG9jYWxlJ107XHJcbmZ1bmN0aW9uIGN1cnJlbmN5RmlsdGVyKCRsb2NhbGUpIHtcclxuICB2YXIgZm9ybWF0cyA9ICRsb2NhbGUuTlVNQkVSX0ZPUk1BVFM7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uKGFtb3VudCwgY3VycmVuY3lTeW1ib2wsIGZyYWN0aW9uU2l6ZSkge1xyXG4gICAgaWYgKGlzVW5kZWZpbmVkKGN1cnJlbmN5U3ltYm9sKSkge1xyXG4gICAgICBjdXJyZW5jeVN5bWJvbCA9IGZvcm1hdHMuQ1VSUkVOQ1lfU1lNO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc1VuZGVmaW5lZChmcmFjdGlvblNpemUpKSB7XHJcbiAgICAgIC8vIFRPRE86IHJlYWQgdGhlIGRlZmF1bHQgdmFsdWUgZnJvbSB0aGUgbG9jYWxlIGZpbGVcclxuICAgICAgZnJhY3Rpb25TaXplID0gMjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiBudWxsIG9yIHVuZGVmaW5lZCBwYXNzIGl0IHRocm91Z2hcclxuICAgIHJldHVybiAoYW1vdW50ID09IG51bGwpXHJcbiAgICAgICAgPyBhbW91bnRcclxuICAgICAgICA6IGZvcm1hdE51bWJlcihhbW91bnQsIGZvcm1hdHMuUEFUVEVSTlNbMV0sIGZvcm1hdHMuR1JPVVBfU0VQLCBmb3JtYXRzLkRFQ0lNQUxfU0VQLCBmcmFjdGlvblNpemUpLlxyXG4gICAgICAgICAgICByZXBsYWNlKC9cXHUwMEE0L2csIGN1cnJlbmN5U3ltYm9sKTtcclxuICB9O1xyXG59XHJcblxyXG4vKipcclxuICogQG5nZG9jIGZpbHRlclxyXG4gKiBAbmFtZSBudW1iZXJcclxuICogQGtpbmQgZnVuY3Rpb25cclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEZvcm1hdHMgYSBudW1iZXIgYXMgdGV4dC5cclxuICpcclxuICogSWYgdGhlIGlucHV0IGlzIG5vdCBhIG51bWJlciBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gbnVtYmVyIE51bWJlciB0byBmb3JtYXQuXHJcbiAqIEBwYXJhbSB7KG51bWJlcnxzdHJpbmcpPX0gZnJhY3Rpb25TaXplIE51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyB0byByb3VuZCB0aGUgbnVtYmVyIHRvLlxyXG4gKiBJZiB0aGlzIGlzIG5vdCBwcm92aWRlZCB0aGVuIHRoZSBmcmFjdGlvbiBzaXplIGlzIGNvbXB1dGVkIGZyb20gdGhlIGN1cnJlbnQgbG9jYWxlJ3MgbnVtYmVyXHJcbiAqIGZvcm1hdHRpbmcgcGF0dGVybi4gSW4gdGhlIGNhc2Ugb2YgdGhlIGRlZmF1bHQgbG9jYWxlLCBpdCB3aWxsIGJlIDMuXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IE51bWJlciByb3VuZGVkIHRvIGRlY2ltYWxQbGFjZXMgYW5kIHBsYWNlcyBhIOKAnCzigJ0gYWZ0ZXIgZWFjaCB0aGlyZCBkaWdpdC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICAgPGV4YW1wbGUgbW9kdWxlPVwibnVtYmVyRmlsdGVyRXhhbXBsZVwiPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgICA8c2NyaXB0PlxyXG4gICAgICAgICBhbmd1bGFyLm1vZHVsZSgnbnVtYmVyRmlsdGVyRXhhbXBsZScsIFtdKVxyXG4gICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAgICAgICAgICAgICAkc2NvcGUudmFsID0gMTIzNC41Njc4OTtcclxuICAgICAgICAgICB9XSk7XHJcbiAgICAgICA8L3NjcmlwdD5cclxuICAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XHJcbiAgICAgICAgIEVudGVyIG51bWJlcjogPGlucHV0IG5nLW1vZGVsPSd2YWwnPjxicj5cclxuICAgICAgICAgRGVmYXVsdCBmb3JtYXR0aW5nOiA8c3BhbiBpZD0nbnVtYmVyLWRlZmF1bHQnPnt7dmFsIHwgbnVtYmVyfX08L3NwYW4+PGJyPlxyXG4gICAgICAgICBObyBmcmFjdGlvbnM6IDxzcGFuPnt7dmFsIHwgbnVtYmVyOjB9fTwvc3Bhbj48YnI+XHJcbiAgICAgICAgIE5lZ2F0aXZlIG51bWJlcjogPHNwYW4+e3stdmFsIHwgbnVtYmVyOjR9fTwvc3Bhbj5cclxuICAgICAgIDwvZGl2PlxyXG4gICAgIDwvZmlsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBudW1iZXJzJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdudW1iZXItZGVmYXVsdCcpKS5nZXRUZXh0KCkpLnRvQmUoJzEsMjM0LjU2OCcpO1xyXG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCd2YWwgfCBudW1iZXI6MCcpKS5nZXRUZXh0KCkpLnRvQmUoJzEsMjM1Jyk7XHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJy12YWwgfCBudW1iZXI6NCcpKS5nZXRUZXh0KCkpLnRvQmUoJy0xLDIzNC41Njc5Jyk7XHJcbiAgICAgICB9KTtcclxuXHJcbiAgICAgICBpdCgnc2hvdWxkIHVwZGF0ZScsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCd2YWwnKSkuY2xlYXIoKTtcclxuICAgICAgICAgZWxlbWVudChieS5tb2RlbCgndmFsJykpLnNlbmRLZXlzKCczMzc0LjMzMycpO1xyXG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnbnVtYmVyLWRlZmF1bHQnKSkuZ2V0VGV4dCgpKS50b0JlKCczLDM3NC4zMzMnKTtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygndmFsIHwgbnVtYmVyOjAnKSkuZ2V0VGV4dCgpKS50b0JlKCczLDM3NCcpO1xyXG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCctdmFsIHwgbnVtYmVyOjQnKSkuZ2V0VGV4dCgpKS50b0JlKCctMywzNzQuMzMzMCcpO1xyXG4gICAgICB9KTtcclxuICAgICA8L2ZpbGU+XHJcbiAgIDwvZXhhbXBsZT5cclxuICovXHJcblxyXG5cclxubnVtYmVyRmlsdGVyLiRpbmplY3QgPSBbJyRsb2NhbGUnXTtcclxuZnVuY3Rpb24gbnVtYmVyRmlsdGVyKCRsb2NhbGUpIHtcclxuICB2YXIgZm9ybWF0cyA9ICRsb2NhbGUuTlVNQkVSX0ZPUk1BVFM7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uKG51bWJlciwgZnJhY3Rpb25TaXplKSB7XHJcblxyXG4gICAgLy8gaWYgbnVsbCBvciB1bmRlZmluZWQgcGFzcyBpdCB0aHJvdWdoXHJcbiAgICByZXR1cm4gKG51bWJlciA9PSBudWxsKVxyXG4gICAgICAgID8gbnVtYmVyXHJcbiAgICAgICAgOiBmb3JtYXROdW1iZXIobnVtYmVyLCBmb3JtYXRzLlBBVFRFUk5TWzBdLCBmb3JtYXRzLkdST1VQX1NFUCwgZm9ybWF0cy5ERUNJTUFMX1NFUCxcclxuICAgICAgICAgICAgICAgICAgICAgICBmcmFjdGlvblNpemUpO1xyXG4gIH07XHJcbn1cclxuXHJcbnZhciBERUNJTUFMX1NFUCA9ICcuJztcclxuZnVuY3Rpb24gZm9ybWF0TnVtYmVyKG51bWJlciwgcGF0dGVybiwgZ3JvdXBTZXAsIGRlY2ltYWxTZXAsIGZyYWN0aW9uU2l6ZSkge1xyXG4gIGlmICghaXNGaW5pdGUobnVtYmVyKSB8fCBpc09iamVjdChudW1iZXIpKSByZXR1cm4gJyc7XHJcblxyXG4gIHZhciBpc05lZ2F0aXZlID0gbnVtYmVyIDwgMDtcclxuICBudW1iZXIgPSBNYXRoLmFicyhudW1iZXIpO1xyXG4gIHZhciBudW1TdHIgPSBudW1iZXIgKyAnJyxcclxuICAgICAgZm9ybWF0ZWRUZXh0ID0gJycsXHJcbiAgICAgIHBhcnRzID0gW107XHJcblxyXG4gIHZhciBoYXNFeHBvbmVudCA9IGZhbHNlO1xyXG4gIGlmIChudW1TdHIuaW5kZXhPZignZScpICE9PSAtMSkge1xyXG4gICAgdmFyIG1hdGNoID0gbnVtU3RyLm1hdGNoKC8oW1xcZFxcLl0rKWUoLT8pKFxcZCspLyk7XHJcbiAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMl0gPT0gJy0nICYmIG1hdGNoWzNdID4gZnJhY3Rpb25TaXplICsgMSkge1xyXG4gICAgICBudW1TdHIgPSAnMCc7XHJcbiAgICAgIG51bWJlciA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3JtYXRlZFRleHQgPSBudW1TdHI7XHJcbiAgICAgIGhhc0V4cG9uZW50ID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICghaGFzRXhwb25lbnQpIHtcclxuICAgIHZhciBmcmFjdGlvbkxlbiA9IChudW1TdHIuc3BsaXQoREVDSU1BTF9TRVApWzFdIHx8ICcnKS5sZW5ndGg7XHJcblxyXG4gICAgLy8gZGV0ZXJtaW5lIGZyYWN0aW9uU2l6ZSBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkXHJcbiAgICBpZiAoaXNVbmRlZmluZWQoZnJhY3Rpb25TaXplKSkge1xyXG4gICAgICBmcmFjdGlvblNpemUgPSBNYXRoLm1pbihNYXRoLm1heChwYXR0ZXJuLm1pbkZyYWMsIGZyYWN0aW9uTGVuKSwgcGF0dGVybi5tYXhGcmFjKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzYWZlbHkgcm91bmQgbnVtYmVycyBpbiBKUyB3aXRob3V0IGhpdHRpbmcgaW1wcmVjaXNpb25zIG9mIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWNzXHJcbiAgICAvLyBpbnNwaXJlZCBieTpcclxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvcm91bmRcclxuICAgIG51bWJlciA9ICsoTWF0aC5yb3VuZCgrKG51bWJlci50b1N0cmluZygpICsgJ2UnICsgZnJhY3Rpb25TaXplKSkudG9TdHJpbmcoKSArICdlJyArIC1mcmFjdGlvblNpemUpO1xyXG5cclxuICAgIGlmIChudW1iZXIgPT09IDApIHtcclxuICAgICAgaXNOZWdhdGl2ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBmcmFjdGlvbiA9ICgnJyArIG51bWJlcikuc3BsaXQoREVDSU1BTF9TRVApO1xyXG4gICAgdmFyIHdob2xlID0gZnJhY3Rpb25bMF07XHJcbiAgICBmcmFjdGlvbiA9IGZyYWN0aW9uWzFdIHx8ICcnO1xyXG5cclxuICAgIHZhciBpLCBwb3MgPSAwLFxyXG4gICAgICAgIGxncm91cCA9IHBhdHRlcm4ubGdTaXplLFxyXG4gICAgICAgIGdyb3VwID0gcGF0dGVybi5nU2l6ZTtcclxuXHJcbiAgICBpZiAod2hvbGUubGVuZ3RoID49IChsZ3JvdXAgKyBncm91cCkpIHtcclxuICAgICAgcG9zID0gd2hvbGUubGVuZ3RoIC0gbGdyb3VwO1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcG9zOyBpKyspIHtcclxuICAgICAgICBpZiAoKHBvcyAtIGkpICUgZ3JvdXAgPT09IDAgJiYgaSAhPT0gMCkge1xyXG4gICAgICAgICAgZm9ybWF0ZWRUZXh0ICs9IGdyb3VwU2VwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3JtYXRlZFRleHQgKz0gd2hvbGUuY2hhckF0KGkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChpID0gcG9zOyBpIDwgd2hvbGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKCh3aG9sZS5sZW5ndGggLSBpKSAlIGxncm91cCA9PT0gMCAmJiBpICE9PSAwKSB7XHJcbiAgICAgICAgZm9ybWF0ZWRUZXh0ICs9IGdyb3VwU2VwO1xyXG4gICAgICB9XHJcbiAgICAgIGZvcm1hdGVkVGV4dCArPSB3aG9sZS5jaGFyQXQoaSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZm9ybWF0IGZyYWN0aW9uIHBhcnQuXHJcbiAgICB3aGlsZSAoZnJhY3Rpb24ubGVuZ3RoIDwgZnJhY3Rpb25TaXplKSB7XHJcbiAgICAgIGZyYWN0aW9uICs9ICcwJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZnJhY3Rpb25TaXplICYmIGZyYWN0aW9uU2l6ZSAhPT0gXCIwXCIpIGZvcm1hdGVkVGV4dCArPSBkZWNpbWFsU2VwICsgZnJhY3Rpb24uc3Vic3RyKDAsIGZyYWN0aW9uU2l6ZSk7XHJcbiAgfSBlbHNlIHtcclxuXHJcbiAgICBpZiAoZnJhY3Rpb25TaXplID4gMCAmJiBudW1iZXIgPiAtMSAmJiBudW1iZXIgPCAxKSB7XHJcbiAgICAgIGZvcm1hdGVkVGV4dCA9IG51bWJlci50b0ZpeGVkKGZyYWN0aW9uU2l6ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwYXJ0cy5wdXNoKGlzTmVnYXRpdmUgPyBwYXR0ZXJuLm5lZ1ByZSA6IHBhdHRlcm4ucG9zUHJlKTtcclxuICBwYXJ0cy5wdXNoKGZvcm1hdGVkVGV4dCk7XHJcbiAgcGFydHMucHVzaChpc05lZ2F0aXZlID8gcGF0dGVybi5uZWdTdWYgOiBwYXR0ZXJuLnBvc1N1Zik7XHJcbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYWROdW1iZXIobnVtLCBkaWdpdHMsIHRyaW0pIHtcclxuICB2YXIgbmVnID0gJyc7XHJcbiAgaWYgKG51bSA8IDApIHtcclxuICAgIG5lZyA9ICAnLSc7XHJcbiAgICBudW0gPSAtbnVtO1xyXG4gIH1cclxuICBudW0gPSAnJyArIG51bTtcclxuICB3aGlsZSAobnVtLmxlbmd0aCA8IGRpZ2l0cykgbnVtID0gJzAnICsgbnVtO1xyXG4gIGlmICh0cmltKVxyXG4gICAgbnVtID0gbnVtLnN1YnN0cihudW0ubGVuZ3RoIC0gZGlnaXRzKTtcclxuICByZXR1cm4gbmVnICsgbnVtO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gZGF0ZUdldHRlcihuYW1lLCBzaXplLCBvZmZzZXQsIHRyaW0pIHtcclxuICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcclxuICByZXR1cm4gZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgdmFyIHZhbHVlID0gZGF0ZVsnZ2V0JyArIG5hbWVdKCk7XHJcbiAgICBpZiAob2Zmc2V0ID4gMCB8fCB2YWx1ZSA+IC1vZmZzZXQpXHJcbiAgICAgIHZhbHVlICs9IG9mZnNldDtcclxuICAgIGlmICh2YWx1ZSA9PT0gMCAmJiBvZmZzZXQgPT0gLTEyKSB2YWx1ZSA9IDEyO1xyXG4gICAgcmV0dXJuIHBhZE51bWJlcih2YWx1ZSwgc2l6ZSwgdHJpbSk7XHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZGF0ZVN0ckdldHRlcihuYW1lLCBzaG9ydEZvcm0pIHtcclxuICByZXR1cm4gZnVuY3Rpb24oZGF0ZSwgZm9ybWF0cykge1xyXG4gICAgdmFyIHZhbHVlID0gZGF0ZVsnZ2V0JyArIG5hbWVdKCk7XHJcbiAgICB2YXIgZ2V0ID0gdXBwZXJjYXNlKHNob3J0Rm9ybSA/ICgnU0hPUlQnICsgbmFtZSkgOiBuYW1lKTtcclxuXHJcbiAgICByZXR1cm4gZm9ybWF0c1tnZXRdW3ZhbHVlXTtcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiB0aW1lWm9uZUdldHRlcihkYXRlKSB7XHJcbiAgdmFyIHpvbmUgPSAtMSAqIGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcclxuICB2YXIgcGFkZGVkWm9uZSA9ICh6b25lID49IDApID8gXCIrXCIgOiBcIlwiO1xyXG5cclxuICBwYWRkZWRab25lICs9IHBhZE51bWJlcihNYXRoW3pvbmUgPiAwID8gJ2Zsb29yJyA6ICdjZWlsJ10oem9uZSAvIDYwKSwgMikgK1xyXG4gICAgICAgICAgICAgICAgcGFkTnVtYmVyKE1hdGguYWJzKHpvbmUgJSA2MCksIDIpO1xyXG5cclxuICByZXR1cm4gcGFkZGVkWm9uZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Rmlyc3RUaHVyc2RheU9mWWVhcih5ZWFyKSB7XHJcbiAgICAvLyAwID0gaW5kZXggb2YgSmFudWFyeVxyXG4gICAgdmFyIGRheU9mV2Vla09uRmlyc3QgPSAobmV3IERhdGUoeWVhciwgMCwgMSkpLmdldERheSgpO1xyXG4gICAgLy8gNCA9IGluZGV4IG9mIFRodXJzZGF5ICgrMSB0byBhY2NvdW50IGZvciAxc3QgPSA1KVxyXG4gICAgLy8gMTEgPSBpbmRleCBvZiAqbmV4dCogVGh1cnNkYXkgKCsxIGFjY291bnQgZm9yIDFzdCA9IDEyKVxyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIDAsICgoZGF5T2ZXZWVrT25GaXJzdCA8PSA0KSA/IDUgOiAxMikgLSBkYXlPZldlZWtPbkZpcnN0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VGh1cnNkYXlUaGlzV2VlayhkYXRldGltZSkge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGV0aW1lLmdldEZ1bGxZZWFyKCksIGRhdGV0aW1lLmdldE1vbnRoKCksXHJcbiAgICAgIC8vIDQgPSBpbmRleCBvZiBUaHVyc2RheVxyXG4gICAgICBkYXRldGltZS5nZXREYXRlKCkgKyAoNCAtIGRhdGV0aW1lLmdldERheSgpKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdlZWtHZXR0ZXIoc2l6ZSkge1xyXG4gICByZXR1cm4gZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgICB2YXIgZmlyc3RUaHVycyA9IGdldEZpcnN0VGh1cnNkYXlPZlllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKSxcclxuICAgICAgICAgdGhpc1RodXJzID0gZ2V0VGh1cnNkYXlUaGlzV2VlayhkYXRlKTtcclxuXHJcbiAgICAgIHZhciBkaWZmID0gK3RoaXNUaHVycyAtICtmaXJzdFRodXJzLFxyXG4gICAgICAgICByZXN1bHQgPSAxICsgTWF0aC5yb3VuZChkaWZmIC8gNi4wNDhlOCk7IC8vIDYuMDQ4ZTggbXMgcGVyIHdlZWtcclxuXHJcbiAgICAgIHJldHVybiBwYWROdW1iZXIocmVzdWx0LCBzaXplKTtcclxuICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gYW1wbUdldHRlcihkYXRlLCBmb3JtYXRzKSB7XHJcbiAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKSA8IDEyID8gZm9ybWF0cy5BTVBNU1swXSA6IGZvcm1hdHMuQU1QTVNbMV07XHJcbn1cclxuXHJcbnZhciBEQVRFX0ZPUk1BVFMgPSB7XHJcbiAgeXl5eTogZGF0ZUdldHRlcignRnVsbFllYXInLCA0KSxcclxuICAgIHl5OiBkYXRlR2V0dGVyKCdGdWxsWWVhcicsIDIsIDAsIHRydWUpLFxyXG4gICAgIHk6IGRhdGVHZXR0ZXIoJ0Z1bGxZZWFyJywgMSksXHJcbiAgTU1NTTogZGF0ZVN0ckdldHRlcignTW9udGgnKSxcclxuICAgTU1NOiBkYXRlU3RyR2V0dGVyKCdNb250aCcsIHRydWUpLFxyXG4gICAgTU06IGRhdGVHZXR0ZXIoJ01vbnRoJywgMiwgMSksXHJcbiAgICAgTTogZGF0ZUdldHRlcignTW9udGgnLCAxLCAxKSxcclxuICAgIGRkOiBkYXRlR2V0dGVyKCdEYXRlJywgMiksXHJcbiAgICAgZDogZGF0ZUdldHRlcignRGF0ZScsIDEpLFxyXG4gICAgSEg6IGRhdGVHZXR0ZXIoJ0hvdXJzJywgMiksXHJcbiAgICAgSDogZGF0ZUdldHRlcignSG91cnMnLCAxKSxcclxuICAgIGhoOiBkYXRlR2V0dGVyKCdIb3VycycsIDIsIC0xMiksXHJcbiAgICAgaDogZGF0ZUdldHRlcignSG91cnMnLCAxLCAtMTIpLFxyXG4gICAgbW06IGRhdGVHZXR0ZXIoJ01pbnV0ZXMnLCAyKSxcclxuICAgICBtOiBkYXRlR2V0dGVyKCdNaW51dGVzJywgMSksXHJcbiAgICBzczogZGF0ZUdldHRlcignU2Vjb25kcycsIDIpLFxyXG4gICAgIHM6IGRhdGVHZXR0ZXIoJ1NlY29uZHMnLCAxKSxcclxuICAgICAvLyB3aGlsZSBJU08gODYwMSByZXF1aXJlcyBmcmFjdGlvbnMgdG8gYmUgcHJlZml4ZWQgd2l0aCBgLmAgb3IgYCxgXHJcbiAgICAgLy8gd2UgY2FuIGJlIGp1c3Qgc2FmZWx5IHJlbHkgb24gdXNpbmcgYHNzc2Agc2luY2Ugd2UgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgc2luZ2xlIG9yIHR3byBkaWdpdCBmcmFjdGlvbnNcclxuICAgc3NzOiBkYXRlR2V0dGVyKCdNaWxsaXNlY29uZHMnLCAzKSxcclxuICBFRUVFOiBkYXRlU3RyR2V0dGVyKCdEYXknKSxcclxuICAgRUVFOiBkYXRlU3RyR2V0dGVyKCdEYXknLCB0cnVlKSxcclxuICAgICBhOiBhbXBtR2V0dGVyLFxyXG4gICAgIFo6IHRpbWVab25lR2V0dGVyLFxyXG4gICAgd3c6IHdlZWtHZXR0ZXIoMiksXHJcbiAgICAgdzogd2Vla0dldHRlcigxKVxyXG59O1xyXG5cclxudmFyIERBVEVfRk9STUFUU19TUExJVCA9IC8oKD86W155TWRIaG1zYVpFdyddKyl8KD86Jyg/OlteJ118JycpKicpfCg/OkUrfHkrfE0rfGQrfEgrfGgrfG0rfHMrfGF8Wnx3KykpKC4qKS8sXHJcbiAgICBOVU1CRVJfU1RSSU5HID0gL15cXC0/XFxkKyQvO1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBmaWx0ZXJcclxuICogQG5hbWUgZGF0ZVxyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogICBGb3JtYXRzIGBkYXRlYCB0byBhIHN0cmluZyBiYXNlZCBvbiB0aGUgcmVxdWVzdGVkIGBmb3JtYXRgLlxyXG4gKlxyXG4gKiAgIGBmb3JtYXRgIHN0cmluZyBjYW4gYmUgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZyBlbGVtZW50czpcclxuICpcclxuICogICAqIGAneXl5eSdgOiA0IGRpZ2l0IHJlcHJlc2VudGF0aW9uIG9mIHllYXIgKGUuZy4gQUQgMSA9PiAwMDAxLCBBRCAyMDEwID0+IDIwMTApXHJcbiAqICAgKiBgJ3l5J2A6IDIgZGlnaXQgcmVwcmVzZW50YXRpb24gb2YgeWVhciwgcGFkZGVkICgwMC05OSkuIChlLmcuIEFEIDIwMDEgPT4gMDEsIEFEIDIwMTAgPT4gMTApXHJcbiAqICAgKiBgJ3knYDogMSBkaWdpdCByZXByZXNlbnRhdGlvbiBvZiB5ZWFyLCBlLmcuIChBRCAxID0+IDEsIEFEIDE5OSA9PiAxOTkpXHJcbiAqICAgKiBgJ01NTU0nYDogTW9udGggaW4geWVhciAoSmFudWFyeS1EZWNlbWJlcilcclxuICogICAqIGAnTU1NJ2A6IE1vbnRoIGluIHllYXIgKEphbi1EZWMpXHJcbiAqICAgKiBgJ01NJ2A6IE1vbnRoIGluIHllYXIsIHBhZGRlZCAoMDEtMTIpXHJcbiAqICAgKiBgJ00nYDogTW9udGggaW4geWVhciAoMS0xMilcclxuICogICAqIGAnZGQnYDogRGF5IGluIG1vbnRoLCBwYWRkZWQgKDAxLTMxKVxyXG4gKiAgICogYCdkJ2A6IERheSBpbiBtb250aCAoMS0zMSlcclxuICogICAqIGAnRUVFRSdgOiBEYXkgaW4gV2VlaywoU3VuZGF5LVNhdHVyZGF5KVxyXG4gKiAgICogYCdFRUUnYDogRGF5IGluIFdlZWssIChTdW4tU2F0KVxyXG4gKiAgICogYCdISCdgOiBIb3VyIGluIGRheSwgcGFkZGVkICgwMC0yMylcclxuICogICAqIGAnSCdgOiBIb3VyIGluIGRheSAoMC0yMylcclxuICogICAqIGAnaGgnYDogSG91ciBpbiBBTS9QTSwgcGFkZGVkICgwMS0xMilcclxuICogICAqIGAnaCdgOiBIb3VyIGluIEFNL1BNLCAoMS0xMilcclxuICogICAqIGAnbW0nYDogTWludXRlIGluIGhvdXIsIHBhZGRlZCAoMDAtNTkpXHJcbiAqICAgKiBgJ20nYDogTWludXRlIGluIGhvdXIgKDAtNTkpXHJcbiAqICAgKiBgJ3NzJ2A6IFNlY29uZCBpbiBtaW51dGUsIHBhZGRlZCAoMDAtNTkpXHJcbiAqICAgKiBgJ3MnYDogU2Vjb25kIGluIG1pbnV0ZSAoMC01OSlcclxuICogICAqIGAnLnNzcycgb3IgJyxzc3MnYDogTWlsbGlzZWNvbmQgaW4gc2Vjb25kLCBwYWRkZWQgKDAwMC05OTkpXHJcbiAqICAgKiBgJ2EnYDogQU0vUE0gbWFya2VyXHJcbiAqICAgKiBgJ1onYDogNCBkaWdpdCAoK3NpZ24pIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aW1lem9uZSBvZmZzZXQgKC0xMjAwLSsxMjAwKVxyXG4gKiAgICogYCd3dydgOiBJU08tODYwMSB3ZWVrIG9mIHllYXIgKDAwLTUzKVxyXG4gKiAgICogYCd3J2A6IElTTy04NjAxIHdlZWsgb2YgeWVhciAoMC01MylcclxuICpcclxuICogICBgZm9ybWF0YCBzdHJpbmcgY2FuIGFsc28gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgcHJlZGVmaW5lZFxyXG4gKiAgIHtAbGluayBndWlkZS9pMThuIGxvY2FsaXphYmxlIGZvcm1hdHN9OlxyXG4gKlxyXG4gKiAgICogYCdtZWRpdW0nYDogZXF1aXZhbGVudCB0byBgJ01NTSBkLCB5IGg6bW06c3MgYSdgIGZvciBlbl9VUyBsb2NhbGVcclxuICogICAgIChlLmcuIFNlcCAzLCAyMDEwIDEyOjA1OjA4IFBNKVxyXG4gKiAgICogYCdzaG9ydCdgOiBlcXVpdmFsZW50IHRvIGAnTS9kL3l5IGg6bW0gYSdgIGZvciBlbl9VUyAgbG9jYWxlIChlLmcuIDkvMy8xMCAxMjowNSBQTSlcclxuICogICAqIGAnZnVsbERhdGUnYDogZXF1aXZhbGVudCB0byBgJ0VFRUUsIE1NTU0gZCwgeSdgIGZvciBlbl9VUyAgbG9jYWxlXHJcbiAqICAgICAoZS5nLiBGcmlkYXksIFNlcHRlbWJlciAzLCAyMDEwKVxyXG4gKiAgICogYCdsb25nRGF0ZSdgOiBlcXVpdmFsZW50IHRvIGAnTU1NTSBkLCB5J2AgZm9yIGVuX1VTICBsb2NhbGUgKGUuZy4gU2VwdGVtYmVyIDMsIDIwMTApXHJcbiAqICAgKiBgJ21lZGl1bURhdGUnYDogZXF1aXZhbGVudCB0byBgJ01NTSBkLCB5J2AgZm9yIGVuX1VTICBsb2NhbGUgKGUuZy4gU2VwIDMsIDIwMTApXHJcbiAqICAgKiBgJ3Nob3J0RGF0ZSdgOiBlcXVpdmFsZW50IHRvIGAnTS9kL3l5J2AgZm9yIGVuX1VTIGxvY2FsZSAoZS5nLiA5LzMvMTApXHJcbiAqICAgKiBgJ21lZGl1bVRpbWUnYDogZXF1aXZhbGVudCB0byBgJ2g6bW06c3MgYSdgIGZvciBlbl9VUyBsb2NhbGUgKGUuZy4gMTI6MDU6MDggUE0pXHJcbiAqICAgKiBgJ3Nob3J0VGltZSdgOiBlcXVpdmFsZW50IHRvIGAnaDptbSBhJ2AgZm9yIGVuX1VTIGxvY2FsZSAoZS5nLiAxMjowNSBQTSlcclxuICpcclxuICogICBgZm9ybWF0YCBzdHJpbmcgY2FuIGNvbnRhaW4gbGl0ZXJhbCB2YWx1ZXMuIFRoZXNlIG5lZWQgdG8gYmUgZXNjYXBlZCBieSBzdXJyb3VuZGluZyB3aXRoIHNpbmdsZSBxdW90ZXMgKGUuZy5cclxuICogICBgXCJoICdpbiB0aGUgbW9ybmluZydcImApLiBJbiBvcmRlciB0byBvdXRwdXQgYSBzaW5nbGUgcXVvdGUsIGVzY2FwZSBpdCAtIGkuZS4sIHR3byBzaW5nbGUgcXVvdGVzIGluIGEgc2VxdWVuY2VcclxuICogICAoZS5nLiBgXCJoICdvJydjbG9jaydcImApLlxyXG4gKlxyXG4gKiBAcGFyYW0geyhEYXRlfG51bWJlcnxzdHJpbmcpfSBkYXRlIERhdGUgdG8gZm9ybWF0IGVpdGhlciBhcyBEYXRlIG9iamVjdCwgbWlsbGlzZWNvbmRzIChzdHJpbmcgb3JcclxuICogICAgbnVtYmVyKSBvciB2YXJpb3VzIElTTyA4NjAxIGRhdGV0aW1lIHN0cmluZyBmb3JtYXRzIChlLmcuIHl5eXktTU0tZGRUSEg6bW06c3Muc3NzWiBhbmQgaXRzXHJcbiAqICAgIHNob3J0ZXIgdmVyc2lvbnMgbGlrZSB5eXl5LU1NLWRkVEhIOm1tWiwgeXl5eS1NTS1kZCBvciB5eXl5TU1kZFRISG1tc3NaKS4gSWYgbm8gdGltZXpvbmUgaXNcclxuICogICAgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcgaW5wdXQsIHRoZSB0aW1lIGlzIGNvbnNpZGVyZWQgdG8gYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxyXG4gKiBAcGFyYW0ge3N0cmluZz19IGZvcm1hdCBGb3JtYXR0aW5nIHJ1bGVzIChzZWUgRGVzY3JpcHRpb24pLiBJZiBub3Qgc3BlY2lmaWVkLFxyXG4gKiAgICBgbWVkaXVtRGF0ZWAgaXMgdXNlZC5cclxuICogQHBhcmFtIHtzdHJpbmc9fSB0aW1lem9uZSBUaW1lem9uZSB0byBiZSB1c2VkIGZvciBmb3JtYXR0aW5nLiBSaWdodCBub3csIG9ubHkgYCdVVEMnYCBpcyBzdXBwb3J0ZWQuXHJcbiAqICAgIElmIG5vdCBzcGVjaWZpZWQsIHRoZSB0aW1lem9uZSBvZiB0aGUgYnJvd3NlciB3aWxsIGJlIHVzZWQuXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEZvcm1hdHRlZCBzdHJpbmcgb3IgdGhlIGlucHV0IGlmIGlucHV0IGlzIG5vdCByZWNvZ25pemVkIGFzIGRhdGUvbWlsbGlzLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICA8ZXhhbXBsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgPHNwYW4gbmctbm9uLWJpbmRhYmxlPnt7MTI4ODMyMzYyMzAwNiB8IGRhdGU6J21lZGl1bSd9fTwvc3Bhbj46XHJcbiAgICAgICAgICAgPHNwYW4+e3sxMjg4MzIzNjIzMDA2IHwgZGF0ZTonbWVkaXVtJ319PC9zcGFuPjxicj5cclxuICAgICAgIDxzcGFuIG5nLW5vbi1iaW5kYWJsZT57ezEyODgzMjM2MjMwMDYgfCBkYXRlOid5eXl5LU1NLWRkIEhIOm1tOnNzIFonfX08L3NwYW4+OlxyXG4gICAgICAgICAgPHNwYW4+e3sxMjg4MzIzNjIzMDA2IHwgZGF0ZToneXl5eS1NTS1kZCBISDptbTpzcyBaJ319PC9zcGFuPjxicj5cclxuICAgICAgIDxzcGFuIG5nLW5vbi1iaW5kYWJsZT57ezEyODgzMjM2MjMwMDYgfCBkYXRlOidNTS9kZC95eXl5IEAgaDptbWEnfX08L3NwYW4+OlxyXG4gICAgICAgICAgPHNwYW4+e3snMTI4ODMyMzYyMzAwNicgfCBkYXRlOidNTS9kZC95eXl5IEAgaDptbWEnfX08L3NwYW4+PGJyPlxyXG4gICAgICAgPHNwYW4gbmctbm9uLWJpbmRhYmxlPnt7MTI4ODMyMzYyMzAwNiB8IGRhdGU6XCJNTS9kZC95eXl5ICdhdCcgaDptbWFcIn19PC9zcGFuPjpcclxuICAgICAgICAgIDxzcGFuPnt7JzEyODgzMjM2MjMwMDYnIHwgZGF0ZTpcIk1NL2RkL3l5eXkgJ2F0JyBoOm1tYVwifX08L3NwYW4+PGJyPlxyXG4gICAgIDwvZmlsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBkYXRlJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoXCIxMjg4MzIzNjIzMDA2IHwgZGF0ZTonbWVkaXVtJ1wiKSkuZ2V0VGV4dCgpKS5cclxuICAgICAgICAgICAgdG9NYXRjaCgvT2N0IDJcXGQsIDIwMTAgXFxkezEsMn06XFxkezJ9OlxcZHsyfSAoQU18UE0pLyk7XHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoXCIxMjg4MzIzNjIzMDA2IHwgZGF0ZToneXl5eS1NTS1kZCBISDptbTpzcyBaJ1wiKSkuZ2V0VGV4dCgpKS5cclxuICAgICAgICAgICAgdG9NYXRjaCgvMjAxMFxcLTEwXFwtMlxcZCBcXGR7Mn06XFxkezJ9OlxcZHsyfSAoXFwtfFxcKyk/XFxkezR9Lyk7XHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoXCInMTI4ODMyMzYyMzAwNicgfCBkYXRlOidNTS9kZC95eXl5IEAgaDptbWEnXCIpKS5nZXRUZXh0KCkpLlxyXG4gICAgICAgICAgICB0b01hdGNoKC8xMFxcLzJcXGRcXC8yMDEwIEAgXFxkezEsMn06XFxkezJ9KEFNfFBNKS8pO1xyXG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKFwiJzEyODgzMjM2MjMwMDYnIHwgZGF0ZTpcXFwiTU0vZGQveXl5eSAnYXQnIGg6bW1hXFxcIlwiKSkuZ2V0VGV4dCgpKS5cclxuICAgICAgICAgICAgdG9NYXRjaCgvMTBcXC8yXFxkXFwvMjAxMCBhdCBcXGR7MSwyfTpcXGR7Mn0oQU18UE0pLyk7XHJcbiAgICAgICB9KTtcclxuICAgICA8L2ZpbGU+XHJcbiAgIDwvZXhhbXBsZT5cclxuICovXHJcbmRhdGVGaWx0ZXIuJGluamVjdCA9IFsnJGxvY2FsZSddO1xyXG5mdW5jdGlvbiBkYXRlRmlsdGVyKCRsb2NhbGUpIHtcclxuXHJcblxyXG4gIHZhciBSX0lTTzg2MDFfU1RSID0gL14oXFxkezR9KS0/KFxcZFxcZCktPyhcXGRcXGQpKD86VChcXGRcXGQpKD86Oj8oXFxkXFxkKSg/Ojo/KFxcZFxcZCkoPzpcXC4oXFxkKykpPyk/KT8oWnwoWystXSkoXFxkXFxkKTo/KFxcZFxcZCkpPyk/JC87XHJcbiAgICAgICAgICAgICAgICAgICAgIC8vIDEgICAgICAgIDIgICAgICAgMyAgICAgICAgIDQgICAgICAgICAgNSAgICAgICAgICA2ICAgICAgICAgIDcgICAgICAgICAgOCAgOSAgICAgMTAgICAgICAxMVxyXG4gIGZ1bmN0aW9uIGpzb25TdHJpbmdUb0RhdGUoc3RyaW5nKSB7XHJcbiAgICB2YXIgbWF0Y2g7XHJcbiAgICBpZiAobWF0Y2ggPSBzdHJpbmcubWF0Y2goUl9JU084NjAxX1NUUikpIHtcclxuICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgwKSxcclxuICAgICAgICAgIHR6SG91ciA9IDAsXHJcbiAgICAgICAgICB0ek1pbiAgPSAwLFxyXG4gICAgICAgICAgZGF0ZVNldHRlciA9IG1hdGNoWzhdID8gZGF0ZS5zZXRVVENGdWxsWWVhciA6IGRhdGUuc2V0RnVsbFllYXIsXHJcbiAgICAgICAgICB0aW1lU2V0dGVyID0gbWF0Y2hbOF0gPyBkYXRlLnNldFVUQ0hvdXJzIDogZGF0ZS5zZXRIb3VycztcclxuXHJcbiAgICAgIGlmIChtYXRjaFs5XSkge1xyXG4gICAgICAgIHR6SG91ciA9IGludChtYXRjaFs5XSArIG1hdGNoWzEwXSk7XHJcbiAgICAgICAgdHpNaW4gPSBpbnQobWF0Y2hbOV0gKyBtYXRjaFsxMV0pO1xyXG4gICAgICB9XHJcbiAgICAgIGRhdGVTZXR0ZXIuY2FsbChkYXRlLCBpbnQobWF0Y2hbMV0pLCBpbnQobWF0Y2hbMl0pIC0gMSwgaW50KG1hdGNoWzNdKSk7XHJcbiAgICAgIHZhciBoID0gaW50KG1hdGNoWzRdIHx8IDApIC0gdHpIb3VyO1xyXG4gICAgICB2YXIgbSA9IGludChtYXRjaFs1XSB8fCAwKSAtIHR6TWluO1xyXG4gICAgICB2YXIgcyA9IGludChtYXRjaFs2XSB8fCAwKTtcclxuICAgICAgdmFyIG1zID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KCcwLicgKyAobWF0Y2hbN10gfHwgMCkpICogMTAwMCk7XHJcbiAgICAgIHRpbWVTZXR0ZXIuY2FsbChkYXRlLCBoLCBtLCBzLCBtcyk7XHJcbiAgICAgIHJldHVybiBkYXRlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cmluZztcclxuICB9XHJcblxyXG5cclxuICByZXR1cm4gZnVuY3Rpb24oZGF0ZSwgZm9ybWF0LCB0aW1lem9uZSkge1xyXG4gICAgdmFyIHRleHQgPSAnJyxcclxuICAgICAgICBwYXJ0cyA9IFtdLFxyXG4gICAgICAgIGZuLCBtYXRjaDtcclxuXHJcbiAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJ21lZGl1bURhdGUnO1xyXG4gICAgZm9ybWF0ID0gJGxvY2FsZS5EQVRFVElNRV9GT1JNQVRTW2Zvcm1hdF0gfHwgZm9ybWF0O1xyXG4gICAgaWYgKGlzU3RyaW5nKGRhdGUpKSB7XHJcbiAgICAgIGRhdGUgPSBOVU1CRVJfU1RSSU5HLnRlc3QoZGF0ZSkgPyBpbnQoZGF0ZSkgOiBqc29uU3RyaW5nVG9EYXRlKGRhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc051bWJlcihkYXRlKSkge1xyXG4gICAgICBkYXRlID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc0RhdGUoZGF0ZSkpIHtcclxuICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgd2hpbGUgKGZvcm1hdCkge1xyXG4gICAgICBtYXRjaCA9IERBVEVfRk9STUFUU19TUExJVC5leGVjKGZvcm1hdCk7XHJcbiAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgIHBhcnRzID0gY29uY2F0KHBhcnRzLCBtYXRjaCwgMSk7XHJcbiAgICAgICAgZm9ybWF0ID0gcGFydHMucG9wKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGFydHMucHVzaChmb3JtYXQpO1xyXG4gICAgICAgIGZvcm1hdCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGltZXpvbmUgJiYgdGltZXpvbmUgPT09ICdVVEMnKSB7XHJcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XHJcbiAgICAgIGRhdGUuc2V0TWludXRlcyhkYXRlLmdldE1pbnV0ZXMoKSArIGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XHJcbiAgICB9XHJcbiAgICBmb3JFYWNoKHBhcnRzLCBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICBmbiA9IERBVEVfRk9STUFUU1t2YWx1ZV07XHJcbiAgICAgIHRleHQgKz0gZm4gPyBmbihkYXRlLCAkbG9jYWxlLkRBVEVUSU1FX0ZPUk1BVFMpXHJcbiAgICAgICAgICAgICAgICAgOiB2YWx1ZS5yZXBsYWNlKC8oXid8JyQpL2csICcnKS5yZXBsYWNlKC8nJy9nLCBcIidcIik7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGV4dDtcclxuICB9O1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBmaWx0ZXJcclxuICogQG5hbWUganNvblxyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogICBBbGxvd3MgeW91IHRvIGNvbnZlcnQgYSBKYXZhU2NyaXB0IG9iamVjdCBpbnRvIEpTT04gc3RyaW5nLlxyXG4gKlxyXG4gKiAgIFRoaXMgZmlsdGVyIGlzIG1vc3RseSB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gV2hlbiB1c2luZyB0aGUgZG91YmxlIGN1cmx5IHt7dmFsdWV9fSBub3RhdGlvblxyXG4gKiAgIHRoZSBiaW5kaW5nIGlzIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIEpTT04uXHJcbiAqXHJcbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IEFueSBKYXZhU2NyaXB0IG9iamVjdCAoaW5jbHVkaW5nIGFycmF5cyBhbmQgcHJpbWl0aXZlIHR5cGVzKSB0byBmaWx0ZXIuXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEpTT04gc3RyaW5nLlxyXG4gKlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICA8ZXhhbXBsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgPHByZT57eyB7J25hbWUnOid2YWx1ZSd9IHwganNvbiB9fTwvcHJlPlxyXG4gICAgIDwvZmlsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgICBpdCgnc2hvdWxkIGpzb25pZnkgZmlsdGVyZWQgb2JqZWN0cycsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKFwieyduYW1lJzondmFsdWUnfVwiKSkuZ2V0VGV4dCgpKS50b01hdGNoKC9cXHtcXG4gIFwibmFtZVwiOiA/XCJ2YWx1ZVwiXFxufS8pO1xyXG4gICAgICAgfSk7XHJcbiAgICAgPC9maWxlPlxyXG4gICA8L2V4YW1wbGU+XHJcbiAqXHJcbiAqL1xyXG5mdW5jdGlvbiBqc29uRmlsdGVyKCkge1xyXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcclxuICAgIHJldHVybiB0b0pzb24ob2JqZWN0LCB0cnVlKTtcclxuICB9O1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBmaWx0ZXJcclxuICogQG5hbWUgbG93ZXJjYXNlXHJcbiAqIEBraW5kIGZ1bmN0aW9uXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBDb252ZXJ0cyBzdHJpbmcgdG8gbG93ZXJjYXNlLlxyXG4gKiBAc2VlIGFuZ3VsYXIubG93ZXJjYXNlXHJcbiAqL1xyXG52YXIgbG93ZXJjYXNlRmlsdGVyID0gdmFsdWVGbihsb3dlcmNhc2UpO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZmlsdGVyXHJcbiAqIEBuYW1lIHVwcGVyY2FzZVxyXG4gKiBAa2luZCBmdW5jdGlvblxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQ29udmVydHMgc3RyaW5nIHRvIHVwcGVyY2FzZS5cclxuICogQHNlZSBhbmd1bGFyLnVwcGVyY2FzZVxyXG4gKi9cclxudmFyIHVwcGVyY2FzZUZpbHRlciA9IHZhbHVlRm4odXBwZXJjYXNlKTtcclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZmlsdGVyXHJcbiAqIEBuYW1lIGxpbWl0VG9cclxuICogQGtpbmQgZnVuY3Rpb25cclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIENyZWF0ZXMgYSBuZXcgYXJyYXkgb3Igc3RyaW5nIGNvbnRhaW5pbmcgb25seSBhIHNwZWNpZmllZCBudW1iZXIgb2YgZWxlbWVudHMuIFRoZSBlbGVtZW50c1xyXG4gKiBhcmUgdGFrZW4gZnJvbSBlaXRoZXIgdGhlIGJlZ2lubmluZyBvciB0aGUgZW5kIG9mIHRoZSBzb3VyY2UgYXJyYXksIHN0cmluZyBvciBudW1iZXIsIGFzIHNwZWNpZmllZCBieVxyXG4gKiB0aGUgdmFsdWUgYW5kIHNpZ24gKHBvc2l0aXZlIG9yIG5lZ2F0aXZlKSBvZiBgbGltaXRgLiBJZiBhIG51bWJlciBpcyB1c2VkIGFzIGlucHV0LCBpdCBpc1xyXG4gKiBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfG51bWJlcn0gaW5wdXQgU291cmNlIGFycmF5LCBzdHJpbmcgb3IgbnVtYmVyIHRvIGJlIGxpbWl0ZWQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbGltaXQgVGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgYXJyYXkgb3Igc3RyaW5nLiBJZiB0aGUgYGxpbWl0YCBudW1iZXJcclxuICogICAgIGlzIHBvc2l0aXZlLCBgbGltaXRgIG51bWJlciBvZiBpdGVtcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNvdXJjZSBhcnJheS9zdHJpbmcgYXJlIGNvcGllZC5cclxuICogICAgIElmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUsIGBsaW1pdGAgbnVtYmVyICBvZiBpdGVtcyBmcm9tIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBhcnJheS9zdHJpbmdcclxuICogICAgIGFyZSBjb3BpZWQuIFRoZSBgbGltaXRgIHdpbGwgYmUgdHJpbW1lZCBpZiBpdCBleGNlZWRzIGBhcnJheS5sZW5ndGhgXHJcbiAqIEByZXR1cm5zIHtBcnJheXxzdHJpbmd9IEEgbmV3IHN1Yi1hcnJheSBvciBzdWJzdHJpbmcgb2YgbGVuZ3RoIGBsaW1pdGAgb3IgbGVzcyBpZiBpbnB1dCBhcnJheVxyXG4gKiAgICAgaGFkIGxlc3MgdGhhbiBgbGltaXRgIGVsZW1lbnRzLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICA8ZXhhbXBsZSBtb2R1bGU9XCJsaW1pdFRvRXhhbXBsZVwiPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgICA8c2NyaXB0PlxyXG4gICAgICAgICBhbmd1bGFyLm1vZHVsZSgnbGltaXRUb0V4YW1wbGUnLCBbXSlcclxuICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xyXG4gICAgICAgICAgICAgJHNjb3BlLm51bWJlcnMgPSBbMSwyLDMsNCw1LDYsNyw4LDldO1xyXG4gICAgICAgICAgICAgJHNjb3BlLmxldHRlcnMgPSBcImFiY2RlZmdoaVwiO1xyXG4gICAgICAgICAgICAgJHNjb3BlLmxvbmdOdW1iZXIgPSAyMzQ1NDMyMzQyO1xyXG4gICAgICAgICAgICAgJHNjb3BlLm51bUxpbWl0ID0gMztcclxuICAgICAgICAgICAgICRzY29wZS5sZXR0ZXJMaW1pdCA9IDM7XHJcbiAgICAgICAgICAgICAkc2NvcGUubG9uZ051bWJlckxpbWl0ID0gMztcclxuICAgICAgICAgICB9XSk7XHJcbiAgICAgICA8L3NjcmlwdD5cclxuICAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XHJcbiAgICAgICAgIExpbWl0IHt7bnVtYmVyc319IHRvOiA8aW5wdXQgdHlwZT1cIm51bWJlclwiIHN0ZXA9XCIxXCIgbmctbW9kZWw9XCJudW1MaW1pdFwiPlxyXG4gICAgICAgICA8cD5PdXRwdXQgbnVtYmVyczoge3sgbnVtYmVycyB8IGxpbWl0VG86bnVtTGltaXQgfX08L3A+XHJcbiAgICAgICAgIExpbWl0IHt7bGV0dGVyc319IHRvOiA8aW5wdXQgdHlwZT1cIm51bWJlclwiIHN0ZXA9XCIxXCIgbmctbW9kZWw9XCJsZXR0ZXJMaW1pdFwiPlxyXG4gICAgICAgICA8cD5PdXRwdXQgbGV0dGVyczoge3sgbGV0dGVycyB8IGxpbWl0VG86bGV0dGVyTGltaXQgfX08L3A+XHJcbiAgICAgICAgIExpbWl0IHt7bG9uZ051bWJlcn19IHRvOiA8aW5wdXQgdHlwZT1cIm51bWJlclwiIHN0ZXA9XCIxXCIgbmctbW9kZWw9XCJsb25nTnVtYmVyTGltaXRcIj5cclxuICAgICAgICAgPHA+T3V0cHV0IGxvbmcgbnVtYmVyOiB7eyBsb25nTnVtYmVyIHwgbGltaXRUbzpsb25nTnVtYmVyTGltaXQgfX08L3A+XHJcbiAgICAgICA8L2Rpdj5cclxuICAgICA8L2ZpbGU+XHJcbiAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICAgdmFyIG51bUxpbWl0SW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCdudW1MaW1pdCcpKTtcclxuICAgICAgIHZhciBsZXR0ZXJMaW1pdElucHV0ID0gZWxlbWVudChieS5tb2RlbCgnbGV0dGVyTGltaXQnKSk7XHJcbiAgICAgICB2YXIgbG9uZ051bWJlckxpbWl0SW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCdsb25nTnVtYmVyTGltaXQnKSk7XHJcbiAgICAgICB2YXIgbGltaXRlZE51bWJlcnMgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ251bWJlcnMgfCBsaW1pdFRvOm51bUxpbWl0JykpO1xyXG4gICAgICAgdmFyIGxpbWl0ZWRMZXR0ZXJzID0gZWxlbWVudChieS5iaW5kaW5nKCdsZXR0ZXJzIHwgbGltaXRUbzpsZXR0ZXJMaW1pdCcpKTtcclxuICAgICAgIHZhciBsaW1pdGVkTG9uZ051bWJlciA9IGVsZW1lbnQoYnkuYmluZGluZygnbG9uZ051bWJlciB8IGxpbWl0VG86bG9uZ051bWJlckxpbWl0JykpO1xyXG5cclxuICAgICAgIGl0KCdzaG91bGQgbGltaXQgdGhlIG51bWJlciBhcnJheSB0byBmaXJzdCB0aHJlZSBpdGVtcycsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICBleHBlY3QobnVtTGltaXRJbnB1dC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRvQmUoJzMnKTtcclxuICAgICAgICAgZXhwZWN0KGxldHRlckxpbWl0SW5wdXQuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKS50b0JlKCczJyk7XHJcbiAgICAgICAgIGV4cGVjdChsb25nTnVtYmVyTGltaXRJbnB1dC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRvQmUoJzMnKTtcclxuICAgICAgICAgZXhwZWN0KGxpbWl0ZWROdW1iZXJzLmdldFRleHQoKSkudG9FcXVhbCgnT3V0cHV0IG51bWJlcnM6IFsxLDIsM10nKTtcclxuICAgICAgICAgZXhwZWN0KGxpbWl0ZWRMZXR0ZXJzLmdldFRleHQoKSkudG9FcXVhbCgnT3V0cHV0IGxldHRlcnM6IGFiYycpO1xyXG4gICAgICAgICBleHBlY3QobGltaXRlZExvbmdOdW1iZXIuZ2V0VGV4dCgpKS50b0VxdWFsKCdPdXRwdXQgbG9uZyBudW1iZXI6IDIzNCcpO1xyXG4gICAgICAgfSk7XHJcblxyXG4gICAgICAgLy8gVGhlcmUgaXMgYSBidWcgaW4gc2FmYXJpIGFuZCBwcm90cmFjdG9yIHRoYXQgZG9lc24ndCBsaWtlIHRoZSBtaW51cyBrZXlcclxuICAgICAgIC8vIGl0KCdzaG91bGQgdXBkYXRlIHRoZSBvdXRwdXQgd2hlbiAtMyBpcyBlbnRlcmVkJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAvLyAgIG51bUxpbWl0SW5wdXQuY2xlYXIoKTtcclxuICAgICAgIC8vICAgbnVtTGltaXRJbnB1dC5zZW5kS2V5cygnLTMnKTtcclxuICAgICAgIC8vICAgbGV0dGVyTGltaXRJbnB1dC5jbGVhcigpO1xyXG4gICAgICAgLy8gICBsZXR0ZXJMaW1pdElucHV0LnNlbmRLZXlzKCctMycpO1xyXG4gICAgICAgLy8gICBsb25nTnVtYmVyTGltaXRJbnB1dC5jbGVhcigpO1xyXG4gICAgICAgLy8gICBsb25nTnVtYmVyTGltaXRJbnB1dC5zZW5kS2V5cygnLTMnKTtcclxuICAgICAgIC8vICAgZXhwZWN0KGxpbWl0ZWROdW1iZXJzLmdldFRleHQoKSkudG9FcXVhbCgnT3V0cHV0IG51bWJlcnM6IFs3LDgsOV0nKTtcclxuICAgICAgIC8vICAgZXhwZWN0KGxpbWl0ZWRMZXR0ZXJzLmdldFRleHQoKSkudG9FcXVhbCgnT3V0cHV0IGxldHRlcnM6IGdoaScpO1xyXG4gICAgICAgLy8gICBleHBlY3QobGltaXRlZExvbmdOdW1iZXIuZ2V0VGV4dCgpKS50b0VxdWFsKCdPdXRwdXQgbG9uZyBudW1iZXI6IDM0MicpO1xyXG4gICAgICAgLy8gfSk7XHJcblxyXG4gICAgICAgaXQoJ3Nob3VsZCBub3QgZXhjZWVkIHRoZSBtYXhpbXVtIHNpemUgb2YgaW5wdXQgYXJyYXknLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgbnVtTGltaXRJbnB1dC5jbGVhcigpO1xyXG4gICAgICAgICBudW1MaW1pdElucHV0LnNlbmRLZXlzKCcxMDAnKTtcclxuICAgICAgICAgbGV0dGVyTGltaXRJbnB1dC5jbGVhcigpO1xyXG4gICAgICAgICBsZXR0ZXJMaW1pdElucHV0LnNlbmRLZXlzKCcxMDAnKTtcclxuICAgICAgICAgbG9uZ051bWJlckxpbWl0SW5wdXQuY2xlYXIoKTtcclxuICAgICAgICAgbG9uZ051bWJlckxpbWl0SW5wdXQuc2VuZEtleXMoJzEwMCcpO1xyXG4gICAgICAgICBleHBlY3QobGltaXRlZE51bWJlcnMuZ2V0VGV4dCgpKS50b0VxdWFsKCdPdXRwdXQgbnVtYmVyczogWzEsMiwzLDQsNSw2LDcsOCw5XScpO1xyXG4gICAgICAgICBleHBlY3QobGltaXRlZExldHRlcnMuZ2V0VGV4dCgpKS50b0VxdWFsKCdPdXRwdXQgbGV0dGVyczogYWJjZGVmZ2hpJyk7XHJcbiAgICAgICAgIGV4cGVjdChsaW1pdGVkTG9uZ051bWJlci5nZXRUZXh0KCkpLnRvRXF1YWwoJ091dHB1dCBsb25nIG51bWJlcjogMjM0NTQzMjM0MicpO1xyXG4gICAgICAgfSk7XHJcbiAgICAgPC9maWxlPlxyXG4gICA8L2V4YW1wbGU+XHJcbiovXHJcbmZ1bmN0aW9uIGxpbWl0VG9GaWx0ZXIoKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uKGlucHV0LCBsaW1pdCkge1xyXG4gICAgaWYgKGlzTnVtYmVyKGlucHV0KSkgaW5wdXQgPSBpbnB1dC50b1N0cmluZygpO1xyXG4gICAgaWYgKCFpc0FycmF5KGlucHV0KSAmJiAhaXNTdHJpbmcoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XHJcblxyXG4gICAgaWYgKE1hdGguYWJzKE51bWJlcihsaW1pdCkpID09PSBJbmZpbml0eSkge1xyXG4gICAgICBsaW1pdCA9IE51bWJlcihsaW1pdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsaW1pdCA9IGludChsaW1pdCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzU3RyaW5nKGlucHV0KSkge1xyXG4gICAgICAvL05hTiBjaGVjayBvbiBsaW1pdFxyXG4gICAgICBpZiAobGltaXQpIHtcclxuICAgICAgICByZXR1cm4gbGltaXQgPj0gMCA/IGlucHV0LnNsaWNlKDAsIGxpbWl0KSA6IGlucHV0LnNsaWNlKGxpbWl0LCBpbnB1dC5sZW5ndGgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIG91dCA9IFtdLFxyXG4gICAgICBpLCBuO1xyXG5cclxuICAgIC8vIGlmIGFicyhsaW1pdCkgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCwgdHJpbSBpdFxyXG4gICAgaWYgKGxpbWl0ID4gaW5wdXQubGVuZ3RoKVxyXG4gICAgICBsaW1pdCA9IGlucHV0Lmxlbmd0aDtcclxuICAgIGVsc2UgaWYgKGxpbWl0IDwgLWlucHV0Lmxlbmd0aClcclxuICAgICAgbGltaXQgPSAtaW5wdXQubGVuZ3RoO1xyXG5cclxuICAgIGlmIChsaW1pdCA+IDApIHtcclxuICAgICAgaSA9IDA7XHJcbiAgICAgIG4gPSBsaW1pdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGkgPSBpbnB1dC5sZW5ndGggKyBsaW1pdDtcclxuICAgICAgbiA9IGlucHV0Lmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKDsgaSA8IG47IGkrKykge1xyXG4gICAgICBvdXQucHVzaChpbnB1dFtpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxuICB9O1xyXG59XHJcblxyXG4vKipcclxuICogQG5nZG9jIGZpbHRlclxyXG4gKiBAbmFtZSBvcmRlckJ5XHJcbiAqIEBraW5kIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBPcmRlcnMgYSBzcGVjaWZpZWQgYGFycmF5YCBieSB0aGUgYGV4cHJlc3Npb25gIHByZWRpY2F0ZS4gSXQgaXMgb3JkZXJlZCBhbHBoYWJldGljYWxseVxyXG4gKiBmb3Igc3RyaW5ncyBhbmQgbnVtZXJpY2FsbHkgZm9yIG51bWJlcnMuIE5vdGU6IGlmIHlvdSBub3RpY2UgbnVtYmVycyBhcmUgbm90IGJlaW5nIHNvcnRlZFxyXG4gKiBjb3JyZWN0bHksIG1ha2Ugc3VyZSB0aGV5IGFyZSBhY3R1YWxseSBiZWluZyBzYXZlZCBhcyBudW1iZXJzIGFuZCBub3Qgc3RyaW5ncy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNvcnQuXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKil8c3RyaW5nfEFycmF5LjwoZnVuY3Rpb24oKil8c3RyaW5nKT49fSBleHByZXNzaW9uIEEgcHJlZGljYXRlIHRvIGJlXHJcbiAqICAgIHVzZWQgYnkgdGhlIGNvbXBhcmF0b3IgdG8gZGV0ZXJtaW5lIHRoZSBvcmRlciBvZiBlbGVtZW50cy5cclxuICpcclxuICogICAgQ2FuIGJlIG9uZSBvZjpcclxuICpcclxuICogICAgLSBgZnVuY3Rpb25gOiBHZXR0ZXIgZnVuY3Rpb24uIFRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHNvcnRlZCB1c2luZyB0aGVcclxuICogICAgICBgPGAsIGA9YCwgYD5gIG9wZXJhdG9yLlxyXG4gKiAgICAtIGBzdHJpbmdgOiBBbiBBbmd1bGFyIGV4cHJlc3Npb24uIFRoZSByZXN1bHQgb2YgdGhpcyBleHByZXNzaW9uIGlzIHVzZWQgdG8gY29tcGFyZSBlbGVtZW50c1xyXG4gKiAgICAgIChmb3IgZXhhbXBsZSBgbmFtZWAgdG8gc29ydCBieSBhIHByb3BlcnR5IGNhbGxlZCBgbmFtZWAgb3IgYG5hbWUuc3Vic3RyKDAsIDMpYCB0byBzb3J0IGJ5XHJcbiAqICAgICAgMyBmaXJzdCBjaGFyYWN0ZXJzIG9mIGEgcHJvcGVydHkgY2FsbGVkIGBuYW1lYCkuIFRoZSByZXN1bHQgb2YgYSBjb25zdGFudCBleHByZXNzaW9uXHJcbiAqICAgICAgaXMgaW50ZXJwcmV0ZWQgYXMgYSBwcm9wZXJ0eSBuYW1lIHRvIGJlIHVzZWQgaW4gY29tcGFyaXNvbnMgKGZvciBleGFtcGxlIGBcInNwZWNpYWwgbmFtZVwiYFxyXG4gKiAgICAgIHRvIHNvcnQgb2JqZWN0IGJ5IHRoZSB2YWx1ZSBvZiB0aGVpciBgc3BlY2lhbCBuYW1lYCBwcm9wZXJ0eSkuIEFuIGV4cHJlc3Npb24gY2FuIGJlXHJcbiAqICAgICAgb3B0aW9uYWxseSBwcmVmaXhlZCB3aXRoIGArYCBvciBgLWAgdG8gY29udHJvbCBhc2NlbmRpbmcgb3IgZGVzY2VuZGluZyBzb3J0IG9yZGVyXHJcbiAqICAgICAgKGZvciBleGFtcGxlLCBgK25hbWVgIG9yIGAtbmFtZWApLiBJZiBubyBwcm9wZXJ0eSBpcyBwcm92aWRlZCwgKGUuZy4gYCcrJ2ApIHRoZW4gdGhlIGFycmF5XHJcbiAqICAgICAgZWxlbWVudCBpdHNlbGYgaXMgdXNlZCB0byBjb21wYXJlIHdoZXJlIHNvcnRpbmcuXHJcbiAqICAgIC0gYEFycmF5YDogQW4gYXJyYXkgb2YgZnVuY3Rpb24gb3Igc3RyaW5nIHByZWRpY2F0ZXMuIFRoZSBmaXJzdCBwcmVkaWNhdGUgaW4gdGhlIGFycmF5XHJcbiAqICAgICAgaXMgdXNlZCBmb3Igc29ydGluZywgYnV0IHdoZW4gdHdvIGl0ZW1zIGFyZSBlcXVpdmFsZW50LCB0aGUgbmV4dCBwcmVkaWNhdGUgaXMgdXNlZC5cclxuICpcclxuICogICAgSWYgdGhlIHByZWRpY2F0ZSBpcyBtaXNzaW5nIG9yIGVtcHR5IHRoZW4gaXQgZGVmYXVsdHMgdG8gYCcrJ2AuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHJldmVyc2UgUmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIGFycmF5LlxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IFNvcnRlZCBjb3B5IG9mIHRoZSBzb3VyY2UgYXJyYXkuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgIDxleGFtcGxlIG1vZHVsZT1cIm9yZGVyQnlFeGFtcGxlXCI+XHJcbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgIDxzY3JpcHQ+XHJcbiAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdvcmRlckJ5RXhhbXBsZScsIFtdKVxyXG4gICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAgICAgICAgICAgICAkc2NvcGUuZnJpZW5kcyA9XHJcbiAgICAgICAgICAgICAgICAgW3tuYW1lOidKb2huJywgcGhvbmU6JzU1NS0xMjEyJywgYWdlOjEwfSxcclxuICAgICAgICAgICAgICAgICAge25hbWU6J01hcnknLCBwaG9uZTonNTU1LTk4NzYnLCBhZ2U6MTl9LFxyXG4gICAgICAgICAgICAgICAgICB7bmFtZTonTWlrZScsIHBob25lOic1NTUtNDMyMScsIGFnZToyMX0sXHJcbiAgICAgICAgICAgICAgICAgIHtuYW1lOidBZGFtJywgcGhvbmU6JzU1NS01Njc4JywgYWdlOjM1fSxcclxuICAgICAgICAgICAgICAgICAge25hbWU6J0p1bGllJywgcGhvbmU6JzU1NS04NzY1JywgYWdlOjI5fV07XHJcbiAgICAgICAgICAgICAkc2NvcGUucHJlZGljYXRlID0gJy1hZ2UnO1xyXG4gICAgICAgICAgIH1dKTtcclxuICAgICAgIDwvc2NyaXB0PlxyXG4gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cclxuICAgICAgICAgPHByZT5Tb3J0aW5nIHByZWRpY2F0ZSA9IHt7cHJlZGljYXRlfX07IHJldmVyc2UgPSB7e3JldmVyc2V9fTwvcHJlPlxyXG4gICAgICAgICA8aHIvPlxyXG4gICAgICAgICBbIDxhIGhyZWY9XCJcIiBuZy1jbGljaz1cInByZWRpY2F0ZT0nJ1wiPnVuc29ydGVkPC9hPiBdXHJcbiAgICAgICAgIDx0YWJsZSBjbGFzcz1cImZyaWVuZFwiPlxyXG4gICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgIDx0aD48YSBocmVmPVwiXCIgbmctY2xpY2s9XCJwcmVkaWNhdGUgPSAnbmFtZSc7IHJldmVyc2U9ZmFsc2VcIj5OYW1lPC9hPlxyXG4gICAgICAgICAgICAgICAgICg8YSBocmVmPVwiXCIgbmctY2xpY2s9XCJwcmVkaWNhdGUgPSAnLW5hbWUnOyByZXZlcnNlPWZhbHNlXCI+XjwvYT4pPC90aD5cclxuICAgICAgICAgICAgIDx0aD48YSBocmVmPVwiXCIgbmctY2xpY2s9XCJwcmVkaWNhdGUgPSAncGhvbmUnOyByZXZlcnNlPSFyZXZlcnNlXCI+UGhvbmUgTnVtYmVyPC9hPjwvdGg+XHJcbiAgICAgICAgICAgICA8dGg+PGEgaHJlZj1cIlwiIG5nLWNsaWNrPVwicHJlZGljYXRlID0gJ2FnZSc7IHJldmVyc2U9IXJldmVyc2VcIj5BZ2U8L2E+PC90aD5cclxuICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgIDx0ciBuZy1yZXBlYXQ9XCJmcmllbmQgaW4gZnJpZW5kcyB8IG9yZGVyQnk6cHJlZGljYXRlOnJldmVyc2VcIj5cclxuICAgICAgICAgICAgIDx0ZD57e2ZyaWVuZC5uYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgPHRkPnt7ZnJpZW5kLnBob25lfX08L3RkPlxyXG4gICAgICAgICAgICAgPHRkPnt7ZnJpZW5kLmFnZX19PC90ZD5cclxuICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgPC9kaXY+XHJcbiAgICAgPC9maWxlPlxyXG4gICA8L2V4YW1wbGU+XHJcbiAqXHJcbiAqIEl0J3MgYWxzbyBwb3NzaWJsZSB0byBjYWxsIHRoZSBvcmRlckJ5IGZpbHRlciBtYW51YWxseSwgYnkgaW5qZWN0aW5nIGAkZmlsdGVyYCwgcmV0cmlldmluZyB0aGVcclxuICogZmlsdGVyIHJvdXRpbmUgd2l0aCBgJGZpbHRlcignb3JkZXJCeScpYCwgYW5kIGNhbGxpbmcgdGhlIHJldHVybmVkIGZpbHRlciByb3V0aW5lIHdpdGggdGhlXHJcbiAqIGRlc2lyZWQgcGFyYW1ldGVycy5cclxuICpcclxuICogRXhhbXBsZTpcclxuICpcclxuICogQGV4YW1wbGVcclxuICA8ZXhhbXBsZSBtb2R1bGU9XCJvcmRlckJ5RXhhbXBsZVwiPlxyXG4gICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJmcmllbmRcIj5cclxuICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgPHRoPjxhIGhyZWY9XCJcIiBuZy1jbGljaz1cInJldmVyc2U9ZmFsc2U7b3JkZXIoJ25hbWUnLCBmYWxzZSlcIj5OYW1lPC9hPlxyXG4gICAgICAgICAgICAgICg8YSBocmVmPVwiXCIgbmctY2xpY2s9XCJvcmRlcignLW5hbWUnLGZhbHNlKVwiPl48L2E+KTwvdGg+XHJcbiAgICAgICAgICAgIDx0aD48YSBocmVmPVwiXCIgbmctY2xpY2s9XCJyZXZlcnNlPSFyZXZlcnNlO29yZGVyKCdwaG9uZScsIHJldmVyc2UpXCI+UGhvbmUgTnVtYmVyPC9hPjwvdGg+XHJcbiAgICAgICAgICAgIDx0aD48YSBocmVmPVwiXCIgbmctY2xpY2s9XCJyZXZlcnNlPSFyZXZlcnNlO29yZGVyKCdhZ2UnLHJldmVyc2UpXCI+QWdlPC9hPjwvdGg+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPHRyIG5nLXJlcGVhdD1cImZyaWVuZCBpbiBmcmllbmRzXCI+XHJcbiAgICAgICAgICAgIDx0ZD57e2ZyaWVuZC5uYW1lfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQ+e3tmcmllbmQucGhvbmV9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD57e2ZyaWVuZC5hZ2V9fTwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9maWxlPlxyXG5cclxuICAgIDxmaWxlIG5hbWU9XCJzY3JpcHQuanNcIj5cclxuICAgICAgYW5ndWxhci5tb2R1bGUoJ29yZGVyQnlFeGFtcGxlJywgW10pXHJcbiAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCAnJGZpbHRlcicsIGZ1bmN0aW9uKCRzY29wZSwgJGZpbHRlcikge1xyXG4gICAgICAgICAgdmFyIG9yZGVyQnkgPSAkZmlsdGVyKCdvcmRlckJ5Jyk7XHJcbiAgICAgICAgICAkc2NvcGUuZnJpZW5kcyA9IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnSm9obicsICAgIHBob25lOiAnNTU1LTEyMTInLCAgICBhZ2U6IDEwIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ01hcnknLCAgICBwaG9uZTogJzU1NS05ODc2JywgICAgYWdlOiAxOSB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdNaWtlJywgICAgcGhvbmU6ICc1NTUtNDMyMScsICAgIGFnZTogMjEgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnQWRhbScsICAgIHBob25lOiAnNTU1LTU2NzgnLCAgICBhZ2U6IDM1IH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ0p1bGllJywgICBwaG9uZTogJzU1NS04NzY1JywgICAgYWdlOiAyOSB9XHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgICAgJHNjb3BlLm9yZGVyID0gZnVuY3Rpb24ocHJlZGljYXRlLCByZXZlcnNlKSB7XHJcbiAgICAgICAgICAgICRzY29wZS5mcmllbmRzID0gb3JkZXJCeSgkc2NvcGUuZnJpZW5kcywgcHJlZGljYXRlLCByZXZlcnNlKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICAkc2NvcGUub3JkZXIoJy1hZ2UnLGZhbHNlKTtcclxuICAgICAgICB9XSk7XHJcbiAgICA8L2ZpbGU+XHJcbjwvZXhhbXBsZT5cclxuICovXHJcbm9yZGVyQnlGaWx0ZXIuJGluamVjdCA9IFsnJHBhcnNlJ107XHJcbmZ1bmN0aW9uIG9yZGVyQnlGaWx0ZXIoJHBhcnNlKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCBzb3J0UHJlZGljYXRlLCByZXZlcnNlT3JkZXIpIHtcclxuICAgIGlmICghKGlzQXJyYXlMaWtlKGFycmF5KSkpIHJldHVybiBhcnJheTtcclxuICAgIHNvcnRQcmVkaWNhdGUgPSBpc0FycmF5KHNvcnRQcmVkaWNhdGUpID8gc29ydFByZWRpY2F0ZSA6IFtzb3J0UHJlZGljYXRlXTtcclxuICAgIGlmIChzb3J0UHJlZGljYXRlLmxlbmd0aCA9PT0gMCkgeyBzb3J0UHJlZGljYXRlID0gWycrJ107IH1cclxuICAgIHNvcnRQcmVkaWNhdGUgPSBzb3J0UHJlZGljYXRlLm1hcChmdW5jdGlvbihwcmVkaWNhdGUpIHtcclxuICAgICAgdmFyIGRlc2NlbmRpbmcgPSBmYWxzZSwgZ2V0ID0gcHJlZGljYXRlIHx8IGlkZW50aXR5O1xyXG4gICAgICBpZiAoaXNTdHJpbmcocHJlZGljYXRlKSkge1xyXG4gICAgICAgIGlmICgocHJlZGljYXRlLmNoYXJBdCgwKSA9PSAnKycgfHwgcHJlZGljYXRlLmNoYXJBdCgwKSA9PSAnLScpKSB7XHJcbiAgICAgICAgICBkZXNjZW5kaW5nID0gcHJlZGljYXRlLmNoYXJBdCgwKSA9PSAnLSc7XHJcbiAgICAgICAgICBwcmVkaWNhdGUgPSBwcmVkaWNhdGUuc3Vic3RyaW5nKDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJlZGljYXRlID09PSAnJykge1xyXG4gICAgICAgICAgLy8gRWZmZWN0aXZlbHkgbm8gcHJlZGljYXRlIHdhcyBwYXNzZWQgc28gd2UgY29tcGFyZSBpZGVudGl0eVxyXG4gICAgICAgICAgcmV0dXJuIHJldmVyc2VDb21wYXJhdG9yKGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmUoYSwgYik7XHJcbiAgICAgICAgICB9LCBkZXNjZW5kaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ2V0ID0gJHBhcnNlKHByZWRpY2F0ZSk7XHJcbiAgICAgICAgaWYgKGdldC5jb25zdGFudCkge1xyXG4gICAgICAgICAgdmFyIGtleSA9IGdldCgpO1xyXG4gICAgICAgICAgcmV0dXJuIHJldmVyc2VDb21wYXJhdG9yKGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmUoYVtrZXldLCBiW2tleV0pO1xyXG4gICAgICAgICAgfSwgZGVzY2VuZGluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXZlcnNlQ29tcGFyYXRvcihmdW5jdGlvbihhLCBiKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbXBhcmUoZ2V0KGEpLGdldChiKSk7XHJcbiAgICAgIH0sIGRlc2NlbmRpbmcpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSkuc29ydChyZXZlcnNlQ29tcGFyYXRvcihjb21wYXJhdG9yLCByZXZlcnNlT3JkZXIpKTtcclxuXHJcbiAgICBmdW5jdGlvbiBjb21wYXJhdG9yKG8xLCBvMikge1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvcnRQcmVkaWNhdGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgY29tcCA9IHNvcnRQcmVkaWNhdGVbaV0obzEsIG8yKTtcclxuICAgICAgICBpZiAoY29tcCAhPT0gMCkgcmV0dXJuIGNvbXA7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZXZlcnNlQ29tcGFyYXRvcihjb21wLCBkZXNjZW5kaW5nKSB7XHJcbiAgICAgIHJldHVybiBkZXNjZW5kaW5nXHJcbiAgICAgICAgICA/IGZ1bmN0aW9uKGEsIGIpIHtyZXR1cm4gY29tcChiLGEpO31cclxuICAgICAgICAgIDogY29tcDtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGNvbXBhcmUodjEsIHYyKSB7XHJcbiAgICAgIHZhciB0MSA9IHR5cGVvZiB2MTtcclxuICAgICAgdmFyIHQyID0gdHlwZW9mIHYyO1xyXG4gICAgICBpZiAodDEgPT0gdDIpIHtcclxuICAgICAgICBpZiAoaXNEYXRlKHYxKSAmJiBpc0RhdGUodjIpKSB7XHJcbiAgICAgICAgICB2MSA9IHYxLnZhbHVlT2YoKTtcclxuICAgICAgICAgIHYyID0gdjIudmFsdWVPZigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodDEgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgIHYxID0gdjEudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICB2MiA9IHYyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2MSA9PT0gdjIpIHJldHVybiAwO1xyXG4gICAgICAgIHJldHVybiB2MSA8IHYyID8gLTEgOiAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0MSA8IHQyID8gLTEgOiAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gbmdEaXJlY3RpdmUoZGlyZWN0aXZlKSB7XHJcbiAgaWYgKGlzRnVuY3Rpb24oZGlyZWN0aXZlKSkge1xyXG4gICAgZGlyZWN0aXZlID0ge1xyXG4gICAgICBsaW5rOiBkaXJlY3RpdmVcclxuICAgIH07XHJcbiAgfVxyXG4gIGRpcmVjdGl2ZS5yZXN0cmljdCA9IGRpcmVjdGl2ZS5yZXN0cmljdCB8fCAnQUMnO1xyXG4gIHJldHVybiB2YWx1ZUZuKGRpcmVjdGl2ZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIGFcclxuICogQHJlc3RyaWN0IEVcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIE1vZGlmaWVzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBodG1sIEEgdGFnIHNvIHRoYXQgdGhlIGRlZmF1bHQgYWN0aW9uIGlzIHByZXZlbnRlZCB3aGVuXHJcbiAqIHRoZSBocmVmIGF0dHJpYnV0ZSBpcyBlbXB0eS5cclxuICpcclxuICogVGhpcyBjaGFuZ2UgcGVybWl0cyB0aGUgZWFzeSBjcmVhdGlvbiBvZiBhY3Rpb24gbGlua3Mgd2l0aCB0aGUgYG5nQ2xpY2tgIGRpcmVjdGl2ZVxyXG4gKiB3aXRob3V0IGNoYW5naW5nIHRoZSBsb2NhdGlvbiBvciBjYXVzaW5nIHBhZ2UgcmVsb2FkcywgZS5nLjpcclxuICogYDxhIGhyZWY9XCJcIiBuZy1jbGljaz1cImxpc3QuYWRkSXRlbSgpXCI+QWRkIEl0ZW08L2E+YFxyXG4gKi9cclxudmFyIGh0bWxBbmNob3JEaXJlY3RpdmUgPSB2YWx1ZUZuKHtcclxuICByZXN0cmljdDogJ0UnLFxyXG4gIGNvbXBpbGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHIpIHtcclxuICAgIGlmICghYXR0ci5ocmVmICYmICFhdHRyLnhsaW5rSHJlZiAmJiAhYXR0ci5uYW1lKSB7XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCkge1xyXG4gICAgICAgIC8vIFNWR0FFbGVtZW50IGRvZXMgbm90IHVzZSB0aGUgaHJlZiBhdHRyaWJ1dGUsIGJ1dCByYXRoZXIgdGhlICd4bGlua0hyZWYnIGF0dHJpYnV0ZS5cclxuICAgICAgICB2YXIgaHJlZiA9IHRvU3RyaW5nLmNhbGwoZWxlbWVudC5wcm9wKCdocmVmJykpID09PSAnW29iamVjdCBTVkdBbmltYXRlZFN0cmluZ10nID9cclxuICAgICAgICAgICAgICAgICAgICd4bGluazpocmVmJyA6ICdocmVmJztcclxuICAgICAgICBlbGVtZW50Lm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAvLyBpZiB3ZSBoYXZlIG5vIGhyZWYgdXJsLCB0aGVuIGRvbid0IG5hdmlnYXRlIGFueXdoZXJlLlxyXG4gICAgICAgICAgaWYgKCFlbGVtZW50LmF0dHIoaHJlZikpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdIcmVmXHJcbiAqIEByZXN0cmljdCBBXHJcbiAqIEBwcmlvcml0eSA5OVxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogVXNpbmcgQW5ndWxhciBtYXJrdXAgbGlrZSBge3toYXNofX1gIGluIGFuIGhyZWYgYXR0cmlidXRlIHdpbGxcclxuICogbWFrZSB0aGUgbGluayBnbyB0byB0aGUgd3JvbmcgVVJMIGlmIHRoZSB1c2VyIGNsaWNrcyBpdCBiZWZvcmVcclxuICogQW5ndWxhciBoYXMgYSBjaGFuY2UgdG8gcmVwbGFjZSB0aGUgYHt7aGFzaH19YCBtYXJrdXAgd2l0aCBpdHNcclxuICogdmFsdWUuIFVudGlsIEFuZ3VsYXIgcmVwbGFjZXMgdGhlIG1hcmt1cCB0aGUgbGluayB3aWxsIGJlIGJyb2tlblxyXG4gKiBhbmQgd2lsbCBtb3N0IGxpa2VseSByZXR1cm4gYSA0MDQgZXJyb3IuXHJcbiAqXHJcbiAqIFRoZSBgbmdIcmVmYCBkaXJlY3RpdmUgc29sdmVzIHRoaXMgcHJvYmxlbS5cclxuICpcclxuICogVGhlIHdyb25nIHdheSB0byB3cml0ZSBpdDpcclxuICogYGBgaHRtbFxyXG4gKiA8YSBocmVmPVwiaHR0cDovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyL3t7aGFzaH19XCI+bGluazE8L2E+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGUgY29ycmVjdCB3YXkgdG8gd3JpdGUgaXQ6XHJcbiAqIGBgYGh0bWxcclxuICogPGEgbmctaHJlZj1cImh0dHA6Ly93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci97e2hhc2h9fVwiPmxpbmsxPC9hPlxyXG4gKiBgYGBcclxuICpcclxuICogQGVsZW1lbnQgQVxyXG4gKiBAcGFyYW0ge3RlbXBsYXRlfSBuZ0hyZWYgYW55IHN0cmluZyB3aGljaCBjYW4gY29udGFpbiBge3t9fWAgbWFya3VwLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBUaGlzIGV4YW1wbGUgc2hvd3MgdmFyaW91cyBjb21iaW5hdGlvbnMgb2YgYGhyZWZgLCBgbmctaHJlZmAgYW5kIGBuZy1jbGlja2AgYXR0cmlidXRlc1xyXG4gKiBpbiBsaW5rcyBhbmQgdGhlaXIgZGlmZmVyZW50IGJlaGF2aW9yczpcclxuICAgIDxleGFtcGxlPlxyXG4gICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgIDxpbnB1dCBuZy1tb2RlbD1cInZhbHVlXCIgLz48YnIgLz5cclxuICAgICAgICA8YSBpZD1cImxpbmstMVwiIGhyZWYgbmctY2xpY2s9XCJ2YWx1ZSA9IDFcIj5saW5rIDE8L2E+IChsaW5rLCBkb24ndCByZWxvYWQpPGJyIC8+XHJcbiAgICAgICAgPGEgaWQ9XCJsaW5rLTJcIiBocmVmPVwiXCIgbmctY2xpY2s9XCJ2YWx1ZSA9IDJcIj5saW5rIDI8L2E+IChsaW5rLCBkb24ndCByZWxvYWQpPGJyIC8+XHJcbiAgICAgICAgPGEgaWQ9XCJsaW5rLTNcIiBuZy1ocmVmPVwiL3t7JzEyMyd9fVwiPmxpbmsgMzwvYT4gKGxpbmssIHJlbG9hZCEpPGJyIC8+XHJcbiAgICAgICAgPGEgaWQ9XCJsaW5rLTRcIiBocmVmPVwiXCIgbmFtZT1cInh4XCIgbmctY2xpY2s9XCJ2YWx1ZSA9IDRcIj5hbmNob3I8L2E+IChsaW5rLCBkb24ndCByZWxvYWQpPGJyIC8+XHJcbiAgICAgICAgPGEgaWQ9XCJsaW5rLTVcIiBuYW1lPVwieHh4XCIgbmctY2xpY2s9XCJ2YWx1ZSA9IDVcIj5hbmNob3I8L2E+IChubyBsaW5rKTxiciAvPlxyXG4gICAgICAgIDxhIGlkPVwibGluay02XCIgbmctaHJlZj1cInt7dmFsdWV9fVwiPmxpbms8L2E+IChsaW5rLCBjaGFuZ2UgbG9jYXRpb24pXHJcbiAgICAgIDwvZmlsZT5cclxuICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICAgIGl0KCdzaG91bGQgZXhlY3V0ZSBuZy1jbGljayBidXQgbm90IHJlbG9hZCB3aGVuIGhyZWYgd2l0aG91dCB2YWx1ZScsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgZWxlbWVudChieS5pZCgnbGluay0xJykpLmNsaWNrKCk7XHJcbiAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5tb2RlbCgndmFsdWUnKSkuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKS50b0VxdWFsKCcxJyk7XHJcbiAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnbGluay0xJykpLmdldEF0dHJpYnV0ZSgnaHJlZicpKS50b0JlKCcnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaXQoJ3Nob3VsZCBleGVjdXRlIG5nLWNsaWNrIGJ1dCBub3QgcmVsb2FkIHdoZW4gaHJlZiBlbXB0eSBzdHJpbmcnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIGVsZW1lbnQoYnkuaWQoJ2xpbmstMicpKS5jbGljaygpO1xyXG4gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkubW9kZWwoJ3ZhbHVlJykpLmdldEF0dHJpYnV0ZSgndmFsdWUnKSkudG9FcXVhbCgnMicpO1xyXG4gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2xpbmstMicpKS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSkudG9CZSgnJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGl0KCdzaG91bGQgZXhlY3V0ZSBuZy1jbGljayBhbmQgY2hhbmdlIHVybCB3aGVuIG5nLWhyZWYgc3BlY2lmaWVkJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnbGluay0zJykpLmdldEF0dHJpYnV0ZSgnaHJlZicpKS50b01hdGNoKC9cXC8xMjMkLyk7XHJcblxyXG4gICAgICAgICAgZWxlbWVudChieS5pZCgnbGluay0zJykpLmNsaWNrKCk7XHJcblxyXG4gICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgbmF2aWdhdGUgYXdheSBmcm9tIGFuIEFuZ3VsYXIgcGFnZSwgc28gd2UgbmVlZFxyXG4gICAgICAgICAgLy8gdG8gdXNlIGJyb3dzZXIuZHJpdmVyIHRvIGdldCB0aGUgYmFzZSB3ZWJkcml2ZXIuXHJcblxyXG4gICAgICAgICAgYnJvd3Nlci53YWl0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYnJvd3Nlci5kcml2ZXIuZ2V0Q3VycmVudFVybCgpLnRoZW4oZnVuY3Rpb24odXJsKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHVybC5tYXRjaCgvXFwvMTIzJC8pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0sIDUwMDAsICdwYWdlIHNob3VsZCBuYXZpZ2F0ZSB0byAvMTIzJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHhpdCgnc2hvdWxkIGV4ZWN1dGUgbmctY2xpY2sgYnV0IG5vdCByZWxvYWQgd2hlbiBocmVmIGVtcHR5IHN0cmluZyBhbmQgbmFtZSBzcGVjaWZpZWQnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIGVsZW1lbnQoYnkuaWQoJ2xpbmstNCcpKS5jbGljaygpO1xyXG4gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkubW9kZWwoJ3ZhbHVlJykpLmdldEF0dHJpYnV0ZSgndmFsdWUnKSkudG9FcXVhbCgnNCcpO1xyXG4gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2xpbmstNCcpKS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSkudG9CZSgnJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGl0KCdzaG91bGQgZXhlY3V0ZSBuZy1jbGljayBidXQgbm90IHJlbG9hZCB3aGVuIG5vIGhyZWYgYnV0IG5hbWUgc3BlY2lmaWVkJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICBlbGVtZW50KGJ5LmlkKCdsaW5rLTUnKSkuY2xpY2soKTtcclxuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5Lm1vZGVsKCd2YWx1ZScpKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRvRXF1YWwoJzUnKTtcclxuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdsaW5rLTUnKSkuZ2V0QXR0cmlidXRlKCdocmVmJykpLnRvQmUobnVsbCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGl0KCdzaG91bGQgb25seSBjaGFuZ2UgdXJsIHdoZW4gb25seSBuZy1ocmVmJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCd2YWx1ZScpKS5jbGVhcigpO1xyXG4gICAgICAgICAgZWxlbWVudChieS5tb2RlbCgndmFsdWUnKSkuc2VuZEtleXMoJzYnKTtcclxuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdsaW5rLTYnKSkuZ2V0QXR0cmlidXRlKCdocmVmJykpLnRvTWF0Y2goL1xcLzYkLyk7XHJcblxyXG4gICAgICAgICAgZWxlbWVudChieS5pZCgnbGluay02JykpLmNsaWNrKCk7XHJcblxyXG4gICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgbmF2aWdhdGUgYXdheSBmcm9tIGFuIEFuZ3VsYXIgcGFnZSwgc28gd2UgbmVlZFxyXG4gICAgICAgICAgLy8gdG8gdXNlIGJyb3dzZXIuZHJpdmVyIHRvIGdldCB0aGUgYmFzZSB3ZWJkcml2ZXIuXHJcbiAgICAgICAgICBicm93c2VyLndhaXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBicm93c2VyLmRyaXZlci5nZXRDdXJyZW50VXJsKCkudGhlbihmdW5jdGlvbih1cmwpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdXJsLm1hdGNoKC9cXC82JC8pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0sIDUwMDAsICdwYWdlIHNob3VsZCBuYXZpZ2F0ZSB0byAvNicpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICA8L2ZpbGU+XHJcbiAgICA8L2V4YW1wbGU+XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdTcmNcclxuICogQHJlc3RyaWN0IEFcclxuICogQHByaW9yaXR5IDk5XHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBVc2luZyBBbmd1bGFyIG1hcmt1cCBsaWtlIGB7e2hhc2h9fWAgaW4gYSBgc3JjYCBhdHRyaWJ1dGUgZG9lc24ndFxyXG4gKiB3b3JrIHJpZ2h0OiBUaGUgYnJvd3NlciB3aWxsIGZldGNoIGZyb20gdGhlIFVSTCB3aXRoIHRoZSBsaXRlcmFsXHJcbiAqIHRleHQgYHt7aGFzaH19YCB1bnRpbCBBbmd1bGFyIHJlcGxhY2VzIHRoZSBleHByZXNzaW9uIGluc2lkZVxyXG4gKiBge3toYXNofX1gLiBUaGUgYG5nU3JjYCBkaXJlY3RpdmUgc29sdmVzIHRoaXMgcHJvYmxlbS5cclxuICpcclxuICogVGhlIGJ1Z2d5IHdheSB0byB3cml0ZSBpdDpcclxuICogYGBgaHRtbFxyXG4gKiA8aW1nIHNyYz1cImh0dHA6Ly93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci97e2hhc2h9fVwiLz5cclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBjb3JyZWN0IHdheSB0byB3cml0ZSBpdDpcclxuICogYGBgaHRtbFxyXG4gKiA8aW1nIG5nLXNyYz1cImh0dHA6Ly93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci97e2hhc2h9fVwiLz5cclxuICogYGBgXHJcbiAqXHJcbiAqIEBlbGVtZW50IElNR1xyXG4gKiBAcGFyYW0ge3RlbXBsYXRlfSBuZ1NyYyBhbnkgc3RyaW5nIHdoaWNoIGNhbiBjb250YWluIGB7e319YCBtYXJrdXAuXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdTcmNzZXRcclxuICogQHJlc3RyaWN0IEFcclxuICogQHByaW9yaXR5IDk5XHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBVc2luZyBBbmd1bGFyIG1hcmt1cCBsaWtlIGB7e2hhc2h9fWAgaW4gYSBgc3Jjc2V0YCBhdHRyaWJ1dGUgZG9lc24ndFxyXG4gKiB3b3JrIHJpZ2h0OiBUaGUgYnJvd3NlciB3aWxsIGZldGNoIGZyb20gdGhlIFVSTCB3aXRoIHRoZSBsaXRlcmFsXHJcbiAqIHRleHQgYHt7aGFzaH19YCB1bnRpbCBBbmd1bGFyIHJlcGxhY2VzIHRoZSBleHByZXNzaW9uIGluc2lkZVxyXG4gKiBge3toYXNofX1gLiBUaGUgYG5nU3Jjc2V0YCBkaXJlY3RpdmUgc29sdmVzIHRoaXMgcHJvYmxlbS5cclxuICpcclxuICogVGhlIGJ1Z2d5IHdheSB0byB3cml0ZSBpdDpcclxuICogYGBgaHRtbFxyXG4gKiA8aW1nIHNyY3NldD1cImh0dHA6Ly93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci97e2hhc2h9fSAyeFwiLz5cclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBjb3JyZWN0IHdheSB0byB3cml0ZSBpdDpcclxuICogYGBgaHRtbFxyXG4gKiA8aW1nIG5nLXNyY3NldD1cImh0dHA6Ly93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci97e2hhc2h9fSAyeFwiLz5cclxuICogYGBgXHJcbiAqXHJcbiAqIEBlbGVtZW50IElNR1xyXG4gKiBAcGFyYW0ge3RlbXBsYXRlfSBuZ1NyY3NldCBhbnkgc3RyaW5nIHdoaWNoIGNhbiBjb250YWluIGB7e319YCBtYXJrdXAuXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdEaXNhYmxlZFxyXG4gKiBAcmVzdHJpY3QgQVxyXG4gKiBAcHJpb3JpdHkgMTAwXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKlxyXG4gKiBXZSBzaG91bGRuJ3QgZG8gdGhpcywgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGJ1dHRvbiBlbmFibGVkIG9uIENocm9tZS9GaXJlZm94IGJ1dCBub3Qgb24gSUU4IGFuZCBvbGRlciBJRXM6XHJcbiAqIGBgYGh0bWxcclxuICogPGRpdiBuZy1pbml0PVwic2NvcGUgPSB7IGlzRGlzYWJsZWQ6IGZhbHNlIH1cIj5cclxuICogIDxidXR0b24gZGlzYWJsZWQ9XCJ7e3Njb3BlLmlzRGlzYWJsZWR9fVwiPkRpc2FibGVkPC9idXR0b24+XHJcbiAqIDwvZGl2PlxyXG4gKiBgYGBcclxuICpcclxuICogVGhlIEhUTUwgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCByZXF1aXJlIGJyb3dzZXJzIHRvIHByZXNlcnZlIHRoZSB2YWx1ZXMgb2YgYm9vbGVhbiBhdHRyaWJ1dGVzXHJcbiAqIHN1Y2ggYXMgZGlzYWJsZWQuIChUaGVpciBwcmVzZW5jZSBtZWFucyB0cnVlIGFuZCB0aGVpciBhYnNlbmNlIG1lYW5zIGZhbHNlLilcclxuICogSWYgd2UgcHV0IGFuIEFuZ3VsYXIgaW50ZXJwb2xhdGlvbiBleHByZXNzaW9uIGludG8gc3VjaCBhbiBhdHRyaWJ1dGUgdGhlbiB0aGVcclxuICogYmluZGluZyBpbmZvcm1hdGlvbiB3b3VsZCBiZSBsb3N0IHdoZW4gdGhlIGJyb3dzZXIgcmVtb3ZlcyB0aGUgYXR0cmlidXRlLlxyXG4gKiBUaGUgYG5nRGlzYWJsZWRgIGRpcmVjdGl2ZSBzb2x2ZXMgdGhpcyBwcm9ibGVtIGZvciB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuXHJcbiAqIFRoaXMgY29tcGxlbWVudGFyeSBkaXJlY3RpdmUgaXMgbm90IHJlbW92ZWQgYnkgdGhlIGJyb3dzZXIgYW5kIHNvIHByb3ZpZGVzXHJcbiAqIGEgcGVybWFuZW50IHJlbGlhYmxlIHBsYWNlIHRvIHN0b3JlIHRoZSBiaW5kaW5nIGluZm9ybWF0aW9uLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICAgPGV4YW1wbGU+XHJcbiAgICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgICAgQ2xpY2sgbWUgdG8gdG9nZ2xlOiA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmctbW9kZWw9XCJjaGVja2VkXCI+PGJyLz5cclxuICAgICAgICA8YnV0dG9uIG5nLW1vZGVsPVwiYnV0dG9uXCIgbmctZGlzYWJsZWQ9XCJjaGVja2VkXCI+QnV0dG9uPC9idXR0b24+XHJcbiAgICAgIDwvZmlsZT5cclxuICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICAgIGl0KCdzaG91bGQgdG9nZ2xlIGJ1dHRvbicsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuY3NzKCdidXR0b24nKSkuZ2V0QXR0cmlidXRlKCdkaXNhYmxlZCcpKS50b0JlRmFsc3koKTtcclxuICAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ2NoZWNrZWQnKSkuY2xpY2soKTtcclxuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnYnV0dG9uJykpLmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSkudG9CZVRydXRoeSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICA8L2ZpbGU+XHJcbiAgICA8L2V4YW1wbGU+XHJcbiAqXHJcbiAqIEBlbGVtZW50IElOUFVUXHJcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdEaXNhYmxlZCBJZiB0aGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaXMgdHJ1dGh5LFxyXG4gKiAgICAgdGhlbiBzcGVjaWFsIGF0dHJpYnV0ZSBcImRpc2FibGVkXCIgd2lsbCBiZSBzZXQgb24gdGhlIGVsZW1lbnRcclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdDaGVja2VkXHJcbiAqIEByZXN0cmljdCBBXHJcbiAqIEBwcmlvcml0eSAxMDBcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRoZSBIVE1MIHNwZWNpZmljYXRpb24gZG9lcyBub3QgcmVxdWlyZSBicm93c2VycyB0byBwcmVzZXJ2ZSB0aGUgdmFsdWVzIG9mIGJvb2xlYW4gYXR0cmlidXRlc1xyXG4gKiBzdWNoIGFzIGNoZWNrZWQuIChUaGVpciBwcmVzZW5jZSBtZWFucyB0cnVlIGFuZCB0aGVpciBhYnNlbmNlIG1lYW5zIGZhbHNlLilcclxuICogSWYgd2UgcHV0IGFuIEFuZ3VsYXIgaW50ZXJwb2xhdGlvbiBleHByZXNzaW9uIGludG8gc3VjaCBhbiBhdHRyaWJ1dGUgdGhlbiB0aGVcclxuICogYmluZGluZyBpbmZvcm1hdGlvbiB3b3VsZCBiZSBsb3N0IHdoZW4gdGhlIGJyb3dzZXIgcmVtb3ZlcyB0aGUgYXR0cmlidXRlLlxyXG4gKiBUaGUgYG5nQ2hlY2tlZGAgZGlyZWN0aXZlIHNvbHZlcyB0aGlzIHByb2JsZW0gZm9yIHRoZSBgY2hlY2tlZGAgYXR0cmlidXRlLlxyXG4gKiBUaGlzIGNvbXBsZW1lbnRhcnkgZGlyZWN0aXZlIGlzIG5vdCByZW1vdmVkIGJ5IHRoZSBicm93c2VyIGFuZCBzbyBwcm92aWRlc1xyXG4gKiBhIHBlcm1hbmVudCByZWxpYWJsZSBwbGFjZSB0byBzdG9yZSB0aGUgYmluZGluZyBpbmZvcm1hdGlvbi5cclxuICogQGV4YW1wbGVcclxuICAgIDxleGFtcGxlPlxyXG4gICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgIENoZWNrIG1lIHRvIGNoZWNrIGJvdGg6IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuZy1tb2RlbD1cIm1hc3RlclwiPjxici8+XHJcbiAgICAgICAgPGlucHV0IGlkPVwiY2hlY2tTbGF2ZVwiIHR5cGU9XCJjaGVja2JveFwiIG5nLWNoZWNrZWQ9XCJtYXN0ZXJcIj5cclxuICAgICAgPC9maWxlPlxyXG4gICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgICAgaXQoJ3Nob3VsZCBjaGVjayBib3RoIGNoZWNrQm94ZXMnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdjaGVja1NsYXZlJykpLmdldEF0dHJpYnV0ZSgnY2hlY2tlZCcpKS50b0JlRmFsc3koKTtcclxuICAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ21hc3RlcicpKS5jbGljaygpO1xyXG4gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2NoZWNrU2xhdmUnKSkuZ2V0QXR0cmlidXRlKCdjaGVja2VkJykpLnRvQmVUcnV0aHkoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgPC9maWxlPlxyXG4gICAgPC9leGFtcGxlPlxyXG4gKlxyXG4gKiBAZWxlbWVudCBJTlBVVFxyXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQ2hlY2tlZCBJZiB0aGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaXMgdHJ1dGh5LFxyXG4gKiAgICAgdGhlbiBzcGVjaWFsIGF0dHJpYnV0ZSBcImNoZWNrZWRcIiB3aWxsIGJlIHNldCBvbiB0aGUgZWxlbWVudFxyXG4gKi9cclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBuZ1JlYWRvbmx5XHJcbiAqIEByZXN0cmljdCBBXHJcbiAqIEBwcmlvcml0eSAxMDBcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRoZSBIVE1MIHNwZWNpZmljYXRpb24gZG9lcyBub3QgcmVxdWlyZSBicm93c2VycyB0byBwcmVzZXJ2ZSB0aGUgdmFsdWVzIG9mIGJvb2xlYW4gYXR0cmlidXRlc1xyXG4gKiBzdWNoIGFzIHJlYWRvbmx5LiAoVGhlaXIgcHJlc2VuY2UgbWVhbnMgdHJ1ZSBhbmQgdGhlaXIgYWJzZW5jZSBtZWFucyBmYWxzZS4pXHJcbiAqIElmIHdlIHB1dCBhbiBBbmd1bGFyIGludGVycG9sYXRpb24gZXhwcmVzc2lvbiBpbnRvIHN1Y2ggYW4gYXR0cmlidXRlIHRoZW4gdGhlXHJcbiAqIGJpbmRpbmcgaW5mb3JtYXRpb24gd291bGQgYmUgbG9zdCB3aGVuIHRoZSBicm93c2VyIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZS5cclxuICogVGhlIGBuZ1JlYWRvbmx5YCBkaXJlY3RpdmUgc29sdmVzIHRoaXMgcHJvYmxlbSBmb3IgdGhlIGByZWFkb25seWAgYXR0cmlidXRlLlxyXG4gKiBUaGlzIGNvbXBsZW1lbnRhcnkgZGlyZWN0aXZlIGlzIG5vdCByZW1vdmVkIGJ5IHRoZSBicm93c2VyIGFuZCBzbyBwcm92aWRlc1xyXG4gKiBhIHBlcm1hbmVudCByZWxpYWJsZSBwbGFjZSB0byBzdG9yZSB0aGUgYmluZGluZyBpbmZvcm1hdGlvbi5cclxuICogQGV4YW1wbGVcclxuICAgIDxleGFtcGxlPlxyXG4gICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgIENoZWNrIG1lIHRvIG1ha2UgdGV4dCByZWFkb25seTogPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5nLW1vZGVsPVwiY2hlY2tlZFwiPjxici8+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmctcmVhZG9ubHk9XCJjaGVja2VkXCIgdmFsdWU9XCJJJ20gQW5ndWxhclwiLz5cclxuICAgICAgPC9maWxlPlxyXG4gICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgICAgaXQoJ3Nob3VsZCB0b2dnbGUgcmVhZG9ubHkgYXR0cicsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuY3NzKCdbdHlwZT1cInRleHRcIl0nKSkuZ2V0QXR0cmlidXRlKCdyZWFkb25seScpKS50b0JlRmFsc3koKTtcclxuICAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ2NoZWNrZWQnKSkuY2xpY2soKTtcclxuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnW3R5cGU9XCJ0ZXh0XCJdJykpLmdldEF0dHJpYnV0ZSgncmVhZG9ubHknKSkudG9CZVRydXRoeSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICA8L2ZpbGU+XHJcbiAgICA8L2V4YW1wbGU+XHJcbiAqXHJcbiAqIEBlbGVtZW50IElOUFVUXHJcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdSZWFkb25seSBJZiB0aGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaXMgdHJ1dGh5LFxyXG4gKiAgICAgdGhlbiBzcGVjaWFsIGF0dHJpYnV0ZSBcInJlYWRvbmx5XCIgd2lsbCBiZSBzZXQgb24gdGhlIGVsZW1lbnRcclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdTZWxlY3RlZFxyXG4gKiBAcmVzdHJpY3QgQVxyXG4gKiBAcHJpb3JpdHkgMTAwXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBUaGUgSFRNTCBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IHJlcXVpcmUgYnJvd3NlcnMgdG8gcHJlc2VydmUgdGhlIHZhbHVlcyBvZiBib29sZWFuIGF0dHJpYnV0ZXNcclxuICogc3VjaCBhcyBzZWxlY3RlZC4gKFRoZWlyIHByZXNlbmNlIG1lYW5zIHRydWUgYW5kIHRoZWlyIGFic2VuY2UgbWVhbnMgZmFsc2UuKVxyXG4gKiBJZiB3ZSBwdXQgYW4gQW5ndWxhciBpbnRlcnBvbGF0aW9uIGV4cHJlc3Npb24gaW50byBzdWNoIGFuIGF0dHJpYnV0ZSB0aGVuIHRoZVxyXG4gKiBiaW5kaW5nIGluZm9ybWF0aW9uIHdvdWxkIGJlIGxvc3Qgd2hlbiB0aGUgYnJvd3NlciByZW1vdmVzIHRoZSBhdHRyaWJ1dGUuXHJcbiAqIFRoZSBgbmdTZWxlY3RlZGAgZGlyZWN0aXZlIHNvbHZlcyB0aGlzIHByb2JsZW0gZm9yIHRoZSBgc2VsZWN0ZWRgIGF0dHJpYnV0ZS5cclxuICogVGhpcyBjb21wbGVtZW50YXJ5IGRpcmVjdGl2ZSBpcyBub3QgcmVtb3ZlZCBieSB0aGUgYnJvd3NlciBhbmQgc28gcHJvdmlkZXNcclxuICogYSBwZXJtYW5lbnQgcmVsaWFibGUgcGxhY2UgdG8gc3RvcmUgdGhlIGJpbmRpbmcgaW5mb3JtYXRpb24uXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgICA8ZXhhbXBsZT5cclxuICAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgICBDaGVjayBtZSB0byBzZWxlY3Q6IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuZy1tb2RlbD1cInNlbGVjdGVkXCI+PGJyLz5cclxuICAgICAgICA8c2VsZWN0PlxyXG4gICAgICAgICAgPG9wdGlvbj5IZWxsbyE8L29wdGlvbj5cclxuICAgICAgICAgIDxvcHRpb24gaWQ9XCJncmVldFwiIG5nLXNlbGVjdGVkPVwic2VsZWN0ZWRcIj5HcmVldGluZ3MhPC9vcHRpb24+XHJcbiAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgIDwvZmlsZT5cclxuICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICAgIGl0KCdzaG91bGQgc2VsZWN0IEdyZWV0aW5ncyEnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdncmVldCcpKS5nZXRBdHRyaWJ1dGUoJ3NlbGVjdGVkJykpLnRvQmVGYWxzeSgpO1xyXG4gICAgICAgICAgZWxlbWVudChieS5tb2RlbCgnc2VsZWN0ZWQnKSkuY2xpY2soKTtcclxuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmlkKCdncmVldCcpKS5nZXRBdHRyaWJ1dGUoJ3NlbGVjdGVkJykpLnRvQmVUcnV0aHkoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgPC9maWxlPlxyXG4gICAgPC9leGFtcGxlPlxyXG4gKlxyXG4gKiBAZWxlbWVudCBPUFRJT05cclxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ1NlbGVjdGVkIElmIHRoZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufSBpcyB0cnV0aHksXHJcbiAqICAgICB0aGVuIHNwZWNpYWwgYXR0cmlidXRlIFwic2VsZWN0ZWRcIiB3aWxsIGJlIHNldCBvbiB0aGUgZWxlbWVudFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIG5nT3BlblxyXG4gKiBAcmVzdHJpY3QgQVxyXG4gKiBAcHJpb3JpdHkgMTAwXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBUaGUgSFRNTCBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IHJlcXVpcmUgYnJvd3NlcnMgdG8gcHJlc2VydmUgdGhlIHZhbHVlcyBvZiBib29sZWFuIGF0dHJpYnV0ZXNcclxuICogc3VjaCBhcyBvcGVuLiAoVGhlaXIgcHJlc2VuY2UgbWVhbnMgdHJ1ZSBhbmQgdGhlaXIgYWJzZW5jZSBtZWFucyBmYWxzZS4pXHJcbiAqIElmIHdlIHB1dCBhbiBBbmd1bGFyIGludGVycG9sYXRpb24gZXhwcmVzc2lvbiBpbnRvIHN1Y2ggYW4gYXR0cmlidXRlIHRoZW4gdGhlXHJcbiAqIGJpbmRpbmcgaW5mb3JtYXRpb24gd291bGQgYmUgbG9zdCB3aGVuIHRoZSBicm93c2VyIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZS5cclxuICogVGhlIGBuZ09wZW5gIGRpcmVjdGl2ZSBzb2x2ZXMgdGhpcyBwcm9ibGVtIGZvciB0aGUgYG9wZW5gIGF0dHJpYnV0ZS5cclxuICogVGhpcyBjb21wbGVtZW50YXJ5IGRpcmVjdGl2ZSBpcyBub3QgcmVtb3ZlZCBieSB0aGUgYnJvd3NlciBhbmQgc28gcHJvdmlkZXNcclxuICogYSBwZXJtYW5lbnQgcmVsaWFibGUgcGxhY2UgdG8gc3RvcmUgdGhlIGJpbmRpbmcgaW5mb3JtYXRpb24uXHJcbiAqIEBleGFtcGxlXHJcbiAgICAgPGV4YW1wbGU+XHJcbiAgICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgICBDaGVjayBtZSBjaGVjayBtdWx0aXBsZTogPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5nLW1vZGVsPVwib3BlblwiPjxici8+XHJcbiAgICAgICAgIDxkZXRhaWxzIGlkPVwiZGV0YWlsc1wiIG5nLW9wZW49XCJvcGVuXCI+XHJcbiAgICAgICAgICAgIDxzdW1tYXJ5PlNob3cvSGlkZSBtZTwvc3VtbWFyeT5cclxuICAgICAgICAgPC9kZXRhaWxzPlxyXG4gICAgICAgPC9maWxlPlxyXG4gICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICAgICBpdCgnc2hvdWxkIHRvZ2dsZSBvcGVuJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuaWQoJ2RldGFpbHMnKSkuZ2V0QXR0cmlidXRlKCdvcGVuJykpLnRvQmVGYWxzeSgpO1xyXG4gICAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ29wZW4nKSkuY2xpY2soKTtcclxuICAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5pZCgnZGV0YWlscycpKS5nZXRBdHRyaWJ1dGUoJ29wZW4nKSkudG9CZVRydXRoeSgpO1xyXG4gICAgICAgICB9KTtcclxuICAgICAgIDwvZmlsZT5cclxuICAgICA8L2V4YW1wbGU+XHJcbiAqXHJcbiAqIEBlbGVtZW50IERFVEFJTFNcclxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ09wZW4gSWYgdGhlIHtAbGluayBndWlkZS9leHByZXNzaW9uIGV4cHJlc3Npb259IGlzIHRydXRoeSxcclxuICogICAgIHRoZW4gc3BlY2lhbCBhdHRyaWJ1dGUgXCJvcGVuXCIgd2lsbCBiZSBzZXQgb24gdGhlIGVsZW1lbnRcclxuICovXHJcblxyXG52YXIgbmdBdHRyaWJ1dGVBbGlhc0RpcmVjdGl2ZXMgPSB7fTtcclxuXHJcblxyXG4vLyBib29sZWFuIGF0dHJzIGFyZSBldmFsdWF0ZWRcclxuZm9yRWFjaChCT09MRUFOX0FUVFIsIGZ1bmN0aW9uKHByb3BOYW1lLCBhdHRyTmFtZSkge1xyXG4gIC8vIGJpbmRpbmcgdG8gbXVsdGlwbGUgaXMgbm90IHN1cHBvcnRlZFxyXG4gIGlmIChwcm9wTmFtZSA9PSBcIm11bHRpcGxlXCIpIHJldHVybjtcclxuXHJcbiAgdmFyIG5vcm1hbGl6ZWQgPSBkaXJlY3RpdmVOb3JtYWxpemUoJ25nLScgKyBhdHRyTmFtZSk7XHJcbiAgbmdBdHRyaWJ1dGVBbGlhc0RpcmVjdGl2ZXNbbm9ybWFsaXplZF0gPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlc3RyaWN0OiAnQScsXHJcbiAgICAgIHByaW9yaXR5OiAxMDAsXHJcbiAgICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7XHJcbiAgICAgICAgc2NvcGUuJHdhdGNoKGF0dHJbbm9ybWFsaXplZF0sIGZ1bmN0aW9uIG5nQm9vbGVhbkF0dHJXYXRjaEFjdGlvbih2YWx1ZSkge1xyXG4gICAgICAgICAgYXR0ci4kc2V0KGF0dHJOYW1lLCAhIXZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9O1xyXG59KTtcclxuXHJcbi8vIGFsaWFzZWQgaW5wdXQgYXR0cnMgYXJlIGV2YWx1YXRlZFxyXG5mb3JFYWNoKEFMSUFTRURfQVRUUiwgZnVuY3Rpb24oaHRtbEF0dHIsIG5nQXR0cikge1xyXG4gIG5nQXR0cmlidXRlQWxpYXNEaXJlY3RpdmVzW25nQXR0cl0gPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHByaW9yaXR5OiAxMDAsXHJcbiAgICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7XHJcbiAgICAgICAgLy9zcGVjaWFsIGNhc2UgbmdQYXR0ZXJuIHdoZW4gYSBsaXRlcmFsIHJlZ3VsYXIgZXhwcmVzc2lvbiB2YWx1ZVxyXG4gICAgICAgIC8vaXMgdXNlZCBhcyB0aGUgZXhwcmVzc2lvbiAodGhpcyB3YXkgd2UgZG9uJ3QgaGF2ZSB0byB3YXRjaCBhbnl0aGluZykuXHJcbiAgICAgICAgaWYgKG5nQXR0ciA9PT0gXCJuZ1BhdHRlcm5cIiAmJiBhdHRyLm5nUGF0dGVybi5jaGFyQXQoMCkgPT0gXCIvXCIpIHtcclxuICAgICAgICAgIHZhciBtYXRjaCA9IGF0dHIubmdQYXR0ZXJuLm1hdGNoKFJFR0VYX1NUUklOR19SRUdFWFApO1xyXG4gICAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIGF0dHIuJHNldChcIm5nUGF0dGVyblwiLCBuZXcgUmVnRXhwKG1hdGNoWzFdLCBtYXRjaFsyXSkpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzY29wZS4kd2F0Y2goYXR0cltuZ0F0dHJdLCBmdW5jdGlvbiBuZ0F0dHJBbGlhc1dhdGNoQWN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgICBhdHRyLiRzZXQobmdBdHRyLCB2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfTtcclxufSk7XHJcblxyXG4vLyBuZy1zcmMsIG5nLXNyY3NldCwgbmctaHJlZiBhcmUgaW50ZXJwb2xhdGVkXHJcbmZvckVhY2goWydzcmMnLCAnc3Jjc2V0JywgJ2hyZWYnXSwgZnVuY3Rpb24oYXR0ck5hbWUpIHtcclxuICB2YXIgbm9ybWFsaXplZCA9IGRpcmVjdGl2ZU5vcm1hbGl6ZSgnbmctJyArIGF0dHJOYW1lKTtcclxuICBuZ0F0dHJpYnV0ZUFsaWFzRGlyZWN0aXZlc1tub3JtYWxpemVkXSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcHJpb3JpdHk6IDk5LCAvLyBpdCBuZWVkcyB0byBydW4gYWZ0ZXIgdGhlIGF0dHJpYnV0ZXMgYXJlIGludGVycG9sYXRlZFxyXG4gICAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikge1xyXG4gICAgICAgIHZhciBwcm9wTmFtZSA9IGF0dHJOYW1lLFxyXG4gICAgICAgICAgICBuYW1lID0gYXR0ck5hbWU7XHJcblxyXG4gICAgICAgIGlmIChhdHRyTmFtZSA9PT0gJ2hyZWYnICYmXHJcbiAgICAgICAgICAgIHRvU3RyaW5nLmNhbGwoZWxlbWVudC5wcm9wKCdocmVmJykpID09PSAnW29iamVjdCBTVkdBbmltYXRlZFN0cmluZ10nKSB7XHJcbiAgICAgICAgICBuYW1lID0gJ3hsaW5rSHJlZic7XHJcbiAgICAgICAgICBhdHRyLiRhdHRyW25hbWVdID0gJ3hsaW5rOmhyZWYnO1xyXG4gICAgICAgICAgcHJvcE5hbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXR0ci4kb2JzZXJ2ZShub3JtYWxpemVkLCBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAoYXR0ck5hbWUgPT09ICdocmVmJykge1xyXG4gICAgICAgICAgICAgIGF0dHIuJHNldChuYW1lLCBudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYXR0ci4kc2V0KG5hbWUsIHZhbHVlKTtcclxuXHJcbiAgICAgICAgICAvLyBvbiBJRSwgaWYgXCJuZzpzcmNcIiBkaXJlY3RpdmUgZGVjbGFyYXRpb24gaXMgdXNlZCBhbmQgXCJzcmNcIiBhdHRyaWJ1dGUgZG9lc24ndCBleGlzdFxyXG4gICAgICAgICAgLy8gdGhlbiBjYWxsaW5nIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdzcmMnLCAnZm9vJykgZG9lc24ndCBkbyBhbnl0aGluZywgc28gd2UgbmVlZFxyXG4gICAgICAgICAgLy8gdG8gc2V0IHRoZSBwcm9wZXJ0eSBhcyB3ZWxsIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgZWZmZWN0LlxyXG4gICAgICAgICAgLy8gd2UgdXNlIGF0dHJbYXR0ck5hbWVdIHZhbHVlIHNpbmNlICRzZXQgY2FuIHNhbml0aXplIHRoZSB1cmwuXHJcbiAgICAgICAgICBpZiAobXNpZSAmJiBwcm9wTmFtZSkgZWxlbWVudC5wcm9wKHByb3BOYW1lLCBhdHRyW25hbWVdKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9O1xyXG59KTtcclxuXHJcbi8qIGdsb2JhbCAtbnVsbEZvcm1DdHJsLCAtU1VCTUlUVEVEX0NMQVNTLCBhZGRTZXRWYWxpZGl0eU1ldGhvZDogdHJ1ZVxyXG4gKi9cclxudmFyIG51bGxGb3JtQ3RybCA9IHtcclxuICAkYWRkQ29udHJvbDogbm9vcCxcclxuICAkJHJlbmFtZUNvbnRyb2w6IG51bGxGb3JtUmVuYW1lQ29udHJvbCxcclxuICAkcmVtb3ZlQ29udHJvbDogbm9vcCxcclxuICAkc2V0VmFsaWRpdHk6IG5vb3AsXHJcbiAgJHNldERpcnR5OiBub29wLFxyXG4gICRzZXRQcmlzdGluZTogbm9vcCxcclxuICAkc2V0U3VibWl0dGVkOiBub29wXHJcbn0sXHJcblNVQk1JVFRFRF9DTEFTUyA9ICduZy1zdWJtaXR0ZWQnO1xyXG5cclxuZnVuY3Rpb24gbnVsbEZvcm1SZW5hbWVDb250cm9sKGNvbnRyb2wsIG5hbWUpIHtcclxuICBjb250cm9sLiRuYW1lID0gbmFtZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyB0eXBlXHJcbiAqIEBuYW1lIGZvcm0uRm9ybUNvbnRyb2xsZXJcclxuICpcclxuICogQHByb3BlcnR5IHtib29sZWFufSAkcHJpc3RpbmUgVHJ1ZSBpZiB1c2VyIGhhcyBub3QgaW50ZXJhY3RlZCB3aXRoIHRoZSBmb3JtIHlldC5cclxuICogQHByb3BlcnR5IHtib29sZWFufSAkZGlydHkgVHJ1ZSBpZiB1c2VyIGhhcyBhbHJlYWR5IGludGVyYWN0ZWQgd2l0aCB0aGUgZm9ybS5cclxuICogQHByb3BlcnR5IHtib29sZWFufSAkdmFsaWQgVHJ1ZSBpZiBhbGwgb2YgdGhlIGNvbnRhaW5pbmcgZm9ybXMgYW5kIGNvbnRyb2xzIGFyZSB2YWxpZC5cclxuICogQHByb3BlcnR5IHtib29sZWFufSAkaW52YWxpZCBUcnVlIGlmIGF0IGxlYXN0IG9uZSBjb250YWluaW5nIGNvbnRyb2wgb3IgZm9ybSBpcyBpbnZhbGlkLlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59ICRzdWJtaXR0ZWQgVHJ1ZSBpZiB1c2VyIGhhcyBzdWJtaXR0ZWQgdGhlIGZvcm0gZXZlbiBpZiBpdHMgaW52YWxpZC5cclxuICpcclxuICogQHByb3BlcnR5IHtPYmplY3R9ICRlcnJvciBJcyBhbiBvYmplY3QgaGFzaCwgY29udGFpbmluZyByZWZlcmVuY2VzIHRvIGNvbnRyb2xzIG9yXHJcbiAqICBmb3JtcyB3aXRoIGZhaWxpbmcgdmFsaWRhdG9ycywgd2hlcmU6XHJcbiAqXHJcbiAqICAtIGtleXMgYXJlIHZhbGlkYXRpb24gdG9rZW5zIChlcnJvciBuYW1lcyksXHJcbiAqICAtIHZhbHVlcyBhcmUgYXJyYXlzIG9mIGNvbnRyb2xzIG9yIGZvcm1zIHRoYXQgaGF2ZSBhIGZhaWxpbmcgdmFsaWRhdG9yIGZvciBnaXZlbiBlcnJvciBuYW1lLlxyXG4gKlxyXG4gKiAgQnVpbHQtaW4gdmFsaWRhdGlvbiB0b2tlbnM6XHJcbiAqXHJcbiAqICAtIGBlbWFpbGBcclxuICogIC0gYG1heGBcclxuICogIC0gYG1heGxlbmd0aGBcclxuICogIC0gYG1pbmBcclxuICogIC0gYG1pbmxlbmd0aGBcclxuICogIC0gYG51bWJlcmBcclxuICogIC0gYHBhdHRlcm5gXHJcbiAqICAtIGByZXF1aXJlZGBcclxuICogIC0gYHVybGBcclxuICogIC0gYGRhdGVgXHJcbiAqICAtIGBkYXRldGltZWxvY2FsYFxyXG4gKiAgLSBgdGltZWBcclxuICogIC0gYHdlZWtgXHJcbiAqICAtIGBtb250aGBcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIGBGb3JtQ29udHJvbGxlcmAga2VlcHMgdHJhY2sgb2YgYWxsIGl0cyBjb250cm9scyBhbmQgbmVzdGVkIGZvcm1zIGFzIHdlbGwgYXMgdGhlIHN0YXRlIG9mIHRoZW0sXHJcbiAqIHN1Y2ggYXMgYmVpbmcgdmFsaWQvaW52YWxpZCBvciBkaXJ0eS9wcmlzdGluZS5cclxuICpcclxuICogRWFjaCB7QGxpbmsgbmcuZGlyZWN0aXZlOmZvcm0gZm9ybX0gZGlyZWN0aXZlIGNyZWF0ZXMgYW4gaW5zdGFuY2VcclxuICogb2YgYEZvcm1Db250cm9sbGVyYC5cclxuICpcclxuICovXHJcbi8vYXNrcyBmb3IgJHNjb3BlIHRvIGZvb2wgdGhlIEJDIGNvbnRyb2xsZXIgbW9kdWxlXHJcbkZvcm1Db250cm9sbGVyLiRpbmplY3QgPSBbJyRlbGVtZW50JywgJyRhdHRycycsICckc2NvcGUnLCAnJGFuaW1hdGUnLCAnJGludGVycG9sYXRlJ107XHJcbmZ1bmN0aW9uIEZvcm1Db250cm9sbGVyKGVsZW1lbnQsIGF0dHJzLCAkc2NvcGUsICRhbmltYXRlLCAkaW50ZXJwb2xhdGUpIHtcclxuICB2YXIgZm9ybSA9IHRoaXMsXHJcbiAgICAgIGNvbnRyb2xzID0gW107XHJcblxyXG4gIHZhciBwYXJlbnRGb3JtID0gZm9ybS4kJHBhcmVudEZvcm0gPSBlbGVtZW50LnBhcmVudCgpLmNvbnRyb2xsZXIoJ2Zvcm0nKSB8fCBudWxsRm9ybUN0cmw7XHJcblxyXG4gIC8vIGluaXQgc3RhdGVcclxuICBmb3JtLiRlcnJvciA9IHt9O1xyXG4gIGZvcm0uJCRzdWNjZXNzID0ge307XHJcbiAgZm9ybS4kcGVuZGluZyA9IHVuZGVmaW5lZDtcclxuICBmb3JtLiRuYW1lID0gJGludGVycG9sYXRlKGF0dHJzLm5hbWUgfHwgYXR0cnMubmdGb3JtIHx8ICcnKSgkc2NvcGUpO1xyXG4gIGZvcm0uJGRpcnR5ID0gZmFsc2U7XHJcbiAgZm9ybS4kcHJpc3RpbmUgPSB0cnVlO1xyXG4gIGZvcm0uJHZhbGlkID0gdHJ1ZTtcclxuICBmb3JtLiRpbnZhbGlkID0gZmFsc2U7XHJcbiAgZm9ybS4kc3VibWl0dGVkID0gZmFsc2U7XHJcblxyXG4gIHBhcmVudEZvcm0uJGFkZENvbnRyb2woZm9ybSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSBmb3JtLkZvcm1Db250cm9sbGVyIyRyb2xsYmFja1ZpZXdWYWx1ZVxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogUm9sbGJhY2sgYWxsIGZvcm0gY29udHJvbHMgcGVuZGluZyB1cGRhdGVzIHRvIHRoZSBgJG1vZGVsVmFsdWVgLlxyXG4gICAqXHJcbiAgICogVXBkYXRlcyBtYXkgYmUgcGVuZGluZyBieSBhIGRlYm91bmNlZCBldmVudCBvciBiZWNhdXNlIHRoZSBpbnB1dCBpcyB3YWl0aW5nIGZvciBhIHNvbWUgZnV0dXJlXHJcbiAgICogZXZlbnQgZGVmaW5lZCBpbiBgbmctbW9kZWwtb3B0aW9uc2AuIFRoaXMgbWV0aG9kIGlzIHR5cGljYWxseSBuZWVkZWQgYnkgdGhlIHJlc2V0IGJ1dHRvbiBvZlxyXG4gICAqIGEgZm9ybSB0aGF0IHVzZXMgYG5nLW1vZGVsLW9wdGlvbnNgIHRvIHBlbmQgdXBkYXRlcy5cclxuICAgKi9cclxuICBmb3JtLiRyb2xsYmFja1ZpZXdWYWx1ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgZm9yRWFjaChjb250cm9scywgZnVuY3Rpb24oY29udHJvbCkge1xyXG4gICAgICBjb250cm9sLiRyb2xsYmFja1ZpZXdWYWx1ZSgpO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lIGZvcm0uRm9ybUNvbnRyb2xsZXIjJGNvbW1pdFZpZXdWYWx1ZVxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogQ29tbWl0IGFsbCBmb3JtIGNvbnRyb2xzIHBlbmRpbmcgdXBkYXRlcyB0byB0aGUgYCRtb2RlbFZhbHVlYC5cclxuICAgKlxyXG4gICAqIFVwZGF0ZXMgbWF5IGJlIHBlbmRpbmcgYnkgYSBkZWJvdW5jZWQgZXZlbnQgb3IgYmVjYXVzZSB0aGUgaW5wdXQgaXMgd2FpdGluZyBmb3IgYSBzb21lIGZ1dHVyZVxyXG4gICAqIGV2ZW50IGRlZmluZWQgaW4gYG5nLW1vZGVsLW9wdGlvbnNgLiBUaGlzIG1ldGhvZCBpcyByYXJlbHkgbmVlZGVkIGFzIGBOZ01vZGVsQ29udHJvbGxlcmBcclxuICAgKiB1c3VhbGx5IGhhbmRsZXMgY2FsbGluZyB0aGlzIGluIHJlc3BvbnNlIHRvIGlucHV0IGV2ZW50cy5cclxuICAgKi9cclxuICBmb3JtLiRjb21taXRWaWV3VmFsdWUgPSBmdW5jdGlvbigpIHtcclxuICAgIGZvckVhY2goY29udHJvbHMsIGZ1bmN0aW9uKGNvbnRyb2wpIHtcclxuICAgICAgY29udHJvbC4kY29tbWl0Vmlld1ZhbHVlKCk7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgZm9ybS5Gb3JtQ29udHJvbGxlciMkYWRkQ29udHJvbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogUmVnaXN0ZXIgYSBjb250cm9sIHdpdGggdGhlIGZvcm0uXHJcbiAgICpcclxuICAgKiBJbnB1dCBlbGVtZW50cyB1c2luZyBuZ01vZGVsQ29udHJvbGxlciBkbyB0aGlzIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGV5IGFyZSBsaW5rZWQuXHJcbiAgICovXHJcbiAgZm9ybS4kYWRkQ29udHJvbCA9IGZ1bmN0aW9uKGNvbnRyb2wpIHtcclxuICAgIC8vIEJyZWFraW5nIGNoYW5nZSAtIGJlZm9yZSwgaW5wdXRzIHdob3NlIG5hbWUgd2FzIFwiaGFzT3duUHJvcGVydHlcIiB3ZXJlIHF1aWV0bHkgaWdub3JlZFxyXG4gICAgLy8gYW5kIG5vdCBhZGRlZCB0byB0aGUgc2NvcGUuICBOb3cgd2UgdGhyb3cgYW4gZXJyb3IuXHJcbiAgICBhc3NlcnROb3RIYXNPd25Qcm9wZXJ0eShjb250cm9sLiRuYW1lLCAnaW5wdXQnKTtcclxuICAgIGNvbnRyb2xzLnB1c2goY29udHJvbCk7XHJcblxyXG4gICAgaWYgKGNvbnRyb2wuJG5hbWUpIHtcclxuICAgICAgZm9ybVtjb250cm9sLiRuYW1lXSA9IGNvbnRyb2w7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gUHJpdmF0ZSBBUEk6IHJlbmFtZSBhIGZvcm0gY29udHJvbFxyXG4gIGZvcm0uJCRyZW5hbWVDb250cm9sID0gZnVuY3Rpb24oY29udHJvbCwgbmV3TmFtZSkge1xyXG4gICAgdmFyIG9sZE5hbWUgPSBjb250cm9sLiRuYW1lO1xyXG5cclxuICAgIGlmIChmb3JtW29sZE5hbWVdID09PSBjb250cm9sKSB7XHJcbiAgICAgIGRlbGV0ZSBmb3JtW29sZE5hbWVdO1xyXG4gICAgfVxyXG4gICAgZm9ybVtuZXdOYW1lXSA9IGNvbnRyb2w7XHJcbiAgICBjb250cm9sLiRuYW1lID0gbmV3TmFtZTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgZm9ybS5Gb3JtQ29udHJvbGxlciMkcmVtb3ZlQ29udHJvbFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogRGVyZWdpc3RlciBhIGNvbnRyb2wgZnJvbSB0aGUgZm9ybS5cclxuICAgKlxyXG4gICAqIElucHV0IGVsZW1lbnRzIHVzaW5nIG5nTW9kZWxDb250cm9sbGVyIGRvIHRoaXMgYXV0b21hdGljYWxseSB3aGVuIHRoZXkgYXJlIGRlc3Ryb3llZC5cclxuICAgKi9cclxuICBmb3JtLiRyZW1vdmVDb250cm9sID0gZnVuY3Rpb24oY29udHJvbCkge1xyXG4gICAgaWYgKGNvbnRyb2wuJG5hbWUgJiYgZm9ybVtjb250cm9sLiRuYW1lXSA9PT0gY29udHJvbCkge1xyXG4gICAgICBkZWxldGUgZm9ybVtjb250cm9sLiRuYW1lXTtcclxuICAgIH1cclxuICAgIGZvckVhY2goZm9ybS4kcGVuZGluZywgZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcclxuICAgICAgZm9ybS4kc2V0VmFsaWRpdHkobmFtZSwgbnVsbCwgY29udHJvbCk7XHJcbiAgICB9KTtcclxuICAgIGZvckVhY2goZm9ybS4kZXJyb3IsIGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XHJcbiAgICAgIGZvcm0uJHNldFZhbGlkaXR5KG5hbWUsIG51bGwsIGNvbnRyb2wpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgYXJyYXlSZW1vdmUoY29udHJvbHMsIGNvbnRyb2wpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgZm9ybS5Gb3JtQ29udHJvbGxlciMkc2V0VmFsaWRpdHlcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIFNldHMgdGhlIHZhbGlkaXR5IG9mIGEgZm9ybSBjb250cm9sLlxyXG4gICAqXHJcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBhbHNvIHByb3BhZ2F0ZSB0byBwYXJlbnQgZm9ybXMuXHJcbiAgICovXHJcbiAgYWRkU2V0VmFsaWRpdHlNZXRob2Qoe1xyXG4gICAgY3RybDogdGhpcyxcclxuICAgICRlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgc2V0OiBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5LCBjb250cm9sKSB7XHJcbiAgICAgIHZhciBsaXN0ID0gb2JqZWN0W3Byb3BlcnR5XTtcclxuICAgICAgaWYgKCFsaXN0KSB7XHJcbiAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IFtjb250cm9sXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgaW5kZXggPSBsaXN0LmluZGV4T2YoY29udHJvbCk7XHJcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgbGlzdC5wdXNoKGNvbnRyb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHVuc2V0OiBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5LCBjb250cm9sKSB7XHJcbiAgICAgIHZhciBsaXN0ID0gb2JqZWN0W3Byb3BlcnR5XTtcclxuICAgICAgaWYgKCFsaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGFycmF5UmVtb3ZlKGxpc3QsIGNvbnRyb2wpO1xyXG4gICAgICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBkZWxldGUgb2JqZWN0W3Byb3BlcnR5XTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHBhcmVudEZvcm06IHBhcmVudEZvcm0sXHJcbiAgICAkYW5pbWF0ZTogJGFuaW1hdGVcclxuICB9KTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lIGZvcm0uRm9ybUNvbnRyb2xsZXIjJHNldERpcnR5XHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBTZXRzIHRoZSBmb3JtIHRvIGEgZGlydHkgc3RhdGUuXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHRvIGFkZCB0aGUgJ25nLWRpcnR5JyBjbGFzcyBhbmQgc2V0IHRoZSBmb3JtIHRvIGEgZGlydHlcclxuICAgKiBzdGF0ZSAobmctZGlydHkgY2xhc3MpLiBUaGlzIG1ldGhvZCB3aWxsIGFsc28gcHJvcGFnYXRlIHRvIHBhcmVudCBmb3Jtcy5cclxuICAgKi9cclxuICBmb3JtLiRzZXREaXJ0eSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgJGFuaW1hdGUucmVtb3ZlQ2xhc3MoZWxlbWVudCwgUFJJU1RJTkVfQ0xBU1MpO1xyXG4gICAgJGFuaW1hdGUuYWRkQ2xhc3MoZWxlbWVudCwgRElSVFlfQ0xBU1MpO1xyXG4gICAgZm9ybS4kZGlydHkgPSB0cnVlO1xyXG4gICAgZm9ybS4kcHJpc3RpbmUgPSBmYWxzZTtcclxuICAgIHBhcmVudEZvcm0uJHNldERpcnR5KCk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lIGZvcm0uRm9ybUNvbnRyb2xsZXIjJHNldFByaXN0aW5lXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBTZXRzIHRoZSBmb3JtIHRvIGl0cyBwcmlzdGluZSBzdGF0ZS5cclxuICAgKlxyXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gcmVtb3ZlIHRoZSAnbmctZGlydHknIGNsYXNzIGFuZCBzZXQgdGhlIGZvcm0gdG8gaXRzIHByaXN0aW5lXHJcbiAgICogc3RhdGUgKG5nLXByaXN0aW5lIGNsYXNzKS4gVGhpcyBtZXRob2Qgd2lsbCBhbHNvIHByb3BhZ2F0ZSB0byBhbGwgdGhlIGNvbnRyb2xzIGNvbnRhaW5lZFxyXG4gICAqIGluIHRoaXMgZm9ybS5cclxuICAgKlxyXG4gICAqIFNldHRpbmcgYSBmb3JtIGJhY2sgdG8gYSBwcmlzdGluZSBzdGF0ZSBpcyBvZnRlbiB1c2VmdWwgd2hlbiB3ZSB3YW50IHRvICdyZXVzZScgYSBmb3JtIGFmdGVyXHJcbiAgICogc2F2aW5nIG9yIHJlc2V0dGluZyBpdC5cclxuICAgKi9cclxuICBmb3JtLiRzZXRQcmlzdGluZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgJGFuaW1hdGUuc2V0Q2xhc3MoZWxlbWVudCwgUFJJU1RJTkVfQ0xBU1MsIERJUlRZX0NMQVNTICsgJyAnICsgU1VCTUlUVEVEX0NMQVNTKTtcclxuICAgIGZvcm0uJGRpcnR5ID0gZmFsc2U7XHJcbiAgICBmb3JtLiRwcmlzdGluZSA9IHRydWU7XHJcbiAgICBmb3JtLiRzdWJtaXR0ZWQgPSBmYWxzZTtcclxuICAgIGZvckVhY2goY29udHJvbHMsIGZ1bmN0aW9uKGNvbnRyb2wpIHtcclxuICAgICAgY29udHJvbC4kc2V0UHJpc3RpbmUoKTtcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSBmb3JtLkZvcm1Db250cm9sbGVyIyRzZXRVbnRvdWNoZWRcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIFNldHMgdGhlIGZvcm0gdG8gaXRzIHVudG91Y2hlZCBzdGF0ZS5cclxuICAgKlxyXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gcmVtb3ZlIHRoZSAnbmctdG91Y2hlZCcgY2xhc3MgYW5kIHNldCB0aGUgZm9ybSBjb250cm9scyB0byB0aGVpclxyXG4gICAqIHVudG91Y2hlZCBzdGF0ZSAobmctdW50b3VjaGVkIGNsYXNzKS5cclxuICAgKlxyXG4gICAqIFNldHRpbmcgYSBmb3JtIGNvbnRyb2xzIGJhY2sgdG8gdGhlaXIgdW50b3VjaGVkIHN0YXRlIGlzIG9mdGVuIHVzZWZ1bCB3aGVuIHNldHRpbmcgdGhlIGZvcm1cclxuICAgKiBiYWNrIHRvIGl0cyBwcmlzdGluZSBzdGF0ZS5cclxuICAgKi9cclxuICBmb3JtLiRzZXRVbnRvdWNoZWQgPSBmdW5jdGlvbigpIHtcclxuICAgIGZvckVhY2goY29udHJvbHMsIGZ1bmN0aW9uKGNvbnRyb2wpIHtcclxuICAgICAgY29udHJvbC4kc2V0VW50b3VjaGVkKCk7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgZm9ybS5Gb3JtQ29udHJvbGxlciMkc2V0U3VibWl0dGVkXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBTZXRzIHRoZSBmb3JtIHRvIGl0cyBzdWJtaXR0ZWQgc3RhdGUuXHJcbiAgICovXHJcbiAgZm9ybS4kc2V0U3VibWl0dGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAkYW5pbWF0ZS5hZGRDbGFzcyhlbGVtZW50LCBTVUJNSVRURURfQ0xBU1MpO1xyXG4gICAgZm9ybS4kc3VibWl0dGVkID0gdHJ1ZTtcclxuICAgIHBhcmVudEZvcm0uJHNldFN1Ym1pdHRlZCgpO1xyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIG5nRm9ybVxyXG4gKiBAcmVzdHJpY3QgRUFDXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBOZXN0YWJsZSBhbGlhcyBvZiB7QGxpbmsgbmcuZGlyZWN0aXZlOmZvcm0gYGZvcm1gfSBkaXJlY3RpdmUuIEhUTUxcclxuICogZG9lcyBub3QgYWxsb3cgbmVzdGluZyBvZiBmb3JtIGVsZW1lbnRzLiBJdCBpcyB1c2VmdWwgdG8gbmVzdCBmb3JtcywgZm9yIGV4YW1wbGUgaWYgdGhlIHZhbGlkaXR5IG9mIGFcclxuICogc3ViLWdyb3VwIG9mIGNvbnRyb2xzIG5lZWRzIHRvIGJlIGRldGVybWluZWQuXHJcbiAqXHJcbiAqIE5vdGU6IHRoZSBwdXJwb3NlIG9mIGBuZ0Zvcm1gIGlzIHRvIGdyb3VwIGNvbnRyb2xzLFxyXG4gKiBidXQgbm90IHRvIGJlIGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBgPGZvcm0+YCB0YWcgd2l0aCBhbGwgb2YgaXRzIGNhcGFiaWxpdGllc1xyXG4gKiAoZS5nLiBwb3N0aW5nIHRvIHRoZSBzZXJ2ZXIsIC4uLikuXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbmdGb3JtfG5hbWUgTmFtZSBvZiB0aGUgZm9ybS4gSWYgc3BlY2lmaWVkLCB0aGUgZm9ybSBjb250cm9sbGVyIHdpbGwgYmUgcHVibGlzaGVkIGludG9cclxuICogICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWQgc2NvcGUsIHVuZGVyIHRoaXMgbmFtZS5cclxuICpcclxuICovXHJcblxyXG4gLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgZm9ybVxyXG4gKiBAcmVzdHJpY3QgRVxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogRGlyZWN0aXZlIHRoYXQgaW5zdGFudGlhdGVzXHJcbiAqIHtAbGluayBmb3JtLkZvcm1Db250cm9sbGVyIEZvcm1Db250cm9sbGVyfS5cclxuICpcclxuICogSWYgdGhlIGBuYW1lYCBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCB0aGUgZm9ybSBjb250cm9sbGVyIGlzIHB1Ymxpc2hlZCBvbnRvIHRoZSBjdXJyZW50IHNjb3BlIHVuZGVyXHJcbiAqIHRoaXMgbmFtZS5cclxuICpcclxuICogIyBBbGlhczoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0Zvcm0gYG5nRm9ybWB9XHJcbiAqXHJcbiAqIEluIEFuZ3VsYXIgZm9ybXMgY2FuIGJlIG5lc3RlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBvdXRlciBmb3JtIGlzIHZhbGlkIHdoZW4gYWxsIG9mIHRoZSBjaGlsZFxyXG4gKiBmb3JtcyBhcmUgdmFsaWQgYXMgd2VsbC4gSG93ZXZlciwgYnJvd3NlcnMgZG8gbm90IGFsbG93IG5lc3Rpbmcgb2YgYDxmb3JtPmAgZWxlbWVudHMsIHNvXHJcbiAqIEFuZ3VsYXIgcHJvdmlkZXMgdGhlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdGb3JtIGBuZ0Zvcm1gfSBkaXJlY3RpdmUgd2hpY2ggYmVoYXZlcyBpZGVudGljYWxseSB0b1xyXG4gKiBgPGZvcm0+YCBidXQgY2FuIGJlIG5lc3RlZC4gIFRoaXMgYWxsb3dzIHlvdSB0byBoYXZlIG5lc3RlZCBmb3Jtcywgd2hpY2ggaXMgdmVyeSB1c2VmdWwgd2hlblxyXG4gKiB1c2luZyBBbmd1bGFyIHZhbGlkYXRpb24gZGlyZWN0aXZlcyBpbiBmb3JtcyB0aGF0IGFyZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgdXNpbmcgdGhlXHJcbiAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdSZXBlYXQgYG5nUmVwZWF0YH0gZGlyZWN0aXZlLiBTaW5jZSB5b3UgY2Fubm90IGR5bmFtaWNhbGx5IGdlbmVyYXRlIHRoZSBgbmFtZWBcclxuICogYXR0cmlidXRlIG9mIGlucHV0IGVsZW1lbnRzIHVzaW5nIGludGVycG9sYXRpb24sIHlvdSBoYXZlIHRvIHdyYXAgZWFjaCBzZXQgb2YgcmVwZWF0ZWQgaW5wdXRzIGluIGFuXHJcbiAqIGBuZ0Zvcm1gIGRpcmVjdGl2ZSBhbmQgbmVzdCB0aGVzZSBpbiBhbiBvdXRlciBgZm9ybWAgZWxlbWVudC5cclxuICpcclxuICpcclxuICogIyBDU1MgY2xhc3Nlc1xyXG4gKiAgLSBgbmctdmFsaWRgIGlzIHNldCBpZiB0aGUgZm9ybSBpcyB2YWxpZC5cclxuICogIC0gYG5nLWludmFsaWRgIGlzIHNldCBpZiB0aGUgZm9ybSBpcyBpbnZhbGlkLlxyXG4gKiAgLSBgbmctcHJpc3RpbmVgIGlzIHNldCBpZiB0aGUgZm9ybSBpcyBwcmlzdGluZS5cclxuICogIC0gYG5nLWRpcnR5YCBpcyBzZXQgaWYgdGhlIGZvcm0gaXMgZGlydHkuXHJcbiAqICAtIGBuZy1zdWJtaXR0ZWRgIGlzIHNldCBpZiB0aGUgZm9ybSB3YXMgc3VibWl0dGVkLlxyXG4gKlxyXG4gKiBLZWVwIGluIG1pbmQgdGhhdCBuZ0FuaW1hdGUgY2FuIGRldGVjdCBlYWNoIG9mIHRoZXNlIGNsYXNzZXMgd2hlbiBhZGRlZCBhbmQgcmVtb3ZlZC5cclxuICpcclxuICpcclxuICogIyBTdWJtaXR0aW5nIGEgZm9ybSBhbmQgcHJldmVudGluZyB0aGUgZGVmYXVsdCBhY3Rpb25cclxuICpcclxuICogU2luY2UgdGhlIHJvbGUgb2YgZm9ybXMgaW4gY2xpZW50LXNpZGUgQW5ndWxhciBhcHBsaWNhdGlvbnMgaXMgZGlmZmVyZW50IHRoYW4gaW4gY2xhc3NpY2FsXHJcbiAqIHJvdW5kdHJpcCBhcHBzLCBpdCBpcyBkZXNpcmFibGUgZm9yIHRoZSBicm93c2VyIG5vdCB0byB0cmFuc2xhdGUgdGhlIGZvcm0gc3VibWlzc2lvbiBpbnRvIGEgZnVsbFxyXG4gKiBwYWdlIHJlbG9hZCB0aGF0IHNlbmRzIHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXIuIEluc3RlYWQgc29tZSBqYXZhc2NyaXB0IGxvZ2ljIHNob3VsZCBiZSB0cmlnZ2VyZWRcclxuICogdG8gaGFuZGxlIHRoZSBmb3JtIHN1Ym1pc3Npb24gaW4gYW4gYXBwbGljYXRpb24tc3BlY2lmaWMgd2F5LlxyXG4gKlxyXG4gKiBGb3IgdGhpcyByZWFzb24sIEFuZ3VsYXIgcHJldmVudHMgdGhlIGRlZmF1bHQgYWN0aW9uIChmb3JtIHN1Ym1pc3Npb24gdG8gdGhlIHNlcnZlcikgdW5sZXNzIHRoZVxyXG4gKiBgPGZvcm0+YCBlbGVtZW50IGhhcyBhbiBgYWN0aW9uYCBhdHRyaWJ1dGUgc3BlY2lmaWVkLlxyXG4gKlxyXG4gKiBZb3UgY2FuIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0d28gd2F5cyB0byBzcGVjaWZ5IHdoYXQgamF2YXNjcmlwdCBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCB3aGVuXHJcbiAqIGEgZm9ybSBpcyBzdWJtaXR0ZWQ6XHJcbiAqXHJcbiAqIC0ge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ1N1Ym1pdCBuZ1N1Ym1pdH0gZGlyZWN0aXZlIG9uIHRoZSBmb3JtIGVsZW1lbnRcclxuICogLSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ2xpY2sgbmdDbGlja30gZGlyZWN0aXZlIG9uIHRoZSBmaXJzdFxyXG4gICogIGJ1dHRvbiBvciBpbnB1dCBmaWVsZCBvZiB0eXBlIHN1Ym1pdCAoaW5wdXRbdHlwZT1zdWJtaXRdKVxyXG4gKlxyXG4gKiBUbyBwcmV2ZW50IGRvdWJsZSBleGVjdXRpb24gb2YgdGhlIGhhbmRsZXIsIHVzZSBvbmx5IG9uZSBvZiB0aGUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ1N1Ym1pdCBuZ1N1Ym1pdH1cclxuICogb3Ige0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NsaWNrIG5nQ2xpY2t9IGRpcmVjdGl2ZXMuXHJcbiAqIFRoaXMgaXMgYmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGZvcm0gc3VibWlzc2lvbiBydWxlcyBpbiB0aGUgSFRNTCBzcGVjaWZpY2F0aW9uOlxyXG4gKlxyXG4gKiAtIElmIGEgZm9ybSBoYXMgb25seSBvbmUgaW5wdXQgZmllbGQgdGhlbiBoaXR0aW5nIGVudGVyIGluIHRoaXMgZmllbGQgdHJpZ2dlcnMgZm9ybSBzdWJtaXRcclxuICogKGBuZ1N1Ym1pdGApXHJcbiAqIC0gaWYgYSBmb3JtIGhhcyAyKyBpbnB1dCBmaWVsZHMgYW5kIG5vIGJ1dHRvbnMgb3IgaW5wdXRbdHlwZT1zdWJtaXRdIHRoZW4gaGl0dGluZyBlbnRlclxyXG4gKiBkb2Vzbid0IHRyaWdnZXIgc3VibWl0XHJcbiAqIC0gaWYgYSBmb3JtIGhhcyBvbmUgb3IgbW9yZSBpbnB1dCBmaWVsZHMgYW5kIG9uZSBvciBtb3JlIGJ1dHRvbnMgb3IgaW5wdXRbdHlwZT1zdWJtaXRdIHRoZW5cclxuICogaGl0dGluZyBlbnRlciBpbiBhbnkgb2YgdGhlIGlucHV0IGZpZWxkcyB3aWxsIHRyaWdnZXIgdGhlIGNsaWNrIGhhbmRsZXIgb24gdGhlICpmaXJzdCogYnV0dG9uIG9yXHJcbiAqIGlucHV0W3R5cGU9c3VibWl0XSAoYG5nQ2xpY2tgKSAqYW5kKiBhIHN1Ym1pdCBoYW5kbGVyIG9uIHRoZSBlbmNsb3NpbmcgZm9ybSAoYG5nU3VibWl0YClcclxuICpcclxuICogQW55IHBlbmRpbmcgYG5nTW9kZWxPcHRpb25zYCBjaGFuZ2VzIHdpbGwgdGFrZSBwbGFjZSBpbW1lZGlhdGVseSB3aGVuIGFuIGVuY2xvc2luZyBmb3JtIGlzXHJcbiAqIHN1Ym1pdHRlZC4gTm90ZSB0aGF0IGBuZ0NsaWNrYCBldmVudHMgd2lsbCBvY2N1ciBiZWZvcmUgdGhlIG1vZGVsIGlzIHVwZGF0ZWQuIFVzZSBgbmdTdWJtaXRgXHJcbiAqIHRvIGhhdmUgYWNjZXNzIHRvIHRoZSB1cGRhdGVkIG1vZGVsLlxyXG4gKlxyXG4gKiAjIyBBbmltYXRpb24gSG9va3NcclxuICpcclxuICogQW5pbWF0aW9ucyBpbiBuZ0Zvcm0gYXJlIHRyaWdnZXJlZCB3aGVuIGFueSBvZiB0aGUgYXNzb2NpYXRlZCBDU1MgY2xhc3NlcyBhcmUgYWRkZWQgYW5kIHJlbW92ZWQuXHJcbiAqIFRoZXNlIGNsYXNzZXMgYXJlOiBgLm5nLXByaXN0aW5lYCwgYC5uZy1kaXJ0eWAsIGAubmctaW52YWxpZGAgYW5kIGAubmctdmFsaWRgIGFzIHdlbGwgYXMgYW55XHJcbiAqIG90aGVyIHZhbGlkYXRpb25zIHRoYXQgYXJlIHBlcmZvcm1lZCB3aXRoaW4gdGhlIGZvcm0uIEFuaW1hdGlvbnMgaW4gbmdGb3JtIGFyZSBzaW1pbGFyIHRvIGhvd1xyXG4gKiB0aGV5IHdvcmsgaW4gbmdDbGFzcyBhbmQgYW5pbWF0aW9ucyBjYW4gYmUgaG9va2VkIGludG8gdXNpbmcgQ1NTIHRyYW5zaXRpb25zLCBrZXlmcmFtZXMgYXMgd2VsbFxyXG4gKiBhcyBKUyBhbmltYXRpb25zLlxyXG4gKlxyXG4gKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgYSBzaW1wbGUgd2F5IHRvIHV0aWxpemUgQ1NTIHRyYW5zaXRpb25zIHRvIHN0eWxlIGEgZm9ybSBlbGVtZW50XHJcbiAqIHRoYXQgaGFzIGJlZW4gcmVuZGVyZWQgYXMgaW52YWxpZCBhZnRlciBpdCBoYXMgYmVlbiB2YWxpZGF0ZWQ6XHJcbiAqXHJcbiAqIDxwcmU+XHJcbiAqIC8vYmUgc3VyZSB0byBpbmNsdWRlIG5nQW5pbWF0ZSBhcyBhIG1vZHVsZSB0byBob29rIGludG8gbW9yZVxyXG4gKiAvL2FkdmFuY2VkIGFuaW1hdGlvbnNcclxuICogLm15LWZvcm0ge1xyXG4gKiAgIHRyYW5zaXRpb246MC41cyBsaW5lYXIgYWxsO1xyXG4gKiAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gKiB9XHJcbiAqIC5teS1mb3JtLm5nLWludmFsaWQge1xyXG4gKiAgIGJhY2tncm91bmQ6IHJlZDtcclxuICogICBjb2xvcjp3aGl0ZTtcclxuICogfVxyXG4gKiA8L3ByZT5cclxuICpcclxuICogQGV4YW1wbGVcclxuICAgIDxleGFtcGxlIGRlcHM9XCJhbmd1bGFyLWFuaW1hdGUuanNcIiBhbmltYXRpb25zPVwidHJ1ZVwiIGZpeEJhc2U9XCJ0cnVlXCIgbW9kdWxlPVwiZm9ybUV4YW1wbGVcIj5cclxuICAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgIDxzY3JpcHQ+XHJcbiAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdmb3JtRXhhbXBsZScsIFtdKVxyXG4gICAgICAgICAgIC5jb250cm9sbGVyKCdGb3JtQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAgICAgICAgICAgICAkc2NvcGUudXNlclR5cGUgPSAnZ3Vlc3QnO1xyXG4gICAgICAgICAgIH1dKTtcclxuICAgICAgIDwvc2NyaXB0PlxyXG4gICAgICAgPHN0eWxlPlxyXG4gICAgICAgIC5teS1mb3JtIHtcclxuICAgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjphbGwgbGluZWFyIDAuNXM7XHJcbiAgICAgICAgICB0cmFuc2l0aW9uOmFsbCBsaW5lYXIgMC41cztcclxuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICAubXktZm9ybS5uZy1pbnZhbGlkIHtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IHJlZDtcclxuICAgICAgICB9XHJcbiAgICAgICA8L3N0eWxlPlxyXG4gICAgICAgPGZvcm0gbmFtZT1cIm15Rm9ybVwiIG5nLWNvbnRyb2xsZXI9XCJGb3JtQ29udHJvbGxlclwiIGNsYXNzPVwibXktZm9ybVwiPlxyXG4gICAgICAgICB1c2VyVHlwZTogPGlucHV0IG5hbWU9XCJpbnB1dFwiIG5nLW1vZGVsPVwidXNlclR5cGVcIiByZXF1aXJlZD5cclxuICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiIG5nLXNob3c9XCJteUZvcm0uaW5wdXQuJGVycm9yLnJlcXVpcmVkXCI+UmVxdWlyZWQhPC9zcGFuPjxicj5cclxuICAgICAgICAgPHR0PnVzZXJUeXBlID0ge3t1c2VyVHlwZX19PC90dD48YnI+XHJcbiAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0Pjxicj5cclxuICAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyPlxyXG4gICAgICAgICA8dHQ+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48YnI+XHJcbiAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyPlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgICAgPC9maWxlPlxyXG4gICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICB2YXIgdXNlclR5cGUgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ3VzZXJUeXBlJykpO1xyXG4gICAgICAgICAgdmFyIHZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpO1xyXG5cclxuICAgICAgICAgIGV4cGVjdCh1c2VyVHlwZS5nZXRUZXh0KCkpLnRvQ29udGFpbignZ3Vlc3QnKTtcclxuICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbigndHJ1ZScpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgZW1wdHknLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHZhciB1c2VyVHlwZSA9IGVsZW1lbnQoYnkuYmluZGluZygndXNlclR5cGUnKSk7XHJcbiAgICAgICAgICB2YXIgdmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSk7XHJcbiAgICAgICAgICB2YXIgdXNlcklucHV0ID0gZWxlbWVudChieS5tb2RlbCgndXNlclR5cGUnKSk7XHJcblxyXG4gICAgICAgICAgdXNlcklucHV0LmNsZWFyKCk7XHJcbiAgICAgICAgICB1c2VySW5wdXQuc2VuZEtleXMoJycpO1xyXG5cclxuICAgICAgICAgIGV4cGVjdCh1c2VyVHlwZS5nZXRUZXh0KCkpLnRvRXF1YWwoJ3VzZXJUeXBlID0nKTtcclxuICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTtcclxuICAgICAgICB9KTtcclxuICAgICAgPC9maWxlPlxyXG4gICAgPC9leGFtcGxlPlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgTmFtZSBvZiB0aGUgZm9ybS4gSWYgc3BlY2lmaWVkLCB0aGUgZm9ybSBjb250cm9sbGVyIHdpbGwgYmUgcHVibGlzaGVkIGludG9cclxuICogICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWQgc2NvcGUsIHVuZGVyIHRoaXMgbmFtZS5cclxuICovXHJcbnZhciBmb3JtRGlyZWN0aXZlRmFjdG9yeSA9IGZ1bmN0aW9uKGlzTmdGb3JtKSB7XHJcbiAgcmV0dXJuIFsnJHRpbWVvdXQnLCBmdW5jdGlvbigkdGltZW91dCkge1xyXG4gICAgdmFyIGZvcm1EaXJlY3RpdmUgPSB7XHJcbiAgICAgIG5hbWU6ICdmb3JtJyxcclxuICAgICAgcmVzdHJpY3Q6IGlzTmdGb3JtID8gJ0VBQycgOiAnRScsXHJcbiAgICAgIGNvbnRyb2xsZXI6IEZvcm1Db250cm9sbGVyLFxyXG4gICAgICBjb21waWxlOiBmdW5jdGlvbiBuZ0Zvcm1Db21waWxlKGZvcm1FbGVtZW50KSB7XHJcbiAgICAgICAgLy8gU2V0dXAgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgY29udHJvbFxyXG4gICAgICAgIGZvcm1FbGVtZW50LmFkZENsYXNzKFBSSVNUSU5FX0NMQVNTKS5hZGRDbGFzcyhWQUxJRF9DTEFTUyk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBwcmU6IGZ1bmN0aW9uIG5nRm9ybVByZUxpbmsoc2NvcGUsIGZvcm1FbGVtZW50LCBhdHRyLCBjb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIGBhY3Rpb25gIGF0dHIgaXMgbm90IHByZXNlbnQgb24gdGhlIGZvcm0sIHByZXZlbnQgdGhlIGRlZmF1bHQgYWN0aW9uIChzdWJtaXNzaW9uKVxyXG4gICAgICAgICAgICBpZiAoISgnYWN0aW9uJyBpbiBhdHRyKSkge1xyXG4gICAgICAgICAgICAgIC8vIHdlIGNhbid0IHVzZSBqcSBldmVudHMgYmVjYXVzZSBpZiBhIGZvcm0gaXMgZGVzdHJveWVkIGR1cmluZyBzdWJtaXNzaW9uIHRoZSBkZWZhdWx0XHJcbiAgICAgICAgICAgICAgLy8gYWN0aW9uIGlzIG5vdCBwcmV2ZW50ZWQuIHNlZSAjMTIzOFxyXG4gICAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgICAgLy8gSUUgOSBpcyBub3QgYWZmZWN0ZWQgYmVjYXVzZSBpdCBkb2Vzbid0IGZpcmUgYSBzdWJtaXQgZXZlbnQgYW5kIHRyeSB0byBkbyBhIGZ1bGxcclxuICAgICAgICAgICAgICAvLyBwYWdlIHJlbG9hZCBpZiB0aGUgZm9ybSB3YXMgZGVzdHJveWVkIGJ5IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0gdmlhIGEgY2xpY2sgaGFuZGxlclxyXG4gICAgICAgICAgICAgIC8vIG9uIGEgYnV0dG9uIGluIHRoZSBmb3JtLiBMb29rcyBsaWtlIGFuIElFOSBzcGVjaWZpYyBidWcuXHJcbiAgICAgICAgICAgICAgdmFyIGhhbmRsZUZvcm1TdWJtaXNzaW9uID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgY29udHJvbGxlci4kY29tbWl0Vmlld1ZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuJHNldFN1Ym1pdHRlZCgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHRcclxuICAgICAgICAgICAgICAgICAgPyBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgICAgICAgICAgIDogZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTsgLy8gSUVcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyRm4oZm9ybUVsZW1lbnRbMF0sICdzdWJtaXQnLCBoYW5kbGVGb3JtU3VibWlzc2lvbik7XHJcblxyXG4gICAgICAgICAgICAgIC8vIHVucmVnaXN0ZXIgdGhlIHByZXZlbnREZWZhdWx0IGxpc3RlbmVyIHNvIHRoYXQgd2UgZG9uJ3Qgbm90IGxlYWsgbWVtb3J5IGJ1dCBpbiBhXHJcbiAgICAgICAgICAgICAgLy8gd2F5IHRoYXQgd2lsbCBhY2hpZXZlIHRoZSBwcmV2ZW50aW9uIG9mIHRoZSBkZWZhdWx0IGFjdGlvbi5cclxuICAgICAgICAgICAgICBmb3JtRWxlbWVudC5vbignJGRlc3Ryb3knLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyRm4oZm9ybUVsZW1lbnRbMF0sICdzdWJtaXQnLCBoYW5kbGVGb3JtU3VibWlzc2lvbik7XHJcbiAgICAgICAgICAgICAgICB9LCAwLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRGb3JtQ3RybCA9IGNvbnRyb2xsZXIuJCRwYXJlbnRGb3JtLFxyXG4gICAgICAgICAgICAgICAgYWxpYXMgPSBjb250cm9sbGVyLiRuYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFsaWFzKSB7XHJcbiAgICAgICAgICAgICAgc2V0dGVyKHNjb3BlLCBhbGlhcywgY29udHJvbGxlciwgYWxpYXMpO1xyXG4gICAgICAgICAgICAgIGF0dHIuJG9ic2VydmUoYXR0ci5uYW1lID8gJ25hbWUnIDogJ25nRm9ybScsIGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWxpYXMgPT09IG5ld1ZhbHVlKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBzZXR0ZXIoc2NvcGUsIGFsaWFzLCB1bmRlZmluZWQsIGFsaWFzKTtcclxuICAgICAgICAgICAgICAgIGFsaWFzID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgICAgICBzZXR0ZXIoc2NvcGUsIGFsaWFzLCBjb250cm9sbGVyLCBhbGlhcyk7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRGb3JtQ3RybC4kJHJlbmFtZUNvbnRyb2woY29udHJvbGxlciwgYWxpYXMpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvcm1FbGVtZW50Lm9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgIHBhcmVudEZvcm1DdHJsLiRyZW1vdmVDb250cm9sKGNvbnRyb2xsZXIpO1xyXG4gICAgICAgICAgICAgIGlmIChhbGlhcykge1xyXG4gICAgICAgICAgICAgICAgc2V0dGVyKHNjb3BlLCBhbGlhcywgdW5kZWZpbmVkLCBhbGlhcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGV4dGVuZChjb250cm9sbGVyLCBudWxsRm9ybUN0cmwpOyAvL3N0b3AgcHJvcGFnYXRpbmcgY2hpbGQgZGVzdHJ1Y3Rpb24gaGFuZGxlcnMgdXB3YXJkc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBmb3JtRGlyZWN0aXZlO1xyXG4gIH1dO1xyXG59O1xyXG5cclxudmFyIGZvcm1EaXJlY3RpdmUgPSBmb3JtRGlyZWN0aXZlRmFjdG9yeSgpO1xyXG52YXIgbmdGb3JtRGlyZWN0aXZlID0gZm9ybURpcmVjdGl2ZUZhY3RvcnkodHJ1ZSk7XHJcblxyXG4vKiBnbG9iYWwgVkFMSURfQ0xBU1M6IHRydWUsXHJcbiAgSU5WQUxJRF9DTEFTUzogdHJ1ZSxcclxuICBQUklTVElORV9DTEFTUzogdHJ1ZSxcclxuICBESVJUWV9DTEFTUzogdHJ1ZSxcclxuICBVTlRPVUNIRURfQ0xBU1M6IHRydWUsXHJcbiAgVE9VQ0hFRF9DTEFTUzogdHJ1ZSxcclxuKi9cclxuXHJcbi8vIFJlZ2V4IGNvZGUgaXMgb2J0YWluZWQgZnJvbSBTTzogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzE0MzA3MC9qYXZhc2NyaXB0LXJlZ2V4LWlzby1kYXRldGltZSNhbnN3ZXItMzE0MzIzMVxyXG52YXIgSVNPX0RBVEVfUkVHRVhQID0gL1xcZHs0fS1bMDFdXFxkLVswLTNdXFxkVFswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkXFwuXFxkKyhbKy1dWzAtMl1cXGQ6WzAtNV1cXGR8WikvO1xyXG52YXIgVVJMX1JFR0VYUCA9IC9eKGZ0cHxodHRwfGh0dHBzKTpcXC9cXC8oXFx3Kzp7MCwxfVxcdypAKT8oXFxTKykoOlswLTldKyk/KFxcL3xcXC8oW1xcdyMhOi4/Kz0mJUAhXFwtXFwvXSkpPyQvO1xyXG52YXIgRU1BSUxfUkVHRVhQID0gL15bYS16MC05ISMkJSYnKitcXC89P15fYHt8fX4uLV0rQFthLXowLTldKFthLXowLTktXSpbYS16MC05XSk/KFxcLlthLXowLTldKFthLXowLTktXSpbYS16MC05XSk/KSokL2k7XHJcbnZhciBOVU1CRVJfUkVHRVhQID0gL15cXHMqKFxcLXxcXCspPyhcXGQrfChcXGQqKFxcLlxcZCopKSlcXHMqJC87XHJcbnZhciBEQVRFX1JFR0VYUCA9IC9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSkkLztcclxudmFyIERBVEVUSU1FTE9DQUxfUkVHRVhQID0gL14oXFxkezR9KS0oXFxkXFxkKS0oXFxkXFxkKVQoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKShcXC5cXGR7MSwzfSk/KT8kLztcclxudmFyIFdFRUtfUkVHRVhQID0gL14oXFxkezR9KS1XKFxcZFxcZCkkLztcclxudmFyIE1PTlRIX1JFR0VYUCA9IC9eKFxcZHs0fSktKFxcZFxcZCkkLztcclxudmFyIFRJTUVfUkVHRVhQID0gL14oXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKShcXC5cXGR7MSwzfSk/KT8kLztcclxudmFyIERFRkFVTFRfUkVHRVhQID0gLyhcXHMrfF4pZGVmYXVsdChcXHMrfCQpLztcclxuXHJcbnZhciAkbmdNb2RlbE1pbkVyciA9IG5ldyBtaW5FcnIoJ25nTW9kZWwnKTtcclxuXHJcbnZhciBpbnB1dFR5cGUgPSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBpbnB1dFxyXG4gICAqIEBuYW1lIGlucHV0W3RleHRdXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBTdGFuZGFyZCBIVE1MIHRleHQgaW5wdXQgd2l0aCBhbmd1bGFyIGRhdGEgYmluZGluZywgaW5oZXJpdGVkIGJ5IG1vc3Qgb2YgdGhlIGBpbnB1dGAgZWxlbWVudHMuXHJcbiAgICpcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBlbnRlcmVkLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0b1xyXG4gICAqICAgIHRoZSBlbGVtZW50IHdoZW4gdGhlIG5nUmVxdWlyZWQgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gdHJ1ZS4gVXNlIGBuZ1JlcXVpcmVkYCBpbnN0ZWFkIG9mXHJcbiAgICogICAgYHJlcXVpcmVkYCB3aGVuIHlvdSB3YW50IHRvIGRhdGEtYmluZCB0byB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBuZ01pbmxlbmd0aCBTZXRzIGBtaW5sZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBzaG9ydGVyIHRoYW5cclxuICAgKiAgICBtaW5sZW5ndGguXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBuZ01heGxlbmd0aCBTZXRzIGBtYXhsZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBsb25nZXIgdGhhblxyXG4gICAqICAgIG1heGxlbmd0aC5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IHBhdHRlcm4gU2ltaWxhciB0byBgbmdQYXR0ZXJuYCBleGNlcHQgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGlzIHRoZSBhY3R1YWwgc3RyaW5nXHJcbiAgICogICAgdGhhdCBjb250YWlucyB0aGUgcmVndWxhciBleHByZXNzaW9uIGJvZHkgdGhhdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvblxyXG4gICAqICAgIGFzIGluIHRoZSBuZ1BhdHRlcm4gZGlyZWN0aXZlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdQYXR0ZXJuIFNldHMgYHBhdHRlcm5gIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSBuZ01vZGVsIHZhbHVlIGRvZXMgbm90IG1hdGNoXHJcbiAgICogICAgYSBSZWdFeHAgZm91bmQgYnkgZXZhbHVhdGluZyB0aGUgQW5ndWxhciBleHByZXNzaW9uIGdpdmVuIGluIHRoZSBhdHRyaWJ1dGUgdmFsdWUuXHJcbiAgICogICAgSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgUmVnRXhwIG9iamVjdCB0aGVuIHRoaXMgaXMgdXNlZCBkaXJlY3RseS5cclxuICAgKiAgICBJZiB0aGUgZXhwcmVzc2lvbiBpcyBhIHN0cmluZyB0aGVuIGl0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgUmVnRXhwIGFmdGVyIHdyYXBwaW5nIGl0IGluIGBeYCBhbmQgYCRgXHJcbiAgICogICAgY2hhcmFjdGVycy4gRm9yIGluc3RhbmNlLCBgXCJhYmNcImAgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYG5ldyBSZWdFeHAoJ15hYmMkJylgLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNlclxyXG4gICAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuXHJcbiAgICogQHBhcmFtIHtib29sZWFuPX0gW25nVHJpbT10cnVlXSBJZiBzZXQgdG8gZmFsc2UgQW5ndWxhciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHRyaW0gdGhlIGlucHV0LlxyXG4gICAqICAgIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgZm9yIGlucHV0W3R5cGU9cGFzc3dvcmRdIGNvbnRyb2xzLCB3aGljaCB3aWxsIG5ldmVyIHRyaW0gdGhlXHJcbiAgICogICAgaW5wdXQuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAgICA8ZXhhbXBsZSBuYW1lPVwidGV4dC1pbnB1dC1kaXJlY3RpdmVcIiBtb2R1bGU9XCJ0ZXh0SW5wdXRFeGFtcGxlXCI+XHJcbiAgICAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgICAgPHNjcmlwdD5cclxuICAgICAgICAgICBhbmd1bGFyLm1vZHVsZSgndGV4dElucHV0RXhhbXBsZScsIFtdKVxyXG4gICAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcclxuICAgICAgICAgICAgICAgJHNjb3BlLnRleHQgPSAnZ3Vlc3QnO1xyXG4gICAgICAgICAgICAgICAkc2NvcGUud29yZCA9IC9eXFxzKlxcdypcXHMqJC87XHJcbiAgICAgICAgICAgICB9XSk7XHJcbiAgICAgICAgIDwvc2NyaXB0PlxyXG4gICAgICAgICA8Zm9ybSBuYW1lPVwibXlGb3JtXCIgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XHJcbiAgICAgICAgICAgU2luZ2xlIHdvcmQ6IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJpbnB1dFwiIG5nLW1vZGVsPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZy1wYXR0ZXJuPVwid29yZFwiIHJlcXVpcmVkIG5nLXRyaW09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPlxyXG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci5wYXR0ZXJuXCI+XHJcbiAgICAgICAgICAgICBTaW5nbGUgd29yZCBvbmx5ITwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgPHR0PnRleHQgPSB7e3RleHR9fTwvdHQ+PGJyLz5cclxuICAgICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiR2YWxpZCA9IHt7bXlGb3JtLmlucHV0LiR2YWxpZH19PC90dD48YnIvPlxyXG4gICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJGVycm9yID0ge3tteUZvcm0uaW5wdXQuJGVycm9yfX08L3R0Pjxici8+XHJcbiAgICAgICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz5cclxuICAgICAgICAgICA8dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVkfX08L3R0Pjxici8+XHJcbiAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgPC9maWxlPlxyXG4gICAgICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgICAgIHZhciB0ZXh0ID0gZWxlbWVudChieS5iaW5kaW5nKCd0ZXh0JykpO1xyXG4gICAgICAgICAgdmFyIHZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpO1xyXG4gICAgICAgICAgdmFyIGlucHV0ID0gZWxlbWVudChieS5tb2RlbCgndGV4dCcpKTtcclxuXHJcbiAgICAgICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgZXhwZWN0KHRleHQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2d1ZXN0Jyk7XHJcbiAgICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbigndHJ1ZScpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlucHV0LmNsZWFyKCk7XHJcbiAgICAgICAgICAgIGlucHV0LnNlbmRLZXlzKCcnKTtcclxuXHJcbiAgICAgICAgICAgIGV4cGVjdCh0ZXh0LmdldFRleHQoKSkudG9FcXVhbCgndGV4dCA9Jyk7XHJcbiAgICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBtdWx0aSB3b3JkJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlucHV0LmNsZWFyKCk7XHJcbiAgICAgICAgICAgIGlucHV0LnNlbmRLZXlzKCdoZWxsbyB3b3JsZCcpO1xyXG5cclxuICAgICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdmYWxzZScpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgPC9maWxlPlxyXG4gICAgICA8L2V4YW1wbGU+XHJcbiAgICovXHJcbiAgJ3RleHQnOiB0ZXh0SW5wdXRUeXBlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5nZG9jIGlucHV0XHJcbiAgICAgKiBAbmFtZSBpbnB1dFtkYXRlXVxyXG4gICAgICpcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogSW5wdXQgd2l0aCBkYXRlIHZhbGlkYXRpb24gYW5kIHRyYW5zZm9ybWF0aW9uLiBJbiBicm93c2VycyB0aGF0IGRvIG5vdCB5ZXQgc3VwcG9ydFxyXG4gICAgICogdGhlIEhUTUw1IGRhdGUgaW5wdXQsIGEgdGV4dCBlbGVtZW50IHdpbGwgYmUgdXNlZC4gSW4gdGhhdCBjYXNlLCB0ZXh0IG11c3QgYmUgZW50ZXJlZCBpbiBhIHZhbGlkIElTTy04NjAxXHJcbiAgICAgKiBkYXRlIGZvcm1hdCAoeXl5eS1NTS1kZCksIGZvciBleGFtcGxlOiBgMjAwOS0wMS0wNmAuIFNpbmNlIG1hbnlcclxuICAgICAqIG1vZGVybiBicm93c2VycyBkbyBub3QgeWV0IHN1cHBvcnQgdGhpcyBpbnB1dCB0eXBlLCBpdCBpcyBpbXBvcnRhbnQgdG8gcHJvdmlkZSBjdWVzIHRvIHVzZXJzIG9uIHRoZVxyXG4gICAgICogZXhwZWN0ZWQgaW5wdXQgZm9ybWF0IHZpYSBhIHBsYWNlaG9sZGVyIG9yIGxhYmVsLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBtb2RlbCBtdXN0IGFsd2F5cyBiZSBhIERhdGUgb2JqZWN0LCBvdGhlcndpc2UgQW5ndWxhciB3aWxsIHRocm93IGFuIGVycm9yLlxyXG4gICAgICogSW52YWxpZCBgRGF0ZWAgb2JqZWN0cyAoZGF0ZXMgd2hvc2UgYGdldFRpbWUoKWAgaXMgYE5hTmApIHdpbGwgYmUgcmVuZGVyZWQgYXMgYW4gZW1wdHkgc3RyaW5nLlxyXG4gICAgICpcclxuICAgICAqIFRoZSB0aW1lem9uZSB0byBiZSB1c2VkIHRvIHJlYWQvd3JpdGUgdGhlIGBEYXRlYCBpbnN0YW5jZSBpbiB0aGUgbW9kZWwgY2FuIGJlIGRlZmluZWQgdXNpbmdcclxuICAgICAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdNb2RlbE9wdGlvbnMgbmdNb2RlbE9wdGlvbnN9LiBCeSBkZWZhdWx0LCB0aGlzIGlzIHRoZSB0aW1lem9uZSBvZiB0aGUgYnJvd3Nlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZz19IG1pbiBTZXRzIHRoZSBgbWluYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBsZXNzIHRoYW4gYG1pbmAuIFRoaXMgbXVzdCBiZSBhXHJcbiAgICAgKiB2YWxpZCBJU08gZGF0ZSBzdHJpbmcgKHl5eXktTU0tZGQpLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmc9fSBtYXggU2V0cyB0aGUgYG1heGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGVudGVyZWQgaXMgZ3JlYXRlciB0aGFuIGBtYXhgLiBUaGlzIG11c3QgYmVcclxuICAgICAqIGEgdmFsaWQgSVNPIGRhdGUgc3RyaW5nICh5eXl5LU1NLWRkKS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gcmVxdWlyZWQgU2V0cyBgcmVxdWlyZWRgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBub3QgZW50ZXJlZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0b1xyXG4gICAgICogICAgdGhlIGVsZW1lbnQgd2hlbiB0aGUgbmdSZXF1aXJlZCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLiBVc2UgYG5nUmVxdWlyZWRgIGluc3RlYWQgb2ZcclxuICAgICAqICAgIGByZXF1aXJlZGAgd2hlbiB5b3Ugd2FudCB0byBkYXRhLWJpbmQgdG8gdGhlIGByZXF1aXJlZGAgYXR0cmlidXRlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyXHJcbiAgICAgKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LlxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgPGV4YW1wbGUgbmFtZT1cImRhdGUtaW5wdXQtZGlyZWN0aXZlXCIgbW9kdWxlPVwiZGF0ZUlucHV0RXhhbXBsZVwiPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgICA8c2NyaXB0PlxyXG4gICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ2RhdGVJbnB1dEV4YW1wbGUnLCBbXSlcclxuICAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0RhdGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcclxuICAgICAgICAgICAgICAkc2NvcGUudmFsdWUgPSBuZXcgRGF0ZSgyMDEzLCA5LCAyMik7XHJcbiAgICAgICAgICAgIH1dKTtcclxuICAgICAgIDwvc2NyaXB0PlxyXG4gICAgICAgPGZvcm0gbmFtZT1cIm15Rm9ybVwiIG5nLWNvbnRyb2xsZXI9XCJEYXRlQ29udHJvbGxlciBhcyBkYXRlQ3RybFwiPlxyXG4gICAgICAgICAgUGljayBhIGRhdGUgaW4gMjAxMzpcclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGlkPVwiZXhhbXBsZUlucHV0XCIgbmFtZT1cImlucHV0XCIgbmctbW9kZWw9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ5eXl5LU1NLWRkXCIgbWluPVwiMjAxMy0wMS0wMVwiIG1heD1cIjIwMTMtMTItMzFcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiIG5nLXNob3c9XCJteUZvcm0uaW5wdXQuJGVycm9yLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiIG5nLXNob3c9XCJteUZvcm0uaW5wdXQuJGVycm9yLmRhdGVcIj5cclxuICAgICAgICAgICAgICBOb3QgYSB2YWxpZCBkYXRlITwvc3Bhbj5cclxuICAgICAgICAgICA8dHQ+dmFsdWUgPSB7e3ZhbHVlIHwgZGF0ZTogXCJ5eXl5LU1NLWRkXCJ9fTwvdHQ+PGJyLz5cclxuICAgICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiR2YWxpZCA9IHt7bXlGb3JtLmlucHV0LiR2YWxpZH19PC90dD48YnIvPlxyXG4gICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJGVycm9yID0ge3tteUZvcm0uaW5wdXQuJGVycm9yfX08L3R0Pjxici8+XHJcbiAgICAgICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz5cclxuICAgICAgICAgICA8dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVkfX08L3R0Pjxici8+XHJcbiAgICAgICA8L2Zvcm0+XHJcbiAgICAgPC9maWxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgICB2YXIgdmFsdWUgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ3ZhbHVlIHwgZGF0ZTogXCJ5eXl5LU1NLWRkXCInKSk7XHJcbiAgICAgICAgdmFyIHZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpO1xyXG4gICAgICAgIHZhciBpbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ3ZhbHVlJykpO1xyXG5cclxuICAgICAgICAvLyBjdXJyZW50bHkgcHJvdHJhY3Rvci93ZWJkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydFxyXG4gICAgICAgIC8vIHNlbmRpbmcga2V5cyB0byBhbGwga25vd24gSFRNTDUgaW5wdXQgY29udHJvbHNcclxuICAgICAgICAvLyBmb3IgdmFyaW91cyBicm93c2VycyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL3Byb3RyYWN0b3IvaXNzdWVzLzU2MikuXHJcbiAgICAgICAgZnVuY3Rpb24gc2V0SW5wdXQodmFsKSB7XHJcbiAgICAgICAgICAvLyBzZXQgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IGFuZCBmb3JjZSB2YWxpZGF0aW9uLlxyXG4gICAgICAgICAgdmFyIHNjciA9IFwidmFyIGlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGFtcGxlSW5wdXQnKTsgXCIgK1xyXG4gICAgICAgICAgXCJpcHQudmFsdWUgPSAnXCIgKyB2YWwgKyBcIic7XCIgK1xyXG4gICAgICAgICAgXCJhbmd1bGFyLmVsZW1lbnQoaXB0KS5zY29wZSgpLiRhcHBseShmdW5jdGlvbihzKSB7IHMubXlGb3JtW2lwdC5uYW1lXS4kc2V0Vmlld1ZhbHVlKCdcIiArIHZhbCArIFwiJyk7IH0pO1wiO1xyXG4gICAgICAgICAgYnJvd3Nlci5leGVjdXRlU2NyaXB0KHNjcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvQ29udGFpbignMjAxMy0xMC0yMicpO1xyXG4gICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdteUZvcm0uaW5wdXQuJHZhbGlkID0gdHJ1ZScpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgZW1wdHknLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHNldElucHV0KCcnKTtcclxuICAgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvRXF1YWwoJ3ZhbHVlID0nKTtcclxuICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignbXlGb3JtLmlucHV0LiR2YWxpZCA9IGZhbHNlJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBvdmVyIG1heCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgc2V0SW5wdXQoJzIwMTUtMDEtMDEnKTtcclxuICAgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvQ29udGFpbignJyk7XHJcbiAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSBmYWxzZScpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgIDwvZmlsZT5cclxuICAgICA8L2V4YW1wbGU+XHJcbiAgICAgKi9cclxuICAnZGF0ZSc6IGNyZWF0ZURhdGVJbnB1dFR5cGUoJ2RhdGUnLCBEQVRFX1JFR0VYUCxcclxuICAgICAgICAgY3JlYXRlRGF0ZVBhcnNlcihEQVRFX1JFR0VYUCwgWyd5eXl5JywgJ01NJywgJ2RkJ10pLFxyXG4gICAgICAgICAneXl5eS1NTS1kZCcpLFxyXG5cclxuICAgLyoqXHJcbiAgICAqIEBuZ2RvYyBpbnB1dFxyXG4gICAgKiBAbmFtZSBpbnB1dFtkYXRldGltZS1sb2NhbF1cclxuICAgICpcclxuICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAqIElucHV0IHdpdGggZGF0ZXRpbWUgdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb24uIEluIGJyb3dzZXJzIHRoYXQgZG8gbm90IHlldCBzdXBwb3J0XHJcbiAgICAqIHRoZSBIVE1MNSBkYXRlIGlucHV0LCBhIHRleHQgZWxlbWVudCB3aWxsIGJlIHVzZWQuIEluIHRoYXQgY2FzZSwgdGhlIHRleHQgbXVzdCBiZSBlbnRlcmVkIGluIGEgdmFsaWQgSVNPLTg2MDFcclxuICAgICogbG9jYWwgZGF0ZXRpbWUgZm9ybWF0ICh5eXl5LU1NLWRkVEhIOm1tOnNzKSwgZm9yIGV4YW1wbGU6IGAyMDEwLTEyLTI4VDE0OjU3OjAwYC5cclxuICAgICpcclxuICAgICogVGhlIG1vZGVsIG11c3QgYWx3YXlzIGJlIGEgRGF0ZSBvYmplY3QsIG90aGVyd2lzZSBBbmd1bGFyIHdpbGwgdGhyb3cgYW4gZXJyb3IuXHJcbiAgICAqIEludmFsaWQgYERhdGVgIG9iamVjdHMgKGRhdGVzIHdob3NlIGBnZXRUaW1lKClgIGlzIGBOYU5gKSB3aWxsIGJlIHJlbmRlcmVkIGFzIGFuIGVtcHR5IHN0cmluZy5cclxuICAgICpcclxuICAgICogVGhlIHRpbWV6b25lIHRvIGJlIHVzZWQgdG8gcmVhZC93cml0ZSB0aGUgYERhdGVgIGluc3RhbmNlIGluIHRoZSBtb2RlbCBjYW4gYmUgZGVmaW5lZCB1c2luZ1xyXG4gICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nTW9kZWxPcHRpb25zIG5nTW9kZWxPcHRpb25zfS4gQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgdGltZXpvbmUgb2YgdGhlIGJyb3dzZXIuXHJcbiAgICAqXHJcbiAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by5cclxuICAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLlxyXG4gICAgKiBAcGFyYW0ge3N0cmluZz19IG1pbiBTZXRzIHRoZSBgbWluYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBsZXNzIHRoYW4gYG1pbmAuIFRoaXMgbXVzdCBiZSBhXHJcbiAgICAqIHZhbGlkIElTTyBkYXRldGltZSBmb3JtYXQgKHl5eXktTU0tZGRUSEg6bW06c3MpLlxyXG4gICAgKiBAcGFyYW0ge3N0cmluZz19IG1heCBTZXRzIHRoZSBgbWF4YCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBncmVhdGVyIHRoYW4gYG1heGAuIFRoaXMgbXVzdCBiZVxyXG4gICAgKiBhIHZhbGlkIElTTyBkYXRldGltZSBmb3JtYXQgKHl5eXktTU0tZGRUSEg6bW06c3MpLlxyXG4gICAgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuXHJcbiAgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0b1xyXG4gICAgKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZlxyXG4gICAgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS5cclxuICAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyXHJcbiAgICAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuXHJcbiAgICAqXHJcbiAgICAqIEBleGFtcGxlXHJcbiAgICA8ZXhhbXBsZSBuYW1lPVwiZGF0ZXRpbWVsb2NhbC1pbnB1dC1kaXJlY3RpdmVcIiBtb2R1bGU9XCJkYXRlRXhhbXBsZVwiPlxyXG4gICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgPHNjcmlwdD5cclxuICAgICAgICBhbmd1bGFyLm1vZHVsZSgnZGF0ZUV4YW1wbGUnLCBbXSlcclxuICAgICAgICAgIC5jb250cm9sbGVyKCdEYXRlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAgICAgICAgICAgICRzY29wZS52YWx1ZSA9IG5ldyBEYXRlKDIwMTAsIDExLCAyOCwgMTQsIDU3KTtcclxuICAgICAgICAgIH1dKTtcclxuICAgICAgPC9zY3JpcHQ+XHJcbiAgICAgIDxmb3JtIG5hbWU9XCJteUZvcm1cIiBuZy1jb250cm9sbGVyPVwiRGF0ZUNvbnRyb2xsZXIgYXMgZGF0ZUN0cmxcIj5cclxuICAgICAgICBQaWNrIGEgZGF0ZSBiZXR3ZWVuIGluIDIwMTM6XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIGlkPVwiZXhhbXBsZUlucHV0XCIgbmFtZT1cImlucHV0XCIgbmctbW9kZWw9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwieXl5eS1NTS1kZFRISDptbTpzc1wiIG1pbj1cIjIwMDEtMDEtMDFUMDA6MDA6MDBcIiBtYXg9XCIyMDEzLTEyLTMxVDAwOjAwOjAwXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yXCIgbmctc2hvdz1cIm15Rm9ybS5pbnB1dC4kZXJyb3IucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci5kYXRldGltZWxvY2FsXCI+XHJcbiAgICAgICAgICAgIE5vdCBhIHZhbGlkIGRhdGUhPC9zcGFuPlxyXG4gICAgICAgIDx0dD52YWx1ZSA9IHt7dmFsdWUgfCBkYXRlOiBcInl5eXktTU0tZGRUSEg6bW06c3NcIn19PC90dD48YnIvPlxyXG4gICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0Pjxici8+XHJcbiAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz5cclxuICAgICAgICA8dHQ+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48YnIvPlxyXG4gICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyLz5cclxuICAgICAgPC9mb3JtPlxyXG4gICAgPC9maWxlPlxyXG4gICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICB2YXIgdmFsdWUgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ3ZhbHVlIHwgZGF0ZTogXCJ5eXl5LU1NLWRkVEhIOm1tOnNzXCInKSk7XHJcbiAgICAgIHZhciB2YWxpZCA9IGVsZW1lbnQoYnkuYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKTtcclxuICAgICAgdmFyIGlucHV0ID0gZWxlbWVudChieS5tb2RlbCgndmFsdWUnKSk7XHJcblxyXG4gICAgICAvLyBjdXJyZW50bHkgcHJvdHJhY3Rvci93ZWJkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydFxyXG4gICAgICAvLyBzZW5kaW5nIGtleXMgdG8gYWxsIGtub3duIEhUTUw1IGlucHV0IGNvbnRyb2xzXHJcbiAgICAgIC8vIGZvciB2YXJpb3VzIGJyb3dzZXJzIChodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9wcm90cmFjdG9yL2lzc3Vlcy81NjIpLlxyXG4gICAgICBmdW5jdGlvbiBzZXRJbnB1dCh2YWwpIHtcclxuICAgICAgICAvLyBzZXQgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IGFuZCBmb3JjZSB2YWxpZGF0aW9uLlxyXG4gICAgICAgIHZhciBzY3IgPSBcInZhciBpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhhbXBsZUlucHV0Jyk7IFwiICtcclxuICAgICAgICBcImlwdC52YWx1ZSA9ICdcIiArIHZhbCArIFwiJztcIiArXHJcbiAgICAgICAgXCJhbmd1bGFyLmVsZW1lbnQoaXB0KS5zY29wZSgpLiRhcHBseShmdW5jdGlvbihzKSB7IHMubXlGb3JtW2lwdC5uYW1lXS4kc2V0Vmlld1ZhbHVlKCdcIiArIHZhbCArIFwiJyk7IH0pO1wiO1xyXG4gICAgICAgIGJyb3dzZXIuZXhlY3V0ZVNjcmlwdChzY3IpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBleHBlY3QodmFsdWUuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJzIwMTAtMTItMjhUMTQ6NTc6MDAnKTtcclxuICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSB0cnVlJyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgc2V0SW5wdXQoJycpO1xyXG4gICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvRXF1YWwoJ3ZhbHVlID0nKTtcclxuICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSBmYWxzZScpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBvdmVyIG1heCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHNldElucHV0KCcyMDE1LTAxLTAxVDIzOjU5OjAwJyk7XHJcbiAgICAgICAgZXhwZWN0KHZhbHVlLmdldFRleHQoKSkudG9Db250YWluKCcnKTtcclxuICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSBmYWxzZScpO1xyXG4gICAgICB9KTtcclxuICAgIDwvZmlsZT5cclxuICAgIDwvZXhhbXBsZT5cclxuICAgICovXHJcbiAgJ2RhdGV0aW1lLWxvY2FsJzogY3JlYXRlRGF0ZUlucHV0VHlwZSgnZGF0ZXRpbWVsb2NhbCcsIERBVEVUSU1FTE9DQUxfUkVHRVhQLFxyXG4gICAgICBjcmVhdGVEYXRlUGFyc2VyKERBVEVUSU1FTE9DQUxfUkVHRVhQLCBbJ3l5eXknLCAnTU0nLCAnZGQnLCAnSEgnLCAnbW0nLCAnc3MnLCAnc3NzJ10pLFxyXG4gICAgICAneXl5eS1NTS1kZFRISDptbTpzcy5zc3MnKSxcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIGlucHV0XHJcbiAgICogQG5hbWUgaW5wdXRbdGltZV1cclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIElucHV0IHdpdGggdGltZSB2YWxpZGF0aW9uIGFuZCB0cmFuc2Zvcm1hdGlvbi4gSW4gYnJvd3NlcnMgdGhhdCBkbyBub3QgeWV0IHN1cHBvcnRcclxuICAgKiB0aGUgSFRNTDUgZGF0ZSBpbnB1dCwgYSB0ZXh0IGVsZW1lbnQgd2lsbCBiZSB1c2VkLiBJbiB0aGF0IGNhc2UsIHRoZSB0ZXh0IG11c3QgYmUgZW50ZXJlZCBpbiBhIHZhbGlkIElTTy04NjAxXHJcbiAgICogbG9jYWwgdGltZSBmb3JtYXQgKEhIOm1tOnNzKSwgZm9yIGV4YW1wbGU6IGAxNDo1NzowMGAuIE1vZGVsIG11c3QgYmUgYSBEYXRlIG9iamVjdC4gVGhpcyBiaW5kaW5nIHdpbGwgYWx3YXlzIG91dHB1dCBhXHJcbiAgICogRGF0ZSBvYmplY3QgdG8gdGhlIG1vZGVsIG9mIEphbnVhcnkgMSwgMTk3MCwgb3IgbG9jYWwgZGF0ZSBgbmV3IERhdGUoMTk3MCwgMCwgMSwgSEgsIG1tLCBzcylgLlxyXG4gICAqXHJcbiAgICogVGhlIG1vZGVsIG11c3QgYWx3YXlzIGJlIGEgRGF0ZSBvYmplY3QsIG90aGVyd2lzZSBBbmd1bGFyIHdpbGwgdGhyb3cgYW4gZXJyb3IuXHJcbiAgICogSW52YWxpZCBgRGF0ZWAgb2JqZWN0cyAoZGF0ZXMgd2hvc2UgYGdldFRpbWUoKWAgaXMgYE5hTmApIHdpbGwgYmUgcmVuZGVyZWQgYXMgYW4gZW1wdHkgc3RyaW5nLlxyXG4gICAqXHJcbiAgICogVGhlIHRpbWV6b25lIHRvIGJlIHVzZWQgdG8gcmVhZC93cml0ZSB0aGUgYERhdGVgIGluc3RhbmNlIGluIHRoZSBtb2RlbCBjYW4gYmUgZGVmaW5lZCB1c2luZ1xyXG4gICAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdNb2RlbE9wdGlvbnMgbmdNb2RlbE9wdGlvbnN9LiBCeSBkZWZhdWx0LCB0aGlzIGlzIHRoZSB0aW1lem9uZSBvZiB0aGUgYnJvd3Nlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBtaW4gU2V0cyB0aGUgYG1pbmAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGVudGVyZWQgaXMgbGVzcyB0aGFuIGBtaW5gLiBUaGlzIG11c3QgYmUgYVxyXG4gICAqIHZhbGlkIElTTyB0aW1lIGZvcm1hdCAoSEg6bW06c3MpLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbWF4IFNldHMgdGhlIGBtYXhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIGdyZWF0ZXIgdGhhbiBgbWF4YC4gVGhpcyBtdXN0IGJlIGFcclxuICAgKiB2YWxpZCBJU08gdGltZSBmb3JtYXQgKEhIOm1tOnNzKS5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1JlcXVpcmVkIEFkZHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgYW5kIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBjb25zdHJhaW50IHRvXHJcbiAgICogICAgdGhlIGVsZW1lbnQgd2hlbiB0aGUgbmdSZXF1aXJlZCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLiBVc2UgYG5nUmVxdWlyZWRgIGluc3RlYWQgb2ZcclxuICAgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXJcclxuICAgKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgPGV4YW1wbGUgbmFtZT1cInRpbWUtaW5wdXQtZGlyZWN0aXZlXCIgbW9kdWxlPVwidGltZUV4YW1wbGVcIj5cclxuICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICA8c2NyaXB0PlxyXG4gICAgICBhbmd1bGFyLm1vZHVsZSgndGltZUV4YW1wbGUnLCBbXSlcclxuICAgICAgICAuY29udHJvbGxlcignRGF0ZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xyXG4gICAgICAgICAgJHNjb3BlLnZhbHVlID0gbmV3IERhdGUoMTk3MCwgMCwgMSwgMTQsIDU3LCAwKTtcclxuICAgICAgICB9XSk7XHJcbiAgICAgPC9zY3JpcHQ+XHJcbiAgICAgPGZvcm0gbmFtZT1cIm15Rm9ybVwiIG5nLWNvbnRyb2xsZXI9XCJEYXRlQ29udHJvbGxlciBhcyBkYXRlQ3RybFwiPlxyXG4gICAgICAgIFBpY2sgYSBiZXR3ZWVuIDhhbSBhbmQgNXBtOlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGltZVwiIGlkPVwiZXhhbXBsZUlucHV0XCIgbmFtZT1cImlucHV0XCIgbmctbW9kZWw9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSEg6bW06c3NcIiBtaW49XCIwODowMDowMFwiIG1heD1cIjE3OjAwOjAwXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yXCIgbmctc2hvdz1cIm15Rm9ybS5pbnB1dC4kZXJyb3IucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci50aW1lXCI+XHJcbiAgICAgICAgICAgIE5vdCBhIHZhbGlkIGRhdGUhPC9zcGFuPlxyXG4gICAgICAgIDx0dD52YWx1ZSA9IHt7dmFsdWUgfCBkYXRlOiBcIkhIOm1tOnNzXCJ9fTwvdHQ+PGJyLz5cclxuICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiR2YWxpZCA9IHt7bXlGb3JtLmlucHV0LiR2YWxpZH19PC90dD48YnIvPlxyXG4gICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJGVycm9yID0ge3tteUZvcm0uaW5wdXQuJGVycm9yfX08L3R0Pjxici8+XHJcbiAgICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz5cclxuICAgICAgICA8dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVkfX08L3R0Pjxici8+XHJcbiAgICAgPC9mb3JtPlxyXG4gICA8L2ZpbGU+XHJcbiAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgdmFyIHZhbHVlID0gZWxlbWVudChieS5iaW5kaW5nKCd2YWx1ZSB8IGRhdGU6IFwiSEg6bW06c3NcIicpKTtcclxuICAgICAgdmFyIHZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0uaW5wdXQuJHZhbGlkJykpO1xyXG4gICAgICB2YXIgaW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCd2YWx1ZScpKTtcclxuXHJcbiAgICAgIC8vIGN1cnJlbnRseSBwcm90cmFjdG9yL3dlYmRyaXZlciBkb2VzIG5vdCBzdXBwb3J0XHJcbiAgICAgIC8vIHNlbmRpbmcga2V5cyB0byBhbGwga25vd24gSFRNTDUgaW5wdXQgY29udHJvbHNcclxuICAgICAgLy8gZm9yIHZhcmlvdXMgYnJvd3NlcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL3Byb3RyYWN0b3IvaXNzdWVzLzU2MikuXHJcbiAgICAgIGZ1bmN0aW9uIHNldElucHV0KHZhbCkge1xyXG4gICAgICAgIC8vIHNldCB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgYW5kIGZvcmNlIHZhbGlkYXRpb24uXHJcbiAgICAgICAgdmFyIHNjciA9IFwidmFyIGlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGFtcGxlSW5wdXQnKTsgXCIgK1xyXG4gICAgICAgIFwiaXB0LnZhbHVlID0gJ1wiICsgdmFsICsgXCInO1wiICtcclxuICAgICAgICBcImFuZ3VsYXIuZWxlbWVudChpcHQpLnNjb3BlKCkuJGFwcGx5KGZ1bmN0aW9uKHMpIHsgcy5teUZvcm1baXB0Lm5hbWVdLiRzZXRWaWV3VmFsdWUoJ1wiICsgdmFsICsgXCInKTsgfSk7XCI7XHJcbiAgICAgICAgYnJvd3Nlci5leGVjdXRlU2NyaXB0KHNjcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvQ29udGFpbignMTQ6NTc6MDAnKTtcclxuICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSB0cnVlJyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgc2V0SW5wdXQoJycpO1xyXG4gICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvRXF1YWwoJ3ZhbHVlID0nKTtcclxuICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSBmYWxzZScpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBvdmVyIG1heCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHNldElucHV0KCcyMzo1OTowMCcpO1xyXG4gICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvQ29udGFpbignJyk7XHJcbiAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdteUZvcm0uaW5wdXQuJHZhbGlkID0gZmFsc2UnKTtcclxuICAgICAgfSk7XHJcbiAgIDwvZmlsZT5cclxuICAgPC9leGFtcGxlPlxyXG4gICAqL1xyXG4gICd0aW1lJzogY3JlYXRlRGF0ZUlucHV0VHlwZSgndGltZScsIFRJTUVfUkVHRVhQLFxyXG4gICAgICBjcmVhdGVEYXRlUGFyc2VyKFRJTUVfUkVHRVhQLCBbJ0hIJywgJ21tJywgJ3NzJywgJ3NzcyddKSxcclxuICAgICAnSEg6bW06c3Muc3NzJyksXHJcblxyXG4gICAvKipcclxuICAgICogQG5nZG9jIGlucHV0XHJcbiAgICAqIEBuYW1lIGlucHV0W3dlZWtdXHJcbiAgICAqXHJcbiAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgKiBJbnB1dCB3aXRoIHdlZWstb2YtdGhlLXllYXIgdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb24gdG8gRGF0ZS4gSW4gYnJvd3NlcnMgdGhhdCBkbyBub3QgeWV0IHN1cHBvcnRcclxuICAgICogdGhlIEhUTUw1IHdlZWsgaW5wdXQsIGEgdGV4dCBlbGVtZW50IHdpbGwgYmUgdXNlZC4gSW4gdGhhdCBjYXNlLCB0aGUgdGV4dCBtdXN0IGJlIGVudGVyZWQgaW4gYSB2YWxpZCBJU08tODYwMVxyXG4gICAgKiB3ZWVrIGZvcm1hdCAoeXl5eS1XIyMpLCBmb3IgZXhhbXBsZTogYDIwMTMtVzAyYC5cclxuICAgICpcclxuICAgICogVGhlIG1vZGVsIG11c3QgYWx3YXlzIGJlIGEgRGF0ZSBvYmplY3QsIG90aGVyd2lzZSBBbmd1bGFyIHdpbGwgdGhyb3cgYW4gZXJyb3IuXHJcbiAgICAqIEludmFsaWQgYERhdGVgIG9iamVjdHMgKGRhdGVzIHdob3NlIGBnZXRUaW1lKClgIGlzIGBOYU5gKSB3aWxsIGJlIHJlbmRlcmVkIGFzIGFuIGVtcHR5IHN0cmluZy5cclxuICAgICpcclxuICAgICogVGhlIHRpbWV6b25lIHRvIGJlIHVzZWQgdG8gcmVhZC93cml0ZSB0aGUgYERhdGVgIGluc3RhbmNlIGluIHRoZSBtb2RlbCBjYW4gYmUgZGVmaW5lZCB1c2luZ1xyXG4gICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nTW9kZWxPcHRpb25zIG5nTW9kZWxPcHRpb25zfS4gQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgdGltZXpvbmUgb2YgdGhlIGJyb3dzZXIuXHJcbiAgICAqXHJcbiAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by5cclxuICAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLlxyXG4gICAgKiBAcGFyYW0ge3N0cmluZz19IG1pbiBTZXRzIHRoZSBgbWluYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBsZXNzIHRoYW4gYG1pbmAuIFRoaXMgbXVzdCBiZSBhXHJcbiAgICAqIHZhbGlkIElTTyB3ZWVrIGZvcm1hdCAoeXl5eS1XIyMpLlxyXG4gICAgKiBAcGFyYW0ge3N0cmluZz19IG1heCBTZXRzIHRoZSBgbWF4YCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBncmVhdGVyIHRoYW4gYG1heGAuIFRoaXMgbXVzdCBiZVxyXG4gICAgKiBhIHZhbGlkIElTTyB3ZWVrIGZvcm1hdCAoeXl5eS1XIyMpLlxyXG4gICAgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuXHJcbiAgICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0b1xyXG4gICAgKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZlxyXG4gICAgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS5cclxuICAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyXHJcbiAgICAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuXHJcbiAgICAqXHJcbiAgICAqIEBleGFtcGxlXHJcbiAgICA8ZXhhbXBsZSBuYW1lPVwid2Vlay1pbnB1dC1kaXJlY3RpdmVcIiBtb2R1bGU9XCJ3ZWVrRXhhbXBsZVwiPlxyXG4gICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgPHNjcmlwdD5cclxuICAgICAgYW5ndWxhci5tb2R1bGUoJ3dlZWtFeGFtcGxlJywgW10pXHJcbiAgICAgICAgLmNvbnRyb2xsZXIoJ0RhdGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcclxuICAgICAgICAgICRzY29wZS52YWx1ZSA9IG5ldyBEYXRlKDIwMTMsIDAsIDMpO1xyXG4gICAgICAgIH1dKTtcclxuICAgICAgPC9zY3JpcHQ+XHJcbiAgICAgIDxmb3JtIG5hbWU9XCJteUZvcm1cIiBuZy1jb250cm9sbGVyPVwiRGF0ZUNvbnRyb2xsZXIgYXMgZGF0ZUN0cmxcIj5cclxuICAgICAgICBQaWNrIGEgZGF0ZSBiZXR3ZWVuIGluIDIwMTM6XHJcbiAgICAgICAgPGlucHV0IGlkPVwiZXhhbXBsZUlucHV0XCIgdHlwZT1cIndlZWtcIiBuYW1lPVwiaW5wdXRcIiBuZy1tb2RlbD1cInZhbHVlXCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJZWVlZLVcjI1wiIG1pbj1cIjIwMTItVzMyXCIgbWF4PVwiMjAxMy1XNTJcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICBSZXF1aXJlZCE8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiIG5nLXNob3c9XCJteUZvcm0uaW5wdXQuJGVycm9yLndlZWtcIj5cclxuICAgICAgICAgICAgTm90IGEgdmFsaWQgZGF0ZSE8L3NwYW4+XHJcbiAgICAgICAgPHR0PnZhbHVlID0ge3t2YWx1ZSB8IGRhdGU6IFwieXl5eS1Xd3dcIn19PC90dD48YnIvPlxyXG4gICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0Pjxici8+XHJcbiAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz5cclxuICAgICAgICA8dHQ+bXlGb3JtLiR2YWxpZCA9IHt7bXlGb3JtLiR2YWxpZH19PC90dD48YnIvPlxyXG4gICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyLz5cclxuICAgICAgPC9mb3JtPlxyXG4gICAgPC9maWxlPlxyXG4gICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICB2YXIgdmFsdWUgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ3ZhbHVlIHwgZGF0ZTogXCJ5eXl5LVd3d1wiJykpO1xyXG4gICAgICB2YXIgdmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSk7XHJcbiAgICAgIHZhciBpbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ3ZhbHVlJykpO1xyXG5cclxuICAgICAgLy8gY3VycmVudGx5IHByb3RyYWN0b3Ivd2ViZHJpdmVyIGRvZXMgbm90IHN1cHBvcnRcclxuICAgICAgLy8gc2VuZGluZyBrZXlzIHRvIGFsbCBrbm93biBIVE1MNSBpbnB1dCBjb250cm9sc1xyXG4gICAgICAvLyBmb3IgdmFyaW91cyBicm93c2VycyAoaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvcHJvdHJhY3Rvci9pc3N1ZXMvNTYyKS5cclxuICAgICAgZnVuY3Rpb24gc2V0SW5wdXQodmFsKSB7XHJcbiAgICAgICAgLy8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCBhbmQgZm9yY2UgdmFsaWRhdGlvbi5cclxuICAgICAgICB2YXIgc2NyID0gXCJ2YXIgaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4YW1wbGVJbnB1dCcpOyBcIiArXHJcbiAgICAgICAgXCJpcHQudmFsdWUgPSAnXCIgKyB2YWwgKyBcIic7XCIgK1xyXG4gICAgICAgIFwiYW5ndWxhci5lbGVtZW50KGlwdCkuc2NvcGUoKS4kYXBwbHkoZnVuY3Rpb24ocykgeyBzLm15Rm9ybVtpcHQubmFtZV0uJHNldFZpZXdWYWx1ZSgnXCIgKyB2YWwgKyBcIicpOyB9KTtcIjtcclxuICAgICAgICBicm93c2VyLmV4ZWN1dGVTY3JpcHQoc2NyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgZXhwZWN0KHZhbHVlLmdldFRleHQoKSkudG9Db250YWluKCcyMDEzLVcwMScpO1xyXG4gICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignbXlGb3JtLmlucHV0LiR2YWxpZCA9IHRydWUnKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgZW1wdHknLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBzZXRJbnB1dCgnJyk7XHJcbiAgICAgICAgZXhwZWN0KHZhbHVlLmdldFRleHQoKSkudG9FcXVhbCgndmFsdWUgPScpO1xyXG4gICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignbXlGb3JtLmlucHV0LiR2YWxpZCA9IGZhbHNlJyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIG92ZXIgbWF4JywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgc2V0SW5wdXQoJzIwMTUtVzAxJyk7XHJcbiAgICAgICAgZXhwZWN0KHZhbHVlLmdldFRleHQoKSkudG9Db250YWluKCcnKTtcclxuICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSBmYWxzZScpO1xyXG4gICAgICB9KTtcclxuICAgIDwvZmlsZT5cclxuICAgIDwvZXhhbXBsZT5cclxuICAgICovXHJcbiAgJ3dlZWsnOiBjcmVhdGVEYXRlSW5wdXRUeXBlKCd3ZWVrJywgV0VFS19SRUdFWFAsIHdlZWtQYXJzZXIsICd5eXl5LVd3dycpLFxyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgaW5wdXRcclxuICAgKiBAbmFtZSBpbnB1dFttb250aF1cclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIElucHV0IHdpdGggbW9udGggdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb24uIEluIGJyb3dzZXJzIHRoYXQgZG8gbm90IHlldCBzdXBwb3J0XHJcbiAgICogdGhlIEhUTUw1IG1vbnRoIGlucHV0LCBhIHRleHQgZWxlbWVudCB3aWxsIGJlIHVzZWQuIEluIHRoYXQgY2FzZSwgdGhlIHRleHQgbXVzdCBiZSBlbnRlcmVkIGluIGEgdmFsaWQgSVNPLTg2MDFcclxuICAgKiBtb250aCBmb3JtYXQgKHl5eXktTU0pLCBmb3IgZXhhbXBsZTogYDIwMDktMDFgLlxyXG4gICAqXHJcbiAgICogVGhlIG1vZGVsIG11c3QgYWx3YXlzIGJlIGEgRGF0ZSBvYmplY3QsIG90aGVyd2lzZSBBbmd1bGFyIHdpbGwgdGhyb3cgYW4gZXJyb3IuXHJcbiAgICogSW52YWxpZCBgRGF0ZWAgb2JqZWN0cyAoZGF0ZXMgd2hvc2UgYGdldFRpbWUoKWAgaXMgYE5hTmApIHdpbGwgYmUgcmVuZGVyZWQgYXMgYW4gZW1wdHkgc3RyaW5nLlxyXG4gICAqIElmIHRoZSBtb2RlbCBpcyBub3Qgc2V0IHRvIHRoZSBmaXJzdCBvZiB0aGUgbW9udGgsIHRoZSBuZXh0IHZpZXcgdG8gbW9kZWwgdXBkYXRlIHdpbGwgc2V0IGl0XHJcbiAgICogdG8gdGhlIGZpcnN0IG9mIHRoZSBtb250aC5cclxuICAgKlxyXG4gICAqIFRoZSB0aW1lem9uZSB0byBiZSB1c2VkIHRvIHJlYWQvd3JpdGUgdGhlIGBEYXRlYCBpbnN0YW5jZSBpbiB0aGUgbW9kZWwgY2FuIGJlIGRlZmluZWQgdXNpbmdcclxuICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nTW9kZWxPcHRpb25zIG5nTW9kZWxPcHRpb25zfS4gQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgdGltZXpvbmUgb2YgdGhlIGJyb3dzZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbWluIFNldHMgdGhlIGBtaW5gIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIGxlc3MgdGhhbiBgbWluYC4gVGhpcyBtdXN0IGJlXHJcbiAgICogYSB2YWxpZCBJU08gbW9udGggZm9ybWF0ICh5eXl5LU1NKS5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG1heCBTZXRzIHRoZSBgbWF4YCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBncmVhdGVyIHRoYW4gYG1heGAuIFRoaXMgbXVzdFxyXG4gICAqIGJlIGEgdmFsaWQgSVNPIG1vbnRoIGZvcm1hdCAoeXl5eS1NTSkuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBTZXRzIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBlbnRlcmVkLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0b1xyXG4gICAqICAgIHRoZSBlbGVtZW50IHdoZW4gdGhlIG5nUmVxdWlyZWQgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gdHJ1ZS4gVXNlIGBuZ1JlcXVpcmVkYCBpbnN0ZWFkIG9mXHJcbiAgICogICAgYHJlcXVpcmVkYCB3aGVuIHlvdSB3YW50IHRvIGRhdGEtYmluZCB0byB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyXHJcbiAgICogICAgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgIDxleGFtcGxlIG5hbWU9XCJtb250aC1pbnB1dC1kaXJlY3RpdmVcIiBtb2R1bGU9XCJtb250aEV4YW1wbGVcIj5cclxuICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICA8c2NyaXB0PlxyXG4gICAgICBhbmd1bGFyLm1vZHVsZSgnbW9udGhFeGFtcGxlJywgW10pXHJcbiAgICAgICAgLmNvbnRyb2xsZXIoJ0RhdGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcclxuICAgICAgICAgICRzY29wZS52YWx1ZSA9IG5ldyBEYXRlKDIwMTMsIDksIDEpO1xyXG4gICAgICAgIH1dKTtcclxuICAgICA8L3NjcmlwdD5cclxuICAgICA8Zm9ybSBuYW1lPVwibXlGb3JtXCIgbmctY29udHJvbGxlcj1cIkRhdGVDb250cm9sbGVyIGFzIGRhdGVDdHJsXCI+XHJcbiAgICAgICBQaWNrIGEgbW9udGggaW50IDIwMTM6XHJcbiAgICAgICA8aW5wdXQgaWQ9XCJleGFtcGxlSW5wdXRcIiB0eXBlPVwibW9udGhcIiBuYW1lPVwiaW5wdXRcIiBuZy1tb2RlbD1cInZhbHVlXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwieXl5eS1NTVwiIG1pbj1cIjIwMTMtMDFcIiBtYXg9XCIyMDEzLTEyXCIgcmVxdWlyZWQgLz5cclxuICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPlxyXG4gICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiIG5nLXNob3c9XCJteUZvcm0uaW5wdXQuJGVycm9yLm1vbnRoXCI+XHJcbiAgICAgICAgICBOb3QgYSB2YWxpZCBtb250aCE8L3NwYW4+XHJcbiAgICAgICA8dHQ+dmFsdWUgPSB7e3ZhbHVlIHwgZGF0ZTogXCJ5eXl5LU1NXCJ9fTwvdHQ+PGJyLz5cclxuICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJHZhbGlkID0ge3tteUZvcm0uaW5wdXQuJHZhbGlkfX08L3R0Pjxici8+XHJcbiAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiRlcnJvciA9IHt7bXlGb3JtLmlucHV0LiRlcnJvcn19PC90dD48YnIvPlxyXG4gICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz5cclxuICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnJlcXVpcmVkID0ge3shIW15Rm9ybS4kZXJyb3IucmVxdWlyZWR9fTwvdHQ+PGJyLz5cclxuICAgICA8L2Zvcm0+XHJcbiAgIDwvZmlsZT5cclxuICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICB2YXIgdmFsdWUgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ3ZhbHVlIHwgZGF0ZTogXCJ5eXl5LU1NXCInKSk7XHJcbiAgICAgIHZhciB2YWxpZCA9IGVsZW1lbnQoYnkuYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKTtcclxuICAgICAgdmFyIGlucHV0ID0gZWxlbWVudChieS5tb2RlbCgndmFsdWUnKSk7XHJcblxyXG4gICAgICAvLyBjdXJyZW50bHkgcHJvdHJhY3Rvci93ZWJkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydFxyXG4gICAgICAvLyBzZW5kaW5nIGtleXMgdG8gYWxsIGtub3duIEhUTUw1IGlucHV0IGNvbnRyb2xzXHJcbiAgICAgIC8vIGZvciB2YXJpb3VzIGJyb3dzZXJzIChodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9wcm90cmFjdG9yL2lzc3Vlcy81NjIpLlxyXG4gICAgICBmdW5jdGlvbiBzZXRJbnB1dCh2YWwpIHtcclxuICAgICAgICAvLyBzZXQgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IGFuZCBmb3JjZSB2YWxpZGF0aW9uLlxyXG4gICAgICAgIHZhciBzY3IgPSBcInZhciBpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhhbXBsZUlucHV0Jyk7IFwiICtcclxuICAgICAgICBcImlwdC52YWx1ZSA9ICdcIiArIHZhbCArIFwiJztcIiArXHJcbiAgICAgICAgXCJhbmd1bGFyLmVsZW1lbnQoaXB0KS5zY29wZSgpLiRhcHBseShmdW5jdGlvbihzKSB7IHMubXlGb3JtW2lwdC5uYW1lXS4kc2V0Vmlld1ZhbHVlKCdcIiArIHZhbCArIFwiJyk7IH0pO1wiO1xyXG4gICAgICAgIGJyb3dzZXIuZXhlY3V0ZVNjcmlwdChzY3IpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBleHBlY3QodmFsdWUuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJzIwMTMtMTAnKTtcclxuICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSB0cnVlJyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGVtcHR5JywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgc2V0SW5wdXQoJycpO1xyXG4gICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvRXF1YWwoJ3ZhbHVlID0nKTtcclxuICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSBmYWxzZScpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBvdmVyIG1heCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHNldElucHV0KCcyMDE1LTAxJyk7XHJcbiAgICAgICAgZXhwZWN0KHZhbHVlLmdldFRleHQoKSkudG9Db250YWluKCcnKTtcclxuICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ215Rm9ybS5pbnB1dC4kdmFsaWQgPSBmYWxzZScpO1xyXG4gICAgICB9KTtcclxuICAgPC9maWxlPlxyXG4gICA8L2V4YW1wbGU+XHJcbiAgICovXHJcbiAgJ21vbnRoJzogY3JlYXRlRGF0ZUlucHV0VHlwZSgnbW9udGgnLCBNT05USF9SRUdFWFAsXHJcbiAgICAgY3JlYXRlRGF0ZVBhcnNlcihNT05USF9SRUdFWFAsIFsneXl5eScsICdNTSddKSxcclxuICAgICAneXl5eS1NTScpLFxyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgaW5wdXRcclxuICAgKiBAbmFtZSBpbnB1dFtudW1iZXJdXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBUZXh0IGlucHV0IHdpdGggbnVtYmVyIHZhbGlkYXRpb24gYW5kIHRyYW5zZm9ybWF0aW9uLiBTZXRzIHRoZSBgbnVtYmVyYCB2YWxpZGF0aW9uXHJcbiAgICogZXJyb3IgaWYgbm90IGEgdmFsaWQgbnVtYmVyLlxyXG4gICAqXHJcbiAgICogVGhlIG1vZGVsIG11c3QgYWx3YXlzIGJlIGEgbnVtYmVyLCBvdGhlcndpc2UgQW5ndWxhciB3aWxsIHRocm93IGFuIGVycm9yLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5nTW9kZWwgQXNzaWduYWJsZSBhbmd1bGFyIGV4cHJlc3Npb24gdG8gZGF0YS1iaW5kIHRvLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG1pbiBTZXRzIHRoZSBgbWluYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBsZXNzIHRoYW4gYG1pbmAuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBtYXggU2V0cyB0aGUgYG1heGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGVudGVyZWQgaXMgZ3JlYXRlciB0aGFuIGBtYXhgLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gcmVxdWlyZWQgU2V0cyBgcmVxdWlyZWRgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBub3QgZW50ZXJlZC5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUmVxdWlyZWQgQWRkcyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSBhbmQgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgdG9cclxuICAgKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZlxyXG4gICAqICAgIGByZXF1aXJlZGAgd2hlbiB5b3Ugd2FudCB0byBkYXRhLWJpbmQgdG8gdGhlIGByZXF1aXJlZGAgYXR0cmlidXRlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNaW5sZW5ndGggU2V0cyBgbWlubGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgc2hvcnRlciB0aGFuXHJcbiAgICogICAgbWlubGVuZ3RoLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNYXhsZW5ndGggU2V0cyBgbWF4bGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbG9uZ2VyIHRoYW5cclxuICAgKiAgICBtYXhsZW5ndGguXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBwYXR0ZXJuIFNpbWlsYXIgdG8gYG5nUGF0dGVybmAgZXhjZXB0IHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpcyB0aGUgYWN0dWFsIHN0cmluZ1xyXG4gICAqICAgIHRoYXQgY29udGFpbnMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBib2R5IHRoYXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSByZWd1bGFyIGV4cHJlc3Npb25cclxuICAgKiAgICBhcyBpbiB0aGUgbmdQYXR0ZXJuIGRpcmVjdGl2ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5nUGF0dGVybiBTZXRzIGBwYXR0ZXJuYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgbmdNb2RlbCB2YWx1ZSBkb2VzIG5vdCBtYXRjaFxyXG4gICAqICAgIGEgUmVnRXhwIGZvdW5kIGJ5IGV2YWx1YXRpbmcgdGhlIEFuZ3VsYXIgZXhwcmVzc2lvbiBnaXZlbiBpbiB0aGUgYXR0cmlidXRlIHZhbHVlLlxyXG4gICAqICAgIElmIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIFJlZ0V4cCBvYmplY3QgdGhlbiB0aGlzIGlzIHVzZWQgZGlyZWN0bHkuXHJcbiAgICogICAgSWYgdGhlIGV4cHJlc3Npb24gaXMgYSBzdHJpbmcgdGhlbiBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIFJlZ0V4cCBhZnRlciB3cmFwcGluZyBpdCBpbiBgXmAgYW5kIGAkYFxyXG4gICAqICAgIGNoYXJhY3RlcnMuIEZvciBpbnN0YW5jZSwgYFwiYWJjXCJgIHdpbGwgYmUgY29udmVydGVkIHRvIGBuZXcgUmVnRXhwKCdeYWJjJCcpYC5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXJcclxuICAgKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgICAgPGV4YW1wbGUgbmFtZT1cIm51bWJlci1pbnB1dC1kaXJlY3RpdmVcIiBtb2R1bGU9XCJudW1iZXJFeGFtcGxlXCI+XHJcbiAgICAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgICAgPHNjcmlwdD5cclxuICAgICAgICAgICBhbmd1bGFyLm1vZHVsZSgnbnVtYmVyRXhhbXBsZScsIFtdKVxyXG4gICAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcclxuICAgICAgICAgICAgICAgJHNjb3BlLnZhbHVlID0gMTI7XHJcbiAgICAgICAgICAgICB9XSk7XHJcbiAgICAgICAgIDwvc2NyaXB0PlxyXG4gICAgICAgICA8Zm9ybSBuYW1lPVwibXlGb3JtXCIgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XHJcbiAgICAgICAgICAgTnVtYmVyOiA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG5hbWU9XCJpbnB1dFwiIG5nLW1vZGVsPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIiBtYXg9XCI5OVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPlxyXG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci5udW1iZXJcIj5cclxuICAgICAgICAgICAgIE5vdCB2YWxpZCBudW1iZXIhPC9zcGFuPlxyXG4gICAgICAgICAgIDx0dD52YWx1ZSA9IHt7dmFsdWV9fTwvdHQ+PGJyLz5cclxuICAgICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiR2YWxpZCA9IHt7bXlGb3JtLmlucHV0LiR2YWxpZH19PC90dD48YnIvPlxyXG4gICAgICAgICAgIDx0dD5teUZvcm0uaW5wdXQuJGVycm9yID0ge3tteUZvcm0uaW5wdXQuJGVycm9yfX08L3R0Pjxici8+XHJcbiAgICAgICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz5cclxuICAgICAgICAgICA8dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVkfX08L3R0Pjxici8+XHJcbiAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgPC9maWxlPlxyXG4gICAgICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQoYnkuYmluZGluZygndmFsdWUnKSk7XHJcbiAgICAgICAgICB2YXIgdmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSk7XHJcbiAgICAgICAgICB2YXIgaW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCd2YWx1ZScpKTtcclxuXHJcbiAgICAgICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgZXhwZWN0KHZhbHVlLmdldFRleHQoKSkudG9Db250YWluKCcxMicpO1xyXG4gICAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3RydWUnKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpbnB1dC5jbGVhcigpO1xyXG4gICAgICAgICAgICBpbnB1dC5zZW5kS2V5cygnJyk7XHJcbiAgICAgICAgICAgIGV4cGVjdCh2YWx1ZS5nZXRUZXh0KCkpLnRvRXF1YWwoJ3ZhbHVlID0nKTtcclxuICAgICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdmYWxzZScpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIG92ZXIgbWF4JywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlucHV0LmNsZWFyKCk7XHJcbiAgICAgICAgICAgIGlucHV0LnNlbmRLZXlzKCcxMjMnKTtcclxuICAgICAgICAgICAgZXhwZWN0KHZhbHVlLmdldFRleHQoKSkudG9FcXVhbCgndmFsdWUgPScpO1xyXG4gICAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICA8L2ZpbGU+XHJcbiAgICAgIDwvZXhhbXBsZT5cclxuICAgKi9cclxuICAnbnVtYmVyJzogbnVtYmVySW5wdXRUeXBlLFxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIGlucHV0XHJcbiAgICogQG5hbWUgaW5wdXRbdXJsXVxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogVGV4dCBpbnB1dCB3aXRoIFVSTCB2YWxpZGF0aW9uLiBTZXRzIHRoZSBgdXJsYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgY29udGVudCBpcyBub3QgYVxyXG4gICAqIHZhbGlkIFVSTC5cclxuICAgKlxyXG4gICAqIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCI+XHJcbiAgICogKipOb3RlOioqIGBpbnB1dFt1cmxdYCB1c2VzIGEgcmVnZXggdG8gdmFsaWRhdGUgdXJscyB0aGF0IGlzIGRlcml2ZWQgZnJvbSB0aGUgcmVnZXhcclxuICAgKiB1c2VkIGluIENocm9taXVtLiBJZiB5b3UgbmVlZCBzdHJpY3RlciB2YWxpZGF0aW9uLCB5b3UgY2FuIHVzZSBgbmctcGF0dGVybmAgb3IgbW9kaWZ5XHJcbiAgICogdGhlIGJ1aWx0LWluIHZhbGlkYXRvcnMgKHNlZSB0aGUge0BsaW5rIGd1aWRlL2Zvcm1zIEZvcm1zIGd1aWRlfSlcclxuICAgKiA8L2Rpdj5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBTZXRzIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBlbnRlcmVkLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0b1xyXG4gICAqICAgIHRoZSBlbGVtZW50IHdoZW4gdGhlIG5nUmVxdWlyZWQgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gdHJ1ZS4gVXNlIGBuZ1JlcXVpcmVkYCBpbnN0ZWFkIG9mXHJcbiAgICogICAgYHJlcXVpcmVkYCB3aGVuIHlvdSB3YW50IHRvIGRhdGEtYmluZCB0byB0aGUgYHJlcXVpcmVkYCBhdHRyaWJ1dGUuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBuZ01pbmxlbmd0aCBTZXRzIGBtaW5sZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBzaG9ydGVyIHRoYW5cclxuICAgKiAgICBtaW5sZW5ndGguXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBuZ01heGxlbmd0aCBTZXRzIGBtYXhsZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBsb25nZXIgdGhhblxyXG4gICAqICAgIG1heGxlbmd0aC5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IHBhdHRlcm4gU2ltaWxhciB0byBgbmdQYXR0ZXJuYCBleGNlcHQgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGlzIHRoZSBhY3R1YWwgc3RyaW5nXHJcbiAgICogICAgdGhhdCBjb250YWlucyB0aGUgcmVndWxhciBleHByZXNzaW9uIGJvZHkgdGhhdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvblxyXG4gICAqICAgIGFzIGluIHRoZSBuZ1BhdHRlcm4gZGlyZWN0aXZlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdQYXR0ZXJuIFNldHMgYHBhdHRlcm5gIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSBuZ01vZGVsIHZhbHVlIGRvZXMgbm90IG1hdGNoXHJcbiAgICogICAgYSBSZWdFeHAgZm91bmQgYnkgZXZhbHVhdGluZyB0aGUgQW5ndWxhciBleHByZXNzaW9uIGdpdmVuIGluIHRoZSBhdHRyaWJ1dGUgdmFsdWUuXHJcbiAgICogICAgSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgUmVnRXhwIG9iamVjdCB0aGVuIHRoaXMgaXMgdXNlZCBkaXJlY3RseS5cclxuICAgKiAgICBJZiB0aGUgZXhwcmVzc2lvbiBpcyBhIHN0cmluZyB0aGVuIGl0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgUmVnRXhwIGFmdGVyIHdyYXBwaW5nIGl0IGluIGBeYCBhbmQgYCRgXHJcbiAgICogICAgY2hhcmFjdGVycy4gRm9yIGluc3RhbmNlLCBgXCJhYmNcImAgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYG5ldyBSZWdFeHAoJ15hYmMkJylgLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNlclxyXG4gICAqICAgIGludGVyYWN0aW9uIHdpdGggdGhlIGlucHV0IGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAgICA8ZXhhbXBsZSBuYW1lPVwidXJsLWlucHV0LWRpcmVjdGl2ZVwiIG1vZHVsZT1cInVybEV4YW1wbGVcIj5cclxuICAgICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgICA8c2NyaXB0PlxyXG4gICAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCd1cmxFeGFtcGxlJywgW10pXHJcbiAgICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xyXG4gICAgICAgICAgICAgICAkc2NvcGUudGV4dCA9ICdodHRwOi8vZ29vZ2xlLmNvbSc7XHJcbiAgICAgICAgICAgICB9XSk7XHJcbiAgICAgICAgIDwvc2NyaXB0PlxyXG4gICAgICAgICA8Zm9ybSBuYW1lPVwibXlGb3JtXCIgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XHJcbiAgICAgICAgICAgVVJMOiA8aW5wdXQgdHlwZT1cInVybFwiIG5hbWU9XCJpbnB1dFwiIG5nLW1vZGVsPVwidGV4dFwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPlxyXG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci51cmxcIj5cclxuICAgICAgICAgICAgIE5vdCB2YWxpZCB1cmwhPC9zcGFuPlxyXG4gICAgICAgICAgIDx0dD50ZXh0ID0ge3t0ZXh0fX08L3R0Pjxici8+XHJcbiAgICAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kdmFsaWQgPSB7e215Rm9ybS5pbnB1dC4kdmFsaWR9fTwvdHQ+PGJyLz5cclxuICAgICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiRlcnJvciA9IHt7bXlGb3JtLmlucHV0LiRlcnJvcn19PC90dD48YnIvPlxyXG4gICAgICAgICAgIDx0dD5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0uJHZhbGlkfX08L3R0Pjxici8+XHJcbiAgICAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IucmVxdWlyZWQgPSB7eyEhbXlGb3JtLiRlcnJvci5yZXF1aXJlZH19PC90dD48YnIvPlxyXG4gICAgICAgICAgIDx0dD5teUZvcm0uJGVycm9yLnVybCA9IHt7ISFteUZvcm0uJGVycm9yLnVybH19PC90dD48YnIvPlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZmlsZT5cclxuICAgICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgICAgICB2YXIgdGV4dCA9IGVsZW1lbnQoYnkuYmluZGluZygndGV4dCcpKTtcclxuICAgICAgICAgIHZhciB2YWxpZCA9IGVsZW1lbnQoYnkuYmluZGluZygnbXlGb3JtLmlucHV0LiR2YWxpZCcpKTtcclxuICAgICAgICAgIHZhciBpbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ3RleHQnKSk7XHJcblxyXG4gICAgICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGV4cGVjdCh0ZXh0LmdldFRleHQoKSkudG9Db250YWluKCdodHRwOi8vZ29vZ2xlLmNvbScpO1xyXG4gICAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3RydWUnKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGl0KCdzaG91bGQgYmUgaW52YWxpZCBpZiBlbXB0eScsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpbnB1dC5jbGVhcigpO1xyXG4gICAgICAgICAgICBpbnB1dC5zZW5kS2V5cygnJyk7XHJcblxyXG4gICAgICAgICAgICBleHBlY3QodGV4dC5nZXRUZXh0KCkpLnRvRXF1YWwoJ3RleHQgPScpO1xyXG4gICAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgbm90IHVybCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpbnB1dC5jbGVhcigpO1xyXG4gICAgICAgICAgICBpbnB1dC5zZW5kS2V5cygnYm94Jyk7XHJcblxyXG4gICAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICA8L2ZpbGU+XHJcbiAgICAgIDwvZXhhbXBsZT5cclxuICAgKi9cclxuICAndXJsJzogdXJsSW5wdXRUeXBlLFxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIGlucHV0XHJcbiAgICogQG5hbWUgaW5wdXRbZW1haWxdXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBUZXh0IGlucHV0IHdpdGggZW1haWwgdmFsaWRhdGlvbi4gU2V0cyB0aGUgYGVtYWlsYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiBub3QgYSB2YWxpZCBlbWFpbFxyXG4gICAqIGFkZHJlc3MuXHJcbiAgICpcclxuICAgKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiPlxyXG4gICAqICoqTm90ZToqKiBgaW5wdXRbZW1haWxdYCB1c2VzIGEgcmVnZXggdG8gdmFsaWRhdGUgZW1haWwgYWRkcmVzc2VzIHRoYXQgaXMgZGVyaXZlZCBmcm9tIHRoZSByZWdleFxyXG4gICAqIHVzZWQgaW4gQ2hyb21pdW0uIElmIHlvdSBuZWVkIHN0cmljdGVyIHZhbGlkYXRpb24gKGUuZy4gcmVxdWlyaW5nIGEgdG9wLWxldmVsIGRvbWFpbiksIHlvdSBjYW5cclxuICAgKiB1c2UgYG5nLXBhdHRlcm5gIG9yIG1vZGlmeSB0aGUgYnVpbHQtaW4gdmFsaWRhdG9ycyAoc2VlIHRoZSB7QGxpbmsgZ3VpZGUvZm9ybXMgRm9ybXMgZ3VpZGV9KVxyXG4gICAqIDwvZGl2PlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5nTW9kZWwgQXNzaWduYWJsZSBhbmd1bGFyIGV4cHJlc3Npb24gdG8gZGF0YS1iaW5kIHRvLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1JlcXVpcmVkIEFkZHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgYW5kIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBjb25zdHJhaW50IHRvXHJcbiAgICogICAgdGhlIGVsZW1lbnQgd2hlbiB0aGUgbmdSZXF1aXJlZCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLiBVc2UgYG5nUmVxdWlyZWRgIGluc3RlYWQgb2ZcclxuICAgKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IG5nTWlubGVuZ3RoIFNldHMgYG1pbmxlbmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIHNob3J0ZXIgdGhhblxyXG4gICAqICAgIG1pbmxlbmd0aC5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IG5nTWF4bGVuZ3RoIFNldHMgYG1heGxlbmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIGxvbmdlciB0aGFuXHJcbiAgICogICAgbWF4bGVuZ3RoLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gcGF0dGVybiBTaW1pbGFyIHRvIGBuZ1BhdHRlcm5gIGV4Y2VwdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgaXMgdGhlIGFjdHVhbCBzdHJpbmdcclxuICAgKiAgICB0aGF0IGNvbnRhaW5zIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gYm9keSB0aGF0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgcmVndWxhciBleHByZXNzaW9uXHJcbiAgICogICAgYXMgaW4gdGhlIG5nUGF0dGVybiBkaXJlY3RpdmUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ1BhdHRlcm4gU2V0cyBgcGF0dGVybmAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIG5nTW9kZWwgdmFsdWUgZG9lcyBub3QgbWF0Y2hcclxuICAgKiAgICBhIFJlZ0V4cCBmb3VuZCBieSBldmFsdWF0aW5nIHRoZSBBbmd1bGFyIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlIGF0dHJpYnV0ZSB2YWx1ZS5cclxuICAgKiAgICBJZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSBSZWdFeHAgb2JqZWN0IHRoZW4gdGhpcyBpcyB1c2VkIGRpcmVjdGx5LlxyXG4gICAqICAgIElmIHRoZSBleHByZXNzaW9uIGlzIGEgc3RyaW5nIHRoZW4gaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBSZWdFeHAgYWZ0ZXIgd3JhcHBpbmcgaXQgaW4gYF5gIGFuZCBgJGBcclxuICAgKiAgICBjaGFyYWN0ZXJzLiBGb3IgaW5zdGFuY2UsIGBcImFiY1wiYCB3aWxsIGJlIGNvbnZlcnRlZCB0byBgbmV3IFJlZ0V4cCgnXmFiYyQnKWAuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyXHJcbiAgICogICAgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICAgIDxleGFtcGxlIG5hbWU9XCJlbWFpbC1pbnB1dC1kaXJlY3RpdmVcIiBtb2R1bGU9XCJlbWFpbEV4YW1wbGVcIj5cclxuICAgICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgICA8c2NyaXB0PlxyXG4gICAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdlbWFpbEV4YW1wbGUnLCBbXSlcclxuICAgICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAgICAgICAgICAgICAgICRzY29wZS50ZXh0ID0gJ21lQGV4YW1wbGUuY29tJztcclxuICAgICAgICAgICAgIH1dKTtcclxuICAgICAgICAgPC9zY3JpcHQ+XHJcbiAgICAgICAgICAgPGZvcm0gbmFtZT1cIm15Rm9ybVwiIG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxyXG4gICAgICAgICAgICAgRW1haWw6IDxpbnB1dCB0eXBlPVwiZW1haWxcIiBuYW1lPVwiaW5wdXRcIiBuZy1tb2RlbD1cInRleHRcIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmlucHV0LiRlcnJvci5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICBSZXF1aXJlZCE8L3NwYW4+XHJcbiAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yXCIgbmctc2hvdz1cIm15Rm9ybS5pbnB1dC4kZXJyb3IuZW1haWxcIj5cclxuICAgICAgICAgICAgICAgTm90IHZhbGlkIGVtYWlsITwvc3Bhbj5cclxuICAgICAgICAgICAgIDx0dD50ZXh0ID0ge3t0ZXh0fX08L3R0Pjxici8+XHJcbiAgICAgICAgICAgICA8dHQ+bXlGb3JtLmlucHV0LiR2YWxpZCA9IHt7bXlGb3JtLmlucHV0LiR2YWxpZH19PC90dD48YnIvPlxyXG4gICAgICAgICAgICAgPHR0Pm15Rm9ybS5pbnB1dC4kZXJyb3IgPSB7e215Rm9ybS5pbnB1dC4kZXJyb3J9fTwvdHQ+PGJyLz5cclxuICAgICAgICAgICAgIDx0dD5teUZvcm0uJHZhbGlkID0ge3tteUZvcm0uJHZhbGlkfX08L3R0Pjxici8+XHJcbiAgICAgICAgICAgICA8dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVkfX08L3R0Pjxici8+XHJcbiAgICAgICAgICAgICA8dHQ+bXlGb3JtLiRlcnJvci5lbWFpbCA9IHt7ISFteUZvcm0uJGVycm9yLmVtYWlsfX08L3R0Pjxici8+XHJcbiAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICA8L2ZpbGU+XHJcbiAgICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICAgICAgdmFyIHRleHQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ3RleHQnKSk7XHJcbiAgICAgICAgICB2YXIgdmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS5pbnB1dC4kdmFsaWQnKSk7XHJcbiAgICAgICAgICB2YXIgaW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCd0ZXh0JykpO1xyXG5cclxuICAgICAgICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBleHBlY3QodGV4dC5nZXRUZXh0KCkpLnRvQ29udGFpbignbWVAZXhhbXBsZS5jb20nKTtcclxuICAgICAgICAgICAgZXhwZWN0KHZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCd0cnVlJyk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgZW1wdHknLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaW5wdXQuY2xlYXIoKTtcclxuICAgICAgICAgICAgaW5wdXQuc2VuZEtleXMoJycpO1xyXG4gICAgICAgICAgICBleHBlY3QodGV4dC5nZXRUZXh0KCkpLnRvRXF1YWwoJ3RleHQgPScpO1xyXG4gICAgICAgICAgICBleHBlY3QodmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgbm90IGVtYWlsJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlucHV0LmNsZWFyKCk7XHJcbiAgICAgICAgICAgIGlucHV0LnNlbmRLZXlzKCd4eHgnKTtcclxuXHJcbiAgICAgICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIDwvZmlsZT5cclxuICAgICAgPC9leGFtcGxlPlxyXG4gICAqL1xyXG4gICdlbWFpbCc6IGVtYWlsSW5wdXRUeXBlLFxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIGlucHV0XHJcbiAgICogQG5hbWUgaW5wdXRbcmFkaW9dXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBIVE1MIHJhZGlvIGJ1dHRvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgVGhlIHZhbHVlIHRvIHdoaWNoIHRoZSBleHByZXNzaW9uIHNob3VsZCBiZSBzZXQgd2hlbiBzZWxlY3RlZC5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyXHJcbiAgICogICAgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmdWYWx1ZSBBbmd1bGFyIGV4cHJlc3Npb24gd2hpY2ggc2V0cyB0aGUgdmFsdWUgdG8gd2hpY2ggdGhlIGV4cHJlc3Npb24gc2hvdWxkXHJcbiAgICogICAgYmUgc2V0IHdoZW4gc2VsZWN0ZWQuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAgICA8ZXhhbXBsZSBuYW1lPVwicmFkaW8taW5wdXQtZGlyZWN0aXZlXCIgbW9kdWxlPVwicmFkaW9FeGFtcGxlXCI+XHJcbiAgICAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgICAgPHNjcmlwdD5cclxuICAgICAgICAgICBhbmd1bGFyLm1vZHVsZSgncmFkaW9FeGFtcGxlJywgW10pXHJcbiAgICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xyXG4gICAgICAgICAgICAgICAkc2NvcGUuY29sb3IgPSAnYmx1ZSc7XHJcbiAgICAgICAgICAgICAgICRzY29wZS5zcGVjaWFsVmFsdWUgPSB7XHJcbiAgICAgICAgICAgICAgICAgXCJpZFwiOiBcIjEyMzQ1XCIsXHJcbiAgICAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcImdyZWVuXCJcclxuICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgIH1dKTtcclxuICAgICAgICAgPC9zY3JpcHQ+XHJcbiAgICAgICAgIDxmb3JtIG5hbWU9XCJteUZvcm1cIiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cclxuICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmctbW9kZWw9XCJjb2xvclwiIHZhbHVlPVwicmVkXCI+ICBSZWQgPGJyLz5cclxuICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmctbW9kZWw9XCJjb2xvclwiIG5nLXZhbHVlPVwic3BlY2lhbFZhbHVlXCI+IEdyZWVuIDxici8+XHJcbiAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5nLW1vZGVsPVwiY29sb3JcIiB2YWx1ZT1cImJsdWVcIj4gQmx1ZSA8YnIvPlxyXG4gICAgICAgICAgIDx0dD5jb2xvciA9IHt7Y29sb3IgfCBqc29ufX08L3R0Pjxici8+XHJcbiAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICBOb3RlIHRoYXQgYG5nLXZhbHVlPVwic3BlY2lhbFZhbHVlXCJgIHNldHMgcmFkaW8gaXRlbSdzIHZhbHVlIHRvIGJlIHRoZSB2YWx1ZSBvZiBgJHNjb3BlLnNwZWNpYWxWYWx1ZWAuXHJcbiAgICAgICAgPC9maWxlPlxyXG4gICAgICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgICAgIGl0KCdzaG91bGQgY2hhbmdlIHN0YXRlJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciBjb2xvciA9IGVsZW1lbnQoYnkuYmluZGluZygnY29sb3InKSk7XHJcblxyXG4gICAgICAgICAgICBleHBlY3QoY29sb3IuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2JsdWUnKTtcclxuXHJcbiAgICAgICAgICAgIGVsZW1lbnQuYWxsKGJ5Lm1vZGVsKCdjb2xvcicpKS5nZXQoMCkuY2xpY2soKTtcclxuXHJcbiAgICAgICAgICAgIGV4cGVjdChjb2xvci5nZXRUZXh0KCkpLnRvQ29udGFpbigncmVkJyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICA8L2ZpbGU+XHJcbiAgICAgIDwvZXhhbXBsZT5cclxuICAgKi9cclxuICAncmFkaW8nOiByYWRpb0lucHV0VHlwZSxcclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBpbnB1dFxyXG4gICAqIEBuYW1lIGlucHV0W2NoZWNrYm94XVxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogSFRNTCBjaGVja2JveC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuXHJcbiAgICogQHBhcmFtIHtleHByZXNzaW9uPX0gbmdUcnVlVmFsdWUgVGhlIHZhbHVlIHRvIHdoaWNoIHRoZSBleHByZXNzaW9uIHNob3VsZCBiZSBzZXQgd2hlbiBzZWxlY3RlZC5cclxuICAgKiBAcGFyYW0ge2V4cHJlc3Npb249fSBuZ0ZhbHNlVmFsdWUgVGhlIHZhbHVlIHRvIHdoaWNoIHRoZSBleHByZXNzaW9uIHNob3VsZCBiZSBzZXQgd2hlbiBub3Qgc2VsZWN0ZWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBuZ0NoYW5nZSBBbmd1bGFyIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGR1ZSB0byB1c2VyXHJcbiAgICogICAgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICAgIDxleGFtcGxlIG5hbWU9XCJjaGVja2JveC1pbnB1dC1kaXJlY3RpdmVcIiBtb2R1bGU9XCJjaGVja2JveEV4YW1wbGVcIj5cclxuICAgICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgICA8c2NyaXB0PlxyXG4gICAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCdjaGVja2JveEV4YW1wbGUnLCBbXSlcclxuICAgICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAgICAgICAgICAgICAgICRzY29wZS52YWx1ZTEgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAkc2NvcGUudmFsdWUyID0gJ1lFUydcclxuICAgICAgICAgICAgIH1dKTtcclxuICAgICAgICAgPC9zY3JpcHQ+XHJcbiAgICAgICAgIDxmb3JtIG5hbWU9XCJteUZvcm1cIiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cclxuICAgICAgICAgICBWYWx1ZTE6IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuZy1tb2RlbD1cInZhbHVlMVwiPiA8YnIvPlxyXG4gICAgICAgICAgIFZhbHVlMjogPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5nLW1vZGVsPVwidmFsdWUyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBuZy10cnVlLXZhbHVlPVwiJ1lFUydcIiBuZy1mYWxzZS12YWx1ZT1cIidOTydcIj4gPGJyLz5cclxuICAgICAgICAgICA8dHQ+dmFsdWUxID0ge3t2YWx1ZTF9fTwvdHQ+PGJyLz5cclxuICAgICAgICAgICA8dHQ+dmFsdWUyID0ge3t2YWx1ZTJ9fTwvdHQ+PGJyLz5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2ZpbGU+XHJcbiAgICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICAgICAgaXQoJ3Nob3VsZCBjaGFuZ2Ugc3RhdGUnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdmFyIHZhbHVlMSA9IGVsZW1lbnQoYnkuYmluZGluZygndmFsdWUxJykpO1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUyID0gZWxlbWVudChieS5iaW5kaW5nKCd2YWx1ZTInKSk7XHJcblxyXG4gICAgICAgICAgICBleHBlY3QodmFsdWUxLmdldFRleHQoKSkudG9Db250YWluKCd0cnVlJyk7XHJcbiAgICAgICAgICAgIGV4cGVjdCh2YWx1ZTIuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ1lFUycpO1xyXG5cclxuICAgICAgICAgICAgZWxlbWVudChieS5tb2RlbCgndmFsdWUxJykpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3ZhbHVlMicpKS5jbGljaygpO1xyXG5cclxuICAgICAgICAgICAgZXhwZWN0KHZhbHVlMS5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTtcclxuICAgICAgICAgICAgZXhwZWN0KHZhbHVlMi5nZXRUZXh0KCkpLnRvQ29udGFpbignTk8nKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIDwvZmlsZT5cclxuICAgICAgPC9leGFtcGxlPlxyXG4gICAqL1xyXG4gICdjaGVja2JveCc6IGNoZWNrYm94SW5wdXRUeXBlLFxyXG5cclxuICAnaGlkZGVuJzogbm9vcCxcclxuICAnYnV0dG9uJzogbm9vcCxcclxuICAnc3VibWl0Jzogbm9vcCxcclxuICAncmVzZXQnOiBub29wLFxyXG4gICdmaWxlJzogbm9vcFxyXG59O1xyXG5cclxuZnVuY3Rpb24gc3RyaW5nQmFzZWRJbnB1dFR5cGUoY3RybCkge1xyXG4gIGN0cmwuJGZvcm1hdHRlcnMucHVzaChmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGN0cmwuJGlzRW1wdHkodmFsdWUpID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0ZXh0SW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpIHtcclxuICBiYXNlSW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpO1xyXG4gIHN0cmluZ0Jhc2VkSW5wdXRUeXBlKGN0cmwpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBiYXNlSW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpIHtcclxuICB2YXIgcGxhY2Vob2xkZXIgPSBlbGVtZW50WzBdLnBsYWNlaG9sZGVyLCBub2V2ZW50ID0ge307XHJcbiAgdmFyIHR5cGUgPSBsb3dlcmNhc2UoZWxlbWVudFswXS50eXBlKTtcclxuXHJcbiAgLy8gSW4gY29tcG9zaXRpb24gbW9kZSwgdXNlcnMgYXJlIHN0aWxsIGlucHV0aW5nIGludGVybWVkaWF0ZSB0ZXh0IGJ1ZmZlcixcclxuICAvLyBob2xkIHRoZSBsaXN0ZW5lciB1bnRpbCBjb21wb3NpdGlvbiBpcyBkb25lLlxyXG4gIC8vIE1vcmUgYWJvdXQgY29tcG9zaXRpb24gZXZlbnRzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ29tcG9zaXRpb25FdmVudFxyXG4gIGlmICghJHNuaWZmZXIuYW5kcm9pZCkge1xyXG4gICAgdmFyIGNvbXBvc2luZyA9IGZhbHNlO1xyXG5cclxuICAgIGVsZW1lbnQub24oJ2NvbXBvc2l0aW9uc3RhcnQnLCBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgIGNvbXBvc2luZyA9IHRydWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICBlbGVtZW50Lm9uKCdjb21wb3NpdGlvbmVuZCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICBjb21wb3NpbmcgPSBmYWxzZTtcclxuICAgICAgbGlzdGVuZXIoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24oZXYpIHtcclxuICAgIGlmIChjb21wb3NpbmcpIHJldHVybjtcclxuICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsKCksXHJcbiAgICAgICAgZXZlbnQgPSBldiAmJiBldi50eXBlO1xyXG5cclxuICAgIC8vIElFICgxMSBhbmQgdW5kZXIpIHNlZW0gdG8gZW1pdCBhbiAnaW5wdXQnIGV2ZW50IGlmIHRoZSBwbGFjZWhvbGRlciB2YWx1ZSBjaGFuZ2VzLlxyXG4gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkaXJ0eSB0aGUgdmFsdWUgd2hlbiB0aGlzIGhhcHBlbnMsIHNvIHdlIGFib3J0IGhlcmUuIFVuZm9ydHVuYXRlbHksXHJcbiAgICAvLyBJRSBhbHNvIHNlbmRzIGlucHV0IGV2ZW50cyBmb3Igb3RoZXIgbm9uLWlucHV0LXJlbGF0ZWQgdGhpbmdzLCAoc3VjaCBhcyBmb2N1c2luZyBvbiBhXHJcbiAgICAvLyBmb3JtIGNvbnRyb2wpLCBzbyB0aGlzIGNoYW5nZSBpcyBub3QgZW50aXJlbHkgZW5vdWdoIHRvIHNvbHZlIHRoaXMuXHJcbiAgICBpZiAobXNpZSAmJiAoZXYgfHwgbm9ldmVudCkudHlwZSA9PT0gJ2lucHV0JyAmJiBlbGVtZW50WzBdLnBsYWNlaG9sZGVyICE9PSBwbGFjZWhvbGRlcikge1xyXG4gICAgICBwbGFjZWhvbGRlciA9IGVsZW1lbnRbMF0ucGxhY2Vob2xkZXI7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBCeSBkZWZhdWx0IHdlIHdpbGwgdHJpbSB0aGUgdmFsdWVcclxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUgbmctdHJpbSBleGlzdHMgd2Ugd2lsbCBhdm9pZCB0cmltbWluZ1xyXG4gICAgLy8gSWYgaW5wdXQgdHlwZSBpcyAncGFzc3dvcmQnLCB0aGUgdmFsdWUgaXMgbmV2ZXIgdHJpbW1lZFxyXG4gICAgaWYgKHR5cGUgIT09ICdwYXNzd29yZCcgJiYgKCFhdHRyLm5nVHJpbSB8fCBhdHRyLm5nVHJpbSAhPT0gJ2ZhbHNlJykpIHtcclxuICAgICAgdmFsdWUgPSB0cmltKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiBhIGNvbnRyb2wgaXMgc3VmZmVyaW5nIGZyb20gYmFkIGlucHV0IChkdWUgdG8gbmF0aXZlIHZhbGlkYXRvcnMpLCBicm93c2VycyBkaXNjYXJkIGl0c1xyXG4gICAgLy8gdmFsdWUsIHNvIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gcmV2YWxpZGF0ZSAoYnkgY2FsbGluZyAkc2V0Vmlld1ZhbHVlIGFnYWluKSBldmVuIGlmIHRoZVxyXG4gICAgLy8gY29udHJvbCdzIHZhbHVlIGlzIHRoZSBzYW1lIGVtcHR5IHZhbHVlIHR3aWNlIGluIGEgcm93LlxyXG4gICAgaWYgKGN0cmwuJHZpZXdWYWx1ZSAhPT0gdmFsdWUgfHwgKHZhbHVlID09PSAnJyAmJiBjdHJsLiQkaGFzTmF0aXZlVmFsaWRhdG9ycykpIHtcclxuICAgICAgY3RybC4kc2V0Vmlld1ZhbHVlKHZhbHVlLCBldmVudCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gaWYgdGhlIGJyb3dzZXIgZG9lcyBzdXBwb3J0IFwiaW5wdXRcIiBldmVudCwgd2UgYXJlIGZpbmUgLSBleGNlcHQgb24gSUU5IHdoaWNoIGRvZXNuJ3QgZmlyZSB0aGVcclxuICAvLyBpbnB1dCBldmVudCBvbiBiYWNrc3BhY2UsIGRlbGV0ZSBvciBjdXRcclxuICBpZiAoJHNuaWZmZXIuaGFzRXZlbnQoJ2lucHV0JykpIHtcclxuICAgIGVsZW1lbnQub24oJ2lucHV0JywgbGlzdGVuZXIpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB2YXIgdGltZW91dDtcclxuXHJcbiAgICB2YXIgZGVmZXJMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2KSB7XHJcbiAgICAgIGlmICghdGltZW91dCkge1xyXG4gICAgICAgIHRpbWVvdXQgPSAkYnJvd3Nlci5kZWZlcihmdW5jdGlvbigpIHtcclxuICAgICAgICAgIGxpc3RlbmVyKGV2KTtcclxuICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGVsZW1lbnQub24oJ2tleWRvd24nLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZTtcclxuXHJcbiAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAvLyAgICBjb21tYW5kICAgICAgICAgICAgbW9kaWZpZXJzICAgICAgICAgICAgICAgICAgIGFycm93c1xyXG4gICAgICBpZiAoa2V5ID09PSA5MSB8fCAoMTUgPCBrZXkgJiYga2V5IDwgMTkpIHx8ICgzNyA8PSBrZXkgJiYga2V5IDw9IDQwKSkgcmV0dXJuO1xyXG5cclxuICAgICAgZGVmZXJMaXN0ZW5lcihldmVudCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBpZiB1c2VyIG1vZGlmaWVzIGlucHV0IHZhbHVlIHVzaW5nIGNvbnRleHQgbWVudSBpbiBJRSwgd2UgbmVlZCBcInBhc3RlXCIgYW5kIFwiY3V0XCIgZXZlbnRzIHRvIGNhdGNoIGl0XHJcbiAgICBpZiAoJHNuaWZmZXIuaGFzRXZlbnQoJ3Bhc3RlJykpIHtcclxuICAgICAgZWxlbWVudC5vbigncGFzdGUgY3V0JywgZGVmZXJMaXN0ZW5lcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBpZiB1c2VyIHBhc3RlIGludG8gaW5wdXQgdXNpbmcgbW91c2Ugb24gb2xkZXIgYnJvd3NlclxyXG4gIC8vIG9yIGZvcm0gYXV0b2NvbXBsZXRlIG9uIG5ld2VyIGJyb3dzZXIsIHdlIG5lZWQgXCJjaGFuZ2VcIiBldmVudCB0byBjYXRjaCBpdFxyXG4gIGVsZW1lbnQub24oJ2NoYW5nZScsIGxpc3RlbmVyKTtcclxuXHJcbiAgY3RybC4kcmVuZGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICBlbGVtZW50LnZhbChjdHJsLiRpc0VtcHR5KGN0cmwuJG1vZGVsVmFsdWUpID8gJycgOiBjdHJsLiR2aWV3VmFsdWUpO1xyXG4gIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdlZWtQYXJzZXIoaXNvV2VlaywgZXhpc3RpbmdEYXRlKSB7XHJcbiAgaWYgKGlzRGF0ZShpc29XZWVrKSkge1xyXG4gICAgcmV0dXJuIGlzb1dlZWs7XHJcbiAgfVxyXG5cclxuICBpZiAoaXNTdHJpbmcoaXNvV2VlaykpIHtcclxuICAgIFdFRUtfUkVHRVhQLmxhc3RJbmRleCA9IDA7XHJcbiAgICB2YXIgcGFydHMgPSBXRUVLX1JFR0VYUC5leGVjKGlzb1dlZWspO1xyXG4gICAgaWYgKHBhcnRzKSB7XHJcbiAgICAgIHZhciB5ZWFyID0gK3BhcnRzWzFdLFxyXG4gICAgICAgICAgd2VlayA9ICtwYXJ0c1syXSxcclxuICAgICAgICAgIGhvdXJzID0gMCxcclxuICAgICAgICAgIG1pbnV0ZXMgPSAwLFxyXG4gICAgICAgICAgc2Vjb25kcyA9IDAsXHJcbiAgICAgICAgICBtaWxsaXNlY29uZHMgPSAwLFxyXG4gICAgICAgICAgZmlyc3RUaHVycyA9IGdldEZpcnN0VGh1cnNkYXlPZlllYXIoeWVhciksXHJcbiAgICAgICAgICBhZGREYXlzID0gKHdlZWsgLSAxKSAqIDc7XHJcblxyXG4gICAgICBpZiAoZXhpc3RpbmdEYXRlKSB7XHJcbiAgICAgICAgaG91cnMgPSBleGlzdGluZ0RhdGUuZ2V0SG91cnMoKTtcclxuICAgICAgICBtaW51dGVzID0gZXhpc3RpbmdEYXRlLmdldE1pbnV0ZXMoKTtcclxuICAgICAgICBzZWNvbmRzID0gZXhpc3RpbmdEYXRlLmdldFNlY29uZHMoKTtcclxuICAgICAgICBtaWxsaXNlY29uZHMgPSBleGlzdGluZ0RhdGUuZ2V0TWlsbGlzZWNvbmRzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCAwLCBmaXJzdFRodXJzLmdldERhdGUoKSArIGFkZERheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIE5hTjtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlRGF0ZVBhcnNlcihyZWdleHAsIG1hcHBpbmcpIHtcclxuICByZXR1cm4gZnVuY3Rpb24oaXNvLCBkYXRlKSB7XHJcbiAgICB2YXIgcGFydHMsIG1hcDtcclxuXHJcbiAgICBpZiAoaXNEYXRlKGlzbykpIHtcclxuICAgICAgcmV0dXJuIGlzbztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNTdHJpbmcoaXNvKSkge1xyXG4gICAgICAvLyBXaGVuIGEgZGF0ZSBpcyBKU09OJ2lmaWVkIHRvIHdyYXBzIGl0c2VsZiBpbnNpZGUgb2YgYW4gZXh0cmFcclxuICAgICAgLy8gc2V0IG9mIGRvdWJsZSBxdW90ZXMuIFRoaXMgbWFrZXMgdGhlIGRhdGUgcGFyc2luZyBjb2RlIHVuYWJsZVxyXG4gICAgICAvLyB0byBtYXRjaCB0aGUgZGF0ZSBzdHJpbmcgYW5kIHBhcnNlIGl0IGFzIGEgZGF0ZS5cclxuICAgICAgaWYgKGlzby5jaGFyQXQoMCkgPT0gJ1wiJyAmJiBpc28uY2hhckF0KGlzby5sZW5ndGggLSAxKSA9PSAnXCInKSB7XHJcbiAgICAgICAgaXNvID0gaXNvLnN1YnN0cmluZygxLCBpc28ubGVuZ3RoIC0gMSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKElTT19EQVRFX1JFR0VYUC50ZXN0KGlzbykpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoaXNvKTtcclxuICAgICAgfVxyXG4gICAgICByZWdleHAubGFzdEluZGV4ID0gMDtcclxuICAgICAgcGFydHMgPSByZWdleHAuZXhlYyhpc28pO1xyXG5cclxuICAgICAgaWYgKHBhcnRzKSB7XHJcbiAgICAgICAgcGFydHMuc2hpZnQoKTtcclxuICAgICAgICBpZiAoZGF0ZSkge1xyXG4gICAgICAgICAgbWFwID0ge1xyXG4gICAgICAgICAgICB5eXl5OiBkYXRlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgICAgICAgIE1NOiBkYXRlLmdldE1vbnRoKCkgKyAxLFxyXG4gICAgICAgICAgICBkZDogZGF0ZS5nZXREYXRlKCksXHJcbiAgICAgICAgICAgIEhIOiBkYXRlLmdldEhvdXJzKCksXHJcbiAgICAgICAgICAgIG1tOiBkYXRlLmdldE1pbnV0ZXMoKSxcclxuICAgICAgICAgICAgc3M6IGRhdGUuZ2V0U2Vjb25kcygpLFxyXG4gICAgICAgICAgICBzc3M6IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLyAxMDAwXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBtYXAgPSB7IHl5eXk6IDE5NzAsIE1NOiAxLCBkZDogMSwgSEg6IDAsIG1tOiAwLCBzczogMCwgc3NzOiAwIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3JFYWNoKHBhcnRzLCBmdW5jdGlvbihwYXJ0LCBpbmRleCkge1xyXG4gICAgICAgICAgaWYgKGluZGV4IDwgbWFwcGluZy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbWFwW21hcHBpbmdbaW5kZXhdXSA9ICtwYXJ0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShtYXAueXl5eSwgbWFwLk1NIC0gMSwgbWFwLmRkLCBtYXAuSEgsIG1hcC5tbSwgbWFwLnNzIHx8IDAsIG1hcC5zc3MgKiAxMDAwIHx8IDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE5hTjtcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVEYXRlSW5wdXRUeXBlKHR5cGUsIHJlZ2V4cCwgcGFyc2VEYXRlLCBmb3JtYXQpIHtcclxuICByZXR1cm4gZnVuY3Rpb24gZHluYW1pY0RhdGVJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3NlciwgJGZpbHRlcikge1xyXG4gICAgYmFkSW5wdXRDaGVja2VyKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsKTtcclxuICAgIGJhc2VJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3Nlcik7XHJcbiAgICB2YXIgdGltZXpvbmUgPSBjdHJsICYmIGN0cmwuJG9wdGlvbnMgJiYgY3RybC4kb3B0aW9ucy50aW1lem9uZTtcclxuICAgIHZhciBwcmV2aW91c0RhdGU7XHJcblxyXG4gICAgY3RybC4kJHBhcnNlck5hbWUgPSB0eXBlO1xyXG4gICAgY3RybC4kcGFyc2Vycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgIGlmIChjdHJsLiRpc0VtcHR5KHZhbHVlKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIGlmIChyZWdleHAudGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICAvLyBOb3RlOiBXZSBjYW5ub3QgcmVhZCBjdHJsLiRtb2RlbFZhbHVlLCBhcyB0aGVyZSBtaWdodCBiZSBhIGRpZmZlcmVudFxyXG4gICAgICAgIC8vIHBhcnNlci9mb3JtYXR0ZXIgaW4gdGhlIHByb2Nlc3NpbmcgY2hhaW4gc28gdGhhdCB0aGUgbW9kZWxcclxuICAgICAgICAvLyBjb250YWlucyBzb21lIGRpZmZlcmVudCBkYXRhIGZvcm1hdCFcclxuICAgICAgICB2YXIgcGFyc2VkRGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSwgcHJldmlvdXNEYXRlKTtcclxuICAgICAgICBpZiAodGltZXpvbmUgPT09ICdVVEMnKSB7XHJcbiAgICAgICAgICBwYXJzZWREYXRlLnNldE1pbnV0ZXMocGFyc2VkRGF0ZS5nZXRNaW51dGVzKCkgLSBwYXJzZWREYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyc2VkRGF0ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY3RybC4kZm9ybWF0dGVycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgIGlmICghY3RybC4kaXNFbXB0eSh2YWx1ZSkpIHtcclxuICAgICAgICBpZiAoIWlzRGF0ZSh2YWx1ZSkpIHtcclxuICAgICAgICAgIHRocm93ICRuZ01vZGVsTWluRXJyKCdkYXRlZm10JywgJ0V4cGVjdGVkIGB7MH1gIHRvIGJlIGEgZGF0ZScsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJldmlvdXNEYXRlID0gdmFsdWU7XHJcbiAgICAgICAgaWYgKHByZXZpb3VzRGF0ZSAmJiB0aW1lem9uZSA9PT0gJ1VUQycpIHtcclxuICAgICAgICAgIHZhciB0aW1lem9uZU9mZnNldCA9IDYwMDAwICogcHJldmlvdXNEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XHJcbiAgICAgICAgICBwcmV2aW91c0RhdGUgPSBuZXcgRGF0ZShwcmV2aW91c0RhdGUuZ2V0VGltZSgpICsgdGltZXpvbmVPZmZzZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJGZpbHRlcignZGF0ZScpKHZhbHVlLCBmb3JtYXQsIHRpbWV6b25lKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwcmV2aW91c0RhdGUgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChpc0RlZmluZWQoYXR0ci5taW4pIHx8IGF0dHIubmdNaW4pIHtcclxuICAgICAgdmFyIG1pblZhbDtcclxuICAgICAgY3RybC4kdmFsaWRhdG9ycy5taW4gPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBjdHJsLiRpc0VtcHR5KHZhbHVlKSB8fCBpc1VuZGVmaW5lZChtaW5WYWwpIHx8IHBhcnNlRGF0ZSh2YWx1ZSkgPj0gbWluVmFsO1xyXG4gICAgICB9O1xyXG4gICAgICBhdHRyLiRvYnNlcnZlKCdtaW4nLCBmdW5jdGlvbih2YWwpIHtcclxuICAgICAgICBtaW5WYWwgPSBwYXJzZU9ic2VydmVkRGF0ZVZhbHVlKHZhbCk7XHJcbiAgICAgICAgY3RybC4kdmFsaWRhdGUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGVmaW5lZChhdHRyLm1heCkgfHwgYXR0ci5uZ01heCkge1xyXG4gICAgICB2YXIgbWF4VmFsO1xyXG4gICAgICBjdHJsLiR2YWxpZGF0b3JzLm1heCA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0cmwuJGlzRW1wdHkodmFsdWUpIHx8IGlzVW5kZWZpbmVkKG1heFZhbCkgfHwgcGFyc2VEYXRlKHZhbHVlKSA8PSBtYXhWYWw7XHJcbiAgICAgIH07XHJcbiAgICAgIGF0dHIuJG9ic2VydmUoJ21heCcsIGZ1bmN0aW9uKHZhbCkge1xyXG4gICAgICAgIG1heFZhbCA9IHBhcnNlT2JzZXJ2ZWREYXRlVmFsdWUodmFsKTtcclxuICAgICAgICBjdHJsLiR2YWxpZGF0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCAkaXNFbXB0eSB0byBkZXRlY3QgaW52YWxpZCBkYXRlcyBhcyB3ZWxsXHJcbiAgICBjdHJsLiRpc0VtcHR5ID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgLy8gSW52YWxpZCBEYXRlOiBnZXRUaW1lKCkgcmV0dXJucyBOYU5cclxuICAgICAgcmV0dXJuICF2YWx1ZSB8fCAodmFsdWUuZ2V0VGltZSAmJiB2YWx1ZS5nZXRUaW1lKCkgIT09IHZhbHVlLmdldFRpbWUoKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIHBhcnNlT2JzZXJ2ZWREYXRlVmFsdWUodmFsKSB7XHJcbiAgICAgIHJldHVybiBpc0RlZmluZWQodmFsKSA/IChpc0RhdGUodmFsKSA/IHZhbCA6IHBhcnNlRGF0ZSh2YWwpKSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBiYWRJbnB1dENoZWNrZXIoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwpIHtcclxuICB2YXIgbm9kZSA9IGVsZW1lbnRbMF07XHJcbiAgdmFyIG5hdGl2ZVZhbGlkYXRpb24gPSBjdHJsLiQkaGFzTmF0aXZlVmFsaWRhdG9ycyA9IGlzT2JqZWN0KG5vZGUudmFsaWRpdHkpO1xyXG4gIGlmIChuYXRpdmVWYWxpZGF0aW9uKSB7XHJcbiAgICBjdHJsLiRwYXJzZXJzLnB1c2goZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgdmFyIHZhbGlkaXR5ID0gZWxlbWVudC5wcm9wKFZBTElESVRZX1NUQVRFX1BST1BFUlRZKSB8fCB7fTtcclxuICAgICAgLy8gRGV0ZWN0IGJ1ZyBpbiBGRjM1IGZvciBpbnB1dFtlbWFpbF0gKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjQ0MzApOlxyXG4gICAgICAvLyAtIGFsc28gc2V0cyB2YWxpZGl0eS5iYWRJbnB1dCAoc2hvdWxkIG9ubHkgYmUgdmFsaWRpdHkudHlwZU1pc21hdGNoKS5cclxuICAgICAgLy8gLSBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNlLW1haWwtc3RhdGUtKHR5cGU9ZW1haWwpXHJcbiAgICAgIC8vIC0gY2FuIGlnbm9yZSB0aGlzIGNhc2UgYXMgd2UgY2FuIHN0aWxsIHJlYWQgb3V0IHRoZSBlcnJvbmVvdXMgZW1haWwuLi5cclxuICAgICAgcmV0dXJuIHZhbGlkaXR5LmJhZElucHV0ICYmICF2YWxpZGl0eS50eXBlTWlzbWF0Y2ggPyB1bmRlZmluZWQgOiB2YWx1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gbnVtYmVySW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpIHtcclxuICBiYWRJbnB1dENoZWNrZXIoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwpO1xyXG4gIGJhc2VJbnB1dFR5cGUoc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICRzbmlmZmVyLCAkYnJvd3Nlcik7XHJcblxyXG4gIGN0cmwuJCRwYXJzZXJOYW1lID0gJ251bWJlcic7XHJcbiAgY3RybC4kcGFyc2Vycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICBpZiAoY3RybC4kaXNFbXB0eSh2YWx1ZSkpICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAoTlVNQkVSX1JFR0VYUC50ZXN0KHZhbHVlKSkgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9KTtcclxuXHJcbiAgY3RybC4kZm9ybWF0dGVycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICBpZiAoIWN0cmwuJGlzRW1wdHkodmFsdWUpKSB7XHJcbiAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XHJcbiAgICAgICAgdGhyb3cgJG5nTW9kZWxNaW5FcnIoJ251bWZtdCcsICdFeHBlY3RlZCBgezB9YCB0byBiZSBhIG51bWJlcicsIHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfSk7XHJcblxyXG4gIGlmIChhdHRyLm1pbiB8fCBhdHRyLm5nTWluKSB7XHJcbiAgICB2YXIgbWluVmFsO1xyXG4gICAgY3RybC4kdmFsaWRhdG9ycy5taW4gPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gY3RybC4kaXNFbXB0eSh2YWx1ZSkgfHwgaXNVbmRlZmluZWQobWluVmFsKSB8fCB2YWx1ZSA+PSBtaW5WYWw7XHJcbiAgICB9O1xyXG5cclxuICAgIGF0dHIuJG9ic2VydmUoJ21pbicsIGZ1bmN0aW9uKHZhbCkge1xyXG4gICAgICBpZiAoaXNEZWZpbmVkKHZhbCkgJiYgIWlzTnVtYmVyKHZhbCkpIHtcclxuICAgICAgICB2YWwgPSBwYXJzZUZsb2F0KHZhbCwgMTApO1xyXG4gICAgICB9XHJcbiAgICAgIG1pblZhbCA9IGlzTnVtYmVyKHZhbCkgJiYgIWlzTmFOKHZhbCkgPyB2YWwgOiB1bmRlZmluZWQ7XHJcbiAgICAgIC8vIFRPRE8obWF0c2tvKTogaW1wbGVtZW50IHZhbGlkYXRlTGF0ZXIgdG8gcmVkdWNlIG51bWJlciBvZiB2YWxpZGF0aW9uc1xyXG4gICAgICBjdHJsLiR2YWxpZGF0ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpZiAoYXR0ci5tYXggfHwgYXR0ci5uZ01heCkge1xyXG4gICAgdmFyIG1heFZhbDtcclxuICAgIGN0cmwuJHZhbGlkYXRvcnMubWF4ID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgcmV0dXJuIGN0cmwuJGlzRW1wdHkodmFsdWUpIHx8IGlzVW5kZWZpbmVkKG1heFZhbCkgfHwgdmFsdWUgPD0gbWF4VmFsO1xyXG4gICAgfTtcclxuXHJcbiAgICBhdHRyLiRvYnNlcnZlKCdtYXgnLCBmdW5jdGlvbih2YWwpIHtcclxuICAgICAgaWYgKGlzRGVmaW5lZCh2YWwpICYmICFpc051bWJlcih2YWwpKSB7XHJcbiAgICAgICAgdmFsID0gcGFyc2VGbG9hdCh2YWwsIDEwKTtcclxuICAgICAgfVxyXG4gICAgICBtYXhWYWwgPSBpc051bWJlcih2YWwpICYmICFpc05hTih2YWwpID8gdmFsIDogdW5kZWZpbmVkO1xyXG4gICAgICAvLyBUT0RPKG1hdHNrbyk6IGltcGxlbWVudCB2YWxpZGF0ZUxhdGVyIHRvIHJlZHVjZSBudW1iZXIgb2YgdmFsaWRhdGlvbnNcclxuICAgICAgY3RybC4kdmFsaWRhdGUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdXJsSW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpIHtcclxuICAvLyBOb3RlOiBubyBiYWRJbnB1dENoZWNrZXIgaGVyZSBieSBwdXJwb3NlIGFzIGB1cmxgIGlzIG9ubHkgYSB2YWxpZGF0aW9uXHJcbiAgLy8gaW4gYnJvd3NlcnMsIGkuZS4gd2UgY2FuIGFsd2F5cyByZWFkIG91dCBpbnB1dC52YWx1ZSBldmVuIGlmIGl0IGlzIG5vdCB2YWxpZCFcclxuICBiYXNlSW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpO1xyXG4gIHN0cmluZ0Jhc2VkSW5wdXRUeXBlKGN0cmwpO1xyXG5cclxuICBjdHJsLiQkcGFyc2VyTmFtZSA9ICd1cmwnO1xyXG4gIGN0cmwuJHZhbGlkYXRvcnMudXJsID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIHJldHVybiBjdHJsLiRpc0VtcHR5KHZhbHVlKSB8fCBVUkxfUkVHRVhQLnRlc3QodmFsdWUpO1xyXG4gIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVtYWlsSW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpIHtcclxuICAvLyBOb3RlOiBubyBiYWRJbnB1dENoZWNrZXIgaGVyZSBieSBwdXJwb3NlIGFzIGB1cmxgIGlzIG9ubHkgYSB2YWxpZGF0aW9uXHJcbiAgLy8gaW4gYnJvd3NlcnMsIGkuZS4gd2UgY2FuIGFsd2F5cyByZWFkIG91dCBpbnB1dC52YWx1ZSBldmVuIGlmIGl0IGlzIG5vdCB2YWxpZCFcclxuICBiYXNlSW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsLCAkc25pZmZlciwgJGJyb3dzZXIpO1xyXG4gIHN0cmluZ0Jhc2VkSW5wdXRUeXBlKGN0cmwpO1xyXG5cclxuICBjdHJsLiQkcGFyc2VyTmFtZSA9ICdlbWFpbCc7XHJcbiAgY3RybC4kdmFsaWRhdG9ycy5lbWFpbCA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gY3RybC4kaXNFbXB0eSh2YWx1ZSkgfHwgRU1BSUxfUkVHRVhQLnRlc3QodmFsdWUpO1xyXG4gIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJhZGlvSW5wdXRUeXBlKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJsKSB7XHJcbiAgLy8gbWFrZSB0aGUgbmFtZSB1bmlxdWUsIGlmIG5vdCBkZWZpbmVkXHJcbiAgaWYgKGlzVW5kZWZpbmVkKGF0dHIubmFtZSkpIHtcclxuICAgIGVsZW1lbnQuYXR0cignbmFtZScsIG5leHRVaWQoKSk7XHJcbiAgfVxyXG5cclxuICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbihldikge1xyXG4gICAgaWYgKGVsZW1lbnRbMF0uY2hlY2tlZCkge1xyXG4gICAgICBjdHJsLiRzZXRWaWV3VmFsdWUoYXR0ci52YWx1ZSwgZXYgJiYgZXYudHlwZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZWxlbWVudC5vbignY2xpY2snLCBsaXN0ZW5lcik7XHJcblxyXG4gIGN0cmwuJHJlbmRlciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHZhbHVlID0gYXR0ci52YWx1ZTtcclxuICAgIGVsZW1lbnRbMF0uY2hlY2tlZCA9ICh2YWx1ZSA9PSBjdHJsLiR2aWV3VmFsdWUpO1xyXG4gIH07XHJcblxyXG4gIGF0dHIuJG9ic2VydmUoJ3ZhbHVlJywgY3RybC4kcmVuZGVyKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VDb25zdGFudEV4cHIoJHBhcnNlLCBjb250ZXh0LCBuYW1lLCBleHByZXNzaW9uLCBmYWxsYmFjaykge1xyXG4gIHZhciBwYXJzZUZuO1xyXG4gIGlmIChpc0RlZmluZWQoZXhwcmVzc2lvbikpIHtcclxuICAgIHBhcnNlRm4gPSAkcGFyc2UoZXhwcmVzc2lvbik7XHJcbiAgICBpZiAoIXBhcnNlRm4uY29uc3RhbnQpIHtcclxuICAgICAgdGhyb3cgbWluRXJyKCduZ01vZGVsJykoJ2NvbnN0ZXhwcicsICdFeHBlY3RlZCBjb25zdGFudCBleHByZXNzaW9uIGZvciBgezB9YCwgYnV0IHNhdyAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYHsxfWAuJywgbmFtZSwgZXhwcmVzc2lvbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyc2VGbihjb250ZXh0KTtcclxuICB9XHJcbiAgcmV0dXJuIGZhbGxiYWNrO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjaGVja2JveElucHV0VHlwZShzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCwgJHNuaWZmZXIsICRicm93c2VyLCAkZmlsdGVyLCAkcGFyc2UpIHtcclxuICB2YXIgdHJ1ZVZhbHVlID0gcGFyc2VDb25zdGFudEV4cHIoJHBhcnNlLCBzY29wZSwgJ25nVHJ1ZVZhbHVlJywgYXR0ci5uZ1RydWVWYWx1ZSwgdHJ1ZSk7XHJcbiAgdmFyIGZhbHNlVmFsdWUgPSBwYXJzZUNvbnN0YW50RXhwcigkcGFyc2UsIHNjb3BlLCAnbmdGYWxzZVZhbHVlJywgYXR0ci5uZ0ZhbHNlVmFsdWUsIGZhbHNlKTtcclxuXHJcbiAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24oZXYpIHtcclxuICAgIGN0cmwuJHNldFZpZXdWYWx1ZShlbGVtZW50WzBdLmNoZWNrZWQsIGV2ICYmIGV2LnR5cGUpO1xyXG4gIH07XHJcblxyXG4gIGVsZW1lbnQub24oJ2NsaWNrJywgbGlzdGVuZXIpO1xyXG5cclxuICBjdHJsLiRyZW5kZXIgPSBmdW5jdGlvbigpIHtcclxuICAgIGVsZW1lbnRbMF0uY2hlY2tlZCA9IGN0cmwuJHZpZXdWYWx1ZTtcclxuICB9O1xyXG5cclxuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYCRpc0VtcHR5YCBiZWNhdXNlIGFuIGVtcHR5IGNoZWNrYm94IGlzIG5ldmVyIGVxdWFsIHRvIHRoZSB0cnVlVmFsdWVcclxuICBjdHJsLiRpc0VtcHR5ID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSAhPT0gdHJ1ZVZhbHVlO1xyXG4gIH07XHJcblxyXG4gIGN0cmwuJGZvcm1hdHRlcnMucHVzaChmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGVxdWFscyh2YWx1ZSwgdHJ1ZVZhbHVlKTtcclxuICB9KTtcclxuXHJcbiAgY3RybC4kcGFyc2Vycy5wdXNoKGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgPyB0cnVlVmFsdWUgOiBmYWxzZVZhbHVlO1xyXG4gIH0pO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgdGV4dGFyZWFcclxuICogQHJlc3RyaWN0IEVcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEhUTUwgdGV4dGFyZWEgZWxlbWVudCBjb250cm9sIHdpdGggYW5ndWxhciBkYXRhLWJpbmRpbmcuIFRoZSBkYXRhLWJpbmRpbmcgYW5kIHZhbGlkYXRpb25cclxuICogcHJvcGVydGllcyBvZiB0aGlzIGVsZW1lbnQgYXJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgdGhvc2Ugb2YgdGhlXHJcbiAqIHtAbGluayBuZy5kaXJlY3RpdmU6aW5wdXQgaW5wdXQgZWxlbWVudH0uXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBuZ01vZGVsIEFzc2lnbmFibGUgYW5ndWxhciBleHByZXNzaW9uIHRvIGRhdGEtYmluZCB0by5cclxuICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0gdW5kZXIgd2hpY2ggdGhlIGNvbnRyb2wgaXMgcHVibGlzaGVkLlxyXG4gKiBAcGFyYW0ge3N0cmluZz19IHJlcXVpcmVkIFNldHMgYHJlcXVpcmVkYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgbm90IGVudGVyZWQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbmdSZXF1aXJlZCBBZGRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRpb24gY29uc3RyYWludCB0b1xyXG4gKiAgICB0aGUgZWxlbWVudCB3aGVuIHRoZSBuZ1JlcXVpcmVkIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUuIFVzZSBgbmdSZXF1aXJlZGAgaW5zdGVhZCBvZlxyXG4gKiAgICBgcmVxdWlyZWRgIHdoZW4geW91IHdhbnQgdG8gZGF0YS1iaW5kIHRvIHRoZSBgcmVxdWlyZWRgIGF0dHJpYnV0ZS5cclxuICogQHBhcmFtIHtudW1iZXI9fSBuZ01pbmxlbmd0aCBTZXRzIGBtaW5sZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBzaG9ydGVyIHRoYW5cclxuICogICAgbWlubGVuZ3RoLlxyXG4gKiBAcGFyYW0ge251bWJlcj19IG5nTWF4bGVuZ3RoIFNldHMgYG1heGxlbmd0aGAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGlzIGxvbmdlciB0aGFuXHJcbiAqICAgIG1heGxlbmd0aC5cclxuICogQHBhcmFtIHtzdHJpbmc9fSBuZ1BhdHRlcm4gU2V0cyBgcGF0dGVybmAgdmFsaWRhdGlvbiBlcnJvciBrZXkgaWYgdGhlIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZVxyXG4gKiAgICBSZWdFeHAgcGF0dGVybiBleHByZXNzaW9uLiBFeHBlY3RlZCB2YWx1ZSBpcyBgL3JlZ2V4cC9gIGZvciBpbmxpbmUgcGF0dGVybnMgb3IgYHJlZ2V4cGAgZm9yXHJcbiAqICAgIHBhdHRlcm5zIGRlZmluZWQgYXMgc2NvcGUgZXhwcmVzc2lvbnMuXHJcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbmdDaGFuZ2UgQW5ndWxhciBleHByZXNzaW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gaW5wdXQgY2hhbmdlcyBkdWUgdG8gdXNlclxyXG4gKiAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSBpbnB1dCBlbGVtZW50LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBbbmdUcmltPXRydWVdIElmIHNldCB0byBmYWxzZSBBbmd1bGFyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgdHJpbSB0aGUgaW5wdXQuXHJcbiAqL1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIGlucHV0XHJcbiAqIEByZXN0cmljdCBFXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBIVE1MIGlucHV0IGVsZW1lbnQgY29udHJvbC4gV2hlbiB1c2VkIHRvZ2V0aGVyIHdpdGgge0BsaW5rIG5nTW9kZWwgYG5nTW9kZWxgfSwgaXQgcHJvdmlkZXMgZGF0YS1iaW5kaW5nLFxyXG4gKiBpbnB1dCBzdGF0ZSBjb250cm9sLCBhbmQgdmFsaWRhdGlvbi5cclxuICogSW5wdXQgY29udHJvbCBmb2xsb3dzIEhUTUw1IGlucHV0IHR5cGVzIGFuZCBwb2x5ZmlsbHMgdGhlIEhUTUw1IHZhbGlkYXRpb24gYmVoYXZpb3IgZm9yIG9sZGVyIGJyb3dzZXJzLlxyXG4gKlxyXG4gKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiPlxyXG4gKiAqKk5vdGU6KiogTm90IGV2ZXJ5IGZlYXR1cmUgb2ZmZXJlZCBpcyBhdmFpbGFibGUgZm9yIGFsbCBpbnB1dCB0eXBlcy5cclxuICogU3BlY2lmaWNhbGx5LCBkYXRhIGJpbmRpbmcgYW5kIGV2ZW50IGhhbmRsaW5nIHZpYSBgbmctbW9kZWxgIGlzIHVuc3VwcG9ydGVkIGZvciBgaW5wdXRbZmlsZV1gLlxyXG4gKiA8L2Rpdj5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IG5nTW9kZWwgQXNzaWduYWJsZSBhbmd1bGFyIGV4cHJlc3Npb24gdG8gZGF0YS1iaW5kIHRvLlxyXG4gKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUgZm9ybSB1bmRlciB3aGljaCB0aGUgY29udHJvbCBpcyBwdWJsaXNoZWQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nPX0gcmVxdWlyZWQgU2V0cyBgcmVxdWlyZWRgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBub3QgZW50ZXJlZC5cclxuICogQHBhcmFtIHtib29sZWFuPX0gbmdSZXF1aXJlZCBTZXRzIGByZXF1aXJlZGAgYXR0cmlidXRlIGlmIHNldCB0byB0cnVlXHJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gbmdNaW5sZW5ndGggU2V0cyBgbWlubGVuZ3RoYCB2YWxpZGF0aW9uIGVycm9yIGtleSBpZiB0aGUgdmFsdWUgaXMgc2hvcnRlciB0aGFuXHJcbiAqICAgIG1pbmxlbmd0aC5cclxuICogQHBhcmFtIHtudW1iZXI9fSBuZ01heGxlbmd0aCBTZXRzIGBtYXhsZW5ndGhgIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBpcyBsb25nZXIgdGhhblxyXG4gKiAgICBtYXhsZW5ndGguXHJcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbmdQYXR0ZXJuIFNldHMgYHBhdHRlcm5gIHZhbGlkYXRpb24gZXJyb3Iga2V5IGlmIHRoZSB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB0aGVcclxuICogICAgUmVnRXhwIHBhdHRlcm4gZXhwcmVzc2lvbi4gRXhwZWN0ZWQgdmFsdWUgaXMgYC9yZWdleHAvYCBmb3IgaW5saW5lIHBhdHRlcm5zIG9yIGByZWdleHBgIGZvclxyXG4gKiAgICBwYXR0ZXJucyBkZWZpbmVkIGFzIHNjb3BlIGV4cHJlc3Npb25zLlxyXG4gKiBAcGFyYW0ge3N0cmluZz19IG5nQ2hhbmdlIEFuZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZCB3aGVuIGlucHV0IGNoYW5nZXMgZHVlIHRvIHVzZXJcclxuICogICAgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaW5wdXQgZWxlbWVudC5cclxuICogQHBhcmFtIHtib29sZWFuPX0gW25nVHJpbT10cnVlXSBJZiBzZXQgdG8gZmFsc2UgQW5ndWxhciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHRyaW0gdGhlIGlucHV0LlxyXG4gKiAgICBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGZvciBpbnB1dFt0eXBlPXBhc3N3b3JkXSBjb250cm9scywgd2hpY2ggd2lsbCBuZXZlciB0cmltIHRoZVxyXG4gKiAgICBpbnB1dC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICAgIDxleGFtcGxlIG5hbWU9XCJpbnB1dC1kaXJlY3RpdmVcIiBtb2R1bGU9XCJpbnB1dEV4YW1wbGVcIj5cclxuICAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgIDxzY3JpcHQ+XHJcbiAgICAgICAgICBhbmd1bGFyLm1vZHVsZSgnaW5wdXRFeGFtcGxlJywgW10pXHJcbiAgICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAgICAgICAgICAgICAgJHNjb3BlLnVzZXIgPSB7bmFtZTogJ2d1ZXN0JywgbGFzdDogJ3Zpc2l0b3InfTtcclxuICAgICAgICAgICAgfV0pO1xyXG4gICAgICAgPC9zY3JpcHQ+XHJcbiAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxyXG4gICAgICAgICA8Zm9ybSBuYW1lPVwibXlGb3JtXCI+XHJcbiAgICAgICAgICAgVXNlciBuYW1lOiA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwidXNlck5hbWVcIiBuZy1tb2RlbD1cInVzZXIubmFtZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLnVzZXJOYW1lLiRlcnJvci5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgUmVxdWlyZWQhPC9zcGFuPjxicj5cclxuICAgICAgICAgICBMYXN0IG5hbWU6IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJsYXN0TmFtZVwiIG5nLW1vZGVsPVwidXNlci5sYXN0XCJcclxuICAgICAgICAgICAgIG5nLW1pbmxlbmd0aD1cIjNcIiBuZy1tYXhsZW5ndGg9XCIxMFwiPlxyXG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBuZy1zaG93PVwibXlGb3JtLmxhc3ROYW1lLiRlcnJvci5taW5sZW5ndGhcIj5cclxuICAgICAgICAgICAgIFRvbyBzaG9ydCE8L3NwYW4+XHJcbiAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvclwiIG5nLXNob3c9XCJteUZvcm0ubGFzdE5hbWUuJGVycm9yLm1heGxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgVG9vIGxvbmchPC9zcGFuPjxicj5cclxuICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICA8aHI+XHJcbiAgICAgICAgIDx0dD51c2VyID0ge3t1c2VyfX08L3R0Pjxici8+XHJcbiAgICAgICAgIDx0dD5teUZvcm0udXNlck5hbWUuJHZhbGlkID0ge3tteUZvcm0udXNlck5hbWUuJHZhbGlkfX08L3R0Pjxicj5cclxuICAgICAgICAgPHR0Pm15Rm9ybS51c2VyTmFtZS4kZXJyb3IgPSB7e215Rm9ybS51c2VyTmFtZS4kZXJyb3J9fTwvdHQ+PGJyPlxyXG4gICAgICAgICA8dHQ+bXlGb3JtLmxhc3ROYW1lLiR2YWxpZCA9IHt7bXlGb3JtLmxhc3ROYW1lLiR2YWxpZH19PC90dD48YnI+XHJcbiAgICAgICAgIDx0dD5teUZvcm0ubGFzdE5hbWUuJGVycm9yID0ge3tteUZvcm0ubGFzdE5hbWUuJGVycm9yfX08L3R0Pjxicj5cclxuICAgICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyPlxyXG4gICAgICAgICA8dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVkfX08L3R0Pjxicj5cclxuICAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IubWlubGVuZ3RoID0ge3shIW15Rm9ybS4kZXJyb3IubWlubGVuZ3RofX08L3R0Pjxicj5cclxuICAgICAgICAgPHR0Pm15Rm9ybS4kZXJyb3IubWF4bGVuZ3RoID0ge3shIW15Rm9ybS4kZXJyb3IubWF4bGVuZ3RofX08L3R0Pjxicj5cclxuICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2ZpbGU+XHJcbiAgICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgICB2YXIgdXNlciA9IGVsZW1lbnQoYnkuZXhhY3RCaW5kaW5nKCd1c2VyJykpO1xyXG4gICAgICAgIHZhciB1c2VyTmFtZVZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0udXNlck5hbWUuJHZhbGlkJykpO1xyXG4gICAgICAgIHZhciBsYXN0TmFtZVZhbGlkID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0ubGFzdE5hbWUuJHZhbGlkJykpO1xyXG4gICAgICAgIHZhciBsYXN0TmFtZUVycm9yID0gZWxlbWVudChieS5iaW5kaW5nKCdteUZvcm0ubGFzdE5hbWUuJGVycm9yJykpO1xyXG4gICAgICAgIHZhciBmb3JtVmFsaWQgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ215Rm9ybS4kdmFsaWQnKSk7XHJcbiAgICAgICAgdmFyIHVzZXJOYW1lSW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCd1c2VyLm5hbWUnKSk7XHJcbiAgICAgICAgdmFyIHVzZXJMYXN0SW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCd1c2VyLmxhc3QnKSk7XHJcblxyXG4gICAgICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB0byBtb2RlbCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgZXhwZWN0KHVzZXIuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3tcIm5hbWVcIjpcImd1ZXN0XCIsXCJsYXN0XCI6XCJ2aXNpdG9yXCJ9Jyk7XHJcbiAgICAgICAgICBleHBlY3QodXNlck5hbWVWYWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbigndHJ1ZScpO1xyXG4gICAgICAgICAgZXhwZWN0KGZvcm1WYWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbigndHJ1ZScpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgZW1wdHkgd2hlbiByZXF1aXJlZCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgdXNlck5hbWVJbnB1dC5jbGVhcigpO1xyXG4gICAgICAgICAgdXNlck5hbWVJbnB1dC5zZW5kS2V5cygnJyk7XHJcblxyXG4gICAgICAgICAgZXhwZWN0KHVzZXIuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3tcImxhc3RcIjpcInZpc2l0b3JcIn0nKTtcclxuICAgICAgICAgIGV4cGVjdCh1c2VyTmFtZVZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdmYWxzZScpO1xyXG4gICAgICAgICAgZXhwZWN0KGZvcm1WYWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaXQoJ3Nob3VsZCBiZSB2YWxpZCBpZiBlbXB0eSB3aGVuIG1pbiBsZW5ndGggaXMgc2V0JywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICB1c2VyTGFzdElucHV0LmNsZWFyKCk7XHJcbiAgICAgICAgICB1c2VyTGFzdElucHV0LnNlbmRLZXlzKCcnKTtcclxuXHJcbiAgICAgICAgICBleHBlY3QodXNlci5nZXRUZXh0KCkpLnRvQ29udGFpbigne1wibmFtZVwiOlwiZ3Vlc3RcIixcImxhc3RcIjpcIlwifScpO1xyXG4gICAgICAgICAgZXhwZWN0KGxhc3ROYW1lVmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3RydWUnKTtcclxuICAgICAgICAgIGV4cGVjdChmb3JtVmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3RydWUnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaXQoJ3Nob3VsZCBiZSBpbnZhbGlkIGlmIGxlc3MgdGhhbiByZXF1aXJlZCBtaW4gbGVuZ3RoJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICB1c2VyTGFzdElucHV0LmNsZWFyKCk7XHJcbiAgICAgICAgICB1c2VyTGFzdElucHV0LnNlbmRLZXlzKCd4eCcpO1xyXG5cclxuICAgICAgICAgIGV4cGVjdCh1c2VyLmdldFRleHQoKSkudG9Db250YWluKCd7XCJuYW1lXCI6XCJndWVzdFwifScpO1xyXG4gICAgICAgICAgZXhwZWN0KGxhc3ROYW1lVmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7XHJcbiAgICAgICAgICBleHBlY3QobGFzdE5hbWVFcnJvci5nZXRUZXh0KCkpLnRvQ29udGFpbignbWlubGVuZ3RoJyk7XHJcbiAgICAgICAgICBleHBlY3QoZm9ybVZhbGlkLmdldFRleHQoKSkudG9Db250YWluKCdmYWxzZScpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgbG9uZ2VyIHRoYW4gbWF4IGxlbmd0aCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgdXNlckxhc3RJbnB1dC5jbGVhcigpO1xyXG4gICAgICAgICAgdXNlckxhc3RJbnB1dC5zZW5kS2V5cygnc29tZSByaWRpY3Vsb3VzbHkgbG9uZyBuYW1lJyk7XHJcblxyXG4gICAgICAgICAgZXhwZWN0KHVzZXIuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3tcIm5hbWVcIjpcImd1ZXN0XCJ9Jyk7XHJcbiAgICAgICAgICBleHBlY3QobGFzdE5hbWVWYWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTtcclxuICAgICAgICAgIGV4cGVjdChsYXN0TmFtZUVycm9yLmdldFRleHQoKSkudG9Db250YWluKCdtYXhsZW5ndGgnKTtcclxuICAgICAgICAgIGV4cGVjdChmb3JtVmFsaWQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2ZhbHNlJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIDwvZmlsZT5cclxuICAgIDwvZXhhbXBsZT5cclxuICovXHJcbnZhciBpbnB1dERpcmVjdGl2ZSA9IFsnJGJyb3dzZXInLCAnJHNuaWZmZXInLCAnJGZpbHRlcicsICckcGFyc2UnLFxyXG4gICAgZnVuY3Rpb24oJGJyb3dzZXIsICRzbmlmZmVyLCAkZmlsdGVyLCAkcGFyc2UpIHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVzdHJpY3Q6ICdFJyxcclxuICAgIHJlcXVpcmU6IFsnP25nTW9kZWwnXSxcclxuICAgIGxpbms6IHtcclxuICAgICAgcHJlOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybHMpIHtcclxuICAgICAgICBpZiAoY3RybHNbMF0pIHtcclxuICAgICAgICAgIChpbnB1dFR5cGVbbG93ZXJjYXNlKGF0dHIudHlwZSldIHx8IGlucHV0VHlwZS50ZXh0KShzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybHNbMF0sICRzbmlmZmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRicm93c2VyLCAkZmlsdGVyLCAkcGFyc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcbn1dO1xyXG5cclxudmFyIFZBTElEX0NMQVNTID0gJ25nLXZhbGlkJyxcclxuICAgIElOVkFMSURfQ0xBU1MgPSAnbmctaW52YWxpZCcsXHJcbiAgICBQUklTVElORV9DTEFTUyA9ICduZy1wcmlzdGluZScsXHJcbiAgICBESVJUWV9DTEFTUyA9ICduZy1kaXJ0eScsXHJcbiAgICBVTlRPVUNIRURfQ0xBU1MgPSAnbmctdW50b3VjaGVkJyxcclxuICAgIFRPVUNIRURfQ0xBU1MgPSAnbmctdG91Y2hlZCcsXHJcbiAgICBQRU5ESU5HX0NMQVNTID0gJ25nLXBlbmRpbmcnO1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyB0eXBlXHJcbiAqIEBuYW1lIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXJcclxuICpcclxuICogQHByb3BlcnR5IHtzdHJpbmd9ICR2aWV3VmFsdWUgQWN0dWFsIHN0cmluZyB2YWx1ZSBpbiB0aGUgdmlldy5cclxuICogQHByb3BlcnR5IHsqfSAkbW9kZWxWYWx1ZSBUaGUgdmFsdWUgaW4gdGhlIG1vZGVsIHRoYXQgdGhlIGNvbnRyb2wgaXMgYm91bmQgdG8uXHJcbiAqIEBwcm9wZXJ0eSB7QXJyYXkuPEZ1bmN0aW9uPn0gJHBhcnNlcnMgQXJyYXkgb2YgZnVuY3Rpb25zIHRvIGV4ZWN1dGUsIGFzIGEgcGlwZWxpbmUsIHdoZW5ldmVyXHJcbiAgICAgICB0aGUgY29udHJvbCByZWFkcyB2YWx1ZSBmcm9tIHRoZSBET00uIFRoZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpbiBhcnJheSBvcmRlciwgZWFjaCBwYXNzaW5nXHJcbiAgICAgICBpdHMgcmV0dXJuIHZhbHVlIHRocm91Z2ggdG8gdGhlIG5leHQuIFRoZSBsYXN0IHJldHVybiB2YWx1ZSBpcyBmb3J3YXJkZWQgdG8gdGhlXHJcbiAgICAgICB7QGxpbmsgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkdmFsaWRhdG9ycyBgJHZhbGlkYXRvcnNgfSBjb2xsZWN0aW9uLlxyXG5cclxuUGFyc2VycyBhcmUgdXNlZCB0byBzYW5pdGl6ZSAvIGNvbnZlcnQgdGhlIHtAbGluayBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyIyR2aWV3VmFsdWVcclxuYCR2aWV3VmFsdWVgfS5cclxuXHJcblJldHVybmluZyBgdW5kZWZpbmVkYCBmcm9tIGEgcGFyc2VyIG1lYW5zIGEgcGFyc2UgZXJyb3Igb2NjdXJyZWQuIEluIHRoYXQgY2FzZSxcclxubm8ge0BsaW5rIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJHZhbGlkYXRvcnMgYCR2YWxpZGF0b3JzYH0gd2lsbCBydW4gYW5kIHRoZSBgbmdNb2RlbGBcclxud2lsbCBiZSBzZXQgdG8gYHVuZGVmaW5lZGAgdW5sZXNzIHtAbGluayBuZ01vZGVsT3B0aW9ucyBgbmdNb2RlbE9wdGlvbnMuYWxsb3dJbnZhbGlkYH1cclxuaXMgc2V0IHRvIGB0cnVlYC4gVGhlIHBhcnNlIGVycm9yIGlzIHN0b3JlZCBpbiBgbmdNb2RlbC4kZXJyb3IucGFyc2VgLlxyXG5cclxuICpcclxuICogQHByb3BlcnR5IHtBcnJheS48RnVuY3Rpb24+fSAkZm9ybWF0dGVycyBBcnJheSBvZiBmdW5jdGlvbnMgdG8gZXhlY3V0ZSwgYXMgYSBwaXBlbGluZSwgd2hlbmV2ZXJcclxuICAgICAgIHRoZSBtb2RlbCB2YWx1ZSBjaGFuZ2VzLiBUaGUgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaW4gcmV2ZXJzZSBhcnJheSBvcmRlciwgZWFjaCBwYXNzaW5nIHRoZSB2YWx1ZSB0aHJvdWdoIHRvIHRoZVxyXG4gICAgICAgbmV4dC4gVGhlIGxhc3QgcmV0dXJuIHZhbHVlIGlzIHVzZWQgYXMgdGhlIGFjdHVhbCBET00gdmFsdWUuXHJcbiAgICAgICBVc2VkIHRvIGZvcm1hdCAvIGNvbnZlcnQgdmFsdWVzIGZvciBkaXNwbGF5IGluIHRoZSBjb250cm9sLlxyXG4gKiBgYGBqc1xyXG4gKiBmdW5jdGlvbiBmb3JtYXR0ZXIodmFsdWUpIHtcclxuICogICBpZiAodmFsdWUpIHtcclxuICogICAgIHJldHVybiB2YWx1ZS50b1VwcGVyQ2FzZSgpO1xyXG4gKiAgIH1cclxuICogfVxyXG4gKiBuZ01vZGVsLiRmb3JtYXR0ZXJzLnB1c2goZm9ybWF0dGVyKTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0aW9uPn0gJHZhbGlkYXRvcnMgQSBjb2xsZWN0aW9uIG9mIHZhbGlkYXRvcnMgdGhhdCBhcmUgYXBwbGllZFxyXG4gKiAgICAgIHdoZW5ldmVyIHRoZSBtb2RlbCB2YWx1ZSBjaGFuZ2VzLiBUaGUga2V5IHZhbHVlIHdpdGhpbiB0aGUgb2JqZWN0IHJlZmVycyB0byB0aGUgbmFtZSBvZiB0aGVcclxuICogICAgICB2YWxpZGF0b3Igd2hpbGUgdGhlIGZ1bmN0aW9uIHJlZmVycyB0byB0aGUgdmFsaWRhdGlvbiBvcGVyYXRpb24uIFRoZSB2YWxpZGF0aW9uIG9wZXJhdGlvbiBpc1xyXG4gKiAgICAgIHByb3ZpZGVkIHdpdGggdGhlIG1vZGVsIHZhbHVlIGFzIGFuIGFyZ3VtZW50IGFuZCBtdXN0IHJldHVybiBhIHRydWUgb3IgZmFsc2UgdmFsdWUgZGVwZW5kaW5nXHJcbiAqICAgICAgb24gdGhlIHJlc3BvbnNlIG9mIHRoYXQgdmFsaWRhdGlvbi5cclxuICpcclxuICogYGBganNcclxuICogbmdNb2RlbC4kdmFsaWRhdG9ycy52YWxpZENoYXJhY3RlcnMgPSBmdW5jdGlvbihtb2RlbFZhbHVlLCB2aWV3VmFsdWUpIHtcclxuICogICB2YXIgdmFsdWUgPSBtb2RlbFZhbHVlIHx8IHZpZXdWYWx1ZTtcclxuICogICByZXR1cm4gL1swLTldKy8udGVzdCh2YWx1ZSkgJiZcclxuICogICAgICAgICAgL1thLXpdKy8udGVzdCh2YWx1ZSkgJiZcclxuICogICAgICAgICAgL1tBLVpdKy8udGVzdCh2YWx1ZSkgJiZcclxuICogICAgICAgICAgL1xcVysvLnRlc3QodmFsdWUpO1xyXG4gKiB9O1xyXG4gKiBgYGBcclxuICpcclxuICogQHByb3BlcnR5IHtPYmplY3QuPHN0cmluZywgZnVuY3Rpb24+fSAkYXN5bmNWYWxpZGF0b3JzIEEgY29sbGVjdGlvbiBvZiB2YWxpZGF0aW9ucyB0aGF0IGFyZSBleHBlY3RlZCB0b1xyXG4gKiAgICAgIHBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIHZhbGlkYXRpb24gKGUuZy4gYSBIVFRQIHJlcXVlc3QpLiBUaGUgdmFsaWRhdGlvbiBmdW5jdGlvbiB0aGF0IGlzIHByb3ZpZGVkXHJcbiAqICAgICAgaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGEgcHJvbWlzZSB3aGVuIGl0IGlzIHJ1biBkdXJpbmcgdGhlIG1vZGVsIHZhbGlkYXRpb24gcHJvY2Vzcy4gT25jZSB0aGUgcHJvbWlzZVxyXG4gKiAgICAgIGlzIGRlbGl2ZXJlZCB0aGVuIHRoZSB2YWxpZGF0aW9uIHN0YXR1cyB3aWxsIGJlIHNldCB0byB0cnVlIHdoZW4gZnVsZmlsbGVkIGFuZCBmYWxzZSB3aGVuIHJlamVjdGVkLlxyXG4gKiAgICAgIFdoZW4gdGhlIGFzeW5jaHJvbm91cyB2YWxpZGF0b3JzIGFyZSB0cmlnZ2VyZWQsIGVhY2ggb2YgdGhlIHZhbGlkYXRvcnMgd2lsbCBydW4gaW4gcGFyYWxsZWwgYW5kIHRoZSBtb2RlbFxyXG4gKiAgICAgIHZhbHVlIHdpbGwgb25seSBiZSB1cGRhdGVkIG9uY2UgYWxsIHZhbGlkYXRvcnMgaGF2ZSBiZWVuIGZ1bGZpbGxlZC4gQXMgbG9uZyBhcyBhbiBhc3luY2hyb25vdXMgdmFsaWRhdG9yXHJcbiAqICAgICAgaXMgdW5mdWxmaWxsZWQsIGl0cyBrZXkgd2lsbCBiZSBhZGRlZCB0byB0aGUgY29udHJvbGxlcnMgYCRwZW5kaW5nYCBwcm9wZXJ0eS4gQWxzbywgYWxsIGFzeW5jaHJvbm91cyB2YWxpZGF0b3JzXHJcbiAqICAgICAgd2lsbCBvbmx5IHJ1biBvbmNlIGFsbCBzeW5jaHJvbm91cyB2YWxpZGF0b3JzIGhhdmUgcGFzc2VkLlxyXG4gKlxyXG4gKiBQbGVhc2Ugbm90ZSB0aGF0IGlmICRodHRwIGlzIHVzZWQgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgc2VydmVyIHJldHVybnMgYSBzdWNjZXNzIEhUVFAgcmVzcG9uc2UgY29kZVxyXG4gKiBpbiBvcmRlciB0byBmdWxmaWxsIHRoZSB2YWxpZGF0aW9uIGFuZCBhIHN0YXR1cyBsZXZlbCBvZiBgNHh4YCBpbiBvcmRlciB0byByZWplY3QgdGhlIHZhbGlkYXRpb24uXHJcbiAqXHJcbiAqIGBgYGpzXHJcbiAqIG5nTW9kZWwuJGFzeW5jVmFsaWRhdG9ycy51bmlxdWVVc2VybmFtZSA9IGZ1bmN0aW9uKG1vZGVsVmFsdWUsIHZpZXdWYWx1ZSkge1xyXG4gKiAgIHZhciB2YWx1ZSA9IG1vZGVsVmFsdWUgfHwgdmlld1ZhbHVlO1xyXG4gKlxyXG4gKiAgIC8vIExvb2t1cCB1c2VyIGJ5IHVzZXJuYW1lXHJcbiAqICAgcmV0dXJuICRodHRwLmdldCgnL2FwaS91c2Vycy8nICsgdmFsdWUpLlxyXG4gKiAgICAgIHRoZW4oZnVuY3Rpb24gcmVzb2x2ZWQoKSB7XHJcbiAqICAgICAgICAvL3VzZXJuYW1lIGV4aXN0cywgdGhpcyBtZWFucyB2YWxpZGF0aW9uIGZhaWxzXHJcbiAqICAgICAgICByZXR1cm4gJHEucmVqZWN0KCdleGlzdHMnKTtcclxuICogICAgICB9LCBmdW5jdGlvbiByZWplY3RlZCgpIHtcclxuICogICAgICAgIC8vdXNlcm5hbWUgZG9lcyBub3QgZXhpc3QsIHRoZXJlZm9yZSB0aGlzIHZhbGlkYXRpb24gcGFzc2VzXHJcbiAqICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICogICAgICB9KTtcclxuICogfTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7QXJyYXkuPEZ1bmN0aW9uPn0gJHZpZXdDaGFuZ2VMaXN0ZW5lcnMgQXJyYXkgb2YgZnVuY3Rpb25zIHRvIGV4ZWN1dGUgd2hlbmV2ZXIgdGhlXHJcbiAqICAgICB2aWV3IHZhbHVlIGhhcyBjaGFuZ2VkLiBJdCBpcyBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMsIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQuXHJcbiAqICAgICBUaGlzIGNhbiBiZSB1c2VkIGluIHBsYWNlIG9mIGFkZGl0aW9uYWwgJHdhdGNoZXMgYWdhaW5zdCB0aGUgbW9kZWwgdmFsdWUuXHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSAkZXJyb3IgQW4gb2JqZWN0IGhhc2ggd2l0aCBhbGwgZmFpbGluZyB2YWxpZGF0b3IgaWRzIGFzIGtleXMuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSAkcGVuZGluZyBBbiBvYmplY3QgaGFzaCB3aXRoIGFsbCBwZW5kaW5nIHZhbGlkYXRvciBpZHMgYXMga2V5cy5cclxuICpcclxuICogQHByb3BlcnR5IHtib29sZWFufSAkdW50b3VjaGVkIFRydWUgaWYgY29udHJvbCBoYXMgbm90IGxvc3QgZm9jdXMgeWV0LlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59ICR0b3VjaGVkIFRydWUgaWYgY29udHJvbCBoYXMgbG9zdCBmb2N1cy5cclxuICogQHByb3BlcnR5IHtib29sZWFufSAkcHJpc3RpbmUgVHJ1ZSBpZiB1c2VyIGhhcyBub3QgaW50ZXJhY3RlZCB3aXRoIHRoZSBjb250cm9sIHlldC5cclxuICogQHByb3BlcnR5IHtib29sZWFufSAkZGlydHkgVHJ1ZSBpZiB1c2VyIGhhcyBhbHJlYWR5IGludGVyYWN0ZWQgd2l0aCB0aGUgY29udHJvbC5cclxuICogQHByb3BlcnR5IHtib29sZWFufSAkdmFsaWQgVHJ1ZSBpZiB0aGVyZSBpcyBubyBlcnJvci5cclxuICogQHByb3BlcnR5IHtib29sZWFufSAkaW52YWxpZCBUcnVlIGlmIGF0IGxlYXN0IG9uZSBlcnJvciBvbiB0aGUgY29udHJvbC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9ICRuYW1lIFRoZSBuYW1lIGF0dHJpYnV0ZSBvZiB0aGUgY29udHJvbC5cclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqXHJcbiAqIGBOZ01vZGVsQ29udHJvbGxlcmAgcHJvdmlkZXMgQVBJIGZvciB0aGUgYG5nLW1vZGVsYCBkaXJlY3RpdmUuIFRoZSBjb250cm9sbGVyIGNvbnRhaW5zXHJcbiAqIHNlcnZpY2VzIGZvciBkYXRhLWJpbmRpbmcsIHZhbGlkYXRpb24sIENTUyB1cGRhdGVzLCBhbmQgdmFsdWUgZm9ybWF0dGluZyBhbmQgcGFyc2luZy4gSXRcclxuICogcHVycG9zZWZ1bGx5IGRvZXMgbm90IGNvbnRhaW4gYW55IGxvZ2ljIHdoaWNoIGRlYWxzIHdpdGggRE9NIHJlbmRlcmluZyBvciBsaXN0ZW5pbmcgdG9cclxuICogRE9NIGV2ZW50cy4gU3VjaCBET00gcmVsYXRlZCBsb2dpYyBzaG91bGQgYmUgcHJvdmlkZWQgYnkgb3RoZXIgZGlyZWN0aXZlcyB3aGljaCBtYWtlIHVzZSBvZlxyXG4gKiBgTmdNb2RlbENvbnRyb2xsZXJgIGZvciBkYXRhLWJpbmRpbmcuXHJcbiAqXHJcbiAqICMjIEN1c3RvbSBDb250cm9sIEV4YW1wbGVcclxuICogVGhpcyBleGFtcGxlIHNob3dzIGhvdyB0byB1c2UgYE5nTW9kZWxDb250cm9sbGVyYCB3aXRoIGEgY3VzdG9tIGNvbnRyb2wgdG8gYWNoaWV2ZVxyXG4gKiBkYXRhLWJpbmRpbmcuIE5vdGljZSBob3cgZGlmZmVyZW50IGRpcmVjdGl2ZXMgKGBjb250ZW50ZWRpdGFibGVgLCBgbmctbW9kZWxgLCBhbmQgYHJlcXVpcmVkYClcclxuICogY29sbGFib3JhdGUgdG9nZXRoZXIgdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCByZXN1bHQuXHJcbiAqXHJcbiAqIE5vdGUgdGhhdCBgY29udGVudGVkaXRhYmxlYCBpcyBhbiBIVE1MNSBhdHRyaWJ1dGUsIHdoaWNoIHRlbGxzIHRoZSBicm93c2VyIHRvIGxldCB0aGUgZWxlbWVudFxyXG4gKiBjb250ZW50cyBiZSBlZGl0ZWQgaW4gcGxhY2UgYnkgdGhlIHVzZXIuICBUaGlzIHdpbGwgbm90IHdvcmsgb24gb2xkZXIgYnJvd3NlcnMuXHJcbiAqXHJcbiAqIFdlIGFyZSB1c2luZyB0aGUge0BsaW5rIG5nLnNlcnZpY2U6JHNjZSAkc2NlfSBzZXJ2aWNlIGhlcmUgYW5kIGluY2x1ZGUgdGhlIHtAbGluayBuZ1Nhbml0aXplICRzYW5pdGl6ZX1cclxuICogbW9kdWxlIHRvIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIFwiYmFkXCIgY29udGVudCBsaWtlIGlubGluZSBldmVudCBsaXN0ZW5lciAoZS5nLiBgPHNwYW4gb25jbGljaz1cIi4uLlwiPmApLlxyXG4gKiBIb3dldmVyLCBhcyB3ZSBhcmUgdXNpbmcgYCRzY2VgIHRoZSBtb2RlbCBjYW4gc3RpbGwgZGVjaWRlIHRvIHByb3ZpZGUgdW5zYWZlIGNvbnRlbnQgaWYgaXQgbWFya3NcclxuICogdGhhdCBjb250ZW50IHVzaW5nIHRoZSBgJHNjZWAgc2VydmljZS5cclxuICpcclxuICogPGV4YW1wbGUgbmFtZT1cIk5nTW9kZWxDb250cm9sbGVyXCIgbW9kdWxlPVwiY3VzdG9tQ29udHJvbFwiIGRlcHM9XCJhbmd1bGFyLXNhbml0aXplLmpzXCI+XHJcbiAgICA8ZmlsZSBuYW1lPVwic3R5bGUuY3NzXCI+XHJcbiAgICAgIFtjb250ZW50ZWRpdGFibGVdIHtcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcclxuICAgICAgICBtaW4taGVpZ2h0OiAyMHB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAubmctaW52YWxpZCB7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgPC9maWxlPlxyXG4gICAgPGZpbGUgbmFtZT1cInNjcmlwdC5qc1wiPlxyXG4gICAgICBhbmd1bGFyLm1vZHVsZSgnY3VzdG9tQ29udHJvbCcsIFsnbmdTYW5pdGl6ZSddKS5cclxuICAgICAgICBkaXJlY3RpdmUoJ2NvbnRlbnRlZGl0YWJsZScsIFsnJHNjZScsIGZ1bmN0aW9uKCRzY2UpIHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHJlc3RyaWN0OiAnQScsIC8vIG9ubHkgYWN0aXZhdGUgb24gZWxlbWVudCBhdHRyaWJ1dGVcclxuICAgICAgICAgICAgcmVxdWlyZTogJz9uZ01vZGVsJywgLy8gZ2V0IGEgaG9sZCBvZiBOZ01vZGVsQ29udHJvbGxlclxyXG4gICAgICAgICAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMsIG5nTW9kZWwpIHtcclxuICAgICAgICAgICAgICBpZiAoIW5nTW9kZWwpIHJldHVybjsgLy8gZG8gbm90aGluZyBpZiBubyBuZy1tb2RlbFxyXG5cclxuICAgICAgICAgICAgICAvLyBTcGVjaWZ5IGhvdyBVSSBzaG91bGQgYmUgdXBkYXRlZFxyXG4gICAgICAgICAgICAgIG5nTW9kZWwuJHJlbmRlciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5odG1sKCRzY2UuZ2V0VHJ1c3RlZEh0bWwobmdNb2RlbC4kdmlld1ZhbHVlIHx8ICcnKSk7XHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gTGlzdGVuIGZvciBjaGFuZ2UgZXZlbnRzIHRvIGVuYWJsZSBiaW5kaW5nXHJcbiAgICAgICAgICAgICAgZWxlbWVudC5vbignYmx1ciBrZXl1cCBjaGFuZ2UnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHNjb3BlLiRldmFsQXN5bmMocmVhZCk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgcmVhZCgpOyAvLyBpbml0aWFsaXplXHJcblxyXG4gICAgICAgICAgICAgIC8vIFdyaXRlIGRhdGEgdG8gdGhlIG1vZGVsXHJcbiAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZCgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gZWxlbWVudC5odG1sKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBXaGVuIHdlIGNsZWFyIHRoZSBjb250ZW50IGVkaXRhYmxlIHRoZSBicm93c2VyIGxlYXZlcyBhIDxicj4gYmVoaW5kXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBzdHJpcC1iciBhdHRyaWJ1dGUgaXMgcHJvdmlkZWQgdGhlbiB3ZSBzdHJpcCB0aGlzIG91dFxyXG4gICAgICAgICAgICAgICAgaWYgKCBhdHRycy5zdHJpcEJyICYmIGh0bWwgPT0gJzxicj4nICkge1xyXG4gICAgICAgICAgICAgICAgICBodG1sID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBuZ01vZGVsLiRzZXRWaWV3VmFsdWUoaHRtbCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1dKTtcclxuICAgIDwvZmlsZT5cclxuICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgIDxmb3JtIG5hbWU9XCJteUZvcm1cIj5cclxuICAgICAgIDxkaXYgY29udGVudGVkaXRhYmxlXHJcbiAgICAgICAgICAgIG5hbWU9XCJteVdpZGdldFwiIG5nLW1vZGVsPVwidXNlckNvbnRlbnRcIlxyXG4gICAgICAgICAgICBzdHJpcC1icj1cInRydWVcIlxyXG4gICAgICAgICAgICByZXF1aXJlZD5DaGFuZ2UgbWUhPC9kaXY+XHJcbiAgICAgICAgPHNwYW4gbmctc2hvdz1cIm15Rm9ybS5teVdpZGdldC4kZXJyb3IucmVxdWlyZWRcIj5SZXF1aXJlZCE8L3NwYW4+XHJcbiAgICAgICA8aHI+XHJcbiAgICAgICA8dGV4dGFyZWEgbmctbW9kZWw9XCJ1c2VyQ29udGVudFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgIDwvZm9ybT5cclxuICAgIDwvZmlsZT5cclxuICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgIGl0KCdzaG91bGQgZGF0YS1iaW5kIGFuZCBiZWNvbWUgaW52YWxpZCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICBpZiAoYnJvd3Nlci5wYXJhbXMuYnJvd3NlciA9PSAnc2FmYXJpJyB8fCBicm93c2VyLnBhcmFtcy5icm93c2VyID09ICdmaXJlZm94Jykge1xyXG4gICAgICAgIC8vIFNhZmFyaURyaXZlciBjYW4ndCBoYW5kbGUgY29udGVudGVkaXRhYmxlXHJcbiAgICAgICAgLy8gYW5kIEZpcmVmb3ggZHJpdmVyIGNhbid0IGNsZWFyIGNvbnRlbnRlZGl0YWJsZXMgdmVyeSB3ZWxsXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBjb250ZW50RWRpdGFibGUgPSBlbGVtZW50KGJ5LmNzcygnW2NvbnRlbnRlZGl0YWJsZV0nKSk7XHJcbiAgICAgIHZhciBjb250ZW50ID0gJ0NoYW5nZSBtZSEnO1xyXG5cclxuICAgICAgZXhwZWN0KGNvbnRlbnRFZGl0YWJsZS5nZXRUZXh0KCkpLnRvRXF1YWwoY29udGVudCk7XHJcblxyXG4gICAgICBjb250ZW50RWRpdGFibGUuY2xlYXIoKTtcclxuICAgICAgY29udGVudEVkaXRhYmxlLnNlbmRLZXlzKHByb3RyYWN0b3IuS2V5LkJBQ0tfU1BBQ0UpO1xyXG4gICAgICBleHBlY3QoY29udGVudEVkaXRhYmxlLmdldFRleHQoKSkudG9FcXVhbCgnJyk7XHJcbiAgICAgIGV4cGVjdChjb250ZW50RWRpdGFibGUuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS50b01hdGNoKC9uZy1pbnZhbGlkLXJlcXVpcmVkLyk7XHJcbiAgICB9KTtcclxuICAgIDwvZmlsZT5cclxuICogPC9leGFtcGxlPlxyXG4gKlxyXG4gKlxyXG4gKi9cclxudmFyIE5nTW9kZWxDb250cm9sbGVyID0gWyckc2NvcGUnLCAnJGV4Y2VwdGlvbkhhbmRsZXInLCAnJGF0dHJzJywgJyRlbGVtZW50JywgJyRwYXJzZScsICckYW5pbWF0ZScsICckdGltZW91dCcsICckcm9vdFNjb3BlJywgJyRxJywgJyRpbnRlcnBvbGF0ZScsXHJcbiAgICBmdW5jdGlvbigkc2NvcGUsICRleGNlcHRpb25IYW5kbGVyLCAkYXR0ciwgJGVsZW1lbnQsICRwYXJzZSwgJGFuaW1hdGUsICR0aW1lb3V0LCAkcm9vdFNjb3BlLCAkcSwgJGludGVycG9sYXRlKSB7XHJcbiAgdGhpcy4kdmlld1ZhbHVlID0gTnVtYmVyLk5hTjtcclxuICB0aGlzLiRtb2RlbFZhbHVlID0gTnVtYmVyLk5hTjtcclxuICB0aGlzLiR2YWxpZGF0b3JzID0ge307XHJcbiAgdGhpcy4kYXN5bmNWYWxpZGF0b3JzID0ge307XHJcbiAgdGhpcy4kcGFyc2VycyA9IFtdO1xyXG4gIHRoaXMuJGZvcm1hdHRlcnMgPSBbXTtcclxuICB0aGlzLiR2aWV3Q2hhbmdlTGlzdGVuZXJzID0gW107XHJcbiAgdGhpcy4kdW50b3VjaGVkID0gdHJ1ZTtcclxuICB0aGlzLiR0b3VjaGVkID0gZmFsc2U7XHJcbiAgdGhpcy4kcHJpc3RpbmUgPSB0cnVlO1xyXG4gIHRoaXMuJGRpcnR5ID0gZmFsc2U7XHJcbiAgdGhpcy4kdmFsaWQgPSB0cnVlO1xyXG4gIHRoaXMuJGludmFsaWQgPSBmYWxzZTtcclxuICB0aGlzLiRlcnJvciA9IHt9OyAvLyBrZWVwIGludmFsaWQga2V5cyBoZXJlXHJcbiAgdGhpcy4kJHN1Y2Nlc3MgPSB7fTsgLy8ga2VlcCB2YWxpZCBrZXlzIGhlcmVcclxuICB0aGlzLiRwZW5kaW5nID0gdW5kZWZpbmVkOyAvLyBrZWVwIHBlbmRpbmcga2V5cyBoZXJlXHJcbiAgdGhpcy4kbmFtZSA9ICRpbnRlcnBvbGF0ZSgkYXR0ci5uYW1lIHx8ICcnLCBmYWxzZSkoJHNjb3BlKTtcclxuXHJcblxyXG4gIHZhciBwYXJzZWROZ01vZGVsID0gJHBhcnNlKCRhdHRyLm5nTW9kZWwpLFxyXG4gICAgICBwZW5kaW5nRGVib3VuY2UgPSBudWxsLFxyXG4gICAgICBjdHJsID0gdGhpcztcclxuXHJcbiAgdmFyIG5nTW9kZWxHZXQgPSBmdW5jdGlvbiBuZ01vZGVsR2V0KCkge1xyXG4gICAgdmFyIG1vZGVsVmFsdWUgPSBwYXJzZWROZ01vZGVsKCRzY29wZSk7XHJcbiAgICBpZiAoY3RybC4kb3B0aW9ucyAmJiBjdHJsLiRvcHRpb25zLmdldHRlclNldHRlciAmJiBpc0Z1bmN0aW9uKG1vZGVsVmFsdWUpKSB7XHJcbiAgICAgIG1vZGVsVmFsdWUgPSBtb2RlbFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9kZWxWYWx1ZTtcclxuICB9O1xyXG5cclxuICB2YXIgbmdNb2RlbFNldCA9IGZ1bmN0aW9uIG5nTW9kZWxTZXQobmV3VmFsdWUpIHtcclxuICAgIHZhciBnZXR0ZXJTZXR0ZXI7XHJcbiAgICBpZiAoY3RybC4kb3B0aW9ucyAmJiBjdHJsLiRvcHRpb25zLmdldHRlclNldHRlciAmJlxyXG4gICAgICAgIGlzRnVuY3Rpb24oZ2V0dGVyU2V0dGVyID0gcGFyc2VkTmdNb2RlbCgkc2NvcGUpKSkge1xyXG5cclxuICAgICAgZ2V0dGVyU2V0dGVyKGN0cmwuJG1vZGVsVmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFyc2VkTmdNb2RlbC5hc3NpZ24oJHNjb3BlLCBjdHJsLiRtb2RlbFZhbHVlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICB0aGlzLiQkc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgIGN0cmwuJG9wdGlvbnMgPSBvcHRpb25zO1xyXG5cclxuICAgIGlmICghcGFyc2VkTmdNb2RlbC5hc3NpZ24gJiYgKCFvcHRpb25zIHx8ICFvcHRpb25zLmdldHRlclNldHRlcikpIHtcclxuICAgICAgdGhyb3cgJG5nTW9kZWxNaW5FcnIoJ25vbmFzc2lnbicsIFwiRXhwcmVzc2lvbiAnezB9JyBpcyBub24tYXNzaWduYWJsZS4gRWxlbWVudDogezF9XCIsXHJcbiAgICAgICAgICAkYXR0ci5uZ01vZGVsLCBzdGFydGluZ1RhZygkZWxlbWVudCkpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyIyRyZW5kZXJcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIENhbGxlZCB3aGVuIHRoZSB2aWV3IG5lZWRzIHRvIGJlIHVwZGF0ZWQuIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIHVzZXIgb2YgdGhlIG5nLW1vZGVsXHJcbiAgICogZGlyZWN0aXZlIHdpbGwgaW1wbGVtZW50IHRoaXMgbWV0aG9kLlxyXG4gICAqXHJcbiAgICogVGhlIGAkcmVuZGVyKClgIG1ldGhvZCBpcyBpbnZva2VkIGluIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uczpcclxuICAgKlxyXG4gICAqICogYCRyb2xsYmFja1ZpZXdWYWx1ZSgpYCBpcyBjYWxsZWQuICBJZiB3ZSBhcmUgcm9sbGluZyBiYWNrIHRoZSB2aWV3IHZhbHVlIHRvIHRoZSBsYXN0XHJcbiAgICogICBjb21taXR0ZWQgdmFsdWUgdGhlbiBgJHJlbmRlcigpYCBpcyBjYWxsZWQgdG8gdXBkYXRlIHRoZSBpbnB1dCBjb250cm9sLlxyXG4gICAqICogVGhlIHZhbHVlIHJlZmVyZW5jZWQgYnkgYG5nLW1vZGVsYCBpcyBjaGFuZ2VkIHByb2dyYW1tYXRpY2FsbHkgYW5kIGJvdGggdGhlIGAkbW9kZWxWYWx1ZWAgYW5kXHJcbiAgICogICB0aGUgYCR2aWV3VmFsdWVgIGFyZSBkaWZmZXJlbnQgdG8gbGFzdCB0aW1lLlxyXG4gICAqXHJcbiAgICogU2luY2UgYG5nLW1vZGVsYCBkb2VzIG5vdCBkbyBhIGRlZXAgd2F0Y2gsIGAkcmVuZGVyKClgIGlzIG9ubHkgaW52b2tlZCBpZiB0aGUgdmFsdWVzIG9mXHJcbiAgICogYCRtb2RlbFZhbHVlYCBhbmQgYCR2aWV3VmFsdWVgIGFyZSBhY3R1YWxseSBkaWZmZXJlbnQgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWUuIElmIGAkbW9kZWxWYWx1ZWBcclxuICAgKiBvciBgJHZpZXdWYWx1ZWAgYXJlIG9iamVjdHMgKHJhdGhlciB0aGFuIGEgc3RyaW5nIG9yIG51bWJlcikgdGhlbiBgJHJlbmRlcigpYCB3aWxsIG5vdCBiZVxyXG4gICAqIGludm9rZWQgaWYgeW91IG9ubHkgY2hhbmdlIGEgcHJvcGVydHkgb24gdGhlIG9iamVjdHMuXHJcbiAgICovXHJcbiAgdGhpcy4kcmVuZGVyID0gbm9vcDtcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJGlzRW1wdHlcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBpcyBlbXB0eS5cclxuICAgKlxyXG4gICAqIEZvciBpbnN0YW5jZSwgdGhlIHJlcXVpcmVkIGRpcmVjdGl2ZSBkb2VzIHRoaXMgdG8gd29yayBvdXQgaWYgdGhlIGlucHV0IGhhcyBkYXRhIG9yIG5vdC5cclxuICAgKiBUaGUgZGVmYXVsdCBgJGlzRW1wdHlgIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBpcyBgdW5kZWZpbmVkYCwgYCcnYCwgYG51bGxgIG9yIGBOYU5gLlxyXG4gICAqXHJcbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGlzIGZvciBpbnB1dCBkaXJlY3RpdmVzIHdob3NlIGNvbmNlcHQgb2YgYmVpbmcgZW1wdHkgaXMgZGlmZmVyZW50IHRvIHRoZVxyXG4gICAqIGRlZmF1bHQuIFRoZSBgY2hlY2tib3hJbnB1dFR5cGVgIGRpcmVjdGl2ZSBkb2VzIHRoaXMgYmVjYXVzZSBpbiBpdHMgY2FzZSBhIHZhbHVlIG9mIGBmYWxzZWBcclxuICAgKiBpbXBsaWVzIGVtcHR5LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBNb2RlbCB2YWx1ZSB0byBjaGVjay5cclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBgdmFsdWVgIGlzIGVtcHR5LlxyXG4gICAqL1xyXG4gIHRoaXMuJGlzRW1wdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSB8fCB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlO1xyXG4gIH07XHJcblxyXG4gIHZhciBwYXJlbnRGb3JtID0gJGVsZW1lbnQuaW5oZXJpdGVkRGF0YSgnJGZvcm1Db250cm9sbGVyJykgfHwgbnVsbEZvcm1DdHJsLFxyXG4gICAgICBjdXJyZW50VmFsaWRhdGlvblJ1bklkID0gMDtcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJHNldFZhbGlkaXR5XHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBDaGFuZ2UgdGhlIHZhbGlkaXR5IHN0YXRlLCBhbmQgbm90aWZ5IHRoZSBmb3JtLlxyXG4gICAqXHJcbiAgICogVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCB3aXRoaW4gJHBhcnNlcnMvJGZvcm1hdHRlcnMgb3IgYSBjdXN0b20gdmFsaWRhdGlvbiBpbXBsZW1lbnRhdGlvbi5cclxuICAgKiBIb3dldmVyLCBpbiBtb3N0IGNhc2VzIGl0IHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIHVzZSB0aGUgYG5nTW9kZWwuJHZhbGlkYXRvcnNgIGFuZFxyXG4gICAqIGBuZ01vZGVsLiRhc3luY1ZhbGlkYXRvcnNgIGNvbGxlY3Rpb25zIHdoaWNoIHdpbGwgY2FsbCBgJHNldFZhbGlkaXR5YCBhdXRvbWF0aWNhbGx5LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbGlkYXRpb25FcnJvcktleSBOYW1lIG9mIHRoZSB2YWxpZGF0b3IuIFRoZSBgdmFsaWRhdGlvbkVycm9yS2V5YCB3aWxsIGJlIGFzc2lnbmVkXHJcbiAgICogICAgICAgIHRvIGVpdGhlciBgJGVycm9yW3ZhbGlkYXRpb25FcnJvcktleV1gIG9yIGAkcGVuZGluZ1t2YWxpZGF0aW9uRXJyb3JLZXldYFxyXG4gICAqICAgICAgICAoZm9yIHVuZnVsZmlsbGVkIGAkYXN5bmNWYWxpZGF0b3JzYCksIHNvIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGZvciBkYXRhLWJpbmRpbmcuXHJcbiAgICogICAgICAgIFRoZSBgdmFsaWRhdGlvbkVycm9yS2V5YCBzaG91bGQgYmUgaW4gY2FtZWxDYXNlIGFuZCB3aWxsIGdldCBjb252ZXJ0ZWQgaW50byBkYXNoLWNhc2VcclxuICAgKiAgICAgICAgZm9yIGNsYXNzIG5hbWUuIEV4YW1wbGU6IGBteUVycm9yYCB3aWxsIHJlc3VsdCBpbiBgbmctdmFsaWQtbXktZXJyb3JgIGFuZCBgbmctaW52YWxpZC1teS1lcnJvcmBcclxuICAgKiAgICAgICAgY2xhc3MgYW5kIGNhbiBiZSBib3VuZCB0byBhcyAgYHt7c29tZUZvcm0uc29tZUNvbnRyb2wuJGVycm9yLm15RXJyb3J9fWAgLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNWYWxpZCBXaGV0aGVyIHRoZSBjdXJyZW50IHN0YXRlIGlzIHZhbGlkICh0cnVlKSwgaW52YWxpZCAoZmFsc2UpLCBwZW5kaW5nICh1bmRlZmluZWQpLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvciBza2lwcGVkIChudWxsKS4gUGVuZGluZyBpcyB1c2VkIGZvciB1bmZ1bGZpbGxlZCBgJGFzeW5jVmFsaWRhdG9yc2AuXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIFNraXBwZWQgaXMgdXNlZCBieSBBbmd1bGFyIHdoZW4gdmFsaWRhdG9ycyBkbyBub3QgcnVuIGJlY2F1c2Ugb2YgcGFyc2UgZXJyb3JzIGFuZFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGAkYXN5bmNWYWxpZGF0b3JzYCBkbyBub3QgcnVuIGJlY2F1c2UgYW55IG9mIHRoZSBgJHZhbGlkYXRvcnNgIGZhaWxlZC5cclxuICAgKi9cclxuICBhZGRTZXRWYWxpZGl0eU1ldGhvZCh7XHJcbiAgICBjdHJsOiB0aGlzLFxyXG4gICAgJGVsZW1lbnQ6ICRlbGVtZW50LFxyXG4gICAgc2V0OiBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7XHJcbiAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSB0cnVlO1xyXG4gICAgfSxcclxuICAgIHVuc2V0OiBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7XHJcbiAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldO1xyXG4gICAgfSxcclxuICAgIHBhcmVudEZvcm06IHBhcmVudEZvcm0sXHJcbiAgICAkYW5pbWF0ZTogJGFuaW1hdGVcclxuICB9KTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJHNldFByaXN0aW5lXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBTZXRzIHRoZSBjb250cm9sIHRvIGl0cyBwcmlzdGluZSBzdGF0ZS5cclxuICAgKlxyXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gcmVtb3ZlIHRoZSAnbmctZGlydHknIGNsYXNzIGFuZCBzZXQgdGhlIGNvbnRyb2wgdG8gaXRzIHByaXN0aW5lXHJcbiAgICogc3RhdGUgKG5nLXByaXN0aW5lIGNsYXNzKS4gQSBtb2RlbCBpcyBjb25zaWRlcmVkIHRvIGJlIHByaXN0aW5lIHdoZW4gdGhlIG1vZGVsIGhhcyBub3QgYmVlbiBjaGFuZ2VkXHJcbiAgICogZnJvbSB3aGVuIGZpcnN0IGNvbXBpbGVkIHdpdGhpbiB0aGVuIGZvcm0uXHJcbiAgICovXHJcbiAgdGhpcy4kc2V0UHJpc3RpbmUgPSBmdW5jdGlvbigpIHtcclxuICAgIGN0cmwuJGRpcnR5ID0gZmFsc2U7XHJcbiAgICBjdHJsLiRwcmlzdGluZSA9IHRydWU7XHJcbiAgICAkYW5pbWF0ZS5yZW1vdmVDbGFzcygkZWxlbWVudCwgRElSVFlfQ0xBU1MpO1xyXG4gICAgJGFuaW1hdGUuYWRkQ2xhc3MoJGVsZW1lbnQsIFBSSVNUSU5FX0NMQVNTKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkc2V0VW50b3VjaGVkXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBTZXRzIHRoZSBjb250cm9sIHRvIGl0cyB1bnRvdWNoZWQgc3RhdGUuXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgJ25nLXRvdWNoZWQnIGNsYXNzIGFuZCBzZXQgdGhlIGNvbnRyb2wgdG8gaXRzXHJcbiAgICogdW50b3VjaGVkIHN0YXRlIChuZy11bnRvdWNoZWQgY2xhc3MpLiBVcG9uIGNvbXBpbGF0aW9uLCBhIG1vZGVsIGlzIHNldCBhcyB1bnRvdWNoZWRcclxuICAgKiBieSBkZWZhdWx0LCBob3dldmVyIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmVzdG9yZSB0aGF0IHN0YXRlIGlmIHRoZSBtb2RlbCBoYXNcclxuICAgKiBhbHJlYWR5IGJlZW4gdG91Y2hlZCBieSB0aGUgdXNlci5cclxuICAgKi9cclxuICB0aGlzLiRzZXRVbnRvdWNoZWQgPSBmdW5jdGlvbigpIHtcclxuICAgIGN0cmwuJHRvdWNoZWQgPSBmYWxzZTtcclxuICAgIGN0cmwuJHVudG91Y2hlZCA9IHRydWU7XHJcbiAgICAkYW5pbWF0ZS5zZXRDbGFzcygkZWxlbWVudCwgVU5UT1VDSEVEX0NMQVNTLCBUT1VDSEVEX0NMQVNTKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkc2V0VG91Y2hlZFxyXG4gICAqXHJcbiAgICogQGRlc2NyaXB0aW9uXHJcbiAgICogU2V0cyB0aGUgY29udHJvbCB0byBpdHMgdG91Y2hlZCBzdGF0ZS5cclxuICAgKlxyXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gcmVtb3ZlIHRoZSAnbmctdW50b3VjaGVkJyBjbGFzcyBhbmQgc2V0IHRoZSBjb250cm9sIHRvIGl0c1xyXG4gICAqIHRvdWNoZWQgc3RhdGUgKG5nLXRvdWNoZWQgY2xhc3MpLiBBIG1vZGVsIGlzIGNvbnNpZGVyZWQgdG8gYmUgdG91Y2hlZCB3aGVuIHRoZSB1c2VyIGhhc1xyXG4gICAqIGZpcnN0IGludGVyYWN0ZWQgKGZvY3Vzc2VkKSBvbiB0aGUgbW9kZWwgaW5wdXQgZWxlbWVudCBhbmQgdGhlbiBzaGlmdGVkIGZvY3VzIGF3YXkgKGJsdXJyZWQpXHJcbiAgICogZnJvbSB0aGUgaW5wdXQgZWxlbWVudC5cclxuICAgKi9cclxuICB0aGlzLiRzZXRUb3VjaGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICBjdHJsLiR0b3VjaGVkID0gdHJ1ZTtcclxuICAgIGN0cmwuJHVudG91Y2hlZCA9IGZhbHNlO1xyXG4gICAgJGFuaW1hdGUuc2V0Q2xhc3MoJGVsZW1lbnQsIFRPVUNIRURfQ0xBU1MsIFVOVE9VQ0hFRF9DTEFTUyk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQG5nZG9jIG1ldGhvZFxyXG4gICAqIEBuYW1lIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIjJHJvbGxiYWNrVmlld1ZhbHVlXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBDYW5jZWwgYW4gdXBkYXRlIGFuZCByZXNldCB0aGUgaW5wdXQgZWxlbWVudCdzIHZhbHVlIHRvIHByZXZlbnQgYW4gdXBkYXRlIHRvIHRoZSBgJG1vZGVsVmFsdWVgLFxyXG4gICAqIHdoaWNoIG1heSBiZSBjYXVzZWQgYnkgYSBwZW5kaW5nIGRlYm91bmNlZCBldmVudCBvciBiZWNhdXNlIHRoZSBpbnB1dCBpcyB3YWl0aW5nIGZvciBhIHNvbWVcclxuICAgKiBmdXR1cmUgZXZlbnQuXHJcbiAgICpcclxuICAgKiBJZiB5b3UgaGF2ZSBhbiBpbnB1dCB0aGF0IHVzZXMgYG5nLW1vZGVsLW9wdGlvbnNgIHRvIHNldCB1cCBkZWJvdW5jZWQgZXZlbnRzIG9yIGV2ZW50cyBzdWNoXHJcbiAgICogYXMgYmx1ciB5b3UgY2FuIGhhdmUgYSBzaXR1YXRpb24gd2hlcmUgdGhlcmUgaXMgYSBwZXJpb2Qgd2hlbiB0aGUgYCR2aWV3VmFsdWVgXHJcbiAgICogaXMgb3V0IG9mIHN5bmNoIHdpdGggdGhlIG5nTW9kZWwncyBgJG1vZGVsVmFsdWVgLlxyXG4gICAqXHJcbiAgICogSW4gdGhpcyBjYXNlLCB5b3UgY2FuIHJ1biBpbnRvIGRpZmZpY3VsdGllcyBpZiB5b3UgdHJ5IHRvIHVwZGF0ZSB0aGUgbmdNb2RlbCdzIGAkbW9kZWxWYWx1ZWBcclxuICAgKiBwcm9ncmFtbWF0aWNhbGx5IGJlZm9yZSB0aGVzZSBkZWJvdW5jZWQvZnV0dXJlIGV2ZW50cyBoYXZlIHJlc29sdmVkL29jY3VycmVkLCBiZWNhdXNlIEFuZ3VsYXInc1xyXG4gICAqIGRpcnR5IGNoZWNraW5nIG1lY2hhbmlzbSBpcyBub3QgYWJsZSB0byB0ZWxsIHdoZXRoZXIgdGhlIG1vZGVsIGhhcyBhY3R1YWxseSBjaGFuZ2VkIG9yIG5vdC5cclxuICAgKlxyXG4gICAqIFRoZSBgJHJvbGxiYWNrVmlld1ZhbHVlKClgIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBwcm9ncmFtbWF0aWNhbGx5IGNoYW5naW5nIHRoZSBtb2RlbCBvZiBhblxyXG4gICAqIGlucHV0IHdoaWNoIG1heSBoYXZlIHN1Y2ggZXZlbnRzIHBlbmRpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGluIG9yZGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZVxyXG4gICAqIGlucHV0IGZpZWxkIHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBuZXcgbW9kZWwgdmFsdWUgYW5kIGFueSBwZW5kaW5nIG9wZXJhdGlvbnMgYXJlIGNhbmNlbGxlZC5cclxuICAgKlxyXG4gICAqIDxleGFtcGxlIG5hbWU9XCJuZy1tb2RlbC1jYW5jZWwtdXBkYXRlXCIgbW9kdWxlPVwiY2FuY2VsLXVwZGF0ZS1leGFtcGxlXCI+XHJcbiAgICogICA8ZmlsZSBuYW1lPVwiYXBwLmpzXCI+XHJcbiAgICogICAgIGFuZ3VsYXIubW9kdWxlKCdjYW5jZWwtdXBkYXRlLWV4YW1wbGUnLCBbXSlcclxuICAgKlxyXG4gICAqICAgICAuY29udHJvbGxlcignQ2FuY2VsVXBkYXRlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAgICogICAgICAgJHNjb3BlLnJlc2V0V2l0aENhbmNlbCA9IGZ1bmN0aW9uKGUpIHtcclxuICAgKiAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMjcpIHtcclxuICAgKiAgICAgICAgICAgJHNjb3BlLm15Rm9ybS5teUlucHV0MS4kcm9sbGJhY2tWaWV3VmFsdWUoKTtcclxuICAgKiAgICAgICAgICAgJHNjb3BlLm15VmFsdWUgPSAnJztcclxuICAgKiAgICAgICAgIH1cclxuICAgKiAgICAgICB9O1xyXG4gICAqICAgICAgICRzY29wZS5yZXNldFdpdGhvdXRDYW5jZWwgPSBmdW5jdGlvbihlKSB7XHJcbiAgICogICAgICAgICBpZiAoZS5rZXlDb2RlID09IDI3KSB7XHJcbiAgICogICAgICAgICAgICRzY29wZS5teVZhbHVlID0gJyc7XHJcbiAgICogICAgICAgICB9XHJcbiAgICogICAgICAgfTtcclxuICAgKiAgICAgfV0pO1xyXG4gICAqICAgPC9maWxlPlxyXG4gICAqICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgKiAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiQ2FuY2VsVXBkYXRlQ29udHJvbGxlclwiPlxyXG4gICAqICAgICAgIDxwPlRyeSB0eXBpbmcgc29tZXRoaW5nIGluIGVhY2ggaW5wdXQuICBTZWUgdGhhdCB0aGUgbW9kZWwgb25seSB1cGRhdGVzIHdoZW4geW91XHJcbiAgICogICAgICAgICAgYmx1ciBvZmYgdGhlIGlucHV0LlxyXG4gICAqICAgICAgICA8L3A+XHJcbiAgICogICAgICAgIDxwPk5vdyBzZWUgd2hhdCBoYXBwZW5zIGlmIHlvdSBzdGFydCB0eXBpbmcgdGhlbiBwcmVzcyB0aGUgRXNjYXBlIGtleTwvcD5cclxuICAgKlxyXG4gICAqICAgICAgIDxmb3JtIG5hbWU9XCJteUZvcm1cIiBuZy1tb2RlbC1vcHRpb25zPVwieyB1cGRhdGVPbjogJ2JsdXInIH1cIj5cclxuICAgKiAgICAgICAgIDxwPldpdGggJHJvbGxiYWNrVmlld1ZhbHVlKCk8L3A+XHJcbiAgICogICAgICAgICA8aW5wdXQgbmFtZT1cIm15SW5wdXQxXCIgbmctbW9kZWw9XCJteVZhbHVlXCIgbmcta2V5ZG93bj1cInJlc2V0V2l0aENhbmNlbCgkZXZlbnQpXCI+PGJyLz5cclxuICAgKiAgICAgICAgIG15VmFsdWU6IFwie3sgbXlWYWx1ZSB9fVwiXHJcbiAgICpcclxuICAgKiAgICAgICAgIDxwPldpdGhvdXQgJHJvbGxiYWNrVmlld1ZhbHVlKCk8L3A+XHJcbiAgICogICAgICAgICA8aW5wdXQgbmFtZT1cIm15SW5wdXQyXCIgbmctbW9kZWw9XCJteVZhbHVlXCIgbmcta2V5ZG93bj1cInJlc2V0V2l0aG91dENhbmNlbCgkZXZlbnQpXCI+PGJyLz5cclxuICAgKiAgICAgICAgIG15VmFsdWU6IFwie3sgbXlWYWx1ZSB9fVwiXHJcbiAgICogICAgICAgPC9mb3JtPlxyXG4gICAqICAgICA8L2Rpdj5cclxuICAgKiAgIDwvZmlsZT5cclxuICAgKiA8L2V4YW1wbGU+XHJcbiAgICovXHJcbiAgdGhpcy4kcm9sbGJhY2tWaWV3VmFsdWUgPSBmdW5jdGlvbigpIHtcclxuICAgICR0aW1lb3V0LmNhbmNlbChwZW5kaW5nRGVib3VuY2UpO1xyXG4gICAgY3RybC4kdmlld1ZhbHVlID0gY3RybC4kJGxhc3RDb21taXR0ZWRWaWV3VmFsdWU7XHJcbiAgICBjdHJsLiRyZW5kZXIoKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkdmFsaWRhdGVcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIFJ1bnMgZWFjaCBvZiB0aGUgcmVnaXN0ZXJlZCB2YWxpZGF0b3JzIChmaXJzdCBzeW5jaHJvbm91cyB2YWxpZGF0b3JzIGFuZCB0aGVuIGFzeW5jaHJvbm91cyB2YWxpZGF0b3JzKS5cclxuICAgKi9cclxuICB0aGlzLiR2YWxpZGF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgLy8gaWdub3JlICR2YWxpZGF0ZSBiZWZvcmUgbW9kZWwgaXMgaW5pdGlhbGl6ZWRcclxuICAgIGlmIChpc051bWJlcihjdHJsLiRtb2RlbFZhbHVlKSAmJiBpc05hTihjdHJsLiRtb2RlbFZhbHVlKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLiQkcGFyc2VBbmRWYWxpZGF0ZSgpO1xyXG4gIH07XHJcblxyXG4gIHRoaXMuJCRydW5WYWxpZGF0b3JzID0gZnVuY3Rpb24ocGFyc2VWYWxpZCwgbW9kZWxWYWx1ZSwgdmlld1ZhbHVlLCBkb25lQ2FsbGJhY2spIHtcclxuICAgIGN1cnJlbnRWYWxpZGF0aW9uUnVuSWQrKztcclxuICAgIHZhciBsb2NhbFZhbGlkYXRpb25SdW5JZCA9IGN1cnJlbnRWYWxpZGF0aW9uUnVuSWQ7XHJcblxyXG4gICAgLy8gY2hlY2sgcGFyc2VyIGVycm9yXHJcbiAgICBpZiAoIXByb2Nlc3NQYXJzZUVycm9ycyhwYXJzZVZhbGlkKSkge1xyXG4gICAgICB2YWxpZGF0aW9uRG9uZShmYWxzZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghcHJvY2Vzc1N5bmNWYWxpZGF0b3JzKCkpIHtcclxuICAgICAgdmFsaWRhdGlvbkRvbmUoZmFsc2UpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBwcm9jZXNzQXN5bmNWYWxpZGF0b3JzKCk7XHJcblxyXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1BhcnNlRXJyb3JzKHBhcnNlVmFsaWQpIHtcclxuICAgICAgdmFyIGVycm9yS2V5ID0gY3RybC4kJHBhcnNlck5hbWUgfHwgJ3BhcnNlJztcclxuICAgICAgaWYgKHBhcnNlVmFsaWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHNldFZhbGlkaXR5KGVycm9yS2V5LCBudWxsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZXRWYWxpZGl0eShlcnJvcktleSwgcGFyc2VWYWxpZCk7XHJcbiAgICAgICAgaWYgKCFwYXJzZVZhbGlkKSB7XHJcbiAgICAgICAgICBmb3JFYWNoKGN0cmwuJHZhbGlkYXRvcnMsIGZ1bmN0aW9uKHYsIG5hbWUpIHtcclxuICAgICAgICAgICAgc2V0VmFsaWRpdHkobmFtZSwgbnVsbCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGZvckVhY2goY3RybC4kYXN5bmNWYWxpZGF0b3JzLCBmdW5jdGlvbih2LCBuYW1lKSB7XHJcbiAgICAgICAgICAgIHNldFZhbGlkaXR5KG5hbWUsIG51bGwpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHByb2Nlc3NTeW5jVmFsaWRhdG9ycygpIHtcclxuICAgICAgdmFyIHN5bmNWYWxpZGF0b3JzVmFsaWQgPSB0cnVlO1xyXG4gICAgICBmb3JFYWNoKGN0cmwuJHZhbGlkYXRvcnMsIGZ1bmN0aW9uKHZhbGlkYXRvciwgbmFtZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB2YWxpZGF0b3IobW9kZWxWYWx1ZSwgdmlld1ZhbHVlKTtcclxuICAgICAgICBzeW5jVmFsaWRhdG9yc1ZhbGlkID0gc3luY1ZhbGlkYXRvcnNWYWxpZCAmJiByZXN1bHQ7XHJcbiAgICAgICAgc2V0VmFsaWRpdHkobmFtZSwgcmVzdWx0KTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICghc3luY1ZhbGlkYXRvcnNWYWxpZCkge1xyXG4gICAgICAgIGZvckVhY2goY3RybC4kYXN5bmNWYWxpZGF0b3JzLCBmdW5jdGlvbih2LCBuYW1lKSB7XHJcbiAgICAgICAgICBzZXRWYWxpZGl0eShuYW1lLCBudWxsKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0FzeW5jVmFsaWRhdG9ycygpIHtcclxuICAgICAgdmFyIHZhbGlkYXRvclByb21pc2VzID0gW107XHJcbiAgICAgIHZhciBhbGxWYWxpZCA9IHRydWU7XHJcbiAgICAgIGZvckVhY2goY3RybC4kYXN5bmNWYWxpZGF0b3JzLCBmdW5jdGlvbih2YWxpZGF0b3IsIG5hbWUpIHtcclxuICAgICAgICB2YXIgcHJvbWlzZSA9IHZhbGlkYXRvcihtb2RlbFZhbHVlLCB2aWV3VmFsdWUpO1xyXG4gICAgICAgIGlmICghaXNQcm9taXNlTGlrZShwcm9taXNlKSkge1xyXG4gICAgICAgICAgdGhyb3cgJG5nTW9kZWxNaW5FcnIoXCIkYXN5bmNWYWxpZGF0b3JzXCIsXHJcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgYXN5bmNocm9ub3VzIHZhbGlkYXRvciB0byByZXR1cm4gYSBwcm9taXNlIGJ1dCBnb3QgJ3swfScgaW5zdGVhZC5cIiwgcHJvbWlzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFZhbGlkaXR5KG5hbWUsIHVuZGVmaW5lZCk7XHJcbiAgICAgICAgdmFsaWRhdG9yUHJvbWlzZXMucHVzaChwcm9taXNlLnRoZW4oZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICBzZXRWYWxpZGl0eShuYW1lLCB0cnVlKTtcclxuICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikge1xyXG4gICAgICAgICAgYWxsVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgIHNldFZhbGlkaXR5KG5hbWUsIGZhbHNlKTtcclxuICAgICAgICB9KSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoIXZhbGlkYXRvclByb21pc2VzLmxlbmd0aCkge1xyXG4gICAgICAgIHZhbGlkYXRpb25Eb25lKHRydWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICRxLmFsbCh2YWxpZGF0b3JQcm9taXNlcykudGhlbihmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHZhbGlkYXRpb25Eb25lKGFsbFZhbGlkKTtcclxuICAgICAgICB9LCBub29wKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNldFZhbGlkaXR5KG5hbWUsIGlzVmFsaWQpIHtcclxuICAgICAgaWYgKGxvY2FsVmFsaWRhdGlvblJ1bklkID09PSBjdXJyZW50VmFsaWRhdGlvblJ1bklkKSB7XHJcbiAgICAgICAgY3RybC4kc2V0VmFsaWRpdHkobmFtZSwgaXNWYWxpZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiB2YWxpZGF0aW9uRG9uZShhbGxWYWxpZCkge1xyXG4gICAgICBpZiAobG9jYWxWYWxpZGF0aW9uUnVuSWQgPT09IGN1cnJlbnRWYWxpZGF0aW9uUnVuSWQpIHtcclxuXHJcbiAgICAgICAgZG9uZUNhbGxiYWNrKGFsbFZhbGlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEBuZ2RvYyBtZXRob2RcclxuICAgKiBAbmFtZSBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyIyRjb21taXRWaWV3VmFsdWVcclxuICAgKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIENvbW1pdCBhIHBlbmRpbmcgdXBkYXRlIHRvIHRoZSBgJG1vZGVsVmFsdWVgLlxyXG4gICAqXHJcbiAgICogVXBkYXRlcyBtYXkgYmUgcGVuZGluZyBieSBhIGRlYm91bmNlZCBldmVudCBvciBiZWNhdXNlIHRoZSBpbnB1dCBpcyB3YWl0aW5nIGZvciBhIHNvbWUgZnV0dXJlXHJcbiAgICogZXZlbnQgZGVmaW5lZCBpbiBgbmctbW9kZWwtb3B0aW9uc2AuIHRoaXMgbWV0aG9kIGlzIHJhcmVseSBuZWVkZWQgYXMgYE5nTW9kZWxDb250cm9sbGVyYFxyXG4gICAqIHVzdWFsbHkgaGFuZGxlcyBjYWxsaW5nIHRoaXMgaW4gcmVzcG9uc2UgdG8gaW5wdXQgZXZlbnRzLlxyXG4gICAqL1xyXG4gIHRoaXMuJGNvbW1pdFZpZXdWYWx1ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHZpZXdWYWx1ZSA9IGN0cmwuJHZpZXdWYWx1ZTtcclxuXHJcbiAgICAkdGltZW91dC5jYW5jZWwocGVuZGluZ0RlYm91bmNlKTtcclxuXHJcbiAgICAvLyBJZiB0aGUgdmlldyB2YWx1ZSBoYXMgbm90IGNoYW5nZWQgdGhlbiB3ZSBzaG91bGQganVzdCBleGl0LCBleGNlcHQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXNcclxuICAgIC8vIGEgbmF0aXZlIHZhbGlkYXRvciBvbiB0aGUgZWxlbWVudC4gSW4gdGhpcyBjYXNlIHRoZSB2YWxpZGF0aW9uIHN0YXRlIG1heSBoYXZlIGNoYW5nZWQgZXZlbiB0aG91Z2hcclxuICAgIC8vIHRoZSB2aWV3VmFsdWUgaGFzIHN0YXllZCBlbXB0eS5cclxuICAgIGlmIChjdHJsLiQkbGFzdENvbW1pdHRlZFZpZXdWYWx1ZSA9PT0gdmlld1ZhbHVlICYmICh2aWV3VmFsdWUgIT09ICcnIHx8ICFjdHJsLiQkaGFzTmF0aXZlVmFsaWRhdG9ycykpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY3RybC4kJGxhc3RDb21taXR0ZWRWaWV3VmFsdWUgPSB2aWV3VmFsdWU7XHJcblxyXG4gICAgLy8gY2hhbmdlIHRvIGRpcnR5XHJcbiAgICBpZiAoY3RybC4kcHJpc3RpbmUpIHtcclxuICAgICAgY3RybC4kZGlydHkgPSB0cnVlO1xyXG4gICAgICBjdHJsLiRwcmlzdGluZSA9IGZhbHNlO1xyXG4gICAgICAkYW5pbWF0ZS5yZW1vdmVDbGFzcygkZWxlbWVudCwgUFJJU1RJTkVfQ0xBU1MpO1xyXG4gICAgICAkYW5pbWF0ZS5hZGRDbGFzcygkZWxlbWVudCwgRElSVFlfQ0xBU1MpO1xyXG4gICAgICBwYXJlbnRGb3JtLiRzZXREaXJ0eSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy4kJHBhcnNlQW5kVmFsaWRhdGUoKTtcclxuICB9O1xyXG5cclxuICB0aGlzLiQkcGFyc2VBbmRWYWxpZGF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHZpZXdWYWx1ZSA9IGN0cmwuJCRsYXN0Q29tbWl0dGVkVmlld1ZhbHVlO1xyXG4gICAgdmFyIG1vZGVsVmFsdWUgPSB2aWV3VmFsdWU7XHJcbiAgICB2YXIgcGFyc2VyVmFsaWQgPSBpc1VuZGVmaW5lZChtb2RlbFZhbHVlKSA/IHVuZGVmaW5lZCA6IHRydWU7XHJcblxyXG4gICAgaWYgKHBhcnNlclZhbGlkKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3RybC4kcGFyc2Vycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG1vZGVsVmFsdWUgPSBjdHJsLiRwYXJzZXJzW2ldKG1vZGVsVmFsdWUpO1xyXG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChtb2RlbFZhbHVlKSkge1xyXG4gICAgICAgICAgcGFyc2VyVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGlzTnVtYmVyKGN0cmwuJG1vZGVsVmFsdWUpICYmIGlzTmFOKGN0cmwuJG1vZGVsVmFsdWUpKSB7XHJcbiAgICAgIC8vIGN0cmwuJG1vZGVsVmFsdWUgaGFzIG5vdCBiZWVuIHRvdWNoZWQgeWV0Li4uXHJcbiAgICAgIGN0cmwuJG1vZGVsVmFsdWUgPSBuZ01vZGVsR2V0KCk7XHJcbiAgICB9XHJcbiAgICB2YXIgcHJldk1vZGVsVmFsdWUgPSBjdHJsLiRtb2RlbFZhbHVlO1xyXG4gICAgdmFyIGFsbG93SW52YWxpZCA9IGN0cmwuJG9wdGlvbnMgJiYgY3RybC4kb3B0aW9ucy5hbGxvd0ludmFsaWQ7XHJcbiAgICBpZiAoYWxsb3dJbnZhbGlkKSB7XHJcbiAgICAgIGN0cmwuJG1vZGVsVmFsdWUgPSBtb2RlbFZhbHVlO1xyXG4gICAgICB3cml0ZVRvTW9kZWxJZk5lZWRlZCgpO1xyXG4gICAgfVxyXG4gICAgY3RybC4kJHJ1blZhbGlkYXRvcnMocGFyc2VyVmFsaWQsIG1vZGVsVmFsdWUsIHZpZXdWYWx1ZSwgZnVuY3Rpb24oYWxsVmFsaWQpIHtcclxuICAgICAgaWYgKCFhbGxvd0ludmFsaWQpIHtcclxuICAgICAgICAvLyBOb3RlOiBEb24ndCBjaGVjayBjdHJsLiR2YWxpZCBoZXJlLCBhcyB3ZSBjb3VsZCBoYXZlXHJcbiAgICAgICAgLy8gZXh0ZXJuYWwgdmFsaWRhdG9ycyAoZS5nLiBjYWxjdWxhdGVkIG9uIHRoZSBzZXJ2ZXIpLFxyXG4gICAgICAgIC8vIHRoYXQganVzdCBjYWxsICRzZXRWYWxpZGl0eSBhbmQgbmVlZCB0aGUgbW9kZWwgdmFsdWVcclxuICAgICAgICAvLyB0byBjYWxjdWxhdGUgdGhlaXIgdmFsaWRpdHkuXHJcbiAgICAgICAgY3RybC4kbW9kZWxWYWx1ZSA9IGFsbFZhbGlkID8gbW9kZWxWYWx1ZSA6IHVuZGVmaW5lZDtcclxuICAgICAgICB3cml0ZVRvTW9kZWxJZk5lZWRlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBmdW5jdGlvbiB3cml0ZVRvTW9kZWxJZk5lZWRlZCgpIHtcclxuICAgICAgaWYgKGN0cmwuJG1vZGVsVmFsdWUgIT09IHByZXZNb2RlbFZhbHVlKSB7XHJcbiAgICAgICAgY3RybC4kJHdyaXRlTW9kZWxUb1Njb3BlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICB0aGlzLiQkd3JpdGVNb2RlbFRvU2NvcGUgPSBmdW5jdGlvbigpIHtcclxuICAgIG5nTW9kZWxTZXQoY3RybC4kbW9kZWxWYWx1ZSk7XHJcbiAgICBmb3JFYWNoKGN0cmwuJHZpZXdDaGFuZ2VMaXN0ZW5lcnMsIGZ1bmN0aW9uKGxpc3RlbmVyKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGlzdGVuZXIoKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICRleGNlcHRpb25IYW5kbGVyKGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBAbmdkb2MgbWV0aG9kXHJcbiAgICogQG5hbWUgbmdNb2RlbC5OZ01vZGVsQ29udHJvbGxlciMkc2V0Vmlld1ZhbHVlXHJcbiAgICpcclxuICAgKiBAZGVzY3JpcHRpb25cclxuICAgKiBVcGRhdGUgdGhlIHZpZXcgdmFsdWUuXHJcbiAgICpcclxuICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYW4gaW5wdXQgZGlyZWN0aXZlIHdhbnQgdG8gY2hhbmdlIHRoZSB2aWV3IHZhbHVlOyB0eXBpY2FsbHksXHJcbiAgICogdGhpcyBpcyBkb25lIGZyb20gd2l0aGluIGEgRE9NIGV2ZW50IGhhbmRsZXIuXHJcbiAgICpcclxuICAgKiBGb3IgZXhhbXBsZSB7QGxpbmsgbmcuZGlyZWN0aXZlOmlucHV0IGlucHV0fSBjYWxscyBpdCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgY2hhbmdlcyBhbmRcclxuICAgKiB7QGxpbmsgbmcuZGlyZWN0aXZlOnNlbGVjdCBzZWxlY3R9IGNhbGxzIGl0IHdoZW4gYW4gb3B0aW9uIGlzIHNlbGVjdGVkLlxyXG4gICAqXHJcbiAgICogSWYgdGhlIG5ldyBgdmFsdWVgIGlzIGFuIG9iamVjdCAocmF0aGVyIHRoYW4gYSBzdHJpbmcgb3IgYSBudW1iZXIpLCB3ZSBzaG91bGQgbWFrZSBhIGNvcHkgb2YgdGhlXHJcbiAgICogb2JqZWN0IGJlZm9yZSBwYXNzaW5nIGl0IHRvIGAkc2V0Vmlld1ZhbHVlYC4gIFRoaXMgaXMgYmVjYXVzZSBgbmdNb2RlbGAgZG9lcyBub3QgcGVyZm9ybSBhIGRlZXBcclxuICAgKiB3YXRjaCBvZiBvYmplY3RzLCBpdCBvbmx5IGxvb2tzIGZvciBhIGNoYW5nZSBvZiBpZGVudGl0eS4gSWYgeW91IG9ubHkgY2hhbmdlIHRoZSBwcm9wZXJ0eSBvZlxyXG4gICAqIHRoZSBvYmplY3QgdGhlbiBuZ01vZGVsIHdpbGwgbm90IHJlYWxpc2UgdGhhdCB0aGUgb2JqZWN0IGhhcyBjaGFuZ2VkIGFuZCB3aWxsIG5vdCBpbnZva2UgdGhlXHJcbiAgICogYCRwYXJzZXJzYCBhbmQgYCR2YWxpZGF0b3JzYCBwaXBlbGluZXMuXHJcbiAgICpcclxuICAgKiBGb3IgdGhpcyByZWFzb24sIHlvdSBzaG91bGQgbm90IGNoYW5nZSBwcm9wZXJ0aWVzIG9mIHRoZSBjb3B5IG9uY2UgaXQgaGFzIGJlZW4gcGFzc2VkIHRvXHJcbiAgICogYCRzZXRWaWV3VmFsdWVgLiBPdGhlcndpc2UgeW91IG1heSBjYXVzZSB0aGUgbW9kZWwgdmFsdWUgb24gdGhlIHNjb3BlIHRvIGNoYW5nZSBpbmNvcnJlY3RseS5cclxuICAgKlxyXG4gICAqIFdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCB0aGUgbmV3IGB2YWx1ZWAgd2lsbCBiZSBzdGFnZWQgZm9yIGNvbW1pdHRpbmcgdGhyb3VnaCB0aGUgYCRwYXJzZXJzYFxyXG4gICAqIGFuZCBgJHZhbGlkYXRvcnNgIHBpcGVsaW5lcy4gSWYgdGhlcmUgYXJlIG5vIHNwZWNpYWwge0BsaW5rIG5nTW9kZWxPcHRpb25zfSBzcGVjaWZpZWQgdGhlbiB0aGUgc3RhZ2VkXHJcbiAgICogdmFsdWUgc2VudCBkaXJlY3RseSBmb3IgcHJvY2Vzc2luZywgZmluYWxseSB0byBiZSBhcHBsaWVkIHRvIGAkbW9kZWxWYWx1ZWAgYW5kIHRoZW4gdGhlXHJcbiAgICogKipleHByZXNzaW9uKiogc3BlY2lmaWVkIGluIHRoZSBgbmctbW9kZWxgIGF0dHJpYnV0ZS5cclxuICAgKlxyXG4gICAqIExhc3RseSwgYWxsIHRoZSByZWdpc3RlcmVkIGNoYW5nZSBsaXN0ZW5lcnMsIGluIHRoZSBgJHZpZXdDaGFuZ2VMaXN0ZW5lcnNgIGxpc3QsIGFyZSBjYWxsZWQuXHJcbiAgICpcclxuICAgKiBJbiBjYXNlIHRoZSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nTW9kZWxPcHRpb25zIG5nTW9kZWxPcHRpb25zfSBkaXJlY3RpdmUgaXMgdXNlZCB3aXRoIGB1cGRhdGVPbmBcclxuICAgKiBhbmQgdGhlIGBkZWZhdWx0YCB0cmlnZ2VyIGlzIG5vdCBsaXN0ZWQsIGFsbCB0aG9zZSBhY3Rpb25zIHdpbGwgcmVtYWluIHBlbmRpbmcgdW50aWwgb25lIG9mIHRoZVxyXG4gICAqIGB1cGRhdGVPbmAgZXZlbnRzIGlzIHRyaWdnZXJlZCBvbiB0aGUgRE9NIGVsZW1lbnQuXHJcbiAgICogQWxsIHRoZXNlIGFjdGlvbnMgd2lsbCBiZSBkZWJvdW5jZWQgaWYgdGhlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdNb2RlbE9wdGlvbnMgbmdNb2RlbE9wdGlvbnN9XHJcbiAgICogZGlyZWN0aXZlIGlzIHVzZWQgd2l0aCBhIGN1c3RvbSBkZWJvdW5jZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGV2ZW50LlxyXG4gICAqXHJcbiAgICogTm90ZSB0aGF0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0cmlnZ2VyIGEgYCRkaWdlc3RgLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFZhbHVlIGZyb20gdGhlIHZpZXcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRyaWdnZXIgRXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIHVwZGF0ZS5cclxuICAgKi9cclxuICB0aGlzLiRzZXRWaWV3VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSwgdHJpZ2dlcikge1xyXG4gICAgY3RybC4kdmlld1ZhbHVlID0gdmFsdWU7XHJcbiAgICBpZiAoIWN0cmwuJG9wdGlvbnMgfHwgY3RybC4kb3B0aW9ucy51cGRhdGVPbkRlZmF1bHQpIHtcclxuICAgICAgY3RybC4kJGRlYm91bmNlVmlld1ZhbHVlQ29tbWl0KHRyaWdnZXIpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHRoaXMuJCRkZWJvdW5jZVZpZXdWYWx1ZUNvbW1pdCA9IGZ1bmN0aW9uKHRyaWdnZXIpIHtcclxuICAgIHZhciBkZWJvdW5jZURlbGF5ID0gMCxcclxuICAgICAgICBvcHRpb25zID0gY3RybC4kb3B0aW9ucyxcclxuICAgICAgICBkZWJvdW5jZTtcclxuXHJcbiAgICBpZiAob3B0aW9ucyAmJiBpc0RlZmluZWQob3B0aW9ucy5kZWJvdW5jZSkpIHtcclxuICAgICAgZGVib3VuY2UgPSBvcHRpb25zLmRlYm91bmNlO1xyXG4gICAgICBpZiAoaXNOdW1iZXIoZGVib3VuY2UpKSB7XHJcbiAgICAgICAgZGVib3VuY2VEZWxheSA9IGRlYm91bmNlO1xyXG4gICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGRlYm91bmNlW3RyaWdnZXJdKSkge1xyXG4gICAgICAgIGRlYm91bmNlRGVsYXkgPSBkZWJvdW5jZVt0cmlnZ2VyXTtcclxuICAgICAgfSBlbHNlIGlmIChpc051bWJlcihkZWJvdW5jZVsnZGVmYXVsdCddKSkge1xyXG4gICAgICAgIGRlYm91bmNlRGVsYXkgPSBkZWJvdW5jZVsnZGVmYXVsdCddO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJHRpbWVvdXQuY2FuY2VsKHBlbmRpbmdEZWJvdW5jZSk7XHJcbiAgICBpZiAoZGVib3VuY2VEZWxheSkge1xyXG4gICAgICBwZW5kaW5nRGVib3VuY2UgPSAkdGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgICBjdHJsLiRjb21taXRWaWV3VmFsdWUoKTtcclxuICAgICAgfSwgZGVib3VuY2VEZWxheSk7XHJcbiAgICB9IGVsc2UgaWYgKCRyb290U2NvcGUuJCRwaGFzZSkge1xyXG4gICAgICBjdHJsLiRjb21taXRWaWV3VmFsdWUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY3RybC4kY29tbWl0Vmlld1ZhbHVlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8vIG1vZGVsIC0+IHZhbHVlXHJcbiAgLy8gTm90ZTogd2UgY2Fubm90IHVzZSBhIG5vcm1hbCBzY29wZS4kd2F0Y2ggYXMgd2Ugd2FudCB0byBkZXRlY3QgdGhlIGZvbGxvd2luZzpcclxuICAvLyAxLiBzY29wZSB2YWx1ZSBpcyAnYSdcclxuICAvLyAyLiB1c2VyIGVudGVycyAnYidcclxuICAvLyAzLiBuZy1jaGFuZ2Uga2lja3MgaW4gYW5kIHJldmVydHMgc2NvcGUgdmFsdWUgdG8gJ2EnXHJcbiAgLy8gICAgLT4gc2NvcGUgdmFsdWUgZGlkIG5vdCBjaGFuZ2Ugc2luY2UgdGhlIGxhc3QgZGlnZXN0IGFzXHJcbiAgLy8gICAgICAgbmctY2hhbmdlIGV4ZWN1dGVzIGluIGFwcGx5IHBoYXNlXHJcbiAgLy8gNC4gdmlldyBzaG91bGQgYmUgY2hhbmdlZCBiYWNrIHRvICdhJ1xyXG4gICRzY29wZS4kd2F0Y2goZnVuY3Rpb24gbmdNb2RlbFdhdGNoKCkge1xyXG4gICAgdmFyIG1vZGVsVmFsdWUgPSBuZ01vZGVsR2V0KCk7XHJcblxyXG4gICAgLy8gaWYgc2NvcGUgbW9kZWwgdmFsdWUgYW5kIG5nTW9kZWwgdmFsdWUgYXJlIG91dCBvZiBzeW5jXHJcbiAgICAvLyBUT0RPKHBlcmYpOiB3aHkgbm90IG1vdmUgdGhpcyB0byB0aGUgYWN0aW9uIGZuP1xyXG4gICAgaWYgKG1vZGVsVmFsdWUgIT09IGN0cmwuJG1vZGVsVmFsdWUpIHtcclxuICAgICAgY3RybC4kbW9kZWxWYWx1ZSA9IG1vZGVsVmFsdWU7XHJcblxyXG4gICAgICB2YXIgZm9ybWF0dGVycyA9IGN0cmwuJGZvcm1hdHRlcnMsXHJcbiAgICAgICAgICBpZHggPSBmb3JtYXR0ZXJzLmxlbmd0aDtcclxuXHJcbiAgICAgIHZhciB2aWV3VmFsdWUgPSBtb2RlbFZhbHVlO1xyXG4gICAgICB3aGlsZSAoaWR4LS0pIHtcclxuICAgICAgICB2aWV3VmFsdWUgPSBmb3JtYXR0ZXJzW2lkeF0odmlld1ZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY3RybC4kdmlld1ZhbHVlICE9PSB2aWV3VmFsdWUpIHtcclxuICAgICAgICBjdHJsLiR2aWV3VmFsdWUgPSBjdHJsLiQkbGFzdENvbW1pdHRlZFZpZXdWYWx1ZSA9IHZpZXdWYWx1ZTtcclxuICAgICAgICBjdHJsLiRyZW5kZXIoKTtcclxuXHJcbiAgICAgICAgY3RybC4kJHJ1blZhbGlkYXRvcnModW5kZWZpbmVkLCBtb2RlbFZhbHVlLCB2aWV3VmFsdWUsIG5vb3ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1vZGVsVmFsdWU7XHJcbiAgfSk7XHJcbn1dO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIG5nTW9kZWxcclxuICpcclxuICogQGVsZW1lbnQgaW5wdXRcclxuICogQHByaW9yaXR5IDFcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRoZSBgbmdNb2RlbGAgZGlyZWN0aXZlIGJpbmRzIGFuIGBpbnB1dGAsYHNlbGVjdGAsIGB0ZXh0YXJlYWAgKG9yIGN1c3RvbSBmb3JtIGNvbnRyb2wpIHRvIGFcclxuICogcHJvcGVydHkgb24gdGhlIHNjb3BlIHVzaW5nIHtAbGluayBuZ01vZGVsLk5nTW9kZWxDb250cm9sbGVyIE5nTW9kZWxDb250cm9sbGVyfSxcclxuICogd2hpY2ggaXMgY3JlYXRlZCBhbmQgZXhwb3NlZCBieSB0aGlzIGRpcmVjdGl2ZS5cclxuICpcclxuICogYG5nTW9kZWxgIGlzIHJlc3BvbnNpYmxlIGZvcjpcclxuICpcclxuICogLSBCaW5kaW5nIHRoZSB2aWV3IGludG8gdGhlIG1vZGVsLCB3aGljaCBvdGhlciBkaXJlY3RpdmVzIHN1Y2ggYXMgYGlucHV0YCwgYHRleHRhcmVhYCBvciBgc2VsZWN0YFxyXG4gKiAgIHJlcXVpcmUuXHJcbiAqIC0gUHJvdmlkaW5nIHZhbGlkYXRpb24gYmVoYXZpb3IgKGkuZS4gcmVxdWlyZWQsIG51bWJlciwgZW1haWwsIHVybCkuXHJcbiAqIC0gS2VlcGluZyB0aGUgc3RhdGUgb2YgdGhlIGNvbnRyb2wgKHZhbGlkL2ludmFsaWQsIGRpcnR5L3ByaXN0aW5lLCB0b3VjaGVkL3VudG91Y2hlZCwgdmFsaWRhdGlvbiBlcnJvcnMpLlxyXG4gKiAtIFNldHRpbmcgcmVsYXRlZCBjc3MgY2xhc3NlcyBvbiB0aGUgZWxlbWVudCAoYG5nLXZhbGlkYCwgYG5nLWludmFsaWRgLCBgbmctZGlydHlgLCBgbmctcHJpc3RpbmVgLCBgbmctdG91Y2hlZGAsIGBuZy11bnRvdWNoZWRgKSBpbmNsdWRpbmcgYW5pbWF0aW9ucy5cclxuICogLSBSZWdpc3RlcmluZyB0aGUgY29udHJvbCB3aXRoIGl0cyBwYXJlbnQge0BsaW5rIG5nLmRpcmVjdGl2ZTpmb3JtIGZvcm19LlxyXG4gKlxyXG4gKiBOb3RlOiBgbmdNb2RlbGAgd2lsbCB0cnkgdG8gYmluZCB0byB0aGUgcHJvcGVydHkgZ2l2ZW4gYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbiBvbiB0aGVcclxuICogY3VycmVudCBzY29wZS4gSWYgdGhlIHByb3BlcnR5IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBvbiB0aGlzIHNjb3BlLCBpdCB3aWxsIGJlIGNyZWF0ZWRcclxuICogaW1wbGljaXRseSBhbmQgYWRkZWQgdG8gdGhlIHNjb3BlLlxyXG4gKlxyXG4gKiBGb3IgYmVzdCBwcmFjdGljZXMgb24gdXNpbmcgYG5nTW9kZWxgLCBzZWU6XHJcbiAqXHJcbiAqICAtIFtVbmRlcnN0YW5kaW5nIFNjb3Blc10oaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5qcy93aWtpL1VuZGVyc3RhbmRpbmctU2NvcGVzKVxyXG4gKlxyXG4gKiBGb3IgYmFzaWMgZXhhbXBsZXMsIGhvdyB0byB1c2UgYG5nTW9kZWxgLCBzZWU6XHJcbiAqXHJcbiAqICAtIHtAbGluayBuZy5kaXJlY3RpdmU6aW5wdXQgaW5wdXR9XHJcbiAqICAgIC0ge0BsaW5rIGlucHV0W3RleHRdIHRleHR9XHJcbiAqICAgIC0ge0BsaW5rIGlucHV0W2NoZWNrYm94XSBjaGVja2JveH1cclxuICogICAgLSB7QGxpbmsgaW5wdXRbcmFkaW9dIHJhZGlvfVxyXG4gKiAgICAtIHtAbGluayBpbnB1dFtudW1iZXJdIG51bWJlcn1cclxuICogICAgLSB7QGxpbmsgaW5wdXRbZW1haWxdIGVtYWlsfVxyXG4gKiAgICAtIHtAbGluayBpbnB1dFt1cmxdIHVybH1cclxuICogICAgLSB7QGxpbmsgaW5wdXRbZGF0ZV0gZGF0ZX1cclxuICogICAgLSB7QGxpbmsgaW5wdXRbZGF0ZXRpbWUtbG9jYWxdIGRhdGV0aW1lLWxvY2FsfVxyXG4gKiAgICAtIHtAbGluayBpbnB1dFt0aW1lXSB0aW1lfVxyXG4gKiAgICAtIHtAbGluayBpbnB1dFttb250aF0gbW9udGh9XHJcbiAqICAgIC0ge0BsaW5rIGlucHV0W3dlZWtdIHdlZWt9XHJcbiAqICAtIHtAbGluayBuZy5kaXJlY3RpdmU6c2VsZWN0IHNlbGVjdH1cclxuICogIC0ge0BsaW5rIG5nLmRpcmVjdGl2ZTp0ZXh0YXJlYSB0ZXh0YXJlYX1cclxuICpcclxuICogIyBDU1MgY2xhc3Nlc1xyXG4gKiBUaGUgZm9sbG93aW5nIENTUyBjbGFzc2VzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCBvbiB0aGUgYXNzb2NpYXRlZCBpbnB1dC9zZWxlY3QvdGV4dGFyZWEgZWxlbWVudFxyXG4gKiBkZXBlbmRpbmcgb24gdGhlIHZhbGlkaXR5IG9mIHRoZSBtb2RlbC5cclxuICpcclxuICogIC0gYG5nLXZhbGlkYDogdGhlIG1vZGVsIGlzIHZhbGlkXHJcbiAqICAtIGBuZy1pbnZhbGlkYDogdGhlIG1vZGVsIGlzIGludmFsaWRcclxuICogIC0gYG5nLXZhbGlkLVtrZXldYDogZm9yIGVhY2ggdmFsaWQga2V5IGFkZGVkIGJ5IGAkc2V0VmFsaWRpdHlgXHJcbiAqICAtIGBuZy1pbnZhbGlkLVtrZXldYDogZm9yIGVhY2ggaW52YWxpZCBrZXkgYWRkZWQgYnkgYCRzZXRWYWxpZGl0eWBcclxuICogIC0gYG5nLXByaXN0aW5lYDogdGhlIGNvbnRyb2wgaGFzbid0IGJlZW4gaW50ZXJhY3RlZCB3aXRoIHlldFxyXG4gKiAgLSBgbmctZGlydHlgOiB0aGUgY29udHJvbCBoYXMgYmVlbiBpbnRlcmFjdGVkIHdpdGhcclxuICogIC0gYG5nLXRvdWNoZWRgOiB0aGUgY29udHJvbCBoYXMgYmVlbiBibHVycmVkXHJcbiAqICAtIGBuZy11bnRvdWNoZWRgOiB0aGUgY29udHJvbCBoYXNuJ3QgYmVlbiBibHVycmVkXHJcbiAqICAtIGBuZy1wZW5kaW5nYDogYW55IGAkYXN5bmNWYWxpZGF0b3JzYCBhcmUgdW5mdWxmaWxsZWRcclxuICpcclxuICogS2VlcCBpbiBtaW5kIHRoYXQgbmdBbmltYXRlIGNhbiBkZXRlY3QgZWFjaCBvZiB0aGVzZSBjbGFzc2VzIHdoZW4gYWRkZWQgYW5kIHJlbW92ZWQuXHJcbiAqXHJcbiAqICMjIEFuaW1hdGlvbiBIb29rc1xyXG4gKlxyXG4gKiBBbmltYXRpb25zIHdpdGhpbiBtb2RlbHMgYXJlIHRyaWdnZXJlZCB3aGVuIGFueSBvZiB0aGUgYXNzb2NpYXRlZCBDU1MgY2xhc3NlcyBhcmUgYWRkZWQgYW5kIHJlbW92ZWRcclxuICogb24gdGhlIGlucHV0IGVsZW1lbnQgd2hpY2ggaXMgYXR0YWNoZWQgdG8gdGhlIG1vZGVsLiBUaGVzZSBjbGFzc2VzIGFyZTogYC5uZy1wcmlzdGluZWAsIGAubmctZGlydHlgLFxyXG4gKiBgLm5nLWludmFsaWRgIGFuZCBgLm5nLXZhbGlkYCBhcyB3ZWxsIGFzIGFueSBvdGhlciB2YWxpZGF0aW9ucyB0aGF0IGFyZSBwZXJmb3JtZWQgb24gdGhlIG1vZGVsIGl0c2VsZi5cclxuICogVGhlIGFuaW1hdGlvbnMgdGhhdCBhcmUgdHJpZ2dlcmVkIHdpdGhpbiBuZ01vZGVsIGFyZSBzaW1pbGFyIHRvIGhvdyB0aGV5IHdvcmsgaW4gbmdDbGFzcyBhbmRcclxuICogYW5pbWF0aW9ucyBjYW4gYmUgaG9va2VkIGludG8gdXNpbmcgQ1NTIHRyYW5zaXRpb25zLCBrZXlmcmFtZXMgYXMgd2VsbCBhcyBKUyBhbmltYXRpb25zLlxyXG4gKlxyXG4gKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgYSBzaW1wbGUgd2F5IHRvIHV0aWxpemUgQ1NTIHRyYW5zaXRpb25zIHRvIHN0eWxlIGFuIGlucHV0IGVsZW1lbnRcclxuICogdGhhdCBoYXMgYmVlbiByZW5kZXJlZCBhcyBpbnZhbGlkIGFmdGVyIGl0IGhhcyBiZWVuIHZhbGlkYXRlZDpcclxuICpcclxuICogPHByZT5cclxuICogLy9iZSBzdXJlIHRvIGluY2x1ZGUgbmdBbmltYXRlIGFzIGEgbW9kdWxlIHRvIGhvb2sgaW50byBtb3JlXHJcbiAqIC8vYWR2YW5jZWQgYW5pbWF0aW9uc1xyXG4gKiAubXktaW5wdXQge1xyXG4gKiAgIHRyYW5zaXRpb246MC41cyBsaW5lYXIgYWxsO1xyXG4gKiAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gKiB9XHJcbiAqIC5teS1pbnB1dC5uZy1pbnZhbGlkIHtcclxuICogICBiYWNrZ3JvdW5kOiByZWQ7XHJcbiAqICAgY29sb3I6d2hpdGU7XHJcbiAqIH1cclxuICogPC9wcmU+XHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxleGFtcGxlIGRlcHM9XCJhbmd1bGFyLWFuaW1hdGUuanNcIiBhbmltYXRpb25zPVwidHJ1ZVwiIGZpeEJhc2U9XCJ0cnVlXCIgbW9kdWxlPVwiaW5wdXRFeGFtcGxlXCI+XHJcbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgIDxzY3JpcHQ+XHJcbiAgICAgICAgYW5ndWxhci5tb2R1bGUoJ2lucHV0RXhhbXBsZScsIFtdKVxyXG4gICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcclxuICAgICAgICAgICAgJHNjb3BlLnZhbCA9ICcxJztcclxuICAgICAgICAgIH1dKTtcclxuICAgICAgIDwvc2NyaXB0PlxyXG4gICAgICAgPHN0eWxlPlxyXG4gICAgICAgICAubXktaW5wdXQge1xyXG4gICAgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjphbGwgbGluZWFyIDAuNXM7XHJcbiAgICAgICAgICAgdHJhbnNpdGlvbjphbGwgbGluZWFyIDAuNXM7XHJcbiAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgLm15LWlucHV0Lm5nLWludmFsaWQge1xyXG4gICAgICAgICAgIGNvbG9yOndoaXRlO1xyXG4gICAgICAgICAgIGJhY2tncm91bmQ6IHJlZDtcclxuICAgICAgICAgfVxyXG4gICAgICAgPC9zdHlsZT5cclxuICAgICAgIFVwZGF0ZSBpbnB1dCB0byBzZWUgdHJhbnNpdGlvbnMgd2hlbiB2YWxpZC9pbnZhbGlkLlxyXG4gICAgICAgSW50ZWdlciBpcyBhIHZhbGlkIHZhbHVlLlxyXG4gICAgICAgPGZvcm0gbmFtZT1cInRlc3RGb3JtXCIgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XHJcbiAgICAgICAgIDxpbnB1dCBuZy1tb2RlbD1cInZhbFwiIG5nLXBhdHRlcm49XCIvXlxcZCskL1wiIG5hbWU9XCJhbmltXCIgY2xhc3M9XCJteS1pbnB1dFwiIC8+XHJcbiAgICAgICA8L2Zvcm0+XHJcbiAgICAgPC9maWxlPlxyXG4gKiA8L2V4YW1wbGU+XHJcbiAqXHJcbiAqICMjIEJpbmRpbmcgdG8gYSBnZXR0ZXIvc2V0dGVyXHJcbiAqXHJcbiAqIFNvbWV0aW1lcyBpdCdzIGhlbHBmdWwgdG8gYmluZCBgbmdNb2RlbGAgdG8gYSBnZXR0ZXIvc2V0dGVyIGZ1bmN0aW9uLiAgQSBnZXR0ZXIvc2V0dGVyIGlzIGFcclxuICogZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIHdoZW4gY2FsbGVkIHdpdGggemVybyBhcmd1bWVudHMsIGFuZCBzZXRzXHJcbiAqIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiBhIG1vZGVsIHdoZW4gY2FsbGVkIHdpdGggYW4gYXJndW1lbnQuIEl0J3Mgc29tZXRpbWVzIHVzZWZ1bCB0byB1c2UgdGhpc1xyXG4gKiBmb3IgbW9kZWxzIHRoYXQgaGF2ZSBhbiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiB0aGF0J3MgZGlmZmVyZW50IHRoYW4gd2hhdCB0aGUgbW9kZWwgZXhwb3Nlc1xyXG4gKiB0byB0aGUgdmlldy5cclxuICpcclxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXN1Y2Nlc3NcIj5cclxuICogKipCZXN0IFByYWN0aWNlOioqIEl0J3MgYmVzdCB0byBrZWVwIGdldHRlcnMgZmFzdCBiZWNhdXNlIEFuZ3VsYXIgaXMgbGlrZWx5IHRvIGNhbGwgdGhlbSBtb3JlXHJcbiAqIGZyZXF1ZW50bHkgdGhhbiBvdGhlciBwYXJ0cyBvZiB5b3VyIGNvZGUuXHJcbiAqIDwvZGl2PlxyXG4gKlxyXG4gKiBZb3UgdXNlIHRoaXMgYmVoYXZpb3IgYnkgYWRkaW5nIGBuZy1tb2RlbC1vcHRpb25zPVwieyBnZXR0ZXJTZXR0ZXI6IHRydWUgfVwiYCB0byBhbiBlbGVtZW50IHRoYXRcclxuICogaGFzIGBuZy1tb2RlbGAgYXR0YWNoZWQgdG8gaXQuIFlvdSBjYW4gYWxzbyBhZGQgYG5nLW1vZGVsLW9wdGlvbnM9XCJ7IGdldHRlclNldHRlcjogdHJ1ZSB9XCJgIHRvXHJcbiAqIGEgYDxmb3JtPmAsIHdoaWNoIHdpbGwgZW5hYmxlIHRoaXMgYmVoYXZpb3IgZm9yIGFsbCBgPGlucHV0PmBzIHdpdGhpbiBpdC4gU2VlXHJcbiAqIHtAbGluayBuZy5kaXJlY3RpdmU6bmdNb2RlbE9wdGlvbnMgYG5nTW9kZWxPcHRpb25zYH0gZm9yIG1vcmUuXHJcbiAqXHJcbiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIGBuZ01vZGVsYCB3aXRoIGEgZ2V0dGVyL3NldHRlcjpcclxuICpcclxuICogQGV4YW1wbGVcclxuICogPGV4YW1wbGUgbmFtZT1cIm5nTW9kZWwtZ2V0dGVyLXNldHRlclwiIG1vZHVsZT1cImdldHRlclNldHRlckV4YW1wbGVcIj5cclxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cclxuICAgICAgICAgPGZvcm0gbmFtZT1cInVzZXJGb3JtXCI+XHJcbiAgICAgICAgICAgTmFtZTpcclxuICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwidXNlck5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICBuZy1tb2RlbD1cInVzZXIubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIG5nLW1vZGVsLW9wdGlvbnM9XCJ7IGdldHRlclNldHRlcjogdHJ1ZSB9XCIgLz5cclxuICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICA8cHJlPnVzZXIubmFtZSA9IDxzcGFuIG5nLWJpbmQ9XCJ1c2VyLm5hbWUoKVwiPjwvc3Bhbj48L3ByZT5cclxuICAgICAgIDwvZGl2PlxyXG4gICAgIDwvZmlsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwiYXBwLmpzXCI+XHJcbiAgICAgICBhbmd1bGFyLm1vZHVsZSgnZ2V0dGVyU2V0dGVyRXhhbXBsZScsIFtdKVxyXG4gICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xyXG4gICAgICAgICAgIHZhciBfbmFtZSA9ICdCcmlhbic7XHJcbiAgICAgICAgICAgJHNjb3BlLnVzZXIgPSB7XHJcbiAgICAgICAgICAgICBuYW1lOiBmdW5jdGlvbihuZXdOYW1lKSB7XHJcbiAgICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChuZXdOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgIF9uYW1lID0gbmV3TmFtZTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICByZXR1cm4gX25hbWU7XHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgfTtcclxuICAgICAgICAgfV0pO1xyXG4gICAgIDwvZmlsZT5cclxuICogPC9leGFtcGxlPlxyXG4gKi9cclxudmFyIG5nTW9kZWxEaXJlY3RpdmUgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgIHJlcXVpcmU6IFsnbmdNb2RlbCcsICdeP2Zvcm0nLCAnXj9uZ01vZGVsT3B0aW9ucyddLFxyXG4gICAgY29udHJvbGxlcjogTmdNb2RlbENvbnRyb2xsZXIsXHJcbiAgICAvLyBQcmVsaW5rIG5lZWRzIHRvIHJ1biBiZWZvcmUgYW55IGlucHV0IGRpcmVjdGl2ZVxyXG4gICAgLy8gc28gdGhhdCB3ZSBjYW4gc2V0IHRoZSBOZ01vZGVsT3B0aW9ucyBpbiBOZ01vZGVsQ29udHJvbGxlclxyXG4gICAgLy8gYmVmb3JlIGFueW9uZSBlbHNlIHVzZXMgaXQuXHJcbiAgICBwcmlvcml0eTogMSxcclxuICAgIGNvbXBpbGU6IGZ1bmN0aW9uIG5nTW9kZWxDb21waWxlKGVsZW1lbnQpIHtcclxuICAgICAgLy8gU2V0dXAgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgY29udHJvbFxyXG4gICAgICBlbGVtZW50LmFkZENsYXNzKFBSSVNUSU5FX0NMQVNTKS5hZGRDbGFzcyhVTlRPVUNIRURfQ0xBU1MpLmFkZENsYXNzKFZBTElEX0NMQVNTKTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcHJlOiBmdW5jdGlvbiBuZ01vZGVsUHJlTGluayhzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybHMpIHtcclxuICAgICAgICAgIHZhciBtb2RlbEN0cmwgPSBjdHJsc1swXSxcclxuICAgICAgICAgICAgICBmb3JtQ3RybCA9IGN0cmxzWzFdIHx8IG51bGxGb3JtQ3RybDtcclxuXHJcbiAgICAgICAgICBtb2RlbEN0cmwuJCRzZXRPcHRpb25zKGN0cmxzWzJdICYmIGN0cmxzWzJdLiRvcHRpb25zKTtcclxuXHJcbiAgICAgICAgICAvLyBub3RpZnkgb3RoZXJzLCBlc3BlY2lhbGx5IHBhcmVudCBmb3Jtc1xyXG4gICAgICAgICAgZm9ybUN0cmwuJGFkZENvbnRyb2wobW9kZWxDdHJsKTtcclxuXHJcbiAgICAgICAgICBhdHRyLiRvYnNlcnZlKCduYW1lJywgZnVuY3Rpb24obmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKG1vZGVsQ3RybC4kbmFtZSAhPT0gbmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgICBmb3JtQ3RybC4kJHJlbmFtZUNvbnRyb2wobW9kZWxDdHJsLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNjb3BlLiRvbignJGRlc3Ryb3knLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgZm9ybUN0cmwuJHJlbW92ZUNvbnRyb2wobW9kZWxDdHJsKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcG9zdDogZnVuY3Rpb24gbmdNb2RlbFBvc3RMaW5rKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJscykge1xyXG4gICAgICAgICAgdmFyIG1vZGVsQ3RybCA9IGN0cmxzWzBdO1xyXG4gICAgICAgICAgaWYgKG1vZGVsQ3RybC4kb3B0aW9ucyAmJiBtb2RlbEN0cmwuJG9wdGlvbnMudXBkYXRlT24pIHtcclxuICAgICAgICAgICAgZWxlbWVudC5vbihtb2RlbEN0cmwuJG9wdGlvbnMudXBkYXRlT24sIGZ1bmN0aW9uKGV2KSB7XHJcbiAgICAgICAgICAgICAgbW9kZWxDdHJsLiQkZGVib3VuY2VWaWV3VmFsdWVDb21taXQoZXYgJiYgZXYudHlwZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGVsZW1lbnQub24oJ2JsdXInLCBmdW5jdGlvbihldikge1xyXG4gICAgICAgICAgICBpZiAobW9kZWxDdHJsLiR0b3VjaGVkKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgbW9kZWxDdHJsLiRzZXRUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH07XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdDaGFuZ2VcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEV2YWx1YXRlIHRoZSBnaXZlbiBleHByZXNzaW9uIHdoZW4gdGhlIHVzZXIgY2hhbmdlcyB0aGUgaW5wdXQuXHJcbiAqIFRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBpbW1lZGlhdGVseSwgdW5saWtlIHRoZSBKYXZhU2NyaXB0IG9uY2hhbmdlIGV2ZW50XHJcbiAqIHdoaWNoIG9ubHkgdHJpZ2dlcnMgYXQgdGhlIGVuZCBvZiBhIGNoYW5nZSAodXN1YWxseSwgd2hlbiB0aGUgdXNlciBsZWF2ZXMgdGhlXHJcbiAqIGZvcm0gZWxlbWVudCBvciBwcmVzc2VzIHRoZSByZXR1cm4ga2V5KS5cclxuICpcclxuICogVGhlIGBuZ0NoYW5nZWAgZXhwcmVzc2lvbiBpcyBvbmx5IGV2YWx1YXRlZCB3aGVuIGEgY2hhbmdlIGluIHRoZSBpbnB1dCB2YWx1ZSBjYXVzZXNcclxuICogYSBuZXcgdmFsdWUgdG8gYmUgY29tbWl0dGVkIHRvIHRoZSBtb2RlbC5cclxuICpcclxuICogSXQgd2lsbCBub3QgYmUgZXZhbHVhdGVkOlxyXG4gKiAqIGlmIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIHRoZSBgJHBhcnNlcnNgIHRyYW5zZm9ybWF0aW9uIHBpcGVsaW5lIGhhcyBub3QgY2hhbmdlZFxyXG4gKiAqIGlmIHRoZSBpbnB1dCBoYXMgY29udGludWVkIHRvIGJlIGludmFsaWQgc2luY2UgdGhlIG1vZGVsIHdpbGwgc3RheSBgbnVsbGBcclxuICogKiBpZiB0aGUgbW9kZWwgaXMgY2hhbmdlZCBwcm9ncmFtbWF0aWNhbGx5IGFuZCBub3QgYnkgYSBjaGFuZ2UgdG8gdGhlIGlucHV0IHZhbHVlXHJcbiAqXHJcbiAqXHJcbiAqIE5vdGUsIHRoaXMgZGlyZWN0aXZlIHJlcXVpcmVzIGBuZ01vZGVsYCB0byBiZSBwcmVzZW50LlxyXG4gKlxyXG4gKiBAZWxlbWVudCBpbnB1dFxyXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQ2hhbmdlIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb24gY2hhbmdlXHJcbiAqIGluIGlucHV0IHZhbHVlLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiA8ZXhhbXBsZSBuYW1lPVwibmdDaGFuZ2UtZGlyZWN0aXZlXCIgbW9kdWxlPVwiY2hhbmdlRXhhbXBsZVwiPlxyXG4gKiAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAqICAgICA8c2NyaXB0PlxyXG4gKiAgICAgICBhbmd1bGFyLm1vZHVsZSgnY2hhbmdlRXhhbXBsZScsIFtdKVxyXG4gKiAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAqICAgICAgICAgICAkc2NvcGUuY291bnRlciA9IDA7XHJcbiAqICAgICAgICAgICAkc2NvcGUuY2hhbmdlID0gZnVuY3Rpb24oKSB7XHJcbiAqICAgICAgICAgICAgICRzY29wZS5jb3VudGVyKys7XHJcbiAqICAgICAgICAgICB9O1xyXG4gKiAgICAgICAgIH1dKTtcclxuICogICAgIDwvc2NyaXB0PlxyXG4gKiAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cclxuICogICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5nLW1vZGVsPVwiY29uZmlybWVkXCIgbmctY2hhbmdlPVwiY2hhbmdlKClcIiBpZD1cIm5nLWNoYW5nZS1leGFtcGxlMVwiIC8+XHJcbiAqICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuZy1tb2RlbD1cImNvbmZpcm1lZFwiIGlkPVwibmctY2hhbmdlLWV4YW1wbGUyXCIgLz5cclxuICogICAgICAgPGxhYmVsIGZvcj1cIm5nLWNoYW5nZS1leGFtcGxlMlwiPkNvbmZpcm1lZDwvbGFiZWw+PGJyIC8+XHJcbiAqICAgICAgIDx0dD5kZWJ1ZyA9IHt7Y29uZmlybWVkfX08L3R0Pjxici8+XHJcbiAqICAgICAgIDx0dD5jb3VudGVyID0ge3tjb3VudGVyfX08L3R0Pjxici8+XHJcbiAqICAgICA8L2Rpdj5cclxuICogICA8L2ZpbGU+XHJcbiAqICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gKiAgICAgdmFyIGNvdW50ZXIgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ2NvdW50ZXInKSk7XHJcbiAqICAgICB2YXIgZGVidWcgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ2NvbmZpcm1lZCcpKTtcclxuICpcclxuICogICAgIGl0KCdzaG91bGQgZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gaWYgY2hhbmdpbmcgZnJvbSB2aWV3JywgZnVuY3Rpb24oKSB7XHJcbiAqICAgICAgIGV4cGVjdChjb3VudGVyLmdldFRleHQoKSkudG9Db250YWluKCcwJyk7XHJcbiAqXHJcbiAqICAgICAgIGVsZW1lbnQoYnkuaWQoJ25nLWNoYW5nZS1leGFtcGxlMScpKS5jbGljaygpO1xyXG4gKlxyXG4gKiAgICAgICBleHBlY3QoY291bnRlci5nZXRUZXh0KCkpLnRvQ29udGFpbignMScpO1xyXG4gKiAgICAgICBleHBlY3QoZGVidWcuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3RydWUnKTtcclxuICogICAgIH0pO1xyXG4gKlxyXG4gKiAgICAgaXQoJ3Nob3VsZCBub3QgZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gaWYgY2hhbmdpbmcgZnJvbSBtb2RlbCcsIGZ1bmN0aW9uKCkge1xyXG4gKiAgICAgICBlbGVtZW50KGJ5LmlkKCduZy1jaGFuZ2UtZXhhbXBsZTInKSkuY2xpY2soKTtcclxuXHJcbiAqICAgICAgIGV4cGVjdChjb3VudGVyLmdldFRleHQoKSkudG9Db250YWluKCcwJyk7XHJcbiAqICAgICAgIGV4cGVjdChkZWJ1Zy5nZXRUZXh0KCkpLnRvQ29udGFpbigndHJ1ZScpO1xyXG4gKiAgICAgfSk7XHJcbiAqICAgPC9maWxlPlxyXG4gKiA8L2V4YW1wbGU+XHJcbiAqL1xyXG52YXIgbmdDaGFuZ2VEaXJlY3RpdmUgPSB2YWx1ZUZuKHtcclxuICByZXN0cmljdDogJ0EnLFxyXG4gIHJlcXVpcmU6ICduZ01vZGVsJyxcclxuICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0ciwgY3RybCkge1xyXG4gICAgY3RybC4kdmlld0NoYW5nZUxpc3RlbmVycy5wdXNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICBzY29wZS4kZXZhbChhdHRyLm5nQ2hhbmdlKTtcclxuICAgIH0pO1xyXG4gIH1cclxufSk7XHJcblxyXG5cclxudmFyIHJlcXVpcmVkRGlyZWN0aXZlID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHJlc3RyaWN0OiAnQScsXHJcbiAgICByZXF1aXJlOiAnP25nTW9kZWwnLFxyXG4gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsbSwgYXR0ciwgY3RybCkge1xyXG4gICAgICBpZiAoIWN0cmwpIHJldHVybjtcclxuICAgICAgYXR0ci5yZXF1aXJlZCA9IHRydWU7IC8vIGZvcmNlIHRydXRoeSBpbiBjYXNlIHdlIGFyZSBvbiBub24gaW5wdXQgZWxlbWVudFxyXG5cclxuICAgICAgY3RybC4kdmFsaWRhdG9ycy5yZXF1aXJlZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuICFhdHRyLnJlcXVpcmVkIHx8ICFjdHJsLiRpc0VtcHR5KHZhbHVlKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGF0dHIuJG9ic2VydmUoJ3JlcXVpcmVkJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY3RybC4kdmFsaWRhdGUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfTtcclxufTtcclxuXHJcblxyXG52YXIgcGF0dGVybkRpcmVjdGl2ZSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiB7XHJcbiAgICByZXN0cmljdDogJ0EnLFxyXG4gICAgcmVxdWlyZTogJz9uZ01vZGVsJyxcclxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbG0sIGF0dHIsIGN0cmwpIHtcclxuICAgICAgaWYgKCFjdHJsKSByZXR1cm47XHJcblxyXG4gICAgICB2YXIgcmVnZXhwLCBwYXR0ZXJuRXhwID0gYXR0ci5uZ1BhdHRlcm4gfHwgYXR0ci5wYXR0ZXJuO1xyXG4gICAgICBhdHRyLiRvYnNlcnZlKCdwYXR0ZXJuJywgZnVuY3Rpb24ocmVnZXgpIHtcclxuICAgICAgICBpZiAoaXNTdHJpbmcocmVnZXgpICYmIHJlZ2V4Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXicgKyByZWdleCArICckJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVnZXggJiYgIXJlZ2V4LnRlc3QpIHtcclxuICAgICAgICAgIHRocm93IG1pbkVycignbmdQYXR0ZXJuJykoJ25vcmVnZXhwJyxcclxuICAgICAgICAgICAgJ0V4cGVjdGVkIHswfSB0byBiZSBhIFJlZ0V4cCBidXQgd2FzIHsxfS4gRWxlbWVudDogezJ9JywgcGF0dGVybkV4cCxcclxuICAgICAgICAgICAgcmVnZXgsIHN0YXJ0aW5nVGFnKGVsbSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVnZXhwID0gcmVnZXggfHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGN0cmwuJHZhbGlkYXRlKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY3RybC4kdmFsaWRhdG9ycy5wYXR0ZXJuID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gY3RybC4kaXNFbXB0eSh2YWx1ZSkgfHwgaXNVbmRlZmluZWQocmVnZXhwKSB8fCByZWdleHAudGVzdCh2YWx1ZSk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfTtcclxufTtcclxuXHJcblxyXG52YXIgbWF4bGVuZ3RoRGlyZWN0aXZlID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHJlc3RyaWN0OiAnQScsXHJcbiAgICByZXF1aXJlOiAnP25nTW9kZWwnLFxyXG4gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsbSwgYXR0ciwgY3RybCkge1xyXG4gICAgICBpZiAoIWN0cmwpIHJldHVybjtcclxuXHJcbiAgICAgIHZhciBtYXhsZW5ndGggPSAwO1xyXG4gICAgICBhdHRyLiRvYnNlcnZlKCdtYXhsZW5ndGgnLCBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgIG1heGxlbmd0aCA9IGludCh2YWx1ZSkgfHwgMDtcclxuICAgICAgICBjdHJsLiR2YWxpZGF0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgY3RybC4kdmFsaWRhdG9ycy5tYXhsZW5ndGggPSBmdW5jdGlvbihtb2RlbFZhbHVlLCB2aWV3VmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gY3RybC4kaXNFbXB0eShtb2RlbFZhbHVlKSB8fCB2aWV3VmFsdWUubGVuZ3RoIDw9IG1heGxlbmd0aDtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cclxudmFyIG1pbmxlbmd0aERpcmVjdGl2ZSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiB7XHJcbiAgICByZXN0cmljdDogJ0EnLFxyXG4gICAgcmVxdWlyZTogJz9uZ01vZGVsJyxcclxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbG0sIGF0dHIsIGN0cmwpIHtcclxuICAgICAgaWYgKCFjdHJsKSByZXR1cm47XHJcblxyXG4gICAgICB2YXIgbWlubGVuZ3RoID0gMDtcclxuICAgICAgYXR0ci4kb2JzZXJ2ZSgnbWlubGVuZ3RoJywgZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICBtaW5sZW5ndGggPSBpbnQodmFsdWUpIHx8IDA7XHJcbiAgICAgICAgY3RybC4kdmFsaWRhdGUoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGN0cmwuJHZhbGlkYXRvcnMubWlubGVuZ3RoID0gZnVuY3Rpb24obW9kZWxWYWx1ZSwgdmlld1ZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0cmwuJGlzRW1wdHkobW9kZWxWYWx1ZSkgfHwgdmlld1ZhbHVlLmxlbmd0aCA+PSBtaW5sZW5ndGg7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfTtcclxufTtcclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBuZ0xpc3RcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRleHQgaW5wdXQgdGhhdCBjb252ZXJ0cyBiZXR3ZWVuIGEgZGVsaW1pdGVkIHN0cmluZyBhbmQgYW4gYXJyYXkgb2Ygc3RyaW5ncy4gVGhlIGRlZmF1bHRcclxuICogZGVsaW1pdGVyIGlzIGEgY29tbWEgZm9sbG93ZWQgYnkgYSBzcGFjZSAtIGVxdWl2YWxlbnQgdG8gYG5nLWxpc3Q9XCIsIFwiYC4gWW91IGNhbiBzcGVjaWZ5IGEgY3VzdG9tXHJcbiAqIGRlbGltaXRlciBhcyB0aGUgdmFsdWUgb2YgdGhlIGBuZ0xpc3RgIGF0dHJpYnV0ZSAtIGZvciBleGFtcGxlLCBgbmctbGlzdD1cIiB8IFwiYC5cclxuICpcclxuICogVGhlIGJlaGF2aW91ciBvZiB0aGUgZGlyZWN0aXZlIGlzIGFmZmVjdGVkIGJ5IHRoZSB1c2Ugb2YgdGhlIGBuZ1RyaW1gIGF0dHJpYnV0ZS5cclxuICogKiBJZiBgbmdUcmltYCBpcyBzZXQgdG8gYFwiZmFsc2VcImAgdGhlbiB3aGl0ZXNwYWNlIGFyb3VuZCBib3RoIHRoZSBzZXBhcmF0b3IgYW5kIGVhY2hcclxuICogICBsaXN0IGl0ZW0gaXMgcmVzcGVjdGVkLiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgdXNlciBvZiB0aGUgZGlyZWN0aXZlIGlzIHJlc3BvbnNpYmxlIGZvclxyXG4gKiAgIGRlYWxpbmcgd2l0aCB3aGl0ZXNwYWNlIGJ1dCBhbHNvIGFsbG93cyB5b3UgdG8gdXNlIHdoaXRlc3BhY2UgYXMgYSBkZWxpbWl0ZXIsIHN1Y2ggYXMgYVxyXG4gKiAgIHRhYiBvciBuZXdsaW5lIGNoYXJhY3Rlci5cclxuICogKiBPdGhlcndpc2Ugd2hpdGVzcGFjZSBhcm91bmQgdGhlIGRlbGltaXRlciBpcyBpZ25vcmVkIHdoZW4gc3BsaXR0aW5nIChhbHRob3VnaCBpdCBpcyByZXNwZWN0ZWRcclxuICogICB3aGVuIGpvaW5pbmcgdGhlIGxpc3QgaXRlbXMgYmFjayB0b2dldGhlcikgYW5kIHdoaXRlc3BhY2UgYXJvdW5kIGVhY2ggbGlzdCBpdGVtIGlzIHN0cmlwcGVkXHJcbiAqICAgYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZSBtb2RlbC5cclxuICpcclxuICogIyMjIEV4YW1wbGUgd2l0aCBWYWxpZGF0aW9uXHJcbiAqXHJcbiAqIDxleGFtcGxlIG5hbWU9XCJuZ0xpc3QtZGlyZWN0aXZlXCIgbW9kdWxlPVwibGlzdEV4YW1wbGVcIj5cclxuICogICA8ZmlsZSBuYW1lPVwiYXBwLmpzXCI+XHJcbiAqICAgICAgYW5ndWxhci5tb2R1bGUoJ2xpc3RFeGFtcGxlJywgW10pXHJcbiAqICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xyXG4gKiAgICAgICAgICAkc2NvcGUubmFtZXMgPSBbJ21vcnBoZXVzJywgJ25lbycsICd0cmluaXR5J107XHJcbiAqICAgICAgICB9XSk7XHJcbiAqICAgPC9maWxlPlxyXG4gKiAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAqICAgIDxmb3JtIG5hbWU9XCJteUZvcm1cIiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cclxuICogICAgICBMaXN0OiA8aW5wdXQgbmFtZT1cIm5hbWVzSW5wdXRcIiBuZy1tb2RlbD1cIm5hbWVzXCIgbmctbGlzdCByZXF1aXJlZD5cclxuICogICAgICA8c3BhbiBjbGFzcz1cImVycm9yXCIgbmctc2hvdz1cIm15Rm9ybS5uYW1lc0lucHV0LiRlcnJvci5yZXF1aXJlZFwiPlxyXG4gKiAgICAgICAgUmVxdWlyZWQhPC9zcGFuPlxyXG4gKiAgICAgIDxicj5cclxuICogICAgICA8dHQ+bmFtZXMgPSB7e25hbWVzfX08L3R0Pjxici8+XHJcbiAqICAgICAgPHR0Pm15Rm9ybS5uYW1lc0lucHV0LiR2YWxpZCA9IHt7bXlGb3JtLm5hbWVzSW5wdXQuJHZhbGlkfX08L3R0Pjxici8+XHJcbiAqICAgICAgPHR0Pm15Rm9ybS5uYW1lc0lucHV0LiRlcnJvciA9IHt7bXlGb3JtLm5hbWVzSW5wdXQuJGVycm9yfX08L3R0Pjxici8+XHJcbiAqICAgICAgPHR0Pm15Rm9ybS4kdmFsaWQgPSB7e215Rm9ybS4kdmFsaWR9fTwvdHQ+PGJyLz5cclxuICogICAgICA8dHQ+bXlGb3JtLiRlcnJvci5yZXF1aXJlZCA9IHt7ISFteUZvcm0uJGVycm9yLnJlcXVpcmVkfX08L3R0Pjxici8+XHJcbiAqICAgICA8L2Zvcm0+XHJcbiAqICAgPC9maWxlPlxyXG4gKiAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICogICAgIHZhciBsaXN0SW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCduYW1lcycpKTtcclxuICogICAgIHZhciBuYW1lcyA9IGVsZW1lbnQoYnkuZXhhY3RCaW5kaW5nKCduYW1lcycpKTtcclxuICogICAgIHZhciB2YWxpZCA9IGVsZW1lbnQoYnkuYmluZGluZygnbXlGb3JtLm5hbWVzSW5wdXQuJHZhbGlkJykpO1xyXG4gKiAgICAgdmFyIGVycm9yID0gZWxlbWVudChieS5jc3MoJ3NwYW4uZXJyb3InKSk7XHJcbiAqXHJcbiAqICAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgdG8gbW9kZWwnLCBmdW5jdGlvbigpIHtcclxuICogICAgICAgZXhwZWN0KG5hbWVzLmdldFRleHQoKSkudG9Db250YWluKCdbXCJtb3JwaGV1c1wiLFwibmVvXCIsXCJ0cmluaXR5XCJdJyk7XHJcbiAqICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbigndHJ1ZScpO1xyXG4gKiAgICAgICBleHBlY3QoZXJyb3IuZ2V0Q3NzVmFsdWUoJ2Rpc3BsYXknKSkudG9CZSgnbm9uZScpO1xyXG4gKiAgICAgfSk7XHJcbiAqXHJcbiAqICAgICBpdCgnc2hvdWxkIGJlIGludmFsaWQgaWYgZW1wdHknLCBmdW5jdGlvbigpIHtcclxuICogICAgICAgbGlzdElucHV0LmNsZWFyKCk7XHJcbiAqICAgICAgIGxpc3RJbnB1dC5zZW5kS2V5cygnJyk7XHJcbiAqXHJcbiAqICAgICAgIGV4cGVjdChuYW1lcy5nZXRUZXh0KCkpLnRvQ29udGFpbignJyk7XHJcbiAqICAgICAgIGV4cGVjdCh2YWxpZC5nZXRUZXh0KCkpLnRvQ29udGFpbignZmFsc2UnKTtcclxuICogICAgICAgZXhwZWN0KGVycm9yLmdldENzc1ZhbHVlKCdkaXNwbGF5JykpLm5vdC50b0JlKCdub25lJyk7XHJcbiAqICAgICB9KTtcclxuICogICA8L2ZpbGU+XHJcbiAqIDwvZXhhbXBsZT5cclxuICpcclxuICogIyMjIEV4YW1wbGUgLSBzcGxpdHRpbmcgb24gd2hpdGVzcGFjZVxyXG4gKiA8ZXhhbXBsZSBuYW1lPVwibmdMaXN0LWRpcmVjdGl2ZS1uZXdsaW5lc1wiPlxyXG4gKiAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAqICAgIDx0ZXh0YXJlYSBuZy1tb2RlbD1cImxpc3RcIiBuZy1saXN0PVwiJiMxMDtcIiBuZy10cmltPVwiZmFsc2VcIj48L3RleHRhcmVhPlxyXG4gKiAgICA8cHJlPnt7IGxpc3QgfCBqc29uIH19PC9wcmU+XHJcbiAqICAgPC9maWxlPlxyXG4gKiAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICogICAgIGl0KFwic2hvdWxkIHNwbGl0IHRoZSB0ZXh0IGJ5IG5ld2xpbmVzXCIsIGZ1bmN0aW9uKCkge1xyXG4gKiAgICAgICB2YXIgbGlzdElucHV0ID0gZWxlbWVudChieS5tb2RlbCgnbGlzdCcpKTtcclxuICogICAgICAgdmFyIG91dHB1dCA9IGVsZW1lbnQoYnkuYmluZGluZygnbGlzdCB8IGpzb24nKSk7XHJcbiAqICAgICAgIGxpc3RJbnB1dC5zZW5kS2V5cygnYWJjXFxuZGVmXFxuZ2hpJyk7XHJcbiAqICAgICAgIGV4cGVjdChvdXRwdXQuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ1tcXG4gIFwiYWJjXCIsXFxuICBcImRlZlwiLFxcbiAgXCJnaGlcIlxcbl0nKTtcclxuICogICAgIH0pO1xyXG4gKiAgIDwvZmlsZT5cclxuICogPC9leGFtcGxlPlxyXG4gKlxyXG4gKiBAZWxlbWVudCBpbnB1dFxyXG4gKiBAcGFyYW0ge3N0cmluZz19IG5nTGlzdCBvcHRpb25hbCBkZWxpbWl0ZXIgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBzcGxpdCB0aGUgdmFsdWUuXHJcbiAqL1xyXG52YXIgbmdMaXN0RGlyZWN0aXZlID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHJlc3RyaWN0OiAnQScsXHJcbiAgICBwcmlvcml0eTogMTAwLFxyXG4gICAgcmVxdWlyZTogJ25nTW9kZWwnLFxyXG4gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwpIHtcclxuICAgICAgLy8gV2Ugd2FudCB0byBjb250cm9sIHdoaXRlc3BhY2UgdHJpbW1pbmcgc28gd2UgdXNlIHRoaXMgY29udm9sdXRlZCBhcHByb2FjaFxyXG4gICAgICAvLyB0byBhY2Nlc3MgdGhlIG5nTGlzdCBhdHRyaWJ1dGUsIHdoaWNoIGRvZXNuJ3QgcHJlLXRyaW0gdGhlIGF0dHJpYnV0ZVxyXG4gICAgICB2YXIgbmdMaXN0ID0gZWxlbWVudC5hdHRyKGF0dHIuJGF0dHIubmdMaXN0KSB8fCAnLCAnO1xyXG4gICAgICB2YXIgdHJpbVZhbHVlcyA9IGF0dHIubmdUcmltICE9PSAnZmFsc2UnO1xyXG4gICAgICB2YXIgc2VwYXJhdG9yID0gdHJpbVZhbHVlcyA/IHRyaW0obmdMaXN0KSA6IG5nTGlzdDtcclxuXHJcbiAgICAgIHZhciBwYXJzZSA9IGZ1bmN0aW9uKHZpZXdWYWx1ZSkge1xyXG4gICAgICAgIC8vIElmIHRoZSB2aWV3VmFsdWUgaXMgaW52YWxpZCAoc2F5IHJlcXVpcmVkIGJ1dCBlbXB0eSkgaXQgd2lsbCBiZSBgdW5kZWZpbmVkYFxyXG4gICAgICAgIGlmIChpc1VuZGVmaW5lZCh2aWV3VmFsdWUpKSByZXR1cm47XHJcblxyXG4gICAgICAgIHZhciBsaXN0ID0gW107XHJcblxyXG4gICAgICAgIGlmICh2aWV3VmFsdWUpIHtcclxuICAgICAgICAgIGZvckVhY2godmlld1ZhbHVlLnNwbGl0KHNlcGFyYXRvciksIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSkgbGlzdC5wdXNoKHRyaW1WYWx1ZXMgPyB0cmltKHZhbHVlKSA6IHZhbHVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGxpc3Q7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjdHJsLiRwYXJzZXJzLnB1c2gocGFyc2UpO1xyXG4gICAgICBjdHJsLiRmb3JtYXR0ZXJzLnB1c2goZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgIHJldHVybiB2YWx1ZS5qb2luKG5nTGlzdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCAkaXNFbXB0eSBiZWNhdXNlIGFuIGVtcHR5IGFycmF5IG1lYW5zIHRoZSBpbnB1dCBpcyBlbXB0eS5cclxuICAgICAgY3RybC4kaXNFbXB0eSA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuICF2YWx1ZSB8fCAhdmFsdWUubGVuZ3RoO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH07XHJcbn07XHJcblxyXG5cclxudmFyIENPTlNUQU5UX1ZBTFVFX1JFR0VYUCA9IC9eKHRydWV8ZmFsc2V8XFxkKykkLztcclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdWYWx1ZVxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQmluZHMgdGhlIGdpdmVuIGV4cHJlc3Npb24gdG8gdGhlIHZhbHVlIG9mIGA8b3B0aW9uPmAgb3Ige0BsaW5rIGlucHV0W3JhZGlvXSBgaW5wdXRbcmFkaW9dYH0sXHJcbiAqIHNvIHRoYXQgd2hlbiB0aGUgZWxlbWVudCBpcyBzZWxlY3RlZCwgdGhlIHtAbGluayBuZ01vZGVsIGBuZ01vZGVsYH0gb2YgdGhhdCBlbGVtZW50IGlzIHNldCB0b1xyXG4gKiB0aGUgYm91bmQgdmFsdWUuXHJcbiAqXHJcbiAqIGBuZ1ZhbHVlYCBpcyB1c2VmdWwgd2hlbiBkeW5hbWljYWxseSBnZW5lcmF0aW5nIGxpc3RzIG9mIHJhZGlvIGJ1dHRvbnMgdXNpbmdcclxuICoge0BsaW5rIG5nUmVwZWF0IGBuZ1JlcGVhdGB9LCBhcyBzaG93biBiZWxvdy5cclxuICpcclxuICogTGlrZXdpc2UsIGBuZ1ZhbHVlYCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBgPG9wdGlvbj5gIGVsZW1lbnRzIGZvclxyXG4gKiB0aGUge0BsaW5rIHNlbGVjdCBgc2VsZWN0YH0gZWxlbWVudC4gSW4gdGhhdCBjYXNlIGhvd2V2ZXIsIG9ubHkgc3RyaW5ncyBhcmUgc3VwcG9ydGVkXHJcbiAqIGZvciB0aGUgYHZhbHVlIGBhdHRyaWJ1dGUsIHNvIHRoZSByZXN1bHRpbmcgYG5nTW9kZWxgIHdpbGwgYWx3YXlzIGJlIGEgc3RyaW5nLlxyXG4gKiBTdXBwb3J0IGZvciBgc2VsZWN0YCBtb2RlbHMgd2l0aCBub24tc3RyaW5nIHZhbHVlcyBpcyBhdmFpbGFibGUgdmlhIGBuZ09wdGlvbnNgLlxyXG4gKlxyXG4gKiBAZWxlbWVudCBpbnB1dFxyXG4gKiBAcGFyYW0ge3N0cmluZz19IG5nVmFsdWUgYW5ndWxhciBleHByZXNzaW9uLCB3aG9zZSB2YWx1ZSB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgdmFsdWVgIGF0dHJpYnV0ZVxyXG4gKiAgIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnRcclxuICpcclxuICogQGV4YW1wbGVcclxuICAgIDxleGFtcGxlIG5hbWU9XCJuZ1ZhbHVlLWRpcmVjdGl2ZVwiIG1vZHVsZT1cInZhbHVlRXhhbXBsZVwiPlxyXG4gICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgPHNjcmlwdD5cclxuICAgICAgICAgIGFuZ3VsYXIubW9kdWxlKCd2YWx1ZUV4YW1wbGUnLCBbXSlcclxuICAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcclxuICAgICAgICAgICAgICAkc2NvcGUubmFtZXMgPSBbJ3BpenphJywgJ3VuaWNvcm5zJywgJ3JvYm90cyddO1xyXG4gICAgICAgICAgICAgICRzY29wZS5teSA9IHsgZmF2b3JpdGU6ICd1bmljb3JucycgfTtcclxuICAgICAgICAgICAgfV0pO1xyXG4gICAgICAgPC9zY3JpcHQ+XHJcbiAgICAgICAgPGZvcm0gbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XHJcbiAgICAgICAgICA8aDI+V2hpY2ggaXMgeW91ciBmYXZvcml0ZT88L2gyPlxyXG4gICAgICAgICAgICA8bGFiZWwgbmctcmVwZWF0PVwibmFtZSBpbiBuYW1lc1wiIGZvcj1cInt7bmFtZX19XCI+XHJcbiAgICAgICAgICAgICAge3tuYW1lfX1cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCJcclxuICAgICAgICAgICAgICAgICAgICAgbmctbW9kZWw9XCJteS5mYXZvcml0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIG5nLXZhbHVlPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGlkPVwie3tuYW1lfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZmF2b3JpdGVcIj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXY+WW91IGNob3NlIHt7bXkuZmF2b3JpdGV9fTwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgICAgPC9maWxlPlxyXG4gICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgICAgdmFyIGZhdm9yaXRlID0gZWxlbWVudChieS5iaW5kaW5nKCdteS5mYXZvcml0ZScpKTtcclxuXHJcbiAgICAgICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHRvIG1vZGVsJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICBleHBlY3QoZmF2b3JpdGUuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ3VuaWNvcm5zJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaXQoJ3Nob3VsZCBiaW5kIHRoZSB2YWx1ZXMgdG8gdGhlIGlucHV0cycsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgZWxlbWVudC5hbGwoYnkubW9kZWwoJ215LmZhdm9yaXRlJykpLmdldCgwKS5jbGljaygpO1xyXG4gICAgICAgICAgZXhwZWN0KGZhdm9yaXRlLmdldFRleHQoKSkudG9Db250YWluKCdwaXp6YScpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICA8L2ZpbGU+XHJcbiAgICA8L2V4YW1wbGU+XHJcbiAqL1xyXG52YXIgbmdWYWx1ZURpcmVjdGl2ZSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiB7XHJcbiAgICByZXN0cmljdDogJ0EnLFxyXG4gICAgcHJpb3JpdHk6IDEwMCxcclxuICAgIGNvbXBpbGU6IGZ1bmN0aW9uKHRwbCwgdHBsQXR0cikge1xyXG4gICAgICBpZiAoQ09OU1RBTlRfVkFMVUVfUkVHRVhQLnRlc3QodHBsQXR0ci5uZ1ZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBuZ1ZhbHVlQ29uc3RhbnRMaW5rKHNjb3BlLCBlbG0sIGF0dHIpIHtcclxuICAgICAgICAgIGF0dHIuJHNldCgndmFsdWUnLCBzY29wZS4kZXZhbChhdHRyLm5nVmFsdWUpKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBuZ1ZhbHVlTGluayhzY29wZSwgZWxtLCBhdHRyKSB7XHJcbiAgICAgICAgICBzY29wZS4kd2F0Y2goYXR0ci5uZ1ZhbHVlLCBmdW5jdGlvbiB2YWx1ZVdhdGNoQWN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGF0dHIuJHNldCgndmFsdWUnLCB2YWx1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIG5nTW9kZWxPcHRpb25zXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBBbGxvd3MgdHVuaW5nIGhvdyBtb2RlbCB1cGRhdGVzIGFyZSBkb25lLiBVc2luZyBgbmdNb2RlbE9wdGlvbnNgIHlvdSBjYW4gc3BlY2lmeSBhIGN1c3RvbSBsaXN0IG9mXHJcbiAqIGV2ZW50cyB0aGF0IHdpbGwgdHJpZ2dlciBhIG1vZGVsIHVwZGF0ZSBhbmQvb3IgYSBkZWJvdW5jaW5nIGRlbGF5IHNvIHRoYXQgdGhlIGFjdHVhbCB1cGRhdGUgb25seVxyXG4gKiB0YWtlcyBwbGFjZSB3aGVuIGEgdGltZXIgZXhwaXJlczsgdGhpcyB0aW1lciB3aWxsIGJlIHJlc2V0IGFmdGVyIGFub3RoZXIgY2hhbmdlIHRha2VzIHBsYWNlLlxyXG4gKlxyXG4gKiBHaXZlbiB0aGUgbmF0dXJlIG9mIGBuZ01vZGVsT3B0aW9uc2AsIHRoZSB2YWx1ZSBkaXNwbGF5ZWQgaW5zaWRlIGlucHV0IGZpZWxkcyBpbiB0aGUgdmlldyBtaWdodFxyXG4gKiBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgdmFsdWUgaW4gdGhlIGFjdHVhbCBtb2RlbC4gVGhpcyBtZWFucyB0aGF0IGlmIHlvdSB1cGRhdGUgdGhlIG1vZGVsIHlvdVxyXG4gKiBzaG91bGQgYWxzbyBpbnZva2Uge0BsaW5rIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIgYCRyb2xsYmFja1ZpZXdWYWx1ZWB9IG9uIHRoZSByZWxldmFudCBpbnB1dCBmaWVsZCBpblxyXG4gKiBvcmRlciB0byBtYWtlIHN1cmUgaXQgaXMgc3luY2hyb25pemVkIHdpdGggdGhlIG1vZGVsIGFuZCB0aGF0IGFueSBkZWJvdW5jZWQgYWN0aW9uIGlzIGNhbmNlbGVkLlxyXG4gKlxyXG4gKiBUaGUgZWFzaWVzdCB3YXkgdG8gcmVmZXJlbmNlIHRoZSBjb250cm9sJ3Mge0BsaW5rIG5nTW9kZWwuTmdNb2RlbENvbnRyb2xsZXIgYCRyb2xsYmFja1ZpZXdWYWx1ZWB9XHJcbiAqIG1ldGhvZCBpcyBieSBtYWtpbmcgc3VyZSB0aGUgaW5wdXQgaXMgcGxhY2VkIGluc2lkZSBhIGZvcm0gdGhhdCBoYXMgYSBgbmFtZWAgYXR0cmlidXRlLiBUaGlzIGlzXHJcbiAqIGltcG9ydGFudCBiZWNhdXNlIGBmb3JtYCBjb250cm9sbGVycyBhcmUgcHVibGlzaGVkIHRvIHRoZSByZWxhdGVkIHNjb3BlIHVuZGVyIHRoZSBuYW1lIGluIHRoZWlyXHJcbiAqIGBuYW1lYCBhdHRyaWJ1dGUuXHJcbiAqXHJcbiAqIEFueSBwZW5kaW5nIGNoYW5nZXMgd2lsbCB0YWtlIHBsYWNlIGltbWVkaWF0ZWx5IHdoZW4gYW4gZW5jbG9zaW5nIGZvcm0gaXMgc3VibWl0dGVkIHZpYSB0aGVcclxuICogYHN1Ym1pdGAgZXZlbnQuIE5vdGUgdGhhdCBgbmdDbGlja2AgZXZlbnRzIHdpbGwgb2NjdXIgYmVmb3JlIHRoZSBtb2RlbCBpcyB1cGRhdGVkLiBVc2UgYG5nU3VibWl0YFxyXG4gKiB0byBoYXZlIGFjY2VzcyB0byB0aGUgdXBkYXRlZCBtb2RlbC5cclxuICpcclxuICogYG5nTW9kZWxPcHRpb25zYCBoYXMgYW4gZWZmZWN0IG9uIHRoZSBlbGVtZW50IGl0J3MgZGVjbGFyZWQgb24gYW5kIGl0cyBkZXNjZW5kYW50cy5cclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IG5nTW9kZWxPcHRpb25zIG9wdGlvbnMgdG8gYXBwbHkgdG8gdGhlIGN1cnJlbnQgbW9kZWwuIFZhbGlkIGtleXMgYXJlOlxyXG4gKiAgIC0gYHVwZGF0ZU9uYDogc3RyaW5nIHNwZWNpZnlpbmcgd2hpY2ggZXZlbnQgc2hvdWxkIHRoZSBpbnB1dCBiZSBib3VuZCB0by4gWW91IGNhbiBzZXQgc2V2ZXJhbFxyXG4gKiAgICAgZXZlbnRzIHVzaW5nIGFuIHNwYWNlIGRlbGltaXRlZCBsaXN0LiBUaGVyZSBpcyBhIHNwZWNpYWwgZXZlbnQgY2FsbGVkIGBkZWZhdWx0YCB0aGF0XHJcbiAqICAgICBtYXRjaGVzIHRoZSBkZWZhdWx0IGV2ZW50cyBiZWxvbmdpbmcgb2YgdGhlIGNvbnRyb2wuXHJcbiAqICAgLSBgZGVib3VuY2VgOiBpbnRlZ2VyIHZhbHVlIHdoaWNoIGNvbnRhaW5zIHRoZSBkZWJvdW5jZSBtb2RlbCB1cGRhdGUgdmFsdWUgaW4gbWlsbGlzZWNvbmRzLiBBXHJcbiAqICAgICB2YWx1ZSBvZiAwIHRyaWdnZXJzIGFuIGltbWVkaWF0ZSB1cGRhdGUuIElmIGFuIG9iamVjdCBpcyBzdXBwbGllZCBpbnN0ZWFkLCB5b3UgY2FuIHNwZWNpZnkgYVxyXG4gKiAgICAgY3VzdG9tIHZhbHVlIGZvciBlYWNoIGV2ZW50LiBGb3IgZXhhbXBsZTpcclxuICogICAgIGBuZy1tb2RlbC1vcHRpb25zPVwieyB1cGRhdGVPbjogJ2RlZmF1bHQgYmx1cicsIGRlYm91bmNlOiB7J2RlZmF1bHQnOiA1MDAsICdibHVyJzogMH0gfVwiYFxyXG4gKiAgIC0gYGFsbG93SW52YWxpZGA6IGJvb2xlYW4gdmFsdWUgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIG1vZGVsIGNhbiBiZSBzZXQgd2l0aCB2YWx1ZXMgdGhhdCBkaWRcclxuICogICAgIG5vdCB2YWxpZGF0ZSBjb3JyZWN0bHkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBzZXR0aW5nIHRoZSBtb2RlbCB0byB1bmRlZmluZWQuXHJcbiAqICAgLSBgZ2V0dGVyU2V0dGVyYDogYm9vbGVhbiB2YWx1ZSB3aGljaCBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRvIHRyZWF0IGZ1bmN0aW9ucyBib3VuZCB0b1xyXG4gICAgICAgYG5nTW9kZWxgIGFzIGdldHRlcnMvc2V0dGVycy5cclxuICogICAtIGB0aW1lem9uZWA6IERlZmluZXMgdGhlIHRpbWV6b25lIHRvIGJlIHVzZWQgdG8gcmVhZC93cml0ZSB0aGUgYERhdGVgIGluc3RhbmNlIGluIHRoZSBtb2RlbCBmb3JcclxuICogICAgIGA8aW5wdXQgdHlwZT1cImRhdGVcIj5gLCBgPGlucHV0IHR5cGU9XCJ0aW1lXCI+YCwgLi4uIC4gUmlnaHQgbm93LCB0aGUgb25seSBzdXBwb3J0ZWQgdmFsdWUgaXMgYCdVVEMnYCxcclxuICogICAgIG90aGVyd2lzZSB0aGUgZGVmYXVsdCB0aW1lem9uZSBvZiB0aGUgYnJvd3NlciB3aWxsIGJlIHVzZWQuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcblxyXG4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gb3ZlcnJpZGUgaW1tZWRpYXRlIHVwZGF0ZXMuIENoYW5nZXMgb24gdGhlIGlucHV0cyB3aXRoaW4gdGhlXHJcbiAgZm9ybSB3aWxsIHVwZGF0ZSB0aGUgbW9kZWwgb25seSB3aGVuIHRoZSBjb250cm9sIGxvc2VzIGZvY3VzIChibHVyIGV2ZW50KS4gSWYgYGVzY2FwZWAga2V5IGlzXHJcbiAgcHJlc3NlZCB3aGlsZSB0aGUgaW5wdXQgZmllbGQgaXMgZm9jdXNlZCwgdGhlIHZhbHVlIGlzIHJlc2V0IHRvIHRoZSB2YWx1ZSBpbiB0aGUgY3VycmVudCBtb2RlbC5cclxuXHJcbiAgPGV4YW1wbGUgbmFtZT1cIm5nTW9kZWxPcHRpb25zLWRpcmVjdGl2ZS1ibHVyXCIgbW9kdWxlPVwib3B0aW9uc0V4YW1wbGVcIj5cclxuICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XHJcbiAgICAgICAgPGZvcm0gbmFtZT1cInVzZXJGb3JtXCI+XHJcbiAgICAgICAgICBOYW1lOlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInVzZXJOYW1lXCJcclxuICAgICAgICAgICAgICAgICBuZy1tb2RlbD1cInVzZXIubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgbmctbW9kZWwtb3B0aW9ucz1cInsgdXBkYXRlT246ICdibHVyJyB9XCJcclxuICAgICAgICAgICAgICAgICBuZy1rZXl1cD1cImNhbmNlbCgkZXZlbnQpXCIgLz48YnIgLz5cclxuXHJcbiAgICAgICAgICBPdGhlciBkYXRhOlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmctbW9kZWw9XCJ1c2VyLmRhdGFcIiAvPjxiciAvPlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8cHJlPnVzZXIubmFtZSA9IDxzcGFuIG5nLWJpbmQ9XCJ1c2VyLm5hbWVcIj48L3NwYW4+PC9wcmU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9maWxlPlxyXG4gICAgPGZpbGUgbmFtZT1cImFwcC5qc1wiPlxyXG4gICAgICBhbmd1bGFyLm1vZHVsZSgnb3B0aW9uc0V4YW1wbGUnLCBbXSlcclxuICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xyXG4gICAgICAgICAgJHNjb3BlLnVzZXIgPSB7IG5hbWU6ICdzYXknLCBkYXRhOiAnJyB9O1xyXG5cclxuICAgICAgICAgICRzY29wZS5jYW5jZWwgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMjcpIHtcclxuICAgICAgICAgICAgICAkc2NvcGUudXNlckZvcm0udXNlck5hbWUuJHJvbGxiYWNrVmlld1ZhbHVlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfV0pO1xyXG4gICAgPC9maWxlPlxyXG4gICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICB2YXIgbW9kZWwgPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ3VzZXIubmFtZScpKTtcclxuICAgICAgdmFyIGlucHV0ID0gZWxlbWVudChieS5tb2RlbCgndXNlci5uYW1lJykpO1xyXG4gICAgICB2YXIgb3RoZXIgPSBlbGVtZW50KGJ5Lm1vZGVsKCd1c2VyLmRhdGEnKSk7XHJcblxyXG4gICAgICBpdCgnc2hvdWxkIGFsbG93IGN1c3RvbSBldmVudHMnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBpbnB1dC5zZW5kS2V5cygnIGhlbGxvJyk7XHJcbiAgICAgICAgaW5wdXQuY2xpY2soKTtcclxuICAgICAgICBleHBlY3QobW9kZWwuZ2V0VGV4dCgpKS50b0VxdWFsKCdzYXknKTtcclxuICAgICAgICBvdGhlci5jbGljaygpO1xyXG4gICAgICAgIGV4cGVjdChtb2RlbC5nZXRUZXh0KCkpLnRvRXF1YWwoJ3NheSBoZWxsbycpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGl0KCdzaG91bGQgJHJvbGxiYWNrVmlld1ZhbHVlIHdoZW4gbW9kZWwgY2hhbmdlcycsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlucHV0LnNlbmRLZXlzKCcgaGVsbG8nKTtcclxuICAgICAgICBleHBlY3QoaW5wdXQuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKS50b0VxdWFsKCdzYXkgaGVsbG8nKTtcclxuICAgICAgICBpbnB1dC5zZW5kS2V5cyhwcm90cmFjdG9yLktleS5FU0NBUEUpO1xyXG4gICAgICAgIGV4cGVjdChpbnB1dC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpLnRvRXF1YWwoJ3NheScpO1xyXG4gICAgICAgIG90aGVyLmNsaWNrKCk7XHJcbiAgICAgICAgZXhwZWN0KG1vZGVsLmdldFRleHQoKSkudG9FcXVhbCgnc2F5Jyk7XHJcbiAgICAgIH0pO1xyXG4gICAgPC9maWxlPlxyXG4gIDwvZXhhbXBsZT5cclxuXHJcbiAgVGhpcyBvbmUgc2hvd3MgaG93IHRvIGRlYm91bmNlIG1vZGVsIGNoYW5nZXMuIE1vZGVsIHdpbGwgYmUgdXBkYXRlZCBvbmx5IDEgc2VjIGFmdGVyIGxhc3QgY2hhbmdlLlxyXG4gIElmIHRoZSBgQ2xlYXJgIGJ1dHRvbiBpcyBwcmVzc2VkLCBhbnkgZGVib3VuY2VkIGFjdGlvbiBpcyBjYW5jZWxlZCBhbmQgdGhlIHZhbHVlIGJlY29tZXMgZW1wdHkuXHJcblxyXG4gIDxleGFtcGxlIG5hbWU9XCJuZ01vZGVsT3B0aW9ucy1kaXJlY3RpdmUtZGVib3VuY2VcIiBtb2R1bGU9XCJvcHRpb25zRXhhbXBsZVwiPlxyXG4gICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cclxuICAgICAgICA8Zm9ybSBuYW1lPVwidXNlckZvcm1cIj5cclxuICAgICAgICAgIE5hbWU6XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwidXNlck5hbWVcIlxyXG4gICAgICAgICAgICAgICAgIG5nLW1vZGVsPVwidXNlci5uYW1lXCJcclxuICAgICAgICAgICAgICAgICBuZy1tb2RlbC1vcHRpb25zPVwieyBkZWJvdW5jZTogMTAwMCB9XCIgLz5cclxuICAgICAgICAgIDxidXR0b24gbmctY2xpY2s9XCJ1c2VyRm9ybS51c2VyTmFtZS4kcm9sbGJhY2tWaWV3VmFsdWUoKTsgdXNlci5uYW1lPScnXCI+Q2xlYXI8L2J1dHRvbj48YnIgLz5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgPHByZT51c2VyLm5hbWUgPSA8c3BhbiBuZy1iaW5kPVwidXNlci5uYW1lXCI+PC9zcGFuPjwvcHJlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZmlsZT5cclxuICAgIDxmaWxlIG5hbWU9XCJhcHAuanNcIj5cclxuICAgICAgYW5ndWxhci5tb2R1bGUoJ29wdGlvbnNFeGFtcGxlJywgW10pXHJcbiAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcclxuICAgICAgICAgICRzY29wZS51c2VyID0geyBuYW1lOiAnc2F5JyB9O1xyXG4gICAgICAgIH1dKTtcclxuICAgIDwvZmlsZT5cclxuICA8L2V4YW1wbGU+XHJcblxyXG4gIFRoaXMgb25lIHNob3dzIGhvdyB0byBiaW5kIHRvIGdldHRlci9zZXR0ZXJzOlxyXG5cclxuICA8ZXhhbXBsZSBuYW1lPVwibmdNb2RlbE9wdGlvbnMtZGlyZWN0aXZlLWdldHRlci1zZXR0ZXJcIiBtb2R1bGU9XCJnZXR0ZXJTZXR0ZXJFeGFtcGxlXCI+XHJcbiAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxyXG4gICAgICAgIDxmb3JtIG5hbWU9XCJ1c2VyRm9ybVwiPlxyXG4gICAgICAgICAgTmFtZTpcclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJ1c2VyTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgbmctbW9kZWw9XCJ1c2VyLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgIG5nLW1vZGVsLW9wdGlvbnM9XCJ7IGdldHRlclNldHRlcjogdHJ1ZSB9XCIgLz5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgPHByZT51c2VyLm5hbWUgPSA8c3BhbiBuZy1iaW5kPVwidXNlci5uYW1lKClcIj48L3NwYW4+PC9wcmU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9maWxlPlxyXG4gICAgPGZpbGUgbmFtZT1cImFwcC5qc1wiPlxyXG4gICAgICBhbmd1bGFyLm1vZHVsZSgnZ2V0dGVyU2V0dGVyRXhhbXBsZScsIFtdKVxyXG4gICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAgICAgICAgICB2YXIgX25hbWUgPSAnQnJpYW4nO1xyXG4gICAgICAgICAgJHNjb3BlLnVzZXIgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGZ1bmN0aW9uKG5ld05hbWUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gYW5ndWxhci5pc0RlZmluZWQobmV3TmFtZSkgPyAoX25hbWUgPSBuZXdOYW1lKSA6IF9uYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1dKTtcclxuICAgIDwvZmlsZT5cclxuICA8L2V4YW1wbGU+XHJcbiAqL1xyXG52YXIgbmdNb2RlbE9wdGlvbnNEaXJlY3RpdmUgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgIGNvbnRyb2xsZXI6IFsnJHNjb3BlJywgJyRhdHRycycsIGZ1bmN0aW9uKCRzY29wZSwgJGF0dHJzKSB7XHJcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcclxuICAgICAgdGhpcy4kb3B0aW9ucyA9ICRzY29wZS4kZXZhbCgkYXR0cnMubmdNb2RlbE9wdGlvbnMpO1xyXG4gICAgICAvLyBBbGxvdyBhZGRpbmcvb3ZlcnJpZGluZyBib3VuZCBldmVudHNcclxuICAgICAgaWYgKHRoaXMuJG9wdGlvbnMudXBkYXRlT24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuJG9wdGlvbnMudXBkYXRlT25EZWZhdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgLy8gZXh0cmFjdCBcImRlZmF1bHRcIiBwc2V1ZG8tZXZlbnQgZnJvbSBsaXN0IG9mIGV2ZW50cyB0aGF0IGNhbiB0cmlnZ2VyIGEgbW9kZWwgdXBkYXRlXHJcbiAgICAgICAgdGhpcy4kb3B0aW9ucy51cGRhdGVPbiA9IHRyaW0odGhpcy4kb3B0aW9ucy51cGRhdGVPbi5yZXBsYWNlKERFRkFVTFRfUkVHRVhQLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHRoYXQuJG9wdGlvbnMudXBkYXRlT25EZWZhdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiAnICc7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuJG9wdGlvbnMudXBkYXRlT25EZWZhdWx0ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfV1cclxuICB9O1xyXG59O1xyXG5cclxuLy8gaGVscGVyIG1ldGhvZHNcclxuZnVuY3Rpb24gYWRkU2V0VmFsaWRpdHlNZXRob2QoY29udGV4dCkge1xyXG4gIHZhciBjdHJsID0gY29udGV4dC5jdHJsLFxyXG4gICAgICAkZWxlbWVudCA9IGNvbnRleHQuJGVsZW1lbnQsXHJcbiAgICAgIGNsYXNzQ2FjaGUgPSB7fSxcclxuICAgICAgc2V0ID0gY29udGV4dC5zZXQsXHJcbiAgICAgIHVuc2V0ID0gY29udGV4dC51bnNldCxcclxuICAgICAgcGFyZW50Rm9ybSA9IGNvbnRleHQucGFyZW50Rm9ybSxcclxuICAgICAgJGFuaW1hdGUgPSBjb250ZXh0LiRhbmltYXRlO1xyXG5cclxuICBjbGFzc0NhY2hlW0lOVkFMSURfQ0xBU1NdID0gIShjbGFzc0NhY2hlW1ZBTElEX0NMQVNTXSA9ICRlbGVtZW50Lmhhc0NsYXNzKFZBTElEX0NMQVNTKSk7XHJcblxyXG4gIGN0cmwuJHNldFZhbGlkaXR5ID0gc2V0VmFsaWRpdHk7XHJcblxyXG4gIGZ1bmN0aW9uIHNldFZhbGlkaXR5KHZhbGlkYXRpb25FcnJvcktleSwgc3RhdGUsIG9wdGlvbnMpIHtcclxuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNyZWF0ZUFuZFNldCgnJHBlbmRpbmcnLCB2YWxpZGF0aW9uRXJyb3JLZXksIG9wdGlvbnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdW5zZXRBbmRDbGVhbnVwKCckcGVuZGluZycsIHZhbGlkYXRpb25FcnJvcktleSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQm9vbGVhbihzdGF0ZSkpIHtcclxuICAgICAgdW5zZXQoY3RybC4kZXJyb3IsIHZhbGlkYXRpb25FcnJvcktleSwgb3B0aW9ucyk7XHJcbiAgICAgIHVuc2V0KGN0cmwuJCRzdWNjZXNzLCB2YWxpZGF0aW9uRXJyb3JLZXksIG9wdGlvbnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgdW5zZXQoY3RybC4kZXJyb3IsIHZhbGlkYXRpb25FcnJvcktleSwgb3B0aW9ucyk7XHJcbiAgICAgICAgc2V0KGN0cmwuJCRzdWNjZXNzLCB2YWxpZGF0aW9uRXJyb3JLZXksIG9wdGlvbnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNldChjdHJsLiRlcnJvciwgdmFsaWRhdGlvbkVycm9yS2V5LCBvcHRpb25zKTtcclxuICAgICAgICB1bnNldChjdHJsLiQkc3VjY2VzcywgdmFsaWRhdGlvbkVycm9yS2V5LCBvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGN0cmwuJHBlbmRpbmcpIHtcclxuICAgICAgY2FjaGVkVG9nZ2xlQ2xhc3MoUEVORElOR19DTEFTUywgdHJ1ZSk7XHJcbiAgICAgIGN0cmwuJHZhbGlkID0gY3RybC4kaW52YWxpZCA9IHVuZGVmaW5lZDtcclxuICAgICAgdG9nZ2xlVmFsaWRhdGlvbkNzcygnJywgbnVsbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjYWNoZWRUb2dnbGVDbGFzcyhQRU5ESU5HX0NMQVNTLCBmYWxzZSk7XHJcbiAgICAgIGN0cmwuJHZhbGlkID0gaXNPYmplY3RFbXB0eShjdHJsLiRlcnJvcik7XHJcbiAgICAgIGN0cmwuJGludmFsaWQgPSAhY3RybC4kdmFsaWQ7XHJcbiAgICAgIHRvZ2dsZVZhbGlkYXRpb25Dc3MoJycsIGN0cmwuJHZhbGlkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyByZS1yZWFkIHRoZSBzdGF0ZSBhcyB0aGUgc2V0L3Vuc2V0IG1ldGhvZHMgY291bGQgaGF2ZVxyXG4gICAgLy8gY29tYmluZWQgc3RhdGUgaW4gY3RybC4kZXJyb3JbdmFsaWRhdGlvbkVycm9yXSAodXNlZCBmb3IgZm9ybXMpLFxyXG4gICAgLy8gd2hlcmUgc2V0dGluZy91bnNldHRpbmcgb25seSBpbmNyZW1lbnRzL2RlY3JlbWVudHMgdGhlIHZhbHVlLFxyXG4gICAgLy8gYW5kIGRvZXMgbm90IHJlcGxhY2UgaXQuXHJcbiAgICB2YXIgY29tYmluZWRTdGF0ZTtcclxuICAgIGlmIChjdHJsLiRwZW5kaW5nICYmIGN0cmwuJHBlbmRpbmdbdmFsaWRhdGlvbkVycm9yS2V5XSkge1xyXG4gICAgICBjb21iaW5lZFN0YXRlID0gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIGlmIChjdHJsLiRlcnJvclt2YWxpZGF0aW9uRXJyb3JLZXldKSB7XHJcbiAgICAgIGNvbWJpbmVkU3RhdGUgPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoY3RybC4kJHN1Y2Nlc3NbdmFsaWRhdGlvbkVycm9yS2V5XSkge1xyXG4gICAgICBjb21iaW5lZFN0YXRlID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbWJpbmVkU3RhdGUgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdG9nZ2xlVmFsaWRhdGlvbkNzcyh2YWxpZGF0aW9uRXJyb3JLZXksIGNvbWJpbmVkU3RhdGUpO1xyXG4gICAgcGFyZW50Rm9ybS4kc2V0VmFsaWRpdHkodmFsaWRhdGlvbkVycm9yS2V5LCBjb21iaW5lZFN0YXRlLCBjdHJsKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNyZWF0ZUFuZFNldChuYW1lLCB2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgaWYgKCFjdHJsW25hbWVdKSB7XHJcbiAgICAgIGN0cmxbbmFtZV0gPSB7fTtcclxuICAgIH1cclxuICAgIHNldChjdHJsW25hbWVdLCB2YWx1ZSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1bnNldEFuZENsZWFudXAobmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcclxuICAgIGlmIChjdHJsW25hbWVdKSB7XHJcbiAgICAgIHVuc2V0KGN0cmxbbmFtZV0sIHZhbHVlLCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIGlmIChpc09iamVjdEVtcHR5KGN0cmxbbmFtZV0pKSB7XHJcbiAgICAgIGN0cmxbbmFtZV0gPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjYWNoZWRUb2dnbGVDbGFzcyhjbGFzc05hbWUsIHN3aXRjaFZhbHVlKSB7XHJcbiAgICBpZiAoc3dpdGNoVmFsdWUgJiYgIWNsYXNzQ2FjaGVbY2xhc3NOYW1lXSkge1xyXG4gICAgICAkYW5pbWF0ZS5hZGRDbGFzcygkZWxlbWVudCwgY2xhc3NOYW1lKTtcclxuICAgICAgY2xhc3NDYWNoZVtjbGFzc05hbWVdID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoIXN3aXRjaFZhbHVlICYmIGNsYXNzQ2FjaGVbY2xhc3NOYW1lXSkge1xyXG4gICAgICAkYW5pbWF0ZS5yZW1vdmVDbGFzcygkZWxlbWVudCwgY2xhc3NOYW1lKTtcclxuICAgICAgY2xhc3NDYWNoZVtjbGFzc05hbWVdID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB0b2dnbGVWYWxpZGF0aW9uQ3NzKHZhbGlkYXRpb25FcnJvcktleSwgaXNWYWxpZCkge1xyXG4gICAgdmFsaWRhdGlvbkVycm9yS2V5ID0gdmFsaWRhdGlvbkVycm9yS2V5ID8gJy0nICsgc25ha2VfY2FzZSh2YWxpZGF0aW9uRXJyb3JLZXksICctJykgOiAnJztcclxuXHJcbiAgICBjYWNoZWRUb2dnbGVDbGFzcyhWQUxJRF9DTEFTUyArIHZhbGlkYXRpb25FcnJvcktleSwgaXNWYWxpZCA9PT0gdHJ1ZSk7XHJcbiAgICBjYWNoZWRUb2dnbGVDbGFzcyhJTlZBTElEX0NMQVNTICsgdmFsaWRhdGlvbkVycm9yS2V5LCBpc1ZhbGlkID09PSBmYWxzZSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iaikge1xyXG4gIGlmIChvYmopIHtcclxuICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIG5nQmluZFxyXG4gKiBAcmVzdHJpY3QgQUNcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRoZSBgbmdCaW5kYCBhdHRyaWJ1dGUgdGVsbHMgQW5ndWxhciB0byByZXBsYWNlIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIHNwZWNpZmllZCBIVE1MIGVsZW1lbnRcclxuICogd2l0aCB0aGUgdmFsdWUgb2YgYSBnaXZlbiBleHByZXNzaW9uLCBhbmQgdG8gdXBkYXRlIHRoZSB0ZXh0IGNvbnRlbnQgd2hlbiB0aGUgdmFsdWUgb2YgdGhhdFxyXG4gKiBleHByZXNzaW9uIGNoYW5nZXMuXHJcbiAqXHJcbiAqIFR5cGljYWxseSwgeW91IGRvbid0IHVzZSBgbmdCaW5kYCBkaXJlY3RseSwgYnV0IGluc3RlYWQgeW91IHVzZSB0aGUgZG91YmxlIGN1cmx5IG1hcmt1cCBsaWtlXHJcbiAqIGB7eyBleHByZXNzaW9uIH19YCB3aGljaCBpcyBzaW1pbGFyIGJ1dCBsZXNzIHZlcmJvc2UuXHJcbiAqXHJcbiAqIEl0IGlzIHByZWZlcmFibGUgdG8gdXNlIGBuZ0JpbmRgIGluc3RlYWQgb2YgYHt7IGV4cHJlc3Npb24gfX1gIGlmIGEgdGVtcGxhdGUgaXMgbW9tZW50YXJpbHlcclxuICogZGlzcGxheWVkIGJ5IHRoZSBicm93c2VyIGluIGl0cyByYXcgc3RhdGUgYmVmb3JlIEFuZ3VsYXIgY29tcGlsZXMgaXQuIFNpbmNlIGBuZ0JpbmRgIGlzIGFuXHJcbiAqIGVsZW1lbnQgYXR0cmlidXRlLCBpdCBtYWtlcyB0aGUgYmluZGluZ3MgaW52aXNpYmxlIHRvIHRoZSB1c2VyIHdoaWxlIHRoZSBwYWdlIGlzIGxvYWRpbmcuXHJcbiAqXHJcbiAqIEFuIGFsdGVybmF0aXZlIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSB3b3VsZCBiZSB1c2luZyB0aGVcclxuICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0Nsb2FrIG5nQ2xvYWt9IGRpcmVjdGl2ZS5cclxuICpcclxuICpcclxuICogQGVsZW1lbnQgQU5ZXHJcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdCaW5kIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBFbnRlciBhIG5hbWUgaW4gdGhlIExpdmUgUHJldmlldyB0ZXh0IGJveDsgdGhlIGdyZWV0aW5nIGJlbG93IHRoZSB0ZXh0IGJveCBjaGFuZ2VzIGluc3RhbnRseS5cclxuICAgPGV4YW1wbGUgbW9kdWxlPVwiYmluZEV4YW1wbGVcIj5cclxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgPHNjcmlwdD5cclxuICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ2JpbmRFeGFtcGxlJywgW10pXHJcbiAgICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcclxuICAgICAgICAgICAgICRzY29wZS5uYW1lID0gJ1doaXJsZWQnO1xyXG4gICAgICAgICAgIH1dKTtcclxuICAgICAgIDwvc2NyaXB0PlxyXG4gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cclxuICAgICAgICAgRW50ZXIgbmFtZTogPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmctbW9kZWw9XCJuYW1lXCI+PGJyPlxyXG4gICAgICAgICBIZWxsbyA8c3BhbiBuZy1iaW5kPVwibmFtZVwiPjwvc3Bhbj4hXHJcbiAgICAgICA8L2Rpdj5cclxuICAgICA8L2ZpbGU+XHJcbiAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1iaW5kJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgIHZhciBuYW1lSW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCduYW1lJykpO1xyXG5cclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygnbmFtZScpKS5nZXRUZXh0KCkpLnRvQmUoJ1doaXJsZWQnKTtcclxuICAgICAgICAgbmFtZUlucHV0LmNsZWFyKCk7XHJcbiAgICAgICAgIG5hbWVJbnB1dC5zZW5kS2V5cygnd29ybGQnKTtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygnbmFtZScpKS5nZXRUZXh0KCkpLnRvQmUoJ3dvcmxkJyk7XHJcbiAgICAgICB9KTtcclxuICAgICA8L2ZpbGU+XHJcbiAgIDwvZXhhbXBsZT5cclxuICovXHJcbnZhciBuZ0JpbmREaXJlY3RpdmUgPSBbJyRjb21waWxlJywgZnVuY3Rpb24oJGNvbXBpbGUpIHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVzdHJpY3Q6ICdBQycsXHJcbiAgICBjb21waWxlOiBmdW5jdGlvbiBuZ0JpbmRDb21waWxlKHRlbXBsYXRlRWxlbWVudCkge1xyXG4gICAgICAkY29tcGlsZS4kJGFkZEJpbmRpbmdDbGFzcyh0ZW1wbGF0ZUVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gbmdCaW5kTGluayhzY29wZSwgZWxlbWVudCwgYXR0cikge1xyXG4gICAgICAgICRjb21waWxlLiQkYWRkQmluZGluZ0luZm8oZWxlbWVudCwgYXR0ci5uZ0JpbmQpO1xyXG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50WzBdO1xyXG4gICAgICAgIHNjb3BlLiR3YXRjaChhdHRyLm5nQmluZCwgZnVuY3Rpb24gbmdCaW5kV2F0Y2hBY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gJycgOiB2YWx1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9O1xyXG59XTtcclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBuZ0JpbmRUZW1wbGF0ZVxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogVGhlIGBuZ0JpbmRUZW1wbGF0ZWAgZGlyZWN0aXZlIHNwZWNpZmllcyB0aGF0IHRoZSBlbGVtZW50XHJcbiAqIHRleHQgY29udGVudCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCB0aGUgaW50ZXJwb2xhdGlvbiBvZiB0aGUgdGVtcGxhdGVcclxuICogaW4gdGhlIGBuZ0JpbmRUZW1wbGF0ZWAgYXR0cmlidXRlLlxyXG4gKiBVbmxpa2UgYG5nQmluZGAsIHRoZSBgbmdCaW5kVGVtcGxhdGVgIGNhbiBjb250YWluIG11bHRpcGxlIGB7e2AgYH19YFxyXG4gKiBleHByZXNzaW9ucy4gVGhpcyBkaXJlY3RpdmUgaXMgbmVlZGVkIHNpbmNlIHNvbWUgSFRNTCBlbGVtZW50c1xyXG4gKiAoc3VjaCBhcyBUSVRMRSBhbmQgT1BUSU9OKSBjYW5ub3QgY29udGFpbiBTUEFOIGVsZW1lbnRzLlxyXG4gKlxyXG4gKiBAZWxlbWVudCBBTllcclxuICogQHBhcmFtIHtzdHJpbmd9IG5nQmluZFRlbXBsYXRlIHRlbXBsYXRlIG9mIGZvcm1cclxuICogICA8dHQ+e3s8L3R0PiA8dHQ+ZXhwcmVzc2lvbjwvdHQ+IDx0dD59fTwvdHQ+IHRvIGV2YWwuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIFRyeSBpdCBoZXJlOiBlbnRlciB0ZXh0IGluIHRleHQgYm94IGFuZCB3YXRjaCB0aGUgZ3JlZXRpbmcgY2hhbmdlLlxyXG4gICA8ZXhhbXBsZSBtb2R1bGU9XCJiaW5kRXhhbXBsZVwiPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgICA8c2NyaXB0PlxyXG4gICAgICAgICBhbmd1bGFyLm1vZHVsZSgnYmluZEV4YW1wbGUnLCBbXSlcclxuICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xyXG4gICAgICAgICAgICAgJHNjb3BlLnNhbHV0YXRpb24gPSAnSGVsbG8nO1xyXG4gICAgICAgICAgICAgJHNjb3BlLm5hbWUgPSAnV29ybGQnO1xyXG4gICAgICAgICAgIH1dKTtcclxuICAgICAgIDwvc2NyaXB0PlxyXG4gICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cclxuICAgICAgICBTYWx1dGF0aW9uOiA8aW5wdXQgdHlwZT1cInRleHRcIiBuZy1tb2RlbD1cInNhbHV0YXRpb25cIj48YnI+XHJcbiAgICAgICAgTmFtZTogPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmctbW9kZWw9XCJuYW1lXCI+PGJyPlxyXG4gICAgICAgIDxwcmUgbmctYmluZC10ZW1wbGF0ZT1cInt7c2FsdXRhdGlvbn19IHt7bmFtZX19IVwiPjwvcHJlPlxyXG4gICAgICAgPC9kaXY+XHJcbiAgICAgPC9maWxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctYmluZCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICB2YXIgc2FsdXRhdGlvbkVsZW0gPSBlbGVtZW50KGJ5LmJpbmRpbmcoJ3NhbHV0YXRpb24nKSk7XHJcbiAgICAgICAgIHZhciBzYWx1dGF0aW9uSW5wdXQgPSBlbGVtZW50KGJ5Lm1vZGVsKCdzYWx1dGF0aW9uJykpO1xyXG4gICAgICAgICB2YXIgbmFtZUlucHV0ID0gZWxlbWVudChieS5tb2RlbCgnbmFtZScpKTtcclxuXHJcbiAgICAgICAgIGV4cGVjdChzYWx1dGF0aW9uRWxlbS5nZXRUZXh0KCkpLnRvQmUoJ0hlbGxvIFdvcmxkIScpO1xyXG5cclxuICAgICAgICAgc2FsdXRhdGlvbklucHV0LmNsZWFyKCk7XHJcbiAgICAgICAgIHNhbHV0YXRpb25JbnB1dC5zZW5kS2V5cygnR3JlZXRpbmdzJyk7XHJcbiAgICAgICAgIG5hbWVJbnB1dC5jbGVhcigpO1xyXG4gICAgICAgICBuYW1lSW5wdXQuc2VuZEtleXMoJ3VzZXInKTtcclxuXHJcbiAgICAgICAgIGV4cGVjdChzYWx1dGF0aW9uRWxlbS5nZXRUZXh0KCkpLnRvQmUoJ0dyZWV0aW5ncyB1c2VyIScpO1xyXG4gICAgICAgfSk7XHJcbiAgICAgPC9maWxlPlxyXG4gICA8L2V4YW1wbGU+XHJcbiAqL1xyXG52YXIgbmdCaW5kVGVtcGxhdGVEaXJlY3RpdmUgPSBbJyRpbnRlcnBvbGF0ZScsICckY29tcGlsZScsIGZ1bmN0aW9uKCRpbnRlcnBvbGF0ZSwgJGNvbXBpbGUpIHtcclxuICByZXR1cm4ge1xyXG4gICAgY29tcGlsZTogZnVuY3Rpb24gbmdCaW5kVGVtcGxhdGVDb21waWxlKHRlbXBsYXRlRWxlbWVudCkge1xyXG4gICAgICAkY29tcGlsZS4kJGFkZEJpbmRpbmdDbGFzcyh0ZW1wbGF0ZUVsZW1lbnQpO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gbmdCaW5kVGVtcGxhdGVMaW5rKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7XHJcbiAgICAgICAgdmFyIGludGVycG9sYXRlRm4gPSAkaW50ZXJwb2xhdGUoZWxlbWVudC5hdHRyKGF0dHIuJGF0dHIubmdCaW5kVGVtcGxhdGUpKTtcclxuICAgICAgICAkY29tcGlsZS4kJGFkZEJpbmRpbmdJbmZvKGVsZW1lbnQsIGludGVycG9sYXRlRm4uZXhwcmVzc2lvbnMpO1xyXG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50WzBdO1xyXG4gICAgICAgIGF0dHIuJG9ic2VydmUoJ25nQmluZFRlbXBsYXRlJywgZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gJycgOiB2YWx1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9O1xyXG59XTtcclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBuZ0JpbmRIdG1sXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBDcmVhdGVzIGEgYmluZGluZyB0aGF0IHdpbGwgaW5uZXJIVE1MIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyB0aGUgYGV4cHJlc3Npb25gIGludG8gdGhlIGN1cnJlbnRcclxuICogZWxlbWVudCBpbiBhIHNlY3VyZSB3YXkuICBCeSBkZWZhdWx0LCB0aGUgaW5uZXJIVE1MLWVkIGNvbnRlbnQgd2lsbCBiZSBzYW5pdGl6ZWQgdXNpbmcgdGhlIHtAbGlua1xyXG4gKiBuZ1Nhbml0aXplLiRzYW5pdGl6ZSAkc2FuaXRpemV9IHNlcnZpY2UuICBUbyB1dGlsaXplIHRoaXMgZnVuY3Rpb25hbGl0eSwgZW5zdXJlIHRoYXQgYCRzYW5pdGl6ZWBcclxuICogaXMgYXZhaWxhYmxlLCBmb3IgZXhhbXBsZSwgYnkgaW5jbHVkaW5nIHtAbGluayBuZ1Nhbml0aXplfSBpbiB5b3VyIG1vZHVsZSdzIGRlcGVuZGVuY2llcyAobm90IGluXHJcbiAqIGNvcmUgQW5ndWxhcikuIEluIG9yZGVyIHRvIHVzZSB7QGxpbmsgbmdTYW5pdGl6ZX0gaW4geW91ciBtb2R1bGUncyBkZXBlbmRlbmNpZXMsIHlvdSBuZWVkIHRvXHJcbiAqIGluY2x1ZGUgXCJhbmd1bGFyLXNhbml0aXplLmpzXCIgaW4geW91ciBhcHBsaWNhdGlvbi5cclxuICpcclxuICogWW91IG1heSBhbHNvIGJ5cGFzcyBzYW5pdGl6YXRpb24gZm9yIHZhbHVlcyB5b3Uga25vdyBhcmUgc2FmZS4gVG8gZG8gc28sIGJpbmQgdG9cclxuICogYW4gZXhwbGljaXRseSB0cnVzdGVkIHZhbHVlIHZpYSB7QGxpbmsgbmcuJHNjZSN0cnVzdEFzSHRtbCAkc2NlLnRydXN0QXNIdG1sfS4gIFNlZSB0aGUgZXhhbXBsZVxyXG4gKiB1bmRlciB7QGxpbmsgbmcuJHNjZSNzaG93LW1lLWFuLWV4YW1wbGUtdXNpbmctc2NlLSBTdHJpY3QgQ29udGV4dHVhbCBFc2NhcGluZyAoU0NFKX0uXHJcbiAqXHJcbiAqIE5vdGU6IElmIGEgYCRzYW5pdGl6ZWAgc2VydmljZSBpcyB1bmF2YWlsYWJsZSBhbmQgdGhlIGJvdW5kIHZhbHVlIGlzbid0IGV4cGxpY2l0bHkgdHJ1c3RlZCwgeW91XHJcbiAqIHdpbGwgaGF2ZSBhbiBleGNlcHRpb24gKGluc3RlYWQgb2YgYW4gZXhwbG9pdC4pXHJcbiAqXHJcbiAqIEBlbGVtZW50IEFOWVxyXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQmluZEh0bWwge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcblxyXG4gICA8ZXhhbXBsZSBtb2R1bGU9XCJiaW5kSHRtbEV4YW1wbGVcIiBkZXBzPVwiYW5ndWxhci1zYW5pdGl6ZS5qc1wiPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJFeGFtcGxlQ29udHJvbGxlclwiPlxyXG4gICAgICAgIDxwIG5nLWJpbmQtaHRtbD1cIm15SFRNTFwiPjwvcD5cclxuICAgICAgIDwvZGl2PlxyXG4gICAgIDwvZmlsZT5cclxuXHJcbiAgICAgPGZpbGUgbmFtZT1cInNjcmlwdC5qc1wiPlxyXG4gICAgICAgYW5ndWxhci5tb2R1bGUoJ2JpbmRIdG1sRXhhbXBsZScsIFsnbmdTYW5pdGl6ZSddKVxyXG4gICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xyXG4gICAgICAgICAgICRzY29wZS5teUhUTUwgPVxyXG4gICAgICAgICAgICAgICdJIGFtIGFuIDxjb2RlPkhUTUw8L2NvZGU+c3RyaW5nIHdpdGggJyArXHJcbiAgICAgICAgICAgICAgJzxhIGhyZWY9XCIjXCI+bGlua3MhPC9hPiBhbmQgb3RoZXIgPGVtPnN0dWZmPC9lbT4nO1xyXG4gICAgICAgICB9XSk7XHJcbiAgICAgPC9maWxlPlxyXG5cclxuICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLWJpbmQtaHRtbCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCdteUhUTUwnKSkuZ2V0VGV4dCgpKS50b0JlKFxyXG4gICAgICAgICAgICAgJ0kgYW0gYW4gSFRNTHN0cmluZyB3aXRoIGxpbmtzISBhbmQgb3RoZXIgc3R1ZmYnKTtcclxuICAgICAgIH0pO1xyXG4gICAgIDwvZmlsZT5cclxuICAgPC9leGFtcGxlPlxyXG4gKi9cclxudmFyIG5nQmluZEh0bWxEaXJlY3RpdmUgPSBbJyRzY2UnLCAnJHBhcnNlJywgJyRjb21waWxlJywgZnVuY3Rpb24oJHNjZSwgJHBhcnNlLCAkY29tcGlsZSkge1xyXG4gIHJldHVybiB7XHJcbiAgICByZXN0cmljdDogJ0EnLFxyXG4gICAgY29tcGlsZTogZnVuY3Rpb24gbmdCaW5kSHRtbENvbXBpbGUodEVsZW1lbnQsIHRBdHRycykge1xyXG4gICAgICB2YXIgbmdCaW5kSHRtbEdldHRlciA9ICRwYXJzZSh0QXR0cnMubmdCaW5kSHRtbCk7XHJcbiAgICAgIHZhciBuZ0JpbmRIdG1sV2F0Y2ggPSAkcGFyc2UodEF0dHJzLm5nQmluZEh0bWwsIGZ1bmN0aW9uIGdldFN0cmluZ1ZhbHVlKHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCAnJykudG9TdHJpbmcoKTtcclxuICAgICAgfSk7XHJcbiAgICAgICRjb21waWxlLiQkYWRkQmluZGluZ0NsYXNzKHRFbGVtZW50KTtcclxuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiBuZ0JpbmRIdG1sTGluayhzY29wZSwgZWxlbWVudCwgYXR0cikge1xyXG4gICAgICAgICRjb21waWxlLiQkYWRkQmluZGluZ0luZm8oZWxlbWVudCwgYXR0ci5uZ0JpbmRIdG1sKTtcclxuXHJcbiAgICAgICAgc2NvcGUuJHdhdGNoKG5nQmluZEh0bWxXYXRjaCwgZnVuY3Rpb24gbmdCaW5kSHRtbFdhdGNoQWN0aW9uKCkge1xyXG4gICAgICAgICAgLy8gd2UgcmUtZXZhbHVhdGUgdGhlIGV4cHIgYmVjYXVzZSB3ZSB3YW50IGEgVHJ1c3RlZFZhbHVlSG9sZGVyVHlwZVxyXG4gICAgICAgICAgLy8gZm9yICRzY2UsIG5vdCBhIHN0cmluZ1xyXG4gICAgICAgICAgZWxlbWVudC5odG1sKCRzY2UuZ2V0VHJ1c3RlZEh0bWwobmdCaW5kSHRtbEdldHRlcihzY29wZSkpIHx8ICcnKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9O1xyXG59XTtcclxuXHJcbmZ1bmN0aW9uIGNsYXNzRGlyZWN0aXZlKG5hbWUsIHNlbGVjdG9yKSB7XHJcbiAgbmFtZSA9ICduZ0NsYXNzJyArIG5hbWU7XHJcbiAgcmV0dXJuIFsnJGFuaW1hdGUnLCBmdW5jdGlvbigkYW5pbWF0ZSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdHJpY3Q6ICdBQycsXHJcbiAgICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7XHJcbiAgICAgICAgdmFyIG9sZFZhbDtcclxuXHJcbiAgICAgICAgc2NvcGUuJHdhdGNoKGF0dHJbbmFtZV0sIG5nQ2xhc3NXYXRjaEFjdGlvbiwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIGF0dHIuJG9ic2VydmUoJ2NsYXNzJywgZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgIG5nQ2xhc3NXYXRjaEFjdGlvbihzY29wZS4kZXZhbChhdHRyW25hbWVdKSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICBpZiAobmFtZSAhPT0gJ25nQ2xhc3MnKSB7XHJcbiAgICAgICAgICBzY29wZS4kd2F0Y2goJyRpbmRleCcsIGZ1bmN0aW9uKCRpbmRleCwgb2xkJGluZGV4KSB7XHJcbiAgICAgICAgICAgIC8vIGpzaGludCBiaXR3aXNlOiBmYWxzZVxyXG4gICAgICAgICAgICB2YXIgbW9kID0gJGluZGV4ICYgMTtcclxuICAgICAgICAgICAgaWYgKG1vZCAhPT0gKG9sZCRpbmRleCAmIDEpKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGNsYXNzZXMgPSBhcnJheUNsYXNzZXMoc2NvcGUuJGV2YWwoYXR0cltuYW1lXSkpO1xyXG4gICAgICAgICAgICAgIG1vZCA9PT0gc2VsZWN0b3IgP1xyXG4gICAgICAgICAgICAgICAgYWRkQ2xhc3NlcyhjbGFzc2VzKSA6XHJcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzc2VzKGNsYXNzZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGFkZENsYXNzZXMoY2xhc3Nlcykge1xyXG4gICAgICAgICAgdmFyIG5ld0NsYXNzZXMgPSBkaWdlc3RDbGFzc0NvdW50cyhjbGFzc2VzLCAxKTtcclxuICAgICAgICAgIGF0dHIuJGFkZENsYXNzKG5ld0NsYXNzZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlQ2xhc3NlcyhjbGFzc2VzKSB7XHJcbiAgICAgICAgICB2YXIgbmV3Q2xhc3NlcyA9IGRpZ2VzdENsYXNzQ291bnRzKGNsYXNzZXMsIC0xKTtcclxuICAgICAgICAgIGF0dHIuJHJlbW92ZUNsYXNzKG5ld0NsYXNzZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZGlnZXN0Q2xhc3NDb3VudHMoY2xhc3NlcywgY291bnQpIHtcclxuICAgICAgICAgIHZhciBjbGFzc0NvdW50cyA9IGVsZW1lbnQuZGF0YSgnJGNsYXNzQ291bnRzJykgfHwge307XHJcbiAgICAgICAgICB2YXIgY2xhc3Nlc1RvVXBkYXRlID0gW107XHJcbiAgICAgICAgICBmb3JFYWNoKGNsYXNzZXMsIGZ1bmN0aW9uKGNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICBpZiAoY291bnQgPiAwIHx8IGNsYXNzQ291bnRzW2NsYXNzTmFtZV0pIHtcclxuICAgICAgICAgICAgICBjbGFzc0NvdW50c1tjbGFzc05hbWVdID0gKGNsYXNzQ291bnRzW2NsYXNzTmFtZV0gfHwgMCkgKyBjb3VudDtcclxuICAgICAgICAgICAgICBpZiAoY2xhc3NDb3VudHNbY2xhc3NOYW1lXSA9PT0gKyhjb3VudCA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICBjbGFzc2VzVG9VcGRhdGUucHVzaChjbGFzc05hbWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBlbGVtZW50LmRhdGEoJyRjbGFzc0NvdW50cycsIGNsYXNzQ291bnRzKTtcclxuICAgICAgICAgIHJldHVybiBjbGFzc2VzVG9VcGRhdGUuam9pbignICcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlQ2xhc3NlcyhvbGRDbGFzc2VzLCBuZXdDbGFzc2VzKSB7XHJcbiAgICAgICAgICB2YXIgdG9BZGQgPSBhcnJheURpZmZlcmVuY2UobmV3Q2xhc3Nlcywgb2xkQ2xhc3Nlcyk7XHJcbiAgICAgICAgICB2YXIgdG9SZW1vdmUgPSBhcnJheURpZmZlcmVuY2Uob2xkQ2xhc3NlcywgbmV3Q2xhc3Nlcyk7XHJcbiAgICAgICAgICB0b0FkZCA9IGRpZ2VzdENsYXNzQ291bnRzKHRvQWRkLCAxKTtcclxuICAgICAgICAgIHRvUmVtb3ZlID0gZGlnZXN0Q2xhc3NDb3VudHModG9SZW1vdmUsIC0xKTtcclxuICAgICAgICAgIGlmICh0b0FkZCAmJiB0b0FkZC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgJGFuaW1hdGUuYWRkQ2xhc3MoZWxlbWVudCwgdG9BZGQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRvUmVtb3ZlICYmIHRvUmVtb3ZlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAkYW5pbWF0ZS5yZW1vdmVDbGFzcyhlbGVtZW50LCB0b1JlbW92ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBuZ0NsYXNzV2F0Y2hBY3Rpb24obmV3VmFsKSB7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0b3IgPT09IHRydWUgfHwgc2NvcGUuJGluZGV4ICUgMiA9PT0gc2VsZWN0b3IpIHtcclxuICAgICAgICAgICAgdmFyIG5ld0NsYXNzZXMgPSBhcnJheUNsYXNzZXMobmV3VmFsIHx8IFtdKTtcclxuICAgICAgICAgICAgaWYgKCFvbGRWYWwpIHtcclxuICAgICAgICAgICAgICBhZGRDbGFzc2VzKG5ld0NsYXNzZXMpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFlcXVhbHMobmV3VmFsLG9sZFZhbCkpIHtcclxuICAgICAgICAgICAgICB2YXIgb2xkQ2xhc3NlcyA9IGFycmF5Q2xhc3NlcyhvbGRWYWwpO1xyXG4gICAgICAgICAgICAgIHVwZGF0ZUNsYXNzZXMob2xkQ2xhc3NlcywgbmV3Q2xhc3Nlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9sZFZhbCA9IHNoYWxsb3dDb3B5KG5ld1ZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGFycmF5RGlmZmVyZW5jZSh0b2tlbnMxLCB0b2tlbnMyKSB7XHJcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcclxuXHJcbiAgICAgIG91dGVyOlxyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2VuczEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnMxW2ldO1xyXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdG9rZW5zMi5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgaWYgKHRva2VuID09IHRva2VuczJbal0pIGNvbnRpbnVlIG91dGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YWx1ZXMucHVzaCh0b2tlbik7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBhcnJheUNsYXNzZXMoY2xhc3NWYWwpIHtcclxuICAgICAgaWYgKGlzQXJyYXkoY2xhc3NWYWwpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsYXNzVmFsO1xyXG4gICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGNsYXNzVmFsKSkge1xyXG4gICAgICAgIHJldHVybiBjbGFzc1ZhbC5zcGxpdCgnICcpO1xyXG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGNsYXNzVmFsKSkge1xyXG4gICAgICAgIHZhciBjbGFzc2VzID0gW107XHJcbiAgICAgICAgZm9yRWFjaChjbGFzc1ZhbCwgZnVuY3Rpb24odiwgaykge1xyXG4gICAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuY29uY2F0KGsuc3BsaXQoJyAnKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNsYXNzZXM7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNsYXNzVmFsO1xyXG4gICAgfVxyXG4gIH1dO1xyXG59XHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBuZ0NsYXNzXHJcbiAqIEByZXN0cmljdCBBQ1xyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogVGhlIGBuZ0NsYXNzYCBkaXJlY3RpdmUgYWxsb3dzIHlvdSB0byBkeW5hbWljYWxseSBzZXQgQ1NTIGNsYXNzZXMgb24gYW4gSFRNTCBlbGVtZW50IGJ5IGRhdGFiaW5kaW5nXHJcbiAqIGFuIGV4cHJlc3Npb24gdGhhdCByZXByZXNlbnRzIGFsbCBjbGFzc2VzIHRvIGJlIGFkZGVkLlxyXG4gKlxyXG4gKiBUaGUgZGlyZWN0aXZlIG9wZXJhdGVzIGluIHRocmVlIGRpZmZlcmVudCB3YXlzLCBkZXBlbmRpbmcgb24gd2hpY2ggb2YgdGhyZWUgdHlwZXMgdGhlIGV4cHJlc3Npb25cclxuICogZXZhbHVhdGVzIHRvOlxyXG4gKlxyXG4gKiAxLiBJZiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSBzdHJpbmcsIHRoZSBzdHJpbmcgc2hvdWxkIGJlIG9uZSBvciBtb3JlIHNwYWNlLWRlbGltaXRlZCBjbGFzc1xyXG4gKiBuYW1lcy5cclxuICpcclxuICogMi4gSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGFuIGFycmF5LCBlYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IHNob3VsZCBiZSBhIHN0cmluZyB0aGF0IGlzXHJcbiAqIG9uZSBvciBtb3JlIHNwYWNlLWRlbGltaXRlZCBjbGFzcyBuYW1lcy5cclxuICpcclxuICogMy4gSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGFuIG9iamVjdCwgdGhlbiBmb3IgZWFjaCBrZXktdmFsdWUgcGFpciBvZiB0aGVcclxuICogb2JqZWN0IHdpdGggYSB0cnV0aHkgdmFsdWUgdGhlIGNvcnJlc3BvbmRpbmcga2V5IGlzIHVzZWQgYXMgYSBjbGFzcyBuYW1lLlxyXG4gKlxyXG4gKiBUaGUgZGlyZWN0aXZlIHdvbid0IGFkZCBkdXBsaWNhdGUgY2xhc3NlcyBpZiBhIHBhcnRpY3VsYXIgY2xhc3Mgd2FzIGFscmVhZHkgc2V0LlxyXG4gKlxyXG4gKiBXaGVuIHRoZSBleHByZXNzaW9uIGNoYW5nZXMsIHRoZSBwcmV2aW91c2x5IGFkZGVkIGNsYXNzZXMgYXJlIHJlbW92ZWQgYW5kIG9ubHkgdGhlbiB0aGVcclxuICogbmV3IGNsYXNzZXMgYXJlIGFkZGVkLlxyXG4gKlxyXG4gKiBAYW5pbWF0aW9uc1xyXG4gKiBhZGQgLSBoYXBwZW5zIGp1c3QgYmVmb3JlIHRoZSBjbGFzcyBpcyBhcHBsaWVkIHRvIHRoZSBlbGVtZW50XHJcbiAqIHJlbW92ZSAtIGhhcHBlbnMganVzdCBiZWZvcmUgdGhlIGNsYXNzIGlzIHJlbW92ZWQgZnJvbSB0aGUgZWxlbWVudFxyXG4gKlxyXG4gKiBAZWxlbWVudCBBTllcclxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0NsYXNzIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWwuIFRoZSByZXN1bHRcclxuICogICBvZiB0aGUgZXZhbHVhdGlvbiBjYW4gYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHNwYWNlIGRlbGltaXRlZCBjbGFzc1xyXG4gKiAgIG5hbWVzLCBhbiBhcnJheSwgb3IgYSBtYXAgb2YgY2xhc3MgbmFtZXMgdG8gYm9vbGVhbiB2YWx1ZXMuIEluIHRoZSBjYXNlIG9mIGEgbWFwLCB0aGVcclxuICogICBuYW1lcyBvZiB0aGUgcHJvcGVydGllcyB3aG9zZSB2YWx1ZXMgYXJlIHRydXRoeSB3aWxsIGJlIGFkZGVkIGFzIGNzcyBjbGFzc2VzIHRvIHRoZVxyXG4gKiAgIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBleGFtcGxlIEV4YW1wbGUgdGhhdCBkZW1vbnN0cmF0ZXMgYmFzaWMgYmluZGluZ3MgdmlhIG5nQ2xhc3MgZGlyZWN0aXZlLlxyXG4gICA8ZXhhbXBsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgPHAgbmctY2xhc3M9XCJ7c3RyaWtlOiBkZWxldGVkLCBib2xkOiBpbXBvcnRhbnQsIHJlZDogZXJyb3J9XCI+TWFwIFN5bnRheCBFeGFtcGxlPC9wPlxyXG4gICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5nLW1vZGVsPVwiZGVsZXRlZFwiPiBkZWxldGVkIChhcHBseSBcInN0cmlrZVwiIGNsYXNzKTxicj5cclxuICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuZy1tb2RlbD1cImltcG9ydGFudFwiPiBpbXBvcnRhbnQgKGFwcGx5IFwiYm9sZFwiIGNsYXNzKTxicj5cclxuICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuZy1tb2RlbD1cImVycm9yXCI+IGVycm9yIChhcHBseSBcInJlZFwiIGNsYXNzKVxyXG4gICAgICAgPGhyPlxyXG4gICAgICAgPHAgbmctY2xhc3M9XCJzdHlsZVwiPlVzaW5nIFN0cmluZyBTeW50YXg8L3A+XHJcbiAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuZy1tb2RlbD1cInN0eWxlXCIgcGxhY2Vob2xkZXI9XCJUeXBlOiBib2xkIHN0cmlrZSByZWRcIj5cclxuICAgICAgIDxocj5cclxuICAgICAgIDxwIG5nLWNsYXNzPVwiW3N0eWxlMSwgc3R5bGUyLCBzdHlsZTNdXCI+VXNpbmcgQXJyYXkgU3ludGF4PC9wPlxyXG4gICAgICAgPGlucHV0IG5nLW1vZGVsPVwic3R5bGUxXCIgcGxhY2Vob2xkZXI9XCJUeXBlOiBib2xkLCBzdHJpa2Ugb3IgcmVkXCI+PGJyPlxyXG4gICAgICAgPGlucHV0IG5nLW1vZGVsPVwic3R5bGUyXCIgcGxhY2Vob2xkZXI9XCJUeXBlOiBib2xkLCBzdHJpa2Ugb3IgcmVkXCI+PGJyPlxyXG4gICAgICAgPGlucHV0IG5nLW1vZGVsPVwic3R5bGUzXCIgcGxhY2Vob2xkZXI9XCJUeXBlOiBib2xkLCBzdHJpa2Ugb3IgcmVkXCI+PGJyPlxyXG4gICAgIDwvZmlsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwic3R5bGUuY3NzXCI+XHJcbiAgICAgICAuc3RyaWtlIHtcclxuICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XHJcbiAgICAgICB9XHJcbiAgICAgICAuYm9sZCB7XHJcbiAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICAgICB9XHJcbiAgICAgICAucmVkIHtcclxuICAgICAgICAgICBjb2xvcjogcmVkO1xyXG4gICAgICAgfVxyXG4gICAgIDwvZmlsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgICB2YXIgcHMgPSBlbGVtZW50LmFsbChieS5jc3MoJ3AnKSk7XHJcblxyXG4gICAgICAgaXQoJ3Nob3VsZCBsZXQgeW91IHRvZ2dsZSB0aGUgY2xhc3MnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgIGV4cGVjdChwcy5maXJzdCgpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkubm90LnRvTWF0Y2goL2JvbGQvKTtcclxuICAgICAgICAgZXhwZWN0KHBzLmZpcnN0KCkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS5ub3QudG9NYXRjaCgvcmVkLyk7XHJcblxyXG4gICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdpbXBvcnRhbnQnKSkuY2xpY2soKTtcclxuICAgICAgICAgZXhwZWN0KHBzLmZpcnN0KCkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS50b01hdGNoKC9ib2xkLyk7XHJcblxyXG4gICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdlcnJvcicpKS5jbGljaygpO1xyXG4gICAgICAgICBleHBlY3QocHMuZmlyc3QoKS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykpLnRvTWF0Y2goL3JlZC8pO1xyXG4gICAgICAgfSk7XHJcblxyXG4gICAgICAgaXQoJ3Nob3VsZCBsZXQgeW91IHRvZ2dsZSBzdHJpbmcgZXhhbXBsZScsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICBleHBlY3QocHMuZ2V0KDEpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkudG9CZSgnJyk7XHJcbiAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3N0eWxlJykpLmNsZWFyKCk7XHJcbiAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3N0eWxlJykpLnNlbmRLZXlzKCdyZWQnKTtcclxuICAgICAgICAgZXhwZWN0KHBzLmdldCgxKS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykpLnRvQmUoJ3JlZCcpO1xyXG4gICAgICAgfSk7XHJcblxyXG4gICAgICAgaXQoJ2FycmF5IGV4YW1wbGUgc2hvdWxkIGhhdmUgMyBjbGFzc2VzJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgIGV4cGVjdChwcy5sYXN0KCkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS50b0JlKCcnKTtcclxuICAgICAgICAgZWxlbWVudChieS5tb2RlbCgnc3R5bGUxJykpLnNlbmRLZXlzKCdib2xkJyk7XHJcbiAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3N0eWxlMicpKS5zZW5kS2V5cygnc3RyaWtlJyk7XHJcbiAgICAgICAgIGVsZW1lbnQoYnkubW9kZWwoJ3N0eWxlMycpKS5zZW5kS2V5cygncmVkJyk7XHJcbiAgICAgICAgIGV4cGVjdChwcy5sYXN0KCkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS50b0JlKCdib2xkIHN0cmlrZSByZWQnKTtcclxuICAgICAgIH0pO1xyXG4gICAgIDwvZmlsZT5cclxuICAgPC9leGFtcGxlPlxyXG5cclxuICAgIyMgQW5pbWF0aW9uc1xyXG5cclxuICAgVGhlIGV4YW1wbGUgYmVsb3cgZGVtb25zdHJhdGVzIGhvdyB0byBwZXJmb3JtIGFuaW1hdGlvbnMgdXNpbmcgbmdDbGFzcy5cclxuXHJcbiAgIDxleGFtcGxlIG1vZHVsZT1cIm5nQW5pbWF0ZVwiIGRlcHM9XCJhbmd1bGFyLWFuaW1hdGUuanNcIiBhbmltYXRpb25zPVwidHJ1ZVwiPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgIDxpbnB1dCBpZD1cInNldGJ0blwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cInNldFwiIG5nLWNsaWNrPVwibXlWYXI9J215LWNsYXNzJ1wiPlxyXG4gICAgICA8aW5wdXQgaWQ9XCJjbGVhcmJ0blwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cImNsZWFyXCIgbmctY2xpY2s9XCJteVZhcj0nJ1wiPlxyXG4gICAgICA8YnI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiYmFzZS1jbGFzc1wiIG5nLWNsYXNzPVwibXlWYXJcIj5TYW1wbGUgVGV4dDwvc3Bhbj5cclxuICAgICA8L2ZpbGU+XHJcbiAgICAgPGZpbGUgbmFtZT1cInN0eWxlLmNzc1wiPlxyXG4gICAgICAgLmJhc2UtY2xhc3Mge1xyXG4gICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246YWxsIGN1YmljLWJlemllcigwLjI1MCwgMC40NjAsIDAuNDUwLCAwLjk0MCkgMC41cztcclxuICAgICAgICAgdHJhbnNpdGlvbjphbGwgY3ViaWMtYmV6aWVyKDAuMjUwLCAwLjQ2MCwgMC40NTAsIDAuOTQwKSAwLjVzO1xyXG4gICAgICAgfVxyXG5cclxuICAgICAgIC5iYXNlLWNsYXNzLm15LWNsYXNzIHtcclxuICAgICAgICAgY29sb3I6IHJlZDtcclxuICAgICAgICAgZm9udC1zaXplOjNlbTtcclxuICAgICAgIH1cclxuICAgICA8L2ZpbGU+XHJcbiAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1jbGFzcycsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5jc3MoJy5iYXNlLWNsYXNzJykpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkubm90LlxyXG4gICAgICAgICAgIHRvTWF0Y2goL215LWNsYXNzLyk7XHJcblxyXG4gICAgICAgICBlbGVtZW50KGJ5LmlkKCdzZXRidG4nKSkuY2xpY2soKTtcclxuXHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnLmJhc2UtY2xhc3MnKSkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS5cclxuICAgICAgICAgICB0b01hdGNoKC9teS1jbGFzcy8pO1xyXG5cclxuICAgICAgICAgZWxlbWVudChieS5pZCgnY2xlYXJidG4nKSkuY2xpY2soKTtcclxuXHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmNzcygnLmJhc2UtY2xhc3MnKSkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS5ub3QuXHJcbiAgICAgICAgICAgdG9NYXRjaCgvbXktY2xhc3MvKTtcclxuICAgICAgIH0pO1xyXG4gICAgIDwvZmlsZT5cclxuICAgPC9leGFtcGxlPlxyXG5cclxuXHJcbiAgICMjIG5nQ2xhc3MgYW5kIHByZS1leGlzdGluZyBDU1MzIFRyYW5zaXRpb25zL0FuaW1hdGlvbnNcclxuICAgVGhlIG5nQ2xhc3MgZGlyZWN0aXZlIHN0aWxsIHN1cHBvcnRzIENTUzMgVHJhbnNpdGlvbnMvQW5pbWF0aW9ucyBldmVuIGlmIHRoZXkgZG8gbm90IGZvbGxvdyB0aGUgbmdBbmltYXRlIENTUyBuYW1pbmcgc3RydWN0dXJlLlxyXG4gICBVcG9uIGFuaW1hdGlvbiBuZ0FuaW1hdGUgd2lsbCBhcHBseSBzdXBwbGVtZW50YXJ5IENTUyBjbGFzc2VzIHRvIHRyYWNrIHRoZSBzdGFydCBhbmQgZW5kIG9mIGFuIGFuaW1hdGlvbiwgYnV0IHRoaXMgd2lsbCBub3QgaGluZGVyXHJcbiAgIGFueSBwcmUtZXhpc3RpbmcgQ1NTIHRyYW5zaXRpb25zIGFscmVhZHkgb24gdGhlIGVsZW1lbnQuIFRvIGdldCBhbiBpZGVhIG9mIHdoYXQgaGFwcGVucyBkdXJpbmcgYSBjbGFzcy1iYXNlZCBhbmltYXRpb24sIGJlIHN1cmVcclxuICAgdG8gdmlldyB0aGUgc3RlcCBieSBzdGVwIGRldGFpbHMgb2Yge0BsaW5rIG5nLiRhbmltYXRlI2FkZENsYXNzICRhbmltYXRlLmFkZENsYXNzfSBhbmRcclxuICAge0BsaW5rIG5nLiRhbmltYXRlI3JlbW92ZUNsYXNzICRhbmltYXRlLnJlbW92ZUNsYXNzfS5cclxuICovXHJcbnZhciBuZ0NsYXNzRGlyZWN0aXZlID0gY2xhc3NEaXJlY3RpdmUoJycsIHRydWUpO1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdDbGFzc09kZFxyXG4gKiBAcmVzdHJpY3QgQUNcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRoZSBgbmdDbGFzc09kZGAgYW5kIGBuZ0NsYXNzRXZlbmAgZGlyZWN0aXZlcyB3b3JrIGV4YWN0bHkgYXNcclxuICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NsYXNzIG5nQ2xhc3N9LCBleGNlcHQgdGhleSB3b3JrIGluXHJcbiAqIGNvbmp1bmN0aW9uIHdpdGggYG5nUmVwZWF0YCBhbmQgdGFrZSBlZmZlY3Qgb25seSBvbiBvZGQgKGV2ZW4pIHJvd3MuXHJcbiAqXHJcbiAqIFRoaXMgZGlyZWN0aXZlIGNhbiBiZSBhcHBsaWVkIG9ubHkgd2l0aGluIHRoZSBzY29wZSBvZiBhblxyXG4gKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nUmVwZWF0IG5nUmVwZWF0fS5cclxuICpcclxuICogQGVsZW1lbnQgQU5ZXHJcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdDbGFzc09kZCB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsLiBUaGUgcmVzdWx0XHJcbiAqICAgb2YgdGhlIGV2YWx1YXRpb24gY2FuIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBzcGFjZSBkZWxpbWl0ZWQgY2xhc3MgbmFtZXMgb3IgYW4gYXJyYXkuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgIDxleGFtcGxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgICAgPG9sIG5nLWluaXQ9XCJuYW1lcz1bJ0pvaG4nLCAnTWFyeScsICdDYXRlJywgJ1N1eiddXCI+XHJcbiAgICAgICAgICA8bGkgbmctcmVwZWF0PVwibmFtZSBpbiBuYW1lc1wiPlxyXG4gICAgICAgICAgIDxzcGFuIG5nLWNsYXNzLW9kZD1cIidvZGQnXCIgbmctY2xhc3MtZXZlbj1cIidldmVuJ1wiPlxyXG4gICAgICAgICAgICAge3tuYW1lfX1cclxuICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvb2w+XHJcbiAgICAgPC9maWxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJzdHlsZS5jc3NcIj5cclxuICAgICAgIC5vZGQge1xyXG4gICAgICAgICBjb2xvcjogcmVkO1xyXG4gICAgICAgfVxyXG4gICAgICAgLmV2ZW4ge1xyXG4gICAgICAgICBjb2xvcjogYmx1ZTtcclxuICAgICAgIH1cclxuICAgICA8L2ZpbGU+XHJcbiAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1jbGFzcy1vZGQgYW5kIG5nLWNsYXNzLWV2ZW4nLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkucmVwZWF0ZXIoJ25hbWUgaW4gbmFtZXMnKS5yb3coMCkuY29sdW1uKCduYW1lJykpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkuXHJcbiAgICAgICAgICAgdG9NYXRjaCgvb2RkLyk7XHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LnJlcGVhdGVyKCduYW1lIGluIG5hbWVzJykucm93KDEpLmNvbHVtbignbmFtZScpKS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykpLlxyXG4gICAgICAgICAgIHRvTWF0Y2goL2V2ZW4vKTtcclxuICAgICAgIH0pO1xyXG4gICAgIDwvZmlsZT5cclxuICAgPC9leGFtcGxlPlxyXG4gKi9cclxudmFyIG5nQ2xhc3NPZGREaXJlY3RpdmUgPSBjbGFzc0RpcmVjdGl2ZSgnT2RkJywgMCk7XHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBuZ0NsYXNzRXZlblxyXG4gKiBAcmVzdHJpY3QgQUNcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRoZSBgbmdDbGFzc09kZGAgYW5kIGBuZ0NsYXNzRXZlbmAgZGlyZWN0aXZlcyB3b3JrIGV4YWN0bHkgYXNcclxuICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NsYXNzIG5nQ2xhc3N9LCBleGNlcHQgdGhleSB3b3JrIGluXHJcbiAqIGNvbmp1bmN0aW9uIHdpdGggYG5nUmVwZWF0YCBhbmQgdGFrZSBlZmZlY3Qgb25seSBvbiBvZGQgKGV2ZW4pIHJvd3MuXHJcbiAqXHJcbiAqIFRoaXMgZGlyZWN0aXZlIGNhbiBiZSBhcHBsaWVkIG9ubHkgd2l0aGluIHRoZSBzY29wZSBvZiBhblxyXG4gKiB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nUmVwZWF0IG5nUmVwZWF0fS5cclxuICpcclxuICogQGVsZW1lbnQgQU5ZXHJcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdDbGFzc0V2ZW4ge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbC4gVGhlXHJcbiAqICAgcmVzdWx0IG9mIHRoZSBldmFsdWF0aW9uIGNhbiBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgc3BhY2UgZGVsaW1pdGVkIGNsYXNzIG5hbWVzIG9yIGFuIGFycmF5LlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICA8ZXhhbXBsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgIDxvbCBuZy1pbml0PVwibmFtZXM9WydKb2huJywgJ01hcnknLCAnQ2F0ZScsICdTdXonXVwiPlxyXG4gICAgICAgICAgPGxpIG5nLXJlcGVhdD1cIm5hbWUgaW4gbmFtZXNcIj5cclxuICAgICAgICAgICA8c3BhbiBuZy1jbGFzcy1vZGQ9XCInb2RkJ1wiIG5nLWNsYXNzLWV2ZW49XCInZXZlbidcIj5cclxuICAgICAgICAgICAgIHt7bmFtZX19ICZuYnNwOyAmbmJzcDsgJm5ic3A7XHJcbiAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L29sPlxyXG4gICAgIDwvZmlsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwic3R5bGUuY3NzXCI+XHJcbiAgICAgICAub2RkIHtcclxuICAgICAgICAgY29sb3I6IHJlZDtcclxuICAgICAgIH1cclxuICAgICAgIC5ldmVuIHtcclxuICAgICAgICAgY29sb3I6IGJsdWU7XHJcbiAgICAgICB9XHJcbiAgICAgPC9maWxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctY2xhc3Mtb2RkIGFuZCBuZy1jbGFzcy1ldmVuJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LnJlcGVhdGVyKCduYW1lIGluIG5hbWVzJykucm93KDApLmNvbHVtbignbmFtZScpKS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykpLlxyXG4gICAgICAgICAgIHRvTWF0Y2goL29kZC8pO1xyXG4gICAgICAgICBleHBlY3QoZWxlbWVudChieS5yZXBlYXRlcignbmFtZSBpbiBuYW1lcycpLnJvdygxKS5jb2x1bW4oJ25hbWUnKSkuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS5cclxuICAgICAgICAgICB0b01hdGNoKC9ldmVuLyk7XHJcbiAgICAgICB9KTtcclxuICAgICA8L2ZpbGU+XHJcbiAgIDwvZXhhbXBsZT5cclxuICovXHJcbnZhciBuZ0NsYXNzRXZlbkRpcmVjdGl2ZSA9IGNsYXNzRGlyZWN0aXZlKCdFdmVuJywgMSk7XHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBuZ0Nsb2FrXHJcbiAqIEByZXN0cmljdCBBQ1xyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogVGhlIGBuZ0Nsb2FrYCBkaXJlY3RpdmUgaXMgdXNlZCB0byBwcmV2ZW50IHRoZSBBbmd1bGFyIGh0bWwgdGVtcGxhdGUgZnJvbSBiZWluZyBicmllZmx5XHJcbiAqIGRpc3BsYXllZCBieSB0aGUgYnJvd3NlciBpbiBpdHMgcmF3ICh1bmNvbXBpbGVkKSBmb3JtIHdoaWxlIHlvdXIgYXBwbGljYXRpb24gaXMgbG9hZGluZy4gVXNlIHRoaXNcclxuICogZGlyZWN0aXZlIHRvIGF2b2lkIHRoZSB1bmRlc2lyYWJsZSBmbGlja2VyIGVmZmVjdCBjYXVzZWQgYnkgdGhlIGh0bWwgdGVtcGxhdGUgZGlzcGxheS5cclxuICpcclxuICogVGhlIGRpcmVjdGl2ZSBjYW4gYmUgYXBwbGllZCB0byB0aGUgYDxib2R5PmAgZWxlbWVudCwgYnV0IHRoZSBwcmVmZXJyZWQgdXNhZ2UgaXMgdG8gYXBwbHlcclxuICogbXVsdGlwbGUgYG5nQ2xvYWtgIGRpcmVjdGl2ZXMgdG8gc21hbGwgcG9ydGlvbnMgb2YgdGhlIHBhZ2UgdG8gcGVybWl0IHByb2dyZXNzaXZlIHJlbmRlcmluZ1xyXG4gKiBvZiB0aGUgYnJvd3NlciB2aWV3LlxyXG4gKlxyXG4gKiBgbmdDbG9ha2Agd29ya3MgaW4gY29vcGVyYXRpb24gd2l0aCB0aGUgZm9sbG93aW5nIGNzcyBydWxlIGVtYmVkZGVkIHdpdGhpbiBgYW5ndWxhci5qc2AgYW5kXHJcbiAqIGBhbmd1bGFyLm1pbi5qc2AuXHJcbiAqIEZvciBDU1AgbW9kZSBwbGVhc2UgYWRkIGBhbmd1bGFyLWNzcC5jc3NgIHRvIHlvdXIgaHRtbCBmaWxlIChzZWUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NzcCBuZ0NzcH0pLlxyXG4gKlxyXG4gKiBgYGBjc3NcclxuICogW25nXFw6Y2xvYWtdLCBbbmctY2xvYWtdLCBbZGF0YS1uZy1jbG9ha10sIFt4LW5nLWNsb2FrXSwgLm5nLWNsb2FrLCAueC1uZy1jbG9hayB7XHJcbiAqICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBXaGVuIHRoaXMgY3NzIHJ1bGUgaXMgbG9hZGVkIGJ5IHRoZSBicm93c2VyLCBhbGwgaHRtbCBlbGVtZW50cyAoaW5jbHVkaW5nIHRoZWlyIGNoaWxkcmVuKSB0aGF0XHJcbiAqIGFyZSB0YWdnZWQgd2l0aCB0aGUgYG5nQ2xvYWtgIGRpcmVjdGl2ZSBhcmUgaGlkZGVuLiBXaGVuIEFuZ3VsYXIgZW5jb3VudGVycyB0aGlzIGRpcmVjdGl2ZVxyXG4gKiBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSB0ZW1wbGF0ZSBpdCBkZWxldGVzIHRoZSBgbmdDbG9ha2AgZWxlbWVudCBhdHRyaWJ1dGUsIG1ha2luZ1xyXG4gKiB0aGUgY29tcGlsZWQgZWxlbWVudCB2aXNpYmxlLlxyXG4gKlxyXG4gKiBGb3IgdGhlIGJlc3QgcmVzdWx0LCB0aGUgYGFuZ3VsYXIuanNgIHNjcmlwdCBtdXN0IGJlIGxvYWRlZCBpbiB0aGUgaGVhZCBzZWN0aW9uIG9mIHRoZSBodG1sXHJcbiAqIGRvY3VtZW50OyBhbHRlcm5hdGl2ZWx5LCB0aGUgY3NzIHJ1bGUgYWJvdmUgbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgZXh0ZXJuYWwgc3R5bGVzaGVldCBvZiB0aGVcclxuICogYXBwbGljYXRpb24uXHJcbiAqXHJcbiAqIExlZ2FjeSBicm93c2VycywgbGlrZSBJRTcsIGRvIG5vdCBwcm92aWRlIGF0dHJpYnV0ZSBzZWxlY3RvciBzdXBwb3J0IChhZGRlZCBpbiBDU1MgMi4xKSBzbyB0aGV5XHJcbiAqIGNhbm5vdCBtYXRjaCB0aGUgYFtuZ1xcOmNsb2FrXWAgc2VsZWN0b3IuIFRvIHdvcmsgYXJvdW5kIHRoaXMgbGltaXRhdGlvbiwgeW91IG11c3QgYWRkIHRoZSBjc3NcclxuICogY2xhc3MgYG5nLWNsb2FrYCBpbiBhZGRpdGlvbiB0byB0aGUgYG5nQ2xvYWtgIGRpcmVjdGl2ZSBhcyBzaG93biBpbiB0aGUgZXhhbXBsZSBiZWxvdy5cclxuICpcclxuICogQGVsZW1lbnQgQU5ZXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgIDxleGFtcGxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgICAgPGRpdiBpZD1cInRlbXBsYXRlMVwiIG5nLWNsb2FrPnt7ICdoZWxsbycgfX08L2Rpdj5cclxuICAgICAgICA8ZGl2IGlkPVwidGVtcGxhdGUyXCIgbmctY2xvYWsgY2xhc3M9XCJuZy1jbG9ha1wiPnt7ICdoZWxsbyBJRTcnIH19PC9kaXY+XHJcbiAgICAgPC9maWxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgIGl0KCdzaG91bGQgcmVtb3ZlIHRoZSB0ZW1wbGF0ZSBkaXJlY3RpdmUgYW5kIGNzcyBjbGFzcycsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICBleHBlY3QoJCgnI3RlbXBsYXRlMScpLmdldEF0dHJpYnV0ZSgnbmctY2xvYWsnKSkuXHJcbiAgICAgICAgICAgdG9CZU51bGwoKTtcclxuICAgICAgICAgZXhwZWN0KCQoJyN0ZW1wbGF0ZTInKS5nZXRBdHRyaWJ1dGUoJ25nLWNsb2FrJykpLlxyXG4gICAgICAgICAgIHRvQmVOdWxsKCk7XHJcbiAgICAgICB9KTtcclxuICAgICA8L2ZpbGU+XHJcbiAgIDwvZXhhbXBsZT5cclxuICpcclxuICovXHJcbnZhciBuZ0Nsb2FrRGlyZWN0aXZlID0gbmdEaXJlY3RpdmUoe1xyXG4gIGNvbXBpbGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHIpIHtcclxuICAgIGF0dHIuJHNldCgnbmdDbG9haycsIHVuZGVmaW5lZCk7XHJcbiAgICBlbGVtZW50LnJlbW92ZUNsYXNzKCduZy1jbG9haycpO1xyXG4gIH1cclxufSk7XHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBuZ0NvbnRyb2xsZXJcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRoZSBgbmdDb250cm9sbGVyYCBkaXJlY3RpdmUgYXR0YWNoZXMgYSBjb250cm9sbGVyIGNsYXNzIHRvIHRoZSB2aWV3LiBUaGlzIGlzIGEga2V5IGFzcGVjdCBvZiBob3cgYW5ndWxhclxyXG4gKiBzdXBwb3J0cyB0aGUgcHJpbmNpcGxlcyBiZWhpbmQgdGhlIE1vZGVsLVZpZXctQ29udHJvbGxlciBkZXNpZ24gcGF0dGVybi5cclxuICpcclxuICogTVZDIGNvbXBvbmVudHMgaW4gYW5ndWxhcjpcclxuICpcclxuICogKiBNb2RlbCDigJQgTW9kZWxzIGFyZSB0aGUgcHJvcGVydGllcyBvZiBhIHNjb3BlOyBzY29wZXMgYXJlIGF0dGFjaGVkIHRvIHRoZSBET00gd2hlcmUgc2NvcGUgcHJvcGVydGllc1xyXG4gKiAgIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIGJpbmRpbmdzLlxyXG4gKiAqIFZpZXcg4oCUIFRoZSB0ZW1wbGF0ZSAoSFRNTCB3aXRoIGRhdGEgYmluZGluZ3MpIHRoYXQgaXMgcmVuZGVyZWQgaW50byB0aGUgVmlldy5cclxuICogKiBDb250cm9sbGVyIOKAlCBUaGUgYG5nQ29udHJvbGxlcmAgZGlyZWN0aXZlIHNwZWNpZmllcyBhIENvbnRyb2xsZXIgY2xhc3M7IHRoZSBjbGFzcyBjb250YWlucyBidXNpbmVzc1xyXG4gKiAgIGxvZ2ljIGJlaGluZCB0aGUgYXBwbGljYXRpb24gdG8gZGVjb3JhdGUgdGhlIHNjb3BlIHdpdGggZnVuY3Rpb25zIGFuZCB2YWx1ZXNcclxuICpcclxuICogTm90ZSB0aGF0IHlvdSBjYW4gYWxzbyBhdHRhY2ggY29udHJvbGxlcnMgdG8gdGhlIERPTSBieSBkZWNsYXJpbmcgaXQgaW4gYSByb3V0ZSBkZWZpbml0aW9uXHJcbiAqIHZpYSB0aGUge0BsaW5rIG5nUm91dGUuJHJvdXRlICRyb3V0ZX0gc2VydmljZS4gQSBjb21tb24gbWlzdGFrZSBpcyB0byBkZWNsYXJlIHRoZSBjb250cm9sbGVyXHJcbiAqIGFnYWluIHVzaW5nIGBuZy1jb250cm9sbGVyYCBpbiB0aGUgdGVtcGxhdGUgaXRzZWxmLiAgVGhpcyB3aWxsIGNhdXNlIHRoZSBjb250cm9sbGVyIHRvIGJlIGF0dGFjaGVkXHJcbiAqIGFuZCBleGVjdXRlZCB0d2ljZS5cclxuICpcclxuICogQGVsZW1lbnQgQU5ZXHJcbiAqIEBzY29wZVxyXG4gKiBAcHJpb3JpdHkgNTAwXHJcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdDb250cm9sbGVyIE5hbWUgb2YgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiByZWdpc3RlcmVkIHdpdGggdGhlIGN1cnJlbnRcclxuICoge0BsaW5rIG5nLiRjb250cm9sbGVyUHJvdmlkZXIgJGNvbnRyb2xsZXJQcm92aWRlcn0gb3IgYW4ge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn1cclxuICogdGhhdCBvbiB0aGUgY3VycmVudCBzY29wZSBldmFsdWF0ZXMgdG8gYSBjb25zdHJ1Y3RvciBmdW5jdGlvbi5cclxuICpcclxuICogVGhlIGNvbnRyb2xsZXIgaW5zdGFuY2UgY2FuIGJlIHB1Ymxpc2hlZCBpbnRvIGEgc2NvcGUgcHJvcGVydHkgYnkgc3BlY2lmeWluZ1xyXG4gKiBgbmctY29udHJvbGxlcj1cImFzIHByb3BlcnR5TmFtZVwiYC5cclxuICpcclxuICogSWYgdGhlIGN1cnJlbnQgYCRjb250cm9sbGVyUHJvdmlkZXJgIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGdsb2JhbHMgKHZpYVxyXG4gKiB7QGxpbmsgbmcuJGNvbnRyb2xsZXJQcm92aWRlciNhbGxvd0dsb2JhbHMgYCRjb250cm9sbGVyUHJvdmlkZXIuYWxsb3dHbG9iYWxzKClgIH0pLCB0aGlzIG1heVxyXG4gKiBhbHNvIGJlIHRoZSBuYW1lIG9mIGEgZ2xvYmFsbHkgYWNjZXNzaWJsZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiAobm90IHJlY29tbWVuZGVkKS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogSGVyZSBpcyBhIHNpbXBsZSBmb3JtIGZvciBlZGl0aW5nIHVzZXIgY29udGFjdCBpbmZvcm1hdGlvbi4gQWRkaW5nLCByZW1vdmluZywgY2xlYXJpbmcsIGFuZFxyXG4gKiBncmVldGluZyBhcmUgbWV0aG9kcyBkZWNsYXJlZCBvbiB0aGUgY29udHJvbGxlciAoc2VlIHNvdXJjZSB0YWIpLiBUaGVzZSBtZXRob2RzIGNhblxyXG4gKiBlYXNpbHkgYmUgY2FsbGVkIGZyb20gdGhlIGFuZ3VsYXIgbWFya3VwLiBBbnkgY2hhbmdlcyB0byB0aGUgZGF0YSBhcmUgYXV0b21hdGljYWxseSByZWZsZWN0ZWRcclxuICogaW4gdGhlIFZpZXcgd2l0aG91dCB0aGUgbmVlZCBmb3IgYSBtYW51YWwgdXBkYXRlLlxyXG4gKlxyXG4gKiBUd28gZGlmZmVyZW50IGRlY2xhcmF0aW9uIHN0eWxlcyBhcmUgaW5jbHVkZWQgYmVsb3c6XHJcbiAqXHJcbiAqICogb25lIGJpbmRzIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgZGlyZWN0bHkgb250byB0aGUgY29udHJvbGxlciB1c2luZyBgdGhpc2A6XHJcbiAqIGBuZy1jb250cm9sbGVyPVwiU2V0dGluZ3NDb250cm9sbGVyMSBhcyBzZXR0aW5nc1wiYFxyXG4gKiAqIG9uZSBpbmplY3RzIGAkc2NvcGVgIGludG8gdGhlIGNvbnRyb2xsZXI6XHJcbiAqIGBuZy1jb250cm9sbGVyPVwiU2V0dGluZ3NDb250cm9sbGVyMlwiYFxyXG4gKlxyXG4gKiBUaGUgc2Vjb25kIG9wdGlvbiBpcyBtb3JlIGNvbW1vbiBpbiB0aGUgQW5ndWxhciBjb21tdW5pdHksIGFuZCBpcyBnZW5lcmFsbHkgdXNlZCBpbiBib2lsZXJwbGF0ZXNcclxuICogYW5kIGluIHRoaXMgZ3VpZGUuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhZHZhbnRhZ2VzIHRvIGJpbmRpbmcgcHJvcGVydGllcyBkaXJlY3RseSB0byB0aGUgY29udHJvbGxlclxyXG4gKiBhbmQgYXZvaWRpbmcgc2NvcGUuXHJcbiAqXHJcbiAqICogVXNpbmcgYGNvbnRyb2xsZXIgYXNgIG1ha2VzIGl0IG9idmlvdXMgd2hpY2ggY29udHJvbGxlciB5b3UgYXJlIGFjY2Vzc2luZyBpbiB0aGUgdGVtcGxhdGUgd2hlblxyXG4gKiBtdWx0aXBsZSBjb250cm9sbGVycyBhcHBseSB0byBhbiBlbGVtZW50LlxyXG4gKiAqIElmIHlvdSBhcmUgd3JpdGluZyB5b3VyIGNvbnRyb2xsZXJzIGFzIGNsYXNzZXMgeW91IGhhdmUgZWFzaWVyIGFjY2VzcyB0byB0aGUgcHJvcGVydGllcyBhbmRcclxuICogbWV0aG9kcywgd2hpY2ggd2lsbCBhcHBlYXIgb24gdGhlIHNjb3BlLCBmcm9tIGluc2lkZSB0aGUgY29udHJvbGxlciBjb2RlLlxyXG4gKiAqIFNpbmNlIHRoZXJlIGlzIGFsd2F5cyBhIGAuYCBpbiB0aGUgYmluZGluZ3MsIHlvdSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHByb3RvdHlwYWxcclxuICogaW5oZXJpdGFuY2UgbWFza2luZyBwcmltaXRpdmVzLlxyXG4gKlxyXG4gKiBUaGlzIGV4YW1wbGUgZGVtb25zdHJhdGVzIHRoZSBgY29udHJvbGxlciBhc2Agc3ludGF4LlxyXG4gKlxyXG4gKiA8ZXhhbXBsZSBuYW1lPVwibmdDb250cm9sbGVyQXNcIiBtb2R1bGU9XCJjb250cm9sbGVyQXNFeGFtcGxlXCI+XHJcbiAqICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICogICAgPGRpdiBpZD1cImN0cmwtYXMtZXhtcGxcIiBuZy1jb250cm9sbGVyPVwiU2V0dGluZ3NDb250cm9sbGVyMSBhcyBzZXR0aW5nc1wiPlxyXG4gKiAgICAgIE5hbWU6IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5nLW1vZGVsPVwic2V0dGluZ3MubmFtZVwiLz5cclxuICogICAgICBbIDxhIGhyZWY9XCJcIiBuZy1jbGljaz1cInNldHRpbmdzLmdyZWV0KClcIj5ncmVldDwvYT4gXTxici8+XHJcbiAqICAgICAgQ29udGFjdDpcclxuICogICAgICA8dWw+XHJcbiAqICAgICAgICA8bGkgbmctcmVwZWF0PVwiY29udGFjdCBpbiBzZXR0aW5ncy5jb250YWN0c1wiPlxyXG4gKiAgICAgICAgICA8c2VsZWN0IG5nLW1vZGVsPVwiY29udGFjdC50eXBlXCI+XHJcbiAqICAgICAgICAgICAgIDxvcHRpb24+cGhvbmU8L29wdGlvbj5cclxuICogICAgICAgICAgICAgPG9wdGlvbj5lbWFpbDwvb3B0aW9uPlxyXG4gKiAgICAgICAgICA8L3NlbGVjdD5cclxuICogICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmctbW9kZWw9XCJjb250YWN0LnZhbHVlXCIvPlxyXG4gKiAgICAgICAgICBbIDxhIGhyZWY9XCJcIiBuZy1jbGljaz1cInNldHRpbmdzLmNsZWFyQ29udGFjdChjb250YWN0KVwiPmNsZWFyPC9hPlxyXG4gKiAgICAgICAgICB8IDxhIGhyZWY9XCJcIiBuZy1jbGljaz1cInNldHRpbmdzLnJlbW92ZUNvbnRhY3QoY29udGFjdClcIj5YPC9hPiBdXHJcbiAqICAgICAgICA8L2xpPlxyXG4gKiAgICAgICAgPGxpPlsgPGEgaHJlZj1cIlwiIG5nLWNsaWNrPVwic2V0dGluZ3MuYWRkQ29udGFjdCgpXCI+YWRkPC9hPiBdPC9saT5cclxuICogICAgIDwvdWw+XHJcbiAqICAgIDwvZGl2PlxyXG4gKiAgIDwvZmlsZT5cclxuICogICA8ZmlsZSBuYW1lPVwiYXBwLmpzXCI+XHJcbiAqICAgIGFuZ3VsYXIubW9kdWxlKCdjb250cm9sbGVyQXNFeGFtcGxlJywgW10pXHJcbiAqICAgICAgLmNvbnRyb2xsZXIoJ1NldHRpbmdzQ29udHJvbGxlcjEnLCBTZXR0aW5nc0NvbnRyb2xsZXIxKTtcclxuICpcclxuICogICAgZnVuY3Rpb24gU2V0dGluZ3NDb250cm9sbGVyMSgpIHtcclxuICogICAgICB0aGlzLm5hbWUgPSBcIkpvaG4gU21pdGhcIjtcclxuICogICAgICB0aGlzLmNvbnRhY3RzID0gW1xyXG4gKiAgICAgICAge3R5cGU6ICdwaG9uZScsIHZhbHVlOiAnNDA4IDU1NSAxMjEyJ30sXHJcbiAqICAgICAgICB7dHlwZTogJ2VtYWlsJywgdmFsdWU6ICdqb2huLnNtaXRoQGV4YW1wbGUub3JnJ30gXTtcclxuICogICAgfVxyXG4gKlxyXG4gKiAgICBTZXR0aW5nc0NvbnRyb2xsZXIxLnByb3RvdHlwZS5ncmVldCA9IGZ1bmN0aW9uKCkge1xyXG4gKiAgICAgIGFsZXJ0KHRoaXMubmFtZSk7XHJcbiAqICAgIH07XHJcbiAqXHJcbiAqICAgIFNldHRpbmdzQ29udHJvbGxlcjEucHJvdG90eXBlLmFkZENvbnRhY3QgPSBmdW5jdGlvbigpIHtcclxuICogICAgICB0aGlzLmNvbnRhY3RzLnB1c2goe3R5cGU6ICdlbWFpbCcsIHZhbHVlOiAneW91cm5hbWVAZXhhbXBsZS5vcmcnfSk7XHJcbiAqICAgIH07XHJcbiAqXHJcbiAqICAgIFNldHRpbmdzQ29udHJvbGxlcjEucHJvdG90eXBlLnJlbW92ZUNvbnRhY3QgPSBmdW5jdGlvbihjb250YWN0VG9SZW1vdmUpIHtcclxuICogICAgIHZhciBpbmRleCA9IHRoaXMuY29udGFjdHMuaW5kZXhPZihjb250YWN0VG9SZW1vdmUpO1xyXG4gKiAgICAgIHRoaXMuY29udGFjdHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICogICAgfTtcclxuICpcclxuICogICAgU2V0dGluZ3NDb250cm9sbGVyMS5wcm90b3R5cGUuY2xlYXJDb250YWN0ID0gZnVuY3Rpb24oY29udGFjdCkge1xyXG4gKiAgICAgIGNvbnRhY3QudHlwZSA9ICdwaG9uZSc7XHJcbiAqICAgICAgY29udGFjdC52YWx1ZSA9ICcnO1xyXG4gKiAgICB9O1xyXG4gKiAgIDwvZmlsZT5cclxuICogICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAqICAgICBpdCgnc2hvdWxkIGNoZWNrIGNvbnRyb2xsZXIgYXMnLCBmdW5jdGlvbigpIHtcclxuICogICAgICAgdmFyIGNvbnRhaW5lciA9IGVsZW1lbnQoYnkuaWQoJ2N0cmwtYXMtZXhtcGwnKSk7XHJcbiAqICAgICAgICAgZXhwZWN0KGNvbnRhaW5lci5lbGVtZW50KGJ5Lm1vZGVsKCdzZXR0aW5ncy5uYW1lJykpXHJcbiAqICAgICAgICAgICAuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKS50b0JlKCdKb2huIFNtaXRoJyk7XHJcbiAqXHJcbiAqICAgICAgIHZhciBmaXJzdFJlcGVhdCA9XHJcbiAqICAgICAgICAgICBjb250YWluZXIuZWxlbWVudChieS5yZXBlYXRlcignY29udGFjdCBpbiBzZXR0aW5ncy5jb250YWN0cycpLnJvdygwKSk7XHJcbiAqICAgICAgIHZhciBzZWNvbmRSZXBlYXQgPVxyXG4gKiAgICAgICAgICAgY29udGFpbmVyLmVsZW1lbnQoYnkucmVwZWF0ZXIoJ2NvbnRhY3QgaW4gc2V0dGluZ3MuY29udGFjdHMnKS5yb3coMSkpO1xyXG4gKlxyXG4gKiAgICAgICBleHBlY3QoZmlyc3RSZXBlYXQuZWxlbWVudChieS5tb2RlbCgnY29udGFjdC52YWx1ZScpKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpXHJcbiAqICAgICAgICAgICAudG9CZSgnNDA4IDU1NSAxMjEyJyk7XHJcbiAqXHJcbiAqICAgICAgIGV4cGVjdChzZWNvbmRSZXBlYXQuZWxlbWVudChieS5tb2RlbCgnY29udGFjdC52YWx1ZScpKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpXHJcbiAqICAgICAgICAgICAudG9CZSgnam9obi5zbWl0aEBleGFtcGxlLm9yZycpO1xyXG4gKlxyXG4gKiAgICAgICBmaXJzdFJlcGVhdC5lbGVtZW50KGJ5LmxpbmtUZXh0KCdjbGVhcicpKS5jbGljaygpO1xyXG4gKlxyXG4gKiAgICAgICBleHBlY3QoZmlyc3RSZXBlYXQuZWxlbWVudChieS5tb2RlbCgnY29udGFjdC52YWx1ZScpKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpXHJcbiAqICAgICAgICAgICAudG9CZSgnJyk7XHJcbiAqXHJcbiAqICAgICAgIGNvbnRhaW5lci5lbGVtZW50KGJ5LmxpbmtUZXh0KCdhZGQnKSkuY2xpY2soKTtcclxuICpcclxuICogICAgICAgZXhwZWN0KGNvbnRhaW5lci5lbGVtZW50KGJ5LnJlcGVhdGVyKCdjb250YWN0IGluIHNldHRpbmdzLmNvbnRhY3RzJykucm93KDIpKVxyXG4gKiAgICAgICAgICAgLmVsZW1lbnQoYnkubW9kZWwoJ2NvbnRhY3QudmFsdWUnKSlcclxuICogICAgICAgICAgIC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpXHJcbiAqICAgICAgICAgICAudG9CZSgneW91cm5hbWVAZXhhbXBsZS5vcmcnKTtcclxuICogICAgIH0pO1xyXG4gKiAgIDwvZmlsZT5cclxuICogPC9leGFtcGxlPlxyXG4gKlxyXG4gKiBUaGlzIGV4YW1wbGUgZGVtb25zdHJhdGVzIHRoZSBcImF0dGFjaCB0byBgJHNjb3BlYFwiIHN0eWxlIG9mIGNvbnRyb2xsZXIuXHJcbiAqXHJcbiAqIDxleGFtcGxlIG5hbWU9XCJuZ0NvbnRyb2xsZXJcIiBtb2R1bGU9XCJjb250cm9sbGVyRXhhbXBsZVwiPlxyXG4gKiAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICogICA8ZGl2IGlkPVwiY3RybC1leG1wbFwiIG5nLWNvbnRyb2xsZXI9XCJTZXR0aW5nc0NvbnRyb2xsZXIyXCI+XHJcbiAqICAgICBOYW1lOiA8aW5wdXQgdHlwZT1cInRleHRcIiBuZy1tb2RlbD1cIm5hbWVcIi8+XHJcbiAqICAgICBbIDxhIGhyZWY9XCJcIiBuZy1jbGljaz1cImdyZWV0KClcIj5ncmVldDwvYT4gXTxici8+XHJcbiAqICAgICBDb250YWN0OlxyXG4gKiAgICAgPHVsPlxyXG4gKiAgICAgICA8bGkgbmctcmVwZWF0PVwiY29udGFjdCBpbiBjb250YWN0c1wiPlxyXG4gKiAgICAgICAgIDxzZWxlY3QgbmctbW9kZWw9XCJjb250YWN0LnR5cGVcIj5cclxuICogICAgICAgICAgICA8b3B0aW9uPnBob25lPC9vcHRpb24+XHJcbiAqICAgICAgICAgICAgPG9wdGlvbj5lbWFpbDwvb3B0aW9uPlxyXG4gKiAgICAgICAgIDwvc2VsZWN0PlxyXG4gKiAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5nLW1vZGVsPVwiY29udGFjdC52YWx1ZVwiLz5cclxuICogICAgICAgICBbIDxhIGhyZWY9XCJcIiBuZy1jbGljaz1cImNsZWFyQ29udGFjdChjb250YWN0KVwiPmNsZWFyPC9hPlxyXG4gKiAgICAgICAgIHwgPGEgaHJlZj1cIlwiIG5nLWNsaWNrPVwicmVtb3ZlQ29udGFjdChjb250YWN0KVwiPlg8L2E+IF1cclxuICogICAgICAgPC9saT5cclxuICogICAgICAgPGxpPlsgPGEgaHJlZj1cIlwiIG5nLWNsaWNrPVwiYWRkQ29udGFjdCgpXCI+YWRkPC9hPiBdPC9saT5cclxuICogICAgPC91bD5cclxuICogICA8L2Rpdj5cclxuICogIDwvZmlsZT5cclxuICogIDxmaWxlIG5hbWU9XCJhcHAuanNcIj5cclxuICogICBhbmd1bGFyLm1vZHVsZSgnY29udHJvbGxlckV4YW1wbGUnLCBbXSlcclxuICogICAgIC5jb250cm9sbGVyKCdTZXR0aW5nc0NvbnRyb2xsZXIyJywgWyckc2NvcGUnLCBTZXR0aW5nc0NvbnRyb2xsZXIyXSk7XHJcbiAqXHJcbiAqICAgZnVuY3Rpb24gU2V0dGluZ3NDb250cm9sbGVyMigkc2NvcGUpIHtcclxuICogICAgICRzY29wZS5uYW1lID0gXCJKb2huIFNtaXRoXCI7XHJcbiAqICAgICAkc2NvcGUuY29udGFjdHMgPSBbXHJcbiAqICAgICAgIHt0eXBlOidwaG9uZScsIHZhbHVlOic0MDggNTU1IDEyMTInfSxcclxuICogICAgICAge3R5cGU6J2VtYWlsJywgdmFsdWU6J2pvaG4uc21pdGhAZXhhbXBsZS5vcmcnfSBdO1xyXG4gKlxyXG4gKiAgICAgJHNjb3BlLmdyZWV0ID0gZnVuY3Rpb24oKSB7XHJcbiAqICAgICAgIGFsZXJ0KCRzY29wZS5uYW1lKTtcclxuICogICAgIH07XHJcbiAqXHJcbiAqICAgICAkc2NvcGUuYWRkQ29udGFjdCA9IGZ1bmN0aW9uKCkge1xyXG4gKiAgICAgICAkc2NvcGUuY29udGFjdHMucHVzaCh7dHlwZTonZW1haWwnLCB2YWx1ZToneW91cm5hbWVAZXhhbXBsZS5vcmcnfSk7XHJcbiAqICAgICB9O1xyXG4gKlxyXG4gKiAgICAgJHNjb3BlLnJlbW92ZUNvbnRhY3QgPSBmdW5jdGlvbihjb250YWN0VG9SZW1vdmUpIHtcclxuICogICAgICAgdmFyIGluZGV4ID0gJHNjb3BlLmNvbnRhY3RzLmluZGV4T2YoY29udGFjdFRvUmVtb3ZlKTtcclxuICogICAgICAgJHNjb3BlLmNvbnRhY3RzLnNwbGljZShpbmRleCwgMSk7XHJcbiAqICAgICB9O1xyXG4gKlxyXG4gKiAgICAgJHNjb3BlLmNsZWFyQ29udGFjdCA9IGZ1bmN0aW9uKGNvbnRhY3QpIHtcclxuICogICAgICAgY29udGFjdC50eXBlID0gJ3Bob25lJztcclxuICogICAgICAgY29udGFjdC52YWx1ZSA9ICcnO1xyXG4gKiAgICAgfTtcclxuICogICB9XHJcbiAqICA8L2ZpbGU+XHJcbiAqICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAqICAgIGl0KCdzaG91bGQgY2hlY2sgY29udHJvbGxlcicsIGZ1bmN0aW9uKCkge1xyXG4gKiAgICAgIHZhciBjb250YWluZXIgPSBlbGVtZW50KGJ5LmlkKCdjdHJsLWV4bXBsJykpO1xyXG4gKlxyXG4gKiAgICAgIGV4cGVjdChjb250YWluZXIuZWxlbWVudChieS5tb2RlbCgnbmFtZScpKVxyXG4gKiAgICAgICAgICAuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKS50b0JlKCdKb2huIFNtaXRoJyk7XHJcbiAqXHJcbiAqICAgICAgdmFyIGZpcnN0UmVwZWF0ID1cclxuICogICAgICAgICAgY29udGFpbmVyLmVsZW1lbnQoYnkucmVwZWF0ZXIoJ2NvbnRhY3QgaW4gY29udGFjdHMnKS5yb3coMCkpO1xyXG4gKiAgICAgIHZhciBzZWNvbmRSZXBlYXQgPVxyXG4gKiAgICAgICAgICBjb250YWluZXIuZWxlbWVudChieS5yZXBlYXRlcignY29udGFjdCBpbiBjb250YWN0cycpLnJvdygxKSk7XHJcbiAqXHJcbiAqICAgICAgZXhwZWN0KGZpcnN0UmVwZWF0LmVsZW1lbnQoYnkubW9kZWwoJ2NvbnRhY3QudmFsdWUnKSkuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKVxyXG4gKiAgICAgICAgICAudG9CZSgnNDA4IDU1NSAxMjEyJyk7XHJcbiAqICAgICAgZXhwZWN0KHNlY29uZFJlcGVhdC5lbGVtZW50KGJ5Lm1vZGVsKCdjb250YWN0LnZhbHVlJykpLmdldEF0dHJpYnV0ZSgndmFsdWUnKSlcclxuICogICAgICAgICAgLnRvQmUoJ2pvaG4uc21pdGhAZXhhbXBsZS5vcmcnKTtcclxuICpcclxuICogICAgICBmaXJzdFJlcGVhdC5lbGVtZW50KGJ5LmxpbmtUZXh0KCdjbGVhcicpKS5jbGljaygpO1xyXG4gKlxyXG4gKiAgICAgIGV4cGVjdChmaXJzdFJlcGVhdC5lbGVtZW50KGJ5Lm1vZGVsKCdjb250YWN0LnZhbHVlJykpLmdldEF0dHJpYnV0ZSgndmFsdWUnKSlcclxuICogICAgICAgICAgLnRvQmUoJycpO1xyXG4gKlxyXG4gKiAgICAgIGNvbnRhaW5lci5lbGVtZW50KGJ5LmxpbmtUZXh0KCdhZGQnKSkuY2xpY2soKTtcclxuICpcclxuICogICAgICBleHBlY3QoY29udGFpbmVyLmVsZW1lbnQoYnkucmVwZWF0ZXIoJ2NvbnRhY3QgaW4gY29udGFjdHMnKS5yb3coMikpXHJcbiAqICAgICAgICAgIC5lbGVtZW50KGJ5Lm1vZGVsKCdjb250YWN0LnZhbHVlJykpXHJcbiAqICAgICAgICAgIC5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykpXHJcbiAqICAgICAgICAgIC50b0JlKCd5b3VybmFtZUBleGFtcGxlLm9yZycpO1xyXG4gKiAgICB9KTtcclxuICogIDwvZmlsZT5cclxuICo8L2V4YW1wbGU+XHJcblxyXG4gKi9cclxudmFyIG5nQ29udHJvbGxlckRpcmVjdGl2ZSA9IFtmdW5jdGlvbigpIHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgIHNjb3BlOiB0cnVlLFxyXG4gICAgY29udHJvbGxlcjogJ0AnLFxyXG4gICAgcHJpb3JpdHk6IDUwMFxyXG4gIH07XHJcbn1dO1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdDc3BcclxuICpcclxuICogQGVsZW1lbnQgaHRtbFxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogRW5hYmxlcyBbQ1NQIChDb250ZW50IFNlY3VyaXR5IFBvbGljeSldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL1NlY3VyaXR5L0NTUCkgc3VwcG9ydC5cclxuICpcclxuICogVGhpcyBpcyBuZWNlc3Nhcnkgd2hlbiBkZXZlbG9waW5nIHRoaW5ncyBsaWtlIEdvb2dsZSBDaHJvbWUgRXh0ZW5zaW9ucyBvciBVbml2ZXJzYWwgV2luZG93cyBBcHBzLlxyXG4gKlxyXG4gKiBDU1AgZm9yYmlkcyBhcHBzIHRvIHVzZSBgZXZhbGAgb3IgYEZ1bmN0aW9uKHN0cmluZylgIGdlbmVyYXRlZCBmdW5jdGlvbnMgKGFtb25nIG90aGVyIHRoaW5ncykuXHJcbiAqIEZvciBBbmd1bGFyIHRvIGJlIENTUCBjb21wYXRpYmxlIHRoZXJlIGFyZSBvbmx5IHR3byB0aGluZ3MgdGhhdCB3ZSBuZWVkIHRvIGRvIGRpZmZlcmVudGx5OlxyXG4gKlxyXG4gKiAtIGRvbid0IHVzZSBgRnVuY3Rpb25gIGNvbnN0cnVjdG9yIHRvIGdlbmVyYXRlIG9wdGltaXplZCB2YWx1ZSBnZXR0ZXJzXHJcbiAqIC0gZG9uJ3QgaW5qZWN0IGN1c3RvbSBzdHlsZXNoZWV0IGludG8gdGhlIGRvY3VtZW50XHJcbiAqXHJcbiAqIEFuZ3VsYXJKUyB1c2VzIGBGdW5jdGlvbihzdHJpbmcpYCBnZW5lcmF0ZWQgZnVuY3Rpb25zIGFzIGEgc3BlZWQgb3B0aW1pemF0aW9uLiBBcHBseWluZyB0aGUgYG5nQ3NwYFxyXG4gKiBkaXJlY3RpdmUgd2lsbCBjYXVzZSBBbmd1bGFyIHRvIHVzZSBDU1AgY29tcGF0aWJpbGl0eSBtb2RlLiBXaGVuIHRoaXMgbW9kZSBpcyBvbiBBbmd1bGFySlMgd2lsbFxyXG4gKiBldmFsdWF0ZSBhbGwgZXhwcmVzc2lvbnMgdXAgdG8gMzAlIHNsb3dlciB0aGFuIGluIG5vbi1DU1AgbW9kZSwgYnV0IG5vIHNlY3VyaXR5IHZpb2xhdGlvbnMgd2lsbFxyXG4gKiBiZSByYWlzZWQuXHJcbiAqXHJcbiAqIENTUCBmb3JiaWRzIEphdmFTY3JpcHQgdG8gaW5saW5lIHN0eWxlc2hlZXQgcnVsZXMuIEluIG5vbiBDU1AgbW9kZSBBbmd1bGFyIGF1dG9tYXRpY2FsbHlcclxuICogaW5jbHVkZXMgc29tZSBDU1MgcnVsZXMgKGUuZy4ge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0Nsb2FrIG5nQ2xvYWt9KS5cclxuICogVG8gbWFrZSB0aG9zZSBkaXJlY3RpdmVzIHdvcmsgaW4gQ1NQIG1vZGUsIGluY2x1ZGUgdGhlIGBhbmd1bGFyLWNzcC5jc3NgIG1hbnVhbGx5LlxyXG4gKlxyXG4gKiBBbmd1bGFyIHRyaWVzIHRvIGF1dG9kZXRlY3QgaWYgQ1NQIGlzIGFjdGl2ZSBhbmQgYXV0b21hdGljYWxseSB0dXJuIG9uIHRoZSBDU1Atc2FmZSBtb2RlLiBUaGlzXHJcbiAqIGF1dG9kZXRlY3Rpb24gaG93ZXZlciB0cmlnZ2VycyBhIENTUCBlcnJvciB0byBiZSBsb2dnZWQgaW4gdGhlIGNvbnNvbGU6XHJcbiAqXHJcbiAqIGBgYFxyXG4gKiBSZWZ1c2VkIHRvIGV2YWx1YXRlIGEgc3RyaW5nIGFzIEphdmFTY3JpcHQgYmVjYXVzZSAndW5zYWZlLWV2YWwnIGlzIG5vdCBhbiBhbGxvd2VkIHNvdXJjZSBvZlxyXG4gKiBzY3JpcHQgaW4gdGhlIGZvbGxvd2luZyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBkaXJlY3RpdmU6IFwiZGVmYXVsdC1zcmMgJ3NlbGYnXCIuIE5vdGUgdGhhdFxyXG4gKiAnc2NyaXB0LXNyYycgd2FzIG5vdCBleHBsaWNpdGx5IHNldCwgc28gJ2RlZmF1bHQtc3JjJyBpcyB1c2VkIGFzIGEgZmFsbGJhY2suXHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBUaGlzIGVycm9yIGlzIGhhcm1sZXNzIGJ1dCBhbm5veWluZy4gVG8gcHJldmVudCB0aGUgZXJyb3IgZnJvbSBzaG93aW5nIHVwLCBwdXQgdGhlIGBuZ0NzcGBcclxuICogZGlyZWN0aXZlIG9uIHRoZSByb290IGVsZW1lbnQgb2YgdGhlIGFwcGxpY2F0aW9uIG9yIG9uIHRoZSBgYW5ndWxhci5qc2Agc2NyaXB0IHRhZywgd2hpY2hldmVyXHJcbiAqIGFwcGVhcnMgZmlyc3QgaW4gdGhlIGh0bWwgZG9jdW1lbnQuXHJcbiAqXHJcbiAqICpOb3RlOiBUaGlzIGRpcmVjdGl2ZSBpcyBvbmx5IGF2YWlsYWJsZSBpbiB0aGUgYG5nLWNzcGAgYW5kIGBkYXRhLW5nLWNzcGAgYXR0cmlidXRlIGZvcm0uKlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBUaGlzIGV4YW1wbGUgc2hvd3MgaG93IHRvIGFwcGx5IHRoZSBgbmdDc3BgIGRpcmVjdGl2ZSB0byB0aGUgYGh0bWxgIHRhZy5cclxuICAgYGBgaHRtbFxyXG4gICAgIDwhZG9jdHlwZSBodG1sPlxyXG4gICAgIDxodG1sIG5nLWFwcCBuZy1jc3A+XHJcbiAgICAgLi4uXHJcbiAgICAgLi4uXHJcbiAgICAgPC9odG1sPlxyXG4gICBgYGBcclxuICAqIEBleGFtcGxlXHJcbiAgICAgIC8vIE5vdGU6IHRoZSBzdWZmaXggYC5jc3BgIGluIHRoZSBleGFtcGxlIG5hbWUgdHJpZ2dlcnNcclxuICAgICAgLy8gY3NwIG1vZGUgaW4gb3VyIGh0dHAgc2VydmVyIVxyXG4gICAgICA8ZXhhbXBsZSBuYW1lPVwiZXhhbXBsZS5jc3BcIiBtb2R1bGU9XCJjc3BFeGFtcGxlXCIgbmctY3NwPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgICAgICA8ZGl2IG5nLWNvbnRyb2xsZXI9XCJNYWluQ29udHJvbGxlciBhcyBjdHJsXCI+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBuZy1jbGljaz1cImN0cmwuaW5jKClcIiBpZD1cImluY1wiPkluY3JlbWVudDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGlkPVwiY291bnRlclwiPlxyXG4gICAgICAgICAgICAgICAge3tjdHJsLmNvdW50ZXJ9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbmctY2xpY2s9XCJjdHJsLmV2aWwoKVwiIGlkPVwiZXZpbFwiPkV2aWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8c3BhbiBpZD1cImV2aWxFcnJvclwiPlxyXG4gICAgICAgICAgICAgICAge3tjdHJsLmV2aWxFcnJvcn19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZmlsZT5cclxuICAgICAgICA8ZmlsZSBuYW1lPVwic2NyaXB0LmpzXCI+XHJcbiAgICAgICAgICAgYW5ndWxhci5tb2R1bGUoJ2NzcEV4YW1wbGUnLCBbXSlcclxuICAgICAgICAgICAgIC5jb250cm9sbGVyKCdNYWluQ29udHJvbGxlcicsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudGVyID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5jID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRlcisrO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXZpbCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAvLyBqc2hpbnQgZXZpbDp0cnVlXHJcbiAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZhbCgnMSsyJyk7XHJcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2aWxFcnJvciA9IGUubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICA8L2ZpbGU+XHJcbiAgICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICAgICAgdmFyIHV0aWwsIHdlYmRyaXZlcjtcclxuXHJcbiAgICAgICAgICB2YXIgaW5jQnRuID0gZWxlbWVudChieS5pZCgnaW5jJykpO1xyXG4gICAgICAgICAgdmFyIGNvdW50ZXIgPSBlbGVtZW50KGJ5LmlkKCdjb3VudGVyJykpO1xyXG4gICAgICAgICAgdmFyIGV2aWxCdG4gPSBlbGVtZW50KGJ5LmlkKCdldmlsJykpO1xyXG4gICAgICAgICAgdmFyIGV2aWxFcnJvciA9IGVsZW1lbnQoYnkuaWQoJ2V2aWxFcnJvcicpKTtcclxuXHJcbiAgICAgICAgICBmdW5jdGlvbiBnZXRBbmRDbGVhclNldmVyZUVycm9ycygpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJyb3dzZXIubWFuYWdlKCkubG9ncygpLmdldCgnYnJvd3NlcicpLnRoZW4oZnVuY3Rpb24oYnJvd3NlckxvZykge1xyXG4gICAgICAgICAgICAgIHJldHVybiBicm93c2VyTG9nLmZpbHRlcihmdW5jdGlvbihsb2dFbnRyeSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ0VudHJ5LmxldmVsLnZhbHVlID4gd2ViZHJpdmVyLmxvZ2dpbmcuTGV2ZWwuV0FSTklORy52YWx1ZTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZnVuY3Rpb24gY2xlYXJFcnJvcnMoKSB7XHJcbiAgICAgICAgICAgIGdldEFuZENsZWFyU2V2ZXJlRXJyb3JzKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZnVuY3Rpb24gZXhwZWN0Tm9FcnJvcnMoKSB7XHJcbiAgICAgICAgICAgIGdldEFuZENsZWFyU2V2ZXJlRXJyb3JzKCkudGhlbihmdW5jdGlvbihmaWx0ZXJlZExvZykge1xyXG4gICAgICAgICAgICAgIGV4cGVjdChmaWx0ZXJlZExvZy5sZW5ndGgpLnRvRXF1YWwoMCk7XHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkTG9nLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2Jyb3dzZXIgY29uc29sZSBlcnJvcnM6ICcgKyB1dGlsLmluc3BlY3QoZmlsdGVyZWRMb2cpKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGZ1bmN0aW9uIGV4cGVjdEVycm9yKHJlZ2V4KSB7XHJcbiAgICAgICAgICAgIGdldEFuZENsZWFyU2V2ZXJlRXJyb3JzKCkudGhlbihmdW5jdGlvbihmaWx0ZXJlZExvZykge1xyXG4gICAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGZpbHRlcmVkTG9nLmZvckVhY2goZnVuY3Rpb24obG9nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9nLm1lc3NhZ2UubWF0Y2gocmVnZXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGFuIGVycm9yIHRoYXQgbWF0Y2hlcyAnICsgcmVnZXgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcclxuICAgICAgICAgICAgd2ViZHJpdmVyID0gcmVxdWlyZSgncHJvdHJhY3Rvci9ub2RlX21vZHVsZXMvc2VsZW5pdW0td2ViZHJpdmVyJyk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBGb3Igbm93LCB3ZSBvbmx5IHRlc3Qgb24gQ2hyb21lLFxyXG4gICAgICAgICAgLy8gYXMgU2FmYXJpIGRvZXMgbm90IGxvYWQgdGhlIHBhZ2Ugd2l0aCBQcm90cmFjdG9yJ3MgaW5qZWN0ZWQgc2NyaXB0cyxcclxuICAgICAgICAgIC8vIGFuZCBGaXJlZm94IHdlYmRyaXZlciBhbHdheXMgZGlzYWJsZXMgY29udGVudCBzZWN1cml0eSBwb2xpY3kgKCM2MzU4KVxyXG4gICAgICAgICAgaWYgKGJyb3dzZXIucGFyYW1zLmJyb3dzZXIgIT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpdCgnc2hvdWxkIG5vdCByZXBvcnQgZXJyb3JzIHdoZW4gdGhlIHBhZ2UgaXMgbG9hZGVkJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIC8vIGNsZWFyIGVycm9ycyBzbyB3ZSBhcmUgbm90IGRlcGVuZGVudCBvbiBwcmV2aW91cyB0ZXN0c1xyXG4gICAgICAgICAgICBjbGVhckVycm9ycygpO1xyXG4gICAgICAgICAgICAvLyBOZWVkIHRvIHJlbG9hZCB0aGUgcGFnZSBhcyB0aGUgcGFnZSBpcyBhbHJlYWR5IGxvYWRlZCB3aGVuXHJcbiAgICAgICAgICAgIC8vIHdlIGNvbWUgaGVyZVxyXG4gICAgICAgICAgICBicm93c2VyLmRyaXZlci5nZXRDdXJyZW50VXJsKCkudGhlbihmdW5jdGlvbih1cmwpIHtcclxuICAgICAgICAgICAgICBicm93c2VyLmdldCh1cmwpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZXhwZWN0Tm9FcnJvcnMoKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGl0KCdzaG91bGQgZXZhbHVhdGUgZXhwcmVzc2lvbnMnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgZXhwZWN0KGNvdW50ZXIuZ2V0VGV4dCgpKS50b0VxdWFsKCcwJyk7XHJcbiAgICAgICAgICAgIGluY0J0bi5jbGljaygpO1xyXG4gICAgICAgICAgICBleHBlY3QoY291bnRlci5nZXRUZXh0KCkpLnRvRXF1YWwoJzEnKTtcclxuICAgICAgICAgICAgZXhwZWN0Tm9FcnJvcnMoKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW5kIHJlcG9ydCBhbiBlcnJvciB3aGVuIHVzaW5nIFwiZXZhbFwiJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGV2aWxCdG4uY2xpY2soKTtcclxuICAgICAgICAgICAgZXhwZWN0KGV2aWxFcnJvci5nZXRUZXh0KCkpLnRvTWF0Y2goL0NvbnRlbnQgU2VjdXJpdHkgUG9saWN5Lyk7XHJcbiAgICAgICAgICAgIGV4cGVjdEVycm9yKC9Db250ZW50IFNlY3VyaXR5IFBvbGljeS8pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgPC9maWxlPlxyXG4gICAgICA8L2V4YW1wbGU+XHJcbiAgKi9cclxuXHJcbi8vIG5nQ3NwIGlzIG5vdCBpbXBsZW1lbnRlZCBhcyBhIHByb3BlciBkaXJlY3RpdmUgYW55IG1vcmUsIGJlY2F1c2Ugd2UgbmVlZCBpdCBiZSBwcm9jZXNzZWQgd2hpbGUgd2VcclxuLy8gYm9vdHN0cmFwIHRoZSBzeXN0ZW0gKGJlZm9yZSAkcGFyc2UgaXMgaW5zdGFudGlhdGVkKSwgZm9yIHRoaXMgcmVhc29uIHdlIGp1c3QgaGF2ZVxyXG4vLyB0aGUgY3NwLmlzQWN0aXZlKCkgZm4gdGhhdCBsb29rcyBmb3IgbmctY3NwIGF0dHJpYnV0ZSBhbnl3aGVyZSBpbiB0aGUgY3VycmVudCBkb2NcclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIG5nQ2xpY2tcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRoZSBuZ0NsaWNrIGRpcmVjdGl2ZSBhbGxvd3MgeW91IHRvIHNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIHdoZW5cclxuICogYW4gZWxlbWVudCBpcyBjbGlja2VkLlxyXG4gKlxyXG4gKiBAZWxlbWVudCBBTllcclxuICogQHByaW9yaXR5IDBcclxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0NsaWNrIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb25cclxuICogY2xpY2suICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGB9KVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICA8ZXhhbXBsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICA8YnV0dG9uIG5nLWNsaWNrPVwiY291bnQgPSBjb3VudCArIDFcIiBuZy1pbml0PVwiY291bnQ9MFwiPlxyXG4gICAgICAgIEluY3JlbWVudFxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPHNwYW4+XHJcbiAgICAgICAgY291bnQ6IHt7Y291bnR9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgPC9maWxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctY2xpY2snLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygnY291bnQnKSkuZ2V0VGV4dCgpKS50b01hdGNoKCcwJyk7XHJcbiAgICAgICAgIGVsZW1lbnQoYnkuY3NzKCdidXR0b24nKSkuY2xpY2soKTtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygnY291bnQnKSkuZ2V0VGV4dCgpKS50b01hdGNoKCcxJyk7XHJcbiAgICAgICB9KTtcclxuICAgICA8L2ZpbGU+XHJcbiAgIDwvZXhhbXBsZT5cclxuICovXHJcbi8qXHJcbiAqIEEgY29sbGVjdGlvbiBvZiBkaXJlY3RpdmVzIHRoYXQgYWxsb3dzIGNyZWF0aW9uIG9mIGN1c3RvbSBldmVudCBoYW5kbGVycyB0aGF0IGFyZSBkZWZpbmVkIGFzXHJcbiAqIGFuZ3VsYXIgZXhwcmVzc2lvbnMgYW5kIGFyZSBjb21waWxlZCBhbmQgZXhlY3V0ZWQgd2l0aGluIHRoZSBjdXJyZW50IHNjb3BlLlxyXG4gKi9cclxudmFyIG5nRXZlbnREaXJlY3RpdmVzID0ge307XHJcblxyXG4vLyBGb3IgZXZlbnRzIHRoYXQgbWlnaHQgZmlyZSBzeW5jaHJvbm91c2x5IGR1cmluZyBET00gbWFuaXB1bGF0aW9uXHJcbi8vIHdlIG5lZWQgdG8gZXhlY3V0ZSB0aGVpciBldmVudCBoYW5kbGVycyBhc3luY2hyb25vdXNseSB1c2luZyAkZXZhbEFzeW5jLFxyXG4vLyBzbyB0aGF0IHRoZXkgYXJlIG5vdCBleGVjdXRlZCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXHJcbnZhciBmb3JjZUFzeW5jRXZlbnRzID0ge1xyXG4gICdibHVyJzogdHJ1ZSxcclxuICAnZm9jdXMnOiB0cnVlXHJcbn07XHJcbmZvckVhY2goXHJcbiAgJ2NsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZW1vdmUgbW91c2VlbnRlciBtb3VzZWxlYXZlIGtleWRvd24ga2V5dXAga2V5cHJlc3Mgc3VibWl0IGZvY3VzIGJsdXIgY29weSBjdXQgcGFzdGUnLnNwbGl0KCcgJyksXHJcbiAgZnVuY3Rpb24oZXZlbnROYW1lKSB7XHJcbiAgICB2YXIgZGlyZWN0aXZlTmFtZSA9IGRpcmVjdGl2ZU5vcm1hbGl6ZSgnbmctJyArIGV2ZW50TmFtZSk7XHJcbiAgICBuZ0V2ZW50RGlyZWN0aXZlc1tkaXJlY3RpdmVOYW1lXSA9IFsnJHBhcnNlJywgJyRyb290U2NvcGUnLCBmdW5jdGlvbigkcGFyc2UsICRyb290U2NvcGUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICByZXN0cmljdDogJ0EnLFxyXG4gICAgICAgIGNvbXBpbGU6IGZ1bmN0aW9uKCRlbGVtZW50LCBhdHRyKSB7XHJcbiAgICAgICAgICAvLyBXZSBleHBvc2UgdGhlIHBvd2VyZnVsICRldmVudCBvYmplY3Qgb24gdGhlIHNjb3BlIHRoYXQgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBXaW5kb3csXHJcbiAgICAgICAgICAvLyBldGMuIHRoYXQgaXNuJ3QgcHJvdGVjdGVkIGJ5IHRoZSBmYXN0IHBhdGhzIGluICRwYXJzZS4gIFdlIGV4cGxpY2l0bHkgcmVxdWVzdCBiZXR0ZXJcclxuICAgICAgICAgIC8vIGNoZWNrcyBhdCB0aGUgY29zdCBvZiBzcGVlZCBzaW5jZSBldmVudCBoYW5kbGVyIGV4cHJlc3Npb25zIGFyZSBub3QgZXhlY3V0ZWQgYXNcclxuICAgICAgICAgIC8vIGZyZXF1ZW50bHkgYXMgcmVndWxhciBjaGFuZ2UgZGV0ZWN0aW9uLlxyXG4gICAgICAgICAgdmFyIGZuID0gJHBhcnNlKGF0dHJbZGlyZWN0aXZlTmFtZV0sIC8qIGludGVyY2VwdG9yRm4gKi8gbnVsbCwgLyogZXhwZW5zaXZlQ2hlY2tzICovIHRydWUpO1xyXG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5nRXZlbnRIYW5kbGVyKHNjb3BlLCBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQub24oZXZlbnROYW1lLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgZm4oc2NvcGUsIHskZXZlbnQ6ZXZlbnR9KTtcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGlmIChmb3JjZUFzeW5jRXZlbnRzW2V2ZW50TmFtZV0gJiYgJHJvb3RTY29wZS4kJHBoYXNlKSB7XHJcbiAgICAgICAgICAgICAgICBzY29wZS4kZXZhbEFzeW5jKGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XTtcclxuICB9XHJcbik7XHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBuZ0RibGNsaWNrXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBUaGUgYG5nRGJsY2xpY2tgIGRpcmVjdGl2ZSBhbGxvd3MgeW91IHRvIHNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIGEgZGJsY2xpY2sgZXZlbnQuXHJcbiAqXHJcbiAqIEBlbGVtZW50IEFOWVxyXG4gKiBAcHJpb3JpdHkgMFxyXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nRGJsY2xpY2sge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvblxyXG4gKiBhIGRibGNsaWNrLiAoVGhlIEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGApXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgIDxleGFtcGxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgIDxidXR0b24gbmctZGJsY2xpY2s9XCJjb3VudCA9IGNvdW50ICsgMVwiIG5nLWluaXQ9XCJjb3VudD0wXCI+XHJcbiAgICAgICAgSW5jcmVtZW50IChvbiBkb3VibGUgY2xpY2spXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICBjb3VudDoge3tjb3VudH19XHJcbiAgICAgPC9maWxlPlxyXG4gICA8L2V4YW1wbGU+XHJcbiAqL1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIG5nTW91c2Vkb3duXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBUaGUgbmdNb3VzZWRvd24gZGlyZWN0aXZlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24gbW91c2Vkb3duIGV2ZW50LlxyXG4gKlxyXG4gKiBAZWxlbWVudCBBTllcclxuICogQHByaW9yaXR5IDBcclxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ01vdXNlZG93biB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uXHJcbiAqIG1vdXNlZG93bi4gKHtAbGluayBndWlkZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YH0pXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgIDxleGFtcGxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgIDxidXR0b24gbmctbW91c2Vkb3duPVwiY291bnQgPSBjb3VudCArIDFcIiBuZy1pbml0PVwiY291bnQ9MFwiPlxyXG4gICAgICAgIEluY3JlbWVudCAob24gbW91c2UgZG93bilcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIGNvdW50OiB7e2NvdW50fX1cclxuICAgICA8L2ZpbGU+XHJcbiAgIDwvZXhhbXBsZT5cclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdNb3VzZXVwXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBtb3VzZXVwIGV2ZW50LlxyXG4gKlxyXG4gKiBAZWxlbWVudCBBTllcclxuICogQHByaW9yaXR5IDBcclxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ01vdXNldXAge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvblxyXG4gKiBtb3VzZXVwLiAoe0BsaW5rIGd1aWRlL2V4cHJlc3Npb24jLWV2ZW50LSBFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgfSlcclxuICpcclxuICogQGV4YW1wbGVcclxuICAgPGV4YW1wbGU+XHJcbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgPGJ1dHRvbiBuZy1tb3VzZXVwPVwiY291bnQgPSBjb3VudCArIDFcIiBuZy1pbml0PVwiY291bnQ9MFwiPlxyXG4gICAgICAgIEluY3JlbWVudCAob24gbW91c2UgdXApXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICBjb3VudDoge3tjb3VudH19XHJcbiAgICAgPC9maWxlPlxyXG4gICA8L2V4YW1wbGU+XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdNb3VzZW92ZXJcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFNwZWNpZnkgY3VzdG9tIGJlaGF2aW9yIG9uIG1vdXNlb3ZlciBldmVudC5cclxuICpcclxuICogQGVsZW1lbnQgQU5ZXHJcbiAqIEBwcmlvcml0eSAwXHJcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdNb3VzZW92ZXIge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvblxyXG4gKiBtb3VzZW92ZXIuICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGB9KVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICA8ZXhhbXBsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICA8YnV0dG9uIG5nLW1vdXNlb3Zlcj1cImNvdW50ID0gY291bnQgKyAxXCIgbmctaW5pdD1cImNvdW50PTBcIj5cclxuICAgICAgICBJbmNyZW1lbnQgKHdoZW4gbW91c2UgaXMgb3ZlcilcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIGNvdW50OiB7e2NvdW50fX1cclxuICAgICA8L2ZpbGU+XHJcbiAgIDwvZXhhbXBsZT5cclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdNb3VzZWVudGVyXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBtb3VzZWVudGVyIGV2ZW50LlxyXG4gKlxyXG4gKiBAZWxlbWVudCBBTllcclxuICogQHByaW9yaXR5IDBcclxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ01vdXNlZW50ZXIge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvblxyXG4gKiBtb3VzZWVudGVyLiAoe0BsaW5rIGd1aWRlL2V4cHJlc3Npb24jLWV2ZW50LSBFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgfSlcclxuICpcclxuICogQGV4YW1wbGVcclxuICAgPGV4YW1wbGU+XHJcbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgPGJ1dHRvbiBuZy1tb3VzZWVudGVyPVwiY291bnQgPSBjb3VudCArIDFcIiBuZy1pbml0PVwiY291bnQ9MFwiPlxyXG4gICAgICAgIEluY3JlbWVudCAod2hlbiBtb3VzZSBlbnRlcnMpXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICBjb3VudDoge3tjb3VudH19XHJcbiAgICAgPC9maWxlPlxyXG4gICA8L2V4YW1wbGU+XHJcbiAqL1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIG5nTW91c2VsZWF2ZVxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogU3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24gbW91c2VsZWF2ZSBldmVudC5cclxuICpcclxuICogQGVsZW1lbnQgQU5ZXHJcbiAqIEBwcmlvcml0eSAwXHJcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdNb3VzZWxlYXZlIHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb25cclxuICogbW91c2VsZWF2ZS4gKHtAbGluayBndWlkZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YH0pXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgIDxleGFtcGxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgIDxidXR0b24gbmctbW91c2VsZWF2ZT1cImNvdW50ID0gY291bnQgKyAxXCIgbmctaW5pdD1cImNvdW50PTBcIj5cclxuICAgICAgICBJbmNyZW1lbnQgKHdoZW4gbW91c2UgbGVhdmVzKVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgY291bnQ6IHt7Y291bnR9fVxyXG4gICAgIDwvZmlsZT5cclxuICAgPC9leGFtcGxlPlxyXG4gKi9cclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBuZ01vdXNlbW92ZVxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogU3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24gbW91c2Vtb3ZlIGV2ZW50LlxyXG4gKlxyXG4gKiBAZWxlbWVudCBBTllcclxuICogQHByaW9yaXR5IDBcclxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ01vdXNlbW92ZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uXHJcbiAqIG1vdXNlbW92ZS4gKHtAbGluayBndWlkZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YH0pXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgIDxleGFtcGxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgIDxidXR0b24gbmctbW91c2Vtb3ZlPVwiY291bnQgPSBjb3VudCArIDFcIiBuZy1pbml0PVwiY291bnQ9MFwiPlxyXG4gICAgICAgIEluY3JlbWVudCAod2hlbiBtb3VzZSBtb3ZlcylcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIGNvdW50OiB7e2NvdW50fX1cclxuICAgICA8L2ZpbGU+XHJcbiAgIDwvZXhhbXBsZT5cclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdLZXlkb3duXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBrZXlkb3duIGV2ZW50LlxyXG4gKlxyXG4gKiBAZWxlbWVudCBBTllcclxuICogQHByaW9yaXR5IDBcclxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0tleWRvd24ge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvblxyXG4gKiBrZXlkb3duLiAoRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YCBhbmQgY2FuIGJlIGludGVycm9nYXRlZCBmb3Iga2V5Q29kZSwgYWx0S2V5LCBldGMuKVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICA8ZXhhbXBsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICA8aW5wdXQgbmcta2V5ZG93bj1cImNvdW50ID0gY291bnQgKyAxXCIgbmctaW5pdD1cImNvdW50PTBcIj5cclxuICAgICAga2V5IGRvd24gY291bnQ6IHt7Y291bnR9fVxyXG4gICAgIDwvZmlsZT5cclxuICAgPC9leGFtcGxlPlxyXG4gKi9cclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBuZ0tleXVwXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBrZXl1cCBldmVudC5cclxuICpcclxuICogQGVsZW1lbnQgQU5ZXHJcbiAqIEBwcmlvcml0eSAwXHJcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdLZXl1cCB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uXHJcbiAqIGtleXVwLiAoRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YCBhbmQgY2FuIGJlIGludGVycm9nYXRlZCBmb3Iga2V5Q29kZSwgYWx0S2V5LCBldGMuKVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICA8ZXhhbXBsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgPHA+VHlwaW5nIGluIHRoZSBpbnB1dCBib3ggYmVsb3cgdXBkYXRlcyB0aGUga2V5IGNvdW50PC9wPlxyXG4gICAgICAgPGlucHV0IG5nLWtleXVwPVwiY291bnQgPSBjb3VudCArIDFcIiBuZy1pbml0PVwiY291bnQ9MFwiPiBrZXkgdXAgY291bnQ6IHt7Y291bnR9fVxyXG5cclxuICAgICAgIDxwPlR5cGluZyBpbiB0aGUgaW5wdXQgYm94IGJlbG93IHVwZGF0ZXMgdGhlIGtleWNvZGU8L3A+XHJcbiAgICAgICA8aW5wdXQgbmcta2V5dXA9XCJldmVudD0kZXZlbnRcIj5cclxuICAgICAgIDxwPmV2ZW50IGtleUNvZGU6IHt7IGV2ZW50LmtleUNvZGUgfX08L3A+XHJcbiAgICAgICA8cD5ldmVudCBhbHRLZXk6IHt7IGV2ZW50LmFsdEtleSB9fTwvcD5cclxuICAgICA8L2ZpbGU+XHJcbiAgIDwvZXhhbXBsZT5cclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdLZXlwcmVzc1xyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogU3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24ga2V5cHJlc3MgZXZlbnQuXHJcbiAqXHJcbiAqIEBlbGVtZW50IEFOWVxyXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nS2V5cHJlc3Mge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvblxyXG4gKiBrZXlwcmVzcy4gKHtAbGluayBndWlkZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YH1cclxuICogYW5kIGNhbiBiZSBpbnRlcnJvZ2F0ZWQgZm9yIGtleUNvZGUsIGFsdEtleSwgZXRjLilcclxuICpcclxuICogQGV4YW1wbGVcclxuICAgPGV4YW1wbGU+XHJcbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgPGlucHV0IG5nLWtleXByZXNzPVwiY291bnQgPSBjb3VudCArIDFcIiBuZy1pbml0PVwiY291bnQ9MFwiPlxyXG4gICAgICBrZXkgcHJlc3MgY291bnQ6IHt7Y291bnR9fVxyXG4gICAgIDwvZmlsZT5cclxuICAgPC9leGFtcGxlPlxyXG4gKi9cclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBuZ1N1Ym1pdFxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogRW5hYmxlcyBiaW5kaW5nIGFuZ3VsYXIgZXhwcmVzc2lvbnMgdG8gb25zdWJtaXQgZXZlbnRzLlxyXG4gKlxyXG4gKiBBZGRpdGlvbmFsbHkgaXQgcHJldmVudHMgdGhlIGRlZmF1bHQgYWN0aW9uICh3aGljaCBmb3IgZm9ybSBtZWFucyBzZW5kaW5nIHRoZSByZXF1ZXN0IHRvIHRoZVxyXG4gKiBzZXJ2ZXIgYW5kIHJlbG9hZGluZyB0aGUgY3VycmVudCBwYWdlKSwgYnV0IG9ubHkgaWYgdGhlIGZvcm0gZG9lcyBub3QgY29udGFpbiBgYWN0aW9uYCxcclxuICogYGRhdGEtYWN0aW9uYCwgb3IgYHgtYWN0aW9uYCBhdHRyaWJ1dGVzLlxyXG4gKlxyXG4gKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiPlxyXG4gKiAqKldhcm5pbmc6KiogQmUgY2FyZWZ1bCBub3QgdG8gY2F1c2UgXCJkb3VibGUtc3VibWlzc2lvblwiIGJ5IHVzaW5nIGJvdGggdGhlIGBuZ0NsaWNrYCBhbmRcclxuICogYG5nU3VibWl0YCBoYW5kbGVycyB0b2dldGhlci4gU2VlIHRoZVxyXG4gKiB7QGxpbmsgZm9ybSNzdWJtaXR0aW5nLWEtZm9ybS1hbmQtcHJldmVudGluZy10aGUtZGVmYXVsdC1hY3Rpb24gYGZvcm1gIGRpcmVjdGl2ZSBkb2N1bWVudGF0aW9ufVxyXG4gKiBmb3IgYSBkZXRhaWxlZCBkaXNjdXNzaW9uIG9mIHdoZW4gYG5nU3VibWl0YCBtYXkgYmUgdHJpZ2dlcmVkLlxyXG4gKiA8L2Rpdj5cclxuICpcclxuICogQGVsZW1lbnQgZm9ybVxyXG4gKiBAcHJpb3JpdHkgMFxyXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nU3VibWl0IHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWwuXHJcbiAqICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGB9KVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICA8ZXhhbXBsZSBtb2R1bGU9XCJzdWJtaXRFeGFtcGxlXCI+XHJcbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgPHNjcmlwdD5cclxuICAgICAgICBhbmd1bGFyLm1vZHVsZSgnc3VibWl0RXhhbXBsZScsIFtdKVxyXG4gICAgICAgICAgLmNvbnRyb2xsZXIoJ0V4YW1wbGVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHtcclxuICAgICAgICAgICAgJHNjb3BlLmxpc3QgPSBbXTtcclxuICAgICAgICAgICAgJHNjb3BlLnRleHQgPSAnaGVsbG8nO1xyXG4gICAgICAgICAgICAkc2NvcGUuc3VibWl0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCRzY29wZS50ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUubGlzdC5wdXNoKHRoaXMudGV4dCk7XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUudGV4dCA9ICcnO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1dKTtcclxuICAgICAgPC9zY3JpcHQ+XHJcbiAgICAgIDxmb3JtIG5nLXN1Ym1pdD1cInN1Ym1pdCgpXCIgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XHJcbiAgICAgICAgRW50ZXIgdGV4dCBhbmQgaGl0IGVudGVyOlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5nLW1vZGVsPVwidGV4dFwiIG5hbWU9XCJ0ZXh0XCIgLz5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIGlkPVwic3VibWl0XCIgdmFsdWU9XCJTdWJtaXRcIiAvPlxyXG4gICAgICAgIDxwcmU+bGlzdD17e2xpc3R9fTwvcHJlPlxyXG4gICAgICA8L2Zvcm0+XHJcbiAgICAgPC9maWxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctc3VibWl0JywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJ2xpc3QnKSkuZ2V0VGV4dCgpKS50b0JlKCdsaXN0PVtdJyk7XHJcbiAgICAgICAgIGVsZW1lbnQoYnkuY3NzKCcjc3VibWl0JykpLmNsaWNrKCk7XHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJ2xpc3QnKSkuZ2V0VGV4dCgpKS50b0NvbnRhaW4oJ2hlbGxvJyk7XHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5Lm1vZGVsKCd0ZXh0JykpLmdldEF0dHJpYnV0ZSgndmFsdWUnKSkudG9CZSgnJyk7XHJcbiAgICAgICB9KTtcclxuICAgICAgIGl0KCdzaG91bGQgaWdub3JlIGVtcHR5IHN0cmluZ3MnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygnbGlzdCcpKS5nZXRUZXh0KCkpLnRvQmUoJ2xpc3Q9W10nKTtcclxuICAgICAgICAgZWxlbWVudChieS5jc3MoJyNzdWJtaXQnKSkuY2xpY2soKTtcclxuICAgICAgICAgZWxlbWVudChieS5jc3MoJyNzdWJtaXQnKSkuY2xpY2soKTtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygnbGlzdCcpKS5nZXRUZXh0KCkpLnRvQ29udGFpbignaGVsbG8nKTtcclxuICAgICAgICB9KTtcclxuICAgICA8L2ZpbGU+XHJcbiAgIDwvZXhhbXBsZT5cclxuICovXHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBuZ0ZvY3VzXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBmb2N1cyBldmVudC5cclxuICpcclxuICogTm90ZTogQXMgdGhlIGBmb2N1c2AgZXZlbnQgaXMgZXhlY3V0ZWQgc3luY2hyb25vdXNseSB3aGVuIGNhbGxpbmcgYGlucHV0LmZvY3VzKClgXHJcbiAqIEFuZ3VsYXJKUyBleGVjdXRlcyB0aGUgZXhwcmVzc2lvbiB1c2luZyBgc2NvcGUuJGV2YWxBc3luY2AgaWYgdGhlIGV2ZW50IGlzIGZpcmVkXHJcbiAqIGR1cmluZyBhbiBgJGFwcGx5YCB0byBlbnN1cmUgYSBjb25zaXN0ZW50IHN0YXRlLlxyXG4gKlxyXG4gKiBAZWxlbWVudCB3aW5kb3csIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBhXHJcbiAqIEBwcmlvcml0eSAwXHJcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdGb2N1cyB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uXHJcbiAqIGZvY3VzLiAoe0BsaW5rIGd1aWRlL2V4cHJlc3Npb24jLWV2ZW50LSBFdmVudCBvYmplY3QgaXMgYXZhaWxhYmxlIGFzIGAkZXZlbnRgfSlcclxuICpcclxuICogQGV4YW1wbGVcclxuICogU2VlIHtAbGluayBuZy5kaXJlY3RpdmU6bmdDbGljayBuZ0NsaWNrfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIG5nQmx1clxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogU3BlY2lmeSBjdXN0b20gYmVoYXZpb3Igb24gYmx1ciBldmVudC5cclxuICpcclxuICogQSBbYmx1ciBldmVudF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL2JsdXIpIGZpcmVzIHdoZW5cclxuICogYW4gZWxlbWVudCBoYXMgbG9zdCBmb2N1cy5cclxuICpcclxuICogTm90ZTogQXMgdGhlIGBibHVyYCBldmVudCBpcyBleGVjdXRlZCBzeW5jaHJvbm91c2x5IGFsc28gZHVyaW5nIERPTSBtYW5pcHVsYXRpb25zXHJcbiAqIChlLmcuIHJlbW92aW5nIGEgZm9jdXNzZWQgaW5wdXQpLFxyXG4gKiBBbmd1bGFySlMgZXhlY3V0ZXMgdGhlIGV4cHJlc3Npb24gdXNpbmcgYHNjb3BlLiRldmFsQXN5bmNgIGlmIHRoZSBldmVudCBpcyBmaXJlZFxyXG4gKiBkdXJpbmcgYW4gYCRhcHBseWAgdG8gZW5zdXJlIGEgY29uc2lzdGVudCBzdGF0ZS5cclxuICpcclxuICogQGVsZW1lbnQgd2luZG93LCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVxyXG4gKiBAcHJpb3JpdHkgMFxyXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nQmx1ciB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uXHJcbiAqIGJsdXIuICh7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiMtZXZlbnQtIEV2ZW50IG9iamVjdCBpcyBhdmFpbGFibGUgYXMgYCRldmVudGB9KVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBTZWUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NsaWNrIG5nQ2xpY2t9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdDb3B5XHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBjb3B5IGV2ZW50LlxyXG4gKlxyXG4gKiBAZWxlbWVudCB3aW5kb3csIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBhXHJcbiAqIEBwcmlvcml0eSAwXHJcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdDb3B5IHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWx1YXRlIHVwb25cclxuICogY29weS4gKHtAbGluayBndWlkZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YH0pXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgIDxleGFtcGxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgIDxpbnB1dCBuZy1jb3B5PVwiY29waWVkPXRydWVcIiBuZy1pbml0PVwiY29waWVkPWZhbHNlOyB2YWx1ZT0nY29weSBtZSdcIiBuZy1tb2RlbD1cInZhbHVlXCI+XHJcbiAgICAgIGNvcGllZDoge3tjb3BpZWR9fVxyXG4gICAgIDwvZmlsZT5cclxuICAgPC9leGFtcGxlPlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIG5nQ3V0XHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBjdXQgZXZlbnQuXHJcbiAqXHJcbiAqIEBlbGVtZW50IHdpbmRvdywgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGFcclxuICogQHByaW9yaXR5IDBcclxuICogQHBhcmFtIHtleHByZXNzaW9ufSBuZ0N1dCB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB0byBldmFsdWF0ZSB1cG9uXHJcbiAqIGN1dC4gKHtAbGluayBndWlkZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YH0pXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgIDxleGFtcGxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgIDxpbnB1dCBuZy1jdXQ9XCJjdXQ9dHJ1ZVwiIG5nLWluaXQ9XCJjdXQ9ZmFsc2U7IHZhbHVlPSdjdXQgbWUnXCIgbmctbW9kZWw9XCJ2YWx1ZVwiPlxyXG4gICAgICBjdXQ6IHt7Y3V0fX1cclxuICAgICA8L2ZpbGU+XHJcbiAgIDwvZXhhbXBsZT5cclxuICovXHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBuZ1Bhc3RlXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBTcGVjaWZ5IGN1c3RvbSBiZWhhdmlvciBvbiBwYXN0ZSBldmVudC5cclxuICpcclxuICogQGVsZW1lbnQgd2luZG93LCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVxyXG4gKiBAcHJpb3JpdHkgMFxyXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nUGFzdGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gRXhwcmVzc2lvbn0gdG8gZXZhbHVhdGUgdXBvblxyXG4gKiBwYXN0ZS4gKHtAbGluayBndWlkZS9leHByZXNzaW9uIy1ldmVudC0gRXZlbnQgb2JqZWN0IGlzIGF2YWlsYWJsZSBhcyBgJGV2ZW50YH0pXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgIDxleGFtcGxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgIDxpbnB1dCBuZy1wYXN0ZT1cInBhc3RlPXRydWVcIiBuZy1pbml0PVwicGFzdGU9ZmFsc2VcIiBwbGFjZWhvbGRlcj0ncGFzdGUgaGVyZSc+XHJcbiAgICAgIHBhc3RlZDoge3twYXN0ZX19XHJcbiAgICAgPC9maWxlPlxyXG4gICA8L2V4YW1wbGU+XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdJZlxyXG4gKiBAcmVzdHJpY3QgQVxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogVGhlIGBuZ0lmYCBkaXJlY3RpdmUgcmVtb3ZlcyBvciByZWNyZWF0ZXMgYSBwb3J0aW9uIG9mIHRoZSBET00gdHJlZSBiYXNlZCBvbiBhblxyXG4gKiB7ZXhwcmVzc2lvbn0uIElmIHRoZSBleHByZXNzaW9uIGFzc2lnbmVkIHRvIGBuZ0lmYCBldmFsdWF0ZXMgdG8gYSBmYWxzZVxyXG4gKiB2YWx1ZSB0aGVuIHRoZSBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NLCBvdGhlcndpc2UgYSBjbG9uZSBvZiB0aGVcclxuICogZWxlbWVudCBpcyByZWluc2VydGVkIGludG8gdGhlIERPTS5cclxuICpcclxuICogYG5nSWZgIGRpZmZlcnMgZnJvbSBgbmdTaG93YCBhbmQgYG5nSGlkZWAgaW4gdGhhdCBgbmdJZmAgY29tcGxldGVseSByZW1vdmVzIGFuZCByZWNyZWF0ZXMgdGhlXHJcbiAqIGVsZW1lbnQgaW4gdGhlIERPTSByYXRoZXIgdGhhbiBjaGFuZ2luZyBpdHMgdmlzaWJpbGl0eSB2aWEgdGhlIGBkaXNwbGF5YCBjc3MgcHJvcGVydHkuICBBIGNvbW1vblxyXG4gKiBjYXNlIHdoZW4gdGhpcyBkaWZmZXJlbmNlIGlzIHNpZ25pZmljYW50IGlzIHdoZW4gdXNpbmcgY3NzIHNlbGVjdG9ycyB0aGF0IHJlbHkgb24gYW4gZWxlbWVudCdzXHJcbiAqIHBvc2l0aW9uIHdpdGhpbiB0aGUgRE9NLCBzdWNoIGFzIHRoZSBgOmZpcnN0LWNoaWxkYCBvciBgOmxhc3QtY2hpbGRgIHBzZXVkby1jbGFzc2VzLlxyXG4gKlxyXG4gKiBOb3RlIHRoYXQgd2hlbiBhbiBlbGVtZW50IGlzIHJlbW92ZWQgdXNpbmcgYG5nSWZgIGl0cyBzY29wZSBpcyBkZXN0cm95ZWQgYW5kIGEgbmV3IHNjb3BlXHJcbiAqIGlzIGNyZWF0ZWQgd2hlbiB0aGUgZWxlbWVudCBpcyByZXN0b3JlZC4gIFRoZSBzY29wZSBjcmVhdGVkIHdpdGhpbiBgbmdJZmAgaW5oZXJpdHMgZnJvbVxyXG4gKiBpdHMgcGFyZW50IHNjb3BlIHVzaW5nXHJcbiAqIFtwcm90b3R5cGFsIGluaGVyaXRhbmNlXShodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL3dpa2kvVW5kZXJzdGFuZGluZy1TY29wZXMjamF2YXNjcmlwdC1wcm90b3R5cGFsLWluaGVyaXRhbmNlKS5cclxuICogQW4gaW1wb3J0YW50IGltcGxpY2F0aW9uIG9mIHRoaXMgaXMgaWYgYG5nTW9kZWxgIGlzIHVzZWQgd2l0aGluIGBuZ0lmYCB0byBiaW5kIHRvXHJcbiAqIGEgamF2YXNjcmlwdCBwcmltaXRpdmUgZGVmaW5lZCBpbiB0aGUgcGFyZW50IHNjb3BlLiBJbiB0aGlzIGNhc2UgYW55IG1vZGlmaWNhdGlvbnMgbWFkZSB0byB0aGVcclxuICogdmFyaWFibGUgd2l0aGluIHRoZSBjaGlsZCBzY29wZSB3aWxsIG92ZXJyaWRlIChoaWRlKSB0aGUgdmFsdWUgaW4gdGhlIHBhcmVudCBzY29wZS5cclxuICpcclxuICogQWxzbywgYG5nSWZgIHJlY3JlYXRlcyBlbGVtZW50cyB1c2luZyB0aGVpciBjb21waWxlZCBzdGF0ZS4gQW4gZXhhbXBsZSBvZiB0aGlzIGJlaGF2aW9yXHJcbiAqIGlzIGlmIGFuIGVsZW1lbnQncyBjbGFzcyBhdHRyaWJ1dGUgaXMgZGlyZWN0bHkgbW9kaWZpZWQgYWZ0ZXIgaXQncyBjb21waWxlZCwgdXNpbmcgc29tZXRoaW5nIGxpa2VcclxuICogalF1ZXJ5J3MgYC5hZGRDbGFzcygpYCBtZXRob2QsIGFuZCB0aGUgZWxlbWVudCBpcyBsYXRlciByZW1vdmVkLiBXaGVuIGBuZ0lmYCByZWNyZWF0ZXMgdGhlIGVsZW1lbnRcclxuICogdGhlIGFkZGVkIGNsYXNzIHdpbGwgYmUgbG9zdCBiZWNhdXNlIHRoZSBvcmlnaW5hbCBjb21waWxlZCBzdGF0ZSBpcyB1c2VkIHRvIHJlZ2VuZXJhdGUgdGhlIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEFkZGl0aW9uYWxseSwgeW91IGNhbiBwcm92aWRlIGFuaW1hdGlvbnMgdmlhIHRoZSBgbmdBbmltYXRlYCBtb2R1bGUgdG8gYW5pbWF0ZSB0aGUgYGVudGVyYFxyXG4gKiBhbmQgYGxlYXZlYCBlZmZlY3RzLlxyXG4gKlxyXG4gKiBAYW5pbWF0aW9uc1xyXG4gKiBlbnRlciAtIGhhcHBlbnMganVzdCBhZnRlciB0aGUgYG5nSWZgIGNvbnRlbnRzIGNoYW5nZSBhbmQgYSBuZXcgRE9NIGVsZW1lbnQgaXMgY3JlYXRlZCBhbmQgaW5qZWN0ZWQgaW50byB0aGUgYG5nSWZgIGNvbnRhaW5lclxyXG4gKiBsZWF2ZSAtIGhhcHBlbnMganVzdCBiZWZvcmUgdGhlIGBuZ0lmYCBjb250ZW50cyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBET01cclxuICpcclxuICogQGVsZW1lbnQgQU5ZXHJcbiAqIEBzY29wZVxyXG4gKiBAcHJpb3JpdHkgNjAwXHJcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdJZiBJZiB0aGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaXMgZmFsc3kgdGhlblxyXG4gKiAgICAgdGhlIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00gdHJlZS4gSWYgaXQgaXMgdHJ1dGh5IGEgY29weSBvZiB0aGUgY29tcGlsZWRcclxuICogICAgIGVsZW1lbnQgaXMgYWRkZWQgdG8gdGhlIERPTSB0cmVlLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gIDxleGFtcGxlIG1vZHVsZT1cIm5nQW5pbWF0ZVwiIGRlcHM9XCJhbmd1bGFyLWFuaW1hdGUuanNcIiBhbmltYXRpb25zPVwidHJ1ZVwiPlxyXG4gICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgQ2xpY2sgbWU6IDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuZy1tb2RlbD1cImNoZWNrZWRcIiBuZy1pbml0PVwiY2hlY2tlZD10cnVlXCIgLz48YnIvPlxyXG4gICAgICBTaG93IHdoZW4gY2hlY2tlZDpcclxuICAgICAgPHNwYW4gbmctaWY9XCJjaGVja2VkXCIgY2xhc3M9XCJhbmltYXRlLWlmXCI+XHJcbiAgICAgICAgVGhpcyBpcyByZW1vdmVkIHdoZW4gdGhlIGNoZWNrYm94IGlzIHVuY2hlY2tlZC5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9maWxlPlxyXG4gICAgPGZpbGUgbmFtZT1cImFuaW1hdGlvbnMuY3NzXCI+XHJcbiAgICAgIC5hbmltYXRlLWlmIHtcclxuICAgICAgICBiYWNrZ3JvdW5kOndoaXRlO1xyXG4gICAgICAgIGJvcmRlcjoxcHggc29saWQgYmxhY2s7XHJcbiAgICAgICAgcGFkZGluZzoxMHB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAuYW5pbWF0ZS1pZi5uZy1lbnRlciwgLmFuaW1hdGUtaWYubmctbGVhdmUge1xyXG4gICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjphbGwgY3ViaWMtYmV6aWVyKDAuMjUwLCAwLjQ2MCwgMC40NTAsIDAuOTQwKSAwLjVzO1xyXG4gICAgICAgIHRyYW5zaXRpb246YWxsIGN1YmljLWJlemllcigwLjI1MCwgMC40NjAsIDAuNDUwLCAwLjk0MCkgMC41cztcclxuICAgICAgfVxyXG5cclxuICAgICAgLmFuaW1hdGUtaWYubmctZW50ZXIsXHJcbiAgICAgIC5hbmltYXRlLWlmLm5nLWxlYXZlLm5nLWxlYXZlLWFjdGl2ZSB7XHJcbiAgICAgICAgb3BhY2l0eTowO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAuYW5pbWF0ZS1pZi5uZy1sZWF2ZSxcclxuICAgICAgLmFuaW1hdGUtaWYubmctZW50ZXIubmctZW50ZXItYWN0aXZlIHtcclxuICAgICAgICBvcGFjaXR5OjE7XHJcbiAgICAgIH1cclxuICAgIDwvZmlsZT5cclxuICA8L2V4YW1wbGU+XHJcbiAqL1xyXG52YXIgbmdJZkRpcmVjdGl2ZSA9IFsnJGFuaW1hdGUnLCBmdW5jdGlvbigkYW5pbWF0ZSkge1xyXG4gIHJldHVybiB7XHJcbiAgICBtdWx0RWxlbWVudDogdHJ1ZSxcclxuICAgIHRyYW5zY2x1ZGU6ICdlbGVtZW50JyxcclxuICAgIHByaW9yaXR5OiA2MDAsXHJcbiAgICB0ZXJtaW5hbDogdHJ1ZSxcclxuICAgIHJlc3RyaWN0OiAnQScsXHJcbiAgICAkJHRsYjogdHJ1ZSxcclxuICAgIGxpbms6IGZ1bmN0aW9uKCRzY29wZSwgJGVsZW1lbnQsICRhdHRyLCBjdHJsLCAkdHJhbnNjbHVkZSkge1xyXG4gICAgICAgIHZhciBibG9jaywgY2hpbGRTY29wZSwgcHJldmlvdXNFbGVtZW50cztcclxuICAgICAgICAkc2NvcGUuJHdhdGNoKCRhdHRyLm5nSWYsIGZ1bmN0aW9uIG5nSWZXYXRjaEFjdGlvbih2YWx1ZSkge1xyXG5cclxuICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAoIWNoaWxkU2NvcGUpIHtcclxuICAgICAgICAgICAgICAkdHJhbnNjbHVkZShmdW5jdGlvbihjbG9uZSwgbmV3U2NvcGUpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkU2NvcGUgPSBuZXdTY29wZTtcclxuICAgICAgICAgICAgICAgIGNsb25lW2Nsb25lLmxlbmd0aCsrXSA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJyBlbmQgbmdJZjogJyArICRhdHRyLm5nSWYgKyAnICcpO1xyXG4gICAgICAgICAgICAgICAgLy8gTm90ZTogV2Ugb25seSBuZWVkIHRoZSBmaXJzdC9sYXN0IG5vZGUgb2YgdGhlIGNsb25lZCBub2Rlcy5cclxuICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIG5lZWQgdG8ga2VlcCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBqcWxpdGUgd3JhcHBlciBhcyBpdCBtaWdodCBiZSBjaGFuZ2VkIGxhdGVyXHJcbiAgICAgICAgICAgICAgICAvLyBieSBhIGRpcmVjdGl2ZSB3aXRoIHRlbXBsYXRlVXJsIHdoZW4gaXRzIHRlbXBsYXRlIGFycml2ZXMuXHJcbiAgICAgICAgICAgICAgICBibG9jayA9IHtcclxuICAgICAgICAgICAgICAgICAgY2xvbmU6IGNsb25lXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgJGFuaW1hdGUuZW50ZXIoY2xvbmUsICRlbGVtZW50LnBhcmVudCgpLCAkZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91c0VsZW1lbnRzKSB7XHJcbiAgICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50cy5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnRzID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2hpbGRTY29wZSkge1xyXG4gICAgICAgICAgICAgIGNoaWxkU2NvcGUuJGRlc3Ryb3koKTtcclxuICAgICAgICAgICAgICBjaGlsZFNjb3BlID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYmxvY2spIHtcclxuICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnRzID0gZ2V0QmxvY2tOb2RlcyhibG9jay5jbG9uZSk7XHJcbiAgICAgICAgICAgICAgJGFuaW1hdGUubGVhdmUocHJldmlvdXNFbGVtZW50cykudGhlbihmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHByZXZpb3VzRWxlbWVudHMgPSBudWxsO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGJsb2NrID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH07XHJcbn1dO1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdJbmNsdWRlXHJcbiAqIEByZXN0cmljdCBFQ0FcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEZldGNoZXMsIGNvbXBpbGVzIGFuZCBpbmNsdWRlcyBhbiBleHRlcm5hbCBIVE1MIGZyYWdtZW50LlxyXG4gKlxyXG4gKiBCeSBkZWZhdWx0LCB0aGUgdGVtcGxhdGUgVVJMIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIHNhbWUgZG9tYWluIGFuZCBwcm90b2NvbCBhcyB0aGVcclxuICogYXBwbGljYXRpb24gZG9jdW1lbnQuIFRoaXMgaXMgZG9uZSBieSBjYWxsaW5nIHtAbGluayAkc2NlI2dldFRydXN0ZWRSZXNvdXJjZVVybFxyXG4gKiAkc2NlLmdldFRydXN0ZWRSZXNvdXJjZVVybH0gb24gaXQuIFRvIGxvYWQgdGVtcGxhdGVzIGZyb20gb3RoZXIgZG9tYWlucyBvciBwcm90b2NvbHNcclxuICogeW91IG1heSBlaXRoZXIge0BsaW5rIG5nLiRzY2VEZWxlZ2F0ZVByb3ZpZGVyI3Jlc291cmNlVXJsV2hpdGVsaXN0IHdoaXRlbGlzdCB0aGVtfSBvclxyXG4gKiB7QGxpbmsgJHNjZSN0cnVzdEFzUmVzb3VyY2VVcmwgd3JhcCB0aGVtfSBhcyB0cnVzdGVkIHZhbHVlcy4gUmVmZXIgdG8gQW5ndWxhcidzIHtAbGlua1xyXG4gKiBuZy4kc2NlIFN0cmljdCBDb250ZXh0dWFsIEVzY2FwaW5nfS5cclxuICpcclxuICogSW4gYWRkaXRpb24sIHRoZSBicm93c2VyJ3NcclxuICogW1NhbWUgT3JpZ2luIFBvbGljeV0oaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9icm93c2Vyc2VjL3dpa2kvUGFydDIjU2FtZS1vcmlnaW5fcG9saWN5X2Zvcl9YTUxIdHRwUmVxdWVzdClcclxuICogYW5kIFtDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZyAoQ09SUyldKGh0dHA6Ly93d3cudzMub3JnL1RSL2NvcnMvKVxyXG4gKiBwb2xpY3kgbWF5IGZ1cnRoZXIgcmVzdHJpY3Qgd2hldGhlciB0aGUgdGVtcGxhdGUgaXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cclxuICogRm9yIGV4YW1wbGUsIGBuZ0luY2x1ZGVgIHdvbid0IHdvcmsgZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cyBvbiBhbGwgYnJvd3NlcnMgYW5kIGZvciBgZmlsZTovL2BcclxuICogYWNjZXNzIG9uIHNvbWUgYnJvd3NlcnMuXHJcbiAqXHJcbiAqIEBhbmltYXRpb25zXHJcbiAqIGVudGVyIC0gYW5pbWF0aW9uIGlzIHVzZWQgdG8gYnJpbmcgbmV3IGNvbnRlbnQgaW50byB0aGUgYnJvd3Nlci5cclxuICogbGVhdmUgLSBhbmltYXRpb24gaXMgdXNlZCB0byBhbmltYXRlIGV4aXN0aW5nIGNvbnRlbnQgYXdheS5cclxuICpcclxuICogVGhlIGVudGVyIGFuZCBsZWF2ZSBhbmltYXRpb24gb2NjdXIgY29uY3VycmVudGx5LlxyXG4gKlxyXG4gKiBAc2NvcGVcclxuICogQHByaW9yaXR5IDQwMFxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmdJbmNsdWRlfHNyYyBhbmd1bGFyIGV4cHJlc3Npb24gZXZhbHVhdGluZyB0byBVUkwuIElmIHRoZSBzb3VyY2UgaXMgYSBzdHJpbmcgY29uc3RhbnQsXHJcbiAqICAgICAgICAgICAgICAgICBtYWtlIHN1cmUgeW91IHdyYXAgaXQgaW4gKipzaW5nbGUqKiBxdW90ZXMsIGUuZy4gYHNyYz1cIidteVBhcnRpYWxUZW1wbGF0ZS5odG1sJ1wiYC5cclxuICogQHBhcmFtIHtzdHJpbmc9fSBvbmxvYWQgRXhwcmVzc2lvbiB0byBldmFsdWF0ZSB3aGVuIGEgbmV3IHBhcnRpYWwgaXMgbG9hZGVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZz19IGF1dG9zY3JvbGwgV2hldGhlciBgbmdJbmNsdWRlYCBzaG91bGQgY2FsbCB7QGxpbmsgbmcuJGFuY2hvclNjcm9sbFxyXG4gKiAgICAgICAgICAgICAgICAgICRhbmNob3JTY3JvbGx9IHRvIHNjcm9sbCB0aGUgdmlld3BvcnQgYWZ0ZXIgdGhlIGNvbnRlbnQgaXMgbG9hZGVkLlxyXG4gKlxyXG4gKiAgICAgICAgICAgICAgICAgIC0gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCBkaXNhYmxlIHNjcm9sbGluZy5cclxuICogICAgICAgICAgICAgICAgICAtIElmIHRoZSBhdHRyaWJ1dGUgaXMgc2V0IHdpdGhvdXQgdmFsdWUsIGVuYWJsZSBzY3JvbGxpbmcuXHJcbiAqICAgICAgICAgICAgICAgICAgLSBPdGhlcndpc2UgZW5hYmxlIHNjcm9sbGluZyBvbmx5IGlmIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnV0aHkgdmFsdWUuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgPGV4YW1wbGUgbW9kdWxlPVwiaW5jbHVkZUV4YW1wbGVcIiBkZXBzPVwiYW5ndWxhci1hbmltYXRlLmpzXCIgYW5pbWF0aW9ucz1cInRydWVcIj5cclxuICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cclxuICAgICAgIDxzZWxlY3QgbmctbW9kZWw9XCJ0ZW1wbGF0ZVwiIG5nLW9wdGlvbnM9XCJ0Lm5hbWUgZm9yIHQgaW4gdGVtcGxhdGVzXCI+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPihibGFuayk8L29wdGlvbj5cclxuICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgdXJsIG9mIHRoZSB0ZW1wbGF0ZTogPHR0Pnt7dGVtcGxhdGUudXJsfX08L3R0PlxyXG4gICAgICAgPGhyLz5cclxuICAgICAgIDxkaXYgY2xhc3M9XCJzbGlkZS1hbmltYXRlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwic2xpZGUtYW5pbWF0ZVwiIG5nLWluY2x1ZGU9XCJ0ZW1wbGF0ZS51cmxcIj48L2Rpdj5cclxuICAgICAgIDwvZGl2PlxyXG4gICAgIDwvZGl2PlxyXG4gICAgPC9maWxlPlxyXG4gICAgPGZpbGUgbmFtZT1cInNjcmlwdC5qc1wiPlxyXG4gICAgICBhbmd1bGFyLm1vZHVsZSgnaW5jbHVkZUV4YW1wbGUnLCBbJ25nQW5pbWF0ZSddKVxyXG4gICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAgICAgICAgICAkc2NvcGUudGVtcGxhdGVzID1cclxuICAgICAgICAgICAgWyB7IG5hbWU6ICd0ZW1wbGF0ZTEuaHRtbCcsIHVybDogJ3RlbXBsYXRlMS5odG1sJ30sXHJcbiAgICAgICAgICAgICAgeyBuYW1lOiAndGVtcGxhdGUyLmh0bWwnLCB1cmw6ICd0ZW1wbGF0ZTIuaHRtbCd9IF07XHJcbiAgICAgICAgICAkc2NvcGUudGVtcGxhdGUgPSAkc2NvcGUudGVtcGxhdGVzWzBdO1xyXG4gICAgICAgIH1dKTtcclxuICAgICA8L2ZpbGU+XHJcbiAgICA8ZmlsZSBuYW1lPVwidGVtcGxhdGUxLmh0bWxcIj5cclxuICAgICAgQ29udGVudCBvZiB0ZW1wbGF0ZTEuaHRtbFxyXG4gICAgPC9maWxlPlxyXG4gICAgPGZpbGUgbmFtZT1cInRlbXBsYXRlMi5odG1sXCI+XHJcbiAgICAgIENvbnRlbnQgb2YgdGVtcGxhdGUyLmh0bWxcclxuICAgIDwvZmlsZT5cclxuICAgIDxmaWxlIG5hbWU9XCJhbmltYXRpb25zLmNzc1wiPlxyXG4gICAgICAuc2xpZGUtYW5pbWF0ZS1jb250YWluZXIge1xyXG4gICAgICAgIHBvc2l0aW9uOnJlbGF0aXZlO1xyXG4gICAgICAgIGJhY2tncm91bmQ6d2hpdGU7XHJcbiAgICAgICAgYm9yZGVyOjFweCBzb2xpZCBibGFjaztcclxuICAgICAgICBoZWlnaHQ6NDBweDtcclxuICAgICAgICBvdmVyZmxvdzpoaWRkZW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5zbGlkZS1hbmltYXRlIHtcclxuICAgICAgICBwYWRkaW5nOjEwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5zbGlkZS1hbmltYXRlLm5nLWVudGVyLCAuc2xpZGUtYW5pbWF0ZS5uZy1sZWF2ZSB7XHJcbiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOmFsbCBjdWJpYy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1MCwgMC45NDApIDAuNXM7XHJcbiAgICAgICAgdHJhbnNpdGlvbjphbGwgY3ViaWMtYmV6aWVyKDAuMjUwLCAwLjQ2MCwgMC40NTAsIDAuOTQwKSAwLjVzO1xyXG5cclxuICAgICAgICBwb3NpdGlvbjphYnNvbHV0ZTtcclxuICAgICAgICB0b3A6MDtcclxuICAgICAgICBsZWZ0OjA7XHJcbiAgICAgICAgcmlnaHQ6MDtcclxuICAgICAgICBib3R0b206MDtcclxuICAgICAgICBkaXNwbGF5OmJsb2NrO1xyXG4gICAgICAgIHBhZGRpbmc6MTBweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLnNsaWRlLWFuaW1hdGUubmctZW50ZXIge1xyXG4gICAgICAgIHRvcDotNTBweDtcclxuICAgICAgfVxyXG4gICAgICAuc2xpZGUtYW5pbWF0ZS5uZy1lbnRlci5uZy1lbnRlci1hY3RpdmUge1xyXG4gICAgICAgIHRvcDowO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAuc2xpZGUtYW5pbWF0ZS5uZy1sZWF2ZSB7XHJcbiAgICAgICAgdG9wOjA7XHJcbiAgICAgIH1cclxuICAgICAgLnNsaWRlLWFuaW1hdGUubmctbGVhdmUubmctbGVhdmUtYWN0aXZlIHtcclxuICAgICAgICB0b3A6NTBweDtcclxuICAgICAgfVxyXG4gICAgPC9maWxlPlxyXG4gICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICB2YXIgdGVtcGxhdGVTZWxlY3QgPSBlbGVtZW50KGJ5Lm1vZGVsKCd0ZW1wbGF0ZScpKTtcclxuICAgICAgdmFyIGluY2x1ZGVFbGVtID0gZWxlbWVudChieS5jc3MoJ1tuZy1pbmNsdWRlXScpKTtcclxuXHJcbiAgICAgIGl0KCdzaG91bGQgbG9hZCB0ZW1wbGF0ZTEuaHRtbCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGV4cGVjdChpbmNsdWRlRWxlbS5nZXRUZXh0KCkpLnRvTWF0Y2goL0NvbnRlbnQgb2YgdGVtcGxhdGUxLmh0bWwvKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpdCgnc2hvdWxkIGxvYWQgdGVtcGxhdGUyLmh0bWwnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoYnJvd3Nlci5wYXJhbXMuYnJvd3NlciA9PSAnZmlyZWZveCcpIHtcclxuICAgICAgICAgIC8vIEZpcmVmb3ggY2FuJ3QgaGFuZGxlIHVzaW5nIHNlbGVjdHNcclxuICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9wcm90cmFjdG9yL2lzc3Vlcy80ODBcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGVtcGxhdGVTZWxlY3QuY2xpY2soKTtcclxuICAgICAgICB0ZW1wbGF0ZVNlbGVjdC5hbGwoYnkuY3NzKCdvcHRpb24nKSkuZ2V0KDIpLmNsaWNrKCk7XHJcbiAgICAgICAgZXhwZWN0KGluY2x1ZGVFbGVtLmdldFRleHQoKSkudG9NYXRjaCgvQ29udGVudCBvZiB0ZW1wbGF0ZTIuaHRtbC8pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGl0KCdzaG91bGQgY2hhbmdlIHRvIGJsYW5rJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKGJyb3dzZXIucGFyYW1zLmJyb3dzZXIgPT0gJ2ZpcmVmb3gnKSB7XHJcbiAgICAgICAgICAvLyBGaXJlZm94IGNhbid0IGhhbmRsZSB1c2luZyBzZWxlY3RzXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRlbXBsYXRlU2VsZWN0LmNsaWNrKCk7XHJcbiAgICAgICAgdGVtcGxhdGVTZWxlY3QuYWxsKGJ5LmNzcygnb3B0aW9uJykpLmdldCgwKS5jbGljaygpO1xyXG4gICAgICAgIGV4cGVjdChpbmNsdWRlRWxlbS5pc1ByZXNlbnQoKSkudG9CZShmYWxzZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgPC9maWxlPlxyXG4gIDwvZXhhbXBsZT5cclxuICovXHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBldmVudFxyXG4gKiBAbmFtZSBuZ0luY2x1ZGUjJGluY2x1ZGVDb250ZW50UmVxdWVzdGVkXHJcbiAqIEBldmVudFR5cGUgZW1pdCBvbiB0aGUgc2NvcGUgbmdJbmNsdWRlIHdhcyBkZWNsYXJlZCBpblxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogRW1pdHRlZCBldmVyeSB0aW1lIHRoZSBuZ0luY2x1ZGUgY29udGVudCBpcyByZXF1ZXN0ZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBhbmd1bGFyRXZlbnQgU3ludGhldGljIGV2ZW50IG9iamVjdC5cclxuICogQHBhcmFtIHtTdHJpbmd9IHNyYyBVUkwgb2YgY29udGVudCB0byBsb2FkLlxyXG4gKi9cclxuXHJcblxyXG4vKipcclxuICogQG5nZG9jIGV2ZW50XHJcbiAqIEBuYW1lIG5nSW5jbHVkZSMkaW5jbHVkZUNvbnRlbnRMb2FkZWRcclxuICogQGV2ZW50VHlwZSBlbWl0IG9uIHRoZSBjdXJyZW50IG5nSW5jbHVkZSBzY29wZVxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogRW1pdHRlZCBldmVyeSB0aW1lIHRoZSBuZ0luY2x1ZGUgY29udGVudCBpcyByZWxvYWRlZC5cclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IGFuZ3VsYXJFdmVudCBTeW50aGV0aWMgZXZlbnQgb2JqZWN0LlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gc3JjIFVSTCBvZiBjb250ZW50IHRvIGxvYWQuXHJcbiAqL1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZXZlbnRcclxuICogQG5hbWUgbmdJbmNsdWRlIyRpbmNsdWRlQ29udGVudEVycm9yXHJcbiAqIEBldmVudFR5cGUgZW1pdCBvbiB0aGUgc2NvcGUgbmdJbmNsdWRlIHdhcyBkZWNsYXJlZCBpblxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogRW1pdHRlZCB3aGVuIGEgdGVtcGxhdGUgSFRUUCByZXF1ZXN0IHlpZWxkcyBhbiBlcnJvbm91cyByZXNwb25zZSAoc3RhdHVzIDwgMjAwIHx8IHN0YXR1cyA+IDI5OSlcclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IGFuZ3VsYXJFdmVudCBTeW50aGV0aWMgZXZlbnQgb2JqZWN0LlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gc3JjIFVSTCBvZiBjb250ZW50IHRvIGxvYWQuXHJcbiAqL1xyXG52YXIgbmdJbmNsdWRlRGlyZWN0aXZlID0gWyckdGVtcGxhdGVSZXF1ZXN0JywgJyRhbmNob3JTY3JvbGwnLCAnJGFuaW1hdGUnLCAnJHNjZScsXHJcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCR0ZW1wbGF0ZVJlcXVlc3QsICAgJGFuY2hvclNjcm9sbCwgICAkYW5pbWF0ZSwgICAkc2NlKSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHJlc3RyaWN0OiAnRUNBJyxcclxuICAgIHByaW9yaXR5OiA0MDAsXHJcbiAgICB0ZXJtaW5hbDogdHJ1ZSxcclxuICAgIHRyYW5zY2x1ZGU6ICdlbGVtZW50JyxcclxuICAgIGNvbnRyb2xsZXI6IGFuZ3VsYXIubm9vcCxcclxuICAgIGNvbXBpbGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHIpIHtcclxuICAgICAgdmFyIHNyY0V4cCA9IGF0dHIubmdJbmNsdWRlIHx8IGF0dHIuc3JjLFxyXG4gICAgICAgICAgb25sb2FkRXhwID0gYXR0ci5vbmxvYWQgfHwgJycsXHJcbiAgICAgICAgICBhdXRvU2Nyb2xsRXhwID0gYXR0ci5hdXRvc2Nyb2xsO1xyXG5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCAkZWxlbWVudCwgJGF0dHIsIGN0cmwsICR0cmFuc2NsdWRlKSB7XHJcbiAgICAgICAgdmFyIGNoYW5nZUNvdW50ZXIgPSAwLFxyXG4gICAgICAgICAgICBjdXJyZW50U2NvcGUsXHJcbiAgICAgICAgICAgIHByZXZpb3VzRWxlbWVudCxcclxuICAgICAgICAgICAgY3VycmVudEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHZhciBjbGVhbnVwTGFzdEluY2x1ZGVDb250ZW50ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICBpZiAocHJldmlvdXNFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHByZXZpb3VzRWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50ID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjdXJyZW50U2NvcGUpIHtcclxuICAgICAgICAgICAgY3VycmVudFNjb3BlLiRkZXN0cm95KCk7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTY29wZSA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgJGFuaW1hdGUubGVhdmUoY3VycmVudEVsZW1lbnQpLnRoZW4oZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHByZXZpb3VzRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgc2NvcGUuJHdhdGNoKCRzY2UucGFyc2VBc1Jlc291cmNlVXJsKHNyY0V4cCksIGZ1bmN0aW9uIG5nSW5jbHVkZVdhdGNoQWN0aW9uKHNyYykge1xyXG4gICAgICAgICAgdmFyIGFmdGVyQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQoYXV0b1Njcm9sbEV4cCkgJiYgKCFhdXRvU2Nyb2xsRXhwIHx8IHNjb3BlLiRldmFsKGF1dG9TY3JvbGxFeHApKSkge1xyXG4gICAgICAgICAgICAgICRhbmNob3JTY3JvbGwoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHZhciB0aGlzQ2hhbmdlSWQgPSArK2NoYW5nZUNvdW50ZXI7XHJcblxyXG4gICAgICAgICAgaWYgKHNyYykge1xyXG4gICAgICAgICAgICAvL3NldCB0aGUgMm5kIHBhcmFtIHRvIHRydWUgdG8gaWdub3JlIHRoZSB0ZW1wbGF0ZSByZXF1ZXN0IGVycm9yIHNvIHRoYXQgdGhlIGlubmVyXHJcbiAgICAgICAgICAgIC8vY29udGVudHMgYW5kIHNjb3BlIGNhbiBiZSBjbGVhbmVkIHVwLlxyXG4gICAgICAgICAgICAkdGVtcGxhdGVSZXF1ZXN0KHNyYywgdHJ1ZSkudGhlbihmdW5jdGlvbihyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzQ2hhbmdlSWQgIT09IGNoYW5nZUNvdW50ZXIpIHJldHVybjtcclxuICAgICAgICAgICAgICB2YXIgbmV3U2NvcGUgPSBzY29wZS4kbmV3KCk7XHJcbiAgICAgICAgICAgICAgY3RybC50ZW1wbGF0ZSA9IHJlc3BvbnNlO1xyXG5cclxuICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIHdpbGwgYWxzbyBsaW5rIGFsbCBjaGlsZHJlbiBvZiBuZy1pbmNsdWRlIHRoYXQgd2VyZSBjb250YWluZWQgaW4gdGhlIG9yaWdpbmFsXHJcbiAgICAgICAgICAgICAgLy8gaHRtbC4gSWYgdGhhdCBjb250ZW50IGNvbnRhaW5zIGNvbnRyb2xsZXJzLCAuLi4gdGhleSBjb3VsZCBwb2xsdXRlL2NoYW5nZSB0aGUgc2NvcGUuXHJcbiAgICAgICAgICAgICAgLy8gSG93ZXZlciwgdXNpbmcgbmctaW5jbHVkZSBvbiBhbiBlbGVtZW50IHdpdGggYWRkaXRpb25hbCBjb250ZW50IGRvZXMgbm90IG1ha2Ugc2Vuc2UuLi5cclxuICAgICAgICAgICAgICAvLyBOb3RlOiBXZSBjYW4ndCByZW1vdmUgdGhlbSBpbiB0aGUgY2xvbmVBdHRjaEZuIG9mICR0cmFuc2NsdWRlIGFzIHRoYXRcclxuICAgICAgICAgICAgICAvLyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGxpbmtpbmcgdGhlIGNvbnRlbnQsIHdoaWNoIHdvdWxkIGFwcGx5IGNoaWxkXHJcbiAgICAgICAgICAgICAgLy8gZGlyZWN0aXZlcyB0byBub24gZXhpc3RpbmcgZWxlbWVudHMuXHJcbiAgICAgICAgICAgICAgdmFyIGNsb25lID0gJHRyYW5zY2x1ZGUobmV3U2NvcGUsIGZ1bmN0aW9uKGNsb25lKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhbnVwTGFzdEluY2x1ZGVDb250ZW50KCk7XHJcbiAgICAgICAgICAgICAgICAkYW5pbWF0ZS5lbnRlcihjbG9uZSwgbnVsbCwgJGVsZW1lbnQpLnRoZW4oYWZ0ZXJBbmltYXRpb24pO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBjdXJyZW50U2NvcGUgPSBuZXdTY29wZTtcclxuICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IGNsb25lO1xyXG5cclxuICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuJGVtaXQoJyRpbmNsdWRlQ29udGVudExvYWRlZCcsIHNyYyk7XHJcbiAgICAgICAgICAgICAgc2NvcGUuJGV2YWwob25sb2FkRXhwKTtcclxuICAgICAgICAgICAgfSwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXNDaGFuZ2VJZCA9PT0gY2hhbmdlQ291bnRlcikge1xyXG4gICAgICAgICAgICAgICAgY2xlYW51cExhc3RJbmNsdWRlQ29udGVudCgpO1xyXG4gICAgICAgICAgICAgICAgc2NvcGUuJGVtaXQoJyRpbmNsdWRlQ29udGVudEVycm9yJywgc3JjKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBzY29wZS4kZW1pdCgnJGluY2x1ZGVDb250ZW50UmVxdWVzdGVkJywgc3JjKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNsZWFudXBMYXN0SW5jbHVkZUNvbnRlbnQoKTtcclxuICAgICAgICAgICAgY3RybC50ZW1wbGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfTtcclxufV07XHJcblxyXG4vLyBUaGlzIGRpcmVjdGl2ZSBpcyBjYWxsZWQgZHVyaW5nIHRoZSAkdHJhbnNjbHVkZSBjYWxsIG9mIHRoZSBmaXJzdCBgbmdJbmNsdWRlYCBkaXJlY3RpdmUuXHJcbi8vIEl0IHdpbGwgcmVwbGFjZSBhbmQgY29tcGlsZSB0aGUgY29udGVudCBvZiB0aGUgZWxlbWVudCB3aXRoIHRoZSBsb2FkZWQgdGVtcGxhdGUuXHJcbi8vIFdlIG5lZWQgdGhpcyBkaXJlY3RpdmUgc28gdGhhdCB0aGUgZWxlbWVudCBjb250ZW50IGlzIGFscmVhZHkgZmlsbGVkIHdoZW5cclxuLy8gdGhlIGxpbmsgZnVuY3Rpb24gb2YgYW5vdGhlciBkaXJlY3RpdmUgb24gdGhlIHNhbWUgZWxlbWVudCBhcyBuZ0luY2x1ZGVcclxuLy8gaXMgY2FsbGVkLlxyXG52YXIgbmdJbmNsdWRlRmlsbENvbnRlbnREaXJlY3RpdmUgPSBbJyRjb21waWxlJyxcclxuICBmdW5jdGlvbigkY29tcGlsZSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdHJpY3Q6ICdFQ0EnLFxyXG4gICAgICBwcmlvcml0eTogLTQwMCxcclxuICAgICAgcmVxdWlyZTogJ25nSW5jbHVkZScsXHJcbiAgICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCAkZWxlbWVudCwgJGF0dHIsIGN0cmwpIHtcclxuICAgICAgICBpZiAoL1NWRy8udGVzdCgkZWxlbWVudFswXS50b1N0cmluZygpKSkge1xyXG4gICAgICAgICAgLy8gV2ViS2l0OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1Njk4IC0tLSBTVkcgZWxlbWVudHMgZG8gbm90XHJcbiAgICAgICAgICAvLyBzdXBwb3J0IGlubmVySFRNTCwgc28gZGV0ZWN0IHRoaXMgaGVyZSBhbmQgdHJ5IHRvIGdlbmVyYXRlIHRoZSBjb250ZW50c1xyXG4gICAgICAgICAgLy8gc3BlY2lhbGx5LlxyXG4gICAgICAgICAgJGVsZW1lbnQuZW1wdHkoKTtcclxuICAgICAgICAgICRjb21waWxlKGpxTGl0ZUJ1aWxkRnJhZ21lbnQoY3RybC50ZW1wbGF0ZSwgZG9jdW1lbnQpLmNoaWxkTm9kZXMpKHNjb3BlLFxyXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIG5hbWVzcGFjZUFkYXB0ZWRDbG9uZShjbG9uZSkge1xyXG4gICAgICAgICAgICAkZWxlbWVudC5hcHBlbmQoY2xvbmUpO1xyXG4gICAgICAgICAgfSwge2Z1dHVyZVBhcmVudEVsZW1lbnQ6ICRlbGVtZW50fSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkZWxlbWVudC5odG1sKGN0cmwudGVtcGxhdGUpO1xyXG4gICAgICAgICRjb21waWxlKCRlbGVtZW50LmNvbnRlbnRzKCkpKHNjb3BlKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XTtcclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIG5nSW5pdFxyXG4gKiBAcmVzdHJpY3QgQUNcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRoZSBgbmdJbml0YCBkaXJlY3RpdmUgYWxsb3dzIHlvdSB0byBldmFsdWF0ZSBhbiBleHByZXNzaW9uIGluIHRoZVxyXG4gKiBjdXJyZW50IHNjb3BlLlxyXG4gKlxyXG4gKiA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZXJyb3JcIj5cclxuICogVGhlIG9ubHkgYXBwcm9wcmlhdGUgdXNlIG9mIGBuZ0luaXRgIGlzIGZvciBhbGlhc2luZyBzcGVjaWFsIHByb3BlcnRpZXMgb2ZcclxuICoge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ1JlcGVhdCBgbmdSZXBlYXRgfSwgYXMgc2VlbiBpbiB0aGUgZGVtbyBiZWxvdy4gQmVzaWRlcyB0aGlzIGNhc2UsIHlvdVxyXG4gKiBzaG91bGQgdXNlIHtAbGluayBndWlkZS9jb250cm9sbGVyIGNvbnRyb2xsZXJzfSByYXRoZXIgdGhhbiBgbmdJbml0YFxyXG4gKiB0byBpbml0aWFsaXplIHZhbHVlcyBvbiBhIHNjb3BlLlxyXG4gKiA8L2Rpdj5cclxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIj5cclxuICogKipOb3RlKio6IElmIHlvdSBoYXZlIGFzc2lnbm1lbnQgaW4gYG5nSW5pdGAgYWxvbmcgd2l0aCB7QGxpbmsgbmcuJGZpbHRlciBgJGZpbHRlcmB9LCBtYWtlXHJcbiAqIHN1cmUgeW91IGhhdmUgcGFyZW50aGVzaXMgZm9yIGNvcnJlY3QgcHJlY2VkZW5jZTpcclxuICogPHByZSBjbGFzcz1cInByZXR0eXByaW50XCI+XHJcbiAqICAgPGRpdiBuZy1pbml0PVwidGVzdDEgPSAoZGF0YSB8IG9yZGVyQnk6J25hbWUnKVwiPjwvZGl2PlxyXG4gKiA8L3ByZT5cclxuICogPC9kaXY+XHJcbiAqXHJcbiAqIEBwcmlvcml0eSA0NTBcclxuICpcclxuICogQGVsZW1lbnQgQU5ZXHJcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdJbml0IHtAbGluayBndWlkZS9leHByZXNzaW9uIEV4cHJlc3Npb259IHRvIGV2YWwuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgIDxleGFtcGxlIG1vZHVsZT1cImluaXRFeGFtcGxlXCI+XHJcbiAgICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgPHNjcmlwdD5cclxuICAgICBhbmd1bGFyLm1vZHVsZSgnaW5pdEV4YW1wbGUnLCBbXSlcclxuICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAgICAgICAgICRzY29wZS5saXN0ID0gW1snYScsICdiJ10sIFsnYycsICdkJ11dO1xyXG4gICAgICAgfV0pO1xyXG4gICA8L3NjcmlwdD5cclxuICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cclxuICAgICA8ZGl2IG5nLXJlcGVhdD1cImlubmVyTGlzdCBpbiBsaXN0XCIgbmctaW5pdD1cIm91dGVySW5kZXggPSAkaW5kZXhcIj5cclxuICAgICAgIDxkaXYgbmctcmVwZWF0PVwidmFsdWUgaW4gaW5uZXJMaXN0XCIgbmctaW5pdD1cImlubmVySW5kZXggPSAkaW5kZXhcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXhhbXBsZS1pbml0XCI+bGlzdFsge3tvdXRlckluZGV4fX0gXVsge3tpbm5lckluZGV4fX0gXSA9IHt7dmFsdWV9fTs8L3NwYW4+XHJcbiAgICAgICA8L2Rpdj5cclxuICAgICA8L2Rpdj5cclxuICAgPC9kaXY+XHJcbiAgICAgPC9maWxlPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgIGl0KCdzaG91bGQgYWxpYXMgaW5kZXggcG9zaXRpb25zJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgIHZhciBlbGVtZW50cyA9IGVsZW1lbnQuYWxsKGJ5LmNzcygnLmV4YW1wbGUtaW5pdCcpKTtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnRzLmdldCgwKS5nZXRUZXh0KCkpLnRvQmUoJ2xpc3RbIDAgXVsgMCBdID0gYTsnKTtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnRzLmdldCgxKS5nZXRUZXh0KCkpLnRvQmUoJ2xpc3RbIDAgXVsgMSBdID0gYjsnKTtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnRzLmdldCgyKS5nZXRUZXh0KCkpLnRvQmUoJ2xpc3RbIDEgXVsgMCBdID0gYzsnKTtcclxuICAgICAgICAgZXhwZWN0KGVsZW1lbnRzLmdldCgzKS5nZXRUZXh0KCkpLnRvQmUoJ2xpc3RbIDEgXVsgMSBdID0gZDsnKTtcclxuICAgICAgIH0pO1xyXG4gICAgIDwvZmlsZT5cclxuICAgPC9leGFtcGxlPlxyXG4gKi9cclxudmFyIG5nSW5pdERpcmVjdGl2ZSA9IG5nRGlyZWN0aXZlKHtcclxuICBwcmlvcml0eTogNDUwLFxyXG4gIGNvbXBpbGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcHJlOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cnMpIHtcclxuICAgICAgICBzY29wZS4kZXZhbChhdHRycy5uZ0luaXQpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxufSk7XHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBuZ05vbkJpbmRhYmxlXHJcbiAqIEByZXN0cmljdCBBQ1xyXG4gKiBAcHJpb3JpdHkgMTAwMFxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogVGhlIGBuZ05vbkJpbmRhYmxlYCBkaXJlY3RpdmUgdGVsbHMgQW5ndWxhciBub3QgdG8gY29tcGlsZSBvciBiaW5kIHRoZSBjb250ZW50cyBvZiB0aGUgY3VycmVudFxyXG4gKiBET00gZWxlbWVudC4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlIGVsZW1lbnQgY29udGFpbnMgd2hhdCBhcHBlYXJzIHRvIGJlIEFuZ3VsYXIgZGlyZWN0aXZlcyBhbmRcclxuICogYmluZGluZ3MgYnV0IHdoaWNoIHNob3VsZCBiZSBpZ25vcmVkIGJ5IEFuZ3VsYXIuIFRoaXMgY291bGQgYmUgdGhlIGNhc2UgaWYgeW91IGhhdmUgYSBzaXRlIHRoYXRcclxuICogZGlzcGxheXMgc25pcHBldHMgb2YgY29kZSwgZm9yIGluc3RhbmNlLlxyXG4gKlxyXG4gKiBAZWxlbWVudCBBTllcclxuICpcclxuICogQGV4YW1wbGVcclxuICogSW4gdGhpcyBleGFtcGxlIHRoZXJlIGFyZSB0d28gbG9jYXRpb25zIHdoZXJlIGEgc2ltcGxlIGludGVycG9sYXRpb24gYmluZGluZyAoYHt7fX1gKSBpcyBwcmVzZW50LFxyXG4gKiBidXQgdGhlIG9uZSB3cmFwcGVkIGluIGBuZ05vbkJpbmRhYmxlYCBpcyBsZWZ0IGFsb25lLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICAgPGV4YW1wbGU+XHJcbiAgICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgICAgPGRpdj5Ob3JtYWw6IHt7MSArIDJ9fTwvZGl2PlxyXG4gICAgICAgIDxkaXYgbmctbm9uLWJpbmRhYmxlPklnbm9yZWQ6IHt7MSArIDJ9fTwvZGl2PlxyXG4gICAgICA8L2ZpbGU+XHJcbiAgICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctbm9uLWJpbmRhYmxlJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJzEgKyAyJykpLmdldFRleHQoKSkudG9Db250YWluKCczJyk7XHJcbiAgICAgICAgIGV4cGVjdChlbGVtZW50LmFsbChieS5jc3MoJ2RpdicpKS5sYXN0KCkuZ2V0VGV4dCgpKS50b01hdGNoKC8xIFxcKyAyLyk7XHJcbiAgICAgICB9KTtcclxuICAgICAgPC9maWxlPlxyXG4gICAgPC9leGFtcGxlPlxyXG4gKi9cclxudmFyIG5nTm9uQmluZGFibGVEaXJlY3RpdmUgPSBuZ0RpcmVjdGl2ZSh7IHRlcm1pbmFsOiB0cnVlLCBwcmlvcml0eTogMTAwMCB9KTtcclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIG5nUGx1cmFsaXplXHJcbiAqIEByZXN0cmljdCBFQVxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogYG5nUGx1cmFsaXplYCBpcyBhIGRpcmVjdGl2ZSB0aGF0IGRpc3BsYXlzIG1lc3NhZ2VzIGFjY29yZGluZyB0byBlbi1VUyBsb2NhbGl6YXRpb24gcnVsZXMuXHJcbiAqIFRoZXNlIHJ1bGVzIGFyZSBidW5kbGVkIHdpdGggYW5ndWxhci5qcywgYnV0IGNhbiBiZSBvdmVycmlkZGVuXHJcbiAqIChzZWUge0BsaW5rIGd1aWRlL2kxOG4gQW5ndWxhciBpMThufSBkZXYgZ3VpZGUpLiBZb3UgY29uZmlndXJlIG5nUGx1cmFsaXplIGRpcmVjdGl2ZVxyXG4gKiBieSBzcGVjaWZ5aW5nIHRoZSBtYXBwaW5ncyBiZXR3ZWVuXHJcbiAqIFtwbHVyYWwgY2F0ZWdvcmllc10oaHR0cDovL3VuaWNvZGUub3JnL3JlcG9zL2NsZHItdG1wL3RydW5rL2RpZmYvc3VwcGxlbWVudGFsL2xhbmd1YWdlX3BsdXJhbF9ydWxlcy5odG1sKVxyXG4gKiBhbmQgdGhlIHN0cmluZ3MgdG8gYmUgZGlzcGxheWVkLlxyXG4gKlxyXG4gKiAjIFBsdXJhbCBjYXRlZ29yaWVzIGFuZCBleHBsaWNpdCBudW1iZXIgcnVsZXNcclxuICogVGhlcmUgYXJlIHR3b1xyXG4gKiBbcGx1cmFsIGNhdGVnb3JpZXNdKGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcy9jbGRyLXRtcC90cnVuay9kaWZmL3N1cHBsZW1lbnRhbC9sYW5ndWFnZV9wbHVyYWxfcnVsZXMuaHRtbClcclxuICogaW4gQW5ndWxhcidzIGRlZmF1bHQgZW4tVVMgbG9jYWxlOiBcIm9uZVwiIGFuZCBcIm90aGVyXCIuXHJcbiAqXHJcbiAqIFdoaWxlIGEgcGx1cmFsIGNhdGVnb3J5IG1heSBtYXRjaCBtYW55IG51bWJlcnMgKGZvciBleGFtcGxlLCBpbiBlbi1VUyBsb2NhbGUsIFwib3RoZXJcIiBjYW4gbWF0Y2hcclxuICogYW55IG51bWJlciB0aGF0IGlzIG5vdCAxKSwgYW4gZXhwbGljaXQgbnVtYmVyIHJ1bGUgY2FuIG9ubHkgbWF0Y2ggb25lIG51bWJlci4gRm9yIGV4YW1wbGUsIHRoZVxyXG4gKiBleHBsaWNpdCBudW1iZXIgcnVsZSBmb3IgXCIzXCIgbWF0Y2hlcyB0aGUgbnVtYmVyIDMuIFRoZXJlIGFyZSBleGFtcGxlcyBvZiBwbHVyYWwgY2F0ZWdvcmllc1xyXG4gKiBhbmQgZXhwbGljaXQgbnVtYmVyIHJ1bGVzIHRocm91Z2hvdXQgdGhlIHJlc3Qgb2YgdGhpcyBkb2N1bWVudGF0aW9uLlxyXG4gKlxyXG4gKiAjIENvbmZpZ3VyaW5nIG5nUGx1cmFsaXplXHJcbiAqIFlvdSBjb25maWd1cmUgbmdQbHVyYWxpemUgYnkgcHJvdmlkaW5nIDIgYXR0cmlidXRlczogYGNvdW50YCBhbmQgYHdoZW5gLlxyXG4gKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhbiBvcHRpb25hbCBhdHRyaWJ1dGUsIGBvZmZzZXRgLlxyXG4gKlxyXG4gKiBUaGUgdmFsdWUgb2YgdGhlIGBjb3VudGAgYXR0cmlidXRlIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW4ge0BsaW5rIGd1aWRlL2V4cHJlc3Npb25cclxuICogQW5ndWxhciBleHByZXNzaW9ufTsgdGhlc2UgYXJlIGV2YWx1YXRlZCBvbiB0aGUgY3VycmVudCBzY29wZSBmb3IgaXRzIGJvdW5kIHZhbHVlLlxyXG4gKlxyXG4gKiBUaGUgYHdoZW5gIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIG1hcHBpbmdzIGJldHdlZW4gcGx1cmFsIGNhdGVnb3JpZXMgYW5kIHRoZSBhY3R1YWxcclxuICogc3RyaW5nIHRvIGJlIGRpc3BsYXllZC4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgc2hvdWxkIGJlIGEgSlNPTiBvYmplY3QuXHJcbiAqXHJcbiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gY29uZmlndXJlIG5nUGx1cmFsaXplOlxyXG4gKlxyXG4gKiBgYGBodG1sXHJcbiAqIDxuZy1wbHVyYWxpemUgY291bnQ9XCJwZXJzb25Db3VudFwiXHJcbiAgICAgICAgICAgICAgICAgd2hlbj1cInsnMCc6ICdOb2JvZHkgaXMgdmlld2luZy4nLFxyXG4gKiAgICAgICAgICAgICAgICAgICAgICAnb25lJzogJzEgcGVyc29uIGlzIHZpZXdpbmcuJyxcclxuICogICAgICAgICAgICAgICAgICAgICAgJ290aGVyJzogJ3t9IHBlb3BsZSBhcmUgdmlld2luZy4nfVwiPlxyXG4gKiA8L25nLXBsdXJhbGl6ZT5cclxuICpgYGBcclxuICpcclxuICogSW4gdGhlIGV4YW1wbGUsIGBcIjA6IE5vYm9keSBpcyB2aWV3aW5nLlwiYCBpcyBhbiBleHBsaWNpdCBudW1iZXIgcnVsZS4gSWYgeW91IGRpZCBub3RcclxuICogc3BlY2lmeSB0aGlzIHJ1bGUsIDAgd291bGQgYmUgbWF0Y2hlZCB0byB0aGUgXCJvdGhlclwiIGNhdGVnb3J5IGFuZCBcIjAgcGVvcGxlIGFyZSB2aWV3aW5nXCJcclxuICogd291bGQgYmUgc2hvd24gaW5zdGVhZCBvZiBcIk5vYm9keSBpcyB2aWV3aW5nXCIuIFlvdSBjYW4gc3BlY2lmeSBhbiBleHBsaWNpdCBudW1iZXIgcnVsZSBmb3JcclxuICogb3RoZXIgbnVtYmVycywgZm9yIGV4YW1wbGUgMTIsIHNvIHRoYXQgaW5zdGVhZCBvZiBzaG93aW5nIFwiMTIgcGVvcGxlIGFyZSB2aWV3aW5nXCIsIHlvdSBjYW5cclxuICogc2hvdyBcImEgZG96ZW4gcGVvcGxlIGFyZSB2aWV3aW5nXCIuXHJcbiAqXHJcbiAqIFlvdSBjYW4gdXNlIGEgc2V0IG9mIGNsb3NlZCBicmFjZXMgKGB7fWApIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBudW1iZXIgdGhhdCB5b3Ugd2FudCBzdWJzdGl0dXRlZFxyXG4gKiBpbnRvIHBsdXJhbGl6ZWQgc3RyaW5ncy4gSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIEFuZ3VsYXIgd2lsbCByZXBsYWNlIGB7fWAgd2l0aFxyXG4gKiA8c3BhbiBuZy1ub24tYmluZGFibGU+YHt7cGVyc29uQ291bnR9fWA8L3NwYW4+LiBUaGUgY2xvc2VkIGJyYWNlcyBge31gIGlzIGEgcGxhY2Vob2xkZXJcclxuICogZm9yIDxzcGFuIG5nLW5vbi1iaW5kYWJsZT57e251bWJlckV4cHJlc3Npb259fTwvc3Bhbj4uXHJcbiAqXHJcbiAqICMgQ29uZmlndXJpbmcgbmdQbHVyYWxpemUgd2l0aCBvZmZzZXRcclxuICogVGhlIGBvZmZzZXRgIGF0dHJpYnV0ZSBhbGxvd3MgZnVydGhlciBjdXN0b21pemF0aW9uIG9mIHBsdXJhbGl6ZWQgdGV4dCwgd2hpY2ggY2FuIHJlc3VsdCBpblxyXG4gKiBhIGJldHRlciB1c2VyIGV4cGVyaWVuY2UuIEZvciBleGFtcGxlLCBpbnN0ZWFkIG9mIHRoZSBtZXNzYWdlIFwiNCBwZW9wbGUgYXJlIHZpZXdpbmcgdGhpcyBkb2N1bWVudFwiLFxyXG4gKiB5b3UgbWlnaHQgZGlzcGxheSBcIkpvaG4sIEthdGUgYW5kIDIgb3RoZXJzIGFyZSB2aWV3aW5nIHRoaXMgZG9jdW1lbnRcIi5cclxuICogVGhlIG9mZnNldCBhdHRyaWJ1dGUgYWxsb3dzIHlvdSB0byBvZmZzZXQgYSBudW1iZXIgYnkgYW55IGRlc2lyZWQgdmFsdWUuXHJcbiAqIExldCdzIHRha2UgYSBsb29rIGF0IGFuIGV4YW1wbGU6XHJcbiAqXHJcbiAqIGBgYGh0bWxcclxuICogPG5nLXBsdXJhbGl6ZSBjb3VudD1cInBlcnNvbkNvdW50XCIgb2Zmc2V0PTJcclxuICogICAgICAgICAgICAgICB3aGVuPVwieycwJzogJ05vYm9keSBpcyB2aWV3aW5nLicsXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICcxJzogJ3t7cGVyc29uMX19IGlzIHZpZXdpbmcuJyxcclxuICogICAgICAgICAgICAgICAgICAgICAgJzInOiAne3twZXJzb24xfX0gYW5kIHt7cGVyc29uMn19IGFyZSB2aWV3aW5nLicsXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICdvbmUnOiAne3twZXJzb24xfX0sIHt7cGVyc29uMn19IGFuZCBvbmUgb3RoZXIgcGVyc29uIGFyZSB2aWV3aW5nLicsXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICdvdGhlcic6ICd7e3BlcnNvbjF9fSwge3twZXJzb24yfX0gYW5kIHt9IG90aGVyIHBlb3BsZSBhcmUgdmlld2luZy4nfVwiPlxyXG4gKiA8L25nLXBsdXJhbGl6ZT5cclxuICogYGBgXHJcbiAqXHJcbiAqIE5vdGljZSB0aGF0IHdlIGFyZSBzdGlsbCB1c2luZyB0d28gcGx1cmFsIGNhdGVnb3JpZXMob25lLCBvdGhlciksIGJ1dCB3ZSBhZGRlZFxyXG4gKiB0aHJlZSBleHBsaWNpdCBudW1iZXIgcnVsZXMgMCwgMSBhbmQgMi5cclxuICogV2hlbiBvbmUgcGVyc29uLCBwZXJoYXBzIEpvaG4sIHZpZXdzIHRoZSBkb2N1bWVudCwgXCJKb2huIGlzIHZpZXdpbmdcIiB3aWxsIGJlIHNob3duLlxyXG4gKiBXaGVuIHRocmVlIHBlb3BsZSB2aWV3IHRoZSBkb2N1bWVudCwgbm8gZXhwbGljaXQgbnVtYmVyIHJ1bGUgaXMgZm91bmQsIHNvXHJcbiAqIGFuIG9mZnNldCBvZiAyIGlzIHRha2VuIG9mZiAzLCBhbmQgQW5ndWxhciB1c2VzIDEgdG8gZGVjaWRlIHRoZSBwbHVyYWwgY2F0ZWdvcnkuXHJcbiAqIEluIHRoaXMgY2FzZSwgcGx1cmFsIGNhdGVnb3J5ICdvbmUnIGlzIG1hdGNoZWQgYW5kIFwiSm9obiwgTWFyeSBhbmQgb25lIG90aGVyIHBlcnNvbiBhcmUgdmlld2luZ1wiXHJcbiAqIGlzIHNob3duLlxyXG4gKlxyXG4gKiBOb3RlIHRoYXQgd2hlbiB5b3Ugc3BlY2lmeSBvZmZzZXRzLCB5b3UgbXVzdCBwcm92aWRlIGV4cGxpY2l0IG51bWJlciBydWxlcyBmb3JcclxuICogbnVtYmVycyBmcm9tIDAgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgb2Zmc2V0LiBJZiB5b3UgdXNlIGFuIG9mZnNldCBvZiAzLCBmb3IgZXhhbXBsZSxcclxuICogeW91IG11c3QgcHJvdmlkZSBleHBsaWNpdCBudW1iZXIgcnVsZXMgZm9yIDAsIDEsIDIgYW5kIDMuIFlvdSBtdXN0IGFsc28gcHJvdmlkZSBwbHVyYWwgc3RyaW5ncyBmb3JcclxuICogcGx1cmFsIGNhdGVnb3JpZXMgXCJvbmVcIiBhbmQgXCJvdGhlclwiLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ3xleHByZXNzaW9ufSBjb3VudCBUaGUgdmFyaWFibGUgdG8gYmUgYm91bmQgdG8uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB3aGVuIFRoZSBtYXBwaW5nIGJldHdlZW4gcGx1cmFsIGNhdGVnb3J5IHRvIGl0cyBjb3JyZXNwb25kaW5nIHN0cmluZ3MuXHJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb2Zmc2V0IE9mZnNldCB0byBkZWR1Y3QgZnJvbSB0aGUgdG90YWwgbnVtYmVyLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICAgPGV4YW1wbGUgbW9kdWxlPVwicGx1cmFsaXplRXhhbXBsZVwiPlxyXG4gICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgIDxzY3JpcHQ+XHJcbiAgICAgICAgICBhbmd1bGFyLm1vZHVsZSgncGx1cmFsaXplRXhhbXBsZScsIFtdKVxyXG4gICAgICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xyXG4gICAgICAgICAgICAgICRzY29wZS5wZXJzb24xID0gJ0lnb3InO1xyXG4gICAgICAgICAgICAgICRzY29wZS5wZXJzb24yID0gJ01pc2tvJztcclxuICAgICAgICAgICAgICAkc2NvcGUucGVyc29uQ291bnQgPSAxO1xyXG4gICAgICAgICAgICB9XSk7XHJcbiAgICAgICAgPC9zY3JpcHQ+XHJcbiAgICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cclxuICAgICAgICAgIFBlcnNvbiAxOjxpbnB1dCB0eXBlPVwidGV4dFwiIG5nLW1vZGVsPVwicGVyc29uMVwiIHZhbHVlPVwiSWdvclwiIC8+PGJyLz5cclxuICAgICAgICAgIFBlcnNvbiAyOjxpbnB1dCB0eXBlPVwidGV4dFwiIG5nLW1vZGVsPVwicGVyc29uMlwiIHZhbHVlPVwiTWlza29cIiAvPjxici8+XHJcbiAgICAgICAgICBOdW1iZXIgb2YgUGVvcGxlOjxpbnB1dCB0eXBlPVwidGV4dFwiIG5nLW1vZGVsPVwicGVyc29uQ291bnRcIiB2YWx1ZT1cIjFcIiAvPjxici8+XHJcblxyXG4gICAgICAgICAgPCEtLS0gRXhhbXBsZSB3aXRoIHNpbXBsZSBwbHVyYWxpemF0aW9uIHJ1bGVzIGZvciBlbiBsb2NhbGUgLS0tPlxyXG4gICAgICAgICAgV2l0aG91dCBPZmZzZXQ6XHJcbiAgICAgICAgICA8bmctcGx1cmFsaXplIGNvdW50PVwicGVyc29uQ291bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVuPVwieycwJzogJ05vYm9keSBpcyB2aWV3aW5nLicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25lJzogJzEgcGVyc29uIGlzIHZpZXdpbmcuJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdGhlcic6ICd7fSBwZW9wbGUgYXJlIHZpZXdpbmcuJ31cIj5cclxuICAgICAgICAgIDwvbmctcGx1cmFsaXplPjxicj5cclxuXHJcbiAgICAgICAgICA8IS0tLSBFeGFtcGxlIHdpdGggb2Zmc2V0IC0tLT5cclxuICAgICAgICAgIFdpdGggT2Zmc2V0KDIpOlxyXG4gICAgICAgICAgPG5nLXBsdXJhbGl6ZSBjb3VudD1cInBlcnNvbkNvdW50XCIgb2Zmc2V0PTJcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlbj1cInsnMCc6ICdOb2JvZHkgaXMgdmlld2luZy4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEnOiAne3twZXJzb24xfX0gaXMgdmlld2luZy4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzInOiAne3twZXJzb24xfX0gYW5kIHt7cGVyc29uMn19IGFyZSB2aWV3aW5nLicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25lJzogJ3t7cGVyc29uMX19LCB7e3BlcnNvbjJ9fSBhbmQgb25lIG90aGVyIHBlcnNvbiBhcmUgdmlld2luZy4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ290aGVyJzogJ3t7cGVyc29uMX19LCB7e3BlcnNvbjJ9fSBhbmQge30gb3RoZXIgcGVvcGxlIGFyZSB2aWV3aW5nLid9XCI+XHJcbiAgICAgICAgICA8L25nLXBsdXJhbGl6ZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9maWxlPlxyXG4gICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgICAgaXQoJ3Nob3VsZCBzaG93IGNvcnJlY3QgcGx1cmFsaXplZCBzdHJpbmcnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHZhciB3aXRob3V0T2Zmc2V0ID0gZWxlbWVudC5hbGwoYnkuY3NzKCduZy1wbHVyYWxpemUnKSkuZ2V0KDApO1xyXG4gICAgICAgICAgdmFyIHdpdGhPZmZzZXQgPSBlbGVtZW50LmFsbChieS5jc3MoJ25nLXBsdXJhbGl6ZScpKS5nZXQoMSk7XHJcbiAgICAgICAgICB2YXIgY291bnRJbnB1dCA9IGVsZW1lbnQoYnkubW9kZWwoJ3BlcnNvbkNvdW50JykpO1xyXG5cclxuICAgICAgICAgIGV4cGVjdCh3aXRob3V0T2Zmc2V0LmdldFRleHQoKSkudG9FcXVhbCgnMSBwZXJzb24gaXMgdmlld2luZy4nKTtcclxuICAgICAgICAgIGV4cGVjdCh3aXRoT2Zmc2V0LmdldFRleHQoKSkudG9FcXVhbCgnSWdvciBpcyB2aWV3aW5nLicpO1xyXG5cclxuICAgICAgICAgIGNvdW50SW5wdXQuY2xlYXIoKTtcclxuICAgICAgICAgIGNvdW50SW5wdXQuc2VuZEtleXMoJzAnKTtcclxuXHJcbiAgICAgICAgICBleHBlY3Qod2l0aG91dE9mZnNldC5nZXRUZXh0KCkpLnRvRXF1YWwoJ05vYm9keSBpcyB2aWV3aW5nLicpO1xyXG4gICAgICAgICAgZXhwZWN0KHdpdGhPZmZzZXQuZ2V0VGV4dCgpKS50b0VxdWFsKCdOb2JvZHkgaXMgdmlld2luZy4nKTtcclxuXHJcbiAgICAgICAgICBjb3VudElucHV0LmNsZWFyKCk7XHJcbiAgICAgICAgICBjb3VudElucHV0LnNlbmRLZXlzKCcyJyk7XHJcblxyXG4gICAgICAgICAgZXhwZWN0KHdpdGhvdXRPZmZzZXQuZ2V0VGV4dCgpKS50b0VxdWFsKCcyIHBlb3BsZSBhcmUgdmlld2luZy4nKTtcclxuICAgICAgICAgIGV4cGVjdCh3aXRoT2Zmc2V0LmdldFRleHQoKSkudG9FcXVhbCgnSWdvciBhbmQgTWlza28gYXJlIHZpZXdpbmcuJyk7XHJcblxyXG4gICAgICAgICAgY291bnRJbnB1dC5jbGVhcigpO1xyXG4gICAgICAgICAgY291bnRJbnB1dC5zZW5kS2V5cygnMycpO1xyXG5cclxuICAgICAgICAgIGV4cGVjdCh3aXRob3V0T2Zmc2V0LmdldFRleHQoKSkudG9FcXVhbCgnMyBwZW9wbGUgYXJlIHZpZXdpbmcuJyk7XHJcbiAgICAgICAgICBleHBlY3Qod2l0aE9mZnNldC5nZXRUZXh0KCkpLnRvRXF1YWwoJ0lnb3IsIE1pc2tvIGFuZCBvbmUgb3RoZXIgcGVyc29uIGFyZSB2aWV3aW5nLicpO1xyXG5cclxuICAgICAgICAgIGNvdW50SW5wdXQuY2xlYXIoKTtcclxuICAgICAgICAgIGNvdW50SW5wdXQuc2VuZEtleXMoJzQnKTtcclxuXHJcbiAgICAgICAgICBleHBlY3Qod2l0aG91dE9mZnNldC5nZXRUZXh0KCkpLnRvRXF1YWwoJzQgcGVvcGxlIGFyZSB2aWV3aW5nLicpO1xyXG4gICAgICAgICAgZXhwZWN0KHdpdGhPZmZzZXQuZ2V0VGV4dCgpKS50b0VxdWFsKCdJZ29yLCBNaXNrbyBhbmQgMiBvdGhlciBwZW9wbGUgYXJlIHZpZXdpbmcuJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaXQoJ3Nob3VsZCBzaG93IGRhdGEtYm91bmQgbmFtZXMnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHZhciB3aXRoT2Zmc2V0ID0gZWxlbWVudC5hbGwoYnkuY3NzKCduZy1wbHVyYWxpemUnKSkuZ2V0KDEpO1xyXG4gICAgICAgICAgdmFyIHBlcnNvbkNvdW50ID0gZWxlbWVudChieS5tb2RlbCgncGVyc29uQ291bnQnKSk7XHJcbiAgICAgICAgICB2YXIgcGVyc29uMSA9IGVsZW1lbnQoYnkubW9kZWwoJ3BlcnNvbjEnKSk7XHJcbiAgICAgICAgICB2YXIgcGVyc29uMiA9IGVsZW1lbnQoYnkubW9kZWwoJ3BlcnNvbjInKSk7XHJcbiAgICAgICAgICBwZXJzb25Db3VudC5jbGVhcigpO1xyXG4gICAgICAgICAgcGVyc29uQ291bnQuc2VuZEtleXMoJzQnKTtcclxuICAgICAgICAgIHBlcnNvbjEuY2xlYXIoKTtcclxuICAgICAgICAgIHBlcnNvbjEuc2VuZEtleXMoJ0RpJyk7XHJcbiAgICAgICAgICBwZXJzb24yLmNsZWFyKCk7XHJcbiAgICAgICAgICBwZXJzb24yLnNlbmRLZXlzKCdWb2p0YScpO1xyXG4gICAgICAgICAgZXhwZWN0KHdpdGhPZmZzZXQuZ2V0VGV4dCgpKS50b0VxdWFsKCdEaSwgVm9qdGEgYW5kIDIgb3RoZXIgcGVvcGxlIGFyZSB2aWV3aW5nLicpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICA8L2ZpbGU+XHJcbiAgICA8L2V4YW1wbGU+XHJcbiAqL1xyXG52YXIgbmdQbHVyYWxpemVEaXJlY3RpdmUgPSBbJyRsb2NhbGUnLCAnJGludGVycG9sYXRlJywgZnVuY3Rpb24oJGxvY2FsZSwgJGludGVycG9sYXRlKSB7XHJcbiAgdmFyIEJSQUNFID0gL3t9L2c7XHJcbiAgcmV0dXJuIHtcclxuICAgIHJlc3RyaWN0OiAnRUEnLFxyXG4gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIpIHtcclxuICAgICAgdmFyIG51bWJlckV4cCA9IGF0dHIuY291bnQsXHJcbiAgICAgICAgICB3aGVuRXhwID0gYXR0ci4kYXR0ci53aGVuICYmIGVsZW1lbnQuYXR0cihhdHRyLiRhdHRyLndoZW4pLCAvLyB3ZSBoYXZlIHt7fX0gaW4gYXR0cnNcclxuICAgICAgICAgIG9mZnNldCA9IGF0dHIub2Zmc2V0IHx8IDAsXHJcbiAgICAgICAgICB3aGVucyA9IHNjb3BlLiRldmFsKHdoZW5FeHApIHx8IHt9LFxyXG4gICAgICAgICAgd2hlbnNFeHBGbnMgPSB7fSxcclxuICAgICAgICAgIHN0YXJ0U3ltYm9sID0gJGludGVycG9sYXRlLnN0YXJ0U3ltYm9sKCksXHJcbiAgICAgICAgICBlbmRTeW1ib2wgPSAkaW50ZXJwb2xhdGUuZW5kU3ltYm9sKCksXHJcbiAgICAgICAgICBpc1doZW4gPSAvXndoZW4oTWludXMpPyguKykkLztcclxuXHJcbiAgICAgIGZvckVhY2goYXR0ciwgZnVuY3Rpb24oZXhwcmVzc2lvbiwgYXR0cmlidXRlTmFtZSkge1xyXG4gICAgICAgIGlmIChpc1doZW4udGVzdChhdHRyaWJ1dGVOYW1lKSkge1xyXG4gICAgICAgICAgd2hlbnNbbG93ZXJjYXNlKGF0dHJpYnV0ZU5hbWUucmVwbGFjZSgnd2hlbicsICcnKS5yZXBsYWNlKCdNaW51cycsICctJykpXSA9XHJcbiAgICAgICAgICAgIGVsZW1lbnQuYXR0cihhdHRyLiRhdHRyW2F0dHJpYnV0ZU5hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBmb3JFYWNoKHdoZW5zLCBmdW5jdGlvbihleHByZXNzaW9uLCBrZXkpIHtcclxuICAgICAgICB3aGVuc0V4cEZuc1trZXldID1cclxuICAgICAgICAgICRpbnRlcnBvbGF0ZShleHByZXNzaW9uLnJlcGxhY2UoQlJBQ0UsIHN0YXJ0U3ltYm9sICsgbnVtYmVyRXhwICsgJy0nICtcclxuICAgICAgICAgICAgb2Zmc2V0ICsgZW5kU3ltYm9sKSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgc2NvcGUuJHdhdGNoKGZ1bmN0aW9uIG5nUGx1cmFsaXplV2F0Y2goKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VGbG9hdChzY29wZS4kZXZhbChudW1iZXJFeHApKTtcclxuXHJcbiAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcclxuICAgICAgICAgIC8vaWYgZXhwbGljaXQgbnVtYmVyIHJ1bGUgc3VjaCBhcyAxLCAyLCAzLi4uIGlzIGRlZmluZWQsIGp1c3QgdXNlIGl0LiBPdGhlcndpc2UsXHJcbiAgICAgICAgICAvL2NoZWNrIGl0IGFnYWluc3QgcGx1cmFsaXphdGlvbiBydWxlcyBpbiAkbG9jYWxlIHNlcnZpY2VcclxuICAgICAgICAgIGlmICghKHZhbHVlIGluIHdoZW5zKSkgdmFsdWUgPSAkbG9jYWxlLnBsdXJhbENhdCh2YWx1ZSAtIG9mZnNldCk7XHJcbiAgICAgICAgICAgcmV0dXJuIHdoZW5zRXhwRm5zW3ZhbHVlXShzY29wZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGZ1bmN0aW9uIG5nUGx1cmFsaXplV2F0Y2hBY3Rpb24obmV3VmFsKSB7XHJcbiAgICAgICAgZWxlbWVudC50ZXh0KG5ld1ZhbCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH07XHJcbn1dO1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdSZXBlYXRcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRoZSBgbmdSZXBlYXRgIGRpcmVjdGl2ZSBpbnN0YW50aWF0ZXMgYSB0ZW1wbGF0ZSBvbmNlIHBlciBpdGVtIGZyb20gYSBjb2xsZWN0aW9uLiBFYWNoIHRlbXBsYXRlXHJcbiAqIGluc3RhbmNlIGdldHMgaXRzIG93biBzY29wZSwgd2hlcmUgdGhlIGdpdmVuIGxvb3AgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGNvbGxlY3Rpb24gaXRlbSxcclxuICogYW5kIGAkaW5kZXhgIGlzIHNldCB0byB0aGUgaXRlbSBpbmRleCBvciBrZXkuXHJcbiAqXHJcbiAqIFNwZWNpYWwgcHJvcGVydGllcyBhcmUgZXhwb3NlZCBvbiB0aGUgbG9jYWwgc2NvcGUgb2YgZWFjaCB0ZW1wbGF0ZSBpbnN0YW5jZSwgaW5jbHVkaW5nOlxyXG4gKlxyXG4gKiB8IFZhcmlhYmxlICB8IFR5cGUgICAgICAgICAgICB8IERldGFpbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcclxuICogfCBgJGluZGV4YCAgfCB7QHR5cGUgbnVtYmVyfSAgfCBpdGVyYXRvciBvZmZzZXQgb2YgdGhlIHJlcGVhdGVkIGVsZW1lbnQgKDAuLmxlbmd0aC0xKSAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiB8IGAkZmlyc3RgICB8IHtAdHlwZSBib29sZWFufSB8IHRydWUgaWYgdGhlIHJlcGVhdGVkIGVsZW1lbnQgaXMgZmlyc3QgaW4gdGhlIGl0ZXJhdG9yLiAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqIHwgYCRtaWRkbGVgIHwge0B0eXBlIGJvb2xlYW59IHwgdHJ1ZSBpZiB0aGUgcmVwZWF0ZWQgZWxlbWVudCBpcyBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgbGFzdCBpbiB0aGUgaXRlcmF0b3IuIHxcclxuICogfCBgJGxhc3RgICAgfCB7QHR5cGUgYm9vbGVhbn0gfCB0cnVlIGlmIHRoZSByZXBlYXRlZCBlbGVtZW50IGlzIGxhc3QgaW4gdGhlIGl0ZXJhdG9yLiAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiB8IGAkZXZlbmAgICB8IHtAdHlwZSBib29sZWFufSB8IHRydWUgaWYgdGhlIGl0ZXJhdG9yIHBvc2l0aW9uIGAkaW5kZXhgIGlzIGV2ZW4gKG90aGVyd2lzZSBmYWxzZSkuICAgICAgICAgICB8XHJcbiAqIHwgYCRvZGRgICAgIHwge0B0eXBlIGJvb2xlYW59IHwgdHJ1ZSBpZiB0aGUgaXRlcmF0b3IgcG9zaXRpb24gYCRpbmRleGAgaXMgb2RkIChvdGhlcndpc2UgZmFsc2UpLiAgICAgICAgICAgIHxcclxuICpcclxuICogQ3JlYXRpbmcgYWxpYXNlcyBmb3IgdGhlc2UgcHJvcGVydGllcyBpcyBwb3NzaWJsZSB3aXRoIHtAbGluayBuZy5kaXJlY3RpdmU6bmdJbml0IGBuZ0luaXRgfS5cclxuICogVGhpcyBtYXkgYmUgdXNlZnVsIHdoZW4sIGZvciBpbnN0YW5jZSwgbmVzdGluZyBuZ1JlcGVhdHMuXHJcbiAqXHJcbiAqICMgU3BlY2lhbCByZXBlYXQgc3RhcnQgYW5kIGVuZCBwb2ludHNcclxuICogVG8gcmVwZWF0IGEgc2VyaWVzIG9mIGVsZW1lbnRzIGluc3RlYWQgb2YganVzdCBvbmUgcGFyZW50IGVsZW1lbnQsIG5nUmVwZWF0IChhcyB3ZWxsIGFzIG90aGVyIG5nIGRpcmVjdGl2ZXMpIHN1cHBvcnRzIGV4dGVuZGluZ1xyXG4gKiB0aGUgcmFuZ2Ugb2YgdGhlIHJlcGVhdGVyIGJ5IGRlZmluaW5nIGV4cGxpY2l0IHN0YXJ0IGFuZCBlbmQgcG9pbnRzIGJ5IHVzaW5nICoqbmctcmVwZWF0LXN0YXJ0KiogYW5kICoqbmctcmVwZWF0LWVuZCoqIHJlc3BlY3RpdmVseS5cclxuICogVGhlICoqbmctcmVwZWF0LXN0YXJ0KiogZGlyZWN0aXZlIHdvcmtzIHRoZSBzYW1lIGFzICoqbmctcmVwZWF0KiosIGJ1dCB3aWxsIHJlcGVhdCBhbGwgdGhlIEhUTUwgY29kZSAoaW5jbHVkaW5nIHRoZSB0YWcgaXQncyBkZWZpbmVkIG9uKVxyXG4gKiB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBlbmRpbmcgSFRNTCB0YWcgd2hlcmUgKipuZy1yZXBlYXQtZW5kKiogaXMgcGxhY2VkLlxyXG4gKlxyXG4gKiBUaGUgZXhhbXBsZSBiZWxvdyBtYWtlcyB1c2Ugb2YgdGhpcyBmZWF0dXJlOlxyXG4gKiBgYGBodG1sXHJcbiAqICAgPGhlYWRlciBuZy1yZXBlYXQtc3RhcnQ9XCJpdGVtIGluIGl0ZW1zXCI+XHJcbiAqICAgICBIZWFkZXIge3sgaXRlbSB9fVxyXG4gKiAgIDwvaGVhZGVyPlxyXG4gKiAgIDxkaXYgY2xhc3M9XCJib2R5XCI+XHJcbiAqICAgICBCb2R5IHt7IGl0ZW0gfX1cclxuICogICA8L2Rpdj5cclxuICogICA8Zm9vdGVyIG5nLXJlcGVhdC1lbmQ+XHJcbiAqICAgICBGb290ZXIge3sgaXRlbSB9fVxyXG4gKiAgIDwvZm9vdGVyPlxyXG4gKiBgYGBcclxuICpcclxuICogQW5kIHdpdGggYW4gaW5wdXQgb2Yge0B0eXBlIFsnQScsJ0InXX0gZm9yIHRoZSBpdGVtcyB2YXJpYWJsZSBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlIG91dHB1dCB3aWxsIGV2YWx1YXRlIHRvOlxyXG4gKiBgYGBodG1sXHJcbiAqICAgPGhlYWRlcj5cclxuICogICAgIEhlYWRlciBBXHJcbiAqICAgPC9oZWFkZXI+XHJcbiAqICAgPGRpdiBjbGFzcz1cImJvZHlcIj5cclxuICogICAgIEJvZHkgQVxyXG4gKiAgIDwvZGl2PlxyXG4gKiAgIDxmb290ZXI+XHJcbiAqICAgICBGb290ZXIgQVxyXG4gKiAgIDwvZm9vdGVyPlxyXG4gKiAgIDxoZWFkZXI+XHJcbiAqICAgICBIZWFkZXIgQlxyXG4gKiAgIDwvaGVhZGVyPlxyXG4gKiAgIDxkaXYgY2xhc3M9XCJib2R5XCI+XHJcbiAqICAgICBCb2R5IEJcclxuICogICA8L2Rpdj5cclxuICogICA8Zm9vdGVyPlxyXG4gKiAgICAgRm9vdGVyIEJcclxuICogICA8L2Zvb3Rlcj5cclxuICogYGBgXHJcbiAqXHJcbiAqIFRoZSBjdXN0b20gc3RhcnQgYW5kIGVuZCBwb2ludHMgZm9yIG5nUmVwZWF0IGFsc28gc3VwcG9ydCBhbGwgb3RoZXIgSFRNTCBkaXJlY3RpdmUgc3ludGF4IGZsYXZvcnMgcHJvdmlkZWQgaW4gQW5ndWxhckpTIChzdWNoXHJcbiAqIGFzICoqZGF0YS1uZy1yZXBlYXQtc3RhcnQqKiwgKip4LW5nLXJlcGVhdC1zdGFydCoqIGFuZCAqKm5nOnJlcGVhdC1zdGFydCoqKS5cclxuICpcclxuICogQGFuaW1hdGlvbnNcclxuICogKiouZW50ZXIqKiAtIHdoZW4gYSBuZXcgaXRlbSBpcyBhZGRlZCB0byB0aGUgbGlzdCBvciB3aGVuIGFuIGl0ZW0gaXMgcmV2ZWFsZWQgYWZ0ZXIgYSBmaWx0ZXJcclxuICpcclxuICogKioubGVhdmUqKiAtIHdoZW4gYW4gaXRlbSBpcyByZW1vdmVkIGZyb20gdGhlIGxpc3Qgb3Igd2hlbiBhbiBpdGVtIGlzIGZpbHRlcmVkIG91dFxyXG4gKlxyXG4gKiAqKi5tb3ZlKiogLSB3aGVuIGFuIGFkamFjZW50IGl0ZW0gaXMgZmlsdGVyZWQgb3V0IGNhdXNpbmcgYSByZW9yZGVyIG9yIHdoZW4gdGhlIGl0ZW0gY29udGVudHMgYXJlIHJlb3JkZXJlZFxyXG4gKlxyXG4gKiBAZWxlbWVudCBBTllcclxuICogQHNjb3BlXHJcbiAqIEBwcmlvcml0eSAxMDAwXHJcbiAqIEBwYXJhbSB7cmVwZWF0X2V4cHJlc3Npb259IG5nUmVwZWF0IFRoZSBleHByZXNzaW9uIGluZGljYXRpbmcgaG93IHRvIGVudW1lcmF0ZSBhIGNvbGxlY3Rpb24uIFRoZXNlXHJcbiAqICAgZm9ybWF0cyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDpcclxuICpcclxuICogICAqIGB2YXJpYWJsZSBpbiBleHByZXNzaW9uYCDigJMgd2hlcmUgdmFyaWFibGUgaXMgdGhlIHVzZXIgZGVmaW5lZCBsb29wIHZhcmlhYmxlIGFuZCBgZXhwcmVzc2lvbmBcclxuICogICAgIGlzIGEgc2NvcGUgZXhwcmVzc2lvbiBnaXZpbmcgdGhlIGNvbGxlY3Rpb24gdG8gZW51bWVyYXRlLlxyXG4gKlxyXG4gKiAgICAgRm9yIGV4YW1wbGU6IGBhbGJ1bSBpbiBhcnRpc3QuYWxidW1zYC5cclxuICpcclxuICogICAqIGAoa2V5LCB2YWx1ZSkgaW4gZXhwcmVzc2lvbmAg4oCTIHdoZXJlIGBrZXlgIGFuZCBgdmFsdWVgIGNhbiBiZSBhbnkgdXNlciBkZWZpbmVkIGlkZW50aWZpZXJzLFxyXG4gKiAgICAgYW5kIGBleHByZXNzaW9uYCBpcyB0aGUgc2NvcGUgZXhwcmVzc2lvbiBnaXZpbmcgdGhlIGNvbGxlY3Rpb24gdG8gZW51bWVyYXRlLlxyXG4gKlxyXG4gKiAgICAgRm9yIGV4YW1wbGU6IGAobmFtZSwgYWdlKSBpbiB7J2FkYW0nOjEwLCAnYW1hbGllJzoxMn1gLlxyXG4gKlxyXG4gKiAgICogYHZhcmlhYmxlIGluIGV4cHJlc3Npb24gdHJhY2sgYnkgdHJhY2tpbmdfZXhwcmVzc2lvbmAg4oCTIFlvdSBjYW4gYWxzbyBwcm92aWRlIGFuIG9wdGlvbmFsIHRyYWNraW5nIGZ1bmN0aW9uXHJcbiAqICAgICB3aGljaCBjYW4gYmUgdXNlZCB0byBhc3NvY2lhdGUgdGhlIG9iamVjdHMgaW4gdGhlIGNvbGxlY3Rpb24gd2l0aCB0aGUgRE9NIGVsZW1lbnRzLiBJZiBubyB0cmFja2luZyBmdW5jdGlvblxyXG4gKiAgICAgaXMgc3BlY2lmaWVkIHRoZSBuZy1yZXBlYXQgYXNzb2NpYXRlcyBlbGVtZW50cyBieSBpZGVudGl0eSBpbiB0aGUgY29sbGVjdGlvbi4gSXQgaXMgYW4gZXJyb3IgdG8gaGF2ZVxyXG4gKiAgICAgbW9yZSB0aGFuIG9uZSB0cmFja2luZyBmdW5jdGlvbiB0byByZXNvbHZlIHRvIHRoZSBzYW1lIGtleS4gKFRoaXMgd291bGQgbWVhbiB0aGF0IHR3byBkaXN0aW5jdCBvYmplY3RzIGFyZVxyXG4gKiAgICAgbWFwcGVkIHRvIHRoZSBzYW1lIERPTSBlbGVtZW50LCB3aGljaCBpcyBub3QgcG9zc2libGUuKSAgRmlsdGVycyBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgZXhwcmVzc2lvbixcclxuICogICAgIGJlZm9yZSBzcGVjaWZ5aW5nIGEgdHJhY2tpbmcgZXhwcmVzc2lvbi5cclxuICpcclxuICogICAgIEZvciBleGFtcGxlOiBgaXRlbSBpbiBpdGVtc2AgaXMgZXF1aXZhbGVudCB0byBgaXRlbSBpbiBpdGVtcyB0cmFjayBieSAkaWQoaXRlbSlgLiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgRE9NIGVsZW1lbnRzXHJcbiAqICAgICB3aWxsIGJlIGFzc29jaWF0ZWQgYnkgaXRlbSBpZGVudGl0eSBpbiB0aGUgYXJyYXkuXHJcbiAqXHJcbiAqICAgICBGb3IgZXhhbXBsZTogYGl0ZW0gaW4gaXRlbXMgdHJhY2sgYnkgJGlkKGl0ZW0pYC4gQSBidWlsdCBpbiBgJGlkKClgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGFzc2lnbiBhIHVuaXF1ZVxyXG4gKiAgICAgYCQkaGFzaEtleWAgcHJvcGVydHkgdG8gZWFjaCBpdGVtIGluIHRoZSBhcnJheS4gVGhpcyBwcm9wZXJ0eSBpcyB0aGVuIHVzZWQgYXMgYSBrZXkgdG8gYXNzb2NpYXRlZCBET00gZWxlbWVudHNcclxuICogICAgIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaXRlbSBpbiB0aGUgYXJyYXkgYnkgaWRlbnRpdHkuIE1vdmluZyB0aGUgc2FtZSBvYmplY3QgaW4gYXJyYXkgd291bGQgbW92ZSB0aGUgRE9NXHJcbiAqICAgICBlbGVtZW50IGluIHRoZSBzYW1lIHdheSBpbiB0aGUgRE9NLlxyXG4gKlxyXG4gKiAgICAgRm9yIGV4YW1wbGU6IGBpdGVtIGluIGl0ZW1zIHRyYWNrIGJ5IGl0ZW0uaWRgIGlzIGEgdHlwaWNhbCBwYXR0ZXJuIHdoZW4gdGhlIGl0ZW1zIGNvbWUgZnJvbSB0aGUgZGF0YWJhc2UuIEluIHRoaXNcclxuICogICAgIGNhc2UgdGhlIG9iamVjdCBpZGVudGl0eSBkb2VzIG5vdCBtYXR0ZXIuIFR3byBvYmplY3RzIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgYXMgbG9uZyBhcyB0aGVpciBgaWRgXHJcbiAqICAgICBwcm9wZXJ0eSBpcyBzYW1lLlxyXG4gKlxyXG4gKiAgICAgRm9yIGV4YW1wbGU6IGBpdGVtIGluIGl0ZW1zIHwgZmlsdGVyOnNlYXJjaFRleHQgdHJhY2sgYnkgaXRlbS5pZGAgaXMgYSBwYXR0ZXJuIHRoYXQgbWlnaHQgYmUgdXNlZCB0byBhcHBseSBhIGZpbHRlclxyXG4gKiAgICAgdG8gaXRlbXMgaW4gY29uanVuY3Rpb24gd2l0aCBhIHRyYWNraW5nIGV4cHJlc3Npb24uXHJcbiAqXHJcbiAqICAgKiBgdmFyaWFibGUgaW4gZXhwcmVzc2lvbiBhcyBhbGlhc19leHByZXNzaW9uYCDigJMgWW91IGNhbiBhbHNvIHByb3ZpZGUgYW4gb3B0aW9uYWwgYWxpYXMgZXhwcmVzc2lvbiB3aGljaCB3aWxsIHRoZW4gc3RvcmUgdGhlXHJcbiAqICAgICBpbnRlcm1lZGlhdGUgcmVzdWx0cyBvZiB0aGUgcmVwZWF0ZXIgYWZ0ZXIgdGhlIGZpbHRlcnMgaGF2ZSBiZWVuIGFwcGxpZWQuIFR5cGljYWxseSB0aGlzIGlzIHVzZWQgdG8gcmVuZGVyIGEgc3BlY2lhbCBtZXNzYWdlXHJcbiAqICAgICB3aGVuIGEgZmlsdGVyIGlzIGFjdGl2ZSBvbiB0aGUgcmVwZWF0ZXIsIGJ1dCB0aGUgZmlsdGVyZWQgcmVzdWx0IHNldCBpcyBlbXB0eS5cclxuICpcclxuICogICAgIEZvciBleGFtcGxlOiBgaXRlbSBpbiBpdGVtcyB8IGZpbHRlcjp4IGFzIHJlc3VsdHNgIHdpbGwgc3RvcmUgdGhlIGZyYWdtZW50IG9mIHRoZSByZXBlYXRlZCBpdGVtcyBhcyBgcmVzdWx0c2AsIGJ1dCBvbmx5IGFmdGVyXHJcbiAqICAgICB0aGUgaXRlbXMgaGF2ZSBiZWVuIHByb2Nlc3NlZCB0aHJvdWdoIHRoZSBmaWx0ZXIuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIFRoaXMgZXhhbXBsZSBpbml0aWFsaXplcyB0aGUgc2NvcGUgdG8gYSBsaXN0IG9mIG5hbWVzIGFuZFxyXG4gKiB0aGVuIHVzZXMgYG5nUmVwZWF0YCB0byBkaXNwbGF5IGV2ZXJ5IHBlcnNvbjpcclxuICA8ZXhhbXBsZSBtb2R1bGU9XCJuZ0FuaW1hdGVcIiBkZXBzPVwiYW5ndWxhci1hbmltYXRlLmpzXCIgYW5pbWF0aW9ucz1cInRydWVcIj5cclxuICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgIDxkaXYgbmctaW5pdD1cImZyaWVuZHMgPSBbXHJcbiAgICAgICAge25hbWU6J0pvaG4nLCBhZ2U6MjUsIGdlbmRlcjonYm95J30sXHJcbiAgICAgICAge25hbWU6J0plc3NpZScsIGFnZTozMCwgZ2VuZGVyOidnaXJsJ30sXHJcbiAgICAgICAge25hbWU6J0pvaGFubmEnLCBhZ2U6MjgsIGdlbmRlcjonZ2lybCd9LFxyXG4gICAgICAgIHtuYW1lOidKb3knLCBhZ2U6MTUsIGdlbmRlcjonZ2lybCd9LFxyXG4gICAgICAgIHtuYW1lOidNYXJ5JywgYWdlOjI4LCBnZW5kZXI6J2dpcmwnfSxcclxuICAgICAgICB7bmFtZTonUGV0ZXInLCBhZ2U6OTUsIGdlbmRlcjonYm95J30sXHJcbiAgICAgICAge25hbWU6J1NlYmFzdGlhbicsIGFnZTo1MCwgZ2VuZGVyOidib3knfSxcclxuICAgICAgICB7bmFtZTonRXJpa2EnLCBhZ2U6MjcsIGdlbmRlcjonZ2lybCd9LFxyXG4gICAgICAgIHtuYW1lOidQYXRyaWNrJywgYWdlOjQwLCBnZW5kZXI6J2JveSd9LFxyXG4gICAgICAgIHtuYW1lOidTYW1hbnRoYScsIGFnZTo2MCwgZ2VuZGVyOidnaXJsJ31cclxuICAgICAgXVwiPlxyXG4gICAgICAgIEkgaGF2ZSB7e2ZyaWVuZHMubGVuZ3RofX0gZnJpZW5kcy4gVGhleSBhcmU6XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJzZWFyY2hcIiBuZy1tb2RlbD1cInFcIiBwbGFjZWhvbGRlcj1cImZpbHRlciBmcmllbmRzLi4uXCIgLz5cclxuICAgICAgICA8dWwgY2xhc3M9XCJleGFtcGxlLWFuaW1hdGUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJhbmltYXRlLXJlcGVhdFwiIG5nLXJlcGVhdD1cImZyaWVuZCBpbiBmcmllbmRzIHwgZmlsdGVyOnEgYXMgcmVzdWx0c1wiPlxyXG4gICAgICAgICAgICBbe3skaW5kZXggKyAxfX1dIHt7ZnJpZW5kLm5hbWV9fSB3aG8gaXMge3tmcmllbmQuYWdlfX0geWVhcnMgb2xkLlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDxsaSBjbGFzcz1cImFuaW1hdGUtcmVwZWF0XCIgbmctaWY9XCJyZXN1bHRzLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgIDxzdHJvbmc+Tm8gcmVzdWx0cyBmb3VuZC4uLjwvc3Ryb25nPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZmlsZT5cclxuICAgIDxmaWxlIG5hbWU9XCJhbmltYXRpb25zLmNzc1wiPlxyXG4gICAgICAuZXhhbXBsZS1hbmltYXRlLWNvbnRhaW5lciB7XHJcbiAgICAgICAgYmFja2dyb3VuZDp3aGl0ZTtcclxuICAgICAgICBib3JkZXI6MXB4IHNvbGlkIGJsYWNrO1xyXG4gICAgICAgIGxpc3Qtc3R5bGU6bm9uZTtcclxuICAgICAgICBtYXJnaW46MDtcclxuICAgICAgICBwYWRkaW5nOjAgMTBweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmFuaW1hdGUtcmVwZWF0IHtcclxuICAgICAgICBsaW5lLWhlaWdodDo0MHB4O1xyXG4gICAgICAgIGxpc3Qtc3R5bGU6bm9uZTtcclxuICAgICAgICBib3gtc2l6aW5nOmJvcmRlci1ib3g7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5hbmltYXRlLXJlcGVhdC5uZy1tb3ZlLFxyXG4gICAgICAuYW5pbWF0ZS1yZXBlYXQubmctZW50ZXIsXHJcbiAgICAgIC5hbmltYXRlLXJlcGVhdC5uZy1sZWF2ZSB7XHJcbiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOmFsbCBsaW5lYXIgMC41cztcclxuICAgICAgICB0cmFuc2l0aW9uOmFsbCBsaW5lYXIgMC41cztcclxuICAgICAgfVxyXG5cclxuICAgICAgLmFuaW1hdGUtcmVwZWF0Lm5nLWxlYXZlLm5nLWxlYXZlLWFjdGl2ZSxcclxuICAgICAgLmFuaW1hdGUtcmVwZWF0Lm5nLW1vdmUsXHJcbiAgICAgIC5hbmltYXRlLXJlcGVhdC5uZy1lbnRlciB7XHJcbiAgICAgICAgb3BhY2l0eTowO1xyXG4gICAgICAgIG1heC1oZWlnaHQ6MDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmFuaW1hdGUtcmVwZWF0Lm5nLWxlYXZlLFxyXG4gICAgICAuYW5pbWF0ZS1yZXBlYXQubmctbW92ZS5uZy1tb3ZlLWFjdGl2ZSxcclxuICAgICAgLmFuaW1hdGUtcmVwZWF0Lm5nLWVudGVyLm5nLWVudGVyLWFjdGl2ZSB7XHJcbiAgICAgICAgb3BhY2l0eToxO1xyXG4gICAgICAgIG1heC1oZWlnaHQ6NDBweDtcclxuICAgICAgfVxyXG4gICAgPC9maWxlPlxyXG4gICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICB2YXIgZnJpZW5kcyA9IGVsZW1lbnQuYWxsKGJ5LnJlcGVhdGVyKCdmcmllbmQgaW4gZnJpZW5kcycpKTtcclxuXHJcbiAgICAgIGl0KCdzaG91bGQgcmVuZGVyIGluaXRpYWwgZGF0YSBzZXQnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBleHBlY3QoZnJpZW5kcy5jb3VudCgpKS50b0JlKDEwKTtcclxuICAgICAgICBleHBlY3QoZnJpZW5kcy5nZXQoMCkuZ2V0VGV4dCgpKS50b0VxdWFsKCdbMV0gSm9obiB3aG8gaXMgMjUgeWVhcnMgb2xkLicpO1xyXG4gICAgICAgIGV4cGVjdChmcmllbmRzLmdldCgxKS5nZXRUZXh0KCkpLnRvRXF1YWwoJ1syXSBKZXNzaWUgd2hvIGlzIDMwIHllYXJzIG9sZC4nKTtcclxuICAgICAgICBleHBlY3QoZnJpZW5kcy5sYXN0KCkuZ2V0VGV4dCgpKS50b0VxdWFsKCdbMTBdIFNhbWFudGhhIHdobyBpcyA2MCB5ZWFycyBvbGQuJyk7XHJcbiAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygnZnJpZW5kcy5sZW5ndGgnKSkuZ2V0VGV4dCgpKVxyXG4gICAgICAgICAgICAudG9NYXRjaChcIkkgaGF2ZSAxMCBmcmllbmRzLiBUaGV5IGFyZTpcIik7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgIGl0KCdzaG91bGQgdXBkYXRlIHJlcGVhdGVyIHdoZW4gZmlsdGVyIHByZWRpY2F0ZSBjaGFuZ2VzJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgIGV4cGVjdChmcmllbmRzLmNvdW50KCkpLnRvQmUoMTApO1xyXG5cclxuICAgICAgICAgZWxlbWVudChieS5tb2RlbCgncScpKS5zZW5kS2V5cygnbWEnKTtcclxuXHJcbiAgICAgICAgIGV4cGVjdChmcmllbmRzLmNvdW50KCkpLnRvQmUoMik7XHJcbiAgICAgICAgIGV4cGVjdChmcmllbmRzLmdldCgwKS5nZXRUZXh0KCkpLnRvRXF1YWwoJ1sxXSBNYXJ5IHdobyBpcyAyOCB5ZWFycyBvbGQuJyk7XHJcbiAgICAgICAgIGV4cGVjdChmcmllbmRzLmxhc3QoKS5nZXRUZXh0KCkpLnRvRXF1YWwoJ1syXSBTYW1hbnRoYSB3aG8gaXMgNjAgeWVhcnMgb2xkLicpO1xyXG4gICAgICAgfSk7XHJcbiAgICAgIDwvZmlsZT5cclxuICAgIDwvZXhhbXBsZT5cclxuICovXHJcbnZhciBuZ1JlcGVhdERpcmVjdGl2ZSA9IFsnJHBhcnNlJywgJyRhbmltYXRlJywgZnVuY3Rpb24oJHBhcnNlLCAkYW5pbWF0ZSkge1xyXG4gIHZhciBOR19SRU1PVkVEID0gJyQkTkdfUkVNT1ZFRCc7XHJcbiAgdmFyIG5nUmVwZWF0TWluRXJyID0gbWluRXJyKCduZ1JlcGVhdCcpO1xyXG5cclxuICB2YXIgdXBkYXRlU2NvcGUgPSBmdW5jdGlvbihzY29wZSwgaW5kZXgsIHZhbHVlSWRlbnRpZmllciwgdmFsdWUsIGtleUlkZW50aWZpZXIsIGtleSwgYXJyYXlMZW5ndGgpIHtcclxuICAgIC8vIFRPRE8ocGVyZik6IGdlbmVyYXRlIHNldHRlcnMgdG8gc2hhdmUgb2ZmIH40MG1zIG9yIDEtMS41JVxyXG4gICAgc2NvcGVbdmFsdWVJZGVudGlmaWVyXSA9IHZhbHVlO1xyXG4gICAgaWYgKGtleUlkZW50aWZpZXIpIHNjb3BlW2tleUlkZW50aWZpZXJdID0ga2V5O1xyXG4gICAgc2NvcGUuJGluZGV4ID0gaW5kZXg7XHJcbiAgICBzY29wZS4kZmlyc3QgPSAoaW5kZXggPT09IDApO1xyXG4gICAgc2NvcGUuJGxhc3QgPSAoaW5kZXggPT09IChhcnJheUxlbmd0aCAtIDEpKTtcclxuICAgIHNjb3BlLiRtaWRkbGUgPSAhKHNjb3BlLiRmaXJzdCB8fCBzY29wZS4kbGFzdCk7XHJcbiAgICAvLyBqc2hpbnQgYml0d2lzZTogZmFsc2VcclxuICAgIHNjb3BlLiRvZGQgPSAhKHNjb3BlLiRldmVuID0gKGluZGV4JjEpID09PSAwKTtcclxuICAgIC8vIGpzaGludCBiaXR3aXNlOiB0cnVlXHJcbiAgfTtcclxuXHJcbiAgdmFyIGdldEJsb2NrU3RhcnQgPSBmdW5jdGlvbihibG9jaykge1xyXG4gICAgcmV0dXJuIGJsb2NrLmNsb25lWzBdO1xyXG4gIH07XHJcblxyXG4gIHZhciBnZXRCbG9ja0VuZCA9IGZ1bmN0aW9uKGJsb2NrKSB7XHJcbiAgICByZXR1cm4gYmxvY2suY2xvbmVbYmxvY2suY2xvbmUubGVuZ3RoIC0gMV07XHJcbiAgfTtcclxuXHJcblxyXG4gIHJldHVybiB7XHJcbiAgICByZXN0cmljdDogJ0EnLFxyXG4gICAgbXVsdEVsZW1lbnQ6IHRydWUsXHJcbiAgICB0cmFuc2NsdWRlOiAnZWxlbWVudCcsXHJcbiAgICBwcmlvcml0eTogMTAwMCxcclxuICAgIHRlcm1pbmFsOiB0cnVlLFxyXG4gICAgJCR0bGI6IHRydWUsXHJcbiAgICBjb21waWxlOiBmdW5jdGlvbiBuZ1JlcGVhdENvbXBpbGUoJGVsZW1lbnQsICRhdHRyKSB7XHJcbiAgICAgIHZhciBleHByZXNzaW9uID0gJGF0dHIubmdSZXBlYXQ7XHJcbiAgICAgIHZhciBuZ1JlcGVhdEVuZENvbW1lbnQgPSBkb2N1bWVudC5jcmVhdGVDb21tZW50KCcgZW5kIG5nUmVwZWF0OiAnICsgZXhwcmVzc2lvbiArICcgJyk7XHJcblxyXG4gICAgICB2YXIgbWF0Y2ggPSBleHByZXNzaW9uLm1hdGNoKC9eXFxzKihbXFxzXFxTXSs/KVxccytpblxccysoW1xcc1xcU10rPykoPzpcXHMrYXNcXHMrKFtcXHNcXFNdKz8pKT8oPzpcXHMrdHJhY2tcXHMrYnlcXHMrKFtcXHNcXFNdKz8pKT9cXHMqJC8pO1xyXG5cclxuICAgICAgaWYgKCFtYXRjaCkge1xyXG4gICAgICAgIHRocm93IG5nUmVwZWF0TWluRXJyKCdpZXhwJywgXCJFeHBlY3RlZCBleHByZXNzaW9uIGluIGZvcm0gb2YgJ19pdGVtXyBpbiBfY29sbGVjdGlvbl9bIHRyYWNrIGJ5IF9pZF9dJyBidXQgZ290ICd7MH0nLlwiLFxyXG4gICAgICAgICAgICBleHByZXNzaW9uKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGxocyA9IG1hdGNoWzFdO1xyXG4gICAgICB2YXIgcmhzID0gbWF0Y2hbMl07XHJcbiAgICAgIHZhciBhbGlhc0FzID0gbWF0Y2hbM107XHJcbiAgICAgIHZhciB0cmFja0J5RXhwID0gbWF0Y2hbNF07XHJcblxyXG4gICAgICBtYXRjaCA9IGxocy5tYXRjaCgvXig/OihbXFwkXFx3XSspfFxcKChbXFwkXFx3XSspXFxzKixcXHMqKFtcXCRcXHddKylcXCkpJC8pO1xyXG5cclxuICAgICAgaWYgKCFtYXRjaCkge1xyXG4gICAgICAgIHRocm93IG5nUmVwZWF0TWluRXJyKCdpaWRleHAnLCBcIidfaXRlbV8nIGluICdfaXRlbV8gaW4gX2NvbGxlY3Rpb25fJyBzaG91bGQgYmUgYW4gaWRlbnRpZmllciBvciAnKF9rZXlfLCBfdmFsdWVfKScgZXhwcmVzc2lvbiwgYnV0IGdvdCAnezB9Jy5cIixcclxuICAgICAgICAgICAgbGhzKTtcclxuICAgICAgfVxyXG4gICAgICB2YXIgdmFsdWVJZGVudGlmaWVyID0gbWF0Y2hbM10gfHwgbWF0Y2hbMV07XHJcbiAgICAgIHZhciBrZXlJZGVudGlmaWVyID0gbWF0Y2hbMl07XHJcblxyXG4gICAgICBpZiAoYWxpYXNBcyAmJiAoIS9eWyRhLXpBLVpfXVskYS16QS1aMC05X10qJC8udGVzdChhbGlhc0FzKSB8fFxyXG4gICAgICAgICAgL14obnVsbHx1bmRlZmluZWR8dGhpc3xcXCRpbmRleHxcXCRmaXJzdHxcXCRtaWRkbGV8XFwkbGFzdHxcXCRldmVufFxcJG9kZHxcXCRwYXJlbnQpJC8udGVzdChhbGlhc0FzKSkpIHtcclxuICAgICAgICB0aHJvdyBuZ1JlcGVhdE1pbkVycignYmFkaWRlbnQnLCBcImFsaWFzICd7MH0nIGlzIGludmFsaWQgLS0tIG11c3QgYmUgYSB2YWxpZCBKUyBpZGVudGlmaWVyIHdoaWNoIGlzIG5vdCBhIHJlc2VydmVkIG5hbWUuXCIsXHJcbiAgICAgICAgICBhbGlhc0FzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHRyYWNrQnlFeHBHZXR0ZXIsIHRyYWNrQnlJZEV4cEZuLCB0cmFja0J5SWRBcnJheUZuLCB0cmFja0J5SWRPYmpGbjtcclxuICAgICAgdmFyIGhhc2hGbkxvY2FscyA9IHskaWQ6IGhhc2hLZXl9O1xyXG5cclxuICAgICAgaWYgKHRyYWNrQnlFeHApIHtcclxuICAgICAgICB0cmFja0J5RXhwR2V0dGVyID0gJHBhcnNlKHRyYWNrQnlFeHApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRyYWNrQnlJZEFycmF5Rm4gPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgICByZXR1cm4gaGFzaEtleSh2YWx1ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cmFja0J5SWRPYmpGbiA9IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gbmdSZXBlYXRMaW5rKCRzY29wZSwgJGVsZW1lbnQsICRhdHRyLCBjdHJsLCAkdHJhbnNjbHVkZSkge1xyXG5cclxuICAgICAgICBpZiAodHJhY2tCeUV4cEdldHRlcikge1xyXG4gICAgICAgICAgdHJhY2tCeUlkRXhwRm4gPSBmdW5jdGlvbihrZXksIHZhbHVlLCBpbmRleCkge1xyXG4gICAgICAgICAgICAvLyBhc3NpZ24ga2V5LCB2YWx1ZSwgYW5kICRpbmRleCB0byB0aGUgbG9jYWxzIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBpbiBoYXNoIGZ1bmN0aW9uc1xyXG4gICAgICAgICAgICBpZiAoa2V5SWRlbnRpZmllcikgaGFzaEZuTG9jYWxzW2tleUlkZW50aWZpZXJdID0ga2V5O1xyXG4gICAgICAgICAgICBoYXNoRm5Mb2NhbHNbdmFsdWVJZGVudGlmaWVyXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBoYXNoRm5Mb2NhbHMuJGluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFja0J5RXhwR2V0dGVyKCRzY29wZSwgaGFzaEZuTG9jYWxzKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTdG9yZSBhIGxpc3Qgb2YgZWxlbWVudHMgZnJvbSBwcmV2aW91cyBydW4uIFRoaXMgaXMgYSBoYXNoIHdoZXJlIGtleSBpcyB0aGUgaXRlbSBmcm9tIHRoZVxyXG4gICAgICAgIC8vIGl0ZXJhdG9yLCBhbmQgdGhlIHZhbHVlIGlzIG9iamVjdHMgd2l0aCBmb2xsb3dpbmcgcHJvcGVydGllcy5cclxuICAgICAgICAvLyAgIC0gc2NvcGU6IGJvdW5kIHNjb3BlXHJcbiAgICAgICAgLy8gICAtIGVsZW1lbnQ6IHByZXZpb3VzIGVsZW1lbnQuXHJcbiAgICAgICAgLy8gICAtIGluZGV4OiBwb3NpdGlvblxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gV2UgYXJlIHVzaW5nIG5vLXByb3RvIG9iamVjdCBzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCBpbmhlcml0ZWQgcHJvcHMgdmlhXHJcbiAgICAgICAgLy8gaGFzT3duUHJvcGVydHkuXHJcbiAgICAgICAgdmFyIGxhc3RCbG9ja01hcCA9IGNyZWF0ZU1hcCgpO1xyXG5cclxuICAgICAgICAvL3dhdGNoIHByb3BzXHJcbiAgICAgICAgJHNjb3BlLiR3YXRjaENvbGxlY3Rpb24ocmhzLCBmdW5jdGlvbiBuZ1JlcGVhdEFjdGlvbihjb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICB2YXIgaW5kZXgsIGxlbmd0aCxcclxuICAgICAgICAgICAgICBwcmV2aW91c05vZGUgPSAkZWxlbWVudFswXSwgICAgIC8vIG5vZGUgdGhhdCBjbG9uZWQgbm9kZXMgc2hvdWxkIGJlIGluc2VydGVkIGFmdGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplZCB0byB0aGUgY29tbWVudCBub2RlIGFuY2hvclxyXG4gICAgICAgICAgICAgIG5leHROb2RlLFxyXG4gICAgICAgICAgICAgIC8vIFNhbWUgYXMgbGFzdEJsb2NrTWFwIGJ1dCBpdCBoYXMgdGhlIGN1cnJlbnQgc3RhdGUuIEl0IHdpbGwgYmVjb21lIHRoZVxyXG4gICAgICAgICAgICAgIC8vIGxhc3RCbG9ja01hcCBvbiB0aGUgbmV4dCBpdGVyYXRpb24uXHJcbiAgICAgICAgICAgICAgbmV4dEJsb2NrTWFwID0gY3JlYXRlTWFwKCksXHJcbiAgICAgICAgICAgICAgY29sbGVjdGlvbkxlbmd0aCxcclxuICAgICAgICAgICAgICBrZXksIHZhbHVlLCAvLyBrZXkvdmFsdWUgb2YgaXRlcmF0aW9uXHJcbiAgICAgICAgICAgICAgdHJhY2tCeUlkLFxyXG4gICAgICAgICAgICAgIHRyYWNrQnlJZEZuLFxyXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25LZXlzLFxyXG4gICAgICAgICAgICAgIGJsb2NrLCAgICAgICAvLyBsYXN0IG9iamVjdCBpbmZvcm1hdGlvbiB7c2NvcGUsIGVsZW1lbnQsIGlkfVxyXG4gICAgICAgICAgICAgIG5leHRCbG9ja09yZGVyLFxyXG4gICAgICAgICAgICAgIGVsZW1lbnRzVG9SZW1vdmU7XHJcblxyXG4gICAgICAgICAgaWYgKGFsaWFzQXMpIHtcclxuICAgICAgICAgICAgJHNjb3BlW2FsaWFzQXNdID0gY29sbGVjdGlvbjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcclxuICAgICAgICAgICAgY29sbGVjdGlvbktleXMgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICB0cmFja0J5SWRGbiA9IHRyYWNrQnlJZEV4cEZuIHx8IHRyYWNrQnlJZEFycmF5Rm47XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0cmFja0J5SWRGbiA9IHRyYWNrQnlJZEV4cEZuIHx8IHRyYWNrQnlJZE9iakZuO1xyXG4gICAgICAgICAgICAvLyBpZiBvYmplY3QsIGV4dHJhY3Qga2V5cywgc29ydCB0aGVtIGFuZCB1c2UgdG8gZGV0ZXJtaW5lIG9yZGVyIG9mIGl0ZXJhdGlvbiBvdmVyIG9iaiBwcm9wc1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uS2V5cyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpdGVtS2V5IGluIGNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICBpZiAoY29sbGVjdGlvbi5oYXNPd25Qcm9wZXJ0eShpdGVtS2V5KSAmJiBpdGVtS2V5LmNoYXJBdCgwKSAhPSAnJCcpIHtcclxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25LZXlzLnB1c2goaXRlbUtleSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb25LZXlzLnNvcnQoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb2xsZWN0aW9uTGVuZ3RoID0gY29sbGVjdGlvbktleXMubGVuZ3RoO1xyXG4gICAgICAgICAgbmV4dEJsb2NrT3JkZXIgPSBuZXcgQXJyYXkoY29sbGVjdGlvbkxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgLy8gbG9jYXRlIGV4aXN0aW5nIGl0ZW1zXHJcbiAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBjb2xsZWN0aW9uTGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGtleSA9IChjb2xsZWN0aW9uID09PSBjb2xsZWN0aW9uS2V5cykgPyBpbmRleCA6IGNvbGxlY3Rpb25LZXlzW2luZGV4XTtcclxuICAgICAgICAgICAgdmFsdWUgPSBjb2xsZWN0aW9uW2tleV07XHJcbiAgICAgICAgICAgIHRyYWNrQnlJZCA9IHRyYWNrQnlJZEZuKGtleSwgdmFsdWUsIGluZGV4KTtcclxuICAgICAgICAgICAgaWYgKGxhc3RCbG9ja01hcFt0cmFja0J5SWRdKSB7XHJcbiAgICAgICAgICAgICAgLy8gZm91bmQgcHJldmlvdXNseSBzZWVuIGJsb2NrXHJcbiAgICAgICAgICAgICAgYmxvY2sgPSBsYXN0QmxvY2tNYXBbdHJhY2tCeUlkXTtcclxuICAgICAgICAgICAgICBkZWxldGUgbGFzdEJsb2NrTWFwW3RyYWNrQnlJZF07XHJcbiAgICAgICAgICAgICAgbmV4dEJsb2NrTWFwW3RyYWNrQnlJZF0gPSBibG9jaztcclxuICAgICAgICAgICAgICBuZXh0QmxvY2tPcmRlcltpbmRleF0gPSBibG9jaztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0QmxvY2tNYXBbdHJhY2tCeUlkXSkge1xyXG4gICAgICAgICAgICAgIC8vIGlmIGNvbGxpc2lvbiBkZXRlY3RlZC4gcmVzdG9yZSBsYXN0QmxvY2tNYXAgYW5kIHRocm93IGFuIGVycm9yXHJcbiAgICAgICAgICAgICAgZm9yRWFjaChuZXh0QmxvY2tPcmRlciwgZnVuY3Rpb24oYmxvY2spIHtcclxuICAgICAgICAgICAgICAgIGlmIChibG9jayAmJiBibG9jay5zY29wZSkgbGFzdEJsb2NrTWFwW2Jsb2NrLmlkXSA9IGJsb2NrO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHRocm93IG5nUmVwZWF0TWluRXJyKCdkdXBlcycsXHJcbiAgICAgICAgICAgICAgICAgIFwiRHVwbGljYXRlcyBpbiBhIHJlcGVhdGVyIGFyZSBub3QgYWxsb3dlZC4gVXNlICd0cmFjayBieScgZXhwcmVzc2lvbiB0byBzcGVjaWZ5IHVuaXF1ZSBrZXlzLiBSZXBlYXRlcjogezB9LCBEdXBsaWNhdGUga2V5OiB7MX0sIER1cGxpY2F0ZSB2YWx1ZTogezJ9XCIsXHJcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24sIHRyYWNrQnlJZCwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIG5ldyBuZXZlciBiZWZvcmUgc2VlbiBibG9ja1xyXG4gICAgICAgICAgICAgIG5leHRCbG9ja09yZGVyW2luZGV4XSA9IHtpZDogdHJhY2tCeUlkLCBzY29wZTogdW5kZWZpbmVkLCBjbG9uZTogdW5kZWZpbmVkfTtcclxuICAgICAgICAgICAgICBuZXh0QmxvY2tNYXBbdHJhY2tCeUlkXSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyByZW1vdmUgbGVmdG92ZXIgaXRlbXNcclxuICAgICAgICAgIGZvciAodmFyIGJsb2NrS2V5IGluIGxhc3RCbG9ja01hcCkge1xyXG4gICAgICAgICAgICBibG9jayA9IGxhc3RCbG9ja01hcFtibG9ja0tleV07XHJcbiAgICAgICAgICAgIGVsZW1lbnRzVG9SZW1vdmUgPSBnZXRCbG9ja05vZGVzKGJsb2NrLmNsb25lKTtcclxuICAgICAgICAgICAgJGFuaW1hdGUubGVhdmUoZWxlbWVudHNUb1JlbW92ZSk7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50c1RvUmVtb3ZlWzBdLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAvLyBpZiB0aGUgZWxlbWVudCB3YXMgbm90IHJlbW92ZWQgeWV0IGJlY2F1c2Ugb2YgcGVuZGluZyBhbmltYXRpb24sIG1hcmsgaXQgYXMgZGVsZXRlZFxyXG4gICAgICAgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGlnbm9yZSBpdCBsYXRlclxyXG4gICAgICAgICAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBlbGVtZW50c1RvUmVtb3ZlLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzVG9SZW1vdmVbaW5kZXhdW05HX1JFTU9WRURdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYmxvY2suc2NvcGUuJGRlc3Ryb3koKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyB3ZSBhcmUgbm90IHVzaW5nIGZvckVhY2ggZm9yIHBlcmYgcmVhc29ucyAodHJ5aW5nIHRvIGF2b2lkICNjYWxsKVxyXG4gICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY29sbGVjdGlvbkxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBrZXkgPSAoY29sbGVjdGlvbiA9PT0gY29sbGVjdGlvbktleXMpID8gaW5kZXggOiBjb2xsZWN0aW9uS2V5c1tpbmRleF07XHJcbiAgICAgICAgICAgIHZhbHVlID0gY29sbGVjdGlvbltrZXldO1xyXG4gICAgICAgICAgICBibG9jayA9IG5leHRCbG9ja09yZGVyW2luZGV4XTtcclxuXHJcbiAgICAgICAgICAgIGlmIChibG9jay5zY29wZSkge1xyXG4gICAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgYWxyZWFkeSBzZWVuIHRoaXMgb2JqZWN0LCB0aGVuIHdlIG5lZWQgdG8gcmV1c2UgdGhlXHJcbiAgICAgICAgICAgICAgLy8gYXNzb2NpYXRlZCBzY29wZS9lbGVtZW50XHJcblxyXG4gICAgICAgICAgICAgIG5leHROb2RlID0gcHJldmlvdXNOb2RlO1xyXG5cclxuICAgICAgICAgICAgICAvLyBza2lwIG5vZGVzIHRoYXQgYXJlIGFscmVhZHkgcGVuZGluZyByZW1vdmFsIHZpYSBsZWF2ZSBhbmltYXRpb25cclxuICAgICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IG5leHROb2RlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgIH0gd2hpbGUgKG5leHROb2RlICYmIG5leHROb2RlW05HX1JFTU9WRURdKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGdldEJsb2NrU3RhcnQoYmxvY2spICE9IG5leHROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBleGlzdGluZyBpdGVtIHdoaWNoIGdvdCBtb3ZlZFxyXG4gICAgICAgICAgICAgICAgJGFuaW1hdGUubW92ZShnZXRCbG9ja05vZGVzKGJsb2NrLmNsb25lKSwgbnVsbCwganFMaXRlKHByZXZpb3VzTm9kZSkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBwcmV2aW91c05vZGUgPSBnZXRCbG9ja0VuZChibG9jayk7XHJcbiAgICAgICAgICAgICAgdXBkYXRlU2NvcGUoYmxvY2suc2NvcGUsIGluZGV4LCB2YWx1ZUlkZW50aWZpZXIsIHZhbHVlLCBrZXlJZGVudGlmaWVyLCBrZXksIGNvbGxlY3Rpb25MZW5ndGgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIG5ldyBpdGVtIHdoaWNoIHdlIGRvbid0IGtub3cgYWJvdXRcclxuICAgICAgICAgICAgICAkdHJhbnNjbHVkZShmdW5jdGlvbiBuZ1JlcGVhdFRyYW5zY2x1ZGUoY2xvbmUsIHNjb3BlKSB7XHJcbiAgICAgICAgICAgICAgICBibG9jay5zY29wZSA9IHNjb3BlO1xyXG4gICAgICAgICAgICAgICAgLy8gaHR0cDovL2pzcGVyZi5jb20vY2xvbmUtdnMtY3JlYXRlY29tbWVudFxyXG4gICAgICAgICAgICAgICAgdmFyIGVuZE5vZGUgPSBuZ1JlcGVhdEVuZENvbW1lbnQuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGNsb25lW2Nsb25lLmxlbmd0aCsrXSA9IGVuZE5vZGU7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyhwZXJmKTogc3VwcG9ydCBuYWtlZCBwcmV2aW91c05vZGUgaW4gYGVudGVyYCB0byBhdm9pZCBjcmVhdGlvbiBvZiBqcUxpdGUgd3JhcHBlcj9cclxuICAgICAgICAgICAgICAgICRhbmltYXRlLmVudGVyKGNsb25lLCBudWxsLCBqcUxpdGUocHJldmlvdXNOb2RlKSk7XHJcbiAgICAgICAgICAgICAgICBwcmV2aW91c05vZGUgPSBlbmROb2RlO1xyXG4gICAgICAgICAgICAgICAgLy8gTm90ZTogV2Ugb25seSBuZWVkIHRoZSBmaXJzdC9sYXN0IG5vZGUgb2YgdGhlIGNsb25lZCBub2Rlcy5cclxuICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIG5lZWQgdG8ga2VlcCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBqcWxpdGUgd3JhcHBlciBhcyBpdCBtaWdodCBiZSBjaGFuZ2VkIGxhdGVyXHJcbiAgICAgICAgICAgICAgICAvLyBieSBhIGRpcmVjdGl2ZSB3aXRoIHRlbXBsYXRlVXJsIHdoZW4gaXRzIHRlbXBsYXRlIGFycml2ZXMuXHJcbiAgICAgICAgICAgICAgICBibG9jay5jbG9uZSA9IGNsb25lO1xyXG4gICAgICAgICAgICAgICAgbmV4dEJsb2NrTWFwW2Jsb2NrLmlkXSA9IGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlU2NvcGUoYmxvY2suc2NvcGUsIGluZGV4LCB2YWx1ZUlkZW50aWZpZXIsIHZhbHVlLCBrZXlJZGVudGlmaWVyLCBrZXksIGNvbGxlY3Rpb25MZW5ndGgpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsYXN0QmxvY2tNYXAgPSBuZXh0QmxvY2tNYXA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfTtcclxufV07XHJcblxyXG52YXIgTkdfSElERV9DTEFTUyA9ICduZy1oaWRlJztcclxudmFyIE5HX0hJREVfSU5fUFJPR1JFU1NfQ0xBU1MgPSAnbmctaGlkZS1hbmltYXRlJztcclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdTaG93XHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBUaGUgYG5nU2hvd2AgZGlyZWN0aXZlIHNob3dzIG9yIGhpZGVzIHRoZSBnaXZlbiBIVE1MIGVsZW1lbnQgYmFzZWQgb24gdGhlIGV4cHJlc3Npb25cclxuICogcHJvdmlkZWQgdG8gdGhlIGBuZ1Nob3dgIGF0dHJpYnV0ZS4gVGhlIGVsZW1lbnQgaXMgc2hvd24gb3IgaGlkZGVuIGJ5IHJlbW92aW5nIG9yIGFkZGluZ1xyXG4gKiB0aGUgYC5uZy1oaWRlYCBDU1MgY2xhc3Mgb250byB0aGUgZWxlbWVudC4gVGhlIGAubmctaGlkZWAgQ1NTIGNsYXNzIGlzIHByZWRlZmluZWRcclxuICogaW4gQW5ndWxhckpTIGFuZCBzZXRzIHRoZSBkaXNwbGF5IHN0eWxlIHRvIG5vbmUgKHVzaW5nIGFuICFpbXBvcnRhbnQgZmxhZykuXHJcbiAqIEZvciBDU1AgbW9kZSBwbGVhc2UgYWRkIGBhbmd1bGFyLWNzcC5jc3NgIHRvIHlvdXIgaHRtbCBmaWxlIChzZWUge0BsaW5rIG5nLmRpcmVjdGl2ZTpuZ0NzcCBuZ0NzcH0pLlxyXG4gKlxyXG4gKiBgYGBodG1sXHJcbiAqIDwhLS0gd2hlbiAkc2NvcGUubXlWYWx1ZSBpcyB0cnV0aHkgKGVsZW1lbnQgaXMgdmlzaWJsZSkgLS0+XHJcbiAqIDxkaXYgbmctc2hvdz1cIm15VmFsdWVcIj48L2Rpdj5cclxuICpcclxuICogPCEtLSB3aGVuICRzY29wZS5teVZhbHVlIGlzIGZhbHN5IChlbGVtZW50IGlzIGhpZGRlbikgLS0+XHJcbiAqIDxkaXYgbmctc2hvdz1cIm15VmFsdWVcIiBjbGFzcz1cIm5nLWhpZGVcIj48L2Rpdj5cclxuICogYGBgXHJcbiAqXHJcbiAqIFdoZW4gdGhlIGBuZ1Nob3dgIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgZmFsc3kgdmFsdWUgdGhlbiB0aGUgYC5uZy1oaWRlYCBDU1MgY2xhc3MgaXMgYWRkZWQgdG8gdGhlIGNsYXNzXHJcbiAqIGF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudCBjYXVzaW5nIGl0IHRvIGJlY29tZSBoaWRkZW4uIFdoZW4gdHJ1dGh5LCB0aGUgYC5uZy1oaWRlYCBDU1MgY2xhc3MgaXMgcmVtb3ZlZFxyXG4gKiBmcm9tIHRoZSBlbGVtZW50IGNhdXNpbmcgdGhlIGVsZW1lbnQgbm90IHRvIGFwcGVhciBoaWRkZW4uXHJcbiAqXHJcbiAqICMjIFdoeSBpcyAhaW1wb3J0YW50IHVzZWQ/XHJcbiAqXHJcbiAqIFlvdSBtYXkgYmUgd29uZGVyaW5nIHdoeSAhaW1wb3J0YW50IGlzIHVzZWQgZm9yIHRoZSBgLm5nLWhpZGVgIENTUyBjbGFzcy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBgLm5nLWhpZGVgIHNlbGVjdG9yXHJcbiAqIGNhbiBiZSBlYXNpbHkgb3ZlcnJpZGRlbiBieSBoZWF2aWVyIHNlbGVjdG9ycy4gRm9yIGV4YW1wbGUsIHNvbWV0aGluZyBhcyBzaW1wbGVcclxuICogYXMgY2hhbmdpbmcgdGhlIGRpc3BsYXkgc3R5bGUgb24gYSBIVE1MIGxpc3QgaXRlbSB3b3VsZCBtYWtlIGhpZGRlbiBlbGVtZW50cyBhcHBlYXIgdmlzaWJsZS5cclxuICogVGhpcyBhbHNvIGJlY29tZXMgYSBiaWdnZXIgaXNzdWUgd2hlbiBkZWFsaW5nIHdpdGggQ1NTIGZyYW1ld29ya3MuXHJcbiAqXHJcbiAqIEJ5IHVzaW5nICFpbXBvcnRhbnQsIHRoZSBzaG93IGFuZCBoaWRlIGJlaGF2aW9yIHdpbGwgd29yayBhcyBleHBlY3RlZCBkZXNwaXRlIGFueSBjbGFzaCBiZXR3ZWVuIENTUyBzZWxlY3RvclxyXG4gKiBzcGVjaWZpY2l0eSAod2hlbiAhaW1wb3J0YW50IGlzbid0IHVzZWQgd2l0aCBhbnkgY29uZmxpY3Rpbmcgc3R5bGVzKS4gSWYgYSBkZXZlbG9wZXIgY2hvb3NlcyB0byBvdmVycmlkZSB0aGVcclxuICogc3R5bGluZyB0byBjaGFuZ2UgaG93IHRvIGhpZGUgYW4gZWxlbWVudCB0aGVuIGl0IGlzIGp1c3QgYSBtYXR0ZXIgb2YgdXNpbmcgIWltcG9ydGFudCBpbiB0aGVpciBvd24gQ1NTIGNvZGUuXHJcbiAqXHJcbiAqICMjIyBPdmVycmlkaW5nIGAubmctaGlkZWBcclxuICpcclxuICogQnkgZGVmYXVsdCwgdGhlIGAubmctaGlkZWAgY2xhc3Mgd2lsbCBzdHlsZSB0aGUgZWxlbWVudCB3aXRoIGBkaXNwbGF5Om5vbmUhaW1wb3J0YW50YC4gSWYgeW91IHdpc2ggdG8gY2hhbmdlXHJcbiAqIHRoZSBoaWRlIGJlaGF2aW9yIHdpdGggbmdTaG93L25nSGlkZSB0aGVuIHRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHJlc3RhdGluZyB0aGUgc3R5bGVzIGZvciB0aGUgYC5uZy1oaWRlYFxyXG4gKiBjbGFzcyBpbiBDU1M6XHJcbiAqXHJcbiAqIGBgYGNzc1xyXG4gKiAubmctaGlkZSB7XHJcbiAqICAgLyYjNDI7IHRoaXMgaXMganVzdCBhbm90aGVyIGZvcm0gb2YgaGlkaW5nIGFuIGVsZW1lbnQgJiM0MjsvXHJcbiAqICAgZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7XHJcbiAqICAgcG9zaXRpb246YWJzb2x1dGU7XHJcbiAqICAgdG9wOi05OTk5cHg7XHJcbiAqICAgbGVmdDotOTk5OXB4O1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBCeSBkZWZhdWx0IHlvdSBkb24ndCBuZWVkIHRvIG92ZXJyaWRlIGluIENTUyBhbnl0aGluZyBhbmQgdGhlIGFuaW1hdGlvbnMgd2lsbCB3b3JrIGFyb3VuZCB0aGUgZGlzcGxheSBzdHlsZS5cclxuICpcclxuICogIyMgQSBub3RlIGFib3V0IGFuaW1hdGlvbnMgd2l0aCBgbmdTaG93YFxyXG4gKlxyXG4gKiBBbmltYXRpb25zIGluIG5nU2hvdy9uZ0hpZGUgd29yayB3aXRoIHRoZSBzaG93IGFuZCBoaWRlIGV2ZW50cyB0aGF0IGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZGlyZWN0aXZlIGV4cHJlc3Npb25cclxuICogaXMgdHJ1ZSBhbmQgZmFsc2UuIFRoaXMgc3lzdGVtIHdvcmtzIGxpa2UgdGhlIGFuaW1hdGlvbiBzeXN0ZW0gcHJlc2VudCB3aXRoIG5nQ2xhc3MgZXhjZXB0IHRoYXRcclxuICogeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoZSAhaW1wb3J0YW50IGZsYWcgdG8gb3ZlcnJpZGUgdGhlIGRpc3BsYXkgcHJvcGVydHlcclxuICogc28gdGhhdCB5b3UgY2FuIHBlcmZvcm0gYW4gYW5pbWF0aW9uIHdoZW4gdGhlIGVsZW1lbnQgaXMgaGlkZGVuIGR1cmluZyB0aGUgdGltZSBvZiB0aGUgYW5pbWF0aW9uLlxyXG4gKlxyXG4gKiBgYGBjc3NcclxuICogLy9cclxuICogLy9hIHdvcmtpbmcgZXhhbXBsZSBjYW4gYmUgZm91bmQgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIHBhZ2VcclxuICogLy9cclxuICogLm15LWVsZW1lbnQubmctaGlkZS1hZGQsIC5teS1lbGVtZW50Lm5nLWhpZGUtcmVtb3ZlIHtcclxuICogICAvJiM0MjsgdGhpcyBpcyByZXF1aXJlZCBhcyBvZiAxLjN4IHRvIHByb3Blcmx5XHJcbiAqICAgICAgYXBwbHkgYWxsIHN0eWxpbmcgaW4gYSBzaG93L2hpZGUgYW5pbWF0aW9uICYjNDI7L1xyXG4gKiAgIHRyYW5zaXRpb246MHMgbGluZWFyIGFsbDtcclxuICogfVxyXG4gKlxyXG4gKiAubXktZWxlbWVudC5uZy1oaWRlLWFkZC1hY3RpdmUsXHJcbiAqIC5teS1lbGVtZW50Lm5nLWhpZGUtcmVtb3ZlLWFjdGl2ZSB7XHJcbiAqICAgLyYjNDI7IHRoZSB0cmFuc2l0aW9uIGlzIGRlZmluZWQgaW4gdGhlIGFjdGl2ZSBjbGFzcyAmIzQyOy9cclxuICogICB0cmFuc2l0aW9uOjFzIGxpbmVhciBhbGw7XHJcbiAqIH1cclxuICpcclxuICogLm15LWVsZW1lbnQubmctaGlkZS1hZGQgeyAuLi4gfVxyXG4gKiAubXktZWxlbWVudC5uZy1oaWRlLWFkZC5uZy1oaWRlLWFkZC1hY3RpdmUgeyAuLi4gfVxyXG4gKiAubXktZWxlbWVudC5uZy1oaWRlLXJlbW92ZSB7IC4uLiB9XHJcbiAqIC5teS1lbGVtZW50Lm5nLWhpZGUtcmVtb3ZlLm5nLWhpZGUtcmVtb3ZlLWFjdGl2ZSB7IC4uLiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBLZWVwIGluIG1pbmQgdGhhdCwgYXMgb2YgQW5ndWxhckpTIHZlcnNpb24gMS4zLjAtYmV0YS4xMSwgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGFuZ2UgdGhlIGRpc3BsYXlcclxuICogcHJvcGVydHkgdG8gYmxvY2sgZHVyaW5nIGFuaW1hdGlvbiBzdGF0ZXMtLW5nQW5pbWF0ZSB3aWxsIGhhbmRsZSB0aGUgc3R5bGUgdG9nZ2xpbmcgYXV0b21hdGljYWxseSBmb3IgeW91LlxyXG4gKlxyXG4gKiBAYW5pbWF0aW9uc1xyXG4gKiBhZGRDbGFzczogYC5uZy1oaWRlYCAtIGhhcHBlbnMgYWZ0ZXIgdGhlIGBuZ1Nob3dgIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgdHJ1dGh5IHZhbHVlIGFuZCB0aGUganVzdCBiZWZvcmUgY29udGVudHMgYXJlIHNldCB0byB2aXNpYmxlXHJcbiAqIHJlbW92ZUNsYXNzOiBgLm5nLWhpZGVgIC0gaGFwcGVucyBhZnRlciB0aGUgYG5nU2hvd2AgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSBub24gdHJ1dGh5IHZhbHVlIGFuZCBqdXN0IGJlZm9yZSB0aGUgY29udGVudHMgYXJlIHNldCB0byBoaWRkZW5cclxuICpcclxuICogQGVsZW1lbnQgQU5ZXHJcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdTaG93IElmIHRoZSB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBleHByZXNzaW9ufSBpcyB0cnV0aHlcclxuICogICAgIHRoZW4gdGhlIGVsZW1lbnQgaXMgc2hvd24gb3IgaGlkZGVuIHJlc3BlY3RpdmVseS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICA8ZXhhbXBsZSBtb2R1bGU9XCJuZ0FuaW1hdGVcIiBkZXBzPVwiYW5ndWxhci1hbmltYXRlLmpzXCIgYW5pbWF0aW9ucz1cInRydWVcIj5cclxuICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgIENsaWNrIG1lOiA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmctbW9kZWw9XCJjaGVja2VkXCI+PGJyLz5cclxuICAgICAgPGRpdj5cclxuICAgICAgICBTaG93OlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1lbGVtZW50IGFuaW1hdGUtc2hvd1wiIG5nLXNob3c9XCJjaGVja2VkXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tdGh1bWJzLXVwXCI+PC9zcGFuPiBJIHNob3cgdXAgd2hlbiB5b3VyIGNoZWNrYm94IGlzIGNoZWNrZWQuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIEhpZGU6XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWVsZW1lbnQgYW5pbWF0ZS1zaG93XCIgbmctaGlkZT1cImNoZWNrZWRcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2x5cGhpY29uIGdseXBoaWNvbi10aHVtYnMtZG93blwiPjwvc3Bhbj4gSSBoaWRlIHdoZW4geW91ciBjaGVja2JveCBpcyBjaGVja2VkLlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZmlsZT5cclxuICAgIDxmaWxlIG5hbWU9XCJnbHlwaGljb25zLmNzc1wiPlxyXG4gICAgICBAaW1wb3J0IHVybCguLi8uLi9jb21wb25lbnRzL2Jvb3RzdHJhcC0zLjEuMS9jc3MvYm9vdHN0cmFwLmNzcyk7XHJcbiAgICA8L2ZpbGU+XHJcbiAgICA8ZmlsZSBuYW1lPVwiYW5pbWF0aW9ucy5jc3NcIj5cclxuICAgICAgLmFuaW1hdGUtc2hvdyB7XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6MjBweDtcclxuICAgICAgICBvcGFjaXR5OjE7XHJcbiAgICAgICAgcGFkZGluZzoxMHB4O1xyXG4gICAgICAgIGJvcmRlcjoxcHggc29saWQgYmxhY2s7XHJcbiAgICAgICAgYmFja2dyb3VuZDp3aGl0ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmFuaW1hdGUtc2hvdy5uZy1oaWRlLWFkZC5uZy1oaWRlLWFkZC1hY3RpdmUsXHJcbiAgICAgIC5hbmltYXRlLXNob3cubmctaGlkZS1yZW1vdmUubmctaGlkZS1yZW1vdmUtYWN0aXZlIHtcclxuICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246YWxsIGxpbmVhciAwLjVzO1xyXG4gICAgICAgIHRyYW5zaXRpb246YWxsIGxpbmVhciAwLjVzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAuYW5pbWF0ZS1zaG93Lm5nLWhpZGUge1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OjA7XHJcbiAgICAgICAgb3BhY2l0eTowO1xyXG4gICAgICAgIHBhZGRpbmc6MCAxMHB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAuY2hlY2stZWxlbWVudCB7XHJcbiAgICAgICAgcGFkZGluZzoxMHB4O1xyXG4gICAgICAgIGJvcmRlcjoxcHggc29saWQgYmxhY2s7XHJcbiAgICAgICAgYmFja2dyb3VuZDp3aGl0ZTtcclxuICAgICAgfVxyXG4gICAgPC9maWxlPlxyXG4gICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICB2YXIgdGh1bWJzVXAgPSBlbGVtZW50KGJ5LmNzcygnc3Bhbi5nbHlwaGljb24tdGh1bWJzLXVwJykpO1xyXG4gICAgICB2YXIgdGh1bWJzRG93biA9IGVsZW1lbnQoYnkuY3NzKCdzcGFuLmdseXBoaWNvbi10aHVtYnMtZG93bicpKTtcclxuXHJcbiAgICAgIGl0KCdzaG91bGQgY2hlY2sgbmctc2hvdyAvIG5nLWhpZGUnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBleHBlY3QodGh1bWJzVXAuaXNEaXNwbGF5ZWQoKSkudG9CZUZhbHN5KCk7XHJcbiAgICAgICAgZXhwZWN0KHRodW1ic0Rvd24uaXNEaXNwbGF5ZWQoKSkudG9CZVRydXRoeSgpO1xyXG5cclxuICAgICAgICBlbGVtZW50KGJ5Lm1vZGVsKCdjaGVja2VkJykpLmNsaWNrKCk7XHJcblxyXG4gICAgICAgIGV4cGVjdCh0aHVtYnNVcC5pc0Rpc3BsYXllZCgpKS50b0JlVHJ1dGh5KCk7XHJcbiAgICAgICAgZXhwZWN0KHRodW1ic0Rvd24uaXNEaXNwbGF5ZWQoKSkudG9CZUZhbHN5KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgPC9maWxlPlxyXG4gIDwvZXhhbXBsZT5cclxuICovXHJcbnZhciBuZ1Nob3dEaXJlY3RpdmUgPSBbJyRhbmltYXRlJywgZnVuY3Rpb24oJGFuaW1hdGUpIHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgIG11bHRFbGVtZW50OiB0cnVlLFxyXG4gICAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIpIHtcclxuICAgICAgc2NvcGUuJHdhdGNoKGF0dHIubmdTaG93LCBmdW5jdGlvbiBuZ1Nob3dXYXRjaEFjdGlvbih2YWx1ZSkge1xyXG4gICAgICAgIC8vIHdlJ3JlIGFkZGluZyBhIHRlbXBvcmFyeSwgYW5pbWF0aW9uLXNwZWNpZmljIGNsYXNzIGZvciBuZy1oaWRlIHNpbmNlIHRoaXMgd2F5XHJcbiAgICAgICAgLy8gd2UgY2FuIGNvbnRyb2wgd2hlbiB0aGUgZWxlbWVudCBpcyBhY3R1YWxseSBkaXNwbGF5ZWQgb24gc2NyZWVuIHdpdGhvdXQgaGF2aW5nXHJcbiAgICAgICAgLy8gdG8gaGF2ZSBhIGdsb2JhbC9ncmVlZHkgQ1NTIHNlbGVjdG9yIHRoYXQgYnJlYWtzIHdoZW4gb3RoZXIgYW5pbWF0aW9ucyBhcmUgcnVuLlxyXG4gICAgICAgIC8vIFJlYWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIuanMvaXNzdWVzLzkxMDMjaXNzdWVjb21tZW50LTU4MzM1ODQ1XHJcbiAgICAgICAgJGFuaW1hdGVbdmFsdWUgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oZWxlbWVudCwgTkdfSElERV9DTEFTUywge1xyXG4gICAgICAgICAgdGVtcENsYXNzZXM6IE5HX0hJREVfSU5fUFJPR1JFU1NfQ0xBU1NcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfTtcclxufV07XHJcblxyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdIaWRlXHJcbiAqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBUaGUgYG5nSGlkZWAgZGlyZWN0aXZlIHNob3dzIG9yIGhpZGVzIHRoZSBnaXZlbiBIVE1MIGVsZW1lbnQgYmFzZWQgb24gdGhlIGV4cHJlc3Npb25cclxuICogcHJvdmlkZWQgdG8gdGhlIGBuZ0hpZGVgIGF0dHJpYnV0ZS4gVGhlIGVsZW1lbnQgaXMgc2hvd24gb3IgaGlkZGVuIGJ5IHJlbW92aW5nIG9yIGFkZGluZ1xyXG4gKiB0aGUgYG5nLWhpZGVgIENTUyBjbGFzcyBvbnRvIHRoZSBlbGVtZW50LiBUaGUgYC5uZy1oaWRlYCBDU1MgY2xhc3MgaXMgcHJlZGVmaW5lZFxyXG4gKiBpbiBBbmd1bGFySlMgYW5kIHNldHMgdGhlIGRpc3BsYXkgc3R5bGUgdG8gbm9uZSAodXNpbmcgYW4gIWltcG9ydGFudCBmbGFnKS5cclxuICogRm9yIENTUCBtb2RlIHBsZWFzZSBhZGQgYGFuZ3VsYXItY3NwLmNzc2AgdG8geW91ciBodG1sIGZpbGUgKHNlZSB7QGxpbmsgbmcuZGlyZWN0aXZlOm5nQ3NwIG5nQ3NwfSkuXHJcbiAqXHJcbiAqIGBgYGh0bWxcclxuICogPCEtLSB3aGVuICRzY29wZS5teVZhbHVlIGlzIHRydXRoeSAoZWxlbWVudCBpcyBoaWRkZW4pIC0tPlxyXG4gKiA8ZGl2IG5nLWhpZGU9XCJteVZhbHVlXCIgY2xhc3M9XCJuZy1oaWRlXCI+PC9kaXY+XHJcbiAqXHJcbiAqIDwhLS0gd2hlbiAkc2NvcGUubXlWYWx1ZSBpcyBmYWxzeSAoZWxlbWVudCBpcyB2aXNpYmxlKSAtLT5cclxuICogPGRpdiBuZy1oaWRlPVwibXlWYWx1ZVwiPjwvZGl2PlxyXG4gKiBgYGBcclxuICpcclxuICogV2hlbiB0aGUgYG5nSGlkZWAgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSB0cnV0aHkgdmFsdWUgdGhlbiB0aGUgYC5uZy1oaWRlYCBDU1MgY2xhc3MgaXMgYWRkZWQgdG8gdGhlIGNsYXNzXHJcbiAqIGF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudCBjYXVzaW5nIGl0IHRvIGJlY29tZSBoaWRkZW4uIFdoZW4gZmFsc3ksIHRoZSBgLm5nLWhpZGVgIENTUyBjbGFzcyBpcyByZW1vdmVkXHJcbiAqIGZyb20gdGhlIGVsZW1lbnQgY2F1c2luZyB0aGUgZWxlbWVudCBub3QgdG8gYXBwZWFyIGhpZGRlbi5cclxuICpcclxuICogIyMgV2h5IGlzICFpbXBvcnRhbnQgdXNlZD9cclxuICpcclxuICogWW91IG1heSBiZSB3b25kZXJpbmcgd2h5ICFpbXBvcnRhbnQgaXMgdXNlZCBmb3IgdGhlIGAubmctaGlkZWAgQ1NTIGNsYXNzLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGAubmctaGlkZWAgc2VsZWN0b3JcclxuICogY2FuIGJlIGVhc2lseSBvdmVycmlkZGVuIGJ5IGhlYXZpZXIgc2VsZWN0b3JzLiBGb3IgZXhhbXBsZSwgc29tZXRoaW5nIGFzIHNpbXBsZVxyXG4gKiBhcyBjaGFuZ2luZyB0aGUgZGlzcGxheSBzdHlsZSBvbiBhIEhUTUwgbGlzdCBpdGVtIHdvdWxkIG1ha2UgaGlkZGVuIGVsZW1lbnRzIGFwcGVhciB2aXNpYmxlLlxyXG4gKiBUaGlzIGFsc28gYmVjb21lcyBhIGJpZ2dlciBpc3N1ZSB3aGVuIGRlYWxpbmcgd2l0aCBDU1MgZnJhbWV3b3Jrcy5cclxuICpcclxuICogQnkgdXNpbmcgIWltcG9ydGFudCwgdGhlIHNob3cgYW5kIGhpZGUgYmVoYXZpb3Igd2lsbCB3b3JrIGFzIGV4cGVjdGVkIGRlc3BpdGUgYW55IGNsYXNoIGJldHdlZW4gQ1NTIHNlbGVjdG9yXHJcbiAqIHNwZWNpZmljaXR5ICh3aGVuICFpbXBvcnRhbnQgaXNuJ3QgdXNlZCB3aXRoIGFueSBjb25mbGljdGluZyBzdHlsZXMpLiBJZiBhIGRldmVsb3BlciBjaG9vc2VzIHRvIG92ZXJyaWRlIHRoZVxyXG4gKiBzdHlsaW5nIHRvIGNoYW5nZSBob3cgdG8gaGlkZSBhbiBlbGVtZW50IHRoZW4gaXQgaXMganVzdCBhIG1hdHRlciBvZiB1c2luZyAhaW1wb3J0YW50IGluIHRoZWlyIG93biBDU1MgY29kZS5cclxuICpcclxuICogIyMjIE92ZXJyaWRpbmcgYC5uZy1oaWRlYFxyXG4gKlxyXG4gKiBCeSBkZWZhdWx0LCB0aGUgYC5uZy1oaWRlYCBjbGFzcyB3aWxsIHN0eWxlIHRoZSBlbGVtZW50IHdpdGggYGRpc3BsYXk6bm9uZSFpbXBvcnRhbnRgLiBJZiB5b3Ugd2lzaCB0byBjaGFuZ2VcclxuICogdGhlIGhpZGUgYmVoYXZpb3Igd2l0aCBuZ1Nob3cvbmdIaWRlIHRoZW4gdGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmVzdGF0aW5nIHRoZSBzdHlsZXMgZm9yIHRoZSBgLm5nLWhpZGVgXHJcbiAqIGNsYXNzIGluIENTUzpcclxuICpcclxuICogYGBgY3NzXHJcbiAqIC5uZy1oaWRlIHtcclxuICogICAvJiM0MjsgdGhpcyBpcyBqdXN0IGFub3RoZXIgZm9ybSBvZiBoaWRpbmcgYW4gZWxlbWVudCAmIzQyOy9cclxuICogICBkaXNwbGF5OmJsb2NrIWltcG9ydGFudDtcclxuICogICBwb3NpdGlvbjphYnNvbHV0ZTtcclxuICogICB0b3A6LTk5OTlweDtcclxuICogICBsZWZ0Oi05OTk5cHg7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIEJ5IGRlZmF1bHQgeW91IGRvbid0IG5lZWQgdG8gb3ZlcnJpZGUgaW4gQ1NTIGFueXRoaW5nIGFuZCB0aGUgYW5pbWF0aW9ucyB3aWxsIHdvcmsgYXJvdW5kIHRoZSBkaXNwbGF5IHN0eWxlLlxyXG4gKlxyXG4gKiAjIyBBIG5vdGUgYWJvdXQgYW5pbWF0aW9ucyB3aXRoIGBuZ0hpZGVgXHJcbiAqXHJcbiAqIEFuaW1hdGlvbnMgaW4gbmdTaG93L25nSGlkZSB3b3JrIHdpdGggdGhlIHNob3cgYW5kIGhpZGUgZXZlbnRzIHRoYXQgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBkaXJlY3RpdmUgZXhwcmVzc2lvblxyXG4gKiBpcyB0cnVlIGFuZCBmYWxzZS4gVGhpcyBzeXN0ZW0gd29ya3MgbGlrZSB0aGUgYW5pbWF0aW9uIHN5c3RlbSBwcmVzZW50IHdpdGggbmdDbGFzcywgZXhjZXB0IHRoYXQgdGhlIGAubmctaGlkZWBcclxuICogQ1NTIGNsYXNzIGlzIGFkZGVkIGFuZCByZW1vdmVkIGZvciB5b3UgaW5zdGVhZCBvZiB5b3VyIG93biBDU1MgY2xhc3MuXHJcbiAqXHJcbiAqIGBgYGNzc1xyXG4gKiAvL1xyXG4gKiAvL2Egd29ya2luZyBleGFtcGxlIGNhbiBiZSBmb3VuZCBhdCB0aGUgYm90dG9tIG9mIHRoaXMgcGFnZVxyXG4gKiAvL1xyXG4gKiAubXktZWxlbWVudC5uZy1oaWRlLWFkZCwgLm15LWVsZW1lbnQubmctaGlkZS1yZW1vdmUge1xyXG4gKiAgIHRyYW5zaXRpb246MC41cyBsaW5lYXIgYWxsO1xyXG4gKiB9XHJcbiAqXHJcbiAqIC5teS1lbGVtZW50Lm5nLWhpZGUtYWRkIHsgLi4uIH1cclxuICogLm15LWVsZW1lbnQubmctaGlkZS1hZGQubmctaGlkZS1hZGQtYWN0aXZlIHsgLi4uIH1cclxuICogLm15LWVsZW1lbnQubmctaGlkZS1yZW1vdmUgeyAuLi4gfVxyXG4gKiAubXktZWxlbWVudC5uZy1oaWRlLXJlbW92ZS5uZy1oaWRlLXJlbW92ZS1hY3RpdmUgeyAuLi4gfVxyXG4gKiBgYGBcclxuICpcclxuICogS2VlcCBpbiBtaW5kIHRoYXQsIGFzIG9mIEFuZ3VsYXJKUyB2ZXJzaW9uIDEuMy4wLWJldGEuMTEsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hhbmdlIHRoZSBkaXNwbGF5XHJcbiAqIHByb3BlcnR5IHRvIGJsb2NrIGR1cmluZyBhbmltYXRpb24gc3RhdGVzLS1uZ0FuaW1hdGUgd2lsbCBoYW5kbGUgdGhlIHN0eWxlIHRvZ2dsaW5nIGF1dG9tYXRpY2FsbHkgZm9yIHlvdS5cclxuICpcclxuICogQGFuaW1hdGlvbnNcclxuICogcmVtb3ZlQ2xhc3M6IGAubmctaGlkZWAgLSBoYXBwZW5zIGFmdGVyIHRoZSBgbmdIaWRlYCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIHRydXRoeSB2YWx1ZSBhbmQganVzdCBiZWZvcmUgdGhlIGNvbnRlbnRzIGFyZSBzZXQgdG8gaGlkZGVuXHJcbiAqIGFkZENsYXNzOiBgLm5nLWhpZGVgIC0gaGFwcGVucyBhZnRlciB0aGUgYG5nSGlkZWAgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSBub24gdHJ1dGh5IHZhbHVlIGFuZCBqdXN0IGJlZm9yZSB0aGUgY29udGVudHMgYXJlIHNldCB0byB2aXNpYmxlXHJcbiAqXHJcbiAqIEBlbGVtZW50IEFOWVxyXG4gKiBAcGFyYW0ge2V4cHJlc3Npb259IG5nSGlkZSBJZiB0aGUge0BsaW5rIGd1aWRlL2V4cHJlc3Npb24gZXhwcmVzc2lvbn0gaXMgdHJ1dGh5IHRoZW5cclxuICogICAgIHRoZSBlbGVtZW50IGlzIHNob3duIG9yIGhpZGRlbiByZXNwZWN0aXZlbHkuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgPGV4YW1wbGUgbW9kdWxlPVwibmdBbmltYXRlXCIgZGVwcz1cImFuZ3VsYXItYW5pbWF0ZS5qc1wiIGFuaW1hdGlvbnM9XCJ0cnVlXCI+XHJcbiAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICBDbGljayBtZTogPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5nLW1vZGVsPVwiY2hlY2tlZFwiPjxici8+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgU2hvdzpcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2stZWxlbWVudCBhbmltYXRlLWhpZGVcIiBuZy1zaG93PVwiY2hlY2tlZFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLXRodW1icy11cFwiPjwvc3Bhbj4gSSBzaG93IHVwIHdoZW4geW91ciBjaGVja2JveCBpcyBjaGVja2VkLlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICBIaWRlOlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1lbGVtZW50IGFuaW1hdGUtaGlkZVwiIG5nLWhpZGU9XCJjaGVja2VkXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tdGh1bWJzLWRvd25cIj48L3NwYW4+IEkgaGlkZSB3aGVuIHlvdXIgY2hlY2tib3ggaXMgY2hlY2tlZC5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2ZpbGU+XHJcbiAgICA8ZmlsZSBuYW1lPVwiZ2x5cGhpY29ucy5jc3NcIj5cclxuICAgICAgQGltcG9ydCB1cmwoLi4vLi4vY29tcG9uZW50cy9ib290c3RyYXAtMy4xLjEvY3NzL2Jvb3RzdHJhcC5jc3MpO1xyXG4gICAgPC9maWxlPlxyXG4gICAgPGZpbGUgbmFtZT1cImFuaW1hdGlvbnMuY3NzXCI+XHJcbiAgICAgIC5hbmltYXRlLWhpZGUge1xyXG4gICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjphbGwgbGluZWFyIDAuNXM7XHJcbiAgICAgICAgdHJhbnNpdGlvbjphbGwgbGluZWFyIDAuNXM7XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6MjBweDtcclxuICAgICAgICBvcGFjaXR5OjE7XHJcbiAgICAgICAgcGFkZGluZzoxMHB4O1xyXG4gICAgICAgIGJvcmRlcjoxcHggc29saWQgYmxhY2s7XHJcbiAgICAgICAgYmFja2dyb3VuZDp3aGl0ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmFuaW1hdGUtaGlkZS5uZy1oaWRlIHtcclxuICAgICAgICBsaW5lLWhlaWdodDowO1xyXG4gICAgICAgIG9wYWNpdHk6MDtcclxuICAgICAgICBwYWRkaW5nOjAgMTBweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmNoZWNrLWVsZW1lbnQge1xyXG4gICAgICAgIHBhZGRpbmc6MTBweDtcclxuICAgICAgICBib3JkZXI6MXB4IHNvbGlkIGJsYWNrO1xyXG4gICAgICAgIGJhY2tncm91bmQ6d2hpdGU7XHJcbiAgICAgIH1cclxuICAgIDwvZmlsZT5cclxuICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgdmFyIHRodW1ic1VwID0gZWxlbWVudChieS5jc3MoJ3NwYW4uZ2x5cGhpY29uLXRodW1icy11cCcpKTtcclxuICAgICAgdmFyIHRodW1ic0Rvd24gPSBlbGVtZW50KGJ5LmNzcygnc3Bhbi5nbHlwaGljb24tdGh1bWJzLWRvd24nKSk7XHJcblxyXG4gICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLXNob3cgLyBuZy1oaWRlJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgZXhwZWN0KHRodW1ic1VwLmlzRGlzcGxheWVkKCkpLnRvQmVGYWxzeSgpO1xyXG4gICAgICAgIGV4cGVjdCh0aHVtYnNEb3duLmlzRGlzcGxheWVkKCkpLnRvQmVUcnV0aHkoKTtcclxuXHJcbiAgICAgICAgZWxlbWVudChieS5tb2RlbCgnY2hlY2tlZCcpKS5jbGljaygpO1xyXG5cclxuICAgICAgICBleHBlY3QodGh1bWJzVXAuaXNEaXNwbGF5ZWQoKSkudG9CZVRydXRoeSgpO1xyXG4gICAgICAgIGV4cGVjdCh0aHVtYnNEb3duLmlzRGlzcGxheWVkKCkpLnRvQmVGYWxzeSgpO1xyXG4gICAgICB9KTtcclxuICAgIDwvZmlsZT5cclxuICA8L2V4YW1wbGU+XHJcbiAqL1xyXG52YXIgbmdIaWRlRGlyZWN0aXZlID0gWyckYW5pbWF0ZScsIGZ1bmN0aW9uKCRhbmltYXRlKSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHJlc3RyaWN0OiAnQScsXHJcbiAgICBtdWx0RWxlbWVudDogdHJ1ZSxcclxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7XHJcbiAgICAgIHNjb3BlLiR3YXRjaChhdHRyLm5nSGlkZSwgZnVuY3Rpb24gbmdIaWRlV2F0Y2hBY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAvLyBUaGUgY29tbWVudCBpbnNpZGUgb2YgdGhlIG5nU2hvd0RpcmVjdGl2ZSBleHBsYWlucyB3aHkgd2UgYWRkIGFuZFxyXG4gICAgICAgIC8vIHJlbW92ZSBhIHRlbXBvcmFyeSBjbGFzcyBmb3IgdGhlIHNob3cvaGlkZSBhbmltYXRpb25cclxuICAgICAgICAkYW5pbWF0ZVt2YWx1ZSA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShlbGVtZW50LE5HX0hJREVfQ0xBU1MsIHtcclxuICAgICAgICAgIHRlbXBDbGFzc2VzOiBOR19ISURFX0lOX1BST0dSRVNTX0NMQVNTXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH07XHJcbn1dO1xyXG5cclxuLyoqXHJcbiAqIEBuZ2RvYyBkaXJlY3RpdmVcclxuICogQG5hbWUgbmdTdHlsZVxyXG4gKiBAcmVzdHJpY3QgQUNcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRoZSBgbmdTdHlsZWAgZGlyZWN0aXZlIGFsbG93cyB5b3UgdG8gc2V0IENTUyBzdHlsZSBvbiBhbiBIVE1MIGVsZW1lbnQgY29uZGl0aW9uYWxseS5cclxuICpcclxuICogQGVsZW1lbnQgQU5ZXHJcbiAqIEBwYXJhbSB7ZXhwcmVzc2lvbn0gbmdTdHlsZVxyXG4gKlxyXG4gKiB7QGxpbmsgZ3VpZGUvZXhwcmVzc2lvbiBFeHByZXNzaW9ufSB3aGljaCBldmFscyB0byBhblxyXG4gKiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgQ1NTIHN0eWxlIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZvciB0aG9zZSBDU1NcclxuICoga2V5cy5cclxuICpcclxuICogU2luY2Ugc29tZSBDU1Mgc3R5bGUgbmFtZXMgYXJlIG5vdCB2YWxpZCBrZXlzIGZvciBhbiBvYmplY3QsIHRoZXkgbXVzdCBiZSBxdW90ZWQuXHJcbiAqIFNlZSB0aGUgJ2JhY2tncm91bmQtY29sb3InIHN0eWxlIGluIHRoZSBleGFtcGxlIGJlbG93LlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICA8ZXhhbXBsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJzZXQgY29sb3JcIiBuZy1jbGljaz1cIm15U3R5bGU9e2NvbG9yOidyZWQnfVwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJzZXQgYmFja2dyb3VuZFwiIG5nLWNsaWNrPVwibXlTdHlsZT17J2JhY2tncm91bmQtY29sb3InOidibHVlJ31cIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiY2xlYXJcIiBuZy1jbGljaz1cIm15U3R5bGU9e31cIj5cclxuICAgICAgICA8YnIvPlxyXG4gICAgICAgIDxzcGFuIG5nLXN0eWxlPVwibXlTdHlsZVwiPlNhbXBsZSBUZXh0PC9zcGFuPlxyXG4gICAgICAgIDxwcmU+bXlTdHlsZT17e215U3R5bGV9fTwvcHJlPlxyXG4gICAgIDwvZmlsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwic3R5bGUuY3NzXCI+XHJcbiAgICAgICBzcGFuIHtcclxuICAgICAgICAgY29sb3I6IGJsYWNrO1xyXG4gICAgICAgfVxyXG4gICAgIDwvZmlsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgICB2YXIgY29sb3JTcGFuID0gZWxlbWVudChieS5jc3MoJ3NwYW4nKSk7XHJcblxyXG4gICAgICAgaXQoJ3Nob3VsZCBjaGVjayBuZy1zdHlsZScsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICBleHBlY3QoY29sb3JTcGFuLmdldENzc1ZhbHVlKCdjb2xvcicpKS50b0JlKCdyZ2JhKDAsIDAsIDAsIDEpJyk7XHJcbiAgICAgICAgIGVsZW1lbnQoYnkuY3NzKCdpbnB1dFt2YWx1ZT1cXCdzZXQgY29sb3JcXCddJykpLmNsaWNrKCk7XHJcbiAgICAgICAgIGV4cGVjdChjb2xvclNwYW4uZ2V0Q3NzVmFsdWUoJ2NvbG9yJykpLnRvQmUoJ3JnYmEoMjU1LCAwLCAwLCAxKScpO1xyXG4gICAgICAgICBlbGVtZW50KGJ5LmNzcygnaW5wdXRbdmFsdWU9Y2xlYXJdJykpLmNsaWNrKCk7XHJcbiAgICAgICAgIGV4cGVjdChjb2xvclNwYW4uZ2V0Q3NzVmFsdWUoJ2NvbG9yJykpLnRvQmUoJ3JnYmEoMCwgMCwgMCwgMSknKTtcclxuICAgICAgIH0pO1xyXG4gICAgIDwvZmlsZT5cclxuICAgPC9leGFtcGxlPlxyXG4gKi9cclxudmFyIG5nU3R5bGVEaXJlY3RpdmUgPSBuZ0RpcmVjdGl2ZShmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikge1xyXG4gIHNjb3BlLiR3YXRjaChhdHRyLm5nU3R5bGUsIGZ1bmN0aW9uIG5nU3R5bGVXYXRjaEFjdGlvbihuZXdTdHlsZXMsIG9sZFN0eWxlcykge1xyXG4gICAgaWYgKG9sZFN0eWxlcyAmJiAobmV3U3R5bGVzICE9PSBvbGRTdHlsZXMpKSB7XHJcbiAgICAgIGZvckVhY2gob2xkU3R5bGVzLCBmdW5jdGlvbih2YWwsIHN0eWxlKSB7IGVsZW1lbnQuY3NzKHN0eWxlLCAnJyk7fSk7XHJcbiAgICB9XHJcbiAgICBpZiAobmV3U3R5bGVzKSBlbGVtZW50LmNzcyhuZXdTdHlsZXMpO1xyXG4gIH0sIHRydWUpO1xyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIG5nU3dpdGNoXHJcbiAqIEByZXN0cmljdCBFQVxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogVGhlIGBuZ1N3aXRjaGAgZGlyZWN0aXZlIGlzIHVzZWQgdG8gY29uZGl0aW9uYWxseSBzd2FwIERPTSBzdHJ1Y3R1cmUgb24geW91ciB0ZW1wbGF0ZSBiYXNlZCBvbiBhIHNjb3BlIGV4cHJlc3Npb24uXHJcbiAqIEVsZW1lbnRzIHdpdGhpbiBgbmdTd2l0Y2hgIGJ1dCB3aXRob3V0IGBuZ1N3aXRjaFdoZW5gIG9yIGBuZ1N3aXRjaERlZmF1bHRgIGRpcmVjdGl2ZXMgd2lsbCBiZSBwcmVzZXJ2ZWQgYXQgdGhlIGxvY2F0aW9uXHJcbiAqIGFzIHNwZWNpZmllZCBpbiB0aGUgdGVtcGxhdGUuXHJcbiAqXHJcbiAqIFRoZSBkaXJlY3RpdmUgaXRzZWxmIHdvcmtzIHNpbWlsYXIgdG8gbmdJbmNsdWRlLCBob3dldmVyLCBpbnN0ZWFkIG9mIGRvd25sb2FkaW5nIHRlbXBsYXRlIGNvZGUgKG9yIGxvYWRpbmcgaXRcclxuICogZnJvbSB0aGUgdGVtcGxhdGUgY2FjaGUpLCBgbmdTd2l0Y2hgIHNpbXBseSBjaG9vc2VzIG9uZSBvZiB0aGUgbmVzdGVkIGVsZW1lbnRzIGFuZCBtYWtlcyBpdCB2aXNpYmxlIGJhc2VkIG9uIHdoaWNoIGVsZW1lbnRcclxuICogbWF0Y2hlcyB0aGUgdmFsdWUgb2J0YWluZWQgZnJvbSB0aGUgZXZhbHVhdGVkIGV4cHJlc3Npb24uIEluIG90aGVyIHdvcmRzLCB5b3UgZGVmaW5lIGEgY29udGFpbmVyIGVsZW1lbnRcclxuICogKHdoZXJlIHlvdSBwbGFjZSB0aGUgZGlyZWN0aXZlKSwgcGxhY2UgYW4gZXhwcmVzc2lvbiBvbiB0aGUgKipgb249XCIuLi5cImAgYXR0cmlidXRlKipcclxuICogKG9yIHRoZSAqKmBuZy1zd2l0Y2g9XCIuLi5cImAgYXR0cmlidXRlKiopLCBkZWZpbmUgYW55IGlubmVyIGVsZW1lbnRzIGluc2lkZSBvZiB0aGUgZGlyZWN0aXZlIGFuZCBwbGFjZVxyXG4gKiBhIHdoZW4gYXR0cmlidXRlIHBlciBlbGVtZW50LiBUaGUgd2hlbiBhdHRyaWJ1dGUgaXMgdXNlZCB0byBpbmZvcm0gbmdTd2l0Y2ggd2hpY2ggZWxlbWVudCB0byBkaXNwbGF5IHdoZW4gdGhlIG9uXHJcbiAqIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLiBJZiBhIG1hdGNoaW5nIGV4cHJlc3Npb24gaXMgbm90IGZvdW5kIHZpYSBhIHdoZW4gYXR0cmlidXRlIHRoZW4gYW4gZWxlbWVudCB3aXRoIHRoZSBkZWZhdWx0XHJcbiAqIGF0dHJpYnV0ZSBpcyBkaXNwbGF5ZWQuXHJcbiAqXHJcbiAqIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCI+XHJcbiAqIEJlIGF3YXJlIHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZXMgdG8gbWF0Y2ggYWdhaW5zdCBjYW5ub3QgYmUgZXhwcmVzc2lvbnMuIFRoZXkgYXJlIGludGVycHJldGVkXHJcbiAqIGFzIGxpdGVyYWwgc3RyaW5nIHZhbHVlcyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKiBGb3IgZXhhbXBsZSwgKipgbmctc3dpdGNoLXdoZW49XCJzb21lVmFsXCJgKiogd2lsbCBtYXRjaCBhZ2FpbnN0IHRoZSBzdHJpbmcgYFwic29tZVZhbFwiYCBub3QgYWdhaW5zdCB0aGVcclxuICogdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gYCRzY29wZS5zb21lVmFsYC5cclxuICogPC9kaXY+XHJcblxyXG4gKiBAYW5pbWF0aW9uc1xyXG4gKiBlbnRlciAtIGhhcHBlbnMgYWZ0ZXIgdGhlIG5nU3dpdGNoIGNvbnRlbnRzIGNoYW5nZSBhbmQgdGhlIG1hdGNoZWQgY2hpbGQgZWxlbWVudCBpcyBwbGFjZWQgaW5zaWRlIHRoZSBjb250YWluZXJcclxuICogbGVhdmUgLSBoYXBwZW5zIGp1c3QgYWZ0ZXIgdGhlIG5nU3dpdGNoIGNvbnRlbnRzIGNoYW5nZSBhbmQganVzdCBiZWZvcmUgdGhlIGZvcm1lciBjb250ZW50cyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBET01cclxuICpcclxuICogQHVzYWdlXHJcbiAqXHJcbiAqIGBgYFxyXG4gKiA8QU5ZIG5nLXN3aXRjaD1cImV4cHJlc3Npb25cIj5cclxuICogICA8QU5ZIG5nLXN3aXRjaC13aGVuPVwibWF0Y2hWYWx1ZTFcIj4uLi48L0FOWT5cclxuICogICA8QU5ZIG5nLXN3aXRjaC13aGVuPVwibWF0Y2hWYWx1ZTJcIj4uLi48L0FOWT5cclxuICogICA8QU5ZIG5nLXN3aXRjaC1kZWZhdWx0Pi4uLjwvQU5ZPlxyXG4gKiA8L0FOWT5cclxuICogYGBgXHJcbiAqXHJcbiAqXHJcbiAqIEBzY29wZVxyXG4gKiBAcHJpb3JpdHkgMTIwMFxyXG4gKiBAcGFyYW0geyp9IG5nU3dpdGNofG9uIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdCA8dHQ+bmctc3dpdGNoLXdoZW48L3R0Pi5cclxuICogT24gY2hpbGQgZWxlbWVudHMgYWRkOlxyXG4gKlxyXG4gKiAqIGBuZ1N3aXRjaFdoZW5gOiB0aGUgY2FzZSBzdGF0ZW1lbnQgdG8gbWF0Y2ggYWdhaW5zdC4gSWYgbWF0Y2ggdGhlbiB0aGlzXHJcbiAqICAgY2FzZSB3aWxsIGJlIGRpc3BsYXllZC4gSWYgdGhlIHNhbWUgbWF0Y2ggYXBwZWFycyBtdWx0aXBsZSB0aW1lcywgYWxsIHRoZVxyXG4gKiAgIGVsZW1lbnRzIHdpbGwgYmUgZGlzcGxheWVkLlxyXG4gKiAqIGBuZ1N3aXRjaERlZmF1bHRgOiB0aGUgZGVmYXVsdCBjYXNlIHdoZW4gbm8gb3RoZXIgY2FzZSBtYXRjaC4gSWYgdGhlcmVcclxuICogICBhcmUgbXVsdGlwbGUgZGVmYXVsdCBjYXNlcywgYWxsIG9mIHRoZW0gd2lsbCBiZSBkaXNwbGF5ZWQgd2hlbiBubyBvdGhlclxyXG4gKiAgIGNhc2UgbWF0Y2guXHJcbiAqXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgPGV4YW1wbGUgbW9kdWxlPVwic3dpdGNoRXhhbXBsZVwiIGRlcHM9XCJhbmd1bGFyLWFuaW1hdGUuanNcIiBhbmltYXRpb25zPVwidHJ1ZVwiPlxyXG4gICAgPGZpbGUgbmFtZT1cImluZGV4Lmh0bWxcIj5cclxuICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cclxuICAgICAgICA8c2VsZWN0IG5nLW1vZGVsPVwic2VsZWN0aW9uXCIgbmctb3B0aW9ucz1cIml0ZW0gZm9yIGl0ZW0gaW4gaXRlbXNcIj5cclxuICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICA8dHQ+c2VsZWN0aW9uPXt7c2VsZWN0aW9ufX08L3R0PlxyXG4gICAgICAgIDxoci8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFuaW1hdGUtc3dpdGNoLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICBuZy1zd2l0Y2ggb249XCJzZWxlY3Rpb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFuaW1hdGUtc3dpdGNoXCIgbmctc3dpdGNoLXdoZW49XCJzZXR0aW5nc1wiPlNldHRpbmdzIERpdjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYW5pbWF0ZS1zd2l0Y2hcIiBuZy1zd2l0Y2gtd2hlbj1cImhvbWVcIj5Ib21lIFNwYW48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFuaW1hdGUtc3dpdGNoXCIgbmctc3dpdGNoLWRlZmF1bHQ+ZGVmYXVsdDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZmlsZT5cclxuICAgIDxmaWxlIG5hbWU9XCJzY3JpcHQuanNcIj5cclxuICAgICAgYW5ndWxhci5tb2R1bGUoJ3N3aXRjaEV4YW1wbGUnLCBbJ25nQW5pbWF0ZSddKVxyXG4gICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAgICAgICAgICAkc2NvcGUuaXRlbXMgPSBbJ3NldHRpbmdzJywgJ2hvbWUnLCAnb3RoZXInXTtcclxuICAgICAgICAgICRzY29wZS5zZWxlY3Rpb24gPSAkc2NvcGUuaXRlbXNbMF07XHJcbiAgICAgICAgfV0pO1xyXG4gICAgPC9maWxlPlxyXG4gICAgPGZpbGUgbmFtZT1cImFuaW1hdGlvbnMuY3NzXCI+XHJcbiAgICAgIC5hbmltYXRlLXN3aXRjaC1jb250YWluZXIge1xyXG4gICAgICAgIHBvc2l0aW9uOnJlbGF0aXZlO1xyXG4gICAgICAgIGJhY2tncm91bmQ6d2hpdGU7XHJcbiAgICAgICAgYm9yZGVyOjFweCBzb2xpZCBibGFjaztcclxuICAgICAgICBoZWlnaHQ6NDBweDtcclxuICAgICAgICBvdmVyZmxvdzpoaWRkZW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5hbmltYXRlLXN3aXRjaCB7XHJcbiAgICAgICAgcGFkZGluZzoxMHB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAuYW5pbWF0ZS1zd2l0Y2gubmctYW5pbWF0ZSB7XHJcbiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOmFsbCBjdWJpYy1iZXppZXIoMC4yNTAsIDAuNDYwLCAwLjQ1MCwgMC45NDApIDAuNXM7XHJcbiAgICAgICAgdHJhbnNpdGlvbjphbGwgY3ViaWMtYmV6aWVyKDAuMjUwLCAwLjQ2MCwgMC40NTAsIDAuOTQwKSAwLjVzO1xyXG5cclxuICAgICAgICBwb3NpdGlvbjphYnNvbHV0ZTtcclxuICAgICAgICB0b3A6MDtcclxuICAgICAgICBsZWZ0OjA7XHJcbiAgICAgICAgcmlnaHQ6MDtcclxuICAgICAgICBib3R0b206MDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmFuaW1hdGUtc3dpdGNoLm5nLWxlYXZlLm5nLWxlYXZlLWFjdGl2ZSxcclxuICAgICAgLmFuaW1hdGUtc3dpdGNoLm5nLWVudGVyIHtcclxuICAgICAgICB0b3A6LTUwcHg7XHJcbiAgICAgIH1cclxuICAgICAgLmFuaW1hdGUtc3dpdGNoLm5nLWxlYXZlLFxyXG4gICAgICAuYW5pbWF0ZS1zd2l0Y2gubmctZW50ZXIubmctZW50ZXItYWN0aXZlIHtcclxuICAgICAgICB0b3A6MDtcclxuICAgICAgfVxyXG4gICAgPC9maWxlPlxyXG4gICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICB2YXIgc3dpdGNoRWxlbSA9IGVsZW1lbnQoYnkuY3NzKCdbbmctc3dpdGNoXScpKTtcclxuICAgICAgdmFyIHNlbGVjdCA9IGVsZW1lbnQoYnkubW9kZWwoJ3NlbGVjdGlvbicpKTtcclxuXHJcbiAgICAgIGl0KCdzaG91bGQgc3RhcnQgaW4gc2V0dGluZ3MnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBleHBlY3Qoc3dpdGNoRWxlbS5nZXRUZXh0KCkpLnRvTWF0Y2goL1NldHRpbmdzIERpdi8pO1xyXG4gICAgICB9KTtcclxuICAgICAgaXQoJ3Nob3VsZCBjaGFuZ2UgdG8gaG9tZScsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHNlbGVjdC5hbGwoYnkuY3NzKCdvcHRpb24nKSkuZ2V0KDEpLmNsaWNrKCk7XHJcbiAgICAgICAgZXhwZWN0KHN3aXRjaEVsZW0uZ2V0VGV4dCgpKS50b01hdGNoKC9Ib21lIFNwYW4vKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGl0KCdzaG91bGQgc2VsZWN0IGRlZmF1bHQnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBzZWxlY3QuYWxsKGJ5LmNzcygnb3B0aW9uJykpLmdldCgyKS5jbGljaygpO1xyXG4gICAgICAgIGV4cGVjdChzd2l0Y2hFbGVtLmdldFRleHQoKSkudG9NYXRjaCgvZGVmYXVsdC8pO1xyXG4gICAgICB9KTtcclxuICAgIDwvZmlsZT5cclxuICA8L2V4YW1wbGU+XHJcbiAqL1xyXG52YXIgbmdTd2l0Y2hEaXJlY3RpdmUgPSBbJyRhbmltYXRlJywgZnVuY3Rpb24oJGFuaW1hdGUpIHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVzdHJpY3Q6ICdFQScsXHJcbiAgICByZXF1aXJlOiAnbmdTd2l0Y2gnLFxyXG5cclxuICAgIC8vIGFza3MgZm9yICRzY29wZSB0byBmb29sIHRoZSBCQyBjb250cm9sbGVyIG1vZHVsZVxyXG4gICAgY29udHJvbGxlcjogWyckc2NvcGUnLCBmdW5jdGlvbiBuZ1N3aXRjaENvbnRyb2xsZXIoKSB7XHJcbiAgICAgdGhpcy5jYXNlcyA9IHt9O1xyXG4gICAgfV0sXHJcbiAgICBsaW5rOiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0ciwgbmdTd2l0Y2hDb250cm9sbGVyKSB7XHJcbiAgICAgIHZhciB3YXRjaEV4cHIgPSBhdHRyLm5nU3dpdGNoIHx8IGF0dHIub24sXHJcbiAgICAgICAgICBzZWxlY3RlZFRyYW5zY2x1ZGVzID0gW10sXHJcbiAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRzID0gW10sXHJcbiAgICAgICAgICBwcmV2aW91c0xlYXZlQW5pbWF0aW9ucyA9IFtdLFxyXG4gICAgICAgICAgc2VsZWN0ZWRTY29wZXMgPSBbXTtcclxuXHJcbiAgICAgIHZhciBzcGxpY2VGYWN0b3J5ID0gZnVuY3Rpb24oYXJyYXksIGluZGV4KSB7XHJcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7IGFycmF5LnNwbGljZShpbmRleCwgMSk7IH07XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBzY29wZS4kd2F0Y2god2F0Y2hFeHByLCBmdW5jdGlvbiBuZ1N3aXRjaFdhdGNoQWN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIGksIGlpO1xyXG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gcHJldmlvdXNMZWF2ZUFuaW1hdGlvbnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG4gICAgICAgICAgJGFuaW1hdGUuY2FuY2VsKHByZXZpb3VzTGVhdmVBbmltYXRpb25zW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJldmlvdXNMZWF2ZUFuaW1hdGlvbnMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBzZWxlY3RlZFNjb3Blcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcbiAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBnZXRCbG9ja05vZGVzKHNlbGVjdGVkRWxlbWVudHNbaV0uY2xvbmUpO1xyXG4gICAgICAgICAgc2VsZWN0ZWRTY29wZXNbaV0uJGRlc3Ryb3koKTtcclxuICAgICAgICAgIHZhciBwcm9taXNlID0gcHJldmlvdXNMZWF2ZUFuaW1hdGlvbnNbaV0gPSAkYW5pbWF0ZS5sZWF2ZShzZWxlY3RlZCk7XHJcbiAgICAgICAgICBwcm9taXNlLnRoZW4oc3BsaWNlRmFjdG9yeShwcmV2aW91c0xlYXZlQW5pbWF0aW9ucywgaSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHNlbGVjdGVkU2NvcGVzLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIGlmICgoc2VsZWN0ZWRUcmFuc2NsdWRlcyA9IG5nU3dpdGNoQ29udHJvbGxlci5jYXNlc1snIScgKyB2YWx1ZV0gfHwgbmdTd2l0Y2hDb250cm9sbGVyLmNhc2VzWyc/J10pKSB7XHJcbiAgICAgICAgICBmb3JFYWNoKHNlbGVjdGVkVHJhbnNjbHVkZXMsIGZ1bmN0aW9uKHNlbGVjdGVkVHJhbnNjbHVkZSkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZFRyYW5zY2x1ZGUudHJhbnNjbHVkZShmdW5jdGlvbihjYXNlRWxlbWVudCwgc2VsZWN0ZWRTY29wZSkge1xyXG4gICAgICAgICAgICAgIHNlbGVjdGVkU2NvcGVzLnB1c2goc2VsZWN0ZWRTY29wZSk7XHJcbiAgICAgICAgICAgICAgdmFyIGFuY2hvciA9IHNlbGVjdGVkVHJhbnNjbHVkZS5lbGVtZW50O1xyXG4gICAgICAgICAgICAgIGNhc2VFbGVtZW50W2Nhc2VFbGVtZW50Lmxlbmd0aCsrXSA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJyBlbmQgbmdTd2l0Y2hXaGVuOiAnKTtcclxuICAgICAgICAgICAgICB2YXIgYmxvY2sgPSB7IGNsb25lOiBjYXNlRWxlbWVudCB9O1xyXG5cclxuICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRzLnB1c2goYmxvY2spO1xyXG4gICAgICAgICAgICAgICRhbmltYXRlLmVudGVyKGNhc2VFbGVtZW50LCBhbmNob3IucGFyZW50KCksIGFuY2hvcik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9O1xyXG59XTtcclxuXHJcbnZhciBuZ1N3aXRjaFdoZW5EaXJlY3RpdmUgPSBuZ0RpcmVjdGl2ZSh7XHJcbiAgdHJhbnNjbHVkZTogJ2VsZW1lbnQnLFxyXG4gIHByaW9yaXR5OiAxMjAwLFxyXG4gIHJlcXVpcmU6ICdebmdTd2l0Y2gnLFxyXG4gIG11bHRFbGVtZW50OiB0cnVlLFxyXG4gIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycywgY3RybCwgJHRyYW5zY2x1ZGUpIHtcclxuICAgIGN0cmwuY2FzZXNbJyEnICsgYXR0cnMubmdTd2l0Y2hXaGVuXSA9IChjdHJsLmNhc2VzWychJyArIGF0dHJzLm5nU3dpdGNoV2hlbl0gfHwgW10pO1xyXG4gICAgY3RybC5jYXNlc1snIScgKyBhdHRycy5uZ1N3aXRjaFdoZW5dLnB1c2goeyB0cmFuc2NsdWRlOiAkdHJhbnNjbHVkZSwgZWxlbWVudDogZWxlbWVudCB9KTtcclxuICB9XHJcbn0pO1xyXG5cclxudmFyIG5nU3dpdGNoRGVmYXVsdERpcmVjdGl2ZSA9IG5nRGlyZWN0aXZlKHtcclxuICB0cmFuc2NsdWRlOiAnZWxlbWVudCcsXHJcbiAgcHJpb3JpdHk6IDEyMDAsXHJcbiAgcmVxdWlyZTogJ15uZ1N3aXRjaCcsXHJcbiAgbXVsdEVsZW1lbnQ6IHRydWUsXHJcbiAgbGluazogZnVuY3Rpb24oc2NvcGUsIGVsZW1lbnQsIGF0dHIsIGN0cmwsICR0cmFuc2NsdWRlKSB7XHJcbiAgICBjdHJsLmNhc2VzWyc/J10gPSAoY3RybC5jYXNlc1snPyddIHx8IFtdKTtcclxuICAgIGN0cmwuY2FzZXNbJz8nXS5wdXNoKHsgdHJhbnNjbHVkZTogJHRyYW5zY2x1ZGUsIGVsZW1lbnQ6IGVsZW1lbnQgfSk7XHJcbiAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBuZ1RyYW5zY2x1ZGVcclxuICogQHJlc3RyaWN0IEVBQ1xyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogRGlyZWN0aXZlIHRoYXQgbWFya3MgdGhlIGluc2VydGlvbiBwb2ludCBmb3IgdGhlIHRyYW5zY2x1ZGVkIERPTSBvZiB0aGUgbmVhcmVzdCBwYXJlbnQgZGlyZWN0aXZlIHRoYXQgdXNlcyB0cmFuc2NsdXNpb24uXHJcbiAqXHJcbiAqIEFueSBleGlzdGluZyBjb250ZW50IG9mIHRoZSBlbGVtZW50IHRoYXQgdGhpcyBkaXJlY3RpdmUgaXMgcGxhY2VkIG9uIHdpbGwgYmUgcmVtb3ZlZCBiZWZvcmUgdGhlIHRyYW5zY2x1ZGVkIGNvbnRlbnQgaXMgaW5zZXJ0ZWQuXHJcbiAqXHJcbiAqIEBlbGVtZW50IEFOWVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICA8ZXhhbXBsZSBtb2R1bGU9XCJ0cmFuc2NsdWRlRXhhbXBsZVwiPlxyXG4gICAgIDxmaWxlIG5hbWU9XCJpbmRleC5odG1sXCI+XHJcbiAgICAgICA8c2NyaXB0PlxyXG4gICAgICAgICBhbmd1bGFyLm1vZHVsZSgndHJhbnNjbHVkZUV4YW1wbGUnLCBbXSlcclxuICAgICAgICAgIC5kaXJlY3RpdmUoJ3BhbmUnLCBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgcmVzdHJpY3Q6ICdFJyxcclxuICAgICAgICAgICAgICAgdHJhbnNjbHVkZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgc2NvcGU6IHsgdGl0bGU6J0AnIH0sXHJcbiAgICAgICAgICAgICAgIHRlbXBsYXRlOiAnPGRpdiBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IGdyYXlcIj57e3RpdGxlfX08L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxuZy10cmFuc2NsdWRlPjwvbmctdHJhbnNjbHVkZT4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nXHJcbiAgICAgICAgICAgICB9O1xyXG4gICAgICAgICB9KVxyXG4gICAgICAgICAuY29udHJvbGxlcignRXhhbXBsZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkge1xyXG4gICAgICAgICAgICRzY29wZS50aXRsZSA9ICdMb3JlbSBJcHN1bSc7XHJcbiAgICAgICAgICAgJHNjb3BlLnRleHQgPSAnTmVxdWUgcG9ycm8gcXVpc3F1YW0gZXN0IHF1aSBkb2xvcmVtIGlwc3VtIHF1aWEgZG9sb3IuLi4nO1xyXG4gICAgICAgICB9XSk7XHJcbiAgICAgICA8L3NjcmlwdD5cclxuICAgICAgIDxkaXYgbmctY29udHJvbGxlcj1cIkV4YW1wbGVDb250cm9sbGVyXCI+XHJcbiAgICAgICAgIDxpbnB1dCBuZy1tb2RlbD1cInRpdGxlXCI+PGJyPlxyXG4gICAgICAgICA8dGV4dGFyZWEgbmctbW9kZWw9XCJ0ZXh0XCI+PC90ZXh0YXJlYT4gPGJyLz5cclxuICAgICAgICAgPHBhbmUgdGl0bGU9XCJ7e3RpdGxlfX1cIj57e3RleHR9fTwvcGFuZT5cclxuICAgICAgIDwvZGl2PlxyXG4gICAgIDwvZmlsZT5cclxuICAgICA8ZmlsZSBuYW1lPVwicHJvdHJhY3Rvci5qc1wiIHR5cGU9XCJwcm90cmFjdG9yXCI+XHJcbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIHRyYW5zY2x1ZGVkJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICB2YXIgdGl0bGVFbGVtZW50ID0gZWxlbWVudChieS5tb2RlbCgndGl0bGUnKSk7XHJcbiAgICAgICAgICB0aXRsZUVsZW1lbnQuY2xlYXIoKTtcclxuICAgICAgICAgIHRpdGxlRWxlbWVudC5zZW5kS2V5cygnVElUTEUnKTtcclxuICAgICAgICAgIHZhciB0ZXh0RWxlbWVudCA9IGVsZW1lbnQoYnkubW9kZWwoJ3RleHQnKSk7XHJcbiAgICAgICAgICB0ZXh0RWxlbWVudC5jbGVhcigpO1xyXG4gICAgICAgICAgdGV4dEVsZW1lbnQuc2VuZEtleXMoJ1RFWFQnKTtcclxuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJ3RpdGxlJykpLmdldFRleHQoKSkudG9FcXVhbCgnVElUTEUnKTtcclxuICAgICAgICAgIGV4cGVjdChlbGVtZW50KGJ5LmJpbmRpbmcoJ3RleHQnKSkuZ2V0VGV4dCgpKS50b0VxdWFsKCdURVhUJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgPC9maWxlPlxyXG4gICA8L2V4YW1wbGU+XHJcbiAqXHJcbiAqL1xyXG52YXIgbmdUcmFuc2NsdWRlRGlyZWN0aXZlID0gbmdEaXJlY3RpdmUoe1xyXG4gIHJlc3RyaWN0OiAnRUFDJyxcclxuICBsaW5rOiBmdW5jdGlvbigkc2NvcGUsICRlbGVtZW50LCAkYXR0cnMsIGNvbnRyb2xsZXIsICR0cmFuc2NsdWRlKSB7XHJcbiAgICBpZiAoISR0cmFuc2NsdWRlKSB7XHJcbiAgICAgIHRocm93IG1pbkVycignbmdUcmFuc2NsdWRlJykoJ29ycGhhbicsXHJcbiAgICAgICAnSWxsZWdhbCB1c2Ugb2YgbmdUcmFuc2NsdWRlIGRpcmVjdGl2ZSBpbiB0aGUgdGVtcGxhdGUhICcgK1xyXG4gICAgICAgJ05vIHBhcmVudCBkaXJlY3RpdmUgdGhhdCByZXF1aXJlcyBhIHRyYW5zY2x1c2lvbiBmb3VuZC4gJyArXHJcbiAgICAgICAnRWxlbWVudDogezB9JyxcclxuICAgICAgIHN0YXJ0aW5nVGFnKCRlbGVtZW50KSk7XHJcbiAgICB9XHJcblxyXG4gICAgJHRyYW5zY2x1ZGUoZnVuY3Rpb24oY2xvbmUpIHtcclxuICAgICAgJGVsZW1lbnQuZW1wdHkoKTtcclxuICAgICAgJGVsZW1lbnQuYXBwZW5kKGNsb25lKTtcclxuICAgIH0pO1xyXG4gIH1cclxufSk7XHJcblxyXG4vKipcclxuICogQG5nZG9jIGRpcmVjdGl2ZVxyXG4gKiBAbmFtZSBzY3JpcHRcclxuICogQHJlc3RyaWN0IEVcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIExvYWQgdGhlIGNvbnRlbnQgb2YgYSBgPHNjcmlwdD5gIGVsZW1lbnQgaW50byB7QGxpbmsgbmcuJHRlbXBsYXRlQ2FjaGUgYCR0ZW1wbGF0ZUNhY2hlYH0sIHNvIHRoYXQgdGhlXHJcbiAqIHRlbXBsYXRlIGNhbiBiZSB1c2VkIGJ5IHtAbGluayBuZy5kaXJlY3RpdmU6bmdJbmNsdWRlIGBuZ0luY2x1ZGVgfSxcclxuICoge0BsaW5rIG5nUm91dGUuZGlyZWN0aXZlOm5nVmlldyBgbmdWaWV3YH0sIG9yIHtAbGluayBndWlkZS9kaXJlY3RpdmUgZGlyZWN0aXZlc30uIFRoZSB0eXBlIG9mIHRoZVxyXG4gKiBgPHNjcmlwdD5gIGVsZW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYHRleHQvbmctdGVtcGxhdGVgLCBhbmQgYSBjYWNoZSBuYW1lIGZvciB0aGUgdGVtcGxhdGUgbXVzdCBiZVxyXG4gKiBhc3NpZ25lZCB0aHJvdWdoIHRoZSBlbGVtZW50J3MgYGlkYCwgd2hpY2ggY2FuIHRoZW4gYmUgdXNlZCBhcyBhIGRpcmVjdGl2ZSdzIGB0ZW1wbGF0ZVVybGAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIE11c3QgYmUgc2V0IHRvIGAndGV4dC9uZy10ZW1wbGF0ZSdgLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgQ2FjaGUgbmFtZSBvZiB0aGUgdGVtcGxhdGUuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgPGV4YW1wbGU+XHJcbiAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICA8c2NyaXB0IHR5cGU9XCJ0ZXh0L25nLXRlbXBsYXRlXCIgaWQ9XCIvdHBsLmh0bWxcIj5cclxuICAgICAgICBDb250ZW50IG9mIHRoZSB0ZW1wbGF0ZS5cclxuICAgICAgPC9zY3JpcHQ+XHJcblxyXG4gICAgICA8YSBuZy1jbGljaz1cImN1cnJlbnRUcGw9Jy90cGwuaHRtbCdcIiBpZD1cInRwbC1saW5rXCI+TG9hZCBpbmxpbmVkIHRlbXBsYXRlPC9hPlxyXG4gICAgICA8ZGl2IGlkPVwidHBsLWNvbnRlbnRcIiBuZy1pbmNsdWRlIHNyYz1cImN1cnJlbnRUcGxcIj48L2Rpdj5cclxuICAgIDwvZmlsZT5cclxuICAgIDxmaWxlIG5hbWU9XCJwcm90cmFjdG9yLmpzXCIgdHlwZT1cInByb3RyYWN0b3JcIj5cclxuICAgICAgaXQoJ3Nob3VsZCBsb2FkIHRlbXBsYXRlIGRlZmluZWQgaW5zaWRlIHNjcmlwdCB0YWcnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBlbGVtZW50KGJ5LmNzcygnI3RwbC1saW5rJykpLmNsaWNrKCk7XHJcbiAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuY3NzKCcjdHBsLWNvbnRlbnQnKSkuZ2V0VGV4dCgpKS50b01hdGNoKC9Db250ZW50IG9mIHRoZSB0ZW1wbGF0ZS8pO1xyXG4gICAgICB9KTtcclxuICAgIDwvZmlsZT5cclxuICA8L2V4YW1wbGU+XHJcbiAqL1xyXG52YXIgc2NyaXB0RGlyZWN0aXZlID0gWyckdGVtcGxhdGVDYWNoZScsIGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlKSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHJlc3RyaWN0OiAnRScsXHJcbiAgICB0ZXJtaW5hbDogdHJ1ZSxcclxuICAgIGNvbXBpbGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHIpIHtcclxuICAgICAgaWYgKGF0dHIudHlwZSA9PSAndGV4dC9uZy10ZW1wbGF0ZScpIHtcclxuICAgICAgICB2YXIgdGVtcGxhdGVVcmwgPSBhdHRyLmlkLFxyXG4gICAgICAgICAgICAvLyBJRSBpcyBub3QgY29uc2lzdGVudCwgaW4gc2NyaXB0cyB3ZSBoYXZlIHRvIHJlYWQgLnRleHQgYnV0IGluIG90aGVyIG5vZGVzIHdlIGhhdmUgdG8gcmVhZCAudGV4dENvbnRlbnRcclxuICAgICAgICAgICAgdGV4dCA9IGVsZW1lbnRbMF0udGV4dDtcclxuXHJcbiAgICAgICAgJHRlbXBsYXRlQ2FjaGUucHV0KHRlbXBsYXRlVXJsLCB0ZXh0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcbn1dO1xyXG5cclxudmFyIG5nT3B0aW9uc01pbkVyciA9IG1pbkVycignbmdPcHRpb25zJyk7XHJcbi8qKlxyXG4gKiBAbmdkb2MgZGlyZWN0aXZlXHJcbiAqIEBuYW1lIHNlbGVjdFxyXG4gKiBAcmVzdHJpY3QgRVxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogSFRNTCBgU0VMRUNUYCBlbGVtZW50IHdpdGggYW5ndWxhciBkYXRhLWJpbmRpbmcuXHJcbiAqXHJcbiAqICMgYG5nT3B0aW9uc2BcclxuICpcclxuICogVGhlIGBuZ09wdGlvbnNgIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBkeW5hbWljYWxseSBnZW5lcmF0ZSBhIGxpc3Qgb2YgYDxvcHRpb24+YFxyXG4gKiBlbGVtZW50cyBmb3IgdGhlIGA8c2VsZWN0PmAgZWxlbWVudCB1c2luZyB0aGUgYXJyYXkgb3Igb2JqZWN0IG9idGFpbmVkIGJ5IGV2YWx1YXRpbmcgdGhlXHJcbiAqIGBuZ09wdGlvbnNgIGNvbXByZWhlbnNpb25fZXhwcmVzc2lvbi5cclxuICpcclxuICogSW4gbWFueSBjYXNlcywgYG5nUmVwZWF0YCBjYW4gYmUgdXNlZCBvbiBgPG9wdGlvbj5gIGVsZW1lbnRzIGluc3RlYWQgb2YgYG5nT3B0aW9uc2AgdG8gYWNoaWV2ZSBhXHJcbiAqIHNpbWlsYXIgcmVzdWx0LiBIb3dldmVyLCB0aGUgYG5nT3B0aW9uc2AgcHJvdmlkZXMgc29tZSBiZW5lZml0cyBzdWNoIGFzIHJlZHVjaW5nIG1lbW9yeSBhbmRcclxuICogaW5jcmVhc2luZyBzcGVlZCBieSBub3QgY3JlYXRpbmcgYSBuZXcgc2NvcGUgZm9yIGVhY2ggcmVwZWF0ZWQgaW5zdGFuY2UsIGFzIHdlbGwgYXMgcHJvdmlkaW5nXHJcbiAqIG1vcmUgZmxleGliaWxpdHkgaW4gaG93IHRoZSBgc2VsZWN0YCdzIG1vZGVsIGlzIGFzc2lnbmVkIHZpYSBgc2VsZWN0IGFzYC4gYG5nT3B0aW9uc2Agc2hvdWxkIGJlXHJcbiAqIHVzZWQgd2hlbiB0aGUgYHNlbGVjdGAgbW9kZWwgbmVlZHMgdG8gYmUgYm91bmQgdG8gYSBub24tc3RyaW5nIHZhbHVlLiBUaGlzIGlzIGJlY2F1c2UgYW4gb3B0aW9uXHJcbiAqIGVsZW1lbnQgY2FuIG9ubHkgYmUgYm91bmQgdG8gc3RyaW5nIHZhbHVlcyBhdCBwcmVzZW50LlxyXG4gKlxyXG4gKiBXaGVuIGFuIGl0ZW0gaW4gdGhlIGA8c2VsZWN0PmAgbWVudSBpcyBzZWxlY3RlZCwgdGhlIGFycmF5IGVsZW1lbnQgb3Igb2JqZWN0IHByb3BlcnR5XHJcbiAqIHJlcHJlc2VudGVkIGJ5IHRoZSBzZWxlY3RlZCBvcHRpb24gd2lsbCBiZSBib3VuZCB0byB0aGUgbW9kZWwgaWRlbnRpZmllZCBieSB0aGUgYG5nTW9kZWxgXHJcbiAqIGRpcmVjdGl2ZS5cclxuICpcclxuICogT3B0aW9uYWxseSwgYSBzaW5nbGUgaGFyZC1jb2RlZCBgPG9wdGlvbj5gIGVsZW1lbnQsIHdpdGggdGhlIHZhbHVlIHNldCB0byBhbiBlbXB0eSBzdHJpbmcsIGNhblxyXG4gKiBiZSBuZXN0ZWQgaW50byB0aGUgYDxzZWxlY3Q+YCBlbGVtZW50LiBUaGlzIGVsZW1lbnQgd2lsbCB0aGVuIHJlcHJlc2VudCB0aGUgYG51bGxgIG9yIFwibm90IHNlbGVjdGVkXCJcclxuICogb3B0aW9uLiBTZWUgZXhhbXBsZSBiZWxvdyBmb3IgZGVtb25zdHJhdGlvbi5cclxuICpcclxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIj5cclxuICogKipOb3RlOioqIGBuZ01vZGVsYCBjb21wYXJlcyBieSByZWZlcmVuY2UsIG5vdCB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiBiaW5kaW5nIHRvIGFuXHJcbiAqIGFycmF5IG9mIG9iamVjdHMuIFNlZSBhbiBleGFtcGxlIFtpbiB0aGlzIGpzZmlkZGxlXShodHRwOi8vanNmaWRkbGUubmV0L3FXelRiLykuXHJcbiAqIDwvZGl2PlxyXG4gKlxyXG4gKiAjIyBgc2VsZWN0IGFzYFxyXG4gKlxyXG4gKiBVc2luZyBgc2VsZWN0IGFzYCB3aWxsIGJpbmQgdGhlIHJlc3VsdCBvZiB0aGUgYHNlbGVjdCBhc2AgZXhwcmVzc2lvbiB0byB0aGUgbW9kZWwsIGJ1dFxyXG4gKiB0aGUgdmFsdWUgb2YgdGhlIGA8c2VsZWN0PmAgYW5kIGA8b3B0aW9uPmAgaHRtbCBlbGVtZW50cyB3aWxsIGJlIGVpdGhlciB0aGUgaW5kZXggKGZvciBhcnJheSBkYXRhIHNvdXJjZXMpXHJcbiAqIG9yIHByb3BlcnR5IG5hbWUgKGZvciBvYmplY3QgZGF0YSBzb3VyY2VzKSBvZiB0aGUgdmFsdWUgd2l0aGluIHRoZSBjb2xsZWN0aW9uLiBJZiBhIGB0cmFjayBieWAgZXhwcmVzc2lvblxyXG4gKiBpcyB1c2VkLCB0aGUgcmVzdWx0IG9mIHRoYXQgZXhwcmVzc2lvbiB3aWxsIGJlIHNldCBhcyB0aGUgdmFsdWUgb2YgdGhlIGBvcHRpb25gIGFuZCBgc2VsZWN0YCBlbGVtZW50cy5cclxuICpcclxuICogIyMjIGBzZWxlY3QgYXNgIHdpdGggYHRyYWNrZXhwcmBcclxuICpcclxuICogVXNpbmcgYHNlbGVjdCBhc2AgdG9nZXRoZXIgd2l0aCBgdHJhY2tleHByYCBpcyBub3QgcmVjb21tZW5kZWQuIFJlYXNvbmluZzpcclxuICpcclxuICogLSBFeGFtcGxlOiAmbHQ7c2VsZWN0IG5nLW9wdGlvbnM9XCJpdGVtLnN1Ykl0ZW0gYXMgaXRlbS5sYWJlbCBmb3IgaXRlbSBpbiB2YWx1ZXMgdHJhY2sgYnkgaXRlbS5pZFwiIG5nLW1vZGVsPVwic2VsZWN0ZWRcIiZndDtcclxuICogICB2YWx1ZXM6IFt7aWQ6IDEsIGxhYmVsOiAnYUxhYmVsJywgc3ViSXRlbToge25hbWU6ICdhU3ViSXRlbSd9fSwge2lkOiAyLCBsYWJlbDogJ2JMYWJlbCcsIHN1Ykl0ZW06IHtuYW1lOiAnYlN1Ykl0ZW0nfX1dLFxyXG4gKiAgICRzY29wZS5zZWxlY3RlZCA9IHtuYW1lOiAnYVN1Ykl0ZW0nfTtcclxuICogLSB0cmFjayBieSBpcyBhbHdheXMgYXBwbGllZCB0byBgdmFsdWVgLCB3aXRoIHRoZSBwdXJwb3NlIG9mIHByZXNlcnZpbmcgdGhlIHNlbGVjdGlvbixcclxuICogICAodG8gYGl0ZW1gIGluIHRoaXMgY2FzZSlcclxuICogLSB0byBjYWxjdWxhdGUgd2hldGhlciBhbiBpdGVtIGlzIHNlbGVjdGVkIHdlIGRvIHRoZSBmb2xsb3dpbmc6XHJcbiAqICAgMS4gYXBwbHkgYHRyYWNrIGJ5YCB0byB0aGUgdmFsdWVzIGluIHRoZSBhcnJheSwgZS5nLlxyXG4gKiAgICAgIEluIHRoZSBleGFtcGxlOiBbMSwyXVxyXG4gKiAgIDIuIGFwcGx5IGB0cmFjayBieWAgdG8gdGhlIGFscmVhZHkgc2VsZWN0ZWQgdmFsdWUgaW4gYG5nTW9kZWxgOlxyXG4gKiAgICAgIEluIHRoZSBleGFtcGxlOiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYXMgYHRyYWNrIGJ5YCByZWZlcnMgdG8gYGl0ZW0uaWRgLCBidXQgdGhlIHNlbGVjdGVkXHJcbiAqICAgICAgdmFsdWUgZnJvbSBgbmdNb2RlbGAgaXMgYHtuYW1lOiBhU3ViSXRlbX1gLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmdNb2RlbCBBc3NpZ25hYmxlIGFuZ3VsYXIgZXhwcmVzc2lvbiB0byBkYXRhLWJpbmQgdG8uXHJcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHVuZGVyIHdoaWNoIHRoZSBjb250cm9sIGlzIHB1Ymxpc2hlZC5cclxuICogQHBhcmFtIHtzdHJpbmc9fSByZXF1aXJlZCBUaGUgY29udHJvbCBpcyBjb25zaWRlcmVkIHZhbGlkIG9ubHkgaWYgdmFsdWUgaXMgZW50ZXJlZC5cclxuICogQHBhcmFtIHtzdHJpbmc9fSBuZ1JlcXVpcmVkIEFkZHMgYHJlcXVpcmVkYCBhdHRyaWJ1dGUgYW5kIGByZXF1aXJlZGAgdmFsaWRhdGlvbiBjb25zdHJhaW50IHRvXHJcbiAqICAgIHRoZSBlbGVtZW50IHdoZW4gdGhlIG5nUmVxdWlyZWQgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gdHJ1ZS4gVXNlIGBuZ1JlcXVpcmVkYCBpbnN0ZWFkIG9mXHJcbiAqICAgIGByZXF1aXJlZGAgd2hlbiB5b3Ugd2FudCB0byBkYXRhLWJpbmQgdG8gdGhlIGByZXF1aXJlZGAgYXR0cmlidXRlLlxyXG4gKiBAcGFyYW0ge2NvbXByZWhlbnNpb25fZXhwcmVzc2lvbj19IG5nT3B0aW9ucyBpbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczpcclxuICpcclxuICogICAqIGZvciBhcnJheSBkYXRhIHNvdXJjZXM6XHJcbiAqICAgICAqIGBsYWJlbGAgKipgZm9yYCoqIGB2YWx1ZWAgKipgaW5gKiogYGFycmF5YFxyXG4gKiAgICAgKiBgc2VsZWN0YCAqKmBhc2AqKiBgbGFiZWxgICoqYGZvcmAqKiBgdmFsdWVgICoqYGluYCoqIGBhcnJheWBcclxuICogICAgICogYGxhYmVsYCAgKipgZ3JvdXAgYnlgKiogYGdyb3VwYCAqKmBmb3JgKiogYHZhbHVlYCAqKmBpbmAqKiBgYXJyYXlgXHJcbiAqICAgICAqIGBzZWxlY3RgICoqYGFzYCoqIGBsYWJlbGAgKipgZ3JvdXAgYnlgKiogYGdyb3VwYCAqKmBmb3JgKiogYHZhbHVlYCAqKmBpbmAqKiBgYXJyYXlgICoqYHRyYWNrIGJ5YCoqIGB0cmFja2V4cHJgXHJcbiAqICAgKiBmb3Igb2JqZWN0IGRhdGEgc291cmNlczpcclxuICogICAgICogYGxhYmVsYCAqKmBmb3IgKGAqKmBrZXlgICoqYCxgKiogYHZhbHVlYCoqYCkgaW5gKiogYG9iamVjdGBcclxuICogICAgICogYHNlbGVjdGAgKipgYXNgKiogYGxhYmVsYCAqKmBmb3IgKGAqKmBrZXlgICoqYCxgKiogYHZhbHVlYCoqYCkgaW5gKiogYG9iamVjdGBcclxuICogICAgICogYGxhYmVsYCAqKmBncm91cCBieWAqKiBgZ3JvdXBgICoqYGZvciAoYCoqYGtleWAqKmAsYCoqIGB2YWx1ZWAqKmApIGluYCoqIGBvYmplY3RgXHJcbiAqICAgICAqIGBzZWxlY3RgICoqYGFzYCoqIGBsYWJlbGAgKipgZ3JvdXAgYnlgKiogYGdyb3VwYFxyXG4gKiAgICAgICAgICoqYGZvcmAgYChgKipga2V5YCoqYCxgKiogYHZhbHVlYCoqYCkgaW5gKiogYG9iamVjdGBcclxuICpcclxuICogV2hlcmU6XHJcbiAqXHJcbiAqICAgKiBgYXJyYXlgIC8gYG9iamVjdGA6IGFuIGV4cHJlc3Npb24gd2hpY2ggZXZhbHVhdGVzIHRvIGFuIGFycmF5IC8gb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cclxuICogICAqIGB2YWx1ZWA6IGxvY2FsIHZhcmlhYmxlIHdoaWNoIHdpbGwgcmVmZXIgdG8gZWFjaCBpdGVtIGluIHRoZSBgYXJyYXlgIG9yIGVhY2ggcHJvcGVydHkgdmFsdWVcclxuICogICAgICBvZiBgb2JqZWN0YCBkdXJpbmcgaXRlcmF0aW9uLlxyXG4gKiAgICogYGtleWA6IGxvY2FsIHZhcmlhYmxlIHdoaWNoIHdpbGwgcmVmZXIgdG8gYSBwcm9wZXJ0eSBuYW1lIGluIGBvYmplY3RgIGR1cmluZyBpdGVyYXRpb24uXHJcbiAqICAgKiBgbGFiZWxgOiBUaGUgcmVzdWx0IG9mIHRoaXMgZXhwcmVzc2lvbiB3aWxsIGJlIHRoZSBsYWJlbCBmb3IgYDxvcHRpb24+YCBlbGVtZW50LiBUaGVcclxuICogICAgIGBleHByZXNzaW9uYCB3aWxsIG1vc3QgbGlrZWx5IHJlZmVyIHRvIHRoZSBgdmFsdWVgIHZhcmlhYmxlIChlLmcuIGB2YWx1ZS5wcm9wZXJ0eU5hbWVgKS5cclxuICogICAqIGBzZWxlY3RgOiBUaGUgcmVzdWx0IG9mIHRoaXMgZXhwcmVzc2lvbiB3aWxsIGJlIGJvdW5kIHRvIHRoZSBtb2RlbCBvZiB0aGUgcGFyZW50IGA8c2VsZWN0PmBcclxuICogICAgICBlbGVtZW50LiBJZiBub3Qgc3BlY2lmaWVkLCBgc2VsZWN0YCBleHByZXNzaW9uIHdpbGwgZGVmYXVsdCB0byBgdmFsdWVgLlxyXG4gKiAgICogYGdyb3VwYDogVGhlIHJlc3VsdCBvZiB0aGlzIGV4cHJlc3Npb24gd2lsbCBiZSB1c2VkIHRvIGdyb3VwIG9wdGlvbnMgdXNpbmcgdGhlIGA8b3B0Z3JvdXA+YFxyXG4gKiAgICAgIERPTSBlbGVtZW50LlxyXG4gKiAgICogYHRyYWNrZXhwcmA6IFVzZWQgd2hlbiB3b3JraW5nIHdpdGggYW4gYXJyYXkgb2Ygb2JqZWN0cy4gVGhlIHJlc3VsdCBvZiB0aGlzIGV4cHJlc3Npb24gd2lsbCBiZVxyXG4gKiAgICAgIHVzZWQgdG8gaWRlbnRpZnkgdGhlIG9iamVjdHMgaW4gdGhlIGFycmF5LiBUaGUgYHRyYWNrZXhwcmAgd2lsbCBtb3N0IGxpa2VseSByZWZlciB0byB0aGVcclxuICogICAgIGB2YWx1ZWAgdmFyaWFibGUgKGUuZy4gYHZhbHVlLnByb3BlcnR5TmFtZWApLiBXaXRoIHRoaXMgdGhlIHNlbGVjdGlvbiBpcyBwcmVzZXJ2ZWRcclxuICogICAgICBldmVuIHdoZW4gdGhlIG9wdGlvbnMgYXJlIHJlY3JlYXRlZCAoZS5nLiByZWxvYWRlZCBmcm9tIHRoZSBzZXJ2ZXIpLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICAgPGV4YW1wbGUgbW9kdWxlPVwic2VsZWN0RXhhbXBsZVwiPlxyXG4gICAgICA8ZmlsZSBuYW1lPVwiaW5kZXguaHRtbFwiPlxyXG4gICAgICAgIDxzY3JpcHQ+XHJcbiAgICAgICAgYW5ndWxhci5tb2R1bGUoJ3NlbGVjdEV4YW1wbGUnLCBbXSlcclxuICAgICAgICAgIC5jb250cm9sbGVyKCdFeGFtcGxlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgZnVuY3Rpb24oJHNjb3BlKSB7XHJcbiAgICAgICAgICAgICRzY29wZS5jb2xvcnMgPSBbXHJcbiAgICAgICAgICAgICAge25hbWU6J2JsYWNrJywgc2hhZGU6J2RhcmsnfSxcclxuICAgICAgICAgICAgICB7bmFtZTond2hpdGUnLCBzaGFkZTonbGlnaHQnfSxcclxuICAgICAgICAgICAgICB7bmFtZToncmVkJywgc2hhZGU6J2RhcmsnfSxcclxuICAgICAgICAgICAgICB7bmFtZTonYmx1ZScsIHNoYWRlOidkYXJrJ30sXHJcbiAgICAgICAgICAgICAge25hbWU6J3llbGxvdycsIHNoYWRlOidsaWdodCd9XHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICRzY29wZS5teUNvbG9yID0gJHNjb3BlLmNvbG9yc1syXTsgLy8gcmVkXHJcbiAgICAgICAgICB9XSk7XHJcbiAgICAgICAgPC9zY3JpcHQ+XHJcbiAgICAgICAgPGRpdiBuZy1jb250cm9sbGVyPVwiRXhhbXBsZUNvbnRyb2xsZXJcIj5cclxuICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPGxpIG5nLXJlcGVhdD1cImNvbG9yIGluIGNvbG9yc1wiPlxyXG4gICAgICAgICAgICAgIE5hbWU6IDxpbnB1dCBuZy1tb2RlbD1cImNvbG9yLm5hbWVcIj5cclxuICAgICAgICAgICAgICBbPGEgaHJlZiBuZy1jbGljaz1cImNvbG9ycy5zcGxpY2UoJGluZGV4LCAxKVwiPlg8L2E+XVxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgWzxhIGhyZWYgbmctY2xpY2s9XCJjb2xvcnMucHVzaCh7fSlcIj5hZGQ8L2E+XVxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICAgIDxoci8+XHJcbiAgICAgICAgICBDb2xvciAobnVsbCBub3QgYWxsb3dlZCk6XHJcbiAgICAgICAgICA8c2VsZWN0IG5nLW1vZGVsPVwibXlDb2xvclwiIG5nLW9wdGlvbnM9XCJjb2xvci5uYW1lIGZvciBjb2xvciBpbiBjb2xvcnNcIj48L3NlbGVjdD48YnI+XHJcblxyXG4gICAgICAgICAgQ29sb3IgKG51bGwgYWxsb3dlZCk6XHJcbiAgICAgICAgICA8c3BhbiAgY2xhc3M9XCJudWxsYWJsZVwiPlxyXG4gICAgICAgICAgICA8c2VsZWN0IG5nLW1vZGVsPVwibXlDb2xvclwiIG5nLW9wdGlvbnM9XCJjb2xvci5uYW1lIGZvciBjb2xvciBpbiBjb2xvcnNcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+LS0gY2hvb3NlIGNvbG9yIC0tPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgPC9zcGFuPjxici8+XHJcblxyXG4gICAgICAgICAgQ29sb3IgZ3JvdXBlZCBieSBzaGFkZTpcclxuICAgICAgICAgIDxzZWxlY3QgbmctbW9kZWw9XCJteUNvbG9yXCIgbmctb3B0aW9ucz1cImNvbG9yLm5hbWUgZ3JvdXAgYnkgY29sb3Iuc2hhZGUgZm9yIGNvbG9yIGluIGNvbG9yc1wiPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+PGJyLz5cclxuXHJcblxyXG4gICAgICAgICAgU2VsZWN0IDxhIGhyZWYgbmctY2xpY2s9XCJteUNvbG9yID0geyBuYW1lOidub3QgaW4gbGlzdCcsIHNoYWRlOiAnb3RoZXInIH1cIj5ib2d1czwvYT4uPGJyPlxyXG4gICAgICAgICAgPGhyLz5cclxuICAgICAgICAgIEN1cnJlbnRseSBzZWxlY3RlZDoge3sge3NlbGVjdGVkX2NvbG9yOm15Q29sb3J9IH19XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiYm9yZGVyOnNvbGlkIDFweCBibGFjazsgaGVpZ2h0OjIwcHhcIlxyXG4gICAgICAgICAgICAgICBuZy1zdHlsZT1cInsnYmFja2dyb3VuZC1jb2xvcic6bXlDb2xvci5uYW1lfVwiPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZmlsZT5cclxuICAgICAgPGZpbGUgbmFtZT1cInByb3RyYWN0b3IuanNcIiB0eXBlPVwicHJvdHJhY3RvclwiPlxyXG4gICAgICAgICBpdCgnc2hvdWxkIGNoZWNrIG5nLW9wdGlvbnMnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICBleHBlY3QoZWxlbWVudChieS5iaW5kaW5nKCd7c2VsZWN0ZWRfY29sb3I6bXlDb2xvcn0nKSkuZ2V0VGV4dCgpKS50b01hdGNoKCdyZWQnKTtcclxuICAgICAgICAgICBlbGVtZW50LmFsbChieS5tb2RlbCgnbXlDb2xvcicpKS5maXJzdCgpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgZWxlbWVudC5hbGwoYnkuY3NzKCdzZWxlY3RbbmctbW9kZWw9XCJteUNvbG9yXCJdIG9wdGlvbicpKS5maXJzdCgpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygne3NlbGVjdGVkX2NvbG9yOm15Q29sb3J9JykpLmdldFRleHQoKSkudG9NYXRjaCgnYmxhY2snKTtcclxuICAgICAgICAgICBlbGVtZW50KGJ5LmNzcygnLm51bGxhYmxlIHNlbGVjdFtuZy1tb2RlbD1cIm15Q29sb3JcIl0nKSkuY2xpY2soKTtcclxuICAgICAgICAgICBlbGVtZW50LmFsbChieS5jc3MoJy5udWxsYWJsZSBzZWxlY3RbbmctbW9kZWw9XCJteUNvbG9yXCJdIG9wdGlvbicpKS5maXJzdCgpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQoYnkuYmluZGluZygne3NlbGVjdGVkX2NvbG9yOm15Q29sb3J9JykpLmdldFRleHQoKSkudG9NYXRjaCgnbnVsbCcpO1xyXG4gICAgICAgICB9KTtcclxuICAgICAgPC9maWxlPlxyXG4gICAgPC9leGFtcGxlPlxyXG4gKi9cclxuXHJcbnZhciBuZ09wdGlvbnNEaXJlY3RpdmUgPSB2YWx1ZUZuKHtcclxuICByZXN0cmljdDogJ0EnLFxyXG4gIHRlcm1pbmFsOiB0cnVlXHJcbn0pO1xyXG5cclxuLy8ganNoaW50IG1heGxlbjogZmFsc2VcclxudmFyIHNlbGVjdERpcmVjdGl2ZSA9IFsnJGNvbXBpbGUnLCAnJHBhcnNlJywgZnVuY3Rpb24oJGNvbXBpbGUsICAgJHBhcnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAvLzAwMDAxMTExMTExMTExMDAwMDAwMDAwMDAyMjIyMjIyMjIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMzMzMzMzMzMzAwMDAwMDAwMDAwMDAwNDQ0NDQ0NDQ0NDQ0NDQ0MDAwMDAwMDAwNTU1NTU1NTU1NTU1NTU1MDAwMDAwMDY2NjY2NjY2NjY2NjY2NjAwMDAwMDAwMDAwMDAwMDc3Nzc3Nzc3NzcwMDAwMDAwMDAwMDAwMDAwMDAwODg4ODg4ODg4OFxyXG4gIHZhciBOR19PUFRJT05TX1JFR0VYUCA9IC9eXFxzKihbXFxzXFxTXSs/KSg/Olxccythc1xccysoW1xcc1xcU10rPykpPyg/Olxccytncm91cFxccytieVxccysoW1xcc1xcU10rPykpP1xccytmb3JcXHMrKD86KFtcXCRcXHddW1xcJFxcd10qKXwoPzpcXChcXHMqKFtcXCRcXHddW1xcJFxcd10qKVxccyosXFxzKihbXFwkXFx3XVtcXCRcXHddKilcXHMqXFwpKSlcXHMraW5cXHMrKFtcXHNcXFNdKz8pKD86XFxzK3RyYWNrXFxzK2J5XFxzKyhbXFxzXFxTXSs/KSk/JC8sXHJcbiAgICAgIG51bGxNb2RlbEN0cmwgPSB7JHNldFZpZXdWYWx1ZTogbm9vcH07XHJcbi8vIGpzaGludCBtYXhsZW46IDEwMFxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgcmVzdHJpY3Q6ICdFJyxcclxuICAgIHJlcXVpcmU6IFsnc2VsZWN0JywgJz9uZ01vZGVsJ10sXHJcbiAgICBjb250cm9sbGVyOiBbJyRlbGVtZW50JywgJyRzY29wZScsICckYXR0cnMnLCBmdW5jdGlvbigkZWxlbWVudCwgJHNjb3BlLCAkYXR0cnMpIHtcclxuICAgICAgdmFyIHNlbGYgPSB0aGlzLFxyXG4gICAgICAgICAgb3B0aW9uc01hcCA9IHt9LFxyXG4gICAgICAgICAgbmdNb2RlbEN0cmwgPSBudWxsTW9kZWxDdHJsLFxyXG4gICAgICAgICAgbnVsbE9wdGlvbixcclxuICAgICAgICAgIHVua25vd25PcHRpb247XHJcblxyXG5cclxuICAgICAgc2VsZi5kYXRhYm91bmQgPSAkYXR0cnMubmdNb2RlbDtcclxuXHJcblxyXG4gICAgICBzZWxmLmluaXQgPSBmdW5jdGlvbihuZ01vZGVsQ3RybF8sIG51bGxPcHRpb25fLCB1bmtub3duT3B0aW9uXykge1xyXG4gICAgICAgIG5nTW9kZWxDdHJsID0gbmdNb2RlbEN0cmxfO1xyXG4gICAgICAgIG51bGxPcHRpb24gPSBudWxsT3B0aW9uXztcclxuICAgICAgICB1bmtub3duT3B0aW9uID0gdW5rbm93bk9wdGlvbl87XHJcbiAgICAgIH07XHJcblxyXG5cclxuICAgICAgc2VsZi5hZGRPcHRpb24gPSBmdW5jdGlvbih2YWx1ZSwgZWxlbWVudCkge1xyXG4gICAgICAgIGFzc2VydE5vdEhhc093blByb3BlcnR5KHZhbHVlLCAnXCJvcHRpb24gdmFsdWVcIicpO1xyXG4gICAgICAgIG9wdGlvbnNNYXBbdmFsdWVdID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKG5nTW9kZWxDdHJsLiR2aWV3VmFsdWUgPT0gdmFsdWUpIHtcclxuICAgICAgICAgICRlbGVtZW50LnZhbCh2YWx1ZSk7XHJcbiAgICAgICAgICBpZiAodW5rbm93bk9wdGlvbi5wYXJlbnQoKSkgdW5rbm93bk9wdGlvbi5yZW1vdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM4MTQ1OVxyXG4gICAgICAgIC8vIEFkZGluZyBhbiA8b3B0aW9uIHNlbGVjdGVkPVwic2VsZWN0ZWRcIj4gZWxlbWVudCB0byBhIDxzZWxlY3QgcmVxdWlyZWQ9XCJyZXF1aXJlZFwiPiBzaG91bGRcclxuICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IHNlbGVjdCB0aGUgbmV3IGVsZW1lbnRcclxuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50WzBdLmhhc0F0dHJpYnV0ZSgnc2VsZWN0ZWQnKSkge1xyXG4gICAgICAgICAgZWxlbWVudFswXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuXHJcbiAgICAgIHNlbGYucmVtb3ZlT3B0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNPcHRpb24odmFsdWUpKSB7XHJcbiAgICAgICAgICBkZWxldGUgb3B0aW9uc01hcFt2YWx1ZV07XHJcbiAgICAgICAgICBpZiAobmdNb2RlbEN0cmwuJHZpZXdWYWx1ZSA9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlclVua25vd25PcHRpb24odmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcblxyXG4gICAgICBzZWxmLnJlbmRlclVua25vd25PcHRpb24gPSBmdW5jdGlvbih2YWwpIHtcclxuICAgICAgICB2YXIgdW5rbm93blZhbCA9ICc/ICcgKyBoYXNoS2V5KHZhbCkgKyAnID8nO1xyXG4gICAgICAgIHVua25vd25PcHRpb24udmFsKHVua25vd25WYWwpO1xyXG4gICAgICAgICRlbGVtZW50LnByZXBlbmQodW5rbm93bk9wdGlvbik7XHJcbiAgICAgICAgJGVsZW1lbnQudmFsKHVua25vd25WYWwpO1xyXG4gICAgICAgIHVua25vd25PcHRpb24ucHJvcCgnc2VsZWN0ZWQnLCB0cnVlKTsgLy8gbmVlZGVkIGZvciBJRVxyXG4gICAgICB9O1xyXG5cclxuXHJcbiAgICAgIHNlbGYuaGFzT3B0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gb3B0aW9uc01hcC5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAkc2NvcGUuJG9uKCckZGVzdHJveScsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIGRpc2FibGUgdW5rbm93biBvcHRpb24gc28gdGhhdCB3ZSBkb24ndCBkbyB3b3JrIHdoZW4gdGhlIHdob2xlIHNlbGVjdCBpcyBiZWluZyBkZXN0cm95ZWRcclxuICAgICAgICBzZWxmLnJlbmRlclVua25vd25PcHRpb24gPSBub29wO1xyXG4gICAgICB9KTtcclxuICAgIH1dLFxyXG5cclxuICAgIGxpbms6IGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRyLCBjdHJscykge1xyXG4gICAgICAvLyBpZiBuZ01vZGVsIGlzIG5vdCBkZWZpbmVkLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nXHJcbiAgICAgIGlmICghY3RybHNbMV0pIHJldHVybjtcclxuXHJcbiAgICAgIHZhciBzZWxlY3RDdHJsID0gY3RybHNbMF0sXHJcbiAgICAgICAgICBuZ01vZGVsQ3RybCA9IGN0cmxzWzFdLFxyXG4gICAgICAgICAgbXVsdGlwbGUgPSBhdHRyLm11bHRpcGxlLFxyXG4gICAgICAgICAgb3B0aW9uc0V4cCA9IGF0dHIubmdPcHRpb25zLFxyXG4gICAgICAgICAgbnVsbE9wdGlvbiA9IGZhbHNlLCAvLyBpZiBmYWxzZSwgdXNlciB3aWxsIG5vdCBiZSBhYmxlIHRvIHNlbGVjdCBpdCAodXNlZCBieSBuZ09wdGlvbnMpXHJcbiAgICAgICAgICBlbXB0eU9wdGlvbixcclxuICAgICAgICAgIHJlbmRlclNjaGVkdWxlZCA9IGZhbHNlLFxyXG4gICAgICAgICAgLy8gd2UgY2FuJ3QganVzdCBqcUxpdGUoJzxvcHRpb24+Jykgc2luY2UganFMaXRlIGlzIG5vdCBzbWFydCBlbm91Z2hcclxuICAgICAgICAgIC8vIHRvIGNyZWF0ZSBpdCBpbiA8c2VsZWN0PiBhbmQgSUUgYmFyZnMgb3RoZXJ3aXNlLlxyXG4gICAgICAgICAgb3B0aW9uVGVtcGxhdGUgPSBqcUxpdGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJykpLFxyXG4gICAgICAgICAgb3B0R3JvdXBUZW1wbGF0ZSA9anFMaXRlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGdyb3VwJykpLFxyXG4gICAgICAgICAgdW5rbm93bk9wdGlvbiA9IG9wdGlvblRlbXBsYXRlLmNsb25lKCk7XHJcblxyXG4gICAgICAvLyBmaW5kIFwibnVsbFwiIG9wdGlvblxyXG4gICAgICBmb3IgKHZhciBpID0gMCwgY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuKCksIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xyXG4gICAgICAgIGlmIChjaGlsZHJlbltpXS52YWx1ZSA9PT0gJycpIHtcclxuICAgICAgICAgIGVtcHR5T3B0aW9uID0gbnVsbE9wdGlvbiA9IGNoaWxkcmVuLmVxKGkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBzZWxlY3RDdHJsLmluaXQobmdNb2RlbEN0cmwsIG51bGxPcHRpb24sIHVua25vd25PcHRpb24pO1xyXG5cclxuICAgICAgLy8gcmVxdWlyZWQgdmFsaWRhdG9yXHJcbiAgICAgIGlmIChtdWx0aXBsZSkge1xyXG4gICAgICAgIG5nTW9kZWxDdHJsLiRpc0VtcHR5ID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgIHJldHVybiAhdmFsdWUgfHwgdmFsdWUubGVuZ3RoID09PSAwO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChvcHRpb25zRXhwKSBzZXR1cEFzT3B0aW9ucyhzY29wZSwgZWxlbWVudCwgbmdNb2RlbEN0cmwpO1xyXG4gICAgICBlbHNlIGlmIChtdWx0aXBsZSkgc2V0dXBBc011bHRpcGxlKHNjb3BlLCBlbGVtZW50LCBuZ01vZGVsQ3RybCk7XHJcbiAgICAgIGVsc2Ugc2V0dXBBc1NpbmdsZShzY29wZSwgZWxlbWVudCwgbmdNb2RlbEN0cmwsIHNlbGVjdEN0cmwpO1xyXG5cclxuXHJcbiAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG5cclxuICAgICAgZnVuY3Rpb24gc2V0dXBBc1NpbmdsZShzY29wZSwgc2VsZWN0RWxlbWVudCwgbmdNb2RlbEN0cmwsIHNlbGVjdEN0cmwpIHtcclxuICAgICAgICBuZ01vZGVsQ3RybC4kcmVuZGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICB2YXIgdmlld1ZhbHVlID0gbmdNb2RlbEN0cmwuJHZpZXdWYWx1ZTtcclxuXHJcbiAgICAgICAgICBpZiAoc2VsZWN0Q3RybC5oYXNPcHRpb24odmlld1ZhbHVlKSkge1xyXG4gICAgICAgICAgICBpZiAodW5rbm93bk9wdGlvbi5wYXJlbnQoKSkgdW5rbm93bk9wdGlvbi5yZW1vdmUoKTtcclxuICAgICAgICAgICAgc2VsZWN0RWxlbWVudC52YWwodmlld1ZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKHZpZXdWYWx1ZSA9PT0gJycpIGVtcHR5T3B0aW9uLnByb3AoJ3NlbGVjdGVkJywgdHJ1ZSk7IC8vIHRvIG1ha2UgSUU5IGhhcHB5XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmlld1ZhbHVlKSAmJiBlbXB0eU9wdGlvbikge1xyXG4gICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQudmFsKCcnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzZWxlY3RDdHJsLnJlbmRlclVua25vd25PcHRpb24odmlld1ZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHNlbGVjdEVsZW1lbnQub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZiAodW5rbm93bk9wdGlvbi5wYXJlbnQoKSkgdW5rbm93bk9wdGlvbi5yZW1vdmUoKTtcclxuICAgICAgICAgICAgbmdNb2RlbEN0cmwuJHNldFZpZXdWYWx1ZShzZWxlY3RFbGVtZW50LnZhbCgpKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBzZXR1cEFzTXVsdGlwbGUoc2NvcGUsIHNlbGVjdEVsZW1lbnQsIGN0cmwpIHtcclxuICAgICAgICB2YXIgbGFzdFZpZXc7XHJcbiAgICAgICAgY3RybC4kcmVuZGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICB2YXIgaXRlbXMgPSBuZXcgSGFzaE1hcChjdHJsLiR2aWV3VmFsdWUpO1xyXG4gICAgICAgICAgZm9yRWFjaChzZWxlY3RFbGVtZW50LmZpbmQoJ29wdGlvbicpLCBmdW5jdGlvbihvcHRpb24pIHtcclxuICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gaXNEZWZpbmVkKGl0ZW1zLmdldChvcHRpb24udmFsdWUpKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIHdlIGhhdmUgdG8gZG8gaXQgb24gZWFjaCB3YXRjaCBzaW5jZSBuZ01vZGVsIHdhdGNoZXMgcmVmZXJlbmNlLCBidXRcclxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHdvcmsgb2YgYW4gYXJyYXksIHNvIHdlIG5lZWQgdG8gc2VlIGlmIGFueXRoaW5nIHdhcyBpbnNlcnRlZC9yZW1vdmVkXHJcbiAgICAgICAgc2NvcGUuJHdhdGNoKGZ1bmN0aW9uIHNlbGVjdE11bHRpcGxlV2F0Y2goKSB7XHJcbiAgICAgICAgICBpZiAoIWVxdWFscyhsYXN0VmlldywgY3RybC4kdmlld1ZhbHVlKSkge1xyXG4gICAgICAgICAgICBsYXN0VmlldyA9IHNoYWxsb3dDb3B5KGN0cmwuJHZpZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgIGN0cmwuJHJlbmRlcigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzZWxlY3RFbGVtZW50Lm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdmFyIGFycmF5ID0gW107XHJcbiAgICAgICAgICAgIGZvckVhY2goc2VsZWN0RWxlbWVudC5maW5kKCdvcHRpb24nKSwgZnVuY3Rpb24ob3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaChvcHRpb24udmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGN0cmwuJHNldFZpZXdWYWx1ZShhcnJheSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gc2V0dXBBc09wdGlvbnMoc2NvcGUsIHNlbGVjdEVsZW1lbnQsIGN0cmwpIHtcclxuICAgICAgICB2YXIgbWF0Y2g7XHJcblxyXG4gICAgICAgIGlmICghKG1hdGNoID0gb3B0aW9uc0V4cC5tYXRjaChOR19PUFRJT05TX1JFR0VYUCkpKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZ09wdGlvbnNNaW5FcnIoJ2lleHAnLFxyXG4gICAgICAgICAgICBcIkV4cGVjdGVkIGV4cHJlc3Npb24gaW4gZm9ybSBvZiBcIiArXHJcbiAgICAgICAgICAgIFwiJ19zZWxlY3RfIChhcyBfbGFiZWxfKT8gZm9yIChfa2V5XywpP192YWx1ZV8gaW4gX2NvbGxlY3Rpb25fJ1wiICtcclxuICAgICAgICAgICAgXCIgYnV0IGdvdCAnezB9Jy4gRWxlbWVudDogezF9XCIsXHJcbiAgICAgICAgICAgIG9wdGlvbnNFeHAsIHN0YXJ0aW5nVGFnKHNlbGVjdEVsZW1lbnQpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkaXNwbGF5Rm4gPSAkcGFyc2UobWF0Y2hbMl0gfHwgbWF0Y2hbMV0pLFxyXG4gICAgICAgICAgICB2YWx1ZU5hbWUgPSBtYXRjaFs0XSB8fCBtYXRjaFs2XSxcclxuICAgICAgICAgICAgc2VsZWN0QXMgPSAvIGFzIC8udGVzdChtYXRjaFswXSkgJiYgbWF0Y2hbMV0sXHJcbiAgICAgICAgICAgIHNlbGVjdEFzRm4gPSBzZWxlY3RBcyA/ICRwYXJzZShzZWxlY3RBcykgOiBudWxsLFxyXG4gICAgICAgICAgICBrZXlOYW1lID0gbWF0Y2hbNV0sXHJcbiAgICAgICAgICAgIGdyb3VwQnlGbiA9ICRwYXJzZShtYXRjaFszXSB8fCAnJyksXHJcbiAgICAgICAgICAgIHZhbHVlRm4gPSAkcGFyc2UobWF0Y2hbMl0gPyBtYXRjaFsxXSA6IHZhbHVlTmFtZSksXHJcbiAgICAgICAgICAgIHZhbHVlc0ZuID0gJHBhcnNlKG1hdGNoWzddKSxcclxuICAgICAgICAgICAgdHJhY2sgPSBtYXRjaFs4XSxcclxuICAgICAgICAgICAgdHJhY2tGbiA9IHRyYWNrID8gJHBhcnNlKG1hdGNoWzhdKSA6IG51bGwsXHJcbiAgICAgICAgICAgIHRyYWNrS2V5c0NhY2hlID0ge30sXHJcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gYXJyYXkgb2YgYXJyYXkgb2YgZXhpc3Rpbmcgb3B0aW9uIGdyb3VwcyBpbiBET00uXHJcbiAgICAgICAgICAgIC8vIFdlIHRyeSB0byByZXVzZSB0aGVzZSBpZiBwb3NzaWJsZVxyXG4gICAgICAgICAgICAvLyAtIG9wdGlvbkdyb3Vwc0NhY2hlWzBdIGlzIHRoZSBvcHRpb25zIHdpdGggbm8gb3B0aW9uIGdyb3VwXHJcbiAgICAgICAgICAgIC8vIC0gb3B0aW9uR3JvdXBzQ2FjaGVbP11bMF0gaXMgdGhlIHBhcmVudDogZWl0aGVyIHRoZSBTRUxFQ1Qgb3IgT1BUR1JPVVAgZWxlbWVudFxyXG4gICAgICAgICAgICBvcHRpb25Hcm91cHNDYWNoZSA9IFtbe2VsZW1lbnQ6IHNlbGVjdEVsZW1lbnQsIGxhYmVsOicnfV1dLFxyXG4gICAgICAgICAgICAvL3JlLXVzYWJsZSBvYmplY3QgdG8gcmVwcmVzZW50IG9wdGlvbidzIGxvY2Fsc1xyXG4gICAgICAgICAgICBsb2NhbHMgPSB7fTtcclxuXHJcbiAgICAgICAgaWYgKG51bGxPcHRpb24pIHtcclxuICAgICAgICAgIC8vIGNvbXBpbGUgdGhlIGVsZW1lbnQgc2luY2UgdGhlcmUgbWlnaHQgYmUgYmluZGluZ3MgaW4gaXRcclxuICAgICAgICAgICRjb21waWxlKG51bGxPcHRpb24pKHNjb3BlKTtcclxuXHJcbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGNsYXNzLCB3aGljaCBpcyBhZGRlZCBhdXRvbWF0aWNhbGx5IGJlY2F1c2Ugd2UgcmVjb21waWxlIHRoZSBlbGVtZW50IGFuZCBpdFxyXG4gICAgICAgICAgLy8gYmVjb21lcyB0aGUgY29tcGlsYXRpb24gcm9vdFxyXG4gICAgICAgICAgbnVsbE9wdGlvbi5yZW1vdmVDbGFzcygnbmctc2NvcGUnKTtcclxuXHJcbiAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHJlbW92ZSBpdCBiZWZvcmUgY2FsbGluZyBzZWxlY3RFbGVtZW50LmVtcHR5KCkgYmVjYXVzZSBvdGhlcndpc2UgSUUgd2lsbFxyXG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSBsYWJlbCBmcm9tIHRoZSBlbGVtZW50LiB3dGY/XHJcbiAgICAgICAgICBudWxsT3B0aW9uLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY2xlYXIgY29udGVudHMsIHdlJ2xsIGFkZCB3aGF0J3MgbmVlZGVkIGJhc2VkIG9uIHRoZSBtb2RlbFxyXG4gICAgICAgIHNlbGVjdEVsZW1lbnQuZW1wdHkoKTtcclxuXHJcbiAgICAgICAgc2VsZWN0RWxlbWVudC5vbignY2hhbmdlJywgc2VsZWN0aW9uQ2hhbmdlZCk7XHJcblxyXG4gICAgICAgIGN0cmwuJHJlbmRlciA9IHJlbmRlcjtcclxuXHJcbiAgICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbih2YWx1ZXNGbiwgc2NoZWR1bGVSZW5kZXJpbmcpO1xyXG4gICAgICAgIHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oZ2V0TGFiZWxzLCBzY2hlZHVsZVJlbmRlcmluZyk7XHJcblxyXG4gICAgICAgIGlmIChtdWx0aXBsZSkge1xyXG4gICAgICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbihmdW5jdGlvbigpIHsgcmV0dXJuIGN0cmwuJG1vZGVsVmFsdWU7IH0sIHNjaGVkdWxlUmVuZGVyaW5nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBjYWxsRXhwcmVzc2lvbihleHByRm4sIGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgIGxvY2Fsc1t2YWx1ZU5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgICBpZiAoa2V5TmFtZSkgbG9jYWxzW2tleU5hbWVdID0ga2V5O1xyXG4gICAgICAgICAgcmV0dXJuIGV4cHJGbihzY29wZSwgbG9jYWxzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHNlbGVjdGlvbkNoYW5nZWQoKSB7XHJcbiAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gdmFsdWVzRm4oc2NvcGUpIHx8IFtdO1xyXG4gICAgICAgICAgICB2YXIgdmlld1ZhbHVlO1xyXG4gICAgICAgICAgICBpZiAobXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICB2aWV3VmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgICBmb3JFYWNoKHNlbGVjdEVsZW1lbnQudmFsKCksIGZ1bmN0aW9uKHNlbGVjdGVkS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkS2V5ID0gdHJhY2tGbiA/IHRyYWNrS2V5c0NhY2hlW3NlbGVjdGVkS2V5XSA6IHNlbGVjdGVkS2V5O1xyXG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlLnB1c2goZ2V0Vmlld1ZhbHVlKHNlbGVjdGVkS2V5LCBjb2xsZWN0aW9uW3NlbGVjdGVkS2V5XSkpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHZhciBzZWxlY3RlZEtleSA9IHRyYWNrRm4gPyB0cmFja0tleXNDYWNoZVtzZWxlY3RFbGVtZW50LnZhbCgpXSA6IHNlbGVjdEVsZW1lbnQudmFsKCk7XHJcbiAgICAgICAgICAgICAgdmlld1ZhbHVlID0gZ2V0Vmlld1ZhbHVlKHNlbGVjdGVkS2V5LCBjb2xsZWN0aW9uW3NlbGVjdGVkS2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3RybC4kc2V0Vmlld1ZhbHVlKHZpZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgIHJlbmRlcigpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRWaWV3VmFsdWUoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgaWYgKGtleSA9PT0gJz8nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdmlld1ZhbHVlRm4gPSBzZWxlY3RBc0ZuID8gc2VsZWN0QXNGbiA6IHZhbHVlRm47XHJcbiAgICAgICAgICAgIHJldHVybiBjYWxsRXhwcmVzc2lvbih2aWV3VmFsdWVGbiwga2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRMYWJlbHMoKSB7XHJcbiAgICAgICAgICB2YXIgdmFsdWVzID0gdmFsdWVzRm4oc2NvcGUpO1xyXG4gICAgICAgICAgdmFyIHRvRGlzcGxheTtcclxuICAgICAgICAgIGlmICh2YWx1ZXMgJiYgaXNBcnJheSh2YWx1ZXMpKSB7XHJcbiAgICAgICAgICAgIHRvRGlzcGxheSA9IG5ldyBBcnJheSh2YWx1ZXMubGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdmFsdWVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcclxuICAgICAgICAgICAgICB0b0Rpc3BsYXlbaV0gPSBjYWxsRXhwcmVzc2lvbihkaXNwbGF5Rm4sIGksIHZhbHVlc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRvRGlzcGxheTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVzKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE86IEFkZCBhIHRlc3QgZm9yIHRoaXMgY2FzZVxyXG4gICAgICAgICAgICB0b0Rpc3BsYXkgPSB7fTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB2YWx1ZXMpIHtcclxuICAgICAgICAgICAgICBpZiAodmFsdWVzLmhhc093blByb3BlcnR5KHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICB0b0Rpc3BsYXlbcHJvcF0gPSBjYWxsRXhwcmVzc2lvbihkaXNwbGF5Rm4sIHByb3AsIHZhbHVlc1twcm9wXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdG9EaXNwbGF5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlSXNTZWxlY3RlZEZuKHZpZXdWYWx1ZSkge1xyXG4gICAgICAgICAgdmFyIHNlbGVjdGVkU2V0O1xyXG4gICAgICAgICAgaWYgKG11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0cmFja0ZuICYmIGlzQXJyYXkodmlld1ZhbHVlKSkge1xyXG5cclxuICAgICAgICAgICAgICBzZWxlY3RlZFNldCA9IG5ldyBIYXNoTWFwKFtdKTtcclxuICAgICAgICAgICAgICBmb3IgKHZhciB0cmFja0luZGV4ID0gMDsgdHJhY2tJbmRleCA8IHZpZXdWYWx1ZS5sZW5ndGg7IHRyYWNrSW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgLy8gdHJhY2tpbmcgYnkga2V5XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFNldC5wdXQoY2FsbEV4cHJlc3Npb24odHJhY2tGbiwgbnVsbCwgdmlld1ZhbHVlW3RyYWNrSW5kZXhdKSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNlbGVjdGVkU2V0ID0gbmV3IEhhc2hNYXAodmlld1ZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0cmFja0ZuKSB7XHJcbiAgICAgICAgICAgIHZpZXdWYWx1ZSA9IGNhbGxFeHByZXNzaW9uKHRyYWNrRm4sIG51bGwsIHZpZXdWYWx1ZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzU2VsZWN0ZWQoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgY29tcGFyZVZhbHVlRm47XHJcbiAgICAgICAgICAgIGlmICh0cmFja0ZuKSB7XHJcbiAgICAgICAgICAgICAgY29tcGFyZVZhbHVlRm4gPSB0cmFja0ZuO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdEFzRm4pIHtcclxuICAgICAgICAgICAgICBjb21wYXJlVmFsdWVGbiA9IHNlbGVjdEFzRm47XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29tcGFyZVZhbHVlRm4gPSB2YWx1ZUZuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gaXNEZWZpbmVkKHNlbGVjdGVkU2V0LnJlbW92ZShjYWxsRXhwcmVzc2lvbihjb21wYXJlVmFsdWVGbiwga2V5LCB2YWx1ZSkpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdmlld1ZhbHVlID09PSBjYWxsRXhwcmVzc2lvbihjb21wYXJlVmFsdWVGbiwga2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBzY2hlZHVsZVJlbmRlcmluZygpIHtcclxuICAgICAgICAgIGlmICghcmVuZGVyU2NoZWR1bGVkKSB7XHJcbiAgICAgICAgICAgIHNjb3BlLiQkcG9zdERpZ2VzdChyZW5kZXIpO1xyXG4gICAgICAgICAgICByZW5kZXJTY2hlZHVsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQSBuZXcgbGFiZWxNYXAgaXMgY3JlYXRlZCB3aXRoIGVhY2ggcmVuZGVyLlxyXG4gICAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBlYWNoIGV4aXN0aW5nIG9wdGlvbiB3aXRoIGFkZGVkPWZhbHNlLFxyXG4gICAgICAgICAqIGFuZCBlYWNoIG5ldyBvcHRpb24gd2l0aCBhZGRlZD10cnVlLlxyXG4gICAgICAgICAqIC0gTGFiZWxzIHRoYXQgYXJlIHBhc3NlZCB0byB0aGlzIG1ldGhvZCB0d2ljZSxcclxuICAgICAgICAgKiAob25jZSB3aXRoIGFkZGVkPXRydWUgYW5kIG9uY2Ugd2l0aCBhZGRlZD1mYWxzZSkgd2lsbCBlbmQgdXAgd2l0aCBhIHZhbHVlIG9mIDAsIGFuZFxyXG4gICAgICAgICAqIHdpbGwgY2F1c2Ugbm8gY2hhbmdlIHRvIGhhcHBlbiB0byB0aGUgY29ycmVzcG9uZGluZyBvcHRpb24uXHJcbiAgICAgICAgICogLSBMYWJlbHMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoaXMgbWV0aG9kIG9ubHkgb25jZSB3aXRoIGFkZGVkPWZhbHNlIHdpbGwgZW5kIHVwIHdpdGggYVxyXG4gICAgICAgICAqIHZhbHVlIG9mIC0xIGFuZCB3aWxsIGV2ZW50dWFsbHkgYmUgcGFzc2VkIHRvIHNlbGVjdEN0cmwucmVtb3ZlT3B0aW9uKClcclxuICAgICAgICAgKiAtIExhYmVscyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhpcyBtZXRob2Qgb25seSBvbmNlIHdpdGggYWRkZWQ9dHJ1ZSB3aWxsIGVuZCB1cCB3aXRoIGFcclxuICAgICAgICAgKiB2YWx1ZSBvZiAxIGFuZCB3aWxsIGV2ZW50dWFsbHkgYmUgcGFzc2VkIHRvIHNlbGVjdEN0cmwuYWRkT3B0aW9uKClcclxuICAgICAgICAqL1xyXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxhYmVsTWFwKGxhYmVsTWFwLCBsYWJlbCwgYWRkZWQpIHtcclxuICAgICAgICAgIGxhYmVsTWFwW2xhYmVsXSA9IGxhYmVsTWFwW2xhYmVsXSB8fCAwO1xyXG4gICAgICAgICAgbGFiZWxNYXBbbGFiZWxdICs9IChhZGRlZCA/IDEgOiAtMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiByZW5kZXIoKSB7XHJcbiAgICAgICAgICByZW5kZXJTY2hlZHVsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAvLyBUZW1wb3JhcnkgbG9jYXRpb24gZm9yIHRoZSBvcHRpb24gZ3JvdXBzIGJlZm9yZSB3ZSByZW5kZXIgdGhlbVxyXG4gICAgICAgICAgdmFyIG9wdGlvbkdyb3VwcyA9IHsnJzpbXX0sXHJcbiAgICAgICAgICAgICAgb3B0aW9uR3JvdXBOYW1lcyA9IFsnJ10sXHJcbiAgICAgICAgICAgICAgb3B0aW9uR3JvdXBOYW1lLFxyXG4gICAgICAgICAgICAgIG9wdGlvbkdyb3VwLFxyXG4gICAgICAgICAgICAgIG9wdGlvbixcclxuICAgICAgICAgICAgICBleGlzdGluZ1BhcmVudCwgZXhpc3RpbmdPcHRpb25zLCBleGlzdGluZ09wdGlvbixcclxuICAgICAgICAgICAgICB2aWV3VmFsdWUgPSBjdHJsLiR2aWV3VmFsdWUsXHJcbiAgICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVzRm4oc2NvcGUpIHx8IFtdLFxyXG4gICAgICAgICAgICAgIGtleXMgPSBrZXlOYW1lID8gc29ydGVkS2V5cyh2YWx1ZXMpIDogdmFsdWVzLFxyXG4gICAgICAgICAgICAgIGtleSxcclxuICAgICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgICBncm91cExlbmd0aCwgbGVuZ3RoLFxyXG4gICAgICAgICAgICAgIGdyb3VwSW5kZXgsIGluZGV4LFxyXG4gICAgICAgICAgICAgIGxhYmVsTWFwID0ge30sXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWQsXHJcbiAgICAgICAgICAgICAgaXNTZWxlY3RlZCA9IGNyZWF0ZUlzU2VsZWN0ZWRGbih2aWV3VmFsdWUpLFxyXG4gICAgICAgICAgICAgIGFueVNlbGVjdGVkID0gZmFsc2UsXHJcbiAgICAgICAgICAgICAgbGFzdEVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgICBsYWJlbCxcclxuICAgICAgICAgICAgICBvcHRpb25JZDtcclxuXHJcbiAgICAgICAgICB0cmFja0tleXNDYWNoZSA9IHt9O1xyXG5cclxuICAgICAgICAgIC8vIFdlIG5vdyBidWlsZCB1cCB0aGUgbGlzdCBvZiBvcHRpb25zIHdlIG5lZWQgKHdlIG1lcmdlIGxhdGVyKVxyXG4gICAgICAgICAgZm9yIChpbmRleCA9IDA7IGxlbmd0aCA9IGtleXMubGVuZ3RoLCBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBrZXkgPSBpbmRleDtcclxuICAgICAgICAgICAgaWYgKGtleU5hbWUpIHtcclxuICAgICAgICAgICAgICBrZXkgPSBrZXlzW2luZGV4XTtcclxuICAgICAgICAgICAgICBpZiAoa2V5LmNoYXJBdCgwKSA9PT0gJyQnKSBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlc1trZXldO1xyXG5cclxuICAgICAgICAgICAgb3B0aW9uR3JvdXBOYW1lID0gY2FsbEV4cHJlc3Npb24oZ3JvdXBCeUZuLCBrZXksIHZhbHVlKSB8fCAnJztcclxuICAgICAgICAgICAgaWYgKCEob3B0aW9uR3JvdXAgPSBvcHRpb25Hcm91cHNbb3B0aW9uR3JvdXBOYW1lXSkpIHtcclxuICAgICAgICAgICAgICBvcHRpb25Hcm91cCA9IG9wdGlvbkdyb3Vwc1tvcHRpb25Hcm91cE5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgb3B0aW9uR3JvdXBOYW1lcy5wdXNoKG9wdGlvbkdyb3VwTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNlbGVjdGVkID0gaXNTZWxlY3RlZChrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgYW55U2VsZWN0ZWQgPSBhbnlTZWxlY3RlZCB8fCBzZWxlY3RlZDtcclxuXHJcbiAgICAgICAgICAgIGxhYmVsID0gY2FsbEV4cHJlc3Npb24oZGlzcGxheUZuLCBrZXksIHZhbHVlKTsgLy8gd2hhdCB3aWxsIGJlIHNlZW4gYnkgdGhlIHVzZXJcclxuXHJcbiAgICAgICAgICAgIC8vIGRvaW5nIGRpc3BsYXlGbihzY29wZSwgbG9jYWxzKSB8fCAnJyBvdmVyd3JpdGVzIHplcm8gdmFsdWVzXHJcbiAgICAgICAgICAgIGxhYmVsID0gaXNEZWZpbmVkKGxhYmVsKSA/IGxhYmVsIDogJyc7XHJcbiAgICAgICAgICAgIG9wdGlvbklkID0gdHJhY2tGbiA/IHRyYWNrRm4oc2NvcGUsIGxvY2FscykgOiAoa2V5TmFtZSA/IGtleXNbaW5kZXhdIDogaW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAodHJhY2tGbikge1xyXG4gICAgICAgICAgICAgIHRyYWNrS2V5c0NhY2hlW29wdGlvbklkXSA9IGtleTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgb3B0aW9uR3JvdXAucHVzaCh7XHJcbiAgICAgICAgICAgICAgLy8gZWl0aGVyIHRoZSBpbmRleCBpbnRvIGFycmF5IG9yIGtleSBmcm9tIG9iamVjdFxyXG4gICAgICAgICAgICAgIGlkOiBvcHRpb25JZCxcclxuICAgICAgICAgICAgICBsYWJlbDogbGFiZWwsXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHNlbGVjdGVkICAgICAgICAgICAgICAgICAgIC8vIGRldGVybWluZSBpZiB3ZSBzaG91bGQgYmUgc2VsZWN0ZWRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIW11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGlmIChudWxsT3B0aW9uIHx8IHZpZXdWYWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIC8vIGluc2VydCBudWxsIG9wdGlvbiBpZiB3ZSBoYXZlIGEgcGxhY2Vob2xkZXIsIG9yIHRoZSBtb2RlbCBpcyBudWxsXHJcbiAgICAgICAgICAgICAgb3B0aW9uR3JvdXBzWycnXS51bnNoaWZ0KHtpZDonJywgbGFiZWw6JycsIHNlbGVjdGVkOiFhbnlTZWxlY3RlZH0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFhbnlTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgIC8vIG9wdGlvbiBjb3VsZCBub3QgYmUgZm91bmQsIHdlIGhhdmUgdG8gaW5zZXJ0IHRoZSB1bmRlZmluZWQgaXRlbVxyXG4gICAgICAgICAgICAgIG9wdGlvbkdyb3Vwc1snJ10udW5zaGlmdCh7aWQ6Jz8nLCBsYWJlbDonJywgc2VsZWN0ZWQ6dHJ1ZX0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gTm93IHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBsaXN0IG9mIERPTSBub2RlcyB0byBtYXRjaCB0aGUgb3B0aW9uR3JvdXBzIHdlIGNvbXB1dGVkIGFib3ZlXHJcbiAgICAgICAgICBmb3IgKGdyb3VwSW5kZXggPSAwLCBncm91cExlbmd0aCA9IG9wdGlvbkdyb3VwTmFtZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICBncm91cEluZGV4IDwgZ3JvdXBMZW5ndGg7XHJcbiAgICAgICAgICAgICAgIGdyb3VwSW5kZXgrKykge1xyXG4gICAgICAgICAgICAvLyBjdXJyZW50IG9wdGlvbiBncm91cCBuYW1lIG9yICcnIGlmIG5vIGdyb3VwXHJcbiAgICAgICAgICAgIG9wdGlvbkdyb3VwTmFtZSA9IG9wdGlvbkdyb3VwTmFtZXNbZ3JvdXBJbmRleF07XHJcblxyXG4gICAgICAgICAgICAvLyBsaXN0IG9mIG9wdGlvbnMgZm9yIHRoYXQgZ3JvdXAuIChmaXJzdCBpdGVtIGhhcyB0aGUgcGFyZW50KVxyXG4gICAgICAgICAgICBvcHRpb25Hcm91cCA9IG9wdGlvbkdyb3Vwc1tvcHRpb25Hcm91cE5hbWVdO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbkdyb3Vwc0NhY2hlLmxlbmd0aCA8PSBncm91cEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBncm93IHRoZSBvcHRpb25Hcm91cHNcclxuICAgICAgICAgICAgICBleGlzdGluZ1BhcmVudCA9IHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IG9wdEdyb3VwVGVtcGxhdGUuY2xvbmUoKS5hdHRyKCdsYWJlbCcsIG9wdGlvbkdyb3VwTmFtZSksXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogb3B0aW9uR3JvdXAubGFiZWxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGV4aXN0aW5nT3B0aW9ucyA9IFtleGlzdGluZ1BhcmVudF07XHJcbiAgICAgICAgICAgICAgb3B0aW9uR3JvdXBzQ2FjaGUucHVzaChleGlzdGluZ09wdGlvbnMpO1xyXG4gICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuYXBwZW5kKGV4aXN0aW5nUGFyZW50LmVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGV4aXN0aW5nT3B0aW9ucyA9IG9wdGlvbkdyb3Vwc0NhY2hlW2dyb3VwSW5kZXhdO1xyXG4gICAgICAgICAgICAgIGV4aXN0aW5nUGFyZW50ID0gZXhpc3RpbmdPcHRpb25zWzBdOyAgLy8gZWl0aGVyIFNFTEVDVCAobm8gZ3JvdXApIG9yIE9QVEdST1VQIGVsZW1lbnRcclxuXHJcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBPUFRHUk9VUCBsYWJlbCBpZiBub3QgdGhlIHNhbWUuXHJcbiAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nUGFyZW50LmxhYmVsICE9IG9wdGlvbkdyb3VwTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdQYXJlbnQuZWxlbWVudC5hdHRyKCdsYWJlbCcsIGV4aXN0aW5nUGFyZW50LmxhYmVsID0gb3B0aW9uR3JvdXBOYW1lKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxhc3RFbGVtZW50ID0gbnVsbDsgIC8vIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmdcclxuICAgICAgICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IG9wdGlvbkdyb3VwLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICBvcHRpb24gPSBvcHRpb25Hcm91cFtpbmRleF07XHJcbiAgICAgICAgICAgICAgaWYgKChleGlzdGluZ09wdGlvbiA9IGV4aXN0aW5nT3B0aW9uc1tpbmRleCArIDFdKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gcmV1c2UgZWxlbWVudHNcclxuICAgICAgICAgICAgICAgIGxhc3RFbGVtZW50ID0gZXhpc3RpbmdPcHRpb24uZWxlbWVudDtcclxuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ09wdGlvbi5sYWJlbCAhPT0gb3B0aW9uLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZUxhYmVsTWFwKGxhYmVsTWFwLCBleGlzdGluZ09wdGlvbi5sYWJlbCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICB1cGRhdGVMYWJlbE1hcChsYWJlbE1hcCwgb3B0aW9uLmxhYmVsLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgbGFzdEVsZW1lbnQudGV4dChleGlzdGluZ09wdGlvbi5sYWJlbCA9IG9wdGlvbi5sYWJlbCk7XHJcbiAgICAgICAgICAgICAgICAgIGxhc3RFbGVtZW50LnByb3AoJ2xhYmVsJywgZXhpc3RpbmdPcHRpb24ubGFiZWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nT3B0aW9uLmlkICE9PSBvcHRpb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgbGFzdEVsZW1lbnQudmFsKGV4aXN0aW5nT3B0aW9uLmlkID0gb3B0aW9uLmlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGxhc3RFbGVtZW50LnByb3AoJ3NlbGVjdGVkJykgcHJvdmlkZWQgYnkgalF1ZXJ5IGhhcyBzaWRlLWVmZmVjdHNcclxuICAgICAgICAgICAgICAgIGlmIChsYXN0RWxlbWVudFswXS5zZWxlY3RlZCAhPT0gb3B0aW9uLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxhc3RFbGVtZW50LnByb3AoJ3NlbGVjdGVkJywgKGV4aXN0aW5nT3B0aW9uLnNlbGVjdGVkID0gb3B0aW9uLnNlbGVjdGVkKSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChtc2llKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2VlICM3NjkyXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHNlbGVjdGVkIGl0ZW0gd291bGRuJ3QgdmlzdWFsbHkgdXBkYXRlIG9uIElFIHdpdGhvdXQgdGhpcy5cclxuICAgICAgICAgICAgICAgICAgICAvLyBUZXN0ZWQgb24gV2luNzogSUU5LCBJRTEwIGFuZCBJRTExLiBGdXR1cmUgSUVzIHNob3VsZCBiZSB0ZXN0ZWQgYXMgd2VsbFxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RFbGVtZW50LnByb3AoJ3NlbGVjdGVkJywgZXhpc3RpbmdPcHRpb24uc2VsZWN0ZWQpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGdyb3cgZWxlbWVudHNcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIGEgbnVsbCBvcHRpb25cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb24uaWQgPT09ICcnICYmIG51bGxPcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgLy8gcHV0IGJhY2sgdGhlIHByZS1jb21waWxlZCBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBudWxsT3B0aW9uO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgLy8galF1ZXJ5KHYxLjQuMikgQnVnOiBXZSBzaG91bGQgYmUgYWJsZSB0byBjaGFpbiB0aGUgbWV0aG9kIGNhbGxzLCBidXRcclxuICAgICAgICAgICAgICAgICAgLy8gaW4gdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSBvbiBzb21lIGJyb3dzZXIgdGhlIC50ZXh0KCkgcmV0dXJucyBhIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgICAvLyByYXRoZXIgdGhlbiB0aGUgZWxlbWVudC5cclxuICAgICAgICAgICAgICAgICAgKGVsZW1lbnQgPSBvcHRpb25UZW1wbGF0ZS5jbG9uZSgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnZhbChvcHRpb24uaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAucHJvcCgnc2VsZWN0ZWQnLCBvcHRpb24uc2VsZWN0ZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAuYXR0cignc2VsZWN0ZWQnLCBvcHRpb24uc2VsZWN0ZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAucHJvcCgnbGFiZWwnLCBvcHRpb24ubGFiZWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAudGV4dChvcHRpb24ubGFiZWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGV4aXN0aW5nT3B0aW9ucy5wdXNoKGV4aXN0aW5nT3B0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IG9wdGlvbi5sYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICBpZDogb3B0aW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBvcHRpb24uc2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlTGFiZWxNYXAobGFiZWxNYXAsIG9wdGlvbi5sYWJlbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGFzdEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgbGFzdEVsZW1lbnQuYWZ0ZXIoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBleGlzdGluZ1BhcmVudC5lbGVtZW50LmFwcGVuZChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxhc3RFbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gcmVtb3ZlIGFueSBleGNlc3NpdmUgT1BUSU9OcyBpbiBhIGdyb3VwXHJcbiAgICAgICAgICAgIGluZGV4Kys7IC8vIGluY3JlbWVudCBzaW5jZSB0aGUgZXhpc3RpbmdPcHRpb25zWzBdIGlzIHBhcmVudCBlbGVtZW50IG5vdCBPUFRJT05cclxuICAgICAgICAgICAgd2hpbGUgKGV4aXN0aW5nT3B0aW9ucy5sZW5ndGggPiBpbmRleCkge1xyXG4gICAgICAgICAgICAgIG9wdGlvbiA9IGV4aXN0aW5nT3B0aW9ucy5wb3AoKTtcclxuICAgICAgICAgICAgICB1cGRhdGVMYWJlbE1hcChsYWJlbE1hcCwgb3B0aW9uLmxhYmVsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgb3B0aW9uLmVsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yRWFjaChsYWJlbE1hcCwgZnVuY3Rpb24oY291bnQsIGxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0Q3RybC5hZGRPcHRpb24obGFiZWwpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RDdHJsLnJlbW92ZU9wdGlvbihsYWJlbCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIHJlbW92ZSBhbnkgZXhjZXNzaXZlIE9QVEdST1VQcyBmcm9tIHNlbGVjdFxyXG4gICAgICAgICAgd2hpbGUgKG9wdGlvbkdyb3Vwc0NhY2hlLmxlbmd0aCA+IGdyb3VwSW5kZXgpIHtcclxuICAgICAgICAgICAgb3B0aW9uR3JvdXBzQ2FjaGUucG9wKClbMF0uZWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG59XTtcclxuXHJcbnZhciBvcHRpb25EaXJlY3RpdmUgPSBbJyRpbnRlcnBvbGF0ZScsIGZ1bmN0aW9uKCRpbnRlcnBvbGF0ZSkge1xyXG4gIHZhciBudWxsU2VsZWN0Q3RybCA9IHtcclxuICAgIGFkZE9wdGlvbjogbm9vcCxcclxuICAgIHJlbW92ZU9wdGlvbjogbm9vcFxyXG4gIH07XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICByZXN0cmljdDogJ0UnLFxyXG4gICAgcHJpb3JpdHk6IDEwMCxcclxuICAgIGNvbXBpbGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHIpIHtcclxuICAgICAgaWYgKGlzVW5kZWZpbmVkKGF0dHIudmFsdWUpKSB7XHJcbiAgICAgICAgdmFyIGludGVycG9sYXRlRm4gPSAkaW50ZXJwb2xhdGUoZWxlbWVudC50ZXh0KCksIHRydWUpO1xyXG4gICAgICAgIGlmICghaW50ZXJwb2xhdGVGbikge1xyXG4gICAgICAgICAgYXR0ci4kc2V0KCd2YWx1ZScsIGVsZW1lbnQudGV4dCgpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSwgZWxlbWVudCwgYXR0cikge1xyXG4gICAgICAgIHZhciBzZWxlY3RDdHJsTmFtZSA9ICckc2VsZWN0Q29udHJvbGxlcicsXHJcbiAgICAgICAgICAgIHBhcmVudCA9IGVsZW1lbnQucGFyZW50KCksXHJcbiAgICAgICAgICAgIHNlbGVjdEN0cmwgPSBwYXJlbnQuZGF0YShzZWxlY3RDdHJsTmFtZSkgfHxcclxuICAgICAgICAgICAgICBwYXJlbnQucGFyZW50KCkuZGF0YShzZWxlY3RDdHJsTmFtZSk7IC8vIGluIGNhc2Ugd2UgYXJlIGluIG9wdGdyb3VwXHJcblxyXG4gICAgICAgIGlmICghc2VsZWN0Q3RybCB8fCAhc2VsZWN0Q3RybC5kYXRhYm91bmQpIHtcclxuICAgICAgICAgIHNlbGVjdEN0cmwgPSBudWxsU2VsZWN0Q3RybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpbnRlcnBvbGF0ZUZuKSB7XHJcbiAgICAgICAgICBzY29wZS4kd2F0Y2goaW50ZXJwb2xhdGVGbiwgZnVuY3Rpb24gaW50ZXJwb2xhdGVXYXRjaEFjdGlvbihuZXdWYWwsIG9sZFZhbCkge1xyXG4gICAgICAgICAgICBhdHRyLiRzZXQoJ3ZhbHVlJywgbmV3VmFsKTtcclxuICAgICAgICAgICAgaWYgKG9sZFZhbCAhPT0gbmV3VmFsKSB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0Q3RybC5yZW1vdmVPcHRpb24ob2xkVmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZWxlY3RDdHJsLmFkZE9wdGlvbihuZXdWYWwsIGVsZW1lbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNlbGVjdEN0cmwuYWRkT3B0aW9uKGF0dHIudmFsdWUsIGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxlbWVudC5vbignJGRlc3Ryb3knLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHNlbGVjdEN0cmwucmVtb3ZlT3B0aW9uKGF0dHIudmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH07XHJcbn1dO1xyXG5cclxudmFyIHN0eWxlRGlyZWN0aXZlID0gdmFsdWVGbih7XHJcbiAgcmVzdHJpY3Q6ICdFJyxcclxuICB0ZXJtaW5hbDogZmFsc2VcclxufSk7XHJcblxyXG4gIGlmICh3aW5kb3cuYW5ndWxhci5ib290c3RyYXApIHtcclxuICAgIC8vQW5ndWxhckpTIGlzIGFscmVhZHkgbG9hZGVkLCBzbyB3ZSBjYW4gcmV0dXJuIGhlcmUuLi5cclxuICAgIGNvbnNvbGUubG9nKCdXQVJOSU5HOiBUcmllZCB0byBsb2FkIGFuZ3VsYXIgbW9yZSB0aGFuIG9uY2UuJyk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAvL3RyeSB0byBiaW5kIHRvIGpxdWVyeSBub3cgc28gdGhhdCBvbmUgY2FuIHdyaXRlIGpxTGl0ZShkb2N1bWVudCkucmVhZHkoKVxyXG4gIC8vYnV0IHdlIHdpbGwgcmViaW5kIG9uIGJvb3RzdHJhcCBhZ2Fpbi5cclxuICBiaW5kSlF1ZXJ5KCk7XHJcblxyXG4gIHB1Ymxpc2hFeHRlcm5hbEFQSShhbmd1bGFyKTtcclxuXHJcbiAganFMaXRlKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcclxuICAgIGFuZ3VsYXJJbml0KGRvY3VtZW50LCBib290c3RyYXApO1xyXG4gIH0pO1xyXG5cclxufSkod2luZG93LCBkb2N1bWVudCk7XHJcblxyXG4hd2luZG93LmFuZ3VsYXIuJCRjc3AoKSAmJiB3aW5kb3cuYW5ndWxhci5lbGVtZW50KGRvY3VtZW50KS5maW5kKCdoZWFkJykucHJlcGVuZCgnPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPkBjaGFyc2V0IFwiVVRGLThcIjtbbmdcXFxcOmNsb2FrXSxbbmctY2xvYWtdLFtkYXRhLW5nLWNsb2FrXSxbeC1uZy1jbG9ha10sLm5nLWNsb2FrLC54LW5nLWNsb2FrLC5uZy1oaWRlOm5vdCgubmctaGlkZS1hbmltYXRlKXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudDt9bmdcXFxcOmZvcm17ZGlzcGxheTpibG9jazt9PC9zdHlsZT4nKTsiXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/bootstrap.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/bootstrap.js index cc4a41315bb..635e3713560 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/bootstrap.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/bootstrap.js @@ -2349,4 +2349,4 @@ }(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJvb3RzdHJhcC5qcyIsImFmZml4LmpzIiwiYWxlcnQuanMiLCJidXR0b24uanMiLCJjYXJvdXNlbC5qcyIsImNvbGxhcHNlLmpzIiwiZHJvcGRvd24uanMiLCJtb2RhbC5qcyIsInRvb2x0aXAuanMiLCJwb3BvdmVyLmpzIiwic2Nyb2xsc3B5LmpzIiwidGFiLmpzIiwidHJhbnNpdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2xLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDN09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUNuTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUNyS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2pWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDbGdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDNUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEJvb3RzdHJhcDogYWZmaXguanMgdjMuMy41XG4gKiBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2NyaXB0LyNhZmZpeFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuXG4rZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIEFGRklYIENMQVNTIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHZhciBBZmZpeCA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIEFmZml4LkRFRkFVTFRTLCBvcHRpb25zKVxuXG4gICAgdGhpcy4kdGFyZ2V0ID0gJCh0aGlzLm9wdGlvbnMudGFyZ2V0KVxuICAgICAgLm9uKCdzY3JvbGwuYnMuYWZmaXguZGF0YS1hcGknLCAkLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbiwgdGhpcykpXG4gICAgICAub24oJ2NsaWNrLmJzLmFmZml4LmRhdGEtYXBpJywgICQucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uV2l0aEV2ZW50TG9vcCwgdGhpcykpXG5cbiAgICB0aGlzLiRlbGVtZW50ICAgICA9ICQoZWxlbWVudClcbiAgICB0aGlzLmFmZml4ZWQgICAgICA9IG51bGxcbiAgICB0aGlzLnVucGluICAgICAgICA9IG51bGxcbiAgICB0aGlzLnBpbm5lZE9mZnNldCA9IG51bGxcblxuICAgIHRoaXMuY2hlY2tQb3NpdGlvbigpXG4gIH1cblxuICBBZmZpeC5WRVJTSU9OICA9ICczLjMuNSdcblxuICBBZmZpeC5SRVNFVCAgICA9ICdhZmZpeCBhZmZpeC10b3AgYWZmaXgtYm90dG9tJ1xuXG4gIEFmZml4LkRFRkFVTFRTID0ge1xuICAgIG9mZnNldDogMCxcbiAgICB0YXJnZXQ6IHdpbmRvd1xuICB9XG5cbiAgQWZmaXgucHJvdG90eXBlLmdldFN0YXRlID0gZnVuY3Rpb24gKHNjcm9sbEhlaWdodCwgaGVpZ2h0LCBvZmZzZXRUb3AsIG9mZnNldEJvdHRvbSkge1xuICAgIHZhciBzY3JvbGxUb3AgICAgPSB0aGlzLiR0YXJnZXQuc2Nyb2xsVG9wKClcbiAgICB2YXIgcG9zaXRpb24gICAgID0gdGhpcy4kZWxlbWVudC5vZmZzZXQoKVxuICAgIHZhciB0YXJnZXRIZWlnaHQgPSB0aGlzLiR0YXJnZXQuaGVpZ2h0KClcblxuICAgIGlmIChvZmZzZXRUb3AgIT0gbnVsbCAmJiB0aGlzLmFmZml4ZWQgPT0gJ3RvcCcpIHJldHVybiBzY3JvbGxUb3AgPCBvZmZzZXRUb3AgPyAndG9wJyA6IGZhbHNlXG5cbiAgICBpZiAodGhpcy5hZmZpeGVkID09ICdib3R0b20nKSB7XG4gICAgICBpZiAob2Zmc2V0VG9wICE9IG51bGwpIHJldHVybiAoc2Nyb2xsVG9wICsgdGhpcy51bnBpbiA8PSBwb3NpdGlvbi50b3ApID8gZmFsc2UgOiAnYm90dG9tJ1xuICAgICAgcmV0dXJuIChzY3JvbGxUb3AgKyB0YXJnZXRIZWlnaHQgPD0gc2Nyb2xsSGVpZ2h0IC0gb2Zmc2V0Qm90dG9tKSA/IGZhbHNlIDogJ2JvdHRvbSdcbiAgICB9XG5cbiAgICB2YXIgaW5pdGlhbGl6aW5nICAgPSB0aGlzLmFmZml4ZWQgPT0gbnVsbFxuICAgIHZhciBjb2xsaWRlclRvcCAgICA9IGluaXRpYWxpemluZyA/IHNjcm9sbFRvcCA6IHBvc2l0aW9uLnRvcFxuICAgIHZhciBjb2xsaWRlckhlaWdodCA9IGluaXRpYWxpemluZyA/IHRhcmdldEhlaWdodCA6IGhlaWdodFxuXG4gICAgaWYgKG9mZnNldFRvcCAhPSBudWxsICYmIHNjcm9sbFRvcCA8PSBvZmZzZXRUb3ApIHJldHVybiAndG9wJ1xuICAgIGlmIChvZmZzZXRCb3R0b20gIT0gbnVsbCAmJiAoY29sbGlkZXJUb3AgKyBjb2xsaWRlckhlaWdodCA+PSBzY3JvbGxIZWlnaHQgLSBvZmZzZXRCb3R0b20pKSByZXR1cm4gJ2JvdHRvbSdcblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgQWZmaXgucHJvdG90eXBlLmdldFBpbm5lZE9mZnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5waW5uZWRPZmZzZXQpIHJldHVybiB0aGlzLnBpbm5lZE9mZnNldFxuICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoQWZmaXguUkVTRVQpLmFkZENsYXNzKCdhZmZpeCcpXG4gICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKVxuICAgIHZhciBwb3NpdGlvbiAgPSB0aGlzLiRlbGVtZW50Lm9mZnNldCgpXG4gICAgcmV0dXJuICh0aGlzLnBpbm5lZE9mZnNldCA9IHBvc2l0aW9uLnRvcCAtIHNjcm9sbFRvcClcbiAgfVxuXG4gIEFmZml4LnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uV2l0aEV2ZW50TG9vcCA9IGZ1bmN0aW9uICgpIHtcbiAgICBzZXRUaW1lb3V0KCQucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLCB0aGlzKSwgMSlcbiAgfVxuXG4gIEFmZml4LnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy4kZWxlbWVudC5pcygnOnZpc2libGUnKSkgcmV0dXJuXG5cbiAgICB2YXIgaGVpZ2h0ICAgICAgID0gdGhpcy4kZWxlbWVudC5oZWlnaHQoKVxuICAgIHZhciBvZmZzZXQgICAgICAgPSB0aGlzLm9wdGlvbnMub2Zmc2V0XG4gICAgdmFyIG9mZnNldFRvcCAgICA9IG9mZnNldC50b3BcbiAgICB2YXIgb2Zmc2V0Qm90dG9tID0gb2Zmc2V0LmJvdHRvbVxuICAgIHZhciBzY3JvbGxIZWlnaHQgPSBNYXRoLm1heCgkKGRvY3VtZW50KS5oZWlnaHQoKSwgJChkb2N1bWVudC5ib2R5KS5oZWlnaHQoKSlcblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ICE9ICdvYmplY3QnKSAgICAgICAgIG9mZnNldEJvdHRvbSA9IG9mZnNldFRvcCA9IG9mZnNldFxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0VG9wID09ICdmdW5jdGlvbicpICAgIG9mZnNldFRvcCAgICA9IG9mZnNldC50b3AodGhpcy4kZWxlbWVudClcbiAgICBpZiAodHlwZW9mIG9mZnNldEJvdHRvbSA9PSAnZnVuY3Rpb24nKSBvZmZzZXRCb3R0b20gPSBvZmZzZXQuYm90dG9tKHRoaXMuJGVsZW1lbnQpXG5cbiAgICB2YXIgYWZmaXggPSB0aGlzLmdldFN0YXRlKHNjcm9sbEhlaWdodCwgaGVpZ2h0LCBvZmZzZXRUb3AsIG9mZnNldEJvdHRvbSlcblxuICAgIGlmICh0aGlzLmFmZml4ZWQgIT0gYWZmaXgpIHtcbiAgICAgIGlmICh0aGlzLnVucGluICE9IG51bGwpIHRoaXMuJGVsZW1lbnQuY3NzKCd0b3AnLCAnJylcblxuICAgICAgdmFyIGFmZml4VHlwZSA9ICdhZmZpeCcgKyAoYWZmaXggPyAnLScgKyBhZmZpeCA6ICcnKVxuICAgICAgdmFyIGUgICAgICAgICA9ICQuRXZlbnQoYWZmaXhUeXBlICsgJy5icy5hZmZpeCcpXG5cbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKVxuXG4gICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuXG5cbiAgICAgIHRoaXMuYWZmaXhlZCA9IGFmZml4XG4gICAgICB0aGlzLnVucGluID0gYWZmaXggPT0gJ2JvdHRvbScgPyB0aGlzLmdldFBpbm5lZE9mZnNldCgpIDogbnVsbFxuXG4gICAgICB0aGlzLiRlbGVtZW50XG4gICAgICAgIC5yZW1vdmVDbGFzcyhBZmZpeC5SRVNFVClcbiAgICAgICAgLmFkZENsYXNzKGFmZml4VHlwZSlcbiAgICAgICAgLnRyaWdnZXIoYWZmaXhUeXBlLnJlcGxhY2UoJ2FmZml4JywgJ2FmZml4ZWQnKSArICcuYnMuYWZmaXgnKVxuICAgIH1cblxuICAgIGlmIChhZmZpeCA9PSAnYm90dG9tJykge1xuICAgICAgdGhpcy4kZWxlbWVudC5vZmZzZXQoe1xuICAgICAgICB0b3A6IHNjcm9sbEhlaWdodCAtIGhlaWdodCAtIG9mZnNldEJvdHRvbVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuXG4gIC8vIEFGRklYIFBMVUdJTiBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXG4gICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLmFmZml4JylcbiAgICAgIHZhciBvcHRpb25zID0gdHlwZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBvcHRpb25cblxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy5hZmZpeCcsIChkYXRhID0gbmV3IEFmZml4KHRoaXMsIG9wdGlvbnMpKSlcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0oKVxuICAgIH0pXG4gIH1cblxuICB2YXIgb2xkID0gJC5mbi5hZmZpeFxuXG4gICQuZm4uYWZmaXggICAgICAgICAgICAgPSBQbHVnaW5cbiAgJC5mbi5hZmZpeC5Db25zdHJ1Y3RvciA9IEFmZml4XG5cblxuICAvLyBBRkZJWCBOTyBDT05GTElDVFxuICAvLyA9PT09PT09PT09PT09PT09PVxuXG4gICQuZm4uYWZmaXgubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuLmFmZml4ID0gb2xkXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG5cbiAgLy8gQUZGSVggREFUQS1BUElcbiAgLy8gPT09PT09PT09PT09PT1cblxuICAkKHdpbmRvdykub24oJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgJCgnW2RhdGEtc3B5PVwiYWZmaXhcIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkc3B5ID0gJCh0aGlzKVxuICAgICAgdmFyIGRhdGEgPSAkc3B5LmRhdGEoKVxuXG4gICAgICBkYXRhLm9mZnNldCA9IGRhdGEub2Zmc2V0IHx8IHt9XG5cbiAgICAgIGlmIChkYXRhLm9mZnNldEJvdHRvbSAhPSBudWxsKSBkYXRhLm9mZnNldC5ib3R0b20gPSBkYXRhLm9mZnNldEJvdHRvbVxuICAgICAgaWYgKGRhdGEub2Zmc2V0VG9wICAgICE9IG51bGwpIGRhdGEub2Zmc2V0LnRvcCAgICA9IGRhdGEub2Zmc2V0VG9wXG5cbiAgICAgIFBsdWdpbi5jYWxsKCRzcHksIGRhdGEpXG4gICAgfSlcbiAgfSlcblxufShqUXVlcnkpO1xuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBCb290c3RyYXA6IGFsZXJ0LmpzIHYzLjMuNVxuICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vamF2YXNjcmlwdC8jYWxlcnRzXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLlxuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5cbitmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gQUxFUlQgQ0xBU1MgREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09XG5cbiAgdmFyIGRpc21pc3MgPSAnW2RhdGEtZGlzbWlzcz1cImFsZXJ0XCJdJ1xuICB2YXIgQWxlcnQgICA9IGZ1bmN0aW9uIChlbCkge1xuICAgICQoZWwpLm9uKCdjbGljaycsIGRpc21pc3MsIHRoaXMuY2xvc2UpXG4gIH1cblxuICBBbGVydC5WRVJTSU9OID0gJzMuMy41J1xuXG4gIEFsZXJ0LlRSQU5TSVRJT05fRFVSQVRJT04gPSAxNTBcblxuICBBbGVydC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoZSkge1xuICAgIHZhciAkdGhpcyAgICA9ICQodGhpcylcbiAgICB2YXIgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpXG5cbiAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICBzZWxlY3RvciA9ICR0aGlzLmF0dHIoJ2hyZWYnKVxuICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvciAmJiBzZWxlY3Rvci5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLCAnJykgLy8gc3RyaXAgZm9yIGllN1xuICAgIH1cblxuICAgIHZhciAkcGFyZW50ID0gJChzZWxlY3RvcilcblxuICAgIGlmIChlKSBlLnByZXZlbnREZWZhdWx0KClcblxuICAgIGlmICghJHBhcmVudC5sZW5ndGgpIHtcbiAgICAgICRwYXJlbnQgPSAkdGhpcy5jbG9zZXN0KCcuYWxlcnQnKVxuICAgIH1cblxuICAgICRwYXJlbnQudHJpZ2dlcihlID0gJC5FdmVudCgnY2xvc2UuYnMuYWxlcnQnKSlcblxuICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm5cblxuICAgICRwYXJlbnQucmVtb3ZlQ2xhc3MoJ2luJylcblxuICAgIGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnQoKSB7XG4gICAgICAvLyBkZXRhY2ggZnJvbSBwYXJlbnQsIGZpcmUgZXZlbnQgdGhlbiBjbGVhbiB1cCBkYXRhXG4gICAgICAkcGFyZW50LmRldGFjaCgpLnRyaWdnZXIoJ2Nsb3NlZC5icy5hbGVydCcpLnJlbW92ZSgpXG4gICAgfVxuXG4gICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgJHBhcmVudC5oYXNDbGFzcygnZmFkZScpID9cbiAgICAgICRwYXJlbnRcbiAgICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgcmVtb3ZlRWxlbWVudClcbiAgICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKEFsZXJ0LlRSQU5TSVRJT05fRFVSQVRJT04pIDpcbiAgICAgIHJlbW92ZUVsZW1lbnQoKVxuICB9XG5cblxuICAvLyBBTEVSVCBQTFVHSU4gREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGZ1bmN0aW9uIFBsdWdpbihvcHRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkdGhpcyA9ICQodGhpcylcbiAgICAgIHZhciBkYXRhICA9ICR0aGlzLmRhdGEoJ2JzLmFsZXJ0JylcblxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy5hbGVydCcsIChkYXRhID0gbmV3IEFsZXJ0KHRoaXMpKSlcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0uY2FsbCgkdGhpcylcbiAgICB9KVxuICB9XG5cbiAgdmFyIG9sZCA9ICQuZm4uYWxlcnRcblxuICAkLmZuLmFsZXJ0ICAgICAgICAgICAgID0gUGx1Z2luXG4gICQuZm4uYWxlcnQuQ29uc3RydWN0b3IgPSBBbGVydFxuXG5cbiAgLy8gQUxFUlQgTk8gQ09ORkxJQ1RcbiAgLy8gPT09PT09PT09PT09PT09PT1cblxuICAkLmZuLmFsZXJ0Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbi5hbGVydCA9IG9sZFxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuXG4gIC8vIEFMRVJUIERBVEEtQVBJXG4gIC8vID09PT09PT09PT09PT09XG5cbiAgJChkb2N1bWVudCkub24oJ2NsaWNrLmJzLmFsZXJ0LmRhdGEtYXBpJywgZGlzbWlzcywgQWxlcnQucHJvdG90eXBlLmNsb3NlKVxuXG59KGpRdWVyeSk7XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEJvb3RzdHJhcDogYnV0dG9uLmpzIHYzLjMuNVxuICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vamF2YXNjcmlwdC8jYnV0dG9uc1xuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuXG4rZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIEJVVFRPTiBQVUJMSUMgQ0xBU1MgREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB2YXIgQnV0dG9uID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ICA9ICQoZWxlbWVudClcbiAgICB0aGlzLm9wdGlvbnMgICA9ICQuZXh0ZW5kKHt9LCBCdXR0b24uREVGQVVMVFMsIG9wdGlvbnMpXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICB9XG5cbiAgQnV0dG9uLlZFUlNJT04gID0gJzMuMy41J1xuXG4gIEJ1dHRvbi5ERUZBVUxUUyA9IHtcbiAgICBsb2FkaW5nVGV4dDogJ2xvYWRpbmcuLi4nXG4gIH1cblxuICBCdXR0b24ucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgdmFyIGQgICAgPSAnZGlzYWJsZWQnXG4gICAgdmFyICRlbCAgPSB0aGlzLiRlbGVtZW50XG4gICAgdmFyIHZhbCAgPSAkZWwuaXMoJ2lucHV0JykgPyAndmFsJyA6ICdodG1sJ1xuICAgIHZhciBkYXRhID0gJGVsLmRhdGEoKVxuXG4gICAgc3RhdGUgKz0gJ1RleHQnXG5cbiAgICBpZiAoZGF0YS5yZXNldFRleHQgPT0gbnVsbCkgJGVsLmRhdGEoJ3Jlc2V0VGV4dCcsICRlbFt2YWxdKCkpXG5cbiAgICAvLyBwdXNoIHRvIGV2ZW50IGxvb3AgdG8gYWxsb3cgZm9ybXMgdG8gc3VibWl0XG4gICAgc2V0VGltZW91dCgkLnByb3h5KGZ1bmN0aW9uICgpIHtcbiAgICAgICRlbFt2YWxdKGRhdGFbc3RhdGVdID09IG51bGwgPyB0aGlzLm9wdGlvbnNbc3RhdGVdIDogZGF0YVtzdGF0ZV0pXG5cbiAgICAgIGlmIChzdGF0ZSA9PSAnbG9hZGluZ1RleHQnKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZVxuICAgICAgICAkZWwuYWRkQ2xhc3MoZCkuYXR0cihkLCBkKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTG9hZGluZykge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICRlbC5yZW1vdmVDbGFzcyhkKS5yZW1vdmVBdHRyKGQpXG4gICAgICB9XG4gICAgfSwgdGhpcyksIDApXG4gIH1cblxuICBCdXR0b24ucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY2hhbmdlZCA9IHRydWVcbiAgICB2YXIgJHBhcmVudCA9IHRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXScpXG5cbiAgICBpZiAoJHBhcmVudC5sZW5ndGgpIHtcbiAgICAgIHZhciAkaW5wdXQgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2lucHV0JylcbiAgICAgIGlmICgkaW5wdXQucHJvcCgndHlwZScpID09ICdyYWRpbycpIHtcbiAgICAgICAgaWYgKCRpbnB1dC5wcm9wKCdjaGVja2VkJykpIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICAkcGFyZW50LmZpbmQoJy5hY3RpdmUnKS5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICAgICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcygnYWN0aXZlJylcbiAgICAgIH0gZWxzZSBpZiAoJGlucHV0LnByb3AoJ3R5cGUnKSA9PSAnY2hlY2tib3gnKSB7XG4gICAgICAgIGlmICgoJGlucHV0LnByb3AoJ2NoZWNrZWQnKSkgIT09IHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2FjdGl2ZScpKSBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcygnYWN0aXZlJylcbiAgICAgIH1cbiAgICAgICRpbnB1dC5wcm9wKCdjaGVja2VkJywgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnYWN0aXZlJykpXG4gICAgICBpZiAoY2hhbmdlZCkgJGlucHV0LnRyaWdnZXIoJ2NoYW5nZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1wcmVzc2VkJywgIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2FjdGl2ZScpKVxuICAgICAgdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcygnYWN0aXZlJylcbiAgICB9XG4gIH1cblxuXG4gIC8vIEJVVFRPTiBQTFVHSU4gREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHRoaXMgICA9ICQodGhpcylcbiAgICAgIHZhciBkYXRhICAgID0gJHRoaXMuZGF0YSgnYnMuYnV0dG9uJylcbiAgICAgIHZhciBvcHRpb25zID0gdHlwZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBvcHRpb25cblxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy5idXR0b24nLCAoZGF0YSA9IG5ldyBCdXR0b24odGhpcywgb3B0aW9ucykpKVxuXG4gICAgICBpZiAob3B0aW9uID09ICd0b2dnbGUnKSBkYXRhLnRvZ2dsZSgpXG4gICAgICBlbHNlIGlmIChvcHRpb24pIGRhdGEuc2V0U3RhdGUob3B0aW9uKVxuICAgIH0pXG4gIH1cblxuICB2YXIgb2xkID0gJC5mbi5idXR0b25cblxuICAkLmZuLmJ1dHRvbiAgICAgICAgICAgICA9IFBsdWdpblxuICAkLmZuLmJ1dHRvbi5Db25zdHJ1Y3RvciA9IEJ1dHRvblxuXG5cbiAgLy8gQlVUVE9OIE5PIENPTkZMSUNUXG4gIC8vID09PT09PT09PT09PT09PT09PVxuXG4gICQuZm4uYnV0dG9uLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbi5idXR0b24gPSBvbGRcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cblxuICAvLyBCVVRUT04gREFUQS1BUElcbiAgLy8gPT09PT09PT09PT09PT09XG5cbiAgJChkb2N1bWVudClcbiAgICAub24oJ2NsaWNrLmJzLmJ1dHRvbi5kYXRhLWFwaScsICdbZGF0YS10b2dnbGVePVwiYnV0dG9uXCJdJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciAkYnRuID0gJChlLnRhcmdldClcbiAgICAgIGlmICghJGJ0bi5oYXNDbGFzcygnYnRuJykpICRidG4gPSAkYnRuLmNsb3Nlc3QoJy5idG4nKVxuICAgICAgUGx1Z2luLmNhbGwoJGJ0biwgJ3RvZ2dsZScpXG4gICAgICBpZiAoISgkKGUudGFyZ2V0KS5pcygnaW5wdXRbdHlwZT1cInJhZGlvXCJdJykgfHwgJChlLnRhcmdldCkuaXMoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpKSkgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfSlcbiAgICAub24oJ2ZvY3VzLmJzLmJ1dHRvbi5kYXRhLWFwaSBibHVyLmJzLmJ1dHRvbi5kYXRhLWFwaScsICdbZGF0YS10b2dnbGVePVwiYnV0dG9uXCJdJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5idG4nKS50b2dnbGVDbGFzcygnZm9jdXMnLCAvXmZvY3VzKGluKT8kLy50ZXN0KGUudHlwZSkpXG4gICAgfSlcblxufShqUXVlcnkpO1xuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBCb290c3RyYXA6IGNhcm91c2VsLmpzIHYzLjMuNVxuICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vamF2YXNjcmlwdC8jY2Fyb3VzZWxcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cblxuK2Z1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBDQVJPVVNFTCBDTEFTUyBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB2YXIgQ2Fyb3VzZWwgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgICAgPSAkKGVsZW1lbnQpXG4gICAgdGhpcy4kaW5kaWNhdG9ycyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmNhcm91c2VsLWluZGljYXRvcnMnKVxuICAgIHRoaXMub3B0aW9ucyAgICAgPSBvcHRpb25zXG4gICAgdGhpcy5wYXVzZWQgICAgICA9IG51bGxcbiAgICB0aGlzLnNsaWRpbmcgICAgID0gbnVsbFxuICAgIHRoaXMuaW50ZXJ2YWwgICAgPSBudWxsXG4gICAgdGhpcy4kYWN0aXZlICAgICA9IG51bGxcbiAgICB0aGlzLiRpdGVtcyAgICAgID0gbnVsbFxuXG4gICAgdGhpcy5vcHRpb25zLmtleWJvYXJkICYmIHRoaXMuJGVsZW1lbnQub24oJ2tleWRvd24uYnMuY2Fyb3VzZWwnLCAkLnByb3h5KHRoaXMua2V5ZG93biwgdGhpcykpXG5cbiAgICB0aGlzLm9wdGlvbnMucGF1c2UgPT0gJ2hvdmVyJyAmJiAhKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgJiYgdGhpcy4kZWxlbWVudFxuICAgICAgLm9uKCdtb3VzZWVudGVyLmJzLmNhcm91c2VsJywgJC5wcm94eSh0aGlzLnBhdXNlLCB0aGlzKSlcbiAgICAgIC5vbignbW91c2VsZWF2ZS5icy5jYXJvdXNlbCcsICQucHJveHkodGhpcy5jeWNsZSwgdGhpcykpXG4gIH1cblxuICBDYXJvdXNlbC5WRVJTSU9OICA9ICczLjMuNSdcblxuICBDYXJvdXNlbC5UUkFOU0lUSU9OX0RVUkFUSU9OID0gNjAwXG5cbiAgQ2Fyb3VzZWwuREVGQVVMVFMgPSB7XG4gICAgaW50ZXJ2YWw6IDUwMDAsXG4gICAgcGF1c2U6ICdob3ZlcicsXG4gICAgd3JhcDogdHJ1ZSxcbiAgICBrZXlib2FyZDogdHJ1ZVxuICB9XG5cbiAgQ2Fyb3VzZWwucHJvdG90eXBlLmtleWRvd24gPSBmdW5jdGlvbiAoZSkge1xuICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGUudGFyZ2V0LnRhZ05hbWUpKSByZXR1cm5cbiAgICBzd2l0Y2ggKGUud2hpY2gpIHtcbiAgICAgIGNhc2UgMzc6IHRoaXMucHJldigpOyBicmVha1xuICAgICAgY2FzZSAzOTogdGhpcy5uZXh0KCk7IGJyZWFrXG4gICAgICBkZWZhdWx0OiByZXR1cm5cbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gIENhcm91c2VsLnByb3RvdHlwZS5jeWNsZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgZSB8fCAodGhpcy5wYXVzZWQgPSBmYWxzZSlcblxuICAgIHRoaXMuaW50ZXJ2YWwgJiYgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKVxuXG4gICAgdGhpcy5vcHRpb25zLmludGVydmFsXG4gICAgICAmJiAhdGhpcy5wYXVzZWRcbiAgICAgICYmICh0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoJC5wcm94eSh0aGlzLm5leHQsIHRoaXMpLCB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIENhcm91c2VsLnByb3RvdHlwZS5nZXRJdGVtSW5kZXggPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgIHRoaXMuJGl0ZW1zID0gaXRlbS5wYXJlbnQoKS5jaGlsZHJlbignLml0ZW0nKVxuICAgIHJldHVybiB0aGlzLiRpdGVtcy5pbmRleChpdGVtIHx8IHRoaXMuJGFjdGl2ZSlcbiAgfVxuXG4gIENhcm91c2VsLnByb3RvdHlwZS5nZXRJdGVtRm9yRGlyZWN0aW9uID0gZnVuY3Rpb24gKGRpcmVjdGlvbiwgYWN0aXZlKSB7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gdGhpcy5nZXRJdGVtSW5kZXgoYWN0aXZlKVxuICAgIHZhciB3aWxsV3JhcCA9IChkaXJlY3Rpb24gPT0gJ3ByZXYnICYmIGFjdGl2ZUluZGV4ID09PSAwKVxuICAgICAgICAgICAgICAgIHx8IChkaXJlY3Rpb24gPT0gJ25leHQnICYmIGFjdGl2ZUluZGV4ID09ICh0aGlzLiRpdGVtcy5sZW5ndGggLSAxKSlcbiAgICBpZiAod2lsbFdyYXAgJiYgIXRoaXMub3B0aW9ucy53cmFwKSByZXR1cm4gYWN0aXZlXG4gICAgdmFyIGRlbHRhID0gZGlyZWN0aW9uID09ICdwcmV2JyA/IC0xIDogMVxuICAgIHZhciBpdGVtSW5kZXggPSAoYWN0aXZlSW5kZXggKyBkZWx0YSkgJSB0aGlzLiRpdGVtcy5sZW5ndGhcbiAgICByZXR1cm4gdGhpcy4kaXRlbXMuZXEoaXRlbUluZGV4KVxuICB9XG5cbiAgQ2Fyb3VzZWwucHJvdG90eXBlLnRvID0gZnVuY3Rpb24gKHBvcykge1xuICAgIHZhciB0aGF0ICAgICAgICA9IHRoaXNcbiAgICB2YXIgYWN0aXZlSW5kZXggPSB0aGlzLmdldEl0ZW1JbmRleCh0aGlzLiRhY3RpdmUgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5pdGVtLmFjdGl2ZScpKVxuXG4gICAgaWYgKHBvcyA+ICh0aGlzLiRpdGVtcy5sZW5ndGggLSAxKSB8fCBwb3MgPCAwKSByZXR1cm5cblxuICAgIGlmICh0aGlzLnNsaWRpbmcpICAgICAgIHJldHVybiB0aGlzLiRlbGVtZW50Lm9uZSgnc2xpZC5icy5jYXJvdXNlbCcsIGZ1bmN0aW9uICgpIHsgdGhhdC50byhwb3MpIH0pIC8vIHllcywgXCJzbGlkXCJcbiAgICBpZiAoYWN0aXZlSW5kZXggPT0gcG9zKSByZXR1cm4gdGhpcy5wYXVzZSgpLmN5Y2xlKClcblxuICAgIHJldHVybiB0aGlzLnNsaWRlKHBvcyA+IGFjdGl2ZUluZGV4ID8gJ25leHQnIDogJ3ByZXYnLCB0aGlzLiRpdGVtcy5lcShwb3MpKVxuICB9XG5cbiAgQ2Fyb3VzZWwucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKGUpIHtcbiAgICBlIHx8ICh0aGlzLnBhdXNlZCA9IHRydWUpXG5cbiAgICBpZiAodGhpcy4kZWxlbWVudC5maW5kKCcubmV4dCwgLnByZXYnKS5sZW5ndGggJiYgJC5zdXBwb3J0LnRyYW5zaXRpb24pIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpXG4gICAgICB0aGlzLmN5Y2xlKHRydWUpXG4gICAgfVxuXG4gICAgdGhpcy5pbnRlcnZhbCA9IGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBDYXJvdXNlbC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5zbGlkaW5nKSByZXR1cm5cbiAgICByZXR1cm4gdGhpcy5zbGlkZSgnbmV4dCcpXG4gIH1cblxuICBDYXJvdXNlbC5wcm90b3R5cGUucHJldiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5zbGlkaW5nKSByZXR1cm5cbiAgICByZXR1cm4gdGhpcy5zbGlkZSgncHJldicpXG4gIH1cblxuICBDYXJvdXNlbC5wcm90b3R5cGUuc2xpZGUgPSBmdW5jdGlvbiAodHlwZSwgbmV4dCkge1xuICAgIHZhciAkYWN0aXZlICAgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5pdGVtLmFjdGl2ZScpXG4gICAgdmFyICRuZXh0ICAgICA9IG5leHQgfHwgdGhpcy5nZXRJdGVtRm9yRGlyZWN0aW9uKHR5cGUsICRhY3RpdmUpXG4gICAgdmFyIGlzQ3ljbGluZyA9IHRoaXMuaW50ZXJ2YWxcbiAgICB2YXIgZGlyZWN0aW9uID0gdHlwZSA9PSAnbmV4dCcgPyAnbGVmdCcgOiAncmlnaHQnXG4gICAgdmFyIHRoYXQgICAgICA9IHRoaXNcblxuICAgIGlmICgkbmV4dC5oYXNDbGFzcygnYWN0aXZlJykpIHJldHVybiAodGhpcy5zbGlkaW5nID0gZmFsc2UpXG5cbiAgICB2YXIgcmVsYXRlZFRhcmdldCA9ICRuZXh0WzBdXG4gICAgdmFyIHNsaWRlRXZlbnQgPSAkLkV2ZW50KCdzbGlkZS5icy5jYXJvdXNlbCcsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRUYXJnZXQsXG4gICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgIH0pXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKHNsaWRlRXZlbnQpXG4gICAgaWYgKHNsaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgdGhpcy5zbGlkaW5nID0gdHJ1ZVxuXG4gICAgaXNDeWNsaW5nICYmIHRoaXMucGF1c2UoKVxuXG4gICAgaWYgKHRoaXMuJGluZGljYXRvcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLiRpbmRpY2F0b3JzLmZpbmQoJy5hY3RpdmUnKS5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICAgIHZhciAkbmV4dEluZGljYXRvciA9ICQodGhpcy4kaW5kaWNhdG9ycy5jaGlsZHJlbigpW3RoaXMuZ2V0SXRlbUluZGV4KCRuZXh0KV0pXG4gICAgICAkbmV4dEluZGljYXRvciAmJiAkbmV4dEluZGljYXRvci5hZGRDbGFzcygnYWN0aXZlJylcbiAgICB9XG5cbiAgICB2YXIgc2xpZEV2ZW50ID0gJC5FdmVudCgnc2xpZC5icy5jYXJvdXNlbCcsIHsgcmVsYXRlZFRhcmdldDogcmVsYXRlZFRhcmdldCwgZGlyZWN0aW9uOiBkaXJlY3Rpb24gfSkgLy8geWVzLCBcInNsaWRcIlxuICAgIGlmICgkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdzbGlkZScpKSB7XG4gICAgICAkbmV4dC5hZGRDbGFzcyh0eXBlKVxuICAgICAgJG5leHRbMF0ub2Zmc2V0V2lkdGggLy8gZm9yY2UgcmVmbG93XG4gICAgICAkYWN0aXZlLmFkZENsYXNzKGRpcmVjdGlvbilcbiAgICAgICRuZXh0LmFkZENsYXNzKGRpcmVjdGlvbilcbiAgICAgICRhY3RpdmVcbiAgICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICRuZXh0LnJlbW92ZUNsYXNzKFt0eXBlLCBkaXJlY3Rpb25dLmpvaW4oJyAnKSkuYWRkQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICAgICAgJGFjdGl2ZS5yZW1vdmVDbGFzcyhbJ2FjdGl2ZScsIGRpcmVjdGlvbl0uam9pbignICcpKVxuICAgICAgICAgIHRoYXQuc2xpZGluZyA9IGZhbHNlXG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGF0LiRlbGVtZW50LnRyaWdnZXIoc2xpZEV2ZW50KVxuICAgICAgICAgIH0sIDApXG4gICAgICAgIH0pXG4gICAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChDYXJvdXNlbC5UUkFOU0lUSU9OX0RVUkFUSU9OKVxuICAgIH0gZWxzZSB7XG4gICAgICAkYWN0aXZlLnJlbW92ZUNsYXNzKCdhY3RpdmUnKVxuICAgICAgJG5leHQuYWRkQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICB0aGlzLnNsaWRpbmcgPSBmYWxzZVxuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKHNsaWRFdmVudClcbiAgICB9XG5cbiAgICBpc0N5Y2xpbmcgJiYgdGhpcy5jeWNsZSgpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cblxuICAvLyBDQVJPVVNFTCBQTFVHSU4gREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGZ1bmN0aW9uIFBsdWdpbihvcHRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKVxuICAgICAgdmFyIGRhdGEgICAgPSAkdGhpcy5kYXRhKCdicy5jYXJvdXNlbCcpXG4gICAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBDYXJvdXNlbC5ERUZBVUxUUywgJHRoaXMuZGF0YSgpLCB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvbilcbiAgICAgIHZhciBhY3Rpb24gID0gdHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJyA/IG9wdGlvbiA6IG9wdGlvbnMuc2xpZGVcblxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy5jYXJvdXNlbCcsIChkYXRhID0gbmV3IENhcm91c2VsKHRoaXMsIG9wdGlvbnMpKSlcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdudW1iZXInKSBkYXRhLnRvKG9wdGlvbilcbiAgICAgIGVsc2UgaWYgKGFjdGlvbikgZGF0YVthY3Rpb25dKClcbiAgICAgIGVsc2UgaWYgKG9wdGlvbnMuaW50ZXJ2YWwpIGRhdGEucGF1c2UoKS5jeWNsZSgpXG4gICAgfSlcbiAgfVxuXG4gIHZhciBvbGQgPSAkLmZuLmNhcm91c2VsXG5cbiAgJC5mbi5jYXJvdXNlbCAgICAgICAgICAgICA9IFBsdWdpblxuICAkLmZuLmNhcm91c2VsLkNvbnN0cnVjdG9yID0gQ2Fyb3VzZWxcblxuXG4gIC8vIENBUk9VU0VMIE5PIENPTkZMSUNUXG4gIC8vID09PT09PT09PT09PT09PT09PT09XG5cbiAgJC5mbi5jYXJvdXNlbC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm4uY2Fyb3VzZWwgPSBvbGRcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cblxuICAvLyBDQVJPVVNFTCBEQVRBLUFQSVxuICAvLyA9PT09PT09PT09PT09PT09PVxuXG4gIHZhciBjbGlja0hhbmRsZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBocmVmXG4gICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXG4gICAgdmFyICR0YXJnZXQgPSAkKCR0aGlzLmF0dHIoJ2RhdGEtdGFyZ2V0JykgfHwgKGhyZWYgPSAkdGhpcy5hdHRyKCdocmVmJykpICYmIGhyZWYucmVwbGFjZSgvLiooPz0jW15cXHNdKyQpLywgJycpKSAvLyBzdHJpcCBmb3IgaWU3XG4gICAgaWYgKCEkdGFyZ2V0Lmhhc0NsYXNzKCdjYXJvdXNlbCcpKSByZXR1cm5cbiAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkdGFyZ2V0LmRhdGEoKSwgJHRoaXMuZGF0YSgpKVxuICAgIHZhciBzbGlkZUluZGV4ID0gJHRoaXMuYXR0cignZGF0YS1zbGlkZS10bycpXG4gICAgaWYgKHNsaWRlSW5kZXgpIG9wdGlvbnMuaW50ZXJ2YWwgPSBmYWxzZVxuXG4gICAgUGx1Z2luLmNhbGwoJHRhcmdldCwgb3B0aW9ucylcblxuICAgIGlmIChzbGlkZUluZGV4KSB7XG4gICAgICAkdGFyZ2V0LmRhdGEoJ2JzLmNhcm91c2VsJykudG8oc2xpZGVJbmRleClcbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gICQoZG9jdW1lbnQpXG4gICAgLm9uKCdjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaScsICdbZGF0YS1zbGlkZV0nLCBjbGlja0hhbmRsZXIpXG4gICAgLm9uKCdjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaScsICdbZGF0YS1zbGlkZS10b10nLCBjbGlja0hhbmRsZXIpXG5cbiAgJCh3aW5kb3cpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICQoJ1tkYXRhLXJpZGU9XCJjYXJvdXNlbFwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRjYXJvdXNlbCA9ICQodGhpcylcbiAgICAgIFBsdWdpbi5jYWxsKCRjYXJvdXNlbCwgJGNhcm91c2VsLmRhdGEoKSlcbiAgICB9KVxuICB9KVxuXG59KGpRdWVyeSk7XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEJvb3RzdHJhcDogY29sbGFwc2UuanMgdjMuMy41XG4gKiBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2NyaXB0LyNjb2xsYXBzZVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuXG4rZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIENPTExBUFNFIFBVQkxJQyBDTEFTUyBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgdmFyIENvbGxhcHNlID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRlbGVtZW50ICAgICAgPSAkKGVsZW1lbnQpXG4gICAgdGhpcy5vcHRpb25zICAgICAgID0gJC5leHRlbmQoe30sIENvbGxhcHNlLkRFRkFVTFRTLCBvcHRpb25zKVxuICAgIHRoaXMuJHRyaWdnZXIgICAgICA9ICQoJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2hyZWY9XCIjJyArIGVsZW1lbnQuaWQgKyAnXCJdLCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2RhdGEtdGFyZ2V0PVwiIycgKyBlbGVtZW50LmlkICsgJ1wiXScpXG4gICAgdGhpcy50cmFuc2l0aW9uaW5nID0gbnVsbFxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wYXJlbnQpIHtcbiAgICAgIHRoaXMuJHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50KClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy4kZWxlbWVudCwgdGhpcy4kdHJpZ2dlcilcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnRvZ2dsZSkgdGhpcy50b2dnbGUoKVxuICB9XG5cbiAgQ29sbGFwc2UuVkVSU0lPTiAgPSAnMy4zLjUnXG5cbiAgQ29sbGFwc2UuVFJBTlNJVElPTl9EVVJBVElPTiA9IDM1MFxuXG4gIENvbGxhcHNlLkRFRkFVTFRTID0ge1xuICAgIHRvZ2dsZTogdHJ1ZVxuICB9XG5cbiAgQ29sbGFwc2UucHJvdG90eXBlLmRpbWVuc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFzV2lkdGggPSB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCd3aWR0aCcpXG4gICAgcmV0dXJuIGhhc1dpZHRoID8gJ3dpZHRoJyA6ICdoZWlnaHQnXG4gIH1cblxuICBDb2xsYXBzZS5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uaW5nIHx8IHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2luJykpIHJldHVyblxuXG4gICAgdmFyIGFjdGl2ZXNEYXRhXG4gICAgdmFyIGFjdGl2ZXMgPSB0aGlzLiRwYXJlbnQgJiYgdGhpcy4kcGFyZW50LmNoaWxkcmVuKCcucGFuZWwnKS5jaGlsZHJlbignLmluLCAuY29sbGFwc2luZycpXG5cbiAgICBpZiAoYWN0aXZlcyAmJiBhY3RpdmVzLmxlbmd0aCkge1xuICAgICAgYWN0aXZlc0RhdGEgPSBhY3RpdmVzLmRhdGEoJ2JzLmNvbGxhcHNlJylcbiAgICAgIGlmIChhY3RpdmVzRGF0YSAmJiBhY3RpdmVzRGF0YS50cmFuc2l0aW9uaW5nKSByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgc3RhcnRFdmVudCA9ICQuRXZlbnQoJ3Nob3cuYnMuY29sbGFwc2UnKVxuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihzdGFydEV2ZW50KVxuICAgIGlmIChzdGFydEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm5cblxuICAgIGlmIChhY3RpdmVzICYmIGFjdGl2ZXMubGVuZ3RoKSB7XG4gICAgICBQbHVnaW4uY2FsbChhY3RpdmVzLCAnaGlkZScpXG4gICAgICBhY3RpdmVzRGF0YSB8fCBhY3RpdmVzLmRhdGEoJ2JzLmNvbGxhcHNlJywgbnVsbClcbiAgICB9XG5cbiAgICB2YXIgZGltZW5zaW9uID0gdGhpcy5kaW1lbnNpb24oKVxuXG4gICAgdGhpcy4kZWxlbWVudFxuICAgICAgLnJlbW92ZUNsYXNzKCdjb2xsYXBzZScpXG4gICAgICAuYWRkQ2xhc3MoJ2NvbGxhcHNpbmcnKVtkaW1lbnNpb25dKDApXG4gICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIHRydWUpXG5cbiAgICB0aGlzLiR0cmlnZ2VyXG4gICAgICAucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNlZCcpXG4gICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIHRydWUpXG5cbiAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSAxXG5cbiAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLiRlbGVtZW50XG4gICAgICAgIC5yZW1vdmVDbGFzcygnY29sbGFwc2luZycpXG4gICAgICAgIC5hZGRDbGFzcygnY29sbGFwc2UgaW4nKVtkaW1lbnNpb25dKCcnKVxuICAgICAgdGhpcy50cmFuc2l0aW9uaW5nID0gMFxuICAgICAgdGhpcy4kZWxlbWVudFxuICAgICAgICAudHJpZ2dlcignc2hvd24uYnMuY29sbGFwc2UnKVxuICAgIH1cblxuICAgIGlmICghJC5zdXBwb3J0LnRyYW5zaXRpb24pIHJldHVybiBjb21wbGV0ZS5jYWxsKHRoaXMpXG5cbiAgICB2YXIgc2Nyb2xsU2l6ZSA9ICQuY2FtZWxDYXNlKFsnc2Nyb2xsJywgZGltZW5zaW9uXS5qb2luKCctJykpXG5cbiAgICB0aGlzLiRlbGVtZW50XG4gICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCAkLnByb3h5KGNvbXBsZXRlLCB0aGlzKSlcbiAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChDb2xsYXBzZS5UUkFOU0lUSU9OX0RVUkFUSU9OKVtkaW1lbnNpb25dKHRoaXMuJGVsZW1lbnRbMF1bc2Nyb2xsU2l6ZV0pXG4gIH1cblxuICBDb2xsYXBzZS5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uaW5nIHx8ICF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdpbicpKSByZXR1cm5cblxuICAgIHZhciBzdGFydEV2ZW50ID0gJC5FdmVudCgnaGlkZS5icy5jb2xsYXBzZScpXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKHN0YXJ0RXZlbnQpXG4gICAgaWYgKHN0YXJ0RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgdmFyIGRpbWVuc2lvbiA9IHRoaXMuZGltZW5zaW9uKClcblxuICAgIHRoaXMuJGVsZW1lbnRbZGltZW5zaW9uXSh0aGlzLiRlbGVtZW50W2RpbWVuc2lvbl0oKSlbMF0ub2Zmc2V0SGVpZ2h0XG5cbiAgICB0aGlzLiRlbGVtZW50XG4gICAgICAuYWRkQ2xhc3MoJ2NvbGxhcHNpbmcnKVxuICAgICAgLnJlbW92ZUNsYXNzKCdjb2xsYXBzZSBpbicpXG4gICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIGZhbHNlKVxuXG4gICAgdGhpcy4kdHJpZ2dlclxuICAgICAgLmFkZENsYXNzKCdjb2xsYXBzZWQnKVxuICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSlcblxuICAgIHRoaXMudHJhbnNpdGlvbmluZyA9IDFcblxuICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMudHJhbnNpdGlvbmluZyA9IDBcbiAgICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgICAgLnJlbW92ZUNsYXNzKCdjb2xsYXBzaW5nJylcbiAgICAgICAgLmFkZENsYXNzKCdjb2xsYXBzZScpXG4gICAgICAgIC50cmlnZ2VyKCdoaWRkZW4uYnMuY29sbGFwc2UnKVxuICAgIH1cblxuICAgIGlmICghJC5zdXBwb3J0LnRyYW5zaXRpb24pIHJldHVybiBjb21wbGV0ZS5jYWxsKHRoaXMpXG5cbiAgICB0aGlzLiRlbGVtZW50XG4gICAgICBbZGltZW5zaW9uXSgwKVxuICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgJC5wcm94eShjb21wbGV0ZSwgdGhpcykpXG4gICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoQ29sbGFwc2UuVFJBTlNJVElPTl9EVVJBVElPTilcbiAgfVxuXG4gIENvbGxhcHNlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpc1t0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdpbicpID8gJ2hpZGUnIDogJ3Nob3cnXSgpXG4gIH1cblxuICBDb2xsYXBzZS5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAkKHRoaXMub3B0aW9ucy5wYXJlbnQpXG4gICAgICAuZmluZCgnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1bZGF0YS1wYXJlbnQ9XCInICsgdGhpcy5vcHRpb25zLnBhcmVudCArICdcIl0nKVxuICAgICAgLmVhY2goJC5wcm94eShmdW5jdGlvbiAoaSwgZWxlbWVudCkge1xuICAgICAgICB2YXIgJGVsZW1lbnQgPSAkKGVsZW1lbnQpXG4gICAgICAgIHRoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKGdldFRhcmdldEZyb21UcmlnZ2VyKCRlbGVtZW50KSwgJGVsZW1lbnQpXG4gICAgICB9LCB0aGlzKSlcbiAgICAgIC5lbmQoKVxuICB9XG5cbiAgQ29sbGFwc2UucHJvdG90eXBlLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyA9IGZ1bmN0aW9uICgkZWxlbWVudCwgJHRyaWdnZXIpIHtcbiAgICB2YXIgaXNPcGVuID0gJGVsZW1lbnQuaGFzQ2xhc3MoJ2luJylcblxuICAgICRlbGVtZW50LmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBpc09wZW4pXG4gICAgJHRyaWdnZXJcbiAgICAgIC50b2dnbGVDbGFzcygnY29sbGFwc2VkJywgIWlzT3BlbilcbiAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgaXNPcGVuKVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VGFyZ2V0RnJvbVRyaWdnZXIoJHRyaWdnZXIpIHtcbiAgICB2YXIgaHJlZlxuICAgIHZhciB0YXJnZXQgPSAkdHJpZ2dlci5hdHRyKCdkYXRhLXRhcmdldCcpXG4gICAgICB8fCAoaHJlZiA9ICR0cmlnZ2VyLmF0dHIoJ2hyZWYnKSkgJiYgaHJlZi5yZXBsYWNlKC8uKig/PSNbXlxcc10rJCkvLCAnJykgLy8gc3RyaXAgZm9yIGllN1xuXG4gICAgcmV0dXJuICQodGFyZ2V0KVxuICB9XG5cblxuICAvLyBDT0xMQVBTRSBQTFVHSU4gREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGZ1bmN0aW9uIFBsdWdpbihvcHRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKVxuICAgICAgdmFyIGRhdGEgICAgPSAkdGhpcy5kYXRhKCdicy5jb2xsYXBzZScpXG4gICAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBDb2xsYXBzZS5ERUZBVUxUUywgJHRoaXMuZGF0YSgpLCB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvbilcblxuICAgICAgaWYgKCFkYXRhICYmIG9wdGlvbnMudG9nZ2xlICYmIC9zaG93fGhpZGUvLnRlc3Qob3B0aW9uKSkgb3B0aW9ucy50b2dnbGUgPSBmYWxzZVxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy5jb2xsYXBzZScsIChkYXRhID0gbmV3IENvbGxhcHNlKHRoaXMsIG9wdGlvbnMpKSlcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0oKVxuICAgIH0pXG4gIH1cblxuICB2YXIgb2xkID0gJC5mbi5jb2xsYXBzZVxuXG4gICQuZm4uY29sbGFwc2UgICAgICAgICAgICAgPSBQbHVnaW5cbiAgJC5mbi5jb2xsYXBzZS5Db25zdHJ1Y3RvciA9IENvbGxhcHNlXG5cblxuICAvLyBDT0xMQVBTRSBOTyBDT05GTElDVFxuICAvLyA9PT09PT09PT09PT09PT09PT09PVxuXG4gICQuZm4uY29sbGFwc2Uubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuLmNvbGxhcHNlID0gb2xkXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG5cbiAgLy8gQ09MTEFQU0UgREFUQS1BUElcbiAgLy8gPT09PT09PT09PT09PT09PT1cblxuICAkKGRvY3VtZW50KS5vbignY2xpY2suYnMuY29sbGFwc2UuZGF0YS1hcGknLCAnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl0nLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKVxuXG4gICAgaWYgKCEkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpKSBlLnByZXZlbnREZWZhdWx0KClcblxuICAgIHZhciAkdGFyZ2V0ID0gZ2V0VGFyZ2V0RnJvbVRyaWdnZXIoJHRoaXMpXG4gICAgdmFyIGRhdGEgICAgPSAkdGFyZ2V0LmRhdGEoJ2JzLmNvbGxhcHNlJylcbiAgICB2YXIgb3B0aW9uICA9IGRhdGEgPyAndG9nZ2xlJyA6ICR0aGlzLmRhdGEoKVxuXG4gICAgUGx1Z2luLmNhbGwoJHRhcmdldCwgb3B0aW9uKVxuICB9KVxuXG59KGpRdWVyeSk7XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEJvb3RzdHJhcDogZHJvcGRvd24uanMgdjMuMy41XG4gKiBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2NyaXB0LyNkcm9wZG93bnNcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cblxuK2Z1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBEUk9QRE9XTiBDTEFTUyBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB2YXIgYmFja2Ryb3AgPSAnLmRyb3Bkb3duLWJhY2tkcm9wJ1xuICB2YXIgdG9nZ2xlICAgPSAnW2RhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIl0nXG4gIHZhciBEcm9wZG93biA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgJChlbGVtZW50KS5vbignY2xpY2suYnMuZHJvcGRvd24nLCB0aGlzLnRvZ2dsZSlcbiAgfVxuXG4gIERyb3Bkb3duLlZFUlNJT04gPSAnMy4zLjUnXG5cbiAgZnVuY3Rpb24gZ2V0UGFyZW50KCR0aGlzKSB7XG4gICAgdmFyIHNlbGVjdG9yID0gJHRoaXMuYXR0cignZGF0YS10YXJnZXQnKVxuXG4gICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdocmVmJylcbiAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IgJiYgLyNbQS1aYS16XS8udGVzdChzZWxlY3RvcikgJiYgc2VsZWN0b3IucmVwbGFjZSgvLiooPz0jW15cXHNdKiQpLywgJycpIC8vIHN0cmlwIGZvciBpZTdcbiAgICB9XG5cbiAgICB2YXIgJHBhcmVudCA9IHNlbGVjdG9yICYmICQoc2VsZWN0b3IpXG5cbiAgICByZXR1cm4gJHBhcmVudCAmJiAkcGFyZW50Lmxlbmd0aCA/ICRwYXJlbnQgOiAkdGhpcy5wYXJlbnQoKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJNZW51cyhlKSB7XG4gICAgaWYgKGUgJiYgZS53aGljaCA9PT0gMykgcmV0dXJuXG4gICAgJChiYWNrZHJvcCkucmVtb3ZlKClcbiAgICAkKHRvZ2dsZSkuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHRoaXMgICAgICAgICA9ICQodGhpcylcbiAgICAgIHZhciAkcGFyZW50ICAgICAgID0gZ2V0UGFyZW50KCR0aGlzKVxuICAgICAgdmFyIHJlbGF0ZWRUYXJnZXQgPSB7IHJlbGF0ZWRUYXJnZXQ6IHRoaXMgfVxuXG4gICAgICBpZiAoISRwYXJlbnQuaGFzQ2xhc3MoJ29wZW4nKSkgcmV0dXJuXG5cbiAgICAgIGlmIChlICYmIGUudHlwZSA9PSAnY2xpY2snICYmIC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZS50YXJnZXQudGFnTmFtZSkgJiYgJC5jb250YWlucygkcGFyZW50WzBdLCBlLnRhcmdldCkpIHJldHVyblxuXG4gICAgICAkcGFyZW50LnRyaWdnZXIoZSA9ICQuRXZlbnQoJ2hpZGUuYnMuZHJvcGRvd24nLCByZWxhdGVkVGFyZ2V0KSlcblxuICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgICAkdGhpcy5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJylcbiAgICAgICRwYXJlbnQucmVtb3ZlQ2xhc3MoJ29wZW4nKS50cmlnZ2VyKCdoaWRkZW4uYnMuZHJvcGRvd24nLCByZWxhdGVkVGFyZ2V0KVxuICAgIH0pXG4gIH1cblxuICBEcm9wZG93bi5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgJHRoaXMgPSAkKHRoaXMpXG5cbiAgICBpZiAoJHRoaXMuaXMoJy5kaXNhYmxlZCwgOmRpc2FibGVkJykpIHJldHVyblxuXG4gICAgdmFyICRwYXJlbnQgID0gZ2V0UGFyZW50KCR0aGlzKVxuICAgIHZhciBpc0FjdGl2ZSA9ICRwYXJlbnQuaGFzQ2xhc3MoJ29wZW4nKVxuXG4gICAgY2xlYXJNZW51cygpXG5cbiAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmICEkcGFyZW50LmNsb3Nlc3QoJy5uYXZiYXItbmF2JykubGVuZ3RoKSB7XG4gICAgICAgIC8vIGlmIG1vYmlsZSB3ZSB1c2UgYSBiYWNrZHJvcCBiZWNhdXNlIGNsaWNrIGV2ZW50cyBkb24ndCBkZWxlZ2F0ZVxuICAgICAgICAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKVxuICAgICAgICAgIC5hZGRDbGFzcygnZHJvcGRvd24tYmFja2Ryb3AnKVxuICAgICAgICAgIC5pbnNlcnRBZnRlcigkKHRoaXMpKVxuICAgICAgICAgIC5vbignY2xpY2snLCBjbGVhck1lbnVzKVxuICAgICAgfVxuXG4gICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IHsgcmVsYXRlZFRhcmdldDogdGhpcyB9XG4gICAgICAkcGFyZW50LnRyaWdnZXIoZSA9ICQuRXZlbnQoJ3Nob3cuYnMuZHJvcGRvd24nLCByZWxhdGVkVGFyZ2V0KSlcblxuICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgICAkdGhpc1xuICAgICAgICAudHJpZ2dlcignZm9jdXMnKVxuICAgICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsICd0cnVlJylcblxuICAgICAgJHBhcmVudFxuICAgICAgICAudG9nZ2xlQ2xhc3MoJ29wZW4nKVxuICAgICAgICAudHJpZ2dlcignc2hvd24uYnMuZHJvcGRvd24nLCByZWxhdGVkVGFyZ2V0KVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgRHJvcGRvd24ucHJvdG90eXBlLmtleWRvd24gPSBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghLygzOHw0MHwyN3wzMikvLnRlc3QoZS53aGljaCkgfHwgL2lucHV0fHRleHRhcmVhL2kudGVzdChlLnRhcmdldC50YWdOYW1lKSkgcmV0dXJuXG5cbiAgICB2YXIgJHRoaXMgPSAkKHRoaXMpXG5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICBpZiAoJHRoaXMuaXMoJy5kaXNhYmxlZCwgOmRpc2FibGVkJykpIHJldHVyblxuXG4gICAgdmFyICRwYXJlbnQgID0gZ2V0UGFyZW50KCR0aGlzKVxuICAgIHZhciBpc0FjdGl2ZSA9ICRwYXJlbnQuaGFzQ2xhc3MoJ29wZW4nKVxuXG4gICAgaWYgKCFpc0FjdGl2ZSAmJiBlLndoaWNoICE9IDI3IHx8IGlzQWN0aXZlICYmIGUud2hpY2ggPT0gMjcpIHtcbiAgICAgIGlmIChlLndoaWNoID09IDI3KSAkcGFyZW50LmZpbmQodG9nZ2xlKS50cmlnZ2VyKCdmb2N1cycpXG4gICAgICByZXR1cm4gJHRoaXMudHJpZ2dlcignY2xpY2snKVxuICAgIH1cblxuICAgIHZhciBkZXNjID0gJyBsaTpub3QoLmRpc2FibGVkKTp2aXNpYmxlIGEnXG4gICAgdmFyICRpdGVtcyA9ICRwYXJlbnQuZmluZCgnLmRyb3Bkb3duLW1lbnUnICsgZGVzYylcblxuICAgIGlmICghJGl0ZW1zLmxlbmd0aCkgcmV0dXJuXG5cbiAgICB2YXIgaW5kZXggPSAkaXRlbXMuaW5kZXgoZS50YXJnZXQpXG5cbiAgICBpZiAoZS53aGljaCA9PSAzOCAmJiBpbmRleCA+IDApICAgICAgICAgICAgICAgICBpbmRleC0tICAgICAgICAgLy8gdXBcbiAgICBpZiAoZS53aGljaCA9PSA0MCAmJiBpbmRleCA8ICRpdGVtcy5sZW5ndGggLSAxKSBpbmRleCsrICAgICAgICAgLy8gZG93blxuICAgIGlmICghfmluZGV4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gMFxuXG4gICAgJGl0ZW1zLmVxKGluZGV4KS50cmlnZ2VyKCdmb2N1cycpXG4gIH1cblxuXG4gIC8vIERST1BET1dOIFBMVUdJTiBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzID0gJCh0aGlzKVxuICAgICAgdmFyIGRhdGEgID0gJHRoaXMuZGF0YSgnYnMuZHJvcGRvd24nKVxuXG4gICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2JzLmRyb3Bkb3duJywgKGRhdGEgPSBuZXcgRHJvcGRvd24odGhpcykpKVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXS5jYWxsKCR0aGlzKVxuICAgIH0pXG4gIH1cblxuICB2YXIgb2xkID0gJC5mbi5kcm9wZG93blxuXG4gICQuZm4uZHJvcGRvd24gICAgICAgICAgICAgPSBQbHVnaW5cbiAgJC5mbi5kcm9wZG93bi5Db25zdHJ1Y3RvciA9IERyb3Bkb3duXG5cblxuICAvLyBEUk9QRE9XTiBOTyBDT05GTElDVFxuICAvLyA9PT09PT09PT09PT09PT09PT09PVxuXG4gICQuZm4uZHJvcGRvd24ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuLmRyb3Bkb3duID0gb2xkXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG5cbiAgLy8gQVBQTFkgVE8gU1RBTkRBUkQgRFJPUERPV04gRUxFTUVOVFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAkKGRvY3VtZW50KVxuICAgIC5vbignY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGknLCBjbGVhck1lbnVzKVxuICAgIC5vbignY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGknLCAnLmRyb3Bkb3duIGZvcm0nLCBmdW5jdGlvbiAoZSkgeyBlLnN0b3BQcm9wYWdhdGlvbigpIH0pXG4gICAgLm9uKCdjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaScsIHRvZ2dsZSwgRHJvcGRvd24ucHJvdG90eXBlLnRvZ2dsZSlcbiAgICAub24oJ2tleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGknLCB0b2dnbGUsIERyb3Bkb3duLnByb3RvdHlwZS5rZXlkb3duKVxuICAgIC5vbigna2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaScsICcuZHJvcGRvd24tbWVudScsIERyb3Bkb3duLnByb3RvdHlwZS5rZXlkb3duKVxuXG59KGpRdWVyeSk7XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEJvb3RzdHJhcDogbW9kYWwuanMgdjMuMy41XG4gKiBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2NyaXB0LyNtb2RhbHNcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cblxuK2Z1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBNT0RBTCBDTEFTUyBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT1cblxuICB2YXIgTW9kYWwgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyAgICAgICAgICAgICA9IG9wdGlvbnNcbiAgICB0aGlzLiRib2R5ICAgICAgICAgICAgICAgPSAkKGRvY3VtZW50LmJvZHkpXG4gICAgdGhpcy4kZWxlbWVudCAgICAgICAgICAgID0gJChlbGVtZW50KVxuICAgIHRoaXMuJGRpYWxvZyAgICAgICAgICAgICA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLm1vZGFsLWRpYWxvZycpXG4gICAgdGhpcy4kYmFja2Ryb3AgICAgICAgICAgID0gbnVsbFxuICAgIHRoaXMuaXNTaG93biAgICAgICAgICAgICA9IG51bGxcbiAgICB0aGlzLm9yaWdpbmFsQm9keVBhZCAgICAgPSBudWxsXG4gICAgdGhpcy5zY3JvbGxiYXJXaWR0aCAgICAgID0gMFxuICAgIHRoaXMuaWdub3JlQmFja2Ryb3BDbGljayA9IGZhbHNlXG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnJlbW90ZSkge1xuICAgICAgdGhpcy4kZWxlbWVudFxuICAgICAgICAuZmluZCgnLm1vZGFsLWNvbnRlbnQnKVxuICAgICAgICAubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlLCAkLnByb3h5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2xvYWRlZC5icy5tb2RhbCcpXG4gICAgICAgIH0sIHRoaXMpKVxuICAgIH1cbiAgfVxuXG4gIE1vZGFsLlZFUlNJT04gID0gJzMuMy41J1xuXG4gIE1vZGFsLlRSQU5TSVRJT05fRFVSQVRJT04gPSAzMDBcbiAgTW9kYWwuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTiA9IDE1MFxuXG4gIE1vZGFsLkRFRkFVTFRTID0ge1xuICAgIGJhY2tkcm9wOiB0cnVlLFxuICAgIGtleWJvYXJkOiB0cnVlLFxuICAgIHNob3c6IHRydWVcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAoX3JlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3coX3JlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBNb2RhbC5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uIChfcmVsYXRlZFRhcmdldCkge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIHZhciBlICAgID0gJC5FdmVudCgnc2hvdy5icy5tb2RhbCcsIHsgcmVsYXRlZFRhcmdldDogX3JlbGF0ZWRUYXJnZXQgfSlcblxuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKVxuXG4gICAgaWYgKHRoaXMuaXNTaG93biB8fCBlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm5cblxuICAgIHRoaXMuaXNTaG93biA9IHRydWVcblxuICAgIHRoaXMuY2hlY2tTY3JvbGxiYXIoKVxuICAgIHRoaXMuc2V0U2Nyb2xsYmFyKClcbiAgICB0aGlzLiRib2R5LmFkZENsYXNzKCdtb2RhbC1vcGVuJylcblxuICAgIHRoaXMuZXNjYXBlKClcbiAgICB0aGlzLnJlc2l6ZSgpXG5cbiAgICB0aGlzLiRlbGVtZW50Lm9uKCdjbGljay5kaXNtaXNzLmJzLm1vZGFsJywgJ1tkYXRhLWRpc21pc3M9XCJtb2RhbFwiXScsICQucHJveHkodGhpcy5oaWRlLCB0aGlzKSlcblxuICAgIHRoaXMuJGRpYWxvZy5vbignbW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGF0LiRlbGVtZW50Lm9uZSgnbW91c2V1cC5kaXNtaXNzLmJzLm1vZGFsJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKCQoZS50YXJnZXQpLmlzKHRoYXQuJGVsZW1lbnQpKSB0aGF0Lmlnbm9yZUJhY2tkcm9wQ2xpY2sgPSB0cnVlXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICB0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0cmFuc2l0aW9uID0gJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhhdC4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScpXG5cbiAgICAgIGlmICghdGhhdC4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGgpIHtcbiAgICAgICAgdGhhdC4kZWxlbWVudC5hcHBlbmRUbyh0aGF0LiRib2R5KSAvLyBkb24ndCBtb3ZlIG1vZGFscyBkb20gcG9zaXRpb25cbiAgICAgIH1cblxuICAgICAgdGhhdC4kZWxlbWVudFxuICAgICAgICAuc2hvdygpXG4gICAgICAgIC5zY3JvbGxUb3AoMClcblxuICAgICAgdGhhdC5hZGp1c3REaWFsb2coKVxuXG4gICAgICBpZiAodHJhbnNpdGlvbikge1xuICAgICAgICB0aGF0LiRlbGVtZW50WzBdLm9mZnNldFdpZHRoIC8vIGZvcmNlIHJlZmxvd1xuICAgICAgfVxuXG4gICAgICB0aGF0LiRlbGVtZW50LmFkZENsYXNzKCdpbicpXG5cbiAgICAgIHRoYXQuZW5mb3JjZUZvY3VzKClcblxuICAgICAgdmFyIGUgPSAkLkV2ZW50KCdzaG93bi5icy5tb2RhbCcsIHsgcmVsYXRlZFRhcmdldDogX3JlbGF0ZWRUYXJnZXQgfSlcblxuICAgICAgdHJhbnNpdGlvbiA/XG4gICAgICAgIHRoYXQuJGRpYWxvZyAvLyB3YWl0IGZvciBtb2RhbCB0byBzbGlkZSBpblxuICAgICAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoYXQuJGVsZW1lbnQudHJpZ2dlcignZm9jdXMnKS50cmlnZ2VyKGUpXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoTW9kYWwuVFJBTlNJVElPTl9EVVJBVElPTikgOlxuICAgICAgICB0aGF0LiRlbGVtZW50LnRyaWdnZXIoJ2ZvY3VzJykudHJpZ2dlcihlKVxuICAgIH0pXG4gIH1cblxuICBNb2RhbC5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGUpIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgZSA9ICQuRXZlbnQoJ2hpZGUuYnMubW9kYWwnKVxuXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpXG5cbiAgICBpZiAoIXRoaXMuaXNTaG93biB8fCBlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm5cblxuICAgIHRoaXMuaXNTaG93biA9IGZhbHNlXG5cbiAgICB0aGlzLmVzY2FwZSgpXG4gICAgdGhpcy5yZXNpemUoKVxuXG4gICAgJChkb2N1bWVudCkub2ZmKCdmb2N1c2luLmJzLm1vZGFsJylcblxuICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIC5yZW1vdmVDbGFzcygnaW4nKVxuICAgICAgLm9mZignY2xpY2suZGlzbWlzcy5icy5tb2RhbCcpXG4gICAgICAub2ZmKCdtb3VzZXVwLmRpc21pc3MuYnMubW9kYWwnKVxuXG4gICAgdGhpcy4kZGlhbG9nLm9mZignbW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWwnKVxuXG4gICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScpID9cbiAgICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgJC5wcm94eSh0aGlzLmhpZGVNb2RhbCwgdGhpcykpXG4gICAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChNb2RhbC5UUkFOU0lUSU9OX0RVUkFUSU9OKSA6XG4gICAgICB0aGlzLmhpZGVNb2RhbCgpXG4gIH1cblxuICBNb2RhbC5wcm90b3R5cGUuZW5mb3JjZUZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgICQoZG9jdW1lbnQpXG4gICAgICAub2ZmKCdmb2N1c2luLmJzLm1vZGFsJykgLy8gZ3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBmb2N1cyBsb29wXG4gICAgICAub24oJ2ZvY3VzaW4uYnMubW9kYWwnLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmICh0aGlzLiRlbGVtZW50WzBdICE9PSBlLnRhcmdldCAmJiAhdGhpcy4kZWxlbWVudC5oYXMoZS50YXJnZXQpLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignZm9jdXMnKVxuICAgICAgICB9XG4gICAgICB9LCB0aGlzKSlcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5lc2NhcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuaXNTaG93biAmJiB0aGlzLm9wdGlvbnMua2V5Ym9hcmQpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQub24oJ2tleWRvd24uZGlzbWlzcy5icy5tb2RhbCcsICQucHJveHkoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS53aGljaCA9PSAyNyAmJiB0aGlzLmhpZGUoKVxuICAgICAgfSwgdGhpcykpXG4gICAgfSBlbHNlIGlmICghdGhpcy5pc1Nob3duKSB7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9mZigna2V5ZG93bi5kaXNtaXNzLmJzLm1vZGFsJylcbiAgICB9XG4gIH1cblxuICBNb2RhbC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmlzU2hvd24pIHtcbiAgICAgICQod2luZG93KS5vbigncmVzaXplLmJzLm1vZGFsJywgJC5wcm94eSh0aGlzLmhhbmRsZVVwZGF0ZSwgdGhpcykpXG4gICAgfSBlbHNlIHtcbiAgICAgICQod2luZG93KS5vZmYoJ3Jlc2l6ZS5icy5tb2RhbCcpXG4gICAgfVxuICB9XG5cbiAgTW9kYWwucHJvdG90eXBlLmhpZGVNb2RhbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICB0aGlzLiRlbGVtZW50LmhpZGUoKVxuICAgIHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24gKCkge1xuICAgICAgdGhhdC4kYm9keS5yZW1vdmVDbGFzcygnbW9kYWwtb3BlbicpXG4gICAgICB0aGF0LnJlc2V0QWRqdXN0bWVudHMoKVxuICAgICAgdGhhdC5yZXNldFNjcm9sbGJhcigpXG4gICAgICB0aGF0LiRlbGVtZW50LnRyaWdnZXIoJ2hpZGRlbi5icy5tb2RhbCcpXG4gICAgfSlcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5yZW1vdmVCYWNrZHJvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiRiYWNrZHJvcCAmJiB0aGlzLiRiYWNrZHJvcC5yZW1vdmUoKVxuICAgIHRoaXMuJGJhY2tkcm9wID0gbnVsbFxuICB9XG5cbiAgTW9kYWwucHJvdG90eXBlLmJhY2tkcm9wID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgdmFyIGFuaW1hdGUgPSB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJykgPyAnZmFkZScgOiAnJ1xuXG4gICAgaWYgKHRoaXMuaXNTaG93biAmJiB0aGlzLm9wdGlvbnMuYmFja2Ryb3ApIHtcbiAgICAgIHZhciBkb0FuaW1hdGUgPSAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiBhbmltYXRlXG5cbiAgICAgIHRoaXMuJGJhY2tkcm9wID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSlcbiAgICAgICAgLmFkZENsYXNzKCdtb2RhbC1iYWNrZHJvcCAnICsgYW5pbWF0ZSlcbiAgICAgICAgLmFwcGVuZFRvKHRoaXMuJGJvZHkpXG5cbiAgICAgIHRoaXMuJGVsZW1lbnQub24oJ2NsaWNrLmRpc21pc3MuYnMubW9kYWwnLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmICh0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2spIHtcbiAgICAgICAgICB0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2sgPSBmYWxzZVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChlLnRhcmdldCAhPT0gZS5jdXJyZW50VGFyZ2V0KSByZXR1cm5cbiAgICAgICAgdGhpcy5vcHRpb25zLmJhY2tkcm9wID09ICdzdGF0aWMnXG4gICAgICAgICAgPyB0aGlzLiRlbGVtZW50WzBdLmZvY3VzKClcbiAgICAgICAgICA6IHRoaXMuaGlkZSgpXG4gICAgICB9LCB0aGlzKSlcblxuICAgICAgaWYgKGRvQW5pbWF0ZSkgdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGggLy8gZm9yY2UgcmVmbG93XG5cbiAgICAgIHRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKCdpbicpXG5cbiAgICAgIGlmICghY2FsbGJhY2spIHJldHVyblxuXG4gICAgICBkb0FuaW1hdGUgP1xuICAgICAgICB0aGlzLiRiYWNrZHJvcFxuICAgICAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIGNhbGxiYWNrKVxuICAgICAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChNb2RhbC5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OKSA6XG4gICAgICAgIGNhbGxiYWNrKClcblxuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNTaG93biAmJiB0aGlzLiRiYWNrZHJvcCkge1xuICAgICAgdGhpcy4kYmFja2Ryb3AucmVtb3ZlQ2xhc3MoJ2luJylcblxuICAgICAgdmFyIGNhbGxiYWNrUmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGF0LnJlbW92ZUJhY2tkcm9wKClcbiAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKVxuICAgICAgfVxuICAgICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScpID9cbiAgICAgICAgdGhpcy4kYmFja2Ryb3BcbiAgICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCBjYWxsYmFja1JlbW92ZSlcbiAgICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoTW9kYWwuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTikgOlxuICAgICAgICBjYWxsYmFja1JlbW92ZSgpXG5cbiAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpXG4gICAgfVxuICB9XG5cbiAgLy8gdGhlc2UgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gaGFuZGxlIG92ZXJmbG93aW5nIG1vZGFsc1xuXG4gIE1vZGFsLnByb3RvdHlwZS5oYW5kbGVVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5hZGp1c3REaWFsb2coKVxuICB9XG5cbiAgTW9kYWwucHJvdG90eXBlLmFkanVzdERpYWxvZyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbW9kYWxJc092ZXJmbG93aW5nID0gdGhpcy4kZWxlbWVudFswXS5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0XG5cbiAgICB0aGlzLiRlbGVtZW50LmNzcyh7XG4gICAgICBwYWRkaW5nTGVmdDogICF0aGlzLmJvZHlJc092ZXJmbG93aW5nICYmIG1vZGFsSXNPdmVyZmxvd2luZyA/IHRoaXMuc2Nyb2xsYmFyV2lkdGggOiAnJyxcbiAgICAgIHBhZGRpbmdSaWdodDogdGhpcy5ib2R5SXNPdmVyZmxvd2luZyAmJiAhbW9kYWxJc092ZXJmbG93aW5nID8gdGhpcy5zY3JvbGxiYXJXaWR0aCA6ICcnXG4gICAgfSlcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5yZXNldEFkanVzdG1lbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJGVsZW1lbnQuY3NzKHtcbiAgICAgIHBhZGRpbmdMZWZ0OiAnJyxcbiAgICAgIHBhZGRpbmdSaWdodDogJydcbiAgICB9KVxuICB9XG5cbiAgTW9kYWwucHJvdG90eXBlLmNoZWNrU2Nyb2xsYmFyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBmdWxsV2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgIGlmICghZnVsbFdpbmRvd1dpZHRoKSB7IC8vIHdvcmthcm91bmQgZm9yIG1pc3Npbmcgd2luZG93LmlubmVyV2lkdGggaW4gSUU4XG4gICAgICB2YXIgZG9jdW1lbnRFbGVtZW50UmVjdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgZnVsbFdpbmRvd1dpZHRoID0gZG9jdW1lbnRFbGVtZW50UmVjdC5yaWdodCAtIE1hdGguYWJzKGRvY3VtZW50RWxlbWVudFJlY3QubGVmdClcbiAgICB9XG4gICAgdGhpcy5ib2R5SXNPdmVyZmxvd2luZyA9IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggPCBmdWxsV2luZG93V2lkdGhcbiAgICB0aGlzLnNjcm9sbGJhcldpZHRoID0gdGhpcy5tZWFzdXJlU2Nyb2xsYmFyKClcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5zZXRTY3JvbGxiYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGJvZHlQYWQgPSBwYXJzZUludCgodGhpcy4kYm9keS5jc3MoJ3BhZGRpbmctcmlnaHQnKSB8fCAwKSwgMTApXG4gICAgdGhpcy5vcmlnaW5hbEJvZHlQYWQgPSBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodCB8fCAnJ1xuICAgIGlmICh0aGlzLmJvZHlJc092ZXJmbG93aW5nKSB0aGlzLiRib2R5LmNzcygncGFkZGluZy1yaWdodCcsIGJvZHlQYWQgKyB0aGlzLnNjcm9sbGJhcldpZHRoKVxuICB9XG5cbiAgTW9kYWwucHJvdG90eXBlLnJlc2V0U2Nyb2xsYmFyID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJGJvZHkuY3NzKCdwYWRkaW5nLXJpZ2h0JywgdGhpcy5vcmlnaW5hbEJvZHlQYWQpXG4gIH1cblxuICBNb2RhbC5wcm90b3R5cGUubWVhc3VyZVNjcm9sbGJhciA9IGZ1bmN0aW9uICgpIHsgLy8gdGh4IHdhbHNoXG4gICAgdmFyIHNjcm9sbERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgc2Nyb2xsRGl2LmNsYXNzTmFtZSA9ICdtb2RhbC1zY3JvbGxiYXItbWVhc3VyZSdcbiAgICB0aGlzLiRib2R5LmFwcGVuZChzY3JvbGxEaXYpXG4gICAgdmFyIHNjcm9sbGJhcldpZHRoID0gc2Nyb2xsRGl2Lm9mZnNldFdpZHRoIC0gc2Nyb2xsRGl2LmNsaWVudFdpZHRoXG4gICAgdGhpcy4kYm9keVswXS5yZW1vdmVDaGlsZChzY3JvbGxEaXYpXG4gICAgcmV0dXJuIHNjcm9sbGJhcldpZHRoXG4gIH1cblxuXG4gIC8vIE1PREFMIFBMVUdJTiBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbiwgX3JlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKVxuICAgICAgdmFyIGRhdGEgICAgPSAkdGhpcy5kYXRhKCdicy5tb2RhbCcpXG4gICAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBNb2RhbC5ERUZBVUxUUywgJHRoaXMuZGF0YSgpLCB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvbilcblxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy5tb2RhbCcsIChkYXRhID0gbmV3IE1vZGFsKHRoaXMsIG9wdGlvbnMpKSlcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0oX3JlbGF0ZWRUYXJnZXQpXG4gICAgICBlbHNlIGlmIChvcHRpb25zLnNob3cpIGRhdGEuc2hvdyhfcmVsYXRlZFRhcmdldClcbiAgICB9KVxuICB9XG5cbiAgdmFyIG9sZCA9ICQuZm4ubW9kYWxcblxuICAkLmZuLm1vZGFsICAgICAgICAgICAgID0gUGx1Z2luXG4gICQuZm4ubW9kYWwuQ29uc3RydWN0b3IgPSBNb2RhbFxuXG5cbiAgLy8gTU9EQUwgTk8gQ09ORkxJQ1RcbiAgLy8gPT09PT09PT09PT09PT09PT1cblxuICAkLmZuLm1vZGFsLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbi5tb2RhbCA9IG9sZFxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuXG4gIC8vIE1PREFMIERBVEEtQVBJXG4gIC8vID09PT09PT09PT09PT09XG5cbiAgJChkb2N1bWVudCkub24oJ2NsaWNrLmJzLm1vZGFsLmRhdGEtYXBpJywgJ1tkYXRhLXRvZ2dsZT1cIm1vZGFsXCJdJywgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgJHRoaXMgICA9ICQodGhpcylcbiAgICB2YXIgaHJlZiAgICA9ICR0aGlzLmF0dHIoJ2hyZWYnKVxuICAgIHZhciAkdGFyZ2V0ID0gJCgkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpIHx8IChocmVmICYmIGhyZWYucmVwbGFjZSgvLiooPz0jW15cXHNdKyQpLywgJycpKSkgLy8gc3RyaXAgZm9yIGllN1xuICAgIHZhciBvcHRpb24gID0gJHRhcmdldC5kYXRhKCdicy5tb2RhbCcpID8gJ3RvZ2dsZScgOiAkLmV4dGVuZCh7IHJlbW90ZTogIS8jLy50ZXN0KGhyZWYpICYmIGhyZWYgfSwgJHRhcmdldC5kYXRhKCksICR0aGlzLmRhdGEoKSlcblxuICAgIGlmICgkdGhpcy5pcygnYScpKSBlLnByZXZlbnREZWZhdWx0KClcblxuICAgICR0YXJnZXQub25lKCdzaG93LmJzLm1vZGFsJywgZnVuY3Rpb24gKHNob3dFdmVudCkge1xuICAgICAgaWYgKHNob3dFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuIC8vIG9ubHkgcmVnaXN0ZXIgZm9jdXMgcmVzdG9yZXIgaWYgbW9kYWwgd2lsbCBhY3R1YWxseSBnZXQgc2hvd25cbiAgICAgICR0YXJnZXQub25lKCdoaWRkZW4uYnMubW9kYWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICR0aGlzLmlzKCc6dmlzaWJsZScpICYmICR0aGlzLnRyaWdnZXIoJ2ZvY3VzJylcbiAgICAgIH0pXG4gICAgfSlcbiAgICBQbHVnaW4uY2FsbCgkdGFyZ2V0LCBvcHRpb24sIHRoaXMpXG4gIH0pXG5cbn0oalF1ZXJ5KTtcbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQm9vdHN0cmFwOiB0b29sdGlwLmpzIHYzLjMuNVxuICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vamF2YXNjcmlwdC8jdG9vbHRpcFxuICogSW5zcGlyZWQgYnkgdGhlIG9yaWdpbmFsIGpRdWVyeS50aXBzeSBieSBKYXNvbiBGcmFtZVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuXG4rZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIFRPT0xUSVAgUFVCTElDIENMQVNTIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHZhciBUb29sdGlwID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLnR5cGUgICAgICAgPSBudWxsXG4gICAgdGhpcy5vcHRpb25zICAgID0gbnVsbFxuICAgIHRoaXMuZW5hYmxlZCAgICA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXQgICAgPSBudWxsXG4gICAgdGhpcy5ob3ZlclN0YXRlID0gbnVsbFxuICAgIHRoaXMuJGVsZW1lbnQgICA9IG51bGxcbiAgICB0aGlzLmluU3RhdGUgICAgPSBudWxsXG5cbiAgICB0aGlzLmluaXQoJ3Rvb2x0aXAnLCBlbGVtZW50LCBvcHRpb25zKVxuICB9XG5cbiAgVG9vbHRpcC5WRVJTSU9OICA9ICczLjMuNSdcblxuICBUb29sdGlwLlRSQU5TSVRJT05fRFVSQVRJT04gPSAxNTBcblxuICBUb29sdGlwLkRFRkFVTFRTID0ge1xuICAgIGFuaW1hdGlvbjogdHJ1ZSxcbiAgICBwbGFjZW1lbnQ6ICd0b3AnLFxuICAgIHNlbGVjdG9yOiBmYWxzZSxcbiAgICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJ0b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj48ZGl2IGNsYXNzPVwidG9vbHRpcC1hcnJvd1wiPjwvZGl2PjxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+PC9kaXY+JyxcbiAgICB0cmlnZ2VyOiAnaG92ZXIgZm9jdXMnLFxuICAgIHRpdGxlOiAnJyxcbiAgICBkZWxheTogMCxcbiAgICBodG1sOiBmYWxzZSxcbiAgICBjb250YWluZXI6IGZhbHNlLFxuICAgIHZpZXdwb3J0OiB7XG4gICAgICBzZWxlY3RvcjogJ2JvZHknLFxuICAgICAgcGFkZGluZzogMFxuICAgIH1cbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAodHlwZSwgZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuZW5hYmxlZCAgID0gdHJ1ZVxuICAgIHRoaXMudHlwZSAgICAgID0gdHlwZVxuICAgIHRoaXMuJGVsZW1lbnQgID0gJChlbGVtZW50KVxuICAgIHRoaXMub3B0aW9ucyAgID0gdGhpcy5nZXRPcHRpb25zKG9wdGlvbnMpXG4gICAgdGhpcy4kdmlld3BvcnQgPSB0aGlzLm9wdGlvbnMudmlld3BvcnQgJiYgJCgkLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnZpZXdwb3J0KSA/IHRoaXMub3B0aW9ucy52aWV3cG9ydC5jYWxsKHRoaXMsIHRoaXMuJGVsZW1lbnQpIDogKHRoaXMub3B0aW9ucy52aWV3cG9ydC5zZWxlY3RvciB8fCB0aGlzLm9wdGlvbnMudmlld3BvcnQpKVxuICAgIHRoaXMuaW5TdGF0ZSAgID0geyBjbGljazogZmFsc2UsIGhvdmVyOiBmYWxzZSwgZm9jdXM6IGZhbHNlIH1cblxuICAgIGlmICh0aGlzLiRlbGVtZW50WzBdIGluc3RhbmNlb2YgZG9jdW1lbnQuY29uc3RydWN0b3IgJiYgIXRoaXMub3B0aW9ucy5zZWxlY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgc2VsZWN0b3JgIG9wdGlvbiBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIGluaXRpYWxpemluZyAnICsgdGhpcy50eXBlICsgJyBvbiB0aGUgd2luZG93LmRvY3VtZW50IG9iamVjdCEnKVxuICAgIH1cblxuICAgIHZhciB0cmlnZ2VycyA9IHRoaXMub3B0aW9ucy50cmlnZ2VyLnNwbGl0KCcgJylcblxuICAgIGZvciAodmFyIGkgPSB0cmlnZ2Vycy5sZW5ndGg7IGktLTspIHtcbiAgICAgIHZhciB0cmlnZ2VyID0gdHJpZ2dlcnNbaV1cblxuICAgICAgaWYgKHRyaWdnZXIgPT0gJ2NsaWNrJykge1xuICAgICAgICB0aGlzLiRlbGVtZW50Lm9uKCdjbGljay4nICsgdGhpcy50eXBlLCB0aGlzLm9wdGlvbnMuc2VsZWN0b3IsICQucHJveHkodGhpcy50b2dnbGUsIHRoaXMpKVxuICAgICAgfSBlbHNlIGlmICh0cmlnZ2VyICE9ICdtYW51YWwnKSB7XG4gICAgICAgIHZhciBldmVudEluICA9IHRyaWdnZXIgPT0gJ2hvdmVyJyA/ICdtb3VzZWVudGVyJyA6ICdmb2N1c2luJ1xuICAgICAgICB2YXIgZXZlbnRPdXQgPSB0cmlnZ2VyID09ICdob3ZlcicgPyAnbW91c2VsZWF2ZScgOiAnZm9jdXNvdXQnXG5cbiAgICAgICAgdGhpcy4kZWxlbWVudC5vbihldmVudEluICArICcuJyArIHRoaXMudHlwZSwgdGhpcy5vcHRpb25zLnNlbGVjdG9yLCAkLnByb3h5KHRoaXMuZW50ZXIsIHRoaXMpKVxuICAgICAgICB0aGlzLiRlbGVtZW50Lm9uKGV2ZW50T3V0ICsgJy4nICsgdGhpcy50eXBlLCB0aGlzLm9wdGlvbnMuc2VsZWN0b3IsICQucHJveHkodGhpcy5sZWF2ZSwgdGhpcykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zLnNlbGVjdG9yID9cbiAgICAgICh0aGlzLl9vcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgeyB0cmlnZ2VyOiAnbWFudWFsJywgc2VsZWN0b3I6ICcnIH0pKSA6XG4gICAgICB0aGlzLmZpeFRpdGxlKClcbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmdldERlZmF1bHRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBUb29sdGlwLkRFRkFVTFRTXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5nZXRPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMuZ2V0RGVmYXVsdHMoKSwgdGhpcy4kZWxlbWVudC5kYXRhKCksIG9wdGlvbnMpXG5cbiAgICBpZiAob3B0aW9ucy5kZWxheSAmJiB0eXBlb2Ygb3B0aW9ucy5kZWxheSA9PSAnbnVtYmVyJykge1xuICAgICAgb3B0aW9ucy5kZWxheSA9IHtcbiAgICAgICAgc2hvdzogb3B0aW9ucy5kZWxheSxcbiAgICAgICAgaGlkZTogb3B0aW9ucy5kZWxheVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5nZXREZWxlZ2F0ZU9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9wdGlvbnMgID0ge31cbiAgICB2YXIgZGVmYXVsdHMgPSB0aGlzLmdldERlZmF1bHRzKClcblxuICAgIHRoaXMuX29wdGlvbnMgJiYgJC5lYWNoKHRoaXMuX29wdGlvbnMsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAoZGVmYXVsdHNba2V5XSAhPSB2YWx1ZSkgb3B0aW9uc1trZXldID0gdmFsdWVcbiAgICB9KVxuXG4gICAgcmV0dXJuIG9wdGlvbnNcbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmVudGVyID0gZnVuY3Rpb24gKG9iaikge1xuICAgIHZhciBzZWxmID0gb2JqIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvciA/XG4gICAgICBvYmogOiAkKG9iai5jdXJyZW50VGFyZ2V0KS5kYXRhKCdicy4nICsgdGhpcy50eXBlKVxuXG4gICAgaWYgKCFzZWxmKSB7XG4gICAgICBzZWxmID0gbmV3IHRoaXMuY29uc3RydWN0b3Iob2JqLmN1cnJlbnRUYXJnZXQsIHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpXG4gICAgICAkKG9iai5jdXJyZW50VGFyZ2V0KS5kYXRhKCdicy4nICsgdGhpcy50eXBlLCBzZWxmKVxuICAgIH1cblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiAkLkV2ZW50KSB7XG4gICAgICBzZWxmLmluU3RhdGVbb2JqLnR5cGUgPT0gJ2ZvY3VzaW4nID8gJ2ZvY3VzJyA6ICdob3ZlciddID0gdHJ1ZVxuICAgIH1cblxuICAgIGlmIChzZWxmLnRpcCgpLmhhc0NsYXNzKCdpbicpIHx8IHNlbGYuaG92ZXJTdGF0ZSA9PSAnaW4nKSB7XG4gICAgICBzZWxmLmhvdmVyU3RhdGUgPSAnaW4nXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjbGVhclRpbWVvdXQoc2VsZi50aW1lb3V0KVxuXG4gICAgc2VsZi5ob3ZlclN0YXRlID0gJ2luJ1xuXG4gICAgaWYgKCFzZWxmLm9wdGlvbnMuZGVsYXkgfHwgIXNlbGYub3B0aW9ucy5kZWxheS5zaG93KSByZXR1cm4gc2VsZi5zaG93KClcblxuICAgIHNlbGYudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHNlbGYuaG92ZXJTdGF0ZSA9PSAnaW4nKSBzZWxmLnNob3coKVxuICAgIH0sIHNlbGYub3B0aW9ucy5kZWxheS5zaG93KVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuaXNJblN0YXRlVHJ1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5pblN0YXRlKSB7XG4gICAgICBpZiAodGhpcy5pblN0YXRlW2tleV0pIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5sZWF2ZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICB2YXIgc2VsZiA9IG9iaiBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IgP1xuICAgICAgb2JqIDogJChvYmouY3VycmVudFRhcmdldCkuZGF0YSgnYnMuJyArIHRoaXMudHlwZSlcblxuICAgIGlmICghc2VsZikge1xuICAgICAgc2VsZiA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKG9iai5jdXJyZW50VGFyZ2V0LCB0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKVxuICAgICAgJChvYmouY3VycmVudFRhcmdldCkuZGF0YSgnYnMuJyArIHRoaXMudHlwZSwgc2VsZilcbiAgICB9XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgJC5FdmVudCkge1xuICAgICAgc2VsZi5pblN0YXRlW29iai50eXBlID09ICdmb2N1c291dCcgPyAnZm9jdXMnIDogJ2hvdmVyJ10gPSBmYWxzZVxuICAgIH1cblxuICAgIGlmIChzZWxmLmlzSW5TdGF0ZVRydWUoKSkgcmV0dXJuXG5cbiAgICBjbGVhclRpbWVvdXQoc2VsZi50aW1lb3V0KVxuXG4gICAgc2VsZi5ob3ZlclN0YXRlID0gJ291dCdcblxuICAgIGlmICghc2VsZi5vcHRpb25zLmRlbGF5IHx8ICFzZWxmLm9wdGlvbnMuZGVsYXkuaGlkZSkgcmV0dXJuIHNlbGYuaGlkZSgpXG5cbiAgICBzZWxmLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChzZWxmLmhvdmVyU3RhdGUgPT0gJ291dCcpIHNlbGYuaGlkZSgpXG4gICAgfSwgc2VsZi5vcHRpb25zLmRlbGF5LmhpZGUpXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlID0gJC5FdmVudCgnc2hvdy5icy4nICsgdGhpcy50eXBlKVxuXG4gICAgaWYgKHRoaXMuaGFzQ29udGVudCgpICYmIHRoaXMuZW5hYmxlZCkge1xuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpXG5cbiAgICAgIHZhciBpbkRvbSA9ICQuY29udGFpbnModGhpcy4kZWxlbWVudFswXS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdGhpcy4kZWxlbWVudFswXSlcbiAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpIHx8ICFpbkRvbSkgcmV0dXJuXG4gICAgICB2YXIgdGhhdCA9IHRoaXNcblxuICAgICAgdmFyICR0aXAgPSB0aGlzLnRpcCgpXG5cbiAgICAgIHZhciB0aXBJZCA9IHRoaXMuZ2V0VUlEKHRoaXMudHlwZSlcblxuICAgICAgdGhpcy5zZXRDb250ZW50KClcbiAgICAgICR0aXAuYXR0cignaWQnLCB0aXBJZClcbiAgICAgIHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1kZXNjcmliZWRieScsIHRpcElkKVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFuaW1hdGlvbikgJHRpcC5hZGRDbGFzcygnZmFkZScpXG5cbiAgICAgIHZhciBwbGFjZW1lbnQgPSB0eXBlb2YgdGhpcy5vcHRpb25zLnBsYWNlbWVudCA9PSAnZnVuY3Rpb24nID9cbiAgICAgICAgdGhpcy5vcHRpb25zLnBsYWNlbWVudC5jYWxsKHRoaXMsICR0aXBbMF0sIHRoaXMuJGVsZW1lbnRbMF0pIDpcbiAgICAgICAgdGhpcy5vcHRpb25zLnBsYWNlbWVudFxuXG4gICAgICB2YXIgYXV0b1Rva2VuID0gL1xccz9hdXRvP1xccz8vaVxuICAgICAgdmFyIGF1dG9QbGFjZSA9IGF1dG9Ub2tlbi50ZXN0KHBsYWNlbWVudClcbiAgICAgIGlmIChhdXRvUGxhY2UpIHBsYWNlbWVudCA9IHBsYWNlbWVudC5yZXBsYWNlKGF1dG9Ub2tlbiwgJycpIHx8ICd0b3AnXG5cbiAgICAgICR0aXBcbiAgICAgICAgLmRldGFjaCgpXG4gICAgICAgIC5jc3MoeyB0b3A6IDAsIGxlZnQ6IDAsIGRpc3BsYXk6ICdibG9jaycgfSlcbiAgICAgICAgLmFkZENsYXNzKHBsYWNlbWVudClcbiAgICAgICAgLmRhdGEoJ2JzLicgKyB0aGlzLnR5cGUsIHRoaXMpXG5cbiAgICAgIHRoaXMub3B0aW9ucy5jb250YWluZXIgPyAkdGlwLmFwcGVuZFRvKHRoaXMub3B0aW9ucy5jb250YWluZXIpIDogJHRpcC5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50KVxuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdpbnNlcnRlZC5icy4nICsgdGhpcy50eXBlKVxuXG4gICAgICB2YXIgcG9zICAgICAgICAgID0gdGhpcy5nZXRQb3NpdGlvbigpXG4gICAgICB2YXIgYWN0dWFsV2lkdGggID0gJHRpcFswXS5vZmZzZXRXaWR0aFxuICAgICAgdmFyIGFjdHVhbEhlaWdodCA9ICR0aXBbMF0ub2Zmc2V0SGVpZ2h0XG5cbiAgICAgIGlmIChhdXRvUGxhY2UpIHtcbiAgICAgICAgdmFyIG9yZ1BsYWNlbWVudCA9IHBsYWNlbWVudFxuICAgICAgICB2YXIgdmlld3BvcnREaW0gPSB0aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KVxuXG4gICAgICAgIHBsYWNlbWVudCA9IHBsYWNlbWVudCA9PSAnYm90dG9tJyAmJiBwb3MuYm90dG9tICsgYWN0dWFsSGVpZ2h0ID4gdmlld3BvcnREaW0uYm90dG9tID8gJ3RvcCcgICAgOlxuICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQgPT0gJ3RvcCcgICAgJiYgcG9zLnRvcCAgICAtIGFjdHVhbEhlaWdodCA8IHZpZXdwb3J0RGltLnRvcCAgICA/ICdib3R0b20nIDpcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50ID09ICdyaWdodCcgICYmIHBvcy5yaWdodCAgKyBhY3R1YWxXaWR0aCAgPiB2aWV3cG9ydERpbS53aWR0aCAgPyAnbGVmdCcgICA6XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudCA9PSAnbGVmdCcgICAmJiBwb3MubGVmdCAgIC0gYWN0dWFsV2lkdGggIDwgdmlld3BvcnREaW0ubGVmdCAgID8gJ3JpZ2h0JyAgOlxuICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnRcblxuICAgICAgICAkdGlwXG4gICAgICAgICAgLnJlbW92ZUNsYXNzKG9yZ1BsYWNlbWVudClcbiAgICAgICAgICAuYWRkQ2xhc3MocGxhY2VtZW50KVxuICAgICAgfVxuXG4gICAgICB2YXIgY2FsY3VsYXRlZE9mZnNldCA9IHRoaXMuZ2V0Q2FsY3VsYXRlZE9mZnNldChwbGFjZW1lbnQsIHBvcywgYWN0dWFsV2lkdGgsIGFjdHVhbEhlaWdodClcblxuICAgICAgdGhpcy5hcHBseVBsYWNlbWVudChjYWxjdWxhdGVkT2Zmc2V0LCBwbGFjZW1lbnQpXG5cbiAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByZXZIb3ZlclN0YXRlID0gdGhhdC5ob3ZlclN0YXRlXG4gICAgICAgIHRoYXQuJGVsZW1lbnQudHJpZ2dlcignc2hvd24uYnMuJyArIHRoYXQudHlwZSlcbiAgICAgICAgdGhhdC5ob3ZlclN0YXRlID0gbnVsbFxuXG4gICAgICAgIGlmIChwcmV2SG92ZXJTdGF0ZSA9PSAnb3V0JykgdGhhdC5sZWF2ZSh0aGF0KVxuICAgICAgfVxuXG4gICAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiR0aXAuaGFzQ2xhc3MoJ2ZhZGUnKSA/XG4gICAgICAgICR0aXBcbiAgICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCBjb21wbGV0ZSlcbiAgICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoVG9vbHRpcC5UUkFOU0lUSU9OX0RVUkFUSU9OKSA6XG4gICAgICAgIGNvbXBsZXRlKClcbiAgICB9XG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5hcHBseVBsYWNlbWVudCA9IGZ1bmN0aW9uIChvZmZzZXQsIHBsYWNlbWVudCkge1xuICAgIHZhciAkdGlwICAgPSB0aGlzLnRpcCgpXG4gICAgdmFyIHdpZHRoICA9ICR0aXBbMF0ub2Zmc2V0V2lkdGhcbiAgICB2YXIgaGVpZ2h0ID0gJHRpcFswXS5vZmZzZXRIZWlnaHRcblxuICAgIC8vIG1hbnVhbGx5IHJlYWQgbWFyZ2lucyBiZWNhdXNlIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBpbmNsdWRlcyBkaWZmZXJlbmNlXG4gICAgdmFyIG1hcmdpblRvcCA9IHBhcnNlSW50KCR0aXAuY3NzKCdtYXJnaW4tdG9wJyksIDEwKVxuICAgIHZhciBtYXJnaW5MZWZ0ID0gcGFyc2VJbnQoJHRpcC5jc3MoJ21hcmdpbi1sZWZ0JyksIDEwKVxuXG4gICAgLy8gd2UgbXVzdCBjaGVjayBmb3IgTmFOIGZvciBpZSA4LzlcbiAgICBpZiAoaXNOYU4obWFyZ2luVG9wKSkgIG1hcmdpblRvcCAgPSAwXG4gICAgaWYgKGlzTmFOKG1hcmdpbkxlZnQpKSBtYXJnaW5MZWZ0ID0gMFxuXG4gICAgb2Zmc2V0LnRvcCAgKz0gbWFyZ2luVG9wXG4gICAgb2Zmc2V0LmxlZnQgKz0gbWFyZ2luTGVmdFxuXG4gICAgLy8gJC5mbi5vZmZzZXQgZG9lc24ndCByb3VuZCBwaXhlbCB2YWx1ZXNcbiAgICAvLyBzbyB3ZSB1c2Ugc2V0T2Zmc2V0IGRpcmVjdGx5IHdpdGggb3VyIG93biBmdW5jdGlvbiBCLTBcbiAgICAkLm9mZnNldC5zZXRPZmZzZXQoJHRpcFswXSwgJC5leHRlbmQoe1xuICAgICAgdXNpbmc6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICAkdGlwLmNzcyh7XG4gICAgICAgICAgdG9wOiBNYXRoLnJvdW5kKHByb3BzLnRvcCksXG4gICAgICAgICAgbGVmdDogTWF0aC5yb3VuZChwcm9wcy5sZWZ0KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sIG9mZnNldCksIDApXG5cbiAgICAkdGlwLmFkZENsYXNzKCdpbicpXG5cbiAgICAvLyBjaGVjayB0byBzZWUgaWYgcGxhY2luZyB0aXAgaW4gbmV3IG9mZnNldCBjYXVzZWQgdGhlIHRpcCB0byByZXNpemUgaXRzZWxmXG4gICAgdmFyIGFjdHVhbFdpZHRoICA9ICR0aXBbMF0ub2Zmc2V0V2lkdGhcbiAgICB2YXIgYWN0dWFsSGVpZ2h0ID0gJHRpcFswXS5vZmZzZXRIZWlnaHRcblxuICAgIGlmIChwbGFjZW1lbnQgPT0gJ3RvcCcgJiYgYWN0dWFsSGVpZ2h0ICE9IGhlaWdodCkge1xuICAgICAgb2Zmc2V0LnRvcCA9IG9mZnNldC50b3AgKyBoZWlnaHQgLSBhY3R1YWxIZWlnaHRcbiAgICB9XG5cbiAgICB2YXIgZGVsdGEgPSB0aGlzLmdldFZpZXdwb3J0QWRqdXN0ZWREZWx0YShwbGFjZW1lbnQsIG9mZnNldCwgYWN0dWFsV2lkdGgsIGFjdHVhbEhlaWdodClcblxuICAgIGlmIChkZWx0YS5sZWZ0KSBvZmZzZXQubGVmdCArPSBkZWx0YS5sZWZ0XG4gICAgZWxzZSBvZmZzZXQudG9wICs9IGRlbHRhLnRvcFxuXG4gICAgdmFyIGlzVmVydGljYWwgICAgICAgICAgPSAvdG9wfGJvdHRvbS8udGVzdChwbGFjZW1lbnQpXG4gICAgdmFyIGFycm93RGVsdGEgICAgICAgICAgPSBpc1ZlcnRpY2FsID8gZGVsdGEubGVmdCAqIDIgLSB3aWR0aCArIGFjdHVhbFdpZHRoIDogZGVsdGEudG9wICogMiAtIGhlaWdodCArIGFjdHVhbEhlaWdodFxuICAgIHZhciBhcnJvd09mZnNldFBvc2l0aW9uID0gaXNWZXJ0aWNhbCA/ICdvZmZzZXRXaWR0aCcgOiAnb2Zmc2V0SGVpZ2h0J1xuXG4gICAgJHRpcC5vZmZzZXQob2Zmc2V0KVxuICAgIHRoaXMucmVwbGFjZUFycm93KGFycm93RGVsdGEsICR0aXBbMF1bYXJyb3dPZmZzZXRQb3NpdGlvbl0sIGlzVmVydGljYWwpXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5yZXBsYWNlQXJyb3cgPSBmdW5jdGlvbiAoZGVsdGEsIGRpbWVuc2lvbiwgaXNWZXJ0aWNhbCkge1xuICAgIHRoaXMuYXJyb3coKVxuICAgICAgLmNzcyhpc1ZlcnRpY2FsID8gJ2xlZnQnIDogJ3RvcCcsIDUwICogKDEgLSBkZWx0YSAvIGRpbWVuc2lvbikgKyAnJScpXG4gICAgICAuY3NzKGlzVmVydGljYWwgPyAndG9wJyA6ICdsZWZ0JywgJycpXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5zZXRDb250ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkdGlwICA9IHRoaXMudGlwKClcbiAgICB2YXIgdGl0bGUgPSB0aGlzLmdldFRpdGxlKClcblxuICAgICR0aXAuZmluZCgnLnRvb2x0aXAtaW5uZXInKVt0aGlzLm9wdGlvbnMuaHRtbCA/ICdodG1sJyA6ICd0ZXh0J10odGl0bGUpXG4gICAgJHRpcC5yZW1vdmVDbGFzcygnZmFkZSBpbiB0b3AgYm90dG9tIGxlZnQgcmlnaHQnKVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIHZhciAkdGlwID0gJCh0aGlzLiR0aXApXG4gICAgdmFyIGUgICAgPSAkLkV2ZW50KCdoaWRlLmJzLicgKyB0aGlzLnR5cGUpXG5cbiAgICBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgIGlmICh0aGF0LmhvdmVyU3RhdGUgIT0gJ2luJykgJHRpcC5kZXRhY2goKVxuICAgICAgdGhhdC4kZWxlbWVudFxuICAgICAgICAucmVtb3ZlQXR0cignYXJpYS1kZXNjcmliZWRieScpXG4gICAgICAgIC50cmlnZ2VyKCdoaWRkZW4uYnMuJyArIHRoYXQudHlwZSlcbiAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKClcbiAgICB9XG5cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSlcblxuICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm5cblxuICAgICR0aXAucmVtb3ZlQ2xhc3MoJ2luJylcblxuICAgICQuc3VwcG9ydC50cmFuc2l0aW9uICYmICR0aXAuaGFzQ2xhc3MoJ2ZhZGUnKSA/XG4gICAgICAkdGlwXG4gICAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIGNvbXBsZXRlKVxuICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoVG9vbHRpcC5UUkFOU0lUSU9OX0RVUkFUSU9OKSA6XG4gICAgICBjb21wbGV0ZSgpXG5cbiAgICB0aGlzLmhvdmVyU3RhdGUgPSBudWxsXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuZml4VGl0bGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICRlID0gdGhpcy4kZWxlbWVudFxuICAgIGlmICgkZS5hdHRyKCd0aXRsZScpIHx8IHR5cGVvZiAkZS5hdHRyKCdkYXRhLW9yaWdpbmFsLXRpdGxlJykgIT0gJ3N0cmluZycpIHtcbiAgICAgICRlLmF0dHIoJ2RhdGEtb3JpZ2luYWwtdGl0bGUnLCAkZS5hdHRyKCd0aXRsZScpIHx8ICcnKS5hdHRyKCd0aXRsZScsICcnKVxuICAgIH1cbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmhhc0NvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGl0bGUoKVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoJGVsZW1lbnQpIHtcbiAgICAkZWxlbWVudCAgID0gJGVsZW1lbnQgfHwgdGhpcy4kZWxlbWVudFxuXG4gICAgdmFyIGVsICAgICA9ICRlbGVtZW50WzBdXG4gICAgdmFyIGlzQm9keSA9IGVsLnRhZ05hbWUgPT0gJ0JPRFknXG5cbiAgICB2YXIgZWxSZWN0ICAgID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICBpZiAoZWxSZWN0LndpZHRoID09IG51bGwpIHtcbiAgICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgYXJlIG1pc3NpbmcgaW4gSUU4LCBzbyBjb21wdXRlIHRoZW0gbWFudWFsbHk7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzE0MDkzXG4gICAgICBlbFJlY3QgPSAkLmV4dGVuZCh7fSwgZWxSZWN0LCB7IHdpZHRoOiBlbFJlY3QucmlnaHQgLSBlbFJlY3QubGVmdCwgaGVpZ2h0OiBlbFJlY3QuYm90dG9tIC0gZWxSZWN0LnRvcCB9KVxuICAgIH1cbiAgICB2YXIgZWxPZmZzZXQgID0gaXNCb2R5ID8geyB0b3A6IDAsIGxlZnQ6IDAgfSA6ICRlbGVtZW50Lm9mZnNldCgpXG4gICAgdmFyIHNjcm9sbCAgICA9IHsgc2Nyb2xsOiBpc0JvZHkgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wIDogJGVsZW1lbnQuc2Nyb2xsVG9wKCkgfVxuICAgIHZhciBvdXRlckRpbXMgPSBpc0JvZHkgPyB7IHdpZHRoOiAkKHdpbmRvdykud2lkdGgoKSwgaGVpZ2h0OiAkKHdpbmRvdykuaGVpZ2h0KCkgfSA6IG51bGxcblxuICAgIHJldHVybiAkLmV4dGVuZCh7fSwgZWxSZWN0LCBzY3JvbGwsIG91dGVyRGltcywgZWxPZmZzZXQpXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5nZXRDYWxjdWxhdGVkT2Zmc2V0ID0gZnVuY3Rpb24gKHBsYWNlbWVudCwgcG9zLCBhY3R1YWxXaWR0aCwgYWN0dWFsSGVpZ2h0KSB7XG4gICAgcmV0dXJuIHBsYWNlbWVudCA9PSAnYm90dG9tJyA/IHsgdG9wOiBwb3MudG9wICsgcG9zLmhlaWdodCwgICBsZWZ0OiBwb3MubGVmdCArIHBvcy53aWR0aCAvIDIgLSBhY3R1YWxXaWR0aCAvIDIgfSA6XG4gICAgICAgICAgIHBsYWNlbWVudCA9PSAndG9wJyAgICA/IHsgdG9wOiBwb3MudG9wIC0gYWN0dWFsSGVpZ2h0LCBsZWZ0OiBwb3MubGVmdCArIHBvcy53aWR0aCAvIDIgLSBhY3R1YWxXaWR0aCAvIDIgfSA6XG4gICAgICAgICAgIHBsYWNlbWVudCA9PSAnbGVmdCcgICA/IHsgdG9wOiBwb3MudG9wICsgcG9zLmhlaWdodCAvIDIgLSBhY3R1YWxIZWlnaHQgLyAyLCBsZWZ0OiBwb3MubGVmdCAtIGFjdHVhbFdpZHRoIH0gOlxuICAgICAgICAvKiBwbGFjZW1lbnQgPT0gJ3JpZ2h0JyAqLyB7IHRvcDogcG9zLnRvcCArIHBvcy5oZWlnaHQgLyAyIC0gYWN0dWFsSGVpZ2h0IC8gMiwgbGVmdDogcG9zLmxlZnQgKyBwb3Mud2lkdGggfVxuXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGEgPSBmdW5jdGlvbiAocGxhY2VtZW50LCBwb3MsIGFjdHVhbFdpZHRoLCBhY3R1YWxIZWlnaHQpIHtcbiAgICB2YXIgZGVsdGEgPSB7IHRvcDogMCwgbGVmdDogMCB9XG4gICAgaWYgKCF0aGlzLiR2aWV3cG9ydCkgcmV0dXJuIGRlbHRhXG5cbiAgICB2YXIgdmlld3BvcnRQYWRkaW5nID0gdGhpcy5vcHRpb25zLnZpZXdwb3J0ICYmIHRoaXMub3B0aW9ucy52aWV3cG9ydC5wYWRkaW5nIHx8IDBcbiAgICB2YXIgdmlld3BvcnREaW1lbnNpb25zID0gdGhpcy5nZXRQb3NpdGlvbih0aGlzLiR2aWV3cG9ydClcblxuICAgIGlmICgvcmlnaHR8bGVmdC8udGVzdChwbGFjZW1lbnQpKSB7XG4gICAgICB2YXIgdG9wRWRnZU9mZnNldCAgICA9IHBvcy50b3AgLSB2aWV3cG9ydFBhZGRpbmcgLSB2aWV3cG9ydERpbWVuc2lvbnMuc2Nyb2xsXG4gICAgICB2YXIgYm90dG9tRWRnZU9mZnNldCA9IHBvcy50b3AgKyB2aWV3cG9ydFBhZGRpbmcgLSB2aWV3cG9ydERpbWVuc2lvbnMuc2Nyb2xsICsgYWN0dWFsSGVpZ2h0XG4gICAgICBpZiAodG9wRWRnZU9mZnNldCA8IHZpZXdwb3J0RGltZW5zaW9ucy50b3ApIHsgLy8gdG9wIG92ZXJmbG93XG4gICAgICAgIGRlbHRhLnRvcCA9IHZpZXdwb3J0RGltZW5zaW9ucy50b3AgLSB0b3BFZGdlT2Zmc2V0XG4gICAgICB9IGVsc2UgaWYgKGJvdHRvbUVkZ2VPZmZzZXQgPiB2aWV3cG9ydERpbWVuc2lvbnMudG9wICsgdmlld3BvcnREaW1lbnNpb25zLmhlaWdodCkgeyAvLyBib3R0b20gb3ZlcmZsb3dcbiAgICAgICAgZGVsdGEudG9wID0gdmlld3BvcnREaW1lbnNpb25zLnRvcCArIHZpZXdwb3J0RGltZW5zaW9ucy5oZWlnaHQgLSBib3R0b21FZGdlT2Zmc2V0XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBsZWZ0RWRnZU9mZnNldCAgPSBwb3MubGVmdCAtIHZpZXdwb3J0UGFkZGluZ1xuICAgICAgdmFyIHJpZ2h0RWRnZU9mZnNldCA9IHBvcy5sZWZ0ICsgdmlld3BvcnRQYWRkaW5nICsgYWN0dWFsV2lkdGhcbiAgICAgIGlmIChsZWZ0RWRnZU9mZnNldCA8IHZpZXdwb3J0RGltZW5zaW9ucy5sZWZ0KSB7IC8vIGxlZnQgb3ZlcmZsb3dcbiAgICAgICAgZGVsdGEubGVmdCA9IHZpZXdwb3J0RGltZW5zaW9ucy5sZWZ0IC0gbGVmdEVkZ2VPZmZzZXRcbiAgICAgIH0gZWxzZSBpZiAocmlnaHRFZGdlT2Zmc2V0ID4gdmlld3BvcnREaW1lbnNpb25zLnJpZ2h0KSB7IC8vIHJpZ2h0IG92ZXJmbG93XG4gICAgICAgIGRlbHRhLmxlZnQgPSB2aWV3cG9ydERpbWVuc2lvbnMubGVmdCArIHZpZXdwb3J0RGltZW5zaW9ucy53aWR0aCAtIHJpZ2h0RWRnZU9mZnNldFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWx0YVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0VGl0bGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRpdGxlXG4gICAgdmFyICRlID0gdGhpcy4kZWxlbWVudFxuICAgIHZhciBvICA9IHRoaXMub3B0aW9uc1xuXG4gICAgdGl0bGUgPSAkZS5hdHRyKCdkYXRhLW9yaWdpbmFsLXRpdGxlJylcbiAgICAgIHx8ICh0eXBlb2Ygby50aXRsZSA9PSAnZnVuY3Rpb24nID8gby50aXRsZS5jYWxsKCRlWzBdKSA6ICBvLnRpdGxlKVxuXG4gICAgcmV0dXJuIHRpdGxlXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5nZXRVSUQgPSBmdW5jdGlvbiAocHJlZml4KSB7XG4gICAgZG8gcHJlZml4ICs9IH5+KE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKVxuICAgIHdoaWxlIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmVmaXgpKVxuICAgIHJldHVybiBwcmVmaXhcbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLnRpcCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuJHRpcCkge1xuICAgICAgdGhpcy4kdGlwID0gJCh0aGlzLm9wdGlvbnMudGVtcGxhdGUpXG4gICAgICBpZiAodGhpcy4kdGlwLmxlbmd0aCAhPSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLnR5cGUgKyAnIGB0ZW1wbGF0ZWAgb3B0aW9uIG11c3QgY29uc2lzdCBvZiBleGFjdGx5IDEgdG9wLWxldmVsIGVsZW1lbnQhJylcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuJHRpcFxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuYXJyb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLiRhcnJvdyA9IHRoaXMuJGFycm93IHx8IHRoaXMudGlwKCkuZmluZCgnLnRvb2x0aXAtYXJyb3cnKSlcbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS50b2dnbGVFbmFibGVkID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW5hYmxlZCA9ICF0aGlzLmVuYWJsZWRcbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgaWYgKGUpIHtcbiAgICAgIHNlbGYgPSAkKGUuY3VycmVudFRhcmdldCkuZGF0YSgnYnMuJyArIHRoaXMudHlwZSlcbiAgICAgIGlmICghc2VsZikge1xuICAgICAgICBzZWxmID0gbmV3IHRoaXMuY29uc3RydWN0b3IoZS5jdXJyZW50VGFyZ2V0LCB0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKVxuICAgICAgICAkKGUuY3VycmVudFRhcmdldCkuZGF0YSgnYnMuJyArIHRoaXMudHlwZSwgc2VsZilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZSkge1xuICAgICAgc2VsZi5pblN0YXRlLmNsaWNrID0gIXNlbGYuaW5TdGF0ZS5jbGlja1xuICAgICAgaWYgKHNlbGYuaXNJblN0YXRlVHJ1ZSgpKSBzZWxmLmVudGVyKHNlbGYpXG4gICAgICBlbHNlIHNlbGYubGVhdmUoc2VsZilcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi50aXAoKS5oYXNDbGFzcygnaW4nKSA/IHNlbGYubGVhdmUoc2VsZikgOiBzZWxmLmVudGVyKHNlbGYpXG4gICAgfVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgIHRoaXMuaGlkZShmdW5jdGlvbiAoKSB7XG4gICAgICB0aGF0LiRlbGVtZW50Lm9mZignLicgKyB0aGF0LnR5cGUpLnJlbW92ZURhdGEoJ2JzLicgKyB0aGF0LnR5cGUpXG4gICAgICBpZiAodGhhdC4kdGlwKSB7XG4gICAgICAgIHRoYXQuJHRpcC5kZXRhY2goKVxuICAgICAgfVxuICAgICAgdGhhdC4kdGlwID0gbnVsbFxuICAgICAgdGhhdC4kYXJyb3cgPSBudWxsXG4gICAgICB0aGF0LiR2aWV3cG9ydCA9IG51bGxcbiAgICB9KVxuICB9XG5cblxuICAvLyBUT09MVElQIFBMVUdJTiBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHRoaXMgICA9ICQodGhpcylcbiAgICAgIHZhciBkYXRhICAgID0gJHRoaXMuZGF0YSgnYnMudG9vbHRpcCcpXG4gICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uXG5cbiAgICAgIGlmICghZGF0YSAmJiAvZGVzdHJveXxoaWRlLy50ZXN0KG9wdGlvbikpIHJldHVyblxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy50b29sdGlwJywgKGRhdGEgPSBuZXcgVG9vbHRpcCh0aGlzLCBvcHRpb25zKSkpXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKClcbiAgICB9KVxuICB9XG5cbiAgdmFyIG9sZCA9ICQuZm4udG9vbHRpcFxuXG4gICQuZm4udG9vbHRpcCAgICAgICAgICAgICA9IFBsdWdpblxuICAkLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IgPSBUb29sdGlwXG5cblxuICAvLyBUT09MVElQIE5PIENPTkZMSUNUXG4gIC8vID09PT09PT09PT09PT09PT09PT1cblxuICAkLmZuLnRvb2x0aXAubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuLnRvb2x0aXAgPSBvbGRcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbn0oalF1ZXJ5KTtcbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQm9vdHN0cmFwOiBwb3BvdmVyLmpzIHYzLjMuNVxuICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vamF2YXNjcmlwdC8jcG9wb3ZlcnNcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cblxuK2Z1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBQT1BPVkVSIFBVQkxJQyBDTEFTUyBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB2YXIgUG9wb3ZlciA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy5pbml0KCdwb3BvdmVyJywgZWxlbWVudCwgb3B0aW9ucylcbiAgfVxuXG4gIGlmICghJC5mbi50b29sdGlwKSB0aHJvdyBuZXcgRXJyb3IoJ1BvcG92ZXIgcmVxdWlyZXMgdG9vbHRpcC5qcycpXG5cbiAgUG9wb3Zlci5WRVJTSU9OICA9ICczLjMuNSdcblxuICBQb3BvdmVyLkRFRkFVTFRTID0gJC5leHRlbmQoe30sICQuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5ERUZBVUxUUywge1xuICAgIHBsYWNlbWVudDogJ3JpZ2h0JyxcbiAgICB0cmlnZ2VyOiAnY2xpY2snLFxuICAgIGNvbnRlbnQ6ICcnLFxuICAgIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPjxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PjxoMyBjbGFzcz1cInBvcG92ZXItdGl0bGVcIj48L2gzPjxkaXYgY2xhc3M9XCJwb3BvdmVyLWNvbnRlbnRcIj48L2Rpdj48L2Rpdj4nXG4gIH0pXG5cblxuICAvLyBOT1RFOiBQT1BPVkVSIEVYVEVORFMgdG9vbHRpcC5qc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIFBvcG92ZXIucHJvdG90eXBlID0gJC5leHRlbmQoe30sICQuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5wcm90b3R5cGUpXG5cbiAgUG9wb3Zlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb3BvdmVyXG5cbiAgUG9wb3Zlci5wcm90b3R5cGUuZ2V0RGVmYXVsdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFBvcG92ZXIuREVGQVVMVFNcbiAgfVxuXG4gIFBvcG92ZXIucHJvdG90eXBlLnNldENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICR0aXAgICAgPSB0aGlzLnRpcCgpXG4gICAgdmFyIHRpdGxlICAgPSB0aGlzLmdldFRpdGxlKClcbiAgICB2YXIgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpXG5cbiAgICAkdGlwLmZpbmQoJy5wb3BvdmVyLXRpdGxlJylbdGhpcy5vcHRpb25zLmh0bWwgPyAnaHRtbCcgOiAndGV4dCddKHRpdGxlKVxuICAgICR0aXAuZmluZCgnLnBvcG92ZXItY29udGVudCcpLmNoaWxkcmVuKCkuZGV0YWNoKCkuZW5kKClbIC8vIHdlIHVzZSBhcHBlbmQgZm9yIGh0bWwgb2JqZWN0cyB0byBtYWludGFpbiBqcyBldmVudHNcbiAgICAgIHRoaXMub3B0aW9ucy5odG1sID8gKHR5cGVvZiBjb250ZW50ID09ICdzdHJpbmcnID8gJ2h0bWwnIDogJ2FwcGVuZCcpIDogJ3RleHQnXG4gICAgXShjb250ZW50KVxuXG4gICAgJHRpcC5yZW1vdmVDbGFzcygnZmFkZSB0b3AgYm90dG9tIGxlZnQgcmlnaHQgaW4nKVxuXG4gICAgLy8gSUU4IGRvZXNuJ3QgYWNjZXB0IGhpZGluZyB2aWEgdGhlIGA6ZW1wdHlgIHBzZXVkbyBzZWxlY3Rvciwgd2UgaGF2ZSB0byBkb1xuICAgIC8vIHRoaXMgbWFudWFsbHkgYnkgY2hlY2tpbmcgdGhlIGNvbnRlbnRzLlxuICAgIGlmICghJHRpcC5maW5kKCcucG9wb3Zlci10aXRsZScpLmh0bWwoKSkgJHRpcC5maW5kKCcucG9wb3Zlci10aXRsZScpLmhpZGUoKVxuICB9XG5cbiAgUG9wb3Zlci5wcm90b3R5cGUuaGFzQ29udGVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUaXRsZSgpIHx8IHRoaXMuZ2V0Q29udGVudCgpXG4gIH1cblxuICBQb3BvdmVyLnByb3RvdHlwZS5nZXRDb250ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkZSA9IHRoaXMuJGVsZW1lbnRcbiAgICB2YXIgbyAgPSB0aGlzLm9wdGlvbnNcblxuICAgIHJldHVybiAkZS5hdHRyKCdkYXRhLWNvbnRlbnQnKVxuICAgICAgfHwgKHR5cGVvZiBvLmNvbnRlbnQgPT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAgICAgICBvLmNvbnRlbnQuY2FsbCgkZVswXSkgOlxuICAgICAgICAgICAgby5jb250ZW50KVxuICB9XG5cbiAgUG9wb3Zlci5wcm90b3R5cGUuYXJyb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLiRhcnJvdyA9IHRoaXMuJGFycm93IHx8IHRoaXMudGlwKCkuZmluZCgnLmFycm93JykpXG4gIH1cblxuXG4gIC8vIFBPUE9WRVIgUExVR0lOIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGZ1bmN0aW9uIFBsdWdpbihvcHRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKVxuICAgICAgdmFyIGRhdGEgICAgPSAkdGhpcy5kYXRhKCdicy5wb3BvdmVyJylcbiAgICAgIHZhciBvcHRpb25zID0gdHlwZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBvcHRpb25cblxuICAgICAgaWYgKCFkYXRhICYmIC9kZXN0cm95fGhpZGUvLnRlc3Qob3B0aW9uKSkgcmV0dXJuXG4gICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2JzLnBvcG92ZXInLCAoZGF0YSA9IG5ldyBQb3BvdmVyKHRoaXMsIG9wdGlvbnMpKSlcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0oKVxuICAgIH0pXG4gIH1cblxuICB2YXIgb2xkID0gJC5mbi5wb3BvdmVyXG5cbiAgJC5mbi5wb3BvdmVyICAgICAgICAgICAgID0gUGx1Z2luXG4gICQuZm4ucG9wb3Zlci5Db25zdHJ1Y3RvciA9IFBvcG92ZXJcblxuXG4gIC8vIFBPUE9WRVIgTk8gQ09ORkxJQ1RcbiAgLy8gPT09PT09PT09PT09PT09PT09PVxuXG4gICQuZm4ucG9wb3Zlci5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm4ucG9wb3ZlciA9IG9sZFxuICAgIHJldHVybiB0aGlzXG4gIH1cblxufShqUXVlcnkpO1xuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBCb290c3RyYXA6IHNjcm9sbHNweS5qcyB2My4zLjVcbiAqIGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2phdmFzY3JpcHQvI3Njcm9sbHNweVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuXG4rZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIFNDUk9MTFNQWSBDTEFTUyBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gU2Nyb2xsU3B5KGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLiRib2R5ICAgICAgICAgID0gJChkb2N1bWVudC5ib2R5KVxuICAgIHRoaXMuJHNjcm9sbEVsZW1lbnQgPSAkKGVsZW1lbnQpLmlzKGRvY3VtZW50LmJvZHkpID8gJCh3aW5kb3cpIDogJChlbGVtZW50KVxuICAgIHRoaXMub3B0aW9ucyAgICAgICAgPSAkLmV4dGVuZCh7fSwgU2Nyb2xsU3B5LkRFRkFVTFRTLCBvcHRpb25zKVxuICAgIHRoaXMuc2VsZWN0b3IgICAgICAgPSAodGhpcy5vcHRpb25zLnRhcmdldCB8fCAnJykgKyAnIC5uYXYgbGkgPiBhJ1xuICAgIHRoaXMub2Zmc2V0cyAgICAgICAgPSBbXVxuICAgIHRoaXMudGFyZ2V0cyAgICAgICAgPSBbXVxuICAgIHRoaXMuYWN0aXZlVGFyZ2V0ICAgPSBudWxsXG4gICAgdGhpcy5zY3JvbGxIZWlnaHQgICA9IDBcblxuICAgIHRoaXMuJHNjcm9sbEVsZW1lbnQub24oJ3Njcm9sbC5icy5zY3JvbGxzcHknLCAkLnByb3h5KHRoaXMucHJvY2VzcywgdGhpcykpXG4gICAgdGhpcy5yZWZyZXNoKClcbiAgICB0aGlzLnByb2Nlc3MoKVxuICB9XG5cbiAgU2Nyb2xsU3B5LlZFUlNJT04gID0gJzMuMy41J1xuXG4gIFNjcm9sbFNweS5ERUZBVUxUUyA9IHtcbiAgICBvZmZzZXQ6IDEwXG4gIH1cblxuICBTY3JvbGxTcHkucHJvdG90eXBlLmdldFNjcm9sbEhlaWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy4kc2Nyb2xsRWxlbWVudFswXS5zY3JvbGxIZWlnaHQgfHwgTWF0aC5tYXgodGhpcy4kYm9keVswXS5zY3JvbGxIZWlnaHQsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpXG4gIH1cblxuICBTY3JvbGxTcHkucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRoYXQgICAgICAgICAgPSB0aGlzXG4gICAgdmFyIG9mZnNldE1ldGhvZCAgPSAnb2Zmc2V0J1xuICAgIHZhciBvZmZzZXRCYXNlICAgID0gMFxuXG4gICAgdGhpcy5vZmZzZXRzICAgICAgPSBbXVxuICAgIHRoaXMudGFyZ2V0cyAgICAgID0gW11cbiAgICB0aGlzLnNjcm9sbEhlaWdodCA9IHRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KClcblxuICAgIGlmICghJC5pc1dpbmRvdyh0aGlzLiRzY3JvbGxFbGVtZW50WzBdKSkge1xuICAgICAgb2Zmc2V0TWV0aG9kID0gJ3Bvc2l0aW9uJ1xuICAgICAgb2Zmc2V0QmFzZSAgID0gdGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKVxuICAgIH1cblxuICAgIHRoaXMuJGJvZHlcbiAgICAgIC5maW5kKHRoaXMuc2VsZWN0b3IpXG4gICAgICAubWFwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICRlbCAgID0gJCh0aGlzKVxuICAgICAgICB2YXIgaHJlZiAgPSAkZWwuZGF0YSgndGFyZ2V0JykgfHwgJGVsLmF0dHIoJ2hyZWYnKVxuICAgICAgICB2YXIgJGhyZWYgPSAvXiMuLy50ZXN0KGhyZWYpICYmICQoaHJlZilcblxuICAgICAgICByZXR1cm4gKCRocmVmXG4gICAgICAgICAgJiYgJGhyZWYubGVuZ3RoXG4gICAgICAgICAgJiYgJGhyZWYuaXMoJzp2aXNpYmxlJylcbiAgICAgICAgICAmJiBbWyRocmVmW29mZnNldE1ldGhvZF0oKS50b3AgKyBvZmZzZXRCYXNlLCBocmVmXV0pIHx8IG51bGxcbiAgICAgIH0pXG4gICAgICAuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYVswXSAtIGJbMF0gfSlcbiAgICAgIC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhhdC5vZmZzZXRzLnB1c2godGhpc1swXSlcbiAgICAgICAgdGhhdC50YXJnZXRzLnB1c2godGhpc1sxXSlcbiAgICAgIH0pXG4gIH1cblxuICBTY3JvbGxTcHkucHJvdG90eXBlLnByb2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNjcm9sbFRvcCAgICA9IHRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkgKyB0aGlzLm9wdGlvbnMub2Zmc2V0XG4gICAgdmFyIHNjcm9sbEhlaWdodCA9IHRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KClcbiAgICB2YXIgbWF4U2Nyb2xsICAgID0gdGhpcy5vcHRpb25zLm9mZnNldCArIHNjcm9sbEhlaWdodCAtIHRoaXMuJHNjcm9sbEVsZW1lbnQuaGVpZ2h0KClcbiAgICB2YXIgb2Zmc2V0cyAgICAgID0gdGhpcy5vZmZzZXRzXG4gICAgdmFyIHRhcmdldHMgICAgICA9IHRoaXMudGFyZ2V0c1xuICAgIHZhciBhY3RpdmVUYXJnZXQgPSB0aGlzLmFjdGl2ZVRhcmdldFxuICAgIHZhciBpXG5cbiAgICBpZiAodGhpcy5zY3JvbGxIZWlnaHQgIT0gc2Nyb2xsSGVpZ2h0KSB7XG4gICAgICB0aGlzLnJlZnJlc2goKVxuICAgIH1cblxuICAgIGlmIChzY3JvbGxUb3AgPj0gbWF4U2Nyb2xsKSB7XG4gICAgICByZXR1cm4gYWN0aXZlVGFyZ2V0ICE9IChpID0gdGFyZ2V0c1t0YXJnZXRzLmxlbmd0aCAtIDFdKSAmJiB0aGlzLmFjdGl2YXRlKGkpXG4gICAgfVxuXG4gICAgaWYgKGFjdGl2ZVRhcmdldCAmJiBzY3JvbGxUb3AgPCBvZmZzZXRzWzBdKSB7XG4gICAgICB0aGlzLmFjdGl2ZVRhcmdldCA9IG51bGxcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyKClcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBvZmZzZXRzLmxlbmd0aDsgaS0tOykge1xuICAgICAgYWN0aXZlVGFyZ2V0ICE9IHRhcmdldHNbaV1cbiAgICAgICAgJiYgc2Nyb2xsVG9wID49IG9mZnNldHNbaV1cbiAgICAgICAgJiYgKG9mZnNldHNbaSArIDFdID09PSB1bmRlZmluZWQgfHwgc2Nyb2xsVG9wIDwgb2Zmc2V0c1tpICsgMV0pXG4gICAgICAgICYmIHRoaXMuYWN0aXZhdGUodGFyZ2V0c1tpXSlcbiAgICB9XG4gIH1cblxuICBTY3JvbGxTcHkucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIHRoaXMuYWN0aXZlVGFyZ2V0ID0gdGFyZ2V0XG5cbiAgICB0aGlzLmNsZWFyKClcblxuICAgIHZhciBzZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgK1xuICAgICAgJ1tkYXRhLXRhcmdldD1cIicgKyB0YXJnZXQgKyAnXCJdLCcgK1xuICAgICAgdGhpcy5zZWxlY3RvciArICdbaHJlZj1cIicgKyB0YXJnZXQgKyAnXCJdJ1xuXG4gICAgdmFyIGFjdGl2ZSA9ICQoc2VsZWN0b3IpXG4gICAgICAucGFyZW50cygnbGknKVxuICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKVxuXG4gICAgaWYgKGFjdGl2ZS5wYXJlbnQoJy5kcm9wZG93bi1tZW51JykubGVuZ3RoKSB7XG4gICAgICBhY3RpdmUgPSBhY3RpdmVcbiAgICAgICAgLmNsb3Nlc3QoJ2xpLmRyb3Bkb3duJylcbiAgICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKVxuICAgIH1cblxuICAgIGFjdGl2ZS50cmlnZ2VyKCdhY3RpdmF0ZS5icy5zY3JvbGxzcHknKVxuICB9XG5cbiAgU2Nyb2xsU3B5LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAkKHRoaXMuc2VsZWN0b3IpXG4gICAgICAucGFyZW50c1VudGlsKHRoaXMub3B0aW9ucy50YXJnZXQsICcuYWN0aXZlJylcbiAgICAgIC5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgfVxuXG5cbiAgLy8gU0NST0xMU1BZIFBMVUdJTiBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGZ1bmN0aW9uIFBsdWdpbihvcHRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKVxuICAgICAgdmFyIGRhdGEgICAgPSAkdGhpcy5kYXRhKCdicy5zY3JvbGxzcHknKVxuICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvblxuXG4gICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2JzLnNjcm9sbHNweScsIChkYXRhID0gbmV3IFNjcm9sbFNweSh0aGlzLCBvcHRpb25zKSkpXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKClcbiAgICB9KVxuICB9XG5cbiAgdmFyIG9sZCA9ICQuZm4uc2Nyb2xsc3B5XG5cbiAgJC5mbi5zY3JvbGxzcHkgICAgICAgICAgICAgPSBQbHVnaW5cbiAgJC5mbi5zY3JvbGxzcHkuQ29uc3RydWN0b3IgPSBTY3JvbGxTcHlcblxuXG4gIC8vIFNDUk9MTFNQWSBOTyBDT05GTElDVFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT1cblxuICAkLmZuLnNjcm9sbHNweS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm4uc2Nyb2xsc3B5ID0gb2xkXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG5cbiAgLy8gU0NST0xMU1BZIERBVEEtQVBJXG4gIC8vID09PT09PT09PT09PT09PT09PVxuXG4gICQod2luZG93KS5vbignbG9hZC5icy5zY3JvbGxzcHkuZGF0YS1hcGknLCBmdW5jdGlvbiAoKSB7XG4gICAgJCgnW2RhdGEtc3B5PVwic2Nyb2xsXCJdJykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHNweSA9ICQodGhpcylcbiAgICAgIFBsdWdpbi5jYWxsKCRzcHksICRzcHkuZGF0YSgpKVxuICAgIH0pXG4gIH0pXG5cbn0oalF1ZXJ5KTtcbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQm9vdHN0cmFwOiB0YWIuanMgdjMuMy41XG4gKiBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2NyaXB0LyN0YWJzXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLlxuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5cbitmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gVEFCIENMQVNTIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT1cblxuICB2YXIgVGFiID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAvLyBqc2NzOmRpc2FibGUgcmVxdWlyZURvbGxhckJlZm9yZWpRdWVyeUFzc2lnbm1lbnRcbiAgICB0aGlzLmVsZW1lbnQgPSAkKGVsZW1lbnQpXG4gICAgLy8ganNjczplbmFibGUgcmVxdWlyZURvbGxhckJlZm9yZWpRdWVyeUFzc2lnbm1lbnRcbiAgfVxuXG4gIFRhYi5WRVJTSU9OID0gJzMuMy41J1xuXG4gIFRhYi5UUkFOU0lUSU9OX0RVUkFUSU9OID0gMTUwXG5cbiAgVGFiLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkdGhpcyAgICA9IHRoaXMuZWxlbWVudFxuICAgIHZhciAkdWwgICAgICA9ICR0aGlzLmNsb3Nlc3QoJ3VsOm5vdCguZHJvcGRvd24tbWVudSknKVxuICAgIHZhciBzZWxlY3RvciA9ICR0aGlzLmRhdGEoJ3RhcmdldCcpXG5cbiAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICBzZWxlY3RvciA9ICR0aGlzLmF0dHIoJ2hyZWYnKVxuICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvciAmJiBzZWxlY3Rvci5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLCAnJykgLy8gc3RyaXAgZm9yIGllN1xuICAgIH1cblxuICAgIGlmICgkdGhpcy5wYXJlbnQoJ2xpJykuaGFzQ2xhc3MoJ2FjdGl2ZScpKSByZXR1cm5cblxuICAgIHZhciAkcHJldmlvdXMgPSAkdWwuZmluZCgnLmFjdGl2ZTpsYXN0IGEnKVxuICAgIHZhciBoaWRlRXZlbnQgPSAkLkV2ZW50KCdoaWRlLmJzLnRhYicsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6ICR0aGlzWzBdXG4gICAgfSlcbiAgICB2YXIgc2hvd0V2ZW50ID0gJC5FdmVudCgnc2hvdy5icy50YWInLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiAkcHJldmlvdXNbMF1cbiAgICB9KVxuXG4gICAgJHByZXZpb3VzLnRyaWdnZXIoaGlkZUV2ZW50KVxuICAgICR0aGlzLnRyaWdnZXIoc2hvd0V2ZW50KVxuXG4gICAgaWYgKHNob3dFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSB8fCBoaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgdmFyICR0YXJnZXQgPSAkKHNlbGVjdG9yKVxuXG4gICAgdGhpcy5hY3RpdmF0ZSgkdGhpcy5jbG9zZXN0KCdsaScpLCAkdWwpXG4gICAgdGhpcy5hY3RpdmF0ZSgkdGFyZ2V0LCAkdGFyZ2V0LnBhcmVudCgpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAkcHJldmlvdXMudHJpZ2dlcih7XG4gICAgICAgIHR5cGU6ICdoaWRkZW4uYnMudGFiJyxcbiAgICAgICAgcmVsYXRlZFRhcmdldDogJHRoaXNbMF1cbiAgICAgIH0pXG4gICAgICAkdGhpcy50cmlnZ2VyKHtcbiAgICAgICAgdHlwZTogJ3Nob3duLmJzLnRhYicsXG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6ICRwcmV2aW91c1swXVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgVGFiLnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gICAgdmFyICRhY3RpdmUgICAgPSBjb250YWluZXIuZmluZCgnPiAuYWN0aXZlJylcbiAgICB2YXIgdHJhbnNpdGlvbiA9IGNhbGxiYWNrXG4gICAgICAmJiAkLnN1cHBvcnQudHJhbnNpdGlvblxuICAgICAgJiYgKCRhY3RpdmUubGVuZ3RoICYmICRhY3RpdmUuaGFzQ2xhc3MoJ2ZhZGUnKSB8fCAhIWNvbnRhaW5lci5maW5kKCc+IC5mYWRlJykubGVuZ3RoKVxuXG4gICAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICRhY3RpdmVcbiAgICAgICAgLnJlbW92ZUNsYXNzKCdhY3RpdmUnKVxuICAgICAgICAuZmluZCgnPiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUnKVxuICAgICAgICAgIC5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICAgICAgLmVuZCgpXG4gICAgICAgIC5maW5kKCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nKVxuICAgICAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgZmFsc2UpXG5cbiAgICAgIGVsZW1lbnRcbiAgICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKVxuICAgICAgICAuZmluZCgnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJylcbiAgICAgICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIHRydWUpXG5cbiAgICAgIGlmICh0cmFuc2l0aW9uKSB7XG4gICAgICAgIGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGggLy8gcmVmbG93IGZvciB0cmFuc2l0aW9uXG4gICAgICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ2luJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2ZhZGUnKVxuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudC5wYXJlbnQoJy5kcm9wZG93bi1tZW51JykubGVuZ3RoKSB7XG4gICAgICAgIGVsZW1lbnRcbiAgICAgICAgICAuY2xvc2VzdCgnbGkuZHJvcGRvd24nKVxuICAgICAgICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC5maW5kKCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nKVxuICAgICAgICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKVxuICAgICAgfVxuXG4gICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpXG4gICAgfVxuXG4gICAgJGFjdGl2ZS5sZW5ndGggJiYgdHJhbnNpdGlvbiA/XG4gICAgICAkYWN0aXZlXG4gICAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIG5leHQpXG4gICAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChUYWIuVFJBTlNJVElPTl9EVVJBVElPTikgOlxuICAgICAgbmV4dCgpXG5cbiAgICAkYWN0aXZlLnJlbW92ZUNsYXNzKCdpbicpXG4gIH1cblxuXG4gIC8vIFRBQiBQTFVHSU4gREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT1cblxuICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpXG4gICAgICB2YXIgZGF0YSAgPSAkdGhpcy5kYXRhKCdicy50YWInKVxuXG4gICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2JzLnRhYicsIChkYXRhID0gbmV3IFRhYih0aGlzKSkpXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKClcbiAgICB9KVxuICB9XG5cbiAgdmFyIG9sZCA9ICQuZm4udGFiXG5cbiAgJC5mbi50YWIgICAgICAgICAgICAgPSBQbHVnaW5cbiAgJC5mbi50YWIuQ29uc3RydWN0b3IgPSBUYWJcblxuXG4gIC8vIFRBQiBOTyBDT05GTElDVFxuICAvLyA9PT09PT09PT09PT09PT1cblxuICAkLmZuLnRhYi5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm4udGFiID0gb2xkXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG5cbiAgLy8gVEFCIERBVEEtQVBJXG4gIC8vID09PT09PT09PT09PVxuXG4gIHZhciBjbGlja0hhbmRsZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIFBsdWdpbi5jYWxsKCQodGhpcyksICdzaG93JylcbiAgfVxuXG4gICQoZG9jdW1lbnQpXG4gICAgLm9uKCdjbGljay5icy50YWIuZGF0YS1hcGknLCAnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJywgY2xpY2tIYW5kbGVyKVxuICAgIC5vbignY2xpY2suYnMudGFiLmRhdGEtYXBpJywgJ1tkYXRhLXRvZ2dsZT1cInBpbGxcIl0nLCBjbGlja0hhbmRsZXIpXG5cbn0oalF1ZXJ5KTtcbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQm9vdHN0cmFwOiB0cmFuc2l0aW9uLmpzIHYzLjMuNVxuICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vamF2YXNjcmlwdC8jdHJhbnNpdGlvbnNcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cblxuK2Z1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBDU1MgVFJBTlNJVElPTiBTVVBQT1JUIChTaG91dG91dDogaHR0cDovL3d3dy5tb2Rlcm5penIuY29tLylcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gdHJhbnNpdGlvbkVuZCgpIHtcbiAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdib290c3RyYXAnKVxuXG4gICAgdmFyIHRyYW5zRW5kRXZlbnROYW1lcyA9IHtcbiAgICAgIFdlYmtpdFRyYW5zaXRpb24gOiAnd2Via2l0VHJhbnNpdGlvbkVuZCcsXG4gICAgICBNb3pUcmFuc2l0aW9uICAgIDogJ3RyYW5zaXRpb25lbmQnLFxuICAgICAgT1RyYW5zaXRpb24gICAgICA6ICdvVHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZCcsXG4gICAgICB0cmFuc2l0aW9uICAgICAgIDogJ3RyYW5zaXRpb25lbmQnXG4gICAgfVxuXG4gICAgZm9yICh2YXIgbmFtZSBpbiB0cmFuc0VuZEV2ZW50TmFtZXMpIHtcbiAgICAgIGlmIChlbC5zdHlsZVtuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7IGVuZDogdHJhbnNFbmRFdmVudE5hbWVzW25hbWVdIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2UgLy8gZXhwbGljaXQgZm9yIGllOCAoICAuXy4pXG4gIH1cblxuICAvLyBodHRwOi8vYmxvZy5hbGV4bWFjY2F3LmNvbS9jc3MtdHJhbnNpdGlvbnNcbiAgJC5mbi5lbXVsYXRlVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uIChkdXJhdGlvbikge1xuICAgIHZhciBjYWxsZWQgPSBmYWxzZVxuICAgIHZhciAkZWwgPSB0aGlzXG4gICAgJCh0aGlzKS5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZSB9KVxuICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgaWYgKCFjYWxsZWQpICQoJGVsKS50cmlnZ2VyKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCkgfVxuICAgIHNldFRpbWVvdXQoY2FsbGJhY2ssIGR1cmF0aW9uKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAkKGZ1bmN0aW9uICgpIHtcbiAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiA9IHRyYW5zaXRpb25FbmQoKVxuXG4gICAgaWYgKCEkLnN1cHBvcnQudHJhbnNpdGlvbikgcmV0dXJuXG5cbiAgICAkLmV2ZW50LnNwZWNpYWwuYnNUcmFuc2l0aW9uRW5kID0ge1xuICAgICAgYmluZFR5cGU6ICQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxcbiAgICAgIGRlbGVnYXRlVHlwZTogJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLFxuICAgICAgaGFuZGxlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoJChlLnRhcmdldCkuaXModGhpcykpIHJldHVybiBlLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbn0oalF1ZXJ5KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJvb3RzdHJhcC5qcyIsImFmZml4LmpzIiwiYWxlcnQuanMiLCJidXR0b24uanMiLCJjYXJvdXNlbC5qcyIsImNvbGxhcHNlLmpzIiwiZHJvcGRvd24uanMiLCJtb2RhbC5qcyIsInRvb2x0aXAuanMiLCJwb3BvdmVyLmpzIiwic2Nyb2xsc3B5LmpzIiwidGFiLmpzIiwidHJhbnNpdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2xLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDN09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUNuTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUNyS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2pWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDbGdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDNUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICogQm9vdHN0cmFwOiBhZmZpeC5qcyB2My4zLjVcclxuICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vamF2YXNjcmlwdC8jYWZmaXhcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLlxyXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cclxuXHJcblxyXG4rZnVuY3Rpb24gKCQpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG4gIC8vIEFGRklYIENMQVNTIERFRklOSVRJT05cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIHZhciBBZmZpeCA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgQWZmaXguREVGQVVMVFMsIG9wdGlvbnMpXHJcblxyXG4gICAgdGhpcy4kdGFyZ2V0ID0gJCh0aGlzLm9wdGlvbnMudGFyZ2V0KVxyXG4gICAgICAub24oJ3Njcm9sbC5icy5hZmZpeC5kYXRhLWFwaScsICQucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLCB0aGlzKSlcclxuICAgICAgLm9uKCdjbGljay5icy5hZmZpeC5kYXRhLWFwaScsICAkLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3AsIHRoaXMpKVxyXG5cclxuICAgIHRoaXMuJGVsZW1lbnQgICAgID0gJChlbGVtZW50KVxyXG4gICAgdGhpcy5hZmZpeGVkICAgICAgPSBudWxsXHJcbiAgICB0aGlzLnVucGluICAgICAgICA9IG51bGxcclxuICAgIHRoaXMucGlubmVkT2Zmc2V0ID0gbnVsbFxyXG5cclxuICAgIHRoaXMuY2hlY2tQb3NpdGlvbigpXHJcbiAgfVxyXG5cclxuICBBZmZpeC5WRVJTSU9OICA9ICczLjMuNSdcclxuXHJcbiAgQWZmaXguUkVTRVQgICAgPSAnYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbSdcclxuXHJcbiAgQWZmaXguREVGQVVMVFMgPSB7XHJcbiAgICBvZmZzZXQ6IDAsXHJcbiAgICB0YXJnZXQ6IHdpbmRvd1xyXG4gIH1cclxuXHJcbiAgQWZmaXgucHJvdG90eXBlLmdldFN0YXRlID0gZnVuY3Rpb24gKHNjcm9sbEhlaWdodCwgaGVpZ2h0LCBvZmZzZXRUb3AsIG9mZnNldEJvdHRvbSkge1xyXG4gICAgdmFyIHNjcm9sbFRvcCAgICA9IHRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKVxyXG4gICAgdmFyIHBvc2l0aW9uICAgICA9IHRoaXMuJGVsZW1lbnQub2Zmc2V0KClcclxuICAgIHZhciB0YXJnZXRIZWlnaHQgPSB0aGlzLiR0YXJnZXQuaGVpZ2h0KClcclxuXHJcbiAgICBpZiAob2Zmc2V0VG9wICE9IG51bGwgJiYgdGhpcy5hZmZpeGVkID09ICd0b3AnKSByZXR1cm4gc2Nyb2xsVG9wIDwgb2Zmc2V0VG9wID8gJ3RvcCcgOiBmYWxzZVxyXG5cclxuICAgIGlmICh0aGlzLmFmZml4ZWQgPT0gJ2JvdHRvbScpIHtcclxuICAgICAgaWYgKG9mZnNldFRvcCAhPSBudWxsKSByZXR1cm4gKHNjcm9sbFRvcCArIHRoaXMudW5waW4gPD0gcG9zaXRpb24udG9wKSA/IGZhbHNlIDogJ2JvdHRvbSdcclxuICAgICAgcmV0dXJuIChzY3JvbGxUb3AgKyB0YXJnZXRIZWlnaHQgPD0gc2Nyb2xsSGVpZ2h0IC0gb2Zmc2V0Qm90dG9tKSA/IGZhbHNlIDogJ2JvdHRvbSdcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaW5pdGlhbGl6aW5nICAgPSB0aGlzLmFmZml4ZWQgPT0gbnVsbFxyXG4gICAgdmFyIGNvbGxpZGVyVG9wICAgID0gaW5pdGlhbGl6aW5nID8gc2Nyb2xsVG9wIDogcG9zaXRpb24udG9wXHJcbiAgICB2YXIgY29sbGlkZXJIZWlnaHQgPSBpbml0aWFsaXppbmcgPyB0YXJnZXRIZWlnaHQgOiBoZWlnaHRcclxuXHJcbiAgICBpZiAob2Zmc2V0VG9wICE9IG51bGwgJiYgc2Nyb2xsVG9wIDw9IG9mZnNldFRvcCkgcmV0dXJuICd0b3AnXHJcbiAgICBpZiAob2Zmc2V0Qm90dG9tICE9IG51bGwgJiYgKGNvbGxpZGVyVG9wICsgY29sbGlkZXJIZWlnaHQgPj0gc2Nyb2xsSGVpZ2h0IC0gb2Zmc2V0Qm90dG9tKSkgcmV0dXJuICdib3R0b20nXHJcblxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBBZmZpeC5wcm90b3R5cGUuZ2V0UGlubmVkT2Zmc2V0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMucGlubmVkT2Zmc2V0KSByZXR1cm4gdGhpcy5waW5uZWRPZmZzZXRcclxuICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoQWZmaXguUkVTRVQpLmFkZENsYXNzKCdhZmZpeCcpXHJcbiAgICB2YXIgc2Nyb2xsVG9wID0gdGhpcy4kdGFyZ2V0LnNjcm9sbFRvcCgpXHJcbiAgICB2YXIgcG9zaXRpb24gID0gdGhpcy4kZWxlbWVudC5vZmZzZXQoKVxyXG4gICAgcmV0dXJuICh0aGlzLnBpbm5lZE9mZnNldCA9IHBvc2l0aW9uLnRvcCAtIHNjcm9sbFRvcClcclxuICB9XHJcblxyXG4gIEFmZml4LnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uV2l0aEV2ZW50TG9vcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHNldFRpbWVvdXQoJC5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sIHRoaXMpLCAxKVxyXG4gIH1cclxuXHJcbiAgQWZmaXgucHJvdG90eXBlLmNoZWNrUG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIXRoaXMuJGVsZW1lbnQuaXMoJzp2aXNpYmxlJykpIHJldHVyblxyXG5cclxuICAgIHZhciBoZWlnaHQgICAgICAgPSB0aGlzLiRlbGVtZW50LmhlaWdodCgpXHJcbiAgICB2YXIgb2Zmc2V0ICAgICAgID0gdGhpcy5vcHRpb25zLm9mZnNldFxyXG4gICAgdmFyIG9mZnNldFRvcCAgICA9IG9mZnNldC50b3BcclxuICAgIHZhciBvZmZzZXRCb3R0b20gPSBvZmZzZXQuYm90dG9tXHJcbiAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gTWF0aC5tYXgoJChkb2N1bWVudCkuaGVpZ2h0KCksICQoZG9jdW1lbnQuYm9keSkuaGVpZ2h0KCkpXHJcblxyXG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgIT0gJ29iamVjdCcpICAgICAgICAgb2Zmc2V0Qm90dG9tID0gb2Zmc2V0VG9wID0gb2Zmc2V0XHJcbiAgICBpZiAodHlwZW9mIG9mZnNldFRvcCA9PSAnZnVuY3Rpb24nKSAgICBvZmZzZXRUb3AgICAgPSBvZmZzZXQudG9wKHRoaXMuJGVsZW1lbnQpXHJcbiAgICBpZiAodHlwZW9mIG9mZnNldEJvdHRvbSA9PSAnZnVuY3Rpb24nKSBvZmZzZXRCb3R0b20gPSBvZmZzZXQuYm90dG9tKHRoaXMuJGVsZW1lbnQpXHJcblxyXG4gICAgdmFyIGFmZml4ID0gdGhpcy5nZXRTdGF0ZShzY3JvbGxIZWlnaHQsIGhlaWdodCwgb2Zmc2V0VG9wLCBvZmZzZXRCb3R0b20pXHJcblxyXG4gICAgaWYgKHRoaXMuYWZmaXhlZCAhPSBhZmZpeCkge1xyXG4gICAgICBpZiAodGhpcy51bnBpbiAhPSBudWxsKSB0aGlzLiRlbGVtZW50LmNzcygndG9wJywgJycpXHJcblxyXG4gICAgICB2YXIgYWZmaXhUeXBlID0gJ2FmZml4JyArIChhZmZpeCA/ICctJyArIGFmZml4IDogJycpXHJcbiAgICAgIHZhciBlICAgICAgICAgPSAkLkV2ZW50KGFmZml4VHlwZSArICcuYnMuYWZmaXgnKVxyXG5cclxuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpXHJcblxyXG4gICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuXHJcblxyXG4gICAgICB0aGlzLmFmZml4ZWQgPSBhZmZpeFxyXG4gICAgICB0aGlzLnVucGluID0gYWZmaXggPT0gJ2JvdHRvbScgPyB0aGlzLmdldFBpbm5lZE9mZnNldCgpIDogbnVsbFxyXG5cclxuICAgICAgdGhpcy4kZWxlbWVudFxyXG4gICAgICAgIC5yZW1vdmVDbGFzcyhBZmZpeC5SRVNFVClcclxuICAgICAgICAuYWRkQ2xhc3MoYWZmaXhUeXBlKVxyXG4gICAgICAgIC50cmlnZ2VyKGFmZml4VHlwZS5yZXBsYWNlKCdhZmZpeCcsICdhZmZpeGVkJykgKyAnLmJzLmFmZml4JylcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYWZmaXggPT0gJ2JvdHRvbScpIHtcclxuICAgICAgdGhpcy4kZWxlbWVudC5vZmZzZXQoe1xyXG4gICAgICAgIHRvcDogc2Nyb2xsSGVpZ2h0IC0gaGVpZ2h0IC0gb2Zmc2V0Qm90dG9tXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQUZGSVggUExVR0lOIERFRklOSVRJT05cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXHJcbiAgICAgIHZhciBkYXRhICAgID0gJHRoaXMuZGF0YSgnYnMuYWZmaXgnKVxyXG4gICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uXHJcblxyXG4gICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2JzLmFmZml4JywgKGRhdGEgPSBuZXcgQWZmaXgodGhpcywgb3B0aW9ucykpKVxyXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB2YXIgb2xkID0gJC5mbi5hZmZpeFxyXG5cclxuICAkLmZuLmFmZml4ICAgICAgICAgICAgID0gUGx1Z2luXHJcbiAgJC5mbi5hZmZpeC5Db25zdHJ1Y3RvciA9IEFmZml4XHJcblxyXG5cclxuICAvLyBBRkZJWCBOTyBDT05GTElDVFxyXG4gIC8vID09PT09PT09PT09PT09PT09XHJcblxyXG4gICQuZm4uYWZmaXgubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICQuZm4uYWZmaXggPSBvbGRcclxuICAgIHJldHVybiB0aGlzXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQUZGSVggREFUQS1BUElcclxuICAvLyA9PT09PT09PT09PT09PVxyXG5cclxuICAkKHdpbmRvdykub24oJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAkKCdbZGF0YS1zcHk9XCJhZmZpeFwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJHNweSA9ICQodGhpcylcclxuICAgICAgdmFyIGRhdGEgPSAkc3B5LmRhdGEoKVxyXG5cclxuICAgICAgZGF0YS5vZmZzZXQgPSBkYXRhLm9mZnNldCB8fCB7fVxyXG5cclxuICAgICAgaWYgKGRhdGEub2Zmc2V0Qm90dG9tICE9IG51bGwpIGRhdGEub2Zmc2V0LmJvdHRvbSA9IGRhdGEub2Zmc2V0Qm90dG9tXHJcbiAgICAgIGlmIChkYXRhLm9mZnNldFRvcCAgICAhPSBudWxsKSBkYXRhLm9mZnNldC50b3AgICAgPSBkYXRhLm9mZnNldFRvcFxyXG5cclxuICAgICAgUGx1Z2luLmNhbGwoJHNweSwgZGF0YSlcclxuICAgIH0pXHJcbiAgfSlcclxuXHJcbn0oalF1ZXJ5KTtcclxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIEJvb3RzdHJhcDogYWxlcnQuanMgdjMuMy41XHJcbiAqIGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2phdmFzY3JpcHQvI2FsZXJ0c1xyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xyXG5cclxuXHJcbitmdW5jdGlvbiAoJCkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuXHJcbiAgLy8gQUxFUlQgQ0xBU1MgREVGSU5JVElPTlxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgdmFyIGRpc21pc3MgPSAnW2RhdGEtZGlzbWlzcz1cImFsZXJ0XCJdJ1xyXG4gIHZhciBBbGVydCAgID0gZnVuY3Rpb24gKGVsKSB7XHJcbiAgICAkKGVsKS5vbignY2xpY2snLCBkaXNtaXNzLCB0aGlzLmNsb3NlKVxyXG4gIH1cclxuXHJcbiAgQWxlcnQuVkVSU0lPTiA9ICczLjMuNSdcclxuXHJcbiAgQWxlcnQuVFJBTlNJVElPTl9EVVJBVElPTiA9IDE1MFxyXG5cclxuICBBbGVydC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgdmFyICR0aGlzICAgID0gJCh0aGlzKVxyXG4gICAgdmFyIHNlbGVjdG9yID0gJHRoaXMuYXR0cignZGF0YS10YXJnZXQnKVxyXG5cclxuICAgIGlmICghc2VsZWN0b3IpIHtcclxuICAgICAgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdocmVmJylcclxuICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvciAmJiBzZWxlY3Rvci5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLCAnJykgLy8gc3RyaXAgZm9yIGllN1xyXG4gICAgfVxyXG5cclxuICAgIHZhciAkcGFyZW50ID0gJChzZWxlY3RvcilcclxuXHJcbiAgICBpZiAoZSkgZS5wcmV2ZW50RGVmYXVsdCgpXHJcblxyXG4gICAgaWYgKCEkcGFyZW50Lmxlbmd0aCkge1xyXG4gICAgICAkcGFyZW50ID0gJHRoaXMuY2xvc2VzdCgnLmFsZXJ0JylcclxuICAgIH1cclxuXHJcbiAgICAkcGFyZW50LnRyaWdnZXIoZSA9ICQuRXZlbnQoJ2Nsb3NlLmJzLmFsZXJ0JykpXHJcblxyXG4gICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxyXG5cclxuICAgICRwYXJlbnQucmVtb3ZlQ2xhc3MoJ2luJylcclxuXHJcbiAgICBmdW5jdGlvbiByZW1vdmVFbGVtZW50KCkge1xyXG4gICAgICAvLyBkZXRhY2ggZnJvbSBwYXJlbnQsIGZpcmUgZXZlbnQgdGhlbiBjbGVhbiB1cCBkYXRhXHJcbiAgICAgICRwYXJlbnQuZGV0YWNoKCkudHJpZ2dlcignY2xvc2VkLmJzLmFsZXJ0JykucmVtb3ZlKClcclxuICAgIH1cclxuXHJcbiAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiAkcGFyZW50Lmhhc0NsYXNzKCdmYWRlJykgP1xyXG4gICAgICAkcGFyZW50XHJcbiAgICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgcmVtb3ZlRWxlbWVudClcclxuICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoQWxlcnQuVFJBTlNJVElPTl9EVVJBVElPTikgOlxyXG4gICAgICByZW1vdmVFbGVtZW50KClcclxuICB9XHJcblxyXG5cclxuICAvLyBBTEVSVCBQTFVHSU4gREVGSU5JVElPTlxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIGZ1bmN0aW9uIFBsdWdpbihvcHRpb24pIHtcclxuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpXHJcbiAgICAgIHZhciBkYXRhICA9ICR0aGlzLmRhdGEoJ2JzLmFsZXJ0JylcclxuXHJcbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuYWxlcnQnLCAoZGF0YSA9IG5ldyBBbGVydCh0aGlzKSkpXHJcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0uY2FsbCgkdGhpcylcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB2YXIgb2xkID0gJC5mbi5hbGVydFxyXG5cclxuICAkLmZuLmFsZXJ0ICAgICAgICAgICAgID0gUGx1Z2luXHJcbiAgJC5mbi5hbGVydC5Db25zdHJ1Y3RvciA9IEFsZXJ0XHJcblxyXG5cclxuICAvLyBBTEVSVCBOTyBDT05GTElDVFxyXG4gIC8vID09PT09PT09PT09PT09PT09XHJcblxyXG4gICQuZm4uYWxlcnQubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICQuZm4uYWxlcnQgPSBvbGRcclxuICAgIHJldHVybiB0aGlzXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQUxFUlQgREFUQS1BUElcclxuICAvLyA9PT09PT09PT09PT09PVxyXG5cclxuICAkKGRvY3VtZW50KS5vbignY2xpY2suYnMuYWxlcnQuZGF0YS1hcGknLCBkaXNtaXNzLCBBbGVydC5wcm90b3R5cGUuY2xvc2UpXHJcblxyXG59KGpRdWVyeSk7XHJcbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKiBCb290c3RyYXA6IGJ1dHRvbi5qcyB2My4zLjVcclxuICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vamF2YXNjcmlwdC8jYnV0dG9uc1xyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xyXG5cclxuXHJcbitmdW5jdGlvbiAoJCkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuXHJcbiAgLy8gQlVUVE9OIFBVQkxJQyBDTEFTUyBERUZJTklUSU9OXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIHZhciBCdXR0b24gPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xyXG4gICAgdGhpcy4kZWxlbWVudCAgPSAkKGVsZW1lbnQpXHJcbiAgICB0aGlzLm9wdGlvbnMgICA9ICQuZXh0ZW5kKHt9LCBCdXR0b24uREVGQVVMVFMsIG9wdGlvbnMpXHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBCdXR0b24uVkVSU0lPTiAgPSAnMy4zLjUnXHJcblxyXG4gIEJ1dHRvbi5ERUZBVUxUUyA9IHtcclxuICAgIGxvYWRpbmdUZXh0OiAnbG9hZGluZy4uLidcclxuICB9XHJcblxyXG4gIEJ1dHRvbi5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUpIHtcclxuICAgIHZhciBkICAgID0gJ2Rpc2FibGVkJ1xyXG4gICAgdmFyICRlbCAgPSB0aGlzLiRlbGVtZW50XHJcbiAgICB2YXIgdmFsICA9ICRlbC5pcygnaW5wdXQnKSA/ICd2YWwnIDogJ2h0bWwnXHJcbiAgICB2YXIgZGF0YSA9ICRlbC5kYXRhKClcclxuXHJcbiAgICBzdGF0ZSArPSAnVGV4dCdcclxuXHJcbiAgICBpZiAoZGF0YS5yZXNldFRleHQgPT0gbnVsbCkgJGVsLmRhdGEoJ3Jlc2V0VGV4dCcsICRlbFt2YWxdKCkpXHJcblxyXG4gICAgLy8gcHVzaCB0byBldmVudCBsb29wIHRvIGFsbG93IGZvcm1zIHRvIHN1Ym1pdFxyXG4gICAgc2V0VGltZW91dCgkLnByb3h5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgJGVsW3ZhbF0oZGF0YVtzdGF0ZV0gPT0gbnVsbCA/IHRoaXMub3B0aW9uc1tzdGF0ZV0gOiBkYXRhW3N0YXRlXSlcclxuXHJcbiAgICAgIGlmIChzdGF0ZSA9PSAnbG9hZGluZ1RleHQnKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlXHJcbiAgICAgICAgJGVsLmFkZENsYXNzKGQpLmF0dHIoZCwgZClcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTG9hZGluZykge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAkZWwucmVtb3ZlQ2xhc3MoZCkucmVtb3ZlQXR0cihkKVxyXG4gICAgICB9XHJcbiAgICB9LCB0aGlzKSwgMClcclxuICB9XHJcblxyXG4gIEJ1dHRvbi5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGNoYW5nZWQgPSB0cnVlXHJcbiAgICB2YXIgJHBhcmVudCA9IHRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXScpXHJcblxyXG4gICAgaWYgKCRwYXJlbnQubGVuZ3RoKSB7XHJcbiAgICAgIHZhciAkaW5wdXQgPSB0aGlzLiRlbGVtZW50LmZpbmQoJ2lucHV0JylcclxuICAgICAgaWYgKCRpbnB1dC5wcm9wKCd0eXBlJykgPT0gJ3JhZGlvJykge1xyXG4gICAgICAgIGlmICgkaW5wdXQucHJvcCgnY2hlY2tlZCcpKSBjaGFuZ2VkID0gZmFsc2VcclxuICAgICAgICAkcGFyZW50LmZpbmQoJy5hY3RpdmUnKS5yZW1vdmVDbGFzcygnYWN0aXZlJylcclxuICAgICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCdhY3RpdmUnKVxyXG4gICAgICB9IGVsc2UgaWYgKCRpbnB1dC5wcm9wKCd0eXBlJykgPT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgIGlmICgoJGlucHV0LnByb3AoJ2NoZWNrZWQnKSkgIT09IHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2FjdGl2ZScpKSBjaGFuZ2VkID0gZmFsc2VcclxuICAgICAgICB0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKCdhY3RpdmUnKVxyXG4gICAgICB9XHJcbiAgICAgICRpbnB1dC5wcm9wKCdjaGVja2VkJywgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnYWN0aXZlJykpXHJcbiAgICAgIGlmIChjaGFuZ2VkKSAkaW5wdXQudHJpZ2dlcignY2hhbmdlJylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuJGVsZW1lbnQuYXR0cignYXJpYS1wcmVzc2VkJywgIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2FjdGl2ZScpKVxyXG4gICAgICB0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKCdhY3RpdmUnKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIEJVVFRPTiBQTFVHSU4gREVGSU5JVElPTlxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXHJcbiAgICAgIHZhciBkYXRhICAgID0gJHRoaXMuZGF0YSgnYnMuYnV0dG9uJylcclxuICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvblxyXG5cclxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy5idXR0b24nLCAoZGF0YSA9IG5ldyBCdXR0b24odGhpcywgb3B0aW9ucykpKVxyXG5cclxuICAgICAgaWYgKG9wdGlvbiA9PSAndG9nZ2xlJykgZGF0YS50b2dnbGUoKVxyXG4gICAgICBlbHNlIGlmIChvcHRpb24pIGRhdGEuc2V0U3RhdGUob3B0aW9uKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHZhciBvbGQgPSAkLmZuLmJ1dHRvblxyXG5cclxuICAkLmZuLmJ1dHRvbiAgICAgICAgICAgICA9IFBsdWdpblxyXG4gICQuZm4uYnV0dG9uLkNvbnN0cnVjdG9yID0gQnV0dG9uXHJcblxyXG5cclxuICAvLyBCVVRUT04gTk8gQ09ORkxJQ1RcclxuICAvLyA9PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgJC5mbi5idXR0b24ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICQuZm4uYnV0dG9uID0gb2xkXHJcbiAgICByZXR1cm4gdGhpc1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEJVVFRPTiBEQVRBLUFQSVxyXG4gIC8vID09PT09PT09PT09PT09PVxyXG5cclxuICAkKGRvY3VtZW50KVxyXG4gICAgLm9uKCdjbGljay5icy5idXR0b24uZGF0YS1hcGknLCAnW2RhdGEtdG9nZ2xlXj1cImJ1dHRvblwiXScsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgIHZhciAkYnRuID0gJChlLnRhcmdldClcclxuICAgICAgaWYgKCEkYnRuLmhhc0NsYXNzKCdidG4nKSkgJGJ0biA9ICRidG4uY2xvc2VzdCgnLmJ0bicpXHJcbiAgICAgIFBsdWdpbi5jYWxsKCRidG4sICd0b2dnbGUnKVxyXG4gICAgICBpZiAoISgkKGUudGFyZ2V0KS5pcygnaW5wdXRbdHlwZT1cInJhZGlvXCJdJykgfHwgJChlLnRhcmdldCkuaXMoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpKSkgZS5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICB9KVxyXG4gICAgLm9uKCdmb2N1cy5icy5idXR0b24uZGF0YS1hcGkgYmx1ci5icy5idXR0b24uZGF0YS1hcGknLCAnW2RhdGEtdG9nZ2xlXj1cImJ1dHRvblwiXScsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5idG4nKS50b2dnbGVDbGFzcygnZm9jdXMnLCAvXmZvY3VzKGluKT8kLy50ZXN0KGUudHlwZSkpXHJcbiAgICB9KVxyXG5cclxufShqUXVlcnkpO1xyXG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICogQm9vdHN0cmFwOiBjYXJvdXNlbC5qcyB2My4zLjVcclxuICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vamF2YXNjcmlwdC8jY2Fyb3VzZWxcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLlxyXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cclxuXHJcblxyXG4rZnVuY3Rpb24gKCQpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG4gIC8vIENBUk9VU0VMIENMQVNTIERFRklOSVRJT05cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIHZhciBDYXJvdXNlbCA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XHJcbiAgICB0aGlzLiRlbGVtZW50ICAgID0gJChlbGVtZW50KVxyXG4gICAgdGhpcy4kaW5kaWNhdG9ycyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmNhcm91c2VsLWluZGljYXRvcnMnKVxyXG4gICAgdGhpcy5vcHRpb25zICAgICA9IG9wdGlvbnNcclxuICAgIHRoaXMucGF1c2VkICAgICAgPSBudWxsXHJcbiAgICB0aGlzLnNsaWRpbmcgICAgID0gbnVsbFxyXG4gICAgdGhpcy5pbnRlcnZhbCAgICA9IG51bGxcclxuICAgIHRoaXMuJGFjdGl2ZSAgICAgPSBudWxsXHJcbiAgICB0aGlzLiRpdGVtcyAgICAgID0gbnVsbFxyXG5cclxuICAgIHRoaXMub3B0aW9ucy5rZXlib2FyZCAmJiB0aGlzLiRlbGVtZW50Lm9uKCdrZXlkb3duLmJzLmNhcm91c2VsJywgJC5wcm94eSh0aGlzLmtleWRvd24sIHRoaXMpKVxyXG5cclxuICAgIHRoaXMub3B0aW9ucy5wYXVzZSA9PSAnaG92ZXInICYmICEoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSAmJiB0aGlzLiRlbGVtZW50XHJcbiAgICAgIC5vbignbW91c2VlbnRlci5icy5jYXJvdXNlbCcsICQucHJveHkodGhpcy5wYXVzZSwgdGhpcykpXHJcbiAgICAgIC5vbignbW91c2VsZWF2ZS5icy5jYXJvdXNlbCcsICQucHJveHkodGhpcy5jeWNsZSwgdGhpcykpXHJcbiAgfVxyXG5cclxuICBDYXJvdXNlbC5WRVJTSU9OICA9ICczLjMuNSdcclxuXHJcbiAgQ2Fyb3VzZWwuVFJBTlNJVElPTl9EVVJBVElPTiA9IDYwMFxyXG5cclxuICBDYXJvdXNlbC5ERUZBVUxUUyA9IHtcclxuICAgIGludGVydmFsOiA1MDAwLFxyXG4gICAgcGF1c2U6ICdob3ZlcicsXHJcbiAgICB3cmFwOiB0cnVlLFxyXG4gICAga2V5Ym9hcmQ6IHRydWVcclxuICB9XHJcblxyXG4gIENhcm91c2VsLnByb3RvdHlwZS5rZXlkb3duID0gZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGUudGFyZ2V0LnRhZ05hbWUpKSByZXR1cm5cclxuICAgIHN3aXRjaCAoZS53aGljaCkge1xyXG4gICAgICBjYXNlIDM3OiB0aGlzLnByZXYoKTsgYnJlYWtcclxuICAgICAgY2FzZSAzOTogdGhpcy5uZXh0KCk7IGJyZWFrXHJcbiAgICAgIGRlZmF1bHQ6IHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gIH1cclxuXHJcbiAgQ2Fyb3VzZWwucHJvdG90eXBlLmN5Y2xlID0gZnVuY3Rpb24gKGUpIHtcclxuICAgIGUgfHwgKHRoaXMucGF1c2VkID0gZmFsc2UpXHJcblxyXG4gICAgdGhpcy5pbnRlcnZhbCAmJiBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpXHJcblxyXG4gICAgdGhpcy5vcHRpb25zLmludGVydmFsXHJcbiAgICAgICYmICF0aGlzLnBhdXNlZFxyXG4gICAgICAmJiAodGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCQucHJveHkodGhpcy5uZXh0LCB0aGlzKSwgdGhpcy5vcHRpb25zLmludGVydmFsKSlcclxuXHJcbiAgICByZXR1cm4gdGhpc1xyXG4gIH1cclxuXHJcbiAgQ2Fyb3VzZWwucHJvdG90eXBlLmdldEl0ZW1JbmRleCA9IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICB0aGlzLiRpdGVtcyA9IGl0ZW0ucGFyZW50KCkuY2hpbGRyZW4oJy5pdGVtJylcclxuICAgIHJldHVybiB0aGlzLiRpdGVtcy5pbmRleChpdGVtIHx8IHRoaXMuJGFjdGl2ZSlcclxuICB9XHJcblxyXG4gIENhcm91c2VsLnByb3RvdHlwZS5nZXRJdGVtRm9yRGlyZWN0aW9uID0gZnVuY3Rpb24gKGRpcmVjdGlvbiwgYWN0aXZlKSB7XHJcbiAgICB2YXIgYWN0aXZlSW5kZXggPSB0aGlzLmdldEl0ZW1JbmRleChhY3RpdmUpXHJcbiAgICB2YXIgd2lsbFdyYXAgPSAoZGlyZWN0aW9uID09ICdwcmV2JyAmJiBhY3RpdmVJbmRleCA9PT0gMClcclxuICAgICAgICAgICAgICAgIHx8IChkaXJlY3Rpb24gPT0gJ25leHQnICYmIGFjdGl2ZUluZGV4ID09ICh0aGlzLiRpdGVtcy5sZW5ndGggLSAxKSlcclxuICAgIGlmICh3aWxsV3JhcCAmJiAhdGhpcy5vcHRpb25zLndyYXApIHJldHVybiBhY3RpdmVcclxuICAgIHZhciBkZWx0YSA9IGRpcmVjdGlvbiA9PSAncHJldicgPyAtMSA6IDFcclxuICAgIHZhciBpdGVtSW5kZXggPSAoYWN0aXZlSW5kZXggKyBkZWx0YSkgJSB0aGlzLiRpdGVtcy5sZW5ndGhcclxuICAgIHJldHVybiB0aGlzLiRpdGVtcy5lcShpdGVtSW5kZXgpXHJcbiAgfVxyXG5cclxuICBDYXJvdXNlbC5wcm90b3R5cGUudG8gPSBmdW5jdGlvbiAocG9zKSB7XHJcbiAgICB2YXIgdGhhdCAgICAgICAgPSB0aGlzXHJcbiAgICB2YXIgYWN0aXZlSW5kZXggPSB0aGlzLmdldEl0ZW1JbmRleCh0aGlzLiRhY3RpdmUgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5pdGVtLmFjdGl2ZScpKVxyXG5cclxuICAgIGlmIChwb3MgPiAodGhpcy4kaXRlbXMubGVuZ3RoIC0gMSkgfHwgcG9zIDwgMCkgcmV0dXJuXHJcblxyXG4gICAgaWYgKHRoaXMuc2xpZGluZykgICAgICAgcmV0dXJuIHRoaXMuJGVsZW1lbnQub25lKCdzbGlkLmJzLmNhcm91c2VsJywgZnVuY3Rpb24gKCkgeyB0aGF0LnRvKHBvcykgfSkgLy8geWVzLCBcInNsaWRcIlxyXG4gICAgaWYgKGFjdGl2ZUluZGV4ID09IHBvcykgcmV0dXJuIHRoaXMucGF1c2UoKS5jeWNsZSgpXHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2xpZGUocG9zID4gYWN0aXZlSW5kZXggPyAnbmV4dCcgOiAncHJldicsIHRoaXMuJGl0ZW1zLmVxKHBvcykpXHJcbiAgfVxyXG5cclxuICBDYXJvdXNlbC5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgZSB8fCAodGhpcy5wYXVzZWQgPSB0cnVlKVxyXG5cclxuICAgIGlmICh0aGlzLiRlbGVtZW50LmZpbmQoJy5uZXh0LCAucHJldicpLmxlbmd0aCAmJiAkLnN1cHBvcnQudHJhbnNpdGlvbikge1xyXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKVxyXG4gICAgICB0aGlzLmN5Y2xlKHRydWUpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbnRlcnZhbCA9IGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbClcclxuXHJcbiAgICByZXR1cm4gdGhpc1xyXG4gIH1cclxuXHJcbiAgQ2Fyb3VzZWwucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodGhpcy5zbGlkaW5nKSByZXR1cm5cclxuICAgIHJldHVybiB0aGlzLnNsaWRlKCduZXh0JylcclxuICB9XHJcblxyXG4gIENhcm91c2VsLnByb3RvdHlwZS5wcmV2ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMuc2xpZGluZykgcmV0dXJuXHJcbiAgICByZXR1cm4gdGhpcy5zbGlkZSgncHJldicpXHJcbiAgfVxyXG5cclxuICBDYXJvdXNlbC5wcm90b3R5cGUuc2xpZGUgPSBmdW5jdGlvbiAodHlwZSwgbmV4dCkge1xyXG4gICAgdmFyICRhY3RpdmUgICA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLml0ZW0uYWN0aXZlJylcclxuICAgIHZhciAkbmV4dCAgICAgPSBuZXh0IHx8IHRoaXMuZ2V0SXRlbUZvckRpcmVjdGlvbih0eXBlLCAkYWN0aXZlKVxyXG4gICAgdmFyIGlzQ3ljbGluZyA9IHRoaXMuaW50ZXJ2YWxcclxuICAgIHZhciBkaXJlY3Rpb24gPSB0eXBlID09ICduZXh0JyA/ICdsZWZ0JyA6ICdyaWdodCdcclxuICAgIHZhciB0aGF0ICAgICAgPSB0aGlzXHJcblxyXG4gICAgaWYgKCRuZXh0Lmhhc0NsYXNzKCdhY3RpdmUnKSkgcmV0dXJuICh0aGlzLnNsaWRpbmcgPSBmYWxzZSlcclxuXHJcbiAgICB2YXIgcmVsYXRlZFRhcmdldCA9ICRuZXh0WzBdXHJcbiAgICB2YXIgc2xpZGVFdmVudCA9ICQuRXZlbnQoJ3NsaWRlLmJzLmNhcm91c2VsJywge1xyXG4gICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkVGFyZ2V0LFxyXG4gICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxyXG4gICAgfSlcclxuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihzbGlkZUV2ZW50KVxyXG4gICAgaWYgKHNsaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxyXG5cclxuICAgIHRoaXMuc2xpZGluZyA9IHRydWVcclxuXHJcbiAgICBpc0N5Y2xpbmcgJiYgdGhpcy5wYXVzZSgpXHJcblxyXG4gICAgaWYgKHRoaXMuJGluZGljYXRvcnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuJGluZGljYXRvcnMuZmluZCgnLmFjdGl2ZScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKVxyXG4gICAgICB2YXIgJG5leHRJbmRpY2F0b3IgPSAkKHRoaXMuJGluZGljYXRvcnMuY2hpbGRyZW4oKVt0aGlzLmdldEl0ZW1JbmRleCgkbmV4dCldKVxyXG4gICAgICAkbmV4dEluZGljYXRvciAmJiAkbmV4dEluZGljYXRvci5hZGRDbGFzcygnYWN0aXZlJylcclxuICAgIH1cclxuXHJcbiAgICB2YXIgc2xpZEV2ZW50ID0gJC5FdmVudCgnc2xpZC5icy5jYXJvdXNlbCcsIHsgcmVsYXRlZFRhcmdldDogcmVsYXRlZFRhcmdldCwgZGlyZWN0aW9uOiBkaXJlY3Rpb24gfSkgLy8geWVzLCBcInNsaWRcIlxyXG4gICAgaWYgKCQuc3VwcG9ydC50cmFuc2l0aW9uICYmIHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ3NsaWRlJykpIHtcclxuICAgICAgJG5leHQuYWRkQ2xhc3ModHlwZSlcclxuICAgICAgJG5leHRbMF0ub2Zmc2V0V2lkdGggLy8gZm9yY2UgcmVmbG93XHJcbiAgICAgICRhY3RpdmUuYWRkQ2xhc3MoZGlyZWN0aW9uKVxyXG4gICAgICAkbmV4dC5hZGRDbGFzcyhkaXJlY3Rpb24pXHJcbiAgICAgICRhY3RpdmVcclxuICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAkbmV4dC5yZW1vdmVDbGFzcyhbdHlwZSwgZGlyZWN0aW9uXS5qb2luKCcgJykpLmFkZENsYXNzKCdhY3RpdmUnKVxyXG4gICAgICAgICAgJGFjdGl2ZS5yZW1vdmVDbGFzcyhbJ2FjdGl2ZScsIGRpcmVjdGlvbl0uam9pbignICcpKVxyXG4gICAgICAgICAgdGhhdC5zbGlkaW5nID0gZmFsc2VcclxuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGF0LiRlbGVtZW50LnRyaWdnZXIoc2xpZEV2ZW50KVxyXG4gICAgICAgICAgfSwgMClcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChDYXJvdXNlbC5UUkFOU0lUSU9OX0RVUkFUSU9OKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgJGFjdGl2ZS5yZW1vdmVDbGFzcygnYWN0aXZlJylcclxuICAgICAgJG5leHQuYWRkQ2xhc3MoJ2FjdGl2ZScpXHJcbiAgICAgIHRoaXMuc2xpZGluZyA9IGZhbHNlXHJcbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihzbGlkRXZlbnQpXHJcbiAgICB9XHJcblxyXG4gICAgaXNDeWNsaW5nICYmIHRoaXMuY3ljbGUoKVxyXG5cclxuICAgIHJldHVybiB0aGlzXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQ0FST1VTRUwgUExVR0lOIERFRklOSVRJT05cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXHJcbiAgICAgIHZhciBkYXRhICAgID0gJHRoaXMuZGF0YSgnYnMuY2Fyb3VzZWwnKVxyXG4gICAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBDYXJvdXNlbC5ERUZBVUxUUywgJHRoaXMuZGF0YSgpLCB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvbilcclxuICAgICAgdmFyIGFjdGlvbiAgPSB0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnID8gb3B0aW9uIDogb3B0aW9ucy5zbGlkZVxyXG5cclxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy5jYXJvdXNlbCcsIChkYXRhID0gbmV3IENhcm91c2VsKHRoaXMsIG9wdGlvbnMpKSlcclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ251bWJlcicpIGRhdGEudG8ob3B0aW9uKVxyXG4gICAgICBlbHNlIGlmIChhY3Rpb24pIGRhdGFbYWN0aW9uXSgpXHJcbiAgICAgIGVsc2UgaWYgKG9wdGlvbnMuaW50ZXJ2YWwpIGRhdGEucGF1c2UoKS5jeWNsZSgpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdmFyIG9sZCA9ICQuZm4uY2Fyb3VzZWxcclxuXHJcbiAgJC5mbi5jYXJvdXNlbCAgICAgICAgICAgICA9IFBsdWdpblxyXG4gICQuZm4uY2Fyb3VzZWwuQ29uc3RydWN0b3IgPSBDYXJvdXNlbFxyXG5cclxuXHJcbiAgLy8gQ0FST1VTRUwgTk8gQ09ORkxJQ1RcclxuICAvLyA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAkLmZuLmNhcm91c2VsLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAkLmZuLmNhcm91c2VsID0gb2xkXHJcbiAgICByZXR1cm4gdGhpc1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIENBUk9VU0VMIERBVEEtQVBJXHJcbiAgLy8gPT09PT09PT09PT09PT09PT1cclxuXHJcbiAgdmFyIGNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICB2YXIgaHJlZlxyXG4gICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXHJcbiAgICB2YXIgJHRhcmdldCA9ICQoJHRoaXMuYXR0cignZGF0YS10YXJnZXQnKSB8fCAoaHJlZiA9ICR0aGlzLmF0dHIoJ2hyZWYnKSkgJiYgaHJlZi5yZXBsYWNlKC8uKig/PSNbXlxcc10rJCkvLCAnJykpIC8vIHN0cmlwIGZvciBpZTdcclxuICAgIGlmICghJHRhcmdldC5oYXNDbGFzcygnY2Fyb3VzZWwnKSkgcmV0dXJuXHJcbiAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkdGFyZ2V0LmRhdGEoKSwgJHRoaXMuZGF0YSgpKVxyXG4gICAgdmFyIHNsaWRlSW5kZXggPSAkdGhpcy5hdHRyKCdkYXRhLXNsaWRlLXRvJylcclxuICAgIGlmIChzbGlkZUluZGV4KSBvcHRpb25zLmludGVydmFsID0gZmFsc2VcclxuXHJcbiAgICBQbHVnaW4uY2FsbCgkdGFyZ2V0LCBvcHRpb25zKVxyXG5cclxuICAgIGlmIChzbGlkZUluZGV4KSB7XHJcbiAgICAgICR0YXJnZXQuZGF0YSgnYnMuY2Fyb3VzZWwnKS50byhzbGlkZUluZGV4KVxyXG4gICAgfVxyXG5cclxuICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gIH1cclxuXHJcbiAgJChkb2N1bWVudClcclxuICAgIC5vbignY2xpY2suYnMuY2Fyb3VzZWwuZGF0YS1hcGknLCAnW2RhdGEtc2xpZGVdJywgY2xpY2tIYW5kbGVyKVxyXG4gICAgLm9uKCdjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaScsICdbZGF0YS1zbGlkZS10b10nLCBjbGlja0hhbmRsZXIpXHJcblxyXG4gICQod2luZG93KS5vbignbG9hZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICQoJ1tkYXRhLXJpZGU9XCJjYXJvdXNlbFwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJGNhcm91c2VsID0gJCh0aGlzKVxyXG4gICAgICBQbHVnaW4uY2FsbCgkY2Fyb3VzZWwsICRjYXJvdXNlbC5kYXRhKCkpXHJcbiAgICB9KVxyXG4gIH0pXHJcblxyXG59KGpRdWVyeSk7XHJcbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKiBCb290c3RyYXA6IGNvbGxhcHNlLmpzIHYzLjMuNVxyXG4gKiBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9qYXZhc2NyaXB0LyNjb2xsYXBzZVxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xyXG5cclxuXHJcbitmdW5jdGlvbiAoJCkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuXHJcbiAgLy8gQ09MTEFQU0UgUFVCTElDIENMQVNTIERFRklOSVRJT05cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICB2YXIgQ29sbGFwc2UgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xyXG4gICAgdGhpcy4kZWxlbWVudCAgICAgID0gJChlbGVtZW50KVxyXG4gICAgdGhpcy5vcHRpb25zICAgICAgID0gJC5leHRlbmQoe30sIENvbGxhcHNlLkRFRkFVTFRTLCBvcHRpb25zKVxyXG4gICAgdGhpcy4kdHJpZ2dlciAgICAgID0gJCgnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1baHJlZj1cIiMnICsgZWxlbWVudC5pZCArICdcIl0sJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdbZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXVtkYXRhLXRhcmdldD1cIiMnICsgZWxlbWVudC5pZCArICdcIl0nKVxyXG4gICAgdGhpcy50cmFuc2l0aW9uaW5nID0gbnVsbFxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMucGFyZW50KSB7XHJcbiAgICAgIHRoaXMuJHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50KClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuJGVsZW1lbnQsIHRoaXMuJHRyaWdnZXIpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy50b2dnbGUpIHRoaXMudG9nZ2xlKClcclxuICB9XHJcblxyXG4gIENvbGxhcHNlLlZFUlNJT04gID0gJzMuMy41J1xyXG5cclxuICBDb2xsYXBzZS5UUkFOU0lUSU9OX0RVUkFUSU9OID0gMzUwXHJcblxyXG4gIENvbGxhcHNlLkRFRkFVTFRTID0ge1xyXG4gICAgdG9nZ2xlOiB0cnVlXHJcbiAgfVxyXG5cclxuICBDb2xsYXBzZS5wcm90b3R5cGUuZGltZW5zaW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGhhc1dpZHRoID0gdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnd2lkdGgnKVxyXG4gICAgcmV0dXJuIGhhc1dpZHRoID8gJ3dpZHRoJyA6ICdoZWlnaHQnXHJcbiAgfVxyXG5cclxuICBDb2xsYXBzZS5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb25pbmcgfHwgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnaW4nKSkgcmV0dXJuXHJcblxyXG4gICAgdmFyIGFjdGl2ZXNEYXRhXHJcbiAgICB2YXIgYWN0aXZlcyA9IHRoaXMuJHBhcmVudCAmJiB0aGlzLiRwYXJlbnQuY2hpbGRyZW4oJy5wYW5lbCcpLmNoaWxkcmVuKCcuaW4sIC5jb2xsYXBzaW5nJylcclxuXHJcbiAgICBpZiAoYWN0aXZlcyAmJiBhY3RpdmVzLmxlbmd0aCkge1xyXG4gICAgICBhY3RpdmVzRGF0YSA9IGFjdGl2ZXMuZGF0YSgnYnMuY29sbGFwc2UnKVxyXG4gICAgICBpZiAoYWN0aXZlc0RhdGEgJiYgYWN0aXZlc0RhdGEudHJhbnNpdGlvbmluZykgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHN0YXJ0RXZlbnQgPSAkLkV2ZW50KCdzaG93LmJzLmNvbGxhcHNlJylcclxuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihzdGFydEV2ZW50KVxyXG4gICAgaWYgKHN0YXJ0RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxyXG5cclxuICAgIGlmIChhY3RpdmVzICYmIGFjdGl2ZXMubGVuZ3RoKSB7XHJcbiAgICAgIFBsdWdpbi5jYWxsKGFjdGl2ZXMsICdoaWRlJylcclxuICAgICAgYWN0aXZlc0RhdGEgfHwgYWN0aXZlcy5kYXRhKCdicy5jb2xsYXBzZScsIG51bGwpXHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGRpbWVuc2lvbiA9IHRoaXMuZGltZW5zaW9uKClcclxuXHJcbiAgICB0aGlzLiRlbGVtZW50XHJcbiAgICAgIC5yZW1vdmVDbGFzcygnY29sbGFwc2UnKVxyXG4gICAgICAuYWRkQ2xhc3MoJ2NvbGxhcHNpbmcnKVtkaW1lbnNpb25dKDApXHJcbiAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSlcclxuXHJcbiAgICB0aGlzLiR0cmlnZ2VyXHJcbiAgICAgIC5yZW1vdmVDbGFzcygnY29sbGFwc2VkJylcclxuICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKVxyXG5cclxuICAgIHRoaXMudHJhbnNpdGlvbmluZyA9IDFcclxuXHJcbiAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHRoaXMuJGVsZW1lbnRcclxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNpbmcnKVxyXG4gICAgICAgIC5hZGRDbGFzcygnY29sbGFwc2UgaW4nKVtkaW1lbnNpb25dKCcnKVxyXG4gICAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSAwXHJcbiAgICAgIHRoaXMuJGVsZW1lbnRcclxuICAgICAgICAudHJpZ2dlcignc2hvd24uYnMuY29sbGFwc2UnKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghJC5zdXBwb3J0LnRyYW5zaXRpb24pIHJldHVybiBjb21wbGV0ZS5jYWxsKHRoaXMpXHJcblxyXG4gICAgdmFyIHNjcm9sbFNpemUgPSAkLmNhbWVsQ2FzZShbJ3Njcm9sbCcsIGRpbWVuc2lvbl0uam9pbignLScpKVxyXG5cclxuICAgIHRoaXMuJGVsZW1lbnRcclxuICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgJC5wcm94eShjb21wbGV0ZSwgdGhpcykpXHJcbiAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChDb2xsYXBzZS5UUkFOU0lUSU9OX0RVUkFUSU9OKVtkaW1lbnNpb25dKHRoaXMuJGVsZW1lbnRbMF1bc2Nyb2xsU2l6ZV0pXHJcbiAgfVxyXG5cclxuICBDb2xsYXBzZS5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zaXRpb25pbmcgfHwgIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2luJykpIHJldHVyblxyXG5cclxuICAgIHZhciBzdGFydEV2ZW50ID0gJC5FdmVudCgnaGlkZS5icy5jb2xsYXBzZScpXHJcbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoc3RhcnRFdmVudClcclxuICAgIGlmIChzdGFydEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm5cclxuXHJcbiAgICB2YXIgZGltZW5zaW9uID0gdGhpcy5kaW1lbnNpb24oKVxyXG5cclxuICAgIHRoaXMuJGVsZW1lbnRbZGltZW5zaW9uXSh0aGlzLiRlbGVtZW50W2RpbWVuc2lvbl0oKSlbMF0ub2Zmc2V0SGVpZ2h0XHJcblxyXG4gICAgdGhpcy4kZWxlbWVudFxyXG4gICAgICAuYWRkQ2xhc3MoJ2NvbGxhcHNpbmcnKVxyXG4gICAgICAucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNlIGluJylcclxuICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSlcclxuXHJcbiAgICB0aGlzLiR0cmlnZ2VyXHJcbiAgICAgIC5hZGRDbGFzcygnY29sbGFwc2VkJylcclxuICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSlcclxuXHJcbiAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSAxXHJcblxyXG4gICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSAwXHJcbiAgICAgIHRoaXMuJGVsZW1lbnRcclxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNpbmcnKVxyXG4gICAgICAgIC5hZGRDbGFzcygnY29sbGFwc2UnKVxyXG4gICAgICAgIC50cmlnZ2VyKCdoaWRkZW4uYnMuY29sbGFwc2UnKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghJC5zdXBwb3J0LnRyYW5zaXRpb24pIHJldHVybiBjb21wbGV0ZS5jYWxsKHRoaXMpXHJcblxyXG4gICAgdGhpcy4kZWxlbWVudFxyXG4gICAgICBbZGltZW5zaW9uXSgwKVxyXG4gICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCAkLnByb3h5KGNvbXBsZXRlLCB0aGlzKSlcclxuICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKENvbGxhcHNlLlRSQU5TSVRJT05fRFVSQVRJT04pXHJcbiAgfVxyXG5cclxuICBDb2xsYXBzZS5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpc1t0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdpbicpID8gJ2hpZGUnIDogJ3Nob3cnXSgpXHJcbiAgfVxyXG5cclxuICBDb2xsYXBzZS5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuICQodGhpcy5vcHRpb25zLnBhcmVudClcclxuICAgICAgLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2RhdGEtcGFyZW50PVwiJyArIHRoaXMub3B0aW9ucy5wYXJlbnQgKyAnXCJdJylcclxuICAgICAgLmVhY2goJC5wcm94eShmdW5jdGlvbiAoaSwgZWxlbWVudCkge1xyXG4gICAgICAgIHZhciAkZWxlbWVudCA9ICQoZWxlbWVudClcclxuICAgICAgICB0aGlzLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhnZXRUYXJnZXRGcm9tVHJpZ2dlcigkZWxlbWVudCksICRlbGVtZW50KVxyXG4gICAgICB9LCB0aGlzKSlcclxuICAgICAgLmVuZCgpXHJcbiAgfVxyXG5cclxuICBDb2xsYXBzZS5wcm90b3R5cGUuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzID0gZnVuY3Rpb24gKCRlbGVtZW50LCAkdHJpZ2dlcikge1xyXG4gICAgdmFyIGlzT3BlbiA9ICRlbGVtZW50Lmhhc0NsYXNzKCdpbicpXHJcblxyXG4gICAgJGVsZW1lbnQuYXR0cignYXJpYS1leHBhbmRlZCcsIGlzT3BlbilcclxuICAgICR0cmlnZ2VyXHJcbiAgICAgIC50b2dnbGVDbGFzcygnY29sbGFwc2VkJywgIWlzT3BlbilcclxuICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBpc09wZW4pXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRUYXJnZXRGcm9tVHJpZ2dlcigkdHJpZ2dlcikge1xyXG4gICAgdmFyIGhyZWZcclxuICAgIHZhciB0YXJnZXQgPSAkdHJpZ2dlci5hdHRyKCdkYXRhLXRhcmdldCcpXHJcbiAgICAgIHx8IChocmVmID0gJHRyaWdnZXIuYXR0cignaHJlZicpKSAmJiBocmVmLnJlcGxhY2UoLy4qKD89I1teXFxzXSskKS8sICcnKSAvLyBzdHJpcCBmb3IgaWU3XHJcblxyXG4gICAgcmV0dXJuICQodGFyZ2V0KVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIENPTExBUFNFIFBMVUdJTiBERUZJTklUSU9OXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xyXG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKVxyXG4gICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLmNvbGxhcHNlJylcclxuICAgICAgdmFyIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgQ29sbGFwc2UuREVGQVVMVFMsICR0aGlzLmRhdGEoKSwgdHlwZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBvcHRpb24pXHJcblxyXG4gICAgICBpZiAoIWRhdGEgJiYgb3B0aW9ucy50b2dnbGUgJiYgL3Nob3d8aGlkZS8udGVzdChvcHRpb24pKSBvcHRpb25zLnRvZ2dsZSA9IGZhbHNlXHJcbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuY29sbGFwc2UnLCAoZGF0YSA9IG5ldyBDb2xsYXBzZSh0aGlzLCBvcHRpb25zKSkpXHJcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0oKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHZhciBvbGQgPSAkLmZuLmNvbGxhcHNlXHJcblxyXG4gICQuZm4uY29sbGFwc2UgICAgICAgICAgICAgPSBQbHVnaW5cclxuICAkLmZuLmNvbGxhcHNlLkNvbnN0cnVjdG9yID0gQ29sbGFwc2VcclxuXHJcblxyXG4gIC8vIENPTExBUFNFIE5PIENPTkZMSUNUXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgJC5mbi5jb2xsYXBzZS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgJC5mbi5jb2xsYXBzZSA9IG9sZFxyXG4gICAgcmV0dXJuIHRoaXNcclxuICB9XHJcblxyXG5cclxuICAvLyBDT0xMQVBTRSBEQVRBLUFQSVxyXG4gIC8vID09PT09PT09PT09PT09PT09XHJcblxyXG4gICQoZG9jdW1lbnQpLm9uKCdjbGljay5icy5jb2xsYXBzZS5kYXRhLWFwaScsICdbZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXScsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICB2YXIgJHRoaXMgICA9ICQodGhpcylcclxuXHJcbiAgICBpZiAoISR0aGlzLmF0dHIoJ2RhdGEtdGFyZ2V0JykpIGUucHJldmVudERlZmF1bHQoKVxyXG5cclxuICAgIHZhciAkdGFyZ2V0ID0gZ2V0VGFyZ2V0RnJvbVRyaWdnZXIoJHRoaXMpXHJcbiAgICB2YXIgZGF0YSAgICA9ICR0YXJnZXQuZGF0YSgnYnMuY29sbGFwc2UnKVxyXG4gICAgdmFyIG9wdGlvbiAgPSBkYXRhID8gJ3RvZ2dsZScgOiAkdGhpcy5kYXRhKClcclxuXHJcbiAgICBQbHVnaW4uY2FsbCgkdGFyZ2V0LCBvcHRpb24pXHJcbiAgfSlcclxuXHJcbn0oalF1ZXJ5KTtcclxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIEJvb3RzdHJhcDogZHJvcGRvd24uanMgdjMuMy41XHJcbiAqIGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2phdmFzY3JpcHQvI2Ryb3Bkb3duc1xyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xyXG5cclxuXHJcbitmdW5jdGlvbiAoJCkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuXHJcbiAgLy8gRFJPUERPV04gQ0xBU1MgREVGSU5JVElPTlxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgdmFyIGJhY2tkcm9wID0gJy5kcm9wZG93bi1iYWNrZHJvcCdcclxuICB2YXIgdG9nZ2xlICAgPSAnW2RhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIl0nXHJcbiAgdmFyIERyb3Bkb3duID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICQoZWxlbWVudCkub24oJ2NsaWNrLmJzLmRyb3Bkb3duJywgdGhpcy50b2dnbGUpXHJcbiAgfVxyXG5cclxuICBEcm9wZG93bi5WRVJTSU9OID0gJzMuMy41J1xyXG5cclxuICBmdW5jdGlvbiBnZXRQYXJlbnQoJHRoaXMpIHtcclxuICAgIHZhciBzZWxlY3RvciA9ICR0aGlzLmF0dHIoJ2RhdGEtdGFyZ2V0JylcclxuXHJcbiAgICBpZiAoIXNlbGVjdG9yKSB7XHJcbiAgICAgIHNlbGVjdG9yID0gJHRoaXMuYXR0cignaHJlZicpXHJcbiAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IgJiYgLyNbQS1aYS16XS8udGVzdChzZWxlY3RvcikgJiYgc2VsZWN0b3IucmVwbGFjZSgvLiooPz0jW15cXHNdKiQpLywgJycpIC8vIHN0cmlwIGZvciBpZTdcclxuICAgIH1cclxuXHJcbiAgICB2YXIgJHBhcmVudCA9IHNlbGVjdG9yICYmICQoc2VsZWN0b3IpXHJcblxyXG4gICAgcmV0dXJuICRwYXJlbnQgJiYgJHBhcmVudC5sZW5ndGggPyAkcGFyZW50IDogJHRoaXMucGFyZW50KClcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNsZWFyTWVudXMoZSkge1xyXG4gICAgaWYgKGUgJiYgZS53aGljaCA9PT0gMykgcmV0dXJuXHJcbiAgICAkKGJhY2tkcm9wKS5yZW1vdmUoKVxyXG4gICAgJCh0b2dnbGUpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJHRoaXMgICAgICAgICA9ICQodGhpcylcclxuICAgICAgdmFyICRwYXJlbnQgICAgICAgPSBnZXRQYXJlbnQoJHRoaXMpXHJcbiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0geyByZWxhdGVkVGFyZ2V0OiB0aGlzIH1cclxuXHJcbiAgICAgIGlmICghJHBhcmVudC5oYXNDbGFzcygnb3BlbicpKSByZXR1cm5cclxuXHJcbiAgICAgIGlmIChlICYmIGUudHlwZSA9PSAnY2xpY2snICYmIC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZS50YXJnZXQudGFnTmFtZSkgJiYgJC5jb250YWlucygkcGFyZW50WzBdLCBlLnRhcmdldCkpIHJldHVyblxyXG5cclxuICAgICAgJHBhcmVudC50cmlnZ2VyKGUgPSAkLkV2ZW50KCdoaWRlLmJzLmRyb3Bkb3duJywgcmVsYXRlZFRhcmdldCkpXHJcblxyXG4gICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuXHJcblxyXG4gICAgICAkdGhpcy5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJylcclxuICAgICAgJHBhcmVudC5yZW1vdmVDbGFzcygnb3BlbicpLnRyaWdnZXIoJ2hpZGRlbi5icy5kcm9wZG93bicsIHJlbGF0ZWRUYXJnZXQpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgRHJvcGRvd24ucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICB2YXIgJHRoaXMgPSAkKHRoaXMpXHJcblxyXG4gICAgaWYgKCR0aGlzLmlzKCcuZGlzYWJsZWQsIDpkaXNhYmxlZCcpKSByZXR1cm5cclxuXHJcbiAgICB2YXIgJHBhcmVudCAgPSBnZXRQYXJlbnQoJHRoaXMpXHJcbiAgICB2YXIgaXNBY3RpdmUgPSAkcGFyZW50Lmhhc0NsYXNzKCdvcGVuJylcclxuXHJcbiAgICBjbGVhck1lbnVzKClcclxuXHJcbiAgICBpZiAoIWlzQWN0aXZlKSB7XHJcbiAgICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgISRwYXJlbnQuY2xvc2VzdCgnLm5hdmJhci1uYXYnKS5sZW5ndGgpIHtcclxuICAgICAgICAvLyBpZiBtb2JpbGUgd2UgdXNlIGEgYmFja2Ryb3AgYmVjYXVzZSBjbGljayBldmVudHMgZG9uJ3QgZGVsZWdhdGVcclxuICAgICAgICAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKVxyXG4gICAgICAgICAgLmFkZENsYXNzKCdkcm9wZG93bi1iYWNrZHJvcCcpXHJcbiAgICAgICAgICAuaW5zZXJ0QWZ0ZXIoJCh0aGlzKSlcclxuICAgICAgICAgIC5vbignY2xpY2snLCBjbGVhck1lbnVzKVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IHsgcmVsYXRlZFRhcmdldDogdGhpcyB9XHJcbiAgICAgICRwYXJlbnQudHJpZ2dlcihlID0gJC5FdmVudCgnc2hvdy5icy5kcm9wZG93bicsIHJlbGF0ZWRUYXJnZXQpKVxyXG5cclxuICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxyXG5cclxuICAgICAgJHRoaXNcclxuICAgICAgICAudHJpZ2dlcignZm9jdXMnKVxyXG4gICAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKVxyXG5cclxuICAgICAgJHBhcmVudFxyXG4gICAgICAgIC50b2dnbGVDbGFzcygnb3BlbicpXHJcbiAgICAgICAgLnRyaWdnZXIoJ3Nob3duLmJzLmRyb3Bkb3duJywgcmVsYXRlZFRhcmdldClcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIERyb3Bkb3duLnByb3RvdHlwZS5rZXlkb3duID0gZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmICghLygzOHw0MHwyN3wzMikvLnRlc3QoZS53aGljaCkgfHwgL2lucHV0fHRleHRhcmVhL2kudGVzdChlLnRhcmdldC50YWdOYW1lKSkgcmV0dXJuXHJcblxyXG4gICAgdmFyICR0aGlzID0gJCh0aGlzKVxyXG5cclxuICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxyXG5cclxuICAgIGlmICgkdGhpcy5pcygnLmRpc2FibGVkLCA6ZGlzYWJsZWQnKSkgcmV0dXJuXHJcblxyXG4gICAgdmFyICRwYXJlbnQgID0gZ2V0UGFyZW50KCR0aGlzKVxyXG4gICAgdmFyIGlzQWN0aXZlID0gJHBhcmVudC5oYXNDbGFzcygnb3BlbicpXHJcblxyXG4gICAgaWYgKCFpc0FjdGl2ZSAmJiBlLndoaWNoICE9IDI3IHx8IGlzQWN0aXZlICYmIGUud2hpY2ggPT0gMjcpIHtcclxuICAgICAgaWYgKGUud2hpY2ggPT0gMjcpICRwYXJlbnQuZmluZCh0b2dnbGUpLnRyaWdnZXIoJ2ZvY3VzJylcclxuICAgICAgcmV0dXJuICR0aGlzLnRyaWdnZXIoJ2NsaWNrJylcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGVzYyA9ICcgbGk6bm90KC5kaXNhYmxlZCk6dmlzaWJsZSBhJ1xyXG4gICAgdmFyICRpdGVtcyA9ICRwYXJlbnQuZmluZCgnLmRyb3Bkb3duLW1lbnUnICsgZGVzYylcclxuXHJcbiAgICBpZiAoISRpdGVtcy5sZW5ndGgpIHJldHVyblxyXG5cclxuICAgIHZhciBpbmRleCA9ICRpdGVtcy5pbmRleChlLnRhcmdldClcclxuXHJcbiAgICBpZiAoZS53aGljaCA9PSAzOCAmJiBpbmRleCA+IDApICAgICAgICAgICAgICAgICBpbmRleC0tICAgICAgICAgLy8gdXBcclxuICAgIGlmIChlLndoaWNoID09IDQwICYmIGluZGV4IDwgJGl0ZW1zLmxlbmd0aCAtIDEpIGluZGV4KysgICAgICAgICAvLyBkb3duXHJcbiAgICBpZiAoIX5pbmRleCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IDBcclxuXHJcbiAgICAkaXRlbXMuZXEoaW5kZXgpLnRyaWdnZXIoJ2ZvY3VzJylcclxuICB9XHJcblxyXG5cclxuICAvLyBEUk9QRE9XTiBQTFVHSU4gREVGSU5JVElPTlxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIGZ1bmN0aW9uIFBsdWdpbihvcHRpb24pIHtcclxuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpXHJcbiAgICAgIHZhciBkYXRhICA9ICR0aGlzLmRhdGEoJ2JzLmRyb3Bkb3duJylcclxuXHJcbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuZHJvcGRvd24nLCAoZGF0YSA9IG5ldyBEcm9wZG93bih0aGlzKSkpXHJcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0uY2FsbCgkdGhpcylcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB2YXIgb2xkID0gJC5mbi5kcm9wZG93blxyXG5cclxuICAkLmZuLmRyb3Bkb3duICAgICAgICAgICAgID0gUGx1Z2luXHJcbiAgJC5mbi5kcm9wZG93bi5Db25zdHJ1Y3RvciA9IERyb3Bkb3duXHJcblxyXG5cclxuICAvLyBEUk9QRE9XTiBOTyBDT05GTElDVFxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICQuZm4uZHJvcGRvd24ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICQuZm4uZHJvcGRvd24gPSBvbGRcclxuICAgIHJldHVybiB0aGlzXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQVBQTFkgVE8gU1RBTkRBUkQgRFJPUERPV04gRUxFTUVOVFNcclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAkKGRvY3VtZW50KVxyXG4gICAgLm9uKCdjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaScsIGNsZWFyTWVudXMpXHJcbiAgICAub24oJ2NsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpJywgJy5kcm9wZG93biBmb3JtJywgZnVuY3Rpb24gKGUpIHsgZS5zdG9wUHJvcGFnYXRpb24oKSB9KVxyXG4gICAgLm9uKCdjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaScsIHRvZ2dsZSwgRHJvcGRvd24ucHJvdG90eXBlLnRvZ2dsZSlcclxuICAgIC5vbigna2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaScsIHRvZ2dsZSwgRHJvcGRvd24ucHJvdG90eXBlLmtleWRvd24pXHJcbiAgICAub24oJ2tleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGknLCAnLmRyb3Bkb3duLW1lbnUnLCBEcm9wZG93bi5wcm90b3R5cGUua2V5ZG93bilcclxuXHJcbn0oalF1ZXJ5KTtcclxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIEJvb3RzdHJhcDogbW9kYWwuanMgdjMuMy41XHJcbiAqIGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2phdmFzY3JpcHQvI21vZGFsc1xyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xyXG5cclxuXHJcbitmdW5jdGlvbiAoJCkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuXHJcbiAgLy8gTU9EQUwgQ0xBU1MgREVGSU5JVElPTlxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgdmFyIE1vZGFsID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHtcclxuICAgIHRoaXMub3B0aW9ucyAgICAgICAgICAgICA9IG9wdGlvbnNcclxuICAgIHRoaXMuJGJvZHkgICAgICAgICAgICAgICA9ICQoZG9jdW1lbnQuYm9keSlcclxuICAgIHRoaXMuJGVsZW1lbnQgICAgICAgICAgICA9ICQoZWxlbWVudClcclxuICAgIHRoaXMuJGRpYWxvZyAgICAgICAgICAgICA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLm1vZGFsLWRpYWxvZycpXHJcbiAgICB0aGlzLiRiYWNrZHJvcCAgICAgICAgICAgPSBudWxsXHJcbiAgICB0aGlzLmlzU2hvd24gICAgICAgICAgICAgPSBudWxsXHJcbiAgICB0aGlzLm9yaWdpbmFsQm9keVBhZCAgICAgPSBudWxsXHJcbiAgICB0aGlzLnNjcm9sbGJhcldpZHRoICAgICAgPSAwXHJcbiAgICB0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2sgPSBmYWxzZVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMucmVtb3RlKSB7XHJcbiAgICAgIHRoaXMuJGVsZW1lbnRcclxuICAgICAgICAuZmluZCgnLm1vZGFsLWNvbnRlbnQnKVxyXG4gICAgICAgIC5sb2FkKHRoaXMub3B0aW9ucy5yZW1vdGUsICQucHJveHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdsb2FkZWQuYnMubW9kYWwnKVxyXG4gICAgICAgIH0sIHRoaXMpKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgTW9kYWwuVkVSU0lPTiAgPSAnMy4zLjUnXHJcblxyXG4gIE1vZGFsLlRSQU5TSVRJT05fRFVSQVRJT04gPSAzMDBcclxuICBNb2RhbC5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OID0gMTUwXHJcblxyXG4gIE1vZGFsLkRFRkFVTFRTID0ge1xyXG4gICAgYmFja2Ryb3A6IHRydWUsXHJcbiAgICBrZXlib2FyZDogdHJ1ZSxcclxuICAgIHNob3c6IHRydWVcclxuICB9XHJcblxyXG4gIE1vZGFsLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAoX3JlbGF0ZWRUYXJnZXQpIHtcclxuICAgIHJldHVybiB0aGlzLmlzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhfcmVsYXRlZFRhcmdldClcclxuICB9XHJcblxyXG4gIE1vZGFsLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKF9yZWxhdGVkVGFyZ2V0KSB7XHJcbiAgICB2YXIgdGhhdCA9IHRoaXNcclxuICAgIHZhciBlICAgID0gJC5FdmVudCgnc2hvdy5icy5tb2RhbCcsIHsgcmVsYXRlZFRhcmdldDogX3JlbGF0ZWRUYXJnZXQgfSlcclxuXHJcbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSlcclxuXHJcbiAgICBpZiAodGhpcy5pc1Nob3duIHx8IGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxyXG5cclxuICAgIHRoaXMuaXNTaG93biA9IHRydWVcclxuXHJcbiAgICB0aGlzLmNoZWNrU2Nyb2xsYmFyKClcclxuICAgIHRoaXMuc2V0U2Nyb2xsYmFyKClcclxuICAgIHRoaXMuJGJvZHkuYWRkQ2xhc3MoJ21vZGFsLW9wZW4nKVxyXG5cclxuICAgIHRoaXMuZXNjYXBlKClcclxuICAgIHRoaXMucmVzaXplKClcclxuXHJcbiAgICB0aGlzLiRlbGVtZW50Lm9uKCdjbGljay5kaXNtaXNzLmJzLm1vZGFsJywgJ1tkYXRhLWRpc21pc3M9XCJtb2RhbFwiXScsICQucHJveHkodGhpcy5oaWRlLCB0aGlzKSlcclxuXHJcbiAgICB0aGlzLiRkaWFsb2cub24oJ21vdXNlZG93bi5kaXNtaXNzLmJzLm1vZGFsJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICB0aGF0LiRlbGVtZW50Lm9uZSgnbW91c2V1cC5kaXNtaXNzLmJzLm1vZGFsJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoJChlLnRhcmdldCkuaXModGhhdC4kZWxlbWVudCkpIHRoYXQuaWdub3JlQmFja2Ryb3BDbGljayA9IHRydWVcclxuICAgICAgfSlcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5iYWNrZHJvcChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciB0cmFuc2l0aW9uID0gJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhhdC4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScpXHJcblxyXG4gICAgICBpZiAoIXRoYXQuJGVsZW1lbnQucGFyZW50KCkubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhhdC4kZWxlbWVudC5hcHBlbmRUbyh0aGF0LiRib2R5KSAvLyBkb24ndCBtb3ZlIG1vZGFscyBkb20gcG9zaXRpb25cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhhdC4kZWxlbWVudFxyXG4gICAgICAgIC5zaG93KClcclxuICAgICAgICAuc2Nyb2xsVG9wKDApXHJcblxyXG4gICAgICB0aGF0LmFkanVzdERpYWxvZygpXHJcblxyXG4gICAgICBpZiAodHJhbnNpdGlvbikge1xyXG4gICAgICAgIHRoYXQuJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGggLy8gZm9yY2UgcmVmbG93XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoYXQuJGVsZW1lbnQuYWRkQ2xhc3MoJ2luJylcclxuXHJcbiAgICAgIHRoYXQuZW5mb3JjZUZvY3VzKClcclxuXHJcbiAgICAgIHZhciBlID0gJC5FdmVudCgnc2hvd24uYnMubW9kYWwnLCB7IHJlbGF0ZWRUYXJnZXQ6IF9yZWxhdGVkVGFyZ2V0IH0pXHJcblxyXG4gICAgICB0cmFuc2l0aW9uID9cclxuICAgICAgICB0aGF0LiRkaWFsb2cgLy8gd2FpdCBmb3IgbW9kYWwgdG8gc2xpZGUgaW5cclxuICAgICAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhhdC4kZWxlbWVudC50cmlnZ2VyKCdmb2N1cycpLnRyaWdnZXIoZSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoTW9kYWwuVFJBTlNJVElPTl9EVVJBVElPTikgOlxyXG4gICAgICAgIHRoYXQuJGVsZW1lbnQudHJpZ2dlcignZm9jdXMnKS50cmlnZ2VyKGUpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgTW9kYWwucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKGUpIGUucHJldmVudERlZmF1bHQoKVxyXG5cclxuICAgIGUgPSAkLkV2ZW50KCdoaWRlLmJzLm1vZGFsJylcclxuXHJcbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSlcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNTaG93biB8fCBlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm5cclxuXHJcbiAgICB0aGlzLmlzU2hvd24gPSBmYWxzZVxyXG5cclxuICAgIHRoaXMuZXNjYXBlKClcclxuICAgIHRoaXMucmVzaXplKClcclxuXHJcbiAgICAkKGRvY3VtZW50KS5vZmYoJ2ZvY3VzaW4uYnMubW9kYWwnKVxyXG5cclxuICAgIHRoaXMuJGVsZW1lbnRcclxuICAgICAgLnJlbW92ZUNsYXNzKCdpbicpXHJcbiAgICAgIC5vZmYoJ2NsaWNrLmRpc21pc3MuYnMubW9kYWwnKVxyXG4gICAgICAub2ZmKCdtb3VzZXVwLmRpc21pc3MuYnMubW9kYWwnKVxyXG5cclxuICAgIHRoaXMuJGRpYWxvZy5vZmYoJ21vdXNlZG93bi5kaXNtaXNzLmJzLm1vZGFsJylcclxuXHJcbiAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJykgP1xyXG4gICAgICB0aGlzLiRlbGVtZW50XHJcbiAgICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgJC5wcm94eSh0aGlzLmhpZGVNb2RhbCwgdGhpcykpXHJcbiAgICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKE1vZGFsLlRSQU5TSVRJT05fRFVSQVRJT04pIDpcclxuICAgICAgdGhpcy5oaWRlTW9kYWwoKVxyXG4gIH1cclxuXHJcbiAgTW9kYWwucHJvdG90eXBlLmVuZm9yY2VGb2N1cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICQoZG9jdW1lbnQpXHJcbiAgICAgIC5vZmYoJ2ZvY3VzaW4uYnMubW9kYWwnKSAvLyBndWFyZCBhZ2FpbnN0IGluZmluaXRlIGZvY3VzIGxvb3BcclxuICAgICAgLm9uKCdmb2N1c2luLmJzLm1vZGFsJywgJC5wcm94eShmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmICh0aGlzLiRlbGVtZW50WzBdICE9PSBlLnRhcmdldCAmJiAhdGhpcy4kZWxlbWVudC5oYXMoZS50YXJnZXQpLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdmb2N1cycpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB0aGlzKSlcclxuICB9XHJcblxyXG4gIE1vZGFsLnByb3RvdHlwZS5lc2NhcGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodGhpcy5pc1Nob3duICYmIHRoaXMub3B0aW9ucy5rZXlib2FyZCkge1xyXG4gICAgICB0aGlzLiRlbGVtZW50Lm9uKCdrZXlkb3duLmRpc21pc3MuYnMubW9kYWwnLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS53aGljaCA9PSAyNyAmJiB0aGlzLmhpZGUoKVxyXG4gICAgICB9LCB0aGlzKSlcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNTaG93bikge1xyXG4gICAgICB0aGlzLiRlbGVtZW50Lm9mZigna2V5ZG93bi5kaXNtaXNzLmJzLm1vZGFsJylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIE1vZGFsLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodGhpcy5pc1Nob3duKSB7XHJcbiAgICAgICQod2luZG93KS5vbigncmVzaXplLmJzLm1vZGFsJywgJC5wcm94eSh0aGlzLmhhbmRsZVVwZGF0ZSwgdGhpcykpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAkKHdpbmRvdykub2ZmKCdyZXNpemUuYnMubW9kYWwnKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgTW9kYWwucHJvdG90eXBlLmhpZGVNb2RhbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB0aGF0ID0gdGhpc1xyXG4gICAgdGhpcy4kZWxlbWVudC5oaWRlKClcclxuICAgIHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24gKCkge1xyXG4gICAgICB0aGF0LiRib2R5LnJlbW92ZUNsYXNzKCdtb2RhbC1vcGVuJylcclxuICAgICAgdGhhdC5yZXNldEFkanVzdG1lbnRzKClcclxuICAgICAgdGhhdC5yZXNldFNjcm9sbGJhcigpXHJcbiAgICAgIHRoYXQuJGVsZW1lbnQudHJpZ2dlcignaGlkZGVuLmJzLm1vZGFsJylcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBNb2RhbC5wcm90b3R5cGUucmVtb3ZlQmFja2Ryb3AgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLiRiYWNrZHJvcCAmJiB0aGlzLiRiYWNrZHJvcC5yZW1vdmUoKVxyXG4gICAgdGhpcy4kYmFja2Ryb3AgPSBudWxsXHJcbiAgfVxyXG5cclxuICBNb2RhbC5wcm90b3R5cGUuYmFja2Ryb3AgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgIHZhciB0aGF0ID0gdGhpc1xyXG4gICAgdmFyIGFuaW1hdGUgPSB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJykgPyAnZmFkZScgOiAnJ1xyXG5cclxuICAgIGlmICh0aGlzLmlzU2hvd24gJiYgdGhpcy5vcHRpb25zLmJhY2tkcm9wKSB7XHJcbiAgICAgIHZhciBkb0FuaW1hdGUgPSAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiBhbmltYXRlXHJcblxyXG4gICAgICB0aGlzLiRiYWNrZHJvcCA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpXHJcbiAgICAgICAgLmFkZENsYXNzKCdtb2RhbC1iYWNrZHJvcCAnICsgYW5pbWF0ZSlcclxuICAgICAgICAuYXBwZW5kVG8odGhpcy4kYm9keSlcclxuXHJcbiAgICAgIHRoaXMuJGVsZW1lbnQub24oJ2NsaWNrLmRpc21pc3MuYnMubW9kYWwnLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaWdub3JlQmFja2Ryb3BDbGljaykge1xyXG4gICAgICAgICAgdGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2VcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZS50YXJnZXQgIT09IGUuY3VycmVudFRhcmdldCkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmJhY2tkcm9wID09ICdzdGF0aWMnXHJcbiAgICAgICAgICA/IHRoaXMuJGVsZW1lbnRbMF0uZm9jdXMoKVxyXG4gICAgICAgICAgOiB0aGlzLmhpZGUoKVxyXG4gICAgICB9LCB0aGlzKSlcclxuXHJcbiAgICAgIGlmIChkb0FuaW1hdGUpIHRoaXMuJGJhY2tkcm9wWzBdLm9mZnNldFdpZHRoIC8vIGZvcmNlIHJlZmxvd1xyXG5cclxuICAgICAgdGhpcy4kYmFja2Ryb3AuYWRkQ2xhc3MoJ2luJylcclxuXHJcbiAgICAgIGlmICghY2FsbGJhY2spIHJldHVyblxyXG5cclxuICAgICAgZG9BbmltYXRlID9cclxuICAgICAgICB0aGlzLiRiYWNrZHJvcFxyXG4gICAgICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgY2FsbGJhY2spXHJcbiAgICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoTW9kYWwuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTikgOlxyXG4gICAgICAgIGNhbGxiYWNrKClcclxuXHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzU2hvd24gJiYgdGhpcy4kYmFja2Ryb3ApIHtcclxuICAgICAgdGhpcy4kYmFja2Ryb3AucmVtb3ZlQ2xhc3MoJ2luJylcclxuXHJcbiAgICAgIHZhciBjYWxsYmFja1JlbW92ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGF0LnJlbW92ZUJhY2tkcm9wKClcclxuICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpXHJcbiAgICAgIH1cclxuICAgICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScpID9cclxuICAgICAgICB0aGlzLiRiYWNrZHJvcFxyXG4gICAgICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgY2FsbGJhY2tSZW1vdmUpXHJcbiAgICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoTW9kYWwuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTikgOlxyXG4gICAgICAgIGNhbGxiYWNrUmVtb3ZlKClcclxuXHJcbiAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgIGNhbGxiYWNrKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHRoZXNlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIGhhbmRsZSBvdmVyZmxvd2luZyBtb2RhbHNcclxuXHJcbiAgTW9kYWwucHJvdG90eXBlLmhhbmRsZVVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuYWRqdXN0RGlhbG9nKClcclxuICB9XHJcblxyXG4gIE1vZGFsLnByb3RvdHlwZS5hZGp1c3REaWFsb2cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgbW9kYWxJc092ZXJmbG93aW5nID0gdGhpcy4kZWxlbWVudFswXS5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0XHJcblxyXG4gICAgdGhpcy4kZWxlbWVudC5jc3Moe1xyXG4gICAgICBwYWRkaW5nTGVmdDogICF0aGlzLmJvZHlJc092ZXJmbG93aW5nICYmIG1vZGFsSXNPdmVyZmxvd2luZyA/IHRoaXMuc2Nyb2xsYmFyV2lkdGggOiAnJyxcclxuICAgICAgcGFkZGluZ1JpZ2h0OiB0aGlzLmJvZHlJc092ZXJmbG93aW5nICYmICFtb2RhbElzT3ZlcmZsb3dpbmcgPyB0aGlzLnNjcm9sbGJhcldpZHRoIDogJydcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBNb2RhbC5wcm90b3R5cGUucmVzZXRBZGp1c3RtZW50cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuJGVsZW1lbnQuY3NzKHtcclxuICAgICAgcGFkZGluZ0xlZnQ6ICcnLFxyXG4gICAgICBwYWRkaW5nUmlnaHQ6ICcnXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgTW9kYWwucHJvdG90eXBlLmNoZWNrU2Nyb2xsYmFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGZ1bGxXaW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXHJcbiAgICBpZiAoIWZ1bGxXaW5kb3dXaWR0aCkgeyAvLyB3b3JrYXJvdW5kIGZvciBtaXNzaW5nIHdpbmRvdy5pbm5lcldpZHRoIGluIElFOFxyXG4gICAgICB2YXIgZG9jdW1lbnRFbGVtZW50UmVjdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxyXG4gICAgICBmdWxsV2luZG93V2lkdGggPSBkb2N1bWVudEVsZW1lbnRSZWN0LnJpZ2h0IC0gTWF0aC5hYnMoZG9jdW1lbnRFbGVtZW50UmVjdC5sZWZ0KVxyXG4gICAgfVxyXG4gICAgdGhpcy5ib2R5SXNPdmVyZmxvd2luZyA9IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggPCBmdWxsV2luZG93V2lkdGhcclxuICAgIHRoaXMuc2Nyb2xsYmFyV2lkdGggPSB0aGlzLm1lYXN1cmVTY3JvbGxiYXIoKVxyXG4gIH1cclxuXHJcbiAgTW9kYWwucHJvdG90eXBlLnNldFNjcm9sbGJhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBib2R5UGFkID0gcGFyc2VJbnQoKHRoaXMuJGJvZHkuY3NzKCdwYWRkaW5nLXJpZ2h0JykgfHwgMCksIDEwKVxyXG4gICAgdGhpcy5vcmlnaW5hbEJvZHlQYWQgPSBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodCB8fCAnJ1xyXG4gICAgaWYgKHRoaXMuYm9keUlzT3ZlcmZsb3dpbmcpIHRoaXMuJGJvZHkuY3NzKCdwYWRkaW5nLXJpZ2h0JywgYm9keVBhZCArIHRoaXMuc2Nyb2xsYmFyV2lkdGgpXHJcbiAgfVxyXG5cclxuICBNb2RhbC5wcm90b3R5cGUucmVzZXRTY3JvbGxiYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLiRib2R5LmNzcygncGFkZGluZy1yaWdodCcsIHRoaXMub3JpZ2luYWxCb2R5UGFkKVxyXG4gIH1cclxuXHJcbiAgTW9kYWwucHJvdG90eXBlLm1lYXN1cmVTY3JvbGxiYXIgPSBmdW5jdGlvbiAoKSB7IC8vIHRoeCB3YWxzaFxyXG4gICAgdmFyIHNjcm9sbERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICBzY3JvbGxEaXYuY2xhc3NOYW1lID0gJ21vZGFsLXNjcm9sbGJhci1tZWFzdXJlJ1xyXG4gICAgdGhpcy4kYm9keS5hcHBlbmQoc2Nyb2xsRGl2KVxyXG4gICAgdmFyIHNjcm9sbGJhcldpZHRoID0gc2Nyb2xsRGl2Lm9mZnNldFdpZHRoIC0gc2Nyb2xsRGl2LmNsaWVudFdpZHRoXHJcbiAgICB0aGlzLiRib2R5WzBdLnJlbW92ZUNoaWxkKHNjcm9sbERpdilcclxuICAgIHJldHVybiBzY3JvbGxiYXJXaWR0aFxyXG4gIH1cclxuXHJcblxyXG4gIC8vIE1PREFMIFBMVUdJTiBERUZJTklUSU9OXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbiwgX3JlbGF0ZWRUYXJnZXQpIHtcclxuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJHRoaXMgICA9ICQodGhpcylcclxuICAgICAgdmFyIGRhdGEgICAgPSAkdGhpcy5kYXRhKCdicy5tb2RhbCcpXHJcbiAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIE1vZGFsLkRFRkFVTFRTLCAkdGhpcy5kYXRhKCksIHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uKVxyXG5cclxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy5tb2RhbCcsIChkYXRhID0gbmV3IE1vZGFsKHRoaXMsIG9wdGlvbnMpKSlcclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXShfcmVsYXRlZFRhcmdldClcclxuICAgICAgZWxzZSBpZiAob3B0aW9ucy5zaG93KSBkYXRhLnNob3coX3JlbGF0ZWRUYXJnZXQpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdmFyIG9sZCA9ICQuZm4ubW9kYWxcclxuXHJcbiAgJC5mbi5tb2RhbCAgICAgICAgICAgICA9IFBsdWdpblxyXG4gICQuZm4ubW9kYWwuQ29uc3RydWN0b3IgPSBNb2RhbFxyXG5cclxuXHJcbiAgLy8gTU9EQUwgTk8gQ09ORkxJQ1RcclxuICAvLyA9PT09PT09PT09PT09PT09PVxyXG5cclxuICAkLmZuLm1vZGFsLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAkLmZuLm1vZGFsID0gb2xkXHJcbiAgICByZXR1cm4gdGhpc1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIE1PREFMIERBVEEtQVBJXHJcbiAgLy8gPT09PT09PT09PT09PT1cclxuXHJcbiAgJChkb2N1bWVudCkub24oJ2NsaWNrLmJzLm1vZGFsLmRhdGEtYXBpJywgJ1tkYXRhLXRvZ2dsZT1cIm1vZGFsXCJdJywgZnVuY3Rpb24gKGUpIHtcclxuICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKVxyXG4gICAgdmFyIGhyZWYgICAgPSAkdGhpcy5hdHRyKCdocmVmJylcclxuICAgIHZhciAkdGFyZ2V0ID0gJCgkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpIHx8IChocmVmICYmIGhyZWYucmVwbGFjZSgvLiooPz0jW15cXHNdKyQpLywgJycpKSkgLy8gc3RyaXAgZm9yIGllN1xyXG4gICAgdmFyIG9wdGlvbiAgPSAkdGFyZ2V0LmRhdGEoJ2JzLm1vZGFsJykgPyAndG9nZ2xlJyA6ICQuZXh0ZW5kKHsgcmVtb3RlOiAhLyMvLnRlc3QoaHJlZikgJiYgaHJlZiB9LCAkdGFyZ2V0LmRhdGEoKSwgJHRoaXMuZGF0YSgpKVxyXG5cclxuICAgIGlmICgkdGhpcy5pcygnYScpKSBlLnByZXZlbnREZWZhdWx0KClcclxuXHJcbiAgICAkdGFyZ2V0Lm9uZSgnc2hvdy5icy5tb2RhbCcsIGZ1bmN0aW9uIChzaG93RXZlbnQpIHtcclxuICAgICAgaWYgKHNob3dFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuIC8vIG9ubHkgcmVnaXN0ZXIgZm9jdXMgcmVzdG9yZXIgaWYgbW9kYWwgd2lsbCBhY3R1YWxseSBnZXQgc2hvd25cclxuICAgICAgJHRhcmdldC5vbmUoJ2hpZGRlbi5icy5tb2RhbCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkdGhpcy5pcygnOnZpc2libGUnKSAmJiAkdGhpcy50cmlnZ2VyKCdmb2N1cycpXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gICAgUGx1Z2luLmNhbGwoJHRhcmdldCwgb3B0aW9uLCB0aGlzKVxyXG4gIH0pXHJcblxyXG59KGpRdWVyeSk7XHJcbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKiBCb290c3RyYXA6IHRvb2x0aXAuanMgdjMuMy41XHJcbiAqIGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2phdmFzY3JpcHQvI3Rvb2x0aXBcclxuICogSW5zcGlyZWQgYnkgdGhlIG9yaWdpbmFsIGpRdWVyeS50aXBzeSBieSBKYXNvbiBGcmFtZVxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xyXG5cclxuXHJcbitmdW5jdGlvbiAoJCkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuXHJcbiAgLy8gVE9PTFRJUCBQVUJMSUMgQ0xBU1MgREVGSU5JVElPTlxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgdmFyIFRvb2x0aXAgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xyXG4gICAgdGhpcy50eXBlICAgICAgID0gbnVsbFxyXG4gICAgdGhpcy5vcHRpb25zICAgID0gbnVsbFxyXG4gICAgdGhpcy5lbmFibGVkICAgID0gbnVsbFxyXG4gICAgdGhpcy50aW1lb3V0ICAgID0gbnVsbFxyXG4gICAgdGhpcy5ob3ZlclN0YXRlID0gbnVsbFxyXG4gICAgdGhpcy4kZWxlbWVudCAgID0gbnVsbFxyXG4gICAgdGhpcy5pblN0YXRlICAgID0gbnVsbFxyXG5cclxuICAgIHRoaXMuaW5pdCgndG9vbHRpcCcsIGVsZW1lbnQsIG9wdGlvbnMpXHJcbiAgfVxyXG5cclxuICBUb29sdGlwLlZFUlNJT04gID0gJzMuMy41J1xyXG5cclxuICBUb29sdGlwLlRSQU5TSVRJT05fRFVSQVRJT04gPSAxNTBcclxuXHJcbiAgVG9vbHRpcC5ERUZBVUxUUyA9IHtcclxuICAgIGFuaW1hdGlvbjogdHJ1ZSxcclxuICAgIHBsYWNlbWVudDogJ3RvcCcsXHJcbiAgICBzZWxlY3RvcjogZmFsc2UsXHJcbiAgICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJ0b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj48ZGl2IGNsYXNzPVwidG9vbHRpcC1hcnJvd1wiPjwvZGl2PjxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+PC9kaXY+JyxcclxuICAgIHRyaWdnZXI6ICdob3ZlciBmb2N1cycsXHJcbiAgICB0aXRsZTogJycsXHJcbiAgICBkZWxheTogMCxcclxuICAgIGh0bWw6IGZhbHNlLFxyXG4gICAgY29udGFpbmVyOiBmYWxzZSxcclxuICAgIHZpZXdwb3J0OiB7XHJcbiAgICAgIHNlbGVjdG9yOiAnYm9keScsXHJcbiAgICAgIHBhZGRpbmc6IDBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFRvb2x0aXAucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAodHlwZSwgZWxlbWVudCwgb3B0aW9ucykge1xyXG4gICAgdGhpcy5lbmFibGVkICAgPSB0cnVlXHJcbiAgICB0aGlzLnR5cGUgICAgICA9IHR5cGVcclxuICAgIHRoaXMuJGVsZW1lbnQgID0gJChlbGVtZW50KVxyXG4gICAgdGhpcy5vcHRpb25zICAgPSB0aGlzLmdldE9wdGlvbnMob3B0aW9ucylcclxuICAgIHRoaXMuJHZpZXdwb3J0ID0gdGhpcy5vcHRpb25zLnZpZXdwb3J0ICYmICQoJC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy52aWV3cG9ydCkgPyB0aGlzLm9wdGlvbnMudmlld3BvcnQuY2FsbCh0aGlzLCB0aGlzLiRlbGVtZW50KSA6ICh0aGlzLm9wdGlvbnMudmlld3BvcnQuc2VsZWN0b3IgfHwgdGhpcy5vcHRpb25zLnZpZXdwb3J0KSlcclxuICAgIHRoaXMuaW5TdGF0ZSAgID0geyBjbGljazogZmFsc2UsIGhvdmVyOiBmYWxzZSwgZm9jdXM6IGZhbHNlIH1cclxuXHJcbiAgICBpZiAodGhpcy4kZWxlbWVudFswXSBpbnN0YW5jZW9mIGRvY3VtZW50LmNvbnN0cnVjdG9yICYmICF0aGlzLm9wdGlvbnMuc2VsZWN0b3IpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgc2VsZWN0b3JgIG9wdGlvbiBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIGluaXRpYWxpemluZyAnICsgdGhpcy50eXBlICsgJyBvbiB0aGUgd2luZG93LmRvY3VtZW50IG9iamVjdCEnKVxyXG4gICAgfVxyXG5cclxuICAgIHZhciB0cmlnZ2VycyA9IHRoaXMub3B0aW9ucy50cmlnZ2VyLnNwbGl0KCcgJylcclxuXHJcbiAgICBmb3IgKHZhciBpID0gdHJpZ2dlcnMubGVuZ3RoOyBpLS07KSB7XHJcbiAgICAgIHZhciB0cmlnZ2VyID0gdHJpZ2dlcnNbaV1cclxuXHJcbiAgICAgIGlmICh0cmlnZ2VyID09ICdjbGljaycpIHtcclxuICAgICAgICB0aGlzLiRlbGVtZW50Lm9uKCdjbGljay4nICsgdGhpcy50eXBlLCB0aGlzLm9wdGlvbnMuc2VsZWN0b3IsICQucHJveHkodGhpcy50b2dnbGUsIHRoaXMpKVxyXG4gICAgICB9IGVsc2UgaWYgKHRyaWdnZXIgIT0gJ21hbnVhbCcpIHtcclxuICAgICAgICB2YXIgZXZlbnRJbiAgPSB0cmlnZ2VyID09ICdob3ZlcicgPyAnbW91c2VlbnRlcicgOiAnZm9jdXNpbidcclxuICAgICAgICB2YXIgZXZlbnRPdXQgPSB0cmlnZ2VyID09ICdob3ZlcicgPyAnbW91c2VsZWF2ZScgOiAnZm9jdXNvdXQnXHJcblxyXG4gICAgICAgIHRoaXMuJGVsZW1lbnQub24oZXZlbnRJbiAgKyAnLicgKyB0aGlzLnR5cGUsIHRoaXMub3B0aW9ucy5zZWxlY3RvciwgJC5wcm94eSh0aGlzLmVudGVyLCB0aGlzKSlcclxuICAgICAgICB0aGlzLiRlbGVtZW50Lm9uKGV2ZW50T3V0ICsgJy4nICsgdGhpcy50eXBlLCB0aGlzLm9wdGlvbnMuc2VsZWN0b3IsICQucHJveHkodGhpcy5sZWF2ZSwgdGhpcykpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9wdGlvbnMuc2VsZWN0b3IgP1xyXG4gICAgICAodGhpcy5fb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMsIHsgdHJpZ2dlcjogJ21hbnVhbCcsIHNlbGVjdG9yOiAnJyB9KSkgOlxyXG4gICAgICB0aGlzLmZpeFRpdGxlKClcclxuICB9XHJcblxyXG4gIFRvb2x0aXAucHJvdG90eXBlLmdldERlZmF1bHRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIFRvb2x0aXAuREVGQVVMVFNcclxuICB9XHJcblxyXG4gIFRvb2x0aXAucHJvdG90eXBlLmdldE9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCB0aGlzLmdldERlZmF1bHRzKCksIHRoaXMuJGVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKVxyXG5cclxuICAgIGlmIChvcHRpb25zLmRlbGF5ICYmIHR5cGVvZiBvcHRpb25zLmRlbGF5ID09ICdudW1iZXInKSB7XHJcbiAgICAgIG9wdGlvbnMuZGVsYXkgPSB7XHJcbiAgICAgICAgc2hvdzogb3B0aW9ucy5kZWxheSxcclxuICAgICAgICBoaWRlOiBvcHRpb25zLmRlbGF5XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3B0aW9uc1xyXG4gIH1cclxuXHJcbiAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0RGVsZWdhdGVPcHRpb25zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIG9wdGlvbnMgID0ge31cclxuICAgIHZhciBkZWZhdWx0cyA9IHRoaXMuZ2V0RGVmYXVsdHMoKVxyXG5cclxuICAgIHRoaXMuX29wdGlvbnMgJiYgJC5lYWNoKHRoaXMuX29wdGlvbnMsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgIGlmIChkZWZhdWx0c1trZXldICE9IHZhbHVlKSBvcHRpb25zW2tleV0gPSB2YWx1ZVxyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gb3B0aW9uc1xyXG4gIH1cclxuXHJcbiAgVG9vbHRpcC5wcm90b3R5cGUuZW50ZXIgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICB2YXIgc2VsZiA9IG9iaiBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IgP1xyXG4gICAgICBvYmogOiAkKG9iai5jdXJyZW50VGFyZ2V0KS5kYXRhKCdicy4nICsgdGhpcy50eXBlKVxyXG5cclxuICAgIGlmICghc2VsZikge1xyXG4gICAgICBzZWxmID0gbmV3IHRoaXMuY29uc3RydWN0b3Iob2JqLmN1cnJlbnRUYXJnZXQsIHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpXHJcbiAgICAgICQob2JqLmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2JzLicgKyB0aGlzLnR5cGUsIHNlbGYpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mICQuRXZlbnQpIHtcclxuICAgICAgc2VsZi5pblN0YXRlW29iai50eXBlID09ICdmb2N1c2luJyA/ICdmb2N1cycgOiAnaG92ZXInXSA9IHRydWVcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VsZi50aXAoKS5oYXNDbGFzcygnaW4nKSB8fCBzZWxmLmhvdmVyU3RhdGUgPT0gJ2luJykge1xyXG4gICAgICBzZWxmLmhvdmVyU3RhdGUgPSAnaW4nXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVGltZW91dChzZWxmLnRpbWVvdXQpXHJcblxyXG4gICAgc2VsZi5ob3ZlclN0YXRlID0gJ2luJ1xyXG5cclxuICAgIGlmICghc2VsZi5vcHRpb25zLmRlbGF5IHx8ICFzZWxmLm9wdGlvbnMuZGVsYXkuc2hvdykgcmV0dXJuIHNlbGYuc2hvdygpXHJcblxyXG4gICAgc2VsZi50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmIChzZWxmLmhvdmVyU3RhdGUgPT0gJ2luJykgc2VsZi5zaG93KClcclxuICAgIH0sIHNlbGYub3B0aW9ucy5kZWxheS5zaG93KVxyXG4gIH1cclxuXHJcbiAgVG9vbHRpcC5wcm90b3R5cGUuaXNJblN0YXRlVHJ1ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmluU3RhdGUpIHtcclxuICAgICAgaWYgKHRoaXMuaW5TdGF0ZVtrZXldKSByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgVG9vbHRpcC5wcm90b3R5cGUubGVhdmUgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICB2YXIgc2VsZiA9IG9iaiBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IgP1xyXG4gICAgICBvYmogOiAkKG9iai5jdXJyZW50VGFyZ2V0KS5kYXRhKCdicy4nICsgdGhpcy50eXBlKVxyXG5cclxuICAgIGlmICghc2VsZikge1xyXG4gICAgICBzZWxmID0gbmV3IHRoaXMuY29uc3RydWN0b3Iob2JqLmN1cnJlbnRUYXJnZXQsIHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpXHJcbiAgICAgICQob2JqLmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2JzLicgKyB0aGlzLnR5cGUsIHNlbGYpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mICQuRXZlbnQpIHtcclxuICAgICAgc2VsZi5pblN0YXRlW29iai50eXBlID09ICdmb2N1c291dCcgPyAnZm9jdXMnIDogJ2hvdmVyJ10gPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWxmLmlzSW5TdGF0ZVRydWUoKSkgcmV0dXJuXHJcblxyXG4gICAgY2xlYXJUaW1lb3V0KHNlbGYudGltZW91dClcclxuXHJcbiAgICBzZWxmLmhvdmVyU3RhdGUgPSAnb3V0J1xyXG5cclxuICAgIGlmICghc2VsZi5vcHRpb25zLmRlbGF5IHx8ICFzZWxmLm9wdGlvbnMuZGVsYXkuaGlkZSkgcmV0dXJuIHNlbGYuaGlkZSgpXHJcblxyXG4gICAgc2VsZi50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmIChzZWxmLmhvdmVyU3RhdGUgPT0gJ291dCcpIHNlbGYuaGlkZSgpXHJcbiAgICB9LCBzZWxmLm9wdGlvbnMuZGVsYXkuaGlkZSlcclxuICB9XHJcblxyXG4gIFRvb2x0aXAucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZSA9ICQuRXZlbnQoJ3Nob3cuYnMuJyArIHRoaXMudHlwZSlcclxuXHJcbiAgICBpZiAodGhpcy5oYXNDb250ZW50KCkgJiYgdGhpcy5lbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKVxyXG5cclxuICAgICAgdmFyIGluRG9tID0gJC5jb250YWlucyh0aGlzLiRlbGVtZW50WzBdLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB0aGlzLiRlbGVtZW50WzBdKVxyXG4gICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSB8fCAhaW5Eb20pIHJldHVyblxyXG4gICAgICB2YXIgdGhhdCA9IHRoaXNcclxuXHJcbiAgICAgIHZhciAkdGlwID0gdGhpcy50aXAoKVxyXG5cclxuICAgICAgdmFyIHRpcElkID0gdGhpcy5nZXRVSUQodGhpcy50eXBlKVxyXG5cclxuICAgICAgdGhpcy5zZXRDb250ZW50KClcclxuICAgICAgJHRpcC5hdHRyKCdpZCcsIHRpcElkKVxyXG4gICAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtZGVzY3JpYmVkYnknLCB0aXBJZClcclxuXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uKSAkdGlwLmFkZENsYXNzKCdmYWRlJylcclxuXHJcbiAgICAgIHZhciBwbGFjZW1lbnQgPSB0eXBlb2YgdGhpcy5vcHRpb25zLnBsYWNlbWVudCA9PSAnZnVuY3Rpb24nID9cclxuICAgICAgICB0aGlzLm9wdGlvbnMucGxhY2VtZW50LmNhbGwodGhpcywgJHRpcFswXSwgdGhpcy4kZWxlbWVudFswXSkgOlxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wbGFjZW1lbnRcclxuXHJcbiAgICAgIHZhciBhdXRvVG9rZW4gPSAvXFxzP2F1dG8/XFxzPy9pXHJcbiAgICAgIHZhciBhdXRvUGxhY2UgPSBhdXRvVG9rZW4udGVzdChwbGFjZW1lbnQpXHJcbiAgICAgIGlmIChhdXRvUGxhY2UpIHBsYWNlbWVudCA9IHBsYWNlbWVudC5yZXBsYWNlKGF1dG9Ub2tlbiwgJycpIHx8ICd0b3AnXHJcblxyXG4gICAgICAkdGlwXHJcbiAgICAgICAgLmRldGFjaCgpXHJcbiAgICAgICAgLmNzcyh7IHRvcDogMCwgbGVmdDogMCwgZGlzcGxheTogJ2Jsb2NrJyB9KVxyXG4gICAgICAgIC5hZGRDbGFzcyhwbGFjZW1lbnQpXHJcbiAgICAgICAgLmRhdGEoJ2JzLicgKyB0aGlzLnR5cGUsIHRoaXMpXHJcblxyXG4gICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID8gJHRpcC5hcHBlbmRUbyh0aGlzLm9wdGlvbnMuY29udGFpbmVyKSA6ICR0aXAuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudClcclxuICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCdpbnNlcnRlZC5icy4nICsgdGhpcy50eXBlKVxyXG5cclxuICAgICAgdmFyIHBvcyAgICAgICAgICA9IHRoaXMuZ2V0UG9zaXRpb24oKVxyXG4gICAgICB2YXIgYWN0dWFsV2lkdGggID0gJHRpcFswXS5vZmZzZXRXaWR0aFxyXG4gICAgICB2YXIgYWN0dWFsSGVpZ2h0ID0gJHRpcFswXS5vZmZzZXRIZWlnaHRcclxuXHJcbiAgICAgIGlmIChhdXRvUGxhY2UpIHtcclxuICAgICAgICB2YXIgb3JnUGxhY2VtZW50ID0gcGxhY2VtZW50XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0RGltID0gdGhpcy5nZXRQb3NpdGlvbih0aGlzLiR2aWV3cG9ydClcclxuXHJcbiAgICAgICAgcGxhY2VtZW50ID0gcGxhY2VtZW50ID09ICdib3R0b20nICYmIHBvcy5ib3R0b20gKyBhY3R1YWxIZWlnaHQgPiB2aWV3cG9ydERpbS5ib3R0b20gPyAndG9wJyAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50ID09ICd0b3AnICAgICYmIHBvcy50b3AgICAgLSBhY3R1YWxIZWlnaHQgPCB2aWV3cG9ydERpbS50b3AgICAgPyAnYm90dG9tJyA6XHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50ID09ICdyaWdodCcgICYmIHBvcy5yaWdodCAgKyBhY3R1YWxXaWR0aCAgPiB2aWV3cG9ydERpbS53aWR0aCAgPyAnbGVmdCcgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50ID09ICdsZWZ0JyAgICYmIHBvcy5sZWZ0ICAgLSBhY3R1YWxXaWR0aCAgPCB2aWV3cG9ydERpbS5sZWZ0ICAgPyAncmlnaHQnICA6XHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50XHJcblxyXG4gICAgICAgICR0aXBcclxuICAgICAgICAgIC5yZW1vdmVDbGFzcyhvcmdQbGFjZW1lbnQpXHJcbiAgICAgICAgICAuYWRkQ2xhc3MocGxhY2VtZW50KVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgY2FsY3VsYXRlZE9mZnNldCA9IHRoaXMuZ2V0Q2FsY3VsYXRlZE9mZnNldChwbGFjZW1lbnQsIHBvcywgYWN0dWFsV2lkdGgsIGFjdHVhbEhlaWdodClcclxuXHJcbiAgICAgIHRoaXMuYXBwbHlQbGFjZW1lbnQoY2FsY3VsYXRlZE9mZnNldCwgcGxhY2VtZW50KVxyXG5cclxuICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBwcmV2SG92ZXJTdGF0ZSA9IHRoYXQuaG92ZXJTdGF0ZVxyXG4gICAgICAgIHRoYXQuJGVsZW1lbnQudHJpZ2dlcignc2hvd24uYnMuJyArIHRoYXQudHlwZSlcclxuICAgICAgICB0aGF0LmhvdmVyU3RhdGUgPSBudWxsXHJcblxyXG4gICAgICAgIGlmIChwcmV2SG92ZXJTdGF0ZSA9PSAnb3V0JykgdGhhdC5sZWF2ZSh0aGF0KVxyXG4gICAgICB9XHJcblxyXG4gICAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiR0aXAuaGFzQ2xhc3MoJ2ZhZGUnKSA/XHJcbiAgICAgICAgJHRpcFxyXG4gICAgICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgY29tcGxldGUpXHJcbiAgICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoVG9vbHRpcC5UUkFOU0lUSU9OX0RVUkFUSU9OKSA6XHJcbiAgICAgICAgY29tcGxldGUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgVG9vbHRpcC5wcm90b3R5cGUuYXBwbHlQbGFjZW1lbnQgPSBmdW5jdGlvbiAob2Zmc2V0LCBwbGFjZW1lbnQpIHtcclxuICAgIHZhciAkdGlwICAgPSB0aGlzLnRpcCgpXHJcbiAgICB2YXIgd2lkdGggID0gJHRpcFswXS5vZmZzZXRXaWR0aFxyXG4gICAgdmFyIGhlaWdodCA9ICR0aXBbMF0ub2Zmc2V0SGVpZ2h0XHJcblxyXG4gICAgLy8gbWFudWFsbHkgcmVhZCBtYXJnaW5zIGJlY2F1c2UgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGluY2x1ZGVzIGRpZmZlcmVuY2VcclxuICAgIHZhciBtYXJnaW5Ub3AgPSBwYXJzZUludCgkdGlwLmNzcygnbWFyZ2luLXRvcCcpLCAxMClcclxuICAgIHZhciBtYXJnaW5MZWZ0ID0gcGFyc2VJbnQoJHRpcC5jc3MoJ21hcmdpbi1sZWZ0JyksIDEwKVxyXG5cclxuICAgIC8vIHdlIG11c3QgY2hlY2sgZm9yIE5hTiBmb3IgaWUgOC85XHJcbiAgICBpZiAoaXNOYU4obWFyZ2luVG9wKSkgIG1hcmdpblRvcCAgPSAwXHJcbiAgICBpZiAoaXNOYU4obWFyZ2luTGVmdCkpIG1hcmdpbkxlZnQgPSAwXHJcblxyXG4gICAgb2Zmc2V0LnRvcCAgKz0gbWFyZ2luVG9wXHJcbiAgICBvZmZzZXQubGVmdCArPSBtYXJnaW5MZWZ0XHJcblxyXG4gICAgLy8gJC5mbi5vZmZzZXQgZG9lc24ndCByb3VuZCBwaXhlbCB2YWx1ZXNcclxuICAgIC8vIHNvIHdlIHVzZSBzZXRPZmZzZXQgZGlyZWN0bHkgd2l0aCBvdXIgb3duIGZ1bmN0aW9uIEItMFxyXG4gICAgJC5vZmZzZXQuc2V0T2Zmc2V0KCR0aXBbMF0sICQuZXh0ZW5kKHtcclxuICAgICAgdXNpbmc6IGZ1bmN0aW9uIChwcm9wcykge1xyXG4gICAgICAgICR0aXAuY3NzKHtcclxuICAgICAgICAgIHRvcDogTWF0aC5yb3VuZChwcm9wcy50b3ApLFxyXG4gICAgICAgICAgbGVmdDogTWF0aC5yb3VuZChwcm9wcy5sZWZ0KVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0sIG9mZnNldCksIDApXHJcblxyXG4gICAgJHRpcC5hZGRDbGFzcygnaW4nKVxyXG5cclxuICAgIC8vIGNoZWNrIHRvIHNlZSBpZiBwbGFjaW5nIHRpcCBpbiBuZXcgb2Zmc2V0IGNhdXNlZCB0aGUgdGlwIHRvIHJlc2l6ZSBpdHNlbGZcclxuICAgIHZhciBhY3R1YWxXaWR0aCAgPSAkdGlwWzBdLm9mZnNldFdpZHRoXHJcbiAgICB2YXIgYWN0dWFsSGVpZ2h0ID0gJHRpcFswXS5vZmZzZXRIZWlnaHRcclxuXHJcbiAgICBpZiAocGxhY2VtZW50ID09ICd0b3AnICYmIGFjdHVhbEhlaWdodCAhPSBoZWlnaHQpIHtcclxuICAgICAgb2Zmc2V0LnRvcCA9IG9mZnNldC50b3AgKyBoZWlnaHQgLSBhY3R1YWxIZWlnaHRcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGVsdGEgPSB0aGlzLmdldFZpZXdwb3J0QWRqdXN0ZWREZWx0YShwbGFjZW1lbnQsIG9mZnNldCwgYWN0dWFsV2lkdGgsIGFjdHVhbEhlaWdodClcclxuXHJcbiAgICBpZiAoZGVsdGEubGVmdCkgb2Zmc2V0LmxlZnQgKz0gZGVsdGEubGVmdFxyXG4gICAgZWxzZSBvZmZzZXQudG9wICs9IGRlbHRhLnRvcFxyXG5cclxuICAgIHZhciBpc1ZlcnRpY2FsICAgICAgICAgID0gL3RvcHxib3R0b20vLnRlc3QocGxhY2VtZW50KVxyXG4gICAgdmFyIGFycm93RGVsdGEgICAgICAgICAgPSBpc1ZlcnRpY2FsID8gZGVsdGEubGVmdCAqIDIgLSB3aWR0aCArIGFjdHVhbFdpZHRoIDogZGVsdGEudG9wICogMiAtIGhlaWdodCArIGFjdHVhbEhlaWdodFxyXG4gICAgdmFyIGFycm93T2Zmc2V0UG9zaXRpb24gPSBpc1ZlcnRpY2FsID8gJ29mZnNldFdpZHRoJyA6ICdvZmZzZXRIZWlnaHQnXHJcblxyXG4gICAgJHRpcC5vZmZzZXQob2Zmc2V0KVxyXG4gICAgdGhpcy5yZXBsYWNlQXJyb3coYXJyb3dEZWx0YSwgJHRpcFswXVthcnJvd09mZnNldFBvc2l0aW9uXSwgaXNWZXJ0aWNhbClcclxuICB9XHJcblxyXG4gIFRvb2x0aXAucHJvdG90eXBlLnJlcGxhY2VBcnJvdyA9IGZ1bmN0aW9uIChkZWx0YSwgZGltZW5zaW9uLCBpc1ZlcnRpY2FsKSB7XHJcbiAgICB0aGlzLmFycm93KClcclxuICAgICAgLmNzcyhpc1ZlcnRpY2FsID8gJ2xlZnQnIDogJ3RvcCcsIDUwICogKDEgLSBkZWx0YSAvIGRpbWVuc2lvbikgKyAnJScpXHJcbiAgICAgIC5jc3MoaXNWZXJ0aWNhbCA/ICd0b3AnIDogJ2xlZnQnLCAnJylcclxuICB9XHJcblxyXG4gIFRvb2x0aXAucHJvdG90eXBlLnNldENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgJHRpcCAgPSB0aGlzLnRpcCgpXHJcbiAgICB2YXIgdGl0bGUgPSB0aGlzLmdldFRpdGxlKClcclxuXHJcbiAgICAkdGlwLmZpbmQoJy50b29sdGlwLWlubmVyJylbdGhpcy5vcHRpb25zLmh0bWwgPyAnaHRtbCcgOiAndGV4dCddKHRpdGxlKVxyXG4gICAgJHRpcC5yZW1vdmVDbGFzcygnZmFkZSBpbiB0b3AgYm90dG9tIGxlZnQgcmlnaHQnKVxyXG4gIH1cclxuXHJcbiAgVG9vbHRpcC5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgdmFyIHRoYXQgPSB0aGlzXHJcbiAgICB2YXIgJHRpcCA9ICQodGhpcy4kdGlwKVxyXG4gICAgdmFyIGUgICAgPSAkLkV2ZW50KCdoaWRlLmJzLicgKyB0aGlzLnR5cGUpXHJcblxyXG4gICAgZnVuY3Rpb24gY29tcGxldGUoKSB7XHJcbiAgICAgIGlmICh0aGF0LmhvdmVyU3RhdGUgIT0gJ2luJykgJHRpcC5kZXRhY2goKVxyXG4gICAgICB0aGF0LiRlbGVtZW50XHJcbiAgICAgICAgLnJlbW92ZUF0dHIoJ2FyaWEtZGVzY3JpYmVkYnknKVxyXG4gICAgICAgIC50cmlnZ2VyKCdoaWRkZW4uYnMuJyArIHRoYXQudHlwZSlcclxuICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKVxyXG5cclxuICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm5cclxuXHJcbiAgICAkdGlwLnJlbW92ZUNsYXNzKCdpbicpXHJcblxyXG4gICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgJHRpcC5oYXNDbGFzcygnZmFkZScpID9cclxuICAgICAgJHRpcFxyXG4gICAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIGNvbXBsZXRlKVxyXG4gICAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChUb29sdGlwLlRSQU5TSVRJT05fRFVSQVRJT04pIDpcclxuICAgICAgY29tcGxldGUoKVxyXG5cclxuICAgIHRoaXMuaG92ZXJTdGF0ZSA9IG51bGxcclxuXHJcbiAgICByZXR1cm4gdGhpc1xyXG4gIH1cclxuXHJcbiAgVG9vbHRpcC5wcm90b3R5cGUuZml4VGl0bGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgJGUgPSB0aGlzLiRlbGVtZW50XHJcbiAgICBpZiAoJGUuYXR0cigndGl0bGUnKSB8fCB0eXBlb2YgJGUuYXR0cignZGF0YS1vcmlnaW5hbC10aXRsZScpICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICRlLmF0dHIoJ2RhdGEtb3JpZ2luYWwtdGl0bGUnLCAkZS5hdHRyKCd0aXRsZScpIHx8ICcnKS5hdHRyKCd0aXRsZScsICcnKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgVG9vbHRpcC5wcm90b3R5cGUuaGFzQ29udGVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLmdldFRpdGxlKClcclxuICB9XHJcblxyXG4gIFRvb2x0aXAucHJvdG90eXBlLmdldFBvc2l0aW9uID0gZnVuY3Rpb24gKCRlbGVtZW50KSB7XHJcbiAgICAkZWxlbWVudCAgID0gJGVsZW1lbnQgfHwgdGhpcy4kZWxlbWVudFxyXG5cclxuICAgIHZhciBlbCAgICAgPSAkZWxlbWVudFswXVxyXG4gICAgdmFyIGlzQm9keSA9IGVsLnRhZ05hbWUgPT0gJ0JPRFknXHJcblxyXG4gICAgdmFyIGVsUmVjdCAgICA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXHJcbiAgICBpZiAoZWxSZWN0LndpZHRoID09IG51bGwpIHtcclxuICAgICAgLy8gd2lkdGggYW5kIGhlaWdodCBhcmUgbWlzc2luZyBpbiBJRTgsIHNvIGNvbXB1dGUgdGhlbSBtYW51YWxseTsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTQwOTNcclxuICAgICAgZWxSZWN0ID0gJC5leHRlbmQoe30sIGVsUmVjdCwgeyB3aWR0aDogZWxSZWN0LnJpZ2h0IC0gZWxSZWN0LmxlZnQsIGhlaWdodDogZWxSZWN0LmJvdHRvbSAtIGVsUmVjdC50b3AgfSlcclxuICAgIH1cclxuICAgIHZhciBlbE9mZnNldCAgPSBpc0JvZHkgPyB7IHRvcDogMCwgbGVmdDogMCB9IDogJGVsZW1lbnQub2Zmc2V0KClcclxuICAgIHZhciBzY3JvbGwgICAgPSB7IHNjcm9sbDogaXNCb2R5ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA6ICRlbGVtZW50LnNjcm9sbFRvcCgpIH1cclxuICAgIHZhciBvdXRlckRpbXMgPSBpc0JvZHkgPyB7IHdpZHRoOiAkKHdpbmRvdykud2lkdGgoKSwgaGVpZ2h0OiAkKHdpbmRvdykuaGVpZ2h0KCkgfSA6IG51bGxcclxuXHJcbiAgICByZXR1cm4gJC5leHRlbmQoe30sIGVsUmVjdCwgc2Nyb2xsLCBvdXRlckRpbXMsIGVsT2Zmc2V0KVxyXG4gIH1cclxuXHJcbiAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0Q2FsY3VsYXRlZE9mZnNldCA9IGZ1bmN0aW9uIChwbGFjZW1lbnQsIHBvcywgYWN0dWFsV2lkdGgsIGFjdHVhbEhlaWdodCkge1xyXG4gICAgcmV0dXJuIHBsYWNlbWVudCA9PSAnYm90dG9tJyA/IHsgdG9wOiBwb3MudG9wICsgcG9zLmhlaWdodCwgICBsZWZ0OiBwb3MubGVmdCArIHBvcy53aWR0aCAvIDIgLSBhY3R1YWxXaWR0aCAvIDIgfSA6XHJcbiAgICAgICAgICAgcGxhY2VtZW50ID09ICd0b3AnICAgID8geyB0b3A6IHBvcy50b3AgLSBhY3R1YWxIZWlnaHQsIGxlZnQ6IHBvcy5sZWZ0ICsgcG9zLndpZHRoIC8gMiAtIGFjdHVhbFdpZHRoIC8gMiB9IDpcclxuICAgICAgICAgICBwbGFjZW1lbnQgPT0gJ2xlZnQnICAgPyB7IHRvcDogcG9zLnRvcCArIHBvcy5oZWlnaHQgLyAyIC0gYWN0dWFsSGVpZ2h0IC8gMiwgbGVmdDogcG9zLmxlZnQgLSBhY3R1YWxXaWR0aCB9IDpcclxuICAgICAgICAvKiBwbGFjZW1lbnQgPT0gJ3JpZ2h0JyAqLyB7IHRvcDogcG9zLnRvcCArIHBvcy5oZWlnaHQgLyAyIC0gYWN0dWFsSGVpZ2h0IC8gMiwgbGVmdDogcG9zLmxlZnQgKyBwb3Mud2lkdGggfVxyXG5cclxuICB9XHJcblxyXG4gIFRvb2x0aXAucHJvdG90eXBlLmdldFZpZXdwb3J0QWRqdXN0ZWREZWx0YSA9IGZ1bmN0aW9uIChwbGFjZW1lbnQsIHBvcywgYWN0dWFsV2lkdGgsIGFjdHVhbEhlaWdodCkge1xyXG4gICAgdmFyIGRlbHRhID0geyB0b3A6IDAsIGxlZnQ6IDAgfVxyXG4gICAgaWYgKCF0aGlzLiR2aWV3cG9ydCkgcmV0dXJuIGRlbHRhXHJcblxyXG4gICAgdmFyIHZpZXdwb3J0UGFkZGluZyA9IHRoaXMub3B0aW9ucy52aWV3cG9ydCAmJiB0aGlzLm9wdGlvbnMudmlld3BvcnQucGFkZGluZyB8fCAwXHJcbiAgICB2YXIgdmlld3BvcnREaW1lbnNpb25zID0gdGhpcy5nZXRQb3NpdGlvbih0aGlzLiR2aWV3cG9ydClcclxuXHJcbiAgICBpZiAoL3JpZ2h0fGxlZnQvLnRlc3QocGxhY2VtZW50KSkge1xyXG4gICAgICB2YXIgdG9wRWRnZU9mZnNldCAgICA9IHBvcy50b3AgLSB2aWV3cG9ydFBhZGRpbmcgLSB2aWV3cG9ydERpbWVuc2lvbnMuc2Nyb2xsXHJcbiAgICAgIHZhciBib3R0b21FZGdlT2Zmc2V0ID0gcG9zLnRvcCArIHZpZXdwb3J0UGFkZGluZyAtIHZpZXdwb3J0RGltZW5zaW9ucy5zY3JvbGwgKyBhY3R1YWxIZWlnaHRcclxuICAgICAgaWYgKHRvcEVkZ2VPZmZzZXQgPCB2aWV3cG9ydERpbWVuc2lvbnMudG9wKSB7IC8vIHRvcCBvdmVyZmxvd1xyXG4gICAgICAgIGRlbHRhLnRvcCA9IHZpZXdwb3J0RGltZW5zaW9ucy50b3AgLSB0b3BFZGdlT2Zmc2V0XHJcbiAgICAgIH0gZWxzZSBpZiAoYm90dG9tRWRnZU9mZnNldCA+IHZpZXdwb3J0RGltZW5zaW9ucy50b3AgKyB2aWV3cG9ydERpbWVuc2lvbnMuaGVpZ2h0KSB7IC8vIGJvdHRvbSBvdmVyZmxvd1xyXG4gICAgICAgIGRlbHRhLnRvcCA9IHZpZXdwb3J0RGltZW5zaW9ucy50b3AgKyB2aWV3cG9ydERpbWVuc2lvbnMuaGVpZ2h0IC0gYm90dG9tRWRnZU9mZnNldFxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIgbGVmdEVkZ2VPZmZzZXQgID0gcG9zLmxlZnQgLSB2aWV3cG9ydFBhZGRpbmdcclxuICAgICAgdmFyIHJpZ2h0RWRnZU9mZnNldCA9IHBvcy5sZWZ0ICsgdmlld3BvcnRQYWRkaW5nICsgYWN0dWFsV2lkdGhcclxuICAgICAgaWYgKGxlZnRFZGdlT2Zmc2V0IDwgdmlld3BvcnREaW1lbnNpb25zLmxlZnQpIHsgLy8gbGVmdCBvdmVyZmxvd1xyXG4gICAgICAgIGRlbHRhLmxlZnQgPSB2aWV3cG9ydERpbWVuc2lvbnMubGVmdCAtIGxlZnRFZGdlT2Zmc2V0XHJcbiAgICAgIH0gZWxzZSBpZiAocmlnaHRFZGdlT2Zmc2V0ID4gdmlld3BvcnREaW1lbnNpb25zLnJpZ2h0KSB7IC8vIHJpZ2h0IG92ZXJmbG93XHJcbiAgICAgICAgZGVsdGEubGVmdCA9IHZpZXdwb3J0RGltZW5zaW9ucy5sZWZ0ICsgdmlld3BvcnREaW1lbnNpb25zLndpZHRoIC0gcmlnaHRFZGdlT2Zmc2V0XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGVsdGFcclxuICB9XHJcblxyXG4gIFRvb2x0aXAucHJvdG90eXBlLmdldFRpdGxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHRpdGxlXHJcbiAgICB2YXIgJGUgPSB0aGlzLiRlbGVtZW50XHJcbiAgICB2YXIgbyAgPSB0aGlzLm9wdGlvbnNcclxuXHJcbiAgICB0aXRsZSA9ICRlLmF0dHIoJ2RhdGEtb3JpZ2luYWwtdGl0bGUnKVxyXG4gICAgICB8fCAodHlwZW9mIG8udGl0bGUgPT0gJ2Z1bmN0aW9uJyA/IG8udGl0bGUuY2FsbCgkZVswXSkgOiAgby50aXRsZSlcclxuXHJcbiAgICByZXR1cm4gdGl0bGVcclxuICB9XHJcblxyXG4gIFRvb2x0aXAucHJvdG90eXBlLmdldFVJRCA9IGZ1bmN0aW9uIChwcmVmaXgpIHtcclxuICAgIGRvIHByZWZpeCArPSB+fihNYXRoLnJhbmRvbSgpICogMTAwMDAwMClcclxuICAgIHdoaWxlIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmVmaXgpKVxyXG4gICAgcmV0dXJuIHByZWZpeFxyXG4gIH1cclxuXHJcbiAgVG9vbHRpcC5wcm90b3R5cGUudGlwID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCF0aGlzLiR0aXApIHtcclxuICAgICAgdGhpcy4kdGlwID0gJCh0aGlzLm9wdGlvbnMudGVtcGxhdGUpXHJcbiAgICAgIGlmICh0aGlzLiR0aXAubGVuZ3RoICE9IDEpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy50eXBlICsgJyBgdGVtcGxhdGVgIG9wdGlvbiBtdXN0IGNvbnNpc3Qgb2YgZXhhY3RseSAxIHRvcC1sZXZlbCBlbGVtZW50IScpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLiR0aXBcclxuICB9XHJcblxyXG4gIFRvb2x0aXAucHJvdG90eXBlLmFycm93ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuICh0aGlzLiRhcnJvdyA9IHRoaXMuJGFycm93IHx8IHRoaXMudGlwKCkuZmluZCgnLnRvb2x0aXAtYXJyb3cnKSlcclxuICB9XHJcblxyXG4gIFRvb2x0aXAucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcclxuICB9XHJcblxyXG4gIFRvb2x0aXAucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgVG9vbHRpcC5wcm90b3R5cGUudG9nZ2xlRW5hYmxlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuZW5hYmxlZCA9ICF0aGlzLmVuYWJsZWRcclxuICB9XHJcblxyXG4gIFRvb2x0aXAucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXNcclxuICAgIGlmIChlKSB7XHJcbiAgICAgIHNlbGYgPSAkKGUuY3VycmVudFRhcmdldCkuZGF0YSgnYnMuJyArIHRoaXMudHlwZSlcclxuICAgICAgaWYgKCFzZWxmKSB7XHJcbiAgICAgICAgc2VsZiA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGUuY3VycmVudFRhcmdldCwgdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSlcclxuICAgICAgICAkKGUuY3VycmVudFRhcmdldCkuZGF0YSgnYnMuJyArIHRoaXMudHlwZSwgc2VsZilcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChlKSB7XHJcbiAgICAgIHNlbGYuaW5TdGF0ZS5jbGljayA9ICFzZWxmLmluU3RhdGUuY2xpY2tcclxuICAgICAgaWYgKHNlbGYuaXNJblN0YXRlVHJ1ZSgpKSBzZWxmLmVudGVyKHNlbGYpXHJcbiAgICAgIGVsc2Ugc2VsZi5sZWF2ZShzZWxmKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2VsZi50aXAoKS5oYXNDbGFzcygnaW4nKSA/IHNlbGYubGVhdmUoc2VsZikgOiBzZWxmLmVudGVyKHNlbGYpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBUb29sdGlwLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHRoYXQgPSB0aGlzXHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxyXG4gICAgdGhpcy5oaWRlKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdGhhdC4kZWxlbWVudC5vZmYoJy4nICsgdGhhdC50eXBlKS5yZW1vdmVEYXRhKCdicy4nICsgdGhhdC50eXBlKVxyXG4gICAgICBpZiAodGhhdC4kdGlwKSB7XHJcbiAgICAgICAgdGhhdC4kdGlwLmRldGFjaCgpXHJcbiAgICAgIH1cclxuICAgICAgdGhhdC4kdGlwID0gbnVsbFxyXG4gICAgICB0aGF0LiRhcnJvdyA9IG51bGxcclxuICAgICAgdGhhdC4kdmlld3BvcnQgPSBudWxsXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIFRPT0xUSVAgUExVR0lOIERFRklOSVRJT05cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIGZ1bmN0aW9uIFBsdWdpbihvcHRpb24pIHtcclxuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJHRoaXMgICA9ICQodGhpcylcclxuICAgICAgdmFyIGRhdGEgICAgPSAkdGhpcy5kYXRhKCdicy50b29sdGlwJylcclxuICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvblxyXG5cclxuICAgICAgaWYgKCFkYXRhICYmIC9kZXN0cm95fGhpZGUvLnRlc3Qob3B0aW9uKSkgcmV0dXJuXHJcbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMudG9vbHRpcCcsIChkYXRhID0gbmV3IFRvb2x0aXAodGhpcywgb3B0aW9ucykpKVxyXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB2YXIgb2xkID0gJC5mbi50b29sdGlwXHJcblxyXG4gICQuZm4udG9vbHRpcCAgICAgICAgICAgICA9IFBsdWdpblxyXG4gICQuZm4udG9vbHRpcC5Db25zdHJ1Y3RvciA9IFRvb2x0aXBcclxuXHJcblxyXG4gIC8vIFRPT0xUSVAgTk8gQ09ORkxJQ1RcclxuICAvLyA9PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICQuZm4udG9vbHRpcC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgJC5mbi50b29sdGlwID0gb2xkXHJcbiAgICByZXR1cm4gdGhpc1xyXG4gIH1cclxuXHJcbn0oalF1ZXJ5KTtcclxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIEJvb3RzdHJhcDogcG9wb3Zlci5qcyB2My4zLjVcclxuICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vamF2YXNjcmlwdC8jcG9wb3ZlcnNcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLlxyXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cclxuXHJcblxyXG4rZnVuY3Rpb24gKCQpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG4gIC8vIFBPUE9WRVIgUFVCTElDIENMQVNTIERFRklOSVRJT05cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIHZhciBQb3BvdmVyID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHtcclxuICAgIHRoaXMuaW5pdCgncG9wb3ZlcicsIGVsZW1lbnQsIG9wdGlvbnMpXHJcbiAgfVxyXG5cclxuICBpZiAoISQuZm4udG9vbHRpcCkgdGhyb3cgbmV3IEVycm9yKCdQb3BvdmVyIHJlcXVpcmVzIHRvb2x0aXAuanMnKVxyXG5cclxuICBQb3BvdmVyLlZFUlNJT04gID0gJzMuMy41J1xyXG5cclxuICBQb3BvdmVyLkRFRkFVTFRTID0gJC5leHRlbmQoe30sICQuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5ERUZBVUxUUywge1xyXG4gICAgcGxhY2VtZW50OiAncmlnaHQnLFxyXG4gICAgdHJpZ2dlcjogJ2NsaWNrJyxcclxuICAgIGNvbnRlbnQ6ICcnLFxyXG4gICAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwicG9wb3ZlclwiIHJvbGU9XCJ0b29sdGlwXCI+PGRpdiBjbGFzcz1cImFycm93XCI+PC9kaXY+PGgzIGNsYXNzPVwicG9wb3Zlci10aXRsZVwiPjwvaDM+PGRpdiBjbGFzcz1cInBvcG92ZXItY29udGVudFwiPjwvZGl2PjwvZGl2PidcclxuICB9KVxyXG5cclxuXHJcbiAgLy8gTk9URTogUE9QT1ZFUiBFWFRFTkRTIHRvb2x0aXAuanNcclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICBQb3BvdmVyLnByb3RvdHlwZSA9ICQuZXh0ZW5kKHt9LCAkLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IucHJvdG90eXBlKVxyXG5cclxuICBQb3BvdmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBvcG92ZXJcclxuXHJcbiAgUG9wb3Zlci5wcm90b3R5cGUuZ2V0RGVmYXVsdHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gUG9wb3Zlci5ERUZBVUxUU1xyXG4gIH1cclxuXHJcbiAgUG9wb3Zlci5wcm90b3R5cGUuc2V0Q29udGVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciAkdGlwICAgID0gdGhpcy50aXAoKVxyXG4gICAgdmFyIHRpdGxlICAgPSB0aGlzLmdldFRpdGxlKClcclxuICAgIHZhciBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KClcclxuXHJcbiAgICAkdGlwLmZpbmQoJy5wb3BvdmVyLXRpdGxlJylbdGhpcy5vcHRpb25zLmh0bWwgPyAnaHRtbCcgOiAndGV4dCddKHRpdGxlKVxyXG4gICAgJHRpcC5maW5kKCcucG9wb3Zlci1jb250ZW50JykuY2hpbGRyZW4oKS5kZXRhY2goKS5lbmQoKVsgLy8gd2UgdXNlIGFwcGVuZCBmb3IgaHRtbCBvYmplY3RzIHRvIG1haW50YWluIGpzIGV2ZW50c1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaHRtbCA/ICh0eXBlb2YgY29udGVudCA9PSAnc3RyaW5nJyA/ICdodG1sJyA6ICdhcHBlbmQnKSA6ICd0ZXh0J1xyXG4gICAgXShjb250ZW50KVxyXG5cclxuICAgICR0aXAucmVtb3ZlQ2xhc3MoJ2ZhZGUgdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0IGluJylcclxuXHJcbiAgICAvLyBJRTggZG9lc24ndCBhY2NlcHQgaGlkaW5nIHZpYSB0aGUgYDplbXB0eWAgcHNldWRvIHNlbGVjdG9yLCB3ZSBoYXZlIHRvIGRvXHJcbiAgICAvLyB0aGlzIG1hbnVhbGx5IGJ5IGNoZWNraW5nIHRoZSBjb250ZW50cy5cclxuICAgIGlmICghJHRpcC5maW5kKCcucG9wb3Zlci10aXRsZScpLmh0bWwoKSkgJHRpcC5maW5kKCcucG9wb3Zlci10aXRsZScpLmhpZGUoKVxyXG4gIH1cclxuXHJcbiAgUG9wb3Zlci5wcm90b3R5cGUuaGFzQ29udGVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLmdldFRpdGxlKCkgfHwgdGhpcy5nZXRDb250ZW50KClcclxuICB9XHJcblxyXG4gIFBvcG92ZXIucHJvdG90eXBlLmdldENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgJGUgPSB0aGlzLiRlbGVtZW50XHJcbiAgICB2YXIgbyAgPSB0aGlzLm9wdGlvbnNcclxuXHJcbiAgICByZXR1cm4gJGUuYXR0cignZGF0YS1jb250ZW50JylcclxuICAgICAgfHwgKHR5cGVvZiBvLmNvbnRlbnQgPT0gJ2Z1bmN0aW9uJyA/XHJcbiAgICAgICAgICAgIG8uY29udGVudC5jYWxsKCRlWzBdKSA6XHJcbiAgICAgICAgICAgIG8uY29udGVudClcclxuICB9XHJcblxyXG4gIFBvcG92ZXIucHJvdG90eXBlLmFycm93ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuICh0aGlzLiRhcnJvdyA9IHRoaXMuJGFycm93IHx8IHRoaXMudGlwKCkuZmluZCgnLmFycm93JykpXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gUE9QT1ZFUiBQTFVHSU4gREVGSU5JVElPTlxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xyXG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKVxyXG4gICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLnBvcG92ZXInKVxyXG4gICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uXHJcblxyXG4gICAgICBpZiAoIWRhdGEgJiYgL2Rlc3Ryb3l8aGlkZS8udGVzdChvcHRpb24pKSByZXR1cm5cclxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy5wb3BvdmVyJywgKGRhdGEgPSBuZXcgUG9wb3Zlcih0aGlzLCBvcHRpb25zKSkpXHJcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0oKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHZhciBvbGQgPSAkLmZuLnBvcG92ZXJcclxuXHJcbiAgJC5mbi5wb3BvdmVyICAgICAgICAgICAgID0gUGx1Z2luXHJcbiAgJC5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yID0gUG9wb3ZlclxyXG5cclxuXHJcbiAgLy8gUE9QT1ZFUiBOTyBDT05GTElDVFxyXG4gIC8vID09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgJC5mbi5wb3BvdmVyLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAkLmZuLnBvcG92ZXIgPSBvbGRcclxuICAgIHJldHVybiB0aGlzXHJcbiAgfVxyXG5cclxufShqUXVlcnkpO1xyXG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICogQm9vdHN0cmFwOiBzY3JvbGxzcHkuanMgdjMuMy41XHJcbiAqIGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2phdmFzY3JpcHQvI3Njcm9sbHNweVxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICogQ29weXJpZ2h0IDIwMTEtMjAxNSBUd2l0dGVyLCBJbmMuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xyXG5cclxuXHJcbitmdW5jdGlvbiAoJCkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuXHJcbiAgLy8gU0NST0xMU1BZIENMQVNTIERFRklOSVRJT05cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICBmdW5jdGlvbiBTY3JvbGxTcHkoZWxlbWVudCwgb3B0aW9ucykge1xyXG4gICAgdGhpcy4kYm9keSAgICAgICAgICA9ICQoZG9jdW1lbnQuYm9keSlcclxuICAgIHRoaXMuJHNjcm9sbEVsZW1lbnQgPSAkKGVsZW1lbnQpLmlzKGRvY3VtZW50LmJvZHkpID8gJCh3aW5kb3cpIDogJChlbGVtZW50KVxyXG4gICAgdGhpcy5vcHRpb25zICAgICAgICA9ICQuZXh0ZW5kKHt9LCBTY3JvbGxTcHkuREVGQVVMVFMsIG9wdGlvbnMpXHJcbiAgICB0aGlzLnNlbGVjdG9yICAgICAgID0gKHRoaXMub3B0aW9ucy50YXJnZXQgfHwgJycpICsgJyAubmF2IGxpID4gYSdcclxuICAgIHRoaXMub2Zmc2V0cyAgICAgICAgPSBbXVxyXG4gICAgdGhpcy50YXJnZXRzICAgICAgICA9IFtdXHJcbiAgICB0aGlzLmFjdGl2ZVRhcmdldCAgID0gbnVsbFxyXG4gICAgdGhpcy5zY3JvbGxIZWlnaHQgICA9IDBcclxuXHJcbiAgICB0aGlzLiRzY3JvbGxFbGVtZW50Lm9uKCdzY3JvbGwuYnMuc2Nyb2xsc3B5JywgJC5wcm94eSh0aGlzLnByb2Nlc3MsIHRoaXMpKVxyXG4gICAgdGhpcy5yZWZyZXNoKClcclxuICAgIHRoaXMucHJvY2VzcygpXHJcbiAgfVxyXG5cclxuICBTY3JvbGxTcHkuVkVSU0lPTiAgPSAnMy4zLjUnXHJcblxyXG4gIFNjcm9sbFNweS5ERUZBVUxUUyA9IHtcclxuICAgIG9mZnNldDogMTBcclxuICB9XHJcblxyXG4gIFNjcm9sbFNweS5wcm90b3R5cGUuZ2V0U2Nyb2xsSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0IHx8IE1hdGgubWF4KHRoaXMuJGJvZHlbMF0uc2Nyb2xsSGVpZ2h0LCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KVxyXG4gIH1cclxuXHJcbiAgU2Nyb2xsU3B5LnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHRoYXQgICAgICAgICAgPSB0aGlzXHJcbiAgICB2YXIgb2Zmc2V0TWV0aG9kICA9ICdvZmZzZXQnXHJcbiAgICB2YXIgb2Zmc2V0QmFzZSAgICA9IDBcclxuXHJcbiAgICB0aGlzLm9mZnNldHMgICAgICA9IFtdXHJcbiAgICB0aGlzLnRhcmdldHMgICAgICA9IFtdXHJcbiAgICB0aGlzLnNjcm9sbEhlaWdodCA9IHRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KClcclxuXHJcbiAgICBpZiAoISQuaXNXaW5kb3codGhpcy4kc2Nyb2xsRWxlbWVudFswXSkpIHtcclxuICAgICAgb2Zmc2V0TWV0aG9kID0gJ3Bvc2l0aW9uJ1xyXG4gICAgICBvZmZzZXRCYXNlICAgPSB0aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy4kYm9keVxyXG4gICAgICAuZmluZCh0aGlzLnNlbGVjdG9yKVxyXG4gICAgICAubWFwKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgJGVsICAgPSAkKHRoaXMpXHJcbiAgICAgICAgdmFyIGhyZWYgID0gJGVsLmRhdGEoJ3RhcmdldCcpIHx8ICRlbC5hdHRyKCdocmVmJylcclxuICAgICAgICB2YXIgJGhyZWYgPSAvXiMuLy50ZXN0KGhyZWYpICYmICQoaHJlZilcclxuXHJcbiAgICAgICAgcmV0dXJuICgkaHJlZlxyXG4gICAgICAgICAgJiYgJGhyZWYubGVuZ3RoXHJcbiAgICAgICAgICAmJiAkaHJlZi5pcygnOnZpc2libGUnKVxyXG4gICAgICAgICAgJiYgW1skaHJlZltvZmZzZXRNZXRob2RdKCkudG9wICsgb2Zmc2V0QmFzZSwgaHJlZl1dKSB8fCBudWxsXHJcbiAgICAgIH0pXHJcbiAgICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhWzBdIC0gYlswXSB9KVxyXG4gICAgICAuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhhdC5vZmZzZXRzLnB1c2godGhpc1swXSlcclxuICAgICAgICB0aGF0LnRhcmdldHMucHVzaCh0aGlzWzFdKVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgU2Nyb2xsU3B5LnByb3RvdHlwZS5wcm9jZXNzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHNjcm9sbFRvcCAgICA9IHRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkgKyB0aGlzLm9wdGlvbnMub2Zmc2V0XHJcbiAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gdGhpcy5nZXRTY3JvbGxIZWlnaHQoKVxyXG4gICAgdmFyIG1heFNjcm9sbCAgICA9IHRoaXMub3B0aW9ucy5vZmZzZXQgKyBzY3JvbGxIZWlnaHQgLSB0aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpXHJcbiAgICB2YXIgb2Zmc2V0cyAgICAgID0gdGhpcy5vZmZzZXRzXHJcbiAgICB2YXIgdGFyZ2V0cyAgICAgID0gdGhpcy50YXJnZXRzXHJcbiAgICB2YXIgYWN0aXZlVGFyZ2V0ID0gdGhpcy5hY3RpdmVUYXJnZXRcclxuICAgIHZhciBpXHJcblxyXG4gICAgaWYgKHRoaXMuc2Nyb2xsSGVpZ2h0ICE9IHNjcm9sbEhlaWdodCkge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzY3JvbGxUb3AgPj0gbWF4U2Nyb2xsKSB7XHJcbiAgICAgIHJldHVybiBhY3RpdmVUYXJnZXQgIT0gKGkgPSB0YXJnZXRzW3RhcmdldHMubGVuZ3RoIC0gMV0pICYmIHRoaXMuYWN0aXZhdGUoaSlcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYWN0aXZlVGFyZ2V0ICYmIHNjcm9sbFRvcCA8IG9mZnNldHNbMF0pIHtcclxuICAgICAgdGhpcy5hY3RpdmVUYXJnZXQgPSBudWxsXHJcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyKClcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGkgPSBvZmZzZXRzLmxlbmd0aDsgaS0tOykge1xyXG4gICAgICBhY3RpdmVUYXJnZXQgIT0gdGFyZ2V0c1tpXVxyXG4gICAgICAgICYmIHNjcm9sbFRvcCA+PSBvZmZzZXRzW2ldXHJcbiAgICAgICAgJiYgKG9mZnNldHNbaSArIDFdID09PSB1bmRlZmluZWQgfHwgc2Nyb2xsVG9wIDwgb2Zmc2V0c1tpICsgMV0pXHJcbiAgICAgICAgJiYgdGhpcy5hY3RpdmF0ZSh0YXJnZXRzW2ldKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgU2Nyb2xsU3B5LnByb3RvdHlwZS5hY3RpdmF0ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgIHRoaXMuYWN0aXZlVGFyZ2V0ID0gdGFyZ2V0XHJcblxyXG4gICAgdGhpcy5jbGVhcigpXHJcblxyXG4gICAgdmFyIHNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciArXHJcbiAgICAgICdbZGF0YS10YXJnZXQ9XCInICsgdGFyZ2V0ICsgJ1wiXSwnICtcclxuICAgICAgdGhpcy5zZWxlY3RvciArICdbaHJlZj1cIicgKyB0YXJnZXQgKyAnXCJdJ1xyXG5cclxuICAgIHZhciBhY3RpdmUgPSAkKHNlbGVjdG9yKVxyXG4gICAgICAucGFyZW50cygnbGknKVxyXG4gICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpXHJcblxyXG4gICAgaWYgKGFjdGl2ZS5wYXJlbnQoJy5kcm9wZG93bi1tZW51JykubGVuZ3RoKSB7XHJcbiAgICAgIGFjdGl2ZSA9IGFjdGl2ZVxyXG4gICAgICAgIC5jbG9zZXN0KCdsaS5kcm9wZG93bicpXHJcbiAgICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKVxyXG4gICAgfVxyXG5cclxuICAgIGFjdGl2ZS50cmlnZ2VyKCdhY3RpdmF0ZS5icy5zY3JvbGxzcHknKVxyXG4gIH1cclxuXHJcbiAgU2Nyb2xsU3B5LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICQodGhpcy5zZWxlY3RvcilcclxuICAgICAgLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LCAnLmFjdGl2ZScpXHJcbiAgICAgIC5yZW1vdmVDbGFzcygnYWN0aXZlJylcclxuICB9XHJcblxyXG5cclxuICAvLyBTQ1JPTExTUFkgUExVR0lOIERFRklOSVRJT05cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xyXG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKVxyXG4gICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLnNjcm9sbHNweScpXHJcbiAgICAgIHZhciBvcHRpb25zID0gdHlwZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBvcHRpb25cclxuXHJcbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuc2Nyb2xsc3B5JywgKGRhdGEgPSBuZXcgU2Nyb2xsU3B5KHRoaXMsIG9wdGlvbnMpKSlcclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdmFyIG9sZCA9ICQuZm4uc2Nyb2xsc3B5XHJcblxyXG4gICQuZm4uc2Nyb2xsc3B5ICAgICAgICAgICAgID0gUGx1Z2luXHJcbiAgJC5mbi5zY3JvbGxzcHkuQ29uc3RydWN0b3IgPSBTY3JvbGxTcHlcclxuXHJcblxyXG4gIC8vIFNDUk9MTFNQWSBOTyBDT05GTElDVFxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAkLmZuLnNjcm9sbHNweS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgJC5mbi5zY3JvbGxzcHkgPSBvbGRcclxuICAgIHJldHVybiB0aGlzXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gU0NST0xMU1BZIERBVEEtQVBJXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09XHJcblxyXG4gICQod2luZG93KS5vbignbG9hZC5icy5zY3JvbGxzcHkuZGF0YS1hcGknLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAkKCdbZGF0YS1zcHk9XCJzY3JvbGxcIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICRzcHkgPSAkKHRoaXMpXHJcbiAgICAgIFBsdWdpbi5jYWxsKCRzcHksICRzcHkuZGF0YSgpKVxyXG4gICAgfSlcclxuICB9KVxyXG5cclxufShqUXVlcnkpO1xyXG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICogQm9vdHN0cmFwOiB0YWIuanMgdjMuMy41XHJcbiAqIGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2phdmFzY3JpcHQvI3RhYnNcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLlxyXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cclxuXHJcblxyXG4rZnVuY3Rpb24gKCQpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG4gIC8vIFRBQiBDTEFTUyBERUZJTklUSU9OXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgdmFyIFRhYiA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAvLyBqc2NzOmRpc2FibGUgcmVxdWlyZURvbGxhckJlZm9yZWpRdWVyeUFzc2lnbm1lbnRcclxuICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudClcclxuICAgIC8vIGpzY3M6ZW5hYmxlIHJlcXVpcmVEb2xsYXJCZWZvcmVqUXVlcnlBc3NpZ25tZW50XHJcbiAgfVxyXG5cclxuICBUYWIuVkVSU0lPTiA9ICczLjMuNSdcclxuXHJcbiAgVGFiLlRSQU5TSVRJT05fRFVSQVRJT04gPSAxNTBcclxuXHJcbiAgVGFiLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyICR0aGlzICAgID0gdGhpcy5lbGVtZW50XHJcbiAgICB2YXIgJHVsICAgICAgPSAkdGhpcy5jbG9zZXN0KCd1bDpub3QoLmRyb3Bkb3duLW1lbnUpJylcclxuICAgIHZhciBzZWxlY3RvciA9ICR0aGlzLmRhdGEoJ3RhcmdldCcpXHJcblxyXG4gICAgaWYgKCFzZWxlY3Rvcikge1xyXG4gICAgICBzZWxlY3RvciA9ICR0aGlzLmF0dHIoJ2hyZWYnKVxyXG4gICAgICBzZWxlY3RvciA9IHNlbGVjdG9yICYmIHNlbGVjdG9yLnJlcGxhY2UoLy4qKD89I1teXFxzXSokKS8sICcnKSAvLyBzdHJpcCBmb3IgaWU3XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCR0aGlzLnBhcmVudCgnbGknKS5oYXNDbGFzcygnYWN0aXZlJykpIHJldHVyblxyXG5cclxuICAgIHZhciAkcHJldmlvdXMgPSAkdWwuZmluZCgnLmFjdGl2ZTpsYXN0IGEnKVxyXG4gICAgdmFyIGhpZGVFdmVudCA9ICQuRXZlbnQoJ2hpZGUuYnMudGFiJywge1xyXG4gICAgICByZWxhdGVkVGFyZ2V0OiAkdGhpc1swXVxyXG4gICAgfSlcclxuICAgIHZhciBzaG93RXZlbnQgPSAkLkV2ZW50KCdzaG93LmJzLnRhYicsIHtcclxuICAgICAgcmVsYXRlZFRhcmdldDogJHByZXZpb3VzWzBdXHJcbiAgICB9KVxyXG5cclxuICAgICRwcmV2aW91cy50cmlnZ2VyKGhpZGVFdmVudClcclxuICAgICR0aGlzLnRyaWdnZXIoc2hvd0V2ZW50KVxyXG5cclxuICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgaGlkZUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm5cclxuXHJcbiAgICB2YXIgJHRhcmdldCA9ICQoc2VsZWN0b3IpXHJcblxyXG4gICAgdGhpcy5hY3RpdmF0ZSgkdGhpcy5jbG9zZXN0KCdsaScpLCAkdWwpXHJcbiAgICB0aGlzLmFjdGl2YXRlKCR0YXJnZXQsICR0YXJnZXQucGFyZW50KCksIGZ1bmN0aW9uICgpIHtcclxuICAgICAgJHByZXZpb3VzLnRyaWdnZXIoe1xyXG4gICAgICAgIHR5cGU6ICdoaWRkZW4uYnMudGFiJyxcclxuICAgICAgICByZWxhdGVkVGFyZ2V0OiAkdGhpc1swXVxyXG4gICAgICB9KVxyXG4gICAgICAkdGhpcy50cmlnZ2VyKHtcclxuICAgICAgICB0eXBlOiAnc2hvd24uYnMudGFiJyxcclxuICAgICAgICByZWxhdGVkVGFyZ2V0OiAkcHJldmlvdXNbMF1cclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBUYWIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcclxuICAgIHZhciAkYWN0aXZlICAgID0gY29udGFpbmVyLmZpbmQoJz4gLmFjdGl2ZScpXHJcbiAgICB2YXIgdHJhbnNpdGlvbiA9IGNhbGxiYWNrXHJcbiAgICAgICYmICQuc3VwcG9ydC50cmFuc2l0aW9uXHJcbiAgICAgICYmICgkYWN0aXZlLmxlbmd0aCAmJiAkYWN0aXZlLmhhc0NsYXNzKCdmYWRlJykgfHwgISFjb250YWluZXIuZmluZCgnPiAuZmFkZScpLmxlbmd0aClcclxuXHJcbiAgICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgICAkYWN0aXZlXHJcbiAgICAgICAgLnJlbW92ZUNsYXNzKCdhY3RpdmUnKVxyXG4gICAgICAgIC5maW5kKCc+IC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZScpXHJcbiAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpXHJcbiAgICAgICAgLmVuZCgpXHJcbiAgICAgICAgLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cInRhYlwiXScpXHJcbiAgICAgICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIGZhbHNlKVxyXG5cclxuICAgICAgZWxlbWVudFxyXG4gICAgICAgIC5hZGRDbGFzcygnYWN0aXZlJylcclxuICAgICAgICAuZmluZCgnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJylcclxuICAgICAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSlcclxuXHJcbiAgICAgIGlmICh0cmFuc2l0aW9uKSB7XHJcbiAgICAgICAgZWxlbWVudFswXS5vZmZzZXRXaWR0aCAvLyByZWZsb3cgZm9yIHRyYW5zaXRpb25cclxuICAgICAgICBlbGVtZW50LmFkZENsYXNzKCdpbicpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcygnZmFkZScpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChlbGVtZW50LnBhcmVudCgnLmRyb3Bkb3duLW1lbnUnKS5sZW5ndGgpIHtcclxuICAgICAgICBlbGVtZW50XHJcbiAgICAgICAgICAuY2xvc2VzdCgnbGkuZHJvcGRvd24nKVxyXG4gICAgICAgICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpXHJcbiAgICAgICAgICAuZW5kKClcclxuICAgICAgICAgIC5maW5kKCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nKVxyXG4gICAgICAgICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIHRydWUpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKClcclxuICAgIH1cclxuXHJcbiAgICAkYWN0aXZlLmxlbmd0aCAmJiB0cmFuc2l0aW9uID9cclxuICAgICAgJGFjdGl2ZVxyXG4gICAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIG5leHQpXHJcbiAgICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKFRhYi5UUkFOU0lUSU9OX0RVUkFUSU9OKSA6XHJcbiAgICAgIG5leHQoKVxyXG5cclxuICAgICRhY3RpdmUucmVtb3ZlQ2xhc3MoJ2luJylcclxuICB9XHJcblxyXG5cclxuICAvLyBUQUIgUExVR0lOIERFRklOSVRJT05cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xyXG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkdGhpcyA9ICQodGhpcylcclxuICAgICAgdmFyIGRhdGEgID0gJHRoaXMuZGF0YSgnYnMudGFiJylcclxuXHJcbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMudGFiJywgKGRhdGEgPSBuZXcgVGFiKHRoaXMpKSlcclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdmFyIG9sZCA9ICQuZm4udGFiXHJcblxyXG4gICQuZm4udGFiICAgICAgICAgICAgID0gUGx1Z2luXHJcbiAgJC5mbi50YWIuQ29uc3RydWN0b3IgPSBUYWJcclxuXHJcblxyXG4gIC8vIFRBQiBOTyBDT05GTElDVFxyXG4gIC8vID09PT09PT09PT09PT09PVxyXG5cclxuICAkLmZuLnRhYi5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgJC5mbi50YWIgPSBvbGRcclxuICAgIHJldHVybiB0aGlzXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gVEFCIERBVEEtQVBJXHJcbiAgLy8gPT09PT09PT09PT09XHJcblxyXG4gIHZhciBjbGlja0hhbmRsZXIgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICBQbHVnaW4uY2FsbCgkKHRoaXMpLCAnc2hvdycpXHJcbiAgfVxyXG5cclxuICAkKGRvY3VtZW50KVxyXG4gICAgLm9uKCdjbGljay5icy50YWIuZGF0YS1hcGknLCAnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJywgY2xpY2tIYW5kbGVyKVxyXG4gICAgLm9uKCdjbGljay5icy50YWIuZGF0YS1hcGknLCAnW2RhdGEtdG9nZ2xlPVwicGlsbFwiXScsIGNsaWNrSGFuZGxlcilcclxuXHJcbn0oalF1ZXJ5KTtcclxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIEJvb3RzdHJhcDogdHJhbnNpdGlvbi5qcyB2My4zLjVcclxuICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vamF2YXNjcmlwdC8jdHJhbnNpdGlvbnNcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLlxyXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cclxuXHJcblxyXG4rZnVuY3Rpb24gKCQpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG4gIC8vIENTUyBUUkFOU0lUSU9OIFNVUFBPUlQgKFNob3V0b3V0OiBodHRwOi8vd3d3Lm1vZGVybml6ci5jb20vKVxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kKCkge1xyXG4gICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYm9vdHN0cmFwJylcclxuXHJcbiAgICB2YXIgdHJhbnNFbmRFdmVudE5hbWVzID0ge1xyXG4gICAgICBXZWJraXRUcmFuc2l0aW9uIDogJ3dlYmtpdFRyYW5zaXRpb25FbmQnLFxyXG4gICAgICBNb3pUcmFuc2l0aW9uICAgIDogJ3RyYW5zaXRpb25lbmQnLFxyXG4gICAgICBPVHJhbnNpdGlvbiAgICAgIDogJ29UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kJyxcclxuICAgICAgdHJhbnNpdGlvbiAgICAgICA6ICd0cmFuc2l0aW9uZW5kJ1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAodmFyIG5hbWUgaW4gdHJhbnNFbmRFdmVudE5hbWVzKSB7XHJcbiAgICAgIGlmIChlbC5zdHlsZVtuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZW5kOiB0cmFuc0VuZEV2ZW50TmFtZXNbbmFtZV0gfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlIC8vIGV4cGxpY2l0IGZvciBpZTggKCAgLl8uKVxyXG4gIH1cclxuXHJcbiAgLy8gaHR0cDovL2Jsb2cuYWxleG1hY2Nhdy5jb20vY3NzLXRyYW5zaXRpb25zXHJcbiAgJC5mbi5lbXVsYXRlVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uIChkdXJhdGlvbikge1xyXG4gICAgdmFyIGNhbGxlZCA9IGZhbHNlXHJcbiAgICB2YXIgJGVsID0gdGhpc1xyXG4gICAgJCh0aGlzKS5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZSB9KVxyXG4gICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkgeyBpZiAoIWNhbGxlZCkgJCgkZWwpLnRyaWdnZXIoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSB9XHJcbiAgICBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkdXJhdGlvbilcclxuICAgIHJldHVybiB0aGlzXHJcbiAgfVxyXG5cclxuICAkKGZ1bmN0aW9uICgpIHtcclxuICAgICQuc3VwcG9ydC50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkVuZCgpXHJcblxyXG4gICAgaWYgKCEkLnN1cHBvcnQudHJhbnNpdGlvbikgcmV0dXJuXHJcblxyXG4gICAgJC5ldmVudC5zcGVjaWFsLmJzVHJhbnNpdGlvbkVuZCA9IHtcclxuICAgICAgYmluZFR5cGU6ICQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxcclxuICAgICAgZGVsZWdhdGVUeXBlOiAkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsXHJcbiAgICAgIGhhbmRsZTogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoJChlLnRhcmdldCkuaXModGhpcykpIHJldHVybiBlLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG59KGpRdWVyeSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.blockui.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.blockui.js index e931adcb062..beb0ff98933 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.blockui.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.blockui.js @@ -624,4 +624,4 @@ })(); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5ibG9ja3VpLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuYmxvY2t1aS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogalF1ZXJ5IGJsb2NrVUkgcGx1Z2luXG4gKiBWZXJzaW9uIDIuNzAuMC0yMDE0LjExLjIzXG4gKiBSZXF1aXJlcyBqUXVlcnkgdjEuNyBvciBsYXRlclxuICpcbiAqIEV4YW1wbGVzIGF0OiBodHRwOi8vbWFsc3VwLmNvbS9qcXVlcnkvYmxvY2svXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMyBNLiBBbHN1cFxuICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXM6XG4gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sXG4gKlxuICogVGhhbmtzIHRvIEFtaXItSG9zc2VpbiBTb2JoaSBmb3Igc29tZSBleGNlbGxlbnQgY29udHJpYnV0aW9ucyFcbiAqL1xuXG47KGZ1bmN0aW9uKCkge1xuLypqc2hpbnQgZXFlcWVxOmZhbHNlIGN1cmx5OmZhbHNlIGxhdGVkZWY6ZmFsc2UgKi9cblwidXNlIHN0cmljdFwiO1xuXG5cdGZ1bmN0aW9uIHNldHVwKCQpIHtcblx0XHQkLmZuLl9mYWRlSW4gPSAkLmZuLmZhZGVJbjtcblxuXHRcdHZhciBub09wID0gJC5ub29wIHx8IGZ1bmN0aW9uKCkge307XG5cblx0XHQvLyB0aGlzIGJpdCBpcyB0byBlbnN1cmUgd2UgZG9uJ3QgY2FsbCBzZXRFeHByZXNzaW9uIHdoZW4gd2Ugc2hvdWxkbid0ICh3aXRoIGV4dHJhIG11c2NsZSB0byBoYW5kbGVcblx0XHQvLyBjb25mdXNpbmcgdXNlckFnZW50IHN0cmluZ3Mgb24gVmlzdGEpXG5cdFx0dmFyIG1zaWUgPSAvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblx0XHR2YXIgaWU2ICA9IC9NU0lFIDYuMC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAhIC9NU0lFIDguMC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblx0XHR2YXIgbW9kZSA9IGRvY3VtZW50LmRvY3VtZW50TW9kZSB8fCAwO1xuXHRcdHZhciBzZXRFeHByID0gJC5pc0Z1bmN0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZS5zZXRFeHByZXNzaW9uICk7XG5cblx0XHQvLyBnbG9iYWwgJCBtZXRob2RzIGZvciBibG9ja2luZy91bmJsb2NraW5nIHRoZSBlbnRpcmUgcGFnZVxuXHRcdCQuYmxvY2tVSSAgID0gZnVuY3Rpb24ob3B0cykgeyBpbnN0YWxsKHdpbmRvdywgb3B0cyk7IH07XG5cdFx0JC51bmJsb2NrVUkgPSBmdW5jdGlvbihvcHRzKSB7IHJlbW92ZSh3aW5kb3csIG9wdHMpOyB9O1xuXG5cdFx0Ly8gY29udmVuaWVuY2UgbWV0aG9kIGZvciBxdWljayBncm93bC1saWtlIG5vdGlmaWNhdGlvbnMgIChodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9Z3Jvd2wpXG5cdFx0JC5ncm93bFVJID0gZnVuY3Rpb24odGl0bGUsIG1lc3NhZ2UsIHRpbWVvdXQsIG9uQ2xvc2UpIHtcblx0XHRcdHZhciAkbSA9ICQoJzxkaXYgY2xhc3M9XCJncm93bFVJXCI+PC9kaXY+Jyk7XG5cdFx0XHRpZiAodGl0bGUpICRtLmFwcGVuZCgnPGgxPicrdGl0bGUrJzwvaDE+Jyk7XG5cdFx0XHRpZiAobWVzc2FnZSkgJG0uYXBwZW5kKCc8aDI+JyttZXNzYWdlKyc8L2gyPicpO1xuXHRcdFx0aWYgKHRpbWVvdXQgPT09IHVuZGVmaW5lZCkgdGltZW91dCA9IDMwMDA7XG5cblx0XHRcdC8vIEFkZGVkIGJ5IGtvbmFwdW46IFNldCB0aW1lb3V0IHRvIDMwIHNlY29uZHMgaWYgdGhpcyBncm93bCBpcyBtb3VzZWQgb3ZlciwgbGlrZSBub3JtYWwgdG9hc3Qgbm90aWZpY2F0aW9uc1xuXHRcdFx0dmFyIGNhbGxCbG9jayA9IGZ1bmN0aW9uKG9wdHMpIHtcblx0XHRcdFx0b3B0cyA9IG9wdHMgfHwge307XG5cblx0XHRcdFx0JC5ibG9ja1VJKHtcblx0XHRcdFx0XHRtZXNzYWdlOiAkbSxcblx0XHRcdFx0XHRmYWRlSW4gOiB0eXBlb2Ygb3B0cy5mYWRlSW4gICE9PSAndW5kZWZpbmVkJyA/IG9wdHMuZmFkZUluICA6IDcwMCxcblx0XHRcdFx0XHRmYWRlT3V0OiB0eXBlb2Ygb3B0cy5mYWRlT3V0ICE9PSAndW5kZWZpbmVkJyA/IG9wdHMuZmFkZU91dCA6IDEwMDAsXG5cdFx0XHRcdFx0dGltZW91dDogdHlwZW9mIG9wdHMudGltZW91dCAhPT0gJ3VuZGVmaW5lZCcgPyBvcHRzLnRpbWVvdXQgOiB0aW1lb3V0LFxuXHRcdFx0XHRcdGNlbnRlclk6IGZhbHNlLFxuXHRcdFx0XHRcdHNob3dPdmVybGF5OiBmYWxzZSxcblx0XHRcdFx0XHRvblVuYmxvY2s6IG9uQ2xvc2UsXG5cdFx0XHRcdFx0Y3NzOiAkLmJsb2NrVUkuZGVmYXVsdHMuZ3Jvd2xDU1Ncblx0XHRcdFx0fSk7XG5cdFx0XHR9O1xuXG5cdFx0XHRjYWxsQmxvY2soKTtcblx0XHRcdHZhciBub25tb3VzZWRPcGFjaXR5ID0gJG0uY3NzKCdvcGFjaXR5Jyk7XG5cdFx0XHQkbS5tb3VzZW92ZXIoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxCbG9jayh7XG5cdFx0XHRcdFx0ZmFkZUluOiAwLFxuXHRcdFx0XHRcdHRpbWVvdXQ6IDMwMDAwXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHZhciBkaXNwbGF5QmxvY2sgPSAkKCcuYmxvY2tNc2cnKTtcblx0XHRcdFx0ZGlzcGxheUJsb2NrLnN0b3AoKTsgLy8gY2FuY2VsIGZhZGVvdXQgaWYgaXQgaGFzIHN0YXJ0ZWRcblx0XHRcdFx0ZGlzcGxheUJsb2NrLmZhZGVUbygzMDAsIDEpOyAvLyBtYWtlIGl0IGVhc2llciB0byByZWFkIHRoZSBtZXNzYWdlIGJ5IHJlbW92aW5nIHRyYW5zcGFyZW5jeVxuXHRcdFx0fSkubW91c2VvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdCQoJy5ibG9ja01zZycpLmZhZGVPdXQoMTAwMCk7XG5cdFx0XHR9KTtcblx0XHRcdC8vIEVuZCBrb25hcHVuIGFkZGl0aW9uc1xuXHRcdH07XG5cblx0XHQvLyBwbHVnaW4gbWV0aG9kIGZvciBibG9ja2luZyBlbGVtZW50IGNvbnRlbnRcblx0XHQkLmZuLmJsb2NrID0gZnVuY3Rpb24ob3B0cykge1xuXHRcdFx0aWYgKCB0aGlzWzBdID09PSB3aW5kb3cgKSB7XG5cdFx0XHRcdCQuYmxvY2tVSSggb3B0cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHRcdHZhciBmdWxsT3B0cyA9ICQuZXh0ZW5kKHt9LCAkLmJsb2NrVUkuZGVmYXVsdHMsIG9wdHMgfHwge30pO1xuXHRcdFx0dGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgJGVsID0gJCh0aGlzKTtcblx0XHRcdFx0aWYgKGZ1bGxPcHRzLmlnbm9yZUlmQmxvY2tlZCAmJiAkZWwuZGF0YSgnYmxvY2tVSS5pc0Jsb2NrZWQnKSlcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdCRlbC51bmJsb2NrKHsgZmFkZU91dDogMCB9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoJC5jc3ModGhpcywncG9zaXRpb24nKSA9PSAnc3RhdGljJykge1xuXHRcdFx0XHRcdHRoaXMuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuXHRcdFx0XHRcdCQodGhpcykuZGF0YSgnYmxvY2tVSS5zdGF0aWMnLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnN0eWxlLnpvb20gPSAxOyAvLyBmb3JjZSAnaGFzTGF5b3V0JyBpbiBpZVxuXHRcdFx0XHRpbnN0YWxsKHRoaXMsIG9wdHMpO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdC8vIHBsdWdpbiBtZXRob2QgZm9yIHVuYmxvY2tpbmcgZWxlbWVudCBjb250ZW50XG5cdFx0JC5mbi51bmJsb2NrID0gZnVuY3Rpb24ob3B0cykge1xuXHRcdFx0aWYgKCB0aGlzWzBdID09PSB3aW5kb3cgKSB7XG5cdFx0XHRcdCQudW5ibG9ja1VJKCBvcHRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0cmVtb3ZlKHRoaXMsIG9wdHMpO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdCQuYmxvY2tVSS52ZXJzaW9uID0gMi43MDsgLy8gMm5kIGdlbmVyYXRpb24gYmxvY2tpbmcgYXQgbm8gZXh0cmEgY29zdCFcblxuXHRcdC8vIG92ZXJyaWRlIHRoZXNlIGluIHlvdXIgY29kZSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kIHN0eWxlXG5cdFx0JC5ibG9ja1VJLmRlZmF1bHRzID0ge1xuXHRcdFx0Ly8gbWVzc2FnZSBkaXNwbGF5ZWQgd2hlbiBibG9ja2luZyAodXNlIG51bGwgZm9yIG5vIG1lc3NhZ2UpXG5cdFx0XHRtZXNzYWdlOiAgJzxoMT5QbGVhc2Ugd2FpdC4uLjwvaDE+JyxcblxuXHRcdFx0dGl0bGU6IG51bGwsXHRcdC8vIHRpdGxlIHN0cmluZzsgb25seSB1c2VkIHdoZW4gdGhlbWUgPT0gdHJ1ZVxuXHRcdFx0ZHJhZ2dhYmxlOiB0cnVlLFx0Ly8gb25seSB1c2VkIHdoZW4gdGhlbWUgPT0gdHJ1ZSAocmVxdWlyZXMganF1ZXJ5LXVpLmpzIHRvIGJlIGxvYWRlZClcblxuXHRcdFx0dGhlbWU6IGZhbHNlLCAvLyBzZXQgdG8gdHJ1ZSB0byB1c2Ugd2l0aCBqUXVlcnkgVUkgdGhlbWVzXG5cblx0XHRcdC8vIHN0eWxlcyBmb3IgdGhlIG1lc3NhZ2Ugd2hlbiBibG9ja2luZzsgaWYgeW91IHdpc2ggdG8gZGlzYWJsZVxuXHRcdFx0Ly8gdGhlc2UgYW5kIHVzZSBhbiBleHRlcm5hbCBzdHlsZXNoZWV0IHRoZW4gZG8gdGhpcyBpbiB5b3VyIGNvZGU6XG5cdFx0XHQvLyAkLmJsb2NrVUkuZGVmYXVsdHMuY3NzID0ge307XG5cdFx0XHRjc3M6IHtcblx0XHRcdFx0cGFkZGluZzpcdDAsXG5cdFx0XHRcdG1hcmdpbjpcdFx0MCxcblx0XHRcdFx0d2lkdGg6XHRcdCczMCUnLFxuXHRcdFx0XHR0b3A6XHRcdCc0MCUnLFxuXHRcdFx0XHRsZWZ0Olx0XHQnMzUlJyxcblx0XHRcdFx0dGV4dEFsaWduOlx0J2NlbnRlcicsXG5cdFx0XHRcdGNvbG9yOlx0XHQnIzAwMCcsXG5cdFx0XHRcdGJvcmRlcjpcdFx0JzNweCBzb2xpZCAjYWFhJyxcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yOicjZmZmJyxcblx0XHRcdFx0Y3Vyc29yOlx0XHQnd2FpdCdcblx0XHRcdH0sXG5cblx0XHRcdC8vIG1pbmltYWwgc3R5bGUgc2V0IHVzZWQgd2hlbiB0aGVtZXMgYXJlIHVzZWRcblx0XHRcdHRoZW1lZENTUzoge1xuXHRcdFx0XHR3aWR0aDpcdCczMCUnLFxuXHRcdFx0XHR0b3A6XHQnNDAlJyxcblx0XHRcdFx0bGVmdDpcdCczNSUnXG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBzdHlsZXMgZm9yIHRoZSBvdmVybGF5XG5cdFx0XHRvdmVybGF5Q1NTOiAge1xuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6XHQnIzAwMCcsXG5cdFx0XHRcdG9wYWNpdHk6XHRcdFx0MC42LFxuXHRcdFx0XHRjdXJzb3I6XHRcdFx0XHQnd2FpdCdcblx0XHRcdH0sXG5cblx0XHRcdC8vIHN0eWxlIHRvIHJlcGxhY2Ugd2FpdCBjdXJzb3IgYmVmb3JlIHVuYmxvY2tpbmcgdG8gY29ycmVjdCBpc3N1ZVxuXHRcdFx0Ly8gb2YgbGluZ2VyaW5nIHdhaXQgY3Vyc29yXG5cdFx0XHRjdXJzb3JSZXNldDogJ2RlZmF1bHQnLFxuXG5cdFx0XHQvLyBzdHlsZXMgYXBwbGllZCB3aGVuIHVzaW5nICQuZ3Jvd2xVSVxuXHRcdFx0Z3Jvd2xDU1M6IHtcblx0XHRcdFx0d2lkdGg6XHRcdCczNTBweCcsXG5cdFx0XHRcdHRvcDpcdFx0JzEwcHgnLFxuXHRcdFx0XHRsZWZ0Olx0XHQnJyxcblx0XHRcdFx0cmlnaHQ6XHRcdCcxMHB4Jyxcblx0XHRcdFx0Ym9yZGVyOlx0XHQnbm9uZScsXG5cdFx0XHRcdHBhZGRpbmc6XHQnNXB4Jyxcblx0XHRcdFx0b3BhY2l0eTpcdDAuNixcblx0XHRcdFx0Y3Vyc29yOlx0XHQnZGVmYXVsdCcsXG5cdFx0XHRcdGNvbG9yOlx0XHQnI2ZmZicsXG5cdFx0XHRcdGJhY2tncm91bmRDb2xvcjogJyMwMDAnLFxuXHRcdFx0XHQnLXdlYmtpdC1ib3JkZXItcmFkaXVzJzonMTBweCcsXG5cdFx0XHRcdCctbW96LWJvcmRlci1yYWRpdXMnOlx0JzEwcHgnLFxuXHRcdFx0XHQnYm9yZGVyLXJhZGl1cyc6XHRcdCcxMHB4J1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gSUUgaXNzdWVzOiAnYWJvdXQ6YmxhbmsnIGZhaWxzIG9uIEhUVFBTIGFuZCBqYXZhc2NyaXB0OmZhbHNlIGlzIHMtbC1vLXdcblx0XHRcdC8vIChoYXQgdGlwIHRvIEpvcmdlIEguIE4uIGRlIFZhc2NvbmNlbG9zKVxuXHRcdFx0Lypqc2hpbnQgc2NyaXB0dXJsOnRydWUgKi9cblx0XHRcdGlmcmFtZVNyYzogL15odHRwcy9pLnRlc3Qod2luZG93LmxvY2F0aW9uLmhyZWYgfHwgJycpID8gJ2phdmFzY3JpcHQ6ZmFsc2UnIDogJ2Fib3V0OmJsYW5rJyxcblxuXHRcdFx0Ly8gZm9yY2UgdXNhZ2Ugb2YgaWZyYW1lIGluIG5vbi1JRSBicm93c2VycyAoaGFuZHkgZm9yIGJsb2NraW5nIGFwcGxldHMpXG5cdFx0XHRmb3JjZUlmcmFtZTogZmFsc2UsXG5cblx0XHRcdC8vIHotaW5kZXggZm9yIHRoZSBibG9ja2luZyBvdmVybGF5XG5cdFx0XHRiYXNlWjogMTAwMCxcblxuXHRcdFx0Ly8gc2V0IHRoZXNlIHRvIHRydWUgdG8gaGF2ZSB0aGUgbWVzc2FnZSBhdXRvbWF0aWNhbGx5IGNlbnRlcmVkXG5cdFx0XHRjZW50ZXJYOiB0cnVlLCAvLyA8LS0gb25seSBlZmZlY3RzIGVsZW1lbnQgYmxvY2tpbmcgKHBhZ2UgYmxvY2sgY29udHJvbGxlZCB2aWEgY3NzIGFib3ZlKVxuXHRcdFx0Y2VudGVyWTogdHJ1ZSxcblxuXHRcdFx0Ly8gYWxsb3cgYm9keSBlbGVtZW50IHRvIGJlIHN0ZXRjaGVkIGluIGllNjsgdGhpcyBtYWtlcyBibG9ja2luZyBsb29rIGJldHRlclxuXHRcdFx0Ly8gb24gXCJzaG9ydFwiIHBhZ2VzLiAgZGlzYWJsZSBpZiB5b3Ugd2lzaCB0byBwcmV2ZW50IGNoYW5nZXMgdG8gdGhlIGJvZHkgaGVpZ2h0XG5cdFx0XHRhbGxvd0JvZHlTdHJldGNoOiB0cnVlLFxuXG5cdFx0XHQvLyBlbmFibGUgaWYgeW91IHdhbnQga2V5IGFuZCBtb3VzZSBldmVudHMgdG8gYmUgZGlzYWJsZWQgZm9yIGNvbnRlbnQgdGhhdCBpcyBibG9ja2VkXG5cdFx0XHRiaW5kRXZlbnRzOiB0cnVlLFxuXG5cdFx0XHQvLyBiZSBkZWZhdWx0IGJsb2NrVUkgd2lsbCBzdXByZXNzIHRhYiBuYXZpZ2F0aW9uIGZyb20gbGVhdmluZyBibG9ja2luZyBjb250ZW50XG5cdFx0XHQvLyAoaWYgYmluZEV2ZW50cyBpcyB0cnVlKVxuXHRcdFx0Y29uc3RyYWluVGFiS2V5OiB0cnVlLFxuXG5cdFx0XHQvLyBmYWRlSW4gdGltZSBpbiBtaWxsaXM7IHNldCB0byAwIHRvIGRpc2FibGUgZmFkZUluIG9uIGJsb2NrXG5cdFx0XHRmYWRlSW46ICAyMDAsXG5cblx0XHRcdC8vIGZhZGVPdXQgdGltZSBpbiBtaWxsaXM7IHNldCB0byAwIHRvIGRpc2FibGUgZmFkZU91dCBvbiB1bmJsb2NrXG5cdFx0XHRmYWRlT3V0OiAgNDAwLFxuXG5cdFx0XHQvLyB0aW1lIGluIG1pbGxpcyB0byB3YWl0IGJlZm9yZSBhdXRvLXVuYmxvY2tpbmc7IHNldCB0byAwIHRvIGRpc2FibGUgYXV0by11bmJsb2NrXG5cdFx0XHR0aW1lb3V0OiAwLFxuXG5cdFx0XHQvLyBkaXNhYmxlIGlmIHlvdSBkb24ndCB3YW50IHRvIHNob3cgdGhlIG92ZXJsYXlcblx0XHRcdHNob3dPdmVybGF5OiB0cnVlLFxuXG5cdFx0XHQvLyBpZiB0cnVlLCBmb2N1cyB3aWxsIGJlIHBsYWNlZCBpbiB0aGUgZmlyc3QgYXZhaWxhYmxlIGlucHV0IGZpZWxkIHdoZW5cblx0XHRcdC8vIHBhZ2UgYmxvY2tpbmdcblx0XHRcdGZvY3VzSW5wdXQ6IHRydWUsXG5cbiAgICAgICAgICAgIC8vIGVsZW1lbnRzIHRoYXQgY2FuIHJlY2VpdmUgZm9jdXNcbiAgICAgICAgICAgIGZvY3VzYWJsZUVsZW1lbnRzOiAnOmlucHV0OmVuYWJsZWQ6dmlzaWJsZScsXG5cblx0XHRcdC8vIHN1cHByZXNzZXMgdGhlIHVzZSBvZiBvdmVybGF5IHN0eWxlcyBvbiBGRi9MaW51eCAoZHVlIHRvIHBlcmZvcm1hbmNlIGlzc3VlcyB3aXRoIG9wYWNpdHkpXG5cdFx0XHQvLyBubyBsb25nZXIgbmVlZGVkIGluIDIwMTJcblx0XHRcdC8vIGFwcGx5UGxhdGZvcm1PcGFjaXR5UnVsZXM6IHRydWUsXG5cblx0XHRcdC8vIGNhbGxiYWNrIG1ldGhvZCBpbnZva2VkIHdoZW4gZmFkZUluIGhhcyBjb21wbGV0ZWQgYW5kIGJsb2NraW5nIG1lc3NhZ2UgaXMgdmlzaWJsZVxuXHRcdFx0b25CbG9jazogbnVsbCxcblxuXHRcdFx0Ly8gY2FsbGJhY2sgbWV0aG9kIGludm9rZWQgd2hlbiB1bmJsb2NraW5nIGhhcyBjb21wbGV0ZWQ7IHRoZSBjYWxsYmFjayBpc1xuXHRcdFx0Ly8gcGFzc2VkIHRoZSBlbGVtZW50IHRoYXQgaGFzIGJlZW4gdW5ibG9ja2VkICh3aGljaCBpcyB0aGUgd2luZG93IG9iamVjdCBmb3IgcGFnZVxuXHRcdFx0Ly8gYmxvY2tzKSBhbmQgdGhlIG9wdGlvbnMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGUgdW5ibG9jayBjYWxsOlxuXHRcdFx0Ly9cdG9uVW5ibG9jayhlbGVtZW50LCBvcHRpb25zKVxuXHRcdFx0b25VbmJsb2NrOiBudWxsLFxuXG5cdFx0XHQvLyBjYWxsYmFjayBtZXRob2QgaW52b2tlZCB3aGVuIHRoZSBvdmVybGF5IGFyZWEgaXMgY2xpY2tlZC5cblx0XHRcdC8vIHNldHRpbmcgdGhpcyB3aWxsIHR1cm4gdGhlIGN1cnNvciB0byBhIHBvaW50ZXIsIG90aGVyd2lzZSBjdXJzb3IgZGVmaW5lZCBpbiBvdmVybGF5Q3NzIHdpbGwgYmUgdXNlZC5cblx0XHRcdG9uT3ZlcmxheUNsaWNrOiBudWxsLFxuXG5cdFx0XHQvLyBkb24ndCBhc2s7IGlmIHlvdSByZWFsbHkgbXVzdCBrbm93OiBodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvanF1ZXJ5LWVuL2Jyb3dzZV90aHJlYWQvdGhyZWFkLzM2NjQwYTg3MzA1MDM1OTUvMmY2YTc5YTc3YTc4ZTQ5MyMyZjZhNzlhNzdhNzhlNDkzXG5cdFx0XHRxdWlya3Ntb2RlT2Zmc2V0SGFjazogNCxcblxuXHRcdFx0Ly8gY2xhc3MgbmFtZSBvZiB0aGUgbWVzc2FnZSBibG9ja1xuXHRcdFx0YmxvY2tNc2dDbGFzczogJ2Jsb2NrTXNnJyxcblxuXHRcdFx0Ly8gaWYgaXQgaXMgYWxyZWFkeSBibG9ja2VkLCB0aGVuIGlnbm9yZSBpdCAoZG9uJ3QgdW5ibG9jayBhbmQgcmVibG9jaylcblx0XHRcdGlnbm9yZUlmQmxvY2tlZDogZmFsc2Vcblx0XHR9O1xuXG5cdFx0Ly8gcHJpdmF0ZSBkYXRhIGFuZCBmdW5jdGlvbnMgZm9sbG93Li4uXG5cblx0XHR2YXIgcGFnZUJsb2NrID0gbnVsbDtcblx0XHR2YXIgcGFnZUJsb2NrRWxzID0gW107XG5cblx0XHRmdW5jdGlvbiBpbnN0YWxsKGVsLCBvcHRzKSB7XG5cdFx0XHR2YXIgY3NzLCB0aGVtZWRDU1M7XG5cdFx0XHR2YXIgZnVsbCA9IChlbCA9PSB3aW5kb3cpO1xuXHRcdFx0dmFyIG1zZyA9IChvcHRzICYmIG9wdHMubWVzc2FnZSAhPT0gdW5kZWZpbmVkID8gb3B0cy5tZXNzYWdlIDogdW5kZWZpbmVkKTtcblx0XHRcdG9wdHMgPSAkLmV4dGVuZCh7fSwgJC5ibG9ja1VJLmRlZmF1bHRzLCBvcHRzIHx8IHt9KTtcblxuXHRcdFx0aWYgKG9wdHMuaWdub3JlSWZCbG9ja2VkICYmICQoZWwpLmRhdGEoJ2Jsb2NrVUkuaXNCbG9ja2VkJykpXG5cdFx0XHRcdHJldHVybjtcblxuXHRcdFx0b3B0cy5vdmVybGF5Q1NTID0gJC5leHRlbmQoe30sICQuYmxvY2tVSS5kZWZhdWx0cy5vdmVybGF5Q1NTLCBvcHRzLm92ZXJsYXlDU1MgfHwge30pO1xuXHRcdFx0Y3NzID0gJC5leHRlbmQoe30sICQuYmxvY2tVSS5kZWZhdWx0cy5jc3MsIG9wdHMuY3NzIHx8IHt9KTtcblx0XHRcdGlmIChvcHRzLm9uT3ZlcmxheUNsaWNrKVxuXHRcdFx0XHRvcHRzLm92ZXJsYXlDU1MuY3Vyc29yID0gJ3BvaW50ZXInO1xuXG5cdFx0XHR0aGVtZWRDU1MgPSAkLmV4dGVuZCh7fSwgJC5ibG9ja1VJLmRlZmF1bHRzLnRoZW1lZENTUywgb3B0cy50aGVtZWRDU1MgfHwge30pO1xuXHRcdFx0bXNnID0gbXNnID09PSB1bmRlZmluZWQgPyBvcHRzLm1lc3NhZ2UgOiBtc2c7XG5cblx0XHRcdC8vIHJlbW92ZSB0aGUgY3VycmVudCBibG9jayAoaWYgdGhlcmUgaXMgb25lKVxuXHRcdFx0aWYgKGZ1bGwgJiYgcGFnZUJsb2NrKVxuXHRcdFx0XHRyZW1vdmUod2luZG93LCB7ZmFkZU91dDowfSk7XG5cblx0XHRcdC8vIGlmIGFuIGV4aXN0aW5nIGVsZW1lbnQgaXMgYmVpbmcgdXNlZCBhcyB0aGUgYmxvY2tpbmcgY29udGVudCB0aGVuIHdlIGNhcHR1cmVcblx0XHRcdC8vIGl0cyBjdXJyZW50IHBsYWNlIGluIHRoZSBET00gKGFuZCBjdXJyZW50IGRpc3BsYXkgc3R5bGUpIHNvIHdlIGNhbiByZXN0b3JlXG5cdFx0XHQvLyBpdCB3aGVuIHdlIHVuYmxvY2tcblx0XHRcdGlmIChtc2cgJiYgdHlwZW9mIG1zZyAhPSAnc3RyaW5nJyAmJiAobXNnLnBhcmVudE5vZGUgfHwgbXNnLmpxdWVyeSkpIHtcblx0XHRcdFx0dmFyIG5vZGUgPSBtc2cuanF1ZXJ5ID8gbXNnWzBdIDogbXNnO1xuXHRcdFx0XHR2YXIgZGF0YSA9IHt9O1xuXHRcdFx0XHQkKGVsKS5kYXRhKCdibG9ja1VJLmhpc3RvcnknLCBkYXRhKTtcblx0XHRcdFx0ZGF0YS5lbCA9IG5vZGU7XG5cdFx0XHRcdGRhdGEucGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0XHRkYXRhLmRpc3BsYXkgPSBub2RlLnN0eWxlLmRpc3BsYXk7XG5cdFx0XHRcdGRhdGEucG9zaXRpb24gPSBub2RlLnN0eWxlLnBvc2l0aW9uO1xuXHRcdFx0XHRpZiAoZGF0YS5wYXJlbnQpXG5cdFx0XHRcdFx0ZGF0YS5wYXJlbnQucmVtb3ZlQ2hpbGQobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdCQoZWwpLmRhdGEoJ2Jsb2NrVUkub25VbmJsb2NrJywgb3B0cy5vblVuYmxvY2spO1xuXHRcdFx0dmFyIHogPSBvcHRzLmJhc2VaO1xuXG5cdFx0XHQvLyBibG9ja1VJIHVzZXMgMyBsYXllcnMgZm9yIGJsb2NraW5nLCBmb3Igc2ltcGxpY2l0eSB0aGV5IGFyZSBhbGwgdXNlZCBvbiBldmVyeSBwbGF0Zm9ybTtcblx0XHRcdC8vIGxheWVyMSBpcyB0aGUgaWZyYW1lIGxheWVyIHdoaWNoIGlzIHVzZWQgdG8gc3VwcmVzcyBibGVlZCB0aHJvdWdoIG9mIHVuZGVybHlpbmcgY29udGVudFxuXHRcdFx0Ly8gbGF5ZXIyIGlzIHRoZSBvdmVybGF5IGxheWVyIHdoaWNoIGhhcyBvcGFjaXR5IGFuZCBhIHdhaXQgY3Vyc29yIChieSBkZWZhdWx0KVxuXHRcdFx0Ly8gbGF5ZXIzIGlzIHRoZSBtZXNzYWdlIGNvbnRlbnQgdGhhdCBpcyBkaXNwbGF5ZWQgd2hpbGUgYmxvY2tpbmdcblx0XHRcdHZhciBseXIxLCBseXIyLCBseXIzLCBzO1xuXHRcdFx0aWYgKG1zaWUgfHwgb3B0cy5mb3JjZUlmcmFtZSlcblx0XHRcdFx0bHlyMSA9ICQoJzxpZnJhbWUgY2xhc3M9XCJibG9ja1VJXCIgc3R5bGU9XCJ6LWluZGV4OicrICh6KyspICsnO2Rpc3BsYXk6bm9uZTtib3JkZXI6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MDtsZWZ0OjBcIiBzcmM9XCInK29wdHMuaWZyYW1lU3JjKydcIj48L2lmcmFtZT4nKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0bHlyMSA9ICQoJzxkaXYgY2xhc3M9XCJibG9ja1VJXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj48L2Rpdj4nKTtcblxuXHRcdFx0aWYgKG9wdHMudGhlbWUpXG5cdFx0XHRcdGx5cjIgPSAkKCc8ZGl2IGNsYXNzPVwiYmxvY2tVSSBibG9ja092ZXJsYXkgdWktd2lkZ2V0LW92ZXJsYXlcIiBzdHlsZT1cInotaW5kZXg6JysgKHorKykgKyc7ZGlzcGxheTpub25lXCI+PC9kaXY+Jyk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGx5cjIgPSAkKCc8ZGl2IGNsYXNzPVwiYmxvY2tVSSBibG9ja092ZXJsYXlcIiBzdHlsZT1cInotaW5kZXg6JysgKHorKykgKyc7ZGlzcGxheTpub25lO2JvcmRlcjpub25lO21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowO2xlZnQ6MFwiPjwvZGl2PicpO1xuXG5cdFx0XHRpZiAob3B0cy50aGVtZSAmJiBmdWxsKSB7XG5cdFx0XHRcdHMgPSAnPGRpdiBjbGFzcz1cImJsb2NrVUkgJyArIG9wdHMuYmxvY2tNc2dDbGFzcyArICcgYmxvY2tQYWdlIHVpLWRpYWxvZyB1aS13aWRnZXQgdWktY29ybmVyLWFsbFwiIHN0eWxlPVwiei1pbmRleDonKyh6KzEwKSsnO2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZFwiPic7XG5cdFx0XHRcdGlmICggb3B0cy50aXRsZSApIHtcblx0XHRcdFx0XHRzICs9ICc8ZGl2IGNsYXNzPVwidWktd2lkZ2V0LWhlYWRlciB1aS1kaWFsb2ctdGl0bGViYXIgdWktY29ybmVyLWFsbCBibG9ja1RpdGxlXCI+Jysob3B0cy50aXRsZSB8fCAnJm5ic3A7JykrJzwvZGl2Pic7XG5cdFx0XHRcdH1cblx0XHRcdFx0cyArPSAnPGRpdiBjbGFzcz1cInVpLXdpZGdldC1jb250ZW50IHVpLWRpYWxvZy1jb250ZW50XCI+PC9kaXY+Jztcblx0XHRcdFx0cyArPSAnPC9kaXY+Jztcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKG9wdHMudGhlbWUpIHtcblx0XHRcdFx0cyA9ICc8ZGl2IGNsYXNzPVwiYmxvY2tVSSAnICsgb3B0cy5ibG9ja01zZ0NsYXNzICsgJyBibG9ja0VsZW1lbnQgdWktZGlhbG9nIHVpLXdpZGdldCB1aS1jb3JuZXItYWxsXCIgc3R5bGU9XCJ6LWluZGV4OicrKHorMTApKyc7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlXCI+Jztcblx0XHRcdFx0aWYgKCBvcHRzLnRpdGxlICkge1xuXHRcdFx0XHRcdHMgKz0gJzxkaXYgY2xhc3M9XCJ1aS13aWRnZXQtaGVhZGVyIHVpLWRpYWxvZy10aXRsZWJhciB1aS1jb3JuZXItYWxsIGJsb2NrVGl0bGVcIj4nKyhvcHRzLnRpdGxlIHx8ICcmbmJzcDsnKSsnPC9kaXY+Jztcblx0XHRcdFx0fVxuXHRcdFx0XHRzICs9ICc8ZGl2IGNsYXNzPVwidWktd2lkZ2V0LWNvbnRlbnQgdWktZGlhbG9nLWNvbnRlbnRcIj48L2Rpdj4nO1xuXHRcdFx0XHRzICs9ICc8L2Rpdj4nO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoZnVsbCkge1xuXHRcdFx0XHRzID0gJzxkaXYgY2xhc3M9XCJibG9ja1VJICcgKyBvcHRzLmJsb2NrTXNnQ2xhc3MgKyAnIGJsb2NrUGFnZVwiIHN0eWxlPVwiei1pbmRleDonKyh6KzEwKSsnO2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZFwiPjwvZGl2Pic7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0cyA9ICc8ZGl2IGNsYXNzPVwiYmxvY2tVSSAnICsgb3B0cy5ibG9ja01zZ0NsYXNzICsgJyBibG9ja0VsZW1lbnRcIiBzdHlsZT1cInotaW5kZXg6JysoeisxMCkrJztkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGVcIj48L2Rpdj4nO1xuXHRcdFx0fVxuXHRcdFx0bHlyMyA9ICQocyk7XG5cblx0XHRcdC8vIGlmIHdlIGhhdmUgYSBtZXNzYWdlLCBzdHlsZSBpdFxuXHRcdFx0aWYgKG1zZykge1xuXHRcdFx0XHRpZiAob3B0cy50aGVtZSkge1xuXHRcdFx0XHRcdGx5cjMuY3NzKHRoZW1lZENTUyk7XG5cdFx0XHRcdFx0bHlyMy5hZGRDbGFzcygndWktd2lkZ2V0LWNvbnRlbnQnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0bHlyMy5jc3MoY3NzKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc3R5bGUgdGhlIG92ZXJsYXlcblx0XHRcdGlmICghb3B0cy50aGVtZSAvKiYmICghb3B0cy5hcHBseVBsYXRmb3JtT3BhY2l0eVJ1bGVzKSovKVxuXHRcdFx0XHRseXIyLmNzcyhvcHRzLm92ZXJsYXlDU1MpO1xuXHRcdFx0bHlyMi5jc3MoJ3Bvc2l0aW9uJywgZnVsbCA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnKTtcblxuXHRcdFx0Ly8gbWFrZSBpZnJhbWUgbGF5ZXIgdHJhbnNwYXJlbnQgaW4gSUVcblx0XHRcdGlmIChtc2llIHx8IG9wdHMuZm9yY2VJZnJhbWUpXG5cdFx0XHRcdGx5cjEuY3NzKCdvcGFjaXR5JywwLjApO1xuXG5cdFx0XHQvLyQoW2x5cjFbMF0sbHlyMlswXSxseXIzWzBdXSkuYXBwZW5kVG8oZnVsbCA/ICdib2R5JyA6IGVsKTtcblx0XHRcdHZhciBsYXllcnMgPSBbbHlyMSxseXIyLGx5cjNdLCAkcGFyID0gZnVsbCA/ICQoJ2JvZHknKSA6ICQoZWwpO1xuXHRcdFx0JC5lYWNoKGxheWVycywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoaXMuYXBwZW5kVG8oJHBhcik7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKG9wdHMudGhlbWUgJiYgb3B0cy5kcmFnZ2FibGUgJiYgJC5mbi5kcmFnZ2FibGUpIHtcblx0XHRcdFx0bHlyMy5kcmFnZ2FibGUoe1xuXHRcdFx0XHRcdGhhbmRsZTogJy51aS1kaWFsb2ctdGl0bGViYXInLFxuXHRcdFx0XHRcdGNhbmNlbDogJ2xpJ1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gaWU3IG11c3QgdXNlIGFic29sdXRlIHBvc2l0aW9uaW5nIGluIHF1aXJrcyBtb2RlIGFuZCB0byBhY2NvdW50IGZvciBhY3RpdmV4IGlzc3VlcyAod2hlbiBzY3JvbGxpbmcpXG5cdFx0XHR2YXIgZXhwciA9IHNldEV4cHIgJiYgKCEkLnN1cHBvcnQuYm94TW9kZWwgfHwgJCgnb2JqZWN0LGVtYmVkJywgZnVsbCA/IG51bGwgOiBlbCkubGVuZ3RoID4gMCk7XG5cdFx0XHRpZiAoaWU2IHx8IGV4cHIpIHtcblx0XHRcdFx0Ly8gZ2l2ZSBib2R5IDEwMCUgaGVpZ2h0XG5cdFx0XHRcdGlmIChmdWxsICYmIG9wdHMuYWxsb3dCb2R5U3RyZXRjaCAmJiAkLnN1cHBvcnQuYm94TW9kZWwpXG5cdFx0XHRcdFx0JCgnaHRtbCxib2R5JykuY3NzKCdoZWlnaHQnLCcxMDAlJyk7XG5cblx0XHRcdFx0Ly8gZml4IGllNiBpc3N1ZSB3aGVuIGJsb2NrZWQgZWxlbWVudCBoYXMgYSBib3JkZXIgd2lkdGhcblx0XHRcdFx0aWYgKChpZTYgfHwgISQuc3VwcG9ydC5ib3hNb2RlbCkgJiYgIWZ1bGwpIHtcblx0XHRcdFx0XHR2YXIgdCA9IHN6KGVsLCdib3JkZXJUb3BXaWR0aCcpLCBsID0gc3ooZWwsJ2JvcmRlckxlZnRXaWR0aCcpO1xuXHRcdFx0XHRcdHZhciBmaXhUID0gdCA/ICcoMCAtICcrdCsnKScgOiAwO1xuXHRcdFx0XHRcdHZhciBmaXhMID0gbCA/ICcoMCAtICcrbCsnKScgOiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gc2ltdWxhdGUgZml4ZWQgcG9zaXRpb25cblx0XHRcdFx0JC5lYWNoKGxheWVycywgZnVuY3Rpb24oaSxvKSB7XG5cdFx0XHRcdFx0dmFyIHMgPSBvWzBdLnN0eWxlO1xuXHRcdFx0XHRcdHMucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHRcdFx0XHRcdGlmIChpIDwgMikge1xuXHRcdFx0XHRcdFx0aWYgKGZ1bGwpXG5cdFx0XHRcdFx0XHRcdHMuc2V0RXhwcmVzc2lvbignaGVpZ2h0JywnTWF0aC5tYXgoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsIGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0KSAtIChqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbD8wOicrb3B0cy5xdWlya3Ntb2RlT2Zmc2V0SGFjaysnKSArIFwicHhcIicpO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRzLnNldEV4cHJlc3Npb24oJ2hlaWdodCcsJ3RoaXMucGFyZW50Tm9kZS5vZmZzZXRIZWlnaHQgKyBcInB4XCInKTtcblx0XHRcdFx0XHRcdGlmIChmdWxsKVxuXHRcdFx0XHRcdFx0XHRzLnNldEV4cHJlc3Npb24oJ3dpZHRoJywnalF1ZXJ5LnN1cHBvcnQuYm94TW9kZWwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyBcInB4XCInKTtcblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0cy5zZXRFeHByZXNzaW9uKCd3aWR0aCcsJ3RoaXMucGFyZW50Tm9kZS5vZmZzZXRXaWR0aCArIFwicHhcIicpO1xuXHRcdFx0XHRcdFx0aWYgKGZpeEwpIHMuc2V0RXhwcmVzc2lvbignbGVmdCcsIGZpeEwpO1xuXHRcdFx0XHRcdFx0aWYgKGZpeFQpIHMuc2V0RXhwcmVzc2lvbigndG9wJywgZml4VCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2UgaWYgKG9wdHMuY2VudGVyWSkge1xuXHRcdFx0XHRcdFx0aWYgKGZ1bGwpIHMuc2V0RXhwcmVzc2lvbigndG9wJywnKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQpIC8gMiAtICh0aGlzLm9mZnNldEhlaWdodCAvIDIpICsgKGJsYWggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA6IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSArIFwicHhcIicpO1xuXHRcdFx0XHRcdFx0cy5tYXJnaW5Ub3AgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIGlmICghb3B0cy5jZW50ZXJZICYmIGZ1bGwpIHtcblx0XHRcdFx0XHRcdHZhciB0b3AgPSAob3B0cy5jc3MgJiYgb3B0cy5jc3MudG9wKSA/IHBhcnNlSW50KG9wdHMuY3NzLnRvcCwgMTApIDogMDtcblx0XHRcdFx0XHRcdHZhciBleHByZXNzaW9uID0gJygoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgOiBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCkgKyAnK3RvcCsnKSArIFwicHhcIic7XG5cdFx0XHRcdFx0XHRzLnNldEV4cHJlc3Npb24oJ3RvcCcsZXhwcmVzc2lvbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc2hvdyB0aGUgbWVzc2FnZVxuXHRcdFx0aWYgKG1zZykge1xuXHRcdFx0XHRpZiAob3B0cy50aGVtZSlcblx0XHRcdFx0XHRseXIzLmZpbmQoJy51aS13aWRnZXQtY29udGVudCcpLmFwcGVuZChtc2cpO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0bHlyMy5hcHBlbmQobXNnKTtcblx0XHRcdFx0aWYgKG1zZy5qcXVlcnkgfHwgbXNnLm5vZGVUeXBlKVxuXHRcdFx0XHRcdCQobXNnKS5zaG93KCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICgobXNpZSB8fCBvcHRzLmZvcmNlSWZyYW1lKSAmJiBvcHRzLnNob3dPdmVybGF5KVxuXHRcdFx0XHRseXIxLnNob3coKTsgLy8gb3BhY2l0eSBpcyB6ZXJvXG5cdFx0XHRpZiAob3B0cy5mYWRlSW4pIHtcblx0XHRcdFx0dmFyIGNiID0gb3B0cy5vbkJsb2NrID8gb3B0cy5vbkJsb2NrIDogbm9PcDtcblx0XHRcdFx0dmFyIGNiMSA9IChvcHRzLnNob3dPdmVybGF5ICYmICFtc2cpID8gY2IgOiBub09wO1xuXHRcdFx0XHR2YXIgY2IyID0gbXNnID8gY2IgOiBub09wO1xuXHRcdFx0XHRpZiAob3B0cy5zaG93T3ZlcmxheSlcblx0XHRcdFx0XHRseXIyLl9mYWRlSW4ob3B0cy5mYWRlSW4sIGNiMSk7XG5cdFx0XHRcdGlmIChtc2cpXG5cdFx0XHRcdFx0bHlyMy5fZmFkZUluKG9wdHMuZmFkZUluLCBjYjIpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGlmIChvcHRzLnNob3dPdmVybGF5KVxuXHRcdFx0XHRcdGx5cjIuc2hvdygpO1xuXHRcdFx0XHRpZiAobXNnKVxuXHRcdFx0XHRcdGx5cjMuc2hvdygpO1xuXHRcdFx0XHRpZiAob3B0cy5vbkJsb2NrKVxuXHRcdFx0XHRcdG9wdHMub25CbG9jay5iaW5kKGx5cjMpKCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGJpbmQga2V5IGFuZCBtb3VzZSBldmVudHNcblx0XHRcdGJpbmQoMSwgZWwsIG9wdHMpO1xuXG5cdFx0XHRpZiAoZnVsbCkge1xuXHRcdFx0XHRwYWdlQmxvY2sgPSBseXIzWzBdO1xuXHRcdFx0XHRwYWdlQmxvY2tFbHMgPSAkKG9wdHMuZm9jdXNhYmxlRWxlbWVudHMscGFnZUJsb2NrKTtcblx0XHRcdFx0aWYgKG9wdHMuZm9jdXNJbnB1dClcblx0XHRcdFx0XHRzZXRUaW1lb3V0KGZvY3VzLCAyMCk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGNlbnRlcihseXIzWzBdLCBvcHRzLmNlbnRlclgsIG9wdHMuY2VudGVyWSk7XG5cblx0XHRcdGlmIChvcHRzLnRpbWVvdXQpIHtcblx0XHRcdFx0Ly8gYXV0by11bmJsb2NrXG5cdFx0XHRcdHZhciB0byA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKGZ1bGwpXG5cdFx0XHRcdFx0XHQkLnVuYmxvY2tVSShvcHRzKTtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHQkKGVsKS51bmJsb2NrKG9wdHMpO1xuXHRcdFx0XHR9LCBvcHRzLnRpbWVvdXQpO1xuXHRcdFx0XHQkKGVsKS5kYXRhKCdibG9ja1VJLnRpbWVvdXQnLCB0byk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gcmVtb3ZlIHRoZSBibG9ja1xuXHRcdGZ1bmN0aW9uIHJlbW92ZShlbCwgb3B0cykge1xuXHRcdFx0dmFyIGNvdW50O1xuXHRcdFx0dmFyIGZ1bGwgPSAoZWwgPT0gd2luZG93KTtcblx0XHRcdHZhciAkZWwgPSAkKGVsKTtcblx0XHRcdHZhciBkYXRhID0gJGVsLmRhdGEoJ2Jsb2NrVUkuaGlzdG9yeScpO1xuXHRcdFx0dmFyIHRvID0gJGVsLmRhdGEoJ2Jsb2NrVUkudGltZW91dCcpO1xuXHRcdFx0aWYgKHRvKSB7XG5cdFx0XHRcdGNsZWFyVGltZW91dCh0byk7XG5cdFx0XHRcdCRlbC5yZW1vdmVEYXRhKCdibG9ja1VJLnRpbWVvdXQnKTtcblx0XHRcdH1cblx0XHRcdG9wdHMgPSAkLmV4dGVuZCh7fSwgJC5ibG9ja1VJLmRlZmF1bHRzLCBvcHRzIHx8IHt9KTtcblx0XHRcdGJpbmQoMCwgZWwsIG9wdHMpOyAvLyB1bmJpbmQgZXZlbnRzXG5cblx0XHRcdGlmIChvcHRzLm9uVW5ibG9jayA9PT0gbnVsbCkge1xuXHRcdFx0XHRvcHRzLm9uVW5ibG9jayA9ICRlbC5kYXRhKCdibG9ja1VJLm9uVW5ibG9jaycpO1xuXHRcdFx0XHQkZWwucmVtb3ZlRGF0YSgnYmxvY2tVSS5vblVuYmxvY2snKTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGVscztcblx0XHRcdGlmIChmdWxsKSAvLyBjcmF6eSBzZWxlY3RvciB0byBoYW5kbGUgb2RkIGZpZWxkIGVycm9ycyBpbiBpZTYvN1xuXHRcdFx0XHRlbHMgPSAkKCdib2R5JykuY2hpbGRyZW4oKS5maWx0ZXIoJy5ibG9ja1VJJykuYWRkKCdib2R5ID4gLmJsb2NrVUknKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0ZWxzID0gJGVsLmZpbmQoJz4uYmxvY2tVSScpO1xuXG5cdFx0XHQvLyBmaXggY3Vyc29yIGlzc3VlXG5cdFx0XHRpZiAoIG9wdHMuY3Vyc29yUmVzZXQgKSB7XG5cdFx0XHRcdGlmICggZWxzLmxlbmd0aCA+IDEgKVxuXHRcdFx0XHRcdGVsc1sxXS5zdHlsZS5jdXJzb3IgPSBvcHRzLmN1cnNvclJlc2V0O1xuXHRcdFx0XHRpZiAoIGVscy5sZW5ndGggPiAyIClcblx0XHRcdFx0XHRlbHNbMl0uc3R5bGUuY3Vyc29yID0gb3B0cy5jdXJzb3JSZXNldDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGZ1bGwpXG5cdFx0XHRcdHBhZ2VCbG9jayA9IHBhZ2VCbG9ja0VscyA9IG51bGw7XG5cblx0XHRcdGlmIChvcHRzLmZhZGVPdXQpIHtcblx0XHRcdFx0Y291bnQgPSBlbHMubGVuZ3RoO1xuXHRcdFx0XHRlbHMuc3RvcCgpLmZhZGVPdXQob3B0cy5mYWRlT3V0LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIC0tY291bnQgPT09IDApXG5cdFx0XHRcdFx0XHRyZXNldChlbHMsZGF0YSxvcHRzLGVsKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHJlc2V0KGVscywgZGF0YSwgb3B0cywgZWwpO1xuXHRcdH1cblxuXHRcdC8vIG1vdmUgYmxvY2tpbmcgZWxlbWVudCBiYWNrIGludG8gdGhlIERPTSB3aGVyZSBpdCBzdGFydGVkXG5cdFx0ZnVuY3Rpb24gcmVzZXQoZWxzLGRhdGEsb3B0cyxlbCkge1xuXHRcdFx0dmFyICRlbCA9ICQoZWwpO1xuXHRcdFx0aWYgKCAkZWwuZGF0YSgnYmxvY2tVSS5pc0Jsb2NrZWQnKSApXG5cdFx0XHRcdHJldHVybjtcblxuXHRcdFx0ZWxzLmVhY2goZnVuY3Rpb24oaSxvKSB7XG5cdFx0XHRcdC8vIHJlbW92ZSB2aWEgRE9NIGNhbGxzIHNvIHdlIGRvbid0IGxvc2UgZXZlbnQgaGFuZGxlcnNcblx0XHRcdFx0aWYgKHRoaXMucGFyZW50Tm9kZSlcblx0XHRcdFx0XHR0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyk7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5lbCkge1xuXHRcdFx0XHRkYXRhLmVsLnN0eWxlLmRpc3BsYXkgPSBkYXRhLmRpc3BsYXk7XG5cdFx0XHRcdGRhdGEuZWwuc3R5bGUucG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uO1xuXHRcdFx0XHRkYXRhLmVsLnN0eWxlLmN1cnNvciA9ICdkZWZhdWx0JzsgLy8gIzU5XG5cdFx0XHRcdGlmIChkYXRhLnBhcmVudClcblx0XHRcdFx0XHRkYXRhLnBhcmVudC5hcHBlbmRDaGlsZChkYXRhLmVsKTtcblx0XHRcdFx0JGVsLnJlbW92ZURhdGEoJ2Jsb2NrVUkuaGlzdG9yeScpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoJGVsLmRhdGEoJ2Jsb2NrVUkuc3RhdGljJykpIHtcblx0XHRcdFx0JGVsLmNzcygncG9zaXRpb24nLCAnc3RhdGljJyk7IC8vICMyMlxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHlwZW9mIG9wdHMub25VbmJsb2NrID09ICdmdW5jdGlvbicpXG5cdFx0XHRcdG9wdHMub25VbmJsb2NrKGVsLG9wdHMpO1xuXG5cdFx0XHQvLyBmaXggaXNzdWUgaW4gU2FmYXJpIDYgd2hlcmUgYmxvY2sgYXJ0aWZhY3RzIHJlbWFpbiB1bnRpbCByZWZsb3dcblx0XHRcdHZhciBib2R5ID0gJChkb2N1bWVudC5ib2R5KSwgdyA9IGJvZHkud2lkdGgoKSwgY3NzVyA9IGJvZHlbMF0uc3R5bGUud2lkdGg7XG5cdFx0XHRib2R5LndpZHRoKHctMSkud2lkdGgodyk7XG5cdFx0XHRib2R5WzBdLnN0eWxlLndpZHRoID0gY3NzVztcblx0XHR9XG5cblx0XHQvLyBiaW5kL3VuYmluZCB0aGUgaGFuZGxlclxuXHRcdGZ1bmN0aW9uIGJpbmQoYiwgZWwsIG9wdHMpIHtcblx0XHRcdHZhciBmdWxsID0gZWwgPT0gd2luZG93LCAkZWwgPSAkKGVsKTtcblxuXHRcdFx0Ly8gZG9uJ3QgYm90aGVyIHVuYmluZGluZyBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIHVuYmluZFxuXHRcdFx0aWYgKCFiICYmIChmdWxsICYmICFwYWdlQmxvY2sgfHwgIWZ1bGwgJiYgISRlbC5kYXRhKCdibG9ja1VJLmlzQmxvY2tlZCcpKSlcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHQkZWwuZGF0YSgnYmxvY2tVSS5pc0Jsb2NrZWQnLCBiKTtcblxuXHRcdFx0Ly8gZG9uJ3QgYmluZCBldmVudHMgd2hlbiBvdmVybGF5IGlzIG5vdCBpbiB1c2Ugb3IgaWYgYmluZEV2ZW50cyBpcyBmYWxzZVxuXHRcdFx0aWYgKCFmdWxsIHx8ICFvcHRzLmJpbmRFdmVudHMgfHwgKGIgJiYgIW9wdHMuc2hvd092ZXJsYXkpKVxuXHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdC8vIGJpbmQgYW5jaG9ycyBhbmQgaW5wdXRzIGZvciBtb3VzZSBhbmQga2V5IGV2ZW50c1xuXHRcdFx0dmFyIGV2ZW50cyA9ICdtb3VzZWRvd24gbW91c2V1cCBrZXlkb3duIGtleXByZXNzIGtleXVwIHRvdWNoc3RhcnQgdG91Y2hlbmQgdG91Y2htb3ZlJztcblx0XHRcdGlmIChiKVxuXHRcdFx0XHQkKGRvY3VtZW50KS5iaW5kKGV2ZW50cywgb3B0cywgaGFuZGxlcik7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdCQoZG9jdW1lbnQpLnVuYmluZChldmVudHMsIGhhbmRsZXIpO1xuXG5cdFx0Ly8gZm9ybWVyIGltcGwuLi5cblx0XHQvL1x0XHR2YXIgJGUgPSAkKCdhLDppbnB1dCcpO1xuXHRcdC8vXHRcdGIgPyAkZS5iaW5kKGV2ZW50cywgb3B0cywgaGFuZGxlcikgOiAkZS51bmJpbmQoZXZlbnRzLCBoYW5kbGVyKTtcblx0XHR9XG5cblx0XHQvLyBldmVudCBoYW5kbGVyIHRvIHN1cHByZXNzIGtleWJvYXJkL21vdXNlIGV2ZW50cyB3aGVuIGJsb2NraW5nXG5cdFx0ZnVuY3Rpb24gaGFuZGxlcihlKSB7XG5cdFx0XHQvLyBhbGxvdyB0YWIgbmF2aWdhdGlvbiAoY29uZGl0aW9uYWxseSlcblx0XHRcdGlmIChlLnR5cGUgPT09ICdrZXlkb3duJyAmJiBlLmtleUNvZGUgJiYgZS5rZXlDb2RlID09IDkpIHtcblx0XHRcdFx0aWYgKHBhZ2VCbG9jayAmJiBlLmRhdGEuY29uc3RyYWluVGFiS2V5KSB7XG5cdFx0XHRcdFx0dmFyIGVscyA9IHBhZ2VCbG9ja0Vscztcblx0XHRcdFx0XHR2YXIgZndkID0gIWUuc2hpZnRLZXkgJiYgZS50YXJnZXQgPT09IGVsc1tlbHMubGVuZ3RoLTFdO1xuXHRcdFx0XHRcdHZhciBiYWNrID0gZS5zaGlmdEtleSAmJiBlLnRhcmdldCA9PT0gZWxzWzBdO1xuXHRcdFx0XHRcdGlmIChmd2QgfHwgYmFjaykge1xuXHRcdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe2ZvY3VzKGJhY2spO30sMTApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dmFyIG9wdHMgPSBlLmRhdGE7XG5cdFx0XHR2YXIgdGFyZ2V0ID0gJChlLnRhcmdldCk7XG5cdFx0XHRpZiAodGFyZ2V0Lmhhc0NsYXNzKCdibG9ja092ZXJsYXknKSAmJiBvcHRzLm9uT3ZlcmxheUNsaWNrKVxuXHRcdFx0XHRvcHRzLm9uT3ZlcmxheUNsaWNrKGUpO1xuXG5cdFx0XHQvLyBhbGxvdyBldmVudHMgd2l0aGluIHRoZSBtZXNzYWdlIGNvbnRlbnRcblx0XHRcdGlmICh0YXJnZXQucGFyZW50cygnZGl2LicgKyBvcHRzLmJsb2NrTXNnQ2xhc3MpLmxlbmd0aCA+IDApXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0XHQvLyBhbGxvdyBldmVudHMgZm9yIGNvbnRlbnQgdGhhdCBpcyBub3QgYmVpbmcgYmxvY2tlZFxuXHRcdFx0cmV0dXJuIHRhcmdldC5wYXJlbnRzKCkuY2hpbGRyZW4oKS5maWx0ZXIoJ2Rpdi5ibG9ja1VJJykubGVuZ3RoID09PSAwO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGZvY3VzKGJhY2spIHtcblx0XHRcdGlmICghcGFnZUJsb2NrRWxzKVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR2YXIgZSA9IHBhZ2VCbG9ja0Vsc1tiYWNrPT09dHJ1ZSA/IHBhZ2VCbG9ja0Vscy5sZW5ndGgtMSA6IDBdO1xuXHRcdFx0aWYgKGUpXG5cdFx0XHRcdGUuZm9jdXMoKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjZW50ZXIoZWwsIHgsIHkpIHtcblx0XHRcdHZhciBwID0gZWwucGFyZW50Tm9kZSwgcyA9IGVsLnN0eWxlO1xuXHRcdFx0dmFyIGwgPSAoKHAub2Zmc2V0V2lkdGggLSBlbC5vZmZzZXRXaWR0aCkvMikgLSBzeihwLCdib3JkZXJMZWZ0V2lkdGgnKTtcblx0XHRcdHZhciB0ID0gKChwLm9mZnNldEhlaWdodCAtIGVsLm9mZnNldEhlaWdodCkvMikgLSBzeihwLCdib3JkZXJUb3BXaWR0aCcpO1xuXHRcdFx0aWYgKHgpIHMubGVmdCA9IGwgPiAwID8gKGwrJ3B4JykgOiAnMCc7XG5cdFx0XHRpZiAoeSkgcy50b3AgID0gdCA+IDAgPyAodCsncHgnKSA6ICcwJztcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzeihlbCwgcCkge1xuXHRcdFx0cmV0dXJuIHBhcnNlSW50KCQuY3NzKGVsLHApLDEwKXx8MDtcblx0XHR9XG5cblx0fVxuXG5cblx0LypnbG9iYWwgZGVmaW5lOnRydWUgKi9cblx0aWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCAmJiBkZWZpbmUuYW1kLmpRdWVyeSkge1xuXHRcdGRlZmluZShbJ2pxdWVyeSddLCBzZXR1cCk7XG5cdH0gZWxzZSB7XG5cdFx0c2V0dXAoalF1ZXJ5KTtcblx0fVxuXG59KSgpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5ibG9ja3VpLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuYmxvY2t1aS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxyXG4gKiBqUXVlcnkgYmxvY2tVSSBwbHVnaW5cclxuICogVmVyc2lvbiAyLjcwLjAtMjAxNC4xMS4yM1xyXG4gKiBSZXF1aXJlcyBqUXVlcnkgdjEuNyBvciBsYXRlclxyXG4gKlxyXG4gKiBFeGFtcGxlcyBhdDogaHR0cDovL21hbHN1cC5jb20vanF1ZXJ5L2Jsb2NrL1xyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMyBNLiBBbHN1cFxyXG4gKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlczpcclxuICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcclxuICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sXHJcbiAqXHJcbiAqIFRoYW5rcyB0byBBbWlyLUhvc3NlaW4gU29iaGkgZm9yIHNvbWUgZXhjZWxsZW50IGNvbnRyaWJ1dGlvbnMhXHJcbiAqL1xyXG5cclxuOyhmdW5jdGlvbigpIHtcclxuLypqc2hpbnQgZXFlcWVxOmZhbHNlIGN1cmx5OmZhbHNlIGxhdGVkZWY6ZmFsc2UgKi9cclxuXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5cdGZ1bmN0aW9uIHNldHVwKCQpIHtcclxuXHRcdCQuZm4uX2ZhZGVJbiA9ICQuZm4uZmFkZUluO1xyXG5cclxuXHRcdHZhciBub09wID0gJC5ub29wIHx8IGZ1bmN0aW9uKCkge307XHJcblxyXG5cdFx0Ly8gdGhpcyBiaXQgaXMgdG8gZW5zdXJlIHdlIGRvbid0IGNhbGwgc2V0RXhwcmVzc2lvbiB3aGVuIHdlIHNob3VsZG4ndCAod2l0aCBleHRyYSBtdXNjbGUgdG8gaGFuZGxlXHJcblx0XHQvLyBjb25mdXNpbmcgdXNlckFnZW50IHN0cmluZ3Mgb24gVmlzdGEpXHJcblx0XHR2YXIgbXNpZSA9IC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG5cdFx0dmFyIGllNiAgPSAvTVNJRSA2LjAvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgISAvTVNJRSA4LjAvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XHJcblx0XHR2YXIgbW9kZSA9IGRvY3VtZW50LmRvY3VtZW50TW9kZSB8fCAwO1xyXG5cdFx0dmFyIHNldEV4cHIgPSAkLmlzRnVuY3Rpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlLnNldEV4cHJlc3Npb24gKTtcclxuXHJcblx0XHQvLyBnbG9iYWwgJCBtZXRob2RzIGZvciBibG9ja2luZy91bmJsb2NraW5nIHRoZSBlbnRpcmUgcGFnZVxyXG5cdFx0JC5ibG9ja1VJICAgPSBmdW5jdGlvbihvcHRzKSB7IGluc3RhbGwod2luZG93LCBvcHRzKTsgfTtcclxuXHRcdCQudW5ibG9ja1VJID0gZnVuY3Rpb24ob3B0cykgeyByZW1vdmUod2luZG93LCBvcHRzKTsgfTtcclxuXHJcblx0XHQvLyBjb252ZW5pZW5jZSBtZXRob2QgZm9yIHF1aWNrIGdyb3dsLWxpa2Ugbm90aWZpY2F0aW9ucyAgKGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT1ncm93bClcclxuXHRcdCQuZ3Jvd2xVSSA9IGZ1bmN0aW9uKHRpdGxlLCBtZXNzYWdlLCB0aW1lb3V0LCBvbkNsb3NlKSB7XHJcblx0XHRcdHZhciAkbSA9ICQoJzxkaXYgY2xhc3M9XCJncm93bFVJXCI+PC9kaXY+Jyk7XHJcblx0XHRcdGlmICh0aXRsZSkgJG0uYXBwZW5kKCc8aDE+Jyt0aXRsZSsnPC9oMT4nKTtcclxuXHRcdFx0aWYgKG1lc3NhZ2UpICRtLmFwcGVuZCgnPGgyPicrbWVzc2FnZSsnPC9oMj4nKTtcclxuXHRcdFx0aWYgKHRpbWVvdXQgPT09IHVuZGVmaW5lZCkgdGltZW91dCA9IDMwMDA7XHJcblxyXG5cdFx0XHQvLyBBZGRlZCBieSBrb25hcHVuOiBTZXQgdGltZW91dCB0byAzMCBzZWNvbmRzIGlmIHRoaXMgZ3Jvd2wgaXMgbW91c2VkIG92ZXIsIGxpa2Ugbm9ybWFsIHRvYXN0IG5vdGlmaWNhdGlvbnNcclxuXHRcdFx0dmFyIGNhbGxCbG9jayA9IGZ1bmN0aW9uKG9wdHMpIHtcclxuXHRcdFx0XHRvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcblx0XHRcdFx0JC5ibG9ja1VJKHtcclxuXHRcdFx0XHRcdG1lc3NhZ2U6ICRtLFxyXG5cdFx0XHRcdFx0ZmFkZUluIDogdHlwZW9mIG9wdHMuZmFkZUluICAhPT0gJ3VuZGVmaW5lZCcgPyBvcHRzLmZhZGVJbiAgOiA3MDAsXHJcblx0XHRcdFx0XHRmYWRlT3V0OiB0eXBlb2Ygb3B0cy5mYWRlT3V0ICE9PSAndW5kZWZpbmVkJyA/IG9wdHMuZmFkZU91dCA6IDEwMDAsXHJcblx0XHRcdFx0XHR0aW1lb3V0OiB0eXBlb2Ygb3B0cy50aW1lb3V0ICE9PSAndW5kZWZpbmVkJyA/IG9wdHMudGltZW91dCA6IHRpbWVvdXQsXHJcblx0XHRcdFx0XHRjZW50ZXJZOiBmYWxzZSxcclxuXHRcdFx0XHRcdHNob3dPdmVybGF5OiBmYWxzZSxcclxuXHRcdFx0XHRcdG9uVW5ibG9jazogb25DbG9zZSxcclxuXHRcdFx0XHRcdGNzczogJC5ibG9ja1VJLmRlZmF1bHRzLmdyb3dsQ1NTXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRjYWxsQmxvY2soKTtcclxuXHRcdFx0dmFyIG5vbm1vdXNlZE9wYWNpdHkgPSAkbS5jc3MoJ29wYWNpdHknKTtcclxuXHRcdFx0JG0ubW91c2VvdmVyKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGNhbGxCbG9jayh7XHJcblx0XHRcdFx0XHRmYWRlSW46IDAsXHJcblx0XHRcdFx0XHR0aW1lb3V0OiAzMDAwMFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHR2YXIgZGlzcGxheUJsb2NrID0gJCgnLmJsb2NrTXNnJyk7XHJcblx0XHRcdFx0ZGlzcGxheUJsb2NrLnN0b3AoKTsgLy8gY2FuY2VsIGZhZGVvdXQgaWYgaXQgaGFzIHN0YXJ0ZWRcclxuXHRcdFx0XHRkaXNwbGF5QmxvY2suZmFkZVRvKDMwMCwgMSk7IC8vIG1ha2UgaXQgZWFzaWVyIHRvIHJlYWQgdGhlIG1lc3NhZ2UgYnkgcmVtb3ZpbmcgdHJhbnNwYXJlbmN5XHJcblx0XHRcdH0pLm1vdXNlb3V0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdCQoJy5ibG9ja01zZycpLmZhZGVPdXQoMTAwMCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHQvLyBFbmQga29uYXB1biBhZGRpdGlvbnNcclxuXHRcdH07XHJcblxyXG5cdFx0Ly8gcGx1Z2luIG1ldGhvZCBmb3IgYmxvY2tpbmcgZWxlbWVudCBjb250ZW50XHJcblx0XHQkLmZuLmJsb2NrID0gZnVuY3Rpb24ob3B0cykge1xyXG5cdFx0XHRpZiAoIHRoaXNbMF0gPT09IHdpbmRvdyApIHtcclxuXHRcdFx0XHQkLmJsb2NrVUkoIG9wdHMgKTtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgZnVsbE9wdHMgPSAkLmV4dGVuZCh7fSwgJC5ibG9ja1VJLmRlZmF1bHRzLCBvcHRzIHx8IHt9KTtcclxuXHRcdFx0dGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHZhciAkZWwgPSAkKHRoaXMpO1xyXG5cdFx0XHRcdGlmIChmdWxsT3B0cy5pZ25vcmVJZkJsb2NrZWQgJiYgJGVsLmRhdGEoJ2Jsb2NrVUkuaXNCbG9ja2VkJykpXHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0JGVsLnVuYmxvY2soeyBmYWRlT3V0OiAwIH0pO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0aWYgKCQuY3NzKHRoaXMsJ3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpIHtcclxuXHRcdFx0XHRcdHRoaXMuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG5cdFx0XHRcdFx0JCh0aGlzKS5kYXRhKCdibG9ja1VJLnN0YXRpYycsIHRydWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLnN0eWxlLnpvb20gPSAxOyAvLyBmb3JjZSAnaGFzTGF5b3V0JyBpbiBpZVxyXG5cdFx0XHRcdGluc3RhbGwodGhpcywgb3B0cyk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBwbHVnaW4gbWV0aG9kIGZvciB1bmJsb2NraW5nIGVsZW1lbnQgY29udGVudFxyXG5cdFx0JC5mbi51bmJsb2NrID0gZnVuY3Rpb24ob3B0cykge1xyXG5cdFx0XHRpZiAoIHRoaXNbMF0gPT09IHdpbmRvdyApIHtcclxuXHRcdFx0XHQkLnVuYmxvY2tVSSggb3B0cyApO1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmVtb3ZlKHRoaXMsIG9wdHMpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH07XHJcblxyXG5cdFx0JC5ibG9ja1VJLnZlcnNpb24gPSAyLjcwOyAvLyAybmQgZ2VuZXJhdGlvbiBibG9ja2luZyBhdCBubyBleHRyYSBjb3N0IVxyXG5cclxuXHRcdC8vIG92ZXJyaWRlIHRoZXNlIGluIHlvdXIgY29kZSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kIHN0eWxlXHJcblx0XHQkLmJsb2NrVUkuZGVmYXVsdHMgPSB7XHJcblx0XHRcdC8vIG1lc3NhZ2UgZGlzcGxheWVkIHdoZW4gYmxvY2tpbmcgKHVzZSBudWxsIGZvciBubyBtZXNzYWdlKVxyXG5cdFx0XHRtZXNzYWdlOiAgJzxoMT5QbGVhc2Ugd2FpdC4uLjwvaDE+JyxcclxuXHJcblx0XHRcdHRpdGxlOiBudWxsLFx0XHQvLyB0aXRsZSBzdHJpbmc7IG9ubHkgdXNlZCB3aGVuIHRoZW1lID09IHRydWVcclxuXHRcdFx0ZHJhZ2dhYmxlOiB0cnVlLFx0Ly8gb25seSB1c2VkIHdoZW4gdGhlbWUgPT0gdHJ1ZSAocmVxdWlyZXMganF1ZXJ5LXVpLmpzIHRvIGJlIGxvYWRlZClcclxuXHJcblx0XHRcdHRoZW1lOiBmYWxzZSwgLy8gc2V0IHRvIHRydWUgdG8gdXNlIHdpdGggalF1ZXJ5IFVJIHRoZW1lc1xyXG5cclxuXHRcdFx0Ly8gc3R5bGVzIGZvciB0aGUgbWVzc2FnZSB3aGVuIGJsb2NraW5nOyBpZiB5b3Ugd2lzaCB0byBkaXNhYmxlXHJcblx0XHRcdC8vIHRoZXNlIGFuZCB1c2UgYW4gZXh0ZXJuYWwgc3R5bGVzaGVldCB0aGVuIGRvIHRoaXMgaW4geW91ciBjb2RlOlxyXG5cdFx0XHQvLyAkLmJsb2NrVUkuZGVmYXVsdHMuY3NzID0ge307XHJcblx0XHRcdGNzczoge1xyXG5cdFx0XHRcdHBhZGRpbmc6XHQwLFxyXG5cdFx0XHRcdG1hcmdpbjpcdFx0MCxcclxuXHRcdFx0XHR3aWR0aDpcdFx0JzMwJScsXHJcblx0XHRcdFx0dG9wOlx0XHQnNDAlJyxcclxuXHRcdFx0XHRsZWZ0Olx0XHQnMzUlJyxcclxuXHRcdFx0XHR0ZXh0QWxpZ246XHQnY2VudGVyJyxcclxuXHRcdFx0XHRjb2xvcjpcdFx0JyMwMDAnLFxyXG5cdFx0XHRcdGJvcmRlcjpcdFx0JzNweCBzb2xpZCAjYWFhJyxcclxuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6JyNmZmYnLFxyXG5cdFx0XHRcdGN1cnNvcjpcdFx0J3dhaXQnXHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvLyBtaW5pbWFsIHN0eWxlIHNldCB1c2VkIHdoZW4gdGhlbWVzIGFyZSB1c2VkXHJcblx0XHRcdHRoZW1lZENTUzoge1xyXG5cdFx0XHRcdHdpZHRoOlx0JzMwJScsXHJcblx0XHRcdFx0dG9wOlx0JzQwJScsXHJcblx0XHRcdFx0bGVmdDpcdCczNSUnXHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvLyBzdHlsZXMgZm9yIHRoZSBvdmVybGF5XHJcblx0XHRcdG92ZXJsYXlDU1M6ICB7XHJcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yOlx0JyMwMDAnLFxyXG5cdFx0XHRcdG9wYWNpdHk6XHRcdFx0MC42LFxyXG5cdFx0XHRcdGN1cnNvcjpcdFx0XHRcdCd3YWl0J1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0Ly8gc3R5bGUgdG8gcmVwbGFjZSB3YWl0IGN1cnNvciBiZWZvcmUgdW5ibG9ja2luZyB0byBjb3JyZWN0IGlzc3VlXHJcblx0XHRcdC8vIG9mIGxpbmdlcmluZyB3YWl0IGN1cnNvclxyXG5cdFx0XHRjdXJzb3JSZXNldDogJ2RlZmF1bHQnLFxyXG5cclxuXHRcdFx0Ly8gc3R5bGVzIGFwcGxpZWQgd2hlbiB1c2luZyAkLmdyb3dsVUlcclxuXHRcdFx0Z3Jvd2xDU1M6IHtcclxuXHRcdFx0XHR3aWR0aDpcdFx0JzM1MHB4JyxcclxuXHRcdFx0XHR0b3A6XHRcdCcxMHB4JyxcclxuXHRcdFx0XHRsZWZ0Olx0XHQnJyxcclxuXHRcdFx0XHRyaWdodDpcdFx0JzEwcHgnLFxyXG5cdFx0XHRcdGJvcmRlcjpcdFx0J25vbmUnLFxyXG5cdFx0XHRcdHBhZGRpbmc6XHQnNXB4JyxcclxuXHRcdFx0XHRvcGFjaXR5Olx0MC42LFxyXG5cdFx0XHRcdGN1cnNvcjpcdFx0J2RlZmF1bHQnLFxyXG5cdFx0XHRcdGNvbG9yOlx0XHQnI2ZmZicsXHJcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiAnIzAwMCcsXHJcblx0XHRcdFx0Jy13ZWJraXQtYm9yZGVyLXJhZGl1cyc6JzEwcHgnLFxyXG5cdFx0XHRcdCctbW96LWJvcmRlci1yYWRpdXMnOlx0JzEwcHgnLFxyXG5cdFx0XHRcdCdib3JkZXItcmFkaXVzJzpcdFx0JzEwcHgnXHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvLyBJRSBpc3N1ZXM6ICdhYm91dDpibGFuaycgZmFpbHMgb24gSFRUUFMgYW5kIGphdmFzY3JpcHQ6ZmFsc2UgaXMgcy1sLW8td1xyXG5cdFx0XHQvLyAoaGF0IHRpcCB0byBKb3JnZSBILiBOLiBkZSBWYXNjb25jZWxvcylcclxuXHRcdFx0Lypqc2hpbnQgc2NyaXB0dXJsOnRydWUgKi9cclxuXHRcdFx0aWZyYW1lU3JjOiAvXmh0dHBzL2kudGVzdCh3aW5kb3cubG9jYXRpb24uaHJlZiB8fCAnJykgPyAnamF2YXNjcmlwdDpmYWxzZScgOiAnYWJvdXQ6YmxhbmsnLFxyXG5cclxuXHRcdFx0Ly8gZm9yY2UgdXNhZ2Ugb2YgaWZyYW1lIGluIG5vbi1JRSBicm93c2VycyAoaGFuZHkgZm9yIGJsb2NraW5nIGFwcGxldHMpXHJcblx0XHRcdGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuXHJcblx0XHRcdC8vIHotaW5kZXggZm9yIHRoZSBibG9ja2luZyBvdmVybGF5XHJcblx0XHRcdGJhc2VaOiAxMDAwLFxyXG5cclxuXHRcdFx0Ly8gc2V0IHRoZXNlIHRvIHRydWUgdG8gaGF2ZSB0aGUgbWVzc2FnZSBhdXRvbWF0aWNhbGx5IGNlbnRlcmVkXHJcblx0XHRcdGNlbnRlclg6IHRydWUsIC8vIDwtLSBvbmx5IGVmZmVjdHMgZWxlbWVudCBibG9ja2luZyAocGFnZSBibG9jayBjb250cm9sbGVkIHZpYSBjc3MgYWJvdmUpXHJcblx0XHRcdGNlbnRlclk6IHRydWUsXHJcblxyXG5cdFx0XHQvLyBhbGxvdyBib2R5IGVsZW1lbnQgdG8gYmUgc3RldGNoZWQgaW4gaWU2OyB0aGlzIG1ha2VzIGJsb2NraW5nIGxvb2sgYmV0dGVyXHJcblx0XHRcdC8vIG9uIFwic2hvcnRcIiBwYWdlcy4gIGRpc2FibGUgaWYgeW91IHdpc2ggdG8gcHJldmVudCBjaGFuZ2VzIHRvIHRoZSBib2R5IGhlaWdodFxyXG5cdFx0XHRhbGxvd0JvZHlTdHJldGNoOiB0cnVlLFxyXG5cclxuXHRcdFx0Ly8gZW5hYmxlIGlmIHlvdSB3YW50IGtleSBhbmQgbW91c2UgZXZlbnRzIHRvIGJlIGRpc2FibGVkIGZvciBjb250ZW50IHRoYXQgaXMgYmxvY2tlZFxyXG5cdFx0XHRiaW5kRXZlbnRzOiB0cnVlLFxyXG5cclxuXHRcdFx0Ly8gYmUgZGVmYXVsdCBibG9ja1VJIHdpbGwgc3VwcmVzcyB0YWIgbmF2aWdhdGlvbiBmcm9tIGxlYXZpbmcgYmxvY2tpbmcgY29udGVudFxyXG5cdFx0XHQvLyAoaWYgYmluZEV2ZW50cyBpcyB0cnVlKVxyXG5cdFx0XHRjb25zdHJhaW5UYWJLZXk6IHRydWUsXHJcblxyXG5cdFx0XHQvLyBmYWRlSW4gdGltZSBpbiBtaWxsaXM7IHNldCB0byAwIHRvIGRpc2FibGUgZmFkZUluIG9uIGJsb2NrXHJcblx0XHRcdGZhZGVJbjogIDIwMCxcclxuXHJcblx0XHRcdC8vIGZhZGVPdXQgdGltZSBpbiBtaWxsaXM7IHNldCB0byAwIHRvIGRpc2FibGUgZmFkZU91dCBvbiB1bmJsb2NrXHJcblx0XHRcdGZhZGVPdXQ6ICA0MDAsXHJcblxyXG5cdFx0XHQvLyB0aW1lIGluIG1pbGxpcyB0byB3YWl0IGJlZm9yZSBhdXRvLXVuYmxvY2tpbmc7IHNldCB0byAwIHRvIGRpc2FibGUgYXV0by11bmJsb2NrXHJcblx0XHRcdHRpbWVvdXQ6IDAsXHJcblxyXG5cdFx0XHQvLyBkaXNhYmxlIGlmIHlvdSBkb24ndCB3YW50IHRvIHNob3cgdGhlIG92ZXJsYXlcclxuXHRcdFx0c2hvd092ZXJsYXk6IHRydWUsXHJcblxyXG5cdFx0XHQvLyBpZiB0cnVlLCBmb2N1cyB3aWxsIGJlIHBsYWNlZCBpbiB0aGUgZmlyc3QgYXZhaWxhYmxlIGlucHV0IGZpZWxkIHdoZW5cclxuXHRcdFx0Ly8gcGFnZSBibG9ja2luZ1xyXG5cdFx0XHRmb2N1c0lucHV0OiB0cnVlLFxyXG5cclxuICAgICAgICAgICAgLy8gZWxlbWVudHMgdGhhdCBjYW4gcmVjZWl2ZSBmb2N1c1xyXG4gICAgICAgICAgICBmb2N1c2FibGVFbGVtZW50czogJzppbnB1dDplbmFibGVkOnZpc2libGUnLFxyXG5cclxuXHRcdFx0Ly8gc3VwcHJlc3NlcyB0aGUgdXNlIG9mIG92ZXJsYXkgc3R5bGVzIG9uIEZGL0xpbnV4IChkdWUgdG8gcGVyZm9ybWFuY2UgaXNzdWVzIHdpdGggb3BhY2l0eSlcclxuXHRcdFx0Ly8gbm8gbG9uZ2VyIG5lZWRlZCBpbiAyMDEyXHJcblx0XHRcdC8vIGFwcGx5UGxhdGZvcm1PcGFjaXR5UnVsZXM6IHRydWUsXHJcblxyXG5cdFx0XHQvLyBjYWxsYmFjayBtZXRob2QgaW52b2tlZCB3aGVuIGZhZGVJbiBoYXMgY29tcGxldGVkIGFuZCBibG9ja2luZyBtZXNzYWdlIGlzIHZpc2libGVcclxuXHRcdFx0b25CbG9jazogbnVsbCxcclxuXHJcblx0XHRcdC8vIGNhbGxiYWNrIG1ldGhvZCBpbnZva2VkIHdoZW4gdW5ibG9ja2luZyBoYXMgY29tcGxldGVkOyB0aGUgY2FsbGJhY2sgaXNcclxuXHRcdFx0Ly8gcGFzc2VkIHRoZSBlbGVtZW50IHRoYXQgaGFzIGJlZW4gdW5ibG9ja2VkICh3aGljaCBpcyB0aGUgd2luZG93IG9iamVjdCBmb3IgcGFnZVxyXG5cdFx0XHQvLyBibG9ja3MpIGFuZCB0aGUgb3B0aW9ucyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoZSB1bmJsb2NrIGNhbGw6XHJcblx0XHRcdC8vXHRvblVuYmxvY2soZWxlbWVudCwgb3B0aW9ucylcclxuXHRcdFx0b25VbmJsb2NrOiBudWxsLFxyXG5cclxuXHRcdFx0Ly8gY2FsbGJhY2sgbWV0aG9kIGludm9rZWQgd2hlbiB0aGUgb3ZlcmxheSBhcmVhIGlzIGNsaWNrZWQuXHJcblx0XHRcdC8vIHNldHRpbmcgdGhpcyB3aWxsIHR1cm4gdGhlIGN1cnNvciB0byBhIHBvaW50ZXIsIG90aGVyd2lzZSBjdXJzb3IgZGVmaW5lZCBpbiBvdmVybGF5Q3NzIHdpbGwgYmUgdXNlZC5cclxuXHRcdFx0b25PdmVybGF5Q2xpY2s6IG51bGwsXHJcblxyXG5cdFx0XHQvLyBkb24ndCBhc2s7IGlmIHlvdSByZWFsbHkgbXVzdCBrbm93OiBodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvanF1ZXJ5LWVuL2Jyb3dzZV90aHJlYWQvdGhyZWFkLzM2NjQwYTg3MzA1MDM1OTUvMmY2YTc5YTc3YTc4ZTQ5MyMyZjZhNzlhNzdhNzhlNDkzXHJcblx0XHRcdHF1aXJrc21vZGVPZmZzZXRIYWNrOiA0LFxyXG5cclxuXHRcdFx0Ly8gY2xhc3MgbmFtZSBvZiB0aGUgbWVzc2FnZSBibG9ja1xyXG5cdFx0XHRibG9ja01zZ0NsYXNzOiAnYmxvY2tNc2cnLFxyXG5cclxuXHRcdFx0Ly8gaWYgaXQgaXMgYWxyZWFkeSBibG9ja2VkLCB0aGVuIGlnbm9yZSBpdCAoZG9uJ3QgdW5ibG9jayBhbmQgcmVibG9jaylcclxuXHRcdFx0aWdub3JlSWZCbG9ja2VkOiBmYWxzZVxyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBwcml2YXRlIGRhdGEgYW5kIGZ1bmN0aW9ucyBmb2xsb3cuLi5cclxuXHJcblx0XHR2YXIgcGFnZUJsb2NrID0gbnVsbDtcclxuXHRcdHZhciBwYWdlQmxvY2tFbHMgPSBbXTtcclxuXHJcblx0XHRmdW5jdGlvbiBpbnN0YWxsKGVsLCBvcHRzKSB7XHJcblx0XHRcdHZhciBjc3MsIHRoZW1lZENTUztcclxuXHRcdFx0dmFyIGZ1bGwgPSAoZWwgPT0gd2luZG93KTtcclxuXHRcdFx0dmFyIG1zZyA9IChvcHRzICYmIG9wdHMubWVzc2FnZSAhPT0gdW5kZWZpbmVkID8gb3B0cy5tZXNzYWdlIDogdW5kZWZpbmVkKTtcclxuXHRcdFx0b3B0cyA9ICQuZXh0ZW5kKHt9LCAkLmJsb2NrVUkuZGVmYXVsdHMsIG9wdHMgfHwge30pO1xyXG5cclxuXHRcdFx0aWYgKG9wdHMuaWdub3JlSWZCbG9ja2VkICYmICQoZWwpLmRhdGEoJ2Jsb2NrVUkuaXNCbG9ja2VkJykpXHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdFx0b3B0cy5vdmVybGF5Q1NTID0gJC5leHRlbmQoe30sICQuYmxvY2tVSS5kZWZhdWx0cy5vdmVybGF5Q1NTLCBvcHRzLm92ZXJsYXlDU1MgfHwge30pO1xyXG5cdFx0XHRjc3MgPSAkLmV4dGVuZCh7fSwgJC5ibG9ja1VJLmRlZmF1bHRzLmNzcywgb3B0cy5jc3MgfHwge30pO1xyXG5cdFx0XHRpZiAob3B0cy5vbk92ZXJsYXlDbGljaylcclxuXHRcdFx0XHRvcHRzLm92ZXJsYXlDU1MuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG5cclxuXHRcdFx0dGhlbWVkQ1NTID0gJC5leHRlbmQoe30sICQuYmxvY2tVSS5kZWZhdWx0cy50aGVtZWRDU1MsIG9wdHMudGhlbWVkQ1NTIHx8IHt9KTtcclxuXHRcdFx0bXNnID0gbXNnID09PSB1bmRlZmluZWQgPyBvcHRzLm1lc3NhZ2UgOiBtc2c7XHJcblxyXG5cdFx0XHQvLyByZW1vdmUgdGhlIGN1cnJlbnQgYmxvY2sgKGlmIHRoZXJlIGlzIG9uZSlcclxuXHRcdFx0aWYgKGZ1bGwgJiYgcGFnZUJsb2NrKVxyXG5cdFx0XHRcdHJlbW92ZSh3aW5kb3csIHtmYWRlT3V0OjB9KTtcclxuXHJcblx0XHRcdC8vIGlmIGFuIGV4aXN0aW5nIGVsZW1lbnQgaXMgYmVpbmcgdXNlZCBhcyB0aGUgYmxvY2tpbmcgY29udGVudCB0aGVuIHdlIGNhcHR1cmVcclxuXHRcdFx0Ly8gaXRzIGN1cnJlbnQgcGxhY2UgaW4gdGhlIERPTSAoYW5kIGN1cnJlbnQgZGlzcGxheSBzdHlsZSkgc28gd2UgY2FuIHJlc3RvcmVcclxuXHRcdFx0Ly8gaXQgd2hlbiB3ZSB1bmJsb2NrXHJcblx0XHRcdGlmIChtc2cgJiYgdHlwZW9mIG1zZyAhPSAnc3RyaW5nJyAmJiAobXNnLnBhcmVudE5vZGUgfHwgbXNnLmpxdWVyeSkpIHtcclxuXHRcdFx0XHR2YXIgbm9kZSA9IG1zZy5qcXVlcnkgPyBtc2dbMF0gOiBtc2c7XHJcblx0XHRcdFx0dmFyIGRhdGEgPSB7fTtcclxuXHRcdFx0XHQkKGVsKS5kYXRhKCdibG9ja1VJLmhpc3RvcnknLCBkYXRhKTtcclxuXHRcdFx0XHRkYXRhLmVsID0gbm9kZTtcclxuXHRcdFx0XHRkYXRhLnBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcclxuXHRcdFx0XHRkYXRhLmRpc3BsYXkgPSBub2RlLnN0eWxlLmRpc3BsYXk7XHJcblx0XHRcdFx0ZGF0YS5wb3NpdGlvbiA9IG5vZGUuc3R5bGUucG9zaXRpb247XHJcblx0XHRcdFx0aWYgKGRhdGEucGFyZW50KVxyXG5cdFx0XHRcdFx0ZGF0YS5wYXJlbnQucmVtb3ZlQ2hpbGQobm9kZSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdCQoZWwpLmRhdGEoJ2Jsb2NrVUkub25VbmJsb2NrJywgb3B0cy5vblVuYmxvY2spO1xyXG5cdFx0XHR2YXIgeiA9IG9wdHMuYmFzZVo7XHJcblxyXG5cdFx0XHQvLyBibG9ja1VJIHVzZXMgMyBsYXllcnMgZm9yIGJsb2NraW5nLCBmb3Igc2ltcGxpY2l0eSB0aGV5IGFyZSBhbGwgdXNlZCBvbiBldmVyeSBwbGF0Zm9ybTtcclxuXHRcdFx0Ly8gbGF5ZXIxIGlzIHRoZSBpZnJhbWUgbGF5ZXIgd2hpY2ggaXMgdXNlZCB0byBzdXByZXNzIGJsZWVkIHRocm91Z2ggb2YgdW5kZXJseWluZyBjb250ZW50XHJcblx0XHRcdC8vIGxheWVyMiBpcyB0aGUgb3ZlcmxheSBsYXllciB3aGljaCBoYXMgb3BhY2l0eSBhbmQgYSB3YWl0IGN1cnNvciAoYnkgZGVmYXVsdClcclxuXHRcdFx0Ly8gbGF5ZXIzIGlzIHRoZSBtZXNzYWdlIGNvbnRlbnQgdGhhdCBpcyBkaXNwbGF5ZWQgd2hpbGUgYmxvY2tpbmdcclxuXHRcdFx0dmFyIGx5cjEsIGx5cjIsIGx5cjMsIHM7XHJcblx0XHRcdGlmIChtc2llIHx8IG9wdHMuZm9yY2VJZnJhbWUpXHJcblx0XHRcdFx0bHlyMSA9ICQoJzxpZnJhbWUgY2xhc3M9XCJibG9ja1VJXCIgc3R5bGU9XCJ6LWluZGV4OicrICh6KyspICsnO2Rpc3BsYXk6bm9uZTtib3JkZXI6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MDtsZWZ0OjBcIiBzcmM9XCInK29wdHMuaWZyYW1lU3JjKydcIj48L2lmcmFtZT4nKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdGx5cjEgPSAkKCc8ZGl2IGNsYXNzPVwiYmxvY2tVSVwiIHN0eWxlPVwiZGlzcGxheTpub25lXCI+PC9kaXY+Jyk7XHJcblxyXG5cdFx0XHRpZiAob3B0cy50aGVtZSlcclxuXHRcdFx0XHRseXIyID0gJCgnPGRpdiBjbGFzcz1cImJsb2NrVUkgYmxvY2tPdmVybGF5IHVpLXdpZGdldC1vdmVybGF5XCIgc3R5bGU9XCJ6LWluZGV4OicrICh6KyspICsnO2Rpc3BsYXk6bm9uZVwiPjwvZGl2PicpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0bHlyMiA9ICQoJzxkaXYgY2xhc3M9XCJibG9ja1VJIGJsb2NrT3ZlcmxheVwiIHN0eWxlPVwiei1pbmRleDonKyAoeisrKSArJztkaXNwbGF5Om5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowXCI+PC9kaXY+Jyk7XHJcblxyXG5cdFx0XHRpZiAob3B0cy50aGVtZSAmJiBmdWxsKSB7XHJcblx0XHRcdFx0cyA9ICc8ZGl2IGNsYXNzPVwiYmxvY2tVSSAnICsgb3B0cy5ibG9ja01zZ0NsYXNzICsgJyBibG9ja1BhZ2UgdWktZGlhbG9nIHVpLXdpZGdldCB1aS1jb3JuZXItYWxsXCIgc3R5bGU9XCJ6LWluZGV4OicrKHorMTApKyc7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkXCI+JztcclxuXHRcdFx0XHRpZiAoIG9wdHMudGl0bGUgKSB7XHJcblx0XHRcdFx0XHRzICs9ICc8ZGl2IGNsYXNzPVwidWktd2lkZ2V0LWhlYWRlciB1aS1kaWFsb2ctdGl0bGViYXIgdWktY29ybmVyLWFsbCBibG9ja1RpdGxlXCI+Jysob3B0cy50aXRsZSB8fCAnJm5ic3A7JykrJzwvZGl2Pic7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHMgKz0gJzxkaXYgY2xhc3M9XCJ1aS13aWRnZXQtY29udGVudCB1aS1kaWFsb2ctY29udGVudFwiPjwvZGl2Pic7XHJcblx0XHRcdFx0cyArPSAnPC9kaXY+JztcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmIChvcHRzLnRoZW1lKSB7XHJcblx0XHRcdFx0cyA9ICc8ZGl2IGNsYXNzPVwiYmxvY2tVSSAnICsgb3B0cy5ibG9ja01zZ0NsYXNzICsgJyBibG9ja0VsZW1lbnQgdWktZGlhbG9nIHVpLXdpZGdldCB1aS1jb3JuZXItYWxsXCIgc3R5bGU9XCJ6LWluZGV4OicrKHorMTApKyc7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlXCI+JztcclxuXHRcdFx0XHRpZiAoIG9wdHMudGl0bGUgKSB7XHJcblx0XHRcdFx0XHRzICs9ICc8ZGl2IGNsYXNzPVwidWktd2lkZ2V0LWhlYWRlciB1aS1kaWFsb2ctdGl0bGViYXIgdWktY29ybmVyLWFsbCBibG9ja1RpdGxlXCI+Jysob3B0cy50aXRsZSB8fCAnJm5ic3A7JykrJzwvZGl2Pic7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHMgKz0gJzxkaXYgY2xhc3M9XCJ1aS13aWRnZXQtY29udGVudCB1aS1kaWFsb2ctY29udGVudFwiPjwvZGl2Pic7XHJcblx0XHRcdFx0cyArPSAnPC9kaXY+JztcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmIChmdWxsKSB7XHJcblx0XHRcdFx0cyA9ICc8ZGl2IGNsYXNzPVwiYmxvY2tVSSAnICsgb3B0cy5ibG9ja01zZ0NsYXNzICsgJyBibG9ja1BhZ2VcIiBzdHlsZT1cInotaW5kZXg6JysoeisxMCkrJztkaXNwbGF5Om5vbmU7cG9zaXRpb246Zml4ZWRcIj48L2Rpdj4nO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdHMgPSAnPGRpdiBjbGFzcz1cImJsb2NrVUkgJyArIG9wdHMuYmxvY2tNc2dDbGFzcyArICcgYmxvY2tFbGVtZW50XCIgc3R5bGU9XCJ6LWluZGV4OicrKHorMTApKyc7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlXCI+PC9kaXY+JztcclxuXHRcdFx0fVxyXG5cdFx0XHRseXIzID0gJChzKTtcclxuXHJcblx0XHRcdC8vIGlmIHdlIGhhdmUgYSBtZXNzYWdlLCBzdHlsZSBpdFxyXG5cdFx0XHRpZiAobXNnKSB7XHJcblx0XHRcdFx0aWYgKG9wdHMudGhlbWUpIHtcclxuXHRcdFx0XHRcdGx5cjMuY3NzKHRoZW1lZENTUyk7XHJcblx0XHRcdFx0XHRseXIzLmFkZENsYXNzKCd1aS13aWRnZXQtY29udGVudCcpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlXHJcblx0XHRcdFx0XHRseXIzLmNzcyhjc3MpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBzdHlsZSB0aGUgb3ZlcmxheVxyXG5cdFx0XHRpZiAoIW9wdHMudGhlbWUgLyomJiAoIW9wdHMuYXBwbHlQbGF0Zm9ybU9wYWNpdHlSdWxlcykqLylcclxuXHRcdFx0XHRseXIyLmNzcyhvcHRzLm92ZXJsYXlDU1MpO1xyXG5cdFx0XHRseXIyLmNzcygncG9zaXRpb24nLCBmdWxsID8gJ2ZpeGVkJyA6ICdhYnNvbHV0ZScpO1xyXG5cclxuXHRcdFx0Ly8gbWFrZSBpZnJhbWUgbGF5ZXIgdHJhbnNwYXJlbnQgaW4gSUVcclxuXHRcdFx0aWYgKG1zaWUgfHwgb3B0cy5mb3JjZUlmcmFtZSlcclxuXHRcdFx0XHRseXIxLmNzcygnb3BhY2l0eScsMC4wKTtcclxuXHJcblx0XHRcdC8vJChbbHlyMVswXSxseXIyWzBdLGx5cjNbMF1dKS5hcHBlbmRUbyhmdWxsID8gJ2JvZHknIDogZWwpO1xyXG5cdFx0XHR2YXIgbGF5ZXJzID0gW2x5cjEsbHlyMixseXIzXSwgJHBhciA9IGZ1bGwgPyAkKCdib2R5JykgOiAkKGVsKTtcclxuXHRcdFx0JC5lYWNoKGxheWVycywgZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0dGhpcy5hcHBlbmRUbygkcGFyKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRpZiAob3B0cy50aGVtZSAmJiBvcHRzLmRyYWdnYWJsZSAmJiAkLmZuLmRyYWdnYWJsZSkge1xyXG5cdFx0XHRcdGx5cjMuZHJhZ2dhYmxlKHtcclxuXHRcdFx0XHRcdGhhbmRsZTogJy51aS1kaWFsb2ctdGl0bGViYXInLFxyXG5cdFx0XHRcdFx0Y2FuY2VsOiAnbGknXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIGllNyBtdXN0IHVzZSBhYnNvbHV0ZSBwb3NpdGlvbmluZyBpbiBxdWlya3MgbW9kZSBhbmQgdG8gYWNjb3VudCBmb3IgYWN0aXZleCBpc3N1ZXMgKHdoZW4gc2Nyb2xsaW5nKVxyXG5cdFx0XHR2YXIgZXhwciA9IHNldEV4cHIgJiYgKCEkLnN1cHBvcnQuYm94TW9kZWwgfHwgJCgnb2JqZWN0LGVtYmVkJywgZnVsbCA/IG51bGwgOiBlbCkubGVuZ3RoID4gMCk7XHJcblx0XHRcdGlmIChpZTYgfHwgZXhwcikge1xyXG5cdFx0XHRcdC8vIGdpdmUgYm9keSAxMDAlIGhlaWdodFxyXG5cdFx0XHRcdGlmIChmdWxsICYmIG9wdHMuYWxsb3dCb2R5U3RyZXRjaCAmJiAkLnN1cHBvcnQuYm94TW9kZWwpXHJcblx0XHRcdFx0XHQkKCdodG1sLGJvZHknKS5jc3MoJ2hlaWdodCcsJzEwMCUnKTtcclxuXHJcblx0XHRcdFx0Ly8gZml4IGllNiBpc3N1ZSB3aGVuIGJsb2NrZWQgZWxlbWVudCBoYXMgYSBib3JkZXIgd2lkdGhcclxuXHRcdFx0XHRpZiAoKGllNiB8fCAhJC5zdXBwb3J0LmJveE1vZGVsKSAmJiAhZnVsbCkge1xyXG5cdFx0XHRcdFx0dmFyIHQgPSBzeihlbCwnYm9yZGVyVG9wV2lkdGgnKSwgbCA9IHN6KGVsLCdib3JkZXJMZWZ0V2lkdGgnKTtcclxuXHRcdFx0XHRcdHZhciBmaXhUID0gdCA/ICcoMCAtICcrdCsnKScgOiAwO1xyXG5cdFx0XHRcdFx0dmFyIGZpeEwgPSBsID8gJygwIC0gJytsKycpJyA6IDA7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBzaW11bGF0ZSBmaXhlZCBwb3NpdGlvblxyXG5cdFx0XHRcdCQuZWFjaChsYXllcnMsIGZ1bmN0aW9uKGksbykge1xyXG5cdFx0XHRcdFx0dmFyIHMgPSBvWzBdLnN0eWxlO1xyXG5cdFx0XHRcdFx0cy5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcblx0XHRcdFx0XHRpZiAoaSA8IDIpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGZ1bGwpXHJcblx0XHRcdFx0XHRcdFx0cy5zZXRFeHByZXNzaW9uKCdoZWlnaHQnLCdNYXRoLm1heChkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCwgZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQpIC0gKGpRdWVyeS5zdXBwb3J0LmJveE1vZGVsPzA6JytvcHRzLnF1aXJrc21vZGVPZmZzZXRIYWNrKycpICsgXCJweFwiJyk7XHJcblx0XHRcdFx0XHRcdGVsc2VcclxuXHRcdFx0XHRcdFx0XHRzLnNldEV4cHJlc3Npb24oJ2hlaWdodCcsJ3RoaXMucGFyZW50Tm9kZS5vZmZzZXRIZWlnaHQgKyBcInB4XCInKTtcclxuXHRcdFx0XHRcdFx0aWYgKGZ1bGwpXHJcblx0XHRcdFx0XHRcdFx0cy5zZXRFeHByZXNzaW9uKCd3aWR0aCcsJ2pRdWVyeS5zdXBwb3J0LmJveE1vZGVsICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgXCJweFwiJyk7XHJcblx0XHRcdFx0XHRcdGVsc2VcclxuXHRcdFx0XHRcdFx0XHRzLnNldEV4cHJlc3Npb24oJ3dpZHRoJywndGhpcy5wYXJlbnROb2RlLm9mZnNldFdpZHRoICsgXCJweFwiJyk7XHJcblx0XHRcdFx0XHRcdGlmIChmaXhMKSBzLnNldEV4cHJlc3Npb24oJ2xlZnQnLCBmaXhMKTtcclxuXHRcdFx0XHRcdFx0aWYgKGZpeFQpIHMuc2V0RXhwcmVzc2lvbigndG9wJywgZml4VCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIGlmIChvcHRzLmNlbnRlclkpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGZ1bGwpIHMuc2V0RXhwcmVzc2lvbigndG9wJywnKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQpIC8gMiAtICh0aGlzLm9mZnNldEhlaWdodCAvIDIpICsgKGJsYWggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA6IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSArIFwicHhcIicpO1xyXG5cdFx0XHRcdFx0XHRzLm1hcmdpblRvcCA9IDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIGlmICghb3B0cy5jZW50ZXJZICYmIGZ1bGwpIHtcclxuXHRcdFx0XHRcdFx0dmFyIHRvcCA9IChvcHRzLmNzcyAmJiBvcHRzLmNzcy50b3ApID8gcGFyc2VJbnQob3B0cy5jc3MudG9wLCAxMCkgOiAwO1xyXG5cdFx0XHRcdFx0XHR2YXIgZXhwcmVzc2lvbiA9ICcoKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIDogZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApICsgJyt0b3ArJykgKyBcInB4XCInO1xyXG5cdFx0XHRcdFx0XHRzLnNldEV4cHJlc3Npb24oJ3RvcCcsZXhwcmVzc2lvbik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIHNob3cgdGhlIG1lc3NhZ2VcclxuXHRcdFx0aWYgKG1zZykge1xyXG5cdFx0XHRcdGlmIChvcHRzLnRoZW1lKVxyXG5cdFx0XHRcdFx0bHlyMy5maW5kKCcudWktd2lkZ2V0LWNvbnRlbnQnKS5hcHBlbmQobXNnKTtcclxuXHRcdFx0XHRlbHNlXHJcblx0XHRcdFx0XHRseXIzLmFwcGVuZChtc2cpO1xyXG5cdFx0XHRcdGlmIChtc2cuanF1ZXJ5IHx8IG1zZy5ub2RlVHlwZSlcclxuXHRcdFx0XHRcdCQobXNnKS5zaG93KCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICgobXNpZSB8fCBvcHRzLmZvcmNlSWZyYW1lKSAmJiBvcHRzLnNob3dPdmVybGF5KVxyXG5cdFx0XHRcdGx5cjEuc2hvdygpOyAvLyBvcGFjaXR5IGlzIHplcm9cclxuXHRcdFx0aWYgKG9wdHMuZmFkZUluKSB7XHJcblx0XHRcdFx0dmFyIGNiID0gb3B0cy5vbkJsb2NrID8gb3B0cy5vbkJsb2NrIDogbm9PcDtcclxuXHRcdFx0XHR2YXIgY2IxID0gKG9wdHMuc2hvd092ZXJsYXkgJiYgIW1zZykgPyBjYiA6IG5vT3A7XHJcblx0XHRcdFx0dmFyIGNiMiA9IG1zZyA/IGNiIDogbm9PcDtcclxuXHRcdFx0XHRpZiAob3B0cy5zaG93T3ZlcmxheSlcclxuXHRcdFx0XHRcdGx5cjIuX2ZhZGVJbihvcHRzLmZhZGVJbiwgY2IxKTtcclxuXHRcdFx0XHRpZiAobXNnKVxyXG5cdFx0XHRcdFx0bHlyMy5fZmFkZUluKG9wdHMuZmFkZUluLCBjYjIpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGlmIChvcHRzLnNob3dPdmVybGF5KVxyXG5cdFx0XHRcdFx0bHlyMi5zaG93KCk7XHJcblx0XHRcdFx0aWYgKG1zZylcclxuXHRcdFx0XHRcdGx5cjMuc2hvdygpO1xyXG5cdFx0XHRcdGlmIChvcHRzLm9uQmxvY2spXHJcblx0XHRcdFx0XHRvcHRzLm9uQmxvY2suYmluZChseXIzKSgpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBiaW5kIGtleSBhbmQgbW91c2UgZXZlbnRzXHJcblx0XHRcdGJpbmQoMSwgZWwsIG9wdHMpO1xyXG5cclxuXHRcdFx0aWYgKGZ1bGwpIHtcclxuXHRcdFx0XHRwYWdlQmxvY2sgPSBseXIzWzBdO1xyXG5cdFx0XHRcdHBhZ2VCbG9ja0VscyA9ICQob3B0cy5mb2N1c2FibGVFbGVtZW50cyxwYWdlQmxvY2spO1xyXG5cdFx0XHRcdGlmIChvcHRzLmZvY3VzSW5wdXQpXHJcblx0XHRcdFx0XHRzZXRUaW1lb3V0KGZvY3VzLCAyMCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdGNlbnRlcihseXIzWzBdLCBvcHRzLmNlbnRlclgsIG9wdHMuY2VudGVyWSk7XHJcblxyXG5cdFx0XHRpZiAob3B0cy50aW1lb3V0KSB7XHJcblx0XHRcdFx0Ly8gYXV0by11bmJsb2NrXHJcblx0XHRcdFx0dmFyIHRvID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdGlmIChmdWxsKVxyXG5cdFx0XHRcdFx0XHQkLnVuYmxvY2tVSShvcHRzKTtcclxuXHRcdFx0XHRcdGVsc2VcclxuXHRcdFx0XHRcdFx0JChlbCkudW5ibG9jayhvcHRzKTtcclxuXHRcdFx0XHR9LCBvcHRzLnRpbWVvdXQpO1xyXG5cdFx0XHRcdCQoZWwpLmRhdGEoJ2Jsb2NrVUkudGltZW91dCcsIHRvKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIHJlbW92ZSB0aGUgYmxvY2tcclxuXHRcdGZ1bmN0aW9uIHJlbW92ZShlbCwgb3B0cykge1xyXG5cdFx0XHR2YXIgY291bnQ7XHJcblx0XHRcdHZhciBmdWxsID0gKGVsID09IHdpbmRvdyk7XHJcblx0XHRcdHZhciAkZWwgPSAkKGVsKTtcclxuXHRcdFx0dmFyIGRhdGEgPSAkZWwuZGF0YSgnYmxvY2tVSS5oaXN0b3J5Jyk7XHJcblx0XHRcdHZhciB0byA9ICRlbC5kYXRhKCdibG9ja1VJLnRpbWVvdXQnKTtcclxuXHRcdFx0aWYgKHRvKSB7XHJcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRvKTtcclxuXHRcdFx0XHQkZWwucmVtb3ZlRGF0YSgnYmxvY2tVSS50aW1lb3V0Jyk7XHJcblx0XHRcdH1cclxuXHRcdFx0b3B0cyA9ICQuZXh0ZW5kKHt9LCAkLmJsb2NrVUkuZGVmYXVsdHMsIG9wdHMgfHwge30pO1xyXG5cdFx0XHRiaW5kKDAsIGVsLCBvcHRzKTsgLy8gdW5iaW5kIGV2ZW50c1xyXG5cclxuXHRcdFx0aWYgKG9wdHMub25VbmJsb2NrID09PSBudWxsKSB7XHJcblx0XHRcdFx0b3B0cy5vblVuYmxvY2sgPSAkZWwuZGF0YSgnYmxvY2tVSS5vblVuYmxvY2snKTtcclxuXHRcdFx0XHQkZWwucmVtb3ZlRGF0YSgnYmxvY2tVSS5vblVuYmxvY2snKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIGVscztcclxuXHRcdFx0aWYgKGZ1bGwpIC8vIGNyYXp5IHNlbGVjdG9yIHRvIGhhbmRsZSBvZGQgZmllbGQgZXJyb3JzIGluIGllNi83XHJcblx0XHRcdFx0ZWxzID0gJCgnYm9keScpLmNoaWxkcmVuKCkuZmlsdGVyKCcuYmxvY2tVSScpLmFkZCgnYm9keSA+IC5ibG9ja1VJJyk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRlbHMgPSAkZWwuZmluZCgnPi5ibG9ja1VJJyk7XHJcblxyXG5cdFx0XHQvLyBmaXggY3Vyc29yIGlzc3VlXHJcblx0XHRcdGlmICggb3B0cy5jdXJzb3JSZXNldCApIHtcclxuXHRcdFx0XHRpZiAoIGVscy5sZW5ndGggPiAxIClcclxuXHRcdFx0XHRcdGVsc1sxXS5zdHlsZS5jdXJzb3IgPSBvcHRzLmN1cnNvclJlc2V0O1xyXG5cdFx0XHRcdGlmICggZWxzLmxlbmd0aCA+IDIgKVxyXG5cdFx0XHRcdFx0ZWxzWzJdLnN0eWxlLmN1cnNvciA9IG9wdHMuY3Vyc29yUmVzZXQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChmdWxsKVxyXG5cdFx0XHRcdHBhZ2VCbG9jayA9IHBhZ2VCbG9ja0VscyA9IG51bGw7XHJcblxyXG5cdFx0XHRpZiAob3B0cy5mYWRlT3V0KSB7XHJcblx0XHRcdFx0Y291bnQgPSBlbHMubGVuZ3RoO1xyXG5cdFx0XHRcdGVscy5zdG9wKCkuZmFkZU91dChvcHRzLmZhZGVPdXQsIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0aWYgKCAtLWNvdW50ID09PSAwKVxyXG5cdFx0XHRcdFx0XHRyZXNldChlbHMsZGF0YSxvcHRzLGVsKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0cmVzZXQoZWxzLCBkYXRhLCBvcHRzLCBlbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gbW92ZSBibG9ja2luZyBlbGVtZW50IGJhY2sgaW50byB0aGUgRE9NIHdoZXJlIGl0IHN0YXJ0ZWRcclxuXHRcdGZ1bmN0aW9uIHJlc2V0KGVscyxkYXRhLG9wdHMsZWwpIHtcclxuXHRcdFx0dmFyICRlbCA9ICQoZWwpO1xyXG5cdFx0XHRpZiAoICRlbC5kYXRhKCdibG9ja1VJLmlzQmxvY2tlZCcpIClcclxuXHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRlbHMuZWFjaChmdW5jdGlvbihpLG8pIHtcclxuXHRcdFx0XHQvLyByZW1vdmUgdmlhIERPTSBjYWxscyBzbyB3ZSBkb24ndCBsb3NlIGV2ZW50IGhhbmRsZXJzXHJcblx0XHRcdFx0aWYgKHRoaXMucGFyZW50Tm9kZSlcclxuXHRcdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRpZiAoZGF0YSAmJiBkYXRhLmVsKSB7XHJcblx0XHRcdFx0ZGF0YS5lbC5zdHlsZS5kaXNwbGF5ID0gZGF0YS5kaXNwbGF5O1xyXG5cdFx0XHRcdGRhdGEuZWwuc3R5bGUucG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uO1xyXG5cdFx0XHRcdGRhdGEuZWwuc3R5bGUuY3Vyc29yID0gJ2RlZmF1bHQnOyAvLyAjNTlcclxuXHRcdFx0XHRpZiAoZGF0YS5wYXJlbnQpXHJcblx0XHRcdFx0XHRkYXRhLnBhcmVudC5hcHBlbmRDaGlsZChkYXRhLmVsKTtcclxuXHRcdFx0XHQkZWwucmVtb3ZlRGF0YSgnYmxvY2tVSS5oaXN0b3J5Jyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICgkZWwuZGF0YSgnYmxvY2tVSS5zdGF0aWMnKSkge1xyXG5cdFx0XHRcdCRlbC5jc3MoJ3Bvc2l0aW9uJywgJ3N0YXRpYycpOyAvLyAjMjJcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHR5cGVvZiBvcHRzLm9uVW5ibG9jayA9PSAnZnVuY3Rpb24nKVxyXG5cdFx0XHRcdG9wdHMub25VbmJsb2NrKGVsLG9wdHMpO1xyXG5cclxuXHRcdFx0Ly8gZml4IGlzc3VlIGluIFNhZmFyaSA2IHdoZXJlIGJsb2NrIGFydGlmYWN0cyByZW1haW4gdW50aWwgcmVmbG93XHJcblx0XHRcdHZhciBib2R5ID0gJChkb2N1bWVudC5ib2R5KSwgdyA9IGJvZHkud2lkdGgoKSwgY3NzVyA9IGJvZHlbMF0uc3R5bGUud2lkdGg7XHJcblx0XHRcdGJvZHkud2lkdGgody0xKS53aWR0aCh3KTtcclxuXHRcdFx0Ym9keVswXS5zdHlsZS53aWR0aCA9IGNzc1c7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gYmluZC91bmJpbmQgdGhlIGhhbmRsZXJcclxuXHRcdGZ1bmN0aW9uIGJpbmQoYiwgZWwsIG9wdHMpIHtcclxuXHRcdFx0dmFyIGZ1bGwgPSBlbCA9PSB3aW5kb3csICRlbCA9ICQoZWwpO1xyXG5cclxuXHRcdFx0Ly8gZG9uJ3QgYm90aGVyIHVuYmluZGluZyBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIHVuYmluZFxyXG5cdFx0XHRpZiAoIWIgJiYgKGZ1bGwgJiYgIXBhZ2VCbG9jayB8fCAhZnVsbCAmJiAhJGVsLmRhdGEoJ2Jsb2NrVUkuaXNCbG9ja2VkJykpKVxyXG5cdFx0XHRcdHJldHVybjtcclxuXHJcblx0XHRcdCRlbC5kYXRhKCdibG9ja1VJLmlzQmxvY2tlZCcsIGIpO1xyXG5cclxuXHRcdFx0Ly8gZG9uJ3QgYmluZCBldmVudHMgd2hlbiBvdmVybGF5IGlzIG5vdCBpbiB1c2Ugb3IgaWYgYmluZEV2ZW50cyBpcyBmYWxzZVxyXG5cdFx0XHRpZiAoIWZ1bGwgfHwgIW9wdHMuYmluZEV2ZW50cyB8fCAoYiAmJiAhb3B0cy5zaG93T3ZlcmxheSkpXHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdFx0Ly8gYmluZCBhbmNob3JzIGFuZCBpbnB1dHMgZm9yIG1vdXNlIGFuZCBrZXkgZXZlbnRzXHJcblx0XHRcdHZhciBldmVudHMgPSAnbW91c2Vkb3duIG1vdXNldXAga2V5ZG93biBrZXlwcmVzcyBrZXl1cCB0b3VjaHN0YXJ0IHRvdWNoZW5kIHRvdWNobW92ZSc7XHJcblx0XHRcdGlmIChiKVxyXG5cdFx0XHRcdCQoZG9jdW1lbnQpLmJpbmQoZXZlbnRzLCBvcHRzLCBoYW5kbGVyKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdCQoZG9jdW1lbnQpLnVuYmluZChldmVudHMsIGhhbmRsZXIpO1xyXG5cclxuXHRcdC8vIGZvcm1lciBpbXBsLi4uXHJcblx0XHQvL1x0XHR2YXIgJGUgPSAkKCdhLDppbnB1dCcpO1xyXG5cdFx0Ly9cdFx0YiA/ICRlLmJpbmQoZXZlbnRzLCBvcHRzLCBoYW5kbGVyKSA6ICRlLnVuYmluZChldmVudHMsIGhhbmRsZXIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGV2ZW50IGhhbmRsZXIgdG8gc3VwcHJlc3Mga2V5Ym9hcmQvbW91c2UgZXZlbnRzIHdoZW4gYmxvY2tpbmdcclxuXHRcdGZ1bmN0aW9uIGhhbmRsZXIoZSkge1xyXG5cdFx0XHQvLyBhbGxvdyB0YWIgbmF2aWdhdGlvbiAoY29uZGl0aW9uYWxseSlcclxuXHRcdFx0aWYgKGUudHlwZSA9PT0gJ2tleWRvd24nICYmIGUua2V5Q29kZSAmJiBlLmtleUNvZGUgPT0gOSkge1xyXG5cdFx0XHRcdGlmIChwYWdlQmxvY2sgJiYgZS5kYXRhLmNvbnN0cmFpblRhYktleSkge1xyXG5cdFx0XHRcdFx0dmFyIGVscyA9IHBhZ2VCbG9ja0VscztcclxuXHRcdFx0XHRcdHZhciBmd2QgPSAhZS5zaGlmdEtleSAmJiBlLnRhcmdldCA9PT0gZWxzW2Vscy5sZW5ndGgtMV07XHJcblx0XHRcdFx0XHR2YXIgYmFjayA9IGUuc2hpZnRLZXkgJiYgZS50YXJnZXQgPT09IGVsc1swXTtcclxuXHRcdFx0XHRcdGlmIChmd2QgfHwgYmFjaykge1xyXG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Zm9jdXMoYmFjayk7fSwxMCk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIG9wdHMgPSBlLmRhdGE7XHJcblx0XHRcdHZhciB0YXJnZXQgPSAkKGUudGFyZ2V0KTtcclxuXHRcdFx0aWYgKHRhcmdldC5oYXNDbGFzcygnYmxvY2tPdmVybGF5JykgJiYgb3B0cy5vbk92ZXJsYXlDbGljaylcclxuXHRcdFx0XHRvcHRzLm9uT3ZlcmxheUNsaWNrKGUpO1xyXG5cclxuXHRcdFx0Ly8gYWxsb3cgZXZlbnRzIHdpdGhpbiB0aGUgbWVzc2FnZSBjb250ZW50XHJcblx0XHRcdGlmICh0YXJnZXQucGFyZW50cygnZGl2LicgKyBvcHRzLmJsb2NrTXNnQ2xhc3MpLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0XHQvLyBhbGxvdyBldmVudHMgZm9yIGNvbnRlbnQgdGhhdCBpcyBub3QgYmVpbmcgYmxvY2tlZFxyXG5cdFx0XHRyZXR1cm4gdGFyZ2V0LnBhcmVudHMoKS5jaGlsZHJlbigpLmZpbHRlcignZGl2LmJsb2NrVUknKS5sZW5ndGggPT09IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0ZnVuY3Rpb24gZm9jdXMoYmFjaykge1xyXG5cdFx0XHRpZiAoIXBhZ2VCbG9ja0VscylcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdHZhciBlID0gcGFnZUJsb2NrRWxzW2JhY2s9PT10cnVlID8gcGFnZUJsb2NrRWxzLmxlbmd0aC0xIDogMF07XHJcblx0XHRcdGlmIChlKVxyXG5cdFx0XHRcdGUuZm9jdXMoKTtcclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiBjZW50ZXIoZWwsIHgsIHkpIHtcclxuXHRcdFx0dmFyIHAgPSBlbC5wYXJlbnROb2RlLCBzID0gZWwuc3R5bGU7XHJcblx0XHRcdHZhciBsID0gKChwLm9mZnNldFdpZHRoIC0gZWwub2Zmc2V0V2lkdGgpLzIpIC0gc3oocCwnYm9yZGVyTGVmdFdpZHRoJyk7XHJcblx0XHRcdHZhciB0ID0gKChwLm9mZnNldEhlaWdodCAtIGVsLm9mZnNldEhlaWdodCkvMikgLSBzeihwLCdib3JkZXJUb3BXaWR0aCcpO1xyXG5cdFx0XHRpZiAoeCkgcy5sZWZ0ID0gbCA+IDAgPyAobCsncHgnKSA6ICcwJztcclxuXHRcdFx0aWYgKHkpIHMudG9wICA9IHQgPiAwID8gKHQrJ3B4JykgOiAnMCc7XHJcblx0XHR9XHJcblxyXG5cdFx0ZnVuY3Rpb24gc3ooZWwsIHApIHtcclxuXHRcdFx0cmV0dXJuIHBhcnNlSW50KCQuY3NzKGVsLHApLDEwKXx8MDtcclxuXHRcdH1cclxuXHJcblx0fVxyXG5cclxuXHJcblx0LypnbG9iYWwgZGVmaW5lOnRydWUgKi9cclxuXHRpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICYmIGRlZmluZS5hbWQualF1ZXJ5KSB7XHJcblx0XHRkZWZpbmUoWydqcXVlcnknXSwgc2V0dXApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRzZXR1cChqUXVlcnkpO1xyXG5cdH1cclxuXHJcbn0pKCk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.colorbox.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.colorbox.js index aa9d6e0c40b..1211a59673e 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.colorbox.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.colorbox.js @@ -1109,4 +1109,4 @@ }(jQuery, document, window)); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jb2xvcmJveC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jb2xvcmJveC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuXHRDb2xvcmJveCAxLjYuM1xuXHRsaWNlbnNlOiBNSVRcblx0aHR0cDovL3d3dy5qYWNrbG1vb3JlLmNvbS9jb2xvcmJveFxuKi9cbihmdW5jdGlvbiAoJCwgZG9jdW1lbnQsIHdpbmRvdykge1xuXHR2YXJcblx0Ly8gRGVmYXVsdCBzZXR0aW5ncyBvYmplY3QuXG5cdC8vIFNlZSBodHRwOi8vamFja2xtb29yZS5jb20vY29sb3Jib3ggZm9yIGRldGFpbHMuXG5cdGRlZmF1bHRzID0ge1xuXHRcdC8vIGRhdGEgc291cmNlc1xuXHRcdGh0bWw6IGZhbHNlLFxuXHRcdHBob3RvOiBmYWxzZSxcblx0XHRpZnJhbWU6IGZhbHNlLFxuXHRcdGlubGluZTogZmFsc2UsXG5cblx0XHQvLyBiZWhhdmlvciBhbmQgYXBwZWFyYW5jZVxuXHRcdHRyYW5zaXRpb246IFwiZWxhc3RpY1wiLFxuXHRcdHNwZWVkOiAzMDAsXG5cdFx0ZmFkZU91dDogMzAwLFxuXHRcdHdpZHRoOiBmYWxzZSxcblx0XHRpbml0aWFsV2lkdGg6IFwiNjAwXCIsXG5cdFx0aW5uZXJXaWR0aDogZmFsc2UsXG5cdFx0bWF4V2lkdGg6IGZhbHNlLFxuXHRcdGhlaWdodDogZmFsc2UsXG5cdFx0aW5pdGlhbEhlaWdodDogXCI0NTBcIixcblx0XHRpbm5lckhlaWdodDogZmFsc2UsXG5cdFx0bWF4SGVpZ2h0OiBmYWxzZSxcblx0XHRzY2FsZVBob3RvczogdHJ1ZSxcblx0XHRzY3JvbGxpbmc6IHRydWUsXG5cdFx0b3BhY2l0eTogMC45LFxuXHRcdHByZWxvYWRpbmc6IHRydWUsXG5cdFx0Y2xhc3NOYW1lOiBmYWxzZSxcblx0XHRvdmVybGF5Q2xvc2U6IHRydWUsXG5cdFx0ZXNjS2V5OiB0cnVlLFxuXHRcdGFycm93S2V5OiB0cnVlLFxuXHRcdHRvcDogZmFsc2UsXG5cdFx0Ym90dG9tOiBmYWxzZSxcblx0XHRsZWZ0OiBmYWxzZSxcblx0XHRyaWdodDogZmFsc2UsXG5cdFx0Zml4ZWQ6IGZhbHNlLFxuXHRcdGRhdGE6IHVuZGVmaW5lZCxcblx0XHRjbG9zZUJ1dHRvbjogdHJ1ZSxcblx0XHRmYXN0SWZyYW1lOiB0cnVlLFxuXHRcdG9wZW46IGZhbHNlLFxuXHRcdHJlcG9zaXRpb246IHRydWUsXG5cdFx0bG9vcDogdHJ1ZSxcblx0XHRzbGlkZXNob3c6IGZhbHNlLFxuXHRcdHNsaWRlc2hvd0F1dG86IHRydWUsXG5cdFx0c2xpZGVzaG93U3BlZWQ6IDI1MDAsXG5cdFx0c2xpZGVzaG93U3RhcnQ6IFwic3RhcnQgc2xpZGVzaG93XCIsXG5cdFx0c2xpZGVzaG93U3RvcDogXCJzdG9wIHNsaWRlc2hvd1wiLFxuXHRcdHBob3RvUmVnZXg6IC9cXC4oZ2lmfHBuZ3xqcChlfGd8ZWcpfGJtcHxpY298d2VicHxqeHJ8c3ZnKSgoI3xcXD8pLiopPyQvaSxcblxuXHRcdC8vIGFsdGVybmF0ZSBpbWFnZSBwYXRocyBmb3IgaGlnaC1yZXMgZGlzcGxheXNcblx0XHRyZXRpbmFJbWFnZTogZmFsc2UsXG5cdFx0cmV0aW5hVXJsOiBmYWxzZSxcblx0XHRyZXRpbmFTdWZmaXg6ICdAMnguJDEnLFxuXG5cdFx0Ly8gaW50ZXJuYXRpb25hbGl6YXRpb25cblx0XHRjdXJyZW50OiBcImltYWdlIHtjdXJyZW50fSBvZiB7dG90YWx9XCIsXG5cdFx0cHJldmlvdXM6IFwicHJldmlvdXNcIixcblx0XHRuZXh0OiBcIm5leHRcIixcblx0XHRjbG9zZTogXCJjbG9zZVwiLFxuXHRcdHhockVycm9yOiBcIlRoaXMgY29udGVudCBmYWlsZWQgdG8gbG9hZC5cIixcblx0XHRpbWdFcnJvcjogXCJUaGlzIGltYWdlIGZhaWxlZCB0byBsb2FkLlwiLFxuXG5cdFx0Ly8gYWNjZXNzYmlsaXR5XG5cdFx0cmV0dXJuRm9jdXM6IHRydWUsXG5cdFx0dHJhcEZvY3VzOiB0cnVlLFxuXG5cdFx0Ly8gY2FsbGJhY2tzXG5cdFx0b25PcGVuOiBmYWxzZSxcblx0XHRvbkxvYWQ6IGZhbHNlLFxuXHRcdG9uQ29tcGxldGU6IGZhbHNlLFxuXHRcdG9uQ2xlYW51cDogZmFsc2UsXG5cdFx0b25DbG9zZWQ6IGZhbHNlLFxuXG5cdFx0cmVsOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLnJlbDtcblx0XHR9LFxuXHRcdGhyZWY6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gdXNpbmcgdGhpcy5ocmVmIHdvdWxkIGdpdmUgdGhlIGFic29sdXRlIHVybCwgd2hlbiB0aGUgaHJlZiBtYXkgaGF2ZSBiZWVuIGludGVkZWQgYXMgYSBzZWxlY3RvciAoZS5nLiAnI2NvbnRhaW5lcicpXG5cdFx0XHRyZXR1cm4gJCh0aGlzKS5hdHRyKCdocmVmJyk7XG5cdFx0fSxcblx0XHR0aXRsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy50aXRsZTtcblx0XHR9LFxuXHRcdGNyZWF0ZUltZzogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW1nID0gbmV3IEltYWdlKCk7XG5cdFx0XHR2YXIgYXR0cnMgPSAkKHRoaXMpLmRhdGEoJ2Nib3gtaW1nLWF0dHJzJyk7XG5cblx0XHRcdGlmICh0eXBlb2YgYXR0cnMgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdCQuZWFjaChhdHRycywgZnVuY3Rpb24oa2V5LCB2YWwpe1xuXHRcdFx0XHRcdGltZ1trZXldID0gdmFsO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGltZztcblx0XHR9LFxuXHRcdGNyZWF0ZUlmcmFtZTogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG5cdFx0XHR2YXIgYXR0cnMgPSAkKHRoaXMpLmRhdGEoJ2Nib3gtaWZyYW1lLWF0dHJzJyk7XG5cblx0XHRcdGlmICh0eXBlb2YgYXR0cnMgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdCQuZWFjaChhdHRycywgZnVuY3Rpb24oa2V5LCB2YWwpe1xuXHRcdFx0XHRcdGlmcmFtZVtrZXldID0gdmFsO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCdmcmFtZUJvcmRlcicgaW4gaWZyYW1lKSB7XG5cdFx0XHRcdGlmcmFtZS5mcmFtZUJvcmRlciA9IDA7XG5cdFx0XHR9XG5cdFx0XHRpZiAoJ2FsbG93VHJhbnNwYXJlbmN5JyBpbiBpZnJhbWUpIHtcblx0XHRcdFx0aWZyYW1lLmFsbG93VHJhbnNwYXJlbmN5ID0gXCJ0cnVlXCI7XG5cdFx0XHR9XG5cdFx0XHRpZnJhbWUubmFtZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7IC8vIGdpdmUgdGhlIGlmcmFtZSBhIHVuaXF1ZSBuYW1lIHRvIHByZXZlbnQgY2FjaGluZ1xuXHRcdFx0aWZyYW1lLmFsbG93RnVsbHNjcmVlbiA9IHRydWU7XG5cblx0XHRcdHJldHVybiBpZnJhbWU7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIEFic3RyYWN0aW5nIHRoZSBIVE1MIGFuZCBldmVudCBpZGVudGlmaWVycyBmb3IgZWFzeSByZWJyYW5kaW5nXG5cdGNvbG9yYm94ID0gJ2NvbG9yYm94Jyxcblx0cHJlZml4ID0gJ2Nib3gnLFxuXHRib3hFbGVtZW50ID0gcHJlZml4ICsgJ0VsZW1lbnQnLFxuXG5cdC8vIEV2ZW50c1xuXHRldmVudF9vcGVuID0gcHJlZml4ICsgJ19vcGVuJyxcblx0ZXZlbnRfbG9hZCA9IHByZWZpeCArICdfbG9hZCcsXG5cdGV2ZW50X2NvbXBsZXRlID0gcHJlZml4ICsgJ19jb21wbGV0ZScsXG5cdGV2ZW50X2NsZWFudXAgPSBwcmVmaXggKyAnX2NsZWFudXAnLFxuXHRldmVudF9jbG9zZWQgPSBwcmVmaXggKyAnX2Nsb3NlZCcsXG5cdGV2ZW50X3B1cmdlID0gcHJlZml4ICsgJ19wdXJnZScsXG5cblx0Ly8gQ2FjaGVkIGpRdWVyeSBPYmplY3QgVmFyaWFibGVzXG5cdCRvdmVybGF5LFxuXHQkYm94LFxuXHQkd3JhcCxcblx0JGNvbnRlbnQsXG5cdCR0b3BCb3JkZXIsXG5cdCRsZWZ0Qm9yZGVyLFxuXHQkcmlnaHRCb3JkZXIsXG5cdCRib3R0b21Cb3JkZXIsXG5cdCRyZWxhdGVkLFxuXHQkd2luZG93LFxuXHQkbG9hZGVkLFxuXHQkbG9hZGluZ0JheSxcblx0JGxvYWRpbmdPdmVybGF5LFxuXHQkdGl0bGUsXG5cdCRjdXJyZW50LFxuXHQkc2xpZGVzaG93LFxuXHQkbmV4dCxcblx0JHByZXYsXG5cdCRjbG9zZSxcblx0JGdyb3VwQ29udHJvbHMsXG5cdCRldmVudHMgPSAkKCc8YS8+JyksIC8vICQoe30pIHdvdWxkIGJlIHByZWZlcmVkLCBidXQgdGhlcmUgaXMgYW4gaXNzdWUgd2l0aCBqUXVlcnkgMS40LjJcblxuXHQvLyBWYXJpYWJsZXMgZm9yIGNhY2hlZCB2YWx1ZXMgb3IgdXNlIGFjcm9zcyBtdWx0aXBsZSBmdW5jdGlvbnNcblx0c2V0dGluZ3MsXG5cdGludGVyZmFjZUhlaWdodCxcblx0aW50ZXJmYWNlV2lkdGgsXG5cdGxvYWRlZEhlaWdodCxcblx0bG9hZGVkV2lkdGgsXG5cdGluZGV4LFxuXHRwaG90byxcblx0b3Blbixcblx0YWN0aXZlLFxuXHRjbG9zaW5nLFxuXHRsb2FkaW5nVGltZXIsXG5cdHB1YmxpY01ldGhvZCxcblx0ZGl2ID0gXCJkaXZcIixcblx0cmVxdWVzdHMgPSAwLFxuXHRwcmV2aW91c0NTUyA9IHt9LFxuXHRpbml0O1xuXG5cdC8vICoqKioqKioqKioqKioqKipcblx0Ly8gSEVMUEVSIEZVTkNUSU9OU1xuXHQvLyAqKioqKioqKioqKioqKioqXG5cblx0Ly8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIG5ldyBqUXVlcnkgb2JqZWN0c1xuXHRmdW5jdGlvbiAkdGFnKHRhZywgaWQsIGNzcykge1xuXHRcdHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuXG5cdFx0aWYgKGlkKSB7XG5cdFx0XHRlbGVtZW50LmlkID0gcHJlZml4ICsgaWQ7XG5cdFx0fVxuXG5cdFx0aWYgKGNzcykge1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gY3NzO1xuXHRcdH1cblxuXHRcdHJldHVybiAkKGVsZW1lbnQpO1xuXHR9XG5cblx0Ly8gR2V0IHRoZSB3aW5kb3cgaGVpZ2h0IHVzaW5nIGlubmVySGVpZ2h0IHdoZW4gYXZhaWxhYmxlIHRvIGF2b2lkIGFuIGlzc3VlIHdpdGggaU9TXG5cdC8vIGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzY3MjRcblx0ZnVuY3Rpb24gd2luaGVpZ2h0KCkge1xuXHRcdHJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQgPyB3aW5kb3cuaW5uZXJIZWlnaHQgOiAkKHdpbmRvdykuaGVpZ2h0KCk7XG5cdH1cblxuXHRmdW5jdGlvbiBTZXR0aW5ncyhlbGVtZW50LCBvcHRpb25zKSB7XG5cdFx0aWYgKG9wdGlvbnMgIT09IE9iamVjdChvcHRpb25zKSkge1xuXHRcdFx0b3B0aW9ucyA9IHt9O1xuXHRcdH1cblxuXHRcdHRoaXMuY2FjaGUgPSB7fTtcblx0XHR0aGlzLmVsID0gZWxlbWVudDtcblxuXHRcdHRoaXMudmFsdWUgPSBmdW5jdGlvbihrZXkpIHtcblx0XHRcdHZhciBkYXRhQXR0cjtcblxuXHRcdFx0aWYgKHRoaXMuY2FjaGVba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRhdGFBdHRyID0gJCh0aGlzLmVsKS5hdHRyKCdkYXRhLWNib3gtJytrZXkpO1xuXG5cdFx0XHRcdGlmIChkYXRhQXR0ciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy5jYWNoZVtrZXldID0gZGF0YUF0dHI7XG5cdFx0XHRcdH0gZWxzZSBpZiAob3B0aW9uc1trZXldICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aGlzLmNhY2hlW2tleV0gPSBvcHRpb25zW2tleV07XG5cdFx0XHRcdH0gZWxzZSBpZiAoZGVmYXVsdHNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy5jYWNoZVtrZXldID0gZGVmYXVsdHNba2V5XTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcy5jYWNoZVtrZXldO1xuXHRcdH07XG5cblx0XHR0aGlzLmdldCA9IGZ1bmN0aW9uKGtleSkge1xuXHRcdFx0dmFyIHZhbHVlID0gdGhpcy52YWx1ZShrZXkpO1xuXHRcdFx0cmV0dXJuICQuaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZS5jYWxsKHRoaXMuZWwsIHRoaXMpIDogdmFsdWU7XG5cdFx0fTtcblx0fVxuXG5cdC8vIERldGVybWluZSB0aGUgbmV4dCBhbmQgcHJldmlvdXMgbWVtYmVycyBpbiBhIGdyb3VwLlxuXHRmdW5jdGlvbiBnZXRJbmRleChpbmNyZW1lbnQpIHtcblx0XHR2YXJcblx0XHRtYXggPSAkcmVsYXRlZC5sZW5ndGgsXG5cdFx0bmV3SW5kZXggPSAoaW5kZXggKyBpbmNyZW1lbnQpICUgbWF4O1xuXG5cdFx0cmV0dXJuIChuZXdJbmRleCA8IDApID8gbWF4ICsgbmV3SW5kZXggOiBuZXdJbmRleDtcblx0fVxuXG5cdC8vIENvbnZlcnQgJyUnIGFuZCAncHgnIHZhbHVlcyB0byBpbnRlZ2Vyc1xuXHRmdW5jdGlvbiBzZXRTaXplKHNpemUsIGRpbWVuc2lvbikge1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKCgvJS8udGVzdChzaXplKSA/ICgoZGltZW5zaW9uID09PSAneCcgPyAkd2luZG93LndpZHRoKCkgOiB3aW5oZWlnaHQoKSkgLyAxMDApIDogMSkgKiBwYXJzZUludChzaXplLCAxMCkpO1xuXHR9XG5cblx0Ly8gQ2hlY2tzIGFuIGhyZWYgdG8gc2VlIGlmIGl0IGlzIGEgcGhvdG8uXG5cdC8vIFRoZXJlIGlzIGEgZm9yY2UgcGhvdG8gb3B0aW9uIChwaG90bzogdHJ1ZSkgZm9yIGhyZWZzIHRoYXQgY2Fubm90IGJlIG1hdGNoZWQgYnkgdGhlIHJlZ2V4LlxuXHRmdW5jdGlvbiBpc0ltYWdlKHNldHRpbmdzLCB1cmwpIHtcblx0XHRyZXR1cm4gc2V0dGluZ3MuZ2V0KCdwaG90bycpIHx8IHNldHRpbmdzLmdldCgncGhvdG9SZWdleCcpLnRlc3QodXJsKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJldGluYVVybChzZXR0aW5ncywgdXJsKSB7XG5cdFx0cmV0dXJuIHNldHRpbmdzLmdldCgncmV0aW5hVXJsJykgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8gPiAxID8gdXJsLnJlcGxhY2Uoc2V0dGluZ3MuZ2V0KCdwaG90b1JlZ2V4JyksIHNldHRpbmdzLmdldCgncmV0aW5hU3VmZml4JykpIDogdXJsO1xuXHR9XG5cblx0ZnVuY3Rpb24gdHJhcEZvY3VzKGUpIHtcblx0XHRpZiAoJ2NvbnRhaW5zJyBpbiAkYm94WzBdICYmICEkYm94WzBdLmNvbnRhaW5zKGUudGFyZ2V0KSAmJiBlLnRhcmdldCAhPT0gJG92ZXJsYXlbMF0pIHtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHQkYm94LmZvY3VzKCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0Q2xhc3Moc3RyKSB7XG5cdFx0aWYgKHNldENsYXNzLnN0ciAhPT0gc3RyKSB7XG5cdFx0XHQkYm94LmFkZCgkb3ZlcmxheSkucmVtb3ZlQ2xhc3Moc2V0Q2xhc3Muc3RyKS5hZGRDbGFzcyhzdHIpO1xuXHRcdFx0c2V0Q2xhc3Muc3RyID0gc3RyO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdldFJlbGF0ZWQocmVsKSB7XG5cdFx0aW5kZXggPSAwO1xuXG5cdFx0aWYgKHJlbCAmJiByZWwgIT09IGZhbHNlICYmIHJlbCAhPT0gJ25vZm9sbG93Jykge1xuXHRcdFx0JHJlbGF0ZWQgPSAkKCcuJyArIGJveEVsZW1lbnQpLmZpbHRlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHZhciBvcHRpb25zID0gJC5kYXRhKHRoaXMsIGNvbG9yYm94KTtcblx0XHRcdFx0dmFyIHNldHRpbmdzID0gbmV3IFNldHRpbmdzKHRoaXMsIG9wdGlvbnMpO1xuXHRcdFx0XHRyZXR1cm4gKHNldHRpbmdzLmdldCgncmVsJykgPT09IHJlbCk7XG5cdFx0XHR9KTtcblx0XHRcdGluZGV4ID0gJHJlbGF0ZWQuaW5kZXgoc2V0dGluZ3MuZWwpO1xuXG5cdFx0XHQvLyBDaGVjayBkaXJlY3QgY2FsbHMgdG8gQ29sb3Jib3guXG5cdFx0XHRpZiAoaW5kZXggPT09IC0xKSB7XG5cdFx0XHRcdCRyZWxhdGVkID0gJHJlbGF0ZWQuYWRkKHNldHRpbmdzLmVsKTtcblx0XHRcdFx0aW5kZXggPSAkcmVsYXRlZC5sZW5ndGggLSAxO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQkcmVsYXRlZCA9ICQoc2V0dGluZ3MuZWwpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHRyaWdnZXIoZXZlbnQpIHtcblx0XHQvLyBmb3IgZXh0ZXJuYWwgdXNlXG5cdFx0JChkb2N1bWVudCkudHJpZ2dlcihldmVudCk7XG5cdFx0Ly8gZm9yIGludGVybmFsIHVzZVxuXHRcdCRldmVudHMudHJpZ2dlckhhbmRsZXIoZXZlbnQpO1xuXHR9XG5cblx0dmFyIHNsaWRlc2hvdyA9IChmdW5jdGlvbigpe1xuXHRcdHZhciBhY3RpdmUsXG5cdFx0XHRjbGFzc05hbWUgPSBwcmVmaXggKyBcIlNsaWRlc2hvd19cIixcblx0XHRcdGNsaWNrID0gXCJjbGljay5cIiArIHByZWZpeCxcblx0XHRcdHRpbWVPdXQ7XG5cblx0XHRmdW5jdGlvbiBjbGVhciAoKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGltZU91dCk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gc2V0KCkge1xuXHRcdFx0aWYgKHNldHRpbmdzLmdldCgnbG9vcCcpIHx8ICRyZWxhdGVkW2luZGV4ICsgMV0pIHtcblx0XHRcdFx0Y2xlYXIoKTtcblx0XHRcdFx0dGltZU91dCA9IHNldFRpbWVvdXQocHVibGljTWV0aG9kLm5leHQsIHNldHRpbmdzLmdldCgnc2xpZGVzaG93U3BlZWQnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gc3RhcnQoKSB7XG5cdFx0XHQkc2xpZGVzaG93XG5cdFx0XHRcdC5odG1sKHNldHRpbmdzLmdldCgnc2xpZGVzaG93U3RvcCcpKVxuXHRcdFx0XHQudW5iaW5kKGNsaWNrKVxuXHRcdFx0XHQub25lKGNsaWNrLCBzdG9wKTtcblxuXHRcdFx0JGV2ZW50c1xuXHRcdFx0XHQuYmluZChldmVudF9jb21wbGV0ZSwgc2V0KVxuXHRcdFx0XHQuYmluZChldmVudF9sb2FkLCBjbGVhcik7XG5cblx0XHRcdCRib3gucmVtb3ZlQ2xhc3MoY2xhc3NOYW1lICsgXCJvZmZcIikuYWRkQ2xhc3MoY2xhc3NOYW1lICsgXCJvblwiKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzdG9wKCkge1xuXHRcdFx0Y2xlYXIoKTtcblxuXHRcdFx0JGV2ZW50c1xuXHRcdFx0XHQudW5iaW5kKGV2ZW50X2NvbXBsZXRlLCBzZXQpXG5cdFx0XHRcdC51bmJpbmQoZXZlbnRfbG9hZCwgY2xlYXIpO1xuXG5cdFx0XHQkc2xpZGVzaG93XG5cdFx0XHRcdC5odG1sKHNldHRpbmdzLmdldCgnc2xpZGVzaG93U3RhcnQnKSlcblx0XHRcdFx0LnVuYmluZChjbGljaylcblx0XHRcdFx0Lm9uZShjbGljaywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHB1YmxpY01ldGhvZC5uZXh0KCk7XG5cdFx0XHRcdFx0c3RhcnQoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdCRib3gucmVtb3ZlQ2xhc3MoY2xhc3NOYW1lICsgXCJvblwiKS5hZGRDbGFzcyhjbGFzc05hbWUgKyBcIm9mZlwiKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiByZXNldCgpIHtcblx0XHRcdGFjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0JHNsaWRlc2hvdy5oaWRlKCk7XG5cdFx0XHRjbGVhcigpO1xuXHRcdFx0JGV2ZW50c1xuXHRcdFx0XHQudW5iaW5kKGV2ZW50X2NvbXBsZXRlLCBzZXQpXG5cdFx0XHRcdC51bmJpbmQoZXZlbnRfbG9hZCwgY2xlYXIpO1xuXHRcdFx0JGJveC5yZW1vdmVDbGFzcyhjbGFzc05hbWUgKyBcIm9mZiBcIiArIGNsYXNzTmFtZSArIFwib25cIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRpZiAoYWN0aXZlKSB7XG5cdFx0XHRcdGlmICghc2V0dGluZ3MuZ2V0KCdzbGlkZXNob3cnKSkge1xuXHRcdFx0XHRcdCRldmVudHMudW5iaW5kKGV2ZW50X2NsZWFudXAsIHJlc2V0KTtcblx0XHRcdFx0XHRyZXNldCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoc2V0dGluZ3MuZ2V0KCdzbGlkZXNob3cnKSAmJiAkcmVsYXRlZFsxXSkge1xuXHRcdFx0XHRcdGFjdGl2ZSA9IHRydWU7XG5cdFx0XHRcdFx0JGV2ZW50cy5vbmUoZXZlbnRfY2xlYW51cCwgcmVzZXQpO1xuXHRcdFx0XHRcdGlmIChzZXR0aW5ncy5nZXQoJ3NsaWRlc2hvd0F1dG8nKSkge1xuXHRcdFx0XHRcdFx0c3RhcnQoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c3RvcCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQkc2xpZGVzaG93LnNob3coKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0fSgpKTtcblxuXG5cdGZ1bmN0aW9uIGxhdW5jaChlbGVtZW50KSB7XG5cdFx0dmFyIG9wdGlvbnM7XG5cblx0XHRpZiAoIWNsb3NpbmcpIHtcblxuXHRcdFx0b3B0aW9ucyA9ICQoZWxlbWVudCkuZGF0YShjb2xvcmJveCk7XG5cblx0XHRcdHNldHRpbmdzID0gbmV3IFNldHRpbmdzKGVsZW1lbnQsIG9wdGlvbnMpO1xuXG5cdFx0XHRnZXRSZWxhdGVkKHNldHRpbmdzLmdldCgncmVsJykpO1xuXG5cdFx0XHRpZiAoIW9wZW4pIHtcblx0XHRcdFx0b3BlbiA9IGFjdGl2ZSA9IHRydWU7IC8vIFByZXZlbnRzIHRoZSBwYWdlLWNoYW5nZSBhY3Rpb24gZnJvbSBxdWV1aW5nIHVwIGlmIHRoZSB2aXNpdG9yIGhvbGRzIGRvd24gdGhlIGxlZnQgb3IgcmlnaHQga2V5cy5cblxuXHRcdFx0XHRzZXRDbGFzcyhzZXR0aW5ncy5nZXQoJ2NsYXNzTmFtZScpKTtcblxuXHRcdFx0XHQvLyBTaG93IGNvbG9yYm94IHNvIHRoZSBzaXplcyBjYW4gYmUgY2FsY3VsYXRlZCBpbiBvbGRlciB2ZXJzaW9ucyBvZiBqUXVlcnlcblx0XHRcdFx0JGJveC5jc3Moe3Zpc2liaWxpdHk6J2hpZGRlbicsIGRpc3BsYXk6J2Jsb2NrJywgb3BhY2l0eTonJ30pO1xuXG5cdFx0XHRcdCRsb2FkZWQgPSAkdGFnKGRpdiwgJ0xvYWRlZENvbnRlbnQnLCAnd2lkdGg6MDsgaGVpZ2h0OjA7IG92ZXJmbG93OmhpZGRlbjsgdmlzaWJpbGl0eTpoaWRkZW4nKTtcblx0XHRcdFx0JGNvbnRlbnQuY3NzKHt3aWR0aDonJywgaGVpZ2h0OicnfSkuYXBwZW5kKCRsb2FkZWQpO1xuXG5cdFx0XHRcdC8vIENhY2hlIHZhbHVlcyBuZWVkZWQgZm9yIHNpemUgY2FsY3VsYXRpb25zXG5cdFx0XHRcdGludGVyZmFjZUhlaWdodCA9ICR0b3BCb3JkZXIuaGVpZ2h0KCkgKyAkYm90dG9tQm9yZGVyLmhlaWdodCgpICsgJGNvbnRlbnQub3V0ZXJIZWlnaHQodHJ1ZSkgLSAkY29udGVudC5oZWlnaHQoKTtcblx0XHRcdFx0aW50ZXJmYWNlV2lkdGggPSAkbGVmdEJvcmRlci53aWR0aCgpICsgJHJpZ2h0Qm9yZGVyLndpZHRoKCkgKyAkY29udGVudC5vdXRlcldpZHRoKHRydWUpIC0gJGNvbnRlbnQud2lkdGgoKTtcblx0XHRcdFx0bG9hZGVkSGVpZ2h0ID0gJGxvYWRlZC5vdXRlckhlaWdodCh0cnVlKTtcblx0XHRcdFx0bG9hZGVkV2lkdGggPSAkbG9hZGVkLm91dGVyV2lkdGgodHJ1ZSk7XG5cblx0XHRcdFx0Ly8gT3BlbnMgaW5pdGFsIGVtcHR5IENvbG9yYm94IHByaW9yIHRvIGNvbnRlbnQgYmVpbmcgbG9hZGVkLlxuXHRcdFx0XHR2YXIgaW5pdGlhbFdpZHRoID0gc2V0U2l6ZShzZXR0aW5ncy5nZXQoJ2luaXRpYWxXaWR0aCcpLCAneCcpO1xuXHRcdFx0XHR2YXIgaW5pdGlhbEhlaWdodCA9IHNldFNpemUoc2V0dGluZ3MuZ2V0KCdpbml0aWFsSGVpZ2h0JyksICd5Jyk7XG5cdFx0XHRcdHZhciBtYXhXaWR0aCA9IHNldHRpbmdzLmdldCgnbWF4V2lkdGgnKTtcblx0XHRcdFx0dmFyIG1heEhlaWdodCA9IHNldHRpbmdzLmdldCgnbWF4SGVpZ2h0Jyk7XG5cblx0XHRcdFx0c2V0dGluZ3MudyA9IE1hdGgubWF4KChtYXhXaWR0aCAhPT0gZmFsc2UgPyBNYXRoLm1pbihpbml0aWFsV2lkdGgsIHNldFNpemUobWF4V2lkdGgsICd4JykpIDogaW5pdGlhbFdpZHRoKSAtIGxvYWRlZFdpZHRoIC0gaW50ZXJmYWNlV2lkdGgsIDApO1xuXHRcdFx0XHRzZXR0aW5ncy5oID0gTWF0aC5tYXgoKG1heEhlaWdodCAhPT0gZmFsc2UgPyBNYXRoLm1pbihpbml0aWFsSGVpZ2h0LCBzZXRTaXplKG1heEhlaWdodCwgJ3knKSkgOiBpbml0aWFsSGVpZ2h0KSAtIGxvYWRlZEhlaWdodCAtIGludGVyZmFjZUhlaWdodCwgMCk7XG5cblx0XHRcdFx0JGxvYWRlZC5jc3Moe3dpZHRoOicnLCBoZWlnaHQ6c2V0dGluZ3MuaH0pO1xuXHRcdFx0XHRwdWJsaWNNZXRob2QucG9zaXRpb24oKTtcblxuXHRcdFx0XHR0cmlnZ2VyKGV2ZW50X29wZW4pO1xuXHRcdFx0XHRzZXR0aW5ncy5nZXQoJ29uT3BlbicpO1xuXG5cdFx0XHRcdCRncm91cENvbnRyb2xzLmFkZCgkdGl0bGUpLmhpZGUoKTtcblxuXHRcdFx0XHQkYm94LmZvY3VzKCk7XG5cblx0XHRcdFx0aWYgKHNldHRpbmdzLmdldCgndHJhcEZvY3VzJykpIHtcblx0XHRcdFx0XHQvLyBDb25maW5lIGZvY3VzIHRvIHRoZSBtb2RhbFxuXHRcdFx0XHRcdC8vIFVzZXMgZXZlbnQgY2FwdHVyaW5nIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBpbiBJRTgtXG5cdFx0XHRcdFx0aWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHtcblxuXHRcdFx0XHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0cmFwRm9jdXMsIHRydWUpO1xuXG5cdFx0XHRcdFx0XHQkZXZlbnRzLm9uZShldmVudF9jbG9zZWQsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0cmFwRm9jdXMsIHRydWUpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZvY3VzIG9uIGNsb3Npbmdcblx0XHRcdFx0aWYgKHNldHRpbmdzLmdldCgncmV0dXJuRm9jdXMnKSkge1xuXHRcdFx0XHRcdCRldmVudHMub25lKGV2ZW50X2Nsb3NlZCwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0JChzZXR0aW5ncy5lbCkuZm9jdXMoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR2YXIgb3BhY2l0eSA9IHBhcnNlRmxvYXQoc2V0dGluZ3MuZ2V0KCdvcGFjaXR5JykpO1xuXHRcdFx0JG92ZXJsYXkuY3NzKHtcblx0XHRcdFx0b3BhY2l0eTogb3BhY2l0eSA9PT0gb3BhY2l0eSA/IG9wYWNpdHkgOiAnJyxcblx0XHRcdFx0Y3Vyc29yOiBzZXR0aW5ncy5nZXQoJ292ZXJsYXlDbG9zZScpID8gJ3BvaW50ZXInIDogJycsXG5cdFx0XHRcdHZpc2liaWxpdHk6ICd2aXNpYmxlJ1xuXHRcdFx0fSkuc2hvdygpO1xuXG5cdFx0XHRpZiAoc2V0dGluZ3MuZ2V0KCdjbG9zZUJ1dHRvbicpKSB7XG5cdFx0XHRcdCRjbG9zZS5odG1sKHNldHRpbmdzLmdldCgnY2xvc2UnKSkuYXBwZW5kVG8oJGNvbnRlbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0JGNsb3NlLmFwcGVuZFRvKCc8ZGl2Lz4nKTsgLy8gcmVwbGFjZSB3aXRoIC5kZXRhY2goKSB3aGVuIGRyb3BwaW5nIGpRdWVyeSA8IDEuNFxuXHRcdFx0fVxuXG5cdFx0XHRsb2FkKCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29sb3Jib3gncyBtYXJrdXAgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIERPTSBwcmlvciB0byBiZWluZyBjYWxsZWRcblx0Ly8gc28gdGhhdCB0aGUgYnJvd3NlciB3aWxsIGdvIGFoZWFkIGFuZCBsb2FkIHRoZSBDU1MgYmFja2dyb3VuZCBpbWFnZXMuXG5cdGZ1bmN0aW9uIGFwcGVuZEhUTUwoKSB7XG5cdFx0aWYgKCEkYm94KSB7XG5cdFx0XHRpbml0ID0gZmFsc2U7XG5cdFx0XHQkd2luZG93ID0gJCh3aW5kb3cpO1xuXHRcdFx0JGJveCA9ICR0YWcoZGl2KS5hdHRyKHtcblx0XHRcdFx0aWQ6IGNvbG9yYm94LFxuXHRcdFx0XHQnY2xhc3MnOiAkLnN1cHBvcnQub3BhY2l0eSA9PT0gZmFsc2UgPyBwcmVmaXggKyAnSUUnIDogJycsIC8vIGNsYXNzIGZvciBvcHRpb25hbCBJRTggJiBsb3dlciB0YXJnZXRlZCBDU1MuXG5cdFx0XHRcdHJvbGU6ICdkaWFsb2cnLFxuXHRcdFx0XHR0YWJpbmRleDogJy0xJ1xuXHRcdFx0fSkuaGlkZSgpO1xuXHRcdFx0JG92ZXJsYXkgPSAkdGFnKGRpdiwgXCJPdmVybGF5XCIpLmhpZGUoKTtcblx0XHRcdCRsb2FkaW5nT3ZlcmxheSA9ICQoWyR0YWcoZGl2LCBcIkxvYWRpbmdPdmVybGF5XCIpWzBdLCR0YWcoZGl2LCBcIkxvYWRpbmdHcmFwaGljXCIpWzBdXSk7XG5cdFx0XHQkd3JhcCA9ICR0YWcoZGl2LCBcIldyYXBwZXJcIik7XG5cdFx0XHQkY29udGVudCA9ICR0YWcoZGl2LCBcIkNvbnRlbnRcIikuYXBwZW5kKFxuXHRcdFx0XHQkdGl0bGUgPSAkdGFnKGRpdiwgXCJUaXRsZVwiKSxcblx0XHRcdFx0JGN1cnJlbnQgPSAkdGFnKGRpdiwgXCJDdXJyZW50XCIpLFxuXHRcdFx0XHQkcHJldiA9ICQoJzxidXR0b24gdHlwZT1cImJ1dHRvblwiLz4nKS5hdHRyKHtpZDpwcmVmaXgrJ1ByZXZpb3VzJ30pLFxuXHRcdFx0XHQkbmV4dCA9ICQoJzxidXR0b24gdHlwZT1cImJ1dHRvblwiLz4nKS5hdHRyKHtpZDpwcmVmaXgrJ05leHQnfSksXG5cdFx0XHRcdCRzbGlkZXNob3cgPSAkdGFnKCdidXR0b24nLCBcIlNsaWRlc2hvd1wiKSxcblx0XHRcdFx0JGxvYWRpbmdPdmVybGF5XG5cdFx0XHQpO1xuXG5cdFx0XHQkY2xvc2UgPSAkKCc8YnV0dG9uIHR5cGU9XCJidXR0b25cIi8+JykuYXR0cih7aWQ6cHJlZml4KydDbG9zZSd9KTtcblxuXHRcdFx0JHdyYXAuYXBwZW5kKCAvLyBUaGUgM3gzIEdyaWQgdGhhdCBtYWtlcyB1cCBDb2xvcmJveFxuXHRcdFx0XHQkdGFnKGRpdikuYXBwZW5kKFxuXHRcdFx0XHRcdCR0YWcoZGl2LCBcIlRvcExlZnRcIiksXG5cdFx0XHRcdFx0JHRvcEJvcmRlciA9ICR0YWcoZGl2LCBcIlRvcENlbnRlclwiKSxcblx0XHRcdFx0XHQkdGFnKGRpdiwgXCJUb3BSaWdodFwiKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHQkdGFnKGRpdiwgZmFsc2UsICdjbGVhcjpsZWZ0JykuYXBwZW5kKFxuXHRcdFx0XHRcdCRsZWZ0Qm9yZGVyID0gJHRhZyhkaXYsIFwiTWlkZGxlTGVmdFwiKSxcblx0XHRcdFx0XHQkY29udGVudCxcblx0XHRcdFx0XHQkcmlnaHRCb3JkZXIgPSAkdGFnKGRpdiwgXCJNaWRkbGVSaWdodFwiKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHQkdGFnKGRpdiwgZmFsc2UsICdjbGVhcjpsZWZ0JykuYXBwZW5kKFxuXHRcdFx0XHRcdCR0YWcoZGl2LCBcIkJvdHRvbUxlZnRcIiksXG5cdFx0XHRcdFx0JGJvdHRvbUJvcmRlciA9ICR0YWcoZGl2LCBcIkJvdHRvbUNlbnRlclwiKSxcblx0XHRcdFx0XHQkdGFnKGRpdiwgXCJCb3R0b21SaWdodFwiKVxuXHRcdFx0XHQpXG5cdFx0XHQpLmZpbmQoJ2RpdiBkaXYnKS5jc3MoeydmbG9hdCc6ICdsZWZ0J30pO1xuXG5cdFx0XHQkbG9hZGluZ0JheSA9ICR0YWcoZGl2LCBmYWxzZSwgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo5OTk5cHg7IHZpc2liaWxpdHk6aGlkZGVuOyBkaXNwbGF5Om5vbmU7IG1heC13aWR0aDpub25lOycpO1xuXG5cdFx0XHQkZ3JvdXBDb250cm9scyA9ICRuZXh0LmFkZCgkcHJldikuYWRkKCRjdXJyZW50KS5hZGQoJHNsaWRlc2hvdyk7XG5cdFx0fVxuXHRcdGlmIChkb2N1bWVudC5ib2R5ICYmICEkYm94LnBhcmVudCgpLmxlbmd0aCkge1xuXHRcdFx0JChkb2N1bWVudC5ib2R5KS5hcHBlbmQoJG92ZXJsYXksICRib3guYXBwZW5kKCR3cmFwLCAkbG9hZGluZ0JheSkpO1xuXHRcdH1cblx0fVxuXG5cdC8vIEFkZCBDb2xvcmJveCdzIGV2ZW50IGJpbmRpbmdzXG5cdGZ1bmN0aW9uIGFkZEJpbmRpbmdzKCkge1xuXHRcdGZ1bmN0aW9uIGNsaWNrSGFuZGxlcihlKSB7XG5cdFx0XHQvLyBpZ25vcmUgbm9uLWxlZnQtbW91c2UtY2xpY2tzIGFuZCBjbGlja3MgbW9kaWZpZWQgd2l0aCBjdHJsIC8gY29tbWFuZCwgc2hpZnQsIG9yIGFsdC5cblx0XHRcdC8vIFNlZTogaHR0cDovL2phY2tsbW9vcmUuY29tL25vdGVzL2NsaWNrLWV2ZW50cy9cblx0XHRcdGlmICghKGUud2hpY2ggPiAxIHx8IGUuc2hpZnRLZXkgfHwgZS5hbHRLZXkgfHwgZS5tZXRhS2V5IHx8IGUuY3RybEtleSkpIHtcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRsYXVuY2godGhpcyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCRib3gpIHtcblx0XHRcdGlmICghaW5pdCkge1xuXHRcdFx0XHRpbml0ID0gdHJ1ZTtcblxuXHRcdFx0XHQvLyBBbm9ueW1vdXMgZnVuY3Rpb25zIGhlcmUga2VlcCB0aGUgcHVibGljIG1ldGhvZCBmcm9tIGJlaW5nIGNhY2hlZCwgdGhlcmVieSBhbGxvd2luZyB0aGVtIHRvIGJlIHJlZGVmaW5lZCBvbiB0aGUgZmx5LlxuXHRcdFx0XHQkbmV4dC5jbGljayhmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cHVibGljTWV0aG9kLm5leHQoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdCRwcmV2LmNsaWNrKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRwdWJsaWNNZXRob2QucHJldigpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0JGNsb3NlLmNsaWNrKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRwdWJsaWNNZXRob2QuY2xvc2UoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdCRvdmVybGF5LmNsaWNrKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRpZiAoc2V0dGluZ3MuZ2V0KCdvdmVybGF5Q2xvc2UnKSkge1xuXHRcdFx0XHRcdFx0cHVibGljTWV0aG9kLmNsb3NlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHQvLyBLZXkgQmluZGluZ3Ncblx0XHRcdFx0JChkb2N1bWVudCkuYmluZCgna2V5ZG93bi4nICsgcHJlZml4LCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0XHRcdHZhciBrZXkgPSBlLmtleUNvZGU7XG5cdFx0XHRcdFx0aWYgKG9wZW4gJiYgc2V0dGluZ3MuZ2V0KCdlc2NLZXknKSAmJiBrZXkgPT09IDI3KSB7XG5cdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRwdWJsaWNNZXRob2QuY2xvc2UoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKG9wZW4gJiYgc2V0dGluZ3MuZ2V0KCdhcnJvd0tleScpICYmICRyZWxhdGVkWzFdICYmICFlLmFsdEtleSkge1xuXHRcdFx0XHRcdFx0aWYgKGtleSA9PT0gMzcpIHtcblx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHQkcHJldi5jbGljaygpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChrZXkgPT09IDM5KSB7XG5cdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0JG5leHQuY2xpY2soKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmICgkLmlzRnVuY3Rpb24oJC5mbi5vbikpIHtcblx0XHRcdFx0XHQvLyBGb3IgalF1ZXJ5IDEuNytcblx0XHRcdFx0XHQkKGRvY3VtZW50KS5vbignY2xpY2suJytwcmVmaXgsICcuJytib3hFbGVtZW50LCBjbGlja0hhbmRsZXIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIEZvciBqUXVlcnkgMS4zLnggLT4gMS42Lnhcblx0XHRcdFx0XHQvLyBUaGlzIGNvZGUgaXMgbmV2ZXIgcmVhY2hlZCBpbiBqUXVlcnkgMS45LCBzbyBkbyBub3QgY29udGFjdCBtZSBhYm91dCAnbGl2ZScgYmVpbmcgcmVtb3ZlZC5cblx0XHRcdFx0XHQvLyBUaGlzIGlzIG5vdCBoZXJlIGZvciBqUXVlcnkgMS45LCBpdCdzIGhlcmUgZm9yIGxlZ2FjeSB1c2Vycy5cblx0XHRcdFx0XHQkKCcuJytib3hFbGVtZW50KS5saXZlKCdjbGljay4nK3ByZWZpeCwgY2xpY2tIYW5kbGVyKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIERvbid0IGRvIGFueXRoaW5nIGlmIENvbG9yYm94IGFscmVhZHkgZXhpc3RzLlxuXHRpZiAoJFtjb2xvcmJveF0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBBcHBlbmQgdGhlIEhUTUwgd2hlbiB0aGUgRE9NIGxvYWRzXG5cdCQoYXBwZW5kSFRNTCk7XG5cblxuXHQvLyAqKioqKioqKioqKioqKioqXG5cdC8vIFBVQkxJQyBGVU5DVElPTlNcblx0Ly8gVXNhZ2UgZm9ybWF0OiAkLmNvbG9yYm94LmNsb3NlKCk7XG5cdC8vIFVzYWdlIGZyb20gd2l0aGluIGFuIGlmcmFtZTogcGFyZW50LmpRdWVyeS5jb2xvcmJveC5jbG9zZSgpO1xuXHQvLyAqKioqKioqKioqKioqKioqXG5cblx0cHVibGljTWV0aG9kID0gJC5mbltjb2xvcmJveF0gPSAkW2NvbG9yYm94XSA9IGZ1bmN0aW9uIChvcHRpb25zLCBjYWxsYmFjaykge1xuXHRcdHZhciBzZXR0aW5ncztcblx0XHR2YXIgJG9iaiA9IHRoaXM7XG5cblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdGlmICgkLmlzRnVuY3Rpb24oJG9iaikpIHsgLy8gYXNzdW1lIGEgY2FsbCB0byAkLmNvbG9yYm94XG5cdFx0XHQkb2JqID0gJCgnPGEvPicpO1xuXHRcdFx0b3B0aW9ucy5vcGVuID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoISRvYmpbMF0pIHsgLy8gY29sb3Jib3ggYmVpbmcgYXBwbGllZCB0byBlbXB0eSBjb2xsZWN0aW9uXG5cdFx0XHRyZXR1cm4gJG9iajtcblx0XHR9XG5cblx0XHRhcHBlbmRIVE1MKCk7XG5cblx0XHRpZiAoYWRkQmluZGluZ3MoKSkge1xuXG5cdFx0XHRpZiAoY2FsbGJhY2spIHtcblx0XHRcdFx0b3B0aW9ucy5vbkNvbXBsZXRlID0gY2FsbGJhY2s7XG5cdFx0XHR9XG5cblx0XHRcdCRvYmouZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHZhciBvbGQgPSAkLmRhdGEodGhpcywgY29sb3Jib3gpIHx8IHt9O1xuXHRcdFx0XHQkLmRhdGEodGhpcywgY29sb3Jib3gsICQuZXh0ZW5kKG9sZCwgb3B0aW9ucykpO1xuXHRcdFx0fSkuYWRkQ2xhc3MoYm94RWxlbWVudCk7XG5cblx0XHRcdHNldHRpbmdzID0gbmV3IFNldHRpbmdzKCRvYmpbMF0sIG9wdGlvbnMpO1xuXG5cdFx0XHRpZiAoc2V0dGluZ3MuZ2V0KCdvcGVuJykpIHtcblx0XHRcdFx0bGF1bmNoKCRvYmpbMF0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAkb2JqO1xuXHR9O1xuXG5cdHB1YmxpY01ldGhvZC5wb3NpdGlvbiA9IGZ1bmN0aW9uIChzcGVlZCwgbG9hZGVkQ2FsbGJhY2spIHtcblx0XHR2YXJcblx0XHRjc3MsXG5cdFx0dG9wID0gMCxcblx0XHRsZWZ0ID0gMCxcblx0XHRvZmZzZXQgPSAkYm94Lm9mZnNldCgpLFxuXHRcdHNjcm9sbFRvcCxcblx0XHRzY3JvbGxMZWZ0O1xuXG5cdFx0JHdpbmRvdy51bmJpbmQoJ3Jlc2l6ZS4nICsgcHJlZml4KTtcblxuXHRcdC8vIHJlbW92ZSB0aGUgbW9kYWwgc28gdGhhdCBpdCBkb2Vzbid0IGluZmx1ZW5jZSB0aGUgZG9jdW1lbnQgd2lkdGgvaGVpZ2h0XG5cdFx0JGJveC5jc3Moe3RvcDogLTllNCwgbGVmdDogLTllNH0pO1xuXG5cdFx0c2Nyb2xsVG9wID0gJHdpbmRvdy5zY3JvbGxUb3AoKTtcblx0XHRzY3JvbGxMZWZ0ID0gJHdpbmRvdy5zY3JvbGxMZWZ0KCk7XG5cblx0XHRpZiAoc2V0dGluZ3MuZ2V0KCdmaXhlZCcpKSB7XG5cdFx0XHRvZmZzZXQudG9wIC09IHNjcm9sbFRvcDtcblx0XHRcdG9mZnNldC5sZWZ0IC09IHNjcm9sbExlZnQ7XG5cdFx0XHQkYm94LmNzcyh7cG9zaXRpb246ICdmaXhlZCd9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dG9wID0gc2Nyb2xsVG9wO1xuXHRcdFx0bGVmdCA9IHNjcm9sbExlZnQ7XG5cdFx0XHQkYm94LmNzcyh7cG9zaXRpb246ICdhYnNvbHV0ZSd9KTtcblx0XHR9XG5cblx0XHQvLyBrZWVwcyB0aGUgdG9wIGFuZCBsZWZ0IHBvc2l0aW9ucyB3aXRoaW4gdGhlIGJyb3dzZXIncyB2aWV3cG9ydC5cblx0XHRpZiAoc2V0dGluZ3MuZ2V0KCdyaWdodCcpICE9PSBmYWxzZSkge1xuXHRcdFx0bGVmdCArPSBNYXRoLm1heCgkd2luZG93LndpZHRoKCkgLSBzZXR0aW5ncy53IC0gbG9hZGVkV2lkdGggLSBpbnRlcmZhY2VXaWR0aCAtIHNldFNpemUoc2V0dGluZ3MuZ2V0KCdyaWdodCcpLCAneCcpLCAwKTtcblx0XHR9IGVsc2UgaWYgKHNldHRpbmdzLmdldCgnbGVmdCcpICE9PSBmYWxzZSkge1xuXHRcdFx0bGVmdCArPSBzZXRTaXplKHNldHRpbmdzLmdldCgnbGVmdCcpLCAneCcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZWZ0ICs9IE1hdGgucm91bmQoTWF0aC5tYXgoJHdpbmRvdy53aWR0aCgpIC0gc2V0dGluZ3MudyAtIGxvYWRlZFdpZHRoIC0gaW50ZXJmYWNlV2lkdGgsIDApIC8gMik7XG5cdFx0fVxuXG5cdFx0aWYgKHNldHRpbmdzLmdldCgnYm90dG9tJykgIT09IGZhbHNlKSB7XG5cdFx0XHR0b3AgKz0gTWF0aC5tYXgod2luaGVpZ2h0KCkgLSBzZXR0aW5ncy5oIC0gbG9hZGVkSGVpZ2h0IC0gaW50ZXJmYWNlSGVpZ2h0IC0gc2V0U2l6ZShzZXR0aW5ncy5nZXQoJ2JvdHRvbScpLCAneScpLCAwKTtcblx0XHR9IGVsc2UgaWYgKHNldHRpbmdzLmdldCgndG9wJykgIT09IGZhbHNlKSB7XG5cdFx0XHR0b3AgKz0gc2V0U2l6ZShzZXR0aW5ncy5nZXQoJ3RvcCcpLCAneScpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0b3AgKz0gTWF0aC5yb3VuZChNYXRoLm1heCh3aW5oZWlnaHQoKSAtIHNldHRpbmdzLmggLSBsb2FkZWRIZWlnaHQgLSBpbnRlcmZhY2VIZWlnaHQsIDApIC8gMik7XG5cdFx0fVxuXG5cdFx0JGJveC5jc3Moe3RvcDogb2Zmc2V0LnRvcCwgbGVmdDogb2Zmc2V0LmxlZnQsIHZpc2liaWxpdHk6J3Zpc2libGUnfSk7XG5cblx0XHQvLyB0aGlzIGdpdmVzIHRoZSB3cmFwcGVyIHBsZW50eSBvZiBicmVhdGhpbmcgcm9vbSBzbyBpdCdzIGZsb2F0ZWQgY29udGVudHMgY2FuIG1vdmUgYXJvdW5kIHNtb290aGx5LFxuXHRcdC8vIGJ1dCBpdCBoYXMgdG8gYmUgc2hyYW5rIGRvd24gYXJvdW5kIHRoZSBzaXplIG9mIGRpdiNjb2xvcmJveCB3aGVuIGl0J3MgZG9uZS4gIElmIG5vdCxcblx0XHQvLyBpdCBjYW4gaW52b2tlIGFuIG9ic2N1cmUgSUUgYnVnIHdoZW4gdXNpbmcgaWZyYW1lcy5cblx0XHQkd3JhcFswXS5zdHlsZS53aWR0aCA9ICR3cmFwWzBdLnN0eWxlLmhlaWdodCA9IFwiOTk5OXB4XCI7XG5cblx0XHRmdW5jdGlvbiBtb2RhbERpbWVuc2lvbnMoKSB7XG5cdFx0XHQkdG9wQm9yZGVyWzBdLnN0eWxlLndpZHRoID0gJGJvdHRvbUJvcmRlclswXS5zdHlsZS53aWR0aCA9ICRjb250ZW50WzBdLnN0eWxlLndpZHRoID0gKHBhcnNlSW50KCRib3hbMF0uc3R5bGUud2lkdGgsMTApIC0gaW50ZXJmYWNlV2lkdGgpKydweCc7XG5cdFx0XHQkY29udGVudFswXS5zdHlsZS5oZWlnaHQgPSAkbGVmdEJvcmRlclswXS5zdHlsZS5oZWlnaHQgPSAkcmlnaHRCb3JkZXJbMF0uc3R5bGUuaGVpZ2h0ID0gKHBhcnNlSW50KCRib3hbMF0uc3R5bGUuaGVpZ2h0LDEwKSAtIGludGVyZmFjZUhlaWdodCkrJ3B4Jztcblx0XHR9XG5cblx0XHRjc3MgPSB7d2lkdGg6IHNldHRpbmdzLncgKyBsb2FkZWRXaWR0aCArIGludGVyZmFjZVdpZHRoLCBoZWlnaHQ6IHNldHRpbmdzLmggKyBsb2FkZWRIZWlnaHQgKyBpbnRlcmZhY2VIZWlnaHQsIHRvcDogdG9wLCBsZWZ0OiBsZWZ0fTtcblxuXHRcdC8vIHNldHRpbmcgdGhlIHNwZWVkIHRvIDAgaWYgdGhlIGNvbnRlbnQgaGFzbid0IGNoYW5nZWQgc2l6ZSBvciBwb3NpdGlvblxuXHRcdGlmIChzcGVlZCkge1xuXHRcdFx0dmFyIHRlbXBTcGVlZCA9IDA7XG5cdFx0XHQkLmVhY2goY3NzLCBmdW5jdGlvbihpKXtcblx0XHRcdFx0aWYgKGNzc1tpXSAhPT0gcHJldmlvdXNDU1NbaV0pIHtcblx0XHRcdFx0XHR0ZW1wU3BlZWQgPSBzcGVlZDtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0c3BlZWQgPSB0ZW1wU3BlZWQ7XG5cdFx0fVxuXG5cdFx0cHJldmlvdXNDU1MgPSBjc3M7XG5cblx0XHRpZiAoIXNwZWVkKSB7XG5cdFx0XHQkYm94LmNzcyhjc3MpO1xuXHRcdH1cblxuXHRcdCRib3guZGVxdWV1ZSgpLmFuaW1hdGUoY3NzLCB7XG5cdFx0XHRkdXJhdGlvbjogc3BlZWQgfHwgMCxcblx0XHRcdGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdG1vZGFsRGltZW5zaW9ucygpO1xuXG5cdFx0XHRcdGFjdGl2ZSA9IGZhbHNlO1xuXG5cdFx0XHRcdC8vIHNocmluayB0aGUgd3JhcHBlciBkb3duIHRvIGV4YWN0bHkgdGhlIHNpemUgb2YgY29sb3Jib3ggdG8gYXZvaWQgYSBidWcgaW4gSUUncyBpZnJhbWUgaW1wbGVtZW50YXRpb24uXG5cdFx0XHRcdCR3cmFwWzBdLnN0eWxlLndpZHRoID0gKHNldHRpbmdzLncgKyBsb2FkZWRXaWR0aCArIGludGVyZmFjZVdpZHRoKSArIFwicHhcIjtcblx0XHRcdFx0JHdyYXBbMF0uc3R5bGUuaGVpZ2h0ID0gKHNldHRpbmdzLmggKyBsb2FkZWRIZWlnaHQgKyBpbnRlcmZhY2VIZWlnaHQpICsgXCJweFwiO1xuXG5cdFx0XHRcdGlmIChzZXR0aW5ncy5nZXQoJ3JlcG9zaXRpb24nKSkge1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAgLy8gc21hbGwgZGVsYXkgYmVmb3JlIGJpbmRpbmcgb25yZXNpemUgZHVlIHRvIGFuIElFOCBidWcuXG5cdFx0XHRcdFx0XHQkd2luZG93LmJpbmQoJ3Jlc2l6ZS4nICsgcHJlZml4LCBwdWJsaWNNZXRob2QucG9zaXRpb24pO1xuXHRcdFx0XHRcdH0sIDEpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCQuaXNGdW5jdGlvbihsb2FkZWRDYWxsYmFjaykpIHtcblx0XHRcdFx0XHRsb2FkZWRDYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c3RlcDogbW9kYWxEaW1lbnNpb25zXG5cdFx0fSk7XG5cdH07XG5cblx0cHVibGljTWV0aG9kLnJlc2l6ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdFx0dmFyIHNjcm9sbHRvcDtcblxuXHRcdGlmIChvcGVuKSB7XG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdFx0aWYgKG9wdGlvbnMud2lkdGgpIHtcblx0XHRcdFx0c2V0dGluZ3MudyA9IHNldFNpemUob3B0aW9ucy53aWR0aCwgJ3gnKSAtIGxvYWRlZFdpZHRoIC0gaW50ZXJmYWNlV2lkdGg7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvcHRpb25zLmlubmVyV2lkdGgpIHtcblx0XHRcdFx0c2V0dGluZ3MudyA9IHNldFNpemUob3B0aW9ucy5pbm5lcldpZHRoLCAneCcpO1xuXHRcdFx0fVxuXG5cdFx0XHQkbG9hZGVkLmNzcyh7d2lkdGg6IHNldHRpbmdzLnd9KTtcblxuXHRcdFx0aWYgKG9wdGlvbnMuaGVpZ2h0KSB7XG5cdFx0XHRcdHNldHRpbmdzLmggPSBzZXRTaXplKG9wdGlvbnMuaGVpZ2h0LCAneScpIC0gbG9hZGVkSGVpZ2h0IC0gaW50ZXJmYWNlSGVpZ2h0O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob3B0aW9ucy5pbm5lckhlaWdodCkge1xuXHRcdFx0XHRzZXR0aW5ncy5oID0gc2V0U2l6ZShvcHRpb25zLmlubmVySGVpZ2h0LCAneScpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIW9wdGlvbnMuaW5uZXJIZWlnaHQgJiYgIW9wdGlvbnMuaGVpZ2h0KSB7XG5cdFx0XHRcdHNjcm9sbHRvcCA9ICRsb2FkZWQuc2Nyb2xsVG9wKCk7XG5cdFx0XHRcdCRsb2FkZWQuY3NzKHtoZWlnaHQ6IFwiYXV0b1wifSk7XG5cdFx0XHRcdHNldHRpbmdzLmggPSAkbG9hZGVkLmhlaWdodCgpO1xuXHRcdFx0fVxuXG5cdFx0XHQkbG9hZGVkLmNzcyh7aGVpZ2h0OiBzZXR0aW5ncy5ofSk7XG5cblx0XHRcdGlmKHNjcm9sbHRvcCkge1xuXHRcdFx0XHQkbG9hZGVkLnNjcm9sbFRvcChzY3JvbGx0b3ApO1xuXHRcdFx0fVxuXG5cdFx0XHRwdWJsaWNNZXRob2QucG9zaXRpb24oc2V0dGluZ3MuZ2V0KCd0cmFuc2l0aW9uJykgPT09IFwibm9uZVwiID8gMCA6IHNldHRpbmdzLmdldCgnc3BlZWQnKSk7XG5cdFx0fVxuXHR9O1xuXG5cdHB1YmxpY01ldGhvZC5wcmVwID0gZnVuY3Rpb24gKG9iamVjdCkge1xuXHRcdGlmICghb3Blbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBjYWxsYmFjaywgc3BlZWQgPSBzZXR0aW5ncy5nZXQoJ3RyYW5zaXRpb24nKSA9PT0gXCJub25lXCIgPyAwIDogc2V0dGluZ3MuZ2V0KCdzcGVlZCcpO1xuXG5cdFx0JGxvYWRlZC5yZW1vdmUoKTtcblxuXHRcdCRsb2FkZWQgPSAkdGFnKGRpdiwgJ0xvYWRlZENvbnRlbnQnKS5hcHBlbmQob2JqZWN0KTtcblxuXHRcdGZ1bmN0aW9uIGdldFdpZHRoKCkge1xuXHRcdFx0c2V0dGluZ3MudyA9IHNldHRpbmdzLncgfHwgJGxvYWRlZC53aWR0aCgpO1xuXHRcdFx0c2V0dGluZ3MudyA9IHNldHRpbmdzLm13ICYmIHNldHRpbmdzLm13IDwgc2V0dGluZ3MudyA/IHNldHRpbmdzLm13IDogc2V0dGluZ3Mudztcblx0XHRcdHJldHVybiBzZXR0aW5ncy53O1xuXHRcdH1cblx0XHRmdW5jdGlvbiBnZXRIZWlnaHQoKSB7XG5cdFx0XHRzZXR0aW5ncy5oID0gc2V0dGluZ3MuaCB8fCAkbG9hZGVkLmhlaWdodCgpO1xuXHRcdFx0c2V0dGluZ3MuaCA9IHNldHRpbmdzLm1oICYmIHNldHRpbmdzLm1oIDwgc2V0dGluZ3MuaCA/IHNldHRpbmdzLm1oIDogc2V0dGluZ3MuaDtcblx0XHRcdHJldHVybiBzZXR0aW5ncy5oO1xuXHRcdH1cblxuXHRcdCRsb2FkZWQuaGlkZSgpXG5cdFx0LmFwcGVuZFRvKCRsb2FkaW5nQmF5LnNob3coKSkvLyBjb250ZW50IGhhcyB0byBiZSBhcHBlbmRlZCB0byB0aGUgRE9NIGZvciBhY2N1cmF0ZSBzaXplIGNhbGN1bGF0aW9ucy5cblx0XHQuY3NzKHt3aWR0aDogZ2V0V2lkdGgoKSwgb3ZlcmZsb3c6IHNldHRpbmdzLmdldCgnc2Nyb2xsaW5nJykgPyAnYXV0bycgOiAnaGlkZGVuJ30pXG5cdFx0LmNzcyh7aGVpZ2h0OiBnZXRIZWlnaHQoKX0pLy8gc2V0cyB0aGUgaGVpZ2h0IGluZGVwZW5kZW50bHkgZnJvbSB0aGUgd2lkdGggaW4gY2FzZSB0aGUgbmV3IHdpZHRoIGluZmx1ZW5jZXMgdGhlIHZhbHVlIG9mIGhlaWdodC5cblx0XHQucHJlcGVuZFRvKCRjb250ZW50KTtcblxuXHRcdCRsb2FkaW5nQmF5LmhpZGUoKTtcblxuXHRcdC8vIGZsb2F0aW5nIHRoZSBJTUcgcmVtb3ZlcyB0aGUgYm90dG9tIGxpbmUtaGVpZ2h0IGFuZCBmaXhlZCBhIHByb2JsZW0gd2hlcmUgSUUgbWlzY2FsY3VsYXRlcyB0aGUgd2lkdGggb2YgdGhlIHBhcmVudCBlbGVtZW50IGFzIDEwMCUgb2YgdGhlIGRvY3VtZW50IHdpZHRoLlxuXG5cdFx0JChwaG90bykuY3NzKHsnZmxvYXQnOiAnbm9uZSd9KTtcblxuXHRcdHNldENsYXNzKHNldHRpbmdzLmdldCgnY2xhc3NOYW1lJykpO1xuXG5cdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgdG90YWwgPSAkcmVsYXRlZC5sZW5ndGgsXG5cdFx0XHRcdGlmcmFtZSxcblx0XHRcdFx0Y29tcGxldGU7XG5cblx0XHRcdGlmICghb3Blbikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIHJlbW92ZUZpbHRlcigpIHsgLy8gTmVlZGVkIGZvciBJRTggaW4gdmVyc2lvbnMgb2YgalF1ZXJ5IHByaW9yIHRvIDEuNy4yXG5cdFx0XHRcdGlmICgkLnN1cHBvcnQub3BhY2l0eSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHQkYm94WzBdLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnZmlsdGVyJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGNsZWFyVGltZW91dChsb2FkaW5nVGltZXIpO1xuXHRcdFx0XHQkbG9hZGluZ092ZXJsYXkuaGlkZSgpO1xuXHRcdFx0XHR0cmlnZ2VyKGV2ZW50X2NvbXBsZXRlKTtcblx0XHRcdFx0c2V0dGluZ3MuZ2V0KCdvbkNvbXBsZXRlJyk7XG5cdFx0XHR9O1xuXG5cblx0XHRcdCR0aXRsZS5odG1sKHNldHRpbmdzLmdldCgndGl0bGUnKSkuc2hvdygpO1xuXHRcdFx0JGxvYWRlZC5zaG93KCk7XG5cblx0XHRcdGlmICh0b3RhbCA+IDEpIHsgLy8gaGFuZGxlIGdyb3VwaW5nXG5cdFx0XHRcdGlmICh0eXBlb2Ygc2V0dGluZ3MuZ2V0KCdjdXJyZW50JykgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHQkY3VycmVudC5odG1sKHNldHRpbmdzLmdldCgnY3VycmVudCcpLnJlcGxhY2UoJ3tjdXJyZW50fScsIGluZGV4ICsgMSkucmVwbGFjZSgne3RvdGFsfScsIHRvdGFsKSkuc2hvdygpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JG5leHRbKHNldHRpbmdzLmdldCgnbG9vcCcpIHx8IGluZGV4IDwgdG90YWwgLSAxKSA/IFwic2hvd1wiIDogXCJoaWRlXCJdKCkuaHRtbChzZXR0aW5ncy5nZXQoJ25leHQnKSk7XG5cdFx0XHRcdCRwcmV2WyhzZXR0aW5ncy5nZXQoJ2xvb3AnKSB8fCBpbmRleCkgPyBcInNob3dcIiA6IFwiaGlkZVwiXSgpLmh0bWwoc2V0dGluZ3MuZ2V0KCdwcmV2aW91cycpKTtcblxuXHRcdFx0XHRzbGlkZXNob3coKTtcblxuXHRcdFx0XHQvLyBQcmVsb2FkcyBpbWFnZXMgd2l0aGluIGEgcmVsIGdyb3VwXG5cdFx0XHRcdGlmIChzZXR0aW5ncy5nZXQoJ3ByZWxvYWRpbmcnKSkge1xuXHRcdFx0XHRcdCQuZWFjaChbZ2V0SW5kZXgoLTEpLCBnZXRJbmRleCgxKV0sIGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0XHR2YXIgaW1nLFxuXHRcdFx0XHRcdFx0XHRpID0gJHJlbGF0ZWRbdGhpc10sXG5cdFx0XHRcdFx0XHRcdHNldHRpbmdzID0gbmV3IFNldHRpbmdzKGksICQuZGF0YShpLCBjb2xvcmJveCkpLFxuXHRcdFx0XHRcdFx0XHRzcmMgPSBzZXR0aW5ncy5nZXQoJ2hyZWYnKTtcblxuXHRcdFx0XHRcdFx0aWYgKHNyYyAmJiBpc0ltYWdlKHNldHRpbmdzLCBzcmMpKSB7XG5cdFx0XHRcdFx0XHRcdHNyYyA9IHJldGluYVVybChzZXR0aW5ncywgc3JjKTtcblx0XHRcdFx0XHRcdFx0aW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG5cdFx0XHRcdFx0XHRcdGltZy5zcmMgPSBzcmM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCRncm91cENvbnRyb2xzLmhpZGUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNldHRpbmdzLmdldCgnaWZyYW1lJykpIHtcblxuXHRcdFx0XHRpZnJhbWUgPSBzZXR0aW5ncy5nZXQoJ2NyZWF0ZUlmcmFtZScpO1xuXG5cdFx0XHRcdGlmICghc2V0dGluZ3MuZ2V0KCdzY3JvbGxpbmcnKSkge1xuXHRcdFx0XHRcdGlmcmFtZS5zY3JvbGxpbmcgPSBcIm5vXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQkKGlmcmFtZSlcblx0XHRcdFx0XHQuYXR0cih7XG5cdFx0XHRcdFx0XHRzcmM6IHNldHRpbmdzLmdldCgnaHJlZicpLFxuXHRcdFx0XHRcdFx0J2NsYXNzJzogcHJlZml4ICsgJ0lmcmFtZSdcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5vbmUoJ2xvYWQnLCBjb21wbGV0ZSlcblx0XHRcdFx0XHQuYXBwZW5kVG8oJGxvYWRlZCk7XG5cblx0XHRcdFx0JGV2ZW50cy5vbmUoZXZlbnRfcHVyZ2UsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRpZnJhbWUuc3JjID0gXCIvL2Fib3V0OmJsYW5rXCI7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChzZXR0aW5ncy5nZXQoJ2Zhc3RJZnJhbWUnKSkge1xuXHRcdFx0XHRcdCQoaWZyYW1lKS50cmlnZ2VyKCdsb2FkJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbXBsZXRlKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5ncy5nZXQoJ3RyYW5zaXRpb24nKSA9PT0gJ2ZhZGUnKSB7XG5cdFx0XHRcdCRib3guZmFkZVRvKHNwZWVkLCAxLCByZW1vdmVGaWx0ZXIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVtb3ZlRmlsdGVyKCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChzZXR0aW5ncy5nZXQoJ3RyYW5zaXRpb24nKSA9PT0gJ2ZhZGUnKSB7XG5cdFx0XHQkYm94LmZhZGVUbyhzcGVlZCwgMCwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRwdWJsaWNNZXRob2QucG9zaXRpb24oMCwgY2FsbGJhY2spO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHB1YmxpY01ldGhvZC5wb3NpdGlvbihzcGVlZCwgY2FsbGJhY2spO1xuXHRcdH1cblx0fTtcblxuXHRmdW5jdGlvbiBsb2FkICgpIHtcblx0XHR2YXIgaHJlZiwgc2V0UmVzaXplLCBwcmVwID0gcHVibGljTWV0aG9kLnByZXAsICRpbmxpbmUsIHJlcXVlc3QgPSArK3JlcXVlc3RzO1xuXG5cdFx0YWN0aXZlID0gdHJ1ZTtcblxuXHRcdHBob3RvID0gZmFsc2U7XG5cblx0XHR0cmlnZ2VyKGV2ZW50X3B1cmdlKTtcblx0XHR0cmlnZ2VyKGV2ZW50X2xvYWQpO1xuXHRcdHNldHRpbmdzLmdldCgnb25Mb2FkJyk7XG5cblx0XHRzZXR0aW5ncy5oID0gc2V0dGluZ3MuZ2V0KCdoZWlnaHQnKSA/XG5cdFx0XHRcdHNldFNpemUoc2V0dGluZ3MuZ2V0KCdoZWlnaHQnKSwgJ3knKSAtIGxvYWRlZEhlaWdodCAtIGludGVyZmFjZUhlaWdodCA6XG5cdFx0XHRcdHNldHRpbmdzLmdldCgnaW5uZXJIZWlnaHQnKSAmJiBzZXRTaXplKHNldHRpbmdzLmdldCgnaW5uZXJIZWlnaHQnKSwgJ3knKTtcblxuXHRcdHNldHRpbmdzLncgPSBzZXR0aW5ncy5nZXQoJ3dpZHRoJykgP1xuXHRcdFx0XHRzZXRTaXplKHNldHRpbmdzLmdldCgnd2lkdGgnKSwgJ3gnKSAtIGxvYWRlZFdpZHRoIC0gaW50ZXJmYWNlV2lkdGggOlxuXHRcdFx0XHRzZXR0aW5ncy5nZXQoJ2lubmVyV2lkdGgnKSAmJiBzZXRTaXplKHNldHRpbmdzLmdldCgnaW5uZXJXaWR0aCcpLCAneCcpO1xuXG5cdFx0Ly8gU2V0cyB0aGUgbWluaW11bSBkaW1lbnNpb25zIGZvciB1c2UgaW4gaW1hZ2Ugc2NhbGluZ1xuXHRcdHNldHRpbmdzLm13ID0gc2V0dGluZ3Mudztcblx0XHRzZXR0aW5ncy5taCA9IHNldHRpbmdzLmg7XG5cblx0XHQvLyBSZS1ldmFsdWF0ZSB0aGUgbWluaW11bSB3aWR0aCBhbmQgaGVpZ2h0IGJhc2VkIG9uIG1heFdpZHRoIGFuZCBtYXhIZWlnaHQgdmFsdWVzLlxuXHRcdC8vIElmIHRoZSB3aWR0aCBvciBoZWlnaHQgZXhjZWVkIHRoZSBtYXhXaWR0aCBvciBtYXhIZWlnaHQsIHVzZSB0aGUgbWF4aW11bSB2YWx1ZXMgaW5zdGVhZC5cblx0XHRpZiAoc2V0dGluZ3MuZ2V0KCdtYXhXaWR0aCcpKSB7XG5cdFx0XHRzZXR0aW5ncy5tdyA9IHNldFNpemUoc2V0dGluZ3MuZ2V0KCdtYXhXaWR0aCcpLCAneCcpIC0gbG9hZGVkV2lkdGggLSBpbnRlcmZhY2VXaWR0aDtcblx0XHRcdHNldHRpbmdzLm13ID0gc2V0dGluZ3MudyAmJiBzZXR0aW5ncy53IDwgc2V0dGluZ3MubXcgPyBzZXR0aW5ncy53IDogc2V0dGluZ3MubXc7XG5cdFx0fVxuXHRcdGlmIChzZXR0aW5ncy5nZXQoJ21heEhlaWdodCcpKSB7XG5cdFx0XHRzZXR0aW5ncy5taCA9IHNldFNpemUoc2V0dGluZ3MuZ2V0KCdtYXhIZWlnaHQnKSwgJ3knKSAtIGxvYWRlZEhlaWdodCAtIGludGVyZmFjZUhlaWdodDtcblx0XHRcdHNldHRpbmdzLm1oID0gc2V0dGluZ3MuaCAmJiBzZXR0aW5ncy5oIDwgc2V0dGluZ3MubWggPyBzZXR0aW5ncy5oIDogc2V0dGluZ3MubWg7XG5cdFx0fVxuXG5cdFx0aHJlZiA9IHNldHRpbmdzLmdldCgnaHJlZicpO1xuXG5cdFx0bG9hZGluZ1RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHQkbG9hZGluZ092ZXJsYXkuc2hvdygpO1xuXHRcdH0sIDEwMCk7XG5cblx0XHRpZiAoc2V0dGluZ3MuZ2V0KCdpbmxpbmUnKSkge1xuXHRcdFx0dmFyICR0YXJnZXQgPSAkKGhyZWYpO1xuXHRcdFx0Ly8gSW5zZXJ0cyBhbiBlbXB0eSBwbGFjZWhvbGRlciB3aGVyZSBpbmxpbmUgY29udGVudCBpcyBiZWluZyBwdWxsZWQgZnJvbS5cblx0XHRcdC8vIEFuIGV2ZW50IGlzIGJvdW5kIHRvIHB1dCBpbmxpbmUgY29udGVudCBiYWNrIHdoZW4gQ29sb3Jib3ggY2xvc2VzIG9yIGxvYWRzIG5ldyBjb250ZW50LlxuXHRcdFx0JGlubGluZSA9ICQoJzxkaXY+JykuaGlkZSgpLmluc2VydEJlZm9yZSgkdGFyZ2V0KTtcblxuXHRcdFx0JGV2ZW50cy5vbmUoZXZlbnRfcHVyZ2UsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0JGlubGluZS5yZXBsYWNlV2l0aCgkdGFyZ2V0KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRwcmVwKCR0YXJnZXQpO1xuXHRcdH0gZWxzZSBpZiAoc2V0dGluZ3MuZ2V0KCdpZnJhbWUnKSkge1xuXHRcdFx0Ly8gSUZyYW1lIGVsZW1lbnQgd29uJ3QgYmUgYWRkZWQgdG8gdGhlIERPTSB1bnRpbCBpdCBpcyByZWFkeSB0byBiZSBkaXNwbGF5ZWQsXG5cdFx0XHQvLyB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIERPTS1yZWFkeSBKUyB0aGF0IG1pZ2h0IGJlIHRyeWluZyB0byBydW4gaW4gdGhhdCBpZnJhbWUuXG5cdFx0XHRwcmVwKFwiIFwiKTtcblx0XHR9IGVsc2UgaWYgKHNldHRpbmdzLmdldCgnaHRtbCcpKSB7XG5cdFx0XHRwcmVwKHNldHRpbmdzLmdldCgnaHRtbCcpKTtcblx0XHR9IGVsc2UgaWYgKGlzSW1hZ2Uoc2V0dGluZ3MsIGhyZWYpKSB7XG5cblx0XHRcdGhyZWYgPSByZXRpbmFVcmwoc2V0dGluZ3MsIGhyZWYpO1xuXG5cdFx0XHRwaG90byA9IHNldHRpbmdzLmdldCgnY3JlYXRlSW1nJyk7XG5cblx0XHRcdCQocGhvdG8pXG5cdFx0XHQuYWRkQ2xhc3MocHJlZml4ICsgJ1Bob3RvJylcblx0XHRcdC5iaW5kKCdlcnJvci4nK3ByZWZpeCxmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHByZXAoJHRhZyhkaXYsICdFcnJvcicpLmh0bWwoc2V0dGluZ3MuZ2V0KCdpbWdFcnJvcicpKSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm9uZSgnbG9hZCcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKHJlcXVlc3QgIT09IHJlcXVlc3RzKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQSBzbWFsbCBwYXVzZSBiZWNhdXNlIHNvbWUgYnJvd3NlcnMgd2lsbCBvY2Nhc3Npb25hbHkgcmVwb3J0IGFcblx0XHRcdFx0Ly8gaW1nLndpZHRoIGFuZCBpbWcuaGVpZ2h0IG9mIHplcm8gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGltZy5vbmxvYWQgZmlyZXNcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xuXHRcdFx0XHRcdHZhciBwZXJjZW50O1xuXG5cdFx0XHRcdFx0aWYgKHNldHRpbmdzLmdldCgncmV0aW5hSW1hZ2UnKSAmJiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA+IDEpIHtcblx0XHRcdFx0XHRcdHBob3RvLmhlaWdodCA9IHBob3RvLmhlaWdodCAvIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuXHRcdFx0XHRcdFx0cGhvdG8ud2lkdGggPSBwaG90by53aWR0aCAvIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChzZXR0aW5ncy5nZXQoJ3NjYWxlUGhvdG9zJykpIHtcblx0XHRcdFx0XHRcdHNldFJlc2l6ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0cGhvdG8uaGVpZ2h0IC09IHBob3RvLmhlaWdodCAqIHBlcmNlbnQ7XG5cdFx0XHRcdFx0XHRcdHBob3RvLndpZHRoIC09IHBob3RvLndpZHRoICogcGVyY2VudDtcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRpZiAoc2V0dGluZ3MubXcgJiYgcGhvdG8ud2lkdGggPiBzZXR0aW5ncy5tdykge1xuXHRcdFx0XHRcdFx0XHRwZXJjZW50ID0gKHBob3RvLndpZHRoIC0gc2V0dGluZ3MubXcpIC8gcGhvdG8ud2lkdGg7XG5cdFx0XHRcdFx0XHRcdHNldFJlc2l6ZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHNldHRpbmdzLm1oICYmIHBob3RvLmhlaWdodCA+IHNldHRpbmdzLm1oKSB7XG5cdFx0XHRcdFx0XHRcdHBlcmNlbnQgPSAocGhvdG8uaGVpZ2h0IC0gc2V0dGluZ3MubWgpIC8gcGhvdG8uaGVpZ2h0O1xuXHRcdFx0XHRcdFx0XHRzZXRSZXNpemUoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoc2V0dGluZ3MuaCkge1xuXHRcdFx0XHRcdFx0cGhvdG8uc3R5bGUubWFyZ2luVG9wID0gTWF0aC5tYXgoc2V0dGluZ3MubWggLSBwaG90by5oZWlnaHQsIDApIC8gMiArICdweCc7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCRyZWxhdGVkWzFdICYmIChzZXR0aW5ncy5nZXQoJ2xvb3AnKSB8fCAkcmVsYXRlZFtpbmRleCArIDFdKSkge1xuXHRcdFx0XHRcdFx0cGhvdG8uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xuXG5cdFx0XHRcdFx0XHQkKHBob3RvKS5iaW5kKCdjbGljay4nK3ByZWZpeCwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRwdWJsaWNNZXRob2QubmV4dCgpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cGhvdG8uc3R5bGUud2lkdGggPSBwaG90by53aWR0aCArICdweCc7XG5cdFx0XHRcdFx0cGhvdG8uc3R5bGUuaGVpZ2h0ID0gcGhvdG8uaGVpZ2h0ICsgJ3B4Jztcblx0XHRcdFx0XHRwcmVwKHBob3RvKTtcblx0XHRcdFx0fSwgMSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cGhvdG8uc3JjID0gaHJlZjtcblxuXHRcdH0gZWxzZSBpZiAoaHJlZikge1xuXHRcdFx0JGxvYWRpbmdCYXkubG9hZChocmVmLCBzZXR0aW5ncy5nZXQoJ2RhdGEnKSwgZnVuY3Rpb24gKGRhdGEsIHN0YXR1cykge1xuXHRcdFx0XHRpZiAocmVxdWVzdCA9PT0gcmVxdWVzdHMpIHtcblx0XHRcdFx0XHRwcmVwKHN0YXR1cyA9PT0gJ2Vycm9yJyA/ICR0YWcoZGl2LCAnRXJyb3InKS5odG1sKHNldHRpbmdzLmdldCgneGhyRXJyb3InKSkgOiAkKHRoaXMpLmNvbnRlbnRzKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvLyBOYXZpZ2F0ZXMgdG8gdGhlIG5leHQgcGFnZS9pbWFnZSBpbiBhIHNldC5cblx0cHVibGljTWV0aG9kLm5leHQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKCFhY3RpdmUgJiYgJHJlbGF0ZWRbMV0gJiYgKHNldHRpbmdzLmdldCgnbG9vcCcpIHx8ICRyZWxhdGVkW2luZGV4ICsgMV0pKSB7XG5cdFx0XHRpbmRleCA9IGdldEluZGV4KDEpO1xuXHRcdFx0bGF1bmNoKCRyZWxhdGVkW2luZGV4XSk7XG5cdFx0fVxuXHR9O1xuXG5cdHB1YmxpY01ldGhvZC5wcmV2ID0gZnVuY3Rpb24gKCkge1xuXHRcdGlmICghYWN0aXZlICYmICRyZWxhdGVkWzFdICYmIChzZXR0aW5ncy5nZXQoJ2xvb3AnKSB8fCBpbmRleCkpIHtcblx0XHRcdGluZGV4ID0gZ2V0SW5kZXgoLTEpO1xuXHRcdFx0bGF1bmNoKCRyZWxhdGVkW2luZGV4XSk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIE5vdGU6IHRvIHVzZSB0aGlzIHdpdGhpbiBhbiBpZnJhbWUgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiBwYXJlbnQualF1ZXJ5LmNvbG9yYm94LmNsb3NlKCk7XG5cdHB1YmxpY01ldGhvZC5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAob3BlbiAmJiAhY2xvc2luZykge1xuXG5cdFx0XHRjbG9zaW5nID0gdHJ1ZTtcblx0XHRcdG9wZW4gPSBmYWxzZTtcblx0XHRcdHRyaWdnZXIoZXZlbnRfY2xlYW51cCk7XG5cdFx0XHRzZXR0aW5ncy5nZXQoJ29uQ2xlYW51cCcpO1xuXHRcdFx0JHdpbmRvdy51bmJpbmQoJy4nICsgcHJlZml4KTtcblx0XHRcdCRvdmVybGF5LmZhZGVUbyhzZXR0aW5ncy5nZXQoJ2ZhZGVPdXQnKSB8fCAwLCAwKTtcblxuXHRcdFx0JGJveC5zdG9wKCkuZmFkZVRvKHNldHRpbmdzLmdldCgnZmFkZU91dCcpIHx8IDAsIDAsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0JGJveC5oaWRlKCk7XG5cdFx0XHRcdCRvdmVybGF5LmhpZGUoKTtcblx0XHRcdFx0dHJpZ2dlcihldmVudF9wdXJnZSk7XG5cdFx0XHRcdCRsb2FkZWQucmVtb3ZlKCk7XG5cblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Y2xvc2luZyA9IGZhbHNlO1xuXHRcdFx0XHRcdHRyaWdnZXIoZXZlbnRfY2xvc2VkKTtcblx0XHRcdFx0XHRzZXR0aW5ncy5nZXQoJ29uQ2xvc2VkJyk7XG5cdFx0XHRcdH0sIDEpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIFJlbW92ZXMgY2hhbmdlcyBDb2xvcmJveCBtYWRlIHRvIHRoZSBkb2N1bWVudCwgYnV0IGRvZXMgbm90IHJlbW92ZSB0aGUgcGx1Z2luLlxuXHRwdWJsaWNNZXRob2QucmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdGlmICghJGJveCkgeyByZXR1cm47IH1cblxuXHRcdCRib3guc3RvcCgpO1xuXHRcdCRbY29sb3Jib3hdLmNsb3NlKCk7XG5cdFx0JGJveC5zdG9wKGZhbHNlLCB0cnVlKS5yZW1vdmUoKTtcblx0XHQkb3ZlcmxheS5yZW1vdmUoKTtcblx0XHRjbG9zaW5nID0gZmFsc2U7XG5cdFx0JGJveCA9IG51bGw7XG5cdFx0JCgnLicgKyBib3hFbGVtZW50KVxuXHRcdFx0LnJlbW92ZURhdGEoY29sb3Jib3gpXG5cdFx0XHQucmVtb3ZlQ2xhc3MoYm94RWxlbWVudCk7XG5cblx0XHQkKGRvY3VtZW50KS51bmJpbmQoJ2NsaWNrLicrcHJlZml4KS51bmJpbmQoJ2tleWRvd24uJytwcmVmaXgpO1xuXHR9O1xuXG5cdC8vIEEgbWV0aG9kIGZvciBmZXRjaGluZyB0aGUgY3VycmVudCBlbGVtZW50IENvbG9yYm94IGlzIHJlZmVyZW5jaW5nLlxuXHQvLyByZXR1cm5zIGEgalF1ZXJ5IG9iamVjdC5cblx0cHVibGljTWV0aG9kLmVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuICQoc2V0dGluZ3MuZWwpO1xuXHR9O1xuXG5cdHB1YmxpY01ldGhvZC5zZXR0aW5ncyA9IGRlZmF1bHRzO1xuXG59KGpRdWVyeSwgZG9jdW1lbnQsIHdpbmRvdykpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jb2xvcmJveC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImpxdWVyeS5jb2xvcmJveC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxyXG5cdENvbG9yYm94IDEuNi4zXHJcblx0bGljZW5zZTogTUlUXHJcblx0aHR0cDovL3d3dy5qYWNrbG1vb3JlLmNvbS9jb2xvcmJveFxyXG4qL1xyXG4oZnVuY3Rpb24gKCQsIGRvY3VtZW50LCB3aW5kb3cpIHtcclxuXHR2YXJcclxuXHQvLyBEZWZhdWx0IHNldHRpbmdzIG9iamVjdC5cclxuXHQvLyBTZWUgaHR0cDovL2phY2tsbW9vcmUuY29tL2NvbG9yYm94IGZvciBkZXRhaWxzLlxyXG5cdGRlZmF1bHRzID0ge1xyXG5cdFx0Ly8gZGF0YSBzb3VyY2VzXHJcblx0XHRodG1sOiBmYWxzZSxcclxuXHRcdHBob3RvOiBmYWxzZSxcclxuXHRcdGlmcmFtZTogZmFsc2UsXHJcblx0XHRpbmxpbmU6IGZhbHNlLFxyXG5cclxuXHRcdC8vIGJlaGF2aW9yIGFuZCBhcHBlYXJhbmNlXHJcblx0XHR0cmFuc2l0aW9uOiBcImVsYXN0aWNcIixcclxuXHRcdHNwZWVkOiAzMDAsXHJcblx0XHRmYWRlT3V0OiAzMDAsXHJcblx0XHR3aWR0aDogZmFsc2UsXHJcblx0XHRpbml0aWFsV2lkdGg6IFwiNjAwXCIsXHJcblx0XHRpbm5lcldpZHRoOiBmYWxzZSxcclxuXHRcdG1heFdpZHRoOiBmYWxzZSxcclxuXHRcdGhlaWdodDogZmFsc2UsXHJcblx0XHRpbml0aWFsSGVpZ2h0OiBcIjQ1MFwiLFxyXG5cdFx0aW5uZXJIZWlnaHQ6IGZhbHNlLFxyXG5cdFx0bWF4SGVpZ2h0OiBmYWxzZSxcclxuXHRcdHNjYWxlUGhvdG9zOiB0cnVlLFxyXG5cdFx0c2Nyb2xsaW5nOiB0cnVlLFxyXG5cdFx0b3BhY2l0eTogMC45LFxyXG5cdFx0cHJlbG9hZGluZzogdHJ1ZSxcclxuXHRcdGNsYXNzTmFtZTogZmFsc2UsXHJcblx0XHRvdmVybGF5Q2xvc2U6IHRydWUsXHJcblx0XHRlc2NLZXk6IHRydWUsXHJcblx0XHRhcnJvd0tleTogdHJ1ZSxcclxuXHRcdHRvcDogZmFsc2UsXHJcblx0XHRib3R0b206IGZhbHNlLFxyXG5cdFx0bGVmdDogZmFsc2UsXHJcblx0XHRyaWdodDogZmFsc2UsXHJcblx0XHRmaXhlZDogZmFsc2UsXHJcblx0XHRkYXRhOiB1bmRlZmluZWQsXHJcblx0XHRjbG9zZUJ1dHRvbjogdHJ1ZSxcclxuXHRcdGZhc3RJZnJhbWU6IHRydWUsXHJcblx0XHRvcGVuOiBmYWxzZSxcclxuXHRcdHJlcG9zaXRpb246IHRydWUsXHJcblx0XHRsb29wOiB0cnVlLFxyXG5cdFx0c2xpZGVzaG93OiBmYWxzZSxcclxuXHRcdHNsaWRlc2hvd0F1dG86IHRydWUsXHJcblx0XHRzbGlkZXNob3dTcGVlZDogMjUwMCxcclxuXHRcdHNsaWRlc2hvd1N0YXJ0OiBcInN0YXJ0IHNsaWRlc2hvd1wiLFxyXG5cdFx0c2xpZGVzaG93U3RvcDogXCJzdG9wIHNsaWRlc2hvd1wiLFxyXG5cdFx0cGhvdG9SZWdleDogL1xcLihnaWZ8cG5nfGpwKGV8Z3xlZyl8Ym1wfGljb3x3ZWJwfGp4cnxzdmcpKCgjfFxcPykuKik/JC9pLFxyXG5cclxuXHRcdC8vIGFsdGVybmF0ZSBpbWFnZSBwYXRocyBmb3IgaGlnaC1yZXMgZGlzcGxheXNcclxuXHRcdHJldGluYUltYWdlOiBmYWxzZSxcclxuXHRcdHJldGluYVVybDogZmFsc2UsXHJcblx0XHRyZXRpbmFTdWZmaXg6ICdAMnguJDEnLFxyXG5cclxuXHRcdC8vIGludGVybmF0aW9uYWxpemF0aW9uXHJcblx0XHRjdXJyZW50OiBcImltYWdlIHtjdXJyZW50fSBvZiB7dG90YWx9XCIsXHJcblx0XHRwcmV2aW91czogXCJwcmV2aW91c1wiLFxyXG5cdFx0bmV4dDogXCJuZXh0XCIsXHJcblx0XHRjbG9zZTogXCJjbG9zZVwiLFxyXG5cdFx0eGhyRXJyb3I6IFwiVGhpcyBjb250ZW50IGZhaWxlZCB0byBsb2FkLlwiLFxyXG5cdFx0aW1nRXJyb3I6IFwiVGhpcyBpbWFnZSBmYWlsZWQgdG8gbG9hZC5cIixcclxuXHJcblx0XHQvLyBhY2Nlc3NiaWxpdHlcclxuXHRcdHJldHVybkZvY3VzOiB0cnVlLFxyXG5cdFx0dHJhcEZvY3VzOiB0cnVlLFxyXG5cclxuXHRcdC8vIGNhbGxiYWNrc1xyXG5cdFx0b25PcGVuOiBmYWxzZSxcclxuXHRcdG9uTG9hZDogZmFsc2UsXHJcblx0XHRvbkNvbXBsZXRlOiBmYWxzZSxcclxuXHRcdG9uQ2xlYW51cDogZmFsc2UsXHJcblx0XHRvbkNsb3NlZDogZmFsc2UsXHJcblxyXG5cdFx0cmVsOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMucmVsO1xyXG5cdFx0fSxcclxuXHRcdGhyZWY6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHQvLyB1c2luZyB0aGlzLmhyZWYgd291bGQgZ2l2ZSB0aGUgYWJzb2x1dGUgdXJsLCB3aGVuIHRoZSBocmVmIG1heSBoYXZlIGJlZW4gaW50ZWRlZCBhcyBhIHNlbGVjdG9yIChlLmcuICcjY29udGFpbmVyJylcclxuXHRcdFx0cmV0dXJuICQodGhpcykuYXR0cignaHJlZicpO1xyXG5cdFx0fSxcclxuXHRcdHRpdGxlOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMudGl0bGU7XHJcblx0XHR9LFxyXG5cdFx0Y3JlYXRlSW1nOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIGltZyA9IG5ldyBJbWFnZSgpO1xyXG5cdFx0XHR2YXIgYXR0cnMgPSAkKHRoaXMpLmRhdGEoJ2Nib3gtaW1nLWF0dHJzJyk7XHJcblxyXG5cdFx0XHRpZiAodHlwZW9mIGF0dHJzID09PSAnb2JqZWN0Jykge1xyXG5cdFx0XHRcdCQuZWFjaChhdHRycywgZnVuY3Rpb24oa2V5LCB2YWwpe1xyXG5cdFx0XHRcdFx0aW1nW2tleV0gPSB2YWw7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBpbWc7XHJcblx0XHR9LFxyXG5cdFx0Y3JlYXRlSWZyYW1lOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xyXG5cdFx0XHR2YXIgYXR0cnMgPSAkKHRoaXMpLmRhdGEoJ2Nib3gtaWZyYW1lLWF0dHJzJyk7XHJcblxyXG5cdFx0XHRpZiAodHlwZW9mIGF0dHJzID09PSAnb2JqZWN0Jykge1xyXG5cdFx0XHRcdCQuZWFjaChhdHRycywgZnVuY3Rpb24oa2V5LCB2YWwpe1xyXG5cdFx0XHRcdFx0aWZyYW1lW2tleV0gPSB2YWw7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICgnZnJhbWVCb3JkZXInIGluIGlmcmFtZSkge1xyXG5cdFx0XHRcdGlmcmFtZS5mcmFtZUJvcmRlciA9IDA7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCdhbGxvd1RyYW5zcGFyZW5jeScgaW4gaWZyYW1lKSB7XHJcblx0XHRcdFx0aWZyYW1lLmFsbG93VHJhbnNwYXJlbmN5ID0gXCJ0cnVlXCI7XHJcblx0XHRcdH1cclxuXHRcdFx0aWZyYW1lLm5hbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOyAvLyBnaXZlIHRoZSBpZnJhbWUgYSB1bmlxdWUgbmFtZSB0byBwcmV2ZW50IGNhY2hpbmdcclxuXHRcdFx0aWZyYW1lLmFsbG93RnVsbHNjcmVlbiA9IHRydWU7XHJcblxyXG5cdFx0XHRyZXR1cm4gaWZyYW1lO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdC8vIEFic3RyYWN0aW5nIHRoZSBIVE1MIGFuZCBldmVudCBpZGVudGlmaWVycyBmb3IgZWFzeSByZWJyYW5kaW5nXHJcblx0Y29sb3Jib3ggPSAnY29sb3Jib3gnLFxyXG5cdHByZWZpeCA9ICdjYm94JyxcclxuXHRib3hFbGVtZW50ID0gcHJlZml4ICsgJ0VsZW1lbnQnLFxyXG5cclxuXHQvLyBFdmVudHNcclxuXHRldmVudF9vcGVuID0gcHJlZml4ICsgJ19vcGVuJyxcclxuXHRldmVudF9sb2FkID0gcHJlZml4ICsgJ19sb2FkJyxcclxuXHRldmVudF9jb21wbGV0ZSA9IHByZWZpeCArICdfY29tcGxldGUnLFxyXG5cdGV2ZW50X2NsZWFudXAgPSBwcmVmaXggKyAnX2NsZWFudXAnLFxyXG5cdGV2ZW50X2Nsb3NlZCA9IHByZWZpeCArICdfY2xvc2VkJyxcclxuXHRldmVudF9wdXJnZSA9IHByZWZpeCArICdfcHVyZ2UnLFxyXG5cclxuXHQvLyBDYWNoZWQgalF1ZXJ5IE9iamVjdCBWYXJpYWJsZXNcclxuXHQkb3ZlcmxheSxcclxuXHQkYm94LFxyXG5cdCR3cmFwLFxyXG5cdCRjb250ZW50LFxyXG5cdCR0b3BCb3JkZXIsXHJcblx0JGxlZnRCb3JkZXIsXHJcblx0JHJpZ2h0Qm9yZGVyLFxyXG5cdCRib3R0b21Cb3JkZXIsXHJcblx0JHJlbGF0ZWQsXHJcblx0JHdpbmRvdyxcclxuXHQkbG9hZGVkLFxyXG5cdCRsb2FkaW5nQmF5LFxyXG5cdCRsb2FkaW5nT3ZlcmxheSxcclxuXHQkdGl0bGUsXHJcblx0JGN1cnJlbnQsXHJcblx0JHNsaWRlc2hvdyxcclxuXHQkbmV4dCxcclxuXHQkcHJldixcclxuXHQkY2xvc2UsXHJcblx0JGdyb3VwQ29udHJvbHMsXHJcblx0JGV2ZW50cyA9ICQoJzxhLz4nKSwgLy8gJCh7fSkgd291bGQgYmUgcHJlZmVyZWQsIGJ1dCB0aGVyZSBpcyBhbiBpc3N1ZSB3aXRoIGpRdWVyeSAxLjQuMlxyXG5cclxuXHQvLyBWYXJpYWJsZXMgZm9yIGNhY2hlZCB2YWx1ZXMgb3IgdXNlIGFjcm9zcyBtdWx0aXBsZSBmdW5jdGlvbnNcclxuXHRzZXR0aW5ncyxcclxuXHRpbnRlcmZhY2VIZWlnaHQsXHJcblx0aW50ZXJmYWNlV2lkdGgsXHJcblx0bG9hZGVkSGVpZ2h0LFxyXG5cdGxvYWRlZFdpZHRoLFxyXG5cdGluZGV4LFxyXG5cdHBob3RvLFxyXG5cdG9wZW4sXHJcblx0YWN0aXZlLFxyXG5cdGNsb3NpbmcsXHJcblx0bG9hZGluZ1RpbWVyLFxyXG5cdHB1YmxpY01ldGhvZCxcclxuXHRkaXYgPSBcImRpdlwiLFxyXG5cdHJlcXVlc3RzID0gMCxcclxuXHRwcmV2aW91c0NTUyA9IHt9LFxyXG5cdGluaXQ7XHJcblxyXG5cdC8vICoqKioqKioqKioqKioqKipcclxuXHQvLyBIRUxQRVIgRlVOQ1RJT05TXHJcblx0Ly8gKioqKioqKioqKioqKioqKlxyXG5cclxuXHQvLyBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgbmV3IGpRdWVyeSBvYmplY3RzXHJcblx0ZnVuY3Rpb24gJHRhZyh0YWcsIGlkLCBjc3MpIHtcclxuXHRcdHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xyXG5cclxuXHRcdGlmIChpZCkge1xyXG5cdFx0XHRlbGVtZW50LmlkID0gcHJlZml4ICsgaWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNzcykge1xyXG5cdFx0XHRlbGVtZW50LnN0eWxlLmNzc1RleHQgPSBjc3M7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuICQoZWxlbWVudCk7XHJcblx0fVxyXG5cclxuXHQvLyBHZXQgdGhlIHdpbmRvdyBoZWlnaHQgdXNpbmcgaW5uZXJIZWlnaHQgd2hlbiBhdmFpbGFibGUgdG8gYXZvaWQgYW4gaXNzdWUgd2l0aCBpT1NcclxuXHQvLyBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC82NzI0XHJcblx0ZnVuY3Rpb24gd2luaGVpZ2h0KCkge1xyXG5cdFx0cmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodCA/IHdpbmRvdy5pbm5lckhlaWdodCA6ICQod2luZG93KS5oZWlnaHQoKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIFNldHRpbmdzKGVsZW1lbnQsIG9wdGlvbnMpIHtcclxuXHRcdGlmIChvcHRpb25zICE9PSBPYmplY3Qob3B0aW9ucykpIHtcclxuXHRcdFx0b3B0aW9ucyA9IHt9O1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuY2FjaGUgPSB7fTtcclxuXHRcdHRoaXMuZWwgPSBlbGVtZW50O1xyXG5cclxuXHRcdHRoaXMudmFsdWUgPSBmdW5jdGlvbihrZXkpIHtcclxuXHRcdFx0dmFyIGRhdGFBdHRyO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMuY2FjaGVba2V5XSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZGF0YUF0dHIgPSAkKHRoaXMuZWwpLmF0dHIoJ2RhdGEtY2JveC0nK2tleSk7XHJcblxyXG5cdFx0XHRcdGlmIChkYXRhQXR0ciAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNhY2hlW2tleV0gPSBkYXRhQXR0cjtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKG9wdGlvbnNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNhY2hlW2tleV0gPSBvcHRpb25zW2tleV07XHJcblx0XHRcdFx0fSBlbHNlIGlmIChkZWZhdWx0c1trZXldICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuY2FjaGVba2V5XSA9IGRlZmF1bHRzW2tleV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcy5jYWNoZVtrZXldO1xyXG5cdFx0fTtcclxuXHJcblx0XHR0aGlzLmdldCA9IGZ1bmN0aW9uKGtleSkge1xyXG5cdFx0XHR2YXIgdmFsdWUgPSB0aGlzLnZhbHVlKGtleSk7XHJcblx0XHRcdHJldHVybiAkLmlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUuY2FsbCh0aGlzLmVsLCB0aGlzKSA6IHZhbHVlO1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8vIERldGVybWluZSB0aGUgbmV4dCBhbmQgcHJldmlvdXMgbWVtYmVycyBpbiBhIGdyb3VwLlxyXG5cdGZ1bmN0aW9uIGdldEluZGV4KGluY3JlbWVudCkge1xyXG5cdFx0dmFyXHJcblx0XHRtYXggPSAkcmVsYXRlZC5sZW5ndGgsXHJcblx0XHRuZXdJbmRleCA9IChpbmRleCArIGluY3JlbWVudCkgJSBtYXg7XHJcblxyXG5cdFx0cmV0dXJuIChuZXdJbmRleCA8IDApID8gbWF4ICsgbmV3SW5kZXggOiBuZXdJbmRleDtcclxuXHR9XHJcblxyXG5cdC8vIENvbnZlcnQgJyUnIGFuZCAncHgnIHZhbHVlcyB0byBpbnRlZ2Vyc1xyXG5cdGZ1bmN0aW9uIHNldFNpemUoc2l6ZSwgZGltZW5zaW9uKSB7XHJcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCgoLyUvLnRlc3Qoc2l6ZSkgPyAoKGRpbWVuc2lvbiA9PT0gJ3gnID8gJHdpbmRvdy53aWR0aCgpIDogd2luaGVpZ2h0KCkpIC8gMTAwKSA6IDEpICogcGFyc2VJbnQoc2l6ZSwgMTApKTtcclxuXHR9XHJcblxyXG5cdC8vIENoZWNrcyBhbiBocmVmIHRvIHNlZSBpZiBpdCBpcyBhIHBob3RvLlxyXG5cdC8vIFRoZXJlIGlzIGEgZm9yY2UgcGhvdG8gb3B0aW9uIChwaG90bzogdHJ1ZSkgZm9yIGhyZWZzIHRoYXQgY2Fubm90IGJlIG1hdGNoZWQgYnkgdGhlIHJlZ2V4LlxyXG5cdGZ1bmN0aW9uIGlzSW1hZ2Uoc2V0dGluZ3MsIHVybCkge1xyXG5cdFx0cmV0dXJuIHNldHRpbmdzLmdldCgncGhvdG8nKSB8fCBzZXR0aW5ncy5nZXQoJ3Bob3RvUmVnZXgnKS50ZXN0KHVybCk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiByZXRpbmFVcmwoc2V0dGluZ3MsIHVybCkge1xyXG5cdFx0cmV0dXJuIHNldHRpbmdzLmdldCgncmV0aW5hVXJsJykgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8gPiAxID8gdXJsLnJlcGxhY2Uoc2V0dGluZ3MuZ2V0KCdwaG90b1JlZ2V4JyksIHNldHRpbmdzLmdldCgncmV0aW5hU3VmZml4JykpIDogdXJsO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gdHJhcEZvY3VzKGUpIHtcclxuXHRcdGlmICgnY29udGFpbnMnIGluICRib3hbMF0gJiYgISRib3hbMF0uY29udGFpbnMoZS50YXJnZXQpICYmIGUudGFyZ2V0ICE9PSAkb3ZlcmxheVswXSkge1xyXG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHQkYm94LmZvY3VzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBzZXRDbGFzcyhzdHIpIHtcclxuXHRcdGlmIChzZXRDbGFzcy5zdHIgIT09IHN0cikge1xyXG5cdFx0XHQkYm94LmFkZCgkb3ZlcmxheSkucmVtb3ZlQ2xhc3Moc2V0Q2xhc3Muc3RyKS5hZGRDbGFzcyhzdHIpO1xyXG5cdFx0XHRzZXRDbGFzcy5zdHIgPSBzdHI7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRSZWxhdGVkKHJlbCkge1xyXG5cdFx0aW5kZXggPSAwO1xyXG5cclxuXHRcdGlmIChyZWwgJiYgcmVsICE9PSBmYWxzZSAmJiByZWwgIT09ICdub2ZvbGxvdycpIHtcclxuXHRcdFx0JHJlbGF0ZWQgPSAkKCcuJyArIGJveEVsZW1lbnQpLmZpbHRlcihmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0dmFyIG9wdGlvbnMgPSAkLmRhdGEodGhpcywgY29sb3Jib3gpO1xyXG5cdFx0XHRcdHZhciBzZXR0aW5ncyA9IG5ldyBTZXR0aW5ncyh0aGlzLCBvcHRpb25zKTtcclxuXHRcdFx0XHRyZXR1cm4gKHNldHRpbmdzLmdldCgncmVsJykgPT09IHJlbCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRpbmRleCA9ICRyZWxhdGVkLmluZGV4KHNldHRpbmdzLmVsKTtcclxuXHJcblx0XHRcdC8vIENoZWNrIGRpcmVjdCBjYWxscyB0byBDb2xvcmJveC5cclxuXHRcdFx0aWYgKGluZGV4ID09PSAtMSkge1xyXG5cdFx0XHRcdCRyZWxhdGVkID0gJHJlbGF0ZWQuYWRkKHNldHRpbmdzLmVsKTtcclxuXHRcdFx0XHRpbmRleCA9ICRyZWxhdGVkLmxlbmd0aCAtIDE7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdCRyZWxhdGVkID0gJChzZXR0aW5ncy5lbCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiB0cmlnZ2VyKGV2ZW50KSB7XHJcblx0XHQvLyBmb3IgZXh0ZXJuYWwgdXNlXHJcblx0XHQkKGRvY3VtZW50KS50cmlnZ2VyKGV2ZW50KTtcclxuXHRcdC8vIGZvciBpbnRlcm5hbCB1c2VcclxuXHRcdCRldmVudHMudHJpZ2dlckhhbmRsZXIoZXZlbnQpO1xyXG5cdH1cclxuXHJcblx0dmFyIHNsaWRlc2hvdyA9IChmdW5jdGlvbigpe1xyXG5cdFx0dmFyIGFjdGl2ZSxcclxuXHRcdFx0Y2xhc3NOYW1lID0gcHJlZml4ICsgXCJTbGlkZXNob3dfXCIsXHJcblx0XHRcdGNsaWNrID0gXCJjbGljay5cIiArIHByZWZpeCxcclxuXHRcdFx0dGltZU91dDtcclxuXHJcblx0XHRmdW5jdGlvbiBjbGVhciAoKSB7XHJcblx0XHRcdGNsZWFyVGltZW91dCh0aW1lT3V0KTtcclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiBzZXQoKSB7XHJcblx0XHRcdGlmIChzZXR0aW5ncy5nZXQoJ2xvb3AnKSB8fCAkcmVsYXRlZFtpbmRleCArIDFdKSB7XHJcblx0XHRcdFx0Y2xlYXIoKTtcclxuXHRcdFx0XHR0aW1lT3V0ID0gc2V0VGltZW91dChwdWJsaWNNZXRob2QubmV4dCwgc2V0dGluZ3MuZ2V0KCdzbGlkZXNob3dTcGVlZCcpKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGZ1bmN0aW9uIHN0YXJ0KCkge1xyXG5cdFx0XHQkc2xpZGVzaG93XHJcblx0XHRcdFx0Lmh0bWwoc2V0dGluZ3MuZ2V0KCdzbGlkZXNob3dTdG9wJykpXHJcblx0XHRcdFx0LnVuYmluZChjbGljaylcclxuXHRcdFx0XHQub25lKGNsaWNrLCBzdG9wKTtcclxuXHJcblx0XHRcdCRldmVudHNcclxuXHRcdFx0XHQuYmluZChldmVudF9jb21wbGV0ZSwgc2V0KVxyXG5cdFx0XHRcdC5iaW5kKGV2ZW50X2xvYWQsIGNsZWFyKTtcclxuXHJcblx0XHRcdCRib3gucmVtb3ZlQ2xhc3MoY2xhc3NOYW1lICsgXCJvZmZcIikuYWRkQ2xhc3MoY2xhc3NOYW1lICsgXCJvblwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiBzdG9wKCkge1xyXG5cdFx0XHRjbGVhcigpO1xyXG5cclxuXHRcdFx0JGV2ZW50c1xyXG5cdFx0XHRcdC51bmJpbmQoZXZlbnRfY29tcGxldGUsIHNldClcclxuXHRcdFx0XHQudW5iaW5kKGV2ZW50X2xvYWQsIGNsZWFyKTtcclxuXHJcblx0XHRcdCRzbGlkZXNob3dcclxuXHRcdFx0XHQuaHRtbChzZXR0aW5ncy5nZXQoJ3NsaWRlc2hvd1N0YXJ0JykpXHJcblx0XHRcdFx0LnVuYmluZChjbGljaylcclxuXHRcdFx0XHQub25lKGNsaWNrLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRwdWJsaWNNZXRob2QubmV4dCgpO1xyXG5cdFx0XHRcdFx0c3RhcnQoKTtcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdCRib3gucmVtb3ZlQ2xhc3MoY2xhc3NOYW1lICsgXCJvblwiKS5hZGRDbGFzcyhjbGFzc05hbWUgKyBcIm9mZlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiByZXNldCgpIHtcclxuXHRcdFx0YWN0aXZlID0gZmFsc2U7XHJcblx0XHRcdCRzbGlkZXNob3cuaGlkZSgpO1xyXG5cdFx0XHRjbGVhcigpO1xyXG5cdFx0XHQkZXZlbnRzXHJcblx0XHRcdFx0LnVuYmluZChldmVudF9jb21wbGV0ZSwgc2V0KVxyXG5cdFx0XHRcdC51bmJpbmQoZXZlbnRfbG9hZCwgY2xlYXIpO1xyXG5cdFx0XHQkYm94LnJlbW92ZUNsYXNzKGNsYXNzTmFtZSArIFwib2ZmIFwiICsgY2xhc3NOYW1lICsgXCJvblwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZnVuY3Rpb24oKXtcclxuXHRcdFx0aWYgKGFjdGl2ZSkge1xyXG5cdFx0XHRcdGlmICghc2V0dGluZ3MuZ2V0KCdzbGlkZXNob3cnKSkge1xyXG5cdFx0XHRcdFx0JGV2ZW50cy51bmJpbmQoZXZlbnRfY2xlYW51cCwgcmVzZXQpO1xyXG5cdFx0XHRcdFx0cmVzZXQoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKHNldHRpbmdzLmdldCgnc2xpZGVzaG93JykgJiYgJHJlbGF0ZWRbMV0pIHtcclxuXHRcdFx0XHRcdGFjdGl2ZSA9IHRydWU7XHJcblx0XHRcdFx0XHQkZXZlbnRzLm9uZShldmVudF9jbGVhbnVwLCByZXNldCk7XHJcblx0XHRcdFx0XHRpZiAoc2V0dGluZ3MuZ2V0KCdzbGlkZXNob3dBdXRvJykpIHtcclxuXHRcdFx0XHRcdFx0c3RhcnQoKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHN0b3AoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdCRzbGlkZXNob3cuc2hvdygpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHJcblx0fSgpKTtcclxuXHJcblxyXG5cdGZ1bmN0aW9uIGxhdW5jaChlbGVtZW50KSB7XHJcblx0XHR2YXIgb3B0aW9ucztcclxuXHJcblx0XHRpZiAoIWNsb3NpbmcpIHtcclxuXHJcblx0XHRcdG9wdGlvbnMgPSAkKGVsZW1lbnQpLmRhdGEoY29sb3Jib3gpO1xyXG5cclxuXHRcdFx0c2V0dGluZ3MgPSBuZXcgU2V0dGluZ3MoZWxlbWVudCwgb3B0aW9ucyk7XHJcblxyXG5cdFx0XHRnZXRSZWxhdGVkKHNldHRpbmdzLmdldCgncmVsJykpO1xyXG5cclxuXHRcdFx0aWYgKCFvcGVuKSB7XHJcblx0XHRcdFx0b3BlbiA9IGFjdGl2ZSA9IHRydWU7IC8vIFByZXZlbnRzIHRoZSBwYWdlLWNoYW5nZSBhY3Rpb24gZnJvbSBxdWV1aW5nIHVwIGlmIHRoZSB2aXNpdG9yIGhvbGRzIGRvd24gdGhlIGxlZnQgb3IgcmlnaHQga2V5cy5cclxuXHJcblx0XHRcdFx0c2V0Q2xhc3Moc2V0dGluZ3MuZ2V0KCdjbGFzc05hbWUnKSk7XHJcblxyXG5cdFx0XHRcdC8vIFNob3cgY29sb3Jib3ggc28gdGhlIHNpemVzIGNhbiBiZSBjYWxjdWxhdGVkIGluIG9sZGVyIHZlcnNpb25zIG9mIGpRdWVyeVxyXG5cdFx0XHRcdCRib3guY3NzKHt2aXNpYmlsaXR5OidoaWRkZW4nLCBkaXNwbGF5OidibG9jaycsIG9wYWNpdHk6Jyd9KTtcclxuXHJcblx0XHRcdFx0JGxvYWRlZCA9ICR0YWcoZGl2LCAnTG9hZGVkQ29udGVudCcsICd3aWR0aDowOyBoZWlnaHQ6MDsgb3ZlcmZsb3c6aGlkZGVuOyB2aXNpYmlsaXR5OmhpZGRlbicpO1xyXG5cdFx0XHRcdCRjb250ZW50LmNzcyh7d2lkdGg6JycsIGhlaWdodDonJ30pLmFwcGVuZCgkbG9hZGVkKTtcclxuXHJcblx0XHRcdFx0Ly8gQ2FjaGUgdmFsdWVzIG5lZWRlZCBmb3Igc2l6ZSBjYWxjdWxhdGlvbnNcclxuXHRcdFx0XHRpbnRlcmZhY2VIZWlnaHQgPSAkdG9wQm9yZGVyLmhlaWdodCgpICsgJGJvdHRvbUJvcmRlci5oZWlnaHQoKSArICRjb250ZW50Lm91dGVySGVpZ2h0KHRydWUpIC0gJGNvbnRlbnQuaGVpZ2h0KCk7XHJcblx0XHRcdFx0aW50ZXJmYWNlV2lkdGggPSAkbGVmdEJvcmRlci53aWR0aCgpICsgJHJpZ2h0Qm9yZGVyLndpZHRoKCkgKyAkY29udGVudC5vdXRlcldpZHRoKHRydWUpIC0gJGNvbnRlbnQud2lkdGgoKTtcclxuXHRcdFx0XHRsb2FkZWRIZWlnaHQgPSAkbG9hZGVkLm91dGVySGVpZ2h0KHRydWUpO1xyXG5cdFx0XHRcdGxvYWRlZFdpZHRoID0gJGxvYWRlZC5vdXRlcldpZHRoKHRydWUpO1xyXG5cclxuXHRcdFx0XHQvLyBPcGVucyBpbml0YWwgZW1wdHkgQ29sb3Jib3ggcHJpb3IgdG8gY29udGVudCBiZWluZyBsb2FkZWQuXHJcblx0XHRcdFx0dmFyIGluaXRpYWxXaWR0aCA9IHNldFNpemUoc2V0dGluZ3MuZ2V0KCdpbml0aWFsV2lkdGgnKSwgJ3gnKTtcclxuXHRcdFx0XHR2YXIgaW5pdGlhbEhlaWdodCA9IHNldFNpemUoc2V0dGluZ3MuZ2V0KCdpbml0aWFsSGVpZ2h0JyksICd5Jyk7XHJcblx0XHRcdFx0dmFyIG1heFdpZHRoID0gc2V0dGluZ3MuZ2V0KCdtYXhXaWR0aCcpO1xyXG5cdFx0XHRcdHZhciBtYXhIZWlnaHQgPSBzZXR0aW5ncy5nZXQoJ21heEhlaWdodCcpO1xyXG5cclxuXHRcdFx0XHRzZXR0aW5ncy53ID0gTWF0aC5tYXgoKG1heFdpZHRoICE9PSBmYWxzZSA/IE1hdGgubWluKGluaXRpYWxXaWR0aCwgc2V0U2l6ZShtYXhXaWR0aCwgJ3gnKSkgOiBpbml0aWFsV2lkdGgpIC0gbG9hZGVkV2lkdGggLSBpbnRlcmZhY2VXaWR0aCwgMCk7XHJcblx0XHRcdFx0c2V0dGluZ3MuaCA9IE1hdGgubWF4KChtYXhIZWlnaHQgIT09IGZhbHNlID8gTWF0aC5taW4oaW5pdGlhbEhlaWdodCwgc2V0U2l6ZShtYXhIZWlnaHQsICd5JykpIDogaW5pdGlhbEhlaWdodCkgLSBsb2FkZWRIZWlnaHQgLSBpbnRlcmZhY2VIZWlnaHQsIDApO1xyXG5cclxuXHRcdFx0XHQkbG9hZGVkLmNzcyh7d2lkdGg6JycsIGhlaWdodDpzZXR0aW5ncy5ofSk7XHJcblx0XHRcdFx0cHVibGljTWV0aG9kLnBvc2l0aW9uKCk7XHJcblxyXG5cdFx0XHRcdHRyaWdnZXIoZXZlbnRfb3Blbik7XHJcblx0XHRcdFx0c2V0dGluZ3MuZ2V0KCdvbk9wZW4nKTtcclxuXHJcblx0XHRcdFx0JGdyb3VwQ29udHJvbHMuYWRkKCR0aXRsZSkuaGlkZSgpO1xyXG5cclxuXHRcdFx0XHQkYm94LmZvY3VzKCk7XHJcblxyXG5cdFx0XHRcdGlmIChzZXR0aW5ncy5nZXQoJ3RyYXBGb2N1cycpKSB7XHJcblx0XHRcdFx0XHQvLyBDb25maW5lIGZvY3VzIHRvIHRoZSBtb2RhbFxyXG5cdFx0XHRcdFx0Ly8gVXNlcyBldmVudCBjYXB0dXJpbmcgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGluIElFOC1cclxuXHRcdFx0XHRcdGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRyYXBGb2N1cywgdHJ1ZSk7XHJcblxyXG5cdFx0XHRcdFx0XHQkZXZlbnRzLm9uZShldmVudF9jbG9zZWQsIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRyYXBGb2N1cywgdHJ1ZSk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gUmV0dXJuIGZvY3VzIG9uIGNsb3NpbmdcclxuXHRcdFx0XHRpZiAoc2V0dGluZ3MuZ2V0KCdyZXR1cm5Gb2N1cycpKSB7XHJcblx0XHRcdFx0XHQkZXZlbnRzLm9uZShldmVudF9jbG9zZWQsIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdFx0JChzZXR0aW5ncy5lbCkuZm9jdXMoKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIG9wYWNpdHkgPSBwYXJzZUZsb2F0KHNldHRpbmdzLmdldCgnb3BhY2l0eScpKTtcclxuXHRcdFx0JG92ZXJsYXkuY3NzKHtcclxuXHRcdFx0XHRvcGFjaXR5OiBvcGFjaXR5ID09PSBvcGFjaXR5ID8gb3BhY2l0eSA6ICcnLFxyXG5cdFx0XHRcdGN1cnNvcjogc2V0dGluZ3MuZ2V0KCdvdmVybGF5Q2xvc2UnKSA/ICdwb2ludGVyJyA6ICcnLFxyXG5cdFx0XHRcdHZpc2liaWxpdHk6ICd2aXNpYmxlJ1xyXG5cdFx0XHR9KS5zaG93KCk7XHJcblxyXG5cdFx0XHRpZiAoc2V0dGluZ3MuZ2V0KCdjbG9zZUJ1dHRvbicpKSB7XHJcblx0XHRcdFx0JGNsb3NlLmh0bWwoc2V0dGluZ3MuZ2V0KCdjbG9zZScpKS5hcHBlbmRUbygkY29udGVudCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0JGNsb3NlLmFwcGVuZFRvKCc8ZGl2Lz4nKTsgLy8gcmVwbGFjZSB3aXRoIC5kZXRhY2goKSB3aGVuIGRyb3BwaW5nIGpRdWVyeSA8IDEuNFxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRsb2FkKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBDb2xvcmJveCdzIG1hcmt1cCBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgRE9NIHByaW9yIHRvIGJlaW5nIGNhbGxlZFxyXG5cdC8vIHNvIHRoYXQgdGhlIGJyb3dzZXIgd2lsbCBnbyBhaGVhZCBhbmQgbG9hZCB0aGUgQ1NTIGJhY2tncm91bmQgaW1hZ2VzLlxyXG5cdGZ1bmN0aW9uIGFwcGVuZEhUTUwoKSB7XHJcblx0XHRpZiAoISRib3gpIHtcclxuXHRcdFx0aW5pdCA9IGZhbHNlO1xyXG5cdFx0XHQkd2luZG93ID0gJCh3aW5kb3cpO1xyXG5cdFx0XHQkYm94ID0gJHRhZyhkaXYpLmF0dHIoe1xyXG5cdFx0XHRcdGlkOiBjb2xvcmJveCxcclxuXHRcdFx0XHQnY2xhc3MnOiAkLnN1cHBvcnQub3BhY2l0eSA9PT0gZmFsc2UgPyBwcmVmaXggKyAnSUUnIDogJycsIC8vIGNsYXNzIGZvciBvcHRpb25hbCBJRTggJiBsb3dlciB0YXJnZXRlZCBDU1MuXHJcblx0XHRcdFx0cm9sZTogJ2RpYWxvZycsXHJcblx0XHRcdFx0dGFiaW5kZXg6ICctMSdcclxuXHRcdFx0fSkuaGlkZSgpO1xyXG5cdFx0XHQkb3ZlcmxheSA9ICR0YWcoZGl2LCBcIk92ZXJsYXlcIikuaGlkZSgpO1xyXG5cdFx0XHQkbG9hZGluZ092ZXJsYXkgPSAkKFskdGFnKGRpdiwgXCJMb2FkaW5nT3ZlcmxheVwiKVswXSwkdGFnKGRpdiwgXCJMb2FkaW5nR3JhcGhpY1wiKVswXV0pO1xyXG5cdFx0XHQkd3JhcCA9ICR0YWcoZGl2LCBcIldyYXBwZXJcIik7XHJcblx0XHRcdCRjb250ZW50ID0gJHRhZyhkaXYsIFwiQ29udGVudFwiKS5hcHBlbmQoXHJcblx0XHRcdFx0JHRpdGxlID0gJHRhZyhkaXYsIFwiVGl0bGVcIiksXHJcblx0XHRcdFx0JGN1cnJlbnQgPSAkdGFnKGRpdiwgXCJDdXJyZW50XCIpLFxyXG5cdFx0XHRcdCRwcmV2ID0gJCgnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIvPicpLmF0dHIoe2lkOnByZWZpeCsnUHJldmlvdXMnfSksXHJcblx0XHRcdFx0JG5leHQgPSAkKCc8YnV0dG9uIHR5cGU9XCJidXR0b25cIi8+JykuYXR0cih7aWQ6cHJlZml4KydOZXh0J30pLFxyXG5cdFx0XHRcdCRzbGlkZXNob3cgPSAkdGFnKCdidXR0b24nLCBcIlNsaWRlc2hvd1wiKSxcclxuXHRcdFx0XHQkbG9hZGluZ092ZXJsYXlcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdCRjbG9zZSA9ICQoJzxidXR0b24gdHlwZT1cImJ1dHRvblwiLz4nKS5hdHRyKHtpZDpwcmVmaXgrJ0Nsb3NlJ30pO1xyXG5cclxuXHRcdFx0JHdyYXAuYXBwZW5kKCAvLyBUaGUgM3gzIEdyaWQgdGhhdCBtYWtlcyB1cCBDb2xvcmJveFxyXG5cdFx0XHRcdCR0YWcoZGl2KS5hcHBlbmQoXHJcblx0XHRcdFx0XHQkdGFnKGRpdiwgXCJUb3BMZWZ0XCIpLFxyXG5cdFx0XHRcdFx0JHRvcEJvcmRlciA9ICR0YWcoZGl2LCBcIlRvcENlbnRlclwiKSxcclxuXHRcdFx0XHRcdCR0YWcoZGl2LCBcIlRvcFJpZ2h0XCIpXHJcblx0XHRcdFx0KSxcclxuXHRcdFx0XHQkdGFnKGRpdiwgZmFsc2UsICdjbGVhcjpsZWZ0JykuYXBwZW5kKFxyXG5cdFx0XHRcdFx0JGxlZnRCb3JkZXIgPSAkdGFnKGRpdiwgXCJNaWRkbGVMZWZ0XCIpLFxyXG5cdFx0XHRcdFx0JGNvbnRlbnQsXHJcblx0XHRcdFx0XHQkcmlnaHRCb3JkZXIgPSAkdGFnKGRpdiwgXCJNaWRkbGVSaWdodFwiKVxyXG5cdFx0XHRcdCksXHJcblx0XHRcdFx0JHRhZyhkaXYsIGZhbHNlLCAnY2xlYXI6bGVmdCcpLmFwcGVuZChcclxuXHRcdFx0XHRcdCR0YWcoZGl2LCBcIkJvdHRvbUxlZnRcIiksXHJcblx0XHRcdFx0XHQkYm90dG9tQm9yZGVyID0gJHRhZyhkaXYsIFwiQm90dG9tQ2VudGVyXCIpLFxyXG5cdFx0XHRcdFx0JHRhZyhkaXYsIFwiQm90dG9tUmlnaHRcIilcclxuXHRcdFx0XHQpXHJcblx0XHRcdCkuZmluZCgnZGl2IGRpdicpLmNzcyh7J2Zsb2F0JzogJ2xlZnQnfSk7XHJcblxyXG5cdFx0XHQkbG9hZGluZ0JheSA9ICR0YWcoZGl2LCBmYWxzZSwgJ3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDo5OTk5cHg7IHZpc2liaWxpdHk6aGlkZGVuOyBkaXNwbGF5Om5vbmU7IG1heC13aWR0aDpub25lOycpO1xyXG5cclxuXHRcdFx0JGdyb3VwQ29udHJvbHMgPSAkbmV4dC5hZGQoJHByZXYpLmFkZCgkY3VycmVudCkuYWRkKCRzbGlkZXNob3cpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGRvY3VtZW50LmJvZHkgJiYgISRib3gucGFyZW50KCkubGVuZ3RoKSB7XHJcblx0XHRcdCQoZG9jdW1lbnQuYm9keSkuYXBwZW5kKCRvdmVybGF5LCAkYm94LmFwcGVuZCgkd3JhcCwgJGxvYWRpbmdCYXkpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIEFkZCBDb2xvcmJveCdzIGV2ZW50IGJpbmRpbmdzXHJcblx0ZnVuY3Rpb24gYWRkQmluZGluZ3MoKSB7XHJcblx0XHRmdW5jdGlvbiBjbGlja0hhbmRsZXIoZSkge1xyXG5cdFx0XHQvLyBpZ25vcmUgbm9uLWxlZnQtbW91c2UtY2xpY2tzIGFuZCBjbGlja3MgbW9kaWZpZWQgd2l0aCBjdHJsIC8gY29tbWFuZCwgc2hpZnQsIG9yIGFsdC5cclxuXHRcdFx0Ly8gU2VlOiBodHRwOi8vamFja2xtb29yZS5jb20vbm90ZXMvY2xpY2stZXZlbnRzL1xyXG5cdFx0XHRpZiAoIShlLndoaWNoID4gMSB8fCBlLnNoaWZ0S2V5IHx8IGUuYWx0S2V5IHx8IGUubWV0YUtleSB8fCBlLmN0cmxLZXkpKSB7XHJcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdGxhdW5jaCh0aGlzKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICgkYm94KSB7XHJcblx0XHRcdGlmICghaW5pdCkge1xyXG5cdFx0XHRcdGluaXQgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHQvLyBBbm9ueW1vdXMgZnVuY3Rpb25zIGhlcmUga2VlcCB0aGUgcHVibGljIG1ldGhvZCBmcm9tIGJlaW5nIGNhY2hlZCwgdGhlcmVieSBhbGxvd2luZyB0aGVtIHRvIGJlIHJlZGVmaW5lZCBvbiB0aGUgZmx5LlxyXG5cdFx0XHRcdCRuZXh0LmNsaWNrKGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdHB1YmxpY01ldGhvZC5uZXh0KCk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0JHByZXYuY2xpY2soZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0cHVibGljTWV0aG9kLnByZXYoKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHQkY2xvc2UuY2xpY2soZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0cHVibGljTWV0aG9kLmNsb3NlKCk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0JG92ZXJsYXkuY2xpY2soZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0aWYgKHNldHRpbmdzLmdldCgnb3ZlcmxheUNsb3NlJykpIHtcclxuXHRcdFx0XHRcdFx0cHVibGljTWV0aG9kLmNsb3NlKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8vIEtleSBCaW5kaW5nc1xyXG5cdFx0XHRcdCQoZG9jdW1lbnQpLmJpbmQoJ2tleWRvd24uJyArIHByZWZpeCwgZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHRcdHZhciBrZXkgPSBlLmtleUNvZGU7XHJcblx0XHRcdFx0XHRpZiAob3BlbiAmJiBzZXR0aW5ncy5nZXQoJ2VzY0tleScpICYmIGtleSA9PT0gMjcpIHtcclxuXHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0XHRwdWJsaWNNZXRob2QuY2xvc2UoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChvcGVuICYmIHNldHRpbmdzLmdldCgnYXJyb3dLZXknKSAmJiAkcmVsYXRlZFsxXSAmJiAhZS5hbHRLZXkpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGtleSA9PT0gMzcpIHtcclxuXHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHRcdFx0JHByZXYuY2xpY2soKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChrZXkgPT09IDM5KSB7XHJcblx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0XHRcdCRuZXh0LmNsaWNrKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0aWYgKCQuaXNGdW5jdGlvbigkLmZuLm9uKSkge1xyXG5cdFx0XHRcdFx0Ly8gRm9yIGpRdWVyeSAxLjcrXHJcblx0XHRcdFx0XHQkKGRvY3VtZW50KS5vbignY2xpY2suJytwcmVmaXgsICcuJytib3hFbGVtZW50LCBjbGlja0hhbmRsZXIpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQvLyBGb3IgalF1ZXJ5IDEuMy54IC0+IDEuNi54XHJcblx0XHRcdFx0XHQvLyBUaGlzIGNvZGUgaXMgbmV2ZXIgcmVhY2hlZCBpbiBqUXVlcnkgMS45LCBzbyBkbyBub3QgY29udGFjdCBtZSBhYm91dCAnbGl2ZScgYmVpbmcgcmVtb3ZlZC5cclxuXHRcdFx0XHRcdC8vIFRoaXMgaXMgbm90IGhlcmUgZm9yIGpRdWVyeSAxLjksIGl0J3MgaGVyZSBmb3IgbGVnYWN5IHVzZXJzLlxyXG5cdFx0XHRcdFx0JCgnLicrYm94RWxlbWVudCkubGl2ZSgnY2xpY2suJytwcmVmaXgsIGNsaWNrSGFuZGxlcik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgQ29sb3Jib3ggYWxyZWFkeSBleGlzdHMuXHJcblx0aWYgKCRbY29sb3Jib3hdKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHQvLyBBcHBlbmQgdGhlIEhUTUwgd2hlbiB0aGUgRE9NIGxvYWRzXHJcblx0JChhcHBlbmRIVE1MKTtcclxuXHJcblxyXG5cdC8vICoqKioqKioqKioqKioqKipcclxuXHQvLyBQVUJMSUMgRlVOQ1RJT05TXHJcblx0Ly8gVXNhZ2UgZm9ybWF0OiAkLmNvbG9yYm94LmNsb3NlKCk7XHJcblx0Ly8gVXNhZ2UgZnJvbSB3aXRoaW4gYW4gaWZyYW1lOiBwYXJlbnQualF1ZXJ5LmNvbG9yYm94LmNsb3NlKCk7XHJcblx0Ly8gKioqKioqKioqKioqKioqKlxyXG5cclxuXHRwdWJsaWNNZXRob2QgPSAkLmZuW2NvbG9yYm94XSA9ICRbY29sb3Jib3hdID0gZnVuY3Rpb24gKG9wdGlvbnMsIGNhbGxiYWNrKSB7XHJcblx0XHR2YXIgc2V0dGluZ3M7XHJcblx0XHR2YXIgJG9iaiA9IHRoaXM7XHJcblxyXG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG5cdFx0aWYgKCQuaXNGdW5jdGlvbigkb2JqKSkgeyAvLyBhc3N1bWUgYSBjYWxsIHRvICQuY29sb3Jib3hcclxuXHRcdFx0JG9iaiA9ICQoJzxhLz4nKTtcclxuXHRcdFx0b3B0aW9ucy5vcGVuID0gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoISRvYmpbMF0pIHsgLy8gY29sb3Jib3ggYmVpbmcgYXBwbGllZCB0byBlbXB0eSBjb2xsZWN0aW9uXHJcblx0XHRcdHJldHVybiAkb2JqO1xyXG5cdFx0fVxyXG5cclxuXHRcdGFwcGVuZEhUTUwoKTtcclxuXHJcblx0XHRpZiAoYWRkQmluZGluZ3MoKSkge1xyXG5cclxuXHRcdFx0aWYgKGNhbGxiYWNrKSB7XHJcblx0XHRcdFx0b3B0aW9ucy5vbkNvbXBsZXRlID0gY2FsbGJhY2s7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdCRvYmouZWFjaChmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0dmFyIG9sZCA9ICQuZGF0YSh0aGlzLCBjb2xvcmJveCkgfHwge307XHJcblx0XHRcdFx0JC5kYXRhKHRoaXMsIGNvbG9yYm94LCAkLmV4dGVuZChvbGQsIG9wdGlvbnMpKTtcclxuXHRcdFx0fSkuYWRkQ2xhc3MoYm94RWxlbWVudCk7XHJcblxyXG5cdFx0XHRzZXR0aW5ncyA9IG5ldyBTZXR0aW5ncygkb2JqWzBdLCBvcHRpb25zKTtcclxuXHJcblx0XHRcdGlmIChzZXR0aW5ncy5nZXQoJ29wZW4nKSkge1xyXG5cdFx0XHRcdGxhdW5jaCgkb2JqWzBdKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAkb2JqO1xyXG5cdH07XHJcblxyXG5cdHB1YmxpY01ldGhvZC5wb3NpdGlvbiA9IGZ1bmN0aW9uIChzcGVlZCwgbG9hZGVkQ2FsbGJhY2spIHtcclxuXHRcdHZhclxyXG5cdFx0Y3NzLFxyXG5cdFx0dG9wID0gMCxcclxuXHRcdGxlZnQgPSAwLFxyXG5cdFx0b2Zmc2V0ID0gJGJveC5vZmZzZXQoKSxcclxuXHRcdHNjcm9sbFRvcCxcclxuXHRcdHNjcm9sbExlZnQ7XHJcblxyXG5cdFx0JHdpbmRvdy51bmJpbmQoJ3Jlc2l6ZS4nICsgcHJlZml4KTtcclxuXHJcblx0XHQvLyByZW1vdmUgdGhlIG1vZGFsIHNvIHRoYXQgaXQgZG9lc24ndCBpbmZsdWVuY2UgdGhlIGRvY3VtZW50IHdpZHRoL2hlaWdodFxyXG5cdFx0JGJveC5jc3Moe3RvcDogLTllNCwgbGVmdDogLTllNH0pO1xyXG5cclxuXHRcdHNjcm9sbFRvcCA9ICR3aW5kb3cuc2Nyb2xsVG9wKCk7XHJcblx0XHRzY3JvbGxMZWZ0ID0gJHdpbmRvdy5zY3JvbGxMZWZ0KCk7XHJcblxyXG5cdFx0aWYgKHNldHRpbmdzLmdldCgnZml4ZWQnKSkge1xyXG5cdFx0XHRvZmZzZXQudG9wIC09IHNjcm9sbFRvcDtcclxuXHRcdFx0b2Zmc2V0LmxlZnQgLT0gc2Nyb2xsTGVmdDtcclxuXHRcdFx0JGJveC5jc3Moe3Bvc2l0aW9uOiAnZml4ZWQnfSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0b3AgPSBzY3JvbGxUb3A7XHJcblx0XHRcdGxlZnQgPSBzY3JvbGxMZWZ0O1xyXG5cdFx0XHQkYm94LmNzcyh7cG9zaXRpb246ICdhYnNvbHV0ZSd9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBrZWVwcyB0aGUgdG9wIGFuZCBsZWZ0IHBvc2l0aW9ucyB3aXRoaW4gdGhlIGJyb3dzZXIncyB2aWV3cG9ydC5cclxuXHRcdGlmIChzZXR0aW5ncy5nZXQoJ3JpZ2h0JykgIT09IGZhbHNlKSB7XHJcblx0XHRcdGxlZnQgKz0gTWF0aC5tYXgoJHdpbmRvdy53aWR0aCgpIC0gc2V0dGluZ3MudyAtIGxvYWRlZFdpZHRoIC0gaW50ZXJmYWNlV2lkdGggLSBzZXRTaXplKHNldHRpbmdzLmdldCgncmlnaHQnKSwgJ3gnKSwgMCk7XHJcblx0XHR9IGVsc2UgaWYgKHNldHRpbmdzLmdldCgnbGVmdCcpICE9PSBmYWxzZSkge1xyXG5cdFx0XHRsZWZ0ICs9IHNldFNpemUoc2V0dGluZ3MuZ2V0KCdsZWZ0JyksICd4Jyk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsZWZ0ICs9IE1hdGgucm91bmQoTWF0aC5tYXgoJHdpbmRvdy53aWR0aCgpIC0gc2V0dGluZ3MudyAtIGxvYWRlZFdpZHRoIC0gaW50ZXJmYWNlV2lkdGgsIDApIC8gMik7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHNldHRpbmdzLmdldCgnYm90dG9tJykgIT09IGZhbHNlKSB7XHJcblx0XHRcdHRvcCArPSBNYXRoLm1heCh3aW5oZWlnaHQoKSAtIHNldHRpbmdzLmggLSBsb2FkZWRIZWlnaHQgLSBpbnRlcmZhY2VIZWlnaHQgLSBzZXRTaXplKHNldHRpbmdzLmdldCgnYm90dG9tJyksICd5JyksIDApO1xyXG5cdFx0fSBlbHNlIGlmIChzZXR0aW5ncy5nZXQoJ3RvcCcpICE9PSBmYWxzZSkge1xyXG5cdFx0XHR0b3AgKz0gc2V0U2l6ZShzZXR0aW5ncy5nZXQoJ3RvcCcpLCAneScpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dG9wICs9IE1hdGgucm91bmQoTWF0aC5tYXgod2luaGVpZ2h0KCkgLSBzZXR0aW5ncy5oIC0gbG9hZGVkSGVpZ2h0IC0gaW50ZXJmYWNlSGVpZ2h0LCAwKSAvIDIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdCRib3guY3NzKHt0b3A6IG9mZnNldC50b3AsIGxlZnQ6IG9mZnNldC5sZWZ0LCB2aXNpYmlsaXR5Oid2aXNpYmxlJ30pO1xyXG5cclxuXHRcdC8vIHRoaXMgZ2l2ZXMgdGhlIHdyYXBwZXIgcGxlbnR5IG9mIGJyZWF0aGluZyByb29tIHNvIGl0J3MgZmxvYXRlZCBjb250ZW50cyBjYW4gbW92ZSBhcm91bmQgc21vb3RobHksXHJcblx0XHQvLyBidXQgaXQgaGFzIHRvIGJlIHNocmFuayBkb3duIGFyb3VuZCB0aGUgc2l6ZSBvZiBkaXYjY29sb3Jib3ggd2hlbiBpdCdzIGRvbmUuICBJZiBub3QsXHJcblx0XHQvLyBpdCBjYW4gaW52b2tlIGFuIG9ic2N1cmUgSUUgYnVnIHdoZW4gdXNpbmcgaWZyYW1lcy5cclxuXHRcdCR3cmFwWzBdLnN0eWxlLndpZHRoID0gJHdyYXBbMF0uc3R5bGUuaGVpZ2h0ID0gXCI5OTk5cHhcIjtcclxuXHJcblx0XHRmdW5jdGlvbiBtb2RhbERpbWVuc2lvbnMoKSB7XHJcblx0XHRcdCR0b3BCb3JkZXJbMF0uc3R5bGUud2lkdGggPSAkYm90dG9tQm9yZGVyWzBdLnN0eWxlLndpZHRoID0gJGNvbnRlbnRbMF0uc3R5bGUud2lkdGggPSAocGFyc2VJbnQoJGJveFswXS5zdHlsZS53aWR0aCwxMCkgLSBpbnRlcmZhY2VXaWR0aCkrJ3B4JztcclxuXHRcdFx0JGNvbnRlbnRbMF0uc3R5bGUuaGVpZ2h0ID0gJGxlZnRCb3JkZXJbMF0uc3R5bGUuaGVpZ2h0ID0gJHJpZ2h0Qm9yZGVyWzBdLnN0eWxlLmhlaWdodCA9IChwYXJzZUludCgkYm94WzBdLnN0eWxlLmhlaWdodCwxMCkgLSBpbnRlcmZhY2VIZWlnaHQpKydweCc7XHJcblx0XHR9XHJcblxyXG5cdFx0Y3NzID0ge3dpZHRoOiBzZXR0aW5ncy53ICsgbG9hZGVkV2lkdGggKyBpbnRlcmZhY2VXaWR0aCwgaGVpZ2h0OiBzZXR0aW5ncy5oICsgbG9hZGVkSGVpZ2h0ICsgaW50ZXJmYWNlSGVpZ2h0LCB0b3A6IHRvcCwgbGVmdDogbGVmdH07XHJcblxyXG5cdFx0Ly8gc2V0dGluZyB0aGUgc3BlZWQgdG8gMCBpZiB0aGUgY29udGVudCBoYXNuJ3QgY2hhbmdlZCBzaXplIG9yIHBvc2l0aW9uXHJcblx0XHRpZiAoc3BlZWQpIHtcclxuXHRcdFx0dmFyIHRlbXBTcGVlZCA9IDA7XHJcblx0XHRcdCQuZWFjaChjc3MsIGZ1bmN0aW9uKGkpe1xyXG5cdFx0XHRcdGlmIChjc3NbaV0gIT09IHByZXZpb3VzQ1NTW2ldKSB7XHJcblx0XHRcdFx0XHR0ZW1wU3BlZWQgPSBzcGVlZDtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRzcGVlZCA9IHRlbXBTcGVlZDtcclxuXHRcdH1cclxuXHJcblx0XHRwcmV2aW91c0NTUyA9IGNzcztcclxuXHJcblx0XHRpZiAoIXNwZWVkKSB7XHJcblx0XHRcdCRib3guY3NzKGNzcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0JGJveC5kZXF1ZXVlKCkuYW5pbWF0ZShjc3MsIHtcclxuXHRcdFx0ZHVyYXRpb246IHNwZWVkIHx8IDAsXHJcblx0XHRcdGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0bW9kYWxEaW1lbnNpb25zKCk7XHJcblxyXG5cdFx0XHRcdGFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHQvLyBzaHJpbmsgdGhlIHdyYXBwZXIgZG93biB0byBleGFjdGx5IHRoZSBzaXplIG9mIGNvbG9yYm94IHRvIGF2b2lkIGEgYnVnIGluIElFJ3MgaWZyYW1lIGltcGxlbWVudGF0aW9uLlxyXG5cdFx0XHRcdCR3cmFwWzBdLnN0eWxlLndpZHRoID0gKHNldHRpbmdzLncgKyBsb2FkZWRXaWR0aCArIGludGVyZmFjZVdpZHRoKSArIFwicHhcIjtcclxuXHRcdFx0XHQkd3JhcFswXS5zdHlsZS5oZWlnaHQgPSAoc2V0dGluZ3MuaCArIGxvYWRlZEhlaWdodCArIGludGVyZmFjZUhlaWdodCkgKyBcInB4XCI7XHJcblxyXG5cdFx0XHRcdGlmIChzZXR0aW5ncy5nZXQoJ3JlcG9zaXRpb24nKSkge1xyXG5cdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7ICAvLyBzbWFsbCBkZWxheSBiZWZvcmUgYmluZGluZyBvbnJlc2l6ZSBkdWUgdG8gYW4gSUU4IGJ1Zy5cclxuXHRcdFx0XHRcdFx0JHdpbmRvdy5iaW5kKCdyZXNpemUuJyArIHByZWZpeCwgcHVibGljTWV0aG9kLnBvc2l0aW9uKTtcclxuXHRcdFx0XHRcdH0sIDEpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCQuaXNGdW5jdGlvbihsb2FkZWRDYWxsYmFjaykpIHtcclxuXHRcdFx0XHRcdGxvYWRlZENhbGxiYWNrKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRzdGVwOiBtb2RhbERpbWVuc2lvbnNcclxuXHRcdH0pO1xyXG5cdH07XHJcblxyXG5cdHB1YmxpY01ldGhvZC5yZXNpemUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG5cdFx0dmFyIHNjcm9sbHRvcDtcclxuXHJcblx0XHRpZiAob3Blbikge1xyXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcblx0XHRcdGlmIChvcHRpb25zLndpZHRoKSB7XHJcblx0XHRcdFx0c2V0dGluZ3MudyA9IHNldFNpemUob3B0aW9ucy53aWR0aCwgJ3gnKSAtIGxvYWRlZFdpZHRoIC0gaW50ZXJmYWNlV2lkdGg7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChvcHRpb25zLmlubmVyV2lkdGgpIHtcclxuXHRcdFx0XHRzZXR0aW5ncy53ID0gc2V0U2l6ZShvcHRpb25zLmlubmVyV2lkdGgsICd4Jyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdCRsb2FkZWQuY3NzKHt3aWR0aDogc2V0dGluZ3Mud30pO1xyXG5cclxuXHRcdFx0aWYgKG9wdGlvbnMuaGVpZ2h0KSB7XHJcblx0XHRcdFx0c2V0dGluZ3MuaCA9IHNldFNpemUob3B0aW9ucy5oZWlnaHQsICd5JykgLSBsb2FkZWRIZWlnaHQgLSBpbnRlcmZhY2VIZWlnaHQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChvcHRpb25zLmlubmVySGVpZ2h0KSB7XHJcblx0XHRcdFx0c2V0dGluZ3MuaCA9IHNldFNpemUob3B0aW9ucy5pbm5lckhlaWdodCwgJ3knKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCFvcHRpb25zLmlubmVySGVpZ2h0ICYmICFvcHRpb25zLmhlaWdodCkge1xyXG5cdFx0XHRcdHNjcm9sbHRvcCA9ICRsb2FkZWQuc2Nyb2xsVG9wKCk7XHJcblx0XHRcdFx0JGxvYWRlZC5jc3Moe2hlaWdodDogXCJhdXRvXCJ9KTtcclxuXHRcdFx0XHRzZXR0aW5ncy5oID0gJGxvYWRlZC5oZWlnaHQoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0JGxvYWRlZC5jc3Moe2hlaWdodDogc2V0dGluZ3MuaH0pO1xyXG5cclxuXHRcdFx0aWYoc2Nyb2xsdG9wKSB7XHJcblx0XHRcdFx0JGxvYWRlZC5zY3JvbGxUb3Aoc2Nyb2xsdG9wKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cHVibGljTWV0aG9kLnBvc2l0aW9uKHNldHRpbmdzLmdldCgndHJhbnNpdGlvbicpID09PSBcIm5vbmVcIiA/IDAgOiBzZXR0aW5ncy5nZXQoJ3NwZWVkJykpO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdHB1YmxpY01ldGhvZC5wcmVwID0gZnVuY3Rpb24gKG9iamVjdCkge1xyXG5cdFx0aWYgKCFvcGVuKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgY2FsbGJhY2ssIHNwZWVkID0gc2V0dGluZ3MuZ2V0KCd0cmFuc2l0aW9uJykgPT09IFwibm9uZVwiID8gMCA6IHNldHRpbmdzLmdldCgnc3BlZWQnKTtcclxuXHJcblx0XHQkbG9hZGVkLnJlbW92ZSgpO1xyXG5cclxuXHRcdCRsb2FkZWQgPSAkdGFnKGRpdiwgJ0xvYWRlZENvbnRlbnQnKS5hcHBlbmQob2JqZWN0KTtcclxuXHJcblx0XHRmdW5jdGlvbiBnZXRXaWR0aCgpIHtcclxuXHRcdFx0c2V0dGluZ3MudyA9IHNldHRpbmdzLncgfHwgJGxvYWRlZC53aWR0aCgpO1xyXG5cdFx0XHRzZXR0aW5ncy53ID0gc2V0dGluZ3MubXcgJiYgc2V0dGluZ3MubXcgPCBzZXR0aW5ncy53ID8gc2V0dGluZ3MubXcgOiBzZXR0aW5ncy53O1xyXG5cdFx0XHRyZXR1cm4gc2V0dGluZ3MudztcclxuXHRcdH1cclxuXHRcdGZ1bmN0aW9uIGdldEhlaWdodCgpIHtcclxuXHRcdFx0c2V0dGluZ3MuaCA9IHNldHRpbmdzLmggfHwgJGxvYWRlZC5oZWlnaHQoKTtcclxuXHRcdFx0c2V0dGluZ3MuaCA9IHNldHRpbmdzLm1oICYmIHNldHRpbmdzLm1oIDwgc2V0dGluZ3MuaCA/IHNldHRpbmdzLm1oIDogc2V0dGluZ3MuaDtcclxuXHRcdFx0cmV0dXJuIHNldHRpbmdzLmg7XHJcblx0XHR9XHJcblxyXG5cdFx0JGxvYWRlZC5oaWRlKClcclxuXHRcdC5hcHBlbmRUbygkbG9hZGluZ0JheS5zaG93KCkpLy8gY29udGVudCBoYXMgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIERPTSBmb3IgYWNjdXJhdGUgc2l6ZSBjYWxjdWxhdGlvbnMuXHJcblx0XHQuY3NzKHt3aWR0aDogZ2V0V2lkdGgoKSwgb3ZlcmZsb3c6IHNldHRpbmdzLmdldCgnc2Nyb2xsaW5nJykgPyAnYXV0bycgOiAnaGlkZGVuJ30pXHJcblx0XHQuY3NzKHtoZWlnaHQ6IGdldEhlaWdodCgpfSkvLyBzZXRzIHRoZSBoZWlnaHQgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSB3aWR0aCBpbiBjYXNlIHRoZSBuZXcgd2lkdGggaW5mbHVlbmNlcyB0aGUgdmFsdWUgb2YgaGVpZ2h0LlxyXG5cdFx0LnByZXBlbmRUbygkY29udGVudCk7XHJcblxyXG5cdFx0JGxvYWRpbmdCYXkuaGlkZSgpO1xyXG5cclxuXHRcdC8vIGZsb2F0aW5nIHRoZSBJTUcgcmVtb3ZlcyB0aGUgYm90dG9tIGxpbmUtaGVpZ2h0IGFuZCBmaXhlZCBhIHByb2JsZW0gd2hlcmUgSUUgbWlzY2FsY3VsYXRlcyB0aGUgd2lkdGggb2YgdGhlIHBhcmVudCBlbGVtZW50IGFzIDEwMCUgb2YgdGhlIGRvY3VtZW50IHdpZHRoLlxyXG5cclxuXHRcdCQocGhvdG8pLmNzcyh7J2Zsb2F0JzogJ25vbmUnfSk7XHJcblxyXG5cdFx0c2V0Q2xhc3Moc2V0dGluZ3MuZ2V0KCdjbGFzc05hbWUnKSk7XHJcblxyXG5cdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHZhciB0b3RhbCA9ICRyZWxhdGVkLmxlbmd0aCxcclxuXHRcdFx0XHRpZnJhbWUsXHJcblx0XHRcdFx0Y29tcGxldGU7XHJcblxyXG5cdFx0XHRpZiAoIW9wZW4pIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIHJlbW92ZUZpbHRlcigpIHsgLy8gTmVlZGVkIGZvciBJRTggaW4gdmVyc2lvbnMgb2YgalF1ZXJ5IHByaW9yIHRvIDEuNy4yXHJcblx0XHRcdFx0aWYgKCQuc3VwcG9ydC5vcGFjaXR5ID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0JGJveFswXS5zdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2ZpbHRlcicpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KGxvYWRpbmdUaW1lcik7XHJcblx0XHRcdFx0JGxvYWRpbmdPdmVybGF5LmhpZGUoKTtcclxuXHRcdFx0XHR0cmlnZ2VyKGV2ZW50X2NvbXBsZXRlKTtcclxuXHRcdFx0XHRzZXR0aW5ncy5nZXQoJ29uQ29tcGxldGUnKTtcclxuXHRcdFx0fTtcclxuXHJcblxyXG5cdFx0XHQkdGl0bGUuaHRtbChzZXR0aW5ncy5nZXQoJ3RpdGxlJykpLnNob3coKTtcclxuXHRcdFx0JGxvYWRlZC5zaG93KCk7XHJcblxyXG5cdFx0XHRpZiAodG90YWwgPiAxKSB7IC8vIGhhbmRsZSBncm91cGluZ1xyXG5cdFx0XHRcdGlmICh0eXBlb2Ygc2V0dGluZ3MuZ2V0KCdjdXJyZW50JykgPT09IFwic3RyaW5nXCIpIHtcclxuXHRcdFx0XHRcdCRjdXJyZW50Lmh0bWwoc2V0dGluZ3MuZ2V0KCdjdXJyZW50JykucmVwbGFjZSgne2N1cnJlbnR9JywgaW5kZXggKyAxKS5yZXBsYWNlKCd7dG90YWx9JywgdG90YWwpKS5zaG93KCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQkbmV4dFsoc2V0dGluZ3MuZ2V0KCdsb29wJykgfHwgaW5kZXggPCB0b3RhbCAtIDEpID8gXCJzaG93XCIgOiBcImhpZGVcIl0oKS5odG1sKHNldHRpbmdzLmdldCgnbmV4dCcpKTtcclxuXHRcdFx0XHQkcHJldlsoc2V0dGluZ3MuZ2V0KCdsb29wJykgfHwgaW5kZXgpID8gXCJzaG93XCIgOiBcImhpZGVcIl0oKS5odG1sKHNldHRpbmdzLmdldCgncHJldmlvdXMnKSk7XHJcblxyXG5cdFx0XHRcdHNsaWRlc2hvdygpO1xyXG5cclxuXHRcdFx0XHQvLyBQcmVsb2FkcyBpbWFnZXMgd2l0aGluIGEgcmVsIGdyb3VwXHJcblx0XHRcdFx0aWYgKHNldHRpbmdzLmdldCgncHJlbG9hZGluZycpKSB7XHJcblx0XHRcdFx0XHQkLmVhY2goW2dldEluZGV4KC0xKSwgZ2V0SW5kZXgoMSldLCBmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0XHR2YXIgaW1nLFxyXG5cdFx0XHRcdFx0XHRcdGkgPSAkcmVsYXRlZFt0aGlzXSxcclxuXHRcdFx0XHRcdFx0XHRzZXR0aW5ncyA9IG5ldyBTZXR0aW5ncyhpLCAkLmRhdGEoaSwgY29sb3Jib3gpKSxcclxuXHRcdFx0XHRcdFx0XHRzcmMgPSBzZXR0aW5ncy5nZXQoJ2hyZWYnKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChzcmMgJiYgaXNJbWFnZShzZXR0aW5ncywgc3JjKSkge1xyXG5cdFx0XHRcdFx0XHRcdHNyYyA9IHJldGluYVVybChzZXR0aW5ncywgc3JjKTtcclxuXHRcdFx0XHRcdFx0XHRpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuXHRcdFx0XHRcdFx0XHRpbWcuc3JjID0gc3JjO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0JGdyb3VwQ29udHJvbHMuaGlkZSgpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoc2V0dGluZ3MuZ2V0KCdpZnJhbWUnKSkge1xyXG5cclxuXHRcdFx0XHRpZnJhbWUgPSBzZXR0aW5ncy5nZXQoJ2NyZWF0ZUlmcmFtZScpO1xyXG5cclxuXHRcdFx0XHRpZiAoIXNldHRpbmdzLmdldCgnc2Nyb2xsaW5nJykpIHtcclxuXHRcdFx0XHRcdGlmcmFtZS5zY3JvbGxpbmcgPSBcIm5vXCI7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQkKGlmcmFtZSlcclxuXHRcdFx0XHRcdC5hdHRyKHtcclxuXHRcdFx0XHRcdFx0c3JjOiBzZXR0aW5ncy5nZXQoJ2hyZWYnKSxcclxuXHRcdFx0XHRcdFx0J2NsYXNzJzogcHJlZml4ICsgJ0lmcmFtZSdcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHQub25lKCdsb2FkJywgY29tcGxldGUpXHJcblx0XHRcdFx0XHQuYXBwZW5kVG8oJGxvYWRlZCk7XHJcblxyXG5cdFx0XHRcdCRldmVudHMub25lKGV2ZW50X3B1cmdlLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRpZnJhbWUuc3JjID0gXCIvL2Fib3V0OmJsYW5rXCI7XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdGlmIChzZXR0aW5ncy5nZXQoJ2Zhc3RJZnJhbWUnKSkge1xyXG5cdFx0XHRcdFx0JChpZnJhbWUpLnRyaWdnZXIoJ2xvYWQnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29tcGxldGUoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHNldHRpbmdzLmdldCgndHJhbnNpdGlvbicpID09PSAnZmFkZScpIHtcclxuXHRcdFx0XHQkYm94LmZhZGVUbyhzcGVlZCwgMSwgcmVtb3ZlRmlsdGVyKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZW1vdmVGaWx0ZXIoKTtcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAoc2V0dGluZ3MuZ2V0KCd0cmFuc2l0aW9uJykgPT09ICdmYWRlJykge1xyXG5cdFx0XHQkYm94LmZhZGVUbyhzcGVlZCwgMCwgZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdHB1YmxpY01ldGhvZC5wb3NpdGlvbigwLCBjYWxsYmFjayk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cHVibGljTWV0aG9kLnBvc2l0aW9uKHNwZWVkLCBjYWxsYmFjayk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0ZnVuY3Rpb24gbG9hZCAoKSB7XHJcblx0XHR2YXIgaHJlZiwgc2V0UmVzaXplLCBwcmVwID0gcHVibGljTWV0aG9kLnByZXAsICRpbmxpbmUsIHJlcXVlc3QgPSArK3JlcXVlc3RzO1xyXG5cclxuXHRcdGFjdGl2ZSA9IHRydWU7XHJcblxyXG5cdFx0cGhvdG8gPSBmYWxzZTtcclxuXHJcblx0XHR0cmlnZ2VyKGV2ZW50X3B1cmdlKTtcclxuXHRcdHRyaWdnZXIoZXZlbnRfbG9hZCk7XHJcblx0XHRzZXR0aW5ncy5nZXQoJ29uTG9hZCcpO1xyXG5cclxuXHRcdHNldHRpbmdzLmggPSBzZXR0aW5ncy5nZXQoJ2hlaWdodCcpID9cclxuXHRcdFx0XHRzZXRTaXplKHNldHRpbmdzLmdldCgnaGVpZ2h0JyksICd5JykgLSBsb2FkZWRIZWlnaHQgLSBpbnRlcmZhY2VIZWlnaHQgOlxyXG5cdFx0XHRcdHNldHRpbmdzLmdldCgnaW5uZXJIZWlnaHQnKSAmJiBzZXRTaXplKHNldHRpbmdzLmdldCgnaW5uZXJIZWlnaHQnKSwgJ3knKTtcclxuXHJcblx0XHRzZXR0aW5ncy53ID0gc2V0dGluZ3MuZ2V0KCd3aWR0aCcpID9cclxuXHRcdFx0XHRzZXRTaXplKHNldHRpbmdzLmdldCgnd2lkdGgnKSwgJ3gnKSAtIGxvYWRlZFdpZHRoIC0gaW50ZXJmYWNlV2lkdGggOlxyXG5cdFx0XHRcdHNldHRpbmdzLmdldCgnaW5uZXJXaWR0aCcpICYmIHNldFNpemUoc2V0dGluZ3MuZ2V0KCdpbm5lcldpZHRoJyksICd4Jyk7XHJcblxyXG5cdFx0Ly8gU2V0cyB0aGUgbWluaW11bSBkaW1lbnNpb25zIGZvciB1c2UgaW4gaW1hZ2Ugc2NhbGluZ1xyXG5cdFx0c2V0dGluZ3MubXcgPSBzZXR0aW5ncy53O1xyXG5cdFx0c2V0dGluZ3MubWggPSBzZXR0aW5ncy5oO1xyXG5cclxuXHRcdC8vIFJlLWV2YWx1YXRlIHRoZSBtaW5pbXVtIHdpZHRoIGFuZCBoZWlnaHQgYmFzZWQgb24gbWF4V2lkdGggYW5kIG1heEhlaWdodCB2YWx1ZXMuXHJcblx0XHQvLyBJZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGV4Y2VlZCB0aGUgbWF4V2lkdGggb3IgbWF4SGVpZ2h0LCB1c2UgdGhlIG1heGltdW0gdmFsdWVzIGluc3RlYWQuXHJcblx0XHRpZiAoc2V0dGluZ3MuZ2V0KCdtYXhXaWR0aCcpKSB7XHJcblx0XHRcdHNldHRpbmdzLm13ID0gc2V0U2l6ZShzZXR0aW5ncy5nZXQoJ21heFdpZHRoJyksICd4JykgLSBsb2FkZWRXaWR0aCAtIGludGVyZmFjZVdpZHRoO1xyXG5cdFx0XHRzZXR0aW5ncy5tdyA9IHNldHRpbmdzLncgJiYgc2V0dGluZ3MudyA8IHNldHRpbmdzLm13ID8gc2V0dGluZ3MudyA6IHNldHRpbmdzLm13O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHNldHRpbmdzLmdldCgnbWF4SGVpZ2h0JykpIHtcclxuXHRcdFx0c2V0dGluZ3MubWggPSBzZXRTaXplKHNldHRpbmdzLmdldCgnbWF4SGVpZ2h0JyksICd5JykgLSBsb2FkZWRIZWlnaHQgLSBpbnRlcmZhY2VIZWlnaHQ7XHJcblx0XHRcdHNldHRpbmdzLm1oID0gc2V0dGluZ3MuaCAmJiBzZXR0aW5ncy5oIDwgc2V0dGluZ3MubWggPyBzZXR0aW5ncy5oIDogc2V0dGluZ3MubWg7XHJcblx0XHR9XHJcblxyXG5cdFx0aHJlZiA9IHNldHRpbmdzLmdldCgnaHJlZicpO1xyXG5cclxuXHRcdGxvYWRpbmdUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG5cdFx0XHQkbG9hZGluZ092ZXJsYXkuc2hvdygpO1xyXG5cdFx0fSwgMTAwKTtcclxuXHJcblx0XHRpZiAoc2V0dGluZ3MuZ2V0KCdpbmxpbmUnKSkge1xyXG5cdFx0XHR2YXIgJHRhcmdldCA9ICQoaHJlZik7XHJcblx0XHRcdC8vIEluc2VydHMgYW4gZW1wdHkgcGxhY2Vob2xkZXIgd2hlcmUgaW5saW5lIGNvbnRlbnQgaXMgYmVpbmcgcHVsbGVkIGZyb20uXHJcblx0XHRcdC8vIEFuIGV2ZW50IGlzIGJvdW5kIHRvIHB1dCBpbmxpbmUgY29udGVudCBiYWNrIHdoZW4gQ29sb3Jib3ggY2xvc2VzIG9yIGxvYWRzIG5ldyBjb250ZW50LlxyXG5cdFx0XHQkaW5saW5lID0gJCgnPGRpdj4nKS5oaWRlKCkuaW5zZXJ0QmVmb3JlKCR0YXJnZXQpO1xyXG5cclxuXHRcdFx0JGV2ZW50cy5vbmUoZXZlbnRfcHVyZ2UsIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHQkaW5saW5lLnJlcGxhY2VXaXRoKCR0YXJnZXQpO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdHByZXAoJHRhcmdldCk7XHJcblx0XHR9IGVsc2UgaWYgKHNldHRpbmdzLmdldCgnaWZyYW1lJykpIHtcclxuXHRcdFx0Ly8gSUZyYW1lIGVsZW1lbnQgd29uJ3QgYmUgYWRkZWQgdG8gdGhlIERPTSB1bnRpbCBpdCBpcyByZWFkeSB0byBiZSBkaXNwbGF5ZWQsXHJcblx0XHRcdC8vIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggRE9NLXJlYWR5IEpTIHRoYXQgbWlnaHQgYmUgdHJ5aW5nIHRvIHJ1biBpbiB0aGF0IGlmcmFtZS5cclxuXHRcdFx0cHJlcChcIiBcIik7XHJcblx0XHR9IGVsc2UgaWYgKHNldHRpbmdzLmdldCgnaHRtbCcpKSB7XHJcblx0XHRcdHByZXAoc2V0dGluZ3MuZ2V0KCdodG1sJykpO1xyXG5cdFx0fSBlbHNlIGlmIChpc0ltYWdlKHNldHRpbmdzLCBocmVmKSkge1xyXG5cclxuXHRcdFx0aHJlZiA9IHJldGluYVVybChzZXR0aW5ncywgaHJlZik7XHJcblxyXG5cdFx0XHRwaG90byA9IHNldHRpbmdzLmdldCgnY3JlYXRlSW1nJyk7XHJcblxyXG5cdFx0XHQkKHBob3RvKVxyXG5cdFx0XHQuYWRkQ2xhc3MocHJlZml4ICsgJ1Bob3RvJylcclxuXHRcdFx0LmJpbmQoJ2Vycm9yLicrcHJlZml4LGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRwcmVwKCR0YWcoZGl2LCAnRXJyb3InKS5odG1sKHNldHRpbmdzLmdldCgnaW1nRXJyb3InKSkpO1xyXG5cdFx0XHR9KVxyXG5cdFx0XHQub25lKCdsb2FkJywgZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdGlmIChyZXF1ZXN0ICE9PSByZXF1ZXN0cykge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gQSBzbWFsbCBwYXVzZSBiZWNhdXNlIHNvbWUgYnJvd3NlcnMgd2lsbCBvY2Nhc3Npb25hbHkgcmVwb3J0IGFcclxuXHRcdFx0XHQvLyBpbWcud2lkdGggYW5kIGltZy5oZWlnaHQgb2YgemVybyBpbW1lZGlhdGVseSBhZnRlciB0aGUgaW1nLm9ubG9hZCBmaXJlc1xyXG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuXHRcdFx0XHRcdHZhciBwZXJjZW50O1xyXG5cclxuXHRcdFx0XHRcdGlmIChzZXR0aW5ncy5nZXQoJ3JldGluYUltYWdlJykgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8gPiAxKSB7XHJcblx0XHRcdFx0XHRcdHBob3RvLmhlaWdodCA9IHBob3RvLmhlaWdodCAvIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xyXG5cdFx0XHRcdFx0XHRwaG90by53aWR0aCA9IHBob3RvLndpZHRoIC8gd2luZG93LmRldmljZVBpeGVsUmF0aW87XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHNldHRpbmdzLmdldCgnc2NhbGVQaG90b3MnKSkge1xyXG5cdFx0XHRcdFx0XHRzZXRSZXNpemUgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRcdFx0cGhvdG8uaGVpZ2h0IC09IHBob3RvLmhlaWdodCAqIHBlcmNlbnQ7XHJcblx0XHRcdFx0XHRcdFx0cGhvdG8ud2lkdGggLT0gcGhvdG8ud2lkdGggKiBwZXJjZW50O1xyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRpZiAoc2V0dGluZ3MubXcgJiYgcGhvdG8ud2lkdGggPiBzZXR0aW5ncy5tdykge1xyXG5cdFx0XHRcdFx0XHRcdHBlcmNlbnQgPSAocGhvdG8ud2lkdGggLSBzZXR0aW5ncy5tdykgLyBwaG90by53aWR0aDtcclxuXHRcdFx0XHRcdFx0XHRzZXRSZXNpemUoKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoc2V0dGluZ3MubWggJiYgcGhvdG8uaGVpZ2h0ID4gc2V0dGluZ3MubWgpIHtcclxuXHRcdFx0XHRcdFx0XHRwZXJjZW50ID0gKHBob3RvLmhlaWdodCAtIHNldHRpbmdzLm1oKSAvIHBob3RvLmhlaWdodDtcclxuXHRcdFx0XHRcdFx0XHRzZXRSZXNpemUoKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChzZXR0aW5ncy5oKSB7XHJcblx0XHRcdFx0XHRcdHBob3RvLnN0eWxlLm1hcmdpblRvcCA9IE1hdGgubWF4KHNldHRpbmdzLm1oIC0gcGhvdG8uaGVpZ2h0LCAwKSAvIDIgKyAncHgnO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmICgkcmVsYXRlZFsxXSAmJiAoc2V0dGluZ3MuZ2V0KCdsb29wJykgfHwgJHJlbGF0ZWRbaW5kZXggKyAxXSkpIHtcclxuXHRcdFx0XHRcdFx0cGhvdG8uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG5cclxuXHRcdFx0XHRcdFx0JChwaG90bykuYmluZCgnY2xpY2suJytwcmVmaXgsIGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRcdFx0XHRwdWJsaWNNZXRob2QubmV4dCgpO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRwaG90by5zdHlsZS53aWR0aCA9IHBob3RvLndpZHRoICsgJ3B4JztcclxuXHRcdFx0XHRcdHBob3RvLnN0eWxlLmhlaWdodCA9IHBob3RvLmhlaWdodCArICdweCc7XHJcblx0XHRcdFx0XHRwcmVwKHBob3RvKTtcclxuXHRcdFx0XHR9LCAxKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRwaG90by5zcmMgPSBocmVmO1xyXG5cclxuXHRcdH0gZWxzZSBpZiAoaHJlZikge1xyXG5cdFx0XHQkbG9hZGluZ0JheS5sb2FkKGhyZWYsIHNldHRpbmdzLmdldCgnZGF0YScpLCBmdW5jdGlvbiAoZGF0YSwgc3RhdHVzKSB7XHJcblx0XHRcdFx0aWYgKHJlcXVlc3QgPT09IHJlcXVlc3RzKSB7XHJcblx0XHRcdFx0XHRwcmVwKHN0YXR1cyA9PT0gJ2Vycm9yJyA/ICR0YWcoZGl2LCAnRXJyb3InKS5odG1sKHNldHRpbmdzLmdldCgneGhyRXJyb3InKSkgOiAkKHRoaXMpLmNvbnRlbnRzKCkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBOYXZpZ2F0ZXMgdG8gdGhlIG5leHQgcGFnZS9pbWFnZSBpbiBhIHNldC5cclxuXHRwdWJsaWNNZXRob2QubmV4dCA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdGlmICghYWN0aXZlICYmICRyZWxhdGVkWzFdICYmIChzZXR0aW5ncy5nZXQoJ2xvb3AnKSB8fCAkcmVsYXRlZFtpbmRleCArIDFdKSkge1xyXG5cdFx0XHRpbmRleCA9IGdldEluZGV4KDEpO1xyXG5cdFx0XHRsYXVuY2goJHJlbGF0ZWRbaW5kZXhdKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRwdWJsaWNNZXRob2QucHJldiA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdGlmICghYWN0aXZlICYmICRyZWxhdGVkWzFdICYmIChzZXR0aW5ncy5nZXQoJ2xvb3AnKSB8fCBpbmRleCkpIHtcclxuXHRcdFx0aW5kZXggPSBnZXRJbmRleCgtMSk7XHJcblx0XHRcdGxhdW5jaCgkcmVsYXRlZFtpbmRleF0pO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8vIE5vdGU6IHRvIHVzZSB0aGlzIHdpdGhpbiBhbiBpZnJhbWUgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiBwYXJlbnQualF1ZXJ5LmNvbG9yYm94LmNsb3NlKCk7XHJcblx0cHVibGljTWV0aG9kLmNsb3NlID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0aWYgKG9wZW4gJiYgIWNsb3NpbmcpIHtcclxuXHJcblx0XHRcdGNsb3NpbmcgPSB0cnVlO1xyXG5cdFx0XHRvcGVuID0gZmFsc2U7XHJcblx0XHRcdHRyaWdnZXIoZXZlbnRfY2xlYW51cCk7XHJcblx0XHRcdHNldHRpbmdzLmdldCgnb25DbGVhbnVwJyk7XHJcblx0XHRcdCR3aW5kb3cudW5iaW5kKCcuJyArIHByZWZpeCk7XHJcblx0XHRcdCRvdmVybGF5LmZhZGVUbyhzZXR0aW5ncy5nZXQoJ2ZhZGVPdXQnKSB8fCAwLCAwKTtcclxuXHJcblx0XHRcdCRib3guc3RvcCgpLmZhZGVUbyhzZXR0aW5ncy5nZXQoJ2ZhZGVPdXQnKSB8fCAwLCAwLCBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0JGJveC5oaWRlKCk7XHJcblx0XHRcdFx0JG92ZXJsYXkuaGlkZSgpO1xyXG5cdFx0XHRcdHRyaWdnZXIoZXZlbnRfcHVyZ2UpO1xyXG5cdFx0XHRcdCRsb2FkZWQucmVtb3ZlKCk7XHJcblxyXG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0Y2xvc2luZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0dHJpZ2dlcihldmVudF9jbG9zZWQpO1xyXG5cdFx0XHRcdFx0c2V0dGluZ3MuZ2V0KCdvbkNsb3NlZCcpO1xyXG5cdFx0XHRcdH0sIDEpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvLyBSZW1vdmVzIGNoYW5nZXMgQ29sb3Jib3ggbWFkZSB0byB0aGUgZG9jdW1lbnQsIGJ1dCBkb2VzIG5vdCByZW1vdmUgdGhlIHBsdWdpbi5cclxuXHRwdWJsaWNNZXRob2QucmVtb3ZlID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0aWYgKCEkYm94KSB7IHJldHVybjsgfVxyXG5cclxuXHRcdCRib3guc3RvcCgpO1xyXG5cdFx0JFtjb2xvcmJveF0uY2xvc2UoKTtcclxuXHRcdCRib3guc3RvcChmYWxzZSwgdHJ1ZSkucmVtb3ZlKCk7XHJcblx0XHQkb3ZlcmxheS5yZW1vdmUoKTtcclxuXHRcdGNsb3NpbmcgPSBmYWxzZTtcclxuXHRcdCRib3ggPSBudWxsO1xyXG5cdFx0JCgnLicgKyBib3hFbGVtZW50KVxyXG5cdFx0XHQucmVtb3ZlRGF0YShjb2xvcmJveClcclxuXHRcdFx0LnJlbW92ZUNsYXNzKGJveEVsZW1lbnQpO1xyXG5cclxuXHRcdCQoZG9jdW1lbnQpLnVuYmluZCgnY2xpY2suJytwcmVmaXgpLnVuYmluZCgna2V5ZG93bi4nK3ByZWZpeCk7XHJcblx0fTtcclxuXHJcblx0Ly8gQSBtZXRob2QgZm9yIGZldGNoaW5nIHRoZSBjdXJyZW50IGVsZW1lbnQgQ29sb3Jib3ggaXMgcmVmZXJlbmNpbmcuXHJcblx0Ly8gcmV0dXJucyBhIGpRdWVyeSBvYmplY3QuXHJcblx0cHVibGljTWV0aG9kLmVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRyZXR1cm4gJChzZXR0aW5ncy5lbCk7XHJcblx0fTtcclxuXHJcblx0cHVibGljTWV0aG9kLnNldHRpbmdzID0gZGVmYXVsdHM7XHJcblxyXG59KGpRdWVyeSwgZG9jdW1lbnQsIHdpbmRvdykpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.cookie.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.cookie.js index 230cbb8d261..d86712d6616 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.cookie.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.cookie.js @@ -118,4 +118,4 @@ })); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jb29raWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNvb2tpZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogalF1ZXJ5IENvb2tpZSBQbHVnaW4gdjEuNC4xXG4gKiBodHRwczovL2dpdGh1Yi5jb20vY2FyaGFydGwvanF1ZXJ5LWNvb2tpZVxuICpcbiAqIENvcHlyaWdodCAyMDA2LCAyMDE0IEtsYXVzIEhhcnRsXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTUQgKFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUpXG5cdFx0ZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuXHRcdC8vIE5vZGUvQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEJyb3dzZXIgZ2xvYmFsc1xuXHRcdGZhY3RvcnkoalF1ZXJ5KTtcblx0fVxufShmdW5jdGlvbiAoJCkge1xuXG5cdHZhciBwbHVzZXMgPSAvXFwrL2c7XG5cblx0ZnVuY3Rpb24gZW5jb2RlKHMpIHtcblx0XHRyZXR1cm4gY29uZmlnLnJhdyA/IHMgOiBlbmNvZGVVUklDb21wb25lbnQocyk7XG5cdH1cblxuXHRmdW5jdGlvbiBkZWNvZGUocykge1xuXHRcdHJldHVybiBjb25maWcucmF3ID8gcyA6IGRlY29kZVVSSUNvbXBvbmVudChzKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHN0cmluZ2lmeUNvb2tpZVZhbHVlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIGVuY29kZShjb25maWcuanNvbiA/IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA6IFN0cmluZyh2YWx1ZSkpO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VDb29raWVWYWx1ZShzKSB7XG5cdFx0aWYgKHMuaW5kZXhPZignXCInKSA9PT0gMCkge1xuXHRcdFx0Ly8gVGhpcyBpcyBhIHF1b3RlZCBjb29raWUgYXMgYWNjb3JkaW5nIHRvIFJGQzIwNjgsIHVuZXNjYXBlLi4uXG5cdFx0XHRzID0gcy5zbGljZSgxLCAtMSkucmVwbGFjZSgvXFxcXFwiL2csICdcIicpLnJlcGxhY2UoL1xcXFxcXFxcL2csICdcXFxcJyk7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdC8vIFJlcGxhY2Ugc2VydmVyLXNpZGUgd3JpdHRlbiBwbHVzZXMgd2l0aCBzcGFjZXMuXG5cdFx0XHQvLyBJZiB3ZSBjYW4ndCBkZWNvZGUgdGhlIGNvb2tpZSwgaWdub3JlIGl0LCBpdCdzIHVudXNhYmxlLlxuXHRcdFx0Ly8gSWYgd2UgY2FuJ3QgcGFyc2UgdGhlIGNvb2tpZSwgaWdub3JlIGl0LCBpdCdzIHVudXNhYmxlLlxuXHRcdFx0cyA9IGRlY29kZVVSSUNvbXBvbmVudChzLnJlcGxhY2UocGx1c2VzLCAnICcpKTtcblx0XHRcdHJldHVybiBjb25maWcuanNvbiA/IEpTT04ucGFyc2UocykgOiBzO1xuXHRcdH0gY2F0Y2goZSkge31cblx0fVxuXG5cdGZ1bmN0aW9uIHJlYWQocywgY29udmVydGVyKSB7XG5cdFx0dmFyIHZhbHVlID0gY29uZmlnLnJhdyA/IHMgOiBwYXJzZUNvb2tpZVZhbHVlKHMpO1xuXHRcdHJldHVybiAkLmlzRnVuY3Rpb24oY29udmVydGVyKSA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZTtcblx0fVxuXG5cdHZhciBjb25maWcgPSAkLmNvb2tpZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBvcHRpb25zKSB7XG5cblx0XHQvLyBXcml0ZVxuXG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxICYmICEkLmlzRnVuY3Rpb24odmFsdWUpKSB7XG5cdFx0XHRvcHRpb25zID0gJC5leHRlbmQoe30sIGNvbmZpZy5kZWZhdWx0cywgb3B0aW9ucyk7XG5cblx0XHRcdGlmICh0eXBlb2Ygb3B0aW9ucy5leHBpcmVzID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHR2YXIgZGF5cyA9IG9wdGlvbnMuZXhwaXJlcywgdCA9IG9wdGlvbnMuZXhwaXJlcyA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdHQuc2V0TWlsbGlzZWNvbmRzKHQuZ2V0TWlsbGlzZWNvbmRzKCkgKyBkYXlzICogODY0ZSs1KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIChkb2N1bWVudC5jb29raWUgPSBbXG5cdFx0XHRcdGVuY29kZShrZXkpLCAnPScsIHN0cmluZ2lmeUNvb2tpZVZhbHVlKHZhbHVlKSxcblx0XHRcdFx0b3B0aW9ucy5leHBpcmVzID8gJzsgZXhwaXJlcz0nICsgb3B0aW9ucy5leHBpcmVzLnRvVVRDU3RyaW5nKCkgOiAnJywgLy8gdXNlIGV4cGlyZXMgYXR0cmlidXRlLCBtYXgtYWdlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgSUVcblx0XHRcdFx0b3B0aW9ucy5wYXRoICAgID8gJzsgcGF0aD0nICsgb3B0aW9ucy5wYXRoIDogJycsXG5cdFx0XHRcdG9wdGlvbnMuZG9tYWluICA/ICc7IGRvbWFpbj0nICsgb3B0aW9ucy5kb21haW4gOiAnJyxcblx0XHRcdFx0b3B0aW9ucy5zZWN1cmUgID8gJzsgc2VjdXJlJyA6ICcnXG5cdFx0XHRdLmpvaW4oJycpKTtcblx0XHR9XG5cblx0XHQvLyBSZWFkXG5cblx0XHR2YXIgcmVzdWx0ID0ga2V5ID8gdW5kZWZpbmVkIDoge30sXG5cdFx0XHQvLyBUbyBwcmV2ZW50IHRoZSBmb3IgbG9vcCBpbiB0aGUgZmlyc3QgcGxhY2UgYXNzaWduIGFuIGVtcHR5IGFycmF5XG5cdFx0XHQvLyBpbiBjYXNlIHRoZXJlIGFyZSBubyBjb29raWVzIGF0IGFsbC4gQWxzbyBwcmV2ZW50cyBvZGQgcmVzdWx0IHdoZW5cblx0XHRcdC8vIGNhbGxpbmcgJC5jb29raWUoKS5cblx0XHRcdGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUgPyBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsgJykgOiBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IGNvb2tpZXMubGVuZ3RoO1xuXG5cdFx0Zm9yICg7IGkgPCBsOyBpKyspIHtcblx0XHRcdHZhciBwYXJ0cyA9IGNvb2tpZXNbaV0uc3BsaXQoJz0nKSxcblx0XHRcdFx0bmFtZSA9IGRlY29kZShwYXJ0cy5zaGlmdCgpKSxcblx0XHRcdFx0Y29va2llID0gcGFydHMuam9pbignPScpO1xuXG5cdFx0XHRpZiAoa2V5ID09PSBuYW1lKSB7XG5cdFx0XHRcdC8vIElmIHNlY29uZCBhcmd1bWVudCAodmFsdWUpIGlzIGEgZnVuY3Rpb24gaXQncyBhIGNvbnZlcnRlci4uLlxuXHRcdFx0XHRyZXN1bHQgPSByZWFkKGNvb2tpZSwgdmFsdWUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHJldmVudCBzdG9yaW5nIGEgY29va2llIHRoYXQgd2UgY291bGRuJ3QgZGVjb2RlLlxuXHRcdFx0aWYgKCFrZXkgJiYgKGNvb2tpZSA9IHJlYWQoY29va2llKSkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXN1bHRbbmFtZV0gPSBjb29raWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHRjb25maWcuZGVmYXVsdHMgPSB7fTtcblxuXHQkLnJlbW92ZUNvb2tpZSA9IGZ1bmN0aW9uIChrZXksIG9wdGlvbnMpIHtcblx0XHQvLyBNdXN0IG5vdCBhbHRlciBvcHRpb25zLCB0aHVzIGV4dGVuZGluZyBhIGZyZXNoIG9iamVjdC4uLlxuXHRcdCQuY29va2llKGtleSwgJycsICQuZXh0ZW5kKHt9LCBvcHRpb25zLCB7IGV4cGlyZXM6IC0xIH0pKTtcblx0XHRyZXR1cm4gISQuY29va2llKGtleSk7XG5cdH07XG5cbn0pKTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jb29raWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmNvb2tpZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxyXG4gKiBqUXVlcnkgQ29va2llIFBsdWdpbiB2MS40LjFcclxuICogaHR0cHM6Ly9naXRodWIuY29tL2NhcmhhcnRsL2pxdWVyeS1jb29raWVcclxuICpcclxuICogQ29weXJpZ2h0IDIwMDYsIDIwMTQgS2xhdXMgSGFydGxcclxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXHJcbiAqL1xyXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcclxuXHRpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XHJcblx0XHQvLyBBTUQgKFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUpXHJcblx0XHRkZWZpbmUoWydqcXVlcnknXSwgZmFjdG9yeSk7XHJcblx0fSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcclxuXHRcdC8vIE5vZGUvQ29tbW9uSlNcclxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdqcXVlcnknKSk7XHJcblx0fSBlbHNlIHtcclxuXHRcdC8vIEJyb3dzZXIgZ2xvYmFsc1xyXG5cdFx0ZmFjdG9yeShqUXVlcnkpO1xyXG5cdH1cclxufShmdW5jdGlvbiAoJCkge1xyXG5cclxuXHR2YXIgcGx1c2VzID0gL1xcKy9nO1xyXG5cclxuXHRmdW5jdGlvbiBlbmNvZGUocykge1xyXG5cdFx0cmV0dXJuIGNvbmZpZy5yYXcgPyBzIDogZW5jb2RlVVJJQ29tcG9uZW50KHMpO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gZGVjb2RlKHMpIHtcclxuXHRcdHJldHVybiBjb25maWcucmF3ID8gcyA6IGRlY29kZVVSSUNvbXBvbmVudChzKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHN0cmluZ2lmeUNvb2tpZVZhbHVlKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gZW5jb2RlKGNvbmZpZy5qc29uID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogU3RyaW5nKHZhbHVlKSk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBwYXJzZUNvb2tpZVZhbHVlKHMpIHtcclxuXHRcdGlmIChzLmluZGV4T2YoJ1wiJykgPT09IDApIHtcclxuXHRcdFx0Ly8gVGhpcyBpcyBhIHF1b3RlZCBjb29raWUgYXMgYWNjb3JkaW5nIHRvIFJGQzIwNjgsIHVuZXNjYXBlLi4uXHJcblx0XHRcdHMgPSBzLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykucmVwbGFjZSgvXFxcXFxcXFwvZywgJ1xcXFwnKTtcclxuXHRcdH1cclxuXHJcblx0XHR0cnkge1xyXG5cdFx0XHQvLyBSZXBsYWNlIHNlcnZlci1zaWRlIHdyaXR0ZW4gcGx1c2VzIHdpdGggc3BhY2VzLlxyXG5cdFx0XHQvLyBJZiB3ZSBjYW4ndCBkZWNvZGUgdGhlIGNvb2tpZSwgaWdub3JlIGl0LCBpdCdzIHVudXNhYmxlLlxyXG5cdFx0XHQvLyBJZiB3ZSBjYW4ndCBwYXJzZSB0aGUgY29va2llLCBpZ25vcmUgaXQsIGl0J3MgdW51c2FibGUuXHJcblx0XHRcdHMgPSBkZWNvZGVVUklDb21wb25lbnQocy5yZXBsYWNlKHBsdXNlcywgJyAnKSk7XHJcblx0XHRcdHJldHVybiBjb25maWcuanNvbiA/IEpTT04ucGFyc2UocykgOiBzO1xyXG5cdFx0fSBjYXRjaChlKSB7fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcmVhZChzLCBjb252ZXJ0ZXIpIHtcclxuXHRcdHZhciB2YWx1ZSA9IGNvbmZpZy5yYXcgPyBzIDogcGFyc2VDb29raWVWYWx1ZShzKTtcclxuXHRcdHJldHVybiAkLmlzRnVuY3Rpb24oY29udmVydGVyKSA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdHZhciBjb25maWcgPSAkLmNvb2tpZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBvcHRpb25zKSB7XHJcblxyXG5cdFx0Ly8gV3JpdGVcclxuXHJcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgISQuaXNGdW5jdGlvbih2YWx1ZSkpIHtcclxuXHRcdFx0b3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBjb25maWcuZGVmYXVsdHMsIG9wdGlvbnMpO1xyXG5cclxuXHRcdFx0aWYgKHR5cGVvZiBvcHRpb25zLmV4cGlyZXMgPT09ICdudW1iZXInKSB7XHJcblx0XHRcdFx0dmFyIGRheXMgPSBvcHRpb25zLmV4cGlyZXMsIHQgPSBvcHRpb25zLmV4cGlyZXMgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0XHRcdHQuc2V0TWlsbGlzZWNvbmRzKHQuZ2V0TWlsbGlzZWNvbmRzKCkgKyBkYXlzICogODY0ZSs1KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIChkb2N1bWVudC5jb29raWUgPSBbXHJcblx0XHRcdFx0ZW5jb2RlKGtleSksICc9Jywgc3RyaW5naWZ5Q29va2llVmFsdWUodmFsdWUpLFxyXG5cdFx0XHRcdG9wdGlvbnMuZXhwaXJlcyA/ICc7IGV4cGlyZXM9JyArIG9wdGlvbnMuZXhwaXJlcy50b1VUQ1N0cmluZygpIDogJycsIC8vIHVzZSBleHBpcmVzIGF0dHJpYnV0ZSwgbWF4LWFnZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFXHJcblx0XHRcdFx0b3B0aW9ucy5wYXRoICAgID8gJzsgcGF0aD0nICsgb3B0aW9ucy5wYXRoIDogJycsXHJcblx0XHRcdFx0b3B0aW9ucy5kb21haW4gID8gJzsgZG9tYWluPScgKyBvcHRpb25zLmRvbWFpbiA6ICcnLFxyXG5cdFx0XHRcdG9wdGlvbnMuc2VjdXJlICA/ICc7IHNlY3VyZScgOiAnJ1xyXG5cdFx0XHRdLmpvaW4oJycpKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBSZWFkXHJcblxyXG5cdFx0dmFyIHJlc3VsdCA9IGtleSA/IHVuZGVmaW5lZCA6IHt9LFxyXG5cdFx0XHQvLyBUbyBwcmV2ZW50IHRoZSBmb3IgbG9vcCBpbiB0aGUgZmlyc3QgcGxhY2UgYXNzaWduIGFuIGVtcHR5IGFycmF5XHJcblx0XHRcdC8vIGluIGNhc2UgdGhlcmUgYXJlIG5vIGNvb2tpZXMgYXQgYWxsLiBBbHNvIHByZXZlbnRzIG9kZCByZXN1bHQgd2hlblxyXG5cdFx0XHQvLyBjYWxsaW5nICQuY29va2llKCkuXHJcblx0XHRcdGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUgPyBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsgJykgOiBbXSxcclxuXHRcdFx0aSA9IDAsXHJcblx0XHRcdGwgPSBjb29raWVzLmxlbmd0aDtcclxuXHJcblx0XHRmb3IgKDsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHR2YXIgcGFydHMgPSBjb29raWVzW2ldLnNwbGl0KCc9JyksXHJcblx0XHRcdFx0bmFtZSA9IGRlY29kZShwYXJ0cy5zaGlmdCgpKSxcclxuXHRcdFx0XHRjb29raWUgPSBwYXJ0cy5qb2luKCc9Jyk7XHJcblxyXG5cdFx0XHRpZiAoa2V5ID09PSBuYW1lKSB7XHJcblx0XHRcdFx0Ly8gSWYgc2Vjb25kIGFyZ3VtZW50ICh2YWx1ZSkgaXMgYSBmdW5jdGlvbiBpdCdzIGEgY29udmVydGVyLi4uXHJcblx0XHRcdFx0cmVzdWx0ID0gcmVhZChjb29raWUsIHZhbHVlKTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gUHJldmVudCBzdG9yaW5nIGEgY29va2llIHRoYXQgd2UgY291bGRuJ3QgZGVjb2RlLlxyXG5cdFx0XHRpZiAoIWtleSAmJiAoY29va2llID0gcmVhZChjb29raWUpKSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0cmVzdWx0W25hbWVdID0gY29va2llO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9O1xyXG5cclxuXHRjb25maWcuZGVmYXVsdHMgPSB7fTtcclxuXHJcblx0JC5yZW1vdmVDb29raWUgPSBmdW5jdGlvbiAoa2V5LCBvcHRpb25zKSB7XHJcblx0XHQvLyBNdXN0IG5vdCBhbHRlciBvcHRpb25zLCB0aHVzIGV4dGVuZGluZyBhIGZyZXNoIG9iamVjdC4uLlxyXG5cdFx0JC5jb29raWUoa2V5LCAnJywgJC5leHRlbmQoe30sIG9wdGlvbnMsIHsgZXhwaXJlczogLTEgfSkpO1xyXG5cdFx0cmV0dXJuICEkLmNvb2tpZShrZXkpO1xyXG5cdH07XHJcblxyXG59KSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.fileupload-full.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.fileupload-full.js index 1103d5011f3..15f3de9aba1 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.fileupload-full.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.fileupload-full.js @@ -1941,4 +1941,4 @@ })); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5maWxldXBsb2FkLWZ1bGwuanMiLCJqcXVlcnkuaWZyYW1lLXRyYW5zcG9ydC5qcyIsImpxdWVyeS5maWxldXBsb2FkLmpzIiwianF1ZXJ5LmZpbGV1cGxvYWQtcHJvY2Vzcy5qcyIsImpxdWVyeS5maWxldXBsb2FkLXZhbGlkYXRlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUN6TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2w1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzVLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmZpbGV1cGxvYWQtZnVsbC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiLypcbiAqIGpRdWVyeSBJZnJhbWUgVHJhbnNwb3J0IFBsdWdpblxuICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkXG4gKlxuICogQ29weXJpZ2h0IDIwMTEsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICovXG5cbi8qIGdsb2JhbCBkZWZpbmUsIHJlcXVpcmUsIHdpbmRvdywgZG9jdW1lbnQgKi9cblxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgLy8gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIEFNRCBtb2R1bGU6XG4gICAgICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgICAgICBmYWN0b3J5KHJlcXVpcmUoJ2pxdWVyeScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBCcm93c2VyIGdsb2JhbHM6XG4gICAgICAgIGZhY3Rvcnkod2luZG93LmpRdWVyeSk7XG4gICAgfVxufShmdW5jdGlvbiAoJCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8vIEhlbHBlciB2YXJpYWJsZSB0byBjcmVhdGUgdW5pcXVlIG5hbWVzIGZvciB0aGUgdHJhbnNwb3J0IGlmcmFtZXM6XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuXG4gICAgLy8gVGhlIGlmcmFtZSB0cmFuc3BvcnQgYWNjZXB0cyBmb3VyIGFkZGl0aW9uYWwgb3B0aW9uczpcbiAgICAvLyBvcHRpb25zLmZpbGVJbnB1dDogYSBqUXVlcnkgY29sbGVjdGlvbiBvZiBmaWxlIGlucHV0IGZpZWxkc1xuICAgIC8vIG9wdGlvbnMucGFyYW1OYW1lOiB0aGUgcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSBmaWxlIGZvcm0gZGF0YSxcbiAgICAvLyAgb3ZlcnJpZGVzIHRoZSBuYW1lIHByb3BlcnR5IG9mIHRoZSBmaWxlIGlucHV0IGZpZWxkKHMpLFxuICAgIC8vICBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAgICAvLyBvcHRpb25zLmZvcm1EYXRhOiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggbmFtZSBhbmQgdmFsdWUgcHJvcGVydGllcyxcbiAgICAvLyAgZXF1aXZhbGVudCB0byB0aGUgcmV0dXJuIGRhdGEgb2YgLnNlcmlhbGl6ZUFycmF5KCksIGUuZy46XG4gICAgLy8gIFt7bmFtZTogJ2EnLCB2YWx1ZTogMX0sIHtuYW1lOiAnYicsIHZhbHVlOiAyfV1cbiAgICAvLyBvcHRpb25zLmluaXRpYWxJZnJhbWVTcmM6IHRoZSBVUkwgb2YgdGhlIGluaXRpYWwgaWZyYW1lIHNyYyxcbiAgICAvLyAgYnkgZGVmYXVsdCBzZXQgdG8gXCJqYXZhc2NyaXB0OmZhbHNlO1wiXG4gICAgJC5hamF4VHJhbnNwb3J0KCdpZnJhbWUnLCBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucy5hc3luYykge1xuICAgICAgICAgICAgLy8gamF2YXNjcmlwdDpmYWxzZSBhcyBpbml0aWFsIGlmcmFtZSBzcmNcbiAgICAgICAgICAgIC8vIHByZXZlbnRzIHdhcm5pbmcgcG9wdXBzIG9uIEhUVFBTIGluIElFNjpcbiAgICAgICAgICAgIC8qanNoaW50IHNjcmlwdHVybDogdHJ1ZSAqL1xuICAgICAgICAgICAgdmFyIGluaXRpYWxJZnJhbWVTcmMgPSBvcHRpb25zLmluaXRpYWxJZnJhbWVTcmMgfHwgJ2phdmFzY3JpcHQ6ZmFsc2U7JyxcbiAgICAgICAgICAgIC8qanNoaW50IHNjcmlwdHVybDogZmFsc2UgKi9cbiAgICAgICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgICAgIGlmcmFtZSxcbiAgICAgICAgICAgICAgICBhZGRQYXJhbUNoYXI7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uIChfLCBjb21wbGV0ZUNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm0gPSAkKCc8Zm9ybSBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj48L2Zvcm0+Jyk7XG4gICAgICAgICAgICAgICAgICAgIGZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnLCBvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkUGFyYW1DaGFyID0gL1xcPy8udGVzdChvcHRpb25zLnVybCkgPyAnJicgOiAnPyc7XG4gICAgICAgICAgICAgICAgICAgIC8vIFhEb21haW5SZXF1ZXN0IG9ubHkgc3VwcG9ydHMgR0VUIGFuZCBQT1NUOlxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy50eXBlID09PSAnREVMRVRFJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPURFTEVURSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSAnUFVUJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPVBVVCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSAnUEFUQ0gnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsICsgYWRkUGFyYW1DaGFyICsgJ19tZXRob2Q9UEFUQ0gnO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ1BPU1QnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIElFIHZlcnNpb25zIGJlbG93IElFOCBjYW5ub3Qgc2V0IHRoZSBuYW1lIHByb3BlcnR5IG9mXG4gICAgICAgICAgICAgICAgICAgIC8vIGVsZW1lbnRzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIERPTSxcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gd2Ugc2V0IHRoZSBuYW1lIGFsb25nIHdpdGggdGhlIGlmcmFtZSBIVE1MIG1hcmt1cDpcbiAgICAgICAgICAgICAgICAgICAgY291bnRlciArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpZnJhbWUgPSAkKFxuICAgICAgICAgICAgICAgICAgICAgICAgJzxpZnJhbWUgc3JjPVwiJyArIGluaXRpYWxJZnJhbWVTcmMgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcIiBuYW1lPVwiaWZyYW1lLXRyYW5zcG9ydC0nICsgY291bnRlciArICdcIj48L2lmcmFtZT4nXG4gICAgICAgICAgICAgICAgICAgICkuYmluZCgnbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxlSW5wdXRDbG9uZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lcyA9ICQuaXNBcnJheShvcHRpb25zLnBhcmFtTmFtZSkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbU5hbWUgOiBbb3B0aW9ucy5wYXJhbU5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVuYmluZCgnbG9hZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJpbmQoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV3JhcCBpbiBhIHRyeS9jYXRjaCBibG9jayB0byBjYXRjaCBleGNlcHRpb25zIHRocm93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRyeWluZyB0byBhY2Nlc3MgY3Jvc3MtZG9tYWluIGlmcmFtZSBjb250ZW50czpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gaWZyYW1lLmNvbnRlbnRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lIGFuZCBGaXJlZm94IGRvIG5vdCB0aHJvdyBhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhjZXB0aW9uIHdoZW4gY2FsbGluZyBpZnJhbWUuY29udGVudHMoKSBvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzbyB3ZSB1bmlmeSB0aGUgcmVzcG9uc2U6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmxlbmd0aCB8fCAhcmVzcG9uc2VbMF0uZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgY29tcGxldGUgY2FsbGJhY2sgcmV0dXJucyB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWZyYW1lIGNvbnRlbnQgZG9jdW1lbnQgYXMgcmVzcG9uc2Ugb2JqZWN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZUNhbGxiYWNrKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydpZnJhbWUnOiByZXNwb25zZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4IGZvciBJRSBlbmRsZXNzIHByb2dyZXNzIGJhciBhY3Rpdml0eSBidWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGhhcHBlbnMgb24gZm9ybSBzdWJtaXRzIHRvIGlmcmFtZSB0YXJnZXRzKTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnPGlmcmFtZSBzcmM9XCInICsgaW5pdGlhbElmcmFtZVNyYyArICdcIj48L2lmcmFtZT4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKGZvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmluZyB0aGUgZm9ybSBpbiBhIHNldFRpbWVvdXQgY2FsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxsb3dzIENocm9tZSdzIGRldmVsb3BlciB0b29scyB0byBkaXNwbGF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcmVzcG9uc2UgcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcCgndGFyZ2V0JywgaWZyYW1lLnByb3AoJ25hbWUnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcCgnYWN0aW9uJywgb3B0aW9ucy51cmwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3AoJ21ldGhvZCcsIG9wdGlvbnMudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5mb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZvcm1EYXRhLCBmdW5jdGlvbiAoaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJzxpbnB1dCB0eXBlPVwiaGlkZGVuXCIvPicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcCgnbmFtZScsIGZpZWxkLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsKGZpZWxkLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKGZvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZmlsZUlucHV0ICYmIG9wdGlvbnMuZmlsZUlucHV0Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPT09ICdQT1NUJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVJbnB1dENsb25lcyA9IG9wdGlvbnMuZmlsZUlucHV0LmNsb25lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGEgY2xvbmUgZm9yIGVhY2ggZmlsZSBpbnB1dCBmaWVsZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZpbGVJbnB1dC5hZnRlcihmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVJbnB1dENsb25lc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0LmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnByb3AoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZXNbaW5kZXhdIHx8IG9wdGlvbnMucGFyYW1OYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kaW5nIHRoZSBmaWxlIGlucHV0IGZpZWxkcyB0byB0aGUgaGlkZGVuIGZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmVzIHRoZW0gZnJvbSB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQob3B0aW9ucy5maWxlSW5wdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9wKCdlbmN0eXBlJywgJ211bHRpcGFydC9mb3JtLWRhdGEnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbmN0eXBlIG11c3QgYmUgc2V0IGFzIGVuY29kaW5nIGZvciBJRTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3AoJ2VuY29kaW5nJywgJ211bHRpcGFydC9mb3JtLWRhdGEnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIEhUTUw1IGZvcm0gYXR0cmlidXRlIGZyb20gdGhlIGlucHV0KHMpOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0LnJlbW92ZUF0dHIoJ2Zvcm0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIGZpbGUgaW5wdXQgZmllbGRzIGF0IHRoZWlyIG9yaWdpbmFsIGxvY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBieSByZXBsYWNpbmcgdGhlIGNsb25lcyB3aXRoIHRoZSBvcmlnaW5hbHM6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZUlucHV0Q2xvbmVzICYmIGZpbGVJbnB1dENsb25lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZpbGVJbnB1dC5lYWNoKGZ1bmN0aW9uIChpbmRleCwgaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsb25lID0gJChmaWxlSW5wdXRDbG9uZXNbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgbmFtZSBhbmQgZm9ybSBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBjbG9uZS5wcm9wKCduYW1lJykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignZm9ybScsIGNsb25lLmF0dHIoJ2Zvcm0nKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lLnJlcGxhY2VXaXRoKGlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kKGlmcmFtZSkuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaWZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGlmcmFtZSBzcmMgYWJvcnRzIHRoZSByZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2LlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uY2F0IGlzIHVzZWQgdG8gYXZvaWQgdGhlIFwiU2NyaXB0IFVSTFwiIEpTTGludCBlcnJvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51bmJpbmQoJ2xvYWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9wKCdzcmMnLCBpbml0aWFsSWZyYW1lU3JjKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IHJldHVybnMgdGhlIGlmcmFtZSBjb250ZW50IGRvY3VtZW50IGFzIHJlc3BvbnNlLlxuICAgIC8vIFRoZSBmb2xsb3dpbmcgYWRkcyBjb252ZXJ0ZXJzIGZyb20gaWZyYW1lIHRvIHRleHQsIGpzb24sIGh0bWwsIHhtbFxuICAgIC8vIGFuZCBzY3JpcHQuXG4gICAgLy8gUGxlYXNlIG5vdGUgdGhhdCB0aGUgQ29udGVudC1UeXBlIGZvciBKU09OIHJlc3BvbnNlcyBoYXMgdG8gYmUgdGV4dC9wbGFpblxuICAgIC8vIG9yIHRleHQvaHRtbCwgaWYgdGhlIGJyb3dzZXIgZG9lc24ndCBpbmNsdWRlIGFwcGxpY2F0aW9uL2pzb24gaW4gdGhlXG4gICAgLy8gQWNjZXB0IGhlYWRlciwgZWxzZSBJRSB3aWxsIHNob3cgYSBkb3dubG9hZCBkaWFsb2cuXG4gICAgLy8gVGhlIENvbnRlbnQtVHlwZSBmb3IgWE1MIHJlc3BvbnNlcyBvbiB0aGUgb3RoZXIgaGFuZCBoYXMgdG8gYmUgYWx3YXlzXG4gICAgLy8gYXBwbGljYXRpb24veG1sIG9yIHRleHQveG1sLCBzbyBJRSBwcm9wZXJseSBwYXJzZXMgdGhlIFhNTCByZXNwb25zZS5cbiAgICAvLyBTZWUgYWxzb1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC93aWtpL1NldHVwI2NvbnRlbnQtdHlwZS1uZWdvdGlhdGlvblxuICAgICQuYWpheFNldHVwKHtcbiAgICAgICAgY29udmVydGVyczoge1xuICAgICAgICAgICAgJ2lmcmFtZSB0ZXh0JzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpZnJhbWUgJiYgJChpZnJhbWVbMF0uYm9keSkudGV4dCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdpZnJhbWUganNvbic6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWZyYW1lICYmICQucGFyc2VKU09OKCQoaWZyYW1lWzBdLmJvZHkpLnRleHQoKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2lmcmFtZSBodG1sJzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpZnJhbWUgJiYgJChpZnJhbWVbMF0uYm9keSkuaHRtbCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdpZnJhbWUgeG1sJzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICAgICAgICAgIHZhciB4bWxEb2MgPSBpZnJhbWUgJiYgaWZyYW1lWzBdO1xuICAgICAgICAgICAgICAgIHJldHVybiB4bWxEb2MgJiYgJC5pc1hNTERvYyh4bWxEb2MpID8geG1sRG9jIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICQucGFyc2VYTUwoKHhtbERvYy5YTUxEb2N1bWVudCAmJiB4bWxEb2MuWE1MRG9jdW1lbnQueG1sKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoeG1sRG9jLmJvZHkpLmh0bWwoKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2lmcmFtZSBzY3JpcHQnOiBmdW5jdGlvbiAoaWZyYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkLmdsb2JhbEV2YWwoJChpZnJhbWVbMF0uYm9keSkudGV4dCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG59KSk7XG4iLCIvKlxuICogalF1ZXJ5IEZpbGUgVXBsb2FkIFBsdWdpbiA1LjQwLjFcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZFxuICpcbiAqIENvcHlyaWdodCAyMDEwLCBTZWJhc3RpYW4gVHNjaGFuXG4gKiBodHRwczovL2JsdWVpbXAubmV0XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqL1xuXG4vKiBqc2hpbnQgbm9tZW46ZmFsc2UgKi9cbi8qIGdsb2JhbCBkZWZpbmUsIHdpbmRvdywgZG9jdW1lbnQsIGxvY2F0aW9uLCBCbG9iLCBGb3JtRGF0YSAqL1xuXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICAvLyBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgQU1EIG1vZHVsZTpcbiAgICAgICAgZGVmaW5lKFtcbiAgICAgICAgICAgICdqcXVlcnknLFxuICAgICAgICAgICAgJ2pxdWVyeS51aS53aWRnZXQnXG4gICAgICAgIF0sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFsczpcbiAgICAgICAgZmFjdG9yeSh3aW5kb3cualF1ZXJ5KTtcbiAgICB9XG59KGZ1bmN0aW9uICgkKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8gRGV0ZWN0IGZpbGUgaW5wdXQgc3VwcG9ydCwgYmFzZWQgb25cbiAgICAvLyBodHRwOi8vdmlsamFtaXMuY29tL2Jsb2cvMjAxMi9maWxlLXVwbG9hZC1zdXBwb3J0LW9uLW1vYmlsZS9cbiAgICAkLnN1cHBvcnQuZmlsZUlucHV0ID0gIShuZXcgUmVnRXhwKFxuICAgICAgICAvLyBIYW5kbGUgZGV2aWNlcyB3aGljaCBnaXZlIGZhbHNlIHBvc2l0aXZlcyBmb3IgdGhlIGZlYXR1cmUgZGV0ZWN0aW9uOlxuICAgICAgICAnKEFuZHJvaWQgKDFcXFxcLlswMTU2XXwyXFxcXC5bMDFdKSknICtcbiAgICAgICAgICAgICd8KFdpbmRvd3MgUGhvbmUgKE9TIDd8OFxcXFwuMCkpfChYQkxXUCl8KFp1bmVXUCl8KFdQRGVza3RvcCknICtcbiAgICAgICAgICAgICd8KHcoZWIpP09TQnJvd3Nlcil8KHdlYk9TKScgK1xuICAgICAgICAgICAgJ3woS2luZGxlLygxXFxcXC4wfDJcXFxcLlswNV18M1xcXFwuMCkpJ1xuICAgICkudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkgfHxcbiAgICAgICAgLy8gRmVhdHVyZSBkZXRlY3Rpb24gZm9yIGFsbCBvdGhlciBkZXZpY2VzOlxuICAgICAgICAkKCc8aW5wdXQgdHlwZT1cImZpbGVcIj4nKS5wcm9wKCdkaXNhYmxlZCcpKTtcblxuICAgIC8vIFRoZSBGaWxlUmVhZGVyIEFQSSBpcyBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IHdvcmtzIGFzIGZlYXR1cmUgZGV0ZWN0aW9uLFxuICAgIC8vIGFzIHNvbWUgU2FmYXJpIHZlcnNpb25zICg1Pykgc3VwcG9ydCBYSFIgZmlsZSB1cGxvYWRzIHZpYSB0aGUgRm9ybURhdGEgQVBJLFxuICAgIC8vIGJ1dCBub3Qgbm9uLW11bHRpcGFydCBYSFIgZmlsZSB1cGxvYWRzLlxuICAgIC8vIHdpbmRvdy5YTUxIdHRwUmVxdWVzdFVwbG9hZCBpcyBub3QgYXZhaWxhYmxlIG9uIElFMTAsIHNvIHdlIGNoZWNrIGZvclxuICAgIC8vIHdpbmRvdy5Qcm9ncmVzc0V2ZW50IGluc3RlYWQgdG8gZGV0ZWN0IFhIUjIgZmlsZSB1cGxvYWQgY2FwYWJpbGl0eTpcbiAgICAkLnN1cHBvcnQueGhyRmlsZVVwbG9hZCA9ICEhKHdpbmRvdy5Qcm9ncmVzc0V2ZW50ICYmIHdpbmRvdy5GaWxlUmVhZGVyKTtcbiAgICAkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkID0gISF3aW5kb3cuRm9ybURhdGE7XG5cbiAgICAvLyBEZXRlY3Qgc3VwcG9ydCBmb3IgQmxvYiBzbGljaW5nIChyZXF1aXJlZCBmb3IgY2h1bmtlZCB1cGxvYWRzKTpcbiAgICAkLnN1cHBvcnQuYmxvYlNsaWNlID0gd2luZG93LkJsb2IgJiYgKEJsb2IucHJvdG90eXBlLnNsaWNlIHx8XG4gICAgICAgIEJsb2IucHJvdG90eXBlLndlYmtpdFNsaWNlIHx8IEJsb2IucHJvdG90eXBlLm1velNsaWNlKTtcblxuICAgIC8vIFRoZSBmaWxldXBsb2FkIHdpZGdldCBsaXN0ZW5zIGZvciBjaGFuZ2UgZXZlbnRzIG9uIGZpbGUgaW5wdXQgZmllbGRzIGRlZmluZWRcbiAgICAvLyB2aWEgZmlsZUlucHV0IHNldHRpbmcgYW5kIHBhc3RlIG9yIGRyb3AgZXZlbnRzIG9mIHRoZSBnaXZlbiBkcm9wWm9uZS5cbiAgICAvLyBJbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBqUXVlcnkgV2lkZ2V0IG1ldGhvZHMsIHRoZSBmaWxldXBsb2FkIHdpZGdldFxuICAgIC8vIGV4cG9zZXMgdGhlIFwiYWRkXCIgYW5kIFwic2VuZFwiIG1ldGhvZHMsIHRvIGFkZCBvciBkaXJlY3RseSBzZW5kIGZpbGVzIHVzaW5nXG4gICAgLy8gdGhlIGZpbGV1cGxvYWQgQVBJLlxuICAgIC8vIEJ5IGRlZmF1bHQsIGZpbGVzIGFkZGVkIHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgcGFzdGUsIGRyYWcgJiBkcm9wIG9yXG4gICAgLy8gXCJhZGRcIiBtZXRob2QgYXJlIHVwbG9hZGVkIGltbWVkaWF0ZWx5LCBidXQgaXQgaXMgcG9zc2libGUgdG8gb3ZlcnJpZGVcbiAgICAvLyB0aGUgXCJhZGRcIiBjYWxsYmFjayBvcHRpb24gdG8gcXVldWUgZmlsZSB1cGxvYWRzLlxuICAgICQud2lkZ2V0KCdibHVlaW1wLmZpbGV1cGxvYWQnLCB7XG5cbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgLy8gVGhlIGRyb3AgdGFyZ2V0IGVsZW1lbnQocyksIGJ5IHRoZSBkZWZhdWx0IHRoZSBjb21wbGV0ZSBkb2N1bWVudC5cbiAgICAgICAgICAgIC8vIFNldCB0byBudWxsIHRvIGRpc2FibGUgZHJhZyAmIGRyb3Agc3VwcG9ydDpcbiAgICAgICAgICAgIGRyb3Bab25lOiAkKGRvY3VtZW50KSxcbiAgICAgICAgICAgIC8vIFRoZSBwYXN0ZSB0YXJnZXQgZWxlbWVudChzKSwgYnkgdGhlIGRlZmF1bHQgdGhlIGNvbXBsZXRlIGRvY3VtZW50LlxuICAgICAgICAgICAgLy8gU2V0IHRvIG51bGwgdG8gZGlzYWJsZSBwYXN0ZSBzdXBwb3J0OlxuICAgICAgICAgICAgcGFzdGVab25lOiAkKGRvY3VtZW50KSxcbiAgICAgICAgICAgIC8vIFRoZSBmaWxlIGlucHV0IGZpZWxkKHMpLCB0aGF0IGFyZSBsaXN0ZW5lZCB0byBmb3IgY2hhbmdlIGV2ZW50cy5cbiAgICAgICAgICAgIC8vIElmIHVuZGVmaW5lZCwgaXQgaXMgc2V0IHRvIHRoZSBmaWxlIGlucHV0IGZpZWxkcyBpbnNpZGVcbiAgICAgICAgICAgIC8vIG9mIHRoZSB3aWRnZXQgZWxlbWVudCBvbiBwbHVnaW4gaW5pdGlhbGl6YXRpb24uXG4gICAgICAgICAgICAvLyBTZXQgdG8gbnVsbCB0byBkaXNhYmxlIHRoZSBjaGFuZ2UgbGlzdGVuZXIuXG4gICAgICAgICAgICBmaWxlSW5wdXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIC8vIEJ5IGRlZmF1bHQsIHRoZSBmaWxlIGlucHV0IGZpZWxkIGlzIHJlcGxhY2VkIHdpdGggYSBjbG9uZSBhZnRlclxuICAgICAgICAgICAgLy8gZWFjaCBpbnB1dCBmaWVsZCBjaGFuZ2UgZXZlbnQuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGlmcmFtZSB0cmFuc3BvcnRcbiAgICAgICAgICAgIC8vIHF1ZXVlcyBhbmQgYWxsb3dzIGNoYW5nZSBldmVudHMgdG8gYmUgZmlyZWQgZm9yIHRoZSBzYW1lIGZpbGVcbiAgICAgICAgICAgIC8vIHNlbGVjdGlvbiwgYnV0IGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGZhbHNlOlxuICAgICAgICAgICAgcmVwbGFjZUZpbGVJbnB1dDogdHJ1ZSxcbiAgICAgICAgICAgIC8vIFRoZSBwYXJhbWV0ZXIgbmFtZSBmb3IgdGhlIGZpbGUgZm9ybSBkYXRhICh0aGUgcmVxdWVzdCBhcmd1bWVudCBuYW1lKS5cbiAgICAgICAgICAgIC8vIElmIHVuZGVmaW5lZCBvciBlbXB0eSwgdGhlIG5hbWUgcHJvcGVydHkgb2YgdGhlIGZpbGUgaW5wdXQgZmllbGQgaXNcbiAgICAgICAgICAgIC8vIHVzZWQsIG9yIFwiZmlsZXNbXVwiIGlmIHRoZSBmaWxlIGlucHV0IG5hbWUgcHJvcGVydHkgaXMgYWxzbyBlbXB0eSxcbiAgICAgICAgICAgIC8vIGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzOlxuICAgICAgICAgICAgcGFyYW1OYW1lOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAvLyBCeSBkZWZhdWx0LCBlYWNoIGZpbGUgb2YgYSBzZWxlY3Rpb24gaXMgdXBsb2FkZWQgdXNpbmcgYW4gaW5kaXZpZHVhbFxuICAgICAgICAgICAgLy8gcmVxdWVzdCBmb3IgWEhSIHR5cGUgdXBsb2Fkcy4gU2V0IHRvIGZhbHNlIHRvIHVwbG9hZCBmaWxlXG4gICAgICAgICAgICAvLyBzZWxlY3Rpb25zIGluIG9uZSByZXF1ZXN0IGVhY2g6XG4gICAgICAgICAgICBzaW5nbGVGaWxlVXBsb2FkczogdHJ1ZSxcbiAgICAgICAgICAgIC8vIFRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZmlsZXMgdXBsb2FkZWQgd2l0aCBvbmUgWEhSIHJlcXVlc3QsXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMDpcbiAgICAgICAgICAgIGxpbWl0TXVsdGlGaWxlVXBsb2FkczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBvcHRpb24gbGltaXRzIHRoZSBudW1iZXIgb2YgZmlsZXMgdXBsb2FkZWQgd2l0aCBvbmVcbiAgICAgICAgICAgIC8vIFhIUiByZXF1ZXN0IHRvIGtlZXAgdGhlIHJlcXVlc3Qgc2l6ZSB1bmRlciBvciBlcXVhbCB0byB0aGUgZGVmaW5lZFxuICAgICAgICAgICAgLy8gbGltaXQgaW4gYnl0ZXM6XG4gICAgICAgICAgICBsaW1pdE11bHRpRmlsZVVwbG9hZFNpemU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIC8vIE11bHRpcGFydCBmaWxlIHVwbG9hZHMgYWRkIGEgbnVtYmVyIG9mIGJ5dGVzIHRvIGVhY2ggdXBsb2FkZWQgZmlsZSxcbiAgICAgICAgICAgIC8vIHRoZXJlZm9yZSB0aGUgZm9sbG93aW5nIG9wdGlvbiBhZGRzIGFuIG92ZXJoZWFkIGZvciBlYWNoIGZpbGUgdXNlZFxuICAgICAgICAgICAgLy8gaW4gdGhlIGxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZSBjb25maWd1cmF0aW9uOlxuICAgICAgICAgICAgbGltaXRNdWx0aUZpbGVVcGxvYWRTaXplT3ZlcmhlYWQ6IDUxMixcbiAgICAgICAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0cnVlIHRvIGlzc3VlIGFsbCBmaWxlIHVwbG9hZCByZXF1ZXN0c1xuICAgICAgICAgICAgLy8gaW4gYSBzZXF1ZW50aWFsIG9yZGVyOlxuICAgICAgICAgICAgc2VxdWVudGlhbFVwbG9hZHM6IGZhbHNlLFxuICAgICAgICAgICAgLy8gVG8gbGltaXQgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IHVwbG9hZHMsXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMDpcbiAgICAgICAgICAgIGxpbWl0Q29uY3VycmVudFVwbG9hZHM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0cnVlIHRvIGZvcmNlIGlmcmFtZSB0cmFuc3BvcnQgdXBsb2FkczpcbiAgICAgICAgICAgIGZvcmNlSWZyYW1lVHJhbnNwb3J0OiBmYWxzZSxcbiAgICAgICAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0aGUgbG9jYXRpb24gb2YgYSByZWRpcmVjdCB1cmwgb24gdGhlXG4gICAgICAgICAgICAvLyBvcmlnaW4gc2VydmVyLCBmb3IgY3Jvc3MtZG9tYWluIGlmcmFtZSB0cmFuc3BvcnQgdXBsb2FkczpcbiAgICAgICAgICAgIHJlZGlyZWN0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAvLyBUaGUgcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSByZWRpcmVjdCB1cmwsIHNlbnQgYXMgcGFydCBvZiB0aGUgZm9ybVxuICAgICAgICAgICAgLy8gZGF0YSBhbmQgc2V0IHRvICdyZWRpcmVjdCcgaWYgdGhpcyBvcHRpb24gaXMgZW1wdHk6XG4gICAgICAgICAgICByZWRpcmVjdFBhcmFtTmFtZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgLy8gU2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIHRoZSBsb2NhdGlvbiBvZiBhIHBvc3RNZXNzYWdlIHdpbmRvdyxcbiAgICAgICAgICAgIC8vIHRvIGVuYWJsZSBwb3N0TWVzc2FnZSB0cmFuc3BvcnQgdXBsb2FkczpcbiAgICAgICAgICAgIHBvc3RNZXNzYWdlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAvLyBCeSBkZWZhdWx0LCBYSFIgZmlsZSB1cGxvYWRzIGFyZSBzZW50IGFzIG11bHRpcGFydC9mb3JtLWRhdGEuXG4gICAgICAgICAgICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCBpcyBhbHdheXMgdXNpbmcgbXVsdGlwYXJ0L2Zvcm0tZGF0YS5cbiAgICAgICAgICAgIC8vIFNldCB0byBmYWxzZSB0byBlbmFibGUgbm9uLW11bHRpcGFydCBYSFIgdXBsb2FkczpcbiAgICAgICAgICAgIG11bHRpcGFydDogdHJ1ZSxcbiAgICAgICAgICAgIC8vIFRvIHVwbG9hZCBsYXJnZSBmaWxlcyBpbiBzbWFsbGVyIGNodW5rcywgc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uXG4gICAgICAgICAgICAvLyB0byBhIHByZWZlcnJlZCBtYXhpbXVtIGNodW5rIHNpemUuIElmIHNldCB0byAwLCBudWxsIG9yIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIC8vIG9yIHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHJlcXVpcmVkIEJsb2IgQVBJLCBmaWxlcyB3aWxsXG4gICAgICAgICAgICAvLyBiZSB1cGxvYWRlZCBhcyBhIHdob2xlLlxuICAgICAgICAgICAgbWF4Q2h1bmtTaXplOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAvLyBXaGVuIGEgbm9uLW11bHRpcGFydCB1cGxvYWQgb3IgYSBjaHVua2VkIG11bHRpcGFydCB1cGxvYWQgaGFzIGJlZW5cbiAgICAgICAgICAgIC8vIGFib3J0ZWQsIHRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlc3VtZSB0aGUgdXBsb2FkIGJ5IHNldHRpbmdcbiAgICAgICAgICAgIC8vIGl0IHRvIHRoZSBzaXplIG9mIHRoZSBhbHJlYWR5IHVwbG9hZGVkIGJ5dGVzLiBUaGlzIG9wdGlvbiBpcyBtb3N0XG4gICAgICAgICAgICAvLyB1c2VmdWwgd2hlbiBtb2RpZnlpbmcgdGhlIG9wdGlvbnMgb2JqZWN0IGluc2lkZSBvZiB0aGUgXCJhZGRcIiBvclxuICAgICAgICAgICAgLy8gXCJzZW5kXCIgY2FsbGJhY2tzLCBhcyB0aGUgb3B0aW9ucyBhcmUgY2xvbmVkIGZvciBlYWNoIGZpbGUgdXBsb2FkLlxuICAgICAgICAgICAgdXBsb2FkZWRCeXRlczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCwgZmFpbGVkIChhYm9ydCBvciBlcnJvcikgZmlsZSB1cGxvYWRzIGFyZSByZW1vdmVkIGZyb20gdGhlXG4gICAgICAgICAgICAvLyBnbG9iYWwgcHJvZ3Jlc3MgY2FsY3VsYXRpb24uIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byBmYWxzZSB0b1xuICAgICAgICAgICAgLy8gcHJldmVudCByZWNhbGN1bGF0aW5nIHRoZSBnbG9iYWwgcHJvZ3Jlc3MgZGF0YTpcbiAgICAgICAgICAgIHJlY2FsY3VsYXRlUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgICAvLyBJbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgdG8gY2FsY3VsYXRlIGFuZCB0cmlnZ2VyIHByb2dyZXNzIGV2ZW50czpcbiAgICAgICAgICAgIHByb2dyZXNzSW50ZXJ2YWw6IDEwMCxcbiAgICAgICAgICAgIC8vIEludGVydmFsIGluIG1pbGxpc2Vjb25kcyB0byBjYWxjdWxhdGUgcHJvZ3Jlc3MgYml0cmF0ZTpcbiAgICAgICAgICAgIGJpdHJhdGVJbnRlcnZhbDogNTAwLFxuICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCwgdXBsb2FkcyBhcmUgc3RhcnRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYWRkaW5nIGZpbGVzOlxuICAgICAgICAgICAgYXV0b1VwbG9hZDogdHJ1ZSxcblxuICAgICAgICAgICAgLy8gRXJyb3IgYW5kIGluZm8gbWVzc2FnZXM6XG4gICAgICAgICAgICBtZXNzYWdlczoge1xuICAgICAgICAgICAgICAgIHVwbG9hZGVkQnl0ZXM6ICdVcGxvYWRlZCBieXRlcyBleGNlZWQgZmlsZSBzaXplJ1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy8gVHJhbnNsYXRpb24gZnVuY3Rpb24sIGdldHMgdGhlIG1lc3NhZ2Uga2V5IHRvIGJlIHRyYW5zbGF0ZWRcbiAgICAgICAgICAgIC8vIGFuZCBhbiBvYmplY3Qgd2l0aCBjb250ZXh0IHNwZWNpZmljIGRhdGEgYXMgYXJndW1lbnRzOlxuICAgICAgICAgICAgaTE4bjogZnVuY3Rpb24gKG1lc3NhZ2UsIGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gdGhpcy5tZXNzYWdlc1ttZXNzYWdlXSB8fCBtZXNzYWdlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgJC5lYWNoKGNvbnRleHQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKCd7JyArIGtleSArICd9JywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvLyBBZGRpdGlvbmFsIGZvcm0gZGF0YSB0byBiZSBzZW50IGFsb25nIHdpdGggdGhlIGZpbGUgdXBsb2FkcyBjYW4gYmUgc2V0XG4gICAgICAgICAgICAvLyB1c2luZyB0aGlzIG9wdGlvbiwgd2hpY2ggYWNjZXB0cyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggbmFtZSBhbmRcbiAgICAgICAgICAgIC8vIHZhbHVlIHByb3BlcnRpZXMsIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHN1Y2ggYW4gYXJyYXksIGEgRm9ybURhdGFcbiAgICAgICAgICAgIC8vIG9iamVjdCAoZm9yIFhIUiBmaWxlIHVwbG9hZHMpLCBvciBhIHNpbXBsZSBvYmplY3QuXG4gICAgICAgICAgICAvLyBUaGUgZm9ybSBvZiB0aGUgZmlyc3QgZmlsZUlucHV0IGlzIGdpdmVuIGFzIHBhcmFtZXRlciB0byB0aGUgZnVuY3Rpb246XG4gICAgICAgICAgICBmb3JtRGF0YTogZnVuY3Rpb24gKGZvcm0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybS5zZXJpYWxpemVBcnJheSgpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy8gVGhlIGFkZCBjYWxsYmFjayBpcyBpbnZva2VkIGFzIHNvb24gYXMgZmlsZXMgYXJlIGFkZGVkIHRvIHRoZSBmaWxldXBsb2FkXG4gICAgICAgICAgICAvLyB3aWRnZXQgKHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgZHJhZyAmIGRyb3AsIHBhc3RlIG9yIGFkZCBBUEkgY2FsbCkuXG4gICAgICAgICAgICAvLyBJZiB0aGUgc2luZ2xlRmlsZVVwbG9hZHMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoaXMgY2FsbGJhY2sgd2lsbCBiZVxuICAgICAgICAgICAgLy8gY2FsbGVkIG9uY2UgZm9yIGVhY2ggZmlsZSBpbiB0aGUgc2VsZWN0aW9uIGZvciBYSFIgZmlsZSB1cGxvYWRzLCBlbHNlXG4gICAgICAgICAgICAvLyBvbmNlIGZvciBlYWNoIGZpbGUgc2VsZWN0aW9uLlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIFRoZSB1cGxvYWQgc3RhcnRzIHdoZW4gdGhlIHN1Ym1pdCBtZXRob2QgaXMgaW52b2tlZCBvbiB0aGUgZGF0YSBwYXJhbWV0ZXIuXG4gICAgICAgICAgICAvLyBUaGUgZGF0YSBvYmplY3QgY29udGFpbnMgYSBmaWxlcyBwcm9wZXJ0eSBob2xkaW5nIHRoZSBhZGRlZCBmaWxlc1xuICAgICAgICAgICAgLy8gYW5kIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgcGx1Z2luIG9wdGlvbnMgYXMgd2VsbCBhcyBkZWZpbmUgYWpheCBzZXR0aW5ncy5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBMaXN0ZW5lcnMgZm9yIHRoaXMgY2FsbGJhY2sgY2FuIGFsc28gYmUgYm91bmQgdGhlIGZvbGxvd2luZyB3YXk6XG4gICAgICAgICAgICAvLyAuYmluZCgnZmlsZXVwbG9hZGFkZCcsIGZ1bmMpO1xuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIGRhdGEuc3VibWl0KCkgcmV0dXJucyBhIFByb21pc2Ugb2JqZWN0IGFuZCBhbGxvd3MgdG8gYXR0YWNoIGFkZGl0aW9uYWxcbiAgICAgICAgICAgIC8vIGhhbmRsZXJzIHVzaW5nIGpRdWVyeSdzIERlZmVycmVkIGNhbGxiYWNrczpcbiAgICAgICAgICAgIC8vIGRhdGEuc3VibWl0KCkuZG9uZShmdW5jKS5mYWlsKGZ1bmMpLmFsd2F5cyhmdW5jKTtcbiAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmF1dG9VcGxvYWQgfHwgKGRhdGEuYXV0b1VwbG9hZCAhPT0gZmFsc2UgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmlsZXVwbG9hZCgnb3B0aW9uJywgJ2F1dG9VcGxvYWQnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wcm9jZXNzKCkuZG9uZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnN1Ym1pdCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvLyBPdGhlciBjYWxsYmFja3M6XG5cbiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3VibWl0IGV2ZW50IG9mIGVhY2ggZmlsZSB1cGxvYWQ6XG4gICAgICAgICAgICAvLyBzdWJtaXQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRzdWJtaXQnLCBmdW5jKTtcblxuICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdGFydCBvZiBlYWNoIGZpbGUgdXBsb2FkIHJlcXVlc3Q6XG4gICAgICAgICAgICAvLyBzZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2Fkc2VuZCcsIGZ1bmMpO1xuXG4gICAgICAgICAgICAvLyBDYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCB1cGxvYWRzOlxuICAgICAgICAgICAgLy8gZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGRvbmUnLCBmdW5jKTtcblxuICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIHVwbG9hZHM6XG4gICAgICAgICAgICAvLyBmYWlsOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2FkZmFpbCcsIGZ1bmMpO1xuXG4gICAgICAgICAgICAvLyBDYWxsYmFjayBmb3IgY29tcGxldGVkIChzdWNjZXNzLCBhYm9ydCBvciBlcnJvcikgcmVxdWVzdHM6XG4gICAgICAgICAgICAvLyBhbHdheXM6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRhbHdheXMnLCBmdW5jKTtcblxuICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZCBwcm9ncmVzcyBldmVudHM6XG4gICAgICAgICAgICAvLyBwcm9ncmVzczogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZHByb2dyZXNzJywgZnVuYyk7XG5cbiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciBnbG9iYWwgdXBsb2FkIHByb2dyZXNzIGV2ZW50czpcbiAgICAgICAgICAgIC8vIHByb2dyZXNzYWxsOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2FkcHJvZ3Jlc3NhbGwnLCBmdW5jKTtcblxuICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZHMgc3RhcnQsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAgICAgICAvLyBzdGFydDogZnVuY3Rpb24gKGUpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZHN0YXJ0JywgZnVuYyk7XG5cbiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciB1cGxvYWRzIHN0b3AsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RvcCBldmVudDpcbiAgICAgICAgICAgIC8vIHN0b3A6IGZ1bmN0aW9uIChlKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRzdG9wJywgZnVuYyk7XG5cbiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciBjaGFuZ2UgZXZlbnRzIG9mIHRoZSBmaWxlSW5wdXQocyk6XG4gICAgICAgICAgICAvLyBjaGFuZ2U6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRjaGFuZ2UnLCBmdW5jKTtcblxuICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHBhc3RlIGV2ZW50cyB0byB0aGUgcGFzdGVab25lKHMpOlxuICAgICAgICAgICAgLy8gcGFzdGU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRwYXN0ZScsIGZ1bmMpO1xuXG4gICAgICAgICAgICAvLyBDYWxsYmFjayBmb3IgZHJvcCBldmVudHMgb2YgdGhlIGRyb3Bab25lKHMpOlxuICAgICAgICAgICAgLy8gZHJvcDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGRyb3AnLCBmdW5jKTtcblxuICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIGRyYWdvdmVyIGV2ZW50cyBvZiB0aGUgZHJvcFpvbmUocyk6XG4gICAgICAgICAgICAvLyBkcmFnb3ZlcjogZnVuY3Rpb24gKGUpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGRyYWdvdmVyJywgZnVuYyk7XG5cbiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdDpcbiAgICAgICAgICAgIC8vIGNodW5rc2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGNodW5rc2VuZCcsIGZ1bmMpO1xuXG4gICAgICAgICAgICAvLyBDYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBjaHVuayB1cGxvYWRzOlxuICAgICAgICAgICAgLy8gY2h1bmtkb25lOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2FkY2h1bmtkb25lJywgZnVuYyk7XG5cbiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciBmYWlsZWQgKGFib3J0IG9yIGVycm9yKSBjaHVuayB1cGxvYWRzOlxuICAgICAgICAgICAgLy8gY2h1bmtmYWlsOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2FkY2h1bmtmYWlsJywgZnVuYyk7XG5cbiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciBjb21wbGV0ZWQgKHN1Y2Nlc3MsIGFib3J0IG9yIGVycm9yKSBjaHVuayB1cGxvYWQgcmVxdWVzdHM6XG4gICAgICAgICAgICAvLyBjaHVua2Fsd2F5czogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGNodW5rYWx3YXlzJywgZnVuYyk7XG5cbiAgICAgICAgICAgIC8vIFRoZSBwbHVnaW4gb3B0aW9ucyBhcmUgdXNlZCBhcyBzZXR0aW5ncyBvYmplY3QgZm9yIHRoZSBhamF4IGNhbGxzLlxuICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgalF1ZXJ5IGFqYXggc2V0dGluZ3MgcmVxdWlyZWQgZm9yIHRoZSBmaWxlIHVwbG9hZHM6XG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXG4gICAgICAgICAgICBjb250ZW50VHlwZTogZmFsc2UsXG4gICAgICAgICAgICBjYWNoZTogZmFsc2VcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBBIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0IHJlcXVpcmUgcmVpbml0aWFsaXppbmcgZXZlbnQgbGlzdGVuZXJzIGFuZC9vclxuICAgICAgICAvLyBzcGVjaWFsIGluaXRpYWxpemF0aW9uIGNvZGU6XG4gICAgICAgIF9zcGVjaWFsT3B0aW9uczogW1xuICAgICAgICAgICAgJ2ZpbGVJbnB1dCcsXG4gICAgICAgICAgICAnZHJvcFpvbmUnLFxuICAgICAgICAgICAgJ3Bhc3RlWm9uZScsXG4gICAgICAgICAgICAnbXVsdGlwYXJ0JyxcbiAgICAgICAgICAgICdmb3JjZUlmcmFtZVRyYW5zcG9ydCdcbiAgICAgICAgXSxcblxuICAgICAgICBfYmxvYlNsaWNlOiAkLnN1cHBvcnQuYmxvYlNsaWNlICYmIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzbGljZSA9IHRoaXMuc2xpY2UgfHwgdGhpcy53ZWJraXRTbGljZSB8fCB0aGlzLm1velNsaWNlO1xuICAgICAgICAgICAgcmV0dXJuIHNsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX0JpdHJhdGVUaW1lcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSAoKERhdGUubm93KSA/IERhdGUubm93KCkgOiAobmV3IERhdGUoKSkuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGVkID0gMDtcbiAgICAgICAgICAgIHRoaXMuYml0cmF0ZSA9IDA7XG4gICAgICAgICAgICB0aGlzLmdldEJpdHJhdGUgPSBmdW5jdGlvbiAobm93LCBsb2FkZWQsIGludGVydmFsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRpbWVEaWZmID0gbm93IC0gdGhpcy50aW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJpdHJhdGUgfHwgIWludGVydmFsIHx8IHRpbWVEaWZmID4gaW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iaXRyYXRlID0gKGxvYWRlZCAtIHRoaXMubG9hZGVkKSAqICgxMDAwIC8gdGltZURpZmYpICogODtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSBsb2FkZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gbm93O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5iaXRyYXRlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcblxuICAgICAgICBfaXNYSFJVcGxvYWQ6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gIW9wdGlvbnMuZm9yY2VJZnJhbWVUcmFuc3BvcnQgJiZcbiAgICAgICAgICAgICAgICAoKCFvcHRpb25zLm11bHRpcGFydCAmJiAkLnN1cHBvcnQueGhyRmlsZVVwbG9hZCkgfHxcbiAgICAgICAgICAgICAgICAkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkKTtcbiAgICAgICAgfSxcblxuICAgICAgICBfZ2V0Rm9ybURhdGE6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgZm9ybURhdGE7XG4gICAgICAgICAgICBpZiAoJC50eXBlKG9wdGlvbnMuZm9ybURhdGEpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZm9ybURhdGEob3B0aW9ucy5mb3JtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgkLmlzQXJyYXkob3B0aW9ucy5mb3JtRGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5mb3JtRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgkLnR5cGUob3B0aW9ucy5mb3JtRGF0YSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgZm9ybURhdGEgPSBbXTtcbiAgICAgICAgICAgICAgICAkLmVhY2gob3B0aW9ucy5mb3JtRGF0YSwgZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLnB1c2goe25hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZX0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSxcblxuICAgICAgICBfZ2V0VG90YWw6IGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICAgICAgdmFyIHRvdGFsID0gMDtcbiAgICAgICAgICAgICQuZWFjaChmaWxlcywgZnVuY3Rpb24gKGluZGV4LCBmaWxlKSB7XG4gICAgICAgICAgICAgICAgdG90YWwgKz0gZmlsZS5zaXplIHx8IDE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0b3RhbDtcbiAgICAgICAgfSxcblxuICAgICAgICBfaW5pdFByb2dyZXNzT2JqZWN0OiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgcHJvZ3Jlc3MgPSB7XG4gICAgICAgICAgICAgICAgbG9hZGVkOiAwLFxuICAgICAgICAgICAgICAgIHRvdGFsOiAwLFxuICAgICAgICAgICAgICAgIGJpdHJhdGU6IDBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAob2JqLl9wcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICQuZXh0ZW5kKG9iai5fcHJvZ3Jlc3MsIHByb2dyZXNzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb2JqLl9wcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIF9pbml0UmVzcG9uc2VPYmplY3Q6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBwcm9wO1xuICAgICAgICAgICAgaWYgKG9iai5fcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHByb3AgaW4gb2JqLl9yZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLl9yZXNwb25zZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9iai5fcmVzcG9uc2VbcHJvcF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9iai5fcmVzcG9uc2UgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBfb25Qcm9ncmVzczogZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChlLmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgbm93ID0gKChEYXRlLm5vdykgPyBEYXRlLm5vdygpIDogKG5ldyBEYXRlKCkpLmdldFRpbWUoKSksXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlZDtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5fdGltZSAmJiBkYXRhLnByb2dyZXNzSW50ZXJ2YWwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChub3cgLSBkYXRhLl90aW1lIDwgZGF0YS5wcm9ncmVzc0ludGVydmFsKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZS5sb2FkZWQgIT09IGUudG90YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkYXRhLl90aW1lID0gbm93O1xuICAgICAgICAgICAgICAgIGxvYWRlZCA9IE1hdGguZmxvb3IoXG4gICAgICAgICAgICAgICAgICAgIGUubG9hZGVkIC8gZS50b3RhbCAqIChkYXRhLmNodW5rU2l6ZSB8fCBkYXRhLl9wcm9ncmVzcy50b3RhbClcbiAgICAgICAgICAgICAgICApICsgKGRhdGEudXBsb2FkZWRCeXRlcyB8fCAwKTtcbiAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGRpZmZlcmVuY2UgZnJvbSB0aGUgcHJldmlvdXNseSBsb2FkZWQgc3RhdGVcbiAgICAgICAgICAgICAgICAvLyB0byB0aGUgZ2xvYmFsIGxvYWRlZCBjb3VudGVyOlxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCArPSAobG9hZGVkIC0gZGF0YS5fcHJvZ3Jlc3MubG9hZGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzcy5iaXRyYXRlID0gdGhpcy5fYml0cmF0ZVRpbWVyLmdldEJpdHJhdGUoXG4gICAgICAgICAgICAgICAgICAgIG5vdyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkLFxuICAgICAgICAgICAgICAgICAgICBkYXRhLmJpdHJhdGVJbnRlcnZhbFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZGF0YS5fcHJvZ3Jlc3MubG9hZGVkID0gZGF0YS5sb2FkZWQgPSBsb2FkZWQ7XG4gICAgICAgICAgICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IGRhdGEuX2JpdHJhdGVUaW1lci5nZXRCaXRyYXRlKFxuICAgICAgICAgICAgICAgICAgICBub3csXG4gICAgICAgICAgICAgICAgICAgIGxvYWRlZCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5iaXRyYXRlSW50ZXJ2YWxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgYSBjdXN0b20gcHJvZ3Jlc3MgZXZlbnQgd2l0aCBhIHRvdGFsIGRhdGEgcHJvcGVydHkgc2V0XG4gICAgICAgICAgICAgICAgLy8gdG8gdGhlIGZpbGUgc2l6ZShzKSBvZiB0aGUgY3VycmVudCB1cGxvYWQgYW5kIGEgbG9hZGVkIGRhdGFcbiAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0eSBjYWxjdWxhdGVkIGFjY29yZGluZ2x5OlxuICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoXG4gICAgICAgICAgICAgICAgICAgICdwcm9ncmVzcycsXG4gICAgICAgICAgICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge2RlbGVnYXRlZEV2ZW50OiBlfSksXG4gICAgICAgICAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgYSBnbG9iYWwgcHJvZ3Jlc3MgZXZlbnQgZm9yIGFsbCBjdXJyZW50IGZpbGUgdXBsb2FkcyxcbiAgICAgICAgICAgICAgICAvLyBpbmNsdWRpbmcgYWpheCBjYWxscyBxdWV1ZWQgZm9yIHNlcXVlbnRpYWwgZmlsZSB1cGxvYWRzOlxuICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoXG4gICAgICAgICAgICAgICAgICAgICdwcm9ncmVzc2FsbCcsXG4gICAgICAgICAgICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzYWxsJywge2RlbGVnYXRlZEV2ZW50OiBlfSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBfaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgICAgICAgICAgeGhyID0gb3B0aW9ucy54aHIgPyBvcHRpb25zLnhocigpIDogJC5hamF4U2V0dGluZ3MueGhyKCk7XG4gICAgICAgICAgICAvLyBBY2Nlc3NzIHRvIHRoZSBuYXRpdmUgWEhSIG9iamVjdCBpcyByZXF1aXJlZCB0byBhZGQgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAgICAgICAvLyBmb3IgdGhlIHVwbG9hZCBwcm9ncmVzcyBldmVudDpcbiAgICAgICAgICAgIGlmICh4aHIudXBsb2FkKSB7XG4gICAgICAgICAgICAgICAgJCh4aHIudXBsb2FkKS5iaW5kKCdwcm9ncmVzcycsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvZSA9IGUub3JpZ2luYWxFdmVudDtcbiAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcm9ncmVzcyBldmVudCBwcm9wZXJ0aWVzIGdldCBjb3BpZWQgb3ZlcjpcbiAgICAgICAgICAgICAgICAgICAgZS5sZW5ndGhDb21wdXRhYmxlID0gb2UubGVuZ3RoQ29tcHV0YWJsZTtcbiAgICAgICAgICAgICAgICAgICAgZS5sb2FkZWQgPSBvZS5sb2FkZWQ7XG4gICAgICAgICAgICAgICAgICAgIGUudG90YWwgPSBvZS50b3RhbDtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fb25Qcm9ncmVzcyhlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnhociA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhocjtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIF9pc0luc3RhbmNlT2Y6IGZ1bmN0aW9uICh0eXBlLCBvYmopIHtcbiAgICAgICAgICAgIC8vIENyb3NzLWZyYW1lIGluc3RhbmNlb2YgY2hlY2tcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIHR5cGUgKyAnXSc7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2luaXRYSFJEYXRhOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGZvcm1EYXRhLFxuICAgICAgICAgICAgICAgIGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdLFxuICAgICAgICAgICAgICAgIC8vIElnbm9yZSBub24tbXVsdGlwYXJ0IHNldHRpbmcgaWYgbm90IHN1cHBvcnRlZDpcbiAgICAgICAgICAgICAgICBtdWx0aXBhcnQgPSBvcHRpb25zLm11bHRpcGFydCB8fCAhJC5zdXBwb3J0LnhockZpbGVVcGxvYWQsXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lID0gJC50eXBlKG9wdGlvbnMucGFyYW1OYW1lKSA9PT0gJ2FycmF5JyA/XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyYW1OYW1lWzBdIDogb3B0aW9ucy5wYXJhbU5hbWU7XG4gICAgICAgICAgICBvcHRpb25zLmhlYWRlcnMgPSAkLmV4dGVuZCh7fSwgb3B0aW9ucy5oZWFkZXJzKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbnRlbnRSYW5nZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQ29udGVudC1SYW5nZSddID0gb3B0aW9ucy5jb250ZW50UmFuZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW11bHRpcGFydCB8fCBvcHRpb25zLmJsb2IgfHwgIXRoaXMuX2lzSW5zdGFuY2VPZignRmlsZScsIGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSAnYXR0YWNobWVudDsgZmlsZW5hbWU9XCInICtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJKGZpbGUubmFtZSkgKyAnXCInO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFtdWx0aXBhcnQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvbnRlbnRUeXBlID0gZmlsZS50eXBlIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZGF0YSA9IG9wdGlvbnMuYmxvYiB8fCBmaWxlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucG9zdE1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2luZG93LnBvc3RNZXNzYWdlIGRvZXMgbm90IGFsbG93IHNlbmRpbmcgRm9ybURhdGFcbiAgICAgICAgICAgICAgICAgICAgLy8gb2JqZWN0cywgc28gd2UganVzdCBhZGQgdGhlIEZpbGUvQmxvYiBvYmplY3RzIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmb3JtRGF0YSBhcnJheSBhbmQgbGV0IHRoZSBwb3N0TWVzc2FnZSB3aW5kb3dcbiAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIHRoZSBGb3JtRGF0YSBvYmplY3Qgb3V0IG9mIHRoaXMgYXJyYXk6XG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhID0gdGhpcy5fZ2V0Rm9ybURhdGEob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJsb2IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcmFtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy5ibG9iXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogKCQudHlwZShvcHRpb25zLnBhcmFtTmFtZSkgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyYW1OYW1lW2luZGV4XSkgfHwgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5faXNJbnN0YW5jZU9mKCdGb3JtRGF0YScsIG9wdGlvbnMuZm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YSA9IG9wdGlvbnMuZm9ybURhdGE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKHRoaXMuX2dldEZvcm1EYXRhKG9wdGlvbnMpLCBmdW5jdGlvbiAoaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZpZWxkLm5hbWUsIGZpZWxkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJsb2IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChwYXJhbU5hbWUsIG9wdGlvbnMuYmxvYiwgZmlsZS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNoZWNrIGFsbG93cyB0aGUgdGVzdHMgdG8gcnVuIHdpdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkdW1teSBvYmplY3RzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9pc0luc3RhbmNlT2YoJ0ZpbGUnLCBmaWxlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5faXNJbnN0YW5jZU9mKCdCbG9iJywgZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCQudHlwZShvcHRpb25zLnBhcmFtTmFtZSkgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnBhcmFtTmFtZVtpbmRleF0pIHx8IHBhcmFtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLnVwbG9hZE5hbWUgfHwgZmlsZS5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kYXRhID0gZm9ybURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBCbG9iIHJlZmVyZW5jZSBpcyBub3QgbmVlZGVkIGFueW1vcmUsIGZyZWUgbWVtb3J5OlxuICAgICAgICAgICAgb3B0aW9ucy5ibG9iID0gbnVsbDtcbiAgICAgICAgfSxcblxuICAgICAgICBfaW5pdElmcmFtZVNldHRpbmdzOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICAgICAgdmFyIHRhcmdldEhvc3QgPSAkKCc8YT48L2E+JykucHJvcCgnaHJlZicsIG9wdGlvbnMudXJsKS5wcm9wKCdob3N0Jyk7XG4gICAgICAgICAgICAvLyBTZXR0aW5nIHRoZSBkYXRhVHlwZSB0byBpZnJhbWUgZW5hYmxlcyB0aGUgaWZyYW1lIHRyYW5zcG9ydDpcbiAgICAgICAgICAgIG9wdGlvbnMuZGF0YVR5cGUgPSAnaWZyYW1lICcgKyAob3B0aW9ucy5kYXRhVHlwZSB8fCAnJyk7XG4gICAgICAgICAgICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCBhY2NlcHRzIGEgc2VyaWFsaXplZCBhcnJheSBhcyBmb3JtIGRhdGE6XG4gICAgICAgICAgICBvcHRpb25zLmZvcm1EYXRhID0gdGhpcy5fZ2V0Rm9ybURhdGEob3B0aW9ucyk7XG4gICAgICAgICAgICAvLyBBZGQgcmVkaXJlY3QgdXJsIHRvIGZvcm0gZGF0YSBvbiBjcm9zcy1kb21haW4gdXBsb2FkczpcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJlZGlyZWN0ICYmIHRhcmdldEhvc3QgJiYgdGFyZ2V0SG9zdCAhPT0gbG9jYXRpb24uaG9zdCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZm9ybURhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbnMucmVkaXJlY3RQYXJhbU5hbWUgfHwgJ3JlZGlyZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvbnMucmVkaXJlY3RcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBfaW5pdERhdGFTZXR0aW5nczogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2h1bmtlZFVwbG9hZChvcHRpb25zLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdFhIUkRhdGEob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdFByb2dyZXNzTGlzdGVuZXIob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgdGhlIGRhdGFUeXBlIHRvIHBvc3RtZXNzYWdlIGVuYWJsZXMgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIHBvc3RNZXNzYWdlIHRyYW5zcG9ydDpcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdwb3N0bWVzc2FnZSAnICsgKG9wdGlvbnMuZGF0YVR5cGUgfHwgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdElmcmFtZVNldHRpbmdzKG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIF9nZXRQYXJhbU5hbWU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCksXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lID0gb3B0aW9ucy5wYXJhbU5hbWU7XG4gICAgICAgICAgICBpZiAoIXBhcmFtTmFtZSkge1xuICAgICAgICAgICAgICAgIHBhcmFtTmFtZSA9IFtdO1xuICAgICAgICAgICAgICAgIGZpbGVJbnB1dC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gJCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBpbnB1dC5wcm9wKCduYW1lJykgfHwgJ2ZpbGVzW10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IChpbnB1dC5wcm9wKCdmaWxlcycpIHx8IFsxXSkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLnB1c2gobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpIC09IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcmFtTmFtZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lID0gW2ZpbGVJbnB1dC5wcm9wKCduYW1lJykgfHwgJ2ZpbGVzW10nXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCEkLmlzQXJyYXkocGFyYW1OYW1lKSkge1xuICAgICAgICAgICAgICAgIHBhcmFtTmFtZSA9IFtwYXJhbU5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtTmFtZTtcbiAgICAgICAgfSxcblxuICAgICAgICBfaW5pdEZvcm1TZXR0aW5nczogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIFJldHJpZXZlIG1pc3Npbmcgb3B0aW9ucyBmcm9tIHRoZSBpbnB1dCBmaWVsZCBhbmQgdGhlXG4gICAgICAgICAgICAvLyBhc3NvY2lhdGVkIGZvcm0sIGlmIGF2YWlsYWJsZTpcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5mb3JtIHx8ICFvcHRpb25zLmZvcm0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5mb3JtID0gJChvcHRpb25zLmZpbGVJbnB1dC5wcm9wKCdmb3JtJykpO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBnaXZlbiBmaWxlIGlucHV0IGRvZXNuJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGZvcm0sXG4gICAgICAgICAgICAgICAgLy8gdXNlIHRoZSBkZWZhdWx0IHdpZGdldCBmaWxlIGlucHV0J3MgZm9ybTpcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuZm9ybS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5mb3JtID0gJCh0aGlzLm9wdGlvbnMuZmlsZUlucHV0LnByb3AoJ2Zvcm0nKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucy5wYXJhbU5hbWUgPSB0aGlzLl9nZXRQYXJhbU5hbWUob3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMudXJsKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLmZvcm0ucHJvcCgnYWN0aW9uJykgfHwgbG9jYXRpb24uaHJlZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIG11c3QgYmUgXCJQT1NUXCIgb3IgXCJQVVRcIjpcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9IChvcHRpb25zLnR5cGUgfHxcbiAgICAgICAgICAgICAgICAoJC50eXBlKG9wdGlvbnMuZm9ybS5wcm9wKCdtZXRob2QnKSkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZm9ybS5wcm9wKCdtZXRob2QnKSkgfHwgJydcbiAgICAgICAgICAgICAgICApLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy50eXBlICE9PSAnUE9TVCcgJiYgb3B0aW9ucy50eXBlICE9PSAnUFVUJyAmJlxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgIT09ICdQQVRDSCcpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuZm9ybUFjY2VwdENoYXJzZXQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0ID0gb3B0aW9ucy5mb3JtLmF0dHIoJ2FjY2VwdC1jaGFyc2V0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2dldEFKQVhTZXR0aW5nczogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgZGF0YSk7XG4gICAgICAgICAgICB0aGlzLl9pbml0Rm9ybVNldHRpbmdzKG9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5faW5pdERhdGFTZXR0aW5ncyhvcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIGpRdWVyeSAxLjYgZG9lc24ndCBwcm92aWRlIC5zdGF0ZSgpLFxuICAgICAgICAvLyB3aGlsZSBqUXVlcnkgMS44KyByZW1vdmVkIC5pc1JlamVjdGVkKCkgYW5kIC5pc1Jlc29sdmVkKCk6XG4gICAgICAgIF9nZXREZWZlcnJlZFN0YXRlOiBmdW5jdGlvbiAoZGVmZXJyZWQpIHtcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZC5zdGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5zdGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRlZmVycmVkLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmVzb2x2ZWQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRlZmVycmVkLmlzUmVqZWN0ZWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmVqZWN0ZWQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICdwZW5kaW5nJztcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBNYXBzIGpxWEhSIGNhbGxiYWNrcyB0byB0aGUgZXF1aXZhbGVudFxuICAgICAgICAvLyBtZXRob2RzIG9mIHRoZSBnaXZlbiBQcm9taXNlIG9iamVjdDpcbiAgICAgICAgX2VuaGFuY2VQcm9taXNlOiBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICAgICAgcHJvbWlzZS5zdWNjZXNzID0gcHJvbWlzZS5kb25lO1xuICAgICAgICAgICAgcHJvbWlzZS5lcnJvciA9IHByb21pc2UuZmFpbDtcbiAgICAgICAgICAgIHByb21pc2UuY29tcGxldGUgPSBwcm9taXNlLmFsd2F5cztcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIENyZWF0ZXMgYW5kIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBlbmhhbmNlZCB3aXRoXG4gICAgICAgIC8vIHRoZSBqcVhIUiBtZXRob2RzIGFib3J0LCBzdWNjZXNzLCBlcnJvciBhbmQgY29tcGxldGU6XG4gICAgICAgIF9nZXRYSFJQcm9taXNlOiBmdW5jdGlvbiAocmVzb2x2ZU9yUmVqZWN0LCBjb250ZXh0LCBhcmdzKSB7XG4gICAgICAgICAgICB2YXIgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICAgICAgICAgIHByb21pc2UgPSBkZmQucHJvbWlzZSgpO1xuICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgdGhpcy5vcHRpb25zLmNvbnRleHQgfHwgcHJvbWlzZTtcbiAgICAgICAgICAgIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBkZmQucmVzb2x2ZVdpdGgoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc29sdmVPclJlamVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBkZmQucmVqZWN0V2l0aChjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb21pc2UuYWJvcnQgPSBkZmQucHJvbWlzZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBBZGRzIGNvbnZlbmllbmNlIG1ldGhvZHMgdG8gdGhlIGRhdGEgY2FsbGJhY2sgYXJndW1lbnQ6XG4gICAgICAgIF9hZGRDb252ZW5pZW5jZU1ldGhvZHM6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgICAgICAgICAgZ2V0UHJvbWlzZSA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLkRlZmVycmVkKCkucmVzb2x2ZVdpdGgodGhhdCwgYXJncykucHJvbWlzZSgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkYXRhLnByb2Nlc3MgPSBmdW5jdGlvbiAocmVzb2x2ZUZ1bmMsIHJlamVjdEZ1bmMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZUZ1bmMgfHwgcmVqZWN0RnVuYykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLl9wcm9jZXNzUXVldWUgPSB0aGlzLl9wcm9jZXNzUXVldWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuX3Byb2Nlc3NRdWV1ZSB8fCBnZXRQcm9taXNlKFt0aGlzXSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5lcnJvclRocm93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWplY3RXaXRoKHRoYXQsIFtkYXRhXSkucHJvbWlzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRQcm9taXNlKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKS5waXBlKHJlc29sdmVGdW5jLCByZWplY3RGdW5jKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NRdWV1ZSB8fCBnZXRQcm9taXNlKFt0aGlzXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGF0YS5zdWJtaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUoKSAhPT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuanFYSFIgPSB0aGlzLmpxWEhSID1cbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdWJtaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuRXZlbnQoJ3N1Ym1pdCcsIHtkZWxlZ2F0ZWRFdmVudDogZX0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICkgIT09IGZhbHNlKSAmJiB0aGF0Ll9vblNlbmQoZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmpxWEhSIHx8IHRoYXQuX2dldFhIUlByb21pc2UoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkYXRhLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmpxWEhSKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmpxWEhSLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JUaHJvd24gPSAnYWJvcnQnO1xuICAgICAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2ZhaWwnLCBudWxsLCB0aGlzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhhdC5fZ2V0WEhSUHJvbWlzZShmYWxzZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGF0YS5zdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5qcVhIUikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLmpxWEhSKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Byb2Nlc3NRdWV1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkYXRhLnByb2Nlc3NpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmpxWEhSICYmIHRoaXMuX3Byb2Nlc3NRdWV1ZSAmJiB0aGF0XG4gICAgICAgICAgICAgICAgICAgIC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpID09PSAncGVuZGluZyc7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGF0YS5wcm9ncmVzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGF0YS5yZXNwb25zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFBhcnNlcyB0aGUgUmFuZ2UgaGVhZGVyIGZyb20gdGhlIHNlcnZlciByZXNwb25zZVxuICAgICAgICAvLyBhbmQgcmV0dXJucyB0aGUgdXBsb2FkZWQgYnl0ZXM6XG4gICAgICAgIF9nZXRVcGxvYWRlZEJ5dGVzOiBmdW5jdGlvbiAoanFYSFIpIHtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCdSYW5nZScpLFxuICAgICAgICAgICAgICAgIHBhcnRzID0gcmFuZ2UgJiYgcmFuZ2Uuc3BsaXQoJy0nKSxcbiAgICAgICAgICAgICAgICB1cHBlckJ5dGVzUG9zID0gcGFydHMgJiYgcGFydHMubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChwYXJ0c1sxXSwgMTApO1xuICAgICAgICAgICAgcmV0dXJuIHVwcGVyQnl0ZXNQb3MgJiYgdXBwZXJCeXRlc1BvcyArIDE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gVXBsb2FkcyBhIGZpbGUgaW4gbXVsdGlwbGUsIHNlcXVlbnRpYWwgcmVxdWVzdHNcbiAgICAgICAgLy8gYnkgc3BsaXR0aW5nIHRoZSBmaWxlIHVwIGluIG11bHRpcGxlIGJsb2IgY2h1bmtzLlxuICAgICAgICAvLyBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0cnVlLCBvbmx5IHRlc3RzIGlmIHRoZSBmaWxlXG4gICAgICAgIC8vIHNob3VsZCBiZSB1cGxvYWRlZCBpbiBjaHVua3MsIGJ1dCBkb2VzIG5vdCBpbnZva2UgYW55XG4gICAgICAgIC8vIHVwbG9hZCByZXF1ZXN0czpcbiAgICAgICAgX2NodW5rZWRVcGxvYWQ6IGZ1bmN0aW9uIChvcHRpb25zLCB0ZXN0T25seSkge1xuICAgICAgICAgICAgb3B0aW9ucy51cGxvYWRlZEJ5dGVzID0gb3B0aW9ucy51cGxvYWRlZEJ5dGVzIHx8IDA7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgICAgICAgICAgZmlsZSA9IG9wdGlvbnMuZmlsZXNbMF0sXG4gICAgICAgICAgICAgICAgZnMgPSBmaWxlLnNpemUsXG4gICAgICAgICAgICAgICAgdWIgPSBvcHRpb25zLnVwbG9hZGVkQnl0ZXMsXG4gICAgICAgICAgICAgICAgbWNzID0gb3B0aW9ucy5tYXhDaHVua1NpemUgfHwgZnMsXG4gICAgICAgICAgICAgICAgc2xpY2UgPSB0aGlzLl9ibG9iU2xpY2UsXG4gICAgICAgICAgICAgICAgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICAgICAgICAgIHByb21pc2UgPSBkZmQucHJvbWlzZSgpLFxuICAgICAgICAgICAgICAgIGpxWEhSLFxuICAgICAgICAgICAgICAgIHVwbG9hZDtcbiAgICAgICAgICAgIGlmICghKHRoaXMuX2lzWEhSVXBsb2FkKG9wdGlvbnMpICYmIHNsaWNlICYmICh1YiB8fCBtY3MgPCBmcykpIHx8XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0ZXN0T25seSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHViID49IGZzKSB7XG4gICAgICAgICAgICAgICAgZmlsZS5lcnJvciA9IG9wdGlvbnMuaTE4bigndXBsb2FkZWRCeXRlcycpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRYSFJQcm9taXNlKFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICBbbnVsbCwgJ2Vycm9yJywgZmlsZS5lcnJvcl1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVGhlIGNodW5rIHVwbG9hZCBtZXRob2Q6XG4gICAgICAgICAgICB1cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xvbmUgdGhlIG9wdGlvbnMgb2JqZWN0IGZvciBlYWNoIGNodW5rIHVwbG9hZDpcbiAgICAgICAgICAgICAgICB2YXIgbyA9ICQuZXh0ZW5kKHt9LCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudExvYWRlZCA9IG8uX3Byb2dyZXNzLmxvYWRlZDtcbiAgICAgICAgICAgICAgICBvLmJsb2IgPSBzbGljZS5jYWxsKFxuICAgICAgICAgICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgICAgICAgICB1YixcbiAgICAgICAgICAgICAgICAgICAgdWIgKyBtY3MsXG4gICAgICAgICAgICAgICAgICAgIGZpbGUudHlwZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGN1cnJlbnQgY2h1bmsgc2l6ZSwgYXMgdGhlIGJsb2IgaXRzZWxmXG4gICAgICAgICAgICAgICAgLy8gd2lsbCBiZSBkZXJlZmVyZW5jZWQgYWZ0ZXIgZGF0YSBwcm9jZXNzaW5nOlxuICAgICAgICAgICAgICAgIG8uY2h1bmtTaXplID0gby5ibG9iLnNpemU7XG4gICAgICAgICAgICAgICAgLy8gRXhwb3NlIHRoZSBjaHVuayBieXRlcyBwb3NpdGlvbiByYW5nZTpcbiAgICAgICAgICAgICAgICBvLmNvbnRlbnRSYW5nZSA9ICdieXRlcyAnICsgdWIgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgICAodWIgKyBvLmNodW5rU2l6ZSAtIDEpICsgJy8nICsgZnM7XG4gICAgICAgICAgICAgICAgLy8gUHJvY2VzcyB0aGUgdXBsb2FkIGRhdGEgKHRoZSBibG9iIGFuZCBwb3RlbnRpYWwgZm9ybSBkYXRhKTpcbiAgICAgICAgICAgICAgICB0aGF0Ll9pbml0WEhSRGF0YShvKTtcbiAgICAgICAgICAgICAgICAvLyBBZGQgcHJvZ3Jlc3MgbGlzdGVuZXJzIGZvciB0aGlzIGNodW5rIHVwbG9hZDpcbiAgICAgICAgICAgICAgICB0aGF0Ll9pbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAgICAgICAgICBqcVhIUiA9ICgodGhhdC5fdHJpZ2dlcignY2h1bmtzZW5kJywgbnVsbCwgbykgIT09IGZhbHNlICYmICQuYWpheChvKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX2dldFhIUlByb21pc2UoZmFsc2UsIG8uY29udGV4dCkpXG4gICAgICAgICAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1YiA9IHRoYXQuX2dldFVwbG9hZGVkQnl0ZXMoanFYSFIpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHViICsgby5jaHVua1NpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgcHJvZ3Jlc3MgZXZlbnQgaWYgbm8gZmluYWwgcHJvZ3Jlc3MgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggbG9hZGVkIGVxdWFsaW5nIHRvdGFsIGhhcyBiZWVuIHRyaWdnZXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHRoaXMgY2h1bms6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudExvYWRlZCArIG8uY2h1bmtTaXplIC0gby5fcHJvZ3Jlc3MubG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fb25Qcm9ncmVzcygkLkV2ZW50KCdwcm9ncmVzcycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiB1YiAtIG8udXBsb2FkZWRCeXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw6IHViIC0gby51cGxvYWRlZEJ5dGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51cGxvYWRlZEJ5dGVzID0gby51cGxvYWRlZEJ5dGVzID0gdWI7XG4gICAgICAgICAgICAgICAgICAgICAgICBvLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8udGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBvLmpxWEhSID0ganFYSFI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2RvbmUnLCBudWxsLCBvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rYWx3YXlzJywgbnVsbCwgbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodWIgPCBmcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbGUgdXBsb2FkIG5vdCB5ZXQgY29tcGxldGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWUgd2l0aCB0aGUgbmV4dCBjaHVuazpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZkLnJlc29sdmVXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5mYWlsKGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8udGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBvLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2ZhaWwnLCBudWxsLCBvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rYWx3YXlzJywgbnVsbCwgbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZmQucmVqZWN0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2pxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bl1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuX2VuaGFuY2VQcm9taXNlKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ganFYSFIuYWJvcnQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB1cGxvYWQoKTtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICB9LFxuXG4gICAgICAgIF9iZWZvcmVTZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIHRoZSBzdGFydCBjYWxsYmFjayBpcyB0cmlnZ2VyZWQgd2hlbiBhbiB1cGxvYWQgc3RhcnRzXG4gICAgICAgICAgICAgICAgLy8gYW5kIG5vIG90aGVyIHVwbG9hZHMgYXJlIGN1cnJlbnRseSBydW5uaW5nLFxuICAgICAgICAgICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcignc3RhcnQnKTtcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGltZXIgZm9yIGdsb2JhbCBiaXRyYXRlIHByb2dyZXNzIGNhbGN1bGF0aW9uOlxuICAgICAgICAgICAgICAgIHRoaXMuX2JpdHJhdGVUaW1lciA9IG5ldyB0aGlzLl9CaXRyYXRlVGltZXIoKTtcbiAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZ2xvYmFsIHByb2dyZXNzIHZhbHVlczpcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgPSB0aGlzLl9wcm9ncmVzcy50b3RhbCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MuYml0cmF0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRhaW5lciBvYmplY3RzIGZvciB0aGUgLnJlc3BvbnNlKCkgYW5kXG4gICAgICAgICAgICAvLyAucHJvZ3Jlc3MoKSBtZXRob2RzIG9uIHRoZSBkYXRhIG9iamVjdCBhcmUgYXZhaWxhYmxlXG4gICAgICAgICAgICAvLyBhbmQgcmVzZXQgdG8gdGhlaXIgaW5pdGlhbCBzdGF0ZTpcbiAgICAgICAgICAgIHRoaXMuX2luaXRSZXNwb25zZU9iamVjdChkYXRhKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdChkYXRhKTtcbiAgICAgICAgICAgIGRhdGEuX3Byb2dyZXNzLmxvYWRlZCA9IGRhdGEubG9hZGVkID0gZGF0YS51cGxvYWRlZEJ5dGVzIHx8IDA7XG4gICAgICAgICAgICBkYXRhLl9wcm9ncmVzcy50b3RhbCA9IGRhdGEudG90YWwgPSB0aGlzLl9nZXRUb3RhbChkYXRhLmZpbGVzKSB8fCAxO1xuICAgICAgICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IDA7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUgKz0gMTtcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gZGF0YS5sb2FkZWQ7XG4gICAgICAgICAgICB0aGlzLl9wcm9ncmVzcy50b3RhbCArPSBkYXRhLnRvdGFsO1xuICAgICAgICB9LFxuXG4gICAgICAgIF9vbkRvbmU6IGZ1bmN0aW9uIChyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSLCBvcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgdG90YWwgPSBvcHRpb25zLl9wcm9ncmVzcy50b3RhbCxcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IG9wdGlvbnMuX3Jlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuX3Byb2dyZXNzLmxvYWRlZCA8IHRvdGFsKSB7XG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgcHJvZ3Jlc3MgZXZlbnQgaWYgbm8gZmluYWwgcHJvZ3Jlc3MgZXZlbnRcbiAgICAgICAgICAgICAgICAvLyB3aXRoIGxvYWRlZCBlcXVhbGluZyB0b3RhbCBoYXMgYmVlbiB0cmlnZ2VyZWQ6XG4gICAgICAgICAgICAgICAgdGhpcy5fb25Qcm9ncmVzcygkLkV2ZW50KCdwcm9ncmVzcycsIHtcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiB0b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgdG90YWw6IHRvdGFsXG4gICAgICAgICAgICAgICAgfSksIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzcG9uc2UucmVzdWx0ID0gb3B0aW9ucy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgICAgICByZXNwb25zZS50ZXh0U3RhdHVzID0gb3B0aW9ucy50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcbiAgICAgICAgICAgIHJlc3BvbnNlLmpxWEhSID0gb3B0aW9ucy5qcVhIUiA9IGpxWEhSO1xuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcignZG9uZScsIG51bGwsIG9wdGlvbnMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIF9vbkZhaWw6IGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24sIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IG9wdGlvbnMuX3Jlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVjYWxjdWxhdGVQcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZmFpbGVkIChlcnJvciBvciBhYm9ydCkgZmlsZSB1cGxvYWQgZnJvbVxuICAgICAgICAgICAgICAgIC8vIHRoZSBnbG9iYWwgcHJvZ3Jlc3MgY2FsY3VsYXRpb246XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkIC09IG9wdGlvbnMuX3Byb2dyZXNzLmxvYWRlZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzcy50b3RhbCAtPSBvcHRpb25zLl9wcm9ncmVzcy50b3RhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3BvbnNlLmpxWEhSID0gb3B0aW9ucy5qcVhIUiA9IGpxWEhSO1xuICAgICAgICAgICAgcmVzcG9uc2UudGV4dFN0YXR1cyA9IG9wdGlvbnMudGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7XG4gICAgICAgICAgICByZXNwb25zZS5lcnJvclRocm93biA9IG9wdGlvbnMuZXJyb3JUaHJvd24gPSBlcnJvclRocm93bjtcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoJ2ZhaWwnLCBudWxsLCBvcHRpb25zKTtcbiAgICAgICAgfSxcblxuICAgICAgICBfb25BbHdheXM6IGZ1bmN0aW9uIChqcVhIUm9yUmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUm9yRXJyb3IsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMgYW5kIGpxWEhSb3JFcnJvciBhcmUgYWRkZWQgdG8gdGhlXG4gICAgICAgICAgICAvLyBvcHRpb25zIG9iamVjdCB2aWEgZG9uZSBhbmQgZmFpbCBjYWxsYmFja3NcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoJ2Fsd2F5cycsIG51bGwsIG9wdGlvbnMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIF9vblNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICAgICAgICBpZiAoIWRhdGEuc3VibWl0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkQ29udmVuaWVuY2VNZXRob2RzKGUsIGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGpxWEhSLFxuICAgICAgICAgICAgICAgIGFib3J0ZWQsXG4gICAgICAgICAgICAgICAgc2xvdCxcbiAgICAgICAgICAgICAgICBwaXBlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGF0Ll9nZXRBSkFYU2V0dGluZ3MoZGF0YSksXG4gICAgICAgICAgICAgICAgc2VuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fc2VuZGluZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGltZXIgZm9yIGJpdHJhdGUgcHJvZ3Jlc3MgY2FsY3VsYXRpb246XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuX2JpdHJhdGVUaW1lciA9IG5ldyB0aGF0Ll9CaXRyYXRlVGltZXIoKTtcbiAgICAgICAgICAgICAgICAgICAganFYSFIgPSBqcVhIUiB8fCAoXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGFib3J0ZWQgfHwgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5FdmVudCgnc2VuZCcsIHtkZWxlZ2F0ZWRFdmVudDogZX0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICkgPT09IGZhbHNlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fZ2V0WEhSUHJvbWlzZShmYWxzZSwgb3B0aW9ucy5jb250ZXh0LCBhYm9ydGVkKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX2NodW5rZWRVcGxvYWQob3B0aW9ucykgfHwgJC5hamF4KG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICkuZG9uZShmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fb25Eb25lKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KS5mYWlsKGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX29uRmFpbChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KS5hbHdheXMoZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fb25BbHdheXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFJvclJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSb3JFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fc2VuZGluZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fYWN0aXZlIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyA+IHRoYXQuX3NlbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgbmV4dCBxdWV1ZWQgdXBsb2FkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaGFzIG5vdCBiZWVuIGFib3J0ZWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRTbG90ID0gdGhhdC5fc2xvdHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV4dFNsb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQuX2dldERlZmVycmVkU3RhdGUobmV4dFNsb3QpID09PSAncGVuZGluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTbG90LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTbG90ID0gdGhhdC5fc2xvdHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5fYWN0aXZlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHN0b3AgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gYWxsIHVwbG9hZHMgaGF2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlZW4gY29tcGxldGVkLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignc3RvcCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpxWEhSO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLl9iZWZvcmVTZW5kKGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZXF1ZW50aWFsVXBsb2FkcyB8fFxuICAgICAgICAgICAgICAgICAgICAodGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPD0gdGhpcy5fc2VuZGluZykpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHNsb3QgPSAkLkRlZmVycmVkKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Nsb3RzLnB1c2goc2xvdCk7XG4gICAgICAgICAgICAgICAgICAgIHBpcGUgPSBzbG90LnBpcGUoc2VuZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VxdWVuY2UgPSB0aGlzLl9zZXF1ZW5jZS5waXBlKHNlbmQsIHNlbmQpO1xuICAgICAgICAgICAgICAgICAgICBwaXBlID0gdGhpcy5fc2VxdWVuY2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgcGlwZWQgUHJvbWlzZSBvYmplY3QsIGVuaGFuY2VkIHdpdGggYW4gYWJvcnQgbWV0aG9kLFxuICAgICAgICAgICAgICAgIC8vIHdoaWNoIGlzIGRlbGVnYXRlZCB0byB0aGUganFYSFIgb2JqZWN0IG9mIHRoZSBjdXJyZW50IHVwbG9hZCxcbiAgICAgICAgICAgICAgICAvLyBhbmQganFYSFIgY2FsbGJhY2tzIG1hcHBlZCB0byB0aGUgZXF1aXZhbGVudCBQcm9taXNlIG1ldGhvZHM6XG4gICAgICAgICAgICAgICAgcGlwZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRlZCA9IFt1bmRlZmluZWQsICdhYm9ydCcsICdhYm9ydCddO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWpxWEhSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QucmVqZWN0V2l0aChvcHRpb25zLmNvbnRleHQsIGFib3J0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ganFYSFIuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbmhhbmNlUHJvbWlzZShwaXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZW5kKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX29uQWRkOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMsIGRhdGEpLFxuICAgICAgICAgICAgICAgIGZpbGVzID0gZGF0YS5maWxlcyxcbiAgICAgICAgICAgICAgICBmaWxlc0xlbmd0aCA9IGZpbGVzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBsaW1pdCA9IG9wdGlvbnMubGltaXRNdWx0aUZpbGVVcGxvYWRzLFxuICAgICAgICAgICAgICAgIGxpbWl0U2l6ZSA9IG9wdGlvbnMubGltaXRNdWx0aUZpbGVVcGxvYWRTaXplLFxuICAgICAgICAgICAgICAgIG92ZXJoZWFkID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemVPdmVyaGVhZCxcbiAgICAgICAgICAgICAgICBiYXRjaFNpemUgPSAwLFxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZSA9IHRoaXMuX2dldFBhcmFtTmFtZShvcHRpb25zKSxcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWVTZXQsXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lU2xpY2UsXG4gICAgICAgICAgICAgICAgZmlsZVNldCxcbiAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgIGogPSAwO1xuICAgICAgICAgICAgaWYgKGxpbWl0U2l6ZSAmJiAoIWZpbGVzTGVuZ3RoIHx8IGZpbGVzWzBdLnNpemUgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICBsaW1pdFNpemUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShvcHRpb25zLnNpbmdsZUZpbGVVcGxvYWRzIHx8IGxpbWl0IHx8IGxpbWl0U2l6ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuX2lzWEhSVXBsb2FkKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgZmlsZVNldCA9IFtmaWxlc107XG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lU2V0ID0gW3BhcmFtTmFtZV07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucy5zaW5nbGVGaWxlVXBsb2FkcyB8fCBsaW1pdFNpemUpICYmIGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgZmlsZVNldCA9IFtdO1xuICAgICAgICAgICAgICAgIHBhcmFtTmFtZVNldCA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWxlc0xlbmd0aDsgaSArPSBsaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICBmaWxlU2V0LnB1c2goZmlsZXMuc2xpY2UoaSwgaSArIGxpbWl0KSk7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZVNsaWNlID0gcGFyYW1OYW1lLnNsaWNlKGksIGkgKyBsaW1pdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFyYW1OYW1lU2xpY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWVTZXQucHVzaChwYXJhbU5hbWVTbGljZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5zaW5nbGVGaWxlVXBsb2FkcyAmJiBsaW1pdFNpemUpIHtcbiAgICAgICAgICAgICAgICBmaWxlU2V0ID0gW107XG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lU2V0ID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpbGVzTGVuZ3RoOyBpID0gaSArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYmF0Y2hTaXplICs9IGZpbGVzW2ldLnNpemUgKyBvdmVyaGVhZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgKyAxID09PSBmaWxlc0xlbmd0aCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYmF0Y2hTaXplICsgZmlsZXNbaSArIDFdLnNpemUgKyBvdmVyaGVhZCkgPiBsaW1pdFNpemUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbWl0ICYmIGkgKyAxIC0gaiA+PSBsaW1pdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTZXQucHVzaChmaWxlcy5zbGljZShqLCBpICsgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lU2xpY2UgPSBwYXJhbU5hbWUuc2xpY2UoaiwgaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJhbU5hbWVTbGljZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZVNldC5wdXNoKHBhcmFtTmFtZVNsaWNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoU2l6ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcmFtTmFtZVNldCA9IHBhcmFtTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEub3JpZ2luYWxGaWxlcyA9IGZpbGVzO1xuICAgICAgICAgICAgJC5lYWNoKGZpbGVTZXQgfHwgZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHZhciBuZXdEYXRhID0gJC5leHRlbmQoe30sIGRhdGEpO1xuICAgICAgICAgICAgICAgIG5ld0RhdGEuZmlsZXMgPSBmaWxlU2V0ID8gZWxlbWVudCA6IFtlbGVtZW50XTtcbiAgICAgICAgICAgICAgICBuZXdEYXRhLnBhcmFtTmFtZSA9IHBhcmFtTmFtZVNldFtpbmRleF07XG4gICAgICAgICAgICAgICAgdGhhdC5faW5pdFJlc3BvbnNlT2JqZWN0KG5ld0RhdGEpO1xuICAgICAgICAgICAgICAgIHRoYXQuX2luaXRQcm9ncmVzc09iamVjdChuZXdEYXRhKTtcbiAgICAgICAgICAgICAgICB0aGF0Ll9hZGRDb252ZW5pZW5jZU1ldGhvZHMoZSwgbmV3RGF0YSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgICAgICAgJ2FkZCcsXG4gICAgICAgICAgICAgICAgICAgICQuRXZlbnQoJ2FkZCcsIHtkZWxlZ2F0ZWRFdmVudDogZX0pLFxuICAgICAgICAgICAgICAgICAgICBuZXdEYXRhXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIF9yZXBsYWNlRmlsZUlucHV0OiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHZhciBpbnB1dENsb25lID0gaW5wdXQuY2xvbmUodHJ1ZSk7XG4gICAgICAgICAgICAkKCc8Zm9ybT48L2Zvcm0+JykuYXBwZW5kKGlucHV0Q2xvbmUpWzBdLnJlc2V0KCk7XG4gICAgICAgICAgICAvLyBEZXRhY2hpbmcgYWxsb3dzIHRvIGluc2VydCB0aGUgZmlsZUlucHV0IG9uIGFub3RoZXIgZm9ybVxuICAgICAgICAgICAgLy8gd2l0aG91dCBsb29zaW5nIHRoZSBmaWxlIGlucHV0IHZhbHVlOlxuICAgICAgICAgICAgaW5wdXQuYWZ0ZXIoaW5wdXRDbG9uZSkuZGV0YWNoKCk7XG4gICAgICAgICAgICAvLyBBdm9pZCBtZW1vcnkgbGVha3Mgd2l0aCB0aGUgZGV0YWNoZWQgZmlsZSBpbnB1dDpcbiAgICAgICAgICAgICQuY2xlYW5EYXRhKGlucHV0LnVuYmluZCgncmVtb3ZlJykpO1xuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgb3JpZ2luYWwgZmlsZSBpbnB1dCBlbGVtZW50IGluIHRoZSBmaWxlSW5wdXRcbiAgICAgICAgICAgIC8vIGVsZW1lbnRzIHNldCB3aXRoIHRoZSBjbG9uZSwgd2hpY2ggaGFzIGJlZW4gY29waWVkIGluY2x1ZGluZ1xuICAgICAgICAgICAgLy8gZXZlbnQgaGFuZGxlcnM6XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZmlsZUlucHV0ID0gdGhpcy5vcHRpb25zLmZpbGVJbnB1dC5tYXAoZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsID09PSBpbnB1dFswXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRDbG9uZVswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB0aGUgd2lkZ2V0IGhhcyBiZWVuIGluaXRpYWxpemVkIG9uIHRoZSBmaWxlIGlucHV0IGl0c2VsZixcbiAgICAgICAgICAgIC8vIG92ZXJyaWRlIHRoaXMuZWxlbWVudCB3aXRoIHRoZSBmaWxlIGlucHV0IGNsb25lOlxuICAgICAgICAgICAgaWYgKGlucHV0WzBdID09PSB0aGlzLmVsZW1lbnRbMF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBpbnB1dENsb25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIF9oYW5kbGVGaWxlVHJlZUVudHJ5OiBmdW5jdGlvbiAoZW50cnksIHBhdGgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgICAgICBkZmQgPSAkLkRlZmVycmVkKCksXG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgJiYgIWUuZW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZW50cnkgPSBlbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSAkLndoZW4gcmV0dXJucyBpbW1lZGlhdGVseSBpZiBvbmVcbiAgICAgICAgICAgICAgICAgICAgLy8gRGVmZXJyZWQgaXMgcmVqZWN0ZWQsIHdlIHVzZSByZXNvbHZlIGluc3RlYWQuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHZhbGlkIGZpbGVzIGFuZCBpbnZhbGlkIGl0ZW1zXG4gICAgICAgICAgICAgICAgICAgIC8vIHRvIGJlIHJldHVybmVkIHRvZ2V0aGVyIGluIG9uZSBzZXQ6XG4gICAgICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKFtlXSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkaXJSZWFkZXI7XG4gICAgICAgICAgICBwYXRoID0gcGF0aCB8fCAnJztcbiAgICAgICAgICAgIGlmIChlbnRyeS5pc0ZpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkuX2ZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgQ2hyb21lIGJ1ZyAjMTQ5NzM1XG4gICAgICAgICAgICAgICAgICAgIGVudHJ5Ll9maWxlLnJlbGF0aXZlUGF0aCA9IHBhdGg7XG4gICAgICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKGVudHJ5Ll9maWxlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbnRyeS5maWxlKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlLnJlbGF0aXZlUGF0aCA9IHBhdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3JIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgICAgICAgZGlyUmVhZGVyID0gZW50cnkuY3JlYXRlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgZGlyUmVhZGVyLnJlYWRFbnRyaWVzKGZ1bmN0aW9uIChlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX2hhbmRsZUZpbGVUcmVlRW50cmllcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoICsgZW50cnkubmFtZSArICcvJ1xuICAgICAgICAgICAgICAgICAgICApLmRvbmUoZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmZhaWwoZXJyb3JIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB9LCBlcnJvckhhbmRsZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBSZXR1cm4gYW4gZW1weSBsaXN0IGZvciBmaWxlIHN5c3RlbSBpdGVtc1xuICAgICAgICAgICAgICAgIC8vIG90aGVyIHRoYW4gZmlsZXMgb3IgZGlyZWN0b3JpZXM6XG4gICAgICAgICAgICAgICAgZGZkLnJlc29sdmUoW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRmZC5wcm9taXNlKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2hhbmRsZUZpbGVUcmVlRW50cmllczogZnVuY3Rpb24gKGVudHJpZXMsIHBhdGgpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiAkLndoZW4uYXBwbHkoXG4gICAgICAgICAgICAgICAgJCxcbiAgICAgICAgICAgICAgICAkLm1hcChlbnRyaWVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQuX2hhbmRsZUZpbGVUcmVlRW50cnkoZW50cnksIHBhdGgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLnBpcGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFxuICAgICAgICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIF9nZXREcm9wcGVkRmlsZXM6IGZ1bmN0aW9uIChkYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIGRhdGFUcmFuc2ZlciA9IGRhdGFUcmFuc2ZlciB8fCB7fTtcbiAgICAgICAgICAgIHZhciBpdGVtcyA9IGRhdGFUcmFuc2Zlci5pdGVtcztcbiAgICAgICAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGggJiYgKGl0ZW1zWzBdLndlYmtpdEdldEFzRW50cnkgfHxcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNbMF0uZ2V0QXNFbnRyeSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRmlsZVRyZWVFbnRyaWVzKFxuICAgICAgICAgICAgICAgICAgICAkLm1hcChpdGVtcywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLndlYmtpdEdldEFzRW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IGl0ZW0ud2Via2l0R2V0QXNFbnRyeSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBDaHJvbWUgYnVnICMxNDk3MzU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Ll9maWxlID0gaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0QXNFbnRyeSgpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoXG4gICAgICAgICAgICAgICAgJC5tYWtlQXJyYXkoZGF0YVRyYW5zZmVyLmZpbGVzKVxuICAgICAgICAgICAgKS5wcm9taXNlKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2dldFNpbmdsZUZpbGVJbnB1dEZpbGVzOiBmdW5jdGlvbiAoZmlsZUlucHV0KSB7XG4gICAgICAgICAgICBmaWxlSW5wdXQgPSAkKGZpbGVJbnB1dCk7XG4gICAgICAgICAgICB2YXIgZW50cmllcyA9IGZpbGVJbnB1dC5wcm9wKCd3ZWJraXRFbnRyaWVzJykgfHxcbiAgICAgICAgICAgICAgICAgICAgZmlsZUlucHV0LnByb3AoJ2VudHJpZXMnKSxcbiAgICAgICAgICAgICAgICBmaWxlcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChlbnRyaWVzICYmIGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZUZpbGVUcmVlRW50cmllcyhlbnRyaWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbGVzID0gJC5tYWtlQXJyYXkoZmlsZUlucHV0LnByb3AoJ2ZpbGVzJykpO1xuICAgICAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpbGVJbnB1dC5wcm9wKCd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKFtdKS5wcm9taXNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBmaWxlcyBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLCB0aGUgYnJvd3NlciBkb2VzIG5vdFxuICAgICAgICAgICAgICAgIC8vIHN1cHBvcnQgdGhlIEZpbGUgQVBJIGFuZCB3ZSBhZGQgYSBwc2V1ZG8gRmlsZSBvYmplY3Qgd2l0aFxuICAgICAgICAgICAgICAgIC8vIHRoZSBpbnB1dCB2YWx1ZSBhcyBuYW1lIHdpdGggcGF0aCBpbmZvcm1hdGlvbiByZW1vdmVkOlxuICAgICAgICAgICAgICAgIGZpbGVzID0gW3tuYW1lOiB2YWx1ZS5yZXBsYWNlKC9eLipcXFxcLywgJycpfV07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGVzWzBdLm5hbWUgPT09IHVuZGVmaW5lZCAmJiBmaWxlc1swXS5maWxlTmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIEZpbGUgbm9ybWFsaXphdGlvbiBmb3IgU2FmYXJpIDQgYW5kIEZpcmVmb3ggMzpcbiAgICAgICAgICAgICAgICAkLmVhY2goZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBmaWxlLm5hbWUgPSBmaWxlLmZpbGVOYW1lO1xuICAgICAgICAgICAgICAgICAgICBmaWxlLnNpemUgPSBmaWxlLmZpbGVTaXplO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKGZpbGVzKS5wcm9taXNlKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2dldEZpbGVJbnB1dEZpbGVzOiBmdW5jdGlvbiAoZmlsZUlucHV0KSB7XG4gICAgICAgICAgICBpZiAoIShmaWxlSW5wdXQgaW5zdGFuY2VvZiAkKSB8fCBmaWxlSW5wdXQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNpbmdsZUZpbGVJbnB1dEZpbGVzKGZpbGVJbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJC53aGVuLmFwcGx5KFxuICAgICAgICAgICAgICAgICQsXG4gICAgICAgICAgICAgICAgJC5tYXAoZmlsZUlucHV0LCB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcylcbiAgICAgICAgICAgICkucGlwZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX29uQ2hhbmdlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVJbnB1dDogJChlLnRhcmdldCksXG4gICAgICAgICAgICAgICAgICAgIGZvcm06ICQoZS50YXJnZXQuZm9ybSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7XG4gICAgICAgICAgICAgICAgaWYgKHRoYXQub3B0aW9ucy5yZXBsYWNlRmlsZUlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX3JlcGxhY2VGaWxlSW5wdXQoZGF0YS5maWxlSW5wdXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdjaGFuZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJC5FdmVudCgnY2hhbmdlJywge2RlbGVnYXRlZEV2ZW50OiBlfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhXG4gICAgICAgICAgICAgICAgICAgICkgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX29uQWRkKGUsIGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIF9vblBhc3RlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgdmFyIGl0ZW1zID0gZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhICYmXG4gICAgICAgICAgICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLml0ZW1zLFxuICAgICAgICAgICAgICAgIGRhdGEgPSB7ZmlsZXM6IFtdfTtcbiAgICAgICAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAkLmVhY2goaXRlbXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlICYmIGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdwYXN0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAkLkV2ZW50KCdwYXN0ZScsIHtkZWxlZ2F0ZWRFdmVudDogZX0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICAgICAgICAgICApICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgX29uRHJvcDogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyID0gZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXI7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgICAgICAgICAgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXIsXG4gICAgICAgICAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgICAgICAgaWYgKGRhdGFUcmFuc2ZlciAmJiBkYXRhVHJhbnNmZXIuZmlsZXMgJiYgZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXREcm9wcGVkRmlsZXMoZGF0YVRyYW5zZmVyKS5hbHdheXMoZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuZmlsZXMgPSBmaWxlcztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQuX3RyaWdnZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Ryb3AnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuRXZlbnQoJ2Ryb3AnLCB7ZGVsZWdhdGVkRXZlbnQ6IGV9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICApICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fb25BZGQoZSwgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBfb25EcmFnT3ZlcjogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyID0gZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXI7XG4gICAgICAgICAgICB2YXIgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXI7XG4gICAgICAgICAgICBpZiAoZGF0YVRyYW5zZmVyICYmICQuaW5BcnJheSgnRmlsZXMnLCBkYXRhVHJhbnNmZXIudHlwZXMpICE9PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2RyYWdvdmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICQuRXZlbnQoJ2RyYWdvdmVyJywge2RlbGVnYXRlZEV2ZW50OiBlfSlcbiAgICAgICAgICAgICAgICAgICAgKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2luaXRFdmVudEhhbmRsZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNYSFJVcGxvYWQodGhpcy5vcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX29uKHRoaXMub3B0aW9ucy5kcm9wWm9uZSwge1xuICAgICAgICAgICAgICAgICAgICBkcmFnb3ZlcjogdGhpcy5fb25EcmFnT3ZlcixcbiAgICAgICAgICAgICAgICAgICAgZHJvcDogdGhpcy5fb25Ecm9wXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLnBhc3RlWm9uZSwge1xuICAgICAgICAgICAgICAgICAgICBwYXN0ZTogdGhpcy5fb25QYXN0ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCQuc3VwcG9ydC5maWxlSW5wdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vbih0aGlzLm9wdGlvbnMuZmlsZUlucHV0LCB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZTogdGhpcy5fb25DaGFuZ2VcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBfZGVzdHJveUV2ZW50SGFuZGxlcnM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX29mZih0aGlzLm9wdGlvbnMuZHJvcFpvbmUsICdkcmFnb3ZlciBkcm9wJyk7XG4gICAgICAgICAgICB0aGlzLl9vZmYodGhpcy5vcHRpb25zLnBhc3RlWm9uZSwgJ3Bhc3RlJyk7XG4gICAgICAgICAgICB0aGlzLl9vZmYodGhpcy5vcHRpb25zLmZpbGVJbnB1dCwgJ2NoYW5nZScpO1xuICAgICAgICB9LFxuXG4gICAgICAgIF9zZXRPcHRpb246IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgcmVpbml0ID0gJC5pbkFycmF5KGtleSwgdGhpcy5fc3BlY2lhbE9wdGlvbnMpICE9PSAtMTtcbiAgICAgICAgICAgIGlmIChyZWluaXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95RXZlbnRIYW5kbGVycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fc3VwZXIoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAocmVpbml0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdFNwZWNpYWxPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdEV2ZW50SGFuZGxlcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBfaW5pdFNwZWNpYWxPcHRpb25zOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmZpbGVJbnB1dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQgPSB0aGlzLmVsZW1lbnQuaXMoJ2lucHV0W3R5cGU9XCJmaWxlXCJdJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50IDogdGhpcy5lbGVtZW50LmZpbmQoJ2lucHV0W3R5cGU9XCJmaWxlXCJdJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucy5maWxlSW5wdXQgaW5zdGFuY2VvZiAkKSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShvcHRpb25zLmRyb3Bab25lIGluc3RhbmNlb2YgJCkpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmRyb3Bab25lID0gJChvcHRpb25zLmRyb3Bab25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKG9wdGlvbnMucGFzdGVab25lIGluc3RhbmNlb2YgJCkpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnBhc3RlWm9uZSA9ICQob3B0aW9ucy5wYXN0ZVpvbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIF9nZXRSZWdFeHA6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnLycpLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVycyA9IHBhcnRzLnBvcCgpO1xuICAgICAgICAgICAgcGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHBhcnRzLmpvaW4oJy8nKSwgbW9kaWZpZXJzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBfaXNSZWdFeHBPcHRpb246IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4ga2V5ICE9PSAndXJsJyAmJiAkLnR5cGUodmFsdWUpID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgIC9eXFwvLipcXC9baWdtXXswLDN9JC8udGVzdCh2YWx1ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2luaXREYXRhQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgY2xvbmUgPSAkKHRoaXMuZWxlbWVudFswXS5jbG9uZU5vZGUoZmFsc2UpKTtcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgb3B0aW9ucyBzZXQgdmlhIEhUTUw1IGRhdGEtYXR0cmlidXRlczpcbiAgICAgICAgICAgICQuZWFjaChcbiAgICAgICAgICAgICAgICBjbG9uZS5kYXRhKCksXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGFBdHRyaWJ1dGVOYW1lID0gJ2RhdGEtJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGNhbWVsQ2FzZSB0byBoeXBoZW4tYXRlZCBrZXk6XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxLSQyJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsb25lLmF0dHIoZGF0YUF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5faXNSZWdFeHBPcHRpb24oa2V5LCB2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoYXQuX2dldFJlZ0V4cCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2NyZWF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5faW5pdERhdGFBdHRyaWJ1dGVzKCk7XG4gICAgICAgICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX3Nsb3RzID0gW107XG4gICAgICAgICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX2dldFhIUlByb21pc2UodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl9zZW5kaW5nID0gdGhpcy5fYWN0aXZlID0gMDtcbiAgICAgICAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRFdmVudEhhbmRsZXJzKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIHRvIHF1ZXJ5XG4gICAgICAgIC8vIHRoZSBudW1iZXIgb2YgYWN0aXZlIHVwbG9hZHM6XG4gICAgICAgIGFjdGl2ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBleHBvc2VkIHRvIHRoZSB3aWRnZXQgQVBJIGFuZCBhbGxvd3MgdG8gcXVlcnlcbiAgICAgICAgLy8gdGhlIHdpZGdldCB1cGxvYWQgcHJvZ3Jlc3MuXG4gICAgICAgIC8vIEl0IHJldHVybnMgYW4gb2JqZWN0IHdpdGggbG9hZGVkLCB0b3RhbCBhbmQgYml0cmF0ZSBwcm9wZXJ0aWVzXG4gICAgICAgIC8vIGZvciB0aGUgcnVubmluZyB1cGxvYWRzOlxuICAgICAgICBwcm9ncmVzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2dyZXNzO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyBhZGRpbmcgZmlsZXNcbiAgICAgICAgLy8gdXNpbmcgdGhlIGZpbGV1cGxvYWQgQVBJLiBUaGUgZGF0YSBwYXJhbWV0ZXIgYWNjZXB0cyBhbiBvYmplY3Qgd2hpY2hcbiAgICAgICAgLy8gbXVzdCBoYXZlIGEgZmlsZXMgcHJvcGVydHkgYW5kIGNhbiBjb250YWluIGFkZGl0aW9uYWwgb3B0aW9uczpcbiAgICAgICAgLy8gLmZpbGV1cGxvYWQoJ2FkZCcsIHtmaWxlczogZmlsZXNMaXN0fSk7XG4gICAgICAgIGFkZDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIGlmICghZGF0YSB8fCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5maWxlSW5wdXQgJiYgIWRhdGEuZmlsZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRGaWxlSW5wdXRGaWxlcyhkYXRhLmZpbGVJbnB1dCkuYWx3YXlzKGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX29uQWRkKG51bGwsIGRhdGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhLmZpbGVzID0gJC5tYWtlQXJyYXkoZGF0YS5maWxlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25BZGQobnVsbCwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIHNlbmRpbmcgZmlsZXNcbiAgICAgICAgLy8gdXNpbmcgdGhlIGZpbGV1cGxvYWQgQVBJLiBUaGUgZGF0YSBwYXJhbWV0ZXIgYWNjZXB0cyBhbiBvYmplY3Qgd2hpY2hcbiAgICAgICAgLy8gbXVzdCBoYXZlIGEgZmlsZXMgb3IgZmlsZUlucHV0IHByb3BlcnR5IGFuZCBjYW4gY29udGFpbiBhZGRpdGlvbmFsIG9wdGlvbnM6XG4gICAgICAgIC8vIC5maWxldXBsb2FkKCdzZW5kJywge2ZpbGVzOiBmaWxlc0xpc3R9KTtcbiAgICAgICAgLy8gVGhlIG1ldGhvZCByZXR1cm5zIGEgUHJvbWlzZSBvYmplY3QgZm9yIHRoZSBmaWxlIHVwbG9hZCBjYWxsLlxuICAgICAgICBzZW5kOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgaWYgKGRhdGEgJiYgIXRoaXMub3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmZpbGVJbnB1dCAmJiAhZGF0YS5maWxlcykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZmQgPSAkLkRlZmVycmVkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRlZDtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpxWEhSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpxWEhSLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBkZmQucmVqZWN0KG51bGwsICdhYm9ydCcsICdhYm9ydCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldEZpbGVJbnB1dEZpbGVzKGRhdGEuZmlsZUlucHV0KS5hbHdheXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmZC5yZWplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFIgPSB0aGF0Ll9vblNlbmQobnVsbCwgZGF0YSkudGhlbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZmQucmVqZWN0KGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZW5oYW5jZVByb21pc2UocHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEuZmlsZXMgPSAkLm1ha2VBcnJheShkYXRhLmZpbGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5maWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29uU2VuZChudWxsLCBkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0WEhSUHJvbWlzZShmYWxzZSwgZGF0YSAmJiBkYXRhLmNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICB9KTtcblxufSkpO1xuIiwiLypcbiAqIGpRdWVyeSBGaWxlIFVwbG9hZCBQcm9jZXNzaW5nIFBsdWdpbiAxLjMuMFxuICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkXG4gKlxuICogQ29weXJpZ2h0IDIwMTIsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICovXG5cbi8qIGpzaGludCBub21lbjpmYWxzZSAqL1xuLyogZ2xvYmFsIGRlZmluZSwgd2luZG93ICovXG5cbihmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBBTUQgbW9kdWxlOlxuICAgICAgICBkZWZpbmUoW1xuICAgICAgICAgICAgJ2pxdWVyeScsXG4gICAgICAgICAgICAnLi9qcXVlcnkuZmlsZXVwbG9hZCdcbiAgICAgICAgXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQnJvd3NlciBnbG9iYWxzOlxuICAgICAgICBmYWN0b3J5KFxuICAgICAgICAgICAgd2luZG93LmpRdWVyeVxuICAgICAgICApO1xuICAgIH1cbn0oZnVuY3Rpb24gKCQpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgb3JpZ2luYWxBZGQgPSAkLmJsdWVpbXAuZmlsZXVwbG9hZC5wcm90b3R5cGUub3B0aW9ucy5hZGQ7XG5cbiAgICAvLyBUaGUgRmlsZSBVcGxvYWQgUHJvY2Vzc2luZyBwbHVnaW4gZXh0ZW5kcyB0aGUgZmlsZXVwbG9hZCB3aWRnZXRcbiAgICAvLyB3aXRoIGZpbGUgcHJvY2Vzc2luZyBmdW5jdGlvbmFsaXR5OlxuICAgICQud2lkZ2V0KCdibHVlaW1wLmZpbGV1cGxvYWQnLCAkLmJsdWVpbXAuZmlsZXVwbG9hZCwge1xuXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIC8vIFRoZSBsaXN0IG9mIHByb2Nlc3NpbmcgYWN0aW9uczpcbiAgICAgICAgICAgIHByb2Nlc3NRdWV1ZTogW1xuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdsb2cnLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZGVidWcnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgYWRkOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgZGF0YS5wcm9jZXNzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLmZpbGV1cGxvYWQoJ3Byb2Nlc3MnLCBkYXRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEFkZC5jYWxsKHRoaXMsIGUsIGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHByb2Nlc3NBY3Rpb25zOiB7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgbG9nOiBmdW5jdGlvbiAoZGF0YSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGVbb3B0aW9ucy50eXBlXShcbiAgICAgICAgICAgICAgICAgICAgJ1Byb2Nlc3NpbmcgXCInICsgZGF0YS5maWxlc1tkYXRhLmluZGV4XS5uYW1lICsgJ1wiJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAqL1xuICAgICAgICB9LFxuXG4gICAgICAgIF9wcm9jZXNzRmlsZTogZnVuY3Rpb24gKGRhdGEsIG9yaWdpbmFsRGF0YSkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKS5yZXNvbHZlV2l0aCh0aGF0LCBbZGF0YV0pLFxuICAgICAgICAgICAgICAgIGNoYWluID0gZGZkLnByb21pc2UoKTtcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoJ3Byb2Nlc3MnLCBudWxsLCBkYXRhKTtcbiAgICAgICAgICAgICQuZWFjaChkYXRhLnByb2Nlc3NRdWV1ZSwgZnVuY3Rpb24gKGksIHNldHRpbmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmMgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxEYXRhLmVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5EZWZlcnJlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWplY3RXaXRoKHRoYXQsIFtvcmlnaW5hbERhdGFdKS5wcm9taXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQucHJvY2Vzc0FjdGlvbnNbc2V0dGluZ3MuYWN0aW9uXS5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2hhaW4gPSBjaGFpbi5waXBlKGZ1bmMsIHNldHRpbmdzLmFsd2F5cyAmJiBmdW5jKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2hhaW5cbiAgICAgICAgICAgICAgICAuZG9uZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ3Byb2Nlc3Nkb25lJywgbnVsbCwgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ3Byb2Nlc3NhbHdheXMnLCBudWxsLCBkYXRhKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5mYWlsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcigncHJvY2Vzc2ZhaWwnLCBudWxsLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcigncHJvY2Vzc2Fsd2F5cycsIG51bGwsIGRhdGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGNoYWluO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFJlcGxhY2VzIHRoZSBzZXR0aW5ncyBvZiBlYWNoIHByb2Nlc3NRdWV1ZSBpdGVtIHRoYXRcbiAgICAgICAgLy8gYXJlIHN0cmluZ3Mgc3RhcnRpbmcgd2l0aCBhbiBcIkBcIiwgdXNpbmcgdGhlIHJlbWFpbmluZ1xuICAgICAgICAvLyBzdWJzdHJpbmcgYXMga2V5IGZvciB0aGUgb3B0aW9uIG1hcCxcbiAgICAgICAgLy8gZS5nLiBcIkBhdXRvVXBsb2FkXCIgaXMgcmVwbGFjZWQgd2l0aCBvcHRpb25zLmF1dG9VcGxvYWQ6XG4gICAgICAgIF90cmFuc2Zvcm1Qcm9jZXNzUXVldWU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgcHJvY2Vzc1F1ZXVlID0gW107XG4gICAgICAgICAgICAkLmVhY2gob3B0aW9ucy5wcm9jZXNzUXVldWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSB7fSxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gdGhpcy5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4ID09PSB0cnVlID8gYWN0aW9uIDogdGhpcy5wcmVmaXg7XG4gICAgICAgICAgICAgICAgJC5lYWNoKHRoaXMsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkLnR5cGUodmFsdWUpID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nc1trZXldID0gb3B0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgxKSB8fCAocHJlZml4ID8gcHJlZml4ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpIDoga2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc1F1ZXVlLnB1c2goc2V0dGluZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvcHRpb25zLnByb2Nlc3NRdWV1ZSA9IHByb2Nlc3NRdWV1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZmlsZXMgY3VycmVudGx5IGluIHRoZSBwcm9jZXNzc2luZyBxdWV1ZTpcbiAgICAgICAgcHJvY2Vzc2luZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3Npbmc7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gUHJvY2Vzc2VzIHRoZSBmaWxlcyBnaXZlbiBhcyBmaWxlcyBwcm9wZXJ0eSBvZiB0aGUgZGF0YSBwYXJhbWV0ZXIsXG4gICAgICAgIC8vIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCB0aGF0IGFsbG93cyB0byBiaW5kIGNhbGxiYWNrczpcbiAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgZGF0YSk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5wcm9jZXNzUXVldWUgJiYgb3B0aW9ucy5wcm9jZXNzUXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtUHJvY2Vzc1F1ZXVlKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wcm9jZXNzaW5nID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoJ3Byb2Nlc3NzdGFydCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkLmVhY2goZGF0YS5maWxlcywgZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvcHRzID0gaW5kZXggPyAkLmV4dGVuZCh7fSwgb3B0aW9ucykgOiBvcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5lcnJvclRocm93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5EZWZlcnJlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlamVjdFdpdGgodGhhdCwgW2RhdGFdKS5wcm9taXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0Ll9wcm9jZXNzRmlsZShvcHRzLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIG9wdHMuaW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fcHJvY2Vzc2luZyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB0aGF0Ll9wcm9jZXNzaW5nUXVldWUgPSB0aGF0Ll9wcm9jZXNzaW5nUXVldWUucGlwZShmdW5jLCBmdW5jKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFsd2F5cyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fcHJvY2Vzc2luZyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9wcm9jZXNzaW5nID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ3Byb2Nlc3NzdG9wJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc2luZ1F1ZXVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKCk7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzaW5nID0gMDtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NpbmdRdWV1ZSA9ICQuRGVmZXJyZWQoKS5yZXNvbHZlV2l0aCh0aGlzKVxuICAgICAgICAgICAgICAgIC5wcm9taXNlKCk7XG4gICAgICAgIH1cblxuICAgIH0pO1xuXG59KSk7XG4iLCIvKlxuICogalF1ZXJ5IEZpbGUgVXBsb2FkIFZhbGlkYXRpb24gUGx1Z2luIDEuMS4yXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWRcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMywgU2ViYXN0aWFuIFRzY2hhblxuICogaHR0cHM6Ly9ibHVlaW1wLm5ldFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZTpcbiAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4gKi9cblxuLyogZ2xvYmFsIGRlZmluZSwgd2luZG93ICovXG5cbihmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBBTUQgbW9kdWxlOlxuICAgICAgICBkZWZpbmUoW1xuICAgICAgICAgICAgJ2pxdWVyeScsXG4gICAgICAgICAgICAnLi9qcXVlcnkuZmlsZXVwbG9hZC1wcm9jZXNzJ1xuICAgICAgICBdLCBmYWN0b3J5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBCcm93c2VyIGdsb2JhbHM6XG4gICAgICAgIGZhY3RvcnkoXG4gICAgICAgICAgICB3aW5kb3cualF1ZXJ5XG4gICAgICAgICk7XG4gICAgfVxufShmdW5jdGlvbiAoJCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8vIEFwcGVuZCB0byB0aGUgZGVmYXVsdCBwcm9jZXNzUXVldWU6XG4gICAgJC5ibHVlaW1wLmZpbGV1cGxvYWQucHJvdG90eXBlLm9wdGlvbnMucHJvY2Vzc1F1ZXVlLnB1c2goXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogJ3ZhbGlkYXRlJyxcbiAgICAgICAgICAgIC8vIEFsd2F5cyB0cmlnZ2VyIHRoaXMgYWN0aW9uLFxuICAgICAgICAgICAgLy8gZXZlbiBpZiB0aGUgcHJldmlvdXMgYWN0aW9uIHdhcyByZWplY3RlZDogXG4gICAgICAgICAgICBhbHdheXM6IHRydWUsXG4gICAgICAgICAgICAvLyBPcHRpb25zIHRha2VuIGZyb20gdGhlIGdsb2JhbCBvcHRpb25zIG1hcDpcbiAgICAgICAgICAgIGFjY2VwdEZpbGVUeXBlczogJ0AnLFxuICAgICAgICAgICAgbWF4RmlsZVNpemU6ICdAJyxcbiAgICAgICAgICAgIG1pbkZpbGVTaXplOiAnQCcsXG4gICAgICAgICAgICBtYXhOdW1iZXJPZkZpbGVzOiAnQCcsXG4gICAgICAgICAgICBkaXNhYmxlZDogJ0BkaXNhYmxlVmFsaWRhdGlvbidcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBUaGUgRmlsZSBVcGxvYWQgVmFsaWRhdGlvbiBwbHVnaW4gZXh0ZW5kcyB0aGUgZmlsZXVwbG9hZCB3aWRnZXRcbiAgICAvLyB3aXRoIGZpbGUgdmFsaWRhdGlvbiBmdW5jdGlvbmFsaXR5OlxuICAgICQud2lkZ2V0KCdibHVlaW1wLmZpbGV1cGxvYWQnLCAkLmJsdWVpbXAuZmlsZXVwbG9hZCwge1xuXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGZvciBhbGxvd2VkIGZpbGUgdHlwZXMsIG1hdGNoZXNcbiAgICAgICAgICAgIC8vIGFnYWluc3QgZWl0aGVyIGZpbGUgdHlwZSBvciBmaWxlIG5hbWU6XG4gICAgICAgICAgICBhY2NlcHRGaWxlVHlwZXM6IC8oXFwufFxcLykoZ2lmfGpwZT9nfHBuZykkL2ksXG4gICAgICAgICAgICAvLyBUaGUgbWF4aW11bSBhbGxvd2VkIGZpbGUgc2l6ZSBpbiBieXRlczpcbiAgICAgICAgICAgIG1heEZpbGVTaXplOiAxMDAwMDAwMCwgLy8gMTAgTUJcbiAgICAgICAgICAgIC8vIFRoZSBtaW5pbXVtIGFsbG93ZWQgZmlsZSBzaXplIGluIGJ5dGVzOlxuICAgICAgICAgICAgbWluRmlsZVNpemU6IHVuZGVmaW5lZCwgLy8gTm8gbWluaW1hbCBmaWxlIHNpemVcbiAgICAgICAgICAgIC8vIFRoZSBsaW1pdCBvZiBmaWxlcyB0byBiZSB1cGxvYWRlZDpcbiAgICAgICAgICAgIG1heE51bWJlck9mRmlsZXM6IDEwLFxuICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgLy8gRnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBjdXJyZW50IG51bWJlciBvZiBmaWxlcyxcbiAgICAgICAgICAgIC8vIGhhcyB0byBiZSBvdmVycmlkZW4gZm9yIG1heE51bWJlck9mRmlsZXMgdmFsaWRhdGlvbjpcbiAgICAgICAgICAgIGdldE51bWJlck9mRmlsZXM6ICQubm9vcCxcblxuICAgICAgICAgICAgLy8gRXJyb3IgYW5kIGluZm8gbWVzc2FnZXM6XG4gICAgICAgICAgICBtZXNzYWdlczoge1xuICAgICAgICAgICAgICAgIG1heE51bWJlck9mRmlsZXM6ICdNYXhpbXVtIG51bWJlciBvZiBmaWxlcyBleGNlZWRlZCcsXG4gICAgICAgICAgICAgICAgYWNjZXB0RmlsZVR5cGVzOiAnRmlsZSB0eXBlIG5vdCBhbGxvd2VkJyxcbiAgICAgICAgICAgICAgICBtYXhGaWxlU2l6ZTogJ0ZpbGUgaXMgdG9vIGxhcmdlJyxcbiAgICAgICAgICAgICAgICBtaW5GaWxlU2l6ZTogJ0ZpbGUgaXMgdG9vIHNtYWxsJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHByb2Nlc3NBY3Rpb25zOiB7XG5cbiAgICAgICAgICAgIHZhbGlkYXRlOiBmdW5jdGlvbiAoZGF0YSwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGRhdGEuZmlsZXNbZGF0YS5pbmRleF0sXG4gICAgICAgICAgICAgICAgICAgIGZpbGVTaXplO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1pbkZpbGVTaXplIHx8IG9wdGlvbnMubWF4RmlsZVNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZVNpemUgPSBmaWxlLnNpemU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgkLnR5cGUob3B0aW9ucy5tYXhOdW1iZXJPZkZpbGVzKSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZXR0aW5ncy5nZXROdW1iZXJPZkZpbGVzKCkgfHwgMCkgKyBkYXRhLmZpbGVzLmxlbmd0aCA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tYXhOdW1iZXJPZkZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGUuZXJyb3IgPSBzZXR0aW5ncy5pMThuKCdtYXhOdW1iZXJPZkZpbGVzJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmFjY2VwdEZpbGVUeXBlcyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIShvcHRpb25zLmFjY2VwdEZpbGVUeXBlcy50ZXN0KGZpbGUudHlwZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYWNjZXB0RmlsZVR5cGVzLnRlc3QoZmlsZS5uYW1lKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZS5lcnJvciA9IHNldHRpbmdzLmkxOG4oJ2FjY2VwdEZpbGVUeXBlcycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsZVNpemUgPiBvcHRpb25zLm1heEZpbGVTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGUuZXJyb3IgPSBzZXR0aW5ncy5pMThuKCdtYXhGaWxlU2l6ZScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJC50eXBlKGZpbGVTaXplKSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTaXplIDwgb3B0aW9ucy5taW5GaWxlU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBmaWxlLmVycm9yID0gc2V0dGluZ3MuaTE4bignbWluRmlsZVNpemUnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZmlsZS5lcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGZpbGUuZXJyb3IgfHwgZGF0YS5maWxlcy5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZGZkLnJlamVjdFdpdGgodGhpcywgW2RhdGFdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZmQucmVzb2x2ZVdpdGgodGhpcywgW2RhdGFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRmZC5wcm9taXNlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfSk7XG5cbn0pKTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5maWxldXBsb2FkLWZ1bGwuanMiLCJqcXVlcnkuaWZyYW1lLXRyYW5zcG9ydC5qcyIsImpxdWVyeS5maWxldXBsb2FkLmpzIiwianF1ZXJ5LmZpbGV1cGxvYWQtcHJvY2Vzcy5qcyIsImpxdWVyeS5maWxldXBsb2FkLXZhbGlkYXRlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUN6TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2w1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzVLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoianF1ZXJ5LmZpbGV1cGxvYWQtZnVsbC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiLypcclxuICogalF1ZXJ5IElmcmFtZSBUcmFuc3BvcnQgUGx1Z2luXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZFxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgMjAxMSwgU2ViYXN0aWFuIFRzY2hhblxyXG4gKiBodHRwczovL2JsdWVpbXAubmV0XHJcbiAqXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZTpcclxuICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcclxuICovXHJcblxyXG4vKiBnbG9iYWwgZGVmaW5lLCByZXF1aXJlLCB3aW5kb3csIGRvY3VtZW50ICovXHJcblxyXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcclxuICAgICd1c2Ugc3RyaWN0JztcclxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuICAgICAgICAvLyBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgQU1EIG1vZHVsZTpcclxuICAgICAgICBkZWZpbmUoWydqcXVlcnknXSwgZmFjdG9yeSk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIC8vIE5vZGUvQ29tbW9uSlM6XHJcbiAgICAgICAgZmFjdG9yeShyZXF1aXJlKCdqcXVlcnknKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFsczpcclxuICAgICAgICBmYWN0b3J5KHdpbmRvdy5qUXVlcnkpO1xyXG4gICAgfVxyXG59KGZ1bmN0aW9uICgkKSB7XHJcbiAgICAndXNlIHN0cmljdCc7XHJcblxyXG4gICAgLy8gSGVscGVyIHZhcmlhYmxlIHRvIGNyZWF0ZSB1bmlxdWUgbmFtZXMgZm9yIHRoZSB0cmFuc3BvcnQgaWZyYW1lczpcclxuICAgIHZhciBjb3VudGVyID0gMDtcclxuXHJcbiAgICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCBhY2NlcHRzIGZvdXIgYWRkaXRpb25hbCBvcHRpb25zOlxyXG4gICAgLy8gb3B0aW9ucy5maWxlSW5wdXQ6IGEgalF1ZXJ5IGNvbGxlY3Rpb24gb2YgZmlsZSBpbnB1dCBmaWVsZHNcclxuICAgIC8vIG9wdGlvbnMucGFyYW1OYW1lOiB0aGUgcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSBmaWxlIGZvcm0gZGF0YSxcclxuICAgIC8vICBvdmVycmlkZXMgdGhlIG5hbWUgcHJvcGVydHkgb2YgdGhlIGZpbGUgaW5wdXQgZmllbGQocyksXHJcbiAgICAvLyAgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXHJcbiAgICAvLyBvcHRpb25zLmZvcm1EYXRhOiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggbmFtZSBhbmQgdmFsdWUgcHJvcGVydGllcyxcclxuICAgIC8vICBlcXVpdmFsZW50IHRvIHRoZSByZXR1cm4gZGF0YSBvZiAuc2VyaWFsaXplQXJyYXkoKSwgZS5nLjpcclxuICAgIC8vICBbe25hbWU6ICdhJywgdmFsdWU6IDF9LCB7bmFtZTogJ2InLCB2YWx1ZTogMn1dXHJcbiAgICAvLyBvcHRpb25zLmluaXRpYWxJZnJhbWVTcmM6IHRoZSBVUkwgb2YgdGhlIGluaXRpYWwgaWZyYW1lIHNyYyxcclxuICAgIC8vICBieSBkZWZhdWx0IHNldCB0byBcImphdmFzY3JpcHQ6ZmFsc2U7XCJcclxuICAgICQuYWpheFRyYW5zcG9ydCgnaWZyYW1lJywgZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICBpZiAob3B0aW9ucy5hc3luYykge1xyXG4gICAgICAgICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGluaXRpYWwgaWZyYW1lIHNyY1xyXG4gICAgICAgICAgICAvLyBwcmV2ZW50cyB3YXJuaW5nIHBvcHVwcyBvbiBIVFRQUyBpbiBJRTY6XHJcbiAgICAgICAgICAgIC8qanNoaW50IHNjcmlwdHVybDogdHJ1ZSAqL1xyXG4gICAgICAgICAgICB2YXIgaW5pdGlhbElmcmFtZVNyYyA9IG9wdGlvbnMuaW5pdGlhbElmcmFtZVNyYyB8fCAnamF2YXNjcmlwdDpmYWxzZTsnLFxyXG4gICAgICAgICAgICAvKmpzaGludCBzY3JpcHR1cmw6IGZhbHNlICovXHJcbiAgICAgICAgICAgICAgICBmb3JtLFxyXG4gICAgICAgICAgICAgICAgaWZyYW1lLFxyXG4gICAgICAgICAgICAgICAgYWRkUGFyYW1DaGFyO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24gKF8sIGNvbXBsZXRlQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtID0gJCgnPGZvcm0gc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9mb3JtPicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnLCBvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KTtcclxuICAgICAgICAgICAgICAgICAgICBhZGRQYXJhbUNoYXIgPSAvXFw/Ly50ZXN0KG9wdGlvbnMudXJsKSA/ICcmJyA6ICc/JztcclxuICAgICAgICAgICAgICAgICAgICAvLyBYRG9tYWluUmVxdWVzdCBvbmx5IHN1cHBvcnRzIEdFVCBhbmQgUE9TVDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy50eXBlID09PSAnREVMRVRFJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsICsgYWRkUGFyYW1DaGFyICsgJ19tZXRob2Q9REVMRVRFJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ1BPU1QnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSAnUFVUJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsICsgYWRkUGFyYW1DaGFyICsgJ19tZXRob2Q9UFVUJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ1BPU1QnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSAnUEFUQ0gnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy51cmwgKyBhZGRQYXJhbUNoYXIgKyAnX21ldGhvZD1QQVRDSCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSUUgdmVyc2lvbnMgYmVsb3cgSUU4IGNhbm5vdCBzZXQgdGhlIG5hbWUgcHJvcGVydHkgb2ZcclxuICAgICAgICAgICAgICAgICAgICAvLyBlbGVtZW50cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBET00sXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gd2Ugc2V0IHRoZSBuYW1lIGFsb25nIHdpdGggdGhlIGlmcmFtZSBIVE1MIG1hcmt1cDpcclxuICAgICAgICAgICAgICAgICAgICBjb3VudGVyICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWZyYW1lID0gJChcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxpZnJhbWUgc3JjPVwiJyArIGluaXRpYWxJZnJhbWVTcmMgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wiIG5hbWU9XCJpZnJhbWUtdHJhbnNwb3J0LScgKyBjb3VudGVyICsgJ1wiPjwvaWZyYW1lPidcclxuICAgICAgICAgICAgICAgICAgICApLmJpbmQoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxlSW5wdXRDbG9uZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWVzID0gJC5pc0FycmF5KG9wdGlvbnMucGFyYW1OYW1lKSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyYW1OYW1lIDogW29wdGlvbnMucGFyYW1OYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudW5iaW5kKCdsb2FkJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5iaW5kKCdsb2FkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXcmFwIGluIGEgdHJ5L2NhdGNoIGJsb2NrIHRvIGNhdGNoIGV4Y2VwdGlvbnMgdGhyb3duXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gYWNjZXNzIGNyb3NzLWRvbWFpbiBpZnJhbWUgY29udGVudHM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBpZnJhbWUuY29udGVudHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29vZ2xlIENocm9tZSBhbmQgRmlyZWZveCBkbyBub3QgdGhyb3cgYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhjZXB0aW9uIHdoZW4gY2FsbGluZyBpZnJhbWUuY29udGVudHMoKSBvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNvIHdlIHVuaWZ5IHRoZSByZXNwb25zZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5sZW5ndGggfHwgIXJlc3BvbnNlWzBdLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGNvbXBsZXRlIGNhbGxiYWNrIHJldHVybnMgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWZyYW1lIGNvbnRlbnQgZG9jdW1lbnQgYXMgcmVzcG9uc2Ugb2JqZWN0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlQ2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2lmcmFtZSc6IHJlc3BvbnNlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4IGZvciBJRSBlbmRsZXNzIHByb2dyZXNzIGJhciBhY3Rpdml0eSBidWdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoaGFwcGVucyBvbiBmb3JtIHN1Ym1pdHMgdG8gaWZyYW1lIHRhcmdldHMpOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJzxpZnJhbWUgc3JjPVwiJyArIGluaXRpYWxJZnJhbWVTcmMgKyAnXCI+PC9pZnJhbWU+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKGZvcm0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIGZvcm0gaW4gYSBzZXRUaW1lb3V0IGNhbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxsb3dzIENocm9tZSdzIGRldmVsb3BlciB0b29scyB0byBkaXNwbGF5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSByZXNwb25zZSByZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcCgndGFyZ2V0JywgaWZyYW1lLnByb3AoJ25hbWUnKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9wKCdhY3Rpb24nLCBvcHRpb25zLnVybClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9wKCdtZXRob2QnLCBvcHRpb25zLnR5cGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5mb3JtRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChpbmRleCwgZmllbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCc8aW5wdXQgdHlwZT1cImhpZGRlblwiLz4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcCgnbmFtZScsIGZpZWxkLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWwoZmllbGQudmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhmb3JtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmZpbGVJbnB1dCAmJiBvcHRpb25zLmZpbGVJbnB1dC5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPT09ICdQT1NUJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUlucHV0Q2xvbmVzID0gb3B0aW9ucy5maWxlSW5wdXQuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluc2VydCBhIGNsb25lIGZvciBlYWNoIGZpbGUgaW5wdXQgZmllbGQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZpbGVJbnB1dC5hZnRlcihmdW5jdGlvbiAoaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZUlucHV0Q2xvbmVzW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5wcm9wKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lc1tpbmRleF0gfHwgb3B0aW9ucy5wYXJhbU5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZGluZyB0aGUgZmlsZSBpbnB1dCBmaWVsZHMgdG8gdGhlIGhpZGRlbiBmb3JtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmVzIHRoZW0gZnJvbSB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKG9wdGlvbnMuZmlsZUlucHV0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9wKCdlbmN0eXBlJywgJ211bHRpcGFydC9mb3JtLWRhdGEnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuY3R5cGUgbXVzdCBiZSBzZXQgYXMgZW5jb2RpbmcgZm9yIElFOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9wKCdlbmNvZGluZycsICdtdWx0aXBhcnQvZm9ybS1kYXRhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIEhUTUw1IGZvcm0gYXR0cmlidXRlIGZyb20gdGhlIGlucHV0KHMpOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQucmVtb3ZlQXR0cignZm9ybScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgZmlsZSBpbnB1dCBmaWVsZHMgYXQgdGhlaXIgb3JpZ2luYWwgbG9jYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgcmVwbGFjaW5nIHRoZSBjbG9uZXMgd2l0aCB0aGUgb3JpZ2luYWxzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZUlucHV0Q2xvbmVzICYmIGZpbGVJbnB1dENsb25lcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0LmVhY2goZnVuY3Rpb24gKGluZGV4LCBpbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbG9uZSA9ICQoZmlsZUlucHV0Q2xvbmVzW2luZGV4XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgbmFtZSBhbmQgZm9ybSBwcm9wZXJ0aWVzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaW5wdXQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9wKCduYW1lJywgY2xvbmUucHJvcCgnbmFtZScpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignZm9ybScsIGNsb25lLmF0dHIoJ2Zvcm0nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUucmVwbGFjZVdpdGgoaW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZChpZnJhbWUpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGFib3J0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGlmcmFtZSBzcmMgYWJvcnRzIHRoZSByZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBwcmV2ZW50cyB3YXJuaW5nIHBvcHVwcyBvbiBIVFRQUyBpbiBJRTYuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbmNhdCBpcyB1c2VkIHRvIGF2b2lkIHRoZSBcIlNjcmlwdCBVUkxcIiBKU0xpbnQgZXJyb3I6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVuYmluZCgnbG9hZCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcCgnc3JjJywgaW5pdGlhbElmcmFtZVNyYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0ucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IHJldHVybnMgdGhlIGlmcmFtZSBjb250ZW50IGRvY3VtZW50IGFzIHJlc3BvbnNlLlxyXG4gICAgLy8gVGhlIGZvbGxvd2luZyBhZGRzIGNvbnZlcnRlcnMgZnJvbSBpZnJhbWUgdG8gdGV4dCwganNvbiwgaHRtbCwgeG1sXHJcbiAgICAvLyBhbmQgc2NyaXB0LlxyXG4gICAgLy8gUGxlYXNlIG5vdGUgdGhhdCB0aGUgQ29udGVudC1UeXBlIGZvciBKU09OIHJlc3BvbnNlcyBoYXMgdG8gYmUgdGV4dC9wbGFpblxyXG4gICAgLy8gb3IgdGV4dC9odG1sLCBpZiB0aGUgYnJvd3NlciBkb2Vzbid0IGluY2x1ZGUgYXBwbGljYXRpb24vanNvbiBpbiB0aGVcclxuICAgIC8vIEFjY2VwdCBoZWFkZXIsIGVsc2UgSUUgd2lsbCBzaG93IGEgZG93bmxvYWQgZGlhbG9nLlxyXG4gICAgLy8gVGhlIENvbnRlbnQtVHlwZSBmb3IgWE1MIHJlc3BvbnNlcyBvbiB0aGUgb3RoZXIgaGFuZCBoYXMgdG8gYmUgYWx3YXlzXHJcbiAgICAvLyBhcHBsaWNhdGlvbi94bWwgb3IgdGV4dC94bWwsIHNvIElFIHByb3Blcmx5IHBhcnNlcyB0aGUgWE1MIHJlc3BvbnNlLlxyXG4gICAgLy8gU2VlIGFsc29cclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC93aWtpL1NldHVwI2NvbnRlbnQtdHlwZS1uZWdvdGlhdGlvblxyXG4gICAgJC5hamF4U2V0dXAoe1xyXG4gICAgICAgIGNvbnZlcnRlcnM6IHtcclxuICAgICAgICAgICAgJ2lmcmFtZSB0ZXh0JzogZnVuY3Rpb24gKGlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdpZnJhbWUganNvbic6IGZ1bmN0aW9uIChpZnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpZnJhbWUgJiYgJC5wYXJzZUpTT04oJChpZnJhbWVbMF0uYm9keSkudGV4dCgpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ2lmcmFtZSBodG1sJzogZnVuY3Rpb24gKGlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS5odG1sKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdpZnJhbWUgeG1sJzogZnVuY3Rpb24gKGlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHhtbERvYyA9IGlmcmFtZSAmJiBpZnJhbWVbMF07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geG1sRG9jICYmICQuaXNYTUxEb2MoeG1sRG9jKSA/IHhtbERvYyA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQucGFyc2VYTUwoKHhtbERvYy5YTUxEb2N1bWVudCAmJiB4bWxEb2MuWE1MRG9jdW1lbnQueG1sKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh4bWxEb2MuYm9keSkuaHRtbCgpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ2lmcmFtZSBzY3JpcHQnOiBmdW5jdGlvbiAoaWZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaWZyYW1lICYmICQuZ2xvYmFsRXZhbCgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG59KSk7XHJcbiIsIi8qXHJcbiAqIGpRdWVyeSBGaWxlIFVwbG9hZCBQbHVnaW4gNS40MC4xXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZFxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgMjAxMCwgU2ViYXN0aWFuIFRzY2hhblxyXG4gKiBodHRwczovL2JsdWVpbXAubmV0XHJcbiAqXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZTpcclxuICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcclxuICovXHJcblxyXG4vKiBqc2hpbnQgbm9tZW46ZmFsc2UgKi9cclxuLyogZ2xvYmFsIGRlZmluZSwgd2luZG93LCBkb2N1bWVudCwgbG9jYXRpb24sIEJsb2IsIEZvcm1EYXRhICovXHJcblxyXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcclxuICAgICd1c2Ugc3RyaWN0JztcclxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuICAgICAgICAvLyBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgQU1EIG1vZHVsZTpcclxuICAgICAgICBkZWZpbmUoW1xyXG4gICAgICAgICAgICAnanF1ZXJ5JyxcclxuICAgICAgICAgICAgJ2pxdWVyeS51aS53aWRnZXQnXHJcbiAgICAgICAgXSwgZmFjdG9yeSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFsczpcclxuICAgICAgICBmYWN0b3J5KHdpbmRvdy5qUXVlcnkpO1xyXG4gICAgfVxyXG59KGZ1bmN0aW9uICgkKSB7XHJcbiAgICAndXNlIHN0cmljdCc7XHJcblxyXG4gICAgLy8gRGV0ZWN0IGZpbGUgaW5wdXQgc3VwcG9ydCwgYmFzZWQgb25cclxuICAgIC8vIGh0dHA6Ly92aWxqYW1pcy5jb20vYmxvZy8yMDEyL2ZpbGUtdXBsb2FkLXN1cHBvcnQtb24tbW9iaWxlL1xyXG4gICAgJC5zdXBwb3J0LmZpbGVJbnB1dCA9ICEobmV3IFJlZ0V4cChcclxuICAgICAgICAvLyBIYW5kbGUgZGV2aWNlcyB3aGljaCBnaXZlIGZhbHNlIHBvc2l0aXZlcyBmb3IgdGhlIGZlYXR1cmUgZGV0ZWN0aW9uOlxyXG4gICAgICAgICcoQW5kcm9pZCAoMVxcXFwuWzAxNTZdfDJcXFxcLlswMV0pKScgK1xyXG4gICAgICAgICAgICAnfChXaW5kb3dzIFBob25lIChPUyA3fDhcXFxcLjApKXwoWEJMV1ApfChadW5lV1ApfChXUERlc2t0b3ApJyArXHJcbiAgICAgICAgICAgICd8KHcoZWIpP09TQnJvd3Nlcil8KHdlYk9TKScgK1xyXG4gICAgICAgICAgICAnfChLaW5kbGUvKDFcXFxcLjB8MlxcXFwuWzA1XXwzXFxcXC4wKSknXHJcbiAgICApLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpIHx8XHJcbiAgICAgICAgLy8gRmVhdHVyZSBkZXRlY3Rpb24gZm9yIGFsbCBvdGhlciBkZXZpY2VzOlxyXG4gICAgICAgICQoJzxpbnB1dCB0eXBlPVwiZmlsZVwiPicpLnByb3AoJ2Rpc2FibGVkJykpO1xyXG5cclxuICAgIC8vIFRoZSBGaWxlUmVhZGVyIEFQSSBpcyBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IHdvcmtzIGFzIGZlYXR1cmUgZGV0ZWN0aW9uLFxyXG4gICAgLy8gYXMgc29tZSBTYWZhcmkgdmVyc2lvbnMgKDU/KSBzdXBwb3J0IFhIUiBmaWxlIHVwbG9hZHMgdmlhIHRoZSBGb3JtRGF0YSBBUEksXHJcbiAgICAvLyBidXQgbm90IG5vbi1tdWx0aXBhcnQgWEhSIGZpbGUgdXBsb2Fkcy5cclxuICAgIC8vIHdpbmRvdy5YTUxIdHRwUmVxdWVzdFVwbG9hZCBpcyBub3QgYXZhaWxhYmxlIG9uIElFMTAsIHNvIHdlIGNoZWNrIGZvclxyXG4gICAgLy8gd2luZG93LlByb2dyZXNzRXZlbnQgaW5zdGVhZCB0byBkZXRlY3QgWEhSMiBmaWxlIHVwbG9hZCBjYXBhYmlsaXR5OlxyXG4gICAgJC5zdXBwb3J0LnhockZpbGVVcGxvYWQgPSAhISh3aW5kb3cuUHJvZ3Jlc3NFdmVudCAmJiB3aW5kb3cuRmlsZVJlYWRlcik7XHJcbiAgICAkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkID0gISF3aW5kb3cuRm9ybURhdGE7XHJcblxyXG4gICAgLy8gRGV0ZWN0IHN1cHBvcnQgZm9yIEJsb2Igc2xpY2luZyAocmVxdWlyZWQgZm9yIGNodW5rZWQgdXBsb2Fkcyk6XHJcbiAgICAkLnN1cHBvcnQuYmxvYlNsaWNlID0gd2luZG93LkJsb2IgJiYgKEJsb2IucHJvdG90eXBlLnNsaWNlIHx8XHJcbiAgICAgICAgQmxvYi5wcm90b3R5cGUud2Via2l0U2xpY2UgfHwgQmxvYi5wcm90b3R5cGUubW96U2xpY2UpO1xyXG5cclxuICAgIC8vIFRoZSBmaWxldXBsb2FkIHdpZGdldCBsaXN0ZW5zIGZvciBjaGFuZ2UgZXZlbnRzIG9uIGZpbGUgaW5wdXQgZmllbGRzIGRlZmluZWRcclxuICAgIC8vIHZpYSBmaWxlSW5wdXQgc2V0dGluZyBhbmQgcGFzdGUgb3IgZHJvcCBldmVudHMgb2YgdGhlIGdpdmVuIGRyb3Bab25lLlxyXG4gICAgLy8gSW4gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgalF1ZXJ5IFdpZGdldCBtZXRob2RzLCB0aGUgZmlsZXVwbG9hZCB3aWRnZXRcclxuICAgIC8vIGV4cG9zZXMgdGhlIFwiYWRkXCIgYW5kIFwic2VuZFwiIG1ldGhvZHMsIHRvIGFkZCBvciBkaXJlY3RseSBzZW5kIGZpbGVzIHVzaW5nXHJcbiAgICAvLyB0aGUgZmlsZXVwbG9hZCBBUEkuXHJcbiAgICAvLyBCeSBkZWZhdWx0LCBmaWxlcyBhZGRlZCB2aWEgZmlsZSBpbnB1dCBzZWxlY3Rpb24sIHBhc3RlLCBkcmFnICYgZHJvcCBvclxyXG4gICAgLy8gXCJhZGRcIiBtZXRob2QgYXJlIHVwbG9hZGVkIGltbWVkaWF0ZWx5LCBidXQgaXQgaXMgcG9zc2libGUgdG8gb3ZlcnJpZGVcclxuICAgIC8vIHRoZSBcImFkZFwiIGNhbGxiYWNrIG9wdGlvbiB0byBxdWV1ZSBmaWxlIHVwbG9hZHMuXHJcbiAgICAkLndpZGdldCgnYmx1ZWltcC5maWxldXBsb2FkJywge1xyXG5cclxuICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIC8vIFRoZSBkcm9wIHRhcmdldCBlbGVtZW50KHMpLCBieSB0aGUgZGVmYXVsdCB0aGUgY29tcGxldGUgZG9jdW1lbnQuXHJcbiAgICAgICAgICAgIC8vIFNldCB0byBudWxsIHRvIGRpc2FibGUgZHJhZyAmIGRyb3Agc3VwcG9ydDpcclxuICAgICAgICAgICAgZHJvcFpvbmU6ICQoZG9jdW1lbnQpLFxyXG4gICAgICAgICAgICAvLyBUaGUgcGFzdGUgdGFyZ2V0IGVsZW1lbnQocyksIGJ5IHRoZSBkZWZhdWx0IHRoZSBjb21wbGV0ZSBkb2N1bWVudC5cclxuICAgICAgICAgICAgLy8gU2V0IHRvIG51bGwgdG8gZGlzYWJsZSBwYXN0ZSBzdXBwb3J0OlxyXG4gICAgICAgICAgICBwYXN0ZVpvbmU6ICQoZG9jdW1lbnQpLFxyXG4gICAgICAgICAgICAvLyBUaGUgZmlsZSBpbnB1dCBmaWVsZChzKSwgdGhhdCBhcmUgbGlzdGVuZWQgdG8gZm9yIGNoYW5nZSBldmVudHMuXHJcbiAgICAgICAgICAgIC8vIElmIHVuZGVmaW5lZCwgaXQgaXMgc2V0IHRvIHRoZSBmaWxlIGlucHV0IGZpZWxkcyBpbnNpZGVcclxuICAgICAgICAgICAgLy8gb2YgdGhlIHdpZGdldCBlbGVtZW50IG9uIHBsdWdpbiBpbml0aWFsaXphdGlvbi5cclxuICAgICAgICAgICAgLy8gU2V0IHRvIG51bGwgdG8gZGlzYWJsZSB0aGUgY2hhbmdlIGxpc3RlbmVyLlxyXG4gICAgICAgICAgICBmaWxlSW5wdXQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCwgdGhlIGZpbGUgaW5wdXQgZmllbGQgaXMgcmVwbGFjZWQgd2l0aCBhIGNsb25lIGFmdGVyXHJcbiAgICAgICAgICAgIC8vIGVhY2ggaW5wdXQgZmllbGQgY2hhbmdlIGV2ZW50LiBUaGlzIGlzIHJlcXVpcmVkIGZvciBpZnJhbWUgdHJhbnNwb3J0XHJcbiAgICAgICAgICAgIC8vIHF1ZXVlcyBhbmQgYWxsb3dzIGNoYW5nZSBldmVudHMgdG8gYmUgZmlyZWQgZm9yIHRoZSBzYW1lIGZpbGVcclxuICAgICAgICAgICAgLy8gc2VsZWN0aW9uLCBidXQgY2FuIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gZmFsc2U6XHJcbiAgICAgICAgICAgIHJlcGxhY2VGaWxlSW5wdXQ6IHRydWUsXHJcbiAgICAgICAgICAgIC8vIFRoZSBwYXJhbWV0ZXIgbmFtZSBmb3IgdGhlIGZpbGUgZm9ybSBkYXRhICh0aGUgcmVxdWVzdCBhcmd1bWVudCBuYW1lKS5cclxuICAgICAgICAgICAgLy8gSWYgdW5kZWZpbmVkIG9yIGVtcHR5LCB0aGUgbmFtZSBwcm9wZXJ0eSBvZiB0aGUgZmlsZSBpbnB1dCBmaWVsZCBpc1xyXG4gICAgICAgICAgICAvLyB1c2VkLCBvciBcImZpbGVzW11cIiBpZiB0aGUgZmlsZSBpbnB1dCBuYW1lIHByb3BlcnR5IGlzIGFsc28gZW1wdHksXHJcbiAgICAgICAgICAgIC8vIGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzOlxyXG4gICAgICAgICAgICBwYXJhbU5hbWU6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCwgZWFjaCBmaWxlIG9mIGEgc2VsZWN0aW9uIGlzIHVwbG9hZGVkIHVzaW5nIGFuIGluZGl2aWR1YWxcclxuICAgICAgICAgICAgLy8gcmVxdWVzdCBmb3IgWEhSIHR5cGUgdXBsb2Fkcy4gU2V0IHRvIGZhbHNlIHRvIHVwbG9hZCBmaWxlXHJcbiAgICAgICAgICAgIC8vIHNlbGVjdGlvbnMgaW4gb25lIHJlcXVlc3QgZWFjaDpcclxuICAgICAgICAgICAgc2luZ2xlRmlsZVVwbG9hZHM6IHRydWUsXHJcbiAgICAgICAgICAgIC8vIFRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZmlsZXMgdXBsb2FkZWQgd2l0aCBvbmUgWEhSIHJlcXVlc3QsXHJcbiAgICAgICAgICAgIC8vIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiAwOlxyXG4gICAgICAgICAgICBsaW1pdE11bHRpRmlsZVVwbG9hZHM6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBvcHRpb24gbGltaXRzIHRoZSBudW1iZXIgb2YgZmlsZXMgdXBsb2FkZWQgd2l0aCBvbmVcclxuICAgICAgICAgICAgLy8gWEhSIHJlcXVlc3QgdG8ga2VlcCB0aGUgcmVxdWVzdCBzaXplIHVuZGVyIG9yIGVxdWFsIHRvIHRoZSBkZWZpbmVkXHJcbiAgICAgICAgICAgIC8vIGxpbWl0IGluIGJ5dGVzOlxyXG4gICAgICAgICAgICBsaW1pdE11bHRpRmlsZVVwbG9hZFNpemU6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgLy8gTXVsdGlwYXJ0IGZpbGUgdXBsb2FkcyBhZGQgYSBudW1iZXIgb2YgYnl0ZXMgdG8gZWFjaCB1cGxvYWRlZCBmaWxlLFxyXG4gICAgICAgICAgICAvLyB0aGVyZWZvcmUgdGhlIGZvbGxvd2luZyBvcHRpb24gYWRkcyBhbiBvdmVyaGVhZCBmb3IgZWFjaCBmaWxlIHVzZWRcclxuICAgICAgICAgICAgLy8gaW4gdGhlIGxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZSBjb25maWd1cmF0aW9uOlxyXG4gICAgICAgICAgICBsaW1pdE11bHRpRmlsZVVwbG9hZFNpemVPdmVyaGVhZDogNTEyLFxyXG4gICAgICAgICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBpc3N1ZSBhbGwgZmlsZSB1cGxvYWQgcmVxdWVzdHNcclxuICAgICAgICAgICAgLy8gaW4gYSBzZXF1ZW50aWFsIG9yZGVyOlxyXG4gICAgICAgICAgICBzZXF1ZW50aWFsVXBsb2FkczogZmFsc2UsXHJcbiAgICAgICAgICAgIC8vIFRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY29uY3VycmVudCB1cGxvYWRzLFxyXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMDpcclxuICAgICAgICAgICAgbGltaXRDb25jdXJyZW50VXBsb2FkczogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBmb3JjZSBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XHJcbiAgICAgICAgICAgIGZvcmNlSWZyYW1lVHJhbnNwb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgLy8gU2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIHRoZSBsb2NhdGlvbiBvZiBhIHJlZGlyZWN0IHVybCBvbiB0aGVcclxuICAgICAgICAgICAgLy8gb3JpZ2luIHNlcnZlciwgZm9yIGNyb3NzLWRvbWFpbiBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XHJcbiAgICAgICAgICAgIHJlZGlyZWN0OiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIC8vIFRoZSBwYXJhbWV0ZXIgbmFtZSBmb3IgdGhlIHJlZGlyZWN0IHVybCwgc2VudCBhcyBwYXJ0IG9mIHRoZSBmb3JtXHJcbiAgICAgICAgICAgIC8vIGRhdGEgYW5kIHNldCB0byAncmVkaXJlY3QnIGlmIHRoaXMgb3B0aW9uIGlzIGVtcHR5OlxyXG4gICAgICAgICAgICByZWRpcmVjdFBhcmFtTmFtZTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdGhlIGxvY2F0aW9uIG9mIGEgcG9zdE1lc3NhZ2Ugd2luZG93LFxyXG4gICAgICAgICAgICAvLyB0byBlbmFibGUgcG9zdE1lc3NhZ2UgdHJhbnNwb3J0IHVwbG9hZHM6XHJcbiAgICAgICAgICAgIHBvc3RNZXNzYWdlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIC8vIEJ5IGRlZmF1bHQsIFhIUiBmaWxlIHVwbG9hZHMgYXJlIHNlbnQgYXMgbXVsdGlwYXJ0L2Zvcm0tZGF0YS5cclxuICAgICAgICAgICAgLy8gVGhlIGlmcmFtZSB0cmFuc3BvcnQgaXMgYWx3YXlzIHVzaW5nIG11bHRpcGFydC9mb3JtLWRhdGEuXHJcbiAgICAgICAgICAgIC8vIFNldCB0byBmYWxzZSB0byBlbmFibGUgbm9uLW11bHRpcGFydCBYSFIgdXBsb2FkczpcclxuICAgICAgICAgICAgbXVsdGlwYXJ0OiB0cnVlLFxyXG4gICAgICAgICAgICAvLyBUbyB1cGxvYWQgbGFyZ2UgZmlsZXMgaW4gc21hbGxlciBjaHVua3MsIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvblxyXG4gICAgICAgICAgICAvLyB0byBhIHByZWZlcnJlZCBtYXhpbXVtIGNodW5rIHNpemUuIElmIHNldCB0byAwLCBudWxsIG9yIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgLy8gb3IgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmVxdWlyZWQgQmxvYiBBUEksIGZpbGVzIHdpbGxcclxuICAgICAgICAgICAgLy8gYmUgdXBsb2FkZWQgYXMgYSB3aG9sZS5cclxuICAgICAgICAgICAgbWF4Q2h1bmtTaXplOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIC8vIFdoZW4gYSBub24tbXVsdGlwYXJ0IHVwbG9hZCBvciBhIGNodW5rZWQgbXVsdGlwYXJ0IHVwbG9hZCBoYXMgYmVlblxyXG4gICAgICAgICAgICAvLyBhYm9ydGVkLCB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZXN1bWUgdGhlIHVwbG9hZCBieSBzZXR0aW5nXHJcbiAgICAgICAgICAgIC8vIGl0IHRvIHRoZSBzaXplIG9mIHRoZSBhbHJlYWR5IHVwbG9hZGVkIGJ5dGVzLiBUaGlzIG9wdGlvbiBpcyBtb3N0XHJcbiAgICAgICAgICAgIC8vIHVzZWZ1bCB3aGVuIG1vZGlmeWluZyB0aGUgb3B0aW9ucyBvYmplY3QgaW5zaWRlIG9mIHRoZSBcImFkZFwiIG9yXHJcbiAgICAgICAgICAgIC8vIFwic2VuZFwiIGNhbGxiYWNrcywgYXMgdGhlIG9wdGlvbnMgYXJlIGNsb25lZCBmb3IgZWFjaCBmaWxlIHVwbG9hZC5cclxuICAgICAgICAgICAgdXBsb2FkZWRCeXRlczogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAvLyBCeSBkZWZhdWx0LCBmYWlsZWQgKGFib3J0IG9yIGVycm9yKSBmaWxlIHVwbG9hZHMgYXJlIHJlbW92ZWQgZnJvbSB0aGVcclxuICAgICAgICAgICAgLy8gZ2xvYmFsIHByb2dyZXNzIGNhbGN1bGF0aW9uLiBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gZmFsc2UgdG9cclxuICAgICAgICAgICAgLy8gcHJldmVudCByZWNhbGN1bGF0aW5nIHRoZSBnbG9iYWwgcHJvZ3Jlc3MgZGF0YTpcclxuICAgICAgICAgICAgcmVjYWxjdWxhdGVQcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICAgICAgLy8gSW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIGNhbGN1bGF0ZSBhbmQgdHJpZ2dlciBwcm9ncmVzcyBldmVudHM6XHJcbiAgICAgICAgICAgIHByb2dyZXNzSW50ZXJ2YWw6IDEwMCxcclxuICAgICAgICAgICAgLy8gSW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIGNhbGN1bGF0ZSBwcm9ncmVzcyBiaXRyYXRlOlxyXG4gICAgICAgICAgICBiaXRyYXRlSW50ZXJ2YWw6IDUwMCxcclxuICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCwgdXBsb2FkcyBhcmUgc3RhcnRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYWRkaW5nIGZpbGVzOlxyXG4gICAgICAgICAgICBhdXRvVXBsb2FkOiB0cnVlLFxyXG5cclxuICAgICAgICAgICAgLy8gRXJyb3IgYW5kIGluZm8gbWVzc2FnZXM6XHJcbiAgICAgICAgICAgIG1lc3NhZ2VzOiB7XHJcbiAgICAgICAgICAgICAgICB1cGxvYWRlZEJ5dGVzOiAnVXBsb2FkZWQgYnl0ZXMgZXhjZWVkIGZpbGUgc2l6ZSdcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIC8vIFRyYW5zbGF0aW9uIGZ1bmN0aW9uLCBnZXRzIHRoZSBtZXNzYWdlIGtleSB0byBiZSB0cmFuc2xhdGVkXHJcbiAgICAgICAgICAgIC8vIGFuZCBhbiBvYmplY3Qgd2l0aCBjb250ZXh0IHNwZWNpZmljIGRhdGEgYXMgYXJndW1lbnRzOlxyXG4gICAgICAgICAgICBpMThuOiBmdW5jdGlvbiAobWVzc2FnZSwgY29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHRoaXMubWVzc2FnZXNbbWVzc2FnZV0gfHwgbWVzc2FnZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAkLmVhY2goY29udGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgneycgKyBrZXkgKyAnfScsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLy8gQWRkaXRpb25hbCBmb3JtIGRhdGEgdG8gYmUgc2VudCBhbG9uZyB3aXRoIHRoZSBmaWxlIHVwbG9hZHMgY2FuIGJlIHNldFxyXG4gICAgICAgICAgICAvLyB1c2luZyB0aGlzIG9wdGlvbiwgd2hpY2ggYWNjZXB0cyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggbmFtZSBhbmRcclxuICAgICAgICAgICAgLy8gdmFsdWUgcHJvcGVydGllcywgYSBmdW5jdGlvbiByZXR1cm5pbmcgc3VjaCBhbiBhcnJheSwgYSBGb3JtRGF0YVxyXG4gICAgICAgICAgICAvLyBvYmplY3QgKGZvciBYSFIgZmlsZSB1cGxvYWRzKSwgb3IgYSBzaW1wbGUgb2JqZWN0LlxyXG4gICAgICAgICAgICAvLyBUaGUgZm9ybSBvZiB0aGUgZmlyc3QgZmlsZUlucHV0IGlzIGdpdmVuIGFzIHBhcmFtZXRlciB0byB0aGUgZnVuY3Rpb246XHJcbiAgICAgICAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoZm9ybSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm0uc2VyaWFsaXplQXJyYXkoKTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIC8vIFRoZSBhZGQgY2FsbGJhY2sgaXMgaW52b2tlZCBhcyBzb29uIGFzIGZpbGVzIGFyZSBhZGRlZCB0byB0aGUgZmlsZXVwbG9hZFxyXG4gICAgICAgICAgICAvLyB3aWRnZXQgKHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgZHJhZyAmIGRyb3AsIHBhc3RlIG9yIGFkZCBBUEkgY2FsbCkuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZSBzaW5nbGVGaWxlVXBsb2FkcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhpcyBjYWxsYmFjayB3aWxsIGJlXHJcbiAgICAgICAgICAgIC8vIGNhbGxlZCBvbmNlIGZvciBlYWNoIGZpbGUgaW4gdGhlIHNlbGVjdGlvbiBmb3IgWEhSIGZpbGUgdXBsb2FkcywgZWxzZVxyXG4gICAgICAgICAgICAvLyBvbmNlIGZvciBlYWNoIGZpbGUgc2VsZWN0aW9uLlxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAvLyBUaGUgdXBsb2FkIHN0YXJ0cyB3aGVuIHRoZSBzdWJtaXQgbWV0aG9kIGlzIGludm9rZWQgb24gdGhlIGRhdGEgcGFyYW1ldGVyLlxyXG4gICAgICAgICAgICAvLyBUaGUgZGF0YSBvYmplY3QgY29udGFpbnMgYSBmaWxlcyBwcm9wZXJ0eSBob2xkaW5nIHRoZSBhZGRlZCBmaWxlc1xyXG4gICAgICAgICAgICAvLyBhbmQgYWxsb3dzIHlvdSB0byBvdmVycmlkZSBwbHVnaW4gb3B0aW9ucyBhcyB3ZWxsIGFzIGRlZmluZSBhamF4IHNldHRpbmdzLlxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAvLyBMaXN0ZW5lcnMgZm9yIHRoaXMgY2FsbGJhY2sgY2FuIGFsc28gYmUgYm91bmQgdGhlIGZvbGxvd2luZyB3YXk6XHJcbiAgICAgICAgICAgIC8vIC5iaW5kKCdmaWxldXBsb2FkYWRkJywgZnVuYyk7XHJcbiAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgIC8vIGRhdGEuc3VibWl0KCkgcmV0dXJucyBhIFByb21pc2Ugb2JqZWN0IGFuZCBhbGxvd3MgdG8gYXR0YWNoIGFkZGl0aW9uYWxcclxuICAgICAgICAgICAgLy8gaGFuZGxlcnMgdXNpbmcgalF1ZXJ5J3MgRGVmZXJyZWQgY2FsbGJhY2tzOlxyXG4gICAgICAgICAgICAvLyBkYXRhLnN1Ym1pdCgpLmRvbmUoZnVuYykuZmFpbChmdW5jKS5hbHdheXMoZnVuYyk7XHJcbiAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuYXV0b1VwbG9hZCB8fCAoZGF0YS5hdXRvVXBsb2FkICE9PSBmYWxzZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmZpbGV1cGxvYWQoJ29wdGlvbicsICdhdXRvVXBsb2FkJykpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wcm9jZXNzKCkuZG9uZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3VibWl0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvLyBPdGhlciBjYWxsYmFja3M6XHJcblxyXG4gICAgICAgICAgICAvLyBDYWxsYmFjayBmb3IgdGhlIHN1Ym1pdCBldmVudCBvZiBlYWNoIGZpbGUgdXBsb2FkOlxyXG4gICAgICAgICAgICAvLyBzdWJtaXQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRzdWJtaXQnLCBmdW5jKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3RhcnQgb2YgZWFjaCBmaWxlIHVwbG9hZCByZXF1ZXN0OlxyXG4gICAgICAgICAgICAvLyBzZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2Fkc2VuZCcsIGZ1bmMpO1xyXG5cclxuICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgdXBsb2FkczpcclxuICAgICAgICAgICAgLy8gZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGRvbmUnLCBmdW5jKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciBmYWlsZWQgKGFib3J0IG9yIGVycm9yKSB1cGxvYWRzOlxyXG4gICAgICAgICAgICAvLyBmYWlsOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2FkZmFpbCcsIGZ1bmMpO1xyXG5cclxuICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIGNvbXBsZXRlZCAoc3VjY2VzcywgYWJvcnQgb3IgZXJyb3IpIHJlcXVlc3RzOlxyXG4gICAgICAgICAgICAvLyBhbHdheXM6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRhbHdheXMnLCBmdW5jKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxyXG4gICAgICAgICAgICAvLyBwcm9ncmVzczogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZHByb2dyZXNzJywgZnVuYyk7XHJcblxyXG4gICAgICAgICAgICAvLyBDYWxsYmFjayBmb3IgZ2xvYmFsIHVwbG9hZCBwcm9ncmVzcyBldmVudHM6XHJcbiAgICAgICAgICAgIC8vIHByb2dyZXNzYWxsOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2FkcHJvZ3Jlc3NhbGwnLCBmdW5jKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciB1cGxvYWRzIHN0YXJ0LCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0YXJ0IGV2ZW50OlxyXG4gICAgICAgICAgICAvLyBzdGFydDogZnVuY3Rpb24gKGUpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZHN0YXJ0JywgZnVuYyk7XHJcblxyXG4gICAgICAgICAgICAvLyBDYWxsYmFjayBmb3IgdXBsb2FkcyBzdG9wLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XHJcbiAgICAgICAgICAgIC8vIHN0b3A6IGZ1bmN0aW9uIChlKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRzdG9wJywgZnVuYyk7XHJcblxyXG4gICAgICAgICAgICAvLyBDYWxsYmFjayBmb3IgY2hhbmdlIGV2ZW50cyBvZiB0aGUgZmlsZUlucHV0KHMpOlxyXG4gICAgICAgICAgICAvLyBjaGFuZ2U6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRjaGFuZ2UnLCBmdW5jKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciBwYXN0ZSBldmVudHMgdG8gdGhlIHBhc3RlWm9uZShzKTpcclxuICAgICAgICAgICAgLy8gcGFzdGU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRwYXN0ZScsIGZ1bmMpO1xyXG5cclxuICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIGRyb3AgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcclxuICAgICAgICAgICAgLy8gZHJvcDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGRyb3AnLCBmdW5jKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciBkcmFnb3ZlciBldmVudHMgb2YgdGhlIGRyb3Bab25lKHMpOlxyXG4gICAgICAgICAgICAvLyBkcmFnb3ZlcjogZnVuY3Rpb24gKGUpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGRyYWdvdmVyJywgZnVuYyk7XHJcblxyXG4gICAgICAgICAgICAvLyBDYWxsYmFjayBmb3IgdGhlIHN0YXJ0IG9mIGVhY2ggY2h1bmsgdXBsb2FkIHJlcXVlc3Q6XHJcbiAgICAgICAgICAgIC8vIGNodW5rc2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGNodW5rc2VuZCcsIGZ1bmMpO1xyXG5cclxuICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgY2h1bmsgdXBsb2FkczpcclxuICAgICAgICAgICAgLy8gY2h1bmtkb25lOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2FkY2h1bmtkb25lJywgZnVuYyk7XHJcblxyXG4gICAgICAgICAgICAvLyBDYWxsYmFjayBmb3IgZmFpbGVkIChhYm9ydCBvciBlcnJvcikgY2h1bmsgdXBsb2FkczpcclxuICAgICAgICAgICAgLy8gY2h1bmtmYWlsOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2FkY2h1bmtmYWlsJywgZnVuYyk7XHJcblxyXG4gICAgICAgICAgICAvLyBDYWxsYmFjayBmb3IgY29tcGxldGVkIChzdWNjZXNzLCBhYm9ydCBvciBlcnJvcikgY2h1bmsgdXBsb2FkIHJlcXVlc3RzOlxyXG4gICAgICAgICAgICAvLyBjaHVua2Fsd2F5czogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGNodW5rYWx3YXlzJywgZnVuYyk7XHJcblxyXG4gICAgICAgICAgICAvLyBUaGUgcGx1Z2luIG9wdGlvbnMgYXJlIHVzZWQgYXMgc2V0dGluZ3Mgb2JqZWN0IGZvciB0aGUgYWpheCBjYWxscy5cclxuICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgalF1ZXJ5IGFqYXggc2V0dGluZ3MgcmVxdWlyZWQgZm9yIHRoZSBmaWxlIHVwbG9hZHM6XHJcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgY29udGVudFR5cGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBjYWNoZTogZmFsc2VcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvLyBBIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0IHJlcXVpcmUgcmVpbml0aWFsaXppbmcgZXZlbnQgbGlzdGVuZXJzIGFuZC9vclxyXG4gICAgICAgIC8vIHNwZWNpYWwgaW5pdGlhbGl6YXRpb24gY29kZTpcclxuICAgICAgICBfc3BlY2lhbE9wdGlvbnM6IFtcclxuICAgICAgICAgICAgJ2ZpbGVJbnB1dCcsXHJcbiAgICAgICAgICAgICdkcm9wWm9uZScsXHJcbiAgICAgICAgICAgICdwYXN0ZVpvbmUnLFxyXG4gICAgICAgICAgICAnbXVsdGlwYXJ0JyxcclxuICAgICAgICAgICAgJ2ZvcmNlSWZyYW1lVHJhbnNwb3J0J1xyXG4gICAgICAgIF0sXHJcblxyXG4gICAgICAgIF9ibG9iU2xpY2U6ICQuc3VwcG9ydC5ibG9iU2xpY2UgJiYgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc2xpY2UgPSB0aGlzLnNsaWNlIHx8IHRoaXMud2Via2l0U2xpY2UgfHwgdGhpcy5tb3pTbGljZTtcclxuICAgICAgICAgICAgcmV0dXJuIHNsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX0JpdHJhdGVUaW1lcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVzdGFtcCA9ICgoRGF0ZS5ub3cpID8gRGF0ZS5ub3coKSA6IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRlZCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuYml0cmF0ZSA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Qml0cmF0ZSA9IGZ1bmN0aW9uIChub3csIGxvYWRlZCwgaW50ZXJ2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0aW1lRGlmZiA9IG5vdyAtIHRoaXMudGltZXN0YW1wO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJpdHJhdGUgfHwgIWludGVydmFsIHx8IHRpbWVEaWZmID4gaW50ZXJ2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJpdHJhdGUgPSAobG9hZGVkIC0gdGhpcy5sb2FkZWQpICogKDEwMDAgLyB0aW1lRGlmZikgKiA4O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkID0gbG9hZGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gbm93O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYml0cmF0ZTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfaXNYSFJVcGxvYWQ6IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhb3B0aW9ucy5mb3JjZUlmcmFtZVRyYW5zcG9ydCAmJlxyXG4gICAgICAgICAgICAgICAgKCghb3B0aW9ucy5tdWx0aXBhcnQgJiYgJC5zdXBwb3J0LnhockZpbGVVcGxvYWQpIHx8XHJcbiAgICAgICAgICAgICAgICAkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfZ2V0Rm9ybURhdGE6IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHZhciBmb3JtRGF0YTtcclxuICAgICAgICAgICAgaWYgKCQudHlwZShvcHRpb25zLmZvcm1EYXRhKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZm9ybURhdGEob3B0aW9ucy5mb3JtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoJC5pc0FycmF5KG9wdGlvbnMuZm9ybURhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5mb3JtRGF0YTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoJC50eXBlKG9wdGlvbnMuZm9ybURhdGEpID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgZm9ybURhdGEgPSBbXTtcclxuICAgICAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZvcm1EYXRhLCBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1EYXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfZ2V0VG90YWw6IGZ1bmN0aW9uIChmaWxlcykge1xyXG4gICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xyXG4gICAgICAgICAgICAkLmVhY2goZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xyXG4gICAgICAgICAgICAgICAgdG90YWwgKz0gZmlsZS5zaXplIHx8IDE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gdG90YWw7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2luaXRQcm9ncmVzc09iamVjdDogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgICAgICB2YXIgcHJvZ3Jlc3MgPSB7XHJcbiAgICAgICAgICAgICAgICBsb2FkZWQ6IDAsXHJcbiAgICAgICAgICAgICAgICB0b3RhbDogMCxcclxuICAgICAgICAgICAgICAgIGJpdHJhdGU6IDBcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKG9iai5fcHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgICQuZXh0ZW5kKG9iai5fcHJvZ3Jlc3MsIHByb2dyZXNzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9iai5fcHJvZ3Jlc3MgPSBwcm9ncmVzcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9pbml0UmVzcG9uc2VPYmplY3Q6IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICAgICAgdmFyIHByb3A7XHJcbiAgICAgICAgICAgIGlmIChvYmouX3Jlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHByb3AgaW4gb2JqLl9yZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouX3Jlc3BvbnNlLmhhc093blByb3BlcnR5KHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmouX3Jlc3BvbnNlW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9iai5fcmVzcG9uc2UgPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9vblByb2dyZXNzOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoZS5sZW5ndGhDb21wdXRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm93ID0gKChEYXRlLm5vdykgPyBEYXRlLm5vdygpIDogKG5ldyBEYXRlKCkpLmdldFRpbWUoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVkO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuX3RpbWUgJiYgZGF0YS5wcm9ncmVzc0ludGVydmFsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChub3cgLSBkYXRhLl90aW1lIDwgZGF0YS5wcm9ncmVzc0ludGVydmFsKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmxvYWRlZCAhPT0gZS50b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRhdGEuX3RpbWUgPSBub3c7XHJcbiAgICAgICAgICAgICAgICBsb2FkZWQgPSBNYXRoLmZsb29yKFxyXG4gICAgICAgICAgICAgICAgICAgIGUubG9hZGVkIC8gZS50b3RhbCAqIChkYXRhLmNodW5rU2l6ZSB8fCBkYXRhLl9wcm9ncmVzcy50b3RhbClcclxuICAgICAgICAgICAgICAgICkgKyAoZGF0YS51cGxvYWRlZEJ5dGVzIHx8IDApO1xyXG4gICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBkaWZmZXJlbmNlIGZyb20gdGhlIHByZXZpb3VzbHkgbG9hZGVkIHN0YXRlXHJcbiAgICAgICAgICAgICAgICAvLyB0byB0aGUgZ2xvYmFsIGxvYWRlZCBjb3VudGVyOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkICs9IChsb2FkZWQgLSBkYXRhLl9wcm9ncmVzcy5sb2FkZWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MuYml0cmF0ZSA9IHRoaXMuX2JpdHJhdGVUaW1lci5nZXRCaXRyYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgIG5vdyxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5iaXRyYXRlSW50ZXJ2YWxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBkYXRhLl9wcm9ncmVzcy5sb2FkZWQgPSBkYXRhLmxvYWRlZCA9IGxvYWRlZDtcclxuICAgICAgICAgICAgICAgIGRhdGEuX3Byb2dyZXNzLmJpdHJhdGUgPSBkYXRhLmJpdHJhdGUgPSBkYXRhLl9iaXRyYXRlVGltZXIuZ2V0Qml0cmF0ZShcclxuICAgICAgICAgICAgICAgICAgICBub3csXHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEuYml0cmF0ZUludGVydmFsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBhIGN1c3RvbSBwcm9ncmVzcyBldmVudCB3aXRoIGEgdG90YWwgZGF0YSBwcm9wZXJ0eSBzZXRcclxuICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBmaWxlIHNpemUocykgb2YgdGhlIGN1cnJlbnQgdXBsb2FkIGFuZCBhIGxvYWRlZCBkYXRhXHJcbiAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0eSBjYWxjdWxhdGVkIGFjY29yZGluZ2x5OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcihcclxuICAgICAgICAgICAgICAgICAgICAncHJvZ3Jlc3MnLFxyXG4gICAgICAgICAgICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge2RlbGVnYXRlZEV2ZW50OiBlfSksXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgYSBnbG9iYWwgcHJvZ3Jlc3MgZXZlbnQgZm9yIGFsbCBjdXJyZW50IGZpbGUgdXBsb2FkcyxcclxuICAgICAgICAgICAgICAgIC8vIGluY2x1ZGluZyBhamF4IGNhbGxzIHF1ZXVlZCBmb3Igc2VxdWVudGlhbCBmaWxlIHVwbG9hZHM6XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyKFxyXG4gICAgICAgICAgICAgICAgICAgICdwcm9ncmVzc2FsbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgJC5FdmVudCgncHJvZ3Jlc3NhbGwnLCB7ZGVsZWdhdGVkRXZlbnQ6IGV9KSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9pbml0UHJvZ3Jlc3NMaXN0ZW5lcjogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxyXG4gICAgICAgICAgICAgICAgeGhyID0gb3B0aW9ucy54aHIgPyBvcHRpb25zLnhocigpIDogJC5hamF4U2V0dGluZ3MueGhyKCk7XHJcbiAgICAgICAgICAgIC8vIEFjY2Vzc3MgdG8gdGhlIG5hdGl2ZSBYSFIgb2JqZWN0IGlzIHJlcXVpcmVkIHRvIGFkZCBldmVudCBsaXN0ZW5lcnNcclxuICAgICAgICAgICAgLy8gZm9yIHRoZSB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnQ6XHJcbiAgICAgICAgICAgIGlmICh4aHIudXBsb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAkKHhoci51cGxvYWQpLmJpbmQoJ3Byb2dyZXNzJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgb2UgPSBlLm9yaWdpbmFsRXZlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcm9ncmVzcyBldmVudCBwcm9wZXJ0aWVzIGdldCBjb3BpZWQgb3ZlcjpcclxuICAgICAgICAgICAgICAgICAgICBlLmxlbmd0aENvbXB1dGFibGUgPSBvZS5sZW5ndGhDb21wdXRhYmxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGUubG9hZGVkID0gb2UubG9hZGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIGUudG90YWwgPSBvZS50b3RhbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKGUsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLnhociA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geGhyO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9pc0luc3RhbmNlT2Y6IGZ1bmN0aW9uICh0eXBlLCBvYmopIHtcclxuICAgICAgICAgICAgLy8gQ3Jvc3MtZnJhbWUgaW5zdGFuY2VvZiBjaGVja1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0ICcgKyB0eXBlICsgJ10nO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9pbml0WEhSRGF0YTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxyXG4gICAgICAgICAgICAgICAgZm9ybURhdGEsXHJcbiAgICAgICAgICAgICAgICBmaWxlID0gb3B0aW9ucy5maWxlc1swXSxcclxuICAgICAgICAgICAgICAgIC8vIElnbm9yZSBub24tbXVsdGlwYXJ0IHNldHRpbmcgaWYgbm90IHN1cHBvcnRlZDpcclxuICAgICAgICAgICAgICAgIG11bHRpcGFydCA9IG9wdGlvbnMubXVsdGlwYXJ0IHx8ICEkLnN1cHBvcnQueGhyRmlsZVVwbG9hZCxcclxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZSA9ICQudHlwZShvcHRpb25zLnBhcmFtTmFtZSkgPT09ICdhcnJheScgP1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyYW1OYW1lWzBdIDogb3B0aW9ucy5wYXJhbU5hbWU7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVycyA9ICQuZXh0ZW5kKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jb250ZW50UmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQ29udGVudC1SYW5nZSddID0gb3B0aW9ucy5jb250ZW50UmFuZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFtdWx0aXBhcnQgfHwgb3B0aW9ucy5ibG9iIHx8ICF0aGlzLl9pc0luc3RhbmNlT2YoJ0ZpbGUnLCBmaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSAnYXR0YWNobWVudDsgZmlsZW5hbWU9XCInICtcclxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVVUkkoZmlsZS5uYW1lKSArICdcIic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFtdWx0aXBhcnQpIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGVudFR5cGUgPSBmaWxlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmRhdGEgPSBvcHRpb25zLmJsb2IgfHwgZmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5wb3N0TWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdpbmRvdy5wb3N0TWVzc2FnZSBkb2VzIG5vdCBhbGxvdyBzZW5kaW5nIEZvcm1EYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gb2JqZWN0cywgc28gd2UganVzdCBhZGQgdGhlIEZpbGUvQmxvYiBvYmplY3RzIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGZvcm1EYXRhIGFycmF5IGFuZCBsZXQgdGhlIHBvc3RNZXNzYWdlIHdpbmRvd1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgRm9ybURhdGEgb2JqZWN0IG91dCBvZiB0aGlzIGFycmF5OlxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhID0gdGhpcy5fZ2V0Rm9ybURhdGEob3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmxvYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcmFtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb25zLmJsb2JcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogKCQudHlwZShvcHRpb25zLnBhcmFtTmFtZSkgPT09ICdhcnJheScgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbU5hbWVbaW5kZXhdKSB8fCBwYXJhbU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZpbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9pc0luc3RhbmNlT2YoJ0Zvcm1EYXRhJywgb3B0aW9ucy5mb3JtRGF0YSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEgPSBvcHRpb25zLmZvcm1EYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaCh0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKSwgZnVuY3Rpb24gKGluZGV4LCBmaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZpZWxkLm5hbWUsIGZpZWxkLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJsb2IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKHBhcmFtTmFtZSwgb3B0aW9ucy5ibG9iLCBmaWxlLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgY2hlY2sgYWxsb3dzIHRoZSB0ZXN0cyB0byBydW4gd2l0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHVtbXkgb2JqZWN0czpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9pc0luc3RhbmNlT2YoJ0ZpbGUnLCBmaWxlKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9pc0luc3RhbmNlT2YoJ0Jsb2InLCBmaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCQudHlwZShvcHRpb25zLnBhcmFtTmFtZSkgPT09ICdhcnJheScgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyYW1OYW1lW2luZGV4XSkgfHwgcGFyYW1OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLnVwbG9hZE5hbWUgfHwgZmlsZS5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kYXRhID0gZm9ybURhdGE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQmxvYiByZWZlcmVuY2UgaXMgbm90IG5lZWRlZCBhbnltb3JlLCBmcmVlIG1lbW9yeTpcclxuICAgICAgICAgICAgb3B0aW9ucy5ibG9iID0gbnVsbDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfaW5pdElmcmFtZVNldHRpbmdzOiBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0SG9zdCA9ICQoJzxhPjwvYT4nKS5wcm9wKCdocmVmJywgb3B0aW9ucy51cmwpLnByb3AoJ2hvc3QnKTtcclxuICAgICAgICAgICAgLy8gU2V0dGluZyB0aGUgZGF0YVR5cGUgdG8gaWZyYW1lIGVuYWJsZXMgdGhlIGlmcmFtZSB0cmFuc3BvcnQ6XHJcbiAgICAgICAgICAgIG9wdGlvbnMuZGF0YVR5cGUgPSAnaWZyYW1lICcgKyAob3B0aW9ucy5kYXRhVHlwZSB8fCAnJyk7XHJcbiAgICAgICAgICAgIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IGFjY2VwdHMgYSBzZXJpYWxpemVkIGFycmF5IGFzIGZvcm0gZGF0YTpcclxuICAgICAgICAgICAgb3B0aW9ucy5mb3JtRGF0YSA9IHRoaXMuX2dldEZvcm1EYXRhKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAvLyBBZGQgcmVkaXJlY3QgdXJsIHRvIGZvcm0gZGF0YSBvbiBjcm9zcy1kb21haW4gdXBsb2FkczpcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVkaXJlY3QgJiYgdGFyZ2V0SG9zdCAmJiB0YXJnZXRIb3N0ICE9PSBsb2NhdGlvbi5ob3N0KSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmZvcm1EYXRhLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbnMucmVkaXJlY3RQYXJhbU5hbWUgfHwgJ3JlZGlyZWN0JyxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy5yZWRpcmVjdFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfaW5pdERhdGFTZXR0aW5nczogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzWEhSVXBsb2FkKG9wdGlvbnMpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NodW5rZWRVcGxvYWQob3B0aW9ucywgdHJ1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0WEhSRGF0YShvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdFByb2dyZXNzTGlzdGVuZXIob3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5wb3N0TWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgdGhlIGRhdGFUeXBlIHRvIHBvc3RtZXNzYWdlIGVuYWJsZXMgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcG9zdE1lc3NhZ2UgdHJhbnNwb3J0OlxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZGF0YVR5cGUgPSAncG9zdG1lc3NhZ2UgJyArIChvcHRpb25zLmRhdGFUeXBlIHx8ICcnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2luaXRJZnJhbWVTZXR0aW5ncyhvcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9nZXRQYXJhbU5hbWU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHZhciBmaWxlSW5wdXQgPSAkKG9wdGlvbnMuZmlsZUlucHV0KSxcclxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZSA9IG9wdGlvbnMucGFyYW1OYW1lO1xyXG4gICAgICAgICAgICBpZiAoIXBhcmFtTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lID0gW107XHJcbiAgICAgICAgICAgICAgICBmaWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gJCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGlucHV0LnByb3AoJ25hbWUnKSB8fCAnZmlsZXNbXScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAoaW5wdXQucHJvcCgnZmlsZXMnKSB8fCBbMV0pLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWUucHVzaChuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXJhbU5hbWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lID0gW2ZpbGVJbnB1dC5wcm9wKCduYW1lJykgfHwgJ2ZpbGVzW10nXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICghJC5pc0FycmF5KHBhcmFtTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZSA9IFtwYXJhbU5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJhbU5hbWU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2luaXRGb3JtU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIC8vIFJldHJpZXZlIG1pc3Npbmcgb3B0aW9ucyBmcm9tIHRoZSBpbnB1dCBmaWVsZCBhbmQgdGhlXHJcbiAgICAgICAgICAgIC8vIGFzc29jaWF0ZWQgZm9ybSwgaWYgYXZhaWxhYmxlOlxyXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuZm9ybSB8fCAhb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5mb3JtID0gJChvcHRpb25zLmZpbGVJbnB1dC5wcm9wKCdmb3JtJykpO1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGdpdmVuIGZpbGUgaW5wdXQgZG9lc24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgZm9ybSxcclxuICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgZGVmYXVsdCB3aWRnZXQgZmlsZSBpbnB1dCdzIGZvcm06XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuZm9ybS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZvcm0gPSAkKHRoaXMub3B0aW9ucy5maWxlSW5wdXQucHJvcCgnZm9ybScpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcHRpb25zLnBhcmFtTmFtZSA9IHRoaXMuX2dldFBhcmFtTmFtZShvcHRpb25zKTtcclxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnVybCkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLmZvcm0ucHJvcCgnYWN0aW9uJykgfHwgbG9jYXRpb24uaHJlZjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBUaGUgSFRUUCByZXF1ZXN0IG1ldGhvZCBtdXN0IGJlIFwiUE9TVFwiIG9yIFwiUFVUXCI6XHJcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9IChvcHRpb25zLnR5cGUgfHxcclxuICAgICAgICAgICAgICAgICgkLnR5cGUob3B0aW9ucy5mb3JtLnByb3AoJ21ldGhvZCcpKSA9PT0gJ3N0cmluZycgJiZcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZvcm0ucHJvcCgnbWV0aG9kJykpIHx8ICcnXHJcbiAgICAgICAgICAgICAgICApLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnR5cGUgIT09ICdQT1NUJyAmJiBvcHRpb25zLnR5cGUgIT09ICdQVVQnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlICE9PSAnUEFUQ0gnKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0ID0gb3B0aW9ucy5mb3JtLmF0dHIoJ2FjY2VwdC1jaGFyc2V0Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfZ2V0QUpBWFNldHRpbmdzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMsIGRhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLl9pbml0Rm9ybVNldHRpbmdzKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB0aGlzLl9pbml0RGF0YVNldHRpbmdzKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvLyBqUXVlcnkgMS42IGRvZXNuJ3QgcHJvdmlkZSAuc3RhdGUoKSxcclxuICAgICAgICAvLyB3aGlsZSBqUXVlcnkgMS44KyByZW1vdmVkIC5pc1JlamVjdGVkKCkgYW5kIC5pc1Jlc29sdmVkKCk6XHJcbiAgICAgICAgX2dldERlZmVycmVkU3RhdGU6IGZ1bmN0aW9uIChkZWZlcnJlZCkge1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWQuc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5zdGF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZC5pc1Jlc29sdmVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAncmVzb2x2ZWQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZC5pc1JlamVjdGVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAncmVqZWN0ZWQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAncGVuZGluZyc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLy8gTWFwcyBqcVhIUiBjYWxsYmFja3MgdG8gdGhlIGVxdWl2YWxlbnRcclxuICAgICAgICAvLyBtZXRob2RzIG9mIHRoZSBnaXZlbiBQcm9taXNlIG9iamVjdDpcclxuICAgICAgICBfZW5oYW5jZVByb21pc2U6IGZ1bmN0aW9uIChwcm9taXNlKSB7XHJcbiAgICAgICAgICAgIHByb21pc2Uuc3VjY2VzcyA9IHByb21pc2UuZG9uZTtcclxuICAgICAgICAgICAgcHJvbWlzZS5lcnJvciA9IHByb21pc2UuZmFpbDtcclxuICAgICAgICAgICAgcHJvbWlzZS5jb21wbGV0ZSA9IHByb21pc2UuYWx3YXlzO1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvLyBDcmVhdGVzIGFuZCByZXR1cm5zIGEgUHJvbWlzZSBvYmplY3QgZW5oYW5jZWQgd2l0aFxyXG4gICAgICAgIC8vIHRoZSBqcVhIUiBtZXRob2RzIGFib3J0LCBzdWNjZXNzLCBlcnJvciBhbmQgY29tcGxldGU6XHJcbiAgICAgICAgX2dldFhIUlByb21pc2U6IGZ1bmN0aW9uIChyZXNvbHZlT3JSZWplY3QsIGNvbnRleHQsIGFyZ3MpIHtcclxuICAgICAgICAgICAgdmFyIGRmZCA9ICQuRGVmZXJyZWQoKSxcclxuICAgICAgICAgICAgICAgIHByb21pc2UgPSBkZmQucHJvbWlzZSgpO1xyXG4gICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCB0aGlzLm9wdGlvbnMuY29udGV4dCB8fCBwcm9taXNlO1xyXG4gICAgICAgICAgICBpZiAocmVzb2x2ZU9yUmVqZWN0ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBkZmQucmVzb2x2ZVdpdGgoY29udGV4dCwgYXJncyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZU9yUmVqZWN0ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgZGZkLnJlamVjdFdpdGgoY29udGV4dCwgYXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJvbWlzZS5hYm9ydCA9IGRmZC5wcm9taXNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZW5oYW5jZVByb21pc2UocHJvbWlzZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLy8gQWRkcyBjb252ZW5pZW5jZSBtZXRob2RzIHRvIHRoZSBkYXRhIGNhbGxiYWNrIGFyZ3VtZW50OlxyXG4gICAgICAgIF9hZGRDb252ZW5pZW5jZU1ldGhvZHM6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcclxuICAgICAgICAgICAgICAgIGdldFByb21pc2UgPSBmdW5jdGlvbiAoYXJncykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLkRlZmVycmVkKCkucmVzb2x2ZVdpdGgodGhhdCwgYXJncykucHJvbWlzZSgpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgZGF0YS5wcm9jZXNzID0gZnVuY3Rpb24gKHJlc29sdmVGdW5jLCByZWplY3RGdW5jKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZUZ1bmMgfHwgcmVqZWN0RnVuYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEuX3Byb2Nlc3NRdWV1ZSA9IHRoaXMuX3Byb2Nlc3NRdWV1ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLl9wcm9jZXNzUXVldWUgfHwgZ2V0UHJvbWlzZShbdGhpc10pKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmVycm9yVGhyb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLkRlZmVycmVkKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWplY3RXaXRoKHRoYXQsIFtkYXRhXSkucHJvbWlzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UHJvbWlzZShhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLnBpcGUocmVzb2x2ZUZ1bmMsIHJlamVjdEZ1bmMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NRdWV1ZSB8fCBnZXRQcm9taXNlKFt0aGlzXSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGRhdGEuc3VibWl0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUoKSAhPT0gJ3BlbmRpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5qcVhIUiA9IHRoaXMuanFYSFIgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhhdC5fdHJpZ2dlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdWJtaXQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5FdmVudCgnc3VibWl0Jywge2RlbGVnYXRlZEV2ZW50OiBlfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgIT09IGZhbHNlKSAmJiB0aGF0Ll9vblNlbmQoZSwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5qcVhIUiB8fCB0aGF0Ll9nZXRYSFJQcm9taXNlKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGRhdGEuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5qcVhIUikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmpxWEhSLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yVGhyb3duID0gJ2Fib3J0JztcclxuICAgICAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2ZhaWwnLCBudWxsLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGF0Ll9nZXRYSFJQcm9taXNlKGZhbHNlKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgZGF0YS5zdGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmpxWEhSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQuX2dldERlZmVycmVkU3RhdGUodGhpcy5qcVhIUik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJvY2Vzc1F1ZXVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQuX2dldERlZmVycmVkU3RhdGUodGhpcy5fcHJvY2Vzc1F1ZXVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgZGF0YS5wcm9jZXNzaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmpxWEhSICYmIHRoaXMuX3Byb2Nlc3NRdWV1ZSAmJiB0aGF0XHJcbiAgICAgICAgICAgICAgICAgICAgLl9nZXREZWZlcnJlZFN0YXRlKHRoaXMuX3Byb2Nlc3NRdWV1ZSkgPT09ICdwZW5kaW5nJztcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgZGF0YS5wcm9ncmVzcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9ncmVzcztcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgZGF0YS5yZXNwb25zZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvLyBQYXJzZXMgdGhlIFJhbmdlIGhlYWRlciBmcm9tIHRoZSBzZXJ2ZXIgcmVzcG9uc2VcclxuICAgICAgICAvLyBhbmQgcmV0dXJucyB0aGUgdXBsb2FkZWQgYnl0ZXM6XHJcbiAgICAgICAgX2dldFVwbG9hZGVkQnl0ZXM6IGZ1bmN0aW9uIChqcVhIUikge1xyXG4gICAgICAgICAgICB2YXIgcmFuZ2UgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlcignUmFuZ2UnKSxcclxuICAgICAgICAgICAgICAgIHBhcnRzID0gcmFuZ2UgJiYgcmFuZ2Uuc3BsaXQoJy0nKSxcclxuICAgICAgICAgICAgICAgIHVwcGVyQnl0ZXNQb3MgPSBwYXJ0cyAmJiBwYXJ0cy5sZW5ndGggPiAxICYmXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQocGFydHNbMV0sIDEwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHVwcGVyQnl0ZXNQb3MgJiYgdXBwZXJCeXRlc1BvcyArIDE7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLy8gVXBsb2FkcyBhIGZpbGUgaW4gbXVsdGlwbGUsIHNlcXVlbnRpYWwgcmVxdWVzdHNcclxuICAgICAgICAvLyBieSBzcGxpdHRpbmcgdGhlIGZpbGUgdXAgaW4gbXVsdGlwbGUgYmxvYiBjaHVua3MuXHJcbiAgICAgICAgLy8gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSwgb25seSB0ZXN0cyBpZiB0aGUgZmlsZVxyXG4gICAgICAgIC8vIHNob3VsZCBiZSB1cGxvYWRlZCBpbiBjaHVua3MsIGJ1dCBkb2VzIG5vdCBpbnZva2UgYW55XHJcbiAgICAgICAgLy8gdXBsb2FkIHJlcXVlc3RzOlxyXG4gICAgICAgIF9jaHVua2VkVXBsb2FkOiBmdW5jdGlvbiAob3B0aW9ucywgdGVzdE9ubHkpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy51cGxvYWRlZEJ5dGVzID0gb3B0aW9ucy51cGxvYWRlZEJ5dGVzIHx8IDA7XHJcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcclxuICAgICAgICAgICAgICAgIGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdLFxyXG4gICAgICAgICAgICAgICAgZnMgPSBmaWxlLnNpemUsXHJcbiAgICAgICAgICAgICAgICB1YiA9IG9wdGlvbnMudXBsb2FkZWRCeXRlcyxcclxuICAgICAgICAgICAgICAgIG1jcyA9IG9wdGlvbnMubWF4Q2h1bmtTaXplIHx8IGZzLFxyXG4gICAgICAgICAgICAgICAgc2xpY2UgPSB0aGlzLl9ibG9iU2xpY2UsXHJcbiAgICAgICAgICAgICAgICBkZmQgPSAkLkRlZmVycmVkKCksXHJcbiAgICAgICAgICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKSxcclxuICAgICAgICAgICAgICAgIGpxWEhSLFxyXG4gICAgICAgICAgICAgICAgdXBsb2FkO1xyXG4gICAgICAgICAgICBpZiAoISh0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKSAmJiBzbGljZSAmJiAodWIgfHwgbWNzIDwgZnMpKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0ZXN0T25seSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHViID49IGZzKSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlLmVycm9yID0gb3B0aW9ucy5pMThuKCd1cGxvYWRlZEJ5dGVzJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0WEhSUHJvbWlzZShcclxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgW251bGwsICdlcnJvcicsIGZpbGUuZXJyb3JdXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFRoZSBjaHVuayB1cGxvYWQgbWV0aG9kOlxyXG4gICAgICAgICAgICB1cGxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBDbG9uZSB0aGUgb3B0aW9ucyBvYmplY3QgZm9yIGVhY2ggY2h1bmsgdXBsb2FkOlxyXG4gICAgICAgICAgICAgICAgdmFyIG8gPSAkLmV4dGVuZCh7fSwgb3B0aW9ucyksXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudExvYWRlZCA9IG8uX3Byb2dyZXNzLmxvYWRlZDtcclxuICAgICAgICAgICAgICAgIG8uYmxvYiA9IHNsaWNlLmNhbGwoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZSxcclxuICAgICAgICAgICAgICAgICAgICB1YixcclxuICAgICAgICAgICAgICAgICAgICB1YiArIG1jcyxcclxuICAgICAgICAgICAgICAgICAgICBmaWxlLnR5cGVcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY3VycmVudCBjaHVuayBzaXplLCBhcyB0aGUgYmxvYiBpdHNlbGZcclxuICAgICAgICAgICAgICAgIC8vIHdpbGwgYmUgZGVyZWZlcmVuY2VkIGFmdGVyIGRhdGEgcHJvY2Vzc2luZzpcclxuICAgICAgICAgICAgICAgIG8uY2h1bmtTaXplID0gby5ibG9iLnNpemU7XHJcbiAgICAgICAgICAgICAgICAvLyBFeHBvc2UgdGhlIGNodW5rIGJ5dGVzIHBvc2l0aW9uIHJhbmdlOlxyXG4gICAgICAgICAgICAgICAgby5jb250ZW50UmFuZ2UgPSAnYnl0ZXMgJyArIHViICsgJy0nICtcclxuICAgICAgICAgICAgICAgICAgICAodWIgKyBvLmNodW5rU2l6ZSAtIDEpICsgJy8nICsgZnM7XHJcbiAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIHRoZSB1cGxvYWQgZGF0YSAodGhlIGJsb2IgYW5kIHBvdGVudGlhbCBmb3JtIGRhdGEpOlxyXG4gICAgICAgICAgICAgICAgdGhhdC5faW5pdFhIUkRhdGEobyk7XHJcbiAgICAgICAgICAgICAgICAvLyBBZGQgcHJvZ3Jlc3MgbGlzdGVuZXJzIGZvciB0aGlzIGNodW5rIHVwbG9hZDpcclxuICAgICAgICAgICAgICAgIHRoYXQuX2luaXRQcm9ncmVzc0xpc3RlbmVyKG8pO1xyXG4gICAgICAgICAgICAgICAganFYSFIgPSAoKHRoYXQuX3RyaWdnZXIoJ2NodW5rc2VuZCcsIG51bGwsIG8pICE9PSBmYWxzZSAmJiAkLmFqYXgobykpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX2dldFhIUlByb21pc2UoZmFsc2UsIG8uY29udGV4dCkpXHJcbiAgICAgICAgICAgICAgICAgICAgLmRvbmUoZnVuY3Rpb24gKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdWIgPSB0aGF0Ll9nZXRVcGxvYWRlZEJ5dGVzKGpxWEhSKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHViICsgby5jaHVua1NpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBwcm9ncmVzcyBldmVudCBpZiBubyBmaW5hbCBwcm9ncmVzcyBldmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGxvYWRlZCBlcXVhbGluZyB0b3RhbCBoYXMgYmVlbiB0cmlnZ2VyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHRoaXMgY2h1bms6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TG9hZGVkICsgby5jaHVua1NpemUgLSBvLl9wcm9ncmVzcy5sb2FkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX29uUHJvZ3Jlc3MoJC5FdmVudCgncHJvZ3Jlc3MnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IHViIC0gby51cGxvYWRlZEJ5dGVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiB1YiAtIG8udXBsb2FkZWRCeXRlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXBsb2FkZWRCeXRlcyA9IG8udXBsb2FkZWRCeXRlcyA9IHViO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvLnJlc3VsdCA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgby50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcclxuICAgICAgICAgICAgICAgICAgICAgICAgby5qcVhIUiA9IGpxWEhSO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2RvbmUnLCBudWxsLCBvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmthbHdheXMnLCBudWxsLCBvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHViIDwgZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbGUgdXBsb2FkIG5vdCB5ZXQgY29tcGxldGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250aW51ZSB3aXRoIHRoZSBuZXh0IGNodW5rOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZmQucmVzb2x2ZVdpdGgoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby5jb250ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLmZhaWwoZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvLmpxWEhSID0ganFYSFI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG8udGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG8uZXJyb3JUaHJvd24gPSBlcnJvclRocm93bjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmtmYWlsJywgbnVsbCwgbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rYWx3YXlzJywgbnVsbCwgbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRmZC5yZWplY3RXaXRoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgby5jb250ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2pxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5fZW5oYW5jZVByb21pc2UocHJvbWlzZSk7XHJcbiAgICAgICAgICAgIHByb21pc2UuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ganFYSFIuYWJvcnQoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdXBsb2FkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9iZWZvcmVTZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fYWN0aXZlID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGUgc3RhcnQgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gdXBsb2FkIHN0YXJ0c1xyXG4gICAgICAgICAgICAgICAgLy8gYW5kIG5vIG90aGVyIHVwbG9hZHMgYXJlIGN1cnJlbnRseSBydW5uaW5nLFxyXG4gICAgICAgICAgICAgICAgLy8gZXF1aXZhbGVudCB0byB0aGUgZ2xvYmFsIGFqYXhTdGFydCBldmVudDpcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoJ3N0YXJ0Jyk7XHJcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGltZXIgZm9yIGdsb2JhbCBiaXRyYXRlIHByb2dyZXNzIGNhbGN1bGF0aW9uOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fYml0cmF0ZVRpbWVyID0gbmV3IHRoaXMuX0JpdHJhdGVUaW1lcigpO1xyXG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgPSB0aGlzLl9wcm9ncmVzcy50b3RhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzcy5iaXRyYXRlID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRhaW5lciBvYmplY3RzIGZvciB0aGUgLnJlc3BvbnNlKCkgYW5kXHJcbiAgICAgICAgICAgIC8vIC5wcm9ncmVzcygpIG1ldGhvZHMgb24gdGhlIGRhdGEgb2JqZWN0IGFyZSBhdmFpbGFibGVcclxuICAgICAgICAgICAgLy8gYW5kIHJlc2V0IHRvIHRoZWlyIGluaXRpYWwgc3RhdGU6XHJcbiAgICAgICAgICAgIHRoaXMuX2luaXRSZXNwb25zZU9iamVjdChkYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5faW5pdFByb2dyZXNzT2JqZWN0KGRhdGEpO1xyXG4gICAgICAgICAgICBkYXRhLl9wcm9ncmVzcy5sb2FkZWQgPSBkYXRhLmxvYWRlZCA9IGRhdGEudXBsb2FkZWRCeXRlcyB8fCAwO1xyXG4gICAgICAgICAgICBkYXRhLl9wcm9ncmVzcy50b3RhbCA9IGRhdGEudG90YWwgPSB0aGlzLl9nZXRUb3RhbChkYXRhLmZpbGVzKSB8fCAxO1xyXG4gICAgICAgICAgICBkYXRhLl9wcm9ncmVzcy5iaXRyYXRlID0gZGF0YS5iaXRyYXRlID0gMDtcclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlICs9IDE7XHJcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCArPSBkYXRhLmxvYWRlZDtcclxuICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudG90YWwgKz0gZGF0YS50b3RhbDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfb25Eb25lOiBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUiwgb3B0aW9ucykge1xyXG4gICAgICAgICAgICB2YXIgdG90YWwgPSBvcHRpb25zLl9wcm9ncmVzcy50b3RhbCxcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gb3B0aW9ucy5fcmVzcG9uc2U7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLl9wcm9ncmVzcy5sb2FkZWQgPCB0b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgcHJvZ3Jlc3MgZXZlbnQgaWYgbm8gZmluYWwgcHJvZ3Jlc3MgZXZlbnRcclxuICAgICAgICAgICAgICAgIC8vIHdpdGggbG9hZGVkIGVxdWFsaW5nIHRvdGFsIGhhcyBiZWVuIHRyaWdnZXJlZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuX29uUHJvZ3Jlc3MoJC5FdmVudCgncHJvZ3Jlc3MnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IHRvdGFsLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsOiB0b3RhbFxyXG4gICAgICAgICAgICAgICAgfSksIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3BvbnNlLnJlc3VsdCA9IG9wdGlvbnMucmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICByZXNwb25zZS50ZXh0U3RhdHVzID0gb3B0aW9ucy50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcclxuICAgICAgICAgICAgcmVzcG9uc2UuanFYSFIgPSBvcHRpb25zLmpxWEhSID0ganFYSFI7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoJ2RvbmUnLCBudWxsLCBvcHRpb25zKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfb25GYWlsOiBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duLCBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IG9wdGlvbnMuX3Jlc3BvbnNlO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5yZWNhbGN1bGF0ZVByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGZhaWxlZCAoZXJyb3Igb3IgYWJvcnQpIGZpbGUgdXBsb2FkIGZyb21cclxuICAgICAgICAgICAgICAgIC8vIHRoZSBnbG9iYWwgcHJvZ3Jlc3MgY2FsY3VsYXRpb246XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgLT0gb3B0aW9ucy5fcHJvZ3Jlc3MubG9hZGVkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudG90YWwgLT0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzcG9uc2UuanFYSFIgPSBvcHRpb25zLmpxWEhSID0ganFYSFI7XHJcbiAgICAgICAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xyXG4gICAgICAgICAgICByZXNwb25zZS5lcnJvclRocm93biA9IG9wdGlvbnMuZXJyb3JUaHJvd24gPSBlcnJvclRocm93bjtcclxuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcignZmFpbCcsIG51bGwsIG9wdGlvbnMpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9vbkFsd2F5czogZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvciwgb3B0aW9ucykge1xyXG4gICAgICAgICAgICAvLyBqcVhIUm9yUmVzdWx0LCB0ZXh0U3RhdHVzIGFuZCBqcVhIUm9yRXJyb3IgYXJlIGFkZGVkIHRvIHRoZVxyXG4gICAgICAgICAgICAvLyBvcHRpb25zIG9iamVjdCB2aWEgZG9uZSBhbmQgZmFpbCBjYWxsYmFja3NcclxuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcignYWx3YXlzJywgbnVsbCwgb3B0aW9ucyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX29uU2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKCFkYXRhLnN1Ym1pdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkQ29udmVuaWVuY2VNZXRob2RzKGUsIGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcclxuICAgICAgICAgICAgICAgIGpxWEhSLFxyXG4gICAgICAgICAgICAgICAgYWJvcnRlZCxcclxuICAgICAgICAgICAgICAgIHNsb3QsXHJcbiAgICAgICAgICAgICAgICBwaXBlLFxyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHRoYXQuX2dldEFKQVhTZXR0aW5ncyhkYXRhKSxcclxuICAgICAgICAgICAgICAgIHNlbmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fc2VuZGluZyArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aW1lciBmb3IgYml0cmF0ZSBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLl9iaXRyYXRlVGltZXIgPSBuZXcgdGhhdC5fQml0cmF0ZVRpbWVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAganFYSFIgPSBqcVhIUiB8fCAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICgoYWJvcnRlZCB8fCB0aGF0Ll90cmlnZ2VyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbmQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5FdmVudCgnc2VuZCcsIHtkZWxlZ2F0ZWRFdmVudDogZX0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApID09PSBmYWxzZSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fZ2V0WEhSUHJvbWlzZShmYWxzZSwgb3B0aW9ucy5jb250ZXh0LCBhYm9ydGVkKSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fY2h1bmtlZFVwbG9hZChvcHRpb25zKSB8fCAkLmFqYXgob3B0aW9ucylcclxuICAgICAgICAgICAgICAgICAgICApLmRvbmUoZnVuY3Rpb24gKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fb25Eb25lKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmZhaWwoZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9vbkZhaWwoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICB9KS5hbHdheXMoZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9vbkFsd2F5cyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSb3JSZXN1bHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFJvckVycm9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9zZW5kaW5nIC09IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX2FjdGl2ZSAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzID4gdGhhdC5fc2VuZGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgdGhlIG5leHQgcXVldWVkIHVwbG9hZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaGFzIG5vdCBiZWVuIGFib3J0ZWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFNsb3QgPSB0aGF0Ll9zbG90cy5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5leHRTbG90KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQuX2dldERlZmVycmVkU3RhdGUobmV4dFNsb3QpID09PSAncGVuZGluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFNsb3QucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFNsb3QgPSB0aGF0Ll9zbG90cy5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9hY3RpdmUgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzdG9wIGNhbGxiYWNrIGlzIHRyaWdnZXJlZCB3aGVuIGFsbCB1cGxvYWRzIGhhdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlZW4gY29tcGxldGVkLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdzdG9wJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ganFYSFI7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLl9iZWZvcmVTZW5kKGUsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlcXVlbnRpYWxVcGxvYWRzIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMub3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPD0gdGhpcy5fc2VuZGluZykpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzbG90ID0gJC5EZWZlcnJlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Nsb3RzLnB1c2goc2xvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGlwZSA9IHNsb3QucGlwZShzZW5kKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VxdWVuY2UgPSB0aGlzLl9zZXF1ZW5jZS5waXBlKHNlbmQsIHNlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBpcGUgPSB0aGlzLl9zZXF1ZW5jZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgcGlwZWQgUHJvbWlzZSBvYmplY3QsIGVuaGFuY2VkIHdpdGggYW4gYWJvcnQgbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgLy8gd2hpY2ggaXMgZGVsZWdhdGVkIHRvIHRoZSBqcVhIUiBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgdXBsb2FkLFxyXG4gICAgICAgICAgICAgICAgLy8gYW5kIGpxWEhSIGNhbGxiYWNrcyBtYXBwZWQgdG8gdGhlIGVxdWl2YWxlbnQgUHJvbWlzZSBtZXRob2RzOlxyXG4gICAgICAgICAgICAgICAgcGlwZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBhYm9ydGVkID0gW3VuZGVmaW5lZCwgJ2Fib3J0JywgJ2Fib3J0J107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFqcVhIUikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC5yZWplY3RXaXRoKG9wdGlvbnMuY29udGV4dCwgYWJvcnRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbmQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpxWEhSLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VQcm9taXNlKHBpcGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBzZW5kKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX29uQWRkOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlLFxyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMsIGRhdGEpLFxyXG4gICAgICAgICAgICAgICAgZmlsZXMgPSBkYXRhLmZpbGVzLFxyXG4gICAgICAgICAgICAgICAgZmlsZXNMZW5ndGggPSBmaWxlcy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBsaW1pdCA9IG9wdGlvbnMubGltaXRNdWx0aUZpbGVVcGxvYWRzLFxyXG4gICAgICAgICAgICAgICAgbGltaXRTaXplID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemUsXHJcbiAgICAgICAgICAgICAgICBvdmVyaGVhZCA9IG9wdGlvbnMubGltaXRNdWx0aUZpbGVVcGxvYWRTaXplT3ZlcmhlYWQsXHJcbiAgICAgICAgICAgICAgICBiYXRjaFNpemUgPSAwLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lID0gdGhpcy5fZ2V0UGFyYW1OYW1lKG9wdGlvbnMpLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lU2V0LFxyXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lU2xpY2UsXHJcbiAgICAgICAgICAgICAgICBmaWxlU2V0LFxyXG4gICAgICAgICAgICAgICAgaSxcclxuICAgICAgICAgICAgICAgIGogPSAwO1xyXG4gICAgICAgICAgICBpZiAobGltaXRTaXplICYmICghZmlsZXNMZW5ndGggfHwgZmlsZXNbMF0uc2l6ZSA9PT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgICAgICAgbGltaXRTaXplID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghKG9wdGlvbnMuc2luZ2xlRmlsZVVwbG9hZHMgfHwgbGltaXQgfHwgbGltaXRTaXplKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKSkge1xyXG4gICAgICAgICAgICAgICAgZmlsZVNldCA9IFtmaWxlc107XHJcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWVTZXQgPSBbcGFyYW1OYW1lXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghKG9wdGlvbnMuc2luZ2xlRmlsZVVwbG9hZHMgfHwgbGltaXRTaXplKSAmJiBsaW1pdCkge1xyXG4gICAgICAgICAgICAgICAgZmlsZVNldCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lU2V0ID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7IGkgKz0gbGltaXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxlU2V0LnB1c2goZmlsZXMuc2xpY2UoaSwgaSArIGxpbWl0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lU2xpY2UgPSBwYXJhbU5hbWUuc2xpY2UoaSwgaSArIGxpbWl0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmFtTmFtZVNsaWNlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lU2V0LnB1c2gocGFyYW1OYW1lU2xpY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnNpbmdsZUZpbGVVcGxvYWRzICYmIGxpbWl0U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgZmlsZVNldCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lU2V0ID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhdGNoU2l6ZSArPSBmaWxlc1tpXS5zaXplICsgb3ZlcmhlYWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgKyAxID09PSBmaWxlc0xlbmd0aCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChiYXRjaFNpemUgKyBmaWxlc1tpICsgMV0uc2l6ZSArIG92ZXJoZWFkKSA+IGxpbWl0U2l6ZSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW1pdCAmJiBpICsgMSAtIGogPj0gbGltaXQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTZXQucHVzaChmaWxlcy5zbGljZShqLCBpICsgMSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShqLCBpICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyYW1OYW1lU2xpY2UubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWVTZXQucHVzaChwYXJhbU5hbWVTbGljZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGogPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2hTaXplID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWVTZXQgPSBwYXJhbU5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGF0YS5vcmlnaW5hbEZpbGVzID0gZmlsZXM7XHJcbiAgICAgICAgICAgICQuZWFjaChmaWxlU2V0IHx8IGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdEYXRhID0gJC5leHRlbmQoe30sIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgbmV3RGF0YS5maWxlcyA9IGZpbGVTZXQgPyBlbGVtZW50IDogW2VsZW1lbnRdO1xyXG4gICAgICAgICAgICAgICAgbmV3RGF0YS5wYXJhbU5hbWUgPSBwYXJhbU5hbWVTZXRbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgdGhhdC5faW5pdFJlc3BvbnNlT2JqZWN0KG5ld0RhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhhdC5faW5pdFByb2dyZXNzT2JqZWN0KG5ld0RhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhhdC5fYWRkQ29udmVuaWVuY2VNZXRob2RzKGUsIG5ld0RhdGEpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhhdC5fdHJpZ2dlcihcclxuICAgICAgICAgICAgICAgICAgICAnYWRkJyxcclxuICAgICAgICAgICAgICAgICAgICAkLkV2ZW50KCdhZGQnLCB7ZGVsZWdhdGVkRXZlbnQ6IGV9KSxcclxuICAgICAgICAgICAgICAgICAgICBuZXdEYXRhXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3JlcGxhY2VGaWxlSW5wdXQ6IGZ1bmN0aW9uIChpbnB1dCkge1xyXG4gICAgICAgICAgICB2YXIgaW5wdXRDbG9uZSA9IGlucHV0LmNsb25lKHRydWUpO1xyXG4gICAgICAgICAgICAkKCc8Zm9ybT48L2Zvcm0+JykuYXBwZW5kKGlucHV0Q2xvbmUpWzBdLnJlc2V0KCk7XHJcbiAgICAgICAgICAgIC8vIERldGFjaGluZyBhbGxvd3MgdG8gaW5zZXJ0IHRoZSBmaWxlSW5wdXQgb24gYW5vdGhlciBmb3JtXHJcbiAgICAgICAgICAgIC8vIHdpdGhvdXQgbG9vc2luZyB0aGUgZmlsZSBpbnB1dCB2YWx1ZTpcclxuICAgICAgICAgICAgaW5wdXQuYWZ0ZXIoaW5wdXRDbG9uZSkuZGV0YWNoKCk7XHJcbiAgICAgICAgICAgIC8vIEF2b2lkIG1lbW9yeSBsZWFrcyB3aXRoIHRoZSBkZXRhY2hlZCBmaWxlIGlucHV0OlxyXG4gICAgICAgICAgICAkLmNsZWFuRGF0YShpbnB1dC51bmJpbmQoJ3JlbW92ZScpKTtcclxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgb3JpZ2luYWwgZmlsZSBpbnB1dCBlbGVtZW50IGluIHRoZSBmaWxlSW5wdXRcclxuICAgICAgICAgICAgLy8gZWxlbWVudHMgc2V0IHdpdGggdGhlIGNsb25lLCB3aGljaCBoYXMgYmVlbiBjb3BpZWQgaW5jbHVkaW5nXHJcbiAgICAgICAgICAgIC8vIGV2ZW50IGhhbmRsZXJzOlxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZmlsZUlucHV0ID0gdGhpcy5vcHRpb25zLmZpbGVJbnB1dC5tYXAoZnVuY3Rpb24gKGksIGVsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWwgPT09IGlucHV0WzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0Q2xvbmVbMF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBJZiB0aGUgd2lkZ2V0IGhhcyBiZWVuIGluaXRpYWxpemVkIG9uIHRoZSBmaWxlIGlucHV0IGl0c2VsZixcclxuICAgICAgICAgICAgLy8gb3ZlcnJpZGUgdGhpcy5lbGVtZW50IHdpdGggdGhlIGZpbGUgaW5wdXQgY2xvbmU6XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFswXSA9PT0gdGhpcy5lbGVtZW50WzBdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBpbnB1dENsb25lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2hhbmRsZUZpbGVUcmVlRW50cnk6IGZ1bmN0aW9uIChlbnRyeSwgcGF0aCkge1xyXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsXHJcbiAgICAgICAgICAgICAgICBkZmQgPSAkLkRlZmVycmVkKCksXHJcbiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlICYmICFlLmVudHJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZW50cnkgPSBlbnRyeTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgJC53aGVuIHJldHVybnMgaW1tZWRpYXRlbHkgaWYgb25lXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRGVmZXJyZWQgaXMgcmVqZWN0ZWQsIHdlIHVzZSByZXNvbHZlIGluc3RlYWQuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdmFsaWQgZmlsZXMgYW5kIGludmFsaWQgaXRlbXNcclxuICAgICAgICAgICAgICAgICAgICAvLyB0byBiZSByZXR1cm5lZCB0b2dldGhlciBpbiBvbmUgc2V0OlxyXG4gICAgICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKFtlXSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZGlyUmVhZGVyO1xyXG4gICAgICAgICAgICBwYXRoID0gcGF0aCB8fCAnJztcclxuICAgICAgICAgICAgaWYgKGVudHJ5LmlzRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5Ll9maWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgQ2hyb21lIGJ1ZyAjMTQ5NzM1XHJcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuX2ZpbGUucmVsYXRpdmVQYXRoID0gcGF0aDtcclxuICAgICAgICAgICAgICAgICAgICBkZmQucmVzb2x2ZShlbnRyeS5fZmlsZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LmZpbGUoZnVuY3Rpb24gKGZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5yZWxhdGl2ZVBhdGggPSBwYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvckhhbmRsZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XHJcbiAgICAgICAgICAgICAgICBkaXJSZWFkZXIgPSBlbnRyeS5jcmVhdGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgICAgIGRpclJlYWRlci5yZWFkRW50cmllcyhmdW5jdGlvbiAoZW50cmllcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX2hhbmRsZUZpbGVUcmVlRW50cmllcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50cmllcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCArIGVudHJ5Lm5hbWUgKyAnLydcclxuICAgICAgICAgICAgICAgICAgICApLmRvbmUoZnVuY3Rpb24gKGZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKGZpbGVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9KS5mYWlsKGVycm9ySGFuZGxlcik7XHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvckhhbmRsZXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gUmV0dXJuIGFuIGVtcHkgbGlzdCBmb3IgZmlsZSBzeXN0ZW0gaXRlbXNcclxuICAgICAgICAgICAgICAgIC8vIG90aGVyIHRoYW4gZmlsZXMgb3IgZGlyZWN0b3JpZXM6XHJcbiAgICAgICAgICAgICAgICBkZmQucmVzb2x2ZShbXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGRmZC5wcm9taXNlKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2hhbmRsZUZpbGVUcmVlRW50cmllczogZnVuY3Rpb24gKGVudHJpZXMsIHBhdGgpIHtcclxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xyXG4gICAgICAgICAgICByZXR1cm4gJC53aGVuLmFwcGx5KFxyXG4gICAgICAgICAgICAgICAgJCxcclxuICAgICAgICAgICAgICAgICQubWFwKGVudHJpZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0Ll9oYW5kbGVGaWxlVHJlZUVudHJ5KGVudHJ5LCBwYXRoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICkucGlwZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShcclxuICAgICAgICAgICAgICAgICAgICBbXSxcclxuICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9nZXREcm9wcGVkRmlsZXM6IGZ1bmN0aW9uIChkYXRhVHJhbnNmZXIpIHtcclxuICAgICAgICAgICAgZGF0YVRyYW5zZmVyID0gZGF0YVRyYW5zZmVyIHx8IHt9O1xyXG4gICAgICAgICAgICB2YXIgaXRlbXMgPSBkYXRhVHJhbnNmZXIuaXRlbXM7XHJcbiAgICAgICAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGggJiYgKGl0ZW1zWzBdLndlYmtpdEdldEFzRW50cnkgfHxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtc1swXS5nZXRBc0VudHJ5KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZUZpbGVUcmVlRW50cmllcyhcclxuICAgICAgICAgICAgICAgICAgICAkLm1hcChpdGVtcywgZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS53ZWJraXRHZXRBc0VudHJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IGl0ZW0ud2Via2l0R2V0QXNFbnRyeSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgQ2hyb21lIGJ1ZyAjMTQ5NzM1OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Ll9maWxlID0gaXRlbS5nZXRBc0ZpbGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5nZXRBc0VudHJ5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKFxyXG4gICAgICAgICAgICAgICAgJC5tYWtlQXJyYXkoZGF0YVRyYW5zZmVyLmZpbGVzKVxyXG4gICAgICAgICAgICApLnByb21pc2UoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfZ2V0U2luZ2xlRmlsZUlucHV0RmlsZXM6IGZ1bmN0aW9uIChmaWxlSW5wdXQpIHtcclxuICAgICAgICAgICAgZmlsZUlucHV0ID0gJChmaWxlSW5wdXQpO1xyXG4gICAgICAgICAgICB2YXIgZW50cmllcyA9IGZpbGVJbnB1dC5wcm9wKCd3ZWJraXRFbnRyaWVzJykgfHxcclxuICAgICAgICAgICAgICAgICAgICBmaWxlSW5wdXQucHJvcCgnZW50cmllcycpLFxyXG4gICAgICAgICAgICAgICAgZmlsZXMsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKGVudHJpZXMgJiYgZW50cmllcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVGaWxlVHJlZUVudHJpZXMoZW50cmllcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmlsZXMgPSAkLm1ha2VBcnJheShmaWxlSW5wdXQucHJvcCgnZmlsZXMnKSk7XHJcbiAgICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpbGVJbnB1dC5wcm9wKCd2YWx1ZScpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLkRlZmVycmVkKCkucmVzb2x2ZShbXSkucHJvbWlzZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZpbGVzIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBicm93c2VyIGRvZXMgbm90XHJcbiAgICAgICAgICAgICAgICAvLyBzdXBwb3J0IHRoZSBGaWxlIEFQSSBhbmQgd2UgYWRkIGEgcHNldWRvIEZpbGUgb2JqZWN0IHdpdGhcclxuICAgICAgICAgICAgICAgIC8vIHRoZSBpbnB1dCB2YWx1ZSBhcyBuYW1lIHdpdGggcGF0aCBpbmZvcm1hdGlvbiByZW1vdmVkOlxyXG4gICAgICAgICAgICAgICAgZmlsZXMgPSBbe25hbWU6IHZhbHVlLnJlcGxhY2UoL14uKlxcXFwvLCAnJyl9XTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxlc1swXS5uYW1lID09PSB1bmRlZmluZWQgJiYgZmlsZXNbMF0uZmlsZU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIC8vIEZpbGUgbm9ybWFsaXphdGlvbiBmb3IgU2FmYXJpIDQgYW5kIEZpcmVmb3ggMzpcclxuICAgICAgICAgICAgICAgICQuZWFjaChmaWxlcywgZnVuY3Rpb24gKGluZGV4LCBmaWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZS5uYW1lID0gZmlsZS5maWxlTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBmaWxlLnNpemUgPSBmaWxlLmZpbGVTaXplO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKGZpbGVzKS5wcm9taXNlKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2dldEZpbGVJbnB1dEZpbGVzOiBmdW5jdGlvbiAoZmlsZUlucHV0KSB7XHJcbiAgICAgICAgICAgIGlmICghKGZpbGVJbnB1dCBpbnN0YW5jZW9mICQpIHx8IGZpbGVJbnB1dC5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcyhmaWxlSW5wdXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAkLndoZW4uYXBwbHkoXHJcbiAgICAgICAgICAgICAgICAkLFxyXG4gICAgICAgICAgICAgICAgJC5tYXAoZmlsZUlucHV0LCB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcylcclxuICAgICAgICAgICAgKS5waXBlKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFxyXG4gICAgICAgICAgICAgICAgICAgIFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX29uQ2hhbmdlOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsXHJcbiAgICAgICAgICAgICAgICBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVJbnB1dDogJChlLnRhcmdldCksXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybTogJChlLnRhcmdldC5mb3JtKVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgIGRhdGEuZmlsZXMgPSBmaWxlcztcclxuICAgICAgICAgICAgICAgIGlmICh0aGF0Lm9wdGlvbnMucmVwbGFjZUZpbGVJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX3JlcGxhY2VGaWxlSW5wdXQoZGF0YS5maWxlSW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoYXQuX3RyaWdnZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdjaGFuZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkLkV2ZW50KCdjaGFuZ2UnLCB7ZGVsZWdhdGVkRXZlbnQ6IGV9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICkgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fb25BZGQoZSwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9vblBhc3RlOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICB2YXIgaXRlbXMgPSBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEgJiZcclxuICAgICAgICAgICAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YS5pdGVtcyxcclxuICAgICAgICAgICAgICAgIGRhdGEgPSB7ZmlsZXM6IFtdfTtcclxuICAgICAgICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgJC5lYWNoKGl0ZW1zLCBmdW5jdGlvbiAoaW5kZXgsIGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlICYmIGl0ZW0uZ2V0QXNGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5maWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RyaWdnZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdwYXN0ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQuRXZlbnQoJ3Bhc3RlJywge2RlbGVnYXRlZEV2ZW50OiBlfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFcclxuICAgICAgICAgICAgICAgICAgICApICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uQWRkKGUsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX29uRHJvcDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIgPSBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcclxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxyXG4gICAgICAgICAgICAgICAgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXIsXHJcbiAgICAgICAgICAgICAgICBkYXRhID0ge307XHJcbiAgICAgICAgICAgIGlmIChkYXRhVHJhbnNmZXIgJiYgZGF0YVRyYW5zZmVyLmZpbGVzICYmIGRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2dldERyb3BwZWRGaWxlcyhkYXRhVHJhbnNmZXIpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQuX3RyaWdnZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZHJvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLkV2ZW50KCdkcm9wJywge2RlbGVnYXRlZEV2ZW50OiBlfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX29uQWRkKGUsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX29uRHJhZ092ZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyID0gZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXI7XHJcbiAgICAgICAgICAgIHZhciBkYXRhVHJhbnNmZXIgPSBlLmRhdGFUcmFuc2ZlcjtcclxuICAgICAgICAgICAgaWYgKGRhdGFUcmFuc2ZlciAmJiAkLmluQXJyYXkoJ0ZpbGVzJywgZGF0YVRyYW5zZmVyLnR5cGVzKSAhPT0gLTEgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnZHJhZ292ZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkLkV2ZW50KCdkcmFnb3ZlcicsIHtkZWxlZ2F0ZWRFdmVudDogZX0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2luaXRFdmVudEhhbmRsZXJzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc1hIUlVwbG9hZCh0aGlzLm9wdGlvbnMpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vbih0aGlzLm9wdGlvbnMuZHJvcFpvbmUsIHtcclxuICAgICAgICAgICAgICAgICAgICBkcmFnb3ZlcjogdGhpcy5fb25EcmFnT3ZlcixcclxuICAgICAgICAgICAgICAgICAgICBkcm9wOiB0aGlzLl9vbkRyb3BcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLnBhc3RlWm9uZSwge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhc3RlOiB0aGlzLl9vblBhc3RlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoJC5zdXBwb3J0LmZpbGVJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLmZpbGVJbnB1dCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZTogdGhpcy5fb25DaGFuZ2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2Rlc3Ryb3lFdmVudEhhbmRsZXJzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29mZih0aGlzLm9wdGlvbnMuZHJvcFpvbmUsICdkcmFnb3ZlciBkcm9wJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX29mZih0aGlzLm9wdGlvbnMucGFzdGVab25lLCAncGFzdGUnKTtcclxuICAgICAgICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5maWxlSW5wdXQsICdjaGFuZ2UnKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfc2V0T3B0aW9uOiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgcmVpbml0ID0gJC5pbkFycmF5KGtleSwgdGhpcy5fc3BlY2lhbE9wdGlvbnMpICE9PSAtMTtcclxuICAgICAgICAgICAgaWYgKHJlaW5pdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveUV2ZW50SGFuZGxlcnMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9zdXBlcihrZXksIHZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKHJlaW5pdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdFNwZWNpYWxPcHRpb25zKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0RXZlbnRIYW5kbGVycygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2luaXRTcGVjaWFsT3B0aW9uczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZmlsZUlucHV0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ID0gdGhpcy5lbGVtZW50LmlzKCdpbnB1dFt0eXBlPVwiZmlsZVwiXScpID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50IDogdGhpcy5lbGVtZW50LmZpbmQoJ2lucHV0W3R5cGU9XCJmaWxlXCJdJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIShvcHRpb25zLmZpbGVJbnB1dCBpbnN0YW5jZW9mICQpKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmZpbGVJbnB1dCA9ICQob3B0aW9ucy5maWxlSW5wdXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghKG9wdGlvbnMuZHJvcFpvbmUgaW5zdGFuY2VvZiAkKSkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kcm9wWm9uZSA9ICQob3B0aW9ucy5kcm9wWm9uZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCEob3B0aW9ucy5wYXN0ZVpvbmUgaW5zdGFuY2VvZiAkKSkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5wYXN0ZVpvbmUgPSAkKG9wdGlvbnMucGFzdGVab25lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9nZXRSZWdFeHA6IGZ1bmN0aW9uIChzdHIpIHtcclxuICAgICAgICAgICAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KCcvJyksXHJcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMgPSBwYXJ0cy5wb3AoKTtcclxuICAgICAgICAgICAgcGFydHMuc2hpZnQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocGFydHMuam9pbignLycpLCBtb2RpZmllcnMpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9pc1JlZ0V4cE9wdGlvbjogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGtleSAhPT0gJ3VybCcgJiYgJC50eXBlKHZhbHVlKSA9PT0gJ3N0cmluZycgJiZcclxuICAgICAgICAgICAgICAgIC9eXFwvLipcXC9baWdtXXswLDN9JC8udGVzdCh2YWx1ZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2luaXREYXRhQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxyXG4gICAgICAgICAgICAgICAgY2xvbmUgPSAkKHRoaXMuZWxlbWVudFswXS5jbG9uZU5vZGUoZmFsc2UpKTtcclxuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBvcHRpb25zIHNldCB2aWEgSFRNTDUgZGF0YS1hdHRyaWJ1dGVzOlxyXG4gICAgICAgICAgICAkLmVhY2goXHJcbiAgICAgICAgICAgICAgICBjbG9uZS5kYXRhKCksXHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhQXR0cmlidXRlTmFtZSA9ICdkYXRhLScgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGNhbWVsQ2FzZSB0byBoeXBoZW4tYXRlZCBrZXk6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEtJDInKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbG9uZS5hdHRyKGRhdGFBdHRyaWJ1dGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5faXNSZWdFeHBPcHRpb24oa2V5LCB2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhhdC5fZ2V0UmVnRXhwKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2NyZWF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbml0RGF0YUF0dHJpYnV0ZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5faW5pdFNwZWNpYWxPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nsb3RzID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuX3NlcXVlbmNlID0gdGhpcy5fZ2V0WEhSUHJvbWlzZSh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5fc2VuZGluZyA9IHRoaXMuX2FjdGl2ZSA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5faW5pdEV2ZW50SGFuZGxlcnMoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBleHBvc2VkIHRvIHRoZSB3aWRnZXQgQVBJIGFuZCBhbGxvd3MgdG8gcXVlcnlcclxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSB1cGxvYWRzOlxyXG4gICAgICAgIGFjdGl2ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyB0byBxdWVyeVxyXG4gICAgICAgIC8vIHRoZSB3aWRnZXQgdXBsb2FkIHByb2dyZXNzLlxyXG4gICAgICAgIC8vIEl0IHJldHVybnMgYW4gb2JqZWN0IHdpdGggbG9hZGVkLCB0b3RhbCBhbmQgYml0cmF0ZSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgLy8gZm9yIHRoZSBydW5uaW5nIHVwbG9hZHM6XHJcbiAgICAgICAgcHJvZ3Jlc3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2dyZXNzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyBhZGRpbmcgZmlsZXNcclxuICAgICAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxyXG4gICAgICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIHByb3BlcnR5IGFuZCBjYW4gY29udGFpbiBhZGRpdGlvbmFsIG9wdGlvbnM6XHJcbiAgICAgICAgLy8gLmZpbGV1cGxvYWQoJ2FkZCcsIHtmaWxlczogZmlsZXNMaXN0fSk7XHJcbiAgICAgICAgYWRkOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XHJcbiAgICAgICAgICAgIGlmICghZGF0YSB8fCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxlSW5wdXQgJiYgIWRhdGEuZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2dldEZpbGVJbnB1dEZpbGVzKGRhdGEuZmlsZUlucHV0KS5hbHdheXMoZnVuY3Rpb24gKGZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX29uQWRkKG51bGwsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhLmZpbGVzID0gJC5tYWtlQXJyYXkoZGF0YS5maWxlcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkFkZChudWxsLCBkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyBzZW5kaW5nIGZpbGVzXHJcbiAgICAgICAgLy8gdXNpbmcgdGhlIGZpbGV1cGxvYWQgQVBJLiBUaGUgZGF0YSBwYXJhbWV0ZXIgYWNjZXB0cyBhbiBvYmplY3Qgd2hpY2hcclxuICAgICAgICAvLyBtdXN0IGhhdmUgYSBmaWxlcyBvciBmaWxlSW5wdXQgcHJvcGVydHkgYW5kIGNhbiBjb250YWluIGFkZGl0aW9uYWwgb3B0aW9uczpcclxuICAgICAgICAvLyAuZmlsZXVwbG9hZCgnc2VuZCcsIHtmaWxlczogZmlsZXNMaXN0fSk7XHJcbiAgICAgICAgLy8gVGhlIG1ldGhvZCByZXR1cm5zIGEgUHJvbWlzZSBvYmplY3QgZm9yIHRoZSBmaWxlIHVwbG9hZCBjYWxsLlxyXG4gICAgICAgIHNlbmQ6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhICYmICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmZpbGVJbnB1dCAmJiAhZGF0YS5maWxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGZkID0gJC5EZWZlcnJlZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAganFYSFIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqcVhIUikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpxWEhSLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGZkLnJlamVjdChudWxsLCAnYWJvcnQnLCAnYWJvcnQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRGaWxlSW5wdXRGaWxlcyhkYXRhLmZpbGVJbnB1dCkuYWx3YXlzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYm9ydGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZmQucmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFIgPSB0aGF0Ll9vblNlbmQobnVsbCwgZGF0YSkudGhlbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZmQucmVzb2x2ZShyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZkLnJlamVjdChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRhdGEuZmlsZXMgPSAkLm1ha2VBcnJheShkYXRhLmZpbGVzKTtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmZpbGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vblNlbmQobnVsbCwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFhIUlByb21pc2UoZmFsc2UsIGRhdGEgJiYgZGF0YS5jb250ZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG59KSk7XHJcbiIsIi8qXHJcbiAqIGpRdWVyeSBGaWxlIFVwbG9hZCBQcm9jZXNzaW5nIFBsdWdpbiAxLjMuMFxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWRcclxuICpcclxuICogQ29weXJpZ2h0IDIwMTIsIFNlYmFzdGlhbiBUc2NoYW5cclxuICogaHR0cHM6Ly9ibHVlaW1wLm5ldFxyXG4gKlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XHJcbiAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXHJcbiAqL1xyXG5cclxuLyoganNoaW50IG5vbWVuOmZhbHNlICovXHJcbi8qIGdsb2JhbCBkZWZpbmUsIHdpbmRvdyAqL1xyXG5cclxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XHJcbiAgICAndXNlIHN0cmljdCc7XHJcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgICAgICAgLy8gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIEFNRCBtb2R1bGU6XHJcbiAgICAgICAgZGVmaW5lKFtcclxuICAgICAgICAgICAgJ2pxdWVyeScsXHJcbiAgICAgICAgICAgICcuL2pxdWVyeS5maWxldXBsb2FkJ1xyXG4gICAgICAgIF0sIGZhY3RvcnkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBCcm93c2VyIGdsb2JhbHM6XHJcbiAgICAgICAgZmFjdG9yeShcclxuICAgICAgICAgICAgd2luZG93LmpRdWVyeVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0oZnVuY3Rpb24gKCQpIHtcclxuICAgICd1c2Ugc3RyaWN0JztcclxuXHJcbiAgICB2YXIgb3JpZ2luYWxBZGQgPSAkLmJsdWVpbXAuZmlsZXVwbG9hZC5wcm90b3R5cGUub3B0aW9ucy5hZGQ7XHJcblxyXG4gICAgLy8gVGhlIEZpbGUgVXBsb2FkIFByb2Nlc3NpbmcgcGx1Z2luIGV4dGVuZHMgdGhlIGZpbGV1cGxvYWQgd2lkZ2V0XHJcbiAgICAvLyB3aXRoIGZpbGUgcHJvY2Vzc2luZyBmdW5jdGlvbmFsaXR5OlxyXG4gICAgJC53aWRnZXQoJ2JsdWVpbXAuZmlsZXVwbG9hZCcsICQuYmx1ZWltcC5maWxldXBsb2FkLCB7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgLy8gVGhlIGxpc3Qgb2YgcHJvY2Vzc2luZyBhY3Rpb25zOlxyXG4gICAgICAgICAgICBwcm9jZXNzUXVldWU6IFtcclxuICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnbG9nJyxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZGVidWcnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgZGF0YS5wcm9jZXNzKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMuZmlsZXVwbG9hZCgncHJvY2VzcycsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEFkZC5jYWxsKHRoaXMsIGUsIGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgcHJvY2Vzc0FjdGlvbnM6IHtcclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgbG9nOiBmdW5jdGlvbiAoZGF0YSwgb3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZVtvcHRpb25zLnR5cGVdKFxyXG4gICAgICAgICAgICAgICAgICAgICdQcm9jZXNzaW5nIFwiJyArIGRhdGEuZmlsZXNbZGF0YS5pbmRleF0ubmFtZSArICdcIidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKi9cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfcHJvY2Vzc0ZpbGU6IGZ1bmN0aW9uIChkYXRhLCBvcmlnaW5hbERhdGEpIHtcclxuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxyXG4gICAgICAgICAgICAgICAgZGZkID0gJC5EZWZlcnJlZCgpLnJlc29sdmVXaXRoKHRoYXQsIFtkYXRhXSksXHJcbiAgICAgICAgICAgICAgICBjaGFpbiA9IGRmZC5wcm9taXNlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoJ3Byb2Nlc3MnLCBudWxsLCBkYXRhKTtcclxuICAgICAgICAgICAgJC5lYWNoKGRhdGEucHJvY2Vzc1F1ZXVlLCBmdW5jdGlvbiAoaSwgc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgICAgIHZhciBmdW5jID0gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxEYXRhLmVycm9yVGhyb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLkRlZmVycmVkKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVqZWN0V2l0aCh0aGF0LCBbb3JpZ2luYWxEYXRhXSkucHJvbWlzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhhdC5wcm9jZXNzQWN0aW9uc1tzZXR0aW5ncy5hY3Rpb25dLmNhbGwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjaGFpbiA9IGNoYWluLnBpcGUoZnVuYywgc2V0dGluZ3MuYWx3YXlzICYmIGZ1bmMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY2hhaW5cclxuICAgICAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdwcm9jZXNzZG9uZScsIG51bGwsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ3Byb2Nlc3NhbHdheXMnLCBudWxsLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuZmFpbChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcigncHJvY2Vzc2ZhaWwnLCBudWxsLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdwcm9jZXNzYWx3YXlzJywgbnVsbCwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGNoYWluO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8vIFJlcGxhY2VzIHRoZSBzZXR0aW5ncyBvZiBlYWNoIHByb2Nlc3NRdWV1ZSBpdGVtIHRoYXRcclxuICAgICAgICAvLyBhcmUgc3RyaW5ncyBzdGFydGluZyB3aXRoIGFuIFwiQFwiLCB1c2luZyB0aGUgcmVtYWluaW5nXHJcbiAgICAgICAgLy8gc3Vic3RyaW5nIGFzIGtleSBmb3IgdGhlIG9wdGlvbiBtYXAsXHJcbiAgICAgICAgLy8gZS5nLiBcIkBhdXRvVXBsb2FkXCIgaXMgcmVwbGFjZWQgd2l0aCBvcHRpb25zLmF1dG9VcGxvYWQ6XHJcbiAgICAgICAgX3RyYW5zZm9ybVByb2Nlc3NRdWV1ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdmFyIHByb2Nlc3NRdWV1ZSA9IFtdO1xyXG4gICAgICAgICAgICAkLmVhY2gob3B0aW9ucy5wcm9jZXNzUXVldWUsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9IHRoaXMuYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4ID09PSB0cnVlID8gYWN0aW9uIDogdGhpcy5wcmVmaXg7XHJcbiAgICAgICAgICAgICAgICAkLmVhY2godGhpcywgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoJC50eXBlKHZhbHVlKSA9PT0gJ3N0cmluZycgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzW2tleV0gPSBvcHRpb25zW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMSkgfHwgKHByZWZpeCA/IHByZWZpeCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpIDoga2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzUXVldWUucHVzaChzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBvcHRpb25zLnByb2Nlc3NRdWV1ZSA9IHByb2Nlc3NRdWV1ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZmlsZXMgY3VycmVudGx5IGluIHRoZSBwcm9jZXNzc2luZyBxdWV1ZTpcclxuICAgICAgICBwcm9jZXNzaW5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzaW5nO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8vIFByb2Nlc3NlcyB0aGUgZmlsZXMgZ2l2ZW4gYXMgZmlsZXMgcHJvcGVydHkgb2YgdGhlIGRhdGEgcGFyYW1ldGVyLFxyXG4gICAgICAgIC8vIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCB0aGF0IGFsbG93cyB0byBiaW5kIGNhbGxiYWNrczpcclxuICAgICAgICBwcm9jZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgZGF0YSk7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnByb2Nlc3NRdWV1ZSAmJiBvcHRpb25zLnByb2Nlc3NRdWV1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9ybVByb2Nlc3NRdWV1ZShvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wcm9jZXNzaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcigncHJvY2Vzc3N0YXJ0Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkLmVhY2goZGF0YS5maWxlcywgZnVuY3Rpb24gKGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wdHMgPSBpbmRleCA/ICQuZXh0ZW5kKHt9LCBvcHRpb25zKSA6IG9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5lcnJvclRocm93bikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLkRlZmVycmVkKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWplY3RXaXRoKHRoYXQsIFtkYXRhXSkucHJvbWlzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQuX3Byb2Nlc3NGaWxlKG9wdHMsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdHMuaW5kZXggPSBpbmRleDtcclxuICAgICAgICAgICAgICAgICAgICB0aGF0Ll9wcm9jZXNzaW5nICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fcHJvY2Vzc2luZ1F1ZXVlID0gdGhhdC5fcHJvY2Vzc2luZ1F1ZXVlLnBpcGUoZnVuYywgZnVuYylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFsd2F5cyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9wcm9jZXNzaW5nIC09IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5fcHJvY2Vzc2luZyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ3Byb2Nlc3NzdG9wJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NpbmdRdWV1ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfY3JlYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NpbmcgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzaW5nUXVldWUgPSAkLkRlZmVycmVkKCkucmVzb2x2ZVdpdGgodGhpcylcclxuICAgICAgICAgICAgICAgIC5wcm9taXNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxufSkpO1xyXG4iLCIvKlxyXG4gKiBqUXVlcnkgRmlsZSBVcGxvYWQgVmFsaWRhdGlvbiBQbHVnaW4gMS4xLjJcclxuICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkXHJcbiAqXHJcbiAqIENvcHlyaWdodCAyMDEzLCBTZWJhc3RpYW4gVHNjaGFuXHJcbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcclxuICpcclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxyXG4gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxyXG4gKi9cclxuXHJcbi8qIGdsb2JhbCBkZWZpbmUsIHdpbmRvdyAqL1xyXG5cclxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XHJcbiAgICAndXNlIHN0cmljdCc7XHJcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgICAgICAgLy8gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIEFNRCBtb2R1bGU6XHJcbiAgICAgICAgZGVmaW5lKFtcclxuICAgICAgICAgICAgJ2pxdWVyeScsXHJcbiAgICAgICAgICAgICcuL2pxdWVyeS5maWxldXBsb2FkLXByb2Nlc3MnXHJcbiAgICAgICAgXSwgZmFjdG9yeSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFsczpcclxuICAgICAgICBmYWN0b3J5KFxyXG4gICAgICAgICAgICB3aW5kb3cualF1ZXJ5XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufShmdW5jdGlvbiAoJCkge1xyXG4gICAgJ3VzZSBzdHJpY3QnO1xyXG5cclxuICAgIC8vIEFwcGVuZCB0byB0aGUgZGVmYXVsdCBwcm9jZXNzUXVldWU6XHJcbiAgICAkLmJsdWVpbXAuZmlsZXVwbG9hZC5wcm90b3R5cGUub3B0aW9ucy5wcm9jZXNzUXVldWUucHVzaChcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ3ZhbGlkYXRlJyxcclxuICAgICAgICAgICAgLy8gQWx3YXlzIHRyaWdnZXIgdGhpcyBhY3Rpb24sXHJcbiAgICAgICAgICAgIC8vIGV2ZW4gaWYgdGhlIHByZXZpb3VzIGFjdGlvbiB3YXMgcmVqZWN0ZWQ6IFxyXG4gICAgICAgICAgICBhbHdheXM6IHRydWUsXHJcbiAgICAgICAgICAgIC8vIE9wdGlvbnMgdGFrZW4gZnJvbSB0aGUgZ2xvYmFsIG9wdGlvbnMgbWFwOlxyXG4gICAgICAgICAgICBhY2NlcHRGaWxlVHlwZXM6ICdAJyxcclxuICAgICAgICAgICAgbWF4RmlsZVNpemU6ICdAJyxcclxuICAgICAgICAgICAgbWluRmlsZVNpemU6ICdAJyxcclxuICAgICAgICAgICAgbWF4TnVtYmVyT2ZGaWxlczogJ0AnLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogJ0BkaXNhYmxlVmFsaWRhdGlvbidcclxuICAgICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIC8vIFRoZSBGaWxlIFVwbG9hZCBWYWxpZGF0aW9uIHBsdWdpbiBleHRlbmRzIHRoZSBmaWxldXBsb2FkIHdpZGdldFxyXG4gICAgLy8gd2l0aCBmaWxlIHZhbGlkYXRpb24gZnVuY3Rpb25hbGl0eTpcclxuICAgICQud2lkZ2V0KCdibHVlaW1wLmZpbGV1cGxvYWQnLCAkLmJsdWVpbXAuZmlsZXVwbG9hZCwge1xyXG5cclxuICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgIC8vIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gZm9yIGFsbG93ZWQgZmlsZSB0eXBlcywgbWF0Y2hlc1xyXG4gICAgICAgICAgICAvLyBhZ2FpbnN0IGVpdGhlciBmaWxlIHR5cGUgb3IgZmlsZSBuYW1lOlxyXG4gICAgICAgICAgICBhY2NlcHRGaWxlVHlwZXM6IC8oXFwufFxcLykoZ2lmfGpwZT9nfHBuZykkL2ksXHJcbiAgICAgICAgICAgIC8vIFRoZSBtYXhpbXVtIGFsbG93ZWQgZmlsZSBzaXplIGluIGJ5dGVzOlxyXG4gICAgICAgICAgICBtYXhGaWxlU2l6ZTogMTAwMDAwMDAsIC8vIDEwIE1CXHJcbiAgICAgICAgICAgIC8vIFRoZSBtaW5pbXVtIGFsbG93ZWQgZmlsZSBzaXplIGluIGJ5dGVzOlxyXG4gICAgICAgICAgICBtaW5GaWxlU2l6ZTogdW5kZWZpbmVkLCAvLyBObyBtaW5pbWFsIGZpbGUgc2l6ZVxyXG4gICAgICAgICAgICAvLyBUaGUgbGltaXQgb2YgZmlsZXMgdG8gYmUgdXBsb2FkZWQ6XHJcbiAgICAgICAgICAgIG1heE51bWJlck9mRmlsZXM6IDEwLFxyXG4gICAgICAgICAgICAqL1xyXG5cclxuICAgICAgICAgICAgLy8gRnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBjdXJyZW50IG51bWJlciBvZiBmaWxlcyxcclxuICAgICAgICAgICAgLy8gaGFzIHRvIGJlIG92ZXJyaWRlbiBmb3IgbWF4TnVtYmVyT2ZGaWxlcyB2YWxpZGF0aW9uOlxyXG4gICAgICAgICAgICBnZXROdW1iZXJPZkZpbGVzOiAkLm5vb3AsXHJcblxyXG4gICAgICAgICAgICAvLyBFcnJvciBhbmQgaW5mbyBtZXNzYWdlczpcclxuICAgICAgICAgICAgbWVzc2FnZXM6IHtcclxuICAgICAgICAgICAgICAgIG1heE51bWJlck9mRmlsZXM6ICdNYXhpbXVtIG51bWJlciBvZiBmaWxlcyBleGNlZWRlZCcsXHJcbiAgICAgICAgICAgICAgICBhY2NlcHRGaWxlVHlwZXM6ICdGaWxlIHR5cGUgbm90IGFsbG93ZWQnLFxyXG4gICAgICAgICAgICAgICAgbWF4RmlsZVNpemU6ICdGaWxlIGlzIHRvbyBsYXJnZScsXHJcbiAgICAgICAgICAgICAgICBtaW5GaWxlU2l6ZTogJ0ZpbGUgaXMgdG9vIHNtYWxsJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgcHJvY2Vzc0FjdGlvbnM6IHtcclxuXHJcbiAgICAgICAgICAgIHZhbGlkYXRlOiBmdW5jdGlvbiAoZGF0YSwgb3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBkZmQgPSAkLkRlZmVycmVkKCksXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MgPSB0aGlzLm9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGRhdGEuZmlsZXNbZGF0YS5pbmRleF0sXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZVNpemU7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5taW5GaWxlU2l6ZSB8fCBvcHRpb25zLm1heEZpbGVTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZVNpemUgPSBmaWxlLnNpemU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoJC50eXBlKG9wdGlvbnMubWF4TnVtYmVyT2ZGaWxlcykgPT09ICdudW1iZXInICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZXR0aW5ncy5nZXROdW1iZXJPZkZpbGVzKCkgfHwgMCkgKyBkYXRhLmZpbGVzLmxlbmd0aCA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1heE51bWJlck9mRmlsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxlLmVycm9yID0gc2V0dGluZ3MuaTE4bignbWF4TnVtYmVyT2ZGaWxlcycpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmFjY2VwdEZpbGVUeXBlcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhKG9wdGlvbnMuYWNjZXB0RmlsZVR5cGVzLnRlc3QoZmlsZS50eXBlKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFjY2VwdEZpbGVUeXBlcy50ZXN0KGZpbGUubmFtZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZS5lcnJvciA9IHNldHRpbmdzLmkxOG4oJ2FjY2VwdEZpbGVUeXBlcycpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxlU2l6ZSA+IG9wdGlvbnMubWF4RmlsZVNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxlLmVycm9yID0gc2V0dGluZ3MuaTE4bignbWF4RmlsZVNpemUnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJC50eXBlKGZpbGVTaXplKSA9PT0gJ251bWJlcicgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVNpemUgPCBvcHRpb25zLm1pbkZpbGVTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZS5lcnJvciA9IHNldHRpbmdzLmkxOG4oJ21pbkZpbGVTaXplJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWxlLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGZpbGUuZXJyb3IgfHwgZGF0YS5maWxlcy5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEuZmlsZXMuZXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGRmZC5yZWplY3RXaXRoKHRoaXMsIFtkYXRhXSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlV2l0aCh0aGlzLCBbZGF0YV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRmZC5wcm9taXNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxufSkpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.js index 7da3f6367fa..ea0241425e9 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.js @@ -9214,4 +9214,4 @@ return jQuery; })); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5qcyIsImpxdWVyeS0yLjEuNC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsIi8qIVxuICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2Mi4xLjRcbiAqIGh0dHA6Ly9qcXVlcnkuY29tL1xuICpcbiAqIEluY2x1ZGVzIFNpenpsZS5qc1xuICogaHR0cDovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgMjAwNSwgMjAxNCBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKiBEYXRlOiAyMDE1LTA0LTI4VDE2OjAxWlxuICovXG5cbihmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0Ly8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YFxuXHRcdC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcblx0XHQvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy5cblx0XHQvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLlxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcblx0XHQvLyBTZWUgdGlja2V0ICMxNDU0OSBmb3IgbW9yZSBpbmZvLlxuXHRcdG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cblx0XHRcdGZhY3RvcnkoIGdsb2JhbCwgdHJ1ZSApIDpcblx0XHRcdGZ1bmN0aW9uKCB3ICkge1xuXHRcdFx0XHRpZiAoICF3LmRvY3VtZW50ICkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvciggXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeSggdyApO1xuXHRcdFx0fTtcblx0fSBlbHNlIHtcblx0XHRmYWN0b3J5KCBnbG9iYWwgKTtcblx0fVxuXG4vLyBQYXNzIHRoaXMgaWYgd2luZG93IGlzIG5vdCBkZWZpbmVkIHlldFxufSh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7XG5cbi8vIFN1cHBvcnQ6IEZpcmVmb3ggMTgrXG4vLyBDYW4ndCBiZSBpbiBzdHJpY3QgbW9kZSwgc2V2ZXJhbCBsaWJzIGluY2x1ZGluZyBBU1AuTkVUIHRyYWNlXG4vLyB0aGUgc3RhY2sgdmlhIGFyZ3VtZW50cy5jYWxsZXIuY2FsbGVlIGFuZCBGaXJlZm94IGRpZXMgaWZcbi8vIHlvdSB0cnkgdG8gdHJhY2UgdGhyb3VnaCBcInVzZSBzdHJpY3RcIiBjYWxsIGNoYWlucy4gKCMxMzMzNSlcbi8vXG5cbnZhciBhcnIgPSBbXTtcblxudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xuXG52YXIgY29uY2F0ID0gYXJyLmNvbmNhdDtcblxudmFyIHB1c2ggPSBhcnIucHVzaDtcblxudmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjtcblxudmFyIGNsYXNzMnR5cGUgPSB7fTtcblxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcblxudmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBzdXBwb3J0ID0ge307XG5cblxuXG52YXJcblx0Ly8gVXNlIHRoZSBjb3JyZWN0IGRvY3VtZW50IGFjY29yZGluZ2x5IHdpdGggd2luZG93IGFyZ3VtZW50IChzYW5kYm94KVxuXHRkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudCxcblxuXHR2ZXJzaW9uID0gXCIyLjEuNFwiLFxuXG5cdC8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5XG5cdGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjFcblx0Ly8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQXG5cdHJ0cmltID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLFxuXG5cdC8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZ1xuXHRybXNQcmVmaXggPSAvXi1tcy0vLFxuXHRyZGFzaEFscGhhID0gLy0oW1xcZGEtel0pL2dpLFxuXG5cdC8vIFVzZWQgYnkgalF1ZXJ5LmNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcblx0ZmNhbWVsQ2FzZSA9IGZ1bmN0aW9uKCBhbGwsIGxldHRlciApIHtcblx0XHRyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7XG5cdH07XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cdC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWRcblx0anF1ZXJ5OiB2ZXJzaW9uLFxuXG5cdGNvbnN0cnVjdG9yOiBqUXVlcnksXG5cblx0Ly8gU3RhcnQgd2l0aCBhbiBlbXB0eSBzZWxlY3RvclxuXHRzZWxlY3RvcjogXCJcIixcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cdFx0cmV0dXJuIG51bSAhPSBudWxsID9cblxuXHRcdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdFx0KCBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdICkgOlxuXG5cdFx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0XHRzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFja1xuXHQvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldClcblx0cHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cblx0XHQvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldFxuXHRcdHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTtcblxuXHRcdC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpXG5cdFx0cmV0LnByZXZPYmplY3QgPSB0aGlzO1xuXHRcdHJldC5jb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuXG5cdFx0Ly8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXRcblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdC8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuXG5cdC8vIChZb3UgY2FuIHNlZWQgdGhlIGFyZ3VtZW50cyB3aXRoIGFuIGFycmF5IG9mIGFyZ3MsIGJ1dCB0aGlzIGlzXG5cdC8vIG9ubHkgdXNlZCBpbnRlcm5hbGx5Lilcblx0ZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrLCBhcmdzICkge1xuXHRcdHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2ssIGFyZ3MgKTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAodGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0pKTtcblx0fSxcblxuXHRzbGljZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgKTtcblx0fSxcblxuXHRmaXJzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIDAgKTtcblx0fSxcblxuXHRsYXN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggLTEgKTtcblx0fSxcblxuXHRlcTogZnVuY3Rpb24oIGkgKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0aiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzW2pdIF0gOiBbXSApO1xuXHR9LFxuXG5cdGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKG51bGwpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbMF0gfHwge30sXG5cdFx0aSA9IDEsXG5cdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cblx0XHQvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307XG5cdFx0aSsrO1xuXHR9XG5cblx0Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpXG5cdGlmICggdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24odGFyZ2V0KSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdGktLTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAoIChvcHRpb25zID0gYXJndW1lbnRzWyBpIF0pICE9IG51bGwgKSB7XG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdHNyYyA9IHRhcmdldFsgbmFtZSBdO1xuXHRcdFx0XHRjb3B5ID0gb3B0aW9uc1sgbmFtZSBdO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29weUlzQXJyYXkgPSBqUXVlcnkuaXNBcnJheShjb3B5KSkgKSApIHtcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICkge1xuXHRcdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmIGpRdWVyeS5pc0FycmF5KHNyYykgPyBzcmMgOiBbXTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdChzcmMpID8gc3JjIDoge307XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApO1xuXG5cdFx0XHRcdC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXNcblx0XHRcdFx0fSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0gY29weTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKHtcblx0Ly8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlXG5cdGV4cGFuZG86IFwialF1ZXJ5XCIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xcRC9nLCBcIlwiICksXG5cblx0Ly8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGVcblx0aXNSZWFkeTogdHJ1ZSxcblxuXHRlcnJvcjogZnVuY3Rpb24oIG1zZyApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoIG1zZyApO1xuXHR9LFxuXG5cdG5vb3A6IGZ1bmN0aW9uKCkge30sXG5cblx0aXNGdW5jdGlvbjogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LnR5cGUob2JqKSA9PT0gXCJmdW5jdGlvblwiO1xuXHR9LFxuXG5cdGlzQXJyYXk6IEFycmF5LmlzQXJyYXksXG5cblx0aXNXaW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0cmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdztcblx0fSxcblxuXHRpc051bWVyaWM6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0Ly8gcGFyc2VGbG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKG51bGx8dHJ1ZXxmYWxzZXxcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQvLyBhZGRpbmcgMSBjb3JyZWN0cyBsb3NzIG9mIHByZWNpc2lvbiBmcm9tIHBhcnNlRmxvYXQgKCMxNTEwMClcblx0XHRyZXR1cm4gIWpRdWVyeS5pc0FycmF5KCBvYmogKSAmJiAob2JqIC0gcGFyc2VGbG9hdCggb2JqICkgKyAxKSA+PSAwO1xuXHR9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0Ly8gTm90IHBsYWluIG9iamVjdHM6XG5cdFx0Ly8gLSBBbnkgb2JqZWN0IG9yIHZhbHVlIHdob3NlIGludGVybmFsIFtbQ2xhc3NdXSBwcm9wZXJ0eSBpcyBub3QgXCJbb2JqZWN0IE9iamVjdF1cIlxuXHRcdC8vIC0gRE9NIG5vZGVzXG5cdFx0Ly8gLSB3aW5kb3dcblx0XHRpZiAoIGpRdWVyeS50eXBlKCBvYmogKSAhPT0gXCJvYmplY3RcIiB8fCBvYmoubm9kZVR5cGUgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoIG9iai5jb25zdHJ1Y3RvciAmJlxuXHRcdFx0XHQhaGFzT3duLmNhbGwoIG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsIFwiaXNQcm90b3R5cGVPZlwiICkgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIGZ1bmN0aW9uIGhhc24ndCByZXR1cm5lZCBhbHJlYWR5LCB3ZSdyZSBjb25maWRlbnQgdGhhdFxuXHRcdC8vIHxvYmp8IGlzIGEgcGxhaW4gb2JqZWN0LCBjcmVhdGVkIGJ5IHt9IG9yIGNvbnN0cnVjdGVkIHdpdGggbmV3IE9iamVjdFxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIG5hbWU7XG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdHR5cGU6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0aWYgKCBvYmogPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHRcdH1cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMCwgaU9TPDYgKGZ1bmN0aW9uaXNoIFJlZ0V4cClcblx0XHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgP1xuXHRcdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbChvYmopIF0gfHwgXCJvYmplY3RcIiA6XG5cdFx0XHR0eXBlb2Ygb2JqO1xuXHR9LFxuXG5cdC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0XG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlICkge1xuXHRcdHZhciBzY3JpcHQsXG5cdFx0XHRpbmRpcmVjdCA9IGV2YWw7XG5cblx0XHRjb2RlID0galF1ZXJ5LnRyaW0oIGNvZGUgKTtcblxuXHRcdGlmICggY29kZSApIHtcblx0XHRcdC8vIElmIHRoZSBjb2RlIGluY2x1ZGVzIGEgdmFsaWQsIHByb2xvZ3VlIHBvc2l0aW9uXG5cdFx0XHQvLyBzdHJpY3QgbW9kZSBwcmFnbWEsIGV4ZWN1dGUgY29kZSBieSBpbmplY3RpbmcgYVxuXHRcdFx0Ly8gc2NyaXB0IHRhZyBpbnRvIHRoZSBkb2N1bWVudC5cblx0XHRcdGlmICggY29kZS5pbmRleE9mKFwidXNlIHN0cmljdFwiKSA9PT0gMSApIHtcblx0XHRcdFx0c2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblx0XHRcdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBPdGhlcndpc2UsIGF2b2lkIHRoZSBET00gbm9kZSBjcmVhdGlvbiwgaW5zZXJ0aW9uXG5cdFx0XHQvLyBhbmQgcmVtb3ZhbCBieSB1c2luZyBhbiBpbmRpcmVjdCBnbG9iYWwgZXZhbFxuXHRcdFx0XHRpbmRpcmVjdCggY29kZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG5cdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0Ly8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKVxuXHRjYW1lbENhc2U6IGZ1bmN0aW9uKCBzdHJpbmcgKSB7XG5cdFx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG5cdH0sXG5cblx0bm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHR9LFxuXG5cdC8vIGFyZ3MgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0ZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2ssIGFyZ3MgKSB7XG5cdFx0dmFyIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoLFxuXHRcdFx0aXNBcnJheSA9IGlzQXJyYXlsaWtlKCBvYmogKTtcblxuXHRcdGlmICggYXJncyApIHtcblx0XHRcdGlmICggaXNBcnJheSApIHtcblx0XHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjay5hcHBseSggb2JqWyBpIF0sIGFyZ3MgKTtcblxuXHRcdFx0XHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKCBpIGluIG9iaiApIHtcblx0XHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrLmFwcGx5KCBvYmpbIGkgXSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEEgc3BlY2lhbCwgZmFzdCwgY2FzZSBmb3IgdGhlIG1vc3QgY29tbW9uIHVzZSBvZiBlYWNoXG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggaXNBcnJheSApIHtcblx0XHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKTtcblxuXHRcdFx0XHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKCBpIGluIG9iaiApIHtcblx0XHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApO1xuXG5cdFx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xXG5cdHRyaW06IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdHJldHVybiB0ZXh0ID09IG51bGwgP1xuXHRcdFx0XCJcIiA6XG5cdFx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiXCIgKTtcblx0fSxcblxuXHQvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHtcblx0XHR2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcblxuXHRcdGlmICggYXJyICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGlzQXJyYXlsaWtlKCBPYmplY3QoYXJyKSApICkge1xuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHJldCxcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRbIGFyciBdIDogYXJyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmNhbGwoIHJldCwgYXJyICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHRpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkge1xuXHRcdHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTtcblx0fSxcblxuXHRtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7XG5cdFx0dmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLFxuXHRcdFx0aiA9IDAsXG5cdFx0XHRpID0gZmlyc3QubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTtcblx0XHR9XG5cblx0XHRmaXJzdC5sZW5ndGggPSBpO1xuXG5cdFx0cmV0dXJuIGZpcnN0O1xuXHR9LFxuXG5cdGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludmVydCApIHtcblx0XHR2YXIgY2FsbGJhY2tJbnZlcnNlLFxuXHRcdFx0bWF0Y2hlcyA9IFtdLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGgsXG5cdFx0XHRjYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zXG5cdFx0Ly8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb25cblx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdGNhbGxiYWNrSW52ZXJzZSA9ICFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApO1xuXHRcdFx0aWYgKCBjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0ICkge1xuXHRcdFx0XHRtYXRjaGVzLnB1c2goIGVsZW1zWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbWF0Y2hlcztcblx0fSxcblxuXHQvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7XG5cdFx0dmFyIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGgsXG5cdFx0XHRpc0FycmF5ID0gaXNBcnJheWxpa2UoIGVsZW1zICksXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5ICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCxcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBlbGVtcyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRcdHJldHVybiBjb25jYXQuYXBwbHkoIFtdLCByZXQgKTtcblx0fSxcblxuXHQvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHNcblx0Z3VpZDogMSxcblxuXHQvLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcblx0Ly8gYXJndW1lbnRzLlxuXHRwcm94eTogZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHRcdHZhciB0bXAsIGFyZ3MsIHByb3h5O1xuXG5cdFx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0XHRjb250ZXh0ID0gZm47XG5cdFx0XHRmbiA9IHRtcDtcblx0XHR9XG5cblx0XHQvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlY1xuXHRcdC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuXG5cdFx0aWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIGZuICkgKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFNpbXVsYXRlZCBiaW5kXG5cdFx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRcdHByb3h5ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTtcblx0XHR9O1xuXG5cdFx0Ly8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkXG5cdFx0cHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7XG5cblx0XHRyZXR1cm4gcHJveHk7XG5cdH0sXG5cblx0bm93OiBEYXRlLm5vdyxcblxuXHQvLyBqUXVlcnkuc3VwcG9ydCBpcyBub3QgdXNlZCBpbiBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0cyBhdHRhY2ggdGhlaXJcblx0Ly8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0byBleGlzdC5cblx0c3VwcG9ydDogc3VwcG9ydFxufSk7XG5cbi8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcFxualF1ZXJ5LmVhY2goXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yXCIuc3BsaXQoXCIgXCIpLCBmdW5jdGlvbihpLCBuYW1lKSB7XG5cdGNsYXNzMnR5cGVbIFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xufSk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlsaWtlKCBvYmogKSB7XG5cblx0Ly8gU3VwcG9ydDogaU9TIDguMiAobm90IHJlcHJvZHVjaWJsZSBpbiBzaW11bGF0b3IpXG5cdC8vIGBpbmAgY2hlY2sgdXNlZCB0byBwcmV2ZW50IEpJVCBlcnJvciAoZ2gtMjE0NSlcblx0Ly8gaGFzT3duIGlzbid0IHVzZWQgaGVyZSBkdWUgdG8gZmFsc2UgbmVnYXRpdmVzXG5cdC8vIHJlZ2FyZGluZyBOb2RlbGlzdCBsZW5ndGggaW4gSUVcblx0dmFyIGxlbmd0aCA9IFwibGVuZ3RoXCIgaW4gb2JqICYmIG9iai5sZW5ndGgsXG5cdFx0dHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblxuXHRpZiAoIHR5cGUgPT09IFwiZnVuY3Rpb25cIiB8fCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggb2JqLm5vZGVUeXBlID09PSAxICYmIGxlbmd0aCApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XG5cdFx0dHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajtcbn1cbnZhciBTaXp6bGUgPVxuLyohXG4gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4yLjAtcHJlXG4gKiBodHRwOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCAyMDA4LCAyMDE0IGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMTQtMTItMTZcbiAqL1xuKGZ1bmN0aW9uKCB3aW5kb3cgKSB7XG5cbnZhciBpLFxuXHRzdXBwb3J0LFxuXHRFeHByLFxuXHRnZXRUZXh0LFxuXHRpc1hNTCxcblx0dG9rZW5pemUsXG5cdGNvbXBpbGUsXG5cdHNlbGVjdCxcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRzZXREb2N1bWVudCxcblx0ZG9jdW1lbnQsXG5cdGRvY0VsZW0sXG5cdGRvY3VtZW50SXNIVE1MLFxuXHRyYnVnZ3lRU0EsXG5cdHJidWdneU1hdGNoZXMsXG5cdG1hdGNoZXMsXG5cdGNvbnRhaW5zLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcblx0cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9LFxuXG5cdC8vIEdlbmVyYWwtcHVycG9zZSBjb25zdGFudHNcblx0TUFYX05FR0FUSVZFID0gMSA8PCAzMSxcblxuXHQvLyBJbnN0YW5jZSBtZXRob2RzXG5cdGhhc093biA9ICh7fSkuaGFzT3duUHJvcGVydHksXG5cdGFyciA9IFtdLFxuXHRwb3AgPSBhcnIucG9wLFxuXHRwdXNoX25hdGl2ZSA9IGFyci5wdXNoLFxuXHRwdXNoID0gYXJyLnB1c2gsXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxuXHQvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRpdmVcblx0Ly8gaHR0cDovL2pzcGVyZi5jb20vdGhvci1pbmRleG9mLXZzLWZvci81XG5cdGluZGV4T2YgPSBmdW5jdGlvbiggbGlzdCwgZWxlbSApIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRsZW4gPSBsaXN0Lmxlbmd0aDtcblx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGlmICggbGlzdFtpXSA9PT0gZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRib29sZWFucyA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixcblxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gV2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlXG5cdHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCIsXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc3ludGF4LyNjaGFyYWN0ZXJzXG5cdGNoYXJhY3RlckVuY29kaW5nID0gXCIoPzpcXFxcXFxcXC58W1xcXFx3LV18W15cXFxceDAwLVxcXFx4YTBdKStcIixcblxuXHQvLyBMb29zZWx5IG1vZGVsZWQgb24gQ1NTIGlkZW50aWZpZXIgY2hhcmFjdGVyc1xuXHQvLyBBbiB1bnF1b3RlZCB2YWx1ZSBzaG91bGQgYmUgYSBDU1MgaWRlbnRpZmllciBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHQvLyBQcm9wZXIgc3ludGF4OiBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjdmFsdWUtZGVmLWlkZW50aWZpZXJcblx0aWRlbnRpZmllciA9IGNoYXJhY3RlckVuY29kaW5nLnJlcGxhY2UoIFwid1wiLCBcIncjXCIgKSxcblxuXHQvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnNcblx0YXR0cmlidXRlcyA9IFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooXCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xuXHRcdC8vIFwiQXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XSBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XVwiXG5cdFx0XCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGlkZW50aWZpZXIgKyBcIikpfClcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiKlxcXFxdXCIsXG5cblx0cHNldWRvcyA9IFwiOihcIiArIGNoYXJhY3RlckVuY29kaW5nICsgXCIpKD86XFxcXCgoXCIgK1xuXHRcdC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6XG5cdFx0Ly8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXG5cdFx0XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBhdHRyaWJ1dGVzICsgXCIpKil8XCIgK1xuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXHRydHJpbSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArIHdoaXRlc3BhY2UgKyBcIiskXCIsIFwiZ1wiICksXG5cblx0cmNvbW1hID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqLFwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKihbPit+XXxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXG5cdHJhdHRyaWJ1dGVRdW90ZXMgPSBuZXcgUmVnRXhwKCBcIj1cIiArIHdoaXRlc3BhY2UgKyBcIiooW15cXFxcXSdcXFwiXSo/KVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFxdXCIsIFwiZ1wiICksXG5cblx0cnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSxcblx0cmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCBcIl5cIiArIGlkZW50aWZpZXIgKyBcIiRcIiApLFxuXG5cdG1hdGNoRXhwciA9IHtcblx0XHRcIklEXCI6IG5ldyBSZWdFeHAoIFwiXiMoXCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArIFwiKVwiICksXG5cdFx0XCJDTEFTU1wiOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGNoYXJhY3RlckVuY29kaW5nICsgXCIpXCIgKSxcblx0XHRcIlRBR1wiOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBjaGFyYWN0ZXJFbmNvZGluZy5yZXBsYWNlKCBcIndcIiwgXCJ3KlwiICkgKyBcIilcIiApLFxuXHRcdFwiQVRUUlwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIGF0dHJpYnV0ZXMgKSxcblx0XHRcIlBTRVVET1wiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcblx0XHRcIkNISUxEXCI6IG5ldyBSZWdFeHAoIFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIiArIHdoaXRlc3BhY2UgKyBcIiooPzooWystXXwpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKihcXFxcZCspfCkpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KVwiLCBcImlcIiApLFxuXHRcdFwiYm9vbFwiOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxuXHRcdC8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKVxuXHRcdC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGBcblx0XHRcIm5lZWRzQ29udGV4dFwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgK1xuXHRcdFx0d2hpdGVzcGFjZSArIFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpKD89W14tXXwkKVwiLCBcImlcIiApXG5cdH0sXG5cblx0cmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJoZWFkZXIgPSAvXmhcXGQkL2ksXG5cblx0cm5hdGl2ZSA9IC9eW157XStcXHtcXHMqXFxbbmF0aXZlIFxcdy8sXG5cblx0Ly8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzXG5cdHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxcblxuXHRyc2libGluZyA9IC9bK35dLyxcblx0cmVzY2FwZSA9IC8nfFxcXFwvZyxcblxuXHQvLyBDU1MgZXNjYXBlcyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFwoW1xcXFxkYS1mXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICsgXCI/fChcIiArIHdoaXRlc3BhY2UgKyBcIil8LilcIiwgXCJpZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBfLCBlc2NhcGVkLCBlc2NhcGVkV2hpdGVzcGFjZSApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZWQgLSAweDEwMDAwO1xuXHRcdC8vIE5hTiBtZWFucyBub24tY29kZXBvaW50XG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveDwyNFxuXHRcdC8vIFdvcmthcm91bmQgZXJyb25lb3VzIG51bWVyaWMgaW50ZXJwcmV0YXRpb24gb2YgK1wiMHhcIlxuXHRcdHJldHVybiBoaWdoICE9PSBoaWdoIHx8IGVzY2FwZWRXaGl0ZXNwYWNlID9cblx0XHRcdGVzY2FwZWQgOlxuXHRcdFx0aGlnaCA8IDAgP1xuXHRcdFx0XHQvLyBCTVAgY29kZXBvaW50XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0XHQvLyBTdXBwbGVtZW50YWwgUGxhbmUgY29kZXBvaW50IChzdXJyb2dhdGUgcGFpcilcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XG5cdH0sXG5cblx0Ly8gVXNlZCBmb3IgaWZyYW1lc1xuXHQvLyBTZWUgc2V0RG9jdW1lbnQoKVxuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUVcblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH07XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdChhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2RlcyApKSxcblx0XHRwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xuXHQpO1xuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMFxuXHQvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5XG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggP1xuXG5cdFx0Ly8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGVcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoX25hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKGVscykgKTtcblx0XHR9IDpcblxuXHRcdC8vIFN1cHBvcnQ6IElFPDlcblx0XHQvLyBPdGhlcndpc2UgYXBwZW5kIGRpcmVjdGx5XG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0dmFyIGogPSB0YXJnZXQubGVuZ3RoLFxuXHRcdFx0XHRpID0gMDtcblx0XHRcdC8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aFxuXHRcdFx0d2hpbGUgKCAodGFyZ2V0W2orK10gPSBlbHNbaSsrXSkgKSB7fVxuXHRcdFx0dGFyZ2V0Lmxlbmd0aCA9IGogLSAxO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIG1hdGNoLCBlbGVtLCBtLCBub2RlVHlwZSxcblx0XHQvLyBRU0EgdmFyc1xuXHRcdGksIGdyb3Vwcywgb2xkLCBuaWQsIG5ld0NvbnRleHQsIG5ld1NlbGVjdG9yO1xuXG5cdGlmICggKCBjb250ZXh0ID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBwcmVmZXJyZWREb2MgKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXG5cdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblx0bm9kZVR5cGUgPSBjb250ZXh0Lm5vZGVUeXBlO1xuXG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxuXHRcdG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHtcblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0aWYgKCAhc2VlZCAmJiBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgd2hlbiBwb3NzaWJsZSAoZS5nLiwgbm90IHVuZGVyIERvY3VtZW50RnJhZ21lbnQpXG5cdFx0aWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApKSApIHtcblx0XHRcdC8vIFNwZWVkLXVwOiBTaXp6bGUoXCIjSURcIilcblx0XHRcdGlmICggKG0gPSBtYXRjaFsxXSkgKSB7XG5cdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKTtcblx0XHRcdFx0XHQvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJuc1xuXHRcdFx0XHRcdC8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgKGpRdWVyeSAjNjk2Mylcblx0XHRcdFx0XHRpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIElFLCBPcGVyYSwgYW5kIFdlYmtpdCByZXR1cm4gaXRlbXNcblx0XHRcdFx0XHRcdC8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0aWYgKCBlbGVtLmlkID09PSBtICkge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBDb250ZXh0IGlzIG5vdCBhIGRvY3VtZW50XG5cdFx0XHRcdFx0aWYgKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgJiYgKGVsZW0gPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgJiZcblx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiYgZWxlbS5pZCA9PT0gbSApIHtcblx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFNwZWVkLXVwOiBTaXp6bGUoXCJUQUdcIilcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzJdICkge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XG5cdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHQvLyBTcGVlZC11cDogU2l6emxlKFwiLkNMQVNTXCIpXG5cdFx0XHR9IGVsc2UgaWYgKCAobSA9IG1hdGNoWzNdKSAmJiBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFFTQSBwYXRoXG5cdFx0aWYgKCBzdXBwb3J0LnFzYSAmJiAoIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkpICkge1xuXHRcdFx0bmlkID0gb2xkID0gZXhwYW5kbztcblx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xuXHRcdFx0bmV3U2VsZWN0b3IgPSBub2RlVHlwZSAhPT0gMSAmJiBzZWxlY3RvcjtcblxuXHRcdFx0Ly8gcVNBIHdvcmtzIHN0cmFuZ2VseSBvbiBFbGVtZW50LXJvb3RlZCBxdWVyaWVzXG5cdFx0XHQvLyBXZSBjYW4gd29yayBhcm91bmQgdGhpcyBieSBzcGVjaWZ5aW5nIGFuIGV4dHJhIElEIG9uIHRoZSByb290XG5cdFx0XHQvLyBhbmQgd29ya2luZyB1cCBmcm9tIHRoZXJlIChUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhlIHRlY2huaXF1ZSlcblx0XHRcdC8vIElFIDggZG9lc24ndCB3b3JrIG9uIG9iamVjdCBlbGVtZW50c1xuXHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gMSAmJiBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRcdGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXG5cdFx0XHRcdGlmICggKG9sZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKFwiaWRcIikpICkge1xuXHRcdFx0XHRcdG5pZCA9IG9sZC5yZXBsYWNlKCByZXNjYXBlLCBcIlxcXFwkJlwiICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgbmlkICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bmlkID0gXCJbaWQ9J1wiICsgbmlkICsgXCInXSBcIjtcblxuXHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0Z3JvdXBzW2ldID0gbmlkICsgdG9TZWxlY3RvciggZ3JvdXBzW2ldICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHQ7XG5cdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oXCIsXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIG5ld1NlbGVjdG9yICkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsXG5cdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9IGNhdGNoKHFzYUVycm9yKSB7XG5cdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0aWYgKCAhb2xkICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoXCJpZFwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBbGwgb3RoZXJzXG5cdHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApO1xufVxuXG4vKipcbiAqIENyZWF0ZSBrZXktdmFsdWUgY2FjaGVzIG9mIGxpbWl0ZWQgc2l6ZVxuICogQHJldHVybnMge0Z1bmN0aW9uKHN0cmluZywgT2JqZWN0KX0gUmV0dXJucyB0aGUgT2JqZWN0IGRhdGEgYWZ0ZXIgc3RvcmluZyBpdCBvbiBpdHNlbGYgd2l0aFxuICpcdHByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpXG4gKlx0ZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcblx0dmFyIGtleXMgPSBbXTtcblxuXHRmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHtcblx0XHQvLyBVc2UgKGtleSArIFwiIFwiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3KVxuXHRcdGlmICgga2V5cy5wdXNoKCBrZXkgKyBcIiBcIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHtcblx0XHRcdC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllc1xuXHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTtcblx0XHR9XG5cdFx0cmV0dXJuIChjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlKTtcblx0fVxuXHRyZXR1cm4gY2FjaGU7XG59XG5cbi8qKlxuICogTWFyayBhIGZ1bmN0aW9uIGZvciBzcGVjaWFsIHVzZSBieSBTaXp6bGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBtYXJrXG4gKi9cbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7XG5cdGZuWyBleHBhbmRvIF0gPSB0cnVlO1xuXHRyZXR1cm4gZm47XG59XG5cbi8qKlxuICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBkaXYgYW5kIGV4cGVjdHMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBkaXYgKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGRpdi5wYXJlbnROb2RlICkge1xuXHRcdFx0ZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGRpdiApO1xuXHRcdH1cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGRpdiA9IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzXG4gKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGFwcGxpZWRcbiAqL1xuZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywgaGFuZGxlciApIHtcblx0dmFyIGFyciA9IGF0dHJzLnNwbGl0KFwifFwiKSxcblx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyW2ldIF0gPSBoYW5kbGVyO1xuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5nc1xuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYlxuICovXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XG5cdHZhciBjdXIgPSBiICYmIGEsXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdCggfmIuc291cmNlSW5kZXggfHwgTUFYX05FR0FUSVZFICkgLVxuXHRcdFx0KCB+YS5zb3VyY2VJbmRleCB8fCBNQVhfTkVHQVRJVkUgKTtcblxuXHQvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXNcblx0aWYgKCBkaWZmICkge1xuXHRcdHJldHVybiBkaWZmO1xuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgYiBmb2xsb3dzIGFcblx0aWYgKCBjdXIgKSB7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLm5leHRTaWJsaW5nKSApIHtcblx0XHRcdGlmICggY3VyID09PSBiICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGEgPyAxIDogLTE7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiAobmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCIpICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHtcblx0XHRcdFx0XHRzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2VcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xuXG4vKipcbiAqIERldGVjdHMgWE1MIG5vZGVzXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxuICovXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHQvLyBkb2N1bWVudEVsZW1lbnQgaXMgdmVyaWZpZWQgZm9yIGNhc2VzIHdoZXJlIGl0IGRvZXNuJ3QgeWV0IGV4aXN0XG5cdC8vIChzdWNoIGFzIGxvYWRpbmcgaWZyYW1lcyBpbiBJRSAtICM0ODMzKVxuXHR2YXIgZG9jdW1lbnRFbGVtZW50ID0gZWxlbSAmJiAoZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVudDtcblx0cmV0dXJuIGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPT0gXCJIVE1MXCIgOiBmYWxzZTtcbn07XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkge1xuXHR2YXIgaGFzQ29tcGFyZSwgcGFyZW50LFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcblxuXHQvLyBJZiBubyBkb2N1bWVudCBhbmQgZG9jdW1lbnRFbGVtZW50IGlzIGF2YWlsYWJsZSwgcmV0dXJuXG5cdGlmICggZG9jID09PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gU2V0IG91ciBkb2N1bWVudFxuXHRkb2N1bWVudCA9IGRvYztcblx0ZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdHBhcmVudCA9IGRvYy5kZWZhdWx0VmlldztcblxuXHQvLyBTdXBwb3J0OiBJRT44XG5cdC8vIElmIGlmcmFtZSBkb2N1bWVudCBpcyBhc3NpZ25lZCB0byBcImRvY3VtZW50XCIgdmFyaWFibGUgYW5kIGlmIGlmcmFtZSBoYXMgYmVlbiByZWxvYWRlZCxcblx0Ly8gSUUgd2lsbCB0aHJvdyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBhY2Nlc3NpbmcgXCJkb2N1bWVudFwiIHZhcmlhYmxlLCBzZWUgalF1ZXJ5ICMxMzkzNlxuXHQvLyBJRTYtOCBkbyBub3Qgc3VwcG9ydCB0aGUgZGVmYXVsdFZpZXcgcHJvcGVydHkgc28gcGFyZW50IHdpbGwgYmUgdW5kZWZpbmVkXG5cdGlmICggcGFyZW50ICYmIHBhcmVudCAhPT0gcGFyZW50LnRvcCApIHtcblx0XHQvLyBJRTExIGRvZXMgbm90IGhhdmUgYXR0YWNoRXZlbnQsIHNvIGFsbCBtdXN0IHN1ZmZlclxuXHRcdGlmICggcGFyZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTtcblx0XHR9IGVsc2UgaWYgKCBwYXJlbnQuYXR0YWNoRXZlbnQgKSB7XG5cdFx0XHRwYXJlbnQuYXR0YWNoRXZlbnQoIFwib251bmxvYWRcIiwgdW5sb2FkSGFuZGxlciApO1xuXHRcdH1cblx0fVxuXG5cdC8qIFN1cHBvcnQgdGVzdHNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXHRkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9jICk7XG5cblx0LyogQXR0cmlidXRlc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gU3VwcG9ydDogSUU8OFxuXHQvLyBWZXJpZnkgdGhhdCBnZXRBdHRyaWJ1dGUgcmVhbGx5IHJldHVybnMgYXR0cmlidXRlcyBhbmQgbm90IHByb3BlcnRpZXNcblx0Ly8gKGV4Y2VwdGluZyBJRTggYm9vbGVhbnMpXG5cdHN1cHBvcnQuYXR0cmlidXRlcyA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRcdGRpdi5jbGFzc05hbWUgPSBcImlcIjtcblx0XHRyZXR1cm4gIWRpdi5nZXRBdHRyaWJ1dGUoXCJjbGFzc05hbWVcIik7XG5cdH0pO1xuXG5cdC8qIGdldEVsZW1lbnQocylCeSpcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSByZXR1cm5zIG9ubHkgZWxlbWVudHNcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRcdGRpdi5hcHBlbmRDaGlsZCggZG9jLmNyZWF0ZUNvbW1lbnQoXCJcIikgKTtcblx0XHRyZXR1cm4gIWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikubGVuZ3RoO1xuXHR9KTtcblxuXHQvLyBTdXBwb3J0OiBJRTw5XG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTtcblxuXHQvLyBTdXBwb3J0OiBJRTwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbWF0aWNhbGx5LXNldCBuYW1lcyxcblx0Ly8gc28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0XG5cdHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGRpdiApLmlkID0gZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvYy5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZG9jLmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoO1xuXHR9KTtcblxuXHQvLyBJRCBmaW5kIGFuZCBmaWx0ZXJcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maW5kW1wiSURcIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zXG5cdFx0XHRcdC8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjNcblx0XHRcdFx0cmV0dXJuIG0gJiYgbS5wYXJlbnROb2RlID8gWyBtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdEV4cHIuZmlsdGVyW1wiSURcIl0gPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKFwiaWRcIikgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHQvLyBTdXBwb3J0OiBJRTYvN1xuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRkZWxldGUgRXhwci5maW5kW1wiSURcIl07XG5cblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gIGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiYgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIik7XG5cdFx0XHRcdHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmRbXCJUQUdcIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID9cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBEb2N1bWVudEZyYWdtZW50IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE5cblx0XHRcdH0gZWxzZSBpZiAoIHN1cHBvcnQucXNhICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTtcblx0XHRcdH1cblx0XHR9IDpcblxuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0dG1wID0gW10sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHQvLyBCeSBoYXBweSBjb2luY2lkZW5jZSwgYSAoYnJva2VuKSBnRUJUTiBhcHBlYXJzIG9uIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgdG9vXG5cdFx0XHRcdHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50c1xuXHRcdFx0aWYgKCB0YWcgPT09IFwiKlwiICkge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHR0bXAucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0bXA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHR9O1xuXG5cdC8vIENsYXNzXG5cdEV4cHIuZmluZFtcIkNMQVNTXCJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQgKSB7XG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xuXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxuXHQvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXG5cdC8vIFNlZSBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM3OFxuXHRyYnVnZ3lRU0EgPSBbXTtcblxuXHRpZiAoIChzdXBwb3J0LnFzYSA9IHJuYXRpdmUudGVzdCggZG9jLnF1ZXJ5U2VsZWN0b3JBbGwgKSkgKSB7XG5cdFx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdFx0Ly8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaVxuXHRcdGFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRcdFx0Ly8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZVxuXHRcdFx0Ly8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5XG5cdFx0XHQvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSxcblx0XHRcdC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoXG5cdFx0XHQvLyBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZGl2ICkuaW5uZXJIVE1MID0gXCI8YSBpZD0nXCIgKyBleHBhbmRvICsgXCInPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxmXScgbXNhbGxvd2NhcHR1cmU9Jyc+XCIgK1xuXHRcdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOCwgT3BlcmEgMTEtMTIuMTZcblx0XHRcdC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj1cblx0XHRcdC8vIFRoZSB0ZXN0IGF0dHJpYnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0IFwic2FmZVwiIGZvciBXaW5SVFxuXHRcdFx0Ly8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb25cblx0XHRcdGlmICggZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlsqXiRdPVwiICsgd2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCBcInZhbHVlXCIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseVxuXHRcdFx0aWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbc2VsZWN0ZWRdXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooPzp2YWx1ZXxcIiArIGJvb2xlYW5zICsgXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lPDI5LCBBbmRyb2lkPDQuMissIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpTPDEuOS43K1xuXHRcdFx0aWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwifj1cIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiOmNoZWNrZWRcIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIjpjaGVja2VkXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCssIGlPUyA4K1xuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjg1MVxuXHRcdFx0Ly8gSW4tcGFnZSBgc2VsZWN0b3IjaWQgc2liaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXG5cdFx0XHRpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCggXCJhI1wiICsgZXhwYW5kbyArIFwiKypcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCIuIy4rWyt+XVwiKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRcdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXG5cdFx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRcdHZhciBpbnB1dCA9IGRvYy5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcImhpZGRlblwiICk7XG5cdFx0XHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGVcblx0XHRcdGlmICggZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbmFtZT1kXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIipbKl4kfCF+XT89XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRkYgMy41IC0gOmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxlbWVudHMgKGhpZGRlbiBlbGVtZW50cyBhcmUgc3RpbGwgZW5hYmxlZClcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbChcIjplbmFibGVkXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvc1xuXHRcdFx0ZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCIqLDp4XCIpO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCIsLio6XCIpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKCAoc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgPSBybmF0aXZlLnRlc3QoIChtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzIHx8XG5cdFx0ZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3IpICkpICkge1xuXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdFx0XHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXG5cdFx0XHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBkaXYsIFwiZGl2XCIgKTtcblxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxuXHRcdFx0Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZFxuXHRcdFx0bWF0Y2hlcy5jYWxsKCBkaXYsIFwiW3MhPScnXTp4XCIgKTtcblx0XHRcdHJidWdneU1hdGNoZXMucHVzaCggXCIhPVwiLCBwc2V1ZG9zICk7XG5cdFx0fSk7XG5cdH1cblxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKFwifFwiKSApO1xuXHRyYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKFwifFwiKSApO1xuXG5cdC8qIENvbnRhaW5zXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblx0aGFzQ29tcGFyZSA9IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApO1xuXG5cdC8vIEVsZW1lbnQgY29udGFpbnMgYW5vdGhlclxuXHQvLyBQdXJwb3NlZnVsbHkgZG9lcyBub3QgaW1wbGVtZW50IGluY2x1c2l2ZSBkZXNjZW5kZW50XG5cdC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5cdGNvbnRhaW5zID0gaGFzQ29tcGFyZSB8fCBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29udGFpbnMgKSA/XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHR2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLFxuXHRcdFx0XHRidXAgPSBiICYmIGIucGFyZW50Tm9kZTtcblx0XHRcdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRhZG93bi5jb250YWlucyA/XG5cdFx0XHRcdFx0YWRvd24uY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTZcblx0XHRcdCkpO1xuXHRcdH0gOlxuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0aWYgKCBiICkge1xuXHRcdFx0XHR3aGlsZSAoIChiID0gYi5wYXJlbnROb2RlKSApIHtcblx0XHRcdFx0XHRpZiAoIGIgPT09IGEgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gaGFzQ29tcGFyZSA/XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Y29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID9cblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZFxuXHRcdFx0MTtcblxuXHRcdC8vIERpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdGlmICggY29tcGFyZSAmIDEgfHxcblx0XHRcdCghc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHRpZiAoIGEgPT09IGRvYyB8fCBhLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGEpICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGIgPT09IGRvYyB8fCBiLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGIpICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFpbnRhaW4gb3JpZ2luYWwgb3JkZXJcblx0XHRcdHJldHVybiBzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xuXHR9IDpcblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0Ly8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRhdXAgPSBhLnBhcmVudE5vZGUsXG5cdFx0XHRidXAgPSBiLnBhcmVudE5vZGUsXG5cdFx0XHRhcCA9IFsgYSBdLFxuXHRcdFx0YnAgPSBbIGIgXTtcblxuXHRcdC8vIFBhcmVudGxlc3Mgbm9kZXMgYXJlIGVpdGhlciBkb2N1bWVudHMgb3IgZGlzY29ubmVjdGVkXG5cdFx0aWYgKCAhYXVwIHx8ICFidXAgKSB7XG5cdFx0XHRyZXR1cm4gYSA9PT0gZG9jID8gLTEgOlxuXHRcdFx0XHRiID09PSBkb2MgPyAxIDpcblx0XHRcdFx0YXVwID8gLTEgOlxuXHRcdFx0XHRidXAgPyAxIDpcblx0XHRcdFx0c29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXG5cdFx0Ly8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2tcblx0XHR9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHtcblx0XHRcdHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2Ugd2UgbmVlZCBmdWxsIGxpc3RzIG9mIHRoZWlyIGFuY2VzdG9ycyBmb3IgY29tcGFyaXNvblxuXHRcdGN1ciA9IGE7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkge1xuXHRcdFx0YXAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXHRcdGN1ciA9IGI7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkge1xuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcblx0XHR3aGlsZSAoIGFwW2ldID09PSBicFtpXSApIHtcblx0XHRcdGkrKztcblx0XHR9XG5cblx0XHRyZXR1cm4gaSA/XG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3Jcblx0XHRcdHNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3Rcblx0XHRcdGFwW2ldID09PSBwcmVmZXJyZWREb2MgPyAtMSA6XG5cdFx0XHRicFtpXSA9PT0gcHJlZmVycmVkRG9jID8gMSA6XG5cdFx0XHQwO1xuXHR9O1xuXG5cdHJldHVybiBkb2M7XG59O1xuXG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcblx0cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cblNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHR9XG5cblx0Ly8gTWFrZSBzdXJlIHRoYXQgYXR0cmlidXRlIHNlbGVjdG9ycyBhcmUgcXVvdGVkXG5cdGV4cHIgPSBleHByLnJlcGxhY2UoIHJhdHRyaWJ1dGVRdW90ZXMsIFwiPSckMSddXCIgKTtcblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblx0XHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cdH1cblxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgP1xuXHRcdHZhbCA6XG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDpcblx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0d2hpbGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7XG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcblx0XHQvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzXG5cdFx0Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1Mylcblx0XHRpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0cmV0dXJuIHJldDtcbn07XG5cbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFszXSA9ICggbWF0Y2hbM10gfHwgbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbMl0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbM10gPSBcIiBcIiArIG1hdGNoWzNdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbM10gKSB7XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbNF0gPSArKCBtYXRjaFs0XSA/IG1hdGNoWzVdICsgKG1hdGNoWzZdIHx8IDEpIDogMiAqICggbWF0Y2hbM10gPT09IFwiZXZlblwiIHx8IG1hdGNoWzNdID09PSBcIm9kZFwiICkgKTtcblx0XHRcdFx0bWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsgbWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbNl0gJiYgbWF0Y2hbMl07XG5cblx0XHRcdGlmICggbWF0Y2hFeHByW1wiQ0hJTERcIl0udGVzdCggbWF0Y2hbMF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRtYXRjaFsyXSA9IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJlxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWzJdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdChwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSkgJiZcblx0XHRcdFx0Y2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KCB0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmIGVsZW0uZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIiApO1xuXHRcdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiPVwiID8gcmVzdWx0ID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiIT1cIiA/IHJlc3VsdCAhPT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIl49XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiKj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiQ9XCIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIn49XCIgPyAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcInw9XCIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArIFwiLVwiIDpcblx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIG91dGVyQ2FjaGUsIG5vZGUsIGRpZmYsIG5vZGVJbmRleCwgc3RhcnQsXG5cdFx0XHRcdFx0XHRkaXIgPSBzaW1wbGUgIT09IGZvcndhcmQgPyBcIm5leHRTaWJsaW5nXCIgOiBcInByZXZpb3VzU2libGluZ1wiLFxuXHRcdFx0XHRcdFx0cGFyZW50ID0gZWxlbS5wYXJlbnROb2RlLFxuXHRcdFx0XHRcdFx0bmFtZSA9IG9mVHlwZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRcdFx0XHR1c2VDYWNoZSA9ICF4bWwgJiYgIW9mVHlwZTtcblxuXHRcdFx0XHRcdGlmICggcGFyZW50ICkge1xuXG5cdFx0XHRcdFx0XHQvLyA6KGZpcnN0fGxhc3R8b25seSktKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdFx0XHRpZiAoIHNpbXBsZSApIHtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCBkaXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAobm9kZSA9IG5vZGVbIGRpciBdKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggb2ZUeXBlID8gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDogbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gcGFyZW50WyBleHBhbmRvIF0gfHwgKHBhcmVudFsgZXhwYW5kbyBdID0ge30pO1xuXHRcdFx0XHRcdFx0XHRjYWNoZSA9IG91dGVyQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbMF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbMV07XG5cdFx0XHRcdFx0XHRcdGRpZmYgPSBjYWNoZVswXSA9PT0gZGlycnVucyAmJiBjYWNoZVsyXTtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07XG5cblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEZhbGxiYWNrIHRvIHNlZWtpbmcgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0KGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBXaGVuIGZvdW5kLCBjYWNoZSBpbmRleGVzIG9uIGBwYXJlbnRgIGFuZCBicmVha1xuXHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiArK2RpZmYgJiYgbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXggaWYgYXZhaWxhYmxlXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB1c2VDYWNoZSAmJiAoY2FjaGUgPSAoZWxlbVsgZXhwYW5kbyBdIHx8IChlbGVtWyBleHBhbmRvIF0gPSB7fSkpWyB0eXBlIF0pICYmIGNhY2hlWzBdID09PSBkaXJydW5zICkge1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gY2FjaGVbMV07XG5cblx0XHRcdFx0XHRcdC8vIHhtbCA6bnRoLWNoaWxkKC4uLikgb3IgOm50aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9mLXR5cGUoLi4uKVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQoZGlmZiA9IG5vZGVJbmRleCA9IDApIHx8IHN0YXJ0LnBvcCgpKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgPyBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOiBub2RlLm5vZGVUeXBlID09PSAxICkgJiYgKytkaWZmICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0KG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pKVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXHRcdFx0Ly8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xuXHRcdFx0Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvc1xuXHRcdFx0dmFyIGFyZ3MsXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xuXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxuXHRcdFx0Ly8ganVzdCBhcyBTaXp6bGUgZG9lc1xuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xuXHRcdFx0aWYgKCBmbi5sZW5ndGggPiAxICkge1xuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRcdFx0bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdFx0dmFyIGlkeCxcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxuXHRcdFx0XHRcdFx0XHRpID0gbWF0Y2hlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFtpXSApO1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFtpXSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pIDpcblx0XHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmbjtcblx0XHR9XG5cdH0sXG5cblx0cHNldWRvczoge1xuXHRcdC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvc1xuXHRcdFwibm90XCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHQvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZVxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcblx0XHRcdC8vIHNwYWNlcyBhcyBjb21iaW5hdG9yc1xuXHRcdFx0dmFyIGlucHV0ID0gW10sXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcblx0XHRcdFx0bWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSApO1xuXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cblx0XHRcdFx0bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0c2VlZFtpXSA9ICEobWF0Y2hlc1tpXSA9IGVsZW0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkgOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WzBdID0gZWxlbTtcblx0XHRcdFx0XHRtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7XG5cdFx0XHRcdFx0Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdFx0XHRpbnB1dFswXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0XCJoYXNcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdFwiY29udGFpbnNcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHQvLyBcIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0b3Jcblx0XHQvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZVxuXHRcdC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsXG5cdFx0Ly8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBcIi1cIi5cblx0XHQvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS5cblx0XHQvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLlwiXG5cdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkb1xuXHRcdFwibGFuZ1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkge1xuXHRcdFx0Ly8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxuXHRcdFx0aWYgKCAhcmlkZW50aWZpZXIudGVzdChsYW5nIHx8IFwiXCIpICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0XHRcdFx0ZWxlbS5sYW5nIDpcblx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKFwieG1sOmxhbmdcIikgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoXCJsYW5nXCIpKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoIChlbGVtID0gZWxlbS5wYXJlbnROb2RlKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0XCJ0YXJnZXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY0VsZW07XG5cdFx0fSxcblxuXHRcdFwiZm9jdXNcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkpICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXgpO1xuXHRcdH0sXG5cblx0XHQvLyBCb29sZWFuIHByb3BlcnRpZXNcblx0XHRcImVuYWJsZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2U7XG5cdFx0fSxcblxuXHRcdFwiZGlzYWJsZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0XCJjaGVja2VkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIChub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmICEhZWxlbS5jaGVja2VkKSB8fCAobm9kZU5hbWUgPT09IFwib3B0aW9uXCIgJiYgISFlbGVtLnNlbGVjdGVkKTtcblx0XHR9LFxuXG5cdFx0XCJzZWxlY3RlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHRcblx0XHRcdC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHlcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIENvbnRlbnRzXG5cdFx0XCJlbXB0eVwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvXG5cdFx0XHQvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksXG5cdFx0XHQvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKVxuXHRcdFx0Ly8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0XCJwYXJlbnRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gIUV4cHIucHNldWRvc1tcImVtcHR5XCJdKCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRcImhlYWRlclwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJpbnB1dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJidXR0b25cIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblxuXHRcdFwidGV4dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTw4XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZShcInR5cGVcIikpID09IG51bGwgfHwgYXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0XCJmaXJzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFsgMCBdO1xuXHRcdH0pLFxuXG5cdFx0XCJsYXN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIFsgbGVuZ3RoIC0gMSBdO1xuXHRcdH0pLFxuXG5cdFx0XCJlcVwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07XG5cdFx0fSksXG5cblx0XHRcImV2ZW5cIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcIm9kZFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwibHRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyAtLWkgPj0gMDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJndFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pXG5cdH1cbn07XG5cbkV4cHIucHNldWRvc1tcIm50aFwiXSA9IEV4cHIucHNldWRvc1tcImVxXCJdO1xuXG4vLyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRvc1xuZm9yICggaSBpbiB7IHJhZGlvOiB0cnVlLCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwgcGFzc3dvcmQ6IHRydWUsIGltYWdlOiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTtcbn1cbmZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7XG59XG5cbi8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVyc1xuZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9XG5zZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvcztcbkV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7XG5cbnRva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7XG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxuXHRcdHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsXG5cdFx0Y2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggY2FjaGVkICkge1xuXHRcdHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7XG5cdH1cblxuXHRzb0ZhciA9IHNlbGVjdG9yO1xuXHRncm91cHMgPSBbXTtcblx0cHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyO1xuXG5cdHdoaWxlICggc29GYXIgKSB7XG5cblx0XHQvLyBDb21tYSBhbmQgZmlyc3QgcnVuXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAobWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSkgKSB7XG5cdFx0XHRpZiAoIG1hdGNoICkge1xuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGggKSB8fCBzb0Zhcjtcblx0XHRcdH1cblx0XHRcdGdyb3Vwcy5wdXNoKCAodG9rZW5zID0gW10pICk7XG5cdFx0fVxuXG5cdFx0bWF0Y2hlZCA9IGZhbHNlO1xuXG5cdFx0Ly8gQ29tYmluYXRvcnNcblx0XHRpZiAoIChtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWzBdLnJlcGxhY2UoIHJ0cmltLCBcIiBcIiApXG5cdFx0XHR9KTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoIChtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkpICYmICghcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdChtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSkpICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdFx0bWF0Y2hlczogbWF0Y2hcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhbWF0Y2hlZCApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2Vzc1xuXHQvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmdcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXG5cdHJldHVybiBwYXJzZU9ubHkgP1xuXHRcdHNvRmFyLmxlbmd0aCA6XG5cdFx0c29GYXIgP1xuXHRcdFx0U2l6emxlLmVycm9yKCBzZWxlY3RvciApIDpcblx0XHRcdC8vIENhY2hlIHRoZSB0b2tlbnNcblx0XHRcdHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApO1xufTtcblxuZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRzZWxlY3RvciA9IFwiXCI7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdHNlbGVjdG9yICs9IHRva2Vuc1tpXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRjaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBkaXIgPT09IFwicGFyZW50Tm9kZVwiLFxuXHRcdGRvbmVOYW1lID0gZG9uZSsrO1xuXG5cdHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID9cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGNsb3Nlc3QgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSA6XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHNcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIG9sZENhY2hlLCBvdXRlckNhY2hlLFxuXHRcdFx0XHRuZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTtcblxuXHRcdFx0Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gZGlyIGNhY2hpbmdcblx0XHRcdGlmICggeG1sICkge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoZWxlbVsgZXhwYW5kbyBdID0ge30pO1xuXHRcdFx0XHRcdFx0aWYgKCAob2xkQ2FjaGUgPSBvdXRlckNhY2hlWyBkaXIgXSkgJiZcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBc3NpZ24gdG8gbmV3Q2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZVsgZGlyIF0gPSBuZXdDYWNoZTtcblxuXHRcdFx0XHRcdFx0XHQvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCAobmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1swXTtcbn1cblxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gY29udGV4dHMubGVuZ3RoO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCBcIipcIiwgY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLFxuXHRcdFx0XHRwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0XHRyZXN1bHRzIDpcblx0XHRcdFx0bWF0Y2hlckluO1xuXG5cdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRpZiAoIG1hdGNoZXIgKSB7XG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0gZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSApIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKG1hdGNoZXJPdXQgPSBbXSksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgJiZcblx0XHRcdFx0XHRcdCh0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbXCIgXCJdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblx0XHRcdC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHtcblx0XHRcdG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRjaGVzICk7XG5cblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2pdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHRcdHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5jb25jYXQoeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0pXG5cdFx0XHRcdFx0KS5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksXG5cdFx0XHRcdFx0bWF0Y2hlcixcblx0XHRcdFx0XHRpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAodG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbXCJUQUdcIl0oIFwiKlwiLCBvdXRlcm1vc3QgKSxcblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9IChkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSksXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ICE9PSBkb2N1bWVudCAmJiBjb250ZXh0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0c1xuXHRcdFx0Ly8gS2VlcCBgaWAgYSBzdHJpbmcgaWYgdGhlcmUgYXJlIG5vIGVsZW1lbnRzIHNvIGBtYXRjaGVkQ291bnRgIHdpbGwgYmUgXCIwMFwiIGJlbG93XG5cdFx0XHQvLyBTdXBwb3J0OiBJRTw5LCBTYWZhcmlcblx0XHRcdC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiBcImxlbmd0aFwiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZFxuXHRcdFx0Zm9yICggOyBpICE9PSBsZW4gJiYgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbaisrXSkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVyc1xuXHRcdFx0XHRpZiAoIGJ5U2V0ICkge1xuXHRcdFx0XHRcdC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnNcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSkgKSB7XG5cdFx0XHRcdFx0XHRtYXRjaGVkQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90XG5cdFx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdFx0dW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblx0XHRcdGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkge1xuXHRcdFx0XHRqID0gMDtcblx0XHRcdFx0d2hpbGUgKCAobWF0Y2hlciA9IHNldE1hdGNoZXJzW2orK10pICkge1xuXHRcdFx0XHRcdG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0Ly8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZ1xuXHRcdFx0XHRcdGlmICggbWF0Y2hlZENvdW50ID4gMCApIHtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoICEodW5tYXRjaGVkW2ldIHx8IHNldE1hdGNoZWRbaV0pICkge1xuXHRcdFx0XHRcdFx0XHRcdHNldE1hdGNoZWRbaV0gPSBwb3AuY2FsbCggcmVzdWx0cyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNoZXNcblx0XHRcdFx0XHRzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHNcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0Y2hlZCApO1xuXG5cdFx0XHRcdC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZ1xuXHRcdFx0XHRpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHQoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCApID4gMSApIHtcblxuXHRcdFx0XHRcdFNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJzXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0QmFja3VwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5tYXRjaGVkO1xuXHRcdH07XG5cblx0cmV0dXJuIGJ5U2V0ID9cblx0XHRtYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDpcblx0XHRzdXBlck1hdGNoZXI7XG59XG5cbmNvbXBpbGUgPSBTaXp6bGUuY29tcGlsZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgbWF0Y2ggLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7XG5cdHZhciBpLFxuXHRcdHNldE1hdGNoZXJzID0gW10sXG5cdFx0ZWxlbWVudE1hdGNoZXJzID0gW10sXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggIWNhY2hlZCApIHtcblx0XHQvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnRcblx0XHRpZiAoICFtYXRjaCApIHtcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0fVxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbaV0gKTtcblx0XHRcdGlmICggY2FjaGVkWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvblxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNlbGVjdG9yLCBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSApO1xuXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXG5cdFx0Y2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cblx0cmV0dXJuIGNhY2hlZDtcbn07XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxuICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3RcbiAqL1xuc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsXG5cdFx0Y29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBzZWxlY3Rvcixcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoc2VsZWN0b3IgPSBjb21waWxlZC5zZWxlY3RvciB8fCBzZWxlY3RvcikgKTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBubyBzZWVkIGFuZCBvbmx5IG9uZSBncm91cFxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFRha2UgYSBzaG9ydGN1dCBhbmQgc2V0IHRoZSBjb250ZXh0IGlmIHRoZSByb290IHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCApO1xuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdFx0c3VwcG9ydC5nZXRCeUlkICYmIGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiZcblx0XHRcdFx0RXhwci5yZWxhdGl2ZVsgdG9rZW5zWzFdLnR5cGUgXSApIHtcblxuXHRcdFx0Y29udGV4dCA9ICggRXhwci5maW5kW1wiSURcIl0oIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZShydW5lc2NhcGUsIGZ1bmVzY2FwZSksIGNvbnRleHQgKSB8fCBbXSApWzBdO1xuXHRcdFx0aWYgKCAhY29udGV4dCApIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdC8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWxcblx0XHRcdH0gZWxzZSBpZiAoIGNvbXBpbGVkICkge1xuXHRcdFx0XHRjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nXG5cdFx0aSA9IG1hdGNoRXhwcltcIm5lZWRzQ29udGV4dFwiXS50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0b2tlbiA9IHRva2Vuc1tpXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAodHlwZSA9IHRva2VuLnR5cGUpIF0gKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAoZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdKSApIHtcblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKHNlZWQgPSBmaW5kKFxuXHRcdFx0XHRcdHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbMF0udHlwZSApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdFx0XHRcdCkpICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5XG5cdFx0XHRcdFx0dG9rZW5zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7XG5cdFx0XHRcdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24gaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuXHQvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlXG5cdCggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKShcblx0XHRzZWVkLFxuXHRcdGNvbnRleHQsXG5cdFx0IWRvY3VtZW50SXNIVE1MLFxuXHRcdHJlc3VsdHMsXG5cdFx0cnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHQpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8vIE9uZS10aW1lIGFzc2lnbm1lbnRzXG5cbi8vIFNvcnQgc3RhYmlsaXR5XG5zdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KFwiXCIpLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oXCJcIikgPT09IGV4cGFuZG87XG5cbi8vIFN1cHBvcnQ6IENocm9tZSAxNC0zNStcbi8vIEFsd2F5cyBhc3N1bWUgZHVwbGljYXRlcyBpZiB0aGV5IGFyZW4ndCBwYXNzZWQgdG8gdGhlIGNvbXBhcmlzb24gZnVuY3Rpb25cbnN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcyA9ICEhaGFzRHVwbGljYXRlO1xuXG4vLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnRcbnNldERvY3VtZW50KCk7XG5cbi8vIFN1cHBvcnQ6IFdlYmtpdDw1MzcuMzIgLSBTYWZhcmkgNi4wLjMvQ2hyb21lIDI1IChmaXhlZCBpbiBDaHJvbWUgMjcpXG4vLyBEZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcipcbnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYxICkge1xuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGRpdjEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikgKSAmIDE7XG59KTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzNjQyOSUyOFZTLjg1JTI5LmFzcHhcbmlmICggIWFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRkaXYuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCI7XG5cdHJldHVybiBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpID09PSBcIiNcIiA7XG59KSApIHtcblx0YWRkSGFuZGxlKCBcInR5cGV8aHJlZnxoZWlnaHR8d2lkdGhcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwidHlwZVwiID8gMSA6IDIgKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZGVmYXVsdFZhbHVlIGluIHBsYWNlIG9mIGdldEF0dHJpYnV0ZShcInZhbHVlXCIpXG5pZiAoICFzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRkaXYuaW5uZXJIVE1MID0gXCI8aW5wdXQvPlwiO1xuXHRkaXYuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiwgXCJcIiApO1xuXHRyZXR1cm4gZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gXCJcIjtcbn0pICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXNcbmlmICggIWFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRyZXR1cm4gZGl2LmdldEF0dHJpYnV0ZShcImRpc2FibGVkXCIpID09IG51bGw7XG59KSApIHtcblx0YWRkSGFuZGxlKCBib29sZWFucywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciB2YWw7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdID09PSB0cnVlID8gbmFtZS50b0xvd2VyQ2FzZSgpIDpcblx0XHRcdFx0XHQodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkpICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHRcdHZhbC52YWx1ZSA6XG5cdFx0XHRcdG51bGw7XG5cdFx0fVxuXHR9KTtcbn1cblxucmV0dXJuIFNpenpsZTtcblxufSkoIHdpbmRvdyApO1xuXG5cblxualF1ZXJ5LmZpbmQgPSBTaXp6bGU7XG5qUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7XG5qUXVlcnkuZXhwcltcIjpcIl0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0O1xualF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDtcbmpRdWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDtcbmpRdWVyeS5jb250YWlucyA9IFNpenpsZS5jb250YWlucztcblxuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG52YXIgcnNpbmdsZVRhZyA9ICgvXjwoXFx3KylcXHMqXFwvPz4oPzo8XFwvXFwxPnwpJC8pO1xuXG5cblxudmFyIHJpc1NpbXBsZSA9IC9eLlteOiNcXFtcXC4sXSokLztcblxuLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3RcbmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkge1xuXHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xuXHRcdFx0cmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90O1xuXHRcdH0pO1xuXG5cdH1cblxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XG5cdFx0fSk7XG5cblx0fVxuXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRpZiAoIHJpc1NpbXBsZS50ZXN0KCBxdWFsaWZpZXIgKSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTtcblx0XHR9XG5cblx0XHRxdWFsaWZpZXIgPSBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzICk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID49IDAgKSAhPT0gbm90O1xuXHR9KTtcbn1cblxualF1ZXJ5LmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkge1xuXHR2YXIgZWxlbSA9IGVsZW1zWyAwIF07XG5cblx0aWYgKCBub3QgKSB7XG5cdFx0ZXhwciA9IFwiOm5vdChcIiArIGV4cHIgKyBcIilcIjtcblx0fVxuXG5cdHJldHVybiBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSA/XG5cdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdIDpcblx0XHRqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7XG5cdFx0fSkpO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCh7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSxcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0cmV0ID0gW10sXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSkgKTtcblx0XHR9XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApO1xuXHRcdH1cblxuXHRcdC8vIE5lZWRlZCBiZWNhdXNlICQoIHNlbGVjdG9yLCBjb250ZXh0ICkgYmVjb21lcyAkKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKVxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZSggcmV0ICkgOiByZXQgKTtcblx0XHRyZXQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yID8gdGhpcy5zZWxlY3RvciArIFwiIFwiICsgc2VsZWN0b3IgOiBzZWxlY3Rvcjtcblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyh0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UpICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlKSApO1xuXHR9LFxuXHRpczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiAhIXdpbm5vdyhcblx0XHRcdHRoaXMsXG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXRcblx0XHRcdC8vIHNvICQoXCJwOmZpcnN0XCIpLmlzKFwicDpsYXN0XCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byBcInBcIi5cblx0XHRcdHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgP1xuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9yICkgOlxuXHRcdFx0XHRzZWxlY3RvciB8fCBbXSxcblx0XHRcdGZhbHNlXG5cdFx0KS5sZW5ndGg7XG5cdH1cbn0pO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxuXHRycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKikpJC8sXG5cblx0aW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXHRcdHZhciBtYXRjaCwgZWxlbTtcblxuXHRcdC8vIEhBTkRMRTogJChcIlwiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKVxuXHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIEhUTUwgc3RyaW5nc1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0aWYgKCBzZWxlY3RvclswXSA9PT0gXCI8XCIgJiYgc2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiYgc2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cdFx0XHRcdC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrXG5cdFx0XHRcdG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZFxuXHRcdFx0aWYgKCBtYXRjaCAmJiAobWF0Y2hbMV0gfHwgIWNvbnRleHQpICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWzFdICkge1xuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFswXSA6IGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTChcblx0XHRcdFx0XHRcdG1hdGNoWzFdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWzFdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHtcblx0XHRcdFx0XHRcdGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGVcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWzJdICk7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBCbGFja2JlcnJ5IDQuNlxuXHRcdFx0XHRcdC8vIGdFQklEIHJldHVybnMgbm9kZXMgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCAoIzY5NjMpXG5cdFx0XHRcdFx0aWYgKCBlbGVtICYmIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRcdC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0XG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0XHR0aGlzWzBdID0gZWxlbTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLmNvbnRleHQgPSBkb2N1bWVudDtcblx0XHRcdFx0XHR0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsICQoLi4uKSlcblx0XHRcdH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3RqUXVlcnkgKS5maW5kKCBzZWxlY3RvciApO1xuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgY29udGV4dClcblx0XHRcdC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSEFORExFOiAkKERPTUVsZW1lbnQpXG5cdFx0fSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7XG5cdFx0XHR0aGlzLmNvbnRleHQgPSB0aGlzWzBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcblx0XHRcdHJldHVybiB0eXBlb2Ygcm9vdGpRdWVyeS5yZWFkeSAhPT0gXCJ1bmRlZmluZWRcIiA/XG5cdFx0XHRcdHJvb3RqUXVlcnkucmVhZHkoIHNlbGVjdG9yICkgOlxuXHRcdFx0XHQvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yLnNlbGVjdG9yICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmNvbnRleHQgPSBzZWxlY3Rvci5jb250ZXh0O1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApO1xuXHR9O1xuXG4vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcblxuLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZVxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcblxuXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXG5cdC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0XG5cdGd1YXJhbnRlZWRVbmlxdWUgPSB7XG5cdFx0Y2hpbGRyZW46IHRydWUsXG5cdFx0Y29udGVudHM6IHRydWUsXG5cdFx0bmV4dDogdHJ1ZSxcblx0XHRwcmV2OiB0cnVlXG5cdH07XG5cbmpRdWVyeS5leHRlbmQoe1xuXHRkaXI6IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkge1xuXHRcdHZhciBtYXRjaGVkID0gW10sXG5cdFx0XHR0cnVuY2F0ZSA9IHVudGlsICE9PSB1bmRlZmluZWQ7XG5cblx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBtYXRjaGVkO1xuXHR9LFxuXG5cdHNpYmxpbmc6IGZ1bmN0aW9uKCBuLCBlbGVtICkge1xuXHRcdHZhciBtYXRjaGVkID0gW107XG5cblx0XHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdFx0aWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7XG5cdFx0XHRcdG1hdGNoZWQucHVzaCggbiApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBtYXRjaGVkO1xuXHR9XG59KTtcblxualF1ZXJ5LmZuLmV4dGVuZCh7XG5cdGhhczogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksXG5cdFx0XHRsID0gdGFyZ2V0cy5sZW5ndGg7XG5cblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzW2ldICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHRjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkge1xuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGwgPSB0aGlzLmxlbmd0aCxcblx0XHRcdG1hdGNoZWQgPSBbXSxcblx0XHRcdHBvcyA9IHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgfHwgdHlwZW9mIHNlbGVjdG9ycyAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3JzLCBjb250ZXh0IHx8IHRoaXMuY29udGV4dCApIDpcblx0XHRcdFx0MDtcblxuXHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdGZvciAoIGN1ciA9IHRoaXNbaV07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXHRcdFx0XHQvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHNcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAocG9zID9cblx0XHRcdFx0XHRwb3MuaW5kZXgoY3VyKSA+IC0xIDpcblxuXHRcdFx0XHRcdC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZVxuXHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGN1ciwgc2VsZWN0b3JzKSkgKSB7XG5cblx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlKCBtYXRjaGVkICkgOiBtYXRjaGVkICk7XG5cdH0sXG5cblx0Ly8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0XG5cdGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50XG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFyZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTtcblx0XHR9XG5cblx0XHQvLyBJbmRleCBpbiBzZWxlY3RvclxuXHRcdGlmICggdHlwZW9mIGVsZW0gPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdGhpc1sgMCBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50XG5cdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggdGhpcyxcblxuXHRcdFx0Ly8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkXG5cdFx0XHRlbGVtLmpxdWVyeSA/IGVsZW1bIDAgXSA6IGVsZW1cblx0XHQpO1xuXHR9LFxuXG5cdGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayhcblx0XHRcdGpRdWVyeS51bmlxdWUoXG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIClcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgP1xuXHRcdFx0dGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlcihzZWxlY3Rvcilcblx0XHQpO1xuXHR9XG59KTtcblxuZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7XG5cdHdoaWxlICggKGN1ciA9IGN1cltkaXJdKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCh7XG5cdHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRyZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsO1xuXHR9LFxuXHRwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xuXHR9LFxuXHRuZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0cHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LnNpYmxpbmcoICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApO1xuXHR9LFxuXHRjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5zaWJsaW5nKCBlbGVtLmZpcnN0Q2hpbGQgKTtcblx0fSxcblx0Y29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudCB8fCBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcblx0XHRcdGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHtcblx0XHRcdFx0alF1ZXJ5LnVuaXF1ZSggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0pO1xudmFyIHJub3R3aGl0ZSA9ICgvXFxTKy9nKTtcblxuXG5cbi8vIFN0cmluZyB0byBPYmplY3Qgb3B0aW9ucyBmb3JtYXQgY2FjaGVcbnZhciBvcHRpb25zQ2FjaGUgPSB7fTtcblxuLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXMgYW5kIHN0b3JlIGluIGNhY2hlXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0gb3B0aW9uc0NhY2hlWyBvcHRpb25zIF0gPSB7fTtcblx0alF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHtcblx0XHRvYmplY3RbIGZsYWcgXSA9IHRydWU7XG5cdH0pO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdCggb3B0aW9uc0NhY2hlWyBvcHRpb25zIF0gfHwgY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApICkgOlxuXHRcdGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7XG5cblx0dmFyIC8vIExhc3QgZmlyZSB2YWx1ZSAoZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0cylcblx0XHRtZW1vcnksXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblx0XHQvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nXG5cdFx0ZmlyaW5nLFxuXHRcdC8vIEZpcnN0IGNhbGxiYWNrIHRvIGZpcmUgKHVzZWQgaW50ZXJuYWxseSBieSBhZGQgYW5kIGZpcmVXaXRoKVxuXHRcdGZpcmluZ1N0YXJ0LFxuXHRcdC8vIEVuZCBvZiB0aGUgbG9vcCB3aGVuIGZpcmluZ1xuXHRcdGZpcmluZ0xlbmd0aCxcblx0XHQvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSByZW1vdmUgaWYgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4LFxuXHRcdC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0XG5cdFx0bGlzdCA9IFtdLFxuXHRcdC8vIFN0YWNrIG9mIGZpcmUgY2FsbHMgZm9yIHJlcGVhdGFibGUgbGlzdHNcblx0XHRzdGFjayA9ICFvcHRpb25zLm9uY2UgJiYgW10sXG5cdFx0Ly8gRmlyZSBjYWxsYmFja3Ncblx0XHRmaXJlID0gZnVuY3Rpb24oIGRhdGEgKSB7XG5cdFx0XHRtZW1vcnkgPSBvcHRpb25zLm1lbW9yeSAmJiBkYXRhO1xuXHRcdFx0ZmlyZWQgPSB0cnVlO1xuXHRcdFx0ZmlyaW5nSW5kZXggPSBmaXJpbmdTdGFydCB8fCAwO1xuXHRcdFx0ZmlyaW5nU3RhcnQgPSAwO1xuXHRcdFx0ZmlyaW5nTGVuZ3RoID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRmaXJpbmcgPSB0cnVlO1xuXHRcdFx0Zm9yICggOyBsaXN0ICYmIGZpcmluZ0luZGV4IDwgZmlyaW5nTGVuZ3RoOyBmaXJpbmdJbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIGRhdGFbIDAgXSwgZGF0YVsgMSBdICkgPT09IGZhbHNlICYmIG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cdFx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7IC8vIFRvIHByZXZlbnQgZnVydGhlciBjYWxscyB1c2luZyBhZGRcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZmlyaW5nID0gZmFsc2U7XG5cdFx0XHRpZiAoIGxpc3QgKSB7XG5cdFx0XHRcdGlmICggc3RhY2sgKSB7XG5cdFx0XHRcdFx0aWYgKCBzdGFjay5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCBzdGFjay5zaGlmdCgpICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNlbGYuZGlzYWJsZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cdFx0XHQvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0XG5cdFx0XHRhZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cdFx0XHRcdFx0Ly8gRmlyc3QsIHdlIHNhdmUgdGhlIGN1cnJlbnQgbGVuZ3RoXG5cdFx0XHRcdFx0dmFyIHN0YXJ0ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0KGZ1bmN0aW9uIGFkZCggYXJncyApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3QucHVzaCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIEluc3BlY3QgcmVjdXJzaXZlbHlcblx0XHRcdFx0XHRcdFx0XHRhZGQoIGFyZyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KSggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0Ly8gRG8gd2UgbmVlZCB0byBhZGQgdGhlIGNhbGxiYWNrcyB0byB0aGVcblx0XHRcdFx0XHQvLyBjdXJyZW50IGZpcmluZyBiYXRjaD9cblx0XHRcdFx0XHRpZiAoIGZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0xlbmd0aCA9IGxpc3QubGVuZ3RoO1xuXHRcdFx0XHRcdC8vIFdpdGggbWVtb3J5LCBpZiB3ZSdyZSBub3QgZmlyaW5nIHRoZW5cblx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgY2FsbCByaWdodCBhd2F5XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggbWVtb3J5ICkge1xuXHRcdFx0XHRcdFx0ZmlyaW5nU3RhcnQgPSBzdGFydDtcblx0XHRcdFx0XHRcdGZpcmUoIG1lbW9yeSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHQvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0XG5cdFx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdHZhciBpbmRleDtcblx0XHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRsaXN0LnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXG5cdFx0XHRcdFx0XHRcdGlmICggZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nTGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmlyaW5nTGVuZ3RoLS07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmaXJpbmdJbmRleC0tO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuXG5cdFx0XHQvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC5cblx0XHRcdGhhczogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRyZXR1cm4gZm4gPyBqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDogISEoIGxpc3QgJiYgbGlzdC5sZW5ndGggKTtcblx0XHRcdH0sXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0ZmlyaW5nTGVuZ3RoID0gMDtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0Ly8gSGF2ZSB0aGUgbGlzdCBkbyBub3RoaW5nIGFueW1vcmVcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsaXN0ID0gc3RhY2sgPSBtZW1vcnkgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdC8vIElzIGl0IGRpc2FibGVkP1xuXHRcdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XG5cdFx0XHR9LFxuXHRcdFx0Ly8gTG9jayB0aGUgbGlzdCBpbiBpdHMgY3VycmVudCBzdGF0ZVxuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHN0YWNrID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoICFtZW1vcnkgKSB7XG5cdFx0XHRcdFx0c2VsZi5kaXNhYmxlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0Ly8gSXMgaXQgbG9ja2VkP1xuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICFzdGFjaztcblx0XHRcdH0sXG5cdFx0XHQvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzXG5cdFx0XHRmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7XG5cdFx0XHRcdGlmICggbGlzdCAmJiAoICFmaXJlZCB8fCBzdGFjayApICkge1xuXHRcdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IFtdO1xuXHRcdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XG5cdFx0XHRcdFx0aWYgKCBmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRzdGFjay5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGZpcmUoIGFyZ3MgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0Ly8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHNcblx0XHRcdGZpcmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmpRdWVyeS5leHRlbmQoe1xuXG5cdERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHtcblx0XHR2YXIgdHVwbGVzID0gW1xuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgbGlzdGVuZXIgbGlzdCwgZmluYWwgc3RhdGVcblx0XHRcdFx0WyBcInJlc29sdmVcIiwgXCJkb25lXCIsIGpRdWVyeS5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSwgXCJyZWplY3RlZFwiIF0sXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKFwibWVtb3J5XCIpIF1cblx0XHRcdF0sXG5cdFx0XHRzdGF0ZSA9IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJvbWlzZSA9IHtcblx0XHRcdFx0c3RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YWx3YXlzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZChmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBmbnNbIGkgXSApICYmIGZuc1sgaSBdO1xuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZFsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdIGZvciBmb3J3YXJkaW5nIGFjdGlvbnMgdG8gbmV3RGVmZXJcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWzFdIF0oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnByb21pc2UoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlclsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IHByb21pc2UgPyBuZXdEZWZlci5wcm9taXNlKCkgOiB0aGlzLCBmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdFxuXHRcdHByb21pc2UucGlwZSA9IHByb21pc2UudGhlbjtcblxuXHRcdC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHNcblx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cdFx0XHR2YXIgbGlzdCA9IHR1cGxlWyAyIF0sXG5cdFx0XHRcdHN0YXRlU3RyaW5nID0gdHVwbGVbIDMgXTtcblxuXHRcdFx0Ly8gcHJvbWlzZVsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdID0gbGlzdC5hZGRcblx0XHRcdHByb21pc2VbIHR1cGxlWzFdIF0gPSBsaXN0LmFkZDtcblxuXHRcdFx0Ly8gSGFuZGxlIHN0YXRlXG5cdFx0XHRpZiAoIHN0YXRlU3RyaW5nICkge1xuXHRcdFx0XHRsaXN0LmFkZChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQvLyBzdGF0ZSA9IFsgcmVzb2x2ZWQgfCByZWplY3RlZCBdXG5cdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblxuXHRcdFx0XHQvLyBbIHJlamVjdF9saXN0IHwgcmVzb2x2ZV9saXN0IF0uZGlzYWJsZTsgcHJvZ3Jlc3NfbGlzdC5sb2NrXG5cdFx0XHRcdH0sIHR1cGxlc1sgaSBeIDEgXVsgMiBdLmRpc2FibGUsIHR1cGxlc1sgMiBdWyAyIF0ubG9jayApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBkZWZlcnJlZFsgcmVzb2x2ZSB8IHJlamVjdCB8IG5vdGlmeSBdXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbMF0gXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbMF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHByb21pc2UgOiB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9O1xuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWzBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XG5cdFx0fSk7XG5cblx0XHQvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2Vcblx0XHRwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7XG5cblx0XHQvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55XG5cdFx0aWYgKCBmdW5jICkge1xuXHRcdFx0ZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTtcblx0XHR9XG5cblx0XHQvLyBBbGwgZG9uZSFcblx0XHRyZXR1cm4gZGVmZXJyZWQ7XG5cdH0sXG5cblx0Ly8gRGVmZXJyZWQgaGVscGVyXG5cdHdoZW46IGZ1bmN0aW9uKCBzdWJvcmRpbmF0ZSAvKiAsIC4uLiwgc3Vib3JkaW5hdGVOICovICkge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblx0XHRcdGxlbmd0aCA9IHJlc29sdmVWYWx1ZXMubGVuZ3RoLFxuXG5cdFx0XHQvLyB0aGUgY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzXG5cdFx0XHRyZW1haW5pbmcgPSBsZW5ndGggIT09IDEgfHwgKCBzdWJvcmRpbmF0ZSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggc3Vib3JkaW5hdGUucHJvbWlzZSApICkgPyBsZW5ndGggOiAwLFxuXG5cdFx0XHQvLyB0aGUgbWFzdGVyIERlZmVycmVkLiBJZiByZXNvbHZlVmFsdWVzIGNvbnNpc3Qgb2Ygb25seSBhIHNpbmdsZSBEZWZlcnJlZCwganVzdCB1c2UgdGhhdC5cblx0XHRcdGRlZmVycmVkID0gcmVtYWluaW5nID09PSAxID8gc3Vib3JkaW5hdGUgOiBqUXVlcnkuRGVmZXJyZWQoKSxcblxuXHRcdFx0Ly8gVXBkYXRlIGZ1bmN0aW9uIGZvciBib3RoIHJlc29sdmUgYW5kIHByb2dyZXNzIHZhbHVlc1xuXHRcdFx0dXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpLCBjb250ZXh0cywgdmFsdWVzICkge1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdGNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHZhbHVlc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlO1xuXHRcdFx0XHRcdGlmICggdmFsdWVzID09PSBwcm9ncmVzc1ZhbHVlcyApIHtcblx0XHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhKCAtLXJlbWFpbmluZyApICkge1xuXHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9LFxuXG5cdFx0XHRwcm9ncmVzc1ZhbHVlcywgcHJvZ3Jlc3NDb250ZXh0cywgcmVzb2x2ZUNvbnRleHRzO1xuXG5cdFx0Ly8gQWRkIGxpc3RlbmVycyB0byBEZWZlcnJlZCBzdWJvcmRpbmF0ZXM7IHRyZWF0IG90aGVycyBhcyByZXNvbHZlZFxuXHRcdGlmICggbGVuZ3RoID4gMSApIHtcblx0XHRcdHByb2dyZXNzVmFsdWVzID0gbmV3IEFycmF5KCBsZW5ndGggKTtcblx0XHRcdHByb2dyZXNzQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApO1xuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRyZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSgpXG5cdFx0XHRcdFx0XHQuZG9uZSggdXBkYXRlRnVuYyggaSwgcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICkgKVxuXHRcdFx0XHRcdFx0LmZhaWwoIGRlZmVycmVkLnJlamVjdCApXG5cdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIHVwZGF0ZUZ1bmMoIGksIHByb2dyZXNzQ29udGV4dHMsIHByb2dyZXNzVmFsdWVzICkgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQtLXJlbWFpbmluZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHdlJ3JlIG5vdCB3YWl0aW5nIG9uIGFueXRoaW5nLCByZXNvbHZlIHRoZSBtYXN0ZXJcblx0XHRpZiAoICFyZW1haW5pbmcgKSB7XG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTtcblx0fVxufSk7XG5cblxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XG52YXIgcmVhZHlMaXN0O1xuXG5qUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7XG5cdC8vIEFkZCB0aGUgY2FsbGJhY2tcblx0alF1ZXJ5LnJlYWR5LnByb21pc2UoKS5kb25lKCBmbiApO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxualF1ZXJ5LmV4dGVuZCh7XG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXG5cdGlzUmVhZHk6IGZhbHNlLFxuXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhvbGQgKG9yIHJlbGVhc2UpIHRoZSByZWFkeSBldmVudFxuXHRob2xkUmVhZHk6IGZ1bmN0aW9uKCBob2xkICkge1xuXHRcdGlmICggaG9sZCApIHtcblx0XHRcdGpRdWVyeS5yZWFkeVdhaXQrKztcblx0XHR9IGVsc2Uge1xuXHRcdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblxuXHRcdC8vIFRyaWdnZXIgYW55IGJvdW5kIHJlYWR5IGV2ZW50c1xuXHRcdGlmICggalF1ZXJ5LmZuLnRyaWdnZXJIYW5kbGVyICkge1xuXHRcdFx0alF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXJIYW5kbGVyKCBcInJlYWR5XCIgKTtcblx0XHRcdGpRdWVyeSggZG9jdW1lbnQgKS5vZmYoIFwicmVhZHlcIiApO1xuXHRcdH1cblx0fVxufSk7XG5cbi8qKlxuICogVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2RcbiAqL1xuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkLCBmYWxzZSApO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCwgZmFsc2UgKTtcblx0alF1ZXJ5LnJlYWR5KCk7XG59XG5cbmpRdWVyeS5yZWFkeS5wcm9taXNlID0gZnVuY3Rpb24oIG9iaiApIHtcblx0aWYgKCAhcmVhZHlMaXN0ICkge1xuXG5cdFx0cmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cblx0XHQvLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZCBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC5cblx0XHQvLyBXZSBvbmNlIHRyaWVkIHRvIHVzZSByZWFkeVN0YXRlIFwiaW50ZXJhY3RpdmVcIiBoZXJlLCBidXQgaXQgY2F1c2VkIGlzc3VlcyBsaWtlIHRoZSBvbmVcblx0XHQvLyBkaXNjb3ZlcmVkIGJ5IENocmlzUyBoZXJlOiBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjI4MiNjb21tZW50OjE1XG5cdFx0aWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgKSB7XG5cdFx0XHQvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHlcblx0XHRcdHNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCwgZmFsc2UgKTtcblxuXHRcdFx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkLCBmYWxzZSApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVhZHlMaXN0LnByb21pc2UoIG9iaiApO1xufTtcblxuLy8gS2ljayBvZmYgdGhlIERPTSByZWFkeSBjaGVjayBldmVuIGlmIHRoZSB1c2VyIGRvZXMgbm90XG5qUXVlcnkucmVhZHkucHJvbWlzZSgpO1xuXG5cblxuXG4vLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb25cbi8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvblxudmFyIGFjY2VzcyA9IGpRdWVyeS5hY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCBqUXVlcnkudHlwZSgga2V5ICkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblx0XHRmb3IgKCBpIGluIGtleSApIHtcblx0XHRcdGpRdWVyeS5hY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5W2ldLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7XG5cdFx0fVxuXG5cdC8vIFNldHMgb25lIHZhbHVlXG5cdH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblxuXHRcdGlmICggIWpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmF3ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGJ1bGsgKSB7XG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbiggZWxlbXNbaV0sIGtleSwgcmF3ID8gdmFsdWUgOiB2YWx1ZS5jYWxsKCBlbGVtc1tpXSwgaSwgZm4oIGVsZW1zW2ldLCBrZXkgKSApICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNoYWluYWJsZSA/XG5cdFx0ZWxlbXMgOlxuXG5cdFx0Ly8gR2V0c1xuXHRcdGJ1bGsgP1xuXHRcdFx0Zm4uY2FsbCggZWxlbXMgKSA6XG5cdFx0XHRsZW4gPyBmbiggZWxlbXNbMF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIG9iamVjdCBjYW4gaGF2ZSBkYXRhXG4gKi9cbmpRdWVyeS5hY2NlcHREYXRhID0gZnVuY3Rpb24oIG93bmVyICkge1xuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0LyoganNoaW50IC1XMDE4ICovXG5cdHJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIubm9kZVR5cGUgKTtcbn07XG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LFxuXHQvLyBPbGQgV2ViS2l0IGRvZXMgbm90IGhhdmUgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zL2ZyZWV6ZSBtZXRob2QsXG5cdC8vIHJldHVybiBuZXcgZW1wdHkgb2JqZWN0IGluc3RlYWQgd2l0aCBubyBbW3NldF1dIGFjY2Vzc29yXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcy5jYWNoZSA9IHt9LCAwLCB7XG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdH0pO1xuXG5cdHRoaXMuZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvICsgRGF0YS51aWQrKztcbn1cblxuRGF0YS51aWQgPSAxO1xuRGF0YS5hY2NlcHRzID0galF1ZXJ5LmFjY2VwdERhdGE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXHRrZXk6IGZ1bmN0aW9uKCBvd25lciApIHtcblx0XHQvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2Vycyxcblx0XHQvLyBidXQgd2Ugc2hvdWxkIG5vdCwgc2VlICM4MzM1LlxuXHRcdC8vIEFsd2F5cyByZXR1cm4gdGhlIGtleSBmb3IgYSBmcm96ZW4gb2JqZWN0LlxuXHRcdGlmICggIURhdGEuYWNjZXB0cyggb3duZXIgKSApIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHZhciBkZXNjcmlwdG9yID0ge30sXG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGUga2V5XG5cdFx0XHR1bmxvY2sgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF1bmxvY2sgKSB7XG5cdFx0XHR1bmxvY2sgPSBEYXRhLnVpZCsrO1xuXG5cdFx0XHQvLyBTZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJsZSwgbm9uLXdyaXRhYmxlIHByb3BlcnR5XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRkZXNjcmlwdG9yWyB0aGlzLmV4cGFuZG8gXSA9IHsgdmFsdWU6IHVubG9jayB9O1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyggb3duZXIsIGRlc2NyaXB0b3IgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0XG5cdFx0XHQvLyBGYWxsYmFjayB0byBhIGxlc3Mgc2VjdXJlIGRlZmluaXRpb25cblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRkZXNjcmlwdG9yWyB0aGlzLmV4cGFuZG8gXSA9IHVubG9jaztcblx0XHRcdFx0alF1ZXJ5LmV4dGVuZCggb3duZXIsIGRlc2NyaXB0b3IgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBFbnN1cmUgdGhlIGNhY2hlIG9iamVjdFxuXHRcdGlmICggIXRoaXMuY2FjaGVbIHVubG9jayBdICkge1xuXHRcdFx0dGhpcy5jYWNoZVsgdW5sb2NrIF0gPSB7fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdW5sb2NrO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHQvLyBUaGVyZSBtYXkgYmUgYW4gdW5sb2NrIGFzc2lnbmVkIHRvIHRoaXMgbm9kZSxcblx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciB0aGlzIFwib3duZXJcIiwgY3JlYXRlIG9uZSBpbmxpbmVcblx0XHRcdC8vIGFuZCBzZXQgdGhlIHVubG9jayBhcyB0aG91Z2ggYW4gb3duZXIgZW50cnkgaGFkIGFsd2F5cyBleGlzdGVkXG5cdFx0XHR1bmxvY2sgPSB0aGlzLmtleSggb3duZXIgKSxcblx0XHRcdGNhY2hlID0gdGhpcy5jYWNoZVsgdW5sb2NrIF07XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGNhY2hlWyBkYXRhIF0gPSB2YWx1ZTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzXG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEZyZXNoIGFzc2lnbm1lbnRzIGJ5IG9iamVjdCBhcmUgc2hhbGxvdyBjb3BpZWRcblx0XHRcdGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5leHRlbmQoIHRoaXMuY2FjaGVbIHVubG9jayBdLCBkYXRhICk7XG5cdFx0XHQvLyBPdGhlcndpc2UsIGNvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKCBwcm9wIGluIGRhdGEgKSB7XG5cdFx0XHRcdFx0Y2FjaGVbIHByb3AgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2FjaGU7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0Ly8gRWl0aGVyIGEgdmFsaWQgY2FjaGUgaXMgZm91bmQsIG9yIHdpbGwgYmUgY3JlYXRlZC5cblx0XHQvLyBOZXcgY2FjaGVzIHdpbGwgYmUgY3JlYXRlZCBhbmQgdGhlIHVubG9jayByZXR1cm5lZCxcblx0XHQvLyBhbGxvd2luZyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBuZXdseSBjcmVhdGVkXG5cdFx0Ly8gZW1wdHkgZGF0YSBvYmplY3QuIEEgdmFsaWQgb3duZXIgb2JqZWN0IG11c3QgYmUgcHJvdmlkZWQuXG5cdFx0dmFyIGNhY2hlID0gdGhpcy5jYWNoZVsgdGhpcy5rZXkoIG93bmVyICkgXTtcblxuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRjYWNoZSA6IGNhY2hlWyBrZXkgXTtcblx0fSxcblx0YWNjZXNzOiBmdW5jdGlvbiggb3duZXIsIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIHN0b3JlZDtcblx0XHQvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIE5vIGtleSB3YXMgc3BlY2lmaWVkXG5cdFx0Ly8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkXG5cdFx0Ly9cblx0XHQvLyBUYWtlIHRoZSBcInJlYWRcIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmVcblx0XHQvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0XG5cdFx0Ly8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleVxuXHRcdC8vXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoKGtleSAmJiB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSApIHtcblxuXHRcdFx0c3RvcmVkID0gdGhpcy5nZXQoIG93bmVyLCBrZXkgKTtcblxuXHRcdFx0cmV0dXJuIHN0b3JlZCAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0c3RvcmVkIDogdGhpcy5nZXQoIG93bmVyLCBqUXVlcnkuY2FtZWxDYXNlKGtleSkgKTtcblx0XHR9XG5cblx0XHQvLyBbKl1XaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5nLCBvciBib3RoIGEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vIGFyZSBzcGVjaWZpZWQsIHNldCBvciBleHRlbmQgKGV4aXN0aW5nIG9iamVjdHMpIHdpdGggZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBBbiBvYmplY3Qgb2YgcHJvcGVydGllc1xuXHRcdC8vICAgMi4gQSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly9cblx0XHR0aGlzLnNldCggb3duZXIsIGtleSwgdmFsdWUgKTtcblxuXHRcdC8vIFNpbmNlIHRoZSBcInNldFwiIHBhdGggY2FuIGhhdmUgdHdvIHBvc3NpYmxlIGVudHJ5IHBvaW50c1xuXHRcdC8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdhcyB0YWtlblsqXVxuXHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBrZXk7XG5cdH0sXG5cdHJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGNhbWVsLFxuXHRcdFx0dW5sb2NrID0gdGhpcy5rZXkoIG93bmVyICksXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGVbIHVubG9jayBdO1xuXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHRoaXMuY2FjaGVbIHVubG9jayBdID0ge307XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggalF1ZXJ5LmlzQXJyYXkoIGtleSApICkge1xuXHRcdFx0XHQvLyBJZiBcIm5hbWVcIiBpcyBhbiBhcnJheSBvZiBrZXlzLi4uXG5cdFx0XHRcdC8vIFdoZW4gZGF0YSBpcyBpbml0aWFsbHkgY3JlYXRlZCwgdmlhIChcImtleVwiLCBcInZhbFwiKSBzaWduYXR1cmUsXG5cdFx0XHRcdC8vIGtleXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gY2FtZWxDYXNlLlxuXHRcdFx0XHQvLyBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCBfaG93XyBhIGtleSB3YXMgYWRkZWQsIHJlbW92ZVxuXHRcdFx0XHQvLyBib3RoIHBsYWluIGtleSBhbmQgY2FtZWxDYXNlIGtleS4gIzEyNzg2XG5cdFx0XHRcdC8vIFRoaXMgd2lsbCBvbmx5IHBlbmFsaXplIHRoZSBhcnJheSBhcmd1bWVudCBwYXRoLlxuXHRcdFx0XHRuYW1lID0ga2V5LmNvbmNhdCgga2V5Lm1hcCggalF1ZXJ5LmNhbWVsQ2FzZSApICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjYW1lbCA9IGpRdWVyeS5jYW1lbENhc2UoIGtleSApO1xuXHRcdFx0XHQvLyBUcnkgdGhlIHN0cmluZyBhcyBhIGtleSBiZWZvcmUgYW55IG1hbmlwdWxhdGlvblxuXHRcdFx0XHRpZiAoIGtleSBpbiBjYWNoZSApIHtcblx0XHRcdFx0XHRuYW1lID0gWyBrZXksIGNhbWVsIF07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LlxuXHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdFx0bmFtZSA9IGNhbWVsO1xuXHRcdFx0XHRcdG5hbWUgPSBuYW1lIGluIGNhY2hlID9cblx0XHRcdFx0XHRcdFsgbmFtZSBdIDogKCBuYW1lLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGkgPSBuYW1lLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRkZWxldGUgY2FjaGVbIG5hbWVbIGkgXSBdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0aGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkge1xuXHRcdHJldHVybiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoXG5cdFx0XHR0aGlzLmNhY2hlWyBvd25lclsgdGhpcy5leHBhbmRvIF0gXSB8fCB7fVxuXHRcdCk7XG5cdH0sXG5cdGRpc2NhcmQ6IGZ1bmN0aW9uKCBvd25lciApIHtcblx0XHRpZiAoIG93bmVyWyB0aGlzLmV4cGFuZG8gXSApIHtcblx0XHRcdGRlbGV0ZSB0aGlzLmNhY2hlWyBvd25lclsgdGhpcy5leHBhbmRvIF0gXTtcblx0XHR9XG5cdH1cbn07XG52YXIgZGF0YV9wcml2ID0gbmV3IERhdGEoKTtcblxudmFyIGRhdGFfdXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvKFtBLVpdKS9nO1xuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJDFcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGRhdGEgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6XG5cdFx0XHRcdFx0ZGF0YSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOlxuXHRcdFx0XHRcdGRhdGEgPT09IFwibnVsbFwiID8gbnVsbCA6XG5cdFx0XHRcdFx0Ly8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmdcblx0XHRcdFx0XHQrZGF0YSArIFwiXCIgPT09IGRhdGEgPyArZGF0YSA6XG5cdFx0XHRcdFx0cmJyYWNlLnRlc3QoIGRhdGEgKSA/IGpRdWVyeS5wYXJzZUpTT04oIGRhdGEgKSA6XG5cdFx0XHRcdFx0ZGF0YTtcblx0XHRcdH0gY2F0Y2goIGUgKSB7fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXJcblx0XHRcdGRhdGFfdXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCh7XG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkYXRhX3VzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFfcHJpdi5oYXNEYXRhKCBlbGVtICk7XG5cdH0sXG5cblx0ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFfdXNlci5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhX3VzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YV9wcml2IG1ldGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLlxuXHRfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFfcHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YV9wcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59KTtcblxualF1ZXJ5LmZuLmV4dGVuZCh7XG5cdGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBpLCBuYW1lLCBkYXRhLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdGF0dHJzID0gZWxlbSAmJiBlbGVtLmF0dHJpYnV0ZXM7XG5cblx0XHQvLyBHZXRzIGFsbCB2YWx1ZXNcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB0aGlzLmxlbmd0aCApIHtcblx0XHRcdFx0ZGF0YSA9IGRhdGFfdXNlci5nZXQoIGVsZW0gKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWRhdGFfcHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRTExK1xuXHRcdFx0XHRcdFx0Ly8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICgjMTQ4OTQpXG5cdFx0XHRcdFx0XHRpZiAoIGF0dHJzWyBpIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG5hbWUgPSBhdHRyc1sgaSBdLm5hbWU7XG5cdFx0XHRcdFx0XHRcdGlmICggbmFtZS5pbmRleE9mKCBcImRhdGEtXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZS5zbGljZSg1KSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhX3ByaXYuc2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0cyBtdWx0aXBsZSB2YWx1ZXNcblx0XHRpZiAoIHR5cGVvZiBrZXkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhX3VzZXIuc2V0KCB0aGlzLCBrZXkgKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhLFxuXHRcdFx0XHRjYW1lbEtleSA9IGpRdWVyeS5jYW1lbENhc2UoIGtleSApO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGVcblx0XHRcdFx0Ly8gd2l0aCB0aGUga2V5IGFzLWlzXG5cdFx0XHRcdGRhdGEgPSBkYXRhX3VzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlXG5cdFx0XHRcdC8vIHdpdGggdGhlIGtleSBjYW1lbGl6ZWRcblx0XHRcdFx0ZGF0YSA9IGRhdGFfdXNlci5nZXQoIGVsZW0sIGNhbWVsS2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBcImRpc2NvdmVyXCIgdGhlIGRhdGEgaW5cblx0XHRcdFx0Ly8gSFRNTDUgY3VzdG9tIGRhdGEtKiBhdHRyc1xuXHRcdFx0XHRkYXRhID0gZGF0YUF0dHIoIGVsZW0sIGNhbWVsS2V5LCB1bmRlZmluZWQgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IHRoZSBkYXRhLi4uXG5cdFx0XHR0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIEZpcnN0LCBhdHRlbXB0IHRvIHN0b3JlIGEgY29weSBvciByZWZlcmVuY2Ugb2YgYW55XG5cdFx0XHRcdC8vIGRhdGEgdGhhdCBtaWdodCd2ZSBiZWVuIHN0b3JlIHdpdGggYSBjYW1lbENhc2VkIGtleS5cblx0XHRcdFx0dmFyIGRhdGEgPSBkYXRhX3VzZXIuZ2V0KCB0aGlzLCBjYW1lbEtleSApO1xuXG5cdFx0XHRcdC8vIEZvciBIVE1MNSBkYXRhLSogYXR0cmlidXRlIGludGVyb3AsIHdlIGhhdmUgdG9cblx0XHRcdFx0Ly8gc3RvcmUgcHJvcGVydHkgbmFtZXMgd2l0aCBkYXNoZXMgaW4gYSBjYW1lbENhc2UgZm9ybS5cblx0XHRcdFx0Ly8gVGhpcyBtaWdodCBub3QgYXBwbHkgdG8gYWxsIHByb3BlcnRpZXMuLi4qXG5cdFx0XHRcdGRhdGFfdXNlci5zZXQoIHRoaXMsIGNhbWVsS2V5LCB2YWx1ZSApO1xuXG5cdFx0XHRcdC8vICouLi4gSW4gdGhlIGNhc2Ugb2YgcHJvcGVydGllcyB0aGF0IG1pZ2h0IF9hY3R1YWxseV9cblx0XHRcdFx0Ly8gaGF2ZSBkYXNoZXMsIHdlIG5lZWQgdG8gYWxzbyBzdG9yZSBhIGNvcHkgb2YgdGhhdFxuXHRcdFx0XHQvLyB1bmNoYW5nZWQgcHJvcGVydHkuXG5cdFx0XHRcdGlmICgga2V5LmluZGV4T2YoXCItXCIpICE9PSAtMSAmJiBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0ZGF0YV91c2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhX3VzZXIucmVtb3ZlKCB0aGlzLCBrZXkgKTtcblx0XHR9KTtcblx0fVxufSk7XG5cblxualF1ZXJ5LmV4dGVuZCh7XG5cdHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgcXVldWU7XG5cblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHR0eXBlID0gKCB0eXBlIHx8IFwiZnhcIiApICsgXCJxdWV1ZVwiO1xuXHRcdFx0cXVldWUgPSBkYXRhX3ByaXYuZ2V0KCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdC8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXBcblx0XHRcdGlmICggZGF0YSApIHtcblx0XHRcdFx0aWYgKCAhcXVldWUgfHwgalF1ZXJ5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFfcHJpdi5hY2Nlc3MoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoZGF0YSkgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBkYXRhICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBxdWV1ZSB8fCBbXTtcblx0XHR9XG5cdH0sXG5cblx0ZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksXG5cdFx0XHRzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCxcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKSxcblx0XHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCB0eXBlICksXG5cdFx0XHRuZXh0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7XG5cdFx0XHR9O1xuXG5cdFx0Ly8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbFxuXHRcdGlmICggZm4gPT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0c3RhcnRMZW5ndGgtLTtcblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXG5cdFx0XHQvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nXG5cdFx0XHQvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiApIHtcblx0XHRcdFx0cXVldWUudW5zaGlmdCggXCJpbnByb2dyZXNzXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvblxuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApO1xuXHRcdH1cblxuXHRcdGlmICggIXN0YXJ0TGVuZ3RoICYmIGhvb2tzICkge1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBOb3QgcHVibGljIC0gZ2VuZXJhdGUgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJuIHRoZSBjdXJyZW50IG9uZVxuXHRfcXVldWVIb29rczogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dmFyIGtleSA9IHR5cGUgKyBcInF1ZXVlSG9va3NcIjtcblx0XHRyZXR1cm4gZGF0YV9wcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YV9wcml2LmFjY2VzcyggZWxlbSwga2V5LCB7XG5cdFx0XHRlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLmFkZChmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YV9wcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgXCJxdWV1ZVwiLCBrZXkgXSApO1xuXHRcdFx0fSlcblx0XHR9KTtcblx0fVxufSk7XG5cbmpRdWVyeS5mbi5leHRlbmQoe1xuXHRxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHNldHRlciA9IDI7XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZGF0YSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gXCJmeFwiO1xuXHRcdFx0c2V0dGVyLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1swXSwgdHlwZSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcyA6XG5cdFx0XHR0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlXG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICYmIHF1ZXVlWzBdICE9PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fSxcblx0ZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSk7XG5cdH0sXG5cdGNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0fSxcblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhX3ByaXYuZ2V0KCBlbGVtZW50c1sgaSBdLCB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgKTtcblx0XHRcdGlmICggdG1wICYmIHRtcC5lbXB0eSApIHtcblx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0dG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXNvbHZlKCk7XG5cdFx0cmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApO1xuXHR9XG59KTtcbnZhciBwbnVtID0gKC9bKy1dPyg/OlxcZCpcXC58KVxcZCsoPzpbZUVdWystXT9cXGQrfCkvKS5zb3VyY2U7XG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGlzSGlkZGVuID0gZnVuY3Rpb24oIGVsZW0sIGVsICkge1xuXHRcdC8vIGlzSGlkZGVuIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGpRdWVyeSNmaWx0ZXIgZnVuY3Rpb247XG5cdFx0Ly8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ZWxlbSA9IGVsIHx8IGVsZW07XG5cdFx0cmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgPT09IFwibm9uZVwiIHx8ICFqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHR9O1xuXG52YXIgcmNoZWNrYWJsZVR5cGUgPSAoL14oPzpjaGVja2JveHxyYWRpbykkL2kpO1xuXG5cblxuKGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogU2FmYXJpPD01LjFcblx0Ly8gQ2hlY2sgc3RhdGUgbG9zdCBpZiB0aGUgbmFtZSBpcyBzZXQgKCMxMTIxNylcblx0Ly8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKVxuXHQvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKCMxNDkwMSlcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJyYWRpb1wiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJjaGVja2VkXCIsIFwiY2hlY2tlZFwiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwidFwiICk7XG5cblx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXG5cdC8vIFN1cHBvcnQ6IFNhZmFyaTw9NS4xLCBBbmRyb2lkPDQuMlxuXHQvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHNcblx0c3VwcG9ydC5jaGVja0Nsb25lID0gZGl2LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkO1xuXG5cdC8vIFN1cHBvcnQ6IElFPD0xMStcblx0Ly8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWRcblx0ZGl2LmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiO1xuXHRzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtcbn0pKCk7XG52YXIgc3RydW5kZWZpbmVkID0gdHlwZW9mIHVuZGVmaW5lZDtcblxuXG5cbnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXMgPSBcIm9uZm9jdXNpblwiIGluIHdpbmRvdztcblxuXG52YXJcblx0cmtleUV2ZW50ID0gL15rZXkvLFxuXHRybW91c2VFdmVudCA9IC9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudSl8Y2xpY2svLFxuXHRyZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcblx0cnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkkLztcblxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNhZmVBY3RpdmVFbGVtZW50KCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXHR9IGNhdGNoICggZXJyICkgeyB9XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YV9wcml2LmdldCggZWxlbSApO1xuXG5cdFx0Ly8gRG9uJ3QgYXR0YWNoIGV2ZW50cyB0byBub0RhdGEgb3IgdGV4dC9jb21tZW50IG5vZGVzIChidXQgYWxsb3cgcGxhaW4gb2JqZWN0cylcblx0XHRpZiAoICFlbGVtRGF0YSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXJcblx0XHRpZiAoIGhhbmRsZXIuaGFuZGxlciApIHtcblx0XHRcdGhhbmRsZU9iakluID0gaGFuZGxlcjtcblx0XHRcdGhhbmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVyO1xuXHRcdFx0c2VsZWN0b3IgPSBoYW5kbGVPYmpJbi5zZWxlY3Rvcjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IHt9O1xuXHRcdH1cblx0XHRpZiAoICEoZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUpICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblx0XHRcdFx0Ly8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmRcblx0XHRcdFx0Ly8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZFxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gc3RydW5kZWZpbmVkICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1t0XSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWzFdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWzJdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoe1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRvcmlnVHlwZTogb3JpZ1R5cGUsXG5cdFx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRcdGhhbmRsZXI6IGhhbmRsZXIsXG5cdFx0XHRcdGd1aWQ6IGhhbmRsZXIuZ3VpZCxcblx0XHRcdFx0c2VsZWN0b3I6IHNlbGVjdG9yLFxuXHRcdFx0XHRuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLFxuXHRcdFx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbihcIi5cIilcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XG5cblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XG5cdFx0XHRpZiAoICEoaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSkgKSB7XG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG5cblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHwgc3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUsIGZhbHNlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG5cdFx0fVxuXG5cdH0sXG5cblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG5cblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YV9wcml2Lmhhc0RhdGEoIGVsZW0gKSAmJiBkYXRhX3ByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cykgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1t0XSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWzFdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWzJdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTtcblx0XHRcdHRtcCA9IHRtcFsyXSAmJiBuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKFwiXFxcXC4oPzouKlxcXFwufClcIikgKyBcIihcXFxcLnwkKVwiICk7XG5cblx0XHRcdC8vIFJlbW92ZSBtYXRjaGluZyBldmVudHNcblx0XHRcdG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTtcblxuXHRcdFx0XHRpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmXG5cdFx0XHRcdFx0KCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiZcblx0XHRcdFx0XHQoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmXG5cdFx0XHRcdFx0KCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xuXHRcdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaiwgMSApO1xuXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XG5cdFx0XHRcdFx0XHRzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxuXHRcdFx0Ly8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8IHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgZXZlbnRzWyB0eXBlIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWRcblx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHtcblx0XHRcdGRlbGV0ZSBlbGVtRGF0YS5oYW5kbGU7XG5cdFx0XHRkYXRhX3ByaXYucmVtb3ZlKCBlbGVtLCBcImV2ZW50c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkge1xuXG5cdFx0dmFyIGksIGN1ciwgdG1wLCBidWJibGVUeXBlLCBvbnR5cGUsIGhhbmRsZSwgc3BlY2lhbCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdChcIi5cIikgOiBbXTtcblxuXHRcdGN1ciA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoXCIuXCIpID49IDAgKSB7XG5cdFx0XHQvLyBOYW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGluIGhhbmRsZSgpXG5cdFx0XHRuYW1lc3BhY2VzID0gdHlwZS5zcGxpdChcIi5cIik7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZihcIjpcIikgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbihcIi5cIik7XG5cdFx0ZXZlbnQubmFtZXNwYWNlX3JlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oXCJcXFxcLig/Oi4qXFxcXC58KVwiKSArIFwiKFxcXFwufCQpXCIgKSA6XG5cdFx0XHRudWxsO1xuXG5cdFx0Ly8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkXG5cdFx0ZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkO1xuXHRcdGlmICggIWV2ZW50LnRhcmdldCApIHtcblx0XHRcdGV2ZW50LnRhcmdldCA9IGVsZW07XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdFxuXHRcdGRhdGEgPSBkYXRhID09IG51bGwgP1xuXHRcdFx0WyBldmVudCBdIDpcblx0XHRcdGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEsIFsgZXZlbnQgXSApO1xuXG5cdFx0Ly8gQWxsb3cgc3BlY2lhbCBldmVudHMgdG8gZHJhdyBvdXRzaWRlIHRoZSBsaW5lc1xuXHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKCM5OTUxKVxuXHRcdC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAoIzk3MjQpXG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09IChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQpICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aFxuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKGN1ciA9IGV2ZW50UGF0aFtpKytdKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblxuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YV9wcml2LmdldCggY3VyLCBcImV2ZW50c1wiICkgfHwge30gKVsgZXZlbnQudHlwZSBdICYmIGRhdGFfcHJpdi5nZXQoIGN1ciwgXCJoYW5kbGVcIiApO1xuXHRcdFx0aWYgKCBoYW5kbGUgKSB7XG5cdFx0XHRcdGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5hdGl2ZSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTtcblx0XHRcdGlmICggaGFuZGxlICYmIGhhbmRsZS5hcHBseSAmJiBqUXVlcnkuYWNjZXB0RGF0YSggY3VyICkgKSB7XG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xuXG5cdFx0Ly8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vd1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cblx0XHRcdGlmICggKCFzcGVjaWFsLl9kZWZhdWx0IHx8IHNwZWNpYWwuX2RlZmF1bHQuYXBwbHkoIGV2ZW50UGF0aC5wb3AoKSwgZGF0YSApID09PSBmYWxzZSkgJiZcblx0XHRcdFx0alF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHtcblxuXHRcdFx0XHQvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICgjNjE3MClcblx0XHRcdFx0aWYgKCBvbnR5cGUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2Rcblx0XHRcdFx0XHR0bXAgPSBlbGVtWyBvbnR5cGUgXTtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XG5cdFx0XHRcdFx0ZWxlbVsgdHlwZSBdKCk7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSB0bXA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHRkaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0ZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApO1xuXG5cdFx0dmFyIGksIGosIHJldCwgbWF0Y2hlZCwgaGFuZGxlT2JqLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksXG5cdFx0XHRoYW5kbGVycyA9ICggZGF0YV9wcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWzBdID0gZXZlbnQ7XG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAobWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0pICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTtcblxuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoIChoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSkgJiYgIWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cblx0XHRcdFx0Ly8gVHJpZ2dlcmVkIGV2ZW50IG11c3QgZWl0aGVyIDEpIGhhdmUgbm8gbmFtZXNwYWNlLCBvciAyKSBoYXZlIG5hbWVzcGFjZShzKVxuXHRcdFx0XHQvLyBhIHN1YnNldCBvciBlcXVhbCB0byB0aG9zZSBpbiB0aGUgYm91bmQgZXZlbnQgKGJvdGggY2FuIGhhdmUgbm8gbmFtZXNwYWNlKS5cblx0XHRcdFx0aWYgKCAhZXZlbnQubmFtZXNwYWNlX3JlIHx8IGV2ZW50Lm5hbWVzcGFjZV9yZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XG5cblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xuXG5cdFx0XHRcdFx0cmV0ID0gKCAoalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9KS5oYW5kbGUgfHwgaGFuZGxlT2JqLmhhbmRsZXIgKVxuXHRcdFx0XHRcdFx0XHQuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKGV2ZW50LnJlc3VsdCA9IHJldCkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlXG5cdFx0aWYgKCBzcGVjaWFsLnBvc3REaXNwYXRjaCApIHtcblx0XHRcdHNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHRoYW5kbGVyczogZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHtcblx0XHR2YXIgaSwgbWF0Y2hlcywgc2VsLCBoYW5kbGVPYmosXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICgjMTMxODApXG5cdFx0Ly8gQXZvaWQgbm9uLWxlZnQtY2xpY2sgYnViYmxpbmcgaW4gRmlyZWZveCAoIzM4NjEpXG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50ICYmIGN1ci5ub2RlVHlwZSAmJiAoIWV2ZW50LmJ1dHRvbiB8fCBldmVudC50eXBlICE9PSBcImNsaWNrXCIpICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NClcblx0XHRcdFx0aWYgKCBjdXIuZGlzYWJsZWQgIT09IHRydWUgfHwgZXZlbnQudHlwZSAhPT0gXCJjbGlja1wiICkge1xuXHRcdFx0XHRcdG1hdGNoZXMgPSBbXTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID49IDAgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZXMubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVzIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRoYW5kbGVyUXVldWUucHVzaCh7IGVsZW06IHRoaXMsIGhhbmRsZXJzOiBoYW5kbGVycy5zbGljZSggZGVsZWdhdGVDb3VudCApIH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0Ly8gSW5jbHVkZXMgc29tZSBldmVudCBwcm9wcyBzaGFyZWQgYnkgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnRcblx0cHJvcHM6IFwiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoXCIuc3BsaXQoXCIgXCIpLFxuXG5cdGZpeEhvb2tzOiB7fSxcblxuXHRrZXlIb29rczoge1xuXHRcdHByb3BzOiBcImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGVcIi5zcGxpdChcIiBcIiksXG5cdFx0ZmlsdGVyOiBmdW5jdGlvbiggZXZlbnQsIG9yaWdpbmFsICkge1xuXG5cdFx0XHQvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHNcblx0XHRcdGlmICggZXZlbnQud2hpY2ggPT0gbnVsbCApIHtcblx0XHRcdFx0ZXZlbnQud2hpY2ggPSBvcmlnaW5hbC5jaGFyQ29kZSAhPSBudWxsID8gb3JpZ2luYWwuY2hhckNvZGUgOiBvcmlnaW5hbC5rZXlDb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXZlbnQ7XG5cdFx0fVxuXHR9LFxuXG5cdG1vdXNlSG9va3M6IHtcblx0XHRwcm9wczogXCJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnRcIi5zcGxpdChcIiBcIiksXG5cdFx0ZmlsdGVyOiBmdW5jdGlvbiggZXZlbnQsIG9yaWdpbmFsICkge1xuXHRcdFx0dmFyIGV2ZW50RG9jLCBkb2MsIGJvZHksXG5cdFx0XHRcdGJ1dHRvbiA9IG9yaWdpbmFsLmJ1dHRvbjtcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHBhZ2VYL1kgaWYgbWlzc2luZyBhbmQgY2xpZW50WC9ZIGF2YWlsYWJsZVxuXHRcdFx0aWYgKCBldmVudC5wYWdlWCA9PSBudWxsICYmIG9yaWdpbmFsLmNsaWVudFggIT0gbnVsbCApIHtcblx0XHRcdFx0ZXZlbnREb2MgPSBldmVudC50YXJnZXQub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDtcblx0XHRcdFx0ZG9jID0gZXZlbnREb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0XHRib2R5ID0gZXZlbnREb2MuYm9keTtcblxuXHRcdFx0XHRldmVudC5wYWdlWCA9IG9yaWdpbmFsLmNsaWVudFggKyAoIGRvYyAmJiBkb2Muc2Nyb2xsTGVmdCB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsTGVmdCB8fCAwICkgLSAoIGRvYyAmJiBkb2MuY2xpZW50TGVmdCB8fCBib2R5ICYmIGJvZHkuY2xpZW50TGVmdCB8fCAwICk7XG5cdFx0XHRcdGV2ZW50LnBhZ2VZID0gb3JpZ2luYWwuY2xpZW50WSArICggZG9jICYmIGRvYy5zY3JvbGxUb3AgIHx8IGJvZHkgJiYgYm9keS5zY3JvbGxUb3AgIHx8IDAgKSAtICggZG9jICYmIGRvYy5jbGllbnRUb3AgIHx8IGJvZHkgJiYgYm9keS5jbGllbnRUb3AgIHx8IDAgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHdoaWNoIGZvciBjbGljazogMSA9PT0gbGVmdDsgMiA9PT0gbWlkZGxlOyAzID09PSByaWdodFxuXHRcdFx0Ly8gTm90ZTogYnV0dG9uIGlzIG5vdCBub3JtYWxpemVkLCBzbyBkb24ndCB1c2UgaXRcblx0XHRcdGlmICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRldmVudC53aGljaCA9ICggYnV0dG9uICYgMSA/IDEgOiAoIGJ1dHRvbiAmIDIgPyAzIDogKCBidXR0b24gJiA0ID8gMiA6IDAgKSApICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBldmVudDtcblx0XHR9XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0aWYgKCBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSApIHtcblx0XHRcdHJldHVybiBldmVudDtcblx0XHR9XG5cblx0XHQvLyBDcmVhdGUgYSB3cml0YWJsZSBjb3B5IG9mIHRoZSBldmVudCBvYmplY3QgYW5kIG5vcm1hbGl6ZSBzb21lIHByb3BlcnRpZXNcblx0XHR2YXIgaSwgcHJvcCwgY29weSxcblx0XHRcdHR5cGUgPSBldmVudC50eXBlLFxuXHRcdFx0b3JpZ2luYWxFdmVudCA9IGV2ZW50LFxuXHRcdFx0Zml4SG9vayA9IHRoaXMuZml4SG9va3NbIHR5cGUgXTtcblxuXHRcdGlmICggIWZpeEhvb2sgKSB7XG5cdFx0XHR0aGlzLmZpeEhvb2tzWyB0eXBlIF0gPSBmaXhIb29rID1cblx0XHRcdFx0cm1vdXNlRXZlbnQudGVzdCggdHlwZSApID8gdGhpcy5tb3VzZUhvb2tzIDpcblx0XHRcdFx0cmtleUV2ZW50LnRlc3QoIHR5cGUgKSA/IHRoaXMua2V5SG9va3MgOlxuXHRcdFx0XHR7fTtcblx0XHR9XG5cdFx0Y29weSA9IGZpeEhvb2sucHJvcHMgPyB0aGlzLnByb3BzLmNvbmNhdCggZml4SG9vay5wcm9wcyApIDogdGhpcy5wcm9wcztcblxuXHRcdGV2ZW50ID0gbmV3IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVudCApO1xuXG5cdFx0aSA9IGNvcHkubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0cHJvcCA9IGNvcHlbIGkgXTtcblx0XHRcdGV2ZW50WyBwcm9wIF0gPSBvcmlnaW5hbEV2ZW50WyBwcm9wIF07XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogQ29yZG92YSAyLjUgKFdlYktpdCkgKCMxMzI1NSlcblx0XHQvLyBBbGwgZXZlbnRzIHNob3VsZCBoYXZlIGEgdGFyZ2V0OyBDb3Jkb3ZhIGRldmljZXJlYWR5IGRvZXNuJ3Rcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBkb2N1bWVudDtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgNi4wKywgQ2hyb21lPDI4XG5cdFx0Ly8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1MDQsICMxMzE0Mylcblx0XHRpZiAoIGV2ZW50LnRhcmdldC5ub2RlVHlwZSA9PT0gMyApIHtcblx0XHRcdGV2ZW50LnRhcmdldCA9IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmaXhIb29rLmZpbHRlciA/IGZpeEhvb2suZmlsdGVyKCBldmVudCwgb3JpZ2luYWxFdmVudCApIDogZXZlbnQ7XG5cdH0sXG5cblx0c3BlY2lhbDoge1xuXHRcdGxvYWQ6IHtcblx0XHRcdC8vIFByZXZlbnQgdHJpZ2dlcmVkIGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gd2luZG93LmxvYWRcblx0XHRcdG5vQnViYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRmb2N1czoge1xuXHRcdFx0Ly8gRmlyZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCB0aGlzICE9PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmIHRoaXMuZm9jdXMgKSB7XG5cdFx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlbGVnYXRlVHlwZTogXCJmb2N1c2luXCJcblx0XHR9LFxuXHRcdGJsdXI6IHtcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIHRoaXMgPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgJiYgdGhpcy5ibHVyICkge1xuXHRcdFx0XHRcdHRoaXMuYmx1cigpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlbGVnYXRlVHlwZTogXCJmb2N1c291dFwiXG5cdFx0fSxcblx0XHRjbGljazoge1xuXHRcdFx0Ly8gRm9yIGNoZWNrYm94LCBmaXJlIG5hdGl2ZSBldmVudCBzbyBjaGVja2VkIHN0YXRlIHdpbGwgYmUgcmlnaHRcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIHRoaXMudHlwZSA9PT0gXCJjaGVja2JveFwiICYmIHRoaXMuY2xpY2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCBcImlucHV0XCIgKSApIHtcblx0XHRcdFx0XHR0aGlzLmNsaWNrKCk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgZG9uJ3QgZmlyZSBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkubm9kZU5hbWUoIGV2ZW50LnRhcmdldCwgXCJhXCIgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0YmVmb3JldW5sb2FkOiB7XG5cdFx0XHRwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDIwK1xuXHRcdFx0XHQvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuXG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQsIGJ1YmJsZSApIHtcblx0XHQvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmUuXG5cdFx0Ly8gRmFrZSBvcmlnaW5hbEV2ZW50IHRvIGF2b2lkIGRvbm9yJ3Mgc3RvcFByb3BhZ2F0aW9uLCBidXQgaWYgdGhlXG5cdFx0Ly8gc2ltdWxhdGVkIGV2ZW50IHByZXZlbnRzIGRlZmF1bHQgdGhlbiB3ZSBkbyB0aGUgc2FtZSBvbiB0aGUgZG9ub3IuXG5cdFx0dmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCgpLFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdGlzU2ltdWxhdGVkOiB0cnVlLFxuXHRcdFx0XHRvcmlnaW5hbEV2ZW50OiB7fVxuXHRcdFx0fVxuXHRcdCk7XG5cdFx0aWYgKCBidWJibGUgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guY2FsbCggZWxlbSwgZSApO1xuXHRcdH1cblx0XHRpZiAoIGUuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcblx0aWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUsIGZhbHNlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcblx0aWYgKCAhKHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQpICkge1xuXHRcdHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBFdmVudCBvYmplY3Rcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XG5cdFx0dGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjO1xuXHRcdHRoaXMudHlwZSA9IHNyYy50eXBlO1xuXG5cdFx0Ly8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWRcblx0XHQvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XG5cdFx0XHRcdHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjBcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRyZXR1cm5UcnVlIDpcblx0XHRcdHJldHVybkZhbHNlO1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IGpRdWVyeS5ub3coKTtcblxuXHQvLyBNYXJrIGl0IGFzIGZpeGVkXG5cdHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlO1xufTtcblxuLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nXG4vLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWxcbmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7XG5cdGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsXG5cdGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiBlLnByZXZlbnREZWZhdWx0ICkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fSxcblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmIGUuc3RvcFByb3BhZ2F0aW9uICkge1xuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiApIHtcblx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxufTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBTdXBwb3J0OiBDaHJvbWUgMTUrXG5qUXVlcnkuZWFjaCh7XG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcblx0cG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7XG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXG5cdFx0YmluZFR5cGU6IGZpeCxcblxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0dGFyZ2V0ID0gdGhpcyxcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcblxuXHRcdFx0Ly8gRm9yIG1vdXNlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LlxuXHRcdFx0Ly8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3dcblx0XHRcdGlmICggIXJlbGF0ZWQgfHwgKHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSkgKSB7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGZpeDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9O1xufSk7XG5cbi8vIFN1cHBvcnQ6IEZpcmVmb3gsIENocm9tZSwgU2FmYXJpXG4vLyBDcmVhdGUgXCJidWJibGluZ1wiIGZvY3VzIGFuZCBibHVyIGV2ZW50c1xuaWYgKCAhc3VwcG9ydC5mb2N1c2luQnViYmxlcyApIHtcblx0alF1ZXJ5LmVhY2goeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXG5cdFx0Ly8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudCB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXRcblx0XHR2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSwgdHJ1ZSApO1xuXHRcdFx0fTtcblxuXHRcdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHtcblx0XHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YV9wcml2LmFjY2VzcyggZG9jLCBmaXggKTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFfcHJpdi5hY2Nlc3MoIGRvYywgZml4LCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHRcdH0sXG5cdFx0XHR0ZWFyZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFfcHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdFx0ZGF0YV9wcml2LnJlbW92ZSggZG9jLCBmaXggKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRhdGFfcHJpdi5hY2Nlc3MoIGRvYywgZml4LCBhdHRhY2hlcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fSk7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoe1xuXG5cdG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgLypJTlRFUk5BTCovIG9uZSApIHtcblx0XHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdFx0Ly8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRsZXJzXG5cdFx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdFx0ZGF0YSA9IGRhdGEgfHwgc2VsZWN0b3I7XG5cdFx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdFx0dGhpcy5vbiggdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKCBkYXRhID09IG51bGwgJiYgZm4gPT0gbnVsbCApIHtcblx0XHRcdC8vICggdHlwZXMsIGZuIClcblx0XHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmICggZm4gPT0gbnVsbCApIHtcblx0XHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRcdGZuID0gZGF0YTtcblx0XHRcdFx0ZGF0YSA9IHNlbGVjdG9yO1xuXHRcdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHRcdH0gZWxzZSBpZiAoICFmbiApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICggb25lID09PSAxICkge1xuXHRcdFx0b3JpZ0ZuID0gZm47XG5cdFx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRcdGpRdWVyeSgpLm9mZiggZXZlbnQgKTtcblx0XHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHR9O1xuXHRcdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRcdGZuLmd1aWQgPSBvcmlnRm4uZ3VpZCB8fCAoIG9yaWdGbi5ndWlkID0galF1ZXJ5Lmd1aWQrKyApO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTtcblx0XHR9KTtcblx0fSxcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuXHR9LFxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xuXHRcdHZhciBoYW5kbGVPYmosIHR5cGU7XG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XG5cdFx0XHRoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7XG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID8gaGFuZGxlT2JqLm9yaWdUeXBlICsgXCIuXCIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDogaGFuZGxlT2JqLm9yaWdUeXBlLFxuXHRcdFx0XHRoYW5kbGVPYmouc2VsZWN0b3IsXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0Ly8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdIClcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICkge1xuXHRcdFx0Ly8gKCB0eXBlcyBbLCBmbl0gKVxuXHRcdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7XG5cdFx0fSk7XG5cdH0sXG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7XG5cdFx0fSk7XG5cdH0sXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgZWxlbSA9IHRoaXNbMF07XG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7XG5cdFx0fVxuXHR9XG59KTtcblxuXG52YXJcblx0cnhodG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1xcdzpdKylbXj5dKilcXC8+L2dpLFxuXHRydGFnTmFtZSA9IC88KFtcXHc6XSspLyxcblx0cmh0bWwgPSAvPHwmIz9cXHcrOy8sXG5cdHJub0lubmVyaHRtbCA9IC88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxuXHRyY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG5cdHJzY3JpcHRUeXBlID0gL14kfFxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSxcblx0cnNjcmlwdFR5cGVNYXNrZWQgPSAvXnRydWVcXC8oLiopLyxcblx0cmNsZWFuU2NyaXB0ID0gL15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nLFxuXG5cdC8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXG5cdHdyYXBNYXAgPSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRTlcblx0XHRvcHRpb246IFsgMSwgXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsIFwiPC9zZWxlY3Q+XCIgXSxcblxuXHRcdHRoZWFkOiBbIDEsIFwiPHRhYmxlPlwiLCBcIjwvdGFibGU+XCIgXSxcblx0XHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHRcdHRyOiBbIDIsIFwiPHRhYmxlPjx0Ym9keT5cIiwgXCI8L3Rib2R5PjwvdGFibGU+XCIgXSxcblx0XHR0ZDogWyAzLCBcIjx0YWJsZT48dGJvZHk+PHRyPlwiLCBcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiIF0sXG5cblx0XHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cblx0fTtcblxuLy8gU3VwcG9ydDogSUU5XG53cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb247XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuLy8gU3VwcG9ydDogMS54IGNvbXBhdGliaWxpdHlcbi8vIE1hbmlwdWxhdGluZyB0YWJsZXMgcmVxdWlyZXMgYSB0Ym9keVxuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRyZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdGpRdWVyeS5ub2RlTmFtZSggY29udGVudC5ub2RlVHlwZSAhPT0gMTEgPyBjb250ZW50IDogY29udGVudC5maXJzdENoaWxkLCBcInRyXCIgKSA/XG5cblx0XHRlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidGJvZHlcIilbMF0gfHxcblx0XHRcdGVsZW0uYXBwZW5kQ2hpbGQoIGVsZW0ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGJvZHlcIikgKSA6XG5cdFx0ZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKGVsZW0uZ2V0QXR0cmlidXRlKFwidHlwZVwiKSAhPT0gbnVsbCkgKyBcIi9cIiArIGVsZW0udHlwZTtcblx0cmV0dXJuIGVsZW07XG59XG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xuXHR2YXIgbWF0Y2ggPSByc2NyaXB0VHlwZU1hc2tlZC5leGVjKCBlbGVtLnR5cGUgKTtcblxuXHRpZiAoIG1hdGNoICkge1xuXHRcdGVsZW0udHlwZSA9IG1hdGNoWyAxIF07XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoXCJ0eXBlXCIpO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YV9wcml2LnNldChcblx0XHRcdGVsZW1zWyBpIF0sIFwiZ2xvYmFsRXZhbFwiLCAhcmVmRWxlbWVudHMgfHwgZGF0YV9wcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcblx0dmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCBwZGF0YUN1ciwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YV9wcml2Lmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHBkYXRhT2xkID0gZGF0YV9wcml2LmFjY2Vzcyggc3JjICk7XG5cdFx0cGRhdGFDdXIgPSBkYXRhX3ByaXYuc2V0KCBkZXN0LCBwZGF0YU9sZCApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGVsZXRlIHBkYXRhQ3VyLmhhbmRsZTtcblx0XHRcdHBkYXRhQ3VyLmV2ZW50cyA9IHt9O1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhX3VzZXIuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0dWRhdGFPbGQgPSBkYXRhX3VzZXIuYWNjZXNzKCBzcmMgKTtcblx0XHR1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApO1xuXG5cdFx0ZGF0YV91c2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHtcblx0dmFyIHJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPyBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKSA6XG5cdFx0XHRjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgPyBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCBcIipcIiApIDpcblx0XHRcdFtdO1xuXG5cdHJldHVybiB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSA/XG5cdFx0alF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICkgOlxuXHRcdHJldDtcbn1cblxuLy8gRml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzXG5mdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkge1xuXHR2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0Ly8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uXG5cdGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiByY2hlY2thYmxlVHlwZS50ZXN0KCBzcmMudHlwZSApICkge1xuXHRcdGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkO1xuXG5cdC8vIEZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zXG5cdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIiApIHtcblx0XHRkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7XG5cdH1cbn1cblxualF1ZXJ5LmV4dGVuZCh7XG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXG5cdFx0Ly8gRml4IElFIGNsb25pbmcgaXNzdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJlxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIFdlIGVzY2hldyBTaXp6bGUgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczogaHR0cDovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRidWlsZEZyYWdtZW50OiBmdW5jdGlvbiggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiApIHtcblx0XHR2YXIgZWxlbSwgdG1wLCB0YWcsIHdyYXAsIGNvbnRhaW5zLCBqLFxuXHRcdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRcdG5vZGVzID0gW10sXG5cdFx0XHRpID0gMCxcblx0XHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRlbGVtID0gZWxlbXNbIGkgXTtcblxuXHRcdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XG5cdFx0XHRcdGlmICggalF1ZXJ5LnR5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBRdFdlYktpdCwgUGhhbnRvbUpTXG5cdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcblxuXHRcdFx0XHQvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGVcblx0XHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcblxuXHRcdFx0XHQvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXNcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudChcImRpdlwiKSApO1xuXG5cdFx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxuXHRcdFx0XHRcdHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBlbGVtLnJlcGxhY2UoIHJ4aHRtbFRhZywgXCI8JDE+PC8kMj5cIiApICsgd3JhcFsgMiBdO1xuXG5cdFx0XHRcdFx0Ly8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50XG5cdFx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0XHRcdHRtcCA9IHRtcC5sYXN0Q2hpbGQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogUXRXZWJLaXQsIFBoYW50b21KU1xuXHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApO1xuXG5cdFx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRcdFx0Ly8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5lZCAoIzEyMzkyKVxuXHRcdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdFx0ZnJhZ21lbnQudGV4dENvbnRlbnQgPSBcIlwiO1xuXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoZWxlbSA9IG5vZGVzWyBpKysgXSkgKSB7XG5cblx0XHRcdC8vICM0MDg3IC0gSWYgb3JpZ2luIGFuZCBkZXN0aW5hdGlvbiBlbGVtZW50cyBhcmUgdGhlIHNhbWUsIGFuZCB0aGlzIGlzXG5cdFx0XHQvLyB0aGF0IGVsZW1lbnQsIGRvIG5vdCBkbyBhbnl0aGluZ1xuXHRcdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApICE9PSAtMSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRhaW5zID0galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcblxuXHRcdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XG5cdFx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdFx0aWYgKCBjb250YWlucyApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcblx0XHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSB0bXBbIGorKyBdKSApIHtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZnJhZ21lbnQ7XG5cdH0sXG5cblx0Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsIGtleSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoZWxlbSA9IGVsZW1zWyBpIF0pICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcblx0XHRcdGlmICggalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHtcblx0XHRcdFx0a2V5ID0gZWxlbVsgZGF0YV9wcml2LmV4cGFuZG8gXTtcblxuXHRcdFx0XHRpZiAoIGtleSAmJiAoZGF0YSA9IGRhdGFfcHJpdi5jYWNoZVsga2V5IF0pICkge1xuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIGRhdGFfcHJpdi5jYWNoZVsga2V5IF0gKSB7XG5cdFx0XHRcdFx0XHQvLyBEaXNjYXJkIGFueSByZW1haW5pbmcgYHByaXZhdGVgIGRhdGFcblx0XHRcdFx0XHRcdGRlbGV0ZSBkYXRhX3ByaXYuY2FjaGVbIGtleSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gRGlzY2FyZCBhbnkgcmVtYWluaW5nIGB1c2VyYCBkYXRhXG5cdFx0XHRkZWxldGUgZGF0YV91c2VyLmNhY2hlWyBlbGVtWyBkYXRhX3VzZXIuZXhwYW5kbyBdIF07XG5cdFx0fVxuXHR9XG59KTtcblxualF1ZXJ5LmZuLmV4dGVuZCh7XG5cdHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS50ZXh0KCB0aGlzICkgOlxuXHRcdFx0XHR0aGlzLmVtcHR5KCkuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5kb21NYW5pcCggYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmRvbU1hbmlwKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmRvbU1hbmlwKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZG9tTWFuaXAoIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCBrZWVwRGF0YSAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcblx0XHR2YXIgZWxlbSxcblx0XHRcdGVsZW1zID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgdGhpcyApIDogdGhpcyxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRpZiAoICFrZWVwRGF0YSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0gKSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0aWYgKCBrZWVwRGF0YSAmJiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICkge1xuXHRcdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggZWxlbSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7IChlbGVtID0gdGhpc1tpXSkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXG5cdFx0XHRcdC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzXG5cdFx0XHRcdGVsZW0udGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0ZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50cztcblx0XHRkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7XG5cblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoIHJ4aHRtbFRhZywgXCI8JDE+PC8kMj5cIiApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoKCBlICkge31cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHR0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApO1xuXHRcdFx0fVxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0cmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBhcmcgPSBhcmd1bWVudHNbIDAgXTtcblxuXHRcdC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudFxuXHRcdHRoaXMuZG9tTWFuaXAoIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRhcmcgPSB0aGlzLnBhcmVudE5vZGU7XG5cblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7XG5cblx0XHRcdGlmICggYXJnICkge1xuXHRcdFx0XHRhcmcucmVwbGFjZUNoaWxkKCBlbGVtLCB0aGlzICk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBGb3JjZSByZW1vdmFsIGlmIHRoZXJlIHdhcyBubyBuZXcgY29udGVudCAoZS5nLiwgZnJvbSBlbXB0eSBhcmd1bWVudHMpXG5cdFx0cmV0dXJuIGFyZyAmJiAoYXJnLmxlbmd0aCB8fCBhcmcubm9kZVR5cGUpID8gdGhpcyA6IHRoaXMucmVtb3ZlKCk7XG5cdH0sXG5cblx0ZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVtb3ZlKCBzZWxlY3RvciwgdHJ1ZSApO1xuXHR9LFxuXG5cdGRvbU1hbmlwOiBmdW5jdGlvbiggYXJncywgY2FsbGJhY2sgKSB7XG5cblx0XHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdFx0YXJncyA9IGNvbmNhdC5hcHBseSggW10sIGFyZ3MgKTtcblxuXHRcdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0c2V0ID0gdGhpcyxcblx0XHRcdGlOb0Nsb25lID0gbCAtIDEsXG5cdFx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHRcdGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRcdGlmICggaXNGdW5jdGlvbiB8fFxuXHRcdFx0XHQoIGwgPiAxICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHRcdCFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0XHRcdHZhciBzZWxmID0gc2V0LmVxKCBpbmRleCApO1xuXHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdFx0YXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2VsZi5kb21NYW5pcCggYXJncywgY2FsbGJhY2sgKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmICggbCApIHtcblx0XHRcdGZyYWdtZW50ID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIGFyZ3MsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgdGhpcyApO1xuXHRcdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkge1xuXHRcdFx0XHRmcmFnbWVudCA9IGZpcnN0O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGZpcnN0ICkge1xuXHRcdFx0XHRzY3JpcHRzID0galF1ZXJ5Lm1hcCggZ2V0QWxsKCBmcmFnbWVudCwgXCJzY3JpcHRcIiApLCBkaXNhYmxlU2NyaXB0ICk7XG5cdFx0XHRcdGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDtcblxuXHRcdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cFxuXHRcdFx0XHQvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLlxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IGZyYWdtZW50O1xuXG5cdFx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdFx0Ly8gS2VlcCByZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvblxuXHRcdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBRdFdlYktpdFxuXHRcdFx0XHRcdFx0XHQvLyBqUXVlcnkubWVyZ2UgYmVjYXVzZSBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjYWxsYmFjay5jYWxsKCB0aGlzWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblx0XHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdFx0Ly8gUmVlbmFibGUgc2NyaXB0c1xuXHRcdFx0XHRcdGpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTtcblxuXHRcdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBzY3JpcHRzWyBpIF07XG5cdFx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdFx0IWRhdGFfcHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiYgalF1ZXJ5LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUuc3JjICkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSk7XG5cbmpRdWVyeS5lYWNoKHtcblx0YXBwZW5kVG86IFwiYXBwZW5kXCIsXG5cdHByZXBlbmRUbzogXCJwcmVwZW5kXCIsXG5cdGluc2VydEJlZm9yZTogXCJiZWZvcmVcIixcblx0aW5zZXJ0QWZ0ZXI6IFwiYWZ0ZXJcIixcblx0cmVwbGFjZUFsbDogXCJyZXBsYWNlV2l0aFwiXG59LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBlbGVtcyxcblx0XHRcdHJldCA9IFtdLFxuXHRcdFx0aW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLFxuXHRcdFx0bGFzdCA9IGluc2VydC5sZW5ndGggLSAxLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkge1xuXHRcdFx0ZWxlbXMgPSBpID09PSBsYXN0ID8gdGhpcyA6IHRoaXMuY2xvbmUoIHRydWUgKTtcblx0XHRcdGpRdWVyeSggaW5zZXJ0WyBpIF0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogUXRXZWJLaXRcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Ncblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xuXHR9O1xufSk7XG5cblxudmFyIGlmcmFtZSxcblx0ZWxlbWRpc3BsYXkgPSB7fTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgYWN0dWFsIGRpc3BsYXkgb2YgYSBlbGVtZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBub2RlTmFtZSBvZiB0aGUgZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IGRvYyBEb2N1bWVudCBvYmplY3RcbiAqL1xuLy8gQ2FsbGVkIG9ubHkgZnJvbSB3aXRoaW4gZGVmYXVsdERpc3BsYXlcbmZ1bmN0aW9uIGFjdHVhbERpc3BsYXkoIG5hbWUsIGRvYyApIHtcblx0dmFyIHN0eWxlLFxuXHRcdGVsZW0gPSBqUXVlcnkoIGRvYy5jcmVhdGVFbGVtZW50KCBuYW1lICkgKS5hcHBlbmRUbyggZG9jLmJvZHkgKSxcblxuXHRcdC8vIGdldERlZmF1bHRDb21wdXRlZFN0eWxlIG1pZ2h0IGJlIHJlbGlhYmx5IHVzZWQgb25seSBvbiBhdHRhY2hlZCBlbGVtZW50XG5cdFx0ZGlzcGxheSA9IHdpbmRvdy5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZSAmJiAoIHN0eWxlID0gd2luZG93LmdldERlZmF1bHRDb21wdXRlZFN0eWxlKCBlbGVtWyAwIF0gKSApID9cblxuXHRcdFx0Ly8gVXNlIG9mIHRoaXMgbWV0aG9kIGlzIGEgdGVtcG9yYXJ5IGZpeCAobW9yZSBsaWtlIG9wdGltaXphdGlvbikgdW50aWwgc29tZXRoaW5nIGJldHRlciBjb21lcyBhbG9uZyxcblx0XHRcdC8vIHNpbmNlIGl0IHdhcyByZW1vdmVkIGZyb20gc3BlY2lmaWNhdGlvbiBhbmQgc3VwcG9ydGVkIG9ubHkgaW4gRkZcblx0XHRcdHN0eWxlLmRpc3BsYXkgOiBqUXVlcnkuY3NzKCBlbGVtWyAwIF0sIFwiZGlzcGxheVwiICk7XG5cblx0Ly8gV2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSBzdG9yZWQgb24gdGhlIGVsZW1lbnQsXG5cdC8vIHNvIHVzZSBcImRldGFjaFwiIG1ldGhvZCBhcyBmYXN0IHdheSB0byBnZXQgcmlkIG9mIHRoZSBlbGVtZW50XG5cdGVsZW0uZGV0YWNoKCk7XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG5cbi8qKlxuICogVHJ5IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBkaXNwbGF5IHZhbHVlIG9mIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBub2RlTmFtZVxuICovXG5mdW5jdGlvbiBkZWZhdWx0RGlzcGxheSggbm9kZU5hbWUgKSB7XG5cdHZhciBkb2MgPSBkb2N1bWVudCxcblx0XHRkaXNwbGF5ID0gZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF07XG5cblx0aWYgKCAhZGlzcGxheSApIHtcblx0XHRkaXNwbGF5ID0gYWN0dWFsRGlzcGxheSggbm9kZU5hbWUsIGRvYyApO1xuXG5cdFx0Ly8gSWYgdGhlIHNpbXBsZSB3YXkgZmFpbHMsIHJlYWQgZnJvbSBpbnNpZGUgYW4gaWZyYW1lXG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiB8fCAhZGlzcGxheSApIHtcblxuXHRcdFx0Ly8gVXNlIHRoZSBhbHJlYWR5LWNyZWF0ZWQgaWZyYW1lIGlmIHBvc3NpYmxlXG5cdFx0XHRpZnJhbWUgPSAoaWZyYW1lIHx8IGpRdWVyeSggXCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+XCIgKSkuYXBwZW5kVG8oIGRvYy5kb2N1bWVudEVsZW1lbnQgKTtcblxuXHRcdFx0Ly8gQWx3YXlzIHdyaXRlIGEgbmV3IEhUTUwgc2tlbGV0b24gc28gV2Via2l0IGFuZCBGaXJlZm94IGRvbid0IGNob2tlIG9uIHJldXNlXG5cdFx0XHRkb2MgPSBpZnJhbWVbIDAgXS5jb250ZW50RG9jdW1lbnQ7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFXG5cdFx0XHRkb2Mud3JpdGUoKTtcblx0XHRcdGRvYy5jbG9zZSgpO1xuXG5cdFx0XHRkaXNwbGF5ID0gYWN0dWFsRGlzcGxheSggbm9kZU5hbWUsIGRvYyApO1xuXHRcdFx0aWZyYW1lLmRldGFjaCgpO1xuXHRcdH1cblxuXHRcdC8vIFN0b3JlIHRoZSBjb3JyZWN0IGRlZmF1bHQgZGlzcGxheVxuXHRcdGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdID0gZGlzcGxheTtcblx0fVxuXG5cdHJldHVybiBkaXNwbGF5O1xufVxudmFyIHJtYXJnaW4gPSAoL15tYXJnaW4vKTtcblxudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0Ly8gU3VwcG9ydDogSUU8PTExKywgRmlyZWZveDw9MzArICgjMTUwOTgsICMxNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHRpZiAoIGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5vcGVuZXIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoIGVsZW0sIG51bGwgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGVsZW0sIG51bGwgKTtcblx0fTtcblxuXG5cbmZ1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7XG5cdHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gU3VwcG9ydDogSUU5XG5cdC8vIGdldFByb3BlcnR5VmFsdWUgaXMgb25seSBuZWVkZWQgZm9yIC5jc3MoJ2ZpbHRlcicpICgjMTI1MzcpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XG5cdH1cblxuXHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0aWYgKCByZXQgPT09IFwiXCIgJiYgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgKSB7XG5cdFx0XHRyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBpT1MgPCA2XG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIGlPUyA8IDYgKGF0IGxlYXN0KSByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIGEgbGFyZ2VyIHNldCBvZiB2YWx1ZXMsIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHNcblx0XHQvLyB0aGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6IGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcblx0XHRpZiAoIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiBybWFyZ2luLnRlc3QoIG5hbWUgKSApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlc1xuXHRcdFx0d2lkdGggPSBzdHlsZS53aWR0aDtcblx0XHRcdG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7XG5cdFx0XHRtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoO1xuXG5cdFx0XHQvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7XG5cdFx0XHRyZXQgPSBjb21wdXRlZC53aWR0aDtcblxuXHRcdFx0Ly8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlc1xuXHRcdFx0c3R5bGUud2lkdGggPSB3aWR0aDtcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7XG5cdFx0XHRzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/XG5cdFx0Ly8gU3VwcG9ydDogSUVcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxuXHRcdHJldCArIFwiXCIgOlxuXHRcdHJldDtcbn1cblxuXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XG5cdC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggY29uZGl0aW9uRm4oKSApIHtcblx0XHRcdFx0Ly8gSG9vayBub3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cblx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2V0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRoZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLlxuXHRcdFx0cmV0dXJuICh0aGlzLmdldCA9IGhvb2tGbikuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fTtcbn1cblxuXG4oZnVuY3Rpb24oKSB7XG5cdHZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCxcblx0XHRkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0aWYgKCAhZGl2LnN0eWxlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0Ly8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKCM4OTA4KVxuXHRkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcImNvbnRlbnQtYm94XCI7XG5cdGRpdi5jbG9uZU5vZGUoIHRydWUgKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiXCI7XG5cdHN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlID0gZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID09PSBcImNvbnRlbnQtYm94XCI7XG5cblx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4O1wiICtcblx0XHRcInBvc2l0aW9uOmFic29sdXRlXCI7XG5cdGNvbnRhaW5lci5hcHBlbmRDaGlsZCggZGl2ICk7XG5cblx0Ly8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0XG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXG5cdGZ1bmN0aW9uIGNvbXB1dGVQaXhlbFBvc2l0aW9uQW5kQm94U2l6aW5nUmVsaWFibGUoKSB7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveDwyOSwgQW5kcm9pZCAyLjNcblx0XHRcdC8vIFZlbmRvci1wcmVmaXggYm94LXNpemluZ1xuXHRcdFx0XCItd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtcIiArXG5cdFx0XHRcImJveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MSU7dG9wOjElO1wiICtcblx0XHRcdFwiYm9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo0cHg7cG9zaXRpb246YWJzb2x1dGVcIjtcblx0XHRkaXYuaW5uZXJIVE1MID0gXCJcIjtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYsIG51bGwgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cdFx0Ym94U2l6aW5nUmVsaWFibGVWYWwgPSBkaXZTdHlsZS53aWR0aCA9PT0gXCI0cHhcIjtcblxuXHRcdGRvY0VsZW0ucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogbm9kZS5qcyBqc2RvbVxuXHQvLyBEb24ndCBhc3N1bWUgdGhhdCBnZXRDb21wdXRlZFN0eWxlIGlzIGEgcHJvcGVydHkgb2YgdGhlIGdsb2JhbCBvYmplY3Rcblx0aWYgKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XG5cdFx0XHRwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBUaGlzIHRlc3QgaXMgZXhlY3V0ZWQgb25seSBvbmNlIGJ1dCB3ZSBzdGlsbCBkbyBtZW1vaXppbmdcblx0XHRcdFx0Ly8gc2luY2Ugd2UgY2FuIHVzZSB0aGUgYm94U2l6aW5nUmVsaWFibGUgcHJlLWNvbXB1dGluZy5cblx0XHRcdFx0Ly8gTm8gbmVlZCB0byBjaGVjayBpZiB0aGUgdGVzdCB3YXMgYWxyZWFkeSBwZXJmb3JtZWQsIHRob3VnaC5cblx0XHRcdFx0Y29tcHV0ZVBpeGVsUG9zaXRpb25BbmRCb3hTaXppbmdSZWxpYWJsZSgpO1xuXHRcdFx0XHRyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDtcblx0XHRcdH0sXG5cdFx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggYm94U2l6aW5nUmVsaWFibGVWYWwgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRjb21wdXRlUGl4ZWxQb3NpdGlvbkFuZEJveFNpemluZ1JlbGlhYmxlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdFx0fSxcblx0XHRcdHJlbGlhYmxlTWFyZ2luUmlnaHQ6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zXG5cdFx0XHRcdC8vIENoZWNrIGlmIGRpdiB3aXRoIGV4cGxpY2l0IHdpZHRoIGFuZCBubyBtYXJnaW4tcmlnaHQgaW5jb3JyZWN0bHlcblx0XHRcdFx0Ly8gZ2V0cyBjb21wdXRlZCBtYXJnaW4tcmlnaHQgYmFzZWQgb24gd2lkdGggb2YgY29udGFpbmVyLiAoIzMzMzMpXG5cdFx0XHRcdC8vIFdlYktpdCBCdWcgMTMzNDMgLSBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgd3JvbmcgdmFsdWUgZm9yIG1hcmdpbi1yaWdodFxuXHRcdFx0XHQvLyBUaGlzIHN1cHBvcnQgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBvbmNlIHNvIG5vIG1lbW9pemluZyBpcyBuZWVkZWQuXG5cdFx0XHRcdHZhciByZXQsXG5cdFx0XHRcdFx0bWFyZ2luRGl2ID0gZGl2LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblxuXHRcdFx0XHQvLyBSZXNldCBDU1M6IGJveC1zaXppbmc7IGRpc3BsYXk7IG1hcmdpbjsgYm9yZGVyOyBwYWRkaW5nXG5cdFx0XHRcdG1hcmdpbkRpdi5zdHlsZS5jc3NUZXh0ID0gZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3g8MjksIEFuZHJvaWQgMi4zXG5cdFx0XHRcdFx0Ly8gVmVuZG9yLXByZWZpeCBib3gtc2l6aW5nXG5cdFx0XHRcdFx0XCItd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O1wiICtcblx0XHRcdFx0XHRcImJveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjBcIjtcblx0XHRcdFx0bWFyZ2luRGl2LnN0eWxlLm1hcmdpblJpZ2h0ID0gbWFyZ2luRGl2LnN0eWxlLndpZHRoID0gXCIwXCI7XG5cdFx0XHRcdGRpdi5zdHlsZS53aWR0aCA9IFwiMXB4XCI7XG5cdFx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApO1xuXG5cdFx0XHRcdHJldCA9ICFwYXJzZUZsb2F0KCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggbWFyZ2luRGl2LCBudWxsICkubWFyZ2luUmlnaHQgKTtcblxuXHRcdFx0XHRkb2NFbGVtLnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblx0XHRcdFx0ZGl2LnJlbW92ZUNoaWxkKCBtYXJnaW5EaXYgKTtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59KSgpO1xuXG5cbi8vIEEgbWV0aG9kIGZvciBxdWlja2x5IHN3YXBwaW5nIGluL291dCBDU1MgcHJvcGVydGllcyB0byBnZXQgY29ycmVjdCBjYWxjdWxhdGlvbnMuXG5qUXVlcnkuc3dhcCA9IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjaywgYXJncyApIHtcblx0dmFyIHJldCwgbmFtZSxcblx0XHRvbGQgPSB7fTtcblxuXHQvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdO1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTtcblx0fVxuXG5cdHJldCA9IGNhbGxiYWNrLmFwcGx5KCBlbGVtLCBhcmdzIHx8IFtdICk7XG5cblx0Ly8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG5cbnZhclxuXHQvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlIGV4Y2VwdCBcInRhYmxlXCIsIFwidGFibGUtY2VsbFwiLCBvciBcInRhYmxlLWNhcHRpb25cIlxuXHQvLyBTZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXlcblx0cmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFxuXHRybnVtc3BsaXQgPSBuZXcgUmVnRXhwKCBcIl4oXCIgKyBwbnVtICsgXCIpKC4qKSRcIiwgXCJpXCIgKSxcblx0cnJlbE51bSA9IG5ldyBSZWdFeHAoIFwiXihbKy1dKT0oXCIgKyBwbnVtICsgXCIpXCIsIFwiaVwiICksXG5cblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH0sXG5cblx0Y3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiT1wiLCBcIk1velwiLCBcIm1zXCIgXTtcblxuLy8gUmV0dXJuIGEgY3NzIHByb3BlcnR5IG1hcHBlZCB0byBhIHBvdGVudGlhbGx5IHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eVxuZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIHN0eWxlLCBuYW1lICkge1xuXG5cdC8vIFNob3J0Y3V0IGZvciBuYW1lcyB0aGF0IGFyZSBub3QgdmVuZG9yIHByZWZpeGVkXG5cdGlmICggbmFtZSBpbiBzdHlsZSApIHtcblx0XHRyZXR1cm4gbmFtZTtcblx0fVxuXG5cdC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXNcblx0dmFyIGNhcE5hbWUgPSBuYW1lWzBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpLFxuXHRcdG9yaWdOYW1lID0gbmFtZSxcblx0XHRpID0gY3NzUHJlZml4ZXMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTtcblx0XHRpZiAoIG5hbWUgaW4gc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3JpZ05hbWU7XG59XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cdHZhciBtYXRjaGVzID0gcm51bXNwbGl0LmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblx0XHQvLyBHdWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCBcInN1YnRyYWN0XCIsIGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rc1xuXHRcdE1hdGgubWF4KCAwLCBtYXRjaGVzWyAxIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAyIF0gfHwgXCJweFwiICkgOlxuXHRcdHZhbHVlO1xufVxuXG5mdW5jdGlvbiBhdWdtZW50V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEsIGlzQm9yZGVyQm94LCBzdHlsZXMgKSB7XG5cdHZhciBpID0gZXh0cmEgPT09ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSA/XG5cdFx0Ly8gSWYgd2UgYWxyZWFkeSBoYXZlIHRoZSByaWdodCBtZWFzdXJlbWVudCwgYXZvaWQgYXVnbWVudGF0aW9uXG5cdFx0NCA6XG5cdFx0Ly8gT3RoZXJ3aXNlIGluaXRpYWxpemUgZm9yIGhvcml6b250YWwgb3IgdmVydGljYWwgcHJvcGVydGllc1xuXHRcdG5hbWUgPT09IFwid2lkdGhcIiA/IDEgOiAwLFxuXG5cdFx0dmFsID0gMDtcblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cdFx0Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luLCBzbyBhZGQgaXQgaWYgd2Ugd2FudCBpdFxuXHRcdGlmICggZXh0cmEgPT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHR2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwgZXh0cmEgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0JvcmRlckJveCApIHtcblx0XHRcdC8vIGJvcmRlci1ib3ggaW5jbHVkZXMgcGFkZGluZywgc28gcmVtb3ZlIGl0IGlmIHdlIHdhbnQgY29udGVudFxuXHRcdFx0aWYgKCBleHRyYSA9PT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHRcdHZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgYm9yZGVyIG5vciBtYXJnaW4sIHNvIHJlbW92ZSBib3JkZXJcblx0XHRcdGlmICggZXh0cmEgIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRcdHZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50LCBzbyBhZGQgcGFkZGluZ1xuXHRcdFx0dmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50IG5vciBwYWRkaW5nLCBzbyBhZGQgYm9yZGVyXG5cdFx0XHRpZiAoIGV4dHJhICE9PSBcInBhZGRpbmdcIiApIHtcblx0XHRcdFx0dmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBvZmZzZXQgcHJvcGVydHksIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGJvcmRlci1ib3ggdmFsdWVcblx0dmFyIHZhbHVlSXNCb3JkZXJCb3ggPSB0cnVlLFxuXHRcdHZhbCA9IG5hbWUgPT09IFwid2lkdGhcIiA/IGVsZW0ub2Zmc2V0V2lkdGggOiBlbGVtLm9mZnNldEhlaWdodCxcblx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCI7XG5cblx0Ly8gU29tZSBub24taHRtbCBlbGVtZW50cyByZXR1cm4gdW5kZWZpbmVkIGZvciBvZmZzZXRXaWR0aCwgc28gY2hlY2sgZm9yIG51bGwvdW5kZWZpbmVkXG5cdC8vIHN2ZyAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTI4NVxuXHQvLyBNYXRoTUwgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD00OTE2Njhcblx0aWYgKCB2YWwgPD0gMCB8fCB2YWwgPT0gbnVsbCApIHtcblx0XHQvLyBGYWxsIGJhY2sgdG8gY29tcHV0ZWQgdGhlbiB1bmNvbXB1dGVkIGNzcyBpZiBuZWNlc3Nhcnlcblx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xuXHRcdGlmICggdmFsIDwgMCB8fCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdHZhbCA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcblx0XHR9XG5cblx0XHQvLyBDb21wdXRlZCB1bml0IGlzIG5vdCBwaXhlbHMuIFN0b3AgaGVyZSBhbmQgcmV0dXJuLlxuXHRcdGlmICggcm51bW5vbnB4LnRlc3QodmFsKSApIHtcblx0XHRcdHJldHVybiB2YWw7XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgZm9yIHN0eWxlIGluIGNhc2UgYSBicm93c2VyIHdoaWNoIHJldHVybnMgdW5yZWxpYWJsZSB2YWx1ZXNcblx0XHQvLyBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIHRoZSByZWxpYWJsZSBlbGVtLnN0eWxlXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94ICYmXG5cdFx0XHQoIHN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCB2YWwgPT09IGVsZW0uc3R5bGVbIG5hbWUgXSApO1xuXG5cdFx0Ly8gTm9ybWFsaXplIFwiXCIsIGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRyYVxuXHRcdHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7XG5cdH1cblxuXHQvLyBVc2UgdGhlIGFjdGl2ZSBib3gtc2l6aW5nIG1vZGVsIHRvIGFkZC9zdWJ0cmFjdCBpcnJlbGV2YW50IHN0eWxlc1xuXHRyZXR1cm4gKCB2YWwgK1xuXHRcdGF1Z21lbnRXaWR0aE9ySGVpZ2h0KFxuXHRcdFx0ZWxlbSxcblx0XHRcdG5hbWUsXG5cdFx0XHRleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICksXG5cdFx0XHR2YWx1ZUlzQm9yZGVyQm94LFxuXHRcdFx0c3R5bGVzXG5cdFx0KVxuXHQpICsgXCJweFwiO1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLCBoaWRkZW4sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTtcblx0XHRpZiAoICFlbGVtLnN0eWxlICkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0dmFsdWVzWyBpbmRleCBdID0gZGF0YV9wcml2LmdldCggZWxlbSwgXCJvbGRkaXNwbGF5XCIgKTtcblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblx0XHRcdC8vIFJlc2V0IHRoZSBpbmxpbmUgZGlzcGxheSBvZiB0aGlzIGVsZW1lbnQgdG8gbGVhcm4gaWYgaXQgaXNcblx0XHRcdC8vIGJlaW5nIGhpZGRlbiBieSBjYXNjYWRlZCBydWxlcyBvciBub3Rcblx0XHRcdGlmICggIXZhbHVlc1sgaW5kZXggXSAmJiBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVycmlkZGVuIHdpdGggZGlzcGxheTogbm9uZVxuXHRcdFx0Ly8gaW4gYSBzdHlsZXNoZWV0IHRvIHdoYXRldmVyIHRoZSBkZWZhdWx0IGJyb3dzZXIgc3R5bGUgaXNcblx0XHRcdC8vIGZvciBzdWNoIGFuIGVsZW1lbnRcblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuKCBlbGVtICkgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFfcHJpdi5hY2Nlc3MoIGVsZW0sIFwib2xkZGlzcGxheVwiLCBkZWZhdWx0RGlzcGxheShlbGVtLm5vZGVOYW1lKSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRoaWRkZW4gPSBpc0hpZGRlbiggZWxlbSApO1xuXG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiIHx8ICFoaWRkZW4gKSB7XG5cdFx0XHRcdGRhdGFfcHJpdi5zZXQoIGVsZW0sIFwib2xkZGlzcGxheVwiLCBoaWRkZW4gPyBkaXNwbGF5IDogalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiBtb3N0IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wXG5cdC8vIHRvIGF2b2lkIHRoZSBjb25zdGFudCByZWZsb3dcblx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRpZiAoICFzaG93IHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIgfHwgZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gc2hvdyA/IHZhbHVlc1sgaW5kZXggXSB8fCBcIlwiIDogXCJub25lXCI7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZXh0ZW5kKHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdFwiY29sdW1uQ291bnRcIjogdHJ1ZSxcblx0XHRcImZpbGxPcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJmbGV4R3Jvd1wiOiB0cnVlLFxuXHRcdFwiZmxleFNocmlua1wiOiB0cnVlLFxuXHRcdFwiZm9udFdlaWdodFwiOiB0cnVlLFxuXHRcdFwibGluZUhlaWdodFwiOiB0cnVlLFxuXHRcdFwib3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwib3JkZXJcIjogdHJ1ZSxcblx0XHRcIm9ycGhhbnNcIjogdHJ1ZSxcblx0XHRcIndpZG93c1wiOiB0cnVlLFxuXHRcdFwiekluZGV4XCI6IHRydWUsXG5cdFx0XCJ6b29tXCI6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHtcblx0XHRcImZsb2F0XCI6IFwiY3NzRmxvYXRcIlxuXHR9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRcdG5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwgKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggc3R5bGUsIG9yaWdOYW1lICkgKTtcblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKHJldCA9IHJyZWxOdW0uZXhlYyggdmFsdWUgKSkgKSB7XG5cdFx0XHRcdHZhbHVlID0gKCByZXRbMV0gKyAxICkgKiByZXRbMl0gKyBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICkgKTtcblx0XHRcdFx0Ly8gRml4ZXMgYnVnICM5MjM3XG5cdFx0XHRcdHR5cGUgPSBcIm51bWJlclwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCBudWxsIGFuZCBOYU4gdmFsdWVzIGFyZW4ndCBzZXQgKCM3MTE2KVxuXHRcdFx0aWYgKCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIG51bWJlciwgYWRkICdweCcgdG8gdGhlIChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWpRdWVyeS5jc3NOdW1iZXJbIG9yaWdOYW1lIF0gKSB7XG5cdFx0XHRcdHZhbHVlICs9IFwicHhcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgIShcInNldFwiIGluIGhvb2tzKSB8fCAodmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkpICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0XG5cdFx0XHRyZXR1cm4gc3R5bGVbIG5hbWUgXTtcblx0XHR9XG5cdH0sXG5cblx0Y3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEsIHN0eWxlcyApIHtcblx0XHR2YXIgdmFsLCBudW0sIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHRuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdIHx8ICggalF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIGVsZW0uc3R5bGUsIG9yaWdOYW1lICkgKTtcblxuXHRcdC8vIFRyeSBwcmVmaXhlZCBuYW1lIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVkIG5hbWVcblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0XG5cdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBcIm5vcm1hbFwiIHRvIGNvbXB1dGVkIHZhbHVlXG5cdFx0aWYgKCB2YWwgPT09IFwibm9ybWFsXCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0gKSB7XG5cdFx0XHR2YWwgPSBjc3NOb3JtYWxUcmFuc2Zvcm1bIG5hbWUgXTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIG51bWVyaWMgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVyaWNcblx0XHRpZiAoIGV4dHJhID09PSBcIlwiIHx8IGV4dHJhICkge1xuXHRcdFx0bnVtID0gcGFyc2VGbG9hdCggdmFsICk7XG5cdFx0XHRyZXR1cm4gZXh0cmEgPT09IHRydWUgfHwgalF1ZXJ5LmlzTnVtZXJpYyggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxufSk7XG5cbmpRdWVyeS5lYWNoKFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJiBlbGVtLm9mZnNldFdpZHRoID09PSAwID9cblx0XHRcdFx0XHRqUXVlcnkuc3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTtcblx0XHRcdFx0XHR9KSA6XG5cdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIGV4dHJhICkge1xuXHRcdFx0dmFyIHN0eWxlcyA9IGV4dHJhICYmIGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0cmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgZXh0cmEgP1xuXHRcdFx0XHRhdWdtZW50V2lkdGhPckhlaWdodChcblx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0XHRzdHlsZXNcblx0XHRcdFx0KSA6IDBcblx0XHRcdCk7XG5cdFx0fVxuXHR9O1xufSk7XG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luUmlnaHQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodCxcblx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnN3YXAoIGVsZW0sIHsgXCJkaXNwbGF5XCI6IFwiaW5saW5lLWJsb2NrXCIgfSxcblx0XHRcdFx0Y3VyQ1NTLCBbIGVsZW0sIFwibWFyZ2luUmlnaHRcIiBdICk7XG5cdFx0fVxuXHR9XG4pO1xuXG4vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzXG5qUXVlcnkuZWFjaCh7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdChcIiBcIikgOiBbIHZhbHVlIF07XG5cblx0XHRcdGZvciAoIDsgaSA8IDQ7IGkrKyApIHtcblx0XHRcdFx0ZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPVxuXHRcdFx0XHRcdHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV4cGFuZGVkO1xuXHRcdH1cblx0fTtcblxuXHRpZiAoICFybWFyZ2luLnRlc3QoIHByZWZpeCApICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKHtcblx0Y3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0dmFyIHN0eWxlcywgbGVuLFxuXHRcdFx0XHRtYXAgPSB7fSxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdGlmICggalF1ZXJ5LmlzQXJyYXkoIG5hbWUgKSApIHtcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICk7XG5cdFx0XHRcdGxlbiA9IG5hbWUubGVuZ3RoO1xuXG5cdFx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBtYXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDpcblx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApO1xuXHRcdH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXHRzaG93OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTtcblx0fSxcblx0aGlkZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzICk7XG5cdH0sXG5cdHRvZ2dsZTogZnVuY3Rpb24oIHN0YXRlICkge1xuXHRcdGlmICggdHlwZW9mIHN0YXRlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdHJldHVybiBzdGF0ZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW4oIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59KTtcblxuXG5mdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7XG5cdHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7XG59XG5qUXVlcnkuVHdlZW4gPSBUd2VlbjtcblxuVHdlZW4ucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogVHdlZW4sXG5cdGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHtcblx0XHR0aGlzLmVsZW0gPSBlbGVtO1xuXHRcdHRoaXMucHJvcCA9IHByb3A7XG5cdFx0dGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgXCJzd2luZ1wiO1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0aWYgKCB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJlxuXHRcdFx0XHQoIXR3ZWVuLmVsZW0uc3R5bGUgfHwgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwpICkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHlcblx0XHRcdC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuXG5cdFx0XHQvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgXCIxMHB4XCIgYXJlIHBhcnNlZCB0byBGbG9hdDtcblx0XHRcdC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgXCJyb3RhdGUoMXJhZClcIiBhcmUgcmV0dXJuZWQgYXMtaXMuXG5cdFx0XHRyZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBcIlwiICk7XG5cdFx0XHQvLyBFbXB0eSBzdHJpbmdzLCBudWxsLCB1bmRlZmluZWQgYW5kIFwiYXV0b1wiIGFyZSBjb252ZXJ0ZWQgdG8gMC5cblx0XHRcdHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gXCJhdXRvXCIgPyAwIDogcmVzdWx0O1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLnN0eWxlICYmICggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8IGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gU3VwcG9ydDogSUU5XG4vLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHtcblx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5lYXNpbmcgPSB7XG5cdGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIHA7XG5cdH0sXG5cdHN3aW5nOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyO1xuXHR9XG59O1xuXG5qUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDtcblxuLy8gQmFjayBDb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnRcbmpRdWVyeS5meC5zdGVwID0ge307XG5cblxuXG5cbnZhclxuXHRmeE5vdywgdGltZXJJZCxcblx0cmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sXG5cdHJmeG51bSA9IG5ldyBSZWdFeHAoIFwiXig/OihbKy1dKT18KShcIiArIHBudW0gKyBcIikoW2EteiVdKikkXCIsIFwiaVwiICksXG5cdHJydW4gPSAvcXVldWVIb29rcyQvLFxuXHRhbmltYXRpb25QcmVmaWx0ZXJzID0gWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cdHR3ZWVuZXJzID0ge1xuXHRcdFwiKlwiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHtcblx0XHRcdHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICksXG5cdFx0XHRcdHRhcmdldCA9IHR3ZWVuLmN1cigpLFxuXHRcdFx0XHRwYXJ0cyA9IHJmeG51bS5leGVjKCB2YWx1ZSApLFxuXHRcdFx0XHR1bml0ID0gcGFydHMgJiYgcGFydHNbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKSxcblxuXHRcdFx0XHQvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlc1xuXHRcdFx0XHRzdGFydCA9ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09IFwicHhcIiAmJiArdGFyZ2V0ICkgJiZcblx0XHRcdFx0XHRyZnhudW0uZXhlYyggalF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgcHJvcCApICksXG5cdFx0XHRcdHNjYWxlID0gMSxcblx0XHRcdFx0bWF4SXRlcmF0aW9ucyA9IDIwO1xuXG5cdFx0XHRpZiAoIHN0YXJ0ICYmIHN0YXJ0WyAzIF0gIT09IHVuaXQgKSB7XG5cdFx0XHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHRcdFx0dW5pdCA9IHVuaXQgfHwgc3RhcnRbIDMgXTtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0XHRcdHBhcnRzID0gcGFydHMgfHwgW107XG5cblx0XHRcdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRcdFx0c3RhcnQgPSArdGFyZ2V0IHx8IDE7XG5cblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdC8vIElmIHByZXZpb3VzIGl0ZXJhdGlvbiB6ZXJvZWQgb3V0LCBkb3VibGUgdW50aWwgd2UgZ2V0ICpzb21ldGhpbmcqLlxuXHRcdFx0XHRcdC8vIFVzZSBzdHJpbmcgZm9yIGRvdWJsaW5nIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBzZWUgc2NhbGUgYXMgdW5jaGFuZ2VkIGJlbG93XG5cdFx0XHRcdFx0c2NhbGUgPSBzY2FsZSB8fCBcIi41XCI7XG5cblx0XHRcdFx0XHQvLyBBZGp1c3QgYW5kIGFwcGx5XG5cdFx0XHRcdFx0c3RhcnQgPSBzdGFydCAvIHNjYWxlO1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgcHJvcCwgc3RhcnQgKyB1bml0ICk7XG5cblx0XHRcdFx0Ly8gVXBkYXRlIHNjYWxlLCB0b2xlcmF0aW5nIHplcm8gb3IgTmFOIGZyb20gdHdlZW4uY3VyKCksXG5cdFx0XHRcdC8vIGJyZWFrIHRoZSBsb29wIGlmIHNjYWxlIGlzIHVuY2hhbmdlZCBvciBwZXJmZWN0LCBvciBpZiB3ZSd2ZSBqdXN0IGhhZCBlbm91Z2hcblx0XHRcdFx0fSB3aGlsZSAoIHNjYWxlICE9PSAoc2NhbGUgPSB0d2Vlbi5jdXIoKSAvIHRhcmdldCkgJiYgc2NhbGUgIT09IDEgJiYgLS1tYXhJdGVyYXRpb25zICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFVwZGF0ZSB0d2VlbiBwcm9wZXJ0aWVzXG5cdFx0XHRpZiAoIHBhcnRzICkge1xuXHRcdFx0XHRzdGFydCA9IHR3ZWVuLnN0YXJ0ID0gK3N0YXJ0IHx8ICt0YXJnZXQgfHwgMDtcblx0XHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHRcdC8vIElmIGEgKz0vLT0gdG9rZW4gd2FzIHByb3ZpZGVkLCB3ZSdyZSBkb2luZyBhIHJlbGF0aXZlIGFuaW1hdGlvblxuXHRcdFx0XHR0d2Vlbi5lbmQgPSBwYXJ0c1sgMSBdID9cblx0XHRcdFx0XHRzdGFydCArICggcGFydHNbIDEgXSArIDEgKSAqIHBhcnRzWyAyIF0gOlxuXHRcdFx0XHRcdCtwYXJ0c1sgMiBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH07XG5cbi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHlcbmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkge1xuXHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdGZ4Tm93ID0gdW5kZWZpbmVkO1xuXHR9KTtcblx0cmV0dXJuICggZnhOb3cgPSBqUXVlcnkubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNCA7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHtcblx0XHR3aGljaCA9IGNzc0V4cGFuZFsgaSBdO1xuXHRcdGF0dHJzWyBcIm1hcmdpblwiICsgd2hpY2ggXSA9IGF0dHJzWyBcInBhZGRpbmdcIiArIHdoaWNoIF0gPSB0eXBlO1xuXHR9XG5cblx0aWYgKCBpbmNsdWRlV2lkdGggKSB7XG5cdFx0YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTtcblx0fVxuXG5cdHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7XG5cdHZhciB0d2Vlbixcblx0XHRjb2xsZWN0aW9uID0gKCB0d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCB0d2VlbmVyc1sgXCIqXCIgXSApLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoICh0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cblx0dmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIHR3ZWVuLCBob29rcywgb2xkZmlyZSwgZGlzcGxheSwgY2hlY2tEaXNwbGF5LFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbiggZWxlbSApLFxuXHRcdGRhdGFTaG93ID0gZGF0YV9wcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIEhhbmRsZSBxdWV1ZTogZmFsc2UgcHJvbWlzZXNcblx0aWYgKCAhb3B0cy5xdWV1ZSApIHtcblx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgXCJmeFwiICk7XG5cdFx0aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkge1xuXHRcdFx0aG9va3MudW5xdWV1ZWQgPSAwO1xuXHRcdFx0b2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggIWhvb2tzLnVucXVldWVkICkge1xuXHRcdFx0XHRcdG9sZGZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aG9va3MudW5xdWV1ZWQrKztcblxuXHRcdGFuaW0uYWx3YXlzKGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXNcblx0XHRcdGFuaW0uYWx3YXlzKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gSGVpZ2h0L3dpZHRoIG92ZXJmbG93IHBhc3Ncblx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCJoZWlnaHRcIiBpbiBwcm9wcyB8fCBcIndpZHRoXCIgaW4gcHJvcHMgKSApIHtcblx0XHQvLyBNYWtlIHN1cmUgdGhhdCBub3RoaW5nIHNuZWFrcyBvdXRcblx0XHQvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFOS0xMCBkbyBub3Rcblx0XHQvLyBjaGFuZ2UgdGhlIG92ZXJmbG93IGF0dHJpYnV0ZSB3aGVuIG92ZXJmbG93WCBhbmRcblx0XHQvLyBvdmVyZmxvd1kgYXJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZVxuXHRcdG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdO1xuXG5cdFx0Ly8gU2V0IGRpc3BsYXkgcHJvcGVydHkgdG8gaW5saW5lLWJsb2NrIGZvciBoZWlnaHQvd2lkdGhcblx0XHQvLyBhbmltYXRpb25zIG9uIGlubGluZSBlbGVtZW50cyB0aGF0IGFyZSBoYXZpbmcgd2lkdGgvaGVpZ2h0IGFuaW1hdGVkXG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cblx0XHQvLyBUZXN0IGRlZmF1bHQgZGlzcGxheSBpZiBkaXNwbGF5IGlzIGN1cnJlbnRseSBcIm5vbmVcIlxuXHRcdGNoZWNrRGlzcGxheSA9IGRpc3BsYXkgPT09IFwibm9uZVwiID9cblx0XHRcdGRhdGFfcHJpdi5nZXQoIGVsZW0sIFwib2xkZGlzcGxheVwiICkgfHwgZGVmYXVsdERpc3BsYXkoIGVsZW0ubm9kZU5hbWUgKSA6IGRpc3BsYXk7XG5cblx0XHRpZiAoIGNoZWNrRGlzcGxheSA9PT0gXCJpbmxpbmVcIiAmJiBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKGZ1bmN0aW9uKCkge1xuXHRcdFx0c3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBzaG93L2hpZGUgcGFzc1xuXHRmb3IgKCBwcm9wIGluIHByb3BzICkge1xuXHRcdHZhbHVlID0gcHJvcHNbIHByb3AgXTtcblx0XHRpZiAoIHJmeHR5cGVzLmV4ZWMoIHZhbHVlICkgKSB7XG5cdFx0XHRkZWxldGUgcHJvcHNbIHByb3AgXTtcblx0XHRcdHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gXCJ0b2dnbGVcIjtcblx0XHRcdGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gXCJoaWRlXCIgOiBcInNob3dcIiApICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGRhdGFTaG93IGxlZnQgb3ZlciBmcm9tIGEgc3RvcHBlZCBoaWRlIG9yIHNob3cgYW5kIHdlIGFyZSBnb2luZyB0byBwcm9jZWVkIHdpdGggc2hvdywgd2Ugc2hvdWxkIHByZXRlbmQgdG8gYmUgaGlkZGVuXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApO1xuXG5cdFx0Ly8gQW55IG5vbi1meCB2YWx1ZSBzdG9wcyB1cyBmcm9tIHJlc3RvcmluZyB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaXNwbGF5ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7XG5cdFx0aWYgKCBkYXRhU2hvdyApIHtcblx0XHRcdGlmICggXCJoaWRkZW5cIiBpbiBkYXRhU2hvdyApIHtcblx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhU2hvdyA9IGRhdGFfcHJpdi5hY2Nlc3MoIGVsZW0sIFwiZnhzaG93XCIsIHt9ICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgc3RhdGUgaWYgaXRzIHRvZ2dsZSAtIGVuYWJsZXMgLnN0b3AoKS50b2dnbGUoKSB0byBcInJldmVyc2VcIlxuXHRcdGlmICggdG9nZ2xlICkge1xuXHRcdFx0ZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjtcblx0XHR9XG5cdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRqUXVlcnkoIGVsZW0gKS5zaG93KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFuaW0uZG9uZShmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5KCBlbGVtICkuaGlkZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGFuaW0uZG9uZShmdW5jdGlvbigpIHtcblx0XHRcdHZhciBwcm9wO1xuXG5cdFx0XHRkYXRhX3ByaXYucmVtb3ZlKCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cdFx0XHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0dHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblxuXHRcdFx0aWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7XG5cdFx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSB0d2Vlbi5zdGFydDtcblx0XHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdFx0dHdlZW4uZW5kID0gdHdlZW4uc3RhcnQ7XG5cdFx0XHRcdFx0dHdlZW4uc3RhcnQgPSBwcm9wID09PSBcIndpZHRoXCIgfHwgcHJvcCA9PT0gXCJoZWlnaHRcIiA/IDEgOiAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdC8vIElmIHRoaXMgaXMgYSBub29wIGxpa2UgLmhpZGUoKS5oaWRlKCksIHJlc3RvcmUgYW4gb3ZlcndyaXR0ZW4gZGlzcGxheSB2YWx1ZVxuXHR9IGVsc2UgaWYgKCAoZGlzcGxheSA9PT0gXCJub25lXCIgPyBkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApIDogZGlzcGxheSkgPT09IFwiaW5saW5lXCIgKSB7XG5cdFx0c3R5bGUuZGlzcGxheSA9IGRpc3BsYXk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBpbmRleCApO1xuXHRcdGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTtcblx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdO1xuXHRcdGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRlYXNpbmcgPSB2YWx1ZVsgMSBdO1xuXHRcdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07XG5cdFx0fVxuXG5cdFx0aWYgKCBpbmRleCAhPT0gbmFtZSApIHtcblx0XHRcdHByb3BzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgaW5kZXggXTtcblx0XHR9XG5cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdO1xuXHRcdGlmICggaG9va3MgJiYgXCJleHBhbmRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBuYW1lIF07XG5cblx0XHRcdC8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy5cblx0XHRcdC8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgXCJuYW1lXCJcblx0XHRcdGZvciAoIGluZGV4IGluIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7XG5cdFx0XHRcdFx0cHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTtcblx0XHRcdFx0XHRzcGVjaWFsRWFzaW5nWyBpbmRleCBdID0gZWFzaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gQW5pbWF0aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25zICkge1xuXHR2YXIgcmVzdWx0LFxuXHRcdHN0b3BwZWQsXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGFuaW1hdGlvblByZWZpbHRlcnMubGVuZ3RoLFxuXHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdC8vIERvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3RvclxuXHRcdFx0ZGVsZXRlIHRpY2suZWxlbTtcblx0XHR9KSxcblx0XHR0aWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRcdHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSxcblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjNcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSk7XG5cblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0YW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlzZSh7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7IHNwZWNpYWxFYXNpbmc6IHt9IH0sIG9wdGlvbnMgKSxcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcblx0XHRcdG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucyxcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxuXHRcdFx0dHdlZW5zOiBbXSxcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXG5cdFx0XHRcdFx0XHRhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdFx0fSxcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkge1xuXHRcdFx0XHR2YXIgaW5kZXggPSAwLFxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0XG5cdFx0XHRcdGlmICggZ290b0VuZCApIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9KSxcblx0XHRwcm9wcyA9IGFuaW1hdGlvbi5wcm9wcztcblxuXHRwcm9wRmlsdGVyKCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApO1xuXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IGFuaW1hdGlvblByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTtcblx0XHRpZiAoIHJlc3VsdCApIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0alF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTtcblxuXHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9KVxuXHQpO1xuXG5cdC8vIGF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zXG5cdHJldHVybiBhbmltYXRpb24ucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzIClcblx0XHQuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKVxuXHRcdC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsIClcblx0XHQuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTtcbn1cblxualF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwge1xuXG5cdHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7XG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcHJvcHMgKSApIHtcblx0XHRcdGNhbGxiYWNrID0gcHJvcHM7XG5cdFx0XHRwcm9wcyA9IFsgXCIqXCIgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvcHMgPSBwcm9wcy5zcGxpdChcIiBcIik7XG5cdFx0fVxuXG5cdFx0dmFyIHByb3AsXG5cdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHtcblx0XHRcdHByb3AgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRcdHR3ZWVuZXJzWyBwcm9wIF0gPSB0d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0dHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH1cblx0fSxcblxuXHRwcmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHtcblx0XHRpZiAoIHByZXBlbmQgKSB7XG5cdFx0XHRhbmltYXRpb25QcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFuaW1hdGlvblByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5qUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7XG5cdHZhciBvcHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09IFwib2JqZWN0XCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHtcblx0XHRjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fFxuXHRcdFx0alF1ZXJ5LmlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxuXHRcdGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZ1xuXHR9O1xuXG5cdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5vZmYgPyAwIDogdHlwZW9mIG9wdC5kdXJhdGlvbiA9PT0gXCJudW1iZXJcIiA/IG9wdC5kdXJhdGlvbiA6XG5cdFx0b3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgPyBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXSA6IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBvcHQ7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbiApLmNzcyggXCJvcGFjaXR5XCIsIDAgKS5zaG93KClcblxuXHRcdFx0Ly8gQW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkXG5cdFx0XHQuZW5kKCkuYW5pbWF0ZSh7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH0sXG5cdGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxuXHRcdFx0b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLFxuXHRcdFx0ZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3Rcblx0XHRcdFx0dmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApO1xuXG5cdFx0XHRcdC8vIEVtcHR5IGFuaW1hdGlvbnMsIG9yIGZpbmlzaGluZyByZXNvbHZlcyBpbW1lZGlhdGVseVxuXHRcdFx0XHRpZiAoIGVtcHR5IHx8IGRhdGFfcHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGVxdWV1ZSA9IHRydWUsXG5cdFx0XHRcdGluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyBcInF1ZXVlSG9va3NcIixcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0ZGF0YSA9IGRhdGFfcHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmICh0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlKSApIHtcblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblx0ZmluaXNoOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRpZiAoIHR5cGUgIT09IGZhbHNlICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGluZGV4LFxuXHRcdFx0XHRkYXRhID0gZGF0YV9wcml2LmdldCggdGhpcyApLFxuXHRcdFx0XHRxdWV1ZSA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlXCIgXSxcblx0XHRcdFx0aG9va3MgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgXSxcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0bGVuZ3RoID0gcXVldWUgPyBxdWV1ZS5sZW5ndGggOiAwO1xuXG5cdFx0XHQvLyBFbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJpdmF0ZSBkYXRhXG5cdFx0XHRkYXRhLmZpbmlzaCA9IHRydWU7XG5cblx0XHRcdC8vIEVtcHR5IHRoZSBxdWV1ZSBmaXJzdFxuXHRcdFx0alF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBbXSApO1xuXG5cdFx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnN0b3AgKSB7XG5cdFx0XHRcdGhvb2tzLnN0b3AuY2FsbCggdGhpcywgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7XG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9sZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkge1xuXHRcdFx0XHRcdHF1ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxsKCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVHVybiBvZmYgZmluaXNoaW5nIGZsYWdcblx0XHRcdGRlbGV0ZSBkYXRhLmZpbmlzaDtcblx0XHR9KTtcblx0fVxufSk7XG5cbmpRdWVyeS5lYWNoKFsgXCJ0b2dnbGVcIiwgXCJzaG93XCIsIFwiaGlkZVwiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHR2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHNwZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSBcImJvb2xlYW5cIiA/XG5cdFx0XHRjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOlxuXHRcdFx0dGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSk7XG5cbi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnNcbmpRdWVyeS5lYWNoKHtcblx0c2xpZGVEb3duOiBnZW5GeChcInNob3dcIiksXG5cdHNsaWRlVXA6IGdlbkZ4KFwiaGlkZVwiKSxcblx0c2xpZGVUb2dnbGU6IGdlbkZ4KFwidG9nZ2xlXCIpLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0pO1xuXG5qUXVlcnkudGltZXJzID0gW107XG5qUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdGltZXIsXG5cdFx0aSA9IDAsXG5cdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycztcblxuXHRmeE5vdyA9IGpRdWVyeS5ub3coKTtcblxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XG5cdFx0dGltZXIgPSB0aW1lcnNbIGkgXTtcblx0XHQvLyBDaGVja3MgdGhlIHRpbWVyIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlbW92ZWRcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcblx0fVxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcbn07XG5cbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xuXHRpZiAoIHRpbWVyKCkgKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0YXJ0KCk7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnRpbWVycy5wb3AoKTtcblx0fVxufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5cbmpRdWVyeS5meC5zdGFydCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAoICF0aW1lcklkICkge1xuXHRcdHRpbWVySWQgPSBzZXRJbnRlcnZhbCggalF1ZXJ5LmZ4LnRpY2ssIGpRdWVyeS5meC5pbnRlcnZhbCApO1xuXHR9XG59O1xuXG5qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRjbGVhckludGVydmFsKCB0aW1lcklkICk7XG5cdHRpbWVySWQgPSBudWxsO1xufTtcblxualF1ZXJ5LmZ4LnNwZWVkcyA9IHtcblx0c2xvdzogNjAwLFxuXHRmYXN0OiAyMDAsXG5cdC8vIERlZmF1bHQgc3BlZWRcblx0X2RlZmF1bHQ6IDQwMFxufTtcblxuXG4vLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uXG4vLyBodHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8wNy9qcXVlcnktZGVsYXkvXG5qUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHtcblx0dGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTtcblx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7XG5cdFx0dmFyIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0fTtcblx0fSk7XG59O1xuXG5cbihmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBpT1M8PTUuMSwgQW5kcm9pZDw9NC4yK1xuXHQvLyBEZWZhdWx0IHZhbHVlIGZvciBhIGNoZWNrYm94IHNob3VsZCBiZSBcIm9uXCJcblx0c3VwcG9ydC5jaGVja09uID0gaW5wdXQudmFsdWUgIT09IFwiXCI7XG5cblx0Ly8gU3VwcG9ydDogSUU8PTExK1xuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8PTIuM1xuXHQvLyBPcHRpb25zIGluc2lkZSBkaXNhYmxlZCBzZWxlY3RzIGFyZSBpbmNvcnJlY3RseSBtYXJrZWQgYXMgZGlzYWJsZWRcblx0c2VsZWN0LmRpc2FibGVkID0gdHJ1ZTtcblx0c3VwcG9ydC5vcHREaXNhYmxlZCA9ICFvcHQuZGlzYWJsZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUU8PTExK1xuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59KSgpO1xuXG5cbnZhciBub2RlSG9vaywgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKHtcblx0YXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUgKTtcblx0XHR9KTtcblx0fVxufSk7XG5cbmpRdWVyeS5leHRlbmQoe1xuXHRhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBkb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSBzdHJ1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGF0dHJpYnV0ZXMgYXJlIGxvd2VyY2FzZVxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSB8fFxuXHRcdFx0XHQoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiBub2RlSG9vayApO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJiAocmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHQvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZFxuXHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID9cblx0XHRcdFx0dW5kZWZpbmVkIDpcblx0XHRcdFx0cmV0O1xuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsIHByb3BOYW1lLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdHdoaXRlICk7XG5cblx0XHRpZiAoIGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0d2hpbGUgKCAobmFtZSA9IGF0dHJOYW1lc1tpKytdKSApIHtcblx0XHRcdFx0cHJvcE5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cblx0XHRcdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGdldCBzcGVjaWFsIHRyZWF0bWVudCAoIzEwODcwKVxuXHRcdFx0XHRpZiAoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRcdC8vIFNldCBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHRvIGZhbHNlXG5cdFx0XHRcdFx0ZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIG5hbWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0alF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSApIHtcblx0XHRcdFx0XHR2YXIgdmFsID0gZWxlbS52YWx1ZTtcblx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIHZhbHVlICk7XG5cdFx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnZhbHVlID0gdmFsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0pO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHQvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlXG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gbmFtZTtcblx0fVxufTtcbmpRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1xcdysvZyApLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0dmFyIGdldHRlciA9IGF0dHJIYW5kbGVbIG5hbWUgXSB8fCBqUXVlcnkuZmluZC5hdHRyO1xuXG5cdGF0dHJIYW5kbGVbIG5hbWUgXSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgcmV0LCBoYW5kbGU7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXG5cdFx0XHRoYW5kbGUgPSBhdHRySGFuZGxlWyBuYW1lIF07XG5cdFx0XHRhdHRySGFuZGxlWyBuYW1lIF0gPSByZXQ7XG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XG5cdFx0XHRcdG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdG51bGw7XG5cdFx0XHRhdHRySGFuZGxlWyBuYW1lIF0gPSBoYW5kbGU7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG59KTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKHtcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGVsZXRlIHRoaXNbIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSBdO1xuXHRcdH0pO1xuXHR9XG59KTtcblxualF1ZXJ5LmV4dGVuZCh7XG5cdHByb3BGaXg6IHtcblx0XHRcImZvclwiOiBcImh0bWxGb3JcIixcblx0XHRcImNsYXNzXCI6IFwiY2xhc3NOYW1lXCJcblx0fSxcblxuXHRwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsIG5vdHhtbCxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoICFlbGVtIHx8IG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdG5vdHhtbCA9IG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKTtcblxuXHRcdGlmICggbm90eG1sICkge1xuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHJldHVybiBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkpICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRyZXQgOlxuXHRcdFx0XHQoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApKSAhPT0gbnVsbCA/XG5cdFx0XHRcdHJldCA6XG5cdFx0XHRcdGVsZW1bIG5hbWUgXTtcblx0XHR9XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmhhc0F0dHJpYnV0ZSggXCJ0YWJpbmRleFwiICkgfHwgcmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwgZWxlbS5ocmVmID9cblx0XHRcdFx0XHRlbGVtLnRhYkluZGV4IDpcblx0XHRcdFx0XHQtMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0pO1xuXG5pZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdH07XG59XG5cbmpRdWVyeS5lYWNoKFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59KTtcblxuXG5cblxudmFyIHJjbGFzcyA9IC9bXFx0XFxyXFxuXFxmXS9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKHtcblx0YWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdHByb2NlZWQgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUsXG5cdFx0XHRpID0gMCxcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoO1xuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCB0aGlzLmNsYXNzTmFtZSApICk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoIHByb2NlZWQgKSB7XG5cdFx0XHQvLyBUaGUgZGlzanVuY3Rpb24gaGVyZSBpcyBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIHJlbW92ZUNsYXNzKVxuXHRcdFx0Y2xhc3NlcyA9ICggdmFsdWUgfHwgXCJcIiApLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdGVsZW0gPSB0aGlzWyBpIF07XG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBlbGVtLmNsYXNzTmFtZSA/XG5cdFx0XHRcdFx0KCBcIiBcIiArIGVsZW0uY2xhc3NOYW1lICsgXCIgXCIgKS5yZXBsYWNlKCByY2xhc3MsIFwiIFwiICkgOlxuXHRcdFx0XHRcdFwiIFwiXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoY2xhenogPSBjbGFzc2VzW2orK10pICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPCAwICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhenogKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBvbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBqUXVlcnkudHJpbSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLmNsYXNzTmFtZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdGVsZW0uY2xhc3NOYW1lID0gZmluYWxWYWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0cHJvY2VlZCA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDAgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsZW4gPSB0aGlzLmxlbmd0aDtcblxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgdGhpcy5jbGFzc05hbWUgKSApO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmICggcHJvY2VlZCApIHtcblx0XHRcdGNsYXNzZXMgPSAoIHZhbHVlIHx8IFwiXCIgKS5tYXRjaCggcm5vdHdoaXRlICkgfHwgW107XG5cblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdO1xuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggZWxlbS5jbGFzc05hbWUgP1xuXHRcdFx0XHRcdCggXCIgXCIgKyBlbGVtLmNsYXNzTmFtZSArIFwiIFwiICkucmVwbGFjZSggcmNsYXNzLCBcIiBcIiApIDpcblx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoY2xhenogPSBjbGFzc2VzW2orK10pICkge1xuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPj0gMCApIHtcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhenogKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSB2YWx1ZSA/IGpRdWVyeS50cmltKCBjdXIgKSA6IFwiXCI7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLmNsYXNzTmFtZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdGVsZW0uY2xhc3NOYW1lID0gZmluYWxWYWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHtcblx0XHR2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdGlmICggdHlwZW9mIHN0YXRlVmFsID09PSBcImJvb2xlYW5cIiAmJiB0eXBlID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGksIHRoaXMuY2xhc3NOYW1lLCBzdGF0ZVZhbCksIHN0YXRlVmFsICk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xuXHRcdFx0XHR2YXIgY2xhc3NOYW1lLFxuXHRcdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHRcdHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcblx0XHRcdFx0XHRjbGFzc05hbWVzID0gdmFsdWUubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdO1xuXG5cdFx0XHRcdHdoaWxlICggKGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdKSApIHtcblx0XHRcdFx0XHQvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3Rcblx0XHRcdFx0XHRpZiAoIHNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApICkge1xuXHRcdFx0XHRcdFx0c2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZVxuXHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gc3RydW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRpZiAoIHRoaXMuY2xhc3NOYW1lICkge1xuXHRcdFx0XHRcdC8vIHN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhX3ByaXYuc2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgdGhpcy5jbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0dGhpcy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgPyBcIlwiIDogZGF0YV9wcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoO1xuXHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdGlmICggdGhpc1tpXS5ub2RlVHlwZSA9PT0gMSAmJiAoXCIgXCIgKyB0aGlzW2ldLmNsYXNzTmFtZSArIFwiIFwiKS5yZXBsYWNlKHJjbGFzcywgXCIgXCIpLmluZGV4T2YoIGNsYXNzTmFtZSApID49IDAgKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufSk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIGlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1swXTtcblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyBlbGVtLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRcdHJldC5yZXBsYWNlKHJyZXR1cm4sIFwiXCIpIDpcblx0XHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0XHRyZXQgPT0gbnVsbCA/IFwiXCIgOiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHR2YWwgPSBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSArIFwiXCI7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoXCJzZXRcIiBpbiBob29rcykgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsIFwidmFsdWVcIiApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn0pO1xuXG5qUXVlcnkuZXh0ZW5kKHtcblx0dmFsSG9va3M6IHtcblx0XHRvcHRpb246IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFMTAtMTErXG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKCMxNDY4NiwgIzE0ODU4KVxuXHRcdFx0XHRcdGpRdWVyeS50cmltKCBqUXVlcnkudGV4dCggZWxlbSApICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWxlY3Q6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIiB8fCBpbmRleCA8IDAsXG5cdFx0XHRcdFx0dmFsdWVzID0gb25lID8gbnVsbCA6IFtdLFxuXHRcdFx0XHRcdG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoLFxuXHRcdFx0XHRcdGkgPSBpbmRleCA8IDAgP1xuXHRcdFx0XHRcdFx0bWF4IDpcblx0XHRcdFx0XHRcdG9uZSA/IGluZGV4IDogMDtcblxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIElFNi05IGRvZXNuJ3QgdXBkYXRlIHNlbGVjdGVkIGFmdGVyIGZvcm0gcmVzZXQgKCMyNTUxKVxuXHRcdFx0XHRcdGlmICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXggKSAmJlxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCggc3VwcG9ydC5vcHREaXNhYmxlZCA/ICFvcHRpb24uZGlzYWJsZWQgOiBvcHRpb24uZ2V0QXR0cmlidXRlKCBcImRpc2FibGVkXCIgKSA9PT0gbnVsbCApICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8ICFqUXVlcnkubm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cdFx0XHRcdFx0aWYgKCAob3B0aW9uLnNlbGVjdGVkID0galF1ZXJ5LmluQXJyYXkoIG9wdGlvbi52YWx1ZSwgdmFsdWVzICkgPj0gMCkgKSB7XG5cdFx0XHRcdFx0XHRvcHRpb25TZXQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZvcmNlIGJyb3dzZXJzIHRvIGJlaGF2ZSBjb25zaXN0ZW50bHkgd2hlbiBub24tbWF0Y2hpbmcgdmFsdWUgaXMgc2V0XG5cdFx0XHRcdGlmICggIW9wdGlvblNldCApIHtcblx0XHRcdFx0XHRlbGVtLnNlbGVjdGVkSW5kZXggPSAtMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaChbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoZWxlbSkudmFsKCksIHZhbHVlICkgPj0gMCApO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0aWYgKCAhc3VwcG9ydC5jaGVja09uICkge1xuXHRcdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLmdldCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKFwidmFsdWVcIikgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0pO1xuXG5cblxuXG4vLyBSZXR1cm4galF1ZXJ5IGZvciBhdHRyaWJ1dGVzLW9ubHkgaW5jbHVzaW9uXG5cblxualF1ZXJ5LmVhY2goIChcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIFwiICtcblx0XCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXG5cdFwiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudVwiKS5zcGxpdChcIiBcIiksIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXG5cdC8vIEhhbmRsZSBldmVudCBiaW5kaW5nXG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/XG5cdFx0XHR0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDpcblx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHR9O1xufSk7XG5cbmpRdWVyeS5mbi5leHRlbmQoe1xuXHRob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7XG5cdFx0cmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7XG5cdH0sXG5cblx0YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xuXHR9LFxuXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcblx0XHQvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApXG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyB0aGlzLm9mZiggc2VsZWN0b3IsIFwiKipcIiApIDogdGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG5cdH1cbn0pO1xuXG5cbnZhciBub25jZSA9IGpRdWVyeS5ub3coKTtcblxudmFyIHJxdWVyeSA9ICgvXFw/Lyk7XG5cblxuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDIuM1xuLy8gV29ya2Fyb3VuZCBmYWlsdXJlIHRvIHN0cmluZy1jYXN0IG51bGwgaW5wdXRcbmpRdWVyeS5wYXJzZUpTT04gPSBmdW5jdGlvbiggZGF0YSApIHtcblx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKyBcIlwiICk7XG59O1xuXG5cbi8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmdcbmpRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkge1xuXHR2YXIgeG1sLCB0bXA7XG5cdGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRTlcblx0dHJ5IHtcblx0XHR0bXAgPSBuZXcgRE9NUGFyc2VyKCk7XG5cdFx0eG1sID0gdG1wLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHhtbCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmICggIXhtbCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZXJyb3IoIFwiSW52YWxpZCBYTUw6IFwiICsgZGF0YSApO1xuXHR9XG5cdHJldHVybiB4bWw7XG59O1xuXG5cbnZhclxuXHRyaGFzaCA9IC8jLiokLyxcblx0cnRzID0gLyhbPyZdKV89W14mXSovLFxuXHRyaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvbWcsXG5cdC8vICM3NjUzLCAjODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvblxuXHRybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFxuXHRybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLyxcblx0cnByb3RvY29sID0gL15cXC9cXC8vLFxuXHRydXJsID0gL14oW1xcdy4rLV0rOikoPzpcXC9cXC8oPzpbXlxcLz8jXSpAfCkoW15cXC8/IzpdKikoPzo6KFxcZCspfCl8KS8sXG5cblx0LyogUHJlZmlsdGVyc1xuXHQgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKVxuXHQgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOlxuXHQgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0XG5cdCAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSlcblx0ICogMykga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHRwcmVmaWx0ZXJzID0ge30sXG5cblx0LyogVHJhbnNwb3J0cyBiaW5kaW5nc1xuXHQgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHR0cmFuc3BvcnRzID0ge30sXG5cblx0Ly8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcblxuXHQvLyBEb2N1bWVudCBsb2NhdGlvblxuXHRhamF4TG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24uaHJlZixcblxuXHQvLyBTZWdtZW50IGxvY2F0aW9uIGludG8gcGFydHNcblx0YWpheExvY1BhcnRzID0gcnVybC5leGVjKCBhamF4TG9jYXRpb24udG9Mb3dlckNhc2UoKSApIHx8IFtdO1xuXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcblxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXG5cdHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuXHRcdH1cblxuXHRcdHZhciBkYXRhVHlwZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZnVuYyApICkge1xuXHRcdFx0Ly8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvblxuXHRcdFx0d2hpbGUgKCAoZGF0YVR5cGUgPSBkYXRhVHlwZXNbaSsrXSkgKSB7XG5cdFx0XHRcdC8vIFByZXBlbmQgaWYgcmVxdWVzdGVkXG5cdFx0XHRcdGlmICggZGF0YVR5cGVbMF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdChzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10pLnB1c2goIGZ1bmMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzXG5mdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkge1xuXG5cdHZhciBpbnNwZWN0ZWQgPSB7fSxcblx0XHRzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTtcblxuXHRmdW5jdGlvbiBpbnNwZWN0KCBkYXRhVHlwZSApIHtcblx0XHR2YXIgc2VsZWN0ZWQ7XG5cdFx0aW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTtcblx0XHRqUXVlcnkuZWFjaCggc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdLCBmdW5jdGlvbiggXywgcHJlZmlsdGVyT3JGYWN0b3J5ICkge1xuXHRcdFx0dmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTtcblx0XHRcdGlmICggdHlwZW9mIGRhdGFUeXBlT3JUcmFuc3BvcnQgPT09IFwic3RyaW5nXCIgJiYgIXNlZWtpbmdUcmFuc3BvcnQgJiYgIWluc3BlY3RlZFsgZGF0YVR5cGVPclRyYW5zcG9ydCBdICkge1xuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBzZWxlY3RlZDtcblx0fVxuXG5cdHJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdICkgfHwgIWluc3BlY3RlZFsgXCIqXCIgXSAmJiBpbnNwZWN0KCBcIipcIiApO1xufVxuXG4vLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnNcbi8vIHRoYXQgdGFrZXMgXCJmbGF0XCIgb3B0aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpXG4vLyBGaXhlcyAjOTg4N1xuZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7XG5cdHZhciBrZXksIGRlZXAsXG5cdFx0ZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9O1xuXG5cdGZvciAoIGtleSBpbiBzcmMgKSB7XG5cdFx0aWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHQoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoZGVlcCA9IHt9KSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcblx0XHR9XG5cdH1cblx0aWYgKCBkZWVwICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OlxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuXG5cdHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSxcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XG5cblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3Ncblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG5cdFx0ZGF0YVR5cGVzLnNoaWZ0KCk7XG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXHRcdC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXNcblx0XHRmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHtcblx0XHRcdGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArIFwiIFwiICsgZGF0YVR5cGVzWzBdIF0gKSB7XG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XG5cdFx0XHRcdGZpcnN0RGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblx0XHQvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTtcblxuXHQvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXNcblx0aWYgKCBkYXRhVHlwZXNbIDEgXSApIHtcblx0XHRmb3IgKCBjb252IGluIHMuY29udmVydGVycyApIHtcblx0XHRcdGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252IF07XG5cdFx0fVxuXHR9XG5cblx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlXG5cdHdoaWxlICggY3VycmVudCApIHtcblxuXHRcdGlmICggcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdICkge1xuXHRcdFx0anFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgdGhlIGRhdGFGaWx0ZXIgaWYgcHJvdmlkZWRcblx0XHRpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAmJiBzLmRhdGFGaWx0ZXIgKSB7XG5cdFx0XHRyZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTtcblx0XHR9XG5cblx0XHRwcmV2ID0gY3VycmVudDtcblx0XHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0XHRpZiAoIGN1cnJlbnQgKSB7XG5cblx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXG5cdFx0XHRpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xuXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XG5cdFx0XHRcdFx0Zm9yICggY29udjIgaW4gY29udmVydGVycyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XG5cdFx0XHRcdFx0XHR0bXAgPSBjb252Mi5zcGxpdCggXCIgXCIgKTtcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0XG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcblx0XHRcdFx0XHRcdFx0aWYgKCBjb252ICkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgc1sgXCJ0aHJvd3NcIiBdICkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgc3RhdGU6IFwicGFyc2VyZXJyb3JcIiwgZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50IH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xufVxuXG5qUXVlcnkuZXh0ZW5kKHtcblxuXHQvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXNcblx0YWN0aXZlOiAwLFxuXG5cdC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3Rcblx0bGFzdE1vZGlmaWVkOiB7fSxcblx0ZXRhZzoge30sXG5cblx0YWpheFNldHRpbmdzOiB7XG5cdFx0dXJsOiBhamF4TG9jYXRpb24sXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBhamF4TG9jUGFydHNbIDEgXSApLFxuXHRcdGdsb2JhbDogdHJ1ZSxcblx0XHRwcm9jZXNzRGF0YTogdHJ1ZSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixcblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL3htbC8sXG5cdFx0XHRodG1sOiAvaHRtbC8sXG5cdFx0XHRqc29uOiAvanNvbi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogalF1ZXJ5LnBhcnNlSlNPTixcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxuXHRcdFx0Y2FjaGVVUkwsXG5cdFx0XHQvLyBSZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcsXG5cdFx0XHRyZXNwb25zZUhlYWRlcnMsXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXHRcdFx0Ly8gQ3Jvc3MtZG9tYWluIGRldGVjdGlvbiB2YXJzXG5cdFx0XHRwYXJ0cyxcblx0XHRcdC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZFxuXHRcdFx0ZmlyZUdsb2JhbHMsXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXG5cdFx0XHRpLFxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cdFx0XHQvLyBDYWxsYmFja3MgY29udGV4dFxuXHRcdFx0Y2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiYgKCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cblx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdGpRdWVyeS5ldmVudCxcblx0XHRcdC8vIERlZmVycmVkc1xuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0c3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSxcblx0XHRcdC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuXHRcdFx0Ly8gVGhlIGpxWEhSIHN0YXRlXG5cdFx0XHRzdGF0ZSA9IDAsXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2Vcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxuXHRcdFx0Ly8gRmFrZSB4aHJcblx0XHRcdGpxWEhSID0ge1xuXHRcdFx0XHRyZWFkeVN0YXRlOiAwLFxuXG5cdFx0XHRcdC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWRcblx0XHRcdFx0Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoO1xuXHRcdFx0XHRcdGlmICggc3RhdGUgPT09IDIgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIChtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnNbIG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkgXSA9IG1hdGNoWyAyIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBSYXcgc3RyaW5nXG5cdFx0XHRcdGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlID09PSAyID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYWNoZXMgdGhlIGhlYWRlclxuXHRcdFx0XHRzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0dmFyIGxuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdGlmICggIXN0YXRlICkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyXG5cdFx0XHRcdG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdGlmICggIXN0YXRlICkge1xuXHRcdFx0XHRcdFx0cy5taW1lVHlwZSA9IHR5cGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRcdHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7XG5cdFx0XHRcdFx0dmFyIGNvZGU7XG5cdFx0XHRcdFx0aWYgKCBtYXAgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIHN0YXRlIDwgMiApIHtcblx0XHRcdFx0XHRcdFx0Zm9yICggY29kZSBpbiBtYXAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFjayBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xuXHRcdFx0XHRcdFx0XHRcdHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3Ncblx0XHRcdFx0XHRcdFx0anFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhbmNlbCB0aGUgcmVxdWVzdFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XG5cdFx0XHRcdFx0aWYgKCB0cmFuc3BvcnQgKSB7XG5cdFx0XHRcdFx0XHR0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkb25lKCAwLCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcblx0XHRkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApLmNvbXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5hZGQ7XG5cdFx0anFYSFIuc3VjY2VzcyA9IGpxWEhSLmRvbmU7XG5cdFx0anFYSFIuZXJyb3IgPSBqcVhIUi5mYWlsO1xuXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggY2hhcmFjdGVyICgjNzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXG5cdFx0Ly8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICgjMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSlcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgYWpheExvY2F0aW9uICkgKyBcIlwiICkucmVwbGFjZSggcmhhc2gsIFwiXCIgKVxuXHRcdFx0LnJlcGxhY2UoIHJwcm90b2NvbCwgYWpheExvY1BhcnRzWyAxIF0gKyBcIi8vXCIgKTtcblxuXHRcdC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNFxuXHRcdHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7XG5cblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XG5cdFx0cy5kYXRhVHlwZXMgPSBqUXVlcnkudHJpbSggcy5kYXRhVHlwZSB8fCBcIipcIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXG5cdFx0Ly8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHdlIGhhdmUgYSBwcm90b2NvbDpob3N0OnBvcnQgbWlzbWF0Y2hcblx0XHRpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHtcblx0XHRcdHBhcnRzID0gcnVybC5leGVjKCBzLnVybC50b0xvd2VyQ2FzZSgpICk7XG5cdFx0XHRzLmNyb3NzRG9tYWluID0gISEoIHBhcnRzICYmXG5cdFx0XHRcdCggcGFydHNbIDEgXSAhPT0gYWpheExvY1BhcnRzWyAxIF0gfHwgcGFydHNbIDIgXSAhPT0gYWpheExvY1BhcnRzWyAyIF0gfHxcblx0XHRcdFx0XHQoIHBhcnRzWyAzIF0gfHwgKCBwYXJ0c1sgMSBdID09PSBcImh0dHA6XCIgPyBcIjgwXCIgOiBcIjQ0M1wiICkgKSAhPT1cblx0XHRcdFx0XHRcdCggYWpheExvY1BhcnRzWyAzIF0gfHwgKCBhamF4TG9jUGFydHNbIDEgXSA9PT0gXCJodHRwOlwiID8gXCI4MFwiIDogXCI0NDNcIiApICkgKVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmdcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHByZWZpbHRlcnNcblx0XHRpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlXG5cdFx0aWYgKCBzdGF0ZSA9PT0gMiApIHtcblx0XHRcdHJldHVybiBqcVhIUjtcblx0XHR9XG5cblx0XHQvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0b1xuXHRcdC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICgjMTUxMTgpXG5cdFx0ZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7XG5cblx0XHQvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzXG5cdFx0aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcihcImFqYXhTdGFydFwiKTtcblx0XHR9XG5cblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcblx0XHRzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcblxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XG5cdFx0cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XG5cblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2Vcblx0XHQvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb25cblx0XHRjYWNoZVVSTCA9IHMudXJsO1xuXG5cdFx0Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnRcblx0XHRpZiAoICFzLmhhc0NvbnRlbnQgKSB7XG5cblx0XHRcdC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlLCBhcHBlbmQgZGF0YSB0byB1cmxcblx0XHRcdGlmICggcy5kYXRhICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9ICggcy51cmwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YSApO1xuXHRcdFx0XHQvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5XG5cdFx0XHRcdGRlbGV0ZSBzLmRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBhbnRpLWNhY2hlIGluIHVybCBpZiBuZWVkZWRcblx0XHRcdGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdHMudXJsID0gcnRzLnRlc3QoIGNhY2hlVVJMICkgP1xuXG5cdFx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhICdfJyBwYXJhbWV0ZXIsIHNldCBpdHMgdmFsdWVcblx0XHRcdFx0XHRjYWNoZVVSTC5yZXBsYWNlKCBydHMsIFwiJDFfPVwiICsgbm9uY2UrKyApIDpcblxuXHRcdFx0XHRcdC8vIE90aGVyd2lzZSBhZGQgb25lIHRvIHRoZSBlbmRcblx0XHRcdFx0XHRjYWNoZVVSTCArICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyBub25jZSsrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTW9kaWZpZWQtU2luY2VcIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Ob25lLU1hdGNoXCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50XG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiLCBzLmNvbnRlbnRUeXBlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZVxuXHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoXG5cdFx0XHRcIkFjY2VwdFwiLFxuXHRcdFx0cy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWzBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWzBdIF0gKyAoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxuXHRcdFx0XHRzLmFjY2VwdHNbIFwiKlwiIF1cblx0XHQpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uXG5cdFx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcblx0XHRpZiAoIHMuYmVmb3JlU2VuZCAmJiAoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7XG5cdFx0XHQvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm5cblx0XHRcdHJldHVybiBqcVhIUi5hYm9ydCgpO1xuXHRcdH1cblxuXHRcdC8vIEFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvblxuXHRcdHN0ckFib3J0ID0gXCJhYm9ydFwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzXG5cdFx0Zm9yICggaSBpbiB7IHN1Y2Nlc3M6IDEsIGVycm9yOiAxLCBjb21wbGV0ZTogMSB9ICkge1xuXHRcdFx0anFYSFJbIGkgXSggc1sgaSBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IHRyYW5zcG9ydFxuXHRcdHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0XG5cdFx0aWYgKCAhdHJhbnNwb3J0ICkge1xuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IDE7XG5cblx0XHRcdC8vIFNlbmQgZ2xvYmFsIGV2ZW50XG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcblx0XHRcdH1cblx0XHRcdC8vIFRpbWVvdXRcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xuXHRcdFx0XHR0aW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KFwidGltZW91dFwiKTtcblx0XHRcdFx0fSwgcy50aW1lb3V0ICk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHN0YXRlID0gMTtcblx0XHRcdFx0dHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdFx0Ly8gUHJvcGFnYXRlIGV4Y2VwdGlvbiBhcyBlcnJvciBpZiBub3QgZG9uZVxuXHRcdFx0XHRpZiAoIHN0YXRlIDwgMiApIHtcblx0XHRcdFx0XHRkb25lKCAtMSwgZSApO1xuXHRcdFx0XHQvLyBTaW1wbHkgcmV0aHJvdyBvdGhlcndpc2Vcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gQ2FsbGVkIG9uY2Vcblx0XHRcdGlmICggc3RhdGUgPT09IDIgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhdGUgaXMgXCJkb25lXCIgbm93XG5cdFx0XHRzdGF0ZSA9IDI7XG5cblx0XHRcdC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzXG5cdFx0XHRpZiAoIHRpbWVvdXRUaW1lciApIHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJMYXN0LU1vZGlmaWVkXCIpO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJldGFnXCIpO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIG5vIGNvbnRlbnRcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09IFwiSEVBRFwiICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vY29udGVudFwiO1xuXG5cdFx0XHRcdC8vIGlmIG5vdCBtb2RpZmllZFxuXHRcdFx0XHR9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub3Rtb2RpZmllZFwiO1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTtcblx0XHRcdFx0XHRzdWNjZXNzID0gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHRlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdGlzU3VjY2VzcyA9ICFlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXJcblx0XHRcdFx0aWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcihcImFqYXhTdG9wXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpxWEhSO1xuXHR9LFxuXG5cdGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBcImpzb25cIiApO1xuXHR9LFxuXG5cdGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgXCJzY3JpcHRcIiApO1xuXHR9XG59KTtcblxualF1ZXJ5LmVhY2goIFsgXCJnZXRcIiwgXCJwb3N0XCIgXSwgZnVuY3Rpb24oIGksIG1ldGhvZCApIHtcblx0alF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuXHRcdC8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkuYWpheCh7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdGRhdGFUeXBlOiB0eXBlLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdHN1Y2Nlc3M6IGNhbGxiYWNrXG5cdFx0fSk7XG5cdH07XG59KTtcblxuXG5qUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsICkge1xuXHRyZXR1cm4galF1ZXJ5LmFqYXgoe1xuXHRcdHVybDogdXJsLFxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0ZGF0YVR5cGU6IFwic2NyaXB0XCIsXG5cdFx0YXN5bmM6IGZhbHNlLFxuXHRcdGdsb2JhbDogZmFsc2UsXG5cdFx0XCJ0aHJvd3NcIjogdHJ1ZVxuXHR9KTtcbn07XG5cblxualF1ZXJ5LmZuLmV4dGVuZCh7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbC5jYWxsKHRoaXMsIGkpICk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXNbIDAgXSApIHtcblxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcblx0XHRcdHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHdyYXAubWFwKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IHRoaXM7XG5cblx0XHRcdFx0d2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkge1xuXHRcdFx0XHRcdGVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVsZW07XG5cdFx0XHR9KS5hcHBlbmQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKHRoaXMsIGkpICk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XG5cblx0XHRcdGlmICggY29udGVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cblx0d3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGlzRnVuY3Rpb24gPyBodG1sLmNhbGwodGhpcywgaSkgOiBodG1sICk7XG5cdFx0fSk7XG5cdH0sXG5cblx0dW53cmFwOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCBcImJvZHlcIiApICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7XG5cdFx0XHR9XG5cdFx0fSkuZW5kKCk7XG5cdH1cbn0pO1xuXG5cbmpRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdC8vIFN1cHBvcnQ6IE9wZXJhIDw9IDEyLjEyXG5cdC8vIE9wZXJhIHJlcG9ydHMgb2Zmc2V0V2lkdGhzIGFuZCBvZmZzZXRIZWlnaHRzIGxlc3MgdGhhbiB6ZXJvIG9uIHNvbWUgZWxlbWVudHNcblx0cmV0dXJuIGVsZW0ub2Zmc2V0V2lkdGggPD0gMCAmJiBlbGVtLm9mZnNldEhlaWdodCA8PSAwO1xufTtcbmpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gIWpRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVuKCBlbGVtICk7XG59O1xuXG5cblxuXG52YXIgcjIwID0gLyUyMC9nLFxuXHRyYnJhY2tldCA9IC9cXFtcXF0kLyxcblx0ckNSTEYgPSAvXFxyP1xcbi9nLFxuXHRyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksXG5cdHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtcblxuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xuXHR2YXIgbmFtZTtcblxuXHRpZiAoIGpRdWVyeS5pc0FycmF5KCBvYmogKSApIHtcblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cdFx0XHRcdC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci5cblx0XHRcdFx0YWRkKCBwcmVmaXgsIHYgKTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguXG5cdFx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgPyBpIDogXCJcIiApICsgXCJdXCIsIHYsIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHR9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgalF1ZXJ5LnR5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXHRcdC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArIG5hbWUgKyBcIl1cIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblx0XHQvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uXG5cdFx0YWRkKCBwcmVmaXgsIG9iaiApO1xuXHR9XG59XG5cbi8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mXG4vLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmdcbmpRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHtcblx0dmFyIHByZWZpeCxcblx0XHRzID0gW10sXG5cdFx0YWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0XHQvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHJldHVybiBpdHMgdmFsdWVcblx0XHRcdHZhbHVlID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgPyB2YWx1ZSgpIDogKCB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICk7XG5cdFx0XHRzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArIFwiPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSApO1xuXHRcdH07XG5cblx0Ly8gU2V0IHRyYWRpdGlvbmFsIHRvIHRydWUgZm9yIGpRdWVyeSA8PSAxLjMuMiBiZWhhdmlvci5cblx0aWYgKCB0cmFkaXRpb25hbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHRyYWRpdGlvbmFsID0galF1ZXJ5LmFqYXhTZXR0aW5ncyAmJiBqUXVlcnkuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsO1xuXHR9XG5cblx0Ly8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy5cblx0aWYgKCBqUXVlcnkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHtcblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0pO1xuXG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoe1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSlcblx0XHQuZmlsdGVyKGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cblx0XHRcdC8vIFVzZSAuaXMoIFwiOmRpc2FibGVkXCIgKSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3Jrc1xuXHRcdFx0cmV0dXJuIHRoaXMubmFtZSAmJiAhalF1ZXJ5KCB0aGlzICkuaXMoIFwiOmRpc2FibGVkXCIgKSAmJlxuXHRcdFx0XHRyc3VibWl0dGFibGUudGVzdCggdGhpcy5ub2RlTmFtZSApICYmICFyc3VibWl0dGVyVHlwZXMudGVzdCggdHlwZSApICYmXG5cdFx0XHRcdCggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTtcblx0XHR9KVxuXHRcdC5tYXAoZnVuY3Rpb24oIGksIGVsZW0gKSB7XG5cdFx0XHR2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7XG5cblx0XHRcdHJldHVybiB2YWwgPT0gbnVsbCA/XG5cdFx0XHRcdG51bGwgOlxuXHRcdFx0XHRqUXVlcnkuaXNBcnJheSggdmFsICkgP1xuXHRcdFx0XHRcdGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0XHRcdFx0fSkgOlxuXHRcdFx0XHRcdHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHR9KS5nZXQoKTtcblx0fVxufSk7XG5cblxualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdH0gY2F0Y2goIGUgKSB7fVxufTtcblxudmFyIHhocklkID0gMCxcblx0eGhyQ2FsbGJhY2tzID0ge30sXG5cdHhoclN1Y2Nlc3NTdGF0dXMgPSB7XG5cdFx0Ly8gZmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDBcblx0XHQwOiAyMDAsXG5cdFx0Ly8gU3VwcG9ydDogSUU5XG5cdFx0Ly8gIzE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0XG5cdFx0MTIyMzogMjA0XG5cdH0sXG5cdHhoclN1cHBvcnRlZCA9IGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCk7XG5cbi8vIFN1cHBvcnQ6IElFOVxuLy8gT3BlbiByZXF1ZXN0cyBtdXN0IGJlIG1hbnVhbGx5IGFib3J0ZWQgb24gdW5sb2FkICgjNTI4MClcbi8vIFNlZSBodHRwczovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9rYi8yODU2NzQ2IGZvciBtb3JlIGluZm9cbmlmICggd2luZG93LmF0dGFjaEV2ZW50ICkge1xuXHR3aW5kb3cuYXR0YWNoRXZlbnQoIFwib251bmxvYWRcIiwgZnVuY3Rpb24oKSB7XG5cdFx0Zm9yICggdmFyIGtleSBpbiB4aHJDYWxsYmFja3MgKSB7XG5cdFx0XHR4aHJDYWxsYmFja3NbIGtleSBdKCk7XG5cdFx0fVxuXHR9KTtcbn1cblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHR2YXIgY2FsbGJhY2s7XG5cblx0Ly8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdFxuXHRpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0dmFyIGksXG5cdFx0XHRcdFx0eGhyID0gb3B0aW9ucy54aHIoKSxcblx0XHRcdFx0XHRpZCA9ICsreGhySWQ7XG5cblx0XHRcdFx0eGhyLm9wZW4oIG9wdGlvbnMudHlwZSwgb3B0aW9ucy51cmwsIG9wdGlvbnMuYXN5bmMsIG9wdGlvbnMudXNlcm5hbWUsIG9wdGlvbnMucGFzc3dvcmQgKTtcblxuXHRcdFx0XHQvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRcdHhoclsgaSBdID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcblx0XHRcdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXJcblx0XHRcdFx0Ly8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZVxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxuXHRcdFx0XHQvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cClcblx0XHRcdFx0Ly8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbXCJYLVJlcXVlc3RlZC1XaXRoXCJdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbXCJYLVJlcXVlc3RlZC1XaXRoXCJdID0gXCJYTUxIdHRwUmVxdWVzdFwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IGhlYWRlcnNcblx0XHRcdFx0Zm9yICggaSBpbiBoZWFkZXJzICkge1xuXHRcdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIHhockNhbGxiYWNrc1sgaWQgXTtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSB4aHIub25sb2FkID0geGhyLm9uZXJyb3IgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJhYm9ydFwiICkge1xuXHRcdFx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcImVycm9yXCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBmaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgIzg2MDUsICMxNDIwN1xuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0XG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHhoclN1Y2Nlc3NTdGF0dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHQsXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRTlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEFjY2Vzc2luZyBiaW5hcnktZGF0YSByZXNwb25zZVRleHQgdGhyb3dzIGFuIGV4Y2VwdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gKCMxMTQyNilcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ID09PSBcInN0cmluZ1wiID8ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiB4aHIucmVzcG9uc2VUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHR9IDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcblx0XHRcdFx0eGhyLm9uZXJyb3IgPSBjYWxsYmFjayhcImVycm9yXCIpO1xuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSB4aHJDYWxsYmFja3NbIGlkIF0gPSBjYWxsYmFjayhcImFib3J0XCIpO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Ly8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKVxuXHRcdFx0XHRcdHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdFx0Ly8gIzE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSk7XG5cblxuXG5cbi8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlXG5qUXVlcnkuYWpheFNldHVwKHtcblx0YWNjZXB0czoge1xuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwiXG5cdH0sXG5cdGNvbnRlbnRzOiB7XG5cdFx0c2NyaXB0OiAvKD86amF2YXxlY21hKXNjcmlwdC9cblx0fSxcblx0Y29udmVydGVyczoge1xuXHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fVxuXHR9XG59KTtcblxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRzLmNhY2hlID0gZmFsc2U7XG5cdH1cblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMudHlwZSA9IFwiR0VUXCI7XG5cdH1cbn0pO1xuXG4vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnRcbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiByZXF1ZXN0c1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0dmFyIHNjcmlwdCwgY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0c2NyaXB0ID0galF1ZXJ5KFwiPHNjcmlwdD5cIikucHJvcCh7XG5cdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0Y2hhcnNldDogcy5zY3JpcHRDaGFyc2V0LFxuXHRcdFx0XHRcdHNyYzogcy51cmxcblx0XHRcdFx0fSkub24oXG5cdFx0XHRcdFx0XCJsb2FkIGVycm9yXCIsXG5cdFx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkge1xuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTtcblx0XHRcdH0sXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0pO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoe1xuXHRqc29ucDogXCJjYWxsYmFja1wiLFxuXHRqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArIFwiX1wiICsgKCBub25jZSsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0pO1xuXG4vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHNcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xuXG5cdHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lcixcblx0XHRqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgP1xuXHRcdFx0XCJ1cmxcIiA6XG5cdFx0XHR0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICYmICEoIHMuY29udGVudFR5cGUgfHwgXCJcIiApLmluZGV4T2YoXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIikgJiYgcmpzb25wLnRlc3QoIHMuZGF0YSApICYmIFwiZGF0YVwiXG5cdFx0KTtcblxuXHQvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgXCJqc29ucFwiIG9yIHdlIGhhdmUgYSBwYXJhbWV0ZXIgdG8gc2V0XG5cdGlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9PT0gXCJqc29ucFwiICkge1xuXG5cdFx0Ly8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdFxuXHRcdGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xuXHRcdH1cblxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cblx0XHRzLmNvbnZlcnRlcnNbXCJzY3JpcHQganNvblwiXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIGZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoZnVuY3Rpb24oKSB7XG5cdFx0XHQvLyBSZXN0b3JlIHByZWV4aXN0aW5nIHZhbHVlXG5cdFx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47XG5cblx0XHRcdC8vIFNhdmUgYmFjayBhcyBmcmVlXG5cdFx0XHRpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkge1xuXHRcdFx0XHQvLyBtYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcblx0XHRcdFx0cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO1xuXG5cdFx0XHRcdC8vIHNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2Vcblx0XHRcdFx0b2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2Vcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSk7XG5cblx0XHQvLyBEZWxlZ2F0ZSB0byBzY3JpcHRcblx0XHRyZXR1cm4gXCJzY3JpcHRcIjtcblx0fVxufSk7XG5cblxuXG5cbi8vIGRhdGE6IHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsIGRlZmF1bHRzIHRvIGRvY3VtZW50XG4vLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nXG5qUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkge1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGtlZXBTY3JpcHRzID0gY29udGV4dDtcblx0XHRjb250ZXh0ID0gZmFsc2U7XG5cdH1cblx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cblx0dmFyIHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApLFxuXHRcdHNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW107XG5cblx0Ly8gU2luZ2xlIHRhZ1xuXHRpZiAoIHBhcnNlZCApIHtcblx0XHRyZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsxXSApIF07XG5cdH1cblxuXHRwYXJzZWQgPSBqUXVlcnkuYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLy8gS2VlcCBhIGNvcHkgb2YgdGhlIG9sZCBsb2FkIG1ldGhvZFxudmFyIF9sb2FkID0galF1ZXJ5LmZuLmxvYWQ7XG5cbi8qKlxuICogTG9hZCBhIHVybCBpbnRvIGEgcGFnZVxuICovXG5qUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7XG5cdGlmICggdHlwZW9mIHVybCAhPT0gXCJzdHJpbmdcIiAmJiBfbG9hZCApIHtcblx0XHRyZXR1cm4gX2xvYWQuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9XG5cblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZihcIiBcIik7XG5cblx0aWYgKCBvZmYgPj0gMCApIHtcblx0XHRzZWxlY3RvciA9IGpRdWVyeS50cmltKCB1cmwuc2xpY2UoIG9mZiApICk7XG5cdFx0dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTtcblx0fVxuXG5cdC8vIElmIGl0J3MgYSBmdW5jdGlvblxuXHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoe1xuXHRcdFx0dXJsOiB1cmwsXG5cblx0XHRcdC8vIGlmIFwidHlwZVwiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiBcIkdFVFwiIG1ldGhvZCB3aWxsIGJlIHVzZWRcblx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRkYXRhVHlwZTogXCJodG1sXCIsXG5cdFx0XHRkYXRhOiBwYXJhbXNcblx0XHR9KS5kb25lKGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XG5cblx0XHRcdC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFja1xuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XG5cblx0XHRcdHNlbGYuaHRtbCggc2VsZWN0b3IgP1xuXG5cdFx0XHRcdC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdlxuXHRcdFx0XHQvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnNcblx0XHRcdFx0alF1ZXJ5KFwiPGRpdj5cIikuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0fSkuY29tcGxldGUoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkge1xuXHRcdFx0c2VsZi5lYWNoKCBjYWxsYmFjaywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApO1xuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG4vLyBBdHRhY2ggYSBidW5jaCBvZiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2ZW50c1xualF1ZXJ5LmVhY2goIFsgXCJhamF4U3RhcnRcIiwgXCJhamF4U3RvcFwiLCBcImFqYXhDb21wbGV0ZVwiLCBcImFqYXhFcnJvclwiLCBcImFqYXhTdWNjZXNzXCIsIFwiYWpheFNlbmRcIiBdLCBmdW5jdGlvbiggaSwgdHlwZSApIHtcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7XG5cdH07XG59KTtcblxuXG5cblxualF1ZXJ5LmV4cHIuZmlsdGVycy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4galF1ZXJ5LmdyZXAoalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9KS5sZW5ndGg7XG59O1xuXG5cblxuXG52YXIgZG9jRWxlbSA9IHdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbi8qKlxuICogR2V0cyBhIHdpbmRvdyBmcm9tIGFuIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93KCBlbGVtICkge1xuXHRyZXR1cm4galF1ZXJ5LmlzV2luZG93KCBlbGVtICkgPyBlbGVtIDogZWxlbS5ub2RlVHlwZSA9PT0gOSAmJiBlbGVtLmRlZmF1bHRWaWV3O1xufVxuXG5qUXVlcnkub2Zmc2V0ID0ge1xuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApLFxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuXHRcdFx0cHJvcHMgPSB7fTtcblxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cblx0XHRjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpO1xuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcblx0XHRjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkgJiZcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoXCJhdXRvXCIpID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0aW9ucyApICkge1xuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgY3VyT2Zmc2V0ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKHtcblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0XHRqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHR2YXIgZG9jRWxlbSwgd2luLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdGJveCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH0sXG5cdFx0XHRkb2MgPSBlbGVtICYmIGVsZW0ub3duZXJEb2N1bWVudDtcblxuXHRcdGlmICggIWRvYyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdC8vIE1ha2Ugc3VyZSBpdCdzIG5vdCBhIGRpc2Nvbm5lY3RlZCBET00gbm9kZVxuXHRcdGlmICggIWpRdWVyeS5jb250YWlucyggZG9jRWxlbSwgZWxlbSApICkge1xuXHRcdFx0cmV0dXJuIGJveDtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBCbGFja0JlcnJ5IDUsIGlPUyAzIChvcmlnaW5hbCBpUGhvbmUpXG5cdFx0Ly8gSWYgd2UgZG9uJ3QgaGF2ZSBnQkNSLCBqdXN0IHVzZSAwLDAgcmF0aGVyIHRoYW4gZXJyb3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gc3RydW5kZWZpbmVkICkge1xuXHRcdFx0Ym94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR9XG5cdFx0d2luID0gZ2V0V2luZG93KCBkb2MgKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBib3gudG9wICsgd2luLnBhZ2VZT2Zmc2V0IC0gZG9jRWxlbS5jbGllbnRUb3AsXG5cdFx0XHRsZWZ0OiBib3gubGVmdCArIHdpbi5wYWdlWE9mZnNldCAtIGRvY0VsZW0uY2xpZW50TGVmdFxuXHRcdH07XG5cdH0sXG5cblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0cGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblxuXHRcdC8vIEZpeGVkIGVsZW1lbnRzIGFyZSBvZmZzZXQgZnJvbSB3aW5kb3cgKHBhcmVudE9mZnNldCA9IHt0b3A6MCwgbGVmdDogMH0sIGJlY2F1c2UgaXQgaXMgaXRzIG9ubHkgb2Zmc2V0IHBhcmVudFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblx0XHRcdC8vIEFzc3VtZSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaXMgdGhlcmUgd2hlbiBjb21wdXRlZCBwb3NpdGlvbiBpcyBmaXhlZFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBHZXQgKnJlYWwqIG9mZnNldFBhcmVudFxuXHRcdFx0b2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQoKTtcblxuXHRcdFx0Ly8gR2V0IGNvcnJlY3Qgb2Zmc2V0c1xuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcblx0XHRcdGlmICggIWpRdWVyeS5ub2RlTmFtZSggb2Zmc2V0UGFyZW50WyAwIF0sIFwiaHRtbFwiICkgKSB7XG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IG9mZnNldFBhcmVudC5vZmZzZXQoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJzXG5cdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsgMCBdLCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsgMCBdLCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50IHx8IGRvY0VsZW07XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmICggIWpRdWVyeS5ub2RlTmFtZSggb2Zmc2V0UGFyZW50LCBcImh0bWxcIiApICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSApIHtcblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9mZnNldFBhcmVudCB8fCBkb2NFbGVtO1xuXHRcdH0pO1xuXHR9XG59KTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXHRcdFx0dmFyIHdpbiA9IGdldFdpbmRvdyggZWxlbSApO1xuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luZG93LnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbmRvdy5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCwgbnVsbCApO1xuXHR9O1xufSk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaTw3KywgQ2hyb21lPDM3K1xuLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb25cbi8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NFxuLy8gQmxpbmsgYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjI5MjgwXG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7XG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSk7XG5cblxuLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBIZWlnaHQ6IFwiaGVpZ2h0XCIsIFdpZHRoOiBcIndpZHRoXCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7XG5cdGpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6IFwiaW5uZXJcIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsIFwiXCI6IFwib3V0ZXJcIiArIG5hbWUgfSwgZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XG5cdFx0Ly8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoXG5cdFx0alF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSBcImJvb2xlYW5cIiApLFxuXHRcdFx0XHRleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/IFwibWFyZ2luXCIgOiBcImJvcmRlclwiICk7XG5cblx0XHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIGRvYztcblxuXHRcdFx0XHRpZiAoIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkge1xuXHRcdFx0XHRcdC8vIEFzIG9mIDUvOC8yMDEyIHRoaXMgd2lsbCB5aWVsZCBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgTW9iaWxlIFNhZmFyaSwgYnV0IHRoZXJlXG5cdFx0XHRcdFx0Ly8gaXNuJ3QgYSB3aG9sZSBsb3Qgd2UgY2FuIGRvLiBTZWUgcHVsbCByZXF1ZXN0IGF0IHRoaXMgVVJMIGZvciBkaXNjdXNzaW9uOlxuXHRcdFx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNzY0XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBcImNsaWVudFwiICsgbmFtZSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodFxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGRvY1sgXCJjbGllbnRcIiArIG5hbWUgXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOlxuXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7XG5cdFx0XHR9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSwgbnVsbCApO1xuXHRcdH07XG5cdH0pO1xufSk7XG5cblxuLy8gVGhlIG51bWJlciBvZiBlbGVtZW50cyBjb250YWluZWQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXRcbmpRdWVyeS5mbi5zaXplID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmxlbmd0aDtcbn07XG5cbmpRdWVyeS5mbi5hbmRTZWxmID0galF1ZXJ5LmZuLmFkZEJhY2s7XG5cblxuXG5cbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2Vcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxuXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cblxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeTtcblx0fSk7XG59XG5cblxuXG5cbnZhclxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG5cblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0XyQgPSB3aW5kb3cuJDtcblxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy4kID0gXyQ7XG5cdH1cblxuXHRpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeTtcbn07XG5cbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXG4vLyAoIzcxMDIjY29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpXG4vLyBhbmQgQ29tbW9uSlMgZm9yIGJyb3dzZXIgZW11bGF0b3JzICgjMTM1NjYpXG5pZiAoIHR5cGVvZiBub0dsb2JhbCA9PT0gc3RydW5kZWZpbmVkICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cblxuXG5cbnJldHVybiBqUXVlcnk7XG5cbn0pKTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5qcyIsImpxdWVyeS0yLjEuNC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsIi8qIVxyXG4gKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYyLjEuNFxyXG4gKiBodHRwOi8vanF1ZXJ5LmNvbS9cclxuICpcclxuICogSW5jbHVkZXMgU2l6emxlLmpzXHJcbiAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vXHJcbiAqXHJcbiAqIENvcHlyaWdodCAyMDA1LCAyMDE0IGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnNcclxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXHJcbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcclxuICpcclxuICogRGF0ZTogMjAxNS0wNC0yOFQxNjowMVpcclxuICovXHJcblxyXG4oZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcclxuXHJcblx0aWYgKCB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIiApIHtcclxuXHRcdC8vIEZvciBDb21tb25KUyBhbmQgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgd2hlcmUgYSBwcm9wZXIgYHdpbmRvd2BcclxuXHRcdC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuXHJcblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxyXG5cdFx0Ly8gKHN1Y2ggYXMgTm9kZS5qcyksIGV4cG9zZSBhIGZhY3RvcnkgYXMgbW9kdWxlLmV4cG9ydHMuXHJcblx0XHQvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLlxyXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xyXG5cdFx0Ly8gU2VlIHRpY2tldCAjMTQ1NDkgZm9yIG1vcmUgaW5mby5cclxuXHRcdG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cclxuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxyXG5cdFx0XHRmdW5jdGlvbiggdyApIHtcclxuXHRcdFx0XHRpZiAoICF3LmRvY3VtZW50ICkge1xyXG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeSggdyApO1xyXG5cdFx0XHR9O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRmYWN0b3J5KCBnbG9iYWwgKTtcclxuXHR9XHJcblxyXG4vLyBQYXNzIHRoaXMgaWYgd2luZG93IGlzIG5vdCBkZWZpbmVkIHlldFxyXG59KHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcclxuXHJcbi8vIFN1cHBvcnQ6IEZpcmVmb3ggMTgrXHJcbi8vIENhbid0IGJlIGluIHN0cmljdCBtb2RlLCBzZXZlcmFsIGxpYnMgaW5jbHVkaW5nIEFTUC5ORVQgdHJhY2VcclxuLy8gdGhlIHN0YWNrIHZpYSBhcmd1bWVudHMuY2FsbGVyLmNhbGxlZSBhbmQgRmlyZWZveCBkaWVzIGlmXHJcbi8vIHlvdSB0cnkgdG8gdHJhY2UgdGhyb3VnaCBcInVzZSBzdHJpY3RcIiBjYWxsIGNoYWlucy4gKCMxMzMzNSlcclxuLy9cclxuXHJcbnZhciBhcnIgPSBbXTtcclxuXHJcbnZhciBzbGljZSA9IGFyci5zbGljZTtcclxuXHJcbnZhciBjb25jYXQgPSBhcnIuY29uY2F0O1xyXG5cclxudmFyIHB1c2ggPSBhcnIucHVzaDtcclxuXHJcbnZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7XHJcblxyXG52YXIgY2xhc3MydHlwZSA9IHt9O1xyXG5cclxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcclxuXHJcbnZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5O1xyXG5cclxudmFyIHN1cHBvcnQgPSB7fTtcclxuXHJcblxyXG5cclxudmFyXHJcblx0Ly8gVXNlIHRoZSBjb3JyZWN0IGRvY3VtZW50IGFjY29yZGluZ2x5IHdpdGggd2luZG93IGFyZ3VtZW50IChzYW5kYm94KVxyXG5cdGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50LFxyXG5cclxuXHR2ZXJzaW9uID0gXCIyLjEuNFwiLFxyXG5cclxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxyXG5cdGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcclxuXHRcdC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJ1xyXG5cdFx0Ly8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZClcclxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XHJcblx0fSxcclxuXHJcblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjFcclxuXHQvLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1BcclxuXHRydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZyxcclxuXHJcblx0Ly8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nXHJcblx0cm1zUHJlZml4ID0gL14tbXMtLyxcclxuXHRyZGFzaEFscGhhID0gLy0oW1xcZGEtel0pL2dpLFxyXG5cclxuXHQvLyBVc2VkIGJ5IGpRdWVyeS5jYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpXHJcblx0ZmNhbWVsQ2FzZSA9IGZ1bmN0aW9uKCBhbGwsIGxldHRlciApIHtcclxuXHRcdHJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTtcclxuXHR9O1xyXG5cclxualF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHtcclxuXHQvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkXHJcblx0anF1ZXJ5OiB2ZXJzaW9uLFxyXG5cclxuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LFxyXG5cclxuXHQvLyBTdGFydCB3aXRoIGFuIGVtcHR5IHNlbGVjdG9yXHJcblx0c2VsZWN0b3I6IFwiXCIsXHJcblxyXG5cdC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMFxyXG5cdGxlbmd0aDogMCxcclxuXHJcblx0dG9BcnJheTogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xyXG5cdH0sXHJcblxyXG5cdC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1JcclxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxyXG5cdGdldDogZnVuY3Rpb24oIG51bSApIHtcclxuXHRcdHJldHVybiBudW0gIT0gbnVsbCA/XHJcblxyXG5cdFx0XHQvLyBSZXR1cm4ganVzdCB0aGUgb25lIGVsZW1lbnQgZnJvbSB0aGUgc2V0XHJcblx0XHRcdCggbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXSApIDpcclxuXHJcblx0XHRcdC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgY2xlYW4gYXJyYXlcclxuXHRcdFx0c2xpY2UuY2FsbCggdGhpcyApO1xyXG5cdH0sXHJcblxyXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcclxuXHQvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldClcclxuXHRwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHtcclxuXHJcblx0XHQvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldFxyXG5cdFx0dmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApO1xyXG5cclxuXHRcdC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpXHJcblx0XHRyZXQucHJldk9iamVjdCA9IHRoaXM7XHJcblx0XHRyZXQuY29udGV4dCA9IHRoaXMuY29udGV4dDtcclxuXHJcblx0XHQvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldFxyXG5cdFx0cmV0dXJuIHJldDtcclxuXHR9LFxyXG5cclxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxyXG5cdC8vIChZb3UgY2FuIHNlZWQgdGhlIGFyZ3VtZW50cyB3aXRoIGFuIGFycmF5IG9mIGFyZ3MsIGJ1dCB0aGlzIGlzXHJcblx0Ly8gb25seSB1c2VkIGludGVybmFsbHkuKVxyXG5cdGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjaywgYXJncyApIHtcclxuXHRcdHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2ssIGFyZ3MgKTtcclxuXHR9LFxyXG5cclxuXHRtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcclxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCh0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcclxuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTtcclxuXHRcdH0pKTtcclxuXHR9LFxyXG5cclxuXHRzbGljZTogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xyXG5cdH0sXHJcblxyXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiB0aGlzLmVxKCAwICk7XHJcblx0fSxcclxuXHJcblx0bGFzdDogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lcSggLTEgKTtcclxuXHR9LFxyXG5cclxuXHRlcTogZnVuY3Rpb24oIGkgKSB7XHJcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXHJcblx0XHRcdGogPSAraSArICggaSA8IDAgPyBsZW4gOiAwICk7XHJcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzW2pdIF0gOiBbXSApO1xyXG5cdH0sXHJcblxyXG5cdGVuZDogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IobnVsbCk7XHJcblx0fSxcclxuXHJcblx0Ly8gRm9yIGludGVybmFsIHVzZSBvbmx5LlxyXG5cdC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLlxyXG5cdHB1c2g6IHB1c2gsXHJcblx0c29ydDogYXJyLnNvcnQsXHJcblx0c3BsaWNlOiBhcnIuc3BsaWNlXHJcbn07XHJcblxyXG5qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkge1xyXG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcclxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1swXSB8fCB7fSxcclxuXHRcdGkgPSAxLFxyXG5cdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcclxuXHRcdGRlZXAgPSBmYWxzZTtcclxuXHJcblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxyXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XHJcblx0XHRkZWVwID0gdGFyZ2V0O1xyXG5cclxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcclxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9O1xyXG5cdFx0aSsrO1xyXG5cdH1cclxuXHJcblx0Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpXHJcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFqUXVlcnkuaXNGdW5jdGlvbih0YXJnZXQpICkge1xyXG5cdFx0dGFyZ2V0ID0ge307XHJcblx0fVxyXG5cclxuXHQvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcclxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcclxuXHRcdHRhcmdldCA9IHRoaXM7XHJcblx0XHRpLS07XHJcblx0fVxyXG5cclxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcclxuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcclxuXHRcdGlmICggKG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSkgIT0gbnVsbCApIHtcclxuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxyXG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XHJcblx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XHJcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcclxuXHJcblx0XHRcdFx0Ly8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcFxyXG5cdFx0XHRcdGlmICggdGFyZ2V0ID09PSBjb3B5ICkge1xyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcclxuXHRcdFx0XHRpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KGNvcHkpIHx8IChjb3B5SXNBcnJheSA9IGpRdWVyeS5pc0FycmF5KGNvcHkpKSApICkge1xyXG5cdFx0XHRcdFx0aWYgKCBjb3B5SXNBcnJheSApIHtcclxuXHRcdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdO1xyXG5cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KHNyYykgPyBzcmMgOiB7fTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cclxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcclxuXHJcblx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0gY29weTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XHJcblx0cmV0dXJuIHRhcmdldDtcclxufTtcclxuXHJcbmpRdWVyeS5leHRlbmQoe1xyXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxyXG5cdGV4cGFuZG86IFwialF1ZXJ5XCIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xcRC9nLCBcIlwiICksXHJcblxyXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXHJcblx0aXNSZWFkeTogdHJ1ZSxcclxuXHJcblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoIG1zZyApO1xyXG5cdH0sXHJcblxyXG5cdG5vb3A6IGZ1bmN0aW9uKCkge30sXHJcblxyXG5cdGlzRnVuY3Rpb246IGZ1bmN0aW9uKCBvYmogKSB7XHJcblx0XHRyZXR1cm4galF1ZXJ5LnR5cGUob2JqKSA9PT0gXCJmdW5jdGlvblwiO1xyXG5cdH0sXHJcblxyXG5cdGlzQXJyYXk6IEFycmF5LmlzQXJyYXksXHJcblxyXG5cdGlzV2luZG93OiBmdW5jdGlvbiggb2JqICkge1xyXG5cdFx0cmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdztcclxuXHR9LFxyXG5cclxuXHRpc051bWVyaWM6IGZ1bmN0aW9uKCBvYmogKSB7XHJcblx0XHQvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAobnVsbHx0cnVlfGZhbHNlfFwiXCIpXHJcblx0XHQvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzIChcIjB4Li4uXCIpXHJcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cclxuXHRcdC8vIGFkZGluZyAxIGNvcnJlY3RzIGxvc3Mgb2YgcHJlY2lzaW9uIGZyb20gcGFyc2VGbG9hdCAoIzE1MTAwKVxyXG5cdFx0cmV0dXJuICFqUXVlcnkuaXNBcnJheSggb2JqICkgJiYgKG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICsgMSkgPj0gMDtcclxuXHR9LFxyXG5cclxuXHRpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xyXG5cdFx0Ly8gTm90IHBsYWluIG9iamVjdHM6XHJcblx0XHQvLyAtIEFueSBvYmplY3Qgb3IgdmFsdWUgd2hvc2UgaW50ZXJuYWwgW1tDbGFzc11dIHByb3BlcnR5IGlzIG5vdCBcIltvYmplY3QgT2JqZWN0XVwiXHJcblx0XHQvLyAtIERPTSBub2Rlc1xyXG5cdFx0Ly8gLSB3aW5kb3dcclxuXHRcdGlmICggalF1ZXJ5LnR5cGUoIG9iaiApICE9PSBcIm9iamVjdFwiIHx8IG9iai5ub2RlVHlwZSB8fCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBvYmouY29uc3RydWN0b3IgJiZcclxuXHRcdFx0XHQhaGFzT3duLmNhbGwoIG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsIFwiaXNQcm90b3R5cGVPZlwiICkgKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJZiB0aGUgZnVuY3Rpb24gaGFzbid0IHJldHVybmVkIGFscmVhZHksIHdlJ3JlIGNvbmZpZGVudCB0aGF0XHJcblx0XHQvLyB8b2JqfCBpcyBhIHBsYWluIG9iamVjdCwgY3JlYXRlZCBieSB7fSBvciBjb25zdHJ1Y3RlZCB3aXRoIG5ldyBPYmplY3RcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH0sXHJcblxyXG5cdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XHJcblx0XHR2YXIgbmFtZTtcclxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9LFxyXG5cclxuXHR0eXBlOiBmdW5jdGlvbiggb2JqICkge1xyXG5cdFx0aWYgKCBvYmogPT0gbnVsbCApIHtcclxuXHRcdFx0cmV0dXJuIG9iaiArIFwiXCI7XHJcblx0XHR9XHJcblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMCwgaU9TPDYgKGZ1bmN0aW9uaXNoIFJlZ0V4cClcclxuXHRcdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XHJcblx0XHRcdGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwob2JqKSBdIHx8IFwib2JqZWN0XCIgOlxyXG5cdFx0XHR0eXBlb2Ygb2JqO1xyXG5cdH0sXHJcblxyXG5cdC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0XHJcblx0Z2xvYmFsRXZhbDogZnVuY3Rpb24oIGNvZGUgKSB7XHJcblx0XHR2YXIgc2NyaXB0LFxyXG5cdFx0XHRpbmRpcmVjdCA9IGV2YWw7XHJcblxyXG5cdFx0Y29kZSA9IGpRdWVyeS50cmltKCBjb2RlICk7XHJcblxyXG5cdFx0aWYgKCBjb2RlICkge1xyXG5cdFx0XHQvLyBJZiB0aGUgY29kZSBpbmNsdWRlcyBhIHZhbGlkLCBwcm9sb2d1ZSBwb3NpdGlvblxyXG5cdFx0XHQvLyBzdHJpY3QgbW9kZSBwcmFnbWEsIGV4ZWN1dGUgY29kZSBieSBpbmplY3RpbmcgYVxyXG5cdFx0XHQvLyBzY3JpcHQgdGFnIGludG8gdGhlIGRvY3VtZW50LlxyXG5cdFx0XHRpZiAoIGNvZGUuaW5kZXhPZihcInVzZSBzdHJpY3RcIikgPT09IDEgKSB7XHJcblx0XHRcdFx0c2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcclxuXHRcdFx0XHRzY3JpcHQudGV4dCA9IGNvZGU7XHJcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIE90aGVyd2lzZSwgYXZvaWQgdGhlIERPTSBub2RlIGNyZWF0aW9uLCBpbnNlcnRpb25cclxuXHRcdFx0Ly8gYW5kIHJlbW92YWwgYnkgdXNpbmcgYW4gaW5kaXJlY3QgZ2xvYmFsIGV2YWxcclxuXHRcdFx0XHRpbmRpcmVjdCggY29kZSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0Ly8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlc1xyXG5cdC8vIFN1cHBvcnQ6IElFOS0xMStcclxuXHQvLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpXHJcblx0Y2FtZWxDYXNlOiBmdW5jdGlvbiggc3RyaW5nICkge1xyXG5cdFx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XHJcblx0fSxcclxuXHJcblx0bm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xyXG5cdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XHJcblx0fSxcclxuXHJcblx0Ly8gYXJncyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxyXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrLCBhcmdzICkge1xyXG5cdFx0dmFyIHZhbHVlLFxyXG5cdFx0XHRpID0gMCxcclxuXHRcdFx0bGVuZ3RoID0gb2JqLmxlbmd0aCxcclxuXHRcdFx0aXNBcnJheSA9IGlzQXJyYXlsaWtlKCBvYmogKTtcclxuXHJcblx0XHRpZiAoIGFyZ3MgKSB7XHJcblx0XHRcdGlmICggaXNBcnJheSApIHtcclxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcclxuXHRcdFx0XHRcdHZhbHVlID0gY2FsbGJhY2suYXBwbHkoIG9ialsgaSBdLCBhcmdzICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRmb3IgKCBpIGluIG9iaiApIHtcclxuXHRcdFx0XHRcdHZhbHVlID0gY2FsbGJhY2suYXBwbHkoIG9ialsgaSBdLCBhcmdzICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdC8vIEEgc3BlY2lhbCwgZmFzdCwgY2FzZSBmb3IgdGhlIG1vc3QgY29tbW9uIHVzZSBvZiBlYWNoXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAoIGlzQXJyYXkgKSB7XHJcblx0XHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XHJcblx0XHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApO1xyXG5cclxuXHRcdFx0XHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkge1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Zm9yICggaSBpbiBvYmogKSB7XHJcblx0XHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApO1xyXG5cclxuXHRcdFx0XHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkge1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gb2JqO1xyXG5cdH0sXHJcblxyXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xXHJcblx0dHJpbTogZnVuY3Rpb24oIHRleHQgKSB7XHJcblx0XHRyZXR1cm4gdGV4dCA9PSBudWxsID9cclxuXHRcdFx0XCJcIiA6XHJcblx0XHRcdCggdGV4dCArIFwiXCIgKS5yZXBsYWNlKCBydHJpbSwgXCJcIiApO1xyXG5cdH0sXHJcblxyXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcclxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XHJcblx0XHR2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcclxuXHJcblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xyXG5cdFx0XHRpZiAoIGlzQXJyYXlsaWtlKCBPYmplY3QoYXJyKSApICkge1xyXG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggcmV0LFxyXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XHJcblx0XHRcdFx0XHRbIGFyciBdIDogYXJyXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwdXNoLmNhbGwoIHJldCwgYXJyICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmV0O1xyXG5cdH0sXHJcblxyXG5cdGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7XHJcblx0XHRyZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7XHJcblx0fSxcclxuXHJcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xyXG5cdFx0dmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLFxyXG5cdFx0XHRqID0gMCxcclxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcclxuXHJcblx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcclxuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XHJcblx0XHR9XHJcblxyXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcclxuXHJcblx0XHRyZXR1cm4gZmlyc3Q7XHJcblx0fSxcclxuXHJcblx0Z3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkge1xyXG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcclxuXHRcdFx0bWF0Y2hlcyA9IFtdLFxyXG5cdFx0XHRpID0gMCxcclxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxyXG5cdFx0XHRjYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7XHJcblxyXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xyXG5cdFx0Ly8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb25cclxuXHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcclxuXHRcdFx0aWYgKCBjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0ICkge1xyXG5cdFx0XHRcdG1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG1hdGNoZXM7XHJcblx0fSxcclxuXHJcblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XHJcblx0bWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7XHJcblx0XHR2YXIgdmFsdWUsXHJcblx0XHRcdGkgPSAwLFxyXG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGgsXHJcblx0XHRcdGlzQXJyYXkgPSBpc0FycmF5bGlrZSggZWxlbXMgKSxcclxuXHRcdFx0cmV0ID0gW107XHJcblxyXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyIG5ldyB2YWx1ZXNcclxuXHRcdGlmICggaXNBcnJheSApIHtcclxuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XHJcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XHJcblxyXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcclxuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmb3IgKCBpIGluIGVsZW1zICkge1xyXG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xyXG5cclxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XHJcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXHJcblx0XHRyZXR1cm4gY29uY2F0LmFwcGx5KCBbXSwgcmV0ICk7XHJcblx0fSxcclxuXHJcblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXHJcblx0Z3VpZDogMSxcclxuXHJcblx0Ly8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55XHJcblx0Ly8gYXJndW1lbnRzLlxyXG5cdHByb3h5OiBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7XHJcblx0XHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcclxuXHJcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHR0bXAgPSBmblsgY29udGV4dCBdO1xyXG5cdFx0XHRjb250ZXh0ID0gZm47XHJcblx0XHRcdGZuID0gdG1wO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjXHJcblx0XHQvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLlxyXG5cdFx0aWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIGZuICkgKSB7XHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU2ltdWxhdGVkIGJpbmRcclxuXHRcdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTtcclxuXHRcdHByb3h5ID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWRcclxuXHRcdHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrO1xyXG5cclxuXHRcdHJldHVybiBwcm94eTtcclxuXHR9LFxyXG5cclxuXHRub3c6IERhdGUubm93LFxyXG5cclxuXHQvLyBqUXVlcnkuc3VwcG9ydCBpcyBub3QgdXNlZCBpbiBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0cyBhdHRhY2ggdGhlaXJcclxuXHQvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LlxyXG5cdHN1cHBvcnQ6IHN1cHBvcnRcclxufSk7XHJcblxyXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcclxualF1ZXJ5LmVhY2goXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yXCIuc3BsaXQoXCIgXCIpLCBmdW5jdGlvbihpLCBuYW1lKSB7XHJcblx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XHJcbn0pO1xyXG5cclxuZnVuY3Rpb24gaXNBcnJheWxpa2UoIG9iaiApIHtcclxuXHJcblx0Ly8gU3VwcG9ydDogaU9TIDguMiAobm90IHJlcHJvZHVjaWJsZSBpbiBzaW11bGF0b3IpXHJcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxyXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xyXG5cdC8vIHJlZ2FyZGluZyBOb2RlbGlzdCBsZW5ndGggaW4gSUVcclxuXHR2YXIgbGVuZ3RoID0gXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcclxuXHRcdHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7XHJcblxyXG5cdGlmICggdHlwZSA9PT0gXCJmdW5jdGlvblwiIHx8IGpRdWVyeS5pc1dpbmRvdyggb2JqICkgKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRpZiAoIG9iai5ub2RlVHlwZSA9PT0gMSAmJiBsZW5ndGggKSB7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XHJcblx0XHR0eXBlb2YgbGVuZ3RoID09PSBcIm51bWJlclwiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqO1xyXG59XHJcbnZhciBTaXp6bGUgPVxyXG4vKiFcclxuICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMi4wLXByZVxyXG4gKiBodHRwOi8vc2l6emxlanMuY29tL1xyXG4gKlxyXG4gKiBDb3B5cmlnaHQgMjAwOCwgMjAxNCBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXHJcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxyXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXHJcbiAqXHJcbiAqIERhdGU6IDIwMTQtMTItMTZcclxuICovXHJcbihmdW5jdGlvbiggd2luZG93ICkge1xyXG5cclxudmFyIGksXHJcblx0c3VwcG9ydCxcclxuXHRFeHByLFxyXG5cdGdldFRleHQsXHJcblx0aXNYTUwsXHJcblx0dG9rZW5pemUsXHJcblx0Y29tcGlsZSxcclxuXHRzZWxlY3QsXHJcblx0b3V0ZXJtb3N0Q29udGV4dCxcclxuXHRzb3J0SW5wdXQsXHJcblx0aGFzRHVwbGljYXRlLFxyXG5cclxuXHQvLyBMb2NhbCBkb2N1bWVudCB2YXJzXHJcblx0c2V0RG9jdW1lbnQsXHJcblx0ZG9jdW1lbnQsXHJcblx0ZG9jRWxlbSxcclxuXHRkb2N1bWVudElzSFRNTCxcclxuXHRyYnVnZ3lRU0EsXHJcblx0cmJ1Z2d5TWF0Y2hlcyxcclxuXHRtYXRjaGVzLFxyXG5cdGNvbnRhaW5zLFxyXG5cclxuXHQvLyBJbnN0YW5jZS1zcGVjaWZpYyBkYXRhXHJcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcclxuXHRwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsXHJcblx0ZGlycnVucyA9IDAsXHJcblx0ZG9uZSA9IDAsXHJcblx0Y2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXHJcblx0dG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksXHJcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXHJcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XHJcblx0XHRpZiAoIGEgPT09IGIgKSB7XHJcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9LFxyXG5cclxuXHQvLyBHZW5lcmFsLXB1cnBvc2UgY29uc3RhbnRzXHJcblx0TUFYX05FR0FUSVZFID0gMSA8PCAzMSxcclxuXHJcblx0Ly8gSW5zdGFuY2UgbWV0aG9kc1xyXG5cdGhhc093biA9ICh7fSkuaGFzT3duUHJvcGVydHksXHJcblx0YXJyID0gW10sXHJcblx0cG9wID0gYXJyLnBvcCxcclxuXHRwdXNoX25hdGl2ZSA9IGFyci5wdXNoLFxyXG5cdHB1c2ggPSBhcnIucHVzaCxcclxuXHRzbGljZSA9IGFyci5zbGljZSxcclxuXHQvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRpdmVcclxuXHQvLyBodHRwOi8vanNwZXJmLmNvbS90aG9yLWluZGV4b2YtdnMtZm9yLzVcclxuXHRpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7XHJcblx0XHR2YXIgaSA9IDAsXHJcblx0XHRcdGxlbiA9IGxpc3QubGVuZ3RoO1xyXG5cdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XHJcblx0XHRcdGlmICggbGlzdFtpXSA9PT0gZWxlbSApIHtcclxuXHRcdFx0XHRyZXR1cm4gaTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIC0xO1xyXG5cdH0sXHJcblxyXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxyXG5cclxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXHJcblxyXG5cdC8vIFdoaXRlc3BhY2UgY2hhcmFjdGVycyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZVxyXG5cdHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCIsXHJcblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zeW50YXgvI2NoYXJhY3RlcnNcclxuXHRjaGFyYWN0ZXJFbmNvZGluZyA9IFwiKD86XFxcXFxcXFwufFtcXFxcdy1dfFteXFxcXHgwMC1cXFxceGEwXSkrXCIsXHJcblxyXG5cdC8vIExvb3NlbHkgbW9kZWxlZCBvbiBDU1MgaWRlbnRpZmllciBjaGFyYWN0ZXJzXHJcblx0Ly8gQW4gdW5xdW90ZWQgdmFsdWUgc2hvdWxkIGJlIGEgQ1NTIGlkZW50aWZpZXIgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnNcclxuXHQvLyBQcm9wZXIgc3ludGF4OiBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjdmFsdWUtZGVmLWlkZW50aWZpZXJcclxuXHRpZGVudGlmaWVyID0gY2hhcmFjdGVyRW5jb2RpbmcucmVwbGFjZSggXCJ3XCIsIFwidyNcIiApLFxyXG5cclxuXHQvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnNcclxuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGNoYXJhY3RlckVuY29kaW5nICsgXCIpKD86XCIgKyB3aGl0ZXNwYWNlICtcclxuXHRcdC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpXHJcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xyXG5cdFx0Ly8gXCJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdXCJcclxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgKyB3aGl0ZXNwYWNlICtcclxuXHRcdFwiKlxcXFxdXCIsXHJcblxyXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArIFwiKSg/OlxcXFwoKFwiICtcclxuXHRcdC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6XHJcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcclxuXHRcdFwiKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8XCIgK1xyXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXHJcblx0XHRcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIiArIGF0dHJpYnV0ZXMgKyBcIikqKXxcIiArXHJcblx0XHQvLyAzLiBhbnl0aGluZyBlbHNlIChjYXB0dXJlIDIpXHJcblx0XHRcIi4qXCIgK1xyXG5cdFx0XCIpXFxcXCl8KVwiLFxyXG5cclxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXHJcblx0cndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCIrXCIsIFwiZ1wiICksXHJcblx0cnRyaW0gPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIit8KCg/Ol58W15cXFxcXFxcXF0pKD86XFxcXFxcXFwuKSopXCIgKyB3aGl0ZXNwYWNlICsgXCIrJFwiLCBcImdcIiApLFxyXG5cclxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcclxuXHRyY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcclxuXHJcblx0cmF0dHJpYnV0ZVF1b3RlcyA9IG5ldyBSZWdFeHAoIFwiPVwiICsgd2hpdGVzcGFjZSArIFwiKihbXlxcXFxdJ1xcXCJdKj8pXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXF1cIiwgXCJnXCIgKSxcclxuXHJcblx0cnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSxcclxuXHRyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgaWRlbnRpZmllciArIFwiJFwiICksXHJcblxyXG5cdG1hdGNoRXhwciA9IHtcclxuXHRcdFwiSURcIjogbmV3IFJlZ0V4cCggXCJeIyhcIiArIGNoYXJhY3RlckVuY29kaW5nICsgXCIpXCIgKSxcclxuXHRcdFwiQ0xBU1NcIjogbmV3IFJlZ0V4cCggXCJeXFxcXC4oXCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArIFwiKVwiICksXHJcblx0XHRcIlRBR1wiOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBjaGFyYWN0ZXJFbmNvZGluZy5yZXBsYWNlKCBcIndcIiwgXCJ3KlwiICkgKyBcIilcIiApLFxyXG5cdFx0XCJBVFRSXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgYXR0cmlidXRlcyApLFxyXG5cdFx0XCJQU0VVRE9cIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXHJcblx0XHRcIkNISUxEXCI6IG5ldyBSZWdFeHAoIFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xyXG5cdFx0XHRcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgd2hpdGVzcGFjZSArIFwiKig/OihbKy1dfClcIiArIHdoaXRlc3BhY2UgK1xyXG5cdFx0XHRcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcclxuXHRcdFwiYm9vbFwiOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxyXG5cdFx0Ly8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpXHJcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXHJcblx0XHRcIm5lZWRzQ29udGV4dFwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgK1xyXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiIClcclxuXHR9LFxyXG5cclxuXHRyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcclxuXHRyaGVhZGVyID0gL15oXFxkJC9pLFxyXG5cclxuXHRybmF0aXZlID0gL15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3LyxcclxuXHJcblx0Ly8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzXHJcblx0cnF1aWNrRXhwciA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLFxyXG5cclxuXHRyc2libGluZyA9IC9bK35dLyxcclxuXHRyZXNjYXBlID0gLyd8XFxcXC9nLFxyXG5cclxuXHQvLyBDU1MgZXNjYXBlcyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXHJcblx0cnVuZXNjYXBlID0gbmV3IFJlZ0V4cCggXCJcXFxcXFxcXChbXFxcXGRhLWZdezEsNn1cIiArIHdoaXRlc3BhY2UgKyBcIj98KFwiICsgd2hpdGVzcGFjZSArIFwiKXwuKVwiLCBcImlnXCIgKSxcclxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UgKSB7XHJcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZWQgLSAweDEwMDAwO1xyXG5cdFx0Ly8gTmFOIG1lYW5zIG5vbi1jb2RlcG9pbnRcclxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3g8MjRcclxuXHRcdC8vIFdvcmthcm91bmQgZXJyb25lb3VzIG51bWVyaWMgaW50ZXJwcmV0YXRpb24gb2YgK1wiMHhcIlxyXG5cdFx0cmV0dXJuIGhpZ2ggIT09IGhpZ2ggfHwgZXNjYXBlZFdoaXRlc3BhY2UgP1xyXG5cdFx0XHRlc2NhcGVkIDpcclxuXHRcdFx0aGlnaCA8IDAgP1xyXG5cdFx0XHRcdC8vIEJNUCBjb2RlcG9pbnRcclxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcclxuXHRcdFx0XHQvLyBTdXBwbGVtZW50YWwgUGxhbmUgY29kZXBvaW50IChzdXJyb2dhdGUgcGFpcilcclxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcclxuXHR9LFxyXG5cclxuXHQvLyBVc2VkIGZvciBpZnJhbWVzXHJcblx0Ly8gU2VlIHNldERvY3VtZW50KClcclxuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcclxuXHQvLyBlcnJvciBpbiBJRVxyXG5cdHVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcclxuXHRcdHNldERvY3VtZW50KCk7XHJcblx0fTtcclxuXHJcbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXHJcbnRyeSB7XHJcblx0cHVzaC5hcHBseShcclxuXHRcdChhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2RlcyApKSxcclxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXHJcblx0KTtcclxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMFxyXG5cdC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHlcclxuXHRhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlO1xyXG59IGNhdGNoICggZSApIHtcclxuXHRwdXNoID0geyBhcHBseTogYXJyLmxlbmd0aCA/XHJcblxyXG5cdFx0Ly8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGVcclxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcclxuXHRcdFx0cHVzaF9uYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbChlbHMpICk7XHJcblx0XHR9IDpcclxuXHJcblx0XHQvLyBTdXBwb3J0OiBJRTw5XHJcblx0XHQvLyBPdGhlcndpc2UgYXBwZW5kIGRpcmVjdGx5XHJcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XHJcblx0XHRcdHZhciBqID0gdGFyZ2V0Lmxlbmd0aCxcclxuXHRcdFx0XHRpID0gMDtcclxuXHRcdFx0Ly8gQ2FuJ3QgdHJ1c3QgTm9kZUxpc3QubGVuZ3RoXHJcblx0XHRcdHdoaWxlICggKHRhcmdldFtqKytdID0gZWxzW2krK10pICkge31cclxuXHRcdFx0dGFyZ2V0Lmxlbmd0aCA9IGogLSAxO1xyXG5cdFx0fVxyXG5cdH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XHJcblx0dmFyIG1hdGNoLCBlbGVtLCBtLCBub2RlVHlwZSxcclxuXHRcdC8vIFFTQSB2YXJzXHJcblx0XHRpLCBncm91cHMsIG9sZCwgbmlkLCBuZXdDb250ZXh0LCBuZXdTZWxlY3RvcjtcclxuXHJcblx0aWYgKCAoIGNvbnRleHQgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IHByZWZlcnJlZERvYyApICE9PSBkb2N1bWVudCApIHtcclxuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XHJcblx0fVxyXG5cclxuXHRjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDtcclxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcclxuXHRub2RlVHlwZSA9IGNvbnRleHQubm9kZVR5cGU7XHJcblxyXG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxyXG5cdFx0bm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkge1xyXG5cclxuXHRcdHJldHVybiByZXN1bHRzO1xyXG5cdH1cclxuXHJcblx0aWYgKCAhc2VlZCAmJiBkb2N1bWVudElzSFRNTCApIHtcclxuXHJcblx0XHQvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIHdoZW4gcG9zc2libGUgKGUuZy4sIG5vdCB1bmRlciBEb2N1bWVudEZyYWdtZW50KVxyXG5cdFx0aWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApKSApIHtcclxuXHRcdFx0Ly8gU3BlZWQtdXA6IFNpenpsZShcIiNJRFwiKVxyXG5cdFx0XHRpZiAoIChtID0gbWF0Y2hbMV0pICkge1xyXG5cdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XHJcblx0XHRcdFx0XHRlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApO1xyXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVybnNcclxuXHRcdFx0XHRcdC8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgKGpRdWVyeSAjNjk2MylcclxuXHRcdFx0XHRcdGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7XHJcblx0XHRcdFx0XHRcdC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSwgT3BlcmEsIGFuZCBXZWJraXQgcmV0dXJuIGl0ZW1zXHJcblx0XHRcdFx0XHRcdC8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxyXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XHJcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQvLyBDb250ZXh0IGlzIG5vdCBhIGRvY3VtZW50XHJcblx0XHRcdFx0XHRpZiAoIGNvbnRleHQub3duZXJEb2N1bWVudCAmJiAoZWxlbSA9IGNvbnRleHQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbSApKSAmJlxyXG5cdFx0XHRcdFx0XHRjb250YWlucyggY29udGV4dCwgZWxlbSApICYmIGVsZW0uaWQgPT09IG0gKSB7XHJcblx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTcGVlZC11cDogU2l6emxlKFwiVEFHXCIpXHJcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzJdICkge1xyXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICkgKTtcclxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcclxuXHJcblx0XHRcdC8vIFNwZWVkLXVwOiBTaXp6bGUoXCIuQ0xBU1NcIilcclxuXHRcdFx0fSBlbHNlIGlmICggKG0gPSBtYXRjaFszXSkgJiYgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkge1xyXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBRU0EgcGF0aFxyXG5cdFx0aWYgKCBzdXBwb3J0LnFzYSAmJiAoIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkpICkge1xyXG5cdFx0XHRuaWQgPSBvbGQgPSBleHBhbmRvO1xyXG5cdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcclxuXHRcdFx0bmV3U2VsZWN0b3IgPSBub2RlVHlwZSAhPT0gMSAmJiBzZWxlY3RvcjtcclxuXHJcblx0XHRcdC8vIHFTQSB3b3JrcyBzdHJhbmdlbHkgb24gRWxlbWVudC1yb290ZWQgcXVlcmllc1xyXG5cdFx0XHQvLyBXZSBjYW4gd29yayBhcm91bmQgdGhpcyBieSBzcGVjaWZ5aW5nIGFuIGV4dHJhIElEIG9uIHRoZSByb290XHJcblx0XHRcdC8vIGFuZCB3b3JraW5nIHVwIGZyb20gdGhlcmUgKFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGUgdGVjaG5pcXVlKVxyXG5cdFx0XHQvLyBJRSA4IGRvZXNuJ3Qgd29yayBvbiBvYmplY3QgZWxlbWVudHNcclxuXHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gMSAmJiBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwib2JqZWN0XCIgKSB7XHJcblx0XHRcdFx0Z3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XHJcblxyXG5cdFx0XHRcdGlmICggKG9sZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKFwiaWRcIikpICkge1xyXG5cdFx0XHRcdFx0bmlkID0gb2xkLnJlcGxhY2UoIHJlc2NhcGUsIFwiXFxcXCQmXCIgKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgbmlkICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdG5pZCA9IFwiW2lkPSdcIiArIG5pZCArIFwiJ10gXCI7XHJcblxyXG5cdFx0XHRcdGkgPSBncm91cHMubGVuZ3RoO1xyXG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xyXG5cdFx0XHRcdFx0Z3JvdXBzW2ldID0gbmlkICsgdG9TZWxlY3RvciggZ3JvdXBzW2ldICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0O1xyXG5cdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oXCIsXCIpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIG5ld1NlbGVjdG9yICkge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLFxyXG5cdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcclxuXHRcdFx0XHR9IGNhdGNoKHFzYUVycm9yKSB7XHJcblx0XHRcdFx0fSBmaW5hbGx5IHtcclxuXHRcdFx0XHRcdGlmICggIW9sZCApIHtcclxuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoXCJpZFwiKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIEFsbCBvdGhlcnNcclxuXHRyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBrZXktdmFsdWUgY2FjaGVzIG9mIGxpbWl0ZWQgc2l6ZVxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb24oc3RyaW5nLCBPYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXHJcbiAqXHRwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKVxyXG4gKlx0ZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7XHJcblx0dmFyIGtleXMgPSBbXTtcclxuXHJcblx0ZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7XHJcblx0XHQvLyBVc2UgKGtleSArIFwiIFwiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3KVxyXG5cdFx0aWYgKCBrZXlzLnB1c2goIGtleSArIFwiIFwiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkge1xyXG5cdFx0XHQvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXNcclxuXHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTtcclxuXHRcdH1cclxuXHRcdHJldHVybiAoY2FjaGVbIGtleSArIFwiIFwiIF0gPSB2YWx1ZSk7XHJcblx0fVxyXG5cdHJldHVybiBjYWNoZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBtYXJrXHJcbiAqL1xyXG5mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkge1xyXG5cdGZuWyBleHBhbmRvIF0gPSB0cnVlO1xyXG5cdHJldHVybiBmbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBkaXYgYW5kIGV4cGVjdHMgYSBib29sZWFuIHJlc3VsdFxyXG4gKi9cclxuZnVuY3Rpb24gYXNzZXJ0KCBmbiApIHtcclxuXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHJcblx0dHJ5IHtcclxuXHRcdHJldHVybiAhIWZuKCBkaXYgKTtcclxuXHR9IGNhdGNoIChlKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fSBmaW5hbGx5IHtcclxuXHRcdC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdFxyXG5cdFx0aWYgKCBkaXYucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0ZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGRpdiApO1xyXG5cdFx0fVxyXG5cdFx0Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUVcclxuXHRcdGRpdiA9IG51bGw7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogQWRkcyB0aGUgc2FtZSBoYW5kbGVyIGZvciBhbGwgb2YgdGhlIHNwZWNpZmllZCBhdHRyc1xyXG4gKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZFxyXG4gKi9cclxuZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywgaGFuZGxlciApIHtcclxuXHR2YXIgYXJyID0gYXR0cnMuc3BsaXQoXCJ8XCIpLFxyXG5cdFx0aSA9IGF0dHJzLmxlbmd0aDtcclxuXHJcblx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRFeHByLmF0dHJIYW5kbGVbIGFycltpXSBdID0gaGFuZGxlcjtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gYVxyXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcclxuICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiXHJcbiAqL1xyXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XHJcblx0dmFyIGN1ciA9IGIgJiYgYSxcclxuXHRcdGRpZmYgPSBjdXIgJiYgYS5ub2RlVHlwZSA9PT0gMSAmJiBiLm5vZGVUeXBlID09PSAxICYmXHJcblx0XHRcdCggfmIuc291cmNlSW5kZXggfHwgTUFYX05FR0FUSVZFICkgLVxyXG5cdFx0XHQoIH5hLnNvdXJjZUluZGV4IHx8IE1BWF9ORUdBVElWRSApO1xyXG5cclxuXHQvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXNcclxuXHRpZiAoIGRpZmYgKSB7XHJcblx0XHRyZXR1cm4gZGlmZjtcclxuXHR9XHJcblxyXG5cdC8vIENoZWNrIGlmIGIgZm9sbG93cyBhXHJcblx0aWYgKCBjdXIgKSB7XHJcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIubmV4dFNpYmxpbmcpICkge1xyXG5cdFx0XHRpZiAoIGN1ciA9PT0gYiApIHtcclxuXHRcdFx0XHRyZXR1cm4gLTE7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBhID8gMSA6IC0xO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xyXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XHJcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcclxuXHR9O1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7XHJcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRyZXR1cm4gKG5hbWUgPT09IFwiaW5wdXRcIiB8fCBuYW1lID09PSBcImJ1dHRvblwiKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XHJcblx0fTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHNcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkge1xyXG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkge1xyXG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XHJcblx0XHRyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xyXG5cdFx0XHR2YXIgaixcclxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxyXG5cdFx0XHRcdGkgPSBtYXRjaEluZGV4ZXMubGVuZ3RoO1xyXG5cclxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXHJcblx0XHRcdHdoaWxlICggaS0tICkge1xyXG5cdFx0XHRcdGlmICggc2VlZFsgKGogPSBtYXRjaEluZGV4ZXNbaV0pIF0gKSB7XHJcblx0XHRcdFx0XHRzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBhIG5vZGUgZm9yIHZhbGlkaXR5IGFzIGEgU2l6emxlIGNvbnRleHRcclxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcclxuICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRoZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVyd2lzZSBhIGZhbHN5IHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcclxuXHRyZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb250ZXh0O1xyXG59XHJcblxyXG4vLyBFeHBvc2Ugc3VwcG9ydCB2YXJzIGZvciBjb252ZW5pZW5jZVxyXG5zdXBwb3J0ID0gU2l6emxlLnN1cHBvcnQgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBEZXRlY3RzIFhNTCBub2Rlc1xyXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZmYgZWxlbSBpcyBhIG5vbi1IVE1MIFhNTCBub2RlXHJcbiAqL1xyXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdC8vIGRvY3VtZW50RWxlbWVudCBpcyB2ZXJpZmllZCBmb3IgY2FzZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3RcclxuXHQvLyAoc3VjaCBhcyBsb2FkaW5nIGlmcmFtZXMgaW4gSUUgLSAjNDgzMylcclxuXHR2YXIgZG9jdW1lbnRFbGVtZW50ID0gZWxlbSAmJiAoZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVudDtcclxuXHRyZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9PSBcIkhUTUxcIiA6IGZhbHNlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgZG9jdW1lbnQtcmVsYXRlZCB2YXJpYWJsZXMgb25jZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkb2N1bWVudFxyXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50XHJcbiAqL1xyXG5zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkge1xyXG5cdHZhciBoYXNDb21wYXJlLCBwYXJlbnQsXHJcblx0XHRkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUgOiBwcmVmZXJyZWREb2M7XHJcblxyXG5cdC8vIElmIG5vIGRvY3VtZW50IGFuZCBkb2N1bWVudEVsZW1lbnQgaXMgYXZhaWxhYmxlLCByZXR1cm5cclxuXHRpZiAoIGRvYyA9PT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkge1xyXG5cdFx0cmV0dXJuIGRvY3VtZW50O1xyXG5cdH1cclxuXHJcblx0Ly8gU2V0IG91ciBkb2N1bWVudFxyXG5cdGRvY3VtZW50ID0gZG9jO1xyXG5cdGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xyXG5cdHBhcmVudCA9IGRvYy5kZWZhdWx0VmlldztcclxuXHJcblx0Ly8gU3VwcG9ydDogSUU+OFxyXG5cdC8vIElmIGlmcmFtZSBkb2N1bWVudCBpcyBhc3NpZ25lZCB0byBcImRvY3VtZW50XCIgdmFyaWFibGUgYW5kIGlmIGlmcmFtZSBoYXMgYmVlbiByZWxvYWRlZCxcclxuXHQvLyBJRSB3aWxsIHRocm93IFwicGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIGFjY2Vzc2luZyBcImRvY3VtZW50XCIgdmFyaWFibGUsIHNlZSBqUXVlcnkgIzEzOTM2XHJcblx0Ly8gSUU2LTggZG8gbm90IHN1cHBvcnQgdGhlIGRlZmF1bHRWaWV3IHByb3BlcnR5IHNvIHBhcmVudCB3aWxsIGJlIHVuZGVmaW5lZFxyXG5cdGlmICggcGFyZW50ICYmIHBhcmVudCAhPT0gcGFyZW50LnRvcCApIHtcclxuXHRcdC8vIElFMTEgZG9lcyBub3QgaGF2ZSBhdHRhY2hFdmVudCwgc28gYWxsIG11c3Qgc3VmZmVyXHJcblx0XHRpZiAoIHBhcmVudC5hZGRFdmVudExpc3RlbmVyICkge1xyXG5cdFx0XHRwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTtcclxuXHRcdH0gZWxzZSBpZiAoIHBhcmVudC5hdHRhY2hFdmVudCApIHtcclxuXHRcdFx0cGFyZW50LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qIFN1cHBvcnQgdGVzdHNcclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblx0ZG9jdW1lbnRJc0hUTUwgPSAhaXNYTUwoIGRvYyApO1xyXG5cclxuXHQvKiBBdHRyaWJ1dGVzXHJcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuXHQvLyBTdXBwb3J0OiBJRTw4XHJcblx0Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzXHJcblx0Ly8gKGV4Y2VwdGluZyBJRTggYm9vbGVhbnMpXHJcblx0c3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XHJcblx0XHRkaXYuY2xhc3NOYW1lID0gXCJpXCI7XHJcblx0XHRyZXR1cm4gIWRpdi5nZXRBdHRyaWJ1dGUoXCJjbGFzc05hbWVcIik7XHJcblx0fSk7XHJcblxyXG5cdC8qIGdldEVsZW1lbnQocylCeSpcclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSByZXR1cm5zIG9ubHkgZWxlbWVudHNcclxuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XHJcblx0XHRkaXYuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVDb21tZW50KFwiXCIpICk7XHJcblx0XHRyZXR1cm4gIWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikubGVuZ3RoO1xyXG5cdH0pO1xyXG5cclxuXHQvLyBTdXBwb3J0OiBJRTw5XHJcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5hdGl2ZS50ZXN0KCBkb2MuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApO1xyXG5cclxuXHQvLyBTdXBwb3J0OiBJRTwxMFxyXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZVxyXG5cdC8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1hdGljYWxseS1zZXQgbmFtZXMsXHJcblx0Ly8gc28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0XHJcblx0c3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XHJcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBkaXYgKS5pZCA9IGV4cGFuZG87XHJcblx0XHRyZXR1cm4gIWRvYy5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZG9jLmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoO1xyXG5cdH0pO1xyXG5cclxuXHQvLyBJRCBmaW5kIGFuZCBmaWx0ZXJcclxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcclxuXHRcdEV4cHIuZmluZFtcIklEXCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xyXG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xyXG5cdFx0XHRcdHZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcclxuXHRcdFx0XHQvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJuc1xyXG5cdFx0XHRcdC8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjNcclxuXHRcdFx0XHRyZXR1cm4gbSAmJiBtLnBhcmVudE5vZGUgPyBbIG0gXSA6IFtdO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdFx0RXhwci5maWx0ZXJbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCApIHtcclxuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XHJcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSA9PT0gYXR0cklkO1xyXG5cdFx0XHR9O1xyXG5cdFx0fTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0Ly8gU3VwcG9ydDogSUU2LzdcclxuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcclxuXHRcdGRlbGV0ZSBFeHByLmZpbmRbXCJJRFwiXTtcclxuXHJcblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gIGZ1bmN0aW9uKCBpZCApIHtcclxuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XHJcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiYgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIik7XHJcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xyXG5cdFx0XHR9O1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8vIFRhZ1xyXG5cdEV4cHIuZmluZFtcIlRBR1wiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgP1xyXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcclxuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcclxuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XHJcblxyXG5cdFx0XHQvLyBEb2N1bWVudEZyYWdtZW50IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE5cclxuXHRcdFx0fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnICk7XHJcblx0XHRcdH1cclxuXHRcdH0gOlxyXG5cclxuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XHJcblx0XHRcdHZhciBlbGVtLFxyXG5cdFx0XHRcdHRtcCA9IFtdLFxyXG5cdFx0XHRcdGkgPSAwLFxyXG5cdFx0XHRcdC8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b29cclxuXHRcdFx0XHRyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XHJcblxyXG5cdFx0XHQvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzXHJcblx0XHRcdGlmICggdGFnID09PSBcIipcIiApIHtcclxuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHtcclxuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcclxuXHRcdFx0XHRcdFx0dG1wLnB1c2goIGVsZW0gKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0bXA7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHJlc3VsdHM7XHJcblx0XHR9O1xyXG5cclxuXHQvLyBDbGFzc1xyXG5cdEV4cHIuZmluZFtcIkNMQVNTXCJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQgKSB7XHJcblx0XHRpZiAoIGRvY3VtZW50SXNIVE1MICkge1xyXG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXHJcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XHJcblxyXG5cdC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpXHJcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xyXG5cclxuXHQvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKVxyXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxyXG5cdC8vIHdoZW5ldmVyIGBkb2N1bWVudC5hY3RpdmVFbGVtZW50YCBpcyBhY2Nlc3NlZCBvbiBhbiBpZnJhbWVcclxuXHQvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvclxyXG5cdC8vIFNlZSBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM3OFxyXG5cdHJidWdneVFTQSA9IFtdO1xyXG5cclxuXHRpZiAoIChzdXBwb3J0LnFzYSA9IHJuYXRpdmUudGVzdCggZG9jLnF1ZXJ5U2VsZWN0b3JBbGwgKSkgKSB7XHJcblx0XHQvLyBCdWlsZCBRU0EgcmVnZXhcclxuXHRcdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcclxuXHRcdGFzc2VydChmdW5jdGlvbiggZGl2ICkge1xyXG5cdFx0XHQvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlXHJcblx0XHRcdC8vIFRoaXMgaXMgdG8gdGVzdCBJRSdzIHRyZWF0bWVudCBvZiBub3QgZXhwbGljaXRseVxyXG5cdFx0XHQvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSxcclxuXHRcdFx0Ly8gc2luY2UgaXRzIHByZXNlbmNlIHNob3VsZCBiZSBlbm91Z2hcclxuXHRcdFx0Ly8gaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTlcclxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZGl2ICkuaW5uZXJIVE1MID0gXCI8YSBpZD0nXCIgKyBleHBhbmRvICsgXCInPjwvYT5cIiArXHJcblx0XHRcdFx0XCI8c2VsZWN0IGlkPSdcIiArIGV4cGFuZG8gKyBcIi1cXGZdJyBtc2FsbG93Y2FwdHVyZT0nJz5cIiArXHJcblx0XHRcdFx0XCI8b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiO1xyXG5cclxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LCBPcGVyYSAxMS0xMi4xNlxyXG5cdFx0XHQvLyBOb3RoaW5nIHNob3VsZCBiZSBzZWxlY3RlZCB3aGVuIGVtcHR5IHN0cmluZ3MgZm9sbG93IF49IG9yICQ9IG9yICo9XHJcblx0XHRcdC8vIFRoZSB0ZXN0IGF0dHJpYnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0IFwic2FmZVwiIGZvciBXaW5SVFxyXG5cdFx0XHQvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvaGg0NjUzODguYXNweCNhdHRyaWJ1dGVfc2VjdGlvblxyXG5cdFx0XHRpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiW21zYWxsb3djYXB0dXJlXj0nJ11cIikubGVuZ3RoICkge1xyXG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlsqXiRdPVwiICsgd2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxyXG5cdFx0XHQvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kIFwidmFsdWVcIiBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5XHJcblx0XHRcdGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGggKSB7XHJcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooPzp2YWx1ZXxcIiArIGJvb2xlYW5zICsgXCIpXCIgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lPDI5LCBBbmRyb2lkPDQuMissIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpTPDEuOS43K1xyXG5cdFx0XHRpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCggXCJbaWR+PVwiICsgZXhwYW5kbyArIFwiLV1cIiApLmxlbmd0aCApIHtcclxuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIn49XCIpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50c1xyXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxyXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xyXG5cdFx0XHRpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbChcIjpjaGVja2VkXCIpLmxlbmd0aCApIHtcclxuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIjpjaGVja2VkXCIpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCssIGlPUyA4K1xyXG5cdFx0XHQvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUxXHJcblx0XHRcdC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmluZy1jb21iaW5hdG9yIHNlbGVjdG9yYCBmYWlsc1xyXG5cdFx0XHRpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCggXCJhI1wiICsgZXhwYW5kbyArIFwiKypcIiApLmxlbmd0aCApIHtcclxuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIi4jLitbK35dXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHRhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcclxuXHRcdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXHJcblx0XHRcdC8vIFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdubWVudFxyXG5cdFx0XHR2YXIgaW5wdXQgPSBkb2MuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcImhpZGRlblwiICk7XHJcblx0XHRcdGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIkRcIiApO1xyXG5cclxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XHJcblx0XHRcdC8vIEVuZm9yY2UgY2FzZS1zZW5zaXRpdml0eSBvZiBuYW1lIGF0dHJpYnV0ZVxyXG5cdFx0XHRpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiW25hbWU9ZF1cIikubGVuZ3RoICkge1xyXG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIipbKl4kfCF+XT89XCIgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gRkYgMy41IC0gOmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxlbWVudHMgKGhpZGRlbiBlbGVtZW50cyBhcmUgc3RpbGwgZW5hYmxlZClcclxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcclxuXHRcdFx0aWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZW5hYmxlZFwiKS5sZW5ndGggKSB7XHJcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvc1xyXG5cdFx0XHRkaXYucXVlcnlTZWxlY3RvckFsbChcIiosOnhcIik7XHJcblx0XHRcdHJidWdneVFTQS5wdXNoKFwiLC4qOlwiKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0aWYgKCAoc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgPSBybmF0aXZlLnRlc3QoIChtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzIHx8XHJcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxyXG5cdFx0ZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcclxuXHRcdGRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fFxyXG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcikgKSkgKSB7XHJcblxyXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XHJcblx0XHRcdC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvclxyXG5cdFx0XHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KVxyXG5cdFx0XHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBkaXYsIFwiZGl2XCIgKTtcclxuXHJcblx0XHRcdC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb25cclxuXHRcdFx0Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZFxyXG5cdFx0XHRtYXRjaGVzLmNhbGwoIGRpdiwgXCJbcyE9JyddOnhcIiApO1xyXG5cdFx0XHRyYnVnZ3lNYXRjaGVzLnB1c2goIFwiIT1cIiwgcHNldWRvcyApO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKFwifFwiKSApO1xyXG5cdHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oXCJ8XCIpICk7XHJcblxyXG5cdC8qIENvbnRhaW5zXHJcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cdGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTtcclxuXHJcblx0Ly8gRWxlbWVudCBjb250YWlucyBhbm90aGVyXHJcblx0Ly8gUHVycG9zZWZ1bGx5IGRvZXMgbm90IGltcGxlbWVudCBpbmNsdXNpdmUgZGVzY2VuZGVudFxyXG5cdC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXHJcblx0Y29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID9cclxuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xyXG5cdFx0XHR2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLFxyXG5cdFx0XHRcdGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlO1xyXG5cdFx0XHRyZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmIChcclxuXHRcdFx0XHRhZG93bi5jb250YWlucyA/XHJcblx0XHRcdFx0XHRhZG93bi5jb250YWlucyggYnVwICkgOlxyXG5cdFx0XHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XHJcblx0XHRcdCkpO1xyXG5cdFx0fSA6XHJcblx0XHRmdW5jdGlvbiggYSwgYiApIHtcclxuXHRcdFx0aWYgKCBiICkge1xyXG5cdFx0XHRcdHdoaWxlICggKGIgPSBiLnBhcmVudE5vZGUpICkge1xyXG5cdFx0XHRcdFx0aWYgKCBiID09PSBhICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fTtcclxuXHJcblx0LyogU29ydGluZ1xyXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcblx0Ly8gRG9jdW1lbnQgb3JkZXIgc29ydGluZ1xyXG5cdHNvcnRPcmRlciA9IGhhc0NvbXBhcmUgP1xyXG5cdGZ1bmN0aW9uKCBhLCBiICkge1xyXG5cclxuXHRcdC8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsXHJcblx0XHRpZiAoIGEgPT09IGIgKSB7XHJcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XHJcblx0XHRcdHJldHVybiAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb25cclxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcclxuXHRcdGlmICggY29tcGFyZSApIHtcclxuXHRcdFx0cmV0dXJuIGNvbXBhcmU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uIGlmIGJvdGggaW5wdXRzIGJlbG9uZyB0byB0aGUgc2FtZSBkb2N1bWVudFxyXG5cdFx0Y29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID9cclxuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApIDpcclxuXHJcblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZFxyXG5cdFx0XHQxO1xyXG5cclxuXHRcdC8vIERpc2Nvbm5lY3RlZCBub2Rlc1xyXG5cdFx0aWYgKCBjb21wYXJlICYgMSB8fFxyXG5cdFx0XHQoIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSkgKSB7XHJcblxyXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcclxuXHRcdFx0aWYgKCBhID09PSBkb2MgfHwgYS5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBhKSApIHtcclxuXHRcdFx0XHRyZXR1cm4gLTE7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBiID09PSBkb2MgfHwgYi5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBiKSApIHtcclxuXHRcdFx0XHRyZXR1cm4gMTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTWFpbnRhaW4gb3JpZ2luYWwgb3JkZXJcclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XHJcblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxyXG5cdFx0XHRcdDA7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xyXG5cdH0gOlxyXG5cdGZ1bmN0aW9uKCBhLCBiICkge1xyXG5cdFx0Ly8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbFxyXG5cdFx0aWYgKCBhID09PSBiICkge1xyXG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xyXG5cdFx0XHRyZXR1cm4gMDtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgY3VyLFxyXG5cdFx0XHRpID0gMCxcclxuXHRcdFx0YXVwID0gYS5wYXJlbnROb2RlLFxyXG5cdFx0XHRidXAgPSBiLnBhcmVudE5vZGUsXHJcblx0XHRcdGFwID0gWyBhIF0sXHJcblx0XHRcdGJwID0gWyBiIF07XHJcblxyXG5cdFx0Ly8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBkaXNjb25uZWN0ZWRcclxuXHRcdGlmICggIWF1cCB8fCAhYnVwICkge1xyXG5cdFx0XHRyZXR1cm4gYSA9PT0gZG9jID8gLTEgOlxyXG5cdFx0XHRcdGIgPT09IGRvYyA/IDEgOlxyXG5cdFx0XHRcdGF1cCA/IC0xIDpcclxuXHRcdFx0XHRidXAgPyAxIDpcclxuXHRcdFx0XHRzb3J0SW5wdXQgP1xyXG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcclxuXHRcdFx0XHQwO1xyXG5cclxuXHRcdC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrXHJcblx0XHR9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHtcclxuXHRcdFx0cmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uXHJcblx0XHRjdXIgPSBhO1xyXG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkge1xyXG5cdFx0XHRhcC51bnNoaWZ0KCBjdXIgKTtcclxuXHRcdH1cclxuXHRcdGN1ciA9IGI7XHJcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIucGFyZW50Tm9kZSkgKSB7XHJcblx0XHRcdGJwLnVuc2hpZnQoIGN1ciApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFdhbGsgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5XHJcblx0XHR3aGlsZSAoIGFwW2ldID09PSBicFtpXSApIHtcclxuXHRcdFx0aSsrO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBpID9cclxuXHRcdFx0Ly8gRG8gYSBzaWJsaW5nIGNoZWNrIGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yXHJcblx0XHRcdHNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICkgOlxyXG5cclxuXHRcdFx0Ly8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0XHJcblx0XHRcdGFwW2ldID09PSBwcmVmZXJyZWREb2MgPyAtMSA6XHJcblx0XHRcdGJwW2ldID09PSBwcmVmZXJyZWREb2MgPyAxIDpcclxuXHRcdFx0MDtcclxuXHR9O1xyXG5cclxuXHRyZXR1cm4gZG9jO1xyXG59O1xyXG5cclxuU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7XHJcblx0cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcclxufTtcclxuXHJcblNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcclxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcclxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XHJcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xyXG5cdH1cclxuXHJcblx0Ly8gTWFrZSBzdXJlIHRoYXQgYXR0cmlidXRlIHNlbGVjdG9ycyBhcmUgcXVvdGVkXHJcblx0ZXhwciA9IGV4cHIucmVwbGFjZSggcmF0dHJpYnV0ZVF1b3RlcywgXCI9JyQxJ11cIiApO1xyXG5cclxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXHJcblx0XHQoICFyYnVnZ3lNYXRjaGVzIHx8ICFyYnVnZ3lNYXRjaGVzLnRlc3QoIGV4cHIgKSApICYmXHJcblx0XHQoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xyXG5cclxuXHRcdFx0Ly8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xyXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XHJcblx0XHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxyXG5cdFx0XHRcdFx0Ly8gZnJhZ21lbnQgaW4gSUUgOVxyXG5cdFx0XHRcdFx0ZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHtcclxuXHRcdFx0XHRyZXR1cm4gcmV0O1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcclxufTtcclxuXHJcblNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xyXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxyXG5cdGlmICggKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCApICE9PSBkb2N1bWVudCApIHtcclxuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XHJcblx0fVxyXG5cdHJldHVybiBjb250YWlucyggY29udGV4dCwgZWxlbSApO1xyXG59O1xyXG5cclxuU2l6emxlLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcclxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcclxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XHJcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xyXG5cdH1cclxuXHJcblx0dmFyIGZuID0gRXhwci5hdHRySGFuZGxlWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSxcclxuXHRcdC8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChqUXVlcnkgIzEzODA3KVxyXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xyXG5cdFx0XHRmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOlxyXG5cdFx0XHR1bmRlZmluZWQ7XHJcblxyXG5cdHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/XHJcblx0XHR2YWwgOlxyXG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XHJcblx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICkgOlxyXG5cdFx0XHQodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpKSAmJiB2YWwuc3BlY2lmaWVkID9cclxuXHRcdFx0XHR2YWwudmFsdWUgOlxyXG5cdFx0XHRcdG51bGw7XHJcbn07XHJcblxyXG5TaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkge1xyXG5cdHRocm93IG5ldyBFcnJvciggXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIiArIG1zZyApO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcclxuICogQHBhcmFtIHtBcnJheUxpa2V9IHJlc3VsdHNcclxuICovXHJcblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XHJcblx0dmFyIGVsZW0sXHJcblx0XHRkdXBsaWNhdGVzID0gW10sXHJcblx0XHRqID0gMCxcclxuXHRcdGkgPSAwO1xyXG5cclxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXHJcblx0aGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcztcclxuXHRzb3J0SW5wdXQgPSAhc3VwcG9ydC5zb3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoIDAgKTtcclxuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xyXG5cclxuXHRpZiAoIGhhc0R1cGxpY2F0ZSApIHtcclxuXHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xyXG5cdFx0XHRpZiAoIGVsZW0gPT09IHJlc3VsdHNbIGkgXSApIHtcclxuXHRcdFx0XHRqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHdoaWxlICggai0tICkge1xyXG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBDbGVhciBpbnB1dCBhZnRlciBzb3J0aW5nIHRvIHJlbGVhc2Ugb2JqZWN0c1xyXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNVxyXG5cdHNvcnRJbnB1dCA9IG51bGw7XHJcblxyXG5cdHJldHVybiByZXN1bHRzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXHJcbiAqIEBwYXJhbSB7QXJyYXl8RWxlbWVudH0gZWxlbVxyXG4gKi9cclxuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0dmFyIG5vZGUsXHJcblx0XHRyZXQgPSBcIlwiLFxyXG5cdFx0aSA9IDAsXHJcblx0XHRub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7XHJcblxyXG5cdGlmICggIW5vZGVUeXBlICkge1xyXG5cdFx0Ly8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXlcclxuXHRcdHdoaWxlICggKG5vZGUgPSBlbGVtW2krK10pICkge1xyXG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xyXG5cdFx0XHRyZXQgKz0gZ2V0VGV4dCggbm9kZSApO1xyXG5cdFx0fVxyXG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcclxuXHRcdC8vIFVzZSB0ZXh0Q29udGVudCBmb3IgZWxlbWVudHNcclxuXHRcdC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKGpRdWVyeSAjMTExNTMpXHJcblx0XHRpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHRyZXR1cm4gZWxlbS50ZXh0Q29udGVudDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxyXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcclxuXHRcdFx0XHRyZXQgKz0gZ2V0VGV4dCggZWxlbSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7XHJcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XHJcblx0fVxyXG5cdC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2Rlc1xyXG5cclxuXHRyZXR1cm4gcmV0O1xyXG59O1xyXG5cclxuRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7XHJcblxyXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxyXG5cdGNhY2hlTGVuZ3RoOiA1MCxcclxuXHJcblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXHJcblxyXG5cdG1hdGNoOiBtYXRjaEV4cHIsXHJcblxyXG5cdGF0dHJIYW5kbGU6IHt9LFxyXG5cclxuXHRmaW5kOiB7fSxcclxuXHJcblx0cmVsYXRpdmU6IHtcclxuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXHJcblx0XHRcIiBcIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiIH0sXHJcblx0XHRcIitcIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIsIGZpcnN0OiB0cnVlIH0sXHJcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxyXG5cdH0sXHJcblxyXG5cdHByZUZpbHRlcjoge1xyXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcclxuXHRcdFx0bWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xyXG5cclxuXHRcdFx0Ly8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWRcclxuXHRcdFx0bWF0Y2hbM10gPSAoIG1hdGNoWzNdIHx8IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCIgKS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xyXG5cclxuXHRcdFx0aWYgKCBtYXRjaFsyXSA9PT0gXCJ+PVwiICkge1xyXG5cdFx0XHRcdG1hdGNoWzNdID0gXCIgXCIgKyBtYXRjaFszXSArIFwiIFwiO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XHJcblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxyXG5cdFx0XHRcdDEgdHlwZSAob25seXxudGh8Li4uKVxyXG5cdFx0XHRcdDIgd2hhdCAoY2hpbGR8b2YtdHlwZSlcclxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxyXG5cdFx0XHRcdDQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/XFxkKm58KVxyXG5cdFx0XHRcdDUgc2lnbiBvZiB4bi1jb21wb25lbnRcclxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XHJcblx0XHRcdFx0NyBzaWduIG9mIHktY29tcG9uZW50XHJcblx0XHRcdFx0OCB5IG9mIHktY29tcG9uZW50XHJcblx0XHRcdCovXHJcblx0XHRcdG1hdGNoWzFdID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcclxuXHJcblx0XHRcdGlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcclxuXHRcdFx0XHQvLyBudGgtKiByZXF1aXJlcyBhcmd1bWVudFxyXG5cdFx0XHRcdGlmICggIW1hdGNoWzNdICkge1xyXG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXHJcblx0XHRcdFx0Ly8gcmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVjdGl2ZWx5IHRvIDAvMVxyXG5cdFx0XHRcdG1hdGNoWzRdID0gKyggbWF0Y2hbNF0gPyBtYXRjaFs1XSArIChtYXRjaFs2XSB8fCAxKSA6IDIgKiAoIG1hdGNoWzNdID09PSBcImV2ZW5cIiB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApICk7XHJcblx0XHRcdFx0bWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsgbWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApO1xyXG5cclxuXHRcdFx0Ly8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzXHJcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzNdICkge1xyXG5cdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIG1hdGNoO1xyXG5cdFx0fSxcclxuXHJcblx0XHRcIlBTRVVET1wiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XHJcblx0XHRcdHZhciBleGNlc3MsXHJcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbNl0gJiYgbWF0Y2hbMl07XHJcblxyXG5cdFx0XHRpZiAoIG1hdGNoRXhwcltcIkNISUxEXCJdLnRlc3QoIG1hdGNoWzBdICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXHJcblx0XHRcdGlmICggbWF0Y2hbM10gKSB7XHJcblx0XHRcdFx0bWF0Y2hbMl0gPSBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCBcIlwiO1xyXG5cclxuXHRcdFx0Ly8gU3RyaXAgZXhjZXNzIGNoYXJhY3RlcnMgZnJvbSB1bnF1b3RlZCBhcmd1bWVudHNcclxuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXHJcblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcclxuXHRcdFx0XHQoZXhjZXNzID0gdG9rZW5pemUoIHVucXVvdGVkLCB0cnVlICkpICYmXHJcblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXHJcblx0XHRcdFx0KGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCkgKSB7XHJcblxyXG5cdFx0XHRcdC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4XHJcblx0XHRcdFx0bWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7XHJcblx0XHRcdFx0bWF0Y2hbMl0gPSB1bnF1b3RlZC5zbGljZSggMCwgZXhjZXNzICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KVxyXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRmaWx0ZXI6IHtcclxuXHJcblx0XHRcIlRBR1wiOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHtcclxuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdHJldHVybiBub2RlTmFtZVNlbGVjdG9yID09PSBcIipcIiA/XHJcblx0XHRcdFx0ZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9IDpcclxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7XHJcblx0XHRcdFx0fTtcclxuXHRcdH0sXHJcblxyXG5cdFx0XCJDTEFTU1wiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkge1xyXG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XHJcblxyXG5cdFx0XHRyZXR1cm4gcGF0dGVybiB8fFxyXG5cdFx0XHRcdChwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSkgJiZcclxuXHRcdFx0XHRjbGFzc0NhY2hlKCBjbGFzc05hbWUsIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHBhdHRlcm4udGVzdCggdHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlbGVtLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIgKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XHJcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0XHR2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTtcclxuXHJcblx0XHRcdFx0aWYgKCByZXN1bHQgPT0gbnVsbCApIHtcclxuXHRcdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCIhPVwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoICFvcGVyYXRvciApIHtcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmVzdWx0ICs9IFwiXCI7XHJcblxyXG5cdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCI9XCIgPyByZXN1bHQgPT09IGNoZWNrIDpcclxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiE9XCIgPyByZXN1bHQgIT09IGNoZWNrIDpcclxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIl49XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6XHJcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIqPVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XHJcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIkPVwiID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDpcclxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIn49XCIgPyAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOlxyXG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifD1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVzdWx0LnNsaWNlKCAwLCBjaGVjay5sZW5ndGggKyAxICkgPT09IGNoZWNrICsgXCItXCIgOlxyXG5cdFx0XHRcdFx0ZmFsc2U7XHJcblx0XHRcdH07XHJcblx0XHR9LFxyXG5cclxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcclxuXHRcdFx0dmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gXCJudGhcIixcclxuXHRcdFx0XHRmb3J3YXJkID0gdHlwZS5zbGljZSggLTQgKSAhPT0gXCJsYXN0XCIsXHJcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XHJcblxyXG5cdFx0XHRyZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/XHJcblxyXG5cdFx0XHRcdC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobilcclxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcclxuXHRcdFx0XHR9IDpcclxuXHJcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcclxuXHRcdFx0XHRcdHZhciBjYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgZGlmZiwgbm9kZUluZGV4LCBzdGFydCxcclxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcclxuXHRcdFx0XHRcdFx0cGFyZW50ID0gZWxlbS5wYXJlbnROb2RlLFxyXG5cdFx0XHRcdFx0XHRuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcclxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGU7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyA6KGZpcnN0fGxhc3R8b25seSktKGNoaWxkfG9mLXR5cGUpXHJcblx0XHRcdFx0XHRcdGlmICggc2ltcGxlICkge1xyXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XHJcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gbm9kZVsgZGlyIF0pICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6IG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gXCJvbmx5XCIgJiYgIXN0YXJ0ICYmIFwibmV4dFNpYmxpbmdcIjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxyXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XHJcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IHBhcmVudFsgZXhwYW5kbyBdIHx8IChwYXJlbnRbIGV4cGFuZG8gXSA9IHt9KTtcclxuXHRcdFx0XHRcdFx0XHRjYWNoZSA9IG91dGVyQ2FjaGVbIHR5cGUgXSB8fCBbXTtcclxuXHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVswXSA9PT0gZGlycnVucyAmJiBjYWNoZVsxXTtcclxuXHRcdFx0XHRcdFx0XHRkaWZmID0gY2FjaGVbMF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbMl07XHJcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07XHJcblxyXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcclxuXHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZVxyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB1c2VDYWNoZSAmJiAoY2FjaGUgPSAoZWxlbVsgZXhwYW5kbyBdIHx8IChlbGVtWyBleHBhbmRvIF0gPSB7fSkpWyB0eXBlIF0pICYmIGNhY2hlWzBdID09PSBkaXJydW5zICkge1xyXG5cdFx0XHRcdFx0XHRcdGRpZmYgPSBjYWNoZVsxXTtcclxuXHJcblx0XHRcdFx0XHRcdC8vIHhtbCA6bnRoLWNoaWxkKC4uLikgb3IgOm50aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9mLXR5cGUoLi4uKVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XHJcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcclxuXHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgPyBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOiBub2RlLm5vZGVUeXBlID09PSAxICkgJiYgKytkaWZmICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pKVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZSA9PT0gZWxlbSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemVcclxuXHRcdFx0XHRcdFx0ZGlmZiAtPSBsYXN0O1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0fSxcclxuXHJcblx0XHRcIlBTRVVET1wiOiBmdW5jdGlvbiggcHNldWRvLCBhcmd1bWVudCApIHtcclxuXHRcdFx0Ly8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlXHJcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcclxuXHRcdFx0Ly8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNpdGl2aXR5IGluIGNhc2UgY3VzdG9tIHBzZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxldHRlcnNcclxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvc1xyXG5cdFx0XHR2YXIgYXJncyxcclxuXHRcdFx0XHRmbiA9IEV4cHIucHNldWRvc1sgcHNldWRvIF0gfHwgRXhwci5zZXRGaWx0ZXJzWyBwc2V1ZG8udG9Mb3dlckNhc2UoKSBdIHx8XHJcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xyXG5cclxuXHRcdFx0Ly8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5kaWNhdGUgdGhhdFxyXG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxyXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXHJcblx0XHRcdGlmICggZm5bIGV4cGFuZG8gXSApIHtcclxuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xyXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XHJcblx0XHRcdFx0YXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sIFwiXCIsIGFyZ3VtZW50IF07XHJcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XHJcblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XHJcblx0XHRcdFx0XHRcdHZhciBpZHgsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxyXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcclxuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFtpXSApO1xyXG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkW2ldICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pIDpcclxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZm4oIGVsZW0sIDAsIGFyZ3MgKTtcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBmbjtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRwc2V1ZG9zOiB7XHJcblx0XHQvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3NcclxuXHRcdFwibm90XCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7XHJcblx0XHRcdC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlXHJcblx0XHRcdC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nXHJcblx0XHRcdC8vIHNwYWNlcyBhcyBjb21iaW5hdG9yc1xyXG5cdFx0XHR2YXIgaW5wdXQgPSBbXSxcclxuXHRcdFx0XHRyZXN1bHRzID0gW10sXHJcblx0XHRcdFx0bWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSApO1xyXG5cclxuXHRcdFx0cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/XHJcblx0XHRcdFx0bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7XHJcblx0XHRcdFx0XHR2YXIgZWxlbSxcclxuXHRcdFx0XHRcdFx0dW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLFxyXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XHJcblxyXG5cdFx0XHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVyYFxyXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xyXG5cdFx0XHRcdFx0XHRcdHNlZWRbaV0gPSAhKG1hdGNoZXNbaV0gPSBlbGVtKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pIDpcclxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xyXG5cdFx0XHRcdFx0aW5wdXRbMF0gPSBlbGVtO1xyXG5cdFx0XHRcdFx0bWF0Y2hlciggaW5wdXQsIG51bGwsIHhtbCwgcmVzdWx0cyApO1xyXG5cdFx0XHRcdFx0Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudCAoaXNzdWUgIzI5OSlcclxuXHRcdFx0XHRcdGlucHV0WzBdID0gbnVsbDtcclxuXHRcdFx0XHRcdHJldHVybiAhcmVzdWx0cy5wb3AoKTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0fSksXHJcblxyXG5cdFx0XCJoYXNcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcclxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRcdHJldHVybiBTaXp6bGUoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDtcclxuXHRcdFx0fTtcclxuXHRcdH0pLFxyXG5cclxuXHRcdFwiY29udGFpbnNcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCB0ZXh0ICkge1xyXG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdFx0cmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTtcclxuXHRcdFx0fTtcclxuXHRcdH0pLFxyXG5cclxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxyXG5cdFx0Ly8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWVcclxuXHRcdC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsXHJcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxyXG5cdFx0Ly8gVGhlIG1hdGNoaW5nIG9mIEMgYWdhaW5zdCB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlIGlzIHBlcmZvcm1lZCBjYXNlLWluc2Vuc2l0aXZlbHkuXHJcblx0XHQvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLlwiXHJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXHJcblx0XHRcImxhbmdcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggbGFuZyApIHtcclxuXHRcdFx0Ly8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxyXG5cdFx0XHRpZiAoICFyaWRlbnRpZmllci50ZXN0KGxhbmcgfHwgXCJcIikgKSB7XHJcblx0XHRcdFx0U2l6emxlLmVycm9yKCBcInVuc3VwcG9ydGVkIGxhbmc6IFwiICsgbGFuZyApO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRcdHZhciBlbGVtTGFuZztcclxuXHRcdFx0XHRkbyB7XHJcblx0XHRcdFx0XHRpZiAoIChlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID9cclxuXHRcdFx0XHRcdFx0ZWxlbS5sYW5nIDpcclxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoXCJ4bWw6bGFuZ1wiKSB8fCBlbGVtLmdldEF0dHJpYnV0ZShcImxhbmdcIikpICkge1xyXG5cclxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArIFwiLVwiICkgPT09IDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSB3aGlsZSAoIChlbGVtID0gZWxlbS5wYXJlbnROb2RlKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9O1xyXG5cdFx0fSksXHJcblxyXG5cdFx0Ly8gTWlzY2VsbGFuZW91c1xyXG5cdFx0XCJ0YXJnZXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xyXG5cdFx0XHRyZXR1cm4gaGFzaCAmJiBoYXNoLnNsaWNlKCAxICkgPT09IGVsZW0uaWQ7XHJcblx0XHR9LFxyXG5cclxuXHRcdFwicm9vdFwiOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY0VsZW07XHJcblx0XHR9LFxyXG5cclxuXHRcdFwiZm9jdXNcIjogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICghZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xyXG5cdFx0XCJlbmFibGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2U7XHJcblx0XHR9LFxyXG5cclxuXHRcdFwiZGlzYWJsZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlO1xyXG5cdFx0fSxcclxuXHJcblx0XHRcImNoZWNrZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdC8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50c1xyXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxyXG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdHJldHVybiAobm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiAhIWVsZW0uY2hlY2tlZCkgfHwgKG5vZGVOYW1lID09PSBcIm9wdGlvblwiICYmICEhZWxlbS5zZWxlY3RlZCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdFwic2VsZWN0ZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHRcclxuXHRcdFx0Ly8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseVxyXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0XHRlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8vIENvbnRlbnRzXHJcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkb1xyXG5cdFx0XHQvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksXHJcblx0XHRcdC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pXHJcblx0XHRcdC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJpYnV0ZXMgKDIpIGRvIG5vdCBhcHBlYXIgYXMgY2hpbGRyZW5cclxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XHJcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9LFxyXG5cclxuXHRcdFwicGFyZW50XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4gIUV4cHIucHNldWRvc1tcImVtcHR5XCJdKCBlbGVtICk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcclxuXHRcdFwiaGVhZGVyXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4gcmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XHJcblx0XHR9LFxyXG5cclxuXHRcdFwiaW5wdXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0XCJidXR0b25cIjogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gXCJidXR0b25cIiB8fCBuYW1lID09PSBcImJ1dHRvblwiO1xyXG5cdFx0fSxcclxuXHJcblx0XHRcInRleHRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdHZhciBhdHRyO1xyXG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiZcclxuXHRcdFx0XHRlbGVtLnR5cGUgPT09IFwidGV4dFwiICYmXHJcblxyXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFPDhcclxuXHRcdFx0XHQvLyBOZXcgSFRNTDUgYXR0cmlidXRlIHZhbHVlcyAoZS5nLiwgXCJzZWFyY2hcIikgYXBwZWFyIHdpdGggZWxlbS50eXBlID09PSBcInRleHRcIlxyXG5cdFx0XHRcdCggKGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZShcInR5cGVcIikpID09IG51bGwgfHwgYXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXHJcblx0XHRcImZpcnN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiBbIDAgXTtcclxuXHRcdH0pLFxyXG5cclxuXHRcdFwibGFzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcclxuXHRcdFx0cmV0dXJuIFsgbGVuZ3RoIC0gMSBdO1xyXG5cdFx0fSksXHJcblxyXG5cdFx0XCJlcVwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XHJcblx0XHRcdHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTtcclxuXHRcdH0pLFxyXG5cclxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcclxuXHRcdFx0dmFyIGkgPSAwO1xyXG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcclxuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XHJcblx0XHR9KSxcclxuXHJcblx0XHRcIm9kZFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcclxuXHRcdFx0dmFyIGkgPSAxO1xyXG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcclxuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XHJcblx0XHR9KSxcclxuXHJcblx0XHRcImx0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcclxuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xyXG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcclxuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XHJcblx0XHR9KSxcclxuXHJcblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcclxuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xyXG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XHJcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xyXG5cdFx0fSlcclxuXHR9XHJcbn07XHJcblxyXG5FeHByLnBzZXVkb3NbXCJudGhcIl0gPSBFeHByLnBzZXVkb3NbXCJlcVwiXTtcclxuXHJcbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXHJcbmZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1ZSB9ICkge1xyXG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTtcclxufVxyXG5mb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkge1xyXG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7XHJcbn1cclxuXHJcbi8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVyc1xyXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cclxuc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLmZpbHRlcnMgPSBFeHByLnBzZXVkb3M7XHJcbkV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7XHJcblxyXG50b2tlbml6ZSA9IFNpenpsZS50b2tlbml6ZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgcGFyc2VPbmx5ICkge1xyXG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxyXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcclxuXHRcdGNhY2hlZCA9IHRva2VuQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcclxuXHJcblx0aWYgKCBjYWNoZWQgKSB7XHJcblx0XHRyZXR1cm4gcGFyc2VPbmx5ID8gMCA6IGNhY2hlZC5zbGljZSggMCApO1xyXG5cdH1cclxuXHJcblx0c29GYXIgPSBzZWxlY3RvcjtcclxuXHRncm91cHMgPSBbXTtcclxuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XHJcblxyXG5cdHdoaWxlICggc29GYXIgKSB7XHJcblxyXG5cdFx0Ly8gQ29tbWEgYW5kIGZpcnN0IHJ1blxyXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAobWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSkgKSB7XHJcblx0XHRcdGlmICggbWF0Y2ggKSB7XHJcblx0XHRcdFx0Ly8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWRcclxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGggKSB8fCBzb0ZhcjtcclxuXHRcdFx0fVxyXG5cdFx0XHRncm91cHMucHVzaCggKHRva2VucyA9IFtdKSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcclxuXHJcblx0XHQvLyBDb21iaW5hdG9yc1xyXG5cdFx0aWYgKCAobWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSkgKSB7XHJcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xyXG5cdFx0XHR0b2tlbnMucHVzaCh7XHJcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXHJcblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXHJcblx0XHRcdFx0dHlwZTogbWF0Y2hbMF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcclxuXHRcdFx0fSk7XHJcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmlsdGVyc1xyXG5cdFx0Zm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHtcclxuXHRcdFx0aWYgKCAobWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApKSAmJiAoIXByZUZpbHRlcnNbIHR5cGUgXSB8fFxyXG5cdFx0XHRcdChtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSkpICkge1xyXG5cdFx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xyXG5cdFx0XHRcdHRva2Vucy5wdXNoKHtcclxuXHRcdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxyXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcclxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggIW1hdGNoZWQgKSB7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXHJcblx0Ly8gaWYgd2UncmUganVzdCBwYXJzaW5nXHJcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXHJcblx0cmV0dXJuIHBhcnNlT25seSA/XHJcblx0XHRzb0Zhci5sZW5ndGggOlxyXG5cdFx0c29GYXIgP1xyXG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxyXG5cdFx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXHJcblx0XHRcdHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkge1xyXG5cdHZhciBpID0gMCxcclxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXHJcblx0XHRzZWxlY3RvciA9IFwiXCI7XHJcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XHJcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbaV0udmFsdWU7XHJcblx0fVxyXG5cdHJldHVybiBzZWxlY3RvcjtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHtcclxuXHR2YXIgZGlyID0gY29tYmluYXRvci5kaXIsXHJcblx0XHRjaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBkaXIgPT09IFwicGFyZW50Tm9kZVwiLFxyXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XHJcblxyXG5cdHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID9cclxuXHRcdC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudFxyXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcclxuXHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcclxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcclxuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gOlxyXG5cclxuXHRcdC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50c1xyXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcclxuXHRcdFx0dmFyIG9sZENhY2hlLCBvdXRlckNhY2hlLFxyXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xyXG5cclxuXHRcdFx0Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gZGlyIGNhY2hpbmdcclxuXHRcdFx0aWYgKCB4bWwgKSB7XHJcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcclxuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XHJcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcclxuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoZWxlbVsgZXhwYW5kbyBdID0ge30pO1xyXG5cdFx0XHRcdFx0XHRpZiAoIChvbGRDYWNoZSA9IG91dGVyQ2FjaGVbIGRpciBdKSAmJlxyXG5cdFx0XHRcdFx0XHRcdG9sZENhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgb2xkQ2FjaGVbIDEgXSA9PT0gZG9uZU5hbWUgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xyXG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGVbIGRpciBdID0gbmV3Q2FjaGU7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZ1xyXG5cdFx0XHRcdFx0XHRcdGlmICggKG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSkgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcclxuXHRyZXR1cm4gbWF0Y2hlcnMubGVuZ3RoID4gMSA/XHJcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xyXG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcclxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdFx0aWYgKCAhbWF0Y2hlcnNbaV0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0gOlxyXG5cdFx0bWF0Y2hlcnNbMF07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcclxuXHR2YXIgaSA9IDAsXHJcblx0XHRsZW4gPSBjb250ZXh0cy5sZW5ndGg7XHJcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XHJcblx0XHRTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApO1xyXG5cdH1cclxuXHRyZXR1cm4gcmVzdWx0cztcclxufVxyXG5cclxuZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHtcclxuXHR2YXIgZWxlbSxcclxuXHRcdG5ld1VubWF0Y2hlZCA9IFtdLFxyXG5cdFx0aSA9IDAsXHJcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxyXG5cdFx0bWFwcGVkID0gbWFwICE9IG51bGw7XHJcblxyXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xyXG5cdFx0aWYgKCAoZWxlbSA9IHVubWF0Y2hlZFtpXSkgKSB7XHJcblx0XHRcdGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xyXG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XHJcblx0XHRcdFx0aWYgKCBtYXBwZWQgKSB7XHJcblx0XHRcdFx0XHRtYXAucHVzaCggaSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIG5ld1VubWF0Y2hlZDtcclxufVxyXG5cclxuZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkge1xyXG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xyXG5cdFx0cG9zdEZpbHRlciA9IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTtcclxuXHR9XHJcblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XHJcblx0XHRwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7XHJcblx0fVxyXG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcclxuXHRcdHZhciB0ZW1wLCBpLCBlbGVtLFxyXG5cdFx0XHRwcmVNYXAgPSBbXSxcclxuXHRcdFx0cG9zdE1hcCA9IFtdLFxyXG5cdFx0XHRwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLFxyXG5cclxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcclxuXHRcdFx0ZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yIHx8IFwiKlwiLCBjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LCBbXSApLFxyXG5cclxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXHJcblx0XHRcdG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgP1xyXG5cdFx0XHRcdGNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDpcclxuXHRcdFx0XHRlbGVtcyxcclxuXHJcblx0XHRcdG1hdGNoZXJPdXQgPSBtYXRjaGVyID9cclxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLFxyXG5cdFx0XHRcdHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID9cclxuXHJcblx0XHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3NhcnlcclxuXHRcdFx0XHRcdFtdIDpcclxuXHJcblx0XHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcclxuXHRcdFx0XHRcdHJlc3VsdHMgOlxyXG5cdFx0XHRcdG1hdGNoZXJJbjtcclxuXHJcblx0XHQvLyBGaW5kIHByaW1hcnkgbWF0Y2hlc1xyXG5cdFx0aWYgKCBtYXRjaGVyICkge1xyXG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcclxuXHRcdGlmICggcG9zdEZpbHRlciApIHtcclxuXHRcdFx0dGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7XHJcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcclxuXHJcblx0XHRcdC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW5cclxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xyXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcclxuXHRcdFx0XHRpZiAoIChlbGVtID0gdGVtcFtpXSkgKSB7XHJcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0gZWxlbSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBzZWVkICkge1xyXG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xyXG5cdFx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcclxuXHRcdFx0XHRcdC8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0c1xyXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xyXG5cdFx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xyXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaFxyXG5cdFx0XHRcdFx0XHRcdHRlbXAucHVzaCggKG1hdGNoZXJJbltpXSA9IGVsZW0pICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIChtYXRjaGVyT3V0ID0gW10pLCB0ZW1wLCB4bWwgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIE1vdmUgbWF0Y2hlZCBlbGVtZW50cyBmcm9tIHNlZWQgdG8gcmVzdWx0cyB0byBrZWVwIHRoZW0gc3luY2hyb25pemVkXHJcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xyXG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xyXG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICYmXHJcblx0XHRcdFx0XHRcdCh0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHtcclxuXHJcblx0XHRcdFx0XHRcdHNlZWRbdGVtcF0gPSAhKHJlc3VsdHNbdGVtcF0gPSBlbGVtKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHQvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVyIGlmIGRlZmluZWRcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcclxuXHRcdFx0XHRtYXRjaGVyT3V0ID09PSByZXN1bHRzID9cclxuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XHJcblx0XHRcdFx0XHRtYXRjaGVyT3V0XHJcblx0XHRcdCk7XHJcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcclxuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHtcclxuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxyXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcclxuXHRcdGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1swXS50eXBlIF0sXHJcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbXCIgXCJdLFxyXG5cdFx0aSA9IGxlYWRpbmdSZWxhdGl2ZSA/IDEgOiAwLFxyXG5cclxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXHJcblx0XHRtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dDtcclxuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcclxuXHRcdG1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4gaW5kZXhPZiggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTtcclxuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcclxuXHRcdG1hdGNoZXJzID0gWyBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xyXG5cdFx0XHR2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8IChcclxuXHRcdFx0XHQoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgP1xyXG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XHJcblx0XHRcdFx0XHRtYXRjaEFueUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApICk7XHJcblx0XHRcdC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50IChpc3N1ZSAjMjk5KVxyXG5cdFx0XHRjaGVja0NvbnRleHQgPSBudWxsO1xyXG5cdFx0XHRyZXR1cm4gcmV0O1xyXG5cdFx0fSBdO1xyXG5cclxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcclxuXHRcdGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHtcclxuXHRcdFx0bWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIpIF07XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRjaGVzICk7XHJcblxyXG5cdFx0XHQvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlclxyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcclxuXHRcdFx0XHQvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJhdG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmdcclxuXHRcdFx0XHRqID0gKytpO1xyXG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xyXG5cdFx0XHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbal0udHlwZSBdICkge1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHNldE1hdGNoZXIoXHJcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcclxuXHRcdFx0XHRcdGkgPiAxICYmIHRvU2VsZWN0b3IoXHJcblx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgXHJcblx0XHRcdFx0XHRcdHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5jb25jYXQoeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0pXHJcblx0XHRcdFx0XHQpLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSxcclxuXHRcdFx0XHRcdG1hdGNoZXIsXHJcblx0XHRcdFx0XHRpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSxcclxuXHRcdFx0XHRcdGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICh0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSkgKSxcclxuXHRcdFx0XHRcdGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zIClcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xyXG5cdHZhciBieVNldCA9IHNldE1hdGNoZXJzLmxlbmd0aCA+IDAsXHJcblx0XHRieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCxcclxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcclxuXHRcdFx0dmFyIGVsZW0sIGosIG1hdGNoZXIsXHJcblx0XHRcdFx0bWF0Y2hlZENvdW50ID0gMCxcclxuXHRcdFx0XHRpID0gXCIwXCIsXHJcblx0XHRcdFx0dW5tYXRjaGVkID0gc2VlZCAmJiBbXSxcclxuXHRcdFx0XHRzZXRNYXRjaGVkID0gW10sXHJcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXHJcblx0XHRcdFx0Ly8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dFxyXG5cdFx0XHRcdGVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5kW1wiVEFHXCJdKCBcIipcIiwgb3V0ZXJtb3N0ICksXHJcblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcclxuXHRcdFx0XHRkaXJydW5zVW5pcXVlID0gKGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgMC4xKSxcclxuXHRcdFx0XHRsZW4gPSBlbGVtcy5sZW5ndGg7XHJcblxyXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcclxuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCAhPT0gZG9jdW1lbnQgJiYgY29udGV4dDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcclxuXHRcdFx0Ly8gS2VlcCBgaWAgYSBzdHJpbmcgaWYgdGhlcmUgYXJlIG5vIGVsZW1lbnRzIHNvIGBtYXRjaGVkQ291bnRgIHdpbGwgYmUgXCIwMFwiIGJlbG93XHJcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxyXG5cdFx0XHQvLyBUb2xlcmF0ZSBOb2RlTGlzdCBwcm9wZXJ0aWVzIChJRTogXCJsZW5ndGhcIjsgU2FmYXJpOiA8bnVtYmVyPikgbWF0Y2hpbmcgZWxlbWVudHMgYnkgaWRcclxuXHRcdFx0Zm9yICggOyBpICE9PSBsZW4gJiYgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkge1xyXG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XHJcblx0XHRcdFx0XHRqID0gMDtcclxuXHRcdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbaisrXSkgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xyXG5cdFx0XHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcclxuXHRcdFx0XHRpZiAoIGJ5U2V0ICkge1xyXG5cdFx0XHRcdFx0Ly8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVyc1xyXG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkge1xyXG5cdFx0XHRcdFx0XHRtYXRjaGVkQ291bnQtLTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90XHJcblx0XHRcdFx0XHRpZiAoIHNlZWQgKSB7XHJcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBBcHBseSBzZXQgZmlsdGVycyB0byB1bm1hdGNoZWQgZWxlbWVudHNcclxuXHRcdFx0bWF0Y2hlZENvdW50ICs9IGk7XHJcblx0XHRcdGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkge1xyXG5cdFx0XHRcdGogPSAwO1xyXG5cdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHtcclxuXHRcdFx0XHRcdG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoIHNlZWQgKSB7XHJcblx0XHRcdFx0XHQvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nXHJcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XHJcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xyXG5cdFx0XHRcdFx0XHRcdGlmICggISh1bm1hdGNoZWRbaV0gfHwgc2V0TWF0Y2hlZFtpXSkgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlc1xyXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXHJcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0Y2hlZCApO1xyXG5cclxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcclxuXHRcdFx0XHRpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiZcclxuXHRcdFx0XHRcdCggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkge1xyXG5cclxuXHRcdFx0XHRcdFNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnNcclxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XHJcblx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XHJcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB1bm1hdGNoZWQ7XHJcblx0XHR9O1xyXG5cclxuXHRyZXR1cm4gYnlTZXQgP1xyXG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XHJcblx0XHRzdXBlck1hdGNoZXI7XHJcbn1cclxuXHJcbmNvbXBpbGUgPSBTaXp6bGUuY29tcGlsZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgbWF0Y2ggLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7XHJcblx0dmFyIGksXHJcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxyXG5cdFx0ZWxlbWVudE1hdGNoZXJzID0gW10sXHJcblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XHJcblxyXG5cdGlmICggIWNhY2hlZCApIHtcclxuXHRcdC8vIEdlbmVyYXRlIGEgZnVuY3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIGVhY2ggZWxlbWVudFxyXG5cdFx0aWYgKCAhbWF0Y2ggKSB7XHJcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XHJcblx0XHR9XHJcblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xyXG5cdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdGNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRjaFtpXSApO1xyXG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xyXG5cdFx0XHRcdHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvblxyXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApICk7XHJcblxyXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXHJcblx0XHRjYWNoZWQuc2VsZWN0b3IgPSBzZWxlY3RvcjtcclxuXHR9XHJcblx0cmV0dXJuIGNhY2hlZDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIFNpenpsZSdzIGNvbXBpbGVkXHJcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcclxuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcclxuICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggU2l6emxlLmNvbXBpbGVcclxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XHJcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxyXG4gKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdFxyXG4gKi9cclxuc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcclxuXHR2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCxcclxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXHJcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoc2VsZWN0b3IgPSBjb21waWxlZC5zZWxlY3RvciB8fCBzZWxlY3RvcikgKTtcclxuXHJcblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XHJcblxyXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG5vIHNlZWQgYW5kIG9ubHkgb25lIGdyb3VwXHJcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XHJcblxyXG5cdFx0Ly8gVGFrZSBhIHNob3J0Y3V0IGFuZCBzZXQgdGhlIGNvbnRleHQgaWYgdGhlIHJvb3Qgc2VsZWN0b3IgaXMgYW4gSURcclxuXHRcdHRva2VucyA9IG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAgKTtcclxuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09PSBcIklEXCIgJiZcclxuXHRcdFx0XHRzdXBwb3J0LmdldEJ5SWQgJiYgY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJlxyXG5cdFx0XHRcdEV4cHIucmVsYXRpdmVbIHRva2Vuc1sxXS50eXBlIF0gKSB7XHJcblxyXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbXCJJRFwiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKHJ1bmVzY2FwZSwgZnVuZXNjYXBlKSwgY29udGV4dCApIHx8IFtdIClbMF07XHJcblx0XHRcdGlmICggIWNvbnRleHQgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XHJcblxyXG5cdFx0XHQvLyBQcmVjb21waWxlZCBtYXRjaGVycyB3aWxsIHN0aWxsIHZlcmlmeSBhbmNlc3RyeSwgc28gc3RlcCB1cCBhIGxldmVsXHJcblx0XHRcdH0gZWxzZSBpZiAoIGNvbXBpbGVkICkge1xyXG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcclxuXHRcdGkgPSBtYXRjaEV4cHJbXCJuZWVkc0NvbnRleHRcIl0udGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoO1xyXG5cdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdHRva2VuID0gdG9rZW5zW2ldO1xyXG5cclxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxyXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkge1xyXG5cdFx0XHRcdC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9yc1xyXG5cdFx0XHRcdGlmICggKHNlZWQgPSBmaW5kKFxyXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxyXG5cdFx0XHRcdFx0cnNpYmxpbmcudGVzdCggdG9rZW5zWzBdLnR5cGUgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxyXG5cdFx0XHRcdCkpICkge1xyXG5cclxuXHRcdFx0XHRcdC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseVxyXG5cdFx0XHRcdFx0dG9rZW5zLnNwbGljZSggaSwgMSApO1xyXG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcclxuXHRcdFx0XHRcdGlmICggIXNlbGVjdG9yICkge1xyXG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7XHJcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXHJcblx0Ly8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZVxyXG5cdCggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKShcclxuXHRcdHNlZWQsXHJcblx0XHRjb250ZXh0LFxyXG5cdFx0IWRvY3VtZW50SXNIVE1MLFxyXG5cdFx0cmVzdWx0cyxcclxuXHRcdHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcclxuXHQpO1xyXG5cdHJldHVybiByZXN1bHRzO1xyXG59O1xyXG5cclxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcclxuXHJcbi8vIFNvcnQgc3RhYmlsaXR5XHJcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoXCJcIikuc29ydCggc29ydE9yZGVyICkuam9pbihcIlwiKSA9PT0gZXhwYW5kbztcclxuXHJcbi8vIFN1cHBvcnQ6IENocm9tZSAxNC0zNStcclxuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxyXG5zdXBwb3J0LmRldGVjdER1cGxpY2F0ZXMgPSAhIWhhc0R1cGxpY2F0ZTtcclxuXHJcbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxyXG5zZXREb2N1bWVudCgpO1xyXG5cclxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcclxuLy8gRGV0YWNoZWQgbm9kZXMgY29uZm91bmRpbmdseSBmb2xsb3cgKmVhY2ggb3RoZXIqXHJcbnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYxICkge1xyXG5cdC8vIFNob3VsZCByZXR1cm4gMSwgYnV0IHJldHVybnMgNCAoZm9sbG93aW5nKVxyXG5cdHJldHVybiBkaXYxLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpICkgJiAxO1xyXG59KTtcclxuXHJcbi8vIFN1cHBvcnQ6IElFPDhcclxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcclxuLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweFxyXG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcclxuXHRkaXYuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCI7XHJcblx0cmV0dXJuIGRpdi5maXJzdENoaWxkLmdldEF0dHJpYnV0ZShcImhyZWZcIikgPT09IFwiI1wiIDtcclxufSkgKSB7XHJcblx0YWRkSGFuZGxlKCBcInR5cGV8aHJlZnxoZWlnaHR8d2lkdGhcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xyXG5cdFx0aWYgKCAhaXNYTUwgKSB7XHJcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XHJcblx0XHR9XHJcblx0fSk7XHJcbn1cclxuXHJcbi8vIFN1cHBvcnQ6IElFPDlcclxuLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKVxyXG5pZiAoICFzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWFzc2VydChmdW5jdGlvbiggZGl2ICkge1xyXG5cdGRpdi5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCI7XHJcblx0ZGl2LmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcclxuXHRyZXR1cm4gZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gXCJcIjtcclxufSkgKSB7XHJcblx0YWRkSGFuZGxlKCBcInZhbHVlXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcclxuXHRcdGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICkge1xyXG5cdFx0XHRyZXR1cm4gZWxlbS5kZWZhdWx0VmFsdWU7XHJcblx0XHR9XHJcblx0fSk7XHJcbn1cclxuXHJcbi8vIFN1cHBvcnQ6IElFPDlcclxuLy8gVXNlIGdldEF0dHJpYnV0ZU5vZGUgdG8gZmV0Y2ggYm9vbGVhbnMgd2hlbiBnZXRBdHRyaWJ1dGUgbGllc1xyXG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcclxuXHRyZXR1cm4gZGl2LmdldEF0dHJpYnV0ZShcImRpc2FibGVkXCIpID09IG51bGw7XHJcbn0pICkge1xyXG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcclxuXHRcdHZhciB2YWw7XHJcblx0XHRpZiAoICFpc1hNTCApIHtcclxuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XHJcblx0XHRcdFx0XHQodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkpICYmIHZhbC5zcGVjaWZpZWQgP1xyXG5cdFx0XHRcdFx0dmFsLnZhbHVlIDpcclxuXHRcdFx0XHRudWxsO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG59XHJcblxyXG5yZXR1cm4gU2l6emxlO1xyXG5cclxufSkoIHdpbmRvdyApO1xyXG5cclxuXHJcblxyXG5qUXVlcnkuZmluZCA9IFNpenpsZTtcclxualF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzO1xyXG5qUXVlcnkuZXhwcltcIjpcIl0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xyXG5qUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7XHJcbmpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7XHJcbmpRdWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDtcclxualF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zO1xyXG5cclxuXHJcblxyXG52YXIgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtcclxuXHJcbnZhciByc2luZ2xlVGFnID0gKC9ePChcXHcrKVxccypcXC8/Pig/OjxcXC9cXDE+fCkkLyk7XHJcblxyXG5cclxuXHJcbnZhciByaXNTaW1wbGUgPSAvXi5bXjojXFxbXFwuLF0qJC87XHJcblxyXG4vLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdFxyXG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcclxuXHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcclxuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xyXG5cdFx0XHQvKiBqc2hpbnQgLVcwMTggKi9cclxuXHRcdFx0cmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90O1xyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblx0aWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7XHJcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0cmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDtcclxuXHRcdH0pO1xyXG5cclxuXHR9XHJcblxyXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciA9PT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdGlmICggcmlzU2ltcGxlLnRlc3QoIHF1YWxpZmllciApICkge1xyXG5cdFx0XHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cXVhbGlmaWVyID0galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cyApO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID49IDAgKSAhPT0gbm90O1xyXG5cdH0pO1xyXG59XHJcblxyXG5qUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7XHJcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xyXG5cclxuXHRpZiAoIG5vdCApIHtcclxuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgP1xyXG5cdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdIDpcclxuXHRcdGpRdWVyeS5maW5kLm1hdGNoZXMoIGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVtcywgZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxO1xyXG5cdFx0fSkpO1xyXG59O1xyXG5cclxualF1ZXJ5LmZuLmV4dGVuZCh7XHJcblx0ZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xyXG5cdFx0dmFyIGksXHJcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoLFxyXG5cdFx0XHRyZXQgPSBbXSxcclxuXHRcdFx0c2VsZiA9IHRoaXM7XHJcblxyXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlcihmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xyXG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcclxuXHRcdFx0alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE5lZWRlZCBiZWNhdXNlICQoIHNlbGVjdG9yLCBjb250ZXh0ICkgYmVjb21lcyAkKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKVxyXG5cdFx0cmV0ID0gdGhpcy5wdXNoU3RhY2soIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlKCByZXQgKSA6IHJldCApO1xyXG5cdFx0cmV0LnNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciA/IHRoaXMuc2VsZWN0b3IgKyBcIiBcIiArIHNlbGVjdG9yIDogc2VsZWN0b3I7XHJcblx0XHRyZXR1cm4gcmV0O1xyXG5cdH0sXHJcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyh0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UpICk7XHJcblx0fSxcclxuXHRub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcclxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlKSApO1xyXG5cdH0sXHJcblx0aXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcclxuXHRcdHJldHVybiAhIXdpbm5vdyhcclxuXHRcdFx0dGhpcyxcclxuXHJcblx0XHRcdC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXRcclxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxyXG5cdFx0XHR0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID9cclxuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9yICkgOlxyXG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxyXG5cdFx0XHRmYWxzZVxyXG5cdFx0KS5sZW5ndGg7XHJcblx0fVxyXG59KTtcclxuXHJcblxyXG4vLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVjdFxyXG5cclxuXHJcbi8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KVxyXG52YXIgcm9vdGpRdWVyeSxcclxuXHJcblx0Ly8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3NcclxuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpXHJcblx0Ly8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpXHJcblx0cnF1aWNrRXhwciA9IC9eKD86XFxzKig8W1xcd1xcV10rPilbXj5dKnwjKFtcXHctXSopKSQvLFxyXG5cclxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XHJcblx0XHR2YXIgbWF0Y2gsIGVsZW07XHJcblxyXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXHJcblx0XHRpZiAoICFzZWxlY3RvciApIHtcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSGFuZGxlIEhUTUwgc3RyaW5nc1xyXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdGlmICggc2VsZWN0b3JbMF0gPT09IFwiPFwiICYmIHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09IFwiPlwiICYmIHNlbGVjdG9yLmxlbmd0aCA+PSAzICkge1xyXG5cdFx0XHRcdC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrXHJcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XHJcblxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXHJcblx0XHRcdGlmICggbWF0Y2ggJiYgKG1hdGNoWzFdIHx8ICFjb250ZXh0KSApIHtcclxuXHJcblx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpXHJcblx0XHRcdFx0aWYgKCBtYXRjaFsxXSApIHtcclxuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFswXSA6IGNvbnRleHQ7XHJcblxyXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XHJcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudFxyXG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKFxyXG5cdFx0XHRcdFx0XHRtYXRjaFsxXSxcclxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcclxuXHRcdFx0XHRcdFx0dHJ1ZVxyXG5cdFx0XHRcdFx0KSApO1xyXG5cclxuXHRcdFx0XHRcdC8vIEhBTkRMRTogJChodG1sLCBwcm9wcylcclxuXHRcdFx0XHRcdGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsxXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7XHJcblx0XHRcdFx0XHRcdGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJsZVxyXG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlc1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmF0dHIoIG1hdGNoLCBjb250ZXh0WyBtYXRjaCBdICk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0XHRcdC8vIEhBTkRMRTogJCgjaWQpXHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbMl0gKTtcclxuXHJcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBCbGFja2JlcnJ5IDQuNlxyXG5cdFx0XHRcdFx0Ly8gZ0VCSUQgcmV0dXJucyBub2RlcyBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICgjNjk2MylcclxuXHRcdFx0XHRcdGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7XHJcblx0XHRcdFx0XHRcdC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0XHJcblx0XHRcdFx0XHRcdHRoaXMubGVuZ3RoID0gMTtcclxuXHRcdFx0XHRcdFx0dGhpc1swXSA9IGVsZW07XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5jb250ZXh0ID0gZG9jdW1lbnQ7XHJcblx0XHRcdFx0XHR0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKVxyXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcclxuXHRcdFx0XHRyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3RqUXVlcnkgKS5maW5kKCBzZWxlY3RvciApO1xyXG5cclxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXHJcblx0XHRcdC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxyXG5cdFx0fSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7XHJcblx0XHRcdHRoaXMuY29udGV4dCA9IHRoaXNbMF0gPSBzZWxlY3RvcjtcclxuXHRcdFx0dGhpcy5sZW5ndGggPSAxO1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHQvLyBIQU5ETEU6ICQoZnVuY3Rpb24pXHJcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcclxuXHRcdH0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBzZWxlY3RvciApICkge1xyXG5cdFx0XHRyZXR1cm4gdHlwZW9mIHJvb3RqUXVlcnkucmVhZHkgIT09IFwidW5kZWZpbmVkXCIgP1xyXG5cdFx0XHRcdHJvb3RqUXVlcnkucmVhZHkoIHNlbGVjdG9yICkgOlxyXG5cdFx0XHRcdC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnRcclxuXHRcdFx0XHRzZWxlY3RvciggalF1ZXJ5ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBzZWxlY3Rvci5zZWxlY3RvciAhPT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3I7XHJcblx0XHRcdHRoaXMuY29udGV4dCA9IHNlbGVjdG9yLmNvbnRleHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7XHJcblx0fTtcclxuXHJcbi8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb25cclxuaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XHJcblxyXG4vLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlXHJcbnJvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7XHJcblxyXG5cclxudmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFxyXG5cdC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0XHJcblx0Z3VhcmFudGVlZFVuaXF1ZSA9IHtcclxuXHRcdGNoaWxkcmVuOiB0cnVlLFxyXG5cdFx0Y29udGVudHM6IHRydWUsXHJcblx0XHRuZXh0OiB0cnVlLFxyXG5cdFx0cHJldjogdHJ1ZVxyXG5cdH07XHJcblxyXG5qUXVlcnkuZXh0ZW5kKHtcclxuXHRkaXI6IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkge1xyXG5cdFx0dmFyIG1hdGNoZWQgPSBbXSxcclxuXHRcdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHtcclxuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xyXG5cdFx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBtYXRjaGVkO1xyXG5cdH0sXHJcblxyXG5cdHNpYmxpbmc6IGZ1bmN0aW9uKCBuLCBlbGVtICkge1xyXG5cdFx0dmFyIG1hdGNoZWQgPSBbXTtcclxuXHJcblx0XHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xyXG5cdFx0XHRpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHtcclxuXHRcdFx0XHRtYXRjaGVkLnB1c2goIG4gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBtYXRjaGVkO1xyXG5cdH1cclxufSk7XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKHtcclxuXHRoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XHJcblx0XHR2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksXHJcblx0XHRcdGwgPSB0YXJnZXRzLmxlbmd0aDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBpID0gMDtcclxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xyXG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzW2ldICkgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH0sXHJcblxyXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XHJcblx0XHR2YXIgY3VyLFxyXG5cdFx0XHRpID0gMCxcclxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxyXG5cdFx0XHRtYXRjaGVkID0gW10sXHJcblx0XHRcdHBvcyA9IHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgfHwgdHlwZW9mIHNlbGVjdG9ycyAhPT0gXCJzdHJpbmdcIiA/XHJcblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvcnMsIGNvbnRleHQgfHwgdGhpcy5jb250ZXh0ICkgOlxyXG5cdFx0XHRcdDA7XHJcblxyXG5cdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xyXG5cdFx0XHRmb3IgKCBjdXIgPSB0aGlzW2ldOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0XHQvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHNcclxuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmIChwb3MgP1xyXG5cdFx0XHRcdFx0cG9zLmluZGV4KGN1cikgPiAtMSA6XHJcblxyXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8gU2l6emxlXHJcblx0XHRcdFx0XHRjdXIubm9kZVR5cGUgPT09IDEgJiZcclxuXHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGN1ciwgc2VsZWN0b3JzKSkgKSB7XHJcblxyXG5cdFx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBjdXIgKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZSggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xyXG5cdH0sXHJcblxyXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxyXG5cdGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHJcblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxyXG5cdFx0aWYgKCAhZWxlbSApIHtcclxuXHRcdFx0cmV0dXJuICggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEluZGV4IGluIHNlbGVjdG9yXHJcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdGhpc1sgMCBdICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50XHJcblx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLFxyXG5cclxuXHRcdFx0Ly8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkXHJcblx0XHRcdGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbVxyXG5cdFx0KTtcclxuXHR9LFxyXG5cclxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcclxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayhcclxuXHRcdFx0alF1ZXJ5LnVuaXF1ZShcclxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApXHJcblx0XHRcdClcclxuXHRcdCk7XHJcblx0fSxcclxuXHJcblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID9cclxuXHRcdFx0dGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlcihzZWxlY3RvcilcclxuXHRcdCk7XHJcblx0fVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkge1xyXG5cdHdoaWxlICggKGN1ciA9IGN1cltkaXJdKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxyXG5cdHJldHVybiBjdXI7XHJcbn1cclxuXHJcbmpRdWVyeS5lYWNoKHtcclxuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcclxuXHRcdHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XHJcblx0fSxcclxuXHRwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiApO1xyXG5cdH0sXHJcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XHJcblx0XHRyZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XHJcblx0fSxcclxuXHRuZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcclxuXHR9LFxyXG5cdHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcclxuXHR9LFxyXG5cdG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0cmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xyXG5cdH0sXHJcblx0cHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRyZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xyXG5cdH0sXHJcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XHJcblx0XHRyZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xyXG5cdH0sXHJcblx0cHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XHJcblx0XHRyZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiwgdW50aWwgKTtcclxuXHR9LFxyXG5cdHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdHJldHVybiBqUXVlcnkuc2libGluZyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7XHJcblx0fSxcclxuXHRjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRyZXR1cm4galF1ZXJ5LnNpYmxpbmcoIGVsZW0uZmlyc3RDaGlsZCApO1xyXG5cdH0sXHJcblx0Y29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0cmV0dXJuIGVsZW0uY29udGVudERvY3VtZW50IHx8IGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApO1xyXG5cdH1cclxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xyXG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHtcclxuXHRcdHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7XHJcblxyXG5cdFx0aWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSBcIlVudGlsXCIgKSB7XHJcblx0XHRcdHNlbGVjdG9yID0gdW50aWw7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xyXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xyXG5cdFx0XHRpZiAoICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7XHJcblx0XHRcdFx0alF1ZXJ5LnVuaXF1ZSggbWF0Y2hlZCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xyXG5cdFx0XHRpZiAoIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7XHJcblx0XHRcdFx0bWF0Y2hlZC5yZXZlcnNlKCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcclxuXHR9O1xyXG59KTtcclxudmFyIHJub3R3aGl0ZSA9ICgvXFxTKy9nKTtcclxuXHJcblxyXG5cclxuLy8gU3RyaW5nIHRvIE9iamVjdCBvcHRpb25zIGZvcm1hdCBjYWNoZVxyXG52YXIgb3B0aW9uc0NhY2hlID0ge307XHJcblxyXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lcyBhbmQgc3RvcmUgaW4gY2FjaGVcclxuZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHtcclxuXHR2YXIgb2JqZWN0ID0gb3B0aW9uc0NhY2hlWyBvcHRpb25zIF0gPSB7fTtcclxuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xyXG5cdFx0b2JqZWN0WyBmbGFnIF0gPSB0cnVlO1xyXG5cdH0pO1xyXG5cdHJldHVybiBvYmplY3Q7XHJcbn1cclxuXHJcbi8qXHJcbiAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxyXG4gKlxyXG4gKlx0b3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvd1xyXG4gKlx0XHRcdHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3RcclxuICpcclxuICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmVcclxuICogXCJmaXJlZFwiIG11bHRpcGxlIHRpbWVzLlxyXG4gKlxyXG4gKiBQb3NzaWJsZSBvcHRpb25zOlxyXG4gKlxyXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXHJcbiAqXHJcbiAqXHRtZW1vcnk6XHRcdFx0d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZFxyXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXHJcbiAqXHRcdFx0XHRcdHZhbHVlcyAobGlrZSBhIERlZmVycmVkKVxyXG4gKlxyXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxyXG4gKlxyXG4gKlx0c3RvcE9uRmFsc2U6XHRpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcclxuICpcclxuICovXHJcbmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcclxuXHJcblx0Ly8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRlZFxyXG5cdC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdClcclxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xyXG5cdFx0KCBvcHRpb25zQ2FjaGVbIG9wdGlvbnMgXSB8fCBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgKSA6XHJcblx0XHRqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApO1xyXG5cclxuXHR2YXIgLy8gTGFzdCBmaXJlIHZhbHVlIChmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzKVxyXG5cdFx0bWVtb3J5LFxyXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcclxuXHRcdGZpcmVkLFxyXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xyXG5cdFx0ZmlyaW5nLFxyXG5cdFx0Ly8gRmlyc3QgY2FsbGJhY2sgdG8gZmlyZSAodXNlZCBpbnRlcm5hbGx5IGJ5IGFkZCBhbmQgZmlyZVdpdGgpXHJcblx0XHRmaXJpbmdTdGFydCxcclxuXHRcdC8vIEVuZCBvZiB0aGUgbG9vcCB3aGVuIGZpcmluZ1xyXG5cdFx0ZmlyaW5nTGVuZ3RoLFxyXG5cdFx0Ly8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgcmVtb3ZlIGlmIG5lZWRlZClcclxuXHRcdGZpcmluZ0luZGV4LFxyXG5cdFx0Ly8gQWN0dWFsIGNhbGxiYWNrIGxpc3RcclxuXHRcdGxpc3QgPSBbXSxcclxuXHRcdC8vIFN0YWNrIG9mIGZpcmUgY2FsbHMgZm9yIHJlcGVhdGFibGUgbGlzdHNcclxuXHRcdHN0YWNrID0gIW9wdGlvbnMub25jZSAmJiBbXSxcclxuXHRcdC8vIEZpcmUgY2FsbGJhY2tzXHJcblx0XHRmaXJlID0gZnVuY3Rpb24oIGRhdGEgKSB7XHJcblx0XHRcdG1lbW9yeSA9IG9wdGlvbnMubWVtb3J5ICYmIGRhdGE7XHJcblx0XHRcdGZpcmVkID0gdHJ1ZTtcclxuXHRcdFx0ZmlyaW5nSW5kZXggPSBmaXJpbmdTdGFydCB8fCAwO1xyXG5cdFx0XHRmaXJpbmdTdGFydCA9IDA7XHJcblx0XHRcdGZpcmluZ0xlbmd0aCA9IGxpc3QubGVuZ3RoO1xyXG5cdFx0XHRmaXJpbmcgPSB0cnVlO1xyXG5cdFx0XHRmb3IgKCA7IGxpc3QgJiYgZmlyaW5nSW5kZXggPCBmaXJpbmdMZW5ndGg7IGZpcmluZ0luZGV4KysgKSB7XHJcblx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBkYXRhWyAwIF0sIGRhdGFbIDEgXSApID09PSBmYWxzZSAmJiBvcHRpb25zLnN0b3BPbkZhbHNlICkge1xyXG5cdFx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7IC8vIFRvIHByZXZlbnQgZnVydGhlciBjYWxscyB1c2luZyBhZGRcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcclxuXHRcdFx0aWYgKCBsaXN0ICkge1xyXG5cdFx0XHRcdGlmICggc3RhY2sgKSB7XHJcblx0XHRcdFx0XHRpZiAoIHN0YWNrLmxlbmd0aCApIHtcclxuXHRcdFx0XHRcdFx0ZmlyZSggc3RhY2suc2hpZnQoKSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1lbW9yeSApIHtcclxuXHRcdFx0XHRcdGxpc3QgPSBbXTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0c2VsZi5kaXNhYmxlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0Ly8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3RcclxuXHRcdHNlbGYgPSB7XHJcblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3RcclxuXHRcdFx0YWRkOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XHJcblx0XHRcdFx0XHQvLyBGaXJzdCwgd2Ugc2F2ZSB0aGUgY3VycmVudCBsZW5ndGhcclxuXHRcdFx0XHRcdHZhciBzdGFydCA9IGxpc3QubGVuZ3RoO1xyXG5cdFx0XHRcdFx0KGZ1bmN0aW9uIGFkZCggYXJncyApIHtcclxuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIHR5cGUgPSBqUXVlcnkudHlwZSggYXJnICk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ1bmN0aW9uXCIgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0LnB1c2goIGFyZyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XHJcblx0XHRcdFx0XHRcdFx0XHRhZGQoIGFyZyApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9KSggYXJndW1lbnRzICk7XHJcblx0XHRcdFx0XHQvLyBEbyB3ZSBuZWVkIHRvIGFkZCB0aGUgY2FsbGJhY2tzIHRvIHRoZVxyXG5cdFx0XHRcdFx0Ly8gY3VycmVudCBmaXJpbmcgYmF0Y2g/XHJcblx0XHRcdFx0XHRpZiAoIGZpcmluZyApIHtcclxuXHRcdFx0XHRcdFx0ZmlyaW5nTGVuZ3RoID0gbGlzdC5sZW5ndGg7XHJcblx0XHRcdFx0XHQvLyBXaXRoIG1lbW9yeSwgaWYgd2UncmUgbm90IGZpcmluZyB0aGVuXHJcblx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgY2FsbCByaWdodCBhd2F5XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCBtZW1vcnkgKSB7XHJcblx0XHRcdFx0XHRcdGZpcmluZ1N0YXJ0ID0gc3RhcnQ7XHJcblx0XHRcdFx0XHRcdGZpcmUoIG1lbW9yeSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdFxyXG5cdFx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGlmICggbGlzdCApIHtcclxuXHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XHJcblx0XHRcdFx0XHRcdHZhciBpbmRleDtcclxuXHRcdFx0XHRcdFx0d2hpbGUgKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7XHJcblx0XHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXHJcblx0XHRcdFx0XHRcdFx0aWYgKCBmaXJpbmcgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0xlbmd0aCApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmlyaW5nTGVuZ3RoLS07XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaXJpbmdJbmRleC0tO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxyXG5cdFx0XHQvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC5cclxuXHRcdFx0aGFzOiBmdW5jdGlvbiggZm4gKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZuID8galF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6ICEhKCBsaXN0ICYmIGxpc3QubGVuZ3RoICk7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3RcclxuXHRcdFx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGxpc3QgPSBbXTtcclxuXHRcdFx0XHRmaXJpbmdMZW5ndGggPSAwO1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyBIYXZlIHRoZSBsaXN0IGRvIG5vdGhpbmcgYW55bW9yZVxyXG5cdFx0XHRkaXNhYmxlOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRsaXN0ID0gc3RhY2sgPSBtZW1vcnkgPSB1bmRlZmluZWQ7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIElzIGl0IGRpc2FibGVkP1xyXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuICFsaXN0O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyBMb2NrIHRoZSBsaXN0IGluIGl0cyBjdXJyZW50IHN0YXRlXHJcblx0XHRcdGxvY2s6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHN0YWNrID0gdW5kZWZpbmVkO1xyXG5cdFx0XHRcdGlmICggIW1lbW9yeSApIHtcclxuXHRcdFx0XHRcdHNlbGYuZGlzYWJsZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly8gSXMgaXQgbG9ja2VkP1xyXG5cdFx0XHRsb2NrZWQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiAhc3RhY2s7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHNcclxuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xyXG5cdFx0XHRcdGlmICggbGlzdCAmJiAoICFmaXJlZCB8fCBzdGFjayApICkge1xyXG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XHJcblx0XHRcdFx0XHRhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdO1xyXG5cdFx0XHRcdFx0aWYgKCBmaXJpbmcgKSB7XHJcblx0XHRcdFx0XHRcdHN0YWNrLnB1c2goIGFyZ3MgKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGZpcmUoIGFyZ3MgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXHJcblx0XHRcdGZpcmU6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApO1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2VcclxuXHRcdFx0ZmlyZWQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cclxuXHRyZXR1cm4gc2VsZjtcclxufTtcclxuXHJcblxyXG5qUXVlcnkuZXh0ZW5kKHtcclxuXHJcblx0RGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkge1xyXG5cdFx0dmFyIHR1cGxlcyA9IFtcclxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgbGlzdGVuZXIgbGlzdCwgZmluYWwgc3RhdGVcclxuXHRcdFx0XHRbIFwicmVzb2x2ZVwiLCBcImRvbmVcIiwgalF1ZXJ5LkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLCBcInJlc29sdmVkXCIgXSxcclxuXHRcdFx0XHRbIFwicmVqZWN0XCIsIFwiZmFpbFwiLCBqUXVlcnkuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksIFwicmVqZWN0ZWRcIiBdLFxyXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKFwibWVtb3J5XCIpIF1cclxuXHRcdFx0XSxcclxuXHRcdFx0c3RhdGUgPSBcInBlbmRpbmdcIixcclxuXHRcdFx0cHJvbWlzZSA9IHtcclxuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gc3RhdGU7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0ZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHRoZW46IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHtcclxuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XHJcblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcclxuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBmbnNbIGkgXSApICYmIGZuc1sgaSBdO1xyXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkWyBkb25lIHwgZmFpbCB8IHByb2dyZXNzIF0gZm9yIGZvcndhcmRpbmcgYWN0aW9ucyB0byBuZXdEZWZlclxyXG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsxXSBdKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmZhaWwoIG5ld0RlZmVyLnJlamVjdCApXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSggdGhpcyA9PT0gcHJvbWlzZSA/IG5ld0RlZmVyLnByb21pc2UoKSA6IHRoaXMsIGZuID8gWyByZXR1cm5lZCBdIDogYXJndW1lbnRzICk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRmbnMgPSBudWxsO1xyXG5cdFx0XHRcdFx0fSkucHJvbWlzZSgpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0Ly8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZFxyXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3RcclxuXHRcdFx0XHRwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0ZGVmZXJyZWQgPSB7fTtcclxuXHJcblx0XHQvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0XHJcblx0XHRwcm9taXNlLnBpcGUgPSBwcm9taXNlLnRoZW47XHJcblxyXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xyXG5cdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xyXG5cdFx0XHR2YXIgbGlzdCA9IHR1cGxlWyAyIF0sXHJcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgMyBdO1xyXG5cclxuXHRcdFx0Ly8gcHJvbWlzZVsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdID0gbGlzdC5hZGRcclxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbMV0gXSA9IGxpc3QuYWRkO1xyXG5cclxuXHRcdFx0Ly8gSGFuZGxlIHN0YXRlXHJcblx0XHRcdGlmICggc3RhdGVTdHJpbmcgKSB7XHJcblx0XHRcdFx0bGlzdC5hZGQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHQvLyBzdGF0ZSA9IFsgcmVzb2x2ZWQgfCByZWplY3RlZCBdXHJcblx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RyaW5nO1xyXG5cclxuXHRcdFx0XHQvLyBbIHJlamVjdF9saXN0IHwgcmVzb2x2ZV9saXN0IF0uZGlzYWJsZTsgcHJvZ3Jlc3NfbGlzdC5sb2NrXHJcblx0XHRcdFx0fSwgdHVwbGVzWyBpIF4gMSBdWyAyIF0uZGlzYWJsZSwgdHVwbGVzWyAyIF1bIDIgXS5sb2NrICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIGRlZmVycmVkWyByZXNvbHZlIHwgcmVqZWN0IHwgbm90aWZ5IF1cclxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWzBdIF0gPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbMF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHByb21pc2UgOiB0aGlzLCBhcmd1bWVudHMgKTtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fTtcclxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWzBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2VcclxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcclxuXHJcblx0XHQvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55XHJcblx0XHRpZiAoIGZ1bmMgKSB7XHJcblx0XHRcdGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQWxsIGRvbmUhXHJcblx0XHRyZXR1cm4gZGVmZXJyZWQ7XHJcblx0fSxcclxuXHJcblx0Ly8gRGVmZXJyZWQgaGVscGVyXHJcblx0d2hlbjogZnVuY3Rpb24oIHN1Ym9yZGluYXRlIC8qICwgLi4uLCBzdWJvcmRpbmF0ZU4gKi8gKSB7XHJcblx0XHR2YXIgaSA9IDAsXHJcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcclxuXHRcdFx0bGVuZ3RoID0gcmVzb2x2ZVZhbHVlcy5sZW5ndGgsXHJcblxyXG5cdFx0XHQvLyB0aGUgY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzXHJcblx0XHRcdHJlbWFpbmluZyA9IGxlbmd0aCAhPT0gMSB8fCAoIHN1Ym9yZGluYXRlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBzdWJvcmRpbmF0ZS5wcm9taXNlICkgKSA/IGxlbmd0aCA6IDAsXHJcblxyXG5cdFx0XHQvLyB0aGUgbWFzdGVyIERlZmVycmVkLiBJZiByZXNvbHZlVmFsdWVzIGNvbnNpc3Qgb2Ygb25seSBhIHNpbmdsZSBEZWZlcnJlZCwganVzdCB1c2UgdGhhdC5cclxuXHRcdFx0ZGVmZXJyZWQgPSByZW1haW5pbmcgPT09IDEgPyBzdWJvcmRpbmF0ZSA6IGpRdWVyeS5EZWZlcnJlZCgpLFxyXG5cclxuXHRcdFx0Ly8gVXBkYXRlIGZ1bmN0aW9uIGZvciBib3RoIHJlc29sdmUgYW5kIHByb2dyZXNzIHZhbHVlc1xyXG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGksIGNvbnRleHRzLCB2YWx1ZXMgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHtcclxuXHRcdFx0XHRcdGNvbnRleHRzWyBpIF0gPSB0aGlzO1xyXG5cdFx0XHRcdFx0dmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7XHJcblx0XHRcdFx0XHRpZiAoIHZhbHVlcyA9PT0gcHJvZ3Jlc3NWYWx1ZXMgKSB7XHJcblx0XHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XHJcblx0XHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjb250ZXh0cywgdmFsdWVzICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdHByb2dyZXNzVmFsdWVzLCBwcm9ncmVzc0NvbnRleHRzLCByZXNvbHZlQ29udGV4dHM7XHJcblxyXG5cdFx0Ly8gQWRkIGxpc3RlbmVycyB0byBEZWZlcnJlZCBzdWJvcmRpbmF0ZXM7IHRyZWF0IG90aGVycyBhcyByZXNvbHZlZFxyXG5cdFx0aWYgKCBsZW5ndGggPiAxICkge1xyXG5cdFx0XHRwcm9ncmVzc1ZhbHVlcyA9IG5ldyBBcnJheSggbGVuZ3RoICk7XHJcblx0XHRcdHByb2dyZXNzQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApO1xyXG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApO1xyXG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcclxuXHRcdFx0XHRpZiAoIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdLnByb21pc2UgKSApIHtcclxuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlKClcclxuXHRcdFx0XHRcdFx0LmRvbmUoIHVwZGF0ZUZ1bmMoIGksIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApIClcclxuXHRcdFx0XHRcdFx0LmZhaWwoIGRlZmVycmVkLnJlamVjdCApXHJcblx0XHRcdFx0XHRcdC5wcm9ncmVzcyggdXBkYXRlRnVuYyggaSwgcHJvZ3Jlc3NDb250ZXh0cywgcHJvZ3Jlc3NWYWx1ZXMgKSApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQtLXJlbWFpbmluZztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBJZiB3ZSdyZSBub3Qgd2FpdGluZyBvbiBhbnl0aGluZywgcmVzb2x2ZSB0aGUgbWFzdGVyXHJcblx0XHRpZiAoICFyZW1haW5pbmcgKSB7XHJcblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpO1xyXG5cdH1cclxufSk7XHJcblxyXG5cclxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XHJcbnZhciByZWFkeUxpc3Q7XHJcblxyXG5qUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7XHJcblx0Ly8gQWRkIHRoZSBjYWxsYmFja1xyXG5cdGpRdWVyeS5yZWFkeS5wcm9taXNlKCkuZG9uZSggZm4gKTtcclxuXHJcblx0cmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG5qUXVlcnkuZXh0ZW5kKHtcclxuXHQvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLlxyXG5cdGlzUmVhZHk6IGZhbHNlLFxyXG5cclxuXHQvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlXHJcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODFcclxuXHRyZWFkeVdhaXQ6IDEsXHJcblxyXG5cdC8vIEhvbGQgKG9yIHJlbGVhc2UpIHRoZSByZWFkeSBldmVudFxyXG5cdGhvbGRSZWFkeTogZnVuY3Rpb24oIGhvbGQgKSB7XHJcblx0XHRpZiAoIGhvbGQgKSB7XHJcblx0XHRcdGpRdWVyeS5yZWFkeVdhaXQrKztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGpRdWVyeS5yZWFkeSggdHJ1ZSApO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcclxuXHRyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7XHJcblxyXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxyXG5cdFx0aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHlcclxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcclxuXHJcblx0XHQvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZVxyXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlXHJcblx0XHRyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7XHJcblxyXG5cdFx0Ly8gVHJpZ2dlciBhbnkgYm91bmQgcmVhZHkgZXZlbnRzXHJcblx0XHRpZiAoIGpRdWVyeS5mbi50cmlnZ2VySGFuZGxlciApIHtcclxuXHRcdFx0alF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXJIYW5kbGVyKCBcInJlYWR5XCIgKTtcclxuXHRcdFx0alF1ZXJ5KCBkb2N1bWVudCApLm9mZiggXCJyZWFkeVwiICk7XHJcblx0XHR9XHJcblx0fVxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxyXG4gKi9cclxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xyXG5cdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQsIGZhbHNlICk7XHJcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQsIGZhbHNlICk7XHJcblx0alF1ZXJ5LnJlYWR5KCk7XHJcbn1cclxuXHJcbmpRdWVyeS5yZWFkeS5wcm9taXNlID0gZnVuY3Rpb24oIG9iaiApIHtcclxuXHRpZiAoICFyZWFkeUxpc3QgKSB7XHJcblxyXG5cdFx0cmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XHJcblxyXG5cdFx0Ly8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXHJcblx0XHQvLyBXZSBvbmNlIHRyaWVkIHRvIHVzZSByZWFkeVN0YXRlIFwiaW50ZXJhY3RpdmVcIiBoZXJlLCBidXQgaXQgY2F1c2VkIGlzc3VlcyBsaWtlIHRoZSBvbmVcclxuXHRcdC8vIGRpc2NvdmVyZWQgYnkgQ2hyaXNTIGhlcmU6IGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMjgyI2NvbW1lbnQ6MTVcclxuXHRcdGlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiICkge1xyXG5cdFx0XHQvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHlcclxuXHRcdFx0c2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XHJcblxyXG5cdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2tcclxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCwgZmFsc2UgKTtcclxuXHJcblx0XHRcdC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrXHJcblx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkLCBmYWxzZSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gcmVhZHlMaXN0LnByb21pc2UoIG9iaiApO1xyXG59O1xyXG5cclxuLy8gS2ljayBvZmYgdGhlIERPTSByZWFkeSBjaGVjayBldmVuIGlmIHRoZSB1c2VyIGRvZXMgbm90XHJcbmpRdWVyeS5yZWFkeS5wcm9taXNlKCk7XHJcblxyXG5cclxuXHJcblxyXG4vLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb25cclxuLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uXHJcbnZhciBhY2Nlc3MgPSBqUXVlcnkuYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkge1xyXG5cdHZhciBpID0gMCxcclxuXHRcdGxlbiA9IGVsZW1zLmxlbmd0aCxcclxuXHRcdGJ1bGsgPSBrZXkgPT0gbnVsbDtcclxuXHJcblx0Ly8gU2V0cyBtYW55IHZhbHVlc1xyXG5cdGlmICggalF1ZXJ5LnR5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xyXG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcclxuXHRcdGZvciAoIGkgaW4ga2V5ICkge1xyXG5cdFx0XHRqUXVlcnkuYWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVtpXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApO1xyXG5cdFx0fVxyXG5cclxuXHQvLyBTZXRzIG9uZSB2YWx1ZVxyXG5cdH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xyXG5cclxuXHRcdGlmICggIWpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xyXG5cdFx0XHRyYXcgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggYnVsayApIHtcclxuXHRcdFx0Ly8gQnVsayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0XHJcblx0XHRcdGlmICggcmF3ICkge1xyXG5cdFx0XHRcdGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApO1xyXG5cdFx0XHRcdGZuID0gbnVsbDtcclxuXHJcblx0XHRcdC8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXNcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRidWxrID0gZm47XHJcblx0XHRcdFx0Zm4gPSBmdW5jdGlvbiggZWxlbSwga2V5LCB2YWx1ZSApIHtcclxuXHRcdFx0XHRcdHJldHVybiBidWxrLmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApO1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGZuICkge1xyXG5cdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcclxuXHRcdFx0XHRmbiggZWxlbXNbaV0sIGtleSwgcmF3ID8gdmFsdWUgOiB2YWx1ZS5jYWxsKCBlbGVtc1tpXSwgaSwgZm4oIGVsZW1zW2ldLCBrZXkgKSApICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBjaGFpbmFibGUgP1xyXG5cdFx0ZWxlbXMgOlxyXG5cclxuXHRcdC8vIEdldHNcclxuXHRcdGJ1bGsgP1xyXG5cdFx0XHRmbi5jYWxsKCBlbGVtcyApIDpcclxuXHRcdFx0bGVuID8gZm4oIGVsZW1zWzBdLCBrZXkgKSA6IGVtcHR5R2V0O1xyXG59O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gb2JqZWN0IGNhbiBoYXZlIGRhdGFcclxuICovXHJcbmpRdWVyeS5hY2NlcHREYXRhID0gZnVuY3Rpb24oIG93bmVyICkge1xyXG5cdC8vIEFjY2VwdHMgb25seTpcclxuXHQvLyAgLSBOb2RlXHJcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxyXG5cdC8vICAgIC0gTm9kZS5ET0NVTUVOVF9OT0RFXHJcblx0Ly8gIC0gT2JqZWN0XHJcblx0Ly8gICAgLSBBbnlcclxuXHQvKiBqc2hpbnQgLVcwMTggKi9cclxuXHRyZXR1cm4gb3duZXIubm9kZVR5cGUgPT09IDEgfHwgb3duZXIubm9kZVR5cGUgPT09IDkgfHwgISggK293bmVyLm5vZGVUeXBlICk7XHJcbn07XHJcblxyXG5cclxuZnVuY3Rpb24gRGF0YSgpIHtcclxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQsXHJcblx0Ly8gT2xkIFdlYktpdCBkb2VzIG5vdCBoYXZlIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucy9mcmVlemUgbWV0aG9kLFxyXG5cdC8vIHJldHVybiBuZXcgZW1wdHkgb2JqZWN0IGluc3RlYWQgd2l0aCBubyBbW3NldF1dIGFjY2Vzc29yXHJcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLmNhY2hlID0ge30sIDAsIHtcclxuXHRcdGdldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB7fTtcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xyXG59XHJcblxyXG5EYXRhLnVpZCA9IDE7XHJcbkRhdGEuYWNjZXB0cyA9IGpRdWVyeS5hY2NlcHREYXRhO1xyXG5cclxuRGF0YS5wcm90b3R5cGUgPSB7XHJcblx0a2V5OiBmdW5jdGlvbiggb3duZXIgKSB7XHJcblx0XHQvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2VycyxcclxuXHRcdC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgzMzUuXHJcblx0XHQvLyBBbHdheXMgcmV0dXJuIHRoZSBrZXkgZm9yIGEgZnJvemVuIG9iamVjdC5cclxuXHRcdGlmICggIURhdGEuYWNjZXB0cyggb3duZXIgKSApIHtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSB7fSxcclxuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIG93bmVyIG9iamVjdCBhbHJlYWR5IGhhcyBhIGNhY2hlIGtleVxyXG5cdFx0XHR1bmxvY2sgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XHJcblxyXG5cdFx0Ly8gSWYgbm90LCBjcmVhdGUgb25lXHJcblx0XHRpZiAoICF1bmxvY2sgKSB7XHJcblx0XHRcdHVubG9jayA9IERhdGEudWlkKys7XHJcblxyXG5cdFx0XHQvLyBTZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJsZSwgbm9uLXdyaXRhYmxlIHByb3BlcnR5XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0ZGVzY3JpcHRvclsgdGhpcy5leHBhbmRvIF0gPSB7IHZhbHVlOiB1bmxvY2sgfTtcclxuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyggb3duZXIsIGRlc2NyaXB0b3IgKTtcclxuXHJcblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NFxyXG5cdFx0XHQvLyBGYWxsYmFjayB0byBhIGxlc3Mgc2VjdXJlIGRlZmluaXRpb25cclxuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0ZGVzY3JpcHRvclsgdGhpcy5leHBhbmRvIF0gPSB1bmxvY2s7XHJcblx0XHRcdFx0alF1ZXJ5LmV4dGVuZCggb3duZXIsIGRlc2NyaXB0b3IgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEVuc3VyZSB0aGUgY2FjaGUgb2JqZWN0XHJcblx0XHRpZiAoICF0aGlzLmNhY2hlWyB1bmxvY2sgXSApIHtcclxuXHRcdFx0dGhpcy5jYWNoZVsgdW5sb2NrIF0gPSB7fTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdW5sb2NrO1xyXG5cdH0sXHJcblx0c2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkge1xyXG5cdFx0dmFyIHByb3AsXHJcblx0XHRcdC8vIFRoZXJlIG1heSBiZSBhbiB1bmxvY2sgYXNzaWduZWQgdG8gdGhpcyBub2RlLFxyXG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgdGhpcyBcIm93bmVyXCIsIGNyZWF0ZSBvbmUgaW5saW5lXHJcblx0XHRcdC8vIGFuZCBzZXQgdGhlIHVubG9jayBhcyB0aG91Z2ggYW4gb3duZXIgZW50cnkgaGFkIGFsd2F5cyBleGlzdGVkXHJcblx0XHRcdHVubG9jayA9IHRoaXMua2V5KCBvd25lciApLFxyXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGVbIHVubG9jayBdO1xyXG5cclxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwga2V5LCB2YWx1ZSBdIGFyZ3NcclxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdGNhY2hlWyBkYXRhIF0gPSB2YWx1ZTtcclxuXHJcblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIHsgcHJvcGVydGllcyB9IF0gYXJnc1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gRnJlc2ggYXNzaWdubWVudHMgYnkgb2JqZWN0IGFyZSBzaGFsbG93IGNvcGllZFxyXG5cdFx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xyXG5cdFx0XHRcdGpRdWVyeS5leHRlbmQoIHRoaXMuY2FjaGVbIHVubG9jayBdLCBkYXRhICk7XHJcblx0XHRcdC8vIE90aGVyd2lzZSwgY29weSB0aGUgcHJvcGVydGllcyBvbmUtYnktb25lIHRvIHRoZSBjYWNoZSBvYmplY3RcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRmb3IgKCBwcm9wIGluIGRhdGEgKSB7XHJcblx0XHRcdFx0XHRjYWNoZVsgcHJvcCBdID0gZGF0YVsgcHJvcCBdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNhY2hlO1xyXG5cdH0sXHJcblx0Z2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcclxuXHRcdC8vIEVpdGhlciBhIHZhbGlkIGNhY2hlIGlzIGZvdW5kLCBvciB3aWxsIGJlIGNyZWF0ZWQuXHJcblx0XHQvLyBOZXcgY2FjaGVzIHdpbGwgYmUgY3JlYXRlZCBhbmQgdGhlIHVubG9jayByZXR1cm5lZCxcclxuXHRcdC8vIGFsbG93aW5nIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIG5ld2x5IGNyZWF0ZWRcclxuXHRcdC8vIGVtcHR5IGRhdGEgb2JqZWN0LiBBIHZhbGlkIG93bmVyIG9iamVjdCBtdXN0IGJlIHByb3ZpZGVkLlxyXG5cdFx0dmFyIGNhY2hlID0gdGhpcy5jYWNoZVsgdGhpcy5rZXkoIG93bmVyICkgXTtcclxuXHJcblx0XHRyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRjYWNoZSA6IGNhY2hlWyBrZXkgXTtcclxuXHR9LFxyXG5cdGFjY2VzczogZnVuY3Rpb24oIG93bmVyLCBrZXksIHZhbHVlICkge1xyXG5cdFx0dmFyIHN0b3JlZDtcclxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcclxuXHRcdC8vXHJcblx0XHQvLyAgIDEuIE5vIGtleSB3YXMgc3BlY2lmaWVkXHJcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcclxuXHRcdC8vXHJcblx0XHQvLyBUYWtlIHRoZSBcInJlYWRcIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmVcclxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcclxuXHRcdC8vXHJcblx0XHQvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0XHJcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XHJcblx0XHQvL1xyXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fFxyXG5cdFx0XHRcdCgoa2V5ICYmIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIpICYmIHZhbHVlID09PSB1bmRlZmluZWQpICkge1xyXG5cclxuXHRcdFx0c3RvcmVkID0gdGhpcy5nZXQoIG93bmVyLCBrZXkgKTtcclxuXHJcblx0XHRcdHJldHVybiBzdG9yZWQgIT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdFx0c3RvcmVkIDogdGhpcy5nZXQoIG93bmVyLCBqUXVlcnkuY2FtZWxDYXNlKGtleSkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBbKl1XaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5nLCBvciBib3RoIGEga2V5IGFuZCB2YWx1ZVxyXG5cdFx0Ly8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6XHJcblx0XHQvL1xyXG5cdFx0Ly8gICAxLiBBbiBvYmplY3Qgb2YgcHJvcGVydGllc1xyXG5cdFx0Ly8gICAyLiBBIGtleSBhbmQgdmFsdWVcclxuXHRcdC8vXHJcblx0XHR0aGlzLnNldCggb3duZXIsIGtleSwgdmFsdWUgKTtcclxuXHJcblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcclxuXHRcdC8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdhcyB0YWtlblsqXVxyXG5cdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGtleTtcclxuXHR9LFxyXG5cdHJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XHJcblx0XHR2YXIgaSwgbmFtZSwgY2FtZWwsXHJcblx0XHRcdHVubG9jayA9IHRoaXMua2V5KCBvd25lciApLFxyXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGVbIHVubG9jayBdO1xyXG5cclxuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdHRoaXMuY2FjaGVbIHVubG9jayBdID0ge307XHJcblxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcclxuXHRcdFx0aWYgKCBqUXVlcnkuaXNBcnJheSgga2V5ICkgKSB7XHJcblx0XHRcdFx0Ly8gSWYgXCJuYW1lXCIgaXMgYW4gYXJyYXkgb2Yga2V5cy4uLlxyXG5cdFx0XHRcdC8vIFdoZW4gZGF0YSBpcyBpbml0aWFsbHkgY3JlYXRlZCwgdmlhIChcImtleVwiLCBcInZhbFwiKSBzaWduYXR1cmUsXHJcblx0XHRcdFx0Ly8ga2V5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBjYW1lbENhc2UuXHJcblx0XHRcdFx0Ly8gU2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgX2hvd18gYSBrZXkgd2FzIGFkZGVkLCByZW1vdmVcclxuXHRcdFx0XHQvLyBib3RoIHBsYWluIGtleSBhbmQgY2FtZWxDYXNlIGtleS4gIzEyNzg2XHJcblx0XHRcdFx0Ly8gVGhpcyB3aWxsIG9ubHkgcGVuYWxpemUgdGhlIGFycmF5IGFyZ3VtZW50IHBhdGguXHJcblx0XHRcdFx0bmFtZSA9IGtleS5jb25jYXQoIGtleS5tYXAoIGpRdWVyeS5jYW1lbENhc2UgKSApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNhbWVsID0galF1ZXJ5LmNhbWVsQ2FzZSgga2V5ICk7XHJcblx0XHRcdFx0Ly8gVHJ5IHRoZSBzdHJpbmcgYXMgYSBrZXkgYmVmb3JlIGFueSBtYW5pcHVsYXRpb25cclxuXHRcdFx0XHRpZiAoIGtleSBpbiBjYWNoZSApIHtcclxuXHRcdFx0XHRcdG5hbWUgPSBbIGtleSwgY2FtZWwgXTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Ly8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LlxyXG5cdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBjcmVhdGUgYW4gYXJyYXkgYnkgbWF0Y2hpbmcgbm9uLXdoaXRlc3BhY2VcclxuXHRcdFx0XHRcdG5hbWUgPSBjYW1lbDtcclxuXHRcdFx0XHRcdG5hbWUgPSBuYW1lIGluIGNhY2hlID9cclxuXHRcdFx0XHRcdFx0WyBuYW1lIF0gOiAoIG5hbWUubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpID0gbmFtZS5sZW5ndGg7XHJcblx0XHRcdHdoaWxlICggaS0tICkge1xyXG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsgbmFtZVsgaSBdIF07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9LFxyXG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBvd25lciApIHtcclxuXHRcdHJldHVybiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoXHJcblx0XHRcdHRoaXMuY2FjaGVbIG93bmVyWyB0aGlzLmV4cGFuZG8gXSBdIHx8IHt9XHJcblx0XHQpO1xyXG5cdH0sXHJcblx0ZGlzY2FyZDogZnVuY3Rpb24oIG93bmVyICkge1xyXG5cdFx0aWYgKCBvd25lclsgdGhpcy5leHBhbmRvIF0gKSB7XHJcblx0XHRcdGRlbGV0ZSB0aGlzLmNhY2hlWyBvd25lclsgdGhpcy5leHBhbmRvIF0gXTtcclxuXHRcdH1cclxuXHR9XHJcbn07XHJcbnZhciBkYXRhX3ByaXYgPSBuZXcgRGF0YSgpO1xyXG5cclxudmFyIGRhdGFfdXNlciA9IG5ldyBEYXRhKCk7XHJcblxyXG5cclxuXHJcbi8vXHRJbXBsZW1lbnRhdGlvbiBTdW1tYXJ5XHJcbi8vXHJcbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXHJcbi8vXHQyLiBJbXByb3ZlIHRoZSBtb2R1bGUncyBtYWludGFpbmFiaWxpdHkgYnkgcmVkdWNpbmcgdGhlIHN0b3JhZ2VcclxuLy9cdFx0cGF0aHMgdG8gYSBzaW5nbGUgbWVjaGFuaXNtLlxyXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cclxuLy9cdDQuIF9OZXZlcl8gZXhwb3NlIFwicHJpdmF0ZVwiIGRhdGEgdG8gdXNlciBjb2RlIChUT0RPOiBEcm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSlcclxuLy9cdDUuIEF2b2lkIGV4cG9zaW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb24gdXNlciBvYmplY3RzIChlZy4gZXhwYW5kbyBwcm9wZXJ0aWVzKVxyXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XHJcblxyXG52YXIgcmJyYWNlID0gL14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLFxyXG5cdHJtdWx0aURhc2ggPSAvKFtBLVpdKS9nO1xyXG5cclxuZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHtcclxuXHR2YXIgbmFtZTtcclxuXHJcblx0Ly8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueVxyXG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxyXG5cdGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XHJcblx0XHRuYW1lID0gXCJkYXRhLVwiICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsIFwiLSQxXCIgKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XHJcblxyXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRkYXRhID0gZGF0YSA9PT0gXCJ0cnVlXCIgPyB0cnVlIDpcclxuXHRcdFx0XHRcdGRhdGEgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDpcclxuXHRcdFx0XHRcdGRhdGEgPT09IFwibnVsbFwiID8gbnVsbCA6XHJcblx0XHRcdFx0XHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xyXG5cdFx0XHRcdFx0K2RhdGEgKyBcIlwiID09PSBkYXRhID8gK2RhdGEgOlxyXG5cdFx0XHRcdFx0cmJyYWNlLnRlc3QoIGRhdGEgKSA/IGpRdWVyeS5wYXJzZUpTT04oIGRhdGEgKSA6XHJcblx0XHRcdFx0XHRkYXRhO1xyXG5cdFx0XHR9IGNhdGNoKCBlICkge31cclxuXHJcblx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlclxyXG5cdFx0XHRkYXRhX3VzZXIuc2V0KCBlbGVtLCBrZXksIGRhdGEgKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBkYXRhO1xyXG59XHJcblxyXG5qUXVlcnkuZXh0ZW5kKHtcclxuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdHJldHVybiBkYXRhX3VzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFfcHJpdi5oYXNEYXRhKCBlbGVtICk7XHJcblx0fSxcclxuXHJcblx0ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XHJcblx0XHRyZXR1cm4gZGF0YV91c2VyLmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xyXG5cdH0sXHJcblxyXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xyXG5cdFx0ZGF0YV91c2VyLnJlbW92ZSggZWxlbSwgbmFtZSApO1xyXG5cdH0sXHJcblxyXG5cdC8vIFRPRE86IE5vdyB0aGF0IGFsbCBjYWxscyB0byBfZGF0YSBhbmQgX3JlbW92ZURhdGEgaGF2ZSBiZWVuIHJlcGxhY2VkXHJcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YV9wcml2IG1ldGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLlxyXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcclxuXHRcdHJldHVybiBkYXRhX3ByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XHJcblx0fSxcclxuXHJcblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xyXG5cdFx0ZGF0YV9wcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xyXG5cdH1cclxufSk7XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKHtcclxuXHRkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcclxuXHRcdHZhciBpLCBuYW1lLCBkYXRhLFxyXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxyXG5cdFx0XHRhdHRycyA9IGVsZW0gJiYgZWxlbS5hdHRyaWJ1dGVzO1xyXG5cclxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xyXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0aWYgKCB0aGlzLmxlbmd0aCApIHtcclxuXHRcdFx0XHRkYXRhID0gZGF0YV91c2VyLmdldCggZWxlbSApO1xyXG5cclxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWRhdGFfcHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcclxuXHRcdFx0XHRcdGkgPSBhdHRycy5sZW5ndGg7XHJcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcclxuXHJcblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFMTErXHJcblx0XHRcdFx0XHRcdC8vIFRoZSBhdHRycyBlbGVtZW50cyBjYW4gYmUgbnVsbCAoIzE0ODk0KVxyXG5cdFx0XHRcdFx0XHRpZiAoIGF0dHJzWyBpIF0gKSB7XHJcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIG5hbWUuaW5kZXhPZiggXCJkYXRhLVwiICkgPT09IDAgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZS5zbGljZSg1KSApO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZGF0YV9wcml2LnNldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiwgdHJ1ZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGRhdGE7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU2V0cyBtdWx0aXBsZSB2YWx1ZXNcclxuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRkYXRhX3VzZXIuc2V0KCB0aGlzLCBrZXkgKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xyXG5cdFx0XHR2YXIgZGF0YSxcclxuXHRcdFx0XHRjYW1lbEtleSA9IGpRdWVyeS5jYW1lbENhc2UoIGtleSApO1xyXG5cclxuXHRcdFx0Ly8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3QgZW1wdHlcclxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcclxuXHRcdFx0Ly8gYHZhbHVlYCBwYXJhbWV0ZXIgd2FzIG5vdCB1bmRlZmluZWQuIEFuIGVtcHR5IGpRdWVyeSBvYmplY3RcclxuXHRcdFx0Ly8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2ggd2lsbFxyXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxyXG5cdFx0XHRpZiAoIGVsZW0gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlXHJcblx0XHRcdFx0Ly8gd2l0aCB0aGUga2V5IGFzLWlzXHJcblx0XHRcdFx0ZGF0YSA9IGRhdGFfdXNlci5nZXQoIGVsZW0sIGtleSApO1xyXG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlXHJcblx0XHRcdFx0Ly8gd2l0aCB0aGUga2V5IGNhbWVsaXplZFxyXG5cdFx0XHRcdGRhdGEgPSBkYXRhX3VzZXIuZ2V0KCBlbGVtLCBjYW1lbEtleSApO1xyXG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxyXG5cdFx0XHRcdC8vIEhUTUw1IGN1c3RvbSBkYXRhLSogYXR0cnNcclxuXHRcdFx0XHRkYXRhID0gZGF0YUF0dHIoIGVsZW0sIGNhbWVsS2V5LCB1bmRlZmluZWQgKTtcclxuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU2V0IHRoZSBkYXRhLi4uXHJcblx0XHRcdHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHQvLyBGaXJzdCwgYXR0ZW1wdCB0byBzdG9yZSBhIGNvcHkgb3IgcmVmZXJlbmNlIG9mIGFueVxyXG5cdFx0XHRcdC8vIGRhdGEgdGhhdCBtaWdodCd2ZSBiZWVuIHN0b3JlIHdpdGggYSBjYW1lbENhc2VkIGtleS5cclxuXHRcdFx0XHR2YXIgZGF0YSA9IGRhdGFfdXNlci5nZXQoIHRoaXMsIGNhbWVsS2V5ICk7XHJcblxyXG5cdFx0XHRcdC8vIEZvciBIVE1MNSBkYXRhLSogYXR0cmlidXRlIGludGVyb3AsIHdlIGhhdmUgdG9cclxuXHRcdFx0XHQvLyBzdG9yZSBwcm9wZXJ0eSBuYW1lcyB3aXRoIGRhc2hlcyBpbiBhIGNhbWVsQ2FzZSBmb3JtLlxyXG5cdFx0XHRcdC8vIFRoaXMgbWlnaHQgbm90IGFwcGx5IHRvIGFsbCBwcm9wZXJ0aWVzLi4uKlxyXG5cdFx0XHRcdGRhdGFfdXNlci5zZXQoIHRoaXMsIGNhbWVsS2V5LCB2YWx1ZSApO1xyXG5cclxuXHRcdFx0XHQvLyAqLi4uIEluIHRoZSBjYXNlIG9mIHByb3BlcnRpZXMgdGhhdCBtaWdodCBfYWN0dWFsbHlfXHJcblx0XHRcdFx0Ly8gaGF2ZSBkYXNoZXMsIHdlIG5lZWQgdG8gYWxzbyBzdG9yZSBhIGNvcHkgb2YgdGhhdFxyXG5cdFx0XHRcdC8vIHVuY2hhbmdlZCBwcm9wZXJ0eS5cclxuXHRcdFx0XHRpZiAoIGtleS5pbmRleE9mKFwiLVwiKSAhPT0gLTEgJiYgZGF0YSAhPT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRcdFx0ZGF0YV91c2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIHRydWUgKTtcclxuXHR9LFxyXG5cclxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0ZGF0YV91c2VyLnJlbW92ZSggdGhpcywga2V5ICk7XHJcblx0XHR9KTtcclxuXHR9XHJcbn0pO1xyXG5cclxuXHJcbmpRdWVyeS5leHRlbmQoe1xyXG5cdHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHtcclxuXHRcdHZhciBxdWV1ZTtcclxuXHJcblx0XHRpZiAoIGVsZW0gKSB7XHJcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XHJcblx0XHRcdHF1ZXVlID0gZGF0YV9wcml2LmdldCggZWxlbSwgdHlwZSApO1xyXG5cclxuXHRcdFx0Ly8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cFxyXG5cdFx0XHRpZiAoIGRhdGEgKSB7XHJcblx0XHRcdFx0aWYgKCAhcXVldWUgfHwgalF1ZXJ5LmlzQXJyYXkoIGRhdGEgKSApIHtcclxuXHRcdFx0XHRcdHF1ZXVlID0gZGF0YV9wcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheShkYXRhKSApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBkYXRhICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBxdWV1ZSB8fCBbXTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcclxuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcclxuXHJcblx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSxcclxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXHJcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKSxcclxuXHRcdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSxcclxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0Ly8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbFxyXG5cdFx0aWYgKCBmbiA9PT0gXCJpbnByb2dyZXNzXCIgKSB7XHJcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcclxuXHRcdFx0c3RhcnRMZW5ndGgtLTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGZuICkge1xyXG5cclxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xyXG5cdFx0XHQvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkXHJcblx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICkge1xyXG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cclxuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XHJcblx0XHRcdGZuLmNhbGwoIGVsZW0sIG5leHQsIGhvb2tzICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7XHJcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHQvLyBOb3QgcHVibGljIC0gZ2VuZXJhdGUgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJuIHRoZSBjdXJyZW50IG9uZVxyXG5cdF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcclxuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XHJcblx0XHRyZXR1cm4gZGF0YV9wcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YV9wcml2LmFjY2VzcyggZWxlbSwga2V5LCB7XHJcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIikuYWRkKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGRhdGFfcHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcclxuXHRcdFx0fSlcclxuXHRcdH0pO1xyXG5cdH1cclxufSk7XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKHtcclxuXHRxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XHJcblx0XHR2YXIgc2V0dGVyID0gMjtcclxuXHJcblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHRkYXRhID0gdHlwZTtcclxuXHRcdFx0dHlwZSA9IFwiZnhcIjtcclxuXHRcdFx0c2V0dGVyLS07XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkge1xyXG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWzBdLCB0eXBlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdHRoaXMgOlxyXG5cdFx0XHR0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XHJcblxyXG5cdFx0XHRcdC8vIEVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlXHJcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XHJcblxyXG5cdFx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICYmIHF1ZXVlWzBdICE9PSBcImlucHJvZ3Jlc3NcIiApIHtcclxuXHRcdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHR9LFxyXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcclxuXHRcdH0pO1xyXG5cdH0sXHJcblx0Y2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XHJcblx0fSxcclxuXHQvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBlXHJcblx0Ly8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpXHJcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcclxuXHRcdHZhciB0bXAsXHJcblx0XHRcdGNvdW50ID0gMSxcclxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcclxuXHRcdFx0ZWxlbWVudHMgPSB0aGlzLFxyXG5cdFx0XHRpID0gdGhpcy5sZW5ndGgsXHJcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRpZiAoICEoIC0tY291bnQgKSApIHtcclxuXHRcdFx0XHRcdGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdG9iaiA9IHR5cGU7XHJcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XHJcblxyXG5cdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdHRtcCA9IGRhdGFfcHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xyXG5cdFx0XHRpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7XHJcblx0XHRcdFx0Y291bnQrKztcclxuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJlc29sdmUoKTtcclxuXHRcdHJldHVybiBkZWZlci5wcm9taXNlKCBvYmogKTtcclxuXHR9XHJcbn0pO1xyXG52YXIgcG51bSA9ICgvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLykuc291cmNlO1xyXG5cclxudmFyIGNzc0V4cGFuZCA9IFsgXCJUb3BcIiwgXCJSaWdodFwiLCBcIkJvdHRvbVwiLCBcIkxlZnRcIiBdO1xyXG5cclxudmFyIGlzSGlkZGVuID0gZnVuY3Rpb24oIGVsZW0sIGVsICkge1xyXG5cdFx0Ly8gaXNIaWRkZW4gbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjtcclxuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxyXG5cdFx0ZWxlbSA9IGVsIHx8IGVsZW07XHJcblx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSA9PT0gXCJub25lXCIgfHwgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XHJcblx0fTtcclxuXHJcbnZhciByY2hlY2thYmxlVHlwZSA9ICgvXig/OmNoZWNrYm94fHJhZGlvKSQvaSk7XHJcblxyXG5cclxuXHJcbihmdW5jdGlvbigpIHtcclxuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXHJcblx0XHRkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICksXHJcblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xyXG5cclxuXHQvLyBTdXBwb3J0OiBTYWZhcmk8PTUuMVxyXG5cdC8vIENoZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICgjMTEyMTcpXHJcblx0Ly8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKVxyXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKVxyXG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwicmFkaW9cIiApO1xyXG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJjaGVja2VkXCIsIFwiY2hlY2tlZFwiICk7XHJcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcclxuXHJcblx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApO1xyXG5cclxuXHQvLyBTdXBwb3J0OiBTYWZhcmk8PTUuMSwgQW5kcm9pZDw0LjJcclxuXHQvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHNcclxuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XHJcblxyXG5cdC8vIFN1cHBvcnQ6IElFPD0xMStcclxuXHQvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZFxyXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcclxuXHRzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtcclxufSkoKTtcclxudmFyIHN0cnVuZGVmaW5lZCA9IHR5cGVvZiB1bmRlZmluZWQ7XHJcblxyXG5cclxuXHJcbnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXMgPSBcIm9uZm9jdXNpblwiIGluIHdpbmRvdztcclxuXHJcblxyXG52YXJcclxuXHRya2V5RXZlbnQgPSAvXmtleS8sXHJcblx0cm1vdXNlRXZlbnQgPSAvXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnUpfGNsaWNrLyxcclxuXHRyZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcclxuXHRydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlxcLiguKyl8KSQvO1xyXG5cclxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcclxuXHRyZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XHJcblx0cmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcclxuXHR0cnkge1xyXG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XHJcblx0fSBjYXRjaCAoIGVyciApIHsgfVxyXG59XHJcblxyXG4vKlxyXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXHJcbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXHJcbiAqL1xyXG5qUXVlcnkuZXZlbnQgPSB7XHJcblxyXG5cdGdsb2JhbDoge30sXHJcblxyXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcclxuXHJcblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXHJcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxyXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXHJcblx0XHRcdGVsZW1EYXRhID0gZGF0YV9wcml2LmdldCggZWxlbSApO1xyXG5cclxuXHRcdC8vIERvbid0IGF0dGFjaCBldmVudHMgdG8gbm9EYXRhIG9yIHRleHQvY29tbWVudCBub2RlcyAoYnV0IGFsbG93IHBsYWluIG9iamVjdHMpXHJcblx0XHRpZiAoICFlbGVtRGF0YSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XHJcblx0XHRcdGhhbmRsZU9iakluID0gaGFuZGxlcjtcclxuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XHJcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXHJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XHJcblx0XHRcdGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQgbWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdFxyXG5cdFx0aWYgKCAhKGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cykgKSB7XHJcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IHt9O1xyXG5cdFx0fVxyXG5cdFx0aWYgKCAhKGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlKSApIHtcclxuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcclxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxyXG5cdFx0XHRcdC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWRcclxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gc3RydW5kZWZpbmVkICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XHJcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkO1xyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2VcclxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFsgXCJcIiBdO1xyXG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcclxuXHRcdHdoaWxlICggdC0tICkge1xyXG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1t0XSApIHx8IFtdO1xyXG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbMV07XHJcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsyXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xyXG5cclxuXHRcdFx0Ly8gVGhlcmUgKm11c3QqIGJlIGEgdHlwZSwgbm8gYXR0YWNoaW5nIG5hbWVzcGFjZS1vbmx5IGhhbmRsZXJzXHJcblx0XHRcdGlmICggIXR5cGUgKSB7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxyXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcclxuXHJcblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxyXG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XHJcblxyXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXHJcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xyXG5cclxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcclxuXHRcdFx0aGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCh7XHJcblx0XHRcdFx0dHlwZTogdHlwZSxcclxuXHRcdFx0XHRvcmlnVHlwZTogb3JpZ1R5cGUsXHJcblx0XHRcdFx0ZGF0YTogZGF0YSxcclxuXHRcdFx0XHRoYW5kbGVyOiBoYW5kbGVyLFxyXG5cdFx0XHRcdGd1aWQ6IGhhbmRsZXIuZ3VpZCxcclxuXHRcdFx0XHRzZWxlY3Rvcjogc2VsZWN0b3IsXHJcblx0XHRcdFx0bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSxcclxuXHRcdFx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbihcIi5cIilcclxuXHRcdFx0fSwgaGFuZGxlT2JqSW4gKTtcclxuXHJcblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XHJcblx0XHRcdGlmICggIShoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdKSApIHtcclxuXHRcdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107XHJcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XHJcblxyXG5cdFx0XHRcdC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZVxyXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHwgc3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHtcclxuXHRcdFx0XHRcdGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkge1xyXG5cdFx0XHRcdFx0XHRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlLCBmYWxzZSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBzcGVjaWFsLmFkZCApIHtcclxuXHRcdFx0XHRzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcclxuXHJcblx0XHRcdFx0aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHtcclxuXHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxyXG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xyXG5cdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvblxyXG5cdFx0XHRqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHR9LFxyXG5cclxuXHQvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnRcclxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkge1xyXG5cclxuXHRcdHZhciBqLCBvcmlnQ291bnQsIHRtcCxcclxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXHJcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcclxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhX3ByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFfcHJpdi5nZXQoIGVsZW0gKTtcclxuXHJcblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cykgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkXHJcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbIFwiXCIgXTtcclxuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XHJcblx0XHR3aGlsZSAoIHQtLSApIHtcclxuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbdF0gKSB8fCBbXTtcclxuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWzFdO1xyXG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbMl0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcclxuXHJcblx0XHRcdC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudFxyXG5cdFx0XHRpZiAoICF0eXBlICkge1xyXG5cdFx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xyXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcclxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xyXG5cdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdO1xyXG5cdFx0XHR0bXAgPSB0bXBbMl0gJiYgbmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbihcIlxcXFwuKD86LipcXFxcLnwpXCIpICsgXCIoXFxcXC58JClcIiApO1xyXG5cclxuXHRcdFx0Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50c1xyXG5cdFx0XHRvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoO1xyXG5cdFx0XHR3aGlsZSAoIGotLSApIHtcclxuXHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdO1xyXG5cclxuXHRcdFx0XHRpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmXHJcblx0XHRcdFx0XHQoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJlxyXG5cdFx0XHRcdFx0KCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJlxyXG5cdFx0XHRcdFx0KCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xyXG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XHJcblx0XHRcdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQtLTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XHJcblx0XHRcdFx0XHRcdHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxyXG5cdFx0XHQvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycylcclxuXHRcdFx0aWYgKCBvcmlnQ291bnQgJiYgIWhhbmRsZXJzLmxlbmd0aCApIHtcclxuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8IHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkge1xyXG5cdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGRlbGV0ZSBldmVudHNbIHR5cGUgXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkXHJcblx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHtcclxuXHRcdFx0ZGVsZXRlIGVsZW1EYXRhLmhhbmRsZTtcclxuXHRcdFx0ZGF0YV9wcml2LnJlbW92ZSggZWxlbSwgXCJldmVudHNcIiApO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkge1xyXG5cclxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsXHJcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxyXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxyXG5cdFx0XHRuYW1lc3BhY2VzID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcIm5hbWVzcGFjZVwiICkgPyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoXCIuXCIpIDogW107XHJcblxyXG5cdFx0Y3VyID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7XHJcblxyXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcclxuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XHJcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIHR5cGUuaW5kZXhPZihcIi5cIikgPj0gMCApIHtcclxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxyXG5cdFx0XHRuYW1lc3BhY2VzID0gdHlwZS5zcGxpdChcIi5cIik7XHJcblx0XHRcdHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7XHJcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xyXG5cdFx0fVxyXG5cdFx0b250eXBlID0gdHlwZS5pbmRleE9mKFwiOlwiKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcclxuXHJcblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcclxuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xyXG5cdFx0XHRldmVudCA6XHJcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xyXG5cclxuXHRcdC8vIFRyaWdnZXIgYml0bWFzazogJiAxIGZvciBuYXRpdmUgaGFuZGxlcnM7ICYgMiBmb3IgalF1ZXJ5IChhbHdheXMgdHJ1ZSlcclxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xyXG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKFwiLlwiKTtcclxuXHRcdGV2ZW50Lm5hbWVzcGFjZV9yZSA9IGV2ZW50Lm5hbWVzcGFjZSA/XHJcblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oXCJcXFxcLig/Oi4qXFxcXC58KVwiKSArIFwiKFxcXFwufCQpXCIgKSA6XHJcblx0XHRcdG51bGw7XHJcblxyXG5cdFx0Ly8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkXHJcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XHJcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XHJcblx0XHRcdGV2ZW50LnRhcmdldCA9IGVsZW07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdFxyXG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XHJcblx0XHRcdFsgZXZlbnQgXSA6XHJcblx0XHRcdGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEsIFsgZXZlbnQgXSApO1xyXG5cclxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcclxuXHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xyXG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSlcclxuXHRcdC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAoIzk3MjQpXHJcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkge1xyXG5cclxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XHJcblx0XHRcdGlmICggIXJmb2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgKSB7XHJcblx0XHRcdFx0Y3VyID0gY3VyLnBhcmVudE5vZGU7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yICggOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xyXG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCBjdXIgKTtcclxuXHRcdFx0XHR0bXAgPSBjdXI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxyXG5cdFx0XHRpZiAoIHRtcCA9PT0gKGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCkgKSB7XHJcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIHRtcC5kZWZhdWx0VmlldyB8fCB0bXAucGFyZW50V2luZG93IHx8IHdpbmRvdyApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aFxyXG5cdFx0aSA9IDA7XHJcblx0XHR3aGlsZSAoIChjdXIgPSBldmVudFBhdGhbaSsrXSkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XHJcblxyXG5cdFx0XHRldmVudC50eXBlID0gaSA+IDEgP1xyXG5cdFx0XHRcdGJ1YmJsZVR5cGUgOlxyXG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcclxuXHJcblx0XHRcdC8vIGpRdWVyeSBoYW5kbGVyXHJcblx0XHRcdGhhbmRsZSA9ICggZGF0YV9wcml2LmdldCggY3VyLCBcImV2ZW50c1wiICkgfHwge30gKVsgZXZlbnQudHlwZSBdICYmIGRhdGFfcHJpdi5nZXQoIGN1ciwgXCJoYW5kbGVcIiApO1xyXG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcclxuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxyXG5cdFx0XHRoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTtcclxuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGpRdWVyeS5hY2NlcHREYXRhKCBjdXIgKSApIHtcclxuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xyXG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcclxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRldmVudC50eXBlID0gdHlwZTtcclxuXHJcblx0XHQvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwgZG8gaXQgbm93XHJcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xyXG5cclxuXHRcdFx0aWYgKCAoIXNwZWNpYWwuX2RlZmF1bHQgfHwgc3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlKSAmJlxyXG5cdFx0XHRcdGpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7XHJcblxyXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBuYW1lIGFzIHRoZSBldmVudC5cclxuXHRcdFx0XHQvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApXHJcblx0XHRcdFx0aWYgKCBvbnR5cGUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHtcclxuXHJcblx0XHRcdFx0XHQvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kXHJcblx0XHRcdFx0XHR0bXAgPSBlbGVtWyBvbnR5cGUgXTtcclxuXHJcblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcclxuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSBudWxsO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlXHJcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTtcclxuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xyXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDtcclxuXHJcblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcclxuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSB0bXA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcclxuXHR9LFxyXG5cclxuXHRkaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xyXG5cclxuXHRcdC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdFxyXG5cdFx0ZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApO1xyXG5cclxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaixcclxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXHJcblx0XHRcdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcclxuXHRcdFx0aGFuZGxlcnMgPSAoIGRhdGFfcHJpdi5nZXQoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gfHwgW10sXHJcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xyXG5cclxuXHRcdC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50XHJcblx0XHRhcmdzWzBdID0gZXZlbnQ7XHJcblx0XHRldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7XHJcblxyXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxyXG5cdFx0aWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBEZXRlcm1pbmUgaGFuZGxlcnNcclxuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcclxuXHJcblx0XHQvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1c1xyXG5cdFx0aSA9IDA7XHJcblx0XHR3aGlsZSAoIChtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpKysgXSkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XHJcblx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07XHJcblxyXG5cdFx0XHRqID0gMDtcclxuXHRcdFx0d2hpbGUgKCAoaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0pICYmICFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xyXG5cclxuXHRcdFx0XHQvLyBUcmlnZ2VyZWQgZXZlbnQgbXVzdCBlaXRoZXIgMSkgaGF2ZSBubyBuYW1lc3BhY2UsIG9yIDIpIGhhdmUgbmFtZXNwYWNlKHMpXHJcblx0XHRcdFx0Ly8gYSBzdWJzZXQgb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIGJvdW5kIGV2ZW50IChib3RoIGNhbiBoYXZlIG5vIG5hbWVzcGFjZSkuXHJcblx0XHRcdFx0aWYgKCAhZXZlbnQubmFtZXNwYWNlX3JlIHx8IGV2ZW50Lm5hbWVzcGFjZV9yZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XHJcblxyXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xyXG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xyXG5cclxuXHRcdFx0XHRcdHJldCA9ICggKGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSkuaGFuZGxlIHx8IGhhbmRsZU9iai5oYW5kbGVyIClcclxuXHRcdFx0XHRcdFx0XHQuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xyXG5cclxuXHRcdFx0XHRcdGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggKGV2ZW50LnJlc3VsdCA9IHJldCkgPT09IGZhbHNlICkge1xyXG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlXHJcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xyXG5cdFx0XHRzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XHJcblx0fSxcclxuXHJcblx0aGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7XHJcblx0XHR2YXIgaSwgbWF0Y2hlcywgc2VsLCBoYW5kbGVPYmosXHJcblx0XHRcdGhhbmRsZXJRdWV1ZSA9IFtdLFxyXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcclxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xyXG5cclxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcclxuXHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICgjMTMxODApXHJcblx0XHQvLyBBdm9pZCBub24tbGVmdC1jbGljayBidWJibGluZyBpbiBGaXJlZm94ICgjMzg2MSlcclxuXHRcdGlmICggZGVsZWdhdGVDb3VudCAmJiBjdXIubm9kZVR5cGUgJiYgKCFldmVudC5idXR0b24gfHwgZXZlbnQudHlwZSAhPT0gXCJjbGlja1wiKSApIHtcclxuXHJcblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xyXG5cclxuXHRcdFx0XHQvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NClcclxuXHRcdFx0XHRpZiAoIGN1ci5kaXNhYmxlZCAhPT0gdHJ1ZSB8fCBldmVudC50eXBlICE9PSBcImNsaWNrXCIgKSB7XHJcblx0XHRcdFx0XHRtYXRjaGVzID0gW107XHJcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcclxuXHRcdFx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTtcclxuXHJcblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpXHJcblx0XHRcdFx0XHRcdHNlbCA9IGhhbmRsZU9iai5zZWxlY3RvciArIFwiIFwiO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoZXNbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/XHJcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+PSAwIDpcclxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVzWyBzZWwgXSApIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaGVzLnB1c2goIGhhbmRsZU9iaiApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIG1hdGNoZXMubGVuZ3RoICkge1xyXG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCh7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZXMgfSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xyXG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkge1xyXG5cdFx0XHRoYW5kbGVyUXVldWUucHVzaCh7IGVsZW06IHRoaXMsIGhhbmRsZXJzOiBoYW5kbGVycy5zbGljZSggZGVsZWdhdGVDb3VudCApIH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XHJcblx0fSxcclxuXHJcblx0Ly8gSW5jbHVkZXMgc29tZSBldmVudCBwcm9wcyBzaGFyZWQgYnkgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnRcclxuXHRwcm9wczogXCJhbHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBldmVudFBoYXNlIG1ldGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hpY2hcIi5zcGxpdChcIiBcIiksXHJcblxyXG5cdGZpeEhvb2tzOiB7fSxcclxuXHJcblx0a2V5SG9va3M6IHtcclxuXHRcdHByb3BzOiBcImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGVcIi5zcGxpdChcIiBcIiksXHJcblx0XHRmaWx0ZXI6IGZ1bmN0aW9uKCBldmVudCwgb3JpZ2luYWwgKSB7XHJcblxyXG5cdFx0XHQvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHNcclxuXHRcdFx0aWYgKCBldmVudC53aGljaCA9PSBudWxsICkge1xyXG5cdFx0XHRcdGV2ZW50LndoaWNoID0gb3JpZ2luYWwuY2hhckNvZGUgIT0gbnVsbCA/IG9yaWdpbmFsLmNoYXJDb2RlIDogb3JpZ2luYWwua2V5Q29kZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGV2ZW50O1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdG1vdXNlSG9va3M6IHtcclxuXHRcdHByb3BzOiBcImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgc2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudFwiLnNwbGl0KFwiIFwiKSxcclxuXHRcdGZpbHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHtcclxuXHRcdFx0dmFyIGV2ZW50RG9jLCBkb2MsIGJvZHksXHJcblx0XHRcdFx0YnV0dG9uID0gb3JpZ2luYWwuYnV0dG9uO1xyXG5cclxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHBhZ2VYL1kgaWYgbWlzc2luZyBhbmQgY2xpZW50WC9ZIGF2YWlsYWJsZVxyXG5cdFx0XHRpZiAoIGV2ZW50LnBhZ2VYID09IG51bGwgJiYgb3JpZ2luYWwuY2xpZW50WCAhPSBudWxsICkge1xyXG5cdFx0XHRcdGV2ZW50RG9jID0gZXZlbnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7XHJcblx0XHRcdFx0ZG9jID0gZXZlbnREb2MuZG9jdW1lbnRFbGVtZW50O1xyXG5cdFx0XHRcdGJvZHkgPSBldmVudERvYy5ib2R5O1xyXG5cclxuXHRcdFx0XHRldmVudC5wYWdlWCA9IG9yaWdpbmFsLmNsaWVudFggKyAoIGRvYyAmJiBkb2Muc2Nyb2xsTGVmdCB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsTGVmdCB8fCAwICkgLSAoIGRvYyAmJiBkb2MuY2xpZW50TGVmdCB8fCBib2R5ICYmIGJvZHkuY2xpZW50TGVmdCB8fCAwICk7XHJcblx0XHRcdFx0ZXZlbnQucGFnZVkgPSBvcmlnaW5hbC5jbGllbnRZICsgKCBkb2MgJiYgZG9jLnNjcm9sbFRvcCAgfHwgYm9keSAmJiBib2R5LnNjcm9sbFRvcCAgfHwgMCApIC0gKCBkb2MgJiYgZG9jLmNsaWVudFRvcCAgfHwgYm9keSAmJiBib2R5LmNsaWVudFRvcCAgfHwgMCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0XHJcblx0XHRcdC8vIE5vdGU6IGJ1dHRvbiBpcyBub3Qgbm9ybWFsaXplZCwgc28gZG9uJ3QgdXNlIGl0XHJcblx0XHRcdGlmICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAhPT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRcdGV2ZW50LndoaWNoID0gKCBidXR0b24gJiAxID8gMSA6ICggYnV0dG9uICYgMiA/IDMgOiAoIGJ1dHRvbiAmIDQgPyAyIDogMCApICkgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGV2ZW50O1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdGZpeDogZnVuY3Rpb24oIGV2ZW50ICkge1xyXG5cdFx0aWYgKCBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSApIHtcclxuXHRcdFx0cmV0dXJuIGV2ZW50O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENyZWF0ZSBhIHdyaXRhYmxlIGNvcHkgb2YgdGhlIGV2ZW50IG9iamVjdCBhbmQgbm9ybWFsaXplIHNvbWUgcHJvcGVydGllc1xyXG5cdFx0dmFyIGksIHByb3AsIGNvcHksXHJcblx0XHRcdHR5cGUgPSBldmVudC50eXBlLFxyXG5cdFx0XHRvcmlnaW5hbEV2ZW50ID0gZXZlbnQsXHJcblx0XHRcdGZpeEhvb2sgPSB0aGlzLmZpeEhvb2tzWyB0eXBlIF07XHJcblxyXG5cdFx0aWYgKCAhZml4SG9vayApIHtcclxuXHRcdFx0dGhpcy5maXhIb29rc1sgdHlwZSBdID0gZml4SG9vayA9XHJcblx0XHRcdFx0cm1vdXNlRXZlbnQudGVzdCggdHlwZSApID8gdGhpcy5tb3VzZUhvb2tzIDpcclxuXHRcdFx0XHRya2V5RXZlbnQudGVzdCggdHlwZSApID8gdGhpcy5rZXlIb29rcyA6XHJcblx0XHRcdFx0e307XHJcblx0XHR9XHJcblx0XHRjb3B5ID0gZml4SG9vay5wcm9wcyA/IHRoaXMucHJvcHMuY29uY2F0KCBmaXhIb29rLnByb3BzICkgOiB0aGlzLnByb3BzO1xyXG5cclxuXHRcdGV2ZW50ID0gbmV3IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVudCApO1xyXG5cclxuXHRcdGkgPSBjb3B5Lmxlbmd0aDtcclxuXHRcdHdoaWxlICggaS0tICkge1xyXG5cdFx0XHRwcm9wID0gY29weVsgaSBdO1xyXG5cdFx0XHRldmVudFsgcHJvcCBdID0gb3JpZ2luYWxFdmVudFsgcHJvcCBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFN1cHBvcnQ6IENvcmRvdmEgMi41IChXZWJLaXQpICgjMTMyNTUpXHJcblx0XHQvLyBBbGwgZXZlbnRzIHNob3VsZCBoYXZlIGEgdGFyZ2V0OyBDb3Jkb3ZhIGRldmljZXJlYWR5IGRvZXNuJ3RcclxuXHRcdGlmICggIWV2ZW50LnRhcmdldCApIHtcclxuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZG9jdW1lbnQ7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDYuMCssIENocm9tZTwyOFxyXG5cdFx0Ly8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1MDQsICMxMzE0MylcclxuXHRcdGlmICggZXZlbnQudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkge1xyXG5cdFx0XHRldmVudC50YXJnZXQgPSBldmVudC50YXJnZXQucGFyZW50Tm9kZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZml4SG9vay5maWx0ZXIgPyBmaXhIb29rLmZpbHRlciggZXZlbnQsIG9yaWdpbmFsRXZlbnQgKSA6IGV2ZW50O1xyXG5cdH0sXHJcblxyXG5cdHNwZWNpYWw6IHtcclxuXHRcdGxvYWQ6IHtcclxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxyXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxyXG5cdFx0fSxcclxuXHRcdGZvY3VzOiB7XHJcblx0XHRcdC8vIEZpcmUgbmF0aXZlIGV2ZW50IGlmIHBvc3NpYmxlIHNvIGJsdXIvZm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdFxyXG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRpZiAoIHRoaXMgIT09IHNhZmVBY3RpdmVFbGVtZW50KCkgJiYgdGhpcy5mb2N1cyApIHtcclxuXHRcdFx0XHRcdHRoaXMuZm9jdXMoKTtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdGRlbGVnYXRlVHlwZTogXCJmb2N1c2luXCJcclxuXHRcdH0sXHJcblx0XHRibHVyOiB7XHJcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGlmICggdGhpcyA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJiB0aGlzLmJsdXIgKSB7XHJcblx0XHRcdFx0XHR0aGlzLmJsdXIoKTtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdGRlbGVnYXRlVHlwZTogXCJmb2N1c291dFwiXHJcblx0XHR9LFxyXG5cdFx0Y2xpY2s6IHtcclxuXHRcdFx0Ly8gRm9yIGNoZWNrYm94LCBmaXJlIG5hdGl2ZSBldmVudCBzbyBjaGVja2VkIHN0YXRlIHdpbGwgYmUgcmlnaHRcclxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0aWYgKCB0aGlzLnR5cGUgPT09IFwiY2hlY2tib3hcIiAmJiB0aGlzLmNsaWNrICYmIGpRdWVyeS5ub2RlTmFtZSggdGhpcywgXCJpbnB1dFwiICkgKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNsaWNrKCk7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0Ly8gRm9yIGNyb3NzLWJyb3dzZXIgY29uc2lzdGVuY3ksIGRvbid0IGZpcmUgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzXHJcblx0XHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5ub2RlTmFtZSggZXZlbnQudGFyZ2V0LCBcImFcIiApO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdGJlZm9yZXVubG9hZDoge1xyXG5cdFx0XHRwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcclxuXHJcblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCAyMCtcclxuXHRcdFx0XHQvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuXHJcblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xyXG5cdFx0XHRcdFx0ZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50LCBidWJibGUgKSB7XHJcblx0XHQvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmUuXHJcblx0XHQvLyBGYWtlIG9yaWdpbmFsRXZlbnQgdG8gYXZvaWQgZG9ub3IncyBzdG9wUHJvcGFnYXRpb24sIGJ1dCBpZiB0aGVcclxuXHRcdC8vIHNpbXVsYXRlZCBldmVudCBwcmV2ZW50cyBkZWZhdWx0IHRoZW4gd2UgZG8gdGhlIHNhbWUgb24gdGhlIGRvbm9yLlxyXG5cdFx0dmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxyXG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCksXHJcblx0XHRcdGV2ZW50LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0dHlwZTogdHlwZSxcclxuXHRcdFx0XHRpc1NpbXVsYXRlZDogdHJ1ZSxcclxuXHRcdFx0XHRvcmlnaW5hbEV2ZW50OiB7fVxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdFx0aWYgKCBidWJibGUgKSB7XHJcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guY2FsbCggZWxlbSwgZSApO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBlLmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xyXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0fVxyXG5cdH1cclxufTtcclxuXHJcbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XHJcblx0aWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7XHJcblx0XHRlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSwgZmFsc2UgKTtcclxuXHR9XHJcbn07XHJcblxyXG5qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHtcclxuXHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcclxuXHRpZiAoICEodGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCkgKSB7XHJcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xyXG5cdH1cclxuXHJcblx0Ly8gRXZlbnQgb2JqZWN0XHJcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XHJcblx0XHR0aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7XHJcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcclxuXHJcblx0XHQvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZFxyXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXHJcblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XHJcblx0XHRcdFx0c3JjLmRlZmF1bHRQcmV2ZW50ZWQgPT09IHVuZGVmaW5lZCAmJlxyXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wXHJcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XHJcblx0XHRcdHJldHVyblRydWUgOlxyXG5cdFx0XHRyZXR1cm5GYWxzZTtcclxuXHJcblx0Ly8gRXZlbnQgdHlwZVxyXG5cdH0gZWxzZSB7XHJcblx0XHR0aGlzLnR5cGUgPSBzcmM7XHJcblx0fVxyXG5cclxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxyXG5cdGlmICggcHJvcHMgKSB7XHJcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApO1xyXG5cdH1cclxuXHJcblx0Ly8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcclxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IGpRdWVyeS5ub3coKTtcclxuXHJcblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxyXG5cdHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlO1xyXG59O1xyXG5cclxuLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nXHJcbi8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxyXG5qUXVlcnkuRXZlbnQucHJvdG90eXBlID0ge1xyXG5cdGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsXHJcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxyXG5cdGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcclxuXHJcblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XHJcblxyXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlO1xyXG5cclxuXHRcdGlmICggZSAmJiBlLnByZXZlbnREZWZhdWx0ICkge1xyXG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHR9XHJcblx0fSxcclxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XHJcblxyXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XHJcblxyXG5cdFx0aWYgKCBlICYmIGUuc3RvcFByb3BhZ2F0aW9uICkge1xyXG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0fVxyXG5cdH0sXHJcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xyXG5cclxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xyXG5cclxuXHRcdGlmICggZSAmJiBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiApIHtcclxuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdH1cclxufTtcclxuXHJcbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xyXG4vLyBTdXBwb3J0OiBDaHJvbWUgMTUrXHJcbmpRdWVyeS5lYWNoKHtcclxuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxyXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcclxuXHRwb2ludGVyZW50ZXI6IFwicG9pbnRlcm92ZXJcIixcclxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXHJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XHJcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHtcclxuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxyXG5cdFx0YmluZFR5cGU6IGZpeCxcclxuXHJcblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcclxuXHRcdFx0dmFyIHJldCxcclxuXHRcdFx0XHR0YXJnZXQgPSB0aGlzLFxyXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxyXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcclxuXHJcblx0XHRcdC8vIEZvciBtb3VzZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC5cclxuXHRcdFx0Ly8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3dcclxuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAocmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApKSApIHtcclxuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xyXG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcclxuXHRcdFx0XHRldmVudC50eXBlID0gZml4O1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiByZXQ7XHJcblx0XHR9XHJcblx0fTtcclxufSk7XHJcblxyXG4vLyBTdXBwb3J0OiBGaXJlZm94LCBDaHJvbWUsIFNhZmFyaVxyXG4vLyBDcmVhdGUgXCJidWJibGluZ1wiIGZvY3VzIGFuZCBibHVyIGV2ZW50c1xyXG5pZiAoICFzdXBwb3J0LmZvY3VzaW5CdWJibGVzICkge1xyXG5cdGpRdWVyeS5lYWNoKHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcclxuXHJcblx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dFxyXG5cdFx0dmFyIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7XHJcblx0XHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSwgdHJ1ZSApO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHtcclxuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcyxcclxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YV9wcml2LmFjY2VzcyggZG9jLCBmaXggKTtcclxuXHJcblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XHJcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRkYXRhX3ByaXYuYWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsXHJcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFfcHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xyXG5cclxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcclxuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XHJcblx0XHRcdFx0XHRkYXRhX3ByaXYucmVtb3ZlKCBkb2MsIGZpeCApO1xyXG5cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0ZGF0YV9wcml2LmFjY2VzcyggZG9jLCBmaXgsIGF0dGFjaGVzICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdH0pO1xyXG59XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKHtcclxuXHJcblx0b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAvKklOVEVSTkFMKi8gb25lICkge1xyXG5cdFx0dmFyIG9yaWdGbiwgdHlwZTtcclxuXHJcblx0XHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcclxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xyXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxyXG5cdFx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXHJcblx0XHRcdFx0ZGF0YSA9IGRhdGEgfHwgc2VsZWN0b3I7XHJcblx0XHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcclxuXHRcdFx0XHR0aGlzLm9uKCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBkYXRhID09IG51bGwgJiYgZm4gPT0gbnVsbCApIHtcclxuXHRcdFx0Ly8gKCB0eXBlcywgZm4gKVxyXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xyXG5cdFx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XHJcblx0XHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xyXG5cdFx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxyXG5cdFx0XHRcdGZuID0gZGF0YTtcclxuXHRcdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcclxuXHRcdFx0XHRmbiA9IGRhdGE7XHJcblx0XHRcdFx0ZGF0YSA9IHNlbGVjdG9yO1xyXG5cdFx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoIGZuID09PSBmYWxzZSApIHtcclxuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcclxuXHRcdH0gZWxzZSBpZiAoICFmbiApIHtcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBvbmUgPT09IDEgKSB7XHJcblx0XHRcdG9yaWdGbiA9IGZuO1xyXG5cdFx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcclxuXHRcdFx0XHQvLyBDYW4gdXNlIGFuIGVtcHR5IHNldCwgc2luY2UgZXZlbnQgY29udGFpbnMgdGhlIGluZm9cclxuXHRcdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XHJcblx0XHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XHJcblx0XHRcdH07XHJcblx0XHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXHJcblx0XHRcdGZuLmd1aWQgPSBvcmlnRm4uZ3VpZCB8fCAoIG9yaWdGbi5ndWlkID0galF1ZXJ5Lmd1aWQrKyApO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XHJcblx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTtcclxuXHRcdH0pO1xyXG5cdH0sXHJcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcclxuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7XHJcblx0fSxcclxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xyXG5cdFx0dmFyIGhhbmRsZU9iaiwgdHlwZTtcclxuXHRcdGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkge1xyXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XHJcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcclxuXHRcdFx0alF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZihcclxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID8gaGFuZGxlT2JqLm9yaWdUeXBlICsgXCIuXCIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDogaGFuZGxlT2JqLm9yaWdUeXBlLFxyXG5cdFx0XHRcdGhhbmRsZU9iai5zZWxlY3RvcixcclxuXHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlclxyXG5cdFx0XHQpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xyXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxyXG5cdFx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xyXG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XHJcblx0XHRcdC8vICggdHlwZXMgWywgZm5dIClcclxuXHRcdFx0Zm4gPSBzZWxlY3RvcjtcclxuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0XHRpZiAoIGZuID09PSBmYWxzZSApIHtcclxuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcclxuXHRcdH0pO1xyXG5cdH0sXHJcblxyXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcclxuXHRcdH0pO1xyXG5cdH0sXHJcblx0dHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xyXG5cdFx0dmFyIGVsZW0gPSB0aGlzWzBdO1xyXG5cdFx0aWYgKCBlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcclxuXHRcdH1cclxuXHR9XHJcbn0pO1xyXG5cclxuXHJcbnZhclxyXG5cdHJ4aHRtbFRhZyA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcXHc6XSspW14+XSopXFwvPi9naSxcclxuXHRydGFnTmFtZSA9IC88KFtcXHc6XSspLyxcclxuXHRyaHRtbCA9IC88fCYjP1xcdys7LyxcclxuXHRybm9Jbm5lcmh0bWwgPSAvPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLFxyXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxyXG5cdHJjaGVja2VkID0gL2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaSxcclxuXHRyc2NyaXB0VHlwZSA9IC9eJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksXHJcblx0cnNjcmlwdFR5cGVNYXNrZWQgPSAvXnRydWVcXC8oLiopLyxcclxuXHRyY2xlYW5TY3JpcHQgPSAvXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2csXHJcblxyXG5cdC8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXHJcblx0d3JhcE1hcCA9IHtcclxuXHJcblx0XHQvLyBTdXBwb3J0OiBJRTlcclxuXHRcdG9wdGlvbjogWyAxLCBcIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz5cIiwgXCI8L3NlbGVjdD5cIiBdLFxyXG5cclxuXHRcdHRoZWFkOiBbIDEsIFwiPHRhYmxlPlwiLCBcIjwvdGFibGU+XCIgXSxcclxuXHRcdGNvbDogWyAyLCBcIjx0YWJsZT48Y29sZ3JvdXA+XCIsIFwiPC9jb2xncm91cD48L3RhYmxlPlwiIF0sXHJcblx0XHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXHJcblx0XHR0ZDogWyAzLCBcIjx0YWJsZT48dGJvZHk+PHRyPlwiLCBcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiIF0sXHJcblxyXG5cdFx0X2RlZmF1bHQ6IFsgMCwgXCJcIiwgXCJcIiBdXHJcblx0fTtcclxuXHJcbi8vIFN1cHBvcnQ6IElFOVxyXG53cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb247XHJcblxyXG53cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkO1xyXG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcclxuXHJcbi8vIFN1cHBvcnQ6IDEueCBjb21wYXRpYmlsaXR5XHJcbi8vIE1hbmlwdWxhdGluZyB0YWJsZXMgcmVxdWlyZXMgYSB0Ym9keVxyXG5mdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7XHJcblx0cmV0dXJuIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgXCJ0YWJsZVwiICkgJiZcclxuXHRcdGpRdWVyeS5ub2RlTmFtZSggY29udGVudC5ub2RlVHlwZSAhPT0gMTEgPyBjb250ZW50IDogY29udGVudC5maXJzdENoaWxkLCBcInRyXCIgKSA/XHJcblxyXG5cdFx0ZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRib2R5XCIpWzBdIHx8XHJcblx0XHRcdGVsZW0uYXBwZW5kQ2hpbGQoIGVsZW0ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGJvZHlcIikgKSA6XHJcblx0XHRlbGVtO1xyXG59XHJcblxyXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXHJcbmZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7XHJcblx0ZWxlbS50eXBlID0gKGVsZW0uZ2V0QXR0cmlidXRlKFwidHlwZVwiKSAhPT0gbnVsbCkgKyBcIi9cIiArIGVsZW0udHlwZTtcclxuXHRyZXR1cm4gZWxlbTtcclxufVxyXG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xyXG5cdHZhciBtYXRjaCA9IHJzY3JpcHRUeXBlTWFza2VkLmV4ZWMoIGVsZW0udHlwZSApO1xyXG5cclxuXHRpZiAoIG1hdGNoICkge1xyXG5cdFx0ZWxlbS50eXBlID0gbWF0Y2hbIDEgXTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoXCJ0eXBlXCIpO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGVsZW07XHJcbn1cclxuXHJcbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxyXG5mdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7XHJcblx0dmFyIGkgPSAwLFxyXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcclxuXHJcblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xyXG5cdFx0ZGF0YV9wcml2LnNldChcclxuXHRcdFx0ZWxlbXNbIGkgXSwgXCJnbG9iYWxFdmFsXCIsICFyZWZFbGVtZW50cyB8fCBkYXRhX3ByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCBcImdsb2JhbEV2YWxcIiApXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcclxuXHR2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHBkYXRhQ3VyLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50cztcclxuXHJcblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Ly8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy5cclxuXHRpZiAoIGRhdGFfcHJpdi5oYXNEYXRhKCBzcmMgKSApIHtcclxuXHRcdHBkYXRhT2xkID0gZGF0YV9wcml2LmFjY2Vzcyggc3JjICk7XHJcblx0XHRwZGF0YUN1ciA9IGRhdGFfcHJpdi5zZXQoIGRlc3QsIHBkYXRhT2xkICk7XHJcblx0XHRldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7XHJcblxyXG5cdFx0aWYgKCBldmVudHMgKSB7XHJcblx0XHRcdGRlbGV0ZSBwZGF0YUN1ci5oYW5kbGU7XHJcblx0XHRcdHBkYXRhQ3VyLmV2ZW50cyA9IHt9O1xyXG5cclxuXHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XHJcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XHJcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyAyLiBDb3B5IHVzZXIgZGF0YVxyXG5cdGlmICggZGF0YV91c2VyLmhhc0RhdGEoIHNyYyApICkge1xyXG5cdFx0dWRhdGFPbGQgPSBkYXRhX3VzZXIuYWNjZXNzKCBzcmMgKTtcclxuXHRcdHVkYXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgge30sIHVkYXRhT2xkICk7XHJcblxyXG5cdFx0ZGF0YV91c2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcclxuXHR9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEFsbCggY29udGV4dCwgdGFnICkge1xyXG5cdHZhciByZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lID8gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8IFwiKlwiICkgOlxyXG5cdFx0XHRjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgPyBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCBcIipcIiApIDpcclxuXHRcdFx0W107XHJcblxyXG5cdHJldHVybiB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSA/XHJcblx0XHRqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKSA6XHJcblx0XHRyZXQ7XHJcbn1cclxuXHJcbi8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0c1xyXG5mdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkge1xyXG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcclxuXHJcblx0Ly8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uXHJcblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XHJcblx0XHRkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDtcclxuXHJcblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcclxuXHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIgKSB7XHJcblx0XHRkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7XHJcblx0fVxyXG59XHJcblxyXG5qUXVlcnkuZXh0ZW5kKHtcclxuXHRjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xyXG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXHJcblx0XHRcdGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKSxcclxuXHRcdFx0aW5QYWdlID0galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcclxuXHJcblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcclxuXHRcdGlmICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExICkgJiZcclxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XHJcblxyXG5cdFx0XHQvLyBXZSBlc2NoZXcgU2l6emxlIGhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IGh0dHA6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMlxyXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XHJcblx0XHRcdHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7XHJcblxyXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcclxuXHRcdFx0XHRmaXhJbnB1dCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmVcclxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcclxuXHRcdFx0aWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcclxuXHRcdFx0XHRzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApO1xyXG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XHJcblxyXG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xyXG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxyXG5cdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgXCJzY3JpcHRcIiApO1xyXG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcclxuXHRcdFx0c2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdldEFsbCggZWxlbSwgXCJzY3JpcHRcIiApICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0XHJcblx0XHRyZXR1cm4gY2xvbmU7XHJcblx0fSxcclxuXHJcblx0YnVpbGRGcmFnbWVudDogZnVuY3Rpb24oIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24gKSB7XHJcblx0XHR2YXIgZWxlbSwgdG1wLCB0YWcsIHdyYXAsIGNvbnRhaW5zLCBqLFxyXG5cdFx0XHRmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxyXG5cdFx0XHRub2RlcyA9IFtdLFxyXG5cdFx0XHRpID0gMCxcclxuXHRcdFx0bCA9IGVsZW1zLmxlbmd0aDtcclxuXHJcblx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XHJcblx0XHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xyXG5cclxuXHRcdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XHJcblxyXG5cdFx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxyXG5cdFx0XHRcdGlmICggalF1ZXJ5LnR5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcclxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFF0V2ViS2l0LCBQaGFudG9tSlNcclxuXHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcclxuXHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcclxuXHJcblx0XHRcdFx0Ly8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXHJcblx0XHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcclxuXHRcdFx0XHRcdG5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKSApO1xyXG5cclxuXHRcdFx0XHQvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXNcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikgKTtcclxuXHJcblx0XHRcdFx0XHQvLyBEZXNlcmlhbGl6ZSBhIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uXHJcblx0XHRcdFx0XHR0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xyXG5cdFx0XHRcdFx0dG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGVsZW0ucmVwbGFjZSggcnhodG1sVGFnLCBcIjwkMT48LyQyPlwiICkgKyB3cmFwWyAyIF07XHJcblxyXG5cdFx0XHRcdFx0Ly8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50XHJcblx0XHRcdFx0XHRqID0gd3JhcFsgMCBdO1xyXG5cdFx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XHJcblx0XHRcdFx0XHRcdHRtcCA9IHRtcC5sYXN0Q2hpbGQ7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogUXRXZWJLaXQsIFBoYW50b21KU1xyXG5cdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxyXG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTtcclxuXHJcblx0XHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxyXG5cdFx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcclxuXHJcblx0XHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICgjMTIzOTIpXHJcblx0XHRcdFx0XHR0bXAudGV4dENvbnRlbnQgPSBcIlwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnRcclxuXHRcdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcclxuXHJcblx0XHRpID0gMDtcclxuXHRcdHdoaWxlICggKGVsZW0gPSBub2Rlc1sgaSsrIF0pICkge1xyXG5cclxuXHRcdFx0Ly8gIzQwODcgLSBJZiBvcmlnaW4gYW5kIGRlc3RpbmF0aW9uIGVsZW1lbnRzIGFyZSB0aGUgc2FtZSwgYW5kIHRoaXMgaXNcclxuXHRcdFx0Ly8gdGhhdCBlbGVtZW50LCBkbyBub3QgZG8gYW55dGhpbmdcclxuXHRcdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApICE9PSAtMSApIHtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29udGFpbnMgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xyXG5cclxuXHRcdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XHJcblx0XHRcdHRtcCA9IGdldEFsbCggZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgXCJzY3JpcHRcIiApO1xyXG5cclxuXHRcdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxyXG5cdFx0XHRpZiAoIGNvbnRhaW5zICkge1xyXG5cdFx0XHRcdHNldEdsb2JhbEV2YWwoIHRtcCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBDYXB0dXJlIGV4ZWN1dGFibGVzXHJcblx0XHRcdGlmICggc2NyaXB0cyApIHtcclxuXHRcdFx0XHRqID0gMDtcclxuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gdG1wWyBqKysgXSkgKSB7XHJcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XHJcblx0XHRcdFx0XHRcdHNjcmlwdHMucHVzaCggZWxlbSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmcmFnbWVudDtcclxuXHR9LFxyXG5cclxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcclxuXHRcdHZhciBkYXRhLCBlbGVtLCB0eXBlLCBrZXksXHJcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcclxuXHRcdFx0aSA9IDA7XHJcblxyXG5cdFx0Zm9yICggOyAoZWxlbSA9IGVsZW1zWyBpIF0pICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcclxuXHRcdFx0aWYgKCBqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkge1xyXG5cdFx0XHRcdGtleSA9IGVsZW1bIGRhdGFfcHJpdi5leHBhbmRvIF07XHJcblxyXG5cdFx0XHRcdGlmICgga2V5ICYmIChkYXRhID0gZGF0YV9wcml2LmNhY2hlWyBrZXkgXSkgKSB7XHJcblx0XHRcdFx0XHRpZiAoIGRhdGEuZXZlbnRzICkge1xyXG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xyXG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICggZGF0YV9wcml2LmNhY2hlWyBrZXkgXSApIHtcclxuXHRcdFx0XHRcdFx0Ly8gRGlzY2FyZCBhbnkgcmVtYWluaW5nIGBwcml2YXRlYCBkYXRhXHJcblx0XHRcdFx0XHRcdGRlbGV0ZSBkYXRhX3ByaXYuY2FjaGVbIGtleSBdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBEaXNjYXJkIGFueSByZW1haW5pbmcgYHVzZXJgIGRhdGFcclxuXHRcdFx0ZGVsZXRlIGRhdGFfdXNlci5jYWNoZVsgZWxlbVsgZGF0YV91c2VyLmV4cGFuZG8gXSBdO1xyXG5cdFx0fVxyXG5cdH1cclxufSk7XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKHtcclxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XHJcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XHJcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cclxuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcclxuXHRcdFx0XHR0aGlzLmVtcHR5KCkuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xyXG5cdH0sXHJcblxyXG5cdGFwcGVuZDogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5kb21NYW5pcCggYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XHJcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xyXG5cdFx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cclxuXHRwcmVwZW5kOiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiB0aGlzLmRvbU1hbmlwKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcclxuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XHJcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fSxcclxuXHJcblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiB0aGlzLmRvbU1hbmlwKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH0sXHJcblxyXG5cdGFmdGVyOiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiB0aGlzLmRvbU1hbmlwKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH0sXHJcblxyXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCBrZWVwRGF0YSAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcclxuXHRcdHZhciBlbGVtLFxyXG5cdFx0XHRlbGVtcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHRoaXMgKSA6IHRoaXMsXHJcblx0XHRcdGkgPSAwO1xyXG5cclxuXHRcdGZvciAoIDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkge1xyXG5cdFx0XHRpZiAoICFrZWVwRGF0YSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xyXG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSApICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xyXG5cdFx0XHRcdGlmICgga2VlcERhdGEgJiYgalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSApIHtcclxuXHRcdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggZWxlbSwgXCJzY3JpcHRcIiApICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fSxcclxuXHJcblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIGVsZW0sXHJcblx0XHRcdGkgPSAwO1xyXG5cclxuXHRcdGZvciAoIDsgKGVsZW0gPSB0aGlzW2ldKSAhPSBudWxsOyBpKysgKSB7XHJcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcclxuXHJcblx0XHRcdFx0Ly8gUHJldmVudCBtZW1vcnkgbGVha3NcclxuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcclxuXHJcblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXNcclxuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH0sXHJcblxyXG5cdGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XHJcblx0XHRkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzO1xyXG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTtcclxuXHRcdH0pO1xyXG5cdH0sXHJcblxyXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcclxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcclxuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sXHJcblx0XHRcdFx0aSA9IDAsXHJcblx0XHRcdFx0bCA9IHRoaXMubGVuZ3RoO1xyXG5cclxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGVsZW0uaW5uZXJIVE1MO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MXHJcblx0XHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJlxyXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcclxuXHJcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCByeGh0bWxUYWcsIFwiPCQxPjwvJDI+XCIgKTtcclxuXHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcclxuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcclxuXHJcblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xyXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XHJcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XHJcblx0XHRcdFx0XHRcdFx0ZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGVsZW0gPSAwO1xyXG5cclxuXHRcdFx0XHQvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2RcclxuXHRcdFx0XHR9IGNhdGNoKCBlICkge31cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBlbGVtICkge1xyXG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7XHJcblx0XHRcdH1cclxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XHJcblx0fSxcclxuXHJcblx0cmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1sgMCBdO1xyXG5cclxuXHRcdC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudFxyXG5cdFx0dGhpcy5kb21NYW5pcCggYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0YXJnID0gdGhpcy5wYXJlbnROb2RlO1xyXG5cclxuXHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcclxuXHJcblx0XHRcdGlmICggYXJnICkge1xyXG5cdFx0XHRcdGFyZy5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gRm9yY2UgcmVtb3ZhbCBpZiB0aGVyZSB3YXMgbm8gbmV3IGNvbnRlbnQgKGUuZy4sIGZyb20gZW1wdHkgYXJndW1lbnRzKVxyXG5cdFx0cmV0dXJuIGFyZyAmJiAoYXJnLmxlbmd0aCB8fCBhcmcubm9kZVR5cGUpID8gdGhpcyA6IHRoaXMucmVtb3ZlKCk7XHJcblx0fSxcclxuXHJcblx0ZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5yZW1vdmUoIHNlbGVjdG9yLCB0cnVlICk7XHJcblx0fSxcclxuXHJcblx0ZG9tTWFuaXA6IGZ1bmN0aW9uKCBhcmdzLCBjYWxsYmFjayApIHtcclxuXHJcblx0XHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXHJcblx0XHRhcmdzID0gY29uY2F0LmFwcGx5KCBbXSwgYXJncyApO1xyXG5cclxuXHRcdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcclxuXHRcdFx0aSA9IDAsXHJcblx0XHRcdGwgPSB0aGlzLmxlbmd0aCxcclxuXHRcdFx0c2V0ID0gdGhpcyxcclxuXHRcdFx0aU5vQ2xvbmUgPSBsIC0gMSxcclxuXHRcdFx0dmFsdWUgPSBhcmdzWyAwIF0sXHJcblx0XHRcdGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTtcclxuXHJcblx0XHQvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXRcclxuXHRcdGlmICggaXNGdW5jdGlvbiB8fFxyXG5cdFx0XHRcdCggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXHJcblx0XHRcdFx0XHQhc3VwcG9ydC5jaGVja0Nsb25lICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSApIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaW5kZXggKSB7XHJcblx0XHRcdFx0dmFyIHNlbGYgPSBzZXQuZXEoIGluZGV4ICk7XHJcblx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uICkge1xyXG5cdFx0XHRcdFx0YXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHNlbGYuZG9tTWFuaXAoIGFyZ3MsIGNhbGxiYWNrICk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggbCApIHtcclxuXHRcdFx0ZnJhZ21lbnQgPSBqUXVlcnkuYnVpbGRGcmFnbWVudCggYXJncywgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCB0aGlzICk7XHJcblx0XHRcdGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcclxuXHJcblx0XHRcdGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7XHJcblx0XHRcdFx0ZnJhZ21lbnQgPSBmaXJzdDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBmaXJzdCApIHtcclxuXHRcdFx0XHRzY3JpcHRzID0galF1ZXJ5Lm1hcCggZ2V0QWxsKCBmcmFnbWVudCwgXCJzY3JpcHRcIiApLCBkaXNhYmxlU2NyaXB0ICk7XHJcblx0XHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xyXG5cclxuXHRcdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cFxyXG5cdFx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuXHJcblx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xyXG5cdFx0XHRcdFx0bm9kZSA9IGZyYWdtZW50O1xyXG5cclxuXHRcdFx0XHRcdGlmICggaSAhPT0gaU5vQ2xvbmUgKSB7XHJcblx0XHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcclxuXHJcblx0XHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cclxuXHRcdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFF0V2ViS2l0XHJcblx0XHRcdFx0XHRcdFx0Ly8galF1ZXJ5Lm1lcmdlIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93c1xyXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGNhbGxiYWNrLmNhbGwoIHRoaXNbIGkgXSwgbm9kZSwgaSApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xyXG5cdFx0XHRcdFx0ZG9jID0gc2NyaXB0c1sgc2NyaXB0cy5sZW5ndGggLSAxIF0ub3duZXJEb2N1bWVudDtcclxuXHJcblx0XHRcdFx0XHQvLyBSZWVuYWJsZSBzY3JpcHRzXHJcblx0XHRcdFx0XHRqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50IGluc2VydGlvblxyXG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XHJcblx0XHRcdFx0XHRcdG5vZGUgPSBzY3JpcHRzWyBpIF07XHJcblx0XHRcdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8IFwiXCIgKSAmJlxyXG5cdFx0XHRcdFx0XHRcdCFkYXRhX3ByaXYuYWNjZXNzKCBub2RlLCBcImdsb2JhbEV2YWxcIiApICYmIGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBPcHRpb25hbCBBSkFYIGRlcGVuZGVuY3ksIGJ1dCB3b24ndCBydW4gc2NyaXB0cyBpZiBub3QgcHJlc2VudFxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMgKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCBcIlwiICkgKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcbn0pO1xyXG5cclxualF1ZXJ5LmVhY2goe1xyXG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxyXG5cdHByZXBlbmRUbzogXCJwcmVwZW5kXCIsXHJcblx0aW5zZXJ0QmVmb3JlOiBcImJlZm9yZVwiLFxyXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXHJcblx0cmVwbGFjZUFsbDogXCJyZXBsYWNlV2l0aFwiXHJcbn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHtcclxuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcclxuXHRcdHZhciBlbGVtcyxcclxuXHRcdFx0cmV0ID0gW10sXHJcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcclxuXHRcdFx0bGFzdCA9IGluc2VydC5sZW5ndGggLSAxLFxyXG5cdFx0XHRpID0gMDtcclxuXHJcblx0XHRmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkge1xyXG5cdFx0XHRlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApO1xyXG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XHJcblxyXG5cdFx0XHQvLyBTdXBwb3J0OiBRdFdlYktpdFxyXG5cdFx0XHQvLyAuZ2V0KCkgYmVjYXVzZSBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzXHJcblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xyXG5cdH07XHJcbn0pO1xyXG5cclxuXHJcbnZhciBpZnJhbWUsXHJcblx0ZWxlbWRpc3BsYXkgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgYWN0dWFsIGRpc3BsYXkgb2YgYSBlbGVtZW50XHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG5vZGVOYW1lIG9mIHRoZSBlbGVtZW50XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBkb2MgRG9jdW1lbnQgb2JqZWN0XHJcbiAqL1xyXG4vLyBDYWxsZWQgb25seSBmcm9tIHdpdGhpbiBkZWZhdWx0RGlzcGxheVxyXG5mdW5jdGlvbiBhY3R1YWxEaXNwbGF5KCBuYW1lLCBkb2MgKSB7XHJcblx0dmFyIHN0eWxlLFxyXG5cdFx0ZWxlbSA9IGpRdWVyeSggZG9jLmNyZWF0ZUVsZW1lbnQoIG5hbWUgKSApLmFwcGVuZFRvKCBkb2MuYm9keSApLFxyXG5cclxuXHRcdC8vIGdldERlZmF1bHRDb21wdXRlZFN0eWxlIG1pZ2h0IGJlIHJlbGlhYmx5IHVzZWQgb25seSBvbiBhdHRhY2hlZCBlbGVtZW50XHJcblx0XHRkaXNwbGF5ID0gd2luZG93LmdldERlZmF1bHRDb21wdXRlZFN0eWxlICYmICggc3R5bGUgPSB3aW5kb3cuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUoIGVsZW1bIDAgXSApICkgP1xyXG5cclxuXHRcdFx0Ly8gVXNlIG9mIHRoaXMgbWV0aG9kIGlzIGEgdGVtcG9yYXJ5IGZpeCAobW9yZSBsaWtlIG9wdGltaXphdGlvbikgdW50aWwgc29tZXRoaW5nIGJldHRlciBjb21lcyBhbG9uZyxcclxuXHRcdFx0Ly8gc2luY2UgaXQgd2FzIHJlbW92ZWQgZnJvbSBzcGVjaWZpY2F0aW9uIGFuZCBzdXBwb3J0ZWQgb25seSBpbiBGRlxyXG5cdFx0XHRzdHlsZS5kaXNwbGF5IDogalF1ZXJ5LmNzcyggZWxlbVsgMCBdLCBcImRpc3BsYXlcIiApO1xyXG5cclxuXHQvLyBXZSBkb24ndCBoYXZlIGFueSBkYXRhIHN0b3JlZCBvbiB0aGUgZWxlbWVudCxcclxuXHQvLyBzbyB1c2UgXCJkZXRhY2hcIiBtZXRob2QgYXMgZmFzdCB3YXkgdG8gZ2V0IHJpZCBvZiB0aGUgZWxlbWVudFxyXG5cdGVsZW0uZGV0YWNoKCk7XHJcblxyXG5cdHJldHVybiBkaXNwbGF5O1xyXG59XHJcblxyXG4vKipcclxuICogVHJ5IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBkaXNwbGF5IHZhbHVlIG9mIGFuIGVsZW1lbnRcclxuICogQHBhcmFtIHtTdHJpbmd9IG5vZGVOYW1lXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWZhdWx0RGlzcGxheSggbm9kZU5hbWUgKSB7XHJcblx0dmFyIGRvYyA9IGRvY3VtZW50LFxyXG5cdFx0ZGlzcGxheSA9IGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdO1xyXG5cclxuXHRpZiAoICFkaXNwbGF5ICkge1xyXG5cdFx0ZGlzcGxheSA9IGFjdHVhbERpc3BsYXkoIG5vZGVOYW1lLCBkb2MgKTtcclxuXHJcblx0XHQvLyBJZiB0aGUgc2ltcGxlIHdheSBmYWlscywgcmVhZCBmcm9tIGluc2lkZSBhbiBpZnJhbWVcclxuXHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgfHwgIWRpc3BsYXkgKSB7XHJcblxyXG5cdFx0XHQvLyBVc2UgdGhlIGFscmVhZHktY3JlYXRlZCBpZnJhbWUgaWYgcG9zc2libGVcclxuXHRcdFx0aWZyYW1lID0gKGlmcmFtZSB8fCBqUXVlcnkoIFwiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPlwiICkpLmFwcGVuZFRvKCBkb2MuZG9jdW1lbnRFbGVtZW50ICk7XHJcblxyXG5cdFx0XHQvLyBBbHdheXMgd3JpdGUgYSBuZXcgSFRNTCBza2VsZXRvbiBzbyBXZWJraXQgYW5kIEZpcmVmb3ggZG9uJ3QgY2hva2Ugb24gcmV1c2VcclxuXHRcdFx0ZG9jID0gaWZyYW1lWyAwIF0uY29udGVudERvY3VtZW50O1xyXG5cclxuXHRcdFx0Ly8gU3VwcG9ydDogSUVcclxuXHRcdFx0ZG9jLndyaXRlKCk7XHJcblx0XHRcdGRvYy5jbG9zZSgpO1xyXG5cclxuXHRcdFx0ZGlzcGxheSA9IGFjdHVhbERpc3BsYXkoIG5vZGVOYW1lLCBkb2MgKTtcclxuXHRcdFx0aWZyYW1lLmRldGFjaCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFN0b3JlIHRoZSBjb3JyZWN0IGRlZmF1bHQgZGlzcGxheVxyXG5cdFx0ZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGRpc3BsYXk7XHJcbn1cclxudmFyIHJtYXJnaW4gPSAoL15tYXJnaW4vKTtcclxuXHJcbnZhciBybnVtbm9ucHggPSBuZXcgUmVnRXhwKCBcIl4oXCIgKyBwbnVtICsgXCIpKD8hcHgpW2EteiVdKyRcIiwgXCJpXCIgKTtcclxuXHJcbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdC8vIFN1cHBvcnQ6IElFPD0xMSssIEZpcmVmb3g8PTMwKyAoIzE1MDk4LCAjMTQxNTApXHJcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcclxuXHRcdC8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCBcImRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGVcIlxyXG5cdFx0aWYgKCBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcub3BlbmVyICkge1xyXG5cdFx0XHRyZXR1cm4gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoIGVsZW0sIG51bGwgKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGVsZW0sIG51bGwgKTtcclxuXHR9O1xyXG5cclxuXHJcblxyXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xyXG5cdHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsXHJcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XHJcblxyXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XHJcblxyXG5cdC8vIFN1cHBvcnQ6IElFOVxyXG5cdC8vIGdldFByb3BlcnR5VmFsdWUgaXMgb25seSBuZWVkZWQgZm9yIC5jc3MoJ2ZpbHRlcicpICgjMTI1MzcpXHJcblx0aWYgKCBjb21wdXRlZCApIHtcclxuXHRcdHJldCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdO1xyXG5cdH1cclxuXHJcblx0aWYgKCBjb21wdXRlZCApIHtcclxuXHJcblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSApIHtcclxuXHRcdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU3VwcG9ydDogaU9TIDwgNlxyXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxyXG5cdFx0Ly8gaU9TIDwgNiAoYXQgbGVhc3QpIHJldHVybnMgcGVyY2VudGFnZSBmb3IgYSBsYXJnZXIgc2V0IG9mIHZhbHVlcywgYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVsc1xyXG5cdFx0Ly8gdGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOiBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzXHJcblx0XHRpZiAoIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiBybWFyZ2luLnRlc3QoIG5hbWUgKSApIHtcclxuXHJcblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcclxuXHRcdFx0d2lkdGggPSBzdHlsZS53aWR0aDtcclxuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcclxuXHRcdFx0bWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDtcclxuXHJcblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcclxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0O1xyXG5cdFx0XHRyZXQgPSBjb21wdXRlZC53aWR0aDtcclxuXHJcblx0XHRcdC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXNcclxuXHRcdFx0c3R5bGUud2lkdGggPSB3aWR0aDtcclxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcclxuXHRcdFx0c3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/XHJcblx0XHQvLyBTdXBwb3J0OiBJRVxyXG5cdFx0Ly8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMgYW4gaW50ZWdlci5cclxuXHRcdHJldCArIFwiXCIgOlxyXG5cdFx0cmV0O1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gYWRkR2V0SG9va0lmKCBjb25kaXRpb25GbiwgaG9va0ZuICkge1xyXG5cdC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuXHJcblx0cmV0dXJuIHtcclxuXHRcdGdldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdGlmICggY29uZGl0aW9uRm4oKSApIHtcclxuXHRcdFx0XHQvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWVcclxuXHRcdFx0XHQvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuXHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2V0O1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uXHJcblx0XHRcdHJldHVybiAodGhpcy5nZXQgPSBob29rRm4pLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcclxuXHRcdH1cclxuXHR9O1xyXG59XHJcblxyXG5cclxuKGZ1bmN0aW9uKCkge1xyXG5cdHZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCxcclxuXHRcdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXHJcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXHJcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XHJcblxyXG5cdGlmICggIWRpdi5zdHlsZSApIHtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdC8vIFN1cHBvcnQ6IElFOS0xMStcclxuXHQvLyBTdHlsZSBvZiBjbG9uZWQgZWxlbWVudCBhZmZlY3RzIHNvdXJjZSBlbGVtZW50IGNsb25lZCAoIzg5MDgpXHJcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xyXG5cdGRpdi5jbG9uZU5vZGUoIHRydWUgKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiXCI7XHJcblx0c3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09IFwiY29udGVudC1ib3hcIjtcclxuXHJcblx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4O1wiICtcclxuXHRcdFwicG9zaXRpb246YWJzb2x1dGVcIjtcclxuXHRjb250YWluZXIuYXBwZW5kQ2hpbGQoIGRpdiApO1xyXG5cclxuXHQvLyBFeGVjdXRpbmcgYm90aCBwaXhlbFBvc2l0aW9uICYgYm94U2l6aW5nUmVsaWFibGUgdGVzdHMgcmVxdWlyZSBvbmx5IG9uZSBsYXlvdXRcclxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxyXG5cdGZ1bmN0aW9uIGNvbXB1dGVQaXhlbFBvc2l0aW9uQW5kQm94U2l6aW5nUmVsaWFibGUoKSB7XHJcblx0XHRkaXYuc3R5bGUuY3NzVGV4dCA9XHJcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3g8MjksIEFuZHJvaWQgMi4zXHJcblx0XHRcdC8vIFZlbmRvci1wcmVmaXggYm94LXNpemluZ1xyXG5cdFx0XHRcIi13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O1wiICtcclxuXHRcdFx0XCJib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjElO3RvcDoxJTtcIiArXHJcblx0XHRcdFwiYm9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo0cHg7cG9zaXRpb246YWJzb2x1dGVcIjtcclxuXHRcdGRpdi5pbm5lckhUTUwgPSBcIlwiO1xyXG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggY29udGFpbmVyICk7XHJcblxyXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiwgbnVsbCApO1xyXG5cdFx0cGl4ZWxQb3NpdGlvblZhbCA9IGRpdlN0eWxlLnRvcCAhPT0gXCIxJVwiO1xyXG5cdFx0Ym94U2l6aW5nUmVsaWFibGVWYWwgPSBkaXZTdHlsZS53aWR0aCA9PT0gXCI0cHhcIjtcclxuXHJcblx0XHRkb2NFbGVtLnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcclxuXHR9XHJcblxyXG5cdC8vIFN1cHBvcnQ6IG5vZGUuanMganNkb21cclxuXHQvLyBEb24ndCBhc3N1bWUgdGhhdCBnZXRDb21wdXRlZFN0eWxlIGlzIGEgcHJvcGVydHkgb2YgdGhlIGdsb2JhbCBvYmplY3RcclxuXHRpZiAoIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlICkge1xyXG5cdFx0alF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwge1xyXG5cdFx0XHRwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcclxuXHJcblx0XHRcdFx0Ly8gVGhpcyB0ZXN0IGlzIGV4ZWN1dGVkIG9ubHkgb25jZSBidXQgd2Ugc3RpbGwgZG8gbWVtb2l6aW5nXHJcblx0XHRcdFx0Ly8gc2luY2Ugd2UgY2FuIHVzZSB0aGUgYm94U2l6aW5nUmVsaWFibGUgcHJlLWNvbXB1dGluZy5cclxuXHRcdFx0XHQvLyBObyBuZWVkIHRvIGNoZWNrIGlmIHRoZSB0ZXN0IHdhcyBhbHJlYWR5IHBlcmZvcm1lZCwgdGhvdWdoLlxyXG5cdFx0XHRcdGNvbXB1dGVQaXhlbFBvc2l0aW9uQW5kQm94U2l6aW5nUmVsaWFibGUoKTtcclxuXHRcdFx0XHRyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDtcclxuXHRcdFx0fSxcclxuXHRcdFx0Ym94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGlmICggYm94U2l6aW5nUmVsaWFibGVWYWwgPT0gbnVsbCApIHtcclxuXHRcdFx0XHRcdGNvbXB1dGVQaXhlbFBvc2l0aW9uQW5kQm94U2l6aW5nUmVsaWFibGUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRyZWxpYWJsZU1hcmdpblJpZ2h0OiBmdW5jdGlvbigpIHtcclxuXHJcblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjNcclxuXHRcdFx0XHQvLyBDaGVjayBpZiBkaXYgd2l0aCBleHBsaWNpdCB3aWR0aCBhbmQgbm8gbWFyZ2luLXJpZ2h0IGluY29ycmVjdGx5XHJcblx0XHRcdFx0Ly8gZ2V0cyBjb21wdXRlZCBtYXJnaW4tcmlnaHQgYmFzZWQgb24gd2lkdGggb2YgY29udGFpbmVyLiAoIzMzMzMpXHJcblx0XHRcdFx0Ly8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0XHJcblx0XHRcdFx0Ly8gVGhpcyBzdXBwb3J0IGZ1bmN0aW9uIGlzIG9ubHkgZXhlY3V0ZWQgb25jZSBzbyBubyBtZW1vaXppbmcgaXMgbmVlZGVkLlxyXG5cdFx0XHRcdHZhciByZXQsXHJcblx0XHRcdFx0XHRtYXJnaW5EaXYgPSBkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xyXG5cclxuXHRcdFx0XHQvLyBSZXNldCBDU1M6IGJveC1zaXppbmc7IGRpc3BsYXk7IG1hcmdpbjsgYm9yZGVyOyBwYWRkaW5nXHJcblx0XHRcdFx0bWFyZ2luRGl2LnN0eWxlLmNzc1RleHQgPSBkaXYuc3R5bGUuY3NzVGV4dCA9XHJcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94PDI5LCBBbmRyb2lkIDIuM1xyXG5cdFx0XHRcdFx0Ly8gVmVuZG9yLXByZWZpeCBib3gtc2l6aW5nXHJcblx0XHRcdFx0XHRcIi13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7XCIgK1xyXG5cdFx0XHRcdFx0XCJib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowXCI7XHJcblx0XHRcdFx0bWFyZ2luRGl2LnN0eWxlLm1hcmdpblJpZ2h0ID0gbWFyZ2luRGl2LnN0eWxlLndpZHRoID0gXCIwXCI7XHJcblx0XHRcdFx0ZGl2LnN0eWxlLndpZHRoID0gXCIxcHhcIjtcclxuXHRcdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBjb250YWluZXIgKTtcclxuXHJcblx0XHRcdFx0cmV0ID0gIXBhcnNlRmxvYXQoIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBtYXJnaW5EaXYsIG51bGwgKS5tYXJnaW5SaWdodCApO1xyXG5cclxuXHRcdFx0XHRkb2NFbGVtLnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcclxuXHRcdFx0XHRkaXYucmVtb3ZlQ2hpbGQoIG1hcmdpbkRpdiApO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gcmV0O1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcbn0pKCk7XHJcblxyXG5cclxuLy8gQSBtZXRob2QgZm9yIHF1aWNrbHkgc3dhcHBpbmcgaW4vb3V0IENTUyBwcm9wZXJ0aWVzIHRvIGdldCBjb3JyZWN0IGNhbGN1bGF0aW9ucy5cclxualF1ZXJ5LnN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2ssIGFyZ3MgKSB7XHJcblx0dmFyIHJldCwgbmFtZSxcclxuXHRcdG9sZCA9IHt9O1xyXG5cclxuXHQvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXNcclxuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XHJcblx0XHRvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcclxuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTtcclxuXHR9XHJcblxyXG5cdHJldCA9IGNhbGxiYWNrLmFwcGx5KCBlbGVtLCBhcmdzIHx8IFtdICk7XHJcblxyXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xyXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcclxuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJldDtcclxufTtcclxuXHJcblxyXG52YXJcclxuXHQvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlIGV4Y2VwdCBcInRhYmxlXCIsIFwidGFibGUtY2VsbFwiLCBvciBcInRhYmxlLWNhcHRpb25cIlxyXG5cdC8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheVxyXG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcclxuXHRybnVtc3BsaXQgPSBuZXcgUmVnRXhwKCBcIl4oXCIgKyBwbnVtICsgXCIpKC4qKSRcIiwgXCJpXCIgKSxcclxuXHRycmVsTnVtID0gbmV3IFJlZ0V4cCggXCJeKFsrLV0pPShcIiArIHBudW0gKyBcIilcIiwgXCJpXCIgKSxcclxuXHJcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXHJcblx0Y3NzTm9ybWFsVHJhbnNmb3JtID0ge1xyXG5cdFx0bGV0dGVyU3BhY2luZzogXCIwXCIsXHJcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXHJcblx0fSxcclxuXHJcblx0Y3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiT1wiLCBcIk1velwiLCBcIm1zXCIgXTtcclxuXHJcbi8vIFJldHVybiBhIGNzcyBwcm9wZXJ0eSBtYXBwZWQgdG8gYSBwb3RlbnRpYWxseSB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHlcclxuZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIHN0eWxlLCBuYW1lICkge1xyXG5cclxuXHQvLyBTaG9ydGN1dCBmb3IgbmFtZXMgdGhhdCBhcmUgbm90IHZlbmRvciBwcmVmaXhlZFxyXG5cdGlmICggbmFtZSBpbiBzdHlsZSApIHtcclxuXHRcdHJldHVybiBuYW1lO1xyXG5cdH1cclxuXHJcblx0Ly8gQ2hlY2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lc1xyXG5cdHZhciBjYXBOYW1lID0gbmFtZVswXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKSxcclxuXHRcdG9yaWdOYW1lID0gbmFtZSxcclxuXHRcdGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7XHJcblxyXG5cdHdoaWxlICggaS0tICkge1xyXG5cdFx0bmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1lO1xyXG5cdFx0aWYgKCBuYW1lIGluIHN0eWxlICkge1xyXG5cdFx0XHRyZXR1cm4gbmFtZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBvcmlnTmFtZTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHtcclxuXHR2YXIgbWF0Y2hlcyA9IHJudW1zcGxpdC5leGVjKCB2YWx1ZSApO1xyXG5cdHJldHVybiBtYXRjaGVzID9cclxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXHJcblx0XHRNYXRoLm1heCggMCwgbWF0Y2hlc1sgMSBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMiBdIHx8IFwicHhcIiApIDpcclxuXHRcdHZhbHVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhdWdtZW50V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEsIGlzQm9yZGVyQm94LCBzdHlsZXMgKSB7XHJcblx0dmFyIGkgPSBleHRyYSA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApID9cclxuXHRcdC8vIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmlnaHQgbWVhc3VyZW1lbnQsIGF2b2lkIGF1Z21lbnRhdGlvblxyXG5cdFx0NCA6XHJcblx0XHQvLyBPdGhlcndpc2UgaW5pdGlhbGl6ZSBmb3IgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBwcm9wZXJ0aWVzXHJcblx0XHRuYW1lID09PSBcIndpZHRoXCIgPyAxIDogMCxcclxuXHJcblx0XHR2YWwgPSAwO1xyXG5cclxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XHJcblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW4sIHNvIGFkZCBpdCBpZiB3ZSB3YW50IGl0XHJcblx0XHRpZiAoIGV4dHJhID09PSBcIm1hcmdpblwiICkge1xyXG5cdFx0XHR2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwgZXh0cmEgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBpc0JvcmRlckJveCApIHtcclxuXHRcdFx0Ly8gYm9yZGVyLWJveCBpbmNsdWRlcyBwYWRkaW5nLCBzbyByZW1vdmUgaXQgaWYgd2Ugd2FudCBjb250ZW50XHJcblx0XHRcdGlmICggZXh0cmEgPT09IFwiY29udGVudFwiICkge1xyXG5cdFx0XHRcdHZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgYm9yZGVyIG5vciBtYXJnaW4sIHNvIHJlbW92ZSBib3JkZXJcclxuXHRcdFx0aWYgKCBleHRyYSAhPT0gXCJtYXJnaW5cIiApIHtcclxuXHRcdFx0XHR2YWwgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gQXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgY29udGVudCwgc28gYWRkIHBhZGRpbmdcclxuXHRcdFx0dmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xyXG5cclxuXHRcdFx0Ly8gQXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgY29udGVudCBub3IgcGFkZGluZywgc28gYWRkIGJvcmRlclxyXG5cdFx0XHRpZiAoIGV4dHJhICE9PSBcInBhZGRpbmdcIiApIHtcclxuXHRcdFx0XHR2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHZhbDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKSB7XHJcblxyXG5cdC8vIFN0YXJ0IHdpdGggb2Zmc2V0IHByb3BlcnR5LCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZSBib3JkZXItYm94IHZhbHVlXHJcblx0dmFyIHZhbHVlSXNCb3JkZXJCb3ggPSB0cnVlLFxyXG5cdFx0dmFsID0gbmFtZSA9PT0gXCJ3aWR0aFwiID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVsZW0ub2Zmc2V0SGVpZ2h0LFxyXG5cdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXHJcblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCI7XHJcblxyXG5cdC8vIFNvbWUgbm9uLWh0bWwgZWxlbWVudHMgcmV0dXJuIHVuZGVmaW5lZCBmb3Igb2Zmc2V0V2lkdGgsIHNvIGNoZWNrIGZvciBudWxsL3VuZGVmaW5lZFxyXG5cdC8vIHN2ZyAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTI4NVxyXG5cdC8vIE1hdGhNTCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTY2OFxyXG5cdGlmICggdmFsIDw9IDAgfHwgdmFsID09IG51bGwgKSB7XHJcblx0XHQvLyBGYWxsIGJhY2sgdG8gY29tcHV0ZWQgdGhlbiB1bmNvbXB1dGVkIGNzcyBpZiBuZWNlc3NhcnlcclxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7XHJcblx0XHRpZiAoIHZhbCA8IDAgfHwgdmFsID09IG51bGwgKSB7XHJcblx0XHRcdHZhbCA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDb21wdXRlZCB1bml0IGlzIG5vdCBwaXhlbHMuIFN0b3AgaGVyZSBhbmQgcmV0dXJuLlxyXG5cdFx0aWYgKCBybnVtbm9ucHgudGVzdCh2YWwpICkge1xyXG5cdFx0XHRyZXR1cm4gdmFsO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENoZWNrIGZvciBzdHlsZSBpbiBjYXNlIGEgYnJvd3NlciB3aGljaCByZXR1cm5zIHVucmVsaWFibGUgdmFsdWVzXHJcblx0XHQvLyBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIHRoZSByZWxpYWJsZSBlbGVtLnN0eWxlXHJcblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gaXNCb3JkZXJCb3ggJiZcclxuXHRcdFx0KCBzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgdmFsID09PSBlbGVtLnN0eWxlWyBuYW1lIF0gKTtcclxuXHJcblx0XHQvLyBOb3JtYWxpemUgXCJcIiwgYXV0bywgYW5kIHByZXBhcmUgZm9yIGV4dHJhXHJcblx0XHR2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xyXG5cdH1cclxuXHJcblx0Ly8gVXNlIHRoZSBhY3RpdmUgYm94LXNpemluZyBtb2RlbCB0byBhZGQvc3VidHJhY3QgaXJyZWxldmFudCBzdHlsZXNcclxuXHRyZXR1cm4gKCB2YWwgK1xyXG5cdFx0YXVnbWVudFdpZHRoT3JIZWlnaHQoXHJcblx0XHRcdGVsZW0sXHJcblx0XHRcdG5hbWUsXHJcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcclxuXHRcdFx0dmFsdWVJc0JvcmRlckJveCxcclxuXHRcdFx0c3R5bGVzXHJcblx0XHQpXHJcblx0KSArIFwicHhcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gc2hvd0hpZGUoIGVsZW1lbnRzLCBzaG93ICkge1xyXG5cdHZhciBkaXNwbGF5LCBlbGVtLCBoaWRkZW4sXHJcblx0XHR2YWx1ZXMgPSBbXSxcclxuXHRcdGluZGV4ID0gMCxcclxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcclxuXHJcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcclxuXHRcdGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTtcclxuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFfcHJpdi5nZXQoIGVsZW0sIFwib2xkZGlzcGxheVwiICk7XHJcblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xyXG5cdFx0aWYgKCBzaG93ICkge1xyXG5cdFx0XHQvLyBSZXNldCB0aGUgaW5saW5lIGRpc3BsYXkgb2YgdGhpcyBlbGVtZW50IHRvIGxlYXJuIGlmIGl0IGlzXHJcblx0XHRcdC8vIGJlaW5nIGhpZGRlbiBieSBjYXNjYWRlZCBydWxlcyBvciBub3RcclxuXHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICYmIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xyXG5cdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFNldCBlbGVtZW50cyB3aGljaCBoYXZlIGJlZW4gb3ZlcnJpZGRlbiB3aXRoIGRpc3BsYXk6IG5vbmVcclxuXHRcdFx0Ly8gaW4gYSBzdHlsZXNoZWV0IHRvIHdoYXRldmVyIHRoZSBkZWZhdWx0IGJyb3dzZXIgc3R5bGUgaXNcclxuXHRcdFx0Ly8gZm9yIHN1Y2ggYW4gZWxlbWVudFxyXG5cdFx0XHRpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJiBpc0hpZGRlbiggZWxlbSApICkge1xyXG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFfcHJpdi5hY2Nlc3MoIGVsZW0sIFwib2xkZGlzcGxheVwiLCBkZWZhdWx0RGlzcGxheShlbGVtLm5vZGVOYW1lKSApO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRoaWRkZW4gPSBpc0hpZGRlbiggZWxlbSApO1xyXG5cclxuXHRcdFx0aWYgKCBkaXNwbGF5ICE9PSBcIm5vbmVcIiB8fCAhaGlkZGVuICkge1xyXG5cdFx0XHRcdGRhdGFfcHJpdi5zZXQoIGVsZW0sIFwib2xkZGlzcGxheVwiLCBoaWRkZW4gPyBkaXNwbGF5IDogalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgbW9zdCBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcFxyXG5cdC8vIHRvIGF2b2lkIHRoZSBjb25zdGFudCByZWZsb3dcclxuXHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xyXG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xyXG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblx0XHRpZiAoICFzaG93IHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIgfHwgZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICkge1xyXG5cdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPSBzaG93ID8gdmFsdWVzWyBpbmRleCBdIHx8IFwiXCIgOiBcIm5vbmVcIjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBlbGVtZW50cztcclxufVxyXG5cclxualF1ZXJ5LmV4dGVuZCh7XHJcblxyXG5cdC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdFxyXG5cdC8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eVxyXG5cdGNzc0hvb2tzOiB7XHJcblx0XHRvcGFjaXR5OiB7XHJcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xyXG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XHJcblxyXG5cdFx0XHRcdFx0Ly8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHlcclxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XHJcblx0XHRcdFx0XHRyZXR1cm4gcmV0ID09PSBcIlwiID8gXCIxXCIgOiByZXQ7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0Ly8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgXCJweFwiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXNcclxuXHRjc3NOdW1iZXI6IHtcclxuXHRcdFwiY29sdW1uQ291bnRcIjogdHJ1ZSxcclxuXHRcdFwiZmlsbE9wYWNpdHlcIjogdHJ1ZSxcclxuXHRcdFwiZmxleEdyb3dcIjogdHJ1ZSxcclxuXHRcdFwiZmxleFNocmlua1wiOiB0cnVlLFxyXG5cdFx0XCJmb250V2VpZ2h0XCI6IHRydWUsXHJcblx0XHRcImxpbmVIZWlnaHRcIjogdHJ1ZSxcclxuXHRcdFwib3BhY2l0eVwiOiB0cnVlLFxyXG5cdFx0XCJvcmRlclwiOiB0cnVlLFxyXG5cdFx0XCJvcnBoYW5zXCI6IHRydWUsXHJcblx0XHRcIndpZG93c1wiOiB0cnVlLFxyXG5cdFx0XCJ6SW5kZXhcIjogdHJ1ZSxcclxuXHRcdFwiem9vbVwiOiB0cnVlXHJcblx0fSxcclxuXHJcblx0Ly8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZVxyXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcclxuXHRjc3NQcm9wczoge1xyXG5cdFx0XCJmbG9hdFwiOiBcImNzc0Zsb2F0XCJcclxuXHR9LFxyXG5cclxuXHQvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZVxyXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xyXG5cclxuXHRcdC8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xyXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcclxuXHRcdHZhciByZXQsIHR5cGUsIGhvb2tzLFxyXG5cdFx0XHRvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSxcclxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xyXG5cclxuXHRcdG5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwgKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggc3R5bGUsIG9yaWdOYW1lICkgKTtcclxuXHJcblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxyXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XHJcblxyXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXHJcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWU7XHJcblxyXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXHJcblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAocmV0ID0gcnJlbE51bS5leGVjKCB2YWx1ZSApKSApIHtcclxuXHRcdFx0XHR2YWx1ZSA9ICggcmV0WzFdICsgMSApICogcmV0WzJdICsgcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApICk7XHJcblx0XHRcdFx0Ly8gRml4ZXMgYnVnICM5MjM3XHJcblx0XHRcdFx0dHlwZSA9IFwibnVtYmVyXCI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5kIE5hTiB2YWx1ZXMgYXJlbid0IHNldCAoIzcxMTYpXHJcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBJZiBhIG51bWJlciwgYWRkICdweCcgdG8gdGhlIChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXHJcblx0XHRcdGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSApIHtcclxuXHRcdFx0XHR2YWx1ZSArPSBcInB4XCI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFN1cHBvcnQ6IElFOS0xMStcclxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xyXG5cdFx0XHRpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gXCJcIiAmJiBuYW1lLmluZGV4T2YoIFwiYmFja2dyb3VuZFwiICkgPT09IDAgKSB7XHJcblx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IFwiaW5oZXJpdFwiO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVcclxuXHRcdFx0aWYgKCAhaG9va3MgfHwgIShcInNldFwiIGluIGhvb2tzKSB8fCAodmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApKSAhPT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxyXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkpICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHJldDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3RcclxuXHRcdFx0cmV0dXJuIHN0eWxlWyBuYW1lIF07XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0Y3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEsIHN0eWxlcyApIHtcclxuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXHJcblx0XHRcdG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApO1xyXG5cclxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZVxyXG5cdFx0bmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fCAoIGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBlbGVtLnN0eWxlLCBvcmlnTmFtZSApICk7XHJcblxyXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxyXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XHJcblxyXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcclxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyApIHtcclxuXHRcdFx0dmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0XHJcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENvbnZlcnQgXCJub3JtYWxcIiB0byBjb21wdXRlZCB2YWx1ZVxyXG5cdFx0aWYgKCB2YWwgPT09IFwibm9ybWFsXCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0gKSB7XHJcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xyXG5cdFx0aWYgKCBleHRyYSA9PT0gXCJcIiB8fCBleHRyYSApIHtcclxuXHRcdFx0bnVtID0gcGFyc2VGbG9hdCggdmFsICk7XHJcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBqUXVlcnkuaXNOdW1lcmljKCBudW0gKSA/IG51bSB8fCAwIDogdmFsO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHZhbDtcclxuXHR9XHJcbn0pO1xyXG5cclxualF1ZXJ5LmVhY2goWyBcImhlaWdodFwiLCBcIndpZHRoXCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XHJcblx0alF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gPSB7XHJcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XHJcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XHJcblxyXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxyXG5cdFx0XHRcdC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0XHJcblx0XHRcdFx0cmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApICkgJiYgZWxlbS5vZmZzZXRXaWR0aCA9PT0gMCA/XHJcblx0XHRcdFx0XHRqUXVlcnkuc3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApO1xyXG5cdFx0XHRcdFx0fSkgOlxyXG5cdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XHJcblx0XHRcdHZhciBzdHlsZXMgPSBleHRyYSAmJiBnZXRTdHlsZXMoIGVsZW0gKTtcclxuXHRcdFx0cmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgZXh0cmEgP1xyXG5cdFx0XHRcdGF1Z21lbnRXaWR0aE9ySGVpZ2h0KFxyXG5cdFx0XHRcdFx0ZWxlbSxcclxuXHRcdFx0XHRcdG5hbWUsXHJcblx0XHRcdFx0XHRleHRyYSxcclxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXHJcblx0XHRcdFx0XHRzdHlsZXNcclxuXHRcdFx0XHQpIDogMFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH07XHJcbn0pO1xyXG5cclxuLy8gU3VwcG9ydDogQW5kcm9pZCAyLjNcclxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpblJpZ2h0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHQsXHJcblx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xyXG5cdFx0aWYgKCBjb21wdXRlZCApIHtcclxuXHRcdFx0cmV0dXJuIGpRdWVyeS5zd2FwKCBlbGVtLCB7IFwiZGlzcGxheVwiOiBcImlubGluZS1ibG9ja1wiIH0sXHJcblx0XHRcdFx0Y3VyQ1NTLCBbIGVsZW0sIFwibWFyZ2luUmlnaHRcIiBdICk7XHJcblx0XHR9XHJcblx0fVxyXG4pO1xyXG5cclxuLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllc1xyXG5qUXVlcnkuZWFjaCh7XHJcblx0bWFyZ2luOiBcIlwiLFxyXG5cdHBhZGRpbmc6IFwiXCIsXHJcblx0Ym9yZGVyOiBcIldpZHRoXCJcclxufSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkge1xyXG5cdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7XHJcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcclxuXHRcdFx0dmFyIGkgPSAwLFxyXG5cdFx0XHRcdGV4cGFuZGVkID0ge30sXHJcblxyXG5cdFx0XHRcdC8vIEFzc3VtZXMgYSBzaW5nbGUgbnVtYmVyIGlmIG5vdCBhIHN0cmluZ1xyXG5cdFx0XHRcdHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUuc3BsaXQoXCIgXCIpIDogWyB2YWx1ZSBdO1xyXG5cclxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xyXG5cdFx0XHRcdGV4cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID1cclxuXHRcdFx0XHRcdHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGV4cGFuZGVkO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdGlmICggIXJtYXJnaW4udGVzdCggcHJlZml4ICkgKSB7XHJcblx0XHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9IHNldFBvc2l0aXZlTnVtYmVyO1xyXG5cdH1cclxufSk7XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKHtcclxuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcclxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcclxuXHRcdFx0dmFyIHN0eWxlcywgbGVuLFxyXG5cdFx0XHRcdG1hcCA9IHt9LFxyXG5cdFx0XHRcdGkgPSAwO1xyXG5cclxuXHRcdFx0aWYgKCBqUXVlcnkuaXNBcnJheSggbmFtZSApICkge1xyXG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xyXG5cdFx0XHRcdGxlbiA9IG5hbWUubGVuZ3RoO1xyXG5cclxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcclxuXHRcdFx0XHRcdG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiBtYXA7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID9cclxuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOlxyXG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcclxuXHRcdH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xyXG5cdH0sXHJcblx0c2hvdzogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTtcclxuXHR9LFxyXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzICk7XHJcblx0fSxcclxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcclxuXHRcdGlmICggdHlwZW9mIHN0YXRlID09PSBcImJvb2xlYW5cIiApIHtcclxuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRpZiAoIGlzSGlkZGVuKCB0aGlzICkgKSB7XHJcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG59KTtcclxuXHJcblxyXG5mdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7XHJcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcclxufVxyXG5qUXVlcnkuVHdlZW4gPSBUd2VlbjtcclxuXHJcblR3ZWVuLnByb3RvdHlwZSA9IHtcclxuXHRjb25zdHJ1Y3RvcjogVHdlZW4sXHJcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xyXG5cdFx0dGhpcy5lbGVtID0gZWxlbTtcclxuXHRcdHRoaXMucHJvcCA9IHByb3A7XHJcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBcInN3aW5nXCI7XHJcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcclxuXHRcdHRoaXMuZW5kID0gZW5kO1xyXG5cdFx0dGhpcy51bml0ID0gdW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKTtcclxuXHR9LFxyXG5cdGN1cjogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xyXG5cclxuXHRcdHJldHVybiBob29rcyAmJiBob29rcy5nZXQgP1xyXG5cdFx0XHRob29rcy5nZXQoIHRoaXMgKSA6XHJcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcclxuXHR9LFxyXG5cdHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7XHJcblx0XHR2YXIgZWFzZWQsXHJcblx0XHRcdGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcclxuXHJcblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcclxuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFzaW5nIF0oXHJcblx0XHRcdFx0cGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uXHJcblx0XHRcdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDtcclxuXHRcdH1cclxuXHRcdHRoaXMubm93ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDtcclxuXHJcblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xyXG5cdFx0XHR0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBob29rcyAmJiBob29rcy5zZXQgKSB7XHJcblx0XHRcdGhvb2tzLnNldCggdGhpcyApO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG59O1xyXG5cclxuVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlO1xyXG5cclxuVHdlZW4ucHJvcEhvb2tzID0ge1xyXG5cdF9kZWZhdWx0OiB7XHJcblx0XHRnZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcclxuXHRcdFx0dmFyIHJlc3VsdDtcclxuXHJcblx0XHRcdGlmICggdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiZcclxuXHRcdFx0XHQoIXR3ZWVuLmVsZW0uc3R5bGUgfHwgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwpICkge1xyXG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxyXG5cdFx0XHQvLyBhdHRlbXB0IGEgcGFyc2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzLlxyXG5cdFx0XHQvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgXCIxMHB4XCIgYXJlIHBhcnNlZCB0byBGbG9hdDtcclxuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cclxuXHRcdFx0cmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgXCJcIiApO1xyXG5cdFx0XHQvLyBFbXB0eSBzdHJpbmdzLCBudWxsLCB1bmRlZmluZWQgYW5kIFwiYXV0b1wiIGFyZSBjb252ZXJ0ZWQgdG8gMC5cclxuXHRcdFx0cmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSBcImF1dG9cIiA/IDAgOiByZXN1bHQ7XHJcblx0XHR9LFxyXG5cdFx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XHJcblx0XHRcdC8vIFVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0LlxyXG5cdFx0XHQvLyBVc2UgY3NzSG9vayBpZiBpdHMgdGhlcmUuXHJcblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXHJcblx0XHRcdGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHtcclxuXHRcdFx0XHRqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLnN0eWxlICYmICggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8IGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdICkgKSB7XHJcblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG59O1xyXG5cclxuLy8gU3VwcG9ydDogSUU5XHJcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xyXG5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7XHJcblx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XHJcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xyXG5cdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XHJcblx0XHR9XHJcblx0fVxyXG59O1xyXG5cclxualF1ZXJ5LmVhc2luZyA9IHtcclxuXHRsaW5lYXI6IGZ1bmN0aW9uKCBwICkge1xyXG5cdFx0cmV0dXJuIHA7XHJcblx0fSxcclxuXHRzd2luZzogZnVuY3Rpb24oIHAgKSB7XHJcblx0XHRyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyO1xyXG5cdH1cclxufTtcclxuXHJcbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xyXG5cclxuLy8gQmFjayBDb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnRcclxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcclxuXHJcblxyXG5cclxuXHJcbnZhclxyXG5cdGZ4Tm93LCB0aW1lcklkLFxyXG5cdHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFxyXG5cdHJmeG51bSA9IG5ldyBSZWdFeHAoIFwiXig/OihbKy1dKT18KShcIiArIHBudW0gKyBcIikoW2EteiVdKikkXCIsIFwiaVwiICksXHJcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC8sXHJcblx0YW5pbWF0aW9uUHJlZmlsdGVycyA9IFsgZGVmYXVsdFByZWZpbHRlciBdLFxyXG5cdHR3ZWVuZXJzID0ge1xyXG5cdFx0XCIqXCI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkge1xyXG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApLFxyXG5cdFx0XHRcdHRhcmdldCA9IHR3ZWVuLmN1cigpLFxyXG5cdFx0XHRcdHBhcnRzID0gcmZ4bnVtLmV4ZWMoIHZhbHVlICksXHJcblx0XHRcdFx0dW5pdCA9IHBhcnRzICYmIHBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICksXHJcblxyXG5cdFx0XHRcdC8vIFN0YXJ0aW5nIHZhbHVlIGNvbXB1dGF0aW9uIGlzIHJlcXVpcmVkIGZvciBwb3RlbnRpYWwgdW5pdCBtaXNtYXRjaGVzXHJcblx0XHRcdFx0c3RhcnQgPSAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSB8fCB1bml0ICE9PSBcInB4XCIgJiYgK3RhcmdldCApICYmXHJcblx0XHRcdFx0XHRyZnhudW0uZXhlYyggalF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgcHJvcCApICksXHJcblx0XHRcdFx0c2NhbGUgPSAxLFxyXG5cdFx0XHRcdG1heEl0ZXJhdGlvbnMgPSAyMDtcclxuXHJcblx0XHRcdGlmICggc3RhcnQgJiYgc3RhcnRbIDMgXSAhPT0gdW5pdCApIHtcclxuXHRcdFx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXHJcblx0XHRcdFx0dW5pdCA9IHVuaXQgfHwgc3RhcnRbIDMgXTtcclxuXHJcblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvblxyXG5cdFx0XHRcdHBhcnRzID0gcGFydHMgfHwgW107XHJcblxyXG5cdFx0XHRcdC8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZyb20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50XHJcblx0XHRcdFx0c3RhcnQgPSArdGFyZ2V0IHx8IDE7XHJcblxyXG5cdFx0XHRcdGRvIHtcclxuXHRcdFx0XHRcdC8vIElmIHByZXZpb3VzIGl0ZXJhdGlvbiB6ZXJvZWQgb3V0LCBkb3VibGUgdW50aWwgd2UgZ2V0ICpzb21ldGhpbmcqLlxyXG5cdFx0XHRcdFx0Ly8gVXNlIHN0cmluZyBmb3IgZG91Ymxpbmcgc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHNlZSBzY2FsZSBhcyB1bmNoYW5nZWQgYmVsb3dcclxuXHRcdFx0XHRcdHNjYWxlID0gc2NhbGUgfHwgXCIuNVwiO1xyXG5cclxuXHRcdFx0XHRcdC8vIEFkanVzdCBhbmQgYXBwbHlcclxuXHRcdFx0XHRcdHN0YXJ0ID0gc3RhcnQgLyBzY2FsZTtcclxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgcHJvcCwgc3RhcnQgKyB1bml0ICk7XHJcblxyXG5cdFx0XHRcdC8vIFVwZGF0ZSBzY2FsZSwgdG9sZXJhdGluZyB6ZXJvIG9yIE5hTiBmcm9tIHR3ZWVuLmN1cigpLFxyXG5cdFx0XHRcdC8vIGJyZWFrIHRoZSBsb29wIGlmIHNjYWxlIGlzIHVuY2hhbmdlZCBvciBwZXJmZWN0LCBvciBpZiB3ZSd2ZSBqdXN0IGhhZCBlbm91Z2hcclxuXHRcdFx0XHR9IHdoaWxlICggc2NhbGUgIT09IChzY2FsZSA9IHR3ZWVuLmN1cigpIC8gdGFyZ2V0KSAmJiBzY2FsZSAhPT0gMSAmJiAtLW1heEl0ZXJhdGlvbnMgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gVXBkYXRlIHR3ZWVuIHByb3BlcnRpZXNcclxuXHRcdFx0aWYgKCBwYXJ0cyApIHtcclxuXHRcdFx0XHRzdGFydCA9IHR3ZWVuLnN0YXJ0ID0gK3N0YXJ0IHx8ICt0YXJnZXQgfHwgMDtcclxuXHRcdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcclxuXHRcdFx0XHQvLyBJZiBhICs9Ly09IHRva2VuIHdhcyBwcm92aWRlZCwgd2UncmUgZG9pbmcgYSByZWxhdGl2ZSBhbmltYXRpb25cclxuXHRcdFx0XHR0d2Vlbi5lbmQgPSBwYXJ0c1sgMSBdID9cclxuXHRcdFx0XHRcdHN0YXJ0ICsgKCBwYXJ0c1sgMSBdICsgMSApICogcGFydHNbIDIgXSA6XHJcblx0XHRcdFx0XHQrcGFydHNbIDIgXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHR3ZWVuO1xyXG5cdFx0fSBdXHJcblx0fTtcclxuXHJcbi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHlcclxuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XHJcblx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHRcdGZ4Tm93ID0gdW5kZWZpbmVkO1xyXG5cdH0pO1xyXG5cdHJldHVybiAoIGZ4Tm93ID0galF1ZXJ5Lm5vdygpICk7XHJcbn1cclxuXHJcbi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uXHJcbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XHJcblx0dmFyIHdoaWNoLFxyXG5cdFx0aSA9IDAsXHJcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XHJcblxyXG5cdC8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcyxcclxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxyXG5cdGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwO1xyXG5cdGZvciAoIDsgaSA8IDQgOyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7XHJcblx0XHR3aGljaCA9IGNzc0V4cGFuZFsgaSBdO1xyXG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XHJcblx0fVxyXG5cclxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcclxuXHRcdGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gYXR0cnM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkge1xyXG5cdHZhciB0d2VlbixcclxuXHRcdGNvbGxlY3Rpb24gPSAoIHR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIHR3ZWVuZXJzWyBcIipcIiBdICksXHJcblx0XHRpbmRleCA9IDAsXHJcblx0XHRsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcclxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xyXG5cdFx0aWYgKCAodHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSkgKSB7XHJcblxyXG5cdFx0XHQvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eVxyXG5cdFx0XHRyZXR1cm4gdHdlZW47XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHtcclxuXHQvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXHJcblx0dmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIHR3ZWVuLCBob29rcywgb2xkZmlyZSwgZGlzcGxheSwgY2hlY2tEaXNwbGF5LFxyXG5cdFx0YW5pbSA9IHRoaXMsXHJcblx0XHRvcmlnID0ge30sXHJcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXHJcblx0XHRoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuKCBlbGVtICksXHJcblx0XHRkYXRhU2hvdyA9IGRhdGFfcHJpdi5nZXQoIGVsZW0sIFwiZnhzaG93XCIgKTtcclxuXHJcblx0Ly8gSGFuZGxlIHF1ZXVlOiBmYWxzZSBwcm9taXNlc1xyXG5cdGlmICggIW9wdHMucXVldWUgKSB7XHJcblx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgXCJmeFwiICk7XHJcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XHJcblx0XHRcdGhvb2tzLnVucXVldWVkID0gMDtcclxuXHRcdFx0b2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7XHJcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRpZiAoICFob29rcy51bnF1ZXVlZCApIHtcclxuXHRcdFx0XHRcdG9sZGZpcmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0XHRob29rcy51bnF1ZXVlZCsrO1xyXG5cclxuXHRcdGFuaW0uYWx3YXlzKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xyXG5cdFx0XHRhbmltLmFsd2F5cyhmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xyXG5cdFx0XHRcdGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgXCJmeFwiICkubGVuZ3RoICkge1xyXG5cdFx0XHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8vIEhlaWdodC93aWR0aCBvdmVyZmxvdyBwYXNzXHJcblx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCJoZWlnaHRcIiBpbiBwcm9wcyB8fCBcIndpZHRoXCIgaW4gcHJvcHMgKSApIHtcclxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcgc25lYWtzIG91dFxyXG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRTktMTAgZG8gbm90XHJcblx0XHQvLyBjaGFuZ2UgdGhlIG92ZXJmbG93IGF0dHJpYnV0ZSB3aGVuIG92ZXJmbG93WCBhbmRcclxuXHRcdC8vIG92ZXJmbG93WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlXHJcblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcclxuXHJcblx0XHQvLyBTZXQgZGlzcGxheSBwcm9wZXJ0eSB0byBpbmxpbmUtYmxvY2sgZm9yIGhlaWdodC93aWR0aFxyXG5cdFx0Ly8gYW5pbWF0aW9ucyBvbiBpbmxpbmUgZWxlbWVudHMgdGhhdCBhcmUgaGF2aW5nIHdpZHRoL2hlaWdodCBhbmltYXRlZFxyXG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XHJcblxyXG5cdFx0Ly8gVGVzdCBkZWZhdWx0IGRpc3BsYXkgaWYgZGlzcGxheSBpcyBjdXJyZW50bHkgXCJub25lXCJcclxuXHRcdGNoZWNrRGlzcGxheSA9IGRpc3BsYXkgPT09IFwibm9uZVwiID9cclxuXHRcdFx0ZGF0YV9wcml2LmdldCggZWxlbSwgXCJvbGRkaXNwbGF5XCIgKSB8fCBkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApIDogZGlzcGxheTtcclxuXHJcblx0XHRpZiAoIGNoZWNrRGlzcGxheSA9PT0gXCJpbmxpbmVcIiAmJiBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XHJcblx0XHRcdHN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKCBvcHRzLm92ZXJmbG93ICkge1xyXG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xyXG5cdFx0YW5pbS5hbHdheXMoZnVuY3Rpb24oKSB7XHJcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xyXG5cdFx0XHRzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07XHJcblx0XHRcdHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Ly8gc2hvdy9oaWRlIHBhc3NcclxuXHRmb3IgKCBwcm9wIGluIHByb3BzICkge1xyXG5cdFx0dmFsdWUgPSBwcm9wc1sgcHJvcCBdO1xyXG5cdFx0aWYgKCByZnh0eXBlcy5leGVjKCB2YWx1ZSApICkge1xyXG5cdFx0XHRkZWxldGUgcHJvcHNbIHByb3AgXTtcclxuXHRcdFx0dG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSBcInRvZ2dsZVwiO1xyXG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcclxuXHJcblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgZGF0YVNob3cgbGVmdCBvdmVyIGZyb20gYSBzdG9wcGVkIGhpZGUgb3Igc2hvdyBhbmQgd2UgYXJlIGdvaW5nIHRvIHByb2NlZWQgd2l0aCBzaG93LCB3ZSBzaG91bGQgcHJldGVuZCB0byBiZSBoaWRkZW5cclxuXHRcdFx0XHRpZiAoIHZhbHVlID09PSBcInNob3dcIiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcclxuXHJcblx0XHQvLyBBbnkgbm9uLWZ4IHZhbHVlIHN0b3BzIHVzIGZyb20gcmVzdG9yaW5nIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRkaXNwbGF5ID0gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKCAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHtcclxuXHRcdGlmICggZGF0YVNob3cgKSB7XHJcblx0XHRcdGlmICggXCJoaWRkZW5cIiBpbiBkYXRhU2hvdyApIHtcclxuXHRcdFx0XHRoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRhdGFTaG93ID0gZGF0YV9wcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwge30gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBTdG9yZSBzdGF0ZSBpZiBpdHMgdG9nZ2xlIC0gZW5hYmxlcyAuc3RvcCgpLnRvZ2dsZSgpIHRvIFwicmV2ZXJzZVwiXHJcblx0XHRpZiAoIHRvZ2dsZSApIHtcclxuXHRcdFx0ZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjtcclxuXHRcdH1cclxuXHRcdGlmICggaGlkZGVuICkge1xyXG5cdFx0XHRqUXVlcnkoIGVsZW0gKS5zaG93KCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRhbmltLmRvbmUoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0alF1ZXJ5KCBlbGVtICkuaGlkZSgpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdGFuaW0uZG9uZShmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIHByb3A7XHJcblxyXG5cdFx0XHRkYXRhX3ByaXYucmVtb3ZlKCBlbGVtLCBcImZ4c2hvd1wiICk7XHJcblx0XHRcdGZvciAoIHByb3AgaW4gb3JpZyApIHtcclxuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdGZvciAoIHByb3AgaW4gb3JpZyApIHtcclxuXHRcdFx0dHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcclxuXHJcblx0XHRcdGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkge1xyXG5cdFx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSB0d2Vlbi5zdGFydDtcclxuXHRcdFx0XHRpZiAoIGhpZGRlbiApIHtcclxuXHRcdFx0XHRcdHR3ZWVuLmVuZCA9IHR3ZWVuLnN0YXJ0O1xyXG5cdFx0XHRcdFx0dHdlZW4uc3RhcnQgPSBwcm9wID09PSBcIndpZHRoXCIgfHwgcHJvcCA9PT0gXCJoZWlnaHRcIiA/IDEgOiAwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHQvLyBJZiB0aGlzIGlzIGEgbm9vcCBsaWtlIC5oaWRlKCkuaGlkZSgpLCByZXN0b3JlIGFuIG92ZXJ3cml0dGVuIGRpc3BsYXkgdmFsdWVcclxuXHR9IGVsc2UgaWYgKCAoZGlzcGxheSA9PT0gXCJub25lXCIgPyBkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApIDogZGlzcGxheSkgPT09IFwiaW5saW5lXCIgKSB7XHJcblx0XHRzdHlsZS5kaXNwbGF5ID0gZGlzcGxheTtcclxuXHR9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkge1xyXG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XHJcblxyXG5cdC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzc1xyXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xyXG5cdFx0bmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIGluZGV4ICk7XHJcblx0XHRlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07XHJcblx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdO1xyXG5cdFx0aWYgKCBqUXVlcnkuaXNBcnJheSggdmFsdWUgKSApIHtcclxuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcclxuXHRcdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBpbmRleCAhPT0gbmFtZSApIHtcclxuXHRcdFx0cHJvcHNbIG5hbWUgXSA9IHZhbHVlO1xyXG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XHJcblx0XHR9XHJcblxyXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcclxuXHRcdGlmICggaG9va3MgJiYgXCJleHBhbmRcIiBpbiBob29rcyApIHtcclxuXHRcdFx0dmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7XHJcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xyXG5cclxuXHRcdFx0Ly8gTm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBrZXlzLlxyXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXHJcblx0XHRcdGZvciAoIGluZGV4IGluIHZhbHVlICkge1xyXG5cdFx0XHRcdGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHtcclxuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XHJcblx0XHRcdFx0XHRzcGVjaWFsRWFzaW5nWyBpbmRleCBdID0gZWFzaW5nO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0c3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gQW5pbWF0aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25zICkge1xyXG5cdHZhciByZXN1bHQsXHJcblx0XHRzdG9wcGVkLFxyXG5cdFx0aW5kZXggPSAwLFxyXG5cdFx0bGVuZ3RoID0gYW5pbWF0aW9uUHJlZmlsdGVycy5sZW5ndGgsXHJcblx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLmFsd2F5cyggZnVuY3Rpb24oKSB7XHJcblx0XHRcdC8vIERvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3RvclxyXG5cdFx0XHRkZWxldGUgdGljay5lbGVtO1xyXG5cdFx0fSksXHJcblx0XHR0aWNrID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdGlmICggc3RvcHBlZCApIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcclxuXHRcdFx0XHRyZW1haW5pbmcgPSBNYXRoLm1heCggMCwgYW5pbWF0aW9uLnN0YXJ0VGltZSArIGFuaW1hdGlvbi5kdXJhdGlvbiAtIGN1cnJlbnRUaW1lICksXHJcblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjNcclxuXHRcdFx0XHQvLyBBcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgYDEgLSAoIDAuNSB8fCAwIClgICgjMTI0OTcpXHJcblx0XHRcdFx0dGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLFxyXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcclxuXHRcdFx0XHRpbmRleCA9IDAsXHJcblx0XHRcdFx0bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7XHJcblxyXG5cdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHtcclxuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0pO1xyXG5cclxuXHRcdFx0aWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7XHJcblx0XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApO1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2Uoe1xyXG5cdFx0XHRlbGVtOiBlbGVtLFxyXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcclxuXHRcdFx0b3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgeyBzcGVjaWFsRWFzaW5nOiB7fSB9LCBvcHRpb25zICksXHJcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcclxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxyXG5cdFx0XHRzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXHJcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxyXG5cdFx0XHR0d2VlbnM6IFtdLFxyXG5cdFx0XHRjcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHtcclxuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXHJcblx0XHRcdFx0XHRcdGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTtcclxuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XHJcblx0XHRcdFx0cmV0dXJuIHR3ZWVuO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcclxuXHRcdFx0XHR2YXIgaW5kZXggPSAwLFxyXG5cdFx0XHRcdFx0Ly8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zXHJcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnRcclxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XHJcblx0XHRcdFx0aWYgKCBzdG9wcGVkICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHN0b3BwZWQgPSB0cnVlO1xyXG5cdFx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkge1xyXG5cdFx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0XHJcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xyXG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fVxyXG5cdFx0fSksXHJcblx0XHRwcm9wcyA9IGFuaW1hdGlvbi5wcm9wcztcclxuXHJcblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcclxuXHJcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7XHJcblx0XHRyZXN1bHQgPSBhbmltYXRpb25QcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XHJcblx0XHRpZiAoIHJlc3VsdCApIHtcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7XHJcblxyXG5cdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7XHJcblx0XHRhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTtcclxuXHR9XHJcblxyXG5cdGpRdWVyeS5meC50aW1lcihcclxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcclxuXHRcdFx0ZWxlbTogZWxlbSxcclxuXHRcdFx0YW5pbTogYW5pbWF0aW9uLFxyXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcclxuXHRcdH0pXHJcblx0KTtcclxuXHJcblx0Ly8gYXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcclxuXHRyZXR1cm4gYW5pbWF0aW9uLnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXHJcblx0XHQuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKVxyXG5cdFx0LmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKVxyXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XHJcbn1cclxuXHJcbmpRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHtcclxuXHJcblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcclxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHByb3BzICkgKSB7XHJcblx0XHRcdGNhbGxiYWNrID0gcHJvcHM7XHJcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cHJvcHMgPSBwcm9wcy5zcGxpdChcIiBcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIHByb3AsXHJcblx0XHRcdGluZGV4ID0gMCxcclxuXHRcdFx0bGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xyXG5cclxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkge1xyXG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XHJcblx0XHRcdHR3ZWVuZXJzWyBwcm9wIF0gPSB0d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xyXG5cdFx0XHR0d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XHJcblx0XHRpZiAoIHByZXBlbmQgKSB7XHJcblx0XHRcdGFuaW1hdGlvblByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGFuaW1hdGlvblByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcclxuXHRcdH1cclxuXHR9XHJcbn0pO1xyXG5cclxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xyXG5cdHZhciBvcHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09IFwib2JqZWN0XCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHtcclxuXHRcdGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8XHJcblx0XHRcdGpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxyXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxyXG5cdFx0ZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFqUXVlcnkuaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXHJcblx0fTtcclxuXHJcblx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4Lm9mZiA/IDAgOiB0eXBlb2Ygb3B0LmR1cmF0aW9uID09PSBcIm51bWJlclwiID8gb3B0LmR1cmF0aW9uIDpcclxuXHRcdG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzID8galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF0gOiBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0O1xyXG5cclxuXHQvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiBcImZ4XCJcclxuXHRpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHtcclxuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcclxuXHR9XHJcblxyXG5cdC8vIFF1ZXVlaW5nXHJcblx0b3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTtcclxuXHJcblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XHJcblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XHJcblx0XHRcdG9wdC5vbGQuY2FsbCggdGhpcyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggb3B0LnF1ZXVlICkge1xyXG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0cmV0dXJuIG9wdDtcclxufTtcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoe1xyXG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcclxuXHJcblx0XHQvLyBTaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDBcclxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW4gKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXHJcblxyXG5cdFx0XHQvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWRcclxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xyXG5cdH0sXHJcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xyXG5cdFx0dmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSxcclxuXHRcdFx0b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLFxyXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XHJcblx0XHRcdFx0dmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApO1xyXG5cclxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcclxuXHRcdFx0XHRpZiAoIGVtcHR5IHx8IGRhdGFfcHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcclxuXHRcdFx0XHRcdGFuaW0uc3RvcCggdHJ1ZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHRcdFx0ZG9BbmltYXRpb24uZmluaXNoID0gZG9BbmltYXRpb247XHJcblxyXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xyXG5cdFx0XHR0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOlxyXG5cdFx0XHR0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7XHJcblx0fSxcclxuXHRzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0VuZCApIHtcclxuXHRcdHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7XHJcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcclxuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XHJcblx0XHRcdHN0b3AoIGdvdG9FbmQgKTtcclxuXHRcdH07XHJcblxyXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XHJcblx0XHRcdGNsZWFyUXVldWUgPSB0eXBlO1xyXG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBjbGVhclF1ZXVlICYmIHR5cGUgIT09IGZhbHNlICkge1xyXG5cdFx0XHR0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgZGVxdWV1ZSA9IHRydWUsXHJcblx0XHRcdFx0aW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArIFwicXVldWVIb29rc1wiLFxyXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXHJcblx0XHRcdFx0ZGF0YSA9IGRhdGFfcHJpdi5nZXQoIHRoaXMgKTtcclxuXHJcblx0XHRcdGlmICggaW5kZXggKSB7XHJcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcclxuXHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRmb3IgKCBpbmRleCBpbiBkYXRhICkge1xyXG5cdFx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7XHJcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcclxuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmICh0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlKSApIHtcclxuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTtcclxuXHRcdFx0XHRcdGRlcXVldWUgPSBmYWxzZTtcclxuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLlxyXG5cdFx0XHQvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoXHJcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cclxuXHRcdFx0aWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkge1xyXG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH0sXHJcblx0ZmluaXNoOiBmdW5jdGlvbiggdHlwZSApIHtcclxuXHRcdGlmICggdHlwZSAhPT0gZmFsc2UgKSB7XHJcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBpbmRleCxcclxuXHRcdFx0XHRkYXRhID0gZGF0YV9wcml2LmdldCggdGhpcyApLFxyXG5cdFx0XHRcdHF1ZXVlID0gZGF0YVsgdHlwZSArIFwicXVldWVcIiBdLFxyXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXHJcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcclxuXHRcdFx0XHRsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7XHJcblxyXG5cdFx0XHQvLyBFbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJpdmF0ZSBkYXRhXHJcblx0XHRcdGRhdGEuZmluaXNoID0gdHJ1ZTtcclxuXHJcblx0XHRcdC8vIEVtcHR5IHRoZSBxdWV1ZSBmaXJzdFxyXG5cdFx0XHRqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7XHJcblxyXG5cdFx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnN0b3AgKSB7XHJcblx0XHRcdFx0aG9va3Muc3RvcC5jYWxsKCB0aGlzLCB0cnVlICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIExvb2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtXHJcblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XHJcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7XHJcblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7XHJcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9sZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW1cclxuXHRcdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcclxuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcclxuXHRcdFx0XHRcdHF1ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxsKCB0aGlzICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZ1xyXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XHJcblx0XHR9KTtcclxuXHR9XHJcbn0pO1xyXG5cclxualF1ZXJ5LmVhY2goWyBcInRvZ2dsZVwiLCBcInNob3dcIiwgXCJoaWRlXCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XHJcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XHJcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XHJcblx0XHRyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09IFwiYm9vbGVhblwiID9cclxuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcclxuXHRcdFx0dGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xyXG5cdH07XHJcbn0pO1xyXG5cclxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xyXG5qUXVlcnkuZWFjaCh7XHJcblx0c2xpZGVEb3duOiBnZW5GeChcInNob3dcIiksXHJcblx0c2xpZGVVcDogZ2VuRngoXCJoaWRlXCIpLFxyXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeChcInRvZ2dsZVwiKSxcclxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcclxuXHRmYWRlT3V0OiB7IG9wYWNpdHk6IFwiaGlkZVwiIH0sXHJcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cclxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xyXG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xyXG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XHJcblx0fTtcclxufSk7XHJcblxyXG5qUXVlcnkudGltZXJzID0gW107XHJcbmpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7XHJcblx0dmFyIHRpbWVyLFxyXG5cdFx0aSA9IDAsXHJcblx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzO1xyXG5cclxuXHRmeE5vdyA9IGpRdWVyeS5ub3coKTtcclxuXHJcblx0Zm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkge1xyXG5cdFx0dGltZXIgPSB0aW1lcnNbIGkgXTtcclxuXHRcdC8vIENoZWNrcyB0aGUgdGltZXIgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVtb3ZlZFxyXG5cdFx0aWYgKCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7XHJcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKCAhdGltZXJzLmxlbmd0aCApIHtcclxuXHRcdGpRdWVyeS5meC5zdG9wKCk7XHJcblx0fVxyXG5cdGZ4Tm93ID0gdW5kZWZpbmVkO1xyXG59O1xyXG5cclxualF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkge1xyXG5cdGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKTtcclxuXHRpZiAoIHRpbWVyKCkgKSB7XHJcblx0XHRqUXVlcnkuZnguc3RhcnQoKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0alF1ZXJ5LnRpbWVycy5wb3AoKTtcclxuXHR9XHJcbn07XHJcblxyXG5qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMztcclxuXHJcbmpRdWVyeS5meC5zdGFydCA9IGZ1bmN0aW9uKCkge1xyXG5cdGlmICggIXRpbWVySWQgKSB7XHJcblx0XHR0aW1lcklkID0gc2V0SW50ZXJ2YWwoIGpRdWVyeS5meC50aWNrLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTtcclxuXHR9XHJcbn07XHJcblxyXG5qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkge1xyXG5cdGNsZWFySW50ZXJ2YWwoIHRpbWVySWQgKTtcclxuXHR0aW1lcklkID0gbnVsbDtcclxufTtcclxuXHJcbmpRdWVyeS5meC5zcGVlZHMgPSB7XHJcblx0c2xvdzogNjAwLFxyXG5cdGZhc3Q6IDIwMCxcclxuXHQvLyBEZWZhdWx0IHNwZWVkXHJcblx0X2RlZmF1bHQ6IDQwMFxyXG59O1xyXG5cclxuXHJcbi8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi5cclxuLy8gaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5L1xyXG5qUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHtcclxuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xyXG5cdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcclxuXHJcblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcclxuXHRcdHZhciB0aW1lb3V0ID0gc2V0VGltZW91dCggbmV4dCwgdGltZSApO1xyXG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRjbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcclxuXHRcdH07XHJcblx0fSk7XHJcbn07XHJcblxyXG5cclxuKGZ1bmN0aW9uKCkge1xyXG5cdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApLFxyXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxyXG5cdFx0b3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9wdGlvblwiICkgKTtcclxuXHJcblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcclxuXHJcblx0Ly8gU3VwcG9ydDogaU9TPD01LjEsIEFuZHJvaWQ8PTQuMitcclxuXHQvLyBEZWZhdWx0IHZhbHVlIGZvciBhIGNoZWNrYm94IHNob3VsZCBiZSBcIm9uXCJcclxuXHRzdXBwb3J0LmNoZWNrT24gPSBpbnB1dC52YWx1ZSAhPT0gXCJcIjtcclxuXHJcblx0Ly8gU3VwcG9ydDogSUU8PTExK1xyXG5cdC8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXggdG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgc2VsZWN0XHJcblx0c3VwcG9ydC5vcHRTZWxlY3RlZCA9IG9wdC5zZWxlY3RlZDtcclxuXHJcblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw9Mi4zXHJcblx0Ly8gT3B0aW9ucyBpbnNpZGUgZGlzYWJsZWQgc2VsZWN0cyBhcmUgaW5jb3JyZWN0bHkgbWFya2VkIGFzIGRpc2FibGVkXHJcblx0c2VsZWN0LmRpc2FibGVkID0gdHJ1ZTtcclxuXHRzdXBwb3J0Lm9wdERpc2FibGVkID0gIW9wdC5kaXNhYmxlZDtcclxuXHJcblx0Ly8gU3VwcG9ydDogSUU8PTExK1xyXG5cdC8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvXHJcblx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcclxuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xyXG5cdGlucHV0LnR5cGUgPSBcInJhZGlvXCI7XHJcblx0c3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09IFwidFwiO1xyXG59KSgpO1xyXG5cclxuXHJcbnZhciBub2RlSG9vaywgYm9vbEhvb2ssXHJcblx0YXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGU7XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKHtcclxuXHRhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XHJcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XHJcblx0fSxcclxuXHJcblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59KTtcclxuXHJcbmpRdWVyeS5leHRlbmQoe1xyXG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcclxuXHRcdHZhciBob29rcywgcmV0LFxyXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XHJcblxyXG5cdFx0Ly8gZG9uJ3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xyXG5cdFx0aWYgKCAhZWxlbSB8fCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXHJcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gc3RydW5kZWZpbmVkICkge1xyXG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQWxsIGF0dHJpYnV0ZXMgYXJlIGxvd2VyY2FzZVxyXG5cdFx0Ly8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZFxyXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XHJcblx0XHRcdG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdIHx8XHJcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogbm9kZUhvb2sgKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XHJcblxyXG5cdFx0XHRpZiAoIHZhbHVlID09PSBudWxsICkge1xyXG5cdFx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XHJcblxyXG5cdFx0XHR9IGVsc2UgaWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkpICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHJldDtcclxuXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgXCJcIiApO1xyXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdH0gZWxzZSBpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApKSAhPT0gbnVsbCApIHtcclxuXHRcdFx0cmV0dXJuIHJldDtcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXQgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7XHJcblxyXG5cdFx0XHQvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZFxyXG5cdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgP1xyXG5cdFx0XHRcdHVuZGVmaW5lZCA6XHJcblx0XHRcdFx0cmV0O1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcclxuXHRcdHZhciBuYW1lLCBwcm9wTmFtZSxcclxuXHRcdFx0aSA9IDAsXHJcblx0XHRcdGF0dHJOYW1lcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKCBybm90d2hpdGUgKTtcclxuXHJcblx0XHRpZiAoIGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xyXG5cdFx0XHR3aGlsZSAoIChuYW1lID0gYXR0ck5hbWVzW2krK10pICkge1xyXG5cdFx0XHRcdHByb3BOYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lO1xyXG5cclxuXHRcdFx0XHQvLyBCb29sZWFuIGF0dHJpYnV0ZXMgZ2V0IHNwZWNpYWwgdHJlYXRtZW50ICgjMTA4NzApXHJcblx0XHRcdFx0aWYgKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSApIHtcclxuXHRcdFx0XHRcdC8vIFNldCBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHRvIGZhbHNlXHJcblx0XHRcdFx0XHRlbGVtWyBwcm9wTmFtZSBdID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0YXR0ckhvb2tzOiB7XHJcblx0XHR0eXBlOiB7XHJcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xyXG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXHJcblx0XHRcdFx0XHRqUXVlcnkubm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xyXG5cdFx0XHRcdFx0dmFyIHZhbCA9IGVsZW0udmFsdWU7XHJcblx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIHZhbHVlICk7XHJcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcclxuXHRcdFx0XHRcdFx0ZWxlbS52YWx1ZSA9IHZhbDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn0pO1xyXG5cclxuLy8gSG9va3MgZm9yIGJvb2xlYW4gYXR0cmlidXRlc1xyXG5ib29sSG9vayA9IHtcclxuXHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHtcclxuXHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkge1xyXG5cdFx0XHQvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlXHJcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG5hbWU7XHJcblx0fVxyXG59O1xyXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XHJcblx0dmFyIGdldHRlciA9IGF0dHJIYW5kbGVbIG5hbWUgXSB8fCBqUXVlcnkuZmluZC5hdHRyO1xyXG5cclxuXHRhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XHJcblx0XHR2YXIgcmV0LCBoYW5kbGU7XHJcblx0XHRpZiAoICFpc1hNTCApIHtcclxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxyXG5cdFx0XHRoYW5kbGUgPSBhdHRySGFuZGxlWyBuYW1lIF07XHJcblx0XHRcdGF0dHJIYW5kbGVbIG5hbWUgXSA9IHJldDtcclxuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xyXG5cdFx0XHRcdG5hbWUudG9Mb3dlckNhc2UoKSA6XHJcblx0XHRcdFx0bnVsbDtcclxuXHRcdFx0YXR0ckhhbmRsZVsgbmFtZSBdID0gaGFuZGxlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJldDtcclxuXHR9O1xyXG59KTtcclxuXHJcblxyXG5cclxuXHJcbnZhciByZm9jdXNhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaTtcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoe1xyXG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcclxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcclxuXHR9LFxyXG5cclxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcclxuXHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTtcclxuXHRcdH0pO1xyXG5cdH1cclxufSk7XHJcblxyXG5qUXVlcnkuZXh0ZW5kKHtcclxuXHRwcm9wRml4OiB7XHJcblx0XHRcImZvclwiOiBcImh0bWxGb3JcIixcclxuXHRcdFwiY2xhc3NcIjogXCJjbGFzc05hbWVcIlxyXG5cdH0sXHJcblxyXG5cdHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcclxuXHRcdHZhciByZXQsIGhvb2tzLCBub3R4bWwsXHJcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcclxuXHJcblx0XHQvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXHJcblx0XHRpZiAoICFlbGVtIHx8IG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0bm90eG1sID0gblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApO1xyXG5cclxuXHRcdGlmICggbm90eG1sICkge1xyXG5cdFx0XHQvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzXHJcblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XHJcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0cmV0dXJuIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSkgIT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdFx0cmV0IDpcclxuXHRcdFx0XHQoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XHJcblxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApKSAhPT0gbnVsbCA/XHJcblx0XHRcdFx0cmV0IDpcclxuXHRcdFx0XHRlbGVtWyBuYW1lIF07XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0cHJvcEhvb2tzOiB7XHJcblx0XHR0YWJJbmRleDoge1xyXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRcdHJldHVybiBlbGVtLmhhc0F0dHJpYnV0ZSggXCJ0YWJpbmRleFwiICkgfHwgcmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwgZWxlbS5ocmVmID9cclxuXHRcdFx0XHRcdGVsZW0udGFiSW5kZXggOlxyXG5cdFx0XHRcdFx0LTE7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn0pO1xyXG5cclxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcclxuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xyXG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcclxuXHRcdFx0aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7XHJcblx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHR9O1xyXG59XHJcblxyXG5qUXVlcnkuZWFjaChbXHJcblx0XCJ0YWJJbmRleFwiLFxyXG5cdFwicmVhZE9ubHlcIixcclxuXHRcIm1heExlbmd0aFwiLFxyXG5cdFwiY2VsbFNwYWNpbmdcIixcclxuXHRcImNlbGxQYWRkaW5nXCIsXHJcblx0XCJyb3dTcGFuXCIsXHJcblx0XCJjb2xTcGFuXCIsXHJcblx0XCJ1c2VNYXBcIixcclxuXHRcImZyYW1lQm9yZGVyXCIsXHJcblx0XCJjb250ZW50RWRpdGFibGVcIlxyXG5dLCBmdW5jdGlvbigpIHtcclxuXHRqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzO1xyXG59KTtcclxuXHJcblxyXG5cclxuXHJcbnZhciByY2xhc3MgPSAvW1xcdFxcclxcblxcZl0vZztcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoe1xyXG5cdGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XHJcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcclxuXHRcdFx0cHJvY2VlZCA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZSxcclxuXHRcdFx0aSA9IDAsXHJcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoO1xyXG5cclxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGogKSB7XHJcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIHRoaXMuY2xhc3NOYW1lICkgKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBwcm9jZWVkICkge1xyXG5cdFx0XHQvLyBUaGUgZGlzanVuY3Rpb24gaGVyZSBpcyBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIHJlbW92ZUNsYXNzKVxyXG5cdFx0XHRjbGFzc2VzID0gKCB2YWx1ZSB8fCBcIlwiICkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdO1xyXG5cclxuXHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XHJcblx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXTtcclxuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggZWxlbS5jbGFzc05hbWUgP1xyXG5cdFx0XHRcdFx0KCBcIiBcIiArIGVsZW0uY2xhc3NOYW1lICsgXCIgXCIgKS5yZXBsYWNlKCByY2xhc3MsIFwiIFwiICkgOlxyXG5cdFx0XHRcdFx0XCIgXCJcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRpZiAoIGN1ciApIHtcclxuXHRcdFx0XHRcdGogPSAwO1xyXG5cdFx0XHRcdFx0d2hpbGUgKCAoY2xhenogPSBjbGFzc2VzW2orK10pICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA8IDAgKSB7XHJcblx0XHRcdFx0XHRcdFx0Y3VyICs9IGNsYXp6ICsgXCIgXCI7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBvbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxyXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IGpRdWVyeS50cmltKCBjdXIgKTtcclxuXHRcdFx0XHRcdGlmICggZWxlbS5jbGFzc05hbWUgIT09IGZpbmFsVmFsdWUgKSB7XHJcblx0XHRcdFx0XHRcdGVsZW0uY2xhc3NOYW1lID0gZmluYWxWYWx1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9LFxyXG5cclxuXHRyZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xyXG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY2xhenosIGosIGZpbmFsVmFsdWUsXHJcblx0XHRcdHByb2NlZWQgPSBhcmd1bWVudHMubGVuZ3RoID09PSAwIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZSxcclxuXHRcdFx0aSA9IDAsXHJcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoO1xyXG5cclxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGogKSB7XHJcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIHRoaXMuY2xhc3NOYW1lICkgKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRpZiAoIHByb2NlZWQgKSB7XHJcblx0XHRcdGNsYXNzZXMgPSAoIHZhbHVlIHx8IFwiXCIgKS5tYXRjaCggcm5vdHdoaXRlICkgfHwgW107XHJcblxyXG5cdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcclxuXHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdO1xyXG5cdFx0XHRcdC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpXHJcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIGVsZW0uY2xhc3NOYW1lID9cclxuXHRcdFx0XHRcdCggXCIgXCIgKyBlbGVtLmNsYXNzTmFtZSArIFwiIFwiICkucmVwbGFjZSggcmNsYXNzLCBcIiBcIiApIDpcclxuXHRcdFx0XHRcdFwiXCJcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRpZiAoIGN1ciApIHtcclxuXHRcdFx0XHRcdGogPSAwO1xyXG5cdFx0XHRcdFx0d2hpbGUgKCAoY2xhenogPSBjbGFzc2VzW2orK10pICkge1xyXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzXHJcblx0XHRcdFx0XHRcdHdoaWxlICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhenogKyBcIiBcIiApID49IDAgKSB7XHJcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhenogKyBcIiBcIiwgXCIgXCIgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXHJcblx0XHRcdFx0XHRmaW5hbFZhbHVlID0gdmFsdWUgPyBqUXVlcnkudHJpbSggY3VyICkgOiBcIlwiO1xyXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmNsYXNzTmFtZSAhPT0gZmluYWxWYWx1ZSApIHtcclxuXHRcdFx0XHRcdFx0ZWxlbS5jbGFzc05hbWUgPSBmaW5hbFZhbHVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH0sXHJcblxyXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkge1xyXG5cdFx0dmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XHJcblxyXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09IFwiYm9vbGVhblwiICYmIHR5cGUgPT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7XHJcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoIHZhbHVlLmNhbGwodGhpcywgaSwgdGhpcy5jbGFzc05hbWUsIHN0YXRlVmFsKSwgc3RhdGVWYWwgKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXHJcblx0XHRcdFx0dmFyIGNsYXNzTmFtZSxcclxuXHRcdFx0XHRcdGkgPSAwLFxyXG5cdFx0XHRcdFx0c2VsZiA9IGpRdWVyeSggdGhpcyApLFxyXG5cdFx0XHRcdFx0Y2xhc3NOYW1lcyA9IHZhbHVlLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTtcclxuXHJcblx0XHRcdFx0d2hpbGUgKCAoY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0pICkge1xyXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0XHJcblx0XHRcdFx0XHRpZiAoIHNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApICkge1xyXG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXHJcblx0XHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09IHN0cnVuZGVmaW5lZCB8fCB0eXBlID09PSBcImJvb2xlYW5cIiApIHtcclxuXHRcdFx0XHRpZiAoIHRoaXMuY2xhc3NOYW1lICkge1xyXG5cdFx0XHRcdFx0Ly8gc3RvcmUgY2xhc3NOYW1lIGlmIHNldFxyXG5cdFx0XHRcdFx0ZGF0YV9wcml2LnNldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIsIHRoaXMuY2xhc3NOYW1lICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLFxyXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXHJcblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSxcclxuXHRcdFx0XHQvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXHJcblx0XHRcdFx0dGhpcy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgPyBcIlwiIDogZGF0YV9wcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cclxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xyXG5cdFx0dmFyIGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIixcclxuXHRcdFx0aSA9IDAsXHJcblx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcclxuXHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcclxuXHRcdFx0aWYgKCB0aGlzW2ldLm5vZGVUeXBlID09PSAxICYmIChcIiBcIiArIHRoaXNbaV0uY2xhc3NOYW1lICsgXCIgXCIpLnJlcGxhY2UocmNsYXNzLCBcIiBcIikuaW5kZXhPZiggY2xhc3NOYW1lICkgPj0gMCApIHtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn0pO1xyXG5cclxuXHJcblxyXG5cclxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKHtcclxuXHR2YWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcclxuXHRcdHZhciBob29rcywgcmV0LCBpc0Z1bmN0aW9uLFxyXG5cdFx0XHRlbGVtID0gdGhpc1swXTtcclxuXHJcblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xyXG5cdFx0XHRpZiAoIGVsZW0gKSB7XHJcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XHJcblxyXG5cdFx0XHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSkgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRcdHJldHVybiByZXQ7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXQgPSBlbGVtLnZhbHVlO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiA/XHJcblx0XHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXHJcblx0XHRcdFx0XHRyZXQucmVwbGFjZShycmV0dXJuLCBcIlwiKSA6XHJcblx0XHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcclxuXHRcdFx0XHRcdHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkge1xyXG5cdFx0XHR2YXIgdmFsO1xyXG5cclxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uICkge1xyXG5cdFx0XHRcdHZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIGpRdWVyeSggdGhpcyApLnZhbCgpICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dmFsID0gdmFsdWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcclxuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcclxuXHRcdFx0XHR2YWwgPSBcIlwiO1xyXG5cclxuXHRcdFx0fSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIiApIHtcclxuXHRcdFx0XHR2YWwgKz0gXCJcIjtcclxuXHJcblx0XHRcdH0gZWxzZSBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWwgKSApIHtcclxuXHRcdFx0XHR2YWwgPSBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcclxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XHJcblxyXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xyXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKFwic2V0XCIgaW4gaG9va3MpIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRcdHRoaXMudmFsdWUgPSB2YWw7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxufSk7XHJcblxyXG5qUXVlcnkuZXh0ZW5kKHtcclxuXHR2YWxIb29rczoge1xyXG5cdFx0b3B0aW9uOiB7XHJcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdFx0dmFyIHZhbCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidmFsdWVcIiApO1xyXG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XHJcblx0XHRcdFx0XHR2YWwgOlxyXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUxMC0xMStcclxuXHRcdFx0XHRcdC8vIG9wdGlvbi50ZXh0IHRocm93cyBleGNlcHRpb25zICgjMTQ2ODYsICMxNDg1OClcclxuXHRcdFx0XHRcdGpRdWVyeS50cmltKCBqUXVlcnkudGV4dCggZWxlbSApICk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRzZWxlY3Q6IHtcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0XHR2YXIgdmFsdWUsIG9wdGlvbixcclxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXHJcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcclxuXHRcdFx0XHRcdG9uZSA9IGVsZW0udHlwZSA9PT0gXCJzZWxlY3Qtb25lXCIgfHwgaW5kZXggPCAwLFxyXG5cdFx0XHRcdFx0dmFsdWVzID0gb25lID8gbnVsbCA6IFtdLFxyXG5cdFx0XHRcdFx0bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGgsXHJcblx0XHRcdFx0XHRpID0gaW5kZXggPCAwID9cclxuXHRcdFx0XHRcdFx0bWF4IDpcclxuXHRcdFx0XHRcdFx0b25lID8gaW5kZXggOiAwO1xyXG5cclxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXHJcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XHJcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XHJcblxyXG5cdFx0XHRcdFx0Ly8gSUU2LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpXHJcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcclxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXHJcblx0XHRcdFx0XHRcdFx0KCBzdXBwb3J0Lm9wdERpc2FibGVkID8gIW9wdGlvbi5kaXNhYmxlZCA6IG9wdGlvbi5nZXRBdHRyaWJ1dGUoIFwiZGlzYWJsZWRcIiApID09PSBudWxsICkgJiZcclxuXHRcdFx0XHRcdFx0XHQoICFvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fCAhalF1ZXJ5Lm5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcclxuXHJcblx0XHRcdFx0XHRcdC8vIEdldCB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb25cclxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHNcclxuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxyXG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaCggdmFsdWUgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcclxuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXHJcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbS5vcHRpb25zLFxyXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcclxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcclxuXHJcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XHJcblx0XHRcdFx0XHRpZiAoIChvcHRpb24uc2VsZWN0ZWQgPSBqUXVlcnkuaW5BcnJheSggb3B0aW9uLnZhbHVlLCB2YWx1ZXMgKSA+PSAwKSApIHtcclxuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEZvcmNlIGJyb3dzZXJzIHRvIGJlaGF2ZSBjb25zaXN0ZW50bHkgd2hlbiBub24tbWF0Y2hpbmcgdmFsdWUgaXMgc2V0XHJcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xyXG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn0pO1xyXG5cclxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcclxualF1ZXJ5LmVhY2goWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcclxuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcclxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xyXG5cdFx0XHRpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWx1ZSApICkge1xyXG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoZWxlbSkudmFsKCksIHZhbHVlICkgPj0gMCApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XHJcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKFwidmFsdWVcIikgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xyXG5cdFx0fTtcclxuXHR9XHJcbn0pO1xyXG5cclxuXHJcblxyXG5cclxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxyXG5cclxuXHJcbmpRdWVyeS5lYWNoKCAoXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBcIiArXHJcblx0XCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXHJcblx0XCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51XCIpLnNwbGl0KFwiIFwiKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XHJcblxyXG5cdC8vIEhhbmRsZSBldmVudCBiaW5kaW5nXHJcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XHJcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgP1xyXG5cdFx0XHR0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDpcclxuXHRcdFx0dGhpcy50cmlnZ2VyKCBuYW1lICk7XHJcblx0fTtcclxufSk7XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKHtcclxuXHRob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTtcclxuXHR9LFxyXG5cclxuXHRiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xyXG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApO1xyXG5cdH0sXHJcblx0dW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkge1xyXG5cdFx0cmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTtcclxuXHR9LFxyXG5cclxuXHRkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xyXG5cdH0sXHJcblx0dW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7XHJcblx0XHQvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApXHJcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOiB0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8IFwiKipcIiwgZm4gKTtcclxuXHR9XHJcbn0pO1xyXG5cclxuXHJcbnZhciBub25jZSA9IGpRdWVyeS5ub3coKTtcclxuXHJcbnZhciBycXVlcnkgPSAoL1xcPy8pO1xyXG5cclxuXHJcblxyXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDIuM1xyXG4vLyBXb3JrYXJvdW5kIGZhaWx1cmUgdG8gc3RyaW5nLWNhc3QgbnVsbCBpbnB1dFxyXG5qUXVlcnkucGFyc2VKU09OID0gZnVuY3Rpb24oIGRhdGEgKSB7XHJcblx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKyBcIlwiICk7XHJcbn07XHJcblxyXG5cclxuLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZ1xyXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcclxuXHR2YXIgeG1sLCB0bXA7XHJcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0Ly8gU3VwcG9ydDogSUU5XHJcblx0dHJ5IHtcclxuXHRcdHRtcCA9IG5ldyBET01QYXJzZXIoKTtcclxuXHRcdHhtbCA9IHRtcC5wYXJzZUZyb21TdHJpbmcoIGRhdGEsIFwidGV4dC94bWxcIiApO1xyXG5cdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0eG1sID0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0aWYgKCAheG1sIHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJwYXJzZXJlcnJvclwiICkubGVuZ3RoICkge1xyXG5cdFx0alF1ZXJ5LmVycm9yKCBcIkludmFsaWQgWE1MOiBcIiArIGRhdGEgKTtcclxuXHR9XHJcblx0cmV0dXJuIHhtbDtcclxufTtcclxuXHJcblxyXG52YXJcclxuXHRyaGFzaCA9IC8jLiokLyxcclxuXHRydHMgPSAvKFs/Jl0pXz1bXiZdKi8sXHJcblx0cmhlYWRlcnMgPSAvXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL21nLFxyXG5cdC8vICM3NjUzLCAjODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvblxyXG5cdHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sXHJcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXHJcblx0cnByb3RvY29sID0gL15cXC9cXC8vLFxyXG5cdHJ1cmwgPSAvXihbXFx3ListXSs6KSg/OlxcL1xcLyg/OlteXFwvPyNdKkB8KShbXlxcLz8jOl0qKSg/OjooXFxkKyl8KXwpLyxcclxuXHJcblx0LyogUHJlZmlsdGVyc1xyXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXHJcblx0ICogMikgVGhlc2UgYXJlIGNhbGxlZDpcclxuXHQgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0XHJcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxyXG5cdCAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGVcclxuXHQgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXHJcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcclxuXHQgKi9cclxuXHRwcmVmaWx0ZXJzID0ge30sXHJcblxyXG5cdC8qIFRyYW5zcG9ydHMgYmluZGluZ3NcclxuXHQgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlXHJcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxyXG5cdCAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvIFwiKlwiIGlmIG5lZWRlZFxyXG5cdCAqL1xyXG5cdHRyYW5zcG9ydHMgPSB7fSxcclxuXHJcblx0Ly8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXHJcblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxyXG5cclxuXHQvLyBEb2N1bWVudCBsb2NhdGlvblxyXG5cdGFqYXhMb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxyXG5cclxuXHQvLyBTZWdtZW50IGxvY2F0aW9uIGludG8gcGFydHNcclxuXHRhamF4TG9jUGFydHMgPSBydXJsLmV4ZWMoIGFqYXhMb2NhdGlvbi50b0xvd2VyQ2FzZSgpICkgfHwgW107XHJcblxyXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XHJcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xyXG5cclxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXHJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XHJcblxyXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xyXG5cdFx0XHRkYXRhVHlwZUV4cHJlc3Npb24gPSBcIipcIjtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgZGF0YVR5cGUsXHJcblx0XHRcdGkgPSAwLFxyXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdHdoaXRlICkgfHwgW107XHJcblxyXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZnVuYyApICkge1xyXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXHJcblx0XHRcdHdoaWxlICggKGRhdGFUeXBlID0gZGF0YVR5cGVzW2krK10pICkge1xyXG5cdFx0XHRcdC8vIFByZXBlbmQgaWYgcmVxdWVzdGVkXHJcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVswXSA9PT0gXCIrXCIgKSB7XHJcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XHJcblx0XHRcdFx0XHQoc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdKS51bnNoaWZ0KCBmdW5jICk7XHJcblxyXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBhcHBlbmRcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0KHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSkucHVzaCggZnVuYyApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH07XHJcbn1cclxuXHJcbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xyXG5mdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkge1xyXG5cclxuXHR2YXIgaW5zcGVjdGVkID0ge30sXHJcblx0XHRzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTtcclxuXHJcblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XHJcblx0XHR2YXIgc2VsZWN0ZWQ7XHJcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xyXG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcclxuXHRcdFx0dmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTtcclxuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJiAhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XHJcblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xyXG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XHJcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBzZWxlY3RlZDtcclxuXHR9XHJcblxyXG5cdHJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdICkgfHwgIWluc3BlY3RlZFsgXCIqXCIgXSAmJiBpbnNwZWN0KCBcIipcIiApO1xyXG59XHJcblxyXG4vLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnNcclxuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcclxuLy8gRml4ZXMgIzk4ODdcclxuZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7XHJcblx0dmFyIGtleSwgZGVlcCxcclxuXHRcdGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcclxuXHJcblx0Zm9yICgga2V5IGluIHNyYyApIHtcclxuXHRcdGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHQoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoZGVlcCA9IHt9KSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKCBkZWVwICkge1xyXG5cdFx0alF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdGFyZ2V0O1xyXG59XHJcblxyXG4vKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6XHJcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXHJcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxyXG4gKi9cclxuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcclxuXHJcblx0dmFyIGN0LCB0eXBlLCBmaW5hbERhdGFUeXBlLCBmaXJzdERhdGFUeXBlLFxyXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxyXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XHJcblxyXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXHJcblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XHJcblx0XHRkYXRhVHlwZXMuc2hpZnQoKTtcclxuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlXHJcblx0aWYgKCBjdCApIHtcclxuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XHJcblx0XHRcdGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7XHJcblx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlXHJcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XHJcblx0XHRmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XHJcblx0fSBlbHNlIHtcclxuXHRcdC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXNcclxuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xyXG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1swXSBdICkge1xyXG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XHJcblx0XHRcdFx0Zmlyc3REYXRhVHlwZSA9IHR5cGU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxyXG5cdFx0ZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTtcclxuXHR9XHJcblxyXG5cdC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGVcclxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxyXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcclxuXHRpZiAoIGZpbmFsRGF0YVR5cGUgKSB7XHJcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xyXG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xyXG5cdH1cclxufVxyXG5cclxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxyXG4gKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2VcclxuICovXHJcbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcclxuXHR2YXIgY29udjIsIGN1cnJlbnQsIGNvbnYsIHRtcCwgcHJldixcclxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcclxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cclxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7XHJcblxyXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xyXG5cdGlmICggZGF0YVR5cGVzWyAxIF0gKSB7XHJcblx0XHRmb3IgKCBjb252IGluIHMuY29udmVydGVycyApIHtcclxuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcclxuXHJcblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcclxuXHR3aGlsZSAoIGN1cnJlbnQgKSB7XHJcblxyXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XHJcblx0XHRcdGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkXHJcblx0XHRpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAmJiBzLmRhdGFGaWx0ZXIgKSB7XHJcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHByZXYgPSBjdXJyZW50O1xyXG5cdFx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xyXG5cclxuXHRcdGlmICggY3VycmVudCApIHtcclxuXHJcblx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXHJcblx0XHRcdGlmICggY3VycmVudCA9PT0gXCIqXCIgKSB7XHJcblxyXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xyXG5cclxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxyXG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xyXG5cclxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xyXG5cclxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XHJcblx0XHRcdFx0XHRmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkge1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XHJcblx0XHRcdFx0XHRcdHRtcCA9IGNvbnYyLnNwbGl0KCBcIiBcIiApO1xyXG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXRcclxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBDb25kZW5zZSBlcXVpdmFsZW5jZSBjb252ZXJ0ZXJzXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnQgPSB0bXBbIDAgXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90IGFuIGVxdWl2YWxlbmNlKVxyXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcclxuXHJcblx0XHRcdFx0XHQvLyBVbmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVtXHJcblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgc1sgXCJ0aHJvd3NcIiBdICkge1xyXG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcclxuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgc3RhdGU6IFwicGFyc2VyZXJyb3JcIiwgZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50IH07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiB7IHN0YXRlOiBcInN1Y2Nlc3NcIiwgZGF0YTogcmVzcG9uc2UgfTtcclxufVxyXG5cclxualF1ZXJ5LmV4dGVuZCh7XHJcblxyXG5cdC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllc1xyXG5cdGFjdGl2ZTogMCxcclxuXHJcblx0Ly8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdFxyXG5cdGxhc3RNb2RpZmllZDoge30sXHJcblx0ZXRhZzoge30sXHJcblxyXG5cdGFqYXhTZXR0aW5nczoge1xyXG5cdFx0dXJsOiBhamF4TG9jYXRpb24sXHJcblx0XHR0eXBlOiBcIkdFVFwiLFxyXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggYWpheExvY1BhcnRzWyAxIF0gKSxcclxuXHRcdGdsb2JhbDogdHJ1ZSxcclxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxyXG5cdFx0YXN5bmM6IHRydWUsXHJcblx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixcclxuXHRcdC8qXHJcblx0XHR0aW1lb3V0OiAwLFxyXG5cdFx0ZGF0YTogbnVsbCxcclxuXHRcdGRhdGFUeXBlOiBudWxsLFxyXG5cdFx0dXNlcm5hbWU6IG51bGwsXHJcblx0XHRwYXNzd29yZDogbnVsbCxcclxuXHRcdGNhY2hlOiBudWxsLFxyXG5cdFx0dGhyb3dzOiBmYWxzZSxcclxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcclxuXHRcdGhlYWRlcnM6IHt9LFxyXG5cdFx0Ki9cclxuXHJcblx0XHRhY2NlcHRzOiB7XHJcblx0XHRcdFwiKlwiOiBhbGxUeXBlcyxcclxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXHJcblx0XHRcdGh0bWw6IFwidGV4dC9odG1sXCIsXHJcblx0XHRcdHhtbDogXCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsXHJcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcclxuXHRcdH0sXHJcblxyXG5cdFx0Y29udGVudHM6IHtcclxuXHRcdFx0eG1sOiAveG1sLyxcclxuXHRcdFx0aHRtbDogL2h0bWwvLFxyXG5cdFx0XHRqc29uOiAvanNvbi9cclxuXHRcdH0sXHJcblxyXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcclxuXHRcdFx0eG1sOiBcInJlc3BvbnNlWE1MXCIsXHJcblx0XHRcdHRleHQ6IFwicmVzcG9uc2VUZXh0XCIsXHJcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXHJcblx0XHQvLyBLZXlzIHNlcGFyYXRlIHNvdXJjZSAob3IgY2F0Y2hhbGwgXCIqXCIpIGFuZCBkZXN0aW5hdGlvbiB0eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXHJcblx0XHRjb252ZXJ0ZXJzOiB7XHJcblxyXG5cdFx0XHQvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHRcclxuXHRcdFx0XCIqIHRleHRcIjogU3RyaW5nLFxyXG5cclxuXHRcdFx0Ly8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pXHJcblx0XHRcdFwidGV4dCBodG1sXCI6IHRydWUsXHJcblxyXG5cdFx0XHQvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uXHJcblx0XHRcdFwidGV4dCBqc29uXCI6IGpRdWVyeS5wYXJzZUpTT04sXHJcblxyXG5cdFx0XHQvLyBQYXJzZSB0ZXh0IGFzIHhtbFxyXG5cdFx0XHRcInRleHQgeG1sXCI6IGpRdWVyeS5wYXJzZVhNTFxyXG5cdFx0fSxcclxuXHJcblx0XHQvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOlxyXG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxyXG5cdFx0Ly8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmVcclxuXHRcdC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKVxyXG5cdFx0ZmxhdE9wdGlvbnM6IHtcclxuXHRcdFx0dXJsOiB0cnVlLFxyXG5cdFx0XHRjb250ZXh0OiB0cnVlXHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcclxuXHQvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuXHJcblx0Ly8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy5cclxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xyXG5cdFx0cmV0dXJuIHNldHRpbmdzID9cclxuXHJcblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XHJcblx0XHRcdGFqYXhFeHRlbmQoIGFqYXhFeHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApLCBzZXR0aW5ncyApIDpcclxuXHJcblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3NcclxuXHRcdFx0YWpheEV4dGVuZCggalF1ZXJ5LmFqYXhTZXR0aW5ncywgdGFyZ2V0ICk7XHJcblx0fSxcclxuXHJcblx0YWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksXHJcblx0YWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksXHJcblxyXG5cdC8vIE1haW4gbWV0aG9kXHJcblx0YWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcclxuXHJcblx0XHQvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZVxyXG5cdFx0aWYgKCB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiICkge1xyXG5cdFx0XHRvcHRpb25zID0gdXJsO1xyXG5cdFx0XHR1cmwgPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3RcclxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuXHRcdHZhciB0cmFuc3BvcnQsXHJcblx0XHRcdC8vIFVSTCB3aXRob3V0IGFudGktY2FjaGUgcGFyYW1cclxuXHRcdFx0Y2FjaGVVUkwsXHJcblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcclxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxyXG5cdFx0XHRyZXNwb25zZUhlYWRlcnMsXHJcblx0XHRcdC8vIHRpbWVvdXQgaGFuZGxlXHJcblx0XHRcdHRpbWVvdXRUaW1lcixcclxuXHRcdFx0Ly8gQ3Jvc3MtZG9tYWluIGRldGVjdGlvbiB2YXJzXHJcblx0XHRcdHBhcnRzLFxyXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcclxuXHRcdFx0ZmlyZUdsb2JhbHMsXHJcblx0XHRcdC8vIExvb3AgdmFyaWFibGVcclxuXHRcdFx0aSxcclxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxyXG5cdFx0XHRzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSxcclxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcclxuXHRcdFx0Y2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsXHJcblx0XHRcdC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxlY3Rpb25cclxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmICggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XHJcblx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XHJcblx0XHRcdFx0alF1ZXJ5LmV2ZW50LFxyXG5cdFx0XHQvLyBEZWZlcnJlZHNcclxuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcclxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSxcclxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3NcclxuXHRcdFx0c3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSxcclxuXHRcdFx0Ly8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSlcclxuXHRcdFx0cmVxdWVzdEhlYWRlcnMgPSB7fSxcclxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxyXG5cdFx0XHQvLyBUaGUganFYSFIgc3RhdGVcclxuXHRcdFx0c3RhdGUgPSAwLFxyXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2VcclxuXHRcdFx0c3RyQWJvcnQgPSBcImNhbmNlbGVkXCIsXHJcblx0XHRcdC8vIEZha2UgeGhyXHJcblx0XHRcdGpxWEhSID0ge1xyXG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXHJcblxyXG5cdFx0XHRcdC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWRcclxuXHRcdFx0XHRnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcclxuXHRcdFx0XHRcdHZhciBtYXRjaDtcclxuXHRcdFx0XHRcdGlmICggc3RhdGUgPT09IDIgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggIXJlc3BvbnNlSGVhZGVycyApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnMgPSB7fTtcclxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIChtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApKSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbMV0udG9Mb3dlckNhc2UoKSBdID0gbWF0Y2hbIDIgXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaDtcclxuXHRcdFx0XHR9LFxyXG5cclxuXHRcdFx0XHQvLyBSYXcgc3RyaW5nXHJcblx0XHRcdFx0Z2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHJldHVybiBzdGF0ZSA9PT0gMiA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7XHJcblx0XHRcdFx0fSxcclxuXHJcblx0XHRcdFx0Ly8gQ2FjaGVzIHRoZSBoZWFkZXJcclxuXHRcdFx0XHRzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XHJcblx0XHRcdFx0XHR2YXIgbG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0XHRpZiAoICFzdGF0ZSApIHtcclxuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdIHx8IG5hbWU7XHJcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHRcdH0sXHJcblxyXG5cdFx0XHRcdC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyXHJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XHJcblx0XHRcdFx0XHRpZiAoICFzdGF0ZSApIHtcclxuXHRcdFx0XHRcdFx0cy5taW1lVHlwZSA9IHR5cGU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0XHR9LFxyXG5cclxuXHRcdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xyXG5cdFx0XHRcdHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7XHJcblx0XHRcdFx0XHR2YXIgY29kZTtcclxuXHRcdFx0XHRcdGlmICggbWFwICkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIHN0YXRlIDwgMiApIHtcclxuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2sgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXNcclxuXHRcdFx0XHRcdFx0XHRcdHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3NcclxuXHRcdFx0XHRcdFx0XHRqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdFx0fSxcclxuXHJcblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSByZXF1ZXN0XHJcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xyXG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XHJcblx0XHRcdFx0XHRpZiAoIHRyYW5zcG9ydCApIHtcclxuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGRvbmUoIDAsIGZpbmFsVGV4dCApO1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcclxuXHRcdGRlZmVycmVkLnByb21pc2UoIGpxWEhSICkuY29tcGxldGUgPSBjb21wbGV0ZURlZmVycmVkLmFkZDtcclxuXHRcdGpxWEhSLnN1Y2Nlc3MgPSBqcVhIUi5kb25lO1xyXG5cdFx0anFYSFIuZXJyb3IgPSBqcVhIUi5mYWlsO1xyXG5cclxuXHRcdC8vIFJlbW92ZSBoYXNoIGNoYXJhY3RlciAoIzc1MzE6IGFuZCBzdHJpbmcgcHJvbW90aW9uKVxyXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXHJcblx0XHQvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKVxyXG5cdFx0Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlXHJcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgYWpheExvY2F0aW9uICkgKyBcIlwiICkucmVwbGFjZSggcmhhc2gsIFwiXCIgKVxyXG5cdFx0XHQucmVwbGFjZSggcnByb3RvY29sLCBhamF4TG9jUGFydHNbIDEgXSArIFwiLy9cIiApO1xyXG5cclxuXHRcdC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNFxyXG5cdFx0cy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMudHlwZTtcclxuXHJcblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XHJcblx0XHRzLmRhdGFUeXBlcyA9IGpRdWVyeS50cmltKCBzLmRhdGFUeXBlIHx8IFwiKlwiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdHdoaXRlICkgfHwgWyBcIlwiIF07XHJcblxyXG5cdFx0Ly8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHdlIGhhdmUgYSBwcm90b2NvbDpob3N0OnBvcnQgbWlzbWF0Y2hcclxuXHRcdGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xyXG5cdFx0XHRwYXJ0cyA9IHJ1cmwuZXhlYyggcy51cmwudG9Mb3dlckNhc2UoKSApO1xyXG5cdFx0XHRzLmNyb3NzRG9tYWluID0gISEoIHBhcnRzICYmXHJcblx0XHRcdFx0KCBwYXJ0c1sgMSBdICE9PSBhamF4TG9jUGFydHNbIDEgXSB8fCBwYXJ0c1sgMiBdICE9PSBhamF4TG9jUGFydHNbIDIgXSB8fFxyXG5cdFx0XHRcdFx0KCBwYXJ0c1sgMyBdIHx8ICggcGFydHNbIDEgXSA9PT0gXCJodHRwOlwiID8gXCI4MFwiIDogXCI0NDNcIiApICkgIT09XHJcblx0XHRcdFx0XHRcdCggYWpheExvY1BhcnRzWyAzIF0gfHwgKCBhamF4TG9jUGFydHNbIDEgXSA9PT0gXCJodHRwOlwiID8gXCI4MFwiIDogXCI0NDNcIiApICkgKVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZ1xyXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHRzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFwcGx5IHByZWZpbHRlcnNcclxuXHRcdGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xyXG5cclxuXHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlXHJcblx0XHRpZiAoIHN0YXRlID09PSAyICkge1xyXG5cdFx0XHRyZXR1cm4ganFYSFI7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cclxuXHRcdC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICgjMTUxMTgpXHJcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcclxuXHJcblx0XHQvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzXHJcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcclxuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoXCJhamF4U3RhcnRcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gVXBwZXJjYXNlIHRoZSB0eXBlXHJcblx0XHRzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcclxuXHJcblx0XHQvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudFxyXG5cdFx0cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XHJcblxyXG5cdFx0Ly8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlXHJcblx0XHQvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb25cclxuXHRcdGNhY2hlVVJMID0gcy51cmw7XHJcblxyXG5cdFx0Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnRcclxuXHRcdGlmICggIXMuaGFzQ29udGVudCApIHtcclxuXHJcblx0XHRcdC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlLCBhcHBlbmQgZGF0YSB0byB1cmxcclxuXHRcdFx0aWYgKCBzLmRhdGEgKSB7XHJcblx0XHRcdFx0Y2FjaGVVUkwgPSAoIHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmRhdGEgKTtcclxuXHRcdFx0XHQvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5XHJcblx0XHRcdFx0ZGVsZXRlIHMuZGF0YTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQWRkIGFudGktY2FjaGUgaW4gdXJsIGlmIG5lZWRlZFxyXG5cdFx0XHRpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xyXG5cdFx0XHRcdHMudXJsID0gcnRzLnRlc3QoIGNhY2hlVVJMICkgP1xyXG5cclxuXHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSAnXycgcGFyYW1ldGVyLCBzZXQgaXRzIHZhbHVlXHJcblx0XHRcdFx0XHRjYWNoZVVSTC5yZXBsYWNlKCBydHMsIFwiJDFfPVwiICsgbm9uY2UrKyApIDpcclxuXHJcblx0XHRcdFx0XHQvLyBPdGhlcndpc2UgYWRkIG9uZSB0byB0aGUgZW5kXHJcblx0XHRcdFx0XHRjYWNoZVVSTCArICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyBub25jZSsrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cclxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xyXG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XHJcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Nb2RpZmllZC1TaW5jZVwiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcclxuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU5vbmUtTWF0Y2hcIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxyXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XHJcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIsIHMuY29udGVudFR5cGUgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlXHJcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxyXG5cdFx0XHRcIkFjY2VwdFwiLFxyXG5cdFx0XHRzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbMF0gXSA/XHJcblx0XHRcdFx0cy5hY2NlcHRzWyBzLmRhdGFUeXBlc1swXSBdICsgKCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcclxuXHRcdFx0XHRzLmFjY2VwdHNbIFwiKlwiIF1cclxuXHRcdCk7XHJcblxyXG5cdFx0Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uXHJcblx0XHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcclxuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XHJcblx0XHRpZiAoIHMuYmVmb3JlU2VuZCAmJiAoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7XHJcblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxyXG5cdFx0XHRyZXR1cm4ganFYSFIuYWJvcnQoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb25cclxuXHRcdHN0ckFib3J0ID0gXCJhYm9ydFwiO1xyXG5cclxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkc1xyXG5cdFx0Zm9yICggaSBpbiB7IHN1Y2Nlc3M6IDEsIGVycm9yOiAxLCBjb21wbGV0ZTogMSB9ICkge1xyXG5cdFx0XHRqcVhIUlsgaSBdKCBzWyBpIF0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBHZXQgdHJhbnNwb3J0XHJcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcclxuXHJcblx0XHQvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnRcclxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcclxuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xyXG5cclxuXHRcdFx0Ly8gU2VuZCBnbG9iYWwgZXZlbnRcclxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcclxuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBUaW1lb3V0XHJcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xyXG5cdFx0XHRcdHRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRqcVhIUi5hYm9ydChcInRpbWVvdXRcIik7XHJcblx0XHRcdFx0fSwgcy50aW1lb3V0ICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0c3RhdGUgPSAxO1xyXG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHQvLyBQcm9wYWdhdGUgZXhjZXB0aW9uIGFzIGVycm9yIGlmIG5vdCBkb25lXHJcblx0XHRcdFx0aWYgKCBzdGF0ZSA8IDIgKSB7XHJcblx0XHRcdFx0XHRkb25lKCAtMSwgZSApO1xyXG5cdFx0XHRcdC8vIFNpbXBseSByZXRocm93IG90aGVyd2lzZVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aHJvdyBlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZVxyXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XHJcblx0XHRcdHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsXHJcblx0XHRcdFx0c3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7XHJcblxyXG5cdFx0XHQvLyBDYWxsZWQgb25jZVxyXG5cdFx0XHRpZiAoIHN0YXRlID09PSAyICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU3RhdGUgaXMgXCJkb25lXCIgbm93XHJcblx0XHRcdHN0YXRlID0gMjtcclxuXHJcblx0XHRcdC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzXHJcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xyXG5cdFx0XHRcdGNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uXHJcblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXHJcblx0XHRcdHRyYW5zcG9ydCA9IHVuZGVmaW5lZDtcclxuXHJcblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcclxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCBcIlwiO1xyXG5cclxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcclxuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDtcclxuXHJcblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXHJcblx0XHRcdGlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0O1xyXG5cclxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcclxuXHRcdFx0aWYgKCByZXNwb25zZXMgKSB7XHJcblx0XHRcdFx0cmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIENvbnZlcnQgbm8gbWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldClcclxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcclxuXHJcblx0XHRcdC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nXHJcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xyXG5cclxuXHRcdFx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxyXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xyXG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlcihcIkxhc3QtTW9kaWZpZWRcIik7XHJcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xyXG5cdFx0XHRcdFx0XHRqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKFwiZXRhZ1wiKTtcclxuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XHJcblx0XHRcdFx0XHRcdGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XHJcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09IFwiSEVBRFwiICkge1xyXG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm9jb250ZW50XCI7XHJcblxyXG5cdFx0XHRcdC8vIGlmIG5vdCBtb2RpZmllZFxyXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkge1xyXG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcclxuXHJcblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTtcclxuXHRcdFx0XHRcdHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhO1xyXG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcclxuXHRcdFx0XHRcdGlzU3VjY2VzcyA9ICFlcnJvcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xyXG5cdFx0XHRcdGVycm9yID0gc3RhdHVzVGV4dDtcclxuXHRcdFx0XHRpZiAoIHN0YXR1cyB8fCAhc3RhdHVzVGV4dCApIHtcclxuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XHJcblx0XHRcdFx0XHRpZiAoIHN0YXR1cyA8IDAgKSB7XHJcblx0XHRcdFx0XHRcdHN0YXR1cyA9IDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdFxyXG5cdFx0XHRqcVhIUi5zdGF0dXMgPSBzdGF0dXM7XHJcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcclxuXHJcblx0XHRcdC8vIFN1Y2Nlc3MvRXJyb3JcclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XHJcblx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXHJcblx0XHRcdGpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTtcclxuXHRcdFx0c3RhdHVzQ29kZSA9IHVuZGVmaW5lZDtcclxuXHJcblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XHJcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/IFwiYWpheFN1Y2Nlc3NcIiA6IFwiYWpheEVycm9yXCIsXHJcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBDb21wbGV0ZVxyXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApO1xyXG5cclxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcclxuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4Q29tcGxldGVcIiwgWyBqcVhIUiwgcyBdICk7XHJcblx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyXHJcblx0XHRcdFx0aWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHtcclxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKFwiYWpheFN0b3BcIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGpxWEhSO1xyXG5cdH0sXHJcblxyXG5cdGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkge1xyXG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssIFwianNvblwiICk7XHJcblx0fSxcclxuXHJcblx0Z2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHtcclxuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcclxuXHR9XHJcbn0pO1xyXG5cclxualF1ZXJ5LmVhY2goIFsgXCJnZXRcIiwgXCJwb3N0XCIgXSwgZnVuY3Rpb24oIGksIG1ldGhvZCApIHtcclxuXHRqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7XHJcblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxyXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZGF0YSApICkge1xyXG5cdFx0XHR0eXBlID0gdHlwZSB8fCBjYWxsYmFjaztcclxuXHRcdFx0Y2FsbGJhY2sgPSBkYXRhO1xyXG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBqUXVlcnkuYWpheCh7XHJcblx0XHRcdHVybDogdXJsLFxyXG5cdFx0XHR0eXBlOiBtZXRob2QsXHJcblx0XHRcdGRhdGFUeXBlOiB0eXBlLFxyXG5cdFx0XHRkYXRhOiBkYXRhLFxyXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xyXG5cdFx0fSk7XHJcblx0fTtcclxufSk7XHJcblxyXG5cclxualF1ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVybCApIHtcclxuXHRyZXR1cm4galF1ZXJ5LmFqYXgoe1xyXG5cdFx0dXJsOiB1cmwsXHJcblx0XHR0eXBlOiBcIkdFVFwiLFxyXG5cdFx0ZGF0YVR5cGU6IFwic2NyaXB0XCIsXHJcblx0XHRhc3luYzogZmFsc2UsXHJcblx0XHRnbG9iYWw6IGZhbHNlLFxyXG5cdFx0XCJ0aHJvd3NcIjogdHJ1ZVxyXG5cdH0pO1xyXG59O1xyXG5cclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoe1xyXG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xyXG5cdFx0dmFyIHdyYXA7XHJcblxyXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkge1xyXG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWwuY2FsbCh0aGlzLCBpKSApO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIHRoaXNbIDAgXSApIHtcclxuXHJcblx0XHRcdC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kXHJcblx0XHRcdHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApO1xyXG5cclxuXHRcdFx0aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0XHR3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHdyYXAubWFwKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcclxuXHJcblx0XHRcdFx0d2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkge1xyXG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcclxuXHRcdFx0fSkuYXBwZW5kKCB0aGlzICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fSxcclxuXHJcblx0d3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHtcclxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHtcclxuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCh0aGlzLCBpKSApO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLFxyXG5cdFx0XHRcdGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpO1xyXG5cclxuXHRcdFx0aWYgKCBjb250ZW50cy5sZW5ndGggKSB7XHJcblx0XHRcdFx0Y29udGVudHMud3JhcEFsbCggaHRtbCApO1xyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRzZWxmLmFwcGVuZCggaHRtbCApO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cclxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcclxuXHRcdHZhciBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkge1xyXG5cdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBpc0Z1bmN0aW9uID8gaHRtbC5jYWxsKHRoaXMsIGkpIDogaHRtbCApO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHJcblx0dW53cmFwOiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdGlmICggIWpRdWVyeS5ub2RlTmFtZSggdGhpcywgXCJib2R5XCIgKSApIHtcclxuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7XHJcblx0XHRcdH1cclxuXHRcdH0pLmVuZCgpO1xyXG5cdH1cclxufSk7XHJcblxyXG5cclxualF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHtcclxuXHQvLyBTdXBwb3J0OiBPcGVyYSA8PSAxMi4xMlxyXG5cdC8vIE9wZXJhIHJlcG9ydHMgb2Zmc2V0V2lkdGhzIGFuZCBvZmZzZXRIZWlnaHRzIGxlc3MgdGhhbiB6ZXJvIG9uIHNvbWUgZWxlbWVudHNcclxuXHRyZXR1cm4gZWxlbS5vZmZzZXRXaWR0aCA8PSAwICYmIGVsZW0ub2Zmc2V0SGVpZ2h0IDw9IDA7XHJcbn07XHJcbmpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdHJldHVybiAhalF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4oIGVsZW0gKTtcclxufTtcclxuXHJcblxyXG5cclxuXHJcbnZhciByMjAgPSAvJTIwL2csXHJcblx0cmJyYWNrZXQgPSAvXFxbXFxdJC8sXHJcblx0ckNSTEYgPSAvXFxyP1xcbi9nLFxyXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcclxuXHRyc3VibWl0dGFibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7XHJcblxyXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XHJcblx0dmFyIG5hbWU7XHJcblxyXG5cdGlmICggalF1ZXJ5LmlzQXJyYXkoIG9iaiApICkge1xyXG5cdFx0Ly8gU2VyaWFsaXplIGFycmF5IGl0ZW0uXHJcblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcclxuXHRcdFx0aWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHtcclxuXHRcdFx0XHQvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuXHJcblx0XHRcdFx0YWRkKCBwcmVmaXgsIHYgKTtcclxuXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguXHJcblx0XHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgKCB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiA/IGkgOiBcIlwiICkgKyBcIl1cIiwgdiwgdHJhZGl0aW9uYWwsIGFkZCApO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0fSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gXCJvYmplY3RcIiApIHtcclxuXHRcdC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS5cclxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xyXG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4ICsgXCJbXCIgKyBuYW1lICsgXCJdXCIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7XHJcblx0XHR9XHJcblxyXG5cdH0gZWxzZSB7XHJcblx0XHQvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uXHJcblx0XHRhZGQoIHByZWZpeCwgb2JqICk7XHJcblx0fVxyXG59XHJcblxyXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxyXG4vLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmdcclxualF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkge1xyXG5cdHZhciBwcmVmaXgsXHJcblx0XHRzID0gW10sXHJcblx0XHRhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcclxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlXHJcblx0XHRcdHZhbHVlID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgPyB2YWx1ZSgpIDogKCB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICk7XHJcblx0XHRcdHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlICk7XHJcblx0XHR9O1xyXG5cclxuXHQvLyBTZXQgdHJhZGl0aW9uYWwgdG8gdHJ1ZSBmb3IgalF1ZXJ5IDw9IDEuMy4yIGJlaGF2aW9yLlxyXG5cdGlmICggdHJhZGl0aW9uYWwgPT09IHVuZGVmaW5lZCApIHtcclxuXHRcdHRyYWRpdGlvbmFsID0galF1ZXJ5LmFqYXhTZXR0aW5ncyAmJiBqUXVlcnkuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsO1xyXG5cdH1cclxuXHJcblx0Ly8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy5cclxuXHRpZiAoIGpRdWVyeS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkge1xyXG5cdFx0Ly8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzXHJcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XHJcblx0XHRcdGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7XHJcblx0XHR9KTtcclxuXHJcblx0fSBlbHNlIHtcclxuXHRcdC8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlIFwib2xkXCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyXHJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cclxuXHRcdGZvciAoIHByZWZpeCBpbiBhICkge1xyXG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxyXG5cdHJldHVybiBzLmpvaW4oIFwiJlwiICkucmVwbGFjZSggcjIwLCBcIitcIiApO1xyXG59O1xyXG5cclxualF1ZXJ5LmZuLmV4dGVuZCh7XHJcblx0c2VyaWFsaXplOiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xyXG5cdH0sXHJcblx0c2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHQvLyBDYW4gYWRkIHByb3BIb29rIGZvciBcImVsZW1lbnRzXCIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRzXHJcblx0XHRcdHZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCBcImVsZW1lbnRzXCIgKTtcclxuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XHJcblx0XHR9KVxyXG5cdFx0LmZpbHRlcihmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XHJcblxyXG5cdFx0XHQvLyBVc2UgLmlzKCBcIjpkaXNhYmxlZFwiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3NcclxuXHRcdFx0cmV0dXJuIHRoaXMubmFtZSAmJiAhalF1ZXJ5KCB0aGlzICkuaXMoIFwiOmRpc2FibGVkXCIgKSAmJlxyXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcclxuXHRcdFx0XHQoIHRoaXMuY2hlY2tlZCB8fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7XHJcblx0XHR9KVxyXG5cdFx0Lm1hcChmdW5jdGlvbiggaSwgZWxlbSApIHtcclxuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHZhbCA9PSBudWxsID9cclxuXHRcdFx0XHRudWxsIDpcclxuXHRcdFx0XHRqUXVlcnkuaXNBcnJheSggdmFsICkgP1xyXG5cdFx0XHRcdFx0alF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xyXG5cdFx0XHRcdFx0fSkgOlxyXG5cdFx0XHRcdFx0eyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xyXG5cdFx0fSkuZ2V0KCk7XHJcblx0fVxyXG59KTtcclxuXHJcblxyXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkge1xyXG5cdHRyeSB7XHJcblx0XHRyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcblx0fSBjYXRjaCggZSApIHt9XHJcbn07XHJcblxyXG52YXIgeGhySWQgPSAwLFxyXG5cdHhockNhbGxiYWNrcyA9IHt9LFxyXG5cdHhoclN1Y2Nlc3NTdGF0dXMgPSB7XHJcblx0XHQvLyBmaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNvZGUgMCwgYXNzdW1lIDIwMFxyXG5cdFx0MDogMjAwLFxyXG5cdFx0Ly8gU3VwcG9ydDogSUU5XHJcblx0XHQvLyAjMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcclxuXHRcdDEyMjM6IDIwNFxyXG5cdH0sXHJcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcclxuXHJcbi8vIFN1cHBvcnQ6IElFOVxyXG4vLyBPcGVuIHJlcXVlc3RzIG11c3QgYmUgbWFudWFsbHkgYWJvcnRlZCBvbiB1bmxvYWQgKCM1MjgwKVxyXG4vLyBTZWUgaHR0cHM6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20va2IvMjg1Njc0NiBmb3IgbW9yZSBpbmZvXHJcbmlmICggd2luZG93LmF0dGFjaEV2ZW50ICkge1xyXG5cdHdpbmRvdy5hdHRhY2hFdmVudCggXCJvbnVubG9hZFwiLCBmdW5jdGlvbigpIHtcclxuXHRcdGZvciAoIHZhciBrZXkgaW4geGhyQ2FsbGJhY2tzICkge1xyXG5cdFx0XHR4aHJDYWxsYmFja3NbIGtleSBdKCk7XHJcblx0XHR9XHJcblx0fSk7XHJcbn1cclxuXHJcbnN1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiB4aHJTdXBwb3J0ZWQgKTtcclxuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XHJcblxyXG5qUXVlcnkuYWpheFRyYW5zcG9ydChmdW5jdGlvbiggb3B0aW9ucyApIHtcclxuXHR2YXIgY2FsbGJhY2s7XHJcblxyXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3RcclxuXHRpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XHJcblx0XHRcdFx0dmFyIGksXHJcblx0XHRcdFx0XHR4aHIgPSBvcHRpb25zLnhocigpLFxyXG5cdFx0XHRcdFx0aWQgPSArK3hocklkO1xyXG5cclxuXHRcdFx0XHR4aHIub3Blbiggb3B0aW9ucy50eXBlLCBvcHRpb25zLnVybCwgb3B0aW9ucy5hc3luYywgb3B0aW9ucy51c2VybmFtZSwgb3B0aW9ucy5wYXNzd29yZCApO1xyXG5cclxuXHRcdFx0XHQvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkXHJcblx0XHRcdFx0aWYgKCBvcHRpb25zLnhockZpZWxkcyApIHtcclxuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XHJcblx0XHRcdFx0XHRcdHhoclsgaSBdID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWRcclxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XHJcblx0XHRcdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXJcclxuXHRcdFx0XHQvLyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlXHJcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cclxuXHRcdFx0XHQvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cClcclxuXHRcdFx0XHQvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC5cclxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzW1wiWC1SZXF1ZXN0ZWQtV2l0aFwiXSApIHtcclxuXHRcdFx0XHRcdGhlYWRlcnNbXCJYLVJlcXVlc3RlZC1XaXRoXCJdID0gXCJYTUxIdHRwUmVxdWVzdFwiO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gU2V0IGhlYWRlcnNcclxuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XHJcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBDYWxsYmFja1xyXG5cdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XHJcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIHhockNhbGxiYWNrc1sgaWQgXTtcclxuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IHhoci5vbmxvYWQgPSB4aHIub25lcnJvciA9IG51bGw7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJhYm9ydFwiICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0eGhyLmFib3J0KCk7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGZpbGU6IHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIDA7IHNlZSAjODYwNSwgIzE0MjA3XHJcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0XHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRTlcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gQWNjZXNzaW5nIGJpbmFyeS1kYXRhIHJlc3BvbnNlVGV4dCB0aHJvd3MgYW4gZXhjZXB0aW9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vICgjMTE0MjYpXHJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ID09PSBcInN0cmluZ1wiID8ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ6IHhoci5yZXNwb25zZVRleHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSA6IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHQvLyBMaXN0ZW4gdG8gZXZlbnRzXHJcblx0XHRcdFx0eGhyLm9ubG9hZCA9IGNhbGxiYWNrKCk7XHJcblx0XHRcdFx0eGhyLm9uZXJyb3IgPSBjYWxsYmFjayhcImVycm9yXCIpO1xyXG5cclxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrXHJcblx0XHRcdFx0Y2FsbGJhY2sgPSB4aHJDYWxsYmFja3NbIGlkIF0gPSBjYWxsYmFjayhcImFib3J0XCIpO1xyXG5cclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0Ly8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKVxyXG5cdFx0XHRcdFx0eGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdFx0Ly8gIzE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcclxuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XHJcblx0XHRcdFx0XHRcdHRocm93IGU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XHJcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHR9XHJcbn0pO1xyXG5cclxuXHJcblxyXG5cclxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcclxualF1ZXJ5LmFqYXhTZXR1cCh7XHJcblx0YWNjZXB0czoge1xyXG5cdFx0c2NyaXB0OiBcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJcclxuXHR9LFxyXG5cdGNvbnRlbnRzOiB7XHJcblx0XHRzY3JpcHQ6IC8oPzpqYXZhfGVjbWEpc2NyaXB0L1xyXG5cdH0sXHJcblx0Y29udmVydGVyczoge1xyXG5cdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbiggdGV4dCApIHtcclxuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTtcclxuXHRcdFx0cmV0dXJuIHRleHQ7XHJcblx0XHR9XHJcblx0fVxyXG59KTtcclxuXHJcbi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW5cclxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xyXG5cdGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0cy5jYWNoZSA9IGZhbHNlO1xyXG5cdH1cclxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XHJcblx0XHRzLnR5cGUgPSBcIkdFVFwiO1xyXG5cdH1cclxufSk7XHJcblxyXG4vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnRcclxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xyXG5cdC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHNcclxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XHJcblx0XHR2YXIgc2NyaXB0LCBjYWxsYmFjaztcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcclxuXHRcdFx0XHRzY3JpcHQgPSBqUXVlcnkoXCI8c2NyaXB0PlwiKS5wcm9wKHtcclxuXHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxyXG5cdFx0XHRcdFx0Y2hhcnNldDogcy5zY3JpcHRDaGFyc2V0LFxyXG5cdFx0XHRcdFx0c3JjOiBzLnVybFxyXG5cdFx0XHRcdH0pLm9uKFxyXG5cdFx0XHRcdFx0XCJsb2FkIGVycm9yXCIsXHJcblx0XHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XHJcblx0XHRcdFx0XHRcdHNjcmlwdC5yZW1vdmUoKTtcclxuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBudWxsO1xyXG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcclxuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggZXZ0LnR5cGUgPT09IFwiZXJyb3JcIiA/IDQwNCA6IDIwMCwgZXZ0LnR5cGUgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XHJcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHR9XHJcbn0pO1xyXG5cclxuXHJcblxyXG5cclxudmFyIG9sZENhbGxiYWNrcyA9IFtdLFxyXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XHJcblxyXG4vLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzXHJcbmpRdWVyeS5hamF4U2V0dXAoe1xyXG5cdGpzb25wOiBcImNhbGxiYWNrXCIsXHJcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArIFwiX1wiICsgKCBub25jZSsrICkgKTtcclxuXHRcdHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlO1xyXG5cdFx0cmV0dXJuIGNhbGxiYWNrO1xyXG5cdH1cclxufSk7XHJcblxyXG4vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHNcclxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwianNvbiBqc29ucFwiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7XHJcblxyXG5cdHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lcixcclxuXHRcdGpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/XHJcblx0XHRcdFwidXJsXCIgOlxyXG5cdFx0XHR0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICYmICEoIHMuY29udGVudFR5cGUgfHwgXCJcIiApLmluZGV4T2YoXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIikgJiYgcmpzb25wLnRlc3QoIHMuZGF0YSApICYmIFwiZGF0YVwiXHJcblx0XHQpO1xyXG5cclxuXHQvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgXCJqc29ucFwiIG9yIHdlIGhhdmUgYSBwYXJhbWV0ZXIgdG8gc2V0XHJcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XHJcblxyXG5cdFx0Ly8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdFxyXG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0galF1ZXJ5LmlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID9cclxuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxyXG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XHJcblxyXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxyXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcclxuXHRcdFx0c1sganNvblByb3AgXSA9IHNbIGpzb25Qcm9wIF0ucmVwbGFjZSggcmpzb25wLCBcIiQxXCIgKyBjYWxsYmFja05hbWUgKTtcclxuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xyXG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cclxuXHRcdHMuY29udmVydGVyc1tcInNjcmlwdCBqc29uXCJdID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkge1xyXG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBmb3JjZSBqc29uIGRhdGFUeXBlXHJcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XHJcblxyXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja1xyXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xyXG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IGFyZ3VtZW50cztcclxuXHRcdH07XHJcblxyXG5cdFx0Ly8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRlcnMpXHJcblx0XHRqcVhIUi5hbHdheXMoZnVuY3Rpb24oKSB7XHJcblx0XHRcdC8vIFJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcclxuXHRcdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuO1xyXG5cclxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcclxuXHRcdFx0aWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHtcclxuXHRcdFx0XHQvLyBtYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcclxuXHRcdFx0XHRzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25wQ2FsbGJhY2s7XHJcblxyXG5cdFx0XHRcdC8vIHNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2VcclxuXHRcdFx0XHRvbGRDYWxsYmFja3MucHVzaCggY2FsbGJhY2tOYW1lICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUgYSByZXNwb25zZVxyXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkge1xyXG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBEZWxlZ2F0ZSB0byBzY3JpcHRcclxuXHRcdHJldHVybiBcInNjcmlwdFwiO1xyXG5cdH1cclxufSk7XHJcblxyXG5cclxuXHJcblxyXG4vLyBkYXRhOiBzdHJpbmcgb2YgaHRtbFxyXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsIGRlZmF1bHRzIHRvIGRvY3VtZW50XHJcbi8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmdcclxualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcclxuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwiYm9vbGVhblwiICkge1xyXG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xyXG5cdFx0Y29udGV4dCA9IGZhbHNlO1xyXG5cdH1cclxuXHRjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDtcclxuXHJcblx0dmFyIHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApLFxyXG5cdFx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcclxuXHJcblx0Ly8gU2luZ2xlIHRhZ1xyXG5cdGlmICggcGFyc2VkICkge1xyXG5cdFx0cmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbMV0gKSBdO1xyXG5cdH1cclxuXHJcblx0cGFyc2VkID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzICk7XHJcblxyXG5cdGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHtcclxuXHRcdGpRdWVyeSggc2NyaXB0cyApLnJlbW92ZSgpO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7XHJcbn07XHJcblxyXG5cclxuLy8gS2VlcCBhIGNvcHkgb2YgdGhlIG9sZCBsb2FkIG1ldGhvZFxyXG52YXIgX2xvYWQgPSBqUXVlcnkuZm4ubG9hZDtcclxuXHJcbi8qKlxyXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXHJcbiAqL1xyXG5qUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7XHJcblx0aWYgKCB0eXBlb2YgdXJsICE9PSBcInN0cmluZ1wiICYmIF9sb2FkICkge1xyXG5cdFx0cmV0dXJuIF9sb2FkLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcclxuXHR9XHJcblxyXG5cdHZhciBzZWxlY3RvciwgdHlwZSwgcmVzcG9uc2UsXHJcblx0XHRzZWxmID0gdGhpcyxcclxuXHRcdG9mZiA9IHVybC5pbmRleE9mKFwiIFwiKTtcclxuXHJcblx0aWYgKCBvZmYgPj0gMCApIHtcclxuXHRcdHNlbGVjdG9yID0galF1ZXJ5LnRyaW0oIHVybC5zbGljZSggb2ZmICkgKTtcclxuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XHJcblx0fVxyXG5cclxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cclxuXHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcclxuXHJcblx0XHQvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFja1xyXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XHJcblx0XHRwYXJhbXMgPSB1bmRlZmluZWQ7XHJcblxyXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcclxuXHR9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiApIHtcclxuXHRcdHR5cGUgPSBcIlBPU1RcIjtcclxuXHR9XHJcblxyXG5cdC8vIElmIHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0XHJcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XHJcblx0XHRqUXVlcnkuYWpheCh7XHJcblx0XHRcdHVybDogdXJsLFxyXG5cclxuXHRcdFx0Ly8gaWYgXCJ0eXBlXCIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuIFwiR0VUXCIgbWV0aG9kIHdpbGwgYmUgdXNlZFxyXG5cdFx0XHR0eXBlOiB0eXBlLFxyXG5cdFx0XHRkYXRhVHlwZTogXCJodG1sXCIsXHJcblx0XHRcdGRhdGE6IHBhcmFtc1xyXG5cdFx0fSkuZG9uZShmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xyXG5cclxuXHRcdFx0Ly8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrXHJcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xyXG5cclxuXHRcdFx0c2VsZi5odG1sKCBzZWxlY3RvciA/XHJcblxyXG5cdFx0XHRcdC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdlxyXG5cdFx0XHRcdC8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9yc1xyXG5cdFx0XHRcdGpRdWVyeShcIjxkaXY+XCIpLmFwcGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3RvciApIDpcclxuXHJcblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHRcclxuXHRcdFx0XHRyZXNwb25zZVRleHQgKTtcclxuXHJcblx0XHR9KS5jb21wbGV0ZSggY2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7XHJcblx0XHRcdHNlbGYuZWFjaCggY2FsbGJhY2ssIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG5cclxuXHJcblxyXG4vLyBBdHRhY2ggYSBidW5jaCBvZiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2ZW50c1xyXG5qUXVlcnkuZWFjaCggWyBcImFqYXhTdGFydFwiLCBcImFqYXhTdG9wXCIsIFwiYWpheENvbXBsZXRlXCIsIFwiYWpheEVycm9yXCIsIFwiYWpheFN1Y2Nlc3NcIiwgXCJhamF4U2VuZFwiIF0sIGZ1bmN0aW9uKCBpLCB0eXBlICkge1xyXG5cdGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkge1xyXG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7XHJcblx0fTtcclxufSk7XHJcblxyXG5cclxuXHJcblxyXG5qUXVlcnkuZXhwci5maWx0ZXJzLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0cmV0dXJuIGpRdWVyeS5ncmVwKGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHtcclxuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xyXG5cdH0pLmxlbmd0aDtcclxufTtcclxuXHJcblxyXG5cclxuXHJcbnZhciBkb2NFbGVtID0gd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuXHJcbi8qKlxyXG4gKiBHZXRzIGEgd2luZG93IGZyb20gYW4gZWxlbWVudFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0V2luZG93KCBlbGVtICkge1xyXG5cdHJldHVybiBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSA/IGVsZW0gOiBlbGVtLm5vZGVUeXBlID09PSA5ICYmIGVsZW0uZGVmYXVsdFZpZXc7XHJcbn1cclxuXHJcbmpRdWVyeS5vZmZzZXQgPSB7XHJcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcclxuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXHJcblx0XHRcdHBvc2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICksXHJcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcclxuXHRcdFx0cHJvcHMgPSB7fTtcclxuXHJcblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXHJcblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xyXG5cdFx0XHRlbGVtLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xyXG5cdFx0fVxyXG5cclxuXHRcdGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7XHJcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XHJcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcclxuXHRcdGNhbGN1bGF0ZVBvc2l0aW9uID0gKCBwb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiIHx8IHBvc2l0aW9uID09PSBcImZpeGVkXCIgKSAmJlxyXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKFwiYXV0b1wiKSA+IC0xO1xyXG5cclxuXHRcdC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyXHJcblx0XHQvLyB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWRcclxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XHJcblx0XHRcdGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xyXG5cdFx0XHRjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7XHJcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XHJcblx0XHRcdGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XHJcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGN1ck9mZnNldCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHtcclxuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcclxuXHRcdH1cclxuXHRcdGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7XHJcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XHJcblx0XHRcdG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTtcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcclxuXHRcdH1cclxuXHR9XHJcbn07XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKHtcclxuXHRvZmZzZXQ6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xyXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xyXG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cclxuXHRcdFx0XHR0aGlzIDpcclxuXHRcdFx0XHR0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7XHJcblx0XHRcdFx0XHRqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBkb2NFbGVtLCB3aW4sXHJcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXHJcblx0XHRcdGJveCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH0sXHJcblx0XHRcdGRvYyA9IGVsZW0gJiYgZWxlbS5vd25lckRvY3VtZW50O1xyXG5cclxuXHRcdGlmICggIWRvYyApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xyXG5cclxuXHRcdC8vIE1ha2Ugc3VyZSBpdCdzIG5vdCBhIGRpc2Nvbm5lY3RlZCBET00gbm9kZVxyXG5cdFx0aWYgKCAhalF1ZXJ5LmNvbnRhaW5zKCBkb2NFbGVtLCBlbGVtICkgKSB7XHJcblx0XHRcdHJldHVybiBib3g7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU3VwcG9ydDogQmxhY2tCZXJyeSA1LCBpT1MgMyAob3JpZ2luYWwgaVBob25lKVxyXG5cdFx0Ly8gSWYgd2UgZG9uJ3QgaGF2ZSBnQkNSLCBqdXN0IHVzZSAwLDAgcmF0aGVyIHRoYW4gZXJyb3JcclxuXHRcdGlmICggdHlwZW9mIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICE9PSBzdHJ1bmRlZmluZWQgKSB7XHJcblx0XHRcdGJveCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblx0XHR9XHJcblx0XHR3aW4gPSBnZXRXaW5kb3coIGRvYyApO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0dG9wOiBib3gudG9wICsgd2luLnBhZ2VZT2Zmc2V0IC0gZG9jRWxlbS5jbGllbnRUb3AsXHJcblx0XHRcdGxlZnQ6IGJveC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0IC0gZG9jRWxlbS5jbGllbnRMZWZ0XHJcblx0XHR9O1xyXG5cdH0sXHJcblxyXG5cdHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcclxuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCxcclxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcclxuXHRcdFx0cGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcclxuXHJcblx0XHQvLyBGaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gd2luZG93IChwYXJlbnRPZmZzZXQgPSB7dG9wOjAsIGxlZnQ6IDB9LCBiZWNhdXNlIGl0IGlzIGl0cyBvbmx5IG9mZnNldCBwYXJlbnRcclxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcclxuXHRcdFx0Ly8gQXNzdW1lIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBpcyB0aGVyZSB3aGVuIGNvbXB1dGVkIHBvc2l0aW9uIGlzIGZpeGVkXHJcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gR2V0ICpyZWFsKiBvZmZzZXRQYXJlbnRcclxuXHRcdFx0b2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQoKTtcclxuXHJcblx0XHRcdC8vIEdldCBjb3JyZWN0IG9mZnNldHNcclxuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcclxuXHRcdFx0aWYgKCAhalF1ZXJ5Lm5vZGVOYW1lKCBvZmZzZXRQYXJlbnRbIDAgXSwgXCJodG1sXCIgKSApIHtcclxuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0KCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEFkZCBvZmZzZXRQYXJlbnQgYm9yZGVyc1xyXG5cdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsgMCBdLCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcclxuXHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50WyAwIF0sIFwiYm9yZGVyTGVmdFdpZHRoXCIsIHRydWUgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBTdWJ0cmFjdCBwYXJlbnQgb2Zmc2V0cyBhbmQgZWxlbWVudCBtYXJnaW5zXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxyXG5cdFx0XHRsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIsIHRydWUgKVxyXG5cdFx0fTtcclxuXHR9LFxyXG5cclxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQgfHwgZG9jRWxlbTtcclxuXHJcblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmICggIWpRdWVyeS5ub2RlTmFtZSggb2Zmc2V0UGFyZW50LCBcImh0bWxcIiApICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSApIHtcclxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY0VsZW07XHJcblx0XHR9KTtcclxuXHR9XHJcbn0pO1xyXG5cclxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXHJcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcclxuXHR2YXIgdG9wID0gXCJwYWdlWU9mZnNldFwiID09PSBwcm9wO1xyXG5cclxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcclxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRob2QsIHZhbCApIHtcclxuXHRcdFx0dmFyIHdpbiA9IGdldFdpbmRvdyggZWxlbSApO1xyXG5cclxuXHRcdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCB3aW4gKSB7XHJcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxyXG5cdFx0XHRcdFx0IXRvcCA/IHZhbCA6IHdpbmRvdy5wYWdlWE9mZnNldCxcclxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbmRvdy5wYWdlWU9mZnNldFxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xyXG5cdFx0XHR9XHJcblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCwgbnVsbCApO1xyXG5cdH07XHJcbn0pO1xyXG5cclxuLy8gU3VwcG9ydDogU2FmYXJpPDcrLCBDaHJvbWU8MzcrXHJcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXHJcbi8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NFxyXG4vLyBCbGluayBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yMjkyODBcclxuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcclxuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcclxualF1ZXJ5LmVhY2goIFsgXCJ0b3BcIiwgXCJsZWZ0XCIgXSwgZnVuY3Rpb24oIGksIHByb3AgKSB7XHJcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcclxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcclxuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcclxuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xyXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxyXG5cdFx0XHRcdHJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0ZWQgKSA/XHJcblx0XHRcdFx0XHRqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyBcInB4XCIgOlxyXG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHQpO1xyXG59KTtcclxuXHJcblxyXG4vLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHNcclxualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xyXG5cdGpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6IFwiaW5uZXJcIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsIFwiXCI6IFwib3V0ZXJcIiArIG5hbWUgfSwgZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XHJcblx0XHQvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGhcclxuXHRcdGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkge1xyXG5cdFx0XHR2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSBcImJvb2xlYW5cIiApLFxyXG5cdFx0XHRcdGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gXCJtYXJnaW5cIiA6IFwiYm9yZGVyXCIgKTtcclxuXHJcblx0XHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHtcclxuXHRcdFx0XHR2YXIgZG9jO1xyXG5cclxuXHRcdFx0XHRpZiAoIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkge1xyXG5cdFx0XHRcdFx0Ly8gQXMgb2YgNS84LzIwMTIgdGhpcyB3aWxsIHlpZWxkIGluY29ycmVjdCByZXN1bHRzIGZvciBNb2JpbGUgU2FmYXJpLCBidXQgdGhlcmVcclxuXHRcdFx0XHRcdC8vIGlzbid0IGEgd2hvbGUgbG90IHdlIGNhbiBkby4gU2VlIHB1bGwgcmVxdWVzdCBhdCB0aGlzIFVSTCBmb3IgZGlzY3Vzc2lvbjpcclxuXHRcdFx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNzY0XHJcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIFwiY2xpZW50XCIgKyBuYW1lIF07XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0XHJcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xyXG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XHJcblxyXG5cdFx0XHRcdFx0Ly8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLFxyXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XHJcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoXHJcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJzY3JvbGxcIiArIG5hbWUgXSwgZG9jWyBcInNjcm9sbFwiICsgbmFtZSBdLFxyXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcclxuXHRcdFx0XHRcdFx0ZG9jWyBcImNsaWVudFwiICsgbmFtZSBdXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxyXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XHJcblxyXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxyXG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcclxuXHRcdFx0fSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUsIG51bGwgKTtcclxuXHRcdH07XHJcblx0fSk7XHJcbn0pO1xyXG5cclxuXHJcbi8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0XHJcbmpRdWVyeS5mbi5zaXplID0gZnVuY3Rpb24oKSB7XHJcblx0cmV0dXJuIHRoaXMubGVuZ3RoO1xyXG59O1xyXG5cclxualF1ZXJ5LmZuLmFuZFNlbGYgPSBqUXVlcnkuZm4uYWRkQmFjaztcclxuXHJcblxyXG5cclxuXHJcbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxyXG4vLyBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLCBidXQgbm90IHZpYSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0XHJcbi8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdFxyXG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXHJcbi8vIGRlcml2ZWQgZnJvbSBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZVxyXG4vLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHNcclxuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxyXG5cclxuLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGRcclxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxyXG4vLyBBTUQgbG9hZGVyIGlzIHByZXNlbnQuIGpRdWVyeSBpcyBhIHNwZWNpYWwgY2FzZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uXHJcblxyXG5pZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xyXG5cdGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIGpRdWVyeTtcclxuXHR9KTtcclxufVxyXG5cclxuXHJcblxyXG5cclxudmFyXHJcblx0Ly8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlXHJcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXHJcblxyXG5cdC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXHJcblx0XyQgPSB3aW5kb3cuJDtcclxuXHJcbmpRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7XHJcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xyXG5cdFx0d2luZG93LiQgPSBfJDtcclxuXHR9XHJcblxyXG5cdGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7XHJcblx0XHR3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBqUXVlcnk7XHJcbn07XHJcblxyXG4vLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRFxyXG4vLyAoIzcxMDIjY29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpXHJcbi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NilcclxuaWYgKCB0eXBlb2Ygbm9HbG9iYWwgPT09IHN0cnVuZGVmaW5lZCApIHtcclxuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbnJldHVybiBqUXVlcnk7XHJcblxyXG59KSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.plugin.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.plugin.js index 72d38bbfa5b..524626e672b 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.plugin.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.plugin.js @@ -347,4 +347,4 @@ }; })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5wbHVnaW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkucGx1Z2luLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogU2ltcGxlIEphdmFTY3JpcHQgSW5oZXJpdGFuY2VcbiAqIEJ5IEpvaG4gUmVzaWcgaHR0cDovL2Vqb2huLm9yZy9cbiAqIE1JVCBMaWNlbnNlZC5cbiAqL1xuLy8gSW5zcGlyZWQgYnkgYmFzZTIgYW5kIFByb3RvdHlwZVxuKGZ1bmN0aW9uKCl7XG5cdHZhciBpbml0aWFsaXppbmcgPSBmYWxzZTtcblxuXHQvLyBUaGUgYmFzZSBKUUNsYXNzIGltcGxlbWVudGF0aW9uIChkb2VzIG5vdGhpbmcpXG5cdHdpbmRvdy5KUUNsYXNzID0gZnVuY3Rpb24oKXt9O1xuXG5cdC8vIENvbGxlY3Rpb24gb2YgZGVyaXZlZCBjbGFzc2VzXG5cdEpRQ2xhc3MuY2xhc3NlcyA9IHt9O1xuIFxuXHQvLyBDcmVhdGUgYSBuZXcgSlFDbGFzcyB0aGF0IGluaGVyaXRzIGZyb20gdGhpcyBjbGFzc1xuXHRKUUNsYXNzLmV4dGVuZCA9IGZ1bmN0aW9uIGV4dGVuZGVyKHByb3ApIHtcblx0XHR2YXIgYmFzZSA9IHRoaXMucHJvdG90eXBlO1xuXG5cdFx0Ly8gSW5zdGFudGlhdGUgYSBiYXNlIGNsYXNzIChidXQgb25seSBjcmVhdGUgdGhlIGluc3RhbmNlLFxuXHRcdC8vIGRvbid0IHJ1biB0aGUgaW5pdCBjb25zdHJ1Y3Rvcilcblx0XHRpbml0aWFsaXppbmcgPSB0cnVlO1xuXHRcdHZhciBwcm90b3R5cGUgPSBuZXcgdGhpcygpO1xuXHRcdGluaXRpYWxpemluZyA9IGZhbHNlO1xuXG5cdFx0Ly8gQ29weSB0aGUgcHJvcGVydGllcyBvdmVyIG9udG8gdGhlIG5ldyBwcm90b3R5cGVcblx0XHRmb3IgKHZhciBuYW1lIGluIHByb3ApIHtcblx0XHRcdC8vIENoZWNrIGlmIHdlJ3JlIG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIGZ1bmN0aW9uXG5cdFx0XHRwcm90b3R5cGVbbmFtZV0gPSB0eXBlb2YgcHJvcFtuYW1lXSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0XHRcdHR5cGVvZiBiYXNlW25hbWVdID09ICdmdW5jdGlvbicgP1xuXHRcdFx0XHQoZnVuY3Rpb24obmFtZSwgZm4pe1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHZhciBfX3N1cGVyID0gdGhpcy5fc3VwZXI7XG5cblx0XHRcdFx0XHRcdC8vIEFkZCBhIG5ldyAuX3N1cGVyKCkgbWV0aG9kIHRoYXQgaXMgdGhlIHNhbWUgbWV0aG9kXG5cdFx0XHRcdFx0XHQvLyBidXQgb24gdGhlIHN1cGVyLWNsYXNzXG5cdFx0XHRcdFx0XHR0aGlzLl9zdXBlciA9IGZ1bmN0aW9uKGFyZ3MpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJhc2VbbmFtZV0uYXBwbHkodGhpcywgYXJncyB8fCBbXSk7XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHR2YXIgcmV0ID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcdFx0XHRcdFxuXG5cdFx0XHRcdFx0XHQvLyBUaGUgbWV0aG9kIG9ubHkgbmVlZCB0byBiZSBib3VuZCB0ZW1wb3JhcmlseSwgc28gd2Vcblx0XHRcdFx0XHRcdC8vIHJlbW92ZSBpdCB3aGVuIHdlJ3JlIGRvbmUgZXhlY3V0aW5nXG5cdFx0XHRcdFx0XHR0aGlzLl9zdXBlciA9IF9fc3VwZXI7XG5cblx0XHRcdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSkobmFtZSwgcHJvcFtuYW1lXSkgOlxuXHRcdFx0XHRwcm9wW25hbWVdO1xuXHRcdH1cblxuXHRcdC8vIFRoZSBkdW1teSBjbGFzcyBjb25zdHJ1Y3RvclxuXHRcdGZ1bmN0aW9uIEpRQ2xhc3MoKSB7XG5cdFx0XHQvLyBBbGwgY29uc3RydWN0aW9uIGlzIGFjdHVhbGx5IGRvbmUgaW4gdGhlIGluaXQgbWV0aG9kXG5cdFx0XHRpZiAoIWluaXRpYWxpemluZyAmJiB0aGlzLl9pbml0KSB7XG5cdFx0XHRcdHRoaXMuX2luaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQb3B1bGF0ZSBvdXIgY29uc3RydWN0ZWQgcHJvdG90eXBlIG9iamVjdFxuXHRcdEpRQ2xhc3MucHJvdG90eXBlID0gcHJvdG90eXBlO1xuXG5cdFx0Ly8gRW5mb3JjZSB0aGUgY29uc3RydWN0b3IgdG8gYmUgd2hhdCB3ZSBleHBlY3Rcblx0XHRKUUNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEpRQ2xhc3M7XG5cblx0XHQvLyBBbmQgbWFrZSB0aGlzIGNsYXNzIGV4dGVuZGFibGVcblx0XHRKUUNsYXNzLmV4dGVuZCA9IGV4dGVuZGVyO1xuXG5cdFx0cmV0dXJuIEpRQ2xhc3M7XG5cdH07XG59KSgpO1xuXG4oZnVuY3Rpb24oJCkgeyAvLyBFbnN1cmUgJCwgZW5jYXBzdWxhdGVcblxuXHQvKiogQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgY29sbGVjdGlvbiBwbHVnaW5zIHYxLjAuMS5cblx0XHRXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpIERlY2VtYmVyIDIwMTMuXG5cdFx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvYmxvYi9tYXN0ZXIvTUlULUxJQ0VOU0UudHh0KSBsaWNlbnNlLlxuXHRcdEBtb2R1bGUgJC5KUVBsdWdpblxuXHRcdEBhYnN0cmFjdCAqL1xuXHRKUUNsYXNzLmNsYXNzZXMuSlFQbHVnaW4gPSBKUUNsYXNzLmV4dGVuZCh7XG5cblx0XHQvKiogTmFtZSB0byBpZGVudGlmeSB0aGlzIHBsdWdpbi5cblx0XHRcdEBleGFtcGxlIG5hbWU6ICd0YWJzJyAqL1xuXHRcdG5hbWU6ICdwbHVnaW4nLFxuXG5cdFx0LyoqIERlZmF1bHQgb3B0aW9ucyBmb3IgaW5zdGFuY2VzIG9mIHRoaXMgcGx1Z2luIChkZWZhdWx0OiB7fSkuXG5cdFx0XHRAZXhhbXBsZSBkZWZhdWx0T3B0aW9uczoge1xuIFx0c2VsZWN0ZWRDbGFzczogJ3NlbGVjdGVkJyxcbiBcdHRyaWdnZXJzOiAnY2xpY2snXG4gfSAqL1xuXHRcdGRlZmF1bHRPcHRpb25zOiB7fSxcblx0XHRcblx0XHQvKiogT3B0aW9ucyBkZXBlbmRlbnQgb24gdGhlIGxvY2FsZS5cblx0XHRcdEluZGV4ZWQgYnkgbGFuZ3VhZ2UgYW5kIChvcHRpb25hbCkgY291bnRyeSBjb2RlLCB3aXRoICcnIGRlbm90aW5nIHRoZSBkZWZhdWx0IGxhbmd1YWdlIChFbmdsaXNoL1VTKS5cblx0XHRcdEBleGFtcGxlIHJlZ2lvbmFsT3B0aW9uczoge1xuXHQnJzoge1xuXHRcdGdyZWV0aW5nOiAnSGknXG5cdH1cbiB9ICovXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7fSxcblx0XHRcblx0XHQvKiogTmFtZXMgb2YgZ2V0dGVyIG1ldGhvZHMgLSB0aG9zZSB0aGF0IGNhbid0IGJlIGNoYWluZWQgKGRlZmF1bHQ6IFtdKS5cblx0XHRcdEBleGFtcGxlIF9nZXR0ZXJzOiBbJ2FjdGl2ZVRhYiddICovXG5cdFx0X2dldHRlcnM6IFtdLFxuXG5cdFx0LyoqIFJldHJpZXZlIGEgbWFya2VyIGNsYXNzIGZvciBhZmZlY3RlZCBlbGVtZW50cy5cblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBtYXJrZXIgY2xhc3MuICovXG5cdFx0X2dldE1hcmtlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gJ2lzLScgKyB0aGlzLm5hbWU7XG5cdFx0fSxcblx0XHRcblx0XHQvKiogSW5pdGlhbGlzZSB0aGUgcGx1Z2luLlxuXHRcdFx0Q3JlYXRlIHRoZSBqUXVlcnkgYnJpZGdlIC0gcGx1Z2luIG5hbWUgPGNvZGU+eHl6PC9jb2RlPlxuXHRcdFx0cHJvZHVjZXMgPGNvZGU+JC54eXo8L2NvZGU+IGFuZCA8Y29kZT4kLmZuLnh5ejwvY29kZT4uICovXG5cdFx0X2luaXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gQXBwbHkgZGVmYXVsdCBsb2NhbGlzYXRpb25zXG5cdFx0XHQkLmV4dGVuZCh0aGlzLmRlZmF1bHRPcHRpb25zLCAodGhpcy5yZWdpb25hbE9wdGlvbnMgJiYgdGhpcy5yZWdpb25hbE9wdGlvbnNbJyddKSB8fCB7fSk7XG5cdFx0XHQvLyBDYW1lbC1jYXNlIHRoZSBuYW1lXG5cdFx0XHR2YXIganFOYW1lID0gY2FtZWxDYXNlKHRoaXMubmFtZSk7XG5cdFx0XHQvLyBFeHBvc2UgalF1ZXJ5IHNpbmdsZXRvbiBtYW5hZ2VyXG5cdFx0XHQkW2pxTmFtZV0gPSB0aGlzO1xuXHRcdFx0Ly8gRXhwb3NlIGpRdWVyeSBjb2xsZWN0aW9uIHBsdWdpblxuXHRcdFx0JC5mbltqcU5hbWVdID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXHRcdFx0XHR2YXIgb3RoZXJBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblx0XHRcdFx0aWYgKCRbanFOYW1lXS5faXNOb3RDaGFpbmVkKG9wdGlvbnMsIG90aGVyQXJncykpIHtcblx0XHRcdFx0XHRyZXR1cm4gJFtqcU5hbWVdW29wdGlvbnNdLmFwcGx5KCRbanFOYW1lXSwgW3RoaXNbMF1dLmNvbmNhdChvdGhlckFyZ3MpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRcdGlmIChvcHRpb25zWzBdID09PSAnXycgfHwgISRbanFOYW1lXVtvcHRpb25zXSkge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyAnVW5rbm93biBtZXRob2Q6ICcgKyBvcHRpb25zO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0JFtqcU5hbWVdW29wdGlvbnNdLmFwcGx5KCRbanFOYW1lXSwgW3RoaXNdLmNvbmNhdChvdGhlckFyZ3MpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHQkW2pxTmFtZV0uX2F0dGFjaCh0aGlzLCBvcHRpb25zKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0LyoqIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHN1YnNlcXVlbnQgaW5zdGFuY2VzLlxuXHRcdFx0QHBhcmFtIG9wdGlvbnMge29iamVjdH0gVGhlIG5ldyBkZWZhdWx0IG9wdGlvbnMuXG5cdFx0XHRAZXhhbXBsZSAkLnBsdWdpbi5zZXREZWZhdWxzKHtuYW1lOiB2YWx1ZX0pICovXG5cdFx0c2V0RGVmYXVsdHM6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0XHRcdCQuZXh0ZW5kKHRoaXMuZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMgfHwge30pO1xuXHRcdH0sXG5cdFx0XG5cdFx0LyoqIERldGVybWluZSB3aGV0aGVyIGEgbWV0aG9kIGlzIGEgZ2V0dGVyIGFuZCBkb2Vzbid0IHBlcm1pdCBjaGFpbmluZy5cblx0XHRcdEBwcml2YXRlXG5cdFx0XHRAcGFyYW0gbmFtZSB7c3RyaW5nfSBUaGUgbWV0aG9kIG5hbWUuXG5cdFx0XHRAcGFyYW0gb3RoZXJBcmdzIHthbnlbXX0gQW55IG90aGVyIGFyZ3VtZW50cyBmb3IgdGhlIG1ldGhvZC5cblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhpcyBtZXRob2QgaXMgYSBnZXR0ZXIsIGZhbHNlIG90aGVyd2lzZS4gKi9cblx0XHRfaXNOb3RDaGFpbmVkOiBmdW5jdGlvbihuYW1lLCBvdGhlckFyZ3MpIHtcblx0XHRcdGlmIChuYW1lID09PSAnb3B0aW9uJyAmJiAob3RoZXJBcmdzLmxlbmd0aCA9PT0gMCB8fFxuXHRcdFx0XHRcdChvdGhlckFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBvdGhlckFyZ3NbMF0gPT09ICdzdHJpbmcnKSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gJC5pbkFycmF5KG5hbWUsIHRoaXMuX2dldHRlcnMpID4gLTE7XG5cdFx0fSxcblx0XHRcblx0XHQvKiogSW5pdGlhbGlzZSBhbiBlbGVtZW50LiBDYWxsZWQgaW50ZXJuYWxseSBvbmx5LlxuXHRcdFx0QWRkcyBhbiBpbnN0YW5jZSBvYmplY3QgYXMgZGF0YSBuYW1lZCBmb3IgdGhlIHBsdWdpbi5cblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgZWxlbWVudCB0byBlbmhhbmNlLlxuXHRcdFx0QHBhcmFtIG9wdGlvbnMge29iamVjdH0gT3ZlcnJpZGluZyBzZXR0aW5ncy4gKi9cblx0XHRfYXR0YWNoOiBmdW5jdGlvbihlbGVtLCBvcHRpb25zKSB7XG5cdFx0XHRlbGVtID0gJChlbGVtKTtcblx0XHRcdGlmIChlbGVtLmhhc0NsYXNzKHRoaXMuX2dldE1hcmtlcigpKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRlbGVtLmFkZENsYXNzKHRoaXMuX2dldE1hcmtlcigpKTtcblx0XHRcdG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucywgdGhpcy5fZ2V0TWV0YWRhdGEoZWxlbSksIG9wdGlvbnMgfHwge30pO1xuXHRcdFx0dmFyIGluc3QgPSAkLmV4dGVuZCh7bmFtZTogdGhpcy5uYW1lLCBlbGVtOiBlbGVtLCBvcHRpb25zOiBvcHRpb25zfSxcblx0XHRcdFx0dGhpcy5faW5zdFNldHRpbmdzKGVsZW0sIG9wdGlvbnMpKTtcblx0XHRcdGVsZW0uZGF0YSh0aGlzLm5hbWUsIGluc3QpOyAvLyBTYXZlIGluc3RhbmNlIGFnYWluc3QgZWxlbWVudFxuXHRcdFx0dGhpcy5fcG9zdEF0dGFjaChlbGVtLCBpbnN0KTtcblx0XHRcdHRoaXMub3B0aW9uKGVsZW0sIG9wdGlvbnMpO1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgYWRkaXRpb25hbCBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdE92ZXJyaWRlIHRoaXMgaW4gYSBzdWItY2xhc3MgdG8gcHJvdmlkZSBleHRyYSBzZXR0aW5ncy5cblx0XHRcdEBwYXJhbSBlbGVtIHtqUXVlcnl9IFRoZSBjdXJyZW50IGpRdWVyeSBlbGVtZW50LlxuXHRcdFx0QHBhcmFtIG9wdGlvbnMge29iamVjdH0gVGhlIGluc3RhbmNlIG9wdGlvbnMuXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IEFueSBleHRyYSBpbnN0YW5jZSB2YWx1ZXMuXG5cdFx0XHRAZXhhbXBsZSBfaW5zdFNldHRpbmdzOiBmdW5jdGlvbihlbGVtLCBvcHRpb25zKSB7XG4gXHRyZXR1cm4ge25hdjogZWxlbS5maW5kKG9wdGlvbnMubmF2U2VsZWN0b3IpfTtcbiB9ICovXG5cdFx0X2luc3RTZXR0aW5nczogZnVuY3Rpb24oZWxlbSwgb3B0aW9ucykge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH0sXG5cblx0XHQvKiogUGx1Z2luIHNwZWNpZmljIHBvc3QgaW5pdGlhbGlzYXRpb24uXG5cdFx0XHRPdmVycmlkZSB0aGlzIGluIGEgc3ViLWNsYXNzIHRvIHBlcmZvcm0gZXh0cmEgYWN0aXZpdGllcy5cblx0XHRcdEBwYXJhbSBlbGVtIHtqUXVlcnl9IFRoZSBjdXJyZW50IGpRdWVyeSBlbGVtZW50LlxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGluc3RhbmNlIHNldHRpbmdzLlxuXHRcdFx0QGV4YW1wbGUgX3Bvc3RBdHRhY2g6IGZ1bmN0aW9uKGVsZW0sIGluc3QpIHtcbiBcdGVsZW0ub24oJ2NsaWNrLicgKyB0aGlzLm5hbWUsIGZ1bmN0aW9uKCkge1xuIFx0XHQuLi5cbiBcdH0pO1xuIH0gKi9cblx0XHRfcG9zdEF0dGFjaDogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgbWV0YWRhdGEgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBlbGVtZW50LlxuXHRcdFx0TWV0YWRhdGEgaXMgc3BlY2lmaWVkIGFzIGFuIGF0dHJpYnV0ZTpcblx0XHRcdDxjb2RlPmRhdGEtJmx0O3BsdWdpbiBuYW1lPj1cIiZsdDtzZXR0aW5nIG5hbWU+OiAnJmx0O3ZhbHVlPicsIC4uLlwiPC9jb2RlPi5cblx0XHRcdERhdGVzIHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgc3RyaW5ncyBpbiB0aGlzIGZvcm1hdDogJ25ldyBEYXRlKHksIG0tMSwgZCknLlxuXHRcdFx0QHByaXZhdGVcblx0XHRcdEBwYXJhbSBlbGVtIHtqUXVlcnl9IFRoZSBzb3VyY2UgZWxlbWVudC5cblx0XHRcdEByZXR1cm4ge29iamVjdH0gVGhlIGlubGluZSBjb25maWd1cmF0aW9uIG9yIHt9LiAqL1xuXHRcdF9nZXRNZXRhZGF0YTogZnVuY3Rpb24oZWxlbSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFyIGRhdGEgPSBlbGVtLmRhdGEodGhpcy5uYW1lLnRvTG93ZXJDYXNlKCkpIHx8ICcnO1xuXHRcdFx0XHRkYXRhID0gZGF0YS5yZXBsYWNlKC8nL2csICdcIicpO1xuXHRcdFx0XHRkYXRhID0gZGF0YS5yZXBsYWNlKC8oW2EtekEtWjAtOV0rKTovZywgZnVuY3Rpb24obWF0Y2gsIGdyb3VwLCBpKSB7IFxuXHRcdFx0XHRcdHZhciBjb3VudCA9IGRhdGEuc3Vic3RyaW5nKDAsIGkpLm1hdGNoKC9cIi9nKTsgLy8gSGFuZGxlIGVtYmVkZGVkICc6J1xuXHRcdFx0XHRcdHJldHVybiAoIWNvdW50IHx8IGNvdW50Lmxlbmd0aCAlIDIgPT09IDAgPyAnXCInICsgZ3JvdXAgKyAnXCI6JyA6IGdyb3VwICsgJzonKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGRhdGEgPSAkLnBhcnNlSlNPTigneycgKyBkYXRhICsgJ30nKTtcblx0XHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBkYXRhKSB7IC8vIENvbnZlcnQgZGF0ZXNcblx0XHRcdFx0XHR2YXIgdmFsdWUgPSBkYXRhW25hbWVdO1xuXHRcdFx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLm1hdGNoKC9ebmV3IERhdGVcXCgoLiopXFwpJC8pKSB7XG5cdFx0XHRcdFx0XHRkYXRhW25hbWVdID0gZXZhbCh2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0fVxuXHRcdFx0Y2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiogUmV0cmlldmUgdGhlIGluc3RhbmNlIGRhdGEgZm9yIGVsZW1lbnQuXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIHNvdXJjZSBlbGVtZW50LlxuXHRcdFx0QHJldHVybiB7b2JqZWN0fSBUaGUgaW5zdGFuY2UgZGF0YSBvciB7fS4gKi9cblx0XHRfZ2V0SW5zdDogZnVuY3Rpb24oZWxlbSkge1xuXHRcdFx0cmV0dXJuICQoZWxlbSkuZGF0YSh0aGlzLm5hbWUpIHx8IHt9O1xuXHRcdH0sXG5cdFx0XG5cdFx0LyoqIFJldHJpZXZlIG9yIHJlY29uZmlndXJlIHRoZSBzZXR0aW5ncyBmb3IgYSBwbHVnaW4uXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIHNvdXJjZSBlbGVtZW50LlxuXHRcdFx0QHBhcmFtIG5hbWUge29iamVjdHxzdHJpbmd9IFRoZSBjb2xsZWN0aW9uIG9mIG5ldyBvcHRpb24gdmFsdWVzIG9yIHRoZSBuYW1lIG9mIGEgc2luZ2xlIG9wdGlvbi5cblx0XHRcdEBwYXJhbSBbdmFsdWVdIHthbnl9IFRoZSB2YWx1ZSBmb3IgYSBzaW5nbGUgbmFtZWQgb3B0aW9uLlxuXHRcdFx0QHJldHVybiB7YW55fG9iamVjdH0gSWYgcmV0cmlldmluZyBhIHNpbmdsZSB2YWx1ZSBvciBhbGwgb3B0aW9ucy5cblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLnBsdWdpbignb3B0aW9uJywgJ25hbWUnLCB2YWx1ZSlcbiAkKHNlbGVjdG9yKS5wbHVnaW4oJ29wdGlvbicsIHtuYW1lOiB2YWx1ZSwgLi4ufSlcbiB2YXIgdmFsdWUgPSAkKHNlbGVjdG9yKS5wbHVnaW4oJ29wdGlvbicsICduYW1lJylcbiB2YXIgb3B0aW9ucyA9ICQoc2VsZWN0b3IpLnBsdWdpbignb3B0aW9uJykgKi9cblx0XHRvcHRpb246IGZ1bmN0aW9uKGVsZW0sIG5hbWUsIHZhbHVlKSB7XG5cdFx0XHRlbGVtID0gJChlbGVtKTtcblx0XHRcdHZhciBpbnN0ID0gZWxlbS5kYXRhKHRoaXMubmFtZSk7XG5cdFx0XHRpZiAgKCFuYW1lIHx8ICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgPT0gbnVsbCkpIHtcblx0XHRcdFx0dmFyIG9wdGlvbnMgPSAoaW5zdCB8fCB7fSkub3B0aW9ucztcblx0XHRcdFx0cmV0dXJuIChvcHRpb25zICYmIG5hbWUgPyBvcHRpb25zW25hbWVdIDogb3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWVsZW0uaGFzQ2xhc3ModGhpcy5fZ2V0TWFya2VyKCkpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHZhciBvcHRpb25zID0gbmFtZSB8fCB7fTtcblx0XHRcdGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0b3B0aW9ucyA9IHt9O1xuXHRcdFx0XHRvcHRpb25zW25hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9vcHRpb25zQ2hhbmdlZChlbGVtLCBpbnN0LCBvcHRpb25zKTtcblx0XHRcdCQuZXh0ZW5kKGluc3Qub3B0aW9ucywgb3B0aW9ucyk7XG5cdFx0fSxcblx0XHRcblx0XHQvKiogUGx1Z2luIHNwZWNpZmljIG9wdGlvbnMgcHJvY2Vzc2luZy5cblx0XHRcdE9sZCB2YWx1ZSBhdmFpbGFibGUgaW4gPGNvZGU+aW5zdC5vcHRpb25zW25hbWVdPC9jb2RlPiwgbmV3IHZhbHVlIGluIDxjb2RlPm9wdGlvbnNbbmFtZV08L2NvZGU+LlxuXHRcdFx0T3ZlcnJpZGUgdGhpcyBpbiBhIHN1Yi1jbGFzcyB0byBwZXJmb3JtIGV4dHJhIGFjdGl2aXRpZXMuXG5cdFx0XHRAcGFyYW0gZWxlbSB7alF1ZXJ5fSBUaGUgY3VycmVudCBqUXVlcnkgZWxlbWVudC5cblx0XHRcdEBwYXJhbSBpbnN0IHtvYmplY3R9IFRoZSBpbnN0YW5jZSBzZXR0aW5ncy5cblx0XHRcdEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IFRoZSBuZXcgb3B0aW9ucy5cblx0XHRcdEBleGFtcGxlIF9vcHRpb25zQ2hhbmdlZDogZnVuY3Rpb24oZWxlbSwgaW5zdCwgb3B0aW9ucykge1xuIFx0aWYgKG9wdGlvbnMubmFtZSAhPSBpbnN0Lm9wdGlvbnMubmFtZSkge1xuIFx0XHRlbGVtLnJlbW92ZUNsYXNzKGluc3Qub3B0aW9ucy5uYW1lKS5hZGRDbGFzcyhvcHRpb25zLm5hbWUpO1xuIFx0fVxuIH0gKi9cblx0XHRfb3B0aW9uc0NoYW5nZWQ6IGZ1bmN0aW9uKGVsZW0sIGluc3QsIG9wdGlvbnMpIHtcblx0XHR9LFxuXHRcdFxuXHRcdC8qKiBSZW1vdmUgYWxsIHRyYWNlIG9mIHRoZSBwbHVnaW4uXG5cdFx0XHRPdmVycmlkZSA8Y29kZT5fcHJlRGVzdHJveTwvY29kZT4gZm9yIHBsdWdpbi1zcGVjaWZpYyBwcm9jZXNzaW5nLlxuXHRcdFx0QHBhcmFtIGVsZW0ge0VsZW1lbnR9IFRoZSBzb3VyY2UgZWxlbWVudC5cblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLnBsdWdpbignZGVzdHJveScpICovXG5cdFx0ZGVzdHJveTogZnVuY3Rpb24oZWxlbSkge1xuXHRcdFx0ZWxlbSA9ICQoZWxlbSk7XG5cdFx0XHRpZiAoIWVsZW0uaGFzQ2xhc3ModGhpcy5fZ2V0TWFya2VyKCkpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3ByZURlc3Ryb3koZWxlbSwgdGhpcy5fZ2V0SW5zdChlbGVtKSk7XG5cdFx0XHRlbGVtLnJlbW92ZURhdGEodGhpcy5uYW1lKS5yZW1vdmVDbGFzcyh0aGlzLl9nZXRNYXJrZXIoKSk7XG5cdFx0fSxcblxuXHRcdC8qKiBQbHVnaW4gc3BlY2lmaWMgcHJlIGRlc3RydWN0aW9uLlxuXHRcdFx0T3ZlcnJpZGUgdGhpcyBpbiBhIHN1Yi1jbGFzcyB0byBwZXJmb3JtIGV4dHJhIGFjdGl2aXRpZXMgYW5kIHVuZG8gZXZlcnl0aGluZyB0aGF0IHdhc1xuXHRcdFx0ZG9uZSBpbiB0aGUgPGNvZGU+X3Bvc3RBdHRhY2g8L2NvZGU+IG9yIDxjb2RlPl9vcHRpb25zQ2hhbmdlZDwvY29kZT4gZnVuY3Rpb25zLlxuXHRcdFx0QHBhcmFtIGVsZW0ge2pRdWVyeX0gVGhlIGN1cnJlbnQgalF1ZXJ5IGVsZW1lbnQuXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgaW5zdGFuY2Ugc2V0dGluZ3MuXG5cdFx0XHRAZXhhbXBsZSBfcHJlRGVzdHJveTogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xuIFx0ZWxlbS5vZmYoJy4nICsgdGhpcy5uYW1lKTtcbiB9ICovXG5cdFx0X3ByZURlc3Ryb3k6IGZ1bmN0aW9uKGVsZW0sIGluc3QpIHtcblx0XHR9XG5cdH0pO1xuXHRcblx0LyoqIENvbnZlcnQgbmFtZXMgZnJvbSBoeXBoZW5hdGVkIHRvIGNhbWVsLWNhc2UuXG5cdFx0QHByaXZhdGVcblx0XHRAcGFyYW0gdmFsdWUge3N0cmluZ30gVGhlIG9yaWdpbmFsIGh5cGhlbmF0ZWQgbmFtZS5cblx0XHRAcmV0dXJuIHtzdHJpbmd9IFRoZSBjYW1lbC1jYXNlIHZlcnNpb24uICovXG5cdGZ1bmN0aW9uIGNhbWVsQ2FzZShuYW1lKSB7XG5cdFx0cmV0dXJuIG5hbWUucmVwbGFjZSgvLShbYS16XSkvZywgZnVuY3Rpb24obWF0Y2gsIGdyb3VwKSB7XG5cdFx0XHRyZXR1cm4gZ3JvdXAudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblx0fVxuXHRcblx0LyoqIEV4cG9zZSB0aGUgcGx1Z2luIGJhc2UuXG5cdFx0QG5hbWVzcGFjZSBcIiQuSlFQbHVnaW5cIiAqL1xuXHQkLkpRUGx1Z2luID0ge1xuXHRcblx0XHQvKiogQ3JlYXRlIGEgbmV3IGNvbGxlY3Rpb24gcGx1Z2luLlxuXHRcdFx0QG1lbWJlcm9mIFwiJC5KUVBsdWdpblwiXG5cdFx0XHRAcGFyYW0gW3N1cGVyQ2xhc3M9J0pRUGx1Z2luJ10ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHBhcmVudCBjbGFzcyB0byBpbmhlcml0IGZyb20uXG5cdFx0XHRAcGFyYW0gb3ZlcnJpZGVzIHtvYmplY3R9IFRoZSBwcm9wZXJ0eS9mdW5jdGlvbiBvdmVycmlkZXMgZm9yIHRoZSBuZXcgY2xhc3MuXG5cdFx0XHRAZXhhbXBsZSAkLkpRUGx1Z2luLmNyZWF0ZVBsdWdpbih7XG4gXHRuYW1lOiAndGFicycsXG4gXHRkZWZhdWx0T3B0aW9uczoge3NlbGVjdGVkQ2xhc3M6ICdzZWxlY3RlZCd9LFxuIFx0X2luaXRTZXR0aW5nczogZnVuY3Rpb24oZWxlbSwgb3B0aW9ucykgeyByZXR1cm4gey4uLn07IH0sXG4gXHRfcG9zdEF0dGFjaDogZnVuY3Rpb24oZWxlbSwgaW5zdCkgeyAuLi4gfVxuIH0pOyAqL1xuXHRcdGNyZWF0ZVBsdWdpbjogZnVuY3Rpb24oc3VwZXJDbGFzcywgb3ZlcnJpZGVzKSB7XG5cdFx0XHRpZiAodHlwZW9mIHN1cGVyQ2xhc3MgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdG92ZXJyaWRlcyA9IHN1cGVyQ2xhc3M7XG5cdFx0XHRcdHN1cGVyQ2xhc3MgPSAnSlFQbHVnaW4nO1xuXHRcdFx0fVxuXHRcdFx0c3VwZXJDbGFzcyA9IGNhbWVsQ2FzZShzdXBlckNsYXNzKTtcblx0XHRcdHZhciBjbGFzc05hbWUgPSBjYW1lbENhc2Uob3ZlcnJpZGVzLm5hbWUpO1xuXHRcdFx0SlFDbGFzcy5jbGFzc2VzW2NsYXNzTmFtZV0gPSBKUUNsYXNzLmNsYXNzZXNbc3VwZXJDbGFzc10uZXh0ZW5kKG92ZXJyaWRlcyk7XG5cdFx0XHRuZXcgSlFDbGFzcy5jbGFzc2VzW2NsYXNzTmFtZV0oKTtcblx0XHR9XG5cdH07XG5cbn0pKGpRdWVyeSk7Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5wbHVnaW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkucGx1Z2luLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogU2ltcGxlIEphdmFTY3JpcHQgSW5oZXJpdGFuY2VcclxuICogQnkgSm9obiBSZXNpZyBodHRwOi8vZWpvaG4ub3JnL1xyXG4gKiBNSVQgTGljZW5zZWQuXHJcbiAqL1xyXG4vLyBJbnNwaXJlZCBieSBiYXNlMiBhbmQgUHJvdG90eXBlXHJcbihmdW5jdGlvbigpe1xyXG5cdHZhciBpbml0aWFsaXppbmcgPSBmYWxzZTtcclxuXHJcblx0Ly8gVGhlIGJhc2UgSlFDbGFzcyBpbXBsZW1lbnRhdGlvbiAoZG9lcyBub3RoaW5nKVxyXG5cdHdpbmRvdy5KUUNsYXNzID0gZnVuY3Rpb24oKXt9O1xyXG5cclxuXHQvLyBDb2xsZWN0aW9uIG9mIGRlcml2ZWQgY2xhc3Nlc1xyXG5cdEpRQ2xhc3MuY2xhc3NlcyA9IHt9O1xyXG4gXHJcblx0Ly8gQ3JlYXRlIGEgbmV3IEpRQ2xhc3MgdGhhdCBpbmhlcml0cyBmcm9tIHRoaXMgY2xhc3NcclxuXHRKUUNsYXNzLmV4dGVuZCA9IGZ1bmN0aW9uIGV4dGVuZGVyKHByb3ApIHtcclxuXHRcdHZhciBiYXNlID0gdGhpcy5wcm90b3R5cGU7XHJcblxyXG5cdFx0Ly8gSW5zdGFudGlhdGUgYSBiYXNlIGNsYXNzIChidXQgb25seSBjcmVhdGUgdGhlIGluc3RhbmNlLFxyXG5cdFx0Ly8gZG9uJ3QgcnVuIHRoZSBpbml0IGNvbnN0cnVjdG9yKVxyXG5cdFx0aW5pdGlhbGl6aW5nID0gdHJ1ZTtcclxuXHRcdHZhciBwcm90b3R5cGUgPSBuZXcgdGhpcygpO1xyXG5cdFx0aW5pdGlhbGl6aW5nID0gZmFsc2U7XHJcblxyXG5cdFx0Ly8gQ29weSB0aGUgcHJvcGVydGllcyBvdmVyIG9udG8gdGhlIG5ldyBwcm90b3R5cGVcclxuXHRcdGZvciAodmFyIG5hbWUgaW4gcHJvcCkge1xyXG5cdFx0XHQvLyBDaGVjayBpZiB3ZSdyZSBvdmVyd3JpdGluZyBhbiBleGlzdGluZyBmdW5jdGlvblxyXG5cdFx0XHRwcm90b3R5cGVbbmFtZV0gPSB0eXBlb2YgcHJvcFtuYW1lXSA9PSAnZnVuY3Rpb24nICYmXHJcblx0XHRcdFx0dHlwZW9mIGJhc2VbbmFtZV0gPT0gJ2Z1bmN0aW9uJyA/XHJcblx0XHRcdFx0KGZ1bmN0aW9uKG5hbWUsIGZuKXtcclxuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0dmFyIF9fc3VwZXIgPSB0aGlzLl9zdXBlcjtcclxuXHJcblx0XHRcdFx0XHRcdC8vIEFkZCBhIG5ldyAuX3N1cGVyKCkgbWV0aG9kIHRoYXQgaXMgdGhlIHNhbWUgbWV0aG9kXHJcblx0XHRcdFx0XHRcdC8vIGJ1dCBvbiB0aGUgc3VwZXItY2xhc3NcclxuXHRcdFx0XHRcdFx0dGhpcy5fc3VwZXIgPSBmdW5jdGlvbihhcmdzKSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJhc2VbbmFtZV0uYXBwbHkodGhpcywgYXJncyB8fCBbXSk7XHJcblx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgcmV0ID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcdFx0XHRcdFxyXG5cclxuXHRcdFx0XHRcdFx0Ly8gVGhlIG1ldGhvZCBvbmx5IG5lZWQgdG8gYmUgYm91bmQgdGVtcG9yYXJpbHksIHNvIHdlXHJcblx0XHRcdFx0XHRcdC8vIHJlbW92ZSBpdCB3aGVuIHdlJ3JlIGRvbmUgZXhlY3V0aW5nXHJcblx0XHRcdFx0XHRcdHRoaXMuX3N1cGVyID0gX19zdXBlcjtcclxuXHJcblx0XHRcdFx0XHRcdHJldHVybiByZXQ7XHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdH0pKG5hbWUsIHByb3BbbmFtZV0pIDpcclxuXHRcdFx0XHRwcm9wW25hbWVdO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFRoZSBkdW1teSBjbGFzcyBjb25zdHJ1Y3RvclxyXG5cdFx0ZnVuY3Rpb24gSlFDbGFzcygpIHtcclxuXHRcdFx0Ly8gQWxsIGNvbnN0cnVjdGlvbiBpcyBhY3R1YWxseSBkb25lIGluIHRoZSBpbml0IG1ldGhvZFxyXG5cdFx0XHRpZiAoIWluaXRpYWxpemluZyAmJiB0aGlzLl9pbml0KSB7XHJcblx0XHRcdFx0dGhpcy5faW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUG9wdWxhdGUgb3VyIGNvbnN0cnVjdGVkIHByb3RvdHlwZSBvYmplY3RcclxuXHRcdEpRQ2xhc3MucHJvdG90eXBlID0gcHJvdG90eXBlO1xyXG5cclxuXHRcdC8vIEVuZm9yY2UgdGhlIGNvbnN0cnVjdG9yIHRvIGJlIHdoYXQgd2UgZXhwZWN0XHJcblx0XHRKUUNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEpRQ2xhc3M7XHJcblxyXG5cdFx0Ly8gQW5kIG1ha2UgdGhpcyBjbGFzcyBleHRlbmRhYmxlXHJcblx0XHRKUUNsYXNzLmV4dGVuZCA9IGV4dGVuZGVyO1xyXG5cclxuXHRcdHJldHVybiBKUUNsYXNzO1xyXG5cdH07XHJcbn0pKCk7XHJcblxyXG4oZnVuY3Rpb24oJCkgeyAvLyBFbnN1cmUgJCwgZW5jYXBzdWxhdGVcclxuXHJcblx0LyoqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGNvbGxlY3Rpb24gcGx1Z2lucyB2MS4wLjEuXHJcblx0XHRXcml0dGVuIGJ5IEtlaXRoIFdvb2QgKGtid29vZHthdH1paW5ldC5jb20uYXUpIERlY2VtYmVyIDIwMTMuXHJcblx0XHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIChodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iL21hc3Rlci9NSVQtTElDRU5TRS50eHQpIGxpY2Vuc2UuXHJcblx0XHRAbW9kdWxlICQuSlFQbHVnaW5cclxuXHRcdEBhYnN0cmFjdCAqL1xyXG5cdEpRQ2xhc3MuY2xhc3Nlcy5KUVBsdWdpbiA9IEpRQ2xhc3MuZXh0ZW5kKHtcclxuXHJcblx0XHQvKiogTmFtZSB0byBpZGVudGlmeSB0aGlzIHBsdWdpbi5cclxuXHRcdFx0QGV4YW1wbGUgbmFtZTogJ3RhYnMnICovXHJcblx0XHRuYW1lOiAncGx1Z2luJyxcclxuXHJcblx0XHQvKiogRGVmYXVsdCBvcHRpb25zIGZvciBpbnN0YW5jZXMgb2YgdGhpcyBwbHVnaW4gKGRlZmF1bHQ6IHt9KS5cclxuXHRcdFx0QGV4YW1wbGUgZGVmYXVsdE9wdGlvbnM6IHtcclxuIFx0c2VsZWN0ZWRDbGFzczogJ3NlbGVjdGVkJyxcclxuIFx0dHJpZ2dlcnM6ICdjbGljaydcclxuIH0gKi9cclxuXHRcdGRlZmF1bHRPcHRpb25zOiB7fSxcclxuXHRcdFxyXG5cdFx0LyoqIE9wdGlvbnMgZGVwZW5kZW50IG9uIHRoZSBsb2NhbGUuXHJcblx0XHRcdEluZGV4ZWQgYnkgbGFuZ3VhZ2UgYW5kIChvcHRpb25hbCkgY291bnRyeSBjb2RlLCB3aXRoICcnIGRlbm90aW5nIHRoZSBkZWZhdWx0IGxhbmd1YWdlIChFbmdsaXNoL1VTKS5cclxuXHRcdFx0QGV4YW1wbGUgcmVnaW9uYWxPcHRpb25zOiB7XHJcblx0Jyc6IHtcclxuXHRcdGdyZWV0aW5nOiAnSGknXHJcblx0fVxyXG4gfSAqL1xyXG5cdFx0cmVnaW9uYWxPcHRpb25zOiB7fSxcclxuXHRcdFxyXG5cdFx0LyoqIE5hbWVzIG9mIGdldHRlciBtZXRob2RzIC0gdGhvc2UgdGhhdCBjYW4ndCBiZSBjaGFpbmVkIChkZWZhdWx0OiBbXSkuXHJcblx0XHRcdEBleGFtcGxlIF9nZXR0ZXJzOiBbJ2FjdGl2ZVRhYiddICovXHJcblx0XHRfZ2V0dGVyczogW10sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIGEgbWFya2VyIGNsYXNzIGZvciBhZmZlY3RlZCBlbGVtZW50cy5cclxuXHRcdFx0QHByaXZhdGVcclxuXHRcdFx0QHJldHVybiB7c3RyaW5nfSBUaGUgbWFya2VyIGNsYXNzLiAqL1xyXG5cdFx0X2dldE1hcmtlcjogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiAnaXMtJyArIHRoaXMubmFtZTtcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdC8qKiBJbml0aWFsaXNlIHRoZSBwbHVnaW4uXHJcblx0XHRcdENyZWF0ZSB0aGUgalF1ZXJ5IGJyaWRnZSAtIHBsdWdpbiBuYW1lIDxjb2RlPnh5ejwvY29kZT5cclxuXHRcdFx0cHJvZHVjZXMgPGNvZGU+JC54eXo8L2NvZGU+IGFuZCA8Y29kZT4kLmZuLnh5ejwvY29kZT4uICovXHJcblx0XHRfaW5pdDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdC8vIEFwcGx5IGRlZmF1bHQgbG9jYWxpc2F0aW9uc1xyXG5cdFx0XHQkLmV4dGVuZCh0aGlzLmRlZmF1bHRPcHRpb25zLCAodGhpcy5yZWdpb25hbE9wdGlvbnMgJiYgdGhpcy5yZWdpb25hbE9wdGlvbnNbJyddKSB8fCB7fSk7XHJcblx0XHRcdC8vIENhbWVsLWNhc2UgdGhlIG5hbWVcclxuXHRcdFx0dmFyIGpxTmFtZSA9IGNhbWVsQ2FzZSh0aGlzLm5hbWUpO1xyXG5cdFx0XHQvLyBFeHBvc2UgalF1ZXJ5IHNpbmdsZXRvbiBtYW5hZ2VyXHJcblx0XHRcdCRbanFOYW1lXSA9IHRoaXM7XHJcblx0XHRcdC8vIEV4cG9zZSBqUXVlcnkgY29sbGVjdGlvbiBwbHVnaW5cclxuXHRcdFx0JC5mbltqcU5hbWVdID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG5cdFx0XHRcdHZhciBvdGhlckFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xyXG5cdFx0XHRcdGlmICgkW2pxTmFtZV0uX2lzTm90Q2hhaW5lZChvcHRpb25zLCBvdGhlckFyZ3MpKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gJFtqcU5hbWVdW29wdGlvbnNdLmFwcGx5KCRbanFOYW1lXSwgW3RoaXNbMF1dLmNvbmNhdChvdGhlckFyZ3MpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnNbMF0gPT09ICdfJyB8fCAhJFtqcU5hbWVdW29wdGlvbnNdKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhyb3cgJ1Vua25vd24gbWV0aG9kOiAnICsgb3B0aW9ucztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHQkW2pxTmFtZV1bb3B0aW9uc10uYXBwbHkoJFtqcU5hbWVdLCBbdGhpc10uY29uY2F0KG90aGVyQXJncykpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdCRbanFOYW1lXS5fYXR0YWNoKHRoaXMsIG9wdGlvbnMpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9O1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogU2V0IGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgc3Vic2VxdWVudCBpbnN0YW5jZXMuXHJcblx0XHRcdEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IFRoZSBuZXcgZGVmYXVsdCBvcHRpb25zLlxyXG5cdFx0XHRAZXhhbXBsZSAkLnBsdWdpbi5zZXREZWZhdWxzKHtuYW1lOiB2YWx1ZX0pICovXHJcblx0XHRzZXREZWZhdWx0czogZnVuY3Rpb24ob3B0aW9ucykge1xyXG5cdFx0XHQkLmV4dGVuZCh0aGlzLmRlZmF1bHRPcHRpb25zLCBvcHRpb25zIHx8IHt9KTtcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdC8qKiBEZXRlcm1pbmUgd2hldGhlciBhIG1ldGhvZCBpcyBhIGdldHRlciBhbmQgZG9lc24ndCBwZXJtaXQgY2hhaW5pbmcuXHJcblx0XHRcdEBwcml2YXRlXHJcblx0XHRcdEBwYXJhbSBuYW1lIHtzdHJpbmd9IFRoZSBtZXRob2QgbmFtZS5cclxuXHRcdFx0QHBhcmFtIG90aGVyQXJncyB7YW55W119IEFueSBvdGhlciBhcmd1bWVudHMgZm9yIHRoZSBtZXRob2QuXHJcblx0XHRcdEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhpcyBtZXRob2QgaXMgYSBnZXR0ZXIsIGZhbHNlIG90aGVyd2lzZS4gKi9cclxuXHRcdF9pc05vdENoYWluZWQ6IGZ1bmN0aW9uKG5hbWUsIG90aGVyQXJncykge1xyXG5cdFx0XHRpZiAobmFtZSA9PT0gJ29wdGlvbicgJiYgKG90aGVyQXJncy5sZW5ndGggPT09IDAgfHxcclxuXHRcdFx0XHRcdChvdGhlckFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBvdGhlckFyZ3NbMF0gPT09ICdzdHJpbmcnKSkpIHtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gJC5pbkFycmF5KG5hbWUsIHRoaXMuX2dldHRlcnMpID4gLTE7XHJcblx0XHR9LFxyXG5cdFx0XHJcblx0XHQvKiogSW5pdGlhbGlzZSBhbiBlbGVtZW50LiBDYWxsZWQgaW50ZXJuYWxseSBvbmx5LlxyXG5cdFx0XHRBZGRzIGFuIGluc3RhbmNlIG9iamVjdCBhcyBkYXRhIG5hbWVkIGZvciB0aGUgcGx1Z2luLlxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIGVsZW1lbnQgdG8gZW5oYW5jZS5cclxuXHRcdFx0QHBhcmFtIG9wdGlvbnMge29iamVjdH0gT3ZlcnJpZGluZyBzZXR0aW5ncy4gKi9cclxuXHRcdF9hdHRhY2g6IGZ1bmN0aW9uKGVsZW0sIG9wdGlvbnMpIHtcclxuXHRcdFx0ZWxlbSA9ICQoZWxlbSk7XHJcblx0XHRcdGlmIChlbGVtLmhhc0NsYXNzKHRoaXMuX2dldE1hcmtlcigpKSkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbGVtLmFkZENsYXNzKHRoaXMuX2dldE1hcmtlcigpKTtcclxuXHRcdFx0b3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLCB0aGlzLl9nZXRNZXRhZGF0YShlbGVtKSwgb3B0aW9ucyB8fCB7fSk7XHJcblx0XHRcdHZhciBpbnN0ID0gJC5leHRlbmQoe25hbWU6IHRoaXMubmFtZSwgZWxlbTogZWxlbSwgb3B0aW9uczogb3B0aW9uc30sXHJcblx0XHRcdFx0dGhpcy5faW5zdFNldHRpbmdzKGVsZW0sIG9wdGlvbnMpKTtcclxuXHRcdFx0ZWxlbS5kYXRhKHRoaXMubmFtZSwgaW5zdCk7IC8vIFNhdmUgaW5zdGFuY2UgYWdhaW5zdCBlbGVtZW50XHJcblx0XHRcdHRoaXMuX3Bvc3RBdHRhY2goZWxlbSwgaW5zdCk7XHJcblx0XHRcdHRoaXMub3B0aW9uKGVsZW0sIG9wdGlvbnMpO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgYWRkaXRpb25hbCBpbnN0YW5jZSBzZXR0aW5ncy5cclxuXHRcdFx0T3ZlcnJpZGUgdGhpcyBpbiBhIHN1Yi1jbGFzcyB0byBwcm92aWRlIGV4dHJhIHNldHRpbmdzLlxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7alF1ZXJ5fSBUaGUgY3VycmVudCBqUXVlcnkgZWxlbWVudC5cclxuXHRcdFx0QHBhcmFtIG9wdGlvbnMge29iamVjdH0gVGhlIGluc3RhbmNlIG9wdGlvbnMuXHJcblx0XHRcdEByZXR1cm4ge29iamVjdH0gQW55IGV4dHJhIGluc3RhbmNlIHZhbHVlcy5cclxuXHRcdFx0QGV4YW1wbGUgX2luc3RTZXR0aW5nczogZnVuY3Rpb24oZWxlbSwgb3B0aW9ucykge1xyXG4gXHRyZXR1cm4ge25hdjogZWxlbS5maW5kKG9wdGlvbnMubmF2U2VsZWN0b3IpfTtcclxuIH0gKi9cclxuXHRcdF9pbnN0U2V0dGluZ3M6IGZ1bmN0aW9uKGVsZW0sIG9wdGlvbnMpIHtcclxuXHRcdFx0cmV0dXJuIHt9O1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUGx1Z2luIHNwZWNpZmljIHBvc3QgaW5pdGlhbGlzYXRpb24uXHJcblx0XHRcdE92ZXJyaWRlIHRoaXMgaW4gYSBzdWItY2xhc3MgdG8gcGVyZm9ybSBleHRyYSBhY3Rpdml0aWVzLlxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7alF1ZXJ5fSBUaGUgY3VycmVudCBqUXVlcnkgZWxlbWVudC5cclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAZXhhbXBsZSBfcG9zdEF0dGFjaDogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xyXG4gXHRlbGVtLm9uKCdjbGljay4nICsgdGhpcy5uYW1lLCBmdW5jdGlvbigpIHtcclxuIFx0XHQuLi5cclxuIFx0fSk7XHJcbiB9ICovXHJcblx0XHRfcG9zdEF0dGFjaDogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKiogUmV0cmlldmUgbWV0YWRhdGEgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBlbGVtZW50LlxyXG5cdFx0XHRNZXRhZGF0YSBpcyBzcGVjaWZpZWQgYXMgYW4gYXR0cmlidXRlOlxyXG5cdFx0XHQ8Y29kZT5kYXRhLSZsdDtwbHVnaW4gbmFtZT49XCImbHQ7c2V0dGluZyBuYW1lPjogJyZsdDt2YWx1ZT4nLCAuLi5cIjwvY29kZT4uXHJcblx0XHRcdERhdGVzIHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgc3RyaW5ncyBpbiB0aGlzIGZvcm1hdDogJ25ldyBEYXRlKHksIG0tMSwgZCknLlxyXG5cdFx0XHRAcHJpdmF0ZVxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7alF1ZXJ5fSBUaGUgc291cmNlIGVsZW1lbnQuXHJcblx0XHRcdEByZXR1cm4ge29iamVjdH0gVGhlIGlubGluZSBjb25maWd1cmF0aW9uIG9yIHt9LiAqL1xyXG5cdFx0X2dldE1ldGFkYXRhOiBmdW5jdGlvbihlbGVtKSB7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0dmFyIGRhdGEgPSBlbGVtLmRhdGEodGhpcy5uYW1lLnRvTG93ZXJDYXNlKCkpIHx8ICcnO1xyXG5cdFx0XHRcdGRhdGEgPSBkYXRhLnJlcGxhY2UoLycvZywgJ1wiJyk7XHJcblx0XHRcdFx0ZGF0YSA9IGRhdGEucmVwbGFjZSgvKFthLXpBLVowLTldKyk6L2csIGZ1bmN0aW9uKG1hdGNoLCBncm91cCwgaSkgeyBcclxuXHRcdFx0XHRcdHZhciBjb3VudCA9IGRhdGEuc3Vic3RyaW5nKDAsIGkpLm1hdGNoKC9cIi9nKTsgLy8gSGFuZGxlIGVtYmVkZGVkICc6J1xyXG5cdFx0XHRcdFx0cmV0dXJuICghY291bnQgfHwgY291bnQubGVuZ3RoICUgMiA9PT0gMCA/ICdcIicgKyBncm91cCArICdcIjonIDogZ3JvdXAgKyAnOicpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdGRhdGEgPSAkLnBhcnNlSlNPTigneycgKyBkYXRhICsgJ30nKTtcclxuXHRcdFx0XHRmb3IgKHZhciBuYW1lIGluIGRhdGEpIHsgLy8gQ29udmVydCBkYXRlc1xyXG5cdFx0XHRcdFx0dmFyIHZhbHVlID0gZGF0YVtuYW1lXTtcclxuXHRcdFx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLm1hdGNoKC9ebmV3IERhdGVcXCgoLiopXFwpJC8pKSB7XHJcblx0XHRcdFx0XHRcdGRhdGFbbmFtZV0gPSBldmFsKHZhbHVlKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGRhdGE7XHJcblx0XHRcdH1cclxuXHRcdFx0Y2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRyZXR1cm4ge307XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFJldHJpZXZlIHRoZSBpbnN0YW5jZSBkYXRhIGZvciBlbGVtZW50LlxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7RWxlbWVudH0gVGhlIHNvdXJjZSBlbGVtZW50LlxyXG5cdFx0XHRAcmV0dXJuIHtvYmplY3R9IFRoZSBpbnN0YW5jZSBkYXRhIG9yIHt9LiAqL1xyXG5cdFx0X2dldEluc3Q6IGZ1bmN0aW9uKGVsZW0pIHtcclxuXHRcdFx0cmV0dXJuICQoZWxlbSkuZGF0YSh0aGlzLm5hbWUpIHx8IHt9O1xyXG5cdFx0fSxcclxuXHRcdFxyXG5cdFx0LyoqIFJldHJpZXZlIG9yIHJlY29uZmlndXJlIHRoZSBzZXR0aW5ncyBmb3IgYSBwbHVnaW4uXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgc291cmNlIGVsZW1lbnQuXHJcblx0XHRcdEBwYXJhbSBuYW1lIHtvYmplY3R8c3RyaW5nfSBUaGUgY29sbGVjdGlvbiBvZiBuZXcgb3B0aW9uIHZhbHVlcyBvciB0aGUgbmFtZSBvZiBhIHNpbmdsZSBvcHRpb24uXHJcblx0XHRcdEBwYXJhbSBbdmFsdWVdIHthbnl9IFRoZSB2YWx1ZSBmb3IgYSBzaW5nbGUgbmFtZWQgb3B0aW9uLlxyXG5cdFx0XHRAcmV0dXJuIHthbnl8b2JqZWN0fSBJZiByZXRyaWV2aW5nIGEgc2luZ2xlIHZhbHVlIG9yIGFsbCBvcHRpb25zLlxyXG5cdFx0XHRAZXhhbXBsZSAkKHNlbGVjdG9yKS5wbHVnaW4oJ29wdGlvbicsICduYW1lJywgdmFsdWUpXHJcbiAkKHNlbGVjdG9yKS5wbHVnaW4oJ29wdGlvbicsIHtuYW1lOiB2YWx1ZSwgLi4ufSlcclxuIHZhciB2YWx1ZSA9ICQoc2VsZWN0b3IpLnBsdWdpbignb3B0aW9uJywgJ25hbWUnKVxyXG4gdmFyIG9wdGlvbnMgPSAkKHNlbGVjdG9yKS5wbHVnaW4oJ29wdGlvbicpICovXHJcblx0XHRvcHRpb246IGZ1bmN0aW9uKGVsZW0sIG5hbWUsIHZhbHVlKSB7XHJcblx0XHRcdGVsZW0gPSAkKGVsZW0pO1xyXG5cdFx0XHR2YXIgaW5zdCA9IGVsZW0uZGF0YSh0aGlzLm5hbWUpO1xyXG5cdFx0XHRpZiAgKCFuYW1lIHx8ICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgPT0gbnVsbCkpIHtcclxuXHRcdFx0XHR2YXIgb3B0aW9ucyA9IChpbnN0IHx8IHt9KS5vcHRpb25zO1xyXG5cdFx0XHRcdHJldHVybiAob3B0aW9ucyAmJiBuYW1lID8gb3B0aW9uc1tuYW1lXSA6IG9wdGlvbnMpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghZWxlbS5oYXNDbGFzcyh0aGlzLl9nZXRNYXJrZXIoKSkpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIG9wdGlvbnMgPSBuYW1lIHx8IHt9O1xyXG5cdFx0XHRpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdFx0b3B0aW9ucyA9IHt9O1xyXG5cdFx0XHRcdG9wdGlvbnNbbmFtZV0gPSB2YWx1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLl9vcHRpb25zQ2hhbmdlZChlbGVtLCBpbnN0LCBvcHRpb25zKTtcclxuXHRcdFx0JC5leHRlbmQoaW5zdC5vcHRpb25zLCBvcHRpb25zKTtcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdC8qKiBQbHVnaW4gc3BlY2lmaWMgb3B0aW9ucyBwcm9jZXNzaW5nLlxyXG5cdFx0XHRPbGQgdmFsdWUgYXZhaWxhYmxlIGluIDxjb2RlPmluc3Qub3B0aW9uc1tuYW1lXTwvY29kZT4sIG5ldyB2YWx1ZSBpbiA8Y29kZT5vcHRpb25zW25hbWVdPC9jb2RlPi5cclxuXHRcdFx0T3ZlcnJpZGUgdGhpcyBpbiBhIHN1Yi1jbGFzcyB0byBwZXJmb3JtIGV4dHJhIGFjdGl2aXRpZXMuXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtqUXVlcnl9IFRoZSBjdXJyZW50IGpRdWVyeSBlbGVtZW50LlxyXG5cdFx0XHRAcGFyYW0gaW5zdCB7b2JqZWN0fSBUaGUgaW5zdGFuY2Ugc2V0dGluZ3MuXHJcblx0XHRcdEBwYXJhbSBvcHRpb25zIHtvYmplY3R9IFRoZSBuZXcgb3B0aW9ucy5cclxuXHRcdFx0QGV4YW1wbGUgX29wdGlvbnNDaGFuZ2VkOiBmdW5jdGlvbihlbGVtLCBpbnN0LCBvcHRpb25zKSB7XHJcbiBcdGlmIChvcHRpb25zLm5hbWUgIT0gaW5zdC5vcHRpb25zLm5hbWUpIHtcclxuIFx0XHRlbGVtLnJlbW92ZUNsYXNzKGluc3Qub3B0aW9ucy5uYW1lKS5hZGRDbGFzcyhvcHRpb25zLm5hbWUpO1xyXG4gXHR9XHJcbiB9ICovXHJcblx0XHRfb3B0aW9uc0NoYW5nZWQ6IGZ1bmN0aW9uKGVsZW0sIGluc3QsIG9wdGlvbnMpIHtcclxuXHRcdH0sXHJcblx0XHRcclxuXHRcdC8qKiBSZW1vdmUgYWxsIHRyYWNlIG9mIHRoZSBwbHVnaW4uXHJcblx0XHRcdE92ZXJyaWRlIDxjb2RlPl9wcmVEZXN0cm95PC9jb2RlPiBmb3IgcGx1Z2luLXNwZWNpZmljIHByb2Nlc3NpbmcuXHJcblx0XHRcdEBwYXJhbSBlbGVtIHtFbGVtZW50fSBUaGUgc291cmNlIGVsZW1lbnQuXHJcblx0XHRcdEBleGFtcGxlICQoc2VsZWN0b3IpLnBsdWdpbignZGVzdHJveScpICovXHJcblx0XHRkZXN0cm95OiBmdW5jdGlvbihlbGVtKSB7XHJcblx0XHRcdGVsZW0gPSAkKGVsZW0pO1xyXG5cdFx0XHRpZiAoIWVsZW0uaGFzQ2xhc3ModGhpcy5fZ2V0TWFya2VyKCkpKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuX3ByZURlc3Ryb3koZWxlbSwgdGhpcy5fZ2V0SW5zdChlbGVtKSk7XHJcblx0XHRcdGVsZW0ucmVtb3ZlRGF0YSh0aGlzLm5hbWUpLnJlbW92ZUNsYXNzKHRoaXMuX2dldE1hcmtlcigpKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqIFBsdWdpbiBzcGVjaWZpYyBwcmUgZGVzdHJ1Y3Rpb24uXHJcblx0XHRcdE92ZXJyaWRlIHRoaXMgaW4gYSBzdWItY2xhc3MgdG8gcGVyZm9ybSBleHRyYSBhY3Rpdml0aWVzIGFuZCB1bmRvIGV2ZXJ5dGhpbmcgdGhhdCB3YXNcclxuXHRcdFx0ZG9uZSBpbiB0aGUgPGNvZGU+X3Bvc3RBdHRhY2g8L2NvZGU+IG9yIDxjb2RlPl9vcHRpb25zQ2hhbmdlZDwvY29kZT4gZnVuY3Rpb25zLlxyXG5cdFx0XHRAcGFyYW0gZWxlbSB7alF1ZXJ5fSBUaGUgY3VycmVudCBqUXVlcnkgZWxlbWVudC5cclxuXHRcdFx0QHBhcmFtIGluc3Qge29iamVjdH0gVGhlIGluc3RhbmNlIHNldHRpbmdzLlxyXG5cdFx0XHRAZXhhbXBsZSBfcHJlRGVzdHJveTogZnVuY3Rpb24oZWxlbSwgaW5zdCkge1xyXG4gXHRlbGVtLm9mZignLicgKyB0aGlzLm5hbWUpO1xyXG4gfSAqL1xyXG5cdFx0X3ByZURlc3Ryb3k6IGZ1bmN0aW9uKGVsZW0sIGluc3QpIHtcclxuXHRcdH1cclxuXHR9KTtcclxuXHRcclxuXHQvKiogQ29udmVydCBuYW1lcyBmcm9tIGh5cGhlbmF0ZWQgdG8gY2FtZWwtY2FzZS5cclxuXHRcdEBwcml2YXRlXHJcblx0XHRAcGFyYW0gdmFsdWUge3N0cmluZ30gVGhlIG9yaWdpbmFsIGh5cGhlbmF0ZWQgbmFtZS5cclxuXHRcdEByZXR1cm4ge3N0cmluZ30gVGhlIGNhbWVsLWNhc2UgdmVyc2lvbi4gKi9cclxuXHRmdW5jdGlvbiBjYW1lbENhc2UobmFtZSkge1xyXG5cdFx0cmV0dXJuIG5hbWUucmVwbGFjZSgvLShbYS16XSkvZywgZnVuY3Rpb24obWF0Y2gsIGdyb3VwKSB7XHJcblx0XHRcdHJldHVybiBncm91cC50b1VwcGVyQ2FzZSgpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdFxyXG5cdC8qKiBFeHBvc2UgdGhlIHBsdWdpbiBiYXNlLlxyXG5cdFx0QG5hbWVzcGFjZSBcIiQuSlFQbHVnaW5cIiAqL1xyXG5cdCQuSlFQbHVnaW4gPSB7XHJcblx0XHJcblx0XHQvKiogQ3JlYXRlIGEgbmV3IGNvbGxlY3Rpb24gcGx1Z2luLlxyXG5cdFx0XHRAbWVtYmVyb2YgXCIkLkpRUGx1Z2luXCJcclxuXHRcdFx0QHBhcmFtIFtzdXBlckNsYXNzPSdKUVBsdWdpbiddIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBwYXJlbnQgY2xhc3MgdG8gaW5oZXJpdCBmcm9tLlxyXG5cdFx0XHRAcGFyYW0gb3ZlcnJpZGVzIHtvYmplY3R9IFRoZSBwcm9wZXJ0eS9mdW5jdGlvbiBvdmVycmlkZXMgZm9yIHRoZSBuZXcgY2xhc3MuXHJcblx0XHRcdEBleGFtcGxlICQuSlFQbHVnaW4uY3JlYXRlUGx1Z2luKHtcclxuIFx0bmFtZTogJ3RhYnMnLFxyXG4gXHRkZWZhdWx0T3B0aW9uczoge3NlbGVjdGVkQ2xhc3M6ICdzZWxlY3RlZCd9LFxyXG4gXHRfaW5pdFNldHRpbmdzOiBmdW5jdGlvbihlbGVtLCBvcHRpb25zKSB7IHJldHVybiB7Li4ufTsgfSxcclxuIFx0X3Bvc3RBdHRhY2g6IGZ1bmN0aW9uKGVsZW0sIGluc3QpIHsgLi4uIH1cclxuIH0pOyAqL1xyXG5cdFx0Y3JlYXRlUGx1Z2luOiBmdW5jdGlvbihzdXBlckNsYXNzLCBvdmVycmlkZXMpIHtcclxuXHRcdFx0aWYgKHR5cGVvZiBzdXBlckNsYXNzID09PSAnb2JqZWN0Jykge1xyXG5cdFx0XHRcdG92ZXJyaWRlcyA9IHN1cGVyQ2xhc3M7XHJcblx0XHRcdFx0c3VwZXJDbGFzcyA9ICdKUVBsdWdpbic7XHJcblx0XHRcdH1cclxuXHRcdFx0c3VwZXJDbGFzcyA9IGNhbWVsQ2FzZShzdXBlckNsYXNzKTtcclxuXHRcdFx0dmFyIGNsYXNzTmFtZSA9IGNhbWVsQ2FzZShvdmVycmlkZXMubmFtZSk7XHJcblx0XHRcdEpRQ2xhc3MuY2xhc3Nlc1tjbGFzc05hbWVdID0gSlFDbGFzcy5jbGFzc2VzW3N1cGVyQ2xhc3NdLmV4dGVuZChvdmVycmlkZXMpO1xyXG5cdFx0XHRuZXcgSlFDbGFzcy5jbGFzc2VzW2NsYXNzTmFtZV0oKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxufSkoalF1ZXJ5KTsiXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.utils.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.utils.js index b14ca689744..daf87e9f76b 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.utils.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.utils.js @@ -2782,4 +2782,4 @@ $.fn.extend({ })(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS51dGlscy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkudXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICBqUXVlcnkgdXRpbHMgLSAwLjguNVxuICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvanF1ZXJ5LXV0aWxzL1xuXG4gIChjKSBNYXhpbWUgSGFpbmVhdWx0IDxoYWluZWF1bHRAZ21haWwuY29tPiBcbiAgaHR0cDovL2hhaW5lYXVsdC5jb21cblxuICBNSVQgTGljZW5zZSAoaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblxuKi9cblxuKGZ1bmN0aW9uKCQpe1xuICAgICAkLmV4dGVuZCgkLmV4cHJbJzonXSwge1xuICAgICAgICAvLyBjYXNlIGluc2Vuc2l0aXZlIHZlcnNpb24gb2YgOmNvbnRhaW5zXG4gICAgICAgIGljb250YWluczogZnVuY3Rpb24oYSxpLG0pe3JldHVybiAoYS50ZXh0Q29udGVudHx8YS5pbm5lclRleHR8fGpRdWVyeShhKS50ZXh0KCl8fFwiXCIpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihtWzNdLnRvTG93ZXJDYXNlKCkpPj0wO31cbiAgICB9KTtcblxuICAgICQuaXRlcmF0b3JzID0ge1xuICAgICAgICBnZXRUZXh0OiAgZnVuY3Rpb24oKSB7IHJldHVybiAkKHRoaXMpLnRleHQoKTsgfSxcbiAgICAgICAgcGFyc2VJbnQ6IGZ1bmN0aW9uKHYpeyByZXR1cm4gcGFyc2VJbnQodiwgMTApOyB9XG4gICAgfTtcblxuXHQkLmV4dGVuZCh7IFxuXG4gICAgICAgIC8vIFJldHVybnMgYSByYW5nZSBvYmplY3RcbiAgICAgICAgLy8gQXV0aG9yOiBNYXR0aGlhcyBNaWxsZXJcbiAgICAgICAgLy8gU2l0ZTogICBodHRwOi8vYmxvZy5vdXRvZmhhbndlbGwuY29tLzIwMDYvMDMvMjkvamF2YXNjcmlwdC1yYW5nZS1mdW5jdGlvbi9cbiAgICAgICAgcmFuZ2U6ICBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgeyByZXR1cm4gW107IH1cbiAgICAgICAgICAgIHZhciBtaW4sIG1heCwgc3RlcDtcbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgICAgICBtaW4gID0gMDtcbiAgICAgICAgICAgICAgICBtYXggID0gYXJndW1lbnRzWzBdLTE7XG4gICAgICAgICAgICAgICAgc3RlcCA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHN0ZXAgdG8gMSBpZiBpdCdzIHplcm8gb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgbWluICA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBtYXggID0gYXJndW1lbnRzWzFdLTE7XG4gICAgICAgICAgICAgICAgc3RlcCA9IGFyZ3VtZW50c1syXSB8fCAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29udmVydCBuZWdhdGl2ZSBzdGVwcyB0byBwb3NpdGl2ZSBhbmQgcmV2ZXJzZSBtaW4vbWF4XG4gICAgICAgICAgICBpZiAoc3RlcCA8IDAgJiYgbWluID49IG1heCkge1xuICAgICAgICAgICAgICAgIHN0ZXAgKj0gLTE7XG4gICAgICAgICAgICAgICAgdmFyIHRtcCA9IG1pbjtcbiAgICAgICAgICAgICAgICBtaW4gPSBtYXg7XG4gICAgICAgICAgICAgICAgbWF4ID0gdG1wO1xuICAgICAgICAgICAgICAgIG1pbiArPSAoKG1heC1taW4pICUgc3RlcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYSA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IG1pbjsgaSA8PSBtYXg7IGkgKz0gc3RlcCkgeyBhLnB1c2goaSk7IH1cbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFRha2VuIGZyb20gdWkuY29yZS5qcy4gXG4gICAgICAgIC8vIFdoeSBhcmUgeW91IGtlZXBpbmcgdGhpcyBnZW0gZm9yIHlvdXJzZWxmIGd1eXMgPyA6fFxuICAgICAgICBrZXlDb2RlOiB7XG4gICAgICAgICAgICBCQUNLU1BBQ0U6IDgsIENBUFNfTE9DSzogMjAsIENPTU1BOiAxODgsIENPTlRST0w6IDE3LCBERUxFVEU6IDQ2LCBET1dOOiA0MCxcbiAgICAgICAgICAgIEVORDogMzUsIEVOVEVSOiAxMywgRVNDQVBFOiAyNywgSE9NRTogMzYsIElOU0VSVDogIDQ1LCBMRUZUOiAzNyxcbiAgICAgICAgICAgIE5VTVBBRF9BREQ6IDEwNywgTlVNUEFEX0RFQ0lNQUw6IDExMCwgTlVNUEFEX0RJVklERTogMTExLCBOVU1QQURfRU5URVI6IDEwOCwgXG4gICAgICAgICAgICBOVU1QQURfTVVMVElQTFk6IDEwNiwgTlVNUEFEX1NVQlRSQUNUOiAxMDksIFBBR0VfRE9XTjogMzQsIFBBR0VfVVA6IDMzLCBcbiAgICAgICAgICAgIFBFUklPRDogMTkwLCBSSUdIVDogMzksIFNISUZUOiAxNiwgU1BBQ0U6IDMyLCBUQUI6IDksIFVQOiAzOFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gVGFrZXMgYSBrZXlib2FyZCBldmVudCBhbmQgcmV0dXJuIHRydWUgaWYgdGhlIGtleWNvZGUgbWF0Y2ggdGhlIHNwZWNpZmllZCBrZXljb2RlXG4gICAgICAgIGtleUlzOiBmdW5jdGlvbihrLCBlKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoJC5rZXlDb2RlW2sudG9VcHBlckNhc2UoKV0sIDEwKSA9PSBwYXJzZUludCgodHlwZW9mKGUpID09ICdudW1iZXInICk/IGU6IGUua2V5Q29kZSwgMTApO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLy8gUmV0dXJucyB0aGUga2V5IG9mIGFuIGFycmF5XG4gICAgICAgIGtleXM6IGZ1bmN0aW9uKGFycikge1xuICAgICAgICAgICAgdmFyIG8gPSBbXTtcbiAgICAgICAgICAgIGZvciAoayBpbiBhcnIpIHsgby5wdXNoKGspOyB9XG4gICAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBSZWRpcmVjdCB0byBhIHNwZWNpZmllZCB1cmxcbiAgICAgICAgcmVkaXJlY3Q6IGZ1bmN0aW9uKHVybCkge1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XG4gICAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFN0b3AgZXZlbnQgc2hvcnRoYW5kXG4gICAgICAgIHN0b3A6IGZ1bmN0aW9uKGUsIHByZXZlbnREZWZhdWx0LCBzdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICAgIGlmIChwcmV2ZW50RGVmYXVsdCkgIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyB9XG4gICAgICAgICAgICBpZiAoc3RvcFByb3BhZ2F0aW9uKSB7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IH1cbiAgICAgICAgICAgIHJldHVybiBwcmV2ZW50RGVmYXVsdCAmJiBmYWxzZSB8fCB0cnVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFJldHVybnMgdGhlIGJhc2VuYW1lIG9mIGEgcGF0aFxuICAgICAgICBiYXNlbmFtZTogZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICAgICAgdmFyIHQgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICByZXR1cm4gdFt0Lmxlbmd0aF0gPT09ICcnICYmIHMgfHwgdC5zbGljZSgwLCB0Lmxlbmd0aCkuam9pbignLycpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFJldHVybnMgdGhlIGZpbGVuYW1lIG9mIGEgcGF0aFxuICAgICAgICBmaWxlbmFtZTogZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoJy8nKS5wb3AoKTtcbiAgICAgICAgfSwgXG5cbiAgICAgICAgLy8gUmV0dXJucyBhIGZvcm1hdGVkIGZpbGUgc2l6ZVxuICAgICAgICBmaWxlc2l6ZWZvcm1hdDogZnVuY3Rpb24oYnl0ZXMsIHN1ZmZpeGVzKXtcbiAgICAgICAgICAgIHZhciBiID0gcGFyc2VJbnQoYnl0ZXMsIDEwKTtcbiAgICAgICAgICAgIHZhciBzID0gc3VmZml4ZXMgfHwgWydieXRlJywgJ2J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJ107XG4gICAgICAgICAgICBpZiAoaXNOYU4oYikgfHwgYiA9PT0gMCkgeyByZXR1cm4gJzAgJyArIHNbMF07IH1cbiAgICAgICAgICAgIGlmIChiID09IDEpICAgICAgICAgICAgICB7IHJldHVybiAnMSAnICsgc1swXTsgfVxuICAgICAgICAgICAgaWYgKGIgPCAxMDI0KSAgICAgICAgICAgIHsgcmV0dXJuICBiLnRvRml4ZWQoMikgKyAnICcgKyBzWzFdOyB9XG4gICAgICAgICAgICBpZiAoYiA8IDEwNDg1NzYpICAgICAgICAgeyByZXR1cm4gKGIgLyAxMDI0KS50b0ZpeGVkKDIpICsgJyAnICsgc1syXTsgfVxuICAgICAgICAgICAgaWYgKGIgPCAxMDczNzQxODI0KSAgICAgIHsgcmV0dXJuIChiIC8gMTA0ODU3NikudG9GaXhlZCgyKSArICcgJysgc1szXTsgfVxuICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIChiIC8gMTA3Mzc0MTgyNCkudG9GaXhlZCgyKSArICcgJysgc1s0XTsgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGZpbGVFeHRlbnNpb246IGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgICAgIHZhciB0b2tlbnMgPSBzLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW5zW3Rva2Vucy5sZW5ndGgtMV0gfHwgZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW4gb2JqZWN0IGlzIGEgU3RyaW5nXG4gICAgICAgIGlzU3RyaW5nOiBmdW5jdGlvbihvKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mKG8pID09ICdzdHJpbmcnICYmIHRydWUgfHwgZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW4gb2JqZWN0IGlzIGEgUmVnRXhwXG5cdFx0aXNSZWdFeHA6IGZ1bmN0aW9uKG8pIHtcblx0XHRcdHJldHVybiBvICYmIG8uY29uc3RydWN0b3IudG9TdHJpbmcoKS5pbmRleE9mKCdSZWdFeHAoKScpICE9IC0xIHx8IGZhbHNlO1xuXHRcdH0sXG5cbiAgICAgICAgaXNPYmplY3Q6IGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICAgIHJldHVybiAodHlwZW9mKG8pID09ICdvYmplY3QnKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIC8vIENvbnZlcnQgaW5wdXQgdG8gY3VycmVuY3kgKHR3byBkZWNpbWFsIGZpeGVkIG51bWJlcilcblx0XHR0b0N1cnJlbmN5OiBmdW5jdGlvbihpKSB7XG5cdFx0XHRpID0gcGFyc2VGbG9hdChpLCAxMCkudG9GaXhlZCgyKTtcblx0XHRcdHJldHVybiAoaT09J05hTicpID8gJzAuMDAnIDogaTtcblx0XHR9LFxuXG4gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gXG4gICAgICAgICAqIGphdmFzY3JpcHQgbWV0aG9kOiBcInB4VG9FbVwiXG4gICAgICAgICAqIGJ5OlxuICAgICAgICAgICBTY290dCBKZWhsIChzY290dEBmaWxhbWVudGdyb3VwLmNvbSkgXG4gICAgICAgICAgIE1hZ2dpZSBXYWNocyAobWFnZ2llQGZpbGFtZW50Z3JvdXAuY29tKVxuICAgICAgICAgICBodHRwOi8vd3d3LmZpbGFtZW50Z3JvdXAuY29tXG4gICAgICAgICAqXG4gICAgICAgICAqIENvcHlyaWdodCAoYykgMjAwOCBGaWxhbWVudCBHcm91cFxuICAgICAgICAgKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKGZpbGFtZW50Z3JvdXAuY29tL2V4YW1wbGVzL21pdC1saWNlbnNlLnR4dCkgYW5kIEdQTCAoZmlsYW1lbnRncm91cC5jb20vZXhhbXBsZXMvZ3BsLWxpY2Vuc2UudHh0KSBsaWNlbnNlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogRGVzY3JpcHRpb246IHB4VG9FbSBjb252ZXJ0cyBhIHBpeGVsIHZhbHVlIHRvIGVtcyBkZXBlbmRpbmcgb24gaW5oZXJpdGVkIGZvbnQgc2l6ZS4gIFxuICAgICAgICAgKiBBcnRpY2xlOiBodHRwOi8vd3d3LmZpbGFtZW50Z3JvdXAuY29tL2xhYi9yZXRhaW5pbmdfc2NhbGFibGVfaW50ZXJmYWNlc193aXRoX3BpeGVsX3RvX2VtX2NvbnZlcnNpb24vXG4gICAgICAgICAqIERlbW86IGh0dHA6Ly93d3cuZmlsYW1lbnRncm91cC5jb20vZXhhbXBsZXMvcHhUb0VtL1x0IFx0XG4gICAgICAgICAqXHRcdFx0XHRcdFx0XHRcbiAgICAgICAgICogT3B0aW9uczogIFx0IFx0XHRcdFx0XHRcdFx0XHRcbiAgICAgICAgICAgICAgICBzY29wZTogc3RyaW5nIG9yIGpRdWVyeSBzZWxlY3RvciBmb3IgZm9udC1zaXplIHNjb3BpbmdcbiAgICAgICAgICAgICAgICByZXZlcnNlOiBCb29sZWFuLCB0cnVlIHJldmVyc2VzIHRoZSBjb252ZXJzaW9uIHRvIGVtLXB4XG4gICAgICAgICAqIERlcGVuZGVuY2llczogalF1ZXJ5IGxpYnJhcnlcdFx0XHRcdFx0XHQgIFxuICAgICAgICAgKiBVc2FnZSBFeGFtcGxlOiBteVBpeGVsVmFsdWUucHhUb0VtKCk7IG9yIG15UGl4ZWxWYWx1ZS5weFRvRW0oeydzY29wZSc6JyNuYXZpZ2F0aW9uJywgcmV2ZXJzZTogdHJ1ZX0pO1xuICAgICAgICAgKlxuICAgICAgICAgKiBWZXJzaW9uOiAyLjEsIDE4LjEyLjIwMDhcbiAgICAgICAgICogQ2hhbmdlbG9nOlxuICAgICAgICAgKlx0XHQwOC4wMi4yMDA3IGluaXRpYWwgVmVyc2lvbiAxLjBcbiAgICAgICAgICpcdFx0MDguMDEuMjAwOCAtIGZpeGVkIGZvbnQtc2l6ZSBjYWxjdWxhdGlvbiBmb3IgSUVcbiAgICAgICAgICpcdFx0MTguMTIuMjAwOCAtIHJlbW92ZWQgbmF0aXZlIG9iamVjdCBwcm90b3R5cGluZyB0byBzdGF5IGluIGpRdWVyeSdzIHNwaXJpdCwganNMaW50ZWQgKE1heGltZSBIYWluZWF1bHQgPGhhaW5lYXVsdEBnbWFpbC5jb20+KVxuICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAgICAgcHhUb0VtOiBmdW5jdGlvbihpLCBzZXR0aW5ncyl7XG4gICAgICAgICAgICAvL3NldCBkZWZhdWx0c1xuICAgICAgICAgICAgc2V0dGluZ3MgPSBqUXVlcnkuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICBzY29wZTogJ2JvZHknLFxuICAgICAgICAgICAgICAgIHJldmVyc2U6IGZhbHNlXG4gICAgICAgICAgICB9LCBzZXR0aW5ncyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBweFZhbCA9IChpID09PSAnJykgPyAwIDogcGFyc2VGbG9hdChpKTtcbiAgICAgICAgICAgIHZhciBzY29wZVZhbDtcbiAgICAgICAgICAgIHZhciBnZXRXaW5kb3dXaWR0aCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgdmFyIGRlID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmlubmVyV2lkdGggfHwgKGRlICYmIGRlLmNsaWVudFdpZHRoKSB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgfTtcdFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvKiBXaGVuIGEgcGVyY2VudGFnZS1iYXNlZCBmb250LXNpemUgaXMgc2V0IG9uIHRoZSBib2R5LCBJRSByZXR1cm5zIHRoYXQgcGVyY2VudCBvZiB0aGUgd2luZG93IHdpZHRoIGFzIHRoZSBmb250LXNpemUuIFxuICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgYm9keSBmb250LXNpemUgaXMgNjIuNSUgYW5kIHRoZSB3aW5kb3cgd2lkdGggaXMgMTAwMHB4LCBJRSB3aWxsIHJldHVybiA2MjVweCBhcyB0aGUgZm9udC1zaXplLiBcdFxuICAgICAgICAgICAgICAgIFdoZW4gdGhpcyBoYXBwZW5zLCB3ZSBjYWxjdWxhdGUgdGhlIGNvcnJlY3QgYm9keSBmb250LXNpemUgKCUpIGFuZCBtdWx0aXBseSBpdCBieSAxNiAodGhlIHN0YW5kYXJkIGJyb3dzZXIgZm9udCBzaXplKSBcbiAgICAgICAgICAgICAgICB0byBnZXQgYW4gYWNjdXJhdGUgZW0gdmFsdWUuICovXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5zY29wZSA9PSAnYm9keScgJiYgJC5icm93c2VyLm1zaWUgJiYgKHBhcnNlRmxvYXQoJCgnYm9keScpLmNzcygnZm9udC1zaXplJykpIC8gZ2V0V2luZG93V2lkdGgoKSkudG9GaXhlZCgxKSA+IDAuMCkge1xuICAgICAgICAgICAgICAgIHZhciBjYWxjRm9udFNpemUgPSBmdW5jdGlvbigpe1x0XHRcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChwYXJzZUZsb2F0KCQoJ2JvZHknKS5jc3MoJ2ZvbnQtc2l6ZScpKS9nZXRXaW5kb3dXaWR0aCgpKS50b0ZpeGVkKDMpICogMTY7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBzY29wZVZhbCA9IGNhbGNGb250U2l6ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7IHNjb3BlVmFsID0gcGFyc2VGbG9hdChqUXVlcnkoc2V0dGluZ3Muc2NvcGUpLmNzcyhcImZvbnQtc2l6ZVwiKSk7IH1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gKHNldHRpbmdzLnJldmVyc2UgPT09IHRydWUpID8gKHB4VmFsICogc2NvcGVWYWwpLnRvRml4ZWQoMikgKyAncHgnIDogKHB4VmFsIC8gc2NvcGVWYWwpLnRvRml4ZWQoMikgKyAnZW0nO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXHR9KTtcblxuXHQkLmV4dGVuZCgkLmZuLCB7IFxuICAgICAgICB0eXBlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRyeSB7IHJldHVybiAkKHRoaXMpLmdldCgwKS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyB9XG4gICAgICAgICAgICBjYXRjaChlKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBTZWxlY3QgYSB0ZXh0IHJhbmdlIGluIGEgdGV4dGFyZWFcbiAgICAgICAgc2VsZWN0UmFuZ2U6IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpe1xuICAgICAgICAgICAgLy8gdXNlIG9ubHkgdGhlIGZpcnN0IG9uZSBzaW5jZSBvbmx5IG9uZSBpbnB1dCBjYW4gYmUgZm9jdXNlZFxuICAgICAgICAgICAgaWYgKCQodGhpcykuZ2V0KDApLmNyZWF0ZVRleHRSYW5nZSkge1xuICAgICAgICAgICAgICAgIHZhciByYW5nZSA9ICQodGhpcykuZ2V0KDApLmNyZWF0ZVRleHRSYW5nZSgpO1xuICAgICAgICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgICAgICAgICAgICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsICAgZW5kKTtcbiAgICAgICAgICAgICAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHN0YXJ0KTtcbiAgICAgICAgICAgICAgICByYW5nZS5zZWxlY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCQodGhpcykuZ2V0KDApLnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5iaW5kKCdmb2N1cycsIGZ1bmN0aW9uKGUpe1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfSkuZ2V0KDApLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICQodGhpcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBcbiAgICAgICAgICogSlF1ZXJ5IFBsdWdpbjogXCJFcXVhbEhlaWdodHNcIlxuICAgICAgICAgKiBieTpcdFNjb3R0IEplaGwsIFRvZGQgUGFya2VyLCBNYWdnaWUgQ29zdGVsbG8gV2FjaHMgKGh0dHA6Ly93d3cuZmlsYW1lbnRncm91cC5jb20pXG4gICAgICAgICAqXG4gICAgICAgICAqIENvcHlyaWdodCAoYykgMjAwOCBGaWxhbWVudCBHcm91cFxuICAgICAgICAgKiBMaWNlbnNlZCB1bmRlciBHUEwgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UucGhwKVxuICAgICAgICAgKlxuICAgICAgICAgKiBEZXNjcmlwdGlvbjogQ29tcGFyZXMgdGhlIGhlaWdodHMgb3Igd2lkdGhzIG9mIHRoZSB0b3AtbGV2ZWwgY2hpbGRyZW4gb2YgYSBwcm92aWRlZCBlbGVtZW50IFxuICAgICAgICAgICAgICAgIGFuZCBzZXRzIHRoZWlyIG1pbi1oZWlnaHQgdG8gdGhlIHRhbGxlc3QgaGVpZ2h0IChvciB3aWR0aCB0byB3aWRlc3Qgd2lkdGgpLiBTZXRzIGluIGVtIHVuaXRzIFxuICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgaWYgcHhUb0VtKCkgbWV0aG9kIGlzIGF2YWlsYWJsZS5cbiAgICAgICAgICogRGVwZW5kZW5jaWVzOiBqUXVlcnkgbGlicmFyeSwgcHhUb0VtIG1ldGhvZFx0KGFydGljbGU6IFxuICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuZmlsYW1lbnRncm91cC5jb20vbGFiL3JldGFpbmluZ19zY2FsYWJsZV9pbnRlcmZhY2VzX3dpdGhfcGl4ZWxfdG9fZW1fY29udmVyc2lvbi8pXHRcdFx0XHRcdFx0XHQgIFxuICAgICAgICAgKiBVc2FnZSBFeGFtcGxlOiAkKGVsZW1lbnQpLmVxdWFsSGVpZ2h0cygpO1xuICAgICAgICAgICAgICAgIE9wdGlvbmFsOiB0byBzZXQgbWluLWhlaWdodCBpbiBweCwgcGFzcyBhIHRydWUgYXJndW1lbnQ6ICQoZWxlbWVudCkuZXF1YWxIZWlnaHRzKHRydWUpO1xuICAgICAgICAgKiBWZXJzaW9uOiAyLjEsIDE4LjEyLjIwMDhcbiAgICAgICAgICpcbiAgICAgICAgICogTm90ZTogQ2hhbmdlZCBweFRvRW0gY2FsbCB0byBjYWxsICQucHhUb0VtIGluc3RlYWQsIGpzTGludGVkIChNYXhpbWUgSGFpbmVhdWx0IDxoYWluZWF1bHRAZ21haWwuY29tPilcbiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgICAgIGVxdWFsSGVpZ2h0czogZnVuY3Rpb24ocHgpe1xuICAgICAgICAgICAgJCh0aGlzKS5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRUYWxsZXN0ID0gMDtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbihpKXtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuaGVpZ2h0KCkgPiBjdXJyZW50VGFsbGVzdCkgeyBjdXJyZW50VGFsbGVzdCA9ICQodGhpcykuaGVpZ2h0KCk7IH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIXB4IHx8ICEkLnB4VG9FbSkgeyBjdXJyZW50VGFsbGVzdCA9ICQucHhUb0VtKGN1cnJlbnRUYWxsZXN0KTsgfSAvL3VzZSBlbXMgdW5sZXNzIHB4IGlzIHNwZWNpZmllZFxuICAgICAgICAgICAgICAgIC8vIGZvciBpZTYsIHNldCBoZWlnaHQgc2luY2UgbWluLWhlaWdodCBpc24ndCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICBpZiAoJC5icm93c2VyLm1zaWUgJiYgJC5icm93c2VyLnZlcnNpb24gPT0gNi4wKSB7ICQodGhpcykuY2hpbGRyZW4oKS5jc3MoeydoZWlnaHQnOiBjdXJyZW50VGFsbGVzdH0pOyB9XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5jaGlsZHJlbigpLmNzcyh7J21pbi1oZWlnaHQnOiBjdXJyZW50VGFsbGVzdH0pOyBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gQ29weXJpZ2h0IChjKSAyMDA5IEphbWVzIFBhZG9sc2V5XG4gICAgICAgIC8vIGh0dHA6Ly9qYW1lcy5wYWRvbHNleS5jb20vamF2YXNjcmlwdC9qcXVlcnktZGVsYXktcGx1Z2luL1xuICAgICAgICBkZWxheTogZnVuY3Rpb24odGltZSwgY2FsbGJhY2spe1xuICAgICAgICAgICAgalF1ZXJ5LmZ4LnN0ZXAuZGVsYXkgPSBmdW5jdGlvbigpe307XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbmltYXRlKHtkZWxheToxfSwgdGltZSwgY2FsbGJhY2spO1xuICAgICAgICB9ICAgICAgICBcblx0fSk7XG59KShqUXVlcnkpO1xuLypcbiAgalF1ZXJ5IHN0cmluZ3MgLSAwLjNcbiAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2pxdWVyeS11dGlscy9cbiAgXG4gIChjKSBNYXhpbWUgSGFpbmVhdWx0IDxoYWluZWF1bHRAZ21haWwuY29tPlxuICBodHRwOi8vaGFpbmVhdWx0LmNvbSAgIFxuXG4gIE1JVCBMaWNlbnNlIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcblxuICBJbXBsZW1lbnRhdGlvbiBvZiBQeXRob24zSyBhZHZhbmNlZCBzdHJpbmcgZm9ybWF0dGluZ1xuICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTMxMDEvXG5cbiAgRG9jdW1lbnRhdGlvbjogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2pxdWVyeS11dGlscy93aWtpL1N0cmluZ0Zvcm1hdFxuICBcbiovXG4oZnVuY3Rpb24oJCl7XG4gICAgdmFyIHN0cmluZ3MgPSB7XG4gICAgICAgIHN0ckNvbnZlcnNpb246IHtcbiAgICAgICAgICAgIC8vIHRyaWVzIHRvIHRyYW5zbGF0ZSBhbnkgb2JqZWN0cyB0eXBlIGludG8gc3RyaW5nIGdyYWNlZnVsbHlcbiAgICAgICAgICAgIF9fcmVwcjogZnVuY3Rpb24oaSl7XG4gICAgICAgICAgICAgICAgc3dpdGNoKHRoaXMuX19nZXRUeXBlKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FycmF5JzpjYXNlICdkYXRlJzpjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzogXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh4PTA7IHg8aS5sZW5ndGg7IGkrKykgeyBvLnB1c2goaSsnOiAnKyB0aGlzLl9fcmVwcihpW3hdKSk7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6IFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGxpa2UgdHlwZW9mIGJ1dCBsZXNzIHZhZ3VlXG4gICAgICAgICAgICBfX2dldFR5cGU6IGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWkgfHwgIWkuY29uc3RydWN0b3IpIHsgcmV0dXJuIHR5cGVvZihpKTsgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGkuY29uc3RydWN0b3IudG9TdHJpbmcoKS5tYXRjaCgvQXJyYXl8TnVtYmVyfFN0cmluZ3xPYmplY3R8RGF0ZS8pO1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaCAmJiBtYXRjaFswXS50b0xvd2VyQ2FzZSgpIHx8IHR5cGVvZihpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLysgSm9uYXMgUmFvbmkgU29hcmVzIFNpbHZhXG4gICAgICAgICAgICAvLyB0aGUgQCBzaWduIG5leHQgdG8gXCIvL1wiIGlzIGludGVycHJldGVkIGJ5IElFIHdoZW4gdXNpbmcgY2M8dW5kZXJzY29yZT5vbiEgSW5zZXJ0ZWQgYSBzcGFjZS5cbiAgICAgICAgICAgIC8vICBAIGh0dHA6Ly9qc2Zyb21oZWxsLmNvbS9zdHJpbmcvcGFkIFt2MS4wXVxuICAgICAgICAgICAgX19wYWQ6IGZ1bmN0aW9uKHN0ciwgbCwgcywgdCl7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSBzIHx8ICcgJztcbiAgICAgICAgICAgICAgICB2YXIgbyA9IHN0cjtcbiAgICAgICAgICAgICAgICBpZiAobCAtIHN0ci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG8gPSBuZXcgQXJyYXkoTWF0aC5jZWlsKGwgLyBwLmxlbmd0aCkpLmpvaW4ocCkuc3Vic3RyKDAsIHQgPSAhdCA/IGwgOiB0ID09IDEgPyAwIDogTWF0aC5jZWlsKGwgLyAyKSkgKyBzdHIgKyBwLnN1YnN0cigwLCBsIC0gdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9fZ2V0SW5wdXQ6IGZ1bmN0aW9uKGFyZywgYXJncykge1xuICAgICAgICAgICAgICAgICB2YXIga2V5ID0gYXJnLmdldEtleSgpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCh0aGlzLl9fZ2V0VHlwZShhcmdzKSl7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6IC8vIFRoYW5rcyB0byBKb25hdGhhbiBXb3JrcyBmb3IgdGhlIHBhdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGtleS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIHN1YmtleSA9IDA7IHN1YmtleSA8IGtleXMubGVuZ3RoOyBzdWJrZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gb2JqW2tleXNbc3Via2V5XV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG9iaikgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5ncy5zdHJDb252ZXJzaW9uLl9fZ2V0VHlwZShvYmopID09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZy5nZXRGb3JtYXQoKS5tYXRjaCgvXFwuXFwqLykgJiYgb2JqWzFdIHx8IG9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHRyeSBieSBudW1lcmljYWwgaW5kZXggICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYXJyYXknOiBcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHBhcnNlSW50KGtleSwgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5nZXRGb3JtYXQoKS5tYXRjaCgvXFwuXFwqLykgJiYgdHlwZW9mIGFyZ3Nba2V5KzFdICE9ICd1bmRlZmluZWQnKSB7IHJldHVybiBhcmdzW2tleSsxXTsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFyZ3Nba2V5XSAhPSAndW5kZWZpbmVkJykgeyByZXR1cm4gYXJnc1trZXldOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgcmV0dXJuIGtleTsgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICd7JytrZXkrJ30nO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9fZm9ybWF0VG9rZW46IGZ1bmN0aW9uKHRva2VuLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZyAgID0gbmV3IEFyZ3VtZW50KHRva2VuLCBhcmdzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5ncy5zdHJDb252ZXJzaW9uW2FyZy5nZXRGb3JtYXQoKS5zbGljZSgtMSldKHRoaXMuX19nZXRJbnB1dChhcmcsIGFyZ3MpLCBhcmcpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy8gU2lnbmVkIGludGVnZXIgZGVjaW1hbC5cbiAgICAgICAgICAgIGQ6IGZ1bmN0aW9uKGlucHV0LCBhcmcpe1xuICAgICAgICAgICAgICAgIHZhciBvID0gcGFyc2VJbnQoaW5wdXQsIDEwKTsgLy8gZW5mb3JjZSBiYXNlIDEwXG4gICAgICAgICAgICAgICAgdmFyIHAgPSBhcmcuZ2V0UGFkZGluZ0xlbmd0aCgpO1xuICAgICAgICAgICAgICAgIGlmIChwKSB7IHJldHVybiB0aGlzLl9fcGFkKG8udG9TdHJpbmcoKSwgcCwgYXJnLmdldFBhZGRpbmdTdHJpbmcoKSwgMCk7IH1cbiAgICAgICAgICAgICAgICBlbHNlICAgeyByZXR1cm4gbzsgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIFNpZ25lZCBpbnRlZ2VyIGRlY2ltYWwuXG4gICAgICAgICAgICBpOiBmdW5jdGlvbihpbnB1dCwgYXJncyl7IFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmQoaW5wdXQsIGFyZ3MpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIFVuc2lnbmVkIG9jdGFsXG4gICAgICAgICAgICBvOiBmdW5jdGlvbihpbnB1dCwgYXJnKXsgXG4gICAgICAgICAgICAgICAgdmFyIG8gPSBpbnB1dC50b1N0cmluZyg4KTtcbiAgICAgICAgICAgICAgICBpZiAoYXJnLmlzQWx0ZXJuYXRlKCkpIHsgbyA9IHRoaXMuX19wYWQobywgby5sZW5ndGgrMSwgJzAnLCAwKTsgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9fcGFkKG8sIGFyZy5nZXRQYWRkaW5nTGVuZ3RoKCksIGFyZy5nZXRQYWRkaW5nU3RyaW5nKCksIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIFVuc2lnbmVkIGRlY2ltYWxcbiAgICAgICAgICAgIHU6IGZ1bmN0aW9uKGlucHV0LCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRoaXMuZChpbnB1dCwgYXJncykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIFVuc2lnbmVkIGhleGFkZWNpbWFsIChsb3dlcmNhc2UpXG4gICAgICAgICAgICB4OiBmdW5jdGlvbihpbnB1dCwgYXJnKXtcbiAgICAgICAgICAgICAgICB2YXIgbyA9IHBhcnNlSW50KGlucHV0LCAxMCkudG9TdHJpbmcoMTYpO1xuICAgICAgICAgICAgICAgIG8gPSB0aGlzLl9fcGFkKG8sIGFyZy5nZXRQYWRkaW5nTGVuZ3RoKCksIGFyZy5nZXRQYWRkaW5nU3RyaW5nKCksMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZy5pc0FsdGVybmF0ZSgpID8gJzB4JytvIDogbztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBVbnNpZ25lZCBoZXhhZGVjaW1hbCAodXBwZXJjYXNlKVxuICAgICAgICAgICAgWDogZnVuY3Rpb24oaW5wdXQsIGFyZyl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMueChpbnB1dCwgYXJnKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIEZsb2F0aW5nIHBvaW50IGV4cG9uZW50aWFsIGZvcm1hdCAobG93ZXJjYXNlKVxuICAgICAgICAgICAgZTogZnVuY3Rpb24oaW5wdXQsIGFyZyl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoaW5wdXQsIDEwKS50b0V4cG9uZW50aWFsKGFyZy5nZXRQcmVjaXNpb24oKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gRmxvYXRpbmcgcG9pbnQgZXhwb25lbnRpYWwgZm9ybWF0ICh1cHBlcmNhc2UpXG4gICAgICAgICAgICBFOiBmdW5jdGlvbihpbnB1dCwgYXJnKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lKGlucHV0LCBhcmcpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gRmxvYXRpbmcgcG9pbnQgZGVjaW1hbCBmb3JtYXRcbiAgICAgICAgICAgIGY6IGZ1bmN0aW9uKGlucHV0LCBhcmcpe1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9fcGFkKHBhcnNlRmxvYXQoaW5wdXQsIDEwKS50b0ZpeGVkKGFyZy5nZXRQcmVjaXNpb24oKSksIGFyZy5nZXRQYWRkaW5nTGVuZ3RoKCksIGFyZy5nZXRQYWRkaW5nU3RyaW5nKCksMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gRmxvYXRpbmcgcG9pbnQgZGVjaW1hbCBmb3JtYXQgKGFsaWFzKVxuICAgICAgICAgICAgRjogZnVuY3Rpb24oaW5wdXQsIGFyZ3Mpe1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmYoaW5wdXQsIGFyZ3MpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIEZsb2F0aW5nIHBvaW50IGZvcm1hdC4gVXNlcyBleHBvbmVudGlhbCBmb3JtYXQgaWYgZXhwb25lbnQgaXMgZ3JlYXRlciB0aGFuIC00IG9yIGxlc3MgdGhhbiBwcmVjaXNpb24sIGRlY2ltYWwgZm9ybWF0IG90aGVyd2lzZVxuICAgICAgICAgICAgZzogZnVuY3Rpb24oaW5wdXQsIGFyZyl7XG4gICAgICAgICAgICAgICAgdmFyIG8gPSBwYXJzZUZsb2F0KGlucHV0LCAxMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChvLnRvU3RyaW5nKCkubGVuZ3RoID4gNikgPyBNYXRoLnJvdW5kKG8udG9FeHBvbmVudGlhbChhcmcuZ2V0UHJlY2lzaW9uKCkpKTogbztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBGbG9hdGluZyBwb2ludCBmb3JtYXQuIFVzZXMgZXhwb25lbnRpYWwgZm9ybWF0IGlmIGV4cG9uZW50IGlzIGdyZWF0ZXIgdGhhbiAtNCBvciBsZXNzIHRoYW4gcHJlY2lzaW9uLCBkZWNpbWFsIGZvcm1hdCBvdGhlcndpc2VcbiAgICAgICAgICAgIEc6IGZ1bmN0aW9uKGlucHV0LCBhcmdzKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nKGlucHV0LCBhcmdzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBTaW5nbGUgY2hhcmFjdGVyIChhY2NlcHRzIGludGVnZXIgb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmcpLiBcdFxuICAgICAgICAgICAgYzogZnVuY3Rpb24oaW5wdXQsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBpbnB1dC5tYXRjaCgvXFx3fFxcZC8pO1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaCAmJiBtYXRjaFswXSB8fCAnJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBTdHJpbmcgKGNvbnZlcnRzIGFueSBKYXZhU2NyaXB0IG9iamVjdCB0byBhbm90YXRlZCBmb3JtYXQpXG4gICAgICAgICAgICByOiBmdW5jdGlvbihpbnB1dCwgYXJncykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9fcmVwcihpbnB1dCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gU3RyaW5nIChjb252ZXJ0cyBhbnkgSmF2YVNjcmlwdCBvYmplY3QgdXNpbmcgb2JqZWN0LnRvU3RyaW5nKCkpXG4gICAgICAgICAgICBzOiBmdW5jdGlvbihpbnB1dCwgYXJncykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dC50b1N0cmluZyAmJiBpbnB1dC50b1N0cmluZygpIHx8ICcnK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24oc3RyLCBhcmdzKSB7XG4gICAgICAgICAgICB2YXIgZW5kICAgID0gMDtcbiAgICAgICAgICAgIHZhciBzdGFydCAgPSAwO1xuICAgICAgICAgICAgdmFyIG1hdGNoICA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuICAgICAgICAgICAgdmFyIHRva2VuICA9ICcnO1xuICAgICAgICAgICAgdmFyIHRtcCAgICA9IChzdHJ8fCcnKS5zcGxpdCgnJyk7XG4gICAgICAgICAgICBmb3Ioc3RhcnQ9MDsgc3RhcnQgPCB0bXAubGVuZ3RoOyBzdGFydCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRtcFtzdGFydF0gPT0gJ3snICYmIHRtcFtzdGFydCsxXSAhPSd7Jykge1xuICAgICAgICAgICAgICAgICAgICBlbmQgICA9IHN0ci5pbmRleE9mKCd9Jywgc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRtcC5zbGljZShzdGFydCsxLCBlbmQpLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG1wW3N0YXJ0LTFdICE9ICd7JyAmJiB0bXBbZW5kKzFdICE9ICd9Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuQXJncyA9ICh0eXBlb2YgYXJndW1lbnRzWzFdICE9ICdvYmplY3QnKT8gYXJndW1lbnRzMkFycmF5KGFyZ3VtZW50cywgMik6IGFyZ3MgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIucHVzaChzdHJpbmdzLnN0ckNvbnZlcnNpb24uX19mb3JtYXRUb2tlbih0b2tlbiwgdG9rZW5BcmdzKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhcnQgPiBlbmQgfHwgYnVmZmVyLmxlbmd0aCA8IDEpIHsgYnVmZmVyLnB1c2godG1wW3N0YXJ0XSk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoYnVmZmVyLmxlbmd0aCA+IDEpPyBidWZmZXIuam9pbignJyk6IGJ1ZmZlclswXTtcbiAgICAgICAgfSxcblxuICAgICAgICBjYWxjOiBmdW5jdGlvbihzdHIsIGFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBldmFsKGZvcm1hdChzdHIsIGFyZ3MpKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZXBlYXQ6IGZ1bmN0aW9uKHMsIG4pIHsgXG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5KG4rMSkuam9pbihzKTsgXG4gICAgICAgIH0sXG5cbiAgICAgICAgVVRGOGVuY29kZTogZnVuY3Rpb24ocykgeyBcbiAgICAgICAgICAgIHJldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQocykpOyBcbiAgICAgICAgfSxcblxuICAgICAgICBVVEY4ZGVjb2RlOiBmdW5jdGlvbihzKSB7IFxuICAgICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUocykpOyBcbiAgICAgICAgfSxcblxuICAgICAgICB0cGw6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIG91dCA9ICcnO1xuICAgICAgICAgICAgdmFyIHJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICAvLyBTZXRcbiAgICAgICAgICAgIC8vICQudHBsKCd1aS50ZXN0JywgWyc8c3Bhbj4nLCBoZWxsb1dvcmxkICwnPC9zcGFuPiddKTtcbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIgJiYgJC5pc0FycmF5KGFyZ3VtZW50c1sxXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzW2FyZ3VtZW50c1swXV0gPSBhcmd1bWVudHNbMV0uam9pbignJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQodGhpc1thcmd1bWVudHNbMF1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICQudHBsKCd1aS50ZXN0JywgJzxzcGFuPmhlbGxvIHdvcmxkPC9zcGFuPicpO1xuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMiAmJiAkLmlzU3RyaW5nKGFyZ3VtZW50c1sxXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzW2FyZ3VtZW50c1swXV0gPSBhcmd1bWVudHNbMV07XG4gICAgICAgICAgICAgICAgcmV0dXJuICQodGhpc1thcmd1bWVudHNbMF1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENhbGxcbiAgICAgICAgICAgIC8vICQudHBsKCd1aS50ZXN0Jyk7XG4gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQodGhpc1thcmd1bWVudHNbMF1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICQudHBsKCd1aS50ZXN0JywgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMiAmJiBhcmd1bWVudHNbMV0gPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1thcmd1bWVudHNbMF1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gJC50cGwoJ3VpLnRlc3QnLCB7dmFsdWU6YmxhaH0pO1xuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMiAmJiAkLmlzT2JqZWN0KGFyZ3VtZW50c1sxXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgkLmZvcm1hdCh0aGlzW2FyZ3VtZW50c1swXV0sIGFyZ3VtZW50c1sxXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gJC50cGwoJ3VpLnRlc3QnLCB7dmFsdWU6YmxhaH0sIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDMgJiYgJC5pc09iamVjdChhcmd1bWVudHNbMV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChhcmd1bWVudHNbMl0gPT0gdHJ1ZSkgXG4gICAgICAgICAgICAgICAgICAgID8gJC5mb3JtYXQodGhpc1thcmd1bWVudHNbMF1dLCBhcmd1bWVudHNbMV0pXG4gICAgICAgICAgICAgICAgICAgIDogJCgkLmZvcm1hdCh0aGlzW2FyZ3VtZW50c1swXV0sIGFyZ3VtZW50c1sxXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBBcmd1bWVudCA9IGZ1bmN0aW9uKGFyZywgYXJncykge1xuICAgICAgICB0aGlzLl9fYXJnICA9IGFyZztcbiAgICAgICAgdGhpcy5fX2FyZ3MgPSBhcmdzO1xuICAgICAgICB0aGlzLl9fbWF4X3ByZWNpc2lvbiA9IHBhcnNlRmxvYXQoJzEuJysgKG5ldyBBcnJheSgzMikpLmpvaW4oJzEnKSwgMTApLnRvU3RyaW5nKCkubGVuZ3RoLTM7XG4gICAgICAgIHRoaXMuX19kZWZfcHJlY2lzaW9uID0gNjtcbiAgICAgICAgdGhpcy5nZXRTdHJpbmcgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19hcmc7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0S2V5ID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9fYXJnLnNwbGl0KCc6JylbMF07XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0Rm9ybWF0ID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHZhciBtYXRjaCA9IHRoaXMuZ2V0U3RyaW5nKCkuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIHJldHVybiAobWF0Y2ggJiYgbWF0Y2hbMV0pPyBtYXRjaFsxXTogJ3MnO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldFByZWNpc2lvbiA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB2YXIgbWF0Y2ggPSB0aGlzLmdldEZvcm1hdCgpLm1hdGNoKC9cXC4oXFxkK3xcXCopL2cpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaCkgeyByZXR1cm4gdGhpcy5fX2RlZl9wcmVjaXNpb247IH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gbWF0Y2hbMF0uc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoICE9ICcqJykgeyByZXR1cm4gcGFyc2VJbnQobWF0Y2gsIDEwKTsgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYoc3RyaW5ncy5zdHJDb252ZXJzaW9uLl9fZ2V0VHlwZSh0aGlzLl9fYXJncykgPT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fX2FyZ3NbMV0gJiYgdGhpcy5fX2FyZ3NbMF0gfHwgdGhpcy5fX2RlZl9wcmVjaXNpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYoc3RyaW5ncy5zdHJDb252ZXJzaW9uLl9fZ2V0VHlwZSh0aGlzLl9fYXJncykgPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19hcmdzW3RoaXMuZ2V0S2V5KCldICYmIHRoaXMuX19hcmdzW3RoaXMuZ2V0S2V5KCldWzBdIHx8IHRoaXMuX19kZWZfcHJlY2lzaW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHsgcmV0dXJuIHRoaXMuX19kZWZfcHJlY2lzaW9uOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0UGFkZGluZ0xlbmd0aCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB2YXIgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWx0ZXJuYXRlKCkpIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IHRoaXMuZ2V0U3RyaW5nKCkubWF0Y2goLzA/IzA/KFxcZCspLyk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7IHJldHVybiBwYXJzZUludChtYXRjaFsxXSwgMTApOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXRjaCA9IHRoaXMuZ2V0U3RyaW5nKCkubWF0Y2goLygwfFxcLikoXFxkK3xcXCopL2cpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoICYmIHBhcnNlSW50KG1hdGNoWzBdLnNsaWNlKDEpLCAxMCkgfHwgMDtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRQYWRkaW5nU3RyaW5nID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHZhciBvID0gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0FsdGVybmF0ZSgpKSB7IG8gPSAnICc7IH1cbiAgICAgICAgICAgIC8vIDAgdGFrZSBwcmVjZWRlbmNlIG9uIGFsdGVybmF0ZSBmb3JtYXRcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEZvcm1hdCgpLm1hdGNoKC8jMHwwI3xeMHxcXC5cXGQrLykpIHsgbyA9ICcwJzsgfVxuICAgICAgICAgICAgcmV0dXJuIG87XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0RmxhZ3MgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgdmFyIG1hdGNoID0gdGhpcy5nZXRTdHJpbmcoKS5tYXRjKC9eKDB8XFwjfFxcLXxcXCt8XFxzKSsvKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaCAmJiBtYXRjaFswXS5zcGxpdCgnJykgfHwgW107XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaXNBbHRlcm5hdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuZ2V0Rm9ybWF0KCkubWF0Y2goL14wPyMvKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgdmFyIGFyZ3VtZW50czJBcnJheSA9IGZ1bmN0aW9uKGFyZ3MsIHNoaWZ0KSB7XG4gICAgICAgIHZhciBvID0gW107XG4gICAgICAgIGZvciAobD1hcmdzLmxlbmd0aCwgeD0oc2hpZnQgfHwgMCktMTsgeDxsO3grKykgeyBvLnB1c2goYXJnc1t4XSk7IH1cbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICAkLmV4dGVuZChzdHJpbmdzKTtcbn0pKGpRdWVyeSk7XG4vKlxuICBqUXVlcnkgYW5jaG9yIGhhbmRsZXIgLSAwLjVcbiAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2pxdWVyeS11dGlscy9cblxuICAoYykgTWF4aW1lIEhhaW5lYXVsdCA8aGFpbmVhdWx0QGdtYWlsLmNvbT5cbiAgaHR0cDovL2hhaW5lYXVsdC5jb20gICBcblxuICBNSVQgTGljZW5zZSAoaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHApXG5cbiovXG5cbihmdW5jdGlvbigkKXtcbiAgICB2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuICAgIHZhciBoYW5kbGVycyAgPSBbXTtcbiAgICB2YXIgb3B0ID0ge307XG5cblx0JC5leHRlbmQoe1xuXHRcdGFuY2hvckhhbmRsZXI6IHtcbiAgICAgICAgICAgIGFwcGx5OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkLm1hcChoYW5kbGVycywgZnVuY3Rpb24oaGFuZGxlcil7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGhhc2gubWF0Y2goaGFuZGxlci5yKSAmJiBoYXNoLm1hdGNoKGhhbmRsZXIucilbMF0gfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCkgIHsgaGFuZGxlci5jYi5hcHBseSgkKCdhW2hyZWYqPScrbWF0Y2grJ10nKS5nZXQoMCksIFtoYW5kbGVyLnIsIGhhc2ggfHwgJyddKTsgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiAkLmFuY2hvckhhbmRsZXI7XG4gICAgICAgICAgICB9LFxuXHRcdFx0YWRkOiBmdW5jdGlvbihyZWdleHAsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9wdCAgPSAkLmV4dGVuZCh7aGFuZGxlQ2xpY2s6IHRydWUsIHByZXNlcnZlSGFzaDogdHJ1ZX0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChvcHQuaGFuZGxlQ2xpY2spIHsgXG4gICAgICAgICAgICAgICAgICAgICQoJ2FbaHJlZio9I10nKS5lYWNoKGZ1bmN0aW9uKGksIGEpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEuaHJlZi5tYXRjaChyZWdleHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChhKS5iaW5kKCdjbGljay5hbmNob3JIYW5kbGVyJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdC5wcmVzZXJ2ZUhhc2gpIHsgd2luZG93LmxvY2F0aW9uLmhhc2ggPSBhLmhhc2g7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIFtyZWdleHAsIGEuaHJlZl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7IFxuICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0aGFuZGxlcnMucHVzaCh7cjogcmVnZXhwLCBjYjogY2FsbGJhY2t9KTtcbiAgICAgICAgICAgICAgICAkKCQuYW5jaG9ySGFuZGxlci5hcHBseSk7XG5cdFx0XHRcdHJldHVybiAkLmFuY2hvckhhbmRsZXI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn0pKGpRdWVyeSk7XG4vKipcbiAqIENvb2tpZSBwbHVnaW5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDYgS2xhdXMgSGFydGwgKHN0aWxidWVyby5kZSlcbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzOlxuICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbFxuICpcbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBhIGNvb2tpZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCB2YWx1ZSBhbmQgb3RoZXIgb3B0aW9uYWwgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZSAkLmNvb2tpZSgndGhlX2Nvb2tpZScsICd0aGVfdmFsdWUnKTtcbiAqIEBkZXNjIFNldCB0aGUgdmFsdWUgb2YgYSBjb29raWUuXG4gKiBAZXhhbXBsZSAkLmNvb2tpZSgndGhlX2Nvb2tpZScsICd0aGVfdmFsdWUnLCB7IGV4cGlyZXM6IDcsIHBhdGg6ICcvJywgZG9tYWluOiAnanF1ZXJ5LmNvbScsIHNlY3VyZTogdHJ1ZSB9KTtcbiAqIEBkZXNjIENyZWF0ZSBhIGNvb2tpZSB3aXRoIGFsbCBhdmFpbGFibGUgb3B0aW9ucy5cbiAqIEBleGFtcGxlICQuY29va2llKCd0aGVfY29va2llJywgJ3RoZV92YWx1ZScpO1xuICogQGRlc2MgQ3JlYXRlIGEgc2Vzc2lvbiBjb29raWUuXG4gKiBAZXhhbXBsZSAkLmNvb2tpZSgndGhlX2Nvb2tpZScsIG51bGwpO1xuICogQGRlc2MgRGVsZXRlIGEgY29va2llIGJ5IHBhc3NpbmcgbnVsbCBhcyB2YWx1ZS4gS2VlcCBpbiBtaW5kIHRoYXQgeW91IGhhdmUgdG8gdXNlIHRoZSBzYW1lIHBhdGggYW5kIGRvbWFpblxuICogICAgICAgdXNlZCB3aGVuIHRoZSBjb29raWUgd2FzIHNldC5cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNvb2tpZS5cbiAqIEBwYXJhbSBTdHJpbmcgdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBjb29raWUuXG4gKiBAcGFyYW0gT2JqZWN0IG9wdGlvbnMgQW4gb2JqZWN0IGxpdGVyYWwgY29udGFpbmluZyBrZXkvdmFsdWUgcGFpcnMgdG8gcHJvdmlkZSBvcHRpb25hbCBjb29raWUgYXR0cmlidXRlcy5cbiAqIEBvcHRpb24gTnVtYmVyfERhdGUgZXhwaXJlcyBFaXRoZXIgYW4gaW50ZWdlciBzcGVjaWZ5aW5nIHRoZSBleHBpcmF0aW9uIGRhdGUgZnJvbSBub3cgb24gaW4gZGF5cyBvciBhIERhdGUgb2JqZWN0LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGEgbmVnYXRpdmUgdmFsdWUgaXMgc3BlY2lmaWVkIChlLmcuIGEgZGF0ZSBpbiB0aGUgcGFzdCksIHRoZSBjb29raWUgd2lsbCBiZSBkZWxldGVkLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHNldCB0byBudWxsIG9yIG9taXR0ZWQsIHRoZSBjb29raWUgd2lsbCBiZSBhIHNlc3Npb24gY29va2llIGFuZCB3aWxsIG5vdCBiZSByZXRhaW5lZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHRoZSBicm93c2VyIGV4aXRzLlxuICogQG9wdGlvbiBTdHJpbmcgcGF0aCBUaGUgdmFsdWUgb2YgdGhlIHBhdGggYXRyaWJ1dGUgb2YgdGhlIGNvb2tpZSAoZGVmYXVsdDogcGF0aCBvZiBwYWdlIHRoYXQgY3JlYXRlZCB0aGUgY29va2llKS5cbiAqIEBvcHRpb24gU3RyaW5nIGRvbWFpbiBUaGUgdmFsdWUgb2YgdGhlIGRvbWFpbiBhdHRyaWJ1dGUgb2YgdGhlIGNvb2tpZSAoZGVmYXVsdDogZG9tYWluIG9mIHBhZ2UgdGhhdCBjcmVhdGVkIHRoZSBjb29raWUpLlxuICogQG9wdGlvbiBCb29sZWFuIHNlY3VyZSBJZiB0cnVlLCB0aGUgc2VjdXJlIGF0dHJpYnV0ZSBvZiB0aGUgY29va2llIHdpbGwgYmUgc2V0IGFuZCB0aGUgY29va2llIHRyYW5zbWlzc2lvbiB3aWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUgYSBzZWN1cmUgcHJvdG9jb2wgKGxpa2UgSFRUUFMpLlxuICogQHR5cGUgdW5kZWZpbmVkXG4gKlxuICogQG5hbWUgJC5jb29raWVcbiAqIEBjYXQgUGx1Z2lucy9Db29raWVcbiAqIEBhdXRob3IgS2xhdXMgSGFydGwva2xhdXMuaGFydGxAc3RpbGJ1ZXJvLmRlXG4gKi9cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGEgY29va2llIHdpdGggdGhlIGdpdmVuIG5hbWUuXG4gKlxuICogQGV4YW1wbGUgJC5jb29raWUoJ3RoZV9jb29raWUnKTtcbiAqIEBkZXNjIEdldCB0aGUgdmFsdWUgb2YgYSBjb29raWUuXG4gKlxuICogQHBhcmFtIFN0cmluZyBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjb29raWUuXG4gKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgY29va2llLlxuICogQHR5cGUgU3RyaW5nXG4gKlxuICogQG5hbWUgJC5jb29raWVcbiAqIEBjYXQgUGx1Z2lucy9Db29raWVcbiAqIEBhdXRob3IgS2xhdXMgSGFydGwva2xhdXMuaGFydGxAc3RpbGJ1ZXJvLmRlXG4gKi9cbmpRdWVyeS5jb29raWUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3VuZGVmaW5lZCcpIHsgLy8gbmFtZSBhbmQgdmFsdWUgZ2l2ZW4sIHNldCBjb29raWVcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgICAgICAgIG9wdGlvbnMuZXhwaXJlcyA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIHZhciBleHBpcmVzID0gJyc7XG4gICAgICAgIGlmIChvcHRpb25zLmV4cGlyZXMgJiYgKHR5cGVvZiBvcHRpb25zLmV4cGlyZXMgPT0gJ251bWJlcicgfHwgb3B0aW9ucy5leHBpcmVzLnRvVVRDU3RyaW5nKSkge1xuICAgICAgICAgICAgdmFyIGRhdGU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZXhwaXJlcyA9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIChvcHRpb25zLmV4cGlyZXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBvcHRpb25zLmV4cGlyZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHBpcmVzID0gJzsgZXhwaXJlcz0nICsgZGF0ZS50b1VUQ1N0cmluZygpOyAvLyB1c2UgZXhwaXJlcyBhdHRyaWJ1dGUsIG1heC1hZ2UgaXMgbm90IHN1cHBvcnRlZCBieSBJRVxuICAgICAgICB9XG4gICAgICAgIC8vIENBVVRJT046IE5lZWRlZCB0byBwYXJlbnRoZXNpemUgb3B0aW9ucy5wYXRoIGFuZCBvcHRpb25zLmRvbWFpblxuICAgICAgICAvLyBpbiB0aGUgZm9sbG93aW5nIGV4cHJlc3Npb25zLCBvdGhlcndpc2UgdGhleSBldmFsdWF0ZSB0byB1bmRlZmluZWRcbiAgICAgICAgLy8gaW4gdGhlIHBhY2tlZCB2ZXJzaW9uIGZvciBzb21lIHJlYXNvbi4uLlxuICAgICAgICB2YXIgcGF0aCA9IG9wdGlvbnMucGF0aCA/ICc7IHBhdGg9JyArIChvcHRpb25zLnBhdGgpIDogJyc7XG4gICAgICAgIHZhciBkb21haW4gPSBvcHRpb25zLmRvbWFpbiA/ICc7IGRvbWFpbj0nICsgKG9wdGlvbnMuZG9tYWluKSA6ICcnO1xuICAgICAgICB2YXIgc2VjdXJlID0gb3B0aW9ucy5zZWN1cmUgPyAnOyBzZWN1cmUnIDogJyc7XG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IFtuYW1lLCAnPScsIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSksIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlXS5qb2luKCcnKTtcbiAgICB9IGVsc2UgeyAvLyBvbmx5IG5hbWUgZ2l2ZW4sIGdldCBjb29raWVcbiAgICAgICAgdmFyIGNvb2tpZVZhbHVlID0gbnVsbDtcbiAgICAgICAgaWYgKGRvY3VtZW50LmNvb2tpZSAmJiBkb2N1bWVudC5jb29raWUgIT0gJycpIHtcbiAgICAgICAgICAgIHZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgY29va2llID0galF1ZXJ5LnRyaW0oY29va2llc1tpXSk7XG4gICAgICAgICAgICAgICAgLy8gRG9lcyB0aGlzIGNvb2tpZSBzdHJpbmcgYmVnaW4gd2l0aCB0aGUgbmFtZSB3ZSB3YW50P1xuICAgICAgICAgICAgICAgIGlmIChjb29raWUuc3Vic3RyaW5nKDAsIG5hbWUubGVuZ3RoICsgMSkgPT0gKG5hbWUgKyAnPScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvb2tpZVZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KGNvb2tpZS5zdWJzdHJpbmcobmFtZS5sZW5ndGggKyAxKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29va2llVmFsdWU7XG4gICAgfVxufTtcbi8qXG4gIGpRdWVyeSBjb3VudGRvd24gLSAwLjJcbiAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2pxdWVyeS11dGlscy9cblxuICAoYykgTWF4aW1lIEhhaW5lYXVsdCA8aGFpbmVhdWx0QGdtYWlsLmNvbT5cbiAgaHR0cDovL2hhaW5lYXVsdC5jb20gICBcblxuICBNSVQgTGljZW5zZSAoaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHApXG4gIFxuKi9cblxuKGZ1bmN0aW9uKCQpIHtcbiAgICBmdW5jdGlvbiBjb3VudGRvd24oZWwsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGNhbGMgPSBmdW5jdGlvbiAodGFyZ2V0LCBjdXJyZW50KSB7XG4gICAgICAgICAgICAvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdGFyZ2V0IGRhdGUgaGFzIGFycml2ZWQsXG4gICAgICAgICAgICAgKiBhbiBvYmplY3Qgb2YgdGhlIHRpbWUgbGVmdCBvdGhlcndpc2UuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gY3VycmVudCB8fCBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPj0gdGFyZ2V0KSB7IHJldHVybiB0cnVlOyB9XG5cbiAgICAgICAgICAgIHZhciBvID0ge307XG4gICAgICAgICAgICB2YXIgcmVtYWluID0gTWF0aC5mbG9vcigodGFyZ2V0LmdldFRpbWUoKSAtIGN1cnJlbnQuZ2V0VGltZSgpKSAvIDEwMDApO1xuXG4gICAgICAgICAgICBvLmRheXMgPSBNYXRoLmZsb29yKHJlbWFpbiAvIDg2NDAwKTtcbiAgICAgICAgICAgIHJlbWFpbiAlPSA4NjQwMDtcbiAgICAgICAgICAgIG8uaG91cnMgPSBNYXRoLmZsb29yKHJlbWFpbiAvIDM2MDApO1xuICAgICAgICAgICAgcmVtYWluICU9IDM2MDA7XG4gICAgICAgICAgICBvLm1pbnV0ZXMgPSBNYXRoLmZsb29yKHJlbWFpbiAvIDYwKTtcbiAgICAgICAgICAgIHJlbWFpbiAlPSA2MDtcbiAgICAgICAgICAgIG8uc2Vjb25kcyA9IHJlbWFpbjtcbiAgICAgICAgICAgIG8ueWVhcnMgPSBNYXRoLmZsb29yKG8uZGF5cyAvIDM2NSk7XG4gICAgICAgICAgICBvLm1vbnRocyA9IE1hdGguZmxvb3Ioby5kYXlzIC8gMzApO1xuICAgICAgICAgICAgby53ZWVrcyA9IE1hdGguZmxvb3Ioby5kYXlzIC8gNyk7XG5cbiAgICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBnZXRXZWVrID0gZnVuY3Rpb24oZGF0ZSkgeyBcbiAgICAgICAgICAgIHZhciBvbmVqYW4gPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksMCwxKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwoKCgoZGF0ZSAtIG9uZWphbikgLyA4NjQwMDAwMCkgKyBvbmVqYW4uZ2V0RGF5KCkpLzcpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe1xuICAgICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIG1vZGlmaWVyczogW10sXG4gICAgICAgICAgICBpbnRlcnZhbDogMTAwMCxcbiAgICAgICAgICAgIG1zZ0Zvcm1hdDogJyVkIFtkYXl8ZGF5c10gJWhoICVtbSAlc3MnLFxuICAgICAgICAgICAgbXNnTm93OiAnTm93ICEnXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciB0b2tlbnMgPSB7XG4gICAgICAgICAgICB5OiBuZXcgUmVnRXhwICgnXFxcXCV5KC4rPylcXFxcWyhcXFxcdyspXFxcXHwoXFxcXHcrKVxcXFxdJywgJ2cnKSwgLy8geWVhcnMgXG4gICAgICAgICAgICBNOiBuZXcgUmVnRXhwICgnXFxcXCVNKC4rPylcXFxcWyhcXFxcdyspXFxcXHwoXFxcXHcrKVxcXFxdJywgJ2cnKSwgLy8gbW9udGhzIFxuICAgICAgICAgICAgdzogbmV3IFJlZ0V4cCAoJ1xcXFwldyguKz8pXFxcXFsoXFxcXHcrKVxcXFx8KFxcXFx3KylcXFxcXScsICdnJyksIC8vIHdlZWtzXG4gICAgICAgICAgICBkOiBuZXcgUmVnRXhwICgnXFxcXCVkKC4rPylcXFxcWyhcXFxcdyspXFxcXHwoXFxcXHcrKVxcXFxdJywgJ2cnKSwgLy8gZGF5c1xuICAgICAgICAgICAgaDogbmV3IFJlZ0V4cCAoJ1xcXFwlaCguKz8pXFxcXFsoXFxcXHcrKVxcXFx8KFxcXFx3KylcXFxcXScsICdnJyksIC8vIGhvdXJzXG4gICAgICAgICAgICBtOiBuZXcgUmVnRXhwICgnXFxcXCVtKC4rPylcXFxcWyhcXFxcdyspXFxcXHwoXFxcXHcrKVxcXFxdJywgJ2cnKSwgLy8gbWludXRlc1xuICAgICAgICAgICAgczogbmV3IFJlZ0V4cCAoJ1xcXFwlcyguKz8pXFxcXFsoXFxcXHcrKVxcXFx8KFxcXFx3KylcXFxcXScsICdnJykgIC8vIHNlY29uZHNcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgZm9ybWF0VG9rZW4gPSBmdW5jdGlvbihzdHIsIHRva2VuLCB2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiAoIXRva2Vuc1t0b2tlbl0pPyAnJzogc3RyLm1hdGNoKC9cXFt8XFxdL2cpIFxuICAgICAgICAgICAgICAgICAgICAmJiAoc3RyLnJlcGxhY2UodG9rZW5zW3Rva2VuXSwgdmFsKyckMScrICgocGFyc2VJbnQodmFsLCAxMCk8Mik/JyQyJzonJDMnKSkgfHwgJycpXG4gICAgICAgICAgICAgICAgICAgIHx8IHN0ci5yZXBsYWNlKCclJyt0b2tlbiwgdmFsKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgZm9ybWF0ID0gZnVuY3Rpb24oc3RyLCBvYmopIHtcbiAgICAgICAgICAgIHZhciBvID0gc3RyO1xuICAgICAgICAgICAgbyA9IGZvcm1hdFRva2VuKG8sICd5Jywgb2JqLnllYXJzKTtcbiAgICAgICAgICAgIG8gPSBmb3JtYXRUb2tlbihvLCAnTScsIG9iai5tb250aHMpO1xuICAgICAgICAgICAgbyA9IGZvcm1hdFRva2VuKG8sICd3Jywgb2JqLndlZWtzKTtcbiAgICAgICAgICAgIG8gPSBmb3JtYXRUb2tlbihvLCAnZCcsIG9iai5kYXlzKTtcbiAgICAgICAgICAgIG8gPSBmb3JtYXRUb2tlbihvLCAnaCcsIG9iai5ob3Vycyk7XG4gICAgICAgICAgICBvID0gZm9ybWF0VG9rZW4obywgJ20nLCBvYmoubWludXRlcyk7XG4gICAgICAgICAgICBvID0gZm9ybWF0VG9rZW4obywgJ3MnLCBvYmouc2Vjb25kcyk7XG4gICAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgdXBkYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgZGF0ZV9vYmogPSBjYWxjKGNkLmRhdGUpO1xuICAgICAgICAgICAgaWYgKGRhdGVfb2JqID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgY2Quc3RvcCgpOyBjbGVhckludGVydmFsKGNkLmlkKTtcbiAgICAgICAgICAgICAgICAkKGNkLmVsKS5odG1sKG9wdGlvbnMubXNnTm93KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICQoY2QuZWwpLnRleHQoZm9ybWF0KG9wdGlvbnMubXNnRm9ybWF0LCBkYXRlX29iaikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBhcHBseV9tb2RpZmllcnMgPSBmdW5jdGlvbiAobW9kaWZpZXJzLCBkYXRlKSB7XG4gICAgICAgICAgICBpZiAobW9kaWZpZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbW9kaWZpZXJfcmUgPSAvXihbKy1dXFxkKykoW3lNZGhtc10pJC87XG4gICAgICAgICAgICB2YXIgY29udmVyc2lvbnMgPSB7XG4gICAgICAgICAgICAgICAgczogMTAwMCxcbiAgICAgICAgICAgICAgICBtOiA2MCAqIDEwMDAsXG4gICAgICAgICAgICAgICAgaDogNjAgKiA2MCAqIDEwMDAsXG4gICAgICAgICAgICAgICAgZDogMjQgKiA2MCAqIDYwICogMTAwMCxcbiAgICAgICAgICAgICAgICBNOiAzMCAqIDI0ICogNjAgKiA2MCAqIDEwMDAsXG4gICAgICAgICAgICAgICAgeTogMzY1ICogMjQgKiA2MCAqIDYwICogMTAwMFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdmFyIGRpc3BsYWNlbWVudCA9IDA7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IG1vZGlmaWVycy5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBtb2RpZmllcnNbaV0ubWF0Y2gobW9kaWZpZXJfcmUpO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGFjZW1lbnQgKz0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSAqIGNvbnZlcnNpb25zW21hdGNoWzJdXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgKyBkaXNwbGFjZW1lbnQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBjZCA9IHtcbiAgICAgICAgICAgIGlkICAgIDogc2V0SW50ZXJ2YWwodXBkYXRlLCBvcHRpb25zLmludGVydmFsKSxcbiAgICAgICAgICAgIGVsICAgIDogZWwsXG4gICAgICAgICAgICBzdGFydCA6IGZ1bmN0aW9uKCl7IHJldHVybiBuZXcgY291bnRkb3duKCQodGhpcy5lbCksIG9wdGlvbnMpOyB9LFxuICAgICAgICAgICAgc3RvcCAgOiBmdW5jdGlvbigpeyByZXR1cm4gY2xlYXJJbnRlcnZhbCh0aGlzLmlkKTsgfSxcbiAgICAgICAgICAgIGRhdGUgIDogYXBwbHlfbW9kaWZpZXJzKG9wdGlvbnMubW9kaWZpZXJzLCBvcHRpb25zLmRhdGUpXG4gICAgICAgIH07XG4gICAgICAgICQoZWwpLmRhdGEoJ2NvdW50ZG93bicsIGNkKTtcbiAgICAgICAgdXBkYXRlKCk7XG4gICAgICAgIHJldHVybiAkKGVsKS5kYXRhKCdjb3VudGRvd24nKTtcbiAgICB9XG4gICAgJC5mbi5jb3VudGRvd24gPSBmdW5jdGlvbihhcmdzKSB7IGlmKHRoaXMuZ2V0KDApKSByZXR1cm4gbmV3IGNvdW50ZG93bih0aGlzLmdldCgwKSwgYXJncyk7IH07XG59KShqUXVlcnkpO1xuLypcbiAqIGpRdWVyeSBDeWNsZSBQbHVnaW4gZm9yIGxpZ2h0LXdlaWdodCBzbGlkZXNob3dzXG4gKiBFeGFtcGxlcyBhbmQgZG9jdW1lbnRhdGlvbiBhdDogaHR0cDovL21hbHN1cC5jb20vanF1ZXJ5L2N5Y2xlL1xuICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTS4gQWxzdXBcbiAqIFZlcnNpb246IDIuMjQgKDA3LzMwLzIwMDgpXG4gKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlczpcbiAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWxcbiAqIFJlcXVpcmVzOiBqUXVlcnkgdjEuMi4zIG9yIGxhdGVyXG4gKlxuICogQmFzZWQgb24gdGhlIHdvcmsgb2Y6XG4gKiAgMSkgTWF0dCBPYWtlcyAoaHR0cDovL3BvcnRmb2xpby5naXpvbmUuY28udWsvYXBwbGljYXRpb25zL3NsaWRlc2hvdy8pXG4gKiAgMikgVG9yc3RlbiBCYWxkZXMgKGh0dHA6Ly9tZWRpZW5mcmV1bmRlLmNvbS9sYWIvaW5uZXJmYWRlLylcbiAqICAzKSBCZW5qYW1pbiBTdGVybGluZyAoaHR0cDovL3d3dy5iZW5qYW1pbnN0ZXJsaW5nLmNvbS9leHBlcmltZW50cy9qcVNodWZmbGUvKVxuICovXG47KGZ1bmN0aW9uKCQpIHtcblxudmFyIHZlciA9ICcyLjI0JztcbnZhciBpZTYgPSAkLmJyb3dzZXIubXNpZSAmJiAvTVNJRSA2LjAvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgICBpZiAod2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nKVxuICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ1tjeWNsZV0gJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCcnKSk7XG59O1xuXG4kLmZuLmN5Y2xlID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucyA9PT0gbnVsbClcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgaWYgKG9wdGlvbnMuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XG4gICAgICAgICAgICBzd2l0Y2gob3B0aW9ucykge1xuICAgICAgICAgICAgY2FzZSAnc3RvcCc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3ljbGVUaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5jeWNsZVRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3ljbGVUaW1lb3V0ID0gMDtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmRhdGEoJ2N5Y2xlLm9wdHMnLCAnJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSAncGF1c2UnOlxuICAgICAgICAgICAgICAgIHRoaXMuY3ljbGVQYXVzZSA9IDE7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSAncmVzdW1lJzpcbiAgICAgICAgICAgICAgICB0aGlzLmN5Y2xlUGF1c2UgPSAwO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHsgZng6IG9wdGlvbnMgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5jb25zdHJ1Y3RvciA9PSBOdW1iZXIpIHtcbiAgICAgICAgICAgIC8vIGdvIHRvIHRoZSByZXF1ZXN0ZWQgc2xpZGUgc2xpZGVcbiAgICAgICAgICAgIHZhciBudW0gPSBvcHRpb25zO1xuICAgICAgICAgICAgb3B0aW9ucyA9ICQodGhpcykuZGF0YSgnY3ljbGUub3B0cycpO1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgbG9nKCdvcHRpb25zIG5vdCBmb3VuZCwgY2FuIG5vdCBhZHZhbmNlIHNsaWRlJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG51bSA8IDAgfHwgbnVtID49IG9wdGlvbnMuZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbG9nKCdpbnZhbGlkIHNsaWRlIGluZGV4OiAnICsgbnVtKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLm5leHRTbGlkZSA9IG51bTtcbiAgICAgICAgICAgIGlmICh0aGlzLmN5Y2xlVGltZW91dCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmN5Y2xlVGltZW91dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jeWNsZVRpbWVvdXQgPSAwO1xuICAgICAgICAgICAgfSAgICAgICAgICAgIFxuICAgICAgICAgICAgZ28ob3B0aW9ucy5lbGVtZW50cywgb3B0aW9ucywgMSwgMSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzdG9wIGV4aXN0aW5nIHNsaWRlc2hvdyBmb3IgdGhpcyBjb250YWluZXIgKGlmIHRoZXJlIGlzIG9uZSlcbiAgICAgICAgaWYgKHRoaXMuY3ljbGVUaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5jeWNsZVRpbWVvdXQpO1xuICAgICAgICB0aGlzLmN5Y2xlVGltZW91dCA9IDA7XG4gICAgICAgIHRoaXMuY3ljbGVQYXVzZSA9IDA7XG4gICAgICAgIFxuICAgICAgICB2YXIgJGNvbnQgPSAkKHRoaXMpO1xuICAgICAgICB2YXIgJHNsaWRlcyA9IG9wdGlvbnMuc2xpZGVFeHByID8gJChvcHRpb25zLnNsaWRlRXhwciwgdGhpcykgOiAkY29udC5jaGlsZHJlbigpO1xuICAgICAgICB2YXIgZWxzID0gJHNsaWRlcy5nZXQoKTtcbiAgICAgICAgaWYgKGVscy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBsb2coJ3Rlcm1pbmF0aW5nOyB0b28gZmV3IHNsaWRlczogJyArIGVscy5sZW5ndGgpO1xuICAgICAgICAgICAgcmV0dXJuOyAvLyBkb24ndCBib3RoZXJcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHN1cHBvcnQgbWV0YWRhdGEgcGx1Z2luICh2MS4wIGFuZCB2Mi4wKVxuICAgICAgICB2YXIgb3B0cyA9ICQuZXh0ZW5kKHt9LCAkLmZuLmN5Y2xlLmRlZmF1bHRzLCBvcHRpb25zIHx8IHt9LCAkLm1ldGFkYXRhID8gJGNvbnQubWV0YWRhdGEoKSA6ICQubWV0YSA/ICRjb250LmRhdGEoKSA6IHt9KTtcbiAgICAgICAgaWYgKG9wdHMuYXV0b3N0b3ApIFxuICAgICAgICAgICAgb3B0cy5jb3VudGRvd24gPSBvcHRzLmF1dG9zdG9wQ291bnQgfHwgZWxzLmxlbmd0aDtcblxuICAgICAgICAkY29udC5kYXRhKCdjeWNsZS5vcHRzJywgb3B0cyk7XG4gICAgICAgIG9wdHMuY29udGFpbmVyID0gdGhpcztcblxuICAgICAgICBvcHRzLmVsZW1lbnRzID0gZWxzO1xuICAgICAgICBvcHRzLmJlZm9yZSA9IG9wdHMuYmVmb3JlID8gW29wdHMuYmVmb3JlXSA6IFtdO1xuICAgICAgICBvcHRzLmFmdGVyID0gb3B0cy5hZnRlciA/IFtvcHRzLmFmdGVyXSA6IFtdO1xuICAgICAgICBvcHRzLmFmdGVyLnVuc2hpZnQoZnVuY3Rpb24oKXsgb3B0cy5idXN5PTA7IH0pO1xuICAgICAgICBpZiAob3B0cy5jb250aW51b3VzKVxuICAgICAgICAgICAgb3B0cy5hZnRlci5wdXNoKGZ1bmN0aW9uKCkgeyBnbyhlbHMsb3B0cywwLCFvcHRzLnJldik7IH0pO1xuICAgICAgICAgICAgXG4gICAgICAgIC8vIGNsZWFyVHlwZSBjb3JyZWN0aW9uc1xuICAgICAgICBpZiAoaWU2ICYmIG9wdHMuY2xlYXJ0eXBlICYmICFvcHRzLmNsZWFydHlwZU5vQmcpXG4gICAgICAgICAgICBjbGVhclR5cGVGaXgoJHNsaWRlcyk7XG5cbiAgICAgICAgLy8gYWxsb3cgc2hvcnRoYW5kIG92ZXJyaWRlcyBvZiB3aWR0aCwgaGVpZ2h0IGFuZCB0aW1lb3V0XG4gICAgICAgIHZhciBjbHMgPSB0aGlzLmNsYXNzTmFtZTtcbiAgICAgICAgb3B0cy53aWR0aCA9IHBhcnNlSW50KChjbHMubWF0Y2goL3c6KFxcZCspLyl8fFtdKVsxXSkgfHwgb3B0cy53aWR0aDtcbiAgICAgICAgb3B0cy5oZWlnaHQgPSBwYXJzZUludCgoY2xzLm1hdGNoKC9oOihcXGQrKS8pfHxbXSlbMV0pIHx8IG9wdHMuaGVpZ2h0O1xuICAgICAgICBvcHRzLnRpbWVvdXQgPSBwYXJzZUludCgoY2xzLm1hdGNoKC90OihcXGQrKS8pfHxbXSlbMV0pIHx8IG9wdHMudGltZW91dDtcblxuICAgICAgICBpZiAoJGNvbnQuY3NzKCdwb3NpdGlvbicpID09ICdzdGF0aWMnKSBcbiAgICAgICAgICAgICRjb250LmNzcygncG9zaXRpb24nLCAncmVsYXRpdmUnKTtcbiAgICAgICAgaWYgKG9wdHMud2lkdGgpIFxuICAgICAgICAgICAgJGNvbnQud2lkdGgob3B0cy53aWR0aCk7XG4gICAgICAgIGlmIChvcHRzLmhlaWdodCAmJiBvcHRzLmhlaWdodCAhPSAnYXV0bycpIFxuICAgICAgICAgICAgJGNvbnQuaGVpZ2h0KG9wdHMuaGVpZ2h0KTtcblxuICAgICAgICBpZiAob3B0cy5yYW5kb20pIHtcbiAgICAgICAgICAgIG9wdHMucmFuZG9tTWFwID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgXG4gICAgICAgICAgICAgICAgb3B0cy5yYW5kb21NYXAucHVzaChpKTtcbiAgICAgICAgICAgIG9wdHMucmFuZG9tTWFwLnNvcnQoZnVuY3Rpb24oYSxiKSB7cmV0dXJuIE1hdGgucmFuZG9tKCkgLSAwLjU7fSk7XG4gICAgICAgICAgICBvcHRzLnJhbmRvbUluZGV4ID0gMDtcbiAgICAgICAgICAgIG9wdHMuc3RhcnRpbmdTbGlkZSA9IG9wdHMucmFuZG9tTWFwWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdHMuc3RhcnRpbmdTbGlkZSA+PSBlbHMubGVuZ3RoKVxuICAgICAgICAgICAgb3B0cy5zdGFydGluZ1NsaWRlID0gMDsgLy8gY2F0Y2ggYm9ndXMgaW5wdXRcbiAgICAgICAgdmFyIGZpcnN0ID0gb3B0cy5zdGFydGluZ1NsaWRlIHx8IDA7XG4gICAgICAgICRzbGlkZXMuY3NzKHtwb3NpdGlvbjogJ2Fic29sdXRlJywgdG9wOjAsIGxlZnQ6MH0pLmhpZGUoKS5lYWNoKGZ1bmN0aW9uKGkpIHsgXG4gICAgICAgICAgICB2YXIgeiA9IGZpcnN0ID8gaSA+PSBmaXJzdCA/IGVscy5sZW5ndGggLSAoaS1maXJzdCkgOiBmaXJzdC1pIDogZWxzLmxlbmd0aC1pO1xuICAgICAgICAgICAgJCh0aGlzKS5jc3MoJ3otaW5kZXgnLCB6KSBcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAkKGVsc1tmaXJzdF0pLmNzcygnb3BhY2l0eScsMSkuc2hvdygpOyAvLyBvcGFjaXR5IGJpdCBuZWVkZWQgdG8gaGFuZGxlIHJlaW5pdCBjYXNlXG4gICAgICAgIGlmICgkLmJyb3dzZXIubXNpZSkgZWxzW2ZpcnN0XS5zdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2ZpbHRlcicpO1xuXG4gICAgICAgIGlmIChvcHRzLmZpdCAmJiBvcHRzLndpZHRoKSBcbiAgICAgICAgICAgICRzbGlkZXMud2lkdGgob3B0cy53aWR0aCk7XG4gICAgICAgIGlmIChvcHRzLmZpdCAmJiBvcHRzLmhlaWdodCAmJiBvcHRzLmhlaWdodCAhPSAnYXV0bycpIFxuICAgICAgICAgICAgJHNsaWRlcy5oZWlnaHQob3B0cy5oZWlnaHQpO1xuICAgICAgICBpZiAob3B0cy5wYXVzZSkgXG4gICAgICAgICAgICAkY29udC5ob3ZlcihmdW5jdGlvbigpe3RoaXMuY3ljbGVQYXVzZT0xO30sZnVuY3Rpb24oKXt0aGlzLmN5Y2xlUGF1c2U9MDt9KTtcblxuICAgICAgICAvLyBydW4gdHJhbnNpdGlvbiBpbml0IGZuXG4gICAgICAgIHZhciBpbml0ID0gJC5mbi5jeWNsZS50cmFuc2l0aW9uc1tvcHRzLmZ4XTtcbiAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihpbml0KSlcbiAgICAgICAgICAgIGluaXQoJGNvbnQsICRzbGlkZXMsIG9wdHMpO1xuICAgICAgICBlbHNlIGlmIChvcHRzLmZ4ICE9ICdjdXN0b20nKVxuICAgICAgICAgICAgbG9nKCd1bmtub3duIHRyYW5zaXRpb246ICcgKyBvcHRzLmZ4KTtcbiAgICAgICAgXG4gICAgICAgICRzbGlkZXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciAkZWwgPSAkKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jeWNsZUggPSAob3B0cy5maXQgJiYgb3B0cy5oZWlnaHQpID8gb3B0cy5oZWlnaHQgOiAkZWwuaGVpZ2h0KCk7XG4gICAgICAgICAgICB0aGlzLmN5Y2xlVyA9IChvcHRzLmZpdCAmJiBvcHRzLndpZHRoKSA/IG9wdHMud2lkdGggOiAkZWwud2lkdGgoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgb3B0cy5jc3NCZWZvcmUgPSBvcHRzLmNzc0JlZm9yZSB8fCB7fTtcbiAgICAgICAgb3B0cy5hbmltSW4gPSBvcHRzLmFuaW1JbiB8fCB7fTtcbiAgICAgICAgb3B0cy5hbmltT3V0ID0gb3B0cy5hbmltT3V0IHx8IHt9O1xuXG4gICAgICAgICRzbGlkZXMubm90KCc6ZXEoJytmaXJzdCsnKScpLmNzcyhvcHRzLmNzc0JlZm9yZSk7XG4gICAgICAgIGlmIChvcHRzLmNzc0ZpcnN0KVxuICAgICAgICAgICAgJCgkc2xpZGVzW2ZpcnN0XSkuY3NzKG9wdHMuY3NzRmlyc3QpO1xuXG4gICAgICAgIGlmIChvcHRzLnRpbWVvdXQpIHtcbiAgICAgICAgICAgIC8vIGVuc3VyZSB0aGF0IHRpbWVvdXQgYW5kIHNwZWVkIHNldHRpbmdzIGFyZSBzYW5lXG4gICAgICAgICAgICBpZiAob3B0cy5zcGVlZC5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpXG4gICAgICAgICAgICAgICAgb3B0cy5zcGVlZCA9IHtzbG93OiA2MDAsIGZhc3Q6IDIwMH1bb3B0cy5zcGVlZF0gfHwgNDAwO1xuICAgICAgICAgICAgaWYgKCFvcHRzLnN5bmMpXG4gICAgICAgICAgICAgICAgb3B0cy5zcGVlZCA9IG9wdHMuc3BlZWQgLyAyO1xuICAgICAgICAgICAgd2hpbGUoKG9wdHMudGltZW91dCAtIG9wdHMuc3BlZWQpIDwgMjUwKVxuICAgICAgICAgICAgICAgIG9wdHMudGltZW91dCArPSBvcHRzLnNwZWVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmVhc2luZykgXG4gICAgICAgICAgICBvcHRzLmVhc2VJbiA9IG9wdHMuZWFzZU91dCA9IG9wdHMuZWFzaW5nO1xuICAgICAgICBpZiAoIW9wdHMuc3BlZWRJbikgXG4gICAgICAgICAgICBvcHRzLnNwZWVkSW4gPSBvcHRzLnNwZWVkO1xuICAgICAgICBpZiAoIW9wdHMuc3BlZWRPdXQpIFxuICAgICAgICAgICAgb3B0cy5zcGVlZE91dCA9IG9wdHMuc3BlZWQ7XG5cbiBcdFx0b3B0cy5zbGlkZUNvdW50ID0gZWxzLmxlbmd0aDtcbiAgICAgICAgb3B0cy5jdXJyU2xpZGUgPSBmaXJzdDtcbiAgICAgICAgaWYgKG9wdHMucmFuZG9tKSB7XG4gICAgICAgICAgICBvcHRzLm5leHRTbGlkZSA9IG9wdHMuY3VyclNsaWRlO1xuICAgICAgICAgICAgaWYgKCsrb3B0cy5yYW5kb21JbmRleCA9PSBlbHMubGVuZ3RoKSBcbiAgICAgICAgICAgICAgICBvcHRzLnJhbmRvbUluZGV4ID0gMDtcbiAgICAgICAgICAgIG9wdHMubmV4dFNsaWRlID0gb3B0cy5yYW5kb21NYXBbb3B0cy5yYW5kb21JbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgb3B0cy5uZXh0U2xpZGUgPSBvcHRzLnN0YXJ0aW5nU2xpZGUgPj0gKGVscy5sZW5ndGgtMSkgPyAwIDogb3B0cy5zdGFydGluZ1NsaWRlKzE7XG5cbiAgICAgICAgLy8gZmlyZSBhcnRpZmljaWFsIGV2ZW50c1xuICAgICAgICB2YXIgZTAgPSAkc2xpZGVzW2ZpcnN0XTtcbiAgICAgICAgaWYgKG9wdHMuYmVmb3JlLmxlbmd0aClcbiAgICAgICAgICAgIG9wdHMuYmVmb3JlWzBdLmFwcGx5KGUwLCBbZTAsIGUwLCBvcHRzLCB0cnVlXSk7XG4gICAgICAgIGlmIChvcHRzLmFmdGVyLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICBvcHRzLmFmdGVyWzFdLmFwcGx5KGUwLCBbZTAsIGUwLCBvcHRzLCB0cnVlXSk7XG4gICAgICAgIFxuICAgICAgICBpZiAob3B0cy5jbGljayAmJiAhb3B0cy5uZXh0KVxuICAgICAgICAgICAgb3B0cy5uZXh0ID0gb3B0cy5jbGljaztcbiAgICAgICAgaWYgKG9wdHMubmV4dClcbiAgICAgICAgICAgICQob3B0cy5uZXh0KS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKCl7cmV0dXJuIGFkdmFuY2UoZWxzLG9wdHMsb3B0cy5yZXY/LTE6MSl9KTtcbiAgICAgICAgaWYgKG9wdHMucHJldilcbiAgICAgICAgICAgICQob3B0cy5wcmV2KS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKCl7cmV0dXJuIGFkdmFuY2UoZWxzLG9wdHMsb3B0cy5yZXY/MTotMSl9KTtcbiAgICAgICAgaWYgKG9wdHMucGFnZXIpXG4gICAgICAgICAgICBidWlsZFBhZ2VyKGVscyxvcHRzKTtcblxuICAgICAgICAvLyBleHBvc2UgZm4gZm9yIGFkZGluZyBzbGlkZXMgYWZ0ZXIgdGhlIHNob3cgaGFzIHN0YXJ0ZWRcbiAgICAgICAgb3B0cy5hZGRTbGlkZSA9IGZ1bmN0aW9uKG5ld1NsaWRlKSB7XG4gICAgICAgICAgICB2YXIgJHMgPSAkKG5ld1NsaWRlKSwgcyA9ICRzWzBdO1xuICAgICAgICAgICAgaWYgKCFvcHRzLmF1dG9zdG9wQ291bnQpXG4gICAgICAgICAgICAgICAgb3B0cy5jb3VudGRvd24rKztcbiAgICAgICAgICAgIGVscy5wdXNoKHMpO1xuICAgICAgICAgICAgaWYgKG9wdHMuZWxzKSBcbiAgICAgICAgICAgICAgICBvcHRzLmVscy5wdXNoKHMpOyAvLyBzaHVmZmxlIG5lZWRzIHRoaXNcbiAgICAgICAgICAgIG9wdHMuc2xpZGVDb3VudCA9IGVscy5sZW5ndGg7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICRzLmNzcygncG9zaXRpb24nLCdhYnNvbHV0ZScpLmFwcGVuZFRvKCRjb250KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGllNiAmJiBvcHRzLmNsZWFydHlwZSAmJiAhb3B0cy5jbGVhcnR5cGVOb0JnKVxuICAgICAgICAgICAgICAgIGNsZWFyVHlwZUZpeCgkcyk7XG5cbiAgICAgICAgICAgIGlmIChvcHRzLmZpdCAmJiBvcHRzLndpZHRoKSBcbiAgICAgICAgICAgICAgICAkcy53aWR0aChvcHRzLndpZHRoKTtcbiAgICAgICAgICAgIGlmIChvcHRzLmZpdCAmJiBvcHRzLmhlaWdodCAmJiBvcHRzLmhlaWdodCAhPSAnYXV0bycpIFxuICAgICAgICAgICAgICAgICRzbGlkZXMuaGVpZ2h0KG9wdHMuaGVpZ2h0KTtcbiAgICAgICAgICAgIHMuY3ljbGVIID0gKG9wdHMuZml0ICYmIG9wdHMuaGVpZ2h0KSA/IG9wdHMuaGVpZ2h0IDogJHMuaGVpZ2h0KCk7XG4gICAgICAgICAgICBzLmN5Y2xlVyA9IChvcHRzLmZpdCAmJiBvcHRzLndpZHRoKSA/IG9wdHMud2lkdGggOiAkcy53aWR0aCgpO1xuXG4gICAgICAgICAgICAkcy5jc3Mob3B0cy5jc3NCZWZvcmUpO1xuXG4gICAgICAgICAgICBpZiAob3B0cy5wYWdlcilcbiAgICAgICAgICAgICAgICAkLmZuLmN5Y2xlLmNyZWF0ZVBhZ2VyQW5jaG9yKGVscy5sZW5ndGgtMSwgcywgJChvcHRzLnBhZ2VyKSwgZWxzLCBvcHRzKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRzLm9uQWRkU2xpZGUgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgICAgICBvcHRzLm9uQWRkU2xpZGUoJHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChvcHRzLnRpbWVvdXQgfHwgb3B0cy5jb250aW51b3VzKVxuICAgICAgICAgICAgdGhpcy5jeWNsZVRpbWVvdXQgPSBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCl7Z28oZWxzLG9wdHMsMCwhb3B0cy5yZXYpfSwgXG4gICAgICAgICAgICAgICAgb3B0cy5jb250aW51b3VzID8gMTAgOiBvcHRzLnRpbWVvdXQgKyAob3B0cy5kZWxheXx8MCkpO1xuICAgIH0pO1xufTtcblxuZnVuY3Rpb24gZ28oZWxzLCBvcHRzLCBtYW51YWwsIGZ3ZCkge1xuICAgIGlmIChvcHRzLmJ1c3kpIHJldHVybjtcbiAgICB2YXIgcCA9IG9wdHMuY29udGFpbmVyLCBjdXJyID0gZWxzW29wdHMuY3VyclNsaWRlXSwgbmV4dCA9IGVsc1tvcHRzLm5leHRTbGlkZV07XG4gICAgaWYgKHAuY3ljbGVUaW1lb3V0ID09PSAwICYmICFtYW51YWwpIFxuICAgICAgICByZXR1cm47XG5cbiAgICBpZiAoIW1hbnVhbCAmJiAhcC5jeWNsZVBhdXNlICYmIFxuICAgICAgICAoKG9wdHMuYXV0b3N0b3AgJiYgKC0tb3B0cy5jb3VudGRvd24gPD0gMCkpIHx8XG4gICAgICAgIChvcHRzLm5vd3JhcCAmJiAhb3B0cy5yYW5kb20gJiYgb3B0cy5uZXh0U2xpZGUgPCBvcHRzLmN1cnJTbGlkZSkpKSB7XG4gICAgICAgIGlmIChvcHRzLmVuZClcbiAgICAgICAgICAgIG9wdHMuZW5kKG9wdHMpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG1hbnVhbCB8fCAhcC5jeWNsZVBhdXNlKSB7XG4gICAgICAgIGlmIChvcHRzLmJlZm9yZS5sZW5ndGgpXG4gICAgICAgICAgICAkLmVhY2gob3B0cy5iZWZvcmUsIGZ1bmN0aW9uKGksbykgeyBvLmFwcGx5KG5leHQsIFtjdXJyLCBuZXh0LCBvcHRzLCBmd2RdKTsgfSk7XG4gICAgICAgIHZhciBhZnRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCQuYnJvd3Nlci5tc2llICYmIG9wdHMuY2xlYXJ0eXBlKVxuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUucmVtb3ZlQXR0cmlidXRlKCdmaWx0ZXInKTtcbiAgICAgICAgICAgICQuZWFjaChvcHRzLmFmdGVyLCBmdW5jdGlvbihpLG8pIHsgby5hcHBseShuZXh0LCBbY3VyciwgbmV4dCwgb3B0cywgZndkXSk7IH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChvcHRzLm5leHRTbGlkZSAhPSBvcHRzLmN1cnJTbGlkZSkge1xuICAgICAgICAgICAgb3B0cy5idXN5ID0gMTtcbiAgICAgICAgICAgIGlmIChvcHRzLmZ4Rm4pXG4gICAgICAgICAgICAgICAgb3B0cy5meEZuKGN1cnIsIG5leHQsIG9wdHMsIGFmdGVyLCBmd2QpO1xuICAgICAgICAgICAgZWxzZSBpZiAoJC5pc0Z1bmN0aW9uKCQuZm4uY3ljbGVbb3B0cy5meF0pKVxuICAgICAgICAgICAgICAgICQuZm4uY3ljbGVbb3B0cy5meF0oY3VyciwgbmV4dCwgb3B0cywgYWZ0ZXIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICQuZm4uY3ljbGUuY3VzdG9tKGN1cnIsIG5leHQsIG9wdHMsIGFmdGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5yYW5kb20pIHtcbiAgICAgICAgICAgIG9wdHMuY3VyclNsaWRlID0gb3B0cy5uZXh0U2xpZGU7XG4gICAgICAgICAgICBpZiAoKytvcHRzLnJhbmRvbUluZGV4ID09IGVscy5sZW5ndGgpIFxuICAgICAgICAgICAgICAgIG9wdHMucmFuZG9tSW5kZXggPSAwO1xuICAgICAgICAgICAgb3B0cy5uZXh0U2xpZGUgPSBvcHRzLnJhbmRvbU1hcFtvcHRzLnJhbmRvbUluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHsgLy8gc2VxdWVuY2VcbiAgICAgICAgICAgIHZhciByb2xsID0gKG9wdHMubmV4dFNsaWRlICsgMSkgPT0gZWxzLmxlbmd0aDtcbiAgICAgICAgICAgIG9wdHMubmV4dFNsaWRlID0gcm9sbCA/IDAgOiBvcHRzLm5leHRTbGlkZSsxO1xuICAgICAgICAgICAgb3B0cy5jdXJyU2xpZGUgPSByb2xsID8gZWxzLmxlbmd0aC0xIDogb3B0cy5uZXh0U2xpZGUtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5wYWdlcilcbiAgICAgICAgICAgICQuZm4uY3ljbGUudXBkYXRlQWN0aXZlUGFnZXJMaW5rKG9wdHMucGFnZXIsIG9wdHMuY3VyclNsaWRlKTtcbiAgICB9XG4gICAgaWYgKG9wdHMudGltZW91dCAmJiAhb3B0cy5jb250aW51b3VzKVxuICAgICAgICBwLmN5Y2xlVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGdvKGVscyxvcHRzLDAsIW9wdHMucmV2KSB9LCBvcHRzLnRpbWVvdXQpO1xuICAgIGVsc2UgaWYgKG9wdHMuY29udGludW91cyAmJiBwLmN5Y2xlUGF1c2UpIFxuICAgICAgICBwLmN5Y2xlVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGdvKGVscyxvcHRzLDAsIW9wdHMucmV2KSB9LCAxMCk7XG59O1xuXG4kLmZuLmN5Y2xlLnVwZGF0ZUFjdGl2ZVBhZ2VyTGluayA9IGZ1bmN0aW9uKHBhZ2VyLCBjdXJyU2xpZGUpIHtcbiAgICAkKHBhZ2VyKS5maW5kKCdhJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZVNsaWRlJykuZmlsdGVyKCdhOmVxKCcrY3VyclNsaWRlKycpJykuYWRkQ2xhc3MoJ2FjdGl2ZVNsaWRlJyk7XG59O1xuXG4vLyBhZHZhbmNlIHNsaWRlIGZvcndhcmQgb3IgYmFja1xuZnVuY3Rpb24gYWR2YW5jZShlbHMsIG9wdHMsIHZhbCkge1xuICAgIHZhciBwID0gb3B0cy5jb250YWluZXIsIHRpbWVvdXQgPSBwLmN5Y2xlVGltZW91dDtcbiAgICBpZiAodGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHAuY3ljbGVUaW1lb3V0ID0gMDtcbiAgICB9XG4gICAgaWYgKG9wdHMucmFuZG9tICYmIHZhbCA8IDApIHtcbiAgICAgICAgLy8gbW92ZSBiYWNrIHRvIHRoZSBwcmV2aW91c2x5IGRpc3BsYXkgc2xpZGVcbiAgICAgICAgb3B0cy5yYW5kb21JbmRleC0tO1xuICAgICAgICBpZiAoLS1vcHRzLnJhbmRvbUluZGV4ID09IC0yKVxuICAgICAgICAgICAgb3B0cy5yYW5kb21JbmRleCA9IGVscy5sZW5ndGgtMjtcbiAgICAgICAgZWxzZSBpZiAob3B0cy5yYW5kb21JbmRleCA9PSAtMSlcbiAgICAgICAgICAgIG9wdHMucmFuZG9tSW5kZXggPSBlbHMubGVuZ3RoLTE7XG4gICAgICAgIG9wdHMubmV4dFNsaWRlID0gb3B0cy5yYW5kb21NYXBbb3B0cy5yYW5kb21JbmRleF07XG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdHMucmFuZG9tKSB7XG4gICAgICAgIGlmICgrK29wdHMucmFuZG9tSW5kZXggPT0gZWxzLmxlbmd0aCkgXG4gICAgICAgICAgICBvcHRzLnJhbmRvbUluZGV4ID0gMDtcbiAgICAgICAgb3B0cy5uZXh0U2xpZGUgPSBvcHRzLnJhbmRvbU1hcFtvcHRzLnJhbmRvbUluZGV4XTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG9wdHMubmV4dFNsaWRlID0gb3B0cy5jdXJyU2xpZGUgKyB2YWw7XG4gICAgICAgIGlmIChvcHRzLm5leHRTbGlkZSA8IDApIHtcbiAgICAgICAgICAgIGlmIChvcHRzLm5vd3JhcCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgb3B0cy5uZXh0U2xpZGUgPSBlbHMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRzLm5leHRTbGlkZSA+PSBlbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAob3B0cy5ub3dyYXApIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIG9wdHMubmV4dFNsaWRlID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbmxvZygnbmV4dFNsaWRlOiAnICsgb3B0cy5uZXh0U2xpZGUgKyAnOyByYW5kb21JbmRleDogJyArIG9wdHMucmFuZG9tSW5kZXgpOyAgICBcbiAgICBpZiAob3B0cy5wcmV2TmV4dENsaWNrICYmIHR5cGVvZiBvcHRzLnByZXZOZXh0Q2xpY2sgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgb3B0cy5wcmV2TmV4dENsaWNrKHZhbCA+IDAsIG9wdHMubmV4dFNsaWRlLCBlbHNbb3B0cy5uZXh0U2xpZGVdKTtcbiAgICBnbyhlbHMsIG9wdHMsIDEsIHZhbD49MCk7XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZnVuY3Rpb24gYnVpbGRQYWdlcihlbHMsIG9wdHMpIHtcbiAgICB2YXIgJHAgPSAkKG9wdHMucGFnZXIpO1xuICAgICQuZWFjaChlbHMsIGZ1bmN0aW9uKGksbykge1xuICAgICAgICAkLmZuLmN5Y2xlLmNyZWF0ZVBhZ2VyQW5jaG9yKGksbywkcCxlbHMsb3B0cyk7XG4gICAgfSk7XG4gICAkLmZuLmN5Y2xlLnVwZGF0ZUFjdGl2ZVBhZ2VyTGluayhvcHRzLnBhZ2VyLCBvcHRzLnN0YXJ0aW5nU2xpZGUpO1xufTtcblxuJC5mbi5jeWNsZS5jcmVhdGVQYWdlckFuY2hvciA9IGZ1bmN0aW9uKGksIGVsLCAkcCwgZWxzLCBvcHRzKSB7XG4gICAgdmFyICRhID0gKHR5cGVvZiBvcHRzLnBhZ2VyQW5jaG9yQnVpbGRlciA9PSAnZnVuY3Rpb24nKVxuICAgICAgICA/ICQob3B0cy5wYWdlckFuY2hvckJ1aWxkZXIoaSxlbCkpXG4gICAgICAgIDogJCgnPGEgaHJlZj1cIiNcIj4nKyhpKzEpKyc8L2E+Jyk7XG4gICAgXG4gICAgLy8gZG9uJ3QgcmVwYXJlbnQgaWYgYW5jaG9yIGlzIGluIHRoZSBkb21cbiAgICBpZiAoJGEucGFyZW50cygnYm9keScpLmxlbmd0aCA9PSAwKVxuICAgICAgICAkYS5hcHBlbmRUbygkcCk7XG4gICAgICAgIFxuICAgICRhLmJpbmQob3B0cy5wYWdlckV2ZW50LCBmdW5jdGlvbigpIHtcbiAgICAgICAgb3B0cy5uZXh0U2xpZGUgPSBpO1xuICAgICAgICB2YXIgcCA9IG9wdHMuY29udGFpbmVyLCB0aW1lb3V0ID0gcC5jeWNsZVRpbWVvdXQ7XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICBwLmN5Y2xlVGltZW91dCA9IDA7XG4gICAgICAgIH0gICAgICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzLnBhZ2VyQ2xpY2sgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIG9wdHMucGFnZXJDbGljayhvcHRzLm5leHRTbGlkZSwgZWxzW29wdHMubmV4dFNsaWRlXSk7XG4gICAgICAgIGdvKGVscyxvcHRzLDEsb3B0cy5jdXJyU2xpZGUgPCBpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xufTtcblxuXG4vLyB0aGlzIGZpeGVzIGNsZWFyVHlwZSBwcm9ibGVtcyBpbiBpZTYgYnkgc2V0dGluZyBhbiBleHBsaWNpdCBiZyBjb2xvclxuZnVuY3Rpb24gY2xlYXJUeXBlRml4KCRzbGlkZXMpIHtcbiAgICBmdW5jdGlvbiBoZXgocykge1xuICAgICAgICB2YXIgcyA9IHBhcnNlSW50KHMpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgcmV0dXJuIHMubGVuZ3RoIDwgMiA/ICcwJytzIDogcztcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldEJnKGUpIHtcbiAgICAgICAgZm9yICggOyBlICYmIGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPSAnaHRtbCc7IGUgPSBlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIHZhciB2ID0gJC5jc3MoZSwnYmFja2dyb3VuZC1jb2xvcicpO1xuICAgICAgICAgICAgaWYgKHYuaW5kZXhPZigncmdiJykgPj0gMCApIHsgXG4gICAgICAgICAgICAgICAgdmFyIHJnYiA9IHYubWF0Y2goL1xcZCsvZyk7IFxuICAgICAgICAgICAgICAgIHJldHVybiAnIycrIGhleChyZ2JbMF0pICsgaGV4KHJnYlsxXSkgKyBoZXgocmdiWzJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2ICYmIHYgIT0gJ3RyYW5zcGFyZW50JylcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyNmZmZmZmYnO1xuICAgIH07XG4gICAgJHNsaWRlcy5lYWNoKGZ1bmN0aW9uKCkgeyAkKHRoaXMpLmNzcygnYmFja2dyb3VuZC1jb2xvcicsIGdldEJnKHRoaXMpKTsgfSk7XG59O1xuXG5cbiQuZm4uY3ljbGUuY3VzdG9tID0gZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cywgY2IpIHtcbiAgICB2YXIgJGwgPSAkKGN1cnIpLCAkbiA9ICQobmV4dCk7XG4gICAgJG4uY3NzKG9wdHMuY3NzQmVmb3JlKTtcbiAgICB2YXIgZm4gPSBmdW5jdGlvbigpIHskbi5hbmltYXRlKG9wdHMuYW5pbUluLCBvcHRzLnNwZWVkSW4sIG9wdHMuZWFzZUluLCBjYil9O1xuICAgICRsLmFuaW1hdGUob3B0cy5hbmltT3V0LCBvcHRzLnNwZWVkT3V0LCBvcHRzLmVhc2VPdXQsIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAob3B0cy5jc3NBZnRlcikgJGwuY3NzKG9wdHMuY3NzQWZ0ZXIpO1xuICAgICAgICBpZiAoIW9wdHMuc3luYykgZm4oKTtcbiAgICB9KTtcbiAgICBpZiAob3B0cy5zeW5jKSBmbigpO1xufTtcblxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucyA9IHtcbiAgICBmYWRlOiBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xuICAgICAgICAkc2xpZGVzLm5vdCgnOmVxKCcrb3B0cy5zdGFydGluZ1NsaWRlKycpJykuY3NzKCdvcGFjaXR5JywwKTtcbiAgICAgICAgb3B0cy5iZWZvcmUucHVzaChmdW5jdGlvbigpIHsgJCh0aGlzKS5zaG93KCkgfSk7XG4gICAgICAgIG9wdHMuYW5pbUluICAgID0geyBvcGFjaXR5OiAxIH07XG4gICAgICAgIG9wdHMuYW5pbU91dCAgID0geyBvcGFjaXR5OiAwIH07XG4gICAgICAgIG9wdHMuY3NzQmVmb3JlID0geyBvcGFjaXR5OiAwIH07XG4gICAgICAgIG9wdHMuY3NzQWZ0ZXIgID0geyBkaXNwbGF5OiAnbm9uZScgfTtcbiAgICB9XG59O1xuXG4kLmZuLmN5Y2xlLnZlciA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdmVyOyB9O1xuXG4vLyBvdmVycmlkZSB0aGVzZSBnbG9iYWxseSBpZiB5b3UgbGlrZSAodGhleSBhcmUgYWxsIG9wdGlvbmFsKVxuJC5mbi5jeWNsZS5kZWZhdWx0cyA9IHtcbiAgICBmeDogICAgICAgICAgICdmYWRlJywgLy8gb25lIG9mOiBmYWRlLCBzaHVmZmxlLCB6b29tLCBzY3JvbGxMZWZ0LCBldGNcbiAgICB0aW1lb3V0OiAgICAgICA0MDAwLCAgLy8gbWlsbGlzZWNvbmRzIGJldHdlZW4gc2xpZGUgdHJhbnNpdGlvbnMgKDAgdG8gZGlzYWJsZSBhdXRvIGFkdmFuY2UpXG4gICAgY29udGludW91czogICAgMCwgICAgIC8vIHRydWUgdG8gc3RhcnQgbmV4dCB0cmFuc2l0aW9uIGltbWVkaWF0ZWx5IGFmdGVyIGN1cnJlbnQgb25lIGNvbXBsZXRlc1xuICAgIHNwZWVkOiAgICAgICAgIDEwMDAsICAvLyBzcGVlZCBvZiB0aGUgdHJhbnNpdGlvbiAoYW55IHZhbGlkIGZ4IHNwZWVkIHZhbHVlKVxuICAgIHNwZWVkSW46ICAgICAgIG51bGwsICAvLyBzcGVlZCBvZiB0aGUgJ2luJyB0cmFuc2l0aW9uXG4gICAgc3BlZWRPdXQ6ICAgICAgbnVsbCwgIC8vIHNwZWVkIG9mIHRoZSAnb3V0JyB0cmFuc2l0aW9uXG4gICAgbmV4dDogICAgICAgICAgbnVsbCwgIC8vIGlkIG9mIGVsZW1lbnQgdG8gdXNlIGFzIGNsaWNrIHRyaWdnZXIgZm9yIG5leHQgc2xpZGVcbiAgICBwcmV2OiAgICAgICAgICBudWxsLCAgLy8gaWQgb2YgZWxlbWVudCB0byB1c2UgYXMgY2xpY2sgdHJpZ2dlciBmb3IgcHJldmlvdXMgc2xpZGVcbiAgICBwcmV2TmV4dENsaWNrOiBudWxsLCAgLy8gY2FsbGJhY2sgZm4gZm9yIHByZXYvbmV4dCBjbGlja3M6ICBmdW5jdGlvbihpc05leHQsIHplcm9CYXNlZFNsaWRlSW5kZXgsIHNsaWRlRWxlbWVudClcbiAgICBwYWdlcjogICAgICAgICBudWxsLCAgLy8gaWQgb2YgZWxlbWVudCB0byB1c2UgYXMgcGFnZXIgY29udGFpbmVyXG4gICAgcGFnZXJDbGljazogICAgbnVsbCwgIC8vIGNhbGxiYWNrIGZuIGZvciBwYWdlciBjbGlja3M6ICBmdW5jdGlvbih6ZXJvQmFzZWRTbGlkZUluZGV4LCBzbGlkZUVsZW1lbnQpXG4gICAgcGFnZXJFdmVudDogICAnY2xpY2snLCAvLyBldmVudCB3aGljaCBkcml2ZXMgdGhlIHBhZ2VyIG5hdmlnYXRpb25cbiAgICBwYWdlckFuY2hvckJ1aWxkZXI6IG51bGwsIC8vIGNhbGxiYWNrIGZuIGZvciBidWlsZGluZyBhbmNob3IgbGlua3NcbiAgICBiZWZvcmU6ICAgICAgICBudWxsLCAgLy8gdHJhbnNpdGlvbiBjYWxsYmFjayAoc2NvcGUgc2V0IHRvIGVsZW1lbnQgdG8gYmUgc2hvd24pXG4gICAgYWZ0ZXI6ICAgICAgICAgbnVsbCwgIC8vIHRyYW5zaXRpb24gY2FsbGJhY2sgKHNjb3BlIHNldCB0byBlbGVtZW50IHRoYXQgd2FzIHNob3duKVxuICAgIGVuZDogICAgICAgICAgIG51bGwsICAvLyBjYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIHNsaWRlc2hvdyB0ZXJtaW5hdGVzICh1c2Ugd2l0aCBhdXRvc3RvcCBvciBub3dyYXAgb3B0aW9ucylcbiAgICBlYXNpbmc6ICAgICAgICBudWxsLCAgLy8gZWFzaW5nIG1ldGhvZCBmb3IgYm90aCBpbiBhbmQgb3V0IHRyYW5zaXRpb25zXG4gICAgZWFzZUluOiAgICAgICAgbnVsbCwgIC8vIGVhc2luZyBmb3IgXCJpblwiIHRyYW5zaXRpb25cbiAgICBlYXNlT3V0OiAgICAgICBudWxsLCAgLy8gZWFzaW5nIGZvciBcIm91dFwiIHRyYW5zaXRpb25cbiAgICBzaHVmZmxlOiAgICAgICBudWxsLCAgLy8gY29vcmRzIGZvciBzaHVmZmxlIGFuaW1hdGlvbiwgZXg6IHsgdG9wOjE1LCBsZWZ0OiAyMDAgfVxuICAgIGFuaW1JbjogICAgICAgIG51bGwsICAvLyBwcm9wZXJ0aWVzIHRoYXQgZGVmaW5lIGhvdyB0aGUgc2xpZGUgYW5pbWF0ZXMgaW5cbiAgICBhbmltT3V0OiAgICAgICBudWxsLCAgLy8gcHJvcGVydGllcyB0aGF0IGRlZmluZSBob3cgdGhlIHNsaWRlIGFuaW1hdGVzIG91dFxuICAgIGNzc0JlZm9yZTogICAgIG51bGwsICAvLyBwcm9wZXJ0aWVzIHRoYXQgZGVmaW5lIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBzbGlkZSBiZWZvcmUgdHJhbnNpdGlvbmluZyBpblxuICAgIGNzc0FmdGVyOiAgICAgIG51bGwsICAvLyBwcm9wZXJ0aWVzIHRoYXQgZGVmaW5lZCB0aGUgc3RhdGUgb2YgdGhlIHNsaWRlIGFmdGVyIHRyYW5zaXRpb25pbmcgb3V0XG4gICAgZnhGbjogICAgICAgICAgbnVsbCwgIC8vIGZ1bmN0aW9uIHVzZWQgdG8gY29udHJvbCB0aGUgdHJhbnNpdGlvblxuICAgIGhlaWdodDogICAgICAgJ2F1dG8nLCAvLyBjb250YWluZXIgaGVpZ2h0XG4gICAgc3RhcnRpbmdTbGlkZTogMCwgICAgIC8vIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGZpcnN0IHNsaWRlIHRvIGJlIGRpc3BsYXllZFxuICAgIHN5bmM6ICAgICAgICAgIDEsICAgICAvLyB0cnVlIGlmIGluL291dCB0cmFuc2l0aW9ucyBzaG91bGQgb2NjdXIgc2ltdWx0YW5lb3VzbHlcbiAgICByYW5kb206ICAgICAgICAwLCAgICAgLy8gdHJ1ZSBmb3IgcmFuZG9tLCBmYWxzZSBmb3Igc2VxdWVuY2UgKG5vdCBhcHBsaWNhYmxlIHRvIHNodWZmbGUgZngpXG4gICAgZml0OiAgICAgICAgICAgMCwgICAgIC8vIGZvcmNlIHNsaWRlcyB0byBmaXQgY29udGFpbmVyXG4gICAgcGF1c2U6ICAgICAgICAgMCwgICAgIC8vIHRydWUgdG8gZW5hYmxlIFwicGF1c2Ugb24gaG92ZXJcIlxuICAgIGF1dG9zdG9wOiAgICAgIDAsICAgICAvLyB0cnVlIHRvIGVuZCBzbGlkZXNob3cgYWZ0ZXIgWCB0cmFuc2l0aW9ucyAod2hlcmUgWCA9PSBzbGlkZSBjb3VudClcbiAgICBhdXRvc3RvcENvdW50OiAwLCAgICAgLy8gbnVtYmVyIG9mIHRyYW5zaXRpb25zIChvcHRpb25hbGx5IHVzZWQgd2l0aCBhdXRvc3RvcCB0byBkZWZpbmUgWClcbiAgICBkZWxheTogICAgICAgICAwLCAgICAgLy8gYWRkaXRpb25hbCBkZWxheSAoaW4gbXMpIGZvciBmaXJzdCB0cmFuc2l0aW9uIChoaW50OiBjYW4gYmUgbmVnYXRpdmUpXG4gICAgc2xpZGVFeHByOiAgICAgbnVsbCwgIC8vIGV4cHJlc3Npb24gZm9yIHNlbGVjdGluZyBzbGlkZXMgKGlmIHNvbWV0aGluZyBvdGhlciB0aGFuIGFsbCBjaGlsZHJlbiBpcyByZXF1aXJlZClcbiAgICBjbGVhcnR5cGU6ICAgICAwLCAgICAgLy8gdHJ1ZSBpZiBjbGVhclR5cGUgY29ycmVjdGlvbnMgc2hvdWxkIGJlIGFwcGxpZWQgKGZvciBJRSlcbiAgICBub3dyYXA6ICAgICAgICAwICAgICAgLy8gdHJ1ZSB0byBwcmV2ZW50IHNsaWRlc2hvdyBmcm9tIHdyYXBwaW5nXG59O1xuXG59KShqUXVlcnkpO1xuXG5cbi8qXG4gKiBqUXVlcnkgQ3ljbGUgUGx1Z2luIFRyYW5zaXRpb24gRGVmaW5pdGlvbnNcbiAqIFRoaXMgc2NyaXB0IGlzIGEgcGx1Z2luIGZvciB0aGUgalF1ZXJ5IEN5Y2xlIFBsdWdpblxuICogRXhhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24gYXQ6IGh0dHA6Ly9tYWxzdXAuY29tL2pxdWVyeS9jeWNsZS9cbiAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IE0uIEFsc3VwXG4gKiBWZXJzaW9uOiAgMi4yMlxuICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXM6XG4gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sXG4gKi9cbihmdW5jdGlvbigkKSB7XG5cbi8vXG4vLyBUaGVzZSBmdW5jdGlvbnMgZGVmaW5lIG9uZS10aW1lIHNsaWRlIGluaXRpYWxpemF0aW9uIGZvciB0aGUgbmFtZWRcbi8vIHRyYW5zaXRpb25zLiBUbyBzYXZlIGZpbGUgc2l6ZSBmZWVsIGZyZWUgdG8gcmVtb3ZlIGFueSBvZiB0aGVzZSB0aGF0IHlvdSBcbi8vIGRvbid0IG5lZWQuXG4vL1xuXG4vLyBzY3JvbGxVcC9Eb3duL0xlZnQvUmlnaHRcbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMuc2Nyb2xsVXAgPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xuICAgICRjb250LmNzcygnb3ZlcmZsb3cnLCdoaWRkZW4nKTtcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcbiAgICAgICAgJCh0aGlzKS5zaG93KCk7XG4gICAgICAgIG9wdHMuY3NzQmVmb3JlLnRvcCA9IG5leHQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBvcHRzLmFuaW1PdXQudG9wID0gMC1jdXJyLm9mZnNldEhlaWdodDtcbiAgICB9KTtcbiAgICBvcHRzLmNzc0ZpcnN0ID0geyB0b3A6IDAgfTtcbiAgICBvcHRzLmFuaW1JbiAgID0geyB0b3A6IDAgfTtcbiAgICBvcHRzLmNzc0FmdGVyID0geyBkaXNwbGF5OiAnbm9uZScgfTtcbn07XG4kLmZuLmN5Y2xlLnRyYW5zaXRpb25zLnNjcm9sbERvd24gPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xuICAgICRjb250LmNzcygnb3ZlcmZsb3cnLCdoaWRkZW4nKTtcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcbiAgICAgICAgJCh0aGlzKS5zaG93KCk7XG4gICAgICAgIG9wdHMuY3NzQmVmb3JlLnRvcCA9IDAtbmV4dC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIG9wdHMuYW5pbU91dC50b3AgPSBjdXJyLm9mZnNldEhlaWdodDtcbiAgICB9KTtcbiAgICBvcHRzLmNzc0ZpcnN0ID0geyB0b3A6IDAgfTtcbiAgICBvcHRzLmFuaW1JbiAgID0geyB0b3A6IDAgfTtcbiAgICBvcHRzLmNzc0FmdGVyID0geyBkaXNwbGF5OiAnbm9uZScgfTtcbn07XG4kLmZuLmN5Y2xlLnRyYW5zaXRpb25zLnNjcm9sbExlZnQgPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xuICAgICRjb250LmNzcygnb3ZlcmZsb3cnLCdoaWRkZW4nKTtcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcbiAgICAgICAgJCh0aGlzKS5zaG93KCk7XG4gICAgICAgIG9wdHMuY3NzQmVmb3JlLmxlZnQgPSBuZXh0Lm9mZnNldFdpZHRoO1xuICAgICAgICBvcHRzLmFuaW1PdXQubGVmdCA9IDAtY3Vyci5vZmZzZXRXaWR0aDtcbiAgICB9KTtcbiAgICBvcHRzLmNzc0ZpcnN0ID0geyBsZWZ0OiAwIH07XG4gICAgb3B0cy5hbmltSW4gICA9IHsgbGVmdDogMCB9O1xufTtcbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMuc2Nyb2xsUmlnaHQgPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xuICAgICRjb250LmNzcygnb3ZlcmZsb3cnLCdoaWRkZW4nKTtcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcbiAgICAgICAgJCh0aGlzKS5zaG93KCk7XG4gICAgICAgIG9wdHMuY3NzQmVmb3JlLmxlZnQgPSAwLW5leHQub2Zmc2V0V2lkdGg7XG4gICAgICAgIG9wdHMuYW5pbU91dC5sZWZ0ID0gY3Vyci5vZmZzZXRXaWR0aDtcbiAgICB9KTtcbiAgICBvcHRzLmNzc0ZpcnN0ID0geyBsZWZ0OiAwIH07XG4gICAgb3B0cy5hbmltSW4gICA9IHsgbGVmdDogMCB9O1xufTtcbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMuc2Nyb2xsSG9yeiA9IGZ1bmN0aW9uKCRjb250LCAkc2xpZGVzLCBvcHRzKSB7XG4gICAgJGNvbnQuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpLndpZHRoKCk7XG4vLyAgICAkc2xpZGVzLnNob3coKTtcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMsIGZ3ZCkge1xuICAgICAgICAkKHRoaXMpLnNob3coKTtcbiAgICAgICAgdmFyIGN1cnJXID0gY3Vyci5vZmZzZXRXaWR0aCwgbmV4dFcgPSBuZXh0Lm9mZnNldFdpZHRoO1xuICAgICAgICBvcHRzLmNzc0JlZm9yZSA9IGZ3ZCA/IHsgbGVmdDogbmV4dFcgfSA6IHsgbGVmdDogLW5leHRXIH07XG4gICAgICAgIG9wdHMuYW5pbUluLmxlZnQgPSAwO1xuICAgICAgICBvcHRzLmFuaW1PdXQubGVmdCA9IGZ3ZCA/IC1jdXJyVyA6IGN1cnJXO1xuICAgICAgICAkc2xpZGVzLm5vdChjdXJyKS5jc3Mob3B0cy5jc3NCZWZvcmUpO1xuICAgIH0pO1xuICAgIG9wdHMuY3NzRmlyc3QgPSB7IGxlZnQ6IDAgfTtcbiAgICBvcHRzLmNzc0FmdGVyID0geyBkaXNwbGF5OiAnbm9uZScgfVxufTtcbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMuc2Nyb2xsVmVydCA9IGZ1bmN0aW9uKCRjb250LCAkc2xpZGVzLCBvcHRzKSB7XG4gICAgJGNvbnQuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpO1xuLy8gICAgJHNsaWRlcy5zaG93KCk7XG4gICAgb3B0cy5iZWZvcmUucHVzaChmdW5jdGlvbihjdXJyLCBuZXh0LCBvcHRzLCBmd2QpIHtcbiAgICAgICAgJCh0aGlzKS5zaG93KCk7XG4gICAgICAgIHZhciBjdXJySCA9IGN1cnIub2Zmc2V0SGVpZ2h0LCBuZXh0SCA9IG5leHQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBvcHRzLmNzc0JlZm9yZSA9IGZ3ZCA/IHsgdG9wOiAtbmV4dEggfSA6IHsgdG9wOiBuZXh0SCB9O1xuICAgICAgICBvcHRzLmFuaW1Jbi50b3AgPSAwO1xuICAgICAgICBvcHRzLmFuaW1PdXQudG9wID0gZndkID8gY3VyckggOiAtY3Vyckg7XG4gICAgICAgICRzbGlkZXMubm90KGN1cnIpLmNzcyhvcHRzLmNzc0JlZm9yZSk7XG4gICAgfSk7XG4gICAgb3B0cy5jc3NGaXJzdCA9IHsgdG9wOiAwIH07XG4gICAgb3B0cy5jc3NBZnRlciA9IHsgZGlzcGxheTogJ25vbmUnIH1cbn07XG5cbi8vIHNsaWRlWC9zbGlkZVlcbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMuc2xpZGVYID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcbiAgICAgICAgJChjdXJyKS5jc3MoJ3pJbmRleCcsMSk7XG4gICAgfSk7ICAgIFxuICAgIG9wdHMub25BZGRTbGlkZSA9IGZ1bmN0aW9uKCRzKSB7ICRzLmhpZGUoKTsgfTtcbiAgICBvcHRzLmNzc0JlZm9yZSA9IHsgekluZGV4OiAyIH07XG4gICAgb3B0cy5hbmltSW4gID0geyB3aWR0aDogJ3Nob3cnIH07XG4gICAgb3B0cy5hbmltT3V0ID0geyB3aWR0aDogJ2hpZGUnIH07XG59O1xuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5zbGlkZVkgPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xuICAgICAgICAkKGN1cnIpLmNzcygnekluZGV4JywxKTtcbiAgICB9KTsgICAgXG4gICAgb3B0cy5vbkFkZFNsaWRlID0gZnVuY3Rpb24oJHMpIHsgJHMuaGlkZSgpOyB9O1xuICAgIG9wdHMuY3NzQmVmb3JlID0geyB6SW5kZXg6IDIgfTtcbiAgICBvcHRzLmFuaW1JbiAgPSB7IGhlaWdodDogJ3Nob3cnIH07XG4gICAgb3B0cy5hbmltT3V0ID0geyBoZWlnaHQ6ICdoaWRlJyB9O1xufTtcblxuLy8gc2h1ZmZsZVxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5zaHVmZmxlID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcbiAgICB2YXIgdyA9ICRjb250LmNzcygnb3ZlcmZsb3cnLCAndmlzaWJsZScpLndpZHRoKCk7XG4gICAgJHNsaWRlcy5jc3Moe2xlZnQ6IDAsIHRvcDogMH0pO1xuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oKSB7ICQodGhpcykuc2hvdygpIH0pO1xuICAgIG9wdHMuc3BlZWQgPSBvcHRzLnNwZWVkIC8gMjsgLy8gc2h1ZmZsZSBoYXMgMiB0cmFuc2l0aW9ucyAgICAgICAgXG4gICAgb3B0cy5yYW5kb20gPSAwO1xuICAgIG9wdHMuc2h1ZmZsZSA9IG9wdHMuc2h1ZmZsZSB8fCB7bGVmdDotdywgdG9wOjE1fTtcbiAgICBvcHRzLmVscyA9IFtdO1xuICAgIGZvciAodmFyIGk9MDsgaSA8ICRzbGlkZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIG9wdHMuZWxzLnB1c2goJHNsaWRlc1tpXSk7XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBvcHRzLnN0YXJ0aW5nU2xpZGU7IGkrKylcbiAgICAgICAgb3B0cy5lbHMucHVzaChvcHRzLmVscy5zaGlmdCgpKTtcblxuICAgIC8vIGN1c3RvbSB0cmFuc2l0aW9uIGZuIChoYXQgdGlwIHRvIEJlbmphbWluIFN0ZXJsaW5nIGZvciB0aGlzIGJpdCBvZiBzd2VldG5lc3MhKVxuICAgIG9wdHMuZnhGbiA9IGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMsIGNiLCBmd2QpIHtcbiAgICAgICAgdmFyICRlbCA9IGZ3ZCA/ICQoY3VycikgOiAkKG5leHQpO1xuICAgICAgICAkZWwuYW5pbWF0ZShvcHRzLnNodWZmbGUsIG9wdHMuc3BlZWRJbiwgb3B0cy5lYXNlSW4sIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZndkID8gb3B0cy5lbHMucHVzaChvcHRzLmVscy5zaGlmdCgpKSA6IG9wdHMuZWxzLnVuc2hpZnQob3B0cy5lbHMucG9wKCkpO1xuICAgICAgICAgICAgaWYgKGZ3ZCkgXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaT0wLCBsZW49b3B0cy5lbHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgICAgICAgICAgICQob3B0cy5lbHNbaV0pLmNzcygnei1pbmRleCcsIGxlbi1pKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciB6ID0gJChjdXJyKS5jc3MoJ3otaW5kZXgnKTtcbiAgICAgICAgICAgICAgICAkZWwuY3NzKCd6LWluZGV4JywgcGFyc2VJbnQoeikrMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkZWwuYW5pbWF0ZSh7bGVmdDowLCB0b3A6MH0sIG9wdHMuc3BlZWRPdXQsIG9wdHMuZWFzZU91dCwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgJChmd2QgPyB0aGlzIDogY3VycikuaGlkZSgpO1xuICAgICAgICAgICAgICAgIGlmIChjYikgY2IoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIG9wdHMub25BZGRTbGlkZSA9IGZ1bmN0aW9uKCRzKSB7ICRzLmhpZGUoKTsgfTtcbn07XG5cbi8vIHR1cm5VcC9Eb3duL0xlZnQvUmlnaHRcbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMudHVyblVwID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcbiAgICAgICAgJCh0aGlzKS5zaG93KCk7XG4gICAgICAgIG9wdHMuY3NzQmVmb3JlLnRvcCA9IG5leHQuY3ljbGVIO1xuICAgICAgICBvcHRzLmFuaW1Jbi5oZWlnaHQgPSBuZXh0LmN5Y2xlSDtcbiAgICB9KTtcbiAgICBvcHRzLm9uQWRkU2xpZGUgPSBmdW5jdGlvbigkcykgeyAkcy5oaWRlKCk7IH07XG4gICAgb3B0cy5jc3NGaXJzdCAgPSB7IHRvcDogMCB9O1xuICAgIG9wdHMuY3NzQmVmb3JlID0geyBoZWlnaHQ6IDAgfTtcbiAgICBvcHRzLmFuaW1JbiAgICA9IHsgdG9wOiAwIH07XG4gICAgb3B0cy5hbmltT3V0ICAgPSB7IGhlaWdodDogMCB9O1xuICAgIG9wdHMuY3NzQWZ0ZXIgID0geyBkaXNwbGF5OiAnbm9uZScgfTtcbn07XG4kLmZuLmN5Y2xlLnRyYW5zaXRpb25zLnR1cm5Eb3duID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcbiAgICAgICAgJCh0aGlzKS5zaG93KCk7XG4gICAgICAgIG9wdHMuYW5pbUluLmhlaWdodCA9IG5leHQuY3ljbGVIO1xuICAgICAgICBvcHRzLmFuaW1PdXQudG9wICAgPSBjdXJyLmN5Y2xlSDtcbiAgICB9KTtcbiAgICBvcHRzLm9uQWRkU2xpZGUgPSBmdW5jdGlvbigkcykgeyAkcy5oaWRlKCk7IH07XG4gICAgb3B0cy5jc3NGaXJzdCAgPSB7IHRvcDogMCB9O1xuICAgIG9wdHMuY3NzQmVmb3JlID0geyB0b3A6IDAsIGhlaWdodDogMCB9O1xuICAgIG9wdHMuYW5pbU91dCAgID0geyBoZWlnaHQ6IDAgfTtcbiAgICBvcHRzLmNzc0FmdGVyICA9IHsgZGlzcGxheTogJ25vbmUnIH07XG59O1xuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy50dXJuTGVmdCA9IGZ1bmN0aW9uKCRjb250LCAkc2xpZGVzLCBvcHRzKSB7XG4gICAgb3B0cy5iZWZvcmUucHVzaChmdW5jdGlvbihjdXJyLCBuZXh0LCBvcHRzKSB7XG4gICAgICAgICQodGhpcykuc2hvdygpO1xuICAgICAgICBvcHRzLmNzc0JlZm9yZS5sZWZ0ID0gbmV4dC5jeWNsZVc7XG4gICAgICAgIG9wdHMuYW5pbUluLndpZHRoID0gbmV4dC5jeWNsZVc7XG4gICAgfSk7XG4gICAgb3B0cy5vbkFkZFNsaWRlID0gZnVuY3Rpb24oJHMpIHsgJHMuaGlkZSgpOyB9O1xuICAgIG9wdHMuY3NzQmVmb3JlID0geyB3aWR0aDogMCB9O1xuICAgIG9wdHMuYW5pbUluICAgID0geyBsZWZ0OiAwIH07XG4gICAgb3B0cy5hbmltT3V0ICAgPSB7IHdpZHRoOiAwIH07XG4gICAgb3B0cy5jc3NBZnRlciAgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xufTtcbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMudHVyblJpZ2h0ID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcbiAgICAgICAgJCh0aGlzKS5zaG93KCk7XG4gICAgICAgIG9wdHMuYW5pbUluLndpZHRoID0gbmV4dC5jeWNsZVc7XG4gICAgICAgIG9wdHMuYW5pbU91dC5sZWZ0ID0gY3Vyci5jeWNsZVc7XG4gICAgfSk7XG4gICAgb3B0cy5vbkFkZFNsaWRlID0gZnVuY3Rpb24oJHMpIHsgJHMuaGlkZSgpOyB9O1xuICAgIG9wdHMuY3NzQmVmb3JlID0geyBsZWZ0OiAwLCB3aWR0aDogMCB9O1xuICAgIG9wdHMuYW5pbUluICAgID0geyBsZWZ0OiAwIH07XG4gICAgb3B0cy5hbmltT3V0ICAgPSB7IHdpZHRoOiAwIH07XG4gICAgb3B0cy5jc3NBZnRlciAgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xufTtcblxuLy8gem9vbVxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy56b29tID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcbiAgICBvcHRzLmNzc0ZpcnN0ID0geyB0b3A6MCwgbGVmdDogMCB9OyBcbiAgICBvcHRzLmNzc0FmdGVyID0geyBkaXNwbGF5OiAnbm9uZScgfTtcbiAgICBcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcbiAgICAgICAgJCh0aGlzKS5zaG93KCk7XG4gICAgICAgIG9wdHMuY3NzQmVmb3JlID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwLCB0b3A6IG5leHQuY3ljbGVILzIsIGxlZnQ6IG5leHQuY3ljbGVXLzIgfTtcbiAgICAgICAgb3B0cy5jc3NBZnRlciAgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xuICAgICAgICBvcHRzLmFuaW1JbiAgICA9IHsgdG9wOiAwLCBsZWZ0OiAwLCB3aWR0aDogbmV4dC5jeWNsZVcsIGhlaWdodDogbmV4dC5jeWNsZUggfTtcbiAgICAgICAgb3B0cy5hbmltT3V0ICAgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHRvcDogY3Vyci5jeWNsZUgvMiwgbGVmdDogY3Vyci5jeWNsZVcvMiB9O1xuICAgICAgICAkKGN1cnIpLmNzcygnekluZGV4JywyKTtcbiAgICAgICAgJChuZXh0KS5jc3MoJ3pJbmRleCcsMSk7XG4gICAgfSk7ICAgIFxuICAgIG9wdHMub25BZGRTbGlkZSA9IGZ1bmN0aW9uKCRzKSB7ICRzLmhpZGUoKTsgfTtcbn07XG5cbi8vIGZhZGVab29tXG4kLmZuLmN5Y2xlLnRyYW5zaXRpb25zLmZhZGVab29tID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcbiAgICAgICAgb3B0cy5jc3NCZWZvcmUgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIG9wYWNpdHk6IDEsIGxlZnQ6IG5leHQuY3ljbGVXLzIsIHRvcDogbmV4dC5jeWNsZUgvMiwgekluZGV4OiAxIH07XG4gICAgICAgIG9wdHMuYW5pbUluICAgID0geyB0b3A6IDAsIGxlZnQ6IDAsIHdpZHRoOiBuZXh0LmN5Y2xlVywgaGVpZ2h0OiBuZXh0LmN5Y2xlSCB9O1xuICAgIH0pOyAgICBcbiAgICBvcHRzLmFuaW1PdXQgID0geyBvcGFjaXR5OiAwIH07XG4gICAgb3B0cy5jc3NBZnRlciA9IHsgekluZGV4OiAwIH07XG59O1xuXG4vLyBibGluZFhcbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMuYmxpbmRYID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcbiAgICB2YXIgdyA9ICRjb250LmNzcygnb3ZlcmZsb3cnLCdoaWRkZW4nKS53aWR0aCgpO1xuICAgICRzbGlkZXMuc2hvdygpO1xuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xuICAgICAgICAkKGN1cnIpLmNzcygnekluZGV4JywxKTtcbiAgICB9KTsgICAgXG4gICAgb3B0cy5jc3NCZWZvcmUgPSB7IGxlZnQ6IHcsIHpJbmRleDogMiB9O1xuICAgIG9wdHMuY3NzQWZ0ZXIgPSB7IHpJbmRleDogMSB9O1xuICAgIG9wdHMuYW5pbUluID0geyBsZWZ0OiAwIH07XG4gICAgb3B0cy5hbmltT3V0ICA9IHsgbGVmdDogdyB9O1xufTtcbi8vIGJsaW5kWVxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5ibGluZFkgPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xuICAgIHZhciBoID0gJGNvbnQuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpLmhlaWdodCgpO1xuICAgICRzbGlkZXMuc2hvdygpO1xuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xuICAgICAgICAkKGN1cnIpLmNzcygnekluZGV4JywxKTtcbiAgICB9KTsgICAgXG4gICAgb3B0cy5jc3NCZWZvcmUgPSB7IHRvcDogaCwgekluZGV4OiAyIH07XG4gICAgb3B0cy5jc3NBZnRlciA9IHsgekluZGV4OiAxIH07XG4gICAgb3B0cy5hbmltSW4gPSB7IHRvcDogMCB9O1xuICAgIG9wdHMuYW5pbU91dCAgPSB7IHRvcDogaCB9O1xufTtcbi8vIGJsaW5kWlxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5ibGluZFogPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xuICAgIHZhciBoID0gJGNvbnQuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpLmhlaWdodCgpO1xuICAgIHZhciB3ID0gJGNvbnQud2lkdGgoKTtcbiAgICAkc2xpZGVzLnNob3coKTtcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcbiAgICAgICAgJChjdXJyKS5jc3MoJ3pJbmRleCcsMSk7XG4gICAgfSk7ICAgIFxuICAgIG9wdHMuY3NzQmVmb3JlID0geyB0b3A6IGgsIGxlZnQ6IHcsIHpJbmRleDogMiB9O1xuICAgIG9wdHMuY3NzQWZ0ZXIgPSB7IHpJbmRleDogMSB9O1xuICAgIG9wdHMuYW5pbUluID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcbiAgICBvcHRzLmFuaW1PdXQgID0geyB0b3A6IGgsIGxlZnQ6IHcgfTtcbn07XG5cbi8vIGdyb3dYIC0gZ3JvdyBob3Jpem9udGFsbHkgZnJvbSBjZW50ZXJlZCAwIHdpZHRoXG4kLmZuLmN5Y2xlLnRyYW5zaXRpb25zLmdyb3dYID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcbiAgICAgICAgb3B0cy5jc3NCZWZvcmUgPSB7IGxlZnQ6IHRoaXMuY3ljbGVXLzIsIHdpZHRoOiAwLCB6SW5kZXg6IDIgfTtcbiAgICAgICAgb3B0cy5hbmltSW4gPSB7IGxlZnQ6IDAsIHdpZHRoOiB0aGlzLmN5Y2xlVyB9O1xuICAgICAgICBvcHRzLmFuaW1PdXQgPSB7IGxlZnQ6IDAgfTtcbiAgICAgICAgJChjdXJyKS5jc3MoJ3pJbmRleCcsMSk7XG4gICAgfSk7ICAgIFxuICAgIG9wdHMub25BZGRTbGlkZSA9IGZ1bmN0aW9uKCRzKSB7ICRzLmhpZGUoKS5jc3MoJ3pJbmRleCcsMSk7IH07XG59O1xuLy8gZ3Jvd1kgLSBncm93IHZlcnRpY2FsbHkgZnJvbSBjZW50ZXJlZCAwIGhlaWdodFxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5ncm93WSA9IGZ1bmN0aW9uKCRjb250LCAkc2xpZGVzLCBvcHRzKSB7XG4gICAgb3B0cy5iZWZvcmUucHVzaChmdW5jdGlvbihjdXJyLCBuZXh0LCBvcHRzKSB7XG4gICAgICAgIG9wdHMuY3NzQmVmb3JlID0geyB0b3A6IHRoaXMuY3ljbGVILzIsIGhlaWdodDogMCwgekluZGV4OiAyIH07XG4gICAgICAgIG9wdHMuYW5pbUluID0geyB0b3A6IDAsIGhlaWdodDogdGhpcy5jeWNsZUggfTtcbiAgICAgICAgb3B0cy5hbmltT3V0ID0geyB0b3A6IDAgfTtcbiAgICAgICAgJChjdXJyKS5jc3MoJ3pJbmRleCcsMSk7XG4gICAgfSk7ICAgIFxuICAgIG9wdHMub25BZGRTbGlkZSA9IGZ1bmN0aW9uKCRzKSB7ICRzLmhpZGUoKS5jc3MoJ3pJbmRleCcsMSk7IH07XG59O1xuXG4vLyBjdXJ0YWluWCAtIHNxdWVlemUgaW4gYm90aCBlZGdlcyBob3Jpem9udGFsbHlcbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMuY3VydGFpblggPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xuICAgICAgICBvcHRzLmNzc0JlZm9yZSA9IHsgbGVmdDogbmV4dC5jeWNsZVcvMiwgd2lkdGg6IDAsIHpJbmRleDogMSwgZGlzcGxheTogJ2Jsb2NrJyB9O1xuICAgICAgICBvcHRzLmFuaW1JbiA9IHsgbGVmdDogMCwgd2lkdGg6IHRoaXMuY3ljbGVXIH07XG4gICAgICAgIG9wdHMuYW5pbU91dCA9IHsgbGVmdDogY3Vyci5jeWNsZVcvMiwgd2lkdGg6IDAgfTtcbiAgICAgICAgJChjdXJyKS5jc3MoJ3pJbmRleCcsMik7XG4gICAgfSk7ICAgIFxuICAgIG9wdHMub25BZGRTbGlkZSA9IGZ1bmN0aW9uKCRzKSB7ICRzLmhpZGUoKTsgfTtcbiAgICBvcHRzLmNzc0FmdGVyID0geyB6SW5kZXg6IDEsIGRpc3BsYXk6ICdub25lJyB9O1xufTtcbi8vIGN1cnRhaW5ZIC0gc3F1ZWV6ZSBpbiBib3RoIGVkZ2VzIHZlcnRpY2FsbHlcbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMuY3VydGFpblkgPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xuICAgICAgICBvcHRzLmNzc0JlZm9yZSA9IHsgdG9wOiBuZXh0LmN5Y2xlSC8yLCBoZWlnaHQ6IDAsIHpJbmRleDogMSwgZGlzcGxheTogJ2Jsb2NrJyB9O1xuICAgICAgICBvcHRzLmFuaW1JbiA9IHsgdG9wOiAwLCBoZWlnaHQ6IHRoaXMuY3ljbGVIIH07XG4gICAgICAgIG9wdHMuYW5pbU91dCA9IHsgdG9wOiBjdXJyLmN5Y2xlSC8yLCBoZWlnaHQ6IDAgfTtcbiAgICAgICAgJChjdXJyKS5jc3MoJ3pJbmRleCcsMik7XG4gICAgfSk7ICAgIFxuICAgIG9wdHMub25BZGRTbGlkZSA9IGZ1bmN0aW9uKCRzKSB7ICRzLmhpZGUoKTsgfTtcbiAgICBvcHRzLmNzc0FmdGVyID0geyB6SW5kZXg6IDEsIGRpc3BsYXk6ICdub25lJyB9O1xufTtcblxuLy8gY292ZXIgLSBjdXJyIHNsaWRlIGNvdmVyZWQgYnkgbmV4dCBzbGlkZVxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5jb3ZlciA9IGZ1bmN0aW9uKCRjb250LCAkc2xpZGVzLCBvcHRzKSB7XG4gICAgdmFyIGQgPSBvcHRzLmRpcmVjdGlvbiB8fCAnbGVmdCc7XG4gICAgdmFyIHcgPSAkY29udC5jc3MoJ292ZXJmbG93JywnaGlkZGVuJykud2lkdGgoKTtcbiAgICB2YXIgaCA9ICRjb250LmhlaWdodCgpO1xuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xuICAgICAgICBvcHRzLmNzc0JlZm9yZSA9IG9wdHMuY3NzQmVmb3JlIHx8IHt9O1xuICAgICAgICBvcHRzLmNzc0JlZm9yZS56SW5kZXggPSAyO1xuICAgICAgICBvcHRzLmNzc0JlZm9yZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgXG4gICAgICAgIGlmIChkID09ICdyaWdodCcpIFxuICAgICAgICAgICAgb3B0cy5jc3NCZWZvcmUubGVmdCA9IC13O1xuICAgICAgICBlbHNlIGlmIChkID09ICd1cCcpICAgIFxuICAgICAgICAgICAgb3B0cy5jc3NCZWZvcmUudG9wID0gaDtcbiAgICAgICAgZWxzZSBpZiAoZCA9PSAnZG93bicpICBcbiAgICAgICAgICAgIG9wdHMuY3NzQmVmb3JlLnRvcCA9IC1oO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvcHRzLmNzc0JlZm9yZS5sZWZ0ID0gdztcbiAgICAgICAgJChjdXJyKS5jc3MoJ3pJbmRleCcsMSk7XG4gICAgfSk7ICAgIFxuICAgIGlmICghb3B0cy5hbmltSW4pICBvcHRzLmFuaW1JbiA9IHsgbGVmdDogMCwgdG9wOiAwIH07XG4gICAgaWYgKCFvcHRzLmFuaW1PdXQpIG9wdHMuYW5pbU91dCA9IHsgbGVmdDogMCwgdG9wOiAwIH07XG4gICAgb3B0cy5jc3NBZnRlciA9IG9wdHMuY3NzQWZ0ZXIgfHwge307XG4gICAgb3B0cy5jc3NBZnRlci56SW5kZXggPSAyO1xuICAgIG9wdHMuY3NzQWZ0ZXIuZGlzcGxheSA9ICdub25lJztcbn07XG5cbi8vIHVuY292ZXIgLSBjdXJyIHNsaWRlIG1vdmVzIG9mZiBuZXh0IHNsaWRlXG4kLmZuLmN5Y2xlLnRyYW5zaXRpb25zLnVuY292ZXIgPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xuICAgIHZhciBkID0gb3B0cy5kaXJlY3Rpb24gfHwgJ2xlZnQnO1xuICAgIHZhciB3ID0gJGNvbnQuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpLndpZHRoKCk7XG4gICAgdmFyIGggPSAkY29udC5oZWlnaHQoKTtcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcbiAgICAgICAgb3B0cy5jc3NCZWZvcmUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIGlmIChkID09ICdyaWdodCcpIFxuICAgICAgICAgICAgb3B0cy5hbmltT3V0LmxlZnQgPSB3O1xuICAgICAgICBlbHNlIGlmIChkID09ICd1cCcpICAgIFxuICAgICAgICAgICAgb3B0cy5hbmltT3V0LnRvcCA9IC1oO1xuICAgICAgICBlbHNlIGlmIChkID09ICdkb3duJykgIFxuICAgICAgICAgICAgb3B0cy5hbmltT3V0LnRvcCA9IGg7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG9wdHMuYW5pbU91dC5sZWZ0ID0gLXc7XG4gICAgICAgICQoY3VycikuY3NzKCd6SW5kZXgnLDIpO1xuICAgICAgICAkKG5leHQpLmNzcygnekluZGV4JywxKTtcbiAgICB9KTsgICAgXG4gICAgb3B0cy5vbkFkZFNsaWRlID0gZnVuY3Rpb24oJHMpIHsgJHMuaGlkZSgpOyB9O1xuICAgIGlmICghb3B0cy5hbmltSW4pICBvcHRzLmFuaW1JbiA9IHsgbGVmdDogMCwgdG9wOiAwIH07XG4gICAgb3B0cy5jc3NCZWZvcmUgPSBvcHRzLmNzc0JlZm9yZSB8fCB7fTtcbiAgICBvcHRzLmNzc0JlZm9yZS50b3AgPSAwO1xuICAgIG9wdHMuY3NzQmVmb3JlLmxlZnQgPSAwO1xuICAgIFxuICAgIG9wdHMuY3NzQWZ0ZXIgPSBvcHRzLmNzc0FmdGVyIHx8IHt9O1xuICAgIG9wdHMuY3NzQWZ0ZXIuekluZGV4ID0gMTtcbiAgICBvcHRzLmNzc0FmdGVyLmRpc3BsYXkgPSAnbm9uZSc7XG59O1xuXG4vLyB0b3NzIC0gbW92ZSB0b3Agc2xpZGUgYW5kIGZhZGUgYXdheVxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy50b3NzID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcbiAgICB2YXIgdyA9ICRjb250LmNzcygnb3ZlcmZsb3cnLCd2aXNpYmxlJykud2lkdGgoKTtcbiAgICB2YXIgaCA9ICRjb250LmhlaWdodCgpO1xuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xuICAgICAgICAkKGN1cnIpLmNzcygnekluZGV4JywyKTtcbiAgICAgICAgb3B0cy5jc3NCZWZvcmUuZGlzcGxheSA9ICdibG9jayc7IFxuICAgICAgICAvLyBwcm92aWRlIGRlZmF1bHQgdG9zcyBzZXR0aW5ncyBpZiBhbmltT3V0IG5vdCBwcm92aWRlZFxuICAgICAgICBpZiAoIW9wdHMuYW5pbU91dC5sZWZ0ICYmICFvcHRzLmFuaW1PdXQudG9wKVxuICAgICAgICAgICAgb3B0cy5hbmltT3V0ID0geyBsZWZ0OiB3KjIsIHRvcDogLWgvMiwgb3BhY2l0eTogMCB9O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvcHRzLmFuaW1PdXQub3BhY2l0eSA9IDA7XG4gICAgfSk7ICAgIFxuICAgIG9wdHMub25BZGRTbGlkZSA9IGZ1bmN0aW9uKCRzKSB7ICRzLmhpZGUoKTsgfTtcbiAgICBvcHRzLmNzc0JlZm9yZSA9IHsgbGVmdDogMCwgdG9wOiAwLCB6SW5kZXg6IDEsIG9wYWNpdHk6IDEgfTtcbiAgICBvcHRzLmFuaW1JbiA9IHsgbGVmdDogMCB9O1xuICAgIG9wdHMuY3NzQWZ0ZXIgPSB7IHpJbmRleDogMiwgZGlzcGxheTogJ25vbmUnIH07XG59O1xuXG4vLyB3aXBlIC0gY2xpcCBhbmltYXRpb25cbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMud2lwZSA9IGZ1bmN0aW9uKCRjb250LCAkc2xpZGVzLCBvcHRzKSB7XG4gICAgdmFyIHcgPSAkY29udC5jc3MoJ292ZXJmbG93JywnaGlkZGVuJykud2lkdGgoKTtcbiAgICB2YXIgaCA9ICRjb250LmhlaWdodCgpO1xuICAgIG9wdHMuY3NzQmVmb3JlID0gb3B0cy5jc3NCZWZvcmUgfHwge307XG4gICAgdmFyIGNsaXA7XG4gICAgaWYgKG9wdHMuY2xpcCkge1xuICAgICAgICBpZiAoL2wyci8udGVzdChvcHRzLmNsaXApKVxuICAgICAgICAgICAgY2xpcCA9ICdyZWN0KDBweCAwcHggJytoKydweCAwcHgpJztcbiAgICAgICAgZWxzZSBpZiAoL3IybC8udGVzdChvcHRzLmNsaXApKVxuICAgICAgICAgICAgY2xpcCA9ICdyZWN0KDBweCAnK3crJ3B4ICcraCsncHggJyt3KydweCknO1xuICAgICAgICBlbHNlIGlmICgvdDJiLy50ZXN0KG9wdHMuY2xpcCkpXG4gICAgICAgICAgICBjbGlwID0gJ3JlY3QoMHB4ICcrdysncHggMHB4IDBweCknO1xuICAgICAgICBlbHNlIGlmICgvYjJ0Ly50ZXN0KG9wdHMuY2xpcCkpXG4gICAgICAgICAgICBjbGlwID0gJ3JlY3QoJytoKydweCAnK3crJ3B4ICcraCsncHggMHB4KSc7XG4gICAgICAgIGVsc2UgaWYgKC96b29tLy50ZXN0KG9wdHMuY2xpcCkpIHtcbiAgICAgICAgICAgIHZhciB0ID0gcGFyc2VJbnQoaC8yKTtcbiAgICAgICAgICAgIHZhciBsID0gcGFyc2VJbnQody8yKTtcbiAgICAgICAgICAgIGNsaXAgPSAncmVjdCgnK3QrJ3B4ICcrbCsncHggJyt0KydweCAnK2wrJ3B4KSc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgb3B0cy5jc3NCZWZvcmUuY2xpcCA9IG9wdHMuY3NzQmVmb3JlLmNsaXAgfHwgY2xpcCB8fCAncmVjdCgwcHggMHB4IDBweCAwcHgpJztcbiAgICBcbiAgICB2YXIgZCA9IG9wdHMuY3NzQmVmb3JlLmNsaXAubWF0Y2goLyhcXGQrKS9nKTtcbiAgICB2YXIgdCA9IHBhcnNlSW50KGRbMF0pLCByID0gcGFyc2VJbnQoZFsxXSksIGIgPSBwYXJzZUludChkWzJdKSwgbCA9IHBhcnNlSW50KGRbM10pO1xuICAgIFxuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xuICAgICAgICBpZiAoY3VyciA9PSBuZXh0KSByZXR1cm47XG4gICAgICAgIHZhciAkY3VyciA9ICQoY3VycikuY3NzKCd6SW5kZXgnLDIpO1xuICAgICAgICB2YXIgJG5leHQgPSAkKG5leHQpLmNzcyh7XG4gICAgICAgICAgICB6SW5kZXg6ICAzLFxuICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHZhciBzdGVwID0gMSwgY291bnQgPSBwYXJzZUludCgob3B0cy5zcGVlZEluIC8gMTMpKSAtIDE7XG4gICAgICAgIGZ1bmN0aW9uIGYoKSB7XG4gICAgICAgICAgICB2YXIgdHQgPSB0ID8gdCAtIHBhcnNlSW50KHN0ZXAgKiAodC9jb3VudCkpIDogMDtcbiAgICAgICAgICAgIHZhciBsbCA9IGwgPyBsIC0gcGFyc2VJbnQoc3RlcCAqIChsL2NvdW50KSkgOiAwO1xuICAgICAgICAgICAgdmFyIGJiID0gYiA8IGggPyBiICsgcGFyc2VJbnQoc3RlcCAqICgoaC1iKS9jb3VudCB8fCAxKSkgOiBoO1xuICAgICAgICAgICAgdmFyIHJyID0gciA8IHcgPyByICsgcGFyc2VJbnQoc3RlcCAqICgody1yKS9jb3VudCB8fCAxKSkgOiB3O1xuICAgICAgICAgICAgJG5leHQuY3NzKHsgY2xpcDogJ3JlY3QoJyt0dCsncHggJytycisncHggJytiYisncHggJytsbCsncHgpJyB9KTtcbiAgICAgICAgICAgIChzdGVwKysgPD0gY291bnQpID8gc2V0VGltZW91dChmLCAxMykgOiAkY3Vyci5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICB9XG4gICAgICAgIGYoKTtcbiAgICB9KTsgICAgXG4gICAgb3B0cy5jc3NBZnRlciAgPSB7IH07XG4gICAgb3B0cy5hbmltSW4gICAgPSB7IGxlZnQ6IDAgfTtcbiAgICBvcHRzLmFuaW1PdXQgICA9IHsgbGVmdDogMCB9O1xufTtcblxufSkoalF1ZXJ5KTtcbi8qXG4galF1ZXJ5IGRlbGF5ZWQgb2JzZXJ2ZXIgLSAwLjhcbiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvanF1ZXJ5LXV0aWxzL1xuXG4gKGMpIE1heGltZSBIYWluZWF1bHQgPGhhaW5lYXVsdEBnbWFpbC5jb20+XG4gaHR0cDovL2hhaW5lYXVsdC5jb21cbiBcbiBNSVQgTGljZW5zZSAoaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHApXG4gXG4qL1xuXG4oZnVuY3Rpb24oJCl7XG4gICAgJC5leHRlbmQoJC5mbiwge1xuICAgICAgICBkZWxheWVkT2JzZXJ2ZXI6IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgb3B0aW9ucyl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgdmFyIGVsID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICB2YXIgb3AgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICAgICAgICAgIGVsLmRhdGEoJ29sZHZhbCcsIGVsLnZhbCgpKVxuICAgICAgICAgICAgICAgICAgICAuZGF0YSgnZGVsYXknLCBkZWxheSB8fCAwLjUpXG4gICAgICAgICAgICAgICAgICAgIC5kYXRhKCdjb25kaXRpb24nLCBvcC5jb25kaXRpb24gfHwgZnVuY3Rpb24oKSB7IHJldHVybiAoJCh0aGlzKS5kYXRhKCdvbGR2YWwnKSA9PSAkKHRoaXMpLnZhbCgpKTsgfSlcbiAgICAgICAgICAgICAgICAgICAgLmRhdGEoJ2NhbGxiYWNrJywgY2FsbGJhY2spXG4gICAgICAgICAgICAgICAgICAgIFsob3AuZXZlbnR8fCdrZXl1cCcpXShmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsLmRhdGEoJ2NvbmRpdGlvbicpLmFwcGx5KGVsKSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbC5kYXRhKCd0aW1lcicpKSB7IGNsZWFyVGltZW91dChlbC5kYXRhKCd0aW1lcicpKTsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLmRhdGEoJ3RpbWVyJywgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5kYXRhKCdjYWxsYmFjaycpLmFwcGx5KGVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBlbC5kYXRhKCdkZWxheScpICogMTAwMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLmRhdGEoJ29sZHZhbCcsIGVsLnZhbCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoalF1ZXJ5KTtcbi8qKlxuICogRmxhc2ggKGh0dHA6Ly9qcXVlcnkubHVrZWx1dG1hbi5jb20vcGx1Z2lucy9mbGFzaClcbiAqIEEgalF1ZXJ5IHBsdWdpbiBmb3IgZW1iZWRkaW5nIEZsYXNoIG1vdmllcy5cbiAqIFxuICogVmVyc2lvbiAxLjBcbiAqIE5vdmVtYmVyIDl0aCwgMjAwNlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAwNiBMdWtlIEx1dG1hbiAoaHR0cDovL3d3dy5sdWtlbHV0bWFuLmNvbSlcbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLlxuICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UucGhwXG4gKiBcbiAqIEluc3BpcmVkIGJ5OlxuICogU1dGT2JqZWN0IChodHRwOi8vYmxvZy5kZWNvbmNlcHQuY29tL3N3Zm9iamVjdC8pXG4gKiBVRk8gKGh0dHA6Ly93d3cuYm9iYnl2YW5kZXJzbHVpcy5jb20vdWZvLylcbiAqIHNJRlIgKGh0dHA6Ly93d3cubWlrZWluZHVzdHJpZXMuY29tL3NpZnIvKVxuICogXG4gKiBJTVBPUlRBTlQ6IFxuICogVGhlIHBhY2tlZCB2ZXJzaW9uIG9mIGpRdWVyeSBicmVha3MgQWN0aXZlWCBjb250cm9sXG4gKiBhY3RpdmF0aW9uIGluIEludGVybmV0IEV4cGxvcmVyLiBVc2UgSlNNaW4gdG8gbWluaWZpeVxuICogalF1ZXJ5IChzZWU6IGh0dHA6Ly9qcXVlcnkubHVrZWx1dG1hbi5jb20vcGx1Z2lucy9mbGFzaCNhY3RpdmV4KS5cbiAqXG4gKiovIFxuOyhmdW5jdGlvbigpe1xuXHRcbnZhciAkJDtcblxuLyoqXG4gKiBcbiAqIEBkZXNjIFJlcGxhY2UgbWF0Y2hpbmcgZWxlbWVudHMgd2l0aCBhIGZsYXNoIG1vdmllLlxuICogQGF1dGhvciBMdWtlIEx1dG1hblxuICogQHZlcnNpb24gMS4wLjFcbiAqXG4gKiBAbmFtZSBmbGFzaFxuICogQHBhcmFtIEhhc2ggaHRtbE9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIGVtYmVkL29iamVjdCB0YWcuXG4gKiBAcGFyYW0gSGFzaCBwbHVnaW5PcHRpb25zIE9wdGlvbnMgZm9yIGRldGVjdGluZy91cGRhdGluZyB0aGUgRmxhc2ggcGx1Z2luIChvcHRpb25hbCkuXG4gKiBAcGFyYW0gRnVuY3Rpb24gcmVwbGFjZSBDdXN0b20gYmxvY2sgY2FsbGVkIGZvciBlYWNoIG1hdGNoZWQgZWxlbWVudCBpZiBmbGFzaCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKS5cbiAqIEBwYXJhbSBGdW5jdGlvbiB1cGRhdGUgQ3VzdG9tIGJsb2NrIGNhbGxlZCBmb3IgZWFjaCBtYXRjaGVkIGlmIGZsYXNoIGlzbid0IGluc3RhbGxlZCAob3B0aW9uYWwpLlxuICogQHR5cGUgalF1ZXJ5XG4gKlxuICogQGNhdCBwbHVnaW5zL2ZsYXNoXG4gKiBcbiAqIEBleGFtcGxlICQoJyNoZWxsbycpLmZsYXNoKHsgc3JjOiAnaGVsbG8uc3dmJyB9KTtcbiAqIEBkZXNjIEVtYmVkIGEgRmxhc2ggbW92aWUuXG4gKlxuICogQGV4YW1wbGUgJCgnI2hlbGxvJykuZmxhc2goeyBzcmM6ICdoZWxsby5zd2YnIH0sIHsgdmVyc2lvbjogOCB9KTtcbiAqIEBkZXNjIEVtYmVkIGEgRmxhc2ggOCBtb3ZpZS5cbiAqXG4gKiBAZXhhbXBsZSAkKCcjaGVsbG8nKS5mbGFzaCh7IHNyYzogJ2hlbGxvLnN3ZicgfSwgeyBleHByZXNzSW5zdGFsbDogdHJ1ZSB9KTtcbiAqIEBkZXNjIEVtYmVkIGEgRmxhc2ggbW92aWUgdXNpbmcgRXhwcmVzcyBJbnN0YWxsIGlmIGZsYXNoIGlzbid0IGluc3RhbGxlZC5cbiAqXG4gKiBAZXhhbXBsZSAkKCcjaGVsbG8nKS5mbGFzaCh7IHNyYzogJ2hlbGxvLnN3ZicgfSwgeyB1cGRhdGU6IGZhbHNlIH0pO1xuICogQGRlc2MgRW1iZWQgYSBGbGFzaCBtb3ZpZSwgZG9uJ3Qgc2hvdyBhbiB1cGRhdGUgbWVzc2FnZSBpZiBGbGFzaCBpc24ndCBpbnN0YWxsZWQuXG4gKlxuKiovXG4kJCA9IGpRdWVyeS5mbi5mbGFzaCA9IGZ1bmN0aW9uKGh0bWxPcHRpb25zLCBwbHVnaW5PcHRpb25zLCByZXBsYWNlLCB1cGRhdGUpIHtcblx0XG5cdC8vIFNldCB0aGUgZGVmYXVsdCBibG9jay5cblx0dmFyIGJsb2NrID0gcmVwbGFjZSB8fCAkJC5yZXBsYWNlO1xuXHRcblx0Ly8gTWVyZ2UgdGhlIGRlZmF1bHQgYW5kIHBhc3NlZCBwbHVnaW4gb3B0aW9ucy5cblx0cGx1Z2luT3B0aW9ucyA9ICQkLmNvcHkoJCQucGx1Z2luT3B0aW9ucywgcGx1Z2luT3B0aW9ucyk7XG5cdFxuXHQvLyBEZXRlY3QgRmxhc2guXG5cdGlmKCEkJC5oYXNGbGFzaChwbHVnaW5PcHRpb25zLnZlcnNpb24pKSB7XG5cdFx0Ly8gVXNlIEV4cHJlc3MgSW5zdGFsbCAoaWYgc3BlY2lmaWVkIGFuZCBGbGFzaCBwbHVnaW4gNiwwLDY1IG9yIGhpZ2hlciBpcyBpbnN0YWxsZWQpLlxuXHRcdGlmKHBsdWdpbk9wdGlvbnMuZXhwcmVzc0luc3RhbGwgJiYgJCQuaGFzRmxhc2goNiwwLDY1KSkge1xuXHRcdFx0Ly8gQWRkIHRoZSBuZWNlc3NhcnkgZmxhc2h2YXJzIChtZXJnZWQgbGF0ZXIpLlxuXHRcdFx0dmFyIGV4cHJlc3NJbnN0YWxsT3B0aW9ucyA9IHtcblx0XHRcdFx0Zmxhc2h2YXJzOiB7ICBcdFxuXHRcdFx0XHRcdE1NcmVkaXJlY3RVUkw6IGxvY2F0aW9uLFxuXHRcdFx0XHRcdE1NcGxheWVyVHlwZTogJ1BsdWdJbicsXG5cdFx0XHRcdFx0TU1kb2N0aXRsZTogalF1ZXJ5KCd0aXRsZScpLnRleHQoKSBcblx0XHRcdFx0fVx0XHRcdFx0XHRcblx0XHRcdH07XG5cdFx0Ly8gQXNrIHRoZSB1c2VyIHRvIHVwZGF0ZSAoaWYgc3BlY2lmaWVkKS5cblx0XHR9IGVsc2UgaWYgKHBsdWdpbk9wdGlvbnMudXBkYXRlKSB7XG5cdFx0XHQvLyBDaGFuZ2UgdGhlIGJsb2NrIHRvIGluc2VydCB0aGUgdXBkYXRlIG1lc3NhZ2UgaW5zdGVhZCBvZiB0aGUgZmxhc2ggbW92aWUuXG5cdFx0XHRibG9jayA9IHVwZGF0ZSB8fCAkJC51cGRhdGU7XG5cdFx0Ly8gRmFpbFxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUaGUgcmVxdWlyZWQgdmVyc2lvbiBvZiBmbGFzaCBpc24ndCBpbnN0YWxsZWQuXG5cdFx0XHQvLyBFeHByZXNzIEluc3RhbGwgaXMgdHVybmVkIG9mZiwgb3IgZmxhc2ggNiwwLDY1IGlzbid0IGluc3RhbGxlZC5cblx0XHRcdC8vIFVwZGF0ZSBpcyB0dXJuZWQgb2ZmLlxuXHRcdFx0Ly8gUmV0dXJuIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH1cblx0XG5cdC8vIE1lcmdlIHRoZSBkZWZhdWx0LCBleHByZXNzIGluc3RhbGwgYW5kIHBhc3NlZCBodG1sIG9wdGlvbnMuXG5cdGh0bWxPcHRpb25zID0gJCQuY29weSgkJC5odG1sT3B0aW9ucywgZXhwcmVzc0luc3RhbGxPcHRpb25zLCBodG1sT3B0aW9ucyk7XG5cdFxuXHQvLyBJbnZva2UgJGJsb2NrICh3aXRoIGEgY29weSBvZiB0aGUgbWVyZ2VkIGh0bWwgb3B0aW9ucykgZm9yIGVhY2ggZWxlbWVudC5cblx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1xuXHRcdGJsb2NrLmNhbGwodGhpcywgJCQuY29weShodG1sT3B0aW9ucykpO1xuXHR9KTtcblx0XG59O1xuLyoqXG4gKlxuICogQG5hbWUgZmxhc2guY29weVxuICogQGRlc2MgQ29weSBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIG9iamVjdHMgaW50byBhIG5ldyBvYmplY3QuXG4gKiBAdHlwZSBPYmplY3RcbiAqIFxuICogQGV4YW1wbGUgJCQuY29weSh7IGZvbzogMSB9LCB7IGJhcjogMiB9KTtcbiAqIEByZXN1bHQgeyBmb286IDEsIGJhcjogMiB9O1xuICpcbioqL1xuJCQuY29weSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgb3B0aW9ucyA9IHt9LCBmbGFzaHZhcnMgPSB7fTtcblx0Zm9yKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0aWYoYXJnID09IHVuZGVmaW5lZCkgY29udGludWU7XG5cdFx0alF1ZXJ5LmV4dGVuZChvcHRpb25zLCBhcmcpO1xuXHRcdC8vIGRvbid0IGNsb2JiZXIgb25lIGZsYXNoIHZhcnMgb2JqZWN0IHdpdGggYW5vdGhlclxuXHRcdC8vIG1lcmdlIHRoZW0gaW5zdGVhZFxuXHRcdGlmKGFyZy5mbGFzaHZhcnMgPT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblx0XHRqUXVlcnkuZXh0ZW5kKGZsYXNodmFycywgYXJnLmZsYXNodmFycyk7XG5cdH1cblx0b3B0aW9ucy5mbGFzaHZhcnMgPSBmbGFzaHZhcnM7XG5cdHJldHVybiBvcHRpb25zO1xufTtcbi8qXG4gKiBAbmFtZSBmbGFzaC5oYXNGbGFzaFxuICogQGRlc2MgQ2hlY2sgaWYgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBGbGFzaCBwbHVnaW4gaXMgaW5zdGFsbGVkXG4gKiBAdHlwZSBCb29sZWFuXG4gKlxuKiovXG4kJC5oYXNGbGFzaCA9IGZ1bmN0aW9uKCkge1xuXHQvLyBsb29rIGZvciBhIGZsYWcgaW4gdGhlIHF1ZXJ5IHN0cmluZyB0byBieXBhc3MgZmxhc2ggZGV0ZWN0aW9uXG5cdGlmKC9oYXNGbGFzaFxcPXRydWUvLnRlc3QobG9jYXRpb24pKSByZXR1cm4gdHJ1ZTtcblx0aWYoL2hhc0ZsYXNoXFw9ZmFsc2UvLnRlc3QobG9jYXRpb24pKSByZXR1cm4gZmFsc2U7XG5cdHZhciBwdiA9ICQkLmhhc0ZsYXNoLnBsYXllclZlcnNpb24oKS5tYXRjaCgvXFxkKy9nKTtcblx0dmFyIHJ2ID0gU3RyaW5nKFthcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdXSkubWF0Y2goL1xcZCsvZykgfHwgU3RyaW5nKCQkLnBsdWdpbk9wdGlvbnMudmVyc2lvbikubWF0Y2goL1xcZCsvZyk7XG5cdGZvcih2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcblx0XHRwdltpXSA9IHBhcnNlSW50KHB2W2ldIHx8IDApO1xuXHRcdHJ2W2ldID0gcGFyc2VJbnQocnZbaV0gfHwgMCk7XG5cdFx0Ly8gcGxheWVyIGlzIGxlc3MgdGhhbiByZXF1aXJlZFxuXHRcdGlmKHB2W2ldIDwgcnZbaV0pIHJldHVybiBmYWxzZTtcblx0XHQvLyBwbGF5ZXIgaXMgZ3JlYXRlciB0aGFuIHJlcXVpcmVkXG5cdFx0aWYocHZbaV0gPiBydltpXSkgcmV0dXJuIHRydWU7XG5cdH1cblx0Ly8gbWFqb3IgdmVyc2lvbiwgbWlub3IgdmVyc2lvbiBhbmQgcmV2aXNpb24gbWF0Y2ggZXhhY3RseVxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4vKipcbiAqXG4gKiBAbmFtZSBmbGFzaC5oYXNGbGFzaC5wbGF5ZXJWZXJzaW9uXG4gKiBAZGVzYyBHZXQgdGhlIHZlcnNpb24gb2YgdGhlIGluc3RhbGxlZCBGbGFzaCBwbHVnaW4uXG4gKiBAdHlwZSBTdHJpbmdcbiAqXG4qKi9cbiQkLmhhc0ZsYXNoLnBsYXllclZlcnNpb24gPSBmdW5jdGlvbigpIHtcblx0Ly8gaWVcblx0dHJ5IHtcblx0XHR0cnkge1xuXHRcdFx0Ly8gYXZvaWQgZnA2IG1pbm9yIHZlcnNpb24gbG9va3VwIGlzc3Vlc1xuXHRcdFx0Ly8gc2VlOiBodHRwOi8vYmxvZy5kZWNvbmNlcHQuY29tLzIwMDYvMDEvMTEvZ2V0dmFyaWFibGUtc2V0dmFyaWFibGUtY3Jhc2gtaW50ZXJuZXQtZXhwbG9yZXItZmxhc2gtNi9cblx0XHRcdHZhciBheG8gPSBuZXcgQWN0aXZlWE9iamVjdCgnU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2guNicpO1xuXHRcdFx0dHJ5IHsgYXhvLkFsbG93U2NyaXB0QWNjZXNzID0gJ2Fsd2F5cyc7XHR9IFxuXHRcdFx0Y2F0Y2goZSkgeyByZXR1cm4gJzYsMCwwJzsgfVx0XHRcdFx0XG5cdFx0fSBjYXRjaChlKSB7fVxuXHRcdHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2gnKS5HZXRWYXJpYWJsZSgnJHZlcnNpb24nKS5yZXBsYWNlKC9cXEQrL2csICcsJykubWF0Y2goL14sPyguKyksPyQvKVsxXTtcblx0Ly8gb3RoZXIgYnJvd3NlcnNcblx0fSBjYXRjaChlKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmKG5hdmlnYXRvci5taW1lVHlwZXNbXCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaFwiXS5lbmFibGVkUGx1Z2luKXtcblx0XHRcdFx0cmV0dXJuIChuYXZpZ2F0b3IucGx1Z2luc1tcIlNob2Nrd2F2ZSBGbGFzaCAyLjBcIl0gfHwgbmF2aWdhdG9yLnBsdWdpbnNbXCJTaG9ja3dhdmUgRmxhc2hcIl0pLmRlc2NyaXB0aW9uLnJlcGxhY2UoL1xcRCsvZywgXCIsXCIpLm1hdGNoKC9eLD8oLispLD8kLylbMV07XG5cdFx0XHR9XG5cdFx0fSBjYXRjaChlKSB7fVx0XHRcblx0fVxuXHRyZXR1cm4gJzAsMCwwJztcbn07XG4vKipcbiAqXG4gKiBAbmFtZSBmbGFzaC5odG1sT3B0aW9uc1xuICogQGRlc2MgVGhlIGRlZmF1bHQgc2V0IG9mIG9wdGlvbnMgZm9yIHRoZSBvYmplY3Qgb3IgZW1iZWQgdGFnLlxuICpcbioqL1xuJCQuaHRtbE9wdGlvbnMgPSB7XG5cdGhlaWdodDogMjQwLFxuXHRmbGFzaHZhcnM6IHt9LFxuXHRwbHVnaW5zcGFnZTogJ2h0dHA6Ly93d3cuYWRvYmUuY29tL2dvL2dldGZsYXNocGxheWVyJyxcblx0c3JjOiAnIycsXG5cdHR5cGU6ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcsXG5cdHdpZHRoOiAzMjBcdFx0XG59O1xuLyoqXG4gKlxuICogQG5hbWUgZmxhc2gucGx1Z2luT3B0aW9uc1xuICogQGRlc2MgVGhlIGRlZmF1bHQgc2V0IG9mIG9wdGlvbnMgZm9yIGNoZWNraW5nL3VwZGF0aW5nIHRoZSBmbGFzaCBQbHVnaW4uXG4gKlxuKiovXG4kJC5wbHVnaW5PcHRpb25zID0ge1xuXHRleHByZXNzSW5zdGFsbDogZmFsc2UsXG5cdHVwZGF0ZTogdHJ1ZSxcblx0dmVyc2lvbjogJzYuMC42NSdcbn07XG4vKipcbiAqXG4gKiBAbmFtZSBmbGFzaC5yZXBsYWNlXG4gKiBAZGVzYyBUaGUgZGVmYXVsdCBtZXRob2QgZm9yIHJlcGxhY2luZyBhbiBlbGVtZW50IHdpdGggYSBGbGFzaCBtb3ZpZS5cbiAqXG4qKi9cbiQkLnJlcGxhY2UgPSBmdW5jdGlvbihodG1sT3B0aW9ucykge1xuXHR0aGlzLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiYWx0XCI+Jyt0aGlzLmlubmVySFRNTCsnPC9kaXY+Jztcblx0alF1ZXJ5KHRoaXMpXG5cdFx0LmFkZENsYXNzKCdmbGFzaC1yZXBsYWNlZCcpXG5cdFx0LnByZXBlbmQoJCQudHJhbnNmb3JtKGh0bWxPcHRpb25zKSk7XG59O1xuLyoqXG4gKlxuICogQG5hbWUgZmxhc2gudXBkYXRlXG4gKiBAZGVzYyBUaGUgZGVmYXVsdCBtZXRob2QgZm9yIHJlcGxhY2luZyBhbiBlbGVtZW50IHdpdGggYW4gdXBkYXRlIG1lc3NhZ2UuXG4gKlxuKiovXG4kJC51cGRhdGUgPSBmdW5jdGlvbihodG1sT3B0aW9ucykge1xuXHR2YXIgdXJsID0gU3RyaW5nKGxvY2F0aW9uKS5zcGxpdCgnPycpO1xuXHR1cmwuc3BsaWNlKDEsMCwnP2hhc0ZsYXNoPXRydWUmJyk7XG5cdHVybCA9IHVybC5qb2luKCcnKTtcblx0dmFyIG1zZyA9ICc8cD5UaGlzIGNvbnRlbnQgcmVxdWlyZXMgdGhlIEZsYXNoIFBsYXllci4gPGEgaHJlZj1cImh0dHA6Ly93d3cuYWRvYmUuY29tL2dvL2dldGZsYXNocGxheWVyXCI+RG93bmxvYWQgRmxhc2ggUGxheWVyPC9hPi4gQWxyZWFkeSBoYXZlIEZsYXNoIFBsYXllcj8gPGEgaHJlZj1cIicrdXJsKydcIj5DbGljayBoZXJlLjwvYT48L3A+Jztcblx0dGhpcy5pbm5lckhUTUwgPSAnPHNwYW4gY2xhc3M9XCJhbHRcIj4nK3RoaXMuaW5uZXJIVE1MKyc8L3NwYW4+Jztcblx0alF1ZXJ5KHRoaXMpXG5cdFx0LmFkZENsYXNzKCdmbGFzaC11cGRhdGUnKVxuXHRcdC5wcmVwZW5kKG1zZyk7XG59O1xuLyoqXG4gKlxuICogQGRlc2MgQ29udmVydCBhIGhhc2ggb2YgaHRtbCBvcHRpb25zIHRvIGEgc3RyaW5nIG9mIGF0dHJpYnV0ZXMsIHVzaW5nIEZ1bmN0aW9uLmFwcGx5KCkuIFxuICogQGV4YW1wbGUgdG9BdHRyaWJ1dGVTdHJpbmcuYXBwbHkoaHRtbE9wdGlvbnMpXG4gKiBAcmVzdWx0IGZvbz1cImJhclwiIGZvbz1cImJhclwiXG4gKlxuKiovXG5mdW5jdGlvbiB0b0F0dHJpYnV0ZVN0cmluZygpIHtcblx0dmFyIHMgPSAnJztcblx0Zm9yKHZhciBrZXkgaW4gdGhpcylcblx0XHRpZih0eXBlb2YgdGhpc1trZXldICE9ICdmdW5jdGlvbicpXG5cdFx0XHRzICs9IGtleSsnPVwiJyt0aGlzW2tleV0rJ1wiICc7XG5cdHJldHVybiBzO1x0XHRcbn07XG4vKipcbiAqXG4gKiBAZGVzYyBDb252ZXJ0IGEgaGFzaCBvZiBmbGFzaHZhcnMgdG8gYSB1cmwtZW5jb2RlZCBzdHJpbmcsIHVzaW5nIEZ1bmN0aW9uLmFwcGx5KCkuIFxuICogQGV4YW1wbGUgdG9GbGFzaHZhcnNTdHJpbmcuYXBwbHkoZmxhc2h2YXJzT2JqZWN0KVxuICogQHJlc3VsdCBmb289YmFyJmZvbz1iYXJcbiAqXG4qKi9cbmZ1bmN0aW9uIHRvRmxhc2h2YXJzU3RyaW5nKCkge1xuXHR2YXIgcyA9ICcnO1xuXHRmb3IodmFyIGtleSBpbiB0aGlzKVxuXHRcdGlmKHR5cGVvZiB0aGlzW2tleV0gIT0gJ2Z1bmN0aW9uJylcblx0XHRcdHMgKz0ga2V5Kyc9JytlbmNvZGVVUklDb21wb25lbnQodGhpc1trZXldKSsnJic7XG5cdHJldHVybiBzLnJlcGxhY2UoLyYkLywgJycpO1x0XHRcbn07XG4vKipcbiAqXG4gKiBAbmFtZSBmbGFzaC50cmFuc2Zvcm1cbiAqIEBkZXNjIFRyYW5zZm9ybSBhIHNldCBvZiBodG1sIG9wdGlvbnMgaW50byBhbiBlbWJlZCB0YWcuXG4gKiBAdHlwZSBTdHJpbmcgXG4gKlxuICogQGV4YW1wbGUgJCQudHJhbnNmb3JtKGh0bWxPcHRpb25zKVxuICogQHJlc3VsdCA8ZW1iZWQgc3JjPVwiZm9vLnN3ZlwiIC4uLiAvPlxuICpcbiAqIE5vdGU6IFRoZSBlbWJlZCB0YWcgaXMgTk9UIHN0YW5kYXJkcy1jb21wbGlhbnQsIGJ1dCBpdCBcbiAqIHdvcmtzIGluIGFsbCBjdXJyZW50IGJyb3dzZXJzLiBmbGFzaC50cmFuc2Zvcm0gY2FuIGJlXG4gKiBvdmVyd3JpdHRlbiB3aXRoIGEgY3VzdG9tIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIG1vcmUgXG4gKiBzdGFuZGFyZHMtY29tcGxpYW50IG1hcmt1cC5cbiAqXG4qKi9cbiQkLnRyYW5zZm9ybSA9IGZ1bmN0aW9uKGh0bWxPcHRpb25zKSB7XG5cdGh0bWxPcHRpb25zLnRvU3RyaW5nID0gdG9BdHRyaWJ1dGVTdHJpbmc7XG5cdGlmKGh0bWxPcHRpb25zLmZsYXNodmFycykgaHRtbE9wdGlvbnMuZmxhc2h2YXJzLnRvU3RyaW5nID0gdG9GbGFzaHZhcnNTdHJpbmc7XG5cdHJldHVybiAnPGVtYmVkICcgKyBTdHJpbmcoaHRtbE9wdGlvbnMpICsgJy8+JztcdFx0XG59O1xuXG4vKipcbiAqXG4gKiBGbGFzaCBQbGF5ZXIgOSBGaXggKGh0dHA6Ly9ibG9nLmRlY29uY2VwdC5jb20vMjAwNi8wNy8yOC9zd2ZvYmplY3QtMTQzLXJlbGVhc2VkLylcbiAqXG4qKi9cbmlmICh3aW5kb3cuYXR0YWNoRXZlbnQpIHtcblx0d2luZG93LmF0dGFjaEV2ZW50KFwib25iZWZvcmV1bmxvYWRcIiwgZnVuY3Rpb24oKXtcblx0XHRfX2ZsYXNoX3VubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHt9O1xuXHRcdF9fZmxhc2hfc2F2ZWRVbmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7fTtcblx0fSk7XG59XG5cdFxufSkoKTtcbihmdW5jdGlvbigkKXtcbiAgICAkLl9pMThuID0geyB0cmFuczoge30sICdkZWZhdWx0JzogICdlbicsIGxhbmd1YWdlOiAnZW4nIH07XG4gICAgJC5pMThuID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBnZXRUcmFucyA9IGZ1bmN0aW9uKG5zLCBzdHIpIHtcbiAgICAgICAgICAgIHZhciB0cmFucyA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgc3RyaW5nIGV4aXN0cyBpbiB0cmFuc2xhdGlvblxuICAgICAgICAgICAgaWYgKCQuX2kxOG4udHJhbnNbJC5faTE4bi5sYW5ndWFnZV0gXG4gICAgICAgICAgICAgICAgJiYgJC5faTE4bi50cmFuc1skLl9pMThuLmxhbmd1YWdlXVtuc11cbiAgICAgICAgICAgICAgICAmJiAkLl9pMThuLnRyYW5zWyQuX2kxOG4ubGFuZ3VhZ2VdW25zXVtzdHJdKSB7XG4gICAgICAgICAgICAgICAgdHJhbnMgPSAkLl9pMThuLnRyYW5zWyQuX2kxOG4ubGFuZ3VhZ2VdW25zXVtzdHJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gb3IgZXhpc3RzIGluIGRlZmF1bHRcbiAgICAgICAgICAgIGVsc2UgaWYgKCQuX2kxOG4udHJhbnNbJC5faTE4blsnZGVmYXVsdCddXSBcbiAgICAgICAgICAgICAgICAgICAgICYmICQuX2kxOG4udHJhbnNbJC5faTE4blsnZGVmYXVsdCddXVtuc11cbiAgICAgICAgICAgICAgICAgICAgICYmICQuX2kxOG4udHJhbnNbJC5faTE4blsnZGVmYXVsdCddXVtuc11bc3RyXSkge1xuICAgICAgICAgICAgICAgIHRyYW5zID0gJC5faTE4bi50cmFuc1skLl9pMThuWydkZWZhdWx0J11dW25zXVtzdHJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcmV0dXJuIHRyYW5zIG9yIG9yaWdpbmFsIHN0cmluZ1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zIHx8IHN0cjtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gU2V0IGxhbmd1YWdlIChhY2NlcHRlZCBmb3JtYXRzOiBlbiBvciBlbi1VUylcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAkLl9pMThuLmxhbmd1YWdlID0gYXJndW1lbnRzWzBdOyBcbiAgICAgICAgICAgIHJldHVybiAkLl9pMThuLmxhbmd1YWdlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZ2V0IHRyYW5zbGF0aW9uXG4gICAgICAgICAgICBpZiAodHlwZW9mKGFyZ3VtZW50c1sxXSkgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHJhbnMgPSBnZXRUcmFucyhhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSk7XG4gICAgICAgICAgICAgICAgLy8gaGFzIHZhcmlhYmxlcyBmb3Igc3RyaW5nIGZvcm1hdGluZ1xuICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNbMl0gJiYgdHlwZW9mKGFyZ3VtZW50c1syXSkgPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQuZm9ybWF0KHRyYW5zLCBhcmd1bWVudHNbMl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNldCB0cmFuc2xhdGlvblxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIHRtcCAgPSBhcmd1bWVudHNbMF0uc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICB2YXIgbGFuZyA9IHRtcFswXTtcbiAgICAgICAgICAgICAgICB2YXIgbnMgICA9IHRtcFsxXSB8fCAnalF1ZXJ5JztcbiAgICAgICAgICAgICAgICBpZiAoISQuX2kxOG4udHJhbnNbbGFuZ10pIHtcbiAgICAgICAgICAgICAgICAgICAgJC5faTE4bi50cmFuc1tsYW5nXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAkLl9pMThuLnRyYW5zW2xhbmddW25zXSA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICQuZXh0ZW5kKCQuX2kxOG4udHJhbnNbbGFuZ11bbnNdLCBhcmd1bWVudHNbMV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59KShqUXVlcnkpO1xuLypcbiAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEpvc2ggQnVzaCAoZGlnaXRhbGJ1c2guY29tKVxuICogXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvblxuICogb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb25cbiAqIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dFxuICogcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsXG4gKiBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZ1xuICogY29uZGl0aW9uczpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqIFxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFU1xuICogT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUXG4gKiBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSxcbiAqIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUlxuICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiBcbiAqL1xuIFxuLypcbiAqIFZlcnNpb246IDEuMS4zXG4gKiBSZWxlYXNlOiAyMDA4LTA0LTE2XG4gKi8gXG4oZnVuY3Rpb24oJCkge1xuXG5cdC8vSGVscGVyIEZ1bmN0aW9uIGZvciBDYXJldCBwb3NpdGlvbmluZ1xuXHQkLmZuLmNhcmV0PWZ1bmN0aW9uKGJlZ2luLGVuZCl7XHRcblx0XHRpZih0aGlzLmxlbmd0aD09MCkgcmV0dXJuO1xuXHRcdGlmICh0eXBlb2YgYmVnaW4gPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGVuZCA9ICh0eXBlb2YgZW5kID09ICdudW1iZXInKT9lbmQ6YmVnaW47ICBcblx0XHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtcblx0XHRcdFx0aWYodGhpcy5zZXRTZWxlY3Rpb25SYW5nZSl7XG5cdFx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0XHRcdHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UoYmVnaW4sZW5kKTtcblx0XHRcdFx0fWVsc2UgaWYgKHRoaXMuY3JlYXRlVGV4dFJhbmdlKXtcblx0XHRcdFx0XHR2YXIgcmFuZ2UgPSB0aGlzLmNyZWF0ZVRleHRSYW5nZSgpO1xuXHRcdFx0XHRcdHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuXHRcdFx0XHRcdHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZCk7XG5cdFx0XHRcdFx0cmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBiZWdpbik7XG5cdFx0XHRcdFx0cmFuZ2Uuc2VsZWN0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXNbMF0uc2V0U2VsZWN0aW9uUmFuZ2Upe1xuXHRcdFx0XHRiZWdpbiA9IHRoaXNbMF0uc2VsZWN0aW9uU3RhcnQ7XG5cdFx0XHRcdGVuZCA9IHRoaXNbMF0uc2VsZWN0aW9uRW5kO1xuXHRcdFx0fWVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2Upe1xuXHRcdFx0XHR2YXIgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtcdFx0XHRcblx0XHRcdFx0YmVnaW4gPSAwIC0gcmFuZ2UuZHVwbGljYXRlKCkubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCAtMTAwMDAwKTtcblx0XHRcdFx0ZW5kID0gYmVnaW4gKyByYW5nZS50ZXh0Lmxlbmd0aDtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7YmVnaW46YmVnaW4sZW5kOmVuZH07XG4gICAgICAgIH0gICAgICAgXG5cdH07XG5cblx0Ly9QcmVkZWZpbmVkIGNoYXJhY3RlciBkZWZpbml0aW9uc1xuXHR2YXIgY2hhck1hcD17XG5cdFx0JzknOlwiWzAtOV1cIixcblx0XHQnYSc6XCJbQS1aYS16XVwiLFxuXHRcdCcqJzpcIltBLVphLXowLTldXCJcblx0fTtcblx0XG5cdC8vSGVscGVyIG1ldGhvZCB0byBpbmplY3QgY2hhcmFjdGVyIGRlZmluaXRpb25zXG5cdCQubWFzaz17XG5cdFx0YWRkUGxhY2Vob2xkZXIgOiBmdW5jdGlvbihjLHIpe1xuXHRcdFx0Y2hhck1hcFtjXT1yO1xuXHRcdH1cblx0fTtcblx0XG5cdCQuZm4udW5tYXNrPWZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMudHJpZ2dlcihcInVubWFza1wiKTtcblx0fTtcblx0XG5cdC8vTWFpbiBNZXRob2Rcblx0JC5mbi5tYXNrID0gZnVuY3Rpb24obWFzayxzZXR0aW5ncykge1x0XG5cdFx0c2V0dGluZ3MgPSAkLmV4dGVuZCh7XG5cdFx0XHRwbGFjZWhvbGRlcjogXCJfXCIsXHRcdFx0XG5cdFx0XHRjb21wbGV0ZWQ6IG51bGxcblx0XHR9LCBzZXR0aW5ncyk7XHRcdFxuXHRcdFxuXHRcdC8vQnVpbGQgUmVnZXggZm9yIGZvcm1hdCB2YWxpZGF0aW9uXG5cdFx0dmFyIHJlID0gbmV3IFJlZ0V4cChcIl5cIitcdFxuXHRcdCQubWFwKCBtYXNrLnNwbGl0KFwiXCIpLCBmdW5jdGlvbihjLGkpe1x0XHQgIFx0XHQgIFxuXHRcdCAgcmV0dXJuIGNoYXJNYXBbY118fCgoL1tBLVphLXowLTldLy50ZXN0KGMpP1wiXCI6XCJcXFxcXCIpK2MpO1xuXHRcdH0pLmpvaW4oJycpK1x0XHRcdFx0XG5cdFx0XCIkXCIpO1x0XHRcblxuXHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtcdFx0XG5cdFx0XHR2YXIgaW5wdXQ9JCh0aGlzKTtcblx0XHRcdHZhciBidWZmZXI9bmV3IEFycmF5KG1hc2subGVuZ3RoKTtcblx0XHRcdHZhciBsb2NrZWQ9bmV3IEFycmF5KG1hc2subGVuZ3RoKTtcblx0XHRcdHZhciB2YWxpZD1mYWxzZTsgICBcblx0XHRcdHZhciBpZ25vcmU9ZmFsc2U7ICBcdFx0XHQvL1ZhcmlhYmxlIGZvciBpZ25vcmluZyBjb250cm9sIGtleXNcblx0XHRcdHZhciBmaXJzdE5vbk1hc2tQb3M9bnVsbDsgXG5cdFx0XHRcblx0XHRcdC8vQnVpbGQgYnVmZmVyIGxheW91dCBmcm9tIG1hc2sgJiBkZXRlcm1pbmUgdGhlIGZpcnN0IG5vbiBtYXNrZWQgY2hhcmFjdGVyXHRcdFx0XG5cdFx0XHQkLmVhY2goIG1hc2suc3BsaXQoXCJcIiksIGZ1bmN0aW9uKGksYyl7XHRcdFx0XHRcblx0XHRcdFx0bG9ja2VkW2ldPShjaGFyTWFwW2NdPT1udWxsKTtcdFx0XHRcdFxuXHRcdFx0XHRidWZmZXJbaV09bG9ja2VkW2ldP2M6c2V0dGluZ3MucGxhY2Vob2xkZXI7XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdGlmKCFsb2NrZWRbaV0gJiYgZmlyc3ROb25NYXNrUG9zPT1udWxsKVxuXHRcdFx0XHRcdGZpcnN0Tm9uTWFza1Bvcz1pO1xuXHRcdFx0fSk7XHRcdFxuXHRcdFx0XG5cdFx0XHRmdW5jdGlvbiBmb2N1c0V2ZW50KCl7XHRcdFx0XHRcdFxuXHRcdFx0XHRjaGVja1ZhbCgpO1xuXHRcdFx0XHR3cml0ZUJ1ZmZlcigpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0JChpbnB1dFswXSkuY2FyZXQodmFsaWQ/bWFzay5sZW5ndGg6Zmlyc3ROb25NYXNrUG9zKTtcdFx0XHRcdFx0XG5cdFx0XHRcdH0sMCk7XG5cdFx0XHR9O1xuXHRcdFx0XG5cdFx0XHRmdW5jdGlvbiBrZXlkb3duRXZlbnQoZSl7XHRcdFx0XHRcblx0XHRcdFx0dmFyIHBvcz0kKHRoaXMpLmNhcmV0KCk7XG5cdFx0XHRcdHZhciBrID0gZS5rZXlDb2RlO1xuXHRcdFx0XHRpZ25vcmU9KGsgPCAxNiB8fCAoayA+IDE2ICYmIGsgPCAzMiApIHx8IChrID4gMzIgJiYgayA8IDQxKSk7XG5cdFx0XHRcdFxuXHRcdFx0XHQvL2RlbGV0ZSBzZWxlY3Rpb24gYmVmb3JlIHByb2NlZWRpbmdcblx0XHRcdFx0aWYoKHBvcy5iZWdpbi1wb3MuZW5kKSE9MCAmJiAoIWlnbm9yZSB8fCBrPT04IHx8IGs9PTQ2KSl7XG5cdFx0XHRcdFx0Y2xlYXJCdWZmZXIocG9zLmJlZ2luLHBvcy5lbmQpO1xuXHRcdFx0XHR9XHRcblx0XHRcdFx0Ly9iYWNrc3BhY2UgYW5kIGRlbGV0ZSBnZXQgc3BlY2lhbCB0cmVhdG1lbnRcblx0XHRcdFx0aWYoaz09OCl7Ly9iYWNrc3BhY2VcdFx0XHRcdFx0XG5cdFx0XHRcdFx0d2hpbGUocG9zLmJlZ2luLS0+PTApe1xuXHRcdFx0XHRcdFx0aWYoIWxvY2tlZFtwb3MuYmVnaW5dKXtcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdGJ1ZmZlcltwb3MuYmVnaW5dPXNldHRpbmdzLnBsYWNlaG9sZGVyO1xuXHRcdFx0XHRcdFx0XHRpZigkLmJyb3dzZXIub3BlcmEpe1xuXHRcdFx0XHRcdFx0XHRcdC8vT3BlcmEgd29uJ3QgbGV0IHlvdSBjYW5jZWwgdGhlIGJhY2tzcGFjZSwgc28gd2UnbGwgbGV0IGl0IGJhY2tzcGFjZSBvdmVyIGEgZHVtbXkgY2hhcmFjdGVyLlx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRzPXdyaXRlQnVmZmVyKCk7XG5cdFx0XHRcdFx0XHRcdFx0aW5wdXQudmFsKHMuc3Vic3RyaW5nKDAscG9zLmJlZ2luKStcIiBcIitzLnN1YnN0cmluZyhwb3MuYmVnaW4pKTtcblx0XHRcdFx0XHRcdFx0XHQkKHRoaXMpLmNhcmV0KHBvcy5iZWdpbisxKTtcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRcdHdyaXRlQnVmZmVyKCk7XG5cdFx0XHRcdFx0XHRcdFx0JCh0aGlzKS5jYXJldChNYXRoLm1heChmaXJzdE5vbk1hc2tQb3MscG9zLmJlZ2luKSk7XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFxuXHRcdFx0XHR9ZWxzZSBpZihrPT00Nil7Ly9kZWxldGVcblx0XHRcdFx0XHRjbGVhckJ1ZmZlcihwb3MuYmVnaW4scG9zLmJlZ2luKzEpO1xuXHRcdFx0XHRcdHdyaXRlQnVmZmVyKCk7XG5cdFx0XHRcdFx0JCh0aGlzKS5jYXJldChNYXRoLm1heChmaXJzdE5vbk1hc2tQb3MscG9zLmJlZ2luKSk7XHRcdFx0XHRcdFxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fWVsc2UgaWYgKGs9PTI3KXsvL2VzY2FwZVxuXHRcdFx0XHRcdGNsZWFyQnVmZmVyKDAsbWFzay5sZW5ndGgpO1xuXHRcdFx0XHRcdHdyaXRlQnVmZmVyKCk7XG5cdFx0XHRcdFx0JCh0aGlzKS5jYXJldChmaXJzdE5vbk1hc2tQb3MpO1x0XHRcdFx0XHRcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdH07XG5cdFx0XHRcblx0XHRcdGZ1bmN0aW9uIGtleXByZXNzRXZlbnQoZSl7XHRcdFx0XHRcdFxuXHRcdFx0XHRpZihpZ25vcmUpe1xuXHRcdFx0XHRcdGlnbm9yZT1mYWxzZTtcblx0XHRcdFx0XHQvL0ZpeGVzIE1hYyBGRiBidWcgb24gYmFja3NwYWNlXG5cdFx0XHRcdFx0cmV0dXJuIChlLmtleUNvZGUgPT0gOCk/IGZhbHNlOiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGU9ZXx8d2luZG93LmV2ZW50O1xuXHRcdFx0XHR2YXIgaz1lLmNoYXJDb2RlfHxlLmtleUNvZGV8fGUud2hpY2g7XHRcdFx0XHRcdFx0XG5cdFx0XHRcdHZhciBwb3M9JCh0aGlzKS5jYXJldCgpO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRpZihlLmN0cmxLZXkgfHwgZS5hbHRLZXkpey8vSWdub3JlXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1lbHNlIGlmICgoaz49NDEgJiYgazw9MTIyKSB8fGs9PTMyIHx8IGs+MTg2KXsvL3R5cGVhYmxlIGNoYXJhY3RlcnNcblx0XHRcdFx0XHR2YXIgcD1zZWVrTmV4dChwb3MuYmVnaW4tMSk7XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKHA8bWFzay5sZW5ndGgpe1xuXHRcdFx0XHRcdFx0aWYobmV3IFJlZ0V4cChjaGFyTWFwW21hc2suY2hhckF0KHApXSkudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGspKSl7XG5cdFx0XHRcdFx0XHRcdGJ1ZmZlcltwXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGspO1x0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR3cml0ZUJ1ZmZlcigpO1xuXHRcdFx0XHRcdFx0XHR2YXIgbmV4dD1zZWVrTmV4dChwKTtcblx0XHRcdFx0XHRcdFx0JCh0aGlzKS5jYXJldChuZXh0KTtcblx0XHRcdFx0XHRcdFx0aWYoc2V0dGluZ3MuY29tcGxldGVkICYmIG5leHQgPT0gbWFzay5sZW5ndGgpXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3MuY29tcGxldGVkLmNhbGwoaW5wdXQpO1xuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XHRcdFx0XHRcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1x0XHRcdFx0XG5cdFx0XHR9O1xuXHRcdFx0XG5cdFx0XHRmdW5jdGlvbiBjbGVhckJ1ZmZlcihzdGFydCxlbmQpe1xuXHRcdFx0XHRmb3IodmFyIGk9c3RhcnQ7aTxlbmQmJmk8bWFzay5sZW5ndGg7aSsrKXtcblx0XHRcdFx0XHRpZighbG9ja2VkW2ldKVxuXHRcdFx0XHRcdFx0YnVmZmVyW2ldPXNldHRpbmdzLnBsYWNlaG9sZGVyO1xuXHRcdFx0XHR9XHRcdFx0XHRcblx0XHRcdH07XG5cdFx0XHRcblx0XHRcdGZ1bmN0aW9uIHdyaXRlQnVmZmVyKCl7XHRcdFx0XHRcblx0XHRcdFx0cmV0dXJuIGlucHV0LnZhbChidWZmZXIuam9pbignJykpLnZhbCgpO1x0XHRcdFx0XG5cdFx0XHR9O1xuXHRcdFx0XG5cdFx0XHRmdW5jdGlvbiBjaGVja1ZhbCgpe1x0XG5cdFx0XHRcdC8vdHJ5IHRvIHBsYWNlIGNoYXJjdGVycyB3aGVyZSB0aGV5IGJlbG9uZ1xuXHRcdFx0XHR2YXIgdGVzdD1pbnB1dC52YWwoKTtcblx0XHRcdFx0dmFyIHBvcz0wO1xuXHRcdFx0XHRmb3IodmFyIGk9MDtpPG1hc2subGVuZ3RoO2krKyl7XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKCFsb2NrZWRbaV0pe1xuXHRcdFx0XHRcdFx0YnVmZmVyW2ldPXNldHRpbmdzLnBsYWNlaG9sZGVyO1xuXHRcdFx0XHRcdFx0d2hpbGUocG9zKys8dGVzdC5sZW5ndGgpe1xuXHRcdFx0XHRcdFx0XHQvL1JlZ2V4IFRlc3QgZWFjaCBjaGFyIGhlcmUuXG5cdFx0XHRcdFx0XHRcdHZhciByZUNoYXI9bmV3IFJlZ0V4cChjaGFyTWFwW21hc2suY2hhckF0KGkpXSk7XG5cdFx0XHRcdFx0XHRcdGlmKHRlc3QuY2hhckF0KHBvcy0xKS5tYXRjaChyZUNoYXIpKXtcblx0XHRcdFx0XHRcdFx0XHRidWZmZXJbaV09dGVzdC5jaGFyQXQocG9zLTEpO1x0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgcz13cml0ZUJ1ZmZlcigpO1xuXHRcdFx0XHRpZighcy5tYXRjaChyZSkpe1x0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0aW5wdXQudmFsKFwiXCIpO1x0XG5cdFx0XHRcdFx0Y2xlYXJCdWZmZXIoMCxtYXNrLmxlbmd0aCk7XG5cdFx0XHRcdFx0dmFsaWQ9ZmFsc2U7XG5cdFx0XHRcdH1lbHNlXG5cdFx0XHRcdFx0dmFsaWQ9dHJ1ZTtcblx0XHRcdH07XG5cdFx0XHRcblx0XHRcdGZ1bmN0aW9uIHNlZWtOZXh0KHBvcyl7XHRcdFx0XHRcblx0XHRcdFx0d2hpbGUoKytwb3M8bWFzay5sZW5ndGgpe1x0XHRcdFx0XHRcblx0XHRcdFx0XHRpZighbG9ja2VkW3Bvc10pXG5cdFx0XHRcdFx0XHRyZXR1cm4gcG9zO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtYXNrLmxlbmd0aDtcblx0XHRcdH07XG5cdFx0XHRcblx0XHRcdGlucHV0Lm9uZShcInVubWFza1wiLGZ1bmN0aW9uKCl7XG5cdFx0XHRcdGlucHV0LnVuYmluZChcImZvY3VzXCIsZm9jdXNFdmVudCk7XG5cdFx0XHRcdGlucHV0LnVuYmluZChcImJsdXJcIixjaGVja1ZhbCk7XG5cdFx0XHRcdGlucHV0LnVuYmluZChcImtleWRvd25cIixrZXlkb3duRXZlbnQpO1xuXHRcdFx0XHRpbnB1dC51bmJpbmQoXCJrZXlwcmVzc1wiLGtleXByZXNzRXZlbnQpO1xuXHRcdFx0XHRpZiAoJC5icm93c2VyLm1zaWUpIFxuXHRcdFx0XHRcdHRoaXMub25wYXN0ZT0gbnVsbDsgICAgICAgICAgICAgICAgICAgICBcblx0XHRcdFx0ZWxzZSBpZiAoJC5icm93c2VyLm1vemlsbGEpXG5cdFx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsY2hlY2tWYWwsZmFsc2UpO1xuXHRcdFx0fSk7XG5cdFx0XHRpbnB1dC5iaW5kKFwiZm9jdXNcIixmb2N1c0V2ZW50KTtcblx0XHRcdGlucHV0LmJpbmQoXCJibHVyXCIsY2hlY2tWYWwpO1xuXHRcdFx0aW5wdXQuYmluZChcImtleWRvd25cIixrZXlkb3duRXZlbnQpO1xuXHRcdFx0aW5wdXQuYmluZChcImtleXByZXNzXCIsa2V5cHJlc3NFdmVudCk7XG5cdFx0XHQvL1Bhc3RlIGV2ZW50cyBmb3IgSUUgYW5kIE1vemlsbGEgdGhhbmtzIHRvIEtyaXN0aW5uIFNpZ211bmRzc29uXG5cdFx0XHRpZiAoJC5icm93c2VyLm1zaWUpIFxuXHRcdFx0XHR0aGlzLm9ucGFzdGU9IGZ1bmN0aW9uKCl7c2V0VGltZW91dChjaGVja1ZhbCwwKTt9OyAgICAgICAgICAgICAgICAgICAgIFxuXHRcdFx0ZWxzZSBpZiAoJC5icm93c2VyLm1vemlsbGEpXG5cdFx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLGNoZWNrVmFsLGZhbHNlKTtcblx0XHRcdFx0XG5cdFx0XHRjaGVja1ZhbCgpOy8vUGVyZm9ybSBpbml0aWFsIGNoZWNrIGZvciBleGlzdGluZyB2YWx1ZXNcblx0XHR9KTtcblx0fTtcbn0pKGpRdWVyeSk7XG4vKiBDb3B5cmlnaHQgKGMpIDIwMDYgQnJhbmRvbiBBYXJvbiAoYnJhbmRvbi5hYXJvbkBnbWFpbC5jb20gfHwgaHR0cDovL2JyYW5kb25hYXJvbi5uZXQpXG4gKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKVxuICogYW5kIEdQTCAoaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5waHApIGxpY2Vuc2VzLlxuICogVGhhbmtzIHRvOiBodHRwOi8vYWRvbWFzLm9yZy9qYXZhc2NyaXB0LW1vdXNlLXdoZWVsLyBmb3Igc29tZSBwb2ludGVycy5cbiAqIFRoYW5rcyB0bzogTWF0aGlhcyBCYW5rKGh0dHA6Ly93d3cubWF0aGlhcy1iYW5rLmRlKSBmb3IgYSBzY29wZSBidWcgZml4LlxuICpcbiAqICRMYXN0Q2hhbmdlZERhdGU6IDIwMDctMTItMjAgMDk6MDI6MDggLTA2MDAgKFRodSwgMjAgRGVjIDIwMDcpICRcbiAqICRSZXY6IDQyNjUgJFxuICpcbiAqIFZlcnNpb246IDMuMFxuICogXG4gKiBSZXF1aXJlczogJCAxLjIuMitcbiAqL1xuXG4oZnVuY3Rpb24oJCkge1xuXG4kLmV2ZW50LnNwZWNpYWwubW91c2V3aGVlbCA9IHtcblx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBoYW5kbGVyID0gJC5ldmVudC5zcGVjaWFsLm1vdXNld2hlZWwuaGFuZGxlcjtcblx0XHRcblx0XHQvLyBGaXggcGFnZVgsIHBhZ2VZLCBjbGllbnRYIGFuZCBjbGllbnRZIGZvciBtb3ppbGxhXG5cdFx0aWYgKCAkLmJyb3dzZXIubW96aWxsYSApXG5cdFx0XHQkKHRoaXMpLmJpbmQoJ21vdXNlbW92ZS5tb3VzZXdoZWVsJywgZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdFx0JC5kYXRhKHRoaXMsICdtd2N1cnNvcnBvc2RhdGEnLCB7XG5cdFx0XHRcdFx0cGFnZVg6IGV2ZW50LnBhZ2VYLFxuXHRcdFx0XHRcdHBhZ2VZOiBldmVudC5wYWdlWSxcblx0XHRcdFx0XHRjbGllbnRYOiBldmVudC5jbGllbnRYLFxuXHRcdFx0XHRcdGNsaWVudFk6IGV2ZW50LmNsaWVudFlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XG5cdFx0aWYgKCB0aGlzLmFkZEV2ZW50TGlzdGVuZXIgKVxuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKCAoJC5icm93c2VyLm1vemlsbGEgPyAnRE9NTW91c2VTY3JvbGwnIDogJ21vdXNld2hlZWwnKSwgaGFuZGxlciwgZmFsc2UpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMub25tb3VzZXdoZWVsID0gaGFuZGxlcjtcblx0fSxcblx0XG5cdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaGFuZGxlciA9ICQuZXZlbnQuc3BlY2lhbC5tb3VzZXdoZWVsLmhhbmRsZXI7XG5cdFx0XG5cdFx0JCh0aGlzKS51bmJpbmQoJ21vdXNlbW92ZS5tb3VzZXdoZWVsJyk7XG5cdFx0XG5cdFx0aWYgKCB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIgKVxuXHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCAoJC5icm93c2VyLm1vemlsbGEgPyAnRE9NTW91c2VTY3JvbGwnIDogJ21vdXNld2hlZWwnKSwgaGFuZGxlciwgZmFsc2UpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMub25tb3VzZXdoZWVsID0gZnVuY3Rpb24oKXt9O1xuXHRcdFxuXHRcdCQucmVtb3ZlRGF0YSh0aGlzLCAnbXdjdXJzb3Jwb3NkYXRhJyk7XG5cdH0sXG5cdFxuXHRoYW5kbGVyOiBmdW5jdGlvbihldmVudCkge1xuXHRcdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMSApO1xuXHRcdFxuXHRcdGV2ZW50ID0gJC5ldmVudC5maXgoZXZlbnQgfHwgd2luZG93LmV2ZW50KTtcblx0XHQvLyBHZXQgY29ycmVjdCBwYWdlWCwgcGFnZVksIGNsaWVudFggYW5kIGNsaWVudFkgZm9yIG1vemlsbGFcblx0XHQkLmV4dGVuZCggZXZlbnQsICQuZGF0YSh0aGlzLCAnbXdjdXJzb3Jwb3NkYXRhJykgfHwge30gKTtcblx0XHR2YXIgZGVsdGEgPSAwLCByZXR1cm5WYWx1ZSA9IHRydWU7XG5cdFx0XG5cdFx0aWYgKCBldmVudC53aGVlbERlbHRhICkgZGVsdGEgPSBldmVudC53aGVlbERlbHRhLzEyMDtcblx0XHRpZiAoIGV2ZW50LmRldGFpbCAgICAgKSBkZWx0YSA9IC1ldmVudC5kZXRhaWwvMztcblx0XHRpZiAoICQuYnJvd3Nlci5vcGVyYSAgKSBkZWx0YSA9IC1ldmVudC53aGVlbERlbHRhO1xuXHRcdFxuXHRcdGV2ZW50LmRhdGEgID0gZXZlbnQuZGF0YSB8fCB7fTtcblx0XHRldmVudC50eXBlICA9IFwibW91c2V3aGVlbFwiO1xuXHRcdFxuXHRcdC8vIEFkZCBkZWx0YSB0byB0aGUgZnJvbnQgb2YgdGhlIGFyZ3VtZW50c1xuXHRcdGFyZ3MudW5zaGlmdChkZWx0YSk7XG5cdFx0Ly8gQWRkIGV2ZW50IHRvIHRoZSBmcm9udCBvZiB0aGUgYXJndW1lbnRzXG5cdFx0YXJncy51bnNoaWZ0KGV2ZW50KTtcblxuXHRcdHJldHVybiAkLmV2ZW50LmhhbmRsZS5hcHBseSh0aGlzLCBhcmdzKTtcblx0fVxufTtcblxuJC5mbi5leHRlbmQoe1xuXHRtb3VzZXdoZWVsOiBmdW5jdGlvbihmbikge1xuXHRcdHJldHVybiBmbiA/IHRoaXMuYmluZChcIm1vdXNld2hlZWxcIiwgZm4pIDogdGhpcy50cmlnZ2VyKFwibW91c2V3aGVlbFwiKTtcblx0fSxcblx0XG5cdHVubW91c2V3aGVlbDogZnVuY3Rpb24oZm4pIHtcblx0XHRyZXR1cm4gdGhpcy51bmJpbmQoXCJtb3VzZXdoZWVsXCIsIGZuKTtcblx0fVxufSk7XG5cbn0pKGpRdWVyeSk7LyohXG4gICAgICAgIFNsaW1ib3ggdjIuMDIgLSBUaGUgdWx0aW1hdGUgbGlnaHR3ZWlnaHQgTGlnaHRib3ggY2xvbmUgZm9yIGpRdWVyeVxuICAgICAgICAoYykgMjAwNy0yMDA5IENocmlzdG9waGUgQmV5bHMgPGh0dHA6Ly93d3cuZGlnaXRhbGlhLmJlPlxuICAgICAgICBNSVQtc3R5bGUgbGljZW5zZS5cbiovXG5cbihmdW5jdGlvbigkKSB7XG5cbiAgICAgICAgLy8gR2xvYmFsIHZhcmlhYmxlcywgYWNjZXNzaWJsZSB0byBTbGltYm94IG9ubHlcbiAgICAgICAgdmFyIHdpbiA9ICQod2luZG93KSwgb3B0aW9ucywgaW1hZ2VzLCBhY3RpdmVJbWFnZSA9IC0xLCBhY3RpdmVVUkwsIHByZXZJbWFnZSwgbmV4dEltYWdlLCBjb21wYXRpYmxlT3ZlcmxheSwgbWlkZGxlLCBjZW50ZXJXaWR0aCwgY2VudGVySGVpZ2h0LCBpZTYgPSAhd2luZG93LlhNTEh0dHBSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIG9wZXJhRml4ID0gd2luZG93Lm9wZXJhICYmIChkb2N1bWVudC5jb21wYXRNb2RlID09IFwiQ1NTMUNvbXBhdFwiKSAmJiAoJC5icm93c2VyLnZlcnNpb24gPj0gOS4zKSwgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXG4gICAgICAgIC8vIFByZWxvYWQgaW1hZ2VzXG4gICAgICAgIHByZWxvYWQgPSB7fSwgcHJlbG9hZFByZXYgPSBuZXcgSW1hZ2UoKSwgcHJlbG9hZE5leHQgPSBuZXcgSW1hZ2UoKSxcblxuICAgICAgICAvLyBET00gZWxlbWVudHNcbiAgICAgICAgb3ZlcmxheSwgY2VudGVyLCBpbWFnZSwgc2l6ZXIsIHByZXZMaW5rLCBuZXh0TGluaywgYm90dG9tQ29udGFpbmVyLCBib3R0b20sIGNhcHRpb24sIG51bWJlcjtcblxuICAgICAgICAvKlxuICAgICAgICAgICAgICAgIEluaXRpYWxpemF0aW9uXG4gICAgICAgICovXG5cbiAgICAgICAgJChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIFNsaW1ib3ggSFRNTCBjb2RlIGF0IHRoZSBib3R0b20gb2YgdGhlIGRvY3VtZW50XG4gICAgICAgICAgICAgICAgJChcImJvZHlcIikuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgJChbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXkgPSAkKCc8ZGl2IGlkPVwibGJPdmVybGF5XCIgLz4nKVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyID0gJCgnPGRpdiBpZD1cImxiQ2VudGVyXCIgLz4nKVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tQ29udGFpbmVyID0gJCgnPGRpdiBpZD1cImxiQm90dG9tQ29udGFpbmVyXCIgLz4nKVswXVxuICAgICAgICAgICAgICAgICAgICAgICAgXSkuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIilcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaW1hZ2UgPSAkKCc8ZGl2IGlkPVwibGJJbWFnZVwiIC8+JykuYXBwZW5kVG8oY2VudGVyKS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplciA9ICQoJzxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCIgLz4nKS5hcHBlbmQoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2TGluayA9ICQoJzxhIGlkPVwibGJQcmV2TGlua1wiIGhyZWY9XCIjXCIgLz4nKS5jbGljayhwcmV2aW91cylbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRMaW5rID0gJCgnPGEgaWQ9XCJsYk5leHRMaW5rXCIgaHJlZj1cIiNcIiAvPicpLmNsaWNrKG5leHQpWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVswXVxuICAgICAgICAgICAgICAgIClbMF07XG5cbiAgICAgICAgICAgICAgICBib3R0b20gPSAkKCc8ZGl2IGlkPVwibGJCb3R0b21cIiAvPicpLmFwcGVuZFRvKGJvdHRvbUNvbnRhaW5lcikuYXBwZW5kKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJzxhIGlkPVwibGJDbG9zZUxpbmtcIiBocmVmPVwiI1wiIC8+JykuYWRkKG92ZXJsYXkpLmNsaWNrKGNsb3NlKVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAkKCc8ZGl2IGlkPVwibGJDYXB0aW9uXCIgLz4nKVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciA9ICQoJzxkaXYgaWQ9XCJsYk51bWJlclwiIC8+JylbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8ZGl2IHN0eWxlPVwiY2xlYXI6IGJvdGg7XCIgLz4nKVswXVxuICAgICAgICAgICAgICAgIF0pWzBdO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgQVBJXG4gICAgICAgICovXG5cbiAgICAgICAgLy8gT3BlbiBTbGltYm94IHdpdGggdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzXG4gICAgICAgICQuc2xpbWJveCA9IGZ1bmN0aW9uKF9pbWFnZXMsIHN0YXJ0SW1hZ2UsIF9vcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9ICQuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A6IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbGxvd3MgdG8gbmF2aWdhdGUgYmV0d2VlbiBmaXJzdCBhbmQgbGFzdCBpbWFnZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlPcGFjaXR5OiAwLjgsICAgICAgICAgICAgICAgICAgICAvLyAxIGlzIG9wYXF1ZSwgMCBpcyBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IChjaGFuZ2UgdGhlIGNvbG9yIGluIHRoZSBDU1MgZmlsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlGYWRlRHVyYXRpb246IDQwMCwgICAgICAgICAgICAgICAvLyBEdXJhdGlvbiBvZiB0aGUgb3ZlcmxheSBmYWRlLWluIGFuZCBmYWRlLW91dCBhbmltYXRpb25zIChpbiBtaWxsaXNlY29uZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNpemVEdXJhdGlvbjogNDAwLCAgICAgICAgICAgICAgICAgICAgLy8gRHVyYXRpb24gb2YgZWFjaCBvZiB0aGUgYm94IHJlc2l6ZSBhbmltYXRpb25zIChpbiBtaWxsaXNlY29uZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNpemVFYXNpbmc6IFwic3dpbmdcIiwgICAgICAgICAgICAgICAgICAvLyBcInN3aW5nXCIgaXMgalF1ZXJ5J3MgZGVmYXVsdCBlYXNpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxXaWR0aDogMjUwLCAgICAgICAgICAgICAgICAgICAgICAvLyBJbml0aWFsIHdpZHRoIG9mIHRoZSBib3ggKGluIHBpeGVscylcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxIZWlnaHQ6IDI1MCwgICAgICAgICAgICAgICAgICAgICAvLyBJbml0aWFsIGhlaWdodCBvZiB0aGUgYm94IChpbiBwaXhlbHMpXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUZhZGVEdXJhdGlvbjogNDAwLCAgICAgICAgICAgICAgICAgLy8gRHVyYXRpb24gb2YgdGhlIGltYWdlIGZhZGUtaW4gYW5pbWF0aW9uIChpbiBtaWxsaXNlY29uZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXB0aW9uQW5pbWF0aW9uRHVyYXRpb246IDQwMCwgICAgICAgICAgLy8gRHVyYXRpb24gb2YgdGhlIGNhcHRpb24gYW5pbWF0aW9uIChpbiBtaWxsaXNlY29uZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyVGV4dDogXCJJbWFnZSB7eH0gb2Yge3l9XCIsICAgICAgICAvLyBUcmFuc2xhdGUgb3IgY2hhbmdlIGFzIHlvdSB3aXNoLCBvciBzZXQgaXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBjb3VudGVyIHRleHQgZm9yIGltYWdlIGdyb3Vwc1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VLZXlzOiBbMjcsIDg4LCA2N10sICAgICAgICAgICAgICAgIC8vIEFycmF5IG9mIGtleWNvZGVzIHRvIGNsb3NlIFNsaW1ib3gsIGRlZmF1bHQ6IEVzYyAoMjcpLCAneCcgKDg4KSwgJ2MnICg2NylcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzS2V5czogWzM3LCA4MF0sICAgICAgICAgICAgICAgICAvLyBBcnJheSBvZiBrZXljb2RlcyB0byBuYXZpZ2F0ZSB0byB0aGUgcHJldmlvdXMgaW1hZ2UsIGRlZmF1bHQ6IExlZnQgYXJyb3cgKDM3KSwgJ3AnICg4MClcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRLZXlzOiBbMzksIDc4XSAgICAgICAgICAgICAgICAgICAgICAvLyBBcnJheSBvZiBrZXljb2RlcyB0byBuYXZpZ2F0ZSB0byB0aGUgbmV4dCBpbWFnZSwgZGVmYXVsdDogUmlnaHQgYXJyb3cgKDM5KSwgJ24nICg3OClcbiAgICAgICAgICAgICAgICB9LCBfb3B0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhIHNpbmdsZSBpbWFnZSwgd2l0aCBVUkwgYW5kIFRpdGxlIGFzIGZpcnN0IHR3byBhcmd1bWVudHNcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIF9pbWFnZXMgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2ltYWdlcyA9IFtbX2ltYWdlcywgc3RhcnRJbWFnZV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbWFnZSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbWlkZGxlID0gd2luLnNjcm9sbFRvcCgpICsgKChvcGVyYUZpeCA/IGRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgOiB3aW4uaGVpZ2h0KCkpIC8gMik7XG4gICAgICAgICAgICAgICAgY2VudGVyV2lkdGggPSBvcHRpb25zLmluaXRpYWxXaWR0aDtcbiAgICAgICAgICAgICAgICBjZW50ZXJIZWlnaHQgPSBvcHRpb25zLmluaXRpYWxIZWlnaHQ7XG4gICAgICAgICAgICAgICAgJChjZW50ZXIpLmNzcyh7dG9wOiBNYXRoLm1heCgwLCBtaWRkbGUgLSAoY2VudGVySGVpZ2h0IC8gMikpLCB3aWR0aDogY2VudGVyV2lkdGgsIGhlaWdodDogY2VudGVySGVpZ2h0LCBtYXJnaW5MZWZ0OiAtY2VudGVyV2lkdGgvMn0pLnNob3coKTtcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlT3ZlcmxheSA9IGllNiB8fCAob3ZlcmxheS5jdXJyZW50U3R5bGUgJiYgKG92ZXJsYXkuY3VycmVudFN0eWxlLnBvc2l0aW9uICE9IFwiZml4ZWRcIikpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXRpYmxlT3ZlcmxheSkgb3ZlcmxheS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICAgICAgICAgICAgICAkKG92ZXJsYXkpLmNzcyhcIm9wYWNpdHlcIiwgb3B0aW9ucy5vdmVybGF5T3BhY2l0eSkuZmFkZUluKG9wdGlvbnMub3ZlcmxheUZhZGVEdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgcG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICBzZXR1cCgxKTtcblxuICAgICAgICAgICAgICAgIGltYWdlcyA9IF9pbWFnZXM7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5sb29wID0gb3B0aW9ucy5sb29wICYmIChpbWFnZXMubGVuZ3RoID4gMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZUltYWdlKHN0YXJ0SW1hZ2UpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgb3B0aW9uczogICAgICAgIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0LCBzZWUgalF1ZXJ5LnNsaW1ib3goKVxuICAgICAgICAgICAgICAgIGxpbmtNYXBwZXI6ICAgICBPcHRpb25hbCBmdW5jdGlvbiB0YWtpbmcgYSBsaW5rIERPTSBlbGVtZW50IGFuZCBhbiBpbmRleCBhcyBhcmd1bWVudHMgYW5kIHJldHVybmluZyBhbiBhcnJheSBjb250YWluaW5nIDIgZWxlbWVudHM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZSBVUkwgYW5kIHRoZSBpbWFnZSBjYXB0aW9uIChtYXkgY29udGFpbiBIVE1MKVxuICAgICAgICAgICAgICAgIGxpbmtzRmlsdGVyOiAgICBPcHRpb25hbCBmdW5jdGlvbiB0YWtpbmcgYSBsaW5rIERPTSBlbGVtZW50IGFuZCBhbiBpbmRleCBhcyBhcmd1bWVudHMgYW5kIHJldHVybmluZyB0cnVlIGlmIHRoZSBlbGVtZW50IGlzIHBhcnQgb2ZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGltYWdlIGNvbGxlY3Rpb24gdGhhdCB3aWxsIGJlIHNob3duIG9uIGNsaWNrLCBmYWxzZSBpZiBub3QuIFwidGhpc1wiIHJlZmVycyB0byB0aGUgZWxlbWVudCB0aGF0IHdhcyBjbGlja2VkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIG11c3QgYWx3YXlzIHJldHVybiB0cnVlIHdoZW4gdGhlIERPTSBlbGVtZW50IGFyZ3VtZW50IGlzIFwidGhpc1wiLlxuICAgICAgICAqL1xuICAgICAgICAkLmZuLnNsaW1ib3ggPSBmdW5jdGlvbihfb3B0aW9ucywgbGlua01hcHBlciwgbGlua3NGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBsaW5rTWFwcGVyID0gbGlua01hcHBlciB8fCBmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtlbC5ocmVmLCBlbC50aXRsZV07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGxpbmtzRmlsdGVyID0gbGlua3NGaWx0ZXIgfHwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIGxpbmtzID0gdGhpcztcblxuICAgICAgICAgICAgICAgIHJldHVybiBsaW5rcy51bmJpbmQoXCJjbGlja1wiKS5jbGljayhmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkIHRoZSBsaXN0IG9mIGltYWdlcyB0aGF0IHdpbGwgYmUgZGlzcGxheWVkXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGluayA9IHRoaXMsIHN0YXJ0SW5kZXggPSAwLCBmaWx0ZXJlZExpbmtzLCBpID0gMCwgbGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRMaW5rcyA9ICQuZ3JlcChsaW5rcywgZnVuY3Rpb24oZWwsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmtzRmlsdGVyLmNhbGwobGluaywgZWwsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbm5vdCB1c2UgalF1ZXJ5Lm1hcCgpIGJlY2F1c2UgaXQgZmxhdHRlbnMgdGhlIHJldHVybmVkIGFycmF5XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxlbmd0aCA9IGZpbHRlcmVkTGlua3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkTGlua3NbaV0gPT0gbGluaykgc3RhcnRJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTGlua3NbaV0gPSBsaW5rTWFwcGVyKGZpbHRlcmVkTGlua3NbaV0sIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5zbGltYm94KGZpbHRlcmVkTGlua3MsIHN0YXJ0SW5kZXgsIF9vcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgSW50ZXJuYWwgZnVuY3Rpb25zXG4gICAgICAgICovXG5cbiAgICAgICAgZnVuY3Rpb24gcG9zaXRpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGwgPSB3aW4uc2Nyb2xsTGVmdCgpLCB3ID0gb3BlcmFGaXggPyBkb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggOiB3aW4ud2lkdGgoKTtcbiAgICAgICAgICAgICAgICAkKFtjZW50ZXIsIGJvdHRvbUNvbnRhaW5lcl0pLmNzcyhcImxlZnRcIiwgbCArICh3IC8gMikpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wYXRpYmxlT3ZlcmxheSkgJChvdmVybGF5KS5jc3Moe2xlZnQ6IGwsIHRvcDogd2luLnNjcm9sbFRvcCgpLCB3aWR0aDogdywgaGVpZ2h0OiB3aW4uaGVpZ2h0KCl9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNldHVwKG9wZW4pIHtcbiAgICAgICAgICAgICAgICAkKFwib2JqZWN0XCIpLmFkZChpZTYgPyBcInNlbGVjdFwiIDogXCJlbWJlZFwiKS5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZW4pICQuZGF0YShlbCwgXCJzbGltYm94XCIsIGVsLnN0eWxlLnZpc2liaWxpdHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUudmlzaWJpbGl0eSA9IG9wZW4gPyBcImhpZGRlblwiIDogJC5kYXRhKGVsLCBcInNsaW1ib3hcIik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdmFyIGZuID0gb3BlbiA/IFwiYmluZFwiIDogXCJ1bmJpbmRcIjtcbiAgICAgICAgICAgICAgICB3aW5bZm5dKFwic2Nyb2xsIHJlc2l6ZVwiLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgJChkb2N1bWVudClbZm5dKFwia2V5ZG93blwiLCBrZXlEb3duKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGtleURvd24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGV2ZW50LmtleUNvZGUsIGZuID0gJC5pbkFycmF5O1xuICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBrZXlib2FyZCBhY3Rpb24gKGxpa2UgbmF2aWdhdGluZyBpbnNpZGUgdGhlIHBhZ2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIChmbihjb2RlLCBvcHRpb25zLmNsb3NlS2V5cykgPj0gMCkgPyBjbG9zZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChmbihjb2RlLCBvcHRpb25zLm5leHRLZXlzKSA+PSAwKSA/IG5leHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAoZm4oY29kZSwgb3B0aW9ucy5wcmV2aW91c0tleXMpID49IDApID8gcHJldmlvdXMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHByZXZpb3VzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VJbWFnZShwcmV2SW1hZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlSW1hZ2UobmV4dEltYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNoYW5nZUltYWdlKGltYWdlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVJbWFnZSA9IGltYWdlSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVVUkwgPSBpbWFnZXNbYWN0aXZlSW1hZ2VdWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldkltYWdlID0gKGFjdGl2ZUltYWdlIHx8IChvcHRpb25zLmxvb3AgPyBpbWFnZXMubGVuZ3RoIDogMCkpIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJbWFnZSA9ICgoYWN0aXZlSW1hZ2UgKyAxKSAlIGltYWdlcy5sZW5ndGgpIHx8IChvcHRpb25zLmxvb3AgPyAwIDogLTEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXIuY2xhc3NOYW1lID0gXCJsYkxvYWRpbmdcIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlbG9hZCA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJlbG9hZC5vbmxvYWQgPSBhbmltYXRlQm94O1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJlbG9hZC5zcmMgPSBhY3RpdmVVUkw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYW5pbWF0ZUJveCgpIHtcbiAgICAgICAgICAgICAgICBjZW50ZXIuY2xhc3NOYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICAkKGltYWdlKS5jc3Moe2JhY2tncm91bmRJbWFnZTogXCJ1cmwoXCIgKyBhY3RpdmVVUkwgKyBcIilcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJcIn0pO1xuICAgICAgICAgICAgICAgICQoc2l6ZXIpLndpZHRoKHByZWxvYWQud2lkdGgpO1xuICAgICAgICAgICAgICAgICQoW3NpemVyLCBwcmV2TGluaywgbmV4dExpbmtdKS5oZWlnaHQocHJlbG9hZC5oZWlnaHQpO1xuXG4gICAgICAgICAgICAgICAgJChjYXB0aW9uKS5odG1sKGltYWdlc1thY3RpdmVJbWFnZV1bMV0gfHwgXCJcIik7XG4gICAgICAgICAgICAgICAgJChudW1iZXIpLmh0bWwoKCgoaW1hZ2VzLmxlbmd0aCA+IDEpICYmIG9wdGlvbnMuY291bnRlclRleHQpIHx8IFwiXCIpLnJlcGxhY2UoL3t4fS8sIGFjdGl2ZUltYWdlICsgMSkucmVwbGFjZSgve3l9LywgaW1hZ2VzLmxlbmd0aCkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHByZXZJbWFnZSA+PSAwKSBwcmVsb2FkUHJldi5zcmMgPSBpbWFnZXNbcHJldkltYWdlXVswXTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dEltYWdlID49IDApIHByZWxvYWROZXh0LnNyYyA9IGltYWdlc1tuZXh0SW1hZ2VdWzBdO1xuXG4gICAgICAgICAgICAgICAgY2VudGVyV2lkdGggPSBpbWFnZS5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICBjZW50ZXJIZWlnaHQgPSBpbWFnZS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgdmFyIHRvcCA9IE1hdGgubWF4KDAsIG1pZGRsZSAtIChjZW50ZXJIZWlnaHQgLyAyKSk7XG4gICAgICAgICAgICAgICAgaWYgKGNlbnRlci5vZmZzZXRIZWlnaHQgIT0gY2VudGVySGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKGNlbnRlcikuYW5pbWF0ZSh7aGVpZ2h0OiBjZW50ZXJIZWlnaHQsIHRvcDogdG9wfSwgb3B0aW9ucy5yZXNpemVEdXJhdGlvbiwgb3B0aW9ucy5yZXNpemVFYXNpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2VudGVyLm9mZnNldFdpZHRoICE9IGNlbnRlcldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKGNlbnRlcikuYW5pbWF0ZSh7d2lkdGg6IGNlbnRlcldpZHRoLCBtYXJnaW5MZWZ0OiAtY2VudGVyV2lkdGgvMn0sIG9wdGlvbnMucmVzaXplRHVyYXRpb24sIG9wdGlvbnMucmVzaXplRWFzaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJChjZW50ZXIpLnF1ZXVlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJChib3R0b21Db250YWluZXIpLmNzcyh7d2lkdGg6IGNlbnRlcldpZHRoLCB0b3A6IHRvcCArIGNlbnRlckhlaWdodCwgbWFyZ2luTGVmdDogLWNlbnRlcldpZHRoLzIsIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsIGRpc3BsYXk6IFwiXCJ9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoaW1hZ2UpLmNzcyh7ZGlzcGxheTogXCJub25lXCIsIHZpc2liaWxpdHk6IFwiXCIsIG9wYWNpdHk6IFwiXCJ9KS5mYWRlSW4ob3B0aW9ucy5pbWFnZUZhZGVEdXJhdGlvbiwgYW5pbWF0ZUNhcHRpb24pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cblxuICAgICAgICBmdW5jdGlvbiBhbmltYXRlQ2FwdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldkltYWdlID49IDApICQocHJldkxpbmspLnNob3coKTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dEltYWdlID49IDApICQobmV4dExpbmspLnNob3coKTtcbiAgICAgICAgICAgICAgICAkKGJvdHRvbSkuY3NzKFwibWFyZ2luVG9wXCIsIC1ib3R0b20ub2Zmc2V0SGVpZ2h0KS5hbmltYXRlKHttYXJnaW5Ub3A6IDB9LCBvcHRpb25zLmNhcHRpb25BbmltYXRpb25EdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgYm90dG9tQ29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHkgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgICAgICAgICAgICBwcmVsb2FkLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgcHJlbG9hZC5zcmMgPSBwcmVsb2FkUHJldi5zcmMgPSBwcmVsb2FkTmV4dC5zcmMgPSBhY3RpdmVVUkw7XG4gICAgICAgICAgICAgICAgJChbY2VudGVyLCBpbWFnZSwgYm90dG9tXSkuc3RvcCh0cnVlKTtcbiAgICAgICAgICAgICAgICAkKFtwcmV2TGluaywgbmV4dExpbmssIGltYWdlLCBib3R0b21Db250YWluZXJdKS5oaWRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlSW1hZ2UgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlSW1hZ2UgPSBwcmV2SW1hZ2UgPSBuZXh0SW1hZ2UgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoY2VudGVyKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKG92ZXJsYXkpLnN0b3AoKS5mYWRlT3V0KG9wdGlvbnMub3ZlcmxheUZhZGVEdXJhdGlvbiwgc2V0dXApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG59KShqUXVlcnkpO1xuLypcbiAqIHRpbWVhZ286IGEgalF1ZXJ5IHBsdWdpbiwgdmVyc2lvbjogMC41LjEgKDA4LzIwLzIwMDgpXG4gKiBAcmVxdWlyZXMgalF1ZXJ5IHYxLjIgb3IgbGF0ZXJcbiAqXG4gKiBUaW1lYWdvIGlzIGEgalF1ZXJ5IHBsdWdpbiB0aGF0IG1ha2VzIGl0IGVhc3kgdG8gc3VwcG9ydCBhdXRvbWF0aWNhbGx5XG4gKiB1cGRhdGluZyBmdXp6eSB0aW1lc3RhbXBzIChlLmcuIFwiNCBtaW51dGVzIGFnb1wiIG9yIFwiYWJvdXQgMSBkYXkgYWdvXCIpLlxuICpcbiAqIEZvciB1c2FnZSBhbmQgZXhhbXBsZXMsIHZpc2l0OlxuICogaHR0cDovL3RpbWVhZ28ueWFycC5jb20vXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVDpcbiAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDA4LCBSeWFuIE1jR2VhcnkgKHJ5YW5vbmphdmFzY3JpcHQgLVthdF0tIG1jZ2VhcnkgWypkb3QqXSBvcmcpXG4gKi9cbihmdW5jdGlvbigkKSB7XG4gICQudGltZWFnbyA9IGZ1bmN0aW9uKHRpbWVzdGFtcCkge1xuICAgIGlmICh0aW1lc3RhbXAgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gaW5Xb3Jkcyh0aW1lc3RhbXApO1xuICAgIGVsc2UgaWYgKHR5cGVvZiB0aW1lc3RhbXAgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGluV29yZHMoJC50aW1lYWdvLnBhcnNlKHRpbWVzdGFtcCkpO1xuICAgIGVsc2UgcmV0dXJuIGluV29yZHMoJC50aW1lYWdvLnBhcnNlKCQodGltZXN0YW1wKS5hdHRyKFwidGl0bGVcIikpKTtcbiAgfTtcbiAgdmFyICR0ID0gJC50aW1lYWdvO1xuXG4gICQuZXh0ZW5kKCQudGltZWFnbywge1xuICAgIHNldHRpbmdzOiB7XG4gICAgICByZWZyZXNoTWlsbGlzOiA2MDAwMCxcbiAgICAgIGFsbG93RnV0dXJlOiBmYWxzZSxcbiAgICAgIHN0cmluZ3M6IHtcbiAgICAgICAgYWdvOiBcImFnb1wiLFxuICAgICAgICBmcm9tTm93OiBcImZyb20gbm93XCIsXG4gICAgICAgIHNlY29uZHM6IFwibGVzcyB0aGFuIGEgbWludXRlXCIsXG4gICAgICAgIG1pbnV0ZTogXCJhYm91dCBhIG1pbnV0ZVwiLFxuICAgICAgICBtaW51dGVzOiBcIiVkIG1pbnV0ZXNcIixcbiAgICAgICAgaG91cjogXCJhYm91dCBhbiBob3VyXCIsXG4gICAgICAgIGhvdXJzOiBcImFib3V0ICVkIGhvdXJzXCIsXG4gICAgICAgIGRheTogXCJhIGRheVwiLFxuICAgICAgICBkYXlzOiBcIiVkIGRheXNcIixcbiAgICAgICAgbW9udGg6IFwiYWJvdXQgYSBtb250aFwiLFxuICAgICAgICBtb250aHM6IFwiJWQgbW9udGhzXCIsXG4gICAgICAgIHllYXI6IFwiYWJvdXQgYSB5ZWFyXCIsXG4gICAgICAgIHllYXJzOiBcIiVkIHllYXJzXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIGluV29yZHM6IGZ1bmN0aW9uKGRpc3RhbmNlTWlsbGlzKSB7XG4gICAgICB2YXIgJGwgPSB0aGlzLnNldHRpbmdzLnN0cmluZ3M7XG4gICAgICB2YXIgc3VmZml4ID0gJGwuYWdvO1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYWxsb3dGdXR1cmUpIHtcbiAgICAgICAgaWYgKGRpc3RhbmNlTWlsbGlzIDwgMCkgc3VmZml4ID0gJGwuZnJvbU5vdztcbiAgICAgICAgZGlzdGFuY2VNaWxsaXMgPSBNYXRoLmFicyhkaXN0YW5jZU1pbGxpcyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWNvbmRzID0gZGlzdGFuY2VNaWxsaXMgLyAxMDAwO1xuICAgICAgdmFyIG1pbnV0ZXMgPSBzZWNvbmRzIC8gNjA7XG4gICAgICB2YXIgaG91cnMgPSBtaW51dGVzIC8gNjA7XG4gICAgICB2YXIgZGF5cyA9IGhvdXJzIC8gMjQ7XG4gICAgICB2YXIgeWVhcnMgPSBkYXlzIC8gMzY1O1xuXG4gICAgICB2YXIgd29yZHMgPSBzZWNvbmRzIDwgNDUgJiYgc3ByaW50ZigkbC5zZWNvbmRzLCBNYXRoLnJvdW5kKHNlY29uZHMpKSB8fFxuICAgICAgICBzZWNvbmRzIDwgOTAgJiYgJGwubWludXRlIHx8XG4gICAgICAgIG1pbnV0ZXMgPCA0NSAmJiBzcHJpbnRmKCRsLm1pbnV0ZXMsIE1hdGgucm91bmQobWludXRlcykpIHx8XG4gICAgICAgIG1pbnV0ZXMgPCA5MCAmJiAkbC5ob3VyIHx8XG4gICAgICAgIGhvdXJzIDwgMjQgJiYgc3ByaW50ZigkbC5ob3VycywgTWF0aC5yb3VuZChob3VycykpIHx8XG4gICAgICAgIGhvdXJzIDwgNDggJiYgJGwuZGF5IHx8XG4gICAgICAgIGRheXMgPCAzMCAmJiBzcHJpbnRmKCRsLmRheXMsIE1hdGguZmxvb3IoZGF5cykpIHx8XG4gICAgICAgIGRheXMgPCA2MCAmJiAkbC5tb250aCB8fFxuICAgICAgICBkYXlzIDwgMzY1ICYmIHNwcmludGYoJGwubW9udGhzLCBNYXRoLmZsb29yKGRheXMgLyAzMCkpIHx8XG4gICAgICAgIHllYXJzIDwgMiAmJiAkbC55ZWFyIHx8XG4gICAgICAgIHNwcmludGYoJGwueWVhcnMsIE1hdGguZmxvb3IoeWVhcnMpKTtcblxuICAgICAgcmV0dXJuIHdvcmRzICsgXCIgXCIgKyBzdWZmaXg7XG4gICAgfSxcbiAgICBwYXJzZTogZnVuY3Rpb24oaXNvODYwMSkge1xuICAgICAgdmFyIHMgPSAkLnRyaW0oaXNvODYwMSk7XG4gICAgICBzID0gcy5yZXBsYWNlKC8tLyxcIi9cIikucmVwbGFjZSgvLS8sXCIvXCIpO1xuICAgICAgcyA9IHMucmVwbGFjZSgvVC8sXCIgXCIpLnJlcGxhY2UoL1ovLFwiIFVUQ1wiKTtcbiAgICAgIHMgPSBzLnJlcGxhY2UoLyhbXFwrLV1cXGRcXGQpXFw6PyhcXGRcXGQpLyxcIiAkMSQyXCIpOyAvLyAtMDQ6MDAgLT4gLTA0MDBcbiAgICAgIHJldHVybiBuZXcgRGF0ZShzKTtcbiAgICB9XG4gIH0pO1xuXG4gICQuZm4udGltZWFnbyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBzZWxmLmVhY2gocmVmcmVzaCk7XG5cbiAgICB2YXIgJHMgPSAkdC5zZXR0aW5ncztcbiAgICBpZiAoJHMucmVmcmVzaE1pbGxpcyA+IDApIHtcbiAgICAgIHNldEludGVydmFsKGZ1bmN0aW9uKCkgeyBzZWxmLmVhY2gocmVmcmVzaCk7IH0sICRzLnJlZnJlc2hNaWxsaXMpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICBmdW5jdGlvbiByZWZyZXNoKCkge1xuICAgIHZhciBkYXRlID0gJHQucGFyc2UodGhpcy50aXRsZSk7XG4gICAgaWYgKCFpc05hTihkYXRlKSkge1xuICAgICAgJCh0aGlzKS50ZXh0KGluV29yZHMoZGF0ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGluV29yZHMoZGF0ZSkge1xuICAgIHJldHVybiAkdC5pbldvcmRzKGRpc3RhbmNlKGRhdGUpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc3RhbmNlKGRhdGUpIHtcbiAgICByZXR1cm4gKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gZGF0ZS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgLy8gbGFtZSBzcHJpbnRmIGltcGxlbWVudGF0aW9uXG4gIGZ1bmN0aW9uIHNwcmludGYoc3RyaW5nLCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvJWQvaSwgdmFsdWUpO1xuICB9XG5cbiAgLy8gZml4IGZvciBJRTYgc3Vja2FnZVxuICBpZiAoJC5icm93c2VyLm1zaWUgJiYgJC5icm93c2VyLnZlcnNpb24gPCA3LjApIHtcbiAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhYmJyJyk7XG4gIH1cbn0pKGpRdWVyeSk7XG5cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS51dGlscy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkudXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gIGpRdWVyeSB1dGlscyAtIDAuOC41XHJcbiAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2pxdWVyeS11dGlscy9cclxuXHJcbiAgKGMpIE1heGltZSBIYWluZWF1bHQgPGhhaW5lYXVsdEBnbWFpbC5jb20+IFxyXG4gIGh0dHA6Ly9oYWluZWF1bHQuY29tXHJcblxyXG4gIE1JVCBMaWNlbnNlIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxyXG5cclxuKi9cclxuXHJcbihmdW5jdGlvbigkKXtcclxuICAgICAkLmV4dGVuZCgkLmV4cHJbJzonXSwge1xyXG4gICAgICAgIC8vIGNhc2UgaW5zZW5zaXRpdmUgdmVyc2lvbiBvZiA6Y29udGFpbnNcclxuICAgICAgICBpY29udGFpbnM6IGZ1bmN0aW9uKGEsaSxtKXtyZXR1cm4gKGEudGV4dENvbnRlbnR8fGEuaW5uZXJUZXh0fHxqUXVlcnkoYSkudGV4dCgpfHxcIlwiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YobVszXS50b0xvd2VyQ2FzZSgpKT49MDt9XHJcbiAgICB9KTtcclxuXHJcbiAgICAkLml0ZXJhdG9ycyA9IHtcclxuICAgICAgICBnZXRUZXh0OiAgZnVuY3Rpb24oKSB7IHJldHVybiAkKHRoaXMpLnRleHQoKTsgfSxcclxuICAgICAgICBwYXJzZUludDogZnVuY3Rpb24odil7IHJldHVybiBwYXJzZUludCh2LCAxMCk7IH1cclxuICAgIH07XHJcblxyXG5cdCQuZXh0ZW5kKHsgXHJcblxyXG4gICAgICAgIC8vIFJldHVybnMgYSByYW5nZSBvYmplY3RcclxuICAgICAgICAvLyBBdXRob3I6IE1hdHRoaWFzIE1pbGxlclxyXG4gICAgICAgIC8vIFNpdGU6ICAgaHR0cDovL2Jsb2cub3V0b2ZoYW53ZWxsLmNvbS8yMDA2LzAzLzI5L2phdmFzY3JpcHQtcmFuZ2UtZnVuY3Rpb24vXHJcbiAgICAgICAgcmFuZ2U6ICBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7IHJldHVybiBbXTsgfVxyXG4gICAgICAgICAgICB2YXIgbWluLCBtYXgsIHN0ZXA7XHJcbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgIG1pbiAgPSAwO1xyXG4gICAgICAgICAgICAgICAgbWF4ICA9IGFyZ3VtZW50c1swXS0xO1xyXG4gICAgICAgICAgICAgICAgc3RlcCA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHN0ZXAgdG8gMSBpZiBpdCdzIHplcm8gb3IgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICBtaW4gID0gYXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICAgICAgbWF4ICA9IGFyZ3VtZW50c1sxXS0xO1xyXG4gICAgICAgICAgICAgICAgc3RlcCA9IGFyZ3VtZW50c1syXSB8fCAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgbmVnYXRpdmUgc3RlcHMgdG8gcG9zaXRpdmUgYW5kIHJldmVyc2UgbWluL21heFxyXG4gICAgICAgICAgICBpZiAoc3RlcCA8IDAgJiYgbWluID49IG1heCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcCAqPSAtMTtcclxuICAgICAgICAgICAgICAgIHZhciB0bXAgPSBtaW47XHJcbiAgICAgICAgICAgICAgICBtaW4gPSBtYXg7XHJcbiAgICAgICAgICAgICAgICBtYXggPSB0bXA7XHJcbiAgICAgICAgICAgICAgICBtaW4gKz0gKChtYXgtbWluKSAlIHN0ZXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBhID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBtaW47IGkgPD0gbWF4OyBpICs9IHN0ZXApIHsgYS5wdXNoKGkpOyB9XHJcbiAgICAgICAgICAgIHJldHVybiBhO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8vIFRha2VuIGZyb20gdWkuY29yZS5qcy4gXHJcbiAgICAgICAgLy8gV2h5IGFyZSB5b3Uga2VlcGluZyB0aGlzIGdlbSBmb3IgeW91cnNlbGYgZ3V5cyA/IDp8XHJcbiAgICAgICAga2V5Q29kZToge1xyXG4gICAgICAgICAgICBCQUNLU1BBQ0U6IDgsIENBUFNfTE9DSzogMjAsIENPTU1BOiAxODgsIENPTlRST0w6IDE3LCBERUxFVEU6IDQ2LCBET1dOOiA0MCxcclxuICAgICAgICAgICAgRU5EOiAzNSwgRU5URVI6IDEzLCBFU0NBUEU6IDI3LCBIT01FOiAzNiwgSU5TRVJUOiAgNDUsIExFRlQ6IDM3LFxyXG4gICAgICAgICAgICBOVU1QQURfQUREOiAxMDcsIE5VTVBBRF9ERUNJTUFMOiAxMTAsIE5VTVBBRF9ESVZJREU6IDExMSwgTlVNUEFEX0VOVEVSOiAxMDgsIFxyXG4gICAgICAgICAgICBOVU1QQURfTVVMVElQTFk6IDEwNiwgTlVNUEFEX1NVQlRSQUNUOiAxMDksIFBBR0VfRE9XTjogMzQsIFBBR0VfVVA6IDMzLCBcclxuICAgICAgICAgICAgUEVSSU9EOiAxOTAsIFJJR0hUOiAzOSwgU0hJRlQ6IDE2LCBTUEFDRTogMzIsIFRBQjogOSwgVVA6IDM4XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcclxuICAgICAgICAvLyBUYWtlcyBhIGtleWJvYXJkIGV2ZW50IGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGUga2V5Y29kZSBtYXRjaCB0aGUgc3BlY2lmaWVkIGtleWNvZGVcclxuICAgICAgICBrZXlJczogZnVuY3Rpb24oaywgZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoJC5rZXlDb2RlW2sudG9VcHBlckNhc2UoKV0sIDEwKSA9PSBwYXJzZUludCgodHlwZW9mKGUpID09ICdudW1iZXInICk/IGU6IGUua2V5Q29kZSwgMTApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gUmV0dXJucyB0aGUga2V5IG9mIGFuIGFycmF5XHJcbiAgICAgICAga2V5czogZnVuY3Rpb24oYXJyKSB7XHJcbiAgICAgICAgICAgIHZhciBvID0gW107XHJcbiAgICAgICAgICAgIGZvciAoayBpbiBhcnIpIHsgby5wdXNoKGspOyB9XHJcbiAgICAgICAgICAgIHJldHVybiBvO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8vIFJlZGlyZWN0IHRvIGEgc3BlY2lmaWVkIHVybFxyXG4gICAgICAgIHJlZGlyZWN0OiBmdW5jdGlvbih1cmwpIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgICAgIHJldHVybiB1cmw7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLy8gU3RvcCBldmVudCBzaG9ydGhhbmRcclxuICAgICAgICBzdG9wOiBmdW5jdGlvbihlLCBwcmV2ZW50RGVmYXVsdCwgc3RvcFByb3BhZ2F0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmIChwcmV2ZW50RGVmYXVsdCkgIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyB9XHJcbiAgICAgICAgICAgIGlmIChzdG9wUHJvcGFnYXRpb24pIHsgZS5zdG9wUHJvcGFnYXRpb24oKTsgfVxyXG4gICAgICAgICAgICByZXR1cm4gcHJldmVudERlZmF1bHQgJiYgZmFsc2UgfHwgdHJ1ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvLyBSZXR1cm5zIHRoZSBiYXNlbmFtZSBvZiBhIHBhdGhcclxuICAgICAgICBiYXNlbmFtZTogZnVuY3Rpb24ocGF0aCkge1xyXG4gICAgICAgICAgICB2YXIgdCA9IHBhdGguc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRbdC5sZW5ndGhdID09PSAnJyAmJiBzIHx8IHQuc2xpY2UoMCwgdC5sZW5ndGgpLmpvaW4oJy8nKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvLyBSZXR1cm5zIHRoZSBmaWxlbmFtZSBvZiBhIHBhdGhcclxuICAgICAgICBmaWxlbmFtZTogZnVuY3Rpb24ocGF0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGF0aC5zcGxpdCgnLycpLnBvcCgpO1xyXG4gICAgICAgIH0sIFxyXG5cclxuICAgICAgICAvLyBSZXR1cm5zIGEgZm9ybWF0ZWQgZmlsZSBzaXplXHJcbiAgICAgICAgZmlsZXNpemVmb3JtYXQ6IGZ1bmN0aW9uKGJ5dGVzLCBzdWZmaXhlcyl7XHJcbiAgICAgICAgICAgIHZhciBiID0gcGFyc2VJbnQoYnl0ZXMsIDEwKTtcclxuICAgICAgICAgICAgdmFyIHMgPSBzdWZmaXhlcyB8fCBbJ2J5dGUnLCAnYnl0ZXMnLCAnS0InLCAnTUInLCAnR0InXTtcclxuICAgICAgICAgICAgaWYgKGlzTmFOKGIpIHx8IGIgPT09IDApIHsgcmV0dXJuICcwICcgKyBzWzBdOyB9XHJcbiAgICAgICAgICAgIGlmIChiID09IDEpICAgICAgICAgICAgICB7IHJldHVybiAnMSAnICsgc1swXTsgfVxyXG4gICAgICAgICAgICBpZiAoYiA8IDEwMjQpICAgICAgICAgICAgeyByZXR1cm4gIGIudG9GaXhlZCgyKSArICcgJyArIHNbMV07IH1cclxuICAgICAgICAgICAgaWYgKGIgPCAxMDQ4NTc2KSAgICAgICAgIHsgcmV0dXJuIChiIC8gMTAyNCkudG9GaXhlZCgyKSArICcgJyArIHNbMl07IH1cclxuICAgICAgICAgICAgaWYgKGIgPCAxMDczNzQxODI0KSAgICAgIHsgcmV0dXJuIChiIC8gMTA0ODU3NikudG9GaXhlZCgyKSArICcgJysgc1szXTsgfVxyXG4gICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gKGIgLyAxMDczNzQxODI0KS50b0ZpeGVkKDIpICsgJyAnKyBzWzRdOyB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgZmlsZUV4dGVuc2lvbjogZnVuY3Rpb24ocykge1xyXG4gICAgICAgICAgICB2YXIgdG9rZW5zID0gcy5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICByZXR1cm4gdG9rZW5zW3Rva2Vucy5sZW5ndGgtMV0gfHwgZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcclxuICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW4gb2JqZWN0IGlzIGEgU3RyaW5nXHJcbiAgICAgICAgaXNTdHJpbmc6IGZ1bmN0aW9uKG8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZihvKSA9PSAnc3RyaW5nJyAmJiB0cnVlIHx8IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFuIG9iamVjdCBpcyBhIFJlZ0V4cFxyXG5cdFx0aXNSZWdFeHA6IGZ1bmN0aW9uKG8pIHtcclxuXHRcdFx0cmV0dXJuIG8gJiYgby5jb25zdHJ1Y3Rvci50b1N0cmluZygpLmluZGV4T2YoJ1JlZ0V4cCgpJykgIT0gLTEgfHwgZmFsc2U7XHJcblx0XHR9LFxyXG5cclxuICAgICAgICBpc09iamVjdDogZnVuY3Rpb24obykge1xyXG4gICAgICAgICAgICByZXR1cm4gKHR5cGVvZihvKSA9PSAnb2JqZWN0Jyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcclxuICAgICAgICAvLyBDb252ZXJ0IGlucHV0IHRvIGN1cnJlbmN5ICh0d28gZGVjaW1hbCBmaXhlZCBudW1iZXIpXHJcblx0XHR0b0N1cnJlbmN5OiBmdW5jdGlvbihpKSB7XHJcblx0XHRcdGkgPSBwYXJzZUZsb2F0KGksIDEwKS50b0ZpeGVkKDIpO1xyXG5cdFx0XHRyZXR1cm4gKGk9PSdOYU4nKSA/ICcwLjAwJyA6IGk7XHJcblx0XHR9LFxyXG5cclxuICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFxyXG4gICAgICAgICAqIGphdmFzY3JpcHQgbWV0aG9kOiBcInB4VG9FbVwiXHJcbiAgICAgICAgICogYnk6XHJcbiAgICAgICAgICAgU2NvdHQgSmVobCAoc2NvdHRAZmlsYW1lbnRncm91cC5jb20pIFxyXG4gICAgICAgICAgIE1hZ2dpZSBXYWNocyAobWFnZ2llQGZpbGFtZW50Z3JvdXAuY29tKVxyXG4gICAgICAgICAgIGh0dHA6Ly93d3cuZmlsYW1lbnRncm91cC5jb21cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIENvcHlyaWdodCAoYykgMjAwOCBGaWxhbWVudCBHcm91cFxyXG4gICAgICAgICAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCAoZmlsYW1lbnRncm91cC5jb20vZXhhbXBsZXMvbWl0LWxpY2Vuc2UudHh0KSBhbmQgR1BMIChmaWxhbWVudGdyb3VwLmNvbS9leGFtcGxlcy9ncGwtbGljZW5zZS50eHQpIGxpY2Vuc2VzLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogRGVzY3JpcHRpb246IHB4VG9FbSBjb252ZXJ0cyBhIHBpeGVsIHZhbHVlIHRvIGVtcyBkZXBlbmRpbmcgb24gaW5oZXJpdGVkIGZvbnQgc2l6ZS4gIFxyXG4gICAgICAgICAqIEFydGljbGU6IGh0dHA6Ly93d3cuZmlsYW1lbnRncm91cC5jb20vbGFiL3JldGFpbmluZ19zY2FsYWJsZV9pbnRlcmZhY2VzX3dpdGhfcGl4ZWxfdG9fZW1fY29udmVyc2lvbi9cclxuICAgICAgICAgKiBEZW1vOiBodHRwOi8vd3d3LmZpbGFtZW50Z3JvdXAuY29tL2V4YW1wbGVzL3B4VG9FbS9cdCBcdFxyXG4gICAgICAgICAqXHRcdFx0XHRcdFx0XHRcclxuICAgICAgICAgKiBPcHRpb25zOiAgXHQgXHRcdFx0XHRcdFx0XHRcdFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHN0cmluZyBvciBqUXVlcnkgc2VsZWN0b3IgZm9yIGZvbnQtc2l6ZSBzY29waW5nXHJcbiAgICAgICAgICAgICAgICByZXZlcnNlOiBCb29sZWFuLCB0cnVlIHJldmVyc2VzIHRoZSBjb252ZXJzaW9uIHRvIGVtLXB4XHJcbiAgICAgICAgICogRGVwZW5kZW5jaWVzOiBqUXVlcnkgbGlicmFyeVx0XHRcdFx0XHRcdCAgXHJcbiAgICAgICAgICogVXNhZ2UgRXhhbXBsZTogbXlQaXhlbFZhbHVlLnB4VG9FbSgpOyBvciBteVBpeGVsVmFsdWUucHhUb0VtKHsnc2NvcGUnOicjbmF2aWdhdGlvbicsIHJldmVyc2U6IHRydWV9KTtcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFZlcnNpb246IDIuMSwgMTguMTIuMjAwOFxyXG4gICAgICAgICAqIENoYW5nZWxvZzpcclxuICAgICAgICAgKlx0XHQwOC4wMi4yMDA3IGluaXRpYWwgVmVyc2lvbiAxLjBcclxuICAgICAgICAgKlx0XHQwOC4wMS4yMDA4IC0gZml4ZWQgZm9udC1zaXplIGNhbGN1bGF0aW9uIGZvciBJRVxyXG4gICAgICAgICAqXHRcdDE4LjEyLjIwMDggLSByZW1vdmVkIG5hdGl2ZSBvYmplY3QgcHJvdG90eXBpbmcgdG8gc3RheSBpbiBqUXVlcnkncyBzcGlyaXQsIGpzTGludGVkIChNYXhpbWUgSGFpbmVhdWx0IDxoYWluZWF1bHRAZ21haWwuY29tPilcclxuICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4gICAgICAgIHB4VG9FbTogZnVuY3Rpb24oaSwgc2V0dGluZ3Mpe1xyXG4gICAgICAgICAgICAvL3NldCBkZWZhdWx0c1xyXG4gICAgICAgICAgICBzZXR0aW5ncyA9IGpRdWVyeS5leHRlbmQoe1xyXG4gICAgICAgICAgICAgICAgc2NvcGU6ICdib2R5JyxcclxuICAgICAgICAgICAgICAgIHJldmVyc2U6IGZhbHNlXHJcbiAgICAgICAgICAgIH0sIHNldHRpbmdzKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBweFZhbCA9IChpID09PSAnJykgPyAwIDogcGFyc2VGbG9hdChpKTtcclxuICAgICAgICAgICAgdmFyIHNjb3BlVmFsO1xyXG4gICAgICAgICAgICB2YXIgZ2V0V2luZG93V2lkdGggPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGRlID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5uZXJXaWR0aCB8fCAoZGUgJiYgZGUuY2xpZW50V2lkdGgpIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7XHJcbiAgICAgICAgICAgIH07XHRcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qIFdoZW4gYSBwZXJjZW50YWdlLWJhc2VkIGZvbnQtc2l6ZSBpcyBzZXQgb24gdGhlIGJvZHksIElFIHJldHVybnMgdGhhdCBwZXJjZW50IG9mIHRoZSB3aW5kb3cgd2lkdGggYXMgdGhlIGZvbnQtc2l6ZS4gXHJcbiAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIGJvZHkgZm9udC1zaXplIGlzIDYyLjUlIGFuZCB0aGUgd2luZG93IHdpZHRoIGlzIDEwMDBweCwgSUUgd2lsbCByZXR1cm4gNjI1cHggYXMgdGhlIGZvbnQtc2l6ZS4gXHRcclxuICAgICAgICAgICAgICAgIFdoZW4gdGhpcyBoYXBwZW5zLCB3ZSBjYWxjdWxhdGUgdGhlIGNvcnJlY3QgYm9keSBmb250LXNpemUgKCUpIGFuZCBtdWx0aXBseSBpdCBieSAxNiAodGhlIHN0YW5kYXJkIGJyb3dzZXIgZm9udCBzaXplKSBcclxuICAgICAgICAgICAgICAgIHRvIGdldCBhbiBhY2N1cmF0ZSBlbSB2YWx1ZS4gKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5zY29wZSA9PSAnYm9keScgJiYgJC5icm93c2VyLm1zaWUgJiYgKHBhcnNlRmxvYXQoJCgnYm9keScpLmNzcygnZm9udC1zaXplJykpIC8gZ2V0V2luZG93V2lkdGgoKSkudG9GaXhlZCgxKSA+IDAuMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNhbGNGb250U2l6ZSA9IGZ1bmN0aW9uKCl7XHRcdFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAocGFyc2VGbG9hdCgkKCdib2R5JykuY3NzKCdmb250LXNpemUnKSkvZ2V0V2luZG93V2lkdGgoKSkudG9GaXhlZCgzKSAqIDE2O1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHNjb3BlVmFsID0gY2FsY0ZvbnRTaXplKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7IHNjb3BlVmFsID0gcGFyc2VGbG9hdChqUXVlcnkoc2V0dGluZ3Muc2NvcGUpLmNzcyhcImZvbnQtc2l6ZVwiKSk7IH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IChzZXR0aW5ncy5yZXZlcnNlID09PSB0cnVlKSA/IChweFZhbCAqIHNjb3BlVmFsKS50b0ZpeGVkKDIpICsgJ3B4JyA6IChweFZhbCAvIHNjb3BlVmFsKS50b0ZpeGVkKDIpICsgJ2VtJztcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcblx0fSk7XHJcblxyXG5cdCQuZXh0ZW5kKCQuZm4sIHsgXHJcbiAgICAgICAgdHlwZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHRyeSB7IHJldHVybiAkKHRoaXMpLmdldCgwKS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyB9XHJcbiAgICAgICAgICAgIGNhdGNoKGUpIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBTZWxlY3QgYSB0ZXh0IHJhbmdlIGluIGEgdGV4dGFyZWFcclxuICAgICAgICBzZWxlY3RSYW5nZTogZnVuY3Rpb24oc3RhcnQsIGVuZCl7XHJcbiAgICAgICAgICAgIC8vIHVzZSBvbmx5IHRoZSBmaXJzdCBvbmUgc2luY2Ugb25seSBvbmUgaW5wdXQgY2FuIGJlIGZvY3VzZWRcclxuICAgICAgICAgICAgaWYgKCQodGhpcykuZ2V0KDApLmNyZWF0ZVRleHRSYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gJCh0aGlzKS5nZXQoMCkuY3JlYXRlVGV4dFJhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsICAgZW5kKTtcclxuICAgICAgICAgICAgICAgIHJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoJCh0aGlzKS5nZXQoMCkuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgICQodGhpcykuYmluZCgnZm9jdXMnLCBmdW5jdGlvbihlKXtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB9KS5nZXQoMCkuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICQodGhpcyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBcclxuICAgICAgICAgKiBKUXVlcnkgUGx1Z2luOiBcIkVxdWFsSGVpZ2h0c1wiXHJcbiAgICAgICAgICogYnk6XHRTY290dCBKZWhsLCBUb2RkIFBhcmtlciwgTWFnZ2llIENvc3RlbGxvIFdhY2hzIChodHRwOi8vd3d3LmZpbGFtZW50Z3JvdXAuY29tKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQ29weXJpZ2h0IChjKSAyMDA4IEZpbGFtZW50IEdyb3VwXHJcbiAgICAgICAgICogTGljZW5zZWQgdW5kZXIgR1BMIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLnBocClcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIERlc2NyaXB0aW9uOiBDb21wYXJlcyB0aGUgaGVpZ2h0cyBvciB3aWR0aHMgb2YgdGhlIHRvcC1sZXZlbCBjaGlsZHJlbiBvZiBhIHByb3ZpZGVkIGVsZW1lbnQgXHJcbiAgICAgICAgICAgICAgICBhbmQgc2V0cyB0aGVpciBtaW4taGVpZ2h0IHRvIHRoZSB0YWxsZXN0IGhlaWdodCAob3Igd2lkdGggdG8gd2lkZXN0IHdpZHRoKS4gU2V0cyBpbiBlbSB1bml0cyBcclxuICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgaWYgcHhUb0VtKCkgbWV0aG9kIGlzIGF2YWlsYWJsZS5cclxuICAgICAgICAgKiBEZXBlbmRlbmNpZXM6IGpRdWVyeSBsaWJyYXJ5LCBweFRvRW0gbWV0aG9kXHQoYXJ0aWNsZTogXHJcbiAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmZpbGFtZW50Z3JvdXAuY29tL2xhYi9yZXRhaW5pbmdfc2NhbGFibGVfaW50ZXJmYWNlc193aXRoX3BpeGVsX3RvX2VtX2NvbnZlcnNpb24vKVx0XHRcdFx0XHRcdFx0ICBcclxuICAgICAgICAgKiBVc2FnZSBFeGFtcGxlOiAkKGVsZW1lbnQpLmVxdWFsSGVpZ2h0cygpO1xyXG4gICAgICAgICAgICAgICAgT3B0aW9uYWw6IHRvIHNldCBtaW4taGVpZ2h0IGluIHB4LCBwYXNzIGEgdHJ1ZSBhcmd1bWVudDogJChlbGVtZW50KS5lcXVhbEhlaWdodHModHJ1ZSk7XHJcbiAgICAgICAgICogVmVyc2lvbjogMi4xLCAxOC4xMi4yMDA4XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBOb3RlOiBDaGFuZ2VkIHB4VG9FbSBjYWxsIHRvIGNhbGwgJC5weFRvRW0gaW5zdGVhZCwganNMaW50ZWQgKE1heGltZSBIYWluZWF1bHQgPGhhaW5lYXVsdEBnbWFpbC5jb20+KVxyXG4gICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgICAgICAgZXF1YWxIZWlnaHRzOiBmdW5jdGlvbihweCl7XHJcbiAgICAgICAgICAgICQodGhpcykuZWFjaChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRUYWxsZXN0ID0gMDtcclxuICAgICAgICAgICAgICAgICQodGhpcykuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKGkpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmhlaWdodCgpID4gY3VycmVudFRhbGxlc3QpIHsgY3VycmVudFRhbGxlc3QgPSAkKHRoaXMpLmhlaWdodCgpOyB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmICghcHggfHwgISQucHhUb0VtKSB7IGN1cnJlbnRUYWxsZXN0ID0gJC5weFRvRW0oY3VycmVudFRhbGxlc3QpOyB9IC8vdXNlIGVtcyB1bmxlc3MgcHggaXMgc3BlY2lmaWVkXHJcbiAgICAgICAgICAgICAgICAvLyBmb3IgaWU2LCBzZXQgaGVpZ2h0IHNpbmNlIG1pbi1oZWlnaHQgaXNuJ3Qgc3VwcG9ydGVkXHJcbiAgICAgICAgICAgICAgICBpZiAoJC5icm93c2VyLm1zaWUgJiYgJC5icm93c2VyLnZlcnNpb24gPT0gNi4wKSB7ICQodGhpcykuY2hpbGRyZW4oKS5jc3MoeydoZWlnaHQnOiBjdXJyZW50VGFsbGVzdH0pOyB9XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmNoaWxkcmVuKCkuY3NzKHsnbWluLWhlaWdodCc6IGN1cnJlbnRUYWxsZXN0fSk7IFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLy8gQ29weXJpZ2h0IChjKSAyMDA5IEphbWVzIFBhZG9sc2V5XHJcbiAgICAgICAgLy8gaHR0cDovL2phbWVzLnBhZG9sc2V5LmNvbS9qYXZhc2NyaXB0L2pxdWVyeS1kZWxheS1wbHVnaW4vXHJcbiAgICAgICAgZGVsYXk6IGZ1bmN0aW9uKHRpbWUsIGNhbGxiYWNrKXtcclxuICAgICAgICAgICAgalF1ZXJ5LmZ4LnN0ZXAuZGVsYXkgPSBmdW5jdGlvbigpe307XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFuaW1hdGUoe2RlbGF5OjF9LCB0aW1lLCBjYWxsYmFjayk7XHJcbiAgICAgICAgfSAgICAgICAgXHJcblx0fSk7XHJcbn0pKGpRdWVyeSk7XHJcbi8qXHJcbiAgalF1ZXJ5IHN0cmluZ3MgLSAwLjNcclxuICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvanF1ZXJ5LXV0aWxzL1xyXG4gIFxyXG4gIChjKSBNYXhpbWUgSGFpbmVhdWx0IDxoYWluZWF1bHRAZ21haWwuY29tPlxyXG4gIGh0dHA6Ly9oYWluZWF1bHQuY29tICAgXHJcblxyXG4gIE1JVCBMaWNlbnNlIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcclxuXHJcbiAgSW1wbGVtZW50YXRpb24gb2YgUHl0aG9uM0sgYWR2YW5jZWQgc3RyaW5nIGZvcm1hdHRpbmdcclxuICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTMxMDEvXHJcblxyXG4gIERvY3VtZW50YXRpb246IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9qcXVlcnktdXRpbHMvd2lraS9TdHJpbmdGb3JtYXRcclxuICBcclxuKi9cclxuKGZ1bmN0aW9uKCQpe1xyXG4gICAgdmFyIHN0cmluZ3MgPSB7XHJcbiAgICAgICAgc3RyQ29udmVyc2lvbjoge1xyXG4gICAgICAgICAgICAvLyB0cmllcyB0byB0cmFuc2xhdGUgYW55IG9iamVjdHMgdHlwZSBpbnRvIHN0cmluZyBncmFjZWZ1bGx5XHJcbiAgICAgICAgICAgIF9fcmVwcjogZnVuY3Rpb24oaSl7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2godGhpcy5fX2dldFR5cGUoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdhcnJheSc6Y2FzZSAnZGF0ZSc6Y2FzZSAnbnVtYmVyJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdvYmplY3QnOiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG8gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh4PTA7IHg8aS5sZW5ndGg7IGkrKykgeyBvLnB1c2goaSsnOiAnKyB0aGlzLl9fcmVwcihpW3hdKSk7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG8uam9pbignLCAnKTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyBsaWtlIHR5cGVvZiBidXQgbGVzcyB2YWd1ZVxyXG4gICAgICAgICAgICBfX2dldFR5cGU6IGZ1bmN0aW9uKGkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghaSB8fCAhaS5jb25zdHJ1Y3RvcikgeyByZXR1cm4gdHlwZW9mKGkpOyB9XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBpLmNvbnN0cnVjdG9yLnRvU3RyaW5nKCkubWF0Y2goL0FycmF5fE51bWJlcnxTdHJpbmd8T2JqZWN0fERhdGUvKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaCAmJiBtYXRjaFswXS50b0xvd2VyQ2FzZSgpIHx8IHR5cGVvZihpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8rIEpvbmFzIFJhb25pIFNvYXJlcyBTaWx2YVxyXG4gICAgICAgICAgICAvLyB0aGUgQCBzaWduIG5leHQgdG8gXCIvL1wiIGlzIGludGVycHJldGVkIGJ5IElFIHdoZW4gdXNpbmcgY2M8dW5kZXJzY29yZT5vbiEgSW5zZXJ0ZWQgYSBzcGFjZS5cclxuICAgICAgICAgICAgLy8gIEAgaHR0cDovL2pzZnJvbWhlbGwuY29tL3N0cmluZy9wYWQgW3YxLjBdXHJcbiAgICAgICAgICAgIF9fcGFkOiBmdW5jdGlvbihzdHIsIGwsIHMsIHQpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHAgPSBzIHx8ICcgJztcclxuICAgICAgICAgICAgICAgIHZhciBvID0gc3RyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGwgLSBzdHIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG8gPSBuZXcgQXJyYXkoTWF0aC5jZWlsKGwgLyBwLmxlbmd0aCkpLmpvaW4ocCkuc3Vic3RyKDAsIHQgPSAhdCA/IGwgOiB0ID09IDEgPyAwIDogTWF0aC5jZWlsKGwgLyAyKSkgKyBzdHIgKyBwLnN1YnN0cigwLCBsIC0gdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgX19nZXRJbnB1dDogZnVuY3Rpb24oYXJnLCBhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGFyZy5nZXRLZXkoKTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCh0aGlzLl9fZ2V0VHlwZShhcmdzKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzogLy8gVGhhbmtzIHRvIEpvbmF0aGFuIFdvcmtzIGZvciB0aGUgcGF0Y2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleXMgPSBrZXkuc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IGFyZ3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgc3Via2V5ID0gMDsgc3Via2V5IDwga2V5cy5sZW5ndGg7IHN1YmtleSsrKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IG9ialtrZXlzW3N1YmtleV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yob2JqKSAhPSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ3Muc3RyQ29udmVyc2lvbi5fX2dldFR5cGUob2JqKSA9PSAnYXJyYXknKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZy5nZXRGb3JtYXQoKS5tYXRjaCgvXFwuXFwqLykgJiYgb2JqWzFdIHx8IG9iajtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiB0cnkgYnkgbnVtZXJpY2FsIGluZGV4ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FycmF5JzogXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHBhcnNlSW50KGtleSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmdldEZvcm1hdCgpLm1hdGNoKC9cXC5cXCovKSAmJiB0eXBlb2YgYXJnc1trZXkrMV0gIT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGFyZ3Nba2V5KzFdOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBhcmdzW2tleV0gIT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGFyZ3Nba2V5XTsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgcmV0dXJuIGtleTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICd7JytrZXkrJ30nO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBfX2Zvcm1hdFRva2VuOiBmdW5jdGlvbih0b2tlbiwgYXJncykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyZyAgID0gbmV3IEFyZ3VtZW50KHRva2VuLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdzLnN0ckNvbnZlcnNpb25bYXJnLmdldEZvcm1hdCgpLnNsaWNlKC0xKV0odGhpcy5fX2dldElucHV0KGFyZywgYXJncyksIGFyZyk7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvLyBTaWduZWQgaW50ZWdlciBkZWNpbWFsLlxyXG4gICAgICAgICAgICBkOiBmdW5jdGlvbihpbnB1dCwgYXJnKXtcclxuICAgICAgICAgICAgICAgIHZhciBvID0gcGFyc2VJbnQoaW5wdXQsIDEwKTsgLy8gZW5mb3JjZSBiYXNlIDEwXHJcbiAgICAgICAgICAgICAgICB2YXIgcCA9IGFyZy5nZXRQYWRkaW5nTGVuZ3RoKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocCkgeyByZXR1cm4gdGhpcy5fX3BhZChvLnRvU3RyaW5nKCksIHAsIGFyZy5nZXRQYWRkaW5nU3RyaW5nKCksIDApOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlICAgeyByZXR1cm4gbzsgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyBTaWduZWQgaW50ZWdlciBkZWNpbWFsLlxyXG4gICAgICAgICAgICBpOiBmdW5jdGlvbihpbnB1dCwgYXJncyl7IFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZChpbnB1dCwgYXJncyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIFVuc2lnbmVkIG9jdGFsXHJcbiAgICAgICAgICAgIG86IGZ1bmN0aW9uKGlucHV0LCBhcmcpeyBcclxuICAgICAgICAgICAgICAgIHZhciBvID0gaW5wdXQudG9TdHJpbmcoOCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJnLmlzQWx0ZXJuYXRlKCkpIHsgbyA9IHRoaXMuX19wYWQobywgby5sZW5ndGgrMSwgJzAnLCAwKTsgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19wYWQobywgYXJnLmdldFBhZGRpbmdMZW5ndGgoKSwgYXJnLmdldFBhZGRpbmdTdHJpbmcoKSwgMCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIFVuc2lnbmVkIGRlY2ltYWxcclxuICAgICAgICAgICAgdTogZnVuY3Rpb24oaW5wdXQsIGFyZ3MpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLmQoaW5wdXQsIGFyZ3MpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8gVW5zaWduZWQgaGV4YWRlY2ltYWwgKGxvd2VyY2FzZSlcclxuICAgICAgICAgICAgeDogZnVuY3Rpb24oaW5wdXQsIGFyZyl7XHJcbiAgICAgICAgICAgICAgICB2YXIgbyA9IHBhcnNlSW50KGlucHV0LCAxMCkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICAgICAgbyA9IHRoaXMuX19wYWQobywgYXJnLmdldFBhZGRpbmdMZW5ndGgoKSwgYXJnLmdldFBhZGRpbmdTdHJpbmcoKSwwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhcmcuaXNBbHRlcm5hdGUoKSA/ICcweCcrbyA6IG87XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIFVuc2lnbmVkIGhleGFkZWNpbWFsICh1cHBlcmNhc2UpXHJcbiAgICAgICAgICAgIFg6IGZ1bmN0aW9uKGlucHV0LCBhcmcpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMueChpbnB1dCwgYXJnKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyBGbG9hdGluZyBwb2ludCBleHBvbmVudGlhbCBmb3JtYXQgKGxvd2VyY2FzZSlcclxuICAgICAgICAgICAgZTogZnVuY3Rpb24oaW5wdXQsIGFyZyl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChpbnB1dCwgMTApLnRvRXhwb25lbnRpYWwoYXJnLmdldFByZWNpc2lvbigpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8gRmxvYXRpbmcgcG9pbnQgZXhwb25lbnRpYWwgZm9ybWF0ICh1cHBlcmNhc2UpXHJcbiAgICAgICAgICAgIEU6IGZ1bmN0aW9uKGlucHV0LCBhcmcpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZShpbnB1dCwgYXJnKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyBGbG9hdGluZyBwb2ludCBkZWNpbWFsIGZvcm1hdFxyXG4gICAgICAgICAgICBmOiBmdW5jdGlvbihpbnB1dCwgYXJnKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9fcGFkKHBhcnNlRmxvYXQoaW5wdXQsIDEwKS50b0ZpeGVkKGFyZy5nZXRQcmVjaXNpb24oKSksIGFyZy5nZXRQYWRkaW5nTGVuZ3RoKCksIGFyZy5nZXRQYWRkaW5nU3RyaW5nKCksMCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIEZsb2F0aW5nIHBvaW50IGRlY2ltYWwgZm9ybWF0IChhbGlhcylcclxuICAgICAgICAgICAgRjogZnVuY3Rpb24oaW5wdXQsIGFyZ3Mpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZihpbnB1dCwgYXJncyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIEZsb2F0aW5nIHBvaW50IGZvcm1hdC4gVXNlcyBleHBvbmVudGlhbCBmb3JtYXQgaWYgZXhwb25lbnQgaXMgZ3JlYXRlciB0aGFuIC00IG9yIGxlc3MgdGhhbiBwcmVjaXNpb24sIGRlY2ltYWwgZm9ybWF0IG90aGVyd2lzZVxyXG4gICAgICAgICAgICBnOiBmdW5jdGlvbihpbnB1dCwgYXJnKXtcclxuICAgICAgICAgICAgICAgIHZhciBvID0gcGFyc2VGbG9hdChpbnB1dCwgMTApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChvLnRvU3RyaW5nKCkubGVuZ3RoID4gNikgPyBNYXRoLnJvdW5kKG8udG9FeHBvbmVudGlhbChhcmcuZ2V0UHJlY2lzaW9uKCkpKTogbztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8gRmxvYXRpbmcgcG9pbnQgZm9ybWF0LiBVc2VzIGV4cG9uZW50aWFsIGZvcm1hdCBpZiBleHBvbmVudCBpcyBncmVhdGVyIHRoYW4gLTQgb3IgbGVzcyB0aGFuIHByZWNpc2lvbiwgZGVjaW1hbCBmb3JtYXQgb3RoZXJ3aXNlXHJcbiAgICAgICAgICAgIEc6IGZ1bmN0aW9uKGlucHV0LCBhcmdzKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmcoaW5wdXQsIGFyZ3MpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAvLyBTaW5nbGUgY2hhcmFjdGVyIChhY2NlcHRzIGludGVnZXIgb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmcpLiBcdFxyXG4gICAgICAgICAgICBjOiBmdW5jdGlvbihpbnB1dCwgYXJncykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gaW5wdXQubWF0Y2goL1xcd3xcXGQvKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaCAmJiBtYXRjaFswXSB8fCAnJztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8gU3RyaW5nIChjb252ZXJ0cyBhbnkgSmF2YVNjcmlwdCBvYmplY3QgdG8gYW5vdGF0ZWQgZm9ybWF0KVxyXG4gICAgICAgICAgICByOiBmdW5jdGlvbihpbnB1dCwgYXJncykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19yZXByKGlucHV0KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8gU3RyaW5nIChjb252ZXJ0cyBhbnkgSmF2YVNjcmlwdCBvYmplY3QgdXNpbmcgb2JqZWN0LnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAgIHM6IGZ1bmN0aW9uKGlucHV0LCBhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQudG9TdHJpbmcgJiYgaW5wdXQudG9TdHJpbmcoKSB8fCAnJytpbnB1dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24oc3RyLCBhcmdzKSB7XHJcbiAgICAgICAgICAgIHZhciBlbmQgICAgPSAwO1xyXG4gICAgICAgICAgICB2YXIgc3RhcnQgID0gMDtcclxuICAgICAgICAgICAgdmFyIG1hdGNoICA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XHJcbiAgICAgICAgICAgIHZhciB0b2tlbiAgPSAnJztcclxuICAgICAgICAgICAgdmFyIHRtcCAgICA9IChzdHJ8fCcnKS5zcGxpdCgnJyk7XHJcbiAgICAgICAgICAgIGZvcihzdGFydD0wOyBzdGFydCA8IHRtcC5sZW5ndGg7IHN0YXJ0KyspIHtcclxuICAgICAgICAgICAgICAgIGlmICh0bXBbc3RhcnRdID09ICd7JyAmJiB0bXBbc3RhcnQrMV0gIT0neycpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmQgICA9IHN0ci5pbmRleE9mKCd9Jywgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG1wLnNsaWNlKHN0YXJ0KzEsIGVuZCkuam9pbignJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRtcFtzdGFydC0xXSAhPSAneycgJiYgdG1wW2VuZCsxXSAhPSAnfScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuQXJncyA9ICh0eXBlb2YgYXJndW1lbnRzWzFdICE9ICdvYmplY3QnKT8gYXJndW1lbnRzMkFycmF5KGFyZ3VtZW50cywgMik6IGFyZ3MgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHN0cmluZ3Muc3RyQ29udmVyc2lvbi5fX2Zvcm1hdFRva2VuKHRva2VuLCB0b2tlbkFyZ3MpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHRva2VuKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGFydCA+IGVuZCB8fCBidWZmZXIubGVuZ3RoIDwgMSkgeyBidWZmZXIucHVzaCh0bXBbc3RhcnRdKTsgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAoYnVmZmVyLmxlbmd0aCA+IDEpPyBidWZmZXIuam9pbignJyk6IGJ1ZmZlclswXTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBjYWxjOiBmdW5jdGlvbihzdHIsIGFyZ3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGV2YWwoZm9ybWF0KHN0ciwgYXJncykpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHJlcGVhdDogZnVuY3Rpb24ocywgbikgeyBcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheShuKzEpLmpvaW4ocyk7IFxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIFVURjhlbmNvZGU6IGZ1bmN0aW9uKHMpIHsgXHJcbiAgICAgICAgICAgIHJldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQocykpOyBcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBVVEY4ZGVjb2RlOiBmdW5jdGlvbihzKSB7IFxyXG4gICAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShzKSk7IFxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHRwbDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciBvdXQgPSAnJztcclxuICAgICAgICAgICAgdmFyIHJlbmRlciA9IHRydWU7XHJcbiAgICAgICAgICAgIC8vIFNldFxyXG4gICAgICAgICAgICAvLyAkLnRwbCgndWkudGVzdCcsIFsnPHNwYW4+JywgaGVsbG9Xb3JsZCAsJzwvc3Bhbj4nXSk7XHJcbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIgJiYgJC5pc0FycmF5KGFyZ3VtZW50c1sxXSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXNbYXJndW1lbnRzWzBdXSA9IGFyZ3VtZW50c1sxXS5qb2luKCcnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAkKHRoaXNbYXJndW1lbnRzWzBdXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gJC50cGwoJ3VpLnRlc3QnLCAnPHNwYW4+aGVsbG8gd29ybGQ8L3NwYW4+Jyk7XHJcbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIgJiYgJC5pc1N0cmluZyhhcmd1bWVudHNbMV0pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzW2FyZ3VtZW50c1swXV0gPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJCh0aGlzW2FyZ3VtZW50c1swXV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIENhbGxcclxuICAgICAgICAgICAgLy8gJC50cGwoJ3VpLnRlc3QnKTtcclxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICQodGhpc1thcmd1bWVudHNbMF1dKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyAkLnRwbCgndWkudGVzdCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMiAmJiBhcmd1bWVudHNbMV0gPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2FyZ3VtZW50c1swXV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gJC50cGwoJ3VpLnRlc3QnLCB7dmFsdWU6YmxhaH0pO1xyXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAyICYmICQuaXNPYmplY3QoYXJndW1lbnRzWzFdKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoJC5mb3JtYXQodGhpc1thcmd1bWVudHNbMF1dLCBhcmd1bWVudHNbMV0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyAkLnRwbCgndWkudGVzdCcsIHt2YWx1ZTpibGFofSwgZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAzICYmICQuaXNPYmplY3QoYXJndW1lbnRzWzFdKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChhcmd1bWVudHNbMl0gPT0gdHJ1ZSkgXHJcbiAgICAgICAgICAgICAgICAgICAgPyAkLmZvcm1hdCh0aGlzW2FyZ3VtZW50c1swXV0sIGFyZ3VtZW50c1sxXSlcclxuICAgICAgICAgICAgICAgICAgICA6ICQoJC5mb3JtYXQodGhpc1thcmd1bWVudHNbMF1dLCBhcmd1bWVudHNbMV0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdmFyIEFyZ3VtZW50ID0gZnVuY3Rpb24oYXJnLCBhcmdzKSB7XHJcbiAgICAgICAgdGhpcy5fX2FyZyAgPSBhcmc7XHJcbiAgICAgICAgdGhpcy5fX2FyZ3MgPSBhcmdzO1xyXG4gICAgICAgIHRoaXMuX19tYXhfcHJlY2lzaW9uID0gcGFyc2VGbG9hdCgnMS4nKyAobmV3IEFycmF5KDMyKSkuam9pbignMScpLCAxMCkudG9TdHJpbmcoKS5sZW5ndGgtMztcclxuICAgICAgICB0aGlzLl9fZGVmX3ByZWNpc2lvbiA9IDY7XHJcbiAgICAgICAgdGhpcy5nZXRTdHJpbmcgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX2FyZztcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZ2V0S2V5ID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19hcmcuc3BsaXQoJzonKVswXTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZ2V0Rm9ybWF0ID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgdmFyIG1hdGNoID0gdGhpcy5nZXRTdHJpbmcoKS5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICByZXR1cm4gKG1hdGNoICYmIG1hdGNoWzFdKT8gbWF0Y2hbMV06ICdzJztcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZ2V0UHJlY2lzaW9uID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgdmFyIG1hdGNoID0gdGhpcy5nZXRGb3JtYXQoKS5tYXRjaCgvXFwuKFxcZCt8XFwqKS9nKTtcclxuICAgICAgICAgICAgaWYgKCFtYXRjaCkgeyByZXR1cm4gdGhpcy5fX2RlZl9wcmVjaXNpb247IH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXRjaCA9IG1hdGNoWzBdLnNsaWNlKDEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoICE9ICcqJykgeyByZXR1cm4gcGFyc2VJbnQobWF0Y2gsIDEwKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihzdHJpbmdzLnN0ckNvbnZlcnNpb24uX19nZXRUeXBlKHRoaXMuX19hcmdzKSA9PSAnYXJyYXknKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19hcmdzWzFdICYmIHRoaXMuX19hcmdzWzBdIHx8IHRoaXMuX19kZWZfcHJlY2lzaW9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihzdHJpbmdzLnN0ckNvbnZlcnNpb24uX19nZXRUeXBlKHRoaXMuX19hcmdzKSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9fYXJnc1t0aGlzLmdldEtleSgpXSAmJiB0aGlzLl9fYXJnc1t0aGlzLmdldEtleSgpXVswXSB8fCB0aGlzLl9fZGVmX3ByZWNpc2lvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyByZXR1cm4gdGhpcy5fX2RlZl9wcmVjaXNpb247IH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5nZXRQYWRkaW5nTGVuZ3RoID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgdmFyIG1hdGNoID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWx0ZXJuYXRlKCkpIHtcclxuICAgICAgICAgICAgICAgIG1hdGNoID0gdGhpcy5nZXRTdHJpbmcoKS5tYXRjaCgvMD8jMD8oXFxkKykvKTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkgeyByZXR1cm4gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1hdGNoID0gdGhpcy5nZXRTdHJpbmcoKS5tYXRjaCgvKDB8XFwuKShcXGQrfFxcKikvZyk7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXRjaCAmJiBwYXJzZUludChtYXRjaFswXS5zbGljZSgxKSwgMTApIHx8IDA7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmdldFBhZGRpbmdTdHJpbmcgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICB2YXIgbyA9ICcnO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0FsdGVybmF0ZSgpKSB7IG8gPSAnICc7IH1cclxuICAgICAgICAgICAgLy8gMCB0YWtlIHByZWNlZGVuY2Ugb24gYWx0ZXJuYXRlIGZvcm1hdFxyXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRGb3JtYXQoKS5tYXRjaCgvIzB8MCN8XjB8XFwuXFxkKy8pKSB7IG8gPSAnMCc7IH1cclxuICAgICAgICAgICAgcmV0dXJuIG87XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmdldEZsYWdzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgdmFyIG1hdGNoID0gdGhpcy5nZXRTdHJpbmcoKS5tYXRjKC9eKDB8XFwjfFxcLXxcXCt8XFxzKSsvKTtcclxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzBdLnNwbGl0KCcnKSB8fCBbXTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuaXNBbHRlcm5hdGUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5nZXRGb3JtYXQoKS5tYXRjaCgvXjA/Iy8pO1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBhcmd1bWVudHMyQXJyYXkgPSBmdW5jdGlvbihhcmdzLCBzaGlmdCkge1xyXG4gICAgICAgIHZhciBvID0gW107XHJcbiAgICAgICAgZm9yIChsPWFyZ3MubGVuZ3RoLCB4PShzaGlmdCB8fCAwKS0xOyB4PGw7eCsrKSB7IG8ucHVzaChhcmdzW3hdKTsgfVxyXG4gICAgICAgIHJldHVybiBvO1xyXG4gICAgfTtcclxuICAgICQuZXh0ZW5kKHN0cmluZ3MpO1xyXG59KShqUXVlcnkpO1xyXG4vKlxyXG4gIGpRdWVyeSBhbmNob3IgaGFuZGxlciAtIDAuNVxyXG4gIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9qcXVlcnktdXRpbHMvXHJcblxyXG4gIChjKSBNYXhpbWUgSGFpbmVhdWx0IDxoYWluZWF1bHRAZ21haWwuY29tPlxyXG4gIGh0dHA6Ly9oYWluZWF1bHQuY29tICAgXHJcblxyXG4gIE1JVCBMaWNlbnNlIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocClcclxuXHJcbiovXHJcblxyXG4oZnVuY3Rpb24oJCl7XHJcbiAgICB2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xyXG4gICAgdmFyIGhhbmRsZXJzICA9IFtdO1xyXG4gICAgdmFyIG9wdCA9IHt9O1xyXG5cclxuXHQkLmV4dGVuZCh7XHJcblx0XHRhbmNob3JIYW5kbGVyOiB7XHJcbiAgICAgICAgICAgIGFwcGx5OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICQubWFwKGhhbmRsZXJzLCBmdW5jdGlvbihoYW5kbGVyKXtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBoYXNoLm1hdGNoKGhhbmRsZXIucikgJiYgaGFzaC5tYXRjaChoYW5kbGVyLnIpWzBdIHx8IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCkgIHsgaGFuZGxlci5jYi5hcHBseSgkKCdhW2hyZWYqPScrbWF0Y2grJ10nKS5nZXQoMCksIFtoYW5kbGVyLnIsIGhhc2ggfHwgJyddKTsgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5hbmNob3JIYW5kbGVyO1xyXG4gICAgICAgICAgICB9LFxyXG5cdFx0XHRhZGQ6IGZ1bmN0aW9uKHJlZ2V4cCwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBvcHQgID0gJC5leHRlbmQoe2hhbmRsZUNsaWNrOiB0cnVlLCBwcmVzZXJ2ZUhhc2g6IHRydWV9LCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGlmIChvcHQuaGFuZGxlQ2xpY2spIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgJCgnYVtocmVmKj0jXScpLmVhY2goZnVuY3Rpb24oaSwgYSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLmhyZWYubWF0Y2gocmVnZXhwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChhKS5iaW5kKCdjbGljay5hbmNob3JIYW5kbGVyJywgZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0LnByZXNlcnZlSGFzaCkgeyB3aW5kb3cubG9jYXRpb24uaGFzaCA9IGEuaGFzaDsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseSh0aGlzLCBbcmVnZXhwLCBhLmhyZWZdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pOyBcclxuICAgICAgICAgICAgICAgIH1cclxuXHRcdFx0XHRoYW5kbGVycy5wdXNoKHtyOiByZWdleHAsIGNiOiBjYWxsYmFja30pO1xyXG4gICAgICAgICAgICAgICAgJCgkLmFuY2hvckhhbmRsZXIuYXBwbHkpO1xyXG5cdFx0XHRcdHJldHVybiAkLmFuY2hvckhhbmRsZXI7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9KTtcclxufSkoalF1ZXJ5KTtcclxuLyoqXHJcbiAqIENvb2tpZSBwbHVnaW5cclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDA2IEtsYXVzIEhhcnRsIChzdGlsYnVlcm8uZGUpXHJcbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzOlxyXG4gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxyXG4gKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWxcclxuICpcclxuICovXHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY29va2llIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHZhbHVlIGFuZCBvdGhlciBvcHRpb25hbCBwYXJhbWV0ZXJzLlxyXG4gKlxyXG4gKiBAZXhhbXBsZSAkLmNvb2tpZSgndGhlX2Nvb2tpZScsICd0aGVfdmFsdWUnKTtcclxuICogQGRlc2MgU2V0IHRoZSB2YWx1ZSBvZiBhIGNvb2tpZS5cclxuICogQGV4YW1wbGUgJC5jb29raWUoJ3RoZV9jb29raWUnLCAndGhlX3ZhbHVlJywgeyBleHBpcmVzOiA3LCBwYXRoOiAnLycsIGRvbWFpbjogJ2pxdWVyeS5jb20nLCBzZWN1cmU6IHRydWUgfSk7XHJcbiAqIEBkZXNjIENyZWF0ZSBhIGNvb2tpZSB3aXRoIGFsbCBhdmFpbGFibGUgb3B0aW9ucy5cclxuICogQGV4YW1wbGUgJC5jb29raWUoJ3RoZV9jb29raWUnLCAndGhlX3ZhbHVlJyk7XHJcbiAqIEBkZXNjIENyZWF0ZSBhIHNlc3Npb24gY29va2llLlxyXG4gKiBAZXhhbXBsZSAkLmNvb2tpZSgndGhlX2Nvb2tpZScsIG51bGwpO1xyXG4gKiBAZGVzYyBEZWxldGUgYSBjb29raWUgYnkgcGFzc2luZyBudWxsIGFzIHZhbHVlLiBLZWVwIGluIG1pbmQgdGhhdCB5b3UgaGF2ZSB0byB1c2UgdGhlIHNhbWUgcGF0aCBhbmQgZG9tYWluXHJcbiAqICAgICAgIHVzZWQgd2hlbiB0aGUgY29va2llIHdhcyBzZXQuXHJcbiAqXHJcbiAqIEBwYXJhbSBTdHJpbmcgbmFtZSBUaGUgbmFtZSBvZiB0aGUgY29va2llLlxyXG4gKiBAcGFyYW0gU3RyaW5nIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgY29va2llLlxyXG4gKiBAcGFyYW0gT2JqZWN0IG9wdGlvbnMgQW4gb2JqZWN0IGxpdGVyYWwgY29udGFpbmluZyBrZXkvdmFsdWUgcGFpcnMgdG8gcHJvdmlkZSBvcHRpb25hbCBjb29raWUgYXR0cmlidXRlcy5cclxuICogQG9wdGlvbiBOdW1iZXJ8RGF0ZSBleHBpcmVzIEVpdGhlciBhbiBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIGV4cGlyYXRpb24gZGF0ZSBmcm9tIG5vdyBvbiBpbiBkYXlzIG9yIGEgRGF0ZSBvYmplY3QuXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBhIG5lZ2F0aXZlIHZhbHVlIGlzIHNwZWNpZmllZCAoZS5nLiBhIGRhdGUgaW4gdGhlIHBhc3QpLCB0aGUgY29va2llIHdpbGwgYmUgZGVsZXRlZC5cclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHNldCB0byBudWxsIG9yIG9taXR0ZWQsIHRoZSBjb29raWUgd2lsbCBiZSBhIHNlc3Npb24gY29va2llIGFuZCB3aWxsIG5vdCBiZSByZXRhaW5lZFxyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgdGhlIGJyb3dzZXIgZXhpdHMuXHJcbiAqIEBvcHRpb24gU3RyaW5nIHBhdGggVGhlIHZhbHVlIG9mIHRoZSBwYXRoIGF0cmlidXRlIG9mIHRoZSBjb29raWUgKGRlZmF1bHQ6IHBhdGggb2YgcGFnZSB0aGF0IGNyZWF0ZWQgdGhlIGNvb2tpZSkuXHJcbiAqIEBvcHRpb24gU3RyaW5nIGRvbWFpbiBUaGUgdmFsdWUgb2YgdGhlIGRvbWFpbiBhdHRyaWJ1dGUgb2YgdGhlIGNvb2tpZSAoZGVmYXVsdDogZG9tYWluIG9mIHBhZ2UgdGhhdCBjcmVhdGVkIHRoZSBjb29raWUpLlxyXG4gKiBAb3B0aW9uIEJvb2xlYW4gc2VjdXJlIElmIHRydWUsIHRoZSBzZWN1cmUgYXR0cmlidXRlIG9mIHRoZSBjb29raWUgd2lsbCBiZSBzZXQgYW5kIHRoZSBjb29raWUgdHJhbnNtaXNzaW9uIHdpbGxcclxuICogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlIGEgc2VjdXJlIHByb3RvY29sIChsaWtlIEhUVFBTKS5cclxuICogQHR5cGUgdW5kZWZpbmVkXHJcbiAqXHJcbiAqIEBuYW1lICQuY29va2llXHJcbiAqIEBjYXQgUGx1Z2lucy9Db29raWVcclxuICogQGF1dGhvciBLbGF1cyBIYXJ0bC9rbGF1cy5oYXJ0bEBzdGlsYnVlcm8uZGVcclxuICovXHJcblxyXG4vKipcclxuICogR2V0IHRoZSB2YWx1ZSBvZiBhIGNvb2tpZSB3aXRoIHRoZSBnaXZlbiBuYW1lLlxyXG4gKlxyXG4gKiBAZXhhbXBsZSAkLmNvb2tpZSgndGhlX2Nvb2tpZScpO1xyXG4gKiBAZGVzYyBHZXQgdGhlIHZhbHVlIG9mIGEgY29va2llLlxyXG4gKlxyXG4gKiBAcGFyYW0gU3RyaW5nIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNvb2tpZS5cclxuICogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIGNvb2tpZS5cclxuICogQHR5cGUgU3RyaW5nXHJcbiAqXHJcbiAqIEBuYW1lICQuY29va2llXHJcbiAqIEBjYXQgUGx1Z2lucy9Db29raWVcclxuICogQGF1dGhvciBLbGF1cyBIYXJ0bC9rbGF1cy5oYXJ0bEBzdGlsYnVlcm8uZGVcclxuICovXHJcbmpRdWVyeS5jb29raWUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAndW5kZWZpbmVkJykgeyAvLyBuYW1lIGFuZCB2YWx1ZSBnaXZlbiwgc2V0IGNvb2tpZVxyXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICBvcHRpb25zLmV4cGlyZXMgPSAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGV4cGlyZXMgPSAnJztcclxuICAgICAgICBpZiAob3B0aW9ucy5leHBpcmVzICYmICh0eXBlb2Ygb3B0aW9ucy5leHBpcmVzID09ICdudW1iZXInIHx8IG9wdGlvbnMuZXhwaXJlcy50b1VUQ1N0cmluZykpIHtcclxuICAgICAgICAgICAgdmFyIGRhdGU7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5leHBpcmVzID09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIChvcHRpb25zLmV4cGlyZXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkYXRlID0gb3B0aW9ucy5leHBpcmVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGV4cGlyZXMgPSAnOyBleHBpcmVzPScgKyBkYXRlLnRvVVRDU3RyaW5nKCk7IC8vIHVzZSBleHBpcmVzIGF0dHJpYnV0ZSwgbWF4LWFnZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIENBVVRJT046IE5lZWRlZCB0byBwYXJlbnRoZXNpemUgb3B0aW9ucy5wYXRoIGFuZCBvcHRpb25zLmRvbWFpblxyXG4gICAgICAgIC8vIGluIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbnMsIG90aGVyd2lzZSB0aGV5IGV2YWx1YXRlIHRvIHVuZGVmaW5lZFxyXG4gICAgICAgIC8vIGluIHRoZSBwYWNrZWQgdmVyc2lvbiBmb3Igc29tZSByZWFzb24uLi5cclxuICAgICAgICB2YXIgcGF0aCA9IG9wdGlvbnMucGF0aCA/ICc7IHBhdGg9JyArIChvcHRpb25zLnBhdGgpIDogJyc7XHJcbiAgICAgICAgdmFyIGRvbWFpbiA9IG9wdGlvbnMuZG9tYWluID8gJzsgZG9tYWluPScgKyAob3B0aW9ucy5kb21haW4pIDogJyc7XHJcbiAgICAgICAgdmFyIHNlY3VyZSA9IG9wdGlvbnMuc2VjdXJlID8gJzsgc2VjdXJlJyA6ICcnO1xyXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IFtuYW1lLCAnPScsIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSksIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlXS5qb2luKCcnKTtcclxuICAgIH0gZWxzZSB7IC8vIG9ubHkgbmFtZSBnaXZlbiwgZ2V0IGNvb2tpZVxyXG4gICAgICAgIHZhciBjb29raWVWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmNvb2tpZSAmJiBkb2N1bWVudC5jb29raWUgIT0gJycpIHtcclxuICAgICAgICAgICAgdmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29va2llID0galF1ZXJ5LnRyaW0oY29va2llc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAvLyBEb2VzIHRoaXMgY29va2llIHN0cmluZyBiZWdpbiB3aXRoIHRoZSBuYW1lIHdlIHdhbnQ/XHJcbiAgICAgICAgICAgICAgICBpZiAoY29va2llLnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCArIDEpID09IChuYW1lICsgJz0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvb2tpZVZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KGNvb2tpZS5zdWJzdHJpbmcobmFtZS5sZW5ndGggKyAxKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvb2tpZVZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG4vKlxyXG4gIGpRdWVyeSBjb3VudGRvd24gLSAwLjJcclxuICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvanF1ZXJ5LXV0aWxzL1xyXG5cclxuICAoYykgTWF4aW1lIEhhaW5lYXVsdCA8aGFpbmVhdWx0QGdtYWlsLmNvbT5cclxuICBodHRwOi8vaGFpbmVhdWx0LmNvbSAgIFxyXG5cclxuICBNSVQgTGljZW5zZSAoaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHApXHJcbiAgXHJcbiovXHJcblxyXG4oZnVuY3Rpb24oJCkge1xyXG4gICAgZnVuY3Rpb24gY291bnRkb3duKGVsLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIGNhbGMgPSBmdW5jdGlvbiAodGFyZ2V0LCBjdXJyZW50KSB7XHJcbiAgICAgICAgICAgIC8qIFJldHVybiB0cnVlIGlmIHRoZSB0YXJnZXQgZGF0ZSBoYXMgYXJyaXZlZCxcclxuICAgICAgICAgICAgICogYW4gb2JqZWN0IG9mIHRoZSB0aW1lIGxlZnQgb3RoZXJ3aXNlLlxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBjdXJyZW50IHx8IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50ID49IHRhcmdldCkgeyByZXR1cm4gdHJ1ZTsgfVxyXG5cclxuICAgICAgICAgICAgdmFyIG8gPSB7fTtcclxuICAgICAgICAgICAgdmFyIHJlbWFpbiA9IE1hdGguZmxvb3IoKHRhcmdldC5nZXRUaW1lKCkgLSBjdXJyZW50LmdldFRpbWUoKSkgLyAxMDAwKTtcclxuXHJcbiAgICAgICAgICAgIG8uZGF5cyA9IE1hdGguZmxvb3IocmVtYWluIC8gODY0MDApO1xyXG4gICAgICAgICAgICByZW1haW4gJT0gODY0MDA7XHJcbiAgICAgICAgICAgIG8uaG91cnMgPSBNYXRoLmZsb29yKHJlbWFpbiAvIDM2MDApO1xyXG4gICAgICAgICAgICByZW1haW4gJT0gMzYwMDtcclxuICAgICAgICAgICAgby5taW51dGVzID0gTWF0aC5mbG9vcihyZW1haW4gLyA2MCk7XHJcbiAgICAgICAgICAgIHJlbWFpbiAlPSA2MDtcclxuICAgICAgICAgICAgby5zZWNvbmRzID0gcmVtYWluO1xyXG4gICAgICAgICAgICBvLnllYXJzID0gTWF0aC5mbG9vcihvLmRheXMgLyAzNjUpO1xyXG4gICAgICAgICAgICBvLm1vbnRocyA9IE1hdGguZmxvb3Ioby5kYXlzIC8gMzApO1xyXG4gICAgICAgICAgICBvLndlZWtzID0gTWF0aC5mbG9vcihvLmRheXMgLyA3KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciBnZXRXZWVrID0gZnVuY3Rpb24oZGF0ZSkgeyBcclxuICAgICAgICAgICAgdmFyIG9uZWphbiA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwwLDEpO1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKCgoKGRhdGUgLSBvbmVqYW4pIC8gODY0MDAwMDApICsgb25lamFuLmdldERheSgpKS83KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHtcclxuICAgICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcclxuICAgICAgICAgICAgbW9kaWZpZXJzOiBbXSxcclxuICAgICAgICAgICAgaW50ZXJ2YWw6IDEwMDAsXHJcbiAgICAgICAgICAgIG1zZ0Zvcm1hdDogJyVkIFtkYXl8ZGF5c10gJWhoICVtbSAlc3MnLFxyXG4gICAgICAgICAgICBtc2dOb3c6ICdOb3cgISdcclxuICAgICAgICB9LCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgdmFyIHRva2VucyA9IHtcclxuICAgICAgICAgICAgeTogbmV3IFJlZ0V4cCAoJ1xcXFwleSguKz8pXFxcXFsoXFxcXHcrKVxcXFx8KFxcXFx3KylcXFxcXScsICdnJyksIC8vIHllYXJzIFxyXG4gICAgICAgICAgICBNOiBuZXcgUmVnRXhwICgnXFxcXCVNKC4rPylcXFxcWyhcXFxcdyspXFxcXHwoXFxcXHcrKVxcXFxdJywgJ2cnKSwgLy8gbW9udGhzIFxyXG4gICAgICAgICAgICB3OiBuZXcgUmVnRXhwICgnXFxcXCV3KC4rPylcXFxcWyhcXFxcdyspXFxcXHwoXFxcXHcrKVxcXFxdJywgJ2cnKSwgLy8gd2Vla3NcclxuICAgICAgICAgICAgZDogbmV3IFJlZ0V4cCAoJ1xcXFwlZCguKz8pXFxcXFsoXFxcXHcrKVxcXFx8KFxcXFx3KylcXFxcXScsICdnJyksIC8vIGRheXNcclxuICAgICAgICAgICAgaDogbmV3IFJlZ0V4cCAoJ1xcXFwlaCguKz8pXFxcXFsoXFxcXHcrKVxcXFx8KFxcXFx3KylcXFxcXScsICdnJyksIC8vIGhvdXJzXHJcbiAgICAgICAgICAgIG06IG5ldyBSZWdFeHAgKCdcXFxcJW0oLis/KVxcXFxbKFxcXFx3KylcXFxcfChcXFxcdyspXFxcXF0nLCAnZycpLCAvLyBtaW51dGVzXHJcbiAgICAgICAgICAgIHM6IG5ldyBSZWdFeHAgKCdcXFxcJXMoLis/KVxcXFxbKFxcXFx3KylcXFxcfChcXFxcdyspXFxcXF0nLCAnZycpICAvLyBzZWNvbmRzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGZvcm1hdFRva2VuID0gZnVuY3Rpb24oc3RyLCB0b2tlbiwgdmFsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoIXRva2Vuc1t0b2tlbl0pPyAnJzogc3RyLm1hdGNoKC9cXFt8XFxdL2cpIFxyXG4gICAgICAgICAgICAgICAgICAgICYmIChzdHIucmVwbGFjZSh0b2tlbnNbdG9rZW5dLCB2YWwrJyQxJysgKChwYXJzZUludCh2YWwsIDEwKTwyKT8nJDInOickMycpKSB8fCAnJylcclxuICAgICAgICAgICAgICAgICAgICB8fCBzdHIucmVwbGFjZSgnJScrdG9rZW4sIHZhbCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGZvcm1hdCA9IGZ1bmN0aW9uKHN0ciwgb2JqKSB7XHJcbiAgICAgICAgICAgIHZhciBvID0gc3RyO1xyXG4gICAgICAgICAgICBvID0gZm9ybWF0VG9rZW4obywgJ3knLCBvYmoueWVhcnMpO1xyXG4gICAgICAgICAgICBvID0gZm9ybWF0VG9rZW4obywgJ00nLCBvYmoubW9udGhzKTtcclxuICAgICAgICAgICAgbyA9IGZvcm1hdFRva2VuKG8sICd3Jywgb2JqLndlZWtzKTtcclxuICAgICAgICAgICAgbyA9IGZvcm1hdFRva2VuKG8sICdkJywgb2JqLmRheXMpO1xyXG4gICAgICAgICAgICBvID0gZm9ybWF0VG9rZW4obywgJ2gnLCBvYmouaG91cnMpO1xyXG4gICAgICAgICAgICBvID0gZm9ybWF0VG9rZW4obywgJ20nLCBvYmoubWludXRlcyk7XHJcbiAgICAgICAgICAgIG8gPSBmb3JtYXRUb2tlbihvLCAncycsIG9iai5zZWNvbmRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIG87XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIHVwZGF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB2YXIgZGF0ZV9vYmogPSBjYWxjKGNkLmRhdGUpO1xyXG4gICAgICAgICAgICBpZiAoZGF0ZV9vYmogPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIGNkLnN0b3AoKTsgY2xlYXJJbnRlcnZhbChjZC5pZCk7XHJcbiAgICAgICAgICAgICAgICAkKGNkLmVsKS5odG1sKG9wdGlvbnMubXNnTm93KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgJChjZC5lbCkudGV4dChmb3JtYXQob3B0aW9ucy5tc2dGb3JtYXQsIGRhdGVfb2JqKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgYXBwbHlfbW9kaWZpZXJzID0gZnVuY3Rpb24gKG1vZGlmaWVycywgZGF0ZSkge1xyXG4gICAgICAgICAgICBpZiAobW9kaWZpZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBtb2RpZmllcl9yZSA9IC9eKFsrLV1cXGQrKShbeU1kaG1zXSkkLztcclxuICAgICAgICAgICAgdmFyIGNvbnZlcnNpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgczogMTAwMCxcclxuICAgICAgICAgICAgICAgIG06IDYwICogMTAwMCxcclxuICAgICAgICAgICAgICAgIGg6IDYwICogNjAgKiAxMDAwLFxyXG4gICAgICAgICAgICAgICAgZDogMjQgKiA2MCAqIDYwICogMTAwMCxcclxuICAgICAgICAgICAgICAgIE06IDMwICogMjQgKiA2MCAqIDYwICogMTAwMCxcclxuICAgICAgICAgICAgICAgIHk6IDM2NSAqIDI0ICogNjAgKiA2MCAqIDEwMDBcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHZhciBkaXNwbGFjZW1lbnQgPSAwO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IG1vZGlmaWVycy5sZW5ndGg7IGkgPCBuOyArK2kpIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IG1vZGlmaWVyc1tpXS5tYXRjaChtb2RpZmllcl9yZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGFjZW1lbnQgKz0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSAqIGNvbnZlcnNpb25zW21hdGNoWzJdXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgKyBkaXNwbGFjZW1lbnQpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciBjZCA9IHtcclxuICAgICAgICAgICAgaWQgICAgOiBzZXRJbnRlcnZhbCh1cGRhdGUsIG9wdGlvbnMuaW50ZXJ2YWwpLFxyXG4gICAgICAgICAgICBlbCAgICA6IGVsLFxyXG4gICAgICAgICAgICBzdGFydCA6IGZ1bmN0aW9uKCl7IHJldHVybiBuZXcgY291bnRkb3duKCQodGhpcy5lbCksIG9wdGlvbnMpOyB9LFxyXG4gICAgICAgICAgICBzdG9wICA6IGZ1bmN0aW9uKCl7IHJldHVybiBjbGVhckludGVydmFsKHRoaXMuaWQpOyB9LFxyXG4gICAgICAgICAgICBkYXRlICA6IGFwcGx5X21vZGlmaWVycyhvcHRpb25zLm1vZGlmaWVycywgb3B0aW9ucy5kYXRlKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgJChlbCkuZGF0YSgnY291bnRkb3duJywgY2QpO1xyXG4gICAgICAgIHVwZGF0ZSgpO1xyXG4gICAgICAgIHJldHVybiAkKGVsKS5kYXRhKCdjb3VudGRvd24nKTtcclxuICAgIH1cclxuICAgICQuZm4uY291bnRkb3duID0gZnVuY3Rpb24oYXJncykgeyBpZih0aGlzLmdldCgwKSkgcmV0dXJuIG5ldyBjb3VudGRvd24odGhpcy5nZXQoMCksIGFyZ3MpOyB9O1xyXG59KShqUXVlcnkpO1xyXG4vKlxyXG4gKiBqUXVlcnkgQ3ljbGUgUGx1Z2luIGZvciBsaWdodC13ZWlnaHQgc2xpZGVzaG93c1xyXG4gKiBFeGFtcGxlcyBhbmQgZG9jdW1lbnRhdGlvbiBhdDogaHR0cDovL21hbHN1cC5jb20vanF1ZXJ5L2N5Y2xlL1xyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBNLiBBbHN1cFxyXG4gKiBWZXJzaW9uOiAyLjI0ICgwNy8zMC8yMDA4KVxyXG4gKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlczpcclxuICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcclxuICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sXHJcbiAqIFJlcXVpcmVzOiBqUXVlcnkgdjEuMi4zIG9yIGxhdGVyXHJcbiAqXHJcbiAqIEJhc2VkIG9uIHRoZSB3b3JrIG9mOlxyXG4gKiAgMSkgTWF0dCBPYWtlcyAoaHR0cDovL3BvcnRmb2xpby5naXpvbmUuY28udWsvYXBwbGljYXRpb25zL3NsaWRlc2hvdy8pXHJcbiAqICAyKSBUb3JzdGVuIEJhbGRlcyAoaHR0cDovL21lZGllbmZyZXVuZGUuY29tL2xhYi9pbm5lcmZhZGUvKVxyXG4gKiAgMykgQmVuamFtaW4gU3RlcmxpbmcgKGh0dHA6Ly93d3cuYmVuamFtaW5zdGVybGluZy5jb20vZXhwZXJpbWVudHMvanFTaHVmZmxlLylcclxuICovXHJcbjsoZnVuY3Rpb24oJCkge1xyXG5cclxudmFyIHZlciA9ICcyLjI0JztcclxudmFyIGllNiA9ICQuYnJvd3Nlci5tc2llICYmIC9NU0lFIDYuMC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcclxuXHJcbmZ1bmN0aW9uIGxvZygpIHtcclxuICAgIGlmICh3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cpXHJcbiAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdbY3ljbGVdICcgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywnJykpO1xyXG59O1xyXG5cclxuJC5mbi5jeWNsZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zID09PSBudWxsKVxyXG4gICAgICAgICAgICBvcHRpb25zID0ge307XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaChvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N0b3AnOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3ljbGVUaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5jeWNsZVRpbWVvdXQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jeWNsZVRpbWVvdXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5kYXRhKCdjeWNsZS5vcHRzJywgJycpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlICdwYXVzZSc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN5Y2xlUGF1c2UgPSAxO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlICdyZXN1bWUnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jeWNsZVBhdXNlID0gMDtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7IGZ4OiBvcHRpb25zIH07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuY29uc3RydWN0b3IgPT0gTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIC8vIGdvIHRvIHRoZSByZXF1ZXN0ZWQgc2xpZGUgc2xpZGVcclxuICAgICAgICAgICAgdmFyIG51bSA9IG9wdGlvbnM7XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSAkKHRoaXMpLmRhdGEoJ2N5Y2xlLm9wdHMnKTtcclxuICAgICAgICAgICAgaWYgKCFvcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBsb2coJ29wdGlvbnMgbm90IGZvdW5kLCBjYW4gbm90IGFkdmFuY2Ugc2xpZGUnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobnVtIDwgMCB8fCBudW0gPj0gb3B0aW9ucy5lbGVtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGxvZygnaW52YWxpZCBzbGlkZSBpbmRleDogJyArIG51bSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3B0aW9ucy5uZXh0U2xpZGUgPSBudW07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN5Y2xlVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY3ljbGVUaW1lb3V0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3ljbGVUaW1lb3V0ID0gMDtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBnbyhvcHRpb25zLmVsZW1lbnRzLCBvcHRpb25zLCAxLCAxKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc3RvcCBleGlzdGluZyBzbGlkZXNob3cgZm9yIHRoaXMgY29udGFpbmVyIChpZiB0aGVyZSBpcyBvbmUpXHJcbiAgICAgICAgaWYgKHRoaXMuY3ljbGVUaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5jeWNsZVRpbWVvdXQpO1xyXG4gICAgICAgIHRoaXMuY3ljbGVUaW1lb3V0ID0gMDtcclxuICAgICAgICB0aGlzLmN5Y2xlUGF1c2UgPSAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciAkY29udCA9ICQodGhpcyk7XHJcbiAgICAgICAgdmFyICRzbGlkZXMgPSBvcHRpb25zLnNsaWRlRXhwciA/ICQob3B0aW9ucy5zbGlkZUV4cHIsIHRoaXMpIDogJGNvbnQuY2hpbGRyZW4oKTtcclxuICAgICAgICB2YXIgZWxzID0gJHNsaWRlcy5nZXQoKTtcclxuICAgICAgICBpZiAoZWxzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICAgICAgbG9nKCd0ZXJtaW5hdGluZzsgdG9vIGZldyBzbGlkZXM6ICcgKyBlbHMubGVuZ3RoKTtcclxuICAgICAgICAgICAgcmV0dXJuOyAvLyBkb24ndCBib3RoZXJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHN1cHBvcnQgbWV0YWRhdGEgcGx1Z2luICh2MS4wIGFuZCB2Mi4wKVxyXG4gICAgICAgIHZhciBvcHRzID0gJC5leHRlbmQoe30sICQuZm4uY3ljbGUuZGVmYXVsdHMsIG9wdGlvbnMgfHwge30sICQubWV0YWRhdGEgPyAkY29udC5tZXRhZGF0YSgpIDogJC5tZXRhID8gJGNvbnQuZGF0YSgpIDoge30pO1xyXG4gICAgICAgIGlmIChvcHRzLmF1dG9zdG9wKSBcclxuICAgICAgICAgICAgb3B0cy5jb3VudGRvd24gPSBvcHRzLmF1dG9zdG9wQ291bnQgfHwgZWxzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgJGNvbnQuZGF0YSgnY3ljbGUub3B0cycsIG9wdHMpO1xyXG4gICAgICAgIG9wdHMuY29udGFpbmVyID0gdGhpcztcclxuXHJcbiAgICAgICAgb3B0cy5lbGVtZW50cyA9IGVscztcclxuICAgICAgICBvcHRzLmJlZm9yZSA9IG9wdHMuYmVmb3JlID8gW29wdHMuYmVmb3JlXSA6IFtdO1xyXG4gICAgICAgIG9wdHMuYWZ0ZXIgPSBvcHRzLmFmdGVyID8gW29wdHMuYWZ0ZXJdIDogW107XHJcbiAgICAgICAgb3B0cy5hZnRlci51bnNoaWZ0KGZ1bmN0aW9uKCl7IG9wdHMuYnVzeT0wOyB9KTtcclxuICAgICAgICBpZiAob3B0cy5jb250aW51b3VzKVxyXG4gICAgICAgICAgICBvcHRzLmFmdGVyLnB1c2goZnVuY3Rpb24oKSB7IGdvKGVscyxvcHRzLDAsIW9wdHMucmV2KTsgfSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIC8vIGNsZWFyVHlwZSBjb3JyZWN0aW9uc1xyXG4gICAgICAgIGlmIChpZTYgJiYgb3B0cy5jbGVhcnR5cGUgJiYgIW9wdHMuY2xlYXJ0eXBlTm9CZylcclxuICAgICAgICAgICAgY2xlYXJUeXBlRml4KCRzbGlkZXMpO1xyXG5cclxuICAgICAgICAvLyBhbGxvdyBzaG9ydGhhbmQgb3ZlcnJpZGVzIG9mIHdpZHRoLCBoZWlnaHQgYW5kIHRpbWVvdXRcclxuICAgICAgICB2YXIgY2xzID0gdGhpcy5jbGFzc05hbWU7XHJcbiAgICAgICAgb3B0cy53aWR0aCA9IHBhcnNlSW50KChjbHMubWF0Y2goL3c6KFxcZCspLyl8fFtdKVsxXSkgfHwgb3B0cy53aWR0aDtcclxuICAgICAgICBvcHRzLmhlaWdodCA9IHBhcnNlSW50KChjbHMubWF0Y2goL2g6KFxcZCspLyl8fFtdKVsxXSkgfHwgb3B0cy5oZWlnaHQ7XHJcbiAgICAgICAgb3B0cy50aW1lb3V0ID0gcGFyc2VJbnQoKGNscy5tYXRjaCgvdDooXFxkKykvKXx8W10pWzFdKSB8fCBvcHRzLnRpbWVvdXQ7XHJcblxyXG4gICAgICAgIGlmICgkY29udC5jc3MoJ3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpIFxyXG4gICAgICAgICAgICAkY29udC5jc3MoJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJyk7XHJcbiAgICAgICAgaWYgKG9wdHMud2lkdGgpIFxyXG4gICAgICAgICAgICAkY29udC53aWR0aChvcHRzLndpZHRoKTtcclxuICAgICAgICBpZiAob3B0cy5oZWlnaHQgJiYgb3B0cy5oZWlnaHQgIT0gJ2F1dG8nKSBcclxuICAgICAgICAgICAgJGNvbnQuaGVpZ2h0KG9wdHMuaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgaWYgKG9wdHMucmFuZG9tKSB7XHJcbiAgICAgICAgICAgIG9wdHMucmFuZG9tTWFwID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSBcclxuICAgICAgICAgICAgICAgIG9wdHMucmFuZG9tTWFwLnB1c2goaSk7XHJcbiAgICAgICAgICAgIG9wdHMucmFuZG9tTWFwLnNvcnQoZnVuY3Rpb24oYSxiKSB7cmV0dXJuIE1hdGgucmFuZG9tKCkgLSAwLjU7fSk7XHJcbiAgICAgICAgICAgIG9wdHMucmFuZG9tSW5kZXggPSAwO1xyXG4gICAgICAgICAgICBvcHRzLnN0YXJ0aW5nU2xpZGUgPSBvcHRzLnJhbmRvbU1hcFswXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob3B0cy5zdGFydGluZ1NsaWRlID49IGVscy5sZW5ndGgpXHJcbiAgICAgICAgICAgIG9wdHMuc3RhcnRpbmdTbGlkZSA9IDA7IC8vIGNhdGNoIGJvZ3VzIGlucHV0XHJcbiAgICAgICAgdmFyIGZpcnN0ID0gb3B0cy5zdGFydGluZ1NsaWRlIHx8IDA7XHJcbiAgICAgICAgJHNsaWRlcy5jc3Moe3Bvc2l0aW9uOiAnYWJzb2x1dGUnLCB0b3A6MCwgbGVmdDowfSkuaGlkZSgpLmVhY2goZnVuY3Rpb24oaSkgeyBcclxuICAgICAgICAgICAgdmFyIHogPSBmaXJzdCA/IGkgPj0gZmlyc3QgPyBlbHMubGVuZ3RoIC0gKGktZmlyc3QpIDogZmlyc3QtaSA6IGVscy5sZW5ndGgtaTtcclxuICAgICAgICAgICAgJCh0aGlzKS5jc3MoJ3otaW5kZXgnLCB6KSBcclxuICAgICAgICB9KTtcclxuICAgICAgICBcclxuICAgICAgICAkKGVsc1tmaXJzdF0pLmNzcygnb3BhY2l0eScsMSkuc2hvdygpOyAvLyBvcGFjaXR5IGJpdCBuZWVkZWQgdG8gaGFuZGxlIHJlaW5pdCBjYXNlXHJcbiAgICAgICAgaWYgKCQuYnJvd3Nlci5tc2llKSBlbHNbZmlyc3RdLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnZmlsdGVyJyk7XHJcblxyXG4gICAgICAgIGlmIChvcHRzLmZpdCAmJiBvcHRzLndpZHRoKSBcclxuICAgICAgICAgICAgJHNsaWRlcy53aWR0aChvcHRzLndpZHRoKTtcclxuICAgICAgICBpZiAob3B0cy5maXQgJiYgb3B0cy5oZWlnaHQgJiYgb3B0cy5oZWlnaHQgIT0gJ2F1dG8nKSBcclxuICAgICAgICAgICAgJHNsaWRlcy5oZWlnaHQob3B0cy5oZWlnaHQpO1xyXG4gICAgICAgIGlmIChvcHRzLnBhdXNlKSBcclxuICAgICAgICAgICAgJGNvbnQuaG92ZXIoZnVuY3Rpb24oKXt0aGlzLmN5Y2xlUGF1c2U9MTt9LGZ1bmN0aW9uKCl7dGhpcy5jeWNsZVBhdXNlPTA7fSk7XHJcblxyXG4gICAgICAgIC8vIHJ1biB0cmFuc2l0aW9uIGluaXQgZm5cclxuICAgICAgICB2YXIgaW5pdCA9ICQuZm4uY3ljbGUudHJhbnNpdGlvbnNbb3B0cy5meF07XHJcbiAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihpbml0KSlcclxuICAgICAgICAgICAgaW5pdCgkY29udCwgJHNsaWRlcywgb3B0cyk7XHJcbiAgICAgICAgZWxzZSBpZiAob3B0cy5meCAhPSAnY3VzdG9tJylcclxuICAgICAgICAgICAgbG9nKCd1bmtub3duIHRyYW5zaXRpb246ICcgKyBvcHRzLmZ4KTtcclxuICAgICAgICBcclxuICAgICAgICAkc2xpZGVzLmVhY2goZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciAkZWwgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLmN5Y2xlSCA9IChvcHRzLmZpdCAmJiBvcHRzLmhlaWdodCkgPyBvcHRzLmhlaWdodCA6ICRlbC5oZWlnaHQoKTtcclxuICAgICAgICAgICAgdGhpcy5jeWNsZVcgPSAob3B0cy5maXQgJiYgb3B0cy53aWR0aCkgPyBvcHRzLndpZHRoIDogJGVsLndpZHRoKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG9wdHMuY3NzQmVmb3JlID0gb3B0cy5jc3NCZWZvcmUgfHwge307XHJcbiAgICAgICAgb3B0cy5hbmltSW4gPSBvcHRzLmFuaW1JbiB8fCB7fTtcclxuICAgICAgICBvcHRzLmFuaW1PdXQgPSBvcHRzLmFuaW1PdXQgfHwge307XHJcblxyXG4gICAgICAgICRzbGlkZXMubm90KCc6ZXEoJytmaXJzdCsnKScpLmNzcyhvcHRzLmNzc0JlZm9yZSk7XHJcbiAgICAgICAgaWYgKG9wdHMuY3NzRmlyc3QpXHJcbiAgICAgICAgICAgICQoJHNsaWRlc1tmaXJzdF0pLmNzcyhvcHRzLmNzc0ZpcnN0KTtcclxuXHJcbiAgICAgICAgaWYgKG9wdHMudGltZW91dCkge1xyXG4gICAgICAgICAgICAvLyBlbnN1cmUgdGhhdCB0aW1lb3V0IGFuZCBzcGVlZCBzZXR0aW5ncyBhcmUgc2FuZVxyXG4gICAgICAgICAgICBpZiAob3B0cy5zcGVlZC5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpXHJcbiAgICAgICAgICAgICAgICBvcHRzLnNwZWVkID0ge3Nsb3c6IDYwMCwgZmFzdDogMjAwfVtvcHRzLnNwZWVkXSB8fCA0MDA7XHJcbiAgICAgICAgICAgIGlmICghb3B0cy5zeW5jKVxyXG4gICAgICAgICAgICAgICAgb3B0cy5zcGVlZCA9IG9wdHMuc3BlZWQgLyAyO1xyXG4gICAgICAgICAgICB3aGlsZSgob3B0cy50aW1lb3V0IC0gb3B0cy5zcGVlZCkgPCAyNTApXHJcbiAgICAgICAgICAgICAgICBvcHRzLnRpbWVvdXQgKz0gb3B0cy5zcGVlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuZWFzaW5nKSBcclxuICAgICAgICAgICAgb3B0cy5lYXNlSW4gPSBvcHRzLmVhc2VPdXQgPSBvcHRzLmVhc2luZztcclxuICAgICAgICBpZiAoIW9wdHMuc3BlZWRJbikgXHJcbiAgICAgICAgICAgIG9wdHMuc3BlZWRJbiA9IG9wdHMuc3BlZWQ7XHJcbiAgICAgICAgaWYgKCFvcHRzLnNwZWVkT3V0KSBcclxuICAgICAgICAgICAgb3B0cy5zcGVlZE91dCA9IG9wdHMuc3BlZWQ7XHJcblxyXG4gXHRcdG9wdHMuc2xpZGVDb3VudCA9IGVscy5sZW5ndGg7XHJcbiAgICAgICAgb3B0cy5jdXJyU2xpZGUgPSBmaXJzdDtcclxuICAgICAgICBpZiAob3B0cy5yYW5kb20pIHtcclxuICAgICAgICAgICAgb3B0cy5uZXh0U2xpZGUgPSBvcHRzLmN1cnJTbGlkZTtcclxuICAgICAgICAgICAgaWYgKCsrb3B0cy5yYW5kb21JbmRleCA9PSBlbHMubGVuZ3RoKSBcclxuICAgICAgICAgICAgICAgIG9wdHMucmFuZG9tSW5kZXggPSAwO1xyXG4gICAgICAgICAgICBvcHRzLm5leHRTbGlkZSA9IG9wdHMucmFuZG9tTWFwW29wdHMucmFuZG9tSW5kZXhdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIG9wdHMubmV4dFNsaWRlID0gb3B0cy5zdGFydGluZ1NsaWRlID49IChlbHMubGVuZ3RoLTEpID8gMCA6IG9wdHMuc3RhcnRpbmdTbGlkZSsxO1xyXG5cclxuICAgICAgICAvLyBmaXJlIGFydGlmaWNpYWwgZXZlbnRzXHJcbiAgICAgICAgdmFyIGUwID0gJHNsaWRlc1tmaXJzdF07XHJcbiAgICAgICAgaWYgKG9wdHMuYmVmb3JlLmxlbmd0aClcclxuICAgICAgICAgICAgb3B0cy5iZWZvcmVbMF0uYXBwbHkoZTAsIFtlMCwgZTAsIG9wdHMsIHRydWVdKTtcclxuICAgICAgICBpZiAob3B0cy5hZnRlci5sZW5ndGggPiAxKVxyXG4gICAgICAgICAgICBvcHRzLmFmdGVyWzFdLmFwcGx5KGUwLCBbZTAsIGUwLCBvcHRzLCB0cnVlXSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKG9wdHMuY2xpY2sgJiYgIW9wdHMubmV4dClcclxuICAgICAgICAgICAgb3B0cy5uZXh0ID0gb3B0cy5jbGljaztcclxuICAgICAgICBpZiAob3B0cy5uZXh0KVxyXG4gICAgICAgICAgICAkKG9wdHMubmV4dCkuYmluZCgnY2xpY2snLCBmdW5jdGlvbigpe3JldHVybiBhZHZhbmNlKGVscyxvcHRzLG9wdHMucmV2Py0xOjEpfSk7XHJcbiAgICAgICAgaWYgKG9wdHMucHJldilcclxuICAgICAgICAgICAgJChvcHRzLnByZXYpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oKXtyZXR1cm4gYWR2YW5jZShlbHMsb3B0cyxvcHRzLnJldj8xOi0xKX0pO1xyXG4gICAgICAgIGlmIChvcHRzLnBhZ2VyKVxyXG4gICAgICAgICAgICBidWlsZFBhZ2VyKGVscyxvcHRzKTtcclxuXHJcbiAgICAgICAgLy8gZXhwb3NlIGZuIGZvciBhZGRpbmcgc2xpZGVzIGFmdGVyIHRoZSBzaG93IGhhcyBzdGFydGVkXHJcbiAgICAgICAgb3B0cy5hZGRTbGlkZSA9IGZ1bmN0aW9uKG5ld1NsaWRlKSB7XHJcbiAgICAgICAgICAgIHZhciAkcyA9ICQobmV3U2xpZGUpLCBzID0gJHNbMF07XHJcbiAgICAgICAgICAgIGlmICghb3B0cy5hdXRvc3RvcENvdW50KVxyXG4gICAgICAgICAgICAgICAgb3B0cy5jb3VudGRvd24rKztcclxuICAgICAgICAgICAgZWxzLnB1c2gocyk7XHJcbiAgICAgICAgICAgIGlmIChvcHRzLmVscykgXHJcbiAgICAgICAgICAgICAgICBvcHRzLmVscy5wdXNoKHMpOyAvLyBzaHVmZmxlIG5lZWRzIHRoaXNcclxuICAgICAgICAgICAgb3B0cy5zbGlkZUNvdW50ID0gZWxzLmxlbmd0aDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICRzLmNzcygncG9zaXRpb24nLCdhYnNvbHV0ZScpLmFwcGVuZFRvKCRjb250KTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChpZTYgJiYgb3B0cy5jbGVhcnR5cGUgJiYgIW9wdHMuY2xlYXJ0eXBlTm9CZylcclxuICAgICAgICAgICAgICAgIGNsZWFyVHlwZUZpeCgkcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0cy5maXQgJiYgb3B0cy53aWR0aCkgXHJcbiAgICAgICAgICAgICAgICAkcy53aWR0aChvcHRzLndpZHRoKTtcclxuICAgICAgICAgICAgaWYgKG9wdHMuZml0ICYmIG9wdHMuaGVpZ2h0ICYmIG9wdHMuaGVpZ2h0ICE9ICdhdXRvJykgXHJcbiAgICAgICAgICAgICAgICAkc2xpZGVzLmhlaWdodChvcHRzLmhlaWdodCk7XHJcbiAgICAgICAgICAgIHMuY3ljbGVIID0gKG9wdHMuZml0ICYmIG9wdHMuaGVpZ2h0KSA/IG9wdHMuaGVpZ2h0IDogJHMuaGVpZ2h0KCk7XHJcbiAgICAgICAgICAgIHMuY3ljbGVXID0gKG9wdHMuZml0ICYmIG9wdHMud2lkdGgpID8gb3B0cy53aWR0aCA6ICRzLndpZHRoKCk7XHJcblxyXG4gICAgICAgICAgICAkcy5jc3Mob3B0cy5jc3NCZWZvcmUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wdHMucGFnZXIpXHJcbiAgICAgICAgICAgICAgICAkLmZuLmN5Y2xlLmNyZWF0ZVBhZ2VyQW5jaG9yKGVscy5sZW5ndGgtMSwgcywgJChvcHRzLnBhZ2VyKSwgZWxzLCBvcHRzKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0cy5vbkFkZFNsaWRlID09ICdmdW5jdGlvbicpXHJcbiAgICAgICAgICAgICAgICBvcHRzLm9uQWRkU2xpZGUoJHMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChvcHRzLnRpbWVvdXQgfHwgb3B0cy5jb250aW51b3VzKVxyXG4gICAgICAgICAgICB0aGlzLmN5Y2xlVGltZW91dCA9IHNldFRpbWVvdXQoXHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbigpe2dvKGVscyxvcHRzLDAsIW9wdHMucmV2KX0sIFxyXG4gICAgICAgICAgICAgICAgb3B0cy5jb250aW51b3VzID8gMTAgOiBvcHRzLnRpbWVvdXQgKyAob3B0cy5kZWxheXx8MCkpO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBnbyhlbHMsIG9wdHMsIG1hbnVhbCwgZndkKSB7XHJcbiAgICBpZiAob3B0cy5idXN5KSByZXR1cm47XHJcbiAgICB2YXIgcCA9IG9wdHMuY29udGFpbmVyLCBjdXJyID0gZWxzW29wdHMuY3VyclNsaWRlXSwgbmV4dCA9IGVsc1tvcHRzLm5leHRTbGlkZV07XHJcbiAgICBpZiAocC5jeWNsZVRpbWVvdXQgPT09IDAgJiYgIW1hbnVhbCkgXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmICghbWFudWFsICYmICFwLmN5Y2xlUGF1c2UgJiYgXHJcbiAgICAgICAgKChvcHRzLmF1dG9zdG9wICYmICgtLW9wdHMuY291bnRkb3duIDw9IDApKSB8fFxyXG4gICAgICAgIChvcHRzLm5vd3JhcCAmJiAhb3B0cy5yYW5kb20gJiYgb3B0cy5uZXh0U2xpZGUgPCBvcHRzLmN1cnJTbGlkZSkpKSB7XHJcbiAgICAgICAgaWYgKG9wdHMuZW5kKVxyXG4gICAgICAgICAgICBvcHRzLmVuZChvcHRzKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1hbnVhbCB8fCAhcC5jeWNsZVBhdXNlKSB7XHJcbiAgICAgICAgaWYgKG9wdHMuYmVmb3JlLmxlbmd0aClcclxuICAgICAgICAgICAgJC5lYWNoKG9wdHMuYmVmb3JlLCBmdW5jdGlvbihpLG8pIHsgby5hcHBseShuZXh0LCBbY3VyciwgbmV4dCwgb3B0cywgZndkXSk7IH0pO1xyXG4gICAgICAgIHZhciBhZnRlciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZiAoJC5icm93c2VyLm1zaWUgJiYgb3B0cy5jbGVhcnR5cGUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnZmlsdGVyJyk7XHJcbiAgICAgICAgICAgICQuZWFjaChvcHRzLmFmdGVyLCBmdW5jdGlvbihpLG8pIHsgby5hcHBseShuZXh0LCBbY3VyciwgbmV4dCwgb3B0cywgZndkXSk7IH0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChvcHRzLm5leHRTbGlkZSAhPSBvcHRzLmN1cnJTbGlkZSkge1xyXG4gICAgICAgICAgICBvcHRzLmJ1c3kgPSAxO1xyXG4gICAgICAgICAgICBpZiAob3B0cy5meEZuKVxyXG4gICAgICAgICAgICAgICAgb3B0cy5meEZuKGN1cnIsIG5leHQsIG9wdHMsIGFmdGVyLCBmd2QpO1xyXG4gICAgICAgICAgICBlbHNlIGlmICgkLmlzRnVuY3Rpb24oJC5mbi5jeWNsZVtvcHRzLmZ4XSkpXHJcbiAgICAgICAgICAgICAgICAkLmZuLmN5Y2xlW29wdHMuZnhdKGN1cnIsIG5leHQsIG9wdHMsIGFmdGVyKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgJC5mbi5jeWNsZS5jdXN0b20oY3VyciwgbmV4dCwgb3B0cywgYWZ0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5yYW5kb20pIHtcclxuICAgICAgICAgICAgb3B0cy5jdXJyU2xpZGUgPSBvcHRzLm5leHRTbGlkZTtcclxuICAgICAgICAgICAgaWYgKCsrb3B0cy5yYW5kb21JbmRleCA9PSBlbHMubGVuZ3RoKSBcclxuICAgICAgICAgICAgICAgIG9wdHMucmFuZG9tSW5kZXggPSAwO1xyXG4gICAgICAgICAgICBvcHRzLm5leHRTbGlkZSA9IG9wdHMucmFuZG9tTWFwW29wdHMucmFuZG9tSW5kZXhdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHsgLy8gc2VxdWVuY2VcclxuICAgICAgICAgICAgdmFyIHJvbGwgPSAob3B0cy5uZXh0U2xpZGUgKyAxKSA9PSBlbHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBvcHRzLm5leHRTbGlkZSA9IHJvbGwgPyAwIDogb3B0cy5uZXh0U2xpZGUrMTtcclxuICAgICAgICAgICAgb3B0cy5jdXJyU2xpZGUgPSByb2xsID8gZWxzLmxlbmd0aC0xIDogb3B0cy5uZXh0U2xpZGUtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMucGFnZXIpXHJcbiAgICAgICAgICAgICQuZm4uY3ljbGUudXBkYXRlQWN0aXZlUGFnZXJMaW5rKG9wdHMucGFnZXIsIG9wdHMuY3VyclNsaWRlKTtcclxuICAgIH1cclxuICAgIGlmIChvcHRzLnRpbWVvdXQgJiYgIW9wdHMuY29udGludW91cylcclxuICAgICAgICBwLmN5Y2xlVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGdvKGVscyxvcHRzLDAsIW9wdHMucmV2KSB9LCBvcHRzLnRpbWVvdXQpO1xyXG4gICAgZWxzZSBpZiAob3B0cy5jb250aW51b3VzICYmIHAuY3ljbGVQYXVzZSkgXHJcbiAgICAgICAgcC5jeWNsZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBnbyhlbHMsb3B0cywwLCFvcHRzLnJldikgfSwgMTApO1xyXG59O1xyXG5cclxuJC5mbi5jeWNsZS51cGRhdGVBY3RpdmVQYWdlckxpbmsgPSBmdW5jdGlvbihwYWdlciwgY3VyclNsaWRlKSB7XHJcbiAgICAkKHBhZ2VyKS5maW5kKCdhJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZVNsaWRlJykuZmlsdGVyKCdhOmVxKCcrY3VyclNsaWRlKycpJykuYWRkQ2xhc3MoJ2FjdGl2ZVNsaWRlJyk7XHJcbn07XHJcblxyXG4vLyBhZHZhbmNlIHNsaWRlIGZvcndhcmQgb3IgYmFja1xyXG5mdW5jdGlvbiBhZHZhbmNlKGVscywgb3B0cywgdmFsKSB7XHJcbiAgICB2YXIgcCA9IG9wdHMuY29udGFpbmVyLCB0aW1lb3V0ID0gcC5jeWNsZVRpbWVvdXQ7XHJcbiAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcclxuICAgICAgICBwLmN5Y2xlVGltZW91dCA9IDA7XHJcbiAgICB9XHJcbiAgICBpZiAob3B0cy5yYW5kb20gJiYgdmFsIDwgMCkge1xyXG4gICAgICAgIC8vIG1vdmUgYmFjayB0byB0aGUgcHJldmlvdXNseSBkaXNwbGF5IHNsaWRlXHJcbiAgICAgICAgb3B0cy5yYW5kb21JbmRleC0tO1xyXG4gICAgICAgIGlmICgtLW9wdHMucmFuZG9tSW5kZXggPT0gLTIpXHJcbiAgICAgICAgICAgIG9wdHMucmFuZG9tSW5kZXggPSBlbHMubGVuZ3RoLTI7XHJcbiAgICAgICAgZWxzZSBpZiAob3B0cy5yYW5kb21JbmRleCA9PSAtMSlcclxuICAgICAgICAgICAgb3B0cy5yYW5kb21JbmRleCA9IGVscy5sZW5ndGgtMTtcclxuICAgICAgICBvcHRzLm5leHRTbGlkZSA9IG9wdHMucmFuZG9tTWFwW29wdHMucmFuZG9tSW5kZXhdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAob3B0cy5yYW5kb20pIHtcclxuICAgICAgICBpZiAoKytvcHRzLnJhbmRvbUluZGV4ID09IGVscy5sZW5ndGgpIFxyXG4gICAgICAgICAgICBvcHRzLnJhbmRvbUluZGV4ID0gMDtcclxuICAgICAgICBvcHRzLm5leHRTbGlkZSA9IG9wdHMucmFuZG9tTWFwW29wdHMucmFuZG9tSW5kZXhdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgb3B0cy5uZXh0U2xpZGUgPSBvcHRzLmN1cnJTbGlkZSArIHZhbDtcclxuICAgICAgICBpZiAob3B0cy5uZXh0U2xpZGUgPCAwKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRzLm5vd3JhcCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBvcHRzLm5leHRTbGlkZSA9IGVscy5sZW5ndGggLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChvcHRzLm5leHRTbGlkZSA+PSBlbHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRzLm5vd3JhcCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBvcHRzLm5leHRTbGlkZSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbmxvZygnbmV4dFNsaWRlOiAnICsgb3B0cy5uZXh0U2xpZGUgKyAnOyByYW5kb21JbmRleDogJyArIG9wdHMucmFuZG9tSW5kZXgpOyAgICBcclxuICAgIGlmIChvcHRzLnByZXZOZXh0Q2xpY2sgJiYgdHlwZW9mIG9wdHMucHJldk5leHRDbGljayA9PSAnZnVuY3Rpb24nKVxyXG4gICAgICAgIG9wdHMucHJldk5leHRDbGljayh2YWwgPiAwLCBvcHRzLm5leHRTbGlkZSwgZWxzW29wdHMubmV4dFNsaWRlXSk7XHJcbiAgICBnbyhlbHMsIG9wdHMsIDEsIHZhbD49MCk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBidWlsZFBhZ2VyKGVscywgb3B0cykge1xyXG4gICAgdmFyICRwID0gJChvcHRzLnBhZ2VyKTtcclxuICAgICQuZWFjaChlbHMsIGZ1bmN0aW9uKGksbykge1xyXG4gICAgICAgICQuZm4uY3ljbGUuY3JlYXRlUGFnZXJBbmNob3IoaSxvLCRwLGVscyxvcHRzKTtcclxuICAgIH0pO1xyXG4gICAkLmZuLmN5Y2xlLnVwZGF0ZUFjdGl2ZVBhZ2VyTGluayhvcHRzLnBhZ2VyLCBvcHRzLnN0YXJ0aW5nU2xpZGUpO1xyXG59O1xyXG5cclxuJC5mbi5jeWNsZS5jcmVhdGVQYWdlckFuY2hvciA9IGZ1bmN0aW9uKGksIGVsLCAkcCwgZWxzLCBvcHRzKSB7XHJcbiAgICB2YXIgJGEgPSAodHlwZW9mIG9wdHMucGFnZXJBbmNob3JCdWlsZGVyID09ICdmdW5jdGlvbicpXHJcbiAgICAgICAgPyAkKG9wdHMucGFnZXJBbmNob3JCdWlsZGVyKGksZWwpKVxyXG4gICAgICAgIDogJCgnPGEgaHJlZj1cIiNcIj4nKyhpKzEpKyc8L2E+Jyk7XHJcbiAgICBcclxuICAgIC8vIGRvbid0IHJlcGFyZW50IGlmIGFuY2hvciBpcyBpbiB0aGUgZG9tXHJcbiAgICBpZiAoJGEucGFyZW50cygnYm9keScpLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICRhLmFwcGVuZFRvKCRwKTtcclxuICAgICAgICBcclxuICAgICRhLmJpbmQob3B0cy5wYWdlckV2ZW50LCBmdW5jdGlvbigpIHtcclxuICAgICAgICBvcHRzLm5leHRTbGlkZSA9IGk7XHJcbiAgICAgICAgdmFyIHAgPSBvcHRzLmNvbnRhaW5lciwgdGltZW91dCA9IHAuY3ljbGVUaW1lb3V0O1xyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcclxuICAgICAgICAgICAgcC5jeWNsZVRpbWVvdXQgPSAwO1xyXG4gICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICBpZiAodHlwZW9mIG9wdHMucGFnZXJDbGljayA9PSAnZnVuY3Rpb24nKVxyXG4gICAgICAgICAgICBvcHRzLnBhZ2VyQ2xpY2sob3B0cy5uZXh0U2xpZGUsIGVsc1tvcHRzLm5leHRTbGlkZV0pO1xyXG4gICAgICAgIGdvKGVscyxvcHRzLDEsb3B0cy5jdXJyU2xpZGUgPCBpKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KTtcclxufTtcclxuXHJcblxyXG4vLyB0aGlzIGZpeGVzIGNsZWFyVHlwZSBwcm9ibGVtcyBpbiBpZTYgYnkgc2V0dGluZyBhbiBleHBsaWNpdCBiZyBjb2xvclxyXG5mdW5jdGlvbiBjbGVhclR5cGVGaXgoJHNsaWRlcykge1xyXG4gICAgZnVuY3Rpb24gaGV4KHMpIHtcclxuICAgICAgICB2YXIgcyA9IHBhcnNlSW50KHMpLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICByZXR1cm4gcy5sZW5ndGggPCAyID8gJzAnK3MgOiBzO1xyXG4gICAgfTtcclxuICAgIGZ1bmN0aW9uIGdldEJnKGUpIHtcclxuICAgICAgICBmb3IgKCA7IGUgJiYgZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9ICdodG1sJzsgZSA9IGUucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICB2YXIgdiA9ICQuY3NzKGUsJ2JhY2tncm91bmQtY29sb3InKTtcclxuICAgICAgICAgICAgaWYgKHYuaW5kZXhPZigncmdiJykgPj0gMCApIHsgXHJcbiAgICAgICAgICAgICAgICB2YXIgcmdiID0gdi5tYXRjaCgvXFxkKy9nKTsgXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyMnKyBoZXgocmdiWzBdKSArIGhleChyZ2JbMV0pICsgaGV4KHJnYlsyXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHYgJiYgdiAhPSAndHJhbnNwYXJlbnQnKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnI2ZmZmZmZic7XHJcbiAgICB9O1xyXG4gICAgJHNsaWRlcy5lYWNoKGZ1bmN0aW9uKCkgeyAkKHRoaXMpLmNzcygnYmFja2dyb3VuZC1jb2xvcicsIGdldEJnKHRoaXMpKTsgfSk7XHJcbn07XHJcblxyXG5cclxuJC5mbi5jeWNsZS5jdXN0b20gPSBmdW5jdGlvbihjdXJyLCBuZXh0LCBvcHRzLCBjYikge1xyXG4gICAgdmFyICRsID0gJChjdXJyKSwgJG4gPSAkKG5leHQpO1xyXG4gICAgJG4uY3NzKG9wdHMuY3NzQmVmb3JlKTtcclxuICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeyRuLmFuaW1hdGUob3B0cy5hbmltSW4sIG9wdHMuc3BlZWRJbiwgb3B0cy5lYXNlSW4sIGNiKX07XHJcbiAgICAkbC5hbmltYXRlKG9wdHMuYW5pbU91dCwgb3B0cy5zcGVlZE91dCwgb3B0cy5lYXNlT3V0LCBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAob3B0cy5jc3NBZnRlcikgJGwuY3NzKG9wdHMuY3NzQWZ0ZXIpO1xyXG4gICAgICAgIGlmICghb3B0cy5zeW5jKSBmbigpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAob3B0cy5zeW5jKSBmbigpO1xyXG59O1xyXG5cclxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucyA9IHtcclxuICAgIGZhZGU6IGZ1bmN0aW9uKCRjb250LCAkc2xpZGVzLCBvcHRzKSB7XHJcbiAgICAgICAgJHNsaWRlcy5ub3QoJzplcSgnK29wdHMuc3RhcnRpbmdTbGlkZSsnKScpLmNzcygnb3BhY2l0eScsMCk7XHJcbiAgICAgICAgb3B0cy5iZWZvcmUucHVzaChmdW5jdGlvbigpIHsgJCh0aGlzKS5zaG93KCkgfSk7XHJcbiAgICAgICAgb3B0cy5hbmltSW4gICAgPSB7IG9wYWNpdHk6IDEgfTtcclxuICAgICAgICBvcHRzLmFuaW1PdXQgICA9IHsgb3BhY2l0eTogMCB9O1xyXG4gICAgICAgIG9wdHMuY3NzQmVmb3JlID0geyBvcGFjaXR5OiAwIH07XHJcbiAgICAgICAgb3B0cy5jc3NBZnRlciAgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xyXG4gICAgfVxyXG59O1xyXG5cclxuJC5mbi5jeWNsZS52ZXIgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHZlcjsgfTtcclxuXHJcbi8vIG92ZXJyaWRlIHRoZXNlIGdsb2JhbGx5IGlmIHlvdSBsaWtlICh0aGV5IGFyZSBhbGwgb3B0aW9uYWwpXHJcbiQuZm4uY3ljbGUuZGVmYXVsdHMgPSB7XHJcbiAgICBmeDogICAgICAgICAgICdmYWRlJywgLy8gb25lIG9mOiBmYWRlLCBzaHVmZmxlLCB6b29tLCBzY3JvbGxMZWZ0LCBldGNcclxuICAgIHRpbWVvdXQ6ICAgICAgIDQwMDAsICAvLyBtaWxsaXNlY29uZHMgYmV0d2VlbiBzbGlkZSB0cmFuc2l0aW9ucyAoMCB0byBkaXNhYmxlIGF1dG8gYWR2YW5jZSlcclxuICAgIGNvbnRpbnVvdXM6ICAgIDAsICAgICAvLyB0cnVlIHRvIHN0YXJ0IG5leHQgdHJhbnNpdGlvbiBpbW1lZGlhdGVseSBhZnRlciBjdXJyZW50IG9uZSBjb21wbGV0ZXNcclxuICAgIHNwZWVkOiAgICAgICAgIDEwMDAsICAvLyBzcGVlZCBvZiB0aGUgdHJhbnNpdGlvbiAoYW55IHZhbGlkIGZ4IHNwZWVkIHZhbHVlKVxyXG4gICAgc3BlZWRJbjogICAgICAgbnVsbCwgIC8vIHNwZWVkIG9mIHRoZSAnaW4nIHRyYW5zaXRpb25cclxuICAgIHNwZWVkT3V0OiAgICAgIG51bGwsICAvLyBzcGVlZCBvZiB0aGUgJ291dCcgdHJhbnNpdGlvblxyXG4gICAgbmV4dDogICAgICAgICAgbnVsbCwgIC8vIGlkIG9mIGVsZW1lbnQgdG8gdXNlIGFzIGNsaWNrIHRyaWdnZXIgZm9yIG5leHQgc2xpZGVcclxuICAgIHByZXY6ICAgICAgICAgIG51bGwsICAvLyBpZCBvZiBlbGVtZW50IHRvIHVzZSBhcyBjbGljayB0cmlnZ2VyIGZvciBwcmV2aW91cyBzbGlkZVxyXG4gICAgcHJldk5leHRDbGljazogbnVsbCwgIC8vIGNhbGxiYWNrIGZuIGZvciBwcmV2L25leHQgY2xpY2tzOiAgZnVuY3Rpb24oaXNOZXh0LCB6ZXJvQmFzZWRTbGlkZUluZGV4LCBzbGlkZUVsZW1lbnQpXHJcbiAgICBwYWdlcjogICAgICAgICBudWxsLCAgLy8gaWQgb2YgZWxlbWVudCB0byB1c2UgYXMgcGFnZXIgY29udGFpbmVyXHJcbiAgICBwYWdlckNsaWNrOiAgICBudWxsLCAgLy8gY2FsbGJhY2sgZm4gZm9yIHBhZ2VyIGNsaWNrczogIGZ1bmN0aW9uKHplcm9CYXNlZFNsaWRlSW5kZXgsIHNsaWRlRWxlbWVudClcclxuICAgIHBhZ2VyRXZlbnQ6ICAgJ2NsaWNrJywgLy8gZXZlbnQgd2hpY2ggZHJpdmVzIHRoZSBwYWdlciBuYXZpZ2F0aW9uXHJcbiAgICBwYWdlckFuY2hvckJ1aWxkZXI6IG51bGwsIC8vIGNhbGxiYWNrIGZuIGZvciBidWlsZGluZyBhbmNob3IgbGlua3NcclxuICAgIGJlZm9yZTogICAgICAgIG51bGwsICAvLyB0cmFuc2l0aW9uIGNhbGxiYWNrIChzY29wZSBzZXQgdG8gZWxlbWVudCB0byBiZSBzaG93bilcclxuICAgIGFmdGVyOiAgICAgICAgIG51bGwsICAvLyB0cmFuc2l0aW9uIGNhbGxiYWNrIChzY29wZSBzZXQgdG8gZWxlbWVudCB0aGF0IHdhcyBzaG93bilcclxuICAgIGVuZDogICAgICAgICAgIG51bGwsICAvLyBjYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIHNsaWRlc2hvdyB0ZXJtaW5hdGVzICh1c2Ugd2l0aCBhdXRvc3RvcCBvciBub3dyYXAgb3B0aW9ucylcclxuICAgIGVhc2luZzogICAgICAgIG51bGwsICAvLyBlYXNpbmcgbWV0aG9kIGZvciBib3RoIGluIGFuZCBvdXQgdHJhbnNpdGlvbnNcclxuICAgIGVhc2VJbjogICAgICAgIG51bGwsICAvLyBlYXNpbmcgZm9yIFwiaW5cIiB0cmFuc2l0aW9uXHJcbiAgICBlYXNlT3V0OiAgICAgICBudWxsLCAgLy8gZWFzaW5nIGZvciBcIm91dFwiIHRyYW5zaXRpb25cclxuICAgIHNodWZmbGU6ICAgICAgIG51bGwsICAvLyBjb29yZHMgZm9yIHNodWZmbGUgYW5pbWF0aW9uLCBleDogeyB0b3A6MTUsIGxlZnQ6IDIwMCB9XHJcbiAgICBhbmltSW46ICAgICAgICBudWxsLCAgLy8gcHJvcGVydGllcyB0aGF0IGRlZmluZSBob3cgdGhlIHNsaWRlIGFuaW1hdGVzIGluXHJcbiAgICBhbmltT3V0OiAgICAgICBudWxsLCAgLy8gcHJvcGVydGllcyB0aGF0IGRlZmluZSBob3cgdGhlIHNsaWRlIGFuaW1hdGVzIG91dFxyXG4gICAgY3NzQmVmb3JlOiAgICAgbnVsbCwgIC8vIHByb3BlcnRpZXMgdGhhdCBkZWZpbmUgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHNsaWRlIGJlZm9yZSB0cmFuc2l0aW9uaW5nIGluXHJcbiAgICBjc3NBZnRlcjogICAgICBudWxsLCAgLy8gcHJvcGVydGllcyB0aGF0IGRlZmluZWQgdGhlIHN0YXRlIG9mIHRoZSBzbGlkZSBhZnRlciB0cmFuc2l0aW9uaW5nIG91dFxyXG4gICAgZnhGbjogICAgICAgICAgbnVsbCwgIC8vIGZ1bmN0aW9uIHVzZWQgdG8gY29udHJvbCB0aGUgdHJhbnNpdGlvblxyXG4gICAgaGVpZ2h0OiAgICAgICAnYXV0bycsIC8vIGNvbnRhaW5lciBoZWlnaHRcclxuICAgIHN0YXJ0aW5nU2xpZGU6IDAsICAgICAvLyB6ZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBmaXJzdCBzbGlkZSB0byBiZSBkaXNwbGF5ZWRcclxuICAgIHN5bmM6ICAgICAgICAgIDEsICAgICAvLyB0cnVlIGlmIGluL291dCB0cmFuc2l0aW9ucyBzaG91bGQgb2NjdXIgc2ltdWx0YW5lb3VzbHlcclxuICAgIHJhbmRvbTogICAgICAgIDAsICAgICAvLyB0cnVlIGZvciByYW5kb20sIGZhbHNlIGZvciBzZXF1ZW5jZSAobm90IGFwcGxpY2FibGUgdG8gc2h1ZmZsZSBmeClcclxuICAgIGZpdDogICAgICAgICAgIDAsICAgICAvLyBmb3JjZSBzbGlkZXMgdG8gZml0IGNvbnRhaW5lclxyXG4gICAgcGF1c2U6ICAgICAgICAgMCwgICAgIC8vIHRydWUgdG8gZW5hYmxlIFwicGF1c2Ugb24gaG92ZXJcIlxyXG4gICAgYXV0b3N0b3A6ICAgICAgMCwgICAgIC8vIHRydWUgdG8gZW5kIHNsaWRlc2hvdyBhZnRlciBYIHRyYW5zaXRpb25zICh3aGVyZSBYID09IHNsaWRlIGNvdW50KVxyXG4gICAgYXV0b3N0b3BDb3VudDogMCwgICAgIC8vIG51bWJlciBvZiB0cmFuc2l0aW9ucyAob3B0aW9uYWxseSB1c2VkIHdpdGggYXV0b3N0b3AgdG8gZGVmaW5lIFgpXHJcbiAgICBkZWxheTogICAgICAgICAwLCAgICAgLy8gYWRkaXRpb25hbCBkZWxheSAoaW4gbXMpIGZvciBmaXJzdCB0cmFuc2l0aW9uIChoaW50OiBjYW4gYmUgbmVnYXRpdmUpXHJcbiAgICBzbGlkZUV4cHI6ICAgICBudWxsLCAgLy8gZXhwcmVzc2lvbiBmb3Igc2VsZWN0aW5nIHNsaWRlcyAoaWYgc29tZXRoaW5nIG90aGVyIHRoYW4gYWxsIGNoaWxkcmVuIGlzIHJlcXVpcmVkKVxyXG4gICAgY2xlYXJ0eXBlOiAgICAgMCwgICAgIC8vIHRydWUgaWYgY2xlYXJUeXBlIGNvcnJlY3Rpb25zIHNob3VsZCBiZSBhcHBsaWVkIChmb3IgSUUpXHJcbiAgICBub3dyYXA6ICAgICAgICAwICAgICAgLy8gdHJ1ZSB0byBwcmV2ZW50IHNsaWRlc2hvdyBmcm9tIHdyYXBwaW5nXHJcbn07XHJcblxyXG59KShqUXVlcnkpO1xyXG5cclxuXHJcbi8qXHJcbiAqIGpRdWVyeSBDeWNsZSBQbHVnaW4gVHJhbnNpdGlvbiBEZWZpbml0aW9uc1xyXG4gKiBUaGlzIHNjcmlwdCBpcyBhIHBsdWdpbiBmb3IgdGhlIGpRdWVyeSBDeWNsZSBQbHVnaW5cclxuICogRXhhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24gYXQ6IGh0dHA6Ly9tYWxzdXAuY29tL2pxdWVyeS9jeWNsZS9cclxuICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTS4gQWxzdXBcclxuICogVmVyc2lvbjogIDIuMjJcclxuICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXM6XHJcbiAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXHJcbiAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbFxyXG4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuXHJcbi8vXHJcbi8vIFRoZXNlIGZ1bmN0aW9ucyBkZWZpbmUgb25lLXRpbWUgc2xpZGUgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBuYW1lZFxyXG4vLyB0cmFuc2l0aW9ucy4gVG8gc2F2ZSBmaWxlIHNpemUgZmVlbCBmcmVlIHRvIHJlbW92ZSBhbnkgb2YgdGhlc2UgdGhhdCB5b3UgXHJcbi8vIGRvbid0IG5lZWQuXHJcbi8vXHJcblxyXG4vLyBzY3JvbGxVcC9Eb3duL0xlZnQvUmlnaHRcclxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5zY3JvbGxVcCA9IGZ1bmN0aW9uKCRjb250LCAkc2xpZGVzLCBvcHRzKSB7XHJcbiAgICAkY29udC5jc3MoJ292ZXJmbG93JywnaGlkZGVuJyk7XHJcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcclxuICAgICAgICAkKHRoaXMpLnNob3coKTtcclxuICAgICAgICBvcHRzLmNzc0JlZm9yZS50b3AgPSBuZXh0Lm9mZnNldEhlaWdodDtcclxuICAgICAgICBvcHRzLmFuaW1PdXQudG9wID0gMC1jdXJyLm9mZnNldEhlaWdodDtcclxuICAgIH0pO1xyXG4gICAgb3B0cy5jc3NGaXJzdCA9IHsgdG9wOiAwIH07XHJcbiAgICBvcHRzLmFuaW1JbiAgID0geyB0b3A6IDAgfTtcclxuICAgIG9wdHMuY3NzQWZ0ZXIgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xyXG59O1xyXG4kLmZuLmN5Y2xlLnRyYW5zaXRpb25zLnNjcm9sbERvd24gPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xyXG4gICAgJGNvbnQuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpO1xyXG4gICAgb3B0cy5iZWZvcmUucHVzaChmdW5jdGlvbihjdXJyLCBuZXh0LCBvcHRzKSB7XHJcbiAgICAgICAgJCh0aGlzKS5zaG93KCk7XHJcbiAgICAgICAgb3B0cy5jc3NCZWZvcmUudG9wID0gMC1uZXh0Lm9mZnNldEhlaWdodDtcclxuICAgICAgICBvcHRzLmFuaW1PdXQudG9wID0gY3Vyci5vZmZzZXRIZWlnaHQ7XHJcbiAgICB9KTtcclxuICAgIG9wdHMuY3NzRmlyc3QgPSB7IHRvcDogMCB9O1xyXG4gICAgb3B0cy5hbmltSW4gICA9IHsgdG9wOiAwIH07XHJcbiAgICBvcHRzLmNzc0FmdGVyID0geyBkaXNwbGF5OiAnbm9uZScgfTtcclxufTtcclxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5zY3JvbGxMZWZ0ID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcclxuICAgICRjb250LmNzcygnb3ZlcmZsb3cnLCdoaWRkZW4nKTtcclxuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xyXG4gICAgICAgICQodGhpcykuc2hvdygpO1xyXG4gICAgICAgIG9wdHMuY3NzQmVmb3JlLmxlZnQgPSBuZXh0Lm9mZnNldFdpZHRoO1xyXG4gICAgICAgIG9wdHMuYW5pbU91dC5sZWZ0ID0gMC1jdXJyLm9mZnNldFdpZHRoO1xyXG4gICAgfSk7XHJcbiAgICBvcHRzLmNzc0ZpcnN0ID0geyBsZWZ0OiAwIH07XHJcbiAgICBvcHRzLmFuaW1JbiAgID0geyBsZWZ0OiAwIH07XHJcbn07XHJcbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMuc2Nyb2xsUmlnaHQgPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xyXG4gICAgJGNvbnQuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpO1xyXG4gICAgb3B0cy5iZWZvcmUucHVzaChmdW5jdGlvbihjdXJyLCBuZXh0LCBvcHRzKSB7XHJcbiAgICAgICAgJCh0aGlzKS5zaG93KCk7XHJcbiAgICAgICAgb3B0cy5jc3NCZWZvcmUubGVmdCA9IDAtbmV4dC5vZmZzZXRXaWR0aDtcclxuICAgICAgICBvcHRzLmFuaW1PdXQubGVmdCA9IGN1cnIub2Zmc2V0V2lkdGg7XHJcbiAgICB9KTtcclxuICAgIG9wdHMuY3NzRmlyc3QgPSB7IGxlZnQ6IDAgfTtcclxuICAgIG9wdHMuYW5pbUluICAgPSB7IGxlZnQ6IDAgfTtcclxufTtcclxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5zY3JvbGxIb3J6ID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcclxuICAgICRjb250LmNzcygnb3ZlcmZsb3cnLCdoaWRkZW4nKS53aWR0aCgpO1xyXG4vLyAgICAkc2xpZGVzLnNob3coKTtcclxuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cywgZndkKSB7XHJcbiAgICAgICAgJCh0aGlzKS5zaG93KCk7XHJcbiAgICAgICAgdmFyIGN1cnJXID0gY3Vyci5vZmZzZXRXaWR0aCwgbmV4dFcgPSBuZXh0Lm9mZnNldFdpZHRoO1xyXG4gICAgICAgIG9wdHMuY3NzQmVmb3JlID0gZndkID8geyBsZWZ0OiBuZXh0VyB9IDogeyBsZWZ0OiAtbmV4dFcgfTtcclxuICAgICAgICBvcHRzLmFuaW1Jbi5sZWZ0ID0gMDtcclxuICAgICAgICBvcHRzLmFuaW1PdXQubGVmdCA9IGZ3ZCA/IC1jdXJyVyA6IGN1cnJXO1xyXG4gICAgICAgICRzbGlkZXMubm90KGN1cnIpLmNzcyhvcHRzLmNzc0JlZm9yZSk7XHJcbiAgICB9KTtcclxuICAgIG9wdHMuY3NzRmlyc3QgPSB7IGxlZnQ6IDAgfTtcclxuICAgIG9wdHMuY3NzQWZ0ZXIgPSB7IGRpc3BsYXk6ICdub25lJyB9XHJcbn07XHJcbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMuc2Nyb2xsVmVydCA9IGZ1bmN0aW9uKCRjb250LCAkc2xpZGVzLCBvcHRzKSB7XHJcbiAgICAkY29udC5jc3MoJ292ZXJmbG93JywnaGlkZGVuJyk7XHJcbi8vICAgICRzbGlkZXMuc2hvdygpO1xyXG4gICAgb3B0cy5iZWZvcmUucHVzaChmdW5jdGlvbihjdXJyLCBuZXh0LCBvcHRzLCBmd2QpIHtcclxuICAgICAgICAkKHRoaXMpLnNob3coKTtcclxuICAgICAgICB2YXIgY3VyckggPSBjdXJyLm9mZnNldEhlaWdodCwgbmV4dEggPSBuZXh0Lm9mZnNldEhlaWdodDtcclxuICAgICAgICBvcHRzLmNzc0JlZm9yZSA9IGZ3ZCA/IHsgdG9wOiAtbmV4dEggfSA6IHsgdG9wOiBuZXh0SCB9O1xyXG4gICAgICAgIG9wdHMuYW5pbUluLnRvcCA9IDA7XHJcbiAgICAgICAgb3B0cy5hbmltT3V0LnRvcCA9IGZ3ZCA/IGN1cnJIIDogLWN1cnJIO1xyXG4gICAgICAgICRzbGlkZXMubm90KGN1cnIpLmNzcyhvcHRzLmNzc0JlZm9yZSk7XHJcbiAgICB9KTtcclxuICAgIG9wdHMuY3NzRmlyc3QgPSB7IHRvcDogMCB9O1xyXG4gICAgb3B0cy5jc3NBZnRlciA9IHsgZGlzcGxheTogJ25vbmUnIH1cclxufTtcclxuXHJcbi8vIHNsaWRlWC9zbGlkZVlcclxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5zbGlkZVggPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xyXG4gICAgb3B0cy5iZWZvcmUucHVzaChmdW5jdGlvbihjdXJyLCBuZXh0LCBvcHRzKSB7XHJcbiAgICAgICAgJChjdXJyKS5jc3MoJ3pJbmRleCcsMSk7XHJcbiAgICB9KTsgICAgXHJcbiAgICBvcHRzLm9uQWRkU2xpZGUgPSBmdW5jdGlvbigkcykgeyAkcy5oaWRlKCk7IH07XHJcbiAgICBvcHRzLmNzc0JlZm9yZSA9IHsgekluZGV4OiAyIH07XHJcbiAgICBvcHRzLmFuaW1JbiAgPSB7IHdpZHRoOiAnc2hvdycgfTtcclxuICAgIG9wdHMuYW5pbU91dCA9IHsgd2lkdGg6ICdoaWRlJyB9O1xyXG59O1xyXG4kLmZuLmN5Y2xlLnRyYW5zaXRpb25zLnNsaWRlWSA9IGZ1bmN0aW9uKCRjb250LCAkc2xpZGVzLCBvcHRzKSB7XHJcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcclxuICAgICAgICAkKGN1cnIpLmNzcygnekluZGV4JywxKTtcclxuICAgIH0pOyAgICBcclxuICAgIG9wdHMub25BZGRTbGlkZSA9IGZ1bmN0aW9uKCRzKSB7ICRzLmhpZGUoKTsgfTtcclxuICAgIG9wdHMuY3NzQmVmb3JlID0geyB6SW5kZXg6IDIgfTtcclxuICAgIG9wdHMuYW5pbUluICA9IHsgaGVpZ2h0OiAnc2hvdycgfTtcclxuICAgIG9wdHMuYW5pbU91dCA9IHsgaGVpZ2h0OiAnaGlkZScgfTtcclxufTtcclxuXHJcbi8vIHNodWZmbGVcclxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5zaHVmZmxlID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcclxuICAgIHZhciB3ID0gJGNvbnQuY3NzKCdvdmVyZmxvdycsICd2aXNpYmxlJykud2lkdGgoKTtcclxuICAgICRzbGlkZXMuY3NzKHtsZWZ0OiAwLCB0b3A6IDB9KTtcclxuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oKSB7ICQodGhpcykuc2hvdygpIH0pO1xyXG4gICAgb3B0cy5zcGVlZCA9IG9wdHMuc3BlZWQgLyAyOyAvLyBzaHVmZmxlIGhhcyAyIHRyYW5zaXRpb25zICAgICAgICBcclxuICAgIG9wdHMucmFuZG9tID0gMDtcclxuICAgIG9wdHMuc2h1ZmZsZSA9IG9wdHMuc2h1ZmZsZSB8fCB7bGVmdDotdywgdG9wOjE1fTtcclxuICAgIG9wdHMuZWxzID0gW107XHJcbiAgICBmb3IgKHZhciBpPTA7IGkgPCAkc2xpZGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIG9wdHMuZWxzLnB1c2goJHNsaWRlc1tpXSk7XHJcblxyXG4gICAgZm9yICh2YXIgaT0wOyBpIDwgb3B0cy5zdGFydGluZ1NsaWRlOyBpKyspXHJcbiAgICAgICAgb3B0cy5lbHMucHVzaChvcHRzLmVscy5zaGlmdCgpKTtcclxuXHJcbiAgICAvLyBjdXN0b20gdHJhbnNpdGlvbiBmbiAoaGF0IHRpcCB0byBCZW5qYW1pbiBTdGVybGluZyBmb3IgdGhpcyBiaXQgb2Ygc3dlZXRuZXNzISlcclxuICAgIG9wdHMuZnhGbiA9IGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMsIGNiLCBmd2QpIHtcclxuICAgICAgICB2YXIgJGVsID0gZndkID8gJChjdXJyKSA6ICQobmV4dCk7XHJcbiAgICAgICAgJGVsLmFuaW1hdGUob3B0cy5zaHVmZmxlLCBvcHRzLnNwZWVkSW4sIG9wdHMuZWFzZUluLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgZndkID8gb3B0cy5lbHMucHVzaChvcHRzLmVscy5zaGlmdCgpKSA6IG9wdHMuZWxzLnVuc2hpZnQob3B0cy5lbHMucG9wKCkpO1xyXG4gICAgICAgICAgICBpZiAoZndkKSBcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MCwgbGVuPW9wdHMuZWxzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICAgICQob3B0cy5lbHNbaV0pLmNzcygnei1pbmRleCcsIGxlbi1pKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeiA9ICQoY3VycikuY3NzKCd6LWluZGV4Jyk7XHJcbiAgICAgICAgICAgICAgICAkZWwuY3NzKCd6LWluZGV4JywgcGFyc2VJbnQoeikrMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJGVsLmFuaW1hdGUoe2xlZnQ6MCwgdG9wOjB9LCBvcHRzLnNwZWVkT3V0LCBvcHRzLmVhc2VPdXQsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgJChmd2QgPyB0aGlzIDogY3VycikuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNiKSBjYigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBvcHRzLm9uQWRkU2xpZGUgPSBmdW5jdGlvbigkcykgeyAkcy5oaWRlKCk7IH07XHJcbn07XHJcblxyXG4vLyB0dXJuVXAvRG93bi9MZWZ0L1JpZ2h0XHJcbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMudHVyblVwID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcclxuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xyXG4gICAgICAgICQodGhpcykuc2hvdygpO1xyXG4gICAgICAgIG9wdHMuY3NzQmVmb3JlLnRvcCA9IG5leHQuY3ljbGVIO1xyXG4gICAgICAgIG9wdHMuYW5pbUluLmhlaWdodCA9IG5leHQuY3ljbGVIO1xyXG4gICAgfSk7XHJcbiAgICBvcHRzLm9uQWRkU2xpZGUgPSBmdW5jdGlvbigkcykgeyAkcy5oaWRlKCk7IH07XHJcbiAgICBvcHRzLmNzc0ZpcnN0ICA9IHsgdG9wOiAwIH07XHJcbiAgICBvcHRzLmNzc0JlZm9yZSA9IHsgaGVpZ2h0OiAwIH07XHJcbiAgICBvcHRzLmFuaW1JbiAgICA9IHsgdG9wOiAwIH07XHJcbiAgICBvcHRzLmFuaW1PdXQgICA9IHsgaGVpZ2h0OiAwIH07XHJcbiAgICBvcHRzLmNzc0FmdGVyICA9IHsgZGlzcGxheTogJ25vbmUnIH07XHJcbn07XHJcbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMudHVybkRvd24gPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xyXG4gICAgb3B0cy5iZWZvcmUucHVzaChmdW5jdGlvbihjdXJyLCBuZXh0LCBvcHRzKSB7XHJcbiAgICAgICAgJCh0aGlzKS5zaG93KCk7XHJcbiAgICAgICAgb3B0cy5hbmltSW4uaGVpZ2h0ID0gbmV4dC5jeWNsZUg7XHJcbiAgICAgICAgb3B0cy5hbmltT3V0LnRvcCAgID0gY3Vyci5jeWNsZUg7XHJcbiAgICB9KTtcclxuICAgIG9wdHMub25BZGRTbGlkZSA9IGZ1bmN0aW9uKCRzKSB7ICRzLmhpZGUoKTsgfTtcclxuICAgIG9wdHMuY3NzRmlyc3QgID0geyB0b3A6IDAgfTtcclxuICAgIG9wdHMuY3NzQmVmb3JlID0geyB0b3A6IDAsIGhlaWdodDogMCB9O1xyXG4gICAgb3B0cy5hbmltT3V0ICAgPSB7IGhlaWdodDogMCB9O1xyXG4gICAgb3B0cy5jc3NBZnRlciAgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xyXG59O1xyXG4kLmZuLmN5Y2xlLnRyYW5zaXRpb25zLnR1cm5MZWZ0ID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcclxuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xyXG4gICAgICAgICQodGhpcykuc2hvdygpO1xyXG4gICAgICAgIG9wdHMuY3NzQmVmb3JlLmxlZnQgPSBuZXh0LmN5Y2xlVztcclxuICAgICAgICBvcHRzLmFuaW1Jbi53aWR0aCA9IG5leHQuY3ljbGVXO1xyXG4gICAgfSk7XHJcbiAgICBvcHRzLm9uQWRkU2xpZGUgPSBmdW5jdGlvbigkcykgeyAkcy5oaWRlKCk7IH07XHJcbiAgICBvcHRzLmNzc0JlZm9yZSA9IHsgd2lkdGg6IDAgfTtcclxuICAgIG9wdHMuYW5pbUluICAgID0geyBsZWZ0OiAwIH07XHJcbiAgICBvcHRzLmFuaW1PdXQgICA9IHsgd2lkdGg6IDAgfTtcclxuICAgIG9wdHMuY3NzQWZ0ZXIgID0geyBkaXNwbGF5OiAnbm9uZScgfTtcclxufTtcclxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy50dXJuUmlnaHQgPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xyXG4gICAgb3B0cy5iZWZvcmUucHVzaChmdW5jdGlvbihjdXJyLCBuZXh0LCBvcHRzKSB7XHJcbiAgICAgICAgJCh0aGlzKS5zaG93KCk7XHJcbiAgICAgICAgb3B0cy5hbmltSW4ud2lkdGggPSBuZXh0LmN5Y2xlVztcclxuICAgICAgICBvcHRzLmFuaW1PdXQubGVmdCA9IGN1cnIuY3ljbGVXO1xyXG4gICAgfSk7XHJcbiAgICBvcHRzLm9uQWRkU2xpZGUgPSBmdW5jdGlvbigkcykgeyAkcy5oaWRlKCk7IH07XHJcbiAgICBvcHRzLmNzc0JlZm9yZSA9IHsgbGVmdDogMCwgd2lkdGg6IDAgfTtcclxuICAgIG9wdHMuYW5pbUluICAgID0geyBsZWZ0OiAwIH07XHJcbiAgICBvcHRzLmFuaW1PdXQgICA9IHsgd2lkdGg6IDAgfTtcclxuICAgIG9wdHMuY3NzQWZ0ZXIgID0geyBkaXNwbGF5OiAnbm9uZScgfTtcclxufTtcclxuXHJcbi8vIHpvb21cclxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy56b29tID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcclxuICAgIG9wdHMuY3NzRmlyc3QgPSB7IHRvcDowLCBsZWZ0OiAwIH07IFxyXG4gICAgb3B0cy5jc3NBZnRlciA9IHsgZGlzcGxheTogJ25vbmUnIH07XHJcbiAgICBcclxuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xyXG4gICAgICAgICQodGhpcykuc2hvdygpO1xyXG4gICAgICAgIG9wdHMuY3NzQmVmb3JlID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwLCB0b3A6IG5leHQuY3ljbGVILzIsIGxlZnQ6IG5leHQuY3ljbGVXLzIgfTtcclxuICAgICAgICBvcHRzLmNzc0FmdGVyICA9IHsgZGlzcGxheTogJ25vbmUnIH07XHJcbiAgICAgICAgb3B0cy5hbmltSW4gICAgPSB7IHRvcDogMCwgbGVmdDogMCwgd2lkdGg6IG5leHQuY3ljbGVXLCBoZWlnaHQ6IG5leHQuY3ljbGVIIH07XHJcbiAgICAgICAgb3B0cy5hbmltT3V0ICAgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHRvcDogY3Vyci5jeWNsZUgvMiwgbGVmdDogY3Vyci5jeWNsZVcvMiB9O1xyXG4gICAgICAgICQoY3VycikuY3NzKCd6SW5kZXgnLDIpO1xyXG4gICAgICAgICQobmV4dCkuY3NzKCd6SW5kZXgnLDEpO1xyXG4gICAgfSk7ICAgIFxyXG4gICAgb3B0cy5vbkFkZFNsaWRlID0gZnVuY3Rpb24oJHMpIHsgJHMuaGlkZSgpOyB9O1xyXG59O1xyXG5cclxuLy8gZmFkZVpvb21cclxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5mYWRlWm9vbSA9IGZ1bmN0aW9uKCRjb250LCAkc2xpZGVzLCBvcHRzKSB7XHJcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcclxuICAgICAgICBvcHRzLmNzc0JlZm9yZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCwgb3BhY2l0eTogMSwgbGVmdDogbmV4dC5jeWNsZVcvMiwgdG9wOiBuZXh0LmN5Y2xlSC8yLCB6SW5kZXg6IDEgfTtcclxuICAgICAgICBvcHRzLmFuaW1JbiAgICA9IHsgdG9wOiAwLCBsZWZ0OiAwLCB3aWR0aDogbmV4dC5jeWNsZVcsIGhlaWdodDogbmV4dC5jeWNsZUggfTtcclxuICAgIH0pOyAgICBcclxuICAgIG9wdHMuYW5pbU91dCAgPSB7IG9wYWNpdHk6IDAgfTtcclxuICAgIG9wdHMuY3NzQWZ0ZXIgPSB7IHpJbmRleDogMCB9O1xyXG59O1xyXG5cclxuLy8gYmxpbmRYXHJcbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMuYmxpbmRYID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcclxuICAgIHZhciB3ID0gJGNvbnQuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpLndpZHRoKCk7XHJcbiAgICAkc2xpZGVzLnNob3coKTtcclxuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xyXG4gICAgICAgICQoY3VycikuY3NzKCd6SW5kZXgnLDEpO1xyXG4gICAgfSk7ICAgIFxyXG4gICAgb3B0cy5jc3NCZWZvcmUgPSB7IGxlZnQ6IHcsIHpJbmRleDogMiB9O1xyXG4gICAgb3B0cy5jc3NBZnRlciA9IHsgekluZGV4OiAxIH07XHJcbiAgICBvcHRzLmFuaW1JbiA9IHsgbGVmdDogMCB9O1xyXG4gICAgb3B0cy5hbmltT3V0ICA9IHsgbGVmdDogdyB9O1xyXG59O1xyXG4vLyBibGluZFlcclxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5ibGluZFkgPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xyXG4gICAgdmFyIGggPSAkY29udC5jc3MoJ292ZXJmbG93JywnaGlkZGVuJykuaGVpZ2h0KCk7XHJcbiAgICAkc2xpZGVzLnNob3coKTtcclxuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xyXG4gICAgICAgICQoY3VycikuY3NzKCd6SW5kZXgnLDEpO1xyXG4gICAgfSk7ICAgIFxyXG4gICAgb3B0cy5jc3NCZWZvcmUgPSB7IHRvcDogaCwgekluZGV4OiAyIH07XHJcbiAgICBvcHRzLmNzc0FmdGVyID0geyB6SW5kZXg6IDEgfTtcclxuICAgIG9wdHMuYW5pbUluID0geyB0b3A6IDAgfTtcclxuICAgIG9wdHMuYW5pbU91dCAgPSB7IHRvcDogaCB9O1xyXG59O1xyXG4vLyBibGluZFpcclxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5ibGluZFogPSBmdW5jdGlvbigkY29udCwgJHNsaWRlcywgb3B0cykge1xyXG4gICAgdmFyIGggPSAkY29udC5jc3MoJ292ZXJmbG93JywnaGlkZGVuJykuaGVpZ2h0KCk7XHJcbiAgICB2YXIgdyA9ICRjb250LndpZHRoKCk7XHJcbiAgICAkc2xpZGVzLnNob3coKTtcclxuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xyXG4gICAgICAgICQoY3VycikuY3NzKCd6SW5kZXgnLDEpO1xyXG4gICAgfSk7ICAgIFxyXG4gICAgb3B0cy5jc3NCZWZvcmUgPSB7IHRvcDogaCwgbGVmdDogdywgekluZGV4OiAyIH07XHJcbiAgICBvcHRzLmNzc0FmdGVyID0geyB6SW5kZXg6IDEgfTtcclxuICAgIG9wdHMuYW5pbUluID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcclxuICAgIG9wdHMuYW5pbU91dCAgPSB7IHRvcDogaCwgbGVmdDogdyB9O1xyXG59O1xyXG5cclxuLy8gZ3Jvd1ggLSBncm93IGhvcml6b250YWxseSBmcm9tIGNlbnRlcmVkIDAgd2lkdGhcclxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5ncm93WCA9IGZ1bmN0aW9uKCRjb250LCAkc2xpZGVzLCBvcHRzKSB7XHJcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcclxuICAgICAgICBvcHRzLmNzc0JlZm9yZSA9IHsgbGVmdDogdGhpcy5jeWNsZVcvMiwgd2lkdGg6IDAsIHpJbmRleDogMiB9O1xyXG4gICAgICAgIG9wdHMuYW5pbUluID0geyBsZWZ0OiAwLCB3aWR0aDogdGhpcy5jeWNsZVcgfTtcclxuICAgICAgICBvcHRzLmFuaW1PdXQgPSB7IGxlZnQ6IDAgfTtcclxuICAgICAgICAkKGN1cnIpLmNzcygnekluZGV4JywxKTtcclxuICAgIH0pOyAgICBcclxuICAgIG9wdHMub25BZGRTbGlkZSA9IGZ1bmN0aW9uKCRzKSB7ICRzLmhpZGUoKS5jc3MoJ3pJbmRleCcsMSk7IH07XHJcbn07XHJcbi8vIGdyb3dZIC0gZ3JvdyB2ZXJ0aWNhbGx5IGZyb20gY2VudGVyZWQgMCBoZWlnaHRcclxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5ncm93WSA9IGZ1bmN0aW9uKCRjb250LCAkc2xpZGVzLCBvcHRzKSB7XHJcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcclxuICAgICAgICBvcHRzLmNzc0JlZm9yZSA9IHsgdG9wOiB0aGlzLmN5Y2xlSC8yLCBoZWlnaHQ6IDAsIHpJbmRleDogMiB9O1xyXG4gICAgICAgIG9wdHMuYW5pbUluID0geyB0b3A6IDAsIGhlaWdodDogdGhpcy5jeWNsZUggfTtcclxuICAgICAgICBvcHRzLmFuaW1PdXQgPSB7IHRvcDogMCB9O1xyXG4gICAgICAgICQoY3VycikuY3NzKCd6SW5kZXgnLDEpO1xyXG4gICAgfSk7ICAgIFxyXG4gICAgb3B0cy5vbkFkZFNsaWRlID0gZnVuY3Rpb24oJHMpIHsgJHMuaGlkZSgpLmNzcygnekluZGV4JywxKTsgfTtcclxufTtcclxuXHJcbi8vIGN1cnRhaW5YIC0gc3F1ZWV6ZSBpbiBib3RoIGVkZ2VzIGhvcml6b250YWxseVxyXG4kLmZuLmN5Y2xlLnRyYW5zaXRpb25zLmN1cnRhaW5YID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcclxuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xyXG4gICAgICAgIG9wdHMuY3NzQmVmb3JlID0geyBsZWZ0OiBuZXh0LmN5Y2xlVy8yLCB3aWR0aDogMCwgekluZGV4OiAxLCBkaXNwbGF5OiAnYmxvY2snIH07XHJcbiAgICAgICAgb3B0cy5hbmltSW4gPSB7IGxlZnQ6IDAsIHdpZHRoOiB0aGlzLmN5Y2xlVyB9O1xyXG4gICAgICAgIG9wdHMuYW5pbU91dCA9IHsgbGVmdDogY3Vyci5jeWNsZVcvMiwgd2lkdGg6IDAgfTtcclxuICAgICAgICAkKGN1cnIpLmNzcygnekluZGV4JywyKTtcclxuICAgIH0pOyAgICBcclxuICAgIG9wdHMub25BZGRTbGlkZSA9IGZ1bmN0aW9uKCRzKSB7ICRzLmhpZGUoKTsgfTtcclxuICAgIG9wdHMuY3NzQWZ0ZXIgPSB7IHpJbmRleDogMSwgZGlzcGxheTogJ25vbmUnIH07XHJcbn07XHJcbi8vIGN1cnRhaW5ZIC0gc3F1ZWV6ZSBpbiBib3RoIGVkZ2VzIHZlcnRpY2FsbHlcclxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy5jdXJ0YWluWSA9IGZ1bmN0aW9uKCRjb250LCAkc2xpZGVzLCBvcHRzKSB7XHJcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcclxuICAgICAgICBvcHRzLmNzc0JlZm9yZSA9IHsgdG9wOiBuZXh0LmN5Y2xlSC8yLCBoZWlnaHQ6IDAsIHpJbmRleDogMSwgZGlzcGxheTogJ2Jsb2NrJyB9O1xyXG4gICAgICAgIG9wdHMuYW5pbUluID0geyB0b3A6IDAsIGhlaWdodDogdGhpcy5jeWNsZUggfTtcclxuICAgICAgICBvcHRzLmFuaW1PdXQgPSB7IHRvcDogY3Vyci5jeWNsZUgvMiwgaGVpZ2h0OiAwIH07XHJcbiAgICAgICAgJChjdXJyKS5jc3MoJ3pJbmRleCcsMik7XHJcbiAgICB9KTsgICAgXHJcbiAgICBvcHRzLm9uQWRkU2xpZGUgPSBmdW5jdGlvbigkcykgeyAkcy5oaWRlKCk7IH07XHJcbiAgICBvcHRzLmNzc0FmdGVyID0geyB6SW5kZXg6IDEsIGRpc3BsYXk6ICdub25lJyB9O1xyXG59O1xyXG5cclxuLy8gY292ZXIgLSBjdXJyIHNsaWRlIGNvdmVyZWQgYnkgbmV4dCBzbGlkZVxyXG4kLmZuLmN5Y2xlLnRyYW5zaXRpb25zLmNvdmVyID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcclxuICAgIHZhciBkID0gb3B0cy5kaXJlY3Rpb24gfHwgJ2xlZnQnO1xyXG4gICAgdmFyIHcgPSAkY29udC5jc3MoJ292ZXJmbG93JywnaGlkZGVuJykud2lkdGgoKTtcclxuICAgIHZhciBoID0gJGNvbnQuaGVpZ2h0KCk7XHJcbiAgICBvcHRzLmJlZm9yZS5wdXNoKGZ1bmN0aW9uKGN1cnIsIG5leHQsIG9wdHMpIHtcclxuICAgICAgICBvcHRzLmNzc0JlZm9yZSA9IG9wdHMuY3NzQmVmb3JlIHx8IHt9O1xyXG4gICAgICAgIG9wdHMuY3NzQmVmb3JlLnpJbmRleCA9IDI7XHJcbiAgICAgICAgb3B0cy5jc3NCZWZvcmUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGQgPT0gJ3JpZ2h0JykgXHJcbiAgICAgICAgICAgIG9wdHMuY3NzQmVmb3JlLmxlZnQgPSAtdztcclxuICAgICAgICBlbHNlIGlmIChkID09ICd1cCcpICAgIFxyXG4gICAgICAgICAgICBvcHRzLmNzc0JlZm9yZS50b3AgPSBoO1xyXG4gICAgICAgIGVsc2UgaWYgKGQgPT0gJ2Rvd24nKSAgXHJcbiAgICAgICAgICAgIG9wdHMuY3NzQmVmb3JlLnRvcCA9IC1oO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgb3B0cy5jc3NCZWZvcmUubGVmdCA9IHc7XHJcbiAgICAgICAgJChjdXJyKS5jc3MoJ3pJbmRleCcsMSk7XHJcbiAgICB9KTsgICAgXHJcbiAgICBpZiAoIW9wdHMuYW5pbUluKSAgb3B0cy5hbmltSW4gPSB7IGxlZnQ6IDAsIHRvcDogMCB9O1xyXG4gICAgaWYgKCFvcHRzLmFuaW1PdXQpIG9wdHMuYW5pbU91dCA9IHsgbGVmdDogMCwgdG9wOiAwIH07XHJcbiAgICBvcHRzLmNzc0FmdGVyID0gb3B0cy5jc3NBZnRlciB8fCB7fTtcclxuICAgIG9wdHMuY3NzQWZ0ZXIuekluZGV4ID0gMjtcclxuICAgIG9wdHMuY3NzQWZ0ZXIuZGlzcGxheSA9ICdub25lJztcclxufTtcclxuXHJcbi8vIHVuY292ZXIgLSBjdXJyIHNsaWRlIG1vdmVzIG9mZiBuZXh0IHNsaWRlXHJcbiQuZm4uY3ljbGUudHJhbnNpdGlvbnMudW5jb3ZlciA9IGZ1bmN0aW9uKCRjb250LCAkc2xpZGVzLCBvcHRzKSB7XHJcbiAgICB2YXIgZCA9IG9wdHMuZGlyZWN0aW9uIHx8ICdsZWZ0JztcclxuICAgIHZhciB3ID0gJGNvbnQuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpLndpZHRoKCk7XHJcbiAgICB2YXIgaCA9ICRjb250LmhlaWdodCgpO1xyXG4gICAgb3B0cy5iZWZvcmUucHVzaChmdW5jdGlvbihjdXJyLCBuZXh0LCBvcHRzKSB7XHJcbiAgICAgICAgb3B0cy5jc3NCZWZvcmUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgaWYgKGQgPT0gJ3JpZ2h0JykgXHJcbiAgICAgICAgICAgIG9wdHMuYW5pbU91dC5sZWZ0ID0gdztcclxuICAgICAgICBlbHNlIGlmIChkID09ICd1cCcpICAgIFxyXG4gICAgICAgICAgICBvcHRzLmFuaW1PdXQudG9wID0gLWg7XHJcbiAgICAgICAgZWxzZSBpZiAoZCA9PSAnZG93bicpICBcclxuICAgICAgICAgICAgb3B0cy5hbmltT3V0LnRvcCA9IGg7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBvcHRzLmFuaW1PdXQubGVmdCA9IC13O1xyXG4gICAgICAgICQoY3VycikuY3NzKCd6SW5kZXgnLDIpO1xyXG4gICAgICAgICQobmV4dCkuY3NzKCd6SW5kZXgnLDEpO1xyXG4gICAgfSk7ICAgIFxyXG4gICAgb3B0cy5vbkFkZFNsaWRlID0gZnVuY3Rpb24oJHMpIHsgJHMuaGlkZSgpOyB9O1xyXG4gICAgaWYgKCFvcHRzLmFuaW1JbikgIG9wdHMuYW5pbUluID0geyBsZWZ0OiAwLCB0b3A6IDAgfTtcclxuICAgIG9wdHMuY3NzQmVmb3JlID0gb3B0cy5jc3NCZWZvcmUgfHwge307XHJcbiAgICBvcHRzLmNzc0JlZm9yZS50b3AgPSAwO1xyXG4gICAgb3B0cy5jc3NCZWZvcmUubGVmdCA9IDA7XHJcbiAgICBcclxuICAgIG9wdHMuY3NzQWZ0ZXIgPSBvcHRzLmNzc0FmdGVyIHx8IHt9O1xyXG4gICAgb3B0cy5jc3NBZnRlci56SW5kZXggPSAxO1xyXG4gICAgb3B0cy5jc3NBZnRlci5kaXNwbGF5ID0gJ25vbmUnO1xyXG59O1xyXG5cclxuLy8gdG9zcyAtIG1vdmUgdG9wIHNsaWRlIGFuZCBmYWRlIGF3YXlcclxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy50b3NzID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcclxuICAgIHZhciB3ID0gJGNvbnQuY3NzKCdvdmVyZmxvdycsJ3Zpc2libGUnKS53aWR0aCgpO1xyXG4gICAgdmFyIGggPSAkY29udC5oZWlnaHQoKTtcclxuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xyXG4gICAgICAgICQoY3VycikuY3NzKCd6SW5kZXgnLDIpO1xyXG4gICAgICAgIG9wdHMuY3NzQmVmb3JlLmRpc3BsYXkgPSAnYmxvY2snOyBcclxuICAgICAgICAvLyBwcm92aWRlIGRlZmF1bHQgdG9zcyBzZXR0aW5ncyBpZiBhbmltT3V0IG5vdCBwcm92aWRlZFxyXG4gICAgICAgIGlmICghb3B0cy5hbmltT3V0LmxlZnQgJiYgIW9wdHMuYW5pbU91dC50b3ApXHJcbiAgICAgICAgICAgIG9wdHMuYW5pbU91dCA9IHsgbGVmdDogdyoyLCB0b3A6IC1oLzIsIG9wYWNpdHk6IDAgfTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIG9wdHMuYW5pbU91dC5vcGFjaXR5ID0gMDtcclxuICAgIH0pOyAgICBcclxuICAgIG9wdHMub25BZGRTbGlkZSA9IGZ1bmN0aW9uKCRzKSB7ICRzLmhpZGUoKTsgfTtcclxuICAgIG9wdHMuY3NzQmVmb3JlID0geyBsZWZ0OiAwLCB0b3A6IDAsIHpJbmRleDogMSwgb3BhY2l0eTogMSB9O1xyXG4gICAgb3B0cy5hbmltSW4gPSB7IGxlZnQ6IDAgfTtcclxuICAgIG9wdHMuY3NzQWZ0ZXIgPSB7IHpJbmRleDogMiwgZGlzcGxheTogJ25vbmUnIH07XHJcbn07XHJcblxyXG4vLyB3aXBlIC0gY2xpcCBhbmltYXRpb25cclxuJC5mbi5jeWNsZS50cmFuc2l0aW9ucy53aXBlID0gZnVuY3Rpb24oJGNvbnQsICRzbGlkZXMsIG9wdHMpIHtcclxuICAgIHZhciB3ID0gJGNvbnQuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpLndpZHRoKCk7XHJcbiAgICB2YXIgaCA9ICRjb250LmhlaWdodCgpO1xyXG4gICAgb3B0cy5jc3NCZWZvcmUgPSBvcHRzLmNzc0JlZm9yZSB8fCB7fTtcclxuICAgIHZhciBjbGlwO1xyXG4gICAgaWYgKG9wdHMuY2xpcCkge1xyXG4gICAgICAgIGlmICgvbDJyLy50ZXN0KG9wdHMuY2xpcCkpXHJcbiAgICAgICAgICAgIGNsaXAgPSAncmVjdCgwcHggMHB4ICcraCsncHggMHB4KSc7XHJcbiAgICAgICAgZWxzZSBpZiAoL3IybC8udGVzdChvcHRzLmNsaXApKVxyXG4gICAgICAgICAgICBjbGlwID0gJ3JlY3QoMHB4ICcrdysncHggJytoKydweCAnK3crJ3B4KSc7XHJcbiAgICAgICAgZWxzZSBpZiAoL3QyYi8udGVzdChvcHRzLmNsaXApKVxyXG4gICAgICAgICAgICBjbGlwID0gJ3JlY3QoMHB4ICcrdysncHggMHB4IDBweCknO1xyXG4gICAgICAgIGVsc2UgaWYgKC9iMnQvLnRlc3Qob3B0cy5jbGlwKSlcclxuICAgICAgICAgICAgY2xpcCA9ICdyZWN0KCcraCsncHggJyt3KydweCAnK2grJ3B4IDBweCknO1xyXG4gICAgICAgIGVsc2UgaWYgKC96b29tLy50ZXN0KG9wdHMuY2xpcCkpIHtcclxuICAgICAgICAgICAgdmFyIHQgPSBwYXJzZUludChoLzIpO1xyXG4gICAgICAgICAgICB2YXIgbCA9IHBhcnNlSW50KHcvMik7XHJcbiAgICAgICAgICAgIGNsaXAgPSAncmVjdCgnK3QrJ3B4ICcrbCsncHggJyt0KydweCAnK2wrJ3B4KSc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBvcHRzLmNzc0JlZm9yZS5jbGlwID0gb3B0cy5jc3NCZWZvcmUuY2xpcCB8fCBjbGlwIHx8ICdyZWN0KDBweCAwcHggMHB4IDBweCknO1xyXG4gICAgXHJcbiAgICB2YXIgZCA9IG9wdHMuY3NzQmVmb3JlLmNsaXAubWF0Y2goLyhcXGQrKS9nKTtcclxuICAgIHZhciB0ID0gcGFyc2VJbnQoZFswXSksIHIgPSBwYXJzZUludChkWzFdKSwgYiA9IHBhcnNlSW50KGRbMl0pLCBsID0gcGFyc2VJbnQoZFszXSk7XHJcbiAgICBcclxuICAgIG9wdHMuYmVmb3JlLnB1c2goZnVuY3Rpb24oY3VyciwgbmV4dCwgb3B0cykge1xyXG4gICAgICAgIGlmIChjdXJyID09IG5leHQpIHJldHVybjtcclxuICAgICAgICB2YXIgJGN1cnIgPSAkKGN1cnIpLmNzcygnekluZGV4JywyKTtcclxuICAgICAgICB2YXIgJG5leHQgPSAkKG5leHQpLmNzcyh7XHJcbiAgICAgICAgICAgIHpJbmRleDogIDMsXHJcbiAgICAgICAgICAgIGRpc3BsYXk6ICdibG9jaydcclxuICAgICAgICB9KTtcclxuICAgICAgICBcclxuICAgICAgICB2YXIgc3RlcCA9IDEsIGNvdW50ID0gcGFyc2VJbnQoKG9wdHMuc3BlZWRJbiAvIDEzKSkgLSAxO1xyXG4gICAgICAgIGZ1bmN0aW9uIGYoKSB7XHJcbiAgICAgICAgICAgIHZhciB0dCA9IHQgPyB0IC0gcGFyc2VJbnQoc3RlcCAqICh0L2NvdW50KSkgOiAwO1xyXG4gICAgICAgICAgICB2YXIgbGwgPSBsID8gbCAtIHBhcnNlSW50KHN0ZXAgKiAobC9jb3VudCkpIDogMDtcclxuICAgICAgICAgICAgdmFyIGJiID0gYiA8IGggPyBiICsgcGFyc2VJbnQoc3RlcCAqICgoaC1iKS9jb3VudCB8fCAxKSkgOiBoO1xyXG4gICAgICAgICAgICB2YXIgcnIgPSByIDwgdyA/IHIgKyBwYXJzZUludChzdGVwICogKCh3LXIpL2NvdW50IHx8IDEpKSA6IHc7XHJcbiAgICAgICAgICAgICRuZXh0LmNzcyh7IGNsaXA6ICdyZWN0KCcrdHQrJ3B4ICcrcnIrJ3B4ICcrYmIrJ3B4ICcrbGwrJ3B4KScgfSk7XHJcbiAgICAgICAgICAgIChzdGVwKysgPD0gY291bnQpID8gc2V0VGltZW91dChmLCAxMykgOiAkY3Vyci5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmKCk7XHJcbiAgICB9KTsgICAgXHJcbiAgICBvcHRzLmNzc0FmdGVyICA9IHsgfTtcclxuICAgIG9wdHMuYW5pbUluICAgID0geyBsZWZ0OiAwIH07XHJcbiAgICBvcHRzLmFuaW1PdXQgICA9IHsgbGVmdDogMCB9O1xyXG59O1xyXG5cclxufSkoalF1ZXJ5KTtcclxuLypcclxuIGpRdWVyeSBkZWxheWVkIG9ic2VydmVyIC0gMC44XHJcbiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvanF1ZXJ5LXV0aWxzL1xyXG5cclxuIChjKSBNYXhpbWUgSGFpbmVhdWx0IDxoYWluZWF1bHRAZ21haWwuY29tPlxyXG4gaHR0cDovL2hhaW5lYXVsdC5jb21cclxuIFxyXG4gTUlUIExpY2Vuc2UgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKVxyXG4gXHJcbiovXHJcblxyXG4oZnVuY3Rpb24oJCl7XHJcbiAgICAkLmV4dGVuZCgkLmZuLCB7XHJcbiAgICAgICAgZGVsYXllZE9ic2VydmVyOiBmdW5jdGlvbihjYWxsYmFjaywgZGVsYXksIG9wdGlvbnMpe1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICB2YXIgZWwgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9wID0gb3B0aW9ucyB8fCB7fTtcclxuICAgICAgICAgICAgICAgIGVsLmRhdGEoJ29sZHZhbCcsIGVsLnZhbCgpKVxyXG4gICAgICAgICAgICAgICAgICAgIC5kYXRhKCdkZWxheScsIGRlbGF5IHx8IDAuNSlcclxuICAgICAgICAgICAgICAgICAgICAuZGF0YSgnY29uZGl0aW9uJywgb3AuY29uZGl0aW9uIHx8IGZ1bmN0aW9uKCkgeyByZXR1cm4gKCQodGhpcykuZGF0YSgnb2xkdmFsJykgPT0gJCh0aGlzKS52YWwoKSk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLmRhdGEoJ2NhbGxiYWNrJywgY2FsbGJhY2spXHJcbiAgICAgICAgICAgICAgICAgICAgWyhvcC5ldmVudHx8J2tleXVwJyldKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbC5kYXRhKCdjb25kaXRpb24nKS5hcHBseShlbCkpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsLmRhdGEoJ3RpbWVyJykpIHsgY2xlYXJUaW1lb3V0KGVsLmRhdGEoJ3RpbWVyJykpOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5kYXRhKCd0aW1lcicsIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5kYXRhKCdjYWxsYmFjaycpLmFwcGx5KGVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGVsLmRhdGEoJ2RlbGF5JykgKiAxMDAwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5kYXRhKCdvbGR2YWwnLCBlbC52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pKGpRdWVyeSk7XHJcbi8qKlxyXG4gKiBGbGFzaCAoaHR0cDovL2pxdWVyeS5sdWtlbHV0bWFuLmNvbS9wbHVnaW5zL2ZsYXNoKVxyXG4gKiBBIGpRdWVyeSBwbHVnaW4gZm9yIGVtYmVkZGluZyBGbGFzaCBtb3ZpZXMuXHJcbiAqIFxyXG4gKiBWZXJzaW9uIDEuMFxyXG4gKiBOb3ZlbWJlciA5dGgsIDIwMDZcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDA2IEx1a2UgTHV0bWFuIChodHRwOi8vd3d3Lmx1a2VsdXRtYW4uY29tKVxyXG4gKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlcy5cclxuICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcclxuICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5waHBcclxuICogXHJcbiAqIEluc3BpcmVkIGJ5OlxyXG4gKiBTV0ZPYmplY3QgKGh0dHA6Ly9ibG9nLmRlY29uY2VwdC5jb20vc3dmb2JqZWN0LylcclxuICogVUZPIChodHRwOi8vd3d3LmJvYmJ5dmFuZGVyc2x1aXMuY29tL3Vmby8pXHJcbiAqIHNJRlIgKGh0dHA6Ly93d3cubWlrZWluZHVzdHJpZXMuY29tL3NpZnIvKVxyXG4gKiBcclxuICogSU1QT1JUQU5UOiBcclxuICogVGhlIHBhY2tlZCB2ZXJzaW9uIG9mIGpRdWVyeSBicmVha3MgQWN0aXZlWCBjb250cm9sXHJcbiAqIGFjdGl2YXRpb24gaW4gSW50ZXJuZXQgRXhwbG9yZXIuIFVzZSBKU01pbiB0byBtaW5pZml5XHJcbiAqIGpRdWVyeSAoc2VlOiBodHRwOi8vanF1ZXJ5Lmx1a2VsdXRtYW4uY29tL3BsdWdpbnMvZmxhc2gjYWN0aXZleCkuXHJcbiAqXHJcbiAqKi8gXHJcbjsoZnVuY3Rpb24oKXtcclxuXHRcclxudmFyICQkO1xyXG5cclxuLyoqXHJcbiAqIFxyXG4gKiBAZGVzYyBSZXBsYWNlIG1hdGNoaW5nIGVsZW1lbnRzIHdpdGggYSBmbGFzaCBtb3ZpZS5cclxuICogQGF1dGhvciBMdWtlIEx1dG1hblxyXG4gKiBAdmVyc2lvbiAxLjAuMVxyXG4gKlxyXG4gKiBAbmFtZSBmbGFzaFxyXG4gKiBAcGFyYW0gSGFzaCBodG1sT3B0aW9ucyBPcHRpb25zIGZvciB0aGUgZW1iZWQvb2JqZWN0IHRhZy5cclxuICogQHBhcmFtIEhhc2ggcGx1Z2luT3B0aW9ucyBPcHRpb25zIGZvciBkZXRlY3RpbmcvdXBkYXRpbmcgdGhlIEZsYXNoIHBsdWdpbiAob3B0aW9uYWwpLlxyXG4gKiBAcGFyYW0gRnVuY3Rpb24gcmVwbGFjZSBDdXN0b20gYmxvY2sgY2FsbGVkIGZvciBlYWNoIG1hdGNoZWQgZWxlbWVudCBpZiBmbGFzaCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKS5cclxuICogQHBhcmFtIEZ1bmN0aW9uIHVwZGF0ZSBDdXN0b20gYmxvY2sgY2FsbGVkIGZvciBlYWNoIG1hdGNoZWQgaWYgZmxhc2ggaXNuJ3QgaW5zdGFsbGVkIChvcHRpb25hbCkuXHJcbiAqIEB0eXBlIGpRdWVyeVxyXG4gKlxyXG4gKiBAY2F0IHBsdWdpbnMvZmxhc2hcclxuICogXHJcbiAqIEBleGFtcGxlICQoJyNoZWxsbycpLmZsYXNoKHsgc3JjOiAnaGVsbG8uc3dmJyB9KTtcclxuICogQGRlc2MgRW1iZWQgYSBGbGFzaCBtb3ZpZS5cclxuICpcclxuICogQGV4YW1wbGUgJCgnI2hlbGxvJykuZmxhc2goeyBzcmM6ICdoZWxsby5zd2YnIH0sIHsgdmVyc2lvbjogOCB9KTtcclxuICogQGRlc2MgRW1iZWQgYSBGbGFzaCA4IG1vdmllLlxyXG4gKlxyXG4gKiBAZXhhbXBsZSAkKCcjaGVsbG8nKS5mbGFzaCh7IHNyYzogJ2hlbGxvLnN3ZicgfSwgeyBleHByZXNzSW5zdGFsbDogdHJ1ZSB9KTtcclxuICogQGRlc2MgRW1iZWQgYSBGbGFzaCBtb3ZpZSB1c2luZyBFeHByZXNzIEluc3RhbGwgaWYgZmxhc2ggaXNuJ3QgaW5zdGFsbGVkLlxyXG4gKlxyXG4gKiBAZXhhbXBsZSAkKCcjaGVsbG8nKS5mbGFzaCh7IHNyYzogJ2hlbGxvLnN3ZicgfSwgeyB1cGRhdGU6IGZhbHNlIH0pO1xyXG4gKiBAZGVzYyBFbWJlZCBhIEZsYXNoIG1vdmllLCBkb24ndCBzaG93IGFuIHVwZGF0ZSBtZXNzYWdlIGlmIEZsYXNoIGlzbid0IGluc3RhbGxlZC5cclxuICpcclxuKiovXHJcbiQkID0galF1ZXJ5LmZuLmZsYXNoID0gZnVuY3Rpb24oaHRtbE9wdGlvbnMsIHBsdWdpbk9wdGlvbnMsIHJlcGxhY2UsIHVwZGF0ZSkge1xyXG5cdFxyXG5cdC8vIFNldCB0aGUgZGVmYXVsdCBibG9jay5cclxuXHR2YXIgYmxvY2sgPSByZXBsYWNlIHx8ICQkLnJlcGxhY2U7XHJcblx0XHJcblx0Ly8gTWVyZ2UgdGhlIGRlZmF1bHQgYW5kIHBhc3NlZCBwbHVnaW4gb3B0aW9ucy5cclxuXHRwbHVnaW5PcHRpb25zID0gJCQuY29weSgkJC5wbHVnaW5PcHRpb25zLCBwbHVnaW5PcHRpb25zKTtcclxuXHRcclxuXHQvLyBEZXRlY3QgRmxhc2guXHJcblx0aWYoISQkLmhhc0ZsYXNoKHBsdWdpbk9wdGlvbnMudmVyc2lvbikpIHtcclxuXHRcdC8vIFVzZSBFeHByZXNzIEluc3RhbGwgKGlmIHNwZWNpZmllZCBhbmQgRmxhc2ggcGx1Z2luIDYsMCw2NSBvciBoaWdoZXIgaXMgaW5zdGFsbGVkKS5cclxuXHRcdGlmKHBsdWdpbk9wdGlvbnMuZXhwcmVzc0luc3RhbGwgJiYgJCQuaGFzRmxhc2goNiwwLDY1KSkge1xyXG5cdFx0XHQvLyBBZGQgdGhlIG5lY2Vzc2FyeSBmbGFzaHZhcnMgKG1lcmdlZCBsYXRlcikuXHJcblx0XHRcdHZhciBleHByZXNzSW5zdGFsbE9wdGlvbnMgPSB7XHJcblx0XHRcdFx0Zmxhc2h2YXJzOiB7ICBcdFxyXG5cdFx0XHRcdFx0TU1yZWRpcmVjdFVSTDogbG9jYXRpb24sXHJcblx0XHRcdFx0XHRNTXBsYXllclR5cGU6ICdQbHVnSW4nLFxyXG5cdFx0XHRcdFx0TU1kb2N0aXRsZTogalF1ZXJ5KCd0aXRsZScpLnRleHQoKSBcclxuXHRcdFx0XHR9XHRcdFx0XHRcdFxyXG5cdFx0XHR9O1xyXG5cdFx0Ly8gQXNrIHRoZSB1c2VyIHRvIHVwZGF0ZSAoaWYgc3BlY2lmaWVkKS5cclxuXHRcdH0gZWxzZSBpZiAocGx1Z2luT3B0aW9ucy51cGRhdGUpIHtcclxuXHRcdFx0Ly8gQ2hhbmdlIHRoZSBibG9jayB0byBpbnNlcnQgdGhlIHVwZGF0ZSBtZXNzYWdlIGluc3RlYWQgb2YgdGhlIGZsYXNoIG1vdmllLlxyXG5cdFx0XHRibG9jayA9IHVwZGF0ZSB8fCAkJC51cGRhdGU7XHJcblx0XHQvLyBGYWlsXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBUaGUgcmVxdWlyZWQgdmVyc2lvbiBvZiBmbGFzaCBpc24ndCBpbnN0YWxsZWQuXHJcblx0XHRcdC8vIEV4cHJlc3MgSW5zdGFsbCBpcyB0dXJuZWQgb2ZmLCBvciBmbGFzaCA2LDAsNjUgaXNuJ3QgaW5zdGFsbGVkLlxyXG5cdFx0XHQvLyBVcGRhdGUgaXMgdHVybmVkIG9mZi5cclxuXHRcdFx0Ly8gUmV0dXJuIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcuXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRcclxuXHQvLyBNZXJnZSB0aGUgZGVmYXVsdCwgZXhwcmVzcyBpbnN0YWxsIGFuZCBwYXNzZWQgaHRtbCBvcHRpb25zLlxyXG5cdGh0bWxPcHRpb25zID0gJCQuY29weSgkJC5odG1sT3B0aW9ucywgZXhwcmVzc0luc3RhbGxPcHRpb25zLCBodG1sT3B0aW9ucyk7XHJcblx0XHJcblx0Ly8gSW52b2tlICRibG9jayAod2l0aCBhIGNvcHkgb2YgdGhlIG1lcmdlZCBodG1sIG9wdGlvbnMpIGZvciBlYWNoIGVsZW1lbnQuXHJcblx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1xyXG5cdFx0YmxvY2suY2FsbCh0aGlzLCAkJC5jb3B5KGh0bWxPcHRpb25zKSk7XHJcblx0fSk7XHJcblx0XHJcbn07XHJcbi8qKlxyXG4gKlxyXG4gKiBAbmFtZSBmbGFzaC5jb3B5XHJcbiAqIEBkZXNjIENvcHkgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBvYmplY3RzIGludG8gYSBuZXcgb2JqZWN0LlxyXG4gKiBAdHlwZSBPYmplY3RcclxuICogXHJcbiAqIEBleGFtcGxlICQkLmNvcHkoeyBmb286IDEgfSwgeyBiYXI6IDIgfSk7XHJcbiAqIEByZXN1bHQgeyBmb286IDEsIGJhcjogMiB9O1xyXG4gKlxyXG4qKi9cclxuJCQuY29weSA9IGZ1bmN0aW9uKCkge1xyXG5cdHZhciBvcHRpb25zID0ge30sIGZsYXNodmFycyA9IHt9O1xyXG5cdGZvcih2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XHJcblx0XHRpZihhcmcgPT0gdW5kZWZpbmVkKSBjb250aW51ZTtcclxuXHRcdGpRdWVyeS5leHRlbmQob3B0aW9ucywgYXJnKTtcclxuXHRcdC8vIGRvbid0IGNsb2JiZXIgb25lIGZsYXNoIHZhcnMgb2JqZWN0IHdpdGggYW5vdGhlclxyXG5cdFx0Ly8gbWVyZ2UgdGhlbSBpbnN0ZWFkXHJcblx0XHRpZihhcmcuZmxhc2h2YXJzID09IHVuZGVmaW5lZCkgY29udGludWU7XHJcblx0XHRqUXVlcnkuZXh0ZW5kKGZsYXNodmFycywgYXJnLmZsYXNodmFycyk7XHJcblx0fVxyXG5cdG9wdGlvbnMuZmxhc2h2YXJzID0gZmxhc2h2YXJzO1xyXG5cdHJldHVybiBvcHRpb25zO1xyXG59O1xyXG4vKlxyXG4gKiBAbmFtZSBmbGFzaC5oYXNGbGFzaFxyXG4gKiBAZGVzYyBDaGVjayBpZiBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIEZsYXNoIHBsdWdpbiBpcyBpbnN0YWxsZWRcclxuICogQHR5cGUgQm9vbGVhblxyXG4gKlxyXG4qKi9cclxuJCQuaGFzRmxhc2ggPSBmdW5jdGlvbigpIHtcclxuXHQvLyBsb29rIGZvciBhIGZsYWcgaW4gdGhlIHF1ZXJ5IHN0cmluZyB0byBieXBhc3MgZmxhc2ggZGV0ZWN0aW9uXHJcblx0aWYoL2hhc0ZsYXNoXFw9dHJ1ZS8udGVzdChsb2NhdGlvbikpIHJldHVybiB0cnVlO1xyXG5cdGlmKC9oYXNGbGFzaFxcPWZhbHNlLy50ZXN0KGxvY2F0aW9uKSkgcmV0dXJuIGZhbHNlO1xyXG5cdHZhciBwdiA9ICQkLmhhc0ZsYXNoLnBsYXllclZlcnNpb24oKS5tYXRjaCgvXFxkKy9nKTtcclxuXHR2YXIgcnYgPSBTdHJpbmcoW2FyZ3VtZW50c1swXSwgYXJndW1lbnRzWzFdLCBhcmd1bWVudHNbMl1dKS5tYXRjaCgvXFxkKy9nKSB8fCBTdHJpbmcoJCQucGx1Z2luT3B0aW9ucy52ZXJzaW9uKS5tYXRjaCgvXFxkKy9nKTtcclxuXHRmb3IodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcblx0XHRwdltpXSA9IHBhcnNlSW50KHB2W2ldIHx8IDApO1xyXG5cdFx0cnZbaV0gPSBwYXJzZUludChydltpXSB8fCAwKTtcclxuXHRcdC8vIHBsYXllciBpcyBsZXNzIHRoYW4gcmVxdWlyZWRcclxuXHRcdGlmKHB2W2ldIDwgcnZbaV0pIHJldHVybiBmYWxzZTtcclxuXHRcdC8vIHBsYXllciBpcyBncmVhdGVyIHRoYW4gcmVxdWlyZWRcclxuXHRcdGlmKHB2W2ldID4gcnZbaV0pIHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHQvLyBtYWpvciB2ZXJzaW9uLCBtaW5vciB2ZXJzaW9uIGFuZCByZXZpc2lvbiBtYXRjaCBleGFjdGx5XHJcblx0cmV0dXJuIHRydWU7XHJcbn07XHJcbi8qKlxyXG4gKlxyXG4gKiBAbmFtZSBmbGFzaC5oYXNGbGFzaC5wbGF5ZXJWZXJzaW9uXHJcbiAqIEBkZXNjIEdldCB0aGUgdmVyc2lvbiBvZiB0aGUgaW5zdGFsbGVkIEZsYXNoIHBsdWdpbi5cclxuICogQHR5cGUgU3RyaW5nXHJcbiAqXHJcbioqL1xyXG4kJC5oYXNGbGFzaC5wbGF5ZXJWZXJzaW9uID0gZnVuY3Rpb24oKSB7XHJcblx0Ly8gaWVcclxuXHR0cnkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Ly8gYXZvaWQgZnA2IG1pbm9yIHZlcnNpb24gbG9va3VwIGlzc3Vlc1xyXG5cdFx0XHQvLyBzZWU6IGh0dHA6Ly9ibG9nLmRlY29uY2VwdC5jb20vMjAwNi8wMS8xMS9nZXR2YXJpYWJsZS1zZXR2YXJpYWJsZS1jcmFzaC1pbnRlcm5ldC1leHBsb3Jlci1mbGFzaC02L1xyXG5cdFx0XHR2YXIgYXhvID0gbmV3IEFjdGl2ZVhPYmplY3QoJ1Nob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLjYnKTtcclxuXHRcdFx0dHJ5IHsgYXhvLkFsbG93U2NyaXB0QWNjZXNzID0gJ2Fsd2F5cyc7XHR9IFxyXG5cdFx0XHRjYXRjaChlKSB7IHJldHVybiAnNiwwLDAnOyB9XHRcdFx0XHRcclxuXHRcdH0gY2F0Y2goZSkge31cclxuXHRcdHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2gnKS5HZXRWYXJpYWJsZSgnJHZlcnNpb24nKS5yZXBsYWNlKC9cXEQrL2csICcsJykubWF0Y2goL14sPyguKyksPyQvKVsxXTtcclxuXHQvLyBvdGhlciBicm93c2Vyc1xyXG5cdH0gY2F0Y2goZSkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0aWYobmF2aWdhdG9yLm1pbWVUeXBlc1tcImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoXCJdLmVuYWJsZWRQbHVnaW4pe1xyXG5cdFx0XHRcdHJldHVybiAobmF2aWdhdG9yLnBsdWdpbnNbXCJTaG9ja3dhdmUgRmxhc2ggMi4wXCJdIHx8IG5hdmlnYXRvci5wbHVnaW5zW1wiU2hvY2t3YXZlIEZsYXNoXCJdKS5kZXNjcmlwdGlvbi5yZXBsYWNlKC9cXEQrL2csIFwiLFwiKS5tYXRjaCgvXiw/KC4rKSw/JC8pWzFdO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoKGUpIHt9XHRcdFxyXG5cdH1cclxuXHRyZXR1cm4gJzAsMCwwJztcclxufTtcclxuLyoqXHJcbiAqXHJcbiAqIEBuYW1lIGZsYXNoLmh0bWxPcHRpb25zXHJcbiAqIEBkZXNjIFRoZSBkZWZhdWx0IHNldCBvZiBvcHRpb25zIGZvciB0aGUgb2JqZWN0IG9yIGVtYmVkIHRhZy5cclxuICpcclxuKiovXHJcbiQkLmh0bWxPcHRpb25zID0ge1xyXG5cdGhlaWdodDogMjQwLFxyXG5cdGZsYXNodmFyczoge30sXHJcblx0cGx1Z2luc3BhZ2U6ICdodHRwOi8vd3d3LmFkb2JlLmNvbS9nby9nZXRmbGFzaHBsYXllcicsXHJcblx0c3JjOiAnIycsXHJcblx0dHlwZTogJ2FwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoJyxcclxuXHR3aWR0aDogMzIwXHRcdFxyXG59O1xyXG4vKipcclxuICpcclxuICogQG5hbWUgZmxhc2gucGx1Z2luT3B0aW9uc1xyXG4gKiBAZGVzYyBUaGUgZGVmYXVsdCBzZXQgb2Ygb3B0aW9ucyBmb3IgY2hlY2tpbmcvdXBkYXRpbmcgdGhlIGZsYXNoIFBsdWdpbi5cclxuICpcclxuKiovXHJcbiQkLnBsdWdpbk9wdGlvbnMgPSB7XHJcblx0ZXhwcmVzc0luc3RhbGw6IGZhbHNlLFxyXG5cdHVwZGF0ZTogdHJ1ZSxcclxuXHR2ZXJzaW9uOiAnNi4wLjY1J1xyXG59O1xyXG4vKipcclxuICpcclxuICogQG5hbWUgZmxhc2gucmVwbGFjZVxyXG4gKiBAZGVzYyBUaGUgZGVmYXVsdCBtZXRob2QgZm9yIHJlcGxhY2luZyBhbiBlbGVtZW50IHdpdGggYSBGbGFzaCBtb3ZpZS5cclxuICpcclxuKiovXHJcbiQkLnJlcGxhY2UgPSBmdW5jdGlvbihodG1sT3B0aW9ucykge1xyXG5cdHRoaXMuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJhbHRcIj4nK3RoaXMuaW5uZXJIVE1MKyc8L2Rpdj4nO1xyXG5cdGpRdWVyeSh0aGlzKVxyXG5cdFx0LmFkZENsYXNzKCdmbGFzaC1yZXBsYWNlZCcpXHJcblx0XHQucHJlcGVuZCgkJC50cmFuc2Zvcm0oaHRtbE9wdGlvbnMpKTtcclxufTtcclxuLyoqXHJcbiAqXHJcbiAqIEBuYW1lIGZsYXNoLnVwZGF0ZVxyXG4gKiBAZGVzYyBUaGUgZGVmYXVsdCBtZXRob2QgZm9yIHJlcGxhY2luZyBhbiBlbGVtZW50IHdpdGggYW4gdXBkYXRlIG1lc3NhZ2UuXHJcbiAqXHJcbioqL1xyXG4kJC51cGRhdGUgPSBmdW5jdGlvbihodG1sT3B0aW9ucykge1xyXG5cdHZhciB1cmwgPSBTdHJpbmcobG9jYXRpb24pLnNwbGl0KCc/Jyk7XHJcblx0dXJsLnNwbGljZSgxLDAsJz9oYXNGbGFzaD10cnVlJicpO1xyXG5cdHVybCA9IHVybC5qb2luKCcnKTtcclxuXHR2YXIgbXNnID0gJzxwPlRoaXMgY29udGVudCByZXF1aXJlcyB0aGUgRmxhc2ggUGxheWVyLiA8YSBocmVmPVwiaHR0cDovL3d3dy5hZG9iZS5jb20vZ28vZ2V0Zmxhc2hwbGF5ZXJcIj5Eb3dubG9hZCBGbGFzaCBQbGF5ZXI8L2E+LiBBbHJlYWR5IGhhdmUgRmxhc2ggUGxheWVyPyA8YSBocmVmPVwiJyt1cmwrJ1wiPkNsaWNrIGhlcmUuPC9hPjwvcD4nO1xyXG5cdHRoaXMuaW5uZXJIVE1MID0gJzxzcGFuIGNsYXNzPVwiYWx0XCI+Jyt0aGlzLmlubmVySFRNTCsnPC9zcGFuPic7XHJcblx0alF1ZXJ5KHRoaXMpXHJcblx0XHQuYWRkQ2xhc3MoJ2ZsYXNoLXVwZGF0ZScpXHJcblx0XHQucHJlcGVuZChtc2cpO1xyXG59O1xyXG4vKipcclxuICpcclxuICogQGRlc2MgQ29udmVydCBhIGhhc2ggb2YgaHRtbCBvcHRpb25zIHRvIGEgc3RyaW5nIG9mIGF0dHJpYnV0ZXMsIHVzaW5nIEZ1bmN0aW9uLmFwcGx5KCkuIFxyXG4gKiBAZXhhbXBsZSB0b0F0dHJpYnV0ZVN0cmluZy5hcHBseShodG1sT3B0aW9ucylcclxuICogQHJlc3VsdCBmb289XCJiYXJcIiBmb289XCJiYXJcIlxyXG4gKlxyXG4qKi9cclxuZnVuY3Rpb24gdG9BdHRyaWJ1dGVTdHJpbmcoKSB7XHJcblx0dmFyIHMgPSAnJztcclxuXHRmb3IodmFyIGtleSBpbiB0aGlzKVxyXG5cdFx0aWYodHlwZW9mIHRoaXNba2V5XSAhPSAnZnVuY3Rpb24nKVxyXG5cdFx0XHRzICs9IGtleSsnPVwiJyt0aGlzW2tleV0rJ1wiICc7XHJcblx0cmV0dXJuIHM7XHRcdFxyXG59O1xyXG4vKipcclxuICpcclxuICogQGRlc2MgQ29udmVydCBhIGhhc2ggb2YgZmxhc2h2YXJzIHRvIGEgdXJsLWVuY29kZWQgc3RyaW5nLCB1c2luZyBGdW5jdGlvbi5hcHBseSgpLiBcclxuICogQGV4YW1wbGUgdG9GbGFzaHZhcnNTdHJpbmcuYXBwbHkoZmxhc2h2YXJzT2JqZWN0KVxyXG4gKiBAcmVzdWx0IGZvbz1iYXImZm9vPWJhclxyXG4gKlxyXG4qKi9cclxuZnVuY3Rpb24gdG9GbGFzaHZhcnNTdHJpbmcoKSB7XHJcblx0dmFyIHMgPSAnJztcclxuXHRmb3IodmFyIGtleSBpbiB0aGlzKVxyXG5cdFx0aWYodHlwZW9mIHRoaXNba2V5XSAhPSAnZnVuY3Rpb24nKVxyXG5cdFx0XHRzICs9IGtleSsnPScrZW5jb2RlVVJJQ29tcG9uZW50KHRoaXNba2V5XSkrJyYnO1xyXG5cdHJldHVybiBzLnJlcGxhY2UoLyYkLywgJycpO1x0XHRcclxufTtcclxuLyoqXHJcbiAqXHJcbiAqIEBuYW1lIGZsYXNoLnRyYW5zZm9ybVxyXG4gKiBAZGVzYyBUcmFuc2Zvcm0gYSBzZXQgb2YgaHRtbCBvcHRpb25zIGludG8gYW4gZW1iZWQgdGFnLlxyXG4gKiBAdHlwZSBTdHJpbmcgXHJcbiAqXHJcbiAqIEBleGFtcGxlICQkLnRyYW5zZm9ybShodG1sT3B0aW9ucylcclxuICogQHJlc3VsdCA8ZW1iZWQgc3JjPVwiZm9vLnN3ZlwiIC4uLiAvPlxyXG4gKlxyXG4gKiBOb3RlOiBUaGUgZW1iZWQgdGFnIGlzIE5PVCBzdGFuZGFyZHMtY29tcGxpYW50LCBidXQgaXQgXHJcbiAqIHdvcmtzIGluIGFsbCBjdXJyZW50IGJyb3dzZXJzLiBmbGFzaC50cmFuc2Zvcm0gY2FuIGJlXHJcbiAqIG92ZXJ3cml0dGVuIHdpdGggYSBjdXN0b20gZnVuY3Rpb24gdG8gZ2VuZXJhdGUgbW9yZSBcclxuICogc3RhbmRhcmRzLWNvbXBsaWFudCBtYXJrdXAuXHJcbiAqXHJcbioqL1xyXG4kJC50cmFuc2Zvcm0gPSBmdW5jdGlvbihodG1sT3B0aW9ucykge1xyXG5cdGh0bWxPcHRpb25zLnRvU3RyaW5nID0gdG9BdHRyaWJ1dGVTdHJpbmc7XHJcblx0aWYoaHRtbE9wdGlvbnMuZmxhc2h2YXJzKSBodG1sT3B0aW9ucy5mbGFzaHZhcnMudG9TdHJpbmcgPSB0b0ZsYXNodmFyc1N0cmluZztcclxuXHRyZXR1cm4gJzxlbWJlZCAnICsgU3RyaW5nKGh0bWxPcHRpb25zKSArICcvPic7XHRcdFxyXG59O1xyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEZsYXNoIFBsYXllciA5IEZpeCAoaHR0cDovL2Jsb2cuZGVjb25jZXB0LmNvbS8yMDA2LzA3LzI4L3N3Zm9iamVjdC0xNDMtcmVsZWFzZWQvKVxyXG4gKlxyXG4qKi9cclxuaWYgKHdpbmRvdy5hdHRhY2hFdmVudCkge1xyXG5cdHdpbmRvdy5hdHRhY2hFdmVudChcIm9uYmVmb3JldW5sb2FkXCIsIGZ1bmN0aW9uKCl7XHJcblx0XHRfX2ZsYXNoX3VubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHt9O1xyXG5cdFx0X19mbGFzaF9zYXZlZFVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHt9O1xyXG5cdH0pO1xyXG59XHJcblx0XHJcbn0pKCk7XHJcbihmdW5jdGlvbigkKXtcclxuICAgICQuX2kxOG4gPSB7IHRyYW5zOiB7fSwgJ2RlZmF1bHQnOiAgJ2VuJywgbGFuZ3VhZ2U6ICdlbicgfTtcclxuICAgICQuaTE4biA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBnZXRUcmFucyA9IGZ1bmN0aW9uKG5zLCBzdHIpIHtcclxuICAgICAgICAgICAgdmFyIHRyYW5zID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHN0cmluZyBleGlzdHMgaW4gdHJhbnNsYXRpb25cclxuICAgICAgICAgICAgaWYgKCQuX2kxOG4udHJhbnNbJC5faTE4bi5sYW5ndWFnZV0gXHJcbiAgICAgICAgICAgICAgICAmJiAkLl9pMThuLnRyYW5zWyQuX2kxOG4ubGFuZ3VhZ2VdW25zXVxyXG4gICAgICAgICAgICAgICAgJiYgJC5faTE4bi50cmFuc1skLl9pMThuLmxhbmd1YWdlXVtuc11bc3RyXSkge1xyXG4gICAgICAgICAgICAgICAgdHJhbnMgPSAkLl9pMThuLnRyYW5zWyQuX2kxOG4ubGFuZ3VhZ2VdW25zXVtzdHJdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIG9yIGV4aXN0cyBpbiBkZWZhdWx0XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCQuX2kxOG4udHJhbnNbJC5faTE4blsnZGVmYXVsdCddXSBcclxuICAgICAgICAgICAgICAgICAgICAgJiYgJC5faTE4bi50cmFuc1skLl9pMThuWydkZWZhdWx0J11dW25zXVxyXG4gICAgICAgICAgICAgICAgICAgICAmJiAkLl9pMThuLnRyYW5zWyQuX2kxOG5bJ2RlZmF1bHQnXV1bbnNdW3N0cl0pIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zID0gJC5faTE4bi50cmFuc1skLl9pMThuWydkZWZhdWx0J11dW25zXVtzdHJdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHJldHVybiB0cmFucyBvciBvcmlnaW5hbCBzdHJpbmdcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zIHx8IHN0cjtcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIFNldCBsYW5ndWFnZSAoYWNjZXB0ZWQgZm9ybWF0czogZW4gb3IgZW4tVVMpXHJcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgICAgICQuX2kxOG4ubGFuZ3VhZ2UgPSBhcmd1bWVudHNbMF07IFxyXG4gICAgICAgICAgICByZXR1cm4gJC5faTE4bi5sYW5ndWFnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGdldCB0cmFuc2xhdGlvblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mKGFyZ3VtZW50c1sxXSkgPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0cmFucyA9IGdldFRyYW5zKGFyZ3VtZW50c1swXSwgYXJndW1lbnRzWzFdKTtcclxuICAgICAgICAgICAgICAgIC8vIGhhcyB2YXJpYWJsZXMgZm9yIHN0cmluZyBmb3JtYXRpbmdcclxuICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNbMl0gJiYgdHlwZW9mKGFyZ3VtZW50c1syXSkgPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5mb3JtYXQodHJhbnMsIGFyZ3VtZW50c1syXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2V0IHRyYW5zbGF0aW9uXHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRtcCAgPSBhcmd1bWVudHNbMF0uc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgICAgIHZhciBsYW5nID0gdG1wWzBdO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5zICAgPSB0bXBbMV0gfHwgJ2pRdWVyeSc7XHJcbiAgICAgICAgICAgICAgICBpZiAoISQuX2kxOG4udHJhbnNbbGFuZ10pIHtcclxuICAgICAgICAgICAgICAgICAgICAkLl9pMThuLnRyYW5zW2xhbmddID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgJC5faTE4bi50cmFuc1tsYW5nXVtuc10gPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAkLmV4dGVuZCgkLl9pMThuLnRyYW5zW2xhbmddW25zXSwgYXJndW1lbnRzWzFdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pKGpRdWVyeSk7XHJcbi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEpvc2ggQnVzaCAoZGlnaXRhbGJ1c2guY29tKVxyXG4gKiBcclxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb25cclxuICogb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb25cclxuICogZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0XHJcbiAqIHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLFxyXG4gKiBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxyXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcclxuICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmdcclxuICogY29uZGl0aW9uczpcclxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcclxuICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXHJcbiAqIFxyXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxyXG4gKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVNcclxuICogT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcclxuICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFRcclxuICogSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksXHJcbiAqIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xyXG4gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SXHJcbiAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gXHJcbiAqL1xyXG4gXHJcbi8qXHJcbiAqIFZlcnNpb246IDEuMS4zXHJcbiAqIFJlbGVhc2U6IDIwMDgtMDQtMTZcclxuICovIFxyXG4oZnVuY3Rpb24oJCkge1xyXG5cclxuXHQvL0hlbHBlciBGdW5jdGlvbiBmb3IgQ2FyZXQgcG9zaXRpb25pbmdcclxuXHQkLmZuLmNhcmV0PWZ1bmN0aW9uKGJlZ2luLGVuZCl7XHRcclxuXHRcdGlmKHRoaXMubGVuZ3RoPT0wKSByZXR1cm47XHJcblx0XHRpZiAodHlwZW9mIGJlZ2luID09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGVuZCA9ICh0eXBlb2YgZW5kID09ICdudW1iZXInKT9lbmQ6YmVnaW47ICBcclxuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdGlmKHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2Upe1xyXG5cdFx0XHRcdFx0dGhpcy5mb2N1cygpO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRTZWxlY3Rpb25SYW5nZShiZWdpbixlbmQpO1xyXG5cdFx0XHRcdH1lbHNlIGlmICh0aGlzLmNyZWF0ZVRleHRSYW5nZSl7XHJcblx0XHRcdFx0XHR2YXIgcmFuZ2UgPSB0aGlzLmNyZWF0ZVRleHRSYW5nZSgpO1xyXG5cdFx0XHRcdFx0cmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcblx0XHRcdFx0XHRyYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmQpO1xyXG5cdFx0XHRcdFx0cmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBiZWdpbik7XHJcblx0XHRcdFx0XHRyYW5nZS5zZWxlY3QoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzWzBdLnNldFNlbGVjdGlvblJhbmdlKXtcclxuXHRcdFx0XHRiZWdpbiA9IHRoaXNbMF0uc2VsZWN0aW9uU3RhcnQ7XHJcblx0XHRcdFx0ZW5kID0gdGhpc1swXS5zZWxlY3Rpb25FbmQ7XHJcblx0XHRcdH1lbHNlIGlmIChkb2N1bWVudC5zZWxlY3Rpb24gJiYgZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKXtcclxuXHRcdFx0XHR2YXIgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtcdFx0XHRcclxuXHRcdFx0XHRiZWdpbiA9IDAgLSByYW5nZS5kdXBsaWNhdGUoKS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIC0xMDAwMDApO1xyXG5cdFx0XHRcdGVuZCA9IGJlZ2luICsgcmFuZ2UudGV4dC5sZW5ndGg7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHtiZWdpbjpiZWdpbixlbmQ6ZW5kfTtcclxuICAgICAgICB9ICAgICAgIFxyXG5cdH07XHJcblxyXG5cdC8vUHJlZGVmaW5lZCBjaGFyYWN0ZXIgZGVmaW5pdGlvbnNcclxuXHR2YXIgY2hhck1hcD17XHJcblx0XHQnOSc6XCJbMC05XVwiLFxyXG5cdFx0J2EnOlwiW0EtWmEtel1cIixcclxuXHRcdCcqJzpcIltBLVphLXowLTldXCJcclxuXHR9O1xyXG5cdFxyXG5cdC8vSGVscGVyIG1ldGhvZCB0byBpbmplY3QgY2hhcmFjdGVyIGRlZmluaXRpb25zXHJcblx0JC5tYXNrPXtcclxuXHRcdGFkZFBsYWNlaG9sZGVyIDogZnVuY3Rpb24oYyxyKXtcclxuXHRcdFx0Y2hhck1hcFtjXT1yO1xyXG5cdFx0fVxyXG5cdH07XHJcblx0XHJcblx0JC5mbi51bm1hc2s9ZnVuY3Rpb24oKXtcclxuXHRcdHJldHVybiB0aGlzLnRyaWdnZXIoXCJ1bm1hc2tcIik7XHJcblx0fTtcclxuXHRcclxuXHQvL01haW4gTWV0aG9kXHJcblx0JC5mbi5tYXNrID0gZnVuY3Rpb24obWFzayxzZXR0aW5ncykge1x0XHJcblx0XHRzZXR0aW5ncyA9ICQuZXh0ZW5kKHtcclxuXHRcdFx0cGxhY2Vob2xkZXI6IFwiX1wiLFx0XHRcdFxyXG5cdFx0XHRjb21wbGV0ZWQ6IG51bGxcclxuXHRcdH0sIHNldHRpbmdzKTtcdFx0XHJcblx0XHRcclxuXHRcdC8vQnVpbGQgUmVnZXggZm9yIGZvcm1hdCB2YWxpZGF0aW9uXHJcblx0XHR2YXIgcmUgPSBuZXcgUmVnRXhwKFwiXlwiK1x0XHJcblx0XHQkLm1hcCggbWFzay5zcGxpdChcIlwiKSwgZnVuY3Rpb24oYyxpKXtcdFx0ICBcdFx0ICBcclxuXHRcdCAgcmV0dXJuIGNoYXJNYXBbY118fCgoL1tBLVphLXowLTldLy50ZXN0KGMpP1wiXCI6XCJcXFxcXCIpK2MpO1xyXG5cdFx0fSkuam9pbignJykrXHRcdFx0XHRcclxuXHRcdFwiJFwiKTtcdFx0XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1x0XHRcclxuXHRcdFx0dmFyIGlucHV0PSQodGhpcyk7XHJcblx0XHRcdHZhciBidWZmZXI9bmV3IEFycmF5KG1hc2subGVuZ3RoKTtcclxuXHRcdFx0dmFyIGxvY2tlZD1uZXcgQXJyYXkobWFzay5sZW5ndGgpO1xyXG5cdFx0XHR2YXIgdmFsaWQ9ZmFsc2U7ICAgXHJcblx0XHRcdHZhciBpZ25vcmU9ZmFsc2U7ICBcdFx0XHQvL1ZhcmlhYmxlIGZvciBpZ25vcmluZyBjb250cm9sIGtleXNcclxuXHRcdFx0dmFyIGZpcnN0Tm9uTWFza1Bvcz1udWxsOyBcclxuXHRcdFx0XHJcblx0XHRcdC8vQnVpbGQgYnVmZmVyIGxheW91dCBmcm9tIG1hc2sgJiBkZXRlcm1pbmUgdGhlIGZpcnN0IG5vbiBtYXNrZWQgY2hhcmFjdGVyXHRcdFx0XHJcblx0XHRcdCQuZWFjaCggbWFzay5zcGxpdChcIlwiKSwgZnVuY3Rpb24oaSxjKXtcdFx0XHRcdFxyXG5cdFx0XHRcdGxvY2tlZFtpXT0oY2hhck1hcFtjXT09bnVsbCk7XHRcdFx0XHRcclxuXHRcdFx0XHRidWZmZXJbaV09bG9ja2VkW2ldP2M6c2V0dGluZ3MucGxhY2Vob2xkZXI7XHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0aWYoIWxvY2tlZFtpXSAmJiBmaXJzdE5vbk1hc2tQb3M9PW51bGwpXHJcblx0XHRcdFx0XHRmaXJzdE5vbk1hc2tQb3M9aTtcclxuXHRcdFx0fSk7XHRcdFxyXG5cdFx0XHRcclxuXHRcdFx0ZnVuY3Rpb24gZm9jdXNFdmVudCgpe1x0XHRcdFx0XHRcclxuXHRcdFx0XHRjaGVja1ZhbCgpO1xyXG5cdFx0XHRcdHdyaXRlQnVmZmVyKCk7XHJcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xyXG5cdFx0XHRcdFx0JChpbnB1dFswXSkuY2FyZXQodmFsaWQ/bWFzay5sZW5ndGg6Zmlyc3ROb25NYXNrUG9zKTtcdFx0XHRcdFx0XHJcblx0XHRcdFx0fSwwKTtcclxuXHRcdFx0fTtcclxuXHRcdFx0XHJcblx0XHRcdGZ1bmN0aW9uIGtleWRvd25FdmVudChlKXtcdFx0XHRcdFxyXG5cdFx0XHRcdHZhciBwb3M9JCh0aGlzKS5jYXJldCgpO1xyXG5cdFx0XHRcdHZhciBrID0gZS5rZXlDb2RlO1xyXG5cdFx0XHRcdGlnbm9yZT0oayA8IDE2IHx8IChrID4gMTYgJiYgayA8IDMyICkgfHwgKGsgPiAzMiAmJiBrIDwgNDEpKTtcclxuXHRcdFx0XHRcclxuXHRcdFx0XHQvL2RlbGV0ZSBzZWxlY3Rpb24gYmVmb3JlIHByb2NlZWRpbmdcclxuXHRcdFx0XHRpZigocG9zLmJlZ2luLXBvcy5lbmQpIT0wICYmICghaWdub3JlIHx8IGs9PTggfHwgaz09NDYpKXtcclxuXHRcdFx0XHRcdGNsZWFyQnVmZmVyKHBvcy5iZWdpbixwb3MuZW5kKTtcclxuXHRcdFx0XHR9XHRcclxuXHRcdFx0XHQvL2JhY2tzcGFjZSBhbmQgZGVsZXRlIGdldCBzcGVjaWFsIHRyZWF0bWVudFxyXG5cdFx0XHRcdGlmKGs9PTgpey8vYmFja3NwYWNlXHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0d2hpbGUocG9zLmJlZ2luLS0+PTApe1xyXG5cdFx0XHRcdFx0XHRpZighbG9ja2VkW3Bvcy5iZWdpbl0pe1x0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRidWZmZXJbcG9zLmJlZ2luXT1zZXR0aW5ncy5wbGFjZWhvbGRlcjtcclxuXHRcdFx0XHRcdFx0XHRpZigkLmJyb3dzZXIub3BlcmEpe1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly9PcGVyYSB3b24ndCBsZXQgeW91IGNhbmNlbCB0aGUgYmFja3NwYWNlLCBzbyB3ZSdsbCBsZXQgaXQgYmFja3NwYWNlIG92ZXIgYSBkdW1teSBjaGFyYWN0ZXIuXHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0cz13cml0ZUJ1ZmZlcigpO1xyXG5cdFx0XHRcdFx0XHRcdFx0aW5wdXQudmFsKHMuc3Vic3RyaW5nKDAscG9zLmJlZ2luKStcIiBcIitzLnN1YnN0cmluZyhwb3MuYmVnaW4pKTtcclxuXHRcdFx0XHRcdFx0XHRcdCQodGhpcykuY2FyZXQocG9zLmJlZ2luKzEpO1x0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0XHRcdHdyaXRlQnVmZmVyKCk7XHJcblx0XHRcdFx0XHRcdFx0XHQkKHRoaXMpLmNhcmV0KE1hdGgubWF4KGZpcnN0Tm9uTWFza1Bvcyxwb3MuYmVnaW4pKTtcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHR9ZWxzZSBpZihrPT00Nil7Ly9kZWxldGVcclxuXHRcdFx0XHRcdGNsZWFyQnVmZmVyKHBvcy5iZWdpbixwb3MuYmVnaW4rMSk7XHJcblx0XHRcdFx0XHR3cml0ZUJ1ZmZlcigpO1xyXG5cdFx0XHRcdFx0JCh0aGlzKS5jYXJldChNYXRoLm1heChmaXJzdE5vbk1hc2tQb3MscG9zLmJlZ2luKSk7XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1lbHNlIGlmIChrPT0yNyl7Ly9lc2NhcGVcclxuXHRcdFx0XHRcdGNsZWFyQnVmZmVyKDAsbWFzay5sZW5ndGgpO1xyXG5cdFx0XHRcdFx0d3JpdGVCdWZmZXIoKTtcclxuXHRcdFx0XHRcdCQodGhpcykuY2FyZXQoZmlyc3ROb25NYXNrUG9zKTtcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHR9O1xyXG5cdFx0XHRcclxuXHRcdFx0ZnVuY3Rpb24ga2V5cHJlc3NFdmVudChlKXtcdFx0XHRcdFx0XHJcblx0XHRcdFx0aWYoaWdub3JlKXtcclxuXHRcdFx0XHRcdGlnbm9yZT1mYWxzZTtcclxuXHRcdFx0XHRcdC8vRml4ZXMgTWFjIEZGIGJ1ZyBvbiBiYWNrc3BhY2VcclxuXHRcdFx0XHRcdHJldHVybiAoZS5rZXlDb2RlID09IDgpPyBmYWxzZTogbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZT1lfHx3aW5kb3cuZXZlbnQ7XHJcblx0XHRcdFx0dmFyIGs9ZS5jaGFyQ29kZXx8ZS5rZXlDb2RlfHxlLndoaWNoO1x0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdHZhciBwb3M9JCh0aGlzKS5jYXJldCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0aWYoZS5jdHJsS2V5IHx8IGUuYWx0S2V5KXsvL0lnbm9yZVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0fWVsc2UgaWYgKChrPj00MSAmJiBrPD0xMjIpIHx8az09MzIgfHwgaz4xODYpey8vdHlwZWFibGUgY2hhcmFjdGVyc1xyXG5cdFx0XHRcdFx0dmFyIHA9c2Vla05leHQocG9zLmJlZ2luLTEpO1x0XHRcdFx0XHRcclxuXHRcdFx0XHRcdGlmKHA8bWFzay5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0XHRpZihuZXcgUmVnRXhwKGNoYXJNYXBbbWFzay5jaGFyQXQocCldKS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoaykpKXtcclxuXHRcdFx0XHRcdFx0XHRidWZmZXJbcF09U3RyaW5nLmZyb21DaGFyQ29kZShrKTtcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHR3cml0ZUJ1ZmZlcigpO1xyXG5cdFx0XHRcdFx0XHRcdHZhciBuZXh0PXNlZWtOZXh0KHApO1xyXG5cdFx0XHRcdFx0XHRcdCQodGhpcykuY2FyZXQobmV4dCk7XHJcblx0XHRcdFx0XHRcdFx0aWYoc2V0dGluZ3MuY29tcGxldGVkICYmIG5leHQgPT0gbWFzay5sZW5ndGgpXHJcblx0XHRcdFx0XHRcdFx0XHRzZXR0aW5ncy5jb21wbGV0ZWQuY2FsbChpbnB1dCk7XHJcblx0XHRcdFx0XHRcdH1cdFx0XHRcdFxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cdFx0XHRcdFxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcdFx0XHRcdFxyXG5cdFx0XHR9O1xyXG5cdFx0XHRcclxuXHRcdFx0ZnVuY3Rpb24gY2xlYXJCdWZmZXIoc3RhcnQsZW5kKXtcclxuXHRcdFx0XHRmb3IodmFyIGk9c3RhcnQ7aTxlbmQmJmk8bWFzay5sZW5ndGg7aSsrKXtcclxuXHRcdFx0XHRcdGlmKCFsb2NrZWRbaV0pXHJcblx0XHRcdFx0XHRcdGJ1ZmZlcltpXT1zZXR0aW5ncy5wbGFjZWhvbGRlcjtcclxuXHRcdFx0XHR9XHRcdFx0XHRcclxuXHRcdFx0fTtcclxuXHRcdFx0XHJcblx0XHRcdGZ1bmN0aW9uIHdyaXRlQnVmZmVyKCl7XHRcdFx0XHRcclxuXHRcdFx0XHRyZXR1cm4gaW5wdXQudmFsKGJ1ZmZlci5qb2luKCcnKSkudmFsKCk7XHRcdFx0XHRcclxuXHRcdFx0fTtcclxuXHRcdFx0XHJcblx0XHRcdGZ1bmN0aW9uIGNoZWNrVmFsKCl7XHRcclxuXHRcdFx0XHQvL3RyeSB0byBwbGFjZSBjaGFyY3RlcnMgd2hlcmUgdGhleSBiZWxvbmdcclxuXHRcdFx0XHR2YXIgdGVzdD1pbnB1dC52YWwoKTtcclxuXHRcdFx0XHR2YXIgcG9zPTA7XHJcblx0XHRcdFx0Zm9yKHZhciBpPTA7aTxtYXNrLmxlbmd0aDtpKyspe1x0XHRcdFx0XHRcclxuXHRcdFx0XHRcdGlmKCFsb2NrZWRbaV0pe1xyXG5cdFx0XHRcdFx0XHRidWZmZXJbaV09c2V0dGluZ3MucGxhY2Vob2xkZXI7XHJcblx0XHRcdFx0XHRcdHdoaWxlKHBvcysrPHRlc3QubGVuZ3RoKXtcclxuXHRcdFx0XHRcdFx0XHQvL1JlZ2V4IFRlc3QgZWFjaCBjaGFyIGhlcmUuXHJcblx0XHRcdFx0XHRcdFx0dmFyIHJlQ2hhcj1uZXcgUmVnRXhwKGNoYXJNYXBbbWFzay5jaGFyQXQoaSldKTtcclxuXHRcdFx0XHRcdFx0XHRpZih0ZXN0LmNoYXJBdChwb3MtMSkubWF0Y2gocmVDaGFyKSl7XHJcblx0XHRcdFx0XHRcdFx0XHRidWZmZXJbaV09dGVzdC5jaGFyQXQocG9zLTEpO1x0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR2YXIgcz13cml0ZUJ1ZmZlcigpO1xyXG5cdFx0XHRcdGlmKCFzLm1hdGNoKHJlKSl7XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdGlucHV0LnZhbChcIlwiKTtcdFxyXG5cdFx0XHRcdFx0Y2xlYXJCdWZmZXIoMCxtYXNrLmxlbmd0aCk7XHJcblx0XHRcdFx0XHR2YWxpZD1mYWxzZTtcclxuXHRcdFx0XHR9ZWxzZVxyXG5cdFx0XHRcdFx0dmFsaWQ9dHJ1ZTtcclxuXHRcdFx0fTtcclxuXHRcdFx0XHJcblx0XHRcdGZ1bmN0aW9uIHNlZWtOZXh0KHBvcyl7XHRcdFx0XHRcclxuXHRcdFx0XHR3aGlsZSgrK3BvczxtYXNrLmxlbmd0aCl7XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0aWYoIWxvY2tlZFtwb3NdKVxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gcG9zO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gbWFzay5sZW5ndGg7XHJcblx0XHRcdH07XHJcblx0XHRcdFxyXG5cdFx0XHRpbnB1dC5vbmUoXCJ1bm1hc2tcIixmdW5jdGlvbigpe1xyXG5cdFx0XHRcdGlucHV0LnVuYmluZChcImZvY3VzXCIsZm9jdXNFdmVudCk7XHJcblx0XHRcdFx0aW5wdXQudW5iaW5kKFwiYmx1clwiLGNoZWNrVmFsKTtcclxuXHRcdFx0XHRpbnB1dC51bmJpbmQoXCJrZXlkb3duXCIsa2V5ZG93bkV2ZW50KTtcclxuXHRcdFx0XHRpbnB1dC51bmJpbmQoXCJrZXlwcmVzc1wiLGtleXByZXNzRXZlbnQpO1xyXG5cdFx0XHRcdGlmICgkLmJyb3dzZXIubXNpZSkgXHJcblx0XHRcdFx0XHR0aGlzLm9ucGFzdGU9IG51bGw7ICAgICAgICAgICAgICAgICAgICAgXHJcblx0XHRcdFx0ZWxzZSBpZiAoJC5icm93c2VyLm1vemlsbGEpXHJcblx0XHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0JyxjaGVja1ZhbCxmYWxzZSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRpbnB1dC5iaW5kKFwiZm9jdXNcIixmb2N1c0V2ZW50KTtcclxuXHRcdFx0aW5wdXQuYmluZChcImJsdXJcIixjaGVja1ZhbCk7XHJcblx0XHRcdGlucHV0LmJpbmQoXCJrZXlkb3duXCIsa2V5ZG93bkV2ZW50KTtcclxuXHRcdFx0aW5wdXQuYmluZChcImtleXByZXNzXCIsa2V5cHJlc3NFdmVudCk7XHJcblx0XHRcdC8vUGFzdGUgZXZlbnRzIGZvciBJRSBhbmQgTW96aWxsYSB0aGFua3MgdG8gS3Jpc3Rpbm4gU2lnbXVuZHNzb25cclxuXHRcdFx0aWYgKCQuYnJvd3Nlci5tc2llKSBcclxuXHRcdFx0XHR0aGlzLm9ucGFzdGU9IGZ1bmN0aW9uKCl7c2V0VGltZW91dChjaGVja1ZhbCwwKTt9OyAgICAgICAgICAgICAgICAgICAgIFxyXG5cdFx0XHRlbHNlIGlmICgkLmJyb3dzZXIubW96aWxsYSlcclxuXHRcdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JyxjaGVja1ZhbCxmYWxzZSk7XHJcblx0XHRcdFx0XHJcblx0XHRcdGNoZWNrVmFsKCk7Ly9QZXJmb3JtIGluaXRpYWwgY2hlY2sgZm9yIGV4aXN0aW5nIHZhbHVlc1xyXG5cdFx0fSk7XHJcblx0fTtcclxufSkoalF1ZXJ5KTtcclxuLyogQ29weXJpZ2h0IChjKSAyMDA2IEJyYW5kb24gQWFyb24gKGJyYW5kb24uYWFyb25AZ21haWwuY29tIHx8IGh0dHA6Ly9icmFuZG9uYWFyb24ubmV0KVxyXG4gKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKVxyXG4gKiBhbmQgR1BMIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLnBocCkgbGljZW5zZXMuXHJcbiAqIFRoYW5rcyB0bzogaHR0cDovL2Fkb21hcy5vcmcvamF2YXNjcmlwdC1tb3VzZS13aGVlbC8gZm9yIHNvbWUgcG9pbnRlcnMuXHJcbiAqIFRoYW5rcyB0bzogTWF0aGlhcyBCYW5rKGh0dHA6Ly93d3cubWF0aGlhcy1iYW5rLmRlKSBmb3IgYSBzY29wZSBidWcgZml4LlxyXG4gKlxyXG4gKiAkTGFzdENoYW5nZWREYXRlOiAyMDA3LTEyLTIwIDA5OjAyOjA4IC0wNjAwIChUaHUsIDIwIERlYyAyMDA3KSAkXHJcbiAqICRSZXY6IDQyNjUgJFxyXG4gKlxyXG4gKiBWZXJzaW9uOiAzLjBcclxuICogXHJcbiAqIFJlcXVpcmVzOiAkIDEuMi4yK1xyXG4gKi9cclxuXHJcbihmdW5jdGlvbigkKSB7XHJcblxyXG4kLmV2ZW50LnNwZWNpYWwubW91c2V3aGVlbCA9IHtcclxuXHRzZXR1cDogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgaGFuZGxlciA9ICQuZXZlbnQuc3BlY2lhbC5tb3VzZXdoZWVsLmhhbmRsZXI7XHJcblx0XHRcclxuXHRcdC8vIEZpeCBwYWdlWCwgcGFnZVksIGNsaWVudFggYW5kIGNsaWVudFkgZm9yIG1vemlsbGFcclxuXHRcdGlmICggJC5icm93c2VyLm1vemlsbGEgKVxyXG5cdFx0XHQkKHRoaXMpLmJpbmQoJ21vdXNlbW92ZS5tb3VzZXdoZWVsJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuXHRcdFx0XHQkLmRhdGEodGhpcywgJ213Y3Vyc29ycG9zZGF0YScsIHtcclxuXHRcdFx0XHRcdHBhZ2VYOiBldmVudC5wYWdlWCxcclxuXHRcdFx0XHRcdHBhZ2VZOiBldmVudC5wYWdlWSxcclxuXHRcdFx0XHRcdGNsaWVudFg6IGV2ZW50LmNsaWVudFgsXHJcblx0XHRcdFx0XHRjbGllbnRZOiBldmVudC5jbGllbnRZXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFxyXG5cdFx0aWYgKCB0aGlzLmFkZEV2ZW50TGlzdGVuZXIgKVxyXG5cdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoICgkLmJyb3dzZXIubW96aWxsYSA/ICdET01Nb3VzZVNjcm9sbCcgOiAnbW91c2V3aGVlbCcpLCBoYW5kbGVyLCBmYWxzZSk7XHJcblx0XHRlbHNlXHJcblx0XHRcdHRoaXMub25tb3VzZXdoZWVsID0gaGFuZGxlcjtcclxuXHR9LFxyXG5cdFxyXG5cdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBoYW5kbGVyID0gJC5ldmVudC5zcGVjaWFsLm1vdXNld2hlZWwuaGFuZGxlcjtcclxuXHRcdFxyXG5cdFx0JCh0aGlzKS51bmJpbmQoJ21vdXNlbW92ZS5tb3VzZXdoZWVsJyk7XHJcblx0XHRcclxuXHRcdGlmICggdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyIClcclxuXHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCAoJC5icm93c2VyLm1vemlsbGEgPyAnRE9NTW91c2VTY3JvbGwnIDogJ21vdXNld2hlZWwnKSwgaGFuZGxlciwgZmFsc2UpO1xyXG5cdFx0ZWxzZVxyXG5cdFx0XHR0aGlzLm9ubW91c2V3aGVlbCA9IGZ1bmN0aW9uKCl7fTtcclxuXHRcdFxyXG5cdFx0JC5yZW1vdmVEYXRhKHRoaXMsICdtd2N1cnNvcnBvc2RhdGEnKTtcclxuXHR9LFxyXG5cdFxyXG5cdGhhbmRsZXI6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblx0XHR2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBhcmd1bWVudHMsIDEgKTtcclxuXHRcdFxyXG5cdFx0ZXZlbnQgPSAkLmV2ZW50LmZpeChldmVudCB8fCB3aW5kb3cuZXZlbnQpO1xyXG5cdFx0Ly8gR2V0IGNvcnJlY3QgcGFnZVgsIHBhZ2VZLCBjbGllbnRYIGFuZCBjbGllbnRZIGZvciBtb3ppbGxhXHJcblx0XHQkLmV4dGVuZCggZXZlbnQsICQuZGF0YSh0aGlzLCAnbXdjdXJzb3Jwb3NkYXRhJykgfHwge30gKTtcclxuXHRcdHZhciBkZWx0YSA9IDAsIHJldHVyblZhbHVlID0gdHJ1ZTtcclxuXHRcdFxyXG5cdFx0aWYgKCBldmVudC53aGVlbERlbHRhICkgZGVsdGEgPSBldmVudC53aGVlbERlbHRhLzEyMDtcclxuXHRcdGlmICggZXZlbnQuZGV0YWlsICAgICApIGRlbHRhID0gLWV2ZW50LmRldGFpbC8zO1xyXG5cdFx0aWYgKCAkLmJyb3dzZXIub3BlcmEgICkgZGVsdGEgPSAtZXZlbnQud2hlZWxEZWx0YTtcclxuXHRcdFxyXG5cdFx0ZXZlbnQuZGF0YSAgPSBldmVudC5kYXRhIHx8IHt9O1xyXG5cdFx0ZXZlbnQudHlwZSAgPSBcIm1vdXNld2hlZWxcIjtcclxuXHRcdFxyXG5cdFx0Ly8gQWRkIGRlbHRhIHRvIHRoZSBmcm9udCBvZiB0aGUgYXJndW1lbnRzXHJcblx0XHRhcmdzLnVuc2hpZnQoZGVsdGEpO1xyXG5cdFx0Ly8gQWRkIGV2ZW50IHRvIHRoZSBmcm9udCBvZiB0aGUgYXJndW1lbnRzXHJcblx0XHRhcmdzLnVuc2hpZnQoZXZlbnQpO1xyXG5cclxuXHRcdHJldHVybiAkLmV2ZW50LmhhbmRsZS5hcHBseSh0aGlzLCBhcmdzKTtcclxuXHR9XHJcbn07XHJcblxyXG4kLmZuLmV4dGVuZCh7XHJcblx0bW91c2V3aGVlbDogZnVuY3Rpb24oZm4pIHtcclxuXHRcdHJldHVybiBmbiA/IHRoaXMuYmluZChcIm1vdXNld2hlZWxcIiwgZm4pIDogdGhpcy50cmlnZ2VyKFwibW91c2V3aGVlbFwiKTtcclxuXHR9LFxyXG5cdFxyXG5cdHVubW91c2V3aGVlbDogZnVuY3Rpb24oZm4pIHtcclxuXHRcdHJldHVybiB0aGlzLnVuYmluZChcIm1vdXNld2hlZWxcIiwgZm4pO1xyXG5cdH1cclxufSk7XHJcblxyXG59KShqUXVlcnkpOy8qIVxyXG4gICAgICAgIFNsaW1ib3ggdjIuMDIgLSBUaGUgdWx0aW1hdGUgbGlnaHR3ZWlnaHQgTGlnaHRib3ggY2xvbmUgZm9yIGpRdWVyeVxyXG4gICAgICAgIChjKSAyMDA3LTIwMDkgQ2hyaXN0b3BoZSBCZXlscyA8aHR0cDovL3d3dy5kaWdpdGFsaWEuYmU+XHJcbiAgICAgICAgTUlULXN0eWxlIGxpY2Vuc2UuXHJcbiovXHJcblxyXG4oZnVuY3Rpb24oJCkge1xyXG5cclxuICAgICAgICAvLyBHbG9iYWwgdmFyaWFibGVzLCBhY2Nlc3NpYmxlIHRvIFNsaW1ib3ggb25seVxyXG4gICAgICAgIHZhciB3aW4gPSAkKHdpbmRvdyksIG9wdGlvbnMsIGltYWdlcywgYWN0aXZlSW1hZ2UgPSAtMSwgYWN0aXZlVVJMLCBwcmV2SW1hZ2UsIG5leHRJbWFnZSwgY29tcGF0aWJsZU92ZXJsYXksIG1pZGRsZSwgY2VudGVyV2lkdGgsIGNlbnRlckhlaWdodCwgaWU2ID0gIXdpbmRvdy5YTUxIdHRwUmVxdWVzdCxcclxuICAgICAgICAgICAgICAgIG9wZXJhRml4ID0gd2luZG93Lm9wZXJhICYmIChkb2N1bWVudC5jb21wYXRNb2RlID09IFwiQ1NTMUNvbXBhdFwiKSAmJiAoJC5icm93c2VyLnZlcnNpb24gPj0gOS4zKSwgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxyXG5cclxuICAgICAgICAvLyBQcmVsb2FkIGltYWdlc1xyXG4gICAgICAgIHByZWxvYWQgPSB7fSwgcHJlbG9hZFByZXYgPSBuZXcgSW1hZ2UoKSwgcHJlbG9hZE5leHQgPSBuZXcgSW1hZ2UoKSxcclxuXHJcbiAgICAgICAgLy8gRE9NIGVsZW1lbnRzXHJcbiAgICAgICAgb3ZlcmxheSwgY2VudGVyLCBpbWFnZSwgc2l6ZXIsIHByZXZMaW5rLCBuZXh0TGluaywgYm90dG9tQ29udGFpbmVyLCBib3R0b20sIGNhcHRpb24sIG51bWJlcjtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgICAgICAgIEluaXRpYWxpemF0aW9uXHJcbiAgICAgICAgKi9cclxuXHJcbiAgICAgICAgJChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgU2xpbWJveCBIVE1MIGNvZGUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZG9jdW1lbnRcclxuICAgICAgICAgICAgICAgICQoXCJib2R5XCIpLmFwcGVuZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheSA9ICQoJzxkaXYgaWQ9XCJsYk92ZXJsYXlcIiAvPicpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlciA9ICQoJzxkaXYgaWQ9XCJsYkNlbnRlclwiIC8+JylbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tQ29udGFpbmVyID0gJCgnPGRpdiBpZD1cImxiQm90dG9tQ29udGFpbmVyXCIgLz4nKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKS5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpbWFnZSA9ICQoJzxkaXYgaWQ9XCJsYkltYWdlXCIgLz4nKS5hcHBlbmRUbyhjZW50ZXIpLmFwcGVuZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXIgPSAkKCc8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiIC8+JykuYXBwZW5kKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2TGluayA9ICQoJzxhIGlkPVwibGJQcmV2TGlua1wiIGhyZWY9XCIjXCIgLz4nKS5jbGljayhwcmV2aW91cylbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dExpbmsgPSAkKCc8YSBpZD1cImxiTmV4dExpbmtcIiBocmVmPVwiI1wiIC8+JykuY2xpY2sobmV4dClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXSlbMF1cclxuICAgICAgICAgICAgICAgIClbMF07XHJcblxyXG4gICAgICAgICAgICAgICAgYm90dG9tID0gJCgnPGRpdiBpZD1cImxiQm90dG9tXCIgLz4nKS5hcHBlbmRUbyhib3R0b21Db250YWluZXIpLmFwcGVuZChbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJzxhIGlkPVwibGJDbG9zZUxpbmtcIiBocmVmPVwiI1wiIC8+JykuYWRkKG92ZXJsYXkpLmNsaWNrKGNsb3NlKVswXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbiA9ICQoJzxkaXYgaWQ9XCJsYkNhcHRpb25cIiAvPicpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSAkKCc8ZGl2IGlkPVwibGJOdW1iZXJcIiAvPicpWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8ZGl2IHN0eWxlPVwiY2xlYXI6IGJvdGg7XCIgLz4nKVswXVxyXG4gICAgICAgICAgICAgICAgXSlbMF07XHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgQVBJXHJcbiAgICAgICAgKi9cclxuXHJcbiAgICAgICAgLy8gT3BlbiBTbGltYm94IHdpdGggdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzXHJcbiAgICAgICAgJC5zbGltYm94ID0gZnVuY3Rpb24oX2ltYWdlcywgc3RhcnRJbWFnZSwgX29wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A6IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbGxvd3MgdG8gbmF2aWdhdGUgYmV0d2VlbiBmaXJzdCBhbmQgbGFzdCBpbWFnZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheU9wYWNpdHk6IDAuOCwgICAgICAgICAgICAgICAgICAgIC8vIDEgaXMgb3BhcXVlLCAwIGlzIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQgKGNoYW5nZSB0aGUgY29sb3IgaW4gdGhlIENTUyBmaWxlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5RmFkZUR1cmF0aW9uOiA0MDAsICAgICAgICAgICAgICAgLy8gRHVyYXRpb24gb2YgdGhlIG92ZXJsYXkgZmFkZS1pbiBhbmQgZmFkZS1vdXQgYW5pbWF0aW9ucyAoaW4gbWlsbGlzZWNvbmRzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNpemVEdXJhdGlvbjogNDAwLCAgICAgICAgICAgICAgICAgICAgLy8gRHVyYXRpb24gb2YgZWFjaCBvZiB0aGUgYm94IHJlc2l6ZSBhbmltYXRpb25zIChpbiBtaWxsaXNlY29uZHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZUVhc2luZzogXCJzd2luZ1wiLCAgICAgICAgICAgICAgICAgIC8vIFwic3dpbmdcIiBpcyBqUXVlcnkncyBkZWZhdWx0IGVhc2luZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsV2lkdGg6IDI1MCwgICAgICAgICAgICAgICAgICAgICAgLy8gSW5pdGlhbCB3aWR0aCBvZiB0aGUgYm94IChpbiBwaXhlbHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxIZWlnaHQ6IDI1MCwgICAgICAgICAgICAgICAgICAgICAvLyBJbml0aWFsIGhlaWdodCBvZiB0aGUgYm94IChpbiBwaXhlbHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlRmFkZUR1cmF0aW9uOiA0MDAsICAgICAgICAgICAgICAgICAvLyBEdXJhdGlvbiBvZiB0aGUgaW1hZ2UgZmFkZS1pbiBhbmltYXRpb24gKGluIG1pbGxpc2Vjb25kcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbkFuaW1hdGlvbkR1cmF0aW9uOiA0MDAsICAgICAgICAgIC8vIER1cmF0aW9uIG9mIHRoZSBjYXB0aW9uIGFuaW1hdGlvbiAoaW4gbWlsbGlzZWNvbmRzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyVGV4dDogXCJJbWFnZSB7eH0gb2Yge3l9XCIsICAgICAgICAvLyBUcmFuc2xhdGUgb3IgY2hhbmdlIGFzIHlvdSB3aXNoLCBvciBzZXQgaXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBjb3VudGVyIHRleHQgZm9yIGltYWdlIGdyb3Vwc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZUtleXM6IFsyNywgODgsIDY3XSwgICAgICAgICAgICAgICAgLy8gQXJyYXkgb2Yga2V5Y29kZXMgdG8gY2xvc2UgU2xpbWJveCwgZGVmYXVsdDogRXNjICgyNyksICd4JyAoODgpLCAnYycgKDY3KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0tleXM6IFszNywgODBdLCAgICAgICAgICAgICAgICAgLy8gQXJyYXkgb2Yga2V5Y29kZXMgdG8gbmF2aWdhdGUgdG8gdGhlIHByZXZpb3VzIGltYWdlLCBkZWZhdWx0OiBMZWZ0IGFycm93ICgzNyksICdwJyAoODApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRLZXlzOiBbMzksIDc4XSAgICAgICAgICAgICAgICAgICAgICAvLyBBcnJheSBvZiBrZXljb2RlcyB0byBuYXZpZ2F0ZSB0byB0aGUgbmV4dCBpbWFnZSwgZGVmYXVsdDogUmlnaHQgYXJyb3cgKDM5KSwgJ24nICg3OClcclxuICAgICAgICAgICAgICAgIH0sIF9vcHRpb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhIHNpbmdsZSBpbWFnZSwgd2l0aCBVUkwgYW5kIFRpdGxlIGFzIGZpcnN0IHR3byBhcmd1bWVudHNcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgX2ltYWdlcyA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbWFnZXMgPSBbW19pbWFnZXMsIHN0YXJ0SW1hZ2VdXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbWFnZSA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbWlkZGxlID0gd2luLnNjcm9sbFRvcCgpICsgKChvcGVyYUZpeCA/IGRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgOiB3aW4uaGVpZ2h0KCkpIC8gMik7XHJcbiAgICAgICAgICAgICAgICBjZW50ZXJXaWR0aCA9IG9wdGlvbnMuaW5pdGlhbFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgY2VudGVySGVpZ2h0ID0gb3B0aW9ucy5pbml0aWFsSGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgJChjZW50ZXIpLmNzcyh7dG9wOiBNYXRoLm1heCgwLCBtaWRkbGUgLSAoY2VudGVySGVpZ2h0IC8gMikpLCB3aWR0aDogY2VudGVyV2lkdGgsIGhlaWdodDogY2VudGVySGVpZ2h0LCBtYXJnaW5MZWZ0OiAtY2VudGVyV2lkdGgvMn0pLnNob3coKTtcclxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVPdmVybGF5ID0gaWU2IHx8IChvdmVybGF5LmN1cnJlbnRTdHlsZSAmJiAob3ZlcmxheS5jdXJyZW50U3R5bGUucG9zaXRpb24gIT0gXCJmaXhlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29tcGF0aWJsZU92ZXJsYXkpIG92ZXJsYXkuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgICAgICAgICAgICAkKG92ZXJsYXkpLmNzcyhcIm9wYWNpdHlcIiwgb3B0aW9ucy5vdmVybGF5T3BhY2l0eSkuZmFkZUluKG9wdGlvbnMub3ZlcmxheUZhZGVEdXJhdGlvbik7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgc2V0dXAoMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaW1hZ2VzID0gX2ltYWdlcztcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMubG9vcCA9IG9wdGlvbnMubG9vcCAmJiAoaW1hZ2VzLmxlbmd0aCA+IDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZUltYWdlKHN0YXJ0SW1hZ2UpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zOiAgICAgICAgT3B0aW9uYWwgb3B0aW9ucyBvYmplY3QsIHNlZSBqUXVlcnkuc2xpbWJveCgpXHJcbiAgICAgICAgICAgICAgICBsaW5rTWFwcGVyOiAgICAgT3B0aW9uYWwgZnVuY3Rpb24gdGFraW5nIGEgbGluayBET00gZWxlbWVudCBhbmQgYW4gaW5kZXggYXMgYXJndW1lbnRzIGFuZCByZXR1cm5pbmcgYW4gYXJyYXkgY29udGFpbmluZyAyIGVsZW1lbnRzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZSBVUkwgYW5kIHRoZSBpbWFnZSBjYXB0aW9uIChtYXkgY29udGFpbiBIVE1MKVxyXG4gICAgICAgICAgICAgICAgbGlua3NGaWx0ZXI6ICAgIE9wdGlvbmFsIGZ1bmN0aW9uIHRha2luZyBhIGxpbmsgRE9NIGVsZW1lbnQgYW5kIGFuIGluZGV4IGFzIGFyZ3VtZW50cyBhbmQgcmV0dXJuaW5nIHRydWUgaWYgdGhlIGVsZW1lbnQgaXMgcGFydCBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZSBjb2xsZWN0aW9uIHRoYXQgd2lsbCBiZSBzaG93biBvbiBjbGljaywgZmFsc2UgaWYgbm90LiBcInRoaXNcIiByZWZlcnMgdG8gdGhlIGVsZW1lbnQgdGhhdCB3YXMgY2xpY2tlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIG11c3QgYWx3YXlzIHJldHVybiB0cnVlIHdoZW4gdGhlIERPTSBlbGVtZW50IGFyZ3VtZW50IGlzIFwidGhpc1wiLlxyXG4gICAgICAgICovXHJcbiAgICAgICAgJC5mbi5zbGltYm94ID0gZnVuY3Rpb24oX29wdGlvbnMsIGxpbmtNYXBwZXIsIGxpbmtzRmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5rTWFwcGVyID0gbGlua01hcHBlciB8fCBmdW5jdGlvbihlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2VsLmhyZWYsIGVsLnRpdGxlXTtcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgbGlua3NGaWx0ZXIgPSBsaW5rc0ZpbHRlciB8fCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBsaW5rcyA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmtzLnVuYmluZChcImNsaWNrXCIpLmNsaWNrKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBCdWlsZCB0aGUgbGlzdCBvZiBpbWFnZXMgdGhhdCB3aWxsIGJlIGRpc3BsYXllZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGluayA9IHRoaXMsIHN0YXJ0SW5kZXggPSAwLCBmaWx0ZXJlZExpbmtzLCBpID0gMCwgbGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZExpbmtzID0gJC5ncmVwKGxpbmtzLCBmdW5jdGlvbihlbCwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaW5rc0ZpbHRlci5jYWxsKGxpbmssIGVsLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW5ub3QgdXNlIGpRdWVyeS5tYXAoKSBiZWNhdXNlIGl0IGZsYXR0ZW5zIHRoZSByZXR1cm5lZCBhcnJheVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxlbmd0aCA9IGZpbHRlcmVkTGlua3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRMaW5rc1tpXSA9PSBsaW5rKSBzdGFydEluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZExpbmtzW2ldID0gbGlua01hcHBlcihmaWx0ZXJlZExpbmtzW2ldLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQuc2xpbWJveChmaWx0ZXJlZExpbmtzLCBzdGFydEluZGV4LCBfb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgICAgICAgIEludGVybmFsIGZ1bmN0aW9uc1xyXG4gICAgICAgICovXHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHBvc2l0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGwgPSB3aW4uc2Nyb2xsTGVmdCgpLCB3ID0gb3BlcmFGaXggPyBkb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggOiB3aW4ud2lkdGgoKTtcclxuICAgICAgICAgICAgICAgICQoW2NlbnRlciwgYm90dG9tQ29udGFpbmVyXSkuY3NzKFwibGVmdFwiLCBsICsgKHcgLyAyKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29tcGF0aWJsZU92ZXJsYXkpICQob3ZlcmxheSkuY3NzKHtsZWZ0OiBsLCB0b3A6IHdpbi5zY3JvbGxUb3AoKSwgd2lkdGg6IHcsIGhlaWdodDogd2luLmhlaWdodCgpfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBzZXR1cChvcGVuKSB7XHJcbiAgICAgICAgICAgICAgICAkKFwib2JqZWN0XCIpLmFkZChpZTYgPyBcInNlbGVjdFwiIDogXCJlbWJlZFwiKS5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlbikgJC5kYXRhKGVsLCBcInNsaW1ib3hcIiwgZWwuc3R5bGUudmlzaWJpbGl0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSBvcGVuID8gXCJoaWRkZW5cIiA6ICQuZGF0YShlbCwgXCJzbGltYm94XCIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm4gPSBvcGVuID8gXCJiaW5kXCIgOiBcInVuYmluZFwiO1xyXG4gICAgICAgICAgICAgICAgd2luW2ZuXShcInNjcm9sbCByZXNpemVcIiwgcG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgJChkb2N1bWVudClbZm5dKFwia2V5ZG93blwiLCBrZXlEb3duKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGtleURvd24oZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2RlID0gZXZlbnQua2V5Q29kZSwgZm4gPSAkLmluQXJyYXk7XHJcbiAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQga2V5Ym9hcmQgYWN0aW9uIChsaWtlIG5hdmlnYXRpbmcgaW5zaWRlIHRoZSBwYWdlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChmbihjb2RlLCBvcHRpb25zLmNsb3NlS2V5cykgPj0gMCkgPyBjbG9zZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogKGZuKGNvZGUsIG9wdGlvbnMubmV4dEtleXMpID49IDApID8gbmV4dCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogKGZuKGNvZGUsIG9wdGlvbnMucHJldmlvdXNLZXlzKSA+PSAwKSA/IHByZXZpb3VzKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHByZXZpb3VzKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZUltYWdlKHByZXZJbWFnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZUltYWdlKG5leHRJbWFnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBjaGFuZ2VJbWFnZShpbWFnZUluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUltYWdlID0gaW1hZ2VJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlVVJMID0gaW1hZ2VzW2FjdGl2ZUltYWdlXVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldkltYWdlID0gKGFjdGl2ZUltYWdlIHx8IChvcHRpb25zLmxvb3AgPyBpbWFnZXMubGVuZ3RoIDogMCkpIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEltYWdlID0gKChhY3RpdmVJbWFnZSArIDEpICUgaW1hZ2VzLmxlbmd0aCkgfHwgKG9wdGlvbnMubG9vcCA/IDAgOiAtMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlci5jbGFzc05hbWUgPSBcImxiTG9hZGluZ1wiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlbG9hZCA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVsb2FkLm9ubG9hZCA9IGFuaW1hdGVCb3g7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWxvYWQuc3JjID0gYWN0aXZlVVJMO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGFuaW1hdGVCb3goKSB7XHJcbiAgICAgICAgICAgICAgICBjZW50ZXIuY2xhc3NOYW1lID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICQoaW1hZ2UpLmNzcyh7YmFja2dyb3VuZEltYWdlOiBcInVybChcIiArIGFjdGl2ZVVSTCArIFwiKVwiLCB2aXNpYmlsaXR5OiBcImhpZGRlblwiLCBkaXNwbGF5OiBcIlwifSk7XHJcbiAgICAgICAgICAgICAgICAkKHNpemVyKS53aWR0aChwcmVsb2FkLndpZHRoKTtcclxuICAgICAgICAgICAgICAgICQoW3NpemVyLCBwcmV2TGluaywgbmV4dExpbmtdKS5oZWlnaHQocHJlbG9hZC5oZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICAgICQoY2FwdGlvbikuaHRtbChpbWFnZXNbYWN0aXZlSW1hZ2VdWzFdIHx8IFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgJChudW1iZXIpLmh0bWwoKCgoaW1hZ2VzLmxlbmd0aCA+IDEpICYmIG9wdGlvbnMuY291bnRlclRleHQpIHx8IFwiXCIpLnJlcGxhY2UoL3t4fS8sIGFjdGl2ZUltYWdlICsgMSkucmVwbGFjZSgve3l9LywgaW1hZ2VzLmxlbmd0aCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwcmV2SW1hZ2UgPj0gMCkgcHJlbG9hZFByZXYuc3JjID0gaW1hZ2VzW3ByZXZJbWFnZV1bMF07XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dEltYWdlID49IDApIHByZWxvYWROZXh0LnNyYyA9IGltYWdlc1tuZXh0SW1hZ2VdWzBdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNlbnRlcldpZHRoID0gaW1hZ2Uub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgICAgICBjZW50ZXJIZWlnaHQgPSBpbWFnZS5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgdG9wID0gTWF0aC5tYXgoMCwgbWlkZGxlIC0gKGNlbnRlckhlaWdodCAvIDIpKTtcclxuICAgICAgICAgICAgICAgIGlmIChjZW50ZXIub2Zmc2V0SGVpZ2h0ICE9IGNlbnRlckhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKGNlbnRlcikuYW5pbWF0ZSh7aGVpZ2h0OiBjZW50ZXJIZWlnaHQsIHRvcDogdG9wfSwgb3B0aW9ucy5yZXNpemVEdXJhdGlvbiwgb3B0aW9ucy5yZXNpemVFYXNpbmcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNlbnRlci5vZmZzZXRXaWR0aCAhPSBjZW50ZXJXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKGNlbnRlcikuYW5pbWF0ZSh7d2lkdGg6IGNlbnRlcldpZHRoLCBtYXJnaW5MZWZ0OiAtY2VudGVyV2lkdGgvMn0sIG9wdGlvbnMucmVzaXplRHVyYXRpb24sIG9wdGlvbnMucmVzaXplRWFzaW5nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICQoY2VudGVyKS5xdWV1ZShmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChib3R0b21Db250YWluZXIpLmNzcyh7d2lkdGg6IGNlbnRlcldpZHRoLCB0b3A6IHRvcCArIGNlbnRlckhlaWdodCwgbWFyZ2luTGVmdDogLWNlbnRlcldpZHRoLzIsIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsIGRpc3BsYXk6IFwiXCJ9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChpbWFnZSkuY3NzKHtkaXNwbGF5OiBcIm5vbmVcIiwgdmlzaWJpbGl0eTogXCJcIiwgb3BhY2l0eTogXCJcIn0pLmZhZGVJbihvcHRpb25zLmltYWdlRmFkZUR1cmF0aW9uLCBhbmltYXRlQ2FwdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBmdW5jdGlvbiBhbmltYXRlQ2FwdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcmV2SW1hZ2UgPj0gMCkgJChwcmV2TGluaykuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRJbWFnZSA+PSAwKSAkKG5leHRMaW5rKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAkKGJvdHRvbSkuY3NzKFwibWFyZ2luVG9wXCIsIC1ib3R0b20ub2Zmc2V0SGVpZ2h0KS5hbmltYXRlKHttYXJnaW5Ub3A6IDB9LCBvcHRpb25zLmNhcHRpb25BbmltYXRpb25EdXJhdGlvbik7XHJcbiAgICAgICAgICAgICAgICBib3R0b21Db250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBzdG9wKCkge1xyXG4gICAgICAgICAgICAgICAgcHJlbG9hZC5vbmxvYWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgcHJlbG9hZC5zcmMgPSBwcmVsb2FkUHJldi5zcmMgPSBwcmVsb2FkTmV4dC5zcmMgPSBhY3RpdmVVUkw7XHJcbiAgICAgICAgICAgICAgICAkKFtjZW50ZXIsIGltYWdlLCBib3R0b21dKS5zdG9wKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgJChbcHJldkxpbmssIG5leHRMaW5rLCBpbWFnZSwgYm90dG9tQ29udGFpbmVyXSkuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gY2xvc2UoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlSW1hZ2UgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUltYWdlID0gcHJldkltYWdlID0gbmV4dEltYWdlID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoY2VudGVyKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQob3ZlcmxheSkuc3RvcCgpLmZhZGVPdXQob3B0aW9ucy5vdmVybGF5RmFkZUR1cmF0aW9uLCBzZXR1cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbn0pKGpRdWVyeSk7XHJcbi8qXHJcbiAqIHRpbWVhZ286IGEgalF1ZXJ5IHBsdWdpbiwgdmVyc2lvbjogMC41LjEgKDA4LzIwLzIwMDgpXHJcbiAqIEByZXF1aXJlcyBqUXVlcnkgdjEuMiBvciBsYXRlclxyXG4gKlxyXG4gKiBUaW1lYWdvIGlzIGEgalF1ZXJ5IHBsdWdpbiB0aGF0IG1ha2VzIGl0IGVhc3kgdG8gc3VwcG9ydCBhdXRvbWF0aWNhbGx5XHJcbiAqIHVwZGF0aW5nIGZ1enp5IHRpbWVzdGFtcHMgKGUuZy4gXCI0IG1pbnV0ZXMgYWdvXCIgb3IgXCJhYm91dCAxIGRheSBhZ29cIikuXHJcbiAqXHJcbiAqIEZvciB1c2FnZSBhbmQgZXhhbXBsZXMsIHZpc2l0OlxyXG4gKiBodHRwOi8vdGltZWFnby55YXJwLmNvbS9cclxuICpcclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVDpcclxuICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDA4LCBSeWFuIE1jR2VhcnkgKHJ5YW5vbmphdmFzY3JpcHQgLVthdF0tIG1jZ2VhcnkgWypkb3QqXSBvcmcpXHJcbiAqL1xyXG4oZnVuY3Rpb24oJCkge1xyXG4gICQudGltZWFnbyA9IGZ1bmN0aW9uKHRpbWVzdGFtcCkge1xyXG4gICAgaWYgKHRpbWVzdGFtcCBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBpbldvcmRzKHRpbWVzdGFtcCk7XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgdGltZXN0YW1wID09IFwic3RyaW5nXCIpIHJldHVybiBpbldvcmRzKCQudGltZWFnby5wYXJzZSh0aW1lc3RhbXApKTtcclxuICAgIGVsc2UgcmV0dXJuIGluV29yZHMoJC50aW1lYWdvLnBhcnNlKCQodGltZXN0YW1wKS5hdHRyKFwidGl0bGVcIikpKTtcclxuICB9O1xyXG4gIHZhciAkdCA9ICQudGltZWFnbztcclxuXHJcbiAgJC5leHRlbmQoJC50aW1lYWdvLCB7XHJcbiAgICBzZXR0aW5nczoge1xyXG4gICAgICByZWZyZXNoTWlsbGlzOiA2MDAwMCxcclxuICAgICAgYWxsb3dGdXR1cmU6IGZhbHNlLFxyXG4gICAgICBzdHJpbmdzOiB7XHJcbiAgICAgICAgYWdvOiBcImFnb1wiLFxyXG4gICAgICAgIGZyb21Ob3c6IFwiZnJvbSBub3dcIixcclxuICAgICAgICBzZWNvbmRzOiBcImxlc3MgdGhhbiBhIG1pbnV0ZVwiLFxyXG4gICAgICAgIG1pbnV0ZTogXCJhYm91dCBhIG1pbnV0ZVwiLFxyXG4gICAgICAgIG1pbnV0ZXM6IFwiJWQgbWludXRlc1wiLFxyXG4gICAgICAgIGhvdXI6IFwiYWJvdXQgYW4gaG91clwiLFxyXG4gICAgICAgIGhvdXJzOiBcImFib3V0ICVkIGhvdXJzXCIsXHJcbiAgICAgICAgZGF5OiBcImEgZGF5XCIsXHJcbiAgICAgICAgZGF5czogXCIlZCBkYXlzXCIsXHJcbiAgICAgICAgbW9udGg6IFwiYWJvdXQgYSBtb250aFwiLFxyXG4gICAgICAgIG1vbnRoczogXCIlZCBtb250aHNcIixcclxuICAgICAgICB5ZWFyOiBcImFib3V0IGEgeWVhclwiLFxyXG4gICAgICAgIHllYXJzOiBcIiVkIHllYXJzXCJcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGluV29yZHM6IGZ1bmN0aW9uKGRpc3RhbmNlTWlsbGlzKSB7XHJcbiAgICAgIHZhciAkbCA9IHRoaXMuc2V0dGluZ3Muc3RyaW5ncztcclxuICAgICAgdmFyIHN1ZmZpeCA9ICRsLmFnbztcclxuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYWxsb3dGdXR1cmUpIHtcclxuICAgICAgICBpZiAoZGlzdGFuY2VNaWxsaXMgPCAwKSBzdWZmaXggPSAkbC5mcm9tTm93O1xyXG4gICAgICAgIGRpc3RhbmNlTWlsbGlzID0gTWF0aC5hYnMoZGlzdGFuY2VNaWxsaXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgc2Vjb25kcyA9IGRpc3RhbmNlTWlsbGlzIC8gMTAwMDtcclxuICAgICAgdmFyIG1pbnV0ZXMgPSBzZWNvbmRzIC8gNjA7XHJcbiAgICAgIHZhciBob3VycyA9IG1pbnV0ZXMgLyA2MDtcclxuICAgICAgdmFyIGRheXMgPSBob3VycyAvIDI0O1xyXG4gICAgICB2YXIgeWVhcnMgPSBkYXlzIC8gMzY1O1xyXG5cclxuICAgICAgdmFyIHdvcmRzID0gc2Vjb25kcyA8IDQ1ICYmIHNwcmludGYoJGwuc2Vjb25kcywgTWF0aC5yb3VuZChzZWNvbmRzKSkgfHxcclxuICAgICAgICBzZWNvbmRzIDwgOTAgJiYgJGwubWludXRlIHx8XHJcbiAgICAgICAgbWludXRlcyA8IDQ1ICYmIHNwcmludGYoJGwubWludXRlcywgTWF0aC5yb3VuZChtaW51dGVzKSkgfHxcclxuICAgICAgICBtaW51dGVzIDwgOTAgJiYgJGwuaG91ciB8fFxyXG4gICAgICAgIGhvdXJzIDwgMjQgJiYgc3ByaW50ZigkbC5ob3VycywgTWF0aC5yb3VuZChob3VycykpIHx8XHJcbiAgICAgICAgaG91cnMgPCA0OCAmJiAkbC5kYXkgfHxcclxuICAgICAgICBkYXlzIDwgMzAgJiYgc3ByaW50ZigkbC5kYXlzLCBNYXRoLmZsb29yKGRheXMpKSB8fFxyXG4gICAgICAgIGRheXMgPCA2MCAmJiAkbC5tb250aCB8fFxyXG4gICAgICAgIGRheXMgPCAzNjUgJiYgc3ByaW50ZigkbC5tb250aHMsIE1hdGguZmxvb3IoZGF5cyAvIDMwKSkgfHxcclxuICAgICAgICB5ZWFycyA8IDIgJiYgJGwueWVhciB8fFxyXG4gICAgICAgIHNwcmludGYoJGwueWVhcnMsIE1hdGguZmxvb3IoeWVhcnMpKTtcclxuXHJcbiAgICAgIHJldHVybiB3b3JkcyArIFwiIFwiICsgc3VmZml4O1xyXG4gICAgfSxcclxuICAgIHBhcnNlOiBmdW5jdGlvbihpc284NjAxKSB7XHJcbiAgICAgIHZhciBzID0gJC50cmltKGlzbzg2MDEpO1xyXG4gICAgICBzID0gcy5yZXBsYWNlKC8tLyxcIi9cIikucmVwbGFjZSgvLS8sXCIvXCIpO1xyXG4gICAgICBzID0gcy5yZXBsYWNlKC9ULyxcIiBcIikucmVwbGFjZSgvWi8sXCIgVVRDXCIpO1xyXG4gICAgICBzID0gcy5yZXBsYWNlKC8oW1xcKy1dXFxkXFxkKVxcOj8oXFxkXFxkKS8sXCIgJDEkMlwiKTsgLy8gLTA0OjAwIC0+IC0wNDAwXHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZShzKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgJC5mbi50aW1lYWdvID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBzZWxmLmVhY2gocmVmcmVzaCk7XHJcblxyXG4gICAgdmFyICRzID0gJHQuc2V0dGluZ3M7XHJcbiAgICBpZiAoJHMucmVmcmVzaE1pbGxpcyA+IDApIHtcclxuICAgICAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7IHNlbGYuZWFjaChyZWZyZXNoKTsgfSwgJHMucmVmcmVzaE1pbGxpcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2VsZjtcclxuICB9O1xyXG5cclxuICBmdW5jdGlvbiByZWZyZXNoKCkge1xyXG4gICAgdmFyIGRhdGUgPSAkdC5wYXJzZSh0aGlzLnRpdGxlKTtcclxuICAgIGlmICghaXNOYU4oZGF0ZSkpIHtcclxuICAgICAgJCh0aGlzKS50ZXh0KGluV29yZHMoZGF0ZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBpbldvcmRzKGRhdGUpIHtcclxuICAgIHJldHVybiAkdC5pbldvcmRzKGRpc3RhbmNlKGRhdGUpKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRpc3RhbmNlKGRhdGUpIHtcclxuICAgIHJldHVybiAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWUoKSk7XHJcbiAgfVxyXG5cclxuICAvLyBsYW1lIHNwcmludGYgaW1wbGVtZW50YXRpb25cclxuICBmdW5jdGlvbiBzcHJpbnRmKHN0cmluZywgdmFsdWUpIHtcclxuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvJWQvaSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gZml4IGZvciBJRTYgc3Vja2FnZVxyXG4gIGlmICgkLmJyb3dzZXIubXNpZSAmJiAkLmJyb3dzZXIudmVyc2lvbiA8IDcuMCkge1xyXG4gICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYWJicicpO1xyXG4gIH1cclxufSkoalF1ZXJ5KTtcclxuXHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/knockout.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/knockout.js index 4c0698368f2..1d743ee1d0a 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/knockout.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/knockout.js @@ -5875,4 +5875,4 @@ ko.exportSymbol('nativeTemplateEngine', ko.nativeTemplateEngine); }()); })(); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImtub2Nrb3V0LmpzIiwia25vY2tvdXQtMy40LjAuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoia25vY2tvdXQuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsIi8qIVxuICogS25vY2tvdXQgSmF2YVNjcmlwdCBsaWJyYXJ5IHYzLjQuMFxuICogKGMpIFN0ZXZlbiBTYW5kZXJzb24gLSBodHRwOi8va25vY2tvdXRqcy5jb20vXG4gKiBMaWNlbnNlOiBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKVxuICovXG5cbihmdW5jdGlvbigpe1xudmFyIERFQlVHPXRydWU7XG4oZnVuY3Rpb24odW5kZWZpbmVkKXtcbiAgICAvLyAoMCwgZXZhbCkoJ3RoaXMnKSBpcyBhIHJvYnVzdCB3YXkgb2YgZ2V0dGluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdFxuICAgIC8vIEZvciBkZXRhaWxzLCBzZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNDExOTk4OC9yZXR1cm4tdGhpcy0wLWV2YWx0aGlzLzE0MTIwMDIzIzE0MTIwMDIzXG4gICAgdmFyIHdpbmRvdyA9IHRoaXMgfHwgKDAsIGV2YWwpKCd0aGlzJyksXG4gICAgICAgIGRvY3VtZW50ID0gd2luZG93Wydkb2N1bWVudCddLFxuICAgICAgICBuYXZpZ2F0b3IgPSB3aW5kb3dbJ25hdmlnYXRvciddLFxuICAgICAgICBqUXVlcnlJbnN0YW5jZSA9IHdpbmRvd1tcImpRdWVyeVwiXSxcbiAgICAgICAgSlNPTiA9IHdpbmRvd1tcIkpTT05cIl07XG4oZnVuY3Rpb24oZmFjdG9yeSkge1xuICAgIC8vIFN1cHBvcnQgdGhyZWUgbW9kdWxlIGxvYWRpbmcgc2NlbmFyaW9zXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSkge1xuICAgICAgICAvLyBbMV0gQU1EIGFub255bW91cyBtb2R1bGVcbiAgICAgICAgZGVmaW5lKFsnZXhwb3J0cycsICdyZXF1aXJlJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIFsyXSBDb21tb25KUy9Ob2RlLmpzXG4gICAgICAgIGZhY3RvcnkobW9kdWxlWydleHBvcnRzJ10gfHwgZXhwb3J0cyk7ICAvLyBtb2R1bGUuZXhwb3J0cyBpcyBmb3IgTm9kZS5qc1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFszXSBObyBtb2R1bGUgbG9hZGVyIChwbGFpbiA8c2NyaXB0PiB0YWcpIC0gcHV0IGRpcmVjdGx5IGluIGdsb2JhbCBuYW1lc3BhY2VcbiAgICAgICAgZmFjdG9yeSh3aW5kb3dbJ2tvJ10gPSB7fSk7XG4gICAgfVxufShmdW5jdGlvbihrb0V4cG9ydHMsIGFtZFJlcXVpcmUpe1xuLy8gSW50ZXJuYWxseSwgYWxsIEtPIG9iamVjdHMgYXJlIGF0dGFjaGVkIHRvIGtvRXhwb3J0cyAoZXZlbiB0aGUgbm9uLWV4cG9ydGVkIG9uZXMgd2hvc2UgbmFtZXMgd2lsbCBiZSBtaW5pZmllZCBieSB0aGUgY2xvc3VyZSBjb21waWxlcikuXG4vLyBJbiB0aGUgZnV0dXJlLCB0aGUgZm9sbG93aW5nIFwia29cIiB2YXJpYWJsZSBtYXkgYmUgbWFkZSBkaXN0aW5jdCBmcm9tIFwia29FeHBvcnRzXCIgc28gdGhhdCBwcml2YXRlIG9iamVjdHMgYXJlIG5vdCBleHRlcm5hbGx5IHJlYWNoYWJsZS5cbnZhciBrbyA9IHR5cGVvZiBrb0V4cG9ydHMgIT09ICd1bmRlZmluZWQnID8ga29FeHBvcnRzIDoge307XG4vLyBHb29nbGUgQ2xvc3VyZSBDb21waWxlciBoZWxwZXJzICh1c2VkIG9ubHkgdG8gbWFrZSB0aGUgbWluaWZpZWQgZmlsZSBzbWFsbGVyKVxua28uZXhwb3J0U3ltYm9sID0gZnVuY3Rpb24oa29QYXRoLCBvYmplY3QpIHtcbiAgICB2YXIgdG9rZW5zID0ga29QYXRoLnNwbGl0KFwiLlwiKTtcblxuICAgIC8vIEluIHRoZSBmdXR1cmUsIFwia29cIiBtYXkgYmVjb21lIGRpc3RpbmN0IGZyb20gXCJrb0V4cG9ydHNcIiAoc28gdGhhdCBub24tZXhwb3J0ZWQgb2JqZWN0cyBhcmUgbm90IHJlYWNoYWJsZSlcbiAgICAvLyBBdCB0aGF0IHBvaW50LCBcInRhcmdldFwiIHdvdWxkIGJlIHNldCB0bzogKHR5cGVvZiBrb0V4cG9ydHMgIT09IFwidW5kZWZpbmVkXCIgPyBrb0V4cG9ydHMgOiBrbylcbiAgICB2YXIgdGFyZ2V0ID0ga287XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGggLSAxOyBpKyspXG4gICAgICAgIHRhcmdldCA9IHRhcmdldFt0b2tlbnNbaV1dO1xuICAgIHRhcmdldFt0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdXSA9IG9iamVjdDtcbn07XG5rby5leHBvcnRQcm9wZXJ0eSA9IGZ1bmN0aW9uKG93bmVyLCBwdWJsaWNOYW1lLCBvYmplY3QpIHtcbiAgICBvd25lcltwdWJsaWNOYW1lXSA9IG9iamVjdDtcbn07XG5rby52ZXJzaW9uID0gXCIzLjQuMFwiO1xuXG5rby5leHBvcnRTeW1ib2woJ3ZlcnNpb24nLCBrby52ZXJzaW9uKTtcbi8vIEZvciBhbnkgb3B0aW9ucyB0aGF0IG1heSBhZmZlY3QgdmFyaW91cyBhcmVhcyBvZiBLbm9ja291dCBhbmQgYXJlbid0IGRpcmVjdGx5IGFzc29jaWF0ZWQgd2l0aCBkYXRhIGJpbmRpbmcuXG5rby5vcHRpb25zID0ge1xuICAgICdkZWZlclVwZGF0ZXMnOiBmYWxzZSxcbiAgICAndXNlT25seU5hdGl2ZUV2ZW50cyc6IGZhbHNlXG59O1xuXG4vL2tvLmV4cG9ydFN5bWJvbCgnb3B0aW9ucycsIGtvLm9wdGlvbnMpOyAgIC8vICdvcHRpb25zJyBpc24ndCBtaW5pZmllZFxua28udXRpbHMgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIG9iamVjdEZvckVhY2gob2JqLCBhY3Rpb24pIHtcbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24ocHJvcCwgb2JqW3Byb3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQsIHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgICAgICBmb3IodmFyIHByb3AgaW4gc291cmNlKSB7XG4gICAgICAgICAgICAgICAgaWYoc291cmNlLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihvYmosIHByb3RvKSB7XG4gICAgICAgIG9iai5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICB2YXIgY2FuU2V0UHJvdG90eXBlID0gKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgIHZhciBjYW5Vc2VTeW1ib2xzID0gIURFQlVHICYmIHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbic7XG5cbiAgICAvLyBSZXByZXNlbnQgdGhlIGtub3duIGV2ZW50IHR5cGVzIGluIGEgY29tcGFjdCB3YXksIHRoZW4gYXQgcnVudGltZSB0cmFuc2Zvcm0gaXQgaW50byBhIGhhc2ggd2l0aCBldmVudCBuYW1lIGFzIGtleSAoZm9yIGZhc3QgbG9va3VwKVxuICAgIHZhciBrbm93bkV2ZW50cyA9IHt9LCBrbm93bkV2ZW50VHlwZXNCeUV2ZW50TmFtZSA9IHt9O1xuICAgIHZhciBrZXlFdmVudFR5cGVOYW1lID0gKG5hdmlnYXRvciAmJiAvRmlyZWZveFxcLzIvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSA/ICdLZXlib2FyZEV2ZW50JyA6ICdVSUV2ZW50cyc7XG4gICAga25vd25FdmVudHNba2V5RXZlbnRUeXBlTmFtZV0gPSBbJ2tleXVwJywgJ2tleWRvd24nLCAna2V5cHJlc3MnXTtcbiAgICBrbm93bkV2ZW50c1snTW91c2VFdmVudHMnXSA9IFsnY2xpY2snLCAnZGJsY2xpY2snLCAnbW91c2Vkb3duJywgJ21vdXNldXAnLCAnbW91c2Vtb3ZlJywgJ21vdXNlb3ZlcicsICdtb3VzZW91dCcsICdtb3VzZWVudGVyJywgJ21vdXNlbGVhdmUnXTtcbiAgICBvYmplY3RGb3JFYWNoKGtub3duRXZlbnRzLCBmdW5jdGlvbihldmVudFR5cGUsIGtub3duRXZlbnRzRm9yVHlwZSkge1xuICAgICAgICBpZiAoa25vd25FdmVudHNGb3JUeXBlLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBrbm93bkV2ZW50c0ZvclR5cGUubGVuZ3RoOyBpIDwgajsgaSsrKVxuICAgICAgICAgICAgICAgIGtub3duRXZlbnRUeXBlc0J5RXZlbnROYW1lW2tub3duRXZlbnRzRm9yVHlwZVtpXV0gPSBldmVudFR5cGU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICB2YXIgZXZlbnRzVGhhdE11c3RCZVJlZ2lzdGVyZWRVc2luZ0F0dGFjaEV2ZW50ID0geyAncHJvcGVydHljaGFuZ2UnOiB0cnVlIH07IC8vIFdvcmthcm91bmQgZm9yIGFuIElFOSBpc3N1ZSAtIGh0dHBzOi8vZ2l0aHViLmNvbS9TdGV2ZVNhbmRlcnNvbi9rbm9ja291dC9pc3N1ZXMvNDA2XG5cbiAgICAvLyBEZXRlY3QgSUUgdmVyc2lvbnMgZm9yIGJ1ZyB3b3JrYXJvdW5kcyAodXNlcyBJRSBjb25kaXRpb25hbHMsIG5vdCBVQSBzdHJpbmcsIGZvciByb2J1c3RuZXNzKVxuICAgIC8vIE5vdGUgdGhhdCwgc2luY2UgSUUgMTAgZG9lcyBub3Qgc3VwcG9ydCBjb25kaXRpb25hbCBjb21tZW50cywgdGhlIGZvbGxvd2luZyBsb2dpYyBvbmx5IGRldGVjdHMgSUUgPCAxMC5cbiAgICAvLyBDdXJyZW50bHkgdGhpcyBpcyBieSBkZXNpZ24sIHNpbmNlIElFIDEwKyBiZWhhdmVzIGNvcnJlY3RseSB3aGVuIHRyZWF0ZWQgYXMgYSBzdGFuZGFyZCBicm93c2VyLlxuICAgIC8vIElmIHRoZXJlIGlzIGEgZnV0dXJlIG5lZWQgdG8gZGV0ZWN0IHNwZWNpZmljIHZlcnNpb25zIG9mIElFMTArLCB3ZSB3aWxsIGFtZW5kIHRoaXMuXG4gICAgdmFyIGllVmVyc2lvbiA9IGRvY3VtZW50ICYmIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZlcnNpb24gPSAzLCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgaUVsZW1zID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpJyk7XG5cbiAgICAgICAgLy8gS2VlcCBjb25zdHJ1Y3RpbmcgY29uZGl0aW9uYWwgSFRNTCBibG9ja3MgdW50aWwgd2UgaGl0IG9uZSB0aGF0IHJlc29sdmVzIHRvIGFuIGVtcHR5IGZyYWdtZW50XG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAnPCEtLVtpZiBndCBJRSAnICsgKCsrdmVyc2lvbikgKyAnXT48aT48L2k+PCFbZW5kaWZdLS0+JyxcbiAgICAgICAgICAgIGlFbGVtc1swXVxuICAgICAgICApIHt9XG4gICAgICAgIHJldHVybiB2ZXJzaW9uID4gNCA/IHZlcnNpb24gOiB1bmRlZmluZWQ7XG4gICAgfSgpKTtcbiAgICB2YXIgaXNJZTYgPSBpZVZlcnNpb24gPT09IDYsXG4gICAgICAgIGlzSWU3ID0gaWVWZXJzaW9uID09PSA3O1xuXG4gICAgZnVuY3Rpb24gaXNDbGlja09uQ2hlY2thYmxlRWxlbWVudChlbGVtZW50LCBldmVudFR5cGUpIHtcbiAgICAgICAgaWYgKChrby51dGlscy50YWdOYW1lTG93ZXIoZWxlbWVudCkgIT09IFwiaW5wdXRcIikgfHwgIWVsZW1lbnQudHlwZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoZXZlbnRUeXBlLnRvTG93ZXJDYXNlKCkgIT0gXCJjbGlja1wiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBpbnB1dFR5cGUgPSBlbGVtZW50LnR5cGU7XG4gICAgICAgIHJldHVybiAoaW5wdXRUeXBlID09IFwiY2hlY2tib3hcIikgfHwgKGlucHV0VHlwZSA9PSBcInJhZGlvXCIpO1xuICAgIH1cblxuICAgIC8vIEZvciBkZXRhaWxzIG9uIHRoZSBwYXR0ZXJuIGZvciBjaGFuZ2luZyBub2RlIGNsYXNzZXNcbiAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9rbm9ja291dC9rbm9ja291dC9pc3N1ZXMvMTU5N1xuICAgIHZhciBjc3NDbGFzc05hbWVSZWdleCA9IC9cXFMrL2c7XG5cbiAgICBmdW5jdGlvbiB0b2dnbGVEb21Ob2RlQ3NzQ2xhc3Mobm9kZSwgY2xhc3NOYW1lcywgc2hvdWxkSGF2ZUNsYXNzKSB7XG4gICAgICAgIHZhciBhZGRPclJlbW92ZUZuO1xuICAgICAgICBpZiAoY2xhc3NOYW1lcykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlLmNsYXNzTGlzdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBhZGRPclJlbW92ZUZuID0gbm9kZS5jbGFzc0xpc3Rbc2hvdWxkSGF2ZUNsYXNzID8gJ2FkZCcgOiAncmVtb3ZlJ107XG4gICAgICAgICAgICAgICAga28udXRpbHMuYXJyYXlGb3JFYWNoKGNsYXNzTmFtZXMubWF0Y2goY3NzQ2xhc3NOYW1lUmVnZXgpLCBmdW5jdGlvbihjbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkT3JSZW1vdmVGbi5jYWxsKG5vZGUuY2xhc3NMaXN0LCBjbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygbm9kZS5jbGFzc05hbWVbJ2Jhc2VWYWwnXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAvLyBTVkcgdGFnIC5jbGFzc05hbWVzIGlzIGFuIFNWR0FuaW1hdGVkU3RyaW5nIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgdG9nZ2xlT2JqZWN0Q2xhc3NQcm9wZXJ0eVN0cmluZyhub2RlLmNsYXNzTmFtZSwgJ2Jhc2VWYWwnLCBjbGFzc05hbWVzLCBzaG91bGRIYXZlQ2xhc3MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBub2RlLmNsYXNzTmFtZSBvdWdodCB0byBiZSBhIHN0cmluZy5cbiAgICAgICAgICAgICAgICB0b2dnbGVPYmplY3RDbGFzc1Byb3BlcnR5U3RyaW5nKG5vZGUsICdjbGFzc05hbWUnLCBjbGFzc05hbWVzLCBzaG91bGRIYXZlQ2xhc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9nZ2xlT2JqZWN0Q2xhc3NQcm9wZXJ0eVN0cmluZyhvYmosIHByb3AsIGNsYXNzTmFtZXMsIHNob3VsZEhhdmVDbGFzcykge1xuICAgICAgICAvLyBvYmovcHJvcCBpcyBlaXRoZXIgYSBub2RlLydjbGFzc05hbWUnIG9yIGEgU1ZHQW5pbWF0ZWRTdHJpbmcvJ2Jhc2VWYWwnLlxuICAgICAgICB2YXIgY3VycmVudENsYXNzTmFtZXMgPSBvYmpbcHJvcF0ubWF0Y2goY3NzQ2xhc3NOYW1lUmVnZXgpIHx8IFtdO1xuICAgICAgICBrby51dGlscy5hcnJheUZvckVhY2goY2xhc3NOYW1lcy5tYXRjaChjc3NDbGFzc05hbWVSZWdleCksIGZ1bmN0aW9uKGNsYXNzTmFtZSkge1xuICAgICAgICAgICAga28udXRpbHMuYWRkT3JSZW1vdmVJdGVtKGN1cnJlbnRDbGFzc05hbWVzLCBjbGFzc05hbWUsIHNob3VsZEhhdmVDbGFzcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBvYmpbcHJvcF0gPSBjdXJyZW50Q2xhc3NOYW1lcy5qb2luKFwiIFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBmaWVsZHNJbmNsdWRlZFdpdGhKc29uUG9zdDogWydhdXRoZW50aWNpdHlfdG9rZW4nLCAvXl9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuKF8uKik/JC9dLFxuXG4gICAgICAgIGFycmF5Rm9yRWFjaDogZnVuY3Rpb24gKGFycmF5LCBhY3Rpb24pIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gYXJyYXkubGVuZ3RoOyBpIDwgajsgaSsrKVxuICAgICAgICAgICAgICAgIGFjdGlvbihhcnJheVtpXSwgaSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXJyYXlJbmRleE9mOiBmdW5jdGlvbiAoYXJyYXksIGl0ZW0pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGFycmF5LCBpdGVtKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gYXJyYXkubGVuZ3RoOyBpIDwgajsgaSsrKVxuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpXSA9PT0gaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXJyYXlGaXJzdDogZnVuY3Rpb24gKGFycmF5LCBwcmVkaWNhdGUsIHByZWRpY2F0ZU93bmVyKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGFycmF5Lmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAgICAgICAgICBpZiAocHJlZGljYXRlLmNhbGwocHJlZGljYXRlT3duZXIsIGFycmF5W2ldLCBpKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5W2ldO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXJyYXlSZW1vdmVJdGVtOiBmdW5jdGlvbiAoYXJyYXksIGl0ZW1Ub1JlbW92ZSkge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0ga28udXRpbHMuYXJyYXlJbmRleE9mKGFycmF5LCBpdGVtVG9SZW1vdmUpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGFycmF5LnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXJyYXlHZXREaXN0aW5jdFZhbHVlczogZnVuY3Rpb24gKGFycmF5KSB7XG4gICAgICAgICAgICBhcnJheSA9IGFycmF5IHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBhcnJheS5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoa28udXRpbHMuYXJyYXlJbmRleE9mKHJlc3VsdCwgYXJyYXlbaV0pIDwgMClcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBhcnJheU1hcDogZnVuY3Rpb24gKGFycmF5LCBtYXBwaW5nKSB7XG4gICAgICAgICAgICBhcnJheSA9IGFycmF5IHx8IFtdO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBhcnJheS5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobWFwcGluZyhhcnJheVtpXSwgaSkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBhcnJheUZpbHRlcjogZnVuY3Rpb24gKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICAgICAgICAgIGFycmF5ID0gYXJyYXkgfHwgW107XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGFycmF5Lmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAgICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2ldLCBpKSlcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJyYXlbaV0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBhcnJheVB1c2hBbGw6IGZ1bmN0aW9uIChhcnJheSwgdmFsdWVzVG9QdXNoKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVzVG9QdXNoIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaC5hcHBseShhcnJheSwgdmFsdWVzVG9QdXNoKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IHZhbHVlc1RvUHVzaC5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2godmFsdWVzVG9QdXNoW2ldKTtcbiAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgfSxcblxuICAgICAgICBhZGRPclJlbW92ZUl0ZW06IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSwgaW5jbHVkZWQpIHtcbiAgICAgICAgICAgIHZhciBleGlzdGluZ0VudHJ5SW5kZXggPSBrby51dGlscy5hcnJheUluZGV4T2Yoa28udXRpbHMucGVla09ic2VydmFibGUoYXJyYXkpLCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZXhpc3RpbmdFbnRyeUluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlZClcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghaW5jbHVkZWQpXG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnNwbGljZShleGlzdGluZ0VudHJ5SW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGNhblNldFByb3RvdHlwZTogY2FuU2V0UHJvdG90eXBlLFxuXG4gICAgICAgIGV4dGVuZDogZXh0ZW5kLFxuXG4gICAgICAgIHNldFByb3RvdHlwZU9mOiBzZXRQcm90b3R5cGVPZixcblxuICAgICAgICBzZXRQcm90b3R5cGVPZk9yRXh0ZW5kOiBjYW5TZXRQcm90b3R5cGUgPyBzZXRQcm90b3R5cGVPZiA6IGV4dGVuZCxcblxuICAgICAgICBvYmplY3RGb3JFYWNoOiBvYmplY3RGb3JFYWNoLFxuXG4gICAgICAgIG9iamVjdE1hcDogZnVuY3Rpb24oc291cmNlLCBtYXBwaW5nKSB7XG4gICAgICAgICAgICBpZiAoIXNvdXJjZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IG1hcHBpbmcoc291cmNlW3Byb3BdLCBwcm9wLCBzb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZW1wdHlEb21Ob2RlOiBmdW5jdGlvbiAoZG9tTm9kZSkge1xuICAgICAgICAgICAgd2hpbGUgKGRvbU5vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgIGtvLnJlbW92ZU5vZGUoZG9tTm9kZS5maXJzdENoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBtb3ZlQ2xlYW5lZE5vZGVzVG9Db250YWluZXJFbGVtZW50OiBmdW5jdGlvbihub2Rlcykge1xuICAgICAgICAgICAgLy8gRW5zdXJlIGl0J3MgYSByZWFsIGFycmF5LCBhcyB3ZSdyZSBhYm91dCB0byByZXBhcmVudCB0aGUgbm9kZXMgYW5kXG4gICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRoZSB1bmRlcmx5aW5nIGNvbGxlY3Rpb24gdG8gY2hhbmdlIHdoaWxlIHdlJ3JlIGRvaW5nIHRoYXQuXG4gICAgICAgICAgICB2YXIgbm9kZXNBcnJheSA9IGtvLnV0aWxzLm1ha2VBcnJheShub2Rlcyk7XG4gICAgICAgICAgICB2YXIgdGVtcGxhdGVEb2N1bWVudCA9IChub2Rlc0FycmF5WzBdICYmIG5vZGVzQXJyYXlbMF0ub3duZXJEb2N1bWVudCkgfHwgZG9jdW1lbnQ7XG5cbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSB0ZW1wbGF0ZURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBub2Rlc0FycmF5Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChrby5jbGVhbk5vZGUobm9kZXNBcnJheVtpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICAgICAgfSxcblxuICAgICAgICBjbG9uZU5vZGVzOiBmdW5jdGlvbiAobm9kZXNBcnJheSwgc2hvdWxkQ2xlYW5Ob2Rlcykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBub2Rlc0FycmF5Lmxlbmd0aCwgbmV3Tm9kZXNBcnJheSA9IFtdOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNsb25lZE5vZGUgPSBub2Rlc0FycmF5W2ldLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgICAgICAgICBuZXdOb2Rlc0FycmF5LnB1c2goc2hvdWxkQ2xlYW5Ob2RlcyA/IGtvLmNsZWFuTm9kZShjbG9uZWROb2RlKSA6IGNsb25lZE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ld05vZGVzQXJyYXk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0RG9tTm9kZUNoaWxkcmVuOiBmdW5jdGlvbiAoZG9tTm9kZSwgY2hpbGROb2Rlcykge1xuICAgICAgICAgICAga28udXRpbHMuZW1wdHlEb21Ob2RlKGRvbU5vZGUpO1xuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgajsgaSsrKVxuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlLmFwcGVuZENoaWxkKGNoaWxkTm9kZXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHJlcGxhY2VEb21Ob2RlczogZnVuY3Rpb24gKG5vZGVUb1JlcGxhY2VPck5vZGVBcnJheSwgbmV3Tm9kZXNBcnJheSkge1xuICAgICAgICAgICAgdmFyIG5vZGVzVG9SZXBsYWNlQXJyYXkgPSBub2RlVG9SZXBsYWNlT3JOb2RlQXJyYXkubm9kZVR5cGUgPyBbbm9kZVRvUmVwbGFjZU9yTm9kZUFycmF5XSA6IG5vZGVUb1JlcGxhY2VPck5vZGVBcnJheTtcbiAgICAgICAgICAgIGlmIChub2Rlc1RvUmVwbGFjZUFycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5zZXJ0aW9uUG9pbnQgPSBub2Rlc1RvUmVwbGFjZUFycmF5WzBdO1xuICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBpbnNlcnRpb25Qb2ludC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gbmV3Tm9kZXNBcnJheS5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUobmV3Tm9kZXNBcnJheVtpXSwgaW5zZXJ0aW9uUG9pbnQpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gbm9kZXNUb1JlcGxhY2VBcnJheS5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAga28ucmVtb3ZlTm9kZShub2Rlc1RvUmVwbGFjZUFycmF5W2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZml4VXBDb250aW51b3VzTm9kZUFycmF5OiBmdW5jdGlvbihjb250aW51b3VzTm9kZUFycmF5LCBwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAvLyBCZWZvcmUgYWN0aW5nIG9uIGEgc2V0IG9mIG5vZGVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IG91dHB1dHRlZCBieSBhIHRlbXBsYXRlIGZ1bmN0aW9uLCB3ZSBoYXZlIHRvIHJlY29uY2lsZVxuICAgICAgICAgICAgLy8gdGhlbSBhZ2FpbnN0IHdoYXQgaXMgaW4gdGhlIERPTSByaWdodCBub3cuIEl0IG1heSBiZSB0aGF0IHNvbWUgb2YgdGhlIG5vZGVzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQsIG9yIHRoYXRcbiAgICAgICAgICAgIC8vIG5ldyBub2RlcyBtaWdodCBoYXZlIGJlZW4gaW5zZXJ0ZWQgaW4gdGhlIG1pZGRsZSwgZm9yIGV4YW1wbGUgYnkgYSBiaW5kaW5nLiBBbHNvLCB0aGVyZSBtYXkgcHJldmlvdXNseSBoYXZlIGJlZW5cbiAgICAgICAgICAgIC8vIGxlYWRpbmcgY29tbWVudCBub2RlcyAoY3JlYXRlZCBieSByZXdyaXR0ZW4gc3RyaW5nLWJhc2VkIHRlbXBsYXRlcykgdGhhdCBoYXZlIHNpbmNlIGJlZW4gcmVtb3ZlZCBkdXJpbmcgYmluZGluZy5cbiAgICAgICAgICAgIC8vIFNvLCB0aGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgdGhlIG9sZCBcIm1hcFwiIG91dHB1dCBhcnJheSBpbnRvIGl0cyBiZXN0IGd1ZXNzIG9mIHRoZSBzZXQgb2YgY3VycmVudCBET00gbm9kZXMuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gUnVsZXM6XG4gICAgICAgICAgICAvLyAgIFtBXSBBbnkgbGVhZGluZyBub2RlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNob3VsZCBiZSBpZ25vcmVkXG4gICAgICAgICAgICAvLyAgICAgICBUaGVzZSBtb3N0IGxpa2VseSBjb3JyZXNwb25kIHRvIG1lbW9pemF0aW9uIG5vZGVzIHRoYXQgd2VyZSBhbHJlYWR5IHJlbW92ZWQgZHVyaW5nIGJpbmRpbmdcbiAgICAgICAgICAgIC8vICAgICAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20va25vY2tvdXQva25vY2tvdXQvcHVsbC80NDBcbiAgICAgICAgICAgIC8vICAgW0JdIEFueSB0cmFpbGluZyBub2RlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmUgc2hvdWxkIGJlIGlnbm9yZWRcbiAgICAgICAgICAgIC8vICAgICAgIFRoaXMgcHJldmVudHMgdGhlIGNvZGUgaGVyZSBmcm9tIGFkZGluZyB1bnJlbGF0ZWQgbm9kZXMgdG8gdGhlIGFycmF5IHdoaWxlIHByb2Nlc3NpbmcgcnVsZSBbQ11cbiAgICAgICAgICAgIC8vICAgICAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20va25vY2tvdXQva25vY2tvdXQvcHVsbC8xOTAzXG4gICAgICAgICAgICAvLyAgIFtDXSBXZSB3YW50IHRvIG91dHB1dCBhIGNvbnRpbnVvdXMgc2VyaWVzIG9mIG5vZGVzLiBTbywgaWdub3JlIGFueSBub2RlcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQsXG4gICAgICAgICAgICAvLyAgICAgICBhbmQgaW5jbHVkZSBhbnkgbm9kZXMgdGhhdCBoYXZlIGJlZW4gaW5zZXJ0ZWQgYW1vbmcgdGhlIHByZXZpb3VzIGNvbGxlY3Rpb25cblxuICAgICAgICAgICAgaWYgKGNvbnRpbnVvdXNOb2RlQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHBhcmVudCBub2RlIGNhbiBiZSBhIHZpcnR1YWwgZWxlbWVudDsgc28gZ2V0IHRoZSByZWFsIHBhcmVudCBub2RlXG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IChwYXJlbnROb2RlLm5vZGVUeXBlID09PSA4ICYmIHBhcmVudE5vZGUucGFyZW50Tm9kZSkgfHwgcGFyZW50Tm9kZTtcblxuICAgICAgICAgICAgICAgIC8vIFJ1bGUgW0FdXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvbnRpbnVvdXNOb2RlQXJyYXkubGVuZ3RoICYmIGNvbnRpbnVvdXNOb2RlQXJyYXlbMF0ucGFyZW50Tm9kZSAhPT0gcGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludW91c05vZGVBcnJheS5zcGxpY2UoMCwgMSk7XG5cbiAgICAgICAgICAgICAgICAvLyBSdWxlIFtCXVxuICAgICAgICAgICAgICAgIHdoaWxlIChjb250aW51b3VzTm9kZUFycmF5Lmxlbmd0aCA+IDEgJiYgY29udGludW91c05vZGVBcnJheVtjb250aW51b3VzTm9kZUFycmF5Lmxlbmd0aCAtIDFdLnBhcmVudE5vZGUgIT09IHBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVvdXNOb2RlQXJyYXkubGVuZ3RoLS07XG5cbiAgICAgICAgICAgICAgICAvLyBSdWxlIFtDXVxuICAgICAgICAgICAgICAgIGlmIChjb250aW51b3VzTm9kZUFycmF5Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBjb250aW51b3VzTm9kZUFycmF5WzBdLCBsYXN0ID0gY29udGludW91c05vZGVBcnJheVtjb250aW51b3VzTm9kZUFycmF5Lmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHdpdGggdGhlIGFjdHVhbCBuZXcgY29udGludW91cyBub2RlIHNldFxuICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzTm9kZUFycmF5Lmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50ICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzTm9kZUFycmF5LnB1c2goY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzTm9kZUFycmF5LnB1c2gobGFzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVvdXNOb2RlQXJyYXk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0T3B0aW9uTm9kZVNlbGVjdGlvblN0YXRlOiBmdW5jdGlvbiAob3B0aW9uTm9kZSwgaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgLy8gSUU2IHNvbWV0aW1lcyB0aHJvd3MgXCJ1bmtub3duIGVycm9yXCIgaWYgeW91IHRyeSB0byB3cml0ZSB0byAuc2VsZWN0ZWQgZGlyZWN0bHksIHdoZXJlYXMgRmlyZWZveCBzdHJ1Z2dsZXMgd2l0aCBzZXRBdHRyaWJ1dGUuIFBpY2sgb25lIGJhc2VkIG9uIGJyb3dzZXIuXG4gICAgICAgICAgICBpZiAoaWVWZXJzaW9uIDwgNylcbiAgICAgICAgICAgICAgICBvcHRpb25Ob2RlLnNldEF0dHJpYnV0ZShcInNlbGVjdGVkXCIsIGlzU2VsZWN0ZWQpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIG9wdGlvbk5vZGUuc2VsZWN0ZWQgPSBpc1NlbGVjdGVkO1xuICAgICAgICB9LFxuXG4gICAgICAgIHN0cmluZ1RyaW06IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcgPT09IG51bGwgfHwgc3RyaW5nID09PSB1bmRlZmluZWQgPyAnJyA6XG4gICAgICAgICAgICAgICAgc3RyaW5nLnRyaW0gP1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmcudHJpbSgpIDpcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLnRvU3RyaW5nKCkucmVwbGFjZSgvXltcXHNcXHhhMF0rfFtcXHNcXHhhMF0rJC9nLCAnJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc3RyaW5nU3RhcnRzV2l0aDogZnVuY3Rpb24gKHN0cmluZywgc3RhcnRzV2l0aCkge1xuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nIHx8IFwiXCI7XG4gICAgICAgICAgICBpZiAoc3RhcnRzV2l0aC5sZW5ndGggPiBzdHJpbmcubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuc3Vic3RyaW5nKDAsIHN0YXJ0c1dpdGgubGVuZ3RoKSA9PT0gc3RhcnRzV2l0aDtcbiAgICAgICAgfSxcblxuICAgICAgICBkb21Ob2RlSXNDb250YWluZWRCeTogZnVuY3Rpb24gKG5vZGUsIGNvbnRhaW5lZEJ5Tm9kZSkge1xuICAgICAgICAgICAgaWYgKG5vZGUgPT09IGNvbnRhaW5lZEJ5Tm9kZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEZpeGVzIGlzc3VlICMxMTYyIC0gY2FuJ3QgdXNlIG5vZGUuY29udGFpbnMgZm9yIGRvY3VtZW50IGZyYWdtZW50cyBvbiBJRThcbiAgICAgICAgICAgIGlmIChjb250YWluZWRCeU5vZGUuY29udGFpbnMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lZEJ5Tm9kZS5jb250YWlucyhub2RlLm5vZGVUeXBlID09PSAzID8gbm9kZS5wYXJlbnROb2RlIDogbm9kZSk7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVkQnlOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKVxuICAgICAgICAgICAgICAgIHJldHVybiAoY29udGFpbmVkQnlOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5vZGUpICYgMTYpID09IDE2O1xuICAgICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPSBjb250YWluZWRCeU5vZGUpIHtcbiAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICEhbm9kZTtcbiAgICAgICAgfSxcblxuICAgICAgICBkb21Ob2RlSXNBdHRhY2hlZFRvRG9jdW1lbnQ6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4ga28udXRpbHMuZG9tTm9kZUlzQ29udGFpbmVkQnkobm9kZSwgbm9kZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYW55RG9tTm9kZUlzQXR0YWNoZWRUb0RvY3VtZW50OiBmdW5jdGlvbihub2Rlcykge1xuICAgICAgICAgICAgcmV0dXJuICEha28udXRpbHMuYXJyYXlGaXJzdChub2Rlcywga28udXRpbHMuZG9tTm9kZUlzQXR0YWNoZWRUb0RvY3VtZW50KTtcbiAgICAgICAgfSxcblxuICAgICAgICB0YWdOYW1lTG93ZXI6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIEZvciBIVE1MIGVsZW1lbnRzLCB0YWdOYW1lIHdpbGwgYWx3YXlzIGJlIHVwcGVyIGNhc2U7IGZvciBYSFRNTCBlbGVtZW50cywgaXQnbGwgYmUgbG93ZXIgY2FzZS5cbiAgICAgICAgICAgIC8vIFBvc3NpYmxlIGZ1dHVyZSBvcHRpbWl6YXRpb246IElmIHdlIGtub3cgaXQncyBhbiBlbGVtZW50IGZyb20gYW4gWEhUTUwgZG9jdW1lbnQgKG5vdCBIVE1MKSxcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhlIC50b0xvd2VyQ2FzZSgpIGFzIGl0IHdpbGwgYWx3YXlzIGJlIGxvd2VyIGNhc2UgYW55d2F5LlxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC50YWdOYW1lICYmIGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNhdGNoRnVuY3Rpb25FcnJvcnM6IGZ1bmN0aW9uIChkZWxlZ2F0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGtvWydvbkVycm9yJ10gPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBrb1snb25FcnJvciddICYmIGtvWydvbkVycm9yJ10oZSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSA6IGRlbGVnYXRlO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dChrby51dGlscy5jYXRjaEZ1bmN0aW9uRXJyb3JzKGhhbmRsZXIpLCB0aW1lb3V0KTtcbiAgICAgICAgfSxcblxuICAgICAgICBkZWZlckVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGtvWydvbkVycm9yJ10gJiYga29bJ29uRXJyb3InXShlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWdpc3RlckV2ZW50SGFuZGxlcjogZnVuY3Rpb24gKGVsZW1lbnQsIGV2ZW50VHlwZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgdmFyIHdyYXBwZWRIYW5kbGVyID0ga28udXRpbHMuY2F0Y2hGdW5jdGlvbkVycm9ycyhoYW5kbGVyKTtcblxuICAgICAgICAgICAgdmFyIG11c3RVc2VBdHRhY2hFdmVudCA9IGllVmVyc2lvbiAmJiBldmVudHNUaGF0TXVzdEJlUmVnaXN0ZXJlZFVzaW5nQXR0YWNoRXZlbnRbZXZlbnRUeXBlXTtcbiAgICAgICAgICAgIGlmICgha28ub3B0aW9uc1sndXNlT25seU5hdGl2ZUV2ZW50cyddICYmICFtdXN0VXNlQXR0YWNoRXZlbnQgJiYgalF1ZXJ5SW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBqUXVlcnlJbnN0YW5jZShlbGVtZW50KVsnYmluZCddKGV2ZW50VHlwZSwgd3JhcHBlZEhhbmRsZXIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghbXVzdFVzZUF0dGFjaEV2ZW50ICYmIHR5cGVvZiBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIHdyYXBwZWRIYW5kbGVyLCBmYWxzZSk7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZWxlbWVudC5hdHRhY2hFdmVudCAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIGF0dGFjaEV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uIChldmVudCkgeyB3cmFwcGVkSGFuZGxlci5jYWxsKGVsZW1lbnQsIGV2ZW50KTsgfSxcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNoRXZlbnROYW1lID0gXCJvblwiICsgZXZlbnRUeXBlO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoYXR0YWNoRXZlbnROYW1lLCBhdHRhY2hFdmVudEhhbmRsZXIpO1xuXG4gICAgICAgICAgICAgICAgLy8gSUUgZG9lcyBub3QgZGlzcG9zZSBhdHRhY2hFdmVudCBoYW5kbGVycyBhdXRvbWF0aWNhbGx5ICh1bmxpa2Ugd2l0aCBhZGRFdmVudExpc3RlbmVyKVxuICAgICAgICAgICAgICAgIC8vIHNvIHRvIGF2b2lkIGxlYWtzLCB3ZSBoYXZlIHRvIHJlbW92ZSB0aGVtIG1hbnVhbGx5LiBTZWUgYnVnICM4NTZcbiAgICAgICAgICAgICAgICBrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmRldGFjaEV2ZW50KGF0dGFjaEV2ZW50TmFtZSwgYXR0YWNoRXZlbnRIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGFkZEV2ZW50TGlzdGVuZXIgb3IgYXR0YWNoRXZlbnRcIik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdHJpZ2dlckV2ZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICBpZiAoIShlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImVsZW1lbnQgbXVzdCBiZSBhIERPTSBub2RlIHdoZW4gY2FsbGluZyB0cmlnZ2VyRXZlbnRcIik7XG5cbiAgICAgICAgICAgIC8vIEZvciBjbGljayBldmVudHMgb24gY2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucywgalF1ZXJ5IHRvZ2dsZXMgdGhlIGVsZW1lbnQgY2hlY2tlZCBzdGF0ZSAqYWZ0ZXIqIHRoZVxuICAgICAgICAgICAgLy8gZXZlbnQgaGFuZGxlciBydW5zIGluc3RlYWQgb2YgKmJlZm9yZSouIChUaGlzIHdhcyBmaXhlZCBpbiAxLjkgZm9yIGNoZWNrYm94ZXMgYnV0IG5vdCBmb3IgcmFkaW8gYnV0dG9ucy4pXG4gICAgICAgICAgICAvLyBJRSBkb2Vzbid0IGNoYW5nZSB0aGUgY2hlY2tlZCBzdGF0ZSB3aGVuIHlvdSB0cmlnZ2VyIHRoZSBjbGljayBldmVudCB1c2luZyBcImZpcmVFdmVudFwiLlxuICAgICAgICAgICAgLy8gSW4gYm90aCBjYXNlcywgd2UnbGwgdXNlIHRoZSBjbGljayBtZXRob2QgaW5zdGVhZC5cbiAgICAgICAgICAgIHZhciB1c2VDbGlja1dvcmthcm91bmQgPSBpc0NsaWNrT25DaGVja2FibGVFbGVtZW50KGVsZW1lbnQsIGV2ZW50VHlwZSk7XG5cbiAgICAgICAgICAgIGlmICgha28ub3B0aW9uc1sndXNlT25seU5hdGl2ZUV2ZW50cyddICYmIGpRdWVyeUluc3RhbmNlICYmICF1c2VDbGlja1dvcmthcm91bmQpIHtcbiAgICAgICAgICAgICAgICBqUXVlcnlJbnN0YW5jZShlbGVtZW50KVsndHJpZ2dlciddKGV2ZW50VHlwZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFdmVudCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVsZW1lbnQuZGlzcGF0Y2hFdmVudCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV2ZW50Q2F0ZWdvcnkgPSBrbm93bkV2ZW50VHlwZXNCeUV2ZW50TmFtZVtldmVudFR5cGVdIHx8IFwiSFRNTEV2ZW50c1wiO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChldmVudENhdGVnb3J5KTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuaW5pdEV2ZW50KGV2ZW50VHlwZSwgdHJ1ZSwgdHJ1ZSwgd2luZG93LCAwLCAwLCAwLCAwLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN1cHBsaWVkIGVsZW1lbnQgZG9lc24ndCBzdXBwb3J0IGRpc3BhdGNoRXZlbnRcIik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVzZUNsaWNrV29ya2Fyb3VuZCAmJiBlbGVtZW50LmNsaWNrKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5jbGljaygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudC5maXJlRXZlbnQgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZmlyZUV2ZW50KFwib25cIiArIGV2ZW50VHlwZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHRyaWdnZXJpbmcgZXZlbnRzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHVud3JhcE9ic2VydmFibGU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGtvLmlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyB2YWx1ZSgpIDogdmFsdWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGVla09ic2VydmFibGU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGtvLmlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyB2YWx1ZS5wZWVrKCkgOiB2YWx1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICB0b2dnbGVEb21Ob2RlQ3NzQ2xhc3M6IHRvZ2dsZURvbU5vZGVDc3NDbGFzcyxcblxuICAgICAgICBzZXRUZXh0Q29udGVudDogZnVuY3Rpb24oZWxlbWVudCwgdGV4dENvbnRlbnQpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUodGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgaWYgKCh2YWx1ZSA9PT0gbnVsbCkgfHwgKHZhbHVlID09PSB1bmRlZmluZWQpKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gXCJcIjtcblxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0aGVyZSB0byBiZSBleGFjdGx5IG9uZSBjaGlsZDogYSB0ZXh0IG5vZGUuXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gY2hpbGRyZW4sIG1vcmUgdGhhbiBvbmUsIG9yIGlmIGl0J3Mgbm90IGEgdGV4dCBub2RlLFxuICAgICAgICAgICAgLy8gd2UnbGwgY2xlYXIgZXZlcnl0aGluZyBhbmQgY3JlYXRlIGEgc2luZ2xlIHRleHQgbm9kZS5cbiAgICAgICAgICAgIHZhciBpbm5lclRleHROb2RlID0ga28udmlydHVhbEVsZW1lbnRzLmZpcnN0Q2hpbGQoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIWlubmVyVGV4dE5vZGUgfHwgaW5uZXJUZXh0Tm9kZS5ub2RlVHlwZSAhPSAzIHx8IGtvLnZpcnR1YWxFbGVtZW50cy5uZXh0U2libGluZyhpbm5lclRleHROb2RlKSkge1xuICAgICAgICAgICAgICAgIGtvLnZpcnR1YWxFbGVtZW50cy5zZXREb21Ob2RlQ2hpbGRyZW4oZWxlbWVudCwgW2VsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2YWx1ZSldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5uZXJUZXh0Tm9kZS5kYXRhID0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGtvLnV0aWxzLmZvcmNlUmVmcmVzaChlbGVtZW50KTtcbiAgICAgICAgfSxcblxuICAgICAgICBzZXRFbGVtZW50TmFtZTogZnVuY3Rpb24oZWxlbWVudCwgbmFtZSkge1xuICAgICAgICAgICAgZWxlbWVudC5uYW1lID0gbmFtZTtcblxuICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBJRSA2LzcgaXNzdWVcbiAgICAgICAgICAgIC8vIC0gaHR0cHM6Ly9naXRodWIuY29tL1N0ZXZlU2FuZGVyc29uL2tub2Nrb3V0L2lzc3Vlcy8xOTdcbiAgICAgICAgICAgIC8vIC0gaHR0cDovL3d3dy5tYXR0czQxMS5jb20vcG9zdC9zZXR0aW5nX3RoZV9uYW1lX2F0dHJpYnV0ZV9pbl9pZV9kb20vXG4gICAgICAgICAgICBpZiAoaWVWZXJzaW9uIDw9IDcpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1lcmdlQXR0cmlidXRlcyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiPGlucHV0IG5hbWU9J1wiICsgZWxlbWVudC5uYW1lICsgXCInLz5cIiksIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2goZSkge30gLy8gRm9yIElFOSB3aXRoIGRvYyBtb2RlIFwiSUU5IFN0YW5kYXJkc1wiIGFuZCBicm93c2VyIG1vZGUgXCJJRTkgQ29tcGF0aWJpbGl0eSBWaWV3XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBmb3JjZVJlZnJlc2g6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIGFuIElFOSByZW5kZXJpbmcgYnVnIC0gaHR0cHM6Ly9naXRodWIuY29tL1N0ZXZlU2FuZGVyc29uL2tub2Nrb3V0L2lzc3Vlcy8yMDlcbiAgICAgICAgICAgIGlmIChpZVZlcnNpb24gPj0gOSkge1xuICAgICAgICAgICAgICAgIC8vIEZvciB0ZXh0IG5vZGVzIGFuZCBjb21tZW50IG5vZGVzIChtb3N0IGxpa2VseSB2aXJ0dWFsIGVsZW1lbnRzKSwgd2Ugd2lsbCBoYXZlIHRvIHJlZnJlc2ggdGhlIGNvbnRhaW5lclxuICAgICAgICAgICAgICAgIHZhciBlbGVtID0gbm9kZS5ub2RlVHlwZSA9PSAxID8gbm9kZSA6IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbS5zdHlsZSlcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZS56b29tID0gZWxlbS5zdHlsZS56b29tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGVuc3VyZVNlbGVjdEVsZW1lbnRJc1JlbmRlcmVkQ29ycmVjdGx5OiBmdW5jdGlvbihzZWxlY3RFbGVtZW50KSB7XG4gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBJRTkgcmVuZGVyaW5nIGJ1ZyAtIGl0IGRvZXNuJ3QgcmVsaWFibHkgZGlzcGxheSBhbGwgdGhlIHRleHQgaW4gZHluYW1pY2FsbHktYWRkZWQgc2VsZWN0IGJveGVzIHVubGVzcyB5b3UgZm9yY2UgaXQgdG8gcmUtcmVuZGVyIGJ5IHVwZGF0aW5nIHRoZSB3aWR0aC5cbiAgICAgICAgICAgIC8vIChTZWUgaHR0cHM6Ly9naXRodWIuY29tL1N0ZXZlU2FuZGVyc29uL2tub2Nrb3V0L2lzc3Vlcy8zMTIsIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTkwODQ5NC9zZWxlY3Qtb25seS1zaG93cy1maXJzdC1jaGFyLW9mLXNlbGVjdGVkLW9wdGlvbilcbiAgICAgICAgICAgIC8vIEFsc28gZml4ZXMgSUU3IGFuZCBJRTggYnVnIHRoYXQgY2F1c2VzIHNlbGVjdHMgdG8gYmUgemVybyB3aWR0aCBpZiBlbmNsb3NlZCBieSAnaWYnIG9yICd3aXRoJy4gKFNlZSBpc3N1ZSAjODM5KVxuICAgICAgICAgICAgaWYgKGllVmVyc2lvbikge1xuICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbFdpZHRoID0gc2VsZWN0RWxlbWVudC5zdHlsZS53aWR0aDtcbiAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LnN0eWxlLndpZHRoID0gMDtcbiAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LnN0eWxlLndpZHRoID0gb3JpZ2luYWxXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICByYW5nZTogZnVuY3Rpb24gKG1pbiwgbWF4KSB7XG4gICAgICAgICAgICBtaW4gPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKG1pbik7XG4gICAgICAgICAgICBtYXggPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKG1heCk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gbWluOyBpIDw9IG1heDsgaSsrKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBtYWtlQXJyYXk6IGZ1bmN0aW9uKGFycmF5TGlrZU9iamVjdCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBhcnJheUxpa2VPYmplY3QubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJyYXlMaWtlT2JqZWN0W2ldKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIGNyZWF0ZVN5bWJvbE9yU3RyaW5nOiBmdW5jdGlvbihpZGVudGlmaWVyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FuVXNlU3ltYm9scyA/IFN5bWJvbChpZGVudGlmaWVyKSA6IGlkZW50aWZpZXI7XG4gICAgICAgIH0sXG5cbiAgICAgICAgaXNJZTYgOiBpc0llNixcbiAgICAgICAgaXNJZTcgOiBpc0llNyxcbiAgICAgICAgaWVWZXJzaW9uIDogaWVWZXJzaW9uLFxuXG4gICAgICAgIGdldEZvcm1GaWVsZHM6IGZ1bmN0aW9uKGZvcm0sIGZpZWxkTmFtZSkge1xuICAgICAgICAgICAgdmFyIGZpZWxkcyA9IGtvLnV0aWxzLm1ha2VBcnJheShmb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIikpLmNvbmNhdChrby51dGlscy5tYWtlQXJyYXkoZm9ybS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRleHRhcmVhXCIpKSk7XG4gICAgICAgICAgICB2YXIgaXNNYXRjaGluZ0ZpZWxkID0gKHR5cGVvZiBmaWVsZE5hbWUgPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgPyBmdW5jdGlvbihmaWVsZCkgeyByZXR1cm4gZmllbGQubmFtZSA9PT0gZmllbGROYW1lIH1cbiAgICAgICAgICAgICAgICA6IGZ1bmN0aW9uKGZpZWxkKSB7IHJldHVybiBmaWVsZE5hbWUudGVzdChmaWVsZC5uYW1lKSB9OyAvLyBUcmVhdCBmaWVsZE5hbWUgYXMgcmVnZXggb3Igb2JqZWN0IGNvbnRhaW5pbmcgcHJlZGljYXRlXG4gICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGZpZWxkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGlmIChpc01hdGNoaW5nRmllbGQoZmllbGRzW2ldKSlcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKGZpZWxkc1tpXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VKc29uOiBmdW5jdGlvbiAoanNvblN0cmluZykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uU3RyaW5nID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBqc29uU3RyaW5nID0ga28udXRpbHMuc3RyaW5nVHJpbShqc29uU3RyaW5nKTtcbiAgICAgICAgICAgICAgICBpZiAoanNvblN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTiAmJiBKU09OLnBhcnNlKSAvLyBVc2UgbmF0aXZlIHBhcnNpbmcgd2hlcmUgYXZhaWxhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuZXcgRnVuY3Rpb24oXCJyZXR1cm4gXCIgKyBqc29uU3RyaW5nKSkoKTsgLy8gRmFsbGJhY2sgb24gbGVzcyBzYWZlIHBhcnNpbmcgZm9yIG9sZGVyIGJyb3dzZXJzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc3RyaW5naWZ5SnNvbjogZnVuY3Rpb24gKGRhdGEsIHJlcGxhY2VyLCBzcGFjZSkgeyAgIC8vIHJlcGxhY2VyIGFuZCBzcGFjZSBhcmUgb3B0aW9uYWxcbiAgICAgICAgICAgIGlmICghSlNPTiB8fCAhSlNPTi5zdHJpbmdpZnkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgSlNPTi5zdHJpbmdpZnkoKS4gU29tZSBicm93c2VycyAoZS5nLiwgSUUgPCA4KSBkb24ndCBzdXBwb3J0IGl0IG5hdGl2ZWx5LCBidXQgeW91IGNhbiBvdmVyY29tZSB0aGlzIGJ5IGFkZGluZyBhIHNjcmlwdCByZWZlcmVuY2UgdG8ganNvbjIuanMsIGRvd25sb2FkYWJsZSBmcm9tIGh0dHA6Ly93d3cuanNvbi5vcmcvanNvbjIuanNcIik7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoa28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShkYXRhKSwgcmVwbGFjZXIsIHNwYWNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwb3N0SnNvbjogZnVuY3Rpb24gKHVybE9yRm9ybSwgZGF0YSwgb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICB2YXIgcGFyYW1zID0gb3B0aW9uc1sncGFyYW1zJ10gfHwge307XG4gICAgICAgICAgICB2YXIgaW5jbHVkZUZpZWxkcyA9IG9wdGlvbnNbJ2luY2x1ZGVGaWVsZHMnXSB8fCB0aGlzLmZpZWxkc0luY2x1ZGVkV2l0aEpzb25Qb3N0O1xuICAgICAgICAgICAgdmFyIHVybCA9IHVybE9yRm9ybTtcblxuICAgICAgICAgICAgLy8gSWYgd2Ugd2VyZSBnaXZlbiBhIGZvcm0sIHVzZSBpdHMgJ2FjdGlvbicgVVJMIGFuZCBwaWNrIG91dCBhbnkgcmVxdWVzdGVkIGZpZWxkIHZhbHVlc1xuICAgICAgICAgICAgaWYoKHR5cGVvZiB1cmxPckZvcm0gPT0gJ29iamVjdCcpICYmIChrby51dGlscy50YWdOYW1lTG93ZXIodXJsT3JGb3JtKSA9PT0gXCJmb3JtXCIpKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsRm9ybSA9IHVybE9yRm9ybTtcbiAgICAgICAgICAgICAgICB1cmwgPSBvcmlnaW5hbEZvcm0uYWN0aW9uO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmNsdWRlRmllbGRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZHMgPSBrby51dGlscy5nZXRGb3JtRmllbGRzKG9yaWdpbmFsRm9ybSwgaW5jbHVkZUZpZWxkc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSBmaWVsZHMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbZmllbGRzW2pdLm5hbWVdID0gZmllbGRzW2pdLnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUoZGF0YSk7XG4gICAgICAgICAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmb3JtXCIpO1xuICAgICAgICAgICAgZm9ybS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgICAgICBmb3JtLmFjdGlvbiA9IHVybDtcbiAgICAgICAgICAgIGZvcm0ubWV0aG9kID0gXCJwb3N0XCI7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIFNpbmNlICdkYXRhJyB0aGlzIGlzIGEgbW9kZWwgb2JqZWN0LCB3ZSBpbmNsdWRlIGFsbCBwcm9wZXJ0aWVzIGluY2x1ZGluZyB0aG9zZSBpbmhlcml0ZWQgZnJvbSBpdHMgcHJvdG90eXBlXG4gICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgICAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICAgICAgICAgICAgICAgIGlucHV0Lm5hbWUgPSBrZXk7XG4gICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBrby51dGlscy5zdHJpbmdpZnlKc29uKGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUoZGF0YVtrZXldKSk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChpbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYmplY3RGb3JFYWNoKHBhcmFtcywgZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICBpbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgICAgICBpbnB1dC5uYW1lID0ga2V5O1xuICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChpbnB1dCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZm9ybSk7XG4gICAgICAgICAgICBvcHRpb25zWydzdWJtaXR0ZXInXSA/IG9wdGlvbnNbJ3N1Ym1pdHRlciddKGZvcm0pIDogZm9ybS5zdWJtaXQoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBmb3JtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZm9ybSk7IH0sIDApO1xuICAgICAgICB9XG4gICAgfVxufSgpKTtcblxua28uZXhwb3J0U3ltYm9sKCd1dGlscycsIGtvLnV0aWxzKTtcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMuYXJyYXlGb3JFYWNoJywga28udXRpbHMuYXJyYXlGb3JFYWNoKTtcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMuYXJyYXlGaXJzdCcsIGtvLnV0aWxzLmFycmF5Rmlyc3QpO1xua28uZXhwb3J0U3ltYm9sKCd1dGlscy5hcnJheUZpbHRlcicsIGtvLnV0aWxzLmFycmF5RmlsdGVyKTtcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMuYXJyYXlHZXREaXN0aW5jdFZhbHVlcycsIGtvLnV0aWxzLmFycmF5R2V0RGlzdGluY3RWYWx1ZXMpO1xua28uZXhwb3J0U3ltYm9sKCd1dGlscy5hcnJheUluZGV4T2YnLCBrby51dGlscy5hcnJheUluZGV4T2YpO1xua28uZXhwb3J0U3ltYm9sKCd1dGlscy5hcnJheU1hcCcsIGtvLnV0aWxzLmFycmF5TWFwKTtcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMuYXJyYXlQdXNoQWxsJywga28udXRpbHMuYXJyYXlQdXNoQWxsKTtcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMuYXJyYXlSZW1vdmVJdGVtJywga28udXRpbHMuYXJyYXlSZW1vdmVJdGVtKTtcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMuZXh0ZW5kJywga28udXRpbHMuZXh0ZW5kKTtcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMuZmllbGRzSW5jbHVkZWRXaXRoSnNvblBvc3QnLCBrby51dGlscy5maWVsZHNJbmNsdWRlZFdpdGhKc29uUG9zdCk7XG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLmdldEZvcm1GaWVsZHMnLCBrby51dGlscy5nZXRGb3JtRmllbGRzKTtcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMucGVla09ic2VydmFibGUnLCBrby51dGlscy5wZWVrT2JzZXJ2YWJsZSk7XG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLnBvc3RKc29uJywga28udXRpbHMucG9zdEpzb24pO1xua28uZXhwb3J0U3ltYm9sKCd1dGlscy5wYXJzZUpzb24nLCBrby51dGlscy5wYXJzZUpzb24pO1xua28uZXhwb3J0U3ltYm9sKCd1dGlscy5yZWdpc3RlckV2ZW50SGFuZGxlcicsIGtvLnV0aWxzLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKTtcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMuc3RyaW5naWZ5SnNvbicsIGtvLnV0aWxzLnN0cmluZ2lmeUpzb24pO1xua28uZXhwb3J0U3ltYm9sKCd1dGlscy5yYW5nZScsIGtvLnV0aWxzLnJhbmdlKTtcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMudG9nZ2xlRG9tTm9kZUNzc0NsYXNzJywga28udXRpbHMudG9nZ2xlRG9tTm9kZUNzc0NsYXNzKTtcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMudHJpZ2dlckV2ZW50Jywga28udXRpbHMudHJpZ2dlckV2ZW50KTtcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMudW53cmFwT2JzZXJ2YWJsZScsIGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUpO1xua28uZXhwb3J0U3ltYm9sKCd1dGlscy5vYmplY3RGb3JFYWNoJywga28udXRpbHMub2JqZWN0Rm9yRWFjaCk7XG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLmFkZE9yUmVtb3ZlSXRlbScsIGtvLnV0aWxzLmFkZE9yUmVtb3ZlSXRlbSk7XG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLnNldFRleHRDb250ZW50Jywga28udXRpbHMuc2V0VGV4dENvbnRlbnQpO1xua28uZXhwb3J0U3ltYm9sKCd1bndyYXAnLCBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKTsgLy8gQ29udmVuaWVudCBzaG9ydGhhbmQsIGJlY2F1c2UgdGhpcyBpcyB1c2VkIHNvIGNvbW1vbmx5XG5cbmlmICghRnVuY3Rpb24ucHJvdG90eXBlWydiaW5kJ10pIHtcbiAgICAvLyBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBpcyBhIHN0YW5kYXJkIHBhcnQgb2YgRUNNQVNjcmlwdCA1dGggRWRpdGlvbiAoRGVjZW1iZXIgMjAwOSwgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL3B1YmxpY2F0aW9ucy9maWxlcy9FQ01BLVNUL0VDTUEtMjYyLnBkZilcbiAgICAvLyBJbiBjYXNlIHRoZSBicm93c2VyIGRvZXNuJ3QgaW1wbGVtZW50IGl0IG5hdGl2ZWx5LCBwcm92aWRlIGEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgb25lIGluIHByb3RvdHlwZS5qc1xuICAgIEZ1bmN0aW9uLnByb3RvdHlwZVsnYmluZCddID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgICB2YXIgb3JpZ2luYWxGdW5jdGlvbiA9IHRoaXM7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbEZ1bmN0aW9uLmFwcGx5KG9iamVjdCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcGFydGlhbEFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHBhcnRpYWxBcmdzLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgIGFyZ3MucHVzaC5hcHBseShhcmdzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbEZ1bmN0aW9uLmFwcGx5KG9iamVjdCwgYXJncyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfTtcbn1cblxua28udXRpbHMuZG9tRGF0YSA9IG5ldyAoZnVuY3Rpb24gKCkge1xuICAgIHZhciB1bmlxdWVJZCA9IDA7XG4gICAgdmFyIGRhdGFTdG9yZUtleUV4cGFuZG9Qcm9wZXJ0eU5hbWUgPSBcIl9fa29fX1wiICsgKG5ldyBEYXRlKS5nZXRUaW1lKCk7XG4gICAgdmFyIGRhdGFTdG9yZSA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZ2V0QWxsKG5vZGUsIGNyZWF0ZUlmTm90Rm91bmQpIHtcbiAgICAgICAgdmFyIGRhdGFTdG9yZUtleSA9IG5vZGVbZGF0YVN0b3JlS2V5RXhwYW5kb1Byb3BlcnR5TmFtZV07XG4gICAgICAgIHZhciBoYXNFeGlzdGluZ0RhdGFTdG9yZSA9IGRhdGFTdG9yZUtleSAmJiAoZGF0YVN0b3JlS2V5ICE9PSBcIm51bGxcIikgJiYgZGF0YVN0b3JlW2RhdGFTdG9yZUtleV07XG4gICAgICAgIGlmICghaGFzRXhpc3RpbmdEYXRhU3RvcmUpIHtcbiAgICAgICAgICAgIGlmICghY3JlYXRlSWZOb3RGb3VuZClcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZGF0YVN0b3JlS2V5ID0gbm9kZVtkYXRhU3RvcmVLZXlFeHBhbmRvUHJvcGVydHlOYW1lXSA9IFwia29cIiArIHVuaXF1ZUlkKys7XG4gICAgICAgICAgICBkYXRhU3RvcmVbZGF0YVN0b3JlS2V5XSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhU3RvcmVbZGF0YVN0b3JlS2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIChub2RlLCBrZXkpIHtcbiAgICAgICAgICAgIHZhciBhbGxEYXRhRm9yTm9kZSA9IGdldEFsbChub2RlLCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gYWxsRGF0YUZvck5vZGUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGFsbERhdGFGb3JOb2RlW2tleV07XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5vZGUsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGFjdHVhbGx5IGNyZWF0ZSBhIG5ldyBkb21EYXRhIGtleSBpZiB3ZSBhcmUgYWN0dWFsbHkgZGVsZXRpbmcgYSB2YWx1ZVxuICAgICAgICAgICAgICAgIGlmIChnZXRBbGwobm9kZSwgZmFsc2UpID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhbGxEYXRhRm9yTm9kZSA9IGdldEFsbChub2RlLCB0cnVlKTtcbiAgICAgICAgICAgIGFsbERhdGFGb3JOb2RlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXI6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICB2YXIgZGF0YVN0b3JlS2V5ID0gbm9kZVtkYXRhU3RvcmVLZXlFeHBhbmRvUHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgIGlmIChkYXRhU3RvcmVLZXkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YVN0b3JlW2RhdGFTdG9yZUtleV07XG4gICAgICAgICAgICAgICAgbm9kZVtkYXRhU3RvcmVLZXlFeHBhbmRvUHJvcGVydHlOYW1lXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEV4cG9zaW5nIFwiZGlkIGNsZWFuXCIgZmxhZyBwdXJlbHkgc28gc3BlY3MgY2FuIGluZmVyIHdoZXRoZXIgdGhpbmdzIGhhdmUgYmVlbiBjbGVhbmVkIHVwIGFzIGludGVuZGVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbmV4dEtleTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICh1bmlxdWVJZCsrKSArIGRhdGFTdG9yZUtleUV4cGFuZG9Qcm9wZXJ0eU5hbWU7XG4gICAgICAgIH1cbiAgICB9O1xufSkoKTtcblxua28uZXhwb3J0U3ltYm9sKCd1dGlscy5kb21EYXRhJywga28udXRpbHMuZG9tRGF0YSk7XG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLmRvbURhdGEuY2xlYXInLCBrby51dGlscy5kb21EYXRhLmNsZWFyKTsgLy8gRXhwb3J0aW5nIG9ubHkgc28gc3BlY3MgY2FuIGNsZWFyIHVwIGFmdGVyIHRoZW1zZWx2ZXMgZnVsbHlcblxua28udXRpbHMuZG9tTm9kZURpc3Bvc2FsID0gbmV3IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRvbURhdGFLZXkgPSBrby51dGlscy5kb21EYXRhLm5leHRLZXkoKTtcbiAgICB2YXIgY2xlYW5hYmxlTm9kZVR5cGVzID0geyAxOiB0cnVlLCA4OiB0cnVlLCA5OiB0cnVlIH07ICAgICAgIC8vIEVsZW1lbnQsIENvbW1lbnQsIERvY3VtZW50XG4gICAgdmFyIGNsZWFuYWJsZU5vZGVUeXBlc1dpdGhEZXNjZW5kYW50cyA9IHsgMTogdHJ1ZSwgOTogdHJ1ZSB9OyAvLyBFbGVtZW50LCBEb2N1bWVudFxuXG4gICAgZnVuY3Rpb24gZ2V0RGlzcG9zZUNhbGxiYWNrc0NvbGxlY3Rpb24obm9kZSwgY3JlYXRlSWZOb3RGb3VuZCkge1xuICAgICAgICB2YXIgYWxsRGlzcG9zZUNhbGxiYWNrcyA9IGtvLnV0aWxzLmRvbURhdGEuZ2V0KG5vZGUsIGRvbURhdGFLZXkpO1xuICAgICAgICBpZiAoKGFsbERpc3Bvc2VDYWxsYmFja3MgPT09IHVuZGVmaW5lZCkgJiYgY3JlYXRlSWZOb3RGb3VuZCkge1xuICAgICAgICAgICAgYWxsRGlzcG9zZUNhbGxiYWNrcyA9IFtdO1xuICAgICAgICAgICAga28udXRpbHMuZG9tRGF0YS5zZXQobm9kZSwgZG9tRGF0YUtleSwgYWxsRGlzcG9zZUNhbGxiYWNrcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFsbERpc3Bvc2VDYWxsYmFja3M7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc3Ryb3lDYWxsYmFja3NDb2xsZWN0aW9uKG5vZGUpIHtcbiAgICAgICAga28udXRpbHMuZG9tRGF0YS5zZXQobm9kZSwgZG9tRGF0YUtleSwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhblNpbmdsZU5vZGUobm9kZSkge1xuICAgICAgICAvLyBSdW4gYWxsIHRoZSBkaXNwb3NlIGNhbGxiYWNrc1xuICAgICAgICB2YXIgY2FsbGJhY2tzID0gZ2V0RGlzcG9zZUNhbGxiYWNrc0NvbGxlY3Rpb24obm9kZSwgZmFsc2UpO1xuICAgICAgICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICBjYWxsYmFja3MgPSBjYWxsYmFja3Muc2xpY2UoMCk7IC8vIENsb25lLCBhcyB0aGUgYXJyYXkgbWF5IGJlIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24gKHR5cGljYWxseSwgY2FsbGJhY2tzIHdpbGwgcmVtb3ZlIHRoZW1zZWx2ZXMpXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICBjYWxsYmFja3NbaV0obm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFcmFzZSB0aGUgRE9NIGRhdGFcbiAgICAgICAga28udXRpbHMuZG9tRGF0YS5jbGVhcihub2RlKTtcblxuICAgICAgICAvLyBQZXJmb3JtIGNsZWFudXAgbmVlZGVkIGJ5IGV4dGVybmFsIGxpYnJhcmllcyAoY3VycmVudGx5IG9ubHkgalF1ZXJ5LCBidXQgY2FuIGJlIGV4dGVuZGVkKVxuICAgICAgICBrby51dGlscy5kb21Ob2RlRGlzcG9zYWxbXCJjbGVhbkV4dGVybmFsRGF0YVwiXShub2RlKTtcblxuICAgICAgICAvLyBDbGVhciBhbnkgaW1tZWRpYXRlLWNoaWxkIGNvbW1lbnQgbm9kZXMsIGFzIHRoZXNlIHdvdWxkbid0IGhhdmUgYmVlbiBmb3VuZCBieVxuICAgICAgICAvLyBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSBpbiBjbGVhbk5vZGUoKSAoY29tbWVudCBub2RlcyBhcmVuJ3QgZWxlbWVudHMpXG4gICAgICAgIGlmIChjbGVhbmFibGVOb2RlVHlwZXNXaXRoRGVzY2VuZGFudHNbbm9kZS5ub2RlVHlwZV0pXG4gICAgICAgICAgICBjbGVhbkltbWVkaWF0ZUNvbW1lbnRUeXBlQ2hpbGRyZW4obm9kZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYW5JbW1lZGlhdGVDb21tZW50VHlwZUNoaWxkcmVuKG5vZGVXaXRoQ2hpbGRyZW4pIHtcbiAgICAgICAgdmFyIGNoaWxkLCBuZXh0Q2hpbGQgPSBub2RlV2l0aENoaWxkcmVuLmZpcnN0Q2hpbGQ7XG4gICAgICAgIHdoaWxlIChjaGlsZCA9IG5leHRDaGlsZCkge1xuICAgICAgICAgICAgbmV4dENoaWxkID0gY2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDgpXG4gICAgICAgICAgICAgICAgY2xlYW5TaW5nbGVOb2RlKGNoaWxkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGFkZERpc3Bvc2VDYWxsYmFjayA6IGZ1bmN0aW9uKG5vZGUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICBnZXREaXNwb3NlQ2FsbGJhY2tzQ29sbGVjdGlvbihub2RlLCB0cnVlKS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW1vdmVEaXNwb3NlQ2FsbGJhY2sgOiBmdW5jdGlvbihub2RlLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrc0NvbGxlY3Rpb24gPSBnZXREaXNwb3NlQ2FsbGJhY2tzQ29sbGVjdGlvbihub2RlLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2tzQ29sbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIGtvLnV0aWxzLmFycmF5UmVtb3ZlSXRlbShjYWxsYmFja3NDb2xsZWN0aW9uLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrc0NvbGxlY3Rpb24ubGVuZ3RoID09IDApXG4gICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lDYWxsYmFja3NDb2xsZWN0aW9uKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGNsZWFuTm9kZSA6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgIC8vIEZpcnN0IGNsZWFuIHRoaXMgbm9kZSwgd2hlcmUgYXBwbGljYWJsZVxuICAgICAgICAgICAgaWYgKGNsZWFuYWJsZU5vZGVUeXBlc1tub2RlLm5vZGVUeXBlXSkge1xuICAgICAgICAgICAgICAgIGNsZWFuU2luZ2xlTm9kZShub2RlKTtcblxuICAgICAgICAgICAgICAgIC8vIC4uLiB0aGVuIGl0cyBkZXNjZW5kYW50cywgd2hlcmUgYXBwbGljYWJsZVxuICAgICAgICAgICAgICAgIGlmIChjbGVhbmFibGVOb2RlVHlwZXNXaXRoRGVzY2VuZGFudHNbbm9kZS5ub2RlVHlwZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xvbmUgdGhlIGRlc2NlbmRhbnRzIGxpc3QgaW4gY2FzZSBpdCBjaGFuZ2VzIGR1cmluZyBpdGVyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NlbmRhbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGtvLnV0aWxzLmFycmF5UHVzaEFsbChkZXNjZW5kYW50cywgbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGRlc2NlbmRhbnRzLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuU2luZ2xlTm9kZShkZXNjZW5kYW50c1tpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlTm9kZSA6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgIGtvLmNsZWFuTm9kZShub2RlKTtcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIFwiY2xlYW5FeHRlcm5hbERhdGFcIiA6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICAvLyBTcGVjaWFsIHN1cHBvcnQgZm9yIGpRdWVyeSBoZXJlIGJlY2F1c2UgaXQncyBzbyBjb21tb25seSB1c2VkLlxuICAgICAgICAgICAgLy8gTWFueSBqUXVlcnkgcGx1Z2lucyAoaW5jbHVkaW5nIGpxdWVyeS50bXBsKSBzdG9yZSBkYXRhIHVzaW5nIGpRdWVyeSdzIGVxdWl2YWxlbnQgb2YgZG9tRGF0YVxuICAgICAgICAgICAgLy8gc28gbm90aWZ5IGl0IHRvIHRlYXIgZG93biBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZSAmIGRlc2NlbmRhbnRzIGhlcmUuXG4gICAgICAgICAgICBpZiAoalF1ZXJ5SW5zdGFuY2UgJiYgKHR5cGVvZiBqUXVlcnlJbnN0YW5jZVsnY2xlYW5EYXRhJ10gPT0gXCJmdW5jdGlvblwiKSlcbiAgICAgICAgICAgICAgICBqUXVlcnlJbnN0YW5jZVsnY2xlYW5EYXRhJ10oW25vZGVdKTtcbiAgICAgICAgfVxuICAgIH07XG59KSgpO1xua28uY2xlYW5Ob2RlID0ga28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmNsZWFuTm9kZTsgLy8gU2hvcnRoYW5kIG5hbWUgZm9yIGNvbnZlbmllbmNlXG5rby5yZW1vdmVOb2RlID0ga28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLnJlbW92ZU5vZGU7IC8vIFNob3J0aGFuZCBuYW1lIGZvciBjb252ZW5pZW5jZVxua28uZXhwb3J0U3ltYm9sKCdjbGVhbk5vZGUnLCBrby5jbGVhbk5vZGUpO1xua28uZXhwb3J0U3ltYm9sKCdyZW1vdmVOb2RlJywga28ucmVtb3ZlTm9kZSk7XG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLmRvbU5vZGVEaXNwb3NhbCcsIGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbCk7XG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2snLCBrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKTtcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMuZG9tTm9kZURpc3Bvc2FsLnJlbW92ZURpc3Bvc2VDYWxsYmFjaycsIGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5yZW1vdmVEaXNwb3NlQ2FsbGJhY2spO1xuKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbm9uZSA9IFswLCBcIlwiLCBcIlwiXSxcbiAgICAgICAgdGFibGUgPSBbMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIl0sXG4gICAgICAgIHRib2R5ID0gWzIsIFwiPHRhYmxlPjx0Ym9keT5cIiwgXCI8L3Rib2R5PjwvdGFibGU+XCJdLFxuICAgICAgICB0ciA9IFszLCBcIjx0YWJsZT48dGJvZHk+PHRyPlwiLCBcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiXSxcbiAgICAgICAgc2VsZWN0ID0gWzEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiXSxcbiAgICAgICAgbG9va3VwID0ge1xuICAgICAgICAgICAgJ3RoZWFkJzogdGFibGUsXG4gICAgICAgICAgICAndGJvZHknOiB0YWJsZSxcbiAgICAgICAgICAgICd0Zm9vdCc6IHRhYmxlLFxuICAgICAgICAgICAgJ3RyJzogdGJvZHksXG4gICAgICAgICAgICAndGQnOiB0cixcbiAgICAgICAgICAgICd0aCc6IHRyLFxuICAgICAgICAgICAgJ29wdGlvbic6IHNlbGVjdCxcbiAgICAgICAgICAgICdvcHRncm91cCc6IHNlbGVjdFxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciBvbGQgSUUgaWYgeW91J3JlICpub3QqIHVzaW5nIGVpdGhlciBqUXVlcnkgb3IgaW5uZXJTaGl2LiBEb2Vzbid0IGFmZmVjdCBvdGhlciBjYXNlcy5cbiAgICAgICAgbWF5UmVxdWlyZUNyZWF0ZUVsZW1lbnRIYWNrID0ga28udXRpbHMuaWVWZXJzaW9uIDw9IDg7XG5cbiAgICBmdW5jdGlvbiBnZXRXcmFwKHRhZ3MpIHtcbiAgICAgICAgdmFyIG0gPSB0YWdzLm1hdGNoKC9ePChbYS16XSspWyA+XS8pO1xuICAgICAgICByZXR1cm4gKG0gJiYgbG9va3VwW21bMV1dKSB8fCBub25lO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNpbXBsZUh0bWxQYXJzZShodG1sLCBkb2N1bWVudENvbnRleHQpIHtcbiAgICAgICAgZG9jdW1lbnRDb250ZXh0IHx8IChkb2N1bWVudENvbnRleHQgPSBkb2N1bWVudCk7XG4gICAgICAgIHZhciB3aW5kb3dDb250ZXh0ID0gZG9jdW1lbnRDb250ZXh0WydwYXJlbnRXaW5kb3cnXSB8fCBkb2N1bWVudENvbnRleHRbJ2RlZmF1bHRWaWV3J10gfHwgd2luZG93O1xuXG4gICAgICAgIC8vIEJhc2VkIG9uIGpRdWVyeSdzIFwiY2xlYW5cIiBmdW5jdGlvbiwgYnV0IG9ubHkgYWNjb3VudGluZyBmb3IgdGFibGUtcmVsYXRlZCBlbGVtZW50cy5cbiAgICAgICAgLy8gSWYgeW91IGhhdmUgcmVmZXJlbmNlZCBqUXVlcnksIHRoaXMgd29uJ3QgYmUgdXNlZCBhbnl3YXkgLSBLTyB3aWxsIHVzZSBqUXVlcnkncyBcImNsZWFuXCIgZnVuY3Rpb24gZGlyZWN0bHlcblxuICAgICAgICAvLyBOb3RlIHRoYXQgdGhlcmUncyBzdGlsbCBhbiBpc3N1ZSBpbiBJRSA8IDkgd2hlcmVieSBpdCB3aWxsIGRpc2NhcmQgY29tbWVudCBub2RlcyB0aGF0IGFyZSB0aGUgZmlyc3QgY2hpbGQgb2ZcbiAgICAgICAgLy8gYSBkZXNjZW5kYW50IG5vZGUuIEZvciBleGFtcGxlOiBcIjxkaXY+PCEtLSBteWNvbW1lbnQgLS0+YWJjPC9kaXY+XCIgd2lsbCBnZXQgcGFyc2VkIGFzIFwiPGRpdj5hYmM8L2Rpdj5cIlxuICAgICAgICAvLyBUaGlzIHdvbid0IGFmZmVjdCBhbnlvbmUgd2hvIGhhcyByZWZlcmVuY2VkIGpRdWVyeSwgYW5kIHRoZXJlJ3MgYWx3YXlzIHRoZSB3b3JrYXJvdW5kIG9mIGluc2VydGluZyBhIGR1bW15IG5vZGVcbiAgICAgICAgLy8gKHBvc3NpYmx5IGEgdGV4dCBub2RlKSBpbiBmcm9udCBvZiB0aGUgY29tbWVudC4gU28sIEtPIGRvZXMgbm90IGF0dGVtcHQgdG8gd29ya2Fyb3VuZCB0aGlzIElFIGlzc3VlIGF1dG9tYXRpY2FsbHkgYXQgcHJlc2VudC5cblxuICAgICAgICAvLyBUcmltIHdoaXRlc3BhY2UsIG90aGVyd2lzZSBpbmRleE9mIHdvbid0IHdvcmsgYXMgZXhwZWN0ZWRcbiAgICAgICAgdmFyIHRhZ3MgPSBrby51dGlscy5zdHJpbmdUcmltKGh0bWwpLnRvTG93ZXJDYXNlKCksIGRpdiA9IGRvY3VtZW50Q29udGV4dC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxuICAgICAgICAgICAgd3JhcCA9IGdldFdyYXAodGFncyksXG4gICAgICAgICAgICBkZXB0aCA9IHdyYXBbMF07XG5cbiAgICAgICAgLy8gR28gdG8gaHRtbCBhbmQgYmFjaywgdGhlbiBwZWVsIG9mZiBleHRyYSB3cmFwcGVyc1xuICAgICAgICAvLyBOb3RlIHRoYXQgd2UgYWx3YXlzIHByZWZpeCB3aXRoIHNvbWUgZHVtbXkgdGV4dCwgYmVjYXVzZSBvdGhlcndpc2UsIElFPDkgd2lsbCBzdHJpcCBvdXQgbGVhZGluZyBjb21tZW50IG5vZGVzIGluIGRlc2NlbmRhbnRzLiBUb3RhbCBtYWRuZXNzLlxuICAgICAgICB2YXIgbWFya3VwID0gXCJpZ25vcmVkPGRpdj5cIiArIHdyYXBbMV0gKyBodG1sICsgd3JhcFsyXSArIFwiPC9kaXY+XCI7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93Q29udGV4dFsnaW5uZXJTaGl2J10gPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaW5uZXJTaGl2IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGh0bWw1c2hpdi4gV2Ugc2hvdWxkIGNvbnNpZGVyIGFkZGluZ1xuICAgICAgICAgICAgLy8gc3VwcG9ydCBmb3IgaHRtbDVzaGl2IChleGNlcHQgaWYgbm8gZXhwbGljaXQgc3VwcG9ydCBpcyBuZWVkZWQsIGUuZy4sIGlmIGh0bWw1c2hpdlxuICAgICAgICAgICAgLy8gc29tZWhvdyBzaGltcyB0aGUgbmF0aXZlIEFQSXMgc28gaXQganVzdCB3b3JrcyBhbnl3YXkpXG4gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQod2luZG93Q29udGV4dFsnaW5uZXJTaGl2J10obWFya3VwKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobWF5UmVxdWlyZUNyZWF0ZUVsZW1lbnRIYWNrKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ215LWVsZW1lbnQnKSB0cmljayB0byBlbmFibGUgY3VzdG9tIGVsZW1lbnRzIGluIElFNi04XG4gICAgICAgICAgICAgICAgLy8gb25seSB3b3JrcyBpZiB3ZSBhc3NpZ24gaW5uZXJIVE1MIG9uIGFuIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoYXQgZG9jdW1lbnQuXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRDb250ZXh0LmFwcGVuZENoaWxkKGRpdik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSBtYXJrdXA7XG5cbiAgICAgICAgICAgIGlmIChtYXlSZXF1aXJlQ3JlYXRlRWxlbWVudEhhY2spIHtcbiAgICAgICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkaXYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTW92ZSB0byB0aGUgcmlnaHQgZGVwdGhcbiAgICAgICAgd2hpbGUgKGRlcHRoLS0pXG4gICAgICAgICAgICBkaXYgPSBkaXYubGFzdENoaWxkO1xuXG4gICAgICAgIHJldHVybiBrby51dGlscy5tYWtlQXJyYXkoZGl2Lmxhc3RDaGlsZC5jaGlsZE5vZGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBqUXVlcnlIdG1sUGFyc2UoaHRtbCwgZG9jdW1lbnRDb250ZXh0KSB7XG4gICAgICAgIC8vIGpRdWVyeSdzIFwicGFyc2VIVE1MXCIgZnVuY3Rpb24gd2FzIGludHJvZHVjZWQgaW4galF1ZXJ5IDEuOC4wIGFuZCBpcyBhIGRvY3VtZW50ZWQgcHVibGljIEFQSS5cbiAgICAgICAgaWYgKGpRdWVyeUluc3RhbmNlWydwYXJzZUhUTUwnXSkge1xuICAgICAgICAgICAgcmV0dXJuIGpRdWVyeUluc3RhbmNlWydwYXJzZUhUTUwnXShodG1sLCBkb2N1bWVudENvbnRleHQpIHx8IFtdOyAvLyBFbnN1cmUgd2UgYWx3YXlzIHJldHVybiBhbiBhcnJheSBhbmQgbmV2ZXIgbnVsbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRm9yIGpRdWVyeSA8IDEuOC4wLCB3ZSBmYWxsIGJhY2sgb24gdGhlIHVuZG9jdW1lbnRlZCBpbnRlcm5hbCBcImNsZWFuXCIgZnVuY3Rpb24uXG4gICAgICAgICAgICB2YXIgZWxlbXMgPSBqUXVlcnlJbnN0YW5jZVsnY2xlYW4nXShbaHRtbF0sIGRvY3VtZW50Q29udGV4dCk7XG5cbiAgICAgICAgICAgIC8vIEFzIG9mIGpRdWVyeSAxLjcuMSwgalF1ZXJ5IHBhcnNlcyB0aGUgSFRNTCBieSBhcHBlbmRpbmcgaXQgdG8gc29tZSBkdW1teSBwYXJlbnQgbm9kZXMgaGVsZCBpbiBhbiBpbi1tZW1vcnkgZG9jdW1lbnQgZnJhZ21lbnQuXG4gICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5LCBpdCBuZXZlciBjbGVhcnMgdGhlIGR1bW15IHBhcmVudCBub2RlcyBmcm9tIHRoZSBkb2N1bWVudCBmcmFnbWVudCwgc28gaXQgbGVha3MgbWVtb3J5IG92ZXIgdGltZS5cbiAgICAgICAgICAgIC8vIEZpeCB0aGlzIGJ5IGZpbmRpbmcgdGhlIHRvcC1tb3N0IGR1bW15IHBhcmVudCBlbGVtZW50LCBhbmQgZGV0YWNoaW5nIGl0IGZyb20gaXRzIG93bmVyIGZyYWdtZW50LlxuICAgICAgICAgICAgaWYgKGVsZW1zICYmIGVsZW1zWzBdKSB7XG4gICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgdG9wLW1vc3QgcGFyZW50IGVsZW1lbnQgdGhhdCdzIGEgZGlyZWN0IGNoaWxkIG9mIGEgZG9jdW1lbnQgZnJhZ21lbnRcbiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGVsZW1zWzBdO1xuICAgICAgICAgICAgICAgIHdoaWxlIChlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5wYXJlbnROb2RlLm5vZGVUeXBlICE9PSAxMSAvKiBpLmUuLCBEb2N1bWVudEZyYWdtZW50ICovKVxuICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgIC8vIC4uLiB0aGVuIGRldGFjaCBpdFxuICAgICAgICAgICAgICAgIGlmIChlbGVtLnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAga28udXRpbHMucGFyc2VIdG1sRnJhZ21lbnQgPSBmdW5jdGlvbihodG1sLCBkb2N1bWVudENvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGpRdWVyeUluc3RhbmNlID9cbiAgICAgICAgICAgIGpRdWVyeUh0bWxQYXJzZShodG1sLCBkb2N1bWVudENvbnRleHQpIDogICAvLyBBcyBiZWxvdywgYmVuZWZpdCBmcm9tIGpRdWVyeSdzIG9wdGltaXNhdGlvbnMgd2hlcmUgcG9zc2libGVcbiAgICAgICAgICAgIHNpbXBsZUh0bWxQYXJzZShodG1sLCBkb2N1bWVudENvbnRleHQpOyAgLy8gLi4uIG90aGVyd2lzZSwgdGhpcyBzaW1wbGUgbG9naWMgd2lsbCBkbyBpbiBtb3N0IGNvbW1vbiBjYXNlcy5cbiAgICB9O1xuXG4gICAga28udXRpbHMuc2V0SHRtbCA9IGZ1bmN0aW9uKG5vZGUsIGh0bWwpIHtcbiAgICAgICAga28udXRpbHMuZW1wdHlEb21Ob2RlKG5vZGUpO1xuXG4gICAgICAgIC8vIFRoZXJlJ3Mgbm8gbGVnaXRpbWF0ZSByZWFzb24gdG8gZGlzcGxheSBhIHN0cmluZ2lmaWVkIG9ic2VydmFibGUgd2l0aG91dCB1bndyYXBwaW5nIGl0LCBzbyB3ZSdsbCB1bndyYXAgaXRcbiAgICAgICAgaHRtbCA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUoaHRtbCk7XG5cbiAgICAgICAgaWYgKChodG1sICE9PSBudWxsKSAmJiAoaHRtbCAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBodG1sICE9ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgIGh0bWwgPSBodG1sLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIC8vIGpRdWVyeSBjb250YWlucyBhIGxvdCBvZiBzb3BoaXN0aWNhdGVkIGNvZGUgdG8gcGFyc2UgYXJiaXRyYXJ5IEhUTUwgZnJhZ21lbnRzLFxuICAgICAgICAgICAgLy8gZm9yIGV4YW1wbGUgPHRyPiBlbGVtZW50cyB3aGljaCBhcmUgbm90IG5vcm1hbGx5IGFsbG93ZWQgdG8gZXhpc3Qgb24gdGhlaXIgb3duLlxuICAgICAgICAgICAgLy8gSWYgeW91J3ZlIHJlZmVyZW5jZWQgalF1ZXJ5IHdlJ2xsIHVzZSB0aGF0IHJhdGhlciB0aGFuIGR1cGxpY2F0aW5nIGl0cyBjb2RlLlxuICAgICAgICAgICAgaWYgKGpRdWVyeUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgalF1ZXJ5SW5zdGFuY2Uobm9kZSlbJ2h0bWwnXShodG1sKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gLi4uIG90aGVyd2lzZSwgdXNlIEtPJ3Mgb3duIHBhcnNpbmcgbG9naWMuXG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlZE5vZGVzID0ga28udXRpbHMucGFyc2VIdG1sRnJhZ21lbnQoaHRtbCwgbm9kZS5vd25lckRvY3VtZW50KTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnNlZE5vZGVzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKHBhcnNlZE5vZGVzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59KSgpO1xuXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLnBhcnNlSHRtbEZyYWdtZW50Jywga28udXRpbHMucGFyc2VIdG1sRnJhZ21lbnQpO1xua28uZXhwb3J0U3ltYm9sKCd1dGlscy5zZXRIdG1sJywga28udXRpbHMuc2V0SHRtbCk7XG5cbmtvLm1lbW9pemF0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWVtb3MgPSB7fTtcblxuICAgIGZ1bmN0aW9uIHJhbmRvbU1heDhIZXhDaGFycygpIHtcbiAgICAgICAgcmV0dXJuICgoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDAwMDAwKSB8IDApLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tSWQoKSB7XG4gICAgICAgIHJldHVybiByYW5kb21NYXg4SGV4Q2hhcnMoKSArIHJhbmRvbU1heDhIZXhDaGFycygpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kTWVtb05vZGVzKHJvb3ROb2RlLCBhcHBlbmRUb0FycmF5KSB7XG4gICAgICAgIGlmICghcm9vdE5vZGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChyb290Tm9kZS5ub2RlVHlwZSA9PSA4KSB7XG4gICAgICAgICAgICB2YXIgbWVtb0lkID0ga28ubWVtb2l6YXRpb24ucGFyc2VNZW1vVGV4dChyb290Tm9kZS5ub2RlVmFsdWUpO1xuICAgICAgICAgICAgaWYgKG1lbW9JZCAhPSBudWxsKVxuICAgICAgICAgICAgICAgIGFwcGVuZFRvQXJyYXkucHVzaCh7IGRvbU5vZGU6IHJvb3ROb2RlLCBtZW1vSWQ6IG1lbW9JZCB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChyb290Tm9kZS5ub2RlVHlwZSA9PSAxKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgY2hpbGROb2RlcyA9IHJvb3ROb2RlLmNoaWxkTm9kZXMsIGogPSBjaGlsZE5vZGVzLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAgICAgICAgICBmaW5kTWVtb05vZGVzKGNoaWxkTm9kZXNbaV0sIGFwcGVuZFRvQXJyYXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWVtb2l6ZTogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgY2FuIG9ubHkgcGFzcyBhIGZ1bmN0aW9uIHRvIGtvLm1lbW9pemF0aW9uLm1lbW9pemUoKVwiKTtcbiAgICAgICAgICAgIHZhciBtZW1vSWQgPSBnZW5lcmF0ZVJhbmRvbUlkKCk7XG4gICAgICAgICAgICBtZW1vc1ttZW1vSWRdID0gY2FsbGJhY2s7XG4gICAgICAgICAgICByZXR1cm4gXCI8IS0tW2tvX21lbW86XCIgKyBtZW1vSWQgKyBcIl0tLT5cIjtcbiAgICAgICAgfSxcblxuICAgICAgICB1bm1lbW9pemU6IGZ1bmN0aW9uIChtZW1vSWQsIGNhbGxiYWNrUGFyYW1zKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBtZW1vc1ttZW1vSWRdO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhbnkgbWVtbyB3aXRoIElEIFwiICsgbWVtb0lkICsgXCIuIFBlcmhhcHMgaXQncyBhbHJlYWR5IGJlZW4gdW5tZW1vaXplZC5cIik7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGNhbGxiYWNrUGFyYW1zIHx8IFtdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBkZWxldGUgbWVtb3NbbWVtb0lkXTsgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHVubWVtb2l6ZURvbU5vZGVBbmREZXNjZW5kYW50czogZnVuY3Rpb24gKGRvbU5vZGUsIGV4dHJhQ2FsbGJhY2tQYXJhbXNBcnJheSkge1xuICAgICAgICAgICAgdmFyIG1lbW9zID0gW107XG4gICAgICAgICAgICBmaW5kTWVtb05vZGVzKGRvbU5vZGUsIG1lbW9zKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gbWVtb3MubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBtZW1vc1tpXS5kb21Ob2RlO1xuICAgICAgICAgICAgICAgIHZhciBjb21iaW5lZFBhcmFtcyA9IFtub2RlXTtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmFDYWxsYmFja1BhcmFtc0FycmF5KVxuICAgICAgICAgICAgICAgICAgICBrby51dGlscy5hcnJheVB1c2hBbGwoY29tYmluZWRQYXJhbXMsIGV4dHJhQ2FsbGJhY2tQYXJhbXNBcnJheSk7XG4gICAgICAgICAgICAgICAga28ubWVtb2l6YXRpb24udW5tZW1vaXplKG1lbW9zW2ldLm1lbW9JZCwgY29tYmluZWRQYXJhbXMpO1xuICAgICAgICAgICAgICAgIG5vZGUubm9kZVZhbHVlID0gXCJcIjsgLy8gTmV1dGVyIHRoaXMgbm9kZSBzbyB3ZSBkb24ndCB0cnkgdG8gdW5tZW1vaXplIGl0IGFnYWluXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOyAvLyBJZiBwb3NzaWJsZSwgZXJhc2UgaXQgdG90YWxseSAobm90IGFsd2F5cyBwb3NzaWJsZSAtIHNvbWVvbmUgZWxzZSBtaWdodCBqdXN0IGhvbGQgYSByZWZlcmVuY2UgdG8gaXQgdGhlbiBjYWxsIHVubWVtb2l6ZURvbU5vZGVBbmREZXNjZW5kYW50cyBhZ2FpbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU1lbW9UZXh0OiBmdW5jdGlvbiAobWVtb1RleHQpIHtcbiAgICAgICAgICAgIHZhciBtYXRjaCA9IG1lbW9UZXh0Lm1hdGNoKC9eXFxba29fbWVtb1xcOiguKj8pXFxdJC8pO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbn0pKCk7XG5cbmtvLmV4cG9ydFN5bWJvbCgnbWVtb2l6YXRpb24nLCBrby5tZW1vaXphdGlvbik7XG5rby5leHBvcnRTeW1ib2woJ21lbW9pemF0aW9uLm1lbW9pemUnLCBrby5tZW1vaXphdGlvbi5tZW1vaXplKTtcbmtvLmV4cG9ydFN5bWJvbCgnbWVtb2l6YXRpb24udW5tZW1vaXplJywga28ubWVtb2l6YXRpb24udW5tZW1vaXplKTtcbmtvLmV4cG9ydFN5bWJvbCgnbWVtb2l6YXRpb24ucGFyc2VNZW1vVGV4dCcsIGtvLm1lbW9pemF0aW9uLnBhcnNlTWVtb1RleHQpO1xua28uZXhwb3J0U3ltYm9sKCdtZW1vaXphdGlvbi51bm1lbW9pemVEb21Ob2RlQW5kRGVzY2VuZGFudHMnLCBrby5tZW1vaXphdGlvbi51bm1lbW9pemVEb21Ob2RlQW5kRGVzY2VuZGFudHMpO1xua28udGFza3MgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBzY2hlZHVsZXIsXG4gICAgICAgIHRhc2tRdWV1ZSA9IFtdLFxuICAgICAgICB0YXNrUXVldWVMZW5ndGggPSAwLFxuICAgICAgICBuZXh0SGFuZGxlID0gMSxcbiAgICAgICAgbmV4dEluZGV4VG9Qcm9jZXNzID0gMDtcblxuICAgIGlmICh3aW5kb3dbJ011dGF0aW9uT2JzZXJ2ZXInXSkge1xuICAgICAgICAvLyBDaHJvbWUgMjcrLCBGaXJlZm94IDE0KywgSUUgMTErLCBPcGVyYSAxNSssIFNhZmFyaSA2LjErXG4gICAgICAgIC8vIEZyb20gaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZCAqIENvcHlyaWdodCAoYykgMjAxNCBQZXRrYSBBbnRvbm92ICogTGljZW5zZTogTUlUXG4gICAgICAgIHNjaGVkdWxlciA9IChmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spLm9ic2VydmUoZGl2LCB7YXR0cmlidXRlczogdHJ1ZX0pO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZGl2LmNsYXNzTGlzdC50b2dnbGUoXCJmb29cIik7IH07XG4gICAgICAgIH0pKHNjaGVkdWxlZFByb2Nlc3MpO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQgJiYgXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSB7XG4gICAgICAgIC8vIElFIDYtMTBcbiAgICAgICAgLy8gRnJvbSBodHRwczovL2dpdGh1Yi5jb20vWXV6dUpTL3NldEltbWVkaWF0ZSAqIENvcHlyaWdodCAoYykgMjAxMiBCYXJuZXNhbmRub2JsZS5jb20sIGxsYywgRG9uYXZvbiBXZXN0LCBhbmQgRG9tZW5pYyBEZW5pY29sYSAqIExpY2Vuc2U6IE1JVFxuICAgICAgICBzY2hlZHVsZXIgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICBzY3JpcHQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2NoZWR1bGVyID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzVGFza3MoKSB7XG4gICAgICAgIGlmICh0YXNrUXVldWVMZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIEVhY2ggbWFyayByZXByZXNlbnRzIHRoZSBlbmQgb2YgYSBsb2dpY2FsIGdyb3VwIG9mIHRhc2tzIGFuZCB0aGUgbnVtYmVyIG9mIHRoZXNlIGdyb3VwcyBpc1xuICAgICAgICAgICAgLy8gbGltaXRlZCB0byBwcmV2ZW50IHVuY2hlY2tlZCByZWN1cnNpb24uXG4gICAgICAgICAgICB2YXIgbWFyayA9IHRhc2tRdWV1ZUxlbmd0aCwgY291bnRNYXJrcyA9IDA7XG5cbiAgICAgICAgICAgIC8vIG5leHRJbmRleFRvUHJvY2VzcyBrZWVwcyB0cmFjayBvZiB3aGVyZSB3ZSBhcmUgaW4gdGhlIHF1ZXVlOyBwcm9jZXNzVGFza3MgY2FuIGJlIGNhbGxlZCByZWN1cnNpdmVseSB3aXRob3V0IGlzc3VlXG4gICAgICAgICAgICBmb3IgKHZhciB0YXNrOyBuZXh0SW5kZXhUb1Byb2Nlc3MgPCB0YXNrUXVldWVMZW5ndGg7ICkge1xuICAgICAgICAgICAgICAgIGlmICh0YXNrID0gdGFza1F1ZXVlW25leHRJbmRleFRvUHJvY2VzcysrXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEluZGV4VG9Qcm9jZXNzID4gbWFyaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrY291bnRNYXJrcyA+PSA1MDAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEluZGV4VG9Qcm9jZXNzID0gdGFza1F1ZXVlTGVuZ3RoOyAgIC8vIHNraXAgYWxsIHRhc2tzIHJlbWFpbmluZyBpbiB0aGUgcXVldWUgc2luY2UgYW55IG9mIHRoZW0gY291bGQgYmUgY2F1c2luZyB0aGUgcmVjdXJzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga28udXRpbHMuZGVmZXJFcnJvcihFcnJvcihcIidUb28gbXVjaCByZWN1cnNpb24nIGFmdGVyIHByb2Nlc3NpbmcgXCIgKyBjb3VudE1hcmtzICsgXCIgdGFzayBncm91cHMuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmsgPSB0YXNrUXVldWVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2soKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtvLnV0aWxzLmRlZmVyRXJyb3IoZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2NoZWR1bGVkUHJvY2VzcygpIHtcbiAgICAgICAgcHJvY2Vzc1Rhc2tzKCk7XG5cbiAgICAgICAgLy8gUmVzZXQgdGhlIHF1ZXVlXG4gICAgICAgIG5leHRJbmRleFRvUHJvY2VzcyA9IHRhc2tRdWV1ZUxlbmd0aCA9IHRhc2tRdWV1ZS5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlVGFza1Byb2Nlc3NpbmcoKSB7XG4gICAgICAgIGtvLnRhc2tzWydzY2hlZHVsZXInXShzY2hlZHVsZWRQcm9jZXNzKTtcbiAgICB9XG5cbiAgICB2YXIgdGFza3MgPSB7XG4gICAgICAgICdzY2hlZHVsZXInOiBzY2hlZHVsZXIsICAgICAvLyBBbGxvdyBvdmVycmlkaW5nIHRoZSBzY2hlZHVsZXJcblxuICAgICAgICBzY2hlZHVsZTogZnVuY3Rpb24gKGZ1bmMpIHtcbiAgICAgICAgICAgIGlmICghdGFza1F1ZXVlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVUYXNrUHJvY2Vzc2luZygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YXNrUXVldWVbdGFza1F1ZXVlTGVuZ3RoKytdID0gZnVuYztcbiAgICAgICAgICAgIHJldHVybiBuZXh0SGFuZGxlKys7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FuY2VsOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBoYW5kbGUgLSAobmV4dEhhbmRsZSAtIHRhc2tRdWV1ZUxlbmd0aCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gbmV4dEluZGV4VG9Qcm9jZXNzICYmIGluZGV4IDwgdGFza1F1ZXVlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGFza1F1ZXVlW2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gRm9yIHRlc3Rpbmcgb25seTogcmVzZXQgdGhlIHF1ZXVlIGFuZCByZXR1cm4gdGhlIHByZXZpb3VzIHF1ZXVlIGxlbmd0aFxuICAgICAgICAncmVzZXRGb3JUZXN0aW5nJzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHRhc2tRdWV1ZUxlbmd0aCAtIG5leHRJbmRleFRvUHJvY2VzcztcbiAgICAgICAgICAgIG5leHRJbmRleFRvUHJvY2VzcyA9IHRhc2tRdWV1ZUxlbmd0aCA9IHRhc2tRdWV1ZS5sZW5ndGggPSAwO1xuICAgICAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICAgICAgfSxcblxuICAgICAgICBydW5FYXJseTogcHJvY2Vzc1Rhc2tzXG4gICAgfTtcblxuICAgIHJldHVybiB0YXNrcztcbn0pKCk7XG5cbmtvLmV4cG9ydFN5bWJvbCgndGFza3MnLCBrby50YXNrcyk7XG5rby5leHBvcnRTeW1ib2woJ3Rhc2tzLnNjaGVkdWxlJywga28udGFza3Muc2NoZWR1bGUpO1xuLy9rby5leHBvcnRTeW1ib2woJ3Rhc2tzLmNhbmNlbCcsIGtvLnRhc2tzLmNhbmNlbCk7ICBcImNhbmNlbFwiIGlzbid0IG1pbmlmaWVkXG5rby5leHBvcnRTeW1ib2woJ3Rhc2tzLnJ1bkVhcmx5Jywga28udGFza3MucnVuRWFybHkpO1xua28uZXh0ZW5kZXJzID0ge1xuICAgICd0aHJvdHRsZSc6IGZ1bmN0aW9uKHRhcmdldCwgdGltZW91dCkge1xuICAgICAgICAvLyBUaHJvdHRsaW5nIG1lYW5zIHR3byB0aGluZ3M6XG5cbiAgICAgICAgLy8gKDEpIEZvciBkZXBlbmRlbnQgb2JzZXJ2YWJsZXMsIHdlIHRocm90dGxlICpldmFsdWF0aW9ucyogc28gdGhhdCwgbm8gbWF0dGVyIGhvdyBmYXN0IGl0cyBkZXBlbmRlbmNpZXNcbiAgICAgICAgLy8gICAgIG5vdGlmeSB1cGRhdGVzLCB0aGUgdGFyZ2V0IGRvZXNuJ3QgcmUtZXZhbHVhdGUgKGFuZCBoZW5jZSBkb2Vzbid0IG5vdGlmeSkgZmFzdGVyIHRoYW4gYSBjZXJ0YWluIHJhdGVcbiAgICAgICAgdGFyZ2V0Wyd0aHJvdHRsZUV2YWx1YXRpb24nXSA9IHRpbWVvdXQ7XG5cbiAgICAgICAgLy8gKDIpIEZvciB3cml0YWJsZSB0YXJnZXRzIChvYnNlcnZhYmxlcywgb3Igd3JpdGFibGUgZGVwZW5kZW50IG9ic2VydmFibGVzKSwgd2UgdGhyb3R0bGUgKndyaXRlcypcbiAgICAgICAgLy8gICAgIHNvIHRoZSB0YXJnZXQgY2Fubm90IGNoYW5nZSB2YWx1ZSBzeW5jaHJvbm91c2x5IG9yIGZhc3RlciB0aGFuIGEgY2VydGFpbiByYXRlXG4gICAgICAgIHZhciB3cml0ZVRpbWVvdXRJbnN0YW5jZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBrby5kZXBlbmRlbnRPYnNlcnZhYmxlKHtcbiAgICAgICAgICAgICdyZWFkJzogdGFyZ2V0LFxuICAgICAgICAgICAgJ3dyaXRlJzogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQod3JpdGVUaW1lb3V0SW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIHdyaXRlVGltZW91dEluc3RhbmNlID0ga28udXRpbHMuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgICdyYXRlTGltaXQnOiBmdW5jdGlvbih0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHRpbWVvdXQsIG1ldGhvZCwgbGltaXRGdW5jdGlvbjtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRpbWVvdXQgPSBvcHRpb25zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGltZW91dCA9IG9wdGlvbnNbJ3RpbWVvdXQnXTtcbiAgICAgICAgICAgIG1ldGhvZCA9IG9wdGlvbnNbJ21ldGhvZCddO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmF0ZUxpbWl0IHN1cGVyc2VkZXMgZGVmZXJyZWQgdXBkYXRlc1xuICAgICAgICB0YXJnZXQuX2RlZmVyVXBkYXRlcyA9IGZhbHNlO1xuXG4gICAgICAgIGxpbWl0RnVuY3Rpb24gPSBtZXRob2QgPT0gJ25vdGlmeVdoZW5DaGFuZ2VzU3RvcCcgPyAgZGVib3VuY2UgOiB0aHJvdHRsZTtcbiAgICAgICAgdGFyZ2V0LmxpbWl0KGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gbGltaXRGdW5jdGlvbihjYWxsYmFjaywgdGltZW91dCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAnZGVmZXJyZWQnOiBmdW5jdGlvbih0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFxcJ2RlZmVycmVkXFwnIGV4dGVuZGVyIG9ubHkgYWNjZXB0cyB0aGUgdmFsdWUgXFwndHJ1ZVxcJywgYmVjYXVzZSBpdCBpcyBub3Qgc3VwcG9ydGVkIHRvIHR1cm4gZGVmZXJyYWwgb2ZmIG9uY2UgZW5hYmxlZC4nKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0YXJnZXQuX2RlZmVyVXBkYXRlcykge1xuICAgICAgICAgICAgdGFyZ2V0Ll9kZWZlclVwZGF0ZXMgPSB0cnVlO1xuICAgICAgICAgICAgdGFyZ2V0LmxpbWl0KGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciBoYW5kbGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAga28udGFza3MuY2FuY2VsKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZSA9IGtvLnRhc2tzLnNjaGVkdWxlKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Wydub3RpZnlTdWJzY3JpYmVycyddKHVuZGVmaW5lZCwgJ2RpcnR5Jyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgICdub3RpZnknOiBmdW5jdGlvbih0YXJnZXQsIG5vdGlmeVdoZW4pIHtcbiAgICAgICAgdGFyZ2V0W1wiZXF1YWxpdHlDb21wYXJlclwiXSA9IG5vdGlmeVdoZW4gPT0gXCJhbHdheXNcIiA/XG4gICAgICAgICAgICBudWxsIDogIC8vIG51bGwgZXF1YWxpdHlDb21wYXJlciBtZWFucyB0byBhbHdheXMgbm90aWZ5XG4gICAgICAgICAgICB2YWx1ZXNBcmVQcmltaXRpdmVBbmRFcXVhbDtcbiAgICB9XG59O1xuXG52YXIgcHJpbWl0aXZlVHlwZXMgPSB7ICd1bmRlZmluZWQnOjEsICdib29sZWFuJzoxLCAnbnVtYmVyJzoxLCAnc3RyaW5nJzoxIH07XG5mdW5jdGlvbiB2YWx1ZXNBcmVQcmltaXRpdmVBbmRFcXVhbChhLCBiKSB7XG4gICAgdmFyIG9sZFZhbHVlSXNQcmltaXRpdmUgPSAoYSA9PT0gbnVsbCkgfHwgKHR5cGVvZihhKSBpbiBwcmltaXRpdmVUeXBlcyk7XG4gICAgcmV0dXJuIG9sZFZhbHVlSXNQcmltaXRpdmUgPyAoYSA9PT0gYikgOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdGhyb3R0bGUoY2FsbGJhY2ssIHRpbWVvdXQpIHtcbiAgICB2YXIgdGltZW91dEluc3RhbmNlO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGltZW91dEluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aW1lb3V0SW5zdGFuY2UgPSBrby51dGlscy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0SW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZGVib3VuY2UoY2FsbGJhY2ssIHRpbWVvdXQpIHtcbiAgICB2YXIgdGltZW91dEluc3RhbmNlO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SW5zdGFuY2UpO1xuICAgICAgICB0aW1lb3V0SW5zdGFuY2UgPSBrby51dGlscy5zZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0KTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBhcHBseUV4dGVuZGVycyhyZXF1ZXN0ZWRFeHRlbmRlcnMpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAocmVxdWVzdGVkRXh0ZW5kZXJzKSB7XG4gICAgICAgIGtvLnV0aWxzLm9iamVjdEZvckVhY2gocmVxdWVzdGVkRXh0ZW5kZXJzLCBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgZXh0ZW5kZXJIYW5kbGVyID0ga28uZXh0ZW5kZXJzW2tleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dGVuZGVySGFuZGxlciA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gZXh0ZW5kZXJIYW5kbGVyKHRhcmdldCwgdmFsdWUpIHx8IHRhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5cbmtvLmV4cG9ydFN5bWJvbCgnZXh0ZW5kZXJzJywga28uZXh0ZW5kZXJzKTtcblxua28uc3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHRhcmdldCwgY2FsbGJhY2ssIGRpc3Bvc2VDYWxsYmFjaykge1xuICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldDtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5kaXNwb3NlQ2FsbGJhY2sgPSBkaXNwb3NlQ2FsbGJhY2s7XG4gICAgdGhpcy5pc0Rpc3Bvc2VkID0gZmFsc2U7XG4gICAga28uZXhwb3J0UHJvcGVydHkodGhpcywgJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UpO1xufTtcbmtvLnN1YnNjcmlwdGlvbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgIHRoaXMuZGlzcG9zZUNhbGxiYWNrKCk7XG59O1xuXG5rby5zdWJzY3JpYmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAga28udXRpbHMuc2V0UHJvdG90eXBlT2ZPckV4dGVuZCh0aGlzLCBrb19zdWJzY3JpYmFibGVfZm4pO1xuICAgIGtvX3N1YnNjcmliYWJsZV9mbi5pbml0KHRoaXMpO1xufVxuXG52YXIgZGVmYXVsdEV2ZW50ID0gXCJjaGFuZ2VcIjtcblxuLy8gTW92ZWQgb3V0IG9mIFwibGltaXRcIiB0byBhdm9pZCB0aGUgZXh0cmEgY2xvc3VyZVxuZnVuY3Rpb24gbGltaXROb3RpZnlTdWJzY3JpYmVycyh2YWx1ZSwgZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50ID09PSBkZWZhdWx0RXZlbnQpIHtcbiAgICAgICAgdGhpcy5fbGltaXRDaGFuZ2UodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdiZWZvcmVDaGFuZ2UnKSB7XG4gICAgICAgIHRoaXMuX2xpbWl0QmVmb3JlQ2hhbmdlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9vcmlnTm90aWZ5U3Vic2NyaWJlcnModmFsdWUsIGV2ZW50KTtcbiAgICB9XG59XG5cbnZhciBrb19zdWJzY3JpYmFibGVfZm4gPSB7XG4gICAgaW5pdDogZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICAgICAgaW5zdGFuY2UuX3N1YnNjcmlwdGlvbnMgPSB7fTtcbiAgICAgICAgaW5zdGFuY2UuX3ZlcnNpb25OdW1iZXIgPSAxO1xuICAgIH0sXG5cbiAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIChjYWxsYmFjaywgY2FsbGJhY2tUYXJnZXQsIGV2ZW50KSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICBldmVudCA9IGV2ZW50IHx8IGRlZmF1bHRFdmVudDtcbiAgICAgICAgdmFyIGJvdW5kQ2FsbGJhY2sgPSBjYWxsYmFja1RhcmdldCA/IGNhbGxiYWNrLmJpbmQoY2FsbGJhY2tUYXJnZXQpIDogY2FsbGJhY2s7XG5cbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IG5ldyBrby5zdWJzY3JpcHRpb24oc2VsZiwgYm91bmRDYWxsYmFjaywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAga28udXRpbHMuYXJyYXlSZW1vdmVJdGVtKHNlbGYuX3N1YnNjcmlwdGlvbnNbZXZlbnRdLCBzdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgaWYgKHNlbGYuYWZ0ZXJTdWJzY3JpcHRpb25SZW1vdmUpXG4gICAgICAgICAgICAgICAgc2VsZi5hZnRlclN1YnNjcmlwdGlvblJlbW92ZShldmVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChzZWxmLmJlZm9yZVN1YnNjcmlwdGlvbkFkZClcbiAgICAgICAgICAgIHNlbGYuYmVmb3JlU3Vic2NyaXB0aW9uQWRkKGV2ZW50KTtcblxuICAgICAgICBpZiAoIXNlbGYuX3N1YnNjcmlwdGlvbnNbZXZlbnRdKVxuICAgICAgICAgICAgc2VsZi5fc3Vic2NyaXB0aW9uc1tldmVudF0gPSBbXTtcbiAgICAgICAgc2VsZi5fc3Vic2NyaXB0aW9uc1tldmVudF0ucHVzaChzdWJzY3JpcHRpb24pO1xuXG4gICAgICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gICAgfSxcblxuICAgIFwibm90aWZ5U3Vic2NyaWJlcnNcIjogZnVuY3Rpb24gKHZhbHVlVG9Ob3RpZnksIGV2ZW50KSB7XG4gICAgICAgIGV2ZW50ID0gZXZlbnQgfHwgZGVmYXVsdEV2ZW50O1xuICAgICAgICBpZiAoZXZlbnQgPT09IGRlZmF1bHRFdmVudCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWZXJzaW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGFzU3Vic2NyaXB0aW9uc0ZvckV2ZW50KGV2ZW50KSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBrby5kZXBlbmRlbmN5RGV0ZWN0aW9uLmJlZ2luKCk7IC8vIEJlZ2luIHN1cHByZXNzaW5nIGRlcGVuZGVuY3kgZGV0ZWN0aW9uIChieSBzZXR0aW5nIHRoZSB0b3AgZnJhbWUgdG8gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSB0aGlzLl9zdWJzY3JpcHRpb25zW2V2ZW50XS5zbGljZSgwKSwgaSA9IDAsIHN1YnNjcmlwdGlvbjsgc3Vic2NyaXB0aW9uID0gYVtpXTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEluIGNhc2UgYSBzdWJzY3JpcHRpb24gd2FzIGRpc3Bvc2VkIGR1cmluZyB0aGUgYXJyYXlGb3JFYWNoIGN5Y2xlLCBjaGVja1xuICAgICAgICAgICAgICAgICAgICAvLyBmb3IgaXNEaXNwb3NlZCBvbiBlYWNoIHN1YnNjcmlwdGlvbiBiZWZvcmUgaW52b2tpbmcgaXRzIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIGlmICghc3Vic2NyaXB0aW9uLmlzRGlzcG9zZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24uY2FsbGJhY2sodmFsdWVUb05vdGlmeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBrby5kZXBlbmRlbmN5RGV0ZWN0aW9uLmVuZCgpOyAvLyBFbmQgc3VwcHJlc3NpbmcgZGVwZW5kZW5jeSBkZXRlY3Rpb25cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRWZXJzaW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92ZXJzaW9uTnVtYmVyO1xuICAgIH0sXG5cbiAgICBoYXNDaGFuZ2VkOiBmdW5jdGlvbiAodmVyc2lvblRvQ2hlY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyc2lvbigpICE9PSB2ZXJzaW9uVG9DaGVjaztcbiAgICB9LFxuXG4gICAgdXBkYXRlVmVyc2lvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICArK3RoaXMuX3ZlcnNpb25OdW1iZXI7XG4gICAgfSxcblxuICAgIGxpbWl0OiBmdW5jdGlvbihsaW1pdEZ1bmN0aW9uKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcywgc2VsZklzT2JzZXJ2YWJsZSA9IGtvLmlzT2JzZXJ2YWJsZShzZWxmKSxcbiAgICAgICAgICAgIGlnbm9yZUJlZm9yZUNoYW5nZSwgcHJldmlvdXNWYWx1ZSwgcGVuZGluZ1ZhbHVlLCBiZWZvcmVDaGFuZ2UgPSAnYmVmb3JlQ2hhbmdlJztcblxuICAgICAgICBpZiAoIXNlbGYuX29yaWdOb3RpZnlTdWJzY3JpYmVycykge1xuICAgICAgICAgICAgc2VsZi5fb3JpZ05vdGlmeVN1YnNjcmliZXJzID0gc2VsZltcIm5vdGlmeVN1YnNjcmliZXJzXCJdO1xuICAgICAgICAgICAgc2VsZltcIm5vdGlmeVN1YnNjcmliZXJzXCJdID0gbGltaXROb3RpZnlTdWJzY3JpYmVycztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmaW5pc2ggPSBsaW1pdEZ1bmN0aW9uKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgc2VsZi5fbm90aWZpY2F0aW9uSXNQZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIElmIGFuIG9ic2VydmFibGUgcHJvdmlkZWQgYSByZWZlcmVuY2UgdG8gaXRzZWxmLCBhY2Nlc3MgaXQgdG8gZ2V0IHRoZSBsYXRlc3QgdmFsdWUuXG4gICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBjb21wdXRlZCBvYnNlcnZhYmxlcyB0byBkZWxheSBjYWxjdWxhdGluZyB0aGVpciB2YWx1ZSB1bnRpbCBuZWVkZWQuXG4gICAgICAgICAgICBpZiAoc2VsZklzT2JzZXJ2YWJsZSAmJiBwZW5kaW5nVmFsdWUgPT09IHNlbGYpIHtcbiAgICAgICAgICAgICAgICBwZW5kaW5nVmFsdWUgPSBzZWxmKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZ25vcmVCZWZvcmVDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChzZWxmLmlzRGlmZmVyZW50KHByZXZpb3VzVmFsdWUsIHBlbmRpbmdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9vcmlnTm90aWZ5U3Vic2NyaWJlcnMocHJldmlvdXNWYWx1ZSA9IHBlbmRpbmdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlbGYuX2xpbWl0Q2hhbmdlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHNlbGYuX25vdGlmaWNhdGlvbklzUGVuZGluZyA9IGlnbm9yZUJlZm9yZUNoYW5nZSA9IHRydWU7XG4gICAgICAgICAgICBwZW5kaW5nVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIGZpbmlzaCgpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLl9saW1pdEJlZm9yZUNoYW5nZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIWlnbm9yZUJlZm9yZUNoYW5nZSkge1xuICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBzZWxmLl9vcmlnTm90aWZ5U3Vic2NyaWJlcnModmFsdWUsIGJlZm9yZUNoYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGhhc1N1YnNjcmlwdGlvbnNGb3JFdmVudDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmlwdGlvbnNbZXZlbnRdICYmIHRoaXMuX3N1YnNjcmlwdGlvbnNbZXZlbnRdLmxlbmd0aDtcbiAgICB9LFxuXG4gICAgZ2V0U3Vic2NyaXB0aW9uc0NvdW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaXB0aW9uc1tldmVudF0gJiYgdGhpcy5fc3Vic2NyaXB0aW9uc1tldmVudF0ubGVuZ3RoIHx8IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xuICAgICAgICAgICAga28udXRpbHMub2JqZWN0Rm9yRWFjaCh0aGlzLl9zdWJzY3JpcHRpb25zLCBmdW5jdGlvbihldmVudE5hbWUsIHN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnROYW1lICE9PSAnZGlydHknKVxuICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBzdWJzY3JpcHRpb25zLmxlbmd0aDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRvdGFsO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGlzRGlmZmVyZW50OiBmdW5jdGlvbihvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzWydlcXVhbGl0eUNvbXBhcmVyJ10gfHwgIXRoaXNbJ2VxdWFsaXR5Q29tcGFyZXInXShvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIH0sXG5cbiAgICBleHRlbmQ6IGFwcGx5RXh0ZW5kZXJzXG59O1xuXG5rby5leHBvcnRQcm9wZXJ0eShrb19zdWJzY3JpYmFibGVfZm4sICdzdWJzY3JpYmUnLCBrb19zdWJzY3JpYmFibGVfZm4uc3Vic2NyaWJlKTtcbmtvLmV4cG9ydFByb3BlcnR5KGtvX3N1YnNjcmliYWJsZV9mbiwgJ2V4dGVuZCcsIGtvX3N1YnNjcmliYWJsZV9mbi5leHRlbmQpO1xua28uZXhwb3J0UHJvcGVydHkoa29fc3Vic2NyaWJhYmxlX2ZuLCAnZ2V0U3Vic2NyaXB0aW9uc0NvdW50Jywga29fc3Vic2NyaWJhYmxlX2ZuLmdldFN1YnNjcmlwdGlvbnNDb3VudCk7XG5cbi8vIEZvciBicm93c2VycyB0aGF0IHN1cHBvcnQgcHJvdG8gYXNzaWdubWVudCwgd2Ugb3ZlcndyaXRlIHRoZSBwcm90b3R5cGUgb2YgZWFjaFxuLy8gb2JzZXJ2YWJsZSBpbnN0YW5jZS4gU2luY2Ugb2JzZXJ2YWJsZXMgYXJlIGZ1bmN0aW9ucywgd2UgbmVlZCBGdW5jdGlvbi5wcm90b3R5cGVcbi8vIHRvIHN0aWxsIGJlIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uXG5pZiAoa28udXRpbHMuY2FuU2V0UHJvdG90eXBlKSB7XG4gICAga28udXRpbHMuc2V0UHJvdG90eXBlT2Yoa29fc3Vic2NyaWJhYmxlX2ZuLCBGdW5jdGlvbi5wcm90b3R5cGUpO1xufVxuXG5rby5zdWJzY3JpYmFibGVbJ2ZuJ10gPSBrb19zdWJzY3JpYmFibGVfZm47XG5cblxua28uaXNTdWJzY3JpYmFibGUgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UgIT0gbnVsbCAmJiB0eXBlb2YgaW5zdGFuY2Uuc3Vic2NyaWJlID09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgaW5zdGFuY2VbXCJub3RpZnlTdWJzY3JpYmVyc1wiXSA9PSBcImZ1bmN0aW9uXCI7XG59O1xuXG5rby5leHBvcnRTeW1ib2woJ3N1YnNjcmliYWJsZScsIGtvLnN1YnNjcmliYWJsZSk7XG5rby5leHBvcnRTeW1ib2woJ2lzU3Vic2NyaWJhYmxlJywga28uaXNTdWJzY3JpYmFibGUpO1xuXG5rby5jb21wdXRlZENvbnRleHQgPSBrby5kZXBlbmRlbmN5RGV0ZWN0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb3V0ZXJGcmFtZXMgPSBbXSxcbiAgICAgICAgY3VycmVudEZyYW1lLFxuICAgICAgICBsYXN0SWQgPSAwO1xuXG4gICAgLy8gUmV0dXJuIGEgdW5pcXVlIElEIHRoYXQgY2FuIGJlIGFzc2lnbmVkIHRvIGFuIG9ic2VydmFibGUgZm9yIGRlcGVuZGVuY3kgdHJhY2tpbmcuXG4gICAgLy8gVGhlb3JldGljYWxseSwgeW91IGNvdWxkIGV2ZW50dWFsbHkgb3ZlcmZsb3cgdGhlIG51bWJlciBzdG9yYWdlIHNpemUsIHJlc3VsdGluZ1xuICAgIC8vIGluIGR1cGxpY2F0ZSBJRHMuIEJ1dCBpbiBKYXZhU2NyaXB0LCB0aGUgbGFyZ2VzdCBleGFjdCBpbnRlZ3JhbCB2YWx1ZSBpcyAyXjUzXG4gICAgLy8gb3IgOSwwMDcsMTk5LDI1NCw3NDAsOTkyLiBJZiB5b3UgY3JlYXRlZCAxLDAwMCwwMDAgSURzIHBlciBzZWNvbmQsIGl0IHdvdWxkXG4gICAgLy8gdGFrZSBvdmVyIDI4NSB5ZWFycyB0byByZWFjaCB0aGF0IG51bWJlci5cbiAgICAvLyBSZWZlcmVuY2UgaHR0cDovL2Jsb2cudmpldXguY29tLzIwMTAvamF2YXNjcmlwdC9qYXZhc2NyaXB0LW1heF9pbnQtbnVtYmVyLWxpbWl0cy5odG1sXG4gICAgZnVuY3Rpb24gZ2V0SWQoKSB7XG4gICAgICAgIHJldHVybiArK2xhc3RJZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBiZWdpbihvcHRpb25zKSB7XG4gICAgICAgIG91dGVyRnJhbWVzLnB1c2goY3VycmVudEZyYW1lKTtcbiAgICAgICAgY3VycmVudEZyYW1lID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmQoKSB7XG4gICAgICAgIGN1cnJlbnRGcmFtZSA9IG91dGVyRnJhbWVzLnBvcCgpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGJlZ2luOiBiZWdpbixcblxuICAgICAgICBlbmQ6IGVuZCxcblxuICAgICAgICByZWdpc3RlckRlcGVuZGVuY3k6IGZ1bmN0aW9uIChzdWJzY3JpYmFibGUpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RnJhbWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWtvLmlzU3Vic2NyaWJhYmxlKHN1YnNjcmliYWJsZSkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9ubHkgc3Vic2NyaWJhYmxlIHRoaW5ncyBjYW4gYWN0IGFzIGRlcGVuZGVuY2llc1wiKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50RnJhbWUuY2FsbGJhY2suY2FsbChjdXJyZW50RnJhbWUuY2FsbGJhY2tUYXJnZXQsIHN1YnNjcmliYWJsZSwgc3Vic2NyaWJhYmxlLl9pZCB8fCAoc3Vic2NyaWJhYmxlLl9pZCA9IGdldElkKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBpZ25vcmU6IGZ1bmN0aW9uIChjYWxsYmFjaywgY2FsbGJhY2tUYXJnZXQsIGNhbGxiYWNrQXJncykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBiZWdpbigpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseShjYWxsYmFja1RhcmdldCwgY2FsbGJhY2tBcmdzIHx8IFtdKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0RGVwZW5kZW5jaWVzQ291bnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RnJhbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGcmFtZS5jb21wdXRlZC5nZXREZXBlbmRlbmNpZXNDb3VudCgpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGlzSW5pdGlhbDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnJhbWUuaXNJbml0aWFsO1xuICAgICAgICB9XG4gICAgfTtcbn0pKCk7XG5cbmtvLmV4cG9ydFN5bWJvbCgnY29tcHV0ZWRDb250ZXh0Jywga28uY29tcHV0ZWRDb250ZXh0KTtcbmtvLmV4cG9ydFN5bWJvbCgnY29tcHV0ZWRDb250ZXh0LmdldERlcGVuZGVuY2llc0NvdW50Jywga28uY29tcHV0ZWRDb250ZXh0LmdldERlcGVuZGVuY2llc0NvdW50KTtcbmtvLmV4cG9ydFN5bWJvbCgnY29tcHV0ZWRDb250ZXh0LmlzSW5pdGlhbCcsIGtvLmNvbXB1dGVkQ29udGV4dC5pc0luaXRpYWwpO1xuXG5rby5leHBvcnRTeW1ib2woJ2lnbm9yZURlcGVuZGVuY2llcycsIGtvLmlnbm9yZURlcGVuZGVuY2llcyA9IGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24uaWdub3JlKTtcbnZhciBvYnNlcnZhYmxlTGF0ZXN0VmFsdWUgPSBrby51dGlscy5jcmVhdGVTeW1ib2xPclN0cmluZygnX2xhdGVzdFZhbHVlJyk7XG5cbmtvLm9ic2VydmFibGUgPSBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgZnVuY3Rpb24gb2JzZXJ2YWJsZSgpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBXcml0ZVxuXG4gICAgICAgICAgICAvLyBJZ25vcmUgd3JpdGVzIGlmIHRoZSB2YWx1ZSBoYXNuJ3QgY2hhbmdlZFxuICAgICAgICAgICAgaWYgKG9ic2VydmFibGUuaXNEaWZmZXJlbnQob2JzZXJ2YWJsZVtvYnNlcnZhYmxlTGF0ZXN0VmFsdWVdLCBhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2YWJsZS52YWx1ZVdpbGxNdXRhdGUoKTtcbiAgICAgICAgICAgICAgICBvYnNlcnZhYmxlW29ic2VydmFibGVMYXRlc3RWYWx1ZV0gPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgb2JzZXJ2YWJsZS52YWx1ZUhhc011dGF0ZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzOyAvLyBQZXJtaXRzIGNoYWluZWQgYXNzaWdubWVudHNcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJlYWRcbiAgICAgICAgICAgIGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24ucmVnaXN0ZXJEZXBlbmRlbmN5KG9ic2VydmFibGUpOyAvLyBUaGUgY2FsbGVyIG9ubHkgbmVlZHMgdG8gYmUgbm90aWZpZWQgb2YgY2hhbmdlcyBpZiB0aGV5IGRpZCBhIFwicmVhZFwiIG9wZXJhdGlvblxuICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVbb2JzZXJ2YWJsZUxhdGVzdFZhbHVlXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9ic2VydmFibGVbb2JzZXJ2YWJsZUxhdGVzdFZhbHVlXSA9IGluaXRpYWxWYWx1ZTtcblxuICAgIC8vIEluaGVyaXQgZnJvbSAnc3Vic2NyaWJhYmxlJ1xuICAgIGlmICgha28udXRpbHMuY2FuU2V0UHJvdG90eXBlKSB7XG4gICAgICAgIC8vICdzdWJzY3JpYmFibGUnIHdvbid0IGJlIG9uIHRoZSBwcm90b3R5cGUgY2hhaW4gdW5sZXNzIHdlIHB1dCBpdCB0aGVyZSBkaXJlY3RseVxuICAgICAgICBrby51dGlscy5leHRlbmQob2JzZXJ2YWJsZSwga28uc3Vic2NyaWJhYmxlWydmbiddKTtcbiAgICB9XG4gICAga28uc3Vic2NyaWJhYmxlWydmbiddLmluaXQob2JzZXJ2YWJsZSk7XG5cbiAgICAvLyBJbmhlcml0IGZyb20gJ29ic2VydmFibGUnXG4gICAga28udXRpbHMuc2V0UHJvdG90eXBlT2ZPckV4dGVuZChvYnNlcnZhYmxlLCBvYnNlcnZhYmxlRm4pO1xuXG4gICAgaWYgKGtvLm9wdGlvbnNbJ2RlZmVyVXBkYXRlcyddKSB7XG4gICAgICAgIGtvLmV4dGVuZGVyc1snZGVmZXJyZWQnXShvYnNlcnZhYmxlLCB0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbn1cblxuLy8gRGVmaW5lIHByb3RvdHlwZSBmb3Igb2JzZXJ2YWJsZXNcbnZhciBvYnNlcnZhYmxlRm4gPSB7XG4gICAgJ2VxdWFsaXR5Q29tcGFyZXInOiB2YWx1ZXNBcmVQcmltaXRpdmVBbmRFcXVhbCxcbiAgICBwZWVrOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXNbb2JzZXJ2YWJsZUxhdGVzdFZhbHVlXTsgfSxcbiAgICB2YWx1ZUhhc011dGF0ZWQ6IGZ1bmN0aW9uICgpIHsgdGhpc1snbm90aWZ5U3Vic2NyaWJlcnMnXSh0aGlzW29ic2VydmFibGVMYXRlc3RWYWx1ZV0pOyB9LFxuICAgIHZhbHVlV2lsbE11dGF0ZTogZnVuY3Rpb24gKCkgeyB0aGlzWydub3RpZnlTdWJzY3JpYmVycyddKHRoaXNbb2JzZXJ2YWJsZUxhdGVzdFZhbHVlXSwgJ2JlZm9yZUNoYW5nZScpOyB9XG59O1xuXG4vLyBOb3RlIHRoYXQgZm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBwcm90byBhc3NpZ25tZW50LCB0aGVcbi8vIGluaGVyaXRhbmNlIGNoYWluIGlzIGNyZWF0ZWQgbWFudWFsbHkgaW4gdGhlIGtvLm9ic2VydmFibGUgY29uc3RydWN0b3JcbmlmIChrby51dGlscy5jYW5TZXRQcm90b3R5cGUpIHtcbiAgICBrby51dGlscy5zZXRQcm90b3R5cGVPZihvYnNlcnZhYmxlRm4sIGtvLnN1YnNjcmliYWJsZVsnZm4nXSk7XG59XG5cbnZhciBwcm90b1Byb3BlcnR5ID0ga28ub2JzZXJ2YWJsZS5wcm90b1Byb3BlcnR5ID0gJ19fa29fcHJvdG9fXyc7XG5vYnNlcnZhYmxlRm5bcHJvdG9Qcm9wZXJ0eV0gPSBrby5vYnNlcnZhYmxlO1xuXG5rby5oYXNQcm90b3R5cGUgPSBmdW5jdGlvbihpbnN0YW5jZSwgcHJvdG90eXBlKSB7XG4gICAgaWYgKChpbnN0YW5jZSA9PT0gbnVsbCkgfHwgKGluc3RhbmNlID09PSB1bmRlZmluZWQpIHx8IChpbnN0YW5jZVtwcm90b1Byb3BlcnR5XSA9PT0gdW5kZWZpbmVkKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpbnN0YW5jZVtwcm90b1Byb3BlcnR5XSA9PT0gcHJvdG90eXBlKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4ga28uaGFzUHJvdG90eXBlKGluc3RhbmNlW3Byb3RvUHJvcGVydHldLCBwcm90b3R5cGUpOyAvLyBXYWxrIHRoZSBwcm90b3R5cGUgY2hhaW5cbn07XG5cbmtvLmlzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBrby5oYXNQcm90b3R5cGUoaW5zdGFuY2UsIGtvLm9ic2VydmFibGUpO1xufVxua28uaXNXcml0ZWFibGVPYnNlcnZhYmxlID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgLy8gT2JzZXJ2YWJsZVxuICAgIGlmICgodHlwZW9mIGluc3RhbmNlID09ICdmdW5jdGlvbicpICYmIGluc3RhbmNlW3Byb3RvUHJvcGVydHldID09PSBrby5vYnNlcnZhYmxlKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyBXcml0ZWFibGUgZGVwZW5kZW50IG9ic2VydmFibGVcbiAgICBpZiAoKHR5cGVvZiBpbnN0YW5jZSA9PSAnZnVuY3Rpb24nKSAmJiAoaW5zdGFuY2VbcHJvdG9Qcm9wZXJ0eV0gPT09IGtvLmRlcGVuZGVudE9ic2VydmFibGUpICYmIChpbnN0YW5jZS5oYXNXcml0ZUZ1bmN0aW9uKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgLy8gQW55dGhpbmcgZWxzZVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxua28uZXhwb3J0U3ltYm9sKCdvYnNlcnZhYmxlJywga28ub2JzZXJ2YWJsZSk7XG5rby5leHBvcnRTeW1ib2woJ2lzT2JzZXJ2YWJsZScsIGtvLmlzT2JzZXJ2YWJsZSk7XG5rby5leHBvcnRTeW1ib2woJ2lzV3JpdGVhYmxlT2JzZXJ2YWJsZScsIGtvLmlzV3JpdGVhYmxlT2JzZXJ2YWJsZSk7XG5rby5leHBvcnRTeW1ib2woJ2lzV3JpdGFibGVPYnNlcnZhYmxlJywga28uaXNXcml0ZWFibGVPYnNlcnZhYmxlKTtcbmtvLmV4cG9ydFN5bWJvbCgnb2JzZXJ2YWJsZS5mbicsIG9ic2VydmFibGVGbik7XG5rby5leHBvcnRQcm9wZXJ0eShvYnNlcnZhYmxlRm4sICdwZWVrJywgb2JzZXJ2YWJsZUZuLnBlZWspO1xua28uZXhwb3J0UHJvcGVydHkob2JzZXJ2YWJsZUZuLCAndmFsdWVIYXNNdXRhdGVkJywgb2JzZXJ2YWJsZUZuLnZhbHVlSGFzTXV0YXRlZCk7XG5rby5leHBvcnRQcm9wZXJ0eShvYnNlcnZhYmxlRm4sICd2YWx1ZVdpbGxNdXRhdGUnLCBvYnNlcnZhYmxlRm4udmFsdWVXaWxsTXV0YXRlKTtcbmtvLm9ic2VydmFibGVBcnJheSA9IGZ1bmN0aW9uIChpbml0aWFsVmFsdWVzKSB7XG4gICAgaW5pdGlhbFZhbHVlcyA9IGluaXRpYWxWYWx1ZXMgfHwgW107XG5cbiAgICBpZiAodHlwZW9mIGluaXRpYWxWYWx1ZXMgIT0gJ29iamVjdCcgfHwgISgnbGVuZ3RoJyBpbiBpbml0aWFsVmFsdWVzKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGFyZ3VtZW50IHBhc3NlZCB3aGVuIGluaXRpYWxpemluZyBhbiBvYnNlcnZhYmxlIGFycmF5IG11c3QgYmUgYW4gYXJyYXksIG9yIG51bGwsIG9yIHVuZGVmaW5lZC5cIik7XG5cbiAgICB2YXIgcmVzdWx0ID0ga28ub2JzZXJ2YWJsZShpbml0aWFsVmFsdWVzKTtcbiAgICBrby51dGlscy5zZXRQcm90b3R5cGVPZk9yRXh0ZW5kKHJlc3VsdCwga28ub2JzZXJ2YWJsZUFycmF5WydmbiddKTtcbiAgICByZXR1cm4gcmVzdWx0LmV4dGVuZCh7J3RyYWNrQXJyYXlDaGFuZ2VzJzp0cnVlfSk7XG59O1xuXG5rby5vYnNlcnZhYmxlQXJyYXlbJ2ZuJ10gPSB7XG4gICAgJ3JlbW92ZSc6IGZ1bmN0aW9uICh2YWx1ZU9yUHJlZGljYXRlKSB7XG4gICAgICAgIHZhciB1bmRlcmx5aW5nQXJyYXkgPSB0aGlzLnBlZWsoKTtcbiAgICAgICAgdmFyIHJlbW92ZWRWYWx1ZXMgPSBbXTtcbiAgICAgICAgdmFyIHByZWRpY2F0ZSA9IHR5cGVvZiB2YWx1ZU9yUHJlZGljYXRlID09IFwiZnVuY3Rpb25cIiAmJiAha28uaXNPYnNlcnZhYmxlKHZhbHVlT3JQcmVkaWNhdGUpID8gdmFsdWVPclByZWRpY2F0ZSA6IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT09IHZhbHVlT3JQcmVkaWNhdGU7IH07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5kZXJseWluZ0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB1bmRlcmx5aW5nQXJyYXlbaV07XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGlmIChyZW1vdmVkVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlV2lsbE11dGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZW1vdmVkVmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgIHVuZGVybHlpbmdBcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZW1vdmVkVmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUhhc011dGF0ZWQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVtb3ZlZFZhbHVlcztcbiAgICB9LFxuXG4gICAgJ3JlbW92ZUFsbCc6IGZ1bmN0aW9uIChhcnJheU9mVmFsdWVzKSB7XG4gICAgICAgIC8vIElmIHlvdSBwYXNzZWQgemVybyBhcmdzLCB3ZSByZW1vdmUgZXZlcnl0aGluZ1xuICAgICAgICBpZiAoYXJyYXlPZlZhbHVlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YXIgdW5kZXJseWluZ0FycmF5ID0gdGhpcy5wZWVrKCk7XG4gICAgICAgICAgICB2YXIgYWxsVmFsdWVzID0gdW5kZXJseWluZ0FycmF5LnNsaWNlKDApO1xuICAgICAgICAgICAgdGhpcy52YWx1ZVdpbGxNdXRhdGUoKTtcbiAgICAgICAgICAgIHVuZGVybHlpbmdBcnJheS5zcGxpY2UoMCwgdW5kZXJseWluZ0FycmF5Lmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlSGFzTXV0YXRlZCgpO1xuICAgICAgICAgICAgcmV0dXJuIGFsbFZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB5b3UgcGFzc2VkIGFuIGFyZywgd2UgaW50ZXJwcmV0IGl0IGFzIGFuIGFycmF5IG9mIGVudHJpZXMgdG8gcmVtb3ZlXG4gICAgICAgIGlmICghYXJyYXlPZlZhbHVlcylcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgcmV0dXJuIHRoaXNbJ3JlbW92ZSddKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGtvLnV0aWxzLmFycmF5SW5kZXhPZihhcnJheU9mVmFsdWVzLCB2YWx1ZSkgPj0gMDtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgICdkZXN0cm95JzogZnVuY3Rpb24gKHZhbHVlT3JQcmVkaWNhdGUpIHtcbiAgICAgICAgdmFyIHVuZGVybHlpbmdBcnJheSA9IHRoaXMucGVlaygpO1xuICAgICAgICB2YXIgcHJlZGljYXRlID0gdHlwZW9mIHZhbHVlT3JQcmVkaWNhdGUgPT0gXCJmdW5jdGlvblwiICYmICFrby5pc09ic2VydmFibGUodmFsdWVPclByZWRpY2F0ZSkgPyB2YWx1ZU9yUHJlZGljYXRlIDogZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PT0gdmFsdWVPclByZWRpY2F0ZTsgfTtcbiAgICAgICAgdGhpcy52YWx1ZVdpbGxNdXRhdGUoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHVuZGVybHlpbmdBcnJheS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gdW5kZXJseWluZ0FycmF5W2ldO1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgdW5kZXJseWluZ0FycmF5W2ldW1wiX2Rlc3Ryb3lcIl0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWVIYXNNdXRhdGVkKCk7XG4gICAgfSxcblxuICAgICdkZXN0cm95QWxsJzogZnVuY3Rpb24gKGFycmF5T2ZWYWx1ZXMpIHtcbiAgICAgICAgLy8gSWYgeW91IHBhc3NlZCB6ZXJvIGFyZ3MsIHdlIGRlc3Ryb3kgZXZlcnl0aGluZ1xuICAgICAgICBpZiAoYXJyYXlPZlZhbHVlcyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXNbJ2Rlc3Ryb3knXShmdW5jdGlvbigpIHsgcmV0dXJuIHRydWUgfSk7XG5cbiAgICAgICAgLy8gSWYgeW91IHBhc3NlZCBhbiBhcmcsIHdlIGludGVycHJldCBpdCBhcyBhbiBhcnJheSBvZiBlbnRyaWVzIHRvIGRlc3Ryb3lcbiAgICAgICAgaWYgKCFhcnJheU9mVmFsdWVzKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICByZXR1cm4gdGhpc1snZGVzdHJveSddKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGtvLnV0aWxzLmFycmF5SW5kZXhPZihhcnJheU9mVmFsdWVzLCB2YWx1ZSkgPj0gMDtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgICdpbmRleE9mJzogZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdmFyIHVuZGVybHlpbmdBcnJheSA9IHRoaXMoKTtcbiAgICAgICAgcmV0dXJuIGtvLnV0aWxzLmFycmF5SW5kZXhPZih1bmRlcmx5aW5nQXJyYXksIGl0ZW0pO1xuICAgIH0sXG5cbiAgICAncmVwbGFjZSc6IGZ1bmN0aW9uKG9sZEl0ZW0sIG5ld0l0ZW0pIHtcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpc1snaW5kZXhPZiddKG9sZEl0ZW0pO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZVdpbGxNdXRhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucGVlaygpW2luZGV4XSA9IG5ld0l0ZW07XG4gICAgICAgICAgICB0aGlzLnZhbHVlSGFzTXV0YXRlZCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLy8gTm90ZSB0aGF0IGZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgcHJvdG8gYXNzaWdubWVudCwgdGhlXG4vLyBpbmhlcml0YW5jZSBjaGFpbiBpcyBjcmVhdGVkIG1hbnVhbGx5IGluIHRoZSBrby5vYnNlcnZhYmxlQXJyYXkgY29uc3RydWN0b3JcbmlmIChrby51dGlscy5jYW5TZXRQcm90b3R5cGUpIHtcbiAgICBrby51dGlscy5zZXRQcm90b3R5cGVPZihrby5vYnNlcnZhYmxlQXJyYXlbJ2ZuJ10sIGtvLm9ic2VydmFibGVbJ2ZuJ10pO1xufVxuXG4vLyBQb3B1bGF0ZSBrby5vYnNlcnZhYmxlQXJyYXkuZm4gd2l0aCByZWFkL3dyaXRlIGZ1bmN0aW9ucyBmcm9tIG5hdGl2ZSBhcnJheXNcbi8vIEltcG9ydGFudDogRG8gbm90IGFkZCBhbnkgYWRkaXRpb25hbCBmdW5jdGlvbnMgaGVyZSB0aGF0IG1heSByZWFzb25hYmx5IGJlIHVzZWQgdG8gKnJlYWQqIGRhdGEgZnJvbSB0aGUgYXJyYXlcbi8vIGJlY2F1c2Ugd2UnbGwgZXZhbCB0aGVtIHdpdGhvdXQgY2F1c2luZyBzdWJzY3JpcHRpb25zLCBzbyBrby5jb21wdXRlZCBvdXRwdXQgY291bGQgZW5kIHVwIGdldHRpbmcgc3RhbGVcbmtvLnV0aWxzLmFycmF5Rm9yRWFjaChbXCJwb3BcIiwgXCJwdXNoXCIsIFwicmV2ZXJzZVwiLCBcInNoaWZ0XCIsIFwic29ydFwiLCBcInNwbGljZVwiLCBcInVuc2hpZnRcIl0sIGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAga28ub2JzZXJ2YWJsZUFycmF5WydmbiddW21ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBVc2UgXCJwZWVrXCIgdG8gYXZvaWQgY3JlYXRpbmcgYSBzdWJzY3JpcHRpb24gaW4gYW55IGNvbXB1dGVkIHRoYXQgd2UncmUgZXhlY3V0aW5nIGluIHRoZSBjb250ZXh0IG9mXG4gICAgICAgIC8vIChmb3IgY29uc2lzdGVuY3kgd2l0aCBtdXRhdGluZyByZWd1bGFyIG9ic2VydmFibGVzKVxuICAgICAgICB2YXIgdW5kZXJseWluZ0FycmF5ID0gdGhpcy5wZWVrKCk7XG4gICAgICAgIHRoaXMudmFsdWVXaWxsTXV0YXRlKCk7XG4gICAgICAgIHRoaXMuY2FjaGVEaWZmRm9yS25vd25PcGVyYXRpb24odW5kZXJseWluZ0FycmF5LCBtZXRob2ROYW1lLCBhcmd1bWVudHMpO1xuICAgICAgICB2YXIgbWV0aG9kQ2FsbFJlc3VsdCA9IHVuZGVybHlpbmdBcnJheVttZXRob2ROYW1lXS5hcHBseSh1bmRlcmx5aW5nQXJyYXksIGFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudmFsdWVIYXNNdXRhdGVkKCk7XG4gICAgICAgIC8vIFRoZSBuYXRpdmUgc29ydCBhbmQgcmV2ZXJzZSBtZXRob2RzIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgYXJyYXksIGJ1dCBpdCBtYWtlcyBtb3JlIHNlbnNlIHRvIHJldHVybiB0aGUgb2JzZXJ2YWJsZSBhcnJheSBpbnN0ZWFkLlxuICAgICAgICByZXR1cm4gbWV0aG9kQ2FsbFJlc3VsdCA9PT0gdW5kZXJseWluZ0FycmF5ID8gdGhpcyA6IG1ldGhvZENhbGxSZXN1bHQ7XG4gICAgfTtcbn0pO1xuXG4vLyBQb3B1bGF0ZSBrby5vYnNlcnZhYmxlQXJyYXkuZm4gd2l0aCByZWFkLW9ubHkgZnVuY3Rpb25zIGZyb20gbmF0aXZlIGFycmF5c1xua28udXRpbHMuYXJyYXlGb3JFYWNoKFtcInNsaWNlXCJdLCBmdW5jdGlvbiAobWV0aG9kTmFtZSkge1xuICAgIGtvLm9ic2VydmFibGVBcnJheVsnZm4nXVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHVuZGVybHlpbmdBcnJheSA9IHRoaXMoKTtcbiAgICAgICAgcmV0dXJuIHVuZGVybHlpbmdBcnJheVttZXRob2ROYW1lXS5hcHBseSh1bmRlcmx5aW5nQXJyYXksIGFyZ3VtZW50cyk7XG4gICAgfTtcbn0pO1xuXG5rby5leHBvcnRTeW1ib2woJ29ic2VydmFibGVBcnJheScsIGtvLm9ic2VydmFibGVBcnJheSk7XG52YXIgYXJyYXlDaGFuZ2VFdmVudE5hbWUgPSAnYXJyYXlDaGFuZ2UnO1xua28uZXh0ZW5kZXJzWyd0cmFja0FycmF5Q2hhbmdlcyddID0gZnVuY3Rpb24odGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgLy8gVXNlIHRoZSBwcm92aWRlZCBvcHRpb25zLS1lYWNoIGNhbGwgdG8gdHJhY2tBcnJheUNoYW5nZXMgb3ZlcndyaXRlcyB0aGUgcHJldmlvdXNseSBzZXQgb3B0aW9uc1xuICAgIHRhcmdldC5jb21wYXJlQXJyYXlPcHRpb25zID0ge307XG4gICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMgPT0gXCJvYmplY3RcIikge1xuICAgICAgICBrby51dGlscy5leHRlbmQodGFyZ2V0LmNvbXBhcmVBcnJheU9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB0YXJnZXQuY29tcGFyZUFycmF5T3B0aW9uc1snc3BhcnNlJ10gPSB0cnVlO1xuXG4gICAgLy8gT25seSBtb2RpZnkgdGhlIHRhcmdldCBvYnNlcnZhYmxlIG9uY2VcbiAgICBpZiAodGFyZ2V0LmNhY2hlRGlmZkZvcktub3duT3BlcmF0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRyYWNraW5nQ2hhbmdlcyA9IGZhbHNlLFxuICAgICAgICBjYWNoZWREaWZmID0gbnVsbCxcbiAgICAgICAgYXJyYXlDaGFuZ2VTdWJzY3JpcHRpb24sXG4gICAgICAgIHBlbmRpbmdOb3RpZmljYXRpb25zID0gMCxcbiAgICAgICAgdW5kZXJseWluZ0JlZm9yZVN1YnNjcmlwdGlvbkFkZEZ1bmN0aW9uID0gdGFyZ2V0LmJlZm9yZVN1YnNjcmlwdGlvbkFkZCxcbiAgICAgICAgdW5kZXJseWluZ0FmdGVyU3Vic2NyaXB0aW9uUmVtb3ZlRnVuY3Rpb24gPSB0YXJnZXQuYWZ0ZXJTdWJzY3JpcHRpb25SZW1vdmU7XG5cbiAgICAvLyBXYXRjaCBcInN1YnNjcmliZVwiIGNhbGxzLCBhbmQgZm9yIGFycmF5IGNoYW5nZSBldmVudHMsIGVuc3VyZSBjaGFuZ2UgdHJhY2tpbmcgaXMgZW5hYmxlZFxuICAgIHRhcmdldC5iZWZvcmVTdWJzY3JpcHRpb25BZGQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKHVuZGVybHlpbmdCZWZvcmVTdWJzY3JpcHRpb25BZGRGdW5jdGlvbilcbiAgICAgICAgICAgIHVuZGVybHlpbmdCZWZvcmVTdWJzY3JpcHRpb25BZGRGdW5jdGlvbi5jYWxsKHRhcmdldCwgZXZlbnQpO1xuICAgICAgICBpZiAoZXZlbnQgPT09IGFycmF5Q2hhbmdlRXZlbnROYW1lKSB7XG4gICAgICAgICAgICB0cmFja0NoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy8gV2F0Y2ggXCJkaXNwb3NlXCIgY2FsbHMsIGFuZCBmb3IgYXJyYXkgY2hhbmdlIGV2ZW50cywgZW5zdXJlIGNoYW5nZSB0cmFja2luZyBpcyBkaXNhYmxlZCB3aGVuIGFsbCBhcmUgZGlzcG9zZWRcbiAgICB0YXJnZXQuYWZ0ZXJTdWJzY3JpcHRpb25SZW1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKHVuZGVybHlpbmdBZnRlclN1YnNjcmlwdGlvblJlbW92ZUZ1bmN0aW9uKVxuICAgICAgICAgICAgdW5kZXJseWluZ0FmdGVyU3Vic2NyaXB0aW9uUmVtb3ZlRnVuY3Rpb24uY2FsbCh0YXJnZXQsIGV2ZW50KTtcbiAgICAgICAgaWYgKGV2ZW50ID09PSBhcnJheUNoYW5nZUV2ZW50TmFtZSAmJiAhdGFyZ2V0Lmhhc1N1YnNjcmlwdGlvbnNGb3JFdmVudChhcnJheUNoYW5nZUV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgIGFycmF5Q2hhbmdlU3Vic2NyaXB0aW9uLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIHRyYWNraW5nQ2hhbmdlcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHRyYWNrQ2hhbmdlcygpIHtcbiAgICAgICAgLy8gQ2FsbGluZyAndHJhY2tDaGFuZ2VzJyBtdWx0aXBsZSB0aW1lcyBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIGl0IG9uY2VcbiAgICAgICAgaWYgKHRyYWNraW5nQ2hhbmdlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhY2tpbmdDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICAvLyBJbnRlcmNlcHQgXCJub3RpZnlTdWJzY3JpYmVyc1wiIHRvIHRyYWNrIGhvdyBtYW55IHRpbWVzIGl0IHdhcyBjYWxsZWQuXG4gICAgICAgIHZhciB1bmRlcmx5aW5nTm90aWZ5U3Vic2NyaWJlcnNGdW5jdGlvbiA9IHRhcmdldFsnbm90aWZ5U3Vic2NyaWJlcnMnXTtcbiAgICAgICAgdGFyZ2V0Wydub3RpZnlTdWJzY3JpYmVycyddID0gZnVuY3Rpb24odmFsdWVUb05vdGlmeSwgZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghZXZlbnQgfHwgZXZlbnQgPT09IGRlZmF1bHRFdmVudCkge1xuICAgICAgICAgICAgICAgICsrcGVuZGluZ05vdGlmaWNhdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZXJseWluZ05vdGlmeVN1YnNjcmliZXJzRnVuY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBFYWNoIHRpbWUgdGhlIGFycmF5IGNoYW5nZXMgdmFsdWUsIGNhcHR1cmUgYSBjbG9uZSBzbyB0aGF0IG9uIHRoZSBuZXh0XG4gICAgICAgIC8vIGNoYW5nZSBpdCdzIHBvc3NpYmxlIHRvIHByb2R1Y2UgYSBkaWZmXG4gICAgICAgIHZhciBwcmV2aW91c0NvbnRlbnRzID0gW10uY29uY2F0KHRhcmdldC5wZWVrKCkgfHwgW10pO1xuICAgICAgICBjYWNoZWREaWZmID0gbnVsbDtcbiAgICAgICAgYXJyYXlDaGFuZ2VTdWJzY3JpcHRpb24gPSB0YXJnZXQuc3Vic2NyaWJlKGZ1bmN0aW9uKGN1cnJlbnRDb250ZW50cykge1xuICAgICAgICAgICAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgY29udGVudHMgYW5kIGVuc3VyZSBpdCdzIGFuIGFycmF5XG4gICAgICAgICAgICBjdXJyZW50Q29udGVudHMgPSBbXS5jb25jYXQoY3VycmVudENvbnRlbnRzIHx8IFtdKTtcblxuICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgZGlmZiBhbmQgaXNzdWUgbm90aWZpY2F0aW9ucywgYnV0IG9ubHkgaWYgc29tZW9uZSBpcyBsaXN0ZW5pbmdcbiAgICAgICAgICAgIGlmICh0YXJnZXQuaGFzU3Vic2NyaXB0aW9uc0ZvckV2ZW50KGFycmF5Q2hhbmdlRXZlbnROYW1lKSkge1xuICAgICAgICAgICAgICAgIHZhciBjaGFuZ2VzID0gZ2V0Q2hhbmdlcyhwcmV2aW91c0NvbnRlbnRzLCBjdXJyZW50Q29udGVudHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBFbGltaW5hdGUgcmVmZXJlbmNlcyB0byB0aGUgb2xkLCByZW1vdmVkIGl0ZW1zLCBzbyB0aGV5IGNhbiBiZSBHQ2VkXG4gICAgICAgICAgICBwcmV2aW91c0NvbnRlbnRzID0gY3VycmVudENvbnRlbnRzO1xuICAgICAgICAgICAgY2FjaGVkRGlmZiA9IG51bGw7XG4gICAgICAgICAgICBwZW5kaW5nTm90aWZpY2F0aW9ucyA9IDA7XG5cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzICYmIGNoYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0Wydub3RpZnlTdWJzY3JpYmVycyddKGNoYW5nZXMsIGFycmF5Q2hhbmdlRXZlbnROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2hhbmdlcyhwcmV2aW91c0NvbnRlbnRzLCBjdXJyZW50Q29udGVudHMpIHtcbiAgICAgICAgLy8gV2UgdHJ5IHRvIHJlLXVzZSBjYWNoZWQgZGlmZnMuXG4gICAgICAgIC8vIFRoZSBzY2VuYXJpb3Mgd2hlcmUgcGVuZGluZ05vdGlmaWNhdGlvbnMgPiAxIGFyZSB3aGVuIHVzaW5nIHJhdGUtbGltaXRpbmcgb3IgdGhlIERlZmVycmVkIFVwZGF0ZXNcbiAgICAgICAgLy8gcGx1Z2luLCB3aGljaCB3aXRob3V0IHRoaXMgY2hlY2sgd291bGQgbm90IGJlIGNvbXBhdGlibGUgd2l0aCBhcnJheUNoYW5nZSBub3RpZmljYXRpb25zLiBOb3JtYWxseSxcbiAgICAgICAgLy8gbm90aWZpY2F0aW9ucyBhcmUgaXNzdWVkIGltbWVkaWF0ZWx5IHNvIHdlIHdvdWxkbid0IGJlIHF1ZXVlaW5nIHVwIG1vcmUgdGhhbiBvbmUuXG4gICAgICAgIGlmICghY2FjaGVkRGlmZiB8fCBwZW5kaW5nTm90aWZpY2F0aW9ucyA+IDEpIHtcbiAgICAgICAgICAgIGNhY2hlZERpZmYgPSBrby51dGlscy5jb21wYXJlQXJyYXlzKHByZXZpb3VzQ29udGVudHMsIGN1cnJlbnRDb250ZW50cywgdGFyZ2V0LmNvbXBhcmVBcnJheU9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhY2hlZERpZmY7XG4gICAgfVxuXG4gICAgdGFyZ2V0LmNhY2hlRGlmZkZvcktub3duT3BlcmF0aW9uID0gZnVuY3Rpb24ocmF3QXJyYXksIG9wZXJhdGlvbk5hbWUsIGFyZ3MpIHtcbiAgICAgICAgLy8gT25seSBydW4gaWYgd2UncmUgY3VycmVudGx5IHRyYWNraW5nIGNoYW5nZXMgZm9yIHRoaXMgb2JzZXJ2YWJsZSBhcnJheVxuICAgICAgICAvLyBhbmQgdGhlcmUgYXJlbid0IGFueSBwZW5kaW5nIGRlZmVycmVkIG5vdGlmaWNhdGlvbnMuXG4gICAgICAgIGlmICghdHJhY2tpbmdDaGFuZ2VzIHx8IHBlbmRpbmdOb3RpZmljYXRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRpZmYgPSBbXSxcbiAgICAgICAgICAgIGFycmF5TGVuZ3RoID0gcmF3QXJyYXkubGVuZ3RoLFxuICAgICAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcblxuICAgICAgICBmdW5jdGlvbiBwdXNoRGlmZihzdGF0dXMsIHZhbHVlLCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIGRpZmZbZGlmZi5sZW5ndGhdID0geyAnc3RhdHVzJzogc3RhdHVzLCAndmFsdWUnOiB2YWx1ZSwgJ2luZGV4JzogaW5kZXggfTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvbk5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3B1c2gnOlxuICAgICAgICAgICAgICAgIG9mZnNldCA9IGFycmF5TGVuZ3RoO1xuICAgICAgICAgICAgY2FzZSAndW5zaGlmdCc6XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3NMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgcHVzaERpZmYoJ2FkZGVkJywgYXJnc1tpbmRleF0sIG9mZnNldCArIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3BvcCc6XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gYXJyYXlMZW5ndGggLSAxO1xuICAgICAgICAgICAgY2FzZSAnc2hpZnQnOlxuICAgICAgICAgICAgICAgIGlmIChhcnJheUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBwdXNoRGlmZignZGVsZXRlZCcsIHJhd0FycmF5W29mZnNldF0sIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdzcGxpY2UnOlxuICAgICAgICAgICAgICAgIC8vIE5lZ2F0aXZlIHN0YXJ0IGluZGV4IG1lYW5zICdmcm9tIGVuZCBvZiBhcnJheScuIEFmdGVyIHRoYXQgd2UgY2xhbXAgdG8gWzAuLi5hcnJheUxlbmd0aF0uXG4gICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L3NwbGljZVxuICAgICAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgYXJnc1swXSA8IDAgPyBhcnJheUxlbmd0aCArIGFyZ3NbMF0gOiBhcmdzWzBdKSwgYXJyYXlMZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICBlbmREZWxldGVJbmRleCA9IGFyZ3NMZW5ndGggPT09IDEgPyBhcnJheUxlbmd0aCA6IE1hdGgubWluKHN0YXJ0SW5kZXggKyAoYXJnc1sxXSB8fCAwKSwgYXJyYXlMZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICBlbmRBZGRJbmRleCA9IHN0YXJ0SW5kZXggKyBhcmdzTGVuZ3RoIC0gMixcbiAgICAgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBNYXRoLm1heChlbmREZWxldGVJbmRleCwgZW5kQWRkSW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbnMgPSBbXSwgZGVsZXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSBzdGFydEluZGV4LCBhcmdzSW5kZXggPSAyOyBpbmRleCA8IGVuZEluZGV4OyArK2luZGV4LCArK2FyZ3NJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBlbmREZWxldGVJbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0aW9ucy5wdXNoKHB1c2hEaWZmKCdkZWxldGVkJywgcmF3QXJyYXlbaW5kZXhdLCBpbmRleCkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBlbmRBZGRJbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9ucy5wdXNoKHB1c2hEaWZmKCdhZGRlZCcsIGFyZ3NbYXJnc0luZGV4XSwgaW5kZXgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAga28udXRpbHMuZmluZE1vdmVzSW5BcnJheUNvbXBhcmlzb24oZGVsZXRpb25zLCBhZGRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjYWNoZWREaWZmID0gZGlmZjtcbiAgICB9O1xufTtcbnZhciBjb21wdXRlZFN0YXRlID0ga28udXRpbHMuY3JlYXRlU3ltYm9sT3JTdHJpbmcoJ19zdGF0ZScpO1xuXG5rby5jb21wdXRlZCA9IGtvLmRlcGVuZGVudE9ic2VydmFibGUgPSBmdW5jdGlvbiAoZXZhbHVhdG9yRnVuY3Rpb25Pck9wdGlvbnMsIGV2YWx1YXRvckZ1bmN0aW9uVGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBldmFsdWF0b3JGdW5jdGlvbk9yT3B0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAvLyBTaW5nbGUtcGFyYW1ldGVyIHN5bnRheCAtIGV2ZXJ5dGhpbmcgaXMgb24gdGhpcyBcIm9wdGlvbnNcIiBwYXJhbVxuICAgICAgICBvcHRpb25zID0gZXZhbHVhdG9yRnVuY3Rpb25Pck9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTXVsdGktcGFyYW1ldGVyIHN5bnRheCAtIGNvbnN0cnVjdCB0aGUgb3B0aW9ucyBhY2NvcmRpbmcgdG8gdGhlIHBhcmFtcyBwYXNzZWRcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGlmIChldmFsdWF0b3JGdW5jdGlvbk9yT3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9uc1tcInJlYWRcIl0gPSBldmFsdWF0b3JGdW5jdGlvbk9yT3B0aW9ucztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnNbXCJyZWFkXCJdICE9IFwiZnVuY3Rpb25cIilcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJQYXNzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUga28uY29tcHV0ZWRcIik7XG5cbiAgICB2YXIgd3JpdGVGdW5jdGlvbiA9IG9wdGlvbnNbXCJ3cml0ZVwiXTtcbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICAgIGxhdGVzdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGlzU3RhbGU6IHRydWUsXG4gICAgICAgIGlzQmVpbmdFdmFsdWF0ZWQ6IGZhbHNlLFxuICAgICAgICBzdXBwcmVzc0Rpc3Bvc2FsVW50aWxEaXNwb3NlV2hlblJldHVybnNGYWxzZTogZmFsc2UsXG4gICAgICAgIGlzRGlzcG9zZWQ6IGZhbHNlLFxuICAgICAgICBwdXJlOiBmYWxzZSxcbiAgICAgICAgaXNTbGVlcGluZzogZmFsc2UsXG4gICAgICAgIHJlYWRGdW5jdGlvbjogb3B0aW9uc1tcInJlYWRcIl0sXG4gICAgICAgIGV2YWx1YXRvckZ1bmN0aW9uVGFyZ2V0OiBldmFsdWF0b3JGdW5jdGlvblRhcmdldCB8fCBvcHRpb25zW1wib3duZXJcIl0sXG4gICAgICAgIGRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZDogb3B0aW9uc1tcImRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZFwiXSB8fCBvcHRpb25zLmRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZCB8fCBudWxsLFxuICAgICAgICBkaXNwb3NlV2hlbjogb3B0aW9uc1tcImRpc3Bvc2VXaGVuXCJdIHx8IG9wdGlvbnMuZGlzcG9zZVdoZW4sXG4gICAgICAgIGRvbU5vZGVEaXNwb3NhbENhbGxiYWNrOiBudWxsLFxuICAgICAgICBkZXBlbmRlbmN5VHJhY2tpbmc6IHt9LFxuICAgICAgICBkZXBlbmRlbmNpZXNDb3VudDogMCxcbiAgICAgICAgZXZhbHVhdGlvblRpbWVvdXRJbnN0YW5jZTogbnVsbFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlZE9ic2VydmFibGUoKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB3cml0ZUZ1bmN0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBXcml0aW5nIGEgdmFsdWVcbiAgICAgICAgICAgICAgICB3cml0ZUZ1bmN0aW9uLmFwcGx5KHN0YXRlLmV2YWx1YXRvckZ1bmN0aW9uVGFyZ2V0LCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgd3JpdGUgYSB2YWx1ZSB0byBhIGtvLmNvbXB1dGVkIHVubGVzcyB5b3Ugc3BlY2lmeSBhICd3cml0ZScgb3B0aW9uLiBJZiB5b3Ugd2lzaCB0byByZWFkIHRoZSBjdXJyZW50IHZhbHVlLCBkb24ndCBwYXNzIGFueSBwYXJhbWV0ZXJzLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzOyAvLyBQZXJtaXRzIGNoYWluZWQgYXNzaWdubWVudHNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJlYWRpbmcgdGhlIHZhbHVlXG4gICAgICAgICAgICBrby5kZXBlbmRlbmN5RGV0ZWN0aW9uLnJlZ2lzdGVyRGVwZW5kZW5jeShjb21wdXRlZE9ic2VydmFibGUpO1xuICAgICAgICAgICAgaWYgKHN0YXRlLmlzU3RhbGUgfHwgKHN0YXRlLmlzU2xlZXBpbmcgJiYgY29tcHV0ZWRPYnNlcnZhYmxlLmhhdmVEZXBlbmRlbmNpZXNDaGFuZ2VkKCkpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZWRPYnNlcnZhYmxlLmV2YWx1YXRlSW1tZWRpYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUubGF0ZXN0VmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wdXRlZE9ic2VydmFibGVbY29tcHV0ZWRTdGF0ZV0gPSBzdGF0ZTtcbiAgICBjb21wdXRlZE9ic2VydmFibGUuaGFzV3JpdGVGdW5jdGlvbiA9IHR5cGVvZiB3cml0ZUZ1bmN0aW9uID09PSBcImZ1bmN0aW9uXCI7XG5cbiAgICAvLyBJbmhlcml0IGZyb20gJ3N1YnNjcmliYWJsZSdcbiAgICBpZiAoIWtvLnV0aWxzLmNhblNldFByb3RvdHlwZSkge1xuICAgICAgICAvLyAnc3Vic2NyaWJhYmxlJyB3b24ndCBiZSBvbiB0aGUgcHJvdG90eXBlIGNoYWluIHVubGVzcyB3ZSBwdXQgaXQgdGhlcmUgZGlyZWN0bHlcbiAgICAgICAga28udXRpbHMuZXh0ZW5kKGNvbXB1dGVkT2JzZXJ2YWJsZSwga28uc3Vic2NyaWJhYmxlWydmbiddKTtcbiAgICB9XG4gICAga28uc3Vic2NyaWJhYmxlWydmbiddLmluaXQoY29tcHV0ZWRPYnNlcnZhYmxlKTtcblxuICAgIC8vIEluaGVyaXQgZnJvbSAnY29tcHV0ZWQnXG4gICAga28udXRpbHMuc2V0UHJvdG90eXBlT2ZPckV4dGVuZChjb21wdXRlZE9ic2VydmFibGUsIGNvbXB1dGVkRm4pO1xuXG4gICAgaWYgKG9wdGlvbnNbJ3B1cmUnXSkge1xuICAgICAgICBzdGF0ZS5wdXJlID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUuaXNTbGVlcGluZyA9IHRydWU7ICAgICAvLyBTdGFydHMgb2ZmIHNsZWVwaW5nOyB3aWxsIGF3YWtlIG9uIHRoZSBmaXJzdCBzdWJzY3JpcHRpb25cbiAgICAgICAga28udXRpbHMuZXh0ZW5kKGNvbXB1dGVkT2JzZXJ2YWJsZSwgcHVyZUNvbXB1dGVkT3ZlcnJpZGVzKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnNbJ2RlZmVyRXZhbHVhdGlvbiddKSB7XG4gICAgICAgIGtvLnV0aWxzLmV4dGVuZChjb21wdXRlZE9ic2VydmFibGUsIGRlZmVyRXZhbHVhdGlvbk92ZXJyaWRlcyk7XG4gICAgfVxuXG4gICAgaWYgKGtvLm9wdGlvbnNbJ2RlZmVyVXBkYXRlcyddKSB7XG4gICAgICAgIGtvLmV4dGVuZGVyc1snZGVmZXJyZWQnXShjb21wdXRlZE9ic2VydmFibGUsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChERUJVRykge1xuICAgICAgICAvLyAjMTczMSAtIEFpZCBkZWJ1Z2dpbmcgYnkgZXhwb3NpbmcgdGhlIGNvbXB1dGVkJ3Mgb3B0aW9uc1xuICAgICAgICBjb21wdXRlZE9ic2VydmFibGVbXCJfb3B0aW9uc1wiXSA9IG9wdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZCkge1xuICAgICAgICAvLyBTaW5jZSB0aGlzIGNvbXB1dGVkIGlzIGFzc29jaWF0ZWQgd2l0aCBhIERPTSBub2RlLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBkaXNwb3NlIHRoZSBjb21wdXRlZFxuICAgICAgICAvLyB1bnRpbCB0aGUgRE9NIG5vZGUgaXMgKnJlbW92ZWQqIGZyb20gdGhlIGRvY3VtZW50IChhcyBvcHBvc2VkIHRvIG5ldmVyIGhhdmluZyBiZWVuIGluIHRoZSBkb2N1bWVudCksXG4gICAgICAgIC8vIHdlJ2xsIHByZXZlbnQgZGlzcG9zYWwgdW50aWwgXCJkaXNwb3NlV2hlblwiIGZpcnN0IHJldHVybnMgZmFsc2UuXG4gICAgICAgIHN0YXRlLnN1cHByZXNzRGlzcG9zYWxVbnRpbERpc3Bvc2VXaGVuUmV0dXJuc0ZhbHNlID0gdHJ1ZTtcblxuICAgICAgICAvLyBkaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQ6IHRydWUgY2FuIGJlIHVzZWQgdG8gb3B0IGludG8gdGhlIFwib25seSBkaXNwb3NlIGFmdGVyIGZpcnN0IGZhbHNlIHJlc3VsdFwiXG4gICAgICAgIC8vIGJlaGF2aW91ciBldmVuIGlmIHRoZXJlJ3Mgbm8gc3BlY2lmaWMgbm9kZSB0byB3YXRjaC4gSW4gdGhhdCBjYXNlLCBjbGVhciB0aGUgb3B0aW9uIHNvIHdlIGRvbid0IHRyeVxuICAgICAgICAvLyB0byB3YXRjaCBmb3IgYSBub24tbm9kZSdzIGRpc3Bvc2FsLiBUaGlzIHRlY2huaXF1ZSBpcyBpbnRlbmRlZCBmb3IgS08ncyBpbnRlcm5hbCB1c2Ugb25seSBhbmQgc2hvdWxkbid0XG4gICAgICAgIC8vIGJlIGRvY3VtZW50ZWQgb3IgdXNlZCBieSBhcHBsaWNhdGlvbiBjb2RlLCBhcyBpdCdzIGxpa2VseSB0byBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBLTy5cbiAgICAgICAgaWYgKCFzdGF0ZS5kaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQubm9kZVR5cGUpIHtcbiAgICAgICAgICAgIHN0YXRlLmRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFdmFsdWF0ZSwgdW5sZXNzIHNsZWVwaW5nIG9yIGRlZmVyRXZhbHVhdGlvbiBpcyB0cnVlXG4gICAgaWYgKCFzdGF0ZS5pc1NsZWVwaW5nICYmICFvcHRpb25zWydkZWZlckV2YWx1YXRpb24nXSkge1xuICAgICAgICBjb21wdXRlZE9ic2VydmFibGUuZXZhbHVhdGVJbW1lZGlhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBBdHRhY2ggYSBET00gbm9kZSBkaXNwb3NhbCBjYWxsYmFjayBzbyB0aGF0IHRoZSBjb21wdXRlZCB3aWxsIGJlIHByb2FjdGl2ZWx5IGRpc3Bvc2VkIGFzIHNvb24gYXMgdGhlIG5vZGUgaXNcbiAgICAvLyByZW1vdmVkIHVzaW5nIGtvLnJlbW92ZU5vZGUuIEJ1dCBza2lwIGlmIGlzQWN0aXZlIGlzIGZhbHNlICh0aGVyZSB3aWxsIG5ldmVyIGJlIGFueSBkZXBlbmRlbmNpZXMgdG8gZGlzcG9zZSkuXG4gICAgaWYgKHN0YXRlLmRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZCAmJiBjb21wdXRlZE9ic2VydmFibGUuaXNBY3RpdmUoKSkge1xuICAgICAgICBrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKHN0YXRlLmRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZCwgc3RhdGUuZG9tTm9kZURpc3Bvc2FsQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb21wdXRlZE9ic2VydmFibGUuZGlzcG9zZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcHV0ZWRPYnNlcnZhYmxlO1xufTtcblxuLy8gVXRpbGl0eSBmdW5jdGlvbiB0aGF0IGRpc3Bvc2VzIGEgZ2l2ZW4gZGVwZW5kZW5jeVRyYWNraW5nIGVudHJ5XG5mdW5jdGlvbiBjb21wdXRlZERpc3Bvc2VEZXBlbmRlbmN5Q2FsbGJhY2soaWQsIGVudHJ5VG9EaXNwb3NlKSB7XG4gICAgaWYgKGVudHJ5VG9EaXNwb3NlICE9PSBudWxsICYmIGVudHJ5VG9EaXNwb3NlLmRpc3Bvc2UpIHtcbiAgICAgICAgZW50cnlUb0Rpc3Bvc2UuZGlzcG9zZSgpO1xuICAgIH1cbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBlYWNoIHRpbWUgYSBkZXBlbmRlbmN5IGlzIGRldGVjdGVkIHdoaWxlIGV2YWx1YXRpbmcgYSBjb21wdXRlZC5cbi8vIEl0J3MgZmFjdG9yZWQgb3V0IGFzIGEgc2hhcmVkIGZ1bmN0aW9uIHRvIGF2b2lkIGNyZWF0aW5nIHVubmVjZXNzYXJ5IGZ1bmN0aW9uIGluc3RhbmNlcyBkdXJpbmcgZXZhbHVhdGlvbi5cbmZ1bmN0aW9uIGNvbXB1dGVkQmVnaW5EZXBlbmRlbmN5RGV0ZWN0aW9uQ2FsbGJhY2soc3Vic2NyaWJhYmxlLCBpZCkge1xuICAgIHZhciBjb21wdXRlZE9ic2VydmFibGUgPSB0aGlzLmNvbXB1dGVkT2JzZXJ2YWJsZSxcbiAgICAgICAgc3RhdGUgPSBjb21wdXRlZE9ic2VydmFibGVbY29tcHV0ZWRTdGF0ZV07XG4gICAgaWYgKCFzdGF0ZS5pc0Rpc3Bvc2VkKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc3Bvc2FsQ291bnQgJiYgdGhpcy5kaXNwb3NhbENhbmRpZGF0ZXNbaWRdKSB7XG4gICAgICAgICAgICAvLyBEb24ndCB3YW50IHRvIGRpc3Bvc2UgdGhpcyBzdWJzY3JpcHRpb24sIGFzIGl0J3Mgc3RpbGwgYmVpbmcgdXNlZFxuICAgICAgICAgICAgY29tcHV0ZWRPYnNlcnZhYmxlLmFkZERlcGVuZGVuY3lUcmFja2luZyhpZCwgc3Vic2NyaWJhYmxlLCB0aGlzLmRpc3Bvc2FsQ2FuZGlkYXRlc1tpZF0pO1xuICAgICAgICAgICAgdGhpcy5kaXNwb3NhbENhbmRpZGF0ZXNbaWRdID0gbnVsbDsgLy8gTm8gbmVlZCB0byBhY3R1YWxseSBkZWxldGUgdGhlIHByb3BlcnR5IC0gZGlzcG9zYWxDYW5kaWRhdGVzIGlzIGEgdHJhbnNpZW50IG9iamVjdCBhbnl3YXlcbiAgICAgICAgICAgIC0tdGhpcy5kaXNwb3NhbENvdW50O1xuICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZS5kZXBlbmRlbmN5VHJhY2tpbmdbaWRdKSB7XG4gICAgICAgICAgICAvLyBCcmFuZCBuZXcgc3Vic2NyaXB0aW9uIC0gYWRkIGl0XG4gICAgICAgICAgICBjb21wdXRlZE9ic2VydmFibGUuYWRkRGVwZW5kZW5jeVRyYWNraW5nKGlkLCBzdWJzY3JpYmFibGUsIHN0YXRlLmlzU2xlZXBpbmcgPyB7IF90YXJnZXQ6IHN1YnNjcmliYWJsZSB9IDogY29tcHV0ZWRPYnNlcnZhYmxlLnN1YnNjcmliZVRvRGVwZW5kZW5jeShzdWJzY3JpYmFibGUpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxudmFyIGNvbXB1dGVkRm4gPSB7XG4gICAgXCJlcXVhbGl0eUNvbXBhcmVyXCI6IHZhbHVlc0FyZVByaW1pdGl2ZUFuZEVxdWFsLFxuICAgIGdldERlcGVuZGVuY2llc0NvdW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW2NvbXB1dGVkU3RhdGVdLmRlcGVuZGVuY2llc0NvdW50O1xuICAgIH0sXG4gICAgYWRkRGVwZW5kZW5jeVRyYWNraW5nOiBmdW5jdGlvbiAoaWQsIHRhcmdldCwgdHJhY2tpbmdPYmopIHtcbiAgICAgICAgaWYgKHRoaXNbY29tcHV0ZWRTdGF0ZV0ucHVyZSAmJiB0YXJnZXQgPT09IHRoaXMpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiQSAncHVyZScgY29tcHV0ZWQgbXVzdCBub3QgYmUgY2FsbGVkIHJlY3Vyc2l2ZWx5XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpc1tjb21wdXRlZFN0YXRlXS5kZXBlbmRlbmN5VHJhY2tpbmdbaWRdID0gdHJhY2tpbmdPYmo7XG4gICAgICAgIHRyYWNraW5nT2JqLl9vcmRlciA9IHRoaXNbY29tcHV0ZWRTdGF0ZV0uZGVwZW5kZW5jaWVzQ291bnQrKztcbiAgICAgICAgdHJhY2tpbmdPYmouX3ZlcnNpb24gPSB0YXJnZXQuZ2V0VmVyc2lvbigpO1xuICAgIH0sXG4gICAgaGF2ZURlcGVuZGVuY2llc0NoYW5nZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlkLCBkZXBlbmRlbmN5LCBkZXBlbmRlbmN5VHJhY2tpbmcgPSB0aGlzW2NvbXB1dGVkU3RhdGVdLmRlcGVuZGVuY3lUcmFja2luZztcbiAgICAgICAgZm9yIChpZCBpbiBkZXBlbmRlbmN5VHJhY2tpbmcpIHtcbiAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5VHJhY2tpbmcuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgICAgICAgICAgZGVwZW5kZW5jeSA9IGRlcGVuZGVuY3lUcmFja2luZ1tpZF07XG4gICAgICAgICAgICAgICAgaWYgKGRlcGVuZGVuY3kuX3RhcmdldC5oYXNDaGFuZ2VkKGRlcGVuZGVuY3kuX3ZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWFya0RpcnR5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFByb2Nlc3MgXCJkaXJ0eVwiIGV2ZW50cyBpZiB3ZSBjYW4gaGFuZGxlIGRlbGF5ZWQgbm90aWZpY2F0aW9uc1xuICAgICAgICBpZiAodGhpcy5fZXZhbERlbGF5ZWQgJiYgIXRoaXNbY29tcHV0ZWRTdGF0ZV0uaXNCZWluZ0V2YWx1YXRlZCkge1xuICAgICAgICAgICAgdGhpcy5fZXZhbERlbGF5ZWQoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaXNBY3RpdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbY29tcHV0ZWRTdGF0ZV0uaXNTdGFsZSB8fCB0aGlzW2NvbXB1dGVkU3RhdGVdLmRlcGVuZGVuY2llc0NvdW50ID4gMDtcbiAgICB9LFxuICAgIHJlc3BvbmRUb0NoYW5nZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBJZ25vcmUgXCJjaGFuZ2VcIiBldmVudHMgaWYgd2UndmUgYWxyZWFkeSBzY2hlZHVsZWQgYSBkZWxheWVkIG5vdGlmaWNhdGlvblxuICAgICAgICBpZiAoIXRoaXMuX25vdGlmaWNhdGlvbklzUGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZVBvc3NpYmx5QXN5bmMoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc3Vic2NyaWJlVG9EZXBlbmRlbmN5OiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIGlmICh0YXJnZXQuX2RlZmVyVXBkYXRlcyAmJiAhdGhpc1tjb21wdXRlZFN0YXRlXS5kaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQpIHtcbiAgICAgICAgICAgIHZhciBkaXJ0eVN1YiA9IHRhcmdldC5zdWJzY3JpYmUodGhpcy5tYXJrRGlydHksIHRoaXMsICdkaXJ0eScpLFxuICAgICAgICAgICAgICAgIGNoYW5nZVN1YiA9IHRhcmdldC5zdWJzY3JpYmUodGhpcy5yZXNwb25kVG9DaGFuZ2UsIHRoaXMpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBfdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICAgICAgZGlzcG9zZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBkaXJ0eVN1Yi5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZVN1Yi5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQuc3Vic2NyaWJlKHRoaXMuZXZhbHVhdGVQb3NzaWJseUFzeW5jLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZXZhbHVhdGVQb3NzaWJseUFzeW5jOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb21wdXRlZE9ic2VydmFibGUgPSB0aGlzLFxuICAgICAgICAgICAgdGhyb3R0bGVFdmFsdWF0aW9uVGltZW91dCA9IGNvbXB1dGVkT2JzZXJ2YWJsZVsndGhyb3R0bGVFdmFsdWF0aW9uJ107XG4gICAgICAgIGlmICh0aHJvdHRsZUV2YWx1YXRpb25UaW1lb3V0ICYmIHRocm90dGxlRXZhbHVhdGlvblRpbWVvdXQgPj0gMCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXNbY29tcHV0ZWRTdGF0ZV0uZXZhbHVhdGlvblRpbWVvdXRJbnN0YW5jZSk7XG4gICAgICAgICAgICB0aGlzW2NvbXB1dGVkU3RhdGVdLmV2YWx1YXRpb25UaW1lb3V0SW5zdGFuY2UgPSBrby51dGlscy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlZE9ic2VydmFibGUuZXZhbHVhdGVJbW1lZGlhdGUodHJ1ZSAvKm5vdGlmeUNoYW5nZSovKTtcbiAgICAgICAgICAgIH0sIHRocm90dGxlRXZhbHVhdGlvblRpbWVvdXQpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbXB1dGVkT2JzZXJ2YWJsZS5fZXZhbERlbGF5ZWQpIHtcbiAgICAgICAgICAgIGNvbXB1dGVkT2JzZXJ2YWJsZS5fZXZhbERlbGF5ZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbXB1dGVkT2JzZXJ2YWJsZS5ldmFsdWF0ZUltbWVkaWF0ZSh0cnVlIC8qbm90aWZ5Q2hhbmdlKi8pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBldmFsdWF0ZUltbWVkaWF0ZTogZnVuY3Rpb24gKG5vdGlmeUNoYW5nZSkge1xuICAgICAgICB2YXIgY29tcHV0ZWRPYnNlcnZhYmxlID0gdGhpcyxcbiAgICAgICAgICAgIHN0YXRlID0gY29tcHV0ZWRPYnNlcnZhYmxlW2NvbXB1dGVkU3RhdGVdLFxuICAgICAgICAgICAgZGlzcG9zZVdoZW4gPSBzdGF0ZS5kaXNwb3NlV2hlbjtcblxuICAgICAgICBpZiAoc3RhdGUuaXNCZWluZ0V2YWx1YXRlZCkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGV2YWx1YXRpb24gb2YgYSBrby5jb21wdXRlZCBjYXVzZXMgc2lkZSBlZmZlY3RzLCBpdCdzIHBvc3NpYmxlIHRoYXQgaXQgd2lsbCB0cmlnZ2VyIGl0cyBvd24gcmUtZXZhbHVhdGlvbi5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGRlc2lyYWJsZSAoaXQncyBoYXJkIGZvciBhIGRldmVsb3BlciB0byByZWFsaXNlIGEgY2hhaW4gb2YgZGVwZW5kZW5jaWVzIG1pZ2h0IGNhdXNlIHRoaXMsIGFuZCB0aGV5IGFsbW9zdFxuICAgICAgICAgICAgLy8gY2VydGFpbmx5IGRpZG4ndCBpbnRlbmQgaW5maW5pdGUgcmUtZXZhbHVhdGlvbnMpLiBTbywgZm9yIHByZWRpY3RhYmlsaXR5LCB3ZSBzaW1wbHkgcHJldmVudCBrby5jb21wdXRlZHMgZnJvbSBjYXVzaW5nXG4gICAgICAgICAgICAvLyB0aGVpciBvd24gcmUtZXZhbHVhdGlvbi4gRnVydGhlciBkaXNjdXNzaW9uIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9TdGV2ZVNhbmRlcnNvbi9rbm9ja291dC9wdWxsLzM4N1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRG8gbm90IGV2YWx1YXRlIChhbmQgcG9zc2libHkgY2FwdHVyZSBuZXcgZGVwZW5kZW5jaWVzKSBpZiBkaXNwb3NlZFxuICAgICAgICBpZiAoc3RhdGUuaXNEaXNwb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLmRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZCAmJiAha28udXRpbHMuZG9tTm9kZUlzQXR0YWNoZWRUb0RvY3VtZW50KHN0YXRlLmRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZCkgfHwgZGlzcG9zZVdoZW4gJiYgZGlzcG9zZVdoZW4oKSkge1xuICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQgYWJvdmUgYWJvdXQgc3VwcHJlc3NEaXNwb3NhbFVudGlsRGlzcG9zZVdoZW5SZXR1cm5zRmFsc2VcbiAgICAgICAgICAgIGlmICghc3RhdGUuc3VwcHJlc3NEaXNwb3NhbFVudGlsRGlzcG9zZVdoZW5SZXR1cm5zRmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlZE9ic2VydmFibGUuZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0IGp1c3QgZGlkIHJldHVybiBmYWxzZSwgc28gd2UgY2FuIHN0b3Agc3VwcHJlc3Npbmcgbm93XG4gICAgICAgICAgICBzdGF0ZS5zdXBwcmVzc0Rpc3Bvc2FsVW50aWxEaXNwb3NlV2hlblJldHVybnNGYWxzZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUuaXNCZWluZ0V2YWx1YXRlZCA9IHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmV2YWx1YXRlSW1tZWRpYXRlX0NhbGxSZWFkV2l0aERlcGVuZGVuY3lEZXRlY3Rpb24obm90aWZ5Q2hhbmdlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHN0YXRlLmlzQmVpbmdFdmFsdWF0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RhdGUuZGVwZW5kZW5jaWVzQ291bnQpIHtcbiAgICAgICAgICAgIGNvbXB1dGVkT2JzZXJ2YWJsZS5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGV2YWx1YXRlSW1tZWRpYXRlX0NhbGxSZWFkV2l0aERlcGVuZGVuY3lEZXRlY3Rpb246IGZ1bmN0aW9uIChub3RpZnlDaGFuZ2UpIHtcbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyByZWFsbHkganVzdCBwYXJ0IG9mIHRoZSBldmFsdWF0ZUltbWVkaWF0ZSBsb2dpYy4gWW91IHdvdWxkIG5ldmVyIGNhbGwgaXQgZnJvbSBhbnl3aGVyZSBlbHNlLlxuICAgICAgICAvLyBGYWN0b3JpbmcgaXQgb3V0IGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBtZWFucyBpdCBjYW4gYmUgaW5kZXBlbmRlbnQgb2YgdGhlIHRyeS9jYXRjaCBibG9jayBpbiBldmFsdWF0ZUltbWVkaWF0ZSxcbiAgICAgICAgLy8gd2hpY2ggY29udHJpYnV0ZXMgdG8gc2F2aW5nIGFib3V0IDQwJSBvZmYgdGhlIENQVSBvdmVyaGVhZCBvZiBjb21wdXRlZCBldmFsdWF0aW9uIChvbiBWOCBhdCBsZWFzdCkuXG5cbiAgICAgICAgdmFyIGNvbXB1dGVkT2JzZXJ2YWJsZSA9IHRoaXMsXG4gICAgICAgICAgICBzdGF0ZSA9IGNvbXB1dGVkT2JzZXJ2YWJsZVtjb21wdXRlZFN0YXRlXTtcblxuICAgICAgICAvLyBJbml0aWFsbHksIHdlIGFzc3VtZSB0aGF0IG5vbmUgb2YgdGhlIHN1YnNjcmlwdGlvbnMgYXJlIHN0aWxsIGJlaW5nIHVzZWQgKGkuZS4sIGFsbCBhcmUgY2FuZGlkYXRlcyBmb3IgZGlzcG9zYWwpLlxuICAgICAgICAvLyBUaGVuLCBkdXJpbmcgZXZhbHVhdGlvbiwgd2UgY3Jvc3Mgb2ZmIGFueSB0aGF0IGFyZSBpbiBmYWN0IHN0aWxsIGJlaW5nIHVzZWQuXG4gICAgICAgIHZhciBpc0luaXRpYWwgPSBzdGF0ZS5wdXJlID8gdW5kZWZpbmVkIDogIXN0YXRlLmRlcGVuZGVuY2llc0NvdW50LCAgIC8vIElmIHdlJ3JlIGV2YWx1YXRpbmcgd2hlbiB0aGVyZSBhcmUgbm8gcHJldmlvdXMgZGVwZW5kZW5jaWVzLCBpdCBtdXN0IGJlIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgICBkZXBlbmRlbmN5RGV0ZWN0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICBjb21wdXRlZE9ic2VydmFibGU6IGNvbXB1dGVkT2JzZXJ2YWJsZSxcbiAgICAgICAgICAgICAgICBkaXNwb3NhbENhbmRpZGF0ZXM6IHN0YXRlLmRlcGVuZGVuY3lUcmFja2luZyxcbiAgICAgICAgICAgICAgICBkaXNwb3NhbENvdW50OiBzdGF0ZS5kZXBlbmRlbmNpZXNDb3VudFxuICAgICAgICAgICAgfTtcblxuICAgICAgICBrby5kZXBlbmRlbmN5RGV0ZWN0aW9uLmJlZ2luKHtcbiAgICAgICAgICAgIGNhbGxiYWNrVGFyZ2V0OiBkZXBlbmRlbmN5RGV0ZWN0aW9uQ29udGV4dCxcbiAgICAgICAgICAgIGNhbGxiYWNrOiBjb21wdXRlZEJlZ2luRGVwZW5kZW5jeURldGVjdGlvbkNhbGxiYWNrLFxuICAgICAgICAgICAgY29tcHV0ZWQ6IGNvbXB1dGVkT2JzZXJ2YWJsZSxcbiAgICAgICAgICAgIGlzSW5pdGlhbDogaXNJbml0aWFsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YXRlLmRlcGVuZGVuY3lUcmFja2luZyA9IHt9O1xuICAgICAgICBzdGF0ZS5kZXBlbmRlbmNpZXNDb3VudCA9IDA7XG5cbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gdGhpcy5ldmFsdWF0ZUltbWVkaWF0ZV9DYWxsUmVhZFRoZW5FbmREZXBlbmRlbmN5RGV0ZWN0aW9uKHN0YXRlLCBkZXBlbmRlbmN5RGV0ZWN0aW9uQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKGNvbXB1dGVkT2JzZXJ2YWJsZS5pc0RpZmZlcmVudChzdGF0ZS5sYXRlc3RWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoIXN0YXRlLmlzU2xlZXBpbmcpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlZE9ic2VydmFibGVbXCJub3RpZnlTdWJzY3JpYmVyc1wiXShzdGF0ZS5sYXRlc3RWYWx1ZSwgXCJiZWZvcmVDaGFuZ2VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXRlLmxhdGVzdFZhbHVlID0gbmV3VmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZS5pc1NsZWVwaW5nKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZWRPYnNlcnZhYmxlLnVwZGF0ZVZlcnNpb24oKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobm90aWZ5Q2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZWRPYnNlcnZhYmxlW1wibm90aWZ5U3Vic2NyaWJlcnNcIl0oc3RhdGUubGF0ZXN0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzSW5pdGlhbCkge1xuICAgICAgICAgICAgY29tcHV0ZWRPYnNlcnZhYmxlW1wibm90aWZ5U3Vic2NyaWJlcnNcIl0oc3RhdGUubGF0ZXN0VmFsdWUsIFwiYXdha2VcIik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGV2YWx1YXRlSW1tZWRpYXRlX0NhbGxSZWFkVGhlbkVuZERlcGVuZGVuY3lEZXRlY3Rpb246IGZ1bmN0aW9uIChzdGF0ZSwgZGVwZW5kZW5jeURldGVjdGlvbkNvbnRleHQpIHtcbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyByZWFsbHkgcGFydCBvZiB0aGUgZXZhbHVhdGVJbW1lZGlhdGVfQ2FsbFJlYWRXaXRoRGVwZW5kZW5jeURldGVjdGlvbiBsb2dpYy5cbiAgICAgICAgLy8gWW91J2QgbmV2ZXIgY2FsbCBpdCBmcm9tIGFueXdoZXJlIGVsc2UuIEZhY3RvcmluZyBpdCBvdXQgbWVhbnMgdGhhdCBldmFsdWF0ZUltbWVkaWF0ZV9DYWxsUmVhZFdpdGhEZXBlbmRlbmN5RGV0ZWN0aW9uXG4gICAgICAgIC8vIGNhbiBiZSBpbmRlcGVuZGVudCBvZiB0cnkvZmluYWxseSBibG9ja3MsIHdoaWNoIGNvbnRyaWJ1dGVzIHRvIHNhdmluZyBhYm91dCA0MCUgb2ZmIHRoZSBDUFVcbiAgICAgICAgLy8gb3ZlcmhlYWQgb2YgY29tcHV0ZWQgZXZhbHVhdGlvbiAob24gVjggYXQgbGVhc3QpLlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgcmVhZEZ1bmN0aW9uID0gc3RhdGUucmVhZEZ1bmN0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmV2YWx1YXRvckZ1bmN0aW9uVGFyZ2V0ID8gcmVhZEZ1bmN0aW9uLmNhbGwoc3RhdGUuZXZhbHVhdG9yRnVuY3Rpb25UYXJnZXQpIDogcmVhZEZ1bmN0aW9uKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBrby5kZXBlbmRlbmN5RGV0ZWN0aW9uLmVuZCgpO1xuXG4gICAgICAgICAgICAvLyBGb3IgZWFjaCBzdWJzY3JpcHRpb24gbm8gbG9uZ2VyIGJlaW5nIHVzZWQsIHJlbW92ZSBpdCBmcm9tIHRoZSBhY3RpdmUgc3Vic2NyaXB0aW9ucyBsaXN0IGFuZCBkaXNwb3NlIGl0XG4gICAgICAgICAgICBpZiAoZGVwZW5kZW5jeURldGVjdGlvbkNvbnRleHQuZGlzcG9zYWxDb3VudCAmJiAhc3RhdGUuaXNTbGVlcGluZykge1xuICAgICAgICAgICAgICAgIGtvLnV0aWxzLm9iamVjdEZvckVhY2goZGVwZW5kZW5jeURldGVjdGlvbkNvbnRleHQuZGlzcG9zYWxDYW5kaWRhdGVzLCBjb21wdXRlZERpc3Bvc2VEZXBlbmRlbmN5Q2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGF0ZS5pc1N0YWxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHBlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gUGVlayB3b24ndCByZS1ldmFsdWF0ZSwgZXhjZXB0IHdoaWxlIHRoZSBjb21wdXRlZCBpcyBzbGVlcGluZyBvciB0byBnZXQgdGhlIGluaXRpYWwgdmFsdWUgd2hlbiBcImRlZmVyRXZhbHVhdGlvblwiIGlzIHNldC5cbiAgICAgICAgdmFyIHN0YXRlID0gdGhpc1tjb21wdXRlZFN0YXRlXTtcbiAgICAgICAgaWYgKChzdGF0ZS5pc1N0YWxlICYmICFzdGF0ZS5kZXBlbmRlbmNpZXNDb3VudCkgfHwgKHN0YXRlLmlzU2xlZXBpbmcgJiYgdGhpcy5oYXZlRGVwZW5kZW5jaWVzQ2hhbmdlZCgpKSkge1xuICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZUltbWVkaWF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZS5sYXRlc3RWYWx1ZTtcbiAgICB9LFxuICAgIGxpbWl0OiBmdW5jdGlvbiAobGltaXRGdW5jdGlvbikge1xuICAgICAgICAvLyBPdmVycmlkZSB0aGUgbGltaXQgZnVuY3Rpb24gd2l0aCBvbmUgdGhhdCBkZWxheXMgZXZhbHVhdGlvbiBhcyB3ZWxsXG4gICAgICAgIGtvLnN1YnNjcmliYWJsZVsnZm4nXS5saW1pdC5jYWxsKHRoaXMsIGxpbWl0RnVuY3Rpb24pO1xuICAgICAgICB0aGlzLl9ldmFsRGVsYXllZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX2xpbWl0QmVmb3JlQ2hhbmdlKHRoaXNbY29tcHV0ZWRTdGF0ZV0ubGF0ZXN0VmFsdWUpO1xuXG4gICAgICAgICAgICB0aGlzW2NvbXB1dGVkU3RhdGVdLmlzU3RhbGUgPSB0cnVlOyAvLyBNYXJrIGFzIGRpcnR5XG5cbiAgICAgICAgICAgIC8vIFBhc3MgdGhlIG9ic2VydmFibGUgdG8gdGhlIFwibGltaXRcIiBjb2RlLCB3aGljaCB3aWxsIGFjY2VzcyBpdCB3aGVuXG4gICAgICAgICAgICAvLyBpdCdzIHRpbWUgdG8gZG8gdGhlIG5vdGlmaWNhdGlvbi5cbiAgICAgICAgICAgIHRoaXMuX2xpbWl0Q2hhbmdlKHRoaXMpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXNbY29tcHV0ZWRTdGF0ZV07XG4gICAgICAgIGlmICghc3RhdGUuaXNTbGVlcGluZyAmJiBzdGF0ZS5kZXBlbmRlbmN5VHJhY2tpbmcpIHtcbiAgICAgICAgICAgIGtvLnV0aWxzLm9iamVjdEZvckVhY2goc3RhdGUuZGVwZW5kZW5jeVRyYWNraW5nLCBmdW5jdGlvbiAoaWQsIGRlcGVuZGVuY3kpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jeS5kaXNwb3NlKVxuICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5LmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5kaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQgJiYgc3RhdGUuZG9tTm9kZURpc3Bvc2FsQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5yZW1vdmVEaXNwb3NlQ2FsbGJhY2soc3RhdGUuZGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkLCBzdGF0ZS5kb21Ob2RlRGlzcG9zYWxDYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZGVwZW5kZW5jeVRyYWNraW5nID0gbnVsbDtcbiAgICAgICAgc3RhdGUuZGVwZW5kZW5jaWVzQ291bnQgPSAwO1xuICAgICAgICBzdGF0ZS5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUuaXNTdGFsZSA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5pc1NsZWVwaW5nID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZCA9IG51bGw7XG4gICAgfVxufTtcblxudmFyIHB1cmVDb21wdXRlZE92ZXJyaWRlcyA9IHtcbiAgICBiZWZvcmVTdWJzY3JpcHRpb25BZGQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAvLyBJZiBhc2xlZXAsIHdha2UgdXAgdGhlIGNvbXB1dGVkIGJ5IHN1YnNjcmliaW5nIHRvIGFueSBkZXBlbmRlbmNpZXMuXG4gICAgICAgIHZhciBjb21wdXRlZE9ic2VydmFibGUgPSB0aGlzLFxuICAgICAgICAgICAgc3RhdGUgPSBjb21wdXRlZE9ic2VydmFibGVbY29tcHV0ZWRTdGF0ZV07XG4gICAgICAgIGlmICghc3RhdGUuaXNEaXNwb3NlZCAmJiBzdGF0ZS5pc1NsZWVwaW5nICYmIGV2ZW50ID09ICdjaGFuZ2UnKSB7XG4gICAgICAgICAgICBzdGF0ZS5pc1NsZWVwaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc3RhdGUuaXNTdGFsZSB8fCBjb21wdXRlZE9ic2VydmFibGUuaGF2ZURlcGVuZGVuY2llc0NoYW5nZWQoKSkge1xuICAgICAgICAgICAgICAgIHN0YXRlLmRlcGVuZGVuY3lUcmFja2luZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgc3RhdGUuZGVwZW5kZW5jaWVzQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgIHN0YXRlLmlzU3RhbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbXB1dGVkT2JzZXJ2YWJsZS5ldmFsdWF0ZUltbWVkaWF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBGaXJzdCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbiBvcmRlclxuICAgICAgICAgICAgICAgIHZhciBkZXBlbmRlY2llc09yZGVyID0gW107XG4gICAgICAgICAgICAgICAga28udXRpbHMub2JqZWN0Rm9yRWFjaChzdGF0ZS5kZXBlbmRlbmN5VHJhY2tpbmcsIGZ1bmN0aW9uIChpZCwgZGVwZW5kZW5jeSkge1xuICAgICAgICAgICAgICAgICAgICBkZXBlbmRlY2llc09yZGVyW2RlcGVuZGVuY3kuX29yZGVyXSA9IGlkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIE5leHQsIHN1YnNjcmliZSB0byBlYWNoIG9uZVxuICAgICAgICAgICAgICAgIGtvLnV0aWxzLmFycmF5Rm9yRWFjaChkZXBlbmRlY2llc09yZGVyLCBmdW5jdGlvbiAoaWQsIG9yZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkZXBlbmRlbmN5ID0gc3RhdGUuZGVwZW5kZW5jeVRyYWNraW5nW2lkXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IGNvbXB1dGVkT2JzZXJ2YWJsZS5zdWJzY3JpYmVUb0RlcGVuZGVuY3koZGVwZW5kZW5jeS5fdGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLl9vcmRlciA9IG9yZGVyO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24uX3ZlcnNpb24gPSBkZXBlbmRlbmN5Ll92ZXJzaW9uO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5kZXBlbmRlbmN5VHJhY2tpbmdbaWRdID0gc3Vic2NyaXB0aW9uO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdGF0ZS5pc0Rpc3Bvc2VkKSB7ICAgICAvLyB0ZXN0IHNpbmNlIGV2YWx1YXRpbmcgY291bGQgdHJpZ2dlciBkaXNwb3NhbFxuICAgICAgICAgICAgICAgIGNvbXB1dGVkT2JzZXJ2YWJsZVtcIm5vdGlmeVN1YnNjcmliZXJzXCJdKHN0YXRlLmxhdGVzdFZhbHVlLCBcImF3YWtlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBhZnRlclN1YnNjcmlwdGlvblJlbW92ZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXNbY29tcHV0ZWRTdGF0ZV07XG4gICAgICAgIGlmICghc3RhdGUuaXNEaXNwb3NlZCAmJiBldmVudCA9PSAnY2hhbmdlJyAmJiAhdGhpcy5oYXNTdWJzY3JpcHRpb25zRm9yRXZlbnQoJ2NoYW5nZScpKSB7XG4gICAgICAgICAgICBrby51dGlscy5vYmplY3RGb3JFYWNoKHN0YXRlLmRlcGVuZGVuY3lUcmFja2luZywgZnVuY3Rpb24gKGlkLCBkZXBlbmRlbmN5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlcGVuZGVuY3kuZGlzcG9zZSkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5kZXBlbmRlbmN5VHJhY2tpbmdbaWRdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RhcmdldDogZGVwZW5kZW5jeS5fdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgX29yZGVyOiBkZXBlbmRlbmN5Ll9vcmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIF92ZXJzaW9uOiBkZXBlbmRlbmN5Ll92ZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kuZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3RhdGUuaXNTbGVlcGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzW1wibm90aWZ5U3Vic2NyaWJlcnNcIl0odW5kZWZpbmVkLCBcImFzbGVlcFwiKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZ2V0VmVyc2lvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBCZWNhdXNlIGEgcHVyZSBjb21wdXRlZCBpcyBub3QgYXV0b21hdGljYWxseSB1cGRhdGVkIHdoaWxlIGl0IGlzIHNsZWVwaW5nLCB3ZSBjYW4ndFxuICAgICAgICAvLyBzaW1wbHkgcmV0dXJuIHRoZSB2ZXJzaW9uIG51bWJlci4gSW5zdGVhZCwgd2UgY2hlY2sgaWYgYW55IG9mIHRoZSBkZXBlbmRlbmNpZXMgaGF2ZVxuICAgICAgICAvLyBjaGFuZ2VkIGFuZCBjb25kaXRpb25hbGx5IHJlLWV2YWx1YXRlIHRoZSBjb21wdXRlZCBvYnNlcnZhYmxlLlxuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzW2NvbXB1dGVkU3RhdGVdO1xuICAgICAgICBpZiAoc3RhdGUuaXNTbGVlcGluZyAmJiAoc3RhdGUuaXNTdGFsZSB8fCB0aGlzLmhhdmVEZXBlbmRlbmNpZXNDaGFuZ2VkKCkpKSB7XG4gICAgICAgICAgICB0aGlzLmV2YWx1YXRlSW1tZWRpYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtvLnN1YnNjcmliYWJsZVsnZm4nXS5nZXRWZXJzaW9uLmNhbGwodGhpcyk7XG4gICAgfVxufTtcblxudmFyIGRlZmVyRXZhbHVhdGlvbk92ZXJyaWRlcyA9IHtcbiAgICBiZWZvcmVTdWJzY3JpcHRpb25BZGQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgZm9yY2UgYSBjb21wdXRlZCB3aXRoIGRlZmVyRXZhbHVhdGlvbiB0byBldmFsdWF0ZSB3aGVuIHRoZSBmaXJzdCBzdWJzY3JpcHRpb24gaXMgcmVnaXN0ZXJlZC5cbiAgICAgICAgaWYgKGV2ZW50ID09ICdjaGFuZ2UnIHx8IGV2ZW50ID09ICdiZWZvcmVDaGFuZ2UnKSB7XG4gICAgICAgICAgICB0aGlzLnBlZWsoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8vIE5vdGUgdGhhdCBmb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IHByb3RvIGFzc2lnbm1lbnQsIHRoZVxuLy8gaW5oZXJpdGFuY2UgY2hhaW4gaXMgY3JlYXRlZCBtYW51YWxseSBpbiB0aGUga28uY29tcHV0ZWQgY29uc3RydWN0b3JcbmlmIChrby51dGlscy5jYW5TZXRQcm90b3R5cGUpIHtcbiAgICBrby51dGlscy5zZXRQcm90b3R5cGVPZihjb21wdXRlZEZuLCBrby5zdWJzY3JpYmFibGVbJ2ZuJ10pO1xufVxuXG4vLyBTZXQgdGhlIHByb3RvIGNoYWluIHZhbHVlcyBmb3Iga28uaGFzUHJvdG90eXBlXG52YXIgcHJvdG9Qcm9wID0ga28ub2JzZXJ2YWJsZS5wcm90b1Byb3BlcnR5OyAvLyA9PSBcIl9fa29fcHJvdG9fX1wiXG5rby5jb21wdXRlZFtwcm90b1Byb3BdID0ga28ub2JzZXJ2YWJsZTtcbmNvbXB1dGVkRm5bcHJvdG9Qcm9wXSA9IGtvLmNvbXB1dGVkO1xuXG5rby5pc0NvbXB1dGVkID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGtvLmhhc1Byb3RvdHlwZShpbnN0YW5jZSwga28uY29tcHV0ZWQpO1xufTtcblxua28uaXNQdXJlQ29tcHV0ZWQgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4ga28uaGFzUHJvdG90eXBlKGluc3RhbmNlLCBrby5jb21wdXRlZClcbiAgICAgICAgJiYgaW5zdGFuY2VbY29tcHV0ZWRTdGF0ZV0gJiYgaW5zdGFuY2VbY29tcHV0ZWRTdGF0ZV0ucHVyZTtcbn07XG5cbmtvLmV4cG9ydFN5bWJvbCgnY29tcHV0ZWQnLCBrby5jb21wdXRlZCk7XG5rby5leHBvcnRTeW1ib2woJ2RlcGVuZGVudE9ic2VydmFibGUnLCBrby5jb21wdXRlZCk7ICAgIC8vIGV4cG9ydCBrby5kZXBlbmRlbnRPYnNlcnZhYmxlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAoMS54KVxua28uZXhwb3J0U3ltYm9sKCdpc0NvbXB1dGVkJywga28uaXNDb21wdXRlZCk7XG5rby5leHBvcnRTeW1ib2woJ2lzUHVyZUNvbXB1dGVkJywga28uaXNQdXJlQ29tcHV0ZWQpO1xua28uZXhwb3J0U3ltYm9sKCdjb21wdXRlZC5mbicsIGNvbXB1dGVkRm4pO1xua28uZXhwb3J0UHJvcGVydHkoY29tcHV0ZWRGbiwgJ3BlZWsnLCBjb21wdXRlZEZuLnBlZWspO1xua28uZXhwb3J0UHJvcGVydHkoY29tcHV0ZWRGbiwgJ2Rpc3Bvc2UnLCBjb21wdXRlZEZuLmRpc3Bvc2UpO1xua28uZXhwb3J0UHJvcGVydHkoY29tcHV0ZWRGbiwgJ2lzQWN0aXZlJywgY29tcHV0ZWRGbi5pc0FjdGl2ZSk7XG5rby5leHBvcnRQcm9wZXJ0eShjb21wdXRlZEZuLCAnZ2V0RGVwZW5kZW5jaWVzQ291bnQnLCBjb21wdXRlZEZuLmdldERlcGVuZGVuY2llc0NvdW50KTtcblxua28ucHVyZUNvbXB1dGVkID0gZnVuY3Rpb24gKGV2YWx1YXRvckZ1bmN0aW9uT3JPcHRpb25zLCBldmFsdWF0b3JGdW5jdGlvblRhcmdldCkge1xuICAgIGlmICh0eXBlb2YgZXZhbHVhdG9yRnVuY3Rpb25Pck9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGtvLmNvbXB1dGVkKGV2YWx1YXRvckZ1bmN0aW9uT3JPcHRpb25zLCBldmFsdWF0b3JGdW5jdGlvblRhcmdldCwgeydwdXJlJzp0cnVlfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXZhbHVhdG9yRnVuY3Rpb25Pck9wdGlvbnMgPSBrby51dGlscy5leHRlbmQoe30sIGV2YWx1YXRvckZ1bmN0aW9uT3JPcHRpb25zKTsgICAvLyBtYWtlIGEgY29weSBvZiB0aGUgcGFyYW1ldGVyIG9iamVjdFxuICAgICAgICBldmFsdWF0b3JGdW5jdGlvbk9yT3B0aW9uc1sncHVyZSddID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGtvLmNvbXB1dGVkKGV2YWx1YXRvckZ1bmN0aW9uT3JPcHRpb25zLCBldmFsdWF0b3JGdW5jdGlvblRhcmdldCk7XG4gICAgfVxufVxua28uZXhwb3J0U3ltYm9sKCdwdXJlQ29tcHV0ZWQnLCBrby5wdXJlQ29tcHV0ZWQpO1xuXG4oZnVuY3Rpb24oKSB7XG4gICAgdmFyIG1heE5lc3RlZE9ic2VydmFibGVEZXB0aCA9IDEwOyAvLyBFc2NhcGUgdGhlICh1bmxpa2VseSkgcGF0aGFsb2dpY2FsIGNhc2Ugd2hlcmUgYW4gb2JzZXJ2YWJsZSdzIGN1cnJlbnQgdmFsdWUgaXMgaXRzZWxmIChvciBzaW1pbGFyIHJlZmVyZW5jZSBjeWNsZSlcblxuICAgIGtvLnRvSlMgPSBmdW5jdGlvbihyb290T2JqZWN0KSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXaGVuIGNhbGxpbmcga28udG9KUywgcGFzcyB0aGUgb2JqZWN0IHlvdSB3YW50IHRvIGNvbnZlcnQuXCIpO1xuXG4gICAgICAgIC8vIFdlIGp1c3QgdW53cmFwIGV2ZXJ5dGhpbmcgYXQgZXZlcnkgbGV2ZWwgaW4gdGhlIG9iamVjdCBncmFwaFxuICAgICAgICByZXR1cm4gbWFwSnNPYmplY3RHcmFwaChyb290T2JqZWN0LCBmdW5jdGlvbih2YWx1ZVRvTWFwKSB7XG4gICAgICAgICAgICAvLyBMb29wIGJlY2F1c2UgYW4gb2JzZXJ2YWJsZSdzIHZhbHVlIG1pZ2h0IGluIHR1cm4gYmUgYW5vdGhlciBvYnNlcnZhYmxlIHdyYXBwZXJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBrby5pc09ic2VydmFibGUodmFsdWVUb01hcCkgJiYgKGkgPCBtYXhOZXN0ZWRPYnNlcnZhYmxlRGVwdGgpOyBpKyspXG4gICAgICAgICAgICAgICAgdmFsdWVUb01hcCA9IHZhbHVlVG9NYXAoKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVRvTWFwO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAga28udG9KU09OID0gZnVuY3Rpb24ocm9vdE9iamVjdCwgcmVwbGFjZXIsIHNwYWNlKSB7ICAgICAvLyByZXBsYWNlciBhbmQgc3BhY2UgYXJlIG9wdGlvbmFsXG4gICAgICAgIHZhciBwbGFpbkphdmFTY3JpcHRPYmplY3QgPSBrby50b0pTKHJvb3RPYmplY3QpO1xuICAgICAgICByZXR1cm4ga28udXRpbHMuc3RyaW5naWZ5SnNvbihwbGFpbkphdmFTY3JpcHRPYmplY3QsIHJlcGxhY2VyLCBzcGFjZSk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG1hcEpzT2JqZWN0R3JhcGgocm9vdE9iamVjdCwgbWFwSW5wdXRDYWxsYmFjaywgdmlzaXRlZE9iamVjdHMpIHtcbiAgICAgICAgdmlzaXRlZE9iamVjdHMgPSB2aXNpdGVkT2JqZWN0cyB8fCBuZXcgb2JqZWN0TG9va3VwKCk7XG5cbiAgICAgICAgcm9vdE9iamVjdCA9IG1hcElucHV0Q2FsbGJhY2socm9vdE9iamVjdCk7XG4gICAgICAgIHZhciBjYW5IYXZlUHJvcGVydGllcyA9ICh0eXBlb2Ygcm9vdE9iamVjdCA9PSBcIm9iamVjdFwiKSAmJiAocm9vdE9iamVjdCAhPT0gbnVsbCkgJiYgKHJvb3RPYmplY3QgIT09IHVuZGVmaW5lZCkgJiYgKCEocm9vdE9iamVjdCBpbnN0YW5jZW9mIFJlZ0V4cCkpICYmICghKHJvb3RPYmplY3QgaW5zdGFuY2VvZiBEYXRlKSkgJiYgKCEocm9vdE9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykpICYmICghKHJvb3RPYmplY3QgaW5zdGFuY2VvZiBOdW1iZXIpKSAmJiAoIShyb290T2JqZWN0IGluc3RhbmNlb2YgQm9vbGVhbikpO1xuICAgICAgICBpZiAoIWNhbkhhdmVQcm9wZXJ0aWVzKVxuICAgICAgICAgICAgcmV0dXJuIHJvb3RPYmplY3Q7XG5cbiAgICAgICAgdmFyIG91dHB1dFByb3BlcnRpZXMgPSByb290T2JqZWN0IGluc3RhbmNlb2YgQXJyYXkgPyBbXSA6IHt9O1xuICAgICAgICB2aXNpdGVkT2JqZWN0cy5zYXZlKHJvb3RPYmplY3QsIG91dHB1dFByb3BlcnRpZXMpO1xuXG4gICAgICAgIHZpc2l0UHJvcGVydGllc09yQXJyYXlFbnRyaWVzKHJvb3RPYmplY3QsIGZ1bmN0aW9uKGluZGV4ZXIpIHtcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eVZhbHVlID0gbWFwSW5wdXRDYWxsYmFjayhyb290T2JqZWN0W2luZGV4ZXJdKTtcblxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgcHJvcGVydHlWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0UHJvcGVydGllc1tpbmRleGVyXSA9IHByb3BlcnR5VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c2x5TWFwcGVkVmFsdWUgPSB2aXNpdGVkT2JqZWN0cy5nZXQocHJvcGVydHlWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFByb3BlcnRpZXNbaW5kZXhlcl0gPSAocHJldmlvdXNseU1hcHBlZFZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHByZXZpb3VzbHlNYXBwZWRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBtYXBKc09iamVjdEdyYXBoKHByb3BlcnR5VmFsdWUsIG1hcElucHV0Q2FsbGJhY2ssIHZpc2l0ZWRPYmplY3RzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBvdXRwdXRQcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZpc2l0UHJvcGVydGllc09yQXJyYXlFbnRyaWVzKHJvb3RPYmplY3QsIHZpc2l0b3JDYWxsYmFjaykge1xuICAgICAgICBpZiAocm9vdE9iamVjdCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvb3RPYmplY3QubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgdmlzaXRvckNhbGxiYWNrKGkpO1xuXG4gICAgICAgICAgICAvLyBGb3IgYXJyYXlzLCBhbHNvIHJlc3BlY3QgdG9KU09OIHByb3BlcnR5IGZvciBjdXN0b20gbWFwcGluZ3MgKGZpeGVzICMyNzgpXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJvb3RPYmplY3RbJ3RvSlNPTiddID09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICAgICAgdmlzaXRvckNhbGxiYWNrKCd0b0pTT04nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiByb290T2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmlzaXRvckNhbGxiYWNrKHByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gb2JqZWN0TG9va3VwKCkge1xuICAgICAgICB0aGlzLmtleXMgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTtcbiAgICB9O1xuXG4gICAgb2JqZWN0TG9va3VwLnByb3RvdHlwZSA9IHtcbiAgICAgICAgY29uc3RydWN0b3I6IG9iamVjdExvb2t1cCxcbiAgICAgICAgc2F2ZTogZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGV4aXN0aW5nSW5kZXggPSBrby51dGlscy5hcnJheUluZGV4T2YodGhpcy5rZXlzLCBrZXkpO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nSW5kZXggPj0gMClcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1tleGlzdGluZ0luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgIHZhciBleGlzdGluZ0luZGV4ID0ga28udXRpbHMuYXJyYXlJbmRleE9mKHRoaXMua2V5cywga2V5KTtcbiAgICAgICAgICAgIHJldHVybiAoZXhpc3RpbmdJbmRleCA+PSAwKSA/IHRoaXMudmFsdWVzW2V4aXN0aW5nSW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfTtcbn0pKCk7XG5cbmtvLmV4cG9ydFN5bWJvbCgndG9KUycsIGtvLnRvSlMpO1xua28uZXhwb3J0U3ltYm9sKCd0b0pTT04nLCBrby50b0pTT04pO1xuKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFzRG9tRGF0YUV4cGFuZG9Qcm9wZXJ0eSA9ICdfX2tvX19oYXNEb21EYXRhT3B0aW9uVmFsdWVfXyc7XG5cbiAgICAvLyBOb3JtYWxseSwgU0VMRUNUIGVsZW1lbnRzIGFuZCB0aGVpciBPUFRJT05zIGNhbiBvbmx5IHRha2UgdmFsdWUgb2YgdHlwZSAnc3RyaW5nJyAoYmVjYXVzZSB0aGUgdmFsdWVzXG4gICAgLy8gYXJlIHN0b3JlZCBvbiBET00gYXR0cmlidXRlcykuIGtvLnNlbGVjdEV4dGVuc2lvbnMgcHJvdmlkZXMgYSB3YXkgZm9yIFNFTEVDVHMvT1BUSU9OcyB0byBoYXZlIHZhbHVlc1xuICAgIC8vIHRoYXQgYXJlIGFyYml0cmFyeSBvYmplY3RzLiBUaGlzIGlzIHZlcnkgY29udmVuaWVudCB3aGVuIGltcGxlbWVudGluZyB0aGluZ3MgbGlrZSBjYXNjYWRpbmcgZHJvcGRvd25zLlxuICAgIGtvLnNlbGVjdEV4dGVuc2lvbnMgPSB7XG4gICAgICAgIHJlYWRWYWx1ZSA6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa28udXRpbHMudGFnTmFtZUxvd2VyKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRbaGFzRG9tRGF0YUV4cGFuZG9Qcm9wZXJ0eV0gPT09IHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga28udXRpbHMuZG9tRGF0YS5nZXQoZWxlbWVudCwga28uYmluZGluZ0hhbmRsZXJzLm9wdGlvbnMub3B0aW9uVmFsdWVEb21EYXRhS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtvLnV0aWxzLmllVmVyc2lvbiA8PSA3XG4gICAgICAgICAgICAgICAgICAgICAgICA/IChlbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoJ3ZhbHVlJykgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKCd2YWx1ZScpLnNwZWNpZmllZCA/IGVsZW1lbnQudmFsdWUgOiBlbGVtZW50LnRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGVsZW1lbnQudmFsdWU7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuc2VsZWN0ZWRJbmRleCA+PSAwID8ga28uc2VsZWN0RXh0ZW5zaW9ucy5yZWFkVmFsdWUoZWxlbWVudC5vcHRpb25zW2VsZW1lbnQuc2VsZWN0ZWRJbmRleF0pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHdyaXRlVmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlLCBhbGxvd1Vuc2V0KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGtvLnV0aWxzLnRhZ05hbWVMb3dlcihlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrby51dGlscy5kb21EYXRhLnNldChlbGVtZW50LCBrby5iaW5kaW5nSGFuZGxlcnMub3B0aW9ucy5vcHRpb25WYWx1ZURvbURhdGFLZXksIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RvbURhdGFFeHBhbmRvUHJvcGVydHkgaW4gZWxlbWVudCkgeyAvLyBJRSA8PSA4IHRocm93cyBlcnJvcnMgaWYgeW91IGRlbGV0ZSBub24tZXhpc3RlbnQgcHJvcGVydGllcyBmcm9tIGEgRE9NIG5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVsZW1lbnRbaGFzRG9tRGF0YUV4cGFuZG9Qcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcmUgYXJiaXRyYXJ5IG9iamVjdCB1c2luZyBEb21EYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga28udXRpbHMuZG9tRGF0YS5zZXQoZWxlbWVudCwga28uYmluZGluZ0hhbmRsZXJzLm9wdGlvbnMub3B0aW9uVmFsdWVEb21EYXRhS2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFtoYXNEb21EYXRhRXhwYW5kb1Byb3BlcnR5XSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIHRyZWF0bWVudCBvZiBudW1iZXJzIGlzIGp1c3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIEtPIDEuMi4xIHdyb3RlIG51bWVyaWNhbCB2YWx1ZXMgdG8gZWxlbWVudC52YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlID0gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiID8gdmFsdWUgOiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZSA9PT0gbnVsbCkgICAgICAgLy8gQSBibGFuayBzdHJpbmcgb3IgbnVsbCB2YWx1ZSB3aWxsIHNlbGVjdCB0aGUgY2FwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBlbGVtZW50Lm9wdGlvbnMubGVuZ3RoLCBvcHRpb25WYWx1ZTsgaSA8IG47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWUgPSBrby5zZWxlY3RFeHRlbnNpb25zLnJlYWRWYWx1ZShlbGVtZW50Lm9wdGlvbnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5jbHVkZSBzcGVjaWFsIGNoZWNrIHRvIGhhbmRsZSBzZWxlY3RpbmcgYSBjYXB0aW9uIHdpdGggYSBibGFuayBzdHJpbmcgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25WYWx1ZSA9PSB2YWx1ZSB8fCAob3B0aW9uVmFsdWUgPT0gXCJcIiAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93VW5zZXQgfHwgc2VsZWN0aW9uID49IDAgfHwgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbWVudC5zaXplID4gMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IHNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbHVlID09PSBudWxsKSB8fCAodmFsdWUgPT09IHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufSkoKTtcblxua28uZXhwb3J0U3ltYm9sKCdzZWxlY3RFeHRlbnNpb25zJywga28uc2VsZWN0RXh0ZW5zaW9ucyk7XG5rby5leHBvcnRTeW1ib2woJ3NlbGVjdEV4dGVuc2lvbnMucmVhZFZhbHVlJywga28uc2VsZWN0RXh0ZW5zaW9ucy5yZWFkVmFsdWUpO1xua28uZXhwb3J0U3ltYm9sKCdzZWxlY3RFeHRlbnNpb25zLndyaXRlVmFsdWUnLCBrby5zZWxlY3RFeHRlbnNpb25zLndyaXRlVmFsdWUpO1xua28uZXhwcmVzc2lvblJld3JpdGluZyA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGphdmFTY3JpcHRSZXNlcnZlZFdvcmRzID0gW1widHJ1ZVwiLCBcImZhbHNlXCIsIFwibnVsbFwiLCBcInVuZGVmaW5lZFwiXTtcblxuICAgIC8vIE1hdGNoZXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGFzc2lnbmVkIHRvLS1laXRoZXIgYW4gaXNvbGF0ZWQgaWRlbnRpZmllciBvciBzb21ldGhpbmcgZW5kaW5nIHdpdGggYSBwcm9wZXJ0eSBhY2Nlc3NvclxuICAgIC8vIFRoaXMgaXMgZGVzaWduZWQgdG8gYmUgc2ltcGxlIGFuZCBhdm9pZCBmYWxzZSBuZWdhdGl2ZXMsIGJ1dCBjb3VsZCBwcm9kdWNlIGZhbHNlIHBvc2l0aXZlcyAoZS5nLiwgYStiLmMpLlxuICAgIC8vIFRoaXMgYWxzbyB3aWxsIG5vdCBwcm9wZXJseSBoYW5kbGUgbmVzdGVkIGJyYWNrZXRzIChlLmcuLCBvYmoxW29iajJbJ3Byb3AnXV07IHNlZSAjOTExKS5cbiAgICB2YXIgamF2YVNjcmlwdEFzc2lnbm1lbnRUYXJnZXQgPSAvXig/OlskX2Etel1bJFxcd10qfCguKykoXFwuXFxzKlskX2Etel1bJFxcd10qfFxcWy4rXFxdKSkkL2k7XG5cbiAgICBmdW5jdGlvbiBnZXRXcml0ZWFibGVWYWx1ZShleHByZXNzaW9uKSB7XG4gICAgICAgIGlmIChrby51dGlscy5hcnJheUluZGV4T2YoamF2YVNjcmlwdFJlc2VydmVkV29yZHMsIGV4cHJlc3Npb24pID49IDApXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBtYXRjaCA9IGV4cHJlc3Npb24ubWF0Y2goamF2YVNjcmlwdEFzc2lnbm1lbnRUYXJnZXQpO1xuICAgICAgICByZXR1cm4gbWF0Y2ggPT09IG51bGwgPyBmYWxzZSA6IG1hdGNoWzFdID8gKCdPYmplY3QoJyArIG1hdGNoWzFdICsgJyknICsgbWF0Y2hbMl0pIDogZXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2lsbCBiZSB1c2VkIHRvIHNwbGl0IGFuIG9iamVjdC1saXRlcmFsIHN0cmluZyBpbnRvIHRva2Vuc1xuXG4gICAgICAgIC8vIFRoZXNlIHR3byBtYXRjaCBzdHJpbmdzLCBlaXRoZXIgd2l0aCBkb3VibGUgcXVvdGVzIG9yIHNpbmdsZSBxdW90ZXNcbiAgICB2YXIgc3RyaW5nRG91YmxlID0gJ1wiKD86W15cIlxcXFxcXFxcXXxcXFxcXFxcXC4pKlwiJyxcbiAgICAgICAgc3RyaW5nU2luZ2xlID0gXCInKD86W14nXFxcXFxcXFxdfFxcXFxcXFxcLikqJ1wiLFxuICAgICAgICAvLyBNYXRjaGVzIGEgcmVndWxhciBleHByZXNzaW9uICh0ZXh0IGVuY2xvc2VkIGJ5IHNsYXNoZXMpLCBidXQgd2lsbCBhbHNvIG1hdGNoIHNldHMgb2YgZGl2aXNpb25zXG4gICAgICAgIC8vIGFzIGEgcmVndWxhciBleHByZXNzaW9uICh0aGlzIGlzIGhhbmRsZWQgYnkgdGhlIHBhcnNpbmcgbG9vcCBiZWxvdykuXG4gICAgICAgIHN0cmluZ1JlZ2V4cCA9ICcvKD86W14vXFxcXFxcXFxdfFxcXFxcXFxcLikqL1xcdyonLFxuICAgICAgICAvLyBUaGVzZSBjaGFyYWN0ZXJzIGhhdmUgc3BlY2lhbCBtZWFuaW5nIHRvIHRoZSBwYXJzZXIgYW5kIG11c3Qgbm90IGFwcGVhciBpbiB0aGUgbWlkZGxlIG9mIGFcbiAgICAgICAgLy8gdG9rZW4sIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgc3RyaW5nLlxuICAgICAgICBzcGVjaWFscyA9ICcsXCJcXCd7fSgpLzpbXFxcXF0nLFxuICAgICAgICAvLyBNYXRjaCB0ZXh0IChhdCBsZWFzdCB0d28gY2hhcmFjdGVycykgdGhhdCBkb2VzIG5vdCBjb250YWluIGFueSBvZiB0aGUgYWJvdmUgc3BlY2lhbCBjaGFyYWN0ZXJzLFxuICAgICAgICAvLyBhbHRob3VnaCBzb21lIG9mIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQgdG8gc3RhcnQgaXQgKGFsbCBidXQgdGhlIGNvbG9uIGFuZCBjb21tYSkuXG4gICAgICAgIC8vIFRoZSB0ZXh0IGNhbiBjb250YWluIHNwYWNlcywgYnV0IGxlYWRpbmcgb3IgdHJhaWxpbmcgc3BhY2VzIGFyZSBza2lwcGVkLlxuICAgICAgICBldmVyeVRoaW5nRWxzZSA9ICdbXlxcXFxzOiwvXVteJyArIHNwZWNpYWxzICsgJ10qW15cXFxccycgKyBzcGVjaWFscyArICddJyxcbiAgICAgICAgLy8gTWF0Y2ggYW55IG5vbi1zcGFjZSBjaGFyYWN0ZXIgbm90IG1hdGNoZWQgYWxyZWFkeS4gVGhpcyB3aWxsIG1hdGNoIGNvbG9ucyBhbmQgY29tbWFzLCBzaW5jZSB0aGV5J3JlXG4gICAgICAgIC8vIG5vdCBtYXRjaGVkIGJ5IFwiZXZlcnlUaGluZ0Vsc2VcIiwgYnV0IHdpbGwgYWxzbyBtYXRjaCBhbnkgb3RoZXIgc2luZ2xlIGNoYXJhY3RlciB0aGF0IHdhc24ndCBhbHJlYWR5XG4gICAgICAgIC8vIG1hdGNoZWQgKGZvciBleGFtcGxlOiBpbiBcImE6IDEsIGI6IDJcIiwgZWFjaCBvZiB0aGUgbm9uLXNwYWNlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXRjaGVkIGJ5IG9uZU5vdFNwYWNlKS5cbiAgICAgICAgb25lTm90U3BhY2UgPSAnW15cXFxcc10nLFxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgYWN0dWFsIHJlZ3VsYXIgZXhwcmVzc2lvbiBieSBvci1pbmcgdGhlIGFib3ZlIHN0cmluZ3MuIFRoZSBvcmRlciBpcyBpbXBvcnRhbnQuXG4gICAgICAgIGJpbmRpbmdUb2tlbiA9IFJlZ0V4cChzdHJpbmdEb3VibGUgKyAnfCcgKyBzdHJpbmdTaW5nbGUgKyAnfCcgKyBzdHJpbmdSZWdleHAgKyAnfCcgKyBldmVyeVRoaW5nRWxzZSArICd8JyArIG9uZU5vdFNwYWNlLCAnZycpLFxuXG4gICAgICAgIC8vIE1hdGNoIGVuZCBvZiBwcmV2aW91cyB0b2tlbiB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNsYXNoIGlzIGEgZGl2aXNpb24gb3IgcmVnZXguXG4gICAgICAgIGRpdmlzaW9uTG9va0JlaGluZCA9IC9bXFxdKVwiJ0EtWmEtejAtOV8kXSskLyxcbiAgICAgICAga2V5d29yZFJlZ2V4TG9va0JlaGluZCA9IHsnaW4nOjEsJ3JldHVybic6MSwndHlwZW9mJzoxfTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0TGl0ZXJhbChvYmplY3RMaXRlcmFsU3RyaW5nKSB7XG4gICAgICAgIC8vIFRyaW0gbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIGZyb20gdGhlIHN0cmluZ1xuICAgICAgICB2YXIgc3RyID0ga28udXRpbHMuc3RyaW5nVHJpbShvYmplY3RMaXRlcmFsU3RyaW5nKTtcblxuICAgICAgICAvLyBUcmltIGJyYWNlcyAneycgc3Vycm91bmRpbmcgdGhlIHdob2xlIG9iamVjdCBsaXRlcmFsXG4gICAgICAgIGlmIChzdHIuY2hhckNvZGVBdCgwKSA9PT0gMTIzKSBzdHIgPSBzdHIuc2xpY2UoMSwgLTEpO1xuXG4gICAgICAgIC8vIFNwbGl0IGludG8gdG9rZW5zXG4gICAgICAgIHZhciByZXN1bHQgPSBbXSwgdG9rcyA9IHN0ci5tYXRjaChiaW5kaW5nVG9rZW4pLCBrZXksIHZhbHVlcyA9IFtdLCBkZXB0aCA9IDA7XG5cbiAgICAgICAgaWYgKHRva3MpIHtcbiAgICAgICAgICAgIC8vIEFwcGVuZCBhIGNvbW1hIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCBhIHNlcGFyYXRlIGNvZGUgYmxvY2sgdG8gZGVhbCB3aXRoIHRoZSBsYXN0IGl0ZW1cbiAgICAgICAgICAgIHRva3MucHVzaCgnLCcpO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgdG9rOyB0b2sgPSB0b2tzW2ldOyArK2kpIHtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHRvay5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgICAgIC8vIEEgY29tbWEgc2lnbmFscyB0aGUgZW5kIG9mIGEga2V5L3ZhbHVlIHBhaXIgaWYgZGVwdGggaXMgemVyb1xuICAgICAgICAgICAgICAgIGlmIChjID09PSA0NCkgeyAvLyBcIixcIlxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVwdGggPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goKGtleSAmJiB2YWx1ZXMubGVuZ3RoKSA/IHtrZXk6IGtleSwgdmFsdWU6IHZhbHVlcy5qb2luKCcnKX0gOiB7J3Vua25vd24nOiBrZXkgfHwgdmFsdWVzLmpvaW4oJycpfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBkZXB0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gU2ltcGx5IHNraXAgdGhlIGNvbG9uIHRoYXQgc2VwYXJhdGVzIHRoZSBuYW1lIGFuZCB2YWx1ZVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gNTgpIHsgLy8gXCI6XCJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkZXB0aCAmJiAha2V5ICYmIHZhbHVlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHZhbHVlcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gQSBzZXQgb2Ygc2xhc2hlcyBpcyBpbml0aWFsbHkgbWF0Y2hlZCBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgYnV0IGNvdWxkIGJlIGRpdmlzaW9uXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSA0NyAmJiBpICYmIHRvay5sZW5ndGggPiAxKSB7ICAvLyBcIi9cIlxuICAgICAgICAgICAgICAgICAgICAvLyBMb29rIGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIHRva2VuIHRvIGRldGVybWluZSBpZiB0aGUgc2xhc2ggaXMgYWN0dWFsbHkgZGl2aXNpb25cbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gdG9rc1tpLTFdLm1hdGNoKGRpdmlzaW9uTG9va0JlaGluZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAmJiAha2V5d29yZFJlZ2V4TG9va0JlaGluZFttYXRjaFswXV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzbGFzaCBpcyBhY3R1YWxseSBhIGRpdmlzaW9uIHB1bmN0dWF0b3I7IHJlLXBhcnNlIHRoZSByZW1haW5kZXIgb2YgdGhlIHN0cmluZyAobm90IGluY2x1ZGluZyB0aGUgc2xhc2gpXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKHN0ci5pbmRleE9mKHRvaykgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva3MgPSBzdHIubWF0Y2goYmluZGluZ1Rva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva3MucHVzaCgnLCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgd2l0aCBqdXN0IHRoZSBzbGFzaFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rID0gJy8nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSW5jcmVtZW50IGRlcHRoIGZvciBwYXJlbnRoZXNlcywgYnJhY2VzLCBhbmQgYnJhY2tldHMgc28gdGhhdCBpbnRlcmlvciBjb21tYXMgYXJlIGlnbm9yZWRcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09IDQwIHx8IGMgPT09IDEyMyB8fCBjID09PSA5MSkgeyAvLyAnKCcsICd7JywgJ1snXG4gICAgICAgICAgICAgICAgICAgICsrZGVwdGg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSA0MSB8fCBjID09PSAxMjUgfHwgYyA9PT0gOTMpIHsgLy8gJyknLCAnfScsICddJ1xuICAgICAgICAgICAgICAgICAgICAtLWRlcHRoO1xuICAgICAgICAgICAgICAgIC8vIFRoZSBrZXkgd2lsbCBiZSB0aGUgZmlyc3QgdG9rZW47IGlmIGl0J3MgYSBzdHJpbmcsIHRyaW0gdGhlIHF1b3Rlc1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWtleSAmJiAhdmFsdWVzLmxlbmd0aCAmJiAoYyA9PT0gMzQgfHwgYyA9PT0gMzkpKSB7IC8vICdcIicsIFwiJ1wiXG4gICAgICAgICAgICAgICAgICAgIHRvayA9IHRvay5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHRvayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBUd28td2F5IGJpbmRpbmdzIGluY2x1ZGUgYSB3cml0ZSBmdW5jdGlvbiB0aGF0IGFsbG93IHRoZSBoYW5kbGVyIHRvIHVwZGF0ZSB0aGUgdmFsdWUgZXZlbiBpZiBpdCdzIG5vdCBhbiBvYnNlcnZhYmxlLlxuICAgIHZhciB0d29XYXlCaW5kaW5ncyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gcHJlUHJvY2Vzc0JpbmRpbmdzKGJpbmRpbmdzU3RyaW5nT3JLZXlWYWx1ZUFycmF5LCBiaW5kaW5nT3B0aW9ucykge1xuICAgICAgICBiaW5kaW5nT3B0aW9ucyA9IGJpbmRpbmdPcHRpb25zIHx8IHt9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NLZXlWYWx1ZShrZXksIHZhbCkge1xuICAgICAgICAgICAgdmFyIHdyaXRhYmxlVmFsO1xuICAgICAgICAgICAgZnVuY3Rpb24gY2FsbFByZXByb2Nlc3NIb29rKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiAob2JqICYmIG9ialsncHJlcHJvY2VzcyddKSA/ICh2YWwgPSBvYmpbJ3ByZXByb2Nlc3MnXSh2YWwsIGtleSwgcHJvY2Vzc0tleVZhbHVlKSkgOiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFiaW5kaW5nUGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjYWxsUHJlcHJvY2Vzc0hvb2soa29bJ2dldEJpbmRpbmdIYW5kbGVyJ10oa2V5KSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGlmICh0d29XYXlCaW5kaW5nc1trZXldICYmICh3cml0YWJsZVZhbCA9IGdldFdyaXRlYWJsZVZhbHVlKHZhbCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciB0d28td2F5IGJpbmRpbmdzLCBwcm92aWRlIGEgd3JpdGUgbWV0aG9kIGluIGNhc2UgdGhlIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC8vIGlzbid0IGEgd3JpdGFibGUgb2JzZXJ2YWJsZS5cbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlBY2Nlc3NvclJlc3VsdFN0cmluZ3MucHVzaChcIidcIiArIGtleSArIFwiJzpmdW5jdGlvbihfeil7XCIgKyB3cml0YWJsZVZhbCArIFwiPV96fVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBWYWx1ZXMgYXJlIHdyYXBwZWQgaW4gYSBmdW5jdGlvbiBzbyB0aGF0IGVhY2ggdmFsdWUgY2FuIGJlIGFjY2Vzc2VkIGluZGVwZW5kZW50bHlcbiAgICAgICAgICAgIGlmIChtYWtlVmFsdWVBY2Nlc3NvcnMpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSAnZnVuY3Rpb24oKXtyZXR1cm4gJyArIHZhbCArICcgfSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRTdHJpbmdzLnB1c2goXCInXCIgKyBrZXkgKyBcIic6XCIgKyB2YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdFN0cmluZ3MgPSBbXSxcbiAgICAgICAgICAgIHByb3BlcnR5QWNjZXNzb3JSZXN1bHRTdHJpbmdzID0gW10sXG4gICAgICAgICAgICBtYWtlVmFsdWVBY2Nlc3NvcnMgPSBiaW5kaW5nT3B0aW9uc1sndmFsdWVBY2Nlc3NvcnMnXSxcbiAgICAgICAgICAgIGJpbmRpbmdQYXJhbXMgPSBiaW5kaW5nT3B0aW9uc1snYmluZGluZ1BhcmFtcyddLFxuICAgICAgICAgICAga2V5VmFsdWVBcnJheSA9IHR5cGVvZiBiaW5kaW5nc1N0cmluZ09yS2V5VmFsdWVBcnJheSA9PT0gXCJzdHJpbmdcIiA/XG4gICAgICAgICAgICAgICAgcGFyc2VPYmplY3RMaXRlcmFsKGJpbmRpbmdzU3RyaW5nT3JLZXlWYWx1ZUFycmF5KSA6IGJpbmRpbmdzU3RyaW5nT3JLZXlWYWx1ZUFycmF5O1xuXG4gICAgICAgIGtvLnV0aWxzLmFycmF5Rm9yRWFjaChrZXlWYWx1ZUFycmF5LCBmdW5jdGlvbihrZXlWYWx1ZSkge1xuICAgICAgICAgICAgcHJvY2Vzc0tleVZhbHVlKGtleVZhbHVlLmtleSB8fCBrZXlWYWx1ZVsndW5rbm93biddLCBrZXlWYWx1ZS52YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eUFjY2Vzc29yUmVzdWx0U3RyaW5ncy5sZW5ndGgpXG4gICAgICAgICAgICBwcm9jZXNzS2V5VmFsdWUoJ19rb19wcm9wZXJ0eV93cml0ZXJzJywgXCJ7XCIgKyBwcm9wZXJ0eUFjY2Vzc29yUmVzdWx0U3RyaW5ncy5qb2luKFwiLFwiKSArIFwiIH1cIik7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFN0cmluZ3Muam9pbihcIixcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmluZGluZ1Jld3JpdGVWYWxpZGF0b3JzOiBbXSxcblxuICAgICAgICB0d29XYXlCaW5kaW5nczogdHdvV2F5QmluZGluZ3MsXG5cbiAgICAgICAgcGFyc2VPYmplY3RMaXRlcmFsOiBwYXJzZU9iamVjdExpdGVyYWwsXG5cbiAgICAgICAgcHJlUHJvY2Vzc0JpbmRpbmdzOiBwcmVQcm9jZXNzQmluZGluZ3MsXG5cbiAgICAgICAga2V5VmFsdWVBcnJheUNvbnRhaW5zS2V5OiBmdW5jdGlvbihrZXlWYWx1ZUFycmF5LCBrZXkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5VmFsdWVBcnJheS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICBpZiAoa2V5VmFsdWVBcnJheVtpXVsna2V5J10gPT0ga2V5KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBJbnRlcm5hbCwgcHJpdmF0ZSBLTyB1dGlsaXR5IGZvciB1cGRhdGluZyBtb2RlbCBwcm9wZXJ0aWVzIGZyb20gd2l0aGluIGJpbmRpbmdzXG4gICAgICAgIC8vIHByb3BlcnR5OiAgICAgICAgICAgIElmIHRoZSBwcm9wZXJ0eSBiZWluZyB1cGRhdGVkIGlzIChvciBtaWdodCBiZSkgYW4gb2JzZXJ2YWJsZSwgcGFzcyBpdCBoZXJlXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIElmIGl0IHR1cm5zIG91dCB0byBiZSBhIHdyaXRhYmxlIG9ic2VydmFibGUsIGl0IHdpbGwgYmUgd3JpdHRlbiB0byBkaXJlY3RseVxuICAgICAgICAvLyBhbGxCaW5kaW5nczogICAgICAgICBBbiBvYmplY3Qgd2l0aCBhIGdldCBtZXRob2QgdG8gcmV0cmlldmUgYmluZGluZ3MgaW4gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGNvbnRleHQuXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFRoaXMgd2lsbCBiZSBzZWFyY2hlZCBmb3IgYSAnX2tvX3Byb3BlcnR5X3dyaXRlcnMnIHByb3BlcnR5IGluIGNhc2UgeW91J3JlIHdyaXRpbmcgdG8gYSBub24tb2JzZXJ2YWJsZVxuICAgICAgICAvLyBrZXk6ICAgICAgICAgICAgICAgICBUaGUga2V5IGlkZW50aWZ5aW5nIHRoZSBwcm9wZXJ0eSB0byBiZSB3cml0dGVuLiBFeGFtcGxlOiBmb3IgeyBoYXNGb2N1czogbXlWYWx1ZSB9LCB3cml0ZSB0byAnbXlWYWx1ZScgYnkgc3BlY2lmeWluZyB0aGUga2V5ICdoYXNGb2N1cydcbiAgICAgICAgLy8gdmFsdWU6ICAgICAgICAgICAgICAgVGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW5cbiAgICAgICAgLy8gY2hlY2tJZkRpZmZlcmVudDogICAgSWYgdHJ1ZSwgYW5kIGlmIHRoZSBwcm9wZXJ0eSBiZWluZyB3cml0dGVuIGlzIGEgd3JpdGFibGUgb2JzZXJ2YWJsZSwgdGhlIHZhbHVlIHdpbGwgb25seSBiZSB3cml0dGVuIGlmXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIGl0IGlzICE9PSBleGlzdGluZyB2YWx1ZSBvbiB0aGF0IHdyaXRhYmxlIG9ic2VydmFibGVcbiAgICAgICAgd3JpdGVWYWx1ZVRvUHJvcGVydHk6IGZ1bmN0aW9uKHByb3BlcnR5LCBhbGxCaW5kaW5ncywga2V5LCB2YWx1ZSwgY2hlY2tJZkRpZmZlcmVudCkge1xuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eSB8fCAha28uaXNPYnNlcnZhYmxlKHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIHZhciBwcm9wV3JpdGVycyA9IGFsbEJpbmRpbmdzLmdldCgnX2tvX3Byb3BlcnR5X3dyaXRlcnMnKTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcFdyaXRlcnMgJiYgcHJvcFdyaXRlcnNba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgcHJvcFdyaXRlcnNba2V5XSh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGtvLmlzV3JpdGVhYmxlT2JzZXJ2YWJsZShwcm9wZXJ0eSkgJiYgKCFjaGVja0lmRGlmZmVyZW50IHx8IHByb3BlcnR5LnBlZWsoKSAhPT0gdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHkodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn0pKCk7XG5cbmtvLmV4cG9ydFN5bWJvbCgnZXhwcmVzc2lvblJld3JpdGluZycsIGtvLmV4cHJlc3Npb25SZXdyaXRpbmcpO1xua28uZXhwb3J0U3ltYm9sKCdleHByZXNzaW9uUmV3cml0aW5nLmJpbmRpbmdSZXdyaXRlVmFsaWRhdG9ycycsIGtvLmV4cHJlc3Npb25SZXdyaXRpbmcuYmluZGluZ1Jld3JpdGVWYWxpZGF0b3JzKTtcbmtvLmV4cG9ydFN5bWJvbCgnZXhwcmVzc2lvblJld3JpdGluZy5wYXJzZU9iamVjdExpdGVyYWwnLCBrby5leHByZXNzaW9uUmV3cml0aW5nLnBhcnNlT2JqZWN0TGl0ZXJhbCk7XG5rby5leHBvcnRTeW1ib2woJ2V4cHJlc3Npb25SZXdyaXRpbmcucHJlUHJvY2Vzc0JpbmRpbmdzJywga28uZXhwcmVzc2lvblJld3JpdGluZy5wcmVQcm9jZXNzQmluZGluZ3MpO1xuXG4vLyBNYWtpbmcgYmluZGluZ3MgZXhwbGljaXRseSBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgXCJ0d28gd2F5XCIgaXNuJ3QgaWRlYWwgaW4gdGhlIGxvbmcgdGVybSAoaXQgd291bGQgYmUgYmV0dGVyIGlmXG4vLyBhbGwgYmluZGluZ3MgY291bGQgdXNlIGFuIG9mZmljaWFsICdwcm9wZXJ0eSB3cml0ZXInIEFQSSB3aXRob3V0IG5lZWRpbmcgdG8gZGVjbGFyZSB0aGF0IHRoZXkgbWlnaHQpLiBIb3dldmVyLFxuLy8gc2luY2UgdGhpcyBpcyBub3QsIGFuZCBoYXMgbmV2ZXIgYmVlbiwgYSBwdWJsaWMgQVBJIChfa29fcHJvcGVydHlfd3JpdGVycyB3YXMgbmV2ZXIgZG9jdW1lbnRlZCksIGl0J3MgYWNjZXB0YWJsZVxuLy8gYXMgYW4gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIGluIHRoZSBzaG9ydCB0ZXJtLlxuLy8gRm9yIHRob3NlIGRldmVsb3BlcnMgd2hvIHJlbHkgb24gX2tvX3Byb3BlcnR5X3dyaXRlcnMgaW4gdGhlaXIgY3VzdG9tIGJpbmRpbmdzLCB3ZSBleHBvc2UgX3R3b1dheUJpbmRpbmdzIGFzIGFuXG4vLyB1bmRvY3VtZW50ZWQgZmVhdHVyZSB0aGF0IG1ha2VzIGl0IHJlbGF0aXZlbHkgZWFzeSB0byB1cGdyYWRlIHRvIEtPIDMuMC4gSG93ZXZlciwgdGhpcyBpcyBzdGlsbCBub3QgYW4gb2ZmaWNpYWxcbi8vIHB1YmxpYyBBUEksIGFuZCB3ZSByZXNlcnZlIHRoZSByaWdodCB0byByZW1vdmUgaXQgYXQgYW55IHRpbWUgaWYgd2UgY3JlYXRlIGEgcmVhbCBwdWJsaWMgcHJvcGVydHkgd3JpdGVycyBBUEkuXG5rby5leHBvcnRTeW1ib2woJ2V4cHJlc3Npb25SZXdyaXRpbmcuX3R3b1dheUJpbmRpbmdzJywga28uZXhwcmVzc2lvblJld3JpdGluZy50d29XYXlCaW5kaW5ncyk7XG5cbi8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBkZWZpbmUgdGhlIGZvbGxvd2luZyBhbGlhc2VzLiAoUHJldmlvdXNseSwgdGhlc2UgZnVuY3Rpb24gbmFtZXMgd2VyZSBtaXNsZWFkaW5nIGJlY2F1c2Vcbi8vIHRoZXkgcmVmZXJyZWQgdG8gSlNPTiBzcGVjaWZpY2FsbHksIGV2ZW4gdGhvdWdoIHRoZXkgYWN0dWFsbHkgd29yayB3aXRoIGFyYml0cmFyeSBKYXZhU2NyaXB0IG9iamVjdCBsaXRlcmFsIGV4cHJlc3Npb25zLilcbmtvLmV4cG9ydFN5bWJvbCgnanNvbkV4cHJlc3Npb25SZXdyaXRpbmcnLCBrby5leHByZXNzaW9uUmV3cml0aW5nKTtcbmtvLmV4cG9ydFN5bWJvbCgnanNvbkV4cHJlc3Npb25SZXdyaXRpbmcuaW5zZXJ0UHJvcGVydHlBY2Nlc3NvcnNJbnRvSnNvbicsIGtvLmV4cHJlc3Npb25SZXdyaXRpbmcucHJlUHJvY2Vzc0JpbmRpbmdzKTtcbihmdW5jdGlvbigpIHtcbiAgICAvLyBcIlZpcnR1YWwgZWxlbWVudHNcIiBpcyBhbiBhYnN0cmFjdGlvbiBvbiB0b3Agb2YgdGhlIHVzdWFsIERPTSBBUEkgd2hpY2ggdW5kZXJzdGFuZHMgdGhlIG5vdGlvbiB0aGF0IGNvbW1lbnQgbm9kZXNcbiAgICAvLyBtYXkgYmUgdXNlZCB0byByZXByZXNlbnQgaGllcmFyY2h5IChpbiBhZGRpdGlvbiB0byB0aGUgRE9NJ3MgbmF0dXJhbCBoaWVyYXJjaHkpLlxuICAgIC8vIElmIHlvdSBjYWxsIHRoZSBET00tbWFuaXB1bGF0aW5nIGZ1bmN0aW9ucyBvbiBrby52aXJ0dWFsRWxlbWVudHMsIHlvdSB3aWxsIGJlIGFibGUgdG8gcmVhZCBhbmQgd3JpdGUgdGhlIHN0YXRlXG4gICAgLy8gb2YgdGhhdCB2aXJ0dWFsIGhpZXJhcmNoeVxuICAgIC8vXG4gICAgLy8gVGhlIHBvaW50IG9mIGFsbCB0aGlzIGlzIHRvIHN1cHBvcnQgY29udGFpbmVybGVzcyB0ZW1wbGF0ZXMgKGUuZy4sIDwhLS0ga28gZm9yZWFjaDpzb21lQ29sbGVjdGlvbiAtLT5ibGFoPCEtLSAva28gLS0+KVxuICAgIC8vIHdpdGhvdXQgaGF2aW5nIHRvIHNjYXR0ZXIgc3BlY2lhbCBjYXNlcyBhbGwgb3ZlciB0aGUgYmluZGluZyBhbmQgdGVtcGxhdGluZyBjb2RlLlxuXG4gICAgLy8gSUUgOSBjYW5ub3QgcmVsaWFibHkgcmVhZCB0aGUgXCJub2RlVmFsdWVcIiBwcm9wZXJ0eSBvZiBhIGNvbW1lbnQgbm9kZSAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9TdGV2ZVNhbmRlcnNvbi9rbm9ja291dC9pc3N1ZXMvMTg2KVxuICAgIC8vIGJ1dCBpdCBkb2VzIGdpdmUgdGhlbSBhIG5vbnN0YW5kYXJkIGFsdGVybmF0aXZlIHByb3BlcnR5IGNhbGxlZCBcInRleHRcIiB0aGF0IGl0IGNhbiByZWFkIHJlbGlhYmx5LiBPdGhlciBicm93c2VycyBkb24ndCBoYXZlIHRoYXQgcHJvcGVydHkuXG4gICAgLy8gU28sIHVzZSBub2RlLnRleHQgd2hlcmUgYXZhaWxhYmxlLCBhbmQgbm9kZS5ub2RlVmFsdWUgZWxzZXdoZXJlXG4gICAgdmFyIGNvbW1lbnROb2Rlc0hhdmVUZXh0UHJvcGVydHkgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVDb21tZW50KFwidGVzdFwiKS50ZXh0ID09PSBcIjwhLS10ZXN0LS0+XCI7XG5cbiAgICB2YXIgc3RhcnRDb21tZW50UmVnZXggPSBjb21tZW50Tm9kZXNIYXZlVGV4dFByb3BlcnR5ID8gL148IS0tXFxzKmtvKD86XFxzKyhbXFxzXFxTXSspKT9cXHMqLS0+JC8gOiAvXlxccyprbyg/OlxccysoW1xcc1xcU10rKSk/XFxzKiQvO1xuICAgIHZhciBlbmRDb21tZW50UmVnZXggPSAgIGNvbW1lbnROb2Rlc0hhdmVUZXh0UHJvcGVydHkgPyAvXjwhLS1cXHMqXFwva29cXHMqLS0+JC8gOiAvXlxccypcXC9rb1xccyokLztcbiAgICB2YXIgaHRtbFRhZ3NXaXRoT3B0aW9uYWxseUNsb3NpbmdDaGlsZHJlbiA9IHsgJ3VsJzogdHJ1ZSwgJ29sJzogdHJ1ZSB9O1xuXG4gICAgZnVuY3Rpb24gaXNTdGFydENvbW1lbnQobm9kZSkge1xuICAgICAgICByZXR1cm4gKG5vZGUubm9kZVR5cGUgPT0gOCkgJiYgc3RhcnRDb21tZW50UmVnZXgudGVzdChjb21tZW50Tm9kZXNIYXZlVGV4dFByb3BlcnR5ID8gbm9kZS50ZXh0IDogbm9kZS5ub2RlVmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRW5kQ29tbWVudChub2RlKSB7XG4gICAgICAgIHJldHVybiAobm9kZS5ub2RlVHlwZSA9PSA4KSAmJiBlbmRDb21tZW50UmVnZXgudGVzdChjb21tZW50Tm9kZXNIYXZlVGV4dFByb3BlcnR5ID8gbm9kZS50ZXh0IDogbm9kZS5ub2RlVmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFZpcnR1YWxDaGlsZHJlbihzdGFydENvbW1lbnQsIGFsbG93VW5iYWxhbmNlZCkge1xuICAgICAgICB2YXIgY3VycmVudE5vZGUgPSBzdGFydENvbW1lbnQ7XG4gICAgICAgIHZhciBkZXB0aCA9IDE7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IFtdO1xuICAgICAgICB3aGlsZSAoY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5uZXh0U2libGluZykge1xuICAgICAgICAgICAgaWYgKGlzRW5kQ29tbWVudChjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICAgICAgICAgIGlmIChkZXB0aCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGN1cnJlbnROb2RlKTtcblxuICAgICAgICAgICAgaWYgKGlzU3RhcnRDb21tZW50KGN1cnJlbnROb2RlKSlcbiAgICAgICAgICAgICAgICBkZXB0aCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYWxsb3dVbmJhbGFuY2VkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgY2xvc2luZyBjb21tZW50IHRhZyB0byBtYXRjaDogXCIgKyBzdGFydENvbW1lbnQubm9kZVZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0TWF0Y2hpbmdFbmRDb21tZW50KHN0YXJ0Q29tbWVudCwgYWxsb3dVbmJhbGFuY2VkKSB7XG4gICAgICAgIHZhciBhbGxWaXJ0dWFsQ2hpbGRyZW4gPSBnZXRWaXJ0dWFsQ2hpbGRyZW4oc3RhcnRDb21tZW50LCBhbGxvd1VuYmFsYW5jZWQpO1xuICAgICAgICBpZiAoYWxsVmlydHVhbENoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAoYWxsVmlydHVhbENoaWxkcmVuLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFsbFZpcnR1YWxDaGlsZHJlblthbGxWaXJ0dWFsQ2hpbGRyZW4ubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnRDb21tZW50Lm5leHRTaWJsaW5nO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBNdXN0IGhhdmUgbm8gbWF0Y2hpbmcgZW5kIGNvbW1lbnQsIGFuZCBhbGxvd1VuYmFsYW5jZWQgaXMgdHJ1ZVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFVuYmFsYW5jZWRDaGlsZFRhZ3Mobm9kZSkge1xuICAgICAgICAvLyBlLmcuLCBmcm9tIDxkaXY+T0s8L2Rpdj48IS0tIGtvIGJsYWggLS0+PHNwYW4+QW5vdGhlcjwvc3Bhbj4sIHJldHVybnM6IDwhLS0ga28gYmxhaCAtLT48c3Bhbj5Bbm90aGVyPC9zcGFuPlxuICAgICAgICAvLyAgICAgICBmcm9tIDxkaXY+T0s8L2Rpdj48IS0tIC9rbyAtLT48IS0tIC9rbyAtLT4sICAgICAgICAgICAgIHJldHVybnM6IDwhLS0gL2tvIC0tPjwhLS0gL2tvIC0tPlxuICAgICAgICB2YXIgY2hpbGROb2RlID0gbm9kZS5maXJzdENoaWxkLCBjYXB0dXJlUmVtYWluaW5nID0gbnVsbDtcbiAgICAgICAgaWYgKGNoaWxkTm9kZSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGlmIChjYXB0dXJlUmVtYWluaW5nKSAgICAgICAgICAgICAgICAgICAvLyBXZSBhbHJlYWR5IGhpdCBhbiB1bmJhbGFuY2VkIG5vZGUgYW5kIGFyZSBub3cganVzdCBzY29vcGluZyB1cCBhbGwgc3Vic2VxdWVudCBub2Rlc1xuICAgICAgICAgICAgICAgICAgICBjYXB0dXJlUmVtYWluaW5nLnB1c2goY2hpbGROb2RlKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1N0YXJ0Q29tbWVudChjaGlsZE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaGluZ0VuZENvbW1lbnQgPSBnZXRNYXRjaGluZ0VuZENvbW1lbnQoY2hpbGROb2RlLCAvKiBhbGxvd1VuYmFsYW5jZWQ6ICovIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmdFbmRDb21tZW50KSAgICAgICAgICAgICAvLyBJdCdzIGEgYmFsYW5jZWQgdGFnLCBzbyBza2lwIGltbWVkaWF0ZWx5IHRvIHRoZSBlbmQgb2YgdGhpcyB2aXJ0dWFsIHNldFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gbWF0Y2hpbmdFbmRDb21tZW50O1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlUmVtYWluaW5nID0gW2NoaWxkTm9kZV07IC8vIEl0J3MgdW5iYWxhbmNlZCwgc28gc3RhcnQgY2FwdHVyaW5nIGZyb20gdGhpcyBwb2ludFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNFbmRDb21tZW50KGNoaWxkTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FwdHVyZVJlbWFpbmluZyA9IFtjaGlsZE5vZGVdOyAgICAgLy8gSXQncyB1bmJhbGFuY2VkIChpZiBpdCB3YXNuJ3QsIHdlJ2QgaGF2ZSBza2lwcGVkIG92ZXIgaXQgYWxyZWFkeSksIHNvIHN0YXJ0IGNhcHR1cmluZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5uZXh0U2libGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhcHR1cmVSZW1haW5pbmc7XG4gICAgfVxuXG4gICAga28udmlydHVhbEVsZW1lbnRzID0ge1xuICAgICAgICBhbGxvd2VkQmluZGluZ3M6IHt9LFxuXG4gICAgICAgIGNoaWxkTm9kZXM6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBpc1N0YXJ0Q29tbWVudChub2RlKSA/IGdldFZpcnR1YWxDaGlsZHJlbihub2RlKSA6IG5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgfSxcblxuICAgICAgICBlbXB0eU5vZGU6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgIGlmICghaXNTdGFydENvbW1lbnQobm9kZSkpXG4gICAgICAgICAgICAgICAga28udXRpbHMuZW1wdHlEb21Ob2RlKG5vZGUpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIHZpcnR1YWxDaGlsZHJlbiA9IGtvLnZpcnR1YWxFbGVtZW50cy5jaGlsZE5vZGVzKG5vZGUpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdmlydHVhbENoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcbiAgICAgICAgICAgICAgICAgICAga28ucmVtb3ZlTm9kZSh2aXJ0dWFsQ2hpbGRyZW5baV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldERvbU5vZGVDaGlsZHJlbjogZnVuY3Rpb24obm9kZSwgY2hpbGROb2Rlcykge1xuICAgICAgICAgICAgaWYgKCFpc1N0YXJ0Q29tbWVudChub2RlKSlcbiAgICAgICAgICAgICAgICBrby51dGlscy5zZXREb21Ob2RlQ2hpbGRyZW4obm9kZSwgY2hpbGROb2Rlcyk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBrby52aXJ0dWFsRWxlbWVudHMuZW1wdHlOb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgIHZhciBlbmRDb21tZW50Tm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7IC8vIE11c3QgYmUgdGhlIG5leHQgc2libGluZywgYXMgd2UganVzdCBlbXB0aWVkIHRoZSBjaGlsZHJlblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBqOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGVuZENvbW1lbnROb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkTm9kZXNbaV0sIGVuZENvbW1lbnROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBwcmVwZW5kOiBmdW5jdGlvbihjb250YWluZXJOb2RlLCBub2RlVG9QcmVwZW5kKSB7XG4gICAgICAgICAgICBpZiAoIWlzU3RhcnRDb21tZW50KGNvbnRhaW5lck5vZGUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lck5vZGUuZmlyc3RDaGlsZClcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyTm9kZS5pbnNlcnRCZWZvcmUobm9kZVRvUHJlcGVuZCwgY29udGFpbmVyTm9kZS5maXJzdENoaWxkKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lck5vZGUuYXBwZW5kQ2hpbGQobm9kZVRvUHJlcGVuZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IGNvbW1lbnRzIG11c3QgYWx3YXlzIGhhdmUgYSBwYXJlbnQgYW5kIGF0IGxlYXN0IG9uZSBmb2xsb3dpbmcgc2libGluZyAodGhlIGVuZCBjb21tZW50KVxuICAgICAgICAgICAgICAgIGNvbnRhaW5lck5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZVRvUHJlcGVuZCwgY29udGFpbmVyTm9kZS5uZXh0U2libGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgaW5zZXJ0QWZ0ZXI6IGZ1bmN0aW9uKGNvbnRhaW5lck5vZGUsIG5vZGVUb0luc2VydCwgaW5zZXJ0QWZ0ZXJOb2RlKSB7XG4gICAgICAgICAgICBpZiAoIWluc2VydEFmdGVyTm9kZSkge1xuICAgICAgICAgICAgICAgIGtvLnZpcnR1YWxFbGVtZW50cy5wcmVwZW5kKGNvbnRhaW5lck5vZGUsIG5vZGVUb0luc2VydCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc1N0YXJ0Q29tbWVudChjb250YWluZXJOb2RlKSkge1xuICAgICAgICAgICAgICAgIC8vIEluc2VydCBhZnRlciBpbnNlcnRpb24gcG9pbnRcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QWZ0ZXJOb2RlLm5leHRTaWJsaW5nKVxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJOb2RlLmluc2VydEJlZm9yZShub2RlVG9JbnNlcnQsIGluc2VydEFmdGVyTm9kZS5uZXh0U2libGluZyk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJOb2RlLmFwcGVuZENoaWxkKG5vZGVUb0luc2VydCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIENoaWxkcmVuIG9mIHN0YXJ0IGNvbW1lbnRzIG11c3QgYWx3YXlzIGhhdmUgYSBwYXJlbnQgYW5kIGF0IGxlYXN0IG9uZSBmb2xsb3dpbmcgc2libGluZyAodGhlIGVuZCBjb21tZW50KVxuICAgICAgICAgICAgICAgIGNvbnRhaW5lck5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZVRvSW5zZXJ0LCBpbnNlcnRBZnRlck5vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGZpcnN0Q2hpbGQ6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgIGlmICghaXNTdGFydENvbW1lbnQobm9kZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGlmICghbm9kZS5uZXh0U2libGluZyB8fCBpc0VuZENvbW1lbnQobm9kZS5uZXh0U2libGluZykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbiAgICAgICAgfSxcblxuICAgICAgICBuZXh0U2libGluZzogZnVuY3Rpb24obm9kZSkge1xuICAgICAgICAgICAgaWYgKGlzU3RhcnRDb21tZW50KG5vZGUpKVxuICAgICAgICAgICAgICAgIG5vZGUgPSBnZXRNYXRjaGluZ0VuZENvbW1lbnQobm9kZSk7XG4gICAgICAgICAgICBpZiAobm9kZS5uZXh0U2libGluZyAmJiBpc0VuZENvbW1lbnQobm9kZS5uZXh0U2libGluZykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbiAgICAgICAgfSxcblxuICAgICAgICBoYXNCaW5kaW5nVmFsdWU6IGlzU3RhcnRDb21tZW50LFxuXG4gICAgICAgIHZpcnR1YWxOb2RlQmluZGluZ1ZhbHVlOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICB2YXIgcmVnZXhNYXRjaCA9IChjb21tZW50Tm9kZXNIYXZlVGV4dFByb3BlcnR5ID8gbm9kZS50ZXh0IDogbm9kZS5ub2RlVmFsdWUpLm1hdGNoKHN0YXJ0Q29tbWVudFJlZ2V4KTtcbiAgICAgICAgICAgIHJldHVybiByZWdleE1hdGNoID8gcmVnZXhNYXRjaFsxXSA6IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbm9ybWFsaXNlVmlydHVhbEVsZW1lbnREb21TdHJ1Y3R1cmU6IGZ1bmN0aW9uKGVsZW1lbnRWZXJpZmllZCkge1xuICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL1N0ZXZlU2FuZGVyc29uL2tub2Nrb3V0L2lzc3Vlcy8xNTVcbiAgICAgICAgICAgIC8vIChJRSA8PSA4IG9yIElFIDkgcXVpcmtzIG1vZGUgcGFyc2VzIHlvdXIgSFRNTCB3ZWlyZGx5LCB0cmVhdGluZyBjbG9zaW5nIDwvbGk+IHRhZ3MgYXMgaWYgdGhleSBkb24ndCBleGlzdCwgdGhlcmVieSBtb3ZpbmcgY29tbWVudCBub2Rlc1xuICAgICAgICAgICAgLy8gdGhhdCBhcmUgZGlyZWN0IGRlc2NlbmRhbnRzIG9mIDx1bD4gaW50byB0aGUgcHJlY2VkaW5nIDxsaT4pXG4gICAgICAgICAgICBpZiAoIWh0bWxUYWdzV2l0aE9wdGlvbmFsbHlDbG9zaW5nQ2hpbGRyZW5ba28udXRpbHMudGFnTmFtZUxvd2VyKGVsZW1lbnRWZXJpZmllZCldKVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgLy8gU2NhbiBpbW1lZGlhdGUgY2hpbGRyZW4gdG8gc2VlIGlmIHRoZXkgY29udGFpbiB1bmJhbGFuY2VkIGNvbW1lbnQgdGFncy4gSWYgdGhleSBkbywgdGhvc2UgY29tbWVudCB0YWdzXG4gICAgICAgICAgICAvLyBtdXN0IGJlIGludGVuZGVkIHRvIGFwcGVhciAqYWZ0ZXIqIHRoYXQgY2hpbGQsIHNvIG1vdmUgdGhlbSB0aGVyZS5cbiAgICAgICAgICAgIHZhciBjaGlsZE5vZGUgPSBlbGVtZW50VmVyaWZpZWQuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGlmIChjaGlsZE5vZGUpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmJhbGFuY2VkVGFncyA9IGdldFVuYmFsYW5jZWRDaGlsZFRhZ3MoY2hpbGROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmJhbGFuY2VkVGFncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeCB1cCB0aGUgRE9NIGJ5IG1vdmluZyB0aGUgdW5iYWxhbmNlZCB0YWdzIHRvIHdoZXJlIHRoZXkgbW9zdCBsaWtlbHkgd2VyZSBpbnRlbmRlZCB0byBiZSBwbGFjZWQgLSAqYWZ0ZXIqIHRoZSBjaGlsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlVG9JbnNlcnRCZWZvcmUgPSBjaGlsZE5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmJhbGFuY2VkVGFncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZVRvSW5zZXJ0QmVmb3JlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFZlcmlmaWVkLmluc2VydEJlZm9yZSh1bmJhbGFuY2VkVGFnc1tpXSwgbm9kZVRvSW5zZXJ0QmVmb3JlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFZlcmlmaWVkLmFwcGVuZENoaWxkKHVuYmFsYW5jZWRUYWdzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IHdoaWxlIChjaGlsZE5vZGUgPSBjaGlsZE5vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn0pKCk7XG5rby5leHBvcnRTeW1ib2woJ3ZpcnR1YWxFbGVtZW50cycsIGtvLnZpcnR1YWxFbGVtZW50cyk7XG5rby5leHBvcnRTeW1ib2woJ3ZpcnR1YWxFbGVtZW50cy5hbGxvd2VkQmluZGluZ3MnLCBrby52aXJ0dWFsRWxlbWVudHMuYWxsb3dlZEJpbmRpbmdzKTtcbmtvLmV4cG9ydFN5bWJvbCgndmlydHVhbEVsZW1lbnRzLmVtcHR5Tm9kZScsIGtvLnZpcnR1YWxFbGVtZW50cy5lbXB0eU5vZGUpO1xuLy9rby5leHBvcnRTeW1ib2woJ3ZpcnR1YWxFbGVtZW50cy5maXJzdENoaWxkJywga28udmlydHVhbEVsZW1lbnRzLmZpcnN0Q2hpbGQpOyAgICAgLy8gZmlyc3RDaGlsZCBpcyBub3QgbWluaWZpZWRcbmtvLmV4cG9ydFN5bWJvbCgndmlydHVhbEVsZW1lbnRzLmluc2VydEFmdGVyJywga28udmlydHVhbEVsZW1lbnRzLmluc2VydEFmdGVyKTtcbi8va28uZXhwb3J0U3ltYm9sKCd2aXJ0dWFsRWxlbWVudHMubmV4dFNpYmxpbmcnLCBrby52aXJ0dWFsRWxlbWVudHMubmV4dFNpYmxpbmcpOyAgIC8vIG5leHRTaWJsaW5nIGlzIG5vdCBtaW5pZmllZFxua28uZXhwb3J0U3ltYm9sKCd2aXJ0dWFsRWxlbWVudHMucHJlcGVuZCcsIGtvLnZpcnR1YWxFbGVtZW50cy5wcmVwZW5kKTtcbmtvLmV4cG9ydFN5bWJvbCgndmlydHVhbEVsZW1lbnRzLnNldERvbU5vZGVDaGlsZHJlbicsIGtvLnZpcnR1YWxFbGVtZW50cy5zZXREb21Ob2RlQ2hpbGRyZW4pO1xuKGZ1bmN0aW9uKCkge1xuICAgIHZhciBkZWZhdWx0QmluZGluZ0F0dHJpYnV0ZU5hbWUgPSBcImRhdGEtYmluZFwiO1xuXG4gICAga28uYmluZGluZ1Byb3ZpZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuYmluZGluZ0NhY2hlID0ge307XG4gICAgfTtcblxuICAgIGtvLnV0aWxzLmV4dGVuZChrby5iaW5kaW5nUHJvdmlkZXIucHJvdG90eXBlLCB7XG4gICAgICAgICdub2RlSGFzQmluZGluZ3MnOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIEVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlKGRlZmF1bHRCaW5kaW5nQXR0cmlidXRlTmFtZSkgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgfHwga28uY29tcG9uZW50c1snZ2V0Q29tcG9uZW50TmFtZUZvck5vZGUnXShub2RlKTtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IC8vIENvbW1lbnQgbm9kZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga28udmlydHVhbEVsZW1lbnRzLmhhc0JpbmRpbmdWYWx1ZShub2RlKTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ2dldEJpbmRpbmdzJzogZnVuY3Rpb24obm9kZSwgYmluZGluZ0NvbnRleHQpIHtcbiAgICAgICAgICAgIHZhciBiaW5kaW5nc1N0cmluZyA9IHRoaXNbJ2dldEJpbmRpbmdzU3RyaW5nJ10obm9kZSwgYmluZGluZ0NvbnRleHQpLFxuICAgICAgICAgICAgICAgIHBhcnNlZEJpbmRpbmdzID0gYmluZGluZ3NTdHJpbmcgPyB0aGlzWydwYXJzZUJpbmRpbmdzU3RyaW5nJ10oYmluZGluZ3NTdHJpbmcsIGJpbmRpbmdDb250ZXh0LCBub2RlKSA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4ga28uY29tcG9uZW50cy5hZGRCaW5kaW5nc0ZvckN1c3RvbUVsZW1lbnQocGFyc2VkQmluZGluZ3MsIG5vZGUsIGJpbmRpbmdDb250ZXh0LCAvKiB2YWx1ZUFjY2Vzc29ycyAqLyBmYWxzZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ2dldEJpbmRpbmdBY2Nlc3NvcnMnOiBmdW5jdGlvbihub2RlLCBiaW5kaW5nQ29udGV4dCkge1xuICAgICAgICAgICAgdmFyIGJpbmRpbmdzU3RyaW5nID0gdGhpc1snZ2V0QmluZGluZ3NTdHJpbmcnXShub2RlLCBiaW5kaW5nQ29udGV4dCksXG4gICAgICAgICAgICAgICAgcGFyc2VkQmluZGluZ3MgPSBiaW5kaW5nc1N0cmluZyA/IHRoaXNbJ3BhcnNlQmluZGluZ3NTdHJpbmcnXShiaW5kaW5nc1N0cmluZywgYmluZGluZ0NvbnRleHQsIG5vZGUsIHsgJ3ZhbHVlQWNjZXNzb3JzJzogdHJ1ZSB9KSA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4ga28uY29tcG9uZW50cy5hZGRCaW5kaW5nc0ZvckN1c3RvbUVsZW1lbnQocGFyc2VkQmluZGluZ3MsIG5vZGUsIGJpbmRpbmdDb250ZXh0LCAvKiB2YWx1ZUFjY2Vzc29ycyAqLyB0cnVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoaXMgZGVmYXVsdCBwcm92aWRlci5cbiAgICAgICAgLy8gSXQncyBub3QgcGFydCBvZiB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24gZm9yIGEgZ2VuZXJhbCBiaW5kaW5nIHByb3ZpZGVyLlxuICAgICAgICAnZ2V0QmluZGluZ3NTdHJpbmcnOiBmdW5jdGlvbihub2RlLCBiaW5kaW5nQ29udGV4dCkge1xuICAgICAgICAgICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoZGVmYXVsdEJpbmRpbmdBdHRyaWJ1dGVOYW1lKTsgICAvLyBFbGVtZW50XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4ga28udmlydHVhbEVsZW1lbnRzLnZpcnR1YWxOb2RlQmluZGluZ1ZhbHVlKG5vZGUpOyAvLyBDb21tZW50IG5vZGVcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoaXMgZGVmYXVsdCBwcm92aWRlci5cbiAgICAgICAgLy8gSXQncyBub3QgcGFydCBvZiB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24gZm9yIGEgZ2VuZXJhbCBiaW5kaW5nIHByb3ZpZGVyLlxuICAgICAgICAncGFyc2VCaW5kaW5nc1N0cmluZyc6IGZ1bmN0aW9uKGJpbmRpbmdzU3RyaW5nLCBiaW5kaW5nQ29udGV4dCwgbm9kZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YXIgYmluZGluZ0Z1bmN0aW9uID0gY3JlYXRlQmluZGluZ3NTdHJpbmdFdmFsdWF0b3JWaWFDYWNoZShiaW5kaW5nc1N0cmluZywgdGhpcy5iaW5kaW5nQ2FjaGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBiaW5kaW5nRnVuY3Rpb24oYmluZGluZ0NvbnRleHQsIG5vZGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICBleC5tZXNzYWdlID0gXCJVbmFibGUgdG8gcGFyc2UgYmluZGluZ3MuXFxuQmluZGluZ3MgdmFsdWU6IFwiICsgYmluZGluZ3NTdHJpbmcgKyBcIlxcbk1lc3NhZ2U6IFwiICsgZXgubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAga28uYmluZGluZ1Byb3ZpZGVyWydpbnN0YW5jZSddID0gbmV3IGtvLmJpbmRpbmdQcm92aWRlcigpO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlQmluZGluZ3NTdHJpbmdFdmFsdWF0b3JWaWFDYWNoZShiaW5kaW5nc1N0cmluZywgY2FjaGUsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGNhY2hlS2V5ID0gYmluZGluZ3NTdHJpbmcgKyAob3B0aW9ucyAmJiBvcHRpb25zWyd2YWx1ZUFjY2Vzc29ycyddIHx8ICcnKTtcbiAgICAgICAgcmV0dXJuIGNhY2hlW2NhY2hlS2V5XVxuICAgICAgICAgICAgfHwgKGNhY2hlW2NhY2hlS2V5XSA9IGNyZWF0ZUJpbmRpbmdzU3RyaW5nRXZhbHVhdG9yKGJpbmRpbmdzU3RyaW5nLCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQmluZGluZ3NTdHJpbmdFdmFsdWF0b3IoYmluZGluZ3NTdHJpbmcsIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gQnVpbGQgdGhlIHNvdXJjZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGV2YWx1YXRlcyBcImV4cHJlc3Npb25cIlxuICAgICAgICAvLyBGb3IgZWFjaCBzY29wZSB2YXJpYWJsZSwgYWRkIGFuIGV4dHJhIGxldmVsIG9mIFwid2l0aFwiIG5lc3RpbmdcbiAgICAgICAgLy8gRXhhbXBsZSByZXN1bHQ6IHdpdGgoc2MxKSB7IHdpdGgoc2MwKSB7IHJldHVybiAoZXhwcmVzc2lvbikgfSB9XG4gICAgICAgIHZhciByZXdyaXR0ZW5CaW5kaW5ncyA9IGtvLmV4cHJlc3Npb25SZXdyaXRpbmcucHJlUHJvY2Vzc0JpbmRpbmdzKGJpbmRpbmdzU3RyaW5nLCBvcHRpb25zKSxcbiAgICAgICAgICAgIGZ1bmN0aW9uQm9keSA9IFwid2l0aCgkY29udGV4dCl7d2l0aCgkZGF0YXx8e30pe3JldHVybntcIiArIHJld3JpdHRlbkJpbmRpbmdzICsgXCJ9fX1cIjtcbiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihcIiRjb250ZXh0XCIsIFwiJGVsZW1lbnRcIiwgZnVuY3Rpb25Cb2R5KTtcbiAgICB9XG59KSgpO1xuXG5rby5leHBvcnRTeW1ib2woJ2JpbmRpbmdQcm92aWRlcicsIGtvLmJpbmRpbmdQcm92aWRlcik7XG4oZnVuY3Rpb24gKCkge1xuICAgIGtvLmJpbmRpbmdIYW5kbGVycyA9IHt9O1xuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBlbGVtZW50IHR5cGVzIHdpbGwgbm90IGJlIHJlY3Vyc2VkIGludG8gZHVyaW5nIGJpbmRpbmcuXG4gICAgdmFyIGJpbmRpbmdEb2VzTm90UmVjdXJzZUludG9FbGVtZW50VHlwZXMgPSB7XG4gICAgICAgIC8vIERvbid0IHdhbnQgYmluZGluZ3MgdGhhdCBvcGVyYXRlIG9uIHRleHQgbm9kZXMgdG8gbXV0YXRlIDxzY3JpcHQ+IGFuZCA8dGV4dGFyZWE+IGNvbnRlbnRzLFxuICAgICAgICAvLyBiZWNhdXNlIGl0J3MgdW5leHBlY3RlZCBhbmQgYSBwb3RlbnRpYWwgWFNTIGlzc3VlLlxuICAgICAgICAvLyBBbHNvIGJpbmRpbmdzIHNob3VsZCBub3Qgb3BlcmF0ZSBvbiA8dGVtcGxhdGU+IGVsZW1lbnRzIHNpbmNlIHRoaXMgYnJlYWtzIGluIEludGVybmV0IEV4cGxvcmVyXG4gICAgICAgIC8vIGFuZCBiZWNhdXNlIHN1Y2ggZWxlbWVudHMnIGNvbnRlbnRzIGFyZSBhbHdheXMgaW50ZW5kZWQgdG8gYmUgYm91bmQgaW4gYSBkaWZmZXJlbnQgY29udGV4dFxuICAgICAgICAvLyBmcm9tIHdoZXJlIHRoZXkgYXBwZWFyIGluIHRoZSBkb2N1bWVudC5cbiAgICAgICAgJ3NjcmlwdCc6IHRydWUsXG4gICAgICAgICd0ZXh0YXJlYSc6IHRydWUsXG4gICAgICAgICd0ZW1wbGF0ZSc6IHRydWVcbiAgICB9O1xuXG4gICAgLy8gVXNlIGFuIG92ZXJyaWRhYmxlIG1ldGhvZCBmb3IgcmV0cmlldmluZyBiaW5kaW5nIGhhbmRsZXJzIHNvIHRoYXQgYSBwbHVnaW5zIG1heSBzdXBwb3J0IGR5bmFtaWNhbGx5IGNyZWF0ZWQgaGFuZGxlcnNcbiAgICBrb1snZ2V0QmluZGluZ0hhbmRsZXInXSA9IGZ1bmN0aW9uKGJpbmRpbmdLZXkpIHtcbiAgICAgICAgcmV0dXJuIGtvLmJpbmRpbmdIYW5kbGVyc1tiaW5kaW5nS2V5XTtcbiAgICB9O1xuXG4gICAgLy8gVGhlIGtvLmJpbmRpbmdDb250ZXh0IGNvbnN0cnVjdG9yIGlzIG9ubHkgY2FsbGVkIGRpcmVjdGx5IHRvIGNyZWF0ZSB0aGUgcm9vdCBjb250ZXh0LiBGb3IgY2hpbGRcbiAgICAvLyBjb250ZXh0cywgdXNlIGJpbmRpbmdDb250ZXh0LmNyZWF0ZUNoaWxkQ29udGV4dCBvciBiaW5kaW5nQ29udGV4dC5leHRlbmQuXG4gICAga28uYmluZGluZ0NvbnRleHQgPSBmdW5jdGlvbihkYXRhSXRlbU9yQWNjZXNzb3IsIHBhcmVudENvbnRleHQsIGRhdGFJdGVtQWxpYXMsIGV4dGVuZENhbGxiYWNrKSB7XG5cbiAgICAgICAgLy8gVGhlIGJpbmRpbmcgY29udGV4dCBvYmplY3QgaW5jbHVkZXMgc3RhdGljIHByb3BlcnRpZXMgZm9yIHRoZSBjdXJyZW50LCBwYXJlbnQsIGFuZCByb290IHZpZXcgbW9kZWxzLlxuICAgICAgICAvLyBJZiBhIHZpZXcgbW9kZWwgaXMgYWN0dWFsbHkgc3RvcmVkIGluIGFuIG9ic2VydmFibGUsIHRoZSBjb3JyZXNwb25kaW5nIGJpbmRpbmcgY29udGV4dCBvYmplY3QsIGFuZFxuICAgICAgICAvLyBhbnkgY2hpbGQgY29udGV4dHMsIG11c3QgYmUgdXBkYXRlZCB3aGVuIHRoZSB2aWV3IG1vZGVsIGlzIGNoYW5nZWQuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQoKSB7XG4gICAgICAgICAgICAvLyBNb3N0IG9mIHRoZSB0aW1lLCB0aGUgY29udGV4dCB3aWxsIGRpcmVjdGx5IGdldCBhIHZpZXcgbW9kZWwgb2JqZWN0LCBidXQgaWYgYSBmdW5jdGlvbiBpcyBnaXZlbixcbiAgICAgICAgICAgIC8vIHdlIGNhbGwgdGhlIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSB2aWV3IG1vZGVsLiBJZiB0aGUgZnVuY3Rpb24gYWNjZXNzZXMgYW55IG9ic2VydmFibGVzIG9yIHJldHVybnNcbiAgICAgICAgICAgIC8vIGFuIG9ic2VydmFibGUsIHRoZSBkZXBlbmRlbmN5IGlzIHRyYWNrZWQsIGFuZCB0aG9zZSBvYnNlcnZhYmxlcyBjYW4gbGF0ZXIgY2F1c2UgdGhlIGJpbmRpbmdcbiAgICAgICAgICAgIC8vIGNvbnRleHQgdG8gYmUgdXBkYXRlZC5cbiAgICAgICAgICAgIHZhciBkYXRhSXRlbU9yT2JzZXJ2YWJsZSA9IGlzRnVuYyA/IGRhdGFJdGVtT3JBY2Nlc3NvcigpIDogZGF0YUl0ZW1PckFjY2Vzc29yLFxuICAgICAgICAgICAgICAgIGRhdGFJdGVtID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShkYXRhSXRlbU9yT2JzZXJ2YWJsZSk7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiBhIFwicGFyZW50XCIgY29udGV4dCBpcyBnaXZlbiwgcmVnaXN0ZXIgYSBkZXBlbmRlbmN5IG9uIHRoZSBwYXJlbnQgY29udGV4dC4gVGh1cyB3aGVuZXZlciB0aGVcbiAgICAgICAgICAgICAgICAvLyBwYXJlbnQgY29udGV4dCBpcyB1cGRhdGVkLCB0aGlzIGNvbnRleHQgd2lsbCBhbHNvIGJlIHVwZGF0ZWQuXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudENvbnRleHQuX3N1YnNjcmliYWJsZSlcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29udGV4dC5fc3Vic2NyaWJhYmxlKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBDb3B5ICRyb290IGFuZCBhbnkgY3VzdG9tIHByb3BlcnRpZXMgZnJvbSB0aGUgcGFyZW50IGNvbnRleHRcbiAgICAgICAgICAgICAgICBrby51dGlscy5leHRlbmQoc2VsZiwgcGFyZW50Q29udGV4dCk7XG5cbiAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIHRoZSBhYm92ZSBjb3B5IG92ZXJ3cml0ZXMgb3VyIG93biBwcm9wZXJ0aWVzLCB3ZSBuZWVkIHRvIHJlc2V0IHRoZW0uXG4gICAgICAgICAgICAgICAgLy8gRHVyaW5nIHRoZSBmaXJzdCBleGVjdXRpb24sIFwic3Vic2NyaWJhYmxlXCIgaXNuJ3Qgc2V0LCBzbyBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHVwZGF0ZSB0aGVuLlxuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3Vic2NyaWJhYmxlID0gc3Vic2NyaWJhYmxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZlsnJHBhcmVudHMnXSA9IFtdO1xuICAgICAgICAgICAgICAgIHNlbGZbJyRyb290J10gPSBkYXRhSXRlbTtcblxuICAgICAgICAgICAgICAgIC8vIEV4cG9ydCAna28nIGluIHRoZSBiaW5kaW5nIGNvbnRleHQgc28gaXQgd2lsbCBiZSBhdmFpbGFibGUgaW4gYmluZGluZ3MgYW5kIHRlbXBsYXRlc1xuICAgICAgICAgICAgICAgIC8vIGV2ZW4gaWYgJ2tvJyBpc24ndCBleHBvcnRlZCBhcyBhIGdsb2JhbCwgc3VjaCBhcyB3aGVuIHVzaW5nIGFuIEFNRCBsb2FkZXIuXG4gICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9TdGV2ZVNhbmRlcnNvbi9rbm9ja291dC9pc3N1ZXMvNDkwXG4gICAgICAgICAgICAgICAgc2VsZlsna28nXSA9IGtvO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZlsnJHJhd0RhdGEnXSA9IGRhdGFJdGVtT3JPYnNlcnZhYmxlO1xuICAgICAgICAgICAgc2VsZlsnJGRhdGEnXSA9IGRhdGFJdGVtO1xuICAgICAgICAgICAgaWYgKGRhdGFJdGVtQWxpYXMpXG4gICAgICAgICAgICAgICAgc2VsZltkYXRhSXRlbUFsaWFzXSA9IGRhdGFJdGVtO1xuXG4gICAgICAgICAgICAvLyBUaGUgZXh0ZW5kQ2FsbGJhY2sgZnVuY3Rpb24gaXMgcHJvdmlkZWQgd2hlbiBjcmVhdGluZyBhIGNoaWxkIGNvbnRleHQgb3IgZXh0ZW5kaW5nIGEgY29udGV4dC5cbiAgICAgICAgICAgIC8vIEl0IGhhbmRsZXMgdGhlIHNwZWNpZmljIGFjdGlvbnMgbmVlZGVkIHRvIGZpbmlzaCBzZXR0aW5nIHVwIHRoZSBiaW5kaW5nIGNvbnRleHQuIEFjdGlvbnMgaW4gdGhpc1xuICAgICAgICAgICAgLy8gZnVuY3Rpb24gY291bGQgYWxzbyBhZGQgZGVwZW5kZW5jaWVzIHRvIHRoaXMgYmluZGluZyBjb250ZXh0LlxuICAgICAgICAgICAgaWYgKGV4dGVuZENhbGxiYWNrKVxuICAgICAgICAgICAgICAgIGV4dGVuZENhbGxiYWNrKHNlbGYsIHBhcmVudENvbnRleHQsIGRhdGFJdGVtKTtcblxuICAgICAgICAgICAgcmV0dXJuIHNlbGZbJyRkYXRhJ107XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZGlzcG9zZVdoZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZXMgJiYgIWtvLnV0aWxzLmFueURvbU5vZGVJc0F0dGFjaGVkVG9Eb2N1bWVudChub2Rlcyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgICAgICBpc0Z1bmMgPSB0eXBlb2YoZGF0YUl0ZW1PckFjY2Vzc29yKSA9PSBcImZ1bmN0aW9uXCIgJiYgIWtvLmlzT2JzZXJ2YWJsZShkYXRhSXRlbU9yQWNjZXNzb3IpLFxuICAgICAgICAgICAgbm9kZXMsXG4gICAgICAgICAgICBzdWJzY3JpYmFibGUgPSBrby5kZXBlbmRlbnRPYnNlcnZhYmxlKHVwZGF0ZUNvbnRleHQsIG51bGwsIHsgZGlzcG9zZVdoZW46IGRpc3Bvc2VXaGVuLCBkaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQ6IHRydWUgfSk7XG5cbiAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIGJpbmRpbmcgY29udGV4dCBoYXMgYmVlbiBpbml0aWFsaXplZCwgYW5kIHRoZSBcInN1YnNjcmliYWJsZVwiIGNvbXB1dGVkIG9ic2VydmFibGUgaXNcbiAgICAgICAgLy8gc3Vic2NyaWJlZCB0byBhbnkgb2JzZXJ2YWJsZXMgdGhhdCB3ZXJlIGFjY2Vzc2VkIGluIHRoZSBwcm9jZXNzLiBJZiB0aGVyZSBpcyBub3RoaW5nIHRvIHRyYWNrLCB0aGVcbiAgICAgICAgLy8gY29tcHV0ZWQgd2lsbCBiZSBpbmFjdGl2ZSwgYW5kIHdlIGNhbiBzYWZlbHkgdGhyb3cgaXQgYXdheS4gSWYgaXQncyBhY3RpdmUsIHRoZSBjb21wdXRlZCBpcyBzdG9yZWQgaW5cbiAgICAgICAgLy8gdGhlIGNvbnRleHQgb2JqZWN0LlxuICAgICAgICBpZiAoc3Vic2NyaWJhYmxlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgIHNlbGYuX3N1YnNjcmliYWJsZSA9IHN1YnNjcmliYWJsZTtcblxuICAgICAgICAgICAgLy8gQWx3YXlzIG5vdGlmeSBiZWNhdXNlIGV2ZW4gaWYgdGhlIG1vZGVsICgkZGF0YSkgaGFzbid0IGNoYW5nZWQsIG90aGVyIGNvbnRleHQgcHJvcGVydGllcyBtaWdodCBoYXZlIGNoYW5nZWRcbiAgICAgICAgICAgIHN1YnNjcmliYWJsZVsnZXF1YWxpdHlDb21wYXJlciddID0gbnVsbDtcblxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGRpc3Bvc2Ugb2YgdGhpcyBjb21wdXRlZCBvYnNlcnZhYmxlIHdoZW4gaXQncyBubyBsb25nZXIgbmVlZGVkLiBUaGlzIHdvdWxkIGJlXG4gICAgICAgICAgICAvLyBlYXN5IGlmIHdlIGhhZCBhIHNpbmdsZSBub2RlIHRvIHdhdGNoLCBidXQgYmluZGluZyBjb250ZXh0cyBjYW4gYmUgdXNlZCBieSBtYW55IGRpZmZlcmVudCBub2RlcywgYW5kXG4gICAgICAgICAgICAvLyB3ZSBjYW5ub3QgYXNzdW1lIHRoYXQgdGhvc2Ugbm9kZXMgaGF2ZSBhbnkgcmVsYXRpb24gdG8gZWFjaCBvdGhlci4gU28gaW5zdGVhZCB3ZSB0cmFjayBhbnkgbm9kZSB0aGF0XG4gICAgICAgICAgICAvLyB0aGUgY29udGV4dCBpcyBhdHRhY2hlZCB0bywgYW5kIGRpc3Bvc2UgdGhlIGNvbXB1dGVkIHdoZW4gYWxsIG9mIHRob3NlIG5vZGVzIGhhdmUgYmVlbiBjbGVhbmVkLlxuXG4gICAgICAgICAgICAvLyBBZGQgcHJvcGVydGllcyB0byAqc3Vic2NyaWJhYmxlKiBpbnN0ZWFkIG9mICpzZWxmKiBiZWNhdXNlIGFueSBwcm9wZXJ0aWVzIGFkZGVkIHRvICpzZWxmKiBtYXkgYmUgb3ZlcndyaXR0ZW4gb24gdXBkYXRlc1xuICAgICAgICAgICAgbm9kZXMgPSBbXTtcbiAgICAgICAgICAgIHN1YnNjcmliYWJsZS5fYWRkTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgIGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2sobm9kZSwgZnVuY3Rpb24obm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBrby51dGlscy5hcnJheVJlbW92ZUl0ZW0obm9kZXMsIG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJhYmxlLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N1YnNjcmliYWJsZSA9IHN1YnNjcmliYWJsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4dGVuZCB0aGUgYmluZGluZyBjb250ZXh0IGhpZXJhcmNoeSB3aXRoIGEgbmV3IHZpZXcgbW9kZWwgb2JqZWN0LiBJZiB0aGUgcGFyZW50IGNvbnRleHQgaXMgd2F0Y2hpbmdcbiAgICAvLyBhbnkgb2JzZXJ2YWJsZXMsIHRoZSBuZXcgY2hpbGQgY29udGV4dCB3aWxsIGF1dG9tYXRpY2FsbHkgZ2V0IGEgZGVwZW5kZW5jeSBvbiB0aGUgcGFyZW50IGNvbnRleHQuXG4gICAgLy8gQnV0IHRoaXMgZG9lcyBub3QgbWVhbiB0aGF0IHRoZSAkZGF0YSB2YWx1ZSBvZiB0aGUgY2hpbGQgY29udGV4dCB3aWxsIGFsc28gZ2V0IHVwZGF0ZWQuIElmIHRoZSBjaGlsZFxuICAgIC8vIHZpZXcgbW9kZWwgYWxzbyBkZXBlbmRzIG9uIHRoZSBwYXJlbnQgdmlldyBtb2RlbCwgeW91IG11c3QgcHJvdmlkZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY29ycmVjdFxuICAgIC8vIHZpZXcgbW9kZWwgb24gZWFjaCB1cGRhdGUuXG4gICAga28uYmluZGluZ0NvbnRleHQucHJvdG90eXBlWydjcmVhdGVDaGlsZENvbnRleHQnXSA9IGZ1bmN0aW9uIChkYXRhSXRlbU9yQWNjZXNzb3IsIGRhdGFJdGVtQWxpYXMsIGV4dGVuZENhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBuZXcga28uYmluZGluZ0NvbnRleHQoZGF0YUl0ZW1PckFjY2Vzc29yLCB0aGlzLCBkYXRhSXRlbUFsaWFzLCBmdW5jdGlvbihzZWxmLCBwYXJlbnRDb250ZXh0KSB7XG4gICAgICAgICAgICAvLyBFeHRlbmQgdGhlIGNvbnRleHQgaGllcmFyY2h5IGJ5IHNldHRpbmcgdGhlIGFwcHJvcHJpYXRlIHBvaW50ZXJzXG4gICAgICAgICAgICBzZWxmWyckcGFyZW50Q29udGV4dCddID0gcGFyZW50Q29udGV4dDtcbiAgICAgICAgICAgIHNlbGZbJyRwYXJlbnQnXSA9IHBhcmVudENvbnRleHRbJyRkYXRhJ107XG4gICAgICAgICAgICBzZWxmWyckcGFyZW50cyddID0gKHBhcmVudENvbnRleHRbJyRwYXJlbnRzJ10gfHwgW10pLnNsaWNlKDApO1xuICAgICAgICAgICAgc2VsZlsnJHBhcmVudHMnXS51bnNoaWZ0KHNlbGZbJyRwYXJlbnQnXSk7XG4gICAgICAgICAgICBpZiAoZXh0ZW5kQ2FsbGJhY2spXG4gICAgICAgICAgICAgICAgZXh0ZW5kQ2FsbGJhY2soc2VsZik7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBFeHRlbmQgdGhlIGJpbmRpbmcgY29udGV4dCB3aXRoIG5ldyBjdXN0b20gcHJvcGVydGllcy4gVGhpcyBkb2Vzbid0IGNoYW5nZSB0aGUgY29udGV4dCBoaWVyYXJjaHkuXG4gICAgLy8gU2ltaWxhcmx5IHRvIFwiY2hpbGRcIiBjb250ZXh0cywgcHJvdmlkZSBhIGZ1bmN0aW9uIGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvcnJlY3QgdmFsdWVzIGFyZSBzZXRcbiAgICAvLyB3aGVuIGFuIG9ic2VydmFibGUgdmlldyBtb2RlbCBpcyB1cGRhdGVkLlxuICAgIGtvLmJpbmRpbmdDb250ZXh0LnByb3RvdHlwZVsnZXh0ZW5kJ10gPSBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7XG4gICAgICAgIC8vIElmIHRoZSBwYXJlbnQgY29udGV4dCByZWZlcmVuY2VzIGFuIG9ic2VydmFibGUgdmlldyBtb2RlbCwgXCJfc3Vic2NyaWJhYmxlXCIgd2lsbCBhbHdheXMgYmUgdGhlXG4gICAgICAgIC8vIGxhdGVzdCB2aWV3IG1vZGVsIG9iamVjdC4gSWYgbm90LCBcIl9zdWJzY3JpYmFibGVcIiBpc24ndCBzZXQsIGFuZCB3ZSBjYW4gdXNlIHRoZSBzdGF0aWMgXCIkZGF0YVwiIHZhbHVlLlxuICAgICAgICByZXR1cm4gbmV3IGtvLmJpbmRpbmdDb250ZXh0KHRoaXMuX3N1YnNjcmliYWJsZSB8fCB0aGlzWyckZGF0YSddLCB0aGlzLCBudWxsLCBmdW5jdGlvbihzZWxmLCBwYXJlbnRDb250ZXh0KSB7XG4gICAgICAgICAgICAvLyBUaGlzIFwiY2hpbGRcIiBjb250ZXh0IGRvZXNuJ3QgZGlyZWN0bHkgdHJhY2sgYSBwYXJlbnQgb2JzZXJ2YWJsZSB2aWV3IG1vZGVsLFxuICAgICAgICAgICAgLy8gc28gd2UgbmVlZCB0byBtYW51YWxseSBzZXQgdGhlICRyYXdEYXRhIHZhbHVlIHRvIG1hdGNoIHRoZSBwYXJlbnQuXG4gICAgICAgICAgICBzZWxmWyckcmF3RGF0YSddID0gcGFyZW50Q29udGV4dFsnJHJhd0RhdGEnXTtcbiAgICAgICAgICAgIGtvLnV0aWxzLmV4dGVuZChzZWxmLCB0eXBlb2YocHJvcGVydGllcykgPT0gXCJmdW5jdGlvblwiID8gcHJvcGVydGllcygpIDogcHJvcGVydGllcyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBSZXR1cm5zIHRoZSB2YWx1ZUFjY2Vzb3IgZnVuY3Rpb24gZm9yIGEgYmluZGluZyB2YWx1ZVxuICAgIGZ1bmN0aW9uIG1ha2VWYWx1ZUFjY2Vzc29yKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHZhbHVlQWNjZXNzb3IgZnVuY3Rpb25cbiAgICBmdW5jdGlvbiBldmFsdWF0ZVZhbHVlQWNjZXNzb3IodmFsdWVBY2Nlc3Nvcikge1xuICAgICAgICByZXR1cm4gdmFsdWVBY2Nlc3NvcigpO1xuICAgIH1cblxuICAgIC8vIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGJpbmRpbmdzLCBjcmVhdGUgYW5kIHJldHVybiBhIG5ldyBvYmplY3QgdGhhdCBjb250YWluc1xuICAgIC8vIGJpbmRpbmcgdmFsdWUtYWNjZXNzb3JzIGZ1bmN0aW9ucy4gRWFjaCBhY2Nlc3NvciBmdW5jdGlvbiBjYWxscyB0aGUgb3JpZ2luYWwgZnVuY3Rpb25cbiAgICAvLyBzbyB0aGF0IGl0IGFsd2F5cyBnZXRzIHRoZSBsYXRlc3QgdmFsdWUgYW5kIGFsbCBkZXBlbmRlbmNpZXMgYXJlIGNhcHR1cmVkLiBUaGlzIGlzIHVzZWRcbiAgICAvLyBieSBrby5hcHBseUJpbmRpbmdzVG9Ob2RlIGFuZCBnZXRCaW5kaW5nc0FuZE1ha2VBY2Nlc3NvcnMuXG4gICAgZnVuY3Rpb24gbWFrZUFjY2Vzc29yc0Zyb21GdW5jdGlvbihjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4ga28udXRpbHMub2JqZWN0TWFwKGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24uaWdub3JlKGNhbGxiYWNrKSwgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpW2tleV07XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBHaXZlbiBhIGJpbmRpbmdzIGZ1bmN0aW9uIG9yIG9iamVjdCwgY3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgb2JqZWN0IHRoYXQgY29udGFpbnNcbiAgICAvLyBiaW5kaW5nIHZhbHVlLWFjY2Vzc29ycyBmdW5jdGlvbnMuIFRoaXMgaXMgdXNlZCBieSBrby5hcHBseUJpbmRpbmdzVG9Ob2RlLlxuICAgIGZ1bmN0aW9uIG1ha2VCaW5kaW5nQWNjZXNzb3JzKGJpbmRpbmdzLCBjb250ZXh0LCBub2RlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYmluZGluZ3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBtYWtlQWNjZXNzb3JzRnJvbUZ1bmN0aW9uKGJpbmRpbmdzLmJpbmQobnVsbCwgY29udGV4dCwgbm9kZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGtvLnV0aWxzLm9iamVjdE1hcChiaW5kaW5ncywgbWFrZVZhbHVlQWNjZXNzb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGlmIHRoZSBiaW5kaW5nIHByb3ZpZGVyIGRvZXNuJ3QgaW5jbHVkZSBhIGdldEJpbmRpbmdBY2Nlc3NvcnMgZnVuY3Rpb24uXG4gICAgLy8gSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCAndGhpcycgc2V0IHRvIHRoZSBwcm92aWRlciBpbnN0YW5jZS5cbiAgICBmdW5jdGlvbiBnZXRCaW5kaW5nc0FuZE1ha2VBY2Nlc3NvcnMobm9kZSwgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gbWFrZUFjY2Vzc29yc0Zyb21GdW5jdGlvbih0aGlzWydnZXRCaW5kaW5ncyddLmJpbmQodGhpcywgbm9kZSwgY29udGV4dCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlVGhhdEJpbmRpbmdJc0FsbG93ZWRGb3JWaXJ0dWFsRWxlbWVudHMoYmluZGluZ05hbWUpIHtcbiAgICAgICAgdmFyIHZhbGlkYXRvciA9IGtvLnZpcnR1YWxFbGVtZW50cy5hbGxvd2VkQmluZGluZ3NbYmluZGluZ05hbWVdO1xuICAgICAgICBpZiAoIXZhbGlkYXRvcilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBiaW5kaW5nICdcIiArIGJpbmRpbmdOYW1lICsgXCInIGNhbm5vdCBiZSB1c2VkIHdpdGggdmlydHVhbCBlbGVtZW50c1wiKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGx5QmluZGluZ3NUb0Rlc2NlbmRhbnRzSW50ZXJuYWwgKGJpbmRpbmdDb250ZXh0LCBlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgYmluZGluZ0NvbnRleHRzTWF5RGlmZmVyRnJvbURvbVBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRDaGlsZCxcbiAgICAgICAgICAgIG5leHRJblF1ZXVlID0ga28udmlydHVhbEVsZW1lbnRzLmZpcnN0Q2hpbGQoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQpLFxuICAgICAgICAgICAgcHJvdmlkZXIgPSBrby5iaW5kaW5nUHJvdmlkZXJbJ2luc3RhbmNlJ10sXG4gICAgICAgICAgICBwcmVwcm9jZXNzTm9kZSA9IHByb3ZpZGVyWydwcmVwcm9jZXNzTm9kZSddO1xuXG4gICAgICAgIC8vIFByZXByb2Nlc3NpbmcgYWxsb3dzIGEgYmluZGluZyBwcm92aWRlciB0byBtdXRhdGUgYSBub2RlIGJlZm9yZSBiaW5kaW5ncyBhcmUgYXBwbGllZCB0byBpdC4gRm9yIGV4YW1wbGUgaXQnc1xuICAgICAgICAvLyBwb3NzaWJsZSB0byBpbnNlcnQgbmV3IHNpYmxpbmdzIGFmdGVyIGl0LCBhbmQvb3IgcmVwbGFjZSB0aGUgbm9kZSB3aXRoIGEgZGlmZmVyZW50IG9uZS4gVGhpcyBjYW4gYmUgdXNlZCB0b1xuICAgICAgICAvLyBpbXBsZW1lbnQgY3VzdG9tIGJpbmRpbmcgc3ludGF4ZXMsIHN1Y2ggYXMge3sgdmFsdWUgfX0gZm9yIHN0cmluZyBpbnRlcnBvbGF0aW9uLCBvciBjdXN0b20gZWxlbWVudCB0eXBlcyB0aGF0XG4gICAgICAgIC8vIHRyaWdnZXIgaW5zZXJ0aW9uIG9mIDx0ZW1wbGF0ZT4gY29udGVudHMgYXQgdGhhdCBwb2ludCBpbiB0aGUgZG9jdW1lbnQuXG4gICAgICAgIGlmIChwcmVwcm9jZXNzTm9kZSkge1xuICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRDaGlsZCA9IG5leHRJblF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgbmV4dEluUXVldWUgPSBrby52aXJ0dWFsRWxlbWVudHMubmV4dFNpYmxpbmcoY3VycmVudENoaWxkKTtcbiAgICAgICAgICAgICAgICBwcmVwcm9jZXNzTm9kZS5jYWxsKHByb3ZpZGVyLCBjdXJyZW50Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVzZXQgbmV4dEluUXVldWUgZm9yIHRoZSBuZXh0IGxvb3BcbiAgICAgICAgICAgIG5leHRJblF1ZXVlID0ga28udmlydHVhbEVsZW1lbnRzLmZpcnN0Q2hpbGQoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRDaGlsZCA9IG5leHRJblF1ZXVlKSB7XG4gICAgICAgICAgICAvLyBLZWVwIGEgcmVjb3JkIG9mIHRoZSBuZXh0IGNoaWxkICpiZWZvcmUqIGFwcGx5aW5nIGJpbmRpbmdzLCBpbiBjYXNlIHRoZSBiaW5kaW5nIHJlbW92ZXMgdGhlIGN1cnJlbnQgY2hpbGQgZnJvbSBpdHMgcG9zaXRpb25cbiAgICAgICAgICAgIG5leHRJblF1ZXVlID0ga28udmlydHVhbEVsZW1lbnRzLm5leHRTaWJsaW5nKGN1cnJlbnRDaGlsZCk7XG4gICAgICAgICAgICBhcHBseUJpbmRpbmdzVG9Ob2RlQW5kRGVzY2VuZGFudHNJbnRlcm5hbChiaW5kaW5nQ29udGV4dCwgY3VycmVudENoaWxkLCBiaW5kaW5nQ29udGV4dHNNYXlEaWZmZXJGcm9tRG9tUGFyZW50RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBseUJpbmRpbmdzVG9Ob2RlQW5kRGVzY2VuZGFudHNJbnRlcm5hbCAoYmluZGluZ0NvbnRleHQsIG5vZGVWZXJpZmllZCwgYmluZGluZ0NvbnRleHRNYXlEaWZmZXJGcm9tRG9tUGFyZW50RWxlbWVudCkge1xuICAgICAgICB2YXIgc2hvdWxkQmluZERlc2NlbmRhbnRzID0gdHJ1ZTtcblxuICAgICAgICAvLyBQZXJmIG9wdGltaXNhdGlvbjogQXBwbHkgYmluZGluZ3Mgb25seSBpZi4uLlxuICAgICAgICAvLyAoMSkgV2UgbmVlZCB0byBzdG9yZSB0aGUgYmluZGluZyBjb250ZXh0IG9uIHRoaXMgbm9kZSAoYmVjYXVzZSBpdCBtYXkgZGlmZmVyIGZyb20gdGhlIERPTSBwYXJlbnQgbm9kZSdzIGJpbmRpbmcgY29udGV4dClcbiAgICAgICAgLy8gICAgIE5vdGUgdGhhdCB3ZSBjYW4ndCBzdG9yZSBiaW5kaW5nIGNvbnRleHRzIG9uIG5vbi1lbGVtZW50cyAoZS5nLiwgdGV4dCBub2RlcyksIGFzIElFIGRvZXNuJ3QgYWxsb3cgZXhwYW5kbyBwcm9wZXJ0aWVzIGZvciB0aG9zZVxuICAgICAgICAvLyAoMikgSXQgbWlnaHQgaGF2ZSBiaW5kaW5ncyAoZS5nLiwgaXQgaGFzIGEgZGF0YS1iaW5kIGF0dHJpYnV0ZSwgb3IgaXQncyBhIG1hcmtlciBmb3IgYSBjb250YWluZXJsZXNzIHRlbXBsYXRlKVxuICAgICAgICB2YXIgaXNFbGVtZW50ID0gKG5vZGVWZXJpZmllZC5ub2RlVHlwZSA9PT0gMSk7XG4gICAgICAgIGlmIChpc0VsZW1lbnQpIC8vIFdvcmthcm91bmQgSUUgPD0gOCBIVE1MIHBhcnNpbmcgd2VpcmRuZXNzXG4gICAgICAgICAgICBrby52aXJ0dWFsRWxlbWVudHMubm9ybWFsaXNlVmlydHVhbEVsZW1lbnREb21TdHJ1Y3R1cmUobm9kZVZlcmlmaWVkKTtcblxuICAgICAgICB2YXIgc2hvdWxkQXBwbHlCaW5kaW5ncyA9IChpc0VsZW1lbnQgJiYgYmluZGluZ0NvbnRleHRNYXlEaWZmZXJGcm9tRG9tUGFyZW50RWxlbWVudCkgICAgICAgICAgICAgLy8gQ2FzZSAoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBrby5iaW5kaW5nUHJvdmlkZXJbJ2luc3RhbmNlJ11bJ25vZGVIYXNCaW5kaW5ncyddKG5vZGVWZXJpZmllZCk7ICAgICAgIC8vIENhc2UgKDIpXG4gICAgICAgIGlmIChzaG91bGRBcHBseUJpbmRpbmdzKVxuICAgICAgICAgICAgc2hvdWxkQmluZERlc2NlbmRhbnRzID0gYXBwbHlCaW5kaW5nc1RvTm9kZUludGVybmFsKG5vZGVWZXJpZmllZCwgbnVsbCwgYmluZGluZ0NvbnRleHQsIGJpbmRpbmdDb250ZXh0TWF5RGlmZmVyRnJvbURvbVBhcmVudEVsZW1lbnQpWydzaG91bGRCaW5kRGVzY2VuZGFudHMnXTtcblxuICAgICAgICBpZiAoc2hvdWxkQmluZERlc2NlbmRhbnRzICYmICFiaW5kaW5nRG9lc05vdFJlY3Vyc2VJbnRvRWxlbWVudFR5cGVzW2tvLnV0aWxzLnRhZ05hbWVMb3dlcihub2RlVmVyaWZpZWQpXSkge1xuICAgICAgICAgICAgLy8gV2UncmUgcmVjdXJzaW5nIGF1dG9tYXRpY2FsbHkgaW50byAocmVhbCBvciB2aXJ0dWFsKSBjaGlsZCBub2RlcyB3aXRob3V0IGNoYW5naW5nIGJpbmRpbmcgY29udGV4dHMuIFNvLFxuICAgICAgICAgICAgLy8gICogRm9yIGNoaWxkcmVuIG9mIGEgKnJlYWwqIGVsZW1lbnQsIHRoZSBiaW5kaW5nIGNvbnRleHQgaXMgY2VydGFpbmx5IHRoZSBzYW1lIGFzIG9uIHRoZWlyIERPTSAucGFyZW50Tm9kZSxcbiAgICAgICAgICAgIC8vICAgIGhlbmNlIGJpbmRpbmdDb250ZXh0c01heURpZmZlckZyb21Eb21QYXJlbnRFbGVtZW50IGlzIGZhbHNlXG4gICAgICAgICAgICAvLyAgKiBGb3IgY2hpbGRyZW4gb2YgYSAqdmlydHVhbCogZWxlbWVudCwgd2UgY2FuJ3QgYmUgc3VyZS4gRXZhbHVhdGluZyAucGFyZW50Tm9kZSBvbiB0aG9zZSBjaGlsZHJlbiBtYXlcbiAgICAgICAgICAgIC8vICAgIHNraXAgb3ZlciBhbnkgbnVtYmVyIG9mIGludGVybWVkaWF0ZSB2aXJ0dWFsIGVsZW1lbnRzLCBhbnkgb2Ygd2hpY2ggbWlnaHQgZGVmaW5lIGEgY3VzdG9tIGJpbmRpbmcgY29udGV4dCxcbiAgICAgICAgICAgIC8vICAgIGhlbmNlIGJpbmRpbmdDb250ZXh0c01heURpZmZlckZyb21Eb21QYXJlbnRFbGVtZW50IGlzIHRydWVcbiAgICAgICAgICAgIGFwcGx5QmluZGluZ3NUb0Rlc2NlbmRhbnRzSW50ZXJuYWwoYmluZGluZ0NvbnRleHQsIG5vZGVWZXJpZmllZCwgLyogYmluZGluZ0NvbnRleHRzTWF5RGlmZmVyRnJvbURvbVBhcmVudEVsZW1lbnQ6ICovICFpc0VsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJvdW5kRWxlbWVudERvbURhdGFLZXkgPSBrby51dGlscy5kb21EYXRhLm5leHRLZXkoKTtcblxuXG4gICAgZnVuY3Rpb24gdG9wb2xvZ2ljYWxTb3J0QmluZGluZ3MoYmluZGluZ3MpIHtcbiAgICAgICAgLy8gRGVwdGgtZmlyc3Qgc29ydFxuICAgICAgICB2YXIgcmVzdWx0ID0gW10sICAgICAgICAgICAgICAgIC8vIFRoZSBsaXN0IG9mIGtleS9oYW5kbGVyIHBhaXJzIHRoYXQgd2Ugd2lsbCByZXR1cm5cbiAgICAgICAgICAgIGJpbmRpbmdzQ29uc2lkZXJlZCA9IHt9LCAgICAvLyBBIHRlbXBvcmFyeSByZWNvcmQgb2Ygd2hpY2ggYmluZGluZ3MgYXJlIGFscmVhZHkgaW4gJ3Jlc3VsdCdcbiAgICAgICAgICAgIGN5Y2xpY0RlcGVuZGVuY3lTdGFjayA9IFtdOyAvLyBLZWVwcyB0cmFjayBvZiBhIGRlcHRoLXNlYXJjaCBzbyB0aGF0LCBpZiB0aGVyZSdzIGEgY3ljbGUsIHdlIGtub3cgd2hpY2ggYmluZGluZ3MgY2F1c2VkIGl0XG4gICAgICAgIGtvLnV0aWxzLm9iamVjdEZvckVhY2goYmluZGluZ3MsIGZ1bmN0aW9uIHB1c2hCaW5kaW5nKGJpbmRpbmdLZXkpIHtcbiAgICAgICAgICAgIGlmICghYmluZGluZ3NDb25zaWRlcmVkW2JpbmRpbmdLZXldKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJpbmRpbmcgPSBrb1snZ2V0QmluZGluZ0hhbmRsZXInXShiaW5kaW5nS2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoYmluZGluZykge1xuICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBhZGQgZGVwZW5kZW5jaWVzIChpZiBhbnkpIG9mIHRoZSBjdXJyZW50IGJpbmRpbmdcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJpbmRpbmdbJ2FmdGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN5Y2xpY0RlcGVuZGVuY3lTdGFjay5wdXNoKGJpbmRpbmdLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAga28udXRpbHMuYXJyYXlGb3JFYWNoKGJpbmRpbmdbJ2FmdGVyJ10sIGZ1bmN0aW9uKGJpbmRpbmdEZXBlbmRlbmN5S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpbmRpbmdzW2JpbmRpbmdEZXBlbmRlbmN5S2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa28udXRpbHMuYXJyYXlJbmRleE9mKGN5Y2xpY0RlcGVuZGVuY3lTdGFjaywgYmluZGluZ0RlcGVuZGVuY3lLZXkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW5ub3QgY29tYmluZSB0aGUgZm9sbG93aW5nIGJpbmRpbmdzLCBiZWNhdXNlIHRoZXkgaGF2ZSBhIGN5Y2xpYyBkZXBlbmRlbmN5OiBcIiArIGN5Y2xpY0RlcGVuZGVuY3lTdGFjay5qb2luKFwiLCBcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaEJpbmRpbmcoYmluZGluZ0RlcGVuZGVuY3lLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeWNsaWNEZXBlbmRlbmN5U3RhY2subGVuZ3RoLS07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gTmV4dCBhZGQgdGhlIGN1cnJlbnQgYmluZGluZ1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7IGtleTogYmluZGluZ0tleSwgaGFuZGxlcjogYmluZGluZyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYmluZGluZ3NDb25zaWRlcmVkW2JpbmRpbmdLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBseUJpbmRpbmdzVG9Ob2RlSW50ZXJuYWwobm9kZSwgc291cmNlQmluZGluZ3MsIGJpbmRpbmdDb250ZXh0LCBiaW5kaW5nQ29udGV4dE1heURpZmZlckZyb21Eb21QYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIC8vIFByZXZlbnQgbXVsdGlwbGUgYXBwbHlCaW5kaW5ncyBjYWxscyBmb3IgdGhlIHNhbWUgbm9kZSwgZXhjZXB0IHdoZW4gYSBiaW5kaW5nIHZhbHVlIGlzIHNwZWNpZmllZFxuICAgICAgICB2YXIgYWxyZWFkeUJvdW5kID0ga28udXRpbHMuZG9tRGF0YS5nZXQobm9kZSwgYm91bmRFbGVtZW50RG9tRGF0YUtleSk7XG4gICAgICAgIGlmICghc291cmNlQmluZGluZ3MpIHtcbiAgICAgICAgICAgIGlmIChhbHJlYWR5Qm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIllvdSBjYW5ub3QgYXBwbHkgYmluZGluZ3MgbXVsdGlwbGUgdGltZXMgdG8gdGhlIHNhbWUgZWxlbWVudC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrby51dGlscy5kb21EYXRhLnNldChub2RlLCBib3VuZEVsZW1lbnREb21EYXRhS2V5LCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9wdGltaXphdGlvbjogRG9uJ3Qgc3RvcmUgdGhlIGJpbmRpbmcgY29udGV4dCBvbiB0aGlzIG5vZGUgaWYgaXQncyBkZWZpbml0ZWx5IHRoZSBzYW1lIGFzIG9uIG5vZGUucGFyZW50Tm9kZSwgYmVjYXVzZVxuICAgICAgICAvLyB3ZSBjYW4gZWFzaWx5IHJlY292ZXIgaXQganVzdCBieSBzY2FubmluZyB1cCB0aGUgbm9kZSdzIGFuY2VzdG9ycyBpbiB0aGUgRE9NXG4gICAgICAgIC8vIChub3RlOiBoZXJlLCBwYXJlbnQgbm9kZSBtZWFucyBcInJlYWwgRE9NIHBhcmVudFwiIG5vdCBcInZpcnR1YWwgcGFyZW50XCIsIGFzIHRoZXJlJ3Mgbm8gTygxKSB3YXkgdG8gZmluZCB0aGUgdmlydHVhbCBwYXJlbnQpXG4gICAgICAgIGlmICghYWxyZWFkeUJvdW5kICYmIGJpbmRpbmdDb250ZXh0TWF5RGlmZmVyRnJvbURvbVBhcmVudEVsZW1lbnQpXG4gICAgICAgICAgICBrby5zdG9yZWRCaW5kaW5nQ29udGV4dEZvck5vZGUobm9kZSwgYmluZGluZ0NvbnRleHQpO1xuXG4gICAgICAgIC8vIFVzZSBiaW5kaW5ncyBpZiBnaXZlbiwgb3RoZXJ3aXNlIGZhbGwgYmFjayBvbiBhc2tpbmcgdGhlIGJpbmRpbmdzIHByb3ZpZGVyIHRvIGdpdmUgdXMgc29tZSBiaW5kaW5nc1xuICAgICAgICB2YXIgYmluZGluZ3M7XG4gICAgICAgIGlmIChzb3VyY2VCaW5kaW5ncyAmJiB0eXBlb2Ygc291cmNlQmluZGluZ3MgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGJpbmRpbmdzID0gc291cmNlQmluZGluZ3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcHJvdmlkZXIgPSBrby5iaW5kaW5nUHJvdmlkZXJbJ2luc3RhbmNlJ10sXG4gICAgICAgICAgICAgICAgZ2V0QmluZGluZ3MgPSBwcm92aWRlclsnZ2V0QmluZGluZ0FjY2Vzc29ycyddIHx8IGdldEJpbmRpbmdzQW5kTWFrZUFjY2Vzc29ycztcblxuICAgICAgICAgICAgLy8gR2V0IHRoZSBiaW5kaW5nIGZyb20gdGhlIHByb3ZpZGVyIHdpdGhpbiBhIGNvbXB1dGVkIG9ic2VydmFibGUgc28gdGhhdCB3ZSBjYW4gdXBkYXRlIHRoZSBiaW5kaW5ncyB3aGVuZXZlclxuICAgICAgICAgICAgLy8gdGhlIGJpbmRpbmcgY29udGV4dCBpcyB1cGRhdGVkIG9yIGlmIHRoZSBiaW5kaW5nIHByb3ZpZGVyIGFjY2Vzc2VzIG9ic2VydmFibGVzLlxuICAgICAgICAgICAgdmFyIGJpbmRpbmdzVXBkYXRlciA9IGtvLmRlcGVuZGVudE9ic2VydmFibGUoXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGJpbmRpbmdzID0gc291cmNlQmluZGluZ3MgPyBzb3VyY2VCaW5kaW5ncyhiaW5kaW5nQ29udGV4dCwgbm9kZSkgOiBnZXRCaW5kaW5ncy5jYWxsKHByb3ZpZGVyLCBub2RlLCBiaW5kaW5nQ29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGEgZGVwZW5kZW5jeSBvbiB0aGUgYmluZGluZyBjb250ZXh0IHRvIHN1cHBvcnQgb2JzZXJ2YWJsZSB2aWV3IG1vZGVscy5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGJpbmRpbmdzICYmIGJpbmRpbmdDb250ZXh0Ll9zdWJzY3JpYmFibGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nQ29udGV4dC5fc3Vic2NyaWJhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiaW5kaW5ncztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG51bGwsIHsgZGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkOiBub2RlIH1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghYmluZGluZ3MgfHwgIWJpbmRpbmdzVXBkYXRlci5pc0FjdGl2ZSgpKVxuICAgICAgICAgICAgICAgIGJpbmRpbmdzVXBkYXRlciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYmluZGluZ0hhbmRsZXJUaGF0Q29udHJvbHNEZXNjZW5kYW50QmluZGluZ3M7XG4gICAgICAgIGlmIChiaW5kaW5ncykge1xuICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSB2YWx1ZSBhY2Nlc3NvciBmb3IgYSBnaXZlbiBiaW5kaW5nLiBXaGVuIGJpbmRpbmdzIGFyZSBzdGF0aWMgKHdvbid0IGJlIHVwZGF0ZWQgYmVjYXVzZSBvZiBhIGJpbmRpbmdcbiAgICAgICAgICAgIC8vIGNvbnRleHQgdXBkYXRlKSwganVzdCByZXR1cm4gdGhlIHZhbHVlIGFjY2Vzc29yIGZyb20gdGhlIGJpbmRpbmcuIE90aGVyd2lzZSwgcmV0dXJuIGEgZnVuY3Rpb24gdGhhdCBhbHdheXMgZ2V0c1xuICAgICAgICAgICAgLy8gdGhlIGxhdGVzdCBiaW5kaW5nIHZhbHVlIGFuZCByZWdpc3RlcnMgYSBkZXBlbmRlbmN5IG9uIHRoZSBiaW5kaW5nIHVwZGF0ZXIuXG4gICAgICAgICAgICB2YXIgZ2V0VmFsdWVBY2Nlc3NvciA9IGJpbmRpbmdzVXBkYXRlclxuICAgICAgICAgICAgICAgID8gZnVuY3Rpb24oYmluZGluZ0tleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZhbHVhdGVWYWx1ZUFjY2Vzc29yKGJpbmRpbmdzVXBkYXRlcigpW2JpbmRpbmdLZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IDogZnVuY3Rpb24oYmluZGluZ0tleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmluZGluZ3NbYmluZGluZ0tleV07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gVXNlIG9mIGFsbEJpbmRpbmdzIGFzIGEgZnVuY3Rpb24gaXMgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGJ1dCBpdHMgdXNlIGlzIGRlcHJlY2F0ZWRcbiAgICAgICAgICAgIGZ1bmN0aW9uIGFsbEJpbmRpbmdzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBrby51dGlscy5vYmplY3RNYXAoYmluZGluZ3NVcGRhdGVyID8gYmluZGluZ3NVcGRhdGVyKCkgOiBiaW5kaW5ncywgZXZhbHVhdGVWYWx1ZUFjY2Vzc29yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgdGhlIDMueCBhbGxCaW5kaW5ncyBBUElcbiAgICAgICAgICAgIGFsbEJpbmRpbmdzWydnZXQnXSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBiaW5kaW5nc1trZXldICYmIGV2YWx1YXRlVmFsdWVBY2Nlc3NvcihnZXRWYWx1ZUFjY2Vzc29yKGtleSkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFsbEJpbmRpbmdzWydoYXMnXSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBrZXkgaW4gYmluZGluZ3M7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBGaXJzdCBwdXQgdGhlIGJpbmRpbmdzIGludG8gdGhlIHJpZ2h0IG9yZGVyXG4gICAgICAgICAgICB2YXIgb3JkZXJlZEJpbmRpbmdzID0gdG9wb2xvZ2ljYWxTb3J0QmluZGluZ3MoYmluZGluZ3MpO1xuXG4gICAgICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBzb3J0ZWQgYmluZGluZ3MsIGNhbGxpbmcgaW5pdCBhbmQgdXBkYXRlIGZvciBlYWNoXG4gICAgICAgICAgICBrby51dGlscy5hcnJheUZvckVhY2gob3JkZXJlZEJpbmRpbmdzLCBmdW5jdGlvbihiaW5kaW5nS2V5QW5kSGFuZGxlcikge1xuICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0b3BvbG9naWNhbFNvcnRCaW5kaW5ncyBoYXMgYWxyZWFkeSBmaWx0ZXJlZCBvdXQgYW55IG5vbmV4aXN0ZW50IGJpbmRpbmcgaGFuZGxlcnMsXG4gICAgICAgICAgICAgICAgLy8gc28gYmluZGluZ0tleUFuZEhhbmRsZXIuaGFuZGxlciB3aWxsIGFsd2F5cyBiZSBub25udWxsLlxuICAgICAgICAgICAgICAgIHZhciBoYW5kbGVySW5pdEZuID0gYmluZGluZ0tleUFuZEhhbmRsZXIuaGFuZGxlcltcImluaXRcIl0sXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXJVcGRhdGVGbiA9IGJpbmRpbmdLZXlBbmRIYW5kbGVyLmhhbmRsZXJbXCJ1cGRhdGVcIl0sXG4gICAgICAgICAgICAgICAgICAgIGJpbmRpbmdLZXkgPSBiaW5kaW5nS2V5QW5kSGFuZGxlci5rZXk7XG5cbiAgICAgICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gOCkge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVRoYXRCaW5kaW5nSXNBbGxvd2VkRm9yVmlydHVhbEVsZW1lbnRzKGJpbmRpbmdLZXkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJ1biBpbml0LCBpZ25vcmluZyBhbnkgZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaGFuZGxlckluaXRGbiA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24uaWdub3JlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbml0UmVzdWx0ID0gaGFuZGxlckluaXRGbihub2RlLCBnZXRWYWx1ZUFjY2Vzc29yKGJpbmRpbmdLZXkpLCBhbGxCaW5kaW5ncywgYmluZGluZ0NvbnRleHRbJyRkYXRhJ10sIGJpbmRpbmdDb250ZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgYmluZGluZyBoYW5kbGVyIGNsYWltcyB0byBjb250cm9sIGRlc2NlbmRhbnQgYmluZGluZ3MsIG1ha2UgYSBub3RlIG9mIHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5pdFJlc3VsdCAmJiBpbml0UmVzdWx0Wydjb250cm9sc0Rlc2NlbmRhbnRCaW5kaW5ncyddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaW5kaW5nSGFuZGxlclRoYXRDb250cm9sc0Rlc2NlbmRhbnRCaW5kaW5ncyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVsdGlwbGUgYmluZGluZ3MgKFwiICsgYmluZGluZ0hhbmRsZXJUaGF0Q29udHJvbHNEZXNjZW5kYW50QmluZGluZ3MgKyBcIiBhbmQgXCIgKyBiaW5kaW5nS2V5ICsgXCIpIGFyZSB0cnlpbmcgdG8gY29udHJvbCBkZXNjZW5kYW50IGJpbmRpbmdzIG9mIHRoZSBzYW1lIGVsZW1lbnQuIFlvdSBjYW5ub3QgdXNlIHRoZXNlIGJpbmRpbmdzIHRvZ2V0aGVyIG9uIHRoZSBzYW1lIGVsZW1lbnQuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nSGFuZGxlclRoYXRDb250cm9sc0Rlc2NlbmRhbnRCaW5kaW5ncyA9IGJpbmRpbmdLZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBSdW4gdXBkYXRlIGluIGl0cyBvd24gY29tcHV0ZWQgd3JhcHBlclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGhhbmRsZXJVcGRhdGVGbiA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtvLmRlcGVuZGVudE9ic2VydmFibGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJVcGRhdGVGbihub2RlLCBnZXRWYWx1ZUFjY2Vzc29yKGJpbmRpbmdLZXkpLCBhbGxCaW5kaW5ncywgYmluZGluZ0NvbnRleHRbJyRkYXRhJ10sIGJpbmRpbmdDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBkaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQ6IG5vZGUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGV4Lm1lc3NhZ2UgPSBcIlVuYWJsZSB0byBwcm9jZXNzIGJpbmRpbmcgXFxcIlwiICsgYmluZGluZ0tleSArIFwiOiBcIiArIGJpbmRpbmdzW2JpbmRpbmdLZXldICsgXCJcXFwiXFxuTWVzc2FnZTogXCIgKyBleC5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnc2hvdWxkQmluZERlc2NlbmRhbnRzJzogYmluZGluZ0hhbmRsZXJUaGF0Q29udHJvbHNEZXNjZW5kYW50QmluZGluZ3MgPT09IHVuZGVmaW5lZFxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICB2YXIgc3RvcmVkQmluZGluZ0NvbnRleHREb21EYXRhS2V5ID0ga28udXRpbHMuZG9tRGF0YS5uZXh0S2V5KCk7XG4gICAga28uc3RvcmVkQmluZGluZ0NvbnRleHRGb3JOb2RlID0gZnVuY3Rpb24gKG5vZGUsIGJpbmRpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICAgIGtvLnV0aWxzLmRvbURhdGEuc2V0KG5vZGUsIHN0b3JlZEJpbmRpbmdDb250ZXh0RG9tRGF0YUtleSwgYmluZGluZ0NvbnRleHQpO1xuICAgICAgICAgICAgaWYgKGJpbmRpbmdDb250ZXh0Ll9zdWJzY3JpYmFibGUpXG4gICAgICAgICAgICAgICAgYmluZGluZ0NvbnRleHQuX3N1YnNjcmliYWJsZS5fYWRkTm9kZShub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBrby51dGlscy5kb21EYXRhLmdldChub2RlLCBzdG9yZWRCaW5kaW5nQ29udGV4dERvbURhdGFLZXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0QmluZGluZ0NvbnRleHQodmlld01vZGVsT3JCaW5kaW5nQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gdmlld01vZGVsT3JCaW5kaW5nQ29udGV4dCAmJiAodmlld01vZGVsT3JCaW5kaW5nQ29udGV4dCBpbnN0YW5jZW9mIGtvLmJpbmRpbmdDb250ZXh0KVxuICAgICAgICAgICAgPyB2aWV3TW9kZWxPckJpbmRpbmdDb250ZXh0XG4gICAgICAgICAgICA6IG5ldyBrby5iaW5kaW5nQ29udGV4dCh2aWV3TW9kZWxPckJpbmRpbmdDb250ZXh0KTtcbiAgICB9XG5cbiAgICBrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUgPSBmdW5jdGlvbiAobm9kZSwgYmluZGluZ3MsIHZpZXdNb2RlbE9yQmluZGluZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDEpIC8vIElmIGl0J3MgYW4gZWxlbWVudCwgd29ya2Fyb3VuZCBJRSA8PSA4IEhUTUwgcGFyc2luZyB3ZWlyZG5lc3NcbiAgICAgICAgICAgIGtvLnZpcnR1YWxFbGVtZW50cy5ub3JtYWxpc2VWaXJ0dWFsRWxlbWVudERvbVN0cnVjdHVyZShub2RlKTtcbiAgICAgICAgcmV0dXJuIGFwcGx5QmluZGluZ3NUb05vZGVJbnRlcm5hbChub2RlLCBiaW5kaW5ncywgZ2V0QmluZGluZ0NvbnRleHQodmlld01vZGVsT3JCaW5kaW5nQ29udGV4dCksIHRydWUpO1xuICAgIH07XG5cbiAgICBrby5hcHBseUJpbmRpbmdzVG9Ob2RlID0gZnVuY3Rpb24gKG5vZGUsIGJpbmRpbmdzLCB2aWV3TW9kZWxPckJpbmRpbmdDb250ZXh0KSB7XG4gICAgICAgIHZhciBjb250ZXh0ID0gZ2V0QmluZGluZ0NvbnRleHQodmlld01vZGVsT3JCaW5kaW5nQ29udGV4dCk7XG4gICAgICAgIHJldHVybiBrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUobm9kZSwgbWFrZUJpbmRpbmdBY2Nlc3NvcnMoYmluZGluZ3MsIGNvbnRleHQsIG5vZGUpLCBjb250ZXh0KTtcbiAgICB9O1xuXG4gICAga28uYXBwbHlCaW5kaW5nc1RvRGVzY2VuZGFudHMgPSBmdW5jdGlvbih2aWV3TW9kZWxPckJpbmRpbmdDb250ZXh0LCByb290Tm9kZSkge1xuICAgICAgICBpZiAocm9vdE5vZGUubm9kZVR5cGUgPT09IDEgfHwgcm9vdE5vZGUubm9kZVR5cGUgPT09IDgpXG4gICAgICAgICAgICBhcHBseUJpbmRpbmdzVG9EZXNjZW5kYW50c0ludGVybmFsKGdldEJpbmRpbmdDb250ZXh0KHZpZXdNb2RlbE9yQmluZGluZ0NvbnRleHQpLCByb290Tm9kZSwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIGtvLmFwcGx5QmluZGluZ3MgPSBmdW5jdGlvbiAodmlld01vZGVsT3JCaW5kaW5nQ29udGV4dCwgcm9vdE5vZGUpIHtcbiAgICAgICAgLy8gSWYgalF1ZXJ5IGlzIGxvYWRlZCBhZnRlciBLbm9ja291dCwgd2Ugd29uJ3QgaW5pdGlhbGx5IGhhdmUgYWNjZXNzIHRvIGl0LiBTbyBzYXZlIGl0IGhlcmUuXG4gICAgICAgIGlmICghalF1ZXJ5SW5zdGFuY2UgJiYgd2luZG93WydqUXVlcnknXSkge1xuICAgICAgICAgICAgalF1ZXJ5SW5zdGFuY2UgPSB3aW5kb3dbJ2pRdWVyeSddO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJvb3ROb2RlICYmIChyb290Tm9kZS5ub2RlVHlwZSAhPT0gMSkgJiYgKHJvb3ROb2RlLm5vZGVUeXBlICE9PSA4KSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImtvLmFwcGx5QmluZGluZ3M6IGZpcnN0IHBhcmFtZXRlciBzaG91bGQgYmUgeW91ciB2aWV3IG1vZGVsOyBzZWNvbmQgcGFyYW1ldGVyIHNob3VsZCBiZSBhIERPTSBub2RlXCIpO1xuICAgICAgICByb290Tm9kZSA9IHJvb3ROb2RlIHx8IHdpbmRvdy5kb2N1bWVudC5ib2R5OyAvLyBNYWtlIFwicm9vdE5vZGVcIiBwYXJhbWV0ZXIgb3B0aW9uYWxcblxuICAgICAgICBhcHBseUJpbmRpbmdzVG9Ob2RlQW5kRGVzY2VuZGFudHNJbnRlcm5hbChnZXRCaW5kaW5nQ29udGV4dCh2aWV3TW9kZWxPckJpbmRpbmdDb250ZXh0KSwgcm9vdE5vZGUsIHRydWUpO1xuICAgIH07XG5cbiAgICAvLyBSZXRyaWV2aW5nIGJpbmRpbmcgY29udGV4dCBmcm9tIGFyYml0cmFyeSBub2Rlc1xuICAgIGtvLmNvbnRleHRGb3IgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgIC8vIFdlIGNhbiBvbmx5IGRvIHNvbWV0aGluZyBtZWFuaW5nZnVsIGZvciBlbGVtZW50cyBhbmQgY29tbWVudCBub2RlcyAoaW4gcGFydGljdWxhciwgbm90IHRleHQgbm9kZXMsIGFzIElFIGNhbid0IHN0b3JlIGRvbWRhdGEgZm9yIHRoZW0pXG4gICAgICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0ga28uc3RvcmVkQmluZGluZ0NvbnRleHRGb3JOb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KSByZXR1cm4gY29udGV4dDtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5wYXJlbnROb2RlKSByZXR1cm4ga28uY29udGV4dEZvcihub2RlLnBhcmVudE5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBrby5kYXRhRm9yID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgICB2YXIgY29udGV4dCA9IGtvLmNvbnRleHRGb3Iobm9kZSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0ID8gY29udGV4dFsnJGRhdGEnXSA6IHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAga28uZXhwb3J0U3ltYm9sKCdiaW5kaW5nSGFuZGxlcnMnLCBrby5iaW5kaW5nSGFuZGxlcnMpO1xuICAgIGtvLmV4cG9ydFN5bWJvbCgnYXBwbHlCaW5kaW5ncycsIGtvLmFwcGx5QmluZGluZ3MpO1xuICAgIGtvLmV4cG9ydFN5bWJvbCgnYXBwbHlCaW5kaW5nc1RvRGVzY2VuZGFudHMnLCBrby5hcHBseUJpbmRpbmdzVG9EZXNjZW5kYW50cyk7XG4gICAga28uZXhwb3J0U3ltYm9sKCdhcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUnLCBrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUpO1xuICAgIGtvLmV4cG9ydFN5bWJvbCgnYXBwbHlCaW5kaW5nc1RvTm9kZScsIGtvLmFwcGx5QmluZGluZ3NUb05vZGUpO1xuICAgIGtvLmV4cG9ydFN5bWJvbCgnY29udGV4dEZvcicsIGtvLmNvbnRleHRGb3IpO1xuICAgIGtvLmV4cG9ydFN5bWJvbCgnZGF0YUZvcicsIGtvLmRhdGFGb3IpO1xufSkoKTtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbiAgICB2YXIgbG9hZGluZ1N1YnNjcmliYWJsZXNDYWNoZSA9IHt9LCAvLyBUcmFja3MgY29tcG9uZW50IGxvYWRzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBmbGlnaHRcbiAgICAgICAgbG9hZGVkRGVmaW5pdGlvbnNDYWNoZSA9IHt9OyAgICAvLyBUcmFja3MgY29tcG9uZW50IGxvYWRzIHRoYXQgaGF2ZSBhbHJlYWR5IGNvbXBsZXRlZFxuXG4gICAga28uY29tcG9uZW50cyA9IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbihjb21wb25lbnROYW1lLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIGNhY2hlZERlZmluaXRpb24gPSBnZXRPYmplY3RPd25Qcm9wZXJ0eShsb2FkZWREZWZpbml0aW9uc0NhY2hlLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgICAgIGlmIChjYWNoZWREZWZpbml0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gSXQncyBhbHJlYWR5IGxvYWRlZCBhbmQgY2FjaGVkLiBSZXVzZSB0aGUgc2FtZSBkZWZpbml0aW9uIG9iamVjdC5cbiAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgZm9yIEFQSSBjb25zaXN0ZW5jeSwgZXZlbiBjYWNoZSBoaXRzIGNvbXBsZXRlIGFzeW5jaHJvbm91c2x5IGJ5IGRlZmF1bHQuXG4gICAgICAgICAgICAgICAgLy8gWW91IGNhbiBieXBhc3MgdGhpcyBieSBwdXR0aW5nIHN5bmNocm9ub3VzOnRydWUgb24geW91ciBjb21wb25lbnQgY29uZmlnLlxuICAgICAgICAgICAgICAgIGlmIChjYWNoZWREZWZpbml0aW9uLmlzU3luY2hyb25vdXNDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAga28uZGVwZW5kZW5jeURldGVjdGlvbi5pZ25vcmUoZnVuY3Rpb24oKSB7IC8vIFNlZSBjb21tZW50IGluIGxvYWRlclJlZ2lzdHJ5QmVoYXZpb3JzLmpzIGZvciByZWFzb25pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGNhY2hlZERlZmluaXRpb24uZGVmaW5pdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtvLnRhc2tzLnNjaGVkdWxlKGZ1bmN0aW9uKCkgeyBjYWxsYmFjayhjYWNoZWREZWZpbml0aW9uLmRlZmluaXRpb24pOyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEpvaW4gdGhlIGxvYWRpbmcgcHJvY2VzcyB0aGF0IGlzIGFscmVhZHkgdW5kZXJ3YXksIG9yIHN0YXJ0IGEgbmV3IG9uZS5cbiAgICAgICAgICAgICAgICBsb2FkQ29tcG9uZW50QW5kTm90aWZ5KGNvbXBvbmVudE5hbWUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBjbGVhckNhY2hlZERlZmluaXRpb246IGZ1bmN0aW9uKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBsb2FkZWREZWZpbml0aW9uc0NhY2hlW2NvbXBvbmVudE5hbWVdO1xuICAgICAgICB9LFxuXG4gICAgICAgIF9nZXRGaXJzdFJlc3VsdEZyb21Mb2FkZXJzOiBnZXRGaXJzdFJlc3VsdEZyb21Mb2FkZXJzXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldE9iamVjdE93blByb3BlcnR5KG9iaiwgcHJvcE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkgPyBvYmpbcHJvcE5hbWVdIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWRDb21wb25lbnRBbmROb3RpZnkoY29tcG9uZW50TmFtZSwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHN1YnNjcmliYWJsZSA9IGdldE9iamVjdE93blByb3BlcnR5KGxvYWRpbmdTdWJzY3JpYmFibGVzQ2FjaGUsIGNvbXBvbmVudE5hbWUpLFxuICAgICAgICAgICAgY29tcGxldGVkQXN5bmM7XG4gICAgICAgIGlmICghc3Vic2NyaWJhYmxlKSB7XG4gICAgICAgICAgICAvLyBJdCdzIG5vdCBzdGFydGVkIGxvYWRpbmcgeWV0LiBTdGFydCBsb2FkaW5nLCBhbmQgd2hlbiBpdCdzIGRvbmUsIG1vdmUgaXQgdG8gbG9hZGVkRGVmaW5pdGlvbnNDYWNoZS5cbiAgICAgICAgICAgIHN1YnNjcmliYWJsZSA9IGxvYWRpbmdTdWJzY3JpYmFibGVzQ2FjaGVbY29tcG9uZW50TmFtZV0gPSBuZXcga28uc3Vic2NyaWJhYmxlKCk7XG4gICAgICAgICAgICBzdWJzY3JpYmFibGUuc3Vic2NyaWJlKGNhbGxiYWNrKTtcblxuICAgICAgICAgICAgYmVnaW5Mb2FkaW5nQ29tcG9uZW50KGNvbXBvbmVudE5hbWUsIGZ1bmN0aW9uKGRlZmluaXRpb24sIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIHZhciBpc1N5bmNocm9ub3VzQ29tcG9uZW50ID0gISEoY29uZmlnICYmIGNvbmZpZ1snc3luY2hyb25vdXMnXSk7XG4gICAgICAgICAgICAgICAgbG9hZGVkRGVmaW5pdGlvbnNDYWNoZVtjb21wb25lbnROYW1lXSA9IHsgZGVmaW5pdGlvbjogZGVmaW5pdGlvbiwgaXNTeW5jaHJvbm91c0NvbXBvbmVudDogaXNTeW5jaHJvbm91c0NvbXBvbmVudCB9O1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2FkaW5nU3Vic2NyaWJhYmxlc0NhY2hlW2NvbXBvbmVudE5hbWVdO1xuXG4gICAgICAgICAgICAgICAgLy8gRm9yIEFQSSBjb25zaXN0ZW5jeSwgYWxsIGxvYWRzIGNvbXBsZXRlIGFzeW5jaHJvbm91c2x5LiBIb3dldmVyIHdlIHdhbnQgdG8gYXZvaWRcbiAgICAgICAgICAgICAgICAvLyBhZGRpbmcgYW4gZXh0cmEgdGFzayBzY2hlZHVsZSBpZiBpdCdzIHVubmVjZXNzYXJ5IChpLmUuLCB0aGUgY29tcGxldGlvbiBpcyBhbHJlYWR5XG4gICAgICAgICAgICAgICAgLy8gYXN5bmMpLlxuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gWW91IGNhbiBieXBhc3MgdGhlICdhbHdheXMgYXN5bmNocm9ub3VzJyBmZWF0dXJlIGJ5IHB1dHRpbmcgdGhlIHN5bmNocm9ub3VzOnRydWVcbiAgICAgICAgICAgICAgICAvLyBmbGFnIG9uIHlvdXIgY29tcG9uZW50IGNvbmZpZ3VyYXRpb24gd2hlbiB5b3UgcmVnaXN0ZXIgaXQuXG4gICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZEFzeW5jIHx8IGlzU3luY2hyb25vdXNDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IG5vdGlmeVN1YnNjcmliZXJzIGlnbm9yZXMgYW55IGRlcGVuZGVuY2llcyByZWFkIHdpdGhpbiB0aGUgY2FsbGJhY2suXG4gICAgICAgICAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGluIGxvYWRlclJlZ2lzdHJ5QmVoYXZpb3JzLmpzIGZvciByZWFzb25pbmdcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJhYmxlWydub3RpZnlTdWJzY3JpYmVycyddKGRlZmluaXRpb24pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtvLnRhc2tzLnNjaGVkdWxlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJhYmxlWydub3RpZnlTdWJzY3JpYmVycyddKGRlZmluaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbXBsZXRlZEFzeW5jID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1YnNjcmliYWJsZS5zdWJzY3JpYmUoY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmVnaW5Mb2FkaW5nQ29tcG9uZW50KGNvbXBvbmVudE5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGdldEZpcnN0UmVzdWx0RnJvbUxvYWRlcnMoJ2dldENvbmZpZycsIFtjb21wb25lbnROYW1lXSwgZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIGNvbmZpZywgc28gbm93IGxvYWQgaXRzIGRlZmluaXRpb25cbiAgICAgICAgICAgICAgICBnZXRGaXJzdFJlc3VsdEZyb21Mb2FkZXJzKCdsb2FkQ29tcG9uZW50JywgW2NvbXBvbmVudE5hbWUsIGNvbmZpZ10sIGZ1bmN0aW9uKGRlZmluaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZGVmaW5pdGlvbiwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGNvbXBvbmVudCBoYXMgbm8gY29uZmlnIC0gaXQncyB1bmtub3duIHRvIGFsbCB0aGUgbG9hZGVycy5cbiAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYW4gZXJyb3IgKGUuZy4sIGEgbW9kdWxlIGxvYWRpbmcgZXJyb3IpIC0gdGhhdCB3b3VsZCBhYm9ydCB0aGVcbiAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIGFuZCB0aGlzIGNhbGxiYWNrIHdvdWxkIG5vdCBydW4uIEZvciB0aGlzIGNhbGxiYWNrIHRvIHJ1biwgYWxsIGxvYWRlcnMgbXVzdFxuICAgICAgICAgICAgICAgIC8vIGhhdmUgY29uZmlybWVkIHRoZXkgZG9uJ3Qga25vdyBhYm91dCB0aGlzIGNvbXBvbmVudC5cbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Rmlyc3RSZXN1bHRGcm9tTG9hZGVycyhtZXRob2ROYW1lLCBhcmdzRXhjZXB0Q2FsbGJhY2ssIGNhbGxiYWNrLCBjYW5kaWRhdGVMb2FkZXJzKSB7XG4gICAgICAgIC8vIE9uIHRoZSBmaXJzdCBjYWxsIGluIHRoZSBzdGFjaywgc3RhcnQgd2l0aCB0aGUgZnVsbCBzZXQgb2YgbG9hZGVyc1xuICAgICAgICBpZiAoIWNhbmRpZGF0ZUxvYWRlcnMpIHtcbiAgICAgICAgICAgIGNhbmRpZGF0ZUxvYWRlcnMgPSBrby5jb21wb25lbnRzWydsb2FkZXJzJ10uc2xpY2UoMCk7IC8vIFVzZSBhIGNvcHksIGJlY2F1c2Ugd2UnbGwgYmUgbXV0YXRpbmcgdGhpcyBhcnJheVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJ5IHRoZSBuZXh0IGNhbmRpZGF0ZVxuICAgICAgICB2YXIgY3VycmVudENhbmRpZGF0ZUxvYWRlciA9IGNhbmRpZGF0ZUxvYWRlcnMuc2hpZnQoKTtcbiAgICAgICAgaWYgKGN1cnJlbnRDYW5kaWRhdGVMb2FkZXIpIHtcbiAgICAgICAgICAgIHZhciBtZXRob2RJbnN0YW5jZSA9IGN1cnJlbnRDYW5kaWRhdGVMb2FkZXJbbWV0aG9kTmFtZV07XG4gICAgICAgICAgICBpZiAobWV0aG9kSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgd2FzQWJvcnRlZCA9IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbm91c1JldHVyblZhbHVlID0gbWV0aG9kSW5zdGFuY2UuYXBwbHkoY3VycmVudENhbmRpZGF0ZUxvYWRlciwgYXJnc0V4Y2VwdENhbGxiYWNrLmNvbmNhdChmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YXNBYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgY2FuZGlkYXRlIHJldHVybmVkIGEgdmFsdWUuIFVzZSBpdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdGhlIG5leHQgY2FuZGlkYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Rmlyc3RSZXN1bHRGcm9tTG9hZGVycyhtZXRob2ROYW1lLCBhcmdzRXhjZXB0Q2FsbGJhY2ssIGNhbGxiYWNrLCBjYW5kaWRhdGVMb2FkZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5LCBsb2FkZXJzIG1heSBub3QgcmV0dXJuIGFueXRoaW5nIHN5bmNocm9ub3VzbHkuIFRoaXMgbGVhdmVzIG9wZW4gdGhlIHBvc3NpYmlsaXR5XG4gICAgICAgICAgICAgICAgLy8gdGhhdCB3ZSdsbCBleHRlbmQgdGhlIEFQSSB0byBzdXBwb3J0IHN5bmNocm9ub3VzIHJldHVybiB2YWx1ZXMgaW4gdGhlIGZ1dHVyZS4gSXQgd29uJ3QgYmVcbiAgICAgICAgICAgICAgICAvLyBhIGJyZWFraW5nIGNoYW5nZSwgYmVjYXVzZSBjdXJyZW50bHkgbm8gbG9hZGVyIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGFueXRoaW5nIGV4Y2VwdCB1bmRlZmluZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN5bmNocm9ub3VzUmV0dXJuVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB3YXNBYm9ydGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBNZXRob2QgdG8gc3VwcHJlc3MgZXhjZXB0aW9ucyB3aWxsIHJlbWFpbiB1bmRvY3VtZW50ZWQuIFRoaXMgaXMgb25seSB0byBrZWVwXG4gICAgICAgICAgICAgICAgICAgIC8vIEtPJ3Mgc3BlY3MgcnVubmluZyB0aWRpbHksIHNpbmNlIHdlIGNhbiBvYnNlcnZlIHRoZSBsb2FkaW5nIGdvdCBhYm9ydGVkIHdpdGhvdXRcbiAgICAgICAgICAgICAgICAgICAgLy8gaGF2aW5nIGV4Y2VwdGlvbnMgY2x1dHRlcmluZyB1cCB0aGUgY29uc29sZSB0b28uXG4gICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudENhbmRpZGF0ZUxvYWRlclsnc3VwcHJlc3NMb2FkZXJFeGNlcHRpb25zJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50IGxvYWRlcnMgbXVzdCBzdXBwbHkgdmFsdWVzIGJ5IGludm9raW5nIHRoZSBjYWxsYmFjaywgbm90IGJ5IHJldHVybmluZyB2YWx1ZXMgc3luY2hyb25vdXNseS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBjYW5kaWRhdGUgZG9lc24ndCBoYXZlIHRoZSByZWxldmFudCBoYW5kbGVyLiBTeW5jaHJvbm91c2x5IG1vdmUgb24gdG8gdGhlIG5leHQgb25lLlxuICAgICAgICAgICAgICAgIGdldEZpcnN0UmVzdWx0RnJvbUxvYWRlcnMobWV0aG9kTmFtZSwgYXJnc0V4Y2VwdENhbGxiYWNrLCBjYWxsYmFjaywgY2FuZGlkYXRlTG9hZGVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBObyBjYW5kaWRhdGVzIHJldHVybmVkIGEgdmFsdWVcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVmZXJlbmNlIHRoZSBsb2FkZXJzIHZpYSBzdHJpbmcgbmFtZSBzbyBpdCdzIHBvc3NpYmxlIGZvciBkZXZlbG9wZXJzXG4gICAgLy8gdG8gcmVwbGFjZSB0aGUgd2hvbGUgYXJyYXkgYnkgYXNzaWduaW5nIHRvIGtvLmNvbXBvbmVudHMubG9hZGVyc1xuICAgIGtvLmNvbXBvbmVudHNbJ2xvYWRlcnMnXSA9IFtdO1xuXG4gICAga28uZXhwb3J0U3ltYm9sKCdjb21wb25lbnRzJywga28uY29tcG9uZW50cyk7XG4gICAga28uZXhwb3J0U3ltYm9sKCdjb21wb25lbnRzLmdldCcsIGtvLmNvbXBvbmVudHMuZ2V0KTtcbiAgICBrby5leHBvcnRTeW1ib2woJ2NvbXBvbmVudHMuY2xlYXJDYWNoZWREZWZpbml0aW9uJywga28uY29tcG9uZW50cy5jbGVhckNhY2hlZERlZmluaXRpb24pO1xufSkoKTtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcblxuICAgIC8vIFRoZSBkZWZhdWx0IGxvYWRlciBpcyByZXNwb25zaWJsZSBmb3IgdHdvIHRoaW5nczpcbiAgICAvLyAxLiBNYWludGFpbmluZyB0aGUgZGVmYXVsdCBpbi1tZW1vcnkgcmVnaXN0cnkgb2YgY29tcG9uZW50IGNvbmZpZ3VyYXRpb24gb2JqZWN0c1xuICAgIC8vICAgIChpLmUuLCB0aGUgdGhpbmcgeW91J3JlIHdyaXRpbmcgdG8gd2hlbiB5b3UgY2FsbCBrby5jb21wb25lbnRzLnJlZ2lzdGVyKHNvbWVOYW1lLCAuLi4pKVxuICAgIC8vIDIuIEFuc3dlcmluZyByZXF1ZXN0cyBmb3IgY29tcG9uZW50cyBieSBmZXRjaGluZyBjb25maWd1cmF0aW9uIG9iamVjdHNcbiAgICAvLyAgICBmcm9tIHRoYXQgZGVmYXVsdCBpbi1tZW1vcnkgcmVnaXN0cnkgYW5kIHJlc29sdmluZyB0aGVtIGludG8gc3RhbmRhcmRcbiAgICAvLyAgICBjb21wb25lbnQgZGVmaW5pdGlvbiBvYmplY3RzIChvZiB0aGUgZm9ybSB7IGNyZWF0ZVZpZXdNb2RlbDogLi4uLCB0ZW1wbGF0ZTogLi4uIH0pXG4gICAgLy8gQ3VzdG9tIGxvYWRlcnMgbWF5IG92ZXJyaWRlIGVpdGhlciBvZiB0aGVzZSBmYWNpbGl0aWVzLCBpLmUuLFxuICAgIC8vIDEuIFRvIHN1cHBseSBjb25maWd1cmF0aW9uIG9iamVjdHMgZnJvbSBzb21lIG90aGVyIHNvdXJjZSAoZS5nLiwgY29udmVudGlvbnMpXG4gICAgLy8gMi4gT3IsIHRvIHJlc29sdmUgY29uZmlndXJhdGlvbiBvYmplY3RzIGJ5IGxvYWRpbmcgdmlld21vZGVscy90ZW1wbGF0ZXMgdmlhIGFyYml0cmFyeSBsb2dpYy5cblxuICAgIHZhciBkZWZhdWx0Q29uZmlnUmVnaXN0cnkgPSB7fTtcblxuICAgIGtvLmNvbXBvbmVudHMucmVnaXN0ZXIgPSBmdW5jdGlvbihjb21wb25lbnROYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb25maWd1cmF0aW9uIGZvciAnICsgY29tcG9uZW50TmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa28uY29tcG9uZW50cy5pc1JlZ2lzdGVyZWQoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50ICcgKyBjb21wb25lbnROYW1lICsgJyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHRDb25maWdSZWdpc3RyeVtjb21wb25lbnROYW1lXSA9IGNvbmZpZztcbiAgICB9O1xuXG4gICAga28uY29tcG9uZW50cy5pc1JlZ2lzdGVyZWQgPSBmdW5jdGlvbihjb21wb25lbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0Q29uZmlnUmVnaXN0cnkuaGFzT3duUHJvcGVydHkoY29tcG9uZW50TmFtZSk7XG4gICAgfTtcblxuICAgIGtvLmNvbXBvbmVudHMudW5yZWdpc3RlciA9IGZ1bmN0aW9uKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgZGVsZXRlIGRlZmF1bHRDb25maWdSZWdpc3RyeVtjb21wb25lbnROYW1lXTtcbiAgICAgICAga28uY29tcG9uZW50cy5jbGVhckNhY2hlZERlZmluaXRpb24oY29tcG9uZW50TmFtZSk7XG4gICAgfTtcblxuICAgIGtvLmNvbXBvbmVudHMuZGVmYXVsdExvYWRlciA9IHtcbiAgICAgICAgJ2dldENvbmZpZyc6IGZ1bmN0aW9uKGNvbXBvbmVudE5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gZGVmYXVsdENvbmZpZ1JlZ2lzdHJ5Lmhhc093blByb3BlcnR5KGNvbXBvbmVudE5hbWUpXG4gICAgICAgICAgICAgICAgPyBkZWZhdWx0Q29uZmlnUmVnaXN0cnlbY29tcG9uZW50TmFtZV1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpO1xuICAgICAgICB9LFxuXG4gICAgICAgICdsb2FkQ29tcG9uZW50JzogZnVuY3Rpb24oY29tcG9uZW50TmFtZSwgY29uZmlnLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIGVycm9yQ2FsbGJhY2sgPSBtYWtlRXJyb3JDYWxsYmFjayhjb21wb25lbnROYW1lKTtcbiAgICAgICAgICAgIHBvc3NpYmx5R2V0Q29uZmlnRnJvbUFtZChlcnJvckNhbGxiYWNrLCBjb25maWcsIGZ1bmN0aW9uKGxvYWRlZENvbmZpZykge1xuICAgICAgICAgICAgICAgIHJlc29sdmVDb25maWcoY29tcG9uZW50TmFtZSwgZXJyb3JDYWxsYmFjaywgbG9hZGVkQ29uZmlnLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICAnbG9hZFRlbXBsYXRlJzogZnVuY3Rpb24oY29tcG9uZW50TmFtZSwgdGVtcGxhdGVDb25maWcsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXNvbHZlVGVtcGxhdGUobWFrZUVycm9yQ2FsbGJhY2soY29tcG9uZW50TmFtZSksIHRlbXBsYXRlQ29uZmlnLCBjYWxsYmFjayk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgJ2xvYWRWaWV3TW9kZWwnOiBmdW5jdGlvbihjb21wb25lbnROYW1lLCB2aWV3TW9kZWxDb25maWcsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXNvbHZlVmlld01vZGVsKG1ha2VFcnJvckNhbGxiYWNrKGNvbXBvbmVudE5hbWUpLCB2aWV3TW9kZWxDb25maWcsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgY3JlYXRlVmlld01vZGVsS2V5ID0gJ2NyZWF0ZVZpZXdNb2RlbCc7XG5cbiAgICAvLyBUYWtlcyBhIGNvbmZpZyBvYmplY3Qgb2YgdGhlIGZvcm0geyB0ZW1wbGF0ZTogLi4uLCB2aWV3TW9kZWw6IC4uLiB9LCBhbmQgYXN5bmNocm9ub3VzbHkgY29udmVydCBpdFxuICAgIC8vIGludG8gdGhlIHN0YW5kYXJkIGNvbXBvbmVudCBkZWZpbml0aW9uIGZvcm1hdDpcbiAgICAvLyAgICB7IHRlbXBsYXRlOiA8QXJyYXlPZkRvbU5vZGVzPiwgY3JlYXRlVmlld01vZGVsOiBmdW5jdGlvbihwYXJhbXMsIGNvbXBvbmVudEluZm8pIHsgLi4uIH0gfS5cbiAgICAvLyBTaW5jZSBib3RoIHRlbXBsYXRlIGFuZCB2aWV3TW9kZWwgbWF5IG5lZWQgdG8gYmUgcmVzb2x2ZWQgYXN5bmNocm9ub3VzbHksIGJvdGggdGFza3MgYXJlIHBlcmZvcm1lZFxuICAgIC8vIGluIHBhcmFsbGVsLCBhbmQgdGhlIHJlc3VsdHMgam9pbmVkIHdoZW4gYm90aCBhcmUgcmVhZHkuIFdlIGRvbid0IGRlcGVuZCBvbiBhbnkgcHJvbWlzZXMgaW5mcmFzdHJ1Y3R1cmUsXG4gICAgLy8gc28gdGhpcyBpcyBpbXBsZW1lbnRlZCBtYW51YWxseSBiZWxvdy5cbiAgICBmdW5jdGlvbiByZXNvbHZlQ29uZmlnKGNvbXBvbmVudE5hbWUsIGVycm9yQ2FsbGJhY2ssIGNvbmZpZywgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHt9LFxuICAgICAgICAgICAgbWFrZUNhbGxCYWNrV2hlblplcm8gPSAyLFxuICAgICAgICAgICAgdHJ5SXNzdWVDYWxsYmFjayA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmICgtLW1ha2VDYWxsQmFja1doZW5aZXJvID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRlbXBsYXRlQ29uZmlnID0gY29uZmlnWyd0ZW1wbGF0ZSddLFxuICAgICAgICAgICAgdmlld01vZGVsQ29uZmlnID0gY29uZmlnWyd2aWV3TW9kZWwnXTtcblxuICAgICAgICBpZiAodGVtcGxhdGVDb25maWcpIHtcbiAgICAgICAgICAgIHBvc3NpYmx5R2V0Q29uZmlnRnJvbUFtZChlcnJvckNhbGxiYWNrLCB0ZW1wbGF0ZUNvbmZpZywgZnVuY3Rpb24obG9hZGVkQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAga28uY29tcG9uZW50cy5fZ2V0Rmlyc3RSZXN1bHRGcm9tTG9hZGVycygnbG9hZFRlbXBsYXRlJywgW2NvbXBvbmVudE5hbWUsIGxvYWRlZENvbmZpZ10sIGZ1bmN0aW9uKHJlc29sdmVkVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wyd0ZW1wbGF0ZSddID0gcmVzb2x2ZWRUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5SXNzdWVDYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cnlJc3N1ZUNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmlld01vZGVsQ29uZmlnKSB7XG4gICAgICAgICAgICBwb3NzaWJseUdldENvbmZpZ0Zyb21BbWQoZXJyb3JDYWxsYmFjaywgdmlld01vZGVsQ29uZmlnLCBmdW5jdGlvbihsb2FkZWRDb25maWcpIHtcbiAgICAgICAgICAgICAgICBrby5jb21wb25lbnRzLl9nZXRGaXJzdFJlc3VsdEZyb21Mb2FkZXJzKCdsb2FkVmlld01vZGVsJywgW2NvbXBvbmVudE5hbWUsIGxvYWRlZENvbmZpZ10sIGZ1bmN0aW9uKHJlc29sdmVkVmlld01vZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtjcmVhdGVWaWV3TW9kZWxLZXldID0gcmVzb2x2ZWRWaWV3TW9kZWw7XG4gICAgICAgICAgICAgICAgICAgIHRyeUlzc3VlQ2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5SXNzdWVDYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVRlbXBsYXRlKGVycm9yQ2FsbGJhY2ssIHRlbXBsYXRlQ29uZmlnLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIHRlbXBsYXRlQ29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gTWFya3VwIC0gcGFyc2UgaXRcbiAgICAgICAgICAgIGNhbGxiYWNrKGtvLnV0aWxzLnBhcnNlSHRtbEZyYWdtZW50KHRlbXBsYXRlQ29uZmlnKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGVtcGxhdGVDb25maWcgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgLy8gQXNzdW1lIGFscmVhZHkgYW4gYXJyYXkgb2YgRE9NIG5vZGVzIC0gcGFzcyB0aHJvdWdoIHVuY2hhbmdlZFxuICAgICAgICAgICAgY2FsbGJhY2sodGVtcGxhdGVDb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRG9jdW1lbnRGcmFnbWVudCh0ZW1wbGF0ZUNvbmZpZykpIHtcbiAgICAgICAgICAgIC8vIERvY3VtZW50IGZyYWdtZW50IC0gdXNlIGl0cyBjaGlsZCBub2Rlc1xuICAgICAgICAgICAgY2FsbGJhY2soa28udXRpbHMubWFrZUFycmF5KHRlbXBsYXRlQ29uZmlnLmNoaWxkTm9kZXMpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0ZW1wbGF0ZUNvbmZpZ1snZWxlbWVudCddKSB7XG4gICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRlbXBsYXRlQ29uZmlnWydlbGVtZW50J107XG4gICAgICAgICAgICBpZiAoaXNEb21FbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgLy8gRWxlbWVudCBpbnN0YW5jZSAtIGNvcHkgaXRzIGNoaWxkIG5vZGVzXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soY2xvbmVOb2Rlc0Zyb21UZW1wbGF0ZVNvdXJjZUVsZW1lbnQoZWxlbWVudCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAvLyBFbGVtZW50IElEIC0gZmluZCBpdCwgdGhlbiBjb3B5IGl0cyBjaGlsZCBub2Rlc1xuICAgICAgICAgICAgICAgIHZhciBlbGVtSW5zdGFuY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGNsb25lTm9kZXNGcm9tVGVtcGxhdGVTb3VyY2VFbGVtZW50KGVsZW1JbnN0YW5jZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soJ0Nhbm5vdCBmaW5kIGVsZW1lbnQgd2l0aCBJRCAnICsgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKCdVbmtub3duIGVsZW1lbnQgdHlwZTogJyArIGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JDYWxsYmFjaygnVW5rbm93biB0ZW1wbGF0ZSB2YWx1ZTogJyArIHRlbXBsYXRlQ29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc29sdmVWaWV3TW9kZWwoZXJyb3JDYWxsYmFjaywgdmlld01vZGVsQ29uZmlnLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIHZpZXdNb2RlbENvbmZpZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgLy8gQ29uc3RydWN0b3IgLSBjb252ZXJ0IHRvIHN0YW5kYXJkIGZhY3RvcnkgZnVuY3Rpb24gZm9ybWF0XG4gICAgICAgICAgICAvLyBCeSBkZXNpZ24sIHRoaXMgZG9lcyAqbm90KiBzdXBwbHkgY29tcG9uZW50SW5mbyB0byB0aGUgY29uc3RydWN0b3IsIGFzIHRoZSBpbnRlbnQgaXMgdGhhdFxuICAgICAgICAgICAgLy8gY29tcG9uZW50SW5mbyBjb250YWlucyBub24tdmlld21vZGVsIGRhdGEgKGUuZy4sIHRoZSBjb21wb25lbnQncyBlbGVtZW50KSB0aGF0IHNob3VsZCBvbmx5XG4gICAgICAgICAgICAvLyBiZSB1c2VkIGluIGZhY3RvcnkgZnVuY3Rpb25zLCBub3Qgdmlld21vZGVsIGNvbnN0cnVjdG9ycy5cbiAgICAgICAgICAgIGNhbGxiYWNrKGZ1bmN0aW9uIChwYXJhbXMgLyosIGNvbXBvbmVudEluZm8gKi8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHZpZXdNb2RlbENvbmZpZyhwYXJhbXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZpZXdNb2RlbENvbmZpZ1tjcmVhdGVWaWV3TW9kZWxLZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBBbHJlYWR5IGEgZmFjdG9yeSBmdW5jdGlvbiAtIHVzZSBpdCBhcy1pc1xuICAgICAgICAgICAgY2FsbGJhY2sodmlld01vZGVsQ29uZmlnW2NyZWF0ZVZpZXdNb2RlbEtleV0pO1xuICAgICAgICB9IGVsc2UgaWYgKCdpbnN0YW5jZScgaW4gdmlld01vZGVsQ29uZmlnKSB7XG4gICAgICAgICAgICAvLyBGaXhlZCBvYmplY3QgaW5zdGFuY2UgLSBwcm9tb3RlIHRvIGNyZWF0ZVZpZXdNb2RlbCBmb3JtYXQgZm9yIEFQSSBjb25zaXN0ZW5jeVxuICAgICAgICAgICAgdmFyIGZpeGVkSW5zdGFuY2UgPSB2aWV3TW9kZWxDb25maWdbJ2luc3RhbmNlJ107XG4gICAgICAgICAgICBjYWxsYmFjayhmdW5jdGlvbiAocGFyYW1zLCBjb21wb25lbnRJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpeGVkSW5zdGFuY2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICgndmlld01vZGVsJyBpbiB2aWV3TW9kZWxDb25maWcpIHtcbiAgICAgICAgICAgIC8vIFJlc29sdmVkIEFNRCBtb2R1bGUgd2hvc2UgdmFsdWUgaXMgb2YgdGhlIGZvcm0geyB2aWV3TW9kZWw6IC4uLiB9XG4gICAgICAgICAgICByZXNvbHZlVmlld01vZGVsKGVycm9yQ2FsbGJhY2ssIHZpZXdNb2RlbENvbmZpZ1sndmlld01vZGVsJ10sIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soJ1Vua25vd24gdmlld01vZGVsIHZhbHVlOiAnICsgdmlld01vZGVsQ29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsb25lTm9kZXNGcm9tVGVtcGxhdGVTb3VyY2VFbGVtZW50KGVsZW1JbnN0YW5jZSkge1xuICAgICAgICBzd2l0Y2ggKGtvLnV0aWxzLnRhZ05hbWVMb3dlcihlbGVtSW5zdGFuY2UpKSB7XG4gICAgICAgICAgICBjYXNlICdzY3JpcHQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBrby51dGlscy5wYXJzZUh0bWxGcmFnbWVudChlbGVtSW5zdGFuY2UudGV4dCk7XG4gICAgICAgICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGtvLnV0aWxzLnBhcnNlSHRtbEZyYWdtZW50KGVsZW1JbnN0YW5jZS52YWx1ZSk7XG4gICAgICAgICAgICBjYXNlICd0ZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgLy8gRm9yIGJyb3dzZXJzIHdpdGggcHJvcGVyIDx0ZW1wbGF0ZT4gZWxlbWVudCBzdXBwb3J0IChpLmUuLCB3aGVyZSB0aGUgLmNvbnRlbnQgcHJvcGVydHlcbiAgICAgICAgICAgICAgICAvLyBnaXZlcyBhIGRvY3VtZW50IGZyYWdtZW50KSwgdXNlIHRoYXQgZG9jdW1lbnQgZnJhZ21lbnQuXG4gICAgICAgICAgICAgICAgaWYgKGlzRG9jdW1lbnRGcmFnbWVudChlbGVtSW5zdGFuY2UuY29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtvLnV0aWxzLmNsb25lTm9kZXMoZWxlbUluc3RhbmNlLmNvbnRlbnQuY2hpbGROb2Rlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVndWxhciBlbGVtZW50cyBzdWNoIGFzIDxkaXY+LCBhbmQgPHRlbXBsYXRlPiBlbGVtZW50cyBvbiBvbGQgYnJvd3NlcnMgdGhhdCBkb24ndCByZWFsbHlcbiAgICAgICAgLy8gdW5kZXJzdGFuZCA8dGVtcGxhdGU+IGFuZCBqdXN0IHRyZWF0IGl0IGFzIGEgcmVndWxhciBjb250YWluZXJcbiAgICAgICAgcmV0dXJuIGtvLnV0aWxzLmNsb25lTm9kZXMoZWxlbUluc3RhbmNlLmNoaWxkTm9kZXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRG9tRWxlbWVudChvYmopIHtcbiAgICAgICAgaWYgKHdpbmRvd1snSFRNTEVsZW1lbnQnXSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBvYmoudGFnTmFtZSAmJiBvYmoubm9kZVR5cGUgPT09IDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RvY3VtZW50RnJhZ21lbnQob2JqKSB7XG4gICAgICAgIGlmICh3aW5kb3dbJ0RvY3VtZW50RnJhZ21lbnQnXSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqICYmIG9iai5ub2RlVHlwZSA9PT0gMTE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb3NzaWJseUdldENvbmZpZ0Zyb21BbWQoZXJyb3JDYWxsYmFjaywgY29uZmlnLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ1sncmVxdWlyZSddID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gVGhlIGNvbmZpZyBpcyB0aGUgdmFsdWUgb2YgYW4gQU1EIG1vZHVsZVxuICAgICAgICAgICAgaWYgKGFtZFJlcXVpcmUgfHwgd2luZG93WydyZXF1aXJlJ10pIHtcbiAgICAgICAgICAgICAgICAoYW1kUmVxdWlyZSB8fCB3aW5kb3dbJ3JlcXVpcmUnXSkoW2NvbmZpZ1sncmVxdWlyZSddXSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKCdVc2VzIHJlcXVpcmUsIGJ1dCBubyBBTUQgbG9hZGVyIGlzIHByZXNlbnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlRXJyb3JDYWxsYmFjayhjb21wb25lbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgXFwnJyArIGNvbXBvbmVudE5hbWUgKyAnXFwnOiAnICsgbWVzc2FnZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAga28uZXhwb3J0U3ltYm9sKCdjb21wb25lbnRzLnJlZ2lzdGVyJywga28uY29tcG9uZW50cy5yZWdpc3Rlcik7XG4gICAga28uZXhwb3J0U3ltYm9sKCdjb21wb25lbnRzLmlzUmVnaXN0ZXJlZCcsIGtvLmNvbXBvbmVudHMuaXNSZWdpc3RlcmVkKTtcbiAgICBrby5leHBvcnRTeW1ib2woJ2NvbXBvbmVudHMudW5yZWdpc3RlcicsIGtvLmNvbXBvbmVudHMudW5yZWdpc3Rlcik7XG5cbiAgICAvLyBFeHBvc2UgdGhlIGRlZmF1bHQgbG9hZGVyIHNvIHRoYXQgZGV2ZWxvcGVycyBjYW4gZGlyZWN0bHkgYXNrIGl0IGZvciBjb25maWd1cmF0aW9uXG4gICAgLy8gb3IgdG8gcmVzb2x2ZSBjb25maWd1cmF0aW9uXG4gICAga28uZXhwb3J0U3ltYm9sKCdjb21wb25lbnRzLmRlZmF1bHRMb2FkZXInLCBrby5jb21wb25lbnRzLmRlZmF1bHRMb2FkZXIpO1xuXG4gICAgLy8gQnkgZGVmYXVsdCwgdGhlIGRlZmF1bHQgbG9hZGVyIGlzIHRoZSBvbmx5IHJlZ2lzdGVyZWQgY29tcG9uZW50IGxvYWRlclxuICAgIGtvLmNvbXBvbmVudHNbJ2xvYWRlcnMnXS5wdXNoKGtvLmNvbXBvbmVudHMuZGVmYXVsdExvYWRlcik7XG5cbiAgICAvLyBQcml2YXRlbHkgZXhwb3NlIHRoZSB1bmRlcmx5aW5nIGNvbmZpZyByZWdpc3RyeSBmb3IgdXNlIGluIG9sZC1JRSBzaGltXG4gICAga28uY29tcG9uZW50cy5fYWxsUmVnaXN0ZXJlZENvbXBvbmVudHMgPSBkZWZhdWx0Q29uZmlnUmVnaXN0cnk7XG59KSgpO1xuKGZ1bmN0aW9uICh1bmRlZmluZWQpIHtcbiAgICAvLyBPdmVycmlkYWJsZSBBUEkgZm9yIGRldGVybWluaW5nIHdoaWNoIGNvbXBvbmVudCBuYW1lIGFwcGxpZXMgdG8gYSBnaXZlbiBub2RlLiBCeSBvdmVycmlkaW5nIHRoaXMsXG4gICAgLy8geW91IGNhbiBmb3IgZXhhbXBsZSBtYXAgc3BlY2lmaWMgdGFnTmFtZXMgdG8gY29tcG9uZW50cyB0aGF0IGFyZSBub3QgcHJlcmVnaXN0ZXJlZC5cbiAgICBrby5jb21wb25lbnRzWydnZXRDb21wb25lbnROYW1lRm9yTm9kZSddID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgICB2YXIgdGFnTmFtZUxvd2VyID0ga28udXRpbHMudGFnTmFtZUxvd2VyKG5vZGUpO1xuICAgICAgICBpZiAoa28uY29tcG9uZW50cy5pc1JlZ2lzdGVyZWQodGFnTmFtZUxvd2VyKSkge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIGRldGVybWluZSB0aGF0IHRoaXMgbm9kZSBjYW4gYmUgY29uc2lkZXJlZCBhICpjdXN0b20qIGVsZW1lbnQ7IHNlZSBodHRwczovL2dpdGh1Yi5jb20va25vY2tvdXQva25vY2tvdXQvaXNzdWVzLzE2MDNcbiAgICAgICAgICAgIGlmICh0YWdOYW1lTG93ZXIuaW5kZXhPZignLScpICE9IC0xIHx8ICgnJyArIG5vZGUpID09IFwiW29iamVjdCBIVE1MVW5rbm93bkVsZW1lbnRdXCIgfHwgKGtvLnV0aWxzLmllVmVyc2lvbiA8PSA4ICYmIG5vZGUudGFnTmFtZSA9PT0gdGFnTmFtZUxvd2VyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0YWdOYW1lTG93ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAga28uY29tcG9uZW50cy5hZGRCaW5kaW5nc0ZvckN1c3RvbUVsZW1lbnQgPSBmdW5jdGlvbihhbGxCaW5kaW5ncywgbm9kZSwgYmluZGluZ0NvbnRleHQsIHZhbHVlQWNjZXNzb3JzKSB7XG4gICAgICAgIC8vIERldGVybWluZSBpZiBpdCdzIHJlYWxseSBhIGN1c3RvbSBlbGVtZW50IG1hdGNoaW5nIGEgY29tcG9uZW50XG4gICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGtvLmNvbXBvbmVudHNbJ2dldENvbXBvbmVudE5hbWVGb3JOb2RlJ10obm9kZSk7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIEl0IGRvZXMgcmVwcmVzZW50IGEgY29tcG9uZW50LCBzbyBhZGQgYSBjb21wb25lbnQgYmluZGluZyBmb3IgaXRcbiAgICAgICAgICAgICAgICBhbGxCaW5kaW5ncyA9IGFsbEJpbmRpbmdzIHx8IHt9O1xuXG4gICAgICAgICAgICAgICAgaWYgKGFsbEJpbmRpbmdzWydjb21wb25lbnQnXSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBBdm9pZCBzaWxlbnRseSBvdmVyd3JpdGluZyBzb21lIG90aGVyICdjb21wb25lbnQnIGJpbmRpbmcgdGhhdCBtYXkgYWxyZWFkeSBiZSBvbiB0aGUgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgdGhlIFwiY29tcG9uZW50XCIgYmluZGluZyBvbiBhIGN1c3RvbSBlbGVtZW50IG1hdGNoaW5nIGEgY29tcG9uZW50Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudEJpbmRpbmdWYWx1ZSA9IHsgJ25hbWUnOiBjb21wb25lbnROYW1lLCAncGFyYW1zJzogZ2V0Q29tcG9uZW50UGFyYW1zRnJvbUN1c3RvbUVsZW1lbnQobm9kZSwgYmluZGluZ0NvbnRleHQpIH07XG5cbiAgICAgICAgICAgICAgICBhbGxCaW5kaW5nc1snY29tcG9uZW50J10gPSB2YWx1ZUFjY2Vzc29yc1xuICAgICAgICAgICAgICAgICAgICA/IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29tcG9uZW50QmluZGluZ1ZhbHVlOyB9XG4gICAgICAgICAgICAgICAgICAgIDogY29tcG9uZW50QmluZGluZ1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFsbEJpbmRpbmdzO1xuICAgIH1cblxuICAgIHZhciBuYXRpdmVCaW5kaW5nUHJvdmlkZXJJbnN0YW5jZSA9IG5ldyBrby5iaW5kaW5nUHJvdmlkZXIoKTtcblxuICAgIGZ1bmN0aW9uIGdldENvbXBvbmVudFBhcmFtc0Zyb21DdXN0b21FbGVtZW50KGVsZW0sIGJpbmRpbmdDb250ZXh0KSB7XG4gICAgICAgIHZhciBwYXJhbXNBdHRyaWJ1dGUgPSBlbGVtLmdldEF0dHJpYnV0ZSgncGFyYW1zJyk7XG5cbiAgICAgICAgaWYgKHBhcmFtc0F0dHJpYnV0ZSkge1xuICAgICAgICAgICAgdmFyIHBhcmFtcyA9IG5hdGl2ZUJpbmRpbmdQcm92aWRlckluc3RhbmNlWydwYXJzZUJpbmRpbmdzU3RyaW5nJ10ocGFyYW1zQXR0cmlidXRlLCBiaW5kaW5nQ29udGV4dCwgZWxlbSwgeyAndmFsdWVBY2Nlc3NvcnMnOiB0cnVlLCAnYmluZGluZ1BhcmFtcyc6IHRydWUgfSksXG4gICAgICAgICAgICAgICAgcmF3UGFyYW1Db21wdXRlZFZhbHVlcyA9IGtvLnV0aWxzLm9iamVjdE1hcChwYXJhbXMsIGZ1bmN0aW9uKHBhcmFtVmFsdWUsIHBhcmFtTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga28uY29tcHV0ZWQocGFyYW1WYWx1ZSwgbnVsbCwgeyBkaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQ6IGVsZW0gfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ga28udXRpbHMub2JqZWN0TWFwKHJhd1BhcmFtQ29tcHV0ZWRWYWx1ZXMsIGZ1bmN0aW9uKHBhcmFtVmFsdWVDb21wdXRlZCwgcGFyYW1OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJhbVZhbHVlID0gcGFyYW1WYWx1ZUNvbXB1dGVkLnBlZWsoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG9lcyB0aGUgZXZhbHVhdGlvbiBvZiB0aGUgcGFyYW1ldGVyIHZhbHVlIHVud3JhcCBhbnkgb2JzZXJ2YWJsZXM/XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFyYW1WYWx1ZUNvbXB1dGVkLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGl0IGRvZXNuJ3QsIHNvIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYW55IGNvbXB1dGVkIHdyYXBwZXIuIEp1c3QgcGFzcyB0aHJvdWdoIHRoZSBzdXBwbGllZCB2YWx1ZSBkaXJlY3RseS5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4YW1wbGU6IFwic29tZVZhbDogZmlyc3ROYW1lLCBhZ2U6IDEyM1wiICh3aGV0aGVyIG9yIG5vdCBmaXJzdE5hbWUgaXMgYW4gb2JzZXJ2YWJsZS9jb21wdXRlZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gWWVzIGl0IGRvZXMuIFN1cHBseSBhIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgdW53cmFwcyBib3RoIHRoZSBvdXRlciAoYmluZGluZyBleHByZXNzaW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV2ZWwgb2Ygb2JzZXJ2YWJpbGl0eSwgYW5kIGFueSBpbm5lciAocmVzdWx0aW5nIG1vZGVsIHZhbHVlKSBsZXZlbCBvZiBvYnNlcnZhYmlsaXR5LlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGUgY29tcG9uZW50IGRvZXNuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBtdWx0aXBsZSB1bndyYXBwaW5nLiBJZiB0aGUgdmFsdWUgaXMgYVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd3JpdGFibGUgb2JzZXJ2YWJsZSwgdGhlIGNvbXB1dGVkIHdpbGwgYWxzbyBiZSB3cml0YWJsZSBhbmQgcGFzcyB0aGUgdmFsdWUgb24gdG8gdGhlIG9ic2VydmFibGUuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga28uY29tcHV0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWFkJzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKHBhcmFtVmFsdWVDb21wdXRlZCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3cml0ZSc6IGtvLmlzV3JpdGVhYmxlT2JzZXJ2YWJsZShwYXJhbVZhbHVlKSAmJiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbVZhbHVlQ29tcHV0ZWQoKSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQ6IGVsZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIEdpdmUgYWNjZXNzIHRvIHRoZSByYXcgY29tcHV0ZWRzLCBhcyBsb25nIGFzIHRoYXQgd291bGRuJ3Qgb3ZlcndyaXRlIGFueSBjdXN0b20gcGFyYW0gYWxzbyBjYWxsZWQgJyRyYXcnXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGluIGNhc2UgdGhlIGRldmVsb3BlciB3YW50cyB0byByZWFjdCB0byBvdXRlciAoYmluZGluZykgb2JzZXJ2YWJpbGl0eSBzZXBhcmF0ZWx5IGZyb20gaW5uZXJcbiAgICAgICAgICAgIC8vIChtb2RlbCB2YWx1ZSkgb2JzZXJ2YWJpbGl0eSwgb3IgaW4gY2FzZSB0aGUgbW9kZWwgdmFsdWUgb2JzZXJ2YWJsZSBoYXMgc3Vib2JzZXJ2YWJsZXMuXG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNPd25Qcm9wZXJ0eSgnJHJhdycpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0WyckcmF3J10gPSByYXdQYXJhbUNvbXB1dGVkVmFsdWVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBhYnNlbmNlIG9mIGEgXCJwYXJhbXNcIiBhdHRyaWJ1dGUgaXMgdHJlYXRlZCB0aGUgc2FtZSBhcyB0aGUgcHJlc2VuY2Ugb2ZcbiAgICAgICAgICAgIC8vIGFueSBlbXB0eSBvbmUuIE90aGVyd2lzZSBjb21wb25lbnQgdmlld21vZGVscyBuZWVkIHNwZWNpYWwgY29kZSB0byBjaGVjayB3aGV0aGVyIG9yIG5vdFxuICAgICAgICAgICAgLy8gJ3BhcmFtcycgb3IgJ3BhcmFtcy4kcmF3JyBpcyBudWxsL3VuZGVmaW5lZCBiZWZvcmUgcmVhZGluZyBzdWJwcm9wZXJ0aWVzLCB3aGljaCBpcyBhbm5veWluZy5cbiAgICAgICAgICAgIHJldHVybiB7ICckcmF3Jzoge30gfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQ29tcGF0aWJpbGl0eSBjb2RlIGZvciBvbGRlciAocHJlLUhUTUw1KSBJRSBicm93c2Vyc1xuXG4gICAgaWYgKGtvLnV0aWxzLmllVmVyc2lvbiA8IDkpIHtcbiAgICAgICAgLy8gV2hlbmV2ZXIgeW91IHByZXJlZ2lzdGVyIGEgY29tcG9uZW50LCBlbmFibGUgaXQgYXMgYSBjdXN0b20gZWxlbWVudCBpbiB0aGUgY3VycmVudCBkb2N1bWVudFxuICAgICAgICBrby5jb21wb25lbnRzWydyZWdpc3RlciddID0gKGZ1bmN0aW9uKG9yaWdpbmFsRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihjb21wb25lbnROYW1lKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lKTsgLy8gQWxsb3dzIElFPDkgdG8gcGFyc2UgbWFya3VwIGNvbnRhaW5pbmcgdGhlIGN1c3RvbSBlbGVtZW50XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRnVuY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkoa28uY29tcG9uZW50c1sncmVnaXN0ZXInXSk7XG5cbiAgICAgICAgLy8gV2hlbmV2ZXIgeW91IGNyZWF0ZSBhIGRvY3VtZW50IGZyYWdtZW50LCBlbmFibGUgYWxsIHByZXJlZ2lzdGVyZWQgY29tcG9uZW50IG5hbWVzIGFzIGN1c3RvbSBlbGVtZW50c1xuICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIGlubmVyU2hpdi9qUXVlcnkgSFRNTCBwYXJzaW5nIGNvcnJlY3RseSBoYW5kbGUgdGhlIGN1c3RvbSBlbGVtZW50c1xuICAgICAgICBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID0gKGZ1bmN0aW9uKG9yaWdpbmFsRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV3RG9jRnJhZyA9IG9yaWdpbmFsRnVuY3Rpb24oKSxcbiAgICAgICAgICAgICAgICAgICAgYWxsQ29tcG9uZW50cyA9IGtvLmNvbXBvbmVudHMuX2FsbFJlZ2lzdGVyZWRDb21wb25lbnRzO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGNvbXBvbmVudE5hbWUgaW4gYWxsQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsQ29tcG9uZW50cy5oYXNPd25Qcm9wZXJ0eShjb21wb25lbnROYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RG9jRnJhZy5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdEb2NGcmFnO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCk7XG4gICAgfVxufSkoKTsoZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5cbiAgICB2YXIgY29tcG9uZW50TG9hZGluZ09wZXJhdGlvblVuaXF1ZUlkID0gMDtcblxuICAgIGtvLmJpbmRpbmdIYW5kbGVyc1snY29tcG9uZW50J10gPSB7XG4gICAgICAgICdpbml0JzogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVBY2Nlc3NvciwgaWdub3JlZDEsIGlnbm9yZWQyLCBiaW5kaW5nQ29udGV4dCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRWaWV3TW9kZWwsXG4gICAgICAgICAgICAgICAgY3VycmVudExvYWRpbmdPcGVyYXRpb25JZCxcbiAgICAgICAgICAgICAgICBkaXNwb3NlQXNzb2NpYXRlZENvbXBvbmVudFZpZXdNb2RlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRWaWV3TW9kZWxEaXNwb3NlID0gY3VycmVudFZpZXdNb2RlbCAmJiBjdXJyZW50Vmlld01vZGVsWydkaXNwb3NlJ107XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudFZpZXdNb2RlbERpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3TW9kZWxEaXNwb3NlLmNhbGwoY3VycmVudFZpZXdNb2RlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZpZXdNb2RlbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFueSBpbi1mbGlnaHQgbG9hZGluZyBvcGVyYXRpb24gaXMgbm8gbG9uZ2VyIHJlbGV2YW50LCBzbyBtYWtlIHN1cmUgd2UgaWdub3JlIGl0cyBjb21wbGV0aW9uXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMb2FkaW5nT3BlcmF0aW9uSWQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxDaGlsZE5vZGVzID0ga28udXRpbHMubWFrZUFycmF5KGtvLnZpcnR1YWxFbGVtZW50cy5jaGlsZE5vZGVzKGVsZW1lbnQpKTtcblxuICAgICAgICAgICAga28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCBkaXNwb3NlQXNzb2NpYXRlZENvbXBvbmVudFZpZXdNb2RlbCk7XG5cbiAgICAgICAgICAgIGtvLmNvbXB1dGVkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKHZhbHVlQWNjZXNzb3IoKSksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudFBhcmFtcztcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnROYW1lID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZSh2YWx1ZVsnbmFtZSddKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UGFyYW1zID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZSh2YWx1ZVsncGFyYW1zJ10pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbXBvbmVudCBuYW1lIHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBsb2FkaW5nT3BlcmF0aW9uSWQgPSBjdXJyZW50TG9hZGluZ09wZXJhdGlvbklkID0gKytjb21wb25lbnRMb2FkaW5nT3BlcmF0aW9uVW5pcXVlSWQ7XG4gICAgICAgICAgICAgICAga28uY29tcG9uZW50cy5nZXQoY29tcG9uZW50TmFtZSwgZnVuY3Rpb24oY29tcG9uZW50RGVmaW5pdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCB0aGUgY3VycmVudCBsb2FkIG9wZXJhdGlvbiBmb3IgdGhpcyBlbGVtZW50LCBpZ25vcmUgaXQuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TG9hZGluZ09wZXJhdGlvbklkICE9PSBsb2FkaW5nT3BlcmF0aW9uSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIENsZWFuIHVwIHByZXZpb3VzIHN0YXRlXG4gICAgICAgICAgICAgICAgICAgIGRpc3Bvc2VBc3NvY2lhdGVkQ29tcG9uZW50Vmlld01vZGVsKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSW5zdGFudGlhdGUgYW5kIGJpbmQgbmV3IGNvbXBvbmVudC4gSW1wbGljaXRseSB0aGlzIGNsZWFucyBhbnkgb2xkIERPTSBub2Rlcy5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wb25lbnREZWZpbml0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gY29tcG9uZW50IFxcJycgKyBjb21wb25lbnROYW1lICsgJ1xcJycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNsb25lVGVtcGxhdGVJbnRvRWxlbWVudChjb21wb25lbnROYW1lLCBjb21wb25lbnREZWZpbml0aW9uLCBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudFZpZXdNb2RlbCA9IGNyZWF0ZVZpZXdNb2RlbChjb21wb25lbnREZWZpbml0aW9uLCBlbGVtZW50LCBvcmlnaW5hbENoaWxkTm9kZXMsIGNvbXBvbmVudFBhcmFtcyksXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEJpbmRpbmdDb250ZXh0ID0gYmluZGluZ0NvbnRleHRbJ2NyZWF0ZUNoaWxkQ29udGV4dCddKGNvbXBvbmVudFZpZXdNb2RlbCwgLyogZGF0YUl0ZW1BbGlhcyAqLyB1bmRlZmluZWQsIGZ1bmN0aW9uKGN0eCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eFsnJGNvbXBvbmVudCddID0gY29tcG9uZW50Vmlld01vZGVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eFsnJGNvbXBvbmVudFRlbXBsYXRlTm9kZXMnXSA9IG9yaWdpbmFsQ2hpbGROb2RlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Vmlld01vZGVsID0gY29tcG9uZW50Vmlld01vZGVsO1xuICAgICAgICAgICAgICAgICAgICBrby5hcHBseUJpbmRpbmdzVG9EZXNjZW5kYW50cyhjaGlsZEJpbmRpbmdDb250ZXh0LCBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIG51bGwsIHsgZGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkOiBlbGVtZW50IH0pO1xuXG4gICAgICAgICAgICByZXR1cm4geyAnY29udHJvbHNEZXNjZW5kYW50QmluZGluZ3MnOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAga28udmlydHVhbEVsZW1lbnRzLmFsbG93ZWRCaW5kaW5nc1snY29tcG9uZW50J10gPSB0cnVlO1xuXG4gICAgZnVuY3Rpb24gY2xvbmVUZW1wbGF0ZUludG9FbGVtZW50KGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudERlZmluaXRpb24sIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHRlbXBsYXRlID0gY29tcG9uZW50RGVmaW5pdGlvblsndGVtcGxhdGUnXTtcbiAgICAgICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgXFwnJyArIGNvbXBvbmVudE5hbWUgKyAnXFwnIGhhcyBubyB0ZW1wbGF0ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNsb25lZE5vZGVzQXJyYXkgPSBrby51dGlscy5jbG9uZU5vZGVzKHRlbXBsYXRlKTtcbiAgICAgICAga28udmlydHVhbEVsZW1lbnRzLnNldERvbU5vZGVDaGlsZHJlbihlbGVtZW50LCBjbG9uZWROb2Rlc0FycmF5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVWaWV3TW9kZWwoY29tcG9uZW50RGVmaW5pdGlvbiwgZWxlbWVudCwgb3JpZ2luYWxDaGlsZE5vZGVzLCBjb21wb25lbnRQYXJhbXMpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudFZpZXdNb2RlbEZhY3RvcnkgPSBjb21wb25lbnREZWZpbml0aW9uWydjcmVhdGVWaWV3TW9kZWwnXTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudFZpZXdNb2RlbEZhY3RvcnlcbiAgICAgICAgICAgID8gY29tcG9uZW50Vmlld01vZGVsRmFjdG9yeS5jYWxsKGNvbXBvbmVudERlZmluaXRpb24sIGNvbXBvbmVudFBhcmFtcywgeyAnZWxlbWVudCc6IGVsZW1lbnQsICd0ZW1wbGF0ZU5vZGVzJzogb3JpZ2luYWxDaGlsZE5vZGVzIH0pXG4gICAgICAgICAgICA6IGNvbXBvbmVudFBhcmFtczsgLy8gVGVtcGxhdGUtb25seSBjb21wb25lbnRcbiAgICB9XG5cbn0pKCk7XG52YXIgYXR0ckh0bWxUb0phdmFzY3JpcHRNYXAgPSB7ICdjbGFzcyc6ICdjbGFzc05hbWUnLCAnZm9yJzogJ2h0bWxGb3InIH07XG5rby5iaW5kaW5nSGFuZGxlcnNbJ2F0dHInXSA9IHtcbiAgICAndXBkYXRlJzogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVBY2Nlc3NvciwgYWxsQmluZGluZ3MpIHtcbiAgICAgICAgdmFyIHZhbHVlID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZSh2YWx1ZUFjY2Vzc29yKCkpIHx8IHt9O1xuICAgICAgICBrby51dGlscy5vYmplY3RGb3JFYWNoKHZhbHVlLCBmdW5jdGlvbihhdHRyTmFtZSwgYXR0clZhbHVlKSB7XG4gICAgICAgICAgICBhdHRyVmFsdWUgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKGF0dHJWYWx1ZSk7XG5cbiAgICAgICAgICAgIC8vIFRvIGNvdmVyIGNhc2VzIGxpa2UgXCJhdHRyOiB7IGNoZWNrZWQ6c29tZVByb3AgfVwiLCB3ZSB3YW50IHRvIHJlbW92ZSB0aGUgYXR0cmlidXRlIGVudGlyZWx5XG4gICAgICAgICAgICAvLyB3aGVuIHNvbWVQcm9wIGlzIGEgXCJubyB2YWx1ZVwiLWxpa2UgdmFsdWUgKHN0cmljdGx5IG51bGwsIGZhbHNlLCBvciB1bmRlZmluZWQpXG4gICAgICAgICAgICAvLyAoYmVjYXVzZSB0aGUgYWJzZW5jZSBvZiB0aGUgXCJjaGVja2VkXCIgYXR0ciBpcyBob3cgdG8gbWFyayBhbiBlbGVtZW50IGFzIG5vdCBjaGVja2VkLCBldGMuKVxuICAgICAgICAgICAgdmFyIHRvUmVtb3ZlID0gKGF0dHJWYWx1ZSA9PT0gZmFsc2UpIHx8IChhdHRyVmFsdWUgPT09IG51bGwpIHx8IChhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBpZiAodG9SZW1vdmUpXG4gICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0ck5hbWUpO1xuXG4gICAgICAgICAgICAvLyBJbiBJRSA8PSA3IGFuZCBJRTggUXVpcmtzIE1vZGUsIHlvdSBoYXZlIHRvIHVzZSB0aGUgSmF2YXNjcmlwdCBwcm9wZXJ0eSBuYW1lIGluc3RlYWQgb2YgdGhlXG4gICAgICAgICAgICAvLyBIVE1MIGF0dHJpYnV0ZSBuYW1lIGZvciBjZXJ0YWluIGF0dHJpYnV0ZXMuIElFOCBTdGFuZGFyZHMgTW9kZSBzdXBwb3J0cyB0aGUgY29ycmVjdCBiZWhhdmlvcixcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIG9mIGZpZ3VyaW5nIG91dCB0aGUgbW9kZSwgd2UnbGwganVzdCBzZXQgdGhlIGF0dHJpYnV0ZSB0aHJvdWdoIHRoZSBKYXZhc2NyaXB0XG4gICAgICAgICAgICAvLyBwcm9wZXJ0eSBmb3IgSUUgPD0gOC5cbiAgICAgICAgICAgIGlmIChrby51dGlscy5pZVZlcnNpb24gPD0gOCAmJiBhdHRyTmFtZSBpbiBhdHRySHRtbFRvSmF2YXNjcmlwdE1hcCkge1xuICAgICAgICAgICAgICAgIGF0dHJOYW1lID0gYXR0ckh0bWxUb0phdmFzY3JpcHRNYXBbYXR0ck5hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh0b1JlbW92ZSlcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0ck5hbWUpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFthdHRyTmFtZV0gPSBhdHRyVmFsdWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0b1JlbW92ZSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJOYW1lLCBhdHRyVmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFRyZWF0IFwibmFtZVwiIHNwZWNpYWxseSAtIGFsdGhvdWdoIHlvdSBjYW4gdGhpbmsgb2YgaXQgYXMgYW4gYXR0cmlidXRlLCBpdCBhbHNvIG5lZWRzXG4gICAgICAgICAgICAvLyBzcGVjaWFsIGhhbmRsaW5nIG9uIG9sZGVyIHZlcnNpb25zIG9mIElFIChodHRwczovL2dpdGh1Yi5jb20vU3RldmVTYW5kZXJzb24va25vY2tvdXQvcHVsbC8zMzMpXG4gICAgICAgICAgICAvLyBEZWxpYmVyYXRlbHkgYmVpbmcgY2FzZS1zZW5zaXRpdmUgaGVyZSBiZWNhdXNlIFhIVE1MIHdvdWxkIHJlZ2FyZCBcIk5hbWVcIiBhcyBhIGRpZmZlcmVudCB0aGluZ1xuICAgICAgICAgICAgLy8gZW50aXJlbHksIGFuZCB0aGVyZSdzIG5vIHN0cm9uZyByZWFzb24gdG8gYWxsb3cgZm9yIHN1Y2ggY2FzaW5nIGluIEhUTUwuXG4gICAgICAgICAgICBpZiAoYXR0ck5hbWUgPT09IFwibmFtZVwiKSB7XG4gICAgICAgICAgICAgICAga28udXRpbHMuc2V0RWxlbWVudE5hbWUoZWxlbWVudCwgdG9SZW1vdmUgPyBcIlwiIDogYXR0clZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuKGZ1bmN0aW9uKCkge1xuXG5rby5iaW5kaW5nSGFuZGxlcnNbJ2NoZWNrZWQnXSA9IHtcbiAgICAnYWZ0ZXInOiBbJ3ZhbHVlJywgJ2F0dHInXSxcbiAgICAnaW5pdCc6IGZ1bmN0aW9uIChlbGVtZW50LCB2YWx1ZUFjY2Vzc29yLCBhbGxCaW5kaW5ncykge1xuICAgICAgICB2YXIgY2hlY2tlZFZhbHVlID0ga28ucHVyZUNvbXB1dGVkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgLy8gVHJlYXQgXCJ2YWx1ZVwiIGxpa2UgXCJjaGVja2VkVmFsdWVcIiB3aGVuIGl0IGlzIGluY2x1ZGVkIHdpdGggXCJjaGVja2VkXCIgYmluZGluZ1xuICAgICAgICAgICAgaWYgKGFsbEJpbmRpbmdzWydoYXMnXSgnY2hlY2tlZFZhbHVlJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShhbGxCaW5kaW5ncy5nZXQoJ2NoZWNrZWRWYWx1ZScpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxsQmluZGluZ3NbJ2hhcyddKCd2YWx1ZScpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUoYWxsQmluZGluZ3MuZ2V0KCd2YWx1ZScpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudmFsdWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZU1vZGVsKCkge1xuICAgICAgICAgICAgLy8gVGhpcyB1cGRhdGVzIHRoZSBtb2RlbCB2YWx1ZSBmcm9tIHRoZSB2aWV3IHZhbHVlLlxuICAgICAgICAgICAgLy8gSXQgcnVucyBpbiByZXNwb25zZSB0byBET00gZXZlbnRzIChjbGljaykgYW5kIGNoYW5nZXMgaW4gY2hlY2tlZFZhbHVlLlxuICAgICAgICAgICAgdmFyIGlzQ2hlY2tlZCA9IGVsZW1lbnQuY2hlY2tlZCxcbiAgICAgICAgICAgICAgICBlbGVtVmFsdWUgPSB1c2VDaGVja2VkVmFsdWUgPyBjaGVja2VkVmFsdWUoKSA6IGlzQ2hlY2tlZDtcblxuICAgICAgICAgICAgLy8gV2hlbiB3ZSdyZSBmaXJzdCBzZXR0aW5nIHVwIHRoaXMgY29tcHV0ZWQsIGRvbid0IGNoYW5nZSBhbnkgbW9kZWwgc3RhdGUuXG4gICAgICAgICAgICBpZiAoa28uY29tcHV0ZWRDb250ZXh0LmlzSW5pdGlhbCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBXZSBjYW4gaWdub3JlIHVuY2hlY2tlZCByYWRpbyBidXR0b25zLCBiZWNhdXNlIHNvbWUgb3RoZXIgcmFkaW9cbiAgICAgICAgICAgIC8vIGJ1dHRvbiB3aWxsIGJlIGdldHRpbmcgY2hlY2tlZCwgYW5kIHRoYXQgb25lIGNhbiB0YWtlIGNhcmUgb2YgdXBkYXRpbmcgc3RhdGUuXG4gICAgICAgICAgICBpZiAoaXNSYWRpbyAmJiAhaXNDaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbW9kZWxWYWx1ZSA9IGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24uaWdub3JlKHZhbHVlQWNjZXNzb3IpO1xuICAgICAgICAgICAgaWYgKHZhbHVlSXNBcnJheSkge1xuICAgICAgICAgICAgICAgIHZhciB3cml0YWJsZVZhbHVlID0gcmF3VmFsdWVJc05vbkFycmF5T2JzZXJ2YWJsZSA/IG1vZGVsVmFsdWUucGVlaygpIDogbW9kZWxWYWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAob2xkRWxlbVZhbHVlICE9PSBlbGVtVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSdyZSByZXNwb25kaW5nIHRvIHRoZSBjaGVja2VkVmFsdWUgY2hhbmdpbmcsIGFuZCB0aGUgZWxlbWVudCBpc1xuICAgICAgICAgICAgICAgICAgICAvLyBjdXJyZW50bHkgY2hlY2tlZCwgcmVwbGFjZSB0aGUgb2xkIGVsZW0gdmFsdWUgd2l0aCB0aGUgbmV3IGVsZW0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIG1vZGVsIGFycmF5LlxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrby51dGlscy5hZGRPclJlbW92ZUl0ZW0od3JpdGFibGVWYWx1ZSwgZWxlbVZhbHVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtvLnV0aWxzLmFkZE9yUmVtb3ZlSXRlbSh3cml0YWJsZVZhbHVlLCBvbGRFbGVtVmFsdWUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIG9sZEVsZW1WYWx1ZSA9IGVsZW1WYWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHdlJ3JlIHJlc3BvbmRpbmcgdG8gdGhlIHVzZXIgaGF2aW5nIGNoZWNrZWQvdW5jaGVja2VkIGEgY2hlY2tib3gsXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZC9yZW1vdmUgdGhlIGVsZW1lbnQgdmFsdWUgdG8gdGhlIG1vZGVsIGFycmF5LlxuICAgICAgICAgICAgICAgICAgICBrby51dGlscy5hZGRPclJlbW92ZUl0ZW0od3JpdGFibGVWYWx1ZSwgZWxlbVZhbHVlLCBpc0NoZWNrZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmF3VmFsdWVJc05vbkFycmF5T2JzZXJ2YWJsZSAmJiBrby5pc1dyaXRlYWJsZU9ic2VydmFibGUobW9kZWxWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxWYWx1ZSh3cml0YWJsZVZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGtvLmV4cHJlc3Npb25SZXdyaXRpbmcud3JpdGVWYWx1ZVRvUHJvcGVydHkobW9kZWxWYWx1ZSwgYWxsQmluZGluZ3MsICdjaGVja2VkJywgZWxlbVZhbHVlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVWaWV3KCkge1xuICAgICAgICAgICAgLy8gVGhpcyB1cGRhdGVzIHRoZSB2aWV3IHZhbHVlIGZyb20gdGhlIG1vZGVsIHZhbHVlLlxuICAgICAgICAgICAgLy8gSXQgcnVucyBpbiByZXNwb25zZSB0byBjaGFuZ2VzIGluIHRoZSBib3VuZCAoY2hlY2tlZCkgdmFsdWUuXG4gICAgICAgICAgICB2YXIgbW9kZWxWYWx1ZSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUodmFsdWVBY2Nlc3NvcigpKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlSXNBcnJheSkge1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gYSBjaGVja2JveCBpcyBib3VuZCB0byBhbiBhcnJheSwgYmVpbmcgY2hlY2tlZCByZXByZXNlbnRzIGl0cyB2YWx1ZSBiZWluZyBwcmVzZW50IGluIHRoYXQgYXJyYXlcbiAgICAgICAgICAgICAgICBlbGVtZW50LmNoZWNrZWQgPSBrby51dGlscy5hcnJheUluZGV4T2YobW9kZWxWYWx1ZSwgY2hlY2tlZFZhbHVlKCkpID49IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQ2hlY2tib3gpIHtcbiAgICAgICAgICAgICAgICAvLyBXaGVuIGEgY2hlY2tib3ggaXMgYm91bmQgdG8gYW55IG90aGVyIHZhbHVlIChub3QgYW4gYXJyYXkpLCBiZWluZyBjaGVja2VkIHJlcHJlc2VudHMgdGhlIHZhbHVlIGJlaW5nIHRydWVpc2hcbiAgICAgICAgICAgICAgICBlbGVtZW50LmNoZWNrZWQgPSBtb2RlbFZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBGb3IgcmFkaW8gYnV0dG9ucywgYmVpbmcgY2hlY2tlZCBtZWFucyB0aGF0IHRoZSByYWRpbyBidXR0b24ncyB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgbW9kZWwgdmFsdWVcbiAgICAgICAgICAgICAgICBlbGVtZW50LmNoZWNrZWQgPSAoY2hlY2tlZFZhbHVlKCkgPT09IG1vZGVsVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBpc0NoZWNrYm94ID0gZWxlbWVudC50eXBlID09IFwiY2hlY2tib3hcIixcbiAgICAgICAgICAgIGlzUmFkaW8gPSBlbGVtZW50LnR5cGUgPT0gXCJyYWRpb1wiO1xuXG4gICAgICAgIC8vIE9ubHkgYmluZCB0byBjaGVjayBib3hlcyBhbmQgcmFkaW8gYnV0dG9uc1xuICAgICAgICBpZiAoIWlzQ2hlY2tib3ggJiYgIWlzUmFkaW8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByYXdWYWx1ZSA9IHZhbHVlQWNjZXNzb3IoKSxcbiAgICAgICAgICAgIHZhbHVlSXNBcnJheSA9IGlzQ2hlY2tib3ggJiYgKGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUocmF3VmFsdWUpIGluc3RhbmNlb2YgQXJyYXkpLFxuICAgICAgICAgICAgcmF3VmFsdWVJc05vbkFycmF5T2JzZXJ2YWJsZSA9ICEodmFsdWVJc0FycmF5ICYmIHJhd1ZhbHVlLnB1c2ggJiYgcmF3VmFsdWUuc3BsaWNlKSxcbiAgICAgICAgICAgIG9sZEVsZW1WYWx1ZSA9IHZhbHVlSXNBcnJheSA/IGNoZWNrZWRWYWx1ZSgpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdXNlQ2hlY2tlZFZhbHVlID0gaXNSYWRpbyB8fCB2YWx1ZUlzQXJyYXk7XG5cbiAgICAgICAgLy8gSUUgNiB3b24ndCBhbGxvdyByYWRpbyBidXR0b25zIHRvIGJlIHNlbGVjdGVkIHVubGVzcyB0aGV5IGhhdmUgYSBuYW1lXG4gICAgICAgIGlmIChpc1JhZGlvICYmICFlbGVtZW50Lm5hbWUpXG4gICAgICAgICAgICBrby5iaW5kaW5nSGFuZGxlcnNbJ3VuaXF1ZU5hbWUnXVsnaW5pdCddKGVsZW1lbnQsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZSB9KTtcblxuICAgICAgICAvLyBTZXQgdXAgdHdvIGNvbXB1dGVkcyB0byB1cGRhdGUgdGhlIGJpbmRpbmc6XG5cbiAgICAgICAgLy8gVGhlIGZpcnN0IHJlc3BvbmRzIHRvIGNoYW5nZXMgaW4gdGhlIGNoZWNrZWRWYWx1ZSB2YWx1ZSBhbmQgdG8gZWxlbWVudCBjbGlja3NcbiAgICAgICAga28uY29tcHV0ZWQodXBkYXRlTW9kZWwsIG51bGwsIHsgZGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkOiBlbGVtZW50IH0pO1xuICAgICAgICBrby51dGlscy5yZWdpc3RlckV2ZW50SGFuZGxlcihlbGVtZW50LCBcImNsaWNrXCIsIHVwZGF0ZU1vZGVsKTtcblxuICAgICAgICAvLyBUaGUgc2Vjb25kIHJlc3BvbmRzIHRvIGNoYW5nZXMgaW4gdGhlIG1vZGVsIHZhbHVlICh0aGUgb25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hlY2tlZCBiaW5kaW5nKVxuICAgICAgICBrby5jb21wdXRlZCh1cGRhdGVWaWV3LCBudWxsLCB7IGRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZDogZWxlbWVudCB9KTtcblxuICAgICAgICByYXdWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG59O1xua28uZXhwcmVzc2lvblJld3JpdGluZy50d29XYXlCaW5kaW5nc1snY2hlY2tlZCddID0gdHJ1ZTtcblxua28uYmluZGluZ0hhbmRsZXJzWydjaGVja2VkVmFsdWUnXSA9IHtcbiAgICAndXBkYXRlJzogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IpIHtcbiAgICAgICAgZWxlbWVudC52YWx1ZSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUodmFsdWVBY2Nlc3NvcigpKTtcbiAgICB9XG59O1xuXG59KSgpO3ZhciBjbGFzc2VzV3JpdHRlbkJ5QmluZGluZ0tleSA9ICdfX2tvX19jc3NWYWx1ZSc7XG5rby5iaW5kaW5nSGFuZGxlcnNbJ2NzcyddID0ge1xuICAgICd1cGRhdGUnOiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsdWVBY2Nlc3Nvcikge1xuICAgICAgICB2YXIgdmFsdWUgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKHZhbHVlQWNjZXNzb3IoKSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAga28udXRpbHMub2JqZWN0Rm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24oY2xhc3NOYW1lLCBzaG91bGRIYXZlQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICBzaG91bGRIYXZlQ2xhc3MgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKHNob3VsZEhhdmVDbGFzcyk7XG4gICAgICAgICAgICAgICAga28udXRpbHMudG9nZ2xlRG9tTm9kZUNzc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSwgc2hvdWxkSGF2ZUNsYXNzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBrby51dGlscy5zdHJpbmdUcmltKFN0cmluZyh2YWx1ZSB8fCAnJykpOyAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgdHJ5IHRvIHN0b3JlIG9yIHNldCBhIG5vbi1zdHJpbmcgdmFsdWVcbiAgICAgICAgICAgIGtvLnV0aWxzLnRvZ2dsZURvbU5vZGVDc3NDbGFzcyhlbGVtZW50LCBlbGVtZW50W2NsYXNzZXNXcml0dGVuQnlCaW5kaW5nS2V5XSwgZmFsc2UpO1xuICAgICAgICAgICAgZWxlbWVudFtjbGFzc2VzV3JpdHRlbkJ5QmluZGluZ0tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGtvLnV0aWxzLnRvZ2dsZURvbU5vZGVDc3NDbGFzcyhlbGVtZW50LCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xua28uYmluZGluZ0hhbmRsZXJzWydlbmFibGUnXSA9IHtcbiAgICAndXBkYXRlJzogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IpIHtcbiAgICAgICAgdmFyIHZhbHVlID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZSh2YWx1ZUFjY2Vzc29yKCkpO1xuICAgICAgICBpZiAodmFsdWUgJiYgZWxlbWVudC5kaXNhYmxlZClcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gICAgICAgIGVsc2UgaWYgKCghdmFsdWUpICYmICghZWxlbWVudC5kaXNhYmxlZCkpXG4gICAgICAgICAgICBlbGVtZW50LmRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnNbJ2Rpc2FibGUnXSA9IHtcbiAgICAndXBkYXRlJzogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IpIHtcbiAgICAgICAga28uYmluZGluZ0hhbmRsZXJzWydlbmFibGUnXVsndXBkYXRlJ10oZWxlbWVudCwgZnVuY3Rpb24oKSB7IHJldHVybiAha28udXRpbHMudW53cmFwT2JzZXJ2YWJsZSh2YWx1ZUFjY2Vzc29yKCkpIH0pO1xuICAgIH1cbn07XG4vLyBGb3IgY2VydGFpbiBjb21tb24gZXZlbnRzIChjdXJyZW50bHkganVzdCAnY2xpY2snKSwgYWxsb3cgYSBzaW1wbGlmaWVkIGRhdGEtYmluZGluZyBzeW50YXhcbi8vIGUuZy4gY2xpY2s6aGFuZGxlciBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBmdWxsLWxlbmd0aCBldmVudDp7Y2xpY2s6aGFuZGxlcn1cbmZ1bmN0aW9uIG1ha2VFdmVudEhhbmRsZXJTaG9ydGN1dChldmVudE5hbWUpIHtcbiAgICBrby5iaW5kaW5nSGFuZGxlcnNbZXZlbnROYW1lXSA9IHtcbiAgICAgICAgJ2luaXQnOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZUFjY2Vzc29yLCBhbGxCaW5kaW5ncywgdmlld01vZGVsLCBiaW5kaW5nQ29udGV4dCkge1xuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlQWNjZXNzb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgICAgICAgICAgIHJlc3VsdFtldmVudE5hbWVdID0gdmFsdWVBY2Nlc3NvcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGtvLmJpbmRpbmdIYW5kbGVyc1snZXZlbnQnXVsnaW5pdCddLmNhbGwodGhpcywgZWxlbWVudCwgbmV3VmFsdWVBY2Nlc3NvciwgYWxsQmluZGluZ3MsIHZpZXdNb2RlbCwgYmluZGluZ0NvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5rby5iaW5kaW5nSGFuZGxlcnNbJ2V2ZW50J10gPSB7XG4gICAgJ2luaXQnIDogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IsIGFsbEJpbmRpbmdzLCB2aWV3TW9kZWwsIGJpbmRpbmdDb250ZXh0KSB7XG4gICAgICAgIHZhciBldmVudHNUb0hhbmRsZSA9IHZhbHVlQWNjZXNzb3IoKSB8fCB7fTtcbiAgICAgICAga28udXRpbHMub2JqZWN0Rm9yRWFjaChldmVudHNUb0hhbmRsZSwgZnVuY3Rpb24oZXZlbnROYW1lKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV2ZW50TmFtZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAga28udXRpbHMucmVnaXN0ZXJFdmVudEhhbmRsZXIoZWxlbWVudCwgZXZlbnROYW1lLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZXJSZXR1cm5WYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZXJGdW5jdGlvbiA9IHZhbHVlQWNjZXNzb3IoKVtldmVudE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhbmRsZXJGdW5jdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGFrZSBhbGwgdGhlIGV2ZW50IGFyZ3MsIGFuZCBwcmVmaXggd2l0aCB0aGUgdmlld21vZGVsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJnc0ZvckhhbmRsZXIgPSBrby51dGlscy5tYWtlQXJyYXkoYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlbCA9IGJpbmRpbmdDb250ZXh0WyckZGF0YSddO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0ZvckhhbmRsZXIudW5zaGlmdCh2aWV3TW9kZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlclJldHVyblZhbHVlID0gaGFuZGxlckZ1bmN0aW9uLmFwcGx5KHZpZXdNb2RlbCwgYXJnc0ZvckhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJSZXR1cm5WYWx1ZSAhPT0gdHJ1ZSkgeyAvLyBOb3JtYWxseSB3ZSB3YW50IHRvIHByZXZlbnQgZGVmYXVsdCBhY3Rpb24uIERldmVsb3BlciBjYW4gb3ZlcnJpZGUgdGhpcyBiZSBleHBsaWNpdGx5IHJldHVybmluZyB0cnVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgYnViYmxlID0gYWxsQmluZGluZ3MuZ2V0KGV2ZW50TmFtZSArICdCdWJibGUnKSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYnViYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuLy8gXCJmb3JlYWNoOiBzb21lRXhwcmVzc2lvblwiIGlzIGVxdWl2YWxlbnQgdG8gXCJ0ZW1wbGF0ZTogeyBmb3JlYWNoOiBzb21lRXhwcmVzc2lvbiB9XCJcbi8vIFwiZm9yZWFjaDogeyBkYXRhOiBzb21lRXhwcmVzc2lvbiwgYWZ0ZXJBZGQ6IG15Zm4gfVwiIGlzIGVxdWl2YWxlbnQgdG8gXCJ0ZW1wbGF0ZTogeyBmb3JlYWNoOiBzb21lRXhwcmVzc2lvbiwgYWZ0ZXJBZGQ6IG15Zm4gfVwiXG5rby5iaW5kaW5nSGFuZGxlcnNbJ2ZvcmVhY2gnXSA9IHtcbiAgICBtYWtlVGVtcGxhdGVWYWx1ZUFjY2Vzc29yOiBmdW5jdGlvbih2YWx1ZUFjY2Vzc29yKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBtb2RlbFZhbHVlID0gdmFsdWVBY2Nlc3NvcigpLFxuICAgICAgICAgICAgICAgIHVud3JhcHBlZFZhbHVlID0ga28udXRpbHMucGVla09ic2VydmFibGUobW9kZWxWYWx1ZSk7ICAgIC8vIFVud3JhcCB3aXRob3V0IHNldHRpbmcgYSBkZXBlbmRlbmN5IGhlcmVcblxuICAgICAgICAgICAgLy8gSWYgdW53cmFwcGVkVmFsdWUgaXMgdGhlIGFycmF5LCBwYXNzIGluIHRoZSB3cmFwcGVkIHZhbHVlIG9uIGl0cyBvd25cbiAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSB3aWxsIGJlIHVud3JhcHBlZCBhbmQgdHJhY2tlZCB3aXRoaW4gdGhlIHRlbXBsYXRlIGJpbmRpbmdcbiAgICAgICAgICAgIC8vIChTZWUgaHR0cHM6Ly9naXRodWIuY29tL1N0ZXZlU2FuZGVyc29uL2tub2Nrb3V0L2lzc3Vlcy81MjMpXG4gICAgICAgICAgICBpZiAoKCF1bndyYXBwZWRWYWx1ZSkgfHwgdHlwZW9mIHVud3JhcHBlZFZhbHVlLmxlbmd0aCA9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB7ICdmb3JlYWNoJzogbW9kZWxWYWx1ZSwgJ3RlbXBsYXRlRW5naW5lJzoga28ubmF0aXZlVGVtcGxhdGVFbmdpbmUuaW5zdGFuY2UgfTtcblxuICAgICAgICAgICAgLy8gSWYgdW53cmFwcGVkVmFsdWUuZGF0YSBpcyB0aGUgYXJyYXksIHByZXNlcnZlIGFsbCByZWxldmFudCBvcHRpb25zIGFuZCB1bndyYXAgYWdhaW4gdmFsdWUgc28gd2UgZ2V0IHVwZGF0ZXNcbiAgICAgICAgICAgIGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUobW9kZWxWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICdmb3JlYWNoJzogdW53cmFwcGVkVmFsdWVbJ2RhdGEnXSxcbiAgICAgICAgICAgICAgICAnYXMnOiB1bndyYXBwZWRWYWx1ZVsnYXMnXSxcbiAgICAgICAgICAgICAgICAnaW5jbHVkZURlc3Ryb3llZCc6IHVud3JhcHBlZFZhbHVlWydpbmNsdWRlRGVzdHJveWVkJ10sXG4gICAgICAgICAgICAgICAgJ2FmdGVyQWRkJzogdW53cmFwcGVkVmFsdWVbJ2FmdGVyQWRkJ10sXG4gICAgICAgICAgICAgICAgJ2JlZm9yZVJlbW92ZSc6IHVud3JhcHBlZFZhbHVlWydiZWZvcmVSZW1vdmUnXSxcbiAgICAgICAgICAgICAgICAnYWZ0ZXJSZW5kZXInOiB1bndyYXBwZWRWYWx1ZVsnYWZ0ZXJSZW5kZXInXSxcbiAgICAgICAgICAgICAgICAnYmVmb3JlTW92ZSc6IHVud3JhcHBlZFZhbHVlWydiZWZvcmVNb3ZlJ10sXG4gICAgICAgICAgICAgICAgJ2FmdGVyTW92ZSc6IHVud3JhcHBlZFZhbHVlWydhZnRlck1vdmUnXSxcbiAgICAgICAgICAgICAgICAndGVtcGxhdGVFbmdpbmUnOiBrby5uYXRpdmVUZW1wbGF0ZUVuZ2luZS5pbnN0YW5jZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9LFxuICAgICdpbml0JzogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVBY2Nlc3NvciwgYWxsQmluZGluZ3MsIHZpZXdNb2RlbCwgYmluZGluZ0NvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGtvLmJpbmRpbmdIYW5kbGVyc1sndGVtcGxhdGUnXVsnaW5pdCddKGVsZW1lbnQsIGtvLmJpbmRpbmdIYW5kbGVyc1snZm9yZWFjaCddLm1ha2VUZW1wbGF0ZVZhbHVlQWNjZXNzb3IodmFsdWVBY2Nlc3NvcikpO1xuICAgIH0sXG4gICAgJ3VwZGF0ZSc6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IsIGFsbEJpbmRpbmdzLCB2aWV3TW9kZWwsIGJpbmRpbmdDb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBrby5iaW5kaW5nSGFuZGxlcnNbJ3RlbXBsYXRlJ11bJ3VwZGF0ZSddKGVsZW1lbnQsIGtvLmJpbmRpbmdIYW5kbGVyc1snZm9yZWFjaCddLm1ha2VUZW1wbGF0ZVZhbHVlQWNjZXNzb3IodmFsdWVBY2Nlc3NvciksIGFsbEJpbmRpbmdzLCB2aWV3TW9kZWwsIGJpbmRpbmdDb250ZXh0KTtcbiAgICB9XG59O1xua28uZXhwcmVzc2lvblJld3JpdGluZy5iaW5kaW5nUmV3cml0ZVZhbGlkYXRvcnNbJ2ZvcmVhY2gnXSA9IGZhbHNlOyAvLyBDYW4ndCByZXdyaXRlIGNvbnRyb2wgZmxvdyBiaW5kaW5nc1xua28udmlydHVhbEVsZW1lbnRzLmFsbG93ZWRCaW5kaW5nc1snZm9yZWFjaCddID0gdHJ1ZTtcbnZhciBoYXNmb2N1c1VwZGF0aW5nUHJvcGVydHkgPSAnX19rb19oYXNmb2N1c1VwZGF0aW5nJztcbnZhciBoYXNmb2N1c0xhc3RWYWx1ZSA9ICdfX2tvX2hhc2ZvY3VzTGFzdFZhbHVlJztcbmtvLmJpbmRpbmdIYW5kbGVyc1snaGFzZm9jdXMnXSA9IHtcbiAgICAnaW5pdCc6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IsIGFsbEJpbmRpbmdzKSB7XG4gICAgICAgIHZhciBoYW5kbGVFbGVtZW50Rm9jdXNDaGFuZ2UgPSBmdW5jdGlvbihpc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgIC8vIFdoZXJlIHBvc3NpYmxlLCBpZ25vcmUgd2hpY2ggZXZlbnQgd2FzIHJhaXNlZCBhbmQgZGV0ZXJtaW5lIGZvY3VzIHN0YXRlIHVzaW5nIGFjdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAvLyBhcyB0aGlzIGF2b2lkcyBwaGFudG9tIGZvY3VzL2JsdXIgZXZlbnRzIHJhaXNlZCB3aGVuIGNoYW5naW5nIHRhYnMgaW4gbW9kZXJuIGJyb3dzZXJzLlxuICAgICAgICAgICAgLy8gSG93ZXZlciwgbm90IGFsbCBLTy10YXJnZXRlZCBicm93c2VycyAoRmlyZWZveCAyKSBzdXBwb3J0IGFjdGl2ZUVsZW1lbnQuIEZvciB0aG9zZSBicm93c2VycyxcbiAgICAgICAgICAgIC8vIHByZXZlbnQgYSBsb3NzIG9mIGZvY3VzIHdoZW4gY2hhbmdpbmcgdGFicy93aW5kb3dzIGJ5IHNldHRpbmcgYSBmbGFnIHRoYXQgcHJldmVudHMgaGFzZm9jdXNcbiAgICAgICAgICAgIC8vIGZyb20gY2FsbGluZyAnYmx1cigpJyBvbiB0aGUgZWxlbWVudCB3aGVuIGl0IGxvc2VzIGZvY3VzLlxuICAgICAgICAgICAgLy8gRGlzY3Vzc2lvbiBhdCBodHRwczovL2dpdGh1Yi5jb20vU3RldmVTYW5kZXJzb24va25vY2tvdXQvcHVsbC8zNTJcbiAgICAgICAgICAgIGVsZW1lbnRbaGFzZm9jdXNVcGRhdGluZ1Byb3BlcnR5XSA9IHRydWU7XG4gICAgICAgICAgICB2YXIgb3duZXJEb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICBpZiAoXCJhY3RpdmVFbGVtZW50XCIgaW4gb3duZXJEb2MpIHtcbiAgICAgICAgICAgICAgICB2YXIgYWN0aXZlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9IG93bmVyRG9jLmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElFOSB0aHJvd3MgaWYgeW91IGFjY2VzcyBhY3RpdmVFbGVtZW50IGR1cmluZyBwYWdlIGxvYWQgKHNlZSBpc3N1ZSAjNzAzKVxuICAgICAgICAgICAgICAgICAgICBhY3RpdmUgPSBvd25lckRvYy5ib2R5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpc0ZvY3VzZWQgPSAoYWN0aXZlID09PSBlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBtb2RlbFZhbHVlID0gdmFsdWVBY2Nlc3NvcigpO1xuICAgICAgICAgICAga28uZXhwcmVzc2lvblJld3JpdGluZy53cml0ZVZhbHVlVG9Qcm9wZXJ0eShtb2RlbFZhbHVlLCBhbGxCaW5kaW5ncywgJ2hhc2ZvY3VzJywgaXNGb2N1c2VkLCB0cnVlKTtcblxuICAgICAgICAgICAgLy9jYWNoZSB0aGUgbGF0ZXN0IHZhbHVlLCBzbyB3ZSBjYW4gYXZvaWQgdW5uZWNlc3NhcmlseSBjYWxsaW5nIGZvY3VzL2JsdXIgaW4gdGhlIHVwZGF0ZSBmdW5jdGlvblxuICAgICAgICAgICAgZWxlbWVudFtoYXNmb2N1c0xhc3RWYWx1ZV0gPSBpc0ZvY3VzZWQ7XG4gICAgICAgICAgICBlbGVtZW50W2hhc2ZvY3VzVXBkYXRpbmdQcm9wZXJ0eV0gPSBmYWxzZTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGhhbmRsZUVsZW1lbnRGb2N1c0luID0gaGFuZGxlRWxlbWVudEZvY3VzQ2hhbmdlLmJpbmQobnVsbCwgdHJ1ZSk7XG4gICAgICAgIHZhciBoYW5kbGVFbGVtZW50Rm9jdXNPdXQgPSBoYW5kbGVFbGVtZW50Rm9jdXNDaGFuZ2UuYmluZChudWxsLCBmYWxzZSk7XG5cbiAgICAgICAga28udXRpbHMucmVnaXN0ZXJFdmVudEhhbmRsZXIoZWxlbWVudCwgXCJmb2N1c1wiLCBoYW5kbGVFbGVtZW50Rm9jdXNJbik7XG4gICAgICAgIGtvLnV0aWxzLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGVsZW1lbnQsIFwiZm9jdXNpblwiLCBoYW5kbGVFbGVtZW50Rm9jdXNJbik7IC8vIEZvciBJRVxuICAgICAgICBrby51dGlscy5yZWdpc3RlckV2ZW50SGFuZGxlcihlbGVtZW50LCBcImJsdXJcIiwgIGhhbmRsZUVsZW1lbnRGb2N1c091dCk7XG4gICAgICAgIGtvLnV0aWxzLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGVsZW1lbnQsIFwiZm9jdXNvdXRcIiwgIGhhbmRsZUVsZW1lbnRGb2N1c091dCk7IC8vIEZvciBJRVxuICAgIH0sXG4gICAgJ3VwZGF0ZSc6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gISFrby51dGlscy51bndyYXBPYnNlcnZhYmxlKHZhbHVlQWNjZXNzb3IoKSk7XG5cbiAgICAgICAgaWYgKCFlbGVtZW50W2hhc2ZvY3VzVXBkYXRpbmdQcm9wZXJ0eV0gJiYgZWxlbWVudFtoYXNmb2N1c0xhc3RWYWx1ZV0gIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZSA/IGVsZW1lbnQuZm9jdXMoKSA6IGVsZW1lbnQuYmx1cigpO1xuXG4gICAgICAgICAgICAvLyBJbiBJRSwgdGhlIGJsdXIgbWV0aG9kIGRvZXNuJ3QgYWx3YXlzIGNhdXNlIHRoZSBlbGVtZW50IHRvIGxvc2UgZm9jdXMgKGZvciBleGFtcGxlLCBpZiB0aGUgd2luZG93IGlzIG5vdCBpbiBmb2N1cykuXG4gICAgICAgICAgICAvLyBTZXR0aW5nIGZvY3VzIHRvIHRoZSBib2R5IGVsZW1lbnQgZG9lcyBzZWVtIHRvIGJlIHJlbGlhYmxlIGluIElFLCBidXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB3ZSBrbm93IHRoYXQgdGhlIGN1cnJlbnRcbiAgICAgICAgICAgIC8vIGVsZW1lbnQgd2FzIGZvY3VzZWQgYWxyZWFkeS5cbiAgICAgICAgICAgIGlmICghdmFsdWUgJiYgZWxlbWVudFtoYXNmb2N1c0xhc3RWYWx1ZV0pIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBGb3IgSUUsIHdoaWNoIGRvZXNuJ3QgcmVsaWFibHkgZmlyZSBcImZvY3VzXCIgb3IgXCJibHVyXCIgZXZlbnRzIHN5bmNocm9ub3VzbHlcbiAgICAgICAgICAgIGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24uaWdub3JlKGtvLnV0aWxzLnRyaWdnZXJFdmVudCwgbnVsbCwgW2VsZW1lbnQsIHZhbHVlID8gXCJmb2N1c2luXCIgOiBcImZvY3Vzb3V0XCJdKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5rby5leHByZXNzaW9uUmV3cml0aW5nLnR3b1dheUJpbmRpbmdzWydoYXNmb2N1cyddID0gdHJ1ZTtcblxua28uYmluZGluZ0hhbmRsZXJzWydoYXNGb2N1cyddID0ga28uYmluZGluZ0hhbmRsZXJzWydoYXNmb2N1cyddOyAvLyBNYWtlIFwiaGFzRm9jdXNcIiBhbiBhbGlhc1xua28uZXhwcmVzc2lvblJld3JpdGluZy50d29XYXlCaW5kaW5nc1snaGFzRm9jdXMnXSA9IHRydWU7XG5rby5iaW5kaW5nSGFuZGxlcnNbJ2h0bWwnXSA9IHtcbiAgICAnaW5pdCc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBQcmV2ZW50IGJpbmRpbmcgb24gdGhlIGR5bmFtaWNhbGx5LWluamVjdGVkIEhUTUwgKGFzIGRldmVsb3BlcnMgYXJlIHVubGlrZWx5IHRvIGV4cGVjdCB0aGF0LCBhbmQgaXQgaGFzIHNlY3VyaXR5IGltcGxpY2F0aW9ucylcbiAgICAgICAgcmV0dXJuIHsgJ2NvbnRyb2xzRGVzY2VuZGFudEJpbmRpbmdzJzogdHJ1ZSB9O1xuICAgIH0sXG4gICAgJ3VwZGF0ZSc6IGZ1bmN0aW9uIChlbGVtZW50LCB2YWx1ZUFjY2Vzc29yKSB7XG4gICAgICAgIC8vIHNldEh0bWwgd2lsbCB1bndyYXAgdGhlIHZhbHVlIGlmIG5lZWRlZFxuICAgICAgICBrby51dGlscy5zZXRIdG1sKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IoKSk7XG4gICAgfVxufTtcbi8vIE1ha2VzIGEgYmluZGluZyBsaWtlIHdpdGggb3IgaWZcbmZ1bmN0aW9uIG1ha2VXaXRoSWZCaW5kaW5nKGJpbmRpbmdLZXksIGlzV2l0aCwgaXNOb3QsIG1ha2VDb250ZXh0Q2FsbGJhY2spIHtcbiAgICBrby5iaW5kaW5nSGFuZGxlcnNbYmluZGluZ0tleV0gPSB7XG4gICAgICAgICdpbml0JzogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVBY2Nlc3NvciwgYWxsQmluZGluZ3MsIHZpZXdNb2RlbCwgYmluZGluZ0NvbnRleHQpIHtcbiAgICAgICAgICAgIHZhciBkaWREaXNwbGF5T25MYXN0VXBkYXRlLFxuICAgICAgICAgICAgICAgIHNhdmVkTm9kZXM7XG4gICAgICAgICAgICBrby5jb21wdXRlZChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YVZhbHVlID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZSh2YWx1ZUFjY2Vzc29yKCkpLFxuICAgICAgICAgICAgICAgICAgICBzaG91bGREaXNwbGF5ID0gIWlzTm90ICE9PSAhZGF0YVZhbHVlLCAvLyBlcXVpdmFsZW50IHRvIGlzTm90ID8gIWRhdGFWYWx1ZSA6ICEhZGF0YVZhbHVlXG4gICAgICAgICAgICAgICAgICAgIGlzRmlyc3RSZW5kZXIgPSAhc2F2ZWROb2RlcyxcbiAgICAgICAgICAgICAgICAgICAgbmVlZHNSZWZyZXNoID0gaXNGaXJzdFJlbmRlciB8fCBpc1dpdGggfHwgKHNob3VsZERpc3BsYXkgIT09IGRpZERpc3BsYXlPbkxhc3RVcGRhdGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5lZWRzUmVmcmVzaCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTYXZlIGEgY29weSBvZiB0aGUgaW5uZXIgbm9kZXMgb24gdGhlIGluaXRpYWwgdXBkYXRlLCBidXQgb25seSBpZiB3ZSBoYXZlIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRmlyc3RSZW5kZXIgJiYga28uY29tcHV0ZWRDb250ZXh0LmdldERlcGVuZGVuY2llc0NvdW50KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkTm9kZXMgPSBrby51dGlscy5jbG9uZU5vZGVzKGtvLnZpcnR1YWxFbGVtZW50cy5jaGlsZE5vZGVzKGVsZW1lbnQpLCB0cnVlIC8qIHNob3VsZENsZWFuTm9kZXMgKi8pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZERpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNGaXJzdFJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtvLnZpcnR1YWxFbGVtZW50cy5zZXREb21Ob2RlQ2hpbGRyZW4oZWxlbWVudCwga28udXRpbHMuY2xvbmVOb2RlcyhzYXZlZE5vZGVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBrby5hcHBseUJpbmRpbmdzVG9EZXNjZW5kYW50cyhtYWtlQ29udGV4dENhbGxiYWNrID8gbWFrZUNvbnRleHRDYWxsYmFjayhiaW5kaW5nQ29udGV4dCwgZGF0YVZhbHVlKSA6IGJpbmRpbmdDb250ZXh0LCBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtvLnZpcnR1YWxFbGVtZW50cy5lbXB0eU5vZGUoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBkaWREaXNwbGF5T25MYXN0VXBkYXRlID0gc2hvdWxkRGlzcGxheTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBudWxsLCB7IGRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZDogZWxlbWVudCB9KTtcbiAgICAgICAgICAgIHJldHVybiB7ICdjb250cm9sc0Rlc2NlbmRhbnRCaW5kaW5ncyc6IHRydWUgfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAga28uZXhwcmVzc2lvblJld3JpdGluZy5iaW5kaW5nUmV3cml0ZVZhbGlkYXRvcnNbYmluZGluZ0tleV0gPSBmYWxzZTsgLy8gQ2FuJ3QgcmV3cml0ZSBjb250cm9sIGZsb3cgYmluZGluZ3NcbiAgICBrby52aXJ0dWFsRWxlbWVudHMuYWxsb3dlZEJpbmRpbmdzW2JpbmRpbmdLZXldID0gdHJ1ZTtcbn1cblxuLy8gQ29uc3RydWN0IHRoZSBhY3R1YWwgYmluZGluZyBoYW5kbGVyc1xubWFrZVdpdGhJZkJpbmRpbmcoJ2lmJyk7XG5tYWtlV2l0aElmQmluZGluZygnaWZub3QnLCBmYWxzZSAvKiBpc1dpdGggKi8sIHRydWUgLyogaXNOb3QgKi8pO1xubWFrZVdpdGhJZkJpbmRpbmcoJ3dpdGgnLCB0cnVlIC8qIGlzV2l0aCAqLywgZmFsc2UgLyogaXNOb3QgKi8sXG4gICAgZnVuY3Rpb24oYmluZGluZ0NvbnRleHQsIGRhdGFWYWx1ZSkge1xuICAgICAgICByZXR1cm4gYmluZGluZ0NvbnRleHRbJ2NyZWF0ZUNoaWxkQ29udGV4dCddKGRhdGFWYWx1ZSk7XG4gICAgfVxuKTtcbnZhciBjYXB0aW9uUGxhY2Vob2xkZXIgPSB7fTtcbmtvLmJpbmRpbmdIYW5kbGVyc1snb3B0aW9ucyddID0ge1xuICAgICdpbml0JzogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICBpZiAoa28udXRpbHMudGFnTmFtZUxvd2VyKGVsZW1lbnQpICE9PSBcInNlbGVjdFwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwib3B0aW9ucyBiaW5kaW5nIGFwcGxpZXMgb25seSB0byBTRUxFQ1QgZWxlbWVudHNcIik7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBleGlzdGluZyA8b3B0aW9uPnMuXG4gICAgICAgIHdoaWxlIChlbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlKDApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5zdXJlcyB0aGF0IHRoZSBiaW5kaW5nIHByb2Nlc3NvciBkb2Vzbid0IHRyeSB0byBiaW5kIHRoZSBvcHRpb25zXG4gICAgICAgIHJldHVybiB7ICdjb250cm9sc0Rlc2NlbmRhbnRCaW5kaW5ncyc6IHRydWUgfTtcbiAgICB9LFxuICAgICd1cGRhdGUnOiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsdWVBY2Nlc3NvciwgYWxsQmluZGluZ3MpIHtcbiAgICAgICAgZnVuY3Rpb24gc2VsZWN0ZWRPcHRpb25zKCkge1xuICAgICAgICAgICAgcmV0dXJuIGtvLnV0aWxzLmFycmF5RmlsdGVyKGVsZW1lbnQub3B0aW9ucywgZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUuc2VsZWN0ZWQ7IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlbGVjdFdhc1ByZXZpb3VzbHlFbXB0eSA9IGVsZW1lbnQubGVuZ3RoID09IDAsXG4gICAgICAgICAgICBtdWx0aXBsZSA9IGVsZW1lbnQubXVsdGlwbGUsXG4gICAgICAgICAgICBwcmV2aW91c1Njcm9sbFRvcCA9ICghc2VsZWN0V2FzUHJldmlvdXNseUVtcHR5ICYmIG11bHRpcGxlKSA/IGVsZW1lbnQuc2Nyb2xsVG9wIDogbnVsbCxcbiAgICAgICAgICAgIHVud3JhcHBlZEFycmF5ID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZSh2YWx1ZUFjY2Vzc29yKCkpLFxuICAgICAgICAgICAgdmFsdWVBbGxvd1Vuc2V0ID0gYWxsQmluZGluZ3MuZ2V0KCd2YWx1ZUFsbG93VW5zZXQnKSAmJiBhbGxCaW5kaW5nc1snaGFzJ10oJ3ZhbHVlJyksXG4gICAgICAgICAgICBpbmNsdWRlRGVzdHJveWVkID0gYWxsQmluZGluZ3MuZ2V0KCdvcHRpb25zSW5jbHVkZURlc3Ryb3llZCcpLFxuICAgICAgICAgICAgYXJyYXlUb0RvbU5vZGVDaGlsZHJlbk9wdGlvbnMgPSB7fSxcbiAgICAgICAgICAgIGNhcHRpb25WYWx1ZSxcbiAgICAgICAgICAgIGZpbHRlcmVkQXJyYXksXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkVmFsdWVzID0gW107XG5cbiAgICAgICAgaWYgKCF2YWx1ZUFsbG93VW5zZXQpIHtcbiAgICAgICAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIHByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMgPSBrby51dGlscy5hcnJheU1hcChzZWxlY3RlZE9wdGlvbnMoKSwga28uc2VsZWN0RXh0ZW5zaW9ucy5yZWFkVmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnNlbGVjdGVkSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMucHVzaChrby5zZWxlY3RFeHRlbnNpb25zLnJlYWRWYWx1ZShlbGVtZW50Lm9wdGlvbnNbZWxlbWVudC5zZWxlY3RlZEluZGV4XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVud3JhcHBlZEFycmF5KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVud3JhcHBlZEFycmF5Lmxlbmd0aCA9PSBcInVuZGVmaW5lZFwiKSAvLyBDb2VyY2Ugc2luZ2xlIHZhbHVlIGludG8gYXJyYXlcbiAgICAgICAgICAgICAgICB1bndyYXBwZWRBcnJheSA9IFt1bndyYXBwZWRBcnJheV07XG5cbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgYW55IGVudHJpZXMgbWFya2VkIGFzIGRlc3Ryb3llZFxuICAgICAgICAgICAgZmlsdGVyZWRBcnJheSA9IGtvLnV0aWxzLmFycmF5RmlsdGVyKHVud3JhcHBlZEFycmF5LCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluY2x1ZGVEZXN0cm95ZWQgfHwgaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwgfHwgIWtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUoaXRlbVsnX2Rlc3Ryb3knXSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gSWYgY2FwdGlvbiBpcyBpbmNsdWRlZCwgYWRkIGl0IHRvIHRoZSBhcnJheVxuICAgICAgICAgICAgaWYgKGFsbEJpbmRpbmdzWydoYXMnXSgnb3B0aW9uc0NhcHRpb24nKSkge1xuICAgICAgICAgICAgICAgIGNhcHRpb25WYWx1ZSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUoYWxsQmluZGluZ3MuZ2V0KCdvcHRpb25zQ2FwdGlvbicpKTtcbiAgICAgICAgICAgICAgICAvLyBJZiBjYXB0aW9uIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLCBkb24ndCBzaG93IGEgY2FwdGlvblxuICAgICAgICAgICAgICAgIGlmIChjYXB0aW9uVmFsdWUgIT09IG51bGwgJiYgY2FwdGlvblZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRBcnJheS51bnNoaWZ0KGNhcHRpb25QbGFjZWhvbGRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgYSBmYWxzeSB2YWx1ZSBpcyBwcm92aWRlZCAoZS5nLiBudWxsKSwgd2UnbGwgc2ltcGx5IGVtcHR5IHRoZSBzZWxlY3QgZWxlbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlUb09iamVjdChvYmplY3QsIHByZWRpY2F0ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgcHJlZGljYXRlVHlwZSA9IHR5cGVvZiBwcmVkaWNhdGU7XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlVHlwZSA9PSBcImZ1bmN0aW9uXCIpICAgIC8vIEdpdmVuIGEgZnVuY3Rpb247IHJ1biBpdCBhZ2FpbnN0IHRoZSBkYXRhIHZhbHVlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZWRpY2F0ZShvYmplY3QpO1xuICAgICAgICAgICAgZWxzZSBpZiAocHJlZGljYXRlVHlwZSA9PSBcInN0cmluZ1wiKSAvLyBHaXZlbiBhIHN0cmluZzsgdHJlYXQgaXQgYXMgYSBwcm9wZXJ0eSBuYW1lIG9uIHRoZSBkYXRhIHZhbHVlXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdFtwcmVkaWNhdGVdO1xuICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2l2ZW4gbm8gb3B0aW9uc1RleHQgYXJnOyB1c2UgdGhlIGRhdGEgdmFsdWUgaXRzZWxmXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNhbiBydW4gYXQgdHdvIGRpZmZlcmVudCB0aW1lczpcbiAgICAgICAgLy8gVGhlIGZpcnN0IGlzIHdoZW4gdGhlIHdob2xlIGFycmF5IGlzIGJlaW5nIHVwZGF0ZWQgZGlyZWN0bHkgZnJvbSB0aGlzIGJpbmRpbmcgaGFuZGxlci5cbiAgICAgICAgLy8gVGhlIHNlY29uZCBpcyB3aGVuIGFuIG9ic2VydmFibGUgdmFsdWUgZm9yIGEgc3BlY2lmaWMgYXJyYXkgZW50cnkgaXMgdXBkYXRlZC5cbiAgICAgICAgLy8gb2xkT3B0aW9ucyB3aWxsIGJlIGVtcHR5IGluIHRoZSBmaXJzdCBjYXNlLCBidXQgd2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUgcHJldmlvdXNseSBnZW5lcmF0ZWQgb3B0aW9uIGluIHRoZSBzZWNvbmQuXG4gICAgICAgIHZhciBpdGVtVXBkYXRlID0gZmFsc2U7XG4gICAgICAgIGZ1bmN0aW9uIG9wdGlvbkZvckFycmF5SXRlbShhcnJheUVudHJ5LCBpbmRleCwgb2xkT3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9sZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNTZWxlY3RlZFZhbHVlcyA9ICF2YWx1ZUFsbG93VW5zZXQgJiYgb2xkT3B0aW9uc1swXS5zZWxlY3RlZCA/IFsga28uc2VsZWN0RXh0ZW5zaW9ucy5yZWFkVmFsdWUob2xkT3B0aW9uc1swXSkgXSA6IFtdO1xuICAgICAgICAgICAgICAgIGl0ZW1VcGRhdGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG9wdGlvbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgICAgICAgaWYgKGFycmF5RW50cnkgPT09IGNhcHRpb25QbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgICAgIGtvLnV0aWxzLnNldFRleHRDb250ZW50KG9wdGlvbiwgYWxsQmluZGluZ3MuZ2V0KCdvcHRpb25zQ2FwdGlvbicpKTtcbiAgICAgICAgICAgICAgICBrby5zZWxlY3RFeHRlbnNpb25zLndyaXRlVmFsdWUob3B0aW9uLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBBcHBseSBhIHZhbHVlIHRvIHRoZSBvcHRpb24gZWxlbWVudFxuICAgICAgICAgICAgICAgIHZhciBvcHRpb25WYWx1ZSA9IGFwcGx5VG9PYmplY3QoYXJyYXlFbnRyeSwgYWxsQmluZGluZ3MuZ2V0KCdvcHRpb25zVmFsdWUnKSwgYXJyYXlFbnRyeSk7XG4gICAgICAgICAgICAgICAga28uc2VsZWN0RXh0ZW5zaW9ucy53cml0ZVZhbHVlKG9wdGlvbiwga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShvcHRpb25WYWx1ZSkpO1xuXG4gICAgICAgICAgICAgICAgLy8gQXBwbHkgc29tZSB0ZXh0IHRvIHRoZSBvcHRpb24gZWxlbWVudFxuICAgICAgICAgICAgICAgIHZhciBvcHRpb25UZXh0ID0gYXBwbHlUb09iamVjdChhcnJheUVudHJ5LCBhbGxCaW5kaW5ncy5nZXQoJ29wdGlvbnNUZXh0JyksIG9wdGlvblZhbHVlKTtcbiAgICAgICAgICAgICAgICBrby51dGlscy5zZXRUZXh0Q29udGVudChvcHRpb24sIG9wdGlvblRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtvcHRpb25dO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQnkgdXNpbmcgYSBiZWZvcmVSZW1vdmUgY2FsbGJhY2ssIHdlIGRlbGF5IHRoZSByZW1vdmFsIHVudGlsIGFmdGVyIG5ldyBpdGVtcyBhcmUgYWRkZWQuIFRoaXMgZml4ZXMgYSBzZWxlY3Rpb25cbiAgICAgICAgLy8gcHJvYmxlbSBpbiBJRTw9OCBhbmQgRmlyZWZveC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9rbm9ja291dC9rbm9ja291dC9pc3N1ZXMvMTIwOFxuICAgICAgICBhcnJheVRvRG9tTm9kZUNoaWxkcmVuT3B0aW9uc1snYmVmb3JlUmVtb3ZlJ10gPVxuICAgICAgICAgICAgZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGQob3B0aW9uKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gc2V0U2VsZWN0aW9uQ2FsbGJhY2soYXJyYXlFbnRyeSwgbmV3T3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKGl0ZW1VcGRhdGUgJiYgdmFsdWVBbGxvd1Vuc2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIG1vZGVsIHZhbHVlIGlzIGF1dGhvcml0YXRpdmUsIHNvIG1ha2Ugc3VyZSBpdHMgdmFsdWUgaXMgdGhlIG9uZSBzZWxlY3RlZFxuICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIGRlcGVuZGVuY3lEZXRlY3Rpb24uaWdub3JlIHNpbmNlIHNldERvbU5vZGVDaGlsZHJlbkZyb21BcnJheU1hcHBpbmcgZG9lcyBzbyBhbHJlYWR5LlxuICAgICAgICAgICAgICAgIGtvLnNlbGVjdEV4dGVuc2lvbnMud3JpdGVWYWx1ZShlbGVtZW50LCBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKGFsbEJpbmRpbmdzLmdldCgndmFsdWUnKSksIHRydWUgLyogYWxsb3dVbnNldCAqLyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gSUU2IGRvZXNuJ3QgbGlrZSB1cyB0byBhc3NpZ24gc2VsZWN0aW9uIHRvIE9QVElPTiBub2RlcyBiZWZvcmUgdGhleSdyZSBhZGRlZCB0byB0aGUgZG9jdW1lbnQuXG4gICAgICAgICAgICAgICAgLy8gVGhhdCdzIHdoeSB3ZSBmaXJzdCBhZGRlZCB0aGVtIHdpdGhvdXQgc2VsZWN0aW9uLiBOb3cgaXQncyB0aW1lIHRvIHNldCB0aGUgc2VsZWN0aW9uLlxuICAgICAgICAgICAgICAgIHZhciBpc1NlbGVjdGVkID0ga28udXRpbHMuYXJyYXlJbmRleE9mKHByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMsIGtvLnNlbGVjdEV4dGVuc2lvbnMucmVhZFZhbHVlKG5ld09wdGlvbnNbMF0pKSA+PSAwO1xuICAgICAgICAgICAgICAgIGtvLnV0aWxzLnNldE9wdGlvbk5vZGVTZWxlY3Rpb25TdGF0ZShuZXdPcHRpb25zWzBdLCBpc1NlbGVjdGVkKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgb3B0aW9uIHdhcyBjaGFuZ2VkIGZyb20gYmVpbmcgc2VsZWN0ZWQgZHVyaW5nIGEgc2luZ2xlLWl0ZW0gdXBkYXRlLCBub3RpZnkgdGhlIGNoYW5nZVxuICAgICAgICAgICAgICAgIGlmIChpdGVtVXBkYXRlICYmICFpc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24uaWdub3JlKGtvLnV0aWxzLnRyaWdnZXJFdmVudCwgbnVsbCwgW2VsZW1lbnQsIFwiY2hhbmdlXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2FsbGJhY2sgPSBzZXRTZWxlY3Rpb25DYWxsYmFjaztcbiAgICAgICAgaWYgKGFsbEJpbmRpbmdzWydoYXMnXSgnb3B0aW9uc0FmdGVyUmVuZGVyJykgJiYgdHlwZW9mIGFsbEJpbmRpbmdzLmdldCgnb3B0aW9uc0FmdGVyUmVuZGVyJykgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uKGFycmF5RW50cnksIG5ld09wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3Rpb25DYWxsYmFjayhhcnJheUVudHJ5LCBuZXdPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBrby5kZXBlbmRlbmN5RGV0ZWN0aW9uLmlnbm9yZShhbGxCaW5kaW5ncy5nZXQoJ29wdGlvbnNBZnRlclJlbmRlcicpLCBudWxsLCBbbmV3T3B0aW9uc1swXSwgYXJyYXlFbnRyeSAhPT0gY2FwdGlvblBsYWNlaG9sZGVyID8gYXJyYXlFbnRyeSA6IHVuZGVmaW5lZF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAga28udXRpbHMuc2V0RG9tTm9kZUNoaWxkcmVuRnJvbUFycmF5TWFwcGluZyhlbGVtZW50LCBmaWx0ZXJlZEFycmF5LCBvcHRpb25Gb3JBcnJheUl0ZW0sIGFycmF5VG9Eb21Ob2RlQ2hpbGRyZW5PcHRpb25zLCBjYWxsYmFjayk7XG5cbiAgICAgICAga28uZGVwZW5kZW5jeURldGVjdGlvbi5pZ25vcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlQWxsb3dVbnNldCkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBtb2RlbCB2YWx1ZSBpcyBhdXRob3JpdGF0aXZlLCBzbyBtYWtlIHN1cmUgaXRzIHZhbHVlIGlzIHRoZSBvbmUgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICBrby5zZWxlY3RFeHRlbnNpb25zLndyaXRlVmFsdWUoZWxlbWVudCwga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShhbGxCaW5kaW5ncy5nZXQoJ3ZhbHVlJykpLCB0cnVlIC8qIGFsbG93VW5zZXQgKi8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHNlbGVjdGlvbiBoYXMgY2hhbmdlZCBhcyBhIHJlc3VsdCBvZiB1cGRhdGluZyB0aGUgb3B0aW9ucyBsaXN0XG4gICAgICAgICAgICAgICAgdmFyIHNlbGVjdGlvbkNoYW5nZWQ7XG4gICAgICAgICAgICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciBhIG11bHRpcGxlLXNlbGVjdCBib3gsIGNvbXBhcmUgdGhlIG5ldyBzZWxlY3Rpb24gY291bnQgdG8gdGhlIHByZXZpb3VzIG9uZVxuICAgICAgICAgICAgICAgICAgICAvLyBCdXQgaWYgbm90aGluZyB3YXMgc2VsZWN0ZWQgYmVmb3JlLCB0aGUgc2VsZWN0aW9uIGNhbid0IGhhdmUgY2hhbmdlZFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gcHJldmlvdXNTZWxlY3RlZFZhbHVlcy5sZW5ndGggJiYgc2VsZWN0ZWRPcHRpb25zKCkubGVuZ3RoIDwgcHJldmlvdXNTZWxlY3RlZFZhbHVlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGEgc2luZ2xlLXNlbGVjdCBib3gsIGNvbXBhcmUgdGhlIGN1cnJlbnQgdmFsdWUgdG8gdGhlIHByZXZpb3VzIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC8vIEJ1dCBpZiBub3RoaW5nIHdhcyBzZWxlY3RlZCBiZWZvcmUgb3Igbm90aGluZyBpcyBzZWxlY3RlZCBub3csIGp1c3QgbG9vayBmb3IgYSBjaGFuZ2UgaW4gc2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSAocHJldmlvdXNTZWxlY3RlZFZhbHVlcy5sZW5ndGggJiYgZWxlbWVudC5zZWxlY3RlZEluZGV4ID49IDApXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChrby5zZWxlY3RFeHRlbnNpb25zLnJlYWRWYWx1ZShlbGVtZW50Lm9wdGlvbnNbZWxlbWVudC5zZWxlY3RlZEluZGV4XSkgIT09IHByZXZpb3VzU2VsZWN0ZWRWYWx1ZXNbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChwcmV2aW91c1NlbGVjdGVkVmFsdWVzLmxlbmd0aCB8fCBlbGVtZW50LnNlbGVjdGVkSW5kZXggPj0gMCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIGNvbnNpc3RlbmN5IGJldHdlZW4gbW9kZWwgdmFsdWUgYW5kIHNlbGVjdGVkIG9wdGlvbi5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZHJvcGRvd24gd2FzIGNoYW5nZWQgc28gdGhhdCBzZWxlY3Rpb24gaXMgbm8gbG9uZ2VyIHRoZSBzYW1lLFxuICAgICAgICAgICAgICAgIC8vIG5vdGlmeSB0aGUgdmFsdWUgb3Igc2VsZWN0ZWRPcHRpb25zIGJpbmRpbmcuXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAga28udXRpbHMudHJpZ2dlckV2ZW50KGVsZW1lbnQsIFwiY2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgSUUgYnVnXG4gICAgICAgIGtvLnV0aWxzLmVuc3VyZVNlbGVjdEVsZW1lbnRJc1JlbmRlcmVkQ29ycmVjdGx5KGVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c1Njcm9sbFRvcCAmJiBNYXRoLmFicyhwcmV2aW91c1Njcm9sbFRvcCAtIGVsZW1lbnQuc2Nyb2xsVG9wKSA+IDIwKVxuICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSBwcmV2aW91c1Njcm9sbFRvcDtcbiAgICB9XG59O1xua28uYmluZGluZ0hhbmRsZXJzWydvcHRpb25zJ10ub3B0aW9uVmFsdWVEb21EYXRhS2V5ID0ga28udXRpbHMuZG9tRGF0YS5uZXh0S2V5KCk7XG5rby5iaW5kaW5nSGFuZGxlcnNbJ3NlbGVjdGVkT3B0aW9ucyddID0ge1xuICAgICdhZnRlcic6IFsnb3B0aW9ucycsICdmb3JlYWNoJ10sXG4gICAgJ2luaXQnOiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsdWVBY2Nlc3NvciwgYWxsQmluZGluZ3MpIHtcbiAgICAgICAga28udXRpbHMucmVnaXN0ZXJFdmVudEhhbmRsZXIoZWxlbWVudCwgXCJjaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVBY2Nlc3NvcigpLCB2YWx1ZVRvV3JpdGUgPSBbXTtcbiAgICAgICAgICAgIGtvLnV0aWxzLmFycmF5Rm9yRWFjaChlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwib3B0aW9uXCIpLCBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuc2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVG9Xcml0ZS5wdXNoKGtvLnNlbGVjdEV4dGVuc2lvbnMucmVhZFZhbHVlKG5vZGUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAga28uZXhwcmVzc2lvblJld3JpdGluZy53cml0ZVZhbHVlVG9Qcm9wZXJ0eSh2YWx1ZSwgYWxsQmluZGluZ3MsICdzZWxlY3RlZE9wdGlvbnMnLCB2YWx1ZVRvV3JpdGUpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgICd1cGRhdGUnOiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsdWVBY2Nlc3Nvcikge1xuICAgICAgICBpZiAoa28udXRpbHMudGFnTmFtZUxvd2VyKGVsZW1lbnQpICE9IFwic2VsZWN0XCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ2YWx1ZXMgYmluZGluZyBhcHBsaWVzIG9ubHkgdG8gU0VMRUNUIGVsZW1lbnRzXCIpO1xuXG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUodmFsdWVBY2Nlc3NvcigpKSxcbiAgICAgICAgICAgIHByZXZpb3VzU2Nyb2xsVG9wID0gZWxlbWVudC5zY3JvbGxUb3A7XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlICYmIHR5cGVvZiBuZXdWYWx1ZS5sZW5ndGggPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAga28udXRpbHMuYXJyYXlGb3JFYWNoKGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJvcHRpb25cIiksIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNTZWxlY3RlZCA9IGtvLnV0aWxzLmFycmF5SW5kZXhPZihuZXdWYWx1ZSwga28uc2VsZWN0RXh0ZW5zaW9ucy5yZWFkVmFsdWUobm9kZSkpID49IDA7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuc2VsZWN0ZWQgIT0gaXNTZWxlY3RlZCkgeyAgICAgIC8vIFRoaXMgY2hlY2sgcHJldmVudHMgZmxhc2hpbmcgb2YgdGhlIHNlbGVjdCBlbGVtZW50IGluIElFXG4gICAgICAgICAgICAgICAgICAgIGtvLnV0aWxzLnNldE9wdGlvbk5vZGVTZWxlY3Rpb25TdGF0ZShub2RlLCBpc1NlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gcHJldmlvdXNTY3JvbGxUb3A7XG4gICAgfVxufTtcbmtvLmV4cHJlc3Npb25SZXdyaXRpbmcudHdvV2F5QmluZGluZ3NbJ3NlbGVjdGVkT3B0aW9ucyddID0gdHJ1ZTtcbmtvLmJpbmRpbmdIYW5kbGVyc1snc3R5bGUnXSA9IHtcbiAgICAndXBkYXRlJzogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IpIHtcbiAgICAgICAgdmFyIHZhbHVlID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZSh2YWx1ZUFjY2Vzc29yKCkgfHwge30pO1xuICAgICAgICBrby51dGlscy5vYmplY3RGb3JFYWNoKHZhbHVlLCBmdW5jdGlvbihzdHlsZU5hbWUsIHN0eWxlVmFsdWUpIHtcbiAgICAgICAgICAgIHN0eWxlVmFsdWUgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKHN0eWxlVmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAoc3R5bGVWYWx1ZSA9PT0gbnVsbCB8fCBzdHlsZVZhbHVlID09PSB1bmRlZmluZWQgfHwgc3R5bGVWYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAvLyBFbXB0eSBzdHJpbmcgcmVtb3ZlcyB0aGUgdmFsdWUsIHdoZXJlYXMgbnVsbC91bmRlZmluZWQgaGF2ZSBubyBlZmZlY3RcbiAgICAgICAgICAgICAgICBzdHlsZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZWxlbWVudC5zdHlsZVtzdHlsZU5hbWVdID0gc3R5bGVWYWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxufTtcbmtvLmJpbmRpbmdIYW5kbGVyc1snc3VibWl0J10gPSB7XG4gICAgJ2luaXQnOiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsdWVBY2Nlc3NvciwgYWxsQmluZGluZ3MsIHZpZXdNb2RlbCwgYmluZGluZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZUFjY2Vzc29yKCkgIT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHZhbHVlIGZvciBhIHN1Ym1pdCBiaW5kaW5nIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgICAgICAga28udXRpbHMucmVnaXN0ZXJFdmVudEhhbmRsZXIoZWxlbWVudCwgXCJzdWJtaXRcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlclJldHVyblZhbHVlO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVBY2Nlc3NvcigpO1xuICAgICAgICAgICAgdHJ5IHsgaGFuZGxlclJldHVyblZhbHVlID0gdmFsdWUuY2FsbChiaW5kaW5nQ29udGV4dFsnJGRhdGEnXSwgZWxlbWVudCk7IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyUmV0dXJuVmFsdWUgIT09IHRydWUpIHsgLy8gTm9ybWFsbHkgd2Ugd2FudCB0byBwcmV2ZW50IGRlZmF1bHQgYWN0aW9uLiBEZXZlbG9wZXIgY2FuIG92ZXJyaWRlIHRoaXMgYmUgZXhwbGljaXRseSByZXR1cm5pbmcgdHJ1ZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KVxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5rby5iaW5kaW5nSGFuZGxlcnNbJ3RleHQnXSA9IHtcbiAgICAnaW5pdCc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBQcmV2ZW50IGJpbmRpbmcgb24gdGhlIGR5bmFtaWNhbGx5LWluamVjdGVkIHRleHQgbm9kZSAoYXMgZGV2ZWxvcGVycyBhcmUgdW5saWtlbHkgdG8gZXhwZWN0IHRoYXQsIGFuZCBpdCBoYXMgc2VjdXJpdHkgaW1wbGljYXRpb25zKS5cbiAgICAgICAgLy8gSXQgc2hvdWxkIGFsc28gbWFrZSB0aGluZ3MgZmFzdGVyLCBhcyB3ZSBubyBsb25nZXIgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIHRoZSB0ZXh0IG5vZGUgbWlnaHQgYmUgYmluZGFibGUuXG4gICAgICAgIHJldHVybiB7ICdjb250cm9sc0Rlc2NlbmRhbnRCaW5kaW5ncyc6IHRydWUgfTtcbiAgICB9LFxuICAgICd1cGRhdGUnOiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsdWVBY2Nlc3Nvcikge1xuICAgICAgICBrby51dGlscy5zZXRUZXh0Q29udGVudChlbGVtZW50LCB2YWx1ZUFjY2Vzc29yKCkpO1xuICAgIH1cbn07XG5rby52aXJ0dWFsRWxlbWVudHMuYWxsb3dlZEJpbmRpbmdzWyd0ZXh0J10gPSB0cnVlO1xuKGZ1bmN0aW9uICgpIHtcblxuaWYgKHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yKSB7XG4gICAgdmFyIHBhcnNlVmVyc2lvbiA9IGZ1bmN0aW9uIChtYXRjaGVzKSB7XG4gICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChtYXRjaGVzWzFdKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBEZXRlY3QgdmFyaW91cyBicm93c2VyIHZlcnNpb25zIGJlY2F1c2Ugc29tZSBvbGQgdmVyc2lvbnMgZG9uJ3QgZnVsbHkgc3VwcG9ydCB0aGUgJ2lucHV0JyBldmVudFxuICAgIHZhciBvcGVyYVZlcnNpb24gPSB3aW5kb3cub3BlcmEgJiYgd2luZG93Lm9wZXJhLnZlcnNpb24gJiYgcGFyc2VJbnQod2luZG93Lm9wZXJhLnZlcnNpb24oKSksXG4gICAgICAgIHVzZXJBZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LFxuICAgICAgICBzYWZhcmlWZXJzaW9uID0gcGFyc2VWZXJzaW9uKHVzZXJBZ2VudC5tYXRjaCgvXig/Oig/IWNocm9tZSkuKSp2ZXJzaW9uXFwvKFteIF0qKSBzYWZhcmkvaSkpLFxuICAgICAgICBmaXJlZm94VmVyc2lvbiA9IHBhcnNlVmVyc2lvbih1c2VyQWdlbnQubWF0Y2goL0ZpcmVmb3hcXC8oW14gXSopLykpO1xufVxuXG4vLyBJRSA4IGFuZCA5IGhhdmUgYnVncyB0aGF0IHByZXZlbnQgdGhlIG5vcm1hbCBldmVudHMgZnJvbSBmaXJpbmcgd2hlbiB0aGUgdmFsdWUgY2hhbmdlcy5cbi8vIEJ1dCBpdCBkb2VzIGZpcmUgdGhlICdzZWxlY3Rpb25jaGFuZ2UnIGV2ZW50IG9uIG1hbnkgb2YgdGhvc2UsIHByZXN1bWFibHkgYmVjYXVzZSB0aGVcbi8vIGN1cnNvciBpcyBtb3ZpbmcgYW5kIHRoYXQgY291bnRzIGFzIHRoZSBzZWxlY3Rpb24gY2hhbmdpbmcuIFRoZSAnc2VsZWN0aW9uY2hhbmdlJyBldmVudCBpc1xuLy8gZmlyZWQgYXQgdGhlIGRvY3VtZW50IGxldmVsIG9ubHkgYW5kIGRvZXNuJ3QgZGlyZWN0bHkgaW5kaWNhdGUgd2hpY2ggZWxlbWVudCBjaGFuZ2VkLiBXZVxuLy8gc2V0IHVwIGp1c3Qgb25lIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBkb2N1bWVudCBhbmQgdXNlICdhY3RpdmVFbGVtZW50JyB0byBkZXRlcm1pbmUgd2hpY2hcbi8vIGVsZW1lbnQgd2FzIGNoYW5nZWQuXG5pZiAoa28udXRpbHMuaWVWZXJzaW9uIDwgMTApIHtcbiAgICB2YXIgc2VsZWN0aW9uQ2hhbmdlUmVnaXN0ZXJlZE5hbWUgPSBrby51dGlscy5kb21EYXRhLm5leHRLZXkoKSxcbiAgICAgICAgc2VsZWN0aW9uQ2hhbmdlSGFuZGxlck5hbWUgPSBrby51dGlscy5kb21EYXRhLm5leHRLZXkoKTtcbiAgICB2YXIgc2VsZWN0aW9uQ2hhbmdlSGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLmFjdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBoYW5kbGVyID0gdGFyZ2V0ICYmIGtvLnV0aWxzLmRvbURhdGEuZ2V0KHRhcmdldCwgc2VsZWN0aW9uQ2hhbmdlSGFuZGxlck5hbWUpO1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgICAgaGFuZGxlcihldmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciByZWdpc3RlckZvclNlbGVjdGlvbkNoYW5nZUV2ZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIGhhbmRsZXIpIHtcbiAgICAgICAgdmFyIG93bmVyRG9jID0gZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICBpZiAoIWtvLnV0aWxzLmRvbURhdGEuZ2V0KG93bmVyRG9jLCBzZWxlY3Rpb25DaGFuZ2VSZWdpc3RlcmVkTmFtZSkpIHtcbiAgICAgICAgICAgIGtvLnV0aWxzLmRvbURhdGEuc2V0KG93bmVyRG9jLCBzZWxlY3Rpb25DaGFuZ2VSZWdpc3RlcmVkTmFtZSwgdHJ1ZSk7XG4gICAgICAgICAgICBrby51dGlscy5yZWdpc3RlckV2ZW50SGFuZGxlcihvd25lckRvYywgJ3NlbGVjdGlvbmNoYW5nZScsIHNlbGVjdGlvbkNoYW5nZUhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGtvLnV0aWxzLmRvbURhdGEuc2V0KGVsZW1lbnQsIHNlbGVjdGlvbkNoYW5nZUhhbmRsZXJOYW1lLCBoYW5kbGVyKTtcbiAgICB9O1xufVxuXG5rby5iaW5kaW5nSGFuZGxlcnNbJ3RleHRJbnB1dCddID0ge1xuICAgICdpbml0JzogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IsIGFsbEJpbmRpbmdzKSB7XG5cbiAgICAgICAgdmFyIHByZXZpb3VzRWxlbWVudFZhbHVlID0gZWxlbWVudC52YWx1ZSxcbiAgICAgICAgICAgIHRpbWVvdXRIYW5kbGUsXG4gICAgICAgICAgICBlbGVtZW50VmFsdWVCZWZvcmVFdmVudDtcblxuICAgICAgICB2YXIgdXBkYXRlTW9kZWwgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgICAgICAgICAgIGVsZW1lbnRWYWx1ZUJlZm9yZUV2ZW50ID0gdGltZW91dEhhbmRsZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgdmFyIGVsZW1lbnRWYWx1ZSA9IGVsZW1lbnQudmFsdWU7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNFbGVtZW50VmFsdWUgIT09IGVsZW1lbnRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIFByb3ZpZGUgYSB3YXkgZm9yIHRlc3RzIHRvIGtub3cgZXhhY3RseSB3aGljaCBldmVudCB3YXMgcHJvY2Vzc2VkXG4gICAgICAgICAgICAgICAgaWYgKERFQlVHICYmIGV2ZW50KSBlbGVtZW50Wydfa29fdGV4dElucHV0UHJvY2Vzc2VkRXZlbnQnXSA9IGV2ZW50LnR5cGU7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50VmFsdWUgPSBlbGVtZW50VmFsdWU7XG4gICAgICAgICAgICAgICAga28uZXhwcmVzc2lvblJld3JpdGluZy53cml0ZVZhbHVlVG9Qcm9wZXJ0eSh2YWx1ZUFjY2Vzc29yKCksIGFsbEJpbmRpbmdzLCAndGV4dElucHV0JywgZWxlbWVudFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgZGVmZXJVcGRhdGVNb2RlbCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCF0aW1lb3V0SGFuZGxlKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGVsZW1lbnRWYWx1ZUJlZm9yZUV2ZW50IHZhcmlhYmxlIGlzIHNldCAqb25seSogZHVyaW5nIHRoZSBicmllZiBnYXAgYmV0d2VlbiBhblxuICAgICAgICAgICAgICAgIC8vIGV2ZW50IGZpcmluZyBhbmQgdGhlIHVwZGF0ZU1vZGVsIGZ1bmN0aW9uIHJ1bm5pbmcuIFRoaXMgYWxsb3dzIHVzIHRvIGlnbm9yZSBtb2RlbFxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZXMgdGhhdCBhcmUgZnJvbSB0aGUgcHJldmlvdXMgc3RhdGUgb2YgdGhlIGVsZW1lbnQsIHVzdWFsbHkgZHVlIHRvIHRlY2huaXF1ZXNcbiAgICAgICAgICAgICAgICAvLyBzdWNoIGFzIHJhdGVMaW1pdC4gU3VjaCB1cGRhdGVzLCBpZiBub3QgaWdub3JlZCwgY2FuIGNhdXNlIGtleXN0cm9rZXMgdG8gYmUgbG9zdC5cbiAgICAgICAgICAgICAgICBlbGVtZW50VmFsdWVCZWZvcmVFdmVudCA9IGVsZW1lbnQudmFsdWU7XG4gICAgICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBERUJVRyA/IHVwZGF0ZU1vZGVsLmJpbmQoZWxlbWVudCwge3R5cGU6IGV2ZW50LnR5cGV9KSA6IHVwZGF0ZU1vZGVsO1xuICAgICAgICAgICAgICAgIHRpbWVvdXRIYW5kbGUgPSBrby51dGlscy5zZXRUaW1lb3V0KGhhbmRsZXIsIDQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIElFOSB3aWxsIG1lc3MgdXAgdGhlIERPTSBpZiB5b3UgaGFuZGxlIGV2ZW50cyBzeW5jaHJvbm91c2x5IHdoaWNoIHJlc3VsdHMgaW4gRE9NIGNoYW5nZXMgKHN1Y2ggYXMgb3RoZXIgYmluZGluZ3MpO1xuICAgICAgICAvLyBzbyB3ZSdsbCBtYWtlIHN1cmUgYWxsIHVwZGF0ZXMgYXJlIGFzeW5jaHJvbm91c1xuICAgICAgICB2YXIgaWVVcGRhdGVNb2RlbCA9IGtvLnV0aWxzLmllVmVyc2lvbiA9PSA5ID8gZGVmZXJVcGRhdGVNb2RlbCA6IHVwZGF0ZU1vZGVsO1xuXG4gICAgICAgIHZhciB1cGRhdGVWaWV3ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG1vZGVsVmFsdWUgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKHZhbHVlQWNjZXNzb3IoKSk7XG5cbiAgICAgICAgICAgIGlmIChtb2RlbFZhbHVlID09PSBudWxsIHx8IG1vZGVsVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1vZGVsVmFsdWUgPSAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVsZW1lbnRWYWx1ZUJlZm9yZUV2ZW50ICE9PSB1bmRlZmluZWQgJiYgbW9kZWxWYWx1ZSA9PT0gZWxlbWVudFZhbHVlQmVmb3JlRXZlbnQpIHtcbiAgICAgICAgICAgICAgICBrby51dGlscy5zZXRUaW1lb3V0KHVwZGF0ZVZpZXcsIDQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBlbGVtZW50IG9ubHkgaWYgdGhlIGVsZW1lbnQgYW5kIG1vZGVsIGFyZSBkaWZmZXJlbnQuIE9uIHNvbWUgYnJvd3NlcnMsIHVwZGF0aW5nIHRoZSB2YWx1ZVxuICAgICAgICAgICAgLy8gd2lsbCBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgaW5wdXQsIHdoaWNoIHdvdWxkIGJlIGJhZCB3aGlsZSB0aGUgdXNlciBpcyB0eXBpbmcuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZSAhPT0gbW9kZWxWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHByZXZpb3VzRWxlbWVudFZhbHVlID0gbW9kZWxWYWx1ZTsgIC8vIE1ha2Ugc3VyZSB3ZSBpZ25vcmUgZXZlbnRzIChwcm9wZXJ0eWNoYW5nZSkgdGhhdCByZXN1bHQgZnJvbSB1cGRhdGluZyB0aGUgdmFsdWVcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlID0gbW9kZWxWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgb25FdmVudCA9IGZ1bmN0aW9uIChldmVudCwgaGFuZGxlcikge1xuICAgICAgICAgICAga28udXRpbHMucmVnaXN0ZXJFdmVudEhhbmRsZXIoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChERUJVRyAmJiBrby5iaW5kaW5nSGFuZGxlcnNbJ3RleHRJbnB1dCddWydfZm9yY2VVcGRhdGVPbiddKSB7XG4gICAgICAgICAgICAvLyBQcm92aWRlIGEgd2F5IGZvciB0ZXN0cyB0byBzcGVjaWZ5IGV4YWN0bHkgd2hpY2ggZXZlbnRzIGFyZSBib3VuZFxuICAgICAgICAgICAga28udXRpbHMuYXJyYXlGb3JFYWNoKGtvLmJpbmRpbmdIYW5kbGVyc1sndGV4dElucHV0J11bJ19mb3JjZVVwZGF0ZU9uJ10sIGZ1bmN0aW9uKGV2ZW50TmFtZSkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudE5hbWUuc2xpY2UoMCw1KSA9PSAnYWZ0ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXZlbnQoZXZlbnROYW1lLnNsaWNlKDUpLCBkZWZlclVwZGF0ZU1vZGVsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvbkV2ZW50KGV2ZW50TmFtZSwgdXBkYXRlTW9kZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGtvLnV0aWxzLmllVmVyc2lvbiA8IDEwKSB7XG4gICAgICAgICAgICAgICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgPD0gOCBkb2Vzbid0IHN1cHBvcnQgdGhlICdpbnB1dCcgZXZlbnQsIGJ1dCBkb2VzIGluY2x1ZGUgJ3Byb3BlcnR5Y2hhbmdlJyB0aGF0IGZpcmVzIHdoZW5ldmVyXG4gICAgICAgICAgICAgICAgLy8gYW55IHByb3BlcnR5IG9mIGFuIGVsZW1lbnQgY2hhbmdlcy4gVW5saWtlICdpbnB1dCcsIGl0IGFsc28gZmlyZXMgaWYgYSBwcm9wZXJ0eSBpcyBjaGFuZ2VkIGZyb20gSmF2YVNjcmlwdCBjb2RlLFxuICAgICAgICAgICAgICAgIC8vIGJ1dCB0aGF0J3MgYW4gYWNjZXB0YWJsZSBjb21wcm9taXNlIGZvciB0aGlzIGJpbmRpbmcuIElFIDkgZG9lcyBzdXBwb3J0ICdpbnB1dCcsIGJ1dCBzaW5jZSBpdCBkb2Vzbid0IGZpcmUgaXRcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHVzaW5nIGF1dG9jb21wbGV0ZSwgd2UnbGwgdXNlICdwcm9wZXJ0eWNoYW5nZScgZm9yIGl0IGFsc28uXG4gICAgICAgICAgICAgICAgb25FdmVudCgncHJvcGVydHljaGFuZ2UnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQucHJvcGVydHlOYW1lID09PSAndmFsdWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZVVwZGF0ZU1vZGVsKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGtvLnV0aWxzLmllVmVyc2lvbiA9PSA4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElFIDggaGFzIGEgYnVnIHdoZXJlIGl0IGZhaWxzIHRvIGZpcmUgJ3Byb3BlcnR5Y2hhbmdlJyBvbiB0aGUgZmlyc3QgdXBkYXRlIGZvbGxvd2luZyBhIHZhbHVlIGNoYW5nZSBmcm9tXG4gICAgICAgICAgICAgICAgICAgIC8vIEphdmFTY3JpcHQgY29kZS4gSXQgYWxzbyBkb2Vzbid0IGZpcmUgaWYgeW91IGNsZWFyIHRoZSBlbnRpcmUgdmFsdWUuIFRvIGZpeCB0aGlzLCB3ZSBiaW5kIHRvIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gZXZlbnRzIHRvby5cbiAgICAgICAgICAgICAgICAgICAgb25FdmVudCgna2V5dXAnLCB1cGRhdGVNb2RlbCk7ICAgICAgLy8gQSBzaW5nbGUga2V5c3Rva2VcbiAgICAgICAgICAgICAgICAgICAgb25FdmVudCgna2V5ZG93bicsIHVwZGF0ZU1vZGVsKTsgICAgLy8gVGhlIGZpcnN0IGNoYXJhY3RlciB3aGVuIGEga2V5IGlzIGhlbGQgZG93blxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoa28udXRpbHMuaWVWZXJzaW9uID49IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgOSBkb2Vzbid0IGZpcmUgdGhlICdpbnB1dCcgZXZlbnQgd2hlbiBkZWxldGluZyB0ZXh0LCBpbmNsdWRpbmcgdXNpbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGJhY2tzcGFjZSwgZGVsZXRlLCBvciBjdHJsLXgga2V5cywgY2xpY2tpbmcgdGhlICd4JyB0byBjbGVhciB0aGUgaW5wdXQsIGRyYWdnaW5nIHRleHRcbiAgICAgICAgICAgICAgICAgICAgLy8gb3V0IG9mIHRoZSBmaWVsZCwgYW5kIGN1dHRpbmcgb3IgZGVsZXRpbmcgdGV4dCB1c2luZyB0aGUgY29udGV4dCBtZW51LiAnc2VsZWN0aW9uY2hhbmdlJ1xuICAgICAgICAgICAgICAgICAgICAvLyBjYW4gZGV0ZWN0IGFsbCBvZiB0aG9zZSBleGNlcHQgZHJhZ2dpbmcgdGV4dCBvdXQgb2YgdGhlIGZpZWxkLCBmb3Igd2hpY2ggd2UgdXNlICdkcmFnZW5kJy5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJlIGFsc28gbmVlZGVkIGluIElFOCBiZWNhdXNlIG9mIHRoZSBidWcgZGVzY3JpYmVkIGFib3ZlLlxuICAgICAgICAgICAgICAgICAgICByZWdpc3RlckZvclNlbGVjdGlvbkNoYW5nZUV2ZW50KGVsZW1lbnQsIGllVXBkYXRlTW9kZWwpOyAgLy8gJ3NlbGVjdGlvbmNoYW5nZScgY292ZXJzIGN1dCwgcGFzdGUsIGRyb3AsIGRlbGV0ZSwgZXRjLlxuICAgICAgICAgICAgICAgICAgICBvbkV2ZW50KCdkcmFnZW5kJywgZGVmZXJVcGRhdGVNb2RlbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBBbGwgb3RoZXIgc3VwcG9ydGVkIGJyb3dzZXJzIHN1cHBvcnQgdGhlICdpbnB1dCcgZXZlbnQsIHdoaWNoIGZpcmVzIHdoZW5ldmVyIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50IGlzIGNoYW5nZWRcbiAgICAgICAgICAgICAgICAvLyB0aHJvdWdoIHRoZSB1c2VyIGludGVyZmFjZS5cbiAgICAgICAgICAgICAgICBvbkV2ZW50KCdpbnB1dCcsIHVwZGF0ZU1vZGVsKTtcblxuICAgICAgICAgICAgICAgIGlmIChzYWZhcmlWZXJzaW9uIDwgNSAmJiBrby51dGlscy50YWdOYW1lTG93ZXIoZWxlbWVudCkgPT09IFwidGV4dGFyZWFcIikge1xuICAgICAgICAgICAgICAgICAgICAvLyBTYWZhcmkgPDUgZG9lc24ndCBmaXJlIHRoZSAnaW5wdXQnIGV2ZW50IGZvciA8dGV4dGFyZWE+IGVsZW1lbnRzIChpdCBkb2VzIGZpcmUgJ3RleHRJbnB1dCdcbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IG9ubHkgd2hlbiB0eXBpbmcpLiBTbyB3ZSdsbCBqdXN0IGNhdGNoIGFzIG11Y2ggYXMgd2UgY2FuIHdpdGgga2V5ZG93biwgY3V0LCBhbmQgcGFzdGUuXG4gICAgICAgICAgICAgICAgICAgIG9uRXZlbnQoJ2tleWRvd24nLCBkZWZlclVwZGF0ZU1vZGVsKTtcbiAgICAgICAgICAgICAgICAgICAgb25FdmVudCgncGFzdGUnLCBkZWZlclVwZGF0ZU1vZGVsKTtcbiAgICAgICAgICAgICAgICAgICAgb25FdmVudCgnY3V0JywgZGVmZXJVcGRhdGVNb2RlbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYVZlcnNpb24gPCAxMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBPcGVyYSAxMCBkb2Vzbid0IGFsd2F5cyBmaXJlIHRoZSAnaW5wdXQnIGV2ZW50IGZvciBjdXQsIHBhc3RlLCB1bmRvICYgZHJvcCBvcGVyYXRpb25zLlxuICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gdHJ5IHRvIGNhdGNoIHNvbWUgb2YgdGhvc2UgdXNpbmcgJ2tleWRvd24nLlxuICAgICAgICAgICAgICAgICAgICBvbkV2ZW50KCdrZXlkb3duJywgZGVmZXJVcGRhdGVNb2RlbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaXJlZm94VmVyc2lvbiA8IDQuMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IDw9IDMuNiBkb2Vzbid0IGZpcmUgdGhlICdpbnB1dCcgZXZlbnQgd2hlbiB0ZXh0IGlzIGZpbGxlZCBpbiB0aHJvdWdoIGF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICBvbkV2ZW50KCdET01BdXRvQ29tcGxldGUnLCB1cGRhdGVNb2RlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCA8PTMuNSBkb2Vzbid0IGZpcmUgdGhlICdpbnB1dCcgZXZlbnQgd2hlbiB0ZXh0IGlzIGRyb3BwZWQgaW50byB0aGUgaW5wdXQuXG4gICAgICAgICAgICAgICAgICAgIG9uRXZlbnQoJ2RyYWdkcm9wJywgdXBkYXRlTW9kZWwpOyAgICAgICAvLyA8My41XG4gICAgICAgICAgICAgICAgICAgIG9uRXZlbnQoJ2Ryb3AnLCB1cGRhdGVNb2RlbCk7ICAgICAgICAgICAvLyAzLjVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCaW5kIHRvIHRoZSBjaGFuZ2UgZXZlbnQgc28gdGhhdCB3ZSBjYW4gY2F0Y2ggcHJvZ3JhbW1hdGljIHVwZGF0ZXMgb2YgdGhlIHZhbHVlIHRoYXQgZmlyZSB0aGlzIGV2ZW50LlxuICAgICAgICBvbkV2ZW50KCdjaGFuZ2UnLCB1cGRhdGVNb2RlbCk7XG5cbiAgICAgICAga28uY29tcHV0ZWQodXBkYXRlVmlldywgbnVsbCwgeyBkaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQ6IGVsZW1lbnQgfSk7XG4gICAgfVxufTtcbmtvLmV4cHJlc3Npb25SZXdyaXRpbmcudHdvV2F5QmluZGluZ3NbJ3RleHRJbnB1dCddID0gdHJ1ZTtcblxuLy8gdGV4dGlucHV0IGlzIGFuIGFsaWFzIGZvciB0ZXh0SW5wdXRcbmtvLmJpbmRpbmdIYW5kbGVyc1sndGV4dGlucHV0J10gPSB7XG4gICAgLy8gcHJlcHJvY2VzcyBpcyB0aGUgb25seSB3YXkgdG8gc2V0IHVwIGEgZnVsbCBhbGlhc1xuICAgICdwcmVwcm9jZXNzJzogZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBhZGRCaW5kaW5nKSB7XG4gICAgICAgIGFkZEJpbmRpbmcoJ3RleHRJbnB1dCcsIHZhbHVlKTtcbiAgICB9XG59O1xuXG59KSgpO2tvLmJpbmRpbmdIYW5kbGVyc1sndW5pcXVlTmFtZSddID0ge1xuICAgICdpbml0JzogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IpIHtcbiAgICAgICAgaWYgKHZhbHVlQWNjZXNzb3IoKSkge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBcImtvX3VuaXF1ZV9cIiArICgrK2tvLmJpbmRpbmdIYW5kbGVyc1sndW5pcXVlTmFtZSddLmN1cnJlbnRJbmRleCk7XG4gICAgICAgICAgICBrby51dGlscy5zZXRFbGVtZW50TmFtZShlbGVtZW50LCBuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5rby5iaW5kaW5nSGFuZGxlcnNbJ3VuaXF1ZU5hbWUnXS5jdXJyZW50SW5kZXggPSAwO1xua28uYmluZGluZ0hhbmRsZXJzWyd2YWx1ZSddID0ge1xuICAgICdhZnRlcic6IFsnb3B0aW9ucycsICdmb3JlYWNoJ10sXG4gICAgJ2luaXQnOiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsdWVBY2Nlc3NvciwgYWxsQmluZGluZ3MpIHtcbiAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGJpbmRpbmcgaXMgcGxhY2VkIG9uIGEgcmFkaW8vY2hlY2tib3gsIHRoZW4ganVzdCBwYXNzIHRocm91Z2ggdG8gY2hlY2tlZFZhbHVlIGFuZCBxdWl0XG4gICAgICAgIGlmIChlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSBcImlucHV0XCIgJiYgKGVsZW1lbnQudHlwZSA9PSBcImNoZWNrYm94XCIgfHwgZWxlbWVudC50eXBlID09IFwicmFkaW9cIikpIHtcbiAgICAgICAgICAgIGtvLmFwcGx5QmluZGluZ0FjY2Vzc29yc1RvTm9kZShlbGVtZW50LCB7ICdjaGVja2VkVmFsdWUnOiB2YWx1ZUFjY2Vzc29yIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWx3YXlzIGNhdGNoIFwiY2hhbmdlXCIgZXZlbnQ7IHBvc3NpYmx5IG90aGVyIGV2ZW50cyB0b28gaWYgYXNrZWRcbiAgICAgICAgdmFyIGV2ZW50c1RvQ2F0Y2ggPSBbXCJjaGFuZ2VcIl07XG4gICAgICAgIHZhciByZXF1ZXN0ZWRFdmVudHNUb0NhdGNoID0gYWxsQmluZGluZ3MuZ2V0KFwidmFsdWVVcGRhdGVcIik7XG4gICAgICAgIHZhciBwcm9wZXJ0eUNoYW5nZWRGaXJlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZWxlbWVudFZhbHVlQmVmb3JlRXZlbnQgPSBudWxsO1xuXG4gICAgICAgIGlmIChyZXF1ZXN0ZWRFdmVudHNUb0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3RlZEV2ZW50c1RvQ2F0Y2ggPT0gXCJzdHJpbmdcIikgLy8gQWxsb3cgYm90aCBpbmRpdmlkdWFsIGV2ZW50IG5hbWVzLCBhbmQgYXJyYXlzIG9mIGV2ZW50IG5hbWVzXG4gICAgICAgICAgICAgICAgcmVxdWVzdGVkRXZlbnRzVG9DYXRjaCA9IFtyZXF1ZXN0ZWRFdmVudHNUb0NhdGNoXTtcbiAgICAgICAgICAgIGtvLnV0aWxzLmFycmF5UHVzaEFsbChldmVudHNUb0NhdGNoLCByZXF1ZXN0ZWRFdmVudHNUb0NhdGNoKTtcbiAgICAgICAgICAgIGV2ZW50c1RvQ2F0Y2ggPSBrby51dGlscy5hcnJheUdldERpc3RpbmN0VmFsdWVzKGV2ZW50c1RvQ2F0Y2gpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHZhbHVlVXBkYXRlSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZWxlbWVudFZhbHVlQmVmb3JlRXZlbnQgPSBudWxsO1xuICAgICAgICAgICAgcHJvcGVydHlDaGFuZ2VkRmlyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBtb2RlbFZhbHVlID0gdmFsdWVBY2Nlc3NvcigpO1xuICAgICAgICAgICAgdmFyIGVsZW1lbnRWYWx1ZSA9IGtvLnNlbGVjdEV4dGVuc2lvbnMucmVhZFZhbHVlKGVsZW1lbnQpO1xuICAgICAgICAgICAga28uZXhwcmVzc2lvblJld3JpdGluZy53cml0ZVZhbHVlVG9Qcm9wZXJ0eShtb2RlbFZhbHVlLCBhbGxCaW5kaW5ncywgJ3ZhbHVlJywgZWxlbWVudFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9TdGV2ZVNhbmRlcnNvbi9rbm9ja291dC9pc3N1ZXMvMTIyXG4gICAgICAgIC8vIElFIGRvZXNuJ3QgZmlyZSBcImNoYW5nZVwiIGV2ZW50cyBvbiB0ZXh0Ym94ZXMgaWYgdGhlIHVzZXIgc2VsZWN0cyBhIHZhbHVlIGZyb20gaXRzIGF1dG9jb21wbGV0ZSBsaXN0XG4gICAgICAgIHZhciBpZUF1dG9Db21wbGV0ZUhhY2tOZWVkZWQgPSBrby51dGlscy5pZVZlcnNpb24gJiYgZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gXCJpbnB1dFwiICYmIGVsZW1lbnQudHlwZSA9PSBcInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZWxlbWVudC5hdXRvY29tcGxldGUgIT0gXCJvZmZcIiAmJiAoIWVsZW1lbnQuZm9ybSB8fCBlbGVtZW50LmZvcm0uYXV0b2NvbXBsZXRlICE9IFwib2ZmXCIpO1xuICAgICAgICBpZiAoaWVBdXRvQ29tcGxldGVIYWNrTmVlZGVkICYmIGtvLnV0aWxzLmFycmF5SW5kZXhPZihldmVudHNUb0NhdGNoLCBcInByb3BlcnR5Y2hhbmdlXCIpID09IC0xKSB7XG4gICAgICAgICAgICBrby51dGlscy5yZWdpc3RlckV2ZW50SGFuZGxlcihlbGVtZW50LCBcInByb3BlcnR5Y2hhbmdlXCIsIGZ1bmN0aW9uICgpIHsgcHJvcGVydHlDaGFuZ2VkRmlyZWQgPSB0cnVlIH0pO1xuICAgICAgICAgICAga28udXRpbHMucmVnaXN0ZXJFdmVudEhhbmRsZXIoZWxlbWVudCwgXCJmb2N1c1wiLCBmdW5jdGlvbiAoKSB7IHByb3BlcnR5Q2hhbmdlZEZpcmVkID0gZmFsc2UgfSk7XG4gICAgICAgICAgICBrby51dGlscy5yZWdpc3RlckV2ZW50SGFuZGxlcihlbGVtZW50LCBcImJsdXJcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5Q2hhbmdlZEZpcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVXBkYXRlSGFuZGxlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAga28udXRpbHMuYXJyYXlGb3JFYWNoKGV2ZW50c1RvQ2F0Y2gsIGZ1bmN0aW9uKGV2ZW50TmFtZSkge1xuICAgICAgICAgICAgLy8gVGhlIHN5bnRheCBcImFmdGVyPGV2ZW50bmFtZT5cIiBtZWFucyBcInJ1biB0aGUgaGFuZGxlciBhc3luY2hyb25vdXNseSBhZnRlciB0aGUgZXZlbnRcIlxuICAgICAgICAgICAgLy8gVGhpcyBpcyB1c2VmdWwsIGZvciBleGFtcGxlLCB0byBjYXRjaCBcImtleWRvd25cIiBldmVudHMgYWZ0ZXIgdGhlIGJyb3dzZXIgaGFzIHVwZGF0ZWQgdGhlIGNvbnRyb2xcbiAgICAgICAgICAgIC8vIChvdGhlcndpc2UsIGtvLnNlbGVjdEV4dGVuc2lvbnMucmVhZFZhbHVlKHRoaXMpIHdpbGwgcmVjZWl2ZSB0aGUgY29udHJvbCdzIHZhbHVlICpiZWZvcmUqIHRoZSBrZXkgZXZlbnQpXG4gICAgICAgICAgICB2YXIgaGFuZGxlciA9IHZhbHVlVXBkYXRlSGFuZGxlcjtcbiAgICAgICAgICAgIGlmIChrby51dGlscy5zdHJpbmdTdGFydHNXaXRoKGV2ZW50TmFtZSwgXCJhZnRlclwiKSkge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVsZW1lbnRWYWx1ZUJlZm9yZUV2ZW50IHZhcmlhYmxlIGlzIG5vbi1udWxsICpvbmx5KiBkdXJpbmcgdGhlIGJyaWVmIGdhcCBiZXR3ZWVuXG4gICAgICAgICAgICAgICAgICAgIC8vIGEga2V5WCBldmVudCBmaXJpbmcgYW5kIHRoZSB2YWx1ZVVwZGF0ZUhhbmRsZXIgcnVubmluZywgd2hpY2ggaXMgc2NoZWR1bGVkIHRvIGhhcHBlblxuICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGUgZWFybGllc3QgYXN5bmNocm9ub3VzIG9wcG9ydHVuaXR5LiBXZSBzdG9yZSB0aGlzIHRlbXBvcmFyeSBpbmZvcm1hdGlvbiBzbyB0aGF0XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmLCBiZXR3ZWVuIGtleVggYW5kIHZhbHVlVXBkYXRlSGFuZGxlciwgdGhlIHVuZGVybHlpbmcgbW9kZWwgdmFsdWUgY2hhbmdlcyBzZXBhcmF0ZWx5LFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjYW4gb3ZlcndyaXRlIHRoYXQgbW9kZWwgdmFsdWUgY2hhbmdlIHdpdGggdGhlIHZhbHVlIHRoZSB1c2VyIGp1c3QgdHlwZWQuIE90aGVyd2lzZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gdGVjaG5pcXVlcyBsaWtlIHJhdGVMaW1pdCBjYW4gdHJpZ2dlciBtb2RlbCBjaGFuZ2VzIGF0IGNyaXRpY2FsIG1vbWVudHMgdGhhdCB3aWxsXG4gICAgICAgICAgICAgICAgICAgIC8vIG92ZXJyaWRlIHRoZSB1c2VyJ3MgaW5wdXRzLCBjYXVzaW5nIGtleXN0cm9rZXMgdG8gYmUgbG9zdC5cbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFZhbHVlQmVmb3JlRXZlbnQgPSBrby5zZWxlY3RFeHRlbnNpb25zLnJlYWRWYWx1ZShlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAga28udXRpbHMuc2V0VGltZW91dCh2YWx1ZVVwZGF0ZUhhbmRsZXIsIDApO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXZlbnROYW1lID0gZXZlbnROYW1lLnN1YnN0cmluZyhcImFmdGVyXCIubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtvLnV0aWxzLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciB1cGRhdGVGcm9tTW9kZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKHZhbHVlQWNjZXNzb3IoKSk7XG4gICAgICAgICAgICB2YXIgZWxlbWVudFZhbHVlID0ga28uc2VsZWN0RXh0ZW5zaW9ucy5yZWFkVmFsdWUoZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50VmFsdWVCZWZvcmVFdmVudCAhPT0gbnVsbCAmJiBuZXdWYWx1ZSA9PT0gZWxlbWVudFZhbHVlQmVmb3JlRXZlbnQpIHtcbiAgICAgICAgICAgICAgICBrby51dGlscy5zZXRUaW1lb3V0KHVwZGF0ZUZyb21Nb2RlbCwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgdmFsdWVIYXNDaGFuZ2VkID0gKG5ld1ZhbHVlICE9PSBlbGVtZW50VmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAodmFsdWVIYXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtvLnV0aWxzLnRhZ05hbWVMb3dlcihlbGVtZW50KSA9PT0gXCJzZWxlY3RcIikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWxsb3dVbnNldCA9IGFsbEJpbmRpbmdzLmdldCgndmFsdWVBbGxvd1Vuc2V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcHBseVZhbHVlQWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAga28uc2VsZWN0RXh0ZW5zaW9ucy53cml0ZVZhbHVlKGVsZW1lbnQsIG5ld1ZhbHVlLCBhbGxvd1Vuc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlWYWx1ZUFjdGlvbigpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxsb3dVbnNldCAmJiBuZXdWYWx1ZSAhPT0ga28uc2VsZWN0RXh0ZW5zaW9ucy5yZWFkVmFsdWUoZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHlvdSB0cnkgdG8gc2V0IGEgbW9kZWwgdmFsdWUgdGhhdCBjYW4ndCBiZSByZXByZXNlbnRlZCBpbiBhbiBhbHJlYWR5LXBvcHVsYXRlZCBkcm9wZG93biwgcmVqZWN0IHRoYXQgY2hhbmdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB5b3UncmUgbm90IGFsbG93ZWQgdG8gaGF2ZSBhIG1vZGVsIHZhbHVlIHRoYXQgZGlzYWdyZWVzIHdpdGggYSB2aXNpYmxlIFVJIHNlbGVjdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgIGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24uaWdub3JlKGtvLnV0aWxzLnRyaWdnZXJFdmVudCwgbnVsbCwgW2VsZW1lbnQsIFwiY2hhbmdlXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIElFNiBidWc6IEl0IHdvbid0IHJlbGlhYmx5IGFwcGx5IHZhbHVlcyB0byBTRUxFQ1Qgbm9kZXMgZHVyaW5nIHRoZSBzYW1lIGV4ZWN1dGlvbiB0aHJlYWRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJpZ2h0IGFmdGVyIHlvdSd2ZSBjaGFuZ2VkIHRoZSBzZXQgb2YgT1BUSU9OIG5vZGVzIG9uIGl0LiBTbyBmb3IgdGhhdCBub2RlIHR5cGUsIHdlJ2xsIHNjaGVkdWxlIGEgc2Vjb25kIHRocmVhZFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXBwbHkgdGhlIHZhbHVlIGFzIHdlbGwuXG4gICAgICAgICAgICAgICAgICAgICAgICBrby51dGlscy5zZXRUaW1lb3V0KGFwcGx5VmFsdWVBY3Rpb24sIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga28uc2VsZWN0RXh0ZW5zaW9ucy53cml0ZVZhbHVlKGVsZW1lbnQsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAga28uY29tcHV0ZWQodXBkYXRlRnJvbU1vZGVsLCBudWxsLCB7IGRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZDogZWxlbWVudCB9KTtcbiAgICB9LFxuICAgICd1cGRhdGUnOiBmdW5jdGlvbigpIHt9IC8vIEtlZXAgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggY29kZSB0aGF0IG1heSBoYXZlIHdyYXBwZWQgdmFsdWUgYmluZGluZ1xufTtcbmtvLmV4cHJlc3Npb25SZXdyaXRpbmcudHdvV2F5QmluZGluZ3NbJ3ZhbHVlJ10gPSB0cnVlO1xua28uYmluZGluZ0hhbmRsZXJzWyd2aXNpYmxlJ10gPSB7XG4gICAgJ3VwZGF0ZSc6IGZ1bmN0aW9uIChlbGVtZW50LCB2YWx1ZUFjY2Vzc29yKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUodmFsdWVBY2Nlc3NvcigpKTtcbiAgICAgICAgdmFyIGlzQ3VycmVudGx5VmlzaWJsZSA9ICEoZWxlbWVudC5zdHlsZS5kaXNwbGF5ID09IFwibm9uZVwiKTtcbiAgICAgICAgaWYgKHZhbHVlICYmICFpc0N1cnJlbnRseVZpc2libGUpXG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuICAgICAgICBlbHNlIGlmICgoIXZhbHVlKSAmJiBpc0N1cnJlbnRseVZpc2libGUpXG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB9XG59O1xuLy8gJ2NsaWNrJyBpcyBqdXN0IGEgc2hvcnRoYW5kIGZvciB0aGUgdXN1YWwgZnVsbC1sZW5ndGggZXZlbnQ6e2NsaWNrOmhhbmRsZXJ9XG5tYWtlRXZlbnRIYW5kbGVyU2hvcnRjdXQoJ2NsaWNrJyk7XG4vLyBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIHRlbXBsYXRlIGVuZ2luZSxcbi8vXG4vLyBbMV0gSW5oZXJpdCBmcm9tIHRoaXMgY2xhc3MgKGxpa2Uga28ubmF0aXZlVGVtcGxhdGVFbmdpbmUgZG9lcylcbi8vIFsyXSBPdmVycmlkZSAncmVuZGVyVGVtcGxhdGVTb3VyY2UnLCBzdXBwbHlpbmcgYSBmdW5jdGlvbiB3aXRoIHRoaXMgc2lnbmF0dXJlOlxuLy9cbi8vICAgICAgICBmdW5jdGlvbiAodGVtcGxhdGVTb3VyY2UsIGJpbmRpbmdDb250ZXh0LCBvcHRpb25zKSB7XG4vLyAgICAgICAgICAgIC8vIC0gdGVtcGxhdGVTb3VyY2UudGV4dCgpIGlzIHRoZSB0ZXh0IG9mIHRoZSB0ZW1wbGF0ZSB5b3Ugc2hvdWxkIHJlbmRlclxuLy8gICAgICAgICAgICAvLyAtIGJpbmRpbmdDb250ZXh0LiRkYXRhIGlzIHRoZSBkYXRhIHlvdSBzaG91bGQgcGFzcyBpbnRvIHRoZSB0ZW1wbGF0ZVxuLy8gICAgICAgICAgICAvLyAgIC0geW91IG1pZ2h0IGFsc28gd2FudCB0byBtYWtlIGJpbmRpbmdDb250ZXh0LiRwYXJlbnQsIGJpbmRpbmdDb250ZXh0LiRwYXJlbnRzLFxuLy8gICAgICAgICAgICAvLyAgICAgYW5kIGJpbmRpbmdDb250ZXh0LiRyb290IGF2YWlsYWJsZSBpbiB0aGUgdGVtcGxhdGUgdG9vXG4vLyAgICAgICAgICAgIC8vIC0gb3B0aW9ucyBnaXZlcyB5b3UgYWNjZXNzIHRvIGFueSBvdGhlciBwcm9wZXJ0aWVzIHNldCBvbiBcImRhdGEtYmluZDogeyB0ZW1wbGF0ZTogb3B0aW9ucyB9XCJcbi8vICAgICAgICAgICAgLy8gLSB0ZW1wbGF0ZURvY3VtZW50IGlzIHRoZSBkb2N1bWVudCBvYmplY3Qgb2YgdGhlIHRlbXBsYXRlXG4vLyAgICAgICAgICAgIC8vXG4vLyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZTogYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4vLyAgICAgICAgfVxuLy9cbi8vIFszXSBPdmVycmlkZSAnY3JlYXRlSmF2YVNjcmlwdEV2YWx1YXRvckJsb2NrJywgc3VwcGx5aW5nIGEgZnVuY3Rpb24gd2l0aCB0aGlzIHNpZ25hdHVyZTpcbi8vXG4vLyAgICAgICAgZnVuY3Rpb24gKHNjcmlwdCkge1xuLy8gICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWU6IFdoYXRldmVyIHN5bnRheCBtZWFucyBcIkV2YWx1YXRlIHRoZSBKYXZhU2NyaXB0IHN0YXRlbWVudCAnc2NyaXB0JyBhbmQgb3V0cHV0IHRoZSByZXN1bHRcIlxuLy8gICAgICAgICAgICAvLyAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUganF1ZXJ5LnRtcGwgdGVtcGxhdGUgZW5naW5lIGNvbnZlcnRzICdzb21lU2NyaXB0JyB0byAnJHsgc29tZVNjcmlwdCB9J1xuLy8gICAgICAgIH1cbi8vXG4vLyAgICAgVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBpZiB5b3Ugd2FudCB0byBhbGxvdyBkYXRhLWJpbmQgYXR0cmlidXRlcyB0byByZWZlcmVuY2UgYXJiaXRyYXJ5IHRlbXBsYXRlIHZhcmlhYmxlcy5cbi8vICAgICBJZiB5b3UgZG9uJ3Qgd2FudCB0byBhbGxvdyB0aGF0LCB5b3UgY2FuIHNldCB0aGUgcHJvcGVydHkgJ2FsbG93VGVtcGxhdGVSZXdyaXRpbmcnIHRvIGZhbHNlIChsaWtlIGtvLm5hdGl2ZVRlbXBsYXRlRW5naW5lIGRvZXMpXG4vLyAgICAgYW5kIHRoZW4geW91IGRvbid0IG5lZWQgdG8gb3ZlcnJpZGUgJ2NyZWF0ZUphdmFTY3JpcHRFdmFsdWF0b3JCbG9jaycuXG5cbmtvLnRlbXBsYXRlRW5naW5lID0gZnVuY3Rpb24gKCkgeyB9O1xuXG5rby50ZW1wbGF0ZUVuZ2luZS5wcm90b3R5cGVbJ3JlbmRlclRlbXBsYXRlU291cmNlJ10gPSBmdW5jdGlvbiAodGVtcGxhdGVTb3VyY2UsIGJpbmRpbmdDb250ZXh0LCBvcHRpb25zLCB0ZW1wbGF0ZURvY3VtZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3ZlcnJpZGUgcmVuZGVyVGVtcGxhdGVTb3VyY2VcIik7XG59O1xuXG5rby50ZW1wbGF0ZUVuZ2luZS5wcm90b3R5cGVbJ2NyZWF0ZUphdmFTY3JpcHRFdmFsdWF0b3JCbG9jayddID0gZnVuY3Rpb24gKHNjcmlwdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk92ZXJyaWRlIGNyZWF0ZUphdmFTY3JpcHRFdmFsdWF0b3JCbG9ja1wiKTtcbn07XG5cbmtvLnRlbXBsYXRlRW5naW5lLnByb3RvdHlwZVsnbWFrZVRlbXBsYXRlU291cmNlJ10gPSBmdW5jdGlvbih0ZW1wbGF0ZSwgdGVtcGxhdGVEb2N1bWVudCkge1xuICAgIC8vIE5hbWVkIHRlbXBsYXRlXG4gICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRlbXBsYXRlRG9jdW1lbnQgPSB0ZW1wbGF0ZURvY3VtZW50IHx8IGRvY3VtZW50O1xuICAgICAgICB2YXIgZWxlbSA9IHRlbXBsYXRlRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGVtcGxhdGUpO1xuICAgICAgICBpZiAoIWVsZW0pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCB0ZW1wbGF0ZSB3aXRoIElEIFwiICsgdGVtcGxhdGUpO1xuICAgICAgICByZXR1cm4gbmV3IGtvLnRlbXBsYXRlU291cmNlcy5kb21FbGVtZW50KGVsZW0pO1xuICAgIH0gZWxzZSBpZiAoKHRlbXBsYXRlLm5vZGVUeXBlID09IDEpIHx8ICh0ZW1wbGF0ZS5ub2RlVHlwZSA9PSA4KSkge1xuICAgICAgICAvLyBBbm9ueW1vdXMgdGVtcGxhdGVcbiAgICAgICAgcmV0dXJuIG5ldyBrby50ZW1wbGF0ZVNvdXJjZXMuYW5vbnltb3VzVGVtcGxhdGUodGVtcGxhdGUpO1xuICAgIH0gZWxzZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHRlbXBsYXRlIHR5cGU6IFwiICsgdGVtcGxhdGUpO1xufTtcblxua28udGVtcGxhdGVFbmdpbmUucHJvdG90eXBlWydyZW5kZXJUZW1wbGF0ZSddID0gZnVuY3Rpb24gKHRlbXBsYXRlLCBiaW5kaW5nQ29udGV4dCwgb3B0aW9ucywgdGVtcGxhdGVEb2N1bWVudCkge1xuICAgIHZhciB0ZW1wbGF0ZVNvdXJjZSA9IHRoaXNbJ21ha2VUZW1wbGF0ZVNvdXJjZSddKHRlbXBsYXRlLCB0ZW1wbGF0ZURvY3VtZW50KTtcbiAgICByZXR1cm4gdGhpc1sncmVuZGVyVGVtcGxhdGVTb3VyY2UnXSh0ZW1wbGF0ZVNvdXJjZSwgYmluZGluZ0NvbnRleHQsIG9wdGlvbnMsIHRlbXBsYXRlRG9jdW1lbnQpO1xufTtcblxua28udGVtcGxhdGVFbmdpbmUucHJvdG90eXBlWydpc1RlbXBsYXRlUmV3cml0dGVuJ10gPSBmdW5jdGlvbiAodGVtcGxhdGUsIHRlbXBsYXRlRG9jdW1lbnQpIHtcbiAgICAvLyBTa2lwIHJld3JpdGluZyBpZiByZXF1ZXN0ZWRcbiAgICBpZiAodGhpc1snYWxsb3dUZW1wbGF0ZVJld3JpdGluZyddID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHRoaXNbJ21ha2VUZW1wbGF0ZVNvdXJjZSddKHRlbXBsYXRlLCB0ZW1wbGF0ZURvY3VtZW50KVsnZGF0YSddKFwiaXNSZXdyaXR0ZW5cIik7XG59O1xuXG5rby50ZW1wbGF0ZUVuZ2luZS5wcm90b3R5cGVbJ3Jld3JpdGVUZW1wbGF0ZSddID0gZnVuY3Rpb24gKHRlbXBsYXRlLCByZXdyaXRlckNhbGxiYWNrLCB0ZW1wbGF0ZURvY3VtZW50KSB7XG4gICAgdmFyIHRlbXBsYXRlU291cmNlID0gdGhpc1snbWFrZVRlbXBsYXRlU291cmNlJ10odGVtcGxhdGUsIHRlbXBsYXRlRG9jdW1lbnQpO1xuICAgIHZhciByZXdyaXR0ZW4gPSByZXdyaXRlckNhbGxiYWNrKHRlbXBsYXRlU291cmNlWyd0ZXh0J10oKSk7XG4gICAgdGVtcGxhdGVTb3VyY2VbJ3RleHQnXShyZXdyaXR0ZW4pO1xuICAgIHRlbXBsYXRlU291cmNlWydkYXRhJ10oXCJpc1Jld3JpdHRlblwiLCB0cnVlKTtcbn07XG5cbmtvLmV4cG9ydFN5bWJvbCgndGVtcGxhdGVFbmdpbmUnLCBrby50ZW1wbGF0ZUVuZ2luZSk7XG5cbmtvLnRlbXBsYXRlUmV3cml0aW5nID0gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWVtb2l6ZURhdGFCaW5kaW5nQXR0cmlidXRlU3ludGF4UmVnZXggPSAvKDwoW2Etel0rXFxkKikoPzpcXHMrKD8hZGF0YS1iaW5kXFxzKj1cXHMqKVthLXowLTlcXC1dKyg/Oj0oPzpcXFwiW15cXFwiXSpcXFwifFxcJ1teXFwnXSpcXCd8W14+XSopKT8pKlxccyspZGF0YS1iaW5kXFxzKj1cXHMqKFtcIiddKShbXFxzXFxTXSo/KVxcMy9naTtcbiAgICB2YXIgbWVtb2l6ZVZpcnR1YWxDb250YWluZXJCaW5kaW5nU3ludGF4UmVnZXggPSAvPCEtLVxccyprb1xcYlxccyooW1xcc1xcU10qPylcXHMqLS0+L2c7XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZURhdGFCaW5kVmFsdWVzRm9yUmV3cml0aW5nKGtleVZhbHVlQXJyYXkpIHtcbiAgICAgICAgdmFyIGFsbFZhbGlkYXRvcnMgPSBrby5leHByZXNzaW9uUmV3cml0aW5nLmJpbmRpbmdSZXdyaXRlVmFsaWRhdG9ycztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlWYWx1ZUFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5VmFsdWVBcnJheVtpXVsna2V5J107XG4gICAgICAgICAgICBpZiAoYWxsVmFsaWRhdG9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbGlkYXRvciA9IGFsbFZhbGlkYXRvcnNba2V5XTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc3NpYmxlRXJyb3JNZXNzYWdlID0gdmFsaWRhdG9yKGtleVZhbHVlQXJyYXlbaV1bJ3ZhbHVlJ10pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9zc2libGVFcnJvck1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocG9zc2libGVFcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXZhbGlkYXRvcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHRlbXBsYXRlIGVuZ2luZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSAnXCIgKyBrZXkgKyBcIicgYmluZGluZyB3aXRoaW4gaXRzIHRlbXBsYXRlc1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RNZW1vaXplZFRhZ1JlcGxhY2VtZW50KGRhdGFCaW5kQXR0cmlidXRlVmFsdWUsIHRhZ1RvUmV0YWluLCBub2RlTmFtZSwgdGVtcGxhdGVFbmdpbmUpIHtcbiAgICAgICAgdmFyIGRhdGFCaW5kS2V5VmFsdWVBcnJheSA9IGtvLmV4cHJlc3Npb25SZXdyaXRpbmcucGFyc2VPYmplY3RMaXRlcmFsKGRhdGFCaW5kQXR0cmlidXRlVmFsdWUpO1xuICAgICAgICB2YWxpZGF0ZURhdGFCaW5kVmFsdWVzRm9yUmV3cml0aW5nKGRhdGFCaW5kS2V5VmFsdWVBcnJheSk7XG4gICAgICAgIHZhciByZXdyaXR0ZW5EYXRhQmluZEF0dHJpYnV0ZVZhbHVlID0ga28uZXhwcmVzc2lvblJld3JpdGluZy5wcmVQcm9jZXNzQmluZGluZ3MoZGF0YUJpbmRLZXlWYWx1ZUFycmF5LCB7J3ZhbHVlQWNjZXNzb3JzJzp0cnVlfSk7XG5cbiAgICAgICAgLy8gRm9yIG5vIG9idmlvdXMgcmVhc29uLCBPcGVyYSBmYWlscyB0byBldmFsdWF0ZSByZXdyaXR0ZW5EYXRhQmluZEF0dHJpYnV0ZVZhbHVlIHVubGVzcyBpdCdzIHdyYXBwZWQgaW4gYW4gYWRkaXRpb25hbFxuICAgICAgICAvLyBhbm9ueW1vdXMgZnVuY3Rpb24sIGV2ZW4gdGhvdWdoIE9wZXJhJ3MgYnVpbHQtaW4gZGVidWdnZXIgY2FuIGV2YWx1YXRlIGl0IGFueXdheS4gTm8gb3RoZXIgYnJvd3NlciByZXF1aXJlcyB0aGlzXG4gICAgICAgIC8vIGV4dHJhIGluZGlyZWN0aW9uLlxuICAgICAgICB2YXIgYXBwbHlCaW5kaW5nc1RvTmV4dFNpYmxpbmdTY3JpcHQgPVxuICAgICAgICAgICAgXCJrby5fX3RyX2FtYnRucyhmdW5jdGlvbigkY29udGV4dCwkZWxlbWVudCl7cmV0dXJuKGZ1bmN0aW9uKCl7cmV0dXJueyBcIiArIHJld3JpdHRlbkRhdGFCaW5kQXR0cmlidXRlVmFsdWUgKyBcIiB9IH0pKCl9LCdcIiArIG5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKyBcIicpXCI7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZUVuZ2luZVsnY3JlYXRlSmF2YVNjcmlwdEV2YWx1YXRvckJsb2NrJ10oYXBwbHlCaW5kaW5nc1RvTmV4dFNpYmxpbmdTY3JpcHQpICsgdGFnVG9SZXRhaW47XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZW5zdXJlVGVtcGxhdGVJc1Jld3JpdHRlbjogZnVuY3Rpb24gKHRlbXBsYXRlLCB0ZW1wbGF0ZUVuZ2luZSwgdGVtcGxhdGVEb2N1bWVudCkge1xuICAgICAgICAgICAgaWYgKCF0ZW1wbGF0ZUVuZ2luZVsnaXNUZW1wbGF0ZVJld3JpdHRlbiddKHRlbXBsYXRlLCB0ZW1wbGF0ZURvY3VtZW50KSlcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUVuZ2luZVsncmV3cml0ZVRlbXBsYXRlJ10odGVtcGxhdGUsIGZ1bmN0aW9uIChodG1sU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrby50ZW1wbGF0ZVJld3JpdGluZy5tZW1vaXplQmluZGluZ0F0dHJpYnV0ZVN5bnRheChodG1sU3RyaW5nLCB0ZW1wbGF0ZUVuZ2luZSk7XG4gICAgICAgICAgICAgICAgfSwgdGVtcGxhdGVEb2N1bWVudCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbWVtb2l6ZUJpbmRpbmdBdHRyaWJ1dGVTeW50YXg6IGZ1bmN0aW9uIChodG1sU3RyaW5nLCB0ZW1wbGF0ZUVuZ2luZSkge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWxTdHJpbmcucmVwbGFjZShtZW1vaXplRGF0YUJpbmRpbmdBdHRyaWJ1dGVTeW50YXhSZWdleCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RNZW1vaXplZFRhZ1JlcGxhY2VtZW50KC8qIGRhdGFCaW5kQXR0cmlidXRlVmFsdWU6ICovIGFyZ3VtZW50c1s0XSwgLyogdGFnVG9SZXRhaW46ICovIGFyZ3VtZW50c1sxXSwgLyogbm9kZU5hbWU6ICovIGFyZ3VtZW50c1syXSwgdGVtcGxhdGVFbmdpbmUpO1xuICAgICAgICAgICAgfSkucmVwbGFjZShtZW1vaXplVmlydHVhbENvbnRhaW5lckJpbmRpbmdTeW50YXhSZWdleCwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdE1lbW9pemVkVGFnUmVwbGFjZW1lbnQoLyogZGF0YUJpbmRBdHRyaWJ1dGVWYWx1ZTogKi8gYXJndW1lbnRzWzFdLCAvKiB0YWdUb1JldGFpbjogKi8gXCI8IS0tIGtvIC0tPlwiLCAvKiBub2RlTmFtZTogKi8gXCIjY29tbWVudFwiLCB0ZW1wbGF0ZUVuZ2luZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBhcHBseU1lbW9pemVkQmluZGluZ3NUb05leHRTaWJsaW5nOiBmdW5jdGlvbiAoYmluZGluZ3MsIG5vZGVOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4ga28ubWVtb2l6YXRpb24ubWVtb2l6ZShmdW5jdGlvbiAoZG9tTm9kZSwgYmluZGluZ0NvbnRleHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZVRvQmluZCA9IGRvbU5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVUb0JpbmQgJiYgbm9kZVRvQmluZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUobm9kZVRvQmluZCwgYmluZGluZ3MsIGJpbmRpbmdDb250ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn0pKCk7XG5cblxuLy8gRXhwb3J0ZWQgb25seSBiZWNhdXNlIGl0IGhhcyB0byBiZSByZWZlcmVuY2VkIGJ5IHN0cmluZyBsb29rdXAgZnJvbSB3aXRoaW4gcmV3cml0dGVuIHRlbXBsYXRlXG5rby5leHBvcnRTeW1ib2woJ19fdHJfYW1idG5zJywga28udGVtcGxhdGVSZXdyaXRpbmcuYXBwbHlNZW1vaXplZEJpbmRpbmdzVG9OZXh0U2libGluZyk7XG4oZnVuY3Rpb24oKSB7XG4gICAgLy8gQSB0ZW1wbGF0ZSBzb3VyY2UgcmVwcmVzZW50cyBhIHJlYWQvd3JpdGUgd2F5IG9mIGFjY2Vzc2luZyBhIHRlbXBsYXRlLiBUaGlzIGlzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3IgdGVtcGxhdGUgbG9hZGluZy9zYXZpbmdcbiAgICAvLyBsb2dpYyB0byBiZSBkdXBsaWNhdGVkIGluIGV2ZXJ5IHRlbXBsYXRlIGVuZ2luZSAoYW5kIG1lYW5zIHRoZXkgY2FuIGFsbCB3b3JrIHdpdGggYW5vbnltb3VzIHRlbXBsYXRlcywgZXRjLilcbiAgICAvL1xuICAgIC8vIFR3byBhcmUgcHJvdmlkZWQgYnkgZGVmYXVsdDpcbiAgICAvLyAgMS4ga28udGVtcGxhdGVTb3VyY2VzLmRvbUVsZW1lbnQgICAgICAgLSByZWFkcy93cml0ZXMgdGhlIHRleHQgY29udGVudCBvZiBhbiBhcmJpdHJhcnkgRE9NIGVsZW1lbnRcbiAgICAvLyAgMi4ga28udGVtcGxhdGVTb3VyY2VzLmFub255bW91c0VsZW1lbnQgLSB1c2VzIGtvLnV0aWxzLmRvbURhdGEgdG8gcmVhZC93cml0ZSB0ZXh0ICphc3NvY2lhdGVkKiB3aXRoIHRoZSBET00gZWxlbWVudCwgYnV0XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCByZWFkaW5nL3dyaXRpbmcgdGhlIGFjdHVhbCBlbGVtZW50IHRleHQgY29udGVudCwgc2luY2UgaXQgd2lsbCBiZSBvdmVyd3JpdHRlblxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIHJlbmRlcmVkIHRlbXBsYXRlIG91dHB1dC5cbiAgICAvLyBZb3UgY2FuIGltcGxlbWVudCB5b3VyIG93biB0ZW1wbGF0ZSBzb3VyY2UgaWYgeW91IHdhbnQgdG8gZmV0Y2gvc3RvcmUgdGVtcGxhdGVzIHNvbWV3aGVyZSBvdGhlciB0aGFuIGluIERPTSBlbGVtZW50cy5cbiAgICAvLyBUZW1wbGF0ZSBzb3VyY2VzIG5lZWQgdG8gaGF2ZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczpcbiAgICAvLyAgIHRleHQoKSBcdFx0XHQtIHJldHVybnMgdGhlIHRlbXBsYXRlIHRleHQgZnJvbSB5b3VyIHN0b3JhZ2UgbG9jYXRpb25cbiAgICAvLyAgIHRleHQodmFsdWUpXHRcdC0gd3JpdGVzIHRoZSBzdXBwbGllZCB0ZW1wbGF0ZSB0ZXh0IHRvIHlvdXIgc3RvcmFnZSBsb2NhdGlvblxuICAgIC8vICAgZGF0YShrZXkpXHRcdFx0LSByZWFkcyB2YWx1ZXMgc3RvcmVkIHVzaW5nIGRhdGEoa2V5LCB2YWx1ZSkgLSBzZWUgYmVsb3dcbiAgICAvLyAgIGRhdGEoa2V5LCB2YWx1ZSlcdC0gYXNzb2NpYXRlcyBcInZhbHVlXCIgd2l0aCB0aGlzIHRlbXBsYXRlIGFuZCB0aGUga2V5IFwia2V5XCIuIElzIHVzZWQgdG8gc3RvcmUgaW5mb3JtYXRpb24gbGlrZSBcImlzUmV3cml0dGVuXCIuXG4gICAgLy9cbiAgICAvLyBPcHRpb25hbGx5LCB0ZW1wbGF0ZSBzb3VyY2VzIGNhbiBhbHNvIGhhdmUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6XG4gICAgLy8gICBub2RlcygpICAgICAgICAgICAgLSByZXR1cm5zIGEgRE9NIGVsZW1lbnQgY29udGFpbmluZyB0aGUgbm9kZXMgb2YgdGhpcyB0ZW1wbGF0ZSwgd2hlcmUgYXZhaWxhYmxlXG4gICAgLy8gICBub2Rlcyh2YWx1ZSkgICAgICAgLSB3cml0ZXMgdGhlIGdpdmVuIERPTSBlbGVtZW50IHRvIHlvdXIgc3RvcmFnZSBsb2NhdGlvblxuICAgIC8vIElmIGEgRE9NIGVsZW1lbnQgaXMgYXZhaWxhYmxlIGZvciBhIGdpdmVuIHRlbXBsYXRlIHNvdXJjZSwgdGVtcGxhdGUgZW5naW5lcyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgaXQgaW4gcHJlZmVyZW5jZSBvdmVyIHRleHQoKVxuICAgIC8vIGZvciBpbXByb3ZlZCBzcGVlZC4gSG93ZXZlciwgYWxsIHRlbXBsYXRlU291cmNlcyBtdXN0IHN1cHBseSB0ZXh0KCkgZXZlbiBpZiB0aGV5IGRvbid0IHN1cHBseSBub2RlcygpLlxuICAgIC8vXG4gICAgLy8gT25jZSB5b3UndmUgaW1wbGVtZW50ZWQgYSB0ZW1wbGF0ZVNvdXJjZSwgbWFrZSB5b3VyIHRlbXBsYXRlIGVuZ2luZSB1c2UgaXQgYnkgc3ViY2xhc3Npbmcgd2hhdGV2ZXIgdGVtcGxhdGUgZW5naW5lIHlvdSB3ZXJlXG4gICAgLy8gdXNpbmcgYW5kIG92ZXJyaWRpbmcgXCJtYWtlVGVtcGxhdGVTb3VyY2VcIiB0byByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgeW91ciBjdXN0b20gdGVtcGxhdGUgc291cmNlLlxuXG4gICAga28udGVtcGxhdGVTb3VyY2VzID0ge307XG5cbiAgICAvLyAtLS0tIGtvLnRlbXBsYXRlU291cmNlcy5kb21FbGVtZW50IC0tLS0tXG5cbiAgICAvLyB0ZW1wbGF0ZSB0eXBlc1xuICAgIHZhciB0ZW1wbGF0ZVNjcmlwdCA9IDEsXG4gICAgICAgIHRlbXBsYXRlVGV4dEFyZWEgPSAyLFxuICAgICAgICB0ZW1wbGF0ZVRlbXBsYXRlID0gMyxcbiAgICAgICAgdGVtcGxhdGVFbGVtZW50ID0gNDtcblxuICAgIGtvLnRlbXBsYXRlU291cmNlcy5kb21FbGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICB0aGlzLmRvbUVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICB2YXIgdGFnTmFtZUxvd2VyID0ga28udXRpbHMudGFnTmFtZUxvd2VyKGVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVR5cGUgPVxuICAgICAgICAgICAgICAgIHRhZ05hbWVMb3dlciA9PT0gXCJzY3JpcHRcIiA/IHRlbXBsYXRlU2NyaXB0IDpcbiAgICAgICAgICAgICAgICB0YWdOYW1lTG93ZXIgPT09IFwidGV4dGFyZWFcIiA/IHRlbXBsYXRlVGV4dEFyZWEgOlxuICAgICAgICAgICAgICAgICAgICAvLyBGb3IgYnJvd3NlcnMgd2l0aCBwcm9wZXIgPHRlbXBsYXRlPiBlbGVtZW50IHN1cHBvcnQsIHdoZXJlIHRoZSAuY29udGVudCBwcm9wZXJ0eSBnaXZlcyBhIGRvY3VtZW50IGZyYWdtZW50XG4gICAgICAgICAgICAgICAgdGFnTmFtZUxvd2VyID09IFwidGVtcGxhdGVcIiAmJiBlbGVtZW50LmNvbnRlbnQgJiYgZWxlbWVudC5jb250ZW50Lm5vZGVUeXBlID09PSAxMSA/IHRlbXBsYXRlVGVtcGxhdGUgOlxuICAgICAgICAgICAgICAgIHRlbXBsYXRlRWxlbWVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGtvLnRlbXBsYXRlU291cmNlcy5kb21FbGVtZW50LnByb3RvdHlwZVsndGV4dCddID0gZnVuY3Rpb24oLyogdmFsdWVUb1dyaXRlICovKSB7XG4gICAgICAgIHZhciBlbGVtQ29udGVudHNQcm9wZXJ0eSA9IHRoaXMudGVtcGxhdGVUeXBlID09PSB0ZW1wbGF0ZVNjcmlwdCA/IFwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMudGVtcGxhdGVUeXBlID09PSB0ZW1wbGF0ZVRleHRBcmVhID8gXCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiaW5uZXJIVE1MXCI7XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9tRWxlbWVudFtlbGVtQ29udGVudHNQcm9wZXJ0eV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdmFsdWVUb1dyaXRlID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgaWYgKGVsZW1Db250ZW50c1Byb3BlcnR5ID09PSBcImlubmVySFRNTFwiKVxuICAgICAgICAgICAgICAgIGtvLnV0aWxzLnNldEh0bWwodGhpcy5kb21FbGVtZW50LCB2YWx1ZVRvV3JpdGUpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudFtlbGVtQ29udGVudHNQcm9wZXJ0eV0gPSB2YWx1ZVRvV3JpdGU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGRhdGFEb21EYXRhUHJlZml4ID0ga28udXRpbHMuZG9tRGF0YS5uZXh0S2V5KCkgKyBcIl9cIjtcbiAgICBrby50ZW1wbGF0ZVNvdXJjZXMuZG9tRWxlbWVudC5wcm90b3R5cGVbJ2RhdGEnXSA9IGZ1bmN0aW9uKGtleSAvKiwgdmFsdWVUb1dyaXRlICovKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4ga28udXRpbHMuZG9tRGF0YS5nZXQodGhpcy5kb21FbGVtZW50LCBkYXRhRG9tRGF0YVByZWZpeCArIGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrby51dGlscy5kb21EYXRhLnNldCh0aGlzLmRvbUVsZW1lbnQsIGRhdGFEb21EYXRhUHJlZml4ICsga2V5LCBhcmd1bWVudHNbMV0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciB0ZW1wbGF0ZXNEb21EYXRhS2V5ID0ga28udXRpbHMuZG9tRGF0YS5uZXh0S2V5KCk7XG4gICAgZnVuY3Rpb24gZ2V0VGVtcGxhdGVEb21EYXRhKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGtvLnV0aWxzLmRvbURhdGEuZ2V0KGVsZW1lbnQsIHRlbXBsYXRlc0RvbURhdGFLZXkpIHx8IHt9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRUZW1wbGF0ZURvbURhdGEoZWxlbWVudCwgZGF0YSkge1xuICAgICAgICBrby51dGlscy5kb21EYXRhLnNldChlbGVtZW50LCB0ZW1wbGF0ZXNEb21EYXRhS2V5LCBkYXRhKTtcbiAgICB9XG5cbiAgICBrby50ZW1wbGF0ZVNvdXJjZXMuZG9tRWxlbWVudC5wcm90b3R5cGVbJ25vZGVzJ10gPSBmdW5jdGlvbigvKiB2YWx1ZVRvV3JpdGUgKi8pIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLmRvbUVsZW1lbnQ7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHZhciB0ZW1wbGF0ZURhdGEgPSBnZXRUZW1wbGF0ZURvbURhdGEoZWxlbWVudCksXG4gICAgICAgICAgICAgICAgY29udGFpbmVyRGF0YSA9IHRlbXBsYXRlRGF0YS5jb250YWluZXJEYXRhO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lckRhdGEgfHwgKFxuICAgICAgICAgICAgICAgIHRoaXMudGVtcGxhdGVUeXBlID09PSB0ZW1wbGF0ZVRlbXBsYXRlID8gZWxlbWVudC5jb250ZW50IDpcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlVHlwZSA9PT0gdGVtcGxhdGVFbGVtZW50ID8gZWxlbWVudCA6XG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZVRvV3JpdGUgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICBzZXRUZW1wbGF0ZURvbURhdGEoZWxlbWVudCwge2NvbnRhaW5lckRhdGE6IHZhbHVlVG9Xcml0ZX0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIC0tLS0ga28udGVtcGxhdGVTb3VyY2VzLmFub255bW91c1RlbXBsYXRlIC0tLS0tXG4gICAgLy8gQW5vbnltb3VzIHRlbXBsYXRlcyBhcmUgbm9ybWFsbHkgc2F2ZWQvcmV0cmlldmVkIGFzIERPTSBub2RlcyB0aHJvdWdoIFwibm9kZXNcIi5cbiAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSwgeW91IGNhbiBhbHNvIHJlYWQgXCJ0ZXh0XCI7IGl0IHdpbGwgYmUgc2VyaWFsaXplZCBmcm9tIHRoZSBub2RlcyBvbiBkZW1hbmQuXG4gICAgLy8gV3JpdGluZyB0byBcInRleHRcIiBpcyBzdGlsbCBzdXBwb3J0ZWQsIGJ1dCB0aGVuIHRoZSB0ZW1wbGF0ZSBkYXRhIHdpbGwgbm90IGJlIGF2YWlsYWJsZSBhcyBET00gbm9kZXMuXG5cbiAgICBrby50ZW1wbGF0ZVNvdXJjZXMuYW5vbnltb3VzVGVtcGxhdGUgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZG9tRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICAgIGtvLnRlbXBsYXRlU291cmNlcy5hbm9ueW1vdXNUZW1wbGF0ZS5wcm90b3R5cGUgPSBuZXcga28udGVtcGxhdGVTb3VyY2VzLmRvbUVsZW1lbnQoKTtcbiAgICBrby50ZW1wbGF0ZVNvdXJjZXMuYW5vbnltb3VzVGVtcGxhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0ga28udGVtcGxhdGVTb3VyY2VzLmFub255bW91c1RlbXBsYXRlO1xuICAgIGtvLnRlbXBsYXRlU291cmNlcy5hbm9ueW1vdXNUZW1wbGF0ZS5wcm90b3R5cGVbJ3RleHQnXSA9IGZ1bmN0aW9uKC8qIHZhbHVlVG9Xcml0ZSAqLykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICB2YXIgdGVtcGxhdGVEYXRhID0gZ2V0VGVtcGxhdGVEb21EYXRhKHRoaXMuZG9tRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAodGVtcGxhdGVEYXRhLnRleHREYXRhID09PSB1bmRlZmluZWQgJiYgdGVtcGxhdGVEYXRhLmNvbnRhaW5lckRhdGEpXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVEYXRhLnRleHREYXRhID0gdGVtcGxhdGVEYXRhLmNvbnRhaW5lckRhdGEuaW5uZXJIVE1MO1xuICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlRGF0YS50ZXh0RGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZVRvV3JpdGUgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICBzZXRUZW1wbGF0ZURvbURhdGEodGhpcy5kb21FbGVtZW50LCB7dGV4dERhdGE6IHZhbHVlVG9Xcml0ZX0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGtvLmV4cG9ydFN5bWJvbCgndGVtcGxhdGVTb3VyY2VzJywga28udGVtcGxhdGVTb3VyY2VzKTtcbiAgICBrby5leHBvcnRTeW1ib2woJ3RlbXBsYXRlU291cmNlcy5kb21FbGVtZW50Jywga28udGVtcGxhdGVTb3VyY2VzLmRvbUVsZW1lbnQpO1xuICAgIGtvLmV4cG9ydFN5bWJvbCgndGVtcGxhdGVTb3VyY2VzLmFub255bW91c1RlbXBsYXRlJywga28udGVtcGxhdGVTb3VyY2VzLmFub255bW91c1RlbXBsYXRlKTtcbn0pKCk7XG4oZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdGVtcGxhdGVFbmdpbmU7XG4gICAga28uc2V0VGVtcGxhdGVFbmdpbmUgPSBmdW5jdGlvbiAodGVtcGxhdGVFbmdpbmUpIHtcbiAgICAgICAgaWYgKCh0ZW1wbGF0ZUVuZ2luZSAhPSB1bmRlZmluZWQpICYmICEodGVtcGxhdGVFbmdpbmUgaW5zdGFuY2VvZiBrby50ZW1wbGF0ZUVuZ2luZSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0ZW1wbGF0ZUVuZ2luZSBtdXN0IGluaGVyaXQgZnJvbSBrby50ZW1wbGF0ZUVuZ2luZVwiKTtcbiAgICAgICAgX3RlbXBsYXRlRW5naW5lID0gdGVtcGxhdGVFbmdpbmU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52b2tlRm9yRWFjaE5vZGVJbkNvbnRpbnVvdXNSYW5nZShmaXJzdE5vZGUsIGxhc3ROb2RlLCBhY3Rpb24pIHtcbiAgICAgICAgdmFyIG5vZGUsIG5leHRJblF1ZXVlID0gZmlyc3ROb2RlLCBmaXJzdE91dE9mUmFuZ2VOb2RlID0ga28udmlydHVhbEVsZW1lbnRzLm5leHRTaWJsaW5nKGxhc3ROb2RlKTtcbiAgICAgICAgd2hpbGUgKG5leHRJblF1ZXVlICYmICgobm9kZSA9IG5leHRJblF1ZXVlKSAhPT0gZmlyc3RPdXRPZlJhbmdlTm9kZSkpIHtcbiAgICAgICAgICAgIG5leHRJblF1ZXVlID0ga28udmlydHVhbEVsZW1lbnRzLm5leHRTaWJsaW5nKG5vZGUpO1xuICAgICAgICAgICAgYWN0aW9uKG5vZGUsIG5leHRJblF1ZXVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFjdGl2YXRlQmluZGluZ3NPbkNvbnRpbnVvdXNOb2RlQXJyYXkoY29udGludW91c05vZGVBcnJheSwgYmluZGluZ0NvbnRleHQpIHtcbiAgICAgICAgLy8gVG8gYmUgdXNlZCBvbiBhbnkgbm9kZXMgdGhhdCBoYXZlIGJlZW4gcmVuZGVyZWQgYnkgYSB0ZW1wbGF0ZSBhbmQgaGF2ZSBiZWVuIGluc2VydGVkIGludG8gc29tZSBwYXJlbnQgZWxlbWVudFxuICAgICAgICAvLyBXYWxrcyB0aHJvdWdoIGNvbnRpbnVvdXNOb2RlQXJyYXkgKHdoaWNoICptdXN0KiBiZSBjb250aW51b3VzLCBpLmUuLCBhbiB1bmludGVycnVwdGVkIHNlcXVlbmNlIG9mIHNpYmxpbmcgbm9kZXMsIGJlY2F1c2VcbiAgICAgICAgLy8gdGhlIGFsZ29yaXRobSBmb3Igd2Fsa2luZyB0aGVtIHJlbGllcyBvbiB0aGlzKSwgYW5kIGZvciBlYWNoIHRvcC1sZXZlbCBpdGVtIGluIHRoZSB2aXJ0dWFsLWVsZW1lbnQgc2Vuc2UsXG4gICAgICAgIC8vICgxKSBEb2VzIGEgcmVndWxhciBcImFwcGx5QmluZGluZ3NcIiB0byBhc3NvY2lhdGUgYmluZGluZ0NvbnRleHQgd2l0aCB0aGlzIG5vZGUgYW5kIHRvIGFjdGl2YXRlIGFueSBub24tbWVtb2l6ZWQgYmluZGluZ3NcbiAgICAgICAgLy8gKDIpIFVubWVtb2l6ZXMgYW55IG1lbW9zIGluIHRoZSBET00gc3VidHJlZSAoZS5nLiwgdG8gYWN0aXZhdGUgYmluZGluZ3MgdGhhdCBoYWQgYmVlbiBtZW1vaXplZCBkdXJpbmcgdGVtcGxhdGUgcmV3cml0aW5nKVxuXG4gICAgICAgIGlmIChjb250aW51b3VzTm9kZUFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIGZpcnN0Tm9kZSA9IGNvbnRpbnVvdXNOb2RlQXJyYXlbMF0sXG4gICAgICAgICAgICAgICAgbGFzdE5vZGUgPSBjb250aW51b3VzTm9kZUFycmF5W2NvbnRpbnVvdXNOb2RlQXJyYXkubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IGZpcnN0Tm9kZS5wYXJlbnROb2RlLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyID0ga28uYmluZGluZ1Byb3ZpZGVyWydpbnN0YW5jZSddLFxuICAgICAgICAgICAgICAgIHByZXByb2Nlc3NOb2RlID0gcHJvdmlkZXJbJ3ByZXByb2Nlc3NOb2RlJ107XG5cbiAgICAgICAgICAgIGlmIChwcmVwcm9jZXNzTm9kZSkge1xuICAgICAgICAgICAgICAgIGludm9rZUZvckVhY2hOb2RlSW5Db250aW51b3VzUmFuZ2UoZmlyc3ROb2RlLCBsYXN0Tm9kZSwgZnVuY3Rpb24obm9kZSwgbmV4dE5vZGVJblJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBub2RlUHJldmlvdXNTaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdOb2RlcyA9IHByZXByb2Nlc3NOb2RlLmNhbGwocHJvdmlkZXIsIG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV3Tm9kZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlID09PSBmaXJzdE5vZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3ROb2RlID0gbmV3Tm9kZXNbMF0gfHwgbmV4dE5vZGVJblJhbmdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUgPT09IGxhc3ROb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3ROb2RlID0gbmV3Tm9kZXNbbmV3Tm9kZXMubGVuZ3RoIC0gMV0gfHwgbm9kZVByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBwcmVwcm9jZXNzTm9kZSBjYW4gY2hhbmdlIHRoZSBub2RlcywgaW5jbHVkaW5nIHRoZSBmaXJzdCBhbmQgbGFzdCBub2RlcywgdXBkYXRlIGNvbnRpbnVvdXNOb2RlQXJyYXkgdG8gbWF0Y2guXG4gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0aGUgZnVsbCBzZXQsIGluY2x1ZGluZyBpbm5lciBub2RlcywgYmVjYXVzZSB0aGUgdW5tZW1vaXplIHN0ZXAgbWlnaHQgcmVtb3ZlIHRoZSBmaXJzdCBub2RlIChhbmQgc28gdGhlIHJlYWxcbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBub2RlIG5lZWRzIHRvIGJlIGluIHRoZSBhcnJheSkuXG4gICAgICAgICAgICAgICAgY29udGludW91c05vZGVBcnJheS5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgIGlmICghZmlyc3ROb2RlKSB7IC8vIHByZXByb2Nlc3NOb2RlIG1pZ2h0IGhhdmUgcmVtb3ZlZCBhbGwgdGhlIG5vZGVzLCBpbiB3aGljaCBjYXNlIHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIGRvXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0Tm9kZSA9PT0gbGFzdE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludW91c05vZGVBcnJheS5wdXNoKGZpcnN0Tm9kZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludW91c05vZGVBcnJheS5wdXNoKGZpcnN0Tm9kZSwgbGFzdE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBrby51dGlscy5maXhVcENvbnRpbnVvdXNOb2RlQXJyYXkoY29udGludW91c05vZGVBcnJheSwgcGFyZW50Tm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBOZWVkIHRvIGFwcGx5QmluZGluZ3MgKmJlZm9yZSogdW5tZW1vemlhdGlvbiwgYmVjYXVzZSB1bm1lbW9pemF0aW9uIG1pZ2h0IGludHJvZHVjZSBleHRyYSBub2RlcyAodGhhdCB3ZSBkb24ndCB3YW50IHRvIHJlLWJpbmQpXG4gICAgICAgICAgICAvLyB3aGVyZWFzIGEgcmVndWxhciBhcHBseUJpbmRpbmdzIHdvbid0IGludHJvZHVjZSBuZXcgbWVtb2l6ZWQgbm9kZXNcbiAgICAgICAgICAgIGludm9rZUZvckVhY2hOb2RlSW5Db250aW51b3VzUmFuZ2UoZmlyc3ROb2RlLCBsYXN0Tm9kZSwgZnVuY3Rpb24obm9kZSkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxIHx8IG5vZGUubm9kZVR5cGUgPT09IDgpXG4gICAgICAgICAgICAgICAgICAgIGtvLmFwcGx5QmluZGluZ3MoYmluZGluZ0NvbnRleHQsIG5vZGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpbnZva2VGb3JFYWNoTm9kZUluQ29udGludW91c1JhbmdlKGZpcnN0Tm9kZSwgbGFzdE5vZGUsIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMSB8fCBub2RlLm5vZGVUeXBlID09PSA4KVxuICAgICAgICAgICAgICAgICAgICBrby5tZW1vaXphdGlvbi51bm1lbW9pemVEb21Ob2RlQW5kRGVzY2VuZGFudHMobm9kZSwgW2JpbmRpbmdDb250ZXh0XSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGFueSBjaGFuZ2VzIGRvbmUgYnkgYXBwbHlCaW5kaW5ncyBvciB1bm1lbW9pemUgYXJlIHJlZmxlY3RlZCBpbiB0aGUgYXJyYXlcbiAgICAgICAgICAgIGtvLnV0aWxzLmZpeFVwQ29udGludW91c05vZGVBcnJheShjb250aW51b3VzTm9kZUFycmF5LCBwYXJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEZpcnN0Tm9kZUZyb21Qb3NzaWJsZUFycmF5KG5vZGVPck5vZGVBcnJheSkge1xuICAgICAgICByZXR1cm4gbm9kZU9yTm9kZUFycmF5Lm5vZGVUeXBlID8gbm9kZU9yTm9kZUFycmF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBub2RlT3JOb2RlQXJyYXkubGVuZ3RoID4gMCA/IG5vZGVPck5vZGVBcnJheVswXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleGVjdXRlVGVtcGxhdGUodGFyZ2V0Tm9kZU9yTm9kZUFycmF5LCByZW5kZXJNb2RlLCB0ZW1wbGF0ZSwgYmluZGluZ0NvbnRleHQsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHZhciBmaXJzdFRhcmdldE5vZGUgPSB0YXJnZXROb2RlT3JOb2RlQXJyYXkgJiYgZ2V0Rmlyc3ROb2RlRnJvbVBvc3NpYmxlQXJyYXkodGFyZ2V0Tm9kZU9yTm9kZUFycmF5KTtcbiAgICAgICAgdmFyIHRlbXBsYXRlRG9jdW1lbnQgPSAoZmlyc3RUYXJnZXROb2RlIHx8IHRlbXBsYXRlIHx8IHt9KS5vd25lckRvY3VtZW50O1xuICAgICAgICB2YXIgdGVtcGxhdGVFbmdpbmVUb1VzZSA9IChvcHRpb25zWyd0ZW1wbGF0ZUVuZ2luZSddIHx8IF90ZW1wbGF0ZUVuZ2luZSk7XG4gICAgICAgIGtvLnRlbXBsYXRlUmV3cml0aW5nLmVuc3VyZVRlbXBsYXRlSXNSZXdyaXR0ZW4odGVtcGxhdGUsIHRlbXBsYXRlRW5naW5lVG9Vc2UsIHRlbXBsYXRlRG9jdW1lbnQpO1xuICAgICAgICB2YXIgcmVuZGVyZWROb2Rlc0FycmF5ID0gdGVtcGxhdGVFbmdpbmVUb1VzZVsncmVuZGVyVGVtcGxhdGUnXSh0ZW1wbGF0ZSwgYmluZGluZ0NvbnRleHQsIG9wdGlvbnMsIHRlbXBsYXRlRG9jdW1lbnQpO1xuXG4gICAgICAgIC8vIExvb3NlbHkgY2hlY2sgcmVzdWx0IGlzIGFuIGFycmF5IG9mIERPTSBub2Rlc1xuICAgICAgICBpZiAoKHR5cGVvZiByZW5kZXJlZE5vZGVzQXJyYXkubGVuZ3RoICE9IFwibnVtYmVyXCIpIHx8IChyZW5kZXJlZE5vZGVzQXJyYXkubGVuZ3RoID4gMCAmJiB0eXBlb2YgcmVuZGVyZWROb2Rlc0FycmF5WzBdLm5vZGVUeXBlICE9IFwibnVtYmVyXCIpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGVtcGxhdGUgZW5naW5lIG11c3QgcmV0dXJuIGFuIGFycmF5IG9mIERPTSBub2Rlc1wiKTtcblxuICAgICAgICB2YXIgaGF2ZUFkZGVkTm9kZXNUb1BhcmVudCA9IGZhbHNlO1xuICAgICAgICBzd2l0Y2ggKHJlbmRlck1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJyZXBsYWNlQ2hpbGRyZW5cIjpcbiAgICAgICAgICAgICAgICBrby52aXJ0dWFsRWxlbWVudHMuc2V0RG9tTm9kZUNoaWxkcmVuKHRhcmdldE5vZGVPck5vZGVBcnJheSwgcmVuZGVyZWROb2Rlc0FycmF5KTtcbiAgICAgICAgICAgICAgICBoYXZlQWRkZWROb2Rlc1RvUGFyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJyZXBsYWNlTm9kZVwiOlxuICAgICAgICAgICAgICAgIGtvLnV0aWxzLnJlcGxhY2VEb21Ob2Rlcyh0YXJnZXROb2RlT3JOb2RlQXJyYXksIHJlbmRlcmVkTm9kZXNBcnJheSk7XG4gICAgICAgICAgICAgICAgaGF2ZUFkZGVkTm9kZXNUb1BhcmVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWdub3JlVGFyZ2V0Tm9kZVwiOiBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biByZW5kZXJNb2RlOiBcIiArIHJlbmRlck1vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhdmVBZGRlZE5vZGVzVG9QYXJlbnQpIHtcbiAgICAgICAgICAgIGFjdGl2YXRlQmluZGluZ3NPbkNvbnRpbnVvdXNOb2RlQXJyYXkocmVuZGVyZWROb2Rlc0FycmF5LCBiaW5kaW5nQ29udGV4dCk7XG4gICAgICAgICAgICBpZiAob3B0aW9uc1snYWZ0ZXJSZW5kZXInXSlcbiAgICAgICAgICAgICAgICBrby5kZXBlbmRlbmN5RGV0ZWN0aW9uLmlnbm9yZShvcHRpb25zWydhZnRlclJlbmRlciddLCBudWxsLCBbcmVuZGVyZWROb2Rlc0FycmF5LCBiaW5kaW5nQ29udGV4dFsnJGRhdGEnXV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbmRlcmVkTm9kZXNBcnJheTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlVGVtcGxhdGVOYW1lKHRlbXBsYXRlLCBkYXRhLCBjb250ZXh0KSB7XG4gICAgICAgIC8vIFRoZSB0ZW1wbGF0ZSBjYW4gYmUgc3BlY2lmaWVkIGFzOlxuICAgICAgICBpZiAoa28uaXNPYnNlcnZhYmxlKHRlbXBsYXRlKSkge1xuICAgICAgICAgICAgLy8gMS4gQW4gb2JzZXJ2YWJsZSwgd2l0aCBzdHJpbmcgdmFsdWVcbiAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgLy8gMi4gQSBmdW5jdGlvbiBvZiAoZGF0YSwgY29udGV4dCkgcmV0dXJuaW5nIGEgc3RyaW5nXG4gICAgICAgICAgICByZXR1cm4gdGVtcGxhdGUoZGF0YSwgY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyAzLiBBIHN0cmluZ1xuICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAga28ucmVuZGVyVGVtcGxhdGUgPSBmdW5jdGlvbiAodGVtcGxhdGUsIGRhdGFPckJpbmRpbmdDb250ZXh0LCBvcHRpb25zLCB0YXJnZXROb2RlT3JOb2RlQXJyYXksIHJlbmRlck1vZGUpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGlmICgob3B0aW9uc1sndGVtcGxhdGVFbmdpbmUnXSB8fCBfdGVtcGxhdGVFbmdpbmUpID09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNldCBhIHRlbXBsYXRlIGVuZ2luZSBiZWZvcmUgY2FsbGluZyByZW5kZXJUZW1wbGF0ZVwiKTtcbiAgICAgICAgcmVuZGVyTW9kZSA9IHJlbmRlck1vZGUgfHwgXCJyZXBsYWNlQ2hpbGRyZW5cIjtcblxuICAgICAgICBpZiAodGFyZ2V0Tm9kZU9yTm9kZUFycmF5KSB7XG4gICAgICAgICAgICB2YXIgZmlyc3RUYXJnZXROb2RlID0gZ2V0Rmlyc3ROb2RlRnJvbVBvc3NpYmxlQXJyYXkodGFyZ2V0Tm9kZU9yTm9kZUFycmF5KTtcblxuICAgICAgICAgICAgdmFyIHdoZW5Ub0Rpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoIWZpcnN0VGFyZ2V0Tm9kZSkgfHwgIWtvLnV0aWxzLmRvbU5vZGVJc0F0dGFjaGVkVG9Eb2N1bWVudChmaXJzdFRhcmdldE5vZGUpOyB9OyAvLyBQYXNzaXZlIGRpc3Bvc2FsIChvbiBuZXh0IGV2YWx1YXRpb24pXG4gICAgICAgICAgICB2YXIgYWN0aXZlbHlEaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQgPSAoZmlyc3RUYXJnZXROb2RlICYmIHJlbmRlck1vZGUgPT0gXCJyZXBsYWNlTm9kZVwiKSA/IGZpcnN0VGFyZ2V0Tm9kZS5wYXJlbnROb2RlIDogZmlyc3RUYXJnZXROb2RlO1xuXG4gICAgICAgICAgICByZXR1cm4ga28uZGVwZW5kZW50T2JzZXJ2YWJsZSggLy8gU28gdGhlIERPTSBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2hlbiBhbnkgZGVwZW5kZW5jeSBjaGFuZ2VzXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgd2UndmUgZ290IGEgcHJvcGVyIGJpbmRpbmcgY29udGV4dCB0byB3b3JrIHdpdGhcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJpbmRpbmdDb250ZXh0ID0gKGRhdGFPckJpbmRpbmdDb250ZXh0ICYmIChkYXRhT3JCaW5kaW5nQ29udGV4dCBpbnN0YW5jZW9mIGtvLmJpbmRpbmdDb250ZXh0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGF0YU9yQmluZGluZ0NvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3IGtvLmJpbmRpbmdDb250ZXh0KGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUoZGF0YU9yQmluZGluZ0NvbnRleHQpKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGVOYW1lID0gcmVzb2x2ZVRlbXBsYXRlTmFtZSh0ZW1wbGF0ZSwgYmluZGluZ0NvbnRleHRbJyRkYXRhJ10sIGJpbmRpbmdDb250ZXh0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVkTm9kZXNBcnJheSA9IGV4ZWN1dGVUZW1wbGF0ZSh0YXJnZXROb2RlT3JOb2RlQXJyYXksIHJlbmRlck1vZGUsIHRlbXBsYXRlTmFtZSwgYmluZGluZ0NvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJNb2RlID09IFwicmVwbGFjZU5vZGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZU9yTm9kZUFycmF5ID0gcmVuZGVyZWROb2Rlc0FycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RUYXJnZXROb2RlID0gZ2V0Rmlyc3ROb2RlRnJvbVBvc3NpYmxlQXJyYXkodGFyZ2V0Tm9kZU9yTm9kZUFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICB7IGRpc3Bvc2VXaGVuOiB3aGVuVG9EaXNwb3NlLCBkaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQ6IGFjdGl2ZWx5RGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBXZSBkb24ndCB5ZXQgaGF2ZSBhIERPTSBub2RlIHRvIGV2YWx1YXRlLCBzbyB1c2UgYSBtZW1vIGFuZCByZW5kZXIgdGhlIHRlbXBsYXRlIGxhdGVyIHdoZW4gdGhlcmUgaXMgYSBET00gbm9kZVxuICAgICAgICAgICAgcmV0dXJuIGtvLm1lbW9pemF0aW9uLm1lbW9pemUoZnVuY3Rpb24gKGRvbU5vZGUpIHtcbiAgICAgICAgICAgICAgICBrby5yZW5kZXJUZW1wbGF0ZSh0ZW1wbGF0ZSwgZGF0YU9yQmluZGluZ0NvbnRleHQsIG9wdGlvbnMsIGRvbU5vZGUsIFwicmVwbGFjZU5vZGVcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBrby5yZW5kZXJUZW1wbGF0ZUZvckVhY2ggPSBmdW5jdGlvbiAodGVtcGxhdGUsIGFycmF5T3JPYnNlcnZhYmxlQXJyYXksIG9wdGlvbnMsIHRhcmdldE5vZGUsIHBhcmVudEJpbmRpbmdDb250ZXh0KSB7XG4gICAgICAgIC8vIFNpbmNlIHNldERvbU5vZGVDaGlsZHJlbkZyb21BcnJheU1hcHBpbmcgYWx3YXlzIGNhbGxzIGV4ZWN1dGVUZW1wbGF0ZUZvckFycmF5SXRlbSBhbmQgdGhlblxuICAgICAgICAvLyBhY3RpdmF0ZUJpbmRpbmdzQ2FsbGJhY2sgZm9yIGFkZGVkIGl0ZW1zLCB3ZSBjYW4gc3RvcmUgdGhlIGJpbmRpbmcgY29udGV4dCBpbiB0aGUgZm9ybWVyIHRvIHVzZSBpbiB0aGUgbGF0dGVyLlxuICAgICAgICB2YXIgYXJyYXlJdGVtQ29udGV4dDtcblxuICAgICAgICAvLyBUaGlzIHdpbGwgYmUgY2FsbGVkIGJ5IHNldERvbU5vZGVDaGlsZHJlbkZyb21BcnJheU1hcHBpbmcgdG8gZ2V0IHRoZSBub2RlcyB0byBhZGQgdG8gdGFyZ2V0Tm9kZVxuICAgICAgICB2YXIgZXhlY3V0ZVRlbXBsYXRlRm9yQXJyYXlJdGVtID0gZnVuY3Rpb24gKGFycmF5VmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgICAvLyBTdXBwb3J0IHNlbGVjdGluZyB0ZW1wbGF0ZSBhcyBhIGZ1bmN0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIHJlbmRlcmVkXG4gICAgICAgICAgICBhcnJheUl0ZW1Db250ZXh0ID0gcGFyZW50QmluZGluZ0NvbnRleHRbJ2NyZWF0ZUNoaWxkQ29udGV4dCddKGFycmF5VmFsdWUsIG9wdGlvbnNbJ2FzJ10sIGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0WyckaW5kZXgnXSA9IGluZGV4O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHZhciB0ZW1wbGF0ZU5hbWUgPSByZXNvbHZlVGVtcGxhdGVOYW1lKHRlbXBsYXRlLCBhcnJheVZhbHVlLCBhcnJheUl0ZW1Db250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBleGVjdXRlVGVtcGxhdGUobnVsbCwgXCJpZ25vcmVUYXJnZXROb2RlXCIsIHRlbXBsYXRlTmFtZSwgYXJyYXlJdGVtQ29udGV4dCwgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGlzIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHNldERvbU5vZGVDaGlsZHJlbkZyb21BcnJheU1hcHBpbmcgaGFzIGFkZGVkIG5vZGVzIHRvIHRhcmdldE5vZGVcbiAgICAgICAgdmFyIGFjdGl2YXRlQmluZGluZ3NDYWxsYmFjayA9IGZ1bmN0aW9uKGFycmF5VmFsdWUsIGFkZGVkTm9kZXNBcnJheSwgaW5kZXgpIHtcbiAgICAgICAgICAgIGFjdGl2YXRlQmluZGluZ3NPbkNvbnRpbnVvdXNOb2RlQXJyYXkoYWRkZWROb2Rlc0FycmF5LCBhcnJheUl0ZW1Db250ZXh0KTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zWydhZnRlclJlbmRlciddKVxuICAgICAgICAgICAgICAgIG9wdGlvbnNbJ2FmdGVyUmVuZGVyJ10oYWRkZWROb2Rlc0FycmF5LCBhcnJheVZhbHVlKTtcblxuICAgICAgICAgICAgLy8gcmVsZWFzZSB0aGUgXCJjYWNoZVwiIHZhcmlhYmxlLCBzbyB0aGF0IGl0IGNhbiBiZSBjb2xsZWN0ZWQgYnlcbiAgICAgICAgICAgIC8vIHRoZSBHQyB3aGVuIGl0cyB2YWx1ZSBpc24ndCB1c2VkIGZyb20gd2l0aGluIHRoZSBiaW5kaW5ncyBhbnltb3JlLlxuICAgICAgICAgICAgYXJyYXlJdGVtQ29udGV4dCA9IG51bGw7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGtvLmRlcGVuZGVudE9ic2VydmFibGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHVud3JhcHBlZEFycmF5ID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShhcnJheU9yT2JzZXJ2YWJsZUFycmF5KSB8fCBbXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdW53cmFwcGVkQXJyYXkubGVuZ3RoID09IFwidW5kZWZpbmVkXCIpIC8vIENvZXJjZSBzaW5nbGUgdmFsdWUgaW50byBhcnJheVxuICAgICAgICAgICAgICAgIHVud3JhcHBlZEFycmF5ID0gW3Vud3JhcHBlZEFycmF5XTtcblxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBhbnkgZW50cmllcyBtYXJrZWQgYXMgZGVzdHJveWVkXG4gICAgICAgICAgICB2YXIgZmlsdGVyZWRBcnJheSA9IGtvLnV0aWxzLmFycmF5RmlsdGVyKHVud3JhcHBlZEFycmF5LCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNbJ2luY2x1ZGVEZXN0cm95ZWQnXSB8fCBpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCB8fCAha28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShpdGVtWydfZGVzdHJveSddKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBDYWxsIHNldERvbU5vZGVDaGlsZHJlbkZyb21BcnJheU1hcHBpbmcsIGlnbm9yaW5nIGFueSBvYnNlcnZhYmxlcyB1bndyYXBwZWQgd2l0aGluIChtb3N0IGxpa2VseSBmcm9tIGEgY2FsbGJhY2sgZnVuY3Rpb24pLlxuICAgICAgICAgICAgLy8gSWYgdGhlIGFycmF5IGl0ZW1zIGFyZSBvYnNlcnZhYmxlcywgdGhvdWdoLCB0aGV5IHdpbGwgYmUgdW53cmFwcGVkIGluIGV4ZWN1dGVUZW1wbGF0ZUZvckFycmF5SXRlbSBhbmQgbWFuYWdlZCB3aXRoaW4gc2V0RG9tTm9kZUNoaWxkcmVuRnJvbUFycmF5TWFwcGluZy5cbiAgICAgICAgICAgIGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24uaWdub3JlKGtvLnV0aWxzLnNldERvbU5vZGVDaGlsZHJlbkZyb21BcnJheU1hcHBpbmcsIG51bGwsIFt0YXJnZXROb2RlLCBmaWx0ZXJlZEFycmF5LCBleGVjdXRlVGVtcGxhdGVGb3JBcnJheUl0ZW0sIG9wdGlvbnMsIGFjdGl2YXRlQmluZGluZ3NDYWxsYmFja10pO1xuXG4gICAgICAgIH0sIG51bGwsIHsgZGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkOiB0YXJnZXROb2RlIH0pO1xuICAgIH07XG5cbiAgICB2YXIgdGVtcGxhdGVDb21wdXRlZERvbURhdGFLZXkgPSBrby51dGlscy5kb21EYXRhLm5leHRLZXkoKTtcbiAgICBmdW5jdGlvbiBkaXNwb3NlT2xkQ29tcHV0ZWRBbmRTdG9yZU5ld09uZShlbGVtZW50LCBuZXdDb21wdXRlZCkge1xuICAgICAgICB2YXIgb2xkQ29tcHV0ZWQgPSBrby51dGlscy5kb21EYXRhLmdldChlbGVtZW50LCB0ZW1wbGF0ZUNvbXB1dGVkRG9tRGF0YUtleSk7XG4gICAgICAgIGlmIChvbGRDb21wdXRlZCAmJiAodHlwZW9mKG9sZENvbXB1dGVkLmRpc3Bvc2UpID09ICdmdW5jdGlvbicpKVxuICAgICAgICAgICAgb2xkQ29tcHV0ZWQuZGlzcG9zZSgpO1xuICAgICAgICBrby51dGlscy5kb21EYXRhLnNldChlbGVtZW50LCB0ZW1wbGF0ZUNvbXB1dGVkRG9tRGF0YUtleSwgKG5ld0NvbXB1dGVkICYmIG5ld0NvbXB1dGVkLmlzQWN0aXZlKCkpID8gbmV3Q29tcHV0ZWQgOiB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIGtvLmJpbmRpbmdIYW5kbGVyc1sndGVtcGxhdGUnXSA9IHtcbiAgICAgICAgJ2luaXQnOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZUFjY2Vzc29yKSB7XG4gICAgICAgICAgICAvLyBTdXBwb3J0IGFub255bW91cyB0ZW1wbGF0ZXNcbiAgICAgICAgICAgIHZhciBiaW5kaW5nVmFsdWUgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKHZhbHVlQWNjZXNzb3IoKSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGJpbmRpbmdWYWx1ZSA9PSBcInN0cmluZ1wiIHx8IGJpbmRpbmdWYWx1ZVsnbmFtZSddKSB7XG4gICAgICAgICAgICAgICAgLy8gSXQncyBhIG5hbWVkIHRlbXBsYXRlIC0gY2xlYXIgdGhlIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBrby52aXJ0dWFsRWxlbWVudHMuZW1wdHlOb2RlKGVsZW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgnbm9kZXMnIGluIGJpbmRpbmdWYWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGJlZW4gZ2l2ZW4gYW4gYXJyYXkgb2YgRE9NIG5vZGVzLiBTYXZlIHRoZW0gYXMgdGhlIHRlbXBsYXRlIHNvdXJjZS5cbiAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBubyBrbm93biB1c2UgY2FzZSBmb3IgdGhlIG5vZGUgYXJyYXkgYmVpbmcgYW4gb2JzZXJ2YWJsZSBhcnJheSAoaWYgdGhlIG91dHB1dFxuICAgICAgICAgICAgICAgIC8vIHZhcmllcywgcHV0IHRoYXQgYmVoYXZpb3IgKmludG8qIHlvdXIgdGVtcGxhdGUgLSB0aGF0J3Mgd2hhdCB0ZW1wbGF0ZXMgYXJlIGZvciksIGFuZFxuICAgICAgICAgICAgICAgIC8vIHRoZSBpbXBsZW1lbnRhdGlvbiB3b3VsZCBiZSBhIG1lc3MsIHNvIGFzc2VydCB0aGF0IGl0J3Mgbm90IG9ic2VydmFibGUuXG4gICAgICAgICAgICAgICAgdmFyIG5vZGVzID0gYmluZGluZ1ZhbHVlWydub2RlcyddIHx8IFtdO1xuICAgICAgICAgICAgICAgIGlmIChrby5pc09ic2VydmFibGUobm9kZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFwibm9kZXNcIiBvcHRpb24gbXVzdCBiZSBhIHBsYWluLCBub24tb2JzZXJ2YWJsZSBhcnJheS4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGtvLnV0aWxzLm1vdmVDbGVhbmVkTm9kZXNUb0NvbnRhaW5lckVsZW1lbnQobm9kZXMpOyAvLyBUaGlzIGFsc28gcmVtb3ZlcyB0aGUgbm9kZXMgZnJvbSB0aGVpciBjdXJyZW50IHBhcmVudFxuICAgICAgICAgICAgICAgIG5ldyBrby50ZW1wbGF0ZVNvdXJjZXMuYW5vbnltb3VzVGVtcGxhdGUoZWxlbWVudClbJ25vZGVzJ10oY29udGFpbmVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSXQncyBhbiBhbm9ueW1vdXMgdGVtcGxhdGUgLSBzdG9yZSB0aGUgZWxlbWVudCBjb250ZW50cywgdGhlbiBjbGVhciB0aGUgZWxlbWVudFxuICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZU5vZGVzID0ga28udmlydHVhbEVsZW1lbnRzLmNoaWxkTm9kZXMoZWxlbWVudCksXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IGtvLnV0aWxzLm1vdmVDbGVhbmVkTm9kZXNUb0NvbnRhaW5lckVsZW1lbnQodGVtcGxhdGVOb2Rlcyk7IC8vIFRoaXMgYWxzbyByZW1vdmVzIHRoZSBub2RlcyBmcm9tIHRoZWlyIGN1cnJlbnQgcGFyZW50XG4gICAgICAgICAgICAgICAgbmV3IGtvLnRlbXBsYXRlU291cmNlcy5hbm9ueW1vdXNUZW1wbGF0ZShlbGVtZW50KVsnbm9kZXMnXShjb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgJ2NvbnRyb2xzRGVzY2VuZGFudEJpbmRpbmdzJzogdHJ1ZSB9O1xuICAgICAgICB9LFxuICAgICAgICAndXBkYXRlJzogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IsIGFsbEJpbmRpbmdzLCB2aWV3TW9kZWwsIGJpbmRpbmdDb250ZXh0KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZUFjY2Vzc29yKCksXG4gICAgICAgICAgICAgICAgZGF0YVZhbHVlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKHZhbHVlKSxcbiAgICAgICAgICAgICAgICBzaG91bGREaXNwbGF5ID0gdHJ1ZSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbXB1dGVkID0gbnVsbCxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU5hbWU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGVOYW1lID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU5hbWUgPSBvcHRpb25zWyduYW1lJ107XG5cbiAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IFwiaWZcIi9cImlmbm90XCIgY29uZGl0aW9uc1xuICAgICAgICAgICAgICAgIGlmICgnaWYnIGluIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZERpc3BsYXkgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKG9wdGlvbnNbJ2lmJ10pO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREaXNwbGF5ICYmICdpZm5vdCcgaW4gb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkRGlzcGxheSA9ICFrby51dGlscy51bndyYXBPYnNlcnZhYmxlKG9wdGlvbnNbJ2lmbm90J10pO1xuXG4gICAgICAgICAgICAgICAgZGF0YVZhbHVlID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShvcHRpb25zWydkYXRhJ10pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoJ2ZvcmVhY2gnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAvLyBSZW5kZXIgb25jZSBmb3IgZWFjaCBkYXRhIHBvaW50ICh0cmVhdGluZyBkYXRhIHNldCBhcyBlbXB0eSBpZiBzaG91bGREaXNwbGF5PT1mYWxzZSlcbiAgICAgICAgICAgICAgICB2YXIgZGF0YUFycmF5ID0gKHNob3VsZERpc3BsYXkgJiYgb3B0aW9uc1snZm9yZWFjaCddKSB8fCBbXTtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbXB1dGVkID0ga28ucmVuZGVyVGVtcGxhdGVGb3JFYWNoKHRlbXBsYXRlTmFtZSB8fCBlbGVtZW50LCBkYXRhQXJyYXksIG9wdGlvbnMsIGVsZW1lbnQsIGJpbmRpbmdDb250ZXh0KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNob3VsZERpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICBrby52aXJ0dWFsRWxlbWVudHMuZW1wdHlOb2RlKGVsZW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBSZW5kZXIgb25jZSBmb3IgdGhpcyBzaW5nbGUgZGF0YSBwb2ludCAob3IgdXNlIHRoZSB2aWV3TW9kZWwgaWYgbm8gZGF0YSB3YXMgcHJvdmlkZWQpXG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQmluZGluZ0NvbnRleHQgPSAoJ2RhdGEnIGluIG9wdGlvbnMpID9cbiAgICAgICAgICAgICAgICAgICAgYmluZGluZ0NvbnRleHRbJ2NyZWF0ZUNoaWxkQ29udGV4dCddKGRhdGFWYWx1ZSwgb3B0aW9uc1snYXMnXSkgOiAgLy8gR2l2ZW4gYW4gZXhwbGl0aXQgJ2RhdGEnIHZhbHVlLCB3ZSBjcmVhdGUgYSBjaGlsZCBiaW5kaW5nIGNvbnRleHQgZm9yIGl0XG4gICAgICAgICAgICAgICAgICAgIGJpbmRpbmdDb250ZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2l2ZW4gbm8gZXhwbGljaXQgJ2RhdGEnIHZhbHVlLCB3ZSByZXRhaW4gdGhlIHNhbWUgYmluZGluZyBjb250ZXh0XG4gICAgICAgICAgICAgICAgdGVtcGxhdGVDb21wdXRlZCA9IGtvLnJlbmRlclRlbXBsYXRlKHRlbXBsYXRlTmFtZSB8fCBlbGVtZW50LCBpbm5lckJpbmRpbmdDb250ZXh0LCBvcHRpb25zLCBlbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSXQgb25seSBtYWtlcyBzZW5zZSB0byBoYXZlIGEgc2luZ2xlIHRlbXBsYXRlIGNvbXB1dGVkIHBlciBlbGVtZW50IChvdGhlcndpc2Ugd2hpY2ggb25lIHNob3VsZCBoYXZlIGl0cyBvdXRwdXQgZGlzcGxheWVkPylcbiAgICAgICAgICAgIGRpc3Bvc2VPbGRDb21wdXRlZEFuZFN0b3JlTmV3T25lKGVsZW1lbnQsIHRlbXBsYXRlQ29tcHV0ZWQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIEFub255bW91cyB0ZW1wbGF0ZXMgY2FuJ3QgYmUgcmV3cml0dGVuLiBHaXZlIGEgbmljZSBlcnJvciBtZXNzYWdlIGlmIHlvdSB0cnkgdG8gZG8gaXQuXG4gICAga28uZXhwcmVzc2lvblJld3JpdGluZy5iaW5kaW5nUmV3cml0ZVZhbGlkYXRvcnNbJ3RlbXBsYXRlJ10gPSBmdW5jdGlvbihiaW5kaW5nVmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnNlZEJpbmRpbmdWYWx1ZSA9IGtvLmV4cHJlc3Npb25SZXdyaXRpbmcucGFyc2VPYmplY3RMaXRlcmFsKGJpbmRpbmdWYWx1ZSk7XG5cbiAgICAgICAgaWYgKChwYXJzZWRCaW5kaW5nVmFsdWUubGVuZ3RoID09IDEpICYmIHBhcnNlZEJpbmRpbmdWYWx1ZVswXVsndW5rbm93biddKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIEl0IGxvb2tzIGxpa2UgYSBzdHJpbmcgbGl0ZXJhbCwgbm90IGFuIG9iamVjdCBsaXRlcmFsLCBzbyB0cmVhdCBpdCBhcyBhIG5hbWVkIHRlbXBsYXRlICh3aGljaCBpcyBhbGxvd2VkIGZvciByZXdyaXRpbmcpXG5cbiAgICAgICAgaWYgKGtvLmV4cHJlc3Npb25SZXdyaXRpbmcua2V5VmFsdWVBcnJheUNvbnRhaW5zS2V5KHBhcnNlZEJpbmRpbmdWYWx1ZSwgXCJuYW1lXCIpKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIE5hbWVkIHRlbXBsYXRlcyBjYW4gYmUgcmV3cml0dGVuLCBzbyByZXR1cm4gXCJubyBlcnJvclwiXG4gICAgICAgIHJldHVybiBcIlRoaXMgdGVtcGxhdGUgZW5naW5lIGRvZXMgbm90IHN1cHBvcnQgYW5vbnltb3VzIHRlbXBsYXRlcyBuZXN0ZWQgd2l0aGluIGl0cyB0ZW1wbGF0ZXNcIjtcbiAgICB9O1xuXG4gICAga28udmlydHVhbEVsZW1lbnRzLmFsbG93ZWRCaW5kaW5nc1sndGVtcGxhdGUnXSA9IHRydWU7XG59KSgpO1xuXG5rby5leHBvcnRTeW1ib2woJ3NldFRlbXBsYXRlRW5naW5lJywga28uc2V0VGVtcGxhdGVFbmdpbmUpO1xua28uZXhwb3J0U3ltYm9sKCdyZW5kZXJUZW1wbGF0ZScsIGtvLnJlbmRlclRlbXBsYXRlKTtcbi8vIEdvIHRocm91Z2ggdGhlIGl0ZW1zIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIGFuZCBkZWxldGVkIGFuZCB0cnkgdG8gZmluZCBtYXRjaGVzIGJldHdlZW4gdGhlbS5cbmtvLnV0aWxzLmZpbmRNb3Zlc0luQXJyYXlDb21wYXJpc29uID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0LCBsaW1pdEZhaWxlZENvbXBhcmVzKSB7XG4gICAgaWYgKGxlZnQubGVuZ3RoICYmIHJpZ2h0Lmxlbmd0aCkge1xuICAgICAgICB2YXIgZmFpbGVkQ29tcGFyZXMsIGwsIHIsIGxlZnRJdGVtLCByaWdodEl0ZW07XG4gICAgICAgIGZvciAoZmFpbGVkQ29tcGFyZXMgPSBsID0gMDsgKCFsaW1pdEZhaWxlZENvbXBhcmVzIHx8IGZhaWxlZENvbXBhcmVzIDwgbGltaXRGYWlsZWRDb21wYXJlcykgJiYgKGxlZnRJdGVtID0gbGVmdFtsXSk7ICsrbCkge1xuICAgICAgICAgICAgZm9yIChyID0gMDsgcmlnaHRJdGVtID0gcmlnaHRbcl07ICsrcikge1xuICAgICAgICAgICAgICAgIGlmIChsZWZ0SXRlbVsndmFsdWUnXSA9PT0gcmlnaHRJdGVtWyd2YWx1ZSddKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtWydtb3ZlZCddID0gcmlnaHRJdGVtWydpbmRleCddO1xuICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1bJ21vdmVkJ10gPSBsZWZ0SXRlbVsnaW5kZXgnXTtcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQuc3BsaWNlKHIsIDEpOyAgICAgICAgIC8vIFRoaXMgaXRlbSBpcyBtYXJrZWQgYXMgbW92ZWQ7IHNvIHJlbW92ZSBpdCBmcm9tIHJpZ2h0IGxpc3RcbiAgICAgICAgICAgICAgICAgICAgZmFpbGVkQ29tcGFyZXMgPSByID0gMDsgICAgIC8vIFJlc2V0IGZhaWxlZCBjb21wYXJlcyBjb3VudCBiZWNhdXNlIHdlJ3JlIGNoZWNraW5nIGZvciBjb25zZWN1dGl2ZSBmYWlsdXJlc1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmYWlsZWRDb21wYXJlcyArPSByO1xuICAgICAgICB9XG4gICAgfVxufTtcblxua28udXRpbHMuY29tcGFyZUFycmF5cyA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0YXR1c05vdEluT2xkID0gJ2FkZGVkJywgc3RhdHVzTm90SW5OZXcgPSAnZGVsZXRlZCc7XG5cbiAgICAvLyBTaW1wbGUgY2FsY3VsYXRpb24gYmFzZWQgb24gTGV2ZW5zaHRlaW4gZGlzdGFuY2UuXG4gICAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyhvbGRBcnJheSwgbmV3QXJyYXksIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGlmIHRoZSB0aGlyZCBhcmcgaXMgYWN0dWFsbHkgYSBib29sLCBpbnRlcnByZXRcbiAgICAgICAgLy8gaXQgYXMgdGhlIG9sZCBwYXJhbWV0ZXIgJ2RvbnRMaW1pdE1vdmVzJy4gTmV3ZXIgY29kZSBzaG91bGQgdXNlIHsgZG9udExpbWl0TW92ZXM6IHRydWUgfS5cbiAgICAgICAgb3B0aW9ucyA9ICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Jvb2xlYW4nKSA/IHsgJ2RvbnRMaW1pdE1vdmVzJzogb3B0aW9ucyB9IDogKG9wdGlvbnMgfHwge30pO1xuICAgICAgICBvbGRBcnJheSA9IG9sZEFycmF5IHx8IFtdO1xuICAgICAgICBuZXdBcnJheSA9IG5ld0FycmF5IHx8IFtdO1xuXG4gICAgICAgIGlmIChvbGRBcnJheS5sZW5ndGggPCBuZXdBcnJheS5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gY29tcGFyZVNtYWxsQXJyYXlUb0JpZ0FycmF5KG9sZEFycmF5LCBuZXdBcnJheSwgc3RhdHVzTm90SW5PbGQsIHN0YXR1c05vdEluTmV3LCBvcHRpb25zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVTbWFsbEFycmF5VG9CaWdBcnJheShuZXdBcnJheSwgb2xkQXJyYXksIHN0YXR1c05vdEluTmV3LCBzdGF0dXNOb3RJbk9sZCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcGFyZVNtYWxsQXJyYXlUb0JpZ0FycmF5KHNtbEFycmF5LCBiaWdBcnJheSwgc3RhdHVzTm90SW5TbWwsIHN0YXR1c05vdEluQmlnLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBteU1pbiA9IE1hdGgubWluLFxuICAgICAgICAgICAgbXlNYXggPSBNYXRoLm1heCxcbiAgICAgICAgICAgIGVkaXREaXN0YW5jZU1hdHJpeCA9IFtdLFxuICAgICAgICAgICAgc21sSW5kZXgsIHNtbEluZGV4TWF4ID0gc21sQXJyYXkubGVuZ3RoLFxuICAgICAgICAgICAgYmlnSW5kZXgsIGJpZ0luZGV4TWF4ID0gYmlnQXJyYXkubGVuZ3RoLFxuICAgICAgICAgICAgY29tcGFyZVJhbmdlID0gKGJpZ0luZGV4TWF4IC0gc21sSW5kZXhNYXgpIHx8IDEsXG4gICAgICAgICAgICBtYXhEaXN0YW5jZSA9IHNtbEluZGV4TWF4ICsgYmlnSW5kZXhNYXggKyAxLFxuICAgICAgICAgICAgdGhpc1JvdywgbGFzdFJvdyxcbiAgICAgICAgICAgIGJpZ0luZGV4TWF4Rm9yUm93LCBiaWdJbmRleE1pbkZvclJvdztcblxuICAgICAgICBmb3IgKHNtbEluZGV4ID0gMDsgc21sSW5kZXggPD0gc21sSW5kZXhNYXg7IHNtbEluZGV4KyspIHtcbiAgICAgICAgICAgIGxhc3RSb3cgPSB0aGlzUm93O1xuICAgICAgICAgICAgZWRpdERpc3RhbmNlTWF0cml4LnB1c2godGhpc1JvdyA9IFtdKTtcbiAgICAgICAgICAgIGJpZ0luZGV4TWF4Rm9yUm93ID0gbXlNaW4oYmlnSW5kZXhNYXgsIHNtbEluZGV4ICsgY29tcGFyZVJhbmdlKTtcbiAgICAgICAgICAgIGJpZ0luZGV4TWluRm9yUm93ID0gbXlNYXgoMCwgc21sSW5kZXggLSAxKTtcbiAgICAgICAgICAgIGZvciAoYmlnSW5kZXggPSBiaWdJbmRleE1pbkZvclJvdzsgYmlnSW5kZXggPD0gYmlnSW5kZXhNYXhGb3JSb3c7IGJpZ0luZGV4KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIWJpZ0luZGV4KVxuICAgICAgICAgICAgICAgICAgICB0aGlzUm93W2JpZ0luZGV4XSA9IHNtbEluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghc21sSW5kZXgpICAvLyBUb3Agcm93IC0gdHJhbnNmb3JtIGVtcHR5IGFycmF5IGludG8gbmV3IGFycmF5IHZpYSBhZGRpdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgdGhpc1Jvd1tiaWdJbmRleF0gPSBiaWdJbmRleCArIDE7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc21sQXJyYXlbc21sSW5kZXggLSAxXSA9PT0gYmlnQXJyYXlbYmlnSW5kZXggLSAxXSlcbiAgICAgICAgICAgICAgICAgICAgdGhpc1Jvd1tiaWdJbmRleF0gPSBsYXN0Um93W2JpZ0luZGV4IC0gMV07ICAgICAgICAgICAgICAgICAgLy8gY29weSB2YWx1ZSAobm8gZWRpdClcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5vcnRoRGlzdGFuY2UgPSBsYXN0Um93W2JpZ0luZGV4XSB8fCBtYXhEaXN0YW5jZTsgICAgICAgLy8gbm90IGluIGJpZyAoZGVsZXRpb24pXG4gICAgICAgICAgICAgICAgICAgIHZhciB3ZXN0RGlzdGFuY2UgPSB0aGlzUm93W2JpZ0luZGV4IC0gMV0gfHwgbWF4RGlzdGFuY2U7ICAgIC8vIG5vdCBpbiBzbWFsbCAoYWRkaXRpb24pXG4gICAgICAgICAgICAgICAgICAgIHRoaXNSb3dbYmlnSW5kZXhdID0gbXlNaW4obm9ydGhEaXN0YW5jZSwgd2VzdERpc3RhbmNlKSArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVkaXRTY3JpcHQgPSBbXSwgbWVNaW51c09uZSwgbm90SW5TbWwgPSBbXSwgbm90SW5CaWcgPSBbXTtcbiAgICAgICAgZm9yIChzbWxJbmRleCA9IHNtbEluZGV4TWF4LCBiaWdJbmRleCA9IGJpZ0luZGV4TWF4OyBzbWxJbmRleCB8fCBiaWdJbmRleDspIHtcbiAgICAgICAgICAgIG1lTWludXNPbmUgPSBlZGl0RGlzdGFuY2VNYXRyaXhbc21sSW5kZXhdW2JpZ0luZGV4XSAtIDE7XG4gICAgICAgICAgICBpZiAoYmlnSW5kZXggJiYgbWVNaW51c09uZSA9PT0gZWRpdERpc3RhbmNlTWF0cml4W3NtbEluZGV4XVtiaWdJbmRleC0xXSkge1xuICAgICAgICAgICAgICAgIG5vdEluU21sLnB1c2goZWRpdFNjcmlwdFtlZGl0U2NyaXB0Lmxlbmd0aF0gPSB7ICAgICAvLyBhZGRlZFxuICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJzogc3RhdHVzTm90SW5TbWwsXG4gICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IGJpZ0FycmF5Wy0tYmlnSW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICAnaW5kZXgnOiBiaWdJbmRleCB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc21sSW5kZXggJiYgbWVNaW51c09uZSA9PT0gZWRpdERpc3RhbmNlTWF0cml4W3NtbEluZGV4IC0gMV1bYmlnSW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgbm90SW5CaWcucHVzaChlZGl0U2NyaXB0W2VkaXRTY3JpcHQubGVuZ3RoXSA9IHsgICAgIC8vIGRlbGV0ZWRcbiAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cyc6IHN0YXR1c05vdEluQmlnLFxuICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiBzbWxBcnJheVstLXNtbEluZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgJ2luZGV4Jzogc21sSW5kZXggfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC0tYmlnSW5kZXg7XG4gICAgICAgICAgICAgICAgLS1zbWxJbmRleDtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnNbJ3NwYXJzZSddKSB7XG4gICAgICAgICAgICAgICAgICAgIGVkaXRTY3JpcHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJzogXCJyZXRhaW5lZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogYmlnQXJyYXlbYmlnSW5kZXhdIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgbm9uLW1hdGNoaW5nIGNvbXBhcmlzb25zOyBoYXZpbmcgaXQgYSBtdWx0aXBsZSBvZlxuICAgICAgICAvLyBzbWxJbmRleE1heCBrZWVwcyB0aGUgdGltZSBjb21wbGV4aXR5IG9mIHRoaXMgYWxnb3JpdGhtIGxpbmVhci5cbiAgICAgICAga28udXRpbHMuZmluZE1vdmVzSW5BcnJheUNvbXBhcmlzb24obm90SW5CaWcsIG5vdEluU21sLCAhb3B0aW9uc1snZG9udExpbWl0TW92ZXMnXSAmJiBzbWxJbmRleE1heCAqIDEwKTtcblxuICAgICAgICByZXR1cm4gZWRpdFNjcmlwdC5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVBcnJheXM7XG59KSgpO1xuXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLmNvbXBhcmVBcnJheXMnLCBrby51dGlscy5jb21wYXJlQXJyYXlzKTtcbihmdW5jdGlvbiAoKSB7XG4gICAgLy8gT2JqZWN0aXZlOlxuICAgIC8vICogR2l2ZW4gYW4gaW5wdXQgYXJyYXksIGEgY29udGFpbmVyIERPTSBub2RlLCBhbmQgYSBmdW5jdGlvbiBmcm9tIGFycmF5IGVsZW1lbnRzIHRvIGFycmF5cyBvZiBET00gbm9kZXMsXG4gICAgLy8gICBtYXAgdGhlIGFycmF5IGVsZW1lbnRzIHRvIGFycmF5cyBvZiBET00gbm9kZXMsIGNvbmNhdGVuYXRlIHRvZ2V0aGVyIGFsbCB0aGVzZSBhcnJheXMsIGFuZCB1c2UgdGhlbSB0byBwb3B1bGF0ZSB0aGUgY29udGFpbmVyIERPTSBub2RlXG4gICAgLy8gKiBOZXh0IHRpbWUgd2UncmUgZ2l2ZW4gdGhlIHNhbWUgY29tYmluYXRpb24gb2YgdGhpbmdzICh3aXRoIHRoZSBhcnJheSBwb3NzaWJseSBoYXZpbmcgbXV0YXRlZCksIHVwZGF0ZSB0aGUgY29udGFpbmVyIERPTSBub2RlXG4gICAgLy8gICBzbyB0aGF0IGl0cyBjaGlsZHJlbiBpcyBhZ2FpbiB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgbWFwcGluZ3Mgb2YgdGhlIGFycmF5IGVsZW1lbnRzLCBidXQgZG9uJ3QgcmUtbWFwIGFueSBhcnJheSBlbGVtZW50cyB0aGF0IHdlXG4gICAgLy8gICBwcmV2aW91c2x5IG1hcHBlZCAtIHJldGFpbiB0aG9zZSBub2RlcywgYW5kIGp1c3QgaW5zZXJ0L2RlbGV0ZSBvdGhlciBvbmVzXG5cbiAgICAvLyBcImNhbGxiYWNrQWZ0ZXJBZGRpbmdOb2Rlc1wiIHdpbGwgYmUgaW52b2tlZCBhZnRlciBhbnkgXCJtYXBwaW5nXCItZ2VuZXJhdGVkIG5vZGVzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBjb250YWluZXIgbm9kZVxuICAgIC8vIFlvdSBjYW4gdXNlIHRoaXMsIGZvciBleGFtcGxlLCB0byBhY3RpdmF0ZSBiaW5kaW5ncyBvbiB0aG9zZSBub2Rlcy5cblxuICAgIGZ1bmN0aW9uIG1hcE5vZGVBbmRSZWZyZXNoV2hlbkNoYW5nZWQoY29udGFpbmVyTm9kZSwgbWFwcGluZywgdmFsdWVUb01hcCwgY2FsbGJhY2tBZnRlckFkZGluZ05vZGVzLCBpbmRleCkge1xuICAgICAgICAvLyBNYXAgdGhpcyBhcnJheSB2YWx1ZSBpbnNpZGUgYSBkZXBlbmRlbnRPYnNlcnZhYmxlIHNvIHdlIHJlLW1hcCB3aGVuIGFueSBkZXBlbmRlbmN5IGNoYW5nZXNcbiAgICAgICAgdmFyIG1hcHBlZE5vZGVzID0gW107XG4gICAgICAgIHZhciBkZXBlbmRlbnRPYnNlcnZhYmxlID0ga28uZGVwZW5kZW50T2JzZXJ2YWJsZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBuZXdNYXBwZWROb2RlcyA9IG1hcHBpbmcodmFsdWVUb01hcCwgaW5kZXgsIGtvLnV0aWxzLmZpeFVwQ29udGludW91c05vZGVBcnJheShtYXBwZWROb2RlcywgY29udGFpbmVyTm9kZSkpIHx8IFtdO1xuXG4gICAgICAgICAgICAvLyBPbiBzdWJzZXF1ZW50IGV2YWx1YXRpb25zLCBqdXN0IHJlcGxhY2UgdGhlIHByZXZpb3VzbHktaW5zZXJ0ZWQgRE9NIG5vZGVzXG4gICAgICAgICAgICBpZiAobWFwcGVkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGtvLnV0aWxzLnJlcGxhY2VEb21Ob2RlcyhtYXBwZWROb2RlcywgbmV3TWFwcGVkTm9kZXMpO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja0FmdGVyQWRkaW5nTm9kZXMpXG4gICAgICAgICAgICAgICAgICAgIGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24uaWdub3JlKGNhbGxiYWNrQWZ0ZXJBZGRpbmdOb2RlcywgbnVsbCwgW3ZhbHVlVG9NYXAsIG5ld01hcHBlZE5vZGVzLCBpbmRleF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwcGVkTm9kZXMgYXJyYXksIHRoZXJlYnkgdXBkYXRpbmcgdGhlIHJlY29yZFxuICAgICAgICAgICAgLy8gb2Ygd2hpY2ggbm9kZXMgd291bGQgYmUgZGVsZXRlZCBpZiB2YWx1ZVRvTWFwIHdhcyBpdHNlbGYgbGF0ZXIgcmVtb3ZlZFxuICAgICAgICAgICAgbWFwcGVkTm9kZXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGtvLnV0aWxzLmFycmF5UHVzaEFsbChtYXBwZWROb2RlcywgbmV3TWFwcGVkTm9kZXMpO1xuICAgICAgICB9LCBudWxsLCB7IGRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZDogY29udGFpbmVyTm9kZSwgZGlzcG9zZVdoZW46IGZ1bmN0aW9uKCkgeyByZXR1cm4gIWtvLnV0aWxzLmFueURvbU5vZGVJc0F0dGFjaGVkVG9Eb2N1bWVudChtYXBwZWROb2Rlcyk7IH0gfSk7XG4gICAgICAgIHJldHVybiB7IG1hcHBlZE5vZGVzIDogbWFwcGVkTm9kZXMsIGRlcGVuZGVudE9ic2VydmFibGUgOiAoZGVwZW5kZW50T2JzZXJ2YWJsZS5pc0FjdGl2ZSgpID8gZGVwZW5kZW50T2JzZXJ2YWJsZSA6IHVuZGVmaW5lZCkgfTtcbiAgICB9XG5cbiAgICB2YXIgbGFzdE1hcHBpbmdSZXN1bHREb21EYXRhS2V5ID0ga28udXRpbHMuZG9tRGF0YS5uZXh0S2V5KCksXG4gICAgICAgIGRlbGV0ZWRJdGVtRHVtbXlWYWx1ZSA9IGtvLnV0aWxzLmRvbURhdGEubmV4dEtleSgpO1xuXG4gICAga28udXRpbHMuc2V0RG9tTm9kZUNoaWxkcmVuRnJvbUFycmF5TWFwcGluZyA9IGZ1bmN0aW9uIChkb21Ob2RlLCBhcnJheSwgbWFwcGluZywgb3B0aW9ucywgY2FsbGJhY2tBZnRlckFkZGluZ05vZGVzKSB7XG4gICAgICAgIC8vIENvbXBhcmUgdGhlIHByb3ZpZGVkIGFycmF5IGFnYWluc3QgdGhlIHByZXZpb3VzIG9uZVxuICAgICAgICBhcnJheSA9IGFycmF5IHx8IFtdO1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgdmFyIGlzRmlyc3RFeGVjdXRpb24gPSBrby51dGlscy5kb21EYXRhLmdldChkb21Ob2RlLCBsYXN0TWFwcGluZ1Jlc3VsdERvbURhdGFLZXkpID09PSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBsYXN0TWFwcGluZ1Jlc3VsdCA9IGtvLnV0aWxzLmRvbURhdGEuZ2V0KGRvbU5vZGUsIGxhc3RNYXBwaW5nUmVzdWx0RG9tRGF0YUtleSkgfHwgW107XG4gICAgICAgIHZhciBsYXN0QXJyYXkgPSBrby51dGlscy5hcnJheU1hcChsYXN0TWFwcGluZ1Jlc3VsdCwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguYXJyYXlFbnRyeTsgfSk7XG4gICAgICAgIHZhciBlZGl0U2NyaXB0ID0ga28udXRpbHMuY29tcGFyZUFycmF5cyhsYXN0QXJyYXksIGFycmF5LCBvcHRpb25zWydkb250TGltaXRNb3ZlcyddKTtcblxuICAgICAgICAvLyBCdWlsZCB0aGUgbmV3IG1hcHBpbmcgcmVzdWx0XG4gICAgICAgIHZhciBuZXdNYXBwaW5nUmVzdWx0ID0gW107XG4gICAgICAgIHZhciBsYXN0TWFwcGluZ1Jlc3VsdEluZGV4ID0gMDtcbiAgICAgICAgdmFyIG5ld01hcHBpbmdSZXN1bHRJbmRleCA9IDA7XG5cbiAgICAgICAgdmFyIG5vZGVzVG9EZWxldGUgPSBbXTtcbiAgICAgICAgdmFyIGl0ZW1zVG9Qcm9jZXNzID0gW107XG4gICAgICAgIHZhciBpdGVtc0ZvckJlZm9yZVJlbW92ZUNhbGxiYWNrcyA9IFtdO1xuICAgICAgICB2YXIgaXRlbXNGb3JNb3ZlQ2FsbGJhY2tzID0gW107XG4gICAgICAgIHZhciBpdGVtc0ZvckFmdGVyQWRkQ2FsbGJhY2tzID0gW107XG4gICAgICAgIHZhciBtYXBEYXRhO1xuXG4gICAgICAgIGZ1bmN0aW9uIGl0ZW1Nb3ZlZE9yUmV0YWluZWQoZWRpdFNjcmlwdEluZGV4LCBvbGRQb3NpdGlvbikge1xuICAgICAgICAgICAgbWFwRGF0YSA9IGxhc3RNYXBwaW5nUmVzdWx0W29sZFBvc2l0aW9uXTtcbiAgICAgICAgICAgIGlmIChuZXdNYXBwaW5nUmVzdWx0SW5kZXggIT09IG9sZFBvc2l0aW9uKVxuICAgICAgICAgICAgICAgIGl0ZW1zRm9yTW92ZUNhbGxiYWNrc1tlZGl0U2NyaXB0SW5kZXhdID0gbWFwRGF0YTtcbiAgICAgICAgICAgIC8vIFNpbmNlIHVwZGF0aW5nIHRoZSBpbmRleCBtaWdodCBjaGFuZ2UgdGhlIG5vZGVzLCBkbyBzbyBiZWZvcmUgY2FsbGluZyBmaXhVcENvbnRpbnVvdXNOb2RlQXJyYXlcbiAgICAgICAgICAgIG1hcERhdGEuaW5kZXhPYnNlcnZhYmxlKG5ld01hcHBpbmdSZXN1bHRJbmRleCsrKTtcbiAgICAgICAgICAgIGtvLnV0aWxzLmZpeFVwQ29udGludW91c05vZGVBcnJheShtYXBEYXRhLm1hcHBlZE5vZGVzLCBkb21Ob2RlKTtcbiAgICAgICAgICAgIG5ld01hcHBpbmdSZXN1bHQucHVzaChtYXBEYXRhKTtcbiAgICAgICAgICAgIGl0ZW1zVG9Qcm9jZXNzLnB1c2gobWFwRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjYWxsQ2FsbGJhY2soY2FsbGJhY2ssIGl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXNbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtvLnV0aWxzLmFycmF5Rm9yRWFjaChpdGVtc1tpXS5tYXBwZWROb2RlcywgZnVuY3Rpb24obm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIGksIGl0ZW1zW2ldLmFycmF5RW50cnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgZWRpdFNjcmlwdEl0ZW0sIG1vdmVkSW5kZXg7IGVkaXRTY3JpcHRJdGVtID0gZWRpdFNjcmlwdFtpXTsgaSsrKSB7XG4gICAgICAgICAgICBtb3ZlZEluZGV4ID0gZWRpdFNjcmlwdEl0ZW1bJ21vdmVkJ107XG4gICAgICAgICAgICBzd2l0Y2ggKGVkaXRTY3JpcHRJdGVtWydzdGF0dXMnXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkZWxldGVkXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb3ZlZEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcERhdGEgPSBsYXN0TWFwcGluZ1Jlc3VsdFtsYXN0TWFwcGluZ1Jlc3VsdEluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcCB0cmFja2luZyBjaGFuZ2VzIHRvIHRoZSBtYXBwaW5nIGZvciB0aGVzZSBub2Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcERhdGEuZGVwZW5kZW50T2JzZXJ2YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcERhdGEuZGVwZW5kZW50T2JzZXJ2YWJsZS5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwRGF0YS5kZXBlbmRlbnRPYnNlcnZhYmxlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBRdWV1ZSB0aGVzZSBub2RlcyBmb3IgbGF0ZXIgcmVtb3ZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtvLnV0aWxzLmZpeFVwQ29udGludW91c05vZGVBcnJheShtYXBEYXRhLm1hcHBlZE5vZGVzLCBkb21Ob2RlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uc1snYmVmb3JlUmVtb3ZlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3TWFwcGluZ1Jlc3VsdC5wdXNoKG1hcERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc1RvUHJvY2Vzcy5wdXNoKG1hcERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwRGF0YS5hcnJheUVudHJ5ID09PSBkZWxldGVkSXRlbUR1bW15VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcERhdGEgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGb3JCZWZvcmVSZW1vdmVDYWxsYmFja3NbaV0gPSBtYXBEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzVG9EZWxldGUucHVzaC5hcHBseShub2Rlc1RvRGVsZXRlLCBtYXBEYXRhLm1hcHBlZE5vZGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGFzdE1hcHBpbmdSZXN1bHRJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgXCJyZXRhaW5lZFwiOlxuICAgICAgICAgICAgICAgICAgICBpdGVtTW92ZWRPclJldGFpbmVkKGksIGxhc3RNYXBwaW5nUmVzdWx0SW5kZXgrKyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBcImFkZGVkXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb3ZlZEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1Nb3ZlZE9yUmV0YWluZWQoaSwgbW92ZWRJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXBEYXRhID0geyBhcnJheUVudHJ5OiBlZGl0U2NyaXB0SXRlbVsndmFsdWUnXSwgaW5kZXhPYnNlcnZhYmxlOiBrby5vYnNlcnZhYmxlKG5ld01hcHBpbmdSZXN1bHRJbmRleCsrKSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3TWFwcGluZ1Jlc3VsdC5wdXNoKG1hcERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNUb1Byb2Nlc3MucHVzaChtYXBEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNGaXJzdEV4ZWN1dGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0ZvckFmdGVyQWRkQ2FsbGJhY2tzW2ldID0gbWFwRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0b3JlIGEgY29weSBvZiB0aGUgYXJyYXkgaXRlbXMgd2UganVzdCBjb25zaWRlcmVkIHNvIHdlIGNhbiBkaWZmZXJlbmNlIGl0IG5leHQgdGltZVxuICAgICAgICBrby51dGlscy5kb21EYXRhLnNldChkb21Ob2RlLCBsYXN0TWFwcGluZ1Jlc3VsdERvbURhdGFLZXksIG5ld01hcHBpbmdSZXN1bHQpO1xuXG4gICAgICAgIC8vIENhbGwgYmVmb3JlTW92ZSBmaXJzdCBiZWZvcmUgYW55IGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIERPTVxuICAgICAgICBjYWxsQ2FsbGJhY2sob3B0aW9uc1snYmVmb3JlTW92ZSddLCBpdGVtc0Zvck1vdmVDYWxsYmFja3MpO1xuXG4gICAgICAgIC8vIE5leHQgcmVtb3ZlIG5vZGVzIGZvciBkZWxldGVkIGl0ZW1zIChvciBqdXN0IGNsZWFuIGlmIHRoZXJlJ3MgYSBiZWZvcmVSZW1vdmUgY2FsbGJhY2spXG4gICAgICAgIGtvLnV0aWxzLmFycmF5Rm9yRWFjaChub2Rlc1RvRGVsZXRlLCBvcHRpb25zWydiZWZvcmVSZW1vdmUnXSA/IGtvLmNsZWFuTm9kZSA6IGtvLnJlbW92ZU5vZGUpO1xuXG4gICAgICAgIC8vIE5leHQgYWRkL3Jlb3JkZXIgdGhlIHJlbWFpbmluZyBpdGVtcyAod2lsbCBpbmNsdWRlIGRlbGV0ZWQgaXRlbXMgaWYgdGhlcmUncyBhIGJlZm9yZVJlbW92ZSBjYWxsYmFjaylcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG5leHROb2RlID0ga28udmlydHVhbEVsZW1lbnRzLmZpcnN0Q2hpbGQoZG9tTm9kZSksIGxhc3ROb2RlLCBub2RlOyBtYXBEYXRhID0gaXRlbXNUb1Byb2Nlc3NbaV07IGkrKykge1xuICAgICAgICAgICAgLy8gR2V0IG5vZGVzIGZvciBuZXdseSBhZGRlZCBpdGVtc1xuICAgICAgICAgICAgaWYgKCFtYXBEYXRhLm1hcHBlZE5vZGVzKVxuICAgICAgICAgICAgICAgIGtvLnV0aWxzLmV4dGVuZChtYXBEYXRhLCBtYXBOb2RlQW5kUmVmcmVzaFdoZW5DaGFuZ2VkKGRvbU5vZGUsIG1hcHBpbmcsIG1hcERhdGEuYXJyYXlFbnRyeSwgY2FsbGJhY2tBZnRlckFkZGluZ05vZGVzLCBtYXBEYXRhLmluZGV4T2JzZXJ2YWJsZSkpO1xuXG4gICAgICAgICAgICAvLyBQdXQgbm9kZXMgaW4gdGhlIHJpZ2h0IHBsYWNlIGlmIHRoZXkgYXJlbid0IHRoZXJlIGFscmVhZHlcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBub2RlID0gbWFwRGF0YS5tYXBwZWROb2Rlc1tqXTsgbmV4dE5vZGUgPSBub2RlLm5leHRTaWJsaW5nLCBsYXN0Tm9kZSA9IG5vZGUsIGorKykge1xuICAgICAgICAgICAgICAgIGlmIChub2RlICE9PSBuZXh0Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAga28udmlydHVhbEVsZW1lbnRzLmluc2VydEFmdGVyKGRvbU5vZGUsIG5vZGUsIGxhc3ROb2RlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUnVuIHRoZSBjYWxsYmFja3MgZm9yIG5ld2x5IGFkZGVkIG5vZGVzIChmb3IgZXhhbXBsZSwgdG8gYXBwbHkgYmluZGluZ3MsIGV0Yy4pXG4gICAgICAgICAgICBpZiAoIW1hcERhdGEuaW5pdGlhbGl6ZWQgJiYgY2FsbGJhY2tBZnRlckFkZGluZ05vZGVzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tBZnRlckFkZGluZ05vZGVzKG1hcERhdGEuYXJyYXlFbnRyeSwgbWFwRGF0YS5tYXBwZWROb2RlcywgbWFwRGF0YS5pbmRleE9ic2VydmFibGUpO1xuICAgICAgICAgICAgICAgIG1hcERhdGEuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlcmUncyBhIGJlZm9yZVJlbW92ZSBjYWxsYmFjaywgY2FsbCBpdCBhZnRlciByZW9yZGVyaW5nLlxuICAgICAgICAvLyBOb3RlIHRoYXQgd2UgYXNzdW1lIHRoYXQgdGhlIGJlZm9yZVJlbW92ZSBjYWxsYmFjayB3aWxsIHVzdWFsbHkgYmUgdXNlZCB0byByZW1vdmUgdGhlIG5vZGVzIHVzaW5nXG4gICAgICAgIC8vIHNvbWUgc29ydCBvZiBhbmltYXRpb24sIHdoaWNoIGlzIHdoeSB3ZSBmaXJzdCByZW9yZGVyIHRoZSBub2RlcyB0aGF0IHdpbGwgYmUgcmVtb3ZlZC4gSWYgdGhlXG4gICAgICAgIC8vIGNhbGxiYWNrIGluc3RlYWQgcmVtb3ZlcyB0aGUgbm9kZXMgcmlnaHQgYXdheSwgaXQgd291bGQgYmUgbW9yZSBlZmZpY2llbnQgdG8gc2tpcCByZW9yZGVyaW5nIHRoZW0uXG4gICAgICAgIC8vIFBlcmhhcHMgd2UnbGwgbWFrZSB0aGF0IGNoYW5nZSBpbiB0aGUgZnV0dXJlIGlmIHRoaXMgc2NlbmFyaW8gYmVjb21lcyBtb3JlIGNvbW1vbi5cbiAgICAgICAgY2FsbENhbGxiYWNrKG9wdGlvbnNbJ2JlZm9yZVJlbW92ZSddLCBpdGVtc0ZvckJlZm9yZVJlbW92ZUNhbGxiYWNrcyk7XG5cbiAgICAgICAgLy8gUmVwbGFjZSB0aGUgc3RvcmVkIHZhbHVlcyBvZiBkZWxldGVkIGl0ZW1zIHdpdGggYSBkdW1teSB2YWx1ZS4gVGhpcyBwcm92aWRlcyB0d28gYmVuZWZpdHM6IGl0IG1hcmtzIHRoaXMgaXRlbVxuICAgICAgICAvLyBhcyBhbHJlYWR5IFwicmVtb3ZlZFwiIHNvIHdlIHdvbid0IGNhbGwgYmVmb3JlUmVtb3ZlIGZvciBpdCBhZ2FpbiwgYW5kIGl0IGVuc3VyZXMgdGhhdCB0aGUgaXRlbSB3b24ndCBtYXRjaCB1cFxuICAgICAgICAvLyB3aXRoIGFuIGFjdHVhbCBpdGVtIGluIHRoZSBhcnJheSBhbmQgYXBwZWFyIGFzIFwicmV0YWluZWRcIiBvciBcIm1vdmVkXCIuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtc0ZvckJlZm9yZVJlbW92ZUNhbGxiYWNrcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKGl0ZW1zRm9yQmVmb3JlUmVtb3ZlQ2FsbGJhY2tzW2ldKSB7XG4gICAgICAgICAgICAgICAgaXRlbXNGb3JCZWZvcmVSZW1vdmVDYWxsYmFja3NbaV0uYXJyYXlFbnRyeSA9IGRlbGV0ZWRJdGVtRHVtbXlWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpbmFsbHkgY2FsbCBhZnRlck1vdmUgYW5kIGFmdGVyQWRkIGNhbGxiYWNrc1xuICAgICAgICBjYWxsQ2FsbGJhY2sob3B0aW9uc1snYWZ0ZXJNb3ZlJ10sIGl0ZW1zRm9yTW92ZUNhbGxiYWNrcyk7XG4gICAgICAgIGNhbGxDYWxsYmFjayhvcHRpb25zWydhZnRlckFkZCddLCBpdGVtc0ZvckFmdGVyQWRkQ2FsbGJhY2tzKTtcbiAgICB9XG59KSgpO1xuXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLnNldERvbU5vZGVDaGlsZHJlbkZyb21BcnJheU1hcHBpbmcnLCBrby51dGlscy5zZXREb21Ob2RlQ2hpbGRyZW5Gcm9tQXJyYXlNYXBwaW5nKTtcbmtvLm5hdGl2ZVRlbXBsYXRlRW5naW5lID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXNbJ2FsbG93VGVtcGxhdGVSZXdyaXRpbmcnXSA9IGZhbHNlO1xufVxuXG5rby5uYXRpdmVUZW1wbGF0ZUVuZ2luZS5wcm90b3R5cGUgPSBuZXcga28udGVtcGxhdGVFbmdpbmUoKTtcbmtvLm5hdGl2ZVRlbXBsYXRlRW5naW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGtvLm5hdGl2ZVRlbXBsYXRlRW5naW5lO1xua28ubmF0aXZlVGVtcGxhdGVFbmdpbmUucHJvdG90eXBlWydyZW5kZXJUZW1wbGF0ZVNvdXJjZSddID0gZnVuY3Rpb24gKHRlbXBsYXRlU291cmNlLCBiaW5kaW5nQ29udGV4dCwgb3B0aW9ucywgdGVtcGxhdGVEb2N1bWVudCkge1xuICAgIHZhciB1c2VOb2Rlc0lmQXZhaWxhYmxlID0gIShrby51dGlscy5pZVZlcnNpb24gPCA5KSwgLy8gSUU8OSBjbG9uZU5vZGUgZG9lc24ndCB3b3JrIHByb3Blcmx5XG4gICAgICAgIHRlbXBsYXRlTm9kZXNGdW5jID0gdXNlTm9kZXNJZkF2YWlsYWJsZSA/IHRlbXBsYXRlU291cmNlWydub2RlcyddIDogbnVsbCxcbiAgICAgICAgdGVtcGxhdGVOb2RlcyA9IHRlbXBsYXRlTm9kZXNGdW5jID8gdGVtcGxhdGVTb3VyY2VbJ25vZGVzJ10oKSA6IG51bGw7XG5cbiAgICBpZiAodGVtcGxhdGVOb2Rlcykge1xuICAgICAgICByZXR1cm4ga28udXRpbHMubWFrZUFycmF5KHRlbXBsYXRlTm9kZXMuY2xvbmVOb2RlKHRydWUpLmNoaWxkTm9kZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB0ZW1wbGF0ZVRleHQgPSB0ZW1wbGF0ZVNvdXJjZVsndGV4dCddKCk7XG4gICAgICAgIHJldHVybiBrby51dGlscy5wYXJzZUh0bWxGcmFnbWVudCh0ZW1wbGF0ZVRleHQsIHRlbXBsYXRlRG9jdW1lbnQpO1xuICAgIH1cbn07XG5cbmtvLm5hdGl2ZVRlbXBsYXRlRW5naW5lLmluc3RhbmNlID0gbmV3IGtvLm5hdGl2ZVRlbXBsYXRlRW5naW5lKCk7XG5rby5zZXRUZW1wbGF0ZUVuZ2luZShrby5uYXRpdmVUZW1wbGF0ZUVuZ2luZS5pbnN0YW5jZSk7XG5cbmtvLmV4cG9ydFN5bWJvbCgnbmF0aXZlVGVtcGxhdGVFbmdpbmUnLCBrby5uYXRpdmVUZW1wbGF0ZUVuZ2luZSk7XG4oZnVuY3Rpb24oKSB7XG4gICAga28uanF1ZXJ5VG1wbFRlbXBsYXRlRW5naW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBEZXRlY3Qgd2hpY2ggdmVyc2lvbiBvZiBqcXVlcnktdG1wbCB5b3UncmUgdXNpbmcuIFVuZm9ydHVuYXRlbHkganF1ZXJ5LXRtcGxcbiAgICAgICAgLy8gZG9lc24ndCBleHBvc2UgYSB2ZXJzaW9uIG51bWJlciwgc28gd2UgaGF2ZSB0byBpbmZlciBpdC5cbiAgICAgICAgLy8gTm90ZSB0aGF0IGFzIG9mIEtub2Nrb3V0IDEuMywgd2Ugb25seSBzdXBwb3J0IGpRdWVyeS50bXBsIDEuMC4wcHJlIGFuZCBsYXRlcixcbiAgICAgICAgLy8gd2hpY2ggS08gaW50ZXJuYWxseSByZWZlcnMgdG8gYXMgdmVyc2lvbiBcIjJcIiwgc28gb2xkZXIgdmVyc2lvbnMgYXJlIG5vIGxvbmdlciBkZXRlY3RlZC5cbiAgICAgICAgdmFyIGpRdWVyeVRtcGxWZXJzaW9uID0gdGhpcy5qUXVlcnlUbXBsVmVyc2lvbiA9IChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICghalF1ZXJ5SW5zdGFuY2UgfHwgIShqUXVlcnlJbnN0YW5jZVsndG1wbCddKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIC8vIFNpbmNlIGl0IGV4cG9zZXMgbm8gb2ZmaWNpYWwgdmVyc2lvbiBudW1iZXIsIHdlIHVzZSBvdXIgb3duIG51bWJlcmluZyBzeXN0ZW0uIFRvIGJlIHVwZGF0ZWQgYXMganF1ZXJ5LXRtcGwgZXZvbHZlcy5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGpRdWVyeUluc3RhbmNlWyd0bXBsJ11bJ3RhZyddWyd0bXBsJ11bJ29wZW4nXS50b1N0cmluZygpLmluZGV4T2YoJ19fJykgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSAxLjAuMHByZSwgY3VzdG9tIHRhZ3Mgc2hvdWxkIGFwcGVuZCBtYXJrdXAgdG8gYW4gYXJyYXkgY2FsbGVkIFwiX19cIlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjsgLy8gRmluYWwgdmVyc2lvbiBvZiBqcXVlcnkudG1wbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2goZXgpIHsgLyogQXBwYXJlbnRseSBub3QgdGhlIHZlcnNpb24gd2Ugd2VyZSBsb29raW5nIGZvciAqLyB9XG5cbiAgICAgICAgICAgIHJldHVybiAxOyAvLyBBbnkgb2xkZXIgdmVyc2lvbiB0aGF0IHdlIGRvbid0IHN1cHBvcnRcbiAgICAgICAgfSkoKTtcblxuICAgICAgICBmdW5jdGlvbiBlbnN1cmVIYXNSZWZlcmVuY2VkSlF1ZXJ5VGVtcGxhdGVzKCkge1xuICAgICAgICAgICAgaWYgKGpRdWVyeVRtcGxWZXJzaW9uIDwgMilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3VyIHZlcnNpb24gb2YgalF1ZXJ5LnRtcGwgaXMgdG9vIG9sZC4gUGxlYXNlIHVwZ3JhZGUgdG8galF1ZXJ5LnRtcGwgMS4wLjBwcmUgb3IgbGF0ZXIuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXhlY3V0ZVRlbXBsYXRlKGNvbXBpbGVkVGVtcGxhdGUsIGRhdGEsIGpRdWVyeVRlbXBsYXRlT3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIGpRdWVyeUluc3RhbmNlWyd0bXBsJ10oY29tcGlsZWRUZW1wbGF0ZSwgZGF0YSwgalF1ZXJ5VGVtcGxhdGVPcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXNbJ3JlbmRlclRlbXBsYXRlU291cmNlJ10gPSBmdW5jdGlvbih0ZW1wbGF0ZVNvdXJjZSwgYmluZGluZ0NvbnRleHQsIG9wdGlvbnMsIHRlbXBsYXRlRG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlRG9jdW1lbnQgPSB0ZW1wbGF0ZURvY3VtZW50IHx8IGRvY3VtZW50O1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICBlbnN1cmVIYXNSZWZlcmVuY2VkSlF1ZXJ5VGVtcGxhdGVzKCk7XG5cbiAgICAgICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIHN0b3JlZCBhIHByZWNvbXBpbGVkIHZlcnNpb24gb2YgdGhpcyB0ZW1wbGF0ZSAoZG9uJ3Qgd2FudCB0byByZXBhcnNlIG9uIGV2ZXJ5IHJlbmRlcilcbiAgICAgICAgICAgIHZhciBwcmVjb21waWxlZCA9IHRlbXBsYXRlU291cmNlWydkYXRhJ10oJ3ByZWNvbXBpbGVkJyk7XG4gICAgICAgICAgICBpZiAoIXByZWNvbXBpbGVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRlbXBsYXRlVGV4dCA9IHRlbXBsYXRlU291cmNlWyd0ZXh0J10oKSB8fCBcIlwiO1xuICAgICAgICAgICAgICAgIC8vIFdyYXAgaW4gXCJ3aXRoKCR3aGF0ZXZlci5rb0JpbmRpbmdDb250ZXh0KSB7IC4uLiB9XCJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVRleHQgPSBcInt7a29fd2l0aCAkaXRlbS5rb0JpbmRpbmdDb250ZXh0fX1cIiArIHRlbXBsYXRlVGV4dCArIFwie3sva29fd2l0aH19XCI7XG5cbiAgICAgICAgICAgICAgICBwcmVjb21waWxlZCA9IGpRdWVyeUluc3RhbmNlWyd0ZW1wbGF0ZSddKG51bGwsIHRlbXBsYXRlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGVTb3VyY2VbJ2RhdGEnXSgncHJlY29tcGlsZWQnLCBwcmVjb21waWxlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBkYXRhID0gW2JpbmRpbmdDb250ZXh0WyckZGF0YSddXTsgLy8gUHJld3JhcCB0aGUgZGF0YSBpbiBhbiBhcnJheSB0byBzdG9wIGpxdWVyeS50bXBsIGZyb20gdHJ5aW5nIHRvIHVud3JhcCBhbnkgYXJyYXlzXG4gICAgICAgICAgICB2YXIgalF1ZXJ5VGVtcGxhdGVPcHRpb25zID0galF1ZXJ5SW5zdGFuY2VbJ2V4dGVuZCddKHsgJ2tvQmluZGluZ0NvbnRleHQnOiBiaW5kaW5nQ29udGV4dCB9LCBvcHRpb25zWyd0ZW1wbGF0ZU9wdGlvbnMnXSk7XG5cbiAgICAgICAgICAgIHZhciByZXN1bHROb2RlcyA9IGV4ZWN1dGVUZW1wbGF0ZShwcmVjb21waWxlZCwgZGF0YSwgalF1ZXJ5VGVtcGxhdGVPcHRpb25zKTtcbiAgICAgICAgICAgIHJlc3VsdE5vZGVzWydhcHBlbmRUbyddKHRlbXBsYXRlRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7IC8vIFVzaW5nIFwiYXBwZW5kVG9cIiBmb3JjZXMgalF1ZXJ5L2pRdWVyeS50bXBsIHRvIHBlcmZvcm0gbmVjZXNzYXJ5IGNsZWFudXAgd29ya1xuXG4gICAgICAgICAgICBqUXVlcnlJbnN0YW5jZVsnZnJhZ21lbnRzJ10gPSB7fTsgLy8gQ2xlYXIgalF1ZXJ5J3MgZnJhZ21lbnQgY2FjaGUgdG8gYXZvaWQgYSBtZW1vcnkgbGVhayBhZnRlciBhIGxhcmdlIG51bWJlciBvZiB0ZW1wbGF0ZSByZW5kZXJzXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0Tm9kZXM7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpc1snY3JlYXRlSmF2YVNjcmlwdEV2YWx1YXRvckJsb2NrJ10gPSBmdW5jdGlvbihzY3JpcHQpIHtcbiAgICAgICAgICAgIHJldHVybiBcInt7a29fY29kZSAoKGZ1bmN0aW9uKCkgeyByZXR1cm4gXCIgKyBzY3JpcHQgKyBcIiB9KSgpKSB9fVwiO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXNbJ2FkZFRlbXBsYXRlJ10gPSBmdW5jdGlvbih0ZW1wbGF0ZU5hbWUsIHRlbXBsYXRlTWFya3VwKSB7XG4gICAgICAgICAgICBkb2N1bWVudC53cml0ZShcIjxzY3JpcHQgdHlwZT0ndGV4dC9odG1sJyBpZD0nXCIgKyB0ZW1wbGF0ZU5hbWUgKyBcIic+XCIgKyB0ZW1wbGF0ZU1hcmt1cCArIFwiPFwiICsgXCIvc2NyaXB0PlwiKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoalF1ZXJ5VG1wbFZlcnNpb24gPiAwKSB7XG4gICAgICAgICAgICBqUXVlcnlJbnN0YW5jZVsndG1wbCddWyd0YWcnXVsna29fY29kZSddID0ge1xuICAgICAgICAgICAgICAgIG9wZW46IFwiX18ucHVzaCgkMSB8fCAnJyk7XCJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBqUXVlcnlJbnN0YW5jZVsndG1wbCddWyd0YWcnXVsna29fd2l0aCddID0ge1xuICAgICAgICAgICAgICAgIG9wZW46IFwid2l0aCgkMSkge1wiLFxuICAgICAgICAgICAgICAgIGNsb3NlOiBcIn0gXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAga28uanF1ZXJ5VG1wbFRlbXBsYXRlRW5naW5lLnByb3RvdHlwZSA9IG5ldyBrby50ZW1wbGF0ZUVuZ2luZSgpO1xuICAgIGtvLmpxdWVyeVRtcGxUZW1wbGF0ZUVuZ2luZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBrby5qcXVlcnlUbXBsVGVtcGxhdGVFbmdpbmU7XG5cbiAgICAvLyBVc2UgdGhpcyBvbmUgYnkgZGVmYXVsdCAqb25seSBpZiBqcXVlcnkudG1wbCBpcyByZWZlcmVuY2VkKlxuICAgIHZhciBqcXVlcnlUbXBsVGVtcGxhdGVFbmdpbmVJbnN0YW5jZSA9IG5ldyBrby5qcXVlcnlUbXBsVGVtcGxhdGVFbmdpbmUoKTtcbiAgICBpZiAoanF1ZXJ5VG1wbFRlbXBsYXRlRW5naW5lSW5zdGFuY2UualF1ZXJ5VG1wbFZlcnNpb24gPiAwKVxuICAgICAgICBrby5zZXRUZW1wbGF0ZUVuZ2luZShqcXVlcnlUbXBsVGVtcGxhdGVFbmdpbmVJbnN0YW5jZSk7XG5cbiAgICBrby5leHBvcnRTeW1ib2woJ2pxdWVyeVRtcGxUZW1wbGF0ZUVuZ2luZScsIGtvLmpxdWVyeVRtcGxUZW1wbGF0ZUVuZ2luZSk7XG59KSgpO1xufSkpO1xufSgpKTtcbn0pKCk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImtub2Nrb3V0LmpzIiwia25vY2tvdXQtMy40LjAuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoia25vY2tvdXQuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsIi8qIVxyXG4gKiBLbm9ja291dCBKYXZhU2NyaXB0IGxpYnJhcnkgdjMuNC4wXHJcbiAqIChjKSBTdGV2ZW4gU2FuZGVyc29uIC0gaHR0cDovL2tub2Nrb3V0anMuY29tL1xyXG4gKiBMaWNlbnNlOiBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKVxyXG4gKi9cclxuXHJcbihmdW5jdGlvbigpe1xyXG52YXIgREVCVUc9dHJ1ZTtcclxuKGZ1bmN0aW9uKHVuZGVmaW5lZCl7XHJcbiAgICAvLyAoMCwgZXZhbCkoJ3RoaXMnKSBpcyBhIHJvYnVzdCB3YXkgb2YgZ2V0dGluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdFxyXG4gICAgLy8gRm9yIGRldGFpbHMsIHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE0MTE5OTg4L3JldHVybi10aGlzLTAtZXZhbHRoaXMvMTQxMjAwMjMjMTQxMjAwMjNcclxuICAgIHZhciB3aW5kb3cgPSB0aGlzIHx8ICgwLCBldmFsKSgndGhpcycpLFxyXG4gICAgICAgIGRvY3VtZW50ID0gd2luZG93Wydkb2N1bWVudCddLFxyXG4gICAgICAgIG5hdmlnYXRvciA9IHdpbmRvd1snbmF2aWdhdG9yJ10sXHJcbiAgICAgICAgalF1ZXJ5SW5zdGFuY2UgPSB3aW5kb3dbXCJqUXVlcnlcIl0sXHJcbiAgICAgICAgSlNPTiA9IHdpbmRvd1tcIkpTT05cIl07XHJcbihmdW5jdGlvbihmYWN0b3J5KSB7XHJcbiAgICAvLyBTdXBwb3J0IHRocmVlIG1vZHVsZSBsb2FkaW5nIHNjZW5hcmlvc1xyXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSkge1xyXG4gICAgICAgIC8vIFsxXSBBTUQgYW5vbnltb3VzIG1vZHVsZVxyXG4gICAgICAgIGRlZmluZShbJ2V4cG9ydHMnLCAncmVxdWlyZSddLCBmYWN0b3J5KTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgLy8gWzJdIENvbW1vbkpTL05vZGUuanNcclxuICAgICAgICBmYWN0b3J5KG1vZHVsZVsnZXhwb3J0cyddIHx8IGV4cG9ydHMpOyAgLy8gbW9kdWxlLmV4cG9ydHMgaXMgZm9yIE5vZGUuanNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gWzNdIE5vIG1vZHVsZSBsb2FkZXIgKHBsYWluIDxzY3JpcHQ+IHRhZykgLSBwdXQgZGlyZWN0bHkgaW4gZ2xvYmFsIG5hbWVzcGFjZVxyXG4gICAgICAgIGZhY3Rvcnkod2luZG93WydrbyddID0ge30pO1xyXG4gICAgfVxyXG59KGZ1bmN0aW9uKGtvRXhwb3J0cywgYW1kUmVxdWlyZSl7XHJcbi8vIEludGVybmFsbHksIGFsbCBLTyBvYmplY3RzIGFyZSBhdHRhY2hlZCB0byBrb0V4cG9ydHMgKGV2ZW4gdGhlIG5vbi1leHBvcnRlZCBvbmVzIHdob3NlIG5hbWVzIHdpbGwgYmUgbWluaWZpZWQgYnkgdGhlIGNsb3N1cmUgY29tcGlsZXIpLlxyXG4vLyBJbiB0aGUgZnV0dXJlLCB0aGUgZm9sbG93aW5nIFwia29cIiB2YXJpYWJsZSBtYXkgYmUgbWFkZSBkaXN0aW5jdCBmcm9tIFwia29FeHBvcnRzXCIgc28gdGhhdCBwcml2YXRlIG9iamVjdHMgYXJlIG5vdCBleHRlcm5hbGx5IHJlYWNoYWJsZS5cclxudmFyIGtvID0gdHlwZW9mIGtvRXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcgPyBrb0V4cG9ydHMgOiB7fTtcclxuLy8gR29vZ2xlIENsb3N1cmUgQ29tcGlsZXIgaGVscGVycyAodXNlZCBvbmx5IHRvIG1ha2UgdGhlIG1pbmlmaWVkIGZpbGUgc21hbGxlcilcclxua28uZXhwb3J0U3ltYm9sID0gZnVuY3Rpb24oa29QYXRoLCBvYmplY3QpIHtcclxuICAgIHZhciB0b2tlbnMgPSBrb1BhdGguc3BsaXQoXCIuXCIpO1xyXG5cclxuICAgIC8vIEluIHRoZSBmdXR1cmUsIFwia29cIiBtYXkgYmVjb21lIGRpc3RpbmN0IGZyb20gXCJrb0V4cG9ydHNcIiAoc28gdGhhdCBub24tZXhwb3J0ZWQgb2JqZWN0cyBhcmUgbm90IHJlYWNoYWJsZSlcclxuICAgIC8vIEF0IHRoYXQgcG9pbnQsIFwidGFyZ2V0XCIgd291bGQgYmUgc2V0IHRvOiAodHlwZW9mIGtvRXhwb3J0cyAhPT0gXCJ1bmRlZmluZWRcIiA/IGtvRXhwb3J0cyA6IGtvKVxyXG4gICAgdmFyIHRhcmdldCA9IGtvO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aCAtIDE7IGkrKylcclxuICAgICAgICB0YXJnZXQgPSB0YXJnZXRbdG9rZW5zW2ldXTtcclxuICAgIHRhcmdldFt0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdXSA9IG9iamVjdDtcclxufTtcclxua28uZXhwb3J0UHJvcGVydHkgPSBmdW5jdGlvbihvd25lciwgcHVibGljTmFtZSwgb2JqZWN0KSB7XHJcbiAgICBvd25lcltwdWJsaWNOYW1lXSA9IG9iamVjdDtcclxufTtcclxua28udmVyc2lvbiA9IFwiMy40LjBcIjtcclxuXHJcbmtvLmV4cG9ydFN5bWJvbCgndmVyc2lvbicsIGtvLnZlcnNpb24pO1xyXG4vLyBGb3IgYW55IG9wdGlvbnMgdGhhdCBtYXkgYWZmZWN0IHZhcmlvdXMgYXJlYXMgb2YgS25vY2tvdXQgYW5kIGFyZW4ndCBkaXJlY3RseSBhc3NvY2lhdGVkIHdpdGggZGF0YSBiaW5kaW5nLlxyXG5rby5vcHRpb25zID0ge1xyXG4gICAgJ2RlZmVyVXBkYXRlcyc6IGZhbHNlLFxyXG4gICAgJ3VzZU9ubHlOYXRpdmVFdmVudHMnOiBmYWxzZVxyXG59O1xyXG5cclxuLy9rby5leHBvcnRTeW1ib2woJ29wdGlvbnMnLCBrby5vcHRpb25zKTsgICAvLyAnb3B0aW9ucycgaXNuJ3QgbWluaWZpZWRcclxua28udXRpbHMgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gb2JqZWN0Rm9yRWFjaChvYmosIGFjdGlvbikge1xyXG4gICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGFjdGlvbihwcm9wLCBvYmpbcHJvcF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgICAgIGlmIChzb3VyY2UpIHtcclxuICAgICAgICAgICAgZm9yKHZhciBwcm9wIGluIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgaWYoc291cmNlLmhhc093blByb3BlcnR5KHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2V0UHJvdG90eXBlT2Yob2JqLCBwcm90bykge1xyXG4gICAgICAgIG9iai5fX3Byb3RvX18gPSBwcm90bztcclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjYW5TZXRQcm90b3R5cGUgPSAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSk7XHJcbiAgICB2YXIgY2FuVXNlU3ltYm9scyA9ICFERUJVRyAmJiB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nO1xyXG5cclxuICAgIC8vIFJlcHJlc2VudCB0aGUga25vd24gZXZlbnQgdHlwZXMgaW4gYSBjb21wYWN0IHdheSwgdGhlbiBhdCBydW50aW1lIHRyYW5zZm9ybSBpdCBpbnRvIGEgaGFzaCB3aXRoIGV2ZW50IG5hbWUgYXMga2V5IChmb3IgZmFzdCBsb29rdXApXHJcbiAgICB2YXIga25vd25FdmVudHMgPSB7fSwga25vd25FdmVudFR5cGVzQnlFdmVudE5hbWUgPSB7fTtcclxuICAgIHZhciBrZXlFdmVudFR5cGVOYW1lID0gKG5hdmlnYXRvciAmJiAvRmlyZWZveFxcLzIvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSA/ICdLZXlib2FyZEV2ZW50JyA6ICdVSUV2ZW50cyc7XHJcbiAgICBrbm93bkV2ZW50c1trZXlFdmVudFR5cGVOYW1lXSA9IFsna2V5dXAnLCAna2V5ZG93bicsICdrZXlwcmVzcyddO1xyXG4gICAga25vd25FdmVudHNbJ01vdXNlRXZlbnRzJ10gPSBbJ2NsaWNrJywgJ2RibGNsaWNrJywgJ21vdXNlZG93bicsICdtb3VzZXVwJywgJ21vdXNlbW92ZScsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnbW91c2VlbnRlcicsICdtb3VzZWxlYXZlJ107XHJcbiAgICBvYmplY3RGb3JFYWNoKGtub3duRXZlbnRzLCBmdW5jdGlvbihldmVudFR5cGUsIGtub3duRXZlbnRzRm9yVHlwZSkge1xyXG4gICAgICAgIGlmIChrbm93bkV2ZW50c0ZvclR5cGUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0ga25vd25FdmVudHNGb3JUeXBlLmxlbmd0aDsgaSA8IGo7IGkrKylcclxuICAgICAgICAgICAgICAgIGtub3duRXZlbnRUeXBlc0J5RXZlbnROYW1lW2tub3duRXZlbnRzRm9yVHlwZVtpXV0gPSBldmVudFR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB2YXIgZXZlbnRzVGhhdE11c3RCZVJlZ2lzdGVyZWRVc2luZ0F0dGFjaEV2ZW50ID0geyAncHJvcGVydHljaGFuZ2UnOiB0cnVlIH07IC8vIFdvcmthcm91bmQgZm9yIGFuIElFOSBpc3N1ZSAtIGh0dHBzOi8vZ2l0aHViLmNvbS9TdGV2ZVNhbmRlcnNvbi9rbm9ja291dC9pc3N1ZXMvNDA2XHJcblxyXG4gICAgLy8gRGV0ZWN0IElFIHZlcnNpb25zIGZvciBidWcgd29ya2Fyb3VuZHMgKHVzZXMgSUUgY29uZGl0aW9uYWxzLCBub3QgVUEgc3RyaW5nLCBmb3Igcm9idXN0bmVzcylcclxuICAgIC8vIE5vdGUgdGhhdCwgc2luY2UgSUUgMTAgZG9lcyBub3Qgc3VwcG9ydCBjb25kaXRpb25hbCBjb21tZW50cywgdGhlIGZvbGxvd2luZyBsb2dpYyBvbmx5IGRldGVjdHMgSUUgPCAxMC5cclxuICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIGJ5IGRlc2lnbiwgc2luY2UgSUUgMTArIGJlaGF2ZXMgY29ycmVjdGx5IHdoZW4gdHJlYXRlZCBhcyBhIHN0YW5kYXJkIGJyb3dzZXIuXHJcbiAgICAvLyBJZiB0aGVyZSBpcyBhIGZ1dHVyZSBuZWVkIHRvIGRldGVjdCBzcGVjaWZpYyB2ZXJzaW9ucyBvZiBJRTEwKywgd2Ugd2lsbCBhbWVuZCB0aGlzLlxyXG4gICAgdmFyIGllVmVyc2lvbiA9IGRvY3VtZW50ICYmIChmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgdmVyc2lvbiA9IDMsIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLCBpRWxlbXMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2knKTtcclxuXHJcbiAgICAgICAgLy8gS2VlcCBjb25zdHJ1Y3RpbmcgY29uZGl0aW9uYWwgSFRNTCBibG9ja3MgdW50aWwgd2UgaGl0IG9uZSB0aGF0IHJlc29sdmVzIHRvIGFuIGVtcHR5IGZyYWdtZW50XHJcbiAgICAgICAgd2hpbGUgKFxyXG4gICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gJzwhLS1baWYgZ3QgSUUgJyArICgrK3ZlcnNpb24pICsgJ10+PGk+PC9pPjwhW2VuZGlmXS0tPicsXHJcbiAgICAgICAgICAgIGlFbGVtc1swXVxyXG4gICAgICAgICkge31cclxuICAgICAgICByZXR1cm4gdmVyc2lvbiA+IDQgPyB2ZXJzaW9uIDogdW5kZWZpbmVkO1xyXG4gICAgfSgpKTtcclxuICAgIHZhciBpc0llNiA9IGllVmVyc2lvbiA9PT0gNixcclxuICAgICAgICBpc0llNyA9IGllVmVyc2lvbiA9PT0gNztcclxuXHJcbiAgICBmdW5jdGlvbiBpc0NsaWNrT25DaGVja2FibGVFbGVtZW50KGVsZW1lbnQsIGV2ZW50VHlwZSkge1xyXG4gICAgICAgIGlmICgoa28udXRpbHMudGFnTmFtZUxvd2VyKGVsZW1lbnQpICE9PSBcImlucHV0XCIpIHx8ICFlbGVtZW50LnR5cGUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoZXZlbnRUeXBlLnRvTG93ZXJDYXNlKCkgIT0gXCJjbGlja1wiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgdmFyIGlucHV0VHlwZSA9IGVsZW1lbnQudHlwZTtcclxuICAgICAgICByZXR1cm4gKGlucHV0VHlwZSA9PSBcImNoZWNrYm94XCIpIHx8IChpbnB1dFR5cGUgPT0gXCJyYWRpb1wiKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGb3IgZGV0YWlscyBvbiB0aGUgcGF0dGVybiBmb3IgY2hhbmdpbmcgbm9kZSBjbGFzc2VzXHJcbiAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9rbm9ja291dC9rbm9ja291dC9pc3N1ZXMvMTU5N1xyXG4gICAgdmFyIGNzc0NsYXNzTmFtZVJlZ2V4ID0gL1xcUysvZztcclxuXHJcbiAgICBmdW5jdGlvbiB0b2dnbGVEb21Ob2RlQ3NzQ2xhc3Mobm9kZSwgY2xhc3NOYW1lcywgc2hvdWxkSGF2ZUNsYXNzKSB7XHJcbiAgICAgICAgdmFyIGFkZE9yUmVtb3ZlRm47XHJcbiAgICAgICAgaWYgKGNsYXNzTmFtZXMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlLmNsYXNzTGlzdCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgIGFkZE9yUmVtb3ZlRm4gPSBub2RlLmNsYXNzTGlzdFtzaG91bGRIYXZlQ2xhc3MgPyAnYWRkJyA6ICdyZW1vdmUnXTtcclxuICAgICAgICAgICAgICAgIGtvLnV0aWxzLmFycmF5Rm9yRWFjaChjbGFzc05hbWVzLm1hdGNoKGNzc0NsYXNzTmFtZVJlZ2V4KSwgZnVuY3Rpb24oY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWRkT3JSZW1vdmVGbi5jYWxsKG5vZGUuY2xhc3NMaXN0LCBjbGFzc05hbWUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5vZGUuY2xhc3NOYW1lWydiYXNlVmFsJ10gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTVkcgdGFnIC5jbGFzc05hbWVzIGlzIGFuIFNWR0FuaW1hdGVkU3RyaW5nIGluc3RhbmNlXHJcbiAgICAgICAgICAgICAgICB0b2dnbGVPYmplY3RDbGFzc1Byb3BlcnR5U3RyaW5nKG5vZGUuY2xhc3NOYW1lLCAnYmFzZVZhbCcsIGNsYXNzTmFtZXMsIHNob3VsZEhhdmVDbGFzcyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBub2RlLmNsYXNzTmFtZSBvdWdodCB0byBiZSBhIHN0cmluZy5cclxuICAgICAgICAgICAgICAgIHRvZ2dsZU9iamVjdENsYXNzUHJvcGVydHlTdHJpbmcobm9kZSwgJ2NsYXNzTmFtZScsIGNsYXNzTmFtZXMsIHNob3VsZEhhdmVDbGFzcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdG9nZ2xlT2JqZWN0Q2xhc3NQcm9wZXJ0eVN0cmluZyhvYmosIHByb3AsIGNsYXNzTmFtZXMsIHNob3VsZEhhdmVDbGFzcykge1xyXG4gICAgICAgIC8vIG9iai9wcm9wIGlzIGVpdGhlciBhIG5vZGUvJ2NsYXNzTmFtZScgb3IgYSBTVkdBbmltYXRlZFN0cmluZy8nYmFzZVZhbCcuXHJcbiAgICAgICAgdmFyIGN1cnJlbnRDbGFzc05hbWVzID0gb2JqW3Byb3BdLm1hdGNoKGNzc0NsYXNzTmFtZVJlZ2V4KSB8fCBbXTtcclxuICAgICAgICBrby51dGlscy5hcnJheUZvckVhY2goY2xhc3NOYW1lcy5tYXRjaChjc3NDbGFzc05hbWVSZWdleCksIGZ1bmN0aW9uKGNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICBrby51dGlscy5hZGRPclJlbW92ZUl0ZW0oY3VycmVudENsYXNzTmFtZXMsIGNsYXNzTmFtZSwgc2hvdWxkSGF2ZUNsYXNzKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBvYmpbcHJvcF0gPSBjdXJyZW50Q2xhc3NOYW1lcy5qb2luKFwiIFwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGZpZWxkc0luY2x1ZGVkV2l0aEpzb25Qb3N0OiBbJ2F1dGhlbnRpY2l0eV90b2tlbicsIC9eX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4oXy4qKT8kL10sXHJcblxyXG4gICAgICAgIGFycmF5Rm9yRWFjaDogZnVuY3Rpb24gKGFycmF5LCBhY3Rpb24pIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBhcnJheS5sZW5ndGg7IGkgPCBqOyBpKyspXHJcbiAgICAgICAgICAgICAgICBhY3Rpb24oYXJyYXlbaV0sIGkpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFycmF5SW5kZXhPZjogZnVuY3Rpb24gKGFycmF5LCBpdGVtKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYXJyYXksIGl0ZW0pO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGFycmF5Lmxlbmd0aDsgaSA8IGo7IGkrKylcclxuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpXSA9PT0gaXRlbSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFycmF5Rmlyc3Q6IGZ1bmN0aW9uIChhcnJheSwgcHJlZGljYXRlLCBwcmVkaWNhdGVPd25lcikge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGFycmF5Lmxlbmd0aDsgaSA8IGo7IGkrKylcclxuICAgICAgICAgICAgICAgIGlmIChwcmVkaWNhdGUuY2FsbChwcmVkaWNhdGVPd25lciwgYXJyYXlbaV0sIGkpKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheVtpXTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgYXJyYXlSZW1vdmVJdGVtOiBmdW5jdGlvbiAoYXJyYXksIGl0ZW1Ub1JlbW92ZSkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBrby51dGlscy5hcnJheUluZGV4T2YoYXJyYXksIGl0ZW1Ub1JlbW92ZSk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGFycmF5LnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhcnJheUdldERpc3RpbmN0VmFsdWVzOiBmdW5jdGlvbiAoYXJyYXkpIHtcclxuICAgICAgICAgICAgYXJyYXkgPSBhcnJheSB8fCBbXTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGFycmF5Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtvLnV0aWxzLmFycmF5SW5kZXhPZihyZXN1bHQsIGFycmF5W2ldKSA8IDApXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJyYXlbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgYXJyYXlNYXA6IGZ1bmN0aW9uIChhcnJheSwgbWFwcGluZykge1xyXG4gICAgICAgICAgICBhcnJheSA9IGFycmF5IHx8IFtdO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gYXJyYXkubGVuZ3RoOyBpIDwgajsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobWFwcGluZyhhcnJheVtpXSwgaSkpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFycmF5RmlsdGVyOiBmdW5jdGlvbiAoYXJyYXksIHByZWRpY2F0ZSkge1xyXG4gICAgICAgICAgICBhcnJheSA9IGFycmF5IHx8IFtdO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gYXJyYXkubGVuZ3RoOyBpIDwgajsgaSsrKVxyXG4gICAgICAgICAgICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpXSwgaSkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJyYXlbaV0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFycmF5UHVzaEFsbDogZnVuY3Rpb24gKGFycmF5LCB2YWx1ZXNUb1B1c2gpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlc1RvUHVzaCBpbnN0YW5jZW9mIEFycmF5KVxyXG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaC5hcHBseShhcnJheSwgdmFsdWVzVG9QdXNoKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSB2YWx1ZXNUb1B1c2gubGVuZ3RoOyBpIDwgajsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2godmFsdWVzVG9QdXNoW2ldKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFkZE9yUmVtb3ZlSXRlbTogZnVuY3Rpb24oYXJyYXksIHZhbHVlLCBpbmNsdWRlZCkge1xyXG4gICAgICAgICAgICB2YXIgZXhpc3RpbmdFbnRyeUluZGV4ID0ga28udXRpbHMuYXJyYXlJbmRleE9mKGtvLnV0aWxzLnBlZWtPYnNlcnZhYmxlKGFycmF5KSwgdmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAoZXhpc3RpbmdFbnRyeUluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVkKVxyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpbmNsdWRlZClcclxuICAgICAgICAgICAgICAgICAgICBhcnJheS5zcGxpY2UoZXhpc3RpbmdFbnRyeUluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGNhblNldFByb3RvdHlwZTogY2FuU2V0UHJvdG90eXBlLFxyXG5cclxuICAgICAgICBleHRlbmQ6IGV4dGVuZCxcclxuXHJcbiAgICAgICAgc2V0UHJvdG90eXBlT2Y6IHNldFByb3RvdHlwZU9mLFxyXG5cclxuICAgICAgICBzZXRQcm90b3R5cGVPZk9yRXh0ZW5kOiBjYW5TZXRQcm90b3R5cGUgPyBzZXRQcm90b3R5cGVPZiA6IGV4dGVuZCxcclxuXHJcbiAgICAgICAgb2JqZWN0Rm9yRWFjaDogb2JqZWN0Rm9yRWFjaCxcclxuXHJcbiAgICAgICAgb2JqZWN0TWFwOiBmdW5jdGlvbihzb3VyY2UsIG1hcHBpbmcpIHtcclxuICAgICAgICAgICAgaWYgKCFzb3VyY2UpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlO1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0ge307XHJcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gbWFwcGluZyhzb3VyY2VbcHJvcF0sIHByb3AsIHNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBlbXB0eURvbU5vZGU6IGZ1bmN0aW9uIChkb21Ob2RlKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChkb21Ob2RlLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIGtvLnJlbW92ZU5vZGUoZG9tTm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG1vdmVDbGVhbmVkTm9kZXNUb0NvbnRhaW5lckVsZW1lbnQ6IGZ1bmN0aW9uKG5vZGVzKSB7XHJcbiAgICAgICAgICAgIC8vIEVuc3VyZSBpdCdzIGEgcmVhbCBhcnJheSwgYXMgd2UncmUgYWJvdXQgdG8gcmVwYXJlbnQgdGhlIG5vZGVzIGFuZFxyXG4gICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRoZSB1bmRlcmx5aW5nIGNvbGxlY3Rpb24gdG8gY2hhbmdlIHdoaWxlIHdlJ3JlIGRvaW5nIHRoYXQuXHJcbiAgICAgICAgICAgIHZhciBub2Rlc0FycmF5ID0ga28udXRpbHMubWFrZUFycmF5KG5vZGVzKTtcclxuICAgICAgICAgICAgdmFyIHRlbXBsYXRlRG9jdW1lbnQgPSAobm9kZXNBcnJheVswXSAmJiBub2Rlc0FycmF5WzBdLm93bmVyRG9jdW1lbnQpIHx8IGRvY3VtZW50O1xyXG5cclxuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRlbXBsYXRlRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gbm9kZXNBcnJheS5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChrby5jbGVhbk5vZGUobm9kZXNBcnJheVtpXSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXI7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgY2xvbmVOb2RlczogZnVuY3Rpb24gKG5vZGVzQXJyYXksIHNob3VsZENsZWFuTm9kZXMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBub2Rlc0FycmF5Lmxlbmd0aCwgbmV3Tm9kZXNBcnJheSA9IFtdOyBpIDwgajsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2xvbmVkTm9kZSA9IG5vZGVzQXJyYXlbaV0uY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgbmV3Tm9kZXNBcnJheS5wdXNoKHNob3VsZENsZWFuTm9kZXMgPyBrby5jbGVhbk5vZGUoY2xvbmVkTm9kZSkgOiBjbG9uZWROb2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3Tm9kZXNBcnJheTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXREb21Ob2RlQ2hpbGRyZW46IGZ1bmN0aW9uIChkb21Ob2RlLCBjaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICAgIGtvLnV0aWxzLmVtcHR5RG9tTm9kZShkb21Ob2RlKTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZXMpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBqOyBpKyspXHJcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZS5hcHBlbmRDaGlsZChjaGlsZE5vZGVzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHJlcGxhY2VEb21Ob2RlczogZnVuY3Rpb24gKG5vZGVUb1JlcGxhY2VPck5vZGVBcnJheSwgbmV3Tm9kZXNBcnJheSkge1xyXG4gICAgICAgICAgICB2YXIgbm9kZXNUb1JlcGxhY2VBcnJheSA9IG5vZGVUb1JlcGxhY2VPck5vZGVBcnJheS5ub2RlVHlwZSA/IFtub2RlVG9SZXBsYWNlT3JOb2RlQXJyYXldIDogbm9kZVRvUmVwbGFjZU9yTm9kZUFycmF5O1xyXG4gICAgICAgICAgICBpZiAobm9kZXNUb1JlcGxhY2VBcnJheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5zZXJ0aW9uUG9pbnQgPSBub2Rlc1RvUmVwbGFjZUFycmF5WzBdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGluc2VydGlvblBvaW50LnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IG5ld05vZGVzQXJyYXkubGVuZ3RoOyBpIDwgajsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUobmV3Tm9kZXNBcnJheVtpXSwgaW5zZXJ0aW9uUG9pbnQpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBub2Rlc1RvUmVwbGFjZUFycmF5Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGtvLnJlbW92ZU5vZGUobm9kZXNUb1JlcGxhY2VBcnJheVtpXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBmaXhVcENvbnRpbnVvdXNOb2RlQXJyYXk6IGZ1bmN0aW9uKGNvbnRpbnVvdXNOb2RlQXJyYXksIHBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgLy8gQmVmb3JlIGFjdGluZyBvbiBhIHNldCBvZiBub2RlcyB0aGF0IHdlcmUgcHJldmlvdXNseSBvdXRwdXR0ZWQgYnkgYSB0ZW1wbGF0ZSBmdW5jdGlvbiwgd2UgaGF2ZSB0byByZWNvbmNpbGVcclxuICAgICAgICAgICAgLy8gdGhlbSBhZ2FpbnN0IHdoYXQgaXMgaW4gdGhlIERPTSByaWdodCBub3cuIEl0IG1heSBiZSB0aGF0IHNvbWUgb2YgdGhlIG5vZGVzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQsIG9yIHRoYXRcclxuICAgICAgICAgICAgLy8gbmV3IG5vZGVzIG1pZ2h0IGhhdmUgYmVlbiBpbnNlcnRlZCBpbiB0aGUgbWlkZGxlLCBmb3IgZXhhbXBsZSBieSBhIGJpbmRpbmcuIEFsc28sIHRoZXJlIG1heSBwcmV2aW91c2x5IGhhdmUgYmVlblxyXG4gICAgICAgICAgICAvLyBsZWFkaW5nIGNvbW1lbnQgbm9kZXMgKGNyZWF0ZWQgYnkgcmV3cml0dGVuIHN0cmluZy1iYXNlZCB0ZW1wbGF0ZXMpIHRoYXQgaGF2ZSBzaW5jZSBiZWVuIHJlbW92ZWQgZHVyaW5nIGJpbmRpbmcuXHJcbiAgICAgICAgICAgIC8vIFNvLCB0aGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgdGhlIG9sZCBcIm1hcFwiIG91dHB1dCBhcnJheSBpbnRvIGl0cyBiZXN0IGd1ZXNzIG9mIHRoZSBzZXQgb2YgY3VycmVudCBET00gbm9kZXMuXHJcbiAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgIC8vIFJ1bGVzOlxyXG4gICAgICAgICAgICAvLyAgIFtBXSBBbnkgbGVhZGluZyBub2RlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNob3VsZCBiZSBpZ25vcmVkXHJcbiAgICAgICAgICAgIC8vICAgICAgIFRoZXNlIG1vc3QgbGlrZWx5IGNvcnJlc3BvbmQgdG8gbWVtb2l6YXRpb24gbm9kZXMgdGhhdCB3ZXJlIGFscmVhZHkgcmVtb3ZlZCBkdXJpbmcgYmluZGluZ1xyXG4gICAgICAgICAgICAvLyAgICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2tub2Nrb3V0L2tub2Nrb3V0L3B1bGwvNDQwXHJcbiAgICAgICAgICAgIC8vICAgW0JdIEFueSB0cmFpbGluZyBub2RlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmUgc2hvdWxkIGJlIGlnbm9yZWRcclxuICAgICAgICAgICAgLy8gICAgICAgVGhpcyBwcmV2ZW50cyB0aGUgY29kZSBoZXJlIGZyb20gYWRkaW5nIHVucmVsYXRlZCBub2RlcyB0byB0aGUgYXJyYXkgd2hpbGUgcHJvY2Vzc2luZyBydWxlIFtDXVxyXG4gICAgICAgICAgICAvLyAgICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2tub2Nrb3V0L2tub2Nrb3V0L3B1bGwvMTkwM1xyXG4gICAgICAgICAgICAvLyAgIFtDXSBXZSB3YW50IHRvIG91dHB1dCBhIGNvbnRpbnVvdXMgc2VyaWVzIG9mIG5vZGVzLiBTbywgaWdub3JlIGFueSBub2RlcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQsXHJcbiAgICAgICAgICAgIC8vICAgICAgIGFuZCBpbmNsdWRlIGFueSBub2RlcyB0aGF0IGhhdmUgYmVlbiBpbnNlcnRlZCBhbW9uZyB0aGUgcHJldmlvdXMgY29sbGVjdGlvblxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRpbnVvdXNOb2RlQXJyYXkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUaGUgcGFyZW50IG5vZGUgY2FuIGJlIGEgdmlydHVhbCBlbGVtZW50OyBzbyBnZXQgdGhlIHJlYWwgcGFyZW50IG5vZGVcclxuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSAocGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gOCAmJiBwYXJlbnROb2RlLnBhcmVudE5vZGUpIHx8IHBhcmVudE5vZGU7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUnVsZSBbQV1cclxuICAgICAgICAgICAgICAgIHdoaWxlIChjb250aW51b3VzTm9kZUFycmF5Lmxlbmd0aCAmJiBjb250aW51b3VzTm9kZUFycmF5WzBdLnBhcmVudE5vZGUgIT09IHBhcmVudE5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludW91c05vZGVBcnJheS5zcGxpY2UoMCwgMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUnVsZSBbQl1cclxuICAgICAgICAgICAgICAgIHdoaWxlIChjb250aW51b3VzTm9kZUFycmF5Lmxlbmd0aCA+IDEgJiYgY29udGludW91c05vZGVBcnJheVtjb250aW51b3VzTm9kZUFycmF5Lmxlbmd0aCAtIDFdLnBhcmVudE5vZGUgIT09IHBhcmVudE5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludW91c05vZGVBcnJheS5sZW5ndGgtLTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBSdWxlIFtDXVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRpbnVvdXNOb2RlQXJyYXkubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gY29udGludW91c05vZGVBcnJheVswXSwgbGFzdCA9IGNvbnRpbnVvdXNOb2RlQXJyYXlbY29udGludW91c05vZGVBcnJheS5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHdpdGggdGhlIGFjdHVhbCBuZXcgY29udGludW91cyBub2RlIHNldFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVvdXNOb2RlQXJyYXkubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudCAhPT0gbGFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzTm9kZUFycmF5LnB1c2goY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzTm9kZUFycmF5LnB1c2gobGFzdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVvdXNOb2RlQXJyYXk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0T3B0aW9uTm9kZVNlbGVjdGlvblN0YXRlOiBmdW5jdGlvbiAob3B0aW9uTm9kZSwgaXNTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAvLyBJRTYgc29tZXRpbWVzIHRocm93cyBcInVua25vd24gZXJyb3JcIiBpZiB5b3UgdHJ5IHRvIHdyaXRlIHRvIC5zZWxlY3RlZCBkaXJlY3RseSwgd2hlcmVhcyBGaXJlZm94IHN0cnVnZ2xlcyB3aXRoIHNldEF0dHJpYnV0ZS4gUGljayBvbmUgYmFzZWQgb24gYnJvd3Nlci5cclxuICAgICAgICAgICAgaWYgKGllVmVyc2lvbiA8IDcpXHJcbiAgICAgICAgICAgICAgICBvcHRpb25Ob2RlLnNldEF0dHJpYnV0ZShcInNlbGVjdGVkXCIsIGlzU2VsZWN0ZWQpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBvcHRpb25Ob2RlLnNlbGVjdGVkID0gaXNTZWxlY3RlZDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzdHJpbmdUcmltOiBmdW5jdGlvbiAoc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcgPT09IG51bGwgfHwgc3RyaW5nID09PSB1bmRlZmluZWQgPyAnJyA6XHJcbiAgICAgICAgICAgICAgICBzdHJpbmcudHJpbSA/XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLnRyaW0oKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLnRvU3RyaW5nKCkucmVwbGFjZSgvXltcXHNcXHhhMF0rfFtcXHNcXHhhMF0rJC9nLCAnJyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc3RyaW5nU3RhcnRzV2l0aDogZnVuY3Rpb24gKHN0cmluZywgc3RhcnRzV2l0aCkge1xyXG4gICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcgfHwgXCJcIjtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0c1dpdGgubGVuZ3RoID4gc3RyaW5nLmxlbmd0aClcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoMCwgc3RhcnRzV2l0aC5sZW5ndGgpID09PSBzdGFydHNXaXRoO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGRvbU5vZGVJc0NvbnRhaW5lZEJ5OiBmdW5jdGlvbiAobm9kZSwgY29udGFpbmVkQnlOb2RlKSB7XHJcbiAgICAgICAgICAgIGlmIChub2RlID09PSBjb250YWluZWRCeU5vZGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDExKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBGaXhlcyBpc3N1ZSAjMTE2MiAtIGNhbid0IHVzZSBub2RlLmNvbnRhaW5zIGZvciBkb2N1bWVudCBmcmFnbWVudHMgb24gSUU4XHJcbiAgICAgICAgICAgIGlmIChjb250YWluZWRCeU5vZGUuY29udGFpbnMpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmVkQnlOb2RlLmNvbnRhaW5zKG5vZGUubm9kZVR5cGUgPT09IDMgPyBub2RlLnBhcmVudE5vZGUgOiBub2RlKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRhaW5lZEJ5Tm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbilcclxuICAgICAgICAgICAgICAgIHJldHVybiAoY29udGFpbmVkQnlOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5vZGUpICYgMTYpID09IDE2O1xyXG4gICAgICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9IGNvbnRhaW5lZEJ5Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gISFub2RlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGRvbU5vZGVJc0F0dGFjaGVkVG9Eb2N1bWVudDogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGtvLnV0aWxzLmRvbU5vZGVJc0NvbnRhaW5lZEJ5KG5vZGUsIG5vZGUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFueURvbU5vZGVJc0F0dGFjaGVkVG9Eb2N1bWVudDogZnVuY3Rpb24obm9kZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuICEha28udXRpbHMuYXJyYXlGaXJzdChub2Rlcywga28udXRpbHMuZG9tTm9kZUlzQXR0YWNoZWRUb0RvY3VtZW50KTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB0YWdOYW1lTG93ZXI6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgLy8gRm9yIEhUTUwgZWxlbWVudHMsIHRhZ05hbWUgd2lsbCBhbHdheXMgYmUgdXBwZXIgY2FzZTsgZm9yIFhIVE1MIGVsZW1lbnRzLCBpdCdsbCBiZSBsb3dlciBjYXNlLlxyXG4gICAgICAgICAgICAvLyBQb3NzaWJsZSBmdXR1cmUgb3B0aW1pemF0aW9uOiBJZiB3ZSBrbm93IGl0J3MgYW4gZWxlbWVudCBmcm9tIGFuIFhIVE1MIGRvY3VtZW50IChub3QgSFRNTCksXHJcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhlIC50b0xvd2VyQ2FzZSgpIGFzIGl0IHdpbGwgYWx3YXlzIGJlIGxvd2VyIGNhc2UgYW55d2F5LlxyXG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50LnRhZ05hbWUgJiYgZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgY2F0Y2hGdW5jdGlvbkVycm9yczogZnVuY3Rpb24gKGRlbGVnYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBrb1snb25FcnJvciddID8gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBrb1snb25FcnJvciddICYmIGtvWydvbkVycm9yJ10oZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSA6IGRlbGVnYXRlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGtvLnV0aWxzLmNhdGNoRnVuY3Rpb25FcnJvcnMoaGFuZGxlciksIHRpbWVvdXQpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGRlZmVyRXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGtvWydvbkVycm9yJ10gJiYga29bJ29uRXJyb3InXShlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgcmVnaXN0ZXJFdmVudEhhbmRsZXI6IGZ1bmN0aW9uIChlbGVtZW50LCBldmVudFR5cGUsIGhhbmRsZXIpIHtcclxuICAgICAgICAgICAgdmFyIHdyYXBwZWRIYW5kbGVyID0ga28udXRpbHMuY2F0Y2hGdW5jdGlvbkVycm9ycyhoYW5kbGVyKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBtdXN0VXNlQXR0YWNoRXZlbnQgPSBpZVZlcnNpb24gJiYgZXZlbnRzVGhhdE11c3RCZVJlZ2lzdGVyZWRVc2luZ0F0dGFjaEV2ZW50W2V2ZW50VHlwZV07XHJcbiAgICAgICAgICAgIGlmICgha28ub3B0aW9uc1sndXNlT25seU5hdGl2ZUV2ZW50cyddICYmICFtdXN0VXNlQXR0YWNoRXZlbnQgJiYgalF1ZXJ5SW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGpRdWVyeUluc3RhbmNlKGVsZW1lbnQpWydiaW5kJ10oZXZlbnRUeXBlLCB3cmFwcGVkSGFuZGxlcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIW11c3RVc2VBdHRhY2hFdmVudCAmJiB0eXBlb2YgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyID09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIHdyYXBwZWRIYW5kbGVyLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50LmF0dGFjaEV2ZW50ICE9IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRhY2hFdmVudEhhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHsgd3JhcHBlZEhhbmRsZXIuY2FsbChlbGVtZW50LCBldmVudCk7IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNoRXZlbnROYW1lID0gXCJvblwiICsgZXZlbnRUeXBlO1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5hdHRhY2hFdmVudChhdHRhY2hFdmVudE5hbWUsIGF0dGFjaEV2ZW50SGFuZGxlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSUUgZG9lcyBub3QgZGlzcG9zZSBhdHRhY2hFdmVudCBoYW5kbGVycyBhdXRvbWF0aWNhbGx5ICh1bmxpa2Ugd2l0aCBhZGRFdmVudExpc3RlbmVyKVxyXG4gICAgICAgICAgICAgICAgLy8gc28gdG8gYXZvaWQgbGVha3MsIHdlIGhhdmUgdG8gcmVtb3ZlIHRoZW0gbWFudWFsbHkuIFNlZSBidWcgIzg1NlxyXG4gICAgICAgICAgICAgICAga28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmRldGFjaEV2ZW50KGF0dGFjaEV2ZW50TmFtZSwgYXR0YWNoRXZlbnRIYW5kbGVyKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGFkZEV2ZW50TGlzdGVuZXIgb3IgYXR0YWNoRXZlbnRcIik7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdHJpZ2dlckV2ZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgZXZlbnRUeXBlKSB7XHJcbiAgICAgICAgICAgIGlmICghKGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSkpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbGVtZW50IG11c3QgYmUgYSBET00gbm9kZSB3aGVuIGNhbGxpbmcgdHJpZ2dlckV2ZW50XCIpO1xyXG5cclxuICAgICAgICAgICAgLy8gRm9yIGNsaWNrIGV2ZW50cyBvbiBjaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zLCBqUXVlcnkgdG9nZ2xlcyB0aGUgZWxlbWVudCBjaGVja2VkIHN0YXRlICphZnRlciogdGhlXHJcbiAgICAgICAgICAgIC8vIGV2ZW50IGhhbmRsZXIgcnVucyBpbnN0ZWFkIG9mICpiZWZvcmUqLiAoVGhpcyB3YXMgZml4ZWQgaW4gMS45IGZvciBjaGVja2JveGVzIGJ1dCBub3QgZm9yIHJhZGlvIGJ1dHRvbnMuKVxyXG4gICAgICAgICAgICAvLyBJRSBkb2Vzbid0IGNoYW5nZSB0aGUgY2hlY2tlZCBzdGF0ZSB3aGVuIHlvdSB0cmlnZ2VyIHRoZSBjbGljayBldmVudCB1c2luZyBcImZpcmVFdmVudFwiLlxyXG4gICAgICAgICAgICAvLyBJbiBib3RoIGNhc2VzLCB3ZSdsbCB1c2UgdGhlIGNsaWNrIG1ldGhvZCBpbnN0ZWFkLlxyXG4gICAgICAgICAgICB2YXIgdXNlQ2xpY2tXb3JrYXJvdW5kID0gaXNDbGlja09uQ2hlY2thYmxlRWxlbWVudChlbGVtZW50LCBldmVudFR5cGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFrby5vcHRpb25zWyd1c2VPbmx5TmF0aXZlRXZlbnRzJ10gJiYgalF1ZXJ5SW5zdGFuY2UgJiYgIXVzZUNsaWNrV29ya2Fyb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgalF1ZXJ5SW5zdGFuY2UoZWxlbWVudClbJ3RyaWdnZXInXShldmVudFR5cGUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFdmVudCA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZWxlbWVudC5kaXNwYXRjaEV2ZW50ID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBldmVudENhdGVnb3J5ID0ga25vd25FdmVudFR5cGVzQnlFdmVudE5hbWVbZXZlbnRUeXBlXSB8fCBcIkhUTUxFdmVudHNcIjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChldmVudENhdGVnb3J5KTtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5pbml0RXZlbnQoZXZlbnRUeXBlLCB0cnVlLCB0cnVlLCB3aW5kb3csIDAsIDAsIDAsIDAsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCBlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBzdXBwbGllZCBlbGVtZW50IGRvZXNuJ3Qgc3VwcG9ydCBkaXNwYXRjaEV2ZW50XCIpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVzZUNsaWNrV29ya2Fyb3VuZCAmJiBlbGVtZW50LmNsaWNrKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQuZmlyZUV2ZW50ICE9IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuZmlyZUV2ZW50KFwib25cIiArIGV2ZW50VHlwZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCcm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCB0cmlnZ2VyaW5nIGV2ZW50c1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHVud3JhcE9ic2VydmFibGU6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4ga28uaXNPYnNlcnZhYmxlKHZhbHVlKSA/IHZhbHVlKCkgOiB2YWx1ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBwZWVrT2JzZXJ2YWJsZTogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBrby5pc09ic2VydmFibGUodmFsdWUpID8gdmFsdWUucGVlaygpIDogdmFsdWU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdG9nZ2xlRG9tTm9kZUNzc0NsYXNzOiB0b2dnbGVEb21Ob2RlQ3NzQ2xhc3MsXHJcblxyXG4gICAgICAgIHNldFRleHRDb250ZW50OiBmdW5jdGlvbihlbGVtZW50LCB0ZXh0Q29udGVudCkge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKHRleHRDb250ZW50KTtcclxuICAgICAgICAgICAgaWYgKCh2YWx1ZSA9PT0gbnVsbCkgfHwgKHZhbHVlID09PSB1bmRlZmluZWQpKVxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBcIlwiO1xyXG5cclxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0aGVyZSB0byBiZSBleGFjdGx5IG9uZSBjaGlsZDogYSB0ZXh0IG5vZGUuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBjaGlsZHJlbiwgbW9yZSB0aGFuIG9uZSwgb3IgaWYgaXQncyBub3QgYSB0ZXh0IG5vZGUsXHJcbiAgICAgICAgICAgIC8vIHdlJ2xsIGNsZWFyIGV2ZXJ5dGhpbmcgYW5kIGNyZWF0ZSBhIHNpbmdsZSB0ZXh0IG5vZGUuXHJcbiAgICAgICAgICAgIHZhciBpbm5lclRleHROb2RlID0ga28udmlydHVhbEVsZW1lbnRzLmZpcnN0Q2hpbGQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgIGlmICghaW5uZXJUZXh0Tm9kZSB8fCBpbm5lclRleHROb2RlLm5vZGVUeXBlICE9IDMgfHwga28udmlydHVhbEVsZW1lbnRzLm5leHRTaWJsaW5nKGlubmVyVGV4dE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBrby52aXJ0dWFsRWxlbWVudHMuc2V0RG9tTm9kZUNoaWxkcmVuKGVsZW1lbnQsIFtlbGVtZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodmFsdWUpXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpbm5lclRleHROb2RlLmRhdGEgPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAga28udXRpbHMuZm9yY2VSZWZyZXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNldEVsZW1lbnROYW1lOiBmdW5jdGlvbihlbGVtZW50LCBuYW1lKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQubmFtZSA9IG5hbWU7XHJcblxyXG4gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIElFIDYvNyBpc3N1ZVxyXG4gICAgICAgICAgICAvLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9TdGV2ZVNhbmRlcnNvbi9rbm9ja291dC9pc3N1ZXMvMTk3XHJcbiAgICAgICAgICAgIC8vIC0gaHR0cDovL3d3dy5tYXR0czQxMS5jb20vcG9zdC9zZXR0aW5nX3RoZV9uYW1lX2F0dHJpYnV0ZV9pbl9pZV9kb20vXHJcbiAgICAgICAgICAgIGlmIChpZVZlcnNpb24gPD0gNykge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1lcmdlQXR0cmlidXRlcyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiPGlucHV0IG5hbWU9J1wiICsgZWxlbWVudC5uYW1lICsgXCInLz5cIiksIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoKGUpIHt9IC8vIEZvciBJRTkgd2l0aCBkb2MgbW9kZSBcIklFOSBTdGFuZGFyZHNcIiBhbmQgYnJvd3NlciBtb2RlIFwiSUU5IENvbXBhdGliaWxpdHkgVmlld1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBmb3JjZVJlZnJlc2g6IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgYW4gSUU5IHJlbmRlcmluZyBidWcgLSBodHRwczovL2dpdGh1Yi5jb20vU3RldmVTYW5kZXJzb24va25vY2tvdXQvaXNzdWVzLzIwOVxyXG4gICAgICAgICAgICBpZiAoaWVWZXJzaW9uID49IDkpIHtcclxuICAgICAgICAgICAgICAgIC8vIEZvciB0ZXh0IG5vZGVzIGFuZCBjb21tZW50IG5vZGVzIChtb3N0IGxpa2VseSB2aXJ0dWFsIGVsZW1lbnRzKSwgd2Ugd2lsbCBoYXZlIHRvIHJlZnJlc2ggdGhlIGNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgdmFyIGVsZW0gPSBub2RlLm5vZGVUeXBlID09IDEgPyBub2RlIDogbm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW0uc3R5bGUpXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZS56b29tID0gZWxlbS5zdHlsZS56b29tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgZW5zdXJlU2VsZWN0RWxlbWVudElzUmVuZGVyZWRDb3JyZWN0bHk6IGZ1bmN0aW9uKHNlbGVjdEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgSUU5IHJlbmRlcmluZyBidWcgLSBpdCBkb2Vzbid0IHJlbGlhYmx5IGRpc3BsYXkgYWxsIHRoZSB0ZXh0IGluIGR5bmFtaWNhbGx5LWFkZGVkIHNlbGVjdCBib3hlcyB1bmxlc3MgeW91IGZvcmNlIGl0IHRvIHJlLXJlbmRlciBieSB1cGRhdGluZyB0aGUgd2lkdGguXHJcbiAgICAgICAgICAgIC8vIChTZWUgaHR0cHM6Ly9naXRodWIuY29tL1N0ZXZlU2FuZGVyc29uL2tub2Nrb3V0L2lzc3Vlcy8zMTIsIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTkwODQ5NC9zZWxlY3Qtb25seS1zaG93cy1maXJzdC1jaGFyLW9mLXNlbGVjdGVkLW9wdGlvbilcclxuICAgICAgICAgICAgLy8gQWxzbyBmaXhlcyBJRTcgYW5kIElFOCBidWcgdGhhdCBjYXVzZXMgc2VsZWN0cyB0byBiZSB6ZXJvIHdpZHRoIGlmIGVuY2xvc2VkIGJ5ICdpZicgb3IgJ3dpdGgnLiAoU2VlIGlzc3VlICM4MzkpXHJcbiAgICAgICAgICAgIGlmIChpZVZlcnNpb24pIHtcclxuICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbFdpZHRoID0gc2VsZWN0RWxlbWVudC5zdHlsZS53aWR0aDtcclxuICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuc3R5bGUud2lkdGggPSAwO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5zdHlsZS53aWR0aCA9IG9yaWdpbmFsV2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICByYW5nZTogZnVuY3Rpb24gKG1pbiwgbWF4KSB7XHJcbiAgICAgICAgICAgIG1pbiA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUobWluKTtcclxuICAgICAgICAgICAgbWF4ID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShtYXgpO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBtaW47IGkgPD0gbWF4OyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBtYWtlQXJyYXk6IGZ1bmN0aW9uKGFycmF5TGlrZU9iamVjdCkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gYXJyYXlMaWtlT2JqZWN0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJyYXlMaWtlT2JqZWN0W2ldKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBjcmVhdGVTeW1ib2xPclN0cmluZzogZnVuY3Rpb24oaWRlbnRpZmllcikge1xyXG4gICAgICAgICAgICByZXR1cm4gY2FuVXNlU3ltYm9scyA/IFN5bWJvbChpZGVudGlmaWVyKSA6IGlkZW50aWZpZXI7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgaXNJZTYgOiBpc0llNixcclxuICAgICAgICBpc0llNyA6IGlzSWU3LFxyXG4gICAgICAgIGllVmVyc2lvbiA6IGllVmVyc2lvbixcclxuXHJcbiAgICAgICAgZ2V0Rm9ybUZpZWxkczogZnVuY3Rpb24oZm9ybSwgZmllbGROYW1lKSB7XHJcbiAgICAgICAgICAgIHZhciBmaWVsZHMgPSBrby51dGlscy5tYWtlQXJyYXkoZm9ybS5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpKS5jb25jYXQoa28udXRpbHMubWFrZUFycmF5KGZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ0ZXh0YXJlYVwiKSkpO1xyXG4gICAgICAgICAgICB2YXIgaXNNYXRjaGluZ0ZpZWxkID0gKHR5cGVvZiBmaWVsZE5hbWUgPT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgICAgICA/IGZ1bmN0aW9uKGZpZWxkKSB7IHJldHVybiBmaWVsZC5uYW1lID09PSBmaWVsZE5hbWUgfVxyXG4gICAgICAgICAgICAgICAgOiBmdW5jdGlvbihmaWVsZCkgeyByZXR1cm4gZmllbGROYW1lLnRlc3QoZmllbGQubmFtZSkgfTsgLy8gVHJlYXQgZmllbGROYW1lIGFzIHJlZ2V4IG9yIG9iamVjdCBjb250YWluaW5nIHByZWRpY2F0ZVxyXG4gICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gZmllbGRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaGluZ0ZpZWxkKGZpZWxkc1tpXSkpXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKGZpZWxkc1tpXSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHBhcnNlSnNvbjogZnVuY3Rpb24gKGpzb25TdHJpbmcpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBqc29uU3RyaW5nID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIGpzb25TdHJpbmcgPSBrby51dGlscy5zdHJpbmdUcmltKGpzb25TdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGpzb25TdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTiAmJiBKU09OLnBhcnNlKSAvLyBVc2UgbmF0aXZlIHBhcnNpbmcgd2hlcmUgYXZhaWxhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAobmV3IEZ1bmN0aW9uKFwicmV0dXJuIFwiICsganNvblN0cmluZykpKCk7IC8vIEZhbGxiYWNrIG9uIGxlc3Mgc2FmZSBwYXJzaW5nIGZvciBvbGRlciBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHN0cmluZ2lmeUpzb246IGZ1bmN0aW9uIChkYXRhLCByZXBsYWNlciwgc3BhY2UpIHsgICAvLyByZXBsYWNlciBhbmQgc3BhY2UgYXJlIG9wdGlvbmFsXHJcbiAgICAgICAgICAgIGlmICghSlNPTiB8fCAhSlNPTi5zdHJpbmdpZnkpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBKU09OLnN0cmluZ2lmeSgpLiBTb21lIGJyb3dzZXJzIChlLmcuLCBJRSA8IDgpIGRvbid0IHN1cHBvcnQgaXQgbmF0aXZlbHksIGJ1dCB5b3UgY2FuIG92ZXJjb21lIHRoaXMgYnkgYWRkaW5nIGEgc2NyaXB0IHJlZmVyZW5jZSB0byBqc29uMi5qcywgZG93bmxvYWRhYmxlIGZyb20gaHR0cDovL3d3dy5qc29uLm9yZy9qc29uMi5qc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUoZGF0YSksIHJlcGxhY2VyLCBzcGFjZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgcG9zdEpzb246IGZ1bmN0aW9uICh1cmxPckZvcm0sIGRhdGEsIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSBvcHRpb25zWydwYXJhbXMnXSB8fCB7fTtcclxuICAgICAgICAgICAgdmFyIGluY2x1ZGVGaWVsZHMgPSBvcHRpb25zWydpbmNsdWRlRmllbGRzJ10gfHwgdGhpcy5maWVsZHNJbmNsdWRlZFdpdGhKc29uUG9zdDtcclxuICAgICAgICAgICAgdmFyIHVybCA9IHVybE9yRm9ybTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3JtLCB1c2UgaXRzICdhY3Rpb24nIFVSTCBhbmQgcGljayBvdXQgYW55IHJlcXVlc3RlZCBmaWVsZCB2YWx1ZXNcclxuICAgICAgICAgICAgaWYoKHR5cGVvZiB1cmxPckZvcm0gPT0gJ29iamVjdCcpICYmIChrby51dGlscy50YWdOYW1lTG93ZXIodXJsT3JGb3JtKSA9PT0gXCJmb3JtXCIpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3JpZ2luYWxGb3JtID0gdXJsT3JGb3JtO1xyXG4gICAgICAgICAgICAgICAgdXJsID0gb3JpZ2luYWxGb3JtLmFjdGlvbjtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmNsdWRlRmllbGRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkcyA9IGtvLnV0aWxzLmdldEZvcm1GaWVsZHMob3JpZ2luYWxGb3JtLCBpbmNsdWRlRmllbGRzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gZmllbGRzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbZmllbGRzW2pdLm5hbWVdID0gZmllbGRzW2pdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkYXRhID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShkYXRhKTtcclxuICAgICAgICAgICAgdmFyIGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcclxuICAgICAgICAgICAgZm9ybS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgICAgIGZvcm0uYWN0aW9uID0gdXJsO1xyXG4gICAgICAgICAgICBmb3JtLm1ldGhvZCA9IFwicG9zdFwiO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgLy8gU2luY2UgJ2RhdGEnIHRoaXMgaXMgYSBtb2RlbCBvYmplY3QsIHdlIGluY2x1ZGUgYWxsIHByb3BlcnRpZXMgaW5jbHVkaW5nIHRob3NlIGluaGVyaXRlZCBmcm9tIGl0cyBwcm90b3R5cGVcclxuICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImhpZGRlblwiO1xyXG4gICAgICAgICAgICAgICAgaW5wdXQubmFtZSA9IGtleTtcclxuICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0ga28udXRpbHMuc3RyaW5naWZ5SnNvbihrby51dGlscy51bndyYXBPYnNlcnZhYmxlKGRhdGFba2V5XSkpO1xyXG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChpbnB1dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb2JqZWN0Rm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgICAgICAgICAgICAgIGlucHV0LnR5cGUgPSBcImhpZGRlblwiO1xyXG4gICAgICAgICAgICAgICAgaW5wdXQubmFtZSA9IGtleTtcclxuICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGlucHV0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZm9ybSk7XHJcbiAgICAgICAgICAgIG9wdGlvbnNbJ3N1Ym1pdHRlciddID8gb3B0aW9uc1snc3VibWl0dGVyJ10oZm9ybSkgOiBmb3JtLnN1Ym1pdCgpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgZm9ybS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGZvcm0pOyB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0oKSk7XHJcblxyXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzJywga28udXRpbHMpO1xyXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLmFycmF5Rm9yRWFjaCcsIGtvLnV0aWxzLmFycmF5Rm9yRWFjaCk7XHJcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMuYXJyYXlGaXJzdCcsIGtvLnV0aWxzLmFycmF5Rmlyc3QpO1xyXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLmFycmF5RmlsdGVyJywga28udXRpbHMuYXJyYXlGaWx0ZXIpO1xyXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLmFycmF5R2V0RGlzdGluY3RWYWx1ZXMnLCBrby51dGlscy5hcnJheUdldERpc3RpbmN0VmFsdWVzKTtcclxua28uZXhwb3J0U3ltYm9sKCd1dGlscy5hcnJheUluZGV4T2YnLCBrby51dGlscy5hcnJheUluZGV4T2YpO1xyXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLmFycmF5TWFwJywga28udXRpbHMuYXJyYXlNYXApO1xyXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLmFycmF5UHVzaEFsbCcsIGtvLnV0aWxzLmFycmF5UHVzaEFsbCk7XHJcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMuYXJyYXlSZW1vdmVJdGVtJywga28udXRpbHMuYXJyYXlSZW1vdmVJdGVtKTtcclxua28uZXhwb3J0U3ltYm9sKCd1dGlscy5leHRlbmQnLCBrby51dGlscy5leHRlbmQpO1xyXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLmZpZWxkc0luY2x1ZGVkV2l0aEpzb25Qb3N0Jywga28udXRpbHMuZmllbGRzSW5jbHVkZWRXaXRoSnNvblBvc3QpO1xyXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLmdldEZvcm1GaWVsZHMnLCBrby51dGlscy5nZXRGb3JtRmllbGRzKTtcclxua28uZXhwb3J0U3ltYm9sKCd1dGlscy5wZWVrT2JzZXJ2YWJsZScsIGtvLnV0aWxzLnBlZWtPYnNlcnZhYmxlKTtcclxua28uZXhwb3J0U3ltYm9sKCd1dGlscy5wb3N0SnNvbicsIGtvLnV0aWxzLnBvc3RKc29uKTtcclxua28uZXhwb3J0U3ltYm9sKCd1dGlscy5wYXJzZUpzb24nLCBrby51dGlscy5wYXJzZUpzb24pO1xyXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLnJlZ2lzdGVyRXZlbnRIYW5kbGVyJywga28udXRpbHMucmVnaXN0ZXJFdmVudEhhbmRsZXIpO1xyXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLnN0cmluZ2lmeUpzb24nLCBrby51dGlscy5zdHJpbmdpZnlKc29uKTtcclxua28uZXhwb3J0U3ltYm9sKCd1dGlscy5yYW5nZScsIGtvLnV0aWxzLnJhbmdlKTtcclxua28uZXhwb3J0U3ltYm9sKCd1dGlscy50b2dnbGVEb21Ob2RlQ3NzQ2xhc3MnLCBrby51dGlscy50b2dnbGVEb21Ob2RlQ3NzQ2xhc3MpO1xyXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLnRyaWdnZXJFdmVudCcsIGtvLnV0aWxzLnRyaWdnZXJFdmVudCk7XHJcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMudW53cmFwT2JzZXJ2YWJsZScsIGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUpO1xyXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLm9iamVjdEZvckVhY2gnLCBrby51dGlscy5vYmplY3RGb3JFYWNoKTtcclxua28uZXhwb3J0U3ltYm9sKCd1dGlscy5hZGRPclJlbW92ZUl0ZW0nLCBrby51dGlscy5hZGRPclJlbW92ZUl0ZW0pO1xyXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLnNldFRleHRDb250ZW50Jywga28udXRpbHMuc2V0VGV4dENvbnRlbnQpO1xyXG5rby5leHBvcnRTeW1ib2woJ3Vud3JhcCcsIGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUpOyAvLyBDb252ZW5pZW50IHNob3J0aGFuZCwgYmVjYXVzZSB0aGlzIGlzIHVzZWQgc28gY29tbW9ubHlcclxuXHJcbmlmICghRnVuY3Rpb24ucHJvdG90eXBlWydiaW5kJ10pIHtcclxuICAgIC8vIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGlzIGEgc3RhbmRhcmQgcGFydCBvZiBFQ01BU2NyaXB0IDV0aCBFZGl0aW9uIChEZWNlbWJlciAyMDA5LCBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvcHVibGljYXRpb25zL2ZpbGVzL0VDTUEtU1QvRUNNQS0yNjIucGRmKVxyXG4gICAgLy8gSW4gY2FzZSB0aGUgYnJvd3NlciBkb2Vzbid0IGltcGxlbWVudCBpdCBuYXRpdmVseSwgcHJvdmlkZSBhIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24uIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIG9uZSBpbiBwcm90b3R5cGUuanNcclxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZVsnYmluZCddID0gZnVuY3Rpb24gKG9iamVjdCkge1xyXG4gICAgICAgIHZhciBvcmlnaW5hbEZ1bmN0aW9uID0gdGhpcztcclxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRnVuY3Rpb24uYXBwbHkob2JqZWN0LCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0aWFsQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHBhcnRpYWxBcmdzLnNsaWNlKDApO1xyXG4gICAgICAgICAgICAgICAgYXJncy5wdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxGdW5jdGlvbi5hcHBseShvYmplY3QsIGFyZ3MpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmtvLnV0aWxzLmRvbURhdGEgPSBuZXcgKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB1bmlxdWVJZCA9IDA7XHJcbiAgICB2YXIgZGF0YVN0b3JlS2V5RXhwYW5kb1Byb3BlcnR5TmFtZSA9IFwiX19rb19fXCIgKyAobmV3IERhdGUpLmdldFRpbWUoKTtcclxuICAgIHZhciBkYXRhU3RvcmUgPSB7fTtcclxuXHJcbiAgICBmdW5jdGlvbiBnZXRBbGwobm9kZSwgY3JlYXRlSWZOb3RGb3VuZCkge1xyXG4gICAgICAgIHZhciBkYXRhU3RvcmVLZXkgPSBub2RlW2RhdGFTdG9yZUtleUV4cGFuZG9Qcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgIHZhciBoYXNFeGlzdGluZ0RhdGFTdG9yZSA9IGRhdGFTdG9yZUtleSAmJiAoZGF0YVN0b3JlS2V5ICE9PSBcIm51bGxcIikgJiYgZGF0YVN0b3JlW2RhdGFTdG9yZUtleV07XHJcbiAgICAgICAgaWYgKCFoYXNFeGlzdGluZ0RhdGFTdG9yZSkge1xyXG4gICAgICAgICAgICBpZiAoIWNyZWF0ZUlmTm90Rm91bmQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBkYXRhU3RvcmVLZXkgPSBub2RlW2RhdGFTdG9yZUtleUV4cGFuZG9Qcm9wZXJ0eU5hbWVdID0gXCJrb1wiICsgdW5pcXVlSWQrKztcclxuICAgICAgICAgICAgZGF0YVN0b3JlW2RhdGFTdG9yZUtleV0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGFTdG9yZVtkYXRhU3RvcmVLZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAobm9kZSwga2V5KSB7XHJcbiAgICAgICAgICAgIHZhciBhbGxEYXRhRm9yTm9kZSA9IGdldEFsbChub2RlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhbGxEYXRhRm9yTm9kZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYWxsRGF0YUZvck5vZGVba2V5XTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5vZGUsIGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBhY3R1YWxseSBjcmVhdGUgYSBuZXcgZG9tRGF0YSBrZXkgaWYgd2UgYXJlIGFjdHVhbGx5IGRlbGV0aW5nIGEgdmFsdWVcclxuICAgICAgICAgICAgICAgIGlmIChnZXRBbGwobm9kZSwgZmFsc2UpID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBhbGxEYXRhRm9yTm9kZSA9IGdldEFsbChub2RlLCB0cnVlKTtcclxuICAgICAgICAgICAgYWxsRGF0YUZvck5vZGVba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXI6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgICAgIHZhciBkYXRhU3RvcmVLZXkgPSBub2RlW2RhdGFTdG9yZUtleUV4cGFuZG9Qcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoZGF0YVN0b3JlS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YVN0b3JlW2RhdGFTdG9yZUtleV07XHJcbiAgICAgICAgICAgICAgICBub2RlW2RhdGFTdG9yZUtleUV4cGFuZG9Qcm9wZXJ0eU5hbWVdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBFeHBvc2luZyBcImRpZCBjbGVhblwiIGZsYWcgcHVyZWx5IHNvIHNwZWNzIGNhbiBpbmZlciB3aGV0aGVyIHRoaW5ncyBoYXZlIGJlZW4gY2xlYW5lZCB1cCBhcyBpbnRlbmRlZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBuZXh0S2V5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAodW5pcXVlSWQrKykgKyBkYXRhU3RvcmVLZXlFeHBhbmRvUHJvcGVydHlOYW1lO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pKCk7XHJcblxyXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLmRvbURhdGEnLCBrby51dGlscy5kb21EYXRhKTtcclxua28uZXhwb3J0U3ltYm9sKCd1dGlscy5kb21EYXRhLmNsZWFyJywga28udXRpbHMuZG9tRGF0YS5jbGVhcik7IC8vIEV4cG9ydGluZyBvbmx5IHNvIHNwZWNzIGNhbiBjbGVhciB1cCBhZnRlciB0aGVtc2VsdmVzIGZ1bGx5XHJcblxyXG5rby51dGlscy5kb21Ob2RlRGlzcG9zYWwgPSBuZXcgKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBkb21EYXRhS2V5ID0ga28udXRpbHMuZG9tRGF0YS5uZXh0S2V5KCk7XHJcbiAgICB2YXIgY2xlYW5hYmxlTm9kZVR5cGVzID0geyAxOiB0cnVlLCA4OiB0cnVlLCA5OiB0cnVlIH07ICAgICAgIC8vIEVsZW1lbnQsIENvbW1lbnQsIERvY3VtZW50XHJcbiAgICB2YXIgY2xlYW5hYmxlTm9kZVR5cGVzV2l0aERlc2NlbmRhbnRzID0geyAxOiB0cnVlLCA5OiB0cnVlIH07IC8vIEVsZW1lbnQsIERvY3VtZW50XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0RGlzcG9zZUNhbGxiYWNrc0NvbGxlY3Rpb24obm9kZSwgY3JlYXRlSWZOb3RGb3VuZCkge1xyXG4gICAgICAgIHZhciBhbGxEaXNwb3NlQ2FsbGJhY2tzID0ga28udXRpbHMuZG9tRGF0YS5nZXQobm9kZSwgZG9tRGF0YUtleSk7XHJcbiAgICAgICAgaWYgKChhbGxEaXNwb3NlQ2FsbGJhY2tzID09PSB1bmRlZmluZWQpICYmIGNyZWF0ZUlmTm90Rm91bmQpIHtcclxuICAgICAgICAgICAgYWxsRGlzcG9zZUNhbGxiYWNrcyA9IFtdO1xyXG4gICAgICAgICAgICBrby51dGlscy5kb21EYXRhLnNldChub2RlLCBkb21EYXRhS2V5LCBhbGxEaXNwb3NlQ2FsbGJhY2tzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFsbERpc3Bvc2VDYWxsYmFja3M7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBkZXN0cm95Q2FsbGJhY2tzQ29sbGVjdGlvbihub2RlKSB7XHJcbiAgICAgICAga28udXRpbHMuZG9tRGF0YS5zZXQobm9kZSwgZG9tRGF0YUtleSwgdW5kZWZpbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjbGVhblNpbmdsZU5vZGUobm9kZSkge1xyXG4gICAgICAgIC8vIFJ1biBhbGwgdGhlIGRpc3Bvc2UgY2FsbGJhY2tzXHJcbiAgICAgICAgdmFyIGNhbGxiYWNrcyA9IGdldERpc3Bvc2VDYWxsYmFja3NDb2xsZWN0aW9uKG5vZGUsIGZhbHNlKTtcclxuICAgICAgICBpZiAoY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrcyA9IGNhbGxiYWNrcy5zbGljZSgwKTsgLy8gQ2xvbmUsIGFzIHRoZSBhcnJheSBtYXkgYmUgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbiAodHlwaWNhbGx5LCBjYWxsYmFja3Mgd2lsbCByZW1vdmUgdGhlbXNlbHZlcylcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICBjYWxsYmFja3NbaV0obm9kZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBFcmFzZSB0aGUgRE9NIGRhdGFcclxuICAgICAgICBrby51dGlscy5kb21EYXRhLmNsZWFyKG5vZGUpO1xyXG5cclxuICAgICAgICAvLyBQZXJmb3JtIGNsZWFudXAgbmVlZGVkIGJ5IGV4dGVybmFsIGxpYnJhcmllcyAoY3VycmVudGx5IG9ubHkgalF1ZXJ5LCBidXQgY2FuIGJlIGV4dGVuZGVkKVxyXG4gICAgICAgIGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbFtcImNsZWFuRXh0ZXJuYWxEYXRhXCJdKG5vZGUpO1xyXG5cclxuICAgICAgICAvLyBDbGVhciBhbnkgaW1tZWRpYXRlLWNoaWxkIGNvbW1lbnQgbm9kZXMsIGFzIHRoZXNlIHdvdWxkbid0IGhhdmUgYmVlbiBmb3VuZCBieVxyXG4gICAgICAgIC8vIG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIGluIGNsZWFuTm9kZSgpIChjb21tZW50IG5vZGVzIGFyZW4ndCBlbGVtZW50cylcclxuICAgICAgICBpZiAoY2xlYW5hYmxlTm9kZVR5cGVzV2l0aERlc2NlbmRhbnRzW25vZGUubm9kZVR5cGVdKVxyXG4gICAgICAgICAgICBjbGVhbkltbWVkaWF0ZUNvbW1lbnRUeXBlQ2hpbGRyZW4obm9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2xlYW5JbW1lZGlhdGVDb21tZW50VHlwZUNoaWxkcmVuKG5vZGVXaXRoQ2hpbGRyZW4pIHtcclxuICAgICAgICB2YXIgY2hpbGQsIG5leHRDaGlsZCA9IG5vZGVXaXRoQ2hpbGRyZW4uZmlyc3RDaGlsZDtcclxuICAgICAgICB3aGlsZSAoY2hpbGQgPSBuZXh0Q2hpbGQpIHtcclxuICAgICAgICAgICAgbmV4dENoaWxkID0gY2hpbGQubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gOClcclxuICAgICAgICAgICAgICAgIGNsZWFuU2luZ2xlTm9kZShjaGlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgYWRkRGlzcG9zZUNhbGxiYWNrIDogZnVuY3Rpb24obm9kZSwgY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XHJcbiAgICAgICAgICAgIGdldERpc3Bvc2VDYWxsYmFja3NDb2xsZWN0aW9uKG5vZGUsIHRydWUpLnB1c2goY2FsbGJhY2spO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHJlbW92ZURpc3Bvc2VDYWxsYmFjayA6IGZ1bmN0aW9uKG5vZGUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFja3NDb2xsZWN0aW9uID0gZ2V0RGlzcG9zZUNhbGxiYWNrc0NvbGxlY3Rpb24obm9kZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2tzQ29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAga28udXRpbHMuYXJyYXlSZW1vdmVJdGVtKGNhbGxiYWNrc0NvbGxlY3Rpb24sIGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja3NDb2xsZWN0aW9uLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lDYWxsYmFja3NDb2xsZWN0aW9uKG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgY2xlYW5Ob2RlIDogZnVuY3Rpb24obm9kZSkge1xyXG4gICAgICAgICAgICAvLyBGaXJzdCBjbGVhbiB0aGlzIG5vZGUsIHdoZXJlIGFwcGxpY2FibGVcclxuICAgICAgICAgICAgaWYgKGNsZWFuYWJsZU5vZGVUeXBlc1tub2RlLm5vZGVUeXBlXSkge1xyXG4gICAgICAgICAgICAgICAgY2xlYW5TaW5nbGVOb2RlKG5vZGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIC4uLiB0aGVuIGl0cyBkZXNjZW5kYW50cywgd2hlcmUgYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgaWYgKGNsZWFuYWJsZU5vZGVUeXBlc1dpdGhEZXNjZW5kYW50c1tub2RlLm5vZGVUeXBlXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIENsb25lIHRoZSBkZXNjZW5kYW50cyBsaXN0IGluIGNhc2UgaXQgY2hhbmdlcyBkdXJpbmcgaXRlcmF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NlbmRhbnRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAga28udXRpbHMuYXJyYXlQdXNoQWxsKGRlc2NlbmRhbnRzLCBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBkZXNjZW5kYW50cy5sZW5ndGg7IGkgPCBqOyBpKyspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuU2luZ2xlTm9kZShkZXNjZW5kYW50c1tpXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgcmVtb3ZlTm9kZSA6IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICAgICAga28uY2xlYW5Ob2RlKG5vZGUpO1xyXG4gICAgICAgICAgICBpZiAobm9kZS5wYXJlbnROb2RlKVxyXG4gICAgICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIFwiY2xlYW5FeHRlcm5hbERhdGFcIiA6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgICAgIC8vIFNwZWNpYWwgc3VwcG9ydCBmb3IgalF1ZXJ5IGhlcmUgYmVjYXVzZSBpdCdzIHNvIGNvbW1vbmx5IHVzZWQuXHJcbiAgICAgICAgICAgIC8vIE1hbnkgalF1ZXJ5IHBsdWdpbnMgKGluY2x1ZGluZyBqcXVlcnkudG1wbCkgc3RvcmUgZGF0YSB1c2luZyBqUXVlcnkncyBlcXVpdmFsZW50IG9mIGRvbURhdGFcclxuICAgICAgICAgICAgLy8gc28gbm90aWZ5IGl0IHRvIHRlYXIgZG93biBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZSAmIGRlc2NlbmRhbnRzIGhlcmUuXHJcbiAgICAgICAgICAgIGlmIChqUXVlcnlJbnN0YW5jZSAmJiAodHlwZW9mIGpRdWVyeUluc3RhbmNlWydjbGVhbkRhdGEnXSA9PSBcImZ1bmN0aW9uXCIpKVxyXG4gICAgICAgICAgICAgICAgalF1ZXJ5SW5zdGFuY2VbJ2NsZWFuRGF0YSddKFtub2RlXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufSkoKTtcclxua28uY2xlYW5Ob2RlID0ga28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmNsZWFuTm9kZTsgLy8gU2hvcnRoYW5kIG5hbWUgZm9yIGNvbnZlbmllbmNlXHJcbmtvLnJlbW92ZU5vZGUgPSBrby51dGlscy5kb21Ob2RlRGlzcG9zYWwucmVtb3ZlTm9kZTsgLy8gU2hvcnRoYW5kIG5hbWUgZm9yIGNvbnZlbmllbmNlXHJcbmtvLmV4cG9ydFN5bWJvbCgnY2xlYW5Ob2RlJywga28uY2xlYW5Ob2RlKTtcclxua28uZXhwb3J0U3ltYm9sKCdyZW1vdmVOb2RlJywga28ucmVtb3ZlTm9kZSk7XHJcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMuZG9tTm9kZURpc3Bvc2FsJywga28udXRpbHMuZG9tTm9kZURpc3Bvc2FsKTtcclxua28uZXhwb3J0U3ltYm9sKCd1dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrJywga28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayk7XHJcbmtvLmV4cG9ydFN5bWJvbCgndXRpbHMuZG9tTm9kZURpc3Bvc2FsLnJlbW92ZURpc3Bvc2VDYWxsYmFjaycsIGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5yZW1vdmVEaXNwb3NlQ2FsbGJhY2spO1xyXG4oZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIG5vbmUgPSBbMCwgXCJcIiwgXCJcIl0sXHJcbiAgICAgICAgdGFibGUgPSBbMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIl0sXHJcbiAgICAgICAgdGJvZHkgPSBbMiwgXCI8dGFibGU+PHRib2R5PlwiLCBcIjwvdGJvZHk+PC90YWJsZT5cIl0sXHJcbiAgICAgICAgdHIgPSBbMywgXCI8dGFibGU+PHRib2R5Pjx0cj5cIiwgXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIl0sXHJcbiAgICAgICAgc2VsZWN0ID0gWzEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiXSxcclxuICAgICAgICBsb29rdXAgPSB7XHJcbiAgICAgICAgICAgICd0aGVhZCc6IHRhYmxlLFxyXG4gICAgICAgICAgICAndGJvZHknOiB0YWJsZSxcclxuICAgICAgICAgICAgJ3Rmb290JzogdGFibGUsXHJcbiAgICAgICAgICAgICd0cic6IHRib2R5LFxyXG4gICAgICAgICAgICAndGQnOiB0cixcclxuICAgICAgICAgICAgJ3RoJzogdHIsXHJcbiAgICAgICAgICAgICdvcHRpb24nOiBzZWxlY3QsXHJcbiAgICAgICAgICAgICdvcHRncm91cCc6IHNlbGVjdFxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciBvbGQgSUUgaWYgeW91J3JlICpub3QqIHVzaW5nIGVpdGhlciBqUXVlcnkgb3IgaW5uZXJTaGl2LiBEb2Vzbid0IGFmZmVjdCBvdGhlciBjYXNlcy5cclxuICAgICAgICBtYXlSZXF1aXJlQ3JlYXRlRWxlbWVudEhhY2sgPSBrby51dGlscy5pZVZlcnNpb24gPD0gODtcclxuXHJcbiAgICBmdW5jdGlvbiBnZXRXcmFwKHRhZ3MpIHtcclxuICAgICAgICB2YXIgbSA9IHRhZ3MubWF0Y2goL148KFthLXpdKylbID5dLyk7XHJcbiAgICAgICAgcmV0dXJuIChtICYmIGxvb2t1cFttWzFdXSkgfHwgbm9uZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzaW1wbGVIdG1sUGFyc2UoaHRtbCwgZG9jdW1lbnRDb250ZXh0KSB7XHJcbiAgICAgICAgZG9jdW1lbnRDb250ZXh0IHx8IChkb2N1bWVudENvbnRleHQgPSBkb2N1bWVudCk7XHJcbiAgICAgICAgdmFyIHdpbmRvd0NvbnRleHQgPSBkb2N1bWVudENvbnRleHRbJ3BhcmVudFdpbmRvdyddIHx8IGRvY3VtZW50Q29udGV4dFsnZGVmYXVsdFZpZXcnXSB8fCB3aW5kb3c7XHJcblxyXG4gICAgICAgIC8vIEJhc2VkIG9uIGpRdWVyeSdzIFwiY2xlYW5cIiBmdW5jdGlvbiwgYnV0IG9ubHkgYWNjb3VudGluZyBmb3IgdGFibGUtcmVsYXRlZCBlbGVtZW50cy5cclxuICAgICAgICAvLyBJZiB5b3UgaGF2ZSByZWZlcmVuY2VkIGpRdWVyeSwgdGhpcyB3b24ndCBiZSB1c2VkIGFueXdheSAtIEtPIHdpbGwgdXNlIGpRdWVyeSdzIFwiY2xlYW5cIiBmdW5jdGlvbiBkaXJlY3RseVxyXG5cclxuICAgICAgICAvLyBOb3RlIHRoYXQgdGhlcmUncyBzdGlsbCBhbiBpc3N1ZSBpbiBJRSA8IDkgd2hlcmVieSBpdCB3aWxsIGRpc2NhcmQgY29tbWVudCBub2RlcyB0aGF0IGFyZSB0aGUgZmlyc3QgY2hpbGQgb2ZcclxuICAgICAgICAvLyBhIGRlc2NlbmRhbnQgbm9kZS4gRm9yIGV4YW1wbGU6IFwiPGRpdj48IS0tIG15Y29tbWVudCAtLT5hYmM8L2Rpdj5cIiB3aWxsIGdldCBwYXJzZWQgYXMgXCI8ZGl2PmFiYzwvZGl2PlwiXHJcbiAgICAgICAgLy8gVGhpcyB3b24ndCBhZmZlY3QgYW55b25lIHdobyBoYXMgcmVmZXJlbmNlZCBqUXVlcnksIGFuZCB0aGVyZSdzIGFsd2F5cyB0aGUgd29ya2Fyb3VuZCBvZiBpbnNlcnRpbmcgYSBkdW1teSBub2RlXHJcbiAgICAgICAgLy8gKHBvc3NpYmx5IGEgdGV4dCBub2RlKSBpbiBmcm9udCBvZiB0aGUgY29tbWVudC4gU28sIEtPIGRvZXMgbm90IGF0dGVtcHQgdG8gd29ya2Fyb3VuZCB0aGlzIElFIGlzc3VlIGF1dG9tYXRpY2FsbHkgYXQgcHJlc2VudC5cclxuXHJcbiAgICAgICAgLy8gVHJpbSB3aGl0ZXNwYWNlLCBvdGhlcndpc2UgaW5kZXhPZiB3b24ndCB3b3JrIGFzIGV4cGVjdGVkXHJcbiAgICAgICAgdmFyIHRhZ3MgPSBrby51dGlscy5zdHJpbmdUcmltKGh0bWwpLnRvTG93ZXJDYXNlKCksIGRpdiA9IGRvY3VtZW50Q29udGV4dC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxyXG4gICAgICAgICAgICB3cmFwID0gZ2V0V3JhcCh0YWdzKSxcclxuICAgICAgICAgICAgZGVwdGggPSB3cmFwWzBdO1xyXG5cclxuICAgICAgICAvLyBHbyB0byBodG1sIGFuZCBiYWNrLCB0aGVuIHBlZWwgb2ZmIGV4dHJhIHdyYXBwZXJzXHJcbiAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGFsd2F5cyBwcmVmaXggd2l0aCBzb21lIGR1bW15IHRleHQsIGJlY2F1c2Ugb3RoZXJ3aXNlLCBJRTw5IHdpbGwgc3RyaXAgb3V0IGxlYWRpbmcgY29tbWVudCBub2RlcyBpbiBkZXNjZW5kYW50cy4gVG90YWwgbWFkbmVzcy5cclxuICAgICAgICB2YXIgbWFya3VwID0gXCJpZ25vcmVkPGRpdj5cIiArIHdyYXBbMV0gKyBodG1sICsgd3JhcFsyXSArIFwiPC9kaXY+XCI7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3dDb250ZXh0Wydpbm5lclNoaXYnXSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGlubmVyU2hpdiBpcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBodG1sNXNoaXYuIFdlIHNob3VsZCBjb25zaWRlciBhZGRpbmdcclxuICAgICAgICAgICAgLy8gc3VwcG9ydCBmb3IgaHRtbDVzaGl2IChleGNlcHQgaWYgbm8gZXhwbGljaXQgc3VwcG9ydCBpcyBuZWVkZWQsIGUuZy4sIGlmIGh0bWw1c2hpdlxyXG4gICAgICAgICAgICAvLyBzb21laG93IHNoaW1zIHRoZSBuYXRpdmUgQVBJcyBzbyBpdCBqdXN0IHdvcmtzIGFueXdheSlcclxuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKHdpbmRvd0NvbnRleHRbJ2lubmVyU2hpdiddKG1hcmt1cCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChtYXlSZXF1aXJlQ3JlYXRlRWxlbWVudEhhY2spIHtcclxuICAgICAgICAgICAgICAgIC8vIFRoZSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdteS1lbGVtZW50JykgdHJpY2sgdG8gZW5hYmxlIGN1c3RvbSBlbGVtZW50cyBpbiBJRTYtOFxyXG4gICAgICAgICAgICAgICAgLy8gb25seSB3b3JrcyBpZiB3ZSBhc3NpZ24gaW5uZXJIVE1MIG9uIGFuIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoYXQgZG9jdW1lbnQuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudENvbnRleHQuYXBwZW5kQ2hpbGQoZGl2KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IG1hcmt1cDtcclxuXHJcbiAgICAgICAgICAgIGlmIChtYXlSZXF1aXJlQ3JlYXRlRWxlbWVudEhhY2spIHtcclxuICAgICAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRpdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1vdmUgdG8gdGhlIHJpZ2h0IGRlcHRoXHJcbiAgICAgICAgd2hpbGUgKGRlcHRoLS0pXHJcbiAgICAgICAgICAgIGRpdiA9IGRpdi5sYXN0Q2hpbGQ7XHJcblxyXG4gICAgICAgIHJldHVybiBrby51dGlscy5tYWtlQXJyYXkoZGl2Lmxhc3RDaGlsZC5jaGlsZE5vZGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBqUXVlcnlIdG1sUGFyc2UoaHRtbCwgZG9jdW1lbnRDb250ZXh0KSB7XHJcbiAgICAgICAgLy8galF1ZXJ5J3MgXCJwYXJzZUhUTUxcIiBmdW5jdGlvbiB3YXMgaW50cm9kdWNlZCBpbiBqUXVlcnkgMS44LjAgYW5kIGlzIGEgZG9jdW1lbnRlZCBwdWJsaWMgQVBJLlxyXG4gICAgICAgIGlmIChqUXVlcnlJbnN0YW5jZVsncGFyc2VIVE1MJ10pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGpRdWVyeUluc3RhbmNlWydwYXJzZUhUTUwnXShodG1sLCBkb2N1bWVudENvbnRleHQpIHx8IFtdOyAvLyBFbnN1cmUgd2UgYWx3YXlzIHJldHVybiBhbiBhcnJheSBhbmQgbmV2ZXIgbnVsbFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEZvciBqUXVlcnkgPCAxLjguMCwgd2UgZmFsbCBiYWNrIG9uIHRoZSB1bmRvY3VtZW50ZWQgaW50ZXJuYWwgXCJjbGVhblwiIGZ1bmN0aW9uLlxyXG4gICAgICAgICAgICB2YXIgZWxlbXMgPSBqUXVlcnlJbnN0YW5jZVsnY2xlYW4nXShbaHRtbF0sIGRvY3VtZW50Q29udGV4dCk7XHJcblxyXG4gICAgICAgICAgICAvLyBBcyBvZiBqUXVlcnkgMS43LjEsIGpRdWVyeSBwYXJzZXMgdGhlIEhUTUwgYnkgYXBwZW5kaW5nIGl0IHRvIHNvbWUgZHVtbXkgcGFyZW50IG5vZGVzIGhlbGQgaW4gYW4gaW4tbWVtb3J5IGRvY3VtZW50IGZyYWdtZW50LlxyXG4gICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5LCBpdCBuZXZlciBjbGVhcnMgdGhlIGR1bW15IHBhcmVudCBub2RlcyBmcm9tIHRoZSBkb2N1bWVudCBmcmFnbWVudCwgc28gaXQgbGVha3MgbWVtb3J5IG92ZXIgdGltZS5cclxuICAgICAgICAgICAgLy8gRml4IHRoaXMgYnkgZmluZGluZyB0aGUgdG9wLW1vc3QgZHVtbXkgcGFyZW50IGVsZW1lbnQsIGFuZCBkZXRhY2hpbmcgaXQgZnJvbSBpdHMgb3duZXIgZnJhZ21lbnQuXHJcbiAgICAgICAgICAgIGlmIChlbGVtcyAmJiBlbGVtc1swXSkge1xyXG4gICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgdG9wLW1vc3QgcGFyZW50IGVsZW1lbnQgdGhhdCdzIGEgZGlyZWN0IGNoaWxkIG9mIGEgZG9jdW1lbnQgZnJhZ21lbnRcclxuICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZWxlbXNbMF07XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoZWxlbS5wYXJlbnROb2RlICYmIGVsZW0ucGFyZW50Tm9kZS5ub2RlVHlwZSAhPT0gMTEgLyogaS5lLiwgRG9jdW1lbnRGcmFnbWVudCAqLylcclxuICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgLy8gLi4uIHRoZW4gZGV0YWNoIGl0XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbS5wYXJlbnROb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1zO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBrby51dGlscy5wYXJzZUh0bWxGcmFnbWVudCA9IGZ1bmN0aW9uKGh0bWwsIGRvY3VtZW50Q29udGV4dCkge1xyXG4gICAgICAgIHJldHVybiBqUXVlcnlJbnN0YW5jZSA/XHJcbiAgICAgICAgICAgIGpRdWVyeUh0bWxQYXJzZShodG1sLCBkb2N1bWVudENvbnRleHQpIDogICAvLyBBcyBiZWxvdywgYmVuZWZpdCBmcm9tIGpRdWVyeSdzIG9wdGltaXNhdGlvbnMgd2hlcmUgcG9zc2libGVcclxuICAgICAgICAgICAgc2ltcGxlSHRtbFBhcnNlKGh0bWwsIGRvY3VtZW50Q29udGV4dCk7ICAvLyAuLi4gb3RoZXJ3aXNlLCB0aGlzIHNpbXBsZSBsb2dpYyB3aWxsIGRvIGluIG1vc3QgY29tbW9uIGNhc2VzLlxyXG4gICAgfTtcclxuXHJcbiAgICBrby51dGlscy5zZXRIdG1sID0gZnVuY3Rpb24obm9kZSwgaHRtbCkge1xyXG4gICAgICAgIGtvLnV0aWxzLmVtcHR5RG9tTm9kZShub2RlKTtcclxuXHJcbiAgICAgICAgLy8gVGhlcmUncyBubyBsZWdpdGltYXRlIHJlYXNvbiB0byBkaXNwbGF5IGEgc3RyaW5naWZpZWQgb2JzZXJ2YWJsZSB3aXRob3V0IHVud3JhcHBpbmcgaXQsIHNvIHdlJ2xsIHVud3JhcCBpdFxyXG4gICAgICAgIGh0bWwgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKGh0bWwpO1xyXG5cclxuICAgICAgICBpZiAoKGh0bWwgIT09IG51bGwpICYmIChodG1sICE9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaHRtbCAhPSAnc3RyaW5nJylcclxuICAgICAgICAgICAgICAgIGh0bWwgPSBodG1sLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBqUXVlcnkgY29udGFpbnMgYSBsb3Qgb2Ygc29waGlzdGljYXRlZCBjb2RlIHRvIHBhcnNlIGFyYml0cmFyeSBIVE1MIGZyYWdtZW50cyxcclxuICAgICAgICAgICAgLy8gZm9yIGV4YW1wbGUgPHRyPiBlbGVtZW50cyB3aGljaCBhcmUgbm90IG5vcm1hbGx5IGFsbG93ZWQgdG8gZXhpc3Qgb24gdGhlaXIgb3duLlxyXG4gICAgICAgICAgICAvLyBJZiB5b3UndmUgcmVmZXJlbmNlZCBqUXVlcnkgd2UnbGwgdXNlIHRoYXQgcmF0aGVyIHRoYW4gZHVwbGljYXRpbmcgaXRzIGNvZGUuXHJcbiAgICAgICAgICAgIGlmIChqUXVlcnlJbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgalF1ZXJ5SW5zdGFuY2Uobm9kZSlbJ2h0bWwnXShodG1sKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIC4uLiBvdGhlcndpc2UsIHVzZSBLTydzIG93biBwYXJzaW5nIGxvZ2ljLlxyXG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlZE5vZGVzID0ga28udXRpbHMucGFyc2VIdG1sRnJhZ21lbnQoaHRtbCwgbm9kZS5vd25lckRvY3VtZW50KTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyc2VkTm9kZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChwYXJzZWROb2Rlc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxua28uZXhwb3J0U3ltYm9sKCd1dGlscy5wYXJzZUh0bWxGcmFnbWVudCcsIGtvLnV0aWxzLnBhcnNlSHRtbEZyYWdtZW50KTtcclxua28uZXhwb3J0U3ltYm9sKCd1dGlscy5zZXRIdG1sJywga28udXRpbHMuc2V0SHRtbCk7XHJcblxyXG5rby5tZW1vaXphdGlvbiA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgbWVtb3MgPSB7fTtcclxuXHJcbiAgICBmdW5jdGlvbiByYW5kb21NYXg4SGV4Q2hhcnMoKSB7XHJcbiAgICAgICAgcmV0dXJuICgoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDAwMDAwKSB8IDApLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBnZW5lcmF0ZVJhbmRvbUlkKCkge1xyXG4gICAgICAgIHJldHVybiByYW5kb21NYXg4SGV4Q2hhcnMoKSArIHJhbmRvbU1heDhIZXhDaGFycygpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gZmluZE1lbW9Ob2Rlcyhyb290Tm9kZSwgYXBwZW5kVG9BcnJheSkge1xyXG4gICAgICAgIGlmICghcm9vdE5vZGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAocm9vdE5vZGUubm9kZVR5cGUgPT0gOCkge1xyXG4gICAgICAgICAgICB2YXIgbWVtb0lkID0ga28ubWVtb2l6YXRpb24ucGFyc2VNZW1vVGV4dChyb290Tm9kZS5ub2RlVmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAobWVtb0lkICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICBhcHBlbmRUb0FycmF5LnB1c2goeyBkb21Ob2RlOiByb290Tm9kZSwgbWVtb0lkOiBtZW1vSWQgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyb290Tm9kZS5ub2RlVHlwZSA9PSAxKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBjaGlsZE5vZGVzID0gcm9vdE5vZGUuY2hpbGROb2RlcywgaiA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgajsgaSsrKVxyXG4gICAgICAgICAgICAgICAgZmluZE1lbW9Ob2RlcyhjaGlsZE5vZGVzW2ldLCBhcHBlbmRUb0FycmF5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBtZW1vaXplOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgY2FuIG9ubHkgcGFzcyBhIGZ1bmN0aW9uIHRvIGtvLm1lbW9pemF0aW9uLm1lbW9pemUoKVwiKTtcclxuICAgICAgICAgICAgdmFyIG1lbW9JZCA9IGdlbmVyYXRlUmFuZG9tSWQoKTtcclxuICAgICAgICAgICAgbWVtb3NbbWVtb0lkXSA9IGNhbGxiYWNrO1xyXG4gICAgICAgICAgICByZXR1cm4gXCI8IS0tW2tvX21lbW86XCIgKyBtZW1vSWQgKyBcIl0tLT5cIjtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB1bm1lbW9pemU6IGZ1bmN0aW9uIChtZW1vSWQsIGNhbGxiYWNrUGFyYW1zKSB7XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IG1lbW9zW21lbW9JZF07XHJcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhbnkgbWVtbyB3aXRoIElEIFwiICsgbWVtb0lkICsgXCIuIFBlcmhhcHMgaXQncyBhbHJlYWR5IGJlZW4gdW5tZW1vaXplZC5cIik7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBjYWxsYmFja1BhcmFtcyB8fCBbXSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmaW5hbGx5IHsgZGVsZXRlIG1lbW9zW21lbW9JZF07IH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB1bm1lbW9pemVEb21Ob2RlQW5kRGVzY2VuZGFudHM6IGZ1bmN0aW9uIChkb21Ob2RlLCBleHRyYUNhbGxiYWNrUGFyYW1zQXJyYXkpIHtcclxuICAgICAgICAgICAgdmFyIG1lbW9zID0gW107XHJcbiAgICAgICAgICAgIGZpbmRNZW1vTm9kZXMoZG9tTm9kZSwgbWVtb3MpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IG1lbW9zLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBtZW1vc1tpXS5kb21Ob2RlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbWJpbmVkUGFyYW1zID0gW25vZGVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV4dHJhQ2FsbGJhY2tQYXJhbXNBcnJheSlcclxuICAgICAgICAgICAgICAgICAgICBrby51dGlscy5hcnJheVB1c2hBbGwoY29tYmluZWRQYXJhbXMsIGV4dHJhQ2FsbGJhY2tQYXJhbXNBcnJheSk7XHJcbiAgICAgICAgICAgICAgICBrby5tZW1vaXphdGlvbi51bm1lbW9pemUobWVtb3NbaV0ubWVtb0lkLCBjb21iaW5lZFBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICBub2RlLm5vZGVWYWx1ZSA9IFwiXCI7IC8vIE5ldXRlciB0aGlzIG5vZGUgc28gd2UgZG9uJ3QgdHJ5IHRvIHVubWVtb2l6ZSBpdCBhZ2FpblxyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSlcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7IC8vIElmIHBvc3NpYmxlLCBlcmFzZSBpdCB0b3RhbGx5IChub3QgYWx3YXlzIHBvc3NpYmxlIC0gc29tZW9uZSBlbHNlIG1pZ2h0IGp1c3QgaG9sZCBhIHJlZmVyZW5jZSB0byBpdCB0aGVuIGNhbGwgdW5tZW1vaXplRG9tTm9kZUFuZERlc2NlbmRhbnRzIGFnYWluKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgcGFyc2VNZW1vVGV4dDogZnVuY3Rpb24gKG1lbW9UZXh0KSB7XHJcbiAgICAgICAgICAgIHZhciBtYXRjaCA9IG1lbW9UZXh0Lm1hdGNoKC9eXFxba29fbWVtb1xcOiguKj8pXFxdJC8pO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufSkoKTtcclxuXHJcbmtvLmV4cG9ydFN5bWJvbCgnbWVtb2l6YXRpb24nLCBrby5tZW1vaXphdGlvbik7XHJcbmtvLmV4cG9ydFN5bWJvbCgnbWVtb2l6YXRpb24ubWVtb2l6ZScsIGtvLm1lbW9pemF0aW9uLm1lbW9pemUpO1xyXG5rby5leHBvcnRTeW1ib2woJ21lbW9pemF0aW9uLnVubWVtb2l6ZScsIGtvLm1lbW9pemF0aW9uLnVubWVtb2l6ZSk7XHJcbmtvLmV4cG9ydFN5bWJvbCgnbWVtb2l6YXRpb24ucGFyc2VNZW1vVGV4dCcsIGtvLm1lbW9pemF0aW9uLnBhcnNlTWVtb1RleHQpO1xyXG5rby5leHBvcnRTeW1ib2woJ21lbW9pemF0aW9uLnVubWVtb2l6ZURvbU5vZGVBbmREZXNjZW5kYW50cycsIGtvLm1lbW9pemF0aW9uLnVubWVtb2l6ZURvbU5vZGVBbmREZXNjZW5kYW50cyk7XHJcbmtvLnRhc2tzID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBzY2hlZHVsZXIsXHJcbiAgICAgICAgdGFza1F1ZXVlID0gW10sXHJcbiAgICAgICAgdGFza1F1ZXVlTGVuZ3RoID0gMCxcclxuICAgICAgICBuZXh0SGFuZGxlID0gMSxcclxuICAgICAgICBuZXh0SW5kZXhUb1Byb2Nlc3MgPSAwO1xyXG5cclxuICAgIGlmICh3aW5kb3dbJ011dGF0aW9uT2JzZXJ2ZXInXSkge1xyXG4gICAgICAgIC8vIENocm9tZSAyNyssIEZpcmVmb3ggMTQrLCBJRSAxMSssIE9wZXJhIDE1KywgU2FmYXJpIDYuMStcclxuICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQgKiBDb3B5cmlnaHQgKGMpIDIwMTQgUGV0a2EgQW50b25vdiAqIExpY2Vuc2U6IE1JVFxyXG4gICAgICAgIHNjaGVkdWxlciA9IChmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKS5vYnNlcnZlKGRpdiwge2F0dHJpYnV0ZXM6IHRydWV9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZGl2LmNsYXNzTGlzdC50b2dnbGUoXCJmb29cIik7IH07XHJcbiAgICAgICAgfSkoc2NoZWR1bGVkUHJvY2Vzcyk7XHJcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50ICYmIFwib25yZWFkeXN0YXRlY2hhbmdlXCIgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSkge1xyXG4gICAgICAgIC8vIElFIDYtMTBcclxuICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ZdXp1SlMvc2V0SW1tZWRpYXRlICogQ29weXJpZ2h0IChjKSAyMDEyIEJhcm5lc2FuZG5vYmxlLmNvbSwgbGxjLCBEb25hdm9uIFdlc3QsIGFuZCBEb21lbmljIERlbmljb2xhICogTGljZW5zZTogTUlUXHJcbiAgICAgICAgc2NoZWR1bGVyID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xyXG4gICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcclxuICAgICAgICAgICAgICAgIHNjcmlwdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcclxuICAgICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBzY2hlZHVsZXIgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChjYWxsYmFjaywgMCk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwcm9jZXNzVGFza3MoKSB7XHJcbiAgICAgICAgaWYgKHRhc2tRdWV1ZUxlbmd0aCkge1xyXG4gICAgICAgICAgICAvLyBFYWNoIG1hcmsgcmVwcmVzZW50cyB0aGUgZW5kIG9mIGEgbG9naWNhbCBncm91cCBvZiB0YXNrcyBhbmQgdGhlIG51bWJlciBvZiB0aGVzZSBncm91cHMgaXNcclxuICAgICAgICAgICAgLy8gbGltaXRlZCB0byBwcmV2ZW50IHVuY2hlY2tlZCByZWN1cnNpb24uXHJcbiAgICAgICAgICAgIHZhciBtYXJrID0gdGFza1F1ZXVlTGVuZ3RoLCBjb3VudE1hcmtzID0gMDtcclxuXHJcbiAgICAgICAgICAgIC8vIG5leHRJbmRleFRvUHJvY2VzcyBrZWVwcyB0cmFjayBvZiB3aGVyZSB3ZSBhcmUgaW4gdGhlIHF1ZXVlOyBwcm9jZXNzVGFza3MgY2FuIGJlIGNhbGxlZCByZWN1cnNpdmVseSB3aXRob3V0IGlzc3VlXHJcbiAgICAgICAgICAgIGZvciAodmFyIHRhc2s7IG5leHRJbmRleFRvUHJvY2VzcyA8IHRhc2tRdWV1ZUxlbmd0aDsgKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGFzayA9IHRhc2tRdWV1ZVtuZXh0SW5kZXhUb1Byb2Nlc3MrK10pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEluZGV4VG9Qcm9jZXNzID4gbWFyaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytjb3VudE1hcmtzID49IDUwMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJbmRleFRvUHJvY2VzcyA9IHRhc2tRdWV1ZUxlbmd0aDsgICAvLyBza2lwIGFsbCB0YXNrcyByZW1haW5pbmcgaW4gdGhlIHF1ZXVlIHNpbmNlIGFueSBvZiB0aGVtIGNvdWxkIGJlIGNhdXNpbmcgdGhlIHJlY3Vyc2lvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga28udXRpbHMuZGVmZXJFcnJvcihFcnJvcihcIidUb28gbXVjaCByZWN1cnNpb24nIGFmdGVyIHByb2Nlc3NpbmcgXCIgKyBjb3VudE1hcmtzICsgXCIgdGFzayBncm91cHMuXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmsgPSB0YXNrUXVldWVMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrby51dGlscy5kZWZlckVycm9yKGV4KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2NoZWR1bGVkUHJvY2VzcygpIHtcclxuICAgICAgICBwcm9jZXNzVGFza3MoKTtcclxuXHJcbiAgICAgICAgLy8gUmVzZXQgdGhlIHF1ZXVlXHJcbiAgICAgICAgbmV4dEluZGV4VG9Qcm9jZXNzID0gdGFza1F1ZXVlTGVuZ3RoID0gdGFza1F1ZXVlLmxlbmd0aCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2NoZWR1bGVUYXNrUHJvY2Vzc2luZygpIHtcclxuICAgICAgICBrby50YXNrc1snc2NoZWR1bGVyJ10oc2NoZWR1bGVkUHJvY2Vzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHRhc2tzID0ge1xyXG4gICAgICAgICdzY2hlZHVsZXInOiBzY2hlZHVsZXIsICAgICAvLyBBbGxvdyBvdmVycmlkaW5nIHRoZSBzY2hlZHVsZXJcclxuXHJcbiAgICAgICAgc2NoZWR1bGU6IGZ1bmN0aW9uIChmdW5jKSB7XHJcbiAgICAgICAgICAgIGlmICghdGFza1F1ZXVlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBzY2hlZHVsZVRhc2tQcm9jZXNzaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRhc2tRdWV1ZVt0YXNrUXVldWVMZW5ndGgrK10gPSBmdW5jO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV4dEhhbmRsZSsrO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGNhbmNlbDogZnVuY3Rpb24gKGhhbmRsZSkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBoYW5kbGUgLSAobmV4dEhhbmRsZSAtIHRhc2tRdWV1ZUxlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSBuZXh0SW5kZXhUb1Byb2Nlc3MgJiYgaW5kZXggPCB0YXNrUXVldWVMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRhc2tRdWV1ZVtpbmRleF0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLy8gRm9yIHRlc3Rpbmcgb25seTogcmVzZXQgdGhlIHF1ZXVlIGFuZCByZXR1cm4gdGhlIHByZXZpb3VzIHF1ZXVlIGxlbmd0aFxyXG4gICAgICAgICdyZXNldEZvclRlc3RpbmcnOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSB0YXNrUXVldWVMZW5ndGggLSBuZXh0SW5kZXhUb1Byb2Nlc3M7XHJcbiAgICAgICAgICAgIG5leHRJbmRleFRvUHJvY2VzcyA9IHRhc2tRdWV1ZUxlbmd0aCA9IHRhc2tRdWV1ZS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICByZXR1cm4gbGVuZ3RoO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHJ1bkVhcmx5OiBwcm9jZXNzVGFza3NcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRhc2tzO1xyXG59KSgpO1xyXG5cclxua28uZXhwb3J0U3ltYm9sKCd0YXNrcycsIGtvLnRhc2tzKTtcclxua28uZXhwb3J0U3ltYm9sKCd0YXNrcy5zY2hlZHVsZScsIGtvLnRhc2tzLnNjaGVkdWxlKTtcclxuLy9rby5leHBvcnRTeW1ib2woJ3Rhc2tzLmNhbmNlbCcsIGtvLnRhc2tzLmNhbmNlbCk7ICBcImNhbmNlbFwiIGlzbid0IG1pbmlmaWVkXHJcbmtvLmV4cG9ydFN5bWJvbCgndGFza3MucnVuRWFybHknLCBrby50YXNrcy5ydW5FYXJseSk7XHJcbmtvLmV4dGVuZGVycyA9IHtcclxuICAgICd0aHJvdHRsZSc6IGZ1bmN0aW9uKHRhcmdldCwgdGltZW91dCkge1xyXG4gICAgICAgIC8vIFRocm90dGxpbmcgbWVhbnMgdHdvIHRoaW5nczpcclxuXHJcbiAgICAgICAgLy8gKDEpIEZvciBkZXBlbmRlbnQgb2JzZXJ2YWJsZXMsIHdlIHRocm90dGxlICpldmFsdWF0aW9ucyogc28gdGhhdCwgbm8gbWF0dGVyIGhvdyBmYXN0IGl0cyBkZXBlbmRlbmNpZXNcclxuICAgICAgICAvLyAgICAgbm90aWZ5IHVwZGF0ZXMsIHRoZSB0YXJnZXQgZG9lc24ndCByZS1ldmFsdWF0ZSAoYW5kIGhlbmNlIGRvZXNuJ3Qgbm90aWZ5KSBmYXN0ZXIgdGhhbiBhIGNlcnRhaW4gcmF0ZVxyXG4gICAgICAgIHRhcmdldFsndGhyb3R0bGVFdmFsdWF0aW9uJ10gPSB0aW1lb3V0O1xyXG5cclxuICAgICAgICAvLyAoMikgRm9yIHdyaXRhYmxlIHRhcmdldHMgKG9ic2VydmFibGVzLCBvciB3cml0YWJsZSBkZXBlbmRlbnQgb2JzZXJ2YWJsZXMpLCB3ZSB0aHJvdHRsZSAqd3JpdGVzKlxyXG4gICAgICAgIC8vICAgICBzbyB0aGUgdGFyZ2V0IGNhbm5vdCBjaGFuZ2UgdmFsdWUgc3luY2hyb25vdXNseSBvciBmYXN0ZXIgdGhhbiBhIGNlcnRhaW4gcmF0ZVxyXG4gICAgICAgIHZhciB3cml0ZVRpbWVvdXRJbnN0YW5jZSA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIGtvLmRlcGVuZGVudE9ic2VydmFibGUoe1xyXG4gICAgICAgICAgICAncmVhZCc6IHRhcmdldCxcclxuICAgICAgICAgICAgJ3dyaXRlJzogZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh3cml0ZVRpbWVvdXRJbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVRpbWVvdXRJbnN0YW5jZSA9IGtvLnV0aWxzLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0KHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgICdyYXRlTGltaXQnOiBmdW5jdGlvbih0YXJnZXQsIG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgdGltZW91dCwgbWV0aG9kLCBsaW1pdEZ1bmN0aW9uO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgdGltZW91dCA9IG9wdGlvbnM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGltZW91dCA9IG9wdGlvbnNbJ3RpbWVvdXQnXTtcclxuICAgICAgICAgICAgbWV0aG9kID0gb3B0aW9uc1snbWV0aG9kJ107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByYXRlTGltaXQgc3VwZXJzZWRlcyBkZWZlcnJlZCB1cGRhdGVzXHJcbiAgICAgICAgdGFyZ2V0Ll9kZWZlclVwZGF0ZXMgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGltaXRGdW5jdGlvbiA9IG1ldGhvZCA9PSAnbm90aWZ5V2hlbkNoYW5nZXNTdG9wJyA/ICBkZWJvdW5jZSA6IHRocm90dGxlO1xyXG4gICAgICAgIHRhcmdldC5saW1pdChmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgICAgICAgICByZXR1cm4gbGltaXRGdW5jdGlvbihjYWxsYmFjaywgdGltZW91dCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgICdkZWZlcnJlZCc6IGZ1bmN0aW9uKHRhcmdldCwgb3B0aW9ucykge1xyXG4gICAgICAgIGlmIChvcHRpb25zICE9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFxcJ2RlZmVycmVkXFwnIGV4dGVuZGVyIG9ubHkgYWNjZXB0cyB0aGUgdmFsdWUgXFwndHJ1ZVxcJywgYmVjYXVzZSBpdCBpcyBub3Qgc3VwcG9ydGVkIHRvIHR1cm4gZGVmZXJyYWwgb2ZmIG9uY2UgZW5hYmxlZC4nKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0YXJnZXQuX2RlZmVyVXBkYXRlcykge1xyXG4gICAgICAgICAgICB0YXJnZXQuX2RlZmVyVXBkYXRlcyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhcmdldC5saW1pdChmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgIHZhciBoYW5kbGU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGtvLnRhc2tzLmNhbmNlbChoYW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZSA9IGtvLnRhc2tzLnNjaGVkdWxlKGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbJ25vdGlmeVN1YnNjcmliZXJzJ10odW5kZWZpbmVkLCAnZGlydHknKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgJ25vdGlmeSc6IGZ1bmN0aW9uKHRhcmdldCwgbm90aWZ5V2hlbikge1xyXG4gICAgICAgIHRhcmdldFtcImVxdWFsaXR5Q29tcGFyZXJcIl0gPSBub3RpZnlXaGVuID09IFwiYWx3YXlzXCIgP1xyXG4gICAgICAgICAgICBudWxsIDogIC8vIG51bGwgZXF1YWxpdHlDb21wYXJlciBtZWFucyB0byBhbHdheXMgbm90aWZ5XHJcbiAgICAgICAgICAgIHZhbHVlc0FyZVByaW1pdGl2ZUFuZEVxdWFsO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIHByaW1pdGl2ZVR5cGVzID0geyAndW5kZWZpbmVkJzoxLCAnYm9vbGVhbic6MSwgJ251bWJlcic6MSwgJ3N0cmluZyc6MSB9O1xyXG5mdW5jdGlvbiB2YWx1ZXNBcmVQcmltaXRpdmVBbmRFcXVhbChhLCBiKSB7XHJcbiAgICB2YXIgb2xkVmFsdWVJc1ByaW1pdGl2ZSA9IChhID09PSBudWxsKSB8fCAodHlwZW9mKGEpIGluIHByaW1pdGl2ZVR5cGVzKTtcclxuICAgIHJldHVybiBvbGRWYWx1ZUlzUHJpbWl0aXZlID8gKGEgPT09IGIpIDogZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRocm90dGxlKGNhbGxiYWNrLCB0aW1lb3V0KSB7XHJcbiAgICB2YXIgdGltZW91dEluc3RhbmNlO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRpbWVvdXRJbnN0YW5jZSkge1xyXG4gICAgICAgICAgICB0aW1lb3V0SW5zdGFuY2UgPSBrby51dGlscy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHRpbWVvdXRJbnN0YW5jZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlYm91bmNlKGNhbGxiYWNrLCB0aW1lb3V0KSB7XHJcbiAgICB2YXIgdGltZW91dEluc3RhbmNlO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dEluc3RhbmNlKTtcclxuICAgICAgICB0aW1lb3V0SW5zdGFuY2UgPSBrby51dGlscy5zZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0KTtcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFwcGx5RXh0ZW5kZXJzKHJlcXVlc3RlZEV4dGVuZGVycykge1xyXG4gICAgdmFyIHRhcmdldCA9IHRoaXM7XHJcbiAgICBpZiAocmVxdWVzdGVkRXh0ZW5kZXJzKSB7XHJcbiAgICAgICAga28udXRpbHMub2JqZWN0Rm9yRWFjaChyZXF1ZXN0ZWRFeHRlbmRlcnMsIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgdmFyIGV4dGVuZGVySGFuZGxlciA9IGtvLmV4dGVuZGVyc1trZXldO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dGVuZGVySGFuZGxlciA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBleHRlbmRlckhhbmRsZXIodGFyZ2V0LCB2YWx1ZSkgfHwgdGFyZ2V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59XHJcblxyXG5rby5leHBvcnRTeW1ib2woJ2V4dGVuZGVycycsIGtvLmV4dGVuZGVycyk7XHJcblxyXG5rby5zdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAodGFyZ2V0LCBjYWxsYmFjaywgZGlzcG9zZUNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICB0aGlzLmRpc3Bvc2VDYWxsYmFjayA9IGRpc3Bvc2VDYWxsYmFjaztcclxuICAgIHRoaXMuaXNEaXNwb3NlZCA9IGZhbHNlO1xyXG4gICAga28uZXhwb3J0UHJvcGVydHkodGhpcywgJ2Rpc3Bvc2UnLCB0aGlzLmRpc3Bvc2UpO1xyXG59O1xyXG5rby5zdWJzY3JpcHRpb24ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5kaXNwb3NlQ2FsbGJhY2soKTtcclxufTtcclxuXHJcbmtvLnN1YnNjcmliYWJsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGtvLnV0aWxzLnNldFByb3RvdHlwZU9mT3JFeHRlbmQodGhpcywga29fc3Vic2NyaWJhYmxlX2ZuKTtcclxuICAgIGtvX3N1YnNjcmliYWJsZV9mbi5pbml0KHRoaXMpO1xyXG59XHJcblxyXG52YXIgZGVmYXVsdEV2ZW50ID0gXCJjaGFuZ2VcIjtcclxuXHJcbi8vIE1vdmVkIG91dCBvZiBcImxpbWl0XCIgdG8gYXZvaWQgdGhlIGV4dHJhIGNsb3N1cmVcclxuZnVuY3Rpb24gbGltaXROb3RpZnlTdWJzY3JpYmVycyh2YWx1ZSwgZXZlbnQpIHtcclxuICAgIGlmICghZXZlbnQgfHwgZXZlbnQgPT09IGRlZmF1bHRFdmVudCkge1xyXG4gICAgICAgIHRoaXMuX2xpbWl0Q2hhbmdlKHZhbHVlKTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdiZWZvcmVDaGFuZ2UnKSB7XHJcbiAgICAgICAgdGhpcy5fbGltaXRCZWZvcmVDaGFuZ2UodmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9vcmlnTm90aWZ5U3Vic2NyaWJlcnModmFsdWUsIGV2ZW50KTtcclxuICAgIH1cclxufVxyXG5cclxudmFyIGtvX3N1YnNjcmliYWJsZV9mbiA9IHtcclxuICAgIGluaXQ6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgaW5zdGFuY2UuX3N1YnNjcmlwdGlvbnMgPSB7fTtcclxuICAgICAgICBpbnN0YW5jZS5fdmVyc2lvbk51bWJlciA9IDE7XHJcbiAgICB9LFxyXG5cclxuICAgIHN1YnNjcmliZTogZnVuY3Rpb24gKGNhbGxiYWNrLCBjYWxsYmFja1RhcmdldCwgZXZlbnQpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGV2ZW50ID0gZXZlbnQgfHwgZGVmYXVsdEV2ZW50O1xyXG4gICAgICAgIHZhciBib3VuZENhbGxiYWNrID0gY2FsbGJhY2tUYXJnZXQgPyBjYWxsYmFjay5iaW5kKGNhbGxiYWNrVGFyZ2V0KSA6IGNhbGxiYWNrO1xyXG5cclxuICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gbmV3IGtvLnN1YnNjcmlwdGlvbihzZWxmLCBib3VuZENhbGxiYWNrLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGtvLnV0aWxzLmFycmF5UmVtb3ZlSXRlbShzZWxmLl9zdWJzY3JpcHRpb25zW2V2ZW50XSwgc3Vic2NyaXB0aW9uKTtcclxuICAgICAgICAgICAgaWYgKHNlbGYuYWZ0ZXJTdWJzY3JpcHRpb25SZW1vdmUpXHJcbiAgICAgICAgICAgICAgICBzZWxmLmFmdGVyU3Vic2NyaXB0aW9uUmVtb3ZlKGV2ZW50KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHNlbGYuYmVmb3JlU3Vic2NyaXB0aW9uQWRkKVxyXG4gICAgICAgICAgICBzZWxmLmJlZm9yZVN1YnNjcmlwdGlvbkFkZChldmVudCk7XHJcblxyXG4gICAgICAgIGlmICghc2VsZi5fc3Vic2NyaXB0aW9uc1tldmVudF0pXHJcbiAgICAgICAgICAgIHNlbGYuX3N1YnNjcmlwdGlvbnNbZXZlbnRdID0gW107XHJcbiAgICAgICAgc2VsZi5fc3Vic2NyaXB0aW9uc1tldmVudF0ucHVzaChzdWJzY3JpcHRpb24pO1xyXG5cclxuICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xyXG4gICAgfSxcclxuXHJcbiAgICBcIm5vdGlmeVN1YnNjcmliZXJzXCI6IGZ1bmN0aW9uICh2YWx1ZVRvTm90aWZ5LCBldmVudCkge1xyXG4gICAgICAgIGV2ZW50ID0gZXZlbnQgfHwgZGVmYXVsdEV2ZW50O1xyXG4gICAgICAgIGlmIChldmVudCA9PT0gZGVmYXVsdEV2ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmVyc2lvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5oYXNTdWJzY3JpcHRpb25zRm9yRXZlbnQoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBrby5kZXBlbmRlbmN5RGV0ZWN0aW9uLmJlZ2luKCk7IC8vIEJlZ2luIHN1cHByZXNzaW5nIGRlcGVuZGVuY3kgZGV0ZWN0aW9uIChieSBzZXR0aW5nIHRoZSB0b3AgZnJhbWUgdG8gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IHRoaXMuX3N1YnNjcmlwdGlvbnNbZXZlbnRdLnNsaWNlKDApLCBpID0gMCwgc3Vic2NyaXB0aW9uOyBzdWJzY3JpcHRpb24gPSBhW2ldOyArK2kpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJbiBjYXNlIGEgc3Vic2NyaXB0aW9uIHdhcyBkaXNwb3NlZCBkdXJpbmcgdGhlIGFycmF5Rm9yRWFjaCBjeWNsZSwgY2hlY2tcclxuICAgICAgICAgICAgICAgICAgICAvLyBmb3IgaXNEaXNwb3NlZCBvbiBlYWNoIHN1YnNjcmlwdGlvbiBiZWZvcmUgaW52b2tpbmcgaXRzIGNhbGxiYWNrXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJzY3JpcHRpb24uaXNEaXNwb3NlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLmNhbGxiYWNrKHZhbHVlVG9Ob3RpZnkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAga28uZGVwZW5kZW5jeURldGVjdGlvbi5lbmQoKTsgLy8gRW5kIHN1cHByZXNzaW5nIGRlcGVuZGVuY3kgZGV0ZWN0aW9uXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFZlcnNpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmVyc2lvbk51bWJlcjtcclxuICAgIH0sXHJcblxyXG4gICAgaGFzQ2hhbmdlZDogZnVuY3Rpb24gKHZlcnNpb25Ub0NoZWNrKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyc2lvbigpICE9PSB2ZXJzaW9uVG9DaGVjaztcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlVmVyc2lvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICsrdGhpcy5fdmVyc2lvbk51bWJlcjtcclxuICAgIH0sXHJcblxyXG4gICAgbGltaXQ6IGZ1bmN0aW9uKGxpbWl0RnVuY3Rpb24pIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXMsIHNlbGZJc09ic2VydmFibGUgPSBrby5pc09ic2VydmFibGUoc2VsZiksXHJcbiAgICAgICAgICAgIGlnbm9yZUJlZm9yZUNoYW5nZSwgcHJldmlvdXNWYWx1ZSwgcGVuZGluZ1ZhbHVlLCBiZWZvcmVDaGFuZ2UgPSAnYmVmb3JlQ2hhbmdlJztcclxuXHJcbiAgICAgICAgaWYgKCFzZWxmLl9vcmlnTm90aWZ5U3Vic2NyaWJlcnMpIHtcclxuICAgICAgICAgICAgc2VsZi5fb3JpZ05vdGlmeVN1YnNjcmliZXJzID0gc2VsZltcIm5vdGlmeVN1YnNjcmliZXJzXCJdO1xyXG4gICAgICAgICAgICBzZWxmW1wibm90aWZ5U3Vic2NyaWJlcnNcIl0gPSBsaW1pdE5vdGlmeVN1YnNjcmliZXJzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZpbmlzaCA9IGxpbWl0RnVuY3Rpb24oZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHNlbGYuX25vdGlmaWNhdGlvbklzUGVuZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy8gSWYgYW4gb2JzZXJ2YWJsZSBwcm92aWRlZCBhIHJlZmVyZW5jZSB0byBpdHNlbGYsIGFjY2VzcyBpdCB0byBnZXQgdGhlIGxhdGVzdCB2YWx1ZS5cclxuICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgY29tcHV0ZWQgb2JzZXJ2YWJsZXMgdG8gZGVsYXkgY2FsY3VsYXRpbmcgdGhlaXIgdmFsdWUgdW50aWwgbmVlZGVkLlxyXG4gICAgICAgICAgICBpZiAoc2VsZklzT2JzZXJ2YWJsZSAmJiBwZW5kaW5nVmFsdWUgPT09IHNlbGYpIHtcclxuICAgICAgICAgICAgICAgIHBlbmRpbmdWYWx1ZSA9IHNlbGYoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZ25vcmVCZWZvcmVDaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHNlbGYuaXNEaWZmZXJlbnQocHJldmlvdXNWYWx1ZSwgcGVuZGluZ1ZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5fb3JpZ05vdGlmeVN1YnNjcmliZXJzKHByZXZpb3VzVmFsdWUgPSBwZW5kaW5nVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNlbGYuX2xpbWl0Q2hhbmdlID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgICAgc2VsZi5fbm90aWZpY2F0aW9uSXNQZW5kaW5nID0gaWdub3JlQmVmb3JlQ2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICAgICAgcGVuZGluZ1ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGZpbmlzaCgpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgc2VsZi5fbGltaXRCZWZvcmVDaGFuZ2UgPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAoIWlnbm9yZUJlZm9yZUNoYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5fb3JpZ05vdGlmeVN1YnNjcmliZXJzKHZhbHVlLCBiZWZvcmVDaGFuZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgaGFzU3Vic2NyaXB0aW9uc0ZvckV2ZW50OiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpcHRpb25zW2V2ZW50XSAmJiB0aGlzLl9zdWJzY3JpcHRpb25zW2V2ZW50XS5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFN1YnNjcmlwdGlvbnNDb3VudDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpcHRpb25zW2V2ZW50XSAmJiB0aGlzLl9zdWJzY3JpcHRpb25zW2V2ZW50XS5sZW5ndGggfHwgMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xyXG4gICAgICAgICAgICBrby51dGlscy5vYmplY3RGb3JFYWNoKHRoaXMuX3N1YnNjcmlwdGlvbnMsIGZ1bmN0aW9uKGV2ZW50TmFtZSwgc3Vic2NyaXB0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50TmFtZSAhPT0gJ2RpcnR5JylcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBzdWJzY3JpcHRpb25zLmxlbmd0aDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0b3RhbDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGlzRGlmZmVyZW50OiBmdW5jdGlvbihvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXNbJ2VxdWFsaXR5Q29tcGFyZXInXSB8fCAhdGhpc1snZXF1YWxpdHlDb21wYXJlciddKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGV4dGVuZDogYXBwbHlFeHRlbmRlcnNcclxufTtcclxuXHJcbmtvLmV4cG9ydFByb3BlcnR5KGtvX3N1YnNjcmliYWJsZV9mbiwgJ3N1YnNjcmliZScsIGtvX3N1YnNjcmliYWJsZV9mbi5zdWJzY3JpYmUpO1xyXG5rby5leHBvcnRQcm9wZXJ0eShrb19zdWJzY3JpYmFibGVfZm4sICdleHRlbmQnLCBrb19zdWJzY3JpYmFibGVfZm4uZXh0ZW5kKTtcclxua28uZXhwb3J0UHJvcGVydHkoa29fc3Vic2NyaWJhYmxlX2ZuLCAnZ2V0U3Vic2NyaXB0aW9uc0NvdW50Jywga29fc3Vic2NyaWJhYmxlX2ZuLmdldFN1YnNjcmlwdGlvbnNDb3VudCk7XHJcblxyXG4vLyBGb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHByb3RvIGFzc2lnbm1lbnQsIHdlIG92ZXJ3cml0ZSB0aGUgcHJvdG90eXBlIG9mIGVhY2hcclxuLy8gb2JzZXJ2YWJsZSBpbnN0YW5jZS4gU2luY2Ugb2JzZXJ2YWJsZXMgYXJlIGZ1bmN0aW9ucywgd2UgbmVlZCBGdW5jdGlvbi5wcm90b3R5cGVcclxuLy8gdG8gc3RpbGwgYmUgaW4gdGhlIHByb3RvdHlwZSBjaGFpbi5cclxuaWYgKGtvLnV0aWxzLmNhblNldFByb3RvdHlwZSkge1xyXG4gICAga28udXRpbHMuc2V0UHJvdG90eXBlT2Yoa29fc3Vic2NyaWJhYmxlX2ZuLCBGdW5jdGlvbi5wcm90b3R5cGUpO1xyXG59XHJcblxyXG5rby5zdWJzY3JpYmFibGVbJ2ZuJ10gPSBrb19zdWJzY3JpYmFibGVfZm47XHJcblxyXG5cclxua28uaXNTdWJzY3JpYmFibGUgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgIHJldHVybiBpbnN0YW5jZSAhPSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5zdWJzY3JpYmUgPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBpbnN0YW5jZVtcIm5vdGlmeVN1YnNjcmliZXJzXCJdID09IFwiZnVuY3Rpb25cIjtcclxufTtcclxuXHJcbmtvLmV4cG9ydFN5bWJvbCgnc3Vic2NyaWJhYmxlJywga28uc3Vic2NyaWJhYmxlKTtcclxua28uZXhwb3J0U3ltYm9sKCdpc1N1YnNjcmliYWJsZScsIGtvLmlzU3Vic2NyaWJhYmxlKTtcclxuXHJcbmtvLmNvbXB1dGVkQ29udGV4dCA9IGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24gPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIG91dGVyRnJhbWVzID0gW10sXHJcbiAgICAgICAgY3VycmVudEZyYW1lLFxyXG4gICAgICAgIGxhc3RJZCA9IDA7XHJcblxyXG4gICAgLy8gUmV0dXJuIGEgdW5pcXVlIElEIHRoYXQgY2FuIGJlIGFzc2lnbmVkIHRvIGFuIG9ic2VydmFibGUgZm9yIGRlcGVuZGVuY3kgdHJhY2tpbmcuXHJcbiAgICAvLyBUaGVvcmV0aWNhbGx5LCB5b3UgY291bGQgZXZlbnR1YWxseSBvdmVyZmxvdyB0aGUgbnVtYmVyIHN0b3JhZ2Ugc2l6ZSwgcmVzdWx0aW5nXHJcbiAgICAvLyBpbiBkdXBsaWNhdGUgSURzLiBCdXQgaW4gSmF2YVNjcmlwdCwgdGhlIGxhcmdlc3QgZXhhY3QgaW50ZWdyYWwgdmFsdWUgaXMgMl41M1xyXG4gICAgLy8gb3IgOSwwMDcsMTk5LDI1NCw3NDAsOTkyLiBJZiB5b3UgY3JlYXRlZCAxLDAwMCwwMDAgSURzIHBlciBzZWNvbmQsIGl0IHdvdWxkXHJcbiAgICAvLyB0YWtlIG92ZXIgMjg1IHllYXJzIHRvIHJlYWNoIHRoYXQgbnVtYmVyLlxyXG4gICAgLy8gUmVmZXJlbmNlIGh0dHA6Ly9ibG9nLnZqZXV4LmNvbS8yMDEwL2phdmFzY3JpcHQvamF2YXNjcmlwdC1tYXhfaW50LW51bWJlci1saW1pdHMuaHRtbFxyXG4gICAgZnVuY3Rpb24gZ2V0SWQoKSB7XHJcbiAgICAgICAgcmV0dXJuICsrbGFzdElkO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGJlZ2luKG9wdGlvbnMpIHtcclxuICAgICAgICBvdXRlckZyYW1lcy5wdXNoKGN1cnJlbnRGcmFtZSk7XHJcbiAgICAgICAgY3VycmVudEZyYW1lID0gb3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBlbmQoKSB7XHJcbiAgICAgICAgY3VycmVudEZyYW1lID0gb3V0ZXJGcmFtZXMucG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBiZWdpbjogYmVnaW4sXHJcblxyXG4gICAgICAgIGVuZDogZW5kLFxyXG5cclxuICAgICAgICByZWdpc3RlckRlcGVuZGVuY3k6IGZ1bmN0aW9uIChzdWJzY3JpYmFibGUpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFrby5pc1N1YnNjcmliYWJsZShzdWJzY3JpYmFibGUpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9ubHkgc3Vic2NyaWJhYmxlIHRoaW5ncyBjYW4gYWN0IGFzIGRlcGVuZGVuY2llc1wiKTtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZS5jYWxsYmFjay5jYWxsKGN1cnJlbnRGcmFtZS5jYWxsYmFja1RhcmdldCwgc3Vic2NyaWJhYmxlLCBzdWJzY3JpYmFibGUuX2lkIHx8IChzdWJzY3JpYmFibGUuX2lkID0gZ2V0SWQoKSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgaWdub3JlOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNhbGxiYWNrVGFyZ2V0LCBjYWxsYmFja0FyZ3MpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGJlZ2luKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkoY2FsbGJhY2tUYXJnZXQsIGNhbGxiYWNrQXJncyB8fCBbXSk7XHJcbiAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICBlbmQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGdldERlcGVuZGVuY2llc0NvdW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50RnJhbWUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudEZyYW1lLmNvbXB1dGVkLmdldERlcGVuZGVuY2llc0NvdW50KCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgaXNJbml0aWFsOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnJhbWUuaXNJbml0aWFsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pKCk7XHJcblxyXG5rby5leHBvcnRTeW1ib2woJ2NvbXB1dGVkQ29udGV4dCcsIGtvLmNvbXB1dGVkQ29udGV4dCk7XHJcbmtvLmV4cG9ydFN5bWJvbCgnY29tcHV0ZWRDb250ZXh0LmdldERlcGVuZGVuY2llc0NvdW50Jywga28uY29tcHV0ZWRDb250ZXh0LmdldERlcGVuZGVuY2llc0NvdW50KTtcclxua28uZXhwb3J0U3ltYm9sKCdjb21wdXRlZENvbnRleHQuaXNJbml0aWFsJywga28uY29tcHV0ZWRDb250ZXh0LmlzSW5pdGlhbCk7XHJcblxyXG5rby5leHBvcnRTeW1ib2woJ2lnbm9yZURlcGVuZGVuY2llcycsIGtvLmlnbm9yZURlcGVuZGVuY2llcyA9IGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24uaWdub3JlKTtcclxudmFyIG9ic2VydmFibGVMYXRlc3RWYWx1ZSA9IGtvLnV0aWxzLmNyZWF0ZVN5bWJvbE9yU3RyaW5nKCdfbGF0ZXN0VmFsdWUnKTtcclxuXHJcbmtvLm9ic2VydmFibGUgPSBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XHJcbiAgICBmdW5jdGlvbiBvYnNlcnZhYmxlKCkge1xyXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBXcml0ZVxyXG5cclxuICAgICAgICAgICAgLy8gSWdub3JlIHdyaXRlcyBpZiB0aGUgdmFsdWUgaGFzbid0IGNoYW5nZWRcclxuICAgICAgICAgICAgaWYgKG9ic2VydmFibGUuaXNEaWZmZXJlbnQob2JzZXJ2YWJsZVtvYnNlcnZhYmxlTGF0ZXN0VmFsdWVdLCBhcmd1bWVudHNbMF0pKSB7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZhYmxlLnZhbHVlV2lsbE11dGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2YWJsZVtvYnNlcnZhYmxlTGF0ZXN0VmFsdWVdID0gYXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2YWJsZS52YWx1ZUhhc011dGF0ZWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpczsgLy8gUGVybWl0cyBjaGFpbmVkIGFzc2lnbm1lbnRzXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBSZWFkXHJcbiAgICAgICAgICAgIGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24ucmVnaXN0ZXJEZXBlbmRlbmN5KG9ic2VydmFibGUpOyAvLyBUaGUgY2FsbGVyIG9ubHkgbmVlZHMgdG8gYmUgbm90aWZpZWQgb2YgY2hhbmdlcyBpZiB0aGV5IGRpZCBhIFwicmVhZFwiIG9wZXJhdGlvblxyXG4gICAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZVtvYnNlcnZhYmxlTGF0ZXN0VmFsdWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvYnNlcnZhYmxlW29ic2VydmFibGVMYXRlc3RWYWx1ZV0gPSBpbml0aWFsVmFsdWU7XHJcblxyXG4gICAgLy8gSW5oZXJpdCBmcm9tICdzdWJzY3JpYmFibGUnXHJcbiAgICBpZiAoIWtvLnV0aWxzLmNhblNldFByb3RvdHlwZSkge1xyXG4gICAgICAgIC8vICdzdWJzY3JpYmFibGUnIHdvbid0IGJlIG9uIHRoZSBwcm90b3R5cGUgY2hhaW4gdW5sZXNzIHdlIHB1dCBpdCB0aGVyZSBkaXJlY3RseVxyXG4gICAgICAgIGtvLnV0aWxzLmV4dGVuZChvYnNlcnZhYmxlLCBrby5zdWJzY3JpYmFibGVbJ2ZuJ10pO1xyXG4gICAgfVxyXG4gICAga28uc3Vic2NyaWJhYmxlWydmbiddLmluaXQob2JzZXJ2YWJsZSk7XHJcblxyXG4gICAgLy8gSW5oZXJpdCBmcm9tICdvYnNlcnZhYmxlJ1xyXG4gICAga28udXRpbHMuc2V0UHJvdG90eXBlT2ZPckV4dGVuZChvYnNlcnZhYmxlLCBvYnNlcnZhYmxlRm4pO1xyXG5cclxuICAgIGlmIChrby5vcHRpb25zWydkZWZlclVwZGF0ZXMnXSkge1xyXG4gICAgICAgIGtvLmV4dGVuZGVyc1snZGVmZXJyZWQnXShvYnNlcnZhYmxlLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JzZXJ2YWJsZTtcclxufVxyXG5cclxuLy8gRGVmaW5lIHByb3RvdHlwZSBmb3Igb2JzZXJ2YWJsZXNcclxudmFyIG9ic2VydmFibGVGbiA9IHtcclxuICAgICdlcXVhbGl0eUNvbXBhcmVyJzogdmFsdWVzQXJlUHJpbWl0aXZlQW5kRXF1YWwsXHJcbiAgICBwZWVrOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXNbb2JzZXJ2YWJsZUxhdGVzdFZhbHVlXTsgfSxcclxuICAgIHZhbHVlSGFzTXV0YXRlZDogZnVuY3Rpb24gKCkgeyB0aGlzWydub3RpZnlTdWJzY3JpYmVycyddKHRoaXNbb2JzZXJ2YWJsZUxhdGVzdFZhbHVlXSk7IH0sXHJcbiAgICB2YWx1ZVdpbGxNdXRhdGU6IGZ1bmN0aW9uICgpIHsgdGhpc1snbm90aWZ5U3Vic2NyaWJlcnMnXSh0aGlzW29ic2VydmFibGVMYXRlc3RWYWx1ZV0sICdiZWZvcmVDaGFuZ2UnKTsgfVxyXG59O1xyXG5cclxuLy8gTm90ZSB0aGF0IGZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgcHJvdG8gYXNzaWdubWVudCwgdGhlXHJcbi8vIGluaGVyaXRhbmNlIGNoYWluIGlzIGNyZWF0ZWQgbWFudWFsbHkgaW4gdGhlIGtvLm9ic2VydmFibGUgY29uc3RydWN0b3JcclxuaWYgKGtvLnV0aWxzLmNhblNldFByb3RvdHlwZSkge1xyXG4gICAga28udXRpbHMuc2V0UHJvdG90eXBlT2Yob2JzZXJ2YWJsZUZuLCBrby5zdWJzY3JpYmFibGVbJ2ZuJ10pO1xyXG59XHJcblxyXG52YXIgcHJvdG9Qcm9wZXJ0eSA9IGtvLm9ic2VydmFibGUucHJvdG9Qcm9wZXJ0eSA9ICdfX2tvX3Byb3RvX18nO1xyXG5vYnNlcnZhYmxlRm5bcHJvdG9Qcm9wZXJ0eV0gPSBrby5vYnNlcnZhYmxlO1xyXG5cclxua28uaGFzUHJvdG90eXBlID0gZnVuY3Rpb24oaW5zdGFuY2UsIHByb3RvdHlwZSkge1xyXG4gICAgaWYgKChpbnN0YW5jZSA9PT0gbnVsbCkgfHwgKGluc3RhbmNlID09PSB1bmRlZmluZWQpIHx8IChpbnN0YW5jZVtwcm90b1Byb3BlcnR5XSA9PT0gdW5kZWZpbmVkKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKGluc3RhbmNlW3Byb3RvUHJvcGVydHldID09PSBwcm90b3R5cGUpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGtvLmhhc1Byb3RvdHlwZShpbnN0YW5jZVtwcm90b1Byb3BlcnR5XSwgcHJvdG90eXBlKTsgLy8gV2FsayB0aGUgcHJvdG90eXBlIGNoYWluXHJcbn07XHJcblxyXG5rby5pc09ic2VydmFibGUgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgIHJldHVybiBrby5oYXNQcm90b3R5cGUoaW5zdGFuY2UsIGtvLm9ic2VydmFibGUpO1xyXG59XHJcbmtvLmlzV3JpdGVhYmxlT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgLy8gT2JzZXJ2YWJsZVxyXG4gICAgaWYgKCh0eXBlb2YgaW5zdGFuY2UgPT0gJ2Z1bmN0aW9uJykgJiYgaW5zdGFuY2VbcHJvdG9Qcm9wZXJ0eV0gPT09IGtvLm9ic2VydmFibGUpXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAvLyBXcml0ZWFibGUgZGVwZW5kZW50IG9ic2VydmFibGVcclxuICAgIGlmICgodHlwZW9mIGluc3RhbmNlID09ICdmdW5jdGlvbicpICYmIChpbnN0YW5jZVtwcm90b1Byb3BlcnR5XSA9PT0ga28uZGVwZW5kZW50T2JzZXJ2YWJsZSkgJiYgKGluc3RhbmNlLmhhc1dyaXRlRnVuY3Rpb24pKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgLy8gQW55dGhpbmcgZWxzZVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5rby5leHBvcnRTeW1ib2woJ29ic2VydmFibGUnLCBrby5vYnNlcnZhYmxlKTtcclxua28uZXhwb3J0U3ltYm9sKCdpc09ic2VydmFibGUnLCBrby5pc09ic2VydmFibGUpO1xyXG5rby5leHBvcnRTeW1ib2woJ2lzV3JpdGVhYmxlT2JzZXJ2YWJsZScsIGtvLmlzV3JpdGVhYmxlT2JzZXJ2YWJsZSk7XHJcbmtvLmV4cG9ydFN5bWJvbCgnaXNXcml0YWJsZU9ic2VydmFibGUnLCBrby5pc1dyaXRlYWJsZU9ic2VydmFibGUpO1xyXG5rby5leHBvcnRTeW1ib2woJ29ic2VydmFibGUuZm4nLCBvYnNlcnZhYmxlRm4pO1xyXG5rby5leHBvcnRQcm9wZXJ0eShvYnNlcnZhYmxlRm4sICdwZWVrJywgb2JzZXJ2YWJsZUZuLnBlZWspO1xyXG5rby5leHBvcnRQcm9wZXJ0eShvYnNlcnZhYmxlRm4sICd2YWx1ZUhhc011dGF0ZWQnLCBvYnNlcnZhYmxlRm4udmFsdWVIYXNNdXRhdGVkKTtcclxua28uZXhwb3J0UHJvcGVydHkob2JzZXJ2YWJsZUZuLCAndmFsdWVXaWxsTXV0YXRlJywgb2JzZXJ2YWJsZUZuLnZhbHVlV2lsbE11dGF0ZSk7XHJcbmtvLm9ic2VydmFibGVBcnJheSA9IGZ1bmN0aW9uIChpbml0aWFsVmFsdWVzKSB7XHJcbiAgICBpbml0aWFsVmFsdWVzID0gaW5pdGlhbFZhbHVlcyB8fCBbXTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGluaXRpYWxWYWx1ZXMgIT0gJ29iamVjdCcgfHwgISgnbGVuZ3RoJyBpbiBpbml0aWFsVmFsdWVzKSlcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgYXJndW1lbnQgcGFzc2VkIHdoZW4gaW5pdGlhbGl6aW5nIGFuIG9ic2VydmFibGUgYXJyYXkgbXVzdCBiZSBhbiBhcnJheSwgb3IgbnVsbCwgb3IgdW5kZWZpbmVkLlwiKTtcclxuXHJcbiAgICB2YXIgcmVzdWx0ID0ga28ub2JzZXJ2YWJsZShpbml0aWFsVmFsdWVzKTtcclxuICAgIGtvLnV0aWxzLnNldFByb3RvdHlwZU9mT3JFeHRlbmQocmVzdWx0LCBrby5vYnNlcnZhYmxlQXJyYXlbJ2ZuJ10pO1xyXG4gICAgcmV0dXJuIHJlc3VsdC5leHRlbmQoeyd0cmFja0FycmF5Q2hhbmdlcyc6dHJ1ZX0pO1xyXG59O1xyXG5cclxua28ub2JzZXJ2YWJsZUFycmF5WydmbiddID0ge1xyXG4gICAgJ3JlbW92ZSc6IGZ1bmN0aW9uICh2YWx1ZU9yUHJlZGljYXRlKSB7XHJcbiAgICAgICAgdmFyIHVuZGVybHlpbmdBcnJheSA9IHRoaXMucGVlaygpO1xyXG4gICAgICAgIHZhciByZW1vdmVkVmFsdWVzID0gW107XHJcbiAgICAgICAgdmFyIHByZWRpY2F0ZSA9IHR5cGVvZiB2YWx1ZU9yUHJlZGljYXRlID09IFwiZnVuY3Rpb25cIiAmJiAha28uaXNPYnNlcnZhYmxlKHZhbHVlT3JQcmVkaWNhdGUpID8gdmFsdWVPclByZWRpY2F0ZSA6IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT09IHZhbHVlT3JQcmVkaWNhdGU7IH07XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmRlcmx5aW5nQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdW5kZXJseWluZ0FycmF5W2ldO1xyXG4gICAgICAgICAgICBpZiAocHJlZGljYXRlKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlbW92ZWRWYWx1ZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZVdpbGxNdXRhdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlbW92ZWRWYWx1ZXMucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB1bmRlcmx5aW5nQXJyYXkuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZW1vdmVkVmFsdWVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGFzTXV0YXRlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVtb3ZlZFZhbHVlcztcclxuICAgIH0sXHJcblxyXG4gICAgJ3JlbW92ZUFsbCc6IGZ1bmN0aW9uIChhcnJheU9mVmFsdWVzKSB7XHJcbiAgICAgICAgLy8gSWYgeW91IHBhc3NlZCB6ZXJvIGFyZ3MsIHdlIHJlbW92ZSBldmVyeXRoaW5nXHJcbiAgICAgICAgaWYgKGFycmF5T2ZWYWx1ZXMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YXIgdW5kZXJseWluZ0FycmF5ID0gdGhpcy5wZWVrKCk7XHJcbiAgICAgICAgICAgIHZhciBhbGxWYWx1ZXMgPSB1bmRlcmx5aW5nQXJyYXkuc2xpY2UoMCk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVXaWxsTXV0YXRlKCk7XHJcbiAgICAgICAgICAgIHVuZGVybHlpbmdBcnJheS5zcGxpY2UoMCwgdW5kZXJseWluZ0FycmF5Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIYXNNdXRhdGVkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBhbGxWYWx1ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHlvdSBwYXNzZWQgYW4gYXJnLCB3ZSBpbnRlcnByZXQgaXQgYXMgYW4gYXJyYXkgb2YgZW50cmllcyB0byByZW1vdmVcclxuICAgICAgICBpZiAoIWFycmF5T2ZWYWx1ZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gdGhpc1sncmVtb3ZlJ10oZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBrby51dGlscy5hcnJheUluZGV4T2YoYXJyYXlPZlZhbHVlcywgdmFsdWUpID49IDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgICdkZXN0cm95JzogZnVuY3Rpb24gKHZhbHVlT3JQcmVkaWNhdGUpIHtcclxuICAgICAgICB2YXIgdW5kZXJseWluZ0FycmF5ID0gdGhpcy5wZWVrKCk7XHJcbiAgICAgICAgdmFyIHByZWRpY2F0ZSA9IHR5cGVvZiB2YWx1ZU9yUHJlZGljYXRlID09IFwiZnVuY3Rpb25cIiAmJiAha28uaXNPYnNlcnZhYmxlKHZhbHVlT3JQcmVkaWNhdGUpID8gdmFsdWVPclByZWRpY2F0ZSA6IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT09IHZhbHVlT3JQcmVkaWNhdGU7IH07XHJcbiAgICAgICAgdGhpcy52YWx1ZVdpbGxNdXRhdGUoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gdW5kZXJseWluZ0FycmF5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHVuZGVybHlpbmdBcnJheVtpXTtcclxuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSkpXHJcbiAgICAgICAgICAgICAgICB1bmRlcmx5aW5nQXJyYXlbaV1bXCJfZGVzdHJveVwiXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVIYXNNdXRhdGVkKCk7XHJcbiAgICB9LFxyXG5cclxuICAgICdkZXN0cm95QWxsJzogZnVuY3Rpb24gKGFycmF5T2ZWYWx1ZXMpIHtcclxuICAgICAgICAvLyBJZiB5b3UgcGFzc2VkIHplcm8gYXJncywgd2UgZGVzdHJveSBldmVyeXRoaW5nXHJcbiAgICAgICAgaWYgKGFycmF5T2ZWYWx1ZXMgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXNbJ2Rlc3Ryb3knXShmdW5jdGlvbigpIHsgcmV0dXJuIHRydWUgfSk7XHJcblxyXG4gICAgICAgIC8vIElmIHlvdSBwYXNzZWQgYW4gYXJnLCB3ZSBpbnRlcnByZXQgaXQgYXMgYW4gYXJyYXkgb2YgZW50cmllcyB0byBkZXN0cm95XHJcbiAgICAgICAgaWYgKCFhcnJheU9mVmFsdWVzKVxyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgcmV0dXJuIHRoaXNbJ2Rlc3Ryb3knXShmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGtvLnV0aWxzLmFycmF5SW5kZXhPZihhcnJheU9mVmFsdWVzLCB2YWx1ZSkgPj0gMDtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgJ2luZGV4T2YnOiBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIHZhciB1bmRlcmx5aW5nQXJyYXkgPSB0aGlzKCk7XHJcbiAgICAgICAgcmV0dXJuIGtvLnV0aWxzLmFycmF5SW5kZXhPZih1bmRlcmx5aW5nQXJyYXksIGl0ZW0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAncmVwbGFjZSc6IGZ1bmN0aW9uKG9sZEl0ZW0sIG5ld0l0ZW0pIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzWydpbmRleE9mJ10ob2xkSXRlbSk7XHJcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVdpbGxNdXRhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5wZWVrKClbaW5kZXhdID0gbmV3SXRlbTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhhc011dGF0ZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG4vLyBOb3RlIHRoYXQgZm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBwcm90byBhc3NpZ25tZW50LCB0aGVcclxuLy8gaW5oZXJpdGFuY2UgY2hhaW4gaXMgY3JlYXRlZCBtYW51YWxseSBpbiB0aGUga28ub2JzZXJ2YWJsZUFycmF5IGNvbnN0cnVjdG9yXHJcbmlmIChrby51dGlscy5jYW5TZXRQcm90b3R5cGUpIHtcclxuICAgIGtvLnV0aWxzLnNldFByb3RvdHlwZU9mKGtvLm9ic2VydmFibGVBcnJheVsnZm4nXSwga28ub2JzZXJ2YWJsZVsnZm4nXSk7XHJcbn1cclxuXHJcbi8vIFBvcHVsYXRlIGtvLm9ic2VydmFibGVBcnJheS5mbiB3aXRoIHJlYWQvd3JpdGUgZnVuY3Rpb25zIGZyb20gbmF0aXZlIGFycmF5c1xyXG4vLyBJbXBvcnRhbnQ6IERvIG5vdCBhZGQgYW55IGFkZGl0aW9uYWwgZnVuY3Rpb25zIGhlcmUgdGhhdCBtYXkgcmVhc29uYWJseSBiZSB1c2VkIHRvICpyZWFkKiBkYXRhIGZyb20gdGhlIGFycmF5XHJcbi8vIGJlY2F1c2Ugd2UnbGwgZXZhbCB0aGVtIHdpdGhvdXQgY2F1c2luZyBzdWJzY3JpcHRpb25zLCBzbyBrby5jb21wdXRlZCBvdXRwdXQgY291bGQgZW5kIHVwIGdldHRpbmcgc3RhbGVcclxua28udXRpbHMuYXJyYXlGb3JFYWNoKFtcInBvcFwiLCBcInB1c2hcIiwgXCJyZXZlcnNlXCIsIFwic2hpZnRcIiwgXCJzb3J0XCIsIFwic3BsaWNlXCIsIFwidW5zaGlmdFwiXSwgZnVuY3Rpb24gKG1ldGhvZE5hbWUpIHtcclxuICAgIGtvLm9ic2VydmFibGVBcnJheVsnZm4nXVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBVc2UgXCJwZWVrXCIgdG8gYXZvaWQgY3JlYXRpbmcgYSBzdWJzY3JpcHRpb24gaW4gYW55IGNvbXB1dGVkIHRoYXQgd2UncmUgZXhlY3V0aW5nIGluIHRoZSBjb250ZXh0IG9mXHJcbiAgICAgICAgLy8gKGZvciBjb25zaXN0ZW5jeSB3aXRoIG11dGF0aW5nIHJlZ3VsYXIgb2JzZXJ2YWJsZXMpXHJcbiAgICAgICAgdmFyIHVuZGVybHlpbmdBcnJheSA9IHRoaXMucGVlaygpO1xyXG4gICAgICAgIHRoaXMudmFsdWVXaWxsTXV0YXRlKCk7XHJcbiAgICAgICAgdGhpcy5jYWNoZURpZmZGb3JLbm93bk9wZXJhdGlvbih1bmRlcmx5aW5nQXJyYXksIG1ldGhvZE5hbWUsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgdmFyIG1ldGhvZENhbGxSZXN1bHQgPSB1bmRlcmx5aW5nQXJyYXlbbWV0aG9kTmFtZV0uYXBwbHkodW5kZXJseWluZ0FycmF5LCBhcmd1bWVudHMpO1xyXG4gICAgICAgIHRoaXMudmFsdWVIYXNNdXRhdGVkKCk7XHJcbiAgICAgICAgLy8gVGhlIG5hdGl2ZSBzb3J0IGFuZCByZXZlcnNlIG1ldGhvZHMgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSBhcnJheSwgYnV0IGl0IG1ha2VzIG1vcmUgc2Vuc2UgdG8gcmV0dXJuIHRoZSBvYnNlcnZhYmxlIGFycmF5IGluc3RlYWQuXHJcbiAgICAgICAgcmV0dXJuIG1ldGhvZENhbGxSZXN1bHQgPT09IHVuZGVybHlpbmdBcnJheSA/IHRoaXMgOiBtZXRob2RDYWxsUmVzdWx0O1xyXG4gICAgfTtcclxufSk7XHJcblxyXG4vLyBQb3B1bGF0ZSBrby5vYnNlcnZhYmxlQXJyYXkuZm4gd2l0aCByZWFkLW9ubHkgZnVuY3Rpb25zIGZyb20gbmF0aXZlIGFycmF5c1xyXG5rby51dGlscy5hcnJheUZvckVhY2goW1wic2xpY2VcIl0sIGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XHJcbiAgICBrby5vYnNlcnZhYmxlQXJyYXlbJ2ZuJ11bbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHVuZGVybHlpbmdBcnJheSA9IHRoaXMoKTtcclxuICAgICAgICByZXR1cm4gdW5kZXJseWluZ0FycmF5W21ldGhvZE5hbWVdLmFwcGx5KHVuZGVybHlpbmdBcnJheSwgYXJndW1lbnRzKTtcclxuICAgIH07XHJcbn0pO1xyXG5cclxua28uZXhwb3J0U3ltYm9sKCdvYnNlcnZhYmxlQXJyYXknLCBrby5vYnNlcnZhYmxlQXJyYXkpO1xyXG52YXIgYXJyYXlDaGFuZ2VFdmVudE5hbWUgPSAnYXJyYXlDaGFuZ2UnO1xyXG5rby5leHRlbmRlcnNbJ3RyYWNrQXJyYXlDaGFuZ2VzJ10gPSBmdW5jdGlvbih0YXJnZXQsIG9wdGlvbnMpIHtcclxuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgb3B0aW9ucy0tZWFjaCBjYWxsIHRvIHRyYWNrQXJyYXlDaGFuZ2VzIG92ZXJ3cml0ZXMgdGhlIHByZXZpb3VzbHkgc2V0IG9wdGlvbnNcclxuICAgIHRhcmdldC5jb21wYXJlQXJyYXlPcHRpb25zID0ge307XHJcbiAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucyA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAga28udXRpbHMuZXh0ZW5kKHRhcmdldC5jb21wYXJlQXJyYXlPcHRpb25zLCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIHRhcmdldC5jb21wYXJlQXJyYXlPcHRpb25zWydzcGFyc2UnXSA9IHRydWU7XHJcblxyXG4gICAgLy8gT25seSBtb2RpZnkgdGhlIHRhcmdldCBvYnNlcnZhYmxlIG9uY2VcclxuICAgIGlmICh0YXJnZXQuY2FjaGVEaWZmRm9yS25vd25PcGVyYXRpb24pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgdHJhY2tpbmdDaGFuZ2VzID0gZmFsc2UsXHJcbiAgICAgICAgY2FjaGVkRGlmZiA9IG51bGwsXHJcbiAgICAgICAgYXJyYXlDaGFuZ2VTdWJzY3JpcHRpb24sXHJcbiAgICAgICAgcGVuZGluZ05vdGlmaWNhdGlvbnMgPSAwLFxyXG4gICAgICAgIHVuZGVybHlpbmdCZWZvcmVTdWJzY3JpcHRpb25BZGRGdW5jdGlvbiA9IHRhcmdldC5iZWZvcmVTdWJzY3JpcHRpb25BZGQsXHJcbiAgICAgICAgdW5kZXJseWluZ0FmdGVyU3Vic2NyaXB0aW9uUmVtb3ZlRnVuY3Rpb24gPSB0YXJnZXQuYWZ0ZXJTdWJzY3JpcHRpb25SZW1vdmU7XHJcblxyXG4gICAgLy8gV2F0Y2ggXCJzdWJzY3JpYmVcIiBjYWxscywgYW5kIGZvciBhcnJheSBjaGFuZ2UgZXZlbnRzLCBlbnN1cmUgY2hhbmdlIHRyYWNraW5nIGlzIGVuYWJsZWRcclxuICAgIHRhcmdldC5iZWZvcmVTdWJzY3JpcHRpb25BZGQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICBpZiAodW5kZXJseWluZ0JlZm9yZVN1YnNjcmlwdGlvbkFkZEZ1bmN0aW9uKVxyXG4gICAgICAgICAgICB1bmRlcmx5aW5nQmVmb3JlU3Vic2NyaXB0aW9uQWRkRnVuY3Rpb24uY2FsbCh0YXJnZXQsIGV2ZW50KTtcclxuICAgICAgICBpZiAoZXZlbnQgPT09IGFycmF5Q2hhbmdlRXZlbnROYW1lKSB7XHJcbiAgICAgICAgICAgIHRyYWNrQ2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBXYXRjaCBcImRpc3Bvc2VcIiBjYWxscywgYW5kIGZvciBhcnJheSBjaGFuZ2UgZXZlbnRzLCBlbnN1cmUgY2hhbmdlIHRyYWNraW5nIGlzIGRpc2FibGVkIHdoZW4gYWxsIGFyZSBkaXNwb3NlZFxyXG4gICAgdGFyZ2V0LmFmdGVyU3Vic2NyaXB0aW9uUmVtb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHVuZGVybHlpbmdBZnRlclN1YnNjcmlwdGlvblJlbW92ZUZ1bmN0aW9uKVxyXG4gICAgICAgICAgICB1bmRlcmx5aW5nQWZ0ZXJTdWJzY3JpcHRpb25SZW1vdmVGdW5jdGlvbi5jYWxsKHRhcmdldCwgZXZlbnQpO1xyXG4gICAgICAgIGlmIChldmVudCA9PT0gYXJyYXlDaGFuZ2VFdmVudE5hbWUgJiYgIXRhcmdldC5oYXNTdWJzY3JpcHRpb25zRm9yRXZlbnQoYXJyYXlDaGFuZ2VFdmVudE5hbWUpKSB7XHJcbiAgICAgICAgICAgIGFycmF5Q2hhbmdlU3Vic2NyaXB0aW9uLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgdHJhY2tpbmdDaGFuZ2VzID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiB0cmFja0NoYW5nZXMoKSB7XHJcbiAgICAgICAgLy8gQ2FsbGluZyAndHJhY2tDaGFuZ2VzJyBtdWx0aXBsZSB0aW1lcyBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIGl0IG9uY2VcclxuICAgICAgICBpZiAodHJhY2tpbmdDaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyYWNraW5nQ2hhbmdlcyA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIEludGVyY2VwdCBcIm5vdGlmeVN1YnNjcmliZXJzXCIgdG8gdHJhY2sgaG93IG1hbnkgdGltZXMgaXQgd2FzIGNhbGxlZC5cclxuICAgICAgICB2YXIgdW5kZXJseWluZ05vdGlmeVN1YnNjcmliZXJzRnVuY3Rpb24gPSB0YXJnZXRbJ25vdGlmeVN1YnNjcmliZXJzJ107XHJcbiAgICAgICAgdGFyZ2V0Wydub3RpZnlTdWJzY3JpYmVycyddID0gZnVuY3Rpb24odmFsdWVUb05vdGlmeSwgZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudCB8fCBldmVudCA9PT0gZGVmYXVsdEV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICArK3BlbmRpbmdOb3RpZmljYXRpb25zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlcmx5aW5nTm90aWZ5U3Vic2NyaWJlcnNGdW5jdGlvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIEVhY2ggdGltZSB0aGUgYXJyYXkgY2hhbmdlcyB2YWx1ZSwgY2FwdHVyZSBhIGNsb25lIHNvIHRoYXQgb24gdGhlIG5leHRcclxuICAgICAgICAvLyBjaGFuZ2UgaXQncyBwb3NzaWJsZSB0byBwcm9kdWNlIGEgZGlmZlxyXG4gICAgICAgIHZhciBwcmV2aW91c0NvbnRlbnRzID0gW10uY29uY2F0KHRhcmdldC5wZWVrKCkgfHwgW10pO1xyXG4gICAgICAgIGNhY2hlZERpZmYgPSBudWxsO1xyXG4gICAgICAgIGFycmF5Q2hhbmdlU3Vic2NyaXB0aW9uID0gdGFyZ2V0LnN1YnNjcmliZShmdW5jdGlvbihjdXJyZW50Q29udGVudHMpIHtcclxuICAgICAgICAgICAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgY29udGVudHMgYW5kIGVuc3VyZSBpdCdzIGFuIGFycmF5XHJcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZW50cyA9IFtdLmNvbmNhdChjdXJyZW50Q29udGVudHMgfHwgW10pO1xyXG5cclxuICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgZGlmZiBhbmQgaXNzdWUgbm90aWZpY2F0aW9ucywgYnV0IG9ubHkgaWYgc29tZW9uZSBpcyBsaXN0ZW5pbmdcclxuICAgICAgICAgICAgaWYgKHRhcmdldC5oYXNTdWJzY3JpcHRpb25zRm9yRXZlbnQoYXJyYXlDaGFuZ2VFdmVudE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hhbmdlcyA9IGdldENoYW5nZXMocHJldmlvdXNDb250ZW50cywgY3VycmVudENvbnRlbnRzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gRWxpbWluYXRlIHJlZmVyZW5jZXMgdG8gdGhlIG9sZCwgcmVtb3ZlZCBpdGVtcywgc28gdGhleSBjYW4gYmUgR0NlZFxyXG4gICAgICAgICAgICBwcmV2aW91c0NvbnRlbnRzID0gY3VycmVudENvbnRlbnRzO1xyXG4gICAgICAgICAgICBjYWNoZWREaWZmID0gbnVsbDtcclxuICAgICAgICAgICAgcGVuZGluZ05vdGlmaWNhdGlvbnMgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoYW5nZXMgJiYgY2hhbmdlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsnbm90aWZ5U3Vic2NyaWJlcnMnXShjaGFuZ2VzLCBhcnJheUNoYW5nZUV2ZW50TmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRDaGFuZ2VzKHByZXZpb3VzQ29udGVudHMsIGN1cnJlbnRDb250ZW50cykge1xyXG4gICAgICAgIC8vIFdlIHRyeSB0byByZS11c2UgY2FjaGVkIGRpZmZzLlxyXG4gICAgICAgIC8vIFRoZSBzY2VuYXJpb3Mgd2hlcmUgcGVuZGluZ05vdGlmaWNhdGlvbnMgPiAxIGFyZSB3aGVuIHVzaW5nIHJhdGUtbGltaXRpbmcgb3IgdGhlIERlZmVycmVkIFVwZGF0ZXNcclxuICAgICAgICAvLyBwbHVnaW4sIHdoaWNoIHdpdGhvdXQgdGhpcyBjaGVjayB3b3VsZCBub3QgYmUgY29tcGF0aWJsZSB3aXRoIGFycmF5Q2hhbmdlIG5vdGlmaWNhdGlvbnMuIE5vcm1hbGx5LFxyXG4gICAgICAgIC8vIG5vdGlmaWNhdGlvbnMgYXJlIGlzc3VlZCBpbW1lZGlhdGVseSBzbyB3ZSB3b3VsZG4ndCBiZSBxdWV1ZWluZyB1cCBtb3JlIHRoYW4gb25lLlxyXG4gICAgICAgIGlmICghY2FjaGVkRGlmZiB8fCBwZW5kaW5nTm90aWZpY2F0aW9ucyA+IDEpIHtcclxuICAgICAgICAgICAgY2FjaGVkRGlmZiA9IGtvLnV0aWxzLmNvbXBhcmVBcnJheXMocHJldmlvdXNDb250ZW50cywgY3VycmVudENvbnRlbnRzLCB0YXJnZXQuY29tcGFyZUFycmF5T3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FjaGVkRGlmZjtcclxuICAgIH1cclxuXHJcbiAgICB0YXJnZXQuY2FjaGVEaWZmRm9yS25vd25PcGVyYXRpb24gPSBmdW5jdGlvbihyYXdBcnJheSwgb3BlcmF0aW9uTmFtZSwgYXJncykge1xyXG4gICAgICAgIC8vIE9ubHkgcnVuIGlmIHdlJ3JlIGN1cnJlbnRseSB0cmFja2luZyBjaGFuZ2VzIGZvciB0aGlzIG9ic2VydmFibGUgYXJyYXlcclxuICAgICAgICAvLyBhbmQgdGhlcmUgYXJlbid0IGFueSBwZW5kaW5nIGRlZmVycmVkIG5vdGlmaWNhdGlvbnMuXHJcbiAgICAgICAgaWYgKCF0cmFja2luZ0NoYW5nZXMgfHwgcGVuZGluZ05vdGlmaWNhdGlvbnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGlmZiA9IFtdLFxyXG4gICAgICAgICAgICBhcnJheUxlbmd0aCA9IHJhd0FycmF5Lmxlbmd0aCxcclxuICAgICAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBwdXNoRGlmZihzdGF0dXMsIHZhbHVlLCBpbmRleCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGlmZltkaWZmLmxlbmd0aF0gPSB7ICdzdGF0dXMnOiBzdGF0dXMsICd2YWx1ZSc6IHZhbHVlLCAnaW5kZXgnOiBpbmRleCB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSAncHVzaCc6XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBhcnJheUxlbmd0aDtcclxuICAgICAgICAgICAgY2FzZSAndW5zaGlmdCc6XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgYXJnc0xlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHB1c2hEaWZmKCdhZGRlZCcsIGFyZ3NbaW5kZXhdLCBvZmZzZXQgKyBpbmRleCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3BvcCc6XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBhcnJheUxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NoaWZ0JzpcclxuICAgICAgICAgICAgICAgIGlmIChhcnJheUxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHB1c2hEaWZmKCdkZWxldGVkJywgcmF3QXJyYXlbb2Zmc2V0XSwgb2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnc3BsaWNlJzpcclxuICAgICAgICAgICAgICAgIC8vIE5lZ2F0aXZlIHN0YXJ0IGluZGV4IG1lYW5zICdmcm9tIGVuZCBvZiBhcnJheScuIEFmdGVyIHRoYXQgd2UgY2xhbXAgdG8gWzAuLi5hcnJheUxlbmd0aF0uXHJcbiAgICAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvc3BsaWNlXHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRJbmRleCA9IE1hdGgubWluKE1hdGgubWF4KDAsIGFyZ3NbMF0gPCAwID8gYXJyYXlMZW5ndGggKyBhcmdzWzBdIDogYXJnc1swXSksIGFycmF5TGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgICAgICBlbmREZWxldGVJbmRleCA9IGFyZ3NMZW5ndGggPT09IDEgPyBhcnJheUxlbmd0aCA6IE1hdGgubWluKHN0YXJ0SW5kZXggKyAoYXJnc1sxXSB8fCAwKSwgYXJyYXlMZW5ndGgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuZEFkZEluZGV4ID0gc3RhcnRJbmRleCArIGFyZ3NMZW5ndGggLSAyLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gTWF0aC5tYXgoZW5kRGVsZXRlSW5kZXgsIGVuZEFkZEluZGV4KSxcclxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbnMgPSBbXSwgZGVsZXRpb25zID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IHN0YXJ0SW5kZXgsIGFyZ3NJbmRleCA9IDI7IGluZGV4IDwgZW5kSW5kZXg7ICsraW5kZXgsICsrYXJnc0luZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgZW5kRGVsZXRlSW5kZXgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0aW9ucy5wdXNoKHB1c2hEaWZmKCdkZWxldGVkJywgcmF3QXJyYXlbaW5kZXhdLCBpbmRleCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGVuZEFkZEluZGV4KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbnMucHVzaChwdXNoRGlmZignYWRkZWQnLCBhcmdzW2FyZ3NJbmRleF0sIGluZGV4KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBrby51dGlscy5maW5kTW92ZXNJbkFycmF5Q29tcGFyaXNvbihkZWxldGlvbnMsIGFkZGl0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhY2hlZERpZmYgPSBkaWZmO1xyXG4gICAgfTtcclxufTtcclxudmFyIGNvbXB1dGVkU3RhdGUgPSBrby51dGlscy5jcmVhdGVTeW1ib2xPclN0cmluZygnX3N0YXRlJyk7XHJcblxyXG5rby5jb21wdXRlZCA9IGtvLmRlcGVuZGVudE9ic2VydmFibGUgPSBmdW5jdGlvbiAoZXZhbHVhdG9yRnVuY3Rpb25Pck9wdGlvbnMsIGV2YWx1YXRvckZ1bmN0aW9uVGFyZ2V0LCBvcHRpb25zKSB7XHJcbiAgICBpZiAodHlwZW9mIGV2YWx1YXRvckZ1bmN0aW9uT3JPcHRpb25zID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgLy8gU2luZ2xlLXBhcmFtZXRlciBzeW50YXggLSBldmVyeXRoaW5nIGlzIG9uIHRoaXMgXCJvcHRpb25zXCIgcGFyYW1cclxuICAgICAgICBvcHRpb25zID0gZXZhbHVhdG9yRnVuY3Rpb25Pck9wdGlvbnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIE11bHRpLXBhcmFtZXRlciBzeW50YXggLSBjb25zdHJ1Y3QgdGhlIG9wdGlvbnMgYWNjb3JkaW5nIHRvIHRoZSBwYXJhbXMgcGFzc2VkXHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICAgICAgaWYgKGV2YWx1YXRvckZ1bmN0aW9uT3JPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnNbXCJyZWFkXCJdID0gZXZhbHVhdG9yRnVuY3Rpb25Pck9wdGlvbnM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zW1wicmVhZFwiXSAhPSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJQYXNzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUga28uY29tcHV0ZWRcIik7XHJcblxyXG4gICAgdmFyIHdyaXRlRnVuY3Rpb24gPSBvcHRpb25zW1wid3JpdGVcIl07XHJcbiAgICB2YXIgc3RhdGUgPSB7XHJcbiAgICAgICAgbGF0ZXN0VmFsdWU6IHVuZGVmaW5lZCxcclxuICAgICAgICBpc1N0YWxlOiB0cnVlLFxyXG4gICAgICAgIGlzQmVpbmdFdmFsdWF0ZWQ6IGZhbHNlLFxyXG4gICAgICAgIHN1cHByZXNzRGlzcG9zYWxVbnRpbERpc3Bvc2VXaGVuUmV0dXJuc0ZhbHNlOiBmYWxzZSxcclxuICAgICAgICBpc0Rpc3Bvc2VkOiBmYWxzZSxcclxuICAgICAgICBwdXJlOiBmYWxzZSxcclxuICAgICAgICBpc1NsZWVwaW5nOiBmYWxzZSxcclxuICAgICAgICByZWFkRnVuY3Rpb246IG9wdGlvbnNbXCJyZWFkXCJdLFxyXG4gICAgICAgIGV2YWx1YXRvckZ1bmN0aW9uVGFyZ2V0OiBldmFsdWF0b3JGdW5jdGlvblRhcmdldCB8fCBvcHRpb25zW1wib3duZXJcIl0sXHJcbiAgICAgICAgZGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkOiBvcHRpb25zW1wiZGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkXCJdIHx8IG9wdGlvbnMuZGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkIHx8IG51bGwsXHJcbiAgICAgICAgZGlzcG9zZVdoZW46IG9wdGlvbnNbXCJkaXNwb3NlV2hlblwiXSB8fCBvcHRpb25zLmRpc3Bvc2VXaGVuLFxyXG4gICAgICAgIGRvbU5vZGVEaXNwb3NhbENhbGxiYWNrOiBudWxsLFxyXG4gICAgICAgIGRlcGVuZGVuY3lUcmFja2luZzoge30sXHJcbiAgICAgICAgZGVwZW5kZW5jaWVzQ291bnQ6IDAsXHJcbiAgICAgICAgZXZhbHVhdGlvblRpbWVvdXRJbnN0YW5jZTogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiBjb21wdXRlZE9ic2VydmFibGUoKSB7XHJcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygd3JpdGVGdW5jdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBXcml0aW5nIGEgdmFsdWVcclxuICAgICAgICAgICAgICAgIHdyaXRlRnVuY3Rpb24uYXBwbHkoc3RhdGUuZXZhbHVhdG9yRnVuY3Rpb25UYXJnZXQsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgd3JpdGUgYSB2YWx1ZSB0byBhIGtvLmNvbXB1dGVkIHVubGVzcyB5b3Ugc3BlY2lmeSBhICd3cml0ZScgb3B0aW9uLiBJZiB5b3Ugd2lzaCB0byByZWFkIHRoZSBjdXJyZW50IHZhbHVlLCBkb24ndCBwYXNzIGFueSBwYXJhbWV0ZXJzLlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpczsgLy8gUGVybWl0cyBjaGFpbmVkIGFzc2lnbm1lbnRzXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gUmVhZGluZyB0aGUgdmFsdWVcclxuICAgICAgICAgICAga28uZGVwZW5kZW5jeURldGVjdGlvbi5yZWdpc3RlckRlcGVuZGVuY3koY29tcHV0ZWRPYnNlcnZhYmxlKTtcclxuICAgICAgICAgICAgaWYgKHN0YXRlLmlzU3RhbGUgfHwgKHN0YXRlLmlzU2xlZXBpbmcgJiYgY29tcHV0ZWRPYnNlcnZhYmxlLmhhdmVEZXBlbmRlbmNpZXNDaGFuZ2VkKCkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb21wdXRlZE9ic2VydmFibGUuZXZhbHVhdGVJbW1lZGlhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGUubGF0ZXN0VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXB1dGVkT2JzZXJ2YWJsZVtjb21wdXRlZFN0YXRlXSA9IHN0YXRlO1xyXG4gICAgY29tcHV0ZWRPYnNlcnZhYmxlLmhhc1dyaXRlRnVuY3Rpb24gPSB0eXBlb2Ygd3JpdGVGdW5jdGlvbiA9PT0gXCJmdW5jdGlvblwiO1xyXG5cclxuICAgIC8vIEluaGVyaXQgZnJvbSAnc3Vic2NyaWJhYmxlJ1xyXG4gICAgaWYgKCFrby51dGlscy5jYW5TZXRQcm90b3R5cGUpIHtcclxuICAgICAgICAvLyAnc3Vic2NyaWJhYmxlJyB3b24ndCBiZSBvbiB0aGUgcHJvdG90eXBlIGNoYWluIHVubGVzcyB3ZSBwdXQgaXQgdGhlcmUgZGlyZWN0bHlcclxuICAgICAgICBrby51dGlscy5leHRlbmQoY29tcHV0ZWRPYnNlcnZhYmxlLCBrby5zdWJzY3JpYmFibGVbJ2ZuJ10pO1xyXG4gICAgfVxyXG4gICAga28uc3Vic2NyaWJhYmxlWydmbiddLmluaXQoY29tcHV0ZWRPYnNlcnZhYmxlKTtcclxuXHJcbiAgICAvLyBJbmhlcml0IGZyb20gJ2NvbXB1dGVkJ1xyXG4gICAga28udXRpbHMuc2V0UHJvdG90eXBlT2ZPckV4dGVuZChjb21wdXRlZE9ic2VydmFibGUsIGNvbXB1dGVkRm4pO1xyXG5cclxuICAgIGlmIChvcHRpb25zWydwdXJlJ10pIHtcclxuICAgICAgICBzdGF0ZS5wdXJlID0gdHJ1ZTtcclxuICAgICAgICBzdGF0ZS5pc1NsZWVwaW5nID0gdHJ1ZTsgICAgIC8vIFN0YXJ0cyBvZmYgc2xlZXBpbmc7IHdpbGwgYXdha2Ugb24gdGhlIGZpcnN0IHN1YnNjcmlwdGlvblxyXG4gICAgICAgIGtvLnV0aWxzLmV4dGVuZChjb21wdXRlZE9ic2VydmFibGUsIHB1cmVDb21wdXRlZE92ZXJyaWRlcyk7XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnNbJ2RlZmVyRXZhbHVhdGlvbiddKSB7XHJcbiAgICAgICAga28udXRpbHMuZXh0ZW5kKGNvbXB1dGVkT2JzZXJ2YWJsZSwgZGVmZXJFdmFsdWF0aW9uT3ZlcnJpZGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoa28ub3B0aW9uc1snZGVmZXJVcGRhdGVzJ10pIHtcclxuICAgICAgICBrby5leHRlbmRlcnNbJ2RlZmVycmVkJ10oY29tcHV0ZWRPYnNlcnZhYmxlLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoREVCVUcpIHtcclxuICAgICAgICAvLyAjMTczMSAtIEFpZCBkZWJ1Z2dpbmcgYnkgZXhwb3NpbmcgdGhlIGNvbXB1dGVkJ3Mgb3B0aW9uc1xyXG4gICAgICAgIGNvbXB1dGVkT2JzZXJ2YWJsZVtcIl9vcHRpb25zXCJdID0gb3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhdGUuZGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkKSB7XHJcbiAgICAgICAgLy8gU2luY2UgdGhpcyBjb21wdXRlZCBpcyBhc3NvY2lhdGVkIHdpdGggYSBET00gbm9kZSwgYW5kIHdlIGRvbid0IHdhbnQgdG8gZGlzcG9zZSB0aGUgY29tcHV0ZWRcclxuICAgICAgICAvLyB1bnRpbCB0aGUgRE9NIG5vZGUgaXMgKnJlbW92ZWQqIGZyb20gdGhlIGRvY3VtZW50IChhcyBvcHBvc2VkIHRvIG5ldmVyIGhhdmluZyBiZWVuIGluIHRoZSBkb2N1bWVudCksXHJcbiAgICAgICAgLy8gd2UnbGwgcHJldmVudCBkaXNwb3NhbCB1bnRpbCBcImRpc3Bvc2VXaGVuXCIgZmlyc3QgcmV0dXJucyBmYWxzZS5cclxuICAgICAgICBzdGF0ZS5zdXBwcmVzc0Rpc3Bvc2FsVW50aWxEaXNwb3NlV2hlblJldHVybnNGYWxzZSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIGRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZDogdHJ1ZSBjYW4gYmUgdXNlZCB0byBvcHQgaW50byB0aGUgXCJvbmx5IGRpc3Bvc2UgYWZ0ZXIgZmlyc3QgZmFsc2UgcmVzdWx0XCJcclxuICAgICAgICAvLyBiZWhhdmlvdXIgZXZlbiBpZiB0aGVyZSdzIG5vIHNwZWNpZmljIG5vZGUgdG8gd2F0Y2guIEluIHRoYXQgY2FzZSwgY2xlYXIgdGhlIG9wdGlvbiBzbyB3ZSBkb24ndCB0cnlcclxuICAgICAgICAvLyB0byB3YXRjaCBmb3IgYSBub24tbm9kZSdzIGRpc3Bvc2FsLiBUaGlzIHRlY2huaXF1ZSBpcyBpbnRlbmRlZCBmb3IgS08ncyBpbnRlcm5hbCB1c2Ugb25seSBhbmQgc2hvdWxkbid0XHJcbiAgICAgICAgLy8gYmUgZG9jdW1lbnRlZCBvciB1c2VkIGJ5IGFwcGxpY2F0aW9uIGNvZGUsIGFzIGl0J3MgbGlrZWx5IHRvIGNoYW5nZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEtPLlxyXG4gICAgICAgIGlmICghc3RhdGUuZGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkLm5vZGVUeXBlKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEV2YWx1YXRlLCB1bmxlc3Mgc2xlZXBpbmcgb3IgZGVmZXJFdmFsdWF0aW9uIGlzIHRydWVcclxuICAgIGlmICghc3RhdGUuaXNTbGVlcGluZyAmJiAhb3B0aW9uc1snZGVmZXJFdmFsdWF0aW9uJ10pIHtcclxuICAgICAgICBjb21wdXRlZE9ic2VydmFibGUuZXZhbHVhdGVJbW1lZGlhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBdHRhY2ggYSBET00gbm9kZSBkaXNwb3NhbCBjYWxsYmFjayBzbyB0aGF0IHRoZSBjb21wdXRlZCB3aWxsIGJlIHByb2FjdGl2ZWx5IGRpc3Bvc2VkIGFzIHNvb24gYXMgdGhlIG5vZGUgaXNcclxuICAgIC8vIHJlbW92ZWQgdXNpbmcga28ucmVtb3ZlTm9kZS4gQnV0IHNraXAgaWYgaXNBY3RpdmUgaXMgZmFsc2UgKHRoZXJlIHdpbGwgbmV2ZXIgYmUgYW55IGRlcGVuZGVuY2llcyB0byBkaXNwb3NlKS5cclxuICAgIGlmIChzdGF0ZS5kaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQgJiYgY29tcHV0ZWRPYnNlcnZhYmxlLmlzQWN0aXZlKCkpIHtcclxuICAgICAgICBrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKHN0YXRlLmRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZCwgc3RhdGUuZG9tTm9kZURpc3Bvc2FsQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbXB1dGVkT2JzZXJ2YWJsZS5kaXNwb3NlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbXB1dGVkT2JzZXJ2YWJsZTtcclxufTtcclxuXHJcbi8vIFV0aWxpdHkgZnVuY3Rpb24gdGhhdCBkaXNwb3NlcyBhIGdpdmVuIGRlcGVuZGVuY3lUcmFja2luZyBlbnRyeVxyXG5mdW5jdGlvbiBjb21wdXRlZERpc3Bvc2VEZXBlbmRlbmN5Q2FsbGJhY2soaWQsIGVudHJ5VG9EaXNwb3NlKSB7XHJcbiAgICBpZiAoZW50cnlUb0Rpc3Bvc2UgIT09IG51bGwgJiYgZW50cnlUb0Rpc3Bvc2UuZGlzcG9zZSkge1xyXG4gICAgICAgIGVudHJ5VG9EaXNwb3NlLmRpc3Bvc2UoKTtcclxuICAgIH1cclxufVxyXG5cclxuLy8gVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBlYWNoIHRpbWUgYSBkZXBlbmRlbmN5IGlzIGRldGVjdGVkIHdoaWxlIGV2YWx1YXRpbmcgYSBjb21wdXRlZC5cclxuLy8gSXQncyBmYWN0b3JlZCBvdXQgYXMgYSBzaGFyZWQgZnVuY3Rpb24gdG8gYXZvaWQgY3JlYXRpbmcgdW5uZWNlc3NhcnkgZnVuY3Rpb24gaW5zdGFuY2VzIGR1cmluZyBldmFsdWF0aW9uLlxyXG5mdW5jdGlvbiBjb21wdXRlZEJlZ2luRGVwZW5kZW5jeURldGVjdGlvbkNhbGxiYWNrKHN1YnNjcmliYWJsZSwgaWQpIHtcclxuICAgIHZhciBjb21wdXRlZE9ic2VydmFibGUgPSB0aGlzLmNvbXB1dGVkT2JzZXJ2YWJsZSxcclxuICAgICAgICBzdGF0ZSA9IGNvbXB1dGVkT2JzZXJ2YWJsZVtjb21wdXRlZFN0YXRlXTtcclxuICAgIGlmICghc3RhdGUuaXNEaXNwb3NlZCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc3Bvc2FsQ291bnQgJiYgdGhpcy5kaXNwb3NhbENhbmRpZGF0ZXNbaWRdKSB7XHJcbiAgICAgICAgICAgIC8vIERvbid0IHdhbnQgdG8gZGlzcG9zZSB0aGlzIHN1YnNjcmlwdGlvbiwgYXMgaXQncyBzdGlsbCBiZWluZyB1c2VkXHJcbiAgICAgICAgICAgIGNvbXB1dGVkT2JzZXJ2YWJsZS5hZGREZXBlbmRlbmN5VHJhY2tpbmcoaWQsIHN1YnNjcmliYWJsZSwgdGhpcy5kaXNwb3NhbENhbmRpZGF0ZXNbaWRdKTtcclxuICAgICAgICAgICAgdGhpcy5kaXNwb3NhbENhbmRpZGF0ZXNbaWRdID0gbnVsbDsgLy8gTm8gbmVlZCB0byBhY3R1YWxseSBkZWxldGUgdGhlIHByb3BlcnR5IC0gZGlzcG9zYWxDYW5kaWRhdGVzIGlzIGEgdHJhbnNpZW50IG9iamVjdCBhbnl3YXlcclxuICAgICAgICAgICAgLS10aGlzLmRpc3Bvc2FsQ291bnQ7XHJcbiAgICAgICAgfSBlbHNlIGlmICghc3RhdGUuZGVwZW5kZW5jeVRyYWNraW5nW2lkXSkge1xyXG4gICAgICAgICAgICAvLyBCcmFuZCBuZXcgc3Vic2NyaXB0aW9uIC0gYWRkIGl0XHJcbiAgICAgICAgICAgIGNvbXB1dGVkT2JzZXJ2YWJsZS5hZGREZXBlbmRlbmN5VHJhY2tpbmcoaWQsIHN1YnNjcmliYWJsZSwgc3RhdGUuaXNTbGVlcGluZyA/IHsgX3RhcmdldDogc3Vic2NyaWJhYmxlIH0gOiBjb21wdXRlZE9ic2VydmFibGUuc3Vic2NyaWJlVG9EZXBlbmRlbmN5KHN1YnNjcmliYWJsZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxudmFyIGNvbXB1dGVkRm4gPSB7XHJcbiAgICBcImVxdWFsaXR5Q29tcGFyZXJcIjogdmFsdWVzQXJlUHJpbWl0aXZlQW5kRXF1YWwsXHJcbiAgICBnZXREZXBlbmRlbmNpZXNDb3VudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzW2NvbXB1dGVkU3RhdGVdLmRlcGVuZGVuY2llc0NvdW50O1xyXG4gICAgfSxcclxuICAgIGFkZERlcGVuZGVuY3lUcmFja2luZzogZnVuY3Rpb24gKGlkLCB0YXJnZXQsIHRyYWNraW5nT2JqKSB7XHJcbiAgICAgICAgaWYgKHRoaXNbY29tcHV0ZWRTdGF0ZV0ucHVyZSAmJiB0YXJnZXQgPT09IHRoaXMpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJBICdwdXJlJyBjb21wdXRlZCBtdXN0IG5vdCBiZSBjYWxsZWQgcmVjdXJzaXZlbHlcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzW2NvbXB1dGVkU3RhdGVdLmRlcGVuZGVuY3lUcmFja2luZ1tpZF0gPSB0cmFja2luZ09iajtcclxuICAgICAgICB0cmFja2luZ09iai5fb3JkZXIgPSB0aGlzW2NvbXB1dGVkU3RhdGVdLmRlcGVuZGVuY2llc0NvdW50Kys7XHJcbiAgICAgICAgdHJhY2tpbmdPYmouX3ZlcnNpb24gPSB0YXJnZXQuZ2V0VmVyc2lvbigpO1xyXG4gICAgfSxcclxuICAgIGhhdmVEZXBlbmRlbmNpZXNDaGFuZ2VkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGlkLCBkZXBlbmRlbmN5LCBkZXBlbmRlbmN5VHJhY2tpbmcgPSB0aGlzW2NvbXB1dGVkU3RhdGVdLmRlcGVuZGVuY3lUcmFja2luZztcclxuICAgICAgICBmb3IgKGlkIGluIGRlcGVuZGVuY3lUcmFja2luZykge1xyXG4gICAgICAgICAgICBpZiAoZGVwZW5kZW5jeVRyYWNraW5nLmhhc093blByb3BlcnR5KGlkKSkge1xyXG4gICAgICAgICAgICAgICAgZGVwZW5kZW5jeSA9IGRlcGVuZGVuY3lUcmFja2luZ1tpZF07XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jeS5fdGFyZ2V0Lmhhc0NoYW5nZWQoZGVwZW5kZW5jeS5fdmVyc2lvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBtYXJrRGlydHk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBQcm9jZXNzIFwiZGlydHlcIiBldmVudHMgaWYgd2UgY2FuIGhhbmRsZSBkZWxheWVkIG5vdGlmaWNhdGlvbnNcclxuICAgICAgICBpZiAodGhpcy5fZXZhbERlbGF5ZWQgJiYgIXRoaXNbY29tcHV0ZWRTdGF0ZV0uaXNCZWluZ0V2YWx1YXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9ldmFsRGVsYXllZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBpc0FjdGl2ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzW2NvbXB1dGVkU3RhdGVdLmlzU3RhbGUgfHwgdGhpc1tjb21wdXRlZFN0YXRlXS5kZXBlbmRlbmNpZXNDb3VudCA+IDA7XHJcbiAgICB9LFxyXG4gICAgcmVzcG9uZFRvQ2hhbmdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gSWdub3JlIFwiY2hhbmdlXCIgZXZlbnRzIGlmIHdlJ3ZlIGFscmVhZHkgc2NoZWR1bGVkIGEgZGVsYXllZCBub3RpZmljYXRpb25cclxuICAgICAgICBpZiAoIXRoaXMuX25vdGlmaWNhdGlvbklzUGVuZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmV2YWx1YXRlUG9zc2libHlBc3luYygpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBzdWJzY3JpYmVUb0RlcGVuZGVuY3k6IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICBpZiAodGFyZ2V0Ll9kZWZlclVwZGF0ZXMgJiYgIXRoaXNbY29tcHV0ZWRTdGF0ZV0uZGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkKSB7XHJcbiAgICAgICAgICAgIHZhciBkaXJ0eVN1YiA9IHRhcmdldC5zdWJzY3JpYmUodGhpcy5tYXJrRGlydHksIHRoaXMsICdkaXJ0eScpLFxyXG4gICAgICAgICAgICAgICAgY2hhbmdlU3ViID0gdGFyZ2V0LnN1YnNjcmliZSh0aGlzLnJlc3BvbmRUb0NoYW5nZSwgdGhpcyk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBfdGFyZ2V0OiB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlydHlTdWIuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZVN1Yi5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5zdWJzY3JpYmUodGhpcy5ldmFsdWF0ZVBvc3NpYmx5QXN5bmMsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBldmFsdWF0ZVBvc3NpYmx5QXN5bmM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgY29tcHV0ZWRPYnNlcnZhYmxlID0gdGhpcyxcclxuICAgICAgICAgICAgdGhyb3R0bGVFdmFsdWF0aW9uVGltZW91dCA9IGNvbXB1dGVkT2JzZXJ2YWJsZVsndGhyb3R0bGVFdmFsdWF0aW9uJ107XHJcbiAgICAgICAgaWYgKHRocm90dGxlRXZhbHVhdGlvblRpbWVvdXQgJiYgdGhyb3R0bGVFdmFsdWF0aW9uVGltZW91dCA+PSAwKSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzW2NvbXB1dGVkU3RhdGVdLmV2YWx1YXRpb25UaW1lb3V0SW5zdGFuY2UpO1xyXG4gICAgICAgICAgICB0aGlzW2NvbXB1dGVkU3RhdGVdLmV2YWx1YXRpb25UaW1lb3V0SW5zdGFuY2UgPSBrby51dGlscy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGNvbXB1dGVkT2JzZXJ2YWJsZS5ldmFsdWF0ZUltbWVkaWF0ZSh0cnVlIC8qbm90aWZ5Q2hhbmdlKi8pO1xyXG4gICAgICAgICAgICB9LCB0aHJvdHRsZUV2YWx1YXRpb25UaW1lb3V0KTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbXB1dGVkT2JzZXJ2YWJsZS5fZXZhbERlbGF5ZWQpIHtcclxuICAgICAgICAgICAgY29tcHV0ZWRPYnNlcnZhYmxlLl9ldmFsRGVsYXllZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbXB1dGVkT2JzZXJ2YWJsZS5ldmFsdWF0ZUltbWVkaWF0ZSh0cnVlIC8qbm90aWZ5Q2hhbmdlKi8pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBldmFsdWF0ZUltbWVkaWF0ZTogZnVuY3Rpb24gKG5vdGlmeUNoYW5nZSkge1xyXG4gICAgICAgIHZhciBjb21wdXRlZE9ic2VydmFibGUgPSB0aGlzLFxyXG4gICAgICAgICAgICBzdGF0ZSA9IGNvbXB1dGVkT2JzZXJ2YWJsZVtjb21wdXRlZFN0YXRlXSxcclxuICAgICAgICAgICAgZGlzcG9zZVdoZW4gPSBzdGF0ZS5kaXNwb3NlV2hlbjtcclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLmlzQmVpbmdFdmFsdWF0ZWQpIHtcclxuICAgICAgICAgICAgLy8gSWYgdGhlIGV2YWx1YXRpb24gb2YgYSBrby5jb21wdXRlZCBjYXVzZXMgc2lkZSBlZmZlY3RzLCBpdCdzIHBvc3NpYmxlIHRoYXQgaXQgd2lsbCB0cmlnZ2VyIGl0cyBvd24gcmUtZXZhbHVhdGlvbi5cclxuICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgZGVzaXJhYmxlIChpdCdzIGhhcmQgZm9yIGEgZGV2ZWxvcGVyIHRvIHJlYWxpc2UgYSBjaGFpbiBvZiBkZXBlbmRlbmNpZXMgbWlnaHQgY2F1c2UgdGhpcywgYW5kIHRoZXkgYWxtb3N0XHJcbiAgICAgICAgICAgIC8vIGNlcnRhaW5seSBkaWRuJ3QgaW50ZW5kIGluZmluaXRlIHJlLWV2YWx1YXRpb25zKS4gU28sIGZvciBwcmVkaWN0YWJpbGl0eSwgd2Ugc2ltcGx5IHByZXZlbnQga28uY29tcHV0ZWRzIGZyb20gY2F1c2luZ1xyXG4gICAgICAgICAgICAvLyB0aGVpciBvd24gcmUtZXZhbHVhdGlvbi4gRnVydGhlciBkaXNjdXNzaW9uIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9TdGV2ZVNhbmRlcnNvbi9rbm9ja291dC9wdWxsLzM4N1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEbyBub3QgZXZhbHVhdGUgKGFuZCBwb3NzaWJseSBjYXB0dXJlIG5ldyBkZXBlbmRlbmNpZXMpIGlmIGRpc3Bvc2VkXHJcbiAgICAgICAgaWYgKHN0YXRlLmlzRGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLmRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZCAmJiAha28udXRpbHMuZG9tTm9kZUlzQXR0YWNoZWRUb0RvY3VtZW50KHN0YXRlLmRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZCkgfHwgZGlzcG9zZVdoZW4gJiYgZGlzcG9zZVdoZW4oKSkge1xyXG4gICAgICAgICAgICAvLyBTZWUgY29tbWVudCBhYm92ZSBhYm91dCBzdXBwcmVzc0Rpc3Bvc2FsVW50aWxEaXNwb3NlV2hlblJldHVybnNGYWxzZVxyXG4gICAgICAgICAgICBpZiAoIXN0YXRlLnN1cHByZXNzRGlzcG9zYWxVbnRpbERpc3Bvc2VXaGVuUmV0dXJuc0ZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb21wdXRlZE9ic2VydmFibGUuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gSXQganVzdCBkaWQgcmV0dXJuIGZhbHNlLCBzbyB3ZSBjYW4gc3RvcCBzdXBwcmVzc2luZyBub3dcclxuICAgICAgICAgICAgc3RhdGUuc3VwcHJlc3NEaXNwb3NhbFVudGlsRGlzcG9zZVdoZW5SZXR1cm5zRmFsc2UgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRlLmlzQmVpbmdFdmFsdWF0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZhbHVhdGVJbW1lZGlhdGVfQ2FsbFJlYWRXaXRoRGVwZW5kZW5jeURldGVjdGlvbihub3RpZnlDaGFuZ2UpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmlzQmVpbmdFdmFsdWF0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUuZGVwZW5kZW5jaWVzQ291bnQpIHtcclxuICAgICAgICAgICAgY29tcHV0ZWRPYnNlcnZhYmxlLmRpc3Bvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZXZhbHVhdGVJbW1lZGlhdGVfQ2FsbFJlYWRXaXRoRGVwZW5kZW5jeURldGVjdGlvbjogZnVuY3Rpb24gKG5vdGlmeUNoYW5nZSkge1xyXG4gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcmVhbGx5IGp1c3QgcGFydCBvZiB0aGUgZXZhbHVhdGVJbW1lZGlhdGUgbG9naWMuIFlvdSB3b3VsZCBuZXZlciBjYWxsIGl0IGZyb20gYW55d2hlcmUgZWxzZS5cclxuICAgICAgICAvLyBGYWN0b3JpbmcgaXQgb3V0IGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBtZWFucyBpdCBjYW4gYmUgaW5kZXBlbmRlbnQgb2YgdGhlIHRyeS9jYXRjaCBibG9jayBpbiBldmFsdWF0ZUltbWVkaWF0ZSxcclxuICAgICAgICAvLyB3aGljaCBjb250cmlidXRlcyB0byBzYXZpbmcgYWJvdXQgNDAlIG9mZiB0aGUgQ1BVIG92ZXJoZWFkIG9mIGNvbXB1dGVkIGV2YWx1YXRpb24gKG9uIFY4IGF0IGxlYXN0KS5cclxuXHJcbiAgICAgICAgdmFyIGNvbXB1dGVkT2JzZXJ2YWJsZSA9IHRoaXMsXHJcbiAgICAgICAgICAgIHN0YXRlID0gY29tcHV0ZWRPYnNlcnZhYmxlW2NvbXB1dGVkU3RhdGVdO1xyXG5cclxuICAgICAgICAvLyBJbml0aWFsbHksIHdlIGFzc3VtZSB0aGF0IG5vbmUgb2YgdGhlIHN1YnNjcmlwdGlvbnMgYXJlIHN0aWxsIGJlaW5nIHVzZWQgKGkuZS4sIGFsbCBhcmUgY2FuZGlkYXRlcyBmb3IgZGlzcG9zYWwpLlxyXG4gICAgICAgIC8vIFRoZW4sIGR1cmluZyBldmFsdWF0aW9uLCB3ZSBjcm9zcyBvZmYgYW55IHRoYXQgYXJlIGluIGZhY3Qgc3RpbGwgYmVpbmcgdXNlZC5cclxuICAgICAgICB2YXIgaXNJbml0aWFsID0gc3RhdGUucHVyZSA/IHVuZGVmaW5lZCA6ICFzdGF0ZS5kZXBlbmRlbmNpZXNDb3VudCwgICAvLyBJZiB3ZSdyZSBldmFsdWF0aW5nIHdoZW4gdGhlcmUgYXJlIG5vIHByZXZpb3VzIGRlcGVuZGVuY2llcywgaXQgbXVzdCBiZSB0aGUgZmlyc3QgdGltZVxyXG4gICAgICAgICAgICBkZXBlbmRlbmN5RGV0ZWN0aW9uQ29udGV4dCA9IHtcclxuICAgICAgICAgICAgICAgIGNvbXB1dGVkT2JzZXJ2YWJsZTogY29tcHV0ZWRPYnNlcnZhYmxlLFxyXG4gICAgICAgICAgICAgICAgZGlzcG9zYWxDYW5kaWRhdGVzOiBzdGF0ZS5kZXBlbmRlbmN5VHJhY2tpbmcsXHJcbiAgICAgICAgICAgICAgICBkaXNwb3NhbENvdW50OiBzdGF0ZS5kZXBlbmRlbmNpZXNDb3VudFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICBrby5kZXBlbmRlbmN5RGV0ZWN0aW9uLmJlZ2luKHtcclxuICAgICAgICAgICAgY2FsbGJhY2tUYXJnZXQ6IGRlcGVuZGVuY3lEZXRlY3Rpb25Db250ZXh0LFxyXG4gICAgICAgICAgICBjYWxsYmFjazogY29tcHV0ZWRCZWdpbkRlcGVuZGVuY3lEZXRlY3Rpb25DYWxsYmFjayxcclxuICAgICAgICAgICAgY29tcHV0ZWQ6IGNvbXB1dGVkT2JzZXJ2YWJsZSxcclxuICAgICAgICAgICAgaXNJbml0aWFsOiBpc0luaXRpYWxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc3RhdGUuZGVwZW5kZW5jeVRyYWNraW5nID0ge307XHJcbiAgICAgICAgc3RhdGUuZGVwZW5kZW5jaWVzQ291bnQgPSAwO1xyXG5cclxuICAgICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmV2YWx1YXRlSW1tZWRpYXRlX0NhbGxSZWFkVGhlbkVuZERlcGVuZGVuY3lEZXRlY3Rpb24oc3RhdGUsIGRlcGVuZGVuY3lEZXRlY3Rpb25Db250ZXh0KTtcclxuXHJcbiAgICAgICAgaWYgKGNvbXB1dGVkT2JzZXJ2YWJsZS5pc0RpZmZlcmVudChzdGF0ZS5sYXRlc3RWYWx1ZSwgbmV3VmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGlmICghc3RhdGUuaXNTbGVlcGluZykge1xyXG4gICAgICAgICAgICAgICAgY29tcHV0ZWRPYnNlcnZhYmxlW1wibm90aWZ5U3Vic2NyaWJlcnNcIl0oc3RhdGUubGF0ZXN0VmFsdWUsIFwiYmVmb3JlQ2hhbmdlXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzdGF0ZS5sYXRlc3RWYWx1ZSA9IG5ld1ZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN0YXRlLmlzU2xlZXBpbmcpIHtcclxuICAgICAgICAgICAgICAgIGNvbXB1dGVkT2JzZXJ2YWJsZS51cGRhdGVWZXJzaW9uKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobm90aWZ5Q2hhbmdlKSB7XHJcbiAgICAgICAgICAgICAgICBjb21wdXRlZE9ic2VydmFibGVbXCJub3RpZnlTdWJzY3JpYmVyc1wiXShzdGF0ZS5sYXRlc3RWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc0luaXRpYWwpIHtcclxuICAgICAgICAgICAgY29tcHV0ZWRPYnNlcnZhYmxlW1wibm90aWZ5U3Vic2NyaWJlcnNcIl0oc3RhdGUubGF0ZXN0VmFsdWUsIFwiYXdha2VcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGV2YWx1YXRlSW1tZWRpYXRlX0NhbGxSZWFkVGhlbkVuZERlcGVuZGVuY3lEZXRlY3Rpb246IGZ1bmN0aW9uIChzdGF0ZSwgZGVwZW5kZW5jeURldGVjdGlvbkNvbnRleHQpIHtcclxuICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHJlYWxseSBwYXJ0IG9mIHRoZSBldmFsdWF0ZUltbWVkaWF0ZV9DYWxsUmVhZFdpdGhEZXBlbmRlbmN5RGV0ZWN0aW9uIGxvZ2ljLlxyXG4gICAgICAgIC8vIFlvdSdkIG5ldmVyIGNhbGwgaXQgZnJvbSBhbnl3aGVyZSBlbHNlLiBGYWN0b3JpbmcgaXQgb3V0IG1lYW5zIHRoYXQgZXZhbHVhdGVJbW1lZGlhdGVfQ2FsbFJlYWRXaXRoRGVwZW5kZW5jeURldGVjdGlvblxyXG4gICAgICAgIC8vIGNhbiBiZSBpbmRlcGVuZGVudCBvZiB0cnkvZmluYWxseSBibG9ja3MsIHdoaWNoIGNvbnRyaWJ1dGVzIHRvIHNhdmluZyBhYm91dCA0MCUgb2ZmIHRoZSBDUFVcclxuICAgICAgICAvLyBvdmVyaGVhZCBvZiBjb21wdXRlZCBldmFsdWF0aW9uIChvbiBWOCBhdCBsZWFzdCkuXHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciByZWFkRnVuY3Rpb24gPSBzdGF0ZS5yZWFkRnVuY3Rpb247XHJcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5ldmFsdWF0b3JGdW5jdGlvblRhcmdldCA/IHJlYWRGdW5jdGlvbi5jYWxsKHN0YXRlLmV2YWx1YXRvckZ1bmN0aW9uVGFyZ2V0KSA6IHJlYWRGdW5jdGlvbigpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24uZW5kKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBGb3IgZWFjaCBzdWJzY3JpcHRpb24gbm8gbG9uZ2VyIGJlaW5nIHVzZWQsIHJlbW92ZSBpdCBmcm9tIHRoZSBhY3RpdmUgc3Vic2NyaXB0aW9ucyBsaXN0IGFuZCBkaXNwb3NlIGl0XHJcbiAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5RGV0ZWN0aW9uQ29udGV4dC5kaXNwb3NhbENvdW50ICYmICFzdGF0ZS5pc1NsZWVwaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBrby51dGlscy5vYmplY3RGb3JFYWNoKGRlcGVuZGVuY3lEZXRlY3Rpb25Db250ZXh0LmRpc3Bvc2FsQ2FuZGlkYXRlcywgY29tcHV0ZWREaXNwb3NlRGVwZW5kZW5jeUNhbGxiYWNrKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc3RhdGUuaXNTdGFsZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBwZWVrOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gUGVlayB3b24ndCByZS1ldmFsdWF0ZSwgZXhjZXB0IHdoaWxlIHRoZSBjb21wdXRlZCBpcyBzbGVlcGluZyBvciB0byBnZXQgdGhlIGluaXRpYWwgdmFsdWUgd2hlbiBcImRlZmVyRXZhbHVhdGlvblwiIGlzIHNldC5cclxuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzW2NvbXB1dGVkU3RhdGVdO1xyXG4gICAgICAgIGlmICgoc3RhdGUuaXNTdGFsZSAmJiAhc3RhdGUuZGVwZW5kZW5jaWVzQ291bnQpIHx8IChzdGF0ZS5pc1NsZWVwaW5nICYmIHRoaXMuaGF2ZURlcGVuZGVuY2llc0NoYW5nZWQoKSkpIHtcclxuICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZUltbWVkaWF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RhdGUubGF0ZXN0VmFsdWU7XHJcbiAgICB9LFxyXG4gICAgbGltaXQ6IGZ1bmN0aW9uIChsaW1pdEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgLy8gT3ZlcnJpZGUgdGhlIGxpbWl0IGZ1bmN0aW9uIHdpdGggb25lIHRoYXQgZGVsYXlzIGV2YWx1YXRpb24gYXMgd2VsbFxyXG4gICAgICAgIGtvLnN1YnNjcmliYWJsZVsnZm4nXS5saW1pdC5jYWxsKHRoaXMsIGxpbWl0RnVuY3Rpb24pO1xyXG4gICAgICAgIHRoaXMuX2V2YWxEZWxheWVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLl9saW1pdEJlZm9yZUNoYW5nZSh0aGlzW2NvbXB1dGVkU3RhdGVdLmxhdGVzdFZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXNbY29tcHV0ZWRTdGF0ZV0uaXNTdGFsZSA9IHRydWU7IC8vIE1hcmsgYXMgZGlydHlcclxuXHJcbiAgICAgICAgICAgIC8vIFBhc3MgdGhlIG9ic2VydmFibGUgdG8gdGhlIFwibGltaXRcIiBjb2RlLCB3aGljaCB3aWxsIGFjY2VzcyBpdCB3aGVuXHJcbiAgICAgICAgICAgIC8vIGl0J3MgdGltZSB0byBkbyB0aGUgbm90aWZpY2F0aW9uLlxyXG4gICAgICAgICAgICB0aGlzLl9saW1pdENoYW5nZSh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXNbY29tcHV0ZWRTdGF0ZV07XHJcbiAgICAgICAgaWYgKCFzdGF0ZS5pc1NsZWVwaW5nICYmIHN0YXRlLmRlcGVuZGVuY3lUcmFja2luZykge1xyXG4gICAgICAgICAgICBrby51dGlscy5vYmplY3RGb3JFYWNoKHN0YXRlLmRlcGVuZGVuY3lUcmFja2luZywgZnVuY3Rpb24gKGlkLCBkZXBlbmRlbmN5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jeS5kaXNwb3NlKVxyXG4gICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN0YXRlLmRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZCAmJiBzdGF0ZS5kb21Ob2RlRGlzcG9zYWxDYWxsYmFjaykge1xyXG4gICAgICAgICAgICBrby51dGlscy5kb21Ob2RlRGlzcG9zYWwucmVtb3ZlRGlzcG9zZUNhbGxiYWNrKHN0YXRlLmRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZCwgc3RhdGUuZG9tTm9kZURpc3Bvc2FsQ2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdGF0ZS5kZXBlbmRlbmN5VHJhY2tpbmcgPSBudWxsO1xyXG4gICAgICAgIHN0YXRlLmRlcGVuZGVuY2llc0NvdW50ID0gMDtcclxuICAgICAgICBzdGF0ZS5pc0Rpc3Bvc2VkID0gdHJ1ZTtcclxuICAgICAgICBzdGF0ZS5pc1N0YWxlID0gZmFsc2U7XHJcbiAgICAgICAgc3RhdGUuaXNTbGVlcGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHN0YXRlLmRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZCA9IG51bGw7XHJcbiAgICB9XHJcbn07XHJcblxyXG52YXIgcHVyZUNvbXB1dGVkT3ZlcnJpZGVzID0ge1xyXG4gICAgYmVmb3JlU3Vic2NyaXB0aW9uQWRkOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAvLyBJZiBhc2xlZXAsIHdha2UgdXAgdGhlIGNvbXB1dGVkIGJ5IHN1YnNjcmliaW5nIHRvIGFueSBkZXBlbmRlbmNpZXMuXHJcbiAgICAgICAgdmFyIGNvbXB1dGVkT2JzZXJ2YWJsZSA9IHRoaXMsXHJcbiAgICAgICAgICAgIHN0YXRlID0gY29tcHV0ZWRPYnNlcnZhYmxlW2NvbXB1dGVkU3RhdGVdO1xyXG4gICAgICAgIGlmICghc3RhdGUuaXNEaXNwb3NlZCAmJiBzdGF0ZS5pc1NsZWVwaW5nICYmIGV2ZW50ID09ICdjaGFuZ2UnKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmlzU2xlZXBpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHN0YXRlLmlzU3RhbGUgfHwgY29tcHV0ZWRPYnNlcnZhYmxlLmhhdmVEZXBlbmRlbmNpZXNDaGFuZ2VkKCkpIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlLmRlcGVuZGVuY3lUcmFja2luZyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZS5kZXBlbmRlbmNpZXNDb3VudCA9IDA7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZS5pc1N0YWxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbXB1dGVkT2JzZXJ2YWJsZS5ldmFsdWF0ZUltbWVkaWF0ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gRmlyc3QgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4gb3JkZXJcclxuICAgICAgICAgICAgICAgIHZhciBkZXBlbmRlY2llc09yZGVyID0gW107XHJcbiAgICAgICAgICAgICAgICBrby51dGlscy5vYmplY3RGb3JFYWNoKHN0YXRlLmRlcGVuZGVuY3lUcmFja2luZywgZnVuY3Rpb24gKGlkLCBkZXBlbmRlbmN5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwZW5kZWNpZXNPcmRlcltkZXBlbmRlbmN5Ll9vcmRlcl0gPSBpZDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgLy8gTmV4dCwgc3Vic2NyaWJlIHRvIGVhY2ggb25lXHJcbiAgICAgICAgICAgICAgICBrby51dGlscy5hcnJheUZvckVhY2goZGVwZW5kZWNpZXNPcmRlciwgZnVuY3Rpb24gKGlkLCBvcmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkZXBlbmRlbmN5ID0gc3RhdGUuZGVwZW5kZW5jeVRyYWNraW5nW2lkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uID0gY29tcHV0ZWRPYnNlcnZhYmxlLnN1YnNjcmliZVRvRGVwZW5kZW5jeShkZXBlbmRlbmN5Ll90YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5fb3JkZXIgPSBvcmRlcjtcclxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24uX3ZlcnNpb24gPSBkZXBlbmRlbmN5Ll92ZXJzaW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmRlcGVuZGVuY3lUcmFja2luZ1tpZF0gPSBzdWJzY3JpcHRpb247XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXN0YXRlLmlzRGlzcG9zZWQpIHsgICAgIC8vIHRlc3Qgc2luY2UgZXZhbHVhdGluZyBjb3VsZCB0cmlnZ2VyIGRpc3Bvc2FsXHJcbiAgICAgICAgICAgICAgICBjb21wdXRlZE9ic2VydmFibGVbXCJub3RpZnlTdWJzY3JpYmVyc1wiXShzdGF0ZS5sYXRlc3RWYWx1ZSwgXCJhd2FrZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBhZnRlclN1YnNjcmlwdGlvblJlbW92ZTogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIHN0YXRlID0gdGhpc1tjb21wdXRlZFN0YXRlXTtcclxuICAgICAgICBpZiAoIXN0YXRlLmlzRGlzcG9zZWQgJiYgZXZlbnQgPT0gJ2NoYW5nZScgJiYgIXRoaXMuaGFzU3Vic2NyaXB0aW9uc0ZvckV2ZW50KCdjaGFuZ2UnKSkge1xyXG4gICAgICAgICAgICBrby51dGlscy5vYmplY3RGb3JFYWNoKHN0YXRlLmRlcGVuZGVuY3lUcmFja2luZywgZnVuY3Rpb24gKGlkLCBkZXBlbmRlbmN5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jeS5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuZGVwZW5kZW5jeVRyYWNraW5nW2lkXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3RhcmdldDogZGVwZW5kZW5jeS5fdGFyZ2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfb3JkZXI6IGRlcGVuZGVuY3kuX29yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdmVyc2lvbjogZGVwZW5kZW5jeS5fdmVyc2lvblxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeS5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBzdGF0ZS5pc1NsZWVwaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpc1tcIm5vdGlmeVN1YnNjcmliZXJzXCJdKHVuZGVmaW5lZCwgXCJhc2xlZXBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGdldFZlcnNpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBCZWNhdXNlIGEgcHVyZSBjb21wdXRlZCBpcyBub3QgYXV0b21hdGljYWxseSB1cGRhdGVkIHdoaWxlIGl0IGlzIHNsZWVwaW5nLCB3ZSBjYW4ndFxyXG4gICAgICAgIC8vIHNpbXBseSByZXR1cm4gdGhlIHZlcnNpb24gbnVtYmVyLiBJbnN0ZWFkLCB3ZSBjaGVjayBpZiBhbnkgb2YgdGhlIGRlcGVuZGVuY2llcyBoYXZlXHJcbiAgICAgICAgLy8gY2hhbmdlZCBhbmQgY29uZGl0aW9uYWxseSByZS1ldmFsdWF0ZSB0aGUgY29tcHV0ZWQgb2JzZXJ2YWJsZS5cclxuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzW2NvbXB1dGVkU3RhdGVdO1xyXG4gICAgICAgIGlmIChzdGF0ZS5pc1NsZWVwaW5nICYmIChzdGF0ZS5pc1N0YWxlIHx8IHRoaXMuaGF2ZURlcGVuZGVuY2llc0NoYW5nZWQoKSkpIHtcclxuICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZUltbWVkaWF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ga28uc3Vic2NyaWJhYmxlWydmbiddLmdldFZlcnNpb24uY2FsbCh0aGlzKTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZlckV2YWx1YXRpb25PdmVycmlkZXMgPSB7XHJcbiAgICBiZWZvcmVTdWJzY3JpcHRpb25BZGQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIC8vIFRoaXMgd2lsbCBmb3JjZSBhIGNvbXB1dGVkIHdpdGggZGVmZXJFdmFsdWF0aW9uIHRvIGV2YWx1YXRlIHdoZW4gdGhlIGZpcnN0IHN1YnNjcmlwdGlvbiBpcyByZWdpc3RlcmVkLlxyXG4gICAgICAgIGlmIChldmVudCA9PSAnY2hhbmdlJyB8fCBldmVudCA9PSAnYmVmb3JlQ2hhbmdlJykge1xyXG4gICAgICAgICAgICB0aGlzLnBlZWsoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG4vLyBOb3RlIHRoYXQgZm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBwcm90byBhc3NpZ25tZW50LCB0aGVcclxuLy8gaW5oZXJpdGFuY2UgY2hhaW4gaXMgY3JlYXRlZCBtYW51YWxseSBpbiB0aGUga28uY29tcHV0ZWQgY29uc3RydWN0b3JcclxuaWYgKGtvLnV0aWxzLmNhblNldFByb3RvdHlwZSkge1xyXG4gICAga28udXRpbHMuc2V0UHJvdG90eXBlT2YoY29tcHV0ZWRGbiwga28uc3Vic2NyaWJhYmxlWydmbiddKTtcclxufVxyXG5cclxuLy8gU2V0IHRoZSBwcm90byBjaGFpbiB2YWx1ZXMgZm9yIGtvLmhhc1Byb3RvdHlwZVxyXG52YXIgcHJvdG9Qcm9wID0ga28ub2JzZXJ2YWJsZS5wcm90b1Byb3BlcnR5OyAvLyA9PSBcIl9fa29fcHJvdG9fX1wiXHJcbmtvLmNvbXB1dGVkW3Byb3RvUHJvcF0gPSBrby5vYnNlcnZhYmxlO1xyXG5jb21wdXRlZEZuW3Byb3RvUHJvcF0gPSBrby5jb21wdXRlZDtcclxuXHJcbmtvLmlzQ29tcHV0ZWQgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgIHJldHVybiBrby5oYXNQcm90b3R5cGUoaW5zdGFuY2UsIGtvLmNvbXB1dGVkKTtcclxufTtcclxuXHJcbmtvLmlzUHVyZUNvbXB1dGVkID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICByZXR1cm4ga28uaGFzUHJvdG90eXBlKGluc3RhbmNlLCBrby5jb21wdXRlZClcclxuICAgICAgICAmJiBpbnN0YW5jZVtjb21wdXRlZFN0YXRlXSAmJiBpbnN0YW5jZVtjb21wdXRlZFN0YXRlXS5wdXJlO1xyXG59O1xyXG5cclxua28uZXhwb3J0U3ltYm9sKCdjb21wdXRlZCcsIGtvLmNvbXB1dGVkKTtcclxua28uZXhwb3J0U3ltYm9sKCdkZXBlbmRlbnRPYnNlcnZhYmxlJywga28uY29tcHV0ZWQpOyAgICAvLyBleHBvcnQga28uZGVwZW5kZW50T2JzZXJ2YWJsZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKDEueClcclxua28uZXhwb3J0U3ltYm9sKCdpc0NvbXB1dGVkJywga28uaXNDb21wdXRlZCk7XHJcbmtvLmV4cG9ydFN5bWJvbCgnaXNQdXJlQ29tcHV0ZWQnLCBrby5pc1B1cmVDb21wdXRlZCk7XHJcbmtvLmV4cG9ydFN5bWJvbCgnY29tcHV0ZWQuZm4nLCBjb21wdXRlZEZuKTtcclxua28uZXhwb3J0UHJvcGVydHkoY29tcHV0ZWRGbiwgJ3BlZWsnLCBjb21wdXRlZEZuLnBlZWspO1xyXG5rby5leHBvcnRQcm9wZXJ0eShjb21wdXRlZEZuLCAnZGlzcG9zZScsIGNvbXB1dGVkRm4uZGlzcG9zZSk7XHJcbmtvLmV4cG9ydFByb3BlcnR5KGNvbXB1dGVkRm4sICdpc0FjdGl2ZScsIGNvbXB1dGVkRm4uaXNBY3RpdmUpO1xyXG5rby5leHBvcnRQcm9wZXJ0eShjb21wdXRlZEZuLCAnZ2V0RGVwZW5kZW5jaWVzQ291bnQnLCBjb21wdXRlZEZuLmdldERlcGVuZGVuY2llc0NvdW50KTtcclxuXHJcbmtvLnB1cmVDb21wdXRlZCA9IGZ1bmN0aW9uIChldmFsdWF0b3JGdW5jdGlvbk9yT3B0aW9ucywgZXZhbHVhdG9yRnVuY3Rpb25UYXJnZXQpIHtcclxuICAgIGlmICh0eXBlb2YgZXZhbHVhdG9yRnVuY3Rpb25Pck9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4ga28uY29tcHV0ZWQoZXZhbHVhdG9yRnVuY3Rpb25Pck9wdGlvbnMsIGV2YWx1YXRvckZ1bmN0aW9uVGFyZ2V0LCB7J3B1cmUnOnRydWV9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZXZhbHVhdG9yRnVuY3Rpb25Pck9wdGlvbnMgPSBrby51dGlscy5leHRlbmQoe30sIGV2YWx1YXRvckZ1bmN0aW9uT3JPcHRpb25zKTsgICAvLyBtYWtlIGEgY29weSBvZiB0aGUgcGFyYW1ldGVyIG9iamVjdFxyXG4gICAgICAgIGV2YWx1YXRvckZ1bmN0aW9uT3JPcHRpb25zWydwdXJlJ10gPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBrby5jb21wdXRlZChldmFsdWF0b3JGdW5jdGlvbk9yT3B0aW9ucywgZXZhbHVhdG9yRnVuY3Rpb25UYXJnZXQpO1xyXG4gICAgfVxyXG59XHJcbmtvLmV4cG9ydFN5bWJvbCgncHVyZUNvbXB1dGVkJywga28ucHVyZUNvbXB1dGVkKTtcclxuXHJcbihmdW5jdGlvbigpIHtcclxuICAgIHZhciBtYXhOZXN0ZWRPYnNlcnZhYmxlRGVwdGggPSAxMDsgLy8gRXNjYXBlIHRoZSAodW5saWtlbHkpIHBhdGhhbG9naWNhbCBjYXNlIHdoZXJlIGFuIG9ic2VydmFibGUncyBjdXJyZW50IHZhbHVlIGlzIGl0c2VsZiAob3Igc2ltaWxhciByZWZlcmVuY2UgY3ljbGUpXHJcblxyXG4gICAga28udG9KUyA9IGZ1bmN0aW9uKHJvb3RPYmplY3QpIHtcclxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXaGVuIGNhbGxpbmcga28udG9KUywgcGFzcyB0aGUgb2JqZWN0IHlvdSB3YW50IHRvIGNvbnZlcnQuXCIpO1xyXG5cclxuICAgICAgICAvLyBXZSBqdXN0IHVud3JhcCBldmVyeXRoaW5nIGF0IGV2ZXJ5IGxldmVsIGluIHRoZSBvYmplY3QgZ3JhcGhcclxuICAgICAgICByZXR1cm4gbWFwSnNPYmplY3RHcmFwaChyb290T2JqZWN0LCBmdW5jdGlvbih2YWx1ZVRvTWFwKSB7XHJcbiAgICAgICAgICAgIC8vIExvb3AgYmVjYXVzZSBhbiBvYnNlcnZhYmxlJ3MgdmFsdWUgbWlnaHQgaW4gdHVybiBiZSBhbm90aGVyIG9ic2VydmFibGUgd3JhcHBlclxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsga28uaXNPYnNlcnZhYmxlKHZhbHVlVG9NYXApICYmIChpIDwgbWF4TmVzdGVkT2JzZXJ2YWJsZURlcHRoKTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgdmFsdWVUb01hcCA9IHZhbHVlVG9NYXAoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlVG9NYXA7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGtvLnRvSlNPTiA9IGZ1bmN0aW9uKHJvb3RPYmplY3QsIHJlcGxhY2VyLCBzcGFjZSkgeyAgICAgLy8gcmVwbGFjZXIgYW5kIHNwYWNlIGFyZSBvcHRpb25hbFxyXG4gICAgICAgIHZhciBwbGFpbkphdmFTY3JpcHRPYmplY3QgPSBrby50b0pTKHJvb3RPYmplY3QpO1xyXG4gICAgICAgIHJldHVybiBrby51dGlscy5zdHJpbmdpZnlKc29uKHBsYWluSmF2YVNjcmlwdE9iamVjdCwgcmVwbGFjZXIsIHNwYWNlKTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gbWFwSnNPYmplY3RHcmFwaChyb290T2JqZWN0LCBtYXBJbnB1dENhbGxiYWNrLCB2aXNpdGVkT2JqZWN0cykge1xyXG4gICAgICAgIHZpc2l0ZWRPYmplY3RzID0gdmlzaXRlZE9iamVjdHMgfHwgbmV3IG9iamVjdExvb2t1cCgpO1xyXG5cclxuICAgICAgICByb290T2JqZWN0ID0gbWFwSW5wdXRDYWxsYmFjayhyb290T2JqZWN0KTtcclxuICAgICAgICB2YXIgY2FuSGF2ZVByb3BlcnRpZXMgPSAodHlwZW9mIHJvb3RPYmplY3QgPT0gXCJvYmplY3RcIikgJiYgKHJvb3RPYmplY3QgIT09IG51bGwpICYmIChyb290T2JqZWN0ICE9PSB1bmRlZmluZWQpICYmICghKHJvb3RPYmplY3QgaW5zdGFuY2VvZiBSZWdFeHApKSAmJiAoIShyb290T2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkpICYmICghKHJvb3RPYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpKSAmJiAoIShyb290T2JqZWN0IGluc3RhbmNlb2YgTnVtYmVyKSkgJiYgKCEocm9vdE9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pKTtcclxuICAgICAgICBpZiAoIWNhbkhhdmVQcm9wZXJ0aWVzKVxyXG4gICAgICAgICAgICByZXR1cm4gcm9vdE9iamVjdDtcclxuXHJcbiAgICAgICAgdmFyIG91dHB1dFByb3BlcnRpZXMgPSByb290T2JqZWN0IGluc3RhbmNlb2YgQXJyYXkgPyBbXSA6IHt9O1xyXG4gICAgICAgIHZpc2l0ZWRPYmplY3RzLnNhdmUocm9vdE9iamVjdCwgb3V0cHV0UHJvcGVydGllcyk7XHJcblxyXG4gICAgICAgIHZpc2l0UHJvcGVydGllc09yQXJyYXlFbnRyaWVzKHJvb3RPYmplY3QsIGZ1bmN0aW9uKGluZGV4ZXIpIHtcclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5VmFsdWUgPSBtYXBJbnB1dENhbGxiYWNrKHJvb3RPYmplY3RbaW5kZXhlcl0pO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgcHJvcGVydHlWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFByb3BlcnRpZXNbaW5kZXhlcl0gPSBwcm9wZXJ0eVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c2x5TWFwcGVkVmFsdWUgPSB2aXNpdGVkT2JqZWN0cy5nZXQocHJvcGVydHlWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0UHJvcGVydGllc1tpbmRleGVyXSA9IChwcmV2aW91c2x5TWFwcGVkVmFsdWUgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBwcmV2aW91c2x5TWFwcGVkVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBtYXBKc09iamVjdEdyYXBoKHByb3BlcnR5VmFsdWUsIG1hcElucHV0Q2FsbGJhY2ssIHZpc2l0ZWRPYmplY3RzKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0UHJvcGVydGllcztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiB2aXNpdFByb3BlcnRpZXNPckFycmF5RW50cmllcyhyb290T2JqZWN0LCB2aXNpdG9yQ2FsbGJhY2spIHtcclxuICAgICAgICBpZiAocm9vdE9iamVjdCBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm9vdE9iamVjdC5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIHZpc2l0b3JDYWxsYmFjayhpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEZvciBhcnJheXMsIGFsc28gcmVzcGVjdCB0b0pTT04gcHJvcGVydHkgZm9yIGN1c3RvbSBtYXBwaW5ncyAoZml4ZXMgIzI3OClcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByb290T2JqZWN0Wyd0b0pTT04nXSA9PSAnZnVuY3Rpb24nKVxyXG4gICAgICAgICAgICAgICAgdmlzaXRvckNhbGxiYWNrKCd0b0pTT04nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eU5hbWUgaW4gcm9vdE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgdmlzaXRvckNhbGxiYWNrKHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIG9iamVjdExvb2t1cCgpIHtcclxuICAgICAgICB0aGlzLmtleXMgPSBbXTtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xyXG4gICAgfTtcclxuXHJcbiAgICBvYmplY3RMb29rdXAucHJvdG90eXBlID0ge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yOiBvYmplY3RMb29rdXAsXHJcbiAgICAgICAgc2F2ZTogZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgZXhpc3RpbmdJbmRleCA9IGtvLnV0aWxzLmFycmF5SW5kZXhPZih0aGlzLmtleXMsIGtleSk7XHJcbiAgICAgICAgICAgIGlmIChleGlzdGluZ0luZGV4ID49IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1tleGlzdGluZ0luZGV4XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMua2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcy5wdXNoKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbihrZXkpIHtcclxuICAgICAgICAgICAgdmFyIGV4aXN0aW5nSW5kZXggPSBrby51dGlscy5hcnJheUluZGV4T2YodGhpcy5rZXlzLCBrZXkpO1xyXG4gICAgICAgICAgICByZXR1cm4gKGV4aXN0aW5nSW5kZXggPj0gMCkgPyB0aGlzLnZhbHVlc1tleGlzdGluZ0luZGV4XSA6IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxua28uZXhwb3J0U3ltYm9sKCd0b0pTJywga28udG9KUyk7XHJcbmtvLmV4cG9ydFN5bWJvbCgndG9KU09OJywga28udG9KU09OKTtcclxuKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBoYXNEb21EYXRhRXhwYW5kb1Byb3BlcnR5ID0gJ19fa29fX2hhc0RvbURhdGFPcHRpb25WYWx1ZV9fJztcclxuXHJcbiAgICAvLyBOb3JtYWxseSwgU0VMRUNUIGVsZW1lbnRzIGFuZCB0aGVpciBPUFRJT05zIGNhbiBvbmx5IHRha2UgdmFsdWUgb2YgdHlwZSAnc3RyaW5nJyAoYmVjYXVzZSB0aGUgdmFsdWVzXHJcbiAgICAvLyBhcmUgc3RvcmVkIG9uIERPTSBhdHRyaWJ1dGVzKS4ga28uc2VsZWN0RXh0ZW5zaW9ucyBwcm92aWRlcyBhIHdheSBmb3IgU0VMRUNUcy9PUFRJT05zIHRvIGhhdmUgdmFsdWVzXHJcbiAgICAvLyB0aGF0IGFyZSBhcmJpdHJhcnkgb2JqZWN0cy4gVGhpcyBpcyB2ZXJ5IGNvbnZlbmllbnQgd2hlbiBpbXBsZW1lbnRpbmcgdGhpbmdzIGxpa2UgY2FzY2FkaW5nIGRyb3Bkb3ducy5cclxuICAgIGtvLnNlbGVjdEV4dGVuc2lvbnMgPSB7XHJcbiAgICAgICAgcmVhZFZhbHVlIDogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGtvLnV0aWxzLnRhZ05hbWVMb3dlcihlbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnb3B0aW9uJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFtoYXNEb21EYXRhRXhwYW5kb1Byb3BlcnR5XSA9PT0gdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtvLnV0aWxzLmRvbURhdGEuZ2V0KGVsZW1lbnQsIGtvLmJpbmRpbmdIYW5kbGVycy5vcHRpb25zLm9wdGlvblZhbHVlRG9tRGF0YUtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtvLnV0aWxzLmllVmVyc2lvbiA8PSA3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKGVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZSgndmFsdWUnKSAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoJ3ZhbHVlJykuc3BlY2lmaWVkID8gZWxlbWVudC52YWx1ZSA6IGVsZW1lbnQudGV4dClcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5zZWxlY3RlZEluZGV4ID49IDAgPyBrby5zZWxlY3RFeHRlbnNpb25zLnJlYWRWYWx1ZShlbGVtZW50Lm9wdGlvbnNbZWxlbWVudC5zZWxlY3RlZEluZGV4XSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgd3JpdGVWYWx1ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUsIGFsbG93VW5zZXQpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChrby51dGlscy50YWdOYW1lTG93ZXIoZWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ29wdGlvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGVvZiB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrby51dGlscy5kb21EYXRhLnNldChlbGVtZW50LCBrby5iaW5kaW5nSGFuZGxlcnMub3B0aW9ucy5vcHRpb25WYWx1ZURvbURhdGFLZXksIHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRG9tRGF0YUV4cGFuZG9Qcm9wZXJ0eSBpbiBlbGVtZW50KSB7IC8vIElFIDw9IDggdGhyb3dzIGVycm9ycyBpZiB5b3UgZGVsZXRlIG5vbi1leGlzdGVudCBwcm9wZXJ0aWVzIGZyb20gYSBET00gbm9kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtZW50W2hhc0RvbURhdGFFeHBhbmRvUHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSBhcmJpdHJhcnkgb2JqZWN0IHVzaW5nIERvbURhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtvLnV0aWxzLmRvbURhdGEuc2V0KGVsZW1lbnQsIGtvLmJpbmRpbmdIYW5kbGVycy5vcHRpb25zLm9wdGlvblZhbHVlRG9tRGF0YUtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFtoYXNEb21EYXRhRXhwYW5kb1Byb3BlcnR5XSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbCB0cmVhdG1lbnQgb2YgbnVtYmVycyBpcyBqdXN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBLTyAxLjIuMSB3cm90ZSBudW1lcmljYWwgdmFsdWVzIHRvIGVsZW1lbnQudmFsdWUuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlID0gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiID8gdmFsdWUgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IFwiXCIgfHwgdmFsdWUgPT09IG51bGwpICAgICAgIC8vIEEgYmxhbmsgc3RyaW5nIG9yIG51bGwgdmFsdWUgd2lsbCBzZWxlY3QgdGhlIGNhcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gZWxlbWVudC5vcHRpb25zLmxlbmd0aCwgb3B0aW9uVmFsdWU7IGkgPCBuOyArK2kpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWUgPSBrby5zZWxlY3RFeHRlbnNpb25zLnJlYWRWYWx1ZShlbGVtZW50Lm9wdGlvbnNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmNsdWRlIHNwZWNpYWwgY2hlY2sgdG8gaGFuZGxlIHNlbGVjdGluZyBhIGNhcHRpb24gd2l0aCBhIGJsYW5rIHN0cmluZyB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uVmFsdWUgPT0gdmFsdWUgfHwgKG9wdGlvblZhbHVlID09IFwiXCIgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dVbnNldCB8fCBzZWxlY3Rpb24gPj0gMCB8fCAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtZW50LnNpemUgPiAxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNlbGVjdGVkSW5kZXggPSBzZWxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbHVlID09PSBudWxsKSB8fCAodmFsdWUgPT09IHVuZGVmaW5lZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxua28uZXhwb3J0U3ltYm9sKCdzZWxlY3RFeHRlbnNpb25zJywga28uc2VsZWN0RXh0ZW5zaW9ucyk7XHJcbmtvLmV4cG9ydFN5bWJvbCgnc2VsZWN0RXh0ZW5zaW9ucy5yZWFkVmFsdWUnLCBrby5zZWxlY3RFeHRlbnNpb25zLnJlYWRWYWx1ZSk7XHJcbmtvLmV4cG9ydFN5bWJvbCgnc2VsZWN0RXh0ZW5zaW9ucy53cml0ZVZhbHVlJywga28uc2VsZWN0RXh0ZW5zaW9ucy53cml0ZVZhbHVlKTtcclxua28uZXhwcmVzc2lvblJld3JpdGluZyA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgamF2YVNjcmlwdFJlc2VydmVkV29yZHMgPSBbXCJ0cnVlXCIsIFwiZmFsc2VcIiwgXCJudWxsXCIsIFwidW5kZWZpbmVkXCJdO1xyXG5cclxuICAgIC8vIE1hdGNoZXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGFzc2lnbmVkIHRvLS1laXRoZXIgYW4gaXNvbGF0ZWQgaWRlbnRpZmllciBvciBzb21ldGhpbmcgZW5kaW5nIHdpdGggYSBwcm9wZXJ0eSBhY2Nlc3NvclxyXG4gICAgLy8gVGhpcyBpcyBkZXNpZ25lZCB0byBiZSBzaW1wbGUgYW5kIGF2b2lkIGZhbHNlIG5lZ2F0aXZlcywgYnV0IGNvdWxkIHByb2R1Y2UgZmFsc2UgcG9zaXRpdmVzIChlLmcuLCBhK2IuYykuXHJcbiAgICAvLyBUaGlzIGFsc28gd2lsbCBub3QgcHJvcGVybHkgaGFuZGxlIG5lc3RlZCBicmFja2V0cyAoZS5nLiwgb2JqMVtvYmoyWydwcm9wJ11dOyBzZWUgIzkxMSkuXHJcbiAgICB2YXIgamF2YVNjcmlwdEFzc2lnbm1lbnRUYXJnZXQgPSAvXig/OlskX2Etel1bJFxcd10qfCguKykoXFwuXFxzKlskX2Etel1bJFxcd10qfFxcWy4rXFxdKSkkL2k7XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0V3JpdGVhYmxlVmFsdWUoZXhwcmVzc2lvbikge1xyXG4gICAgICAgIGlmIChrby51dGlscy5hcnJheUluZGV4T2YoamF2YVNjcmlwdFJlc2VydmVkV29yZHMsIGV4cHJlc3Npb24pID49IDApXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB2YXIgbWF0Y2ggPSBleHByZXNzaW9uLm1hdGNoKGphdmFTY3JpcHRBc3NpZ25tZW50VGFyZ2V0KTtcclxuICAgICAgICByZXR1cm4gbWF0Y2ggPT09IG51bGwgPyBmYWxzZSA6IG1hdGNoWzFdID8gKCdPYmplY3QoJyArIG1hdGNoWzFdICsgJyknICsgbWF0Y2hbMl0pIDogZXhwcmVzc2lvbjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUaGUgZm9sbG93aW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2lsbCBiZSB1c2VkIHRvIHNwbGl0IGFuIG9iamVjdC1saXRlcmFsIHN0cmluZyBpbnRvIHRva2Vuc1xyXG5cclxuICAgICAgICAvLyBUaGVzZSB0d28gbWF0Y2ggc3RyaW5ncywgZWl0aGVyIHdpdGggZG91YmxlIHF1b3RlcyBvciBzaW5nbGUgcXVvdGVzXHJcbiAgICB2YXIgc3RyaW5nRG91YmxlID0gJ1wiKD86W15cIlxcXFxcXFxcXXxcXFxcXFxcXC4pKlwiJyxcclxuICAgICAgICBzdHJpbmdTaW5nbGUgPSBcIicoPzpbXidcXFxcXFxcXF18XFxcXFxcXFwuKSonXCIsXHJcbiAgICAgICAgLy8gTWF0Y2hlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiAodGV4dCBlbmNsb3NlZCBieSBzbGFzaGVzKSwgYnV0IHdpbGwgYWxzbyBtYXRjaCBzZXRzIG9mIGRpdmlzaW9uc1xyXG4gICAgICAgIC8vIGFzIGEgcmVndWxhciBleHByZXNzaW9uICh0aGlzIGlzIGhhbmRsZWQgYnkgdGhlIHBhcnNpbmcgbG9vcCBiZWxvdykuXHJcbiAgICAgICAgc3RyaW5nUmVnZXhwID0gJy8oPzpbXi9cXFxcXFxcXF18XFxcXFxcXFwuKSovXFx3KicsXHJcbiAgICAgICAgLy8gVGhlc2UgY2hhcmFjdGVycyBoYXZlIHNwZWNpYWwgbWVhbmluZyB0byB0aGUgcGFyc2VyIGFuZCBtdXN0IG5vdCBhcHBlYXIgaW4gdGhlIG1pZGRsZSBvZiBhXHJcbiAgICAgICAgLy8gdG9rZW4sIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgc3RyaW5nLlxyXG4gICAgICAgIHNwZWNpYWxzID0gJyxcIlxcJ3t9KCkvOltcXFxcXScsXHJcbiAgICAgICAgLy8gTWF0Y2ggdGV4dCAoYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMpIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnkgb2YgdGhlIGFib3ZlIHNwZWNpYWwgY2hhcmFjdGVycyxcclxuICAgICAgICAvLyBhbHRob3VnaCBzb21lIG9mIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQgdG8gc3RhcnQgaXQgKGFsbCBidXQgdGhlIGNvbG9uIGFuZCBjb21tYSkuXHJcbiAgICAgICAgLy8gVGhlIHRleHQgY2FuIGNvbnRhaW4gc3BhY2VzLCBidXQgbGVhZGluZyBvciB0cmFpbGluZyBzcGFjZXMgYXJlIHNraXBwZWQuXHJcbiAgICAgICAgZXZlcnlUaGluZ0Vsc2UgPSAnW15cXFxcczosL11bXicgKyBzcGVjaWFscyArICddKlteXFxcXHMnICsgc3BlY2lhbHMgKyAnXScsXHJcbiAgICAgICAgLy8gTWF0Y2ggYW55IG5vbi1zcGFjZSBjaGFyYWN0ZXIgbm90IG1hdGNoZWQgYWxyZWFkeS4gVGhpcyB3aWxsIG1hdGNoIGNvbG9ucyBhbmQgY29tbWFzLCBzaW5jZSB0aGV5J3JlXHJcbiAgICAgICAgLy8gbm90IG1hdGNoZWQgYnkgXCJldmVyeVRoaW5nRWxzZVwiLCBidXQgd2lsbCBhbHNvIG1hdGNoIGFueSBvdGhlciBzaW5nbGUgY2hhcmFjdGVyIHRoYXQgd2Fzbid0IGFscmVhZHlcclxuICAgICAgICAvLyBtYXRjaGVkIChmb3IgZXhhbXBsZTogaW4gXCJhOiAxLCBiOiAyXCIsIGVhY2ggb2YgdGhlIG5vbi1zcGFjZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWF0Y2hlZCBieSBvbmVOb3RTcGFjZSkuXHJcbiAgICAgICAgb25lTm90U3BhY2UgPSAnW15cXFxcc10nLFxyXG5cclxuICAgICAgICAvLyBDcmVhdGUgdGhlIGFjdHVhbCByZWd1bGFyIGV4cHJlc3Npb24gYnkgb3ItaW5nIHRoZSBhYm92ZSBzdHJpbmdzLiBUaGUgb3JkZXIgaXMgaW1wb3J0YW50LlxyXG4gICAgICAgIGJpbmRpbmdUb2tlbiA9IFJlZ0V4cChzdHJpbmdEb3VibGUgKyAnfCcgKyBzdHJpbmdTaW5nbGUgKyAnfCcgKyBzdHJpbmdSZWdleHAgKyAnfCcgKyBldmVyeVRoaW5nRWxzZSArICd8JyArIG9uZU5vdFNwYWNlLCAnZycpLFxyXG5cclxuICAgICAgICAvLyBNYXRjaCBlbmQgb2YgcHJldmlvdXMgdG9rZW4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBzbGFzaCBpcyBhIGRpdmlzaW9uIG9yIHJlZ2V4LlxyXG4gICAgICAgIGRpdmlzaW9uTG9va0JlaGluZCA9IC9bXFxdKVwiJ0EtWmEtejAtOV8kXSskLyxcclxuICAgICAgICBrZXl3b3JkUmVnZXhMb29rQmVoaW5kID0geydpbic6MSwncmV0dXJuJzoxLCd0eXBlb2YnOjF9O1xyXG5cclxuICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0TGl0ZXJhbChvYmplY3RMaXRlcmFsU3RyaW5nKSB7XHJcbiAgICAgICAgLy8gVHJpbSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgZnJvbSB0aGUgc3RyaW5nXHJcbiAgICAgICAgdmFyIHN0ciA9IGtvLnV0aWxzLnN0cmluZ1RyaW0ob2JqZWN0TGl0ZXJhbFN0cmluZyk7XHJcblxyXG4gICAgICAgIC8vIFRyaW0gYnJhY2VzICd7JyBzdXJyb3VuZGluZyB0aGUgd2hvbGUgb2JqZWN0IGxpdGVyYWxcclxuICAgICAgICBpZiAoc3RyLmNoYXJDb2RlQXQoMCkgPT09IDEyMykgc3RyID0gc3RyLnNsaWNlKDEsIC0xKTtcclxuXHJcbiAgICAgICAgLy8gU3BsaXQgaW50byB0b2tlbnNcclxuICAgICAgICB2YXIgcmVzdWx0ID0gW10sIHRva3MgPSBzdHIubWF0Y2goYmluZGluZ1Rva2VuKSwga2V5LCB2YWx1ZXMgPSBbXSwgZGVwdGggPSAwO1xyXG5cclxuICAgICAgICBpZiAodG9rcykge1xyXG4gICAgICAgICAgICAvLyBBcHBlbmQgYSBjb21tYSBzbyB0aGF0IHdlIGRvbid0IG5lZWQgYSBzZXBhcmF0ZSBjb2RlIGJsb2NrIHRvIGRlYWwgd2l0aCB0aGUgbGFzdCBpdGVtXHJcbiAgICAgICAgICAgIHRva3MucHVzaCgnLCcpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIHRvazsgdG9rID0gdG9rc1tpXTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHRvay5jaGFyQ29kZUF0KDApO1xyXG4gICAgICAgICAgICAgICAgLy8gQSBjb21tYSBzaWduYWxzIHRoZSBlbmQgb2YgYSBrZXkvdmFsdWUgcGFpciBpZiBkZXB0aCBpcyB6ZXJvXHJcbiAgICAgICAgICAgICAgICBpZiAoYyA9PT0gNDQpIHsgLy8gXCIsXCJcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVwdGggPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgoa2V5ICYmIHZhbHVlcy5sZW5ndGgpID8ge2tleToga2V5LCB2YWx1ZTogdmFsdWVzLmpvaW4oJycpfSA6IHsndW5rbm93bic6IGtleSB8fCB2YWx1ZXMuam9pbignJyl9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gZGVwdGggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gU2ltcGx5IHNraXAgdGhlIGNvbG9uIHRoYXQgc2VwYXJhdGVzIHRoZSBuYW1lIGFuZCB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSA1OCkgeyAvLyBcIjpcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGVwdGggJiYgIWtleSAmJiB2YWx1ZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHZhbHVlcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gQSBzZXQgb2Ygc2xhc2hlcyBpcyBpbml0aWFsbHkgbWF0Y2hlZCBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgYnV0IGNvdWxkIGJlIGRpdmlzaW9uXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09IDQ3ICYmIGkgJiYgdG9rLmxlbmd0aCA+IDEpIHsgIC8vIFwiL1wiXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTG9vayBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyB0b2tlbiB0byBkZXRlcm1pbmUgaWYgdGhlIHNsYXNoIGlzIGFjdHVhbGx5IGRpdmlzaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gdG9rc1tpLTFdLm1hdGNoKGRpdmlzaW9uTG9va0JlaGluZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoICYmICFrZXl3b3JkUmVnZXhMb29rQmVoaW5kW21hdGNoWzBdXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc2xhc2ggaXMgYWN0dWFsbHkgYSBkaXZpc2lvbiBwdW5jdHVhdG9yOyByZS1wYXJzZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdHJpbmcgKG5vdCBpbmNsdWRpbmcgdGhlIHNsYXNoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKHN0ci5pbmRleE9mKHRvaykgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rcyA9IHN0ci5tYXRjaChiaW5kaW5nVG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tzLnB1c2goJywnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250aW51ZSB3aXRoIGp1c3QgdGhlIHNsYXNoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvayA9ICcvJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBJbmNyZW1lbnQgZGVwdGggZm9yIHBhcmVudGhlc2VzLCBicmFjZXMsIGFuZCBicmFja2V0cyBzbyB0aGF0IGludGVyaW9yIGNvbW1hcyBhcmUgaWdub3JlZFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSA0MCB8fCBjID09PSAxMjMgfHwgYyA9PT0gOTEpIHsgLy8gJygnLCAneycsICdbJ1xyXG4gICAgICAgICAgICAgICAgICAgICsrZGVwdGg7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09IDQxIHx8IGMgPT09IDEyNSB8fCBjID09PSA5MykgeyAvLyAnKScsICd9JywgJ10nXHJcbiAgICAgICAgICAgICAgICAgICAgLS1kZXB0aDtcclxuICAgICAgICAgICAgICAgIC8vIFRoZSBrZXkgd2lsbCBiZSB0aGUgZmlyc3QgdG9rZW47IGlmIGl0J3MgYSBzdHJpbmcsIHRyaW0gdGhlIHF1b3Rlc1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgha2V5ICYmICF2YWx1ZXMubGVuZ3RoICYmIChjID09PSAzNCB8fCBjID09PSAzOSkpIHsgLy8gJ1wiJywgXCInXCJcclxuICAgICAgICAgICAgICAgICAgICB0b2sgPSB0b2suc2xpY2UoMSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFsdWVzLnB1c2godG9rKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFR3by13YXkgYmluZGluZ3MgaW5jbHVkZSBhIHdyaXRlIGZ1bmN0aW9uIHRoYXQgYWxsb3cgdGhlIGhhbmRsZXIgdG8gdXBkYXRlIHRoZSB2YWx1ZSBldmVuIGlmIGl0J3Mgbm90IGFuIG9ic2VydmFibGUuXHJcbiAgICB2YXIgdHdvV2F5QmluZGluZ3MgPSB7fTtcclxuXHJcbiAgICBmdW5jdGlvbiBwcmVQcm9jZXNzQmluZGluZ3MoYmluZGluZ3NTdHJpbmdPcktleVZhbHVlQXJyYXksIGJpbmRpbmdPcHRpb25zKSB7XHJcbiAgICAgICAgYmluZGluZ09wdGlvbnMgPSBiaW5kaW5nT3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc0tleVZhbHVlKGtleSwgdmFsKSB7XHJcbiAgICAgICAgICAgIHZhciB3cml0YWJsZVZhbDtcclxuICAgICAgICAgICAgZnVuY3Rpb24gY2FsbFByZXByb2Nlc3NIb29rKG9iaikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChvYmogJiYgb2JqWydwcmVwcm9jZXNzJ10pID8gKHZhbCA9IG9ialsncHJlcHJvY2VzcyddKHZhbCwga2V5LCBwcm9jZXNzS2V5VmFsdWUpKSA6IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFiaW5kaW5nUGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhbGxQcmVwcm9jZXNzSG9vayhrb1snZ2V0QmluZGluZ0hhbmRsZXInXShrZXkpKSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR3b1dheUJpbmRpbmdzW2tleV0gJiYgKHdyaXRhYmxlVmFsID0gZ2V0V3JpdGVhYmxlVmFsdWUodmFsKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBGb3IgdHdvLXdheSBiaW5kaW5ncywgcHJvdmlkZSBhIHdyaXRlIG1ldGhvZCBpbiBjYXNlIHRoZSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlzbid0IGEgd3JpdGFibGUgb2JzZXJ2YWJsZS5cclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUFjY2Vzc29yUmVzdWx0U3RyaW5ncy5wdXNoKFwiJ1wiICsga2V5ICsgXCInOmZ1bmN0aW9uKF96KXtcIiArIHdyaXRhYmxlVmFsICsgXCI9X3p9XCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFZhbHVlcyBhcmUgd3JhcHBlZCBpbiBhIGZ1bmN0aW9uIHNvIHRoYXQgZWFjaCB2YWx1ZSBjYW4gYmUgYWNjZXNzZWQgaW5kZXBlbmRlbnRseVxyXG4gICAgICAgICAgICBpZiAobWFrZVZhbHVlQWNjZXNzb3JzKSB7XHJcbiAgICAgICAgICAgICAgICB2YWwgPSAnZnVuY3Rpb24oKXtyZXR1cm4gJyArIHZhbCArICcgfSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzdWx0U3RyaW5ncy5wdXNoKFwiJ1wiICsga2V5ICsgXCInOlwiICsgdmFsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciByZXN1bHRTdHJpbmdzID0gW10sXHJcbiAgICAgICAgICAgIHByb3BlcnR5QWNjZXNzb3JSZXN1bHRTdHJpbmdzID0gW10sXHJcbiAgICAgICAgICAgIG1ha2VWYWx1ZUFjY2Vzc29ycyA9IGJpbmRpbmdPcHRpb25zWyd2YWx1ZUFjY2Vzc29ycyddLFxyXG4gICAgICAgICAgICBiaW5kaW5nUGFyYW1zID0gYmluZGluZ09wdGlvbnNbJ2JpbmRpbmdQYXJhbXMnXSxcclxuICAgICAgICAgICAga2V5VmFsdWVBcnJheSA9IHR5cGVvZiBiaW5kaW5nc1N0cmluZ09yS2V5VmFsdWVBcnJheSA9PT0gXCJzdHJpbmdcIiA/XHJcbiAgICAgICAgICAgICAgICBwYXJzZU9iamVjdExpdGVyYWwoYmluZGluZ3NTdHJpbmdPcktleVZhbHVlQXJyYXkpIDogYmluZGluZ3NTdHJpbmdPcktleVZhbHVlQXJyYXk7XHJcblxyXG4gICAgICAgIGtvLnV0aWxzLmFycmF5Rm9yRWFjaChrZXlWYWx1ZUFycmF5LCBmdW5jdGlvbihrZXlWYWx1ZSkge1xyXG4gICAgICAgICAgICBwcm9jZXNzS2V5VmFsdWUoa2V5VmFsdWUua2V5IHx8IGtleVZhbHVlWyd1bmtub3duJ10sIGtleVZhbHVlLnZhbHVlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHByb3BlcnR5QWNjZXNzb3JSZXN1bHRTdHJpbmdzLmxlbmd0aClcclxuICAgICAgICAgICAgcHJvY2Vzc0tleVZhbHVlKCdfa29fcHJvcGVydHlfd3JpdGVycycsIFwie1wiICsgcHJvcGVydHlBY2Nlc3NvclJlc3VsdFN0cmluZ3Muam9pbihcIixcIikgKyBcIiB9XCIpO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0U3RyaW5ncy5qb2luKFwiLFwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGJpbmRpbmdSZXdyaXRlVmFsaWRhdG9yczogW10sXHJcblxyXG4gICAgICAgIHR3b1dheUJpbmRpbmdzOiB0d29XYXlCaW5kaW5ncyxcclxuXHJcbiAgICAgICAgcGFyc2VPYmplY3RMaXRlcmFsOiBwYXJzZU9iamVjdExpdGVyYWwsXHJcblxyXG4gICAgICAgIHByZVByb2Nlc3NCaW5kaW5nczogcHJlUHJvY2Vzc0JpbmRpbmdzLFxyXG5cclxuICAgICAgICBrZXlWYWx1ZUFycmF5Q29udGFpbnNLZXk6IGZ1bmN0aW9uKGtleVZhbHVlQXJyYXksIGtleSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleVZhbHVlQXJyYXkubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5VmFsdWVBcnJheVtpXVsna2V5J10gPT0ga2V5KVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLy8gSW50ZXJuYWwsIHByaXZhdGUgS08gdXRpbGl0eSBmb3IgdXBkYXRpbmcgbW9kZWwgcHJvcGVydGllcyBmcm9tIHdpdGhpbiBiaW5kaW5nc1xyXG4gICAgICAgIC8vIHByb3BlcnR5OiAgICAgICAgICAgIElmIHRoZSBwcm9wZXJ0eSBiZWluZyB1cGRhdGVkIGlzIChvciBtaWdodCBiZSkgYW4gb2JzZXJ2YWJsZSwgcGFzcyBpdCBoZXJlXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgSWYgaXQgdHVybnMgb3V0IHRvIGJlIGEgd3JpdGFibGUgb2JzZXJ2YWJsZSwgaXQgd2lsbCBiZSB3cml0dGVuIHRvIGRpcmVjdGx5XHJcbiAgICAgICAgLy8gYWxsQmluZGluZ3M6ICAgICAgICAgQW4gb2JqZWN0IHdpdGggYSBnZXQgbWV0aG9kIHRvIHJldHJpZXZlIGJpbmRpbmdzIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBjb250ZXh0LlxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFRoaXMgd2lsbCBiZSBzZWFyY2hlZCBmb3IgYSAnX2tvX3Byb3BlcnR5X3dyaXRlcnMnIHByb3BlcnR5IGluIGNhc2UgeW91J3JlIHdyaXRpbmcgdG8gYSBub24tb2JzZXJ2YWJsZVxyXG4gICAgICAgIC8vIGtleTogICAgICAgICAgICAgICAgIFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHByb3BlcnR5IHRvIGJlIHdyaXR0ZW4uIEV4YW1wbGU6IGZvciB7IGhhc0ZvY3VzOiBteVZhbHVlIH0sIHdyaXRlIHRvICdteVZhbHVlJyBieSBzcGVjaWZ5aW5nIHRoZSBrZXkgJ2hhc0ZvY3VzJ1xyXG4gICAgICAgIC8vIHZhbHVlOiAgICAgICAgICAgICAgIFRoZSB2YWx1ZSB0byBiZSB3cml0dGVuXHJcbiAgICAgICAgLy8gY2hlY2tJZkRpZmZlcmVudDogICAgSWYgdHJ1ZSwgYW5kIGlmIHRoZSBwcm9wZXJ0eSBiZWluZyB3cml0dGVuIGlzIGEgd3JpdGFibGUgb2JzZXJ2YWJsZSwgdGhlIHZhbHVlIHdpbGwgb25seSBiZSB3cml0dGVuIGlmXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgaXQgaXMgIT09IGV4aXN0aW5nIHZhbHVlIG9uIHRoYXQgd3JpdGFibGUgb2JzZXJ2YWJsZVxyXG4gICAgICAgIHdyaXRlVmFsdWVUb1Byb3BlcnR5OiBmdW5jdGlvbihwcm9wZXJ0eSwgYWxsQmluZGluZ3MsIGtleSwgdmFsdWUsIGNoZWNrSWZEaWZmZXJlbnQpIHtcclxuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eSB8fCAha28uaXNPYnNlcnZhYmxlKHByb3BlcnR5KSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHByb3BXcml0ZXJzID0gYWxsQmluZGluZ3MuZ2V0KCdfa29fcHJvcGVydHlfd3JpdGVycycpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BXcml0ZXJzICYmIHByb3BXcml0ZXJzW2tleV0pXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcFdyaXRlcnNba2V5XSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoa28uaXNXcml0ZWFibGVPYnNlcnZhYmxlKHByb3BlcnR5KSAmJiAoIWNoZWNrSWZEaWZmZXJlbnQgfHwgcHJvcGVydHkucGVlaygpICE9PSB2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5KHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pKCk7XHJcblxyXG5rby5leHBvcnRTeW1ib2woJ2V4cHJlc3Npb25SZXdyaXRpbmcnLCBrby5leHByZXNzaW9uUmV3cml0aW5nKTtcclxua28uZXhwb3J0U3ltYm9sKCdleHByZXNzaW9uUmV3cml0aW5nLmJpbmRpbmdSZXdyaXRlVmFsaWRhdG9ycycsIGtvLmV4cHJlc3Npb25SZXdyaXRpbmcuYmluZGluZ1Jld3JpdGVWYWxpZGF0b3JzKTtcclxua28uZXhwb3J0U3ltYm9sKCdleHByZXNzaW9uUmV3cml0aW5nLnBhcnNlT2JqZWN0TGl0ZXJhbCcsIGtvLmV4cHJlc3Npb25SZXdyaXRpbmcucGFyc2VPYmplY3RMaXRlcmFsKTtcclxua28uZXhwb3J0U3ltYm9sKCdleHByZXNzaW9uUmV3cml0aW5nLnByZVByb2Nlc3NCaW5kaW5ncycsIGtvLmV4cHJlc3Npb25SZXdyaXRpbmcucHJlUHJvY2Vzc0JpbmRpbmdzKTtcclxuXHJcbi8vIE1ha2luZyBiaW5kaW5ncyBleHBsaWNpdGx5IGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBcInR3byB3YXlcIiBpc24ndCBpZGVhbCBpbiB0aGUgbG9uZyB0ZXJtIChpdCB3b3VsZCBiZSBiZXR0ZXIgaWZcclxuLy8gYWxsIGJpbmRpbmdzIGNvdWxkIHVzZSBhbiBvZmZpY2lhbCAncHJvcGVydHkgd3JpdGVyJyBBUEkgd2l0aG91dCBuZWVkaW5nIHRvIGRlY2xhcmUgdGhhdCB0aGV5IG1pZ2h0KS4gSG93ZXZlcixcclxuLy8gc2luY2UgdGhpcyBpcyBub3QsIGFuZCBoYXMgbmV2ZXIgYmVlbiwgYSBwdWJsaWMgQVBJIChfa29fcHJvcGVydHlfd3JpdGVycyB3YXMgbmV2ZXIgZG9jdW1lbnRlZCksIGl0J3MgYWNjZXB0YWJsZVxyXG4vLyBhcyBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgaW4gdGhlIHNob3J0IHRlcm0uXHJcbi8vIEZvciB0aG9zZSBkZXZlbG9wZXJzIHdobyByZWx5IG9uIF9rb19wcm9wZXJ0eV93cml0ZXJzIGluIHRoZWlyIGN1c3RvbSBiaW5kaW5ncywgd2UgZXhwb3NlIF90d29XYXlCaW5kaW5ncyBhcyBhblxyXG4vLyB1bmRvY3VtZW50ZWQgZmVhdHVyZSB0aGF0IG1ha2VzIGl0IHJlbGF0aXZlbHkgZWFzeSB0byB1cGdyYWRlIHRvIEtPIDMuMC4gSG93ZXZlciwgdGhpcyBpcyBzdGlsbCBub3QgYW4gb2ZmaWNpYWxcclxuLy8gcHVibGljIEFQSSwgYW5kIHdlIHJlc2VydmUgdGhlIHJpZ2h0IHRvIHJlbW92ZSBpdCBhdCBhbnkgdGltZSBpZiB3ZSBjcmVhdGUgYSByZWFsIHB1YmxpYyBwcm9wZXJ0eSB3cml0ZXJzIEFQSS5cclxua28uZXhwb3J0U3ltYm9sKCdleHByZXNzaW9uUmV3cml0aW5nLl90d29XYXlCaW5kaW5ncycsIGtvLmV4cHJlc3Npb25SZXdyaXRpbmcudHdvV2F5QmluZGluZ3MpO1xyXG5cclxuLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGRlZmluZSB0aGUgZm9sbG93aW5nIGFsaWFzZXMuIChQcmV2aW91c2x5LCB0aGVzZSBmdW5jdGlvbiBuYW1lcyB3ZXJlIG1pc2xlYWRpbmcgYmVjYXVzZVxyXG4vLyB0aGV5IHJlZmVycmVkIHRvIEpTT04gc3BlY2lmaWNhbGx5LCBldmVuIHRob3VnaCB0aGV5IGFjdHVhbGx5IHdvcmsgd2l0aCBhcmJpdHJhcnkgSmF2YVNjcmlwdCBvYmplY3QgbGl0ZXJhbCBleHByZXNzaW9ucy4pXHJcbmtvLmV4cG9ydFN5bWJvbCgnanNvbkV4cHJlc3Npb25SZXdyaXRpbmcnLCBrby5leHByZXNzaW9uUmV3cml0aW5nKTtcclxua28uZXhwb3J0U3ltYm9sKCdqc29uRXhwcmVzc2lvblJld3JpdGluZy5pbnNlcnRQcm9wZXJ0eUFjY2Vzc29yc0ludG9Kc29uJywga28uZXhwcmVzc2lvblJld3JpdGluZy5wcmVQcm9jZXNzQmluZGluZ3MpO1xyXG4oZnVuY3Rpb24oKSB7XHJcbiAgICAvLyBcIlZpcnR1YWwgZWxlbWVudHNcIiBpcyBhbiBhYnN0cmFjdGlvbiBvbiB0b3Agb2YgdGhlIHVzdWFsIERPTSBBUEkgd2hpY2ggdW5kZXJzdGFuZHMgdGhlIG5vdGlvbiB0aGF0IGNvbW1lbnQgbm9kZXNcclxuICAgIC8vIG1heSBiZSB1c2VkIHRvIHJlcHJlc2VudCBoaWVyYXJjaHkgKGluIGFkZGl0aW9uIHRvIHRoZSBET00ncyBuYXR1cmFsIGhpZXJhcmNoeSkuXHJcbiAgICAvLyBJZiB5b3UgY2FsbCB0aGUgRE9NLW1hbmlwdWxhdGluZyBmdW5jdGlvbnMgb24ga28udmlydHVhbEVsZW1lbnRzLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIHJlYWQgYW5kIHdyaXRlIHRoZSBzdGF0ZVxyXG4gICAgLy8gb2YgdGhhdCB2aXJ0dWFsIGhpZXJhcmNoeVxyXG4gICAgLy9cclxuICAgIC8vIFRoZSBwb2ludCBvZiBhbGwgdGhpcyBpcyB0byBzdXBwb3J0IGNvbnRhaW5lcmxlc3MgdGVtcGxhdGVzIChlLmcuLCA8IS0tIGtvIGZvcmVhY2g6c29tZUNvbGxlY3Rpb24gLS0+YmxhaDwhLS0gL2tvIC0tPilcclxuICAgIC8vIHdpdGhvdXQgaGF2aW5nIHRvIHNjYXR0ZXIgc3BlY2lhbCBjYXNlcyBhbGwgb3ZlciB0aGUgYmluZGluZyBhbmQgdGVtcGxhdGluZyBjb2RlLlxyXG5cclxuICAgIC8vIElFIDkgY2Fubm90IHJlbGlhYmx5IHJlYWQgdGhlIFwibm9kZVZhbHVlXCIgcHJvcGVydHkgb2YgYSBjb21tZW50IG5vZGUgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vU3RldmVTYW5kZXJzb24va25vY2tvdXQvaXNzdWVzLzE4NilcclxuICAgIC8vIGJ1dCBpdCBkb2VzIGdpdmUgdGhlbSBhIG5vbnN0YW5kYXJkIGFsdGVybmF0aXZlIHByb3BlcnR5IGNhbGxlZCBcInRleHRcIiB0aGF0IGl0IGNhbiByZWFkIHJlbGlhYmx5LiBPdGhlciBicm93c2VycyBkb24ndCBoYXZlIHRoYXQgcHJvcGVydHkuXHJcbiAgICAvLyBTbywgdXNlIG5vZGUudGV4dCB3aGVyZSBhdmFpbGFibGUsIGFuZCBub2RlLm5vZGVWYWx1ZSBlbHNld2hlcmVcclxuICAgIHZhciBjb21tZW50Tm9kZXNIYXZlVGV4dFByb3BlcnR5ID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlQ29tbWVudChcInRlc3RcIikudGV4dCA9PT0gXCI8IS0tdGVzdC0tPlwiO1xyXG5cclxuICAgIHZhciBzdGFydENvbW1lbnRSZWdleCA9IGNvbW1lbnROb2Rlc0hhdmVUZXh0UHJvcGVydHkgPyAvXjwhLS1cXHMqa28oPzpcXHMrKFtcXHNcXFNdKykpP1xccyotLT4kLyA6IC9eXFxzKmtvKD86XFxzKyhbXFxzXFxTXSspKT9cXHMqJC87XHJcbiAgICB2YXIgZW5kQ29tbWVudFJlZ2V4ID0gICBjb21tZW50Tm9kZXNIYXZlVGV4dFByb3BlcnR5ID8gL148IS0tXFxzKlxcL2tvXFxzKi0tPiQvIDogL15cXHMqXFwva29cXHMqJC87XHJcbiAgICB2YXIgaHRtbFRhZ3NXaXRoT3B0aW9uYWxseUNsb3NpbmdDaGlsZHJlbiA9IHsgJ3VsJzogdHJ1ZSwgJ29sJzogdHJ1ZSB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGlzU3RhcnRDb21tZW50KG5vZGUpIHtcclxuICAgICAgICByZXR1cm4gKG5vZGUubm9kZVR5cGUgPT0gOCkgJiYgc3RhcnRDb21tZW50UmVnZXgudGVzdChjb21tZW50Tm9kZXNIYXZlVGV4dFByb3BlcnR5ID8gbm9kZS50ZXh0IDogbm9kZS5ub2RlVmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGlzRW5kQ29tbWVudChub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIChub2RlLm5vZGVUeXBlID09IDgpICYmIGVuZENvbW1lbnRSZWdleC50ZXN0KGNvbW1lbnROb2Rlc0hhdmVUZXh0UHJvcGVydHkgPyBub2RlLnRleHQgOiBub2RlLm5vZGVWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0VmlydHVhbENoaWxkcmVuKHN0YXJ0Q29tbWVudCwgYWxsb3dVbmJhbGFuY2VkKSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnROb2RlID0gc3RhcnRDb21tZW50O1xyXG4gICAgICAgIHZhciBkZXB0aCA9IDE7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gW107XHJcbiAgICAgICAgd2hpbGUgKGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUubmV4dFNpYmxpbmcpIHtcclxuICAgICAgICAgICAgaWYgKGlzRW5kQ29tbWVudChjdXJyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIGRlcHRoLS07XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVwdGggPT09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGN1cnJlbnROb2RlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1N0YXJ0Q29tbWVudChjdXJyZW50Tm9kZSkpXHJcbiAgICAgICAgICAgICAgICBkZXB0aCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFsbG93VW5iYWxhbmNlZClcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgY2xvc2luZyBjb21tZW50IHRhZyB0byBtYXRjaDogXCIgKyBzdGFydENvbW1lbnQubm9kZVZhbHVlKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRNYXRjaGluZ0VuZENvbW1lbnQoc3RhcnRDb21tZW50LCBhbGxvd1VuYmFsYW5jZWQpIHtcclxuICAgICAgICB2YXIgYWxsVmlydHVhbENoaWxkcmVuID0gZ2V0VmlydHVhbENoaWxkcmVuKHN0YXJ0Q29tbWVudCwgYWxsb3dVbmJhbGFuY2VkKTtcclxuICAgICAgICBpZiAoYWxsVmlydHVhbENoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIGlmIChhbGxWaXJ0dWFsQ2hpbGRyZW4ubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiBhbGxWaXJ0dWFsQ2hpbGRyZW5bYWxsVmlydHVhbENoaWxkcmVuLmxlbmd0aCAtIDFdLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhcnRDb21tZW50Lm5leHRTaWJsaW5nO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gTXVzdCBoYXZlIG5vIG1hdGNoaW5nIGVuZCBjb21tZW50LCBhbmQgYWxsb3dVbmJhbGFuY2VkIGlzIHRydWVcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRVbmJhbGFuY2VkQ2hpbGRUYWdzKG5vZGUpIHtcclxuICAgICAgICAvLyBlLmcuLCBmcm9tIDxkaXY+T0s8L2Rpdj48IS0tIGtvIGJsYWggLS0+PHNwYW4+QW5vdGhlcjwvc3Bhbj4sIHJldHVybnM6IDwhLS0ga28gYmxhaCAtLT48c3Bhbj5Bbm90aGVyPC9zcGFuPlxyXG4gICAgICAgIC8vICAgICAgIGZyb20gPGRpdj5PSzwvZGl2PjwhLS0gL2tvIC0tPjwhLS0gL2tvIC0tPiwgICAgICAgICAgICAgcmV0dXJuczogPCEtLSAva28gLS0+PCEtLSAva28gLS0+XHJcbiAgICAgICAgdmFyIGNoaWxkTm9kZSA9IG5vZGUuZmlyc3RDaGlsZCwgY2FwdHVyZVJlbWFpbmluZyA9IG51bGw7XHJcbiAgICAgICAgaWYgKGNoaWxkTm9kZSkge1xyXG4gICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FwdHVyZVJlbWFpbmluZykgICAgICAgICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSBoaXQgYW4gdW5iYWxhbmNlZCBub2RlIGFuZCBhcmUgbm93IGp1c3Qgc2Nvb3BpbmcgdXAgYWxsIHN1YnNlcXVlbnQgbm9kZXNcclxuICAgICAgICAgICAgICAgICAgICBjYXB0dXJlUmVtYWluaW5nLnB1c2goY2hpbGROb2RlKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzU3RhcnRDb21tZW50KGNoaWxkTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmdFbmRDb21tZW50ID0gZ2V0TWF0Y2hpbmdFbmRDb21tZW50KGNoaWxkTm9kZSwgLyogYWxsb3dVbmJhbGFuY2VkOiAqLyB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmdFbmRDb21tZW50KSAgICAgICAgICAgICAvLyBJdCdzIGEgYmFsYW5jZWQgdGFnLCBzbyBza2lwIGltbWVkaWF0ZWx5IHRvIHRoZSBlbmQgb2YgdGhpcyB2aXJ0dWFsIHNldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBtYXRjaGluZ0VuZENvbW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlUmVtYWluaW5nID0gW2NoaWxkTm9kZV07IC8vIEl0J3MgdW5iYWxhbmNlZCwgc28gc3RhcnQgY2FwdHVyaW5nIGZyb20gdGhpcyBwb2ludFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0VuZENvbW1lbnQoY2hpbGROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcHR1cmVSZW1haW5pbmcgPSBbY2hpbGROb2RlXTsgICAgIC8vIEl0J3MgdW5iYWxhbmNlZCAoaWYgaXQgd2Fzbid0LCB3ZSdkIGhhdmUgc2tpcHBlZCBvdmVyIGl0IGFscmVhZHkpLCBzbyBzdGFydCBjYXB0dXJpbmdcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSB3aGlsZSAoY2hpbGROb2RlID0gY2hpbGROb2RlLm5leHRTaWJsaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhcHR1cmVSZW1haW5pbmc7XHJcbiAgICB9XHJcblxyXG4gICAga28udmlydHVhbEVsZW1lbnRzID0ge1xyXG4gICAgICAgIGFsbG93ZWRCaW5kaW5nczoge30sXHJcblxyXG4gICAgICAgIGNoaWxkTm9kZXM6IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzU3RhcnRDb21tZW50KG5vZGUpID8gZ2V0VmlydHVhbENoaWxkcmVuKG5vZGUpIDogbm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGVtcHR5Tm9kZTogZnVuY3Rpb24obm9kZSkge1xyXG4gICAgICAgICAgICBpZiAoIWlzU3RhcnRDb21tZW50KG5vZGUpKVxyXG4gICAgICAgICAgICAgICAga28udXRpbHMuZW1wdHlEb21Ob2RlKG5vZGUpO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciB2aXJ0dWFsQ2hpbGRyZW4gPSBrby52aXJ0dWFsRWxlbWVudHMuY2hpbGROb2Rlcyhub2RlKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdmlydHVhbENoaWxkcmVuLmxlbmd0aDsgaSA8IGo7IGkrKylcclxuICAgICAgICAgICAgICAgICAgICBrby5yZW1vdmVOb2RlKHZpcnR1YWxDaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXREb21Ob2RlQ2hpbGRyZW46IGZ1bmN0aW9uKG5vZGUsIGNoaWxkTm9kZXMpIHtcclxuICAgICAgICAgICAgaWYgKCFpc1N0YXJ0Q29tbWVudChub2RlKSlcclxuICAgICAgICAgICAgICAgIGtvLnV0aWxzLnNldERvbU5vZGVDaGlsZHJlbihub2RlLCBjaGlsZE5vZGVzKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBrby52aXJ0dWFsRWxlbWVudHMuZW1wdHlOb2RlKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGVuZENvbW1lbnROb2RlID0gbm9kZS5uZXh0U2libGluZzsgLy8gTXVzdCBiZSB0aGUgbmV4dCBzaWJsaW5nLCBhcyB3ZSBqdXN0IGVtcHRpZWQgdGhlIGNoaWxkcmVuXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgajsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICAgIGVuZENvbW1lbnROb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkTm9kZXNbaV0sIGVuZENvbW1lbnROb2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHByZXBlbmQ6IGZ1bmN0aW9uKGNvbnRhaW5lck5vZGUsIG5vZGVUb1ByZXBlbmQpIHtcclxuICAgICAgICAgICAgaWYgKCFpc1N0YXJ0Q29tbWVudChjb250YWluZXJOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lck5vZGUuZmlyc3RDaGlsZClcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJOb2RlLmluc2VydEJlZm9yZShub2RlVG9QcmVwZW5kLCBjb250YWluZXJOb2RlLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lck5vZGUuYXBwZW5kQ2hpbGQobm9kZVRvUHJlcGVuZCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTdGFydCBjb21tZW50cyBtdXN0IGFsd2F5cyBoYXZlIGEgcGFyZW50IGFuZCBhdCBsZWFzdCBvbmUgZm9sbG93aW5nIHNpYmxpbmcgKHRoZSBlbmQgY29tbWVudClcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lck5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZVRvUHJlcGVuZCwgY29udGFpbmVyTm9kZS5uZXh0U2libGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBpbnNlcnRBZnRlcjogZnVuY3Rpb24oY29udGFpbmVyTm9kZSwgbm9kZVRvSW5zZXJ0LCBpbnNlcnRBZnRlck5vZGUpIHtcclxuICAgICAgICAgICAgaWYgKCFpbnNlcnRBZnRlck5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGtvLnZpcnR1YWxFbGVtZW50cy5wcmVwZW5kKGNvbnRhaW5lck5vZGUsIG5vZGVUb0luc2VydCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzU3RhcnRDb21tZW50KGNvbnRhaW5lck5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbnNlcnQgYWZ0ZXIgaW5zZXJ0aW9uIHBvaW50XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QWZ0ZXJOb2RlLm5leHRTaWJsaW5nKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lck5vZGUuaW5zZXJ0QmVmb3JlKG5vZGVUb0luc2VydCwgaW5zZXJ0QWZ0ZXJOb2RlLm5leHRTaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJOb2RlLmFwcGVuZENoaWxkKG5vZGVUb0luc2VydCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBDaGlsZHJlbiBvZiBzdGFydCBjb21tZW50cyBtdXN0IGFsd2F5cyBoYXZlIGEgcGFyZW50IGFuZCBhdCBsZWFzdCBvbmUgZm9sbG93aW5nIHNpYmxpbmcgKHRoZSBlbmQgY29tbWVudClcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lck5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZVRvSW5zZXJ0LCBpbnNlcnRBZnRlck5vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgZmlyc3RDaGlsZDogZnVuY3Rpb24obm9kZSkge1xyXG4gICAgICAgICAgICBpZiAoIWlzU3RhcnRDb21tZW50KG5vZGUpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgaWYgKCFub2RlLm5leHRTaWJsaW5nIHx8IGlzRW5kQ29tbWVudChub2RlLm5leHRTaWJsaW5nKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBuZXh0U2libGluZzogZnVuY3Rpb24obm9kZSkge1xyXG4gICAgICAgICAgICBpZiAoaXNTdGFydENvbW1lbnQobm9kZSkpXHJcbiAgICAgICAgICAgICAgICBub2RlID0gZ2V0TWF0Y2hpbmdFbmRDb21tZW50KG5vZGUpO1xyXG4gICAgICAgICAgICBpZiAobm9kZS5uZXh0U2libGluZyAmJiBpc0VuZENvbW1lbnQobm9kZS5uZXh0U2libGluZykpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgaGFzQmluZGluZ1ZhbHVlOiBpc1N0YXJ0Q29tbWVudCxcclxuXHJcbiAgICAgICAgdmlydHVhbE5vZGVCaW5kaW5nVmFsdWU6IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICAgICAgdmFyIHJlZ2V4TWF0Y2ggPSAoY29tbWVudE5vZGVzSGF2ZVRleHRQcm9wZXJ0eSA/IG5vZGUudGV4dCA6IG5vZGUubm9kZVZhbHVlKS5tYXRjaChzdGFydENvbW1lbnRSZWdleCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWdleE1hdGNoID8gcmVnZXhNYXRjaFsxXSA6IG51bGw7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgbm9ybWFsaXNlVmlydHVhbEVsZW1lbnREb21TdHJ1Y3R1cmU6IGZ1bmN0aW9uKGVsZW1lbnRWZXJpZmllZCkge1xyXG4gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vU3RldmVTYW5kZXJzb24va25vY2tvdXQvaXNzdWVzLzE1NVxyXG4gICAgICAgICAgICAvLyAoSUUgPD0gOCBvciBJRSA5IHF1aXJrcyBtb2RlIHBhcnNlcyB5b3VyIEhUTUwgd2VpcmRseSwgdHJlYXRpbmcgY2xvc2luZyA8L2xpPiB0YWdzIGFzIGlmIHRoZXkgZG9uJ3QgZXhpc3QsIHRoZXJlYnkgbW92aW5nIGNvbW1lbnQgbm9kZXNcclxuICAgICAgICAgICAgLy8gdGhhdCBhcmUgZGlyZWN0IGRlc2NlbmRhbnRzIG9mIDx1bD4gaW50byB0aGUgcHJlY2VkaW5nIDxsaT4pXHJcbiAgICAgICAgICAgIGlmICghaHRtbFRhZ3NXaXRoT3B0aW9uYWxseUNsb3NpbmdDaGlsZHJlbltrby51dGlscy50YWdOYW1lTG93ZXIoZWxlbWVudFZlcmlmaWVkKV0pXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAvLyBTY2FuIGltbWVkaWF0ZSBjaGlsZHJlbiB0byBzZWUgaWYgdGhleSBjb250YWluIHVuYmFsYW5jZWQgY29tbWVudCB0YWdzLiBJZiB0aGV5IGRvLCB0aG9zZSBjb21tZW50IHRhZ3NcclxuICAgICAgICAgICAgLy8gbXVzdCBiZSBpbnRlbmRlZCB0byBhcHBlYXIgKmFmdGVyKiB0aGF0IGNoaWxkLCBzbyBtb3ZlIHRoZW0gdGhlcmUuXHJcbiAgICAgICAgICAgIHZhciBjaGlsZE5vZGUgPSBlbGVtZW50VmVyaWZpZWQuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuYmFsYW5jZWRUYWdzID0gZ2V0VW5iYWxhbmNlZENoaWxkVGFncyhjaGlsZE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5iYWxhbmNlZFRhZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeCB1cCB0aGUgRE9NIGJ5IG1vdmluZyB0aGUgdW5iYWxhbmNlZCB0YWdzIHRvIHdoZXJlIHRoZXkgbW9zdCBsaWtlbHkgd2VyZSBpbnRlbmRlZCB0byBiZSBwbGFjZWQgLSAqYWZ0ZXIqIHRoZSBjaGlsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGVUb0luc2VydEJlZm9yZSA9IGNoaWxkTm9kZS5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5iYWxhbmNlZFRhZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZVRvSW5zZXJ0QmVmb3JlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50VmVyaWZpZWQuaW5zZXJ0QmVmb3JlKHVuYmFsYW5jZWRUYWdzW2ldLCBub2RlVG9JbnNlcnRCZWZvcmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFZlcmlmaWVkLmFwcGVuZENoaWxkKHVuYmFsYW5jZWRUYWdzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5uZXh0U2libGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59KSgpO1xyXG5rby5leHBvcnRTeW1ib2woJ3ZpcnR1YWxFbGVtZW50cycsIGtvLnZpcnR1YWxFbGVtZW50cyk7XHJcbmtvLmV4cG9ydFN5bWJvbCgndmlydHVhbEVsZW1lbnRzLmFsbG93ZWRCaW5kaW5ncycsIGtvLnZpcnR1YWxFbGVtZW50cy5hbGxvd2VkQmluZGluZ3MpO1xyXG5rby5leHBvcnRTeW1ib2woJ3ZpcnR1YWxFbGVtZW50cy5lbXB0eU5vZGUnLCBrby52aXJ0dWFsRWxlbWVudHMuZW1wdHlOb2RlKTtcclxuLy9rby5leHBvcnRTeW1ib2woJ3ZpcnR1YWxFbGVtZW50cy5maXJzdENoaWxkJywga28udmlydHVhbEVsZW1lbnRzLmZpcnN0Q2hpbGQpOyAgICAgLy8gZmlyc3RDaGlsZCBpcyBub3QgbWluaWZpZWRcclxua28uZXhwb3J0U3ltYm9sKCd2aXJ0dWFsRWxlbWVudHMuaW5zZXJ0QWZ0ZXInLCBrby52aXJ0dWFsRWxlbWVudHMuaW5zZXJ0QWZ0ZXIpO1xyXG4vL2tvLmV4cG9ydFN5bWJvbCgndmlydHVhbEVsZW1lbnRzLm5leHRTaWJsaW5nJywga28udmlydHVhbEVsZW1lbnRzLm5leHRTaWJsaW5nKTsgICAvLyBuZXh0U2libGluZyBpcyBub3QgbWluaWZpZWRcclxua28uZXhwb3J0U3ltYm9sKCd2aXJ0dWFsRWxlbWVudHMucHJlcGVuZCcsIGtvLnZpcnR1YWxFbGVtZW50cy5wcmVwZW5kKTtcclxua28uZXhwb3J0U3ltYm9sKCd2aXJ0dWFsRWxlbWVudHMuc2V0RG9tTm9kZUNoaWxkcmVuJywga28udmlydHVhbEVsZW1lbnRzLnNldERvbU5vZGVDaGlsZHJlbik7XHJcbihmdW5jdGlvbigpIHtcclxuICAgIHZhciBkZWZhdWx0QmluZGluZ0F0dHJpYnV0ZU5hbWUgPSBcImRhdGEtYmluZFwiO1xyXG5cclxuICAgIGtvLmJpbmRpbmdQcm92aWRlciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuYmluZGluZ0NhY2hlID0ge307XHJcbiAgICB9O1xyXG5cclxuICAgIGtvLnV0aWxzLmV4dGVuZChrby5iaW5kaW5nUHJvdmlkZXIucHJvdG90eXBlLCB7XHJcbiAgICAgICAgJ25vZGVIYXNCaW5kaW5ncyc6IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIEVsZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoZGVmYXVsdEJpbmRpbmdBdHRyaWJ1dGVOYW1lKSAhPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IGtvLmNvbXBvbmVudHNbJ2dldENvbXBvbmVudE5hbWVGb3JOb2RlJ10obm9kZSk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDg6IC8vIENvbW1lbnQgbm9kZVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrby52aXJ0dWFsRWxlbWVudHMuaGFzQmluZGluZ1ZhbHVlKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgJ2dldEJpbmRpbmdzJzogZnVuY3Rpb24obm9kZSwgYmluZGluZ0NvbnRleHQpIHtcclxuICAgICAgICAgICAgdmFyIGJpbmRpbmdzU3RyaW5nID0gdGhpc1snZ2V0QmluZGluZ3NTdHJpbmcnXShub2RlLCBiaW5kaW5nQ29udGV4dCksXHJcbiAgICAgICAgICAgICAgICBwYXJzZWRCaW5kaW5ncyA9IGJpbmRpbmdzU3RyaW5nID8gdGhpc1sncGFyc2VCaW5kaW5nc1N0cmluZyddKGJpbmRpbmdzU3RyaW5nLCBiaW5kaW5nQ29udGV4dCwgbm9kZSkgOiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4ga28uY29tcG9uZW50cy5hZGRCaW5kaW5nc0ZvckN1c3RvbUVsZW1lbnQocGFyc2VkQmluZGluZ3MsIG5vZGUsIGJpbmRpbmdDb250ZXh0LCAvKiB2YWx1ZUFjY2Vzc29ycyAqLyBmYWxzZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgJ2dldEJpbmRpbmdBY2Nlc3NvcnMnOiBmdW5jdGlvbihub2RlLCBiaW5kaW5nQ29udGV4dCkge1xyXG4gICAgICAgICAgICB2YXIgYmluZGluZ3NTdHJpbmcgPSB0aGlzWydnZXRCaW5kaW5nc1N0cmluZyddKG5vZGUsIGJpbmRpbmdDb250ZXh0KSxcclxuICAgICAgICAgICAgICAgIHBhcnNlZEJpbmRpbmdzID0gYmluZGluZ3NTdHJpbmcgPyB0aGlzWydwYXJzZUJpbmRpbmdzU3RyaW5nJ10oYmluZGluZ3NTdHJpbmcsIGJpbmRpbmdDb250ZXh0LCBub2RlLCB7ICd2YWx1ZUFjY2Vzc29ycyc6IHRydWUgfSkgOiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4ga28uY29tcG9uZW50cy5hZGRCaW5kaW5nc0ZvckN1c3RvbUVsZW1lbnQocGFyc2VkQmluZGluZ3MsIG5vZGUsIGJpbmRpbmdDb250ZXh0LCAvKiB2YWx1ZUFjY2Vzc29ycyAqLyB0cnVlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoaXMgZGVmYXVsdCBwcm92aWRlci5cclxuICAgICAgICAvLyBJdCdzIG5vdCBwYXJ0IG9mIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmb3IgYSBnZW5lcmFsIGJpbmRpbmcgcHJvdmlkZXIuXHJcbiAgICAgICAgJ2dldEJpbmRpbmdzU3RyaW5nJzogZnVuY3Rpb24obm9kZSwgYmluZGluZ0NvbnRleHQpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBub2RlLmdldEF0dHJpYnV0ZShkZWZhdWx0QmluZGluZ0F0dHJpYnV0ZU5hbWUpOyAgIC8vIEVsZW1lbnRcclxuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIGtvLnZpcnR1YWxFbGVtZW50cy52aXJ0dWFsTm9kZUJpbmRpbmdWYWx1ZShub2RlKTsgLy8gQ29tbWVudCBub2RlXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gaXMgb25seSB1c2VkIGludGVybmFsbHkgYnkgdGhpcyBkZWZhdWx0IHByb3ZpZGVyLlxyXG4gICAgICAgIC8vIEl0J3Mgbm90IHBhcnQgb2YgdGhlIGludGVyZmFjZSBkZWZpbml0aW9uIGZvciBhIGdlbmVyYWwgYmluZGluZyBwcm92aWRlci5cclxuICAgICAgICAncGFyc2VCaW5kaW5nc1N0cmluZyc6IGZ1bmN0aW9uKGJpbmRpbmdzU3RyaW5nLCBiaW5kaW5nQ29udGV4dCwgbm9kZSwgb3B0aW9ucykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJpbmRpbmdGdW5jdGlvbiA9IGNyZWF0ZUJpbmRpbmdzU3RyaW5nRXZhbHVhdG9yVmlhQ2FjaGUoYmluZGluZ3NTdHJpbmcsIHRoaXMuYmluZGluZ0NhY2hlLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBiaW5kaW5nRnVuY3Rpb24oYmluZGluZ0NvbnRleHQsIG5vZGUpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICAgICAgZXgubWVzc2FnZSA9IFwiVW5hYmxlIHRvIHBhcnNlIGJpbmRpbmdzLlxcbkJpbmRpbmdzIHZhbHVlOiBcIiArIGJpbmRpbmdzU3RyaW5nICsgXCJcXG5NZXNzYWdlOiBcIiArIGV4Lm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGtvLmJpbmRpbmdQcm92aWRlclsnaW5zdGFuY2UnXSA9IG5ldyBrby5iaW5kaW5nUHJvdmlkZXIoKTtcclxuXHJcbiAgICBmdW5jdGlvbiBjcmVhdGVCaW5kaW5nc1N0cmluZ0V2YWx1YXRvclZpYUNhY2hlKGJpbmRpbmdzU3RyaW5nLCBjYWNoZSwgb3B0aW9ucykge1xyXG4gICAgICAgIHZhciBjYWNoZUtleSA9IGJpbmRpbmdzU3RyaW5nICsgKG9wdGlvbnMgJiYgb3B0aW9uc1sndmFsdWVBY2Nlc3NvcnMnXSB8fCAnJyk7XHJcbiAgICAgICAgcmV0dXJuIGNhY2hlW2NhY2hlS2V5XVxyXG4gICAgICAgICAgICB8fCAoY2FjaGVbY2FjaGVLZXldID0gY3JlYXRlQmluZGluZ3NTdHJpbmdFdmFsdWF0b3IoYmluZGluZ3NTdHJpbmcsIG9wdGlvbnMpKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjcmVhdGVCaW5kaW5nc1N0cmluZ0V2YWx1YXRvcihiaW5kaW5nc1N0cmluZywgb3B0aW9ucykge1xyXG4gICAgICAgIC8vIEJ1aWxkIHRoZSBzb3VyY2UgZm9yIGEgZnVuY3Rpb24gdGhhdCBldmFsdWF0ZXMgXCJleHByZXNzaW9uXCJcclxuICAgICAgICAvLyBGb3IgZWFjaCBzY29wZSB2YXJpYWJsZSwgYWRkIGFuIGV4dHJhIGxldmVsIG9mIFwid2l0aFwiIG5lc3RpbmdcclxuICAgICAgICAvLyBFeGFtcGxlIHJlc3VsdDogd2l0aChzYzEpIHsgd2l0aChzYzApIHsgcmV0dXJuIChleHByZXNzaW9uKSB9IH1cclxuICAgICAgICB2YXIgcmV3cml0dGVuQmluZGluZ3MgPSBrby5leHByZXNzaW9uUmV3cml0aW5nLnByZVByb2Nlc3NCaW5kaW5ncyhiaW5kaW5nc1N0cmluZywgb3B0aW9ucyksXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uQm9keSA9IFwid2l0aCgkY29udGV4dCl7d2l0aCgkZGF0YXx8e30pe3JldHVybntcIiArIHJld3JpdHRlbkJpbmRpbmdzICsgXCJ9fX1cIjtcclxuICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKFwiJGNvbnRleHRcIiwgXCIkZWxlbWVudFwiLCBmdW5jdGlvbkJvZHkpO1xyXG4gICAgfVxyXG59KSgpO1xyXG5cclxua28uZXhwb3J0U3ltYm9sKCdiaW5kaW5nUHJvdmlkZXInLCBrby5iaW5kaW5nUHJvdmlkZXIpO1xyXG4oZnVuY3Rpb24gKCkge1xyXG4gICAga28uYmluZGluZ0hhbmRsZXJzID0ge307XHJcblxyXG4gICAgLy8gVGhlIGZvbGxvd2luZyBlbGVtZW50IHR5cGVzIHdpbGwgbm90IGJlIHJlY3Vyc2VkIGludG8gZHVyaW5nIGJpbmRpbmcuXHJcbiAgICB2YXIgYmluZGluZ0RvZXNOb3RSZWN1cnNlSW50b0VsZW1lbnRUeXBlcyA9IHtcclxuICAgICAgICAvLyBEb24ndCB3YW50IGJpbmRpbmdzIHRoYXQgb3BlcmF0ZSBvbiB0ZXh0IG5vZGVzIHRvIG11dGF0ZSA8c2NyaXB0PiBhbmQgPHRleHRhcmVhPiBjb250ZW50cyxcclxuICAgICAgICAvLyBiZWNhdXNlIGl0J3MgdW5leHBlY3RlZCBhbmQgYSBwb3RlbnRpYWwgWFNTIGlzc3VlLlxyXG4gICAgICAgIC8vIEFsc28gYmluZGluZ3Mgc2hvdWxkIG5vdCBvcGVyYXRlIG9uIDx0ZW1wbGF0ZT4gZWxlbWVudHMgc2luY2UgdGhpcyBicmVha3MgaW4gSW50ZXJuZXQgRXhwbG9yZXJcclxuICAgICAgICAvLyBhbmQgYmVjYXVzZSBzdWNoIGVsZW1lbnRzJyBjb250ZW50cyBhcmUgYWx3YXlzIGludGVuZGVkIHRvIGJlIGJvdW5kIGluIGEgZGlmZmVyZW50IGNvbnRleHRcclxuICAgICAgICAvLyBmcm9tIHdoZXJlIHRoZXkgYXBwZWFyIGluIHRoZSBkb2N1bWVudC5cclxuICAgICAgICAnc2NyaXB0JzogdHJ1ZSxcclxuICAgICAgICAndGV4dGFyZWEnOiB0cnVlLFxyXG4gICAgICAgICd0ZW1wbGF0ZSc6IHRydWVcclxuICAgIH07XHJcblxyXG4gICAgLy8gVXNlIGFuIG92ZXJyaWRhYmxlIG1ldGhvZCBmb3IgcmV0cmlldmluZyBiaW5kaW5nIGhhbmRsZXJzIHNvIHRoYXQgYSBwbHVnaW5zIG1heSBzdXBwb3J0IGR5bmFtaWNhbGx5IGNyZWF0ZWQgaGFuZGxlcnNcclxuICAgIGtvWydnZXRCaW5kaW5nSGFuZGxlciddID0gZnVuY3Rpb24oYmluZGluZ0tleSkge1xyXG4gICAgICAgIHJldHVybiBrby5iaW5kaW5nSGFuZGxlcnNbYmluZGluZ0tleV07XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFRoZSBrby5iaW5kaW5nQ29udGV4dCBjb25zdHJ1Y3RvciBpcyBvbmx5IGNhbGxlZCBkaXJlY3RseSB0byBjcmVhdGUgdGhlIHJvb3QgY29udGV4dC4gRm9yIGNoaWxkXHJcbiAgICAvLyBjb250ZXh0cywgdXNlIGJpbmRpbmdDb250ZXh0LmNyZWF0ZUNoaWxkQ29udGV4dCBvciBiaW5kaW5nQ29udGV4dC5leHRlbmQuXHJcbiAgICBrby5iaW5kaW5nQ29udGV4dCA9IGZ1bmN0aW9uKGRhdGFJdGVtT3JBY2Nlc3NvciwgcGFyZW50Q29udGV4dCwgZGF0YUl0ZW1BbGlhcywgZXh0ZW5kQ2FsbGJhY2spIHtcclxuXHJcbiAgICAgICAgLy8gVGhlIGJpbmRpbmcgY29udGV4dCBvYmplY3QgaW5jbHVkZXMgc3RhdGljIHByb3BlcnRpZXMgZm9yIHRoZSBjdXJyZW50LCBwYXJlbnQsIGFuZCByb290IHZpZXcgbW9kZWxzLlxyXG4gICAgICAgIC8vIElmIGEgdmlldyBtb2RlbCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gYW4gb2JzZXJ2YWJsZSwgdGhlIGNvcnJlc3BvbmRpbmcgYmluZGluZyBjb250ZXh0IG9iamVjdCwgYW5kXHJcbiAgICAgICAgLy8gYW55IGNoaWxkIGNvbnRleHRzLCBtdXN0IGJlIHVwZGF0ZWQgd2hlbiB0aGUgdmlldyBtb2RlbCBpcyBjaGFuZ2VkLlxyXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQoKSB7XHJcbiAgICAgICAgICAgIC8vIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBjb250ZXh0IHdpbGwgZGlyZWN0bHkgZ2V0IGEgdmlldyBtb2RlbCBvYmplY3QsIGJ1dCBpZiBhIGZ1bmN0aW9uIGlzIGdpdmVuLFxyXG4gICAgICAgICAgICAvLyB3ZSBjYWxsIHRoZSBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgdmlldyBtb2RlbC4gSWYgdGhlIGZ1bmN0aW9uIGFjY2Vzc2VzIGFueSBvYnNlcnZhYmxlcyBvciByZXR1cm5zXHJcbiAgICAgICAgICAgIC8vIGFuIG9ic2VydmFibGUsIHRoZSBkZXBlbmRlbmN5IGlzIHRyYWNrZWQsIGFuZCB0aG9zZSBvYnNlcnZhYmxlcyBjYW4gbGF0ZXIgY2F1c2UgdGhlIGJpbmRpbmdcclxuICAgICAgICAgICAgLy8gY29udGV4dCB0byBiZSB1cGRhdGVkLlxyXG4gICAgICAgICAgICB2YXIgZGF0YUl0ZW1Pck9ic2VydmFibGUgPSBpc0Z1bmMgPyBkYXRhSXRlbU9yQWNjZXNzb3IoKSA6IGRhdGFJdGVtT3JBY2Nlc3NvcixcclxuICAgICAgICAgICAgICAgIGRhdGFJdGVtID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShkYXRhSXRlbU9yT2JzZXJ2YWJsZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocGFyZW50Q29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgLy8gV2hlbiBhIFwicGFyZW50XCIgY29udGV4dCBpcyBnaXZlbiwgcmVnaXN0ZXIgYSBkZXBlbmRlbmN5IG9uIHRoZSBwYXJlbnQgY29udGV4dC4gVGh1cyB3aGVuZXZlciB0aGVcclxuICAgICAgICAgICAgICAgIC8vIHBhcmVudCBjb250ZXh0IGlzIHVwZGF0ZWQsIHRoaXMgY29udGV4dCB3aWxsIGFsc28gYmUgdXBkYXRlZC5cclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRDb250ZXh0Ll9zdWJzY3JpYmFibGUpXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29udGV4dC5fc3Vic2NyaWJhYmxlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29weSAkcm9vdCBhbmQgYW55IGN1c3RvbSBwcm9wZXJ0aWVzIGZyb20gdGhlIHBhcmVudCBjb250ZXh0XHJcbiAgICAgICAgICAgICAgICBrby51dGlscy5leHRlbmQoc2VsZiwgcGFyZW50Q29udGV4dCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgYWJvdmUgY29weSBvdmVyd3JpdGVzIG91ciBvd24gcHJvcGVydGllcywgd2UgbmVlZCB0byByZXNldCB0aGVtLlxyXG4gICAgICAgICAgICAgICAgLy8gRHVyaW5nIHRoZSBmaXJzdCBleGVjdXRpb24sIFwic3Vic2NyaWJhYmxlXCIgaXNuJ3Qgc2V0LCBzbyBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHVwZGF0ZSB0aGVuLlxyXG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N1YnNjcmliYWJsZSA9IHN1YnNjcmliYWJsZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNlbGZbJyRwYXJlbnRzJ10gPSBbXTtcclxuICAgICAgICAgICAgICAgIHNlbGZbJyRyb290J10gPSBkYXRhSXRlbTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBFeHBvcnQgJ2tvJyBpbiB0aGUgYmluZGluZyBjb250ZXh0IHNvIGl0IHdpbGwgYmUgYXZhaWxhYmxlIGluIGJpbmRpbmdzIGFuZCB0ZW1wbGF0ZXNcclxuICAgICAgICAgICAgICAgIC8vIGV2ZW4gaWYgJ2tvJyBpc24ndCBleHBvcnRlZCBhcyBhIGdsb2JhbCwgc3VjaCBhcyB3aGVuIHVzaW5nIGFuIEFNRCBsb2FkZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL1N0ZXZlU2FuZGVyc29uL2tub2Nrb3V0L2lzc3Vlcy80OTBcclxuICAgICAgICAgICAgICAgIHNlbGZbJ2tvJ10gPSBrbztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZWxmWyckcmF3RGF0YSddID0gZGF0YUl0ZW1Pck9ic2VydmFibGU7XHJcbiAgICAgICAgICAgIHNlbGZbJyRkYXRhJ10gPSBkYXRhSXRlbTtcclxuICAgICAgICAgICAgaWYgKGRhdGFJdGVtQWxpYXMpXHJcbiAgICAgICAgICAgICAgICBzZWxmW2RhdGFJdGVtQWxpYXNdID0gZGF0YUl0ZW07XHJcblxyXG4gICAgICAgICAgICAvLyBUaGUgZXh0ZW5kQ2FsbGJhY2sgZnVuY3Rpb24gaXMgcHJvdmlkZWQgd2hlbiBjcmVhdGluZyBhIGNoaWxkIGNvbnRleHQgb3IgZXh0ZW5kaW5nIGEgY29udGV4dC5cclxuICAgICAgICAgICAgLy8gSXQgaGFuZGxlcyB0aGUgc3BlY2lmaWMgYWN0aW9ucyBuZWVkZWQgdG8gZmluaXNoIHNldHRpbmcgdXAgdGhlIGJpbmRpbmcgY29udGV4dC4gQWN0aW9ucyBpbiB0aGlzXHJcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGNvdWxkIGFsc28gYWRkIGRlcGVuZGVuY2llcyB0byB0aGlzIGJpbmRpbmcgY29udGV4dC5cclxuICAgICAgICAgICAgaWYgKGV4dGVuZENhbGxiYWNrKVxyXG4gICAgICAgICAgICAgICAgZXh0ZW5kQ2FsbGJhY2soc2VsZiwgcGFyZW50Q29udGV4dCwgZGF0YUl0ZW0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHNlbGZbJyRkYXRhJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIGRpc3Bvc2VXaGVuKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbm9kZXMgJiYgIWtvLnV0aWxzLmFueURvbU5vZGVJc0F0dGFjaGVkVG9Eb2N1bWVudChub2Rlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgICAgIGlzRnVuYyA9IHR5cGVvZihkYXRhSXRlbU9yQWNjZXNzb3IpID09IFwiZnVuY3Rpb25cIiAmJiAha28uaXNPYnNlcnZhYmxlKGRhdGFJdGVtT3JBY2Nlc3NvciksXHJcbiAgICAgICAgICAgIG5vZGVzLFxyXG4gICAgICAgICAgICBzdWJzY3JpYmFibGUgPSBrby5kZXBlbmRlbnRPYnNlcnZhYmxlKHVwZGF0ZUNvbnRleHQsIG51bGwsIHsgZGlzcG9zZVdoZW46IGRpc3Bvc2VXaGVuLCBkaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQ6IHRydWUgfSk7XHJcblxyXG4gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSBiaW5kaW5nIGNvbnRleHQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQsIGFuZCB0aGUgXCJzdWJzY3JpYmFibGVcIiBjb21wdXRlZCBvYnNlcnZhYmxlIGlzXHJcbiAgICAgICAgLy8gc3Vic2NyaWJlZCB0byBhbnkgb2JzZXJ2YWJsZXMgdGhhdCB3ZXJlIGFjY2Vzc2VkIGluIHRoZSBwcm9jZXNzLiBJZiB0aGVyZSBpcyBub3RoaW5nIHRvIHRyYWNrLCB0aGVcclxuICAgICAgICAvLyBjb21wdXRlZCB3aWxsIGJlIGluYWN0aXZlLCBhbmQgd2UgY2FuIHNhZmVseSB0aHJvdyBpdCBhd2F5LiBJZiBpdCdzIGFjdGl2ZSwgdGhlIGNvbXB1dGVkIGlzIHN0b3JlZCBpblxyXG4gICAgICAgIC8vIHRoZSBjb250ZXh0IG9iamVjdC5cclxuICAgICAgICBpZiAoc3Vic2NyaWJhYmxlLmlzQWN0aXZlKCkpIHtcclxuICAgICAgICAgICAgc2VsZi5fc3Vic2NyaWJhYmxlID0gc3Vic2NyaWJhYmxlO1xyXG5cclxuICAgICAgICAgICAgLy8gQWx3YXlzIG5vdGlmeSBiZWNhdXNlIGV2ZW4gaWYgdGhlIG1vZGVsICgkZGF0YSkgaGFzbid0IGNoYW5nZWQsIG90aGVyIGNvbnRleHQgcHJvcGVydGllcyBtaWdodCBoYXZlIGNoYW5nZWRcclxuICAgICAgICAgICAgc3Vic2NyaWJhYmxlWydlcXVhbGl0eUNvbXBhcmVyJ10gPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGRpc3Bvc2Ugb2YgdGhpcyBjb21wdXRlZCBvYnNlcnZhYmxlIHdoZW4gaXQncyBubyBsb25nZXIgbmVlZGVkLiBUaGlzIHdvdWxkIGJlXHJcbiAgICAgICAgICAgIC8vIGVhc3kgaWYgd2UgaGFkIGEgc2luZ2xlIG5vZGUgdG8gd2F0Y2gsIGJ1dCBiaW5kaW5nIGNvbnRleHRzIGNhbiBiZSB1c2VkIGJ5IG1hbnkgZGlmZmVyZW50IG5vZGVzLCBhbmRcclxuICAgICAgICAgICAgLy8gd2UgY2Fubm90IGFzc3VtZSB0aGF0IHRob3NlIG5vZGVzIGhhdmUgYW55IHJlbGF0aW9uIHRvIGVhY2ggb3RoZXIuIFNvIGluc3RlYWQgd2UgdHJhY2sgYW55IG5vZGUgdGhhdFxyXG4gICAgICAgICAgICAvLyB0aGUgY29udGV4dCBpcyBhdHRhY2hlZCB0bywgYW5kIGRpc3Bvc2UgdGhlIGNvbXB1dGVkIHdoZW4gYWxsIG9mIHRob3NlIG5vZGVzIGhhdmUgYmVlbiBjbGVhbmVkLlxyXG5cclxuICAgICAgICAgICAgLy8gQWRkIHByb3BlcnRpZXMgdG8gKnN1YnNjcmliYWJsZSogaW5zdGVhZCBvZiAqc2VsZiogYmVjYXVzZSBhbnkgcHJvcGVydGllcyBhZGRlZCB0byAqc2VsZiogbWF5IGJlIG92ZXJ3cml0dGVuIG9uIHVwZGF0ZXNcclxuICAgICAgICAgICAgbm9kZXMgPSBbXTtcclxuICAgICAgICAgICAgc3Vic2NyaWJhYmxlLl9hZGROb2RlID0gZnVuY3Rpb24obm9kZSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcclxuICAgICAgICAgICAgICAgIGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2sobm9kZSwgZnVuY3Rpb24obm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGtvLnV0aWxzLmFycmF5UmVtb3ZlSXRlbShub2Rlcywgbm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFub2Rlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJhYmxlLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3Vic2NyaWJhYmxlID0gc3Vic2NyaWJhYmxlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBFeHRlbmQgdGhlIGJpbmRpbmcgY29udGV4dCBoaWVyYXJjaHkgd2l0aCBhIG5ldyB2aWV3IG1vZGVsIG9iamVjdC4gSWYgdGhlIHBhcmVudCBjb250ZXh0IGlzIHdhdGNoaW5nXHJcbiAgICAvLyBhbnkgb2JzZXJ2YWJsZXMsIHRoZSBuZXcgY2hpbGQgY29udGV4dCB3aWxsIGF1dG9tYXRpY2FsbHkgZ2V0IGEgZGVwZW5kZW5jeSBvbiB0aGUgcGFyZW50IGNvbnRleHQuXHJcbiAgICAvLyBCdXQgdGhpcyBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlICRkYXRhIHZhbHVlIG9mIHRoZSBjaGlsZCBjb250ZXh0IHdpbGwgYWxzbyBnZXQgdXBkYXRlZC4gSWYgdGhlIGNoaWxkXHJcbiAgICAvLyB2aWV3IG1vZGVsIGFsc28gZGVwZW5kcyBvbiB0aGUgcGFyZW50IHZpZXcgbW9kZWwsIHlvdSBtdXN0IHByb3ZpZGUgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNvcnJlY3RcclxuICAgIC8vIHZpZXcgbW9kZWwgb24gZWFjaCB1cGRhdGUuXHJcbiAgICBrby5iaW5kaW5nQ29udGV4dC5wcm90b3R5cGVbJ2NyZWF0ZUNoaWxkQ29udGV4dCddID0gZnVuY3Rpb24gKGRhdGFJdGVtT3JBY2Nlc3NvciwgZGF0YUl0ZW1BbGlhcywgZXh0ZW5kQ2FsbGJhY2spIHtcclxuICAgICAgICByZXR1cm4gbmV3IGtvLmJpbmRpbmdDb250ZXh0KGRhdGFJdGVtT3JBY2Nlc3NvciwgdGhpcywgZGF0YUl0ZW1BbGlhcywgZnVuY3Rpb24oc2VsZiwgcGFyZW50Q29udGV4dCkge1xyXG4gICAgICAgICAgICAvLyBFeHRlbmQgdGhlIGNvbnRleHQgaGllcmFyY2h5IGJ5IHNldHRpbmcgdGhlIGFwcHJvcHJpYXRlIHBvaW50ZXJzXHJcbiAgICAgICAgICAgIHNlbGZbJyRwYXJlbnRDb250ZXh0J10gPSBwYXJlbnRDb250ZXh0O1xyXG4gICAgICAgICAgICBzZWxmWyckcGFyZW50J10gPSBwYXJlbnRDb250ZXh0WyckZGF0YSddO1xyXG4gICAgICAgICAgICBzZWxmWyckcGFyZW50cyddID0gKHBhcmVudENvbnRleHRbJyRwYXJlbnRzJ10gfHwgW10pLnNsaWNlKDApO1xyXG4gICAgICAgICAgICBzZWxmWyckcGFyZW50cyddLnVuc2hpZnQoc2VsZlsnJHBhcmVudCddKTtcclxuICAgICAgICAgICAgaWYgKGV4dGVuZENhbGxiYWNrKVxyXG4gICAgICAgICAgICAgICAgZXh0ZW5kQ2FsbGJhY2soc2VsZik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEV4dGVuZCB0aGUgYmluZGluZyBjb250ZXh0IHdpdGggbmV3IGN1c3RvbSBwcm9wZXJ0aWVzLiBUaGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSBjb250ZXh0IGhpZXJhcmNoeS5cclxuICAgIC8vIFNpbWlsYXJseSB0byBcImNoaWxkXCIgY29udGV4dHMsIHByb3ZpZGUgYSBmdW5jdGlvbiBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb3JyZWN0IHZhbHVlcyBhcmUgc2V0XHJcbiAgICAvLyB3aGVuIGFuIG9ic2VydmFibGUgdmlldyBtb2RlbCBpcyB1cGRhdGVkLlxyXG4gICAga28uYmluZGluZ0NvbnRleHQucHJvdG90eXBlWydleHRlbmQnXSA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpIHtcclxuICAgICAgICAvLyBJZiB0aGUgcGFyZW50IGNvbnRleHQgcmVmZXJlbmNlcyBhbiBvYnNlcnZhYmxlIHZpZXcgbW9kZWwsIFwiX3N1YnNjcmliYWJsZVwiIHdpbGwgYWx3YXlzIGJlIHRoZVxyXG4gICAgICAgIC8vIGxhdGVzdCB2aWV3IG1vZGVsIG9iamVjdC4gSWYgbm90LCBcIl9zdWJzY3JpYmFibGVcIiBpc24ndCBzZXQsIGFuZCB3ZSBjYW4gdXNlIHRoZSBzdGF0aWMgXCIkZGF0YVwiIHZhbHVlLlxyXG4gICAgICAgIHJldHVybiBuZXcga28uYmluZGluZ0NvbnRleHQodGhpcy5fc3Vic2NyaWJhYmxlIHx8IHRoaXNbJyRkYXRhJ10sIHRoaXMsIG51bGwsIGZ1bmN0aW9uKHNlbGYsIHBhcmVudENvbnRleHQpIHtcclxuICAgICAgICAgICAgLy8gVGhpcyBcImNoaWxkXCIgY29udGV4dCBkb2Vzbid0IGRpcmVjdGx5IHRyYWNrIGEgcGFyZW50IG9ic2VydmFibGUgdmlldyBtb2RlbCxcclxuICAgICAgICAgICAgLy8gc28gd2UgbmVlZCB0byBtYW51YWxseSBzZXQgdGhlICRyYXdEYXRhIHZhbHVlIHRvIG1hdGNoIHRoZSBwYXJlbnQuXHJcbiAgICAgICAgICAgIHNlbGZbJyRyYXdEYXRhJ10gPSBwYXJlbnRDb250ZXh0WyckcmF3RGF0YSddO1xyXG4gICAgICAgICAgICBrby51dGlscy5leHRlbmQoc2VsZiwgdHlwZW9mKHByb3BlcnRpZXMpID09IFwiZnVuY3Rpb25cIiA/IHByb3BlcnRpZXMoKSA6IHByb3BlcnRpZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBSZXR1cm5zIHRoZSB2YWx1ZUFjY2Vzb3IgZnVuY3Rpb24gZm9yIGEgYmluZGluZyB2YWx1ZVxyXG4gICAgZnVuY3Rpb24gbWFrZVZhbHVlQWNjZXNzb3IodmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgdmFsdWVBY2Nlc3NvciBmdW5jdGlvblxyXG4gICAgZnVuY3Rpb24gZXZhbHVhdGVWYWx1ZUFjY2Vzc29yKHZhbHVlQWNjZXNzb3IpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVBY2Nlc3NvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGJpbmRpbmdzLCBjcmVhdGUgYW5kIHJldHVybiBhIG5ldyBvYmplY3QgdGhhdCBjb250YWluc1xyXG4gICAgLy8gYmluZGluZyB2YWx1ZS1hY2Nlc3NvcnMgZnVuY3Rpb25zLiBFYWNoIGFjY2Vzc29yIGZ1bmN0aW9uIGNhbGxzIHRoZSBvcmlnaW5hbCBmdW5jdGlvblxyXG4gICAgLy8gc28gdGhhdCBpdCBhbHdheXMgZ2V0cyB0aGUgbGF0ZXN0IHZhbHVlIGFuZCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBjYXB0dXJlZC4gVGhpcyBpcyB1c2VkXHJcbiAgICAvLyBieSBrby5hcHBseUJpbmRpbmdzVG9Ob2RlIGFuZCBnZXRCaW5kaW5nc0FuZE1ha2VBY2Nlc3NvcnMuXHJcbiAgICBmdW5jdGlvbiBtYWtlQWNjZXNzb3JzRnJvbUZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgcmV0dXJuIGtvLnV0aWxzLm9iamVjdE1hcChrby5kZXBlbmRlbmN5RGV0ZWN0aW9uLmlnbm9yZShjYWxsYmFjayksIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClba2V5XTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBHaXZlbiBhIGJpbmRpbmdzIGZ1bmN0aW9uIG9yIG9iamVjdCwgY3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgb2JqZWN0IHRoYXQgY29udGFpbnNcclxuICAgIC8vIGJpbmRpbmcgdmFsdWUtYWNjZXNzb3JzIGZ1bmN0aW9ucy4gVGhpcyBpcyB1c2VkIGJ5IGtvLmFwcGx5QmluZGluZ3NUb05vZGUuXHJcbiAgICBmdW5jdGlvbiBtYWtlQmluZGluZ0FjY2Vzc29ycyhiaW5kaW5ncywgY29udGV4dCwgbm9kZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgYmluZGluZ3MgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1ha2VBY2Nlc3NvcnNGcm9tRnVuY3Rpb24oYmluZGluZ3MuYmluZChudWxsLCBjb250ZXh0LCBub2RlKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGtvLnV0aWxzLm9iamVjdE1hcChiaW5kaW5ncywgbWFrZVZhbHVlQWNjZXNzb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaWYgdGhlIGJpbmRpbmcgcHJvdmlkZXIgZG9lc24ndCBpbmNsdWRlIGEgZ2V0QmluZGluZ0FjY2Vzc29ycyBmdW5jdGlvbi5cclxuICAgIC8vIEl0IG11c3QgYmUgY2FsbGVkIHdpdGggJ3RoaXMnIHNldCB0byB0aGUgcHJvdmlkZXIgaW5zdGFuY2UuXHJcbiAgICBmdW5jdGlvbiBnZXRCaW5kaW5nc0FuZE1ha2VBY2Nlc3NvcnMobm9kZSwgY29udGV4dCkge1xyXG4gICAgICAgIHJldHVybiBtYWtlQWNjZXNzb3JzRnJvbUZ1bmN0aW9uKHRoaXNbJ2dldEJpbmRpbmdzJ10uYmluZCh0aGlzLCBub2RlLCBjb250ZXh0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVUaGF0QmluZGluZ0lzQWxsb3dlZEZvclZpcnR1YWxFbGVtZW50cyhiaW5kaW5nTmFtZSkge1xyXG4gICAgICAgIHZhciB2YWxpZGF0b3IgPSBrby52aXJ0dWFsRWxlbWVudHMuYWxsb3dlZEJpbmRpbmdzW2JpbmRpbmdOYW1lXTtcclxuICAgICAgICBpZiAoIXZhbGlkYXRvcilcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGJpbmRpbmcgJ1wiICsgYmluZGluZ05hbWUgKyBcIicgY2Fubm90IGJlIHVzZWQgd2l0aCB2aXJ0dWFsIGVsZW1lbnRzXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYXBwbHlCaW5kaW5nc1RvRGVzY2VuZGFudHNJbnRlcm5hbCAoYmluZGluZ0NvbnRleHQsIGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBiaW5kaW5nQ29udGV4dHNNYXlEaWZmZXJGcm9tRG9tUGFyZW50RWxlbWVudCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50Q2hpbGQsXHJcbiAgICAgICAgICAgIG5leHRJblF1ZXVlID0ga28udmlydHVhbEVsZW1lbnRzLmZpcnN0Q2hpbGQoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQpLFxyXG4gICAgICAgICAgICBwcm92aWRlciA9IGtvLmJpbmRpbmdQcm92aWRlclsnaW5zdGFuY2UnXSxcclxuICAgICAgICAgICAgcHJlcHJvY2Vzc05vZGUgPSBwcm92aWRlclsncHJlcHJvY2Vzc05vZGUnXTtcclxuXHJcbiAgICAgICAgLy8gUHJlcHJvY2Vzc2luZyBhbGxvd3MgYSBiaW5kaW5nIHByb3ZpZGVyIHRvIG11dGF0ZSBhIG5vZGUgYmVmb3JlIGJpbmRpbmdzIGFyZSBhcHBsaWVkIHRvIGl0LiBGb3IgZXhhbXBsZSBpdCdzXHJcbiAgICAgICAgLy8gcG9zc2libGUgdG8gaW5zZXJ0IG5ldyBzaWJsaW5ncyBhZnRlciBpdCwgYW5kL29yIHJlcGxhY2UgdGhlIG5vZGUgd2l0aCBhIGRpZmZlcmVudCBvbmUuIFRoaXMgY2FuIGJlIHVzZWQgdG9cclxuICAgICAgICAvLyBpbXBsZW1lbnQgY3VzdG9tIGJpbmRpbmcgc3ludGF4ZXMsIHN1Y2ggYXMge3sgdmFsdWUgfX0gZm9yIHN0cmluZyBpbnRlcnBvbGF0aW9uLCBvciBjdXN0b20gZWxlbWVudCB0eXBlcyB0aGF0XHJcbiAgICAgICAgLy8gdHJpZ2dlciBpbnNlcnRpb24gb2YgPHRlbXBsYXRlPiBjb250ZW50cyBhdCB0aGF0IHBvaW50IGluIHRoZSBkb2N1bWVudC5cclxuICAgICAgICBpZiAocHJlcHJvY2Vzc05vZGUpIHtcclxuICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRDaGlsZCA9IG5leHRJblF1ZXVlKSB7XHJcbiAgICAgICAgICAgICAgICBuZXh0SW5RdWV1ZSA9IGtvLnZpcnR1YWxFbGVtZW50cy5uZXh0U2libGluZyhjdXJyZW50Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgcHJlcHJvY2Vzc05vZGUuY2FsbChwcm92aWRlciwgY3VycmVudENoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBSZXNldCBuZXh0SW5RdWV1ZSBmb3IgdGhlIG5leHQgbG9vcFxyXG4gICAgICAgICAgICBuZXh0SW5RdWV1ZSA9IGtvLnZpcnR1YWxFbGVtZW50cy5maXJzdENoaWxkKGVsZW1lbnRPclZpcnR1YWxFbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHdoaWxlIChjdXJyZW50Q2hpbGQgPSBuZXh0SW5RdWV1ZSkge1xyXG4gICAgICAgICAgICAvLyBLZWVwIGEgcmVjb3JkIG9mIHRoZSBuZXh0IGNoaWxkICpiZWZvcmUqIGFwcGx5aW5nIGJpbmRpbmdzLCBpbiBjYXNlIHRoZSBiaW5kaW5nIHJlbW92ZXMgdGhlIGN1cnJlbnQgY2hpbGQgZnJvbSBpdHMgcG9zaXRpb25cclxuICAgICAgICAgICAgbmV4dEluUXVldWUgPSBrby52aXJ0dWFsRWxlbWVudHMubmV4dFNpYmxpbmcoY3VycmVudENoaWxkKTtcclxuICAgICAgICAgICAgYXBwbHlCaW5kaW5nc1RvTm9kZUFuZERlc2NlbmRhbnRzSW50ZXJuYWwoYmluZGluZ0NvbnRleHQsIGN1cnJlbnRDaGlsZCwgYmluZGluZ0NvbnRleHRzTWF5RGlmZmVyRnJvbURvbVBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBhcHBseUJpbmRpbmdzVG9Ob2RlQW5kRGVzY2VuZGFudHNJbnRlcm5hbCAoYmluZGluZ0NvbnRleHQsIG5vZGVWZXJpZmllZCwgYmluZGluZ0NvbnRleHRNYXlEaWZmZXJGcm9tRG9tUGFyZW50RWxlbWVudCkge1xyXG4gICAgICAgIHZhciBzaG91bGRCaW5kRGVzY2VuZGFudHMgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBQZXJmIG9wdGltaXNhdGlvbjogQXBwbHkgYmluZGluZ3Mgb25seSBpZi4uLlxyXG4gICAgICAgIC8vICgxKSBXZSBuZWVkIHRvIHN0b3JlIHRoZSBiaW5kaW5nIGNvbnRleHQgb24gdGhpcyBub2RlIChiZWNhdXNlIGl0IG1heSBkaWZmZXIgZnJvbSB0aGUgRE9NIHBhcmVudCBub2RlJ3MgYmluZGluZyBjb250ZXh0KVxyXG4gICAgICAgIC8vICAgICBOb3RlIHRoYXQgd2UgY2FuJ3Qgc3RvcmUgYmluZGluZyBjb250ZXh0cyBvbiBub24tZWxlbWVudHMgKGUuZy4sIHRleHQgbm9kZXMpLCBhcyBJRSBkb2Vzbid0IGFsbG93IGV4cGFuZG8gcHJvcGVydGllcyBmb3IgdGhvc2VcclxuICAgICAgICAvLyAoMikgSXQgbWlnaHQgaGF2ZSBiaW5kaW5ncyAoZS5nLiwgaXQgaGFzIGEgZGF0YS1iaW5kIGF0dHJpYnV0ZSwgb3IgaXQncyBhIG1hcmtlciBmb3IgYSBjb250YWluZXJsZXNzIHRlbXBsYXRlKVxyXG4gICAgICAgIHZhciBpc0VsZW1lbnQgPSAobm9kZVZlcmlmaWVkLm5vZGVUeXBlID09PSAxKTtcclxuICAgICAgICBpZiAoaXNFbGVtZW50KSAvLyBXb3JrYXJvdW5kIElFIDw9IDggSFRNTCBwYXJzaW5nIHdlaXJkbmVzc1xyXG4gICAgICAgICAgICBrby52aXJ0dWFsRWxlbWVudHMubm9ybWFsaXNlVmlydHVhbEVsZW1lbnREb21TdHJ1Y3R1cmUobm9kZVZlcmlmaWVkKTtcclxuXHJcbiAgICAgICAgdmFyIHNob3VsZEFwcGx5QmluZGluZ3MgPSAoaXNFbGVtZW50ICYmIGJpbmRpbmdDb250ZXh0TWF5RGlmZmVyRnJvbURvbVBhcmVudEVsZW1lbnQpICAgICAgICAgICAgIC8vIENhc2UgKDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBrby5iaW5kaW5nUHJvdmlkZXJbJ2luc3RhbmNlJ11bJ25vZGVIYXNCaW5kaW5ncyddKG5vZGVWZXJpZmllZCk7ICAgICAgIC8vIENhc2UgKDIpXHJcbiAgICAgICAgaWYgKHNob3VsZEFwcGx5QmluZGluZ3MpXHJcbiAgICAgICAgICAgIHNob3VsZEJpbmREZXNjZW5kYW50cyA9IGFwcGx5QmluZGluZ3NUb05vZGVJbnRlcm5hbChub2RlVmVyaWZpZWQsIG51bGwsIGJpbmRpbmdDb250ZXh0LCBiaW5kaW5nQ29udGV4dE1heURpZmZlckZyb21Eb21QYXJlbnRFbGVtZW50KVsnc2hvdWxkQmluZERlc2NlbmRhbnRzJ107XHJcblxyXG4gICAgICAgIGlmIChzaG91bGRCaW5kRGVzY2VuZGFudHMgJiYgIWJpbmRpbmdEb2VzTm90UmVjdXJzZUludG9FbGVtZW50VHlwZXNba28udXRpbHMudGFnTmFtZUxvd2VyKG5vZGVWZXJpZmllZCldKSB7XHJcbiAgICAgICAgICAgIC8vIFdlJ3JlIHJlY3Vyc2luZyBhdXRvbWF0aWNhbGx5IGludG8gKHJlYWwgb3IgdmlydHVhbCkgY2hpbGQgbm9kZXMgd2l0aG91dCBjaGFuZ2luZyBiaW5kaW5nIGNvbnRleHRzLiBTbyxcclxuICAgICAgICAgICAgLy8gICogRm9yIGNoaWxkcmVuIG9mIGEgKnJlYWwqIGVsZW1lbnQsIHRoZSBiaW5kaW5nIGNvbnRleHQgaXMgY2VydGFpbmx5IHRoZSBzYW1lIGFzIG9uIHRoZWlyIERPTSAucGFyZW50Tm9kZSxcclxuICAgICAgICAgICAgLy8gICAgaGVuY2UgYmluZGluZ0NvbnRleHRzTWF5RGlmZmVyRnJvbURvbVBhcmVudEVsZW1lbnQgaXMgZmFsc2VcclxuICAgICAgICAgICAgLy8gICogRm9yIGNoaWxkcmVuIG9mIGEgKnZpcnR1YWwqIGVsZW1lbnQsIHdlIGNhbid0IGJlIHN1cmUuIEV2YWx1YXRpbmcgLnBhcmVudE5vZGUgb24gdGhvc2UgY2hpbGRyZW4gbWF5XHJcbiAgICAgICAgICAgIC8vICAgIHNraXAgb3ZlciBhbnkgbnVtYmVyIG9mIGludGVybWVkaWF0ZSB2aXJ0dWFsIGVsZW1lbnRzLCBhbnkgb2Ygd2hpY2ggbWlnaHQgZGVmaW5lIGEgY3VzdG9tIGJpbmRpbmcgY29udGV4dCxcclxuICAgICAgICAgICAgLy8gICAgaGVuY2UgYmluZGluZ0NvbnRleHRzTWF5RGlmZmVyRnJvbURvbVBhcmVudEVsZW1lbnQgaXMgdHJ1ZVxyXG4gICAgICAgICAgICBhcHBseUJpbmRpbmdzVG9EZXNjZW5kYW50c0ludGVybmFsKGJpbmRpbmdDb250ZXh0LCBub2RlVmVyaWZpZWQsIC8qIGJpbmRpbmdDb250ZXh0c01heURpZmZlckZyb21Eb21QYXJlbnRFbGVtZW50OiAqLyAhaXNFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGJvdW5kRWxlbWVudERvbURhdGFLZXkgPSBrby51dGlscy5kb21EYXRhLm5leHRLZXkoKTtcclxuXHJcblxyXG4gICAgZnVuY3Rpb24gdG9wb2xvZ2ljYWxTb3J0QmluZGluZ3MoYmluZGluZ3MpIHtcclxuICAgICAgICAvLyBEZXB0aC1maXJzdCBzb3J0XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdLCAgICAgICAgICAgICAgICAvLyBUaGUgbGlzdCBvZiBrZXkvaGFuZGxlciBwYWlycyB0aGF0IHdlIHdpbGwgcmV0dXJuXHJcbiAgICAgICAgICAgIGJpbmRpbmdzQ29uc2lkZXJlZCA9IHt9LCAgICAvLyBBIHRlbXBvcmFyeSByZWNvcmQgb2Ygd2hpY2ggYmluZGluZ3MgYXJlIGFscmVhZHkgaW4gJ3Jlc3VsdCdcclxuICAgICAgICAgICAgY3ljbGljRGVwZW5kZW5jeVN0YWNrID0gW107IC8vIEtlZXBzIHRyYWNrIG9mIGEgZGVwdGgtc2VhcmNoIHNvIHRoYXQsIGlmIHRoZXJlJ3MgYSBjeWNsZSwgd2Uga25vdyB3aGljaCBiaW5kaW5ncyBjYXVzZWQgaXRcclxuICAgICAgICBrby51dGlscy5vYmplY3RGb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbiBwdXNoQmluZGluZyhiaW5kaW5nS2V5KSB7XHJcbiAgICAgICAgICAgIGlmICghYmluZGluZ3NDb25zaWRlcmVkW2JpbmRpbmdLZXldKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYmluZGluZyA9IGtvWydnZXRCaW5kaW5nSGFuZGxlciddKGJpbmRpbmdLZXkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJpbmRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBhZGQgZGVwZW5kZW5jaWVzIChpZiBhbnkpIG9mIHRoZSBjdXJyZW50IGJpbmRpbmdcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYmluZGluZ1snYWZ0ZXInXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjeWNsaWNEZXBlbmRlbmN5U3RhY2sucHVzaChiaW5kaW5nS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAga28udXRpbHMuYXJyYXlGb3JFYWNoKGJpbmRpbmdbJ2FmdGVyJ10sIGZ1bmN0aW9uKGJpbmRpbmdEZXBlbmRlbmN5S2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmluZGluZ3NbYmluZGluZ0RlcGVuZGVuY3lLZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtvLnV0aWxzLmFycmF5SW5kZXhPZihjeWNsaWNEZXBlbmRlbmN5U3RhY2ssIGJpbmRpbmdEZXBlbmRlbmN5S2V5KSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW5ub3QgY29tYmluZSB0aGUgZm9sbG93aW5nIGJpbmRpbmdzLCBiZWNhdXNlIHRoZXkgaGF2ZSBhIGN5Y2xpYyBkZXBlbmRlbmN5OiBcIiArIGN5Y2xpY0RlcGVuZGVuY3lTdGFjay5qb2luKFwiLCBcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hCaW5kaW5nKGJpbmRpbmdEZXBlbmRlbmN5S2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjeWNsaWNEZXBlbmRlbmN5U3RhY2subGVuZ3RoLS07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIE5leHQgYWRkIHRoZSBjdXJyZW50IGJpbmRpbmdcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7IGtleTogYmluZGluZ0tleSwgaGFuZGxlcjogYmluZGluZyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJpbmRpbmdzQ29uc2lkZXJlZFtiaW5kaW5nS2V5XSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBhcHBseUJpbmRpbmdzVG9Ob2RlSW50ZXJuYWwobm9kZSwgc291cmNlQmluZGluZ3MsIGJpbmRpbmdDb250ZXh0LCBiaW5kaW5nQ29udGV4dE1heURpZmZlckZyb21Eb21QYXJlbnRFbGVtZW50KSB7XHJcbiAgICAgICAgLy8gUHJldmVudCBtdWx0aXBsZSBhcHBseUJpbmRpbmdzIGNhbGxzIGZvciB0aGUgc2FtZSBub2RlLCBleGNlcHQgd2hlbiBhIGJpbmRpbmcgdmFsdWUgaXMgc3BlY2lmaWVkXHJcbiAgICAgICAgdmFyIGFscmVhZHlCb3VuZCA9IGtvLnV0aWxzLmRvbURhdGEuZ2V0KG5vZGUsIGJvdW5kRWxlbWVudERvbURhdGFLZXkpO1xyXG4gICAgICAgIGlmICghc291cmNlQmluZGluZ3MpIHtcclxuICAgICAgICAgICAgaWYgKGFscmVhZHlCb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJZb3UgY2Fubm90IGFwcGx5IGJpbmRpbmdzIG11bHRpcGxlIHRpbWVzIHRvIHRoZSBzYW1lIGVsZW1lbnQuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGtvLnV0aWxzLmRvbURhdGEuc2V0KG5vZGUsIGJvdW5kRWxlbWVudERvbURhdGFLZXksIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBEb24ndCBzdG9yZSB0aGUgYmluZGluZyBjb250ZXh0IG9uIHRoaXMgbm9kZSBpZiBpdCdzIGRlZmluaXRlbHkgdGhlIHNhbWUgYXMgb24gbm9kZS5wYXJlbnROb2RlLCBiZWNhdXNlXHJcbiAgICAgICAgLy8gd2UgY2FuIGVhc2lseSByZWNvdmVyIGl0IGp1c3QgYnkgc2Nhbm5pbmcgdXAgdGhlIG5vZGUncyBhbmNlc3RvcnMgaW4gdGhlIERPTVxyXG4gICAgICAgIC8vIChub3RlOiBoZXJlLCBwYXJlbnQgbm9kZSBtZWFucyBcInJlYWwgRE9NIHBhcmVudFwiIG5vdCBcInZpcnR1YWwgcGFyZW50XCIsIGFzIHRoZXJlJ3Mgbm8gTygxKSB3YXkgdG8gZmluZCB0aGUgdmlydHVhbCBwYXJlbnQpXHJcbiAgICAgICAgaWYgKCFhbHJlYWR5Qm91bmQgJiYgYmluZGluZ0NvbnRleHRNYXlEaWZmZXJGcm9tRG9tUGFyZW50RWxlbWVudClcclxuICAgICAgICAgICAga28uc3RvcmVkQmluZGluZ0NvbnRleHRGb3JOb2RlKG5vZGUsIGJpbmRpbmdDb250ZXh0KTtcclxuXHJcbiAgICAgICAgLy8gVXNlIGJpbmRpbmdzIGlmIGdpdmVuLCBvdGhlcndpc2UgZmFsbCBiYWNrIG9uIGFza2luZyB0aGUgYmluZGluZ3MgcHJvdmlkZXIgdG8gZ2l2ZSB1cyBzb21lIGJpbmRpbmdzXHJcbiAgICAgICAgdmFyIGJpbmRpbmdzO1xyXG4gICAgICAgIGlmIChzb3VyY2VCaW5kaW5ncyAmJiB0eXBlb2Ygc291cmNlQmluZGluZ3MgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgYmluZGluZ3MgPSBzb3VyY2VCaW5kaW5ncztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgcHJvdmlkZXIgPSBrby5iaW5kaW5nUHJvdmlkZXJbJ2luc3RhbmNlJ10sXHJcbiAgICAgICAgICAgICAgICBnZXRCaW5kaW5ncyA9IHByb3ZpZGVyWydnZXRCaW5kaW5nQWNjZXNzb3JzJ10gfHwgZ2V0QmluZGluZ3NBbmRNYWtlQWNjZXNzb3JzO1xyXG5cclxuICAgICAgICAgICAgLy8gR2V0IHRoZSBiaW5kaW5nIGZyb20gdGhlIHByb3ZpZGVyIHdpdGhpbiBhIGNvbXB1dGVkIG9ic2VydmFibGUgc28gdGhhdCB3ZSBjYW4gdXBkYXRlIHRoZSBiaW5kaW5ncyB3aGVuZXZlclxyXG4gICAgICAgICAgICAvLyB0aGUgYmluZGluZyBjb250ZXh0IGlzIHVwZGF0ZWQgb3IgaWYgdGhlIGJpbmRpbmcgcHJvdmlkZXIgYWNjZXNzZXMgb2JzZXJ2YWJsZXMuXHJcbiAgICAgICAgICAgIHZhciBiaW5kaW5nc1VwZGF0ZXIgPSBrby5kZXBlbmRlbnRPYnNlcnZhYmxlKFxyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MgPSBzb3VyY2VCaW5kaW5ncyA/IHNvdXJjZUJpbmRpbmdzKGJpbmRpbmdDb250ZXh0LCBub2RlKSA6IGdldEJpbmRpbmdzLmNhbGwocHJvdmlkZXIsIG5vZGUsIGJpbmRpbmdDb250ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciBhIGRlcGVuZGVuY3kgb24gdGhlIGJpbmRpbmcgY29udGV4dCB0byBzdXBwb3J0IG9ic2VydmFibGUgdmlldyBtb2RlbHMuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJpbmRpbmdzICYmIGJpbmRpbmdDb250ZXh0Ll9zdWJzY3JpYmFibGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdDb250ZXh0Ll9zdWJzY3JpYmFibGUoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmluZGluZ3M7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbnVsbCwgeyBkaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQ6IG5vZGUgfVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFiaW5kaW5ncyB8fCAhYmluZGluZ3NVcGRhdGVyLmlzQWN0aXZlKCkpXHJcbiAgICAgICAgICAgICAgICBiaW5kaW5nc1VwZGF0ZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGJpbmRpbmdIYW5kbGVyVGhhdENvbnRyb2xzRGVzY2VuZGFudEJpbmRpbmdzO1xyXG4gICAgICAgIGlmIChiaW5kaW5ncykge1xyXG4gICAgICAgICAgICAvLyBSZXR1cm4gdGhlIHZhbHVlIGFjY2Vzc29yIGZvciBhIGdpdmVuIGJpbmRpbmcuIFdoZW4gYmluZGluZ3MgYXJlIHN0YXRpYyAod29uJ3QgYmUgdXBkYXRlZCBiZWNhdXNlIG9mIGEgYmluZGluZ1xyXG4gICAgICAgICAgICAvLyBjb250ZXh0IHVwZGF0ZSksIGp1c3QgcmV0dXJuIHRoZSB2YWx1ZSBhY2Nlc3NvciBmcm9tIHRoZSBiaW5kaW5nLiBPdGhlcndpc2UsIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIGdldHNcclxuICAgICAgICAgICAgLy8gdGhlIGxhdGVzdCBiaW5kaW5nIHZhbHVlIGFuZCByZWdpc3RlcnMgYSBkZXBlbmRlbmN5IG9uIHRoZSBiaW5kaW5nIHVwZGF0ZXIuXHJcbiAgICAgICAgICAgIHZhciBnZXRWYWx1ZUFjY2Vzc29yID0gYmluZGluZ3NVcGRhdGVyXHJcbiAgICAgICAgICAgICAgICA/IGZ1bmN0aW9uKGJpbmRpbmdLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmFsdWF0ZVZhbHVlQWNjZXNzb3IoYmluZGluZ3NVcGRhdGVyKClbYmluZGluZ0tleV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9IDogZnVuY3Rpb24oYmluZGluZ0tleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiaW5kaW5nc1tiaW5kaW5nS2V5XTtcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAvLyBVc2Ugb2YgYWxsQmluZGluZ3MgYXMgYSBmdW5jdGlvbiBpcyBtYWludGFpbmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYnV0IGl0cyB1c2UgaXMgZGVwcmVjYXRlZFxyXG4gICAgICAgICAgICBmdW5jdGlvbiBhbGxCaW5kaW5ncygpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBrby51dGlscy5vYmplY3RNYXAoYmluZGluZ3NVcGRhdGVyID8gYmluZGluZ3NVcGRhdGVyKCkgOiBiaW5kaW5ncywgZXZhbHVhdGVWYWx1ZUFjY2Vzc29yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIHRoZSAzLnggYWxsQmluZGluZ3MgQVBJXHJcbiAgICAgICAgICAgIGFsbEJpbmRpbmdzWydnZXQnXSA9IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJpbmRpbmdzW2tleV0gJiYgZXZhbHVhdGVWYWx1ZUFjY2Vzc29yKGdldFZhbHVlQWNjZXNzb3Ioa2V5KSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGFsbEJpbmRpbmdzWydoYXMnXSA9IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleSBpbiBiaW5kaW5ncztcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIC8vIEZpcnN0IHB1dCB0aGUgYmluZGluZ3MgaW50byB0aGUgcmlnaHQgb3JkZXJcclxuICAgICAgICAgICAgdmFyIG9yZGVyZWRCaW5kaW5ncyA9IHRvcG9sb2dpY2FsU29ydEJpbmRpbmdzKGJpbmRpbmdzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEdvIHRocm91Z2ggdGhlIHNvcnRlZCBiaW5kaW5ncywgY2FsbGluZyBpbml0IGFuZCB1cGRhdGUgZm9yIGVhY2hcclxuICAgICAgICAgICAga28udXRpbHMuYXJyYXlGb3JFYWNoKG9yZGVyZWRCaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZ0tleUFuZEhhbmRsZXIpIHtcclxuICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0b3BvbG9naWNhbFNvcnRCaW5kaW5ncyBoYXMgYWxyZWFkeSBmaWx0ZXJlZCBvdXQgYW55IG5vbmV4aXN0ZW50IGJpbmRpbmcgaGFuZGxlcnMsXHJcbiAgICAgICAgICAgICAgICAvLyBzbyBiaW5kaW5nS2V5QW5kSGFuZGxlci5oYW5kbGVyIHdpbGwgYWx3YXlzIGJlIG5vbm51bGwuXHJcbiAgICAgICAgICAgICAgICB2YXIgaGFuZGxlckluaXRGbiA9IGJpbmRpbmdLZXlBbmRIYW5kbGVyLmhhbmRsZXJbXCJpbml0XCJdLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXJVcGRhdGVGbiA9IGJpbmRpbmdLZXlBbmRIYW5kbGVyLmhhbmRsZXJbXCJ1cGRhdGVcIl0sXHJcbiAgICAgICAgICAgICAgICAgICAgYmluZGluZ0tleSA9IGJpbmRpbmdLZXlBbmRIYW5kbGVyLmtleTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gOCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlVGhhdEJpbmRpbmdJc0FsbG93ZWRGb3JWaXJ0dWFsRWxlbWVudHMoYmluZGluZ0tleSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBSdW4gaW5pdCwgaWdub3JpbmcgYW55IGRlcGVuZGVuY2llc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaGFuZGxlckluaXRGbiA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga28uZGVwZW5kZW5jeURldGVjdGlvbi5pZ25vcmUoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5pdFJlc3VsdCA9IGhhbmRsZXJJbml0Rm4obm9kZSwgZ2V0VmFsdWVBY2Nlc3NvcihiaW5kaW5nS2V5KSwgYWxsQmluZGluZ3MsIGJpbmRpbmdDb250ZXh0WyckZGF0YSddLCBiaW5kaW5nQ29udGV4dCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBiaW5kaW5nIGhhbmRsZXIgY2xhaW1zIHRvIGNvbnRyb2wgZGVzY2VuZGFudCBiaW5kaW5ncywgbWFrZSBhIG5vdGUgb2YgdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluaXRSZXN1bHQgJiYgaW5pdFJlc3VsdFsnY29udHJvbHNEZXNjZW5kYW50QmluZGluZ3MnXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaW5kaW5nSGFuZGxlclRoYXRDb250cm9sc0Rlc2NlbmRhbnRCaW5kaW5ncyAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNdWx0aXBsZSBiaW5kaW5ncyAoXCIgKyBiaW5kaW5nSGFuZGxlclRoYXRDb250cm9sc0Rlc2NlbmRhbnRCaW5kaW5ncyArIFwiIGFuZCBcIiArIGJpbmRpbmdLZXkgKyBcIikgYXJlIHRyeWluZyB0byBjb250cm9sIGRlc2NlbmRhbnQgYmluZGluZ3Mgb2YgdGhlIHNhbWUgZWxlbWVudC4gWW91IGNhbm5vdCB1c2UgdGhlc2UgYmluZGluZ3MgdG9nZXRoZXIgb24gdGhlIHNhbWUgZWxlbWVudC5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZ0hhbmRsZXJUaGF0Q29udHJvbHNEZXNjZW5kYW50QmluZGluZ3MgPSBiaW5kaW5nS2V5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJ1biB1cGRhdGUgaW4gaXRzIG93biBjb21wdXRlZCB3cmFwcGVyXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyVXBkYXRlRm4gPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtvLmRlcGVuZGVudE9ic2VydmFibGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyVXBkYXRlRm4obm9kZSwgZ2V0VmFsdWVBY2Nlc3NvcihiaW5kaW5nS2V5KSwgYWxsQmluZGluZ3MsIGJpbmRpbmdDb250ZXh0WyckZGF0YSddLCBiaW5kaW5nQ29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkOiBub2RlIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4Lm1lc3NhZ2UgPSBcIlVuYWJsZSB0byBwcm9jZXNzIGJpbmRpbmcgXFxcIlwiICsgYmluZGluZ0tleSArIFwiOiBcIiArIGJpbmRpbmdzW2JpbmRpbmdLZXldICsgXCJcXFwiXFxuTWVzc2FnZTogXCIgKyBleC5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdzaG91bGRCaW5kRGVzY2VuZGFudHMnOiBiaW5kaW5nSGFuZGxlclRoYXRDb250cm9sc0Rlc2NlbmRhbnRCaW5kaW5ncyA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIHN0b3JlZEJpbmRpbmdDb250ZXh0RG9tRGF0YUtleSA9IGtvLnV0aWxzLmRvbURhdGEubmV4dEtleSgpO1xyXG4gICAga28uc3RvcmVkQmluZGluZ0NvbnRleHRGb3JOb2RlID0gZnVuY3Rpb24gKG5vZGUsIGJpbmRpbmdDb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICBrby51dGlscy5kb21EYXRhLnNldChub2RlLCBzdG9yZWRCaW5kaW5nQ29udGV4dERvbURhdGFLZXksIGJpbmRpbmdDb250ZXh0KTtcclxuICAgICAgICAgICAgaWYgKGJpbmRpbmdDb250ZXh0Ll9zdWJzY3JpYmFibGUpXHJcbiAgICAgICAgICAgICAgICBiaW5kaW5nQ29udGV4dC5fc3Vic2NyaWJhYmxlLl9hZGROb2RlKG5vZGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBrby51dGlscy5kb21EYXRhLmdldChub2RlLCBzdG9yZWRCaW5kaW5nQ29udGV4dERvbURhdGFLZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRCaW5kaW5nQ29udGV4dCh2aWV3TW9kZWxPckJpbmRpbmdDb250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHZpZXdNb2RlbE9yQmluZGluZ0NvbnRleHQgJiYgKHZpZXdNb2RlbE9yQmluZGluZ0NvbnRleHQgaW5zdGFuY2VvZiBrby5iaW5kaW5nQ29udGV4dClcclxuICAgICAgICAgICAgPyB2aWV3TW9kZWxPckJpbmRpbmdDb250ZXh0XHJcbiAgICAgICAgICAgIDogbmV3IGtvLmJpbmRpbmdDb250ZXh0KHZpZXdNb2RlbE9yQmluZGluZ0NvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGtvLmFwcGx5QmluZGluZ0FjY2Vzc29yc1RvTm9kZSA9IGZ1bmN0aW9uIChub2RlLCBiaW5kaW5ncywgdmlld01vZGVsT3JCaW5kaW5nQ29udGV4dCkge1xyXG4gICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxKSAvLyBJZiBpdCdzIGFuIGVsZW1lbnQsIHdvcmthcm91bmQgSUUgPD0gOCBIVE1MIHBhcnNpbmcgd2VpcmRuZXNzXHJcbiAgICAgICAgICAgIGtvLnZpcnR1YWxFbGVtZW50cy5ub3JtYWxpc2VWaXJ0dWFsRWxlbWVudERvbVN0cnVjdHVyZShub2RlKTtcclxuICAgICAgICByZXR1cm4gYXBwbHlCaW5kaW5nc1RvTm9kZUludGVybmFsKG5vZGUsIGJpbmRpbmdzLCBnZXRCaW5kaW5nQ29udGV4dCh2aWV3TW9kZWxPckJpbmRpbmdDb250ZXh0KSwgdHJ1ZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGtvLmFwcGx5QmluZGluZ3NUb05vZGUgPSBmdW5jdGlvbiAobm9kZSwgYmluZGluZ3MsIHZpZXdNb2RlbE9yQmluZGluZ0NvbnRleHQpIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IGdldEJpbmRpbmdDb250ZXh0KHZpZXdNb2RlbE9yQmluZGluZ0NvbnRleHQpO1xyXG4gICAgICAgIHJldHVybiBrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUobm9kZSwgbWFrZUJpbmRpbmdBY2Nlc3NvcnMoYmluZGluZ3MsIGNvbnRleHQsIG5vZGUpLCBjb250ZXh0KTtcclxuICAgIH07XHJcblxyXG4gICAga28uYXBwbHlCaW5kaW5nc1RvRGVzY2VuZGFudHMgPSBmdW5jdGlvbih2aWV3TW9kZWxPckJpbmRpbmdDb250ZXh0LCByb290Tm9kZSkge1xyXG4gICAgICAgIGlmIChyb290Tm9kZS5ub2RlVHlwZSA9PT0gMSB8fCByb290Tm9kZS5ub2RlVHlwZSA9PT0gOClcclxuICAgICAgICAgICAgYXBwbHlCaW5kaW5nc1RvRGVzY2VuZGFudHNJbnRlcm5hbChnZXRCaW5kaW5nQ29udGV4dCh2aWV3TW9kZWxPckJpbmRpbmdDb250ZXh0KSwgcm9vdE5vZGUsIHRydWUpO1xyXG4gICAgfTtcclxuXHJcbiAgICBrby5hcHBseUJpbmRpbmdzID0gZnVuY3Rpb24gKHZpZXdNb2RlbE9yQmluZGluZ0NvbnRleHQsIHJvb3ROb2RlKSB7XHJcbiAgICAgICAgLy8gSWYgalF1ZXJ5IGlzIGxvYWRlZCBhZnRlciBLbm9ja291dCwgd2Ugd29uJ3QgaW5pdGlhbGx5IGhhdmUgYWNjZXNzIHRvIGl0LiBTbyBzYXZlIGl0IGhlcmUuXHJcbiAgICAgICAgaWYgKCFqUXVlcnlJbnN0YW5jZSAmJiB3aW5kb3dbJ2pRdWVyeSddKSB7XHJcbiAgICAgICAgICAgIGpRdWVyeUluc3RhbmNlID0gd2luZG93WydqUXVlcnknXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyb290Tm9kZSAmJiAocm9vdE5vZGUubm9kZVR5cGUgIT09IDEpICYmIChyb290Tm9kZS5ub2RlVHlwZSAhPT0gOCkpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImtvLmFwcGx5QmluZGluZ3M6IGZpcnN0IHBhcmFtZXRlciBzaG91bGQgYmUgeW91ciB2aWV3IG1vZGVsOyBzZWNvbmQgcGFyYW1ldGVyIHNob3VsZCBiZSBhIERPTSBub2RlXCIpO1xyXG4gICAgICAgIHJvb3ROb2RlID0gcm9vdE5vZGUgfHwgd2luZG93LmRvY3VtZW50LmJvZHk7IC8vIE1ha2UgXCJyb290Tm9kZVwiIHBhcmFtZXRlciBvcHRpb25hbFxyXG5cclxuICAgICAgICBhcHBseUJpbmRpbmdzVG9Ob2RlQW5kRGVzY2VuZGFudHNJbnRlcm5hbChnZXRCaW5kaW5nQ29udGV4dCh2aWV3TW9kZWxPckJpbmRpbmdDb250ZXh0KSwgcm9vdE5vZGUsIHRydWUpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBSZXRyaWV2aW5nIGJpbmRpbmcgY29udGV4dCBmcm9tIGFyYml0cmFyeSBub2Rlc1xyXG4gICAga28uY29udGV4dEZvciA9IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICAvLyBXZSBjYW4gb25seSBkbyBzb21ldGhpbmcgbWVhbmluZ2Z1bCBmb3IgZWxlbWVudHMgYW5kIGNvbW1lbnQgbm9kZXMgKGluIHBhcnRpY3VsYXIsIG5vdCB0ZXh0IG5vZGVzLCBhcyBJRSBjYW4ndCBzdG9yZSBkb21kYXRhIGZvciB0aGVtKVxyXG4gICAgICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0ga28uc3RvcmVkQmluZGluZ0NvbnRleHRGb3JOb2RlKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQpIHJldHVybiBjb250ZXh0O1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSkgcmV0dXJuIGtvLmNvbnRleHRGb3Iobm9kZS5wYXJlbnROb2RlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIGtvLmRhdGFGb3IgPSBmdW5jdGlvbihub2RlKSB7XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSBrby5jb250ZXh0Rm9yKG5vZGUpO1xyXG4gICAgICAgIHJldHVybiBjb250ZXh0ID8gY29udGV4dFsnJGRhdGEnXSA6IHVuZGVmaW5lZDtcclxuICAgIH07XHJcblxyXG4gICAga28uZXhwb3J0U3ltYm9sKCdiaW5kaW5nSGFuZGxlcnMnLCBrby5iaW5kaW5nSGFuZGxlcnMpO1xyXG4gICAga28uZXhwb3J0U3ltYm9sKCdhcHBseUJpbmRpbmdzJywga28uYXBwbHlCaW5kaW5ncyk7XHJcbiAgICBrby5leHBvcnRTeW1ib2woJ2FwcGx5QmluZGluZ3NUb0Rlc2NlbmRhbnRzJywga28uYXBwbHlCaW5kaW5nc1RvRGVzY2VuZGFudHMpO1xyXG4gICAga28uZXhwb3J0U3ltYm9sKCdhcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUnLCBrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUpO1xyXG4gICAga28uZXhwb3J0U3ltYm9sKCdhcHBseUJpbmRpbmdzVG9Ob2RlJywga28uYXBwbHlCaW5kaW5nc1RvTm9kZSk7XHJcbiAgICBrby5leHBvcnRTeW1ib2woJ2NvbnRleHRGb3InLCBrby5jb250ZXh0Rm9yKTtcclxuICAgIGtvLmV4cG9ydFN5bWJvbCgnZGF0YUZvcicsIGtvLmRhdGFGb3IpO1xyXG59KSgpO1xyXG4oZnVuY3Rpb24odW5kZWZpbmVkKSB7XHJcbiAgICB2YXIgbG9hZGluZ1N1YnNjcmliYWJsZXNDYWNoZSA9IHt9LCAvLyBUcmFja3MgY29tcG9uZW50IGxvYWRzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBmbGlnaHRcclxuICAgICAgICBsb2FkZWREZWZpbml0aW9uc0NhY2hlID0ge307ICAgIC8vIFRyYWNrcyBjb21wb25lbnQgbG9hZHMgdGhhdCBoYXZlIGFscmVhZHkgY29tcGxldGVkXHJcblxyXG4gICAga28uY29tcG9uZW50cyA9IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uKGNvbXBvbmVudE5hbWUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHZhciBjYWNoZWREZWZpbml0aW9uID0gZ2V0T2JqZWN0T3duUHJvcGVydHkobG9hZGVkRGVmaW5pdGlvbnNDYWNoZSwgY29tcG9uZW50TmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChjYWNoZWREZWZpbml0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJdCdzIGFscmVhZHkgbG9hZGVkIGFuZCBjYWNoZWQuIFJldXNlIHRoZSBzYW1lIGRlZmluaXRpb24gb2JqZWN0LlxyXG4gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGZvciBBUEkgY29uc2lzdGVuY3ksIGV2ZW4gY2FjaGUgaGl0cyBjb21wbGV0ZSBhc3luY2hyb25vdXNseSBieSBkZWZhdWx0LlxyXG4gICAgICAgICAgICAgICAgLy8gWW91IGNhbiBieXBhc3MgdGhpcyBieSBwdXR0aW5nIHN5bmNocm9ub3VzOnRydWUgb24geW91ciBjb21wb25lbnQgY29uZmlnLlxyXG4gICAgICAgICAgICAgICAgaWYgKGNhY2hlZERlZmluaXRpb24uaXNTeW5jaHJvbm91c0NvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24uaWdub3JlKGZ1bmN0aW9uKCkgeyAvLyBTZWUgY29tbWVudCBpbiBsb2FkZXJSZWdpc3RyeUJlaGF2aW9ycy5qcyBmb3IgcmVhc29uaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGNhY2hlZERlZmluaXRpb24uZGVmaW5pdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGtvLnRhc2tzLnNjaGVkdWxlKGZ1bmN0aW9uKCkgeyBjYWxsYmFjayhjYWNoZWREZWZpbml0aW9uLmRlZmluaXRpb24pOyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIEpvaW4gdGhlIGxvYWRpbmcgcHJvY2VzcyB0aGF0IGlzIGFscmVhZHkgdW5kZXJ3YXksIG9yIHN0YXJ0IGEgbmV3IG9uZS5cclxuICAgICAgICAgICAgICAgIGxvYWRDb21wb25lbnRBbmROb3RpZnkoY29tcG9uZW50TmFtZSwgY2FsbGJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgY2xlYXJDYWNoZWREZWZpbml0aW9uOiBmdW5jdGlvbihjb21wb25lbnROYW1lKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBsb2FkZWREZWZpbml0aW9uc0NhY2hlW2NvbXBvbmVudE5hbWVdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9nZXRGaXJzdFJlc3VsdEZyb21Mb2FkZXJzOiBnZXRGaXJzdFJlc3VsdEZyb21Mb2FkZXJzXHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGdldE9iamVjdE93blByb3BlcnR5KG9iaiwgcHJvcE5hbWUpIHtcclxuICAgICAgICByZXR1cm4gb2JqLmhhc093blByb3BlcnR5KHByb3BOYW1lKSA/IG9ialtwcm9wTmFtZV0gOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbG9hZENvbXBvbmVudEFuZE5vdGlmeShjb21wb25lbnROYW1lLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBzdWJzY3JpYmFibGUgPSBnZXRPYmplY3RPd25Qcm9wZXJ0eShsb2FkaW5nU3Vic2NyaWJhYmxlc0NhY2hlLCBjb21wb25lbnROYW1lKSxcclxuICAgICAgICAgICAgY29tcGxldGVkQXN5bmM7XHJcbiAgICAgICAgaWYgKCFzdWJzY3JpYmFibGUpIHtcclxuICAgICAgICAgICAgLy8gSXQncyBub3Qgc3RhcnRlZCBsb2FkaW5nIHlldC4gU3RhcnQgbG9hZGluZywgYW5kIHdoZW4gaXQncyBkb25lLCBtb3ZlIGl0IHRvIGxvYWRlZERlZmluaXRpb25zQ2FjaGUuXHJcbiAgICAgICAgICAgIHN1YnNjcmliYWJsZSA9IGxvYWRpbmdTdWJzY3JpYmFibGVzQ2FjaGVbY29tcG9uZW50TmFtZV0gPSBuZXcga28uc3Vic2NyaWJhYmxlKCk7XHJcbiAgICAgICAgICAgIHN1YnNjcmliYWJsZS5zdWJzY3JpYmUoY2FsbGJhY2spO1xyXG5cclxuICAgICAgICAgICAgYmVnaW5Mb2FkaW5nQ29tcG9uZW50KGNvbXBvbmVudE5hbWUsIGZ1bmN0aW9uKGRlZmluaXRpb24sIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlzU3luY2hyb25vdXNDb21wb25lbnQgPSAhIShjb25maWcgJiYgY29uZmlnWydzeW5jaHJvbm91cyddKTtcclxuICAgICAgICAgICAgICAgIGxvYWRlZERlZmluaXRpb25zQ2FjaGVbY29tcG9uZW50TmFtZV0gPSB7IGRlZmluaXRpb246IGRlZmluaXRpb24sIGlzU3luY2hyb25vdXNDb21wb25lbnQ6IGlzU3luY2hyb25vdXNDb21wb25lbnQgfTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2FkaW5nU3Vic2NyaWJhYmxlc0NhY2hlW2NvbXBvbmVudE5hbWVdO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEZvciBBUEkgY29uc2lzdGVuY3ksIGFsbCBsb2FkcyBjb21wbGV0ZSBhc3luY2hyb25vdXNseS4gSG93ZXZlciB3ZSB3YW50IHRvIGF2b2lkXHJcbiAgICAgICAgICAgICAgICAvLyBhZGRpbmcgYW4gZXh0cmEgdGFzayBzY2hlZHVsZSBpZiBpdCdzIHVubmVjZXNzYXJ5IChpLmUuLCB0aGUgY29tcGxldGlvbiBpcyBhbHJlYWR5XHJcbiAgICAgICAgICAgICAgICAvLyBhc3luYykuXHJcbiAgICAgICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAgICAgLy8gWW91IGNhbiBieXBhc3MgdGhlICdhbHdheXMgYXN5bmNocm9ub3VzJyBmZWF0dXJlIGJ5IHB1dHRpbmcgdGhlIHN5bmNocm9ub3VzOnRydWVcclxuICAgICAgICAgICAgICAgIC8vIGZsYWcgb24geW91ciBjb21wb25lbnQgY29uZmlndXJhdGlvbiB3aGVuIHlvdSByZWdpc3RlciBpdC5cclxuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWRBc3luYyB8fCBpc1N5bmNocm9ub3VzQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IG5vdGlmeVN1YnNjcmliZXJzIGlnbm9yZXMgYW55IGRlcGVuZGVuY2llcyByZWFkIHdpdGhpbiB0aGUgY2FsbGJhY2suXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gbG9hZGVyUmVnaXN0cnlCZWhhdmlvcnMuanMgZm9yIHJlYXNvbmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliYWJsZVsnbm90aWZ5U3Vic2NyaWJlcnMnXShkZWZpbml0aW9uKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAga28udGFza3Muc2NoZWR1bGUoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliYWJsZVsnbm90aWZ5U3Vic2NyaWJlcnMnXShkZWZpbml0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbXBsZXRlZEFzeW5jID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdWJzY3JpYmFibGUuc3Vic2NyaWJlKGNhbGxiYWNrKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYmVnaW5Mb2FkaW5nQ29tcG9uZW50KGNvbXBvbmVudE5hbWUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgZ2V0Rmlyc3RSZXN1bHRGcm9tTG9hZGVycygnZ2V0Q29uZmlnJywgW2NvbXBvbmVudE5hbWVdLCBmdW5jdGlvbihjb25maWcpIHtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIGNvbmZpZywgc28gbm93IGxvYWQgaXRzIGRlZmluaXRpb25cclxuICAgICAgICAgICAgICAgIGdldEZpcnN0UmVzdWx0RnJvbUxvYWRlcnMoJ2xvYWRDb21wb25lbnQnLCBbY29tcG9uZW50TmFtZSwgY29uZmlnXSwgZnVuY3Rpb24oZGVmaW5pdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRlZmluaXRpb24sIGNvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIFRoZSBjb21wb25lbnQgaGFzIG5vIGNvbmZpZyAtIGl0J3MgdW5rbm93biB0byBhbGwgdGhlIGxvYWRlcnMuXHJcbiAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYW4gZXJyb3IgKGUuZy4sIGEgbW9kdWxlIGxvYWRpbmcgZXJyb3IpIC0gdGhhdCB3b3VsZCBhYm9ydCB0aGVcclxuICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MgYW5kIHRoaXMgY2FsbGJhY2sgd291bGQgbm90IHJ1bi4gRm9yIHRoaXMgY2FsbGJhY2sgdG8gcnVuLCBhbGwgbG9hZGVycyBtdXN0XHJcbiAgICAgICAgICAgICAgICAvLyBoYXZlIGNvbmZpcm1lZCB0aGV5IGRvbid0IGtub3cgYWJvdXQgdGhpcyBjb21wb25lbnQuXHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldEZpcnN0UmVzdWx0RnJvbUxvYWRlcnMobWV0aG9kTmFtZSwgYXJnc0V4Y2VwdENhbGxiYWNrLCBjYWxsYmFjaywgY2FuZGlkYXRlTG9hZGVycykge1xyXG4gICAgICAgIC8vIE9uIHRoZSBmaXJzdCBjYWxsIGluIHRoZSBzdGFjaywgc3RhcnQgd2l0aCB0aGUgZnVsbCBzZXQgb2YgbG9hZGVyc1xyXG4gICAgICAgIGlmICghY2FuZGlkYXRlTG9hZGVycykge1xyXG4gICAgICAgICAgICBjYW5kaWRhdGVMb2FkZXJzID0ga28uY29tcG9uZW50c1snbG9hZGVycyddLnNsaWNlKDApOyAvLyBVc2UgYSBjb3B5LCBiZWNhdXNlIHdlJ2xsIGJlIG11dGF0aW5nIHRoaXMgYXJyYXlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRyeSB0aGUgbmV4dCBjYW5kaWRhdGVcclxuICAgICAgICB2YXIgY3VycmVudENhbmRpZGF0ZUxvYWRlciA9IGNhbmRpZGF0ZUxvYWRlcnMuc2hpZnQoKTtcclxuICAgICAgICBpZiAoY3VycmVudENhbmRpZGF0ZUxvYWRlcikge1xyXG4gICAgICAgICAgICB2YXIgbWV0aG9kSW5zdGFuY2UgPSBjdXJyZW50Q2FuZGlkYXRlTG9hZGVyW21ldGhvZE5hbWVdO1xyXG4gICAgICAgICAgICBpZiAobWV0aG9kSW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciB3YXNBYm9ydGVkID0gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgc3luY2hyb25vdXNSZXR1cm5WYWx1ZSA9IG1ldGhvZEluc3RhbmNlLmFwcGx5KGN1cnJlbnRDYW5kaWRhdGVMb2FkZXIsIGFyZ3NFeGNlcHRDYWxsYmFjay5jb25jYXQoZnVuY3Rpb24ocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YXNBYm9ydGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgY2FuZGlkYXRlIHJldHVybmVkIGEgdmFsdWUuIFVzZSBpdC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdGhlIG5leHQgY2FuZGlkYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGaXJzdFJlc3VsdEZyb21Mb2FkZXJzKG1ldGhvZE5hbWUsIGFyZ3NFeGNlcHRDYWxsYmFjaywgY2FsbGJhY2ssIGNhbmRpZGF0ZUxvYWRlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSwgbG9hZGVycyBtYXkgbm90IHJldHVybiBhbnl0aGluZyBzeW5jaHJvbm91c2x5LiBUaGlzIGxlYXZlcyBvcGVuIHRoZSBwb3NzaWJpbGl0eVxyXG4gICAgICAgICAgICAgICAgLy8gdGhhdCB3ZSdsbCBleHRlbmQgdGhlIEFQSSB0byBzdXBwb3J0IHN5bmNocm9ub3VzIHJldHVybiB2YWx1ZXMgaW4gdGhlIGZ1dHVyZS4gSXQgd29uJ3QgYmVcclxuICAgICAgICAgICAgICAgIC8vIGEgYnJlYWtpbmcgY2hhbmdlLCBiZWNhdXNlIGN1cnJlbnRseSBubyBsb2FkZXIgaXMgYWxsb3dlZCB0byByZXR1cm4gYW55dGhpbmcgZXhjZXB0IHVuZGVmaW5lZC5cclxuICAgICAgICAgICAgICAgIGlmIChzeW5jaHJvbm91c1JldHVyblZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB3YXNBYm9ydGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTWV0aG9kIHRvIHN1cHByZXNzIGV4Y2VwdGlvbnMgd2lsbCByZW1haW4gdW5kb2N1bWVudGVkLiBUaGlzIGlzIG9ubHkgdG8ga2VlcFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEtPJ3Mgc3BlY3MgcnVubmluZyB0aWRpbHksIHNpbmNlIHdlIGNhbiBvYnNlcnZlIHRoZSBsb2FkaW5nIGdvdCBhYm9ydGVkIHdpdGhvdXRcclxuICAgICAgICAgICAgICAgICAgICAvLyBoYXZpbmcgZXhjZXB0aW9ucyBjbHV0dGVyaW5nIHVwIHRoZSBjb25zb2xlIHRvby5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRDYW5kaWRhdGVMb2FkZXJbJ3N1cHByZXNzTG9hZGVyRXhjZXB0aW9ucyddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50IGxvYWRlcnMgbXVzdCBzdXBwbHkgdmFsdWVzIGJ5IGludm9raW5nIHRoZSBjYWxsYmFjaywgbm90IGJ5IHJldHVybmluZyB2YWx1ZXMgc3luY2hyb25vdXNseS4nKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbmRpZGF0ZSBkb2Vzbid0IGhhdmUgdGhlIHJlbGV2YW50IGhhbmRsZXIuIFN5bmNocm9ub3VzbHkgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmUuXHJcbiAgICAgICAgICAgICAgICBnZXRGaXJzdFJlc3VsdEZyb21Mb2FkZXJzKG1ldGhvZE5hbWUsIGFyZ3NFeGNlcHRDYWxsYmFjaywgY2FsbGJhY2ssIGNhbmRpZGF0ZUxvYWRlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gTm8gY2FuZGlkYXRlcyByZXR1cm5lZCBhIHZhbHVlXHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBSZWZlcmVuY2UgdGhlIGxvYWRlcnMgdmlhIHN0cmluZyBuYW1lIHNvIGl0J3MgcG9zc2libGUgZm9yIGRldmVsb3BlcnNcclxuICAgIC8vIHRvIHJlcGxhY2UgdGhlIHdob2xlIGFycmF5IGJ5IGFzc2lnbmluZyB0byBrby5jb21wb25lbnRzLmxvYWRlcnNcclxuICAgIGtvLmNvbXBvbmVudHNbJ2xvYWRlcnMnXSA9IFtdO1xyXG5cclxuICAgIGtvLmV4cG9ydFN5bWJvbCgnY29tcG9uZW50cycsIGtvLmNvbXBvbmVudHMpO1xyXG4gICAga28uZXhwb3J0U3ltYm9sKCdjb21wb25lbnRzLmdldCcsIGtvLmNvbXBvbmVudHMuZ2V0KTtcclxuICAgIGtvLmV4cG9ydFN5bWJvbCgnY29tcG9uZW50cy5jbGVhckNhY2hlZERlZmluaXRpb24nLCBrby5jb21wb25lbnRzLmNsZWFyQ2FjaGVkRGVmaW5pdGlvbik7XHJcbn0pKCk7XHJcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcclxuXHJcbiAgICAvLyBUaGUgZGVmYXVsdCBsb2FkZXIgaXMgcmVzcG9uc2libGUgZm9yIHR3byB0aGluZ3M6XHJcbiAgICAvLyAxLiBNYWludGFpbmluZyB0aGUgZGVmYXVsdCBpbi1tZW1vcnkgcmVnaXN0cnkgb2YgY29tcG9uZW50IGNvbmZpZ3VyYXRpb24gb2JqZWN0c1xyXG4gICAgLy8gICAgKGkuZS4sIHRoZSB0aGluZyB5b3UncmUgd3JpdGluZyB0byB3aGVuIHlvdSBjYWxsIGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoc29tZU5hbWUsIC4uLikpXHJcbiAgICAvLyAyLiBBbnN3ZXJpbmcgcmVxdWVzdHMgZm9yIGNvbXBvbmVudHMgYnkgZmV0Y2hpbmcgY29uZmlndXJhdGlvbiBvYmplY3RzXHJcbiAgICAvLyAgICBmcm9tIHRoYXQgZGVmYXVsdCBpbi1tZW1vcnkgcmVnaXN0cnkgYW5kIHJlc29sdmluZyB0aGVtIGludG8gc3RhbmRhcmRcclxuICAgIC8vICAgIGNvbXBvbmVudCBkZWZpbml0aW9uIG9iamVjdHMgKG9mIHRoZSBmb3JtIHsgY3JlYXRlVmlld01vZGVsOiAuLi4sIHRlbXBsYXRlOiAuLi4gfSlcclxuICAgIC8vIEN1c3RvbSBsb2FkZXJzIG1heSBvdmVycmlkZSBlaXRoZXIgb2YgdGhlc2UgZmFjaWxpdGllcywgaS5lLixcclxuICAgIC8vIDEuIFRvIHN1cHBseSBjb25maWd1cmF0aW9uIG9iamVjdHMgZnJvbSBzb21lIG90aGVyIHNvdXJjZSAoZS5nLiwgY29udmVudGlvbnMpXHJcbiAgICAvLyAyLiBPciwgdG8gcmVzb2x2ZSBjb25maWd1cmF0aW9uIG9iamVjdHMgYnkgbG9hZGluZyB2aWV3bW9kZWxzL3RlbXBsYXRlcyB2aWEgYXJiaXRyYXJ5IGxvZ2ljLlxyXG5cclxuICAgIHZhciBkZWZhdWx0Q29uZmlnUmVnaXN0cnkgPSB7fTtcclxuXHJcbiAgICBrby5jb21wb25lbnRzLnJlZ2lzdGVyID0gZnVuY3Rpb24oY29tcG9uZW50TmFtZSwgY29uZmlnKSB7XHJcbiAgICAgICAgaWYgKCFjb25maWcpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbmZpZ3VyYXRpb24gZm9yICcgKyBjb21wb25lbnROYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChrby5jb21wb25lbnRzLmlzUmVnaXN0ZXJlZChjb21wb25lbnROYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBvbmVudCAnICsgY29tcG9uZW50TmFtZSArICcgaXMgYWxyZWFkeSByZWdpc3RlcmVkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWZhdWx0Q29uZmlnUmVnaXN0cnlbY29tcG9uZW50TmFtZV0gPSBjb25maWc7XHJcbiAgICB9O1xyXG5cclxuICAgIGtvLmNvbXBvbmVudHMuaXNSZWdpc3RlcmVkID0gZnVuY3Rpb24oY29tcG9uZW50TmFtZSkge1xyXG4gICAgICAgIHJldHVybiBkZWZhdWx0Q29uZmlnUmVnaXN0cnkuaGFzT3duUHJvcGVydHkoY29tcG9uZW50TmFtZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGtvLmNvbXBvbmVudHMudW5yZWdpc3RlciA9IGZ1bmN0aW9uKGNvbXBvbmVudE5hbWUpIHtcclxuICAgICAgICBkZWxldGUgZGVmYXVsdENvbmZpZ1JlZ2lzdHJ5W2NvbXBvbmVudE5hbWVdO1xyXG4gICAgICAgIGtvLmNvbXBvbmVudHMuY2xlYXJDYWNoZWREZWZpbml0aW9uKGNvbXBvbmVudE5hbWUpO1xyXG4gICAgfTtcclxuXHJcbiAgICBrby5jb21wb25lbnRzLmRlZmF1bHRMb2FkZXIgPSB7XHJcbiAgICAgICAgJ2dldENvbmZpZyc6IGZ1bmN0aW9uKGNvbXBvbmVudE5hbWUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBkZWZhdWx0Q29uZmlnUmVnaXN0cnkuaGFzT3duUHJvcGVydHkoY29tcG9uZW50TmFtZSlcclxuICAgICAgICAgICAgICAgID8gZGVmYXVsdENvbmZpZ1JlZ2lzdHJ5W2NvbXBvbmVudE5hbWVdXHJcbiAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgJ2xvYWRDb21wb25lbnQnOiBmdW5jdGlvbihjb21wb25lbnROYW1lLCBjb25maWcsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHZhciBlcnJvckNhbGxiYWNrID0gbWFrZUVycm9yQ2FsbGJhY2soY29tcG9uZW50TmFtZSk7XHJcbiAgICAgICAgICAgIHBvc3NpYmx5R2V0Q29uZmlnRnJvbUFtZChlcnJvckNhbGxiYWNrLCBjb25maWcsIGZ1bmN0aW9uKGxvYWRlZENvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZUNvbmZpZyhjb21wb25lbnROYW1lLCBlcnJvckNhbGxiYWNrLCBsb2FkZWRDb25maWcsIGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgJ2xvYWRUZW1wbGF0ZSc6IGZ1bmN0aW9uKGNvbXBvbmVudE5hbWUsIHRlbXBsYXRlQ29uZmlnLCBjYWxsYmFjaykge1xyXG4gICAgICAgICAgICByZXNvbHZlVGVtcGxhdGUobWFrZUVycm9yQ2FsbGJhY2soY29tcG9uZW50TmFtZSksIHRlbXBsYXRlQ29uZmlnLCBjYWxsYmFjayk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgJ2xvYWRWaWV3TW9kZWwnOiBmdW5jdGlvbihjb21wb25lbnROYW1lLCB2aWV3TW9kZWxDb25maWcsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmVWaWV3TW9kZWwobWFrZUVycm9yQ2FsbGJhY2soY29tcG9uZW50TmFtZSksIHZpZXdNb2RlbENvbmZpZywgY2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdmFyIGNyZWF0ZVZpZXdNb2RlbEtleSA9ICdjcmVhdGVWaWV3TW9kZWwnO1xyXG5cclxuICAgIC8vIFRha2VzIGEgY29uZmlnIG9iamVjdCBvZiB0aGUgZm9ybSB7IHRlbXBsYXRlOiAuLi4sIHZpZXdNb2RlbDogLi4uIH0sIGFuZCBhc3luY2hyb25vdXNseSBjb252ZXJ0IGl0XHJcbiAgICAvLyBpbnRvIHRoZSBzdGFuZGFyZCBjb21wb25lbnQgZGVmaW5pdGlvbiBmb3JtYXQ6XHJcbiAgICAvLyAgICB7IHRlbXBsYXRlOiA8QXJyYXlPZkRvbU5vZGVzPiwgY3JlYXRlVmlld01vZGVsOiBmdW5jdGlvbihwYXJhbXMsIGNvbXBvbmVudEluZm8pIHsgLi4uIH0gfS5cclxuICAgIC8vIFNpbmNlIGJvdGggdGVtcGxhdGUgYW5kIHZpZXdNb2RlbCBtYXkgbmVlZCB0byBiZSByZXNvbHZlZCBhc3luY2hyb25vdXNseSwgYm90aCB0YXNrcyBhcmUgcGVyZm9ybWVkXHJcbiAgICAvLyBpbiBwYXJhbGxlbCwgYW5kIHRoZSByZXN1bHRzIGpvaW5lZCB3aGVuIGJvdGggYXJlIHJlYWR5LiBXZSBkb24ndCBkZXBlbmQgb24gYW55IHByb21pc2VzIGluZnJhc3RydWN0dXJlLFxyXG4gICAgLy8gc28gdGhpcyBpcyBpbXBsZW1lbnRlZCBtYW51YWxseSBiZWxvdy5cclxuICAgIGZ1bmN0aW9uIHJlc29sdmVDb25maWcoY29tcG9uZW50TmFtZSwgZXJyb3JDYWxsYmFjaywgY29uZmlnLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB7fSxcclxuICAgICAgICAgICAgbWFrZUNhbGxCYWNrV2hlblplcm8gPSAyLFxyXG4gICAgICAgICAgICB0cnlJc3N1ZUNhbGxiYWNrID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoLS1tYWtlQ2FsbEJhY2tXaGVuWmVybyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRlbXBsYXRlQ29uZmlnID0gY29uZmlnWyd0ZW1wbGF0ZSddLFxyXG4gICAgICAgICAgICB2aWV3TW9kZWxDb25maWcgPSBjb25maWdbJ3ZpZXdNb2RlbCddO1xyXG5cclxuICAgICAgICBpZiAodGVtcGxhdGVDb25maWcpIHtcclxuICAgICAgICAgICAgcG9zc2libHlHZXRDb25maWdGcm9tQW1kKGVycm9yQ2FsbGJhY2ssIHRlbXBsYXRlQ29uZmlnLCBmdW5jdGlvbihsb2FkZWRDb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGtvLmNvbXBvbmVudHMuX2dldEZpcnN0UmVzdWx0RnJvbUxvYWRlcnMoJ2xvYWRUZW1wbGF0ZScsIFtjb21wb25lbnROYW1lLCBsb2FkZWRDb25maWddLCBmdW5jdGlvbihyZXNvbHZlZFRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wyd0ZW1wbGF0ZSddID0gcmVzb2x2ZWRUZW1wbGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB0cnlJc3N1ZUNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdHJ5SXNzdWVDYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZpZXdNb2RlbENvbmZpZykge1xyXG4gICAgICAgICAgICBwb3NzaWJseUdldENvbmZpZ0Zyb21BbWQoZXJyb3JDYWxsYmFjaywgdmlld01vZGVsQ29uZmlnLCBmdW5jdGlvbihsb2FkZWRDb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGtvLmNvbXBvbmVudHMuX2dldEZpcnN0UmVzdWx0RnJvbUxvYWRlcnMoJ2xvYWRWaWV3TW9kZWwnLCBbY29tcG9uZW50TmFtZSwgbG9hZGVkQ29uZmlnXSwgZnVuY3Rpb24ocmVzb2x2ZWRWaWV3TW9kZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbY3JlYXRlVmlld01vZGVsS2V5XSA9IHJlc29sdmVkVmlld01vZGVsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeUlzc3VlQ2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0cnlJc3N1ZUNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlc29sdmVUZW1wbGF0ZShlcnJvckNhbGxiYWNrLCB0ZW1wbGF0ZUNvbmZpZywgY2FsbGJhY2spIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRlbXBsYXRlQ29uZmlnID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAvLyBNYXJrdXAgLSBwYXJzZSBpdFxyXG4gICAgICAgICAgICBjYWxsYmFjayhrby51dGlscy5wYXJzZUh0bWxGcmFnbWVudCh0ZW1wbGF0ZUNvbmZpZykpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGVtcGxhdGVDb25maWcgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICAvLyBBc3N1bWUgYWxyZWFkeSBhbiBhcnJheSBvZiBET00gbm9kZXMgLSBwYXNzIHRocm91Z2ggdW5jaGFuZ2VkXHJcbiAgICAgICAgICAgIGNhbGxiYWNrKHRlbXBsYXRlQ29uZmlnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGlzRG9jdW1lbnRGcmFnbWVudCh0ZW1wbGF0ZUNvbmZpZykpIHtcclxuICAgICAgICAgICAgLy8gRG9jdW1lbnQgZnJhZ21lbnQgLSB1c2UgaXRzIGNoaWxkIG5vZGVzXHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGtvLnV0aWxzLm1ha2VBcnJheSh0ZW1wbGF0ZUNvbmZpZy5jaGlsZE5vZGVzKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0ZW1wbGF0ZUNvbmZpZ1snZWxlbWVudCddKSB7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGVtcGxhdGVDb25maWdbJ2VsZW1lbnQnXTtcclxuICAgICAgICAgICAgaWYgKGlzRG9tRWxlbWVudChlbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgLy8gRWxlbWVudCBpbnN0YW5jZSAtIGNvcHkgaXRzIGNoaWxkIG5vZGVzXHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhjbG9uZU5vZGVzRnJvbVRlbXBsYXRlU291cmNlRWxlbWVudChlbGVtZW50KSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBFbGVtZW50IElEIC0gZmluZCBpdCwgdGhlbiBjb3B5IGl0cyBjaGlsZCBub2Rlc1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsZW1JbnN0YW5jZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1JbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGNsb25lTm9kZXNGcm9tVGVtcGxhdGVTb3VyY2VFbGVtZW50KGVsZW1JbnN0YW5jZSkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKCdDYW5ub3QgZmluZCBlbGVtZW50IHdpdGggSUQgJyArIGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjaygnVW5rbm93biBlbGVtZW50IHR5cGU6ICcgKyBlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soJ1Vua25vd24gdGVtcGxhdGUgdmFsdWU6ICcgKyB0ZW1wbGF0ZUNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlc29sdmVWaWV3TW9kZWwoZXJyb3JDYWxsYmFjaywgdmlld01vZGVsQ29uZmlnLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygdmlld01vZGVsQ29uZmlnID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIC8vIENvbnN0cnVjdG9yIC0gY29udmVydCB0byBzdGFuZGFyZCBmYWN0b3J5IGZ1bmN0aW9uIGZvcm1hdFxyXG4gICAgICAgICAgICAvLyBCeSBkZXNpZ24sIHRoaXMgZG9lcyAqbm90KiBzdXBwbHkgY29tcG9uZW50SW5mbyB0byB0aGUgY29uc3RydWN0b3IsIGFzIHRoZSBpbnRlbnQgaXMgdGhhdFxyXG4gICAgICAgICAgICAvLyBjb21wb25lbnRJbmZvIGNvbnRhaW5zIG5vbi12aWV3bW9kZWwgZGF0YSAoZS5nLiwgdGhlIGNvbXBvbmVudCdzIGVsZW1lbnQpIHRoYXQgc2hvdWxkIG9ubHlcclxuICAgICAgICAgICAgLy8gYmUgdXNlZCBpbiBmYWN0b3J5IGZ1bmN0aW9ucywgbm90IHZpZXdtb2RlbCBjb25zdHJ1Y3RvcnMuXHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGZ1bmN0aW9uIChwYXJhbXMgLyosIGNvbXBvbmVudEluZm8gKi8pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdmlld01vZGVsQ29uZmlnKHBhcmFtcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZpZXdNb2RlbENvbmZpZ1tjcmVhdGVWaWV3TW9kZWxLZXldID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIC8vIEFscmVhZHkgYSBmYWN0b3J5IGZ1bmN0aW9uIC0gdXNlIGl0IGFzLWlzXHJcbiAgICAgICAgICAgIGNhbGxiYWNrKHZpZXdNb2RlbENvbmZpZ1tjcmVhdGVWaWV3TW9kZWxLZXldKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCdpbnN0YW5jZScgaW4gdmlld01vZGVsQ29uZmlnKSB7XHJcbiAgICAgICAgICAgIC8vIEZpeGVkIG9iamVjdCBpbnN0YW5jZSAtIHByb21vdGUgdG8gY3JlYXRlVmlld01vZGVsIGZvcm1hdCBmb3IgQVBJIGNvbnNpc3RlbmN5XHJcbiAgICAgICAgICAgIHZhciBmaXhlZEluc3RhbmNlID0gdmlld01vZGVsQ29uZmlnWydpbnN0YW5jZSddO1xyXG4gICAgICAgICAgICBjYWxsYmFjayhmdW5jdGlvbiAocGFyYW1zLCBjb21wb25lbnRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZml4ZWRJbnN0YW5jZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICgndmlld01vZGVsJyBpbiB2aWV3TW9kZWxDb25maWcpIHtcclxuICAgICAgICAgICAgLy8gUmVzb2x2ZWQgQU1EIG1vZHVsZSB3aG9zZSB2YWx1ZSBpcyBvZiB0aGUgZm9ybSB7IHZpZXdNb2RlbDogLi4uIH1cclxuICAgICAgICAgICAgcmVzb2x2ZVZpZXdNb2RlbChlcnJvckNhbGxiYWNrLCB2aWV3TW9kZWxDb25maWdbJ3ZpZXdNb2RlbCddLCBjYWxsYmFjayk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXJyb3JDYWxsYmFjaygnVW5rbm93biB2aWV3TW9kZWwgdmFsdWU6ICcgKyB2aWV3TW9kZWxDb25maWcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjbG9uZU5vZGVzRnJvbVRlbXBsYXRlU291cmNlRWxlbWVudChlbGVtSW5zdGFuY2UpIHtcclxuICAgICAgICBzd2l0Y2ggKGtvLnV0aWxzLnRhZ05hbWVMb3dlcihlbGVtSW5zdGFuY2UpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NjcmlwdCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ga28udXRpbHMucGFyc2VIdG1sRnJhZ21lbnQoZWxlbUluc3RhbmNlLnRleHQpO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0YXJlYSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ga28udXRpbHMucGFyc2VIdG1sRnJhZ21lbnQoZWxlbUluc3RhbmNlLnZhbHVlKTtcclxuICAgICAgICAgICAgY2FzZSAndGVtcGxhdGUnOlxyXG4gICAgICAgICAgICAgICAgLy8gRm9yIGJyb3dzZXJzIHdpdGggcHJvcGVyIDx0ZW1wbGF0ZT4gZWxlbWVudCBzdXBwb3J0IChpLmUuLCB3aGVyZSB0aGUgLmNvbnRlbnQgcHJvcGVydHlcclxuICAgICAgICAgICAgICAgIC8vIGdpdmVzIGEgZG9jdW1lbnQgZnJhZ21lbnQpLCB1c2UgdGhhdCBkb2N1bWVudCBmcmFnbWVudC5cclxuICAgICAgICAgICAgICAgIGlmIChpc0RvY3VtZW50RnJhZ21lbnQoZWxlbUluc3RhbmNlLmNvbnRlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtvLnV0aWxzLmNsb25lTm9kZXMoZWxlbUluc3RhbmNlLmNvbnRlbnQuY2hpbGROb2Rlcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZWd1bGFyIGVsZW1lbnRzIHN1Y2ggYXMgPGRpdj4sIGFuZCA8dGVtcGxhdGU+IGVsZW1lbnRzIG9uIG9sZCBicm93c2VycyB0aGF0IGRvbid0IHJlYWxseVxyXG4gICAgICAgIC8vIHVuZGVyc3RhbmQgPHRlbXBsYXRlPiBhbmQganVzdCB0cmVhdCBpdCBhcyBhIHJlZ3VsYXIgY29udGFpbmVyXHJcbiAgICAgICAgcmV0dXJuIGtvLnV0aWxzLmNsb25lTm9kZXMoZWxlbUluc3RhbmNlLmNoaWxkTm9kZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGlzRG9tRWxlbWVudChvYmopIHtcclxuICAgICAgICBpZiAod2luZG93WydIVE1MRWxlbWVudCddKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqICYmIG9iai50YWdOYW1lICYmIG9iai5ub2RlVHlwZSA9PT0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaXNEb2N1bWVudEZyYWdtZW50KG9iaikge1xyXG4gICAgICAgIGlmICh3aW5kb3dbJ0RvY3VtZW50RnJhZ21lbnQnXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqICYmIG9iai5ub2RlVHlwZSA9PT0gMTE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHBvc3NpYmx5R2V0Q29uZmlnRnJvbUFtZChlcnJvckNhbGxiYWNrLCBjb25maWcsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWdbJ3JlcXVpcmUnXSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgLy8gVGhlIGNvbmZpZyBpcyB0aGUgdmFsdWUgb2YgYW4gQU1EIG1vZHVsZVxyXG4gICAgICAgICAgICBpZiAoYW1kUmVxdWlyZSB8fCB3aW5kb3dbJ3JlcXVpcmUnXSkge1xyXG4gICAgICAgICAgICAgICAgKGFtZFJlcXVpcmUgfHwgd2luZG93WydyZXF1aXJlJ10pKFtjb25maWdbJ3JlcXVpcmUnXV0sIGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soJ1VzZXMgcmVxdWlyZSwgYnV0IG5vIEFNRCBsb2FkZXIgaXMgcHJlc2VudCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2FsbGJhY2soY29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbWFrZUVycm9yQ2FsbGJhY2soY29tcG9uZW50TmFtZSkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBvbmVudCBcXCcnICsgY29tcG9uZW50TmFtZSArICdcXCc6ICcgKyBtZXNzYWdlKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGtvLmV4cG9ydFN5bWJvbCgnY29tcG9uZW50cy5yZWdpc3RlcicsIGtvLmNvbXBvbmVudHMucmVnaXN0ZXIpO1xyXG4gICAga28uZXhwb3J0U3ltYm9sKCdjb21wb25lbnRzLmlzUmVnaXN0ZXJlZCcsIGtvLmNvbXBvbmVudHMuaXNSZWdpc3RlcmVkKTtcclxuICAgIGtvLmV4cG9ydFN5bWJvbCgnY29tcG9uZW50cy51bnJlZ2lzdGVyJywga28uY29tcG9uZW50cy51bnJlZ2lzdGVyKTtcclxuXHJcbiAgICAvLyBFeHBvc2UgdGhlIGRlZmF1bHQgbG9hZGVyIHNvIHRoYXQgZGV2ZWxvcGVycyBjYW4gZGlyZWN0bHkgYXNrIGl0IGZvciBjb25maWd1cmF0aW9uXHJcbiAgICAvLyBvciB0byByZXNvbHZlIGNvbmZpZ3VyYXRpb25cclxuICAgIGtvLmV4cG9ydFN5bWJvbCgnY29tcG9uZW50cy5kZWZhdWx0TG9hZGVyJywga28uY29tcG9uZW50cy5kZWZhdWx0TG9hZGVyKTtcclxuXHJcbiAgICAvLyBCeSBkZWZhdWx0LCB0aGUgZGVmYXVsdCBsb2FkZXIgaXMgdGhlIG9ubHkgcmVnaXN0ZXJlZCBjb21wb25lbnQgbG9hZGVyXHJcbiAgICBrby5jb21wb25lbnRzWydsb2FkZXJzJ10ucHVzaChrby5jb21wb25lbnRzLmRlZmF1bHRMb2FkZXIpO1xyXG5cclxuICAgIC8vIFByaXZhdGVseSBleHBvc2UgdGhlIHVuZGVybHlpbmcgY29uZmlnIHJlZ2lzdHJ5IGZvciB1c2UgaW4gb2xkLUlFIHNoaW1cclxuICAgIGtvLmNvbXBvbmVudHMuX2FsbFJlZ2lzdGVyZWRDb21wb25lbnRzID0gZGVmYXVsdENvbmZpZ1JlZ2lzdHJ5O1xyXG59KSgpO1xyXG4oZnVuY3Rpb24gKHVuZGVmaW5lZCkge1xyXG4gICAgLy8gT3ZlcnJpZGFibGUgQVBJIGZvciBkZXRlcm1pbmluZyB3aGljaCBjb21wb25lbnQgbmFtZSBhcHBsaWVzIHRvIGEgZ2l2ZW4gbm9kZS4gQnkgb3ZlcnJpZGluZyB0aGlzLFxyXG4gICAgLy8geW91IGNhbiBmb3IgZXhhbXBsZSBtYXAgc3BlY2lmaWMgdGFnTmFtZXMgdG8gY29tcG9uZW50cyB0aGF0IGFyZSBub3QgcHJlcmVnaXN0ZXJlZC5cclxuICAgIGtvLmNvbXBvbmVudHNbJ2dldENvbXBvbmVudE5hbWVGb3JOb2RlJ10gPSBmdW5jdGlvbihub2RlKSB7XHJcbiAgICAgICAgdmFyIHRhZ05hbWVMb3dlciA9IGtvLnV0aWxzLnRhZ05hbWVMb3dlcihub2RlKTtcclxuICAgICAgICBpZiAoa28uY29tcG9uZW50cy5pc1JlZ2lzdGVyZWQodGFnTmFtZUxvd2VyKSkge1xyXG4gICAgICAgICAgICAvLyBUcnkgdG8gZGV0ZXJtaW5lIHRoYXQgdGhpcyBub2RlIGNhbiBiZSBjb25zaWRlcmVkIGEgKmN1c3RvbSogZWxlbWVudDsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9rbm9ja291dC9rbm9ja291dC9pc3N1ZXMvMTYwM1xyXG4gICAgICAgICAgICBpZiAodGFnTmFtZUxvd2VyLmluZGV4T2YoJy0nKSAhPSAtMSB8fCAoJycgKyBub2RlKSA9PSBcIltvYmplY3QgSFRNTFVua25vd25FbGVtZW50XVwiIHx8IChrby51dGlscy5pZVZlcnNpb24gPD0gOCAmJiBub2RlLnRhZ05hbWUgPT09IHRhZ05hbWVMb3dlcikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0YWdOYW1lTG93ZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGtvLmNvbXBvbmVudHMuYWRkQmluZGluZ3NGb3JDdXN0b21FbGVtZW50ID0gZnVuY3Rpb24oYWxsQmluZGluZ3MsIG5vZGUsIGJpbmRpbmdDb250ZXh0LCB2YWx1ZUFjY2Vzc29ycykge1xyXG4gICAgICAgIC8vIERldGVybWluZSBpZiBpdCdzIHJlYWxseSBhIGN1c3RvbSBlbGVtZW50IG1hdGNoaW5nIGEgY29tcG9uZW50XHJcbiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBrby5jb21wb25lbnRzWydnZXRDb21wb25lbnROYW1lRm9yTm9kZSddKG5vZGUpO1xyXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSXQgZG9lcyByZXByZXNlbnQgYSBjb21wb25lbnQsIHNvIGFkZCBhIGNvbXBvbmVudCBiaW5kaW5nIGZvciBpdFxyXG4gICAgICAgICAgICAgICAgYWxsQmluZGluZ3MgPSBhbGxCaW5kaW5ncyB8fCB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYWxsQmluZGluZ3NbJ2NvbXBvbmVudCddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQXZvaWQgc2lsZW50bHkgb3ZlcndyaXRpbmcgc29tZSBvdGhlciAnY29tcG9uZW50JyBiaW5kaW5nIHRoYXQgbWF5IGFscmVhZHkgYmUgb24gdGhlIGVsZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgdGhlIFwiY29tcG9uZW50XCIgYmluZGluZyBvbiBhIGN1c3RvbSBlbGVtZW50IG1hdGNoaW5nIGEgY29tcG9uZW50Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudEJpbmRpbmdWYWx1ZSA9IHsgJ25hbWUnOiBjb21wb25lbnROYW1lLCAncGFyYW1zJzogZ2V0Q29tcG9uZW50UGFyYW1zRnJvbUN1c3RvbUVsZW1lbnQobm9kZSwgYmluZGluZ0NvbnRleHQpIH07XHJcblxyXG4gICAgICAgICAgICAgICAgYWxsQmluZGluZ3NbJ2NvbXBvbmVudCddID0gdmFsdWVBY2Nlc3NvcnNcclxuICAgICAgICAgICAgICAgICAgICA/IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29tcG9uZW50QmluZGluZ1ZhbHVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiBjb21wb25lbnRCaW5kaW5nVmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhbGxCaW5kaW5ncztcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbmF0aXZlQmluZGluZ1Byb3ZpZGVySW5zdGFuY2UgPSBuZXcga28uYmluZGluZ1Byb3ZpZGVyKCk7XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50UGFyYW1zRnJvbUN1c3RvbUVsZW1lbnQoZWxlbSwgYmluZGluZ0NvbnRleHQpIHtcclxuICAgICAgICB2YXIgcGFyYW1zQXR0cmlidXRlID0gZWxlbS5nZXRBdHRyaWJ1dGUoJ3BhcmFtcycpO1xyXG5cclxuICAgICAgICBpZiAocGFyYW1zQXR0cmlidXRlKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSBuYXRpdmVCaW5kaW5nUHJvdmlkZXJJbnN0YW5jZVsncGFyc2VCaW5kaW5nc1N0cmluZyddKHBhcmFtc0F0dHJpYnV0ZSwgYmluZGluZ0NvbnRleHQsIGVsZW0sIHsgJ3ZhbHVlQWNjZXNzb3JzJzogdHJ1ZSwgJ2JpbmRpbmdQYXJhbXMnOiB0cnVlIH0pLFxyXG4gICAgICAgICAgICAgICAgcmF3UGFyYW1Db21wdXRlZFZhbHVlcyA9IGtvLnV0aWxzLm9iamVjdE1hcChwYXJhbXMsIGZ1bmN0aW9uKHBhcmFtVmFsdWUsIHBhcmFtTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrby5jb21wdXRlZChwYXJhbVZhbHVlLCBudWxsLCB7IGRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZDogZWxlbSB9KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ga28udXRpbHMub2JqZWN0TWFwKHJhd1BhcmFtQ29tcHV0ZWRWYWx1ZXMsIGZ1bmN0aW9uKHBhcmFtVmFsdWVDb21wdXRlZCwgcGFyYW1OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtVmFsdWUgPSBwYXJhbVZhbHVlQ29tcHV0ZWQucGVlaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIERvZXMgdGhlIGV2YWx1YXRpb24gb2YgdGhlIHBhcmFtZXRlciB2YWx1ZSB1bndyYXAgYW55IG9ic2VydmFibGVzP1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFyYW1WYWx1ZUNvbXB1dGVkLmlzQWN0aXZlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gaXQgZG9lc24ndCwgc28gdGhlcmUncyBubyBuZWVkIGZvciBhbnkgY29tcHV0ZWQgd3JhcHBlci4gSnVzdCBwYXNzIHRocm91Z2ggdGhlIHN1cHBsaWVkIHZhbHVlIGRpcmVjdGx5LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFeGFtcGxlOiBcInNvbWVWYWw6IGZpcnN0TmFtZSwgYWdlOiAxMjNcIiAod2hldGhlciBvciBub3QgZmlyc3ROYW1lIGlzIGFuIG9ic2VydmFibGUvY29tcHV0ZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFllcyBpdCBkb2VzLiBTdXBwbHkgYSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IHVud3JhcHMgYm90aCB0aGUgb3V0ZXIgKGJpbmRpbmcgZXhwcmVzc2lvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV2ZWwgb2Ygb2JzZXJ2YWJpbGl0eSwgYW5kIGFueSBpbm5lciAocmVzdWx0aW5nIG1vZGVsIHZhbHVlKSBsZXZlbCBvZiBvYnNlcnZhYmlsaXR5LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoZSBjb21wb25lbnQgZG9lc24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IG11bHRpcGxlIHVud3JhcHBpbmcuIElmIHRoZSB2YWx1ZSBpcyBhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdyaXRhYmxlIG9ic2VydmFibGUsIHRoZSBjb21wdXRlZCB3aWxsIGFsc28gYmUgd3JpdGFibGUgYW5kIHBhc3MgdGhlIHZhbHVlIG9uIHRvIHRoZSBvYnNlcnZhYmxlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga28uY29tcHV0ZWQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYWQnOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShwYXJhbVZhbHVlQ29tcHV0ZWQoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dyaXRlJzoga28uaXNXcml0ZWFibGVPYnNlcnZhYmxlKHBhcmFtVmFsdWUpICYmIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1WYWx1ZUNvbXB1dGVkKCkodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZDogZWxlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIEdpdmUgYWNjZXNzIHRvIHRoZSByYXcgY29tcHV0ZWRzLCBhcyBsb25nIGFzIHRoYXQgd291bGRuJ3Qgb3ZlcndyaXRlIGFueSBjdXN0b20gcGFyYW0gYWxzbyBjYWxsZWQgJyRyYXcnXHJcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgaW4gY2FzZSB0aGUgZGV2ZWxvcGVyIHdhbnRzIHRvIHJlYWN0IHRvIG91dGVyIChiaW5kaW5nKSBvYnNlcnZhYmlsaXR5IHNlcGFyYXRlbHkgZnJvbSBpbm5lclxyXG4gICAgICAgICAgICAvLyAobW9kZWwgdmFsdWUpIG9ic2VydmFiaWxpdHksIG9yIGluIGNhc2UgdGhlIG1vZGVsIHZhbHVlIG9ic2VydmFibGUgaGFzIHN1Ym9ic2VydmFibGVzLlxyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNPd25Qcm9wZXJ0eSgnJHJhdycpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbJyRyYXcnXSA9IHJhd1BhcmFtQ29tcHV0ZWRWYWx1ZXM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBhYnNlbmNlIG9mIGEgXCJwYXJhbXNcIiBhdHRyaWJ1dGUgaXMgdHJlYXRlZCB0aGUgc2FtZSBhcyB0aGUgcHJlc2VuY2Ugb2ZcclxuICAgICAgICAgICAgLy8gYW55IGVtcHR5IG9uZS4gT3RoZXJ3aXNlIGNvbXBvbmVudCB2aWV3bW9kZWxzIG5lZWQgc3BlY2lhbCBjb2RlIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90XHJcbiAgICAgICAgICAgIC8vICdwYXJhbXMnIG9yICdwYXJhbXMuJHJhdycgaXMgbnVsbC91bmRlZmluZWQgYmVmb3JlIHJlYWRpbmcgc3VicHJvcGVydGllcywgd2hpY2ggaXMgYW5ub3lpbmcuXHJcbiAgICAgICAgICAgIHJldHVybiB7ICckcmF3Jzoge30gfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIENvbXBhdGliaWxpdHkgY29kZSBmb3Igb2xkZXIgKHByZS1IVE1MNSkgSUUgYnJvd3NlcnNcclxuXHJcbiAgICBpZiAoa28udXRpbHMuaWVWZXJzaW9uIDwgOSkge1xyXG4gICAgICAgIC8vIFdoZW5ldmVyIHlvdSBwcmVyZWdpc3RlciBhIGNvbXBvbmVudCwgZW5hYmxlIGl0IGFzIGEgY3VzdG9tIGVsZW1lbnQgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnRcclxuICAgICAgICBrby5jb21wb25lbnRzWydyZWdpc3RlciddID0gKGZ1bmN0aW9uKG9yaWdpbmFsRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbXBvbmVudE5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSk7IC8vIEFsbG93cyBJRTw5IHRvIHBhcnNlIG1hcmt1cCBjb250YWluaW5nIHRoZSBjdXN0b20gZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRnVuY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKGtvLmNvbXBvbmVudHNbJ3JlZ2lzdGVyJ10pO1xyXG5cclxuICAgICAgICAvLyBXaGVuZXZlciB5b3UgY3JlYXRlIGEgZG9jdW1lbnQgZnJhZ21lbnQsIGVuYWJsZSBhbGwgcHJlcmVnaXN0ZXJlZCBjb21wb25lbnQgbmFtZXMgYXMgY3VzdG9tIGVsZW1lbnRzXHJcbiAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBpbm5lclNoaXYvalF1ZXJ5IEhUTUwgcGFyc2luZyBjb3JyZWN0bHkgaGFuZGxlIHRoZSBjdXN0b20gZWxlbWVudHNcclxuICAgICAgICBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID0gKGZ1bmN0aW9uKG9yaWdpbmFsRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld0RvY0ZyYWcgPSBvcmlnaW5hbEZ1bmN0aW9uKCksXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsQ29tcG9uZW50cyA9IGtvLmNvbXBvbmVudHMuX2FsbFJlZ2lzdGVyZWRDb21wb25lbnRzO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgY29tcG9uZW50TmFtZSBpbiBhbGxDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFsbENvbXBvbmVudHMuaGFzT3duUHJvcGVydHkoY29tcG9uZW50TmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RG9jRnJhZy5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdEb2NGcmFnO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQpO1xyXG4gICAgfVxyXG59KSgpOyhmdW5jdGlvbih1bmRlZmluZWQpIHtcclxuXHJcbiAgICB2YXIgY29tcG9uZW50TG9hZGluZ09wZXJhdGlvblVuaXF1ZUlkID0gMDtcclxuXHJcbiAgICBrby5iaW5kaW5nSGFuZGxlcnNbJ2NvbXBvbmVudCddID0ge1xyXG4gICAgICAgICdpbml0JzogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVBY2Nlc3NvciwgaWdub3JlZDEsIGlnbm9yZWQyLCBiaW5kaW5nQ29udGV4dCkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudFZpZXdNb2RlbCxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRMb2FkaW5nT3BlcmF0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICBkaXNwb3NlQXNzb2NpYXRlZENvbXBvbmVudFZpZXdNb2RlbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFZpZXdNb2RlbERpc3Bvc2UgPSBjdXJyZW50Vmlld01vZGVsICYmIGN1cnJlbnRWaWV3TW9kZWxbJ2Rpc3Bvc2UnXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRWaWV3TW9kZWxEaXNwb3NlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3TW9kZWxEaXNwb3NlLmNhbGwoY3VycmVudFZpZXdNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3TW9kZWwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEFueSBpbi1mbGlnaHQgbG9hZGluZyBvcGVyYXRpb24gaXMgbm8gbG9uZ2VyIHJlbGV2YW50LCBzbyBtYWtlIHN1cmUgd2UgaWdub3JlIGl0cyBjb21wbGV0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudExvYWRpbmdPcGVyYXRpb25JZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxDaGlsZE5vZGVzID0ga28udXRpbHMubWFrZUFycmF5KGtvLnZpcnR1YWxFbGVtZW50cy5jaGlsZE5vZGVzKGVsZW1lbnQpKTtcclxuXHJcbiAgICAgICAgICAgIGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgZGlzcG9zZUFzc29jaWF0ZWRDb21wb25lbnRWaWV3TW9kZWwpO1xyXG5cclxuICAgICAgICAgICAga28uY29tcHV0ZWQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZSh2YWx1ZUFjY2Vzc29yKCkpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudFBhcmFtcztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TmFtZSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUodmFsdWVbJ25hbWUnXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UGFyYW1zID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZSh2YWx1ZVsncGFyYW1zJ10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghY29tcG9uZW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY29tcG9uZW50IG5hbWUgc3BlY2lmaWVkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGxvYWRpbmdPcGVyYXRpb25JZCA9IGN1cnJlbnRMb2FkaW5nT3BlcmF0aW9uSWQgPSArK2NvbXBvbmVudExvYWRpbmdPcGVyYXRpb25VbmlxdWVJZDtcclxuICAgICAgICAgICAgICAgIGtvLmNvbXBvbmVudHMuZ2V0KGNvbXBvbmVudE5hbWUsIGZ1bmN0aW9uKGNvbXBvbmVudERlZmluaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCB0aGUgY3VycmVudCBsb2FkIG9wZXJhdGlvbiBmb3IgdGhpcyBlbGVtZW50LCBpZ25vcmUgaXQuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRMb2FkaW5nT3BlcmF0aW9uSWQgIT09IGxvYWRpbmdPcGVyYXRpb25JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDbGVhbiB1cCBwcmV2aW91cyBzdGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3Bvc2VBc3NvY2lhdGVkQ29tcG9uZW50Vmlld01vZGVsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEluc3RhbnRpYXRlIGFuZCBiaW5kIG5ldyBjb21wb25lbnQuIEltcGxpY2l0bHkgdGhpcyBjbGVhbnMgYW55IG9sZCBET00gbm9kZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wb25lbnREZWZpbml0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBjb21wb25lbnQgXFwnJyArIGNvbXBvbmVudE5hbWUgKyAnXFwnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lVGVtcGxhdGVJbnRvRWxlbWVudChjb21wb25lbnROYW1lLCBjb21wb25lbnREZWZpbml0aW9uLCBlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50Vmlld01vZGVsID0gY3JlYXRlVmlld01vZGVsKGNvbXBvbmVudERlZmluaXRpb24sIGVsZW1lbnQsIG9yaWdpbmFsQ2hpbGROb2RlcywgY29tcG9uZW50UGFyYW1zKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRCaW5kaW5nQ29udGV4dCA9IGJpbmRpbmdDb250ZXh0WydjcmVhdGVDaGlsZENvbnRleHQnXShjb21wb25lbnRWaWV3TW9kZWwsIC8qIGRhdGFJdGVtQWxpYXMgKi8gdW5kZWZpbmVkLCBmdW5jdGlvbihjdHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eFsnJGNvbXBvbmVudCddID0gY29tcG9uZW50Vmlld01vZGVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4WyckY29tcG9uZW50VGVtcGxhdGVOb2RlcyddID0gb3JpZ2luYWxDaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Vmlld01vZGVsID0gY29tcG9uZW50Vmlld01vZGVsO1xyXG4gICAgICAgICAgICAgICAgICAgIGtvLmFwcGx5QmluZGluZ3NUb0Rlc2NlbmRhbnRzKGNoaWxkQmluZGluZ0NvbnRleHQsIGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sIG51bGwsIHsgZGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkOiBlbGVtZW50IH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHsgJ2NvbnRyb2xzRGVzY2VuZGFudEJpbmRpbmdzJzogdHJ1ZSB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAga28udmlydHVhbEVsZW1lbnRzLmFsbG93ZWRCaW5kaW5nc1snY29tcG9uZW50J10gPSB0cnVlO1xyXG5cclxuICAgIGZ1bmN0aW9uIGNsb25lVGVtcGxhdGVJbnRvRWxlbWVudChjb21wb25lbnROYW1lLCBjb21wb25lbnREZWZpbml0aW9uLCBlbGVtZW50KSB7XHJcbiAgICAgICAgdmFyIHRlbXBsYXRlID0gY29tcG9uZW50RGVmaW5pdGlvblsndGVtcGxhdGUnXTtcclxuICAgICAgICBpZiAoIXRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50IFxcJycgKyBjb21wb25lbnROYW1lICsgJ1xcJyBoYXMgbm8gdGVtcGxhdGUnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjbG9uZWROb2Rlc0FycmF5ID0ga28udXRpbHMuY2xvbmVOb2Rlcyh0ZW1wbGF0ZSk7XHJcbiAgICAgICAga28udmlydHVhbEVsZW1lbnRzLnNldERvbU5vZGVDaGlsZHJlbihlbGVtZW50LCBjbG9uZWROb2Rlc0FycmF5KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjcmVhdGVWaWV3TW9kZWwoY29tcG9uZW50RGVmaW5pdGlvbiwgZWxlbWVudCwgb3JpZ2luYWxDaGlsZE5vZGVzLCBjb21wb25lbnRQYXJhbXMpIHtcclxuICAgICAgICB2YXIgY29tcG9uZW50Vmlld01vZGVsRmFjdG9yeSA9IGNvbXBvbmVudERlZmluaXRpb25bJ2NyZWF0ZVZpZXdNb2RlbCddO1xyXG4gICAgICAgIHJldHVybiBjb21wb25lbnRWaWV3TW9kZWxGYWN0b3J5XHJcbiAgICAgICAgICAgID8gY29tcG9uZW50Vmlld01vZGVsRmFjdG9yeS5jYWxsKGNvbXBvbmVudERlZmluaXRpb24sIGNvbXBvbmVudFBhcmFtcywgeyAnZWxlbWVudCc6IGVsZW1lbnQsICd0ZW1wbGF0ZU5vZGVzJzogb3JpZ2luYWxDaGlsZE5vZGVzIH0pXHJcbiAgICAgICAgICAgIDogY29tcG9uZW50UGFyYW1zOyAvLyBUZW1wbGF0ZS1vbmx5IGNvbXBvbmVudFxyXG4gICAgfVxyXG5cclxufSkoKTtcclxudmFyIGF0dHJIdG1sVG9KYXZhc2NyaXB0TWFwID0geyAnY2xhc3MnOiAnY2xhc3NOYW1lJywgJ2Zvcic6ICdodG1sRm9yJyB9O1xyXG5rby5iaW5kaW5nSGFuZGxlcnNbJ2F0dHInXSA9IHtcclxuICAgICd1cGRhdGUnOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZUFjY2Vzc29yLCBhbGxCaW5kaW5ncykge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUodmFsdWVBY2Nlc3NvcigpKSB8fCB7fTtcclxuICAgICAgICBrby51dGlscy5vYmplY3RGb3JFYWNoKHZhbHVlLCBmdW5jdGlvbihhdHRyTmFtZSwgYXR0clZhbHVlKSB7XHJcbiAgICAgICAgICAgIGF0dHJWYWx1ZSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUoYXR0clZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRvIGNvdmVyIGNhc2VzIGxpa2UgXCJhdHRyOiB7IGNoZWNrZWQ6c29tZVByb3AgfVwiLCB3ZSB3YW50IHRvIHJlbW92ZSB0aGUgYXR0cmlidXRlIGVudGlyZWx5XHJcbiAgICAgICAgICAgIC8vIHdoZW4gc29tZVByb3AgaXMgYSBcIm5vIHZhbHVlXCItbGlrZSB2YWx1ZSAoc3RyaWN0bHkgbnVsbCwgZmFsc2UsIG9yIHVuZGVmaW5lZClcclxuICAgICAgICAgICAgLy8gKGJlY2F1c2UgdGhlIGFic2VuY2Ugb2YgdGhlIFwiY2hlY2tlZFwiIGF0dHIgaXMgaG93IHRvIG1hcmsgYW4gZWxlbWVudCBhcyBub3QgY2hlY2tlZCwgZXRjLilcclxuICAgICAgICAgICAgdmFyIHRvUmVtb3ZlID0gKGF0dHJWYWx1ZSA9PT0gZmFsc2UpIHx8IChhdHRyVmFsdWUgPT09IG51bGwpIHx8IChhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIGlmICh0b1JlbW92ZSlcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJOYW1lKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEluIElFIDw9IDcgYW5kIElFOCBRdWlya3MgTW9kZSwgeW91IGhhdmUgdG8gdXNlIHRoZSBKYXZhc2NyaXB0IHByb3BlcnR5IG5hbWUgaW5zdGVhZCBvZiB0aGVcclxuICAgICAgICAgICAgLy8gSFRNTCBhdHRyaWJ1dGUgbmFtZSBmb3IgY2VydGFpbiBhdHRyaWJ1dGVzLiBJRTggU3RhbmRhcmRzIE1vZGUgc3VwcG9ydHMgdGhlIGNvcnJlY3QgYmVoYXZpb3IsXHJcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIG9mIGZpZ3VyaW5nIG91dCB0aGUgbW9kZSwgd2UnbGwganVzdCBzZXQgdGhlIGF0dHJpYnV0ZSB0aHJvdWdoIHRoZSBKYXZhc2NyaXB0XHJcbiAgICAgICAgICAgIC8vIHByb3BlcnR5IGZvciBJRSA8PSA4LlxyXG4gICAgICAgICAgICBpZiAoa28udXRpbHMuaWVWZXJzaW9uIDw9IDggJiYgYXR0ck5hbWUgaW4gYXR0ckh0bWxUb0phdmFzY3JpcHRNYXApIHtcclxuICAgICAgICAgICAgICAgIGF0dHJOYW1lID0gYXR0ckh0bWxUb0phdmFzY3JpcHRNYXBbYXR0ck5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRvUmVtb3ZlKVxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJOYW1lKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50W2F0dHJOYW1lXSA9IGF0dHJWYWx1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdG9SZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJOYW1lLCBhdHRyVmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFRyZWF0IFwibmFtZVwiIHNwZWNpYWxseSAtIGFsdGhvdWdoIHlvdSBjYW4gdGhpbmsgb2YgaXQgYXMgYW4gYXR0cmlidXRlLCBpdCBhbHNvIG5lZWRzXHJcbiAgICAgICAgICAgIC8vIHNwZWNpYWwgaGFuZGxpbmcgb24gb2xkZXIgdmVyc2lvbnMgb2YgSUUgKGh0dHBzOi8vZ2l0aHViLmNvbS9TdGV2ZVNhbmRlcnNvbi9rbm9ja291dC9wdWxsLzMzMylcclxuICAgICAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGJlaW5nIGNhc2Utc2Vuc2l0aXZlIGhlcmUgYmVjYXVzZSBYSFRNTCB3b3VsZCByZWdhcmQgXCJOYW1lXCIgYXMgYSBkaWZmZXJlbnQgdGhpbmdcclxuICAgICAgICAgICAgLy8gZW50aXJlbHksIGFuZCB0aGVyZSdzIG5vIHN0cm9uZyByZWFzb24gdG8gYWxsb3cgZm9yIHN1Y2ggY2FzaW5nIGluIEhUTUwuXHJcbiAgICAgICAgICAgIGlmIChhdHRyTmFtZSA9PT0gXCJuYW1lXCIpIHtcclxuICAgICAgICAgICAgICAgIGtvLnV0aWxzLnNldEVsZW1lbnROYW1lKGVsZW1lbnQsIHRvUmVtb3ZlID8gXCJcIiA6IGF0dHJWYWx1ZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59O1xyXG4oZnVuY3Rpb24oKSB7XHJcblxyXG5rby5iaW5kaW5nSGFuZGxlcnNbJ2NoZWNrZWQnXSA9IHtcclxuICAgICdhZnRlcic6IFsndmFsdWUnLCAnYXR0ciddLFxyXG4gICAgJ2luaXQnOiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsdWVBY2Nlc3NvciwgYWxsQmluZGluZ3MpIHtcclxuICAgICAgICB2YXIgY2hlY2tlZFZhbHVlID0ga28ucHVyZUNvbXB1dGVkKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAvLyBUcmVhdCBcInZhbHVlXCIgbGlrZSBcImNoZWNrZWRWYWx1ZVwiIHdoZW4gaXQgaXMgaW5jbHVkZWQgd2l0aCBcImNoZWNrZWRcIiBiaW5kaW5nXHJcbiAgICAgICAgICAgIGlmIChhbGxCaW5kaW5nc1snaGFzJ10oJ2NoZWNrZWRWYWx1ZScpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShhbGxCaW5kaW5ncy5nZXQoJ2NoZWNrZWRWYWx1ZScpKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChhbGxCaW5kaW5nc1snaGFzJ10oJ3ZhbHVlJykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKGFsbEJpbmRpbmdzLmdldCgndmFsdWUnKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVNb2RlbCgpIHtcclxuICAgICAgICAgICAgLy8gVGhpcyB1cGRhdGVzIHRoZSBtb2RlbCB2YWx1ZSBmcm9tIHRoZSB2aWV3IHZhbHVlLlxyXG4gICAgICAgICAgICAvLyBJdCBydW5zIGluIHJlc3BvbnNlIHRvIERPTSBldmVudHMgKGNsaWNrKSBhbmQgY2hhbmdlcyBpbiBjaGVja2VkVmFsdWUuXHJcbiAgICAgICAgICAgIHZhciBpc0NoZWNrZWQgPSBlbGVtZW50LmNoZWNrZWQsXHJcbiAgICAgICAgICAgICAgICBlbGVtVmFsdWUgPSB1c2VDaGVja2VkVmFsdWUgPyBjaGVja2VkVmFsdWUoKSA6IGlzQ2hlY2tlZDtcclxuXHJcbiAgICAgICAgICAgIC8vIFdoZW4gd2UncmUgZmlyc3Qgc2V0dGluZyB1cCB0aGlzIGNvbXB1dGVkLCBkb24ndCBjaGFuZ2UgYW55IG1vZGVsIHN0YXRlLlxyXG4gICAgICAgICAgICBpZiAoa28uY29tcHV0ZWRDb250ZXh0LmlzSW5pdGlhbCgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFdlIGNhbiBpZ25vcmUgdW5jaGVja2VkIHJhZGlvIGJ1dHRvbnMsIGJlY2F1c2Ugc29tZSBvdGhlciByYWRpb1xyXG4gICAgICAgICAgICAvLyBidXR0b24gd2lsbCBiZSBnZXR0aW5nIGNoZWNrZWQsIGFuZCB0aGF0IG9uZSBjYW4gdGFrZSBjYXJlIG9mIHVwZGF0aW5nIHN0YXRlLlxyXG4gICAgICAgICAgICBpZiAoaXNSYWRpbyAmJiAhaXNDaGVja2VkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBtb2RlbFZhbHVlID0ga28uZGVwZW5kZW5jeURldGVjdGlvbi5pZ25vcmUodmFsdWVBY2Nlc3Nvcik7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZUlzQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIHZhciB3cml0YWJsZVZhbHVlID0gcmF3VmFsdWVJc05vbkFycmF5T2JzZXJ2YWJsZSA/IG1vZGVsVmFsdWUucGVlaygpIDogbW9kZWxWYWx1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChvbGRFbGVtVmFsdWUgIT09IGVsZW1WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gd2UncmUgcmVzcG9uZGluZyB0byB0aGUgY2hlY2tlZFZhbHVlIGNoYW5naW5nLCBhbmQgdGhlIGVsZW1lbnQgaXNcclxuICAgICAgICAgICAgICAgICAgICAvLyBjdXJyZW50bHkgY2hlY2tlZCwgcmVwbGFjZSB0aGUgb2xkIGVsZW0gdmFsdWUgd2l0aCB0aGUgbmV3IGVsZW0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgbW9kZWwgYXJyYXkuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrby51dGlscy5hZGRPclJlbW92ZUl0ZW0od3JpdGFibGVWYWx1ZSwgZWxlbVZhbHVlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAga28udXRpbHMuYWRkT3JSZW1vdmVJdGVtKHdyaXRhYmxlVmFsdWUsIG9sZEVsZW1WYWx1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgb2xkRWxlbVZhbHVlID0gZWxlbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHdlJ3JlIHJlc3BvbmRpbmcgdG8gdGhlIHVzZXIgaGF2aW5nIGNoZWNrZWQvdW5jaGVja2VkIGEgY2hlY2tib3gsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkL3JlbW92ZSB0aGUgZWxlbWVudCB2YWx1ZSB0byB0aGUgbW9kZWwgYXJyYXkuXHJcbiAgICAgICAgICAgICAgICAgICAga28udXRpbHMuYWRkT3JSZW1vdmVJdGVtKHdyaXRhYmxlVmFsdWUsIGVsZW1WYWx1ZSwgaXNDaGVja2VkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyYXdWYWx1ZUlzTm9uQXJyYXlPYnNlcnZhYmxlICYmIGtvLmlzV3JpdGVhYmxlT2JzZXJ2YWJsZShtb2RlbFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsVmFsdWUod3JpdGFibGVWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBrby5leHByZXNzaW9uUmV3cml0aW5nLndyaXRlVmFsdWVUb1Byb3BlcnR5KG1vZGVsVmFsdWUsIGFsbEJpbmRpbmdzLCAnY2hlY2tlZCcsIGVsZW1WYWx1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVWaWV3KCkge1xyXG4gICAgICAgICAgICAvLyBUaGlzIHVwZGF0ZXMgdGhlIHZpZXcgdmFsdWUgZnJvbSB0aGUgbW9kZWwgdmFsdWUuXHJcbiAgICAgICAgICAgIC8vIEl0IHJ1bnMgaW4gcmVzcG9uc2UgdG8gY2hhbmdlcyBpbiB0aGUgYm91bmQgKGNoZWNrZWQpIHZhbHVlLlxyXG4gICAgICAgICAgICB2YXIgbW9kZWxWYWx1ZSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUodmFsdWVBY2Nlc3NvcigpKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZUlzQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIC8vIFdoZW4gYSBjaGVja2JveCBpcyBib3VuZCB0byBhbiBhcnJheSwgYmVpbmcgY2hlY2tlZCByZXByZXNlbnRzIGl0cyB2YWx1ZSBiZWluZyBwcmVzZW50IGluIHRoYXQgYXJyYXlcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IGtvLnV0aWxzLmFycmF5SW5kZXhPZihtb2RlbFZhbHVlLCBjaGVja2VkVmFsdWUoKSkgPj0gMDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NoZWNrYm94KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBXaGVuIGEgY2hlY2tib3ggaXMgYm91bmQgdG8gYW55IG90aGVyIHZhbHVlIChub3QgYW4gYXJyYXkpLCBiZWluZyBjaGVja2VkIHJlcHJlc2VudHMgdGhlIHZhbHVlIGJlaW5nIHRydWVpc2hcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IG1vZGVsVmFsdWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBGb3IgcmFkaW8gYnV0dG9ucywgYmVpbmcgY2hlY2tlZCBtZWFucyB0aGF0IHRoZSByYWRpbyBidXR0b24ncyB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgbW9kZWwgdmFsdWVcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IChjaGVja2VkVmFsdWUoKSA9PT0gbW9kZWxWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgaXNDaGVja2JveCA9IGVsZW1lbnQudHlwZSA9PSBcImNoZWNrYm94XCIsXHJcbiAgICAgICAgICAgIGlzUmFkaW8gPSBlbGVtZW50LnR5cGUgPT0gXCJyYWRpb1wiO1xyXG5cclxuICAgICAgICAvLyBPbmx5IGJpbmQgdG8gY2hlY2sgYm94ZXMgYW5kIHJhZGlvIGJ1dHRvbnNcclxuICAgICAgICBpZiAoIWlzQ2hlY2tib3ggJiYgIWlzUmFkaW8pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJhd1ZhbHVlID0gdmFsdWVBY2Nlc3NvcigpLFxyXG4gICAgICAgICAgICB2YWx1ZUlzQXJyYXkgPSBpc0NoZWNrYm94ICYmIChrby51dGlscy51bndyYXBPYnNlcnZhYmxlKHJhd1ZhbHVlKSBpbnN0YW5jZW9mIEFycmF5KSxcclxuICAgICAgICAgICAgcmF3VmFsdWVJc05vbkFycmF5T2JzZXJ2YWJsZSA9ICEodmFsdWVJc0FycmF5ICYmIHJhd1ZhbHVlLnB1c2ggJiYgcmF3VmFsdWUuc3BsaWNlKSxcclxuICAgICAgICAgICAgb2xkRWxlbVZhbHVlID0gdmFsdWVJc0FycmF5ID8gY2hlY2tlZFZhbHVlKCkgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVzZUNoZWNrZWRWYWx1ZSA9IGlzUmFkaW8gfHwgdmFsdWVJc0FycmF5O1xyXG5cclxuICAgICAgICAvLyBJRSA2IHdvbid0IGFsbG93IHJhZGlvIGJ1dHRvbnMgdG8gYmUgc2VsZWN0ZWQgdW5sZXNzIHRoZXkgaGF2ZSBhIG5hbWVcclxuICAgICAgICBpZiAoaXNSYWRpbyAmJiAhZWxlbWVudC5uYW1lKVxyXG4gICAgICAgICAgICBrby5iaW5kaW5nSGFuZGxlcnNbJ3VuaXF1ZU5hbWUnXVsnaW5pdCddKGVsZW1lbnQsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZSB9KTtcclxuXHJcbiAgICAgICAgLy8gU2V0IHVwIHR3byBjb21wdXRlZHMgdG8gdXBkYXRlIHRoZSBiaW5kaW5nOlxyXG5cclxuICAgICAgICAvLyBUaGUgZmlyc3QgcmVzcG9uZHMgdG8gY2hhbmdlcyBpbiB0aGUgY2hlY2tlZFZhbHVlIHZhbHVlIGFuZCB0byBlbGVtZW50IGNsaWNrc1xyXG4gICAgICAgIGtvLmNvbXB1dGVkKHVwZGF0ZU1vZGVsLCBudWxsLCB7IGRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZDogZWxlbWVudCB9KTtcclxuICAgICAgICBrby51dGlscy5yZWdpc3RlckV2ZW50SGFuZGxlcihlbGVtZW50LCBcImNsaWNrXCIsIHVwZGF0ZU1vZGVsKTtcclxuXHJcbiAgICAgICAgLy8gVGhlIHNlY29uZCByZXNwb25kcyB0byBjaGFuZ2VzIGluIHRoZSBtb2RlbCB2YWx1ZSAodGhlIG9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGNoZWNrZWQgYmluZGluZylcclxuICAgICAgICBrby5jb21wdXRlZCh1cGRhdGVWaWV3LCBudWxsLCB7IGRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZDogZWxlbWVudCB9KTtcclxuXHJcbiAgICAgICAgcmF3VmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbn07XHJcbmtvLmV4cHJlc3Npb25SZXdyaXRpbmcudHdvV2F5QmluZGluZ3NbJ2NoZWNrZWQnXSA9IHRydWU7XHJcblxyXG5rby5iaW5kaW5nSGFuZGxlcnNbJ2NoZWNrZWRWYWx1ZSddID0ge1xyXG4gICAgJ3VwZGF0ZSc6IGZ1bmN0aW9uIChlbGVtZW50LCB2YWx1ZUFjY2Vzc29yKSB7XHJcbiAgICAgICAgZWxlbWVudC52YWx1ZSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUodmFsdWVBY2Nlc3NvcigpKTtcclxuICAgIH1cclxufTtcclxuXHJcbn0pKCk7dmFyIGNsYXNzZXNXcml0dGVuQnlCaW5kaW5nS2V5ID0gJ19fa29fX2Nzc1ZhbHVlJztcclxua28uYmluZGluZ0hhbmRsZXJzWydjc3MnXSA9IHtcclxuICAgICd1cGRhdGUnOiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsdWVBY2Nlc3Nvcikge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUodmFsdWVBY2Nlc3NvcigpKTtcclxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAga28udXRpbHMub2JqZWN0Rm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24oY2xhc3NOYW1lLCBzaG91bGRIYXZlQ2xhc3MpIHtcclxuICAgICAgICAgICAgICAgIHNob3VsZEhhdmVDbGFzcyA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUoc2hvdWxkSGF2ZUNsYXNzKTtcclxuICAgICAgICAgICAgICAgIGtvLnV0aWxzLnRvZ2dsZURvbU5vZGVDc3NDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUsIHNob3VsZEhhdmVDbGFzcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0ga28udXRpbHMuc3RyaW5nVHJpbShTdHJpbmcodmFsdWUgfHwgJycpKTsgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHRyeSB0byBzdG9yZSBvciBzZXQgYSBub24tc3RyaW5nIHZhbHVlXHJcbiAgICAgICAgICAgIGtvLnV0aWxzLnRvZ2dsZURvbU5vZGVDc3NDbGFzcyhlbGVtZW50LCBlbGVtZW50W2NsYXNzZXNXcml0dGVuQnlCaW5kaW5nS2V5XSwgZmFsc2UpO1xyXG4gICAgICAgICAgICBlbGVtZW50W2NsYXNzZXNXcml0dGVuQnlCaW5kaW5nS2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBrby51dGlscy50b2dnbGVEb21Ob2RlQ3NzQ2xhc3MoZWxlbWVudCwgdmFsdWUsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxua28uYmluZGluZ0hhbmRsZXJzWydlbmFibGUnXSA9IHtcclxuICAgICd1cGRhdGUnOiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsdWVBY2Nlc3Nvcikge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUodmFsdWVBY2Nlc3NvcigpKTtcclxuICAgICAgICBpZiAodmFsdWUgJiYgZWxlbWVudC5kaXNhYmxlZClcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcclxuICAgICAgICBlbHNlIGlmICgoIXZhbHVlKSAmJiAoIWVsZW1lbnQuZGlzYWJsZWQpKVxyXG4gICAgICAgICAgICBlbGVtZW50LmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIH1cclxufTtcclxuXHJcbmtvLmJpbmRpbmdIYW5kbGVyc1snZGlzYWJsZSddID0ge1xyXG4gICAgJ3VwZGF0ZSc6IGZ1bmN0aW9uIChlbGVtZW50LCB2YWx1ZUFjY2Vzc29yKSB7XHJcbiAgICAgICAga28uYmluZGluZ0hhbmRsZXJzWydlbmFibGUnXVsndXBkYXRlJ10oZWxlbWVudCwgZnVuY3Rpb24oKSB7IHJldHVybiAha28udXRpbHMudW53cmFwT2JzZXJ2YWJsZSh2YWx1ZUFjY2Vzc29yKCkpIH0pO1xyXG4gICAgfVxyXG59O1xyXG4vLyBGb3IgY2VydGFpbiBjb21tb24gZXZlbnRzIChjdXJyZW50bHkganVzdCAnY2xpY2snKSwgYWxsb3cgYSBzaW1wbGlmaWVkIGRhdGEtYmluZGluZyBzeW50YXhcclxuLy8gZS5nLiBjbGljazpoYW5kbGVyIGluc3RlYWQgb2YgdGhlIHVzdWFsIGZ1bGwtbGVuZ3RoIGV2ZW50OntjbGljazpoYW5kbGVyfVxyXG5mdW5jdGlvbiBtYWtlRXZlbnRIYW5kbGVyU2hvcnRjdXQoZXZlbnROYW1lKSB7XHJcbiAgICBrby5iaW5kaW5nSGFuZGxlcnNbZXZlbnROYW1lXSA9IHtcclxuICAgICAgICAnaW5pdCc6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IsIGFsbEJpbmRpbmdzLCB2aWV3TW9kZWwsIGJpbmRpbmdDb250ZXh0KSB7XHJcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZUFjY2Vzc29yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0W2V2ZW50TmFtZV0gPSB2YWx1ZUFjY2Vzc29yKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4ga28uYmluZGluZ0hhbmRsZXJzWydldmVudCddWydpbml0J10uY2FsbCh0aGlzLCBlbGVtZW50LCBuZXdWYWx1ZUFjY2Vzc29yLCBhbGxCaW5kaW5ncywgdmlld01vZGVsLCBiaW5kaW5nQ29udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5rby5iaW5kaW5nSGFuZGxlcnNbJ2V2ZW50J10gPSB7XHJcbiAgICAnaW5pdCcgOiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsdWVBY2Nlc3NvciwgYWxsQmluZGluZ3MsIHZpZXdNb2RlbCwgYmluZGluZ0NvbnRleHQpIHtcclxuICAgICAgICB2YXIgZXZlbnRzVG9IYW5kbGUgPSB2YWx1ZUFjY2Vzc29yKCkgfHwge307XHJcbiAgICAgICAga28udXRpbHMub2JqZWN0Rm9yRWFjaChldmVudHNUb0hhbmRsZSwgZnVuY3Rpb24oZXZlbnROYW1lKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXZlbnROYW1lID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIGtvLnV0aWxzLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50TmFtZSwgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZXJSZXR1cm5WYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlckZ1bmN0aW9uID0gdmFsdWVBY2Nlc3NvcigpW2V2ZW50TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVyRnVuY3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGFrZSBhbGwgdGhlIGV2ZW50IGFyZ3MsIGFuZCBwcmVmaXggd2l0aCB0aGUgdmlld21vZGVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzRm9ySGFuZGxlciA9IGtvLnV0aWxzLm1ha2VBcnJheShhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZWwgPSBiaW5kaW5nQ29udGV4dFsnJGRhdGEnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0ZvckhhbmRsZXIudW5zaGlmdCh2aWV3TW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyUmV0dXJuVmFsdWUgPSBoYW5kbGVyRnVuY3Rpb24uYXBwbHkodmlld01vZGVsLCBhcmdzRm9ySGFuZGxlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJSZXR1cm5WYWx1ZSAhPT0gdHJ1ZSkgeyAvLyBOb3JtYWxseSB3ZSB3YW50IHRvIHByZXZlbnQgZGVmYXVsdCBhY3Rpb24uIERldmVsb3BlciBjYW4gb3ZlcnJpZGUgdGhpcyBiZSBleHBsaWNpdGx5IHJldHVybmluZyB0cnVlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ1YmJsZSA9IGFsbEJpbmRpbmdzLmdldChldmVudE5hbWUgKyAnQnViYmxlJykgIT09IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYnViYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59O1xyXG4vLyBcImZvcmVhY2g6IHNvbWVFeHByZXNzaW9uXCIgaXMgZXF1aXZhbGVudCB0byBcInRlbXBsYXRlOiB7IGZvcmVhY2g6IHNvbWVFeHByZXNzaW9uIH1cIlxyXG4vLyBcImZvcmVhY2g6IHsgZGF0YTogc29tZUV4cHJlc3Npb24sIGFmdGVyQWRkOiBteWZuIH1cIiBpcyBlcXVpdmFsZW50IHRvIFwidGVtcGxhdGU6IHsgZm9yZWFjaDogc29tZUV4cHJlc3Npb24sIGFmdGVyQWRkOiBteWZuIH1cIlxyXG5rby5iaW5kaW5nSGFuZGxlcnNbJ2ZvcmVhY2gnXSA9IHtcclxuICAgIG1ha2VUZW1wbGF0ZVZhbHVlQWNjZXNzb3I6IGZ1bmN0aW9uKHZhbHVlQWNjZXNzb3IpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciBtb2RlbFZhbHVlID0gdmFsdWVBY2Nlc3NvcigpLFxyXG4gICAgICAgICAgICAgICAgdW53cmFwcGVkVmFsdWUgPSBrby51dGlscy5wZWVrT2JzZXJ2YWJsZShtb2RlbFZhbHVlKTsgICAgLy8gVW53cmFwIHdpdGhvdXQgc2V0dGluZyBhIGRlcGVuZGVuY3kgaGVyZVxyXG5cclxuICAgICAgICAgICAgLy8gSWYgdW53cmFwcGVkVmFsdWUgaXMgdGhlIGFycmF5LCBwYXNzIGluIHRoZSB3cmFwcGVkIHZhbHVlIG9uIGl0cyBvd25cclxuICAgICAgICAgICAgLy8gVGhlIHZhbHVlIHdpbGwgYmUgdW53cmFwcGVkIGFuZCB0cmFja2VkIHdpdGhpbiB0aGUgdGVtcGxhdGUgYmluZGluZ1xyXG4gICAgICAgICAgICAvLyAoU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9TdGV2ZVNhbmRlcnNvbi9rbm9ja291dC9pc3N1ZXMvNTIzKVxyXG4gICAgICAgICAgICBpZiAoKCF1bndyYXBwZWRWYWx1ZSkgfHwgdHlwZW9mIHVud3JhcHBlZFZhbHVlLmxlbmd0aCA9PSBcIm51bWJlclwiKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgJ2ZvcmVhY2gnOiBtb2RlbFZhbHVlLCAndGVtcGxhdGVFbmdpbmUnOiBrby5uYXRpdmVUZW1wbGF0ZUVuZ2luZS5pbnN0YW5jZSB9O1xyXG5cclxuICAgICAgICAgICAgLy8gSWYgdW53cmFwcGVkVmFsdWUuZGF0YSBpcyB0aGUgYXJyYXksIHByZXNlcnZlIGFsbCByZWxldmFudCBvcHRpb25zIGFuZCB1bndyYXAgYWdhaW4gdmFsdWUgc28gd2UgZ2V0IHVwZGF0ZXNcclxuICAgICAgICAgICAga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShtb2RlbFZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICdmb3JlYWNoJzogdW53cmFwcGVkVmFsdWVbJ2RhdGEnXSxcclxuICAgICAgICAgICAgICAgICdhcyc6IHVud3JhcHBlZFZhbHVlWydhcyddLFxyXG4gICAgICAgICAgICAgICAgJ2luY2x1ZGVEZXN0cm95ZWQnOiB1bndyYXBwZWRWYWx1ZVsnaW5jbHVkZURlc3Ryb3llZCddLFxyXG4gICAgICAgICAgICAgICAgJ2FmdGVyQWRkJzogdW53cmFwcGVkVmFsdWVbJ2FmdGVyQWRkJ10sXHJcbiAgICAgICAgICAgICAgICAnYmVmb3JlUmVtb3ZlJzogdW53cmFwcGVkVmFsdWVbJ2JlZm9yZVJlbW92ZSddLFxyXG4gICAgICAgICAgICAgICAgJ2FmdGVyUmVuZGVyJzogdW53cmFwcGVkVmFsdWVbJ2FmdGVyUmVuZGVyJ10sXHJcbiAgICAgICAgICAgICAgICAnYmVmb3JlTW92ZSc6IHVud3JhcHBlZFZhbHVlWydiZWZvcmVNb3ZlJ10sXHJcbiAgICAgICAgICAgICAgICAnYWZ0ZXJNb3ZlJzogdW53cmFwcGVkVmFsdWVbJ2FmdGVyTW92ZSddLFxyXG4gICAgICAgICAgICAgICAgJ3RlbXBsYXRlRW5naW5lJzoga28ubmF0aXZlVGVtcGxhdGVFbmdpbmUuaW5zdGFuY2VcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgICdpbml0JzogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWVBY2Nlc3NvciwgYWxsQmluZGluZ3MsIHZpZXdNb2RlbCwgYmluZGluZ0NvbnRleHQpIHtcclxuICAgICAgICByZXR1cm4ga28uYmluZGluZ0hhbmRsZXJzWyd0ZW1wbGF0ZSddWydpbml0J10oZWxlbWVudCwga28uYmluZGluZ0hhbmRsZXJzWydmb3JlYWNoJ10ubWFrZVRlbXBsYXRlVmFsdWVBY2Nlc3Nvcih2YWx1ZUFjY2Vzc29yKSk7XHJcbiAgICB9LFxyXG4gICAgJ3VwZGF0ZSc6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IsIGFsbEJpbmRpbmdzLCB2aWV3TW9kZWwsIGJpbmRpbmdDb250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGtvLmJpbmRpbmdIYW5kbGVyc1sndGVtcGxhdGUnXVsndXBkYXRlJ10oZWxlbWVudCwga28uYmluZGluZ0hhbmRsZXJzWydmb3JlYWNoJ10ubWFrZVRlbXBsYXRlVmFsdWVBY2Nlc3Nvcih2YWx1ZUFjY2Vzc29yKSwgYWxsQmluZGluZ3MsIHZpZXdNb2RlbCwgYmluZGluZ0NvbnRleHQpO1xyXG4gICAgfVxyXG59O1xyXG5rby5leHByZXNzaW9uUmV3cml0aW5nLmJpbmRpbmdSZXdyaXRlVmFsaWRhdG9yc1snZm9yZWFjaCddID0gZmFsc2U7IC8vIENhbid0IHJld3JpdGUgY29udHJvbCBmbG93IGJpbmRpbmdzXHJcbmtvLnZpcnR1YWxFbGVtZW50cy5hbGxvd2VkQmluZGluZ3NbJ2ZvcmVhY2gnXSA9IHRydWU7XHJcbnZhciBoYXNmb2N1c1VwZGF0aW5nUHJvcGVydHkgPSAnX19rb19oYXNmb2N1c1VwZGF0aW5nJztcclxudmFyIGhhc2ZvY3VzTGFzdFZhbHVlID0gJ19fa29faGFzZm9jdXNMYXN0VmFsdWUnO1xyXG5rby5iaW5kaW5nSGFuZGxlcnNbJ2hhc2ZvY3VzJ10gPSB7XHJcbiAgICAnaW5pdCc6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IsIGFsbEJpbmRpbmdzKSB7XHJcbiAgICAgICAgdmFyIGhhbmRsZUVsZW1lbnRGb2N1c0NoYW5nZSA9IGZ1bmN0aW9uKGlzRm9jdXNlZCkge1xyXG4gICAgICAgICAgICAvLyBXaGVyZSBwb3NzaWJsZSwgaWdub3JlIHdoaWNoIGV2ZW50IHdhcyByYWlzZWQgYW5kIGRldGVybWluZSBmb2N1cyBzdGF0ZSB1c2luZyBhY3RpdmVFbGVtZW50LFxyXG4gICAgICAgICAgICAvLyBhcyB0aGlzIGF2b2lkcyBwaGFudG9tIGZvY3VzL2JsdXIgZXZlbnRzIHJhaXNlZCB3aGVuIGNoYW5naW5nIHRhYnMgaW4gbW9kZXJuIGJyb3dzZXJzLlxyXG4gICAgICAgICAgICAvLyBIb3dldmVyLCBub3QgYWxsIEtPLXRhcmdldGVkIGJyb3dzZXJzIChGaXJlZm94IDIpIHN1cHBvcnQgYWN0aXZlRWxlbWVudC4gRm9yIHRob3NlIGJyb3dzZXJzLFxyXG4gICAgICAgICAgICAvLyBwcmV2ZW50IGEgbG9zcyBvZiBmb2N1cyB3aGVuIGNoYW5naW5nIHRhYnMvd2luZG93cyBieSBzZXR0aW5nIGEgZmxhZyB0aGF0IHByZXZlbnRzIGhhc2ZvY3VzXHJcbiAgICAgICAgICAgIC8vIGZyb20gY2FsbGluZyAnYmx1cigpJyBvbiB0aGUgZWxlbWVudCB3aGVuIGl0IGxvc2VzIGZvY3VzLlxyXG4gICAgICAgICAgICAvLyBEaXNjdXNzaW9uIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9TdGV2ZVNhbmRlcnNvbi9rbm9ja291dC9wdWxsLzM1MlxyXG4gICAgICAgICAgICBlbGVtZW50W2hhc2ZvY3VzVXBkYXRpbmdQcm9wZXJ0eV0gPSB0cnVlO1xyXG4gICAgICAgICAgICB2YXIgb3duZXJEb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChcImFjdGl2ZUVsZW1lbnRcIiBpbiBvd25lckRvYykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFjdGl2ZTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gb3duZXJEb2MuYWN0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIElFOSB0aHJvd3MgaWYgeW91IGFjY2VzcyBhY3RpdmVFbGVtZW50IGR1cmluZyBwYWdlIGxvYWQgKHNlZSBpc3N1ZSAjNzAzKVxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9IG93bmVyRG9jLmJvZHk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpc0ZvY3VzZWQgPSAoYWN0aXZlID09PSBlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgbW9kZWxWYWx1ZSA9IHZhbHVlQWNjZXNzb3IoKTtcclxuICAgICAgICAgICAga28uZXhwcmVzc2lvblJld3JpdGluZy53cml0ZVZhbHVlVG9Qcm9wZXJ0eShtb2RlbFZhbHVlLCBhbGxCaW5kaW5ncywgJ2hhc2ZvY3VzJywgaXNGb2N1c2VkLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vY2FjaGUgdGhlIGxhdGVzdCB2YWx1ZSwgc28gd2UgY2FuIGF2b2lkIHVubmVjZXNzYXJpbHkgY2FsbGluZyBmb2N1cy9ibHVyIGluIHRoZSB1cGRhdGUgZnVuY3Rpb25cclxuICAgICAgICAgICAgZWxlbWVudFtoYXNmb2N1c0xhc3RWYWx1ZV0gPSBpc0ZvY3VzZWQ7XHJcbiAgICAgICAgICAgIGVsZW1lbnRbaGFzZm9jdXNVcGRhdGluZ1Byb3BlcnR5XSA9IGZhbHNlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIGhhbmRsZUVsZW1lbnRGb2N1c0luID0gaGFuZGxlRWxlbWVudEZvY3VzQ2hhbmdlLmJpbmQobnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgdmFyIGhhbmRsZUVsZW1lbnRGb2N1c091dCA9IGhhbmRsZUVsZW1lbnRGb2N1c0NoYW5nZS5iaW5kKG51bGwsIGZhbHNlKTtcclxuXHJcbiAgICAgICAga28udXRpbHMucmVnaXN0ZXJFdmVudEhhbmRsZXIoZWxlbWVudCwgXCJmb2N1c1wiLCBoYW5kbGVFbGVtZW50Rm9jdXNJbik7XHJcbiAgICAgICAga28udXRpbHMucmVnaXN0ZXJFdmVudEhhbmRsZXIoZWxlbWVudCwgXCJmb2N1c2luXCIsIGhhbmRsZUVsZW1lbnRGb2N1c0luKTsgLy8gRm9yIElFXHJcbiAgICAgICAga28udXRpbHMucmVnaXN0ZXJFdmVudEhhbmRsZXIoZWxlbWVudCwgXCJibHVyXCIsICBoYW5kbGVFbGVtZW50Rm9jdXNPdXQpO1xyXG4gICAgICAgIGtvLnV0aWxzLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGVsZW1lbnQsIFwiZm9jdXNvdXRcIiwgIGhhbmRsZUVsZW1lbnRGb2N1c091dCk7IC8vIEZvciBJRVxyXG4gICAgfSxcclxuICAgICd1cGRhdGUnOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZUFjY2Vzc29yKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gISFrby51dGlscy51bndyYXBPYnNlcnZhYmxlKHZhbHVlQWNjZXNzb3IoKSk7XHJcblxyXG4gICAgICAgIGlmICghZWxlbWVudFtoYXNmb2N1c1VwZGF0aW5nUHJvcGVydHldICYmIGVsZW1lbnRbaGFzZm9jdXNMYXN0VmFsdWVdICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA/IGVsZW1lbnQuZm9jdXMoKSA6IGVsZW1lbnQuYmx1cigpO1xyXG5cclxuICAgICAgICAgICAgLy8gSW4gSUUsIHRoZSBibHVyIG1ldGhvZCBkb2Vzbid0IGFsd2F5cyBjYXVzZSB0aGUgZWxlbWVudCB0byBsb3NlIGZvY3VzIChmb3IgZXhhbXBsZSwgaWYgdGhlIHdpbmRvdyBpcyBub3QgaW4gZm9jdXMpLlxyXG4gICAgICAgICAgICAvLyBTZXR0aW5nIGZvY3VzIHRvIHRoZSBib2R5IGVsZW1lbnQgZG9lcyBzZWVtIHRvIGJlIHJlbGlhYmxlIGluIElFLCBidXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB3ZSBrbm93IHRoYXQgdGhlIGN1cnJlbnRcclxuICAgICAgICAgICAgLy8gZWxlbWVudCB3YXMgZm9jdXNlZCBhbHJlYWR5LlxyXG4gICAgICAgICAgICBpZiAoIXZhbHVlICYmIGVsZW1lbnRbaGFzZm9jdXNMYXN0VmFsdWVdKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keS5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBGb3IgSUUsIHdoaWNoIGRvZXNuJ3QgcmVsaWFibHkgZmlyZSBcImZvY3VzXCIgb3IgXCJibHVyXCIgZXZlbnRzIHN5bmNocm9ub3VzbHlcclxuICAgICAgICAgICAga28uZGVwZW5kZW5jeURldGVjdGlvbi5pZ25vcmUoa28udXRpbHMudHJpZ2dlckV2ZW50LCBudWxsLCBbZWxlbWVudCwgdmFsdWUgPyBcImZvY3VzaW5cIiA6IFwiZm9jdXNvdXRcIl0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxua28uZXhwcmVzc2lvblJld3JpdGluZy50d29XYXlCaW5kaW5nc1snaGFzZm9jdXMnXSA9IHRydWU7XHJcblxyXG5rby5iaW5kaW5nSGFuZGxlcnNbJ2hhc0ZvY3VzJ10gPSBrby5iaW5kaW5nSGFuZGxlcnNbJ2hhc2ZvY3VzJ107IC8vIE1ha2UgXCJoYXNGb2N1c1wiIGFuIGFsaWFzXHJcbmtvLmV4cHJlc3Npb25SZXdyaXRpbmcudHdvV2F5QmluZGluZ3NbJ2hhc0ZvY3VzJ10gPSB0cnVlO1xyXG5rby5iaW5kaW5nSGFuZGxlcnNbJ2h0bWwnXSA9IHtcclxuICAgICdpbml0JzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gUHJldmVudCBiaW5kaW5nIG9uIHRoZSBkeW5hbWljYWxseS1pbmplY3RlZCBIVE1MIChhcyBkZXZlbG9wZXJzIGFyZSB1bmxpa2VseSB0byBleHBlY3QgdGhhdCwgYW5kIGl0IGhhcyBzZWN1cml0eSBpbXBsaWNhdGlvbnMpXHJcbiAgICAgICAgcmV0dXJuIHsgJ2NvbnRyb2xzRGVzY2VuZGFudEJpbmRpbmdzJzogdHJ1ZSB9O1xyXG4gICAgfSxcclxuICAgICd1cGRhdGUnOiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsdWVBY2Nlc3Nvcikge1xyXG4gICAgICAgIC8vIHNldEh0bWwgd2lsbCB1bndyYXAgdGhlIHZhbHVlIGlmIG5lZWRlZFxyXG4gICAgICAgIGtvLnV0aWxzLnNldEh0bWwoZWxlbWVudCwgdmFsdWVBY2Nlc3NvcigpKTtcclxuICAgIH1cclxufTtcclxuLy8gTWFrZXMgYSBiaW5kaW5nIGxpa2Ugd2l0aCBvciBpZlxyXG5mdW5jdGlvbiBtYWtlV2l0aElmQmluZGluZyhiaW5kaW5nS2V5LCBpc1dpdGgsIGlzTm90LCBtYWtlQ29udGV4dENhbGxiYWNrKSB7XHJcbiAgICBrby5iaW5kaW5nSGFuZGxlcnNbYmluZGluZ0tleV0gPSB7XHJcbiAgICAgICAgJ2luaXQnOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZUFjY2Vzc29yLCBhbGxCaW5kaW5ncywgdmlld01vZGVsLCBiaW5kaW5nQ29udGV4dCkge1xyXG4gICAgICAgICAgICB2YXIgZGlkRGlzcGxheU9uTGFzdFVwZGF0ZSxcclxuICAgICAgICAgICAgICAgIHNhdmVkTm9kZXM7XHJcbiAgICAgICAgICAgIGtvLmNvbXB1dGVkKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGFWYWx1ZSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUodmFsdWVBY2Nlc3NvcigpKSxcclxuICAgICAgICAgICAgICAgICAgICBzaG91bGREaXNwbGF5ID0gIWlzTm90ICE9PSAhZGF0YVZhbHVlLCAvLyBlcXVpdmFsZW50IHRvIGlzTm90ID8gIWRhdGFWYWx1ZSA6ICEhZGF0YVZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgaXNGaXJzdFJlbmRlciA9ICFzYXZlZE5vZGVzLFxyXG4gICAgICAgICAgICAgICAgICAgIG5lZWRzUmVmcmVzaCA9IGlzRmlyc3RSZW5kZXIgfHwgaXNXaXRoIHx8IChzaG91bGREaXNwbGF5ICE9PSBkaWREaXNwbGF5T25MYXN0VXBkYXRlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobmVlZHNSZWZyZXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2F2ZSBhIGNvcHkgb2YgdGhlIGlubmVyIG5vZGVzIG9uIHRoZSBpbml0aWFsIHVwZGF0ZSwgYnV0IG9ubHkgaWYgd2UgaGF2ZSBkZXBlbmRlbmNpZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRmlyc3RSZW5kZXIgJiYga28uY29tcHV0ZWRDb250ZXh0LmdldERlcGVuZGVuY2llc0NvdW50KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWROb2RlcyA9IGtvLnV0aWxzLmNsb25lTm9kZXMoa28udmlydHVhbEVsZW1lbnRzLmNoaWxkTm9kZXMoZWxlbWVudCksIHRydWUgLyogc2hvdWxkQ2xlYW5Ob2RlcyAqLyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRGlzcGxheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRmlyc3RSZW5kZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtvLnZpcnR1YWxFbGVtZW50cy5zZXREb21Ob2RlQ2hpbGRyZW4oZWxlbWVudCwga28udXRpbHMuY2xvbmVOb2RlcyhzYXZlZE5vZGVzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAga28uYXBwbHlCaW5kaW5nc1RvRGVzY2VuZGFudHMobWFrZUNvbnRleHRDYWxsYmFjayA/IG1ha2VDb250ZXh0Q2FsbGJhY2soYmluZGluZ0NvbnRleHQsIGRhdGFWYWx1ZSkgOiBiaW5kaW5nQ29udGV4dCwgZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga28udmlydHVhbEVsZW1lbnRzLmVtcHR5Tm9kZShlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGRpZERpc3BsYXlPbkxhc3RVcGRhdGUgPSBzaG91bGREaXNwbGF5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCBudWxsLCB7IGRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZDogZWxlbWVudCB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgJ2NvbnRyb2xzRGVzY2VuZGFudEJpbmRpbmdzJzogdHJ1ZSB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBrby5leHByZXNzaW9uUmV3cml0aW5nLmJpbmRpbmdSZXdyaXRlVmFsaWRhdG9yc1tiaW5kaW5nS2V5XSA9IGZhbHNlOyAvLyBDYW4ndCByZXdyaXRlIGNvbnRyb2wgZmxvdyBiaW5kaW5nc1xyXG4gICAga28udmlydHVhbEVsZW1lbnRzLmFsbG93ZWRCaW5kaW5nc1tiaW5kaW5nS2V5XSA9IHRydWU7XHJcbn1cclxuXHJcbi8vIENvbnN0cnVjdCB0aGUgYWN0dWFsIGJpbmRpbmcgaGFuZGxlcnNcclxubWFrZVdpdGhJZkJpbmRpbmcoJ2lmJyk7XHJcbm1ha2VXaXRoSWZCaW5kaW5nKCdpZm5vdCcsIGZhbHNlIC8qIGlzV2l0aCAqLywgdHJ1ZSAvKiBpc05vdCAqLyk7XHJcbm1ha2VXaXRoSWZCaW5kaW5nKCd3aXRoJywgdHJ1ZSAvKiBpc1dpdGggKi8sIGZhbHNlIC8qIGlzTm90ICovLFxyXG4gICAgZnVuY3Rpb24oYmluZGluZ0NvbnRleHQsIGRhdGFWYWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBiaW5kaW5nQ29udGV4dFsnY3JlYXRlQ2hpbGRDb250ZXh0J10oZGF0YVZhbHVlKTtcclxuICAgIH1cclxuKTtcclxudmFyIGNhcHRpb25QbGFjZWhvbGRlciA9IHt9O1xyXG5rby5iaW5kaW5nSGFuZGxlcnNbJ29wdGlvbnMnXSA9IHtcclxuICAgICdpbml0JzogZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgIGlmIChrby51dGlscy50YWdOYW1lTG93ZXIoZWxlbWVudCkgIT09IFwic2VsZWN0XCIpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm9wdGlvbnMgYmluZGluZyBhcHBsaWVzIG9ubHkgdG8gU0VMRUNUIGVsZW1lbnRzXCIpO1xyXG5cclxuICAgICAgICAvLyBSZW1vdmUgYWxsIGV4aXN0aW5nIDxvcHRpb24+cy5cclxuICAgICAgICB3aGlsZSAoZWxlbWVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlKDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRW5zdXJlcyB0aGF0IHRoZSBiaW5kaW5nIHByb2Nlc3NvciBkb2Vzbid0IHRyeSB0byBiaW5kIHRoZSBvcHRpb25zXHJcbiAgICAgICAgcmV0dXJuIHsgJ2NvbnRyb2xzRGVzY2VuZGFudEJpbmRpbmdzJzogdHJ1ZSB9O1xyXG4gICAgfSxcclxuICAgICd1cGRhdGUnOiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsdWVBY2Nlc3NvciwgYWxsQmluZGluZ3MpIHtcclxuICAgICAgICBmdW5jdGlvbiBzZWxlY3RlZE9wdGlvbnMoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBrby51dGlscy5hcnJheUZpbHRlcihlbGVtZW50Lm9wdGlvbnMsIGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLnNlbGVjdGVkOyB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzZWxlY3RXYXNQcmV2aW91c2x5RW1wdHkgPSBlbGVtZW50Lmxlbmd0aCA9PSAwLFxyXG4gICAgICAgICAgICBtdWx0aXBsZSA9IGVsZW1lbnQubXVsdGlwbGUsXHJcbiAgICAgICAgICAgIHByZXZpb3VzU2Nyb2xsVG9wID0gKCFzZWxlY3RXYXNQcmV2aW91c2x5RW1wdHkgJiYgbXVsdGlwbGUpID8gZWxlbWVudC5zY3JvbGxUb3AgOiBudWxsLFxyXG4gICAgICAgICAgICB1bndyYXBwZWRBcnJheSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUodmFsdWVBY2Nlc3NvcigpKSxcclxuICAgICAgICAgICAgdmFsdWVBbGxvd1Vuc2V0ID0gYWxsQmluZGluZ3MuZ2V0KCd2YWx1ZUFsbG93VW5zZXQnKSAmJiBhbGxCaW5kaW5nc1snaGFzJ10oJ3ZhbHVlJyksXHJcbiAgICAgICAgICAgIGluY2x1ZGVEZXN0cm95ZWQgPSBhbGxCaW5kaW5ncy5nZXQoJ29wdGlvbnNJbmNsdWRlRGVzdHJveWVkJyksXHJcbiAgICAgICAgICAgIGFycmF5VG9Eb21Ob2RlQ2hpbGRyZW5PcHRpb25zID0ge30sXHJcbiAgICAgICAgICAgIGNhcHRpb25WYWx1ZSxcclxuICAgICAgICAgICAgZmlsdGVyZWRBcnJheSxcclxuICAgICAgICAgICAgcHJldmlvdXNTZWxlY3RlZFZhbHVlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoIXZhbHVlQWxsb3dVbnNldCkge1xyXG4gICAgICAgICAgICBpZiAobXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgIHByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMgPSBrby51dGlscy5hcnJheU1hcChzZWxlY3RlZE9wdGlvbnMoKSwga28uc2VsZWN0RXh0ZW5zaW9ucy5yZWFkVmFsdWUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuc2VsZWN0ZWRJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkVmFsdWVzLnB1c2goa28uc2VsZWN0RXh0ZW5zaW9ucy5yZWFkVmFsdWUoZWxlbWVudC5vcHRpb25zW2VsZW1lbnQuc2VsZWN0ZWRJbmRleF0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVud3JhcHBlZEFycmF5KSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdW53cmFwcGVkQXJyYXkubGVuZ3RoID09IFwidW5kZWZpbmVkXCIpIC8vIENvZXJjZSBzaW5nbGUgdmFsdWUgaW50byBhcnJheVxyXG4gICAgICAgICAgICAgICAgdW53cmFwcGVkQXJyYXkgPSBbdW53cmFwcGVkQXJyYXldO1xyXG5cclxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBhbnkgZW50cmllcyBtYXJrZWQgYXMgZGVzdHJveWVkXHJcbiAgICAgICAgICAgIGZpbHRlcmVkQXJyYXkgPSBrby51dGlscy5hcnJheUZpbHRlcih1bndyYXBwZWRBcnJheSwgZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluY2x1ZGVEZXN0cm95ZWQgfHwgaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwgfHwgIWtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUoaXRlbVsnX2Rlc3Ryb3knXSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gSWYgY2FwdGlvbiBpcyBpbmNsdWRlZCwgYWRkIGl0IHRvIHRoZSBhcnJheVxyXG4gICAgICAgICAgICBpZiAoYWxsQmluZGluZ3NbJ2hhcyddKCdvcHRpb25zQ2FwdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXB0aW9uVmFsdWUgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKGFsbEJpbmRpbmdzLmdldCgnb3B0aW9uc0NhcHRpb24nKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBJZiBjYXB0aW9uIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLCBkb24ndCBzaG93IGEgY2FwdGlvblxyXG4gICAgICAgICAgICAgICAgaWYgKGNhcHRpb25WYWx1ZSAhPT0gbnVsbCAmJiBjYXB0aW9uVmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkQXJyYXkudW5zaGlmdChjYXB0aW9uUGxhY2Vob2xkZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gSWYgYSBmYWxzeSB2YWx1ZSBpcyBwcm92aWRlZCAoZS5nLiBudWxsKSwgd2UnbGwgc2ltcGx5IGVtcHR5IHRoZSBzZWxlY3QgZWxlbWVudFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gYXBwbHlUb09iamVjdChvYmplY3QsIHByZWRpY2F0ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhciBwcmVkaWNhdGVUeXBlID0gdHlwZW9mIHByZWRpY2F0ZTtcclxuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZVR5cGUgPT0gXCJmdW5jdGlvblwiKSAgICAvLyBHaXZlbiBhIGZ1bmN0aW9uOyBydW4gaXQgYWdhaW5zdCB0aGUgZGF0YSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZWRpY2F0ZShvYmplY3QpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChwcmVkaWNhdGVUeXBlID09IFwic3RyaW5nXCIpIC8vIEdpdmVuIGEgc3RyaW5nOyB0cmVhdCBpdCBhcyBhIHByb3BlcnR5IG5hbWUgb24gdGhlIGRhdGEgdmFsdWVcclxuICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3RbcHJlZGljYXRlXTtcclxuICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2l2ZW4gbm8gb3B0aW9uc1RleHQgYXJnOyB1c2UgdGhlIGRhdGEgdmFsdWUgaXRzZWxmXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY2FuIHJ1biBhdCB0d28gZGlmZmVyZW50IHRpbWVzOlxyXG4gICAgICAgIC8vIFRoZSBmaXJzdCBpcyB3aGVuIHRoZSB3aG9sZSBhcnJheSBpcyBiZWluZyB1cGRhdGVkIGRpcmVjdGx5IGZyb20gdGhpcyBiaW5kaW5nIGhhbmRsZXIuXHJcbiAgICAgICAgLy8gVGhlIHNlY29uZCBpcyB3aGVuIGFuIG9ic2VydmFibGUgdmFsdWUgZm9yIGEgc3BlY2lmaWMgYXJyYXkgZW50cnkgaXMgdXBkYXRlZC5cclxuICAgICAgICAvLyBvbGRPcHRpb25zIHdpbGwgYmUgZW1wdHkgaW4gdGhlIGZpcnN0IGNhc2UsIGJ1dCB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSBwcmV2aW91c2x5IGdlbmVyYXRlZCBvcHRpb24gaW4gdGhlIHNlY29uZC5cclxuICAgICAgICB2YXIgaXRlbVVwZGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGZ1bmN0aW9uIG9wdGlvbkZvckFycmF5SXRlbShhcnJheUVudHJ5LCBpbmRleCwgb2xkT3B0aW9ucykge1xyXG4gICAgICAgICAgICBpZiAob2xkT3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMgPSAhdmFsdWVBbGxvd1Vuc2V0ICYmIG9sZE9wdGlvbnNbMF0uc2VsZWN0ZWQgPyBbIGtvLnNlbGVjdEV4dGVuc2lvbnMucmVhZFZhbHVlKG9sZE9wdGlvbnNbMF0pIF0gOiBbXTtcclxuICAgICAgICAgICAgICAgIGl0ZW1VcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBvcHRpb24gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKTtcclxuICAgICAgICAgICAgaWYgKGFycmF5RW50cnkgPT09IGNhcHRpb25QbGFjZWhvbGRlcikge1xyXG4gICAgICAgICAgICAgICAga28udXRpbHMuc2V0VGV4dENvbnRlbnQob3B0aW9uLCBhbGxCaW5kaW5ncy5nZXQoJ29wdGlvbnNDYXB0aW9uJykpO1xyXG4gICAgICAgICAgICAgICAga28uc2VsZWN0RXh0ZW5zaW9ucy53cml0ZVZhbHVlKG9wdGlvbiwgdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIEFwcGx5IGEgdmFsdWUgdG8gdGhlIG9wdGlvbiBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICB2YXIgb3B0aW9uVmFsdWUgPSBhcHBseVRvT2JqZWN0KGFycmF5RW50cnksIGFsbEJpbmRpbmdzLmdldCgnb3B0aW9uc1ZhbHVlJyksIGFycmF5RW50cnkpO1xyXG4gICAgICAgICAgICAgICAga28uc2VsZWN0RXh0ZW5zaW9ucy53cml0ZVZhbHVlKG9wdGlvbiwga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShvcHRpb25WYWx1ZSkpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEFwcGx5IHNvbWUgdGV4dCB0byB0aGUgb3B0aW9uIGVsZW1lbnRcclxuICAgICAgICAgICAgICAgIHZhciBvcHRpb25UZXh0ID0gYXBwbHlUb09iamVjdChhcnJheUVudHJ5LCBhbGxCaW5kaW5ncy5nZXQoJ29wdGlvbnNUZXh0JyksIG9wdGlvblZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGtvLnV0aWxzLnNldFRleHRDb250ZW50KG9wdGlvbiwgb3B0aW9uVGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFtvcHRpb25dO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQnkgdXNpbmcgYSBiZWZvcmVSZW1vdmUgY2FsbGJhY2ssIHdlIGRlbGF5IHRoZSByZW1vdmFsIHVudGlsIGFmdGVyIG5ldyBpdGVtcyBhcmUgYWRkZWQuIFRoaXMgZml4ZXMgYSBzZWxlY3Rpb25cclxuICAgICAgICAvLyBwcm9ibGVtIGluIElFPD04IGFuZCBGaXJlZm94LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2tub2Nrb3V0L2tub2Nrb3V0L2lzc3Vlcy8xMjA4XHJcbiAgICAgICAgYXJyYXlUb0RvbU5vZGVDaGlsZHJlbk9wdGlvbnNbJ2JlZm9yZVJlbW92ZSddID1cclxuICAgICAgICAgICAgZnVuY3Rpb24gKG9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZChvcHRpb24pO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBzZXRTZWxlY3Rpb25DYWxsYmFjayhhcnJheUVudHJ5LCBuZXdPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtVXBkYXRlICYmIHZhbHVlQWxsb3dVbnNldCkge1xyXG4gICAgICAgICAgICAgICAgLy8gVGhlIG1vZGVsIHZhbHVlIGlzIGF1dGhvcml0YXRpdmUsIHNvIG1ha2Ugc3VyZSBpdHMgdmFsdWUgaXMgdGhlIG9uZSBzZWxlY3RlZFxyXG4gICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byB1c2UgZGVwZW5kZW5jeURldGVjdGlvbi5pZ25vcmUgc2luY2Ugc2V0RG9tTm9kZUNoaWxkcmVuRnJvbUFycmF5TWFwcGluZyBkb2VzIHNvIGFscmVhZHkuXHJcbiAgICAgICAgICAgICAgICBrby5zZWxlY3RFeHRlbnNpb25zLndyaXRlVmFsdWUoZWxlbWVudCwga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShhbGxCaW5kaW5ncy5nZXQoJ3ZhbHVlJykpLCB0cnVlIC8qIGFsbG93VW5zZXQgKi8pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJRTYgZG9lc24ndCBsaWtlIHVzIHRvIGFzc2lnbiBzZWxlY3Rpb24gdG8gT1BUSU9OIG5vZGVzIGJlZm9yZSB0aGV5J3JlIGFkZGVkIHRvIHRoZSBkb2N1bWVudC5cclxuICAgICAgICAgICAgICAgIC8vIFRoYXQncyB3aHkgd2UgZmlyc3QgYWRkZWQgdGhlbSB3aXRob3V0IHNlbGVjdGlvbi4gTm93IGl0J3MgdGltZSB0byBzZXQgdGhlIHNlbGVjdGlvbi5cclxuICAgICAgICAgICAgICAgIHZhciBpc1NlbGVjdGVkID0ga28udXRpbHMuYXJyYXlJbmRleE9mKHByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMsIGtvLnNlbGVjdEV4dGVuc2lvbnMucmVhZFZhbHVlKG5ld09wdGlvbnNbMF0pKSA+PSAwO1xyXG4gICAgICAgICAgICAgICAga28udXRpbHMuc2V0T3B0aW9uTm9kZVNlbGVjdGlvblN0YXRlKG5ld09wdGlvbnNbMF0sIGlzU2VsZWN0ZWQpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgb3B0aW9uIHdhcyBjaGFuZ2VkIGZyb20gYmVpbmcgc2VsZWN0ZWQgZHVyaW5nIGEgc2luZ2xlLWl0ZW0gdXBkYXRlLCBub3RpZnkgdGhlIGNoYW5nZVxyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1VcGRhdGUgJiYgIWlzU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBrby5kZXBlbmRlbmN5RGV0ZWN0aW9uLmlnbm9yZShrby51dGlscy50cmlnZ2VyRXZlbnQsIG51bGwsIFtlbGVtZW50LCBcImNoYW5nZVwiXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjYWxsYmFjayA9IHNldFNlbGVjdGlvbkNhbGxiYWNrO1xyXG4gICAgICAgIGlmIChhbGxCaW5kaW5nc1snaGFzJ10oJ29wdGlvbnNBZnRlclJlbmRlcicpICYmIHR5cGVvZiBhbGxCaW5kaW5ncy5nZXQoJ29wdGlvbnNBZnRlclJlbmRlcicpID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uKGFycmF5RW50cnksIG5ld09wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvbkNhbGxiYWNrKGFycmF5RW50cnksIG5ld09wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAga28uZGVwZW5kZW5jeURldGVjdGlvbi5pZ25vcmUoYWxsQmluZGluZ3MuZ2V0KCdvcHRpb25zQWZ0ZXJSZW5kZXInKSwgbnVsbCwgW25ld09wdGlvbnNbMF0sIGFycmF5RW50cnkgIT09IGNhcHRpb25QbGFjZWhvbGRlciA/IGFycmF5RW50cnkgOiB1bmRlZmluZWRdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAga28udXRpbHMuc2V0RG9tTm9kZUNoaWxkcmVuRnJvbUFycmF5TWFwcGluZyhlbGVtZW50LCBmaWx0ZXJlZEFycmF5LCBvcHRpb25Gb3JBcnJheUl0ZW0sIGFycmF5VG9Eb21Ob2RlQ2hpbGRyZW5PcHRpb25zLCBjYWxsYmFjayk7XHJcblxyXG4gICAgICAgIGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24uaWdub3JlKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlQWxsb3dVbnNldCkge1xyXG4gICAgICAgICAgICAgICAgLy8gVGhlIG1vZGVsIHZhbHVlIGlzIGF1dGhvcml0YXRpdmUsIHNvIG1ha2Ugc3VyZSBpdHMgdmFsdWUgaXMgdGhlIG9uZSBzZWxlY3RlZFxyXG4gICAgICAgICAgICAgICAga28uc2VsZWN0RXh0ZW5zaW9ucy53cml0ZVZhbHVlKGVsZW1lbnQsIGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUoYWxsQmluZGluZ3MuZ2V0KCd2YWx1ZScpKSwgdHJ1ZSAvKiBhbGxvd1Vuc2V0ICovKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIERldGVybWluZSBpZiB0aGUgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIHVwZGF0aW5nIHRoZSBvcHRpb25zIGxpc3RcclxuICAgICAgICAgICAgICAgIHZhciBzZWxlY3Rpb25DaGFuZ2VkO1xyXG4gICAgICAgICAgICAgICAgaWYgKG11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGEgbXVsdGlwbGUtc2VsZWN0IGJveCwgY29tcGFyZSB0aGUgbmV3IHNlbGVjdGlvbiBjb3VudCB0byB0aGUgcHJldmlvdXMgb25lXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQnV0IGlmIG5vdGhpbmcgd2FzIHNlbGVjdGVkIGJlZm9yZSwgdGhlIHNlbGVjdGlvbiBjYW4ndCBoYXZlIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gcHJldmlvdXNTZWxlY3RlZFZhbHVlcy5sZW5ndGggJiYgc2VsZWN0ZWRPcHRpb25zKCkubGVuZ3RoIDwgcHJldmlvdXNTZWxlY3RlZFZhbHVlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciBhIHNpbmdsZS1zZWxlY3QgYm94LCBjb21wYXJlIHRoZSBjdXJyZW50IHZhbHVlIHRvIHRoZSBwcmV2aW91cyB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEJ1dCBpZiBub3RoaW5nIHdhcyBzZWxlY3RlZCBiZWZvcmUgb3Igbm90aGluZyBpcyBzZWxlY3RlZCBub3csIGp1c3QgbG9vayBmb3IgYSBjaGFuZ2UgaW4gc2VsZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IChwcmV2aW91c1NlbGVjdGVkVmFsdWVzLmxlbmd0aCAmJiBlbGVtZW50LnNlbGVjdGVkSW5kZXggPj0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoa28uc2VsZWN0RXh0ZW5zaW9ucy5yZWFkVmFsdWUoZWxlbWVudC5vcHRpb25zW2VsZW1lbnQuc2VsZWN0ZWRJbmRleF0pICE9PSBwcmV2aW91c1NlbGVjdGVkVmFsdWVzWzBdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChwcmV2aW91c1NlbGVjdGVkVmFsdWVzLmxlbmd0aCB8fCBlbGVtZW50LnNlbGVjdGVkSW5kZXggPj0gMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIGNvbnNpc3RlbmN5IGJldHdlZW4gbW9kZWwgdmFsdWUgYW5kIHNlbGVjdGVkIG9wdGlvbi5cclxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBkcm9wZG93biB3YXMgY2hhbmdlZCBzbyB0aGF0IHNlbGVjdGlvbiBpcyBubyBsb25nZXIgdGhlIHNhbWUsXHJcbiAgICAgICAgICAgICAgICAvLyBub3RpZnkgdGhlIHZhbHVlIG9yIHNlbGVjdGVkT3B0aW9ucyBiaW5kaW5nLlxyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBrby51dGlscy50cmlnZ2VyRXZlbnQoZWxlbWVudCwgXCJjaGFuZ2VcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgSUUgYnVnXHJcbiAgICAgICAga28udXRpbHMuZW5zdXJlU2VsZWN0RWxlbWVudElzUmVuZGVyZWRDb3JyZWN0bHkoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGlmIChwcmV2aW91c1Njcm9sbFRvcCAmJiBNYXRoLmFicyhwcmV2aW91c1Njcm9sbFRvcCAtIGVsZW1lbnQuc2Nyb2xsVG9wKSA+IDIwKVxyXG4gICAgICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IHByZXZpb3VzU2Nyb2xsVG9wO1xyXG4gICAgfVxyXG59O1xyXG5rby5iaW5kaW5nSGFuZGxlcnNbJ29wdGlvbnMnXS5vcHRpb25WYWx1ZURvbURhdGFLZXkgPSBrby51dGlscy5kb21EYXRhLm5leHRLZXkoKTtcclxua28uYmluZGluZ0hhbmRsZXJzWydzZWxlY3RlZE9wdGlvbnMnXSA9IHtcclxuICAgICdhZnRlcic6IFsnb3B0aW9ucycsICdmb3JlYWNoJ10sXHJcbiAgICAnaW5pdCc6IGZ1bmN0aW9uIChlbGVtZW50LCB2YWx1ZUFjY2Vzc29yLCBhbGxCaW5kaW5ncykge1xyXG4gICAgICAgIGtvLnV0aWxzLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGVsZW1lbnQsIFwiY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVBY2Nlc3NvcigpLCB2YWx1ZVRvV3JpdGUgPSBbXTtcclxuICAgICAgICAgICAga28udXRpbHMuYXJyYXlGb3JFYWNoKGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJvcHRpb25cIiksIGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLnNlbGVjdGVkKVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVG9Xcml0ZS5wdXNoKGtvLnNlbGVjdEV4dGVuc2lvbnMucmVhZFZhbHVlKG5vZGUpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGtvLmV4cHJlc3Npb25SZXdyaXRpbmcud3JpdGVWYWx1ZVRvUHJvcGVydHkodmFsdWUsIGFsbEJpbmRpbmdzLCAnc2VsZWN0ZWRPcHRpb25zJywgdmFsdWVUb1dyaXRlKTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICAndXBkYXRlJzogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IpIHtcclxuICAgICAgICBpZiAoa28udXRpbHMudGFnTmFtZUxvd2VyKGVsZW1lbnQpICE9IFwic2VsZWN0XCIpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInZhbHVlcyBiaW5kaW5nIGFwcGxpZXMgb25seSB0byBTRUxFQ1QgZWxlbWVudHNcIik7XHJcblxyXG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IGtvLnV0aWxzLnVud3JhcE9ic2VydmFibGUodmFsdWVBY2Nlc3NvcigpKSxcclxuICAgICAgICAgICAgcHJldmlvdXNTY3JvbGxUb3AgPSBlbGVtZW50LnNjcm9sbFRvcDtcclxuXHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlICYmIHR5cGVvZiBuZXdWYWx1ZS5sZW5ndGggPT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICBrby51dGlscy5hcnJheUZvckVhY2goZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIm9wdGlvblwiKSwgZnVuY3Rpb24obm9kZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlzU2VsZWN0ZWQgPSBrby51dGlscy5hcnJheUluZGV4T2YobmV3VmFsdWUsIGtvLnNlbGVjdEV4dGVuc2lvbnMucmVhZFZhbHVlKG5vZGUpKSA+PSAwO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuc2VsZWN0ZWQgIT0gaXNTZWxlY3RlZCkgeyAgICAgIC8vIFRoaXMgY2hlY2sgcHJldmVudHMgZmxhc2hpbmcgb2YgdGhlIHNlbGVjdCBlbGVtZW50IGluIElFXHJcbiAgICAgICAgICAgICAgICAgICAga28udXRpbHMuc2V0T3B0aW9uTm9kZVNlbGVjdGlvblN0YXRlKG5vZGUsIGlzU2VsZWN0ZWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gcHJldmlvdXNTY3JvbGxUb3A7XHJcbiAgICB9XHJcbn07XHJcbmtvLmV4cHJlc3Npb25SZXdyaXRpbmcudHdvV2F5QmluZGluZ3NbJ3NlbGVjdGVkT3B0aW9ucyddID0gdHJ1ZTtcclxua28uYmluZGluZ0hhbmRsZXJzWydzdHlsZSddID0ge1xyXG4gICAgJ3VwZGF0ZSc6IGZ1bmN0aW9uIChlbGVtZW50LCB2YWx1ZUFjY2Vzc29yKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZSh2YWx1ZUFjY2Vzc29yKCkgfHwge30pO1xyXG4gICAgICAgIGtvLnV0aWxzLm9iamVjdEZvckVhY2godmFsdWUsIGZ1bmN0aW9uKHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSkge1xyXG4gICAgICAgICAgICBzdHlsZVZhbHVlID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShzdHlsZVZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzdHlsZVZhbHVlID09PSBudWxsIHx8IHN0eWxlVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBzdHlsZVZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gRW1wdHkgc3RyaW5nIHJlbW92ZXMgdGhlIHZhbHVlLCB3aGVyZWFzIG51bGwvdW5kZWZpbmVkIGhhdmUgbm8gZWZmZWN0XHJcbiAgICAgICAgICAgICAgICBzdHlsZVZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxlbWVudC5zdHlsZVtzdHlsZU5hbWVdID0gc3R5bGVWYWx1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxua28uYmluZGluZ0hhbmRsZXJzWydzdWJtaXQnXSA9IHtcclxuICAgICdpbml0JzogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IsIGFsbEJpbmRpbmdzLCB2aWV3TW9kZWwsIGJpbmRpbmdDb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZUFjY2Vzc29yKCkgIT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgdmFsdWUgZm9yIGEgc3VibWl0IGJpbmRpbmcgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xyXG4gICAgICAgIGtvLnV0aWxzLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGVsZW1lbnQsIFwic3VibWl0XCIsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICB2YXIgaGFuZGxlclJldHVyblZhbHVlO1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZUFjY2Vzc29yKCk7XHJcbiAgICAgICAgICAgIHRyeSB7IGhhbmRsZXJSZXR1cm5WYWx1ZSA9IHZhbHVlLmNhbGwoYmluZGluZ0NvbnRleHRbJyRkYXRhJ10sIGVsZW1lbnQpOyB9XHJcbiAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJSZXR1cm5WYWx1ZSAhPT0gdHJ1ZSkgeyAvLyBOb3JtYWxseSB3ZSB3YW50IHRvIHByZXZlbnQgZGVmYXVsdCBhY3Rpb24uIERldmVsb3BlciBjYW4gb3ZlcnJpZGUgdGhpcyBiZSBleHBsaWNpdGx5IHJldHVybmluZyB0cnVlLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdClcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxua28uYmluZGluZ0hhbmRsZXJzWyd0ZXh0J10gPSB7XHJcbiAgICAnaW5pdCc6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIFByZXZlbnQgYmluZGluZyBvbiB0aGUgZHluYW1pY2FsbHktaW5qZWN0ZWQgdGV4dCBub2RlIChhcyBkZXZlbG9wZXJzIGFyZSB1bmxpa2VseSB0byBleHBlY3QgdGhhdCwgYW5kIGl0IGhhcyBzZWN1cml0eSBpbXBsaWNhdGlvbnMpLlxyXG4gICAgICAgIC8vIEl0IHNob3VsZCBhbHNvIG1ha2UgdGhpbmdzIGZhc3RlciwgYXMgd2Ugbm8gbG9uZ2VyIGhhdmUgdG8gY29uc2lkZXIgd2hldGhlciB0aGUgdGV4dCBub2RlIG1pZ2h0IGJlIGJpbmRhYmxlLlxyXG4gICAgICAgIHJldHVybiB7ICdjb250cm9sc0Rlc2NlbmRhbnRCaW5kaW5ncyc6IHRydWUgfTtcclxuICAgIH0sXHJcbiAgICAndXBkYXRlJzogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IpIHtcclxuICAgICAgICBrby51dGlscy5zZXRUZXh0Q29udGVudChlbGVtZW50LCB2YWx1ZUFjY2Vzc29yKCkpO1xyXG4gICAgfVxyXG59O1xyXG5rby52aXJ0dWFsRWxlbWVudHMuYWxsb3dlZEJpbmRpbmdzWyd0ZXh0J10gPSB0cnVlO1xyXG4oZnVuY3Rpb24gKCkge1xyXG5cclxuaWYgKHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yKSB7XHJcbiAgICB2YXIgcGFyc2VWZXJzaW9uID0gZnVuY3Rpb24gKG1hdGNoZXMpIHtcclxuICAgICAgICBpZiAobWF0Y2hlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChtYXRjaGVzWzFdKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIERldGVjdCB2YXJpb3VzIGJyb3dzZXIgdmVyc2lvbnMgYmVjYXVzZSBzb21lIG9sZCB2ZXJzaW9ucyBkb24ndCBmdWxseSBzdXBwb3J0IHRoZSAnaW5wdXQnIGV2ZW50XHJcbiAgICB2YXIgb3BlcmFWZXJzaW9uID0gd2luZG93Lm9wZXJhICYmIHdpbmRvdy5vcGVyYS52ZXJzaW9uICYmIHBhcnNlSW50KHdpbmRvdy5vcGVyYS52ZXJzaW9uKCkpLFxyXG4gICAgICAgIHVzZXJBZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LFxyXG4gICAgICAgIHNhZmFyaVZlcnNpb24gPSBwYXJzZVZlcnNpb24odXNlckFnZW50Lm1hdGNoKC9eKD86KD8hY2hyb21lKS4pKnZlcnNpb25cXC8oW14gXSopIHNhZmFyaS9pKSksXHJcbiAgICAgICAgZmlyZWZveFZlcnNpb24gPSBwYXJzZVZlcnNpb24odXNlckFnZW50Lm1hdGNoKC9GaXJlZm94XFwvKFteIF0qKS8pKTtcclxufVxyXG5cclxuLy8gSUUgOCBhbmQgOSBoYXZlIGJ1Z3MgdGhhdCBwcmV2ZW50IHRoZSBub3JtYWwgZXZlbnRzIGZyb20gZmlyaW5nIHdoZW4gdGhlIHZhbHVlIGNoYW5nZXMuXHJcbi8vIEJ1dCBpdCBkb2VzIGZpcmUgdGhlICdzZWxlY3Rpb25jaGFuZ2UnIGV2ZW50IG9uIG1hbnkgb2YgdGhvc2UsIHByZXN1bWFibHkgYmVjYXVzZSB0aGVcclxuLy8gY3Vyc29yIGlzIG1vdmluZyBhbmQgdGhhdCBjb3VudHMgYXMgdGhlIHNlbGVjdGlvbiBjaGFuZ2luZy4gVGhlICdzZWxlY3Rpb25jaGFuZ2UnIGV2ZW50IGlzXHJcbi8vIGZpcmVkIGF0IHRoZSBkb2N1bWVudCBsZXZlbCBvbmx5IGFuZCBkb2Vzbid0IGRpcmVjdGx5IGluZGljYXRlIHdoaWNoIGVsZW1lbnQgY2hhbmdlZC4gV2VcclxuLy8gc2V0IHVwIGp1c3Qgb25lIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBkb2N1bWVudCBhbmQgdXNlICdhY3RpdmVFbGVtZW50JyB0byBkZXRlcm1pbmUgd2hpY2hcclxuLy8gZWxlbWVudCB3YXMgY2hhbmdlZC5cclxuaWYgKGtvLnV0aWxzLmllVmVyc2lvbiA8IDEwKSB7XHJcbiAgICB2YXIgc2VsZWN0aW9uQ2hhbmdlUmVnaXN0ZXJlZE5hbWUgPSBrby51dGlscy5kb21EYXRhLm5leHRLZXkoKSxcclxuICAgICAgICBzZWxlY3Rpb25DaGFuZ2VIYW5kbGVyTmFtZSA9IGtvLnV0aWxzLmRvbURhdGEubmV4dEtleSgpO1xyXG4gICAgdmFyIHNlbGVjdGlvbkNoYW5nZUhhbmRsZXIgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLmFjdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgICAgIGhhbmRsZXIgPSB0YXJnZXQgJiYga28udXRpbHMuZG9tRGF0YS5nZXQodGFyZ2V0LCBzZWxlY3Rpb25DaGFuZ2VIYW5kbGVyTmFtZSk7XHJcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcclxuICAgICAgICAgICAgaGFuZGxlcihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHZhciByZWdpc3RlckZvclNlbGVjdGlvbkNoYW5nZUV2ZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIGhhbmRsZXIpIHtcclxuICAgICAgICB2YXIgb3duZXJEb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQ7XHJcbiAgICAgICAgaWYgKCFrby51dGlscy5kb21EYXRhLmdldChvd25lckRvYywgc2VsZWN0aW9uQ2hhbmdlUmVnaXN0ZXJlZE5hbWUpKSB7XHJcbiAgICAgICAgICAgIGtvLnV0aWxzLmRvbURhdGEuc2V0KG93bmVyRG9jLCBzZWxlY3Rpb25DaGFuZ2VSZWdpc3RlcmVkTmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGtvLnV0aWxzLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKG93bmVyRG9jLCAnc2VsZWN0aW9uY2hhbmdlJywgc2VsZWN0aW9uQ2hhbmdlSGFuZGxlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGtvLnV0aWxzLmRvbURhdGEuc2V0KGVsZW1lbnQsIHNlbGVjdGlvbkNoYW5nZUhhbmRsZXJOYW1lLCBoYW5kbGVyKTtcclxuICAgIH07XHJcbn1cclxuXHJcbmtvLmJpbmRpbmdIYW5kbGVyc1sndGV4dElucHV0J10gPSB7XHJcbiAgICAnaW5pdCc6IGZ1bmN0aW9uIChlbGVtZW50LCB2YWx1ZUFjY2Vzc29yLCBhbGxCaW5kaW5ncykge1xyXG5cclxuICAgICAgICB2YXIgcHJldmlvdXNFbGVtZW50VmFsdWUgPSBlbGVtZW50LnZhbHVlLFxyXG4gICAgICAgICAgICB0aW1lb3V0SGFuZGxlLFxyXG4gICAgICAgICAgICBlbGVtZW50VmFsdWVCZWZvcmVFdmVudDtcclxuXHJcbiAgICAgICAgdmFyIHVwZGF0ZU1vZGVsID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcclxuICAgICAgICAgICAgZWxlbWVudFZhbHVlQmVmb3JlRXZlbnQgPSB0aW1lb3V0SGFuZGxlID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRWYWx1ZSA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91c0VsZW1lbnRWYWx1ZSAhPT0gZWxlbWVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBQcm92aWRlIGEgd2F5IGZvciB0ZXN0cyB0byBrbm93IGV4YWN0bHkgd2hpY2ggZXZlbnQgd2FzIHByb2Nlc3NlZFxyXG4gICAgICAgICAgICAgICAgaWYgKERFQlVHICYmIGV2ZW50KSBlbGVtZW50Wydfa29fdGV4dElucHV0UHJvY2Vzc2VkRXZlbnQnXSA9IGV2ZW50LnR5cGU7XHJcbiAgICAgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnRWYWx1ZSA9IGVsZW1lbnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIGtvLmV4cHJlc3Npb25SZXdyaXRpbmcud3JpdGVWYWx1ZVRvUHJvcGVydHkodmFsdWVBY2Nlc3NvcigpLCBhbGxCaW5kaW5ncywgJ3RleHRJbnB1dCcsIGVsZW1lbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgZGVmZXJVcGRhdGVNb2RlbCA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoIXRpbWVvdXRIYW5kbGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRoZSBlbGVtZW50VmFsdWVCZWZvcmVFdmVudCB2YXJpYWJsZSBpcyBzZXQgKm9ubHkqIGR1cmluZyB0aGUgYnJpZWYgZ2FwIGJldHdlZW4gYW5cclxuICAgICAgICAgICAgICAgIC8vIGV2ZW50IGZpcmluZyBhbmQgdGhlIHVwZGF0ZU1vZGVsIGZ1bmN0aW9uIHJ1bm5pbmcuIFRoaXMgYWxsb3dzIHVzIHRvIGlnbm9yZSBtb2RlbFxyXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlcyB0aGF0IGFyZSBmcm9tIHRoZSBwcmV2aW91cyBzdGF0ZSBvZiB0aGUgZWxlbWVudCwgdXN1YWxseSBkdWUgdG8gdGVjaG5pcXVlc1xyXG4gICAgICAgICAgICAgICAgLy8gc3VjaCBhcyByYXRlTGltaXQuIFN1Y2ggdXBkYXRlcywgaWYgbm90IGlnbm9yZWQsIGNhbiBjYXVzZSBrZXlzdHJva2VzIHRvIGJlIGxvc3QuXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50VmFsdWVCZWZvcmVFdmVudCA9IGVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgaGFuZGxlciA9IERFQlVHID8gdXBkYXRlTW9kZWwuYmluZChlbGVtZW50LCB7dHlwZTogZXZlbnQudHlwZX0pIDogdXBkYXRlTW9kZWw7XHJcbiAgICAgICAgICAgICAgICB0aW1lb3V0SGFuZGxlID0ga28udXRpbHMuc2V0VGltZW91dChoYW5kbGVyLCA0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIElFOSB3aWxsIG1lc3MgdXAgdGhlIERPTSBpZiB5b3UgaGFuZGxlIGV2ZW50cyBzeW5jaHJvbm91c2x5IHdoaWNoIHJlc3VsdHMgaW4gRE9NIGNoYW5nZXMgKHN1Y2ggYXMgb3RoZXIgYmluZGluZ3MpO1xyXG4gICAgICAgIC8vIHNvIHdlJ2xsIG1ha2Ugc3VyZSBhbGwgdXBkYXRlcyBhcmUgYXN5bmNocm9ub3VzXHJcbiAgICAgICAgdmFyIGllVXBkYXRlTW9kZWwgPSBrby51dGlscy5pZVZlcnNpb24gPT0gOSA/IGRlZmVyVXBkYXRlTW9kZWwgOiB1cGRhdGVNb2RlbDtcclxuXHJcbiAgICAgICAgdmFyIHVwZGF0ZVZpZXcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBtb2RlbFZhbHVlID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZSh2YWx1ZUFjY2Vzc29yKCkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1vZGVsVmFsdWUgPT09IG51bGwgfHwgbW9kZWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBtb2RlbFZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VmFsdWVCZWZvcmVFdmVudCAhPT0gdW5kZWZpbmVkICYmIG1vZGVsVmFsdWUgPT09IGVsZW1lbnRWYWx1ZUJlZm9yZUV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICBrby51dGlscy5zZXRUaW1lb3V0KHVwZGF0ZVZpZXcsIDQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGVsZW1lbnQgb25seSBpZiB0aGUgZWxlbWVudCBhbmQgbW9kZWwgYXJlIGRpZmZlcmVudC4gT24gc29tZSBicm93c2VycywgdXBkYXRpbmcgdGhlIHZhbHVlXHJcbiAgICAgICAgICAgIC8vIHdpbGwgbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIGlucHV0LCB3aGljaCB3b3VsZCBiZSBiYWQgd2hpbGUgdGhlIHVzZXIgaXMgdHlwaW5nLlxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZSAhPT0gbW9kZWxWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50VmFsdWUgPSBtb2RlbFZhbHVlOyAgLy8gTWFrZSBzdXJlIHdlIGlnbm9yZSBldmVudHMgKHByb3BlcnR5Y2hhbmdlKSB0aGF0IHJlc3VsdCBmcm9tIHVwZGF0aW5nIHRoZSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IG1vZGVsVmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgb25FdmVudCA9IGZ1bmN0aW9uIChldmVudCwgaGFuZGxlcikge1xyXG4gICAgICAgICAgICBrby51dGlscy5yZWdpc3RlckV2ZW50SGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlcik7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKERFQlVHICYmIGtvLmJpbmRpbmdIYW5kbGVyc1sndGV4dElucHV0J11bJ19mb3JjZVVwZGF0ZU9uJ10pIHtcclxuICAgICAgICAgICAgLy8gUHJvdmlkZSBhIHdheSBmb3IgdGVzdHMgdG8gc3BlY2lmeSBleGFjdGx5IHdoaWNoIGV2ZW50cyBhcmUgYm91bmRcclxuICAgICAgICAgICAga28udXRpbHMuYXJyYXlGb3JFYWNoKGtvLmJpbmRpbmdIYW5kbGVyc1sndGV4dElucHV0J11bJ19mb3JjZVVwZGF0ZU9uJ10sIGZ1bmN0aW9uKGV2ZW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50TmFtZS5zbGljZSgwLDUpID09ICdhZnRlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICBvbkV2ZW50KGV2ZW50TmFtZS5zbGljZSg1KSwgZGVmZXJVcGRhdGVNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG9uRXZlbnQoZXZlbnROYW1lLCB1cGRhdGVNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChrby51dGlscy5pZVZlcnNpb24gPCAxMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgPD0gOCBkb2Vzbid0IHN1cHBvcnQgdGhlICdpbnB1dCcgZXZlbnQsIGJ1dCBkb2VzIGluY2x1ZGUgJ3Byb3BlcnR5Y2hhbmdlJyB0aGF0IGZpcmVzIHdoZW5ldmVyXHJcbiAgICAgICAgICAgICAgICAvLyBhbnkgcHJvcGVydHkgb2YgYW4gZWxlbWVudCBjaGFuZ2VzLiBVbmxpa2UgJ2lucHV0JywgaXQgYWxzbyBmaXJlcyBpZiBhIHByb3BlcnR5IGlzIGNoYW5nZWQgZnJvbSBKYXZhU2NyaXB0IGNvZGUsXHJcbiAgICAgICAgICAgICAgICAvLyBidXQgdGhhdCdzIGFuIGFjY2VwdGFibGUgY29tcHJvbWlzZSBmb3IgdGhpcyBiaW5kaW5nLiBJRSA5IGRvZXMgc3VwcG9ydCAnaW5wdXQnLCBidXQgc2luY2UgaXQgZG9lc24ndCBmaXJlIGl0XHJcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHVzaW5nIGF1dG9jb21wbGV0ZSwgd2UnbGwgdXNlICdwcm9wZXJ0eWNoYW5nZScgZm9yIGl0IGFsc28uXHJcbiAgICAgICAgICAgICAgICBvbkV2ZW50KCdwcm9wZXJ0eWNoYW5nZScsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnByb3BlcnR5TmFtZSA9PT0gJ3ZhbHVlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZVVwZGF0ZU1vZGVsKGV2ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoa28udXRpbHMuaWVWZXJzaW9uID09IDgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJRSA4IGhhcyBhIGJ1ZyB3aGVyZSBpdCBmYWlscyB0byBmaXJlICdwcm9wZXJ0eWNoYW5nZScgb24gdGhlIGZpcnN0IHVwZGF0ZSBmb2xsb3dpbmcgYSB2YWx1ZSBjaGFuZ2UgZnJvbVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEphdmFTY3JpcHQgY29kZS4gSXQgYWxzbyBkb2Vzbid0IGZpcmUgaWYgeW91IGNsZWFyIHRoZSBlbnRpcmUgdmFsdWUuIFRvIGZpeCB0aGlzLCB3ZSBiaW5kIHRvIHRoZSBmb2xsb3dpbmdcclxuICAgICAgICAgICAgICAgICAgICAvLyBldmVudHMgdG9vLlxyXG4gICAgICAgICAgICAgICAgICAgIG9uRXZlbnQoJ2tleXVwJywgdXBkYXRlTW9kZWwpOyAgICAgIC8vIEEgc2luZ2xlIGtleXN0b2tlXHJcbiAgICAgICAgICAgICAgICAgICAgb25FdmVudCgna2V5ZG93bicsIHVwZGF0ZU1vZGVsKTsgICAgLy8gVGhlIGZpcnN0IGNoYXJhY3RlciB3aGVuIGEga2V5IGlzIGhlbGQgZG93blxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGtvLnV0aWxzLmllVmVyc2lvbiA+PSA4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgOSBkb2Vzbid0IGZpcmUgdGhlICdpbnB1dCcgZXZlbnQgd2hlbiBkZWxldGluZyB0ZXh0LCBpbmNsdWRpbmcgdXNpbmdcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYmFja3NwYWNlLCBkZWxldGUsIG9yIGN0cmwteCBrZXlzLCBjbGlja2luZyB0aGUgJ3gnIHRvIGNsZWFyIHRoZSBpbnB1dCwgZHJhZ2dpbmcgdGV4dFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG91dCBvZiB0aGUgZmllbGQsIGFuZCBjdXR0aW5nIG9yIGRlbGV0aW5nIHRleHQgdXNpbmcgdGhlIGNvbnRleHQgbWVudS4gJ3NlbGVjdGlvbmNoYW5nZSdcclxuICAgICAgICAgICAgICAgICAgICAvLyBjYW4gZGV0ZWN0IGFsbCBvZiB0aG9zZSBleGNlcHQgZHJhZ2dpbmcgdGV4dCBvdXQgb2YgdGhlIGZpZWxkLCBmb3Igd2hpY2ggd2UgdXNlICdkcmFnZW5kJy5cclxuICAgICAgICAgICAgICAgICAgICAvLyBUaGVzZSBhcmUgYWxzbyBuZWVkZWQgaW4gSUU4IGJlY2F1c2Ugb2YgdGhlIGJ1ZyBkZXNjcmliZWQgYWJvdmUuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJGb3JTZWxlY3Rpb25DaGFuZ2VFdmVudChlbGVtZW50LCBpZVVwZGF0ZU1vZGVsKTsgIC8vICdzZWxlY3Rpb25jaGFuZ2UnIGNvdmVycyBjdXQsIHBhc3RlLCBkcm9wLCBkZWxldGUsIGV0Yy5cclxuICAgICAgICAgICAgICAgICAgICBvbkV2ZW50KCdkcmFnZW5kJywgZGVmZXJVcGRhdGVNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBBbGwgb3RoZXIgc3VwcG9ydGVkIGJyb3dzZXJzIHN1cHBvcnQgdGhlICdpbnB1dCcgZXZlbnQsIHdoaWNoIGZpcmVzIHdoZW5ldmVyIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50IGlzIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgIC8vIHRocm91Z2ggdGhlIHVzZXIgaW50ZXJmYWNlLlxyXG4gICAgICAgICAgICAgICAgb25FdmVudCgnaW5wdXQnLCB1cGRhdGVNb2RlbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNhZmFyaVZlcnNpb24gPCA1ICYmIGtvLnV0aWxzLnRhZ05hbWVMb3dlcihlbGVtZW50KSA9PT0gXCJ0ZXh0YXJlYVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIDw1IGRvZXNuJ3QgZmlyZSB0aGUgJ2lucHV0JyBldmVudCBmb3IgPHRleHRhcmVhPiBlbGVtZW50cyAoaXQgZG9lcyBmaXJlICd0ZXh0SW5wdXQnXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IG9ubHkgd2hlbiB0eXBpbmcpLiBTbyB3ZSdsbCBqdXN0IGNhdGNoIGFzIG11Y2ggYXMgd2UgY2FuIHdpdGgga2V5ZG93biwgY3V0LCBhbmQgcGFzdGUuXHJcbiAgICAgICAgICAgICAgICAgICAgb25FdmVudCgna2V5ZG93bicsIGRlZmVyVXBkYXRlTW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9uRXZlbnQoJ3Bhc3RlJywgZGVmZXJVcGRhdGVNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb25FdmVudCgnY3V0JywgZGVmZXJVcGRhdGVNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wZXJhVmVyc2lvbiA8IDExKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gT3BlcmEgMTAgZG9lc24ndCBhbHdheXMgZmlyZSB0aGUgJ2lucHV0JyBldmVudCBmb3IgY3V0LCBwYXN0ZSwgdW5kbyAmIGRyb3Agb3BlcmF0aW9ucy5cclxuICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gdHJ5IHRvIGNhdGNoIHNvbWUgb2YgdGhvc2UgdXNpbmcgJ2tleWRvd24nLlxyXG4gICAgICAgICAgICAgICAgICAgIG9uRXZlbnQoJ2tleWRvd24nLCBkZWZlclVwZGF0ZU1vZGVsKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlyZWZveFZlcnNpb24gPCA0LjApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IDw9IDMuNiBkb2Vzbid0IGZpcmUgdGhlICdpbnB1dCcgZXZlbnQgd2hlbiB0ZXh0IGlzIGZpbGxlZCBpbiB0aHJvdWdoIGF1dG9jb21wbGV0ZVxyXG4gICAgICAgICAgICAgICAgICAgIG9uRXZlbnQoJ0RPTUF1dG9Db21wbGV0ZScsIHVwZGF0ZU1vZGVsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCA8PTMuNSBkb2Vzbid0IGZpcmUgdGhlICdpbnB1dCcgZXZlbnQgd2hlbiB0ZXh0IGlzIGRyb3BwZWQgaW50byB0aGUgaW5wdXQuXHJcbiAgICAgICAgICAgICAgICAgICAgb25FdmVudCgnZHJhZ2Ryb3AnLCB1cGRhdGVNb2RlbCk7ICAgICAgIC8vIDwzLjVcclxuICAgICAgICAgICAgICAgICAgICBvbkV2ZW50KCdkcm9wJywgdXBkYXRlTW9kZWwpOyAgICAgICAgICAgLy8gMy41XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEJpbmQgdG8gdGhlIGNoYW5nZSBldmVudCBzbyB0aGF0IHdlIGNhbiBjYXRjaCBwcm9ncmFtbWF0aWMgdXBkYXRlcyBvZiB0aGUgdmFsdWUgdGhhdCBmaXJlIHRoaXMgZXZlbnQuXHJcbiAgICAgICAgb25FdmVudCgnY2hhbmdlJywgdXBkYXRlTW9kZWwpO1xyXG5cclxuICAgICAgICBrby5jb21wdXRlZCh1cGRhdGVWaWV3LCBudWxsLCB7IGRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZDogZWxlbWVudCB9KTtcclxuICAgIH1cclxufTtcclxua28uZXhwcmVzc2lvblJld3JpdGluZy50d29XYXlCaW5kaW5nc1sndGV4dElucHV0J10gPSB0cnVlO1xyXG5cclxuLy8gdGV4dGlucHV0IGlzIGFuIGFsaWFzIGZvciB0ZXh0SW5wdXRcclxua28uYmluZGluZ0hhbmRsZXJzWyd0ZXh0aW5wdXQnXSA9IHtcclxuICAgIC8vIHByZXByb2Nlc3MgaXMgdGhlIG9ubHkgd2F5IHRvIHNldCB1cCBhIGZ1bGwgYWxpYXNcclxuICAgICdwcmVwcm9jZXNzJzogZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBhZGRCaW5kaW5nKSB7XHJcbiAgICAgICAgYWRkQmluZGluZygndGV4dElucHV0JywgdmFsdWUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxufSkoKTtrby5iaW5kaW5nSGFuZGxlcnNbJ3VuaXF1ZU5hbWUnXSA9IHtcclxuICAgICdpbml0JzogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IpIHtcclxuICAgICAgICBpZiAodmFsdWVBY2Nlc3NvcigpKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gXCJrb191bmlxdWVfXCIgKyAoKytrby5iaW5kaW5nSGFuZGxlcnNbJ3VuaXF1ZU5hbWUnXS5jdXJyZW50SW5kZXgpO1xyXG4gICAgICAgICAgICBrby51dGlscy5zZXRFbGVtZW50TmFtZShlbGVtZW50LCBuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbmtvLmJpbmRpbmdIYW5kbGVyc1sndW5pcXVlTmFtZSddLmN1cnJlbnRJbmRleCA9IDA7XHJcbmtvLmJpbmRpbmdIYW5kbGVyc1sndmFsdWUnXSA9IHtcclxuICAgICdhZnRlcic6IFsnb3B0aW9ucycsICdmb3JlYWNoJ10sXHJcbiAgICAnaW5pdCc6IGZ1bmN0aW9uIChlbGVtZW50LCB2YWx1ZUFjY2Vzc29yLCBhbGxCaW5kaW5ncykge1xyXG4gICAgICAgIC8vIElmIHRoZSB2YWx1ZSBiaW5kaW5nIGlzIHBsYWNlZCBvbiBhIHJhZGlvL2NoZWNrYm94LCB0aGVuIGp1c3QgcGFzcyB0aHJvdWdoIHRvIGNoZWNrZWRWYWx1ZSBhbmQgcXVpdFxyXG4gICAgICAgIGlmIChlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSBcImlucHV0XCIgJiYgKGVsZW1lbnQudHlwZSA9PSBcImNoZWNrYm94XCIgfHwgZWxlbWVudC50eXBlID09IFwicmFkaW9cIikpIHtcclxuICAgICAgICAgICAga28uYXBwbHlCaW5kaW5nQWNjZXNzb3JzVG9Ob2RlKGVsZW1lbnQsIHsgJ2NoZWNrZWRWYWx1ZSc6IHZhbHVlQWNjZXNzb3IgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFsd2F5cyBjYXRjaCBcImNoYW5nZVwiIGV2ZW50OyBwb3NzaWJseSBvdGhlciBldmVudHMgdG9vIGlmIGFza2VkXHJcbiAgICAgICAgdmFyIGV2ZW50c1RvQ2F0Y2ggPSBbXCJjaGFuZ2VcIl07XHJcbiAgICAgICAgdmFyIHJlcXVlc3RlZEV2ZW50c1RvQ2F0Y2ggPSBhbGxCaW5kaW5ncy5nZXQoXCJ2YWx1ZVVwZGF0ZVwiKTtcclxuICAgICAgICB2YXIgcHJvcGVydHlDaGFuZ2VkRmlyZWQgPSBmYWxzZTtcclxuICAgICAgICB2YXIgZWxlbWVudFZhbHVlQmVmb3JlRXZlbnQgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAocmVxdWVzdGVkRXZlbnRzVG9DYXRjaCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3RlZEV2ZW50c1RvQ2F0Y2ggPT0gXCJzdHJpbmdcIikgLy8gQWxsb3cgYm90aCBpbmRpdmlkdWFsIGV2ZW50IG5hbWVzLCBhbmQgYXJyYXlzIG9mIGV2ZW50IG5hbWVzXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0ZWRFdmVudHNUb0NhdGNoID0gW3JlcXVlc3RlZEV2ZW50c1RvQ2F0Y2hdO1xyXG4gICAgICAgICAgICBrby51dGlscy5hcnJheVB1c2hBbGwoZXZlbnRzVG9DYXRjaCwgcmVxdWVzdGVkRXZlbnRzVG9DYXRjaCk7XHJcbiAgICAgICAgICAgIGV2ZW50c1RvQ2F0Y2ggPSBrby51dGlscy5hcnJheUdldERpc3RpbmN0VmFsdWVzKGV2ZW50c1RvQ2F0Y2gpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZhbHVlVXBkYXRlSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBlbGVtZW50VmFsdWVCZWZvcmVFdmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIHByb3BlcnR5Q2hhbmdlZEZpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBtb2RlbFZhbHVlID0gdmFsdWVBY2Nlc3NvcigpO1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudFZhbHVlID0ga28uc2VsZWN0RXh0ZW5zaW9ucy5yZWFkVmFsdWUoZWxlbWVudCk7XHJcbiAgICAgICAgICAgIGtvLmV4cHJlc3Npb25SZXdyaXRpbmcud3JpdGVWYWx1ZVRvUHJvcGVydHkobW9kZWxWYWx1ZSwgYWxsQmluZGluZ3MsICd2YWx1ZScsIGVsZW1lbnRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vU3RldmVTYW5kZXJzb24va25vY2tvdXQvaXNzdWVzLzEyMlxyXG4gICAgICAgIC8vIElFIGRvZXNuJ3QgZmlyZSBcImNoYW5nZVwiIGV2ZW50cyBvbiB0ZXh0Ym94ZXMgaWYgdGhlIHVzZXIgc2VsZWN0cyBhIHZhbHVlIGZyb20gaXRzIGF1dG9jb21wbGV0ZSBsaXN0XHJcbiAgICAgICAgdmFyIGllQXV0b0NvbXBsZXRlSGFja05lZWRlZCA9IGtvLnV0aWxzLmllVmVyc2lvbiAmJiBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSBcImlucHV0XCIgJiYgZWxlbWVudC50eXBlID09IFwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVsZW1lbnQuYXV0b2NvbXBsZXRlICE9IFwib2ZmXCIgJiYgKCFlbGVtZW50LmZvcm0gfHwgZWxlbWVudC5mb3JtLmF1dG9jb21wbGV0ZSAhPSBcIm9mZlwiKTtcclxuICAgICAgICBpZiAoaWVBdXRvQ29tcGxldGVIYWNrTmVlZGVkICYmIGtvLnV0aWxzLmFycmF5SW5kZXhPZihldmVudHNUb0NhdGNoLCBcInByb3BlcnR5Y2hhbmdlXCIpID09IC0xKSB7XHJcbiAgICAgICAgICAgIGtvLnV0aWxzLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGVsZW1lbnQsIFwicHJvcGVydHljaGFuZ2VcIiwgZnVuY3Rpb24gKCkgeyBwcm9wZXJ0eUNoYW5nZWRGaXJlZCA9IHRydWUgfSk7XHJcbiAgICAgICAgICAgIGtvLnV0aWxzLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGVsZW1lbnQsIFwiZm9jdXNcIiwgZnVuY3Rpb24gKCkgeyBwcm9wZXJ0eUNoYW5nZWRGaXJlZCA9IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICBrby51dGlscy5yZWdpc3RlckV2ZW50SGFuZGxlcihlbGVtZW50LCBcImJsdXJcIiwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlDaGFuZ2VkRmlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVVwZGF0ZUhhbmRsZXIoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBrby51dGlscy5hcnJheUZvckVhY2goZXZlbnRzVG9DYXRjaCwgZnVuY3Rpb24oZXZlbnROYW1lKSB7XHJcbiAgICAgICAgICAgIC8vIFRoZSBzeW50YXggXCJhZnRlcjxldmVudG5hbWU+XCIgbWVhbnMgXCJydW4gdGhlIGhhbmRsZXIgYXN5bmNocm9ub3VzbHkgYWZ0ZXIgdGhlIGV2ZW50XCJcclxuICAgICAgICAgICAgLy8gVGhpcyBpcyB1c2VmdWwsIGZvciBleGFtcGxlLCB0byBjYXRjaCBcImtleWRvd25cIiBldmVudHMgYWZ0ZXIgdGhlIGJyb3dzZXIgaGFzIHVwZGF0ZWQgdGhlIGNvbnRyb2xcclxuICAgICAgICAgICAgLy8gKG90aGVyd2lzZSwga28uc2VsZWN0RXh0ZW5zaW9ucy5yZWFkVmFsdWUodGhpcykgd2lsbCByZWNlaXZlIHRoZSBjb250cm9sJ3MgdmFsdWUgKmJlZm9yZSogdGhlIGtleSBldmVudClcclxuICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSB2YWx1ZVVwZGF0ZUhhbmRsZXI7XHJcbiAgICAgICAgICAgIGlmIChrby51dGlscy5zdHJpbmdTdGFydHNXaXRoKGV2ZW50TmFtZSwgXCJhZnRlclwiKSkge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBlbGVtZW50VmFsdWVCZWZvcmVFdmVudCB2YXJpYWJsZSBpcyBub24tbnVsbCAqb25seSogZHVyaW5nIHRoZSBicmllZiBnYXAgYmV0d2VlblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGEga2V5WCBldmVudCBmaXJpbmcgYW5kIHRoZSB2YWx1ZVVwZGF0ZUhhbmRsZXIgcnVubmluZywgd2hpY2ggaXMgc2NoZWR1bGVkIHRvIGhhcHBlblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoZSBlYXJsaWVzdCBhc3luY2hyb25vdXMgb3Bwb3J0dW5pdHkuIFdlIHN0b3JlIHRoaXMgdGVtcG9yYXJ5IGluZm9ybWF0aW9uIHNvIHRoYXRcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiwgYmV0d2VlbiBrZXlYIGFuZCB2YWx1ZVVwZGF0ZUhhbmRsZXIsIHRoZSB1bmRlcmx5aW5nIG1vZGVsIHZhbHVlIGNoYW5nZXMgc2VwYXJhdGVseSxcclxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjYW4gb3ZlcndyaXRlIHRoYXQgbW9kZWwgdmFsdWUgY2hhbmdlIHdpdGggdGhlIHZhbHVlIHRoZSB1c2VyIGp1c3QgdHlwZWQuIE90aGVyd2lzZSxcclxuICAgICAgICAgICAgICAgICAgICAvLyB0ZWNobmlxdWVzIGxpa2UgcmF0ZUxpbWl0IGNhbiB0cmlnZ2VyIG1vZGVsIGNoYW5nZXMgYXQgY3JpdGljYWwgbW9tZW50cyB0aGF0IHdpbGxcclxuICAgICAgICAgICAgICAgICAgICAvLyBvdmVycmlkZSB0aGUgdXNlcidzIGlucHV0cywgY2F1c2luZyBrZXlzdHJva2VzIHRvIGJlIGxvc3QuXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFZhbHVlQmVmb3JlRXZlbnQgPSBrby5zZWxlY3RFeHRlbnNpb25zLnJlYWRWYWx1ZShlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBrby51dGlscy5zZXRUaW1lb3V0KHZhbHVlVXBkYXRlSGFuZGxlciwgMCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lID0gZXZlbnROYW1lLnN1YnN0cmluZyhcImFmdGVyXCIubGVuZ3RoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBrby51dGlscy5yZWdpc3RlckV2ZW50SGFuZGxlcihlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB2YXIgdXBkYXRlRnJvbU1vZGVsID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKHZhbHVlQWNjZXNzb3IoKSk7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50VmFsdWUgPSBrby5zZWxlY3RFeHRlbnNpb25zLnJlYWRWYWx1ZShlbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VmFsdWVCZWZvcmVFdmVudCAhPT0gbnVsbCAmJiBuZXdWYWx1ZSA9PT0gZWxlbWVudFZhbHVlQmVmb3JlRXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIGtvLnV0aWxzLnNldFRpbWVvdXQodXBkYXRlRnJvbU1vZGVsLCAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHZhbHVlSGFzQ2hhbmdlZCA9IChuZXdWYWx1ZSAhPT0gZWxlbWVudFZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZUhhc0NoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChrby51dGlscy50YWdOYW1lTG93ZXIoZWxlbWVudCkgPT09IFwic2VsZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWxsb3dVbnNldCA9IGFsbEJpbmRpbmdzLmdldCgndmFsdWVBbGxvd1Vuc2V0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFwcGx5VmFsdWVBY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtvLnNlbGVjdEV4dGVuc2lvbnMud3JpdGVWYWx1ZShlbGVtZW50LCBuZXdWYWx1ZSwgYWxsb3dVbnNldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBhcHBseVZhbHVlQWN0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxsb3dVbnNldCAmJiBuZXdWYWx1ZSAhPT0ga28uc2VsZWN0RXh0ZW5zaW9ucy5yZWFkVmFsdWUoZWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgeW91IHRyeSB0byBzZXQgYSBtb2RlbCB2YWx1ZSB0aGF0IGNhbid0IGJlIHJlcHJlc2VudGVkIGluIGFuIGFscmVhZHktcG9wdWxhdGVkIGRyb3Bkb3duLCByZWplY3QgdGhhdCBjaGFuZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgeW91J3JlIG5vdCBhbGxvd2VkIHRvIGhhdmUgYSBtb2RlbCB2YWx1ZSB0aGF0IGRpc2FncmVlcyB3aXRoIGEgdmlzaWJsZSBVSSBzZWxlY3Rpb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24uaWdub3JlKGtvLnV0aWxzLnRyaWdnZXJFdmVudCwgbnVsbCwgW2VsZW1lbnQsIFwiY2hhbmdlXCJdKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBJRTYgYnVnOiBJdCB3b24ndCByZWxpYWJseSBhcHBseSB2YWx1ZXMgdG8gU0VMRUNUIG5vZGVzIGR1cmluZyB0aGUgc2FtZSBleGVjdXRpb24gdGhyZWFkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJpZ2h0IGFmdGVyIHlvdSd2ZSBjaGFuZ2VkIHRoZSBzZXQgb2YgT1BUSU9OIG5vZGVzIG9uIGl0LiBTbyBmb3IgdGhhdCBub2RlIHR5cGUsIHdlJ2xsIHNjaGVkdWxlIGEgc2Vjb25kIHRocmVhZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBhcHBseSB0aGUgdmFsdWUgYXMgd2VsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAga28udXRpbHMuc2V0VGltZW91dChhcHBseVZhbHVlQWN0aW9uLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGtvLnNlbGVjdEV4dGVuc2lvbnMud3JpdGVWYWx1ZShlbGVtZW50LCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBrby5jb21wdXRlZCh1cGRhdGVGcm9tTW9kZWwsIG51bGwsIHsgZGlzcG9zZVdoZW5Ob2RlSXNSZW1vdmVkOiBlbGVtZW50IH0pO1xyXG4gICAgfSxcclxuICAgICd1cGRhdGUnOiBmdW5jdGlvbigpIHt9IC8vIEtlZXAgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggY29kZSB0aGF0IG1heSBoYXZlIHdyYXBwZWQgdmFsdWUgYmluZGluZ1xyXG59O1xyXG5rby5leHByZXNzaW9uUmV3cml0aW5nLnR3b1dheUJpbmRpbmdzWyd2YWx1ZSddID0gdHJ1ZTtcclxua28uYmluZGluZ0hhbmRsZXJzWyd2aXNpYmxlJ10gPSB7XHJcbiAgICAndXBkYXRlJzogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IpIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKHZhbHVlQWNjZXNzb3IoKSk7XHJcbiAgICAgICAgdmFyIGlzQ3VycmVudGx5VmlzaWJsZSA9ICEoZWxlbWVudC5zdHlsZS5kaXNwbGF5ID09IFwibm9uZVwiKTtcclxuICAgICAgICBpZiAodmFsdWUgJiYgIWlzQ3VycmVudGx5VmlzaWJsZSlcclxuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcclxuICAgICAgICBlbHNlIGlmICgoIXZhbHVlKSAmJiBpc0N1cnJlbnRseVZpc2libGUpXHJcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgfVxyXG59O1xyXG4vLyAnY2xpY2snIGlzIGp1c3QgYSBzaG9ydGhhbmQgZm9yIHRoZSB1c3VhbCBmdWxsLWxlbmd0aCBldmVudDp7Y2xpY2s6aGFuZGxlcn1cclxubWFrZUV2ZW50SGFuZGxlclNob3J0Y3V0KCdjbGljaycpO1xyXG4vLyBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY3VzdG9tIHRlbXBsYXRlIGVuZ2luZSxcclxuLy9cclxuLy8gWzFdIEluaGVyaXQgZnJvbSB0aGlzIGNsYXNzIChsaWtlIGtvLm5hdGl2ZVRlbXBsYXRlRW5naW5lIGRvZXMpXHJcbi8vIFsyXSBPdmVycmlkZSAncmVuZGVyVGVtcGxhdGVTb3VyY2UnLCBzdXBwbHlpbmcgYSBmdW5jdGlvbiB3aXRoIHRoaXMgc2lnbmF0dXJlOlxyXG4vL1xyXG4vLyAgICAgICAgZnVuY3Rpb24gKHRlbXBsYXRlU291cmNlLCBiaW5kaW5nQ29udGV4dCwgb3B0aW9ucykge1xyXG4vLyAgICAgICAgICAgIC8vIC0gdGVtcGxhdGVTb3VyY2UudGV4dCgpIGlzIHRoZSB0ZXh0IG9mIHRoZSB0ZW1wbGF0ZSB5b3Ugc2hvdWxkIHJlbmRlclxyXG4vLyAgICAgICAgICAgIC8vIC0gYmluZGluZ0NvbnRleHQuJGRhdGEgaXMgdGhlIGRhdGEgeW91IHNob3VsZCBwYXNzIGludG8gdGhlIHRlbXBsYXRlXHJcbi8vICAgICAgICAgICAgLy8gICAtIHlvdSBtaWdodCBhbHNvIHdhbnQgdG8gbWFrZSBiaW5kaW5nQ29udGV4dC4kcGFyZW50LCBiaW5kaW5nQ29udGV4dC4kcGFyZW50cyxcclxuLy8gICAgICAgICAgICAvLyAgICAgYW5kIGJpbmRpbmdDb250ZXh0LiRyb290IGF2YWlsYWJsZSBpbiB0aGUgdGVtcGxhdGUgdG9vXHJcbi8vICAgICAgICAgICAgLy8gLSBvcHRpb25zIGdpdmVzIHlvdSBhY2Nlc3MgdG8gYW55IG90aGVyIHByb3BlcnRpZXMgc2V0IG9uIFwiZGF0YS1iaW5kOiB7IHRlbXBsYXRlOiBvcHRpb25zIH1cIlxyXG4vLyAgICAgICAgICAgIC8vIC0gdGVtcGxhdGVEb2N1bWVudCBpcyB0aGUgZG9jdW1lbnQgb2JqZWN0IG9mIHRoZSB0ZW1wbGF0ZVxyXG4vLyAgICAgICAgICAgIC8vXHJcbi8vICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlOiBhbiBhcnJheSBvZiBET00gbm9kZXNcclxuLy8gICAgICAgIH1cclxuLy9cclxuLy8gWzNdIE92ZXJyaWRlICdjcmVhdGVKYXZhU2NyaXB0RXZhbHVhdG9yQmxvY2snLCBzdXBwbHlpbmcgYSBmdW5jdGlvbiB3aXRoIHRoaXMgc2lnbmF0dXJlOlxyXG4vL1xyXG4vLyAgICAgICAgZnVuY3Rpb24gKHNjcmlwdCkge1xyXG4vLyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZTogV2hhdGV2ZXIgc3ludGF4IG1lYW5zIFwiRXZhbHVhdGUgdGhlIEphdmFTY3JpcHQgc3RhdGVtZW50ICdzY3JpcHQnIGFuZCBvdXRwdXQgdGhlIHJlc3VsdFwiXHJcbi8vICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGpxdWVyeS50bXBsIHRlbXBsYXRlIGVuZ2luZSBjb252ZXJ0cyAnc29tZVNjcmlwdCcgdG8gJyR7IHNvbWVTY3JpcHQgfSdcclxuLy8gICAgICAgIH1cclxuLy9cclxuLy8gICAgIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgaWYgeW91IHdhbnQgdG8gYWxsb3cgZGF0YS1iaW5kIGF0dHJpYnV0ZXMgdG8gcmVmZXJlbmNlIGFyYml0cmFyeSB0ZW1wbGF0ZSB2YXJpYWJsZXMuXHJcbi8vICAgICBJZiB5b3UgZG9uJ3Qgd2FudCB0byBhbGxvdyB0aGF0LCB5b3UgY2FuIHNldCB0aGUgcHJvcGVydHkgJ2FsbG93VGVtcGxhdGVSZXdyaXRpbmcnIHRvIGZhbHNlIChsaWtlIGtvLm5hdGl2ZVRlbXBsYXRlRW5naW5lIGRvZXMpXHJcbi8vICAgICBhbmQgdGhlbiB5b3UgZG9uJ3QgbmVlZCB0byBvdmVycmlkZSAnY3JlYXRlSmF2YVNjcmlwdEV2YWx1YXRvckJsb2NrJy5cclxuXHJcbmtvLnRlbXBsYXRlRW5naW5lID0gZnVuY3Rpb24gKCkgeyB9O1xyXG5cclxua28udGVtcGxhdGVFbmdpbmUucHJvdG90eXBlWydyZW5kZXJUZW1wbGF0ZVNvdXJjZSddID0gZnVuY3Rpb24gKHRlbXBsYXRlU291cmNlLCBiaW5kaW5nQ29udGV4dCwgb3B0aW9ucywgdGVtcGxhdGVEb2N1bWVudCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3ZlcnJpZGUgcmVuZGVyVGVtcGxhdGVTb3VyY2VcIik7XHJcbn07XHJcblxyXG5rby50ZW1wbGF0ZUVuZ2luZS5wcm90b3R5cGVbJ2NyZWF0ZUphdmFTY3JpcHRFdmFsdWF0b3JCbG9jayddID0gZnVuY3Rpb24gKHNjcmlwdCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3ZlcnJpZGUgY3JlYXRlSmF2YVNjcmlwdEV2YWx1YXRvckJsb2NrXCIpO1xyXG59O1xyXG5cclxua28udGVtcGxhdGVFbmdpbmUucHJvdG90eXBlWydtYWtlVGVtcGxhdGVTb3VyY2UnXSA9IGZ1bmN0aW9uKHRlbXBsYXRlLCB0ZW1wbGF0ZURvY3VtZW50KSB7XHJcbiAgICAvLyBOYW1lZCB0ZW1wbGF0ZVxyXG4gICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgdGVtcGxhdGVEb2N1bWVudCA9IHRlbXBsYXRlRG9jdW1lbnQgfHwgZG9jdW1lbnQ7XHJcbiAgICAgICAgdmFyIGVsZW0gPSB0ZW1wbGF0ZURvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRlbXBsYXRlKTtcclxuICAgICAgICBpZiAoIWVsZW0pXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIHRlbXBsYXRlIHdpdGggSUQgXCIgKyB0ZW1wbGF0ZSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBrby50ZW1wbGF0ZVNvdXJjZXMuZG9tRWxlbWVudChlbGVtKTtcclxuICAgIH0gZWxzZSBpZiAoKHRlbXBsYXRlLm5vZGVUeXBlID09IDEpIHx8ICh0ZW1wbGF0ZS5ub2RlVHlwZSA9PSA4KSkge1xyXG4gICAgICAgIC8vIEFub255bW91cyB0ZW1wbGF0ZVxyXG4gICAgICAgIHJldHVybiBuZXcga28udGVtcGxhdGVTb3VyY2VzLmFub255bW91c1RlbXBsYXRlKHRlbXBsYXRlKTtcclxuICAgIH0gZWxzZVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gdGVtcGxhdGUgdHlwZTogXCIgKyB0ZW1wbGF0ZSk7XHJcbn07XHJcblxyXG5rby50ZW1wbGF0ZUVuZ2luZS5wcm90b3R5cGVbJ3JlbmRlclRlbXBsYXRlJ10gPSBmdW5jdGlvbiAodGVtcGxhdGUsIGJpbmRpbmdDb250ZXh0LCBvcHRpb25zLCB0ZW1wbGF0ZURvY3VtZW50KSB7XHJcbiAgICB2YXIgdGVtcGxhdGVTb3VyY2UgPSB0aGlzWydtYWtlVGVtcGxhdGVTb3VyY2UnXSh0ZW1wbGF0ZSwgdGVtcGxhdGVEb2N1bWVudCk7XHJcbiAgICByZXR1cm4gdGhpc1sncmVuZGVyVGVtcGxhdGVTb3VyY2UnXSh0ZW1wbGF0ZVNvdXJjZSwgYmluZGluZ0NvbnRleHQsIG9wdGlvbnMsIHRlbXBsYXRlRG9jdW1lbnQpO1xyXG59O1xyXG5cclxua28udGVtcGxhdGVFbmdpbmUucHJvdG90eXBlWydpc1RlbXBsYXRlUmV3cml0dGVuJ10gPSBmdW5jdGlvbiAodGVtcGxhdGUsIHRlbXBsYXRlRG9jdW1lbnQpIHtcclxuICAgIC8vIFNraXAgcmV3cml0aW5nIGlmIHJlcXVlc3RlZFxyXG4gICAgaWYgKHRoaXNbJ2FsbG93VGVtcGxhdGVSZXdyaXRpbmcnXSA9PT0gZmFsc2UpXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gdGhpc1snbWFrZVRlbXBsYXRlU291cmNlJ10odGVtcGxhdGUsIHRlbXBsYXRlRG9jdW1lbnQpWydkYXRhJ10oXCJpc1Jld3JpdHRlblwiKTtcclxufTtcclxuXHJcbmtvLnRlbXBsYXRlRW5naW5lLnByb3RvdHlwZVsncmV3cml0ZVRlbXBsYXRlJ10gPSBmdW5jdGlvbiAodGVtcGxhdGUsIHJld3JpdGVyQ2FsbGJhY2ssIHRlbXBsYXRlRG9jdW1lbnQpIHtcclxuICAgIHZhciB0ZW1wbGF0ZVNvdXJjZSA9IHRoaXNbJ21ha2VUZW1wbGF0ZVNvdXJjZSddKHRlbXBsYXRlLCB0ZW1wbGF0ZURvY3VtZW50KTtcclxuICAgIHZhciByZXdyaXR0ZW4gPSByZXdyaXRlckNhbGxiYWNrKHRlbXBsYXRlU291cmNlWyd0ZXh0J10oKSk7XHJcbiAgICB0ZW1wbGF0ZVNvdXJjZVsndGV4dCddKHJld3JpdHRlbik7XHJcbiAgICB0ZW1wbGF0ZVNvdXJjZVsnZGF0YSddKFwiaXNSZXdyaXR0ZW5cIiwgdHJ1ZSk7XHJcbn07XHJcblxyXG5rby5leHBvcnRTeW1ib2woJ3RlbXBsYXRlRW5naW5lJywga28udGVtcGxhdGVFbmdpbmUpO1xyXG5cclxua28udGVtcGxhdGVSZXdyaXRpbmcgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIG1lbW9pemVEYXRhQmluZGluZ0F0dHJpYnV0ZVN5bnRheFJlZ2V4ID0gLyg8KFthLXpdK1xcZCopKD86XFxzKyg/IWRhdGEtYmluZFxccyo9XFxzKilbYS16MC05XFwtXSsoPzo9KD86XFxcIlteXFxcIl0qXFxcInxcXCdbXlxcJ10qXFwnfFtePl0qKSk/KSpcXHMrKWRhdGEtYmluZFxccyo9XFxzKihbXCInXSkoW1xcc1xcU10qPylcXDMvZ2k7XHJcbiAgICB2YXIgbWVtb2l6ZVZpcnR1YWxDb250YWluZXJCaW5kaW5nU3ludGF4UmVnZXggPSAvPCEtLVxccyprb1xcYlxccyooW1xcc1xcU10qPylcXHMqLS0+L2c7XHJcblxyXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVEYXRhQmluZFZhbHVlc0ZvclJld3JpdGluZyhrZXlWYWx1ZUFycmF5KSB7XHJcbiAgICAgICAgdmFyIGFsbFZhbGlkYXRvcnMgPSBrby5leHByZXNzaW9uUmV3cml0aW5nLmJpbmRpbmdSZXdyaXRlVmFsaWRhdG9ycztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleVZhbHVlQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGtleSA9IGtleVZhbHVlQXJyYXlbaV1bJ2tleSddO1xyXG4gICAgICAgICAgICBpZiAoYWxsVmFsaWRhdG9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsaWRhdG9yID0gYWxsVmFsaWRhdG9yc1trZXldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zc2libGVFcnJvck1lc3NhZ2UgPSB2YWxpZGF0b3Ioa2V5VmFsdWVBcnJheVtpXVsndmFsdWUnXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxlRXJyb3JNZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocG9zc2libGVFcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdmFsaWRhdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyB0ZW1wbGF0ZSBlbmdpbmUgZG9lcyBub3Qgc3VwcG9ydCB0aGUgJ1wiICsga2V5ICsgXCInIGJpbmRpbmcgd2l0aGluIGl0cyB0ZW1wbGF0ZXNcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY29uc3RydWN0TWVtb2l6ZWRUYWdSZXBsYWNlbWVudChkYXRhQmluZEF0dHJpYnV0ZVZhbHVlLCB0YWdUb1JldGFpbiwgbm9kZU5hbWUsIHRlbXBsYXRlRW5naW5lKSB7XHJcbiAgICAgICAgdmFyIGRhdGFCaW5kS2V5VmFsdWVBcnJheSA9IGtvLmV4cHJlc3Npb25SZXdyaXRpbmcucGFyc2VPYmplY3RMaXRlcmFsKGRhdGFCaW5kQXR0cmlidXRlVmFsdWUpO1xyXG4gICAgICAgIHZhbGlkYXRlRGF0YUJpbmRWYWx1ZXNGb3JSZXdyaXRpbmcoZGF0YUJpbmRLZXlWYWx1ZUFycmF5KTtcclxuICAgICAgICB2YXIgcmV3cml0dGVuRGF0YUJpbmRBdHRyaWJ1dGVWYWx1ZSA9IGtvLmV4cHJlc3Npb25SZXdyaXRpbmcucHJlUHJvY2Vzc0JpbmRpbmdzKGRhdGFCaW5kS2V5VmFsdWVBcnJheSwgeyd2YWx1ZUFjY2Vzc29ycyc6dHJ1ZX0pO1xyXG5cclxuICAgICAgICAvLyBGb3Igbm8gb2J2aW91cyByZWFzb24sIE9wZXJhIGZhaWxzIHRvIGV2YWx1YXRlIHJld3JpdHRlbkRhdGFCaW5kQXR0cmlidXRlVmFsdWUgdW5sZXNzIGl0J3Mgd3JhcHBlZCBpbiBhbiBhZGRpdGlvbmFsXHJcbiAgICAgICAgLy8gYW5vbnltb3VzIGZ1bmN0aW9uLCBldmVuIHRob3VnaCBPcGVyYSdzIGJ1aWx0LWluIGRlYnVnZ2VyIGNhbiBldmFsdWF0ZSBpdCBhbnl3YXkuIE5vIG90aGVyIGJyb3dzZXIgcmVxdWlyZXMgdGhpc1xyXG4gICAgICAgIC8vIGV4dHJhIGluZGlyZWN0aW9uLlxyXG4gICAgICAgIHZhciBhcHBseUJpbmRpbmdzVG9OZXh0U2libGluZ1NjcmlwdCA9XHJcbiAgICAgICAgICAgIFwia28uX190cl9hbWJ0bnMoZnVuY3Rpb24oJGNvbnRleHQsJGVsZW1lbnQpe3JldHVybihmdW5jdGlvbigpe3JldHVybnsgXCIgKyByZXdyaXR0ZW5EYXRhQmluZEF0dHJpYnV0ZVZhbHVlICsgXCIgfSB9KSgpfSwnXCIgKyBub2RlTmFtZS50b0xvd2VyQ2FzZSgpICsgXCInKVwiO1xyXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZUVuZ2luZVsnY3JlYXRlSmF2YVNjcmlwdEV2YWx1YXRvckJsb2NrJ10oYXBwbHlCaW5kaW5nc1RvTmV4dFNpYmxpbmdTY3JpcHQpICsgdGFnVG9SZXRhaW47XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBlbnN1cmVUZW1wbGF0ZUlzUmV3cml0dGVuOiBmdW5jdGlvbiAodGVtcGxhdGUsIHRlbXBsYXRlRW5naW5lLCB0ZW1wbGF0ZURvY3VtZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghdGVtcGxhdGVFbmdpbmVbJ2lzVGVtcGxhdGVSZXdyaXR0ZW4nXSh0ZW1wbGF0ZSwgdGVtcGxhdGVEb2N1bWVudCkpXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUVuZ2luZVsncmV3cml0ZVRlbXBsYXRlJ10odGVtcGxhdGUsIGZ1bmN0aW9uIChodG1sU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtvLnRlbXBsYXRlUmV3cml0aW5nLm1lbW9pemVCaW5kaW5nQXR0cmlidXRlU3ludGF4KGh0bWxTdHJpbmcsIHRlbXBsYXRlRW5naW5lKTtcclxuICAgICAgICAgICAgICAgIH0sIHRlbXBsYXRlRG9jdW1lbnQpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG1lbW9pemVCaW5kaW5nQXR0cmlidXRlU3ludGF4OiBmdW5jdGlvbiAoaHRtbFN0cmluZywgdGVtcGxhdGVFbmdpbmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGh0bWxTdHJpbmcucmVwbGFjZShtZW1vaXplRGF0YUJpbmRpbmdBdHRyaWJ1dGVTeW50YXhSZWdleCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdE1lbW9pemVkVGFnUmVwbGFjZW1lbnQoLyogZGF0YUJpbmRBdHRyaWJ1dGVWYWx1ZTogKi8gYXJndW1lbnRzWzRdLCAvKiB0YWdUb1JldGFpbjogKi8gYXJndW1lbnRzWzFdLCAvKiBub2RlTmFtZTogKi8gYXJndW1lbnRzWzJdLCB0ZW1wbGF0ZUVuZ2luZSk7XHJcbiAgICAgICAgICAgIH0pLnJlcGxhY2UobWVtb2l6ZVZpcnR1YWxDb250YWluZXJCaW5kaW5nU3ludGF4UmVnZXgsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdE1lbW9pemVkVGFnUmVwbGFjZW1lbnQoLyogZGF0YUJpbmRBdHRyaWJ1dGVWYWx1ZTogKi8gYXJndW1lbnRzWzFdLCAvKiB0YWdUb1JldGFpbjogKi8gXCI8IS0tIGtvIC0tPlwiLCAvKiBub2RlTmFtZTogKi8gXCIjY29tbWVudFwiLCB0ZW1wbGF0ZUVuZ2luZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFwcGx5TWVtb2l6ZWRCaW5kaW5nc1RvTmV4dFNpYmxpbmc6IGZ1bmN0aW9uIChiaW5kaW5ncywgbm9kZU5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGtvLm1lbW9pemF0aW9uLm1lbW9pemUoZnVuY3Rpb24gKGRvbU5vZGUsIGJpbmRpbmdDb250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZVRvQmluZCA9IGRvbU5vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZVRvQmluZCAmJiBub2RlVG9CaW5kLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga28uYXBwbHlCaW5kaW5nQWNjZXNzb3JzVG9Ob2RlKG5vZGVUb0JpbmQsIGJpbmRpbmdzLCBiaW5kaW5nQ29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSkoKTtcclxuXHJcblxyXG4vLyBFeHBvcnRlZCBvbmx5IGJlY2F1c2UgaXQgaGFzIHRvIGJlIHJlZmVyZW5jZWQgYnkgc3RyaW5nIGxvb2t1cCBmcm9tIHdpdGhpbiByZXdyaXR0ZW4gdGVtcGxhdGVcclxua28uZXhwb3J0U3ltYm9sKCdfX3RyX2FtYnRucycsIGtvLnRlbXBsYXRlUmV3cml0aW5nLmFwcGx5TWVtb2l6ZWRCaW5kaW5nc1RvTmV4dFNpYmxpbmcpO1xyXG4oZnVuY3Rpb24oKSB7XHJcbiAgICAvLyBBIHRlbXBsYXRlIHNvdXJjZSByZXByZXNlbnRzIGEgcmVhZC93cml0ZSB3YXkgb2YgYWNjZXNzaW5nIGEgdGVtcGxhdGUuIFRoaXMgaXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciB0ZW1wbGF0ZSBsb2FkaW5nL3NhdmluZ1xyXG4gICAgLy8gbG9naWMgdG8gYmUgZHVwbGljYXRlZCBpbiBldmVyeSB0ZW1wbGF0ZSBlbmdpbmUgKGFuZCBtZWFucyB0aGV5IGNhbiBhbGwgd29yayB3aXRoIGFub255bW91cyB0ZW1wbGF0ZXMsIGV0Yy4pXHJcbiAgICAvL1xyXG4gICAgLy8gVHdvIGFyZSBwcm92aWRlZCBieSBkZWZhdWx0OlxyXG4gICAgLy8gIDEuIGtvLnRlbXBsYXRlU291cmNlcy5kb21FbGVtZW50ICAgICAgIC0gcmVhZHMvd3JpdGVzIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYW4gYXJiaXRyYXJ5IERPTSBlbGVtZW50XHJcbiAgICAvLyAgMi4ga28udGVtcGxhdGVTb3VyY2VzLmFub255bW91c0VsZW1lbnQgLSB1c2VzIGtvLnV0aWxzLmRvbURhdGEgdG8gcmVhZC93cml0ZSB0ZXh0ICphc3NvY2lhdGVkKiB3aXRoIHRoZSBET00gZWxlbWVudCwgYnV0XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IHJlYWRpbmcvd3JpdGluZyB0aGUgYWN0dWFsIGVsZW1lbnQgdGV4dCBjb250ZW50LCBzaW5jZSBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSByZW5kZXJlZCB0ZW1wbGF0ZSBvdXRwdXQuXHJcbiAgICAvLyBZb3UgY2FuIGltcGxlbWVudCB5b3VyIG93biB0ZW1wbGF0ZSBzb3VyY2UgaWYgeW91IHdhbnQgdG8gZmV0Y2gvc3RvcmUgdGVtcGxhdGVzIHNvbWV3aGVyZSBvdGhlciB0aGFuIGluIERPTSBlbGVtZW50cy5cclxuICAgIC8vIFRlbXBsYXRlIHNvdXJjZXMgbmVlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxyXG4gICAgLy8gICB0ZXh0KCkgXHRcdFx0LSByZXR1cm5zIHRoZSB0ZW1wbGF0ZSB0ZXh0IGZyb20geW91ciBzdG9yYWdlIGxvY2F0aW9uXHJcbiAgICAvLyAgIHRleHQodmFsdWUpXHRcdC0gd3JpdGVzIHRoZSBzdXBwbGllZCB0ZW1wbGF0ZSB0ZXh0IHRvIHlvdXIgc3RvcmFnZSBsb2NhdGlvblxyXG4gICAgLy8gICBkYXRhKGtleSlcdFx0XHQtIHJlYWRzIHZhbHVlcyBzdG9yZWQgdXNpbmcgZGF0YShrZXksIHZhbHVlKSAtIHNlZSBiZWxvd1xyXG4gICAgLy8gICBkYXRhKGtleSwgdmFsdWUpXHQtIGFzc29jaWF0ZXMgXCJ2YWx1ZVwiIHdpdGggdGhpcyB0ZW1wbGF0ZSBhbmQgdGhlIGtleSBcImtleVwiLiBJcyB1c2VkIHRvIHN0b3JlIGluZm9ybWF0aW9uIGxpa2UgXCJpc1Jld3JpdHRlblwiLlxyXG4gICAgLy9cclxuICAgIC8vIE9wdGlvbmFsbHksIHRlbXBsYXRlIHNvdXJjZXMgY2FuIGFsc28gaGF2ZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczpcclxuICAgIC8vICAgbm9kZXMoKSAgICAgICAgICAgIC0gcmV0dXJucyBhIERPTSBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIG5vZGVzIG9mIHRoaXMgdGVtcGxhdGUsIHdoZXJlIGF2YWlsYWJsZVxyXG4gICAgLy8gICBub2Rlcyh2YWx1ZSkgICAgICAgLSB3cml0ZXMgdGhlIGdpdmVuIERPTSBlbGVtZW50IHRvIHlvdXIgc3RvcmFnZSBsb2NhdGlvblxyXG4gICAgLy8gSWYgYSBET00gZWxlbWVudCBpcyBhdmFpbGFibGUgZm9yIGEgZ2l2ZW4gdGVtcGxhdGUgc291cmNlLCB0ZW1wbGF0ZSBlbmdpbmVzIGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSBpdCBpbiBwcmVmZXJlbmNlIG92ZXIgdGV4dCgpXHJcbiAgICAvLyBmb3IgaW1wcm92ZWQgc3BlZWQuIEhvd2V2ZXIsIGFsbCB0ZW1wbGF0ZVNvdXJjZXMgbXVzdCBzdXBwbHkgdGV4dCgpIGV2ZW4gaWYgdGhleSBkb24ndCBzdXBwbHkgbm9kZXMoKS5cclxuICAgIC8vXHJcbiAgICAvLyBPbmNlIHlvdSd2ZSBpbXBsZW1lbnRlZCBhIHRlbXBsYXRlU291cmNlLCBtYWtlIHlvdXIgdGVtcGxhdGUgZW5naW5lIHVzZSBpdCBieSBzdWJjbGFzc2luZyB3aGF0ZXZlciB0ZW1wbGF0ZSBlbmdpbmUgeW91IHdlcmVcclxuICAgIC8vIHVzaW5nIGFuZCBvdmVycmlkaW5nIFwibWFrZVRlbXBsYXRlU291cmNlXCIgdG8gcmV0dXJuIGFuIGluc3RhbmNlIG9mIHlvdXIgY3VzdG9tIHRlbXBsYXRlIHNvdXJjZS5cclxuXHJcbiAgICBrby50ZW1wbGF0ZVNvdXJjZXMgPSB7fTtcclxuXHJcbiAgICAvLyAtLS0tIGtvLnRlbXBsYXRlU291cmNlcy5kb21FbGVtZW50IC0tLS0tXHJcblxyXG4gICAgLy8gdGVtcGxhdGUgdHlwZXNcclxuICAgIHZhciB0ZW1wbGF0ZVNjcmlwdCA9IDEsXHJcbiAgICAgICAgdGVtcGxhdGVUZXh0QXJlYSA9IDIsXHJcbiAgICAgICAgdGVtcGxhdGVUZW1wbGF0ZSA9IDMsXHJcbiAgICAgICAgdGVtcGxhdGVFbGVtZW50ID0gNDtcclxuXHJcbiAgICBrby50ZW1wbGF0ZVNvdXJjZXMuZG9tRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLmRvbUVsZW1lbnQgPSBlbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICB2YXIgdGFnTmFtZUxvd2VyID0ga28udXRpbHMudGFnTmFtZUxvd2VyKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlVHlwZSA9XHJcbiAgICAgICAgICAgICAgICB0YWdOYW1lTG93ZXIgPT09IFwic2NyaXB0XCIgPyB0ZW1wbGF0ZVNjcmlwdCA6XHJcbiAgICAgICAgICAgICAgICB0YWdOYW1lTG93ZXIgPT09IFwidGV4dGFyZWFcIiA/IHRlbXBsYXRlVGV4dEFyZWEgOlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciBicm93c2VycyB3aXRoIHByb3BlciA8dGVtcGxhdGU+IGVsZW1lbnQgc3VwcG9ydCwgd2hlcmUgdGhlIC5jb250ZW50IHByb3BlcnR5IGdpdmVzIGEgZG9jdW1lbnQgZnJhZ21lbnRcclxuICAgICAgICAgICAgICAgIHRhZ05hbWVMb3dlciA9PSBcInRlbXBsYXRlXCIgJiYgZWxlbWVudC5jb250ZW50ICYmIGVsZW1lbnQuY29udGVudC5ub2RlVHlwZSA9PT0gMTEgPyB0ZW1wbGF0ZVRlbXBsYXRlIDpcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlRWxlbWVudDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAga28udGVtcGxhdGVTb3VyY2VzLmRvbUVsZW1lbnQucHJvdG90eXBlWyd0ZXh0J10gPSBmdW5jdGlvbigvKiB2YWx1ZVRvV3JpdGUgKi8pIHtcclxuICAgICAgICB2YXIgZWxlbUNvbnRlbnRzUHJvcGVydHkgPSB0aGlzLnRlbXBsYXRlVHlwZSA9PT0gdGVtcGxhdGVTY3JpcHQgPyBcInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMudGVtcGxhdGVUeXBlID09PSB0ZW1wbGF0ZVRleHRBcmVhID8gXCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJpbm5lckhUTUxcIjtcclxuXHJcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50W2VsZW1Db250ZW50c1Byb3BlcnR5XTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWVUb1dyaXRlID0gYXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbUNvbnRlbnRzUHJvcGVydHkgPT09IFwiaW5uZXJIVE1MXCIpXHJcbiAgICAgICAgICAgICAgICBrby51dGlscy5zZXRIdG1sKHRoaXMuZG9tRWxlbWVudCwgdmFsdWVUb1dyaXRlKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50W2VsZW1Db250ZW50c1Byb3BlcnR5XSA9IHZhbHVlVG9Xcml0ZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBkYXRhRG9tRGF0YVByZWZpeCA9IGtvLnV0aWxzLmRvbURhdGEubmV4dEtleSgpICsgXCJfXCI7XHJcbiAgICBrby50ZW1wbGF0ZVNvdXJjZXMuZG9tRWxlbWVudC5wcm90b3R5cGVbJ2RhdGEnXSA9IGZ1bmN0aW9uKGtleSAvKiwgdmFsdWVUb1dyaXRlICovKSB7XHJcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGtvLnV0aWxzLmRvbURhdGEuZ2V0KHRoaXMuZG9tRWxlbWVudCwgZGF0YURvbURhdGFQcmVmaXggKyBrZXkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGtvLnV0aWxzLmRvbURhdGEuc2V0KHRoaXMuZG9tRWxlbWVudCwgZGF0YURvbURhdGFQcmVmaXggKyBrZXksIGFyZ3VtZW50c1sxXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgdGVtcGxhdGVzRG9tRGF0YUtleSA9IGtvLnV0aWxzLmRvbURhdGEubmV4dEtleSgpO1xyXG4gICAgZnVuY3Rpb24gZ2V0VGVtcGxhdGVEb21EYXRhKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4ga28udXRpbHMuZG9tRGF0YS5nZXQoZWxlbWVudCwgdGVtcGxhdGVzRG9tRGF0YUtleSkgfHwge307XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRUZW1wbGF0ZURvbURhdGEoZWxlbWVudCwgZGF0YSkge1xyXG4gICAgICAgIGtvLnV0aWxzLmRvbURhdGEuc2V0KGVsZW1lbnQsIHRlbXBsYXRlc0RvbURhdGFLZXksIGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGtvLnRlbXBsYXRlU291cmNlcy5kb21FbGVtZW50LnByb3RvdHlwZVsnbm9kZXMnXSA9IGZ1bmN0aW9uKC8qIHZhbHVlVG9Xcml0ZSAqLykge1xyXG4gICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5kb21FbGVtZW50O1xyXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgdmFyIHRlbXBsYXRlRGF0YSA9IGdldFRlbXBsYXRlRG9tRGF0YShlbGVtZW50KSxcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lckRhdGEgPSB0ZW1wbGF0ZURhdGEuY29udGFpbmVyRGF0YTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lckRhdGEgfHwgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVR5cGUgPT09IHRlbXBsYXRlVGVtcGxhdGUgPyBlbGVtZW50LmNvbnRlbnQgOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVR5cGUgPT09IHRlbXBsYXRlRWxlbWVudCA/IGVsZW1lbnQgOlxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWVUb1dyaXRlID0gYXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICBzZXRUZW1wbGF0ZURvbURhdGEoZWxlbWVudCwge2NvbnRhaW5lckRhdGE6IHZhbHVlVG9Xcml0ZX0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy8gLS0tLSBrby50ZW1wbGF0ZVNvdXJjZXMuYW5vbnltb3VzVGVtcGxhdGUgLS0tLS1cclxuICAgIC8vIEFub255bW91cyB0ZW1wbGF0ZXMgYXJlIG5vcm1hbGx5IHNhdmVkL3JldHJpZXZlZCBhcyBET00gbm9kZXMgdGhyb3VnaCBcIm5vZGVzXCIuXHJcbiAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSwgeW91IGNhbiBhbHNvIHJlYWQgXCJ0ZXh0XCI7IGl0IHdpbGwgYmUgc2VyaWFsaXplZCBmcm9tIHRoZSBub2RlcyBvbiBkZW1hbmQuXHJcbiAgICAvLyBXcml0aW5nIHRvIFwidGV4dFwiIGlzIHN0aWxsIHN1cHBvcnRlZCwgYnV0IHRoZW4gdGhlIHRlbXBsYXRlIGRhdGEgd2lsbCBub3QgYmUgYXZhaWxhYmxlIGFzIERPTSBub2Rlcy5cclxuXHJcbiAgICBrby50ZW1wbGF0ZVNvdXJjZXMuYW5vbnltb3VzVGVtcGxhdGUgPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5kb21FbGVtZW50ID0gZWxlbWVudDtcclxuICAgIH1cclxuICAgIGtvLnRlbXBsYXRlU291cmNlcy5hbm9ueW1vdXNUZW1wbGF0ZS5wcm90b3R5cGUgPSBuZXcga28udGVtcGxhdGVTb3VyY2VzLmRvbUVsZW1lbnQoKTtcclxuICAgIGtvLnRlbXBsYXRlU291cmNlcy5hbm9ueW1vdXNUZW1wbGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBrby50ZW1wbGF0ZVNvdXJjZXMuYW5vbnltb3VzVGVtcGxhdGU7XHJcbiAgICBrby50ZW1wbGF0ZVNvdXJjZXMuYW5vbnltb3VzVGVtcGxhdGUucHJvdG90eXBlWyd0ZXh0J10gPSBmdW5jdGlvbigvKiB2YWx1ZVRvV3JpdGUgKi8pIHtcclxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciB0ZW1wbGF0ZURhdGEgPSBnZXRUZW1wbGF0ZURvbURhdGEodGhpcy5kb21FbGVtZW50KTtcclxuICAgICAgICAgICAgaWYgKHRlbXBsYXRlRGF0YS50ZXh0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHRlbXBsYXRlRGF0YS5jb250YWluZXJEYXRhKVxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVEYXRhLnRleHREYXRhID0gdGVtcGxhdGVEYXRhLmNvbnRhaW5lckRhdGEuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICByZXR1cm4gdGVtcGxhdGVEYXRhLnRleHREYXRhO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZVRvV3JpdGUgPSBhcmd1bWVudHNbMF07XHJcbiAgICAgICAgICAgIHNldFRlbXBsYXRlRG9tRGF0YSh0aGlzLmRvbUVsZW1lbnQsIHt0ZXh0RGF0YTogdmFsdWVUb1dyaXRlfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBrby5leHBvcnRTeW1ib2woJ3RlbXBsYXRlU291cmNlcycsIGtvLnRlbXBsYXRlU291cmNlcyk7XHJcbiAgICBrby5leHBvcnRTeW1ib2woJ3RlbXBsYXRlU291cmNlcy5kb21FbGVtZW50Jywga28udGVtcGxhdGVTb3VyY2VzLmRvbUVsZW1lbnQpO1xyXG4gICAga28uZXhwb3J0U3ltYm9sKCd0ZW1wbGF0ZVNvdXJjZXMuYW5vbnltb3VzVGVtcGxhdGUnLCBrby50ZW1wbGF0ZVNvdXJjZXMuYW5vbnltb3VzVGVtcGxhdGUpO1xyXG59KSgpO1xyXG4oZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIF90ZW1wbGF0ZUVuZ2luZTtcclxuICAgIGtvLnNldFRlbXBsYXRlRW5naW5lID0gZnVuY3Rpb24gKHRlbXBsYXRlRW5naW5lKSB7XHJcbiAgICAgICAgaWYgKCh0ZW1wbGF0ZUVuZ2luZSAhPSB1bmRlZmluZWQpICYmICEodGVtcGxhdGVFbmdpbmUgaW5zdGFuY2VvZiBrby50ZW1wbGF0ZUVuZ2luZSkpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRlbXBsYXRlRW5naW5lIG11c3QgaW5oZXJpdCBmcm9tIGtvLnRlbXBsYXRlRW5naW5lXCIpO1xyXG4gICAgICAgIF90ZW1wbGF0ZUVuZ2luZSA9IHRlbXBsYXRlRW5naW5lO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGludm9rZUZvckVhY2hOb2RlSW5Db250aW51b3VzUmFuZ2UoZmlyc3ROb2RlLCBsYXN0Tm9kZSwgYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIG5vZGUsIG5leHRJblF1ZXVlID0gZmlyc3ROb2RlLCBmaXJzdE91dE9mUmFuZ2VOb2RlID0ga28udmlydHVhbEVsZW1lbnRzLm5leHRTaWJsaW5nKGxhc3ROb2RlKTtcclxuICAgICAgICB3aGlsZSAobmV4dEluUXVldWUgJiYgKChub2RlID0gbmV4dEluUXVldWUpICE9PSBmaXJzdE91dE9mUmFuZ2VOb2RlKSkge1xyXG4gICAgICAgICAgICBuZXh0SW5RdWV1ZSA9IGtvLnZpcnR1YWxFbGVtZW50cy5uZXh0U2libGluZyhub2RlKTtcclxuICAgICAgICAgICAgYWN0aW9uKG5vZGUsIG5leHRJblF1ZXVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYWN0aXZhdGVCaW5kaW5nc09uQ29udGludW91c05vZGVBcnJheShjb250aW51b3VzTm9kZUFycmF5LCBiaW5kaW5nQ29udGV4dCkge1xyXG4gICAgICAgIC8vIFRvIGJlIHVzZWQgb24gYW55IG5vZGVzIHRoYXQgaGF2ZSBiZWVuIHJlbmRlcmVkIGJ5IGEgdGVtcGxhdGUgYW5kIGhhdmUgYmVlbiBpbnNlcnRlZCBpbnRvIHNvbWUgcGFyZW50IGVsZW1lbnRcclxuICAgICAgICAvLyBXYWxrcyB0aHJvdWdoIGNvbnRpbnVvdXNOb2RlQXJyYXkgKHdoaWNoICptdXN0KiBiZSBjb250aW51b3VzLCBpLmUuLCBhbiB1bmludGVycnVwdGVkIHNlcXVlbmNlIG9mIHNpYmxpbmcgbm9kZXMsIGJlY2F1c2VcclxuICAgICAgICAvLyB0aGUgYWxnb3JpdGhtIGZvciB3YWxraW5nIHRoZW0gcmVsaWVzIG9uIHRoaXMpLCBhbmQgZm9yIGVhY2ggdG9wLWxldmVsIGl0ZW0gaW4gdGhlIHZpcnR1YWwtZWxlbWVudCBzZW5zZSxcclxuICAgICAgICAvLyAoMSkgRG9lcyBhIHJlZ3VsYXIgXCJhcHBseUJpbmRpbmdzXCIgdG8gYXNzb2NpYXRlIGJpbmRpbmdDb250ZXh0IHdpdGggdGhpcyBub2RlIGFuZCB0byBhY3RpdmF0ZSBhbnkgbm9uLW1lbW9pemVkIGJpbmRpbmdzXHJcbiAgICAgICAgLy8gKDIpIFVubWVtb2l6ZXMgYW55IG1lbW9zIGluIHRoZSBET00gc3VidHJlZSAoZS5nLiwgdG8gYWN0aXZhdGUgYmluZGluZ3MgdGhhdCBoYWQgYmVlbiBtZW1vaXplZCBkdXJpbmcgdGVtcGxhdGUgcmV3cml0aW5nKVxyXG5cclxuICAgICAgICBpZiAoY29udGludW91c05vZGVBcnJheS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFyIGZpcnN0Tm9kZSA9IGNvbnRpbnVvdXNOb2RlQXJyYXlbMF0sXHJcbiAgICAgICAgICAgICAgICBsYXN0Tm9kZSA9IGNvbnRpbnVvdXNOb2RlQXJyYXlbY29udGludW91c05vZGVBcnJheS5sZW5ndGggLSAxXSxcclxuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBmaXJzdE5vZGUucGFyZW50Tm9kZSxcclxuICAgICAgICAgICAgICAgIHByb3ZpZGVyID0ga28uYmluZGluZ1Byb3ZpZGVyWydpbnN0YW5jZSddLFxyXG4gICAgICAgICAgICAgICAgcHJlcHJvY2Vzc05vZGUgPSBwcm92aWRlclsncHJlcHJvY2Vzc05vZGUnXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwcmVwcm9jZXNzTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgaW52b2tlRm9yRWFjaE5vZGVJbkNvbnRpbnVvdXNSYW5nZShmaXJzdE5vZGUsIGxhc3ROb2RlLCBmdW5jdGlvbihub2RlLCBuZXh0Tm9kZUluUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZVByZXZpb3VzU2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdOb2RlcyA9IHByZXByb2Nlc3NOb2RlLmNhbGwocHJvdmlkZXIsIG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdOb2Rlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSA9PT0gZmlyc3ROb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3ROb2RlID0gbmV3Tm9kZXNbMF0gfHwgbmV4dE5vZGVJblJhbmdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSA9PT0gbGFzdE5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Tm9kZSA9IG5ld05vZGVzW25ld05vZGVzLmxlbmd0aCAtIDFdIHx8IG5vZGVQcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBwcmVwcm9jZXNzTm9kZSBjYW4gY2hhbmdlIHRoZSBub2RlcywgaW5jbHVkaW5nIHRoZSBmaXJzdCBhbmQgbGFzdCBub2RlcywgdXBkYXRlIGNvbnRpbnVvdXNOb2RlQXJyYXkgdG8gbWF0Y2guXHJcbiAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRoZSBmdWxsIHNldCwgaW5jbHVkaW5nIGlubmVyIG5vZGVzLCBiZWNhdXNlIHRoZSB1bm1lbW9pemUgc3RlcCBtaWdodCByZW1vdmUgdGhlIGZpcnN0IG5vZGUgKGFuZCBzbyB0aGUgcmVhbFxyXG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgbm9kZSBuZWVkcyB0byBiZSBpbiB0aGUgYXJyYXkpLlxyXG4gICAgICAgICAgICAgICAgY29udGludW91c05vZGVBcnJheS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmaXJzdE5vZGUpIHsgLy8gcHJlcHJvY2Vzc05vZGUgbWlnaHQgaGF2ZSByZW1vdmVkIGFsbCB0aGUgbm9kZXMsIGluIHdoaWNoIGNhc2UgdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG9cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3ROb2RlID09PSBsYXN0Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVvdXNOb2RlQXJyYXkucHVzaChmaXJzdE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzTm9kZUFycmF5LnB1c2goZmlyc3ROb2RlLCBsYXN0Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAga28udXRpbHMuZml4VXBDb250aW51b3VzTm9kZUFycmF5KGNvbnRpbnVvdXNOb2RlQXJyYXksIHBhcmVudE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBOZWVkIHRvIGFwcGx5QmluZGluZ3MgKmJlZm9yZSogdW5tZW1vemlhdGlvbiwgYmVjYXVzZSB1bm1lbW9pemF0aW9uIG1pZ2h0IGludHJvZHVjZSBleHRyYSBub2RlcyAodGhhdCB3ZSBkb24ndCB3YW50IHRvIHJlLWJpbmQpXHJcbiAgICAgICAgICAgIC8vIHdoZXJlYXMgYSByZWd1bGFyIGFwcGx5QmluZGluZ3Mgd29uJ3QgaW50cm9kdWNlIG5ldyBtZW1vaXplZCBub2Rlc1xyXG4gICAgICAgICAgICBpbnZva2VGb3JFYWNoTm9kZUluQ29udGludW91c1JhbmdlKGZpcnN0Tm9kZSwgbGFzdE5vZGUsIGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxIHx8IG5vZGUubm9kZVR5cGUgPT09IDgpXHJcbiAgICAgICAgICAgICAgICAgICAga28uYXBwbHlCaW5kaW5ncyhiaW5kaW5nQ29udGV4dCwgbm9kZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpbnZva2VGb3JFYWNoTm9kZUluQ29udGludW91c1JhbmdlKGZpcnN0Tm9kZSwgbGFzdE5vZGUsIGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxIHx8IG5vZGUubm9kZVR5cGUgPT09IDgpXHJcbiAgICAgICAgICAgICAgICAgICAga28ubWVtb2l6YXRpb24udW5tZW1vaXplRG9tTm9kZUFuZERlc2NlbmRhbnRzKG5vZGUsIFtiaW5kaW5nQ29udGV4dF0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBhbnkgY2hhbmdlcyBkb25lIGJ5IGFwcGx5QmluZGluZ3Mgb3IgdW5tZW1vaXplIGFyZSByZWZsZWN0ZWQgaW4gdGhlIGFycmF5XHJcbiAgICAgICAgICAgIGtvLnV0aWxzLmZpeFVwQ29udGludW91c05vZGVBcnJheShjb250aW51b3VzTm9kZUFycmF5LCBwYXJlbnROb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0Rmlyc3ROb2RlRnJvbVBvc3NpYmxlQXJyYXkobm9kZU9yTm9kZUFycmF5KSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGVPck5vZGVBcnJheS5ub2RlVHlwZSA/IG5vZGVPck5vZGVBcnJheVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBub2RlT3JOb2RlQXJyYXkubGVuZ3RoID4gMCA/IG5vZGVPck5vZGVBcnJheVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGV4ZWN1dGVUZW1wbGF0ZSh0YXJnZXROb2RlT3JOb2RlQXJyYXksIHJlbmRlck1vZGUsIHRlbXBsYXRlLCBiaW5kaW5nQ29udGV4dCwgb3B0aW9ucykge1xyXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgICAgIHZhciBmaXJzdFRhcmdldE5vZGUgPSB0YXJnZXROb2RlT3JOb2RlQXJyYXkgJiYgZ2V0Rmlyc3ROb2RlRnJvbVBvc3NpYmxlQXJyYXkodGFyZ2V0Tm9kZU9yTm9kZUFycmF5KTtcclxuICAgICAgICB2YXIgdGVtcGxhdGVEb2N1bWVudCA9IChmaXJzdFRhcmdldE5vZGUgfHwgdGVtcGxhdGUgfHwge30pLm93bmVyRG9jdW1lbnQ7XHJcbiAgICAgICAgdmFyIHRlbXBsYXRlRW5naW5lVG9Vc2UgPSAob3B0aW9uc1sndGVtcGxhdGVFbmdpbmUnXSB8fCBfdGVtcGxhdGVFbmdpbmUpO1xyXG4gICAgICAgIGtvLnRlbXBsYXRlUmV3cml0aW5nLmVuc3VyZVRlbXBsYXRlSXNSZXdyaXR0ZW4odGVtcGxhdGUsIHRlbXBsYXRlRW5naW5lVG9Vc2UsIHRlbXBsYXRlRG9jdW1lbnQpO1xyXG4gICAgICAgIHZhciByZW5kZXJlZE5vZGVzQXJyYXkgPSB0ZW1wbGF0ZUVuZ2luZVRvVXNlWydyZW5kZXJUZW1wbGF0ZSddKHRlbXBsYXRlLCBiaW5kaW5nQ29udGV4dCwgb3B0aW9ucywgdGVtcGxhdGVEb2N1bWVudCk7XHJcblxyXG4gICAgICAgIC8vIExvb3NlbHkgY2hlY2sgcmVzdWx0IGlzIGFuIGFycmF5IG9mIERPTSBub2Rlc1xyXG4gICAgICAgIGlmICgodHlwZW9mIHJlbmRlcmVkTm9kZXNBcnJheS5sZW5ndGggIT0gXCJudW1iZXJcIikgfHwgKHJlbmRlcmVkTm9kZXNBcnJheS5sZW5ndGggPiAwICYmIHR5cGVvZiByZW5kZXJlZE5vZGVzQXJyYXlbMF0ubm9kZVR5cGUgIT0gXCJudW1iZXJcIikpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRlbXBsYXRlIGVuZ2luZSBtdXN0IHJldHVybiBhbiBhcnJheSBvZiBET00gbm9kZXNcIik7XHJcblxyXG4gICAgICAgIHZhciBoYXZlQWRkZWROb2Rlc1RvUGFyZW50ID0gZmFsc2U7XHJcbiAgICAgICAgc3dpdGNoIChyZW5kZXJNb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJyZXBsYWNlQ2hpbGRyZW5cIjpcclxuICAgICAgICAgICAgICAgIGtvLnZpcnR1YWxFbGVtZW50cy5zZXREb21Ob2RlQ2hpbGRyZW4odGFyZ2V0Tm9kZU9yTm9kZUFycmF5LCByZW5kZXJlZE5vZGVzQXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgaGF2ZUFkZGVkTm9kZXNUb1BhcmVudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInJlcGxhY2VOb2RlXCI6XHJcbiAgICAgICAgICAgICAgICBrby51dGlscy5yZXBsYWNlRG9tTm9kZXModGFyZ2V0Tm9kZU9yTm9kZUFycmF5LCByZW5kZXJlZE5vZGVzQXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgaGF2ZUFkZGVkTm9kZXNUb1BhcmVudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImlnbm9yZVRhcmdldE5vZGVcIjogYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHJlbmRlck1vZGU6IFwiICsgcmVuZGVyTW9kZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaGF2ZUFkZGVkTm9kZXNUb1BhcmVudCkge1xyXG4gICAgICAgICAgICBhY3RpdmF0ZUJpbmRpbmdzT25Db250aW51b3VzTm9kZUFycmF5KHJlbmRlcmVkTm9kZXNBcnJheSwgYmluZGluZ0NvbnRleHQpO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9uc1snYWZ0ZXJSZW5kZXInXSlcclxuICAgICAgICAgICAgICAgIGtvLmRlcGVuZGVuY3lEZXRlY3Rpb24uaWdub3JlKG9wdGlvbnNbJ2FmdGVyUmVuZGVyJ10sIG51bGwsIFtyZW5kZXJlZE5vZGVzQXJyYXksIGJpbmRpbmdDb250ZXh0WyckZGF0YSddXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVuZGVyZWROb2Rlc0FycmF5O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlc29sdmVUZW1wbGF0ZU5hbWUodGVtcGxhdGUsIGRhdGEsIGNvbnRleHQpIHtcclxuICAgICAgICAvLyBUaGUgdGVtcGxhdGUgY2FuIGJlIHNwZWNpZmllZCBhczpcclxuICAgICAgICBpZiAoa28uaXNPYnNlcnZhYmxlKHRlbXBsYXRlKSkge1xyXG4gICAgICAgICAgICAvLyAxLiBBbiBvYnNlcnZhYmxlLCB3aXRoIHN0cmluZyB2YWx1ZVxyXG4gICAgICAgICAgICByZXR1cm4gdGVtcGxhdGUoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAvLyAyLiBBIGZ1bmN0aW9uIG9mIChkYXRhLCBjb250ZXh0KSByZXR1cm5pbmcgYSBzdHJpbmdcclxuICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlKGRhdGEsIGNvbnRleHQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIDMuIEEgc3RyaW5nXHJcbiAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAga28ucmVuZGVyVGVtcGxhdGUgPSBmdW5jdGlvbiAodGVtcGxhdGUsIGRhdGFPckJpbmRpbmdDb250ZXh0LCBvcHRpb25zLCB0YXJnZXROb2RlT3JOb2RlQXJyYXksIHJlbmRlck1vZGUpIHtcclxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgICAgICBpZiAoKG9wdGlvbnNbJ3RlbXBsYXRlRW5naW5lJ10gfHwgX3RlbXBsYXRlRW5naW5lKSA9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNldCBhIHRlbXBsYXRlIGVuZ2luZSBiZWZvcmUgY2FsbGluZyByZW5kZXJUZW1wbGF0ZVwiKTtcclxuICAgICAgICByZW5kZXJNb2RlID0gcmVuZGVyTW9kZSB8fCBcInJlcGxhY2VDaGlsZHJlblwiO1xyXG5cclxuICAgICAgICBpZiAodGFyZ2V0Tm9kZU9yTm9kZUFycmF5KSB7XHJcbiAgICAgICAgICAgIHZhciBmaXJzdFRhcmdldE5vZGUgPSBnZXRGaXJzdE5vZGVGcm9tUG9zc2libGVBcnJheSh0YXJnZXROb2RlT3JOb2RlQXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHdoZW5Ub0Rpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoIWZpcnN0VGFyZ2V0Tm9kZSkgfHwgIWtvLnV0aWxzLmRvbU5vZGVJc0F0dGFjaGVkVG9Eb2N1bWVudChmaXJzdFRhcmdldE5vZGUpOyB9OyAvLyBQYXNzaXZlIGRpc3Bvc2FsIChvbiBuZXh0IGV2YWx1YXRpb24pXHJcbiAgICAgICAgICAgIHZhciBhY3RpdmVseURpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZCA9IChmaXJzdFRhcmdldE5vZGUgJiYgcmVuZGVyTW9kZSA9PSBcInJlcGxhY2VOb2RlXCIpID8gZmlyc3RUYXJnZXROb2RlLnBhcmVudE5vZGUgOiBmaXJzdFRhcmdldE5vZGU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ga28uZGVwZW5kZW50T2JzZXJ2YWJsZSggLy8gU28gdGhlIERPTSBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2hlbiBhbnkgZGVwZW5kZW5jeSBjaGFuZ2VzXHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHdlJ3ZlIGdvdCBhIHByb3BlciBiaW5kaW5nIGNvbnRleHQgdG8gd29yayB3aXRoXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJpbmRpbmdDb250ZXh0ID0gKGRhdGFPckJpbmRpbmdDb250ZXh0ICYmIChkYXRhT3JCaW5kaW5nQ29udGV4dCBpbnN0YW5jZW9mIGtvLmJpbmRpbmdDb250ZXh0KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBkYXRhT3JCaW5kaW5nQ29udGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBrby5iaW5kaW5nQ29udGV4dChrby51dGlscy51bndyYXBPYnNlcnZhYmxlKGRhdGFPckJpbmRpbmdDb250ZXh0KSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZU5hbWUgPSByZXNvbHZlVGVtcGxhdGVOYW1lKHRlbXBsYXRlLCBiaW5kaW5nQ29udGV4dFsnJGRhdGEnXSwgYmluZGluZ0NvbnRleHQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlZE5vZGVzQXJyYXkgPSBleGVjdXRlVGVtcGxhdGUodGFyZ2V0Tm9kZU9yTm9kZUFycmF5LCByZW5kZXJNb2RlLCB0ZW1wbGF0ZU5hbWUsIGJpbmRpbmdDb250ZXh0LCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlck1vZGUgPT0gXCJyZXBsYWNlTm9kZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5vZGVPck5vZGVBcnJheSA9IHJlbmRlcmVkTm9kZXNBcnJheTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RUYXJnZXROb2RlID0gZ2V0Rmlyc3ROb2RlRnJvbVBvc3NpYmxlQXJyYXkodGFyZ2V0Tm9kZU9yTm9kZUFycmF5KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgIHsgZGlzcG9zZVdoZW46IHdoZW5Ub0Rpc3Bvc2UsIGRpc3Bvc2VXaGVuTm9kZUlzUmVtb3ZlZDogYWN0aXZlbHlEaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFdlIGRvbid0IHlldCBoYXZlIGEgRE9NIG5vZGUgdG8gZXZhbHVhdGUsIHNvIHVzZSBhIG1lbW8gYW5kIHJlbmRlciB0aGUgdGVtcGxhdGUgbGF0ZXIgd2hlbiB0aGVyZSBpcyBhIERPTSBub2RlXHJcbiAgICAgICAgICAgIHJldHVybiBrby5tZW1vaXphdGlvbi5tZW1vaXplKGZ1bmN0aW9uIChkb21Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICBrby5yZW5kZXJUZW1wbGF0ZSh0ZW1wbGF0ZSwgZGF0YU9yQmluZGluZ0NvbnRleHQsIG9wdGlvbnMsIGRvbU5vZGUsIFwicmVwbGFjZU5vZGVcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAga28ucmVuZGVyVGVtcGxhdGVGb3JFYWNoID0gZnVuY3Rpb24gKHRlbXBsYXRlLCBhcnJheU9yT2JzZXJ2YWJsZUFycmF5LCBvcHRpb25zLCB0YXJnZXROb2RlLCBwYXJlbnRCaW5kaW5nQ29udGV4dCkge1xyXG4gICAgICAgIC8vIFNpbmNlIHNldERvbU5vZGVDaGlsZHJlbkZyb21BcnJheU1hcHBpbmcgYWx3YXlzIGNhbGxzIGV4ZWN1dGVUZW1wbGF0ZUZvckFycmF5SXRlbSBhbmQgdGhlblxyXG4gICAgICAgIC8vIGFjdGl2YXRlQmluZGluZ3NDYWxsYmFjayBmb3IgYWRkZWQgaXRlbXMsIHdlIGNhbiBzdG9yZSB0aGUgYmluZGluZyBjb250ZXh0IGluIHRoZSBmb3JtZXIgdG8gdXNlIGluIHRoZSBsYXR0ZXIuXHJcbiAgICAgICAgdmFyIGFycmF5SXRlbUNvbnRleHQ7XHJcblxyXG4gICAgICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgYnkgc2V0RG9tTm9kZUNoaWxkcmVuRnJvbUFycmF5TWFwcGluZyB0byBnZXQgdGhlIG5vZGVzIHRvIGFkZCB0byB0YXJnZXROb2RlXHJcbiAgICAgICAgdmFyIGV4ZWN1dGVUZW1wbGF0ZUZvckFycmF5SXRlbSA9IGZ1bmN0aW9uIChhcnJheVZhbHVlLCBpbmRleCkge1xyXG4gICAgICAgICAgICAvLyBTdXBwb3J0IHNlbGVjdGluZyB0ZW1wbGF0ZSBhcyBhIGZ1bmN0aW9uIG9mIHRoZSBkYXRhIGJlaW5nIHJlbmRlcmVkXHJcbiAgICAgICAgICAgIGFycmF5SXRlbUNvbnRleHQgPSBwYXJlbnRCaW5kaW5nQ29udGV4dFsnY3JlYXRlQ2hpbGRDb250ZXh0J10oYXJyYXlWYWx1ZSwgb3B0aW9uc1snYXMnXSwgZnVuY3Rpb24oY29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dFsnJGluZGV4J10gPSBpbmRleDtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgdGVtcGxhdGVOYW1lID0gcmVzb2x2ZVRlbXBsYXRlTmFtZSh0ZW1wbGF0ZSwgYXJyYXlWYWx1ZSwgYXJyYXlJdGVtQ29udGV4dCk7XHJcbiAgICAgICAgICAgIHJldHVybiBleGVjdXRlVGVtcGxhdGUobnVsbCwgXCJpZ25vcmVUYXJnZXROb2RlXCIsIHRlbXBsYXRlTmFtZSwgYXJyYXlJdGVtQ29udGV4dCwgb3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUaGlzIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHNldERvbU5vZGVDaGlsZHJlbkZyb21BcnJheU1hcHBpbmcgaGFzIGFkZGVkIG5vZGVzIHRvIHRhcmdldE5vZGVcclxuICAgICAgICB2YXIgYWN0aXZhdGVCaW5kaW5nc0NhbGxiYWNrID0gZnVuY3Rpb24oYXJyYXlWYWx1ZSwgYWRkZWROb2Rlc0FycmF5LCBpbmRleCkge1xyXG4gICAgICAgICAgICBhY3RpdmF0ZUJpbmRpbmdzT25Db250aW51b3VzTm9kZUFycmF5KGFkZGVkTm9kZXNBcnJheSwgYXJyYXlJdGVtQ29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zWydhZnRlclJlbmRlciddKVxyXG4gICAgICAgICAgICAgICAgb3B0aW9uc1snYWZ0ZXJSZW5kZXInXShhZGRlZE5vZGVzQXJyYXksIGFycmF5VmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgLy8gcmVsZWFzZSB0aGUgXCJjYWNoZVwiIHZhcmlhYmxlLCBzbyB0aGF0IGl0IGNhbiBiZSBjb2xsZWN0ZWQgYnlcclxuICAgICAgICAgICAgLy8gdGhlIEdDIHdoZW4gaXRzIHZhbHVlIGlzbid0IHVzZWQgZnJvbSB3aXRoaW4gdGhlIGJpbmRpbmdzIGFueW1vcmUuXHJcbiAgICAgICAgICAgIGFycmF5SXRlbUNvbnRleHQgPSBudWxsO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBrby5kZXBlbmRlbnRPYnNlcnZhYmxlKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHVud3JhcHBlZEFycmF5ID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShhcnJheU9yT2JzZXJ2YWJsZUFycmF5KSB8fCBbXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB1bndyYXBwZWRBcnJheS5sZW5ndGggPT0gXCJ1bmRlZmluZWRcIikgLy8gQ29lcmNlIHNpbmdsZSB2YWx1ZSBpbnRvIGFycmF5XHJcbiAgICAgICAgICAgICAgICB1bndyYXBwZWRBcnJheSA9IFt1bndyYXBwZWRBcnJheV07XHJcblxyXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IGFueSBlbnRyaWVzIG1hcmtlZCBhcyBkZXN0cm95ZWRcclxuICAgICAgICAgICAgdmFyIGZpbHRlcmVkQXJyYXkgPSBrby51dGlscy5hcnJheUZpbHRlcih1bndyYXBwZWRBcnJheSwgZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNbJ2luY2x1ZGVEZXN0cm95ZWQnXSB8fCBpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCB8fCAha28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShpdGVtWydfZGVzdHJveSddKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBDYWxsIHNldERvbU5vZGVDaGlsZHJlbkZyb21BcnJheU1hcHBpbmcsIGlnbm9yaW5nIGFueSBvYnNlcnZhYmxlcyB1bndyYXBwZWQgd2l0aGluIChtb3N0IGxpa2VseSBmcm9tIGEgY2FsbGJhY2sgZnVuY3Rpb24pLlxyXG4gICAgICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXRlbXMgYXJlIG9ic2VydmFibGVzLCB0aG91Z2gsIHRoZXkgd2lsbCBiZSB1bndyYXBwZWQgaW4gZXhlY3V0ZVRlbXBsYXRlRm9yQXJyYXlJdGVtIGFuZCBtYW5hZ2VkIHdpdGhpbiBzZXREb21Ob2RlQ2hpbGRyZW5Gcm9tQXJyYXlNYXBwaW5nLlxyXG4gICAgICAgICAgICBrby5kZXBlbmRlbmN5RGV0ZWN0aW9uLmlnbm9yZShrby51dGlscy5zZXREb21Ob2RlQ2hpbGRyZW5Gcm9tQXJyYXlNYXBwaW5nLCBudWxsLCBbdGFyZ2V0Tm9kZSwgZmlsdGVyZWRBcnJheSwgZXhlY3V0ZVRlbXBsYXRlRm9yQXJyYXlJdGVtLCBvcHRpb25zLCBhY3RpdmF0ZUJpbmRpbmdzQ2FsbGJhY2tdKTtcclxuXHJcbiAgICAgICAgfSwgbnVsbCwgeyBkaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQ6IHRhcmdldE5vZGUgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciB0ZW1wbGF0ZUNvbXB1dGVkRG9tRGF0YUtleSA9IGtvLnV0aWxzLmRvbURhdGEubmV4dEtleSgpO1xyXG4gICAgZnVuY3Rpb24gZGlzcG9zZU9sZENvbXB1dGVkQW5kU3RvcmVOZXdPbmUoZWxlbWVudCwgbmV3Q29tcHV0ZWQpIHtcclxuICAgICAgICB2YXIgb2xkQ29tcHV0ZWQgPSBrby51dGlscy5kb21EYXRhLmdldChlbGVtZW50LCB0ZW1wbGF0ZUNvbXB1dGVkRG9tRGF0YUtleSk7XHJcbiAgICAgICAgaWYgKG9sZENvbXB1dGVkICYmICh0eXBlb2Yob2xkQ29tcHV0ZWQuZGlzcG9zZSkgPT0gJ2Z1bmN0aW9uJykpXHJcbiAgICAgICAgICAgIG9sZENvbXB1dGVkLmRpc3Bvc2UoKTtcclxuICAgICAgICBrby51dGlscy5kb21EYXRhLnNldChlbGVtZW50LCB0ZW1wbGF0ZUNvbXB1dGVkRG9tRGF0YUtleSwgKG5ld0NvbXB1dGVkICYmIG5ld0NvbXB1dGVkLmlzQWN0aXZlKCkpID8gbmV3Q29tcHV0ZWQgOiB1bmRlZmluZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGtvLmJpbmRpbmdIYW5kbGVyc1sndGVtcGxhdGUnXSA9IHtcclxuICAgICAgICAnaW5pdCc6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IpIHtcclxuICAgICAgICAgICAgLy8gU3VwcG9ydCBhbm9ueW1vdXMgdGVtcGxhdGVzXHJcbiAgICAgICAgICAgIHZhciBiaW5kaW5nVmFsdWUgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKHZhbHVlQWNjZXNzb3IoKSk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYmluZGluZ1ZhbHVlID09IFwic3RyaW5nXCIgfHwgYmluZGluZ1ZhbHVlWyduYW1lJ10pIHtcclxuICAgICAgICAgICAgICAgIC8vIEl0J3MgYSBuYW1lZCB0ZW1wbGF0ZSAtIGNsZWFyIHRoZSBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICBrby52aXJ0dWFsRWxlbWVudHMuZW1wdHlOb2RlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCdub2RlcycgaW4gYmluZGluZ1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBXZSd2ZSBiZWVuIGdpdmVuIGFuIGFycmF5IG9mIERPTSBub2Rlcy4gU2F2ZSB0aGVtIGFzIHRoZSB0ZW1wbGF0ZSBzb3VyY2UuXHJcbiAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBubyBrbm93biB1c2UgY2FzZSBmb3IgdGhlIG5vZGUgYXJyYXkgYmVpbmcgYW4gb2JzZXJ2YWJsZSBhcnJheSAoaWYgdGhlIG91dHB1dFxyXG4gICAgICAgICAgICAgICAgLy8gdmFyaWVzLCBwdXQgdGhhdCBiZWhhdmlvciAqaW50byogeW91ciB0ZW1wbGF0ZSAtIHRoYXQncyB3aGF0IHRlbXBsYXRlcyBhcmUgZm9yKSwgYW5kXHJcbiAgICAgICAgICAgICAgICAvLyB0aGUgaW1wbGVtZW50YXRpb24gd291bGQgYmUgYSBtZXNzLCBzbyBhc3NlcnQgdGhhdCBpdCdzIG5vdCBvYnNlcnZhYmxlLlxyXG4gICAgICAgICAgICAgICAgdmFyIG5vZGVzID0gYmluZGluZ1ZhbHVlWydub2RlcyddIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGtvLmlzT2JzZXJ2YWJsZShub2RlcykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcIm5vZGVzXCIgb3B0aW9uIG11c3QgYmUgYSBwbGFpbiwgbm9uLW9ic2VydmFibGUgYXJyYXkuJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0ga28udXRpbHMubW92ZUNsZWFuZWROb2Rlc1RvQ29udGFpbmVyRWxlbWVudChub2Rlcyk7IC8vIFRoaXMgYWxzbyByZW1vdmVzIHRoZSBub2RlcyBmcm9tIHRoZWlyIGN1cnJlbnQgcGFyZW50XHJcbiAgICAgICAgICAgICAgICBuZXcga28udGVtcGxhdGVTb3VyY2VzLmFub255bW91c1RlbXBsYXRlKGVsZW1lbnQpWydub2RlcyddKGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJdCdzIGFuIGFub255bW91cyB0ZW1wbGF0ZSAtIHN0b3JlIHRoZSBlbGVtZW50IGNvbnRlbnRzLCB0aGVuIGNsZWFyIHRoZSBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGVOb2RlcyA9IGtvLnZpcnR1YWxFbGVtZW50cy5jaGlsZE5vZGVzKGVsZW1lbnQpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IGtvLnV0aWxzLm1vdmVDbGVhbmVkTm9kZXNUb0NvbnRhaW5lckVsZW1lbnQodGVtcGxhdGVOb2Rlcyk7IC8vIFRoaXMgYWxzbyByZW1vdmVzIHRoZSBub2RlcyBmcm9tIHRoZWlyIGN1cnJlbnQgcGFyZW50XHJcbiAgICAgICAgICAgICAgICBuZXcga28udGVtcGxhdGVTb3VyY2VzLmFub255bW91c1RlbXBsYXRlKGVsZW1lbnQpWydub2RlcyddKGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHsgJ2NvbnRyb2xzRGVzY2VuZGFudEJpbmRpbmdzJzogdHJ1ZSB9O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJ3VwZGF0ZSc6IGZ1bmN0aW9uIChlbGVtZW50LCB2YWx1ZUFjY2Vzc29yLCBhbGxCaW5kaW5ncywgdmlld01vZGVsLCBiaW5kaW5nQ29udGV4dCkge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZUFjY2Vzc29yKCksXHJcbiAgICAgICAgICAgICAgICBkYXRhVmFsdWUsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0ga28udXRpbHMudW53cmFwT2JzZXJ2YWJsZSh2YWx1ZSksXHJcbiAgICAgICAgICAgICAgICBzaG91bGREaXNwbGF5ID0gdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlQ29tcHV0ZWQgPSBudWxsLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVOYW1lO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlTmFtZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVOYW1lID0gb3B0aW9uc1snbmFtZSddO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgXCJpZlwiL1wiaWZub3RcIiBjb25kaXRpb25zXHJcbiAgICAgICAgICAgICAgICBpZiAoJ2lmJyBpbiBvcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZERpc3BsYXkgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKG9wdGlvbnNbJ2lmJ10pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERpc3BsYXkgJiYgJ2lmbm90JyBpbiBvcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZERpc3BsYXkgPSAha28udXRpbHMudW53cmFwT2JzZXJ2YWJsZShvcHRpb25zWydpZm5vdCddKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkYXRhVmFsdWUgPSBrby51dGlscy51bndyYXBPYnNlcnZhYmxlKG9wdGlvbnNbJ2RhdGEnXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICgnZm9yZWFjaCcgaW4gb3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgLy8gUmVuZGVyIG9uY2UgZm9yIGVhY2ggZGF0YSBwb2ludCAodHJlYXRpbmcgZGF0YSBzZXQgYXMgZW1wdHkgaWYgc2hvdWxkRGlzcGxheT09ZmFsc2UpXHJcbiAgICAgICAgICAgICAgICB2YXIgZGF0YUFycmF5ID0gKHNob3VsZERpc3BsYXkgJiYgb3B0aW9uc1snZm9yZWFjaCddKSB8fCBbXTtcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlQ29tcHV0ZWQgPSBrby5yZW5kZXJUZW1wbGF0ZUZvckVhY2godGVtcGxhdGVOYW1lIHx8IGVsZW1lbnQsIGRhdGFBcnJheSwgb3B0aW9ucywgZWxlbWVudCwgYmluZGluZ0NvbnRleHQpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzaG91bGREaXNwbGF5KSB7XHJcbiAgICAgICAgICAgICAgICBrby52aXJ0dWFsRWxlbWVudHMuZW1wdHlOb2RlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gUmVuZGVyIG9uY2UgZm9yIHRoaXMgc2luZ2xlIGRhdGEgcG9pbnQgKG9yIHVzZSB0aGUgdmlld01vZGVsIGlmIG5vIGRhdGEgd2FzIHByb3ZpZGVkKVxyXG4gICAgICAgICAgICAgICAgdmFyIGlubmVyQmluZGluZ0NvbnRleHQgPSAoJ2RhdGEnIGluIG9wdGlvbnMpID9cclxuICAgICAgICAgICAgICAgICAgICBiaW5kaW5nQ29udGV4dFsnY3JlYXRlQ2hpbGRDb250ZXh0J10oZGF0YVZhbHVlLCBvcHRpb25zWydhcyddKSA6ICAvLyBHaXZlbiBhbiBleHBsaXRpdCAnZGF0YScgdmFsdWUsIHdlIGNyZWF0ZSBhIGNoaWxkIGJpbmRpbmcgY29udGV4dCBmb3IgaXRcclxuICAgICAgICAgICAgICAgICAgICBiaW5kaW5nQ29udGV4dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdpdmVuIG5vIGV4cGxpY2l0ICdkYXRhJyB2YWx1ZSwgd2UgcmV0YWluIHRoZSBzYW1lIGJpbmRpbmcgY29udGV4dFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVDb21wdXRlZCA9IGtvLnJlbmRlclRlbXBsYXRlKHRlbXBsYXRlTmFtZSB8fCBlbGVtZW50LCBpbm5lckJpbmRpbmdDb250ZXh0LCBvcHRpb25zLCBlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gSXQgb25seSBtYWtlcyBzZW5zZSB0byBoYXZlIGEgc2luZ2xlIHRlbXBsYXRlIGNvbXB1dGVkIHBlciBlbGVtZW50IChvdGhlcndpc2Ugd2hpY2ggb25lIHNob3VsZCBoYXZlIGl0cyBvdXRwdXQgZGlzcGxheWVkPylcclxuICAgICAgICAgICAgZGlzcG9zZU9sZENvbXB1dGVkQW5kU3RvcmVOZXdPbmUoZWxlbWVudCwgdGVtcGxhdGVDb21wdXRlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBBbm9ueW1vdXMgdGVtcGxhdGVzIGNhbid0IGJlIHJld3JpdHRlbi4gR2l2ZSBhIG5pY2UgZXJyb3IgbWVzc2FnZSBpZiB5b3UgdHJ5IHRvIGRvIGl0LlxyXG4gICAga28uZXhwcmVzc2lvblJld3JpdGluZy5iaW5kaW5nUmV3cml0ZVZhbGlkYXRvcnNbJ3RlbXBsYXRlJ10gPSBmdW5jdGlvbihiaW5kaW5nVmFsdWUpIHtcclxuICAgICAgICB2YXIgcGFyc2VkQmluZGluZ1ZhbHVlID0ga28uZXhwcmVzc2lvblJld3JpdGluZy5wYXJzZU9iamVjdExpdGVyYWwoYmluZGluZ1ZhbHVlKTtcclxuXHJcbiAgICAgICAgaWYgKChwYXJzZWRCaW5kaW5nVmFsdWUubGVuZ3RoID09IDEpICYmIHBhcnNlZEJpbmRpbmdWYWx1ZVswXVsndW5rbm93biddKVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gSXQgbG9va3MgbGlrZSBhIHN0cmluZyBsaXRlcmFsLCBub3QgYW4gb2JqZWN0IGxpdGVyYWwsIHNvIHRyZWF0IGl0IGFzIGEgbmFtZWQgdGVtcGxhdGUgKHdoaWNoIGlzIGFsbG93ZWQgZm9yIHJld3JpdGluZylcclxuXHJcbiAgICAgICAgaWYgKGtvLmV4cHJlc3Npb25SZXdyaXRpbmcua2V5VmFsdWVBcnJheUNvbnRhaW5zS2V5KHBhcnNlZEJpbmRpbmdWYWx1ZSwgXCJuYW1lXCIpKVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gTmFtZWQgdGVtcGxhdGVzIGNhbiBiZSByZXdyaXR0ZW4sIHNvIHJldHVybiBcIm5vIGVycm9yXCJcclxuICAgICAgICByZXR1cm4gXCJUaGlzIHRlbXBsYXRlIGVuZ2luZSBkb2VzIG5vdCBzdXBwb3J0IGFub255bW91cyB0ZW1wbGF0ZXMgbmVzdGVkIHdpdGhpbiBpdHMgdGVtcGxhdGVzXCI7XHJcbiAgICB9O1xyXG5cclxuICAgIGtvLnZpcnR1YWxFbGVtZW50cy5hbGxvd2VkQmluZGluZ3NbJ3RlbXBsYXRlJ10gPSB0cnVlO1xyXG59KSgpO1xyXG5cclxua28uZXhwb3J0U3ltYm9sKCdzZXRUZW1wbGF0ZUVuZ2luZScsIGtvLnNldFRlbXBsYXRlRW5naW5lKTtcclxua28uZXhwb3J0U3ltYm9sKCdyZW5kZXJUZW1wbGF0ZScsIGtvLnJlbmRlclRlbXBsYXRlKTtcclxuLy8gR28gdGhyb3VnaCB0aGUgaXRlbXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgYW5kIGRlbGV0ZWQgYW5kIHRyeSB0byBmaW5kIG1hdGNoZXMgYmV0d2VlbiB0aGVtLlxyXG5rby51dGlscy5maW5kTW92ZXNJbkFycmF5Q29tcGFyaXNvbiA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgbGltaXRGYWlsZWRDb21wYXJlcykge1xyXG4gICAgaWYgKGxlZnQubGVuZ3RoICYmIHJpZ2h0Lmxlbmd0aCkge1xyXG4gICAgICAgIHZhciBmYWlsZWRDb21wYXJlcywgbCwgciwgbGVmdEl0ZW0sIHJpZ2h0SXRlbTtcclxuICAgICAgICBmb3IgKGZhaWxlZENvbXBhcmVzID0gbCA9IDA7ICghbGltaXRGYWlsZWRDb21wYXJlcyB8fCBmYWlsZWRDb21wYXJlcyA8IGxpbWl0RmFpbGVkQ29tcGFyZXMpICYmIChsZWZ0SXRlbSA9IGxlZnRbbF0pOyArK2wpIHtcclxuICAgICAgICAgICAgZm9yIChyID0gMDsgcmlnaHRJdGVtID0gcmlnaHRbcl07ICsrcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxlZnRJdGVtWyd2YWx1ZSddID09PSByaWdodEl0ZW1bJ3ZhbHVlJ10pIHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbVsnbW92ZWQnXSA9IHJpZ2h0SXRlbVsnaW5kZXgnXTtcclxuICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1bJ21vdmVkJ10gPSBsZWZ0SXRlbVsnaW5kZXgnXTtcclxuICAgICAgICAgICAgICAgICAgICByaWdodC5zcGxpY2UociwgMSk7ICAgICAgICAgLy8gVGhpcyBpdGVtIGlzIG1hcmtlZCBhcyBtb3ZlZDsgc28gcmVtb3ZlIGl0IGZyb20gcmlnaHQgbGlzdFxyXG4gICAgICAgICAgICAgICAgICAgIGZhaWxlZENvbXBhcmVzID0gciA9IDA7ICAgICAvLyBSZXNldCBmYWlsZWQgY29tcGFyZXMgY291bnQgYmVjYXVzZSB3ZSdyZSBjaGVja2luZyBmb3IgY29uc2VjdXRpdmUgZmFpbHVyZXNcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmYWlsZWRDb21wYXJlcyArPSByO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmtvLnV0aWxzLmNvbXBhcmVBcnJheXMgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHN0YXR1c05vdEluT2xkID0gJ2FkZGVkJywgc3RhdHVzTm90SW5OZXcgPSAnZGVsZXRlZCc7XHJcblxyXG4gICAgLy8gU2ltcGxlIGNhbGN1bGF0aW9uIGJhc2VkIG9uIExldmVuc2h0ZWluIGRpc3RhbmNlLlxyXG4gICAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyhvbGRBcnJheSwgbmV3QXJyYXksIG9wdGlvbnMpIHtcclxuICAgICAgICAvLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgaWYgdGhlIHRoaXJkIGFyZyBpcyBhY3R1YWxseSBhIGJvb2wsIGludGVycHJldFxyXG4gICAgICAgIC8vIGl0IGFzIHRoZSBvbGQgcGFyYW1ldGVyICdkb250TGltaXRNb3ZlcycuIE5ld2VyIGNvZGUgc2hvdWxkIHVzZSB7IGRvbnRMaW1pdE1vdmVzOiB0cnVlIH0uXHJcbiAgICAgICAgb3B0aW9ucyA9ICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Jvb2xlYW4nKSA/IHsgJ2RvbnRMaW1pdE1vdmVzJzogb3B0aW9ucyB9IDogKG9wdGlvbnMgfHwge30pO1xyXG4gICAgICAgIG9sZEFycmF5ID0gb2xkQXJyYXkgfHwgW107XHJcbiAgICAgICAgbmV3QXJyYXkgPSBuZXdBcnJheSB8fCBbXTtcclxuXHJcbiAgICAgICAgaWYgKG9sZEFycmF5Lmxlbmd0aCA8IG5ld0FycmF5Lmxlbmd0aClcclxuICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVTbWFsbEFycmF5VG9CaWdBcnJheShvbGRBcnJheSwgbmV3QXJyYXksIHN0YXR1c05vdEluT2xkLCBzdGF0dXNOb3RJbk5ldywgb3B0aW9ucyk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gY29tcGFyZVNtYWxsQXJyYXlUb0JpZ0FycmF5KG5ld0FycmF5LCBvbGRBcnJheSwgc3RhdHVzTm90SW5OZXcsIHN0YXR1c05vdEluT2xkLCBvcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjb21wYXJlU21hbGxBcnJheVRvQmlnQXJyYXkoc21sQXJyYXksIGJpZ0FycmF5LCBzdGF0dXNOb3RJblNtbCwgc3RhdHVzTm90SW5CaWcsIG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgbXlNaW4gPSBNYXRoLm1pbixcclxuICAgICAgICAgICAgbXlNYXggPSBNYXRoLm1heCxcclxuICAgICAgICAgICAgZWRpdERpc3RhbmNlTWF0cml4ID0gW10sXHJcbiAgICAgICAgICAgIHNtbEluZGV4LCBzbWxJbmRleE1heCA9IHNtbEFycmF5Lmxlbmd0aCxcclxuICAgICAgICAgICAgYmlnSW5kZXgsIGJpZ0luZGV4TWF4ID0gYmlnQXJyYXkubGVuZ3RoLFxyXG4gICAgICAgICAgICBjb21wYXJlUmFuZ2UgPSAoYmlnSW5kZXhNYXggLSBzbWxJbmRleE1heCkgfHwgMSxcclxuICAgICAgICAgICAgbWF4RGlzdGFuY2UgPSBzbWxJbmRleE1heCArIGJpZ0luZGV4TWF4ICsgMSxcclxuICAgICAgICAgICAgdGhpc1JvdywgbGFzdFJvdyxcclxuICAgICAgICAgICAgYmlnSW5kZXhNYXhGb3JSb3csIGJpZ0luZGV4TWluRm9yUm93O1xyXG5cclxuICAgICAgICBmb3IgKHNtbEluZGV4ID0gMDsgc21sSW5kZXggPD0gc21sSW5kZXhNYXg7IHNtbEluZGV4KyspIHtcclxuICAgICAgICAgICAgbGFzdFJvdyA9IHRoaXNSb3c7XHJcbiAgICAgICAgICAgIGVkaXREaXN0YW5jZU1hdHJpeC5wdXNoKHRoaXNSb3cgPSBbXSk7XHJcbiAgICAgICAgICAgIGJpZ0luZGV4TWF4Rm9yUm93ID0gbXlNaW4oYmlnSW5kZXhNYXgsIHNtbEluZGV4ICsgY29tcGFyZVJhbmdlKTtcclxuICAgICAgICAgICAgYmlnSW5kZXhNaW5Gb3JSb3cgPSBteU1heCgwLCBzbWxJbmRleCAtIDEpO1xyXG4gICAgICAgICAgICBmb3IgKGJpZ0luZGV4ID0gYmlnSW5kZXhNaW5Gb3JSb3c7IGJpZ0luZGV4IDw9IGJpZ0luZGV4TWF4Rm9yUm93OyBiaWdJbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWJpZ0luZGV4KVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNSb3dbYmlnSW5kZXhdID0gc21sSW5kZXggKyAxO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIXNtbEluZGV4KSAgLy8gVG9wIHJvdyAtIHRyYW5zZm9ybSBlbXB0eSBhcnJheSBpbnRvIG5ldyBhcnJheSB2aWEgYWRkaXRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpc1Jvd1tiaWdJbmRleF0gPSBiaWdJbmRleCArIDE7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzbWxBcnJheVtzbWxJbmRleCAtIDFdID09PSBiaWdBcnJheVtiaWdJbmRleCAtIDFdKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNSb3dbYmlnSW5kZXhdID0gbGFzdFJvd1tiaWdJbmRleCAtIDFdOyAgICAgICAgICAgICAgICAgIC8vIGNvcHkgdmFsdWUgKG5vIGVkaXQpXHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbm9ydGhEaXN0YW5jZSA9IGxhc3RSb3dbYmlnSW5kZXhdIHx8IG1heERpc3RhbmNlOyAgICAgICAvLyBub3QgaW4gYmlnIChkZWxldGlvbilcclxuICAgICAgICAgICAgICAgICAgICB2YXIgd2VzdERpc3RhbmNlID0gdGhpc1Jvd1tiaWdJbmRleCAtIDFdIHx8IG1heERpc3RhbmNlOyAgICAvLyBub3QgaW4gc21hbGwgKGFkZGl0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNSb3dbYmlnSW5kZXhdID0gbXlNaW4obm9ydGhEaXN0YW5jZSwgd2VzdERpc3RhbmNlKSArIDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlZGl0U2NyaXB0ID0gW10sIG1lTWludXNPbmUsIG5vdEluU21sID0gW10sIG5vdEluQmlnID0gW107XHJcbiAgICAgICAgZm9yIChzbWxJbmRleCA9IHNtbEluZGV4TWF4LCBiaWdJbmRleCA9IGJpZ0luZGV4TWF4OyBzbWxJbmRleCB8fCBiaWdJbmRleDspIHtcclxuICAgICAgICAgICAgbWVNaW51c09uZSA9IGVkaXREaXN0YW5jZU1hdHJpeFtzbWxJbmRleF1bYmlnSW5kZXhdIC0gMTtcclxuICAgICAgICAgICAgaWYgKGJpZ0luZGV4ICYmIG1lTWludXNPbmUgPT09IGVkaXREaXN0YW5jZU1hdHJpeFtzbWxJbmRleF1bYmlnSW5kZXgtMV0pIHtcclxuICAgICAgICAgICAgICAgIG5vdEluU21sLnB1c2goZWRpdFNjcmlwdFtlZGl0U2NyaXB0Lmxlbmd0aF0gPSB7ICAgICAvLyBhZGRlZFxyXG4gICAgICAgICAgICAgICAgICAgICdzdGF0dXMnOiBzdGF0dXNOb3RJblNtbCxcclxuICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiBiaWdBcnJheVstLWJpZ0luZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICAnaW5kZXgnOiBiaWdJbmRleCB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzbWxJbmRleCAmJiBtZU1pbnVzT25lID09PSBlZGl0RGlzdGFuY2VNYXRyaXhbc21sSW5kZXggLSAxXVtiaWdJbmRleF0pIHtcclxuICAgICAgICAgICAgICAgIG5vdEluQmlnLnB1c2goZWRpdFNjcmlwdFtlZGl0U2NyaXB0Lmxlbmd0aF0gPSB7ICAgICAvLyBkZWxldGVkXHJcbiAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cyc6IHN0YXR1c05vdEluQmlnLFxyXG4gICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IHNtbEFycmF5Wy0tc21sSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgICdpbmRleCc6IHNtbEluZGV4IH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLS1iaWdJbmRleDtcclxuICAgICAgICAgICAgICAgIC0tc21sSW5kZXg7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnNbJ3NwYXJzZSddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdFNjcmlwdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cyc6IFwicmV0YWluZWRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogYmlnQXJyYXlbYmlnSW5kZXhdIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZXQgYSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIG5vbi1tYXRjaGluZyBjb21wYXJpc29uczsgaGF2aW5nIGl0IGEgbXVsdGlwbGUgb2ZcclxuICAgICAgICAvLyBzbWxJbmRleE1heCBrZWVwcyB0aGUgdGltZSBjb21wbGV4aXR5IG9mIHRoaXMgYWxnb3JpdGhtIGxpbmVhci5cclxuICAgICAgICBrby51dGlscy5maW5kTW92ZXNJbkFycmF5Q29tcGFyaXNvbihub3RJbkJpZywgbm90SW5TbWwsICFvcHRpb25zWydkb250TGltaXRNb3ZlcyddICYmIHNtbEluZGV4TWF4ICogMTApO1xyXG5cclxuICAgICAgICByZXR1cm4gZWRpdFNjcmlwdC5yZXZlcnNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbXBhcmVBcnJheXM7XHJcbn0pKCk7XHJcblxyXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLmNvbXBhcmVBcnJheXMnLCBrby51dGlscy5jb21wYXJlQXJyYXlzKTtcclxuKGZ1bmN0aW9uICgpIHtcclxuICAgIC8vIE9iamVjdGl2ZTpcclxuICAgIC8vICogR2l2ZW4gYW4gaW5wdXQgYXJyYXksIGEgY29udGFpbmVyIERPTSBub2RlLCBhbmQgYSBmdW5jdGlvbiBmcm9tIGFycmF5IGVsZW1lbnRzIHRvIGFycmF5cyBvZiBET00gbm9kZXMsXHJcbiAgICAvLyAgIG1hcCB0aGUgYXJyYXkgZWxlbWVudHMgdG8gYXJyYXlzIG9mIERPTSBub2RlcywgY29uY2F0ZW5hdGUgdG9nZXRoZXIgYWxsIHRoZXNlIGFycmF5cywgYW5kIHVzZSB0aGVtIHRvIHBvcHVsYXRlIHRoZSBjb250YWluZXIgRE9NIG5vZGVcclxuICAgIC8vICogTmV4dCB0aW1lIHdlJ3JlIGdpdmVuIHRoZSBzYW1lIGNvbWJpbmF0aW9uIG9mIHRoaW5ncyAod2l0aCB0aGUgYXJyYXkgcG9zc2libHkgaGF2aW5nIG11dGF0ZWQpLCB1cGRhdGUgdGhlIGNvbnRhaW5lciBET00gbm9kZVxyXG4gICAgLy8gICBzbyB0aGF0IGl0cyBjaGlsZHJlbiBpcyBhZ2FpbiB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgbWFwcGluZ3Mgb2YgdGhlIGFycmF5IGVsZW1lbnRzLCBidXQgZG9uJ3QgcmUtbWFwIGFueSBhcnJheSBlbGVtZW50cyB0aGF0IHdlXHJcbiAgICAvLyAgIHByZXZpb3VzbHkgbWFwcGVkIC0gcmV0YWluIHRob3NlIG5vZGVzLCBhbmQganVzdCBpbnNlcnQvZGVsZXRlIG90aGVyIG9uZXNcclxuXHJcbiAgICAvLyBcImNhbGxiYWNrQWZ0ZXJBZGRpbmdOb2Rlc1wiIHdpbGwgYmUgaW52b2tlZCBhZnRlciBhbnkgXCJtYXBwaW5nXCItZ2VuZXJhdGVkIG5vZGVzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBjb250YWluZXIgbm9kZVxyXG4gICAgLy8gWW91IGNhbiB1c2UgdGhpcywgZm9yIGV4YW1wbGUsIHRvIGFjdGl2YXRlIGJpbmRpbmdzIG9uIHRob3NlIG5vZGVzLlxyXG5cclxuICAgIGZ1bmN0aW9uIG1hcE5vZGVBbmRSZWZyZXNoV2hlbkNoYW5nZWQoY29udGFpbmVyTm9kZSwgbWFwcGluZywgdmFsdWVUb01hcCwgY2FsbGJhY2tBZnRlckFkZGluZ05vZGVzLCBpbmRleCkge1xyXG4gICAgICAgIC8vIE1hcCB0aGlzIGFycmF5IHZhbHVlIGluc2lkZSBhIGRlcGVuZGVudE9ic2VydmFibGUgc28gd2UgcmUtbWFwIHdoZW4gYW55IGRlcGVuZGVuY3kgY2hhbmdlc1xyXG4gICAgICAgIHZhciBtYXBwZWROb2RlcyA9IFtdO1xyXG4gICAgICAgIHZhciBkZXBlbmRlbnRPYnNlcnZhYmxlID0ga28uZGVwZW5kZW50T2JzZXJ2YWJsZShmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdmFyIG5ld01hcHBlZE5vZGVzID0gbWFwcGluZyh2YWx1ZVRvTWFwLCBpbmRleCwga28udXRpbHMuZml4VXBDb250aW51b3VzTm9kZUFycmF5KG1hcHBlZE5vZGVzLCBjb250YWluZXJOb2RlKSkgfHwgW107XHJcblxyXG4gICAgICAgICAgICAvLyBPbiBzdWJzZXF1ZW50IGV2YWx1YXRpb25zLCBqdXN0IHJlcGxhY2UgdGhlIHByZXZpb3VzbHktaW5zZXJ0ZWQgRE9NIG5vZGVzXHJcbiAgICAgICAgICAgIGlmIChtYXBwZWROb2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBrby51dGlscy5yZXBsYWNlRG9tTm9kZXMobWFwcGVkTm9kZXMsIG5ld01hcHBlZE5vZGVzKTtcclxuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja0FmdGVyQWRkaW5nTm9kZXMpXHJcbiAgICAgICAgICAgICAgICAgICAga28uZGVwZW5kZW5jeURldGVjdGlvbi5pZ25vcmUoY2FsbGJhY2tBZnRlckFkZGluZ05vZGVzLCBudWxsLCBbdmFsdWVUb01hcCwgbmV3TWFwcGVkTm9kZXMsIGluZGV4XSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXBwZWROb2RlcyBhcnJheSwgdGhlcmVieSB1cGRhdGluZyB0aGUgcmVjb3JkXHJcbiAgICAgICAgICAgIC8vIG9mIHdoaWNoIG5vZGVzIHdvdWxkIGJlIGRlbGV0ZWQgaWYgdmFsdWVUb01hcCB3YXMgaXRzZWxmIGxhdGVyIHJlbW92ZWRcclxuICAgICAgICAgICAgbWFwcGVkTm9kZXMubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAga28udXRpbHMuYXJyYXlQdXNoQWxsKG1hcHBlZE5vZGVzLCBuZXdNYXBwZWROb2Rlcyk7XHJcbiAgICAgICAgfSwgbnVsbCwgeyBkaXNwb3NlV2hlbk5vZGVJc1JlbW92ZWQ6IGNvbnRhaW5lck5vZGUsIGRpc3Bvc2VXaGVuOiBmdW5jdGlvbigpIHsgcmV0dXJuICFrby51dGlscy5hbnlEb21Ob2RlSXNBdHRhY2hlZFRvRG9jdW1lbnQobWFwcGVkTm9kZXMpOyB9IH0pO1xyXG4gICAgICAgIHJldHVybiB7IG1hcHBlZE5vZGVzIDogbWFwcGVkTm9kZXMsIGRlcGVuZGVudE9ic2VydmFibGUgOiAoZGVwZW5kZW50T2JzZXJ2YWJsZS5pc0FjdGl2ZSgpID8gZGVwZW5kZW50T2JzZXJ2YWJsZSA6IHVuZGVmaW5lZCkgfTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGFzdE1hcHBpbmdSZXN1bHREb21EYXRhS2V5ID0ga28udXRpbHMuZG9tRGF0YS5uZXh0S2V5KCksXHJcbiAgICAgICAgZGVsZXRlZEl0ZW1EdW1teVZhbHVlID0ga28udXRpbHMuZG9tRGF0YS5uZXh0S2V5KCk7XHJcblxyXG4gICAga28udXRpbHMuc2V0RG9tTm9kZUNoaWxkcmVuRnJvbUFycmF5TWFwcGluZyA9IGZ1bmN0aW9uIChkb21Ob2RlLCBhcnJheSwgbWFwcGluZywgb3B0aW9ucywgY2FsbGJhY2tBZnRlckFkZGluZ05vZGVzKSB7XHJcbiAgICAgICAgLy8gQ29tcGFyZSB0aGUgcHJvdmlkZWQgYXJyYXkgYWdhaW5zdCB0aGUgcHJldmlvdXMgb25lXHJcbiAgICAgICAgYXJyYXkgPSBhcnJheSB8fCBbXTtcclxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgICAgICB2YXIgaXNGaXJzdEV4ZWN1dGlvbiA9IGtvLnV0aWxzLmRvbURhdGEuZ2V0KGRvbU5vZGUsIGxhc3RNYXBwaW5nUmVzdWx0RG9tRGF0YUtleSkgPT09IHVuZGVmaW5lZDtcclxuICAgICAgICB2YXIgbGFzdE1hcHBpbmdSZXN1bHQgPSBrby51dGlscy5kb21EYXRhLmdldChkb21Ob2RlLCBsYXN0TWFwcGluZ1Jlc3VsdERvbURhdGFLZXkpIHx8IFtdO1xyXG4gICAgICAgIHZhciBsYXN0QXJyYXkgPSBrby51dGlscy5hcnJheU1hcChsYXN0TWFwcGluZ1Jlc3VsdCwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguYXJyYXlFbnRyeTsgfSk7XHJcbiAgICAgICAgdmFyIGVkaXRTY3JpcHQgPSBrby51dGlscy5jb21wYXJlQXJyYXlzKGxhc3RBcnJheSwgYXJyYXksIG9wdGlvbnNbJ2RvbnRMaW1pdE1vdmVzJ10pO1xyXG5cclxuICAgICAgICAvLyBCdWlsZCB0aGUgbmV3IG1hcHBpbmcgcmVzdWx0XHJcbiAgICAgICAgdmFyIG5ld01hcHBpbmdSZXN1bHQgPSBbXTtcclxuICAgICAgICB2YXIgbGFzdE1hcHBpbmdSZXN1bHRJbmRleCA9IDA7XHJcbiAgICAgICAgdmFyIG5ld01hcHBpbmdSZXN1bHRJbmRleCA9IDA7XHJcblxyXG4gICAgICAgIHZhciBub2Rlc1RvRGVsZXRlID0gW107XHJcbiAgICAgICAgdmFyIGl0ZW1zVG9Qcm9jZXNzID0gW107XHJcbiAgICAgICAgdmFyIGl0ZW1zRm9yQmVmb3JlUmVtb3ZlQ2FsbGJhY2tzID0gW107XHJcbiAgICAgICAgdmFyIGl0ZW1zRm9yTW92ZUNhbGxiYWNrcyA9IFtdO1xyXG4gICAgICAgIHZhciBpdGVtc0ZvckFmdGVyQWRkQ2FsbGJhY2tzID0gW107XHJcbiAgICAgICAgdmFyIG1hcERhdGE7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGl0ZW1Nb3ZlZE9yUmV0YWluZWQoZWRpdFNjcmlwdEluZGV4LCBvbGRQb3NpdGlvbikge1xyXG4gICAgICAgICAgICBtYXBEYXRhID0gbGFzdE1hcHBpbmdSZXN1bHRbb2xkUG9zaXRpb25dO1xyXG4gICAgICAgICAgICBpZiAobmV3TWFwcGluZ1Jlc3VsdEluZGV4ICE9PSBvbGRQb3NpdGlvbilcclxuICAgICAgICAgICAgICAgIGl0ZW1zRm9yTW92ZUNhbGxiYWNrc1tlZGl0U2NyaXB0SW5kZXhdID0gbWFwRGF0YTtcclxuICAgICAgICAgICAgLy8gU2luY2UgdXBkYXRpbmcgdGhlIGluZGV4IG1pZ2h0IGNoYW5nZSB0aGUgbm9kZXMsIGRvIHNvIGJlZm9yZSBjYWxsaW5nIGZpeFVwQ29udGludW91c05vZGVBcnJheVxyXG4gICAgICAgICAgICBtYXBEYXRhLmluZGV4T2JzZXJ2YWJsZShuZXdNYXBwaW5nUmVzdWx0SW5kZXgrKyk7XHJcbiAgICAgICAgICAgIGtvLnV0aWxzLmZpeFVwQ29udGludW91c05vZGVBcnJheShtYXBEYXRhLm1hcHBlZE5vZGVzLCBkb21Ob2RlKTtcclxuICAgICAgICAgICAgbmV3TWFwcGluZ1Jlc3VsdC5wdXNoKG1hcERhdGEpO1xyXG4gICAgICAgICAgICBpdGVtc1RvUHJvY2Vzcy5wdXNoKG1hcERhdGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBpdGVtcykge1xyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gaXRlbXMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zW2ldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtvLnV0aWxzLmFycmF5Rm9yRWFjaChpdGVtc1tpXS5tYXBwZWROb2RlcywgZnVuY3Rpb24obm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgaSwgaXRlbXNbaV0uYXJyYXlFbnRyeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGVkaXRTY3JpcHRJdGVtLCBtb3ZlZEluZGV4OyBlZGl0U2NyaXB0SXRlbSA9IGVkaXRTY3JpcHRbaV07IGkrKykge1xyXG4gICAgICAgICAgICBtb3ZlZEluZGV4ID0gZWRpdFNjcmlwdEl0ZW1bJ21vdmVkJ107XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZWRpdFNjcmlwdEl0ZW1bJ3N0YXR1cyddKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVsZXRlZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb3ZlZEluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwRGF0YSA9IGxhc3RNYXBwaW5nUmVzdWx0W2xhc3RNYXBwaW5nUmVzdWx0SW5kZXhdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcCB0cmFja2luZyBjaGFuZ2VzIHRvIHRoZSBtYXBwaW5nIGZvciB0aGVzZSBub2Rlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwRGF0YS5kZXBlbmRlbnRPYnNlcnZhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBEYXRhLmRlcGVuZGVudE9ic2VydmFibGUuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwRGF0YS5kZXBlbmRlbnRPYnNlcnZhYmxlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBRdWV1ZSB0aGVzZSBub2RlcyBmb3IgbGF0ZXIgcmVtb3ZhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa28udXRpbHMuZml4VXBDb250aW51b3VzTm9kZUFycmF5KG1hcERhdGEubWFwcGVkTm9kZXMsIGRvbU5vZGUpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnNbJ2JlZm9yZVJlbW92ZSddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3TWFwcGluZ1Jlc3VsdC5wdXNoKG1hcERhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zVG9Qcm9jZXNzLnB1c2gobWFwRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcERhdGEuYXJyYXlFbnRyeSA9PT0gZGVsZXRlZEl0ZW1EdW1teVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcERhdGEgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRm9yQmVmb3JlUmVtb3ZlQ2FsbGJhY2tzW2ldID0gbWFwRGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzVG9EZWxldGUucHVzaC5hcHBseShub2Rlc1RvRGVsZXRlLCBtYXBEYXRhLm1hcHBlZE5vZGVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsYXN0TWFwcGluZ1Jlc3VsdEluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBcInJldGFpbmVkXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbU1vdmVkT3JSZXRhaW5lZChpLCBsYXN0TWFwcGluZ1Jlc3VsdEluZGV4KyspO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgXCJhZGRlZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb3ZlZEluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU1vdmVkT3JSZXRhaW5lZChpLCBtb3ZlZEluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXBEYXRhID0geyBhcnJheUVudHJ5OiBlZGl0U2NyaXB0SXRlbVsndmFsdWUnXSwgaW5kZXhPYnNlcnZhYmxlOiBrby5vYnNlcnZhYmxlKG5ld01hcHBpbmdSZXN1bHRJbmRleCsrKSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdNYXBwaW5nUmVzdWx0LnB1c2gobWFwRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zVG9Qcm9jZXNzLnB1c2gobWFwRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNGaXJzdEV4ZWN1dGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRm9yQWZ0ZXJBZGRDYWxsYmFja3NbaV0gPSBtYXBEYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU3RvcmUgYSBjb3B5IG9mIHRoZSBhcnJheSBpdGVtcyB3ZSBqdXN0IGNvbnNpZGVyZWQgc28gd2UgY2FuIGRpZmZlcmVuY2UgaXQgbmV4dCB0aW1lXHJcbiAgICAgICAga28udXRpbHMuZG9tRGF0YS5zZXQoZG9tTm9kZSwgbGFzdE1hcHBpbmdSZXN1bHREb21EYXRhS2V5LCBuZXdNYXBwaW5nUmVzdWx0KTtcclxuXHJcbiAgICAgICAgLy8gQ2FsbCBiZWZvcmVNb3ZlIGZpcnN0IGJlZm9yZSBhbnkgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byB0aGUgRE9NXHJcbiAgICAgICAgY2FsbENhbGxiYWNrKG9wdGlvbnNbJ2JlZm9yZU1vdmUnXSwgaXRlbXNGb3JNb3ZlQ2FsbGJhY2tzKTtcclxuXHJcbiAgICAgICAgLy8gTmV4dCByZW1vdmUgbm9kZXMgZm9yIGRlbGV0ZWQgaXRlbXMgKG9yIGp1c3QgY2xlYW4gaWYgdGhlcmUncyBhIGJlZm9yZVJlbW92ZSBjYWxsYmFjaylcclxuICAgICAgICBrby51dGlscy5hcnJheUZvckVhY2gobm9kZXNUb0RlbGV0ZSwgb3B0aW9uc1snYmVmb3JlUmVtb3ZlJ10gPyBrby5jbGVhbk5vZGUgOiBrby5yZW1vdmVOb2RlKTtcclxuXHJcbiAgICAgICAgLy8gTmV4dCBhZGQvcmVvcmRlciB0aGUgcmVtYWluaW5nIGl0ZW1zICh3aWxsIGluY2x1ZGUgZGVsZXRlZCBpdGVtcyBpZiB0aGVyZSdzIGEgYmVmb3JlUmVtb3ZlIGNhbGxiYWNrKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBuZXh0Tm9kZSA9IGtvLnZpcnR1YWxFbGVtZW50cy5maXJzdENoaWxkKGRvbU5vZGUpLCBsYXN0Tm9kZSwgbm9kZTsgbWFwRGF0YSA9IGl0ZW1zVG9Qcm9jZXNzW2ldOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gR2V0IG5vZGVzIGZvciBuZXdseSBhZGRlZCBpdGVtc1xyXG4gICAgICAgICAgICBpZiAoIW1hcERhdGEubWFwcGVkTm9kZXMpXHJcbiAgICAgICAgICAgICAgICBrby51dGlscy5leHRlbmQobWFwRGF0YSwgbWFwTm9kZUFuZFJlZnJlc2hXaGVuQ2hhbmdlZChkb21Ob2RlLCBtYXBwaW5nLCBtYXBEYXRhLmFycmF5RW50cnksIGNhbGxiYWNrQWZ0ZXJBZGRpbmdOb2RlcywgbWFwRGF0YS5pbmRleE9ic2VydmFibGUpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFB1dCBub2RlcyBpbiB0aGUgcmlnaHQgcGxhY2UgaWYgdGhleSBhcmVuJ3QgdGhlcmUgYWxyZWFkeVxyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgbm9kZSA9IG1hcERhdGEubWFwcGVkTm9kZXNbal07IG5leHROb2RlID0gbm9kZS5uZXh0U2libGluZywgbGFzdE5vZGUgPSBub2RlLCBqKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlICE9PSBuZXh0Tm9kZSlcclxuICAgICAgICAgICAgICAgICAgICBrby52aXJ0dWFsRWxlbWVudHMuaW5zZXJ0QWZ0ZXIoZG9tTm9kZSwgbm9kZSwgbGFzdE5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBSdW4gdGhlIGNhbGxiYWNrcyBmb3IgbmV3bHkgYWRkZWQgbm9kZXMgKGZvciBleGFtcGxlLCB0byBhcHBseSBiaW5kaW5ncywgZXRjLilcclxuICAgICAgICAgICAgaWYgKCFtYXBEYXRhLmluaXRpYWxpemVkICYmIGNhbGxiYWNrQWZ0ZXJBZGRpbmdOb2Rlcykge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tBZnRlckFkZGluZ05vZGVzKG1hcERhdGEuYXJyYXlFbnRyeSwgbWFwRGF0YS5tYXBwZWROb2RlcywgbWFwRGF0YS5pbmRleE9ic2VydmFibGUpO1xyXG4gICAgICAgICAgICAgICAgbWFwRGF0YS5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIElmIHRoZXJlJ3MgYSBiZWZvcmVSZW1vdmUgY2FsbGJhY2ssIGNhbGwgaXQgYWZ0ZXIgcmVvcmRlcmluZy5cclxuICAgICAgICAvLyBOb3RlIHRoYXQgd2UgYXNzdW1lIHRoYXQgdGhlIGJlZm9yZVJlbW92ZSBjYWxsYmFjayB3aWxsIHVzdWFsbHkgYmUgdXNlZCB0byByZW1vdmUgdGhlIG5vZGVzIHVzaW5nXHJcbiAgICAgICAgLy8gc29tZSBzb3J0IG9mIGFuaW1hdGlvbiwgd2hpY2ggaXMgd2h5IHdlIGZpcnN0IHJlb3JkZXIgdGhlIG5vZGVzIHRoYXQgd2lsbCBiZSByZW1vdmVkLiBJZiB0aGVcclxuICAgICAgICAvLyBjYWxsYmFjayBpbnN0ZWFkIHJlbW92ZXMgdGhlIG5vZGVzIHJpZ2h0IGF3YXksIGl0IHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50IHRvIHNraXAgcmVvcmRlcmluZyB0aGVtLlxyXG4gICAgICAgIC8vIFBlcmhhcHMgd2UnbGwgbWFrZSB0aGF0IGNoYW5nZSBpbiB0aGUgZnV0dXJlIGlmIHRoaXMgc2NlbmFyaW8gYmVjb21lcyBtb3JlIGNvbW1vbi5cclxuICAgICAgICBjYWxsQ2FsbGJhY2sob3B0aW9uc1snYmVmb3JlUmVtb3ZlJ10sIGl0ZW1zRm9yQmVmb3JlUmVtb3ZlQ2FsbGJhY2tzKTtcclxuXHJcbiAgICAgICAgLy8gUmVwbGFjZSB0aGUgc3RvcmVkIHZhbHVlcyBvZiBkZWxldGVkIGl0ZW1zIHdpdGggYSBkdW1teSB2YWx1ZS4gVGhpcyBwcm92aWRlcyB0d28gYmVuZWZpdHM6IGl0IG1hcmtzIHRoaXMgaXRlbVxyXG4gICAgICAgIC8vIGFzIGFscmVhZHkgXCJyZW1vdmVkXCIgc28gd2Ugd29uJ3QgY2FsbCBiZWZvcmVSZW1vdmUgZm9yIGl0IGFnYWluLCBhbmQgaXQgZW5zdXJlcyB0aGF0IHRoZSBpdGVtIHdvbid0IG1hdGNoIHVwXHJcbiAgICAgICAgLy8gd2l0aCBhbiBhY3R1YWwgaXRlbSBpbiB0aGUgYXJyYXkgYW5kIGFwcGVhciBhcyBcInJldGFpbmVkXCIgb3IgXCJtb3ZlZFwiLlxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtc0ZvckJlZm9yZVJlbW92ZUNhbGxiYWNrcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbXNGb3JCZWZvcmVSZW1vdmVDYWxsYmFja3NbaV0pIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zRm9yQmVmb3JlUmVtb3ZlQ2FsbGJhY2tzW2ldLmFycmF5RW50cnkgPSBkZWxldGVkSXRlbUR1bW15VmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZpbmFsbHkgY2FsbCBhZnRlck1vdmUgYW5kIGFmdGVyQWRkIGNhbGxiYWNrc1xyXG4gICAgICAgIGNhbGxDYWxsYmFjayhvcHRpb25zWydhZnRlck1vdmUnXSwgaXRlbXNGb3JNb3ZlQ2FsbGJhY2tzKTtcclxuICAgICAgICBjYWxsQ2FsbGJhY2sob3B0aW9uc1snYWZ0ZXJBZGQnXSwgaXRlbXNGb3JBZnRlckFkZENhbGxiYWNrcyk7XHJcbiAgICB9XHJcbn0pKCk7XHJcblxyXG5rby5leHBvcnRTeW1ib2woJ3V0aWxzLnNldERvbU5vZGVDaGlsZHJlbkZyb21BcnJheU1hcHBpbmcnLCBrby51dGlscy5zZXREb21Ob2RlQ2hpbGRyZW5Gcm9tQXJyYXlNYXBwaW5nKTtcclxua28ubmF0aXZlVGVtcGxhdGVFbmdpbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzWydhbGxvd1RlbXBsYXRlUmV3cml0aW5nJ10gPSBmYWxzZTtcclxufVxyXG5cclxua28ubmF0aXZlVGVtcGxhdGVFbmdpbmUucHJvdG90eXBlID0gbmV3IGtvLnRlbXBsYXRlRW5naW5lKCk7XHJcbmtvLm5hdGl2ZVRlbXBsYXRlRW5naW5lLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGtvLm5hdGl2ZVRlbXBsYXRlRW5naW5lO1xyXG5rby5uYXRpdmVUZW1wbGF0ZUVuZ2luZS5wcm90b3R5cGVbJ3JlbmRlclRlbXBsYXRlU291cmNlJ10gPSBmdW5jdGlvbiAodGVtcGxhdGVTb3VyY2UsIGJpbmRpbmdDb250ZXh0LCBvcHRpb25zLCB0ZW1wbGF0ZURvY3VtZW50KSB7XHJcbiAgICB2YXIgdXNlTm9kZXNJZkF2YWlsYWJsZSA9ICEoa28udXRpbHMuaWVWZXJzaW9uIDwgOSksIC8vIElFPDkgY2xvbmVOb2RlIGRvZXNuJ3Qgd29yayBwcm9wZXJseVxyXG4gICAgICAgIHRlbXBsYXRlTm9kZXNGdW5jID0gdXNlTm9kZXNJZkF2YWlsYWJsZSA/IHRlbXBsYXRlU291cmNlWydub2RlcyddIDogbnVsbCxcclxuICAgICAgICB0ZW1wbGF0ZU5vZGVzID0gdGVtcGxhdGVOb2Rlc0Z1bmMgPyB0ZW1wbGF0ZVNvdXJjZVsnbm9kZXMnXSgpIDogbnVsbDtcclxuXHJcbiAgICBpZiAodGVtcGxhdGVOb2Rlcykge1xyXG4gICAgICAgIHJldHVybiBrby51dGlscy5tYWtlQXJyYXkodGVtcGxhdGVOb2Rlcy5jbG9uZU5vZGUodHJ1ZSkuY2hpbGROb2Rlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciB0ZW1wbGF0ZVRleHQgPSB0ZW1wbGF0ZVNvdXJjZVsndGV4dCddKCk7XHJcbiAgICAgICAgcmV0dXJuIGtvLnV0aWxzLnBhcnNlSHRtbEZyYWdtZW50KHRlbXBsYXRlVGV4dCwgdGVtcGxhdGVEb2N1bWVudCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5rby5uYXRpdmVUZW1wbGF0ZUVuZ2luZS5pbnN0YW5jZSA9IG5ldyBrby5uYXRpdmVUZW1wbGF0ZUVuZ2luZSgpO1xyXG5rby5zZXRUZW1wbGF0ZUVuZ2luZShrby5uYXRpdmVUZW1wbGF0ZUVuZ2luZS5pbnN0YW5jZSk7XHJcblxyXG5rby5leHBvcnRTeW1ib2woJ25hdGl2ZVRlbXBsYXRlRW5naW5lJywga28ubmF0aXZlVGVtcGxhdGVFbmdpbmUpO1xyXG4oZnVuY3Rpb24oKSB7XHJcbiAgICBrby5qcXVlcnlUbXBsVGVtcGxhdGVFbmdpbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gRGV0ZWN0IHdoaWNoIHZlcnNpb24gb2YganF1ZXJ5LXRtcGwgeW91J3JlIHVzaW5nLiBVbmZvcnR1bmF0ZWx5IGpxdWVyeS10bXBsXHJcbiAgICAgICAgLy8gZG9lc24ndCBleHBvc2UgYSB2ZXJzaW9uIG51bWJlciwgc28gd2UgaGF2ZSB0byBpbmZlciBpdC5cclxuICAgICAgICAvLyBOb3RlIHRoYXQgYXMgb2YgS25vY2tvdXQgMS4zLCB3ZSBvbmx5IHN1cHBvcnQgalF1ZXJ5LnRtcGwgMS4wLjBwcmUgYW5kIGxhdGVyLFxyXG4gICAgICAgIC8vIHdoaWNoIEtPIGludGVybmFsbHkgcmVmZXJzIHRvIGFzIHZlcnNpb24gXCIyXCIsIHNvIG9sZGVyIHZlcnNpb25zIGFyZSBubyBsb25nZXIgZGV0ZWN0ZWQuXHJcbiAgICAgICAgdmFyIGpRdWVyeVRtcGxWZXJzaW9uID0gdGhpcy5qUXVlcnlUbXBsVmVyc2lvbiA9IChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKCFqUXVlcnlJbnN0YW5jZSB8fCAhKGpRdWVyeUluc3RhbmNlWyd0bXBsJ10pKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIC8vIFNpbmNlIGl0IGV4cG9zZXMgbm8gb2ZmaWNpYWwgdmVyc2lvbiBudW1iZXIsIHdlIHVzZSBvdXIgb3duIG51bWJlcmluZyBzeXN0ZW0uIFRvIGJlIHVwZGF0ZWQgYXMganF1ZXJ5LXRtcGwgZXZvbHZlcy5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChqUXVlcnlJbnN0YW5jZVsndG1wbCddWyd0YWcnXVsndG1wbCddWydvcGVuJ10udG9TdHJpbmcoKS5pbmRleE9mKCdfXycpID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSAxLjAuMHByZSwgY3VzdG9tIHRhZ3Mgc2hvdWxkIGFwcGVuZCBtYXJrdXAgdG8gYW4gYXJyYXkgY2FsbGVkIFwiX19cIlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAyOyAvLyBGaW5hbCB2ZXJzaW9uIG9mIGpxdWVyeS50bXBsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2goZXgpIHsgLyogQXBwYXJlbnRseSBub3QgdGhlIHZlcnNpb24gd2Ugd2VyZSBsb29raW5nIGZvciAqLyB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gMTsgLy8gQW55IG9sZGVyIHZlcnNpb24gdGhhdCB3ZSBkb24ndCBzdXBwb3J0XHJcbiAgICAgICAgfSkoKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZW5zdXJlSGFzUmVmZXJlbmNlZEpRdWVyeVRlbXBsYXRlcygpIHtcclxuICAgICAgICAgICAgaWYgKGpRdWVyeVRtcGxWZXJzaW9uIDwgMilcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdXIgdmVyc2lvbiBvZiBqUXVlcnkudG1wbCBpcyB0b28gb2xkLiBQbGVhc2UgdXBncmFkZSB0byBqUXVlcnkudG1wbCAxLjAuMHByZSBvciBsYXRlci5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBleGVjdXRlVGVtcGxhdGUoY29tcGlsZWRUZW1wbGF0ZSwgZGF0YSwgalF1ZXJ5VGVtcGxhdGVPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBqUXVlcnlJbnN0YW5jZVsndG1wbCddKGNvbXBpbGVkVGVtcGxhdGUsIGRhdGEsIGpRdWVyeVRlbXBsYXRlT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzWydyZW5kZXJUZW1wbGF0ZVNvdXJjZSddID0gZnVuY3Rpb24odGVtcGxhdGVTb3VyY2UsIGJpbmRpbmdDb250ZXh0LCBvcHRpb25zLCB0ZW1wbGF0ZURvY3VtZW50KSB7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlRG9jdW1lbnQgPSB0ZW1wbGF0ZURvY3VtZW50IHx8IGRvY3VtZW50O1xyXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgICAgICAgICAgZW5zdXJlSGFzUmVmZXJlbmNlZEpRdWVyeVRlbXBsYXRlcygpO1xyXG5cclxuICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGhhdmUgc3RvcmVkIGEgcHJlY29tcGlsZWQgdmVyc2lvbiBvZiB0aGlzIHRlbXBsYXRlIChkb24ndCB3YW50IHRvIHJlcGFyc2Ugb24gZXZlcnkgcmVuZGVyKVxyXG4gICAgICAgICAgICB2YXIgcHJlY29tcGlsZWQgPSB0ZW1wbGF0ZVNvdXJjZVsnZGF0YSddKCdwcmVjb21waWxlZCcpO1xyXG4gICAgICAgICAgICBpZiAoIXByZWNvbXBpbGVkKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGVUZXh0ID0gdGVtcGxhdGVTb3VyY2VbJ3RleHQnXSgpIHx8IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAvLyBXcmFwIGluIFwid2l0aCgkd2hhdGV2ZXIua29CaW5kaW5nQ29udGV4dCkgeyAuLi4gfVwiXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVRleHQgPSBcInt7a29fd2l0aCAkaXRlbS5rb0JpbmRpbmdDb250ZXh0fX1cIiArIHRlbXBsYXRlVGV4dCArIFwie3sva29fd2l0aH19XCI7XHJcblxyXG4gICAgICAgICAgICAgICAgcHJlY29tcGlsZWQgPSBqUXVlcnlJbnN0YW5jZVsndGVtcGxhdGUnXShudWxsLCB0ZW1wbGF0ZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVTb3VyY2VbJ2RhdGEnXSgncHJlY29tcGlsZWQnLCBwcmVjb21waWxlZCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBkYXRhID0gW2JpbmRpbmdDb250ZXh0WyckZGF0YSddXTsgLy8gUHJld3JhcCB0aGUgZGF0YSBpbiBhbiBhcnJheSB0byBzdG9wIGpxdWVyeS50bXBsIGZyb20gdHJ5aW5nIHRvIHVud3JhcCBhbnkgYXJyYXlzXHJcbiAgICAgICAgICAgIHZhciBqUXVlcnlUZW1wbGF0ZU9wdGlvbnMgPSBqUXVlcnlJbnN0YW5jZVsnZXh0ZW5kJ10oeyAna29CaW5kaW5nQ29udGV4dCc6IGJpbmRpbmdDb250ZXh0IH0sIG9wdGlvbnNbJ3RlbXBsYXRlT3B0aW9ucyddKTtcclxuXHJcbiAgICAgICAgICAgIHZhciByZXN1bHROb2RlcyA9IGV4ZWN1dGVUZW1wbGF0ZShwcmVjb21waWxlZCwgZGF0YSwgalF1ZXJ5VGVtcGxhdGVPcHRpb25zKTtcclxuICAgICAgICAgICAgcmVzdWx0Tm9kZXNbJ2FwcGVuZFRvJ10odGVtcGxhdGVEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTsgLy8gVXNpbmcgXCJhcHBlbmRUb1wiIGZvcmNlcyBqUXVlcnkvalF1ZXJ5LnRtcGwgdG8gcGVyZm9ybSBuZWNlc3NhcnkgY2xlYW51cCB3b3JrXHJcblxyXG4gICAgICAgICAgICBqUXVlcnlJbnN0YW5jZVsnZnJhZ21lbnRzJ10gPSB7fTsgLy8gQ2xlYXIgalF1ZXJ5J3MgZnJhZ21lbnQgY2FjaGUgdG8gYXZvaWQgYSBtZW1vcnkgbGVhayBhZnRlciBhIGxhcmdlIG51bWJlciBvZiB0ZW1wbGF0ZSByZW5kZXJzXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHROb2RlcztcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzWydjcmVhdGVKYXZhU2NyaXB0RXZhbHVhdG9yQmxvY2snXSA9IGZ1bmN0aW9uKHNjcmlwdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJ7e2tvX2NvZGUgKChmdW5jdGlvbigpIHsgcmV0dXJuIFwiICsgc2NyaXB0ICsgXCIgfSkoKSkgfX1cIjtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzWydhZGRUZW1wbGF0ZSddID0gZnVuY3Rpb24odGVtcGxhdGVOYW1lLCB0ZW1wbGF0ZU1hcmt1cCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC53cml0ZShcIjxzY3JpcHQgdHlwZT0ndGV4dC9odG1sJyBpZD0nXCIgKyB0ZW1wbGF0ZU5hbWUgKyBcIic+XCIgKyB0ZW1wbGF0ZU1hcmt1cCArIFwiPFwiICsgXCIvc2NyaXB0PlwiKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoalF1ZXJ5VG1wbFZlcnNpb24gPiAwKSB7XHJcbiAgICAgICAgICAgIGpRdWVyeUluc3RhbmNlWyd0bXBsJ11bJ3RhZyddWydrb19jb2RlJ10gPSB7XHJcbiAgICAgICAgICAgICAgICBvcGVuOiBcIl9fLnB1c2goJDEgfHwgJycpO1wiXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGpRdWVyeUluc3RhbmNlWyd0bXBsJ11bJ3RhZyddWydrb193aXRoJ10gPSB7XHJcbiAgICAgICAgICAgICAgICBvcGVuOiBcIndpdGgoJDEpIHtcIixcclxuICAgICAgICAgICAgICAgIGNsb3NlOiBcIn0gXCJcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGtvLmpxdWVyeVRtcGxUZW1wbGF0ZUVuZ2luZS5wcm90b3R5cGUgPSBuZXcga28udGVtcGxhdGVFbmdpbmUoKTtcclxuICAgIGtvLmpxdWVyeVRtcGxUZW1wbGF0ZUVuZ2luZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBrby5qcXVlcnlUbXBsVGVtcGxhdGVFbmdpbmU7XHJcblxyXG4gICAgLy8gVXNlIHRoaXMgb25lIGJ5IGRlZmF1bHQgKm9ubHkgaWYganF1ZXJ5LnRtcGwgaXMgcmVmZXJlbmNlZCpcclxuICAgIHZhciBqcXVlcnlUbXBsVGVtcGxhdGVFbmdpbmVJbnN0YW5jZSA9IG5ldyBrby5qcXVlcnlUbXBsVGVtcGxhdGVFbmdpbmUoKTtcclxuICAgIGlmIChqcXVlcnlUbXBsVGVtcGxhdGVFbmdpbmVJbnN0YW5jZS5qUXVlcnlUbXBsVmVyc2lvbiA+IDApXHJcbiAgICAgICAga28uc2V0VGVtcGxhdGVFbmdpbmUoanF1ZXJ5VG1wbFRlbXBsYXRlRW5naW5lSW5zdGFuY2UpO1xyXG5cclxuICAgIGtvLmV4cG9ydFN5bWJvbCgnanF1ZXJ5VG1wbFRlbXBsYXRlRW5naW5lJywga28uanF1ZXJ5VG1wbFRlbXBsYXRlRW5naW5lKTtcclxufSkoKTtcclxufSkpO1xyXG59KCkpO1xyXG59KSgpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/moment.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/moment.js index 1c8ffd6521e..e9db0bd3c13 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/moment.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/moment.js @@ -3198,4 +3198,4 @@ return _moment; })); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vbWVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoibW9tZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qc1xuLy8hIHZlcnNpb24gOiAyLjEwLjZcbi8vISBhdXRob3JzIDogVGltIFdvb2QsIElza3JlbiBDaGVybmV2LCBNb21lbnQuanMgY29udHJpYnV0b3JzXG4vLyEgbGljZW5zZSA6IE1JVFxuLy8hIG1vbWVudGpzLmNvbVxuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIGdsb2JhbC5tb21lbnQgPSBmYWN0b3J5KClcbn0odGhpcywgZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgaG9va0NhbGxiYWNrO1xuXG4gICAgZnVuY3Rpb24gdXRpbHNfaG9va3NfX2hvb2tzICgpIHtcbiAgICAgICAgcmV0dXJuIGhvb2tDYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgZG9uZSB0byByZWdpc3RlciB0aGUgbWV0aG9kIGNhbGxlZCB3aXRoIG1vbWVudCgpXG4gICAgLy8gd2l0aG91dCBjcmVhdGluZyBjaXJjdWxhciBkZXBlbmRlbmNpZXMuXG4gICAgZnVuY3Rpb24gc2V0SG9va0NhbGxiYWNrIChjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IERhdGVdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKGZuKGFycltpXSwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZW5kKGEsIGIpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBiKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChiLCBpKSkge1xuICAgICAgICAgICAgICAgIGFbaV0gPSBiW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3RvU3RyaW5nJykpIHtcbiAgICAgICAgICAgIGEudG9TdHJpbmcgPSBiLnRvU3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3ZhbHVlT2YnKSkge1xuICAgICAgICAgICAgYS52YWx1ZU9mID0gYi52YWx1ZU9mO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlX3V0Y19fY3JlYXRlVVRDIChpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHkgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICB1bnVzZWRUb2tlbnMgICAgOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0ICAgICA6IFtdLFxuICAgICAgICAgICAgb3ZlcmZsb3cgICAgICAgIDogLTIsXG4gICAgICAgICAgICBjaGFyc0xlZnRPdmVyICAgOiAwLFxuICAgICAgICAgICAgbnVsbElucHV0ICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICBpbnZhbGlkTW9udGggICAgOiBudWxsLFxuICAgICAgICAgICAgaW52YWxpZEZvcm1hdCAgIDogZmFsc2UsXG4gICAgICAgICAgICB1c2VySW52YWxpZGF0ZWQgOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbyAgICAgICAgICAgICA6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZF9faXNWYWxpZChtKSB7XG4gICAgICAgIGlmIChtLl9pc1ZhbGlkID09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKTtcbiAgICAgICAgICAgIG0uX2lzVmFsaWQgPSAhaXNOYU4obS5fZC5nZXRUaW1lKCkpICYmXG4gICAgICAgICAgICAgICAgZmxhZ3Mub3ZlcmZsb3cgPCAwICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmVtcHR5ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRNb250aCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkV2Vla2RheSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5udWxsSW5wdXQgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy51c2VySW52YWxpZGF0ZWQ7XG5cbiAgICAgICAgICAgIGlmIChtLl9zdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBtLl9pc1ZhbGlkID0gbS5faXNWYWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5jaGFyc0xlZnRPdmVyID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLnVudXNlZFRva2Vucy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYmlnSG91ciA9PT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9pc1ZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkX19jcmVhdGVJbnZhbGlkIChmbGFncykge1xuICAgICAgICB2YXIgbSA9IGNyZWF0ZV91dGNfX2NyZWF0ZVVUQyhOYU4pO1xuICAgICAgICBpZiAoZmxhZ3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZXh0ZW5kKGdldFBhcnNpbmdGbGFncyhtKSwgZmxhZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLnVzZXJJbnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICB2YXIgbW9tZW50UHJvcGVydGllcyA9IHV0aWxzX2hvb2tzX19ob29rcy5tb21lbnRQcm9wZXJ0aWVzID0gW107XG5cbiAgICBmdW5jdGlvbiBjb3B5Q29uZmlnKHRvLCBmcm9tKSB7XG4gICAgICAgIHZhciBpLCBwcm9wLCB2YWw7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBmcm9tLl9pc0FNb21lbnRPYmplY3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0by5faXNBTW9tZW50T2JqZWN0ID0gZnJvbS5faXNBTW9tZW50T2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZnJvbS5faSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRvLl9pID0gZnJvbS5faTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGZyb20uX2YgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0by5fZiA9IGZyb20uX2Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBmcm9tLl9sICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdG8uX2wgPSBmcm9tLl9sO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZnJvbS5fc3RyaWN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdG8uX3N0cmljdCA9IGZyb20uX3N0cmljdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGZyb20uX3R6bSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRvLl90em0gPSBmcm9tLl90em07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBmcm9tLl9pc1VUQyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRvLl9pc1VUQyA9IGZyb20uX2lzVVRDO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZnJvbS5fb2Zmc2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdG8uX29mZnNldCA9IGZyb20uX29mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGZyb20uX3BmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdG8uX3BmID0gZ2V0UGFyc2luZ0ZsYWdzKGZyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZnJvbS5fbG9jYWxlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdG8uX2xvY2FsZSA9IGZyb20uX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSBpbiBtb21lbnRQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgcHJvcCA9IG1vbWVudFByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgdmFsID0gZnJvbVtwcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cblxuICAgIHZhciB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgICAvLyBNb21lbnQgcHJvdG90eXBlIG9iamVjdFxuICAgIGZ1bmN0aW9uIE1vbWVudChjb25maWcpIHtcbiAgICAgICAgY29weUNvbmZpZyh0aGlzLCBjb25maWcpO1xuICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoY29uZmlnLl9kICE9IG51bGwgPyBjb25maWcuX2QuZ2V0VGltZSgpIDogTmFOKTtcbiAgICAgICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wIGluIGNhc2UgdXBkYXRlT2Zmc2V0IGNyZWF0ZXMgbmV3IG1vbWVudFxuICAgICAgICAvLyBvYmplY3RzLlxuICAgICAgICBpZiAodXBkYXRlSW5Qcm9ncmVzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgdXRpbHNfaG9va3NfX2hvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50IChvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIE1vbWVudCB8fCAob2JqICE9IG51bGwgJiYgb2JqLl9pc0FNb21lbnRPYmplY3QgIT0gbnVsbCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IgKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSW50KGFyZ3VtZW50Rm9yQ29lcmNpb24pIHtcbiAgICAgICAgdmFyIGNvZXJjZWROdW1iZXIgPSArYXJndW1lbnRGb3JDb2VyY2lvbixcbiAgICAgICAgICAgIHZhbHVlID0gMDtcblxuICAgICAgICBpZiAoY29lcmNlZE51bWJlciAhPT0gMCAmJiBpc0Zpbml0ZShjb2VyY2VkTnVtYmVyKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBhYnNGbG9vcihjb2VyY2VkTnVtYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSkpIHtcbiAgICAgICAgICAgICAgICBkaWZmcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaWZmcyArIGxlbmd0aERpZmY7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKCkge1xuICAgIH1cblxuICAgIHZhciBsb2NhbGVzID0ge307XG4gICAgdmFyIGdsb2JhbExvY2FsZTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsIGosIG5leHQsIGxvY2FsZSwgc3BsaXQ7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBuYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNwbGl0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2ldKS5zcGxpdCgnLScpO1xuICAgICAgICAgICAgaiA9IHNwbGl0Lmxlbmd0aDtcbiAgICAgICAgICAgIG5leHQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaSArIDFdKTtcbiAgICAgICAgICAgIG5leHQgPSBuZXh0ID8gbmV4dC5zcGxpdCgnLScpIDogbnVsbDtcbiAgICAgICAgICAgIHdoaWxlIChqID4gMCkge1xuICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoc3BsaXQuc2xpY2UoMCwgaikuam9pbignLScpKTtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmIG5leHQubGVuZ3RoID49IGogJiYgY29tcGFyZUFycmF5cyhzcGxpdCwgbmV4dCwgdHJ1ZSkgPj0gaiAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy90aGUgbmV4dCBhcnJheSBpdGVtIGlzIGJldHRlciB0aGFuIGEgc2hhbGxvd2VyIHN1YnN0cmluZyBvZiB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgai0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWRMb2NhbGUobmFtZSkge1xuICAgICAgICB2YXIgb2xkTG9jYWxlID0gbnVsbDtcbiAgICAgICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gcmVnaXN0ZXIgYW5kIGxvYWQgYWxsIHRoZSBsb2NhbGVzIGluIE5vZGVcbiAgICAgICAgaWYgKCFsb2NhbGVzW25hbWVdICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgbW9kdWxlICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9sZExvY2FsZSA9IGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL2xvY2FsZS8nICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBkZWZpbmVMb2NhbGUgY3VycmVudGx5IGFsc28gc2V0cyB0aGUgZ2xvYmFsIGxvY2FsZSwgd2VcbiAgICAgICAgICAgICAgICAvLyB3YW50IHRvIHVuZG8gdGhhdCBmb3IgbGF6eSBsb2FkZWQgbG9jYWxlc1xuICAgICAgICAgICAgICAgIGxvY2FsZV9sb2NhbGVzX19nZXRTZXRHbG9iYWxMb2NhbGUob2xkTG9jYWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2FkIGxvY2FsZSBhbmQgdGhlbiBzZXQgdGhlIGdsb2JhbCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBmdW5jdGlvbiBsb2NhbGVfbG9jYWxlc19fZ2V0U2V0R2xvYmFsTG9jYWxlIChrZXksIHZhbHVlcykge1xuICAgICAgICB2YXIgZGF0YTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZXMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGxvY2FsZV9sb2NhbGVzX19nZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkZWZpbmVMb2NhbGUoa2V5LCB2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGdsb2JhbExvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmluZUxvY2FsZSAobmFtZSwgdmFsdWVzKSB7XG4gICAgICAgIGlmICh2YWx1ZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbHVlcy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGVzW25hbWVdIHx8IG5ldyBMb2NhbGUoKTtcbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0uc2V0KHZhbHVlcyk7XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgbG9jYWxlX2xvY2FsZXNfX2dldFNldEdsb2JhbExvY2FsZShuYW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB1c2VmdWwgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGxvY2FsZSBkYXRhXG4gICAgZnVuY3Rpb24gbG9jYWxlX2xvY2FsZXNfX2dldExvY2FsZSAoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIHZhciBhbGlhc2VzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRVbml0QWxpYXMgKHVuaXQsIHNob3J0aGFuZCkge1xuICAgICAgICB2YXIgbG93ZXJDYXNlID0gdW5pdC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBhbGlhc2VzW2xvd2VyQ2FzZV0gPSBhbGlhc2VzW2xvd2VyQ2FzZSArICdzJ10gPSBhbGlhc2VzW3Nob3J0aGFuZF0gPSB1bml0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnID8gYWxpYXNlc1t1bml0c10gfHwgYWxpYXNlc1t1bml0cy50b0xvd2VyQ2FzZSgpXSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVPYmplY3RVbml0cyhpbnB1dE9iamVjdCkge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0ge30sXG4gICAgICAgICAgICBub3JtYWxpemVkUHJvcCxcbiAgICAgICAgICAgIHByb3A7XG5cbiAgICAgICAgZm9yIChwcm9wIGluIGlucHV0T2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChpbnB1dE9iamVjdCwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcCA9IG5vcm1hbGl6ZVVuaXRzKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkUHJvcCkge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkSW5wdXRbbm9ybWFsaXplZFByb3BdID0gaW5wdXRPYmplY3RbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRJbnB1dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0U2V0ICh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGdldF9zZXRfX3NldCh0aGlzLCB1bml0LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdXRpbHNfaG9va3NfX2hvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRfc2V0X19nZXQodGhpcywgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0X3NldF9fZ2V0IChtb20sIHVuaXQpIHtcbiAgICAgICAgcmV0dXJuIG1vbS5fZFsnZ2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldF9zZXRfX3NldCAobW9tLCB1bml0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXQgKHVuaXRzLCB2YWx1ZSkge1xuICAgICAgICB2YXIgdW5pdDtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGZvciAodW5pdCBpbiB1bml0cykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0KHVuaXQsIHVuaXRzW3VuaXRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzW3VuaXRzXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gemVyb0ZpbGwobnVtYmVyLCB0YXJnZXRMZW5ndGgsIGZvcmNlU2lnbikge1xuICAgICAgICB2YXIgYWJzTnVtYmVyID0gJycgKyBNYXRoLmFicyhudW1iZXIpLFxuICAgICAgICAgICAgemVyb3NUb0ZpbGwgPSB0YXJnZXRMZW5ndGggLSBhYnNOdW1iZXIubGVuZ3RoLFxuICAgICAgICAgICAgc2lnbiA9IG51bWJlciA+PSAwO1xuICAgICAgICByZXR1cm4gKHNpZ24gPyAoZm9yY2VTaWduID8gJysnIDogJycpIDogJy0nKSArXG4gICAgICAgICAgICBNYXRoLnBvdygxMCwgTWF0aC5tYXgoMCwgemVyb3NUb0ZpbGwpKS50b1N0cmluZygpLnN1YnN0cigxKSArIGFic051bWJlcjtcbiAgICB9XG5cbiAgICB2YXIgZm9ybWF0dGluZ1Rva2VucyA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRfFlZWVlZWXxZWVlZWXxZWVlZfFlZfGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2c7XG5cbiAgICB2YXIgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZztcblxuICAgIHZhciBmb3JtYXRGdW5jdGlvbnMgPSB7fTtcblxuICAgIHZhciBmb3JtYXRUb2tlbkZ1bmN0aW9ucyA9IHt9O1xuXG4gICAgLy8gdG9rZW46ICAgICdNJ1xuICAgIC8vIHBhZGRlZDogICBbJ01NJywgMl1cbiAgICAvLyBvcmRpbmFsOiAgJ01vJ1xuICAgIC8vIGNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7IHRoaXMubW9udGgoKSArIDEgfVxuICAgIGZ1bmN0aW9uIGFkZEZvcm1hdFRva2VuICh0b2tlbiwgcGFkZGVkLCBvcmRpbmFsLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZnVuYyA9IGNhbGxiYWNrO1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tjYWxsYmFja10oKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWRkZWQpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3BhZGRlZFswXV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHplcm9GaWxsKGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgcGFkZGVkWzFdLCBwYWRkZWRbMl0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3JkaW5hbCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbb3JkaW5hbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwoZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0b2tlbik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQubWF0Y2goL1xcW1tcXHNcXFNdLykpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXFxcL2csICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIHZhciBhcnJheSA9IGZvcm1hdC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSwgaSwgbGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhhcnJheVtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG1vbSkge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9ICcnO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGFycmF5W2ldIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBhcnJheVtpXS5jYWxsKG1vbSwgZm9ybWF0KSA6IGFycmF5W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBmb3JtYXQgZGF0ZSB1c2luZyBuYXRpdmUgZGF0ZSBvYmplY3RcbiAgICBmdW5jdGlvbiBmb3JtYXRNb21lbnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBtLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZXhwYW5kRm9ybWF0KGZvcm1hdCwgbS5sb2NhbGVEYXRhKCkpO1xuICAgICAgICBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XSA9IGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdIHx8IG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpO1xuXG4gICAgICAgIHJldHVybiBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XShtKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHBhbmRGb3JtYXQoZm9ybWF0LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGkgPSA1O1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyhpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5sb25nRGF0ZUZvcm1hdChpbnB1dCkgfHwgaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBsb2NhbEZvcm1hdHRpbmdUb2tlbnMudGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShsb2NhbEZvcm1hdHRpbmdUb2tlbnMsIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2Vucyk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoMSAgICAgICAgID0gL1xcZC87ICAgICAgICAgICAgLy8gICAgICAgMCAtIDlcbiAgICB2YXIgbWF0Y2gyICAgICAgICAgPSAvXFxkXFxkLzsgICAgICAgICAgLy8gICAgICAwMCAtIDk5XG4gICAgdmFyIG1hdGNoMyAgICAgICAgID0gL1xcZHszfS87ICAgICAgICAgLy8gICAgIDAwMCAtIDk5OVxuICAgIHZhciBtYXRjaDQgICAgICAgICA9IC9cXGR7NH0vOyAgICAgICAgIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgdmFyIG1hdGNoNiAgICAgICAgID0gL1srLV0/XFxkezZ9LzsgICAgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgIHZhciBtYXRjaDF0bzIgICAgICA9IC9cXGRcXGQ/LzsgICAgICAgICAvLyAgICAgICAwIC0gOTlcbiAgICB2YXIgbWF0Y2gxdG8zICAgICAgPSAvXFxkezEsM30vOyAgICAgICAvLyAgICAgICAwIC0gOTk5XG4gICAgdmFyIG1hdGNoMXRvNCAgICAgID0gL1xcZHsxLDR9LzsgICAgICAgLy8gICAgICAgMCAtIDk5OTlcbiAgICB2YXIgbWF0Y2gxdG82ICAgICAgPSAvWystXT9cXGR7MSw2fS87ICAvLyAtOTk5OTk5IC0gOTk5OTk5XG5cbiAgICB2YXIgbWF0Y2hVbnNpZ25lZCAgPSAvXFxkKy87ICAgICAgICAgICAvLyAgICAgICAwIC0gaW5mXG4gICAgdmFyIG1hdGNoU2lnbmVkICAgID0gL1srLV0/XFxkKy87ICAgICAgLy8gICAgLWluZiAtIGluZlxuXG4gICAgdmFyIG1hdGNoT2Zmc2V0ICAgID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpOyAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcblxuICAgIHZhciBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy87IC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG5cbiAgICAvLyBhbnkgd29yZCAob3IgdHdvKSBjaGFyYWN0ZXJzIG9yIG51bWJlcnMgaW5jbHVkaW5nIHR3by90aHJlZSB3b3JkIG1vbnRoIGluIGFyYWJpYy5cbiAgICB2YXIgbWF0Y2hXb3JkID0gL1swLTldKlsnYS16XFx1MDBBMC1cXHUwNUZGXFx1MDcwMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSt8W1xcdTA2MDAtXFx1MDZGRlxcL10rKFxccyo/W1xcdTA2MDAtXFx1MDZGRl0rKXsxLDJ9L2k7XG5cbiAgICB2YXIgcmVnZXhlcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbiAoc3RoKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yMzI1XG4gICAgICAgIHJldHVybiB0eXBlb2Ygc3RoID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3RoKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4gKHRva2VuLCByZWdleCwgc3RyaWN0UmVnZXgpIHtcbiAgICAgICAgcmVnZXhlc1t0b2tlbl0gPSBpc0Z1bmN0aW9uKHJlZ2V4KSA/IHJlZ2V4IDogZnVuY3Rpb24gKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gKGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4KSA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuICh0b2tlbiwgY29uZmlnKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcChyZWdleGVzLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHVuZXNjYXBlRm9ybWF0KHRva2VuKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVnZXhlc1t0b2tlbl0oY29uZmlnLl9zdHJpY3QsIGNvbmZpZy5fbG9jYWxlKTtcbiAgICB9XG5cbiAgICAvLyBDb2RlIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTYxNDkzL2lzLXRoZXJlLWEtcmVnZXhwLWVzY2FwZS1mdW5jdGlvbi1pbi1qYXZhc2NyaXB0XG4gICAgZnVuY3Rpb24gdW5lc2NhcGVGb3JtYXQocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKCdcXFxcJywgJycpLnJlcGxhY2UoL1xcXFwoXFxbKXxcXFxcKFxcXSl8XFxbKFteXFxdXFxbXSopXFxdfFxcXFwoLikvZywgZnVuY3Rpb24gKG1hdGNoZWQsIHAxLCBwMiwgcDMsIHA0KSB7XG4gICAgICAgICAgICByZXR1cm4gcDEgfHwgcDIgfHwgcDMgfHwgcDQ7XG4gICAgICAgIH0pLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFBhcnNlVG9rZW4gKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgaSwgZnVuYyA9IGNhbGxiYWNrO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdG9rZW4gPSBbdG9rZW5dO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2VuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuICh0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgY29uZmlnLl93ID0gY29uZmlnLl93IHx8IHt9O1xuICAgICAgICAgICAgY2FsbGJhY2soaW5wdXQsIGNvbmZpZy5fdywgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBpbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsICYmIGhhc093blByb3AodG9rZW5zLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbl0oaW5wdXQsIGNvbmZpZy5fYSwgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgWUVBUiA9IDA7XG4gICAgdmFyIE1PTlRIID0gMTtcbiAgICB2YXIgREFURSA9IDI7XG4gICAgdmFyIEhPVVIgPSAzO1xuICAgIHZhciBNSU5VVEUgPSA0O1xuICAgIHZhciBTRUNPTkQgPSA1O1xuICAgIHZhciBNSUxMSVNFQ09ORCA9IDY7XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGggKyAxLCAwKSkuZ2V0VVRDRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNJywgWydNTScsIDJdLCAnTW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRoKCkgKyAxO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtb250aCcsICdNJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgICAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsICAgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTScsICBtYXRjaFdvcmQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBtYXRjaFdvcmQpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ00nLCAnTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSB0b0ludChpbnB1dCkgLSAxO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ01NTScsICdNTU1NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1vbnRoID0gY29uZmlnLl9sb2NhbGUubW9udGhzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGEgbW9udGggbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkLlxuICAgICAgICBpZiAobW9udGggIT0gbnVsbCkge1xuICAgICAgICAgICAgYXJyYXlbTU9OVEhdID0gbW9udGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkTW9udGggPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNb250aHMgPSAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoJ18nKTtcbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMgKG0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1ttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQgPSAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzU2hvcnQgKG0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0W20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzUGFyc2UgKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlX3V0Y19fY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsICdpJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoJ14nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdHJpY3QgJiYgIXRoaXMuX21vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPSAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKSArICd8XicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnTU1NTScgJiYgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnTU1NJyAmJiB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX21vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc2V0TW9udGggKG1vbSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIGRheU9mTW9udGg7XG5cbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIG91dCBvZiBoZXJlIVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgIC8vIFRPRE86IEFub3RoZXIgc2lsZW50IGZhaWx1cmU/XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXlPZk1vbnRoID0gTWF0aC5taW4obW9tLmRhdGUoKSwgZGF5c0luTW9udGgobW9tLnllYXIoKSwgdmFsdWUpKTtcbiAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArICdNb250aCddKHZhbHVlLCBkYXlPZk1vbnRoKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCAodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgIHV0aWxzX2hvb2tzX19ob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRfc2V0X19nZXQodGhpcywgJ01vbnRoJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXlzSW5Nb250aCAoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93IChtKSB7XG4gICAgICAgIHZhciBvdmVyZmxvdztcbiAgICAgICAgdmFyIGEgPSBtLl9hO1xuXG4gICAgICAgIGlmIChhICYmIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9PT0gLTIpIHtcbiAgICAgICAgICAgIG92ZXJmbG93ID1cbiAgICAgICAgICAgICAgICBhW01PTlRIXSAgICAgICA8IDAgfHwgYVtNT05USF0gICAgICAgPiAxMSAgPyBNT05USCA6XG4gICAgICAgICAgICAgICAgYVtEQVRFXSAgICAgICAgPCAxIHx8IGFbREFURV0gICAgICAgID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pID8gREFURSA6XG4gICAgICAgICAgICAgICAgYVtIT1VSXSAgICAgICAgPCAwIHx8IGFbSE9VUl0gICAgICAgID4gMjQgfHwgKGFbSE9VUl0gPT09IDI0ICYmIChhW01JTlVURV0gIT09IDAgfHwgYVtTRUNPTkRdICE9PSAwIHx8IGFbTUlMTElTRUNPTkRdICE9PSAwKSkgPyBIT1VSIDpcbiAgICAgICAgICAgICAgICBhW01JTlVURV0gICAgICA8IDAgfHwgYVtNSU5VVEVdICAgICAgPiA1OSAgPyBNSU5VVEUgOlxuICAgICAgICAgICAgICAgIGFbU0VDT05EXSAgICAgIDwgMCB8fCBhW1NFQ09ORF0gICAgICA+IDU5ICA/IFNFQ09ORCA6XG4gICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gPCAwIHx8IGFbTUlMTElTRUNPTkRdID4gOTk5ID8gTUlMTElTRUNPTkQgOlxuICAgICAgICAgICAgICAgIC0xO1xuXG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd0RheU9mWWVhciAmJiAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSkpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IERBVEU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9IG92ZXJmbG93O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Fybihtc2cpIHtcbiAgICAgICAgaWYgKHV0aWxzX2hvb2tzX19ob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPT09IGZhbHNlICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogJyArIG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGUobXNnLCBmbikge1xuICAgICAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChmaXJzdFRpbWUpIHtcbiAgICAgICAgICAgICAgICB3YXJuKG1zZyArICdcXG4nICsgKG5ldyBFcnJvcigpKS5zdGFjayk7XG4gICAgICAgICAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgZm4pO1xuICAgIH1cblxuICAgIHZhciBkZXByZWNhdGlvbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCBtc2cpIHtcbiAgICAgICAgaWYgKCFkZXByZWNhdGlvbnNbbmFtZV0pIHtcbiAgICAgICAgICAgIHdhcm4obXNnKTtcbiAgICAgICAgICAgIGRlcHJlY2F0aW9uc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlsc19ob29rc19faG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG5cbiAgICB2YXIgZnJvbV9zdHJpbmdfX2lzb1JlZ2V4ID0gL15cXHMqKD86WystXVxcZHs2fXxcXGR7NH0pLSg/OihcXGRcXGQtXFxkXFxkKXwoV1xcZFxcZCQpfChXXFxkXFxkLVxcZCl8KFxcZFxcZFxcZCkpKChUfCApKFxcZFxcZCg6XFxkXFxkKDpcXGRcXGQoXFwuXFxkKyk/KT8pPyk/KFtcXCtcXC1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLztcblxuICAgIHZhciBpc29EYXRlcyA9IFtcbiAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGR7Mn0tXFxkezJ9L10sXG4gICAgICAgIFsnWVlZWS1NTS1ERCcsIC9cXGR7NH0tXFxkezJ9LVxcZHsyfS9dLFxuICAgICAgICBbJ0dHR0ctW1ddV1ctRScsIC9cXGR7NH0tV1xcZHsyfS1cXGQvXSxcbiAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkezJ9L10sXG4gICAgICAgIFsnWVlZWS1EREQnLCAvXFxkezR9LVxcZHszfS9dXG4gICAgXTtcblxuICAgIC8vIGlzbyB0aW1lIGZvcm1hdHMgYW5kIHJlZ2V4ZXNcbiAgICB2YXIgaXNvVGltZXMgPSBbXG4gICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC8oVHwgKVxcZFxcZDpcXGRcXGQ6XFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICBbJ0hIOm1tOnNzJywgLyhUfCApXFxkXFxkOlxcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgWydISDptbScsIC8oVHwgKVxcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgWydISCcsIC8oVHwgKVxcZFxcZC9dXG4gICAgXTtcblxuICAgIHZhciBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKFxcLT9cXGQrKS9pO1xuXG4gICAgLy8gZGF0ZSBmcm9tIGlzbyBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSVNPKGNvbmZpZykge1xuICAgICAgICB2YXIgaSwgbCxcbiAgICAgICAgICAgIHN0cmluZyA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIG1hdGNoID0gZnJvbV9zdHJpbmdfX2lzb1JlZ2V4LmV4ZWMoc3RyaW5nKTtcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmlzbyA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvRGF0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzb0RhdGVzW2ldWzFdLmV4ZWMoc3RyaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2YgPSBpc29EYXRlc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb1RpbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29UaW1lc1tpXVsxXS5leGVjKHN0cmluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hbNl0gc2hvdWxkIGJlICdUJyBvciBzcGFjZVxuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2YgKz0gKG1hdGNoWzZdIHx8ICcgJykgKyBpc29UaW1lc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0cmluZy5tYXRjaChtYXRjaE9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2YgKz0gJ1onO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gaXNvIGZvcm1hdCBvciBmYWxsYmFja1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gYXNwTmV0SnNvblJlZ2V4LmV4ZWMoY29uZmlnLl9pKTtcblxuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgICAgIHV0aWxzX2hvb2tzX19ob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHNfaG9va3NfX2hvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUuIFRoaXMgaXMgJyArXG4gICAgICAgICdkaXNjb3VyYWdlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHVwY29taW5nIG1ham9yICcgK1xuICAgICAgICAncmVsZWFzZS4gUGxlYXNlIHJlZmVyIHRvICcgK1xuICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzE0MDcgZm9yIG1vcmUgaW5mby4nLFxuICAgICAgICBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShjb25maWcuX2kgKyAoY29uZmlnLl91c2VVVEMgPyAnIFVUQycgOiAnJykpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURhdGUgKHksIG0sIGQsIGgsIE0sIHMsIG1zKSB7XG4gICAgICAgIC8vY2FuJ3QganVzdCBhcHBseSgpIHRvIGNyZWF0ZSBhIGRhdGU6XG4gICAgICAgIC8vaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xODEzNDgvaW5zdGFudGlhdGluZy1hLWphdmFzY3JpcHQtb2JqZWN0LWJ5LWNhbGxpbmctcHJvdG90eXBlLWNvbnN0cnVjdG9yLWFwcGx5XG4gICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpO1xuXG4gICAgICAgIC8vdGhlIGRhdGUgY29uc3RydWN0b3IgZG9lc24ndCBhY2NlcHQgeWVhcnMgPCAxOTcwXG4gICAgICAgIGlmICh5IDwgMTk3MCkge1xuICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVENEYXRlICh5KSB7XG4gICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIGlmICh5IDwgMTk3MCkge1xuICAgICAgICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZJywgICA0XSwgICAgICAgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgIDVdLCAgICAgICAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVlZJywgNiwgdHJ1ZV0sIDAsICd5ZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3llYXInLCAneScpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWScsICAgICAgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZJywgICAgIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZJywgICBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCAgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydZWVlZWScsICdZWVlZWVknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbignWVlZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBpbnB1dC5sZW5ndGggPT09IDIgPyB1dGlsc19ob29rc19faG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpIDogdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9IHV0aWxzX2hvb2tzX19ob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBkYXlzSW5ZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIoeWVhcikgPyAzNjYgOiAzNjU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMCkgfHwgeWVhciAlIDQwMCA9PT0gMDtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgdXRpbHNfaG9va3NfX2hvb2tzLnBhcnNlVHdvRGlnaXRZZWFyID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0b0ludChpbnB1dCkgKyAodG9JbnQoaW5wdXQpID4gNjggPyAxOTAwIDogMjAwMCk7XG4gICAgfTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRZZWFyID0gbWFrZUdldFNldCgnRnVsbFllYXInLCBmYWxzZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyICgpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCd3JywgWyd3dycsIDJdLCAnd28nLCAnd2VlaycpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdXJywgWydXVycsIDJdLCAnV28nLCAnaXNvV2VlaycpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrJywgJ3cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWsnLCAnVycpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigndycsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdXVycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsndycsICd3dycsICdXJywgJ1dXJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAxKV0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBmaXJzdERheU9mV2VlayAgICAgICAwID0gc3VuLCA2ID0gc2F0XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgdGhlIGRheSBvZiB0aGUgd2VlayB0aGF0IHN0YXJ0cyB0aGUgd2Vla1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICh1c3VhbGx5IHN1bmRheSBvciBtb25kYXkpXG4gICAgLy8gZmlyc3REYXlPZldlZWtPZlllYXIgMCA9IHN1biwgNiA9IHNhdFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCB3ZWVrIGlzIHRoZSB3ZWVrIHRoYXQgY29udGFpbnMgdGhlIGZpcnN0XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgb2YgdGhpcyBkYXkgb2YgdGhlIHdlZWtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAoZWcuIElTTyB3ZWVrcyB1c2UgdGh1cnNkYXkgKDQpKVxuICAgIGZ1bmN0aW9uIHdlZWtPZlllYXIobW9tLCBmaXJzdERheU9mV2VlaywgZmlyc3REYXlPZldlZWtPZlllYXIpIHtcbiAgICAgICAgdmFyIGVuZCA9IGZpcnN0RGF5T2ZXZWVrT2ZZZWFyIC0gZmlyc3REYXlPZldlZWssXG4gICAgICAgICAgICBkYXlzVG9EYXlPZldlZWsgPSBmaXJzdERheU9mV2Vla09mWWVhciAtIG1vbS5kYXkoKSxcbiAgICAgICAgICAgIGFkanVzdGVkTW9tZW50O1xuXG5cbiAgICAgICAgaWYgKGRheXNUb0RheU9mV2VlayA+IGVuZCkge1xuICAgICAgICAgICAgZGF5c1RvRGF5T2ZXZWVrIC09IDc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF5c1RvRGF5T2ZXZWVrIDwgZW5kIC0gNykge1xuICAgICAgICAgICAgZGF5c1RvRGF5T2ZXZWVrICs9IDc7XG4gICAgICAgIH1cblxuICAgICAgICBhZGp1c3RlZE1vbWVudCA9IGxvY2FsX19jcmVhdGVMb2NhbChtb20pLmFkZChkYXlzVG9EYXlPZldlZWssICdkJyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiBNYXRoLmNlaWwoYWRqdXN0ZWRNb21lbnQuZGF5T2ZZZWFyKCkgLyA3KSxcbiAgICAgICAgICAgIHllYXI6IGFkanVzdGVkTW9tZW50LnllYXIoKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsgKG1vbSkge1xuICAgICAgICByZXR1cm4gd2Vla09mWWVhcihtb20sIHRoaXMuX3dlZWsuZG93LCB0aGlzLl93ZWVrLmRveSkud2VlaztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWsgPSB7XG4gICAgICAgIGRvdyA6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3kgOiA2ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZZZWFyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG95O1xuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWsgKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsgKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS53ZWVrO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF5T2ZZZWFyJywgJ0RERCcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignREREJywgIG1hdGNoMXRvMyk7XG4gICAgYWRkUmVnZXhUb2tlbignRERERCcsIG1hdGNoMyk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ0RERCcsICdEREREJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlI0NhbGN1bGF0aW5nX2FfZGF0ZV9naXZlbl90aGVfeWVhci4yQ193ZWVrX251bWJlcl9hbmRfd2Vla2RheVxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrcyh5ZWFyLCB3ZWVrLCB3ZWVrZGF5LCBmaXJzdERheU9mV2Vla09mWWVhciwgZmlyc3REYXlPZldlZWspIHtcbiAgICAgICAgdmFyIHdlZWsxSmFuID0gNiArIGZpcnN0RGF5T2ZXZWVrIC0gZmlyc3REYXlPZldlZWtPZlllYXIsIGphblggPSBjcmVhdGVVVENEYXRlKHllYXIsIDAsIDEgKyB3ZWVrMUphbiksIGQgPSBqYW5YLmdldFVUQ0RheSgpLCBkYXlPZlllYXI7XG4gICAgICAgIGlmIChkIDwgZmlyc3REYXlPZldlZWspIHtcbiAgICAgICAgICAgIGQgKz0gNztcbiAgICAgICAgfVxuXG4gICAgICAgIHdlZWtkYXkgPSB3ZWVrZGF5ICE9IG51bGwgPyAxICogd2Vla2RheSA6IGZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgICAgIGRheU9mWWVhciA9IDEgKyB3ZWVrMUphbiArIDcgKiAod2VlayAtIDEpIC0gZCArIHdlZWtkYXk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXI6IGRheU9mWWVhciA+IDAgPyB5ZWFyIDogeWVhciAtIDEsXG4gICAgICAgICAgICBkYXlPZlllYXI6IGRheU9mWWVhciA+IDAgPyAgZGF5T2ZZZWFyIDogZGF5c0luWWVhcih5ZWFyIC0gMSkgKyBkYXlPZlllYXJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZlllYXIgKGlucHV0KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXIgPSBNYXRoLnJvdW5kKCh0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykgLSB0aGlzLmNsb25lKCkuc3RhcnRPZigneWVhcicpKSAvIDg2NGU1KSArIDE7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gZGF5T2ZZZWFyIDogdGhpcy5hZGQoKGlucHV0IC0gZGF5T2ZZZWFyKSwgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDKSB7XG4gICAgICAgICAgICByZXR1cm4gW25vdy5nZXRVVENGdWxsWWVhcigpLCBub3cuZ2V0VVRDTW9udGgoKSwgbm93LmdldFVUQ0RhdGUoKV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtub3cuZ2V0RnVsbFllYXIoKSwgbm93LmdldE1vbnRoKCksIG5vdy5nZXREYXRlKCldO1xuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgYW4gYXJyYXkgdG8gYSBkYXRlLlxuICAgIC8vIHRoZSBhcnJheSBzaG91bGQgbWlycm9yIHRoZSBwYXJhbWV0ZXJzIGJlbG93XG4gICAgLy8gbm90ZTogYWxsIHZhbHVlcyBwYXN0IHRoZSB5ZWFyIGFyZSBvcHRpb25hbCBhbmQgd2lsbCBkZWZhdWx0IHRvIHRoZSBsb3dlc3QgcG9zc2libGUgdmFsdWUuXG4gICAgLy8gW3llYXIsIG1vbnRoLCBkYXkgLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUFycmF5IChjb25maWcpIHtcbiAgICAgICAgdmFyIGksIGRhdGUsIGlucHV0ID0gW10sIGN1cnJlbnREYXRlLCB5ZWFyVG9Vc2U7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudERhdGUgPSBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZyk7XG5cbiAgICAgICAgLy9jb21wdXRlIGRheSBvZiB0aGUgeWVhciBmcm9tIHdlZWtzIGFuZCB3ZWVrZGF5c1xuICAgICAgICBpZiAoY29uZmlnLl93ICYmIGNvbmZpZy5fYVtEQVRFXSA9PSBudWxsICYmIGNvbmZpZy5fYVtNT05USF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2lmIHRoZSBkYXkgb2YgdGhlIHllYXIgaXMgc2V0LCBmaWd1cmUgb3V0IHdoYXQgaXQgaXNcbiAgICAgICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyKSB7XG4gICAgICAgICAgICB5ZWFyVG9Vc2UgPSBkZWZhdWx0cyhjb25maWcuX2FbWUVBUl0sIGN1cnJlbnREYXRlW1lFQVJdKTtcblxuICAgICAgICAgICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyVG9Vc2UpKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93RGF5T2ZZZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoeWVhclRvVXNlLCAwLCBjb25maWcuX2RheU9mWWVhcik7XG4gICAgICAgICAgICBjb25maWcuX2FbTU9OVEhdID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgY29uZmlnLl9hW0RBVEVdID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgZGF0ZS5cbiAgICAgICAgLy8gKiBpZiBubyB5ZWFyLCBtb250aCwgZGF5IG9mIG1vbnRoIGFyZSBnaXZlbiwgZGVmYXVsdCB0byB0b2RheVxuICAgICAgICAvLyAqIGlmIGRheSBvZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBtb250aCBhbmQgeWVhclxuICAgICAgICAvLyAqIGlmIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG9ubHkgeWVhclxuICAgICAgICAvLyAqIGlmIHllYXIgaXMgZ2l2ZW4sIGRvbid0IGRlZmF1bHQgYW55dGhpbmdcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgJiYgY29uZmlnLl9hW2ldID09IG51bGw7ICsraSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSBjdXJyZW50RGF0ZVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFplcm8gb3V0IHdoYXRldmVyIHdhcyBub3QgZGVmYXVsdGVkLCBpbmNsdWRpbmcgdGltZVxuICAgICAgICBmb3IgKDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSAoY29uZmlnLl9hW2ldID09IG51bGwpID8gKGkgPT09IDIgPyAxIDogMCkgOiBjb25maWcuX2FbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgMjQ6MDA6MDAuMDAwXG4gICAgICAgIGlmIChjb25maWcuX2FbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbU0VDT05EXSA9PT0gMCAmJlxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtNSUxMSVNFQ09ORF0gPT09IDApIHtcbiAgICAgICAgICAgIGNvbmZpZy5fbmV4dERheSA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnLl9kID0gKGNvbmZpZy5fdXNlVVRDID8gY3JlYXRlVVRDRGF0ZSA6IGNyZWF0ZURhdGUpLmFwcGx5KG51bGwsIGlucHV0KTtcbiAgICAgICAgLy8gQXBwbHkgdGltZXpvbmUgb2Zmc2V0IGZyb20gaW5wdXQuIFRoZSBhY3R1YWwgdXRjT2Zmc2V0IGNhbiBiZSBjaGFuZ2VkXG4gICAgICAgIC8vIHdpdGggcGFyc2Vab25lLlxuICAgICAgICBpZiAoY29uZmlnLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX25leHREYXkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDI0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZykge1xuICAgICAgICB2YXIgdywgd2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95LCB0ZW1wO1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMody5HRywgY29uZmlnLl9hW1lFQVJdLCB3ZWVrT2ZZZWFyKGxvY2FsX19jcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyKTtcbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LlcsIDEpO1xuICAgICAgICAgICAgd2Vla2RheSA9IGRlZmF1bHRzKHcuRSwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMody5nZywgY29uZmlnLl9hW1lFQVJdLCB3ZWVrT2ZZZWFyKGxvY2FsX19jcmVhdGVMb2NhbCgpLCBkb3csIGRveSkueWVhcik7XG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody53LCAxKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IGRvdykge1xuICAgICAgICAgICAgICAgICAgICArK3dlZWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh3LmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGxvY2FsIHdlZWtkYXkgLS0gY291bnRpbmcgc3RhcnRzIGZyb20gYmVnaW5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gYmVnaW5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG95LCBkb3cpO1xuXG4gICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IHRlbXAueWVhcjtcbiAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICB9XG5cbiAgICB1dGlsc19ob29rc19faG9va3MuSVNPXzg2MDEgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmdcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZykge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gYW5vdGhlciBwYXJ0IG9mIHRoZSBjcmVhdGlvbiBmbG93IHRvIHByZXZlbnQgY2lyY3VsYXIgZGVwc1xuICAgICAgICBpZiAoY29uZmlnLl9mID09PSB1dGlsc19ob29rc19faG9va3MuSVNPXzg2MDEpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy5fYSA9IFtdO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IHRydWU7XG5cbiAgICAgICAgLy8gVGhpcyBhcnJheSBpcyB1c2VkIHRvIG1ha2UgYSBEYXRlLCBlaXRoZXIgd2l0aCBgbmV3IERhdGVgIG9yIGBEYXRlLlVUQ2BcbiAgICAgICAgdmFyIHN0cmluZyA9ICcnICsgY29uZmlnLl9pLFxuICAgICAgICAgICAgaSwgcGFyc2VkSW5wdXQsIHRva2VucywgdG9rZW4sIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDA7XG5cbiAgICAgICAgdG9rZW5zID0gZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgcGFyc2VkSW5wdXQgPSAoc3RyaW5nLm1hdGNoKGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSkgfHwgW10pWzBdO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkgKyBwYXJzZWRJbnB1dC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggKz0gcGFyc2VkSW5wdXQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZG9uJ3QgcGFyc2UgaWYgaXQncyBub3QgYSBrbm93biB0b2tlblxuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgcGFyc2VkSW5wdXQsIGNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWcuX3N0cmljdCAmJiAhcGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgcmVtYWluaW5nIHVucGFyc2VkIGlucHV0IGxlbmd0aCB0byB0aGUgc3RyaW5nXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmNoYXJzTGVmdE92ZXIgPSBzdHJpbmdMZW5ndGggLSB0b3RhbFBhcnNlZElucHV0TGVuZ3RoO1xuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIF8xMmggZmxhZyBpZiBob3VyIGlzIDw9IDEyXG4gICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKGNvbmZpZy5fbG9jYWxlLCBjb25maWcuX2FbSE9VUl0sIGNvbmZpZy5fbWVyaWRpZW0pO1xuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICBjaGVja092ZXJmbG93KGNvbmZpZyk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbUZpeFdyYXAgKGxvY2FsZSwgaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgdmFyIGlzUG07XG5cbiAgICAgICAgaWYgKG1lcmlkaWVtID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbGUubWVyaWRpZW1Ib3VyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubWVyaWRpZW1Ib3VyKGhvdXIsIG1lcmlkaWVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChsb2NhbGUuaXNQTSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFja1xuICAgICAgICAgICAgaXNQbSA9IGxvY2FsZS5pc1BNKG1lcmlkaWVtKTtcbiAgICAgICAgICAgIGlmIChpc1BtICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzUG0gJiYgaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuXG4gICAgICAgICAgICBzY29yZVRvQmVhdCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBjdXJyZW50U2NvcmU7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fZi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb25maWcuX2YubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSA9IDA7XG4gICAgICAgICAgICB0ZW1wQ29uZmlnID0gY29weUNvbmZpZyh7fSwgY29uZmlnKTtcbiAgICAgICAgICAgIGlmIChjb25maWcuX3VzZVVUQyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGVtcENvbmZpZy5fdXNlVVRDID0gY29uZmlnLl91c2VVVEM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ29uZmlnLl9mID0gY29uZmlnLl9mW2ldO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdCh0ZW1wQ29uZmlnKTtcblxuICAgICAgICAgICAgaWYgKCF2YWxpZF9faXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKHNjb3JlVG9CZWF0ID09IG51bGwgfHwgY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQpIHtcbiAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4dGVuZChjb25maWcsIGJlc3RNb21lbnQgfHwgdGVtcENvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbU9iamVjdChjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGkgPSBub3JtYWxpemVPYmplY3RVbml0cyhjb25maWcuX2kpO1xuICAgICAgICBjb25maWcuX2EgPSBbaS55ZWFyLCBpLm1vbnRoLCBpLmRheSB8fCBpLmRhdGUsIGkuaG91ciwgaS5taW51dGUsIGkuc2Vjb25kLCBpLm1pbGxpc2Vjb25kXTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnIChjb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhwcmVwYXJlQ29uZmlnKGNvbmZpZykpKTtcbiAgICAgICAgaWYgKHJlcy5fbmV4dERheSkge1xuICAgICAgICAgICAgLy8gQWRkaW5nIGlzIHNtYXJ0IGVub3VnaCBhcm91bmQgRFNUXG4gICAgICAgICAgICByZXMuYWRkKDEsICdkJyk7XG4gICAgICAgICAgICByZXMuX25leHREYXkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBhcmVDb25maWcgKGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBmb3JtYXQgPSBjb25maWcuX2Y7XG5cbiAgICAgICAgY29uZmlnLl9sb2NhbGUgPSBjb25maWcuX2xvY2FsZSB8fCBsb2NhbGVfbG9jYWxlc19fZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRfX2NyZWF0ZUludmFsaWQoe251bGxJbnB1dDogdHJ1ZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faSA9IGlucHV0ID0gY29uZmlnLl9sb2NhbGUucHJlcGFyc2UoaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTW9tZW50KGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhpbnB1dCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZm9ybWF0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gaW5wdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSW5wdXQoY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpbnB1dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCtpbnB1dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZyhjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2EgPSBtYXAoaW5wdXQuc2xpY2UoMCksIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZihpbnB1dCkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mKGlucHV0KSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1dGlsc19ob29rc19faG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsT3JVVEMgKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBpc1VUQykge1xuICAgICAgICB2YXIgYyA9IHt9O1xuXG4gICAgICAgIGlmICh0eXBlb2YobG9jYWxlKSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBsb2NhbGU7XG4gICAgICAgICAgICBsb2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsX19jcmVhdGVMb2NhbCAoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG90eXBlTWluID0gZGVwcmVjYXRlKFxuICAgICAgICAgJ21vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTU0OCcsXG4gICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgdmFyIG90aGVyID0gbG9jYWxfX2NyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgcmV0dXJuIG90aGVyIDwgdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgIH1cbiAgICAgKTtcblxuICAgIHZhciBwcm90b3R5cGVNYXggPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzE1NDgnLFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb3RoZXIgPSBsb2NhbF9fY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gUGljayBhIG1vbWVudCBtIGZyb20gbW9tZW50cyBzbyB0aGF0IG1bZm5dKG90aGVyKSBpcyB0cnVlIGZvciBhbGxcbiAgICAvLyBvdGhlci4gVGhpcyByZWxpZXMgb24gdGhlIGZ1bmN0aW9uIGZuIHRvIGJlIHRyYW5zaXRpdmUuXG4gICAgLy9cbiAgICAvLyBtb21lbnRzIHNob3VsZCBlaXRoZXIgYmUgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMgb3IgYW4gYXJyYXksIHdob3NlXG4gICAgLy8gZmlyc3QgZWxlbWVudCBpcyBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cy5cbiAgICBmdW5jdGlvbiBwaWNrQnkoZm4sIG1vbWVudHMpIHtcbiAgICAgICAgdmFyIHJlcywgaTtcbiAgICAgICAgaWYgKG1vbWVudHMubGVuZ3RoID09PSAxICYmIGlzQXJyYXkobW9tZW50c1swXSkpIHtcbiAgICAgICAgICAgIG1vbWVudHMgPSBtb21lbnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbW9tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbF9fY3JlYXRlTG9jYWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSBtb21lbnRzWzBdO1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbW9tZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKCFtb21lbnRzW2ldLmlzVmFsaWQoKSB8fCBtb21lbnRzW2ldW2ZuXShyZXMpKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gbW9tZW50c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSBbXS5zb3J0IGluc3RlYWQ/XG4gICAgZnVuY3Rpb24gbWluICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXggKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0FmdGVyJywgYXJncyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gRHVyYXRpb24gKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIGZvciBkYXRlQWRkUmVtb3ZlXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9ICttaWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgc2Vjb25kcyAqIDFlMyArIC8vIDEwMDBcbiAgICAgICAgICAgIG1pbnV0ZXMgKiA2ZTQgKyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGhvdXJzICogMzZlNTsgLy8gMTAwMCAqIDYwICogNjBcbiAgICAgICAgLy8gQmVjYXVzZSBvZiBkYXRlQWRkUmVtb3ZlIHRyZWF0cyAyNCBob3VycyBhcyBkaWZmZXJlbnQgZnJvbSBhXG4gICAgICAgIC8vIGRheSB3aGVuIHdvcmtpbmcgYXJvdW5kIERTVCwgd2UgbmVlZCB0byBzdG9yZSB0aGVtIHNlcGFyYXRlbHlcbiAgICAgICAgdGhpcy5fZGF5cyA9ICtkYXlzICtcbiAgICAgICAgICAgIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArXG4gICAgICAgICAgICBxdWFydGVycyAqIDMgK1xuICAgICAgICAgICAgeWVhcnMgKiAxMjtcblxuICAgICAgICB0aGlzLl9kYXRhID0ge307XG5cbiAgICAgICAgdGhpcy5fbG9jYWxlID0gbG9jYWxlX2xvY2FsZXNfX2dldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRHVyYXRpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb2Zmc2V0ICh0b2tlbiwgc2VwYXJhdG9yKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy51dGNPZmZzZXQoKTtcbiAgICAgICAgICAgIHZhciBzaWduID0gJysnO1xuICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHNpZ24gPSAnLSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2lnbiArIHplcm9GaWxsKH5+KG9mZnNldCAvIDYwKSwgMikgKyBzZXBhcmF0b3IgKyB6ZXJvRmlsbCh+fihvZmZzZXQpICUgNjAsIDIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgIG1hdGNoT2Zmc2V0KTtcbiAgICBhZGRSZWdleFRva2VuKCdaWicsIG1hdGNoT2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcoc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKChzdHJpbmcgfHwgJycpLm1hdGNoKG1hdGNoT2Zmc2V0KSB8fCBbXSk7XG4gICAgICAgIHZhciBjaHVuayAgID0gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdIHx8IFtdO1xuICAgICAgICB2YXIgcGFydHMgICA9IChjaHVuayArICcnKS5tYXRjaChjaHVua09mZnNldCkgfHwgWyctJywgMCwgMF07XG4gICAgICAgIHZhciBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gcGFydHNbMF0gPT09ICcrJyA/IG1pbnV0ZXMgOiAtbWludXRlcztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSBtb21lbnQgZnJvbSBpbnB1dCwgdGhhdCBpcyBsb2NhbC91dGMvem9uZSBlcXVpdmFsZW50IHRvIG1vZGVsLlxuICAgIGZ1bmN0aW9uIGNsb25lV2l0aE9mZnNldChpbnB1dCwgbW9kZWwpIHtcbiAgICAgICAgdmFyIHJlcywgZGlmZjtcbiAgICAgICAgaWYgKG1vZGVsLl9pc1VUQykge1xuICAgICAgICAgICAgcmVzID0gbW9kZWwuY2xvbmUoKTtcbiAgICAgICAgICAgIGRpZmYgPSAoaXNNb21lbnQoaW5wdXQpIHx8IGlzRGF0ZShpbnB1dCkgPyAraW5wdXQgOiArbG9jYWxfX2NyZWF0ZUxvY2FsKGlucHV0KSkgLSAoK3Jlcyk7XG4gICAgICAgICAgICAvLyBVc2UgbG93LWxldmVsIGFwaSwgYmVjYXVzZSB0aGlzIGZuIGlzIGxvdy1sZXZlbCBhcGkuXG4gICAgICAgICAgICByZXMuX2Quc2V0VGltZSgrcmVzLl9kICsgZGlmZik7XG4gICAgICAgICAgICB1dGlsc19ob29rc19faG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbF9fY3JlYXRlTG9jYWwoaW5wdXQpLmxvY2FsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXRlT2Zmc2V0IChtKSB7XG4gICAgICAgIC8vIE9uIEZpcmVmb3guMjQgRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIGEgZmxvYXRpbmcgcG9pbnQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L3B1bGwvMTg3MVxuICAgICAgICByZXR1cm4gLU1hdGgucm91bmQobS5fZC5nZXRUaW1lem9uZU9mZnNldCgpIC8gMTUpICogMTU7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICB1dGlsc19ob29rc19faG9va3MudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICAvLyBrZWVwTG9jYWxUaW1lID0gdHJ1ZSBtZWFucyBvbmx5IGNoYW5nZSB0aGUgdGltZXpvbmUsIHdpdGhvdXRcbiAgICAvLyBhZmZlY3RpbmcgdGhlIGxvY2FsIGhvdXIuIFNvIDU6MzE6MjYgKzAzMDAgLS1bdXRjT2Zmc2V0KDIsIHRydWUpXS0tPlxuICAgIC8vIDU6MzE6MjYgKzAyMDAgSXQgaXMgcG9zc2libGUgdGhhdCA1OjMxOjI2IGRvZXNuJ3QgZXhpc3Qgd2l0aCBvZmZzZXRcbiAgICAvLyArMDIwMCwgc28gd2UgYWRqdXN0IHRoZSB0aW1lIGFzIG5lZWRlZCwgdG8gYmUgdmFsaWQuXG4gICAgLy9cbiAgICAvLyBLZWVwaW5nIHRoZSB0aW1lIGFjdHVhbGx5IGFkZHMvc3VidHJhY3RzIChvbmUgaG91cilcbiAgICAvLyBmcm9tIHRoZSBhY3R1YWwgcmVwcmVzZW50ZWQgdGltZS4gVGhhdCBpcyB3aHkgd2UgY2FsbCB1cGRhdGVPZmZzZXRcbiAgICAvLyBhIHNlY29uZCB0aW1lLiBJbiBjYXNlIGl0IHdhbnRzIHVzIHRvIGNoYW5nZSB0aGUgb2Zmc2V0IGFnYWluXG4gICAgLy8gX2NoYW5nZUluUHJvZ3Jlc3MgPT0gdHJ1ZSBjYXNlLCB0aGVuIHdlIGhhdmUgdG8gYWRqdXN0LCBiZWNhdXNlXG4gICAgLy8gdGhlcmUgaXMgbm8gc3VjaCB0aW1lIGluIHRoZSBnaXZlbiB0aW1lem9uZS5cbiAgICBmdW5jdGlvbiBnZXRTZXRPZmZzZXQgKGlucHV0LCBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9vZmZzZXQgfHwgMCxcbiAgICAgICAgICAgIGxvY2FsQWRqdXN0O1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcoaW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2KSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dCAqIDYwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1VUQyAmJiBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxBZGp1c3QgPSBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gaW5wdXQ7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IHRydWU7XG4gICAgICAgICAgICBpZiAobG9jYWxBZGp1c3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGxvY2FsQWRqdXN0LCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWtlZXBMb2NhbFRpbWUgfHwgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICBhZGRfc3VidHJhY3RfX2FkZFN1YnRyYWN0KHRoaXMsIGNyZWF0ZV9fY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksIDEsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB1dGlsc19ob29rc19faG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/IG9mZnNldCA6IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRab25lIChpbnB1dCwga2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IC1pbnB1dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAtdGhpcy51dGNPZmZzZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvVVRDIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1VUQykge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoa2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VidHJhY3QoZ2V0RGF0ZU9mZnNldCh0aGlzKSwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCAoKSB7XG4gICAgICAgIGlmICh0aGlzLl90em0pIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2kgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldChvZmZzZXRGcm9tU3RyaW5nKHRoaXMuX2kpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNBbGlnbmVkSG91ck9mZnNldCAoaW5wdXQpIHtcbiAgICAgICAgaW5wdXQgPSBpbnB1dCA/IGxvY2FsX19jcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCkgfHxcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQgKCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2lzRFNUU2hpZnRlZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYyA9IHt9O1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICB2YXIgb3RoZXIgPSBjLl9pc1VUQyA/IGNyZWF0ZV91dGNfX2NyZWF0ZVVUQyhjLl9hKSA6IGxvY2FsX19jcmVhdGVMb2NhbChjLl9hKTtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9IHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAgICAgY29tcGFyZUFycmF5cyhjLl9hLCBvdGhlci50b0FycmF5KCkpID4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xvY2FsICgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9pc1VUQztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0Y09mZnNldCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0YyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyAmJiB0aGlzLl9vZmZzZXQgPT09IDA7XG4gICAgfVxuXG4gICAgdmFyIGFzcE5ldFJlZ2V4ID0gLyhcXC0pPyg/OihcXGQqKVxcLik/KFxcZCspXFw6KFxcZCspKD86XFw6KFxcZCspXFwuPyhcXGR7M30pPyk/LztcblxuICAgIC8vIGZyb20gaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9jbG9zdXJlX2dvb2dfZGF0ZV9kYXRlLmpzLnNvdXJjZS5odG1sXG4gICAgLy8gc29tZXdoYXQgbW9yZSBpbiBsaW5lIHdpdGggNC40LjMuMiAyMDA0IHNwZWMsIGJ1dCBhbGxvd3MgZGVjaW1hbCBhbnl3aGVyZVxuICAgIHZhciBjcmVhdGVfX2lzb1JlZ2V4ID0gL14oLSk/UCg/Oig/OihbMC05LC5dKilZKT8oPzooWzAtOSwuXSopTSk/KD86KFswLTksLl0qKUQpPyg/OlQoPzooWzAtOSwuXSopSCk/KD86KFswLTksLl0qKU0pPyg/OihbMC05LC5dKilTKT8pP3woWzAtOSwuXSopVykkLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZV9fY3JlYXRlRHVyYXRpb24gKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtcyA6IGlucHV0Ll9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICAgICAgZCAgOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNICA6IGlucHV0Ll9tb250aHNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbltrZXldID0gaW5wdXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLm1pbGxpc2Vjb25kcyA9IGlucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCEhKG1hdGNoID0gYXNwTmV0UmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gKG1hdGNoWzFdID09PSAnLScpID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeSAgOiAwLFxuICAgICAgICAgICAgICAgIGQgIDogdG9JbnQobWF0Y2hbREFURV0pICAgICAgICAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaCAgOiB0b0ludChtYXRjaFtIT1VSXSkgICAgICAgICogc2lnbixcbiAgICAgICAgICAgICAgICBtICA6IHRvSW50KG1hdGNoW01JTlVURV0pICAgICAgKiBzaWduLFxuICAgICAgICAgICAgICAgIHMgIDogdG9JbnQobWF0Y2hbU0VDT05EXSkgICAgICAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbXMgOiB0b0ludChtYXRjaFtNSUxMSVNFQ09ORF0pICogc2lnblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICghIShtYXRjaCA9IGNyZWF0ZV9faXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gKG1hdGNoWzFdID09PSAnLScpID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeSA6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNIDogcGFyc2VJc28obWF0Y2hbM10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQgOiBwYXJzZUlzbyhtYXRjaFs0XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgaCA6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBtIDogcGFyc2VJc28obWF0Y2hbNl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHMgOiBwYXJzZUlzbyhtYXRjaFs3XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdyA6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChkdXJhdGlvbiA9PSBudWxsKSB7Ly8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZHVyYXRpb24gPT09ICdvYmplY3QnICYmICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbikpIHtcbiAgICAgICAgICAgIGRpZmZSZXMgPSBtb21lbnRzRGlmZmVyZW5jZShsb2NhbF9fY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksIGxvY2FsX19jcmVhdGVMb2NhbChkdXJhdGlvbi50bykpO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgY3JlYXRlX19jcmVhdGVEdXJhdGlvbi5mbiA9IER1cmF0aW9uLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvIChpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHttaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMH07XG5cbiAgICAgICAgcmVzLm1vbnRocyA9IG90aGVyLm1vbnRoKCkgLSBiYXNlLm1vbnRoKCkgK1xuICAgICAgICAgICAgKG90aGVyLnllYXIoKSAtIGJhc2UueWVhcigpKSAqIDEyO1xuICAgICAgICBpZiAoYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpLmlzQWZ0ZXIob3RoZXIpKSB7XG4gICAgICAgICAgICAtLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gK290aGVyIC0gKyhiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJykpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUFkZGVyKGRpcmVjdGlvbiwgbmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2YXIgZHVyLCB0bXA7XG4gICAgICAgICAgICAvL2ludmVydCB0aGUgYXJndW1lbnRzLCBidXQgY29tcGxhaW4gYWJvdXQgaXRcbiAgICAgICAgICAgIGlmIChwZXJpb2QgIT09IG51bGwgJiYgIWlzTmFOKCtwZXJpb2QpKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKG5hbWUsICdtb21lbnQoKS4nICsgbmFtZSAgKyAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgKyBuYW1lICsgJyhudW1iZXIsIHBlcmlvZCkuJyk7XG4gICAgICAgICAgICAgICAgdG1wID0gdmFsOyB2YWwgPSBwZXJpb2Q7IHBlcmlvZCA9IHRtcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsID0gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgPyArdmFsIDogdmFsO1xuICAgICAgICAgICAgZHVyID0gY3JlYXRlX19jcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRfc3VidHJhY3RfX2FkZFN1YnRyYWN0KHRoaXMsIGR1ciwgZGlyZWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZF9zdWJ0cmFjdF9fYWRkU3VidHJhY3QgKG1vbSwgZHVyYXRpb24sIGlzQWRkaW5nLCB1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gZHVyYXRpb24uX2RheXMsXG4gICAgICAgICAgICBtb250aHMgPSBkdXJhdGlvbi5fbW9udGhzO1xuICAgICAgICB1cGRhdGVPZmZzZXQgPSB1cGRhdGVPZmZzZXQgPT0gbnVsbCA/IHRydWUgOiB1cGRhdGVPZmZzZXQ7XG5cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUoK21vbS5fZCArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5cykge1xuICAgICAgICAgICAgZ2V0X3NldF9fc2V0KG1vbSwgJ0RhdGUnLCBnZXRfc2V0X19nZXQobW9tLCAnRGF0ZScpICsgZGF5cyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldF9zZXRfX2dldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgICAgIHV0aWxzX2hvb2tzX19ob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkX3N1YnRyYWN0X19hZGQgICAgICA9IGNyZWF0ZUFkZGVyKDEsICdhZGQnKTtcbiAgICB2YXIgYWRkX3N1YnRyYWN0X19zdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIG1vbWVudF9jYWxlbmRhcl9fY2FsZW5kYXIgKHRpbWUsIGZvcm1hdHMpIHtcbiAgICAgICAgLy8gV2Ugd2FudCB0byBjb21wYXJlIHRoZSBzdGFydCBvZiB0b2RheSwgdnMgdGhpcy5cbiAgICAgICAgLy8gR2V0dGluZyBzdGFydC1vZi10b2RheSBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgbG9jYWwvdXRjL29mZnNldCBvciBub3QuXG4gICAgICAgIHZhciBub3cgPSB0aW1lIHx8IGxvY2FsX19jcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBkaWZmID0gdGhpcy5kaWZmKHNvZCwgJ2RheXMnLCB0cnVlKSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGRpZmYgPCAtNiA/ICdzYW1lRWxzZScgOlxuICAgICAgICAgICAgICAgIGRpZmYgPCAtMSA/ICdsYXN0V2VlaycgOlxuICAgICAgICAgICAgICAgIGRpZmYgPCAwID8gJ2xhc3REYXknIDpcbiAgICAgICAgICAgICAgICBkaWZmIDwgMSA/ICdzYW1lRGF5JyA6XG4gICAgICAgICAgICAgICAgZGlmZiA8IDIgPyAnbmV4dERheScgOlxuICAgICAgICAgICAgICAgIGRpZmYgPCA3ID8gJ25leHRXZWVrJyA6ICdzYW1lRWxzZSc7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChmb3JtYXRzICYmIGZvcm1hdHNbZm9ybWF0XSB8fCB0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihmb3JtYXQsIHRoaXMsIGxvY2FsX19jcmVhdGVMb2NhbChub3cpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xvbmUgKCkge1xuICAgICAgICByZXR1cm4gbmV3IE1vbWVudCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FmdGVyIChpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGlucHV0TXM7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModHlwZW9mIHVuaXRzICE9PSAndW5kZWZpbmVkJyA/IHVuaXRzIDogJ21pbGxpc2Vjb25kJyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgaW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGxvY2FsX19jcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgICAgICByZXR1cm4gK3RoaXMgPiAraW5wdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gaXNNb21lbnQoaW5wdXQpID8gK2lucHV0IDogK2xvY2FsX19jcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXRNcyA8ICt0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZSAoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBpbnB1dE1zO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHR5cGVvZiB1bml0cyAhPT0gJ3VuZGVmaW5lZCcgPyB1bml0cyA6ICdtaWxsaXNlY29uZCcpO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIGlucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBsb2NhbF9fY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICAgICAgcmV0dXJuICt0aGlzIDwgK2lucHV0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRNcyA9IGlzTW9tZW50KGlucHV0KSA/ICtpbnB1dCA6ICtsb2NhbF9fY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICAgICAgcmV0dXJuICt0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpIDwgaW5wdXRNcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmV0d2VlbiAoZnJvbSwgdG8sIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQWZ0ZXIoZnJvbSwgdW5pdHMpICYmIHRoaXMuaXNCZWZvcmUodG8sIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUgKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgaW5wdXRNcztcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyB8fCAnbWlsbGlzZWNvbmQnKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICBpbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogbG9jYWxfX2NyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgICAgIHJldHVybiArdGhpcyA9PT0gK2lucHV0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRNcyA9ICtsb2NhbF9fY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICAgICAgcmV0dXJuICsodGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpKSA8PSBpbnB1dE1zICYmIGlucHV0TXMgPD0gKyh0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYgKGlucHV0LCB1bml0cywgYXNGbG9hdCkge1xuICAgICAgICB2YXIgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyksXG4gICAgICAgICAgICB6b25lRGVsdGEgPSAodGhhdC51dGNPZmZzZXQoKSAtIHRoaXMudXRjT2Zmc2V0KCkpICogNmU0LFxuICAgICAgICAgICAgZGVsdGEsIG91dHB1dDtcblxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcblxuICAgICAgICBpZiAodW5pdHMgPT09ICd5ZWFyJyB8fCB1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3F1YXJ0ZXInKSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCk7XG4gICAgICAgICAgICBpZiAodW5pdHMgPT09ICdxdWFydGVyJykge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dCAvIDM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQgLyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbHRhID0gdGhpcyAtIHRoYXQ7XG4gICAgICAgICAgICBvdXRwdXQgPSB1bml0cyA9PT0gJ3NlY29uZCcgPyBkZWx0YSAvIDFlMyA6IC8vIDEwMDBcbiAgICAgICAgICAgICAgICB1bml0cyA9PT0gJ21pbnV0ZScgPyBkZWx0YSAvIDZlNCA6IC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgICAgIHVuaXRzID09PSAnaG91cicgPyBkZWx0YSAvIDM2ZTUgOiAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgICAgIHVuaXRzID09PSAnZGF5JyA/IChkZWx0YSAtIHpvbmVEZWx0YSkgLyA4NjRlNSA6IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgICAgICB1bml0cyA9PT0gJ3dlZWsnID8gKGRlbHRhIC0gem9uZURlbHRhKSAvIDYwNDhlNSA6IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICAgICAgZGVsdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZiAoYSwgYikge1xuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoKGIueWVhcigpIC0gYS55ZWFyKCkpICogMTIpICsgKGIubW9udGgoKSAtIGEubW9udGgoKSksXG4gICAgICAgICAgICAvLyBiIGlzIGluIChhbmNob3IgLSAxIG1vbnRoLCBhbmNob3IgKyAxIG1vbnRoKVxuICAgICAgICAgICAgYW5jaG9yID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiwgJ21vbnRocycpLFxuICAgICAgICAgICAgYW5jaG9yMiwgYWRqdXN0O1xuXG4gICAgICAgIGlmIChiIC0gYW5jaG9yIDwgMCkge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgLSAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvciAtIGFuY2hvcjIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgKyAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvcjIgLSBhbmNob3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIC0od2hvbGVNb250aERpZmYgKyBhZGp1c3QpO1xuICAgIH1cblxuICAgIHV0aWxzX2hvb2tzX19ob29rcy5kZWZhdWx0Rm9ybWF0ID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcblxuICAgIGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbWVudF9mb3JtYXRfX3RvSVNPU3RyaW5nICgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzLmNsb25lKCkudXRjKCk7XG4gICAgICAgIGlmICgwIDwgbS55ZWFyKCkgJiYgbS55ZWFyKCkgPD0gOTk5OSkge1xuICAgICAgICAgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykge1xuICAgICAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChtLCAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChtLCAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQgKGlucHV0U3RyaW5nKSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcgfHwgdXRpbHNfaG9va3NfX2hvb2tzLmRlZmF1bHRGb3JtYXQpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20gKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZV9fY3JlYXRlRHVyYXRpb24oe3RvOiB0aGlzLCBmcm9tOiB0aW1lfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tTm93ICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZyb20obG9jYWxfX2NyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvICh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVfX2NyZWF0ZUR1cmF0aW9uKHtmcm9tOiB0aGlzLCB0bzogdGltZX0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9Ob3cgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG8obG9jYWxfX2NyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZSAoa2V5KSB7XG4gICAgICAgIHZhciBuZXdMb2NhbGVEYXRhO1xuXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xvY2FsZURhdGEgPSBsb2NhbGVfbG9jYWxlc19fZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobmV3TG9jYWxlRGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9jYWxlID0gbmV3TG9jYWxlRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxhbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLicsXG4gICAgICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRGF0YSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZiAodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgc3dpdGNoIGludGVudGlvbmFsbHkgb21pdHMgYnJlYWsga2V5d29yZHNcbiAgICAgICAgLy8gdG8gdXRpbGl6ZSBmYWxsaW5nIHRocm91Z2ggdGhlIGNhc2VzLlxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgdGhpcy5tb250aCgwKTtcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIHRoaXMuZGF0ZSgxKTtcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgdGhpcy5ob3VycygwKTtcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICB0aGlzLm1pbnV0ZXMoMCk7XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICB0aGlzLnNlY29uZHMoMCk7XG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kcygwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlZWtzIGFyZSBhIHNwZWNpYWwgY2FzZVxuICAgICAgICBpZiAodW5pdHMgPT09ICd3ZWVrJykge1xuICAgICAgICAgICAgdGhpcy53ZWVrZGF5KDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ2lzb1dlZWsnKSB7XG4gICAgICAgICAgICB0aGlzLmlzb1dlZWtkYXkoMSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBxdWFydGVycyBhcmUgYWxzbyBzcGVjaWFsXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ3F1YXJ0ZXInKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoKE1hdGguZmxvb3IodGhpcy5tb250aCgpIC8gMykgKiAzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZE9mICh1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0T2YodW5pdHMpLmFkZCgxLCAodW5pdHMgPT09ICdpc29XZWVrJyA/ICd3ZWVrJyA6IHVuaXRzKSkuc3VidHJhY3QoMSwgJ21zJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9fdHlwZV9fdmFsdWVPZiAoKSB7XG4gICAgICAgIHJldHVybiArdGhpcy5fZCAtICgodGhpcy5fb2Zmc2V0IHx8IDApICogNjAwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXggKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigrdGhpcyAvIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRGF0ZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vZmZzZXQgPyBuZXcgRGF0ZSgrdGhpcykgOiB0aGlzLl9kO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkgKCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBbbS55ZWFyKCksIG0ubW9udGgoKSwgbS5kYXRlKCksIG0uaG91cigpLCBtLm1pbnV0ZSgpLCBtLnNlY29uZCgpLCBtLm1pbGxpc2Vjb25kKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0ICgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcnM6IG0ueWVhcigpLFxuICAgICAgICAgICAgbW9udGhzOiBtLm1vbnRoKCksXG4gICAgICAgICAgICBkYXRlOiBtLmRhdGUoKSxcbiAgICAgICAgICAgIGhvdXJzOiBtLmhvdXJzKCksXG4gICAgICAgICAgICBtaW51dGVzOiBtLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgIHNlY29uZHM6IG0uc2Vjb25kcygpLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzOiBtLm1pbGxpc2Vjb25kcygpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9tZW50X3ZhbGlkX19pc1ZhbGlkICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkX19pc1ZhbGlkKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNpbmdGbGFncyAoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0ICgpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhcnNpbmdGbGFncyh0aGlzKS5vdmVyZmxvdztcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ2dnJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnR0cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1llYXJGb3JtYXRUb2tlbiAodG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICAgICAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnZycsICAgICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0cnLCAgJ2lzb1dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHR0cnLCAnaXNvV2Vla1llYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnd2Vla1llYXInLCAnZ2cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWtZZWFyJywgJ0dHJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgICAgICBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignZycsICAgICAgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHJywgICAgIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdnZycsICAgICBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsICAgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2cnLCAgIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHRycsICBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZ2cnLCAgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydnZ2dnJywgJ2dnZ2dnJywgJ0dHR0cnLCAnR0dHR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDIpXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gdXRpbHNfaG9va3NfX2hvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIHdlZWtzSW5ZZWFyKHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKGxvY2FsX19jcmVhdGVMb2NhbChbeWVhciwgMTEsIDMxICsgZG93IC0gZG95XSksIGRvdywgZG95KS53ZWVrO1xuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFyIChpbnB1dCkge1xuICAgICAgICB2YXIgeWVhciA9IHdlZWtPZlllYXIodGhpcywgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LCB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3kpLnllYXI7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8geWVhciA6IHRoaXMuYWRkKChpbnB1dCAtIHllYXIpLCAneScpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWtZZWFyIChpbnB1dCkge1xuICAgICAgICB2YXIgeWVhciA9IHdlZWtPZlllYXIodGhpcywgMSwgNCkueWVhcjtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB5ZWFyIDogdGhpcy5hZGQoKGlucHV0IC0geWVhciksICd5Jyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJblllYXIgKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyICgpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdRJywgMCwgMCwgJ3F1YXJ0ZXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygncXVhcnRlcicsICdRJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdRJywgbWF0Y2gxKTtcbiAgICBhZGRQYXJzZVRva2VuKCdRJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSAodG9JbnQoaW5wdXQpIC0gMSkgKiAzO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0UXVhcnRlciAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyBNYXRoLmNlaWwoKHRoaXMubW9udGgoKSArIDEpIC8gMykgOiB0aGlzLm1vbnRoKChpbnB1dCAtIDEpICogMyArIHRoaXMubW9udGgoKSAlIDMpO1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdEJywgWydERCcsIDJdLCAnRG8nLCAnZGF0ZScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXRlJywgJ0QnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdERCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdEbycsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IGxvY2FsZS5fb3JkaW5hbFBhcnNlIDogbG9jYWxlLl9vcmRpbmFsUGFyc2VMZW5pZW50O1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0QnLCAnREQnXSwgREFURSk7XG4gICAgYWRkUGFyc2VUb2tlbignRG8nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W0RBVEVdID0gdG9JbnQoaW5wdXQubWF0Y2gobWF0Y2gxdG8yKVswXSwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldERheU9mTW9udGggPSBtYWtlR2V0U2V0KCdEYXRlJywgdHJ1ZSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF5JywgJ2QnKTtcbiAgICBhZGRVbml0QWxpYXMoJ3dlZWtkYXknLCAnZScpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2Vla2RheScsICdFJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdkJywgICAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdlJywgICAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdFJywgICAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdkZCcsICAgbWF0Y2hXb3JkKTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCAgbWF0Y2hXb3JkKTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGRkJywgbWF0Y2hXb3JkKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZGQnLCAnZGRkJywgJ2RkZGQnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcpIHtcbiAgICAgICAgdmFyIHdlZWtkYXkgPSBjb25maWcuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGdldCBhIHdlZWtkYXkgbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkXG4gICAgICAgIGlmICh3ZWVrZGF5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHdlZWsuZCA9IHdlZWtkYXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkV2Vla2RheSA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2QnLCAnZScsICdFJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmFOKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCA9IGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPSAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMgKG0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzW20uZGF5KCldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydCAobSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFttLmRheSgpXTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluID0gJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzTWluIChtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblttLmRheSgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1BhcnNlICh3ZWVrZGF5TmFtZSkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gdGhpcy5fd2Vla2RheXNQYXJzZSB8fCBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGxvY2FsX19jcmVhdGVMb2NhbChbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgICAgICByZWdleCA9ICdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykgKyAnfF4nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpICsgJ3xeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZXZWVrIChpbnB1dCkge1xuICAgICAgICB2YXIgZGF5ID0gdGhpcy5faXNVVEMgPyB0aGlzLl9kLmdldFVUQ0RheSgpIDogdGhpcy5fZC5nZXREYXkoKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrIChpbnB1dCkge1xuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrIChpbnB1dCkge1xuICAgICAgICAvLyBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vbWVudCNkYXkgZXhjZXB0XG4gICAgICAgIC8vIGFzIGEgZ2V0dGVyLCByZXR1cm5zIDcgaW5zdGVhZCBvZiAwICgxLTcgcmFuZ2UgaW5zdGVhZCBvZiAwLTYpXG4gICAgICAgIC8vIGFzIGEgc2V0dGVyLCBzdW5kYXkgc2hvdWxkIGJlbG9uZyB0byB0aGUgcHJldmlvdXMgd2Vlay5cbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB0aGlzLmRheSgpIHx8IDcgOiB0aGlzLmRheSh0aGlzLmRheSgpICUgNyA/IGlucHV0IDogaW5wdXQgLSA3KTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSCcsIFsnSEgnLCAyXSwgMCwgJ2hvdXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignaCcsIFsnaGgnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpICUgMTIgfHwgMTI7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSAodG9rZW4sIGxvd2VyY2FzZSkge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKHRoaXMuaG91cnMoKSwgdGhpcy5taW51dGVzKCksIGxvd2VyY2FzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lcmlkaWVtKCdhJywgdHJ1ZSk7XG4gICAgbWVyaWRpZW0oJ0EnLCBmYWxzZSk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2hvdXInLCAnaCcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgZnVuY3Rpb24gbWF0Y2hNZXJpZGllbSAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCAgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignQScsICBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdIJywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0hIJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2hoJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0gnLCAnSEgnXSwgSE9VUik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2EnLCAnQSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9pc1BtID0gY29uZmlnLl9sb2NhbGUuaXNQTShpbnB1dCk7XG4gICAgICAgIGNvbmZpZy5fbWVyaWRpZW0gPSBpbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaCcsICdoaCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTSAoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IFF1aXJrcyBNb2RlICYgSUU3IFN0YW5kYXJkcyBNb2RlIGRvIG5vdCBhbGxvdyBhY2Nlc3Npbmcgc3RyaW5ncyBsaWtlIGFycmF5c1xuICAgICAgICAvLyBVc2luZyBjaGFyQXQgc2hvdWxkIGJlIG1vcmUgY29tcGF0aWJsZS5cbiAgICAgICAgcmV0dXJuICgoaW5wdXQgKyAnJykudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkgPT09ICdwJyk7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2k7XG4gICAgZnVuY3Rpb24gbG9jYWxlTWVyaWRpZW0gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgLy8gU2V0dGluZyB0aGUgaG91ciBzaG91bGQga2VlcCB0aGUgdGltZSwgYmVjYXVzZSB0aGUgdXNlciBleHBsaWNpdGx5XG4gICAgLy8gc3BlY2lmaWVkIHdoaWNoIGhvdXIgaGUgd2FudHMuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgIC8vIGEgbmV3IHRpbWV6b25lKSBtYWtlcyBzZW5zZS4gQWRkaW5nL3N1YnRyYWN0aW5nIGhvdXJzIGRvZXMgbm90IGZvbGxvd1xuICAgIC8vIHRoaXMgcnVsZS5cbiAgICB2YXIgZ2V0U2V0SG91ciA9IG1ha2VHZXRTZXQoJ0hvdXJzJywgdHJ1ZSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignbScsIFsnbW0nLCAyXSwgMCwgJ21pbnV0ZScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaW51dGUnLCAnbScpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignbScsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ21tJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydtJywgJ21tJ10sIE1JTlVURSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0TWludXRlID0gbWFrZUdldFNldCgnTWludXRlcycsIGZhbHNlKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdzJywgWydzcycsIDJdLCAwLCAnc2Vjb25kJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3NlY29uZCcsICdzJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdzJywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaWxsaXNlY29uZCcsICdtcycpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUycsICAgIG1hdGNoMXRvMywgbWF0Y2gxKTtcbiAgICBhZGRSZWdleFRva2VuKCdTUycsICAgbWF0Y2gxdG8zLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTUycsICBtYXRjaDF0bzMsIG1hdGNoMyk7XG5cbiAgICB2YXIgdG9rZW47XG4gICAgZm9yICh0b2tlbiA9ICdTU1NTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRSZWdleFRva2VuKHRva2VuLCBtYXRjaFVuc2lnbmVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNSUxMSVNFQ09ORF0gPSB0b0ludCgoJzAuJyArIGlucHV0KSAqIDEwMDApO1xuICAgIH1cblxuICAgIGZvciAodG9rZW4gPSAnUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgcGFyc2VNcyk7XG4gICAgfVxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgIDAsIDAsICd6b25lQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZUFiYnIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnVVRDJyA6ICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFpvbmVOYW1lICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBtb21lbnRQcm90b3R5cGVfX3Byb3RvID0gTW9tZW50LnByb3RvdHlwZTtcblxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uYWRkICAgICAgICAgID0gYWRkX3N1YnRyYWN0X19hZGQ7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5jYWxlbmRhciAgICAgPSBtb21lbnRfY2FsZW5kYXJfX2NhbGVuZGFyO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uY2xvbmUgICAgICAgID0gY2xvbmU7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5kaWZmICAgICAgICAgPSBkaWZmO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uZW5kT2YgICAgICAgID0gZW5kT2Y7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5mb3JtYXQgICAgICAgPSBmb3JtYXQ7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5mcm9tICAgICAgICAgPSBmcm9tO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uZnJvbU5vdyAgICAgID0gZnJvbU5vdztcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnRvICAgICAgICAgICA9IHRvO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8udG9Ob3cgICAgICAgID0gdG9Ob3c7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5nZXQgICAgICAgICAgPSBnZXRTZXQ7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5pbnZhbGlkQXQgICAgPSBpbnZhbGlkQXQ7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5pc0FmdGVyICAgICAgPSBpc0FmdGVyO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uaXNCZWZvcmUgICAgID0gaXNCZWZvcmU7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5pc0JldHdlZW4gICAgPSBpc0JldHdlZW47XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5pc1NhbWUgICAgICAgPSBpc1NhbWU7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5pc1ZhbGlkICAgICAgPSBtb21lbnRfdmFsaWRfX2lzVmFsaWQ7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5sYW5nICAgICAgICAgPSBsYW5nO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8ubG9jYWxlICAgICAgID0gbG9jYWxlO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8ubG9jYWxlRGF0YSAgID0gbG9jYWxlRGF0YTtcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLm1heCAgICAgICAgICA9IHByb3RvdHlwZU1heDtcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLm1pbiAgICAgICAgICA9IHByb3RvdHlwZU1pbjtcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnBhcnNpbmdGbGFncyA9IHBhcnNpbmdGbGFncztcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnNldCAgICAgICAgICA9IGdldFNldDtcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnN0YXJ0T2YgICAgICA9IHN0YXJ0T2Y7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5zdWJ0cmFjdCAgICAgPSBhZGRfc3VidHJhY3RfX3N1YnRyYWN0O1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8udG9BcnJheSAgICAgID0gdG9BcnJheTtcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnRvT2JqZWN0ICAgICA9IHRvT2JqZWN0O1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8udG9EYXRlICAgICAgID0gdG9EYXRlO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8udG9JU09TdHJpbmcgID0gbW9tZW50X2Zvcm1hdF9fdG9JU09TdHJpbmc7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by50b0pTT04gICAgICAgPSBtb21lbnRfZm9ybWF0X190b0lTT1N0cmluZztcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnRvU3RyaW5nICAgICA9IHRvU3RyaW5nO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8udW5peCAgICAgICAgID0gdW5peDtcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnZhbHVlT2YgICAgICA9IHRvX3R5cGVfX3ZhbHVlT2Y7XG5cbiAgICAvLyBZZWFyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by55ZWFyICAgICAgID0gZ2V0U2V0WWVhcjtcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xuXG4gICAgLy8gV2VlayBZZWFyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by53ZWVrWWVhciAgICA9IGdldFNldFdlZWtZZWFyO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uaXNvV2Vla1llYXIgPSBnZXRTZXRJU09XZWVrWWVhcjtcblxuICAgIC8vIFF1YXJ0ZXJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnF1YXJ0ZXIgPSBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnF1YXJ0ZXJzID0gZ2V0U2V0UXVhcnRlcjtcblxuICAgIC8vIE1vbnRoXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5tb250aCAgICAgICA9IGdldFNldE1vbnRoO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aDtcblxuICAgIC8vIFdlZWtcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLndlZWsgICAgICAgICAgID0gbW9tZW50UHJvdG90eXBlX19wcm90by53ZWVrcyAgICAgICAgPSBnZXRTZXRXZWVrO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uaXNvV2VlayAgICAgICAgPSBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmlzb1dlZWtzICAgICA9IGdldFNldElTT1dlZWs7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by53ZWVrc0luWWVhciAgICA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uaXNvV2Vla3NJblllYXIgPSBnZXRJU09XZWVrc0luWWVhcjtcblxuICAgIC8vIERheVxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uZGF0ZSAgICAgICA9IGdldFNldERheU9mTW9udGg7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5kYXkgICAgICAgID0gbW9tZW50UHJvdG90eXBlX19wcm90by5kYXlzICAgICAgICAgICAgID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8ud2Vla2RheSAgICA9IGdldFNldExvY2FsZURheU9mV2VlaztcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmlzb1dlZWtkYXkgPSBnZXRTZXRJU09EYXlPZldlZWs7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5kYXlPZlllYXIgID0gZ2V0U2V0RGF5T2ZZZWFyO1xuXG4gICAgLy8gSG91clxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uaG91ciA9IG1vbWVudFByb3RvdHlwZV9fcHJvdG8uaG91cnMgPSBnZXRTZXRIb3VyO1xuXG4gICAgLy8gTWludXRlXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5taW51dGUgPSBtb21lbnRQcm90b3R5cGVfX3Byb3RvLm1pbnV0ZXMgPSBnZXRTZXRNaW51dGU7XG5cbiAgICAvLyBTZWNvbmRcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnNlY29uZCA9IG1vbWVudFByb3RvdHlwZV9fcHJvdG8uc2Vjb25kcyA9IGdldFNldFNlY29uZDtcblxuICAgIC8vIE1pbGxpc2Vjb25kXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5taWxsaXNlY29uZCA9IG1vbWVudFByb3RvdHlwZV9fcHJvdG8ubWlsbGlzZWNvbmRzID0gZ2V0U2V0TWlsbGlzZWNvbmQ7XG5cbiAgICAvLyBPZmZzZXRcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnV0Y09mZnNldCAgICAgICAgICAgID0gZ2V0U2V0T2Zmc2V0O1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8udXRjICAgICAgICAgICAgICAgICAgPSBzZXRPZmZzZXRUb1VUQztcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmxvY2FsICAgICAgICAgICAgICAgID0gc2V0T2Zmc2V0VG9Mb2NhbDtcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnBhcnNlWm9uZSAgICAgICAgICAgID0gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQ7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5oYXNBbGlnbmVkSG91ck9mZnNldCA9IGhhc0FsaWduZWRIb3VyT2Zmc2V0O1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uaXNEU1QgICAgICAgICAgICAgICAgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmlzRFNUU2hpZnRlZCAgICAgICAgID0gaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uaXNMb2NhbCAgICAgICAgICAgICAgPSBpc0xvY2FsO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uaXNVdGNPZmZzZXQgICAgICAgICAgPSBpc1V0Y09mZnNldDtcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmlzVXRjICAgICAgICAgICAgICAgID0gaXNVdGM7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5pc1VUQyAgICAgICAgICAgICAgICA9IGlzVXRjO1xuXG4gICAgLy8gVGltZXpvbmVcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnpvbmVBYmJyID0gZ2V0Wm9uZUFiYnI7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by56b25lTmFtZSA9IGdldFpvbmVOYW1lO1xuXG4gICAgLy8gRGVwcmVjYXRpb25zXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5kYXRlcyAgPSBkZXByZWNhdGUoJ2RhdGVzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBkYXRlIGluc3RlYWQuJywgZ2V0U2V0RGF5T2ZNb250aCk7XG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5tb250aHMgPSBkZXByZWNhdGUoJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsIGdldFNldE1vbnRoKTtcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnllYXJzICA9IGRlcHJlY2F0ZSgneWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCcsIGdldFNldFllYXIpO1xuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uem9uZSAgID0gZGVwcmVjYXRlKCdtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51dGNPZmZzZXQgaW5zdGVhZC4gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzE3NzknLCBnZXRTZXRab25lKTtcblxuICAgIHZhciBtb21lbnRQcm90b3R5cGUgPSBtb21lbnRQcm90b3R5cGVfX3Byb3RvO1xuXG4gICAgZnVuY3Rpb24gbW9tZW50X19jcmVhdGVVbml4IChpbnB1dCkge1xuICAgICAgICByZXR1cm4gbG9jYWxfX2NyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9tZW50X19jcmVhdGVJblpvbmUgKCkge1xuICAgICAgICByZXR1cm4gbG9jYWxfX2NyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cykucGFyc2Vab25lKCk7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRDYWxlbmRhciA9IHtcbiAgICAgICAgc2FtZURheSA6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgbmV4dERheSA6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheSA6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgIGxhc3RXZWVrIDogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVfY2FsZW5kYXJfX2NhbGVuZGFyIChrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG91dHB1dCA9PT0gJ2Z1bmN0aW9uJyA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvbmdEYXRlRm9ybWF0ID0ge1xuICAgICAgICBMVFMgIDogJ2g6bW06c3MgQScsXG4gICAgICAgIExUICAgOiAnaDptbSBBJyxcbiAgICAgICAgTCAgICA6ICdNTS9ERC9ZWVlZJyxcbiAgICAgICAgTEwgICA6ICdNTU1NIEQsIFlZWVknLFxuICAgICAgICBMTEwgIDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICBMTExMIDogJ2RkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEnXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvbmdEYXRlRm9ybWF0IChrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0sXG4gICAgICAgICAgICBmb3JtYXRVcHBlciA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleS50b1VwcGVyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoZm9ybWF0IHx8ICFmb3JtYXRVcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0gPSBmb3JtYXRVcHBlci5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbC5zbGljZSgxKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRJbnZhbGlkRGF0ZSA9ICdJbnZhbGlkIGRhdGUnO1xuXG4gICAgZnVuY3Rpb24gaW52YWxpZERhdGUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJztcbiAgICB2YXIgZGVmYXVsdE9yZGluYWxQYXJzZSA9IC9cXGR7MSwyfS87XG5cbiAgICBmdW5jdGlvbiBvcmRpbmFsIChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZVBhcnNlUG9zdEZvcm1hdCAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRSZWxhdGl2ZVRpbWUgPSB7XG4gICAgICAgIGZ1dHVyZSA6ICdpbiAlcycsXG4gICAgICAgIHBhc3QgICA6ICclcyBhZ28nLFxuICAgICAgICBzICA6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgbSAgOiAnYSBtaW51dGUnLFxuICAgICAgICBtbSA6ICclZCBtaW51dGVzJyxcbiAgICAgICAgaCAgOiAnYW4gaG91cicsXG4gICAgICAgIGhoIDogJyVkIGhvdXJzJyxcbiAgICAgICAgZCAgOiAnYSBkYXknLFxuICAgICAgICBkZCA6ICclZCBkYXlzJyxcbiAgICAgICAgTSAgOiAnYSBtb250aCcsXG4gICAgICAgIE1NIDogJyVkIG1vbnRocycsXG4gICAgICAgIHkgIDogJ2EgeWVhcicsXG4gICAgICAgIHl5IDogJyVkIHllYXJzJ1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZV9fcmVsYXRpdmVUaW1lIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX3JlbGF0aXZlVGltZVtzdHJpbmddO1xuICAgICAgICByZXR1cm4gKHR5cGVvZiBvdXRwdXQgPT09ICdmdW5jdGlvbicpID9cbiAgICAgICAgICAgIG91dHB1dChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIDpcbiAgICAgICAgICAgIG91dHB1dC5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhc3RGdXR1cmUgKGRpZmYsIG91dHB1dCkge1xuICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW2RpZmYgPiAwID8gJ2Z1dHVyZScgOiAncGFzdCddO1xuICAgICAgICByZXR1cm4gdHlwZW9mIGZvcm1hdCA9PT0gJ2Z1bmN0aW9uJyA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlX3NldF9fc2V0IChjb25maWcpIHtcbiAgICAgICAgdmFyIHByb3AsIGk7XG4gICAgICAgIGZvciAoaSBpbiBjb25maWcpIHtcbiAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzW2ldID0gcHJvcDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX29yZGluYWxQYXJzZUxlbmllbnQuXG4gICAgICAgIHRoaXMuX29yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UgKyAnfCcgKyAoL1xcZHsxLDJ9Lykuc291cmNlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG90eXBlX19wcm90byA9IExvY2FsZS5wcm90b3R5cGU7XG5cbiAgICBwcm90b3R5cGVfX3Byb3RvLl9jYWxlbmRhciAgICAgICA9IGRlZmF1bHRDYWxlbmRhcjtcbiAgICBwcm90b3R5cGVfX3Byb3RvLmNhbGVuZGFyICAgICAgICA9IGxvY2FsZV9jYWxlbmRhcl9fY2FsZW5kYXI7XG4gICAgcHJvdG90eXBlX19wcm90by5fbG9uZ0RhdGVGb3JtYXQgPSBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQ7XG4gICAgcHJvdG90eXBlX19wcm90by5sb25nRGF0ZUZvcm1hdCAgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90b3R5cGVfX3Byb3RvLl9pbnZhbGlkRGF0ZSAgICA9IGRlZmF1bHRJbnZhbGlkRGF0ZTtcbiAgICBwcm90b3R5cGVfX3Byb3RvLmludmFsaWREYXRlICAgICA9IGludmFsaWREYXRlO1xuICAgIHByb3RvdHlwZV9fcHJvdG8uX29yZGluYWwgICAgICAgID0gZGVmYXVsdE9yZGluYWw7XG4gICAgcHJvdG90eXBlX19wcm90by5vcmRpbmFsICAgICAgICAgPSBvcmRpbmFsO1xuICAgIHByb3RvdHlwZV9fcHJvdG8uX29yZGluYWxQYXJzZSAgID0gZGVmYXVsdE9yZGluYWxQYXJzZTtcbiAgICBwcm90b3R5cGVfX3Byb3RvLnByZXBhcnNlICAgICAgICA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90b3R5cGVfX3Byb3RvLnBvc3Rmb3JtYXQgICAgICA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90b3R5cGVfX3Byb3RvLl9yZWxhdGl2ZVRpbWUgICA9IGRlZmF1bHRSZWxhdGl2ZVRpbWU7XG4gICAgcHJvdG90eXBlX19wcm90by5yZWxhdGl2ZVRpbWUgICAgPSByZWxhdGl2ZV9fcmVsYXRpdmVUaW1lO1xuICAgIHByb3RvdHlwZV9fcHJvdG8ucGFzdEZ1dHVyZSAgICAgID0gcGFzdEZ1dHVyZTtcbiAgICBwcm90b3R5cGVfX3Byb3RvLnNldCAgICAgICAgICAgICA9IGxvY2FsZV9zZXRfX3NldDtcblxuICAgIC8vIE1vbnRoXG4gICAgcHJvdG90eXBlX19wcm90by5tb250aHMgICAgICAgPSAgICAgICAgbG9jYWxlTW9udGhzO1xuICAgIHByb3RvdHlwZV9fcHJvdG8uX21vbnRocyAgICAgID0gZGVmYXVsdExvY2FsZU1vbnRocztcbiAgICBwcm90b3R5cGVfX3Byb3RvLm1vbnRoc1Nob3J0ICA9ICAgICAgICBsb2NhbGVNb250aHNTaG9ydDtcbiAgICBwcm90b3R5cGVfX3Byb3RvLl9tb250aHNTaG9ydCA9IGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydDtcbiAgICBwcm90b3R5cGVfX3Byb3RvLm1vbnRoc1BhcnNlICA9ICAgICAgICBsb2NhbGVNb250aHNQYXJzZTtcblxuICAgIC8vIFdlZWtcbiAgICBwcm90b3R5cGVfX3Byb3RvLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvdHlwZV9fcHJvdG8uX3dlZWsgPSBkZWZhdWx0TG9jYWxlV2VlaztcbiAgICBwcm90b3R5cGVfX3Byb3RvLmZpcnN0RGF5T2ZZZWFyID0gbG9jYWxlRmlyc3REYXlPZlllYXI7XG4gICAgcHJvdG90eXBlX19wcm90by5maXJzdERheU9mV2VlayA9IGxvY2FsZUZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgLy8gRGF5IG9mIFdlZWtcbiAgICBwcm90b3R5cGVfX3Byb3RvLndlZWtkYXlzICAgICAgID0gICAgICAgIGxvY2FsZVdlZWtkYXlzO1xuICAgIHByb3RvdHlwZV9fcHJvdG8uX3dlZWtkYXlzICAgICAgPSBkZWZhdWx0TG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG90eXBlX19wcm90by53ZWVrZGF5c01pbiAgICA9ICAgICAgICBsb2NhbGVXZWVrZGF5c01pbjtcbiAgICBwcm90b3R5cGVfX3Byb3RvLl93ZWVrZGF5c01pbiAgID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvdHlwZV9fcHJvdG8ud2Vla2RheXNTaG9ydCAgPSAgICAgICAgbG9jYWxlV2Vla2RheXNTaG9ydDtcbiAgICBwcm90b3R5cGVfX3Byb3RvLl93ZWVrZGF5c1Nob3J0ID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG90eXBlX19wcm90by53ZWVrZGF5c1BhcnNlICA9ICAgICAgICBsb2NhbGVXZWVrZGF5c1BhcnNlO1xuXG4gICAgLy8gSG91cnNcbiAgICBwcm90b3R5cGVfX3Byb3RvLmlzUE0gPSBsb2NhbGVJc1BNO1xuICAgIHByb3RvdHlwZV9fcHJvdG8uX21lcmlkaWVtUGFyc2UgPSBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZTtcbiAgICBwcm90b3R5cGVfX3Byb3RvLm1lcmlkaWVtID0gbG9jYWxlTWVyaWRpZW07XG5cbiAgICBmdW5jdGlvbiBsaXN0c19fZ2V0IChmb3JtYXQsIGluZGV4LCBmaWVsZCwgc2V0dGVyKSB7XG4gICAgICAgIHZhciBsb2NhbGUgPSBsb2NhbGVfbG9jYWxlc19fZ2V0TG9jYWxlKCk7XG4gICAgICAgIHZhciB1dGMgPSBjcmVhdGVfdXRjX19jcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0IChmb3JtYXQsIGluZGV4LCBmaWVsZCwgY291bnQsIHNldHRlcikge1xuICAgICAgICBpZiAodHlwZW9mIGZvcm1hdCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbGlzdHNfX2dldChmb3JtYXQsIGluZGV4LCBmaWVsZCwgc2V0dGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpO1xuICAgICAgICB2YXIgb3V0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBsaXN0c19fZ2V0KGZvcm1hdCwgaSwgZmllbGQsIHNldHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0c19fbGlzdE1vbnRocyAoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdChmb3JtYXQsIGluZGV4LCAnbW9udGhzJywgMTIsICdtb250aCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RzX19saXN0TW9udGhzU2hvcnQgKGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3QoZm9ybWF0LCBpbmRleCwgJ21vbnRoc1Nob3J0JywgMTIsICdtb250aCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RzX19saXN0V2Vla2RheXMgKGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3QoZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzJywgNywgJ2RheScpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RzX19saXN0V2Vla2RheXNTaG9ydCAoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdChmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcsIDcsICdkYXknKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0c19fbGlzdFdlZWtkYXlzTWluIChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0KGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5c01pbicsIDcsICdkYXknKTtcbiAgICB9XG5cbiAgICBsb2NhbGVfbG9jYWxlc19fZ2V0U2V0R2xvYmFsTG9jYWxlKCdlbicsIHtcbiAgICAgICAgb3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbCA6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRvSW50KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMSkgPyAnc3QnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnbmQnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFNpZGUgZWZmZWN0IGltcG9ydHNcbiAgICB1dGlsc19ob29rc19faG9va3MubGFuZyA9IGRlcHJlY2F0ZSgnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLCBsb2NhbGVfbG9jYWxlc19fZ2V0U2V0R2xvYmFsTG9jYWxlKTtcbiAgICB1dGlsc19ob29rc19faG9va3MubGFuZ0RhdGEgPSBkZXByZWNhdGUoJ21vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4nLCBsb2NhbGVfbG9jYWxlc19fZ2V0TG9jYWxlKTtcblxuICAgIHZhciBtYXRoQWJzID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBkdXJhdGlvbl9hYnNfX2FicyAoKSB7XG4gICAgICAgIHZhciBkYXRhICAgICAgICAgICA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzICAgICAgICAgPSBtYXRoQWJzKHRoaXMuX2RheXMpO1xuICAgICAgICB0aGlzLl9tb250aHMgICAgICAgPSBtYXRoQWJzKHRoaXMuX21vbnRocyk7XG5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyAgICAgICA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzICAgICAgID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzICAgICAgICAgPSBtYXRoQWJzKGRhdGEuaG91cnMpO1xuICAgICAgICBkYXRhLm1vbnRocyAgICAgICAgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyAgICAgICAgID0gbWF0aEFicyhkYXRhLnllYXJzKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkdXJhdGlvbl9hZGRfc3VidHJhY3RfX2FkZFN1YnRyYWN0IChkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlX19jcmVhdGVEdXJhdGlvbihpbnB1dCwgdmFsdWUpO1xuXG4gICAgICAgIGR1cmF0aW9uLl9taWxsaXNlY29uZHMgKz0gZGlyZWN0aW9uICogb3RoZXIuX21pbGxpc2Vjb25kcztcbiAgICAgICAgZHVyYXRpb24uX2RheXMgICAgICAgICArPSBkaXJlY3Rpb24gKiBvdGhlci5fZGF5cztcbiAgICAgICAgZHVyYXRpb24uX21vbnRocyAgICAgICArPSBkaXJlY3Rpb24gKiBvdGhlci5fbW9udGhzO1xuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbi5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgYWRkKDEsICdzJykgb3IgYWRkKGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIGR1cmF0aW9uX2FkZF9zdWJ0cmFjdF9fYWRkIChpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uX2FkZF9zdWJ0cmFjdF9fYWRkU3VidHJhY3QodGhpcywgaW5wdXQsIHZhbHVlLCAxKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBzdWJ0cmFjdCgxLCAncycpIG9yIHN1YnRyYWN0KGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIGR1cmF0aW9uX2FkZF9zdWJ0cmFjdF9fc3VidHJhY3QgKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZHVyYXRpb25fYWRkX3N1YnRyYWN0X19hZGRTdWJ0cmFjdCh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsIChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGUgKCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuICAgICAgICB2YXIgZGF5cyAgICAgICAgID0gdGhpcy5fZGF5cztcbiAgICAgICAgdmFyIG1vbnRocyAgICAgICA9IHRoaXMuX21vbnRocztcbiAgICAgICAgdmFyIGRhdGEgICAgICAgICA9IHRoaXMuX2RhdGE7XG4gICAgICAgIHZhciBzZWNvbmRzLCBtaW51dGVzLCBob3VycywgeWVhcnMsIG1vbnRoc0Zyb21EYXlzO1xuXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBtaXggb2YgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlcywgYnViYmxlIGRvd24gZmlyc3RcbiAgICAgICAgLy8gY2hlY2s6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yMTY2XG4gICAgICAgIGlmICghKChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMCkpKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgICAgICAgICAgID0gYWJzRmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyAgICAgID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgICAgICAgICAgID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgZGF0YS5taW51dGVzICAgICAgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgICAgICAgICAgICAgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzICAgICAgICA9IGhvdXJzICUgMjQ7XG5cbiAgICAgICAgZGF5cyArPSBhYnNGbG9vcihob3VycyAvIDI0KTtcblxuICAgICAgICAvLyBjb252ZXJ0IGRheXMgdG8gbW9udGhzXG4gICAgICAgIG1vbnRoc0Zyb21EYXlzID0gYWJzRmxvb3IoZGF5c1RvTW9udGhzKGRheXMpKTtcbiAgICAgICAgbW9udGhzICs9IG1vbnRoc0Zyb21EYXlzO1xuICAgICAgICBkYXlzIC09IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRoc0Zyb21EYXlzKSk7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIGRhdGEuZGF5cyAgID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgID0geWVhcnM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c1RvTW9udGhzIChkYXlzKSB7XG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDE0NjA5NyBkYXlzICh0YWtpbmcgaW50byBhY2NvdW50IGxlYXAgeWVhciBydWxlcylcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTIgbW9udGhzID09PSA0ODAwXG4gICAgICAgIHJldHVybiBkYXlzICogNDgwMCAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMgKG1vbnRocykge1xuICAgICAgICAvLyB0aGUgcmV2ZXJzZSBvZiBkYXlzVG9Nb250aHNcbiAgICAgICAgcmV0dXJuIG1vbnRocyAqIDE0NjA5NyAvIDQ4MDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXMgKHVuaXRzKSB7XG4gICAgICAgIHZhciBkYXlzO1xuICAgICAgICB2YXIgbW9udGhzO1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICBkYXlzICAgPSB0aGlzLl9kYXlzICAgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHJldHVybiB1bml0cyA9PT0gJ21vbnRoJyA/IG1vbnRocyA6IG1vbnRocyAvIDEyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGFuZGxlIG1pbGxpc2Vjb25kcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGlzc3VlICMxODY3KVxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBNYXRoLnJvdW5kKG1vbnRoc1RvRGF5cyh0aGlzLl9tb250aHMpKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd3ZWVrJyAgIDogcmV0dXJuIGRheXMgLyA3ICAgICArIG1pbGxpc2Vjb25kcyAvIDYwNDhlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdkYXknICAgIDogcmV0dXJuIGRheXMgICAgICAgICArIG1pbGxpc2Vjb25kcyAvIDg2NGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2hvdXInICAgOiByZXR1cm4gZGF5cyAqIDI0ICAgICsgbWlsbGlzZWNvbmRzIC8gMzZlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdtaW51dGUnIDogcmV0dXJuIGRheXMgKiAxNDQwICArIG1pbGxpc2Vjb25kcyAvIDZlNDtcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnIDogcmV0dXJuIGRheXMgKiA4NjQwMCArIG1pbGxpc2Vjb25kcyAvIDEwMDA7XG4gICAgICAgICAgICAgICAgLy8gTWF0aC5mbG9vciBwcmV2ZW50cyBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyBoZXJlXG4gICAgICAgICAgICAgICAgY2FzZSAnbWlsbGlzZWNvbmQnOiByZXR1cm4gTWF0aC5mbG9vcihkYXlzICogODY0ZTUpICsgbWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcignVW5rbm93biB1bml0ICcgKyB1bml0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgdGhpcy5hcygnbXMnKT9cbiAgICBmdW5jdGlvbiBkdXJhdGlvbl9hc19fdmFsdWVPZiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgdGhpcy5fZGF5cyAqIDg2NGU1ICtcbiAgICAgICAgICAgICh0aGlzLl9tb250aHMgJSAxMikgKiAyNTkyZTYgK1xuICAgICAgICAgICAgdG9JbnQodGhpcy5fbW9udGhzIC8gMTIpICogMzE1MzZlNlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VBcyAoYWxpYXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzKGFsaWFzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgYXNNaWxsaXNlY29uZHMgPSBtYWtlQXMoJ21zJyk7XG4gICAgdmFyIGFzU2Vjb25kcyAgICAgID0gbWFrZUFzKCdzJyk7XG4gICAgdmFyIGFzTWludXRlcyAgICAgID0gbWFrZUFzKCdtJyk7XG4gICAgdmFyIGFzSG91cnMgICAgICAgID0gbWFrZUFzKCdoJyk7XG4gICAgdmFyIGFzRGF5cyAgICAgICAgID0gbWFrZUFzKCdkJyk7XG4gICAgdmFyIGFzV2Vla3MgICAgICAgID0gbWFrZUFzKCd3Jyk7XG4gICAgdmFyIGFzTW9udGhzICAgICAgID0gbWFrZUFzKCdNJyk7XG4gICAgdmFyIGFzWWVhcnMgICAgICAgID0gbWFrZUFzKCd5Jyk7XG5cbiAgICBmdW5jdGlvbiBkdXJhdGlvbl9nZXRfX2dldCAodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIHJldHVybiB0aGlzW3VuaXRzICsgJ3MnXSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFbbmFtZV07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ21pbGxpc2Vjb25kcycpO1xuICAgIHZhciBzZWNvbmRzICAgICAgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyk7XG4gICAgdmFyIG1pbnV0ZXMgICAgICA9IG1ha2VHZXR0ZXIoJ21pbnV0ZXMnKTtcbiAgICB2YXIgaG91cnMgICAgICAgID0gbWFrZUdldHRlcignaG91cnMnKTtcbiAgICB2YXIgZGF5cyAgICAgICAgID0gbWFrZUdldHRlcignZGF5cycpO1xuICAgIHZhciBtb250aHMgICAgICAgPSBtYWtlR2V0dGVyKCdtb250aHMnKTtcbiAgICB2YXIgeWVhcnMgICAgICAgID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzICgpIHtcbiAgICAgICAgcmV0dXJuIGFic0Zsb29yKHRoaXMuZGF5cygpIC8gNyk7XG4gICAgfVxuXG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcbiAgICB2YXIgdGhyZXNob2xkcyA9IHtcbiAgICAgICAgczogNDUsICAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICBtOiA0NSwgIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICBoOiAyMiwgIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICBkOiAyNiwgIC8vIGRheXMgdG8gbW9udGhcbiAgICAgICAgTTogMTEgICAvLyBtb250aHMgdG8geWVhclxuICAgIH07XG5cbiAgICAvLyBoZWxwZXIgZnVuY3Rpb24gZm9yIG1vbWVudC5mbi5mcm9tLCBtb21lbnQuZm4uZnJvbU5vdywgYW5kIG1vbWVudC5kdXJhdGlvbi5mbi5odW1hbml6ZVxuICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGVUaW1lQWdvKHN0cmluZywgbnVtYmVyLCB3aXRob3V0U3VmZml4LCBpc0Z1dHVyZSwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUucmVsYXRpdmVUaW1lKG51bWJlciB8fCAxLCAhIXdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGR1cmF0aW9uX2h1bWFuaXplX19yZWxhdGl2ZVRpbWUgKHBvc05lZ0R1cmF0aW9uLCB3aXRob3V0U3VmZml4LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gY3JlYXRlX19jcmVhdGVEdXJhdGlvbihwb3NOZWdEdXJhdGlvbikuYWJzKCk7XG4gICAgICAgIHZhciBzZWNvbmRzICA9IHJvdW5kKGR1cmF0aW9uLmFzKCdzJykpO1xuICAgICAgICB2YXIgbWludXRlcyAgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKTtcbiAgICAgICAgdmFyIGhvdXJzICAgID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSk7XG4gICAgICAgIHZhciBkYXlzICAgICA9IHJvdW5kKGR1cmF0aW9uLmFzKCdkJykpO1xuICAgICAgICB2YXIgbW9udGhzICAgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKTtcbiAgICAgICAgdmFyIHllYXJzICAgID0gcm91bmQoZHVyYXRpb24uYXMoJ3knKSk7XG5cbiAgICAgICAgdmFyIGEgPSBzZWNvbmRzIDwgdGhyZXNob2xkcy5zICYmIFsncycsIHNlY29uZHNdICB8fFxuICAgICAgICAgICAgICAgIG1pbnV0ZXMgPT09IDEgICAgICAgICAgJiYgWydtJ10gICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgbWludXRlcyA8IHRocmVzaG9sZHMubSAmJiBbJ21tJywgbWludXRlc10gfHxcbiAgICAgICAgICAgICAgICBob3VycyAgID09PSAxICAgICAgICAgICYmIFsnaCddICAgICAgICAgICB8fFxuICAgICAgICAgICAgICAgIGhvdXJzICAgPCB0aHJlc2hvbGRzLmggJiYgWydoaCcsIGhvdXJzXSAgIHx8XG4gICAgICAgICAgICAgICAgZGF5cyAgICA9PT0gMSAgICAgICAgICAmJiBbJ2QnXSAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICBkYXlzICAgIDwgdGhyZXNob2xkcy5kICYmIFsnZGQnLCBkYXlzXSAgICB8fFxuICAgICAgICAgICAgICAgIG1vbnRocyAgPT09IDEgICAgICAgICAgJiYgWydNJ10gICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgbW9udGhzICA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSAgfHxcbiAgICAgICAgICAgICAgICB5ZWFycyAgID09PSAxICAgICAgICAgICYmIFsneSddICAgICAgICAgICB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgYSB0aHJlc2hvbGQgZm9yIHJlbGF0aXZlIHRpbWUgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGR1cmF0aW9uX2h1bWFuaXplX19nZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQgKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplICh3aXRoU3VmZml4KSB7XG4gICAgICAgIHZhciBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgdmFyIG91dHB1dCA9IGR1cmF0aW9uX2h1bWFuaXplX19yZWxhdGl2ZVRpbWUodGhpcywgIXdpdGhTdWZmaXgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGlzb19zdHJpbmdfX2FicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gaXNvX3N0cmluZ19fdG9JU09TdHJpbmcoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICB2YXIgc2Vjb25kcyA9IGlzb19zdHJpbmdfX2Ficyh0aGlzLl9taWxsaXNlY29uZHMpIC8gMTAwMDtcbiAgICAgICAgdmFyIGRheXMgICAgICAgICA9IGlzb19zdHJpbmdfX2Ficyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdmFyIG1vbnRocyAgICAgICA9IGlzb19zdHJpbmdfX2Ficyh0aGlzLl9tb250aHMpO1xuICAgICAgICB2YXIgbWludXRlcywgaG91cnMsIHllYXJzO1xuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzICAgICAgICAgICA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGhvdXJzICAgICAgICAgICAgID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgc2Vjb25kcyAlPSA2MDtcbiAgICAgICAgbWludXRlcyAlPSA2MDtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzICA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG5cbiAgICAgICAgLy8gaW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2RvcmRpbGxlL21vbWVudC1pc29kdXJhdGlvbi9ibG9iL21hc3Rlci9tb21lbnQuaXNvZHVyYXRpb24uanNcbiAgICAgICAgdmFyIFkgPSB5ZWFycztcbiAgICAgICAgdmFyIE0gPSBtb250aHM7XG4gICAgICAgIHZhciBEID0gZGF5cztcbiAgICAgICAgdmFyIGggPSBob3VycztcbiAgICAgICAgdmFyIG0gPSBtaW51dGVzO1xuICAgICAgICB2YXIgcyA9IHNlY29uZHM7XG4gICAgICAgIHZhciB0b3RhbCA9IHRoaXMuYXNTZWNvbmRzKCk7XG5cbiAgICAgICAgaWYgKCF0b3RhbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBhcyBDIydzIChOb2RhKSBhbmQgcHl0aG9uIChpc29kYXRlKS4uLlxuICAgICAgICAgICAgLy8gYnV0IG5vdCBvdGhlciBKUyAoZ29vZy5kYXRlKVxuICAgICAgICAgICAgcmV0dXJuICdQMEQnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICh0b3RhbCA8IDAgPyAnLScgOiAnJykgK1xuICAgICAgICAgICAgJ1AnICtcbiAgICAgICAgICAgIChZID8gWSArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAoTSA/IE0gKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKEQgPyBEICsgJ0QnIDogJycpICtcbiAgICAgICAgICAgICgoaCB8fCBtIHx8IHMpID8gJ1QnIDogJycpICtcbiAgICAgICAgICAgIChoID8gaCArICdIJyA6ICcnKSArXG4gICAgICAgICAgICAobSA/IG0gKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKHMgPyBzICsgJ1MnIDogJycpO1xuICAgIH1cblxuICAgIHZhciBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvID0gRHVyYXRpb24ucHJvdG90eXBlO1xuXG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5hYnMgICAgICAgICAgICA9IGR1cmF0aW9uX2Fic19fYWJzO1xuICAgIGR1cmF0aW9uX3Byb3RvdHlwZV9fcHJvdG8uYWRkICAgICAgICAgICAgPSBkdXJhdGlvbl9hZGRfc3VidHJhY3RfX2FkZDtcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLnN1YnRyYWN0ICAgICAgID0gZHVyYXRpb25fYWRkX3N1YnRyYWN0X19zdWJ0cmFjdDtcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLmFzICAgICAgICAgICAgID0gYXM7XG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIGR1cmF0aW9uX3Byb3RvdHlwZV9fcHJvdG8uYXNTZWNvbmRzICAgICAgPSBhc1NlY29uZHM7XG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5hc01pbnV0ZXMgICAgICA9IGFzTWludXRlcztcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLmFzSG91cnMgICAgICAgID0gYXNIb3VycztcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLmFzRGF5cyAgICAgICAgID0gYXNEYXlzO1xuICAgIGR1cmF0aW9uX3Byb3RvdHlwZV9fcHJvdG8uYXNXZWVrcyAgICAgICAgPSBhc1dlZWtzO1xuICAgIGR1cmF0aW9uX3Byb3RvdHlwZV9fcHJvdG8uYXNNb250aHMgICAgICAgPSBhc01vbnRocztcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLmFzWWVhcnMgICAgICAgID0gYXNZZWFycztcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLnZhbHVlT2YgICAgICAgID0gZHVyYXRpb25fYXNfX3ZhbHVlT2Y7XG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5fYnViYmxlICAgICAgICA9IGJ1YmJsZTtcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLmdldCAgICAgICAgICAgID0gZHVyYXRpb25fZ2V0X19nZXQ7XG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5taWxsaXNlY29uZHMgICA9IG1pbGxpc2Vjb25kcztcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLnNlY29uZHMgICAgICAgID0gc2Vjb25kcztcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLm1pbnV0ZXMgICAgICAgID0gbWludXRlcztcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLmhvdXJzICAgICAgICAgID0gaG91cnM7XG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5kYXlzICAgICAgICAgICA9IGRheXM7XG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by53ZWVrcyAgICAgICAgICA9IHdlZWtzO1xuICAgIGR1cmF0aW9uX3Byb3RvdHlwZV9fcHJvdG8ubW9udGhzICAgICAgICAgPSBtb250aHM7XG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by55ZWFycyAgICAgICAgICA9IHllYXJzO1xuICAgIGR1cmF0aW9uX3Byb3RvdHlwZV9fcHJvdG8uaHVtYW5pemUgICAgICAgPSBodW1hbml6ZTtcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLnRvSVNPU3RyaW5nICAgID0gaXNvX3N0cmluZ19fdG9JU09TdHJpbmc7XG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by50b1N0cmluZyAgICAgICA9IGlzb19zdHJpbmdfX3RvSVNPU3RyaW5nO1xuICAgIGR1cmF0aW9uX3Byb3RvdHlwZV9fcHJvdG8udG9KU09OICAgICAgICAgPSBpc29fc3RyaW5nX190b0lTT1N0cmluZztcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLmxvY2FsZSAgICAgICAgID0gbG9jYWxlO1xuICAgIGR1cmF0aW9uX3Byb3RvdHlwZV9fcHJvdG8ubG9jYWxlRGF0YSAgICAgPSBsb2NhbGVEYXRhO1xuXG4gICAgLy8gRGVwcmVjYXRpb25zXG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZSgndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLCBpc29fc3RyaW5nX190b0lTT1N0cmluZyk7XG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5sYW5nID0gbGFuZztcblxuICAgIC8vIFNpZGUgZWZmZWN0IGltcG9ydHNcblxuICAgIGFkZEZvcm1hdFRva2VuKCdYJywgMCwgMCwgJ3VuaXgnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneCcsIDAsIDAsICd2YWx1ZU9mJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd4JywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1gnLCBtYXRjaFRpbWVzdGFtcCk7XG4gICAgYWRkUGFyc2VUb2tlbignWCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShwYXJzZUZsb2F0KGlucHV0LCAxMCkgKiAxMDAwKTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCd4JywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHRvSW50KGlucHV0KSk7XG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cblxuICAgIHV0aWxzX2hvb2tzX19ob29rcy52ZXJzaW9uID0gJzIuMTAuNic7XG5cbiAgICBzZXRIb29rQ2FsbGJhY2sobG9jYWxfX2NyZWF0ZUxvY2FsKTtcblxuICAgIHV0aWxzX2hvb2tzX19ob29rcy5mbiAgICAgICAgICAgICAgICAgICAgPSBtb21lbnRQcm90b3R5cGU7XG4gICAgdXRpbHNfaG9va3NfX2hvb2tzLm1pbiAgICAgICAgICAgICAgICAgICA9IG1pbjtcbiAgICB1dGlsc19ob29rc19faG9va3MubWF4ICAgICAgICAgICAgICAgICAgID0gbWF4O1xuICAgIHV0aWxzX2hvb2tzX19ob29rcy51dGMgICAgICAgICAgICAgICAgICAgPSBjcmVhdGVfdXRjX19jcmVhdGVVVEM7XG4gICAgdXRpbHNfaG9va3NfX2hvb2tzLnVuaXggICAgICAgICAgICAgICAgICA9IG1vbWVudF9fY3JlYXRlVW5peDtcbiAgICB1dGlsc19ob29rc19faG9va3MubW9udGhzICAgICAgICAgICAgICAgID0gbGlzdHNfX2xpc3RNb250aHM7XG4gICAgdXRpbHNfaG9va3NfX2hvb2tzLmlzRGF0ZSAgICAgICAgICAgICAgICA9IGlzRGF0ZTtcbiAgICB1dGlsc19ob29rc19faG9va3MubG9jYWxlICAgICAgICAgICAgICAgID0gbG9jYWxlX2xvY2FsZXNfX2dldFNldEdsb2JhbExvY2FsZTtcbiAgICB1dGlsc19ob29rc19faG9va3MuaW52YWxpZCAgICAgICAgICAgICAgID0gdmFsaWRfX2NyZWF0ZUludmFsaWQ7XG4gICAgdXRpbHNfaG9va3NfX2hvb2tzLmR1cmF0aW9uICAgICAgICAgICAgICA9IGNyZWF0ZV9fY3JlYXRlRHVyYXRpb247XG4gICAgdXRpbHNfaG9va3NfX2hvb2tzLmlzTW9tZW50ICAgICAgICAgICAgICA9IGlzTW9tZW50O1xuICAgIHV0aWxzX2hvb2tzX19ob29rcy53ZWVrZGF5cyAgICAgICAgICAgICAgPSBsaXN0c19fbGlzdFdlZWtkYXlzO1xuICAgIHV0aWxzX2hvb2tzX19ob29rcy5wYXJzZVpvbmUgICAgICAgICAgICAgPSBtb21lbnRfX2NyZWF0ZUluWm9uZTtcbiAgICB1dGlsc19ob29rc19faG9va3MubG9jYWxlRGF0YSAgICAgICAgICAgID0gbG9jYWxlX2xvY2FsZXNfX2dldExvY2FsZTtcbiAgICB1dGlsc19ob29rc19faG9va3MuaXNEdXJhdGlvbiAgICAgICAgICAgID0gaXNEdXJhdGlvbjtcbiAgICB1dGlsc19ob29rc19faG9va3MubW9udGhzU2hvcnQgICAgICAgICAgID0gbGlzdHNfX2xpc3RNb250aHNTaG9ydDtcbiAgICB1dGlsc19ob29rc19faG9va3Mud2Vla2RheXNNaW4gICAgICAgICAgID0gbGlzdHNfX2xpc3RXZWVrZGF5c01pbjtcbiAgICB1dGlsc19ob29rc19faG9va3MuZGVmaW5lTG9jYWxlICAgICAgICAgID0gZGVmaW5lTG9jYWxlO1xuICAgIHV0aWxzX2hvb2tzX19ob29rcy53ZWVrZGF5c1Nob3J0ICAgICAgICAgPSBsaXN0c19fbGlzdFdlZWtkYXlzU2hvcnQ7XG4gICAgdXRpbHNfaG9va3NfX2hvb2tzLm5vcm1hbGl6ZVVuaXRzICAgICAgICA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIHV0aWxzX2hvb2tzX19ob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBkdXJhdGlvbl9odW1hbml6ZV9fZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkO1xuXG4gICAgdmFyIF9tb21lbnQgPSB1dGlsc19ob29rc19faG9va3M7XG5cbiAgICByZXR1cm4gX21vbWVudDtcblxufSkpOyJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vbWVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoibW9tZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qc1xyXG4vLyEgdmVyc2lvbiA6IDIuMTAuNlxyXG4vLyEgYXV0aG9ycyA6IFRpbSBXb29kLCBJc2tyZW4gQ2hlcm5ldiwgTW9tZW50LmpzIGNvbnRyaWJ1dG9yc1xyXG4vLyEgbGljZW5zZSA6IE1JVFxyXG4vLyEgbW9tZW50anMuY29tXHJcblxyXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xyXG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxyXG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcclxuICAgIGdsb2JhbC5tb21lbnQgPSBmYWN0b3J5KClcclxufSh0aGlzLCBmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcclxuXHJcbiAgICB2YXIgaG9va0NhbGxiYWNrO1xyXG5cclxuICAgIGZ1bmN0aW9uIHV0aWxzX2hvb2tzX19ob29rcyAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGhvb2tDYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoaXMgaXMgZG9uZSB0byByZWdpc3RlciB0aGUgbWV0aG9kIGNhbGxlZCB3aXRoIG1vbWVudCgpXHJcbiAgICAvLyB3aXRob3V0IGNyZWF0aW5nIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cclxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayAoY2FsbGJhY2spIHtcclxuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaXNEYXRlKGlucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0IGluc3RhbmNlb2YgRGF0ZSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBEYXRlXSc7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbWFwKGFyciwgZm4pIHtcclxuICAgICAgICB2YXIgcmVzID0gW10sIGk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgICAgICByZXMucHVzaChmbihhcnJbaV0sIGkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBoYXNPd25Qcm9wKGEsIGIpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIGIpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSBpbiBiKSB7XHJcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGIsIGkpKSB7XHJcbiAgICAgICAgICAgICAgICBhW2ldID0gYltpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3RvU3RyaW5nJykpIHtcclxuICAgICAgICAgICAgYS50b1N0cmluZyA9IGIudG9TdHJpbmc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndmFsdWVPZicpKSB7XHJcbiAgICAgICAgICAgIGEudmFsdWVPZiA9IGIudmFsdWVPZjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZV91dGNfX2NyZWF0ZVVUQyAoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcclxuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcclxuICAgICAgICAvLyBXZSBuZWVkIHRvIGRlZXAgY2xvbmUgdGhpcyBvYmplY3QuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZW1wdHkgICAgICAgICAgIDogZmFsc2UsXHJcbiAgICAgICAgICAgIHVudXNlZFRva2VucyAgICA6IFtdLFxyXG4gICAgICAgICAgICB1bnVzZWRJbnB1dCAgICAgOiBbXSxcclxuICAgICAgICAgICAgb3ZlcmZsb3cgICAgICAgIDogLTIsXHJcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXIgICA6IDAsXHJcbiAgICAgICAgICAgIG51bGxJbnB1dCAgICAgICA6IGZhbHNlLFxyXG4gICAgICAgICAgICBpbnZhbGlkTW9udGggICAgOiBudWxsLFxyXG4gICAgICAgICAgICBpbnZhbGlkRm9ybWF0ICAgOiBmYWxzZSxcclxuICAgICAgICAgICAgdXNlckludmFsaWRhdGVkIDogZmFsc2UsXHJcbiAgICAgICAgICAgIGlzbyAgICAgICAgICAgICA6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRQYXJzaW5nRmxhZ3MobSkge1xyXG4gICAgICAgIGlmIChtLl9wZiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbS5fcGY7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdmFsaWRfX2lzVmFsaWQobSkge1xyXG4gICAgICAgIGlmIChtLl9pc1ZhbGlkID09IG51bGwpIHtcclxuICAgICAgICAgICAgdmFyIGZsYWdzID0gZ2V0UGFyc2luZ0ZsYWdzKG0pO1xyXG4gICAgICAgICAgICBtLl9pc1ZhbGlkID0gIWlzTmFOKG0uX2QuZ2V0VGltZSgpKSAmJlxyXG4gICAgICAgICAgICAgICAgZmxhZ3Mub3ZlcmZsb3cgPCAwICYmXHJcbiAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcclxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcclxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkV2Vla2RheSAmJlxyXG4gICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxyXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRGb3JtYXQgJiZcclxuICAgICAgICAgICAgICAgICFmbGFncy51c2VySW52YWxpZGF0ZWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XHJcbiAgICAgICAgICAgICAgICBtLl9pc1ZhbGlkID0gbS5faXNWYWxpZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNoYXJzTGVmdE92ZXIgPT09IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYmlnSG91ciA9PT0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtLl9pc1ZhbGlkO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHZhbGlkX19jcmVhdGVJbnZhbGlkIChmbGFncykge1xyXG4gICAgICAgIHZhciBtID0gY3JlYXRlX3V0Y19fY3JlYXRlVVRDKE5hTik7XHJcbiAgICAgICAgaWYgKGZsYWdzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgZXh0ZW5kKGdldFBhcnNpbmdGbGFncyhtKSwgZmxhZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLnVzZXJJbnZhbGlkYXRlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbW9tZW50UHJvcGVydGllcyA9IHV0aWxzX2hvb2tzX19ob29rcy5tb21lbnRQcm9wZXJ0aWVzID0gW107XHJcblxyXG4gICAgZnVuY3Rpb24gY29weUNvbmZpZyh0bywgZnJvbSkge1xyXG4gICAgICAgIHZhciBpLCBwcm9wLCB2YWw7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgZnJvbS5faXNBTW9tZW50T2JqZWN0ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB0by5faXNBTW9tZW50T2JqZWN0ID0gZnJvbS5faXNBTW9tZW50T2JqZWN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGZyb20uX2kgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHRvLl9pID0gZnJvbS5faTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBmcm9tLl9mICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB0by5fZiA9IGZyb20uX2Y7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgZnJvbS5fbCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdG8uX2wgPSBmcm9tLl9sO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGZyb20uX3N0cmljdCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdG8uX3N0cmljdCA9IGZyb20uX3N0cmljdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBmcm9tLl90em0gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHRvLl90em0gPSBmcm9tLl90em07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgZnJvbS5faXNVVEMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHRvLl9pc1VUQyA9IGZyb20uX2lzVVRDO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGZyb20uX29mZnNldCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdG8uX29mZnNldCA9IGZyb20uX29mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBmcm9tLl9wZiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdG8uX3BmID0gZ2V0UGFyc2luZ0ZsYWdzKGZyb20pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGZyb20uX2xvY2FsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdG8uX2xvY2FsZSA9IGZyb20uX2xvY2FsZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZm9yIChpIGluIG1vbWVudFByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgICAgIHByb3AgPSBtb21lbnRQcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFsID0gZnJvbVtwcm9wXTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdG87XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBNb21lbnQgcHJvdG90eXBlIG9iamVjdFxyXG4gICAgZnVuY3Rpb24gTW9tZW50KGNvbmZpZykge1xyXG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcclxuICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoY29uZmlnLl9kICE9IG51bGwgPyBjb25maWcuX2QuZ2V0VGltZSgpIDogTmFOKTtcclxuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY2FzZSB1cGRhdGVPZmZzZXQgY3JlYXRlcyBuZXcgbW9tZW50XHJcbiAgICAgICAgLy8gb2JqZWN0cy5cclxuICAgICAgICBpZiAodXBkYXRlSW5Qcm9ncmVzcyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICAgICAgICAgIHV0aWxzX2hvb2tzX19ob29rcy51cGRhdGVPZmZzZXQodGhpcyk7XHJcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaXNNb21lbnQgKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBNb21lbnQgfHwgKG9iaiAhPSBudWxsICYmIG9iai5faXNBTW9tZW50T2JqZWN0ICE9IG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGFic0Zsb29yIChudW1iZXIpIHtcclxuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdG9JbnQoYXJndW1lbnRGb3JDb2VyY2lvbikge1xyXG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXHJcbiAgICAgICAgICAgIHZhbHVlID0gMDtcclxuXHJcbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBhYnNGbG9vcihjb2VyY2VkTnVtYmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xyXG4gICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcnJheTEubGVuZ3RoLCBhcnJheTIubGVuZ3RoKSxcclxuICAgICAgICAgICAgbGVuZ3RoRGlmZiA9IE1hdGguYWJzKGFycmF5MS5sZW5ndGggLSBhcnJheTIubGVuZ3RoKSxcclxuICAgICAgICAgICAgZGlmZnMgPSAwLFxyXG4gICAgICAgICAgICBpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxyXG4gICAgICAgICAgICAgICAgKCFkb250Q29udmVydCAmJiB0b0ludChhcnJheTFbaV0pICE9PSB0b0ludChhcnJheTJbaV0pKSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZnMrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGlmZnMgKyBsZW5ndGhEaWZmO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIExvY2FsZSgpIHtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbG9jYWxlcyA9IHt9O1xyXG4gICAgdmFyIGdsb2JhbExvY2FsZTtcclxuXHJcbiAgICBmdW5jdGlvbiBub3JtYWxpemVMb2NhbGUoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxyXG4gICAgLy8gdHJ5IFsnZW4tYXUnLCAnZW4tZ2InXSBhcyAnZW4tYXUnLCAnZW4tZ2InLCAnZW4nLCBhcyBpbiBtb3ZlIHRocm91Z2ggdGhlIGxpc3QgdHJ5aW5nIGVhY2hcclxuICAgIC8vIHN1YnN0cmluZyBmcm9tIG1vc3Qgc3BlY2lmaWMgdG8gbGVhc3QsIGJ1dCBtb3ZlIHRvIHRoZSBuZXh0IGFycmF5IGl0ZW0gaWYgaXQncyBhIG1vcmUgc3BlY2lmaWMgdmFyaWFudCB0aGFuIHRoZSBjdXJyZW50IHJvb3RcclxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xyXG4gICAgICAgIHZhciBpID0gMCwgaiwgbmV4dCwgbG9jYWxlLCBzcGxpdDtcclxuXHJcbiAgICAgICAgd2hpbGUgKGkgPCBuYW1lcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgc3BsaXQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaV0pLnNwbGl0KCctJyk7XHJcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XHJcbiAgICAgICAgICAgIG5leHQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaSArIDFdKTtcclxuICAgICAgICAgICAgbmV4dCA9IG5leHQgPyBuZXh0LnNwbGl0KCctJykgOiBudWxsO1xyXG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoc3BsaXQuc2xpY2UoMCwgaikuam9pbignLScpKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG5leHQgJiYgbmV4dC5sZW5ndGggPj0gaiAmJiBjb21wYXJlQXJyYXlzKHNwbGl0LCBuZXh0LCB0cnVlKSA+PSBqIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGotLTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGxvYWRMb2NhbGUobmFtZSkge1xyXG4gICAgICAgIHZhciBvbGRMb2NhbGUgPSBudWxsO1xyXG4gICAgICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHJlZ2lzdGVyIGFuZCBsb2FkIGFsbCB0aGUgbG9jYWxlcyBpbiBOb2RlXHJcbiAgICAgICAgaWYgKCFsb2NhbGVzW25hbWVdICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmXHJcbiAgICAgICAgICAgICAgICBtb2R1bGUgJiYgbW9kdWxlLmV4cG9ydHMpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIG9sZExvY2FsZSA9IGdsb2JhbExvY2FsZS5fYWJicjtcclxuICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vbG9jYWxlLycgKyBuYW1lKTtcclxuICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgZGVmaW5lTG9jYWxlIGN1cnJlbnRseSBhbHNvIHNldHMgdGhlIGdsb2JhbCBsb2NhbGUsIHdlXHJcbiAgICAgICAgICAgICAgICAvLyB3YW50IHRvIHVuZG8gdGhhdCBmb3IgbGF6eSBsb2FkZWQgbG9jYWxlc1xyXG4gICAgICAgICAgICAgICAgbG9jYWxlX2xvY2FsZXNfX2dldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGxvYWQgbG9jYWxlIGFuZCB0aGVuIHNldCB0aGUgZ2xvYmFsIGxvY2FsZS4gIElmXHJcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxyXG4gICAgLy8gbG9jYWxlIGtleS5cclxuICAgIGZ1bmN0aW9uIGxvY2FsZV9sb2NhbGVzX19nZXRTZXRHbG9iYWxMb2NhbGUgKGtleSwgdmFsdWVzKSB7XHJcbiAgICAgICAgdmFyIGRhdGE7XHJcbiAgICAgICAgaWYgKGtleSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlcyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgIGRhdGEgPSBsb2NhbGVfbG9jYWxlc19fZ2V0TG9jYWxlKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0gZGVmaW5lTG9jYWxlKGtleSwgdmFsdWVzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIC8vIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsTG9jYWxlID0gZGF0YTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUgKG5hbWUsIHZhbHVlcykge1xyXG4gICAgICAgIGlmICh2YWx1ZXMgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdmFsdWVzLmFiYnIgPSBuYW1lO1xyXG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXSB8fCBuZXcgTG9jYWxlKCk7XHJcbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0uc2V0KHZhbHVlcyk7XHJcblxyXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcclxuICAgICAgICAgICAgbG9jYWxlX2xvY2FsZXNfX2dldFNldEdsb2JhbExvY2FsZShuYW1lKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xyXG4gICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJldHVybnMgbG9jYWxlIGRhdGFcclxuICAgIGZ1bmN0aW9uIGxvY2FsZV9sb2NhbGVzX19nZXRMb2NhbGUgKGtleSkge1xyXG4gICAgICAgIHZhciBsb2NhbGU7XHJcblxyXG4gICAgICAgIGlmIChrZXkgJiYga2V5Ll9sb2NhbGUgJiYga2V5Ll9sb2NhbGUuX2FiYnIpIHtcclxuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFpc0FycmF5KGtleSkpIHtcclxuICAgICAgICAgICAgLy9zaG9ydC1jaXJjdWl0IGV2ZXJ5dGhpbmcgZWxzZVxyXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAga2V5ID0gW2tleV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hvb3NlTG9jYWxlKGtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGFsaWFzZXMgPSB7fTtcclxuXHJcbiAgICBmdW5jdGlvbiBhZGRVbml0QWxpYXMgKHVuaXQsIHNob3J0aGFuZCkge1xyXG4gICAgICAgIHZhciBsb3dlckNhc2UgPSB1bml0LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgYWxpYXNlc1tsb3dlckNhc2VdID0gYWxpYXNlc1tsb3dlckNhc2UgKyAncyddID0gYWxpYXNlc1tzaG9ydGhhbmRdID0gdW5pdDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBub3JtYWxpemVVbml0cyh1bml0cykge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnID8gYWxpYXNlc1t1bml0c10gfHwgYWxpYXNlc1t1bml0cy50b0xvd2VyQ2FzZSgpXSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBub3JtYWxpemVPYmplY3RVbml0cyhpbnB1dE9iamVjdCkge1xyXG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcclxuICAgICAgICAgICAgbm9ybWFsaXplZFByb3AsXHJcbiAgICAgICAgICAgIHByb3A7XHJcblxyXG4gICAgICAgIGZvciAocHJvcCBpbiBpbnB1dE9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChpbnB1dE9iamVjdCwgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkSW5wdXRbbm9ybWFsaXplZFByb3BdID0gaW5wdXRPYmplY3RbcHJvcF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBub3JtYWxpemVkSW5wdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCAodW5pdCwga2VlcFRpbWUpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBnZXRfc2V0X19zZXQodGhpcywgdW5pdCwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdXRpbHNfaG9va3NfX2hvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRfc2V0X19nZXQodGhpcywgdW5pdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldF9zZXRfX2dldCAobW9tLCB1bml0KSB7XHJcbiAgICAgICAgcmV0dXJuIG1vbS5fZFsnZ2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldF9zZXRfX3NldCAobW9tLCB1bml0LCB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0odmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1PTUVOVFNcclxuXHJcbiAgICBmdW5jdGlvbiBnZXRTZXQgKHVuaXRzLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciB1bml0O1xyXG4gICAgICAgIGlmICh0eXBlb2YgdW5pdHMgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIGZvciAodW5pdCBpbiB1bml0cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXQodW5pdCwgdW5pdHNbdW5pdF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpc1t1bml0c10gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gemVyb0ZpbGwobnVtYmVyLCB0YXJnZXRMZW5ndGgsIGZvcmNlU2lnbikge1xyXG4gICAgICAgIHZhciBhYnNOdW1iZXIgPSAnJyArIE1hdGguYWJzKG51bWJlciksXHJcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcclxuICAgICAgICAgICAgc2lnbiA9IG51bWJlciA+PSAwO1xyXG4gICAgICAgIHJldHVybiAoc2lnbiA/IChmb3JjZVNpZ24gPyAnKycgOiAnJykgOiAnLScpICtcclxuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgKyBhYnNOdW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oTW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UXxZWVlZWVl8WVlZWVl8WVlZWXxZWXxnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nO1xyXG5cclxuICAgIHZhciBsb2NhbEZvcm1hdHRpbmdUb2tlbnMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nO1xyXG5cclxuICAgIHZhciBmb3JtYXRGdW5jdGlvbnMgPSB7fTtcclxuXHJcbiAgICB2YXIgZm9ybWF0VG9rZW5GdW5jdGlvbnMgPSB7fTtcclxuXHJcbiAgICAvLyB0b2tlbjogICAgJ00nXHJcbiAgICAvLyBwYWRkZWQ6ICAgWydNTScsIDJdXHJcbiAgICAvLyBvcmRpbmFsOiAgJ01vJ1xyXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XHJcbiAgICBmdW5jdGlvbiBhZGRGb3JtYXRUb2tlbiAodG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgZnVuYyA9IGNhbGxiYWNrO1xyXG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tjYWxsYmFja10oKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSA9IGZ1bmM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYWRkZWQpIHtcclxuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbcGFkZGVkWzBdXSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9yZGluYWwpIHtcclxuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbb3JkaW5hbF0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRva2VuKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhpbnB1dCkge1xyXG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXlxcW3xcXF0kL2csICcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcclxuICAgICAgICB2YXIgYXJyYXkgPSBmb3JtYXQubWF0Y2goZm9ybWF0dGluZ1Rva2VucyksIGksIGxlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xyXG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG1vbSkge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gJyc7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGFycmF5W2ldIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBhcnJheVtpXS5jYWxsKG1vbSwgZm9ybWF0KSA6IGFycmF5W2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3JtYXQgZGF0ZSB1c2luZyBuYXRpdmUgZGF0ZSBvYmplY3RcclxuICAgIGZ1bmN0aW9uIGZvcm1hdE1vbWVudChtLCBmb3JtYXQpIHtcclxuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9ybWF0ID0gZXhwYW5kRm9ybWF0KGZvcm1hdCwgbS5sb2NhbGVEYXRhKCkpO1xyXG4gICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdID0gZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XShtKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBleHBhbmRGb3JtYXQoZm9ybWF0LCBsb2NhbGUpIHtcclxuICAgICAgICB2YXIgaSA9IDU7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyhpbnB1dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xyXG4gICAgICAgIHdoaWxlIChpID49IDAgJiYgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLnRlc3QoZm9ybWF0KSkge1xyXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShsb2NhbEZvcm1hdHRpbmdUb2tlbnMsIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2Vucyk7XHJcbiAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xyXG4gICAgICAgICAgICBpIC09IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBtYXRjaDEgICAgICAgICA9IC9cXGQvOyAgICAgICAgICAgIC8vICAgICAgIDAgLSA5XHJcbiAgICB2YXIgbWF0Y2gyICAgICAgICAgPSAvXFxkXFxkLzsgICAgICAgICAgLy8gICAgICAwMCAtIDk5XHJcbiAgICB2YXIgbWF0Y2gzICAgICAgICAgPSAvXFxkezN9LzsgICAgICAgICAvLyAgICAgMDAwIC0gOTk5XHJcbiAgICB2YXIgbWF0Y2g0ICAgICAgICAgPSAvXFxkezR9LzsgICAgICAgICAvLyAgICAwMDAwIC0gOTk5OVxyXG4gICAgdmFyIG1hdGNoNiAgICAgICAgID0gL1srLV0/XFxkezZ9LzsgICAgLy8gLTk5OTk5OSAtIDk5OTk5OVxyXG4gICAgdmFyIG1hdGNoMXRvMiAgICAgID0gL1xcZFxcZD8vOyAgICAgICAgIC8vICAgICAgIDAgLSA5OVxyXG4gICAgdmFyIG1hdGNoMXRvMyAgICAgID0gL1xcZHsxLDN9LzsgICAgICAgLy8gICAgICAgMCAtIDk5OVxyXG4gICAgdmFyIG1hdGNoMXRvNCAgICAgID0gL1xcZHsxLDR9LzsgICAgICAgLy8gICAgICAgMCAtIDk5OTlcclxuICAgIHZhciBtYXRjaDF0bzYgICAgICA9IC9bKy1dP1xcZHsxLDZ9LzsgIC8vIC05OTk5OTkgLSA5OTk5OTlcclxuXHJcbiAgICB2YXIgbWF0Y2hVbnNpZ25lZCAgPSAvXFxkKy87ICAgICAgICAgICAvLyAgICAgICAwIC0gaW5mXHJcbiAgICB2YXIgbWF0Y2hTaWduZWQgICAgPSAvWystXT9cXGQrLzsgICAgICAvLyAgICAtaW5mIC0gaW5mXHJcblxyXG4gICAgdmFyIG1hdGNoT2Zmc2V0ICAgID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpOyAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcclxuXHJcbiAgICB2YXIgbWF0Y2hUaW1lc3RhbXAgPSAvWystXT9cXGQrKFxcLlxcZHsxLDN9KT8vOyAvLyAxMjM0NTY3ODkgMTIzNDU2Nzg5LjEyM1xyXG5cclxuICAgIC8vIGFueSB3b3JkIChvciB0d28pIGNoYXJhY3RlcnMgb3IgbnVtYmVycyBpbmNsdWRpbmcgdHdvL3RocmVlIHdvcmQgbW9udGggaW4gYXJhYmljLlxyXG4gICAgdmFyIG1hdGNoV29yZCA9IC9bMC05XSpbJ2EtelxcdTAwQTAtXFx1MDVGRlxcdTA3MDAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0rfFtcXHUwNjAwLVxcdTA2RkZcXC9dKyhcXHMqP1tcXHUwNjAwLVxcdTA2RkZdKyl7MSwyfS9pO1xyXG5cclxuICAgIHZhciByZWdleGVzID0ge307XHJcblxyXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbiAoc3RoKSB7XHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzIzMjVcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHN0aCA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3RoKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gYWRkUmVnZXhUb2tlbiAodG9rZW4sIHJlZ2V4LCBzdHJpY3RSZWdleCkge1xyXG4gICAgICAgIHJlZ2V4ZXNbdG9rZW5dID0gaXNGdW5jdGlvbihyZWdleCkgPyByZWdleCA6IGZ1bmN0aW9uIChpc1N0cmljdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gKGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4KSA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4gKHRva2VuLCBjb25maWcpIHtcclxuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHVuZXNjYXBlRm9ybWF0KHRva2VuKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVnZXhlc1t0b2tlbl0oY29uZmlnLl9zdHJpY3QsIGNvbmZpZy5fbG9jYWxlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDb2RlIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTYxNDkzL2lzLXRoZXJlLWEtcmVnZXhwLWVzY2FwZS1mdW5jdGlvbi1pbi1qYXZhc2NyaXB0XHJcbiAgICBmdW5jdGlvbiB1bmVzY2FwZUZvcm1hdChzKSB7XHJcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgnXFxcXCcsICcnKS5yZXBsYWNlKC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csIGZ1bmN0aW9uIChtYXRjaGVkLCBwMSwgcDIsIHAzLCBwNCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcDEgfHwgcDIgfHwgcDMgfHwgcDQ7XHJcbiAgICAgICAgfSkucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHRva2VucyA9IHt9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGFkZFBhcnNlVG9rZW4gKHRva2VuLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBpLCBmdW5jID0gY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdG9rZW4gPSBbdG9rZW5dO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgYXJyYXlbY2FsbGJhY2tdID0gdG9JbnQoaW5wdXQpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdG9rZW5zW3Rva2VuW2ldXSA9IGZ1bmM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuICh0b2tlbiwgY2FsbGJhY2spIHtcclxuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5fdyA9IGNvbmZpZy5fdyB8fCB7fTtcclxuICAgICAgICAgICAgY2FsbGJhY2soaW5wdXQsIGNvbmZpZy5fdywgY29uZmlnLCB0b2tlbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcclxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCAmJiBoYXNPd25Qcm9wKHRva2VucywgdG9rZW4pKSB7XHJcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbl0oaW5wdXQsIGNvbmZpZy5fYSwgY29uZmlnLCB0b2tlbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBZRUFSID0gMDtcclxuICAgIHZhciBNT05USCA9IDE7XHJcbiAgICB2YXIgREFURSA9IDI7XHJcbiAgICB2YXIgSE9VUiA9IDM7XHJcbiAgICB2YXIgTUlOVVRFID0gNDtcclxuICAgIHZhciBTRUNPTkQgPSA1O1xyXG4gICAgdmFyIE1JTExJU0VDT05EID0gNjtcclxuXHJcbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCArIDEsIDApKS5nZXRVVENEYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRk9STUFUVElOR1xyXG5cclxuICAgIGFkZEZvcm1hdFRva2VuKCdNJywgWydNTScsIDJdLCAnTW8nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XHJcbiAgICB9KTtcclxuXHJcbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLCBmb3JtYXQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLCBmb3JtYXQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQUxJQVNFU1xyXG5cclxuICAgIGFkZFVuaXRBbGlhcygnbW9udGgnLCAnTScpO1xyXG5cclxuICAgIC8vIFBBUlNJTkdcclxuXHJcbiAgICBhZGRSZWdleFRva2VuKCdNJywgICAgbWF0Y2gxdG8yKTtcclxuICAgIGFkZFJlZ2V4VG9rZW4oJ01NJywgICBtYXRjaDF0bzIsIG1hdGNoMik7XHJcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCAgbWF0Y2hXb3JkKTtcclxuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBtYXRjaFdvcmQpO1xyXG5cclxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcclxuICAgICAgICBhcnJheVtNT05USF0gPSB0b0ludChpbnB1dCkgLSAxO1xyXG4gICAgfSk7XHJcblxyXG4gICAgYWRkUGFyc2VUb2tlbihbJ01NTScsICdNTU1NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcclxuICAgICAgICB2YXIgbW9udGggPSBjb25maWcuX2xvY2FsZS5tb250aHNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcclxuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cclxuICAgICAgICBpZiAobW9udGggIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBhcnJheVtNT05USF0gPSBtb250aDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkTW9udGggPSBpbnB1dDtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBMT0NBTEVTXHJcblxyXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNb250aHMgPSAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoJ18nKTtcclxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRocyAobSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tb250aHNbbS5tb250aCgpXTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0ID0gJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpO1xyXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzU2hvcnQgKG0pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRbbS5tb250aCgpXTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNQYXJzZSAobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xyXG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xyXG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcclxuICAgICAgICAgICAgbW9tID0gY3JlYXRlX3V0Y19fY3JlYXRlVVRDKFsyMDAwLCBpXSk7XHJcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cCgnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLCAnaScpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoJ14nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLCAnaScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xyXG4gICAgICAgICAgICAgICAgcmVnZXggPSAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKSArICd8XicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcclxuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdNTU1NJyAmJiB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnTU1NJyAmJiB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIE1PTUVOVFNcclxuXHJcbiAgICBmdW5jdGlvbiBzZXRNb250aCAobW9tLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBkYXlPZk1vbnRoO1xyXG5cclxuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgb3V0IG9mIGhlcmUhXHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcclxuICAgICAgICAgICAgLy8gVE9ETzogQW5vdGhlciBzaWxlbnQgZmFpbHVyZT9cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtb207XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRheU9mTW9udGggPSBNYXRoLm1pbihtb20uZGF0ZSgpLCBkYXlzSW5Nb250aChtb20ueWVhcigpLCB2YWx1ZSkpO1xyXG4gICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyAnTW9udGgnXSh2YWx1ZSwgZGF5T2ZNb250aCk7XHJcbiAgICAgICAgcmV0dXJuIG1vbTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCAodmFsdWUpIHtcclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzZXRNb250aCh0aGlzLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIHV0aWxzX2hvb2tzX19ob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXRfc2V0X19nZXQodGhpcywgJ01vbnRoJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldERheXNJbk1vbnRoICgpIHtcclxuICAgICAgICByZXR1cm4gZGF5c0luTW9udGgodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2hlY2tPdmVyZmxvdyAobSkge1xyXG4gICAgICAgIHZhciBvdmVyZmxvdztcclxuICAgICAgICB2YXIgYSA9IG0uX2E7XHJcblxyXG4gICAgICAgIGlmIChhICYmIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9PT0gLTIpIHtcclxuICAgICAgICAgICAgb3ZlcmZsb3cgPVxyXG4gICAgICAgICAgICAgICAgYVtNT05USF0gICAgICAgPCAwIHx8IGFbTU9OVEhdICAgICAgID4gMTEgID8gTU9OVEggOlxyXG4gICAgICAgICAgICAgICAgYVtEQVRFXSAgICAgICAgPCAxIHx8IGFbREFURV0gICAgICAgID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pID8gREFURSA6XHJcbiAgICAgICAgICAgICAgICBhW0hPVVJdICAgICAgICA8IDAgfHwgYVtIT1VSXSAgICAgICAgPiAyNCB8fCAoYVtIT1VSXSA9PT0gMjQgJiYgKGFbTUlOVVRFXSAhPT0gMCB8fCBhW1NFQ09ORF0gIT09IDAgfHwgYVtNSUxMSVNFQ09ORF0gIT09IDApKSA/IEhPVVIgOlxyXG4gICAgICAgICAgICAgICAgYVtNSU5VVEVdICAgICAgPCAwIHx8IGFbTUlOVVRFXSAgICAgID4gNTkgID8gTUlOVVRFIDpcclxuICAgICAgICAgICAgICAgIGFbU0VDT05EXSAgICAgIDwgMCB8fCBhW1NFQ09ORF0gICAgICA+IDU5ICA/IFNFQ09ORCA6XHJcbiAgICAgICAgICAgICAgICBhW01JTExJU0VDT05EXSA8IDAgfHwgYVtNSUxMSVNFQ09ORF0gPiA5OTkgPyBNSUxMSVNFQ09ORCA6XHJcbiAgICAgICAgICAgICAgICAtMTtcclxuXHJcbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93RGF5T2ZZZWFyICYmIChvdmVyZmxvdyA8IFlFQVIgfHwgb3ZlcmZsb3cgPiBEQVRFKSkge1xyXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBEQVRFO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPSBvdmVyZmxvdztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XHJcbiAgICAgICAgaWYgKHV0aWxzX2hvb2tzX19ob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPT09IGZhbHNlICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlKG1zZywgZm4pIHtcclxuICAgICAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChmaXJzdFRpbWUpIHtcclxuICAgICAgICAgICAgICAgIHdhcm4obXNnICsgJ1xcbicgKyAobmV3IEVycm9yKCkpLnN0YWNrKTtcclxuICAgICAgICAgICAgICAgIGZpcnN0VGltZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgIH0sIGZuKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGVwcmVjYXRpb25zID0ge307XHJcblxyXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xyXG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XHJcbiAgICAgICAgICAgIHdhcm4obXNnKTtcclxuICAgICAgICAgICAgZGVwcmVjYXRpb25zW25hbWVdID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXRpbHNfaG9va3NfX2hvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9IGZhbHNlO1xyXG5cclxuICAgIHZhciBmcm9tX3N0cmluZ19faXNvUmVnZXggPSAvXlxccyooPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86KFxcZFxcZC1cXGRcXGQpfChXXFxkXFxkJCl8KFdcXGRcXGQtXFxkKXwoXFxkXFxkXFxkKSkoKFR8ICkoXFxkXFxkKDpcXGRcXGQoOlxcZFxcZChcXC5cXGQrKT8pPyk/KT8oW1xcK1xcLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvO1xyXG5cclxuICAgIHZhciBpc29EYXRlcyA9IFtcclxuICAgICAgICBbJ1lZWVlZWS1NTS1ERCcsIC9bKy1dXFxkezZ9LVxcZHsyfS1cXGR7Mn0vXSxcclxuICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZHsyfS1cXGR7Mn0vXSxcclxuICAgICAgICBbJ0dHR0ctW1ddV1ctRScsIC9cXGR7NH0tV1xcZHsyfS1cXGQvXSxcclxuICAgICAgICBbJ0dHR0ctW1ddV1cnLCAvXFxkezR9LVdcXGR7Mn0vXSxcclxuICAgICAgICBbJ1lZWVktREREJywgL1xcZHs0fS1cXGR7M30vXVxyXG4gICAgXTtcclxuXHJcbiAgICAvLyBpc28gdGltZSBmb3JtYXRzIGFuZCByZWdleGVzXHJcbiAgICB2YXIgaXNvVGltZXMgPSBbXHJcbiAgICAgICAgWydISDptbTpzcy5TU1NTJywgLyhUfCApXFxkXFxkOlxcZFxcZDpcXGRcXGRcXC5cXGQrL10sXHJcbiAgICAgICAgWydISDptbTpzcycsIC8oVHwgKVxcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXHJcbiAgICAgICAgWydISDptbScsIC8oVHwgKVxcZFxcZDpcXGRcXGQvXSxcclxuICAgICAgICBbJ0hIJywgLyhUfCApXFxkXFxkL11cclxuICAgIF07XHJcblxyXG4gICAgdmFyIGFzcE5ldEpzb25SZWdleCA9IC9eXFwvP0RhdGVcXCgoXFwtP1xcZCspL2k7XHJcblxyXG4gICAgLy8gZGF0ZSBmcm9tIGlzbyBmb3JtYXRcclxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JU08oY29uZmlnKSB7XHJcbiAgICAgICAgdmFyIGksIGwsXHJcbiAgICAgICAgICAgIHN0cmluZyA9IGNvbmZpZy5faSxcclxuICAgICAgICAgICAgbWF0Y2ggPSBmcm9tX3N0cmluZ19faXNvUmVnZXguZXhlYyhzdHJpbmcpO1xyXG5cclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcclxuICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb0RhdGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzb0RhdGVzW2ldWzFdLmV4ZWMoc3RyaW5nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5fZiA9IGlzb0RhdGVzW2ldWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc29UaW1lc1tpXVsxXS5leGVjKHN0cmluZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaFs2XSBzaG91bGQgYmUgJ1QnIG9yIHNwYWNlXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9mICs9IChtYXRjaFs2XSB8fCAnICcpICsgaXNvVGltZXNbaV1bMF07XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN0cmluZy5tYXRjaChtYXRjaE9mZnNldCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZiArPSAnWic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBkYXRlIGZyb20gaXNvIGZvcm1hdCBvciBmYWxsYmFja1xyXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcclxuICAgICAgICB2YXIgbWF0Y2hlZCA9IGFzcE5ldEpzb25SZWdleC5leGVjKGNvbmZpZy5faSk7XHJcblxyXG4gICAgICAgIGlmIChtYXRjaGVkICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCttYXRjaGVkWzFdKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xyXG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XHJcbiAgICAgICAgICAgIHV0aWxzX2hvb2tzX19ob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1dGlsc19ob29rc19faG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2sgPSBkZXByZWNhdGUoXHJcbiAgICAgICAgJ21vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlLiBUaGlzIGlzICcgK1xyXG4gICAgICAgICdkaXNjb3VyYWdlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHVwY29taW5nIG1ham9yICcgK1xyXG4gICAgICAgICdyZWxlYXNlLiBQbGVhc2UgcmVmZXIgdG8gJyArXHJcbiAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDA3IGZvciBtb3JlIGluZm8uJyxcclxuICAgICAgICBmdW5jdGlvbiAoY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5faSArIChjb25maWcuX3VzZVVUQyA/ICcgVVRDJyA6ICcnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlICh5LCBtLCBkLCBoLCBNLCBzLCBtcykge1xyXG4gICAgICAgIC8vY2FuJ3QganVzdCBhcHBseSgpIHRvIGNyZWF0ZSBhIGRhdGU6XHJcbiAgICAgICAgLy9odHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE4MTM0OC9pbnN0YW50aWF0aW5nLWEtamF2YXNjcmlwdC1vYmplY3QtYnktY2FsbGluZy1wcm90b3R5cGUtY29uc3RydWN0b3ItYXBwbHlcclxuICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKTtcclxuXHJcbiAgICAgICAgLy90aGUgZGF0ZSBjb25zdHJ1Y3RvciBkb2Vzbid0IGFjY2VwdCB5ZWFycyA8IDE5NzBcclxuICAgICAgICBpZiAoeSA8IDE5NzApIHtcclxuICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDRGF0ZSAoeSkge1xyXG4gICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XHJcbiAgICAgICAgaWYgKHkgPCAxOTcwKSB7XHJcbiAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKSAlIDEwMDtcclxuICAgIH0pO1xyXG5cclxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWScsICAgNF0sICAgICAgIDAsICd5ZWFyJyk7XHJcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgIDVdLCAgICAgICAwLCAneWVhcicpO1xyXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcclxuXHJcbiAgICAvLyBBTElBU0VTXHJcblxyXG4gICAgYWRkVW5pdEFsaWFzKCd5ZWFyJywgJ3knKTtcclxuXHJcbiAgICAvLyBQQVJTSU5HXHJcblxyXG4gICAgYWRkUmVnZXhUb2tlbignWScsICAgICAgbWF0Y2hTaWduZWQpO1xyXG4gICAgYWRkUmVnZXhUb2tlbignWVknLCAgICAgbWF0Y2gxdG8yLCBtYXRjaDIpO1xyXG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsICAgbWF0Y2gxdG80LCBtYXRjaDQpO1xyXG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCAgbWF0Y2gxdG82LCBtYXRjaDYpO1xyXG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xyXG5cclxuICAgIGFkZFBhcnNlVG9rZW4oWydZWVlZWScsICdZWVlZWVknXSwgWUVBUik7XHJcbiAgICBhZGRQYXJzZVRva2VuKCdZWVlZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xyXG4gICAgICAgIGFycmF5W1lFQVJdID0gaW5wdXQubGVuZ3RoID09PSAyID8gdXRpbHNfaG9va3NfX2hvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcclxuICAgIH0pO1xyXG4gICAgYWRkUGFyc2VUb2tlbignWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XHJcbiAgICAgICAgYXJyYXlbWUVBUl0gPSB1dGlsc19ob29rc19faG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gSEVMUEVSU1xyXG5cclxuICAgIGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xyXG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xyXG4gICAgICAgIHJldHVybiAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMCkgfHwgeWVhciAlIDQwMCA9PT0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBIT09LU1xyXG5cclxuICAgIHV0aWxzX2hvb2tzX19ob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xyXG4gICAgICAgIHJldHVybiB0b0ludChpbnB1dCkgKyAodG9JbnQoaW5wdXQpID4gNjggPyAxOTAwIDogMjAwMCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIE1PTUVOVFNcclxuXHJcbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgZmFsc2UpO1xyXG5cclxuICAgIGZ1bmN0aW9uIGdldElzTGVhcFllYXIgKCkge1xyXG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHRoaXMueWVhcigpKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRGb3JtYXRUb2tlbigndycsIFsnd3cnLCAyXSwgJ3dvJywgJ3dlZWsnKTtcclxuICAgIGFkZEZvcm1hdFRva2VuKCdXJywgWydXVycsIDJdLCAnV28nLCAnaXNvV2VlaycpO1xyXG5cclxuICAgIC8vIEFMSUFTRVNcclxuXHJcbiAgICBhZGRVbml0QWxpYXMoJ3dlZWsnLCAndycpO1xyXG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrJywgJ1cnKTtcclxuXHJcbiAgICAvLyBQQVJTSU5HXHJcblxyXG4gICAgYWRkUmVnZXhUb2tlbigndycsICBtYXRjaDF0bzIpO1xyXG4gICAgYWRkUmVnZXhUb2tlbignd3cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XHJcbiAgICBhZGRSZWdleFRva2VuKCdXJywgIG1hdGNoMXRvMik7XHJcbiAgICBhZGRSZWdleFRva2VuKCdXVycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcclxuXHJcbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ3cnLCAnd3cnLCAnVycsICdXVyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcclxuICAgICAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAxKV0gPSB0b0ludChpbnB1dCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBIRUxQRVJTXHJcblxyXG4gICAgLy8gZmlyc3REYXlPZldlZWsgICAgICAgMCA9IHN1biwgNiA9IHNhdFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgdGhlIGRheSBvZiB0aGUgd2VlayB0aGF0IHN0YXJ0cyB0aGUgd2Vla1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgKHVzdWFsbHkgc3VuZGF5IG9yIG1vbmRheSlcclxuICAgIC8vIGZpcnN0RGF5T2ZXZWVrT2ZZZWFyIDAgPSBzdW4sIDYgPSBzYXRcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCB3ZWVrIGlzIHRoZSB3ZWVrIHRoYXQgY29udGFpbnMgdGhlIGZpcnN0XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICBvZiB0aGlzIGRheSBvZiB0aGUgd2Vla1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgKGVnLiBJU08gd2Vla3MgdXNlIHRodXJzZGF5ICg0KSlcclxuICAgIGZ1bmN0aW9uIHdlZWtPZlllYXIobW9tLCBmaXJzdERheU9mV2VlaywgZmlyc3REYXlPZldlZWtPZlllYXIpIHtcclxuICAgICAgICB2YXIgZW5kID0gZmlyc3REYXlPZldlZWtPZlllYXIgLSBmaXJzdERheU9mV2VlayxcclxuICAgICAgICAgICAgZGF5c1RvRGF5T2ZXZWVrID0gZmlyc3REYXlPZldlZWtPZlllYXIgLSBtb20uZGF5KCksXHJcbiAgICAgICAgICAgIGFkanVzdGVkTW9tZW50O1xyXG5cclxuXHJcbiAgICAgICAgaWYgKGRheXNUb0RheU9mV2VlayA+IGVuZCkge1xyXG4gICAgICAgICAgICBkYXlzVG9EYXlPZldlZWsgLT0gNztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkYXlzVG9EYXlPZldlZWsgPCBlbmQgLSA3KSB7XHJcbiAgICAgICAgICAgIGRheXNUb0RheU9mV2VlayArPSA3O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWRqdXN0ZWRNb21lbnQgPSBsb2NhbF9fY3JlYXRlTG9jYWwobW9tKS5hZGQoZGF5c1RvRGF5T2ZXZWVrLCAnZCcpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHdlZWs6IE1hdGguY2VpbChhZGp1c3RlZE1vbWVudC5kYXlPZlllYXIoKSAvIDcpLFxyXG4gICAgICAgICAgICB5ZWFyOiBhZGp1c3RlZE1vbWVudC55ZWFyKClcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIExPQ0FMRVNcclxuXHJcbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrIChtb20pIHtcclxuICAgICAgICByZXR1cm4gd2Vla09mWWVhcihtb20sIHRoaXMuX3dlZWsuZG93LCB0aGlzLl93ZWVrLmRveSkud2VlaztcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWsgPSB7XHJcbiAgICAgICAgZG93IDogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXHJcbiAgICAgICAgZG95IDogNiAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mV2VlayAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZZZWFyICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3k7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTU9NRU5UU1xyXG5cclxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWsgKGlucHV0KSB7XHJcbiAgICAgICAgdmFyIHdlZWsgPSB0aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrIChpbnB1dCkge1xyXG4gICAgICAgIHZhciB3ZWVrID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS53ZWVrO1xyXG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRGb3JtYXRUb2tlbignREREJywgWydEREREJywgM10sICdERERvJywgJ2RheU9mWWVhcicpO1xyXG5cclxuICAgIC8vIEFMSUFTRVNcclxuXHJcbiAgICBhZGRVbml0QWxpYXMoJ2RheU9mWWVhcicsICdEREQnKTtcclxuXHJcbiAgICAvLyBQQVJTSU5HXHJcblxyXG4gICAgYWRkUmVnZXhUb2tlbignREREJywgIG1hdGNoMXRvMyk7XHJcbiAgICBhZGRSZWdleFRva2VuKCdEREREJywgbWF0Y2gzKTtcclxuICAgIGFkZFBhcnNlVG9rZW4oWydEREQnLCAnRERERCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcclxuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEhFTFBFUlNcclxuXHJcbiAgICAvL2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZSNDYWxjdWxhdGluZ19hX2RhdGVfZ2l2ZW5fdGhlX3llYXIuMkNfd2Vla19udW1iZXJfYW5kX3dlZWtkYXlcclxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrcyh5ZWFyLCB3ZWVrLCB3ZWVrZGF5LCBmaXJzdERheU9mV2Vla09mWWVhciwgZmlyc3REYXlPZldlZWspIHtcclxuICAgICAgICB2YXIgd2VlazFKYW4gPSA2ICsgZmlyc3REYXlPZldlZWsgLSBmaXJzdERheU9mV2Vla09mWWVhciwgamFuWCA9IGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgMSArIHdlZWsxSmFuKSwgZCA9IGphblguZ2V0VVRDRGF5KCksIGRheU9mWWVhcjtcclxuICAgICAgICBpZiAoZCA8IGZpcnN0RGF5T2ZXZWVrKSB7XHJcbiAgICAgICAgICAgIGQgKz0gNztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHdlZWtkYXkgPSB3ZWVrZGF5ICE9IG51bGwgPyAxICogd2Vla2RheSA6IGZpcnN0RGF5T2ZXZWVrO1xyXG5cclxuICAgICAgICBkYXlPZlllYXIgPSAxICsgd2VlazFKYW4gKyA3ICogKHdlZWsgLSAxKSAtIGQgKyB3ZWVrZGF5O1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB5ZWFyOiBkYXlPZlllYXIgPiAwID8geWVhciA6IHllYXIgLSAxLFxyXG4gICAgICAgICAgICBkYXlPZlllYXI6IGRheU9mWWVhciA+IDAgPyAgZGF5T2ZZZWFyIDogZGF5c0luWWVhcih5ZWFyIC0gMSkgKyBkYXlPZlllYXJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1PTUVOVFNcclxuXHJcbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZlllYXIgKGlucHV0KSB7XHJcbiAgICAgICAgdmFyIGRheU9mWWVhciA9IE1hdGgucm91bmQoKHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKSAtIHRoaXMuY2xvbmUoKS5zdGFydE9mKCd5ZWFyJykpIC8gODY0ZTUpICsgMTtcclxuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKChpbnB1dCAtIGRheU9mWWVhciksICdkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGljayB0aGUgZmlyc3QgZGVmaW5lZCBvZiB0d28gb3IgdGhyZWUgYXJndW1lbnRzLlxyXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xyXG4gICAgICAgIGlmIChhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChiICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKSB7XHJcbiAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbbm93LmdldFVUQ0Z1bGxZZWFyKCksIG5vdy5nZXRVVENNb250aCgpLCBub3cuZ2V0VVRDRGF0ZSgpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFtub3cuZ2V0RnVsbFllYXIoKSwgbm93LmdldE1vbnRoKCksIG5vdy5nZXREYXRlKCldO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbnZlcnQgYW4gYXJyYXkgdG8gYSBkYXRlLlxyXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcclxuICAgIC8vIG5vdGU6IGFsbCB2YWx1ZXMgcGFzdCB0aGUgeWVhciBhcmUgb3B0aW9uYWwgYW5kIHdpbGwgZGVmYXVsdCB0byB0aGUgbG93ZXN0IHBvc3NpYmxlIHZhbHVlLlxyXG4gICAgLy8gW3llYXIsIG1vbnRoLCBkYXkgLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdXHJcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkgKGNvbmZpZykge1xyXG4gICAgICAgIHZhciBpLCBkYXRlLCBpbnB1dCA9IFtdLCBjdXJyZW50RGF0ZSwgeWVhclRvVXNlO1xyXG5cclxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN1cnJlbnREYXRlID0gY3VycmVudERhdGVBcnJheShjb25maWcpO1xyXG5cclxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXHJcbiAgICAgICAgaWYgKGNvbmZpZy5fdyAmJiBjb25maWcuX2FbREFURV0gPT0gbnVsbCAmJiBjb25maWcuX2FbTU9OVEhdID09IG51bGwpIHtcclxuICAgICAgICAgICAgZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2lmIHRoZSBkYXkgb2YgdGhlIHllYXIgaXMgc2V0LCBmaWd1cmUgb3V0IHdoYXQgaXQgaXNcclxuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIpIHtcclxuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXJUb1VzZSkpIHtcclxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd0RheU9mWWVhciA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKHllYXJUb1VzZSwgMCwgY29uZmlnLl9kYXlPZlllYXIpO1xyXG4gICAgICAgICAgICBjb25maWcuX2FbTU9OVEhdID0gZGF0ZS5nZXRVVENNb250aCgpO1xyXG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxyXG4gICAgICAgIC8vICogaWYgbm8geWVhciwgbW9udGgsIGRheSBvZiBtb250aCBhcmUgZ2l2ZW4sIGRlZmF1bHQgdG8gdG9kYXlcclxuICAgICAgICAvLyAqIGlmIGRheSBvZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBtb250aCBhbmQgeWVhclxyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXHJcbiAgICAgICAgLy8gKiBpZiB5ZWFyIGlzIGdpdmVuLCBkb24ndCBkZWZhdWx0IGFueXRoaW5nXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgJiYgY29uZmlnLl9hW2ldID09IG51bGw7ICsraSkge1xyXG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXHJcbiAgICAgICAgZm9yICg7IGkgPCA3OyBpKyspIHtcclxuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSAoY29uZmlnLl9hW2ldID09IG51bGwpID8gKGkgPT09IDIgPyAxIDogMCkgOiBjb25maWcuX2FbaV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaGVjayBmb3IgMjQ6MDA6MDAuMDAwXHJcbiAgICAgICAgaWYgKGNvbmZpZy5fYVtIT1VSXSA9PT0gMjQgJiZcclxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtNSU5VVEVdID09PSAwICYmXHJcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbU0VDT05EXSA9PT0gMCAmJlxyXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW01JTExJU0VDT05EXSA9PT0gMCkge1xyXG4gICAgICAgICAgICBjb25maWcuX25leHREYXkgPSB0cnVlO1xyXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uZmlnLl9kID0gKGNvbmZpZy5fdXNlVVRDID8gY3JlYXRlVVRDRGF0ZSA6IGNyZWF0ZURhdGUpLmFwcGx5KG51bGwsIGlucHV0KTtcclxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcclxuICAgICAgICAvLyB3aXRoIHBhcnNlWm9uZS5cclxuICAgICAgICBpZiAoY29uZmlnLl90em0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xyXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAyNDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZykge1xyXG4gICAgICAgIHZhciB3LCB3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3ksIHRlbXA7XHJcblxyXG4gICAgICAgIHcgPSBjb25maWcuX3c7XHJcbiAgICAgICAgaWYgKHcuR0cgIT0gbnVsbCB8fCB3LlcgIT0gbnVsbCB8fCB3LkUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkb3cgPSAxO1xyXG4gICAgICAgICAgICBkb3kgPSA0O1xyXG5cclxuICAgICAgICAgICAgLy8gVE9ETzogV2UgbmVlZCB0byB0YWtlIHRoZSBjdXJyZW50IGlzb1dlZWtZZWFyLCBidXQgdGhhdCBkZXBlbmRzIG9uXHJcbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcclxuICAgICAgICAgICAgLy8gYSBub3cgdmVyc2lvbiBvZiBjdXJyZW50IGNvbmZpZyAodGFrZSBsb2NhbC91dGMvb2Zmc2V0IGZsYWdzLCBhbmRcclxuICAgICAgICAgICAgLy8gY3JlYXRlIG5vdykuXHJcbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMody5HRywgY29uZmlnLl9hW1lFQVJdLCB3ZWVrT2ZZZWFyKGxvY2FsX19jcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyKTtcclxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XHJcbiAgICAgICAgICAgIHdlZWtkYXkgPSBkZWZhdWx0cyh3LkUsIDEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRvdyA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRvdztcclxuICAgICAgICAgICAgZG95ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG95O1xyXG5cclxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIHdlZWtPZlllYXIobG9jYWxfX2NyZWF0ZUxvY2FsKCksIGRvdywgZG95KS55ZWFyKTtcclxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgMSk7XHJcblxyXG4gICAgICAgICAgICBpZiAody5kICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIC8vIHdlZWtkYXkgLS0gbG93IGRheSBudW1iZXJzIGFyZSBjb25zaWRlcmVkIG5leHQgd2Vla1xyXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcclxuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgZG93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgKyt3ZWVrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsb2NhbCB3ZWVrZGF5IC0tIGNvdW50aW5nIHN0YXJ0cyBmcm9tIGJlZ2luaW5nIG9mIHdlZWtcclxuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHRvIGJlZ2luaW5nIG9mIHdlZWtcclxuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG95LCBkb3cpO1xyXG5cclxuICAgICAgICBjb25maWcuX2FbWUVBUl0gPSB0ZW1wLnllYXI7XHJcbiAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcclxuICAgIH1cclxuXHJcbiAgICB1dGlsc19ob29rc19faG9va3MuSVNPXzg2MDEgPSBmdW5jdGlvbiAoKSB7fTtcclxuXHJcbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBmb3JtYXQgc3RyaW5nXHJcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZykge1xyXG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXHJcbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gdXRpbHNfaG9va3NfX2hvb2tzLklTT184NjAxKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uZmlnLl9hID0gW107XHJcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxyXG4gICAgICAgIHZhciBzdHJpbmcgPSAnJyArIGNvbmZpZy5faSxcclxuICAgICAgICAgICAgaSwgcGFyc2VkSW5wdXQsIHRva2VucywgdG9rZW4sIHNraXBwZWQsXHJcbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXHJcbiAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggPSAwO1xyXG5cclxuICAgICAgICB0b2tlbnMgPSBleHBhbmRGb3JtYXQoY29uZmlnLl9mLCBjb25maWcuX2xvY2FsZSkubWF0Y2goZm9ybWF0dGluZ1Rva2VucykgfHwgW107XHJcblxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XHJcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8IFtdKVswXTtcclxuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XHJcbiAgICAgICAgICAgICAgICBza2lwcGVkID0gc3RyaW5nLnN1YnN0cigwLCBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNraXBwZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc2xpY2Uoc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggKz0gcGFyc2VkSW5wdXQubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cclxuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWcuX3N0cmljdCAmJiAhcGFyc2VkSW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xyXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmNoYXJzTGVmdE92ZXIgPSBzdHJpbmdMZW5ndGggLSB0b3RhbFBhcnNlZElucHV0TGVuZ3RoO1xyXG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHN0cmluZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjbGVhciBfMTJoIGZsYWcgaWYgaG91ciBpcyA8PSAxMlxyXG4gICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXHJcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPD0gMTIgJiZcclxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA+IDApIHtcclxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaGFuZGxlIG1lcmlkaWVtXHJcbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKGNvbmZpZy5fbG9jYWxlLCBjb25maWcuX2FbSE9VUl0sIGNvbmZpZy5fbWVyaWRpZW0pO1xyXG5cclxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcclxuICAgICAgICBjaGVja092ZXJmbG93KGNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcCAobG9jYWxlLCBob3VyLCBtZXJpZGllbSkge1xyXG4gICAgICAgIHZhciBpc1BtO1xyXG5cclxuICAgICAgICBpZiAobWVyaWRpZW0gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXHJcbiAgICAgICAgICAgIHJldHVybiBob3VyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubWVyaWRpZW1Ib3VyKGhvdXIsIG1lcmlkaWVtKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZS5pc1BNICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gRmFsbGJhY2tcclxuICAgICAgICAgICAgaXNQbSA9IGxvY2FsZS5pc1BNKG1lcmlkaWVtKTtcclxuICAgICAgICAgICAgaWYgKGlzUG0gJiYgaG91ciA8IDEyKSB7XHJcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghaXNQbSAmJiBob3VyID09PSAxMikge1xyXG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuXHJcbiAgICAgICAgICAgIHJldHVybiBob3VyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKSB7XHJcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXHJcbiAgICAgICAgICAgIGJlc3RNb21lbnQsXHJcblxyXG4gICAgICAgICAgICBzY29yZVRvQmVhdCxcclxuICAgICAgICAgICAgaSxcclxuICAgICAgICAgICAgY3VycmVudFNjb3JlO1xyXG5cclxuICAgICAgICBpZiAoY29uZmlnLl9mLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRm9ybWF0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoTmFOKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZy5fZi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgPSAwO1xyXG4gICAgICAgICAgICB0ZW1wQ29uZmlnID0gY29weUNvbmZpZyh7fSwgY29uZmlnKTtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRlbXBDb25maWcuX3VzZVVUQyA9IGNvbmZpZy5fdXNlVVRDO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XHJcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQodGVtcENvbmZpZyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXZhbGlkX19pc1ZhbGlkKHRlbXBDb25maWcpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55IGlucHV0IHRoYXQgd2FzIG5vdCBwYXJzZWQgYWRkIGEgcGVuYWx0eSBmb3IgdGhhdCBmb3JtYXRcclxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xyXG5cclxuICAgICAgICAgICAgLy9vciB0b2tlbnNcclxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XHJcblxyXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuc2NvcmUgPSBjdXJyZW50U2NvcmU7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2NvcmVUb0JlYXQgPT0gbnVsbCB8fCBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCkge1xyXG4gICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XHJcbiAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXh0ZW5kKGNvbmZpZywgYmVzdE1vbWVudCB8fCB0ZW1wQ29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tT2JqZWN0KGNvbmZpZykge1xyXG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGkgPSBub3JtYWxpemVPYmplY3RVbml0cyhjb25maWcuX2kpO1xyXG4gICAgICAgIGNvbmZpZy5fYSA9IFtpLnllYXIsIGkubW9udGgsIGkuZGF5IHx8IGkuZGF0ZSwgaS5ob3VyLCBpLm1pbnV0ZSwgaS5zZWNvbmQsIGkubWlsbGlzZWNvbmRdO1xyXG5cclxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnIChjb25maWcpIHtcclxuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xyXG4gICAgICAgIGlmIChyZXMuX25leHREYXkpIHtcclxuICAgICAgICAgICAgLy8gQWRkaW5nIGlzIHNtYXJ0IGVub3VnaCBhcm91bmQgRFNUXHJcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcclxuICAgICAgICAgICAgcmVzLl9uZXh0RGF5ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwcmVwYXJlQ29uZmlnIChjb25maWcpIHtcclxuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2ksXHJcbiAgICAgICAgICAgIGZvcm1hdCA9IGNvbmZpZy5fZjtcclxuXHJcbiAgICAgICAgY29uZmlnLl9sb2NhbGUgPSBjb25maWcuX2xvY2FsZSB8fCBsb2NhbGVfbG9jYWxlc19fZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XHJcblxyXG4gICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fCAoZm9ybWF0ID09PSB1bmRlZmluZWQgJiYgaW5wdXQgPT09ICcnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsaWRfX2NyZWF0ZUludmFsaWQoe251bGxJbnB1dDogdHJ1ZX0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uZmlnLl9pID0gaW5wdXQgPSBjb25maWcuX2xvY2FsZS5wcmVwYXJzZShpbnB1dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNNb21lbnQoaW5wdXQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZm9ybWF0KSkge1xyXG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xyXG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGlucHV0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSW5wdXQoY29uZmlnKSB7XHJcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pO1xyXG4gICAgICAgIGlmIChpbnB1dCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCtpbnB1dCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoaW5wdXQpKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IG1hcChpbnB1dC5zbGljZSgwKSwgZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YoaW5wdXQpID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBjb25maWdGcm9tT2JqZWN0KGNvbmZpZyk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YoaW5wdXQpID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAvLyBmcm9tIG1pbGxpc2Vjb25kc1xyXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXRpbHNfaG9va3NfX2hvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsT3JVVEMgKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBpc1VUQykge1xyXG4gICAgICAgIHZhciBjID0ge307XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YobG9jYWxlKSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgIHN0cmljdCA9IGxvY2FsZTtcclxuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBvYmplY3QgY29uc3RydWN0aW9uIG11c3QgYmUgZG9uZSB0aGlzIHdheS5cclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTQyM1xyXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XHJcbiAgICAgICAgYy5fdXNlVVRDID0gYy5faXNVVEMgPSBpc1VUQztcclxuICAgICAgICBjLl9sID0gbG9jYWxlO1xyXG4gICAgICAgIGMuX2kgPSBpbnB1dDtcclxuICAgICAgICBjLl9mID0gZm9ybWF0O1xyXG4gICAgICAgIGMuX3N0cmljdCA9IHN0cmljdDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21Db25maWcoYyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbG9jYWxfX2NyZWF0ZUxvY2FsIChpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xyXG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcclxuICAgICAgICAgJ21vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTU0OCcsXHJcbiAgICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgIHZhciBvdGhlciA9IGxvY2FsX19jcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgcmV0dXJuIG90aGVyIDwgdGhpcyA/IHRoaXMgOiBvdGhlcjtcclxuICAgICAgICAgfVxyXG4gICAgICk7XHJcblxyXG4gICAgdmFyIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcclxuICAgICAgICAnbW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNTQ4JyxcclxuICAgICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBvdGhlciA9IGxvY2FsX19jcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3RoZXIgPiB0aGlzID8gdGhpcyA6IG90aGVyO1xyXG4gICAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgLy8gUGljayBhIG1vbWVudCBtIGZyb20gbW9tZW50cyBzbyB0aGF0IG1bZm5dKG90aGVyKSBpcyB0cnVlIGZvciBhbGxcclxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cclxuICAgIC8vXHJcbiAgICAvLyBtb21lbnRzIHNob3VsZCBlaXRoZXIgYmUgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMgb3IgYW4gYXJyYXksIHdob3NlXHJcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxyXG4gICAgZnVuY3Rpb24gcGlja0J5KGZuLCBtb21lbnRzKSB7XHJcbiAgICAgICAgdmFyIHJlcywgaTtcclxuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xyXG4gICAgICAgICAgICBtb21lbnRzID0gbW9tZW50c1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxfX2NyZWF0ZUxvY2FsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcyA9IG1vbWVudHNbMF07XHJcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgaWYgKCFtb21lbnRzW2ldLmlzVmFsaWQoKSB8fCBtb21lbnRzW2ldW2ZuXShyZXMpKSB7XHJcbiAgICAgICAgICAgICAgICByZXMgPSBtb21lbnRzW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVE9ETzogVXNlIFtdLnNvcnQgaW5zdGVhZD9cclxuICAgIGZ1bmN0aW9uIG1pbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XHJcblxyXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQmVmb3JlJywgYXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbWF4ICgpIHtcclxuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNBZnRlcicsIGFyZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIER1cmF0aW9uIChkdXJhdGlvbikge1xyXG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXHJcbiAgICAgICAgICAgIHllYXJzID0gbm9ybWFsaXplZElucHV0LnllYXIgfHwgMCxcclxuICAgICAgICAgICAgcXVhcnRlcnMgPSBub3JtYWxpemVkSW5wdXQucXVhcnRlciB8fCAwLFxyXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcclxuICAgICAgICAgICAgd2Vla3MgPSBub3JtYWxpemVkSW5wdXQud2VlayB8fCAwLFxyXG4gICAgICAgICAgICBkYXlzID0gbm9ybWFsaXplZElucHV0LmRheSB8fCAwLFxyXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXHJcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBub3JtYWxpemVkSW5wdXQubWludXRlIHx8IDAsXHJcbiAgICAgICAgICAgIHNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQuc2Vjb25kIHx8IDAsXHJcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xyXG5cclxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxyXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9ICttaWxsaXNlY29uZHMgK1xyXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxyXG4gICAgICAgICAgICBtaW51dGVzICogNmU0ICsgLy8gMTAwMCAqIDYwXHJcbiAgICAgICAgICAgIGhvdXJzICogMzZlNTsgLy8gMTAwMCAqIDYwICogNjBcclxuICAgICAgICAvLyBCZWNhdXNlIG9mIGRhdGVBZGRSZW1vdmUgdHJlYXRzIDI0IGhvdXJzIGFzIGRpZmZlcmVudCBmcm9tIGFcclxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XHJcbiAgICAgICAgdGhpcy5fZGF5cyA9ICtkYXlzICtcclxuICAgICAgICAgICAgd2Vla3MgKiA3O1xyXG4gICAgICAgIC8vIEl0IGlzIGltcG9zc2libGUgdHJhbnNsYXRlIG1vbnRocyBpbnRvIGRheXMgd2l0aG91dCBrbm93aW5nXHJcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcclxuICAgICAgICAvLyBpdCBzZXBhcmF0ZWx5LlxyXG4gICAgICAgIHRoaXMuX21vbnRocyA9ICttb250aHMgK1xyXG4gICAgICAgICAgICBxdWFydGVycyAqIDMgK1xyXG4gICAgICAgICAgICB5ZWFycyAqIDEyO1xyXG5cclxuICAgICAgICB0aGlzLl9kYXRhID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGxvY2FsZV9sb2NhbGVzX19nZXRMb2NhbGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fYnViYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvbiAob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIER1cmF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIG9mZnNldCAodG9rZW4sIHNlcGFyYXRvcikge1xyXG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLnV0Y09mZnNldCgpO1xyXG4gICAgICAgICAgICB2YXIgc2lnbiA9ICcrJztcclxuICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcclxuICAgICAgICAgICAgICAgIG9mZnNldCA9IC1vZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBzaWduICsgemVyb0ZpbGwofn4ob2Zmc2V0IC8gNjApLCAyKSArIHNlcGFyYXRvciArIHplcm9GaWxsKH5+KG9mZnNldCkgJSA2MCwgMik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb2Zmc2V0KCdaJywgJzonKTtcclxuICAgIG9mZnNldCgnWlonLCAnJyk7XHJcblxyXG4gICAgLy8gUEFSU0lOR1xyXG5cclxuICAgIGFkZFJlZ2V4VG9rZW4oJ1onLCAgbWF0Y2hPZmZzZXQpO1xyXG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaE9mZnNldCk7XHJcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcclxuICAgICAgICBjb25maWcuX3VzZVVUQyA9IHRydWU7XHJcbiAgICAgICAgY29uZmlnLl90em0gPSBvZmZzZXRGcm9tU3RyaW5nKGlucHV0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEhFTFBFUlNcclxuXHJcbiAgICAvLyB0aW1lem9uZSBjaHVua2VyXHJcbiAgICAvLyAnKzEwOjAwJyA+IFsnMTAnLCAgJzAwJ11cclxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxyXG4gICAgdmFyIGNodW5rT2Zmc2V0ID0gLyhbXFwrXFwtXXxcXGRcXGQpL2dpO1xyXG5cclxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcoc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoZXMgPSAoKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hPZmZzZXQpIHx8IFtdKTtcclxuICAgICAgICB2YXIgY2h1bmsgICA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcclxuICAgICAgICB2YXIgcGFydHMgICA9IChjaHVuayArICcnKS5tYXRjaChjaHVua09mZnNldCkgfHwgWyctJywgMCwgMF07XHJcbiAgICAgICAgdmFyIG1pbnV0ZXMgPSArKHBhcnRzWzFdICogNjApICsgdG9JbnQocGFydHNbMl0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcGFydHNbMF0gPT09ICcrJyA/IG1pbnV0ZXMgOiAtbWludXRlcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXR1cm4gYSBtb21lbnQgZnJvbSBpbnB1dCwgdGhhdCBpcyBsb2NhbC91dGMvem9uZSBlcXVpdmFsZW50IHRvIG1vZGVsLlxyXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xyXG4gICAgICAgIHZhciByZXMsIGRpZmY7XHJcbiAgICAgICAgaWYgKG1vZGVsLl9pc1VUQykge1xyXG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xyXG4gICAgICAgICAgICBkaWZmID0gKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpID8gK2lucHV0IDogK2xvY2FsX19jcmVhdGVMb2NhbChpbnB1dCkpIC0gKCtyZXMpO1xyXG4gICAgICAgICAgICAvLyBVc2UgbG93LWxldmVsIGFwaSwgYmVjYXVzZSB0aGlzIGZuIGlzIGxvdy1sZXZlbCBhcGkuXHJcbiAgICAgICAgICAgIHJlcy5fZC5zZXRUaW1lKCtyZXMuX2QgKyBkaWZmKTtcclxuICAgICAgICAgICAgdXRpbHNfaG9va3NfX2hvb2tzLnVwZGF0ZU9mZnNldChyZXMsIGZhbHNlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxfX2NyZWF0ZUxvY2FsKGlucHV0KS5sb2NhbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXREYXRlT2Zmc2V0IChtKSB7XHJcbiAgICAgICAgLy8gT24gRmlyZWZveC4yNCBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgYSBmbG9hdGluZyBwb2ludC5cclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcclxuICAgICAgICByZXR1cm4gLU1hdGgucm91bmQobS5fZC5nZXRUaW1lem9uZU9mZnNldCgpIC8gMTUpICogMTU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSE9PS1NcclxuXHJcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGEgbW9tZW50IGlzIG11dGF0ZWQuXHJcbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cclxuICAgIHV0aWxzX2hvb2tzX19ob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcclxuXHJcbiAgICAvLyBNT01FTlRTXHJcblxyXG4gICAgLy8ga2VlcExvY2FsVGltZSA9IHRydWUgbWVhbnMgb25seSBjaGFuZ2UgdGhlIHRpbWV6b25lLCB3aXRob3V0XHJcbiAgICAvLyBhZmZlY3RpbmcgdGhlIGxvY2FsIGhvdXIuIFNvIDU6MzE6MjYgKzAzMDAgLS1bdXRjT2Zmc2V0KDIsIHRydWUpXS0tPlxyXG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxyXG4gICAgLy8gKzAyMDAsIHNvIHdlIGFkanVzdCB0aGUgdGltZSBhcyBuZWVkZWQsIHRvIGJlIHZhbGlkLlxyXG4gICAgLy9cclxuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxyXG4gICAgLy8gZnJvbSB0aGUgYWN0dWFsIHJlcHJlc2VudGVkIHRpbWUuIFRoYXQgaXMgd2h5IHdlIGNhbGwgdXBkYXRlT2Zmc2V0XHJcbiAgICAvLyBhIHNlY29uZCB0aW1lLiBJbiBjYXNlIGl0IHdhbnRzIHVzIHRvIGNoYW5nZSB0aGUgb2Zmc2V0IGFnYWluXHJcbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcclxuICAgIC8vIHRoZXJlIGlzIG5vIHN1Y2ggdGltZSBpbiB0aGUgZ2l2ZW4gdGltZXpvbmUuXHJcbiAgICBmdW5jdGlvbiBnZXRTZXRPZmZzZXQgKGlucHV0LCBrZWVwTG9jYWxUaW1lKSB7XHJcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxyXG4gICAgICAgICAgICBsb2NhbEFkanVzdDtcclxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgaW5wdXQgPSBvZmZzZXRGcm9tU3RyaW5nKGlucHV0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoaW5wdXQpIDwgMTYpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzVVRDICYmIGtlZXBMb2NhbFRpbWUpIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9vZmZzZXQgPSBpbnB1dDtcclxuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAobG9jYWxBZGp1c3QgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGQobG9jYWxBZGp1c3QsICdtJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gaW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIGlmICgha2VlcExvY2FsVGltZSB8fCB0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWRkX3N1YnRyYWN0X19hZGRTdWJ0cmFjdCh0aGlzLCBjcmVhdGVfX2NyZWF0ZUR1cmF0aW9uKGlucHV0IC0gb2Zmc2V0LCAnbScpLCAxLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbHNfaG9va3NfX2hvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyBvZmZzZXQgOiBnZXREYXRlT2Zmc2V0KHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRTZXRab25lIChpbnB1dCwga2VlcExvY2FsVGltZSkge1xyXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dCA9IC1pbnB1dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIC10aGlzLnV0Y09mZnNldCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyAoa2VlcExvY2FsVGltZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsIChrZWVwTG9jYWxUaW1lKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGtlZXBMb2NhbFRpbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VidHJhY3QoZ2V0RGF0ZU9mZnNldCh0aGlzKSwgJ20nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3R6bSkge1xyXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0aGlzLl90em0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2kgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KG9mZnNldEZyb21TdHJpbmcodGhpcy5faSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBoYXNBbGlnbmVkSG91ck9mZnNldCAoaW5wdXQpIHtcclxuICAgICAgICBpbnB1dCA9IGlucHV0ID8gbG9jYWxfX2NyZWF0ZUxvY2FsKGlucHV0KS51dGNPZmZzZXQoKSA6IDA7XHJcblxyXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lICgpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpIHx8XHJcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCAoKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9pc0RTVFNoaWZ0ZWQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYyA9IHt9O1xyXG5cclxuICAgICAgICBjb3B5Q29uZmlnKGMsIHRoaXMpO1xyXG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xyXG5cclxuICAgICAgICBpZiAoYy5fYSkge1xyXG4gICAgICAgICAgICB2YXIgb3RoZXIgPSBjLl9pc1VUQyA/IGNyZWF0ZV91dGNfX2NyZWF0ZVVUQyhjLl9hKSA6IGxvY2FsX19jcmVhdGVMb2NhbChjLl9hKTtcclxuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID0gdGhpcy5pc1ZhbGlkKCkgJiZcclxuICAgICAgICAgICAgICAgIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGlzTG9jYWwgKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5faXNVVEM7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQgKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpc1V0YyAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgYXNwTmV0UmVnZXggPSAvKFxcLSk/KD86KFxcZCopXFwuKT8oXFxkKylcXDooXFxkKykoPzpcXDooXFxkKylcXC4/KFxcZHszfSk/KT8vO1xyXG5cclxuICAgIC8vIGZyb20gaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9jbG9zdXJlX2dvb2dfZGF0ZV9kYXRlLmpzLnNvdXJjZS5odG1sXHJcbiAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXHJcbiAgICB2YXIgY3JlYXRlX19pc29SZWdleCA9IC9eKC0pP1AoPzooPzooWzAtOSwuXSopWSk/KD86KFswLTksLl0qKU0pPyg/OihbMC05LC5dKilEKT8oPzpUKD86KFswLTksLl0qKUgpPyg/OihbMC05LC5dKilNKT8oPzooWzAtOSwuXSopUyk/KT98KFswLTksLl0qKVcpJC87XHJcblxyXG4gICAgZnVuY3Rpb24gY3JlYXRlX19jcmVhdGVEdXJhdGlvbiAoaW5wdXQsIGtleSkge1xyXG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGlucHV0LFxyXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxyXG4gICAgICAgICAgICBtYXRjaCA9IG51bGwsXHJcbiAgICAgICAgICAgIHNpZ24sXHJcbiAgICAgICAgICAgIHJldCxcclxuICAgICAgICAgICAgZGlmZlJlcztcclxuXHJcbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgbXMgOiBpbnB1dC5fbWlsbGlzZWNvbmRzLFxyXG4gICAgICAgICAgICAgICAgZCAgOiBpbnB1dC5fZGF5cyxcclxuICAgICAgICAgICAgICAgIE0gIDogaW5wdXQuX21vbnRoc1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xyXG4gICAgICAgICAgICBpZiAoa2V5KSB7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbltrZXldID0gaW5wdXQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi5taWxsaXNlY29uZHMgPSBpbnB1dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoISEobWF0Y2ggPSBhc3BOZXRSZWdleC5leGVjKGlucHV0KSkpIHtcclxuICAgICAgICAgICAgc2lnbiA9IChtYXRjaFsxXSA9PT0gJy0nKSA/IC0xIDogMTtcclxuICAgICAgICAgICAgZHVyYXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgICB5ICA6IDAsXHJcbiAgICAgICAgICAgICAgICBkICA6IHRvSW50KG1hdGNoW0RBVEVdKSAgICAgICAgKiBzaWduLFxyXG4gICAgICAgICAgICAgICAgaCAgOiB0b0ludChtYXRjaFtIT1VSXSkgICAgICAgICogc2lnbixcclxuICAgICAgICAgICAgICAgIG0gIDogdG9JbnQobWF0Y2hbTUlOVVRFXSkgICAgICAqIHNpZ24sXHJcbiAgICAgICAgICAgICAgICBzICA6IHRvSW50KG1hdGNoW1NFQ09ORF0pICAgICAgKiBzaWduLFxyXG4gICAgICAgICAgICAgICAgbXMgOiB0b0ludChtYXRjaFtNSUxMSVNFQ09ORF0pICogc2lnblxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoISEobWF0Y2ggPSBjcmVhdGVfX2lzb1JlZ2V4LmV4ZWMoaW5wdXQpKSkge1xyXG4gICAgICAgICAgICBzaWduID0gKG1hdGNoWzFdID09PSAnLScpID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgIHkgOiBwYXJzZUlzbyhtYXRjaFsyXSwgc2lnbiksXHJcbiAgICAgICAgICAgICAgICBNIDogcGFyc2VJc28obWF0Y2hbM10sIHNpZ24pLFxyXG4gICAgICAgICAgICAgICAgZCA6IHBhcnNlSXNvKG1hdGNoWzRdLCBzaWduKSxcclxuICAgICAgICAgICAgICAgIGggOiBwYXJzZUlzbyhtYXRjaFs1XSwgc2lnbiksXHJcbiAgICAgICAgICAgICAgICBtIDogcGFyc2VJc28obWF0Y2hbNl0sIHNpZ24pLFxyXG4gICAgICAgICAgICAgICAgcyA6IHBhcnNlSXNvKG1hdGNoWzddLCBzaWduKSxcclxuICAgICAgICAgICAgICAgIHcgOiBwYXJzZUlzbyhtYXRjaFs4XSwgc2lnbilcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09IG51bGwpIHsvLyBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZHVyYXRpb24gPT09ICdvYmplY3QnICYmICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbikpIHtcclxuICAgICAgICAgICAgZGlmZlJlcyA9IG1vbWVudHNEaWZmZXJlbmNlKGxvY2FsX19jcmVhdGVMb2NhbChkdXJhdGlvbi5mcm9tKSwgbG9jYWxfX2NyZWF0ZUxvY2FsKGR1cmF0aW9uLnRvKSk7XHJcblxyXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xyXG4gICAgICAgICAgICBkdXJhdGlvbi5tcyA9IGRpZmZSZXMubWlsbGlzZWNvbmRzO1xyXG4gICAgICAgICAgICBkdXJhdGlvbi5NID0gZGlmZlJlcy5tb250aHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXQgPSBuZXcgRHVyYXRpb24oZHVyYXRpb24pO1xyXG5cclxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkgJiYgaGFzT3duUHJvcChpbnB1dCwgJ19sb2NhbGUnKSkge1xyXG4gICAgICAgICAgICByZXQuX2xvY2FsZSA9IGlucHV0Ll9sb2NhbGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZV9fY3JlYXRlRHVyYXRpb24uZm4gPSBEdXJhdGlvbi5wcm90b3R5cGU7XHJcblxyXG4gICAgZnVuY3Rpb24gcGFyc2VJc28gKGlucCwgc2lnbikge1xyXG4gICAgICAgIC8vIFdlJ2Qgbm9ybWFsbHkgdXNlIH5+aW5wIGZvciB0aGlzLCBidXQgdW5mb3J0dW5hdGVseSBpdCBhbHNvXHJcbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXHJcbiAgICAgICAgLy8gaW5wIG1heSBiZSB1bmRlZmluZWQsIHNvIGNhcmVmdWwgY2FsbGluZyByZXBsYWNlIG9uIGl0LlxyXG4gICAgICAgIHZhciByZXMgPSBpbnAgJiYgcGFyc2VGbG9hdChpbnAucmVwbGFjZSgnLCcsICcuJykpO1xyXG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcclxuICAgICAgICByZXR1cm4gKGlzTmFOKHJlcykgPyAwIDogcmVzKSAqIHNpZ247XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xyXG4gICAgICAgIHZhciByZXMgPSB7bWlsbGlzZWNvbmRzOiAwLCBtb250aHM6IDB9O1xyXG5cclxuICAgICAgICByZXMubW9udGhzID0gb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArXHJcbiAgICAgICAgICAgIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcclxuICAgICAgICBpZiAoYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpLmlzQWZ0ZXIob3RoZXIpKSB7XHJcbiAgICAgICAgICAgIC0tcmVzLm1vbnRocztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSArb3RoZXIgLSArKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcclxuICAgICAgICB2YXIgcmVzO1xyXG4gICAgICAgIG90aGVyID0gY2xvbmVXaXRoT2Zmc2V0KG90aGVyLCBiYXNlKTtcclxuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcclxuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XHJcbiAgICAgICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSAtcmVzLm1pbGxpc2Vjb25kcztcclxuICAgICAgICAgICAgcmVzLm1vbnRocyA9IC1yZXMubW9udGhzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCwgcGVyaW9kKSB7XHJcbiAgICAgICAgICAgIHZhciBkdXIsIHRtcDtcclxuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XHJcbiAgICAgICAgICAgIGlmIChwZXJpb2QgIT09IG51bGwgJiYgIWlzTmFOKCtwZXJpb2QpKSB7XHJcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUobmFtZSwgJ21vbWVudCgpLicgKyBuYW1lICArICcocGVyaW9kLCBudW1iZXIpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbW9tZW50KCkuJyArIG5hbWUgKyAnKG51bWJlciwgcGVyaW9kKS4nKTtcclxuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDsgdmFsID0gcGVyaW9kOyBwZXJpb2QgPSB0bXA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhbCA9IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gK3ZhbCA6IHZhbDtcclxuICAgICAgICAgICAgZHVyID0gY3JlYXRlX19jcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XHJcbiAgICAgICAgICAgIGFkZF9zdWJ0cmFjdF9fYWRkU3VidHJhY3QodGhpcywgZHVyLCBkaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGFkZF9zdWJ0cmFjdF9fYWRkU3VidHJhY3QgKG1vbSwgZHVyYXRpb24sIGlzQWRkaW5nLCB1cGRhdGVPZmZzZXQpIHtcclxuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gZHVyYXRpb24uX21pbGxpc2Vjb25kcyxcclxuICAgICAgICAgICAgZGF5cyA9IGR1cmF0aW9uLl9kYXlzLFxyXG4gICAgICAgICAgICBtb250aHMgPSBkdXJhdGlvbi5fbW9udGhzO1xyXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcclxuXHJcbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xyXG4gICAgICAgICAgICBtb20uX2Quc2V0VGltZSgrbW9tLl9kICsgbWlsbGlzZWNvbmRzICogaXNBZGRpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGF5cykge1xyXG4gICAgICAgICAgICBnZXRfc2V0X19zZXQobW9tLCAnRGF0ZScsIGdldF9zZXRfX2dldChtb20sICdEYXRlJykgKyBkYXlzICogaXNBZGRpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobW9udGhzKSB7XHJcbiAgICAgICAgICAgIHNldE1vbnRoKG1vbSwgZ2V0X3NldF9fZ2V0KG1vbSwgJ01vbnRoJykgKyBtb250aHMgKiBpc0FkZGluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1cGRhdGVPZmZzZXQpIHtcclxuICAgICAgICAgICAgdXRpbHNfaG9va3NfX2hvb2tzLnVwZGF0ZU9mZnNldChtb20sIGRheXMgfHwgbW9udGhzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGFkZF9zdWJ0cmFjdF9fYWRkICAgICAgPSBjcmVhdGVBZGRlcigxLCAnYWRkJyk7XHJcbiAgICB2YXIgYWRkX3N1YnRyYWN0X19zdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcclxuXHJcbiAgICBmdW5jdGlvbiBtb21lbnRfY2FsZW5kYXJfX2NhbGVuZGFyICh0aW1lLCBmb3JtYXRzKSB7XHJcbiAgICAgICAgLy8gV2Ugd2FudCB0byBjb21wYXJlIHRoZSBzdGFydCBvZiB0b2RheSwgdnMgdGhpcy5cclxuICAgICAgICAvLyBHZXR0aW5nIHN0YXJ0LW9mLXRvZGF5IGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBsb2NhbC91dGMvb2Zmc2V0IG9yIG5vdC5cclxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBsb2NhbF9fY3JlYXRlTG9jYWwoKSxcclxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXHJcbiAgICAgICAgICAgIGRpZmYgPSB0aGlzLmRpZmYoc29kLCAnZGF5cycsIHRydWUpLFxyXG4gICAgICAgICAgICBmb3JtYXQgPSBkaWZmIDwgLTYgPyAnc2FtZUVsc2UnIDpcclxuICAgICAgICAgICAgICAgIGRpZmYgPCAtMSA/ICdsYXN0V2VlaycgOlxyXG4gICAgICAgICAgICAgICAgZGlmZiA8IDAgPyAnbGFzdERheScgOlxyXG4gICAgICAgICAgICAgICAgZGlmZiA8IDEgPyAnc2FtZURheScgOlxyXG4gICAgICAgICAgICAgICAgZGlmZiA8IDIgPyAnbmV4dERheScgOlxyXG4gICAgICAgICAgICAgICAgZGlmZiA8IDcgPyAnbmV4dFdlZWsnIDogJ3NhbWVFbHNlJztcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQoZm9ybWF0cyAmJiBmb3JtYXRzW2Zvcm1hdF0gfHwgdGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoZm9ybWF0LCB0aGlzLCBsb2NhbF9fY3JlYXRlTG9jYWwobm93KSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGNsb25lICgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IE1vbWVudCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpc0FmdGVyIChpbnB1dCwgdW5pdHMpIHtcclxuICAgICAgICB2YXIgaW5wdXRNcztcclxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHR5cGVvZiB1bml0cyAhPT0gJ3VuZGVmaW5lZCcgPyB1bml0cyA6ICdtaWxsaXNlY29uZCcpO1xyXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xyXG4gICAgICAgICAgICBpbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogbG9jYWxfX2NyZWF0ZUxvY2FsKGlucHV0KTtcclxuICAgICAgICAgICAgcmV0dXJuICt0aGlzID4gK2lucHV0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlucHV0TXMgPSBpc01vbWVudChpbnB1dCkgPyAraW5wdXQgOiArbG9jYWxfX2NyZWF0ZUxvY2FsKGlucHV0KTtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0TXMgPCArdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpc0JlZm9yZSAoaW5wdXQsIHVuaXRzKSB7XHJcbiAgICAgICAgdmFyIGlucHV0TXM7XHJcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh0eXBlb2YgdW5pdHMgIT09ICd1bmRlZmluZWQnID8gdW5pdHMgOiAnbWlsbGlzZWNvbmQnKTtcclxuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcclxuICAgICAgICAgICAgaW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGxvY2FsX19jcmVhdGVMb2NhbChpbnB1dCk7XHJcbiAgICAgICAgICAgIHJldHVybiArdGhpcyA8ICtpbnB1dDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbnB1dE1zID0gaXNNb21lbnQoaW5wdXQpID8gK2lucHV0IDogK2xvY2FsX19jcmVhdGVMb2NhbChpbnB1dCk7XHJcbiAgICAgICAgICAgIHJldHVybiArdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKSA8IGlucHV0TXM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGlzQmV0d2VlbiAoZnJvbSwgdG8sIHVuaXRzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBZnRlcihmcm9tLCB1bml0cykgJiYgdGhpcy5pc0JlZm9yZSh0bywgdW5pdHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGlzU2FtZSAoaW5wdXQsIHVuaXRzKSB7XHJcbiAgICAgICAgdmFyIGlucHV0TXM7XHJcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyB8fCAnbWlsbGlzZWNvbmQnKTtcclxuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcclxuICAgICAgICAgICAgaW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGxvY2FsX19jcmVhdGVMb2NhbChpbnB1dCk7XHJcbiAgICAgICAgICAgIHJldHVybiArdGhpcyA9PT0gK2lucHV0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlucHV0TXMgPSArbG9jYWxfX2NyZWF0ZUxvY2FsKGlucHV0KTtcclxuICAgICAgICAgICAgcmV0dXJuICsodGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpKSA8PSBpbnB1dE1zICYmIGlucHV0TXMgPD0gKyh0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZGlmZiAoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XHJcbiAgICAgICAgdmFyIHRoYXQgPSBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIHRoaXMpLFxyXG4gICAgICAgICAgICB6b25lRGVsdGEgPSAodGhhdC51dGNPZmZzZXQoKSAtIHRoaXMudXRjT2Zmc2V0KCkpICogNmU0LFxyXG4gICAgICAgICAgICBkZWx0YSwgb3V0cHV0O1xyXG5cclxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcclxuXHJcbiAgICAgICAgaWYgKHVuaXRzID09PSAneWVhcicgfHwgdW5pdHMgPT09ICdtb250aCcgfHwgdW5pdHMgPT09ICdxdWFydGVyJykge1xyXG4gICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCk7XHJcbiAgICAgICAgICAgIGlmICh1bml0cyA9PT0gJ3F1YXJ0ZXInKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQgLyAzO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVuaXRzID09PSAneWVhcicpIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dCAvIDEyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGVsdGEgPSB0aGlzIC0gdGhhdDtcclxuICAgICAgICAgICAgb3V0cHV0ID0gdW5pdHMgPT09ICdzZWNvbmQnID8gZGVsdGEgLyAxZTMgOiAvLyAxMDAwXHJcbiAgICAgICAgICAgICAgICB1bml0cyA9PT0gJ21pbnV0ZScgPyBkZWx0YSAvIDZlNCA6IC8vIDEwMDAgKiA2MFxyXG4gICAgICAgICAgICAgICAgdW5pdHMgPT09ICdob3VyJyA/IGRlbHRhIC8gMzZlNSA6IC8vIDEwMDAgKiA2MCAqIDYwXHJcbiAgICAgICAgICAgICAgICB1bml0cyA9PT0gJ2RheScgPyAoZGVsdGEgLSB6b25lRGVsdGEpIC8gODY0ZTUgOiAvLyAxMDAwICogNjAgKiA2MCAqIDI0LCBuZWdhdGUgZHN0XHJcbiAgICAgICAgICAgICAgICB1bml0cyA9PT0gJ3dlZWsnID8gKGRlbHRhIC0gem9uZURlbHRhKSAvIDYwNDhlNSA6IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XHJcbiAgICAgICAgICAgICAgICBkZWx0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZiAoYSwgYikge1xyXG4gICAgICAgIC8vIGRpZmZlcmVuY2UgaW4gbW9udGhzXHJcbiAgICAgICAgdmFyIHdob2xlTW9udGhEaWZmID0gKChiLnllYXIoKSAtIGEueWVhcigpKSAqIDEyKSArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxyXG4gICAgICAgICAgICAvLyBiIGlzIGluIChhbmNob3IgLSAxIG1vbnRoLCBhbmNob3IgKyAxIG1vbnRoKVxyXG4gICAgICAgICAgICBhbmNob3IgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmLCAnbW9udGhzJyksXHJcbiAgICAgICAgICAgIGFuY2hvcjIsIGFkanVzdDtcclxuXHJcbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XHJcbiAgICAgICAgICAgIGFuY2hvcjIgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmIC0gMSwgJ21vbnRocycpO1xyXG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxyXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgKyAxLCAnbW9udGhzJyk7XHJcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXHJcbiAgICAgICAgICAgIGFkanVzdCA9IChiIC0gYW5jaG9yKSAvIChhbmNob3IyIC0gYW5jaG9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KTtcclxuICAgIH1cclxuXHJcbiAgICB1dGlsc19ob29rc19faG9va3MuZGVmYXVsdEZvcm1hdCA9ICdZWVlZLU1NLUREVEhIOm1tOnNzWic7XHJcblxyXG4gICAgZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCdlbicpLmZvcm1hdCgnZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWlonKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBtb21lbnRfZm9ybWF0X190b0lTT1N0cmluZyAoKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0aGlzLmNsb25lKCkudXRjKCk7XHJcbiAgICAgICAgaWYgKDAgPCBtLnllYXIoKSAmJiBtLnllYXIoKSA8PSA5OTk5KSB7XHJcbiAgICAgICAgICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChtLCAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChtLCAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZvcm1hdCAoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICB2YXIgb3V0cHV0ID0gZm9ybWF0TW9tZW50KHRoaXMsIGlucHV0U3RyaW5nIHx8IHV0aWxzX2hvb2tzX19ob29rcy5kZWZhdWx0Rm9ybWF0KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZyb20gKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3JlYXRlX19jcmVhdGVEdXJhdGlvbih7dG86IHRoaXMsIGZyb206IHRpbWV9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZyb21Ob3cgKHdpdGhvdXRTdWZmaXgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGxvY2FsX19jcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiB0byAodGltZSwgd2l0aG91dFN1ZmZpeCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjcmVhdGVfX2NyZWF0ZUR1cmF0aW9uKHtmcm9tOiB0aGlzLCB0bzogdGltZX0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdG9Ob3cgKHdpdGhvdXRTdWZmaXgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50byhsb2NhbF9fY3JlYXRlTG9jYWwoKSwgd2l0aG91dFN1ZmZpeCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbG9jYWxlIChrZXkpIHtcclxuICAgICAgICB2YXIgbmV3TG9jYWxlRGF0YTtcclxuXHJcbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGUuX2FiYnI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGxvY2FsZV9sb2NhbGVzX19nZXRMb2NhbGUoa2V5KTtcclxuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9jYWxlID0gbmV3TG9jYWxlRGF0YTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGxhbmcgPSBkZXByZWNhdGUoXHJcbiAgICAgICAgJ21vbWVudCgpLmxhbmcoKSBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCB1c2UgbW9tZW50KCkubG9jYWxlRGF0YSgpIHRvIGdldCB0aGUgbGFuZ3VhZ2UgY29uZmlndXJhdGlvbi4gVXNlIG1vbWVudCgpLmxvY2FsZSgpIHRvIGNoYW5nZSBsYW5ndWFnZXMuJyxcclxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEgKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc3RhcnRPZiAodW5pdHMpIHtcclxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcclxuICAgICAgICAvLyB0aGUgZm9sbG93aW5nIHN3aXRjaCBpbnRlbnRpb25hbGx5IG9taXRzIGJyZWFrIGtleXdvcmRzXHJcbiAgICAgICAgLy8gdG8gdXRpbGl6ZSBmYWxsaW5nIHRocm91Z2ggdGhlIGNhc2VzLlxyXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcclxuICAgICAgICBjYXNlICd5ZWFyJzpcclxuICAgICAgICAgICAgdGhpcy5tb250aCgwKTtcclxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xyXG4gICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxyXG4gICAgICAgIGNhc2UgJ21vbnRoJzpcclxuICAgICAgICAgICAgdGhpcy5kYXRlKDEpO1xyXG4gICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXHJcbiAgICAgICAgY2FzZSAnd2Vlayc6XHJcbiAgICAgICAgY2FzZSAnaXNvV2Vlayc6XHJcbiAgICAgICAgY2FzZSAnZGF5JzpcclxuICAgICAgICAgICAgdGhpcy5ob3VycygwKTtcclxuICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xyXG4gICAgICAgIGNhc2UgJ2hvdXInOlxyXG4gICAgICAgICAgICB0aGlzLm1pbnV0ZXMoMCk7XHJcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cclxuICAgICAgICBjYXNlICdtaW51dGUnOlxyXG4gICAgICAgICAgICB0aGlzLnNlY29uZHMoMCk7XHJcbiAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cclxuICAgICAgICBjYXNlICdzZWNvbmQnOlxyXG4gICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kcygwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHdlZWtzIGFyZSBhIHNwZWNpYWwgY2FzZVxyXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ3dlZWsnKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVuaXRzID09PSAnaXNvV2VlaycpIHtcclxuICAgICAgICAgICAgdGhpcy5pc29XZWVrZGF5KDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcXVhcnRlcnMgYXJlIGFsc28gc3BlY2lhbFxyXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ3F1YXJ0ZXInKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9udGgoTWF0aC5mbG9vcih0aGlzLm1vbnRoKCkgLyAzKSAqIDMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZW5kT2YgKHVuaXRzKSB7XHJcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XHJcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0T2YodW5pdHMpLmFkZCgxLCAodW5pdHMgPT09ICdpc29XZWVrJyA/ICd3ZWVrJyA6IHVuaXRzKSkuc3VidHJhY3QoMSwgJ21zJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdG9fdHlwZV9fdmFsdWVPZiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICt0aGlzLl9kIC0gKCh0aGlzLl9vZmZzZXQgfHwgMCkgKiA2MDAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdW5peCAoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoK3RoaXMgLyAxMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiB0b0RhdGUgKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9vZmZzZXQgPyBuZXcgRGF0ZSgrdGhpcykgOiB0aGlzLl9kO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHRvQXJyYXkgKCkge1xyXG4gICAgICAgIHZhciBtID0gdGhpcztcclxuICAgICAgICByZXR1cm4gW20ueWVhcigpLCBtLm1vbnRoKCksIG0uZGF0ZSgpLCBtLmhvdXIoKSwgbS5taW51dGUoKSwgbS5zZWNvbmQoKSwgbS5taWxsaXNlY29uZCgpXTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiB0b09iamVjdCAoKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHllYXJzOiBtLnllYXIoKSxcclxuICAgICAgICAgICAgbW9udGhzOiBtLm1vbnRoKCksXHJcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxyXG4gICAgICAgICAgICBob3VyczogbS5ob3VycygpLFxyXG4gICAgICAgICAgICBtaW51dGVzOiBtLm1pbnV0ZXMoKSxcclxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXHJcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kczogbS5taWxsaXNlY29uZHMoKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbW9tZW50X3ZhbGlkX19pc1ZhbGlkICgpIHtcclxuICAgICAgICByZXR1cm4gdmFsaWRfX2lzVmFsaWQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcGFyc2luZ0ZsYWdzICgpIHtcclxuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBnZXRQYXJzaW5nRmxhZ3ModGhpcykpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGludmFsaWRBdCAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldFBhcnNpbmdGbGFncyh0aGlzKS5vdmVyZmxvdztcclxuICAgIH1cclxuXHJcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ2dnJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy53ZWVrWWVhcigpICUgMTAwO1xyXG4gICAgfSk7XHJcblxyXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydHRycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcclxuICAgIH0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4gKHRva2VuLCBnZXR0ZXIpIHtcclxuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICAgICAnd2Vla1llYXInKTtcclxuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgICAgJ3dlZWtZZWFyJyk7XHJcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHJywgICdpc29XZWVrWWVhcicpO1xyXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHR0cnLCAnaXNvV2Vla1llYXInKTtcclxuXHJcbiAgICAvLyBBTElBU0VTXHJcblxyXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrWWVhcicsICdnZycpO1xyXG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrWWVhcicsICdHRycpO1xyXG5cclxuICAgIC8vIFBBUlNJTkdcclxuXHJcbiAgICBhZGRSZWdleFRva2VuKCdHJywgICAgICBtYXRjaFNpZ25lZCk7XHJcbiAgICBhZGRSZWdleFRva2VuKCdnJywgICAgICBtYXRjaFNpZ25lZCk7XHJcbiAgICBhZGRSZWdleFRva2VuKCdHRycsICAgICBtYXRjaDF0bzIsIG1hdGNoMik7XHJcbiAgICBhZGRSZWdleFRva2VuKCdnZycsICAgICBtYXRjaDF0bzIsIG1hdGNoMik7XHJcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHJywgICBtYXRjaDF0bzQsIG1hdGNoNCk7XHJcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgICBtYXRjaDF0bzQsIG1hdGNoNCk7XHJcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHRycsICBtYXRjaDF0bzYsIG1hdGNoNik7XHJcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnZycsICBtYXRjaDF0bzYsIG1hdGNoNik7XHJcblxyXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydnZ2dnJywgJ2dnZ2dnJywgJ0dHR0cnLCAnR0dHR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XHJcbiAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydnZycsICdHRyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcclxuICAgICAgICB3ZWVrW3Rva2VuXSA9IHV0aWxzX2hvb2tzX19ob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBIRUxQRVJTXHJcblxyXG4gICAgZnVuY3Rpb24gd2Vla3NJblllYXIoeWVhciwgZG93LCBkb3kpIHtcclxuICAgICAgICByZXR1cm4gd2Vla09mWWVhcihsb2NhbF9fY3JlYXRlTG9jYWwoW3llYXIsIDExLCAzMSArIGRvdyAtIGRveV0pLCBkb3csIGRveSkud2VlaztcclxuICAgIH1cclxuXHJcbiAgICAvLyBNT01FTlRTXHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIgKGlucHV0KSB7XHJcbiAgICAgICAgdmFyIHllYXIgPSB3ZWVrT2ZZZWFyKHRoaXMsIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdywgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KS55ZWFyO1xyXG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8geWVhciA6IHRoaXMuYWRkKChpbnB1dCAtIHllYXIpLCAneScpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWtZZWFyIChpbnB1dCkge1xyXG4gICAgICAgIHZhciB5ZWFyID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS55ZWFyO1xyXG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8geWVhciA6IHRoaXMuYWRkKChpbnB1dCAtIHllYXIpLCAneScpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldElTT1dlZWtzSW5ZZWFyICgpIHtcclxuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIDEsIDQpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyICgpIHtcclxuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcclxuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIHdlZWtJbmZvLmRvdywgd2Vla0luZm8uZG95KTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRGb3JtYXRUb2tlbignUScsIDAsIDAsICdxdWFydGVyJyk7XHJcblxyXG4gICAgLy8gQUxJQVNFU1xyXG5cclxuICAgIGFkZFVuaXRBbGlhcygncXVhcnRlcicsICdRJyk7XHJcblxyXG4gICAgLy8gUEFSU0lOR1xyXG5cclxuICAgIGFkZFJlZ2V4VG9rZW4oJ1EnLCBtYXRjaDEpO1xyXG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcclxuICAgICAgICBhcnJheVtNT05USF0gPSAodG9JbnQoaW5wdXQpIC0gMSkgKiAzO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gTU9NRU5UU1xyXG5cclxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIgKGlucHV0KSB7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyBNYXRoLmNlaWwoKHRoaXMubW9udGgoKSArIDEpIC8gMykgOiB0aGlzLm1vbnRoKChpbnB1dCAtIDEpICogMyArIHRoaXMubW9udGgoKSAlIDMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEZvcm1hdFRva2VuKCdEJywgWydERCcsIDJdLCAnRG8nLCAnZGF0ZScpO1xyXG5cclxuICAgIC8vIEFMSUFTRVNcclxuXHJcbiAgICBhZGRVbml0QWxpYXMoJ2RhdGUnLCAnRCcpO1xyXG5cclxuICAgIC8vIFBBUlNJTkdcclxuXHJcbiAgICBhZGRSZWdleFRva2VuKCdEJywgIG1hdGNoMXRvMik7XHJcbiAgICBhZGRSZWdleFRva2VuKCdERCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcclxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcclxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyBsb2NhbGUuX29yZGluYWxQYXJzZSA6IGxvY2FsZS5fb3JkaW5hbFBhcnNlTGVuaWVudDtcclxuICAgIH0pO1xyXG5cclxuICAgIGFkZFBhcnNlVG9rZW4oWydEJywgJ0REJ10sIERBVEUpO1xyXG4gICAgYWRkUGFyc2VUb2tlbignRG8nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XHJcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdLCAxMCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBNT01FTlRTXHJcblxyXG4gICAgdmFyIGdldFNldERheU9mTW9udGggPSBtYWtlR2V0U2V0KCdEYXRlJywgdHJ1ZSk7XHJcblxyXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2QnLCAwLCAnZG8nLCAnZGF5Jyk7XHJcblxyXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLCBmb3JtYXQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsIGZvcm1hdCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBhZGRGb3JtYXRUb2tlbignZScsIDAsIDAsICd3ZWVrZGF5Jyk7XHJcbiAgICBhZGRGb3JtYXRUb2tlbignRScsIDAsIDAsICdpc29XZWVrZGF5Jyk7XHJcblxyXG4gICAgLy8gQUxJQVNFU1xyXG5cclxuICAgIGFkZFVuaXRBbGlhcygnZGF5JywgJ2QnKTtcclxuICAgIGFkZFVuaXRBbGlhcygnd2Vla2RheScsICdlJyk7XHJcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWtkYXknLCAnRScpO1xyXG5cclxuICAgIC8vIFBBUlNJTkdcclxuXHJcbiAgICBhZGRSZWdleFRva2VuKCdkJywgICAgbWF0Y2gxdG8yKTtcclxuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCAgICBtYXRjaDF0bzIpO1xyXG4gICAgYWRkUmVnZXhUb2tlbignRScsICAgIG1hdGNoMXRvMik7XHJcbiAgICBhZGRSZWdleFRva2VuKCdkZCcsICAgbWF0Y2hXb3JkKTtcclxuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZCcsICBtYXRjaFdvcmQpO1xyXG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsIG1hdGNoV29yZCk7XHJcblxyXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkZCcsICdkZGQnLCAnZGRkZCddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZykge1xyXG4gICAgICAgIHZhciB3ZWVrZGF5ID0gY29uZmlnLl9sb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XHJcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGdldCBhIHdlZWtkYXkgbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkXHJcbiAgICAgICAgaWYgKHdlZWtkYXkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRXZWVrZGF5ID0gaW5wdXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcclxuICAgICAgICB3ZWVrW3Rva2VuXSA9IHRvSW50KGlucHV0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEhFTFBFUlNcclxuXHJcbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaXNOYU4oaW5wdXQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTE9DQUxFU1xyXG5cclxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPSAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KCdfJyk7XHJcbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5cyAobSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1ttLmRheSgpXTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQgPSAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpO1xyXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydCAobSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0W20uZGF5KCldO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4gPSAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyk7XHJcbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbiAobSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblttLmRheSgpXTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1BhcnNlICh3ZWVrZGF5TmFtZSkge1xyXG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xyXG5cclxuICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gdGhpcy5fd2Vla2RheXNQYXJzZSB8fCBbXTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xyXG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBtb20gPSBsb2NhbF9fY3JlYXRlTG9jYWwoWzIwMDAsIDFdKS5kYXkoaSk7XHJcbiAgICAgICAgICAgICAgICByZWdleCA9ICdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykgKyAnfF4nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpICsgJ3xeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBNT01FTlRTXHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZXZWVrIChpbnB1dCkge1xyXG4gICAgICAgIHZhciBkYXkgPSB0aGlzLl9pc1VUQyA/IHRoaXMuX2QuZ2V0VVRDRGF5KCkgOiB0aGlzLl9kLmdldERheSgpO1xyXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChpbnB1dCAtIGRheSwgJ2QnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRTZXRMb2NhbGVEYXlPZldlZWsgKGlucHV0KSB7XHJcbiAgICAgICAgdmFyIHdlZWtkYXkgPSAodGhpcy5kYXkoKSArIDcgLSB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpICUgNztcclxuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrIChpbnB1dCkge1xyXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcclxuICAgICAgICAvLyBhcyBhIGdldHRlciwgcmV0dXJucyA3IGluc3RlYWQgb2YgMCAoMS03IHJhbmdlIGluc3RlYWQgb2YgMC02KVxyXG4gICAgICAgIC8vIGFzIGEgc2V0dGVyLCBzdW5kYXkgc2hvdWxkIGJlbG9uZyB0byB0aGUgcHJldmlvdXMgd2Vlay5cclxuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHRoaXMuZGF5KCkgfHwgNyA6IHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gaW5wdXQgOiBpbnB1dCAtIDcpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEZvcm1hdFRva2VuKCdIJywgWydISCcsIDJdLCAwLCAnaG91cicpO1xyXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpICUgMTIgfHwgMTI7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmdW5jdGlvbiBtZXJpZGllbSAodG9rZW4sIGxvd2VyY2FzZSkge1xyXG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbSh0aGlzLmhvdXJzKCksIHRoaXMubWludXRlcygpLCBsb3dlcmNhc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG1lcmlkaWVtKCdhJywgdHJ1ZSk7XHJcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcclxuXHJcbiAgICAvLyBBTElBU0VTXHJcblxyXG4gICAgYWRkVW5pdEFsaWFzKCdob3VyJywgJ2gnKTtcclxuXHJcbiAgICAvLyBQQVJTSU5HXHJcblxyXG4gICAgZnVuY3Rpb24gbWF0Y2hNZXJpZGllbSAoaXNTdHJpY3QsIGxvY2FsZSkge1xyXG4gICAgICAgIHJldHVybiBsb2NhbGUuX21lcmlkaWVtUGFyc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkUmVnZXhUb2tlbignYScsICBtYXRjaE1lcmlkaWVtKTtcclxuICAgIGFkZFJlZ2V4VG9rZW4oJ0EnLCAgbWF0Y2hNZXJpZGllbSk7XHJcbiAgICBhZGRSZWdleFRva2VuKCdIJywgIG1hdGNoMXRvMik7XHJcbiAgICBhZGRSZWdleFRva2VuKCdoJywgIG1hdGNoMXRvMik7XHJcbiAgICBhZGRSZWdleFRva2VuKCdISCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcclxuICAgIGFkZFJlZ2V4VG9rZW4oJ2hoJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xyXG5cclxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xyXG4gICAgYWRkUGFyc2VUb2tlbihbJ2EnLCAnQSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcclxuICAgICAgICBjb25maWcuX2lzUG0gPSBjb25maWcuX2xvY2FsZS5pc1BNKGlucHV0KTtcclxuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XHJcbiAgICB9KTtcclxuICAgIGFkZFBhcnNlVG9rZW4oWydoJywgJ2hoJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xyXG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xyXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gTE9DQUxFU1xyXG5cclxuICAgIGZ1bmN0aW9uIGxvY2FsZUlzUE0gKGlucHV0KSB7XHJcbiAgICAgICAgLy8gSUU4IFF1aXJrcyBNb2RlICYgSUU3IFN0YW5kYXJkcyBNb2RlIGRvIG5vdCBhbGxvdyBhY2Nlc3Npbmcgc3RyaW5ncyBsaWtlIGFycmF5c1xyXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxyXG4gICAgICAgIHJldHVybiAoKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSA9IC9bYXBdXFwuP20/XFwuPy9pO1xyXG4gICAgZnVuY3Rpb24gbG9jYWxlTWVyaWRpZW0gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XHJcbiAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAncG0nIDogJ1BNJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdhbScgOiAnQU0nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gTU9NRU5UU1xyXG5cclxuICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxyXG4gICAgLy8gc3BlY2lmaWVkIHdoaWNoIGhvdXIgaGUgd2FudHMuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxyXG4gICAgLy8gYSBuZXcgdGltZXpvbmUpIG1ha2VzIHNlbnNlLiBBZGRpbmcvc3VidHJhY3RpbmcgaG91cnMgZG9lcyBub3QgZm9sbG93XHJcbiAgICAvLyB0aGlzIHJ1bGUuXHJcbiAgICB2YXIgZ2V0U2V0SG91ciA9IG1ha2VHZXRTZXQoJ0hvdXJzJywgdHJ1ZSk7XHJcblxyXG4gICAgYWRkRm9ybWF0VG9rZW4oJ20nLCBbJ21tJywgMl0sIDAsICdtaW51dGUnKTtcclxuXHJcbiAgICAvLyBBTElBU0VTXHJcblxyXG4gICAgYWRkVW5pdEFsaWFzKCdtaW51dGUnLCAnbScpO1xyXG5cclxuICAgIC8vIFBBUlNJTkdcclxuXHJcbiAgICBhZGRSZWdleFRva2VuKCdtJywgIG1hdGNoMXRvMik7XHJcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcclxuICAgIGFkZFBhcnNlVG9rZW4oWydtJywgJ21tJ10sIE1JTlVURSk7XHJcblxyXG4gICAgLy8gTU9NRU5UU1xyXG5cclxuICAgIHZhciBnZXRTZXRNaW51dGUgPSBtYWtlR2V0U2V0KCdNaW51dGVzJywgZmFsc2UpO1xyXG5cclxuICAgIGFkZEZvcm1hdFRva2VuKCdzJywgWydzcycsIDJdLCAwLCAnc2Vjb25kJyk7XHJcblxyXG4gICAgLy8gQUxJQVNFU1xyXG5cclxuICAgIGFkZFVuaXRBbGlhcygnc2Vjb25kJywgJ3MnKTtcclxuXHJcbiAgICAvLyBQQVJTSU5HXHJcblxyXG4gICAgYWRkUmVnZXhUb2tlbigncycsICBtYXRjaDF0bzIpO1xyXG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XHJcbiAgICBhZGRQYXJzZVRva2VuKFsncycsICdzcyddLCBTRUNPTkQpO1xyXG5cclxuICAgIC8vIE1PTUVOVFNcclxuXHJcbiAgICB2YXIgZ2V0U2V0U2Vjb25kID0gbWFrZUdldFNldCgnU2Vjb25kcycsIGZhbHNlKTtcclxuXHJcbiAgICBhZGRGb3JtYXRUb2tlbignUycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTAwKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1MnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcclxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTUycsIDRdLCAwLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwO1xyXG4gICAgfSk7XHJcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTJywgNV0sIDAsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwO1xyXG4gICAgfSk7XHJcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTUycsIDZdLCAwLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDA7XHJcbiAgICB9KTtcclxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTUycsIDddLCAwLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwO1xyXG4gICAgfSk7XHJcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTJywgOF0sIDAsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwO1xyXG4gICAgfSk7XHJcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTUycsIDldLCAwLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDA7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgLy8gQUxJQVNFU1xyXG5cclxuICAgIGFkZFVuaXRBbGlhcygnbWlsbGlzZWNvbmQnLCAnbXMnKTtcclxuXHJcbiAgICAvLyBQQVJTSU5HXHJcblxyXG4gICAgYWRkUmVnZXhUb2tlbignUycsICAgIG1hdGNoMXRvMywgbWF0Y2gxKTtcclxuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTJywgICBtYXRjaDF0bzMsIG1hdGNoMik7XHJcbiAgICBhZGRSZWdleFRva2VuKCdTU1MnLCAgbWF0Y2gxdG8zLCBtYXRjaDMpO1xyXG5cclxuICAgIHZhciB0b2tlbjtcclxuICAgIGZvciAodG9rZW4gPSAnU1NTUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcclxuICAgICAgICBhZGRSZWdleFRva2VuKHRva2VuLCBtYXRjaFVuc2lnbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xyXG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xyXG4gICAgICAgIGFkZFBhcnNlVG9rZW4odG9rZW4sIHBhcnNlTXMpO1xyXG4gICAgfVxyXG4gICAgLy8gTU9NRU5UU1xyXG5cclxuICAgIHZhciBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcclxuXHJcbiAgICBhZGRGb3JtYXRUb2tlbigneicsICAwLCAwLCAnem9uZUFiYnInKTtcclxuICAgIGFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xyXG5cclxuICAgIC8vIE1PTUVOVFNcclxuXHJcbiAgICBmdW5jdGlvbiBnZXRab25lQWJiciAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBtb21lbnRQcm90b3R5cGVfX3Byb3RvID0gTW9tZW50LnByb3RvdHlwZTtcclxuXHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmFkZCAgICAgICAgICA9IGFkZF9zdWJ0cmFjdF9fYWRkO1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5jYWxlbmRhciAgICAgPSBtb21lbnRfY2FsZW5kYXJfX2NhbGVuZGFyO1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5jbG9uZSAgICAgICAgPSBjbG9uZTtcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uZGlmZiAgICAgICAgID0gZGlmZjtcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uZW5kT2YgICAgICAgID0gZW5kT2Y7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmZvcm1hdCAgICAgICA9IGZvcm1hdDtcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uZnJvbSAgICAgICAgID0gZnJvbTtcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uZnJvbU5vdyAgICAgID0gZnJvbU5vdztcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8udG8gICAgICAgICAgID0gdG87XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnRvTm93ICAgICAgICA9IHRvTm93O1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5nZXQgICAgICAgICAgPSBnZXRTZXQ7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmludmFsaWRBdCAgICA9IGludmFsaWRBdDtcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uaXNBZnRlciAgICAgID0gaXNBZnRlcjtcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uaXNCZWZvcmUgICAgID0gaXNCZWZvcmU7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmlzQmV0d2VlbiAgICA9IGlzQmV0d2VlbjtcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uaXNTYW1lICAgICAgID0gaXNTYW1lO1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5pc1ZhbGlkICAgICAgPSBtb21lbnRfdmFsaWRfX2lzVmFsaWQ7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmxhbmcgICAgICAgICA9IGxhbmc7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmxvY2FsZSAgICAgICA9IGxvY2FsZTtcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8ubG9jYWxlRGF0YSAgID0gbG9jYWxlRGF0YTtcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8ubWF4ICAgICAgICAgID0gcHJvdG90eXBlTWF4O1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5taW4gICAgICAgICAgPSBwcm90b3R5cGVNaW47XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnBhcnNpbmdGbGFncyA9IHBhcnNpbmdGbGFncztcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uc2V0ICAgICAgICAgID0gZ2V0U2V0O1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5zdGFydE9mICAgICAgPSBzdGFydE9mO1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5zdWJ0cmFjdCAgICAgPSBhZGRfc3VidHJhY3RfX3N1YnRyYWN0O1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by50b0FycmF5ICAgICAgPSB0b0FycmF5O1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by50b09iamVjdCAgICAgPSB0b09iamVjdDtcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8udG9EYXRlICAgICAgID0gdG9EYXRlO1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by50b0lTT1N0cmluZyAgPSBtb21lbnRfZm9ybWF0X190b0lTT1N0cmluZztcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8udG9KU09OICAgICAgID0gbW9tZW50X2Zvcm1hdF9fdG9JU09TdHJpbmc7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnRvU3RyaW5nICAgICA9IHRvU3RyaW5nO1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by51bml4ICAgICAgICAgPSB1bml4O1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by52YWx1ZU9mICAgICAgPSB0b190eXBlX192YWx1ZU9mO1xyXG5cclxuICAgIC8vIFllYXJcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8ueWVhciAgICAgICA9IGdldFNldFllYXI7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xyXG5cclxuICAgIC8vIFdlZWsgWWVhclxyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by53ZWVrWWVhciAgICA9IGdldFNldFdlZWtZZWFyO1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xyXG5cclxuICAgIC8vIFF1YXJ0ZXJcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8ucXVhcnRlciA9IG1vbWVudFByb3RvdHlwZV9fcHJvdG8ucXVhcnRlcnMgPSBnZXRTZXRRdWFydGVyO1xyXG5cclxuICAgIC8vIE1vbnRoXHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLm1vbnRoICAgICAgID0gZ2V0U2V0TW9udGg7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmRheXNJbk1vbnRoID0gZ2V0RGF5c0luTW9udGg7XHJcblxyXG4gICAgLy8gV2Vla1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by53ZWVrICAgICAgICAgICA9IG1vbWVudFByb3RvdHlwZV9fcHJvdG8ud2Vla3MgICAgICAgID0gZ2V0U2V0V2VlaztcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uaXNvV2VlayAgICAgICAgPSBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmlzb1dlZWtzICAgICA9IGdldFNldElTT1dlZWs7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLndlZWtzSW5ZZWFyICAgID0gZ2V0V2Vla3NJblllYXI7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmlzb1dlZWtzSW5ZZWFyID0gZ2V0SVNPV2Vla3NJblllYXI7XHJcblxyXG4gICAgLy8gRGF5XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmRhdGUgICAgICAgPSBnZXRTZXREYXlPZk1vbnRoO1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5kYXkgICAgICAgID0gbW9tZW50UHJvdG90eXBlX19wcm90by5kYXlzICAgICAgICAgICAgID0gZ2V0U2V0RGF5T2ZXZWVrO1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by53ZWVrZGF5ICAgID0gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrO1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5pc29XZWVrZGF5ID0gZ2V0U2V0SVNPRGF5T2ZXZWVrO1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5kYXlPZlllYXIgID0gZ2V0U2V0RGF5T2ZZZWFyO1xyXG5cclxuICAgIC8vIEhvdXJcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uaG91ciA9IG1vbWVudFByb3RvdHlwZV9fcHJvdG8uaG91cnMgPSBnZXRTZXRIb3VyO1xyXG5cclxuICAgIC8vIE1pbnV0ZVxyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5taW51dGUgPSBtb21lbnRQcm90b3R5cGVfX3Byb3RvLm1pbnV0ZXMgPSBnZXRTZXRNaW51dGU7XHJcblxyXG4gICAgLy8gU2Vjb25kXHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnNlY29uZCA9IG1vbWVudFByb3RvdHlwZV9fcHJvdG8uc2Vjb25kcyA9IGdldFNldFNlY29uZDtcclxuXHJcbiAgICAvLyBNaWxsaXNlY29uZFxyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5taWxsaXNlY29uZCA9IG1vbWVudFByb3RvdHlwZV9fcHJvdG8ubWlsbGlzZWNvbmRzID0gZ2V0U2V0TWlsbGlzZWNvbmQ7XHJcblxyXG4gICAgLy8gT2Zmc2V0XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnV0Y09mZnNldCAgICAgICAgICAgID0gZ2V0U2V0T2Zmc2V0O1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by51dGMgICAgICAgICAgICAgICAgICA9IHNldE9mZnNldFRvVVRDO1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5sb2NhbCAgICAgICAgICAgICAgICA9IHNldE9mZnNldFRvTG9jYWw7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnBhcnNlWm9uZSAgICAgICAgICAgID0gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQ7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmlzRFNUICAgICAgICAgICAgICAgID0gaXNEYXlsaWdodFNhdmluZ1RpbWU7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmlzRFNUU2hpZnRlZCAgICAgICAgID0gaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkO1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5pc0xvY2FsICAgICAgICAgICAgICA9IGlzTG9jYWw7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmlzVXRjT2Zmc2V0ICAgICAgICAgID0gaXNVdGNPZmZzZXQ7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmlzVXRjICAgICAgICAgICAgICAgID0gaXNVdGM7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLmlzVVRDICAgICAgICAgICAgICAgID0gaXNVdGM7XHJcblxyXG4gICAgLy8gVGltZXpvbmVcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uem9uZUFiYnIgPSBnZXRab25lQWJicjtcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uem9uZU5hbWUgPSBnZXRab25lTmFtZTtcclxuXHJcbiAgICAvLyBEZXByZWNhdGlvbnNcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8uZGF0ZXMgID0gZGVwcmVjYXRlKCdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsIGdldFNldERheU9mTW9udGgpO1xyXG4gICAgbW9tZW50UHJvdG90eXBlX19wcm90by5tb250aHMgPSBkZXByZWNhdGUoJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsIGdldFNldE1vbnRoKTtcclxuICAgIG1vbWVudFByb3RvdHlwZV9fcHJvdG8ueWVhcnMgID0gZGVwcmVjYXRlKCd5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkJywgZ2V0U2V0WWVhcik7XHJcbiAgICBtb21lbnRQcm90b3R5cGVfX3Byb3RvLnpvbmUgICA9IGRlcHJlY2F0ZSgnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNzc5JywgZ2V0U2V0Wm9uZSk7XHJcblxyXG4gICAgdmFyIG1vbWVudFByb3RvdHlwZSA9IG1vbWVudFByb3RvdHlwZV9fcHJvdG87XHJcblxyXG4gICAgZnVuY3Rpb24gbW9tZW50X19jcmVhdGVVbml4IChpbnB1dCkge1xyXG4gICAgICAgIHJldHVybiBsb2NhbF9fY3JlYXRlTG9jYWwoaW5wdXQgKiAxMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBtb21lbnRfX2NyZWF0ZUluWm9uZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGxvY2FsX19jcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpLnBhcnNlWm9uZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBkZWZhdWx0Q2FsZW5kYXIgPSB7XHJcbiAgICAgICAgc2FtZURheSA6ICdbVG9kYXkgYXRdIExUJyxcclxuICAgICAgICBuZXh0RGF5IDogJ1tUb21vcnJvdyBhdF0gTFQnLFxyXG4gICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW2F0XSBMVCcsXHJcbiAgICAgICAgbGFzdERheSA6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXHJcbiAgICAgICAgbGFzdFdlZWsgOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXHJcbiAgICAgICAgc2FtZUVsc2UgOiAnTCdcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gbG9jYWxlX2NhbGVuZGFyX19jYWxlbmRhciAoa2V5LCBtb20sIG5vdykge1xyXG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2Ygb3V0cHV0ID09PSAnZnVuY3Rpb24nID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQgPSB7XHJcbiAgICAgICAgTFRTICA6ICdoOm1tOnNzIEEnLFxyXG4gICAgICAgIExUICAgOiAnaDptbSBBJyxcclxuICAgICAgICBMICAgIDogJ01NL0REL1lZWVknLFxyXG4gICAgICAgIExMICAgOiAnTU1NTSBELCBZWVlZJyxcclxuICAgICAgICBMTEwgIDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxyXG4gICAgICAgIExMTEwgOiAnZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSdcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQgKGtleSkge1xyXG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxyXG4gICAgICAgICAgICBmb3JtYXRVcHBlciA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleS50b1VwcGVyQ2FzZSgpXTtcclxuXHJcbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0gPSBmb3JtYXRVcHBlci5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZywgZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsLnNsaWNlKDEpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGVmYXVsdEludmFsaWREYXRlID0gJ0ludmFsaWQgZGF0ZSc7XHJcblxyXG4gICAgZnVuY3Rpb24gaW52YWxpZERhdGUgKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZhbGlkRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGVmYXVsdE9yZGluYWwgPSAnJWQnO1xyXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xyXG5cclxuICAgIGZ1bmN0aW9uIG9yZGluYWwgKG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoJyVkJywgbnVtYmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQgKHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGRlZmF1bHRSZWxhdGl2ZVRpbWUgPSB7XHJcbiAgICAgICAgZnV0dXJlIDogJ2luICVzJyxcclxuICAgICAgICBwYXN0ICAgOiAnJXMgYWdvJyxcclxuICAgICAgICBzICA6ICdhIGZldyBzZWNvbmRzJyxcclxuICAgICAgICBtICA6ICdhIG1pbnV0ZScsXHJcbiAgICAgICAgbW0gOiAnJWQgbWludXRlcycsXHJcbiAgICAgICAgaCAgOiAnYW4gaG91cicsXHJcbiAgICAgICAgaGggOiAnJWQgaG91cnMnLFxyXG4gICAgICAgIGQgIDogJ2EgZGF5JyxcclxuICAgICAgICBkZCA6ICclZCBkYXlzJyxcclxuICAgICAgICBNICA6ICdhIG1vbnRoJyxcclxuICAgICAgICBNTSA6ICclZCBtb250aHMnLFxyXG4gICAgICAgIHkgIDogJ2EgeWVhcicsXHJcbiAgICAgICAgeXkgOiAnJWQgeWVhcnMnXHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlX19yZWxhdGl2ZVRpbWUgKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xyXG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbc3RyaW5nXTtcclxuICAgICAgICByZXR1cm4gKHR5cGVvZiBvdXRwdXQgPT09ICdmdW5jdGlvbicpID9cclxuICAgICAgICAgICAgb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkgOlxyXG4gICAgICAgICAgICBvdXRwdXQucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwYXN0RnV0dXJlIChkaWZmLCBvdXRwdXQpIHtcclxuICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW2RpZmYgPiAwID8gJ2Z1dHVyZScgOiAncGFzdCddO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgZm9ybWF0ID09PSAnZnVuY3Rpb24nID8gZm9ybWF0KG91dHB1dCkgOiBmb3JtYXQucmVwbGFjZSgvJXMvaSwgb3V0cHV0KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBsb2NhbGVfc2V0X19zZXQgKGNvbmZpZykge1xyXG4gICAgICAgIHZhciBwcm9wLCBpO1xyXG4gICAgICAgIGZvciAoaSBpbiBjb25maWcpIHtcclxuICAgICAgICAgICAgcHJvcCA9IGNvbmZpZ1tpXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzW2ldID0gcHJvcDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXNbJ18nICsgaV0gPSBwcm9wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIExlbmllbnQgb3JkaW5hbCBwYXJzaW5nIGFjY2VwdHMganVzdCBhIG51bWJlciBpbiBhZGRpdGlvbiB0b1xyXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX29yZGluYWxQYXJzZUxlbmllbnQuXHJcbiAgICAgICAgdGhpcy5fb3JkaW5hbFBhcnNlTGVuaWVudCA9IG5ldyBSZWdFeHAodGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSArICd8JyArICgvXFxkezEsMn0vKS5zb3VyY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBwcm90b3R5cGVfX3Byb3RvID0gTG9jYWxlLnByb3RvdHlwZTtcclxuXHJcbiAgICBwcm90b3R5cGVfX3Byb3RvLl9jYWxlbmRhciAgICAgICA9IGRlZmF1bHRDYWxlbmRhcjtcclxuICAgIHByb3RvdHlwZV9fcHJvdG8uY2FsZW5kYXIgICAgICAgID0gbG9jYWxlX2NhbGVuZGFyX19jYWxlbmRhcjtcclxuICAgIHByb3RvdHlwZV9fcHJvdG8uX2xvbmdEYXRlRm9ybWF0ID0gZGVmYXVsdExvbmdEYXRlRm9ybWF0O1xyXG4gICAgcHJvdG90eXBlX19wcm90by5sb25nRGF0ZUZvcm1hdCAgPSBsb25nRGF0ZUZvcm1hdDtcclxuICAgIHByb3RvdHlwZV9fcHJvdG8uX2ludmFsaWREYXRlICAgID0gZGVmYXVsdEludmFsaWREYXRlO1xyXG4gICAgcHJvdG90eXBlX19wcm90by5pbnZhbGlkRGF0ZSAgICAgPSBpbnZhbGlkRGF0ZTtcclxuICAgIHByb3RvdHlwZV9fcHJvdG8uX29yZGluYWwgICAgICAgID0gZGVmYXVsdE9yZGluYWw7XHJcbiAgICBwcm90b3R5cGVfX3Byb3RvLm9yZGluYWwgICAgICAgICA9IG9yZGluYWw7XHJcbiAgICBwcm90b3R5cGVfX3Byb3RvLl9vcmRpbmFsUGFyc2UgICA9IGRlZmF1bHRPcmRpbmFsUGFyc2U7XHJcbiAgICBwcm90b3R5cGVfX3Byb3RvLnByZXBhcnNlICAgICAgICA9IHByZVBhcnNlUG9zdEZvcm1hdDtcclxuICAgIHByb3RvdHlwZV9fcHJvdG8ucG9zdGZvcm1hdCAgICAgID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xyXG4gICAgcHJvdG90eXBlX19wcm90by5fcmVsYXRpdmVUaW1lICAgPSBkZWZhdWx0UmVsYXRpdmVUaW1lO1xyXG4gICAgcHJvdG90eXBlX19wcm90by5yZWxhdGl2ZVRpbWUgICAgPSByZWxhdGl2ZV9fcmVsYXRpdmVUaW1lO1xyXG4gICAgcHJvdG90eXBlX19wcm90by5wYXN0RnV0dXJlICAgICAgPSBwYXN0RnV0dXJlO1xyXG4gICAgcHJvdG90eXBlX19wcm90by5zZXQgICAgICAgICAgICAgPSBsb2NhbGVfc2V0X19zZXQ7XHJcblxyXG4gICAgLy8gTW9udGhcclxuICAgIHByb3RvdHlwZV9fcHJvdG8ubW9udGhzICAgICAgID0gICAgICAgIGxvY2FsZU1vbnRocztcclxuICAgIHByb3RvdHlwZV9fcHJvdG8uX21vbnRocyAgICAgID0gZGVmYXVsdExvY2FsZU1vbnRocztcclxuICAgIHByb3RvdHlwZV9fcHJvdG8ubW9udGhzU2hvcnQgID0gICAgICAgIGxvY2FsZU1vbnRoc1Nob3J0O1xyXG4gICAgcHJvdG90eXBlX19wcm90by5fbW9udGhzU2hvcnQgPSBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQ7XHJcbiAgICBwcm90b3R5cGVfX3Byb3RvLm1vbnRoc1BhcnNlICA9ICAgICAgICBsb2NhbGVNb250aHNQYXJzZTtcclxuXHJcbiAgICAvLyBXZWVrXHJcbiAgICBwcm90b3R5cGVfX3Byb3RvLndlZWsgPSBsb2NhbGVXZWVrO1xyXG4gICAgcHJvdG90eXBlX19wcm90by5fd2VlayA9IGRlZmF1bHRMb2NhbGVXZWVrO1xyXG4gICAgcHJvdG90eXBlX19wcm90by5maXJzdERheU9mWWVhciA9IGxvY2FsZUZpcnN0RGF5T2ZZZWFyO1xyXG4gICAgcHJvdG90eXBlX19wcm90by5maXJzdERheU9mV2VlayA9IGxvY2FsZUZpcnN0RGF5T2ZXZWVrO1xyXG5cclxuICAgIC8vIERheSBvZiBXZWVrXHJcbiAgICBwcm90b3R5cGVfX3Byb3RvLndlZWtkYXlzICAgICAgID0gICAgICAgIGxvY2FsZVdlZWtkYXlzO1xyXG4gICAgcHJvdG90eXBlX19wcm90by5fd2Vla2RheXMgICAgICA9IGRlZmF1bHRMb2NhbGVXZWVrZGF5cztcclxuICAgIHByb3RvdHlwZV9fcHJvdG8ud2Vla2RheXNNaW4gICAgPSAgICAgICAgbG9jYWxlV2Vla2RheXNNaW47XHJcbiAgICBwcm90b3R5cGVfX3Byb3RvLl93ZWVrZGF5c01pbiAgID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluO1xyXG4gICAgcHJvdG90eXBlX19wcm90by53ZWVrZGF5c1Nob3J0ICA9ICAgICAgICBsb2NhbGVXZWVrZGF5c1Nob3J0O1xyXG4gICAgcHJvdG90eXBlX19wcm90by5fd2Vla2RheXNTaG9ydCA9IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0O1xyXG4gICAgcHJvdG90eXBlX19wcm90by53ZWVrZGF5c1BhcnNlICA9ICAgICAgICBsb2NhbGVXZWVrZGF5c1BhcnNlO1xyXG5cclxuICAgIC8vIEhvdXJzXHJcbiAgICBwcm90b3R5cGVfX3Byb3RvLmlzUE0gPSBsb2NhbGVJc1BNO1xyXG4gICAgcHJvdG90eXBlX19wcm90by5fbWVyaWRpZW1QYXJzZSA9IGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlO1xyXG4gICAgcHJvdG90eXBlX19wcm90by5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xyXG5cclxuICAgIGZ1bmN0aW9uIGxpc3RzX19nZXQgKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCBzZXR0ZXIpIHtcclxuICAgICAgICB2YXIgbG9jYWxlID0gbG9jYWxlX2xvY2FsZXNfX2dldExvY2FsZSgpO1xyXG4gICAgICAgIHZhciB1dGMgPSBjcmVhdGVfdXRjX19jcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIGxvY2FsZVtmaWVsZF0odXRjLCBmb3JtYXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGxpc3QgKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCBjb3VudCwgc2V0dGVyKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXQgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xyXG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsaXN0c19fZ2V0KGZvcm1hdCwgaW5kZXgsIGZpZWxkLCBzZXR0ZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgdmFyIG91dCA9IFtdO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGxpc3RzX19nZXQoZm9ybWF0LCBpLCBmaWVsZCwgc2V0dGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBsaXN0c19fbGlzdE1vbnRocyAoZm9ybWF0LCBpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBsaXN0KGZvcm1hdCwgaW5kZXgsICdtb250aHMnLCAxMiwgJ21vbnRoJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbGlzdHNfX2xpc3RNb250aHNTaG9ydCAoZm9ybWF0LCBpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBsaXN0KGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcsIDEyLCAnbW9udGgnKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBsaXN0c19fbGlzdFdlZWtkYXlzIChmb3JtYXQsIGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIGxpc3QoZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzJywgNywgJ2RheScpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGxpc3RzX19saXN0V2Vla2RheXNTaG9ydCAoZm9ybWF0LCBpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBsaXN0KGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5c1Nob3J0JywgNywgJ2RheScpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGxpc3RzX19saXN0V2Vla2RheXNNaW4gKGZvcm1hdCwgaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gbGlzdChmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nLCA3LCAnZGF5Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9jYWxlX2xvY2FsZXNfX2dldFNldEdsb2JhbExvY2FsZSgnZW4nLCB7XHJcbiAgICAgICAgb3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcclxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xyXG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxyXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRvSW50KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcclxuICAgICAgICAgICAgICAgIChiID09PSAxKSA/ICdzdCcgOlxyXG4gICAgICAgICAgICAgICAgKGIgPT09IDIpID8gJ25kJyA6XHJcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcclxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXHJcbiAgICB1dGlsc19ob29rc19faG9va3MubGFuZyA9IGRlcHJlY2F0ZSgnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLCBsb2NhbGVfbG9jYWxlc19fZ2V0U2V0R2xvYmFsTG9jYWxlKTtcclxuICAgIHV0aWxzX2hvb2tzX19ob29rcy5sYW5nRGF0YSA9IGRlcHJlY2F0ZSgnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsIGxvY2FsZV9sb2NhbGVzX19nZXRMb2NhbGUpO1xyXG5cclxuICAgIHZhciBtYXRoQWJzID0gTWF0aC5hYnM7XHJcblxyXG4gICAgZnVuY3Rpb24gZHVyYXRpb25fYWJzX19hYnMgKCkge1xyXG4gICAgICAgIHZhciBkYXRhICAgICAgICAgICA9IHRoaXMuX2RhdGE7XHJcblxyXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9IG1hdGhBYnModGhpcy5fbWlsbGlzZWNvbmRzKTtcclxuICAgICAgICB0aGlzLl9kYXlzICAgICAgICAgPSBtYXRoQWJzKHRoaXMuX2RheXMpO1xyXG4gICAgICAgIHRoaXMuX21vbnRocyAgICAgICA9IG1hdGhBYnModGhpcy5fbW9udGhzKTtcclxuXHJcbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XHJcbiAgICAgICAgZGF0YS5zZWNvbmRzICAgICAgID0gbWF0aEFicyhkYXRhLnNlY29uZHMpO1xyXG4gICAgICAgIGRhdGEubWludXRlcyAgICAgICA9IG1hdGhBYnMoZGF0YS5taW51dGVzKTtcclxuICAgICAgICBkYXRhLmhvdXJzICAgICAgICAgPSBtYXRoQWJzKGRhdGEuaG91cnMpO1xyXG4gICAgICAgIGRhdGEubW9udGhzICAgICAgICA9IG1hdGhBYnMoZGF0YS5tb250aHMpO1xyXG4gICAgICAgIGRhdGEueWVhcnMgICAgICAgICA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGR1cmF0aW9uX2FkZF9zdWJ0cmFjdF9fYWRkU3VidHJhY3QgKGR1cmF0aW9uLCBpbnB1dCwgdmFsdWUsIGRpcmVjdGlvbikge1xyXG4gICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZV9fY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcclxuXHJcbiAgICAgICAgZHVyYXRpb24uX21pbGxpc2Vjb25kcyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbWlsbGlzZWNvbmRzO1xyXG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICAgICAgICAgKz0gZGlyZWN0aW9uICogb3RoZXIuX2RheXM7XHJcbiAgICAgICAgZHVyYXRpb24uX21vbnRocyAgICAgICArPSBkaXJlY3Rpb24gKiBvdGhlci5fbW9udGhzO1xyXG5cclxuICAgICAgICByZXR1cm4gZHVyYXRpb24uX2J1YmJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIGFkZCgxLCAncycpIG9yIGFkZChkdXJhdGlvbilcclxuICAgIGZ1bmN0aW9uIGR1cmF0aW9uX2FkZF9zdWJ0cmFjdF9fYWRkIChpbnB1dCwgdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gZHVyYXRpb25fYWRkX3N1YnRyYWN0X19hZGRTdWJ0cmFjdCh0aGlzLCBpbnB1dCwgdmFsdWUsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIHN1YnRyYWN0KDEsICdzJykgb3Igc3VidHJhY3QoZHVyYXRpb24pXHJcbiAgICBmdW5jdGlvbiBkdXJhdGlvbl9hZGRfc3VidHJhY3RfX3N1YnRyYWN0IChpbnB1dCwgdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gZHVyYXRpb25fYWRkX3N1YnRyYWN0X19hZGRTdWJ0cmFjdCh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBhYnNDZWlsIChudW1iZXIpIHtcclxuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYnViYmxlICgpIHtcclxuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xyXG4gICAgICAgIHZhciBkYXlzICAgICAgICAgPSB0aGlzLl9kYXlzO1xyXG4gICAgICAgIHZhciBtb250aHMgICAgICAgPSB0aGlzLl9tb250aHM7XHJcbiAgICAgICAgdmFyIGRhdGEgICAgICAgICA9IHRoaXMuX2RhdGE7XHJcbiAgICAgICAgdmFyIHNlY29uZHMsIG1pbnV0ZXMsIGhvdXJzLCB5ZWFycywgbW9udGhzRnJvbURheXM7XHJcblxyXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBtaXggb2YgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlcywgYnViYmxlIGRvd24gZmlyc3RcclxuICAgICAgICAvLyBjaGVjazogaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzIxNjZcclxuICAgICAgICBpZiAoISgobWlsbGlzZWNvbmRzID49IDAgJiYgZGF5cyA+PSAwICYmIG1vbnRocyA+PSAwKSB8fFxyXG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMCkpKSB7XHJcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyArPSBhYnNDZWlsKG1vbnRoc1RvRGF5cyhtb250aHMpICsgZGF5cykgKiA4NjRlNTtcclxuICAgICAgICAgICAgZGF5cyA9IDA7XHJcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXHJcbiAgICAgICAgLy8gZXhhbXBsZXMgb2Ygd2hhdCB0aGF0IG1lYW5zLlxyXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzICUgMTAwMDtcclxuXHJcbiAgICAgICAgc2Vjb25kcyAgICAgICAgICAgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcclxuICAgICAgICBkYXRhLnNlY29uZHMgICAgICA9IHNlY29uZHMgJSA2MDtcclxuXHJcbiAgICAgICAgbWludXRlcyAgICAgICAgICAgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xyXG4gICAgICAgIGRhdGEubWludXRlcyAgICAgID0gbWludXRlcyAlIDYwO1xyXG5cclxuICAgICAgICBob3VycyAgICAgICAgICAgICA9IGFic0Zsb29yKG1pbnV0ZXMgLyA2MCk7XHJcbiAgICAgICAgZGF0YS5ob3VycyAgICAgICAgPSBob3VycyAlIDI0O1xyXG5cclxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xyXG5cclxuICAgICAgICAvLyBjb252ZXJ0IGRheXMgdG8gbW9udGhzXHJcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xyXG4gICAgICAgIG1vbnRocyArPSBtb250aHNGcm9tRGF5cztcclxuICAgICAgICBkYXlzIC09IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRoc0Zyb21EYXlzKSk7XHJcblxyXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcclxuICAgICAgICBtb250aHMgJT0gMTI7XHJcblxyXG4gICAgICAgIGRhdGEuZGF5cyAgID0gZGF5cztcclxuICAgICAgICBkYXRhLm1vbnRocyA9IG1vbnRocztcclxuICAgICAgICBkYXRhLnllYXJzICA9IHllYXJzO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMgKGRheXMpIHtcclxuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXHJcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTIgbW9udGhzID09PSA0ODAwXHJcbiAgICAgICAgcmV0dXJuIGRheXMgKiA0ODAwIC8gMTQ2MDk3O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIG1vbnRoc1RvRGF5cyAobW9udGhzKSB7XHJcbiAgICAgICAgLy8gdGhlIHJldmVyc2Ugb2YgZGF5c1RvTW9udGhzXHJcbiAgICAgICAgcmV0dXJuIG1vbnRocyAqIDE0NjA5NyAvIDQ4MDA7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYXMgKHVuaXRzKSB7XHJcbiAgICAgICAgdmFyIGRheXM7XHJcbiAgICAgICAgdmFyIG1vbnRocztcclxuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xyXG5cclxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcclxuXHJcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAneWVhcicpIHtcclxuICAgICAgICAgICAgZGF5cyAgID0gdGhpcy5fZGF5cyAgICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XHJcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcclxuICAgICAgICAgICAgcmV0dXJuIHVuaXRzID09PSAnbW9udGgnID8gbW9udGhzIDogbW9udGhzIC8gMTI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaGFuZGxlIG1pbGxpc2Vjb25kcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGlzc3VlICMxODY3KVxyXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICd3ZWVrJyAgIDogcmV0dXJuIGRheXMgLyA3ICAgICArIG1pbGxpc2Vjb25kcyAvIDYwNDhlNTtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2RheScgICAgOiByZXR1cm4gZGF5cyAgICAgICAgICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJyAgIDogcmV0dXJuIGRheXMgKiAyNCAgICArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdtaW51dGUnIDogcmV0dXJuIGRheXMgKiAxNDQwICArIG1pbGxpc2Vjb25kcyAvIDZlNDtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCcgOiByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcclxuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAnbWlsbGlzZWNvbmQnOiByZXR1cm4gTWF0aC5mbG9vcihkYXlzICogODY0ZTUpICsgbWlsbGlzZWNvbmRzO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBUT0RPOiBVc2UgdGhpcy5hcygnbXMnKT9cclxuICAgIGZ1bmN0aW9uIGR1cmF0aW9uX2FzX192YWx1ZU9mICgpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgK1xyXG4gICAgICAgICAgICB0aGlzLl9kYXlzICogODY0ZTUgK1xyXG4gICAgICAgICAgICAodGhpcy5fbW9udGhzICUgMTIpICogMjU5MmU2ICtcclxuICAgICAgICAgICAgdG9JbnQodGhpcy5fbW9udGhzIC8gMTIpICogMzE1MzZlNlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gbWFrZUFzIChhbGlhcykge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzKGFsaWFzKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBhc01pbGxpc2Vjb25kcyA9IG1ha2VBcygnbXMnKTtcclxuICAgIHZhciBhc1NlY29uZHMgICAgICA9IG1ha2VBcygncycpO1xyXG4gICAgdmFyIGFzTWludXRlcyAgICAgID0gbWFrZUFzKCdtJyk7XHJcbiAgICB2YXIgYXNIb3VycyAgICAgICAgPSBtYWtlQXMoJ2gnKTtcclxuICAgIHZhciBhc0RheXMgICAgICAgICA9IG1ha2VBcygnZCcpO1xyXG4gICAgdmFyIGFzV2Vla3MgICAgICAgID0gbWFrZUFzKCd3Jyk7XHJcbiAgICB2YXIgYXNNb250aHMgICAgICAgPSBtYWtlQXMoJ00nKTtcclxuICAgIHZhciBhc1llYXJzICAgICAgICA9IG1ha2VBcygneScpO1xyXG5cclxuICAgIGZ1bmN0aW9uIGR1cmF0aW9uX2dldF9fZ2V0ICh1bml0cykge1xyXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzW3VuaXRzICsgJ3MnXSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhW25hbWVdO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ21pbGxpc2Vjb25kcycpO1xyXG4gICAgdmFyIHNlY29uZHMgICAgICA9IG1ha2VHZXR0ZXIoJ3NlY29uZHMnKTtcclxuICAgIHZhciBtaW51dGVzICAgICAgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyk7XHJcbiAgICB2YXIgaG91cnMgICAgICAgID0gbWFrZUdldHRlcignaG91cnMnKTtcclxuICAgIHZhciBkYXlzICAgICAgICAgPSBtYWtlR2V0dGVyKCdkYXlzJyk7XHJcbiAgICB2YXIgbW9udGhzICAgICAgID0gbWFrZUdldHRlcignbW9udGhzJyk7XHJcbiAgICB2YXIgeWVhcnMgICAgICAgID0gbWFrZUdldHRlcigneWVhcnMnKTtcclxuXHJcbiAgICBmdW5jdGlvbiB3ZWVrcyAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGFic0Zsb29yKHRoaXMuZGF5cygpIC8gNyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcclxuICAgIHZhciB0aHJlc2hvbGRzID0ge1xyXG4gICAgICAgIHM6IDQ1LCAgLy8gc2Vjb25kcyB0byBtaW51dGVcclxuICAgICAgICBtOiA0NSwgIC8vIG1pbnV0ZXMgdG8gaG91clxyXG4gICAgICAgIGg6IDIyLCAgLy8gaG91cnMgdG8gZGF5XHJcbiAgICAgICAgZDogMjYsICAvLyBkYXlzIHRvIG1vbnRoXHJcbiAgICAgICAgTTogMTEgICAvLyBtb250aHMgdG8geWVhclxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBoZWxwZXIgZnVuY3Rpb24gZm9yIG1vbWVudC5mbi5mcm9tLCBtb21lbnQuZm4uZnJvbU5vdywgYW5kIG1vbWVudC5kdXJhdGlvbi5mbi5odW1hbml6ZVxyXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcclxuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBkdXJhdGlvbl9odW1hbml6ZV9fcmVsYXRpdmVUaW1lIChwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgbG9jYWxlKSB7XHJcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gY3JlYXRlX19jcmVhdGVEdXJhdGlvbihwb3NOZWdEdXJhdGlvbikuYWJzKCk7XHJcbiAgICAgICAgdmFyIHNlY29uZHMgID0gcm91bmQoZHVyYXRpb24uYXMoJ3MnKSk7XHJcbiAgICAgICAgdmFyIG1pbnV0ZXMgID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSk7XHJcbiAgICAgICAgdmFyIGhvdXJzICAgID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSk7XHJcbiAgICAgICAgdmFyIGRheXMgICAgID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSk7XHJcbiAgICAgICAgdmFyIG1vbnRocyAgID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSk7XHJcbiAgICAgICAgdmFyIHllYXJzICAgID0gcm91bmQoZHVyYXRpb24uYXMoJ3knKSk7XHJcblxyXG4gICAgICAgIHZhciBhID0gc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3MnLCBzZWNvbmRzXSAgfHxcclxuICAgICAgICAgICAgICAgIG1pbnV0ZXMgPT09IDEgICAgICAgICAgJiYgWydtJ10gICAgICAgICAgIHx8XHJcbiAgICAgICAgICAgICAgICBtaW51dGVzIDwgdGhyZXNob2xkcy5tICYmIFsnbW0nLCBtaW51dGVzXSB8fFxyXG4gICAgICAgICAgICAgICAgaG91cnMgICA9PT0gMSAgICAgICAgICAmJiBbJ2gnXSAgICAgICAgICAgfHxcclxuICAgICAgICAgICAgICAgIGhvdXJzICAgPCB0aHJlc2hvbGRzLmggJiYgWydoaCcsIGhvdXJzXSAgIHx8XHJcbiAgICAgICAgICAgICAgICBkYXlzICAgID09PSAxICAgICAgICAgICYmIFsnZCddICAgICAgICAgICB8fFxyXG4gICAgICAgICAgICAgICAgZGF5cyAgICA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10gICAgfHxcclxuICAgICAgICAgICAgICAgIG1vbnRocyAgPT09IDEgICAgICAgICAgJiYgWydNJ10gICAgICAgICAgIHx8XHJcbiAgICAgICAgICAgICAgICBtb250aHMgIDwgdGhyZXNob2xkcy5NICYmIFsnTU0nLCBtb250aHNdICB8fFxyXG4gICAgICAgICAgICAgICAgeWVhcnMgICA9PT0gMSAgICAgICAgICAmJiBbJ3knXSAgICAgICAgICAgfHwgWyd5eScsIHllYXJzXTtcclxuXHJcbiAgICAgICAgYVsyXSA9IHdpdGhvdXRTdWZmaXg7XHJcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XHJcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcclxuICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZVRpbWVBZ28uYXBwbHkobnVsbCwgYSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCBhIHRocmVzaG9sZCBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXHJcbiAgICBmdW5jdGlvbiBkdXJhdGlvbl9odW1hbml6ZV9fZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkICh0aHJlc2hvbGQsIGxpbWl0KSB7XHJcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaHVtYW5pemUgKHdpdGhTdWZmaXgpIHtcclxuICAgICAgICB2YXIgbG9jYWxlID0gdGhpcy5sb2NhbGVEYXRhKCk7XHJcbiAgICAgICAgdmFyIG91dHB1dCA9IGR1cmF0aW9uX2h1bWFuaXplX19yZWxhdGl2ZVRpbWUodGhpcywgIXdpdGhTdWZmaXgsIGxvY2FsZSk7XHJcblxyXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XHJcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGlzb19zdHJpbmdfX2FicyA9IE1hdGguYWJzO1xyXG5cclxuICAgIGZ1bmN0aW9uIGlzb19zdHJpbmdfX3RvSVNPU3RyaW5nKCkge1xyXG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XHJcbiAgICAgICAgLy8gICogbWlsbGlzZWNvbmRzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSBob3Vyc1xyXG4gICAgICAgIC8vICAqIGRheXMgZG8gbm90IGJ1YmJsZSBhdCBhbGxcclxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXHJcbiAgICAgICAgLy8gVGhpcyBpcyBiZWNhdXNlIHRoZXJlIGlzIG5vIGNvbnRleHQtZnJlZSBjb252ZXJzaW9uIGJldHdlZW4gaG91cnMgYW5kIGRheXNcclxuICAgICAgICAvLyAodGhpbmsgb2YgY2xvY2sgY2hhbmdlcylcclxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxyXG4gICAgICAgIHZhciBzZWNvbmRzID0gaXNvX3N0cmluZ19fYWJzKHRoaXMuX21pbGxpc2Vjb25kcykgLyAxMDAwO1xyXG4gICAgICAgIHZhciBkYXlzICAgICAgICAgPSBpc29fc3RyaW5nX19hYnModGhpcy5fZGF5cyk7XHJcbiAgICAgICAgdmFyIG1vbnRocyAgICAgICA9IGlzb19zdHJpbmdfX2Ficyh0aGlzLl9tb250aHMpO1xyXG4gICAgICAgIHZhciBtaW51dGVzLCBob3VycywgeWVhcnM7XHJcblxyXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxyXG4gICAgICAgIG1pbnV0ZXMgICAgICAgICAgID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcclxuICAgICAgICBob3VycyAgICAgICAgICAgICA9IGFic0Zsb29yKG1pbnV0ZXMgLyA2MCk7XHJcbiAgICAgICAgc2Vjb25kcyAlPSA2MDtcclxuICAgICAgICBtaW51dGVzICU9IDYwO1xyXG5cclxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXHJcbiAgICAgICAgeWVhcnMgID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xyXG4gICAgICAgIG1vbnRocyAlPSAxMjtcclxuXHJcblxyXG4gICAgICAgIC8vIGluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9kb3JkaWxsZS9tb21lbnQtaXNvZHVyYXRpb24vYmxvYi9tYXN0ZXIvbW9tZW50Lmlzb2R1cmF0aW9uLmpzXHJcbiAgICAgICAgdmFyIFkgPSB5ZWFycztcclxuICAgICAgICB2YXIgTSA9IG1vbnRocztcclxuICAgICAgICB2YXIgRCA9IGRheXM7XHJcbiAgICAgICAgdmFyIGggPSBob3VycztcclxuICAgICAgICB2YXIgbSA9IG1pbnV0ZXM7XHJcbiAgICAgICAgdmFyIHMgPSBzZWNvbmRzO1xyXG4gICAgICAgIHZhciB0b3RhbCA9IHRoaXMuYXNTZWNvbmRzKCk7XHJcblxyXG4gICAgICAgIGlmICghdG90YWwpIHtcclxuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBhcyBDIydzIChOb2RhKSBhbmQgcHl0aG9uIChpc29kYXRlKS4uLlxyXG4gICAgICAgICAgICAvLyBidXQgbm90IG90aGVyIEpTIChnb29nLmRhdGUpXHJcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAodG90YWwgPCAwID8gJy0nIDogJycpICtcclxuICAgICAgICAgICAgJ1AnICtcclxuICAgICAgICAgICAgKFkgPyBZICsgJ1knIDogJycpICtcclxuICAgICAgICAgICAgKE0gPyBNICsgJ00nIDogJycpICtcclxuICAgICAgICAgICAgKEQgPyBEICsgJ0QnIDogJycpICtcclxuICAgICAgICAgICAgKChoIHx8IG0gfHwgcykgPyAnVCcgOiAnJykgK1xyXG4gICAgICAgICAgICAoaCA/IGggKyAnSCcgOiAnJykgK1xyXG4gICAgICAgICAgICAobSA/IG0gKyAnTScgOiAnJykgK1xyXG4gICAgICAgICAgICAocyA/IHMgKyAnUycgOiAnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGR1cmF0aW9uX3Byb3RvdHlwZV9fcHJvdG8gPSBEdXJhdGlvbi5wcm90b3R5cGU7XHJcblxyXG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5hYnMgICAgICAgICAgICA9IGR1cmF0aW9uX2Fic19fYWJzO1xyXG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5hZGQgICAgICAgICAgICA9IGR1cmF0aW9uX2FkZF9zdWJ0cmFjdF9fYWRkO1xyXG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5zdWJ0cmFjdCAgICAgICA9IGR1cmF0aW9uX2FkZF9zdWJ0cmFjdF9fc3VidHJhY3Q7XHJcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLmFzICAgICAgICAgICAgID0gYXM7XHJcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLmFzTWlsbGlzZWNvbmRzID0gYXNNaWxsaXNlY29uZHM7XHJcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLmFzU2Vjb25kcyAgICAgID0gYXNTZWNvbmRzO1xyXG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5hc01pbnV0ZXMgICAgICA9IGFzTWludXRlcztcclxuICAgIGR1cmF0aW9uX3Byb3RvdHlwZV9fcHJvdG8uYXNIb3VycyAgICAgICAgPSBhc0hvdXJzO1xyXG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5hc0RheXMgICAgICAgICA9IGFzRGF5cztcclxuICAgIGR1cmF0aW9uX3Byb3RvdHlwZV9fcHJvdG8uYXNXZWVrcyAgICAgICAgPSBhc1dlZWtzO1xyXG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5hc01vbnRocyAgICAgICA9IGFzTW9udGhzO1xyXG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5hc1llYXJzICAgICAgICA9IGFzWWVhcnM7XHJcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLnZhbHVlT2YgICAgICAgID0gZHVyYXRpb25fYXNfX3ZhbHVlT2Y7XHJcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLl9idWJibGUgICAgICAgID0gYnViYmxlO1xyXG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5nZXQgICAgICAgICAgICA9IGR1cmF0aW9uX2dldF9fZ2V0O1xyXG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5taWxsaXNlY29uZHMgICA9IG1pbGxpc2Vjb25kcztcclxuICAgIGR1cmF0aW9uX3Byb3RvdHlwZV9fcHJvdG8uc2Vjb25kcyAgICAgICAgPSBzZWNvbmRzO1xyXG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5taW51dGVzICAgICAgICA9IG1pbnV0ZXM7XHJcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLmhvdXJzICAgICAgICAgID0gaG91cnM7XHJcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLmRheXMgICAgICAgICAgID0gZGF5cztcclxuICAgIGR1cmF0aW9uX3Byb3RvdHlwZV9fcHJvdG8ud2Vla3MgICAgICAgICAgPSB3ZWVrcztcclxuICAgIGR1cmF0aW9uX3Byb3RvdHlwZV9fcHJvdG8ubW9udGhzICAgICAgICAgPSBtb250aHM7XHJcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLnllYXJzICAgICAgICAgID0geWVhcnM7XHJcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLmh1bWFuaXplICAgICAgID0gaHVtYW5pemU7XHJcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLnRvSVNPU3RyaW5nICAgID0gaXNvX3N0cmluZ19fdG9JU09TdHJpbmc7XHJcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLnRvU3RyaW5nICAgICAgID0gaXNvX3N0cmluZ19fdG9JU09TdHJpbmc7XHJcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLnRvSlNPTiAgICAgICAgID0gaXNvX3N0cmluZ19fdG9JU09TdHJpbmc7XHJcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLmxvY2FsZSAgICAgICAgID0gbG9jYWxlO1xyXG4gICAgZHVyYXRpb25fcHJvdG90eXBlX19wcm90by5sb2NhbGVEYXRhICAgICA9IGxvY2FsZURhdGE7XHJcblxyXG4gICAgLy8gRGVwcmVjYXRpb25zXHJcbiAgICBkdXJhdGlvbl9wcm90b3R5cGVfX3Byb3RvLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKCd0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdG9JU09TdHJpbmcoKSBpbnN0ZWFkIChub3RpY2UgdGhlIGNhcGl0YWxzKScsIGlzb19zdHJpbmdfX3RvSVNPU3RyaW5nKTtcclxuICAgIGR1cmF0aW9uX3Byb3RvdHlwZV9fcHJvdG8ubGFuZyA9IGxhbmc7XHJcblxyXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xyXG5cclxuICAgIGFkZEZvcm1hdFRva2VuKCdYJywgMCwgMCwgJ3VuaXgnKTtcclxuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcclxuXHJcbiAgICAvLyBQQVJTSU5HXHJcblxyXG4gICAgYWRkUmVnZXhUb2tlbigneCcsIG1hdGNoU2lnbmVkKTtcclxuICAgIGFkZFJlZ2V4VG9rZW4oJ1gnLCBtYXRjaFRpbWVzdGFtcCk7XHJcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XHJcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUocGFyc2VGbG9hdChpbnB1dCwgMTApICogMTAwMCk7XHJcbiAgICB9KTtcclxuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcclxuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xyXG5cclxuXHJcbiAgICB1dGlsc19ob29rc19faG9va3MudmVyc2lvbiA9ICcyLjEwLjYnO1xyXG5cclxuICAgIHNldEhvb2tDYWxsYmFjayhsb2NhbF9fY3JlYXRlTG9jYWwpO1xyXG5cclxuICAgIHV0aWxzX2hvb2tzX19ob29rcy5mbiAgICAgICAgICAgICAgICAgICAgPSBtb21lbnRQcm90b3R5cGU7XHJcbiAgICB1dGlsc19ob29rc19faG9va3MubWluICAgICAgICAgICAgICAgICAgID0gbWluO1xyXG4gICAgdXRpbHNfaG9va3NfX2hvb2tzLm1heCAgICAgICAgICAgICAgICAgICA9IG1heDtcclxuICAgIHV0aWxzX2hvb2tzX19ob29rcy51dGMgICAgICAgICAgICAgICAgICAgPSBjcmVhdGVfdXRjX19jcmVhdGVVVEM7XHJcbiAgICB1dGlsc19ob29rc19faG9va3MudW5peCAgICAgICAgICAgICAgICAgID0gbW9tZW50X19jcmVhdGVVbml4O1xyXG4gICAgdXRpbHNfaG9va3NfX2hvb2tzLm1vbnRocyAgICAgICAgICAgICAgICA9IGxpc3RzX19saXN0TW9udGhzO1xyXG4gICAgdXRpbHNfaG9va3NfX2hvb2tzLmlzRGF0ZSAgICAgICAgICAgICAgICA9IGlzRGF0ZTtcclxuICAgIHV0aWxzX2hvb2tzX19ob29rcy5sb2NhbGUgICAgICAgICAgICAgICAgPSBsb2NhbGVfbG9jYWxlc19fZ2V0U2V0R2xvYmFsTG9jYWxlO1xyXG4gICAgdXRpbHNfaG9va3NfX2hvb2tzLmludmFsaWQgICAgICAgICAgICAgICA9IHZhbGlkX19jcmVhdGVJbnZhbGlkO1xyXG4gICAgdXRpbHNfaG9va3NfX2hvb2tzLmR1cmF0aW9uICAgICAgICAgICAgICA9IGNyZWF0ZV9fY3JlYXRlRHVyYXRpb247XHJcbiAgICB1dGlsc19ob29rc19faG9va3MuaXNNb21lbnQgICAgICAgICAgICAgID0gaXNNb21lbnQ7XHJcbiAgICB1dGlsc19ob29rc19faG9va3Mud2Vla2RheXMgICAgICAgICAgICAgID0gbGlzdHNfX2xpc3RXZWVrZGF5cztcclxuICAgIHV0aWxzX2hvb2tzX19ob29rcy5wYXJzZVpvbmUgICAgICAgICAgICAgPSBtb21lbnRfX2NyZWF0ZUluWm9uZTtcclxuICAgIHV0aWxzX2hvb2tzX19ob29rcy5sb2NhbGVEYXRhICAgICAgICAgICAgPSBsb2NhbGVfbG9jYWxlc19fZ2V0TG9jYWxlO1xyXG4gICAgdXRpbHNfaG9va3NfX2hvb2tzLmlzRHVyYXRpb24gICAgICAgICAgICA9IGlzRHVyYXRpb247XHJcbiAgICB1dGlsc19ob29rc19faG9va3MubW9udGhzU2hvcnQgICAgICAgICAgID0gbGlzdHNfX2xpc3RNb250aHNTaG9ydDtcclxuICAgIHV0aWxzX2hvb2tzX19ob29rcy53ZWVrZGF5c01pbiAgICAgICAgICAgPSBsaXN0c19fbGlzdFdlZWtkYXlzTWluO1xyXG4gICAgdXRpbHNfaG9va3NfX2hvb2tzLmRlZmluZUxvY2FsZSAgICAgICAgICA9IGRlZmluZUxvY2FsZTtcclxuICAgIHV0aWxzX2hvb2tzX19ob29rcy53ZWVrZGF5c1Nob3J0ICAgICAgICAgPSBsaXN0c19fbGlzdFdlZWtkYXlzU2hvcnQ7XHJcbiAgICB1dGlsc19ob29rc19faG9va3Mubm9ybWFsaXplVW5pdHMgICAgICAgID0gbm9ybWFsaXplVW5pdHM7XHJcbiAgICB1dGlsc19ob29rc19faG9va3MucmVsYXRpdmVUaW1lVGhyZXNob2xkID0gZHVyYXRpb25faHVtYW5pemVfX2dldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZDtcclxuXHJcbiAgICB2YXIgX21vbWVudCA9IHV0aWxzX2hvb2tzX19ob29rcztcclxuXHJcbiAgICByZXR1cm4gX21vbWVudDtcclxuXHJcbn0pKTsiXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/underscore.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/underscore.js index e5d9cc5bbf2..6cc762ba978 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/underscore.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/underscore.js @@ -1420,4 +1420,4 @@ } }.call(this)); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuZGVyc2NvcmUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoidW5kZXJzY29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vICAgICBVbmRlcnNjb3JlLmpzIDEuNy4wXG4vLyAgICAgaHR0cDovL3VuZGVyc2NvcmVqcy5vcmdcbi8vICAgICAoYykgMjAwOS0yMDE0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzXG4vLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuKGZ1bmN0aW9uKCkge1xuXG4gIC8vIEJhc2VsaW5lIHNldHVwXG4gIC8vIC0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9yIGBleHBvcnRzYCBvbiB0aGUgc2VydmVyLlxuICB2YXIgcm9vdCA9IHRoaXM7XG5cbiAgLy8gU2F2ZSB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGBfYCB2YXJpYWJsZS5cbiAgdmFyIHByZXZpb3VzVW5kZXJzY29yZSA9IHJvb3QuXztcblxuICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2ZXJzaW9uOlxuICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBPYmplY3QucHJvdG90eXBlLCBGdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbiAgLy8gQ3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0byBjb3JlIHByb3RvdHlwZXMuXG4gIHZhclxuICAgIHB1c2ggICAgICAgICAgICAgPSBBcnJheVByb3RvLnB1c2gsXG4gICAgc2xpY2UgICAgICAgICAgICA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgY29uY2F0ICAgICAgICAgICA9IEFycmF5UHJvdG8uY29uY2F0LFxuICAgIHRvU3RyaW5nICAgICAgICAgPSBPYmpQcm90by50b1N0cmluZyxcbiAgICBoYXNPd25Qcm9wZXJ0eSAgID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbiAgLy8gQWxsICoqRUNNQVNjcmlwdCA1KiogbmF0aXZlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyB0aGF0IHdlIGhvcGUgdG8gdXNlXG4gIC8vIGFyZSBkZWNsYXJlZCBoZXJlLlxuICB2YXJcbiAgICBuYXRpdmVJc0FycmF5ICAgICAgPSBBcnJheS5pc0FycmF5LFxuICAgIG5hdGl2ZUtleXMgICAgICAgICA9IE9iamVjdC5rZXlzLFxuICAgIG5hdGl2ZUJpbmQgICAgICAgICA9IEZ1bmNQcm90by5iaW5kO1xuXG4gIC8vIENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgdXNlIGJlbG93LlxuICB2YXIgXyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfKSByZXR1cm4gb2JqO1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfKSkgcmV0dXJuIG5ldyBfKG9iaik7XG4gICAgdGhpcy5fd3JhcHBlZCA9IG9iajtcbiAgfTtcblxuICAvLyBFeHBvcnQgdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciAqKk5vZGUuanMqKiwgd2l0aFxuICAvLyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3IgdGhlIG9sZCBgcmVxdWlyZSgpYCBBUEkuIElmIHdlJ3JlIGluXG4gIC8vIHRoZSBicm93c2VyLCBhZGQgYF9gIGFzIGEgZ2xvYmFsIG9iamVjdC5cbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gXztcbiAgICB9XG4gICAgZXhwb3J0cy5fID0gXztcbiAgfSBlbHNlIHtcbiAgICByb290Ll8gPSBfO1xuICB9XG5cbiAgLy8gQ3VycmVudCB2ZXJzaW9uLlxuICBfLlZFUlNJT04gPSAnMS43LjAnO1xuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlZmZpY2llbnQgKGZvciBjdXJyZW50IGVuZ2luZXMpIHZlcnNpb25cbiAgLy8gb2YgdGhlIHBhc3NlZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVkIGluIG90aGVyIFVuZGVyc2NvcmVcbiAgLy8gZnVuY3Rpb25zLlxuICB2YXIgY3JlYXRlQ2FsbGJhY2sgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICAgIHN3aXRjaCAoYXJnQ291bnQgPT0gbnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIG90aGVyKTtcbiAgICAgIH07XG4gICAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBBIG1vc3RseS1pbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgYXBwbGllZFxuICAvLyB0byBlYWNoIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXJcbiAgLy8gaWRlbnRpdHksIGFuIGFyYml0cmFyeSBjYWxsYmFjaywgYSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFjY2Vzc29yLlxuICBfLml0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBfLmlkZW50aXR5O1xuICAgIGlmIChfLmlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm4gY3JlYXRlQ2FsbGJhY2sodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgICBpZiAoXy5pc09iamVjdCh2YWx1ZSkpIHJldHVybiBfLm1hdGNoZXModmFsdWUpO1xuICAgIHJldHVybiBfLnByb3BlcnR5KHZhbHVlKTtcbiAgfTtcblxuICAvLyBDb2xsZWN0aW9uIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSwgYW4gYGVhY2hgIGltcGxlbWVudGF0aW9uLCBha2EgYGZvckVhY2hgLlxuICAvLyBIYW5kbGVzIHJhdyBvYmplY3RzIGluIGFkZGl0aW9uIHRvIGFycmF5LWxpa2VzLiBUcmVhdHMgYWxsXG4gIC8vIHNwYXJzZSBhcnJheS1saWtlcyBhcyBpZiB0aGV5IHdlcmUgZGVuc2UuXG4gIF8uZWFjaCA9IF8uZm9yRWFjaCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBvYmo7XG4gICAgaXRlcmF0ZWUgPSBjcmVhdGVDYWxsYmFjayhpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGksIGxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCA9PT0gK2xlbmd0aCkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW2tleXNbaV1dLCBrZXlzW2ldLCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0ZWUgdG8gZWFjaCBlbGVtZW50LlxuICBfLm1hcCA9IF8uY29sbGVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBbXTtcbiAgICBpdGVyYXRlZSA9IF8uaXRlcmF0ZWUoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBrZXlzID0gb2JqLmxlbmd0aCAhPT0gK29iai5sZW5ndGggJiYgXy5rZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgY3VycmVudEtleTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgdmFyIHJlZHVjZUVycm9yID0gJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnO1xuXG4gIC8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCxcbiAgLy8gb3IgYGZvbGRsYC5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSBvYmogPSBbXTtcbiAgICBpdGVyYXRlZSA9IGNyZWF0ZUNhbGxiYWNrKGl0ZXJhdGVlLCBjb250ZXh0LCA0KTtcbiAgICB2YXIga2V5cyA9IG9iai5sZW5ndGggIT09ICtvYmoubGVuZ3RoICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSAwLCBjdXJyZW50S2V5O1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgICAgaWYgKCFsZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IocmVkdWNlRXJyb3IpO1xuICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1tpbmRleCsrXSA6IGluZGV4KytdO1xuICAgIH1cbiAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9O1xuXG4gIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLlxuICBfLnJlZHVjZVJpZ2h0ID0gXy5mb2xkciA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGNvbnRleHQpIHtcbiAgICBpZiAob2JqID09IG51bGwpIG9iaiA9IFtdO1xuICAgIGl0ZXJhdGVlID0gY3JlYXRlQ2FsbGJhY2soaXRlcmF0ZWUsIGNvbnRleHQsIDQpO1xuICAgIHZhciBrZXlzID0gb2JqLmxlbmd0aCAhPT0gKyBvYmoubGVuZ3RoICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBpbmRleCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICBjdXJyZW50S2V5O1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgICAgaWYgKCFpbmRleCkgdGhyb3cgbmV3IFR5cGVFcnJvcihyZWR1Y2VFcnJvcik7XG4gICAgICBtZW1vID0gb2JqW2tleXMgPyBrZXlzWy0taW5kZXhdIDogLS1pbmRleF07XG4gICAgfVxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBtZW1vID0gaXRlcmF0ZWUobWVtbywgb2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0O1xuICAgIHByZWRpY2F0ZSA9IF8uaXRlcmF0ZWUocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICBfLnNvbWUob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBsaXN0KSkge1xuICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0LlxuICAvLyBBbGlhc2VkIGFzIGBzZWxlY3RgLlxuICBfLmZpbHRlciA9IF8uc2VsZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdHM7XG4gICAgcHJlZGljYXRlID0gXy5pdGVyYXRlZShwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuXG4gIF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIob2JqLCBfLm5lZ2F0ZShfLml0ZXJhdGVlKHByZWRpY2F0ZSkpLCBjb250ZXh0KTtcbiAgfTtcblxuICAvLyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIG1hdGNoIGEgdHJ1dGggdGVzdC5cbiAgLy8gQWxpYXNlZCBhcyBgYWxsYC5cbiAgXy5ldmVyeSA9IF8uYWxsID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIHByZWRpY2F0ZSA9IF8uaXRlcmF0ZWUocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIga2V5cyA9IG9iai5sZW5ndGggIT09ICtvYmoubGVuZ3RoICYmIF8ua2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgaW5kZXgsIGN1cnJlbnRLZXk7XG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIGF0IGxlYXN0IG9uZSBlbGVtZW50IGluIHRoZSBvYmplY3QgbWF0Y2hlcyBhIHRydXRoIHRlc3QuXG4gIC8vIEFsaWFzZWQgYXMgYGFueWAuXG4gIF8uc29tZSA9IF8uYW55ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICBwcmVkaWNhdGUgPSBfLml0ZXJhdGVlKHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgdmFyIGtleXMgPSBvYmoubGVuZ3RoICE9PSArb2JqLmxlbmd0aCAmJiBfLmtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgIGluZGV4LCBjdXJyZW50S2V5O1xuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiB2YWx1ZSAodXNpbmcgYD09PWApLlxuICAvLyBBbGlhc2VkIGFzIGBpbmNsdWRlYC5cbiAgXy5jb250YWlucyA9IF8uaW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgdGFyZ2V0KSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKG9iai5sZW5ndGggIT09ICtvYmoubGVuZ3RoKSBvYmogPSBfLnZhbHVlcyhvYmopO1xuICAgIHJldHVybiBfLmluZGV4T2Yob2JqLCB0YXJnZXQpID49IDA7XG4gIH07XG5cbiAgLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50cykgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uXG4gIF8uaW52b2tlID0gZnVuY3Rpb24ob2JqLCBtZXRob2QpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2YXIgaXNGdW5jID0gXy5pc0Z1bmN0aW9uKG1ldGhvZCk7XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiAoaXNGdW5jID8gbWV0aG9kIDogdmFsdWVbbWV0aG9kXSkuYXBwbHkodmFsdWUsIGFyZ3MpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVyYDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0c1xuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLndoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hlcyhhdHRycykpO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdCBvYmplY3RcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy5maW5kV2hlcmUgPSBmdW5jdGlvbihvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIF8uZmluZChvYmosIF8ubWF0Y2hlcyhhdHRycykpO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5tYXggPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZpbml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IG9iai5sZW5ndGggPT09ICtvYmoubGVuZ3RoID8gb2JqIDogXy52YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSA+IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gXy5pdGVyYXRlZShpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPiBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIF8ubWluID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0gbnVsbCkge1xuICAgICAgb2JqID0gb2JqLmxlbmd0aCA9PT0gK29iai5sZW5ndGggPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlIDwgcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBfLml0ZXJhdGVlKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21wdXRlZCA8IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gSW5maW5pdHkgJiYgcmVzdWx0ID09PSBJbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBTaHVmZmxlIGEgY29sbGVjdGlvbiwgdXNpbmcgdGhlIG1vZGVybiB2ZXJzaW9uIG9mIHRoZVxuICAvLyBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZSkuXG4gIF8uc2h1ZmZsZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBzZXQgPSBvYmogJiYgb2JqLmxlbmd0aCA9PT0gK29iai5sZW5ndGggPyBvYmogOiBfLnZhbHVlcyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBzZXQubGVuZ3RoO1xuICAgIHZhciBzaHVmZmxlZCA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwLCByYW5kOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmFuZCA9IF8ucmFuZG9tKDAsIGluZGV4KTtcbiAgICAgIGlmIChyYW5kICE9PSBpbmRleCkgc2h1ZmZsZWRbaW5kZXhdID0gc2h1ZmZsZWRbcmFuZF07XG4gICAgICBzaHVmZmxlZFtyYW5kXSA9IHNldFtpbmRleF07XG4gICAgfVxuICAgIHJldHVybiBzaHVmZmxlZDtcbiAgfTtcblxuICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbi5cbiAgLy8gSWYgKipuKiogaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBhIHNpbmdsZSByYW5kb20gZWxlbWVudC5cbiAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgbWFwYC5cbiAgXy5zYW1wbGUgPSBmdW5jdGlvbihvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKG9iai5sZW5ndGggIT09ICtvYmoubGVuZ3RoKSBvYmogPSBfLnZhbHVlcyhvYmopO1xuICAgICAgcmV0dXJuIG9ialtfLnJhbmRvbShvYmoubGVuZ3RoIC0gMSldO1xuICAgIH1cbiAgICByZXR1cm4gXy5zaHVmZmxlKG9iaikuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbikpO1xuICB9O1xuXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cbiAgXy5zb3J0QnkgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBfLml0ZXJhdGVlKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gXy5wbHVjayhfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGNyaXRlcmlhOiBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdodC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvcikge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBpdGVyYXRlZSA9IF8uaXRlcmF0ZWUoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7XG4gICAgICAgIHZhciBrZXkgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIG9iaik7XG4gICAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBHcm91cHMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlXG4gIC8vIHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY3JpdGVyaW9uLlxuICBfLmdyb3VwQnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3JvdXBCeWAsIGJ1dCBmb3JcbiAgLy8gd2hlbiB5b3Uga25vdyB0aGF0IHlvdXIgaW5kZXggdmFsdWVzIHdpbGwgYmUgdW5pcXVlLlxuICBfLmluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgXy5jb3VudEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKF8uaGFzKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0rKzsgZWxzZSByZXN1bHRba2V5XSA9IDE7XG4gIH0pO1xuXG4gIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBfLnNvcnRlZEluZGV4ID0gZnVuY3Rpb24oYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IF8uaXRlcmF0ZWUoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBhcnJheS5sZW5ndGg7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgIHZhciBtaWQgPSBsb3cgKyBoaWdoID4+PiAxO1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W21pZF0pIDwgdmFsdWUpIGxvdyA9IG1pZCArIDE7IGVsc2UgaGlnaCA9IG1pZDtcbiAgICB9XG4gICAgcmV0dXJuIGxvdztcbiAgfTtcblxuICAvLyBTYWZlbHkgY3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5nIGl0ZXJhYmxlLlxuICBfLnRvQXJyYXkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICAgIGlmIChfLmlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgICBpZiAob2JqLmxlbmd0aCA9PT0gK29iai5sZW5ndGgpIHJldHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xuICAgIHJldHVybiBfLnZhbHVlcyhvYmopO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFuIG9iamVjdC5cbiAgXy5zaXplID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gb2JqLmxlbmd0aCA9PT0gK29iai5sZW5ndGggPyBvYmoubGVuZ3RoIDogXy5rZXlzKG9iaikubGVuZ3RoO1xuICB9O1xuXG4gIC8vIFNwbGl0IGEgY29sbGVjdGlvbiBpbnRvIHR3byBhcnJheXM6IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgc2F0aXNmeSB0aGUgZ2l2ZW5cbiAgLy8gcHJlZGljYXRlLCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFsbCBkbyBub3Qgc2F0aXNmeSB0aGUgcHJlZGljYXRlLlxuICBfLnBhcnRpdGlvbiA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gXy5pdGVyYXRlZShwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBwYXNzID0gW10sIGZhaWwgPSBbXTtcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHtcbiAgICAgIChwcmVkaWNhdGUodmFsdWUsIGtleSwgb2JqKSA/IHBhc3MgOiBmYWlsKS5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW3Bhc3MsIGZhaWxdO1xuICB9O1xuXG4gIC8vIEFycmF5IEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS1cblxuICAvLyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZpcnN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgaGVhZGAgYW5kIGB0YWtlYC4gVGhlICoqZ3VhcmQqKiBjaGVja1xuICAvLyBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIF8uZmlyc3QgPSBfLmhlYWQgPSBfLnRha2UgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbMF07XG4gICAgaWYgKG4gPCAwKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIG4pO1xuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhlIGFycmF5LiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuICAvLyB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpblxuICAvLyB0aGUgYXJyYXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLiBUaGUgKipndWFyZCoqIGNoZWNrIGFsbG93cyBpdCB0byB3b3JrIHdpdGhcbiAgLy8gYF8ubWFwYC5cbiAgXy5pbml0aWFsID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIFRoZSAqKmd1YXJkKiogY2hlY2sgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLmxhc3QgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIE1hdGgubWF4KGFycmF5Lmxlbmd0aCAtIG4sIDApKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYHRhaWxgIGFuZCBgZHJvcGAuXG4gIC8vIEVzcGVjaWFsbHkgdXNlZnVsIG9uIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuXG4gIC8vIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZSBhcnJheS4gVGhlICoqZ3VhcmQqKlxuICAvLyBjaGVjayBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIF8ucmVzdCA9IF8udGFpbCA9IF8uZHJvcCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7XG4gIH07XG5cbiAgLy8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LlxuICBfLmNvbXBhY3QgPSBmdW5jdGlvbihhcnJheSkge1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgXy5pZGVudGl0eSk7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUgYGZsYXR0ZW5gIGZ1bmN0aW9uLlxuICB2YXIgZmxhdHRlbiA9IGZ1bmN0aW9uKGlucHV0LCBzaGFsbG93LCBzdHJpY3QsIG91dHB1dCkge1xuICAgIGlmIChzaGFsbG93ICYmIF8uZXZlcnkoaW5wdXQsIF8uaXNBcnJheSkpIHtcbiAgICAgIHJldHVybiBjb25jYXQuYXBwbHkob3V0cHV0LCBpbnB1dCk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBpbnB1dC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoIV8uaXNBcnJheSh2YWx1ZSkgJiYgIV8uaXNBcmd1bWVudHModmFsdWUpKSB7XG4gICAgICAgIGlmICghc3RyaWN0KSBvdXRwdXQucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNoYWxsb3cpIHtcbiAgICAgICAgcHVzaC5hcHBseShvdXRwdXQsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZsYXR0ZW4odmFsdWUsIHNoYWxsb3csIHN0cmljdCwgb3V0cHV0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcblxuICAvLyBGbGF0dGVuIG91dCBhbiBhcnJheSwgZWl0aGVyIHJlY3Vyc2l2ZWx5IChieSBkZWZhdWx0KSwgb3IganVzdCBvbmUgbGV2ZWwuXG4gIF8uZmxhdHRlbiA9IGZ1bmN0aW9uKGFycmF5LCBzaGFsbG93KSB7XG4gICAgcmV0dXJuIGZsYXR0ZW4oYXJyYXksIHNoYWxsb3csIGZhbHNlLCBbXSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4gIF8ud2l0aG91dCA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcnJheSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIEFsaWFzZWQgYXMgYHVuaXF1ZWAuXG4gIF8udW5pcSA9IF8udW5pcXVlID0gZnVuY3Rpb24oYXJyYXksIGlzU29ydGVkLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gW107XG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBfLml0ZXJhdGVlKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIHNlZW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldO1xuICAgICAgaWYgKGlzU29ydGVkKSB7XG4gICAgICAgIGlmICghaSB8fCBzZWVuICE9PSB2YWx1ZSkgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICBzZWVuID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIHZhciBjb21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSk7XG4gICAgICAgIGlmIChfLmluZGV4T2Yoc2VlbiwgY29tcHV0ZWQpIDwgMCkge1xuICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKF8uaW5kZXhPZihyZXN1bHQsIHZhbHVlKSA8IDApIHtcbiAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5pb246IGVhY2ggZGlzdGluY3QgZWxlbWVudCBmcm9tIGFsbCBvZlxuICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy5cbiAgXy51bmlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfLnVuaXEoZmxhdHRlbihhcmd1bWVudHMsIHRydWUsIHRydWUsIFtdKSk7XG4gIH07XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBfLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiBbXTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBhcnJheVtpXTtcbiAgICAgIGlmIChfLmNvbnRhaW5zKHJlc3VsdCwgaXRlbSkpIGNvbnRpbnVlO1xuICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkpIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFRha2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgXy5kaWZmZXJlbmNlID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdCA9IGZsYXR0ZW4oc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLCB0cnVlLCB0cnVlLCBbXSk7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFycmF5LCBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICByZXR1cm4gIV8uY29udGFpbnMocmVzdCwgdmFsdWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmVcbiAgLy8gYW4gaW5kZXggZ28gdG9nZXRoZXIuXG4gIF8uemlwID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIFtdO1xuICAgIHZhciBsZW5ndGggPSBfLm1heChhcmd1bWVudHMsICdsZW5ndGgnKS5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdHNbaV0gPSBfLnBsdWNrKGFyZ3VtZW50cywgaSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgXy5vYmplY3QgPSBmdW5jdGlvbihsaXN0LCB2YWx1ZXMpIHtcbiAgICBpZiAobGlzdCA9PSBudWxsKSByZXR1cm4ge307XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBsaXN0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldXSA9IHZhbHVlc1tpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5LlxuICAvLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5kIGFscmVhZHkgaW4gc29ydCBvcmRlciwgcGFzcyBgdHJ1ZWBcbiAgLy8gZm9yICoqaXNTb3J0ZWQqKiB0byB1c2UgYmluYXJ5IHNlYXJjaC5cbiAgXy5pbmRleE9mID0gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlzU29ydGVkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiAtMTtcbiAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICBpZiAoaXNTb3J0ZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgaXNTb3J0ZWQgPT0gJ251bWJlcicpIHtcbiAgICAgICAgaSA9IGlzU29ydGVkIDwgMCA/IE1hdGgubWF4KDAsIGxlbmd0aCArIGlzU29ydGVkKSA6IGlzU29ydGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaSA9IF8uc29ydGVkSW5kZXgoYXJyYXksIGl0ZW0pO1xuICAgICAgICByZXR1cm4gYXJyYXlbaV0gPT09IGl0ZW0gPyBpIDogLTE7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIGlmIChhcnJheVtpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgcmV0dXJuIC0xO1xuICB9O1xuXG4gIF8ubGFzdEluZGV4T2YgPSBmdW5jdGlvbihhcnJheSwgaXRlbSwgZnJvbSkge1xuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gLTE7XG4gICAgdmFyIGlkeCA9IGFycmF5Lmxlbmd0aDtcbiAgICBpZiAodHlwZW9mIGZyb20gPT0gJ251bWJlcicpIHtcbiAgICAgIGlkeCA9IGZyb20gPCAwID8gaWR4ICsgZnJvbSArIDEgOiBNYXRoLm1pbihpZHgsIGZyb20gKyAxKTtcbiAgICB9XG4gICAgd2hpbGUgKC0taWR4ID49IDApIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4gaWR4O1xuICAgIHJldHVybiAtMTtcbiAgfTtcblxuICAvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mXG4gIC8vIHRoZSBuYXRpdmUgUHl0aG9uIGByYW5nZSgpYCBmdW5jdGlvbi4gU2VlXG4gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXG4gIF8ucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDw9IDEpIHtcbiAgICAgIHN0b3AgPSBzdGFydCB8fCAwO1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1cbiAgICBzdGVwID0gc3RlcCB8fCAxO1xuXG4gICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTtcbiAgICB2YXIgcmFuZ2UgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKywgc3RhcnQgKz0gc3RlcCkge1xuICAgICAgcmFuZ2VbaWR4XSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIHJldHVybiByYW5nZTtcbiAgfTtcblxuICAvLyBGdW5jdGlvbiAoYWhlbSkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFJldXNhYmxlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciBwcm90b3R5cGUgc2V0dGluZy5cbiAgdmFyIEN0b3IgPSBmdW5jdGlvbigpe307XG5cbiAgLy8gQ3JlYXRlIGEgZnVuY3Rpb24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmluZyBgdGhpc2AsIGFuZCBhcmd1bWVudHMsXG4gIC8vIG9wdGlvbmFsbHkpLiBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgRnVuY3Rpb24uYmluZGAgaWZcbiAgLy8gYXZhaWxhYmxlLlxuICBfLmJpbmQgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0KSB7XG4gICAgdmFyIGFyZ3MsIGJvdW5kO1xuICAgIGlmIChuYXRpdmVCaW5kICYmIGZ1bmMuYmluZCA9PT0gbmF0aXZlQmluZCkgcmV0dXJuIG5hdGl2ZUJpbmQuYXBwbHkoZnVuYywgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICBpZiAoIV8uaXNGdW5jdGlvbihmdW5jKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7XG4gICAgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSkgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gICAgICBDdG9yLnByb3RvdHlwZSA9IGZ1bmMucHJvdG90eXBlO1xuICAgICAgdmFyIHNlbGYgPSBuZXcgQ3RvcjtcbiAgICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHNlbGYsIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgICAgaWYgKF8uaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9O1xuXG4gIC8vIFBhcnRpYWxseSBhcHBseSBhIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBpdHNcbiAgLy8gYXJndW1lbnRzIHByZS1maWxsZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFtaWMgYHRoaXNgIGNvbnRleHQuIF8gYWN0c1xuICAvLyBhcyBhIHBsYWNlaG9sZGVyLCBhbGxvd2luZyBhbnkgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIHRvIGJlIHByZS1maWxsZWQuXG4gIF8ucGFydGlhbCA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgYm91bmRBcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDA7XG4gICAgICB2YXIgYXJncyA9IGJvdW5kQXJncy5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGFyZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFyZ3NbaV0gPT09IF8pIGFyZ3NbaV0gPSBhcmd1bWVudHNbcG9zaXRpb24rK107XG4gICAgICB9XG4gICAgICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3RoKSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gIH07XG5cbiAgLy8gQmluZCBhIG51bWJlciBvZiBhbiBvYmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBSZW1haW5pbmcgYXJndW1lbnRzXG4gIC8vIGFyZSB0aGUgbWV0aG9kIG5hbWVzIHRvIGJlIGJvdW5kLiBVc2VmdWwgZm9yIGVuc3VyaW5nIHRoYXQgYWxsIGNhbGxiYWNrc1xuICAvLyBkZWZpbmVkIG9uIGFuIG9iamVjdCBiZWxvbmcgdG8gaXQuXG4gIF8uYmluZEFsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBpLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLCBrZXk7XG4gICAgaWYgKGxlbmd0aCA8PSAxKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTtcbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIG9ialtrZXldID0gXy5iaW5kKG9ialtrZXldLCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuXG4gIF8ubWVtb2l6ZSA9IGZ1bmN0aW9uKGZ1bmMsIGhhc2hlcikge1xuICAgIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNhY2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSBoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleTtcbiAgICAgIGlmICghXy5oYXMoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTtcbiAgICB9O1xuICAgIG1lbW9pemUuY2FjaGUgPSB7fTtcbiAgICByZXR1cm4gbWVtb2l6ZTtcbiAgfTtcblxuICAvLyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxzXG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbiAgXy5kZWxheSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSwgd2FpdCk7XG4gIH07XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIF8uZGVmZXIgPSBmdW5jdGlvbihmdW5jKSB7XG4gICAgcmV0dXJuIF8uZGVsYXkuYXBwbHkoXywgW2Z1bmMsIDFdLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9uY2VcbiAgLy8gZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUuIE5vcm1hbGx5LCB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHdpbGwgcnVuXG4gIC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtcbiAgLy8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVkZ2UsIHBhc3NcbiAgLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBUbyBkaXNhYmxlIGV4ZWN1dGlvbiBvbiB0aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8uXG4gIF8udGhyb3R0bGUgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgdmFyIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgICB2YXIgdGltZW91dCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzID0gMDtcbiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBfLm5vdygpO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbm93ID0gXy5ub3coKTtcbiAgICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBub3c7XG4gICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBpZiAocmVtYWluaW5nIDw9IDAgfHwgcmVtYWluaW5nID4gd2FpdCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3RcbiAgLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvclxuICAvLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGVcbiAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cbiAgXy5kZWJvdW5jZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgIHZhciB0aW1lb3V0LCBhcmdzLCBjb250ZXh0LCB0aW1lc3RhbXAsIHJlc3VsdDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxhc3QgPSBfLm5vdygpIC0gdGltZXN0YW1wO1xuXG4gICAgICBpZiAobGFzdCA8IHdhaXQgJiYgbGFzdCA+IDApIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgLSBsYXN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgdGltZXN0YW1wID0gXy5ub3coKTtcbiAgICAgIHZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgaWYgKCF0aW1lb3V0KSB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICBpZiAoY2FsbE5vdykge1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5jdGlvbihmdW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIF8ucGFydGlhbCh3cmFwcGVyLCBmdW5jKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQtaW4gcHJlZGljYXRlLlxuICBfLm5lZ2F0ZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaFxuICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxuICBfLmNvbXBvc2UgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSBzdGFydDtcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIGFmdGVyIGJlaW5nIGNhbGxlZCBOIHRpbWVzLlxuICBfLmFmdGVyID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA8IDEpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBiZWZvcmUgYmVpbmcgY2FsbGVkIE4gdGltZXMuXG4gIF8uYmVmb3JlID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICB2YXIgbWVtbztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA+IDApIHtcbiAgICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZ1bmMgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBob3dcbiAgLy8gb2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0aWFsaXphdGlvbi5cbiAgXy5vbmNlID0gXy5wYXJ0aWFsKF8uYmVmb3JlLCAyKTtcblxuICAvLyBPYmplY3QgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYFxuICBfLmtleXMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopO1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFzKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuICBfLnZhbHVlcyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlc1tpXSA9IG9ialtrZXlzW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcblxuICAvLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy5cbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBba2V5c1tpXSwgb2JqW2tleXNbaV1dXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhaXJzO1xuICB9O1xuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAgXy5pbnZlcnQgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBrZXlzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5cbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2BcbiAgXy5mdW5jdGlvbnMgPSBfLm1ldGhvZHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKG9ialtrZXldKSkgbmFtZXMucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZXMuc29ydCgpO1xuICB9O1xuXG4gIC8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuICBfLmV4dGVuZCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICAgIHZhciBzb3VyY2UsIHByb3A7XG4gICAgZm9yICh2YXIgaSA9IDEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgc291cmNlID0gYXJndW1lbnRzW2ldO1xuICAgICAgZm9yIChwcm9wIGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIHByb3ApKSB7XG4gICAgICAgICAgICBvYmpbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgb25seSBjb250YWluaW5nIHRoZSB3aGl0ZWxpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLnBpY2sgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9LCBrZXk7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChfLmlzRnVuY3Rpb24oaXRlcmF0ZWUpKSB7XG4gICAgICBpdGVyYXRlZSA9IGNyZWF0ZUNhbGxiYWNrKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIGZvciAoa2V5IGluIG9iaikge1xuICAgICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBrZXlzID0gY29uY2F0LmFwcGx5KFtdLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgICAgb2JqID0gbmV3IE9iamVjdChvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmopIHJlc3VsdFtrZXldID0gb2JqW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLm9taXQgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcbiAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5cyA9IF8ubWFwKGNvbmNhdC5hcHBseShbXSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKSwgU3RyaW5nKTtcbiAgICAgIGl0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICByZXR1cm4gIV8uY29udGFpbnMoa2V5cywga2V5KTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfLnBpY2sob2JqLCBpdGVyYXRlZSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRmlsbCBpbiBhIGdpdmVuIG9iamVjdCB3aXRoIGRlZmF1bHQgcHJvcGVydGllcy5cbiAgXy5kZWZhdWx0cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICAgIGZvciAodmFyIGkgPSAxLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xuICAgICAgICBpZiAob2JqW3Byb3BdID09PSB2b2lkIDApIG9ialtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuXG4gIF8uY2xvbmUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gXy5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF8uZXh0ZW5kKHt9LCBvYmopO1xuICB9O1xuXG4gIC8vIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBfLnRhcCA9IGZ1bmN0aW9uKG9iaiwgaW50ZXJjZXB0b3IpIHtcbiAgICBpbnRlcmNlcHRvcihvYmopO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBpc0VxdWFsYC5cbiAgdmFyIGVxID0gZnVuY3Rpb24oYSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBhcmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuXG4gICAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gICAgaWYgKGEgPT09IGIpIHJldHVybiBhICE9PSAwIHx8IDEgLyBhID09PSAxIC8gYjtcbiAgICAvLyBBIHN0cmljdCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGBudWxsID09IHVuZGVmaW5lZGAuXG4gICAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBhID09PSBiO1xuICAgIC8vIFVud3JhcCBhbnkgd3JhcHBlZCBvYmplY3RzLlxuICAgIGlmIChhIGluc3RhbmNlb2YgXykgYSA9IGEuX3dyYXBwZWQ7XG4gICAgaWYgKGIgaW5zdGFuY2VvZiBfKSBiID0gYi5fd3JhcHBlZDtcbiAgICAvLyBDb21wYXJlIGBbW0NsYXNzXV1gIG5hbWVzLlxuICAgIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpO1xuICAgIGlmIChjbGFzc05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTtcbiAgICBzd2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgICAgLy8gU3RyaW5ncywgbnVtYmVycywgcmVndWxhciBleHByZXNzaW9ucywgZGF0ZXMsIGFuZCBib29sZWFucyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuXG4gICAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxuICAgICAgLy8gUmVnRXhwcyBhcmUgY29lcmNlZCB0byBzdHJpbmdzIGZvciBjb21wYXJpc29uIChOb3RlOiAnJyArIC9hL2kgPT09ICcvYS9pJylcbiAgICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgICAgIC8vIFByaW1pdGl2ZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgb2JqZWN0IHdyYXBwZXJzIGFyZSBlcXVpdmFsZW50OyB0aHVzLCBgXCI1XCJgIGlzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoXCI1XCIpYC5cbiAgICAgICAgcmV0dXJuICcnICsgYSA9PT0gJycgKyBiO1xuICAgICAgY2FzZSAnW29iamVjdCBOdW1iZXJdJzpcbiAgICAgICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICAgICAgLy8gT2JqZWN0KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU5cbiAgICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcbiAgICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgICAgcmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuICAgICAgY2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG4gICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICAgIHJldHVybiArYSA9PT0gK2I7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3Rgc1xuICAgIC8vIGZyb20gZGlmZmVyZW50IGZyYW1lcyBhcmUuXG4gICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuICAgIGlmIChcbiAgICAgIGFDdG9yICE9PSBiQ3RvciAmJlxuICAgICAgLy8gSGFuZGxlIE9iamVjdC5jcmVhdGUoeCkgY2FzZXNcbiAgICAgICdjb25zdHJ1Y3RvcicgaW4gYSAmJiAnY29uc3RydWN0b3InIGluIGIgJiZcbiAgICAgICEoXy5pc0Z1bmN0aW9uKGFDdG9yKSAmJiBhQ3RvciBpbnN0YW5jZW9mIGFDdG9yICYmXG4gICAgICAgIF8uaXNGdW5jdGlvbihiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcilcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuICAgIHZhciBzaXplLCByZXN1bHQ7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBzaXplID0gYS5sZW5ndGg7XG4gICAgICByZXN1bHQgPSBzaXplID09PSBiLmxlbmd0aDtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgLy8gRGVlcCBjb21wYXJlIHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy5cbiAgICAgICAgd2hpbGUgKHNpemUtLSkge1xuICAgICAgICAgIGlmICghKHJlc3VsdCA9IGVxKGFbc2l6ZV0sIGJbc2l6ZV0sIGFTdGFjaywgYlN0YWNrKSkpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLlxuICAgICAgdmFyIGtleXMgPSBfLmtleXMoYSksIGtleTtcbiAgICAgIHNpemUgPSBrZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIHJlc3VsdCA9IF8ua2V5cyhiKS5sZW5ndGggPT09IHNpemU7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHdoaWxlIChzaXplLS0pIHtcbiAgICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAgICBrZXkgPSBrZXlzW3NpemVdO1xuICAgICAgICAgIGlmICghKHJlc3VsdCA9IF8uaGFzKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wb3AoKTtcbiAgICBiU3RhY2sucG9wKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cbiAgXy5pc0VxdWFsID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBlcShhLCBiLCBbXSwgW10pO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSByZXR1cm4gb2JqLmxlbmd0aCA9PT0gMDtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoXy5oYXMob2JqLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIERPTSBlbGVtZW50P1xuICBfLmlzRWxlbWVudCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiAhIShvYmogJiYgb2JqLm5vZGVUeXBlID09PSAxKTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5P1xuICAvLyBEZWxlZ2F0ZXMgdG8gRUNNQTUncyBuYXRpdmUgQXJyYXkuaXNBcnJheVxuICBfLmlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/XG4gIF8uaXNPYmplY3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG4gICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gIH07XG5cbiAgLy8gQWRkIHNvbWUgaXNUeXBlIG1ldGhvZHM6IGlzQXJndW1lbnRzLCBpc0Z1bmN0aW9uLCBpc1N0cmluZywgaXNOdW1iZXIsIGlzRGF0ZSwgaXNSZWdFeHAuXG4gIF8uZWFjaChbJ0FyZ3VtZW50cycsICdGdW5jdGlvbicsICdTdHJpbmcnLCAnTnVtYmVyJywgJ0RhdGUnLCAnUmVnRXhwJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBfWydpcycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSksIHdoZXJlXG4gIC8vIHRoZXJlIGlzbid0IGFueSBpbnNwZWN0YWJsZSBcIkFyZ3VtZW50c1wiIHR5cGUuXG4gIGlmICghXy5pc0FyZ3VtZW50cyhhcmd1bWVudHMpKSB7XG4gICAgXy5pc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIF8uaGFzKG9iaiwgJ2NhbGxlZScpO1xuICAgIH07XG4gIH1cblxuICAvLyBPcHRpbWl6ZSBgaXNGdW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5kIGFuIElFIDExIGJ1Zy5cbiAgaWYgKHR5cGVvZiAvLi8gIT09ICdmdW5jdGlvbicpIHtcbiAgICBfLmlzRnVuY3Rpb24gPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gb2JqZWN0IGEgZmluaXRlIG51bWJlcj9cbiAgXy5pc0Zpbml0ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBpc0Zpbml0ZShvYmopICYmICFpc05hTihwYXJzZUZsb2F0KG9iaikpO1xuICB9O1xuXG4gIC8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFOYD8gKE5hTiBpcyB0aGUgb25seSBudW1iZXIgd2hpY2ggZG9lcyBub3QgZXF1YWwgaXRzZWxmKS5cbiAgXy5pc05hTiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLmlzTnVtYmVyKG9iaikgJiYgb2JqICE9PSArb2JqO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuP1xuICBfLmlzQm9vbGVhbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHRydWUgfHwgb2JqID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5dJztcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/XG4gIF8uaXNOdWxsID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gbnVsbDtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD9cbiAgXy5pc1VuZGVmaW5lZCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHZvaWQgMDtcbiAgfTtcblxuICAvLyBTaG9ydGN1dCBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHByb3BlcnR5IGRpcmVjdGx5XG4gIC8vIG9uIGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIG5vdCBvbiBhIHByb3RvdHlwZSkuXG4gIF8uaGFzID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSdW4gVW5kZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzXG4gIC8vIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgXy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRlZXMuXG4gIF8uaWRlbnRpdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIF8uY29uc3RhbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9O1xuXG4gIF8ubm9vcCA9IGZ1bmN0aW9uKCl7fTtcblxuICBfLnByb3BlcnR5ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9ialtrZXldO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIHByZWRpY2F0ZSBmb3IgY2hlY2tpbmcgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLm1hdGNoZXMgPSBmdW5jdGlvbihhdHRycykge1xuICAgIHZhciBwYWlycyA9IF8ucGFpcnMoYXR0cnMpLCBsZW5ndGggPSBwYWlycy5sZW5ndGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gIWxlbmd0aDtcbiAgICAgIG9iaiA9IG5ldyBPYmplY3Qob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBhaXIgPSBwYWlyc1tpXSwga2V5ID0gcGFpclswXTtcbiAgICAgICAgaWYgKHBhaXJbMV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUnVuIGEgZnVuY3Rpb24gKipuKiogdGltZXMuXG4gIF8udGltZXMgPSBmdW5jdGlvbihuLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTtcbiAgICBpdGVyYXRlZSA9IGNyZWF0ZUNhbGxiYWNrKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgYWNjdW1baV0gPSBpdGVyYXRlZShpKTtcbiAgICByZXR1cm4gYWNjdW07XG4gIH07XG5cbiAgLy8gUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiBtaW4gYW5kIG1heCAoaW5jbHVzaXZlKS5cbiAgXy5yYW5kb20gPSBmdW5jdGlvbihtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT0gbnVsbCkge1xuICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIG1pbiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG4gIH07XG5cbiAgLy8gQSAocG9zc2libHkgZmFzdGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWVzdGFtcCBhcyBhbiBpbnRlZ2VyLlxuICBfLm5vdyA9IERhdGUubm93IHx8IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfTtcblxuICAgLy8gTGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAgfTtcbiAgdmFyIHVuZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG4gIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XG4gICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWRcbiAgICB2YXIgc291cmNlID0gJyg/OicgKyBfLmtleXMobWFwKS5qb2luKCd8JykgKyAnKSc7XG4gICAgdmFyIHRlc3RSZWdleHAgPSBSZWdFeHAoc291cmNlKTtcbiAgICB2YXIgcmVwbGFjZVJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UsICdnJyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsgc3RyaW5nO1xuICAgICAgcmV0dXJuIHRlc3RSZWdleHAudGVzdChzdHJpbmcpID8gc3RyaW5nLnJlcGxhY2UocmVwbGFjZVJlZ2V4cCwgZXNjYXBlcikgOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgXy5lc2NhcGUgPSBjcmVhdGVFc2NhcGVyKGVzY2FwZU1hcCk7XG4gIF8udW5lc2NhcGUgPSBjcmVhdGVFc2NhcGVyKHVuZXNjYXBlTWFwKTtcblxuICAvLyBJZiB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkIGBwcm9wZXJ0eWAgaXMgYSBmdW5jdGlvbiB0aGVuIGludm9rZSBpdCB3aXRoIHRoZVxuICAvLyBgb2JqZWN0YCBhcyBjb250ZXh0OyBvdGhlcndpc2UsIHJldHVybiBpdC5cbiAgXy5yZXN1bHQgPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgIHZhciB2YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgcmV0dXJuIF8uaXNGdW5jdGlvbih2YWx1ZSkgPyBvYmplY3RbcHJvcGVydHldKCkgOiB2YWx1ZTtcbiAgfTtcblxuICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBlbnRpcmUgY2xpZW50IHNlc3Npb24pLlxuICAvLyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRzLlxuICB2YXIgaWRDb3VudGVyID0gMDtcbiAgXy51bmlxdWVJZCA9IGZ1bmN0aW9uKHByZWZpeCkge1xuICAgIHZhciBpZCA9ICsraWRDb3VudGVyICsgJyc7XG4gICAgcmV0dXJuIHByZWZpeCA/IHByZWZpeCArIGlkIDogaWQ7XG4gIH07XG5cbiAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlXG4gIC8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAgXy50ZW1wbGF0ZVNldHRpbmdzID0ge1xuICAgIGV2YWx1YXRlICAgIDogLzwlKFtcXHNcXFNdKz8pJT4vZyxcbiAgICBpbnRlcnBvbGF0ZSA6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZSAgICAgIDogLzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuXG4gIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXNcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXG4gIHZhciBub01hdGNoID0gLyguKV4vO1xuXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXG4gIC8vIHN0cmluZyBsaXRlcmFsLlxuICB2YXIgZXNjYXBlcyA9IHtcbiAgICBcIidcIjogICAgICBcIidcIixcbiAgICAnXFxcXCc6ICAgICAnXFxcXCcsXG4gICAgJ1xccic6ICAgICAncicsXG4gICAgJ1xcbic6ICAgICAnbicsXG4gICAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAgICdcXHUyMDI5JzogJ3UyMDI5J1xuICB9O1xuXG4gIHZhciBlc2NhcGVyID0gL1xcXFx8J3xcXHJ8XFxufFxcdTIwMjh8XFx1MjAyOS9nO1xuXG4gIHZhciBlc2NhcGVDaGFyID0gZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRjaF07XG4gIH07XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5ncztcbiAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBSZWdFeHAoW1xuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZVxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtcblxuICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc291cmNlID0gXCJfX3ArPSdcIjtcbiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHtcbiAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlciwgZXNjYXBlQ2hhcik7XG4gICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgICAgaWYgKGVzY2FwZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGVzY2FwZSArIFwiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGludGVycG9sYXRlICsgXCIpKT09bnVsbD8nJzpfX3QpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdcIjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRvYmUgVk1zIG5lZWQgdGhlIG1hdGNoIHJldHVybmVkIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb2ZmZXN0LlxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0pO1xuICAgIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgIGlmICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xcbicgKyBzb3VyY2UgKyAnfVxcbic7XG5cbiAgICBzb3VyY2UgPSBcInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUuam9pbixcIiArXG4gICAgICBcInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XFxuXCIgK1xuICAgICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxuJztcblxuICAgIHRyeSB7XG4gICAgICB2YXIgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHZhciBhcmd1bWVudCA9IHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonO1xuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbi4gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLmNoYWluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGluc3RhbmNlID0gXyhvYmopO1xuICAgIGluc3RhbmNlLl9jaGFpbiA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIC8vIE9PUFxuICAvLyAtLS0tLS0tLS0tLS0tLS1cbiAgLy8gSWYgVW5kZXJzY29yZSBpcyBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQgcmV0dXJucyBhIHdyYXBwZWQgb2JqZWN0IHRoYXRcbiAgLy8gY2FuIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcbiAgLy8gdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC5cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG4gIHZhciByZXN1bHQgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhaW4gPyBfKG9iaikuY2hhaW4oKSA6IG9iajtcbiAgfTtcblxuICAvLyBBZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubWl4aW4gPSBmdW5jdGlvbihvYmopIHtcbiAgICBfLmVhY2goXy5mdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBfW25hbWVdID0gb2JqW25hbWVdO1xuICAgICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbdGhpcy5fd3JhcHBlZF07XG4gICAgICAgIHB1c2guYXBwbHkoYXJncywgYXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5jYWxsKHRoaXMsIGZ1bmMuYXBwbHkoXywgYXJncykpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBBZGQgYWxsIG9mIHRoZSBVbmRlcnNjb3JlIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlciBvYmplY3QuXG4gIF8ubWl4aW4oXyk7XG5cbiAgLy8gQWRkIGFsbCBtdXRhdG9yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgXy5lYWNoKFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7XG4gICAgICBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgICAgaWYgKChuYW1lID09PSAnc2hpZnQnIHx8IG5hbWUgPT09ICdzcGxpY2UnKSAmJiBvYmoubGVuZ3RoID09PSAwKSBkZWxldGUgb2JqWzBdO1xuICAgICAgcmV0dXJuIHJlc3VsdC5jYWxsKHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gQWRkIGFsbCBhY2Nlc3NvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIF8uZWFjaChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHJlc3VsdC5jYWxsKHRoaXMsIG1ldGhvZC5hcHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBFeHRyYWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVjdC5cbiAgXy5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JhcHBlZDtcbiAgfTtcblxuICAvLyBBTUQgcmVnaXN0cmF0aW9uIGhhcHBlbnMgYXQgdGhlIGVuZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEFNRCBsb2FkZXJzXG4gIC8vIHRoYXQgbWF5IG5vdCBlbmZvcmNlIG5leHQtdHVybiBzZW1hbnRpY3Mgb24gbW9kdWxlcy4gRXZlbiB0aG91Z2ggZ2VuZXJhbFxuICAvLyBwcmFjdGljZSBmb3IgQU1EIHJlZ2lzdHJhdGlvbiBpcyB0byBiZSBhbm9ueW1vdXMsIHVuZGVyc2NvcmUgcmVnaXN0ZXJzXG4gIC8vIGFzIGEgbmFtZWQgbW9kdWxlIGJlY2F1c2UsIGxpa2UgalF1ZXJ5LCBpdCBpcyBhIGJhc2UgbGlicmFyeSB0aGF0IGlzXG4gIC8vIHBvcHVsYXIgZW5vdWdoIHRvIGJlIGJ1bmRsZWQgaW4gYSB0aGlyZCBwYXJ0eSBsaWIsIGJ1dCBub3QgYmUgcGFydCBvZlxuICAvLyBhbiBBTUQgbG9hZCByZXF1ZXN0LiBUaG9zZSBjYXNlcyBjb3VsZCBnZW5lcmF0ZSBhbiBlcnJvciB3aGVuIGFuXG4gIC8vIGFub255bW91cyBkZWZpbmUoKSBpcyBjYWxsZWQgb3V0c2lkZSBvZiBhIGxvYWRlciByZXF1ZXN0LlxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKCd1bmRlcnNjb3JlJywgW10sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIF87XG4gICAgfSk7XG4gIH1cbn0uY2FsbCh0aGlzKSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuZGVyc2NvcmUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoidW5kZXJzY29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vICAgICBVbmRlcnNjb3JlLmpzIDEuNy4wXHJcbi8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xyXG4vLyAgICAgKGMpIDIwMDktMjAxNCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xyXG4vLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cclxuXHJcbihmdW5jdGlvbigpIHtcclxuXHJcbiAgLy8gQmFzZWxpbmUgc2V0dXBcclxuICAvLyAtLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCBpbiB0aGUgYnJvd3Nlciwgb3IgYGV4cG9ydHNgIG9uIHRoZSBzZXJ2ZXIuXHJcbiAgdmFyIHJvb3QgPSB0aGlzO1xyXG5cclxuICAvLyBTYXZlIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYF9gIHZhcmlhYmxlLlxyXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XHJcblxyXG4gIC8vIFNhdmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChidXQgbm90IGd6aXBwZWQpIHZlcnNpb246XHJcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZSwgRnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xyXG5cclxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cclxuICB2YXJcclxuICAgIHB1c2ggICAgICAgICAgICAgPSBBcnJheVByb3RvLnB1c2gsXHJcbiAgICBzbGljZSAgICAgICAgICAgID0gQXJyYXlQcm90by5zbGljZSxcclxuICAgIGNvbmNhdCAgICAgICAgICAgPSBBcnJheVByb3RvLmNvbmNhdCxcclxuICAgIHRvU3RyaW5nICAgICAgICAgPSBPYmpQcm90by50b1N0cmluZyxcclxuICAgIGhhc093blByb3BlcnR5ICAgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcclxuXHJcbiAgLy8gQWxsICoqRUNNQVNjcmlwdCA1KiogbmF0aXZlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyB0aGF0IHdlIGhvcGUgdG8gdXNlXHJcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXHJcbiAgdmFyXHJcbiAgICBuYXRpdmVJc0FycmF5ICAgICAgPSBBcnJheS5pc0FycmF5LFxyXG4gICAgbmF0aXZlS2V5cyAgICAgICAgID0gT2JqZWN0LmtleXMsXHJcbiAgICBuYXRpdmVCaW5kICAgICAgICAgPSBGdW5jUHJvdG8uYmluZDtcclxuXHJcbiAgLy8gQ3JlYXRlIGEgc2FmZSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciB1c2UgYmVsb3cuXHJcbiAgdmFyIF8gPSBmdW5jdGlvbihvYmopIHtcclxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfKSByZXR1cm4gb2JqO1xyXG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIF8pKSByZXR1cm4gbmV3IF8ob2JqKTtcclxuICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7XHJcbiAgfTtcclxuXHJcbiAgLy8gRXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgKipOb2RlLmpzKiosIHdpdGhcclxuICAvLyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3IgdGhlIG9sZCBgcmVxdWlyZSgpYCBBUEkuIElmIHdlJ3JlIGluXHJcbiAgLy8gdGhlIGJyb3dzZXIsIGFkZCBgX2AgYXMgYSBnbG9iYWwgb2JqZWN0LlxyXG4gIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xyXG4gICAgICBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBfO1xyXG4gICAgfVxyXG4gICAgZXhwb3J0cy5fID0gXztcclxuICB9IGVsc2Uge1xyXG4gICAgcm9vdC5fID0gXztcclxuICB9XHJcblxyXG4gIC8vIEN1cnJlbnQgdmVyc2lvbi5cclxuICBfLlZFUlNJT04gPSAnMS43LjAnO1xyXG5cclxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZWZmaWNpZW50IChmb3IgY3VycmVudCBlbmdpbmVzKSB2ZXJzaW9uXHJcbiAgLy8gb2YgdGhlIHBhc3NlZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVkIGluIG90aGVyIFVuZGVyc2NvcmVcclxuICAvLyBmdW5jdGlvbnMuXHJcbiAgdmFyIGNyZWF0ZUNhbGxiYWNrID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHtcclxuICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xyXG4gICAgc3dpdGNoIChhcmdDb3VudCA9PSBudWxsID8gMyA6IGFyZ0NvdW50KSB7XHJcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7XHJcbiAgICAgIH07XHJcbiAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xyXG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIG90aGVyKTtcclxuICAgICAgfTtcclxuICAgICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xyXG4gICAgICB9O1xyXG4gICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgLy8gQSBtb3N0bHktaW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgY2FsbGJhY2tzIHRoYXQgY2FuIGJlIGFwcGxpZWRcclxuICAvLyB0byBlYWNoIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uLCByZXR1cm5pbmcgdGhlIGRlc2lyZWQgcmVzdWx0IOKAlCBlaXRoZXJcclxuICAvLyBpZGVudGl0eSwgYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXHJcbiAgXy5pdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkge1xyXG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBfLmlkZW50aXR5O1xyXG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybiBjcmVhdGVDYWxsYmFjayh2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpO1xyXG4gICAgaWYgKF8uaXNPYmplY3QodmFsdWUpKSByZXR1cm4gXy5tYXRjaGVzKHZhbHVlKTtcclxuICAgIHJldHVybiBfLnByb3BlcnR5KHZhbHVlKTtcclxuICB9O1xyXG5cclxuICAvLyBDb2xsZWN0aW9uIEZ1bmN0aW9uc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSwgYW4gYGVhY2hgIGltcGxlbWVudGF0aW9uLCBha2EgYGZvckVhY2hgLlxyXG4gIC8vIEhhbmRsZXMgcmF3IG9iamVjdHMgaW4gYWRkaXRpb24gdG8gYXJyYXktbGlrZXMuIFRyZWF0cyBhbGxcclxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxyXG4gIF8uZWFjaCA9IF8uZm9yRWFjaCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcclxuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIG9iajtcclxuICAgIGl0ZXJhdGVlID0gY3JlYXRlQ2FsbGJhY2soaXRlcmF0ZWUsIGNvbnRleHQpO1xyXG4gICAgdmFyIGksIGxlbmd0aCA9IG9iai5sZW5ndGg7XHJcbiAgICBpZiAobGVuZ3RoID09PSArbGVuZ3RoKSB7XHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGl0ZXJhdGVlKG9ialtpXSwgaSwgb2JqKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcclxuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGl0ZXJhdGVlKG9ialtrZXlzW2ldXSwga2V5c1tpXSwgb2JqKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9O1xyXG5cclxuICAvLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC5cclxuICBfLm1hcCA9IF8uY29sbGVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcclxuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIFtdO1xyXG4gICAgaXRlcmF0ZWUgPSBfLml0ZXJhdGVlKGl0ZXJhdGVlLCBjb250ZXh0KTtcclxuICAgIHZhciBrZXlzID0gb2JqLmxlbmd0aCAhPT0gK29iai5sZW5ndGggJiYgXy5rZXlzKG9iaiksXHJcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXHJcbiAgICAgICAgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCksXHJcbiAgICAgICAgY3VycmVudEtleTtcclxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xyXG4gICAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH07XHJcblxyXG4gIHZhciByZWR1Y2VFcnJvciA9ICdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJztcclxuXHJcbiAgLy8gKipSZWR1Y2UqKiBidWlsZHMgdXAgYSBzaW5nbGUgcmVzdWx0IGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYWthIGBpbmplY3RgLFxyXG4gIC8vIG9yIGBmb2xkbGAuXHJcbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBjb250ZXh0KSB7XHJcbiAgICBpZiAob2JqID09IG51bGwpIG9iaiA9IFtdO1xyXG4gICAgaXRlcmF0ZWUgPSBjcmVhdGVDYWxsYmFjayhpdGVyYXRlZSwgY29udGV4dCwgNCk7XHJcbiAgICB2YXIga2V5cyA9IG9iai5sZW5ndGggIT09ICtvYmoubGVuZ3RoICYmIF8ua2V5cyhvYmopLFxyXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxyXG4gICAgICAgIGluZGV4ID0gMCwgY3VycmVudEtleTtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xyXG4gICAgICBpZiAoIWxlbmd0aCkgdGhyb3cgbmV3IFR5cGVFcnJvcihyZWR1Y2VFcnJvcik7XHJcbiAgICAgIG1lbW8gPSBvYmpba2V5cyA/IGtleXNbaW5kZXgrK10gOiBpbmRleCsrXTtcclxuICAgIH1cclxuICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjdXJyZW50S2V5ID0ga2V5cyA/IGtleXNbaW5kZXhdIDogaW5kZXg7XHJcbiAgICAgIG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWVtbztcclxuICB9O1xyXG5cclxuICAvLyBUaGUgcmlnaHQtYXNzb2NpYXRpdmUgdmVyc2lvbiBvZiByZWR1Y2UsIGFsc28ga25vd24gYXMgYGZvbGRyYC5cclxuICBfLnJlZHVjZVJpZ2h0ID0gXy5mb2xkciA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGNvbnRleHQpIHtcclxuICAgIGlmIChvYmogPT0gbnVsbCkgb2JqID0gW107XHJcbiAgICBpdGVyYXRlZSA9IGNyZWF0ZUNhbGxiYWNrKGl0ZXJhdGVlLCBjb250ZXh0LCA0KTtcclxuICAgIHZhciBrZXlzID0gb2JqLmxlbmd0aCAhPT0gKyBvYmoubGVuZ3RoICYmIF8ua2V5cyhvYmopLFxyXG4gICAgICAgIGluZGV4ID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXHJcbiAgICAgICAgY3VycmVudEtleTtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xyXG4gICAgICBpZiAoIWluZGV4KSB0aHJvdyBuZXcgVHlwZUVycm9yKHJlZHVjZUVycm9yKTtcclxuICAgICAgbWVtbyA9IG9ialtrZXlzID8ga2V5c1stLWluZGV4XSA6IC0taW5kZXhdO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKGluZGV4LS0pIHtcclxuICAgICAgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xyXG4gICAgICBtZW1vID0gaXRlcmF0ZWUobWVtbywgb2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1lbW87XHJcbiAgfTtcclxuXHJcbiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0cnV0aCB0ZXN0LiBBbGlhc2VkIGFzIGBkZXRlY3RgLlxyXG4gIF8uZmluZCA9IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcclxuICAgIHZhciByZXN1bHQ7XHJcbiAgICBwcmVkaWNhdGUgPSBfLml0ZXJhdGVlKHByZWRpY2F0ZSwgY29udGV4dCk7XHJcbiAgICBfLnNvbWUob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcclxuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9O1xyXG5cclxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0LlxyXG4gIC8vIEFsaWFzZWQgYXMgYHNlbGVjdGAuXHJcbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XHJcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xyXG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0cztcclxuICAgIHByZWRpY2F0ZSA9IF8uaXRlcmF0ZWUocHJlZGljYXRlLCBjb250ZXh0KTtcclxuICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xyXG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH07XHJcblxyXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuXHJcbiAgXy5yZWplY3QgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xyXG4gICAgcmV0dXJuIF8uZmlsdGVyKG9iaiwgXy5uZWdhdGUoXy5pdGVyYXRlZShwcmVkaWNhdGUpKSwgY29udGV4dCk7XHJcbiAgfTtcclxuXHJcbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBtYXRjaCBhIHRydXRoIHRlc3QuXHJcbiAgLy8gQWxpYXNlZCBhcyBgYWxsYC5cclxuICBfLmV2ZXJ5ID0gXy5hbGwgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xyXG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgIHByZWRpY2F0ZSA9IF8uaXRlcmF0ZWUocHJlZGljYXRlLCBjb250ZXh0KTtcclxuICAgIHZhciBrZXlzID0gb2JqLmxlbmd0aCAhPT0gK29iai5sZW5ndGggJiYgXy5rZXlzKG9iaiksXHJcbiAgICAgICAgbGVuZ3RoID0gKGtleXMgfHwgb2JqKS5sZW5ndGgsXHJcbiAgICAgICAgaW5kZXgsIGN1cnJlbnRLZXk7XHJcbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY3VycmVudEtleSA9IGtleXMgPyBrZXlzW2luZGV4XSA6IGluZGV4O1xyXG4gICAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH07XHJcblxyXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LlxyXG4gIC8vIEFsaWFzZWQgYXMgYGFueWAuXHJcbiAgXy5zb21lID0gXy5hbnkgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xyXG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcbiAgICBwcmVkaWNhdGUgPSBfLml0ZXJhdGVlKHByZWRpY2F0ZSwgY29udGV4dCk7XHJcbiAgICB2YXIga2V5cyA9IG9iai5sZW5ndGggIT09ICtvYmoubGVuZ3RoICYmIF8ua2V5cyhvYmopLFxyXG4gICAgICAgIGxlbmd0aCA9IChrZXlzIHx8IG9iaikubGVuZ3RoLFxyXG4gICAgICAgIGluZGV4LCBjdXJyZW50S2V5O1xyXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGN1cnJlbnRLZXkgPSBrZXlzID8ga2V5c1tpbmRleF0gOiBpbmRleDtcclxuICAgICAgaWYgKHByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH07XHJcblxyXG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gdmFsdWUgKHVzaW5nIGA9PT1gKS5cclxuICAvLyBBbGlhc2VkIGFzIGBpbmNsdWRlYC5cclxuICBfLmNvbnRhaW5zID0gXy5pbmNsdWRlID0gZnVuY3Rpb24ob2JqLCB0YXJnZXQpIHtcclxuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKG9iai5sZW5ndGggIT09ICtvYmoubGVuZ3RoKSBvYmogPSBfLnZhbHVlcyhvYmopO1xyXG4gICAgcmV0dXJuIF8uaW5kZXhPZihvYmosIHRhcmdldCkgPj0gMDtcclxuICB9O1xyXG5cclxuICAvLyBJbnZva2UgYSBtZXRob2QgKHdpdGggYXJndW1lbnRzKSBvbiBldmVyeSBpdGVtIGluIGEgY29sbGVjdGlvbi5cclxuICBfLmludm9rZSA9IGZ1bmN0aW9uKG9iaiwgbWV0aG9kKSB7XHJcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcclxuICAgIHZhciBpc0Z1bmMgPSBfLmlzRnVuY3Rpb24obWV0aG9kKTtcclxuICAgIHJldHVybiBfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgIHJldHVybiAoaXNGdW5jID8gbWV0aG9kIDogdmFsdWVbbWV0aG9kXSkuYXBwbHkodmFsdWUsIGFyZ3MpO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgbWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS5cclxuICBfLnBsdWNrID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcclxuICAgIHJldHVybiBfLm1hcChvYmosIF8ucHJvcGVydHkoa2V5KSk7XHJcbiAgfTtcclxuXHJcbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmlsdGVyYDogc2VsZWN0aW5nIG9ubHkgb2JqZWN0c1xyXG4gIC8vIGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuXHJcbiAgXy53aGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtcclxuICAgIHJldHVybiBfLmZpbHRlcihvYmosIF8ubWF0Y2hlcyhhdHRycykpO1xyXG4gIH07XHJcblxyXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdCBvYmplY3RcclxuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxyXG4gIF8uZmluZFdoZXJlID0gZnVuY3Rpb24ob2JqLCBhdHRycykge1xyXG4gICAgcmV0dXJuIF8uZmluZChvYmosIF8ubWF0Y2hlcyhhdHRycykpO1xyXG4gIH07XHJcblxyXG4gIC8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cclxuICBfLm1heCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcclxuICAgIHZhciByZXN1bHQgPSAtSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IC1JbmZpbml0eSxcclxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XHJcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCAmJiBvYmogIT0gbnVsbCkge1xyXG4gICAgICBvYmogPSBvYmoubGVuZ3RoID09PSArb2JqLmxlbmd0aCA/IG9iaiA6IF8udmFsdWVzKG9iaik7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcclxuICAgICAgICBpZiAodmFsdWUgPiByZXN1bHQpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlcmF0ZWUgPSBfLml0ZXJhdGVlKGl0ZXJhdGVlLCBjb250ZXh0KTtcclxuICAgICAgXy5lYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XHJcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xyXG4gICAgICAgIGlmIChjb21wdXRlZCA+IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gLUluZmluaXR5ICYmIHJlc3VsdCA9PT0gLUluZmluaXR5KSB7XHJcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcclxuICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH07XHJcblxyXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cclxuICBfLm1pbiA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcclxuICAgIHZhciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksXHJcbiAgICAgICAgdmFsdWUsIGNvbXB1dGVkO1xyXG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgJiYgb2JqICE9IG51bGwpIHtcclxuICAgICAgb2JqID0gb2JqLmxlbmd0aCA9PT0gK29iai5sZW5ndGggPyBvYmogOiBfLnZhbHVlcyhvYmopO1xyXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XHJcbiAgICAgICAgaWYgKHZhbHVlIDwgcmVzdWx0KSB7XHJcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGl0ZXJhdGVlID0gXy5pdGVyYXRlZShpdGVyYXRlZSwgY29udGV4dCk7XHJcbiAgICAgIF8uZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xyXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KTtcclxuICAgICAgICBpZiAoY29tcHV0ZWQgPCBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3VsdCA9PT0gSW5maW5pdHkpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xyXG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfTtcclxuXHJcbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24sIHVzaW5nIHRoZSBtb2Rlcm4gdmVyc2lvbiBvZiB0aGVcclxuICAvLyBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZSkuXHJcbiAgXy5zaHVmZmxlID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICB2YXIgc2V0ID0gb2JqICYmIG9iai5sZW5ndGggPT09ICtvYmoubGVuZ3RoID8gb2JqIDogXy52YWx1ZXMob2JqKTtcclxuICAgIHZhciBsZW5ndGggPSBzZXQubGVuZ3RoO1xyXG4gICAgdmFyIHNodWZmbGVkID0gQXJyYXkobGVuZ3RoKTtcclxuICAgIGZvciAodmFyIGluZGV4ID0gMCwgcmFuZDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgcmFuZCA9IF8ucmFuZG9tKDAsIGluZGV4KTtcclxuICAgICAgaWYgKHJhbmQgIT09IGluZGV4KSBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtyYW5kXTtcclxuICAgICAgc2h1ZmZsZWRbcmFuZF0gPSBzZXRbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNodWZmbGVkO1xyXG4gIH07XHJcblxyXG4gIC8vIFNhbXBsZSAqKm4qKiByYW5kb20gdmFsdWVzIGZyb20gYSBjb2xsZWN0aW9uLlxyXG4gIC8vIElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgYSBzaW5nbGUgcmFuZG9tIGVsZW1lbnQuXHJcbiAgLy8gVGhlIGludGVybmFsIGBndWFyZGAgYXJndW1lbnQgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgbWFwYC5cclxuICBfLnNhbXBsZSA9IGZ1bmN0aW9uKG9iaiwgbiwgZ3VhcmQpIHtcclxuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHtcclxuICAgICAgaWYgKG9iai5sZW5ndGggIT09ICtvYmoubGVuZ3RoKSBvYmogPSBfLnZhbHVlcyhvYmopO1xyXG4gICAgICByZXR1cm4gb2JqW18ucmFuZG9tKG9iai5sZW5ndGggLSAxKV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXy5zaHVmZmxlKG9iaikuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbikpO1xyXG4gIH07XHJcblxyXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cclxuICBfLnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcclxuICAgIGl0ZXJhdGVlID0gXy5pdGVyYXRlZShpdGVyYXRlZSwgY29udGV4dCk7XHJcbiAgICByZXR1cm4gXy5wbHVjayhfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICBpbmRleDogaW5kZXgsXHJcbiAgICAgICAgY3JpdGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgbGlzdClcclxuICAgICAgfTtcclxuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcclxuICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhO1xyXG4gICAgICB2YXIgYiA9IHJpZ2h0LmNyaXRlcmlhO1xyXG4gICAgICBpZiAoYSAhPT0gYikge1xyXG4gICAgICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxO1xyXG4gICAgICAgIGlmIChhIDwgYiB8fCBiID09PSB2b2lkIDApIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4O1xyXG4gICAgfSksICd2YWx1ZScpO1xyXG4gIH07XHJcblxyXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgZm9yIGFnZ3JlZ2F0ZSBcImdyb3VwIGJ5XCIgb3BlcmF0aW9ucy5cclxuICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihiZWhhdmlvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcclxuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgICBpdGVyYXRlZSA9IF8uaXRlcmF0ZWUoaXRlcmF0ZWUsIGNvbnRleHQpO1xyXG4gICAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcclxuICAgICAgICB2YXIga2V5ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBvYmopO1xyXG4gICAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAvLyBHcm91cHMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlXHJcbiAgLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uXHJcbiAgXy5ncm91cEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XHJcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XHJcbiAgfSk7XHJcblxyXG4gIC8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgZ3JvdXBCeWAsIGJ1dCBmb3JcclxuICAvLyB3aGVuIHlvdSBrbm93IHRoYXQgeW91ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuXHJcbiAgXy5pbmRleEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XHJcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xyXG4gIH0pO1xyXG5cclxuICAvLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3NcclxuICAvLyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlIHRvIGNvdW50IGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcclxuICAvLyBjcml0ZXJpb24uXHJcbiAgXy5jb3VudEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XHJcbiAgICBpZiAoXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBlbHNlIHJlc3VsdFtrZXldID0gMTtcclxuICB9KTtcclxuXHJcbiAgLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzbWFsbGVzdCBpbmRleCBhdCB3aGljaFxyXG4gIC8vIGFuIG9iamVjdCBzaG91bGQgYmUgaW5zZXJ0ZWQgc28gYXMgdG8gbWFpbnRhaW4gb3JkZXIuIFVzZXMgYmluYXJ5IHNlYXJjaC5cclxuICBfLnNvcnRlZEluZGV4ID0gZnVuY3Rpb24oYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcclxuICAgIGl0ZXJhdGVlID0gXy5pdGVyYXRlZShpdGVyYXRlZSwgY29udGV4dCwgMSk7XHJcbiAgICB2YXIgdmFsdWUgPSBpdGVyYXRlZShvYmopO1xyXG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBhcnJheS5sZW5ndGg7XHJcbiAgICB3aGlsZSAobG93IDwgaGlnaCkge1xyXG4gICAgICB2YXIgbWlkID0gbG93ICsgaGlnaCA+Pj4gMTtcclxuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W21pZF0pIDwgdmFsdWUpIGxvdyA9IG1pZCArIDE7IGVsc2UgaGlnaCA9IG1pZDtcclxuICAgIH1cclxuICAgIHJldHVybiBsb3c7XHJcbiAgfTtcclxuXHJcbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cclxuICBfLnRvQXJyYXkgPSBmdW5jdGlvbihvYmopIHtcclxuICAgIGlmICghb2JqKSByZXR1cm4gW107XHJcbiAgICBpZiAoXy5pc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7XHJcbiAgICBpZiAob2JqLmxlbmd0aCA9PT0gK29iai5sZW5ndGgpIHJldHVybiBfLm1hcChvYmosIF8uaWRlbnRpdHkpO1xyXG4gICAgcmV0dXJuIF8udmFsdWVzKG9iaik7XHJcbiAgfTtcclxuXHJcbiAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gb2JqZWN0LlxyXG4gIF8uc2l6ZSA9IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDtcclxuICAgIHJldHVybiBvYmoubGVuZ3RoID09PSArb2JqLmxlbmd0aCA/IG9iai5sZW5ndGggOiBfLmtleXMob2JqKS5sZW5ndGg7XHJcbiAgfTtcclxuXHJcbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBzYXRpc2Z5IHRoZSBnaXZlblxyXG4gIC8vIHByZWRpY2F0ZSwgYW5kIG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgZG8gbm90IHNhdGlzZnkgdGhlIHByZWRpY2F0ZS5cclxuICBfLnBhcnRpdGlvbiA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XHJcbiAgICBwcmVkaWNhdGUgPSBfLml0ZXJhdGVlKHByZWRpY2F0ZSwgY29udGV4dCk7XHJcbiAgICB2YXIgcGFzcyA9IFtdLCBmYWlsID0gW107XHJcbiAgICBfLmVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmopIHtcclxuICAgICAgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBvYmopID8gcGFzcyA6IGZhaWwpLnB1c2godmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gW3Bhc3MsIGZhaWxdO1xyXG4gIH07XHJcblxyXG4gIC8vIEFycmF5IEZ1bmN0aW9uc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvLyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZpcnN0IE5cclxuICAvLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBBbGlhc2VkIGFzIGBoZWFkYCBhbmQgYHRha2VgLiBUaGUgKipndWFyZCoqIGNoZWNrXHJcbiAgLy8gYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxyXG4gIF8uZmlyc3QgPSBfLmhlYWQgPSBfLnRha2UgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcclxuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xyXG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5WzBdO1xyXG4gICAgaWYgKG4gPCAwKSByZXR1cm4gW107XHJcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgMCwgbik7XHJcbiAgfTtcclxuXHJcbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXHJcbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cclxuICAvLyB0aGUgYXJyYXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLiBUaGUgKipndWFyZCoqIGNoZWNrIGFsbG93cyBpdCB0byB3b3JrIHdpdGhcclxuICAvLyBgXy5tYXBgLlxyXG4gIF8uaW5pdGlhbCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xyXG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIDAsIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIChuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbikpKTtcclxuICB9O1xyXG5cclxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXHJcbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gVGhlICoqZ3VhcmQqKiBjaGVjayBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXHJcbiAgXy5sYXN0ID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XHJcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcclxuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcclxuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBNYXRoLm1heChhcnJheS5sZW5ndGggLSBuLCAwKSk7XHJcbiAgfTtcclxuXHJcbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGFycmF5LiBBbGlhc2VkIGFzIGB0YWlsYCBhbmQgYGRyb3BgLlxyXG4gIC8vIEVzcGVjaWFsbHkgdXNlZnVsIG9uIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuXHJcbiAgLy8gdGhlIHJlc3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5LiBUaGUgKipndWFyZCoqXHJcbiAgLy8gY2hlY2sgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxyXG4gIF8ucmVzdCA9IF8udGFpbCA9IF8uZHJvcCA9IGZ1bmN0aW9uKGFycmF5LCBuLCBndWFyZCkge1xyXG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKTtcclxuICB9O1xyXG5cclxuICAvLyBUcmltIG91dCBhbGwgZmFsc3kgdmFsdWVzIGZyb20gYW4gYXJyYXkuXHJcbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJyYXkpIHtcclxuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgXy5pZGVudGl0eSk7XHJcbiAgfTtcclxuXHJcbiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUgYGZsYXR0ZW5gIGZ1bmN0aW9uLlxyXG4gIHZhciBmbGF0dGVuID0gZnVuY3Rpb24oaW5wdXQsIHNoYWxsb3csIHN0cmljdCwgb3V0cHV0KSB7XHJcbiAgICBpZiAoc2hhbGxvdyAmJiBfLmV2ZXJ5KGlucHV0LCBfLmlzQXJyYXkpKSB7XHJcbiAgICAgIHJldHVybiBjb25jYXQuYXBwbHkob3V0cHV0LCBpbnB1dCk7XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gaW5wdXQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XHJcbiAgICAgIGlmICghXy5pc0FycmF5KHZhbHVlKSAmJiAhXy5pc0FyZ3VtZW50cyh2YWx1ZSkpIHtcclxuICAgICAgICBpZiAoIXN0cmljdCkgb3V0cHV0LnB1c2godmFsdWUpO1xyXG4gICAgICB9IGVsc2UgaWYgKHNoYWxsb3cpIHtcclxuICAgICAgICBwdXNoLmFwcGx5KG91dHB1dCwgdmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZsYXR0ZW4odmFsdWUsIHNoYWxsb3csIHN0cmljdCwgb3V0cHV0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxuICB9O1xyXG5cclxuICAvLyBGbGF0dGVuIG91dCBhbiBhcnJheSwgZWl0aGVyIHJlY3Vyc2l2ZWx5IChieSBkZWZhdWx0KSwgb3IganVzdCBvbmUgbGV2ZWwuXHJcbiAgXy5mbGF0dGVuID0gZnVuY3Rpb24oYXJyYXksIHNoYWxsb3cpIHtcclxuICAgIHJldHVybiBmbGF0dGVuKGFycmF5LCBzaGFsbG93LCBmYWxzZSwgW10pO1xyXG4gIH07XHJcblxyXG4gIC8vIFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlKHMpLlxyXG4gIF8ud2l0aG91dCA9IGZ1bmN0aW9uKGFycmF5KSB7XHJcbiAgICByZXR1cm4gXy5kaWZmZXJlbmNlKGFycmF5LCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xyXG4gIH07XHJcblxyXG4gIC8vIFByb2R1Y2UgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIHRoZSBhcnJheS4gSWYgdGhlIGFycmF5IGhhcyBhbHJlYWR5XHJcbiAgLy8gYmVlbiBzb3J0ZWQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgdXNpbmcgYSBmYXN0ZXIgYWxnb3JpdGhtLlxyXG4gIC8vIEFsaWFzZWQgYXMgYHVuaXF1ZWAuXHJcbiAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XHJcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIFtdO1xyXG4gICAgaWYgKCFfLmlzQm9vbGVhbihpc1NvcnRlZCkpIHtcclxuICAgICAgY29udGV4dCA9IGl0ZXJhdGVlO1xyXG4gICAgICBpdGVyYXRlZSA9IGlzU29ydGVkO1xyXG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVlID0gXy5pdGVyYXRlZShpdGVyYXRlZSwgY29udGV4dCk7XHJcbiAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICB2YXIgc2VlbiA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldO1xyXG4gICAgICBpZiAoaXNTb3J0ZWQpIHtcclxuICAgICAgICBpZiAoIWkgfHwgc2VlbiAhPT0gdmFsdWUpIHJlc3VsdC5wdXNoKHZhbHVlKTtcclxuICAgICAgICBzZWVuID0gdmFsdWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcclxuICAgICAgICB2YXIgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSwgaSwgYXJyYXkpO1xyXG4gICAgICAgIGlmIChfLmluZGV4T2Yoc2VlbiwgY29tcHV0ZWQpIDwgMCkge1xyXG4gICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcclxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoXy5pbmRleE9mKHJlc3VsdCwgdmFsdWUpIDwgMCkge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9O1xyXG5cclxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2ZcclxuICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy5cclxuICBfLnVuaW9uID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gXy51bmlxKGZsYXR0ZW4oYXJndW1lbnRzLCB0cnVlLCB0cnVlLCBbXSkpO1xyXG4gIH07XHJcblxyXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyBldmVyeSBpdGVtIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGVcclxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxyXG4gIF8uaW50ZXJzZWN0aW9uID0gZnVuY3Rpb24oYXJyYXkpIHtcclxuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gW107XHJcbiAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgdmFyIGl0ZW0gPSBhcnJheVtpXTtcclxuICAgICAgaWYgKF8uY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7XHJcbiAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgYXJnc0xlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKCFfLmNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkpIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfTtcclxuXHJcbiAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxyXG4gIC8vIE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCByZW1haW4uXHJcbiAgXy5kaWZmZXJlbmNlID0gZnVuY3Rpb24oYXJyYXkpIHtcclxuICAgIHZhciByZXN0ID0gZmxhdHRlbihzbGljZS5jYWxsKGFyZ3VtZW50cywgMSksIHRydWUsIHRydWUsIFtdKTtcclxuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpe1xyXG4gICAgICByZXR1cm4gIV8uY29udGFpbnMocmVzdCwgdmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxyXG4gIC8vIGFuIGluZGV4IGdvIHRvZ2V0aGVyLlxyXG4gIF8uemlwID0gZnVuY3Rpb24oYXJyYXkpIHtcclxuICAgIGlmIChhcnJheSA9PSBudWxsKSByZXR1cm4gW107XHJcbiAgICB2YXIgbGVuZ3RoID0gXy5tYXgoYXJndW1lbnRzLCAnbGVuZ3RoJykubGVuZ3RoO1xyXG4gICAgdmFyIHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICByZXN1bHRzW2ldID0gXy5wbHVjayhhcmd1bWVudHMsIGkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgfTtcclxuXHJcbiAgLy8gQ29udmVydHMgbGlzdHMgaW50byBvYmplY3RzLiBQYXNzIGVpdGhlciBhIHNpbmdsZSBhcnJheSBvZiBgW2tleSwgdmFsdWVdYFxyXG4gIC8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBvZlxyXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy5cclxuICBfLm9iamVjdCA9IGZ1bmN0aW9uKGxpc3QsIHZhbHVlcykge1xyXG4gICAgaWYgKGxpc3QgPT0gbnVsbCkgcmV0dXJuIHt9O1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGxpc3QubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHZhbHVlcykge1xyXG4gICAgICAgIHJlc3VsdFtsaXN0W2ldXSA9IHZhbHVlc1tpXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH07XHJcblxyXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcclxuICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5LlxyXG4gIC8vIElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNzIGB0cnVlYFxyXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXHJcbiAgXy5pbmRleE9mID0gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlzU29ydGVkKSB7XHJcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIC0xO1xyXG4gICAgdmFyIGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7XHJcbiAgICBpZiAoaXNTb3J0ZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBpc1NvcnRlZCA9PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGkgPSBpc1NvcnRlZCA8IDAgPyBNYXRoLm1heCgwLCBsZW5ndGggKyBpc1NvcnRlZCkgOiBpc1NvcnRlZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpID0gXy5zb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuIGFycmF5W2ldID09PSBpdGVtID8gaSA6IC0xO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSBpZiAoYXJyYXlbaV0gPT09IGl0ZW0pIHJldHVybiBpO1xyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH07XHJcblxyXG4gIF8ubGFzdEluZGV4T2YgPSBmdW5jdGlvbihhcnJheSwgaXRlbSwgZnJvbSkge1xyXG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiAtMTtcclxuICAgIHZhciBpZHggPSBhcnJheS5sZW5ndGg7XHJcbiAgICBpZiAodHlwZW9mIGZyb20gPT0gJ251bWJlcicpIHtcclxuICAgICAgaWR4ID0gZnJvbSA8IDAgPyBpZHggKyBmcm9tICsgMSA6IE1hdGgubWluKGlkeCwgZnJvbSArIDEpO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKC0taWR4ID49IDApIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4gaWR4O1xyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH07XHJcblxyXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcclxuICAvLyB0aGUgbmF0aXZlIFB5dGhvbiBgcmFuZ2UoKWAgZnVuY3Rpb24uIFNlZVxyXG4gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXHJcbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8PSAxKSB7XHJcbiAgICAgIHN0b3AgPSBzdGFydCB8fCAwO1xyXG4gICAgICBzdGFydCA9IDA7XHJcbiAgICB9XHJcbiAgICBzdGVwID0gc3RlcCB8fCAxO1xyXG5cclxuICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwgMCk7XHJcbiAgICB2YXIgcmFuZ2UgPSBBcnJheShsZW5ndGgpO1xyXG5cclxuICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyssIHN0YXJ0ICs9IHN0ZXApIHtcclxuICAgICAgcmFuZ2VbaWR4XSA9IHN0YXJ0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByYW5nZTtcclxuICB9O1xyXG5cclxuICAvLyBGdW5jdGlvbiAoYWhlbSkgRnVuY3Rpb25zXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8vIFJldXNhYmxlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciBwcm90b3R5cGUgc2V0dGluZy5cclxuICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCl7fTtcclxuXHJcbiAgLy8gQ3JlYXRlIGEgZnVuY3Rpb24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmluZyBgdGhpc2AsIGFuZCBhcmd1bWVudHMsXHJcbiAgLy8gb3B0aW9uYWxseSkuIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBGdW5jdGlvbi5iaW5kYCBpZlxyXG4gIC8vIGF2YWlsYWJsZS5cclxuICBfLmJpbmQgPSBmdW5jdGlvbihmdW5jLCBjb250ZXh0KSB7XHJcbiAgICB2YXIgYXJncywgYm91bmQ7XHJcbiAgICBpZiAobmF0aXZlQmluZCAmJiBmdW5jLmJpbmQgPT09IG5hdGl2ZUJpbmQpIHJldHVybiBuYXRpdmVCaW5kLmFwcGx5KGZ1bmMsIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XHJcbiAgICBpZiAoIV8uaXNGdW5jdGlvbihmdW5jKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7XHJcbiAgICBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xyXG4gICAgYm91bmQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSkgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XHJcbiAgICAgIEN0b3IucHJvdG90eXBlID0gZnVuYy5wcm90b3R5cGU7XHJcbiAgICAgIHZhciBzZWxmID0gbmV3IEN0b3I7XHJcbiAgICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcclxuICAgICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkoc2VsZiwgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XHJcbiAgICAgIGlmIChfLmlzT2JqZWN0KHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIHJldHVybiBzZWxmO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBib3VuZDtcclxuICB9O1xyXG5cclxuICAvLyBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5jdGlvbiBieSBjcmVhdGluZyBhIHZlcnNpb24gdGhhdCBoYXMgaGFkIHNvbWUgb2YgaXRzXHJcbiAgLy8gYXJndW1lbnRzIHByZS1maWxsZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFtaWMgYHRoaXNgIGNvbnRleHQuIF8gYWN0c1xyXG4gIC8vIGFzIGEgcGxhY2Vob2xkZXIsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgdG8gYmUgcHJlLWZpbGxlZC5cclxuICBfLnBhcnRpYWwgPSBmdW5jdGlvbihmdW5jKSB7XHJcbiAgICB2YXIgYm91bmRBcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgcG9zaXRpb24gPSAwO1xyXG4gICAgICB2YXIgYXJncyA9IGJvdW5kQXJncy5zbGljZSgpO1xyXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gYXJncy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChhcmdzW2ldID09PSBfKSBhcmdzW2ldID0gYXJndW1lbnRzW3Bvc2l0aW9uKytdO1xyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGFyZ3VtZW50cy5sZW5ndGgpIGFyZ3MucHVzaChhcmd1bWVudHNbcG9zaXRpb24rK10pO1xyXG4gICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgLy8gQmluZCBhIG51bWJlciBvZiBhbiBvYmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBSZW1haW5pbmcgYXJndW1lbnRzXHJcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXHJcbiAgLy8gZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRvIGl0LlxyXG4gIF8uYmluZEFsbCA9IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgdmFyIGksIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsIGtleTtcclxuICAgIGlmIChsZW5ndGggPD0gMSkgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWxsIG11c3QgYmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzJyk7XHJcbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAga2V5ID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICBvYmpba2V5XSA9IF8uYmluZChvYmpba2V5XSwgb2JqKTtcclxuICAgIH1cclxuICAgIHJldHVybiBvYmo7XHJcbiAgfTtcclxuXHJcbiAgLy8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy5cclxuICBfLm1lbW9pemUgPSBmdW5jdGlvbihmdW5jLCBoYXNoZXIpIHtcclxuICAgIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgIHZhciBjYWNoZSA9IG1lbW9pemUuY2FjaGU7XHJcbiAgICAgIHZhciBhZGRyZXNzID0gaGFzaGVyID8gaGFzaGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBrZXk7XHJcbiAgICAgIGlmICghXy5oYXMoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgcmV0dXJuIGNhY2hlW2FkZHJlc3NdO1xyXG4gICAgfTtcclxuICAgIG1lbW9pemUuY2FjaGUgPSB7fTtcclxuICAgIHJldHVybiBtZW1vaXplO1xyXG4gIH07XHJcblxyXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcclxuICAvLyBpdCB3aXRoIHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuXHJcbiAgXy5kZWxheSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcclxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xyXG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7XHJcbiAgICB9LCB3YWl0KTtcclxuICB9O1xyXG5cclxuICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcclxuICAvLyBjbGVhcmVkLlxyXG4gIF8uZGVmZXIgPSBmdW5jdGlvbihmdW5jKSB7XHJcbiAgICByZXR1cm4gXy5kZWxheS5hcHBseShfLCBbZnVuYywgMV0uY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSkpO1xyXG4gIH07XHJcblxyXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgd2hlbiBpbnZva2VkLCB3aWxsIG9ubHkgYmUgdHJpZ2dlcmVkIGF0IG1vc3Qgb25jZVxyXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxyXG4gIC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtcclxuICAvLyBidXQgaWYgeW91J2QgbGlrZSB0byBkaXNhYmxlIHRoZSBleGVjdXRpb24gb24gdGhlIGxlYWRpbmcgZWRnZSwgcGFzc1xyXG4gIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxyXG4gIF8udGhyb3R0bGUgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBvcHRpb25zKSB7XHJcbiAgICB2YXIgY29udGV4dCwgYXJncywgcmVzdWx0O1xyXG4gICAgdmFyIHRpbWVvdXQgPSBudWxsO1xyXG4gICAgdmFyIHByZXZpb3VzID0gMDtcclxuICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xyXG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBfLm5vdygpO1xyXG4gICAgICB0aW1lb3V0ID0gbnVsbDtcclxuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcclxuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgbm93ID0gXy5ub3coKTtcclxuICAgICAgaWYgKCFwcmV2aW91cyAmJiBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlKSBwcmV2aW91cyA9IG5vdztcclxuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xyXG4gICAgICBjb250ZXh0ID0gdGhpcztcclxuICAgICAgYXJncyA9IGFyZ3VtZW50cztcclxuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XHJcbiAgICAgICAgdGltZW91dCA9IG51bGw7XHJcbiAgICAgICAgcHJldmlvdXMgPSBub3c7XHJcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcclxuICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcclxuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xyXG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3RcclxuICAvLyBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXHJcbiAgLy8gTiBtaWxsaXNlY29uZHMuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVuY3Rpb24gb24gdGhlXHJcbiAgLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cclxuICBfLmRlYm91bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XHJcbiAgICB2YXIgdGltZW91dCwgYXJncywgY29udGV4dCwgdGltZXN0YW1wLCByZXN1bHQ7XHJcblxyXG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciBsYXN0ID0gXy5ub3coKSAtIHRpbWVzdGFtcDtcclxuXHJcbiAgICAgIGlmIChsYXN0IDwgd2FpdCAmJiBsYXN0ID4gMCkge1xyXG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gbGFzdCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGltZW91dCA9IG51bGw7XHJcbiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XHJcbiAgICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICBjb250ZXh0ID0gdGhpcztcclxuICAgICAgYXJncyA9IGFyZ3VtZW50cztcclxuICAgICAgdGltZXN0YW1wID0gXy5ub3coKTtcclxuICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XHJcbiAgICAgIGlmICghdGltZW91dCkgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xyXG4gICAgICBpZiAoY2FsbE5vdykge1xyXG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XHJcbiAgICAgICAgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcclxuICAvLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kXHJcbiAgLy8gY29uZGl0aW9uYWxseSBleGVjdXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cclxuICBfLndyYXAgPSBmdW5jdGlvbihmdW5jLCB3cmFwcGVyKSB7XHJcbiAgICByZXR1cm4gXy5wYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpO1xyXG4gIH07XHJcblxyXG4gIC8vIFJldHVybnMgYSBuZWdhdGVkIHZlcnNpb24gb2YgdGhlIHBhc3NlZC1pbiBwcmVkaWNhdGUuXHJcbiAgXy5uZWdhdGUgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2hcclxuICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLlxyXG4gIF8uY29tcG9zZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XHJcbiAgICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciBpID0gc3RhcnQ7XHJcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICB3aGlsZSAoaS0tKSByZXN1bHQgPSBhcmdzW2ldLmNhbGwodGhpcywgcmVzdWx0KTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIGFmdGVyIGJlaW5nIGNhbGxlZCBOIHRpbWVzLlxyXG4gIF8uYWZ0ZXIgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICBpZiAoLS10aW1lcyA8IDEpIHtcclxuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBiZWZvcmUgYmVpbmcgY2FsbGVkIE4gdGltZXMuXHJcbiAgXy5iZWZvcmUgPSBmdW5jdGlvbih0aW1lcywgZnVuYykge1xyXG4gICAgdmFyIG1lbW87XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIGlmICgtLXRpbWVzID4gMCkge1xyXG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZnVuYyA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG1lbW87XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXQgbW9zdCBvbmUgdGltZSwgbm8gbWF0dGVyIGhvd1xyXG4gIC8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXHJcbiAgXy5vbmNlID0gXy5wYXJ0aWFsKF8uYmVmb3JlLCAyKTtcclxuXHJcbiAgLy8gT2JqZWN0IEZ1bmN0aW9uc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLy8gUmV0cmlldmUgdGhlIG5hbWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXHJcbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYFxyXG4gIF8ua2V5cyA9IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcclxuICAgIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopO1xyXG4gICAgdmFyIGtleXMgPSBbXTtcclxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xyXG4gICAgcmV0dXJuIGtleXM7XHJcbiAgfTtcclxuXHJcbiAgLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxyXG4gIF8udmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xyXG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xyXG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhbHVlc1tpXSA9IG9ialtrZXlzW2ldXTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZXM7XHJcbiAgfTtcclxuXHJcbiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuXHJcbiAgXy5wYWlycyA9IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgdmFyIGtleXMgPSBfLmtleXMob2JqKTtcclxuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcclxuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHBhaXJzW2ldID0gW2tleXNbaV0sIG9ialtrZXlzW2ldXV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFpcnM7XHJcbiAgfTtcclxuXHJcbiAgLy8gSW52ZXJ0IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2VyaWFsaXphYmxlLlxyXG4gIF8uaW52ZXJ0ID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICB2YXIga2V5cyA9IF8ua2V5cyhvYmopO1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgcmVzdWx0W29ialtrZXlzW2ldXV0gPSBrZXlzW2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9O1xyXG5cclxuICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuXHJcbiAgLy8gQWxpYXNlZCBhcyBgbWV0aG9kc2BcclxuICBfLmZ1bmN0aW9ucyA9IF8ubWV0aG9kcyA9IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgdmFyIG5hbWVzID0gW107XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XHJcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ob2JqW2tleV0pKSBuYW1lcy5wdXNoKGtleSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmFtZXMuc29ydCgpO1xyXG4gIH07XHJcblxyXG4gIC8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMpLlxyXG4gIF8uZXh0ZW5kID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcclxuICAgIHZhciBzb3VyY2UsIHByb3A7XHJcbiAgICBmb3IgKHZhciBpID0gMSwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgZm9yIChwcm9wIGluIHNvdXJjZSkge1xyXG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwgcHJvcCkpIHtcclxuICAgICAgICAgICAgb2JqW3Byb3BdID0gc291cmNlW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9O1xyXG5cclxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgb25seSBjb250YWluaW5nIHRoZSB3aGl0ZWxpc3RlZCBwcm9wZXJ0aWVzLlxyXG4gIF8ucGljayA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcclxuICAgIHZhciByZXN1bHQgPSB7fSwga2V5O1xyXG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHtcclxuICAgICAgaXRlcmF0ZWUgPSBjcmVhdGVDYWxsYmFjayhpdGVyYXRlZSwgY29udGV4dCk7XHJcbiAgICAgIGZvciAoa2V5IGluIG9iaikge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xyXG4gICAgICAgIGlmIChpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmopKSByZXN1bHRba2V5XSA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIga2V5cyA9IGNvbmNhdC5hcHBseShbXSwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcclxuICAgICAgb2JqID0gbmV3IE9iamVjdChvYmopO1xyXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGtleSA9IGtleXNbaV07XHJcbiAgICAgICAgaWYgKGtleSBpbiBvYmopIHJlc3VsdFtrZXldID0gb2JqW2tleV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfTtcclxuXHJcbiAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBibGFja2xpc3RlZCBwcm9wZXJ0aWVzLlxyXG4gIF8ub21pdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcclxuICAgIGlmIChfLmlzRnVuY3Rpb24oaXRlcmF0ZWUpKSB7XHJcbiAgICAgIGl0ZXJhdGVlID0gXy5uZWdhdGUoaXRlcmF0ZWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFyIGtleXMgPSBfLm1hcChjb25jYXQuYXBwbHkoW10sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSksIFN0cmluZyk7XHJcbiAgICAgIGl0ZXJhdGVlID0gZnVuY3Rpb24odmFsdWUsIGtleSkge1xyXG4gICAgICAgIHJldHVybiAhXy5jb250YWlucyhrZXlzLCBrZXkpO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF8ucGljayhvYmosIGl0ZXJhdGVlLCBjb250ZXh0KTtcclxuICB9O1xyXG5cclxuICAvLyBGaWxsIGluIGEgZ2l2ZW4gb2JqZWN0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzLlxyXG4gIF8uZGVmYXVsdHMgPSBmdW5jdGlvbihvYmopIHtcclxuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xyXG4gICAgZm9yICh2YXIgaSA9IDEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xyXG4gICAgICAgIGlmIChvYmpbcHJvcF0gPT09IHZvaWQgMCkgb2JqW3Byb3BdID0gc291cmNlW3Byb3BdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH07XHJcblxyXG4gIC8vIENyZWF0ZSBhIChzaGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cclxuICBfLmNsb25lID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcclxuICAgIHJldHVybiBfLmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogXy5leHRlbmQoe30sIG9iaik7XHJcbiAgfTtcclxuXHJcbiAgLy8gSW52b2tlcyBpbnRlcmNlcHRvciB3aXRoIHRoZSBvYmosIGFuZCB0aGVuIHJldHVybnMgb2JqLlxyXG4gIC8vIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gXCJ0YXAgaW50b1wiIGEgbWV0aG9kIGNoYWluLCBpblxyXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxyXG4gIF8udGFwID0gZnVuY3Rpb24ob2JqLCBpbnRlcmNlcHRvcikge1xyXG4gICAgaW50ZXJjZXB0b3Iob2JqKTtcclxuICAgIHJldHVybiBvYmo7XHJcbiAgfTtcclxuXHJcbiAgLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBpc0VxdWFsYC5cclxuICB2YXIgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xyXG4gICAgLy8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxyXG4gICAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXHJcbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xyXG4gICAgLy8gQSBzdHJpY3QgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgbnVsbCA9PSB1bmRlZmluZWRgLlxyXG4gICAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBhID09PSBiO1xyXG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXHJcbiAgICBpZiAoYSBpbnN0YW5jZW9mIF8pIGEgPSBhLl93cmFwcGVkO1xyXG4gICAgaWYgKGIgaW5zdGFuY2VvZiBfKSBiID0gYi5fd3JhcHBlZDtcclxuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXHJcbiAgICB2YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChhKTtcclxuICAgIGlmIChjbGFzc05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTtcclxuICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XHJcbiAgICAgIC8vIFN0cmluZ3MsIG51bWJlcnMsIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGRhdGVzLCBhbmQgYm9vbGVhbnMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLlxyXG4gICAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxyXG4gICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxyXG4gICAgICBjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxyXG4gICAgICAgIC8vIFByaW1pdGl2ZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgb2JqZWN0IHdyYXBwZXJzIGFyZSBlcXVpdmFsZW50OyB0aHVzLCBgXCI1XCJgIGlzXHJcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxyXG4gICAgICAgIHJldHVybiAnJyArIGEgPT09ICcnICsgYjtcclxuICAgICAgY2FzZSAnW29iamVjdCBOdW1iZXJdJzpcclxuICAgICAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxyXG4gICAgICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOXHJcbiAgICAgICAgaWYgKCthICE9PSArYSkgcmV0dXJuICtiICE9PSArYjtcclxuICAgICAgICAvLyBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgZm9yIG90aGVyIG51bWVyaWMgdmFsdWVzLlxyXG4gICAgICAgIHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XHJcbiAgICAgIGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxyXG4gICAgICBjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcclxuICAgICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXHJcbiAgICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xyXG4gICAgICAgIC8vIG9mIGBOYU5gIGFyZSBub3QgZXF1aXZhbGVudC5cclxuICAgICAgICByZXR1cm4gK2EgPT09ICtiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljXHJcbiAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cclxuICAgIHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xyXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XHJcbiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxyXG4gICAgICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuXHJcbiAgICAgIGlmIChhU3RhY2tbbGVuZ3RoXSA9PT0gYSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiO1xyXG4gICAgfVxyXG4gICAgLy8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBzXHJcbiAgICAvLyBmcm9tIGRpZmZlcmVudCBmcmFtZXMgYXJlLlxyXG4gICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xyXG4gICAgaWYgKFxyXG4gICAgICBhQ3RvciAhPT0gYkN0b3IgJiZcclxuICAgICAgLy8gSGFuZGxlIE9iamVjdC5jcmVhdGUoeCkgY2FzZXNcclxuICAgICAgJ2NvbnN0cnVjdG9yJyBpbiBhICYmICdjb25zdHJ1Y3RvcicgaW4gYiAmJlxyXG4gICAgICAhKF8uaXNGdW5jdGlvbihhQ3RvcikgJiYgYUN0b3IgaW5zdGFuY2VvZiBhQ3RvciAmJlxyXG4gICAgICAgIF8uaXNGdW5jdGlvbihiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcilcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXHJcbiAgICBhU3RhY2sucHVzaChhKTtcclxuICAgIGJTdGFjay5wdXNoKGIpO1xyXG4gICAgdmFyIHNpemUsIHJlc3VsdDtcclxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxyXG4gICAgaWYgKGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xyXG4gICAgICAvLyBDb21wYXJlIGFycmF5IGxlbmd0aHMgdG8gZGV0ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeS5cclxuICAgICAgc2l6ZSA9IGEubGVuZ3RoO1xyXG4gICAgICByZXN1bHQgPSBzaXplID09PSBiLmxlbmd0aDtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIC8vIERlZXAgY29tcGFyZSB0aGUgY29udGVudHMsIGlnbm9yaW5nIG5vbi1udW1lcmljIHByb3BlcnRpZXMuXHJcbiAgICAgICAgd2hpbGUgKHNpemUtLSkge1xyXG4gICAgICAgICAgaWYgKCEocmVzdWx0ID0gZXEoYVtzaXplXSwgYltzaXplXSwgYVN0YWNrLCBiU3RhY2spKSkgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cclxuICAgICAgdmFyIGtleXMgPSBfLmtleXMoYSksIGtleTtcclxuICAgICAgc2l6ZSA9IGtleXMubGVuZ3RoO1xyXG4gICAgICAvLyBFbnN1cmUgdGhhdCBib3RoIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVydGllcyBiZWZvcmUgY29tcGFyaW5nIGRlZXAgZXF1YWxpdHkuXHJcbiAgICAgIHJlc3VsdCA9IF8ua2V5cyhiKS5sZW5ndGggPT09IHNpemU7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB3aGlsZSAoc2l6ZS0tKSB7XHJcbiAgICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcclxuICAgICAgICAgIGtleSA9IGtleXNbc2l6ZV07XHJcbiAgICAgICAgICBpZiAoIShyZXN1bHQgPSBfLmhhcyhiLCBrZXkpICYmIGVxKGFba2V5XSwgYltrZXldLCBhU3RhY2ssIGJTdGFjaykpKSBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxyXG4gICAgYVN0YWNrLnBvcCgpO1xyXG4gICAgYlN0YWNrLnBvcCgpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9O1xyXG5cclxuICAvLyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cclxuICBfLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gZXEoYSwgYiwgW10sIFtdKTtcclxuICB9O1xyXG5cclxuICAvLyBJcyBhIGdpdmVuIGFycmF5LCBzdHJpbmcsIG9yIG9iamVjdCBlbXB0eT9cclxuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxyXG4gIF8uaXNFbXB0eSA9IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgIGlmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikgfHwgXy5pc0FyZ3VtZW50cyhvYmopKSByZXR1cm4gb2JqLmxlbmd0aCA9PT0gMDtcclxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH07XHJcblxyXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD9cclxuICBfLmlzRWxlbWVudCA9IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xyXG4gIH07XHJcblxyXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XHJcbiAgLy8gRGVsZWdhdGVzIHRvIEVDTUE1J3MgbmF0aXZlIEFycmF5LmlzQXJyYXlcclxuICBfLmlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IHx8IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcclxuICB9O1xyXG5cclxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD9cclxuICBfLmlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XHJcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcclxuICB9O1xyXG5cclxuICAvLyBBZGQgc29tZSBpc1R5cGUgbWV0aG9kczogaXNBcmd1bWVudHMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc051bWJlciwgaXNEYXRlLCBpc1JlZ0V4cC5cclxuICBfLmVhY2goWydBcmd1bWVudHMnLCAnRnVuY3Rpb24nLCAnU3RyaW5nJywgJ051bWJlcicsICdEYXRlJywgJ1JlZ0V4cCddLCBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICBfWydpcycgKyBuYW1lXSA9IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgbmFtZSArICddJztcclxuICAgIH07XHJcbiAgfSk7XHJcblxyXG4gIC8vIERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2YgdGhlIG1ldGhvZCBpbiBicm93c2VycyAoYWhlbSwgSUUpLCB3aGVyZVxyXG4gIC8vIHRoZXJlIGlzbid0IGFueSBpbnNwZWN0YWJsZSBcIkFyZ3VtZW50c1wiIHR5cGUuXHJcbiAgaWYgKCFfLmlzQXJndW1lbnRzKGFyZ3VtZW50cykpIHtcclxuICAgIF8uaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcclxuICAgICAgcmV0dXJuIF8uaGFzKG9iaiwgJ2NhbGxlZScpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgYW4gSUUgMTEgYnVnLlxyXG4gIGlmICh0eXBlb2YgLy4vICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICBfLmlzRnVuY3Rpb24gPSBmdW5jdGlvbihvYmopIHtcclxuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyBJcyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/XHJcbiAgXy5pc0Zpbml0ZSA9IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgcmV0dXJuIGlzRmluaXRlKG9iaikgJiYgIWlzTmFOKHBhcnNlRmxvYXQob2JqKSk7XHJcbiAgfTtcclxuXHJcbiAgLy8gSXMgdGhlIGdpdmVuIHZhbHVlIGBOYU5gPyAoTmFOIGlzIHRoZSBvbmx5IG51bWJlciB3aGljaCBkb2VzIG5vdCBlcXVhbCBpdHNlbGYpLlxyXG4gIF8uaXNOYU4gPSBmdW5jdGlvbihvYmopIHtcclxuICAgIHJldHVybiBfLmlzTnVtYmVyKG9iaikgJiYgb2JqICE9PSArb2JqO1xyXG4gIH07XHJcblxyXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuP1xyXG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICByZXR1cm4gb2JqID09PSB0cnVlIHx8IG9iaiA9PT0gZmFsc2UgfHwgdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBCb29sZWFuXSc7XHJcbiAgfTtcclxuXHJcbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsP1xyXG4gIF8uaXNOdWxsID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xyXG4gIH07XHJcblxyXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkP1xyXG4gIF8uaXNVbmRlZmluZWQgPSBmdW5jdGlvbihvYmopIHtcclxuICAgIHJldHVybiBvYmogPT09IHZvaWQgMDtcclxuICB9O1xyXG5cclxuICAvLyBTaG9ydGN1dCBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHByb3BlcnR5IGRpcmVjdGx5XHJcbiAgLy8gb24gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS5cclxuICBfLmhhcyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XHJcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XHJcbiAgfTtcclxuXHJcbiAgLy8gVXRpbGl0eSBGdW5jdGlvbnNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvLyBSdW4gVW5kZXJzY29yZS5qcyBpbiAqbm9Db25mbGljdCogbW9kZSwgcmV0dXJuaW5nIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRzXHJcbiAgLy8gcHJldmlvdXMgb3duZXIuIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxyXG4gIF8ubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcm9vdC5fID0gcHJldmlvdXNVbmRlcnNjb3JlO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuXHJcbiAgLy8gS2VlcCB0aGUgaWRlbnRpdHkgZnVuY3Rpb24gYXJvdW5kIGZvciBkZWZhdWx0IGl0ZXJhdGVlcy5cclxuICBfLmlkZW50aXR5ID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9O1xyXG5cclxuICAvLyBQcmVkaWNhdGUtZ2VuZXJhdGluZyBmdW5jdGlvbnMuIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXHJcbiAgXy5jb25zdGFudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgXy5ub29wID0gZnVuY3Rpb24oKXt9O1xyXG5cclxuICBfLnByb3BlcnR5ID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgIHJldHVybiBvYmpba2V5XTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgLy8gUmV0dXJucyBhIHByZWRpY2F0ZSBmb3IgY2hlY2tpbmcgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mIGBrZXk6dmFsdWVgIHBhaXJzLlxyXG4gIF8ubWF0Y2hlcyA9IGZ1bmN0aW9uKGF0dHJzKSB7XHJcbiAgICB2YXIgcGFpcnMgPSBfLnBhaXJzKGF0dHJzKSwgbGVuZ3RoID0gcGFpcnMubGVuZ3RoO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xyXG4gICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiAhbGVuZ3RoO1xyXG4gICAgICBvYmogPSBuZXcgT2JqZWN0KG9iaik7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgcGFpciA9IHBhaXJzW2ldLCBrZXkgPSBwYWlyWzBdO1xyXG4gICAgICAgIGlmIChwYWlyWzFdICE9PSBvYmpba2V5XSB8fCAhKGtleSBpbiBvYmopKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIC8vIFJ1biBhIGZ1bmN0aW9uICoqbioqIHRpbWVzLlxyXG4gIF8udGltZXMgPSBmdW5jdGlvbihuLCBpdGVyYXRlZSwgY29udGV4dCkge1xyXG4gICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpO1xyXG4gICAgaXRlcmF0ZWUgPSBjcmVhdGVDYWxsYmFjayhpdGVyYXRlZSwgY29udGV4dCwgMSk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgYWNjdW1baV0gPSBpdGVyYXRlZShpKTtcclxuICAgIHJldHVybiBhY2N1bTtcclxuICB9O1xyXG5cclxuICAvLyBSZXR1cm4gYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIG1pbiBhbmQgbWF4IChpbmNsdXNpdmUpLlxyXG4gIF8ucmFuZG9tID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIGlmIChtYXggPT0gbnVsbCkge1xyXG4gICAgICBtYXggPSBtaW47XHJcbiAgICAgIG1pbiA9IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKTtcclxuICB9O1xyXG5cclxuICAvLyBBIChwb3NzaWJseSBmYXN0ZXIpIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuXHJcbiAgXy5ub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICB9O1xyXG5cclxuICAgLy8gTGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cclxuICB2YXIgZXNjYXBlTWFwID0ge1xyXG4gICAgJyYnOiAnJmFtcDsnLFxyXG4gICAgJzwnOiAnJmx0OycsXHJcbiAgICAnPic6ICcmZ3Q7JyxcclxuICAgICdcIic6ICcmcXVvdDsnLFxyXG4gICAgXCInXCI6ICcmI3gyNzsnLFxyXG4gICAgJ2AnOiAnJiN4NjA7J1xyXG4gIH07XHJcbiAgdmFyIHVuZXNjYXBlTWFwID0gXy5pbnZlcnQoZXNjYXBlTWFwKTtcclxuXHJcbiAgLy8gRnVuY3Rpb25zIGZvciBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdzIHRvL2Zyb20gSFRNTCBpbnRlcnBvbGF0aW9uLlxyXG4gIHZhciBjcmVhdGVFc2NhcGVyID0gZnVuY3Rpb24obWFwKSB7XHJcbiAgICB2YXIgZXNjYXBlciA9IGZ1bmN0aW9uKG1hdGNoKSB7XHJcbiAgICAgIHJldHVybiBtYXBbbWF0Y2hdO1xyXG4gICAgfTtcclxuICAgIC8vIFJlZ2V4ZXMgZm9yIGlkZW50aWZ5aW5nIGEga2V5IHRoYXQgbmVlZHMgdG8gYmUgZXNjYXBlZFxyXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsgXy5rZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xyXG4gICAgdmFyIHRlc3RSZWdleHAgPSBSZWdFeHAoc291cmNlKTtcclxuICAgIHZhciByZXBsYWNlUmVnZXhwID0gUmVnRXhwKHNvdXJjZSwgJ2cnKTtcclxuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcclxuICAgICAgc3RyaW5nID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsgc3RyaW5nO1xyXG4gICAgICByZXR1cm4gdGVzdFJlZ2V4cC50ZXN0KHN0cmluZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBlc2NhcGVyKSA6IHN0cmluZztcclxuICAgIH07XHJcbiAgfTtcclxuICBfLmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIoZXNjYXBlTWFwKTtcclxuICBfLnVuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XHJcblxyXG4gIC8vIElmIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgYHByb3BlcnR5YCBpcyBhIGZ1bmN0aW9uIHRoZW4gaW52b2tlIGl0IHdpdGggdGhlXHJcbiAgLy8gYG9iamVjdGAgYXMgY29udGV4dDsgb3RoZXJ3aXNlLCByZXR1cm4gaXQuXHJcbiAgXy5yZXN1bHQgPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7XHJcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiB2b2lkIDA7XHJcbiAgICB2YXIgdmFsdWUgPSBvYmplY3RbcHJvcGVydHldO1xyXG4gICAgcmV0dXJuIF8uaXNGdW5jdGlvbih2YWx1ZSkgPyBvYmplY3RbcHJvcGVydHldKCkgOiB2YWx1ZTtcclxuICB9O1xyXG5cclxuICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBlbnRpcmUgY2xpZW50IHNlc3Npb24pLlxyXG4gIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXHJcbiAgdmFyIGlkQ291bnRlciA9IDA7XHJcbiAgXy51bmlxdWVJZCA9IGZ1bmN0aW9uKHByZWZpeCkge1xyXG4gICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJztcclxuICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkO1xyXG4gIH07XHJcblxyXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZVxyXG4gIC8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cclxuICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7XHJcbiAgICBldmFsdWF0ZSAgICA6IC88JShbXFxzXFxTXSs/KSU+L2csXHJcbiAgICBpbnRlcnBvbGF0ZSA6IC88JT0oW1xcc1xcU10rPyklPi9nLFxyXG4gICAgZXNjYXBlICAgICAgOiAvPCUtKFtcXHNcXFNdKz8pJT4vZ1xyXG4gIH07XHJcblxyXG4gIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW5cclxuICAvLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXHJcbiAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guXHJcbiAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87XHJcblxyXG4gIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhXHJcbiAgLy8gc3RyaW5nIGxpdGVyYWwuXHJcbiAgdmFyIGVzY2FwZXMgPSB7XHJcbiAgICBcIidcIjogICAgICBcIidcIixcclxuICAgICdcXFxcJzogICAgICdcXFxcJyxcclxuICAgICdcXHInOiAgICAgJ3InLFxyXG4gICAgJ1xcbic6ICAgICAnbicsXHJcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXHJcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcclxuICB9O1xyXG5cclxuICB2YXIgZXNjYXBlciA9IC9cXFxcfCd8XFxyfFxcbnxcXHUyMDI4fFxcdTIwMjkvZztcclxuXHJcbiAgdmFyIGVzY2FwZUNoYXIgPSBmdW5jdGlvbihtYXRjaCkge1xyXG4gICAgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdO1xyXG4gIH07XHJcblxyXG4gIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uXHJcbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxyXG4gIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLlxyXG4gIC8vIE5COiBgb2xkU2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cclxuICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgc2V0dGluZ3MsIG9sZFNldHRpbmdzKSB7XHJcbiAgICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xyXG4gICAgc2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRpbmdzKTtcclxuXHJcbiAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi5cclxuICAgIHZhciBtYXRjaGVyID0gUmVnRXhwKFtcclxuICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsXHJcbiAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXHJcbiAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2VcclxuICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTtcclxuXHJcbiAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LlxyXG4gICAgdmFyIGluZGV4ID0gMDtcclxuICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xyXG4gICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7XHJcbiAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UoZXNjYXBlciwgZXNjYXBlQ2hhcik7XHJcbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xyXG5cclxuICAgICAgaWYgKGVzY2FwZSkge1xyXG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XHJcbiAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGUpIHtcclxuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGludGVycG9sYXRlICsgXCIpKT09bnVsbD8nJzpfX3QpK1xcbidcIjtcclxuICAgICAgfSBlbHNlIGlmIChldmFsdWF0ZSkge1xyXG4gICAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxuX19wKz0nXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEFkb2JlIFZNcyBuZWVkIHRoZSBtYXRjaCByZXR1cm5lZCB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IG9mZmVzdC5cclxuICAgICAgcmV0dXJuIG1hdGNoO1xyXG4gICAgfSk7XHJcbiAgICBzb3VyY2UgKz0gXCInO1xcblwiO1xyXG5cclxuICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXHJcbiAgICBpZiAoIXNldHRpbmdzLnZhcmlhYmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcXG4nICsgc291cmNlICsgJ31cXG4nO1xyXG5cclxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcclxuICAgICAgXCJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xcblwiICtcclxuICAgICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxuJztcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICB2YXIgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGUuc291cmNlID0gc291cmNlO1xyXG4gICAgICB0aHJvdyBlO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uXHJcbiAgICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJztcclxuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xyXG5cclxuICAgIHJldHVybiB0ZW1wbGF0ZTtcclxuICB9O1xyXG5cclxuICAvLyBBZGQgYSBcImNoYWluXCIgZnVuY3Rpb24uIFN0YXJ0IGNoYWluaW5nIGEgd3JhcHBlZCBVbmRlcnNjb3JlIG9iamVjdC5cclxuICBfLmNoYWluID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICB2YXIgaW5zdGFuY2UgPSBfKG9iaik7XHJcbiAgICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlO1xyXG4gICAgcmV0dXJuIGluc3RhbmNlO1xyXG4gIH07XHJcblxyXG4gIC8vIE9PUFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0XHJcbiAgLy8gY2FuIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCB0aGVcclxuICAvLyB1bmRlcnNjb3JlIGZ1bmN0aW9ucy4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLlxyXG5cclxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXHJcbiAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBvYmo7XHJcbiAgfTtcclxuXHJcbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxyXG4gIF8ubWl4aW4gPSBmdW5jdGlvbihvYmopIHtcclxuICAgIF8uZWFjaChfLmZ1bmN0aW9ucyhvYmopLCBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcclxuICAgICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgYXJncyA9IFt0aGlzLl93cmFwcGVkXTtcclxuICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5jYWxsKHRoaXMsIGZ1bmMuYXBwbHkoXywgYXJncykpO1xyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxyXG4gIF8ubWl4aW4oXyk7XHJcblxyXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXHJcbiAgXy5lYWNoKFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xyXG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcclxuICAgICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7XHJcbiAgICAgIG1ldGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7XHJcbiAgICAgIGlmICgobmFtZSA9PT0gJ3NoaWZ0JyB8fCBuYW1lID09PSAnc3BsaWNlJykgJiYgb2JqLmxlbmd0aCA9PT0gMCkgZGVsZXRlIG9ialswXTtcclxuICAgICAgcmV0dXJuIHJlc3VsdC5jYWxsKHRoaXMsIG9iaik7XHJcbiAgICB9O1xyXG4gIH0pO1xyXG5cclxuICAvLyBBZGQgYWxsIGFjY2Vzc29yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cclxuICBfLmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcclxuICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiByZXN1bHQuY2FsbCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRzKSk7XHJcbiAgICB9O1xyXG4gIH0pO1xyXG5cclxuICAvLyBFeHRyYWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVjdC5cclxuICBfLnByb3RvdHlwZS52YWx1ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XHJcbiAgfTtcclxuXHJcbiAgLy8gQU1EIHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGF0IHRoZSBlbmQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBBTUQgbG9hZGVyc1xyXG4gIC8vIHRoYXQgbWF5IG5vdCBlbmZvcmNlIG5leHQtdHVybiBzZW1hbnRpY3Mgb24gbW9kdWxlcy4gRXZlbiB0aG91Z2ggZ2VuZXJhbFxyXG4gIC8vIHByYWN0aWNlIGZvciBBTUQgcmVnaXN0cmF0aW9uIGlzIHRvIGJlIGFub255bW91cywgdW5kZXJzY29yZSByZWdpc3RlcnNcclxuICAvLyBhcyBhIG5hbWVkIG1vZHVsZSBiZWNhdXNlLCBsaWtlIGpRdWVyeSwgaXQgaXMgYSBiYXNlIGxpYnJhcnkgdGhhdCBpc1xyXG4gIC8vIHBvcHVsYXIgZW5vdWdoIHRvIGJlIGJ1bmRsZWQgaW4gYSB0aGlyZCBwYXJ0eSBsaWIsIGJ1dCBub3QgYmUgcGFydCBvZlxyXG4gIC8vIGFuIEFNRCBsb2FkIHJlcXVlc3QuIFRob3NlIGNhc2VzIGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gYW5cclxuICAvLyBhbm9ueW1vdXMgZGVmaW5lKCkgaXMgY2FsbGVkIG91dHNpZGUgb2YgYSBsb2FkZXIgcmVxdWVzdC5cclxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgICBkZWZpbmUoJ3VuZGVyc2NvcmUnLCBbXSwgZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBfO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59LmNhbGwodGhpcykpO1xyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/uri.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/uri.js index b36c73cc78c..e6e10f2929c 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/uri.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/uri.js @@ -2138,4 +2138,4 @@ return URI; })); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVyaS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6InVyaS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogVVJJLmpzIC0gTXV0YXRpbmcgVVJMc1xuICpcbiAqIFZlcnNpb246IDEuMTYuMVxuICpcbiAqIEF1dGhvcjogUm9kbmV5IFJlaG1cbiAqIFdlYjogaHR0cDovL21lZGlhbGl6ZS5naXRodWIuaW8vVVJJLmpzL1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyXG4gKiAgIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2VcbiAqICAgR1BMIHYzIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9HUEwtMy4wXG4gKlxuICovXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdW1kanMvdW1kL2Jsb2IvbWFzdGVyL3JldHVybkV4cG9ydHMuanNcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgIC8vIE5vZGVcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi9wdW55Y29kZScpLCByZXF1aXJlKCcuL0lQdjYnKSwgcmVxdWlyZSgnLi9TZWNvbmRMZXZlbERvbWFpbnMnKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuICAgIGRlZmluZShbJy4vcHVueWNvZGUnLCAnLi9JUHY2JywgJy4vU2Vjb25kTGV2ZWxEb21haW5zJ10sIGZhY3RvcnkpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFscyAocm9vdCBpcyB3aW5kb3cpXG4gICAgcm9vdC5VUkkgPSBmYWN0b3J5KHJvb3QucHVueWNvZGUsIHJvb3QuSVB2Niwgcm9vdC5TZWNvbmRMZXZlbERvbWFpbnMsIHJvb3QpO1xuICB9XG59KHRoaXMsIGZ1bmN0aW9uIChwdW55Y29kZSwgSVB2NiwgU0xELCByb290KSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgLypnbG9iYWwgbG9jYXRpb24sIGVzY2FwZSwgdW5lc2NhcGUgKi9cbiAgLy8gRklYTUU6IHYyLjAuMCByZW5hbWNlIG5vbi1jYW1lbENhc2UgcHJvcGVydGllcyB0byB1cHBlcmNhc2VcbiAgLypqc2hpbnQgY2FtZWxjYXNlOiBmYWxzZSAqL1xuXG4gIC8vIHNhdmUgY3VycmVudCBVUkkgdmFyaWFibGUsIGlmIGFueVxuICB2YXIgX1VSSSA9IHJvb3QgJiYgcm9vdC5VUkk7XG5cbiAgZnVuY3Rpb24gVVJJKHVybCwgYmFzZSkge1xuICAgIHZhciBfdXJsU3VwcGxpZWQgPSBhcmd1bWVudHMubGVuZ3RoID49IDE7XG4gICAgdmFyIF9iYXNlU3VwcGxpZWQgPSBhcmd1bWVudHMubGVuZ3RoID49IDI7XG5cbiAgICAvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVVJJKSkge1xuICAgICAgaWYgKF91cmxTdXBwbGllZCkge1xuICAgICAgICBpZiAoX2Jhc2VTdXBwbGllZCkge1xuICAgICAgICAgIHJldHVybiBuZXcgVVJJKHVybCwgYmFzZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFVSSSh1cmwpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFVSSSgpO1xuICAgIH1cblxuICAgIGlmICh1cmwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKF91cmxTdXBwbGllZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmRlZmluZWQgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQgZm9yIFVSSScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB1cmwgPSBsb2NhdGlvbi5ocmVmICsgJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmwgPSAnJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmhyZWYodXJsKTtcblxuICAgIC8vIHJlc29sdmUgdG8gYmFzZSBhY2NvcmRpbmcgdG8gaHR0cDovL2R2Y3MudzMub3JnL2hnL3VybC9yYXctZmlsZS90aXAvT3ZlcnZpZXcuaHRtbCNjb25zdHJ1Y3RvclxuICAgIGlmIChiYXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmFic29sdXRlVG8oYmFzZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBVUkkudmVyc2lvbiA9ICcxLjE2LjEnO1xuXG4gIHZhciBwID0gVVJJLnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbiAgZnVuY3Rpb24gZXNjYXBlUmVnRXgoc3RyaW5nKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9VUkkuanMvY29tbWl0Lzg1YWMyMTc4M2MxMWY4Y2NhYjA2MTA2ZGJhOTczNWEzMWE4NjkyNGQjY29tbWl0Y29tbWVudC04MjE5NjNcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhbLiorP149IToke30oKXxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFR5cGUodmFsdWUpIHtcbiAgICAvLyBJRTggZG9lc24ndCByZXR1cm4gW09iamVjdCBVbmRlZmluZWRdIGJ1dCBbT2JqZWN0IE9iamVjdF0gZm9yIHVuZGVmaW5lZCB2YWx1ZVxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gJ1VuZGVmaW5lZCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpKS5zbGljZSg4LCAtMSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc0FycmF5KG9iaikge1xuICAgIHJldHVybiBnZXRUeXBlKG9iaikgPT09ICdBcnJheSc7XG4gIH1cblxuICBmdW5jdGlvbiBmaWx0ZXJBcnJheVZhbHVlcyhkYXRhLCB2YWx1ZSkge1xuICAgIHZhciBsb29rdXAgPSB7fTtcbiAgICB2YXIgaSwgbGVuZ3RoO1xuXG4gICAgaWYgKGdldFR5cGUodmFsdWUpID09PSAnUmVnRXhwJykge1xuICAgICAgbG9va3VwID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBsb29rdXBbdmFsdWVbaV1dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9va3VwW3ZhbHVlXSA9IHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gZGF0YS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgLypqc2hpbnQgbGF4YnJlYWs6IHRydWUgKi9cbiAgICAgIHZhciBfbWF0Y2ggPSBsb29rdXAgJiYgbG9va3VwW2RhdGFbaV1dICE9PSB1bmRlZmluZWRcbiAgICAgICAgfHwgIWxvb2t1cCAmJiB2YWx1ZS50ZXN0KGRhdGFbaV0pO1xuICAgICAgLypqc2hpbnQgbGF4YnJlYWs6IGZhbHNlICovXG4gICAgICBpZiAoX21hdGNoKSB7XG4gICAgICAgIGRhdGEuc3BsaWNlKGksIDEpO1xuICAgICAgICBsZW5ndGgtLTtcbiAgICAgICAgaS0tO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJyYXlDb250YWlucyhsaXN0LCB2YWx1ZSkge1xuICAgIHZhciBpLCBsZW5ndGg7XG5cbiAgICAvLyB2YWx1ZSBtYXkgYmUgc3RyaW5nLCBudW1iZXIsIGFycmF5LCByZWdleHBcbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIE5vdGU6IHRoaXMgY2FuIGJlIG9wdGltaXplZCB0byBPKG4pIChpbnN0ZWFkIG9mIGN1cnJlbnQgTyhtICogbikpXG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWFycmF5Q29udGFpbnMobGlzdCwgdmFsdWVbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBfdHlwZSA9IGdldFR5cGUodmFsdWUpO1xuICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGxpc3QubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChfdHlwZSA9PT0gJ1JlZ0V4cCcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBsaXN0W2ldID09PSAnc3RyaW5nJyAmJiBsaXN0W2ldLm1hdGNoKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGxpc3RbaV0gPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFycmF5c0VxdWFsKG9uZSwgdHdvKSB7XG4gICAgaWYgKCFpc0FycmF5KG9uZSkgfHwgIWlzQXJyYXkodHdvKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGFycmF5cyBjYW4ndCBiZSBlcXVhbCBpZiB0aGV5IGhhdmUgZGlmZmVyZW50IGFtb3VudCBvZiBjb250ZW50XG4gICAgaWYgKG9uZS5sZW5ndGggIT09IHR3by5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBvbmUuc29ydCgpO1xuICAgIHR3by5zb3J0KCk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9uZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChvbmVbaV0gIT09IHR3b1tpXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBVUkkuX3BhcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3RvY29sOiBudWxsLFxuICAgICAgdXNlcm5hbWU6IG51bGwsXG4gICAgICBwYXNzd29yZDogbnVsbCxcbiAgICAgIGhvc3RuYW1lOiBudWxsLFxuICAgICAgdXJuOiBudWxsLFxuICAgICAgcG9ydDogbnVsbCxcbiAgICAgIHBhdGg6IG51bGwsXG4gICAgICBxdWVyeTogbnVsbCxcbiAgICAgIGZyYWdtZW50OiBudWxsLFxuICAgICAgLy8gc3RhdGVcbiAgICAgIGR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVyczogVVJJLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgIGVzY2FwZVF1ZXJ5U3BhY2U6IFVSSS5lc2NhcGVRdWVyeVNwYWNlXG4gICAgfTtcbiAgfTtcbiAgLy8gc3RhdGU6IGFsbG93IGR1cGxpY2F0ZSBxdWVyeSBwYXJhbWV0ZXJzIChhPTEmYT0xKVxuICBVUkkuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzID0gZmFsc2U7XG4gIC8vIHN0YXRlOiByZXBsYWNlcyArIHdpdGggJTIwIChzcGFjZSBpbiBxdWVyeSBzdHJpbmdzKVxuICBVUkkuZXNjYXBlUXVlcnlTcGFjZSA9IHRydWU7XG4gIC8vIHN0YXRpYyBwcm9wZXJ0aWVzXG4gIFVSSS5wcm90b2NvbF9leHByZXNzaW9uID0gL15bYS16XVthLXowLTkuKy1dKiQvaTtcbiAgVVJJLmlkbl9leHByZXNzaW9uID0gL1teYS16MC05XFwuLV0vaTtcbiAgVVJJLnB1bnljb2RlX2V4cHJlc3Npb24gPSAvKHhuLS0pL2k7XG4gIC8vIHdlbGwsIDMzMy40NDQuNTU1LjY2NiBtYXRjaGVzLCBidXQgaXQgc3VyZSBhaW4ndCBubyBJUHY0IC0gZG8gd2UgY2FyZT9cbiAgVVJJLmlwNF9leHByZXNzaW9uID0gL15cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfSQvO1xuICAvLyBjcmVkaXRzIHRvIFJpY2ggQnJvd25cbiAgLy8gc291cmNlOiBodHRwOi8vZm9ydW1zLmludGVybWFwcGVyLmNvbS92aWV3dG9waWMucGhwP3A9MTA5NiMxMDk2XG4gIC8vIHNwZWNpZmljYXRpb246IGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQyOTEudHh0XG4gIFVSSS5pcDZfZXhwcmVzc2lvbiA9IC9eXFxzKigoKFswLTlBLUZhLWZdezEsNH06KXs3fShbMC05QS1GYS1mXXsxLDR9fDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs2fSg6WzAtOUEtRmEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezV9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezR9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsM30pfCgoOlswLTlBLUZhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXszfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezJ9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNX0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7MX0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoOigoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpKSglLispP1xccyokLztcbiAgLy8gZXhwcmVzc2lvbiB1c2VkIGlzIFwiZ3J1YmVyIHJldmlzZWRcIiAoQGdydWJlciB2MikgZGV0ZXJtaW5lZCB0byBiZSB0aGVcbiAgLy8gYmVzdCBzb2x1dGlvbiBpbiBhIHJlZ2V4LWdvbGYgd2UgZGlkIGEgY291cGxlIG9mIGFnZXMgYWdvIGF0XG4gIC8vICogaHR0cDovL21hdGhpYXNieW5lbnMuYmUvZGVtby91cmwtcmVnZXhcbiAgLy8gKiBodHRwOi8vcm9kbmV5cmVobS5kZS90L3VybC1yZWdleC5odG1sXG4gIFVSSS5maW5kX3VyaV9leHByZXNzaW9uID0gL1xcYigoPzpbYS16XVtcXHctXSs6KD86XFwvezEsM318W2EtejAtOSVdKXx3d3dcXGR7MCwzfVsuXXxbYS16MC05LlxcLV0rWy5dW2Etel17Miw0fVxcLykoPzpbXlxccygpPD5dK3xcXCgoW15cXHMoKTw+XSt8KFxcKFteXFxzKCk8Pl0rXFwpKSkqXFwpKSsoPzpcXCgoW15cXHMoKTw+XSt8KFxcKFteXFxzKCk8Pl0rXFwpKSkqXFwpfFteXFxzYCEoKVxcW1xcXXt9OzonXCIuLDw+P8KrwrvigJzigJ3igJjigJldKSkvaWc7XG4gIFVSSS5maW5kVXJpID0ge1xuICAgIC8vIHZhbGlkIFwic2NoZW1lOi8vXCIgb3IgXCJ3d3cuXCJcbiAgICBzdGFydDogL1xcYig/OihbYS16XVthLXowLTkuKy1dKjpcXC9cXC8pfHd3d1xcLikvZ2ksXG4gICAgLy8gZXZlcnl0aGluZyB1cCB0byB0aGUgbmV4dCB3aGl0ZXNwYWNlXG4gICAgZW5kOiAvW1xcc1xcclxcbl18JC8sXG4gICAgLy8gdHJpbSB0cmFpbGluZyBwdW5jdHVhdGlvbiBjYXB0dXJlZCBieSBlbmQgUmVnRXhwXG4gICAgdHJpbTogL1tgISgpXFxbXFxde307OidcIi4sPD4/wqvCu+KAnOKAneKAnuKAmOKAmV0rJC9cbiAgfTtcbiAgLy8gaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy91cmktc2NoZW1lcy5odG1sXG4gIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9UQ1BfYW5kX1VEUF9wb3J0X251bWJlcnMjV2VsbC1rbm93bl9wb3J0c1xuICBVUkkuZGVmYXVsdFBvcnRzID0ge1xuICAgIGh0dHA6ICc4MCcsXG4gICAgaHR0cHM6ICc0NDMnLFxuICAgIGZ0cDogJzIxJyxcbiAgICBnb3BoZXI6ICc3MCcsXG4gICAgd3M6ICc4MCcsXG4gICAgd3NzOiAnNDQzJ1xuICB9O1xuICAvLyBhbGxvd2VkIGhvc3RuYW1lIGNoYXJhY3RlcnMgYWNjb3JkaW5nIHRvIFJGQyAzOTg2XG4gIC8vIEFMUEhBIERJR0lUIFwiLVwiIFwiLlwiIFwiX1wiIFwiflwiIFwiIVwiIFwiJFwiIFwiJlwiIFwiJ1wiIFwiKFwiIFwiKVwiIFwiKlwiIFwiK1wiIFwiLFwiIFwiO1wiIFwiPVwiICVlbmNvZGVkXG4gIC8vIEkndmUgbmV2ZXIgc2VlbiBhIChub24tSUROKSBob3N0bmFtZSBvdGhlciB0aGFuOiBBTFBIQSBESUdJVCAuIC1cbiAgVVJJLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycyA9IC9bXmEtekEtWjAtOVxcLi1dLztcbiAgLy8gbWFwIERPTSBFbGVtZW50cyB0byB0aGVpciBVUkkgYXR0cmlidXRlXG4gIFVSSS5kb21BdHRyaWJ1dGVzID0ge1xuICAgICdhJzogJ2hyZWYnLFxuICAgICdibG9ja3F1b3RlJzogJ2NpdGUnLFxuICAgICdsaW5rJzogJ2hyZWYnLFxuICAgICdiYXNlJzogJ2hyZWYnLFxuICAgICdzY3JpcHQnOiAnc3JjJyxcbiAgICAnZm9ybSc6ICdhY3Rpb24nLFxuICAgICdpbWcnOiAnc3JjJyxcbiAgICAnYXJlYSc6ICdocmVmJyxcbiAgICAnaWZyYW1lJzogJ3NyYycsXG4gICAgJ2VtYmVkJzogJ3NyYycsXG4gICAgJ3NvdXJjZSc6ICdzcmMnLFxuICAgICd0cmFjayc6ICdzcmMnLFxuICAgICdpbnB1dCc6ICdzcmMnLCAvLyBidXQgb25seSBpZiB0eXBlPVwiaW1hZ2VcIlxuICAgICdhdWRpbyc6ICdzcmMnLFxuICAgICd2aWRlbyc6ICdzcmMnXG4gIH07XG4gIFVSSS5nZXREb21BdHRyaWJ1dGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKCFub2RlIHx8ICFub2RlLm5vZGVOYW1lKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAvLyA8aW5wdXQ+IHNob3VsZCBvbmx5IGV4cG9zZSBzcmMgZm9yIHR5cGU9XCJpbWFnZVwiXG4gICAgaWYgKG5vZGVOYW1lID09PSAnaW5wdXQnICYmIG5vZGUudHlwZSAhPT0gJ2ltYWdlJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gVVJJLmRvbUF0dHJpYnV0ZXNbbm9kZU5hbWVdO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGVzY2FwZUZvckR1bWJGaXJlZm94MzYodmFsdWUpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcy9pc3N1ZXMvOTFcbiAgICByZXR1cm4gZXNjYXBlKHZhbHVlKTtcbiAgfVxuXG4gIC8vIGVuY29kaW5nIC8gZGVjb2RpbmcgYWNjb3JkaW5nIHRvIFJGQzM5ODZcbiAgZnVuY3Rpb24gc3RyaWN0RW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZykge1xuICAgIC8vIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2VuY29kZVVSSUNvbXBvbmVudFxuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5nKVxuICAgICAgLnJlcGxhY2UoL1shJygpKl0vZywgZXNjYXBlRm9yRHVtYkZpcmVmb3gzNilcbiAgICAgIC5yZXBsYWNlKC9cXCovZywgJyUyQScpO1xuICB9XG4gIFVSSS5lbmNvZGUgPSBzdHJpY3RFbmNvZGVVUklDb21wb25lbnQ7XG4gIFVSSS5kZWNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQ7XG4gIFVSSS5pc284ODU5ID0gZnVuY3Rpb24oKSB7XG4gICAgVVJJLmVuY29kZSA9IGVzY2FwZTtcbiAgICBVUkkuZGVjb2RlID0gdW5lc2NhcGU7XG4gIH07XG4gIFVSSS51bmljb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgVVJJLmVuY29kZSA9IHN0cmljdEVuY29kZVVSSUNvbXBvbmVudDtcbiAgICBVUkkuZGVjb2RlID0gZGVjb2RlVVJJQ29tcG9uZW50O1xuICB9O1xuICBVUkkuY2hhcmFjdGVycyA9IHtcbiAgICBwYXRobmFtZToge1xuICAgICAgZW5jb2RlOiB7XG4gICAgICAgIC8vIFJGQzM5ODYgMi4xOiBGb3IgY29uc2lzdGVuY3ksIFVSSSBwcm9kdWNlcnMgYW5kIG5vcm1hbGl6ZXJzIHNob3VsZFxuICAgICAgICAvLyB1c2UgdXBwZXJjYXNlIGhleGFkZWNpbWFsIGRpZ2l0cyBmb3IgYWxsIHBlcmNlbnQtZW5jb2RpbmdzLlxuICAgICAgICBleHByZXNzaW9uOiAvJSgyNHwyNnwyQnwyQ3wzQnwzRHwzQXw0MCkvaWcsXG4gICAgICAgIG1hcDoge1xuICAgICAgICAgIC8vIC0uX34hJygpKlxuICAgICAgICAgICclMjQnOiAnJCcsXG4gICAgICAgICAgJyUyNic6ICcmJyxcbiAgICAgICAgICAnJTJCJzogJysnLFxuICAgICAgICAgICclMkMnOiAnLCcsXG4gICAgICAgICAgJyUzQic6ICc7JyxcbiAgICAgICAgICAnJTNEJzogJz0nLFxuICAgICAgICAgICclM0EnOiAnOicsXG4gICAgICAgICAgJyU0MCc6ICdAJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVjb2RlOiB7XG4gICAgICAgIGV4cHJlc3Npb246IC9bXFwvXFw/I10vZyxcbiAgICAgICAgbWFwOiB7XG4gICAgICAgICAgJy8nOiAnJTJGJyxcbiAgICAgICAgICAnPyc6ICclM0YnLFxuICAgICAgICAgICcjJzogJyUyMydcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgcmVzZXJ2ZWQ6IHtcbiAgICAgIGVuY29kZToge1xuICAgICAgICAvLyBSRkMzOTg2IDIuMTogRm9yIGNvbnNpc3RlbmN5LCBVUkkgcHJvZHVjZXJzIGFuZCBub3JtYWxpemVycyBzaG91bGRcbiAgICAgICAgLy8gdXNlIHVwcGVyY2FzZSBoZXhhZGVjaW1hbCBkaWdpdHMgZm9yIGFsbCBwZXJjZW50LWVuY29kaW5ncy5cbiAgICAgICAgZXhwcmVzc2lvbjogLyUoMjF8MjN8MjR8MjZ8Mjd8Mjh8Mjl8MkF8MkJ8MkN8MkZ8M0F8M0J8M0R8M0Z8NDB8NUJ8NUQpL2lnLFxuICAgICAgICBtYXA6IHtcbiAgICAgICAgICAvLyBnZW4tZGVsaW1zXG4gICAgICAgICAgJyUzQSc6ICc6JyxcbiAgICAgICAgICAnJTJGJzogJy8nLFxuICAgICAgICAgICclM0YnOiAnPycsXG4gICAgICAgICAgJyUyMyc6ICcjJyxcbiAgICAgICAgICAnJTVCJzogJ1snLFxuICAgICAgICAgICclNUQnOiAnXScsXG4gICAgICAgICAgJyU0MCc6ICdAJyxcbiAgICAgICAgICAvLyBzdWItZGVsaW1zXG4gICAgICAgICAgJyUyMSc6ICchJyxcbiAgICAgICAgICAnJTI0JzogJyQnLFxuICAgICAgICAgICclMjYnOiAnJicsXG4gICAgICAgICAgJyUyNyc6ICdcXCcnLFxuICAgICAgICAgICclMjgnOiAnKCcsXG4gICAgICAgICAgJyUyOSc6ICcpJyxcbiAgICAgICAgICAnJTJBJzogJyonLFxuICAgICAgICAgICclMkInOiAnKycsXG4gICAgICAgICAgJyUyQyc6ICcsJyxcbiAgICAgICAgICAnJTNCJzogJzsnLFxuICAgICAgICAgICclM0QnOiAnPSdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgdXJucGF0aDoge1xuICAgICAgLy8gVGhlIGNoYXJhY3RlcnMgdW5kZXIgYGVuY29kZWAgYXJlIHRoZSBjaGFyYWN0ZXJzIGNhbGxlZCBvdXQgYnkgUkZDIDIxNDEgYXMgYmVpbmcgYWNjZXB0YWJsZVxuICAgICAgLy8gZm9yIHVzYWdlIGluIGEgVVJOLiBSRkMyMTQxIGFsc28gY2FsbHMgb3V0IFwiLVwiLCBcIi5cIiwgYW5kIFwiX1wiIGFzIGFjY2VwdGFibGUgY2hhcmFjdGVycywgYnV0XG4gICAgICAvLyB0aGVzZSBhcmVuJ3QgZW5jb2RlZCBieSBlbmNvZGVVUklDb21wb25lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8gY2FsbCB0aGVtIG91dCBoZXJlLiBBbHNvXG4gICAgICAvLyBub3RlIHRoYXQgdGhlIGNvbG9uIGNoYXJhY3RlciBpcyBub3QgZmVhdHVyZWQgaW4gdGhlIGVuY29kaW5nIG1hcDsgdGhpcyBpcyBiZWNhdXNlIFVSSS5qc1xuICAgICAgLy8gZ2l2ZXMgdGhlIGNvbG9ucyBpbiBVUk5zIHNlbWFudGljIG1lYW5pbmcgYXMgdGhlIGRlbGltaXRlcnMgb2YgcGF0aCBzZWdlbWVudHMsIGFuZCBzbyBpdFxuICAgICAgLy8gc2hvdWxkIG5vdCBhcHBlYXIgdW5lbmNvZGVkIGluIGEgc2VnbWVudCBpdHNlbGYuXG4gICAgICAvLyBTZWUgYWxzbyB0aGUgbm90ZSBhYm92ZSBhYm91dCBSRkMzOTg2IGFuZCBjYXBpdGFsYWxpemVkIGhleCBkaWdpdHMuXG4gICAgICBlbmNvZGU6IHtcbiAgICAgICAgZXhwcmVzc2lvbjogLyUoMjF8MjR8Mjd8Mjh8Mjl8MkF8MkJ8MkN8M0J8M0R8NDApL2lnLFxuICAgICAgICBtYXA6IHtcbiAgICAgICAgICAnJTIxJzogJyEnLFxuICAgICAgICAgICclMjQnOiAnJCcsXG4gICAgICAgICAgJyUyNyc6ICdcXCcnLFxuICAgICAgICAgICclMjgnOiAnKCcsXG4gICAgICAgICAgJyUyOSc6ICcpJyxcbiAgICAgICAgICAnJTJBJzogJyonLFxuICAgICAgICAgICclMkInOiAnKycsXG4gICAgICAgICAgJyUyQyc6ICcsJyxcbiAgICAgICAgICAnJTNCJzogJzsnLFxuICAgICAgICAgICclM0QnOiAnPScsXG4gICAgICAgICAgJyU0MCc6ICdAJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gVGhlc2UgY2hhcmFjdGVycyBhcmUgdGhlIGNoYXJhY3RlcnMgY2FsbGVkIG91dCBieSBSRkMyMTQxIGFzIFwicmVzZXJ2ZWRcIiBjaGFyYWN0ZXJzIHRoYXRcbiAgICAgIC8vIHNob3VsZCBuZXZlciBhcHBlYXIgaW4gYSBVUk4sIHBsdXMgdGhlIGNvbG9uIGNoYXJhY3RlciAoc2VlIG5vdGUgYWJvdmUpLlxuICAgICAgZGVjb2RlOiB7XG4gICAgICAgIGV4cHJlc3Npb246IC9bXFwvXFw/IzpdL2csXG4gICAgICAgIG1hcDoge1xuICAgICAgICAgICcvJzogJyUyRicsXG4gICAgICAgICAgJz8nOiAnJTNGJyxcbiAgICAgICAgICAnIyc6ICclMjMnLFxuICAgICAgICAgICc6JzogJyUzQSdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgVVJJLmVuY29kZVF1ZXJ5ID0gZnVuY3Rpb24oc3RyaW5nLCBlc2NhcGVRdWVyeVNwYWNlKSB7XG4gICAgdmFyIGVzY2FwZWQgPSBVUkkuZW5jb2RlKHN0cmluZyArICcnKTtcbiAgICBpZiAoZXNjYXBlUXVlcnlTcGFjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlc2NhcGVRdWVyeVNwYWNlID0gVVJJLmVzY2FwZVF1ZXJ5U3BhY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVzY2FwZVF1ZXJ5U3BhY2UgPyBlc2NhcGVkLnJlcGxhY2UoLyUyMC9nLCAnKycpIDogZXNjYXBlZDtcbiAgfTtcbiAgVVJJLmRlY29kZVF1ZXJ5ID0gZnVuY3Rpb24oc3RyaW5nLCBlc2NhcGVRdWVyeVNwYWNlKSB7XG4gICAgc3RyaW5nICs9ICcnO1xuICAgIGlmIChlc2NhcGVRdWVyeVNwYWNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVzY2FwZVF1ZXJ5U3BhY2UgPSBVUkkuZXNjYXBlUXVlcnlTcGFjZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIFVSSS5kZWNvZGUoZXNjYXBlUXVlcnlTcGFjZSA/IHN0cmluZy5yZXBsYWNlKC9cXCsvZywgJyUyMCcpIDogc3RyaW5nKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIC8vIHdlJ3JlIG5vdCBnb2luZyB0byBtZXNzIHdpdGggd2VpcmQgZW5jb2RpbmdzLFxuICAgICAgLy8gZ2l2ZSB1cCBhbmQgcmV0dXJuIHRoZSB1bmRlY29kZWQgb3JpZ2luYWwgc3RyaW5nXG4gICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9VUkkuanMvaXNzdWVzLzg3XG4gICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9VUkkuanMvaXNzdWVzLzkyXG4gICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cbiAgfTtcbiAgLy8gZ2VuZXJhdGUgZW5jb2RlL2RlY29kZSBwYXRoIGZ1bmN0aW9uc1xuICB2YXIgX3BhcnRzID0geydlbmNvZGUnOidlbmNvZGUnLCAnZGVjb2RlJzonZGVjb2RlJ307XG4gIHZhciBfcGFydDtcbiAgdmFyIGdlbmVyYXRlQWNjZXNzb3IgPSBmdW5jdGlvbihfZ3JvdXAsIF9wYXJ0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIFVSSVtfcGFydF0oc3RyaW5nICsgJycpLnJlcGxhY2UoVVJJLmNoYXJhY3RlcnNbX2dyb3VwXVtfcGFydF0uZXhwcmVzc2lvbiwgZnVuY3Rpb24oYykge1xuICAgICAgICAgIHJldHVybiBVUkkuY2hhcmFjdGVyc1tfZ3JvdXBdW19wYXJ0XS5tYXBbY107XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB3ZSdyZSBub3QgZ29pbmcgdG8gbWVzcyB3aXRoIHdlaXJkIGVuY29kaW5ncyxcbiAgICAgICAgLy8gZ2l2ZSB1cCBhbmQgcmV0dXJuIHRoZSB1bmRlY29kZWQgb3JpZ2luYWwgc3RyaW5nXG4gICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcy9pc3N1ZXMvODdcbiAgICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvVVJJLmpzL2lzc3Vlcy85MlxuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgZm9yIChfcGFydCBpbiBfcGFydHMpIHtcbiAgICBVUklbX3BhcnQgKyAnUGF0aFNlZ21lbnQnXSA9IGdlbmVyYXRlQWNjZXNzb3IoJ3BhdGhuYW1lJywgX3BhcnRzW19wYXJ0XSk7XG4gICAgVVJJW19wYXJ0ICsgJ1VyblBhdGhTZWdtZW50J10gPSBnZW5lcmF0ZUFjY2Vzc29yKCd1cm5wYXRoJywgX3BhcnRzW19wYXJ0XSk7XG4gIH1cblxuICB2YXIgZ2VuZXJhdGVTZWdtZW50ZWRQYXRoRnVuY3Rpb24gPSBmdW5jdGlvbihfc2VwLCBfY29kaW5nRnVuY05hbWUsIF9pbm5lckNvZGluZ0Z1bmNOYW1lKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgLy8gV2h5IHBhc3MgaW4gbmFtZXMgb2YgZnVuY3Rpb25zLCByYXRoZXIgdGhhbiB0aGUgZnVuY3Rpb24gb2JqZWN0cyB0aGVtc2VsdmVzPyBUaGVcbiAgICAgIC8vIGRlZmluaXRpb25zIG9mIHNvbWUgZnVuY3Rpb25zIChidXQgaW4gcGFydGljdWxhciwgVVJJLmRlY29kZSkgd2lsbCBvY2Nhc2lvbmFsbHkgY2hhbmdlIGR1ZVxuICAgICAgLy8gdG8gVVJJLmpzIGhhdmluZyBJU084ODU5IGFuZCBVbmljb2RlIG1vZGVzLiBQYXNzaW5nIGluIHRoZSBuYW1lIGFuZCBnZXR0aW5nIGl0IHdpbGwgZW5zdXJlXG4gICAgICAvLyB0aGF0IHRoZSBmdW5jdGlvbnMgd2UgdXNlIGhlcmUgYXJlIFwiZnJlc2hcIi5cbiAgICAgIHZhciBhY3R1YWxDb2RpbmdGdW5jO1xuICAgICAgaWYgKCFfaW5uZXJDb2RpbmdGdW5jTmFtZSkge1xuICAgICAgICBhY3R1YWxDb2RpbmdGdW5jID0gVVJJW19jb2RpbmdGdW5jTmFtZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3R1YWxDb2RpbmdGdW5jID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgICAgcmV0dXJuIFVSSVtfY29kaW5nRnVuY05hbWVdKFVSSVtfaW5uZXJDb2RpbmdGdW5jTmFtZV0oc3RyaW5nKSk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWdtZW50cyA9IChzdHJpbmcgKyAnJykuc3BsaXQoX3NlcCk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBzZWdtZW50c1tpXSA9IGFjdHVhbENvZGluZ0Z1bmMoc2VnbWVudHNbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VnbWVudHMuam9pbihfc2VwKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFRoaXMgdGFrZXMgcGxhY2Ugb3V0c2lkZSB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGRvbid0IHdhbnQsIGUuZy4sIGVuY29kZVVyblBhdGggZnVuY3Rpb25zLlxuICBVUkkuZGVjb2RlUGF0aCA9IGdlbmVyYXRlU2VnbWVudGVkUGF0aEZ1bmN0aW9uKCcvJywgJ2RlY29kZVBhdGhTZWdtZW50Jyk7XG4gIFVSSS5kZWNvZGVVcm5QYXRoID0gZ2VuZXJhdGVTZWdtZW50ZWRQYXRoRnVuY3Rpb24oJzonLCAnZGVjb2RlVXJuUGF0aFNlZ21lbnQnKTtcbiAgVVJJLnJlY29kZVBhdGggPSBnZW5lcmF0ZVNlZ21lbnRlZFBhdGhGdW5jdGlvbignLycsICdlbmNvZGVQYXRoU2VnbWVudCcsICdkZWNvZGUnKTtcbiAgVVJJLnJlY29kZVVyblBhdGggPSBnZW5lcmF0ZVNlZ21lbnRlZFBhdGhGdW5jdGlvbignOicsICdlbmNvZGVVcm5QYXRoU2VnbWVudCcsICdkZWNvZGUnKTtcblxuICBVUkkuZW5jb2RlUmVzZXJ2ZWQgPSBnZW5lcmF0ZUFjY2Vzc29yKCdyZXNlcnZlZCcsICdlbmNvZGUnKTtcblxuICBVUkkucGFyc2UgPSBmdW5jdGlvbihzdHJpbmcsIHBhcnRzKSB7XG4gICAgdmFyIHBvcztcbiAgICBpZiAoIXBhcnRzKSB7XG4gICAgICBwYXJ0cyA9IHt9O1xuICAgIH1cbiAgICAvLyBbcHJvdG9jb2xcIjovL1wiW3VzZXJuYW1lW1wiOlwicGFzc3dvcmRdXCJAXCJdaG9zdG5hbWVbXCI6XCJwb3J0XVwiL1wiP11bcGF0aF1bXCI/XCJxdWVyeXN0cmluZ11bXCIjXCJmcmFnbWVudF1cblxuICAgIC8vIGV4dHJhY3QgZnJhZ21lbnRcbiAgICBwb3MgPSBzdHJpbmcuaW5kZXhPZignIycpO1xuICAgIGlmIChwb3MgPiAtMSkge1xuICAgICAgLy8gZXNjYXBpbmc/XG4gICAgICBwYXJ0cy5mcmFnbWVudCA9IHN0cmluZy5zdWJzdHJpbmcocG9zICsgMSkgfHwgbnVsbDtcbiAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmcoMCwgcG9zKTtcbiAgICB9XG5cbiAgICAvLyBleHRyYWN0IHF1ZXJ5XG4gICAgcG9zID0gc3RyaW5nLmluZGV4T2YoJz8nKTtcbiAgICBpZiAocG9zID4gLTEpIHtcbiAgICAgIC8vIGVzY2FwaW5nP1xuICAgICAgcGFydHMucXVlcnkgPSBzdHJpbmcuc3Vic3RyaW5nKHBvcyArIDEpIHx8IG51bGw7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIHBvcyk7XG4gICAgfVxuXG4gICAgLy8gZXh0cmFjdCBwcm90b2NvbFxuICAgIGlmIChzdHJpbmcuc3Vic3RyaW5nKDAsIDIpID09PSAnLy8nKSB7XG4gICAgICAvLyByZWxhdGl2ZS1zY2hlbWVcbiAgICAgIHBhcnRzLnByb3RvY29sID0gbnVsbDtcbiAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmcoMik7XG4gICAgICAvLyBleHRyYWN0IFwidXNlcjpwYXNzQGhvc3Q6cG9ydFwiXG4gICAgICBzdHJpbmcgPSBVUkkucGFyc2VBdXRob3JpdHkoc3RyaW5nLCBwYXJ0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcyA9IHN0cmluZy5pbmRleE9mKCc6Jyk7XG4gICAgICBpZiAocG9zID4gLTEpIHtcbiAgICAgICAgcGFydHMucHJvdG9jb2wgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIHBvcykgfHwgbnVsbDtcbiAgICAgICAgaWYgKHBhcnRzLnByb3RvY29sICYmICFwYXJ0cy5wcm90b2NvbC5tYXRjaChVUkkucHJvdG9jb2xfZXhwcmVzc2lvbikpIHtcbiAgICAgICAgICAvLyA6IG1heSBiZSB3aXRoaW4gdGhlIHBhdGhcbiAgICAgICAgICBwYXJ0cy5wcm90b2NvbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIGlmIChzdHJpbmcuc3Vic3RyaW5nKHBvcyArIDEsIHBvcyArIDMpID09PSAnLy8nKSB7XG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZyhwb3MgKyAzKTtcblxuICAgICAgICAgIC8vIGV4dHJhY3QgXCJ1c2VyOnBhc3NAaG9zdDpwb3J0XCJcbiAgICAgICAgICBzdHJpbmcgPSBVUkkucGFyc2VBdXRob3JpdHkoc3RyaW5nLCBwYXJ0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZyhwb3MgKyAxKTtcbiAgICAgICAgICBwYXJ0cy51cm4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gd2hhdCdzIGxlZnQgbXVzdCBiZSB0aGUgcGF0aFxuICAgIHBhcnRzLnBhdGggPSBzdHJpbmc7XG5cbiAgICAvLyBhbmQgd2UncmUgZG9uZVxuICAgIHJldHVybiBwYXJ0cztcbiAgfTtcbiAgVVJJLnBhcnNlSG9zdCA9IGZ1bmN0aW9uKHN0cmluZywgcGFydHMpIHtcbiAgICAvLyBDb3B5IGNocm9tZSwgSUUsIG9wZXJhIGJhY2tzbGFzaC1oYW5kbGluZyBiZWhhdmlvci5cbiAgICAvLyBCYWNrIHNsYXNoZXMgYmVmb3JlIHRoZSBxdWVyeSBzdHJpbmcgZ2V0IGNvbnZlcnRlZCB0byBmb3J3YXJkIHNsYXNoZXNcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9ibG9iLzM4NmZkMjRmNDliMGU5ZDFhOGEwNzY1OTJhNDA0MTY4ZmFlZWNjMzQvbGliL3VybC5qcyNMMTE1LUwxMjRcbiAgICAvLyBTZWU6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yNTkxNlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvVVJJLmpzL3B1bGwvMjMzXG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgIC8vIGV4dHJhY3QgaG9zdDpwb3J0XG4gICAgdmFyIHBvcyA9IHN0cmluZy5pbmRleE9mKCcvJyk7XG4gICAgdmFyIGJyYWNrZXRQb3M7XG4gICAgdmFyIHQ7XG5cbiAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgcG9zID0gc3RyaW5nLmxlbmd0aDtcbiAgICB9XG5cbiAgICBpZiAoc3RyaW5nLmNoYXJBdCgwKSA9PT0gJ1snKSB7XG4gICAgICAvLyBJUHY2IGhvc3QgLSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLTZtYW4tdGV4dC1hZGRyLXJlcHJlc2VudGF0aW9uLTA0I3NlY3Rpb24tNlxuICAgICAgLy8gSSBjbGFpbSBtb3N0IGNsaWVudCBzb2Z0d2FyZSBicmVha3Mgb24gSVB2NiBhbnl3YXlzLiBUbyBzaW1wbGlmeSB0aGluZ3MsIFVSSSBvbmx5IGFjY2VwdHNcbiAgICAgIC8vIElQdjYrcG9ydCBpbiB0aGUgZm9ybWF0IFsyMDAxOmRiODo6MV06ODAgKGZvciB0aGUgdGltZSBiZWluZylcbiAgICAgIGJyYWNrZXRQb3MgPSBzdHJpbmcuaW5kZXhPZignXScpO1xuICAgICAgcGFydHMuaG9zdG5hbWUgPSBzdHJpbmcuc3Vic3RyaW5nKDEsIGJyYWNrZXRQb3MpIHx8IG51bGw7XG4gICAgICBwYXJ0cy5wb3J0ID0gc3RyaW5nLnN1YnN0cmluZyhicmFja2V0UG9zICsgMiwgcG9zKSB8fCBudWxsO1xuICAgICAgaWYgKHBhcnRzLnBvcnQgPT09ICcvJykge1xuICAgICAgICBwYXJ0cy5wb3J0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZpcnN0Q29sb24gPSBzdHJpbmcuaW5kZXhPZignOicpO1xuICAgICAgdmFyIGZpcnN0U2xhc2ggPSBzdHJpbmcuaW5kZXhPZignLycpO1xuICAgICAgdmFyIG5leHRDb2xvbiA9IHN0cmluZy5pbmRleE9mKCc6JywgZmlyc3RDb2xvbiArIDEpO1xuICAgICAgaWYgKG5leHRDb2xvbiAhPT0gLTEgJiYgKGZpcnN0U2xhc2ggPT09IC0xIHx8IG5leHRDb2xvbiA8IGZpcnN0U2xhc2gpKSB7XG4gICAgICAgIC8vIElQdjYgaG9zdCBjb250YWlucyBtdWx0aXBsZSBjb2xvbnMgLSBidXQgbm8gcG9ydFxuICAgICAgICAvLyB0aGlzIG5vdGF0aW9uIGlzIGFjdHVhbGx5IG5vdCBhbGxvd2VkIGJ5IFJGQyAzOTg2LCBidXQgd2UncmUgYSBsaWJlcmFsIHBhcnNlclxuICAgICAgICBwYXJ0cy5ob3N0bmFtZSA9IHN0cmluZy5zdWJzdHJpbmcoMCwgcG9zKSB8fCBudWxsO1xuICAgICAgICBwYXJ0cy5wb3J0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHQgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIHBvcykuc3BsaXQoJzonKTtcbiAgICAgICAgcGFydHMuaG9zdG5hbWUgPSB0WzBdIHx8IG51bGw7XG4gICAgICAgIHBhcnRzLnBvcnQgPSB0WzFdIHx8IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLmhvc3RuYW1lICYmIHN0cmluZy5zdWJzdHJpbmcocG9zKS5jaGFyQXQoMCkgIT09ICcvJykge1xuICAgICAgcG9zKys7XG4gICAgICBzdHJpbmcgPSAnLycgKyBzdHJpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcocG9zKSB8fCAnLyc7XG4gIH07XG4gIFVSSS5wYXJzZUF1dGhvcml0eSA9IGZ1bmN0aW9uKHN0cmluZywgcGFydHMpIHtcbiAgICBzdHJpbmcgPSBVUkkucGFyc2VVc2VyaW5mbyhzdHJpbmcsIHBhcnRzKTtcbiAgICByZXR1cm4gVVJJLnBhcnNlSG9zdChzdHJpbmcsIHBhcnRzKTtcbiAgfTtcbiAgVVJJLnBhcnNlVXNlcmluZm8gPSBmdW5jdGlvbihzdHJpbmcsIHBhcnRzKSB7XG4gICAgLy8gZXh0cmFjdCB1c2VybmFtZTpwYXNzd29yZFxuICAgIHZhciBmaXJzdFNsYXNoID0gc3RyaW5nLmluZGV4T2YoJy8nKTtcbiAgICB2YXIgcG9zID0gc3RyaW5nLmxhc3RJbmRleE9mKCdAJywgZmlyc3RTbGFzaCA+IC0xID8gZmlyc3RTbGFzaCA6IHN0cmluZy5sZW5ndGggLSAxKTtcbiAgICB2YXIgdDtcblxuICAgIC8vIGF1dGhvcml0eUAgbXVzdCBjb21lIGJlZm9yZSAvcGF0aFxuICAgIGlmIChwb3MgPiAtMSAmJiAoZmlyc3RTbGFzaCA9PT0gLTEgfHwgcG9zIDwgZmlyc3RTbGFzaCkpIHtcbiAgICAgIHQgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIHBvcykuc3BsaXQoJzonKTtcbiAgICAgIHBhcnRzLnVzZXJuYW1lID0gdFswXSA/IFVSSS5kZWNvZGUodFswXSkgOiBudWxsO1xuICAgICAgdC5zaGlmdCgpO1xuICAgICAgcGFydHMucGFzc3dvcmQgPSB0WzBdID8gVVJJLmRlY29kZSh0LmpvaW4oJzonKSkgOiBudWxsO1xuICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZyhwb3MgKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFydHMudXNlcm5hbWUgPSBudWxsO1xuICAgICAgcGFydHMucGFzc3dvcmQgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG4gIFVSSS5wYXJzZVF1ZXJ5ID0gZnVuY3Rpb24oc3RyaW5nLCBlc2NhcGVRdWVyeVNwYWNlKSB7XG4gICAgaWYgKCFzdHJpbmcpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvLyB0aHJvdyBvdXQgdGhlIGZ1bmt5IGJ1c2luZXNzIC0gXCI/XCJbbmFtZVwiPVwidmFsdWVcIiZcIl0rXG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLyYrL2csICcmJykucmVwbGFjZSgvXlxcPyomKnwmKyQvZywgJycpO1xuXG4gICAgaWYgKCFzdHJpbmcpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICB2YXIgaXRlbXMgPSB7fTtcbiAgICB2YXIgc3BsaXRzID0gc3RyaW5nLnNwbGl0KCcmJyk7XG4gICAgdmFyIGxlbmd0aCA9IHNwbGl0cy5sZW5ndGg7XG4gICAgdmFyIHYsIG5hbWUsIHZhbHVlO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdiA9IHNwbGl0c1tpXS5zcGxpdCgnPScpO1xuICAgICAgbmFtZSA9IFVSSS5kZWNvZGVRdWVyeSh2LnNoaWZ0KCksIGVzY2FwZVF1ZXJ5U3BhY2UpO1xuICAgICAgLy8gbm8gXCI9XCIgaXMgbnVsbCBhY2NvcmRpbmcgdG8gaHR0cDovL2R2Y3MudzMub3JnL2hnL3VybC9yYXctZmlsZS90aXAvT3ZlcnZpZXcuaHRtbCNjb2xsZWN0LXVybC1wYXJhbWV0ZXJzXG4gICAgICB2YWx1ZSA9IHYubGVuZ3RoID8gVVJJLmRlY29kZVF1ZXJ5KHYuam9pbignPScpLCBlc2NhcGVRdWVyeVNwYWNlKSA6IG51bGw7XG5cbiAgICAgIGlmIChoYXNPd24uY2FsbChpdGVtcywgbmFtZSkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtc1tuYW1lXSA9PT0gJ3N0cmluZycgfHwgaXRlbXNbbmFtZV0gPT09IG51bGwpIHtcbiAgICAgICAgICBpdGVtc1tuYW1lXSA9IFtpdGVtc1tuYW1lXV07XG4gICAgICAgIH1cblxuICAgICAgICBpdGVtc1tuYW1lXS5wdXNoKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1zW25hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9O1xuXG4gIFVSSS5idWlsZCA9IGZ1bmN0aW9uKHBhcnRzKSB7XG4gICAgdmFyIHQgPSAnJztcblxuICAgIGlmIChwYXJ0cy5wcm90b2NvbCkge1xuICAgICAgdCArPSBwYXJ0cy5wcm90b2NvbCArICc6JztcbiAgICB9XG5cbiAgICBpZiAoIXBhcnRzLnVybiAmJiAodCB8fCBwYXJ0cy5ob3N0bmFtZSkpIHtcbiAgICAgIHQgKz0gJy8vJztcbiAgICB9XG5cbiAgICB0ICs9IChVUkkuYnVpbGRBdXRob3JpdHkocGFydHMpIHx8ICcnKTtcblxuICAgIGlmICh0eXBlb2YgcGFydHMucGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChwYXJ0cy5wYXRoLmNoYXJBdCgwKSAhPT0gJy8nICYmIHR5cGVvZiBwYXJ0cy5ob3N0bmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdCArPSAnLyc7XG4gICAgICB9XG5cbiAgICAgIHQgKz0gcGFydHMucGF0aDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHBhcnRzLnF1ZXJ5ID09PSAnc3RyaW5nJyAmJiBwYXJ0cy5xdWVyeSkge1xuICAgICAgdCArPSAnPycgKyBwYXJ0cy5xdWVyeTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHBhcnRzLmZyYWdtZW50ID09PSAnc3RyaW5nJyAmJiBwYXJ0cy5mcmFnbWVudCkge1xuICAgICAgdCArPSAnIycgKyBwYXJ0cy5mcmFnbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG4gIH07XG4gIFVSSS5idWlsZEhvc3QgPSBmdW5jdGlvbihwYXJ0cykge1xuICAgIHZhciB0ID0gJyc7XG5cbiAgICBpZiAoIXBhcnRzLmhvc3RuYW1lKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmIChVUkkuaXA2X2V4cHJlc3Npb24udGVzdChwYXJ0cy5ob3N0bmFtZSkpIHtcbiAgICAgIHQgKz0gJ1snICsgcGFydHMuaG9zdG5hbWUgKyAnXSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHQgKz0gcGFydHMuaG9zdG5hbWU7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLnBvcnQpIHtcbiAgICAgIHQgKz0gJzonICsgcGFydHMucG9ydDtcbiAgICB9XG5cbiAgICByZXR1cm4gdDtcbiAgfTtcbiAgVVJJLmJ1aWxkQXV0aG9yaXR5ID0gZnVuY3Rpb24ocGFydHMpIHtcbiAgICByZXR1cm4gVVJJLmJ1aWxkVXNlcmluZm8ocGFydHMpICsgVVJJLmJ1aWxkSG9zdChwYXJ0cyk7XG4gIH07XG4gIFVSSS5idWlsZFVzZXJpbmZvID0gZnVuY3Rpb24ocGFydHMpIHtcbiAgICB2YXIgdCA9ICcnO1xuXG4gICAgaWYgKHBhcnRzLnVzZXJuYW1lKSB7XG4gICAgICB0ICs9IFVSSS5lbmNvZGUocGFydHMudXNlcm5hbWUpO1xuXG4gICAgICBpZiAocGFydHMucGFzc3dvcmQpIHtcbiAgICAgICAgdCArPSAnOicgKyBVUkkuZW5jb2RlKHBhcnRzLnBhc3N3b3JkKTtcbiAgICAgIH1cblxuICAgICAgdCArPSAnQCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHQ7XG4gIH07XG4gIFVSSS5idWlsZFF1ZXJ5ID0gZnVuY3Rpb24oZGF0YSwgZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLCBlc2NhcGVRdWVyeVNwYWNlKSB7XG4gICAgLy8gYWNjb3JkaW5nIHRvIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYgb3IgaHR0cDovL2xhYnMuYXBhY2hlLm9yZy93ZWJhcmNoL3VyaS9yZmMvcmZjMzk4Ni5odG1sXG4gICAgLy8gYmVpbmcgwrstLl9+ISQmJygpKissOz06QC8/wqsgJUhFWCBhbmQgYWxudW0gYXJlIGFsbG93ZWRcbiAgICAvLyB0aGUgUkZDIGV4cGxpY2l0bHkgc3RhdGVzID8vZm9vIGJlaW5nIGEgdmFsaWQgdXNlIGNhc2UsIG5vIG1lbnRpb24gb2YgcGFyYW1ldGVyIHN5bnRheCFcbiAgICAvLyBVUkkuanMgdHJlYXRzIHRoZSBxdWVyeSBzdHJpbmcgYXMgYmVpbmcgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvaW50ZXJhY3QvZm9ybXMuaHRtbCNmb3JtLWNvbnRlbnQtdHlwZVxuXG4gICAgdmFyIHQgPSAnJztcbiAgICB2YXIgdW5pcXVlLCBrZXksIGksIGxlbmd0aDtcbiAgICBmb3IgKGtleSBpbiBkYXRhKSB7XG4gICAgICBpZiAoaGFzT3duLmNhbGwoZGF0YSwga2V5KSAmJiBrZXkpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZGF0YVtrZXldKSkge1xuICAgICAgICAgIHVuaXF1ZSA9IHt9O1xuICAgICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGRhdGFba2V5XS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGRhdGFba2V5XVtpXSAhPT0gdW5kZWZpbmVkICYmIHVuaXF1ZVtkYXRhW2tleV1baV0gKyAnJ10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0ICs9ICcmJyArIFVSSS5idWlsZFF1ZXJ5UGFyYW1ldGVyKGtleSwgZGF0YVtrZXldW2ldLCBlc2NhcGVRdWVyeVNwYWNlKTtcbiAgICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHVuaXF1ZVtkYXRhW2tleV1baV0gKyAnJ10gPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdCArPSAnJicgKyBVUkkuYnVpbGRRdWVyeVBhcmFtZXRlcihrZXksIGRhdGFba2V5XSwgZXNjYXBlUXVlcnlTcGFjZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdC5zdWJzdHJpbmcoMSk7XG4gIH07XG4gIFVSSS5idWlsZFF1ZXJ5UGFyYW1ldGVyID0gZnVuY3Rpb24obmFtZSwgdmFsdWUsIGVzY2FwZVF1ZXJ5U3BhY2UpIHtcbiAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2ludGVyYWN0L2Zvcm1zLmh0bWwjZm9ybS1jb250ZW50LXR5cGUgLS0gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXG4gICAgLy8gZG9uJ3QgYXBwZW5kIFwiPVwiIGZvciBudWxsIHZhbHVlcywgYWNjb3JkaW5nIHRvIGh0dHA6Ly9kdmNzLnczLm9yZy9oZy91cmwvcmF3LWZpbGUvdGlwL092ZXJ2aWV3Lmh0bWwjdXJsLXBhcmFtZXRlci1zZXJpYWxpemF0aW9uXG4gICAgcmV0dXJuIFVSSS5lbmNvZGVRdWVyeShuYW1lLCBlc2NhcGVRdWVyeVNwYWNlKSArICh2YWx1ZSAhPT0gbnVsbCA/ICc9JyArIFVSSS5lbmNvZGVRdWVyeSh2YWx1ZSwgZXNjYXBlUXVlcnlTcGFjZSkgOiAnJyk7XG4gIH07XG5cbiAgVVJJLmFkZFF1ZXJ5ID0gZnVuY3Rpb24oZGF0YSwgbmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gbmFtZSkge1xuICAgICAgICBpZiAoaGFzT3duLmNhbGwobmFtZSwga2V5KSkge1xuICAgICAgICAgIFVSSS5hZGRRdWVyeShkYXRhLCBrZXksIG5hbWVba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKGRhdGFbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkYXRhW25hbWVdID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGFbbmFtZV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRhdGFbbmFtZV0gPSBbZGF0YVtuYW1lXV07XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSBbdmFsdWVdO1xuICAgICAgfVxuXG4gICAgICBkYXRhW25hbWVdID0gKGRhdGFbbmFtZV0gfHwgW10pLmNvbmNhdCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VSSS5hZGRRdWVyeSgpIGFjY2VwdHMgYW4gb2JqZWN0LCBzdHJpbmcgYXMgdGhlIG5hbWUgcGFyYW1ldGVyJyk7XG4gICAgfVxuICB9O1xuICBVUkkucmVtb3ZlUXVlcnkgPSBmdW5jdGlvbihkYXRhLCBuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBpLCBsZW5ndGgsIGtleTtcblxuICAgIGlmIChpc0FycmF5KG5hbWUpKSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBuYW1lLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRhdGFbbmFtZVtpXV0gPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChnZXRUeXBlKG5hbWUpID09PSAnUmVnRXhwJykge1xuICAgICAgZm9yIChrZXkgaW4gZGF0YSkge1xuICAgICAgICBpZiAobmFtZS50ZXN0KGtleSkpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgZm9yIChrZXkgaW4gbmFtZSkge1xuICAgICAgICBpZiAoaGFzT3duLmNhbGwobmFtZSwga2V5KSkge1xuICAgICAgICAgIFVSSS5yZW1vdmVRdWVyeShkYXRhLCBrZXksIG5hbWVba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGdldFR5cGUodmFsdWUpID09PSAnUmVnRXhwJykge1xuICAgICAgICAgIGlmICghaXNBcnJheShkYXRhW25hbWVdKSAmJiB2YWx1ZS50ZXN0KGRhdGFbbmFtZV0pKSB7XG4gICAgICAgICAgICBkYXRhW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhW25hbWVdID0gZmlsdGVyQXJyYXlWYWx1ZXMoZGF0YVtuYW1lXSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhW25hbWVdID09PSB2YWx1ZSkge1xuICAgICAgICAgIGRhdGFbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShkYXRhW25hbWVdKSkge1xuICAgICAgICAgIGRhdGFbbmFtZV0gPSBmaWx0ZXJBcnJheVZhbHVlcyhkYXRhW25hbWVdLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGFbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VSSS5yZW1vdmVRdWVyeSgpIGFjY2VwdHMgYW4gb2JqZWN0LCBzdHJpbmcsIFJlZ0V4cCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyJyk7XG4gICAgfVxuICB9O1xuICBVUkkuaGFzUXVlcnkgPSBmdW5jdGlvbihkYXRhLCBuYW1lLCB2YWx1ZSwgd2l0aGluQXJyYXkpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gbmFtZSkge1xuICAgICAgICBpZiAoaGFzT3duLmNhbGwobmFtZSwga2V5KSkge1xuICAgICAgICAgIGlmICghVVJJLmhhc1F1ZXJ5KGRhdGEsIGtleSwgbmFtZVtrZXldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVVJJLmhhc1F1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZyBhcyB0aGUgbmFtZSBwYXJhbWV0ZXInKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGdldFR5cGUodmFsdWUpKSB7XG4gICAgICBjYXNlICdVbmRlZmluZWQnOlxuICAgICAgICAvLyB0cnVlIGlmIGV4aXN0cyAoYnV0IG1heSBiZSBlbXB0eSlcbiAgICAgICAgcmV0dXJuIG5hbWUgaW4gZGF0YTsgLy8gZGF0YVtuYW1lXSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICBjYXNlICdCb29sZWFuJzpcbiAgICAgICAgLy8gdHJ1ZSBpZiBleGlzdHMgYW5kIG5vbi1lbXB0eVxuICAgICAgICB2YXIgX2Jvb2x5ID0gQm9vbGVhbihpc0FycmF5KGRhdGFbbmFtZV0pID8gZGF0YVtuYW1lXS5sZW5ndGggOiBkYXRhW25hbWVdKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBfYm9vbHk7XG5cbiAgICAgIGNhc2UgJ0Z1bmN0aW9uJzpcbiAgICAgICAgLy8gYWxsb3cgY29tcGxleCBjb21wYXJpc29uXG4gICAgICAgIHJldHVybiAhIXZhbHVlKGRhdGFbbmFtZV0sIG5hbWUsIGRhdGEpO1xuXG4gICAgICBjYXNlICdBcnJheSc6XG4gICAgICAgIGlmICghaXNBcnJheShkYXRhW25hbWVdKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvcCA9IHdpdGhpbkFycmF5ID8gYXJyYXlDb250YWlucyA6IGFycmF5c0VxdWFsO1xuICAgICAgICByZXR1cm4gb3AoZGF0YVtuYW1lXSwgdmFsdWUpO1xuXG4gICAgICBjYXNlICdSZWdFeHAnOlxuICAgICAgICBpZiAoIWlzQXJyYXkoZGF0YVtuYW1lXSkpIHtcbiAgICAgICAgICByZXR1cm4gQm9vbGVhbihkYXRhW25hbWVdICYmIGRhdGFbbmFtZV0ubWF0Y2godmFsdWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghd2l0aGluQXJyYXkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJyYXlDb250YWlucyhkYXRhW25hbWVdLCB2YWx1ZSk7XG5cbiAgICAgIGNhc2UgJ051bWJlcic6XG4gICAgICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSAnU3RyaW5nJzpcbiAgICAgICAgaWYgKCFpc0FycmF5KGRhdGFbbmFtZV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGFbbmFtZV0gPT09IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF3aXRoaW5BcnJheSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnJheUNvbnRhaW5zKGRhdGFbbmFtZV0sIHZhbHVlKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVVJJLmhhc1F1ZXJ5KCkgYWNjZXB0cyB1bmRlZmluZWQsIGJvb2xlYW4sIHN0cmluZywgbnVtYmVyLCBSZWdFeHAsIEZ1bmN0aW9uIGFzIHRoZSB2YWx1ZSBwYXJhbWV0ZXInKTtcbiAgICB9XG4gIH07XG5cblxuICBVUkkuY29tbW9uUGF0aCA9IGZ1bmN0aW9uKG9uZSwgdHdvKSB7XG4gICAgdmFyIGxlbmd0aCA9IE1hdGgubWluKG9uZS5sZW5ndGgsIHR3by5sZW5ndGgpO1xuICAgIHZhciBwb3M7XG5cbiAgICAvLyBmaW5kIGZpcnN0IG5vbi1tYXRjaGluZyBjaGFyYWN0ZXJcbiAgICBmb3IgKHBvcyA9IDA7IHBvcyA8IGxlbmd0aDsgcG9zKyspIHtcbiAgICAgIGlmIChvbmUuY2hhckF0KHBvcykgIT09IHR3by5jaGFyQXQocG9zKSkge1xuICAgICAgICBwb3MtLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvcyA8IDEpIHtcbiAgICAgIHJldHVybiBvbmUuY2hhckF0KDApID09PSB0d28uY2hhckF0KDApICYmIG9uZS5jaGFyQXQoMCkgPT09ICcvJyA/ICcvJyA6ICcnO1xuICAgIH1cblxuICAgIC8vIHJldmVydCB0byBsYXN0IC9cbiAgICBpZiAob25lLmNoYXJBdChwb3MpICE9PSAnLycgfHwgdHdvLmNoYXJBdChwb3MpICE9PSAnLycpIHtcbiAgICAgIHBvcyA9IG9uZS5zdWJzdHJpbmcoMCwgcG9zKS5sYXN0SW5kZXhPZignLycpO1xuICAgIH1cblxuICAgIHJldHVybiBvbmUuc3Vic3RyaW5nKDAsIHBvcyArIDEpO1xuICB9O1xuXG4gIFVSSS53aXRoaW5TdHJpbmcgPSBmdW5jdGlvbihzdHJpbmcsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICB2YXIgX3N0YXJ0ID0gb3B0aW9ucy5zdGFydCB8fCBVUkkuZmluZFVyaS5zdGFydDtcbiAgICB2YXIgX2VuZCA9IG9wdGlvbnMuZW5kIHx8IFVSSS5maW5kVXJpLmVuZDtcbiAgICB2YXIgX3RyaW0gPSBvcHRpb25zLnRyaW0gfHwgVVJJLmZpbmRVcmkudHJpbTtcbiAgICB2YXIgX2F0dHJpYnV0ZU9wZW4gPSAvW2EtejAtOS1dPVtcIiddPyQvaTtcblxuICAgIF9zdGFydC5sYXN0SW5kZXggPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB2YXIgbWF0Y2ggPSBfc3RhcnQuZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0ID0gbWF0Y2guaW5kZXg7XG4gICAgICBpZiAob3B0aW9ucy5pZ25vcmVIdG1sKSB7XG4gICAgICAgIC8vIGF0dHJpYnV0KGU9W1wiJ10/JClcbiAgICAgICAgdmFyIGF0dHJpYnV0ZU9wZW4gPSBzdHJpbmcuc2xpY2UoTWF0aC5tYXgoc3RhcnQgLSAzLCAwKSwgc3RhcnQpO1xuICAgICAgICBpZiAoYXR0cmlidXRlT3BlbiAmJiBfYXR0cmlidXRlT3Blbi50ZXN0KGF0dHJpYnV0ZU9wZW4pKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGVuZCA9IHN0YXJ0ICsgc3RyaW5nLnNsaWNlKHN0YXJ0KS5zZWFyY2goX2VuZCk7XG4gICAgICB2YXIgc2xpY2UgPSBzdHJpbmcuc2xpY2Uoc3RhcnQsIGVuZCkucmVwbGFjZShfdHJpbSwgJycpO1xuICAgICAgaWYgKG9wdGlvbnMuaWdub3JlICYmIG9wdGlvbnMuaWdub3JlLnRlc3Qoc2xpY2UpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBlbmQgPSBzdGFydCArIHNsaWNlLmxlbmd0aDtcbiAgICAgIHZhciByZXN1bHQgPSBjYWxsYmFjayhzbGljZSwgc3RhcnQsIGVuZCwgc3RyaW5nKTtcbiAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZSgwLCBzdGFydCkgKyByZXN1bHQgKyBzdHJpbmcuc2xpY2UoZW5kKTtcbiAgICAgIF9zdGFydC5sYXN0SW5kZXggPSBzdGFydCArIHJlc3VsdC5sZW5ndGg7XG4gICAgfVxuXG4gICAgX3N0YXJ0Lmxhc3RJbmRleCA9IDA7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcblxuICBVUkkuZW5zdXJlVmFsaWRIb3N0bmFtZSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAvLyBUaGVvcmV0aWNhbGx5IFVSSXMgYWxsb3cgcGVyY2VudC1lbmNvZGluZyBpbiBIb3N0bmFtZXMgKGFjY29yZGluZyB0byBSRkMgMzk4NilcbiAgICAvLyB0aGV5IGFyZSBub3QgcGFydCBvZiBETlMgYW5kIHRoZXJlZm9yZSBpZ25vcmVkIGJ5IFVSSS5qc1xuXG4gICAgaWYgKHYubWF0Y2goVVJJLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycykpIHtcbiAgICAgIC8vIHRlc3QgcHVueWNvZGVcbiAgICAgIGlmICghcHVueWNvZGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXSBhbmQgUHVueWNvZGUuanMgaXMgbm90IGF2YWlsYWJsZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHVueWNvZGUudG9BU0NJSSh2KS5tYXRjaChVUkkuaW52YWxpZF9ob3N0bmFtZV9jaGFyYWN0ZXJzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSBcIicgKyB2ICsgJ1wiIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li1dJyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIG5vQ29uZmxpY3RcbiAgVVJJLm5vQ29uZmxpY3QgPSBmdW5jdGlvbihyZW1vdmVBbGwpIHtcbiAgICBpZiAocmVtb3ZlQWxsKSB7XG4gICAgICB2YXIgdW5jb25mbGljdGVkID0ge1xuICAgICAgICBVUkk6IHRoaXMubm9Db25mbGljdCgpXG4gICAgICB9O1xuXG4gICAgICBpZiAocm9vdC5VUklUZW1wbGF0ZSAmJiB0eXBlb2Ygcm9vdC5VUklUZW1wbGF0ZS5ub0NvbmZsaWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHVuY29uZmxpY3RlZC5VUklUZW1wbGF0ZSA9IHJvb3QuVVJJVGVtcGxhdGUubm9Db25mbGljdCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocm9vdC5JUHY2ICYmIHR5cGVvZiByb290LklQdjYubm9Db25mbGljdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB1bmNvbmZsaWN0ZWQuSVB2NiA9IHJvb3QuSVB2Ni5ub0NvbmZsaWN0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyb290LlNlY29uZExldmVsRG9tYWlucyAmJiB0eXBlb2Ygcm9vdC5TZWNvbmRMZXZlbERvbWFpbnMubm9Db25mbGljdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB1bmNvbmZsaWN0ZWQuU2Vjb25kTGV2ZWxEb21haW5zID0gcm9vdC5TZWNvbmRMZXZlbERvbWFpbnMubm9Db25mbGljdCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW5jb25mbGljdGVkO1xuICAgIH0gZWxzZSBpZiAocm9vdC5VUkkgPT09IHRoaXMpIHtcbiAgICAgIHJvb3QuVVJJID0gX1VSSTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBwLmJ1aWxkID0gZnVuY3Rpb24oZGVmZXJCdWlsZCkge1xuICAgIGlmIChkZWZlckJ1aWxkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLl9kZWZlcnJlZF9idWlsZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChkZWZlckJ1aWxkID09PSB1bmRlZmluZWQgfHwgdGhpcy5fZGVmZXJyZWRfYnVpbGQpIHtcbiAgICAgIHRoaXMuX3N0cmluZyA9IFVSSS5idWlsZCh0aGlzLl9wYXJ0cyk7XG4gICAgICB0aGlzLl9kZWZlcnJlZF9idWlsZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHAuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFVSSSh0aGlzKTtcbiAgfTtcblxuICBwLnZhbHVlT2YgPSBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGQoZmFsc2UpLl9zdHJpbmc7XG4gIH07XG5cblxuICBmdW5jdGlvbiBnZW5lcmF0ZVNpbXBsZUFjY2Vzc29yKF9wYXJ0KXtcbiAgICByZXR1cm4gZnVuY3Rpb24odiwgYnVpbGQpIHtcbiAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnRzW19wYXJ0XSB8fCAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3BhcnRzW19wYXJ0XSA9IHYgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVQcmVmaXhBY2Nlc3NvcihfcGFydCwgX2tleSl7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG4gICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJ0c1tfcGFydF0gfHwgJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodiAhPT0gbnVsbCkge1xuICAgICAgICAgIHYgPSB2ICsgJyc7XG4gICAgICAgICAgaWYgKHYuY2hhckF0KDApID09PSBfa2V5KSB7XG4gICAgICAgICAgICB2ID0gdi5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGFydHNbX3BhcnRdID0gdjtcbiAgICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcC5wcm90b2NvbCA9IGdlbmVyYXRlU2ltcGxlQWNjZXNzb3IoJ3Byb3RvY29sJyk7XG4gIHAudXNlcm5hbWUgPSBnZW5lcmF0ZVNpbXBsZUFjY2Vzc29yKCd1c2VybmFtZScpO1xuICBwLnBhc3N3b3JkID0gZ2VuZXJhdGVTaW1wbGVBY2Nlc3NvcigncGFzc3dvcmQnKTtcbiAgcC5ob3N0bmFtZSA9IGdlbmVyYXRlU2ltcGxlQWNjZXNzb3IoJ2hvc3RuYW1lJyk7XG4gIHAucG9ydCA9IGdlbmVyYXRlU2ltcGxlQWNjZXNzb3IoJ3BvcnQnKTtcbiAgcC5xdWVyeSA9IGdlbmVyYXRlUHJlZml4QWNjZXNzb3IoJ3F1ZXJ5JywgJz8nKTtcbiAgcC5mcmFnbWVudCA9IGdlbmVyYXRlUHJlZml4QWNjZXNzb3IoJ2ZyYWdtZW50JywgJyMnKTtcblxuICBwLnNlYXJjaCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG4gICAgdmFyIHQgPSB0aGlzLnF1ZXJ5KHYsIGJ1aWxkKTtcbiAgICByZXR1cm4gdHlwZW9mIHQgPT09ICdzdHJpbmcnICYmIHQubGVuZ3RoID8gKCc/JyArIHQpIDogdDtcbiAgfTtcbiAgcC5oYXNoID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcbiAgICB2YXIgdCA9IHRoaXMuZnJhZ21lbnQodiwgYnVpbGQpO1xuICAgIHJldHVybiB0eXBlb2YgdCA9PT0gJ3N0cmluZycgJiYgdC5sZW5ndGggPyAoJyMnICsgdCkgOiB0O1xuICB9O1xuXG4gIHAucGF0aG5hbWUgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuICAgIGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gdHJ1ZSkge1xuICAgICAgdmFyIHJlcyA9IHRoaXMuX3BhcnRzLnBhdGggfHwgKHRoaXMuX3BhcnRzLmhvc3RuYW1lID8gJy8nIDogJycpO1xuICAgICAgcmV0dXJuIHYgPyAodGhpcy5fcGFydHMudXJuID8gVVJJLmRlY29kZVVyblBhdGggOiBVUkkuZGVjb2RlUGF0aCkocmVzKSA6IHJlcztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX3BhcnRzLnVybikge1xuICAgICAgICB0aGlzLl9wYXJ0cy5wYXRoID0gdiA/IFVSSS5yZWNvZGVVcm5QYXRoKHYpIDogJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9wYXJ0cy5wYXRoID0gdiA/IFVSSS5yZWNvZGVQYXRoKHYpIDogJy8nO1xuICAgICAgfVxuICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9O1xuICBwLnBhdGggPSBwLnBhdGhuYW1lO1xuICBwLmhyZWYgPSBmdW5jdGlvbihocmVmLCBidWlsZCkge1xuICAgIHZhciBrZXk7XG5cbiAgICBpZiAoaHJlZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0cmluZyA9ICcnO1xuICAgIHRoaXMuX3BhcnRzID0gVVJJLl9wYXJ0cygpO1xuXG4gICAgdmFyIF9VUkkgPSBocmVmIGluc3RhbmNlb2YgVVJJO1xuICAgIHZhciBfb2JqZWN0ID0gdHlwZW9mIGhyZWYgPT09ICdvYmplY3QnICYmIChocmVmLmhvc3RuYW1lIHx8IGhyZWYucGF0aCB8fCBocmVmLnBhdGhuYW1lKTtcbiAgICBpZiAoaHJlZi5ub2RlTmFtZSkge1xuICAgICAgdmFyIGF0dHJpYnV0ZSA9IFVSSS5nZXREb21BdHRyaWJ1dGUoaHJlZik7XG4gICAgICBocmVmID0gaHJlZlthdHRyaWJ1dGVdIHx8ICcnO1xuICAgICAgX29iamVjdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHdpbmRvdy5sb2NhdGlvbiBpcyByZXBvcnRlZCB0byBiZSBhbiBvYmplY3QsIGJ1dCBpdCdzIG5vdCB0aGUgc29ydFxuICAgIC8vIG9mIG9iamVjdCB3ZSdyZSBsb29raW5nIGZvcjpcbiAgICAvLyAqIGxvY2F0aW9uLnByb3RvY29sIGVuZHMgd2l0aCBhIGNvbG9uXG4gICAgLy8gKiBsb2NhdGlvbi5xdWVyeSAhPSBvYmplY3Quc2VhcmNoXG4gICAgLy8gKiBsb2NhdGlvbi5oYXNoICE9IG9iamVjdC5mcmFnbWVudFxuICAgIC8vIHNpbXBseSBzZXJpYWxpemluZyB0aGUgdW5rbm93biBvYmplY3Qgc2hvdWxkIGRvIHRoZSB0cmlja1xuICAgIC8vIChmb3IgbG9jYXRpb24sIG5vdCBmb3IgZXZlcnl0aGluZy4uLilcbiAgICBpZiAoIV9VUkkgJiYgX29iamVjdCAmJiBocmVmLnBhdGhuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhyZWYgPSBocmVmLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBocmVmID09PSAnc3RyaW5nJyB8fCBocmVmIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICB0aGlzLl9wYXJ0cyA9IFVSSS5wYXJzZShTdHJpbmcoaHJlZiksIHRoaXMuX3BhcnRzKTtcbiAgICB9IGVsc2UgaWYgKF9VUkkgfHwgX29iamVjdCkge1xuICAgICAgdmFyIHNyYyA9IF9VUkkgPyBocmVmLl9wYXJ0cyA6IGhyZWY7XG4gICAgICBmb3IgKGtleSBpbiBzcmMpIHtcbiAgICAgICAgaWYgKGhhc093bi5jYWxsKHRoaXMuX3BhcnRzLCBrZXkpKSB7XG4gICAgICAgICAgdGhpcy5fcGFydHNba2V5XSA9IHNyY1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgaW5wdXQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1aWxkKCFidWlsZCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gaWRlbnRpZmljYXRpb24gYWNjZXNzb3JzXG4gIHAuaXMgPSBmdW5jdGlvbih3aGF0KSB7XG4gICAgdmFyIGlwID0gZmFsc2U7XG4gICAgdmFyIGlwNCA9IGZhbHNlO1xuICAgIHZhciBpcDYgPSBmYWxzZTtcbiAgICB2YXIgbmFtZSA9IGZhbHNlO1xuICAgIHZhciBzbGQgPSBmYWxzZTtcbiAgICB2YXIgaWRuID0gZmFsc2U7XG4gICAgdmFyIHB1bnljb2RlID0gZmFsc2U7XG4gICAgdmFyIHJlbGF0aXZlID0gIXRoaXMuX3BhcnRzLnVybjtcblxuICAgIGlmICh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkge1xuICAgICAgcmVsYXRpdmUgPSBmYWxzZTtcbiAgICAgIGlwNCA9IFVSSS5pcDRfZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcbiAgICAgIGlwNiA9IFVSSS5pcDZfZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcbiAgICAgIGlwID0gaXA0IHx8IGlwNjtcbiAgICAgIG5hbWUgPSAhaXA7XG4gICAgICBzbGQgPSBuYW1lICYmIFNMRCAmJiBTTEQuaGFzKHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcbiAgICAgIGlkbiA9IG5hbWUgJiYgVVJJLmlkbl9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpO1xuICAgICAgcHVueWNvZGUgPSBuYW1lICYmIFVSSS5wdW55Y29kZV9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpO1xuICAgIH1cblxuICAgIHN3aXRjaCAod2hhdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdyZWxhdGl2ZSc6XG4gICAgICAgIHJldHVybiByZWxhdGl2ZTtcblxuICAgICAgY2FzZSAnYWJzb2x1dGUnOlxuICAgICAgICByZXR1cm4gIXJlbGF0aXZlO1xuXG4gICAgICAvLyBob3N0bmFtZSBpZGVudGlmaWNhdGlvblxuICAgICAgY2FzZSAnZG9tYWluJzpcbiAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICByZXR1cm4gbmFtZTtcblxuICAgICAgY2FzZSAnc2xkJzpcbiAgICAgICAgcmV0dXJuIHNsZDtcblxuICAgICAgY2FzZSAnaXAnOlxuICAgICAgICByZXR1cm4gaXA7XG5cbiAgICAgIGNhc2UgJ2lwNCc6XG4gICAgICBjYXNlICdpcHY0JzpcbiAgICAgIGNhc2UgJ2luZXQ0JzpcbiAgICAgICAgcmV0dXJuIGlwNDtcblxuICAgICAgY2FzZSAnaXA2JzpcbiAgICAgIGNhc2UgJ2lwdjYnOlxuICAgICAgY2FzZSAnaW5ldDYnOlxuICAgICAgICByZXR1cm4gaXA2O1xuXG4gICAgICBjYXNlICdpZG4nOlxuICAgICAgICByZXR1cm4gaWRuO1xuXG4gICAgICBjYXNlICd1cmwnOlxuICAgICAgICByZXR1cm4gIXRoaXMuX3BhcnRzLnVybjtcblxuICAgICAgY2FzZSAndXJuJzpcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fcGFydHMudXJuO1xuXG4gICAgICBjYXNlICdwdW55Y29kZSc6XG4gICAgICAgIHJldHVybiBwdW55Y29kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICAvLyBjb21wb25lbnQgc3BlY2lmaWMgaW5wdXQgdmFsaWRhdGlvblxuICB2YXIgX3Byb3RvY29sID0gcC5wcm90b2NvbDtcbiAgdmFyIF9wb3J0ID0gcC5wb3J0O1xuICB2YXIgX2hvc3RuYW1lID0gcC5ob3N0bmFtZTtcblxuICBwLnByb3RvY29sID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcbiAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodikge1xuICAgICAgICAvLyBhY2NlcHQgdHJhaWxpbmcgOi8vXG4gICAgICAgIHYgPSB2LnJlcGxhY2UoLzooXFwvXFwvKT8kLywgJycpO1xuXG4gICAgICAgIGlmICghdi5tYXRjaChVUkkucHJvdG9jb2xfZXhwcmVzc2lvbikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm90b2NvbCBcIicgKyB2ICsgJ1wiIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05ListXSBvciBkb2VzblxcJ3Qgc3RhcnQgd2l0aCBbQS1aXScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfcHJvdG9jb2wuY2FsbCh0aGlzLCB2LCBidWlsZCk7XG4gIH07XG4gIHAuc2NoZW1lID0gcC5wcm90b2NvbDtcbiAgcC5wb3J0ID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcbiAgICBpZiAodGhpcy5fcGFydHMudXJuKSB7XG4gICAgICByZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuICAgIH1cblxuICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh2ID09PSAwKSB7XG4gICAgICAgIHYgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodikge1xuICAgICAgICB2ICs9ICcnO1xuICAgICAgICBpZiAodi5jaGFyQXQoMCkgPT09ICc6Jykge1xuICAgICAgICAgIHYgPSB2LnN1YnN0cmluZygxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2Lm1hdGNoKC9bXjAtOV0vKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BvcnQgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gWzAtOV0nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX3BvcnQuY2FsbCh0aGlzLCB2LCBidWlsZCk7XG4gIH07XG4gIHAuaG9zdG5hbWUgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuICAgIGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcbiAgICAgIHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHggPSB7fTtcbiAgICAgIHZhciByZXMgPSBVUkkucGFyc2VIb3N0KHYsIHgpO1xuICAgICAgaWYgKHJlcyAhPT0gJy8nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lIFwiJyArIHYgKyAnXCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLV0nKTtcbiAgICAgIH1cblxuICAgICAgdiA9IHguaG9zdG5hbWU7XG4gICAgfVxuICAgIHJldHVybiBfaG9zdG5hbWUuY2FsbCh0aGlzLCB2LCBidWlsZCk7XG4gIH07XG5cbiAgLy8gY29tcG91bmQgYWNjZXNzb3JzXG4gIHAuaG9zdCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG4gICAgaWYgKHRoaXMuX3BhcnRzLnVybikge1xuICAgICAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcbiAgICB9XG5cbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWUgPyBVUkkuYnVpbGRIb3N0KHRoaXMuX3BhcnRzKSA6ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmVzID0gVVJJLnBhcnNlSG9zdCh2LCB0aGlzLl9wYXJ0cyk7XG4gICAgICBpZiAocmVzICE9PSAnLycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmJ1aWxkKCFidWlsZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH07XG4gIHAuYXV0aG9yaXR5ID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcbiAgICBpZiAodGhpcy5fcGFydHMudXJuKSB7XG4gICAgICByZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuICAgIH1cblxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZSA/IFVSSS5idWlsZEF1dGhvcml0eSh0aGlzLl9wYXJ0cykgOiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJlcyA9IFVSSS5wYXJzZUF1dGhvcml0eSh2LCB0aGlzLl9wYXJ0cyk7XG4gICAgICBpZiAocmVzICE9PSAnLycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmJ1aWxkKCFidWlsZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH07XG4gIHAudXNlcmluZm8gPSBmdW5jdGlvbih2LCBidWlsZCkge1xuICAgIGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcbiAgICAgIHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCF0aGlzLl9wYXJ0cy51c2VybmFtZSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICAgIHZhciB0ID0gVVJJLmJ1aWxkVXNlcmluZm8odGhpcy5fcGFydHMpO1xuICAgICAgcmV0dXJuIHQuc3Vic3RyaW5nKDAsIHQubGVuZ3RoIC0xKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZbdi5sZW5ndGgtMV0gIT09ICdAJykge1xuICAgICAgICB2ICs9ICdAJztcbiAgICAgIH1cblxuICAgICAgVVJJLnBhcnNlVXNlcmluZm8odiwgdGhpcy5fcGFydHMpO1xuICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9O1xuICBwLnJlc291cmNlID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcbiAgICB2YXIgcGFydHM7XG5cbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXRoKCkgKyB0aGlzLnNlYXJjaCgpICsgdGhpcy5oYXNoKCk7XG4gICAgfVxuXG4gICAgcGFydHMgPSBVUkkucGFyc2Uodik7XG4gICAgdGhpcy5fcGFydHMucGF0aCA9IHBhcnRzLnBhdGg7XG4gICAgdGhpcy5fcGFydHMucXVlcnkgPSBwYXJ0cy5xdWVyeTtcbiAgICB0aGlzLl9wYXJ0cy5mcmFnbWVudCA9IHBhcnRzLmZyYWdtZW50O1xuICAgIHRoaXMuYnVpbGQoIWJ1aWxkKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBmcmFjdGlvbiBhY2Nlc3NvcnNcbiAgcC5zdWJkb21haW4gPSBmdW5jdGlvbih2LCBidWlsZCkge1xuICAgIGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcbiAgICAgIHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG4gICAgfVxuXG4gICAgLy8gY29udmVuaWVuY2UsIHJldHVybiBcInd3d1wiIGZyb20gXCJ3d3cuZXhhbXBsZS5vcmdcIlxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghdGhpcy5fcGFydHMuaG9zdG5hbWUgfHwgdGhpcy5pcygnSVAnKSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICAgIC8vIGdyYWIgZG9tYWluIGFuZCBhZGQgYW5vdGhlciBzZWdtZW50XG4gICAgICB2YXIgZW5kID0gdGhpcy5fcGFydHMuaG9zdG5hbWUubGVuZ3RoIC0gdGhpcy5kb21haW4oKS5sZW5ndGggLSAxO1xuICAgICAgcmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZygwLCBlbmQpIHx8ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZSA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLmxlbmd0aCAtIHRoaXMuZG9tYWluKCkubGVuZ3RoO1xuICAgICAgdmFyIHN1YiA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZygwLCBlKTtcbiAgICAgIHZhciByZXBsYWNlID0gbmV3IFJlZ0V4cCgnXicgKyBlc2NhcGVSZWdFeChzdWIpKTtcblxuICAgICAgaWYgKHYgJiYgdi5jaGFyQXQodi5sZW5ndGggLSAxKSAhPT0gJy4nKSB7XG4gICAgICAgIHYgKz0gJy4nO1xuICAgICAgfVxuXG4gICAgICBpZiAodikge1xuICAgICAgICBVUkkuZW5zdXJlVmFsaWRIb3N0bmFtZSh2KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcGFydHMuaG9zdG5hbWUgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5yZXBsYWNlKHJlcGxhY2UsIHYpO1xuICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9O1xuICBwLmRvbWFpbiA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG4gICAgaWYgKHRoaXMuX3BhcnRzLnVybikge1xuICAgICAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHYgPT09ICdib29sZWFuJykge1xuICAgICAgYnVpbGQgPSB2O1xuICAgICAgdiA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBjb252ZW5pZW5jZSwgcmV0dXJuIFwiZXhhbXBsZS5vcmdcIiBmcm9tIFwid3d3LmV4YW1wbGUub3JnXCJcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIXRoaXMuX3BhcnRzLmhvc3RuYW1lIHx8IHRoaXMuaXMoJ0lQJykpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiBob3N0bmFtZSBjb25zaXN0cyBvZiAxIG9yIDIgc2VnbWVudHMsIGl0IG11c3QgYmUgdGhlIGRvbWFpblxuICAgICAgdmFyIHQgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5tYXRjaCgvXFwuL2cpO1xuICAgICAgaWYgKHQgJiYgdC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZTtcbiAgICAgIH1cblxuICAgICAgLy8gZ3JhYiB0bGQgYW5kIGFkZCBhbm90aGVyIHNlZ21lbnRcbiAgICAgIHZhciBlbmQgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5sZW5ndGggLSB0aGlzLnRsZChidWlsZCkubGVuZ3RoIC0gMTtcbiAgICAgIGVuZCA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLmxhc3RJbmRleE9mKCcuJywgZW5kIC0xKSArIDE7XG4gICAgICByZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWUuc3Vic3RyaW5nKGVuZCkgfHwgJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjYW5ub3Qgc2V0IGRvbWFpbiBlbXB0eScpO1xuICAgICAgfVxuXG4gICAgICBVUkkuZW5zdXJlVmFsaWRIb3N0bmFtZSh2KTtcblxuICAgICAgaWYgKCF0aGlzLl9wYXJ0cy5ob3N0bmFtZSB8fCB0aGlzLmlzKCdJUCcpKSB7XG4gICAgICAgIHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gdjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXBsYWNlID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeCh0aGlzLmRvbWFpbigpKSArICckJyk7XG4gICAgICAgIHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gdGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZShyZXBsYWNlLCB2KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9O1xuICBwLnRsZCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG4gICAgaWYgKHRoaXMuX3BhcnRzLnVybikge1xuICAgICAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHYgPT09ICdib29sZWFuJykge1xuICAgICAgYnVpbGQgPSB2O1xuICAgICAgdiA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gXCJvcmdcIiBmcm9tIFwid3d3LmV4YW1wbGUub3JnXCJcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIXRoaXMuX3BhcnRzLmhvc3RuYW1lIHx8IHRoaXMuaXMoJ0lQJykpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICB2YXIgcG9zID0gdGhpcy5fcGFydHMuaG9zdG5hbWUubGFzdEluZGV4T2YoJy4nKTtcbiAgICAgIHZhciB0bGQgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcocG9zICsgMSk7XG5cbiAgICAgIGlmIChidWlsZCAhPT0gdHJ1ZSAmJiBTTEQgJiYgU0xELmxpc3RbdGxkLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgIHJldHVybiBTTEQuZ2V0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKSB8fCB0bGQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0bGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXBsYWNlO1xuXG4gICAgICBpZiAoIXYpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2Fubm90IHNldCBUTEQgZW1wdHknKTtcbiAgICAgIH0gZWxzZSBpZiAodi5tYXRjaCgvW15hLXpBLVowLTktXS8pKSB7XG4gICAgICAgIGlmIChTTEQgJiYgU0xELmlzKHYpKSB7XG4gICAgICAgICAgcmVwbGFjZSA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXgodGhpcy50bGQoKSkgKyAnJCcpO1xuICAgICAgICAgIHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gdGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZShyZXBsYWNlLCB2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUTEQgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOV0nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5fcGFydHMuaG9zdG5hbWUgfHwgdGhpcy5pcygnSVAnKSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ2Nhbm5vdCBzZXQgVExEIG9uIG5vbi1kb21haW4gaG9zdCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVwbGFjZSA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXgodGhpcy50bGQoKSkgKyAnJCcpO1xuICAgICAgICB0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UocmVwbGFjZSwgdik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYnVpbGQoIWJ1aWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfTtcbiAgcC5kaXJlY3RvcnkgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuICAgIGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcbiAgICAgIHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSB0cnVlKSB7XG4gICAgICBpZiAoIXRoaXMuX3BhcnRzLnBhdGggJiYgIXRoaXMuX3BhcnRzLmhvc3RuYW1lKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3BhcnRzLnBhdGggPT09ICcvJykge1xuICAgICAgICByZXR1cm4gJy8nO1xuICAgICAgfVxuXG4gICAgICB2YXIgZW5kID0gdGhpcy5fcGFydHMucGF0aC5sZW5ndGggLSB0aGlzLmZpbGVuYW1lKCkubGVuZ3RoIC0gMTtcbiAgICAgIHZhciByZXMgPSB0aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZygwLCBlbmQpIHx8ICh0aGlzLl9wYXJ0cy5ob3N0bmFtZSA/ICcvJyA6ICcnKTtcblxuICAgICAgcmV0dXJuIHYgPyBVUkkuZGVjb2RlUGF0aChyZXMpIDogcmVzO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlID0gdGhpcy5fcGFydHMucGF0aC5sZW5ndGggLSB0aGlzLmZpbGVuYW1lKCkubGVuZ3RoO1xuICAgICAgdmFyIGRpcmVjdG9yeSA9IHRoaXMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKDAsIGUpO1xuICAgICAgdmFyIHJlcGxhY2UgPSBuZXcgUmVnRXhwKCdeJyArIGVzY2FwZVJlZ0V4KGRpcmVjdG9yeSkpO1xuXG4gICAgICAvLyBmdWxseSBxdWFsaWZpZXIgZGlyZWN0b3JpZXMgYmVnaW4gd2l0aCBhIHNsYXNoXG4gICAgICBpZiAoIXRoaXMuaXMoJ3JlbGF0aXZlJykpIHtcbiAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgdiA9ICcvJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2LmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgICAgICAgdiA9ICcvJyArIHY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZGlyZWN0b3JpZXMgYWx3YXlzIGVuZCB3aXRoIGEgc2xhc2hcbiAgICAgIGlmICh2ICYmIHYuY2hhckF0KHYubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgICB2ICs9ICcvJztcbiAgICAgIH1cblxuICAgICAgdiA9IFVSSS5yZWNvZGVQYXRoKHYpO1xuICAgICAgdGhpcy5fcGFydHMucGF0aCA9IHRoaXMuX3BhcnRzLnBhdGgucmVwbGFjZShyZXBsYWNlLCB2KTtcbiAgICAgIHRoaXMuYnVpbGQoIWJ1aWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfTtcbiAgcC5maWxlbmFtZSA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG4gICAgaWYgKHRoaXMuX3BhcnRzLnVybikge1xuICAgICAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcbiAgICB9XG5cbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IHRydWUpIHtcbiAgICAgIGlmICghdGhpcy5fcGFydHMucGF0aCB8fCB0aGlzLl9wYXJ0cy5wYXRoID09PSAnLycpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICB2YXIgcG9zID0gdGhpcy5fcGFydHMucGF0aC5sYXN0SW5kZXhPZignLycpO1xuICAgICAgdmFyIHJlcyA9IHRoaXMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKHBvcysxKTtcblxuICAgICAgcmV0dXJuIHYgPyBVUkkuZGVjb2RlUGF0aFNlZ21lbnQocmVzKSA6IHJlcztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG11dGF0ZWREaXJlY3RvcnkgPSBmYWxzZTtcblxuICAgICAgaWYgKHYuY2hhckF0KDApID09PSAnLycpIHtcbiAgICAgICAgdiA9IHYuc3Vic3RyaW5nKDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAodi5tYXRjaCgvXFwuP1xcLy8pKSB7XG4gICAgICAgIG11dGF0ZWREaXJlY3RvcnkgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVwbGFjZSA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXgodGhpcy5maWxlbmFtZSgpKSArICckJyk7XG4gICAgICB2ID0gVVJJLnJlY29kZVBhdGgodik7XG4gICAgICB0aGlzLl9wYXJ0cy5wYXRoID0gdGhpcy5fcGFydHMucGF0aC5yZXBsYWNlKHJlcGxhY2UsIHYpO1xuXG4gICAgICBpZiAobXV0YXRlZERpcmVjdG9yeSkge1xuICAgICAgICB0aGlzLm5vcm1hbGl6ZVBhdGgoYnVpbGQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH07XG4gIHAuc3VmZml4ID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcbiAgICBpZiAodGhpcy5fcGFydHMudXJuKSB7XG4gICAgICByZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuICAgIH1cblxuICAgIGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKCF0aGlzLl9wYXJ0cy5wYXRoIHx8IHRoaXMuX3BhcnRzLnBhdGggPT09ICcvJykge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICAgIHZhciBmaWxlbmFtZSA9IHRoaXMuZmlsZW5hbWUoKTtcbiAgICAgIHZhciBwb3MgPSBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpO1xuICAgICAgdmFyIHMsIHJlcztcblxuICAgICAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICAvLyBzdWZmaXggbWF5IG9ubHkgY29udGFpbiBhbG51bSBjaGFyYWN0ZXJzICh5dXAsIEkgbWFkZSB0aGlzIHVwLilcbiAgICAgIHMgPSBmaWxlbmFtZS5zdWJzdHJpbmcocG9zKzEpO1xuICAgICAgcmVzID0gKC9eW2EtejAtOSVdKyQvaSkudGVzdChzKSA/IHMgOiAnJztcbiAgICAgIHJldHVybiB2ID8gVVJJLmRlY29kZVBhdGhTZWdtZW50KHJlcykgOiByZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh2LmNoYXJBdCgwKSA9PT0gJy4nKSB7XG4gICAgICAgIHYgPSB2LnN1YnN0cmluZygxKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN1ZmZpeCA9IHRoaXMuc3VmZml4KCk7XG4gICAgICB2YXIgcmVwbGFjZTtcblxuICAgICAgaWYgKCFzdWZmaXgpIHtcbiAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wYXJ0cy5wYXRoICs9ICcuJyArIFVSSS5yZWNvZGVQYXRoKHYpO1xuICAgICAgfSBlbHNlIGlmICghdikge1xuICAgICAgICByZXBsYWNlID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeCgnLicgKyBzdWZmaXgpICsgJyQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcGxhY2UgPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4KHN1ZmZpeCkgKyAnJCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVwbGFjZSkge1xuICAgICAgICB2ID0gVVJJLnJlY29kZVBhdGgodik7XG4gICAgICAgIHRoaXMuX3BhcnRzLnBhdGggPSB0aGlzLl9wYXJ0cy5wYXRoLnJlcGxhY2UocmVwbGFjZSwgdik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYnVpbGQoIWJ1aWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfTtcbiAgcC5zZWdtZW50ID0gZnVuY3Rpb24oc2VnbWVudCwgdiwgYnVpbGQpIHtcbiAgICB2YXIgc2VwYXJhdG9yID0gdGhpcy5fcGFydHMudXJuID8gJzonIDogJy8nO1xuICAgIHZhciBwYXRoID0gdGhpcy5wYXRoKCk7XG4gICAgdmFyIGFic29sdXRlID0gcGF0aC5zdWJzdHJpbmcoMCwgMSkgPT09ICcvJztcbiAgICB2YXIgc2VnbWVudHMgPSBwYXRoLnNwbGl0KHNlcGFyYXRvcik7XG5cbiAgICBpZiAoc2VnbWVudCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzZWdtZW50ICE9PSAnbnVtYmVyJykge1xuICAgICAgYnVpbGQgPSB2O1xuICAgICAgdiA9IHNlZ21lbnQ7XG4gICAgICBzZWdtZW50ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChzZWdtZW50ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHNlZ21lbnQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JhZCBzZWdtZW50IFwiJyArIHNlZ21lbnQgKyAnXCIsIG11c3QgYmUgMC1iYXNlZCBpbnRlZ2VyJyk7XG4gICAgfVxuXG4gICAgaWYgKGFic29sdXRlKSB7XG4gICAgICBzZWdtZW50cy5zaGlmdCgpO1xuICAgIH1cblxuICAgIGlmIChzZWdtZW50IDwgMCkge1xuICAgICAgLy8gYWxsb3cgbmVnYXRpdmUgaW5kZXhlcyB0byBhZGRyZXNzIGZyb20gdGhlIGVuZFxuICAgICAgc2VnbWVudCA9IE1hdGgubWF4KHNlZ21lbnRzLmxlbmd0aCArIHNlZ21lbnQsIDApO1xuICAgIH1cblxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8qanNoaW50IGxheGJyZWFrOiB0cnVlICovXG4gICAgICByZXR1cm4gc2VnbWVudCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gc2VnbWVudHNcbiAgICAgICAgOiBzZWdtZW50c1tzZWdtZW50XTtcbiAgICAgIC8qanNoaW50IGxheGJyZWFrOiBmYWxzZSAqL1xuICAgIH0gZWxzZSBpZiAoc2VnbWVudCA9PT0gbnVsbCB8fCBzZWdtZW50c1tzZWdtZW50XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoaXNBcnJheSh2KSkge1xuICAgICAgICBzZWdtZW50cyA9IFtdO1xuICAgICAgICAvLyBjb2xsYXBzZSBlbXB0eSBlbGVtZW50cyB3aXRoaW4gYXJyYXlcbiAgICAgICAgZm9yICh2YXIgaT0wLCBsPXYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCF2W2ldLmxlbmd0aCAmJiAoIXNlZ21lbnRzLmxlbmd0aCB8fCAhc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0xXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VnbWVudHMubGVuZ3RoICYmICFzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLTFdLmxlbmd0aCkge1xuICAgICAgICAgICAgc2VnbWVudHMucG9wKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2VnbWVudHMucHVzaCh2W2ldKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh2IHx8IHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0xXSA9PT0gJycpIHtcbiAgICAgICAgICAvLyBlbXB0eSB0cmFpbGluZyBlbGVtZW50cyBoYXZlIHRvIGJlIG92ZXJ3cml0dGVuXG4gICAgICAgICAgLy8gdG8gcHJldmVudCByZXN1bHRzIHN1Y2ggYXMgL2Zvby8vYmFyXG4gICAgICAgICAgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0xXSA9IHY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudHMucHVzaCh2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodikge1xuICAgICAgICBzZWdtZW50c1tzZWdtZW50XSA9IHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50cy5zcGxpY2Uoc2VnbWVudCwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFic29sdXRlKSB7XG4gICAgICBzZWdtZW50cy51bnNoaWZ0KCcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wYXRoKHNlZ21lbnRzLmpvaW4oc2VwYXJhdG9yKSwgYnVpbGQpO1xuICB9O1xuICBwLnNlZ21lbnRDb2RlZCA9IGZ1bmN0aW9uKHNlZ21lbnQsIHYsIGJ1aWxkKSB7XG4gICAgdmFyIHNlZ21lbnRzLCBpLCBsO1xuXG4gICAgaWYgKHR5cGVvZiBzZWdtZW50ICE9PSAnbnVtYmVyJykge1xuICAgICAgYnVpbGQgPSB2O1xuICAgICAgdiA9IHNlZ21lbnQ7XG4gICAgICBzZWdtZW50ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlZ21lbnRzID0gdGhpcy5zZWdtZW50KHNlZ21lbnQsIHYsIGJ1aWxkKTtcbiAgICAgIGlmICghaXNBcnJheShzZWdtZW50cykpIHtcbiAgICAgICAgc2VnbWVudHMgPSBzZWdtZW50cyAhPT0gdW5kZWZpbmVkID8gVVJJLmRlY29kZShzZWdtZW50cykgOiB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gc2VnbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgc2VnbWVudHNbaV0gPSBVUkkuZGVjb2RlKHNlZ21lbnRzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VnbWVudHM7XG4gICAgfVxuXG4gICAgaWYgKCFpc0FycmF5KHYpKSB7XG4gICAgICB2ID0gKHR5cGVvZiB2ID09PSAnc3RyaW5nJyB8fCB2IGluc3RhbmNlb2YgU3RyaW5nKSA/IFVSSS5lbmNvZGUodikgOiB2O1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwLCBsID0gdi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdltpXSA9IFVSSS5lbmNvZGUodltpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2VnbWVudChzZWdtZW50LCB2LCBidWlsZCk7XG4gIH07XG5cbiAgLy8gbXV0YXRpbmcgcXVlcnkgc3RyaW5nXG4gIHZhciBxID0gcC5xdWVyeTtcbiAgcC5xdWVyeSA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG4gICAgaWYgKHYgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBVUkkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGRhdGEgPSBVUkkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG4gICAgICB2YXIgcmVzdWx0ID0gdi5jYWxsKHRoaXMsIGRhdGEpO1xuICAgICAgdGhpcy5fcGFydHMucXVlcnkgPSBVUkkuYnVpbGRRdWVyeShyZXN1bHQgfHwgZGF0YSwgdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcbiAgICAgIHRoaXMuYnVpbGQoIWJ1aWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSBpZiAodiAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fcGFydHMucXVlcnkgPSBVUkkuYnVpbGRRdWVyeSh2LCB0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBxLmNhbGwodGhpcywgdiwgYnVpbGQpO1xuICAgIH1cbiAgfTtcbiAgcC5zZXRRdWVyeSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBidWlsZCkge1xuICAgIHZhciBkYXRhID0gVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyB8fCBuYW1lIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICBkYXRhW25hbWVdID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogbnVsbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgZm9yICh2YXIga2V5IGluIG5hbWUpIHtcbiAgICAgICAgaWYgKGhhc093bi5jYWxsKG5hbWUsIGtleSkpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBuYW1lW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVVJJLmFkZFF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZyBhcyB0aGUgbmFtZSBwYXJhbWV0ZXInKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wYXJ0cy5xdWVyeSA9IFVSSS5idWlsZFF1ZXJ5KGRhdGEsIHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycywgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgYnVpbGQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1aWxkKCFidWlsZCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHAuYWRkUXVlcnkgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgYnVpbGQpIHtcbiAgICB2YXIgZGF0YSA9IFVSSS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcbiAgICBVUkkuYWRkUXVlcnkoZGF0YSwgbmFtZSwgdmFsdWUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB2YWx1ZSk7XG4gICAgdGhpcy5fcGFydHMucXVlcnkgPSBVUkkuYnVpbGRRdWVyeShkYXRhLCB0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1aWxkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5idWlsZCghYnVpbGQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBwLnJlbW92ZVF1ZXJ5ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUsIGJ1aWxkKSB7XG4gICAgdmFyIGRhdGEgPSBVUkkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG4gICAgVVJJLnJlbW92ZVF1ZXJ5KGRhdGEsIG5hbWUsIHZhbHVlKTtcbiAgICB0aGlzLl9wYXJ0cy5xdWVyeSA9IFVSSS5idWlsZFF1ZXJ5KGRhdGEsIHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycywgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgYnVpbGQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1aWxkKCFidWlsZCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHAuaGFzUXVlcnkgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgd2l0aGluQXJyYXkpIHtcbiAgICB2YXIgZGF0YSA9IFVSSS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcbiAgICByZXR1cm4gVVJJLmhhc1F1ZXJ5KGRhdGEsIG5hbWUsIHZhbHVlLCB3aXRoaW5BcnJheSk7XG4gIH07XG4gIHAuc2V0U2VhcmNoID0gcC5zZXRRdWVyeTtcbiAgcC5hZGRTZWFyY2ggPSBwLmFkZFF1ZXJ5O1xuICBwLnJlbW92ZVNlYXJjaCA9IHAucmVtb3ZlUXVlcnk7XG4gIHAuaGFzU2VhcmNoID0gcC5oYXNRdWVyeTtcblxuICAvLyBzYW5pdGl6aW5nIFVSTHNcbiAgcC5ub3JtYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fcGFydHMudXJuKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgICAgICAubm9ybWFsaXplUHJvdG9jb2woZmFsc2UpXG4gICAgICAgIC5ub3JtYWxpemVQYXRoKGZhbHNlKVxuICAgICAgICAubm9ybWFsaXplUXVlcnkoZmFsc2UpXG4gICAgICAgIC5ub3JtYWxpemVGcmFnbWVudChmYWxzZSlcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgICAgIC5ub3JtYWxpemVQcm90b2NvbChmYWxzZSlcbiAgICAgIC5ub3JtYWxpemVIb3N0bmFtZShmYWxzZSlcbiAgICAgIC5ub3JtYWxpemVQb3J0KGZhbHNlKVxuICAgICAgLm5vcm1hbGl6ZVBhdGgoZmFsc2UpXG4gICAgICAubm9ybWFsaXplUXVlcnkoZmFsc2UpXG4gICAgICAubm9ybWFsaXplRnJhZ21lbnQoZmFsc2UpXG4gICAgICAuYnVpbGQoKTtcbiAgfTtcbiAgcC5ub3JtYWxpemVQcm90b2NvbCA9IGZ1bmN0aW9uKGJ1aWxkKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9wYXJ0cy5wcm90b2NvbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX3BhcnRzLnByb3RvY29sID0gdGhpcy5fcGFydHMucHJvdG9jb2wudG9Mb3dlckNhc2UoKTtcbiAgICAgIHRoaXMuYnVpbGQoIWJ1aWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcC5ub3JtYWxpemVIb3N0bmFtZSA9IGZ1bmN0aW9uKGJ1aWxkKSB7XG4gICAgaWYgKHRoaXMuX3BhcnRzLmhvc3RuYW1lKSB7XG4gICAgICBpZiAodGhpcy5pcygnSUROJykgJiYgcHVueWNvZGUpIHtcbiAgICAgICAgdGhpcy5fcGFydHMuaG9zdG5hbWUgPSBwdW55Y29kZS50b0FTQ0lJKHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pcygnSVB2NicpICYmIElQdjYpIHtcbiAgICAgICAgdGhpcy5fcGFydHMuaG9zdG5hbWUgPSBJUHY2LmJlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICB0aGlzLmJ1aWxkKCFidWlsZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHAubm9ybWFsaXplUG9ydCA9IGZ1bmN0aW9uKGJ1aWxkKSB7XG4gICAgLy8gcmVtb3ZlIHBvcnQgb2YgaXQncyB0aGUgcHJvdG9jb2wncyBkZWZhdWx0XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9wYXJ0cy5wcm90b2NvbCA9PT0gJ3N0cmluZycgJiYgdGhpcy5fcGFydHMucG9ydCA9PT0gVVJJLmRlZmF1bHRQb3J0c1t0aGlzLl9wYXJ0cy5wcm90b2NvbF0pIHtcbiAgICAgIHRoaXMuX3BhcnRzLnBvcnQgPSBudWxsO1xuICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBwLm5vcm1hbGl6ZVBhdGggPSBmdW5jdGlvbihidWlsZCkge1xuICAgIHZhciBfcGF0aCA9IHRoaXMuX3BhcnRzLnBhdGg7XG4gICAgaWYgKCFfcGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BhcnRzLnVybikge1xuICAgICAgdGhpcy5fcGFydHMucGF0aCA9IFVSSS5yZWNvZGVVcm5QYXRoKHRoaXMuX3BhcnRzLnBhdGgpO1xuICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BhcnRzLnBhdGggPT09ICcvJykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIF93YXNfcmVsYXRpdmU7XG4gICAgdmFyIF9sZWFkaW5nUGFyZW50cyA9ICcnO1xuICAgIHZhciBfcGFyZW50LCBfcG9zO1xuXG4gICAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzXG4gICAgaWYgKF9wYXRoLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgICBfd2FzX3JlbGF0aXZlID0gdHJ1ZTtcbiAgICAgIF9wYXRoID0gJy8nICsgX3BhdGg7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHJlbGF0aXZlIGZpbGVzIChhcyBvcHBvc2VkIHRvIGRpcmVjdG9yaWVzKVxuICAgIGlmIChfcGF0aC5zbGljZSgtMykgPT09ICcvLi4nIHx8IF9wYXRoLnNsaWNlKC0yKSA9PT0gJy8uJykge1xuICAgICAgX3BhdGggKz0gJy8nO1xuICAgIH1cblxuICAgIC8vIHJlc29sdmUgc2ltcGxlc1xuICAgIF9wYXRoID0gX3BhdGhcbiAgICAgIC5yZXBsYWNlKC8oXFwvKFxcLlxcLykrKXwoXFwvXFwuJCkvZywgJy8nKVxuICAgICAgLnJlcGxhY2UoL1xcL3syLH0vZywgJy8nKTtcblxuICAgIC8vIHJlbWVtYmVyIGxlYWRpbmcgcGFyZW50c1xuICAgIGlmIChfd2FzX3JlbGF0aXZlKSB7XG4gICAgICBfbGVhZGluZ1BhcmVudHMgPSBfcGF0aC5zdWJzdHJpbmcoMSkubWF0Y2goL14oXFwuXFwuXFwvKSsvKSB8fCAnJztcbiAgICAgIGlmIChfbGVhZGluZ1BhcmVudHMpIHtcbiAgICAgICAgX2xlYWRpbmdQYXJlbnRzID0gX2xlYWRpbmdQYXJlbnRzWzBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlc29sdmUgcGFyZW50c1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBfcGFyZW50ID0gX3BhdGguaW5kZXhPZignLy4uJyk7XG4gICAgICBpZiAoX3BhcmVudCA9PT0gLTEpIHtcbiAgICAgICAgLy8gbm8gbW9yZSAuLi8gdG8gcmVzb2x2ZVxuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAoX3BhcmVudCA9PT0gMCkge1xuICAgICAgICAvLyB0b3AgbGV2ZWwgY2Fubm90IGJlIHJlbGF0aXZlLCBza2lwIGl0XG4gICAgICAgIF9wYXRoID0gX3BhdGguc3Vic3RyaW5nKDMpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgX3BvcyA9IF9wYXRoLnN1YnN0cmluZygwLCBfcGFyZW50KS5sYXN0SW5kZXhPZignLycpO1xuICAgICAgaWYgKF9wb3MgPT09IC0xKSB7XG4gICAgICAgIF9wb3MgPSBfcGFyZW50O1xuICAgICAgfVxuICAgICAgX3BhdGggPSBfcGF0aC5zdWJzdHJpbmcoMCwgX3BvcykgKyBfcGF0aC5zdWJzdHJpbmcoX3BhcmVudCArIDMpO1xuICAgIH1cblxuICAgIC8vIHJldmVydCB0byByZWxhdGl2ZVxuICAgIGlmIChfd2FzX3JlbGF0aXZlICYmIHRoaXMuaXMoJ3JlbGF0aXZlJykpIHtcbiAgICAgIF9wYXRoID0gX2xlYWRpbmdQYXJlbnRzICsgX3BhdGguc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIF9wYXRoID0gVVJJLnJlY29kZVBhdGgoX3BhdGgpO1xuICAgIHRoaXMuX3BhcnRzLnBhdGggPSBfcGF0aDtcbiAgICB0aGlzLmJ1aWxkKCFidWlsZCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHAubm9ybWFsaXplUGF0aG5hbWUgPSBwLm5vcm1hbGl6ZVBhdGg7XG4gIHAubm9ybWFsaXplUXVlcnkgPSBmdW5jdGlvbihidWlsZCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5fcGFydHMucXVlcnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoIXRoaXMuX3BhcnRzLnF1ZXJ5Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9wYXJ0cy5xdWVyeSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnF1ZXJ5KFVSSS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYnVpbGQoIWJ1aWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcC5ub3JtYWxpemVGcmFnbWVudCA9IGZ1bmN0aW9uKGJ1aWxkKSB7XG4gICAgaWYgKCF0aGlzLl9wYXJ0cy5mcmFnbWVudCkge1xuICAgICAgdGhpcy5fcGFydHMuZnJhZ21lbnQgPSBudWxsO1xuICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBwLm5vcm1hbGl6ZVNlYXJjaCA9IHAubm9ybWFsaXplUXVlcnk7XG4gIHAubm9ybWFsaXplSGFzaCA9IHAubm9ybWFsaXplRnJhZ21lbnQ7XG5cbiAgcC5pc284ODU5ID0gZnVuY3Rpb24oKSB7XG4gICAgLy8gZXhwZWN0IHVuaWNvZGUgaW5wdXQsIGlzbzg4NTkgb3V0cHV0XG4gICAgdmFyIGUgPSBVUkkuZW5jb2RlO1xuICAgIHZhciBkID0gVVJJLmRlY29kZTtcblxuICAgIFVSSS5lbmNvZGUgPSBlc2NhcGU7XG4gICAgVVJJLmRlY29kZSA9IGRlY29kZVVSSUNvbXBvbmVudDtcbiAgICB0cnkge1xuICAgICAgdGhpcy5ub3JtYWxpemUoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgVVJJLmVuY29kZSA9IGU7XG4gICAgICBVUkkuZGVjb2RlID0gZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgcC51bmljb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgLy8gZXhwZWN0IGlzbzg4NTkgaW5wdXQsIHVuaWNvZGUgb3V0cHV0XG4gICAgdmFyIGUgPSBVUkkuZW5jb2RlO1xuICAgIHZhciBkID0gVVJJLmRlY29kZTtcblxuICAgIFVSSS5lbmNvZGUgPSBzdHJpY3RFbmNvZGVVUklDb21wb25lbnQ7XG4gICAgVVJJLmRlY29kZSA9IHVuZXNjYXBlO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLm5vcm1hbGl6ZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBVUkkuZW5jb2RlID0gZTtcbiAgICAgIFVSSS5kZWNvZGUgPSBkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBwLnJlYWRhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHVyaSA9IHRoaXMuY2xvbmUoKTtcbiAgICAvLyByZW1vdmluZyB1c2VybmFtZSwgcGFzc3dvcmQsIGJlY2F1c2UgdGhleSBzaG91bGRuJ3QgYmUgZGlzcGxheWVkIGFjY29yZGluZyB0byBSRkMgMzk4NlxuICAgIHVyaS51c2VybmFtZSgnJykucGFzc3dvcmQoJycpLm5vcm1hbGl6ZSgpO1xuICAgIHZhciB0ID0gJyc7XG4gICAgaWYgKHVyaS5fcGFydHMucHJvdG9jb2wpIHtcbiAgICAgIHQgKz0gdXJpLl9wYXJ0cy5wcm90b2NvbCArICc6Ly8nO1xuICAgIH1cblxuICAgIGlmICh1cmkuX3BhcnRzLmhvc3RuYW1lKSB7XG4gICAgICBpZiAodXJpLmlzKCdwdW55Y29kZScpICYmIHB1bnljb2RlKSB7XG4gICAgICAgIHQgKz0gcHVueWNvZGUudG9Vbmljb2RlKHVyaS5fcGFydHMuaG9zdG5hbWUpO1xuICAgICAgICBpZiAodXJpLl9wYXJ0cy5wb3J0KSB7XG4gICAgICAgICAgdCArPSAnOicgKyB1cmkuX3BhcnRzLnBvcnQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHQgKz0gdXJpLmhvc3QoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXJpLl9wYXJ0cy5ob3N0bmFtZSAmJiB1cmkuX3BhcnRzLnBhdGggJiYgdXJpLl9wYXJ0cy5wYXRoLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgICB0ICs9ICcvJztcbiAgICB9XG5cbiAgICB0ICs9IHVyaS5wYXRoKHRydWUpO1xuICAgIGlmICh1cmkuX3BhcnRzLnF1ZXJ5KSB7XG4gICAgICB2YXIgcSA9ICcnO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIHFwID0gdXJpLl9wYXJ0cy5xdWVyeS5zcGxpdCgnJicpLCBsID0gcXAubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBrdiA9IChxcFtpXSB8fCAnJykuc3BsaXQoJz0nKTtcbiAgICAgICAgcSArPSAnJicgKyBVUkkuZGVjb2RlUXVlcnkoa3ZbMF0sIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpXG4gICAgICAgICAgLnJlcGxhY2UoLyYvZywgJyUyNicpO1xuXG4gICAgICAgIGlmIChrdlsxXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcSArPSAnPScgKyBVUkkuZGVjb2RlUXVlcnkoa3ZbMV0sIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpXG4gICAgICAgICAgICAucmVwbGFjZSgvJi9nLCAnJTI2Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHQgKz0gJz8nICsgcS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgdCArPSBVUkkuZGVjb2RlUXVlcnkodXJpLmhhc2goKSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHQ7XG4gIH07XG5cbiAgLy8gcmVzb2x2aW5nIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBVUkxzXG4gIHAuYWJzb2x1dGVUbyA9IGZ1bmN0aW9uKGJhc2UpIHtcbiAgICB2YXIgcmVzb2x2ZWQgPSB0aGlzLmNsb25lKCk7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBbJ3Byb3RvY29sJywgJ3VzZXJuYW1lJywgJ3Bhc3N3b3JkJywgJ2hvc3RuYW1lJywgJ3BvcnQnXTtcbiAgICB2YXIgYmFzZWRpciwgaSwgcDtcblxuICAgIGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVVJOcyBkbyBub3QgaGF2ZSBhbnkgZ2VuZXJhbGx5IGRlZmluZWQgaGllcmFyY2hpY2FsIGNvbXBvbmVudHMnKTtcbiAgICB9XG5cbiAgICBpZiAoIShiYXNlIGluc3RhbmNlb2YgVVJJKSkge1xuICAgICAgYmFzZSA9IG5ldyBVUkkoYmFzZSk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNvbHZlZC5fcGFydHMucHJvdG9jb2wpIHtcbiAgICAgIHJlc29sdmVkLl9wYXJ0cy5wcm90b2NvbCA9IGJhc2UuX3BhcnRzLnByb3RvY29sO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkge1xuICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IChwID0gcHJvcGVydGllc1tpXSk7IGkrKykge1xuICAgICAgcmVzb2x2ZWQuX3BhcnRzW3BdID0gYmFzZS5fcGFydHNbcF07XG4gICAgfVxuXG4gICAgaWYgKCFyZXNvbHZlZC5fcGFydHMucGF0aCkge1xuICAgICAgcmVzb2x2ZWQuX3BhcnRzLnBhdGggPSBiYXNlLl9wYXJ0cy5wYXRoO1xuICAgICAgaWYgKCFyZXNvbHZlZC5fcGFydHMucXVlcnkpIHtcbiAgICAgICAgcmVzb2x2ZWQuX3BhcnRzLnF1ZXJ5ID0gYmFzZS5fcGFydHMucXVlcnk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZXNvbHZlZC5fcGFydHMucGF0aC5zdWJzdHJpbmcoLTIpID09PSAnLi4nKSB7XG4gICAgICByZXNvbHZlZC5fcGFydHMucGF0aCArPSAnLyc7XG4gICAgfVxuXG4gICAgaWYgKHJlc29sdmVkLnBhdGgoKS5jaGFyQXQoMCkgIT09ICcvJykge1xuICAgICAgYmFzZWRpciA9IGJhc2UuZGlyZWN0b3J5KCk7XG4gICAgICBiYXNlZGlyID0gYmFzZWRpciA/IGJhc2VkaXIgOiBiYXNlLnBhdGgoKS5pbmRleE9mKCcvJykgPT09IDAgPyAnLycgOiAnJztcbiAgICAgIHJlc29sdmVkLl9wYXJ0cy5wYXRoID0gKGJhc2VkaXIgPyAoYmFzZWRpciArICcvJykgOiAnJykgKyByZXNvbHZlZC5fcGFydHMucGF0aDtcbiAgICAgIHJlc29sdmVkLm5vcm1hbGl6ZVBhdGgoKTtcbiAgICB9XG5cbiAgICByZXNvbHZlZC5idWlsZCgpO1xuICAgIHJldHVybiByZXNvbHZlZDtcbiAgfTtcbiAgcC5yZWxhdGl2ZVRvID0gZnVuY3Rpb24oYmFzZSkge1xuICAgIHZhciByZWxhdGl2ZSA9IHRoaXMuY2xvbmUoKS5ub3JtYWxpemUoKTtcbiAgICB2YXIgcmVsYXRpdmVQYXJ0cywgYmFzZVBhcnRzLCBjb21tb24sIHJlbGF0aXZlUGF0aCwgYmFzZVBhdGg7XG5cbiAgICBpZiAocmVsYXRpdmUuX3BhcnRzLnVybikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVUk5zIGRvIG5vdCBoYXZlIGFueSBnZW5lcmFsbHkgZGVmaW5lZCBoaWVyYXJjaGljYWwgY29tcG9uZW50cycpO1xuICAgIH1cblxuICAgIGJhc2UgPSBuZXcgVVJJKGJhc2UpLm5vcm1hbGl6ZSgpO1xuICAgIHJlbGF0aXZlUGFydHMgPSByZWxhdGl2ZS5fcGFydHM7XG4gICAgYmFzZVBhcnRzID0gYmFzZS5fcGFydHM7XG4gICAgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUucGF0aCgpO1xuICAgIGJhc2VQYXRoID0gYmFzZS5wYXRoKCk7XG5cbiAgICBpZiAocmVsYXRpdmVQYXRoLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSSSBpcyBhbHJlYWR5IHJlbGF0aXZlJyk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VQYXRoLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgYSBVUkkgcmVsYXRpdmUgdG8gYW5vdGhlciByZWxhdGl2ZSBVUkknKTtcbiAgICB9XG5cbiAgICBpZiAocmVsYXRpdmVQYXJ0cy5wcm90b2NvbCA9PT0gYmFzZVBhcnRzLnByb3RvY29sKSB7XG4gICAgICByZWxhdGl2ZVBhcnRzLnByb3RvY29sID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocmVsYXRpdmVQYXJ0cy51c2VybmFtZSAhPT0gYmFzZVBhcnRzLnVzZXJuYW1lIHx8IHJlbGF0aXZlUGFydHMucGFzc3dvcmQgIT09IGJhc2VQYXJ0cy5wYXNzd29yZCkge1xuICAgICAgcmV0dXJuIHJlbGF0aXZlLmJ1aWxkKCk7XG4gICAgfVxuXG4gICAgaWYgKHJlbGF0aXZlUGFydHMucHJvdG9jb2wgIT09IG51bGwgfHwgcmVsYXRpdmVQYXJ0cy51c2VybmFtZSAhPT0gbnVsbCB8fCByZWxhdGl2ZVBhcnRzLnBhc3N3b3JkICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gcmVsYXRpdmUuYnVpbGQoKTtcbiAgICB9XG5cbiAgICBpZiAocmVsYXRpdmVQYXJ0cy5ob3N0bmFtZSA9PT0gYmFzZVBhcnRzLmhvc3RuYW1lICYmIHJlbGF0aXZlUGFydHMucG9ydCA9PT0gYmFzZVBhcnRzLnBvcnQpIHtcbiAgICAgIHJlbGF0aXZlUGFydHMuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmVQYXJ0cy5wb3J0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlbGF0aXZlLmJ1aWxkKCk7XG4gICAgfVxuXG4gICAgaWYgKHJlbGF0aXZlUGF0aCA9PT0gYmFzZVBhdGgpIHtcbiAgICAgIHJlbGF0aXZlUGFydHMucGF0aCA9ICcnO1xuICAgICAgcmV0dXJuIHJlbGF0aXZlLmJ1aWxkKCk7XG4gICAgfVxuXG4gICAgLy8gZGV0ZXJtaW5lIGNvbW1vbiBzdWIgcGF0aFxuICAgIGNvbW1vbiA9IFVSSS5jb21tb25QYXRoKHJlbGF0aXZlUGF0aCwgYmFzZVBhdGgpO1xuXG4gICAgLy8gSWYgdGhlIHBhdGhzIGhhdmUgbm90aGluZyBpbiBjb21tb24sIHJldHVybiBhIHJlbGF0aXZlIFVSTCB3aXRoIHRoZSBhYnNvbHV0ZSBwYXRoLlxuICAgIGlmICghY29tbW9uKSB7XG4gICAgICByZXR1cm4gcmVsYXRpdmUuYnVpbGQoKTtcbiAgICB9XG5cbiAgICB2YXIgcGFyZW50cyA9IGJhc2VQYXJ0cy5wYXRoXG4gICAgICAuc3Vic3RyaW5nKGNvbW1vbi5sZW5ndGgpXG4gICAgICAucmVwbGFjZSgvW15cXC9dKiQvLCAnJylcbiAgICAgIC5yZXBsYWNlKC8uKj9cXC8vZywgJy4uLycpO1xuXG4gICAgcmVsYXRpdmVQYXJ0cy5wYXRoID0gKHBhcmVudHMgKyByZWxhdGl2ZVBhcnRzLnBhdGguc3Vic3RyaW5nKGNvbW1vbi5sZW5ndGgpKSB8fCAnLi8nO1xuXG4gICAgcmV0dXJuIHJlbGF0aXZlLmJ1aWxkKCk7XG4gIH07XG5cbiAgLy8gY29tcGFyaW5nIFVSSXNcbiAgcC5lcXVhbHMgPSBmdW5jdGlvbih1cmkpIHtcbiAgICB2YXIgb25lID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciB0d28gPSBuZXcgVVJJKHVyaSk7XG4gICAgdmFyIG9uZV9tYXAgPSB7fTtcbiAgICB2YXIgdHdvX21hcCA9IHt9O1xuICAgIHZhciBjaGVja2VkID0ge307XG4gICAgdmFyIG9uZV9xdWVyeSwgdHdvX3F1ZXJ5LCBrZXk7XG5cbiAgICBvbmUubm9ybWFsaXplKCk7XG4gICAgdHdvLm5vcm1hbGl6ZSgpO1xuXG4gICAgLy8gZXhhY3QgbWF0Y2hcbiAgICBpZiAob25lLnRvU3RyaW5nKCkgPT09IHR3by50b1N0cmluZygpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBleHRyYWN0IHF1ZXJ5IHN0cmluZ1xuICAgIG9uZV9xdWVyeSA9IG9uZS5xdWVyeSgpO1xuICAgIHR3b19xdWVyeSA9IHR3by5xdWVyeSgpO1xuICAgIG9uZS5xdWVyeSgnJyk7XG4gICAgdHdvLnF1ZXJ5KCcnKTtcblxuICAgIC8vIGRlZmluaXRlbHkgbm90IGVxdWFsIGlmIG5vdCBldmVuIG5vbi1xdWVyeSBwYXJ0cyBtYXRjaFxuICAgIGlmIChvbmUudG9TdHJpbmcoKSAhPT0gdHdvLnRvU3RyaW5nKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBxdWVyeSBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLCBldmVuIGlmIHRoZXkncmUgcGVybXV0ZWRcbiAgICBpZiAob25lX3F1ZXJ5Lmxlbmd0aCAhPT0gdHdvX3F1ZXJ5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG9uZV9tYXAgPSBVUkkucGFyc2VRdWVyeShvbmVfcXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuICAgIHR3b19tYXAgPSBVUkkucGFyc2VRdWVyeSh0d29fcXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXG4gICAgZm9yIChrZXkgaW4gb25lX21hcCkge1xuICAgICAgaWYgKGhhc093bi5jYWxsKG9uZV9tYXAsIGtleSkpIHtcbiAgICAgICAgaWYgKCFpc0FycmF5KG9uZV9tYXBba2V5XSkpIHtcbiAgICAgICAgICBpZiAob25lX21hcFtrZXldICE9PSB0d29fbWFwW2tleV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIWFycmF5c0VxdWFsKG9uZV9tYXBba2V5XSwgdHdvX21hcFtrZXldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoZWNrZWRba2V5XSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChrZXkgaW4gdHdvX21hcCkge1xuICAgICAgaWYgKGhhc093bi5jYWxsKHR3b19tYXAsIGtleSkpIHtcbiAgICAgICAgaWYgKCFjaGVja2VkW2tleV0pIHtcbiAgICAgICAgICAvLyB0d28gY29udGFpbnMgYSBwYXJhbWV0ZXIgbm90IHByZXNlbnQgaW4gb25lXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gc3RhdGVcbiAgcC5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMgPSBmdW5jdGlvbih2KSB7XG4gICAgdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzID0gISF2O1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHAuZXNjYXBlUXVlcnlTcGFjZSA9IGZ1bmN0aW9uKHYpIHtcbiAgICB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlID0gISF2O1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHJldHVybiBVUkk7XG59KSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVyaS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6InVyaS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxyXG4gKiBVUkkuanMgLSBNdXRhdGluZyBVUkxzXHJcbiAqXHJcbiAqIFZlcnNpb246IDEuMTYuMVxyXG4gKlxyXG4gKiBBdXRob3I6IFJvZG5leSBSZWhtXHJcbiAqIFdlYjogaHR0cDovL21lZGlhbGl6ZS5naXRodWIuaW8vVVJJLmpzL1xyXG4gKlxyXG4gKiBMaWNlbnNlZCB1bmRlclxyXG4gKiAgIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2VcclxuICogICBHUEwgdjMgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0dQTC0zLjBcclxuICpcclxuICovXHJcbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdW1kanMvdW1kL2Jsb2IvbWFzdGVyL3JldHVybkV4cG9ydHMuanNcclxuICBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XHJcbiAgICAvLyBOb2RlXHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi9wdW55Y29kZScpLCByZXF1aXJlKCcuL0lQdjYnKSwgcmVxdWlyZSgnLi9TZWNvbmRMZXZlbERvbWFpbnMnKSk7XHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cclxuICAgIGRlZmluZShbJy4vcHVueWNvZGUnLCAnLi9JUHY2JywgJy4vU2Vjb25kTGV2ZWxEb21haW5zJ10sIGZhY3RvcnkpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBCcm93c2VyIGdsb2JhbHMgKHJvb3QgaXMgd2luZG93KVxyXG4gICAgcm9vdC5VUkkgPSBmYWN0b3J5KHJvb3QucHVueWNvZGUsIHJvb3QuSVB2Niwgcm9vdC5TZWNvbmRMZXZlbERvbWFpbnMsIHJvb3QpO1xyXG4gIH1cclxufSh0aGlzLCBmdW5jdGlvbiAocHVueWNvZGUsIElQdjYsIFNMRCwgcm9vdCkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuICAvKmdsb2JhbCBsb2NhdGlvbiwgZXNjYXBlLCB1bmVzY2FwZSAqL1xyXG4gIC8vIEZJWE1FOiB2Mi4wLjAgcmVuYW1jZSBub24tY2FtZWxDYXNlIHByb3BlcnRpZXMgdG8gdXBwZXJjYXNlXHJcbiAgLypqc2hpbnQgY2FtZWxjYXNlOiBmYWxzZSAqL1xyXG5cclxuICAvLyBzYXZlIGN1cnJlbnQgVVJJIHZhcmlhYmxlLCBpZiBhbnlcclxuICB2YXIgX1VSSSA9IHJvb3QgJiYgcm9vdC5VUkk7XHJcblxyXG4gIGZ1bmN0aW9uIFVSSSh1cmwsIGJhc2UpIHtcclxuICAgIHZhciBfdXJsU3VwcGxpZWQgPSBhcmd1bWVudHMubGVuZ3RoID49IDE7XHJcbiAgICB2YXIgX2Jhc2VTdXBwbGllZCA9IGFyZ3VtZW50cy5sZW5ndGggPj0gMjtcclxuXHJcbiAgICAvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcclxuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBVUkkpKSB7XHJcbiAgICAgIGlmIChfdXJsU3VwcGxpZWQpIHtcclxuICAgICAgICBpZiAoX2Jhc2VTdXBwbGllZCkge1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyBVUkkodXJsLCBiYXNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgVVJJKHVybCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuZXcgVVJJKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVybCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChfdXJsU3VwcGxpZWQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmRlZmluZWQgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQgZm9yIFVSSScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHVybCA9IGxvY2F0aW9uLmhyZWYgKyAnJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB1cmwgPSAnJztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaHJlZih1cmwpO1xyXG5cclxuICAgIC8vIHJlc29sdmUgdG8gYmFzZSBhY2NvcmRpbmcgdG8gaHR0cDovL2R2Y3MudzMub3JnL2hnL3VybC9yYXctZmlsZS90aXAvT3ZlcnZpZXcuaHRtbCNjb25zdHJ1Y3RvclxyXG4gICAgaWYgKGJhc2UgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5hYnNvbHV0ZVRvKGJhc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgVVJJLnZlcnNpb24gPSAnMS4xNi4xJztcclxuXHJcbiAgdmFyIHAgPSBVUkkucHJvdG90eXBlO1xyXG4gIHZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xyXG5cclxuICBmdW5jdGlvbiBlc2NhcGVSZWdFeChzdHJpbmcpIHtcclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvVVJJLmpzL2NvbW1pdC84NWFjMjE3ODNjMTFmOGNjYWIwNjEwNmRiYTk3MzVhMzFhODY5MjRkI2NvbW1pdGNvbW1lbnQtODIxOTYzXHJcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhbLiorP149IToke30oKXxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldFR5cGUodmFsdWUpIHtcclxuICAgIC8vIElFOCBkb2Vzbid0IHJldHVybiBbT2JqZWN0IFVuZGVmaW5lZF0gYnV0IFtPYmplY3QgT2JqZWN0XSBmb3IgdW5kZWZpbmVkIHZhbHVlXHJcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gJ1VuZGVmaW5lZCc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFN0cmluZyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpKS5zbGljZSg4LCAtMSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBpc0FycmF5KG9iaikge1xyXG4gICAgcmV0dXJuIGdldFR5cGUob2JqKSA9PT0gJ0FycmF5JztcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGZpbHRlckFycmF5VmFsdWVzKGRhdGEsIHZhbHVlKSB7XHJcbiAgICB2YXIgbG9va3VwID0ge307XHJcbiAgICB2YXIgaSwgbGVuZ3RoO1xyXG5cclxuICAgIGlmIChnZXRUeXBlKHZhbHVlKSA9PT0gJ1JlZ0V4cCcpIHtcclxuICAgICAgbG9va3VwID0gbnVsbDtcclxuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdmFsdWUubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsb29rdXBbdmFsdWVbaV1dID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbG9va3VwW3ZhbHVlXSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gZGF0YS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAvKmpzaGludCBsYXhicmVhazogdHJ1ZSAqL1xyXG4gICAgICB2YXIgX21hdGNoID0gbG9va3VwICYmIGxvb2t1cFtkYXRhW2ldXSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgfHwgIWxvb2t1cCAmJiB2YWx1ZS50ZXN0KGRhdGFbaV0pO1xyXG4gICAgICAvKmpzaGludCBsYXhicmVhazogZmFsc2UgKi9cclxuICAgICAgaWYgKF9tYXRjaCkge1xyXG4gICAgICAgIGRhdGEuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgIGxlbmd0aC0tO1xyXG4gICAgICAgIGktLTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYXJyYXlDb250YWlucyhsaXN0LCB2YWx1ZSkge1xyXG4gICAgdmFyIGksIGxlbmd0aDtcclxuXHJcbiAgICAvLyB2YWx1ZSBtYXkgYmUgc3RyaW5nLCBudW1iZXIsIGFycmF5LCByZWdleHBcclxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAvLyBOb3RlOiB0aGlzIGNhbiBiZSBvcHRpbWl6ZWQgdG8gTyhuKSAoaW5zdGVhZCBvZiBjdXJyZW50IE8obSAqIG4pKVxyXG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICghYXJyYXlDb250YWlucyhsaXN0LCB2YWx1ZVtpXSkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBfdHlwZSA9IGdldFR5cGUodmFsdWUpO1xyXG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gbGlzdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoX3R5cGUgPT09ICdSZWdFeHAnKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBsaXN0W2ldID09PSAnc3RyaW5nJyAmJiBsaXN0W2ldLm1hdGNoKHZhbHVlKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGxpc3RbaV0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhcnJheXNFcXVhbChvbmUsIHR3bykge1xyXG4gICAgaWYgKCFpc0FycmF5KG9uZSkgfHwgIWlzQXJyYXkodHdvKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYXJyYXlzIGNhbid0IGJlIGVxdWFsIGlmIHRoZXkgaGF2ZSBkaWZmZXJlbnQgYW1vdW50IG9mIGNvbnRlbnRcclxuICAgIGlmIChvbmUubGVuZ3RoICE9PSB0d28ubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBvbmUuc29ydCgpO1xyXG4gICAgdHdvLnNvcnQoKTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9uZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgaWYgKG9uZVtpXSAhPT0gdHdvW2ldKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBVUkkuX3BhcnRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBwcm90b2NvbDogbnVsbCxcclxuICAgICAgdXNlcm5hbWU6IG51bGwsXHJcbiAgICAgIHBhc3N3b3JkOiBudWxsLFxyXG4gICAgICBob3N0bmFtZTogbnVsbCxcclxuICAgICAgdXJuOiBudWxsLFxyXG4gICAgICBwb3J0OiBudWxsLFxyXG4gICAgICBwYXRoOiBudWxsLFxyXG4gICAgICBxdWVyeTogbnVsbCxcclxuICAgICAgZnJhZ21lbnQ6IG51bGwsXHJcbiAgICAgIC8vIHN0YXRlXHJcbiAgICAgIGR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVyczogVVJJLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgZXNjYXBlUXVlcnlTcGFjZTogVVJJLmVzY2FwZVF1ZXJ5U3BhY2VcclxuICAgIH07XHJcbiAgfTtcclxuICAvLyBzdGF0ZTogYWxsb3cgZHVwbGljYXRlIHF1ZXJ5IHBhcmFtZXRlcnMgKGE9MSZhPTEpXHJcbiAgVVJJLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyA9IGZhbHNlO1xyXG4gIC8vIHN0YXRlOiByZXBsYWNlcyArIHdpdGggJTIwIChzcGFjZSBpbiBxdWVyeSBzdHJpbmdzKVxyXG4gIFVSSS5lc2NhcGVRdWVyeVNwYWNlID0gdHJ1ZTtcclxuICAvLyBzdGF0aWMgcHJvcGVydGllc1xyXG4gIFVSSS5wcm90b2NvbF9leHByZXNzaW9uID0gL15bYS16XVthLXowLTkuKy1dKiQvaTtcclxuICBVUkkuaWRuX2V4cHJlc3Npb24gPSAvW15hLXowLTlcXC4tXS9pO1xyXG4gIFVSSS5wdW55Y29kZV9leHByZXNzaW9uID0gLyh4bi0tKS9pO1xyXG4gIC8vIHdlbGwsIDMzMy40NDQuNTU1LjY2NiBtYXRjaGVzLCBidXQgaXQgc3VyZSBhaW4ndCBubyBJUHY0IC0gZG8gd2UgY2FyZT9cclxuICBVUkkuaXA0X2V4cHJlc3Npb24gPSAvXlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9JC87XHJcbiAgLy8gY3JlZGl0cyB0byBSaWNoIEJyb3duXHJcbiAgLy8gc291cmNlOiBodHRwOi8vZm9ydW1zLmludGVybWFwcGVyLmNvbS92aWV3dG9waWMucGhwP3A9MTA5NiMxMDk2XHJcbiAgLy8gc3BlY2lmaWNhdGlvbjogaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNDI5MS50eHRcclxuICBVUkkuaXA2X2V4cHJlc3Npb24gPSAvXlxccyooKChbMC05QS1GYS1mXXsxLDR9Oil7N30oWzAtOUEtRmEtZl17MSw0fXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7Nn0oOlswLTlBLUZhLWZdezEsNH18KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs1fSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDJ9KXw6KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs0fSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDN9KXwoKDpbMC05QS1GYS1mXXsxLDR9KT86KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7M30oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw0fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCwyfTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXsyfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDV9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDN9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezF9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNn0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsNH06KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KDooKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw3fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCw1fTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKSkoJS4rKT9cXHMqJC87XHJcbiAgLy8gZXhwcmVzc2lvbiB1c2VkIGlzIFwiZ3J1YmVyIHJldmlzZWRcIiAoQGdydWJlciB2MikgZGV0ZXJtaW5lZCB0byBiZSB0aGVcclxuICAvLyBiZXN0IHNvbHV0aW9uIGluIGEgcmVnZXgtZ29sZiB3ZSBkaWQgYSBjb3VwbGUgb2YgYWdlcyBhZ28gYXRcclxuICAvLyAqIGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlL2RlbW8vdXJsLXJlZ2V4XHJcbiAgLy8gKiBodHRwOi8vcm9kbmV5cmVobS5kZS90L3VybC1yZWdleC5odG1sXHJcbiAgVVJJLmZpbmRfdXJpX2V4cHJlc3Npb24gPSAvXFxiKCg/OlthLXpdW1xcdy1dKzooPzpcXC97MSwzfXxbYS16MC05JV0pfHd3d1xcZHswLDN9Wy5dfFthLXowLTkuXFwtXStbLl1bYS16XXsyLDR9XFwvKSg/OlteXFxzKCk8Pl0rfFxcKChbXlxccygpPD5dK3woXFwoW15cXHMoKTw+XStcXCkpKSpcXCkpKyg/OlxcKChbXlxccygpPD5dK3woXFwoW15cXHMoKTw+XStcXCkpKSpcXCl8W15cXHNgISgpXFxbXFxde307OidcIi4sPD4/wqvCu+KAnOKAneKAmOKAmV0pKS9pZztcclxuICBVUkkuZmluZFVyaSA9IHtcclxuICAgIC8vIHZhbGlkIFwic2NoZW1lOi8vXCIgb3IgXCJ3d3cuXCJcclxuICAgIHN0YXJ0OiAvXFxiKD86KFthLXpdW2EtejAtOS4rLV0qOlxcL1xcLyl8d3d3XFwuKS9naSxcclxuICAgIC8vIGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIG5leHQgd2hpdGVzcGFjZVxyXG4gICAgZW5kOiAvW1xcc1xcclxcbl18JC8sXHJcbiAgICAvLyB0cmltIHRyYWlsaW5nIHB1bmN0dWF0aW9uIGNhcHR1cmVkIGJ5IGVuZCBSZWdFeHBcclxuICAgIHRyaW06IC9bYCEoKVxcW1xcXXt9OzonXCIuLDw+P8KrwrvigJzigJ3igJ7igJjigJldKyQvXHJcbiAgfTtcclxuICAvLyBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3VyaS1zY2hlbWVzLmh0bWxcclxuICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfVENQX2FuZF9VRFBfcG9ydF9udW1iZXJzI1dlbGwta25vd25fcG9ydHNcclxuICBVUkkuZGVmYXVsdFBvcnRzID0ge1xyXG4gICAgaHR0cDogJzgwJyxcclxuICAgIGh0dHBzOiAnNDQzJyxcclxuICAgIGZ0cDogJzIxJyxcclxuICAgIGdvcGhlcjogJzcwJyxcclxuICAgIHdzOiAnODAnLFxyXG4gICAgd3NzOiAnNDQzJ1xyXG4gIH07XHJcbiAgLy8gYWxsb3dlZCBob3N0bmFtZSBjaGFyYWN0ZXJzIGFjY29yZGluZyB0byBSRkMgMzk4NlxyXG4gIC8vIEFMUEhBIERJR0lUIFwiLVwiIFwiLlwiIFwiX1wiIFwiflwiIFwiIVwiIFwiJFwiIFwiJlwiIFwiJ1wiIFwiKFwiIFwiKVwiIFwiKlwiIFwiK1wiIFwiLFwiIFwiO1wiIFwiPVwiICVlbmNvZGVkXHJcbiAgLy8gSSd2ZSBuZXZlciBzZWVuIGEgKG5vbi1JRE4pIGhvc3RuYW1lIG90aGVyIHRoYW46IEFMUEhBIERJR0lUIC4gLVxyXG4gIFVSSS5pbnZhbGlkX2hvc3RuYW1lX2NoYXJhY3RlcnMgPSAvW15hLXpBLVowLTlcXC4tXS87XHJcbiAgLy8gbWFwIERPTSBFbGVtZW50cyB0byB0aGVpciBVUkkgYXR0cmlidXRlXHJcbiAgVVJJLmRvbUF0dHJpYnV0ZXMgPSB7XHJcbiAgICAnYSc6ICdocmVmJyxcclxuICAgICdibG9ja3F1b3RlJzogJ2NpdGUnLFxyXG4gICAgJ2xpbmsnOiAnaHJlZicsXHJcbiAgICAnYmFzZSc6ICdocmVmJyxcclxuICAgICdzY3JpcHQnOiAnc3JjJyxcclxuICAgICdmb3JtJzogJ2FjdGlvbicsXHJcbiAgICAnaW1nJzogJ3NyYycsXHJcbiAgICAnYXJlYSc6ICdocmVmJyxcclxuICAgICdpZnJhbWUnOiAnc3JjJyxcclxuICAgICdlbWJlZCc6ICdzcmMnLFxyXG4gICAgJ3NvdXJjZSc6ICdzcmMnLFxyXG4gICAgJ3RyYWNrJzogJ3NyYycsXHJcbiAgICAnaW5wdXQnOiAnc3JjJywgLy8gYnV0IG9ubHkgaWYgdHlwZT1cImltYWdlXCJcclxuICAgICdhdWRpbyc6ICdzcmMnLFxyXG4gICAgJ3ZpZGVvJzogJ3NyYydcclxuICB9O1xyXG4gIFVSSS5nZXREb21BdHRyaWJ1dGUgPSBmdW5jdGlvbihub2RlKSB7XHJcbiAgICBpZiAoIW5vZGUgfHwgIW5vZGUubm9kZU5hbWUpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAvLyA8aW5wdXQ+IHNob3VsZCBvbmx5IGV4cG9zZSBzcmMgZm9yIHR5cGU9XCJpbWFnZVwiXHJcbiAgICBpZiAobm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgbm9kZS50eXBlICE9PSAnaW1hZ2UnKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFVSSS5kb21BdHRyaWJ1dGVzW25vZGVOYW1lXTtcclxuICB9O1xyXG5cclxuICBmdW5jdGlvbiBlc2NhcGVGb3JEdW1iRmlyZWZveDM2KHZhbHVlKSB7XHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcy9pc3N1ZXMvOTFcclxuICAgIHJldHVybiBlc2NhcGUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gZW5jb2RpbmcgLyBkZWNvZGluZyBhY2NvcmRpbmcgdG8gUkZDMzk4NlxyXG4gIGZ1bmN0aW9uIHN0cmljdEVuY29kZVVSSUNvbXBvbmVudChzdHJpbmcpIHtcclxuICAgIC8vIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2VuY29kZVVSSUNvbXBvbmVudFxyXG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmcpXHJcbiAgICAgIC5yZXBsYWNlKC9bIScoKSpdL2csIGVzY2FwZUZvckR1bWJGaXJlZm94MzYpXHJcbiAgICAgIC5yZXBsYWNlKC9cXCovZywgJyUyQScpO1xyXG4gIH1cclxuICBVUkkuZW5jb2RlID0gc3RyaWN0RW5jb2RlVVJJQ29tcG9uZW50O1xyXG4gIFVSSS5kZWNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQ7XHJcbiAgVVJJLmlzbzg4NTkgPSBmdW5jdGlvbigpIHtcclxuICAgIFVSSS5lbmNvZGUgPSBlc2NhcGU7XHJcbiAgICBVUkkuZGVjb2RlID0gdW5lc2NhcGU7XHJcbiAgfTtcclxuICBVUkkudW5pY29kZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgVVJJLmVuY29kZSA9IHN0cmljdEVuY29kZVVSSUNvbXBvbmVudDtcclxuICAgIFVSSS5kZWNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQ7XHJcbiAgfTtcclxuICBVUkkuY2hhcmFjdGVycyA9IHtcclxuICAgIHBhdGhuYW1lOiB7XHJcbiAgICAgIGVuY29kZToge1xyXG4gICAgICAgIC8vIFJGQzM5ODYgMi4xOiBGb3IgY29uc2lzdGVuY3ksIFVSSSBwcm9kdWNlcnMgYW5kIG5vcm1hbGl6ZXJzIHNob3VsZFxyXG4gICAgICAgIC8vIHVzZSB1cHBlcmNhc2UgaGV4YWRlY2ltYWwgZGlnaXRzIGZvciBhbGwgcGVyY2VudC1lbmNvZGluZ3MuXHJcbiAgICAgICAgZXhwcmVzc2lvbjogLyUoMjR8MjZ8MkJ8MkN8M0J8M0R8M0F8NDApL2lnLFxyXG4gICAgICAgIG1hcDoge1xyXG4gICAgICAgICAgLy8gLS5ffiEnKCkqXHJcbiAgICAgICAgICAnJTI0JzogJyQnLFxyXG4gICAgICAgICAgJyUyNic6ICcmJyxcclxuICAgICAgICAgICclMkInOiAnKycsXHJcbiAgICAgICAgICAnJTJDJzogJywnLFxyXG4gICAgICAgICAgJyUzQic6ICc7JyxcclxuICAgICAgICAgICclM0QnOiAnPScsXHJcbiAgICAgICAgICAnJTNBJzogJzonLFxyXG4gICAgICAgICAgJyU0MCc6ICdAJ1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZGVjb2RlOiB7XHJcbiAgICAgICAgZXhwcmVzc2lvbjogL1tcXC9cXD8jXS9nLFxyXG4gICAgICAgIG1hcDoge1xyXG4gICAgICAgICAgJy8nOiAnJTJGJyxcclxuICAgICAgICAgICc/JzogJyUzRicsXHJcbiAgICAgICAgICAnIyc6ICclMjMnXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgcmVzZXJ2ZWQ6IHtcclxuICAgICAgZW5jb2RlOiB7XHJcbiAgICAgICAgLy8gUkZDMzk4NiAyLjE6IEZvciBjb25zaXN0ZW5jeSwgVVJJIHByb2R1Y2VycyBhbmQgbm9ybWFsaXplcnMgc2hvdWxkXHJcbiAgICAgICAgLy8gdXNlIHVwcGVyY2FzZSBoZXhhZGVjaW1hbCBkaWdpdHMgZm9yIGFsbCBwZXJjZW50LWVuY29kaW5ncy5cclxuICAgICAgICBleHByZXNzaW9uOiAvJSgyMXwyM3wyNHwyNnwyN3wyOHwyOXwyQXwyQnwyQ3wyRnwzQXwzQnwzRHwzRnw0MHw1Qnw1RCkvaWcsXHJcbiAgICAgICAgbWFwOiB7XHJcbiAgICAgICAgICAvLyBnZW4tZGVsaW1zXHJcbiAgICAgICAgICAnJTNBJzogJzonLFxyXG4gICAgICAgICAgJyUyRic6ICcvJyxcclxuICAgICAgICAgICclM0YnOiAnPycsXHJcbiAgICAgICAgICAnJTIzJzogJyMnLFxyXG4gICAgICAgICAgJyU1Qic6ICdbJyxcclxuICAgICAgICAgICclNUQnOiAnXScsXHJcbiAgICAgICAgICAnJTQwJzogJ0AnLFxyXG4gICAgICAgICAgLy8gc3ViLWRlbGltc1xyXG4gICAgICAgICAgJyUyMSc6ICchJyxcclxuICAgICAgICAgICclMjQnOiAnJCcsXHJcbiAgICAgICAgICAnJTI2JzogJyYnLFxyXG4gICAgICAgICAgJyUyNyc6ICdcXCcnLFxyXG4gICAgICAgICAgJyUyOCc6ICcoJyxcclxuICAgICAgICAgICclMjknOiAnKScsXHJcbiAgICAgICAgICAnJTJBJzogJyonLFxyXG4gICAgICAgICAgJyUyQic6ICcrJyxcclxuICAgICAgICAgICclMkMnOiAnLCcsXHJcbiAgICAgICAgICAnJTNCJzogJzsnLFxyXG4gICAgICAgICAgJyUzRCc6ICc9J1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHVybnBhdGg6IHtcclxuICAgICAgLy8gVGhlIGNoYXJhY3RlcnMgdW5kZXIgYGVuY29kZWAgYXJlIHRoZSBjaGFyYWN0ZXJzIGNhbGxlZCBvdXQgYnkgUkZDIDIxNDEgYXMgYmVpbmcgYWNjZXB0YWJsZVxyXG4gICAgICAvLyBmb3IgdXNhZ2UgaW4gYSBVUk4uIFJGQzIxNDEgYWxzbyBjYWxscyBvdXQgXCItXCIsIFwiLlwiLCBhbmQgXCJfXCIgYXMgYWNjZXB0YWJsZSBjaGFyYWN0ZXJzLCBidXRcclxuICAgICAgLy8gdGhlc2UgYXJlbid0IGVuY29kZWQgYnkgZW5jb2RlVVJJQ29tcG9uZW50LCBzbyB3ZSBkb24ndCBoYXZlIHRvIGNhbGwgdGhlbSBvdXQgaGVyZS4gQWxzb1xyXG4gICAgICAvLyBub3RlIHRoYXQgdGhlIGNvbG9uIGNoYXJhY3RlciBpcyBub3QgZmVhdHVyZWQgaW4gdGhlIGVuY29kaW5nIG1hcDsgdGhpcyBpcyBiZWNhdXNlIFVSSS5qc1xyXG4gICAgICAvLyBnaXZlcyB0aGUgY29sb25zIGluIFVSTnMgc2VtYW50aWMgbWVhbmluZyBhcyB0aGUgZGVsaW1pdGVycyBvZiBwYXRoIHNlZ2VtZW50cywgYW5kIHNvIGl0XHJcbiAgICAgIC8vIHNob3VsZCBub3QgYXBwZWFyIHVuZW5jb2RlZCBpbiBhIHNlZ21lbnQgaXRzZWxmLlxyXG4gICAgICAvLyBTZWUgYWxzbyB0aGUgbm90ZSBhYm92ZSBhYm91dCBSRkMzOTg2IGFuZCBjYXBpdGFsYWxpemVkIGhleCBkaWdpdHMuXHJcbiAgICAgIGVuY29kZToge1xyXG4gICAgICAgIGV4cHJlc3Npb246IC8lKDIxfDI0fDI3fDI4fDI5fDJBfDJCfDJDfDNCfDNEfDQwKS9pZyxcclxuICAgICAgICBtYXA6IHtcclxuICAgICAgICAgICclMjEnOiAnIScsXHJcbiAgICAgICAgICAnJTI0JzogJyQnLFxyXG4gICAgICAgICAgJyUyNyc6ICdcXCcnLFxyXG4gICAgICAgICAgJyUyOCc6ICcoJyxcclxuICAgICAgICAgICclMjknOiAnKScsXHJcbiAgICAgICAgICAnJTJBJzogJyonLFxyXG4gICAgICAgICAgJyUyQic6ICcrJyxcclxuICAgICAgICAgICclMkMnOiAnLCcsXHJcbiAgICAgICAgICAnJTNCJzogJzsnLFxyXG4gICAgICAgICAgJyUzRCc6ICc9JyxcclxuICAgICAgICAgICclNDAnOiAnQCdcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIFRoZXNlIGNoYXJhY3RlcnMgYXJlIHRoZSBjaGFyYWN0ZXJzIGNhbGxlZCBvdXQgYnkgUkZDMjE0MSBhcyBcInJlc2VydmVkXCIgY2hhcmFjdGVycyB0aGF0XHJcbiAgICAgIC8vIHNob3VsZCBuZXZlciBhcHBlYXIgaW4gYSBVUk4sIHBsdXMgdGhlIGNvbG9uIGNoYXJhY3RlciAoc2VlIG5vdGUgYWJvdmUpLlxyXG4gICAgICBkZWNvZGU6IHtcclxuICAgICAgICBleHByZXNzaW9uOiAvW1xcL1xcPyM6XS9nLFxyXG4gICAgICAgIG1hcDoge1xyXG4gICAgICAgICAgJy8nOiAnJTJGJyxcclxuICAgICAgICAgICc/JzogJyUzRicsXHJcbiAgICAgICAgICAnIyc6ICclMjMnLFxyXG4gICAgICAgICAgJzonOiAnJTNBJ1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcbiAgVVJJLmVuY29kZVF1ZXJ5ID0gZnVuY3Rpb24oc3RyaW5nLCBlc2NhcGVRdWVyeVNwYWNlKSB7XHJcbiAgICB2YXIgZXNjYXBlZCA9IFVSSS5lbmNvZGUoc3RyaW5nICsgJycpO1xyXG4gICAgaWYgKGVzY2FwZVF1ZXJ5U3BhY2UgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBlc2NhcGVRdWVyeVNwYWNlID0gVVJJLmVzY2FwZVF1ZXJ5U3BhY2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVzY2FwZVF1ZXJ5U3BhY2UgPyBlc2NhcGVkLnJlcGxhY2UoLyUyMC9nLCAnKycpIDogZXNjYXBlZDtcclxuICB9O1xyXG4gIFVSSS5kZWNvZGVRdWVyeSA9IGZ1bmN0aW9uKHN0cmluZywgZXNjYXBlUXVlcnlTcGFjZSkge1xyXG4gICAgc3RyaW5nICs9ICcnO1xyXG4gICAgaWYgKGVzY2FwZVF1ZXJ5U3BhY2UgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBlc2NhcGVRdWVyeVNwYWNlID0gVVJJLmVzY2FwZVF1ZXJ5U3BhY2U7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIFVSSS5kZWNvZGUoZXNjYXBlUXVlcnlTcGFjZSA/IHN0cmluZy5yZXBsYWNlKC9cXCsvZywgJyUyMCcpIDogc3RyaW5nKTtcclxuICAgIH0gY2F0Y2goZSkge1xyXG4gICAgICAvLyB3ZSdyZSBub3QgZ29pbmcgdG8gbWVzcyB3aXRoIHdlaXJkIGVuY29kaW5ncyxcclxuICAgICAgLy8gZ2l2ZSB1cCBhbmQgcmV0dXJuIHRoZSB1bmRlY29kZWQgb3JpZ2luYWwgc3RyaW5nXHJcbiAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcy9pc3N1ZXMvODdcclxuICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvVVJJLmpzL2lzc3Vlcy85MlxyXG4gICAgICByZXR1cm4gc3RyaW5nO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgLy8gZ2VuZXJhdGUgZW5jb2RlL2RlY29kZSBwYXRoIGZ1bmN0aW9uc1xyXG4gIHZhciBfcGFydHMgPSB7J2VuY29kZSc6J2VuY29kZScsICdkZWNvZGUnOidkZWNvZGUnfTtcclxuICB2YXIgX3BhcnQ7XHJcbiAgdmFyIGdlbmVyYXRlQWNjZXNzb3IgPSBmdW5jdGlvbihfZ3JvdXAsIF9wYXJ0KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgcmV0dXJuIFVSSVtfcGFydF0oc3RyaW5nICsgJycpLnJlcGxhY2UoVVJJLmNoYXJhY3RlcnNbX2dyb3VwXVtfcGFydF0uZXhwcmVzc2lvbiwgZnVuY3Rpb24oYykge1xyXG4gICAgICAgICAgcmV0dXJuIFVSSS5jaGFyYWN0ZXJzW19ncm91cF1bX3BhcnRdLm1hcFtjXTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIHdlJ3JlIG5vdCBnb2luZyB0byBtZXNzIHdpdGggd2VpcmQgZW5jb2RpbmdzLFxyXG4gICAgICAgIC8vIGdpdmUgdXAgYW5kIHJldHVybiB0aGUgdW5kZWNvZGVkIG9yaWdpbmFsIHN0cmluZ1xyXG4gICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcy9pc3N1ZXMvODdcclxuICAgICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9VUkkuanMvaXNzdWVzLzkyXHJcbiAgICAgICAgcmV0dXJuIHN0cmluZztcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICBmb3IgKF9wYXJ0IGluIF9wYXJ0cykge1xyXG4gICAgVVJJW19wYXJ0ICsgJ1BhdGhTZWdtZW50J10gPSBnZW5lcmF0ZUFjY2Vzc29yKCdwYXRobmFtZScsIF9wYXJ0c1tfcGFydF0pO1xyXG4gICAgVVJJW19wYXJ0ICsgJ1VyblBhdGhTZWdtZW50J10gPSBnZW5lcmF0ZUFjY2Vzc29yKCd1cm5wYXRoJywgX3BhcnRzW19wYXJ0XSk7XHJcbiAgfVxyXG5cclxuICB2YXIgZ2VuZXJhdGVTZWdtZW50ZWRQYXRoRnVuY3Rpb24gPSBmdW5jdGlvbihfc2VwLCBfY29kaW5nRnVuY05hbWUsIF9pbm5lckNvZGluZ0Z1bmNOYW1lKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XHJcbiAgICAgIC8vIFdoeSBwYXNzIGluIG5hbWVzIG9mIGZ1bmN0aW9ucywgcmF0aGVyIHRoYW4gdGhlIGZ1bmN0aW9uIG9iamVjdHMgdGhlbXNlbHZlcz8gVGhlXHJcbiAgICAgIC8vIGRlZmluaXRpb25zIG9mIHNvbWUgZnVuY3Rpb25zIChidXQgaW4gcGFydGljdWxhciwgVVJJLmRlY29kZSkgd2lsbCBvY2Nhc2lvbmFsbHkgY2hhbmdlIGR1ZVxyXG4gICAgICAvLyB0byBVUkkuanMgaGF2aW5nIElTTzg4NTkgYW5kIFVuaWNvZGUgbW9kZXMuIFBhc3NpbmcgaW4gdGhlIG5hbWUgYW5kIGdldHRpbmcgaXQgd2lsbCBlbnN1cmVcclxuICAgICAgLy8gdGhhdCB0aGUgZnVuY3Rpb25zIHdlIHVzZSBoZXJlIGFyZSBcImZyZXNoXCIuXHJcbiAgICAgIHZhciBhY3R1YWxDb2RpbmdGdW5jO1xyXG4gICAgICBpZiAoIV9pbm5lckNvZGluZ0Z1bmNOYW1lKSB7XHJcbiAgICAgICAgYWN0dWFsQ29kaW5nRnVuYyA9IFVSSVtfY29kaW5nRnVuY05hbWVdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFjdHVhbENvZGluZ0Z1bmMgPSBmdW5jdGlvbihzdHJpbmcpIHtcclxuICAgICAgICAgIHJldHVybiBVUklbX2NvZGluZ0Z1bmNOYW1lXShVUklbX2lubmVyQ29kaW5nRnVuY05hbWVdKHN0cmluZykpO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBzZWdtZW50cyA9IChzdHJpbmcgKyAnJykuc3BsaXQoX3NlcCk7XHJcblxyXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gc2VnbWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBzZWdtZW50c1tpXSA9IGFjdHVhbENvZGluZ0Z1bmMoc2VnbWVudHNbaV0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc2VnbWVudHMuam9pbihfc2VwKTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgLy8gVGhpcyB0YWtlcyBwbGFjZSBvdXRzaWRlIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCwgZS5nLiwgZW5jb2RlVXJuUGF0aCBmdW5jdGlvbnMuXHJcbiAgVVJJLmRlY29kZVBhdGggPSBnZW5lcmF0ZVNlZ21lbnRlZFBhdGhGdW5jdGlvbignLycsICdkZWNvZGVQYXRoU2VnbWVudCcpO1xyXG4gIFVSSS5kZWNvZGVVcm5QYXRoID0gZ2VuZXJhdGVTZWdtZW50ZWRQYXRoRnVuY3Rpb24oJzonLCAnZGVjb2RlVXJuUGF0aFNlZ21lbnQnKTtcclxuICBVUkkucmVjb2RlUGF0aCA9IGdlbmVyYXRlU2VnbWVudGVkUGF0aEZ1bmN0aW9uKCcvJywgJ2VuY29kZVBhdGhTZWdtZW50JywgJ2RlY29kZScpO1xyXG4gIFVSSS5yZWNvZGVVcm5QYXRoID0gZ2VuZXJhdGVTZWdtZW50ZWRQYXRoRnVuY3Rpb24oJzonLCAnZW5jb2RlVXJuUGF0aFNlZ21lbnQnLCAnZGVjb2RlJyk7XHJcblxyXG4gIFVSSS5lbmNvZGVSZXNlcnZlZCA9IGdlbmVyYXRlQWNjZXNzb3IoJ3Jlc2VydmVkJywgJ2VuY29kZScpO1xyXG5cclxuICBVUkkucGFyc2UgPSBmdW5jdGlvbihzdHJpbmcsIHBhcnRzKSB7XHJcbiAgICB2YXIgcG9zO1xyXG4gICAgaWYgKCFwYXJ0cykge1xyXG4gICAgICBwYXJ0cyA9IHt9O1xyXG4gICAgfVxyXG4gICAgLy8gW3Byb3RvY29sXCI6Ly9cIlt1c2VybmFtZVtcIjpcInBhc3N3b3JkXVwiQFwiXWhvc3RuYW1lW1wiOlwicG9ydF1cIi9cIj9dW3BhdGhdW1wiP1wicXVlcnlzdHJpbmddW1wiI1wiZnJhZ21lbnRdXHJcblxyXG4gICAgLy8gZXh0cmFjdCBmcmFnbWVudFxyXG4gICAgcG9zID0gc3RyaW5nLmluZGV4T2YoJyMnKTtcclxuICAgIGlmIChwb3MgPiAtMSkge1xyXG4gICAgICAvLyBlc2NhcGluZz9cclxuICAgICAgcGFydHMuZnJhZ21lbnQgPSBzdHJpbmcuc3Vic3RyaW5nKHBvcyArIDEpIHx8IG51bGw7XHJcbiAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmcoMCwgcG9zKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBleHRyYWN0IHF1ZXJ5XHJcbiAgICBwb3MgPSBzdHJpbmcuaW5kZXhPZignPycpO1xyXG4gICAgaWYgKHBvcyA+IC0xKSB7XHJcbiAgICAgIC8vIGVzY2FwaW5nP1xyXG4gICAgICBwYXJ0cy5xdWVyeSA9IHN0cmluZy5zdWJzdHJpbmcocG9zICsgMSkgfHwgbnVsbDtcclxuICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygwLCBwb3MpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGV4dHJhY3QgcHJvdG9jb2xcclxuICAgIGlmIChzdHJpbmcuc3Vic3RyaW5nKDAsIDIpID09PSAnLy8nKSB7XHJcbiAgICAgIC8vIHJlbGF0aXZlLXNjaGVtZVxyXG4gICAgICBwYXJ0cy5wcm90b2NvbCA9IG51bGw7XHJcbiAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmcoMik7XHJcbiAgICAgIC8vIGV4dHJhY3QgXCJ1c2VyOnBhc3NAaG9zdDpwb3J0XCJcclxuICAgICAgc3RyaW5nID0gVVJJLnBhcnNlQXV0aG9yaXR5KHN0cmluZywgcGFydHMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcG9zID0gc3RyaW5nLmluZGV4T2YoJzonKTtcclxuICAgICAgaWYgKHBvcyA+IC0xKSB7XHJcbiAgICAgICAgcGFydHMucHJvdG9jb2wgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIHBvcykgfHwgbnVsbDtcclxuICAgICAgICBpZiAocGFydHMucHJvdG9jb2wgJiYgIXBhcnRzLnByb3RvY29sLm1hdGNoKFVSSS5wcm90b2NvbF9leHByZXNzaW9uKSkge1xyXG4gICAgICAgICAgLy8gOiBtYXkgYmUgd2l0aGluIHRoZSBwYXRoXHJcbiAgICAgICAgICBwYXJ0cy5wcm90b2NvbCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9IGVsc2UgaWYgKHN0cmluZy5zdWJzdHJpbmcocG9zICsgMSwgcG9zICsgMykgPT09ICcvLycpIHtcclxuICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmcocG9zICsgMyk7XHJcblxyXG4gICAgICAgICAgLy8gZXh0cmFjdCBcInVzZXI6cGFzc0Bob3N0OnBvcnRcIlxyXG4gICAgICAgICAgc3RyaW5nID0gVVJJLnBhcnNlQXV0aG9yaXR5KHN0cmluZywgcGFydHMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKHBvcyArIDEpO1xyXG4gICAgICAgICAgcGFydHMudXJuID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB3aGF0J3MgbGVmdCBtdXN0IGJlIHRoZSBwYXRoXHJcbiAgICBwYXJ0cy5wYXRoID0gc3RyaW5nO1xyXG5cclxuICAgIC8vIGFuZCB3ZSdyZSBkb25lXHJcbiAgICByZXR1cm4gcGFydHM7XHJcbiAgfTtcclxuICBVUkkucGFyc2VIb3N0ID0gZnVuY3Rpb24oc3RyaW5nLCBwYXJ0cykge1xyXG4gICAgLy8gQ29weSBjaHJvbWUsIElFLCBvcGVyYSBiYWNrc2xhc2gtaGFuZGxpbmcgYmVoYXZpb3IuXHJcbiAgICAvLyBCYWNrIHNsYXNoZXMgYmVmb3JlIHRoZSBxdWVyeSBzdHJpbmcgZ2V0IGNvbnZlcnRlZCB0byBmb3J3YXJkIHNsYXNoZXNcclxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2Jsb2IvMzg2ZmQyNGY0OWIwZTlkMWE4YTA3NjU5MmE0MDQxNjhmYWVlY2MzNC9saWIvdXJsLmpzI0wxMTUtTDEyNFxyXG4gICAgLy8gU2VlOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjU5MTZcclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvVVJJLmpzL3B1bGwvMjMzXHJcbiAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xyXG5cclxuICAgIC8vIGV4dHJhY3QgaG9zdDpwb3J0XHJcbiAgICB2YXIgcG9zID0gc3RyaW5nLmluZGV4T2YoJy8nKTtcclxuICAgIHZhciBicmFja2V0UG9zO1xyXG4gICAgdmFyIHQ7XHJcblxyXG4gICAgaWYgKHBvcyA9PT0gLTEpIHtcclxuICAgICAgcG9zID0gc3RyaW5nLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RyaW5nLmNoYXJBdCgwKSA9PT0gJ1snKSB7XHJcbiAgICAgIC8vIElQdjYgaG9zdCAtIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtNm1hbi10ZXh0LWFkZHItcmVwcmVzZW50YXRpb24tMDQjc2VjdGlvbi02XHJcbiAgICAgIC8vIEkgY2xhaW0gbW9zdCBjbGllbnQgc29mdHdhcmUgYnJlYWtzIG9uIElQdjYgYW55d2F5cy4gVG8gc2ltcGxpZnkgdGhpbmdzLCBVUkkgb25seSBhY2NlcHRzXHJcbiAgICAgIC8vIElQdjYrcG9ydCBpbiB0aGUgZm9ybWF0IFsyMDAxOmRiODo6MV06ODAgKGZvciB0aGUgdGltZSBiZWluZylcclxuICAgICAgYnJhY2tldFBvcyA9IHN0cmluZy5pbmRleE9mKCddJyk7XHJcbiAgICAgIHBhcnRzLmhvc3RuYW1lID0gc3RyaW5nLnN1YnN0cmluZygxLCBicmFja2V0UG9zKSB8fCBudWxsO1xyXG4gICAgICBwYXJ0cy5wb3J0ID0gc3RyaW5nLnN1YnN0cmluZyhicmFja2V0UG9zICsgMiwgcG9zKSB8fCBudWxsO1xyXG4gICAgICBpZiAocGFydHMucG9ydCA9PT0gJy8nKSB7XHJcbiAgICAgICAgcGFydHMucG9ydCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhciBmaXJzdENvbG9uID0gc3RyaW5nLmluZGV4T2YoJzonKTtcclxuICAgICAgdmFyIGZpcnN0U2xhc2ggPSBzdHJpbmcuaW5kZXhPZignLycpO1xyXG4gICAgICB2YXIgbmV4dENvbG9uID0gc3RyaW5nLmluZGV4T2YoJzonLCBmaXJzdENvbG9uICsgMSk7XHJcbiAgICAgIGlmIChuZXh0Q29sb24gIT09IC0xICYmIChmaXJzdFNsYXNoID09PSAtMSB8fCBuZXh0Q29sb24gPCBmaXJzdFNsYXNoKSkge1xyXG4gICAgICAgIC8vIElQdjYgaG9zdCBjb250YWlucyBtdWx0aXBsZSBjb2xvbnMgLSBidXQgbm8gcG9ydFxyXG4gICAgICAgIC8vIHRoaXMgbm90YXRpb24gaXMgYWN0dWFsbHkgbm90IGFsbG93ZWQgYnkgUkZDIDM5ODYsIGJ1dCB3ZSdyZSBhIGxpYmVyYWwgcGFyc2VyXHJcbiAgICAgICAgcGFydHMuaG9zdG5hbWUgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIHBvcykgfHwgbnVsbDtcclxuICAgICAgICBwYXJ0cy5wb3J0ID0gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0ID0gc3RyaW5nLnN1YnN0cmluZygwLCBwb3MpLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgcGFydHMuaG9zdG5hbWUgPSB0WzBdIHx8IG51bGw7XHJcbiAgICAgICAgcGFydHMucG9ydCA9IHRbMV0gfHwgbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJ0cy5ob3N0bmFtZSAmJiBzdHJpbmcuc3Vic3RyaW5nKHBvcykuY2hhckF0KDApICE9PSAnLycpIHtcclxuICAgICAgcG9zKys7XHJcbiAgICAgIHN0cmluZyA9ICcvJyArIHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RyaW5nLnN1YnN0cmluZyhwb3MpIHx8ICcvJztcclxuICB9O1xyXG4gIFVSSS5wYXJzZUF1dGhvcml0eSA9IGZ1bmN0aW9uKHN0cmluZywgcGFydHMpIHtcclxuICAgIHN0cmluZyA9IFVSSS5wYXJzZVVzZXJpbmZvKHN0cmluZywgcGFydHMpO1xyXG4gICAgcmV0dXJuIFVSSS5wYXJzZUhvc3Qoc3RyaW5nLCBwYXJ0cyk7XHJcbiAgfTtcclxuICBVUkkucGFyc2VVc2VyaW5mbyA9IGZ1bmN0aW9uKHN0cmluZywgcGFydHMpIHtcclxuICAgIC8vIGV4dHJhY3QgdXNlcm5hbWU6cGFzc3dvcmRcclxuICAgIHZhciBmaXJzdFNsYXNoID0gc3RyaW5nLmluZGV4T2YoJy8nKTtcclxuICAgIHZhciBwb3MgPSBzdHJpbmcubGFzdEluZGV4T2YoJ0AnLCBmaXJzdFNsYXNoID4gLTEgPyBmaXJzdFNsYXNoIDogc3RyaW5nLmxlbmd0aCAtIDEpO1xyXG4gICAgdmFyIHQ7XHJcblxyXG4gICAgLy8gYXV0aG9yaXR5QCBtdXN0IGNvbWUgYmVmb3JlIC9wYXRoXHJcbiAgICBpZiAocG9zID4gLTEgJiYgKGZpcnN0U2xhc2ggPT09IC0xIHx8IHBvcyA8IGZpcnN0U2xhc2gpKSB7XHJcbiAgICAgIHQgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIHBvcykuc3BsaXQoJzonKTtcclxuICAgICAgcGFydHMudXNlcm5hbWUgPSB0WzBdID8gVVJJLmRlY29kZSh0WzBdKSA6IG51bGw7XHJcbiAgICAgIHQuc2hpZnQoKTtcclxuICAgICAgcGFydHMucGFzc3dvcmQgPSB0WzBdID8gVVJJLmRlY29kZSh0LmpvaW4oJzonKSkgOiBudWxsO1xyXG4gICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKHBvcyArIDEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFydHMudXNlcm5hbWUgPSBudWxsO1xyXG4gICAgICBwYXJ0cy5wYXNzd29yZCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN0cmluZztcclxuICB9O1xyXG4gIFVSSS5wYXJzZVF1ZXJ5ID0gZnVuY3Rpb24oc3RyaW5nLCBlc2NhcGVRdWVyeVNwYWNlKSB7XHJcbiAgICBpZiAoIXN0cmluZykge1xyXG4gICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhyb3cgb3V0IHRoZSBmdW5reSBidXNpbmVzcyAtIFwiP1wiW25hbWVcIj1cInZhbHVlXCImXCJdK1xyXG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLyYrL2csICcmJykucmVwbGFjZSgvXlxcPyomKnwmKyQvZywgJycpO1xyXG5cclxuICAgIGlmICghc3RyaW5nKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaXRlbXMgPSB7fTtcclxuICAgIHZhciBzcGxpdHMgPSBzdHJpbmcuc3BsaXQoJyYnKTtcclxuICAgIHZhciBsZW5ndGggPSBzcGxpdHMubGVuZ3RoO1xyXG4gICAgdmFyIHYsIG5hbWUsIHZhbHVlO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgdiA9IHNwbGl0c1tpXS5zcGxpdCgnPScpO1xyXG4gICAgICBuYW1lID0gVVJJLmRlY29kZVF1ZXJ5KHYuc2hpZnQoKSwgZXNjYXBlUXVlcnlTcGFjZSk7XHJcbiAgICAgIC8vIG5vIFwiPVwiIGlzIG51bGwgYWNjb3JkaW5nIHRvIGh0dHA6Ly9kdmNzLnczLm9yZy9oZy91cmwvcmF3LWZpbGUvdGlwL092ZXJ2aWV3Lmh0bWwjY29sbGVjdC11cmwtcGFyYW1ldGVyc1xyXG4gICAgICB2YWx1ZSA9IHYubGVuZ3RoID8gVVJJLmRlY29kZVF1ZXJ5KHYuam9pbignPScpLCBlc2NhcGVRdWVyeVNwYWNlKSA6IG51bGw7XHJcblxyXG4gICAgICBpZiAoaGFzT3duLmNhbGwoaXRlbXMsIG5hbWUpKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtc1tuYW1lXSA9PT0gJ3N0cmluZycgfHwgaXRlbXNbbmFtZV0gPT09IG51bGwpIHtcclxuICAgICAgICAgIGl0ZW1zW25hbWVdID0gW2l0ZW1zW25hbWVdXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGl0ZW1zW25hbWVdLnB1c2godmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGl0ZW1zW25hbWVdID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbiAgfTtcclxuXHJcbiAgVVJJLmJ1aWxkID0gZnVuY3Rpb24ocGFydHMpIHtcclxuICAgIHZhciB0ID0gJyc7XHJcblxyXG4gICAgaWYgKHBhcnRzLnByb3RvY29sKSB7XHJcbiAgICAgIHQgKz0gcGFydHMucHJvdG9jb2wgKyAnOic7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFwYXJ0cy51cm4gJiYgKHQgfHwgcGFydHMuaG9zdG5hbWUpKSB7XHJcbiAgICAgIHQgKz0gJy8vJztcclxuICAgIH1cclxuXHJcbiAgICB0ICs9IChVUkkuYnVpbGRBdXRob3JpdHkocGFydHMpIHx8ICcnKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHBhcnRzLnBhdGggPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGlmIChwYXJ0cy5wYXRoLmNoYXJBdCgwKSAhPT0gJy8nICYmIHR5cGVvZiBwYXJ0cy5ob3N0bmFtZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0ICs9ICcvJztcclxuICAgICAgfVxyXG5cclxuICAgICAgdCArPSBwYXJ0cy5wYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgcGFydHMucXVlcnkgPT09ICdzdHJpbmcnICYmIHBhcnRzLnF1ZXJ5KSB7XHJcbiAgICAgIHQgKz0gJz8nICsgcGFydHMucXVlcnk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBwYXJ0cy5mcmFnbWVudCA9PT0gJ3N0cmluZycgJiYgcGFydHMuZnJhZ21lbnQpIHtcclxuICAgICAgdCArPSAnIycgKyBwYXJ0cy5mcmFnbWVudDtcclxuICAgIH1cclxuICAgIHJldHVybiB0O1xyXG4gIH07XHJcbiAgVVJJLmJ1aWxkSG9zdCA9IGZ1bmN0aW9uKHBhcnRzKSB7XHJcbiAgICB2YXIgdCA9ICcnO1xyXG5cclxuICAgIGlmICghcGFydHMuaG9zdG5hbWUpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfSBlbHNlIGlmIChVUkkuaXA2X2V4cHJlc3Npb24udGVzdChwYXJ0cy5ob3N0bmFtZSkpIHtcclxuICAgICAgdCArPSAnWycgKyBwYXJ0cy5ob3N0bmFtZSArICddJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHQgKz0gcGFydHMuaG9zdG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcnRzLnBvcnQpIHtcclxuICAgICAgdCArPSAnOicgKyBwYXJ0cy5wb3J0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0O1xyXG4gIH07XHJcbiAgVVJJLmJ1aWxkQXV0aG9yaXR5ID0gZnVuY3Rpb24ocGFydHMpIHtcclxuICAgIHJldHVybiBVUkkuYnVpbGRVc2VyaW5mbyhwYXJ0cykgKyBVUkkuYnVpbGRIb3N0KHBhcnRzKTtcclxuICB9O1xyXG4gIFVSSS5idWlsZFVzZXJpbmZvID0gZnVuY3Rpb24ocGFydHMpIHtcclxuICAgIHZhciB0ID0gJyc7XHJcblxyXG4gICAgaWYgKHBhcnRzLnVzZXJuYW1lKSB7XHJcbiAgICAgIHQgKz0gVVJJLmVuY29kZShwYXJ0cy51c2VybmFtZSk7XHJcblxyXG4gICAgICBpZiAocGFydHMucGFzc3dvcmQpIHtcclxuICAgICAgICB0ICs9ICc6JyArIFVSSS5lbmNvZGUocGFydHMucGFzc3dvcmQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0ICs9ICdAJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdDtcclxuICB9O1xyXG4gIFVSSS5idWlsZFF1ZXJ5ID0gZnVuY3Rpb24oZGF0YSwgZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLCBlc2NhcGVRdWVyeVNwYWNlKSB7XHJcbiAgICAvLyBhY2NvcmRpbmcgdG8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiBvciBodHRwOi8vbGFicy5hcGFjaGUub3JnL3dlYmFyY2gvdXJpL3JmYy9yZmMzOTg2Lmh0bWxcclxuICAgIC8vIGJlaW5nIMK7LS5ffiEkJicoKSorLDs9OkAvP8KrICVIRVggYW5kIGFsbnVtIGFyZSBhbGxvd2VkXHJcbiAgICAvLyB0aGUgUkZDIGV4cGxpY2l0bHkgc3RhdGVzID8vZm9vIGJlaW5nIGEgdmFsaWQgdXNlIGNhc2UsIG5vIG1lbnRpb24gb2YgcGFyYW1ldGVyIHN5bnRheCFcclxuICAgIC8vIFVSSS5qcyB0cmVhdHMgdGhlIHF1ZXJ5IHN0cmluZyBhcyBiZWluZyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcclxuICAgIC8vIHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2ludGVyYWN0L2Zvcm1zLmh0bWwjZm9ybS1jb250ZW50LXR5cGVcclxuXHJcbiAgICB2YXIgdCA9ICcnO1xyXG4gICAgdmFyIHVuaXF1ZSwga2V5LCBpLCBsZW5ndGg7XHJcbiAgICBmb3IgKGtleSBpbiBkYXRhKSB7XHJcbiAgICAgIGlmIChoYXNPd24uY2FsbChkYXRhLCBrZXkpICYmIGtleSkge1xyXG4gICAgICAgIGlmIChpc0FycmF5KGRhdGFba2V5XSkpIHtcclxuICAgICAgICAgIHVuaXF1ZSA9IHt9O1xyXG4gICAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gZGF0YVtrZXldLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhW2tleV1baV0gIT09IHVuZGVmaW5lZCAmJiB1bmlxdWVbZGF0YVtrZXldW2ldICsgJyddID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICB0ICs9ICcmJyArIFVSSS5idWlsZFF1ZXJ5UGFyYW1ldGVyKGtleSwgZGF0YVtrZXldW2ldLCBlc2NhcGVRdWVyeVNwYWNlKTtcclxuICAgICAgICAgICAgICBpZiAoZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzICE9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICB1bmlxdWVbZGF0YVtrZXldW2ldICsgJyddID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0ICs9ICcmJyArIFVSSS5idWlsZFF1ZXJ5UGFyYW1ldGVyKGtleSwgZGF0YVtrZXldLCBlc2NhcGVRdWVyeVNwYWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdC5zdWJzdHJpbmcoMSk7XHJcbiAgfTtcclxuICBVUkkuYnVpbGRRdWVyeVBhcmFtZXRlciA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBlc2NhcGVRdWVyeVNwYWNlKSB7XHJcbiAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2ludGVyYWN0L2Zvcm1zLmh0bWwjZm9ybS1jb250ZW50LXR5cGUgLS0gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXHJcbiAgICAvLyBkb24ndCBhcHBlbmQgXCI9XCIgZm9yIG51bGwgdmFsdWVzLCBhY2NvcmRpbmcgdG8gaHR0cDovL2R2Y3MudzMub3JnL2hnL3VybC9yYXctZmlsZS90aXAvT3ZlcnZpZXcuaHRtbCN1cmwtcGFyYW1ldGVyLXNlcmlhbGl6YXRpb25cclxuICAgIHJldHVybiBVUkkuZW5jb2RlUXVlcnkobmFtZSwgZXNjYXBlUXVlcnlTcGFjZSkgKyAodmFsdWUgIT09IG51bGwgPyAnPScgKyBVUkkuZW5jb2RlUXVlcnkodmFsdWUsIGVzY2FwZVF1ZXJ5U3BhY2UpIDogJycpO1xyXG4gIH07XHJcblxyXG4gIFVSSS5hZGRRdWVyeSA9IGZ1bmN0aW9uKGRhdGEsIG5hbWUsIHZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGZvciAodmFyIGtleSBpbiBuYW1lKSB7XHJcbiAgICAgICAgaWYgKGhhc093bi5jYWxsKG5hbWUsIGtleSkpIHtcclxuICAgICAgICAgIFVSSS5hZGRRdWVyeShkYXRhLCBrZXksIG5hbWVba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgICBpZiAoZGF0YVtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZGF0YVtuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YVtuYW1lXSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBkYXRhW25hbWVdID0gW2RhdGFbbmFtZV1dO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgdmFsdWUgPSBbdmFsdWVdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkYXRhW25hbWVdID0gKGRhdGFbbmFtZV0gfHwgW10pLmNvbmNhdCh2YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVUkkuYWRkUXVlcnkoKSBhY2NlcHRzIGFuIG9iamVjdCwgc3RyaW5nIGFzIHRoZSBuYW1lIHBhcmFtZXRlcicpO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgVVJJLnJlbW92ZVF1ZXJ5ID0gZnVuY3Rpb24oZGF0YSwgbmFtZSwgdmFsdWUpIHtcclxuICAgIHZhciBpLCBsZW5ndGgsIGtleTtcclxuXHJcbiAgICBpZiAoaXNBcnJheShuYW1lKSkge1xyXG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBuYW1lLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZGF0YVtuYW1lW2ldXSA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChnZXRUeXBlKG5hbWUpID09PSAnUmVnRXhwJykge1xyXG4gICAgICBmb3IgKGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgaWYgKG5hbWUudGVzdChrZXkpKSB7XHJcbiAgICAgICAgICBkYXRhW2tleV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBmb3IgKGtleSBpbiBuYW1lKSB7XHJcbiAgICAgICAgaWYgKGhhc093bi5jYWxsKG5hbWUsIGtleSkpIHtcclxuICAgICAgICAgIFVSSS5yZW1vdmVRdWVyeShkYXRhLCBrZXksIG5hbWVba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmIChnZXRUeXBlKHZhbHVlKSA9PT0gJ1JlZ0V4cCcpIHtcclxuICAgICAgICAgIGlmICghaXNBcnJheShkYXRhW25hbWVdKSAmJiB2YWx1ZS50ZXN0KGRhdGFbbmFtZV0pKSB7XHJcbiAgICAgICAgICAgIGRhdGFbbmFtZV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhW25hbWVdID0gZmlsdGVyQXJyYXlWYWx1ZXMoZGF0YVtuYW1lXSwgdmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YVtuYW1lXSA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgIGRhdGFbbmFtZV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGRhdGFbbmFtZV0pKSB7XHJcbiAgICAgICAgICBkYXRhW25hbWVdID0gZmlsdGVyQXJyYXlWYWx1ZXMoZGF0YVtuYW1lXSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkYXRhW25hbWVdID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVUkkucmVtb3ZlUXVlcnkoKSBhY2NlcHRzIGFuIG9iamVjdCwgc3RyaW5nLCBSZWdFeHAgYXMgdGhlIGZpcnN0IHBhcmFtZXRlcicpO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgVVJJLmhhc1F1ZXJ5ID0gZnVuY3Rpb24oZGF0YSwgbmFtZSwgdmFsdWUsIHdpdGhpbkFycmF5KSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGZvciAodmFyIGtleSBpbiBuYW1lKSB7XHJcbiAgICAgICAgaWYgKGhhc093bi5jYWxsKG5hbWUsIGtleSkpIHtcclxuICAgICAgICAgIGlmICghVVJJLmhhc1F1ZXJ5KGRhdGEsIGtleSwgbmFtZVtrZXldKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VSSS5oYXNRdWVyeSgpIGFjY2VwdHMgYW4gb2JqZWN0LCBzdHJpbmcgYXMgdGhlIG5hbWUgcGFyYW1ldGVyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoIChnZXRUeXBlKHZhbHVlKSkge1xyXG4gICAgICBjYXNlICdVbmRlZmluZWQnOlxyXG4gICAgICAgIC8vIHRydWUgaWYgZXhpc3RzIChidXQgbWF5IGJlIGVtcHR5KVxyXG4gICAgICAgIHJldHVybiBuYW1lIGluIGRhdGE7IC8vIGRhdGFbbmFtZV0gIT09IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIGNhc2UgJ0Jvb2xlYW4nOlxyXG4gICAgICAgIC8vIHRydWUgaWYgZXhpc3RzIGFuZCBub24tZW1wdHlcclxuICAgICAgICB2YXIgX2Jvb2x5ID0gQm9vbGVhbihpc0FycmF5KGRhdGFbbmFtZV0pID8gZGF0YVtuYW1lXS5sZW5ndGggOiBkYXRhW25hbWVdKTtcclxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IF9ib29seTtcclxuXHJcbiAgICAgIGNhc2UgJ0Z1bmN0aW9uJzpcclxuICAgICAgICAvLyBhbGxvdyBjb21wbGV4IGNvbXBhcmlzb25cclxuICAgICAgICByZXR1cm4gISF2YWx1ZShkYXRhW25hbWVdLCBuYW1lLCBkYXRhKTtcclxuXHJcbiAgICAgIGNhc2UgJ0FycmF5JzpcclxuICAgICAgICBpZiAoIWlzQXJyYXkoZGF0YVtuYW1lXSkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBvcCA9IHdpdGhpbkFycmF5ID8gYXJyYXlDb250YWlucyA6IGFycmF5c0VxdWFsO1xyXG4gICAgICAgIHJldHVybiBvcChkYXRhW25hbWVdLCB2YWx1ZSk7XHJcblxyXG4gICAgICBjYXNlICdSZWdFeHAnOlxyXG4gICAgICAgIGlmICghaXNBcnJheShkYXRhW25hbWVdKSkge1xyXG4gICAgICAgICAgcmV0dXJuIEJvb2xlYW4oZGF0YVtuYW1lXSAmJiBkYXRhW25hbWVdLm1hdGNoKHZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXdpdGhpbkFycmF5KSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXJyYXlDb250YWlucyhkYXRhW25hbWVdLCB2YWx1ZSk7XHJcblxyXG4gICAgICBjYXNlICdOdW1iZXInOlxyXG4gICAgICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXHJcbiAgICAgIGNhc2UgJ1N0cmluZyc6XHJcbiAgICAgICAgaWYgKCFpc0FycmF5KGRhdGFbbmFtZV0pKSB7XHJcbiAgICAgICAgICByZXR1cm4gZGF0YVtuYW1lXSA9PT0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXdpdGhpbkFycmF5KSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXJyYXlDb250YWlucyhkYXRhW25hbWVdLCB2YWx1ZSk7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VSSS5oYXNRdWVyeSgpIGFjY2VwdHMgdW5kZWZpbmVkLCBib29sZWFuLCBzdHJpbmcsIG51bWJlciwgUmVnRXhwLCBGdW5jdGlvbiBhcyB0aGUgdmFsdWUgcGFyYW1ldGVyJyk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcblxyXG4gIFVSSS5jb21tb25QYXRoID0gZnVuY3Rpb24ob25lLCB0d28pIHtcclxuICAgIHZhciBsZW5ndGggPSBNYXRoLm1pbihvbmUubGVuZ3RoLCB0d28ubGVuZ3RoKTtcclxuICAgIHZhciBwb3M7XHJcblxyXG4gICAgLy8gZmluZCBmaXJzdCBub24tbWF0Y2hpbmcgY2hhcmFjdGVyXHJcbiAgICBmb3IgKHBvcyA9IDA7IHBvcyA8IGxlbmd0aDsgcG9zKyspIHtcclxuICAgICAgaWYgKG9uZS5jaGFyQXQocG9zKSAhPT0gdHdvLmNoYXJBdChwb3MpKSB7XHJcbiAgICAgICAgcG9zLS07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocG9zIDwgMSkge1xyXG4gICAgICByZXR1cm4gb25lLmNoYXJBdCgwKSA9PT0gdHdvLmNoYXJBdCgwKSAmJiBvbmUuY2hhckF0KDApID09PSAnLycgPyAnLycgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICAvLyByZXZlcnQgdG8gbGFzdCAvXHJcbiAgICBpZiAob25lLmNoYXJBdChwb3MpICE9PSAnLycgfHwgdHdvLmNoYXJBdChwb3MpICE9PSAnLycpIHtcclxuICAgICAgcG9zID0gb25lLnN1YnN0cmluZygwLCBwb3MpLmxhc3RJbmRleE9mKCcvJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9uZS5zdWJzdHJpbmcoMCwgcG9zICsgMSk7XHJcbiAgfTtcclxuXHJcbiAgVVJJLndpdGhpblN0cmluZyA9IGZ1bmN0aW9uKHN0cmluZywgY2FsbGJhY2ssIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XHJcbiAgICB2YXIgX3N0YXJ0ID0gb3B0aW9ucy5zdGFydCB8fCBVUkkuZmluZFVyaS5zdGFydDtcclxuICAgIHZhciBfZW5kID0gb3B0aW9ucy5lbmQgfHwgVVJJLmZpbmRVcmkuZW5kO1xyXG4gICAgdmFyIF90cmltID0gb3B0aW9ucy50cmltIHx8IFVSSS5maW5kVXJpLnRyaW07XHJcbiAgICB2YXIgX2F0dHJpYnV0ZU9wZW4gPSAvW2EtejAtOS1dPVtcIiddPyQvaTtcclxuXHJcbiAgICBfc3RhcnQubGFzdEluZGV4ID0gMDtcclxuICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgIHZhciBtYXRjaCA9IF9zdGFydC5leGVjKHN0cmluZyk7XHJcbiAgICAgIGlmICghbWF0Y2gpIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHN0YXJ0ID0gbWF0Y2guaW5kZXg7XHJcbiAgICAgIGlmIChvcHRpb25zLmlnbm9yZUh0bWwpIHtcclxuICAgICAgICAvLyBhdHRyaWJ1dChlPVtcIiddPyQpXHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZU9wZW4gPSBzdHJpbmcuc2xpY2UoTWF0aC5tYXgoc3RhcnQgLSAzLCAwKSwgc3RhcnQpO1xyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVPcGVuICYmIF9hdHRyaWJ1dGVPcGVuLnRlc3QoYXR0cmlidXRlT3BlbikpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGVuZCA9IHN0YXJ0ICsgc3RyaW5nLnNsaWNlKHN0YXJ0KS5zZWFyY2goX2VuZCk7XHJcbiAgICAgIHZhciBzbGljZSA9IHN0cmluZy5zbGljZShzdGFydCwgZW5kKS5yZXBsYWNlKF90cmltLCAnJyk7XHJcbiAgICAgIGlmIChvcHRpb25zLmlnbm9yZSAmJiBvcHRpb25zLmlnbm9yZS50ZXN0KHNsaWNlKSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBlbmQgPSBzdGFydCArIHNsaWNlLmxlbmd0aDtcclxuICAgICAgdmFyIHJlc3VsdCA9IGNhbGxiYWNrKHNsaWNlLCBzdGFydCwgZW5kLCBzdHJpbmcpO1xyXG4gICAgICBzdHJpbmcgPSBzdHJpbmcuc2xpY2UoMCwgc3RhcnQpICsgcmVzdWx0ICsgc3RyaW5nLnNsaWNlKGVuZCk7XHJcbiAgICAgIF9zdGFydC5sYXN0SW5kZXggPSBzdGFydCArIHJlc3VsdC5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgX3N0YXJ0Lmxhc3RJbmRleCA9IDA7XHJcbiAgICByZXR1cm4gc3RyaW5nO1xyXG4gIH07XHJcblxyXG4gIFVSSS5lbnN1cmVWYWxpZEhvc3RuYW1lID0gZnVuY3Rpb24odikge1xyXG4gICAgLy8gVGhlb3JldGljYWxseSBVUklzIGFsbG93IHBlcmNlbnQtZW5jb2RpbmcgaW4gSG9zdG5hbWVzIChhY2NvcmRpbmcgdG8gUkZDIDM5ODYpXHJcbiAgICAvLyB0aGV5IGFyZSBub3QgcGFydCBvZiBETlMgYW5kIHRoZXJlZm9yZSBpZ25vcmVkIGJ5IFVSSS5qc1xyXG5cclxuICAgIGlmICh2Lm1hdGNoKFVSSS5pbnZhbGlkX2hvc3RuYW1lX2NoYXJhY3RlcnMpKSB7XHJcbiAgICAgIC8vIHRlc3QgcHVueWNvZGVcclxuICAgICAgaWYgKCFwdW55Y29kZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lIFwiJyArIHYgKyAnXCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLV0gYW5kIFB1bnljb2RlLmpzIGlzIG5vdCBhdmFpbGFibGUnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHB1bnljb2RlLnRvQVNDSUkodikubWF0Y2goVVJJLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSBcIicgKyB2ICsgJ1wiIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li1dJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLyBub0NvbmZsaWN0XHJcbiAgVVJJLm5vQ29uZmxpY3QgPSBmdW5jdGlvbihyZW1vdmVBbGwpIHtcclxuICAgIGlmIChyZW1vdmVBbGwpIHtcclxuICAgICAgdmFyIHVuY29uZmxpY3RlZCA9IHtcclxuICAgICAgICBVUkk6IHRoaXMubm9Db25mbGljdCgpXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAocm9vdC5VUklUZW1wbGF0ZSAmJiB0eXBlb2Ygcm9vdC5VUklUZW1wbGF0ZS5ub0NvbmZsaWN0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdW5jb25mbGljdGVkLlVSSVRlbXBsYXRlID0gcm9vdC5VUklUZW1wbGF0ZS5ub0NvbmZsaWN0KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChyb290LklQdjYgJiYgdHlwZW9mIHJvb3QuSVB2Ni5ub0NvbmZsaWN0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdW5jb25mbGljdGVkLklQdjYgPSByb290LklQdjYubm9Db25mbGljdCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocm9vdC5TZWNvbmRMZXZlbERvbWFpbnMgJiYgdHlwZW9mIHJvb3QuU2Vjb25kTGV2ZWxEb21haW5zLm5vQ29uZmxpY3QgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB1bmNvbmZsaWN0ZWQuU2Vjb25kTGV2ZWxEb21haW5zID0gcm9vdC5TZWNvbmRMZXZlbERvbWFpbnMubm9Db25mbGljdCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdW5jb25mbGljdGVkO1xyXG4gICAgfSBlbHNlIGlmIChyb290LlVSSSA9PT0gdGhpcykge1xyXG4gICAgICByb290LlVSSSA9IF9VUkk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuXHJcbiAgcC5idWlsZCA9IGZ1bmN0aW9uKGRlZmVyQnVpbGQpIHtcclxuICAgIGlmIChkZWZlckJ1aWxkID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuX2RlZmVycmVkX2J1aWxkID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoZGVmZXJCdWlsZCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX2RlZmVycmVkX2J1aWxkKSB7XHJcbiAgICAgIHRoaXMuX3N0cmluZyA9IFVSSS5idWlsZCh0aGlzLl9wYXJ0cyk7XHJcbiAgICAgIHRoaXMuX2RlZmVycmVkX2J1aWxkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuXHJcbiAgcC5jbG9uZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIG5ldyBVUkkodGhpcyk7XHJcbiAgfTtcclxuXHJcbiAgcC52YWx1ZU9mID0gcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYnVpbGQoZmFsc2UpLl9zdHJpbmc7XHJcbiAgfTtcclxuXHJcblxyXG4gIGZ1bmN0aW9uIGdlbmVyYXRlU2ltcGxlQWNjZXNzb3IoX3BhcnQpe1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XHJcbiAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcGFydHNbX3BhcnRdIHx8ICcnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3BhcnRzW19wYXJ0XSA9IHYgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLmJ1aWxkKCFidWlsZCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZW5lcmF0ZVByZWZpeEFjY2Vzc29yKF9wYXJ0LCBfa2V5KXtcclxuICAgIHJldHVybiBmdW5jdGlvbih2LCBidWlsZCkge1xyXG4gICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnRzW19wYXJ0XSB8fCAnJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdiA9IHYgKyAnJztcclxuICAgICAgICAgIGlmICh2LmNoYXJBdCgwKSA9PT0gX2tleSkge1xyXG4gICAgICAgICAgICB2ID0gdi5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wYXJ0c1tfcGFydF0gPSB2O1xyXG4gICAgICAgIHRoaXMuYnVpbGQoIWJ1aWxkKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHAucHJvdG9jb2wgPSBnZW5lcmF0ZVNpbXBsZUFjY2Vzc29yKCdwcm90b2NvbCcpO1xyXG4gIHAudXNlcm5hbWUgPSBnZW5lcmF0ZVNpbXBsZUFjY2Vzc29yKCd1c2VybmFtZScpO1xyXG4gIHAucGFzc3dvcmQgPSBnZW5lcmF0ZVNpbXBsZUFjY2Vzc29yKCdwYXNzd29yZCcpO1xyXG4gIHAuaG9zdG5hbWUgPSBnZW5lcmF0ZVNpbXBsZUFjY2Vzc29yKCdob3N0bmFtZScpO1xyXG4gIHAucG9ydCA9IGdlbmVyYXRlU2ltcGxlQWNjZXNzb3IoJ3BvcnQnKTtcclxuICBwLnF1ZXJ5ID0gZ2VuZXJhdGVQcmVmaXhBY2Nlc3NvcigncXVlcnknLCAnPycpO1xyXG4gIHAuZnJhZ21lbnQgPSBnZW5lcmF0ZVByZWZpeEFjY2Vzc29yKCdmcmFnbWVudCcsICcjJyk7XHJcblxyXG4gIHAuc2VhcmNoID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcclxuICAgIHZhciB0ID0gdGhpcy5xdWVyeSh2LCBidWlsZCk7XHJcbiAgICByZXR1cm4gdHlwZW9mIHQgPT09ICdzdHJpbmcnICYmIHQubGVuZ3RoID8gKCc/JyArIHQpIDogdDtcclxuICB9O1xyXG4gIHAuaGFzaCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XHJcbiAgICB2YXIgdCA9IHRoaXMuZnJhZ21lbnQodiwgYnVpbGQpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiB0ID09PSAnc3RyaW5nJyAmJiB0Lmxlbmd0aCA/ICgnIycgKyB0KSA6IHQ7XHJcbiAgfTtcclxuXHJcbiAgcC5wYXRobmFtZSA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XHJcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IHRydWUpIHtcclxuICAgICAgdmFyIHJlcyA9IHRoaXMuX3BhcnRzLnBhdGggfHwgKHRoaXMuX3BhcnRzLmhvc3RuYW1lID8gJy8nIDogJycpO1xyXG4gICAgICByZXR1cm4gdiA/ICh0aGlzLl9wYXJ0cy51cm4gPyBVUkkuZGVjb2RlVXJuUGF0aCA6IFVSSS5kZWNvZGVQYXRoKShyZXMpIDogcmVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX3BhcnRzLnVybikge1xyXG4gICAgICAgIHRoaXMuX3BhcnRzLnBhdGggPSB2ID8gVVJJLnJlY29kZVVyblBhdGgodikgOiAnJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9wYXJ0cy5wYXRoID0gdiA/IFVSSS5yZWNvZGVQYXRoKHYpIDogJy8nO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYnVpbGQoIWJ1aWxkKTtcclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgfTtcclxuICBwLnBhdGggPSBwLnBhdGhuYW1lO1xyXG4gIHAuaHJlZiA9IGZ1bmN0aW9uKGhyZWYsIGJ1aWxkKSB7XHJcbiAgICB2YXIga2V5O1xyXG5cclxuICAgIGlmIChocmVmID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9zdHJpbmcgPSAnJztcclxuICAgIHRoaXMuX3BhcnRzID0gVVJJLl9wYXJ0cygpO1xyXG5cclxuICAgIHZhciBfVVJJID0gaHJlZiBpbnN0YW5jZW9mIFVSSTtcclxuICAgIHZhciBfb2JqZWN0ID0gdHlwZW9mIGhyZWYgPT09ICdvYmplY3QnICYmIChocmVmLmhvc3RuYW1lIHx8IGhyZWYucGF0aCB8fCBocmVmLnBhdGhuYW1lKTtcclxuICAgIGlmIChocmVmLm5vZGVOYW1lKSB7XHJcbiAgICAgIHZhciBhdHRyaWJ1dGUgPSBVUkkuZ2V0RG9tQXR0cmlidXRlKGhyZWYpO1xyXG4gICAgICBocmVmID0gaHJlZlthdHRyaWJ1dGVdIHx8ICcnO1xyXG4gICAgICBfb2JqZWN0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gd2luZG93LmxvY2F0aW9uIGlzIHJlcG9ydGVkIHRvIGJlIGFuIG9iamVjdCwgYnV0IGl0J3Mgbm90IHRoZSBzb3J0XHJcbiAgICAvLyBvZiBvYmplY3Qgd2UncmUgbG9va2luZyBmb3I6XHJcbiAgICAvLyAqIGxvY2F0aW9uLnByb3RvY29sIGVuZHMgd2l0aCBhIGNvbG9uXHJcbiAgICAvLyAqIGxvY2F0aW9uLnF1ZXJ5ICE9IG9iamVjdC5zZWFyY2hcclxuICAgIC8vICogbG9jYXRpb24uaGFzaCAhPSBvYmplY3QuZnJhZ21lbnRcclxuICAgIC8vIHNpbXBseSBzZXJpYWxpemluZyB0aGUgdW5rbm93biBvYmplY3Qgc2hvdWxkIGRvIHRoZSB0cmlja1xyXG4gICAgLy8gKGZvciBsb2NhdGlvbiwgbm90IGZvciBldmVyeXRoaW5nLi4uKVxyXG4gICAgaWYgKCFfVVJJICYmIF9vYmplY3QgJiYgaHJlZi5wYXRobmFtZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGhyZWYgPSBocmVmLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBocmVmID09PSAnc3RyaW5nJyB8fCBocmVmIGluc3RhbmNlb2YgU3RyaW5nKSB7XHJcbiAgICAgIHRoaXMuX3BhcnRzID0gVVJJLnBhcnNlKFN0cmluZyhocmVmKSwgdGhpcy5fcGFydHMpO1xyXG4gICAgfSBlbHNlIGlmIChfVVJJIHx8IF9vYmplY3QpIHtcclxuICAgICAgdmFyIHNyYyA9IF9VUkkgPyBocmVmLl9wYXJ0cyA6IGhyZWY7XHJcbiAgICAgIGZvciAoa2V5IGluIHNyYykge1xyXG4gICAgICAgIGlmIChoYXNPd24uY2FsbCh0aGlzLl9wYXJ0cywga2V5KSkge1xyXG4gICAgICAgICAgdGhpcy5fcGFydHNba2V5XSA9IHNyY1trZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBpbnB1dCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnVpbGQoIWJ1aWxkKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIC8vIGlkZW50aWZpY2F0aW9uIGFjY2Vzc29yc1xyXG4gIHAuaXMgPSBmdW5jdGlvbih3aGF0KSB7XHJcbiAgICB2YXIgaXAgPSBmYWxzZTtcclxuICAgIHZhciBpcDQgPSBmYWxzZTtcclxuICAgIHZhciBpcDYgPSBmYWxzZTtcclxuICAgIHZhciBuYW1lID0gZmFsc2U7XHJcbiAgICB2YXIgc2xkID0gZmFsc2U7XHJcbiAgICB2YXIgaWRuID0gZmFsc2U7XHJcbiAgICB2YXIgcHVueWNvZGUgPSBmYWxzZTtcclxuICAgIHZhciByZWxhdGl2ZSA9ICF0aGlzLl9wYXJ0cy51cm47XHJcblxyXG4gICAgaWYgKHRoaXMuX3BhcnRzLmhvc3RuYW1lKSB7XHJcbiAgICAgIHJlbGF0aXZlID0gZmFsc2U7XHJcbiAgICAgIGlwNCA9IFVSSS5pcDRfZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcclxuICAgICAgaXA2ID0gVVJJLmlwNl9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpO1xyXG4gICAgICBpcCA9IGlwNCB8fCBpcDY7XHJcbiAgICAgIG5hbWUgPSAhaXA7XHJcbiAgICAgIHNsZCA9IG5hbWUgJiYgU0xEICYmIFNMRC5oYXModGhpcy5fcGFydHMuaG9zdG5hbWUpO1xyXG4gICAgICBpZG4gPSBuYW1lICYmIFVSSS5pZG5fZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcclxuICAgICAgcHVueWNvZGUgPSBuYW1lICYmIFVSSS5wdW55Y29kZV9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAod2hhdC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgIGNhc2UgJ3JlbGF0aXZlJzpcclxuICAgICAgICByZXR1cm4gcmVsYXRpdmU7XHJcblxyXG4gICAgICBjYXNlICdhYnNvbHV0ZSc6XHJcbiAgICAgICAgcmV0dXJuICFyZWxhdGl2ZTtcclxuXHJcbiAgICAgIC8vIGhvc3RuYW1lIGlkZW50aWZpY2F0aW9uXHJcbiAgICAgIGNhc2UgJ2RvbWFpbic6XHJcbiAgICAgIGNhc2UgJ25hbWUnOlxyXG4gICAgICAgIHJldHVybiBuYW1lO1xyXG5cclxuICAgICAgY2FzZSAnc2xkJzpcclxuICAgICAgICByZXR1cm4gc2xkO1xyXG5cclxuICAgICAgY2FzZSAnaXAnOlxyXG4gICAgICAgIHJldHVybiBpcDtcclxuXHJcbiAgICAgIGNhc2UgJ2lwNCc6XHJcbiAgICAgIGNhc2UgJ2lwdjQnOlxyXG4gICAgICBjYXNlICdpbmV0NCc6XHJcbiAgICAgICAgcmV0dXJuIGlwNDtcclxuXHJcbiAgICAgIGNhc2UgJ2lwNic6XHJcbiAgICAgIGNhc2UgJ2lwdjYnOlxyXG4gICAgICBjYXNlICdpbmV0Nic6XHJcbiAgICAgICAgcmV0dXJuIGlwNjtcclxuXHJcbiAgICAgIGNhc2UgJ2lkbic6XHJcbiAgICAgICAgcmV0dXJuIGlkbjtcclxuXHJcbiAgICAgIGNhc2UgJ3VybCc6XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLl9wYXJ0cy51cm47XHJcblxyXG4gICAgICBjYXNlICd1cm4nOlxyXG4gICAgICAgIHJldHVybiAhIXRoaXMuX3BhcnRzLnVybjtcclxuXHJcbiAgICAgIGNhc2UgJ3B1bnljb2RlJzpcclxuICAgICAgICByZXR1cm4gcHVueWNvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfTtcclxuXHJcbiAgLy8gY29tcG9uZW50IHNwZWNpZmljIGlucHV0IHZhbGlkYXRpb25cclxuICB2YXIgX3Byb3RvY29sID0gcC5wcm90b2NvbDtcclxuICB2YXIgX3BvcnQgPSBwLnBvcnQ7XHJcbiAgdmFyIF9ob3N0bmFtZSA9IHAuaG9zdG5hbWU7XHJcblxyXG4gIHAucHJvdG9jb2wgPSBmdW5jdGlvbih2LCBidWlsZCkge1xyXG4gICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIC8vIGFjY2VwdCB0cmFpbGluZyA6Ly9cclxuICAgICAgICB2ID0gdi5yZXBsYWNlKC86KFxcL1xcLyk/JC8sICcnKTtcclxuXHJcbiAgICAgICAgaWYgKCF2Lm1hdGNoKFVSSS5wcm90b2NvbF9leHByZXNzaW9uKSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdG9jb2wgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4rLV0gb3IgZG9lc25cXCd0IHN0YXJ0IHdpdGggW0EtWl0nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBfcHJvdG9jb2wuY2FsbCh0aGlzLCB2LCBidWlsZCk7XHJcbiAgfTtcclxuICBwLnNjaGVtZSA9IHAucHJvdG9jb2w7XHJcbiAgcC5wb3J0ID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcclxuICAgIGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcclxuICAgICAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh2ID09PSAwKSB7XHJcbiAgICAgICAgdiA9IG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgdiArPSAnJztcclxuICAgICAgICBpZiAodi5jaGFyQXQoMCkgPT09ICc6Jykge1xyXG4gICAgICAgICAgdiA9IHYuc3Vic3RyaW5nKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHYubWF0Y2goL1teMC05XS8pKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3J0IFwiJyArIHYgKyAnXCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFswLTldJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX3BvcnQuY2FsbCh0aGlzLCB2LCBidWlsZCk7XHJcbiAgfTtcclxuICBwLmhvc3RuYW1lID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcclxuICAgIGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcclxuICAgICAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHZhciB4ID0ge307XHJcbiAgICAgIHZhciByZXMgPSBVUkkucGFyc2VIb3N0KHYsIHgpO1xyXG4gICAgICBpZiAocmVzICE9PSAnLycpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSBcIicgKyB2ICsgJ1wiIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li1dJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHYgPSB4Lmhvc3RuYW1lO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9ob3N0bmFtZS5jYWxsKHRoaXMsIHYsIGJ1aWxkKTtcclxuICB9O1xyXG5cclxuICAvLyBjb21wb3VuZCBhY2Nlc3NvcnNcclxuICBwLmhvc3QgPSBmdW5jdGlvbih2LCBidWlsZCkge1xyXG4gICAgaWYgKHRoaXMuX3BhcnRzLnVybikge1xyXG4gICAgICByZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lID8gVVJJLmJ1aWxkSG9zdCh0aGlzLl9wYXJ0cykgOiAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhciByZXMgPSBVUkkucGFyc2VIb3N0KHYsIHRoaXMuX3BhcnRzKTtcclxuICAgICAgaWYgKHJlcyAhPT0gJy8nKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmJ1aWxkKCFidWlsZCk7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgcC5hdXRob3JpdHkgPSBmdW5jdGlvbih2LCBidWlsZCkge1xyXG4gICAgaWYgKHRoaXMuX3BhcnRzLnVybikge1xyXG4gICAgICByZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lID8gVVJJLmJ1aWxkQXV0aG9yaXR5KHRoaXMuX3BhcnRzKSA6ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFyIHJlcyA9IFVSSS5wYXJzZUF1dGhvcml0eSh2LCB0aGlzLl9wYXJ0cyk7XHJcbiAgICAgIGlmIChyZXMgIT09ICcvJykge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lIFwiJyArIHYgKyAnXCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLV0nKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICB9O1xyXG4gIHAudXNlcmluZm8gPSBmdW5jdGlvbih2LCBidWlsZCkge1xyXG4gICAgaWYgKHRoaXMuX3BhcnRzLnVybikge1xyXG4gICAgICByZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLl9wYXJ0cy51c2VybmFtZSkge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHQgPSBVUkkuYnVpbGRVc2VyaW5mbyh0aGlzLl9wYXJ0cyk7XHJcbiAgICAgIHJldHVybiB0LnN1YnN0cmluZygwLCB0Lmxlbmd0aCAtMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodlt2Lmxlbmd0aC0xXSAhPT0gJ0AnKSB7XHJcbiAgICAgICAgdiArPSAnQCc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFVSSS5wYXJzZVVzZXJpbmZvKHYsIHRoaXMuX3BhcnRzKTtcclxuICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICB9O1xyXG4gIHAucmVzb3VyY2UgPSBmdW5jdGlvbih2LCBidWlsZCkge1xyXG4gICAgdmFyIHBhcnRzO1xyXG5cclxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGF0aCgpICsgdGhpcy5zZWFyY2goKSArIHRoaXMuaGFzaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnRzID0gVVJJLnBhcnNlKHYpO1xyXG4gICAgdGhpcy5fcGFydHMucGF0aCA9IHBhcnRzLnBhdGg7XHJcbiAgICB0aGlzLl9wYXJ0cy5xdWVyeSA9IHBhcnRzLnF1ZXJ5O1xyXG4gICAgdGhpcy5fcGFydHMuZnJhZ21lbnQgPSBwYXJ0cy5mcmFnbWVudDtcclxuICAgIHRoaXMuYnVpbGQoIWJ1aWxkKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIC8vIGZyYWN0aW9uIGFjY2Vzc29yc1xyXG4gIHAuc3ViZG9tYWluID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcclxuICAgIGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcclxuICAgICAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb252ZW5pZW5jZSwgcmV0dXJuIFwid3d3XCIgZnJvbSBcInd3dy5leGFtcGxlLm9yZ1wiXHJcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICghdGhpcy5fcGFydHMuaG9zdG5hbWUgfHwgdGhpcy5pcygnSVAnKSkge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gZ3JhYiBkb21haW4gYW5kIGFkZCBhbm90aGVyIHNlZ21lbnRcclxuICAgICAgdmFyIGVuZCA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLmxlbmd0aCAtIHRoaXMuZG9tYWluKCkubGVuZ3RoIC0gMTtcclxuICAgICAgcmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZygwLCBlbmQpIHx8ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFyIGUgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5sZW5ndGggLSB0aGlzLmRvbWFpbigpLmxlbmd0aDtcclxuICAgICAgdmFyIHN1YiA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZygwLCBlKTtcclxuICAgICAgdmFyIHJlcGxhY2UgPSBuZXcgUmVnRXhwKCdeJyArIGVzY2FwZVJlZ0V4KHN1YikpO1xyXG5cclxuICAgICAgaWYgKHYgJiYgdi5jaGFyQXQodi5sZW5ndGggLSAxKSAhPT0gJy4nKSB7XHJcbiAgICAgICAgdiArPSAnLic7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgVVJJLmVuc3VyZVZhbGlkSG9zdG5hbWUodik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gdGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZShyZXBsYWNlLCB2KTtcclxuICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICB9O1xyXG4gIHAuZG9tYWluID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcclxuICAgIGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcclxuICAgICAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHYgPT09ICdib29sZWFuJykge1xyXG4gICAgICBidWlsZCA9IHY7XHJcbiAgICAgIHYgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY29udmVuaWVuY2UsIHJldHVybiBcImV4YW1wbGUub3JnXCIgZnJvbSBcInd3dy5leGFtcGxlLm9yZ1wiXHJcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICghdGhpcy5fcGFydHMuaG9zdG5hbWUgfHwgdGhpcy5pcygnSVAnKSkge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gaWYgaG9zdG5hbWUgY29uc2lzdHMgb2YgMSBvciAyIHNlZ21lbnRzLCBpdCBtdXN0IGJlIHRoZSBkb21haW5cclxuICAgICAgdmFyIHQgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5tYXRjaCgvXFwuL2cpO1xyXG4gICAgICBpZiAodCAmJiB0Lmxlbmd0aCA8IDIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGdyYWIgdGxkIGFuZCBhZGQgYW5vdGhlciBzZWdtZW50XHJcbiAgICAgIHZhciBlbmQgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5sZW5ndGggLSB0aGlzLnRsZChidWlsZCkubGVuZ3RoIC0gMTtcclxuICAgICAgZW5kID0gdGhpcy5fcGFydHMuaG9zdG5hbWUubGFzdEluZGV4T2YoJy4nLCBlbmQgLTEpICsgMTtcclxuICAgICAgcmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZyhlbmQpIHx8ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF2KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2Fubm90IHNldCBkb21haW4gZW1wdHknKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgVVJJLmVuc3VyZVZhbGlkSG9zdG5hbWUodik7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuX3BhcnRzLmhvc3RuYW1lIHx8IHRoaXMuaXMoJ0lQJykpIHtcclxuICAgICAgICB0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHY7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIHJlcGxhY2UgPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4KHRoaXMuZG9tYWluKCkpICsgJyQnKTtcclxuICAgICAgICB0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UocmVwbGFjZSwgdik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuYnVpbGQoIWJ1aWxkKTtcclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgfTtcclxuICBwLnRsZCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XHJcbiAgICBpZiAodGhpcy5fcGFydHMudXJuKSB7XHJcbiAgICAgIHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiB2ID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgYnVpbGQgPSB2O1xyXG4gICAgICB2ID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHJldHVybiBcIm9yZ1wiIGZyb20gXCJ3d3cuZXhhbXBsZS5vcmdcIlxyXG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAoIXRoaXMuX3BhcnRzLmhvc3RuYW1lIHx8IHRoaXMuaXMoJ0lQJykpIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBwb3MgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5sYXN0SW5kZXhPZignLicpO1xyXG4gICAgICB2YXIgdGxkID0gdGhpcy5fcGFydHMuaG9zdG5hbWUuc3Vic3RyaW5nKHBvcyArIDEpO1xyXG5cclxuICAgICAgaWYgKGJ1aWxkICE9PSB0cnVlICYmIFNMRCAmJiBTTEQubGlzdFt0bGQudG9Mb3dlckNhc2UoKV0pIHtcclxuICAgICAgICByZXR1cm4gU0xELmdldCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkgfHwgdGxkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGxkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFyIHJlcGxhY2U7XHJcblxyXG4gICAgICBpZiAoIXYpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjYW5ub3Qgc2V0IFRMRCBlbXB0eScpO1xyXG4gICAgICB9IGVsc2UgaWYgKHYubWF0Y2goL1teYS16QS1aMC05LV0vKSkge1xyXG4gICAgICAgIGlmIChTTEQgJiYgU0xELmlzKHYpKSB7XHJcbiAgICAgICAgICByZXBsYWNlID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeCh0aGlzLnRsZCgpKSArICckJyk7XHJcbiAgICAgICAgICB0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UocmVwbGFjZSwgdik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RMRCBcIicgKyB2ICsgJ1wiIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05XScpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICghdGhpcy5fcGFydHMuaG9zdG5hbWUgfHwgdGhpcy5pcygnSVAnKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignY2Fubm90IHNldCBUTEQgb24gbm9uLWRvbWFpbiBob3N0Jyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVwbGFjZSA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXgodGhpcy50bGQoKSkgKyAnJCcpO1xyXG4gICAgICAgIHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gdGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZShyZXBsYWNlLCB2KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICB9O1xyXG4gIHAuZGlyZWN0b3J5ID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcclxuICAgIGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcclxuICAgICAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IHRydWUpIHtcclxuICAgICAgaWYgKCF0aGlzLl9wYXJ0cy5wYXRoICYmICF0aGlzLl9wYXJ0cy5ob3N0bmFtZSkge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuX3BhcnRzLnBhdGggPT09ICcvJykge1xyXG4gICAgICAgIHJldHVybiAnLyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBlbmQgPSB0aGlzLl9wYXJ0cy5wYXRoLmxlbmd0aCAtIHRoaXMuZmlsZW5hbWUoKS5sZW5ndGggLSAxO1xyXG4gICAgICB2YXIgcmVzID0gdGhpcy5fcGFydHMucGF0aC5zdWJzdHJpbmcoMCwgZW5kKSB8fCAodGhpcy5fcGFydHMuaG9zdG5hbWUgPyAnLycgOiAnJyk7XHJcblxyXG4gICAgICByZXR1cm4gdiA/IFVSSS5kZWNvZGVQYXRoKHJlcykgOiByZXM7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFyIGUgPSB0aGlzLl9wYXJ0cy5wYXRoLmxlbmd0aCAtIHRoaXMuZmlsZW5hbWUoKS5sZW5ndGg7XHJcbiAgICAgIHZhciBkaXJlY3RvcnkgPSB0aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZygwLCBlKTtcclxuICAgICAgdmFyIHJlcGxhY2UgPSBuZXcgUmVnRXhwKCdeJyArIGVzY2FwZVJlZ0V4KGRpcmVjdG9yeSkpO1xyXG5cclxuICAgICAgLy8gZnVsbHkgcXVhbGlmaWVyIGRpcmVjdG9yaWVzIGJlZ2luIHdpdGggYSBzbGFzaFxyXG4gICAgICBpZiAoIXRoaXMuaXMoJ3JlbGF0aXZlJykpIHtcclxuICAgICAgICBpZiAoIXYpIHtcclxuICAgICAgICAgIHYgPSAnLyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodi5jaGFyQXQoMCkgIT09ICcvJykge1xyXG4gICAgICAgICAgdiA9ICcvJyArIHY7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBkaXJlY3RvcmllcyBhbHdheXMgZW5kIHdpdGggYSBzbGFzaFxyXG4gICAgICBpZiAodiAmJiB2LmNoYXJBdCh2Lmxlbmd0aCAtIDEpICE9PSAnLycpIHtcclxuICAgICAgICB2ICs9ICcvJztcclxuICAgICAgfVxyXG5cclxuICAgICAgdiA9IFVSSS5yZWNvZGVQYXRoKHYpO1xyXG4gICAgICB0aGlzLl9wYXJ0cy5wYXRoID0gdGhpcy5fcGFydHMucGF0aC5yZXBsYWNlKHJlcGxhY2UsIHYpO1xyXG4gICAgICB0aGlzLmJ1aWxkKCFidWlsZCk7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgcC5maWxlbmFtZSA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XHJcbiAgICBpZiAodGhpcy5fcGFydHMudXJuKSB7XHJcbiAgICAgIHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSB0cnVlKSB7XHJcbiAgICAgIGlmICghdGhpcy5fcGFydHMucGF0aCB8fCB0aGlzLl9wYXJ0cy5wYXRoID09PSAnLycpIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBwb3MgPSB0aGlzLl9wYXJ0cy5wYXRoLmxhc3RJbmRleE9mKCcvJyk7XHJcbiAgICAgIHZhciByZXMgPSB0aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZyhwb3MrMSk7XHJcblxyXG4gICAgICByZXR1cm4gdiA/IFVSSS5kZWNvZGVQYXRoU2VnbWVudChyZXMpIDogcmVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFyIG11dGF0ZWREaXJlY3RvcnkgPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmICh2LmNoYXJBdCgwKSA9PT0gJy8nKSB7XHJcbiAgICAgICAgdiA9IHYuc3Vic3RyaW5nKDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodi5tYXRjaCgvXFwuP1xcLy8pKSB7XHJcbiAgICAgICAgbXV0YXRlZERpcmVjdG9yeSA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciByZXBsYWNlID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeCh0aGlzLmZpbGVuYW1lKCkpICsgJyQnKTtcclxuICAgICAgdiA9IFVSSS5yZWNvZGVQYXRoKHYpO1xyXG4gICAgICB0aGlzLl9wYXJ0cy5wYXRoID0gdGhpcy5fcGFydHMucGF0aC5yZXBsYWNlKHJlcGxhY2UsIHYpO1xyXG5cclxuICAgICAgaWYgKG11dGF0ZWREaXJlY3RvcnkpIHtcclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZVBhdGgoYnVpbGQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYnVpbGQoIWJ1aWxkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgfTtcclxuICBwLnN1ZmZpeCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XHJcbiAgICBpZiAodGhpcy5fcGFydHMudXJuKSB7XHJcbiAgICAgIHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSB0cnVlKSB7XHJcbiAgICAgIGlmICghdGhpcy5fcGFydHMucGF0aCB8fCB0aGlzLl9wYXJ0cy5wYXRoID09PSAnLycpIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBmaWxlbmFtZSA9IHRoaXMuZmlsZW5hbWUoKTtcclxuICAgICAgdmFyIHBvcyA9IGZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICAgIHZhciBzLCByZXM7XHJcblxyXG4gICAgICBpZiAocG9zID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc3VmZml4IG1heSBvbmx5IGNvbnRhaW4gYWxudW0gY2hhcmFjdGVycyAoeXVwLCBJIG1hZGUgdGhpcyB1cC4pXHJcbiAgICAgIHMgPSBmaWxlbmFtZS5zdWJzdHJpbmcocG9zKzEpO1xyXG4gICAgICByZXMgPSAoL15bYS16MC05JV0rJC9pKS50ZXN0KHMpID8gcyA6ICcnO1xyXG4gICAgICByZXR1cm4gdiA/IFVSSS5kZWNvZGVQYXRoU2VnbWVudChyZXMpIDogcmVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHYuY2hhckF0KDApID09PSAnLicpIHtcclxuICAgICAgICB2ID0gdi5zdWJzdHJpbmcoMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBzdWZmaXggPSB0aGlzLnN1ZmZpeCgpO1xyXG4gICAgICB2YXIgcmVwbGFjZTtcclxuXHJcbiAgICAgIGlmICghc3VmZml4KSB7XHJcbiAgICAgICAgaWYgKCF2KSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3BhcnRzLnBhdGggKz0gJy4nICsgVVJJLnJlY29kZVBhdGgodik7XHJcbiAgICAgIH0gZWxzZSBpZiAoIXYpIHtcclxuICAgICAgICByZXBsYWNlID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeCgnLicgKyBzdWZmaXgpICsgJyQnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXBsYWNlID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeChzdWZmaXgpICsgJyQnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJlcGxhY2UpIHtcclxuICAgICAgICB2ID0gVVJJLnJlY29kZVBhdGgodik7XHJcbiAgICAgICAgdGhpcy5fcGFydHMucGF0aCA9IHRoaXMuX3BhcnRzLnBhdGgucmVwbGFjZShyZXBsYWNlLCB2KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICB9O1xyXG4gIHAuc2VnbWVudCA9IGZ1bmN0aW9uKHNlZ21lbnQsIHYsIGJ1aWxkKSB7XHJcbiAgICB2YXIgc2VwYXJhdG9yID0gdGhpcy5fcGFydHMudXJuID8gJzonIDogJy8nO1xyXG4gICAgdmFyIHBhdGggPSB0aGlzLnBhdGgoKTtcclxuICAgIHZhciBhYnNvbHV0ZSA9IHBhdGguc3Vic3RyaW5nKDAsIDEpID09PSAnLyc7XHJcbiAgICB2YXIgc2VnbWVudHMgPSBwYXRoLnNwbGl0KHNlcGFyYXRvcik7XHJcblxyXG4gICAgaWYgKHNlZ21lbnQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc2VnbWVudCAhPT0gJ251bWJlcicpIHtcclxuICAgICAgYnVpbGQgPSB2O1xyXG4gICAgICB2ID0gc2VnbWVudDtcclxuICAgICAgc2VnbWVudCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VnbWVudCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzZWdtZW50ICE9PSAnbnVtYmVyJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JhZCBzZWdtZW50IFwiJyArIHNlZ21lbnQgKyAnXCIsIG11c3QgYmUgMC1iYXNlZCBpbnRlZ2VyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFic29sdXRlKSB7XHJcbiAgICAgIHNlZ21lbnRzLnNoaWZ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlZ21lbnQgPCAwKSB7XHJcbiAgICAgIC8vIGFsbG93IG5lZ2F0aXZlIGluZGV4ZXMgdG8gYWRkcmVzcyBmcm9tIHRoZSBlbmRcclxuICAgICAgc2VnbWVudCA9IE1hdGgubWF4KHNlZ21lbnRzLmxlbmd0aCArIHNlZ21lbnQsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgLypqc2hpbnQgbGF4YnJlYWs6IHRydWUgKi9cclxuICAgICAgcmV0dXJuIHNlZ21lbnQgPT09IHVuZGVmaW5lZFxyXG4gICAgICAgID8gc2VnbWVudHNcclxuICAgICAgICA6IHNlZ21lbnRzW3NlZ21lbnRdO1xyXG4gICAgICAvKmpzaGludCBsYXhicmVhazogZmFsc2UgKi9cclxuICAgIH0gZWxzZSBpZiAoc2VnbWVudCA9PT0gbnVsbCB8fCBzZWdtZW50c1tzZWdtZW50XSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChpc0FycmF5KHYpKSB7XHJcbiAgICAgICAgc2VnbWVudHMgPSBbXTtcclxuICAgICAgICAvLyBjb2xsYXBzZSBlbXB0eSBlbGVtZW50cyB3aXRoaW4gYXJyYXlcclxuICAgICAgICBmb3IgKHZhciBpPTAsIGw9di5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGlmICghdltpXS5sZW5ndGggJiYgKCFzZWdtZW50cy5sZW5ndGggfHwgIXNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtMV0ubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoc2VnbWVudHMubGVuZ3RoICYmICFzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLTFdLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBzZWdtZW50cy5wb3AoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzZWdtZW50cy5wdXNoKHZbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh2IHx8IHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmIChzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLTFdID09PSAnJykge1xyXG4gICAgICAgICAgLy8gZW1wdHkgdHJhaWxpbmcgZWxlbWVudHMgaGF2ZSB0byBiZSBvdmVyd3JpdHRlblxyXG4gICAgICAgICAgLy8gdG8gcHJldmVudCByZXN1bHRzIHN1Y2ggYXMgL2Zvby8vYmFyXHJcbiAgICAgICAgICBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLTFdID0gdjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2VnbWVudHMucHVzaCh2KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgc2VnbWVudHNbc2VnbWVudF0gPSB2O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNlZ21lbnRzLnNwbGljZShzZWdtZW50LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChhYnNvbHV0ZSkge1xyXG4gICAgICBzZWdtZW50cy51bnNoaWZ0KCcnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5wYXRoKHNlZ21lbnRzLmpvaW4oc2VwYXJhdG9yKSwgYnVpbGQpO1xyXG4gIH07XHJcbiAgcC5zZWdtZW50Q29kZWQgPSBmdW5jdGlvbihzZWdtZW50LCB2LCBidWlsZCkge1xyXG4gICAgdmFyIHNlZ21lbnRzLCBpLCBsO1xyXG5cclxuICAgIGlmICh0eXBlb2Ygc2VnbWVudCAhPT0gJ251bWJlcicpIHtcclxuICAgICAgYnVpbGQgPSB2O1xyXG4gICAgICB2ID0gc2VnbWVudDtcclxuICAgICAgc2VnbWVudCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHNlZ21lbnRzID0gdGhpcy5zZWdtZW50KHNlZ21lbnQsIHYsIGJ1aWxkKTtcclxuICAgICAgaWYgKCFpc0FycmF5KHNlZ21lbnRzKSkge1xyXG4gICAgICAgIHNlZ21lbnRzID0gc2VnbWVudHMgIT09IHVuZGVmaW5lZCA/IFVSSS5kZWNvZGUoc2VnbWVudHMpIDogdW5kZWZpbmVkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIHNlZ21lbnRzW2ldID0gVVJJLmRlY29kZShzZWdtZW50c1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc2VnbWVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc0FycmF5KHYpKSB7XHJcbiAgICAgIHYgPSAodHlwZW9mIHYgPT09ICdzdHJpbmcnIHx8IHYgaW5zdGFuY2VvZiBTdHJpbmcpID8gVVJJLmVuY29kZSh2KSA6IHY7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGkgPSAwLCBsID0gdi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICB2W2ldID0gVVJJLmVuY29kZSh2W2ldKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlZ21lbnQoc2VnbWVudCwgdiwgYnVpbGQpO1xyXG4gIH07XHJcblxyXG4gIC8vIG11dGF0aW5nIHF1ZXJ5IHN0cmluZ1xyXG4gIHZhciBxID0gcC5xdWVyeTtcclxuICBwLnF1ZXJ5ID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcclxuICAgIGlmICh2ID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiBVUkkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHZhciBkYXRhID0gVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xyXG4gICAgICB2YXIgcmVzdWx0ID0gdi5jYWxsKHRoaXMsIGRhdGEpO1xyXG4gICAgICB0aGlzLl9wYXJ0cy5xdWVyeSA9IFVSSS5idWlsZFF1ZXJ5KHJlc3VsdCB8fCBkYXRhLCB0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xyXG4gICAgICB0aGlzLmJ1aWxkKCFidWlsZCk7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSBlbHNlIGlmICh2ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHYgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuX3BhcnRzLnF1ZXJ5ID0gVVJJLmJ1aWxkUXVlcnkodiwgdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcclxuICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBxLmNhbGwodGhpcywgdiwgYnVpbGQpO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgcC5zZXRRdWVyeSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBidWlsZCkge1xyXG4gICAgdmFyIGRhdGEgPSBVUkkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyB8fCBuYW1lIGluc3RhbmNlb2YgU3RyaW5nKSB7XHJcbiAgICAgIGRhdGFbbmFtZV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBudWxsO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgZm9yICh2YXIga2V5IGluIG5hbWUpIHtcclxuICAgICAgICBpZiAoaGFzT3duLmNhbGwobmFtZSwga2V5KSkge1xyXG4gICAgICAgICAgZGF0YVtrZXldID0gbmFtZVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVVJJLmFkZFF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZyBhcyB0aGUgbmFtZSBwYXJhbWV0ZXInKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wYXJ0cy5xdWVyeSA9IFVSSS5idWlsZFF1ZXJ5KGRhdGEsIHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycywgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGJ1aWxkID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5idWlsZCghYnVpbGQpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuICBwLmFkZFF1ZXJ5ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUsIGJ1aWxkKSB7XHJcbiAgICB2YXIgZGF0YSA9IFVSSS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcclxuICAgIFVSSS5hZGRRdWVyeShkYXRhLCBuYW1lLCB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHZhbHVlKTtcclxuICAgIHRoaXMuX3BhcnRzLnF1ZXJ5ID0gVVJJLmJ1aWxkUXVlcnkoZGF0YSwgdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcclxuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgYnVpbGQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1aWxkKCFidWlsZCk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG4gIHAucmVtb3ZlUXVlcnkgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgYnVpbGQpIHtcclxuICAgIHZhciBkYXRhID0gVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xyXG4gICAgVVJJLnJlbW92ZVF1ZXJ5KGRhdGEsIG5hbWUsIHZhbHVlKTtcclxuICAgIHRoaXMuX3BhcnRzLnF1ZXJ5ID0gVVJJLmJ1aWxkUXVlcnkoZGF0YSwgdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcclxuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgYnVpbGQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1aWxkKCFidWlsZCk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG4gIHAuaGFzUXVlcnkgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgd2l0aGluQXJyYXkpIHtcclxuICAgIHZhciBkYXRhID0gVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xyXG4gICAgcmV0dXJuIFVSSS5oYXNRdWVyeShkYXRhLCBuYW1lLCB2YWx1ZSwgd2l0aGluQXJyYXkpO1xyXG4gIH07XHJcbiAgcC5zZXRTZWFyY2ggPSBwLnNldFF1ZXJ5O1xyXG4gIHAuYWRkU2VhcmNoID0gcC5hZGRRdWVyeTtcclxuICBwLnJlbW92ZVNlYXJjaCA9IHAucmVtb3ZlUXVlcnk7XHJcbiAgcC5oYXNTZWFyY2ggPSBwLmhhc1F1ZXJ5O1xyXG5cclxuICAvLyBzYW5pdGl6aW5nIFVSTHNcclxuICBwLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuX3BhcnRzLnVybikge1xyXG4gICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgIC5ub3JtYWxpemVQcm90b2NvbChmYWxzZSlcclxuICAgICAgICAubm9ybWFsaXplUGF0aChmYWxzZSlcclxuICAgICAgICAubm9ybWFsaXplUXVlcnkoZmFsc2UpXHJcbiAgICAgICAgLm5vcm1hbGl6ZUZyYWdtZW50KGZhbHNlKVxyXG4gICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzXHJcbiAgICAgIC5ub3JtYWxpemVQcm90b2NvbChmYWxzZSlcclxuICAgICAgLm5vcm1hbGl6ZUhvc3RuYW1lKGZhbHNlKVxyXG4gICAgICAubm9ybWFsaXplUG9ydChmYWxzZSlcclxuICAgICAgLm5vcm1hbGl6ZVBhdGgoZmFsc2UpXHJcbiAgICAgIC5ub3JtYWxpemVRdWVyeShmYWxzZSlcclxuICAgICAgLm5vcm1hbGl6ZUZyYWdtZW50KGZhbHNlKVxyXG4gICAgICAuYnVpbGQoKTtcclxuICB9O1xyXG4gIHAubm9ybWFsaXplUHJvdG9jb2wgPSBmdW5jdGlvbihidWlsZCkge1xyXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9wYXJ0cy5wcm90b2NvbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5fcGFydHMucHJvdG9jb2wgPSB0aGlzLl9wYXJ0cy5wcm90b2NvbC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB0aGlzLmJ1aWxkKCFidWlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuICBwLm5vcm1hbGl6ZUhvc3RuYW1lID0gZnVuY3Rpb24oYnVpbGQpIHtcclxuICAgIGlmICh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkge1xyXG4gICAgICBpZiAodGhpcy5pcygnSUROJykgJiYgcHVueWNvZGUpIHtcclxuICAgICAgICB0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHB1bnljb2RlLnRvQVNDSUkodGhpcy5fcGFydHMuaG9zdG5hbWUpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXMoJ0lQdjYnKSAmJiBJUHY2KSB7XHJcbiAgICAgICAgdGhpcy5fcGFydHMuaG9zdG5hbWUgPSBJUHY2LmJlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHRoaXMuYnVpbGQoIWJ1aWxkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG4gIHAubm9ybWFsaXplUG9ydCA9IGZ1bmN0aW9uKGJ1aWxkKSB7XHJcbiAgICAvLyByZW1vdmUgcG9ydCBvZiBpdCdzIHRoZSBwcm90b2NvbCdzIGRlZmF1bHRcclxuICAgIGlmICh0eXBlb2YgdGhpcy5fcGFydHMucHJvdG9jb2wgPT09ICdzdHJpbmcnICYmIHRoaXMuX3BhcnRzLnBvcnQgPT09IFVSSS5kZWZhdWx0UG9ydHNbdGhpcy5fcGFydHMucHJvdG9jb2xdKSB7XHJcbiAgICAgIHRoaXMuX3BhcnRzLnBvcnQgPSBudWxsO1xyXG4gICAgICB0aGlzLmJ1aWxkKCFidWlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuICBwLm5vcm1hbGl6ZVBhdGggPSBmdW5jdGlvbihidWlsZCkge1xyXG4gICAgdmFyIF9wYXRoID0gdGhpcy5fcGFydHMucGF0aDtcclxuICAgIGlmICghX3BhdGgpIHtcclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3BhcnRzLnVybikge1xyXG4gICAgICB0aGlzLl9wYXJ0cy5wYXRoID0gVVJJLnJlY29kZVVyblBhdGgodGhpcy5fcGFydHMucGF0aCk7XHJcbiAgICAgIHRoaXMuYnVpbGQoIWJ1aWxkKTtcclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3BhcnRzLnBhdGggPT09ICcvJykge1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB2YXIgX3dhc19yZWxhdGl2ZTtcclxuICAgIHZhciBfbGVhZGluZ1BhcmVudHMgPSAnJztcclxuICAgIHZhciBfcGFyZW50LCBfcG9zO1xyXG5cclxuICAgIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRoc1xyXG4gICAgaWYgKF9wYXRoLmNoYXJBdCgwKSAhPT0gJy8nKSB7XHJcbiAgICAgIF93YXNfcmVsYXRpdmUgPSB0cnVlO1xyXG4gICAgICBfcGF0aCA9ICcvJyArIF9wYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhhbmRsZSByZWxhdGl2ZSBmaWxlcyAoYXMgb3Bwb3NlZCB0byBkaXJlY3RvcmllcylcclxuICAgIGlmIChfcGF0aC5zbGljZSgtMykgPT09ICcvLi4nIHx8IF9wYXRoLnNsaWNlKC0yKSA9PT0gJy8uJykge1xyXG4gICAgICBfcGF0aCArPSAnLyc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmVzb2x2ZSBzaW1wbGVzXHJcbiAgICBfcGF0aCA9IF9wYXRoXHJcbiAgICAgIC5yZXBsYWNlKC8oXFwvKFxcLlxcLykrKXwoXFwvXFwuJCkvZywgJy8nKVxyXG4gICAgICAucmVwbGFjZSgvXFwvezIsfS9nLCAnLycpO1xyXG5cclxuICAgIC8vIHJlbWVtYmVyIGxlYWRpbmcgcGFyZW50c1xyXG4gICAgaWYgKF93YXNfcmVsYXRpdmUpIHtcclxuICAgICAgX2xlYWRpbmdQYXJlbnRzID0gX3BhdGguc3Vic3RyaW5nKDEpLm1hdGNoKC9eKFxcLlxcLlxcLykrLykgfHwgJyc7XHJcbiAgICAgIGlmIChfbGVhZGluZ1BhcmVudHMpIHtcclxuICAgICAgICBfbGVhZGluZ1BhcmVudHMgPSBfbGVhZGluZ1BhcmVudHNbMF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyByZXNvbHZlIHBhcmVudHNcclxuICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgIF9wYXJlbnQgPSBfcGF0aC5pbmRleE9mKCcvLi4nKTtcclxuICAgICAgaWYgKF9wYXJlbnQgPT09IC0xKSB7XHJcbiAgICAgICAgLy8gbm8gbW9yZSAuLi8gdG8gcmVzb2x2ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9IGVsc2UgaWYgKF9wYXJlbnQgPT09IDApIHtcclxuICAgICAgICAvLyB0b3AgbGV2ZWwgY2Fubm90IGJlIHJlbGF0aXZlLCBza2lwIGl0XHJcbiAgICAgICAgX3BhdGggPSBfcGF0aC5zdWJzdHJpbmcoMyk7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIF9wb3MgPSBfcGF0aC5zdWJzdHJpbmcoMCwgX3BhcmVudCkubGFzdEluZGV4T2YoJy8nKTtcclxuICAgICAgaWYgKF9wb3MgPT09IC0xKSB7XHJcbiAgICAgICAgX3BvcyA9IF9wYXJlbnQ7XHJcbiAgICAgIH1cclxuICAgICAgX3BhdGggPSBfcGF0aC5zdWJzdHJpbmcoMCwgX3BvcykgKyBfcGF0aC5zdWJzdHJpbmcoX3BhcmVudCArIDMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHJldmVydCB0byByZWxhdGl2ZVxyXG4gICAgaWYgKF93YXNfcmVsYXRpdmUgJiYgdGhpcy5pcygncmVsYXRpdmUnKSkge1xyXG4gICAgICBfcGF0aCA9IF9sZWFkaW5nUGFyZW50cyArIF9wYXRoLnN1YnN0cmluZygxKTtcclxuICAgIH1cclxuXHJcbiAgICBfcGF0aCA9IFVSSS5yZWNvZGVQYXRoKF9wYXRoKTtcclxuICAgIHRoaXMuX3BhcnRzLnBhdGggPSBfcGF0aDtcclxuICAgIHRoaXMuYnVpbGQoIWJ1aWxkKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcbiAgcC5ub3JtYWxpemVQYXRobmFtZSA9IHAubm9ybWFsaXplUGF0aDtcclxuICBwLm5vcm1hbGl6ZVF1ZXJ5ID0gZnVuY3Rpb24oYnVpbGQpIHtcclxuICAgIGlmICh0eXBlb2YgdGhpcy5fcGFydHMucXVlcnkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGlmICghdGhpcy5fcGFydHMucXVlcnkubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5fcGFydHMucXVlcnkgPSBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucXVlcnkoVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcbiAgcC5ub3JtYWxpemVGcmFnbWVudCA9IGZ1bmN0aW9uKGJ1aWxkKSB7XHJcbiAgICBpZiAoIXRoaXMuX3BhcnRzLmZyYWdtZW50KSB7XHJcbiAgICAgIHRoaXMuX3BhcnRzLmZyYWdtZW50ID0gbnVsbDtcclxuICAgICAgdGhpcy5idWlsZCghYnVpbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcbiAgcC5ub3JtYWxpemVTZWFyY2ggPSBwLm5vcm1hbGl6ZVF1ZXJ5O1xyXG4gIHAubm9ybWFsaXplSGFzaCA9IHAubm9ybWFsaXplRnJhZ21lbnQ7XHJcblxyXG4gIHAuaXNvODg1OSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgLy8gZXhwZWN0IHVuaWNvZGUgaW5wdXQsIGlzbzg4NTkgb3V0cHV0XHJcbiAgICB2YXIgZSA9IFVSSS5lbmNvZGU7XHJcbiAgICB2YXIgZCA9IFVSSS5kZWNvZGU7XHJcblxyXG4gICAgVVJJLmVuY29kZSA9IGVzY2FwZTtcclxuICAgIFVSSS5kZWNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQ7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLm5vcm1hbGl6ZSgpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgVVJJLmVuY29kZSA9IGU7XHJcbiAgICAgIFVSSS5kZWNvZGUgPSBkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuXHJcbiAgcC51bmljb2RlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAvLyBleHBlY3QgaXNvODg1OSBpbnB1dCwgdW5pY29kZSBvdXRwdXRcclxuICAgIHZhciBlID0gVVJJLmVuY29kZTtcclxuICAgIHZhciBkID0gVVJJLmRlY29kZTtcclxuXHJcbiAgICBVUkkuZW5jb2RlID0gc3RyaWN0RW5jb2RlVVJJQ29tcG9uZW50O1xyXG4gICAgVVJJLmRlY29kZSA9IHVuZXNjYXBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5ub3JtYWxpemUoKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIFVSSS5lbmNvZGUgPSBlO1xyXG4gICAgICBVUkkuZGVjb2RlID0gZDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIHAucmVhZGFibGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciB1cmkgPSB0aGlzLmNsb25lKCk7XHJcbiAgICAvLyByZW1vdmluZyB1c2VybmFtZSwgcGFzc3dvcmQsIGJlY2F1c2UgdGhleSBzaG91bGRuJ3QgYmUgZGlzcGxheWVkIGFjY29yZGluZyB0byBSRkMgMzk4NlxyXG4gICAgdXJpLnVzZXJuYW1lKCcnKS5wYXNzd29yZCgnJykubm9ybWFsaXplKCk7XHJcbiAgICB2YXIgdCA9ICcnO1xyXG4gICAgaWYgKHVyaS5fcGFydHMucHJvdG9jb2wpIHtcclxuICAgICAgdCArPSB1cmkuX3BhcnRzLnByb3RvY29sICsgJzovLyc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVyaS5fcGFydHMuaG9zdG5hbWUpIHtcclxuICAgICAgaWYgKHVyaS5pcygncHVueWNvZGUnKSAmJiBwdW55Y29kZSkge1xyXG4gICAgICAgIHQgKz0gcHVueWNvZGUudG9Vbmljb2RlKHVyaS5fcGFydHMuaG9zdG5hbWUpO1xyXG4gICAgICAgIGlmICh1cmkuX3BhcnRzLnBvcnQpIHtcclxuICAgICAgICAgIHQgKz0gJzonICsgdXJpLl9wYXJ0cy5wb3J0O1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0ICs9IHVyaS5ob3N0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodXJpLl9wYXJ0cy5ob3N0bmFtZSAmJiB1cmkuX3BhcnRzLnBhdGggJiYgdXJpLl9wYXJ0cy5wYXRoLmNoYXJBdCgwKSAhPT0gJy8nKSB7XHJcbiAgICAgIHQgKz0gJy8nO1xyXG4gICAgfVxyXG5cclxuICAgIHQgKz0gdXJpLnBhdGgodHJ1ZSk7XHJcbiAgICBpZiAodXJpLl9wYXJ0cy5xdWVyeSkge1xyXG4gICAgICB2YXIgcSA9ICcnO1xyXG4gICAgICBmb3IgKHZhciBpID0gMCwgcXAgPSB1cmkuX3BhcnRzLnF1ZXJ5LnNwbGl0KCcmJyksIGwgPSBxcC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICB2YXIga3YgPSAocXBbaV0gfHwgJycpLnNwbGl0KCc9Jyk7XHJcbiAgICAgICAgcSArPSAnJicgKyBVUkkuZGVjb2RlUXVlcnkoa3ZbMF0sIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpXHJcbiAgICAgICAgICAucmVwbGFjZSgvJi9nLCAnJTI2Jyk7XHJcblxyXG4gICAgICAgIGlmIChrdlsxXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBxICs9ICc9JyArIFVSSS5kZWNvZGVRdWVyeShrdlsxXSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSlcclxuICAgICAgICAgICAgLnJlcGxhY2UoLyYvZywgJyUyNicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0ICs9ICc/JyArIHEuc3Vic3RyaW5nKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHQgKz0gVVJJLmRlY29kZVF1ZXJ5KHVyaS5oYXNoKCksIHRydWUpO1xyXG4gICAgcmV0dXJuIHQ7XHJcbiAgfTtcclxuXHJcbiAgLy8gcmVzb2x2aW5nIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBVUkxzXHJcbiAgcC5hYnNvbHV0ZVRvID0gZnVuY3Rpb24oYmFzZSkge1xyXG4gICAgdmFyIHJlc29sdmVkID0gdGhpcy5jbG9uZSgpO1xyXG4gICAgdmFyIHByb3BlcnRpZXMgPSBbJ3Byb3RvY29sJywgJ3VzZXJuYW1lJywgJ3Bhc3N3b3JkJywgJ2hvc3RuYW1lJywgJ3BvcnQnXTtcclxuICAgIHZhciBiYXNlZGlyLCBpLCBwO1xyXG5cclxuICAgIGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVUk5zIGRvIG5vdCBoYXZlIGFueSBnZW5lcmFsbHkgZGVmaW5lZCBoaWVyYXJjaGljYWwgY29tcG9uZW50cycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghKGJhc2UgaW5zdGFuY2VvZiBVUkkpKSB7XHJcbiAgICAgIGJhc2UgPSBuZXcgVVJJKGJhc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcmVzb2x2ZWQuX3BhcnRzLnByb3RvY29sKSB7XHJcbiAgICAgIHJlc29sdmVkLl9wYXJ0cy5wcm90b2NvbCA9IGJhc2UuX3BhcnRzLnByb3RvY29sO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkge1xyXG4gICAgICByZXR1cm4gcmVzb2x2ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChpID0gMDsgKHAgPSBwcm9wZXJ0aWVzW2ldKTsgaSsrKSB7XHJcbiAgICAgIHJlc29sdmVkLl9wYXJ0c1twXSA9IGJhc2UuX3BhcnRzW3BdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcmVzb2x2ZWQuX3BhcnRzLnBhdGgpIHtcclxuICAgICAgcmVzb2x2ZWQuX3BhcnRzLnBhdGggPSBiYXNlLl9wYXJ0cy5wYXRoO1xyXG4gICAgICBpZiAoIXJlc29sdmVkLl9wYXJ0cy5xdWVyeSkge1xyXG4gICAgICAgIHJlc29sdmVkLl9wYXJ0cy5xdWVyeSA9IGJhc2UuX3BhcnRzLnF1ZXJ5O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHJlc29sdmVkLl9wYXJ0cy5wYXRoLnN1YnN0cmluZygtMikgPT09ICcuLicpIHtcclxuICAgICAgcmVzb2x2ZWQuX3BhcnRzLnBhdGggKz0gJy8nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXNvbHZlZC5wYXRoKCkuY2hhckF0KDApICE9PSAnLycpIHtcclxuICAgICAgYmFzZWRpciA9IGJhc2UuZGlyZWN0b3J5KCk7XHJcbiAgICAgIGJhc2VkaXIgPSBiYXNlZGlyID8gYmFzZWRpciA6IGJhc2UucGF0aCgpLmluZGV4T2YoJy8nKSA9PT0gMCA/ICcvJyA6ICcnO1xyXG4gICAgICByZXNvbHZlZC5fcGFydHMucGF0aCA9IChiYXNlZGlyID8gKGJhc2VkaXIgKyAnLycpIDogJycpICsgcmVzb2x2ZWQuX3BhcnRzLnBhdGg7XHJcbiAgICAgIHJlc29sdmVkLm5vcm1hbGl6ZVBhdGgoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXNvbHZlZC5idWlsZCgpO1xyXG4gICAgcmV0dXJuIHJlc29sdmVkO1xyXG4gIH07XHJcbiAgcC5yZWxhdGl2ZVRvID0gZnVuY3Rpb24oYmFzZSkge1xyXG4gICAgdmFyIHJlbGF0aXZlID0gdGhpcy5jbG9uZSgpLm5vcm1hbGl6ZSgpO1xyXG4gICAgdmFyIHJlbGF0aXZlUGFydHMsIGJhc2VQYXJ0cywgY29tbW9uLCByZWxhdGl2ZVBhdGgsIGJhc2VQYXRoO1xyXG5cclxuICAgIGlmIChyZWxhdGl2ZS5fcGFydHMudXJuKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVVJOcyBkbyBub3QgaGF2ZSBhbnkgZ2VuZXJhbGx5IGRlZmluZWQgaGllcmFyY2hpY2FsIGNvbXBvbmVudHMnKTtcclxuICAgIH1cclxuXHJcbiAgICBiYXNlID0gbmV3IFVSSShiYXNlKS5ub3JtYWxpemUoKTtcclxuICAgIHJlbGF0aXZlUGFydHMgPSByZWxhdGl2ZS5fcGFydHM7XHJcbiAgICBiYXNlUGFydHMgPSBiYXNlLl9wYXJ0cztcclxuICAgIHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlLnBhdGgoKTtcclxuICAgIGJhc2VQYXRoID0gYmFzZS5wYXRoKCk7XHJcblxyXG4gICAgaWYgKHJlbGF0aXZlUGF0aC5jaGFyQXQoMCkgIT09ICcvJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSSSBpcyBhbHJlYWR5IHJlbGF0aXZlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJhc2VQYXRoLmNoYXJBdCgwKSAhPT0gJy8nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBhIFVSSSByZWxhdGl2ZSB0byBhbm90aGVyIHJlbGF0aXZlIFVSSScpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWxhdGl2ZVBhcnRzLnByb3RvY29sID09PSBiYXNlUGFydHMucHJvdG9jb2wpIHtcclxuICAgICAgcmVsYXRpdmVQYXJ0cy5wcm90b2NvbCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlbGF0aXZlUGFydHMudXNlcm5hbWUgIT09IGJhc2VQYXJ0cy51c2VybmFtZSB8fCByZWxhdGl2ZVBhcnRzLnBhc3N3b3JkICE9PSBiYXNlUGFydHMucGFzc3dvcmQpIHtcclxuICAgICAgcmV0dXJuIHJlbGF0aXZlLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlbGF0aXZlUGFydHMucHJvdG9jb2wgIT09IG51bGwgfHwgcmVsYXRpdmVQYXJ0cy51c2VybmFtZSAhPT0gbnVsbCB8fCByZWxhdGl2ZVBhcnRzLnBhc3N3b3JkICE9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiByZWxhdGl2ZS5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWxhdGl2ZVBhcnRzLmhvc3RuYW1lID09PSBiYXNlUGFydHMuaG9zdG5hbWUgJiYgcmVsYXRpdmVQYXJ0cy5wb3J0ID09PSBiYXNlUGFydHMucG9ydCkge1xyXG4gICAgICByZWxhdGl2ZVBhcnRzLmhvc3RuYW1lID0gbnVsbDtcclxuICAgICAgcmVsYXRpdmVQYXJ0cy5wb3J0ID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiByZWxhdGl2ZS5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWxhdGl2ZVBhdGggPT09IGJhc2VQYXRoKSB7XHJcbiAgICAgIHJlbGF0aXZlUGFydHMucGF0aCA9ICcnO1xyXG4gICAgICByZXR1cm4gcmVsYXRpdmUuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkZXRlcm1pbmUgY29tbW9uIHN1YiBwYXRoXHJcbiAgICBjb21tb24gPSBVUkkuY29tbW9uUGF0aChyZWxhdGl2ZVBhdGgsIGJhc2VQYXRoKTtcclxuXHJcbiAgICAvLyBJZiB0aGUgcGF0aHMgaGF2ZSBub3RoaW5nIGluIGNvbW1vbiwgcmV0dXJuIGEgcmVsYXRpdmUgVVJMIHdpdGggdGhlIGFic29sdXRlIHBhdGguXHJcbiAgICBpZiAoIWNvbW1vbikge1xyXG4gICAgICByZXR1cm4gcmVsYXRpdmUuYnVpbGQoKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcGFyZW50cyA9IGJhc2VQYXJ0cy5wYXRoXHJcbiAgICAgIC5zdWJzdHJpbmcoY29tbW9uLmxlbmd0aClcclxuICAgICAgLnJlcGxhY2UoL1teXFwvXSokLywgJycpXHJcbiAgICAgIC5yZXBsYWNlKC8uKj9cXC8vZywgJy4uLycpO1xyXG5cclxuICAgIHJlbGF0aXZlUGFydHMucGF0aCA9IChwYXJlbnRzICsgcmVsYXRpdmVQYXJ0cy5wYXRoLnN1YnN0cmluZyhjb21tb24ubGVuZ3RoKSkgfHwgJy4vJztcclxuXHJcbiAgICByZXR1cm4gcmVsYXRpdmUuYnVpbGQoKTtcclxuICB9O1xyXG5cclxuICAvLyBjb21wYXJpbmcgVVJJc1xyXG4gIHAuZXF1YWxzID0gZnVuY3Rpb24odXJpKSB7XHJcbiAgICB2YXIgb25lID0gdGhpcy5jbG9uZSgpO1xyXG4gICAgdmFyIHR3byA9IG5ldyBVUkkodXJpKTtcclxuICAgIHZhciBvbmVfbWFwID0ge307XHJcbiAgICB2YXIgdHdvX21hcCA9IHt9O1xyXG4gICAgdmFyIGNoZWNrZWQgPSB7fTtcclxuICAgIHZhciBvbmVfcXVlcnksIHR3b19xdWVyeSwga2V5O1xyXG5cclxuICAgIG9uZS5ub3JtYWxpemUoKTtcclxuICAgIHR3by5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAvLyBleGFjdCBtYXRjaFxyXG4gICAgaWYgKG9uZS50b1N0cmluZygpID09PSB0d28udG9TdHJpbmcoKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBleHRyYWN0IHF1ZXJ5IHN0cmluZ1xyXG4gICAgb25lX3F1ZXJ5ID0gb25lLnF1ZXJ5KCk7XHJcbiAgICB0d29fcXVlcnkgPSB0d28ucXVlcnkoKTtcclxuICAgIG9uZS5xdWVyeSgnJyk7XHJcbiAgICB0d28ucXVlcnkoJycpO1xyXG5cclxuICAgIC8vIGRlZmluaXRlbHkgbm90IGVxdWFsIGlmIG5vdCBldmVuIG5vbi1xdWVyeSBwYXJ0cyBtYXRjaFxyXG4gICAgaWYgKG9uZS50b1N0cmluZygpICE9PSB0d28udG9TdHJpbmcoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcXVlcnkgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIGxlbmd0aCwgZXZlbiBpZiB0aGV5J3JlIHBlcm11dGVkXHJcbiAgICBpZiAob25lX3F1ZXJ5Lmxlbmd0aCAhPT0gdHdvX3F1ZXJ5Lmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgb25lX21hcCA9IFVSSS5wYXJzZVF1ZXJ5KG9uZV9xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XHJcbiAgICB0d29fbWFwID0gVVJJLnBhcnNlUXVlcnkodHdvX3F1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcclxuXHJcbiAgICBmb3IgKGtleSBpbiBvbmVfbWFwKSB7XHJcbiAgICAgIGlmIChoYXNPd24uY2FsbChvbmVfbWFwLCBrZXkpKSB7XHJcbiAgICAgICAgaWYgKCFpc0FycmF5KG9uZV9tYXBba2V5XSkpIHtcclxuICAgICAgICAgIGlmIChvbmVfbWFwW2tleV0gIT09IHR3b19tYXBba2V5XSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICghYXJyYXlzRXF1YWwob25lX21hcFtrZXldLCB0d29fbWFwW2tleV0pKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjaGVja2VkW2tleV0gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChrZXkgaW4gdHdvX21hcCkge1xyXG4gICAgICBpZiAoaGFzT3duLmNhbGwodHdvX21hcCwga2V5KSkge1xyXG4gICAgICAgIGlmICghY2hlY2tlZFtrZXldKSB7XHJcbiAgICAgICAgICAvLyB0d28gY29udGFpbnMgYSBwYXJhbWV0ZXIgbm90IHByZXNlbnQgaW4gb25lXHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfTtcclxuXHJcbiAgLy8gc3RhdGVcclxuICBwLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyA9IGZ1bmN0aW9uKHYpIHtcclxuICAgIHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyA9ICEhdjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIHAuZXNjYXBlUXVlcnlTcGFjZSA9IGZ1bmN0aW9uKHYpIHtcclxuICAgIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UgPSAhIXY7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICByZXR1cm4gVVJJO1xyXG59KSk7XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Styles/Calendars/jquery.calendars.picker.full.css b/src/Orchard.Web/Modules/Orchard.Resources/Styles/Calendars/jquery.calendars.picker.full.css index 7737283cbe3..6a7bf23b74e 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Styles/Calendars/jquery.calendars.picker.full.css +++ b/src/Orchard.Web/Modules/Orchard.Resources/Styles/Calendars/jquery.calendars.picker.full.css @@ -323,4 +323,4 @@ button.ui-datepicker-cmd { clear: both; } -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmZ1bGwuY3NzIiwianF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuY3NzIiwidWkuY2FsZW5kYXJzLnBpY2tlci5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFDTEEseURBQUE7QUFDQTtDQUNBLHVCQUFBO0NBQ0EsWUFBQTtDQUNBLHVCQUFBO0lBR0Esc0JBQUE7Q0FDQSx3Q0FBQTtDQUNBLGVBQUE7Q0FDQTtBQUNBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7Q0FDQSxjQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsYUFBQTtDQUNBLHdCQUFBO0NBQ0EsYUFBQTtDQUNBLDBCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxzQkFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7SUFDQSxlQUFBO0lBQ0EscUJBQUE7SUFDQSx1QkFBQTtJQUNBLGFBQUE7SUFHQSxzQkFBQTtJQUNBLGtCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxZQUFBO0NBQ0EsdUJBQUE7Q0FDQSxZQUFBO0NBQ0EsZUFBQTtDQUNBLGtCQUFBO0NBQ0E7QUFDQTtDQUNBLHVCQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQTtBQUNBO0NBQ0EsdUJBQUE7Q0FDQTtBQUNBO0NBQ0EsMEJBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBO0FBQ0E7Q0FDQSxjQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxpQkFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsV0FBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLGFBQUE7Q0FDQSxrQkFBQTtDQUNBLGtCQUFBO0NBQ0E7QUFDQTs7Q0FFQSxhQUFBO0NBQ0EsaUJBQUE7Q0FDQSxrQkFBQTtDQUNBLGtCQUFBO0NBQ0E7QUFDQTtDQUNBLGFBQUE7Q0FDQTtBQUNBOztDQUVBLFlBQUE7Q0FDQSxpQkFBQTtDQUNBLGtCQUFBO0NBQ0EsaUJBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLHVCQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLGFBQUE7Q0FDQSxXQUFBO0NBQ0EsWUFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLFlBQUE7Q0FDQSx1QkFBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLGNBQUE7Q0FDQSx1QkFBQTtDQUNBLFlBQUE7Q0FDQSxrQkFBQTtDQUNBO0FBQ0E7Q0FDQSxjQUFBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLGNBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLDBCQUFBO0NBQ0E7QUFDQTtDQUNBLDhCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxhQUFBO0NBQ0Esb0JBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSx1QkFBQTtDQUNBO0FBQ0E7Q0FDQSx1QkFBQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsdUJBQUE7Q0FDQSx1QkFBQTtDQUNBO0FBQ0E7Q0FDQSx1QkFBQTtDQUNBO0FBQ0E7Q0FDQSx1QkFBQTtDQUNBLFlBQUE7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLGVBQUE7Q0FDQSxZQUFBO0NBQ0EscUJBQUE7Q0FDQSx1QkFBQTtDQUNBLFlBQUE7Q0FDQSxzQkFBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0EsWUFBQTtDQUNBLHFCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsdUJBQUE7Q0FDQTtBQUNBO0NBQ0EsdUJBQUE7Q0FDQTtBQUNBO0NBQ0EsMEJBQUE7Q0FDQTtBQUNBO0NBQ0EsMEJBQUE7Q0FDQTtBQUNBO0NBQ0EsdUJBQUE7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLHVCQUFBO0NBQ0EsWUFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsdUJBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0E7O0FDdE5BLDBFQUFBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0E7QUFDQTs7Q0FFQSxZQUFBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7O0NBRUEsc0JBQUE7Q0FDQTtBQUNBO0NBQ0EsY0FBQTtDQUNBLG9CQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0Esb0JBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBLHFCQUFBO0NBQ0E7QUFDQTtDQUNBLGlCQUFBO0NBQ0EsWUFBQTtDQUNBLFdBQUE7Q0FDQSxhQUFBO0NBQ0EsZ0JBQUE7Q0FDQTtBQUNBO0NBQ0EsaUJBQUE7Q0FDQSxhQUFBO0NBQ0EsV0FBQTtDQUNBLGFBQUE7Q0FDQSxpQkFBQTtDQUNBLGtCQUFBO0NBQ0E7QUFDQTs7Q0FFQSxZQUFBO0NBQ0EsV0FBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsYUFBQTtDQUNBLFdBQUE7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLGdCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLGNBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7O0NBRUEsWUFBQTtDQUNBLGVBQUE7Q0FDQSxhQUFBO0NBQ0Esa0JBQUE7Q0FDQTtBQUNBO0NBQ0EscUJBQUE7Q0FDQTtBQUNBOzs7Q0FHQSw4QkFBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLG9CQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmZ1bGwuY3NzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCIvKiBEZWZhdWx0IHN0eWxpbmcgZm9yIGpRdWVyeSBDYWxlbmRhcnMgUGlja2VyIHYyLjAuMC4gKi9cbi5jYWxlbmRhcnMge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRjb2xvcjogIzAwMDtcblx0Ym9yZGVyOiAxcHggc29saWQgIzQ0NDtcbiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDAuMjVlbTtcbiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAuMjVlbTtcbiAgICBib3JkZXItcmFkaXVzOiAwLjI1ZW07XG5cdGZvbnQtZmFtaWx5OiBBcmlhbCxIZWx2ZXRpY2EsU2Fucy1zZXJpZjtcblx0Zm9udC1zaXplOiA5MCU7XG59XG4uY2FsZW5kYXJzLXJ0bCB7XG5cdGRpcmVjdGlvbjogcnRsO1xufVxuLmNhbGVuZGFycy1wb3B1cCB7XG5cdHotaW5kZXg6IDEwMDA7XG59XG4uY2FsZW5kYXJzLWRpc2FibGUge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHotaW5kZXg6IDEwMDtcblx0YmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG5cdG9wYWNpdHk6IDAuNTtcblx0ZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUwKTtcbn1cbi5jYWxlbmRhcnMgYSB7XG5cdGNvbG9yOiAjZmZmO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4uY2FsZW5kYXJzIGEuY2FsZW5kYXJzLWRpc2FibGVkIHtcblx0Y29sb3I6ICM4ODg7XG5cdGN1cnNvcjogYXV0bztcbn1cbi5jYWxlbmRhcnMgYnV0dG9uIHtcbiAgICBtYXJnaW46IDAuMjVlbTtcbiAgICBwYWRkaW5nOiAwLjEyNWVtIDBlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNjO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDAuMjVlbTtcbiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAuMjVlbTtcbiAgICBib3JkZXItcmFkaXVzOiAwLjI1ZW07XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4uY2FsZW5kYXJzLW5hdiwgLmNhbGVuZGFycy1jdHJsIHtcblx0ZmxvYXQ6IGxlZnQ7XG5cdHdpZHRoOiAxMDAlO1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xuXHRjb2xvcjogI2ZmZjtcblx0Zm9udC1zaXplOiA5MCU7XG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLmNhbGVuZGFycy1jdHJsIHtcblx0YmFja2dyb3VuZC1jb2xvcjogIzYwMDtcbn1cbi5jYWxlbmRhcnMtY21kIHtcblx0d2lkdGg6IDMwJTtcbn1cbi5jYWxlbmRhcnMtY21kOmhvdmVyIHtcblx0YmFja2dyb3VuZC1jb2xvcjogIzc3Nztcbn1cbi5jYWxlbmRhcnMtY3RybCAuY2FsZW5kYXJzLWNtZDpob3ZlciB7XG5cdGJhY2tncm91bmQtY29sb3I6ICNmMDgwODA7XG59XG4uY2FsZW5kYXJzLWNtZC1wcmV2SnVtcCwgLmNhbGVuZGFycy1jbWQtbmV4dEp1bXAge1xuXHR3aWR0aDogOCU7XG59XG5hLmNhbGVuZGFycy1jbWQge1xuXHRoZWlnaHQ6IDEuNWVtO1xufVxuYnV0dG9uLmNhbGVuZGFycy1jbWQge1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uY2FsZW5kYXJzLWNtZC1wcmV2LCAuY2FsZW5kYXJzLWNtZC1wcmV2SnVtcCwgLmNhbGVuZGFycy1jbWQtY2xlYXIge1xuXHRmbG9hdDogbGVmdDtcblx0cGFkZGluZy1sZWZ0OiAyJTtcbn1cbi5jYWxlbmRhcnMtY21kLWN1cnJlbnQsIC5jYWxlbmRhcnMtY21kLXRvZGF5IHtcblx0ZmxvYXQ6IGxlZnQ7XG5cdHdpZHRoOiAzNSU7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5jYWxlbmRhcnMtY21kLW5leHQsIC5jYWxlbmRhcnMtY21kLW5leHRKdW1wLCAuY2FsZW5kYXJzLWNtZC1jbG9zZSB7XG5cdGZsb2F0OiByaWdodDtcblx0cGFkZGluZy1yaWdodDogMiU7XG5cdHRleHQtYWxpZ246IHJpZ2h0O1xufVxuLmNhbGVuZGFycy1ydGwgLmNhbGVuZGFycy1jbWQtcHJldiwgLmNhbGVuZGFycy1ydGwgLmNhbGVuZGFycy1jbWQtcHJldkp1bXAsXG4uY2FsZW5kYXJzLXJ0bCAuY2FsZW5kYXJzLWNtZC1jbGVhciB7XG5cdGZsb2F0OiByaWdodDtcblx0cGFkZGluZy1sZWZ0OiAwJTtcblx0cGFkZGluZy1yaWdodDogMiU7XG5cdHRleHQtYWxpZ246IHJpZ2h0O1xufVxuLmNhbGVuZGFycy1ydGwgLmNhbGVuZGFycy1jbWQtY3VycmVudCwgLmNhbGVuZGFycy1ydGwgLmNhbGVuZGFycy1jbWQtdG9kYXkge1xuXHRmbG9hdDogcmlnaHQ7XG59XG4uY2FsZW5kYXJzLXJ0bCAuY2FsZW5kYXJzLWNtZC1uZXh0LCAuY2FsZW5kYXJzLXJ0bCAuY2FsZW5kYXJzLWNtZC1uZXh0SnVtcCxcbi5jYWxlbmRhcnMtcnRsIC5jYWxlbmRhcnMtY21kLWNsb3NlIHtcblx0ZmxvYXQ6IGxlZnQ7XG5cdHBhZGRpbmctbGVmdDogMiU7XG5cdHBhZGRpbmctcmlnaHQ6IDAlO1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLmNhbGVuZGFycy1tb250aC1uYXYge1xuXHRmbG9hdDogbGVmdDtcblx0YmFja2dyb3VuZC1jb2xvcjogIzc3Nztcblx0dGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmNhbGVuZGFycy1tb250aC1uYXYgZGl2IHtcblx0ZmxvYXQ6IGxlZnQ7XG5cdHdpZHRoOiAxMi41JTtcblx0bWFyZ2luOiAxJTtcblx0cGFkZGluZzogMSU7XG59XG4uY2FsZW5kYXJzLW1vbnRoLW5hdiBzcGFuIHtcblx0Y29sb3I6ICM4ODg7XG59XG4uY2FsZW5kYXJzLW1vbnRoLXJvdyB7XG5cdGNsZWFyOiBsZWZ0O1xufVxuLmNhbGVuZGFycy1tb250aCB7XG5cdGZsb2F0OiBsZWZ0O1xuXHR3aWR0aDogMTVlbTtcblx0Ym9yZGVyOiAxcHggc29saWQgIzQ0NDtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmNhbGVuZGFycy1tb250aC1oZWFkZXIsIC5jYWxlbmRhcnMtbW9udGgtaGVhZGVyIHNlbGVjdCwgLmNhbGVuZGFycy1tb250aC1oZWFkZXIgaW5wdXQge1xuXHRoZWlnaHQ6IDEuNWVtO1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0O1xuXHRjb2xvcjogI2ZmZjtcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4uY2FsZW5kYXJzLW1vbnRoLWhlYWRlciBzZWxlY3QsIC5jYWxlbmRhcnMtbW9udGgtaGVhZGVyIGlucHV0IHtcblx0aGVpZ2h0OiAxLjRlbTtcblx0Ym9yZGVyOiBub25lO1xufVxuLmNhbGVuZGFycy1tb250aC1oZWFkZXIgaW5wdXQge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG4uY2FsZW5kYXJzLW1vbnRoIHRhYmxlIHtcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG59XG4uY2FsZW5kYXJzLW1vbnRoIHRoZWFkIHtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNhYWE7XG59XG4uY2FsZW5kYXJzLW1vbnRoIHRoLCAuY2FsZW5kYXJzLW1vbnRoIHRkIHtcblx0bWFyZ2luOiAwZW07XG5cdHBhZGRpbmc6IDBlbTtcblx0Zm9udC13ZWlnaHQ6IG5vcm1hbDtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmNhbGVuZGFycy1tb250aCB0aCB7XG5cdGJvcmRlcjogMXB4IHNvbGlkICM3Nzc7XG59XG4uY2FsZW5kYXJzLW1vbnRoIHRoLCAuY2FsZW5kYXJzLW1vbnRoIHRoIGEge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjNzc3O1xuXHRjb2xvcjogI2ZmZjtcbn1cbi5jYWxlbmRhcnMtbW9udGggdGQge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xuXHRib3JkZXI6IDFweCBzb2xpZCAjYWFhO1xufVxuLmNhbGVuZGFycy1tb250aCB0ZC5jYWxlbmRhcnMtd2VlayB7XG5cdGJvcmRlcjogMXB4IHNvbGlkICM3Nzc7XG59XG4uY2FsZW5kYXJzLW1vbnRoIHRkLmNhbGVuZGFycy13ZWVrICoge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjNzc3O1xuXHRjb2xvcjogI2ZmZjtcblx0Ym9yZGVyOiBub25lO1xufVxuLmNhbGVuZGFycy1tb250aCBhIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHdpZHRoOiAxMDAlO1xuXHRwYWRkaW5nOiAwLjEyNWVtIDBlbTtcblx0YmFja2dyb3VuZC1jb2xvcjogI2VlZTtcblx0Y29sb3I6ICMwMDA7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5jYWxlbmRhcnMtbW9udGggc3BhbiB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHR3aWR0aDogMTAwJTtcblx0cGFkZGluZzogMC4xMjVlbSAwZW07XG59XG4uY2FsZW5kYXJzLW1vbnRoIHRkIHNwYW4ge1xuXHRjb2xvcjogIzg4ODtcbn1cbi5jYWxlbmRhcnMtbW9udGggdGQgLmNhbGVuZGFycy1vdGhlci1tb250aCB7XG5cdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4uY2FsZW5kYXJzLW1vbnRoIHRkIC5jYWxlbmRhcnMtd2Vla2VuZCB7XG5cdGJhY2tncm91bmQtY29sb3I6ICNkZGQ7XG59XG4uY2FsZW5kYXJzLW1vbnRoIHRkIC5jYWxlbmRhcnMtdG9kYXkge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjBjMGMwO1xufVxuLmNhbGVuZGFycy1tb250aCB0ZCAuY2FsZW5kYXJzLWhpZ2hsaWdodCB7XG5cdGJhY2tncm91bmQtY29sb3I6ICNmMDgwODA7XG59XG4uY2FsZW5kYXJzLW1vbnRoIHRkIC5jYWxlbmRhcnMtc2VsZWN0ZWQge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjNzc3O1xuXHRjb2xvcjogI2ZmZjtcbn1cbi5jYWxlbmRhcnMtbW9udGggdGguY2FsZW5kYXJzLXdlZWsge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjNzc3O1xuXHRjb2xvcjogI2ZmZjtcbn1cbi5jYWxlbmRhcnMtc3RhdHVzIHtcblx0Y2xlYXI6IGJvdGg7XG5cdGJhY2tncm91bmQtY29sb3I6ICNkZGQ7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5jYWxlbmRhcnMtY2xlYXItZml4IHtcblx0Y2xlYXI6IGJvdGg7XG59XG4iLCIvKiBUaGVtZVJvbGxlciBvdmVycmlkZSBzdHlsZSBzaGVldCBmb3IgalF1ZXJ5IENhbGVuZGFycyBQaWNrZXIgdjIuMC4wLiAqL1xuLnVpLWRhdGVwaWNrZXIge1xuXHRkaXNwbGF5OiBibG9jaztcbn1cbiN1aS1kYXRlcGlja2VyLWRpdixcbi51aS1kYXRlcGlja2VyLWlubGluZSB7XG5cdHdpZHRoOiAxN2VtO1xuXHRmb250LXNpemU6IDc1JTtcbn1cbiN1aS1kYXRlcGlja2VyLWRpdiB7XG5cdHotaW5kZXg6IDEwMDtcbn1cbi51aS1kYXRlcGlja2VyLWlubGluZSB7XG5cdGZsb2F0OiBsZWZ0O1xufVxuLnVpLWRhdGVwaWNrZXItcnRsIHtcblx0ZGlyZWN0aW9uOiBydGw7XG59XG4jdWktZGF0ZXBpY2tlci1kaXYgYSxcbi51aS1kYXRlcGlja2VyLWlubGluZSBhIHtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLnVpLWRhdGVwaWNrZXItcHJvbXB0IHtcblx0aGVpZ2h0OiAxLjVlbTtcblx0cGFkZGluZy10b3A6IDAuMjVlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xufVxuYnV0dG9uLnVpLWRhdGVwaWNrZXItY21kIHtcblx0aGVpZ2h0OiAyZW07XG59XG4udWktZGF0ZXBpY2tlci1jbWQtY2xlYXIge1xuXHRmbG9hdDogbGVmdDtcblx0bWFyZ2luLWxlZnQ6IDAuMjVlbTtcbn1cbi51aS1kYXRlcGlja2VyLWNtZC1jbG9zZSB7XG5cdGZsb2F0OiByaWdodDtcblx0bWFyZ2luLXJpZ2h0OiAwLjI1ZW07XG59XG4udWktZGF0ZXBpY2tlci1jbWQtcHJldiB7XG5cdHBvc2l0aW9uOiBzdGF0aWM7XG5cdGZsb2F0OiBsZWZ0O1xuXHR3aWR0aDogMzAlO1xuXHRoZWlnaHQ6IGF1dG87XG5cdG1hcmdpbi1sZWZ0OiAxJTtcbn1cbi51aS1kYXRlcGlja2VyLWNtZC1uZXh0IHtcblx0cG9zaXRpb246IHN0YXRpYztcblx0ZmxvYXQ6IHJpZ2h0O1xuXHR3aWR0aDogMzAlO1xuXHRoZWlnaHQ6IGF1dG87XG5cdG1hcmdpbi1yaWdodDogMSU7XG5cdHRleHQtYWxpZ246IHJpZ2h0O1xufVxuLnVpLWRhdGVwaWNrZXItY21kLWN1cnJlbnQsXG4udWktZGF0ZXBpY2tlci1jbWQtdG9kYXkge1xuXHRmbG9hdDogbGVmdDtcblx0d2lkdGg6IDM3JTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xufVxuLnVpLWRhdGVwaWNrZXItbW9udGgtbmF2IHtcblx0ZmxvYXQ6IGxlZnQ7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi51aS1kYXRlcGlja2VyLW1vbnRoLW5hdiBkaXYge1xuXHRmbG9hdDogbGVmdDtcblx0d2lkdGg6IDEyLjUlO1xuXHRtYXJnaW46IDElO1xuXHRwYWRkaW5nOiAxJTtcbn1cbi51aS1kYXRlcGlja2VyLW1vbnRoLW5hdiBzcGFuIHtcblx0Y29sb3I6ICM4ODg7XG59XG4udWktZGF0ZXBpY2tlci1yb3ctYnJlYWsge1xuXHR3aWR0aDogMTAwJTtcblx0Zm9udC1zaXplOiAxMDAlO1xufVxuLnVpLWRhdGVwaWNrZXItZ3JvdXAge1xuXHRmbG9hdDogbGVmdDtcblx0d2lkdGg6IDE3ZW07XG59XG4udWktZGF0ZXBpY2tlci1ncm91cCAudWktZGF0ZXBpY2tlci1oZWFkZXIge1xuXHRoZWlnaHQ6IDEuNWVtO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4udWktZGF0ZXBpY2tlciBzZWxlY3QsXG4udWktZGF0ZXBpY2tlci1pbmxpbmUgc2VsZWN0IHtcblx0d2lkdGg6IGF1dG87XG5cdGhlaWdodDogMS42NmVtO1xuXHRib3JkZXI6IG5vbmU7XG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLnVpLWRhdGVwaWNrZXIgdGgge1xuXHRwYWRkaW5nOiAwLjVlbSAwLjNlbTtcbn1cbi51aS1kYXRlcGlja2VyIHRkLFxuLnVpLWRhdGVwaWNrZXIgdGQgYSxcbi51aS1kYXRlcGlja2VyIHRkIHNwYW4ge1xuXHRib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xufVxuLnVpLWRhdGVwaWNrZXItc3RhdHVzIHtcblx0cGFkZGluZzogMC4yNWVtIDBlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xufVxuLnVpLWRhdGVwaWNrZXIgLnVpLWhlbHBlci1jbGVhcmZpeCB7XG5cdGNsZWFyOiBib3RoO1xufVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */ +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmZ1bGwuY3NzIiwianF1ZXJ5LmNhbGVuZGFycy5waWNrZXIuY3NzIiwidWkuY2FsZW5kYXJzLnBpY2tlci5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFDTEEseURBQUE7QUFDQTtDQUNBLHVCQUFBO0NBQ0EsWUFBQTtDQUNBLHVCQUFBO0lBR0Esc0JBQUE7Q0FDQSx3Q0FBQTtDQUNBLGVBQUE7Q0FDQTtBQUNBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7Q0FDQSxjQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsYUFBQTtDQUNBLHdCQUFBO0NBQ0EsYUFBQTtDQUNBLDBCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxzQkFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7SUFDQSxlQUFBO0lBQ0EscUJBQUE7SUFDQSx1QkFBQTtJQUNBLGFBQUE7SUFHQSxzQkFBQTtJQUNBLGtCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxZQUFBO0NBQ0EsdUJBQUE7Q0FDQSxZQUFBO0NBQ0EsZUFBQTtDQUNBLGtCQUFBO0NBQ0E7QUFDQTtDQUNBLHVCQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQTtBQUNBO0NBQ0EsdUJBQUE7Q0FDQTtBQUNBO0NBQ0EsMEJBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBO0FBQ0E7Q0FDQSxjQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxpQkFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsV0FBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLGFBQUE7Q0FDQSxrQkFBQTtDQUNBLGtCQUFBO0NBQ0E7QUFDQTs7Q0FFQSxhQUFBO0NBQ0EsaUJBQUE7Q0FDQSxrQkFBQTtDQUNBLGtCQUFBO0NBQ0E7QUFDQTtDQUNBLGFBQUE7Q0FDQTtBQUNBOztDQUVBLFlBQUE7Q0FDQSxpQkFBQTtDQUNBLGtCQUFBO0NBQ0EsaUJBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLHVCQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLGFBQUE7Q0FDQSxXQUFBO0NBQ0EsWUFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLFlBQUE7Q0FDQSx1QkFBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLGNBQUE7Q0FDQSx1QkFBQTtDQUNBLFlBQUE7Q0FDQSxrQkFBQTtDQUNBO0FBQ0E7Q0FDQSxjQUFBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLGNBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLDBCQUFBO0NBQ0E7QUFDQTtDQUNBLDhCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxhQUFBO0NBQ0Esb0JBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSx1QkFBQTtDQUNBO0FBQ0E7Q0FDQSx1QkFBQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsdUJBQUE7Q0FDQSx1QkFBQTtDQUNBO0FBQ0E7Q0FDQSx1QkFBQTtDQUNBO0FBQ0E7Q0FDQSx1QkFBQTtDQUNBLFlBQUE7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLGVBQUE7Q0FDQSxZQUFBO0NBQ0EscUJBQUE7Q0FDQSx1QkFBQTtDQUNBLFlBQUE7Q0FDQSxzQkFBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0EsWUFBQTtDQUNBLHFCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsdUJBQUE7Q0FDQTtBQUNBO0NBQ0EsdUJBQUE7Q0FDQTtBQUNBO0NBQ0EsMEJBQUE7Q0FDQTtBQUNBO0NBQ0EsMEJBQUE7Q0FDQTtBQUNBO0NBQ0EsdUJBQUE7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLHVCQUFBO0NBQ0EsWUFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsdUJBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0E7O0FDdE5BLDBFQUFBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0E7QUFDQTs7Q0FFQSxZQUFBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7O0NBRUEsc0JBQUE7Q0FDQTtBQUNBO0NBQ0EsY0FBQTtDQUNBLG9CQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0Esb0JBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBLHFCQUFBO0NBQ0E7QUFDQTtDQUNBLGlCQUFBO0NBQ0EsWUFBQTtDQUNBLFdBQUE7Q0FDQSxhQUFBO0NBQ0EsZ0JBQUE7Q0FDQTtBQUNBO0NBQ0EsaUJBQUE7Q0FDQSxhQUFBO0NBQ0EsV0FBQTtDQUNBLGFBQUE7Q0FDQSxpQkFBQTtDQUNBLGtCQUFBO0NBQ0E7QUFDQTs7Q0FFQSxZQUFBO0NBQ0EsV0FBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsYUFBQTtDQUNBLFdBQUE7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLGdCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLGNBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7O0NBRUEsWUFBQTtDQUNBLGVBQUE7Q0FDQSxhQUFBO0NBQ0Esa0JBQUE7Q0FDQTtBQUNBO0NBQ0EscUJBQUE7Q0FDQTtBQUNBOzs7Q0FHQSw4QkFBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLG9CQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBIiwiZmlsZSI6ImpxdWVyeS5jYWxlbmRhcnMucGlja2VyLmZ1bGwuY3NzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCIvKiBEZWZhdWx0IHN0eWxpbmcgZm9yIGpRdWVyeSBDYWxlbmRhcnMgUGlja2VyIHYyLjAuMC4gKi9cclxuLmNhbGVuZGFycyB7XHJcblx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuXHRjb2xvcjogIzAwMDtcclxuXHRib3JkZXI6IDFweCBzb2xpZCAjNDQ0O1xyXG4gICAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjI1ZW07XHJcbiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAuMjVlbTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDAuMjVlbTtcclxuXHRmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLFNhbnMtc2VyaWY7XHJcblx0Zm9udC1zaXplOiA5MCU7XHJcbn1cclxuLmNhbGVuZGFycy1ydGwge1xyXG5cdGRpcmVjdGlvbjogcnRsO1xyXG59XHJcbi5jYWxlbmRhcnMtcG9wdXAge1xyXG5cdHotaW5kZXg6IDEwMDA7XHJcbn1cclxuLmNhbGVuZGFycy1kaXNhYmxlIHtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0ei1pbmRleDogMTAwO1xyXG5cdGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xyXG5cdG9wYWNpdHk6IDAuNTtcclxuXHRmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApO1xyXG59XHJcbi5jYWxlbmRhcnMgYSB7XHJcblx0Y29sb3I6ICNmZmY7XHJcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG59XHJcbi5jYWxlbmRhcnMgYS5jYWxlbmRhcnMtZGlzYWJsZWQge1xyXG5cdGNvbG9yOiAjODg4O1xyXG5cdGN1cnNvcjogYXV0bztcclxufVxyXG4uY2FsZW5kYXJzIGJ1dHRvbiB7XHJcbiAgICBtYXJnaW46IDAuMjVlbTtcclxuICAgIHBhZGRpbmc6IDAuMTI1ZW0gMGVtO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZjYztcclxuICAgIGJvcmRlcjogbm9uZTtcclxuICAgIC1tb3otYm9yZGVyLXJhZGl1czogMC4yNWVtO1xyXG4gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwLjI1ZW07XHJcbiAgICBib3JkZXItcmFkaXVzOiAwLjI1ZW07XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxufVxyXG4uY2FsZW5kYXJzLW5hdiwgLmNhbGVuZGFycy1jdHJsIHtcclxuXHRmbG9hdDogbGVmdDtcclxuXHR3aWR0aDogMTAwJTtcclxuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xyXG5cdGNvbG9yOiAjZmZmO1xyXG5cdGZvbnQtc2l6ZTogOTAlO1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG59XHJcbi5jYWxlbmRhcnMtY3RybCB7XHJcblx0YmFja2dyb3VuZC1jb2xvcjogIzYwMDtcclxufVxyXG4uY2FsZW5kYXJzLWNtZCB7XHJcblx0d2lkdGg6IDMwJTtcclxufVxyXG4uY2FsZW5kYXJzLWNtZDpob3ZlciB7XHJcblx0YmFja2dyb3VuZC1jb2xvcjogIzc3NztcclxufVxyXG4uY2FsZW5kYXJzLWN0cmwgLmNhbGVuZGFycy1jbWQ6aG92ZXIge1xyXG5cdGJhY2tncm91bmQtY29sb3I6ICNmMDgwODA7XHJcbn1cclxuLmNhbGVuZGFycy1jbWQtcHJldkp1bXAsIC5jYWxlbmRhcnMtY21kLW5leHRKdW1wIHtcclxuXHR3aWR0aDogOCU7XHJcbn1cclxuYS5jYWxlbmRhcnMtY21kIHtcclxuXHRoZWlnaHQ6IDEuNWVtO1xyXG59XHJcbmJ1dHRvbi5jYWxlbmRhcnMtY21kIHtcclxuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuLmNhbGVuZGFycy1jbWQtcHJldiwgLmNhbGVuZGFycy1jbWQtcHJldkp1bXAsIC5jYWxlbmRhcnMtY21kLWNsZWFyIHtcclxuXHRmbG9hdDogbGVmdDtcclxuXHRwYWRkaW5nLWxlZnQ6IDIlO1xyXG59XHJcbi5jYWxlbmRhcnMtY21kLWN1cnJlbnQsIC5jYWxlbmRhcnMtY21kLXRvZGF5IHtcclxuXHRmbG9hdDogbGVmdDtcclxuXHR3aWR0aDogMzUlO1xyXG5cdHRleHQtYWxpZ246IGNlbnRlcjtcclxufVxyXG4uY2FsZW5kYXJzLWNtZC1uZXh0LCAuY2FsZW5kYXJzLWNtZC1uZXh0SnVtcCwgLmNhbGVuZGFycy1jbWQtY2xvc2Uge1xyXG5cdGZsb2F0OiByaWdodDtcclxuXHRwYWRkaW5nLXJpZ2h0OiAyJTtcclxuXHR0ZXh0LWFsaWduOiByaWdodDtcclxufVxyXG4uY2FsZW5kYXJzLXJ0bCAuY2FsZW5kYXJzLWNtZC1wcmV2LCAuY2FsZW5kYXJzLXJ0bCAuY2FsZW5kYXJzLWNtZC1wcmV2SnVtcCxcclxuLmNhbGVuZGFycy1ydGwgLmNhbGVuZGFycy1jbWQtY2xlYXIge1xyXG5cdGZsb2F0OiByaWdodDtcclxuXHRwYWRkaW5nLWxlZnQ6IDAlO1xyXG5cdHBhZGRpbmctcmlnaHQ6IDIlO1xyXG5cdHRleHQtYWxpZ246IHJpZ2h0O1xyXG59XHJcbi5jYWxlbmRhcnMtcnRsIC5jYWxlbmRhcnMtY21kLWN1cnJlbnQsIC5jYWxlbmRhcnMtcnRsIC5jYWxlbmRhcnMtY21kLXRvZGF5IHtcclxuXHRmbG9hdDogcmlnaHQ7XHJcbn1cclxuLmNhbGVuZGFycy1ydGwgLmNhbGVuZGFycy1jbWQtbmV4dCwgLmNhbGVuZGFycy1ydGwgLmNhbGVuZGFycy1jbWQtbmV4dEp1bXAsXHJcbi5jYWxlbmRhcnMtcnRsIC5jYWxlbmRhcnMtY21kLWNsb3NlIHtcclxuXHRmbG9hdDogbGVmdDtcclxuXHRwYWRkaW5nLWxlZnQ6IDIlO1xyXG5cdHBhZGRpbmctcmlnaHQ6IDAlO1xyXG5cdHRleHQtYWxpZ246IGxlZnQ7XHJcbn1cclxuLmNhbGVuZGFycy1tb250aC1uYXYge1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdGJhY2tncm91bmQtY29sb3I6ICM3Nzc7XHJcblx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcbi5jYWxlbmRhcnMtbW9udGgtbmF2IGRpdiB7XHJcblx0ZmxvYXQ6IGxlZnQ7XHJcblx0d2lkdGg6IDEyLjUlO1xyXG5cdG1hcmdpbjogMSU7XHJcblx0cGFkZGluZzogMSU7XHJcbn1cclxuLmNhbGVuZGFycy1tb250aC1uYXYgc3BhbiB7XHJcblx0Y29sb3I6ICM4ODg7XHJcbn1cclxuLmNhbGVuZGFycy1tb250aC1yb3cge1xyXG5cdGNsZWFyOiBsZWZ0O1xyXG59XHJcbi5jYWxlbmRhcnMtbW9udGgge1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdHdpZHRoOiAxNWVtO1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICM0NDQ7XHJcblx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcbi5jYWxlbmRhcnMtbW9udGgtaGVhZGVyLCAuY2FsZW5kYXJzLW1vbnRoLWhlYWRlciBzZWxlY3QsIC5jYWxlbmRhcnMtbW9udGgtaGVhZGVyIGlucHV0IHtcclxuXHRoZWlnaHQ6IDEuNWVtO1xyXG5cdGJhY2tncm91bmQtY29sb3I6ICM0NDQ7XHJcblx0Y29sb3I6ICNmZmY7XHJcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuLmNhbGVuZGFycy1tb250aC1oZWFkZXIgc2VsZWN0LCAuY2FsZW5kYXJzLW1vbnRoLWhlYWRlciBpbnB1dCB7XHJcblx0aGVpZ2h0OiAxLjRlbTtcclxuXHRib3JkZXI6IG5vbmU7XHJcbn1cclxuLmNhbGVuZGFycy1tb250aC1oZWFkZXIgaW5wdXQge1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRkaXNwbGF5OiBub25lO1xyXG59XHJcbi5jYWxlbmRhcnMtbW9udGggdGFibGUge1xyXG5cdHdpZHRoOiAxMDAlO1xyXG5cdGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XHJcbn1cclxuLmNhbGVuZGFycy1tb250aCB0aGVhZCB7XHJcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNhYWE7XHJcbn1cclxuLmNhbGVuZGFycy1tb250aCB0aCwgLmNhbGVuZGFycy1tb250aCB0ZCB7XHJcblx0bWFyZ2luOiAwZW07XHJcblx0cGFkZGluZzogMGVtO1xyXG5cdGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcblx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcbi5jYWxlbmRhcnMtbW9udGggdGgge1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICM3Nzc7XHJcbn1cclxuLmNhbGVuZGFycy1tb250aCB0aCwgLmNhbGVuZGFycy1tb250aCB0aCBhIHtcclxuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjNzc3O1xyXG5cdGNvbG9yOiAjZmZmO1xyXG59XHJcbi5jYWxlbmRhcnMtbW9udGggdGQge1xyXG5cdGJhY2tncm91bmQtY29sb3I6ICNlZWU7XHJcblx0Ym9yZGVyOiAxcHggc29saWQgI2FhYTtcclxufVxyXG4uY2FsZW5kYXJzLW1vbnRoIHRkLmNhbGVuZGFycy13ZWVrIHtcclxuXHRib3JkZXI6IDFweCBzb2xpZCAjNzc3O1xyXG59XHJcbi5jYWxlbmRhcnMtbW9udGggdGQuY2FsZW5kYXJzLXdlZWsgKiB7XHJcblx0YmFja2dyb3VuZC1jb2xvcjogIzc3NztcclxuXHRjb2xvcjogI2ZmZjtcclxuXHRib3JkZXI6IG5vbmU7XHJcbn1cclxuLmNhbGVuZGFycy1tb250aCBhIHtcclxuXHRkaXNwbGF5OiBibG9jaztcclxuXHR3aWR0aDogMTAwJTtcclxuXHRwYWRkaW5nOiAwLjEyNWVtIDBlbTtcclxuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xyXG5cdGNvbG9yOiAjMDAwO1xyXG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxufVxyXG4uY2FsZW5kYXJzLW1vbnRoIHNwYW4ge1xyXG5cdGRpc3BsYXk6IGJsb2NrO1xyXG5cdHdpZHRoOiAxMDAlO1xyXG5cdHBhZGRpbmc6IDAuMTI1ZW0gMGVtO1xyXG59XHJcbi5jYWxlbmRhcnMtbW9udGggdGQgc3BhbiB7XHJcblx0Y29sb3I6ICM4ODg7XHJcbn1cclxuLmNhbGVuZGFycy1tb250aCB0ZCAuY2FsZW5kYXJzLW90aGVyLW1vbnRoIHtcclxuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG59XHJcbi5jYWxlbmRhcnMtbW9udGggdGQgLmNhbGVuZGFycy13ZWVrZW5kIHtcclxuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkO1xyXG59XHJcbi5jYWxlbmRhcnMtbW9udGggdGQgLmNhbGVuZGFycy10b2RheSB7XHJcblx0YmFja2dyb3VuZC1jb2xvcjogI2YwYzBjMDtcclxufVxyXG4uY2FsZW5kYXJzLW1vbnRoIHRkIC5jYWxlbmRhcnMtaGlnaGxpZ2h0IHtcclxuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjA4MDgwO1xyXG59XHJcbi5jYWxlbmRhcnMtbW9udGggdGQgLmNhbGVuZGFycy1zZWxlY3RlZCB7XHJcblx0YmFja2dyb3VuZC1jb2xvcjogIzc3NztcclxuXHRjb2xvcjogI2ZmZjtcclxufVxyXG4uY2FsZW5kYXJzLW1vbnRoIHRoLmNhbGVuZGFycy13ZWVrIHtcclxuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjNzc3O1xyXG5cdGNvbG9yOiAjZmZmO1xyXG59XHJcbi5jYWxlbmRhcnMtc3RhdHVzIHtcclxuXHRjbGVhcjogYm90aDtcclxuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkO1xyXG5cdHRleHQtYWxpZ246IGNlbnRlcjtcclxufVxyXG4uY2FsZW5kYXJzLWNsZWFyLWZpeCB7XHJcblx0Y2xlYXI6IGJvdGg7XHJcbn1cclxuIiwiLyogVGhlbWVSb2xsZXIgb3ZlcnJpZGUgc3R5bGUgc2hlZXQgZm9yIGpRdWVyeSBDYWxlbmRhcnMgUGlja2VyIHYyLjAuMC4gKi9cclxuLnVpLWRhdGVwaWNrZXIge1xyXG5cdGRpc3BsYXk6IGJsb2NrO1xyXG59XHJcbiN1aS1kYXRlcGlja2VyLWRpdixcclxuLnVpLWRhdGVwaWNrZXItaW5saW5lIHtcclxuXHR3aWR0aDogMTdlbTtcclxuXHRmb250LXNpemU6IDc1JTtcclxufVxyXG4jdWktZGF0ZXBpY2tlci1kaXYge1xyXG5cdHotaW5kZXg6IDEwMDtcclxufVxyXG4udWktZGF0ZXBpY2tlci1pbmxpbmUge1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG59XHJcbi51aS1kYXRlcGlja2VyLXJ0bCB7XHJcblx0ZGlyZWN0aW9uOiBydGw7XHJcbn1cclxuI3VpLWRhdGVwaWNrZXItZGl2IGEsXHJcbi51aS1kYXRlcGlja2VyLWlubGluZSBhIHtcclxuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItcHJvbXB0IHtcclxuXHRoZWlnaHQ6IDEuNWVtO1xyXG5cdHBhZGRpbmctdG9wOiAwLjI1ZW07XHJcblx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcbmJ1dHRvbi51aS1kYXRlcGlja2VyLWNtZCB7XHJcblx0aGVpZ2h0OiAyZW07XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItY21kLWNsZWFyIHtcclxuXHRmbG9hdDogbGVmdDtcclxuXHRtYXJnaW4tbGVmdDogMC4yNWVtO1xyXG59XHJcbi51aS1kYXRlcGlja2VyLWNtZC1jbG9zZSB7XHJcblx0ZmxvYXQ6IHJpZ2h0O1xyXG5cdG1hcmdpbi1yaWdodDogMC4yNWVtO1xyXG59XHJcbi51aS1kYXRlcGlja2VyLWNtZC1wcmV2IHtcclxuXHRwb3NpdGlvbjogc3RhdGljO1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdHdpZHRoOiAzMCU7XHJcblx0aGVpZ2h0OiBhdXRvO1xyXG5cdG1hcmdpbi1sZWZ0OiAxJTtcclxufVxyXG4udWktZGF0ZXBpY2tlci1jbWQtbmV4dCB7XHJcblx0cG9zaXRpb246IHN0YXRpYztcclxuXHRmbG9hdDogcmlnaHQ7XHJcblx0d2lkdGg6IDMwJTtcclxuXHRoZWlnaHQ6IGF1dG87XHJcblx0bWFyZ2luLXJpZ2h0OiAxJTtcclxuXHR0ZXh0LWFsaWduOiByaWdodDtcclxufVxyXG4udWktZGF0ZXBpY2tlci1jbWQtY3VycmVudCxcclxuLnVpLWRhdGVwaWNrZXItY21kLXRvZGF5IHtcclxuXHRmbG9hdDogbGVmdDtcclxuXHR3aWR0aDogMzclO1xyXG5cdHRleHQtYWxpZ246IGNlbnRlcjtcclxufVxyXG4udWktZGF0ZXBpY2tlci1tb250aC1uYXYge1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdHRleHQtYWxpZ246IGNlbnRlcjtcclxufVxyXG4udWktZGF0ZXBpY2tlci1tb250aC1uYXYgZGl2IHtcclxuXHRmbG9hdDogbGVmdDtcclxuXHR3aWR0aDogMTIuNSU7XHJcblx0bWFyZ2luOiAxJTtcclxuXHRwYWRkaW5nOiAxJTtcclxufVxyXG4udWktZGF0ZXBpY2tlci1tb250aC1uYXYgc3BhbiB7XHJcblx0Y29sb3I6ICM4ODg7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItcm93LWJyZWFrIHtcclxuXHR3aWR0aDogMTAwJTtcclxuXHRmb250LXNpemU6IDEwMCU7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItZ3JvdXAge1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdHdpZHRoOiAxN2VtO1xyXG59XHJcbi51aS1kYXRlcGlja2VyLWdyb3VwIC51aS1kYXRlcGlja2VyLWhlYWRlciB7XHJcblx0aGVpZ2h0OiAxLjVlbTtcclxuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgc2VsZWN0LFxyXG4udWktZGF0ZXBpY2tlci1pbmxpbmUgc2VsZWN0IHtcclxuXHR3aWR0aDogYXV0bztcclxuXHRoZWlnaHQ6IDEuNjZlbTtcclxuXHRib3JkZXI6IG5vbmU7XHJcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgdGgge1xyXG5cdHBhZGRpbmc6IDAuNWVtIDAuM2VtO1xyXG59XHJcbi51aS1kYXRlcGlja2VyIHRkLFxyXG4udWktZGF0ZXBpY2tlciB0ZCBhLFxyXG4udWktZGF0ZXBpY2tlciB0ZCBzcGFuIHtcclxuXHRib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcclxuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItc3RhdHVzIHtcclxuXHRwYWRkaW5nOiAwLjI1ZW0gMGVtO1xyXG5cdHRleHQtYWxpZ246IGNlbnRlcjtcclxufVxyXG4udWktZGF0ZXBpY2tlciAudWktaGVscGVyLWNsZWFyZml4IHtcclxuXHRjbGVhcjogYm90aDtcclxufVxyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */ diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Styles/TimeEntry/jquery.timeentry.css b/src/Orchard.Web/Modules/Orchard.Resources/Styles/TimeEntry/jquery.timeentry.css index 08d49e45f7b..3a422d36c3c 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Styles/TimeEntry/jquery.timeentry.css +++ b/src/Orchard.Web/Modules/Orchard.Resources/Styles/TimeEntry/jquery.timeentry.css @@ -9,4 +9,4 @@ margin-left: 2px; } -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS50aW1lZW50cnkuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBLDZCQUFBO0FBQ0E7Q0FDQSx1QkFBQTtDQUNBLGlCQUFBO0NBQ0EiLCJmaWxlIjoianF1ZXJ5LnRpbWVlbnRyeS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBUaW1lRW50cnkgc3R5bGVzIHYyLjAuMCAqL1xuLnRpbWVFbnRyeS1jb250cm9sIHtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0bWFyZ2luLWxlZnQ6IDJweDtcbn1cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== */ +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS50aW1lZW50cnkuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBLDZCQUFBO0FBQ0E7Q0FDQSx1QkFBQTtDQUNBLGlCQUFBO0NBQ0EiLCJmaWxlIjoianF1ZXJ5LnRpbWVlbnRyeS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBUaW1lRW50cnkgc3R5bGVzIHYyLjAuMCAqL1xyXG4udGltZUVudHJ5LWNvbnRyb2wge1xyXG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcblx0bWFyZ2luLWxlZnQ6IDJweDtcclxufVxyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */ diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery-datetime-editor.css b/src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery-datetime-editor.css index 26d492168d4..320605ed87d 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery-datetime-editor.css +++ b/src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery-datetime-editor.css @@ -8,4 +8,4 @@ top: -2px; margin-left: 4px; } -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS1kYXRldGltZS1lZGl0b3IuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0lBQ0EsbUJBQUE7SUFDQSxVQUFBO0lBQ0EsaUJBQUE7Q0FDQSIsImZpbGUiOiJqcXVlcnktZGF0ZXRpbWUtZWRpdG9yLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi50aW1lIC50aW1lRW50cnlfY29udHJvbCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogLTJweDtcbiAgICBtYXJnaW4tbGVmdDogNHB4O1xufSJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== */ +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS1kYXRldGltZS1lZGl0b3IuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0lBQ0EsbUJBQUE7SUFDQSxVQUFBO0lBQ0EsaUJBQUE7Q0FDQSIsImZpbGUiOiJqcXVlcnktZGF0ZXRpbWUtZWRpdG9yLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi50aW1lIC50aW1lRW50cnlfY29udHJvbCB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB0b3A6IC0ycHg7XHJcbiAgICBtYXJnaW4tbGVmdDogNHB4O1xyXG59Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */ diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery.colorbox.css b/src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery.colorbox.css index 4c79ba2abab..13109c54c01 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery.colorbox.css +++ b/src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery.colorbox.css @@ -61,4 +61,4 @@ .cboxSlideshow_on #cboxSlideshow:hover{background-position:-150px 0px;} .cboxSlideshow_off #cboxSlideshow{background-position:-150px -25px; right:27px;} .cboxSlideshow_off #cboxSlideshow:hover{background-position:-125px 0px;} -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jb2xvcmJveC5jc3MiLCJjb2xvcmJveC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFDTEE7OztFQUdBO0FBQ0Esc0NBQUEsa0JBQUEsQ0FBQSxNQUFBLENBQUEsT0FBQSxDQUFBLGFBQUEsQ0FBQSxnQkFBQSxDQUFBO0FBQ0EsY0FBQSxlQUFBLENBQUE7QUFDQSxhQUFBLGVBQUEsQ0FBQSxXQUFBLENBQUEsWUFBQSxDQUFBO0FBQ0EsaUNBQUEsV0FBQSxDQUFBO0FBQ0EsYUFBQSxrQkFBQSxDQUFBO0FBQ0EsbUJBQUEsY0FBQSxDQUFBLGtDQUFBLENBQUE7QUFDQSxXQUFBLFNBQUEsQ0FBQTtBQUNBLHlDQUFBLGtCQUFBLENBQUEsTUFBQSxDQUFBLE9BQUEsQ0FBQSxXQUFBLENBQUEsWUFBQSxDQUFBO0FBQ0EscURBQUEsZUFBQSxDQUFBO0FBQ0EsV0FBQSxXQUFBLENBQUEsWUFBQSxDQUFBLFNBQUEsQ0FBQSxjQUFBLENBQUEsZUFBQSxDQUFBLCtCQUFBLENBQUE7QUFDQSxZQUFBLFdBQUEsQ0FBQSxZQUFBLENBQUEsY0FBQSxDQUFBLFNBQUEsQ0FBQSxVQUFBLENBQUEsU0FBQSxDQUFBO0FBQ0EsNENBQUEsdUJBQUEsQ0FBQSw0QkFBQSxDQUFBLCtCQUFBLENBQUE7O0FBRUE7Ozs7RUFJQTtBQUNBLGFBQUEsZ0JBQUEsQ0FBQTtBQUNBLFVBQUEsVUFBQSxDQUFBO0lBQ0EsYUFBQSxXQUFBLENBQUEsWUFBQSxDQUFBLDJEQUFBLENBQUE7SUFDQSxlQUFBLFlBQUEsQ0FBQSw2REFBQSxDQUFBO0lBQ0EsY0FBQSxXQUFBLENBQUEsWUFBQSxDQUFBLCtEQUFBLENBQUE7SUFDQSxnQkFBQSxXQUFBLENBQUEsWUFBQSxDQUFBLCtEQUFBLENBQUE7SUFDQSxrQkFBQSxZQUFBLENBQUEsZ0VBQUEsQ0FBQTtJQUNBLGlCQUFBLFdBQUEsQ0FBQSxZQUFBLENBQUEsbUVBQUEsQ0FBQTtJQUNBLGdCQUFBLFdBQUEsQ0FBQSwrREFBQSxDQUFBO0lBQ0EsaUJBQUEsV0FBQSxDQUFBLCtEQUFBLENBQUE7SUFDQSxhQUFBLGdCQUFBLENBQUEsaUJBQUEsQ0FBQTtRQUNBLFlBQUEsZ0JBQUEsQ0FBQTtRQUNBLFdBQUEsYUFBQSxDQUFBLHNCQUFBLENBQUE7UUFDQSxtQkFBQSxrQkFBQSxDQUFBO1FBQ0Esb0JBQUEsK0VBQUEsQ0FBQTtRQUNBLG9CQUFBLG9FQUFBLENBQUE7UUFDQSxXQUFBLGtCQUFBLENBQUEsYUFBQSxDQUFBLE9BQUEsQ0FBQSxrQkFBQSxDQUFBLFdBQUEsQ0FBQSxpQkFBQSxDQUFBLGNBQUEsQ0FBQTtRQUNBLGFBQUEsa0JBQUEsQ0FBQSxhQUFBLENBQUEsVUFBQSxDQUFBLGlCQUFBLENBQUEsY0FBQSxDQUFBOztRQUVBLDRHQUFBO1FBQ0Esc0RBQUEsU0FBQSxDQUFBLFVBQUEsQ0FBQSxTQUFBLENBQUEsaUJBQUEsRUFBQSxrQkFBQSxDQUFBLGFBQUEsQ0FBQSwrREFBQSxDQUFBLFdBQUEsQ0FBQSxZQUFBLENBQUEsb0JBQUEsQ0FBQTs7UUFFQSxpR0FBQTtRQUNBLGtGQUFBLFVBQUEsQ0FBQTs7UUFFQSxjQUFBLFNBQUEsQ0FBQSxpQ0FBQSxDQUFBO1FBQ0Esb0JBQUEsOEJBQUEsQ0FBQTtRQUNBLFVBQUEsVUFBQSxDQUFBLGdDQUFBLENBQUE7UUFDQSxnQkFBQSw4QkFBQSxDQUFBO1FBQ0EsV0FBQSxRQUFBLENBQUEsaUNBQUEsQ0FBQTtRQUNBLGlCQUFBLCtCQUFBLENBQUE7O1FBRUEsaUNBQUEsK0JBQUEsQ0FBQSxXQUFBLENBQUE7UUFDQSx1Q0FBQSwrQkFBQSxDQUFBO1FBQ0Esa0NBQUEsaUNBQUEsQ0FBQSxXQUFBLENBQUE7UUFDQSx3Q0FBQSwrQkFBQSxDQUFBIiwiZmlsZSI6ImpxdWVyeS5jb2xvcmJveC5jc3MiLCJzb3VyY2VzQ29udGVudCI6W251bGwsIi8qXG4gICAgQ29sb3Jib3ggQ29yZSBTdHlsZTpcbiAgICBUaGUgZm9sbG93aW5nIENTUyBpcyBjb25zaXN0ZW50IGJldHdlZW4gZXhhbXBsZSB0aGVtZXMgYW5kIHNob3VsZCBub3QgYmUgYWx0ZXJlZC5cbiovXG4jY29sb3Jib3gsICNjYm94T3ZlcmxheSwgI2Nib3hXcmFwcGVye3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MDsgbGVmdDowOyB6LWluZGV4Ojk5OTk7IG92ZXJmbG93OmhpZGRlbjt9XG4jY2JveFdyYXBwZXIge21heC13aWR0aDpub25lO31cbiNjYm94T3ZlcmxheXtwb3NpdGlvbjpmaXhlZDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7fVxuI2Nib3hNaWRkbGVMZWZ0LCAjY2JveEJvdHRvbUxlZnR7Y2xlYXI6bGVmdDt9XG4jY2JveENvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7fVxuI2Nib3hMb2FkZWRDb250ZW50e292ZXJmbG93OmF1dG87IC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDt9XG4jY2JveFRpdGxle21hcmdpbjowO31cbiNjYm94TG9hZGluZ092ZXJsYXksICNjYm94TG9hZGluZ0dyYXBoaWN7cG9zaXRpb246YWJzb2x1dGU7IHRvcDowOyBsZWZ0OjA7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlO31cbiNjYm94UHJldmlvdXMsICNjYm94TmV4dCwgI2Nib3hDbG9zZSwgI2Nib3hTbGlkZXNob3d7Y3Vyc29yOnBvaW50ZXI7fVxuLmNib3hQaG90b3tmbG9hdDpsZWZ0OyBtYXJnaW46YXV0bzsgYm9yZGVyOjA7IGRpc3BsYXk6YmxvY2s7IG1heC13aWR0aDpub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOmJpY3ViaWM7fVxuLmNib3hJZnJhbWV7d2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7IGRpc3BsYXk6YmxvY2s7IGJvcmRlcjowOyBwYWRkaW5nOjA7IG1hcmdpbjowO31cbiNjb2xvcmJveCwgI2Nib3hDb250ZW50LCAjY2JveExvYWRlZENvbnRlbnR7Ym94LXNpemluZzpjb250ZW50LWJveDsgLW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94OyAtd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7fVxuXG4vKiBcbiAgICBVc2VyIFN0eWxlOlxuICAgIENoYW5nZSB0aGUgZm9sbG93aW5nIHN0eWxlcyB0byBtb2RpZnkgdGhlIGFwcGVhcmFuY2Ugb2YgQ29sb3Jib3guICBUaGV5IGFyZVxuICAgIG9yZGVyZWQgJiB0YWJiZWQgaW4gYSB3YXkgdGhhdCByZXByZXNlbnRzIHRoZSBuZXN0aW5nIG9mIHRoZSBnZW5lcmF0ZWQgSFRNTC5cbiovXG4jY2JveE92ZXJsYXl7YmFja2dyb3VuZDojMDAwO31cbiNjb2xvcmJveHtvdXRsaW5lOjA7fVxuICAgICNjYm94VG9wTGVmdHt3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgYmFja2dyb3VuZDp1cmwoaW1hZ2VzL2NvbG9yYm94L2NvbnRyb2xzLnBuZykgbm8tcmVwZWF0IDAgMDt9XG4gICAgI2Nib3hUb3BDZW50ZXJ7aGVpZ2h0OjE0cHg7IGJhY2tncm91bmQ6dXJsKGltYWdlcy9jb2xvcmJveC9ib3JkZXIucG5nKSByZXBlYXQteCB0b3AgbGVmdDt9XG4gICAgI2Nib3hUb3BSaWdodHt3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgYmFja2dyb3VuZDp1cmwoaW1hZ2VzL2NvbG9yYm94L2NvbnRyb2xzLnBuZykgbm8tcmVwZWF0IC0zNnB4IDA7fVxuICAgICNjYm94Qm90dG9tTGVmdHt3aWR0aDoxNHB4OyBoZWlnaHQ6NDNweDsgYmFja2dyb3VuZDp1cmwoaW1hZ2VzL2NvbG9yYm94L2NvbnRyb2xzLnBuZykgbm8tcmVwZWF0IDAgLTMycHg7fVxuICAgICNjYm94Qm90dG9tQ2VudGVye2hlaWdodDo0M3B4OyBiYWNrZ3JvdW5kOnVybChpbWFnZXMvY29sb3Jib3gvYm9yZGVyLnBuZykgcmVwZWF0LXggYm90dG9tIGxlZnQ7fVxuICAgICNjYm94Qm90dG9tUmlnaHR7d2lkdGg6MTRweDsgaGVpZ2h0OjQzcHg7IGJhY2tncm91bmQ6dXJsKGltYWdlcy9jb2xvcmJveC9jb250cm9scy5wbmcpIG5vLXJlcGVhdCAtMzZweCAtMzJweDt9XG4gICAgI2Nib3hNaWRkbGVMZWZ0e3dpZHRoOjE0cHg7IGJhY2tncm91bmQ6dXJsKGltYWdlcy9jb2xvcmJveC9jb250cm9scy5wbmcpIHJlcGVhdC15IC0xNzVweCAwO31cbiAgICAjY2JveE1pZGRsZVJpZ2h0e3dpZHRoOjE0cHg7IGJhY2tncm91bmQ6dXJsKGltYWdlcy9jb2xvcmJveC9jb250cm9scy5wbmcpIHJlcGVhdC15IC0yMTFweCAwO31cbiAgICAjY2JveENvbnRlbnR7YmFja2dyb3VuZDojZmZmOyBvdmVyZmxvdzp2aXNpYmxlO31cbiAgICAgICAgLmNib3hJZnJhbWV7YmFja2dyb3VuZDojZmZmO31cbiAgICAgICAgI2Nib3hFcnJvcntwYWRkaW5nOjUwcHg7IGJvcmRlcjoxcHggc29saWQgI2NjYzt9XG4gICAgICAgICNjYm94TG9hZGVkQ29udGVudHttYXJnaW4tYm90dG9tOjVweDt9XG4gICAgICAgICNjYm94TG9hZGluZ092ZXJsYXl7YmFja2dyb3VuZDp1cmwoaW1hZ2VzL2NvbG9yYm94L2xvYWRpbmdfYmFja2dyb3VuZC5wbmcpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyO31cbiAgICAgICAgI2Nib3hMb2FkaW5nR3JhcGhpY3tiYWNrZ3JvdW5kOnVybChpbWFnZXMvY29sb3Jib3gvbG9hZGluZy5naWYpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyO31cbiAgICAgICAgI2Nib3hUaXRsZXtwb3NpdGlvbjphYnNvbHV0ZTsgYm90dG9tOi0yNXB4OyBsZWZ0OjA7IHRleHQtYWxpZ246Y2VudGVyOyB3aWR0aDoxMDAlOyBmb250LXdlaWdodDpib2xkOyBjb2xvcjojN0M3QzdDO31cbiAgICAgICAgI2Nib3hDdXJyZW50e3Bvc2l0aW9uOmFic29sdXRlOyBib3R0b206LTI1cHg7IGxlZnQ6NThweDsgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6IzdDN0M3Qzt9XG5cbiAgICAgICAgLyogdGhlc2UgZWxlbWVudHMgYXJlIGJ1dHRvbnMsIGFuZCBtYXkgbmVlZCB0byBoYXZlIGFkZGl0aW9uYWwgc3R5bGVzIHJlc2V0IHRvIGF2b2lkIHVud2FudGVkIGJhc2Ugc3R5bGVzICovXG4gICAgICAgICNjYm94UHJldmlvdXMsICNjYm94TmV4dCwgI2Nib3hTbGlkZXNob3csICNjYm94Q2xvc2Uge2JvcmRlcjowOyBwYWRkaW5nOjA7IG1hcmdpbjowOyBvdmVyZmxvdzp2aXNpYmxlOyAgcG9zaXRpb246YWJzb2x1dGU7IGJvdHRvbTotMjlweDsgYmFja2dyb3VuZDp1cmwoaW1hZ2VzL2NvbG9yYm94L2NvbnRyb2xzLnBuZykgbm8tcmVwZWF0IDBweCAwcHg7IHdpZHRoOjIzcHg7IGhlaWdodDoyM3B4OyB0ZXh0LWluZGVudDotOTk5OXB4O31cbiAgICAgICAgXG4gICAgICAgIC8qIGF2b2lkIG91dGxpbmVzIG9uIDphY3RpdmUgKG1vdXNlY2xpY2spLCBidXQgcHJlc2VydmUgb3V0bGluZXMgb24gOmZvY3VzICh0YWJiZWQgbmF2aWdhdGluZykgKi9cbiAgICAgICAgI2Nib3hQcmV2aW91czphY3RpdmUsICNjYm94TmV4dDphY3RpdmUsICNjYm94U2xpZGVzaG93OmFjdGl2ZSwgI2Nib3hDbG9zZTphY3RpdmUge291dGxpbmU6MDt9XG5cbiAgICAgICAgI2Nib3hQcmV2aW91c3tsZWZ0OjBweDsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTUxcHggLTI1cHg7fVxuICAgICAgICAjY2JveFByZXZpb3VzOmhvdmVye2JhY2tncm91bmQtcG9zaXRpb246LTUxcHggMHB4O31cbiAgICAgICAgI2Nib3hOZXh0e2xlZnQ6MjdweDsgYmFja2dyb3VuZC1wb3NpdGlvbjotNzVweCAtMjVweDt9XG4gICAgICAgICNjYm94TmV4dDpob3ZlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi03NXB4IDBweDt9XG4gICAgICAgICNjYm94Q2xvc2V7cmlnaHQ6MDsgYmFja2dyb3VuZC1wb3NpdGlvbjotMTAwcHggLTI1cHg7fVxuICAgICAgICAjY2JveENsb3NlOmhvdmVye2JhY2tncm91bmQtcG9zaXRpb246LTEwMHB4IDBweDt9XG5cbiAgICAgICAgLmNib3hTbGlkZXNob3dfb24gI2Nib3hTbGlkZXNob3d7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI1cHggMHB4OyByaWdodDoyN3B4O31cbiAgICAgICAgLmNib3hTbGlkZXNob3dfb24gI2Nib3hTbGlkZXNob3c6aG92ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTUwcHggMHB4O31cbiAgICAgICAgLmNib3hTbGlkZXNob3dfb2ZmICNjYm94U2xpZGVzaG93e2JhY2tncm91bmQtcG9zaXRpb246LTE1MHB4IC0yNXB4OyByaWdodDoyN3B4O31cbiAgICAgICAgLmNib3hTbGlkZXNob3dfb2ZmICNjYm94U2xpZGVzaG93OmhvdmVye2JhY2tncm91bmQtcG9zaXRpb246LTEyNXB4IDBweDt9Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */ +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jb2xvcmJveC5jc3MiLCJjb2xvcmJveC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFDTEE7OztFQUdBO0FBQ0Esc0NBQUEsa0JBQUEsQ0FBQSxNQUFBLENBQUEsT0FBQSxDQUFBLGFBQUEsQ0FBQSxnQkFBQSxDQUFBO0FBQ0EsY0FBQSxlQUFBLENBQUE7QUFDQSxhQUFBLGVBQUEsQ0FBQSxXQUFBLENBQUEsWUFBQSxDQUFBO0FBQ0EsaUNBQUEsV0FBQSxDQUFBO0FBQ0EsYUFBQSxrQkFBQSxDQUFBO0FBQ0EsbUJBQUEsY0FBQSxDQUFBLGtDQUFBLENBQUE7QUFDQSxXQUFBLFNBQUEsQ0FBQTtBQUNBLHlDQUFBLGtCQUFBLENBQUEsTUFBQSxDQUFBLE9BQUEsQ0FBQSxXQUFBLENBQUEsWUFBQSxDQUFBO0FBQ0EscURBQUEsZUFBQSxDQUFBO0FBQ0EsV0FBQSxXQUFBLENBQUEsWUFBQSxDQUFBLFNBQUEsQ0FBQSxjQUFBLENBQUEsZUFBQSxDQUFBLCtCQUFBLENBQUE7QUFDQSxZQUFBLFdBQUEsQ0FBQSxZQUFBLENBQUEsY0FBQSxDQUFBLFNBQUEsQ0FBQSxVQUFBLENBQUEsU0FBQSxDQUFBO0FBQ0EsNENBQUEsdUJBQUEsQ0FBQSw0QkFBQSxDQUFBLCtCQUFBLENBQUE7O0FBRUE7Ozs7RUFJQTtBQUNBLGFBQUEsZ0JBQUEsQ0FBQTtBQUNBLFVBQUEsVUFBQSxDQUFBO0lBQ0EsYUFBQSxXQUFBLENBQUEsWUFBQSxDQUFBLDJEQUFBLENBQUE7SUFDQSxlQUFBLFlBQUEsQ0FBQSw2REFBQSxDQUFBO0lBQ0EsY0FBQSxXQUFBLENBQUEsWUFBQSxDQUFBLCtEQUFBLENBQUE7SUFDQSxnQkFBQSxXQUFBLENBQUEsWUFBQSxDQUFBLCtEQUFBLENBQUE7SUFDQSxrQkFBQSxZQUFBLENBQUEsZ0VBQUEsQ0FBQTtJQUNBLGlCQUFBLFdBQUEsQ0FBQSxZQUFBLENBQUEsbUVBQUEsQ0FBQTtJQUNBLGdCQUFBLFdBQUEsQ0FBQSwrREFBQSxDQUFBO0lBQ0EsaUJBQUEsV0FBQSxDQUFBLCtEQUFBLENBQUE7SUFDQSxhQUFBLGdCQUFBLENBQUEsaUJBQUEsQ0FBQTtRQUNBLFlBQUEsZ0JBQUEsQ0FBQTtRQUNBLFdBQUEsYUFBQSxDQUFBLHNCQUFBLENBQUE7UUFDQSxtQkFBQSxrQkFBQSxDQUFBO1FBQ0Esb0JBQUEsK0VBQUEsQ0FBQTtRQUNBLG9CQUFBLG9FQUFBLENBQUE7UUFDQSxXQUFBLGtCQUFBLENBQUEsYUFBQSxDQUFBLE9BQUEsQ0FBQSxrQkFBQSxDQUFBLFdBQUEsQ0FBQSxpQkFBQSxDQUFBLGNBQUEsQ0FBQTtRQUNBLGFBQUEsa0JBQUEsQ0FBQSxhQUFBLENBQUEsVUFBQSxDQUFBLGlCQUFBLENBQUEsY0FBQSxDQUFBOztRQUVBLDRHQUFBO1FBQ0Esc0RBQUEsU0FBQSxDQUFBLFVBQUEsQ0FBQSxTQUFBLENBQUEsaUJBQUEsRUFBQSxrQkFBQSxDQUFBLGFBQUEsQ0FBQSwrREFBQSxDQUFBLFdBQUEsQ0FBQSxZQUFBLENBQUEsb0JBQUEsQ0FBQTs7UUFFQSxpR0FBQTtRQUNBLGtGQUFBLFVBQUEsQ0FBQTs7UUFFQSxjQUFBLFNBQUEsQ0FBQSxpQ0FBQSxDQUFBO1FBQ0Esb0JBQUEsOEJBQUEsQ0FBQTtRQUNBLFVBQUEsVUFBQSxDQUFBLGdDQUFBLENBQUE7UUFDQSxnQkFBQSw4QkFBQSxDQUFBO1FBQ0EsV0FBQSxRQUFBLENBQUEsaUNBQUEsQ0FBQTtRQUNBLGlCQUFBLCtCQUFBLENBQUE7O1FBRUEsaUNBQUEsK0JBQUEsQ0FBQSxXQUFBLENBQUE7UUFDQSx1Q0FBQSwrQkFBQSxDQUFBO1FBQ0Esa0NBQUEsaUNBQUEsQ0FBQSxXQUFBLENBQUE7UUFDQSx3Q0FBQSwrQkFBQSxDQUFBIiwiZmlsZSI6ImpxdWVyeS5jb2xvcmJveC5jc3MiLCJzb3VyY2VzQ29udGVudCI6W251bGwsIi8qXHJcbiAgICBDb2xvcmJveCBDb3JlIFN0eWxlOlxyXG4gICAgVGhlIGZvbGxvd2luZyBDU1MgaXMgY29uc2lzdGVudCBiZXR3ZWVuIGV4YW1wbGUgdGhlbWVzIGFuZCBzaG91bGQgbm90IGJlIGFsdGVyZWQuXHJcbiovXHJcbiNjb2xvcmJveCwgI2Nib3hPdmVybGF5LCAjY2JveFdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7IHRvcDowOyBsZWZ0OjA7IHotaW5kZXg6OTk5OTsgb3ZlcmZsb3c6aGlkZGVuO31cclxuI2Nib3hXcmFwcGVyIHttYXgtd2lkdGg6bm9uZTt9XHJcbiNjYm94T3ZlcmxheXtwb3NpdGlvbjpmaXhlZDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7fVxyXG4jY2JveE1pZGRsZUxlZnQsICNjYm94Qm90dG9tTGVmdHtjbGVhcjpsZWZ0O31cclxuI2Nib3hDb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO31cclxuI2Nib3hMb2FkZWRDb250ZW50e292ZXJmbG93OmF1dG87IC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDt9XHJcbiNjYm94VGl0bGV7bWFyZ2luOjA7fVxyXG4jY2JveExvYWRpbmdPdmVybGF5LCAjY2JveExvYWRpbmdHcmFwaGlje3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MDsgbGVmdDowOyB3aWR0aDoxMDAlOyBoZWlnaHQ6MTAwJTt9XHJcbiNjYm94UHJldmlvdXMsICNjYm94TmV4dCwgI2Nib3hDbG9zZSwgI2Nib3hTbGlkZXNob3d7Y3Vyc29yOnBvaW50ZXI7fVxyXG4uY2JveFBob3Rve2Zsb2F0OmxlZnQ7IG1hcmdpbjphdXRvOyBib3JkZXI6MDsgZGlzcGxheTpibG9jazsgbWF4LXdpZHRoOm5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6YmljdWJpYzt9XHJcbi5jYm94SWZyYW1le3dpZHRoOjEwMCU7IGhlaWdodDoxMDAlOyBkaXNwbGF5OmJsb2NrOyBib3JkZXI6MDsgcGFkZGluZzowOyBtYXJnaW46MDt9XHJcbiNjb2xvcmJveCwgI2Nib3hDb250ZW50LCAjY2JveExvYWRlZENvbnRlbnR7Ym94LXNpemluZzpjb250ZW50LWJveDsgLW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94OyAtd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7fVxyXG5cclxuLyogXHJcbiAgICBVc2VyIFN0eWxlOlxyXG4gICAgQ2hhbmdlIHRoZSBmb2xsb3dpbmcgc3R5bGVzIHRvIG1vZGlmeSB0aGUgYXBwZWFyYW5jZSBvZiBDb2xvcmJveC4gIFRoZXkgYXJlXHJcbiAgICBvcmRlcmVkICYgdGFiYmVkIGluIGEgd2F5IHRoYXQgcmVwcmVzZW50cyB0aGUgbmVzdGluZyBvZiB0aGUgZ2VuZXJhdGVkIEhUTUwuXHJcbiovXHJcbiNjYm94T3ZlcmxheXtiYWNrZ3JvdW5kOiMwMDA7fVxyXG4jY29sb3Jib3h7b3V0bGluZTowO31cclxuICAgICNjYm94VG9wTGVmdHt3aWR0aDoxNHB4OyBoZWlnaHQ6MTRweDsgYmFja2dyb3VuZDp1cmwoaW1hZ2VzL2NvbG9yYm94L2NvbnRyb2xzLnBuZykgbm8tcmVwZWF0IDAgMDt9XHJcbiAgICAjY2JveFRvcENlbnRlcntoZWlnaHQ6MTRweDsgYmFja2dyb3VuZDp1cmwoaW1hZ2VzL2NvbG9yYm94L2JvcmRlci5wbmcpIHJlcGVhdC14IHRvcCBsZWZ0O31cclxuICAgICNjYm94VG9wUmlnaHR7d2lkdGg6MTRweDsgaGVpZ2h0OjE0cHg7IGJhY2tncm91bmQ6dXJsKGltYWdlcy9jb2xvcmJveC9jb250cm9scy5wbmcpIG5vLXJlcGVhdCAtMzZweCAwO31cclxuICAgICNjYm94Qm90dG9tTGVmdHt3aWR0aDoxNHB4OyBoZWlnaHQ6NDNweDsgYmFja2dyb3VuZDp1cmwoaW1hZ2VzL2NvbG9yYm94L2NvbnRyb2xzLnBuZykgbm8tcmVwZWF0IDAgLTMycHg7fVxyXG4gICAgI2Nib3hCb3R0b21DZW50ZXJ7aGVpZ2h0OjQzcHg7IGJhY2tncm91bmQ6dXJsKGltYWdlcy9jb2xvcmJveC9ib3JkZXIucG5nKSByZXBlYXQteCBib3R0b20gbGVmdDt9XHJcbiAgICAjY2JveEJvdHRvbVJpZ2h0e3dpZHRoOjE0cHg7IGhlaWdodDo0M3B4OyBiYWNrZ3JvdW5kOnVybChpbWFnZXMvY29sb3Jib3gvY29udHJvbHMucG5nKSBuby1yZXBlYXQgLTM2cHggLTMycHg7fVxyXG4gICAgI2Nib3hNaWRkbGVMZWZ0e3dpZHRoOjE0cHg7IGJhY2tncm91bmQ6dXJsKGltYWdlcy9jb2xvcmJveC9jb250cm9scy5wbmcpIHJlcGVhdC15IC0xNzVweCAwO31cclxuICAgICNjYm94TWlkZGxlUmlnaHR7d2lkdGg6MTRweDsgYmFja2dyb3VuZDp1cmwoaW1hZ2VzL2NvbG9yYm94L2NvbnRyb2xzLnBuZykgcmVwZWF0LXkgLTIxMXB4IDA7fVxyXG4gICAgI2Nib3hDb250ZW50e2JhY2tncm91bmQ6I2ZmZjsgb3ZlcmZsb3c6dmlzaWJsZTt9XHJcbiAgICAgICAgLmNib3hJZnJhbWV7YmFja2dyb3VuZDojZmZmO31cclxuICAgICAgICAjY2JveEVycm9ye3BhZGRpbmc6NTBweDsgYm9yZGVyOjFweCBzb2xpZCAjY2NjO31cclxuICAgICAgICAjY2JveExvYWRlZENvbnRlbnR7bWFyZ2luLWJvdHRvbTo1cHg7fVxyXG4gICAgICAgICNjYm94TG9hZGluZ092ZXJsYXl7YmFja2dyb3VuZDp1cmwoaW1hZ2VzL2NvbG9yYm94L2xvYWRpbmdfYmFja2dyb3VuZC5wbmcpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyO31cclxuICAgICAgICAjY2JveExvYWRpbmdHcmFwaGlje2JhY2tncm91bmQ6dXJsKGltYWdlcy9jb2xvcmJveC9sb2FkaW5nLmdpZikgbm8tcmVwZWF0IGNlbnRlciBjZW50ZXI7fVxyXG4gICAgICAgICNjYm94VGl0bGV7cG9zaXRpb246YWJzb2x1dGU7IGJvdHRvbTotMjVweDsgbGVmdDowOyB0ZXh0LWFsaWduOmNlbnRlcjsgd2lkdGg6MTAwJTsgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6IzdDN0M3Qzt9XHJcbiAgICAgICAgI2Nib3hDdXJyZW50e3Bvc2l0aW9uOmFic29sdXRlOyBib3R0b206LTI1cHg7IGxlZnQ6NThweDsgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6IzdDN0M3Qzt9XHJcblxyXG4gICAgICAgIC8qIHRoZXNlIGVsZW1lbnRzIGFyZSBidXR0b25zLCBhbmQgbWF5IG5lZWQgdG8gaGF2ZSBhZGRpdGlvbmFsIHN0eWxlcyByZXNldCB0byBhdm9pZCB1bndhbnRlZCBiYXNlIHN0eWxlcyAqL1xyXG4gICAgICAgICNjYm94UHJldmlvdXMsICNjYm94TmV4dCwgI2Nib3hTbGlkZXNob3csICNjYm94Q2xvc2Uge2JvcmRlcjowOyBwYWRkaW5nOjA7IG1hcmdpbjowOyBvdmVyZmxvdzp2aXNpYmxlOyAgcG9zaXRpb246YWJzb2x1dGU7IGJvdHRvbTotMjlweDsgYmFja2dyb3VuZDp1cmwoaW1hZ2VzL2NvbG9yYm94L2NvbnRyb2xzLnBuZykgbm8tcmVwZWF0IDBweCAwcHg7IHdpZHRoOjIzcHg7IGhlaWdodDoyM3B4OyB0ZXh0LWluZGVudDotOTk5OXB4O31cclxuICAgICAgICBcclxuICAgICAgICAvKiBhdm9pZCBvdXRsaW5lcyBvbiA6YWN0aXZlIChtb3VzZWNsaWNrKSwgYnV0IHByZXNlcnZlIG91dGxpbmVzIG9uIDpmb2N1cyAodGFiYmVkIG5hdmlnYXRpbmcpICovXHJcbiAgICAgICAgI2Nib3hQcmV2aW91czphY3RpdmUsICNjYm94TmV4dDphY3RpdmUsICNjYm94U2xpZGVzaG93OmFjdGl2ZSwgI2Nib3hDbG9zZTphY3RpdmUge291dGxpbmU6MDt9XHJcblxyXG4gICAgICAgICNjYm94UHJldmlvdXN7bGVmdDowcHg7IGJhY2tncm91bmQtcG9zaXRpb246IC01MXB4IC0yNXB4O31cclxuICAgICAgICAjY2JveFByZXZpb3VzOmhvdmVye2JhY2tncm91bmQtcG9zaXRpb246LTUxcHggMHB4O31cclxuICAgICAgICAjY2JveE5leHR7bGVmdDoyN3B4OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOi03NXB4IC0yNXB4O31cclxuICAgICAgICAjY2JveE5leHQ6aG92ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotNzVweCAwcHg7fVxyXG4gICAgICAgICNjYm94Q2xvc2V7cmlnaHQ6MDsgYmFja2dyb3VuZC1wb3NpdGlvbjotMTAwcHggLTI1cHg7fVxyXG4gICAgICAgICNjYm94Q2xvc2U6aG92ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTAwcHggMHB4O31cclxuXHJcbiAgICAgICAgLmNib3hTbGlkZXNob3dfb24gI2Nib3hTbGlkZXNob3d7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI1cHggMHB4OyByaWdodDoyN3B4O31cclxuICAgICAgICAuY2JveFNsaWRlc2hvd19vbiAjY2JveFNsaWRlc2hvdzpob3ZlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNTBweCAwcHg7fVxyXG4gICAgICAgIC5jYm94U2xpZGVzaG93X29mZiAjY2JveFNsaWRlc2hvd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNTBweCAtMjVweDsgcmlnaHQ6MjdweDt9XHJcbiAgICAgICAgLmNib3hTbGlkZXNob3dfb2ZmICNjYm94U2xpZGVzaG93OmhvdmVye2JhY2tncm91bmQtcG9zaXRpb246LTEyNXB4IDBweDt9Il0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */ From 13bbb43e3580ce830fab9deecec1cacbaacdf849 Mon Sep 17 00:00:00 2001 From: Benedek Farkas Date: Sat, 9 Mar 2024 12:55:32 +0100 Subject: [PATCH 31/56] Updating rebuilt client-side assets that changed functionally --- .../Orchard.DynamicForms/Scripts/Lib.min.js | 2 +- .../Orchard.Layouts/Scripts/LayoutEditor.js | 4 +- .../Scripts/LayoutEditor.min.js | 2 +- .../Orchard.Layouts/Styles/LayoutEditor.css | 2259 ++++++++--------- .../Styles/LayoutEditor.min.css | 2 +- .../Scripts/Calendars/jquery.calendars.min.js | 13 +- .../Orchard.Resources/Styles/bootstrap.css | 21 +- .../Styles/bootstrap.min.css | 2 +- .../Orchard.Resources/Styles/font-awesome.css | 24 +- .../Styles/font-awesome.min.css | 2 +- .../Orchard.Resources/Styles/jquery-ui.css | 8 +- .../Styles/jquery-ui.min.css | 4 +- 12 files changed, 1057 insertions(+), 1286 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Scripts/Lib.min.js b/src/Orchard.Web/Modules/Orchard.DynamicForms/Scripts/Lib.min.js index 331984bc3ff..9dae0247196 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Scripts/Lib.min.js +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Scripts/Lib.min.js @@ -1 +1 @@ -!function(t){t.extend(t.fn,{validate:function(e){if(!this.length)return void(e&&e.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing."));var i=t.data(this[0],"validator");return i?i:(this.attr("novalidate","novalidate"),i=new t.validator(e,this[0]),t.data(this[0],"validator",i),i.settings.onsubmit&&(this.validateDelegate(":submit","click",function(e){i.settings.submitHandler&&(i.submitButton=e.target),t(e.target).hasClass("cancel")&&(i.cancelSubmit=!0),void 0!==t(e.target).attr("formnovalidate")&&(i.cancelSubmit=!0)}),this.submit(function(e){function n(){var n;return i.settings.submitHandler?(i.submitButton&&(n=t("").attr("name",i.submitButton.name).val(t(i.submitButton).val()).appendTo(i.currentForm)),i.settings.submitHandler.call(i,i.currentForm,e),i.submitButton&&n.remove(),!1):!0}return i.settings.debug&&e.preventDefault(),i.cancelSubmit?(i.cancelSubmit=!1,n()):i.form()?i.pendingRequest?(i.formSubmitted=!0,!1):n():(i.focusInvalid(),!1)})),i)},valid:function(){if(t(this[0]).is("form"))return this.validate().form();var e=!0,i=t(this[0].form).validate();return this.each(function(){e=e&&i.element(this)}),e},removeAttrs:function(e){var i={},n=this;return t.each(e.split(/\s/),function(t,e){i[e]=n.attr(e),n.removeAttr(e)}),i},rules:function(e,i){var n=this[0];if(e){var a=t.data(n.form,"validator").settings,r=a.rules,s=t.validator.staticRules(n);switch(e){case"add":t.extend(s,t.validator.normalizeRule(i)),delete s.messages,r[n.name]=s,i.messages&&(a.messages[n.name]=t.extend(a.messages[n.name],i.messages));break;case"remove":if(!i)return delete r[n.name],s;var o={};return t.each(i.split(/\s/),function(t,e){o[e]=s[e],delete s[e]}),o}}var u=t.validator.normalizeRules(t.extend({},t.validator.classRules(n),t.validator.attributeRules(n),t.validator.dataRules(n),t.validator.staticRules(n)),n);if(u.required){var l=u.required;delete u.required,u=t.extend({required:l},u)}return u}}),t.extend(t.expr[":"],{blank:function(e){return!t.trim(""+t(e).val())},filled:function(e){return!!t.trim(""+t(e).val())},unchecked:function(e){return!t(e).prop("checked")}}),t.validator=function(e,i){this.settings=t.extend(!0,{},t.validator.defaults,e),this.currentForm=i,this.init()},t.validator.format=function(e,i){return 1===arguments.length?function(){var i=t.makeArray(arguments);return i.unshift(e),t.validator.format.apply(this,i)}:(arguments.length>2&&i.constructor!==Array&&(i=t.makeArray(arguments).slice(1)),i.constructor!==Array&&(i=[i]),t.each(i,function(t,i){e=e.replace(new RegExp("\\{"+t+"\\}","g"),function(){return i})}),e)},t.extend(t.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusInvalid:!0,errorContainer:t([]),errorLabelContainer:t([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(t,e){this.lastActive=t,this.settings.focusCleanup&&!this.blockFocusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,t,this.settings.errorClass,this.settings.validClass),this.addWrapper(this.errorsFor(t)).hide())},onfocusout:function(t,e){this.checkable(t)||!(t.name in this.submitted)&&this.optional(t)||this.element(t)},onkeyup:function(t,e){(9!==e.which||""!==this.elementValue(t))&&(t.name in this.submitted||t===this.lastElement)&&this.element(t)},onclick:function(t,e){t.name in this.submitted?this.element(t):t.parentNode.name in this.submitted&&this.element(t.parentNode)},highlight:function(e,i,n){"radio"===e.type?this.findByName(e.name).addClass(i).removeClass(n):t(e).addClass(i).removeClass(n)},unhighlight:function(e,i,n){"radio"===e.type?this.findByName(e.name).removeClass(i).addClass(n):t(e).removeClass(i).addClass(n)}},setDefaults:function(e){t.extend(t.validator.defaults,e)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",maxlength:t.validator.format("Please enter no more than {0} characters."),minlength:t.validator.format("Please enter at least {0} characters."),rangelength:t.validator.format("Please enter a value between {0} and {1} characters long."),range:t.validator.format("Please enter a value between {0} and {1}."),max:t.validator.format("Please enter a value less than or equal to {0}."),min:t.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){function e(e){var i=t.data(this[0].form,"validator"),n="on"+e.type.replace(/^validate/,"");i.settings[n]&&i.settings[n].call(i,this[0],e)}this.labelContainer=t(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||t(this.currentForm),this.containers=t(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var i=this.groups={};t.each(this.settings.groups,function(e,n){"string"==typeof n&&(n=n.split(/\s/)),t.each(n,function(t,n){i[n]=e})});var n=this.settings.rules;t.each(n,function(e,i){n[e]=t.validator.normalizeRule(i)}),t(this.currentForm).validateDelegate(":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'] ","focusin focusout keyup",e).validateDelegate("[type='radio'], [type='checkbox'], select, option","click",e),this.settings.invalidHandler&&t(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),t.extend(this.submitted,this.errorMap),this.invalid=t.extend({},this.errorMap),this.valid()||t(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var t=0,e=this.currentElements=this.elements();e[t];t++)this.check(e[t]);return this.valid()},element:function(e){e=this.validationTargetFor(this.clean(e)),this.lastElement=e,this.prepareElement(e),this.currentElements=t(e);var i=this.check(e)!==!1;return i?delete this.invalid[e.name]:this.invalid[e.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),i},showErrors:function(e){if(e){t.extend(this.errorMap,e),this.errorList=[];for(var i in e)this.errorList.push({message:e[i],element:this.findByName(i)[0]});this.successList=t.grep(this.successList,function(t){return!(t.name in e)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){t.fn.resetForm&&t(this.currentForm).resetForm(),this.submitted={},this.lastElement=null,this.prepareForm(),this.hideErrors(),this.elements().removeClass(this.settings.errorClass).removeData("previousValue")},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(t){var e=0;for(var i in t)e++;return e},hideErrors:function(){this.addWrapper(this.toHide).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{t(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(e){}},findLastActive:function(){var e=this.lastActive;return e&&1===t.grep(this.errorList,function(t){return t.element.name===e.name}).length&&e},elements:function(){var e=this,i={};return t(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){return!this.name&&e.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.name in i||!e.objectLength(t(this).rules())?!1:(i[this.name]=!0,!0)})},clean:function(e){return t(e)[0]},errors:function(){var e=this.settings.errorClass.replace(" ",".");return t(this.settings.errorElement+"."+e,this.errorContext)},reset:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=t([]),this.toHide=t([]),this.currentElements=t([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(t){this.reset(),this.toHide=this.errorsFor(t)},elementValue:function(e){var i=t(e).attr("type"),n=t(e).val();return"radio"===i||"checkbox"===i?t("input[name='"+t(e).attr("name")+"']:checked").val():"string"==typeof n?n.replace(/\r/g,""):n},check:function(e){e=this.validationTargetFor(this.clean(e));var i,n=t(e).rules(),a=!1,r=this.elementValue(e);for(var s in n){var o={method:s,parameters:n[s]};try{if(i=t.validator.methods[s].call(this,r,e,o.parameters),"dependency-mismatch"===i){a=!0;continue}if(a=!1,"pending"===i)return void(this.toHide=this.toHide.not(this.errorsFor(e)));if(!i)return this.formatAndAdd(e,o),!1}catch(u){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+e.id+", check the '"+o.method+"' method.",u),u}}return a?void 0:(this.objectLength(n)&&this.successList.push(e),!0)},customDataMessage:function(e,i){return t(e).data("msg-"+i.toLowerCase())||e.attributes&&t(e).attr("data-msg-"+i.toLowerCase())},customMessage:function(t,e){var i=this.settings.messages[t];return i&&(i.constructor===String?i:i[e])},findDefined:function(){for(var t=0;tWarning: No message defined for "+e.name+"")},formatAndAdd:function(e,i){var n=this.defaultMessage(e,i.method),a=/\$?\{(\d+)\}/g;"function"==typeof n?n=n.call(this,i.parameters,e):a.test(n)&&(n=t.validator.format(n.replace(a,"{$1}"),i.parameters)),this.errorList.push({message:n,element:e}),this.errorMap[e.name]=n,this.submitted[e.name]=n},addWrapper:function(t){return this.settings.wrapper&&(t=t.add(t.parent(this.settings.wrapper))),t},defaultShowErrors:function(){var t,e;for(t=0;this.errorList[t];t++){var i=this.errorList[t];this.settings.highlight&&this.settings.highlight.call(this,i.element,this.settings.errorClass,this.settings.validClass),this.showLabel(i.element,i.message)}if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(t=0;this.successList[t];t++)this.showLabel(this.successList[t]);if(this.settings.unhighlight)for(t=0,e=this.validElements();e[t];t++)this.settings.unhighlight.call(this,e[t],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return t(this.errorList).map(function(){return this.element})},showLabel:function(e,i){var n=this.errorsFor(e);n.length?(n.removeClass(this.settings.validClass).addClass(this.settings.errorClass),n.html(i)):(n=t("<"+this.settings.errorElement+">").attr("for",this.idOrName(e)).addClass(this.settings.errorClass).html(i||""),this.settings.wrapper&&(n=n.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.append(n).length||(this.settings.errorPlacement?this.settings.errorPlacement(n,t(e)):n.insertAfter(e))),!i&&this.settings.success&&(n.text(""),"string"==typeof this.settings.success?n.addClass(this.settings.success):this.settings.success(n,e)),this.toShow=this.toShow.add(n)},errorsFor:function(e){var i=this.idOrName(e);return this.errors().filter(function(){return t(this).attr("for")===i})},idOrName:function(t){return this.groups[t.name]||(this.checkable(t)?t.name:t.id||t.name)},validationTargetFor:function(t){return this.checkable(t)&&(t=this.findByName(t.name).not(this.settings.ignore)[0]),t},checkable:function(t){return/radio|checkbox/i.test(t.type)},findByName:function(e){return t(this.currentForm).find("[name='"+e+"']")},getLength:function(e,i){switch(i.nodeName.toLowerCase()){case"select":return t("option:selected",i).length;case"input":if(this.checkable(i))return this.findByName(i.name).filter(":checked").length}return e.length},depend:function(t,e){return this.dependTypes[typeof t]?this.dependTypes[typeof t](t,e):!0},dependTypes:{"boolean":function(t,e){return t},string:function(e,i){return!!t(e,i.form).length},"function":function(t,e){return t(e)}},optional:function(e){var i=this.elementValue(e);return!t.validator.methods.required.call(this,i,e)&&"dependency-mismatch"},startRequest:function(t){this.pending[t.name]||(this.pendingRequest++,this.pending[t.name]=!0)},stopRequest:function(e,i){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[e.name],i&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(t(this.currentForm).submit(),this.formSubmitted=!1):!i&&0===this.pendingRequest&&this.formSubmitted&&(t(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(e){return t.data(e,"previousValue")||t.data(e,"previousValue",{old:null,valid:!0,message:this.defaultMessage(e,"remote")})}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(e,i){e.constructor===String?this.classRuleSettings[e]=i:t.extend(this.classRuleSettings,e)},classRules:function(e){var i={},n=t(e).attr("class");return n&&t.each(n.split(" "),function(){this in t.validator.classRuleSettings&&t.extend(i,t.validator.classRuleSettings[this])}),i},attributeRules:function(e){var i={},n=t(e),a=n[0].getAttribute("type");for(var r in t.validator.methods){var s;"required"===r?(s=n.get(0).getAttribute(r),""===s&&(s=!0),s=!!s):s=n.attr(r),/min|max/.test(r)&&(null===a||/number|range|text/.test(a))&&(s=Number(s)),s?i[r]=s:a===r&&"range"!==a&&(i[r]=!0)}return i.maxlength&&/-1|2147483647|524288/.test(i.maxlength)&&delete i.maxlength,i},dataRules:function(e){var i,n,a={},r=t(e);for(i in t.validator.methods)n=r.data("rule-"+i.toLowerCase()),void 0!==n&&(a[i]=n);return a},staticRules:function(e){var i={},n=t.data(e.form,"validator");return n.settings.rules&&(i=t.validator.normalizeRule(n.settings.rules[e.name])||{}),i},normalizeRules:function(e,i){return t.each(e,function(n,a){if(a===!1)return void delete e[n];if(a.param||a.depends){var r=!0;switch(typeof a.depends){case"string":r=!!t(a.depends,i.form).length;break;case"function":r=a.depends.call(i,i)}r?e[n]=void 0!==a.param?a.param:!0:delete e[n]}}),t.each(e,function(n,a){e[n]=t.isFunction(a)?a(i):a}),t.each(["minlength","maxlength"],function(){e[this]&&(e[this]=Number(e[this]))}),t.each(["rangelength","range"],function(){var i;e[this]&&(t.isArray(e[this])?e[this]=[Number(e[this][0]),Number(e[this][1])]:"string"==typeof e[this]&&(i=e[this].split(/[\s,]+/),e[this]=[Number(i[0]),Number(i[1])]))}),t.validator.autoCreateRanges&&(e.min&&e.max&&(e.range=[e.min,e.max],delete e.min,delete e.max),e.minlength&&e.maxlength&&(e.rangelength=[e.minlength,e.maxlength],delete e.minlength,delete e.maxlength)),e},normalizeRule:function(e){if("string"==typeof e){var i={};t.each(e.split(/\s/),function(){i[this]=!0}),e=i}return e},addMethod:function(e,i,n){t.validator.methods[e]=i,t.validator.messages[e]=void 0!==n?n:t.validator.messages[e],i.length<3&&t.validator.addClassRules(e,t.validator.normalizeRule(e))},methods:{required:function(e,i,n){if(!this.depend(n,i))return"dependency-mismatch";if("select"===i.nodeName.toLowerCase()){var a=t(i).val();return a&&a.length>0}return this.checkable(i)?this.getLength(e,i)>0:t.trim(e).length>0},email:function(t,e){return this.optional(e)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(t)},url:function(t,e){return this.optional(e)||/^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(t)},date:function(t,e){return this.optional(e)||!/Invalid|NaN/.test(new Date(t).toString())},dateISO:function(t,e){return this.optional(e)||/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(t)},number:function(t,e){return this.optional(e)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(t)},digits:function(t,e){return this.optional(e)||/^\d+$/.test(t)},creditcard:function(t,e){if(this.optional(e))return"dependency-mismatch";if(/[^0-9 \-]+/.test(t))return!1;var i=0,n=0,a=!1;t=t.replace(/\D/g,"");for(var r=t.length-1;r>=0;r--){var s=t.charAt(r);n=parseInt(s,10),a&&(n*=2)>9&&(n-=9),i+=n,a=!a}return i%10===0},minlength:function(e,i,n){var a=t.isArray(e)?e.length:this.getLength(t.trim(e),i);return this.optional(i)||a>=n},maxlength:function(e,i,n){var a=t.isArray(e)?e.length:this.getLength(t.trim(e),i);return this.optional(i)||n>=a},rangelength:function(e,i,n){var a=t.isArray(e)?e.length:this.getLength(t.trim(e),i);return this.optional(i)||a>=n[0]&&a<=n[1]},min:function(t,e,i){return this.optional(e)||t>=i},max:function(t,e,i){return this.optional(e)||i>=t},range:function(t,e,i){return this.optional(e)||t>=i[0]&&t<=i[1]},equalTo:function(e,i,n){var a=t(n);return this.settings.onfocusout&&a.unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){t(i).valid()}),e===a.val()},remote:function(e,i,n){if(this.optional(i))return"dependency-mismatch";var a=this.previousValue(i);if(this.settings.messages[i.name]||(this.settings.messages[i.name]={}),a.originalMessage=this.settings.messages[i.name].remote,this.settings.messages[i.name].remote=a.message,n="string"==typeof n&&{url:n}||n,a.old===e)return a.valid;a.old=e;var r=this;this.startRequest(i);var s={};return s[i.name]=e,t.ajax(t.extend(!0,{url:n,mode:"abort",port:"validate"+i.name,dataType:"json",data:s,success:function(n){r.settings.messages[i.name].remote=a.originalMessage;var s=n===!0||"true"===n;if(s){var o=r.formSubmitted;r.prepareElement(i),r.formSubmitted=o,r.successList.push(i),delete r.invalid[i.name],r.showErrors()}else{var u={},l=n||r.defaultMessage(i,"remote");u[i.name]=a.message=t.isFunction(l)?l(e):l,r.invalid[i.name]=!0,r.showErrors(u)}a.valid=s,r.stopRequest(i,s)}},n)),"pending"}}}),t.format=t.validator.format}(jQuery),function(t){var e={};if(t.ajaxPrefilter)t.ajaxPrefilter(function(t,i,n){var a=t.port;"abort"===t.mode&&(e[a]&&e[a].abort(),e[a]=n)});else{var i=t.ajax;t.ajax=function(n){var a=("mode"in n?n:t.ajaxSettings).mode,r=("port"in n?n:t.ajaxSettings).port;return"abort"===a?(e[r]&&e[r].abort(),e[r]=i.apply(this,arguments),e[r]):i.apply(this,arguments)}}}(jQuery),function(t){t.extend(t.fn,{validateDelegate:function(e,i,n){return this.bind(i,function(i){var a=t(i.target);return a.is(e)?n.apply(a,arguments):void 0})}})}(jQuery),function(t){function e(t,e,i){t.rules[e]=i,t.message&&(t.messages[e]=t.message)}function i(t){return t.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/g)}function n(t){return t.replace(/([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g,"\\$1")}function a(t){return t.substr(0,t.lastIndexOf(".")+1)}function r(t,e){return 0===t.indexOf("*.")&&(t=t.replace("*.",e)),t}function s(e,i){var a=t(this).find("[data-valmsg-for='"+n(i[0].name)+"']"),r=a.attr("data-valmsg-replace"),s=r?t.parseJSON(r)!==!1:null;a.removeClass("field-validation-valid").addClass("field-validation-error"),e.data("unobtrusiveContainer",a),s?(a.empty(),e.removeClass("input-validation-error").appendTo(a)):e.hide()}function o(e,i){var n=t(this).find("[data-valmsg-summary=true]"),a=n.find("ul");a&&a.length&&i.errorList.length&&(a.empty(),n.addClass("validation-summary-errors").removeClass("validation-summary-valid"),t.each(i.errorList,function(){t("
  • ").html(this.message).appendTo(a)}))}function u(e){var i=e.data("unobtrusiveContainer"),n=i.attr("data-valmsg-replace"),a=n?t.parseJSON(n):null;i&&(i.addClass("field-validation-valid").removeClass("field-validation-error"),e.removeData("unobtrusiveContainer"),a&&i.empty())}function l(e){var i=t(this);i.data("validator").resetForm(),i.find(".validation-summary-errors").addClass("validation-summary-valid").removeClass("validation-summary-errors"),i.find(".field-validation-error").addClass("field-validation-valid").removeClass("field-validation-error").removeData("unobtrusiveContainer").find(">*").removeData("unobtrusiveContainer")}function d(e){var i=t(e),n=i.data(c),a=t.proxy(l,e),r=m.unobtrusive.options||{},d=function(i,n){var a=r[i];a&&t.isFunction(a)&&a.apply(e,n)};return n||(n={options:{errorClass:r.errorClass||"input-validation-error",errorElement:r.errorElement||"span",errorPlacement:function(){s.apply(e,arguments),d("errorPlacement",arguments)},invalidHandler:function(){o.apply(e,arguments),d("invalidHandler",arguments)},messages:{},rules:{},success:function(){u.apply(e,arguments),d("success",arguments)}},attachValidation:function(){i.off("reset."+c,a).on("reset."+c,a).validate(this.options)},validate:function(){return i.validate(),i.valid()}},i.data(c,n)),n}var h,m=t.validator,c="unobtrusiveValidation";m.unobtrusive={adapters:[],parseElement:function(e,i){var n,a,r,s=t(e),o=s.parents("form")[0];o&&(n=d(o),n.options.rules[e.name]=a={},n.options.messages[e.name]=r={},t.each(this.adapters,function(){var i="data-val-"+this.name,n=s.attr(i),u={};void 0!==n&&(i+="-",t.each(this.params,function(){u[this]=s.attr(i+this)}),this.adapt({element:e,form:o,message:n,params:u,rules:a,messages:r}))}),t.extend(a,{__dummy__:!0}),i||n.attachValidation())},parse:function(e){var i=t(e),n=i.parents().addBack().filter("form").add(i.find("form")).has("[data-val=true]");i.find("[data-val=true]").each(function(){m.unobtrusive.parseElement(this,!0)}),n.each(function(){var t=d(this);t&&t.attachValidation()})}},h=m.unobtrusive.adapters,h.add=function(t,e,i){return i||(i=e,e=[]),this.push({name:t,params:e,adapt:i}),this},h.addBool=function(t,i){return this.add(t,function(n){e(n,i||t,!0)})},h.addMinMax=function(t,i,n,a,r,s){return this.add(t,[r||"min",s||"max"],function(t){var r=t.params.min,s=t.params.max;r&&s?e(t,a,[r,s]):r?e(t,i,r):s&&e(t,n,s)})},h.addSingleVal=function(t,i,n){return this.add(t,[i||"val"],function(a){e(a,n||t,a.params[i])})},m.addMethod("__dummy__",function(t,e,i){return!0}),m.addMethod("regex",function(t,e,i){var n;return this.optional(e)?!0:(n=new RegExp(i).exec(t),n&&0===n.index&&n[0].length===t.length)}),m.addMethod("nonalphamin",function(t,e,i){var n;return i&&(n=t.match(/\W/g),n=n&&n.length>=i),n}),m.methods.extension?(h.addSingleVal("accept","mimtype"),h.addSingleVal("extension","extension")):h.addSingleVal("extension","extension","accept"),h.addSingleVal("regex","pattern"),h.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url"),h.addMinMax("length","minlength","maxlength","rangelength").addMinMax("range","min","max","range"),h.addMinMax("minlength","minlength").addMinMax("maxlength","minlength","maxlength"),h.add("equalto",["other"],function(i){var s=a(i.element.name),o=i.params.other,u=r(o,s),l=t(i.form).find(":input").filter("[name='"+n(u)+"']")[0];e(i,"equalTo",l)}),h.add("required",function(t){("INPUT"!==t.element.tagName.toUpperCase()||"CHECKBOX"!==t.element.type.toUpperCase())&&e(t,"required",!0)}),h.add("remote",["url","type","additionalfields"],function(s){var o={url:s.params.url,type:s.params.type||"GET",data:{}},u=a(s.element.name);t.each(i(s.params.additionalfields||s.element.name),function(e,i){var a=r(i,u);o.data[a]=function(){return t(s.form).find(":input").filter("[name='"+n(a)+"']").val()}}),e(s,"remote",o)}),h.add("password",["min","nonalphamin","regex"],function(t){t.params.min&&e(t,"minlength",t.params.min),t.params.nonalphamin&&e(t,"nonalphamin",t.params.nonalphamin),t.params.regex&&e(t,"regex",t.params.regex)}),t(function(){m.unobtrusive.parse(document)})}(jQuery),function(t){t.validator.addMethod("optionrequired",function(e,i,n){var a=!0;if(t(i).is("input")){var r=t(i).closest("ol");a=r.find("input:checked").length>0,r.toggleClass("input-validation-error",!a)}else if(t(i).is("select")){var s=t(i).val();a=!!s&&s.length>0}return a},"An option is required"),t.validator.unobtrusive.adapters.addBool("mandatory","required"),t.validator.unobtrusive.adapters.addBool("optionrequired")}(jQuery); \ No newline at end of file +!function(t){t.extend(t.fn,{validate:function(e){if(!this.length)return void(e&&e.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing."));var i=t.data(this[0],"validator");return i?i:(this.attr("novalidate","novalidate"),i=new t.validator(e,this[0]),t.data(this[0],"validator",i),i.settings.onsubmit&&(this.validateDelegate(":submit","click",function(e){i.settings.submitHandler&&(i.submitButton=e.target),t(e.target).hasClass("cancel")&&(i.cancelSubmit=!0),void 0!==t(e.target).attr("formnovalidate")&&(i.cancelSubmit=!0)}),this.submit(function(e){function n(){var n;return i.settings.submitHandler?(i.submitButton&&(n=t("").attr("name",i.submitButton.name).val(t(i.submitButton).val()).appendTo(i.currentForm)),i.settings.submitHandler.call(i,i.currentForm,e),i.submitButton&&n.remove(),!1):!0}return i.settings.debug&&e.preventDefault(),i.cancelSubmit?(i.cancelSubmit=!1,n()):i.form()?i.pendingRequest?(i.formSubmitted=!0,!1):n():(i.focusInvalid(),!1)})),i)},valid:function(){if(t(this[0]).is("form"))return this.validate().form();var e=!0,i=t(this[0].form).validate();return this.each(function(){e=e&&i.element(this)}),e},removeAttrs:function(e){var i={},n=this;return t.each(e.split(/\s/),function(t,e){i[e]=n.attr(e),n.removeAttr(e)}),i},rules:function(e,i){var n=this[0];if(e){var a=t.data(n.form,"validator").settings,r=a.rules,s=t.validator.staticRules(n);switch(e){case"add":t.extend(s,t.validator.normalizeRule(i)),delete s.messages,r[n.name]=s,i.messages&&(a.messages[n.name]=t.extend(a.messages[n.name],i.messages));break;case"remove":if(!i)return delete r[n.name],s;var o={};return t.each(i.split(/\s/),function(t,e){o[e]=s[e],delete s[e]}),o}}var u=t.validator.normalizeRules(t.extend({},t.validator.classRules(n),t.validator.attributeRules(n),t.validator.dataRules(n),t.validator.staticRules(n)),n);if(u.required){var l=u.required;delete u.required,u=t.extend({required:l},u)}return u}}),t.extend(t.expr[":"],{blank:function(e){return!t.trim(""+t(e).val())},filled:function(e){return!!t.trim(""+t(e).val())},unchecked:function(e){return!t(e).prop("checked")}}),t.validator=function(e,i){this.settings=t.extend(!0,{},t.validator.defaults,e),this.currentForm=i,this.init()},t.validator.format=function(e,i){return 1===arguments.length?function(){var i=t.makeArray(arguments);return i.unshift(e),t.validator.format.apply(this,i)}:(arguments.length>2&&i.constructor!==Array&&(i=t.makeArray(arguments).slice(1)),i.constructor!==Array&&(i=[i]),t.each(i,function(t,i){e=e.replace(new RegExp("\\{"+t+"\\}","g"),function(){return i})}),e)},t.extend(t.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusInvalid:!0,errorContainer:t([]),errorLabelContainer:t([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(t,e){this.lastActive=t,this.settings.focusCleanup&&!this.blockFocusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,t,this.settings.errorClass,this.settings.validClass),this.addWrapper(this.errorsFor(t)).hide())},onfocusout:function(t,e){this.checkable(t)||!(t.name in this.submitted)&&this.optional(t)||this.element(t)},onkeyup:function(t,e){(9!==e.which||""!==this.elementValue(t))&&(t.name in this.submitted||t===this.lastElement)&&this.element(t)},onclick:function(t,e){t.name in this.submitted?this.element(t):t.parentNode.name in this.submitted&&this.element(t.parentNode)},highlight:function(e,i,n){"radio"===e.type?this.findByName(e.name).addClass(i).removeClass(n):t(e).addClass(i).removeClass(n)},unhighlight:function(e,i,n){"radio"===e.type?this.findByName(e.name).removeClass(i).addClass(n):t(e).removeClass(i).addClass(n)}},setDefaults:function(e){t.extend(t.validator.defaults,e)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",maxlength:t.validator.format("Please enter no more than {0} characters."),minlength:t.validator.format("Please enter at least {0} characters."),rangelength:t.validator.format("Please enter a value between {0} and {1} characters long."),range:t.validator.format("Please enter a value between {0} and {1}."),max:t.validator.format("Please enter a value less than or equal to {0}."),min:t.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){function e(e){var i=t.data(this[0].form,"validator"),n="on"+e.type.replace(/^validate/,"");i.settings[n]&&i.settings[n].call(i,this[0],e)}this.labelContainer=t(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||t(this.currentForm),this.containers=t(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var i=this.groups={};t.each(this.settings.groups,function(e,n){"string"==typeof n&&(n=n.split(/\s/)),t.each(n,function(t,n){i[n]=e})});var n=this.settings.rules;t.each(n,function(e,i){n[e]=t.validator.normalizeRule(i)}),t(this.currentForm).validateDelegate(":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'] ","focusin focusout keyup",e).validateDelegate("[type='radio'], [type='checkbox'], select, option","click",e),this.settings.invalidHandler&&t(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),t.extend(this.submitted,this.errorMap),this.invalid=t.extend({},this.errorMap),this.valid()||t(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var t=0,e=this.currentElements=this.elements();e[t];t++)this.check(e[t]);return this.valid()},element:function(e){e=this.validationTargetFor(this.clean(e)),this.lastElement=e,this.prepareElement(e),this.currentElements=t(e);var i=this.check(e)!==!1;return i?delete this.invalid[e.name]:this.invalid[e.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),i},showErrors:function(e){if(e){t.extend(this.errorMap,e),this.errorList=[];for(var i in e)this.errorList.push({message:e[i],element:this.findByName(i)[0]});this.successList=t.grep(this.successList,function(t){return!(t.name in e)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){t.fn.resetForm&&t(this.currentForm).resetForm(),this.submitted={},this.lastElement=null,this.prepareForm(),this.hideErrors(),this.elements().removeClass(this.settings.errorClass).removeData("previousValue")},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(t){var e=0;for(var i in t)e++;return e},hideErrors:function(){this.addWrapper(this.toHide).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{t(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(e){}},findLastActive:function(){var e=this.lastActive;return e&&1===t.grep(this.errorList,function(t){return t.element.name===e.name}).length&&e},elements:function(){var e=this,i={};return t(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){return!this.name&&e.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.name in i||!e.objectLength(t(this).rules())?!1:(i[this.name]=!0,!0)})},clean:function(e){return t(e)[0]},errors:function(){var e=this.settings.errorClass.replace(" ",".");return t(this.settings.errorElement+"."+e,this.errorContext)},reset:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=t([]),this.toHide=t([]),this.currentElements=t([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(t){this.reset(),this.toHide=this.errorsFor(t)},elementValue:function(e){var i=t(e).attr("type"),n=t(e).val();return"radio"===i||"checkbox"===i?t("input[name='"+t(e).attr("name")+"']:checked").val():"string"==typeof n?n.replace(/\r/g,""):n},check:function(e){e=this.validationTargetFor(this.clean(e));var i,n=t(e).rules(),a=!1,r=this.elementValue(e);for(var s in n){var o={method:s,parameters:n[s]};try{if(i=t.validator.methods[s].call(this,r,e,o.parameters),"dependency-mismatch"===i){a=!0;continue}if(a=!1,"pending"===i)return void(this.toHide=this.toHide.not(this.errorsFor(e)));if(!i)return this.formatAndAdd(e,o),!1}catch(u){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+e.id+", check the '"+o.method+"' method.",u),u}}return a?void 0:(this.objectLength(n)&&this.successList.push(e),!0)},customDataMessage:function(e,i){return t(e).data("msg-"+i.toLowerCase())||e.attributes&&t(e).attr("data-msg-"+i.toLowerCase())},customMessage:function(t,e){var i=this.settings.messages[t];return i&&(i.constructor===String?i:i[e])},findDefined:function(){for(var t=0;tWarning: No message defined for "+e.name+"")},formatAndAdd:function(e,i){var n=this.defaultMessage(e,i.method),a=/\$?\{(\d+)\}/g;"function"==typeof n?n=n.call(this,i.parameters,e):a.test(n)&&(n=t.validator.format(n.replace(a,"{$1}"),i.parameters)),this.errorList.push({message:n,element:e}),this.errorMap[e.name]=n,this.submitted[e.name]=n},addWrapper:function(t){return this.settings.wrapper&&(t=t.add(t.parent(this.settings.wrapper))),t},defaultShowErrors:function(){var t,e;for(t=0;this.errorList[t];t++){var i=this.errorList[t];this.settings.highlight&&this.settings.highlight.call(this,i.element,this.settings.errorClass,this.settings.validClass),this.showLabel(i.element,i.message)}if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(t=0;this.successList[t];t++)this.showLabel(this.successList[t]);if(this.settings.unhighlight)for(t=0,e=this.validElements();e[t];t++)this.settings.unhighlight.call(this,e[t],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return t(this.errorList).map(function(){return this.element})},showLabel:function(e,i){var n=this.errorsFor(e);n.length?(n.removeClass(this.settings.validClass).addClass(this.settings.errorClass),n.html(i)):(n=t("<"+this.settings.errorElement+">").attr("for",this.idOrName(e)).addClass(this.settings.errorClass).html(i||""),this.settings.wrapper&&(n=n.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.append(n).length||(this.settings.errorPlacement?this.settings.errorPlacement(n,t(e)):n.insertAfter(e))),!i&&this.settings.success&&(n.text(""),"string"==typeof this.settings.success?n.addClass(this.settings.success):this.settings.success(n,e)),this.toShow=this.toShow.add(n)},errorsFor:function(e){var i=this.idOrName(e);return this.errors().filter(function(){return t(this).attr("for")===i})},idOrName:function(t){return this.groups[t.name]||(this.checkable(t)?t.name:t.id||t.name)},validationTargetFor:function(t){return this.checkable(t)&&(t=this.findByName(t.name).not(this.settings.ignore)[0]),t},checkable:function(t){return/radio|checkbox/i.test(t.type)},findByName:function(e){return t(this.currentForm).find("[name='"+e+"']")},getLength:function(e,i){switch(i.nodeName.toLowerCase()){case"select":return t("option:selected",i).length;case"input":if(this.checkable(i))return this.findByName(i.name).filter(":checked").length}return e.length},depend:function(t,e){return this.dependTypes[typeof t]?this.dependTypes[typeof t](t,e):!0},dependTypes:{"boolean":function(t,e){return t},string:function(e,i){return!!t(e,i.form).length},"function":function(t,e){return t(e)}},optional:function(e){var i=this.elementValue(e);return!t.validator.methods.required.call(this,i,e)&&"dependency-mismatch"},startRequest:function(t){this.pending[t.name]||(this.pendingRequest++,this.pending[t.name]=!0)},stopRequest:function(e,i){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[e.name],i&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(t(this.currentForm).submit(),this.formSubmitted=!1):!i&&0===this.pendingRequest&&this.formSubmitted&&(t(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(e){return t.data(e,"previousValue")||t.data(e,"previousValue",{old:null,valid:!0,message:this.defaultMessage(e,"remote")})}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(e,i){e.constructor===String?this.classRuleSettings[e]=i:t.extend(this.classRuleSettings,e)},classRules:function(e){var i={},n=t(e).attr("class");return n&&t.each(n.split(" "),function(){this in t.validator.classRuleSettings&&t.extend(i,t.validator.classRuleSettings[this])}),i},attributeRules:function(e){var i={},n=t(e),a=n[0].getAttribute("type");for(var r in t.validator.methods){var s;"required"===r?(s=n.get(0).getAttribute(r),""===s&&(s=!0),s=!!s):s=n.attr(r),/min|max/.test(r)&&(null===a||/number|range|text/.test(a))&&(s=Number(s)),s?i[r]=s:a===r&&"range"!==a&&(i[r]=!0)}return i.maxlength&&/-1|2147483647|524288/.test(i.maxlength)&&delete i.maxlength,i},dataRules:function(e){var i,n,a={},r=t(e);for(i in t.validator.methods)n=r.data("rule-"+i.toLowerCase()),void 0!==n&&(a[i]=n);return a},staticRules:function(e){var i={},n=t.data(e.form,"validator");return n.settings.rules&&(i=t.validator.normalizeRule(n.settings.rules[e.name])||{}),i},normalizeRules:function(e,i){return t.each(e,function(n,a){if(a===!1)return void delete e[n];if(a.param||a.depends){var r=!0;switch(typeof a.depends){case"string":r=!!t(a.depends,i.form).length;break;case"function":r=a.depends.call(i,i)}r?e[n]=void 0!==a.param?a.param:!0:delete e[n]}}),t.each(e,function(n,a){e[n]=t.isFunction(a)?a(i):a}),t.each(["minlength","maxlength"],function(){e[this]&&(e[this]=Number(e[this]))}),t.each(["rangelength","range"],function(){var i;e[this]&&(t.isArray(e[this])?e[this]=[Number(e[this][0]),Number(e[this][1])]:"string"==typeof e[this]&&(i=e[this].split(/[\s,]+/),e[this]=[Number(i[0]),Number(i[1])]))}),t.validator.autoCreateRanges&&(e.min&&e.max&&(e.range=[e.min,e.max],delete e.min,delete e.max),e.minlength&&e.maxlength&&(e.rangelength=[e.minlength,e.maxlength],delete e.minlength,delete e.maxlength)),e},normalizeRule:function(e){if("string"==typeof e){var i={};t.each(e.split(/\s/),function(){i[this]=!0}),e=i}return e},addMethod:function(e,i,n){t.validator.methods[e]=i,t.validator.messages[e]=void 0!==n?n:t.validator.messages[e],i.length<3&&t.validator.addClassRules(e,t.validator.normalizeRule(e))},methods:{required:function(e,i,n){if(!this.depend(n,i))return"dependency-mismatch";if("select"===i.nodeName.toLowerCase()){var a=t(i).val();return a&&a.length>0}return this.checkable(i)?this.getLength(e,i)>0:t.trim(e).length>0},email:function(t,e){return this.optional(e)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(t)},url:function(t,e){return this.optional(e)||/^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(t)},date:function(t,e){return this.optional(e)||!/Invalid|NaN/.test(new Date(t).toString())},dateISO:function(t,e){return this.optional(e)||/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(t)},number:function(t,e){return this.optional(e)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(t)},digits:function(t,e){return this.optional(e)||/^\d+$/.test(t)},creditcard:function(t,e){if(this.optional(e))return"dependency-mismatch";if(/[^0-9 \-]+/.test(t))return!1;var i=0,n=0,a=!1;t=t.replace(/\D/g,"");for(var r=t.length-1;r>=0;r--){var s=t.charAt(r);n=parseInt(s,10),a&&(n*=2)>9&&(n-=9),i+=n,a=!a}return i%10===0},minlength:function(e,i,n){var a=t.isArray(e)?e.length:this.getLength(t.trim(e),i);return this.optional(i)||a>=n},maxlength:function(e,i,n){var a=t.isArray(e)?e.length:this.getLength(t.trim(e),i);return this.optional(i)||n>=a},rangelength:function(e,i,n){var a=t.isArray(e)?e.length:this.getLength(t.trim(e),i);return this.optional(i)||a>=n[0]&&a<=n[1]},min:function(t,e,i){return this.optional(e)||t>=i},max:function(t,e,i){return this.optional(e)||i>=t},range:function(t,e,i){return this.optional(e)||t>=i[0]&&t<=i[1]},equalTo:function(e,i,n){var a=t(n);return this.settings.onfocusout&&a.unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){t(i).valid()}),e===a.val()},remote:function(e,i,n){if(this.optional(i))return"dependency-mismatch";var a=this.previousValue(i);if(this.settings.messages[i.name]||(this.settings.messages[i.name]={}),a.originalMessage=this.settings.messages[i.name].remote,this.settings.messages[i.name].remote=a.message,n="string"==typeof n&&{url:n}||n,a.old===e)return a.valid;a.old=e;var r=this;this.startRequest(i);var s={};return s[i.name]=e,t.ajax(t.extend(!0,{url:n,mode:"abort",port:"validate"+i.name,dataType:"json",data:s,success:function(n){r.settings.messages[i.name].remote=a.originalMessage;var s=n===!0||"true"===n;if(s){var o=r.formSubmitted;r.prepareElement(i),r.formSubmitted=o,r.successList.push(i),delete r.invalid[i.name],r.showErrors()}else{var u={},l=n||r.defaultMessage(i,"remote");u[i.name]=a.message=t.isFunction(l)?l(e):l,r.invalid[i.name]=!0,r.showErrors(u)}a.valid=s,r.stopRequest(i,s)}},n)),"pending"}}}),t.format=t.validator.format}(jQuery),function(t){var e={};if(t.ajaxPrefilter)t.ajaxPrefilter(function(t,i,n){var a=t.port;"abort"===t.mode&&(e[a]&&e[a].abort(),e[a]=n)});else{var i=t.ajax;t.ajax=function(n){var a=("mode"in n?n:t.ajaxSettings).mode,r=("port"in n?n:t.ajaxSettings).port;return"abort"===a?(e[r]&&e[r].abort(),e[r]=i.apply(this,arguments),e[r]):i.apply(this,arguments)}}}(jQuery),function(t){t.extend(t.fn,{validateDelegate:function(e,i,n){return this.bind(i,function(i){var a=t(i.target);return a.is(e)?n.apply(a,arguments):void 0})}})}(jQuery),function(t){function e(t,e,i){t.rules[e]=i,t.message&&(t.messages[e]=t.message)}function i(t){return t.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/g)}function n(t){return t.replace(/([!"#$%&'()*+,.\/:;<=>?@\[\\\]^`{|}~])/g,"\\$1")}function a(t){return t.substr(0,t.lastIndexOf(".")+1)}function r(t,e){return 0===t.indexOf("*.")&&(t=t.replace("*.",e)),t}function s(e,i){var a=t(this).find("[data-valmsg-for='"+n(i[0].name)+"']"),r=a.attr("data-valmsg-replace"),s=r?t.parseJSON(r)!==!1:null;a.removeClass("field-validation-valid").addClass("field-validation-error"),e.data("unobtrusiveContainer",a),s?(a.empty(),e.removeClass("input-validation-error").appendTo(a)):e.hide()}function o(e,i){var n=t(this).find("[data-valmsg-summary=true]"),a=n.find("ul");a&&a.length&&i.errorList.length&&(a.empty(),n.addClass("validation-summary-errors").removeClass("validation-summary-valid"),t.each(i.errorList,function(){t("
  • ").html(this.message).appendTo(a)}))}function u(e){var i=e.data("unobtrusiveContainer"),n=i.attr("data-valmsg-replace"),a=n?t.parseJSON(n):null;i&&(i.addClass("field-validation-valid").removeClass("field-validation-error"),e.removeData("unobtrusiveContainer"),a&&i.empty())}function l(e){var i=t(this);i.data("validator").resetForm(),i.find(".validation-summary-errors").addClass("validation-summary-valid").removeClass("validation-summary-errors"),i.find(".field-validation-error").addClass("field-validation-valid").removeClass("field-validation-error").removeData("unobtrusiveContainer").find(">*").removeData("unobtrusiveContainer")}function d(e){var i=t(e),n=i.data(c),a=t.proxy(l,e),r=m.unobtrusive.options||{},d=function(i,n){var a=r[i];a&&t.isFunction(a)&&a.apply(e,n)};return n||(n={options:{errorClass:r.errorClass||"input-validation-error",errorElement:r.errorElement||"span",errorPlacement:function(){s.apply(e,arguments),d("errorPlacement",arguments)},invalidHandler:function(){o.apply(e,arguments),d("invalidHandler",arguments)},messages:{},rules:{},success:function(){u.apply(e,arguments),d("success",arguments)}},attachValidation:function(){i.off("reset."+c,a).on("reset."+c,a).validate(this.options)},validate:function(){return i.validate(),i.valid()}},i.data(c,n)),n}var h,m=t.validator,c="unobtrusiveValidation";m.unobtrusive={adapters:[],parseElement:function(e,i){var n,a,r,s=t(e),o=s.parents("form")[0];o&&(n=d(o),n.options.rules[e.name]=a={},n.options.messages[e.name]=r={},t.each(this.adapters,function(){var i="data-val-"+this.name,n=s.attr(i),u={};void 0!==n&&(i+="-",t.each(this.params,function(){u[this]=s.attr(i+this)}),this.adapt({element:e,form:o,message:n,params:u,rules:a,messages:r}))}),t.extend(a,{__dummy__:!0}),i||n.attachValidation())},parse:function(e){var i=t(e),n=i.parents().addBack().filter("form").add(i.find("form")).has("[data-val=true]");i.find("[data-val=true]").each(function(){m.unobtrusive.parseElement(this,!0)}),n.each(function(){var t=d(this);t&&t.attachValidation()})}},h=m.unobtrusive.adapters,h.add=function(t,e,i){return i||(i=e,e=[]),this.push({name:t,params:e,adapt:i}),this},h.addBool=function(t,i){return this.add(t,function(n){e(n,i||t,!0)})},h.addMinMax=function(t,i,n,a,r,s){return this.add(t,[r||"min",s||"max"],function(t){var r=t.params.min,s=t.params.max;r&&s?e(t,a,[r,s]):r?e(t,i,r):s&&e(t,n,s)})},h.addSingleVal=function(t,i,n){return this.add(t,[i||"val"],function(a){e(a,n||t,a.params[i])})},m.addMethod("__dummy__",function(t,e,i){return!0}),m.addMethod("regex",function(t,e,i){var n;return this.optional(e)?!0:(n=new RegExp(i).exec(t),n&&0===n.index&&n[0].length===t.length)}),m.addMethod("nonalphamin",function(t,e,i){var n;return i&&(n=t.match(/\W/g),n=n&&n.length>=i),n}),m.methods.extension?(h.addSingleVal("accept","mimtype"),h.addSingleVal("extension","extension")):h.addSingleVal("extension","extension","accept"),h.addSingleVal("regex","pattern"),h.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url"),h.addMinMax("length","minlength","maxlength","rangelength").addMinMax("range","min","max","range"),h.addMinMax("minlength","minlength").addMinMax("maxlength","minlength","maxlength"),h.add("equalto",["other"],function(i){var s=a(i.element.name),o=i.params.other,u=r(o,s),l=t(i.form).find(":input").filter("[name='"+n(u)+"']")[0];e(i,"equalTo",l)}),h.add("required",function(t){("INPUT"!==t.element.tagName.toUpperCase()||"CHECKBOX"!==t.element.type.toUpperCase())&&e(t,"required",!0)}),h.add("remote",["url","type","additionalfields"],function(s){var o={url:s.params.url,type:s.params.type||"GET",data:{}},u=a(s.element.name);t.each(i(s.params.additionalfields||s.element.name),function(e,i){var a=r(i,u);o.data[a]=function(){return t(s.form).find(":input").filter("[name='"+n(a)+"']").val()}}),e(s,"remote",o)}),h.add("password",["min","nonalphamin","regex"],function(t){t.params.min&&e(t,"minlength",t.params.min),t.params.nonalphamin&&e(t,"nonalphamin",t.params.nonalphamin),t.params.regex&&e(t,"regex",t.params.regex)}),t(function(){m.unobtrusive.parse(document)})}(jQuery),function(t){t.validator.addMethod("optionrequired",function(e,i,n){var a=!0;if(t(i).is("input")){var r=t(i).closest("ol");a=r.find("input:checked").length>0,r.toggleClass("input-validation-error",!a)}else if(t(i).is("select")){var s=t(i).val();a=!!s&&s.length>0}return a},"An option is required"),t.validator.unobtrusive.adapters.addBool("mandatory","required"),t.validator.unobtrusive.adapters.addBool("optionrequired")}(jQuery); \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js index 236d0b9d876..fa7b2abc1a3 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js @@ -880,7 +880,7 @@ angular connectWith: _(parentClasses).map(function (e) { return "#" + editorId + " " + e + ":not(.layout-container-sealed) > .layout-element-wrapper > .layout-children"; }).join(", "), placeholder: placeholderClasses, "ui-floating": floating, - helper: "clone", + helper: "clone", // We clone the element and we append it to the body because the container overflow is set to auto (see: Assets\Less\LayoutEditor\Toolbox.less) and otherwise it could not be moved with drag&drop appendTo: "body", create: function (e, ui) { e.target.isToolbox = true; // Will indicate to connected sortables that dropped items were sent from toolbox. @@ -966,4 +966,4 @@ angular }; } ]); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxheW91dEVkaXRvci5qcyIsIk1vZHVsZS5qcyIsIkNsaXBib2FyZC5qcyIsIlNjb3BlQ29uZmlndXJhdG9yLmpzIiwiRWRpdG9yLmpzIiwiQ2FudmFzLmpzIiwiQ2hpbGQuanMiLCJDb2x1bW4uanMiLCJDb250ZW50LmpzIiwiR3JpZC5qcyIsIlJvdy5qcyIsIlBvcHVwLmpzIiwiVG9vbGJveC5qcyIsIlRvb2xib3hHcm91cC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUNMQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2xWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQzlNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiTGF5b3V0RWRpdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJhbmd1bGFyLm1vZHVsZShcIkxheW91dEVkaXRvclwiLCBbXCJuZ1Nhbml0aXplXCIsIFwibmdSZXNvdXJjZVwiLCBcInVpLnNvcnRhYmxlXCJdKTsiLCJ2YXIgTGF5b3V0RWRpdG9yO1xyXG4oZnVuY3Rpb24oTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgdmFyIENsaXBib2FyZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5fY2xpcGJvYXJkRGF0YSA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2lzRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl93YXNJbnZva2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0RGF0YSA9IGZ1bmN0aW9uKGNvbnRlbnRUeXBlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIHNlbGYuX2NsaXBib2FyZERhdGFbY29udGVudFR5cGVdID0gZGF0YTtcclxuICAgICAgICAgICAgc2VsZi5fd2FzSW52b2tlZCA9IHRydWU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmdldERhdGEgPSBmdW5jdGlvbiAoY29udGVudFR5cGUpIHtcclxuICAgICAgICAgICAgc2VsZi5fd2FzSW52b2tlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLl9jbGlwYm9hcmREYXRhW2NvbnRlbnRUeXBlXTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBzZWxmLl9pc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2VsZi5fd2FzSW52b2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZWxmLl9jbGlwYm9hcmREYXRhID0ge307XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLl9pc0Rpc2FibGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLndhc0ludm9rZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLl93YXNJbnZva2VkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuQ2xpcGJvYXJkID0gbmV3IENsaXBib2FyZCgpO1xyXG5cclxuICAgIGFuZ3VsYXJcclxuICAgICAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAgICAgLmZhY3RvcnkoXCJjbGlwYm9hcmRcIiwgW1xyXG4gICAgICAgICAgICBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0RGF0YTogTGF5b3V0RWRpdG9yLkNsaXBib2FyZC5zZXREYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIGdldERhdGE6IExheW91dEVkaXRvci5DbGlwYm9hcmQuZ2V0RGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlOiBMYXlvdXRFZGl0b3IuQ2xpcGJvYXJkLmRpc2FibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogTGF5b3V0RWRpdG9yLkNsaXBib2FyZC5pc0Rpc2FibGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhc0ludm9rZWQ6IExheW91dEVkaXRvci5DbGlwYm9hcmQud2FzSW52b2tlZFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF0pO1xyXG59KShMYXlvdXRFZGl0b3IgfHwgKExheW91dEVkaXRvciA9IHt9KSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmZhY3RvcnkoXCJzY29wZUNvbmZpZ3VyYXRvclwiLCBbXCIkdGltZW91dFwiLCBcImNsaXBib2FyZFwiLFxyXG4gICAgICAgIGZ1bmN0aW9uICgkdGltZW91dCwgY2xpcGJvYXJkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJlRm9yRWxlbWVudDogZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICRlbGVtZW50LmZpbmQoXCIubGF5b3V0LXBhbmVsXCIpLmNsaWNrKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRlbGVtZW50LnBhcmVudCgpLmtleWRvd24oZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc2V0Rm9jdXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSAkc2NvcGUuZWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZWRpdG9yLmlzRHJhZ2dpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBuYXRpdmUgY2xpcGJvYXJkIHN1cHBvcnQgZXhpc3RzLCB0aGUgcHNldWRvLWNsaXBib2FyZCB3aWxsIGhhdmUgYmVlbiBkaXNhYmxlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjbGlwYm9hcmQuaXNEaXNhYmxlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9jdXNlZEVsZW1lbnQgPSBlbGVtZW50LmVkaXRvci5mb2N1c2VkRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWZvY3VzZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHNldWRvIGNsaXBib2FyZCBoYW5kbGluZyBmb3IgYnJvd3NlcnMgbm90IGFsbG93aW5nIHJlYWwgY2xpcGJvYXJkIG9wZXJhdGlvbnMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY3RybEtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGUud2hpY2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2NzogLy8gQ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZEVsZW1lbnQuY29weShjbGlwYm9hcmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODg6IC8vIFhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWRFbGVtZW50LmN1dChjbGlwYm9hcmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODY6IC8vIFZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWRFbGVtZW50LnBhc3RlKGNsaXBib2FyZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gNDYpIHsgLy8gRGVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZGVsZXRlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgKGUud2hpY2ggPT0gMzIgfHwgZS53aGljaCA9PSAyNykpIHsgLy8gU3BhY2Ugb3IgRXNjXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWxlbWVudC5maW5kKFwiLmxheW91dC1wYW5lbC1hY3Rpb24tcHJvcGVydGllc1wiKS5maXJzdCgpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhZWxlbWVudC5oYXNFZGl0b3IpIHsgLy8gVGhpcyBlbGVtZW50IGhhcyBhbiBlZGl0b3IgZGlhbG9nLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMTMpIHsgLy8gRW50ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWxlbWVudC5maW5kKFwiLmxheW91dC1wYW5lbC1hY3Rpb24tZWRpdFwiKS5maXJzdCgpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWVsZW1lbnQuY2hpbGRyZW4pIHsgLy8gVGhpcyBpcyBhIGNvbnRhaW5lci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmIGUuYWx0S2V5ICYmIGUud2hpY2ggPT0gNDApIHsgLy8gQWx0K0Rvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNoaWxkcmVuWzBdLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT0gXCJDb2x1bW5cIikgeyAvLyBUaGlzIGlzIGEgY29sdW1uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb25uZWN0QWRqYWNlbnQgPSAhZS5jdHJsS2V5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLndoaWNoID09IDM3KSB7IC8vIExlZnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuYWx0S2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5leHBhbmRMZWZ0KGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnNoaWZ0S2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb250cmFjdFJpZ2h0KGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS53aGljaCA9PSAzOSkgeyAvLyBSaWdodFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5hbHRLZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNvbnRyYWN0TGVmdChjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5zaGlmdEtleSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZXhwYW5kUmlnaHQoY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFlbGVtZW50LnBhcmVudCkgeyAvLyBUaGlzIGlzIGEgY2hpbGQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5hbHRLZXkgJiYgZS53aGljaCA9PSAzOCkgeyAvLyBBbHQrVXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudC5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXJlbnQudHlwZSA9PSBcIlJvd1wiKSB7IC8vIFBhcmVudCBpcyBhIGhvcml6b250YWwgY29udGFpbmVyLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDM3KSB7IC8vIExlZnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnQubW92ZUZvY3VzUHJldkNoaWxkKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSAzOSkgeyAvLyBSaWdodFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudC5tb3ZlRm9jdXNOZXh0Q2hpbGQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMzcpIHsgLy8gQ3RybCtMZWZ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubW92ZVVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Rm9jdXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDM5KSB7IC8vIEN0cmwrUmlnaHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tb3ZlRG93bigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgLy8gUGFyZW50IGlzIGEgdmVydGljYWwgY29udGFpbmVyLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDM4KSB7IC8vIFVwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Lm1vdmVGb2N1c1ByZXZDaGlsZChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gNDApIHsgLy8gRG93blxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudC5tb3ZlRm9jdXNOZXh0Q2hpbGQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMzgpIHsgLy8gQ3RybCtVcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1vdmVVcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldEZvY3VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSA0MCkgeyAvLyBDdHJsK0Rvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tb3ZlRG93bigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KCk7IC8vIEV2ZW50IGlzIG5vdCB0cmlnZ2VyZWQgYnkgQW5ndWxhciBkaXJlY3RpdmUgYnV0IHJhdyBldmVudCBoYW5kbGVyIG9uIGVsZW1lbnQuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBIQUNLOiBXb3JrYXJvdW5kIGJlY2F1c2Ugb2YgaG93IEFuZ3VsYXIgdHJlYXRzIHRoZSBET00gd2hlbiBlbGVtZW50cyBhcmUgc2hpZnRlZCBhcm91bmQgLSBpbnB1dCBmb2N1cyBpcyBzb21ldGltZXMgbG9zdC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc2V0Rm9jdXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lZGl0b3IuZm9jdXNlZEVsZW1lbnQuc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50LnNldElzRm9jdXNlZEV2ZW50SGFuZGxlcnMucHVzaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRlbGVtZW50LnBhcmVudCgpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5kZWxldGUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmRlbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRzY29wZS5lbGVtZW50Lmhhc0VkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWRpdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kcm9vdC5lZGl0RWxlbWVudCgkc2NvcGUuZWxlbWVudCkudGhlbihmdW5jdGlvbiAoYXJncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5jYW5jZWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5kYXRhID0gYXJncy5lbGVtZW50LmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50LmFwcGx5RWxlbWVudEVkaXRvck1vZGVsKGFyZ3MuZWxlbWVudEVkaXRvck1vZGVsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghISRzY29wZS5lbGVtZW50LnNldEh0bWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5zZXRIdG1sKGFyZ3MuZWxlbWVudC5odG1sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJlRm9yQ29udGFpbmVyOiBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gJHNjb3BlLmVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vJHNjb3BlLmlzUmVjZWl2aW5nID0gZmFsc2U7IC8vIFRydWUgd2hlbiBjb250YWluZXIgaXMgcmVjZWl2aW5nIGFuIGV4dGVybmFsIGVsZW1lbnQgdmlhIGRyYWcvZHJvcC5cclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZ2V0U2hvd0NoaWxkcmVuUGxhY2Vob2xkZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkc2NvcGUuZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPT09IDAgJiYgISRzY29wZS5lbGVtZW50LmdldElzRHJvcFRhcmdldCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5zb3J0YWJsZU9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJtb3ZlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5OiAxNTAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBlbGVtZW50LmdldElzU2VhbGVkKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlOiA1LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2hhbmRsZTogZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPCAyID8gXCIuaW1hZ2luYXJ5LWNsYXNzXCIgOiBmYWxzZSwgLy8gRm9yIHNvbWUgcmVhc29uIGRvZXNuJ3QgZ2V0IHJlLWV2YWx1YXRlZCBhZnRlciBhZGRpbmcgbW9yZSBjaGlsZHJlbi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRJc0Ryb3BUYXJnZXQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lZGl0b3IuaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2UgdGhlIGRyb3AgdGFyZ2V0IHBsYWNlaG9sZGVyIGFzIGhpZ2ggYXMgdGhlIGl0ZW0gYmVpbmcgZHJhZ2dlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnBsYWNlaG9sZGVyLmhlaWdodCh1aS5pdGVtLmhlaWdodCgpIC0gNCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5wbGFjZWhvbGRlci5jc3MoXCJtaW4taGVpZ2h0XCIsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9wOiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWRpdG9yLmlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldElzRHJvcFRhcmdldChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcjogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISF1aS5zZW5kZXIgJiYgISF1aS5zZW5kZXJbMF0uaXNUb29sYm94KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhdWkuc2VuZGVyWzBdLmRyb3BUYXJnZXRUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aW1lb3V0LmNhbmNlbCh1aS5zZW5kZXJbMF0uZHJvcFRhcmdldFRpbWVvdXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5zZW5kZXJbMF0uZHJvcFRhcmdldFRpbWVvdXQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT0gXCJSb3dcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIGEgcHJldmlvdXMgZHJvcCB0YXJnZXQgYW5kIGl0IHdhcyBhIHJvdywgcm9sbCBiYWNrIGFueSBwZW5kaW5nIGNvbHVtbiBhZGRzIHRvIGl0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzRHJvcFRhcmdldCA9IGVsZW1lbnQuZWRpdG9yLmRyb3BUYXJnZXRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcHJldmlvdXNEcm9wVGFyZ2V0ICYmIHByZXZpb3VzRHJvcFRhcmdldC50eXBlID09IFwiUm93XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNEcm9wVGFyZ2V0LnJvbGxiYWNrQWRkQ29sdW1uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRJc0Ryb3BUYXJnZXQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnNlbmRlclswXS5kcm9wVGFyZ2V0VGltZW91dCA9ICR0aW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSBcIlJvd1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVjZWl2ZWRDb2x1bW4gPSB1aS5pdGVtLnNvcnRhYmxlLm1vZGVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY2VpdmVkQ29sdW1uV2lkdGggPSBNYXRoLmZsb29yKDEyIC8gKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoICsgMSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRDb2x1bW4ud2lkdGggPSByZWNlaXZlZENvbHVtbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRDb2x1bW4ub2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYmVnaW5BZGRDb2x1bW4ocmVjZWl2ZWRDb2x1bW5XaWR0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHRoZSBkcm9wIHRhcmdldCBwbGFjZWhvbGRlciB0aGUgY29ycmVjdCB3aWR0aCBhbmQgYXMgaGlnaCBhcyB0aGUgaGlnaGVzdCBleGlzdGluZyBjb2x1bW4gaW4gdGhlIHJvdy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhIZWlnaHQgPSBfLm1heChfKCRlbGVtZW50LmZpbmQoXCI+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWNvbHVtbjpub3QoLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyKVwiKSkubWFwKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoZSkuaGVpZ2h0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IDEyOyBpKyspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIucmVtb3ZlQ2xhc3MoXCJjb2wteHMtXCIgKyBpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnBsYWNlaG9sZGVyLmFkZENsYXNzKFwiY29sLXhzLVwiICsgcmVjZWl2ZWRDb2x1bW4ud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heEhlaWdodCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5wbGFjZWhvbGRlci5oZWlnaHQobWF4SGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5wbGFjZWhvbGRlci5jc3MoXCJtaW4taGVpZ2h0XCIsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIuaGVpZ2h0KDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnBsYWNlaG9sZGVyLmNzcyhcIm1pbi1oZWlnaHRcIiwgXCJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRJc0Ryb3BUYXJnZXQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTUwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZTogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISF1aS5zZW5kZXIgJiYgISF1aS5zZW5kZXJbMF0uaXNUb29sYm94KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNlaXZlZEVsZW1lbnQgPSB1aS5pdGVtLnNvcnRhYmxlLm1vZGVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFyZWNlaXZlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT0gXCJSb3dcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNvbW1pdEFkZENvbHVtbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGlkZWFsbHkgY2FsbCBMYXlvdXRFZGl0b3IuQ29udGFpbmVyLmFkZENoaWxkKCkgaW5zdGVhZCwgYnV0IHNpbmNlIHRoaXMgaGFuZGxlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgcnVuICpiZWZvcmUqIHRoZSB1aS1zb3J0YWJsZSBkaXJlY3RpdmUncyBoYW5kbGVyLCBpZiB3ZSB0cnkgdG8gYWRkIHRoZSBjaGlsZCB0byB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFycmF5IHRoYXQgaGFuZGxlciB3aWxsIGdldCBhbiBleGNlcHRpb24gd2hlbiB0cnlpbmcgdG8gZG8gdGhlIHNhbWUuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIG9mIHRoaXMsIHdlIG5lZWQgdG8gaW52b2tlIFwic2V0UGFyZW50XCIgc28gdGhhdCBzcGVjaWZpYyBjb250YWluZXIgdHlwZXMgY2FuIHBlcmZvcm0gZWxlbWVudCBzcGVmaWNpYyBpbml0aWFsaXphdGlvbi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5zZXRFZGl0b3IoZWxlbWVudC5lZGl0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRFbGVtZW50LnNldFBhcmVudChlbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFyZWNlaXZlZEVsZW1lbnQuaGFzRWRpdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRyb290LmVkaXRFbGVtZW50KHJlY2VpdmVkRWxlbWVudCkudGhlbihmdW5jdGlvbiAoYXJncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ3MuY2FuY2VsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZEVsZW1lbnQuZGF0YSA9IGFyZ3MuZWxlbWVudC5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRFbGVtZW50LmFwcGx5RWxlbWVudEVkaXRvck1vZGVsKGFyZ3MuZWxlbWVudEVkaXRvck1vZGVsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFyZWNlaXZlZEVsZW1lbnQuc2V0SHRtbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZEVsZW1lbnQuc2V0SHRtbChhcmdzLmVsZW1lbnQuaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhYXJncy5jYW5jZWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRFbGVtZW50LmRlbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJHNjb3BlLmlzUmVjZWl2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldElzRHJvcFRhcmdldChmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJHNjb3BlLmlzUmVjZWl2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldElzRHJvcFRhcmdldChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFyZWNlaXZlZEVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRFbGVtZW50LnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5jbGljayA9IGZ1bmN0aW9uIChjaGlsZCwgZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLmVkaXRvci5pc0RyYWdnaW5nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmdldENsYXNzZXMgPSBmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtcImxheW91dC1lbGVtZW50XCJdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhY2hpbGQuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWNvbnRhaW5lclwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5nZXRJc1NlYWxlZCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWNvbnRhaW5lci1zZWFsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LVwiICsgY2hpbGQudHlwZS50b0xvd2VyQ2FzZSgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWNoaWxkLmRyb3BUYXJnZXRDbGFzcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkLmRyb3BUYXJnZXRDbGFzcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoZXNlIHRvIGVpdGhlciB0aGUgQ29sdW1uIGRpcmVjdGl2ZSBvciB0aGUgQ29sdW1uIG1vZGVsIGNsYXNzLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PSBcIlJvd1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcInJvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGQuY2FuQWRkQ29sdW1uKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtcm93LWZ1bGxcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT0gXCJDb2x1bW5cIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJjb2wteHMtXCIgKyBjaGlsZC53aWR0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImNvbC14cy1vZmZzZXQtXCIgKyBjaGlsZC5vZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC50eXBlID09IFwiQ29udGVudFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtY29udGVudC1cIiArIGNoaWxkLmNvbnRlbnRUeXBlQ2xhc3MpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldElzQWN0aXZlKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LWFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldElzRm9jdXNlZCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC1mb2N1c2VkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0SXNTZWxlY3RlZCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC1zZWxlY3RlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldElzRHJvcFRhcmdldCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuaXNUZW1wbGF0ZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LXRlbXBsYXRlZFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRFZGl0b3JcIiwgW1wiZW52aXJvbm1lbnRcIixcbiAgICAgICAgZnVuY3Rpb24gKGVudmlyb25tZW50KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJlc3RyaWN0OiBcIkVcIixcbiAgICAgICAgICAgICAgICBzY29wZToge30sXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIiwgXCIkYXR0cnNcIiwgXCIkY29tcGlsZVwiLCBcImNsaXBib2FyZFwiLFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCwgJGF0dHJzLCAkY29tcGlsZSwgY2xpcGJvYXJkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISEkYXR0cnMubW9kZWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQgPSBldmFsKCRhdHRycy5tb2RlbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlICdtb2RlbCcgYXR0cmlidXRlIG11c3QgZXZhbHVhdGUgdG8gYSBMYXlvdXRFZGl0b3IuRWRpdG9yIG9iamVjdC5cIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5jbGljayA9IGZ1bmN0aW9uIChjYW52YXMsIGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbnZhcy5lZGl0b3IuaXNEcmFnZ2luZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLnNldElzRm9jdXNlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZ2V0Q2xhc3NlcyA9IGZ1bmN0aW9uIChjYW52YXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gW1wibGF5b3V0LWVsZW1lbnRcIiwgXCJsYXlvdXQtY29udGFpbmVyXCIsIFwibGF5b3V0LWNhbnZhc1wiXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW52YXMuZ2V0SXNBY3RpdmUoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC1hY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhcy5nZXRJc0ZvY3VzZWQoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC1mb2N1c2VkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW52YXMuZ2V0SXNTZWxlY3RlZCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LXNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW52YXMuZ2V0SXNEcm9wVGFyZ2V0KCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FudmFzLmlzVGVtcGxhdGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LXRlbXBsYXRlZFwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBbiB1bmZvcnR1bmF0ZSBzaWRlLWVmZmVjdCBvZiB0aGUgbmV4dCBoYWNrIG9uIGxpbmUgNTQgaXMgdGhhdCB0aGUgY3JlYXRlZCBlbGVtZW50cyBhcmVuJ3QgYWRkZWQgdG8gdGhlIERPTSB5ZXQsIHNvIHdlIGNhbid0IHVzZSBpdCB0byBnZXQgdG8gdGhlIHBhcmVudCBcIi5sYXlvdXQtZGVzaWdlclwiIGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXb3JrIGFyb3VuZDogYWNjZXNzIHRoYXQgZWxlbWVudCBkaXJlY3RseSAod2hpY2ggZWZlY3RpdmVseSB0dXJucyBtdWx0aXBsZSBsYXlvdXQgZWRpdG9ycyBvbiBhIHNpbmdsZSBwYWdlIGltcG9zc2libGUpLiBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIC8vdmFyIGxheW91dERlc2lnbmVySG9zdCA9ICRlbGVtZW50LmNsb3Nlc3QoXCIubGF5b3V0LWRlc2lnbmVyXCIpLmRhdGEoXCJsYXlvdXQtZGVzaWduZXItaG9zdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXlvdXREZXNpZ25lckhvc3QgPSAkKFwiLmxheW91dC1kZXNpZ25lclwiKS5kYXRhKFwibGF5b3V0LWRlc2lnbmVyLWhvc3RcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kcm9vdC5sYXlvdXREZXNpZ25lckhvc3QgPSBsYXlvdXREZXNpZ25lckhvc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dERlc2lnbmVySG9zdC5lbGVtZW50Lm9uKFwicmVwbGFjZWNhbnZhc1wiLCBmdW5jdGlvbiAoZSwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlZGl0b3IgPSAkc2NvcGUuZWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogYXJncy5jYW52YXMuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbElkOiBhcmdzLmNhbnZhcy5odG1sSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxDbGFzczogYXJncy5jYW52YXMuaHRtbENsYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sU3R5bGU6IGFyZ3MuY2FudmFzLmh0bWxTdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUZW1wbGF0ZWQ6IGFyZ3MuY2FudmFzLmlzVGVtcGxhdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogYXJncy5jYW52YXMuY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFDSzogSW5zdGVhZCBvZiBzaW1wbHkgdXBkYXRpbmcgdGhlICRzY29wZS5lbGVtZW50IHdpdGggYSBuZXcgaW5zdGFuY2UsIHdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgZW50aXJlIG9yYy1sYXlvdXQtZWRpdG9yIG1hcmt1cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIG9yZGVyIGZvciBhbmd1bGFyIHRvIHJlYmluZCBzdGFydGluZyB3aXRoIHRoZSBDYW52YXMgZWxlbWVudC4gT3RoZXJ3aXNlLCBmb3Igc29tZSByZWFzb24sIGl0IHdpbGwgcmViaW5kIHN0YXJ0aW5nIHdpdGggdGhlIGZpcnN0IGNoaWxkIG9mIENhbnZhcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBZb3UgY2FuIHNlZSB0aGlzIGhhcHBlbmluZyB3aGVuIHNldHRpbmcgYSBicmVha3BvaW50IGluIFNjb3BlQ29uZmlndXJhdG9yIHdoZXJlIGNvbnRhaW5lcnMgYXJlIGluaXRpYWxpemVkIHdpdGggZHJhZyAmIGRyb3A6IG9uIHBhZ2UgbG9hZCwgdGhlIGZpcnN0IGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBhIENhbnZhcyAoZ29vZCksIGJ1dCBhZnRlciBoYXZpbmcgc2VsZWN0ZWQgYW5vdGhlciB0ZW1wbGF0ZSwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgKHR5cGljYWxseSkgYSBHcmlkIChiYWQpLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbXBseSByZWNvbXBpbGluZyB0aGUgb3JjLWxheW91dC1lZGl0b3IgZGlyZWN0aXZlIHdpbGwgY2F1c2UgdGhlIGVudGlyZSB0aGluZyB0byBiZSBnZW5lcmF0ZWQsIHdoaWNoIHdvcmtzIGp1c3QgZmluZSBhcyB3ZWxsIChldmVuIHRob3VnaCBub3QgaXMgbmljZSBhcyBzaW1wbHkgbGV2ZXJhZ2luZyBtb2RlbCBiaW5kaW5nKS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXREZXNpZ25lckhvc3QuZWRpdG9yID0gd2luZG93LmxheW91dEVkaXRvciA9IG5ldyBMYXlvdXRFZGl0b3IuRWRpdG9yKGVkaXRvci5jb25maWcsIGNhbnZhc0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IFwiPG9yYy1sYXlvdXQtZWRpdG9yXCIgKyBcIiBtb2RlbD0nd2luZG93LmxheW91dEVkaXRvcicgLz5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9ICRjb21waWxlKHRlbXBsYXRlKSgkc2NvcGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIubGF5b3V0LWVkaXRvci1ob2xkZXJcIikuaHRtbChodG1sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJHJvb3QuZWRpdEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBob3N0ID0gJHNjb3BlLiRyb290LmxheW91dERlc2lnbmVySG9zdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG9zdC5lZGl0RWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kcm9vdC5hZGRFbGVtZW50ID0gZnVuY3Rpb24gKGNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhvc3QgPSAkc2NvcGUuJHJvb3QubGF5b3V0RGVzaWduZXJIb3N0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBob3N0LmFkZEVsZW1lbnQoY29udGVudFR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkub24oXCJjdXQgY29weSBwYXN0ZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwc2V1ZG8gY2xpcGJvYXJkIHdhcyBhbHJlYWR5IGludm9rZWQgKHdoaWNoIGhhcHBlbnMgb24gdGhlIGZpcnN0IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wZXJhdGlvbiBhZnRlciBwYWdlIGxvYWQgZXZlbiBpZiBuYXRpdmUgY2xpcGJvYXJkIHN1cHBvcnQgZXhpc3RzKSB0aGVuIHNpdCB0aGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25lIG9wZXJhdGlvbiBvdXQsIGJ1dCBtYWtlIHN1cmUgd2hhdGV2ZXIgaXMgb24gdGhlIHBzZXVkbyBjbGlwYm9hcmQgZ2V0cyBtaWdyYXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBuYXRpdmUgY2xpcGJvYXJkIGZvciBzdWJzZXF1ZW50IG9wZXJhdGlvbnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsaXBib2FyZC53YXNJbnZva2VkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuc2V0RGF0YShcInRleHQvcGxhaW5cIiwgY2xpcGJvYXJkLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuc2V0RGF0YShcInRleHQvanNvblwiLCBjbGlwYm9hcmQuZ2V0RGF0YShcInRleHQvanNvblwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb2N1c2VkRWxlbWVudCA9ICRzY29wZS5lbGVtZW50LmZvY3VzZWRFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFmb2N1c2VkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNvcHlcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWRFbGVtZW50LmNvcHkoZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjdXRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWRFbGVtZW50LmN1dChlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInBhc3RlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2VkRWxlbWVudC5wYXN0ZShlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFDSzogV29ya2Fyb3VuZCBiZWNhdXNlIG9mIGhvdyBBbmd1bGFyIHRyZWF0cyB0aGUgRE9NIHdoZW4gZWxlbWVudHMgYXJlIHNoaWZ0ZWQgYXJvdW5kIC0gaW5wdXQgZm9jdXMgaXMgc29tZXRpbWVzIGxvc3QuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghISRzY29wZS5lbGVtZW50LmZvY3VzZWRFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuZm9jdXNlZEVsZW1lbnQuc2V0SXNGb2N1c2VkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOYXRpdmUgY2xpcGJvYXJkIHN1cHBvcnQgb2J2aW91c2x5IGV4aXN0cywgc28gZGlzYWJsZSB0aGUgcGV1ZG8gY2xpcGJvYXJkIGZyb20gbm93IG9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBib2FyZC5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiRWRpdG9yXCIpLFxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWUsXG4gICAgICAgICAgICAgICAgbGluazogZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vIGNsaWNrcyBzaG91bGQgcHJvcGFnYXRlIGZyb20gdGhlIFRpbnlNQ0UgdG9vbGJhcnMuXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZmluZChcIi5sYXlvdXQtdG9vbGJhci1jb250YWluZXJcIikuY2xpY2soZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBVbmZvY3VzIGFuZCB1bnNlbGVjdCBldmVyeXRoaW5nIG9uIGNsaWNrIG91dHNpZGUgb2YgY2FudmFzLlxuICAgICAgICAgICAgICAgICAgICAkKHdpbmRvdykuY2xpY2soZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZWxlbWVudC5hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmZvY3VzZWRFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgXSk7IiwiYW5ndWxhclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0Q2FudmFzXCIsIFtcInNjb3BlQ29uZmlndXJhdG9yXCIsIFwiZW52aXJvbm1lbnRcIixcbiAgICAgICAgZnVuY3Rpb24gKHNjb3BlQ29uZmlndXJhdG9yLCBlbnZpcm9ubWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgZWxlbWVudDogXCI9XCIgfSxcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLCBcIiRhdHRyc1wiLFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCwgJGF0dHJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNvbmZpZ3VyYXRvci5jb25maWd1cmVGb3JFbGVtZW50KCRzY29wZSwgJGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yQ29udGFpbmVyKCRzY29wZSwgJGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNvcnRhYmxlT3B0aW9uc1tcImF4aXNcIl0gPSBcInlcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiQ2FudmFzXCIpLFxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICBdKTsiLCJhbmd1bGFyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRDaGlsZFwiLCBbXCIkY29tcGlsZVwiLFxuICAgICAgICBmdW5jdGlvbiAoJGNvbXBpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxuICAgICAgICAgICAgICAgIHNjb3BlOiB7IGVsZW1lbnQ6IFwiPVwiIH0sXG4gICAgICAgICAgICAgICAgbGluazogZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IFwiPG9yYy1sYXlvdXQtXCIgKyBzY29wZS5lbGVtZW50LnR5cGUudG9Mb3dlckNhc2UoKSArIFwiIGVsZW1lbnQ9J2VsZW1lbnQnIC8+XCI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gJGNvbXBpbGUodGVtcGxhdGUpKHNjb3BlKTtcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS5yZXBsYWNlV2l0aChodG1sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgXSk7IiwiYW5ndWxhclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0Q29sdW1uXCIsIFtcIiRjb21waWxlXCIsIFwic2NvcGVDb25maWd1cmF0b3JcIiwgXCJlbnZpcm9ubWVudFwiLFxuICAgICAgICBmdW5jdGlvbiAoJGNvbXBpbGUsIHNjb3BlQ29uZmlndXJhdG9yLCBlbnZpcm9ubWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgZWxlbWVudDogXCI9XCIgfSxcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yRWxlbWVudCgkc2NvcGUsICRlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckNvbnRhaW5lcigkc2NvcGUsICRlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5zb3J0YWJsZU9wdGlvbnNbXCJheGlzXCJdID0gXCJ5XCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBlbnZpcm9ubWVudC50ZW1wbGF0ZVVybChcIkNvbHVtblwiKSxcbiAgICAgICAgICAgICAgICByZXBsYWNlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uIChzY29wZSwgZWxlbWVudCwgYXR0cnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5maW5kKFwiLmxheW91dC1jb2x1bW4tcmVzaXplLWJhclwiKS5kcmFnZ2FibGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYXhpczogXCJ4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXI6IFwiY2xvbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldmVydDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoZSwgdWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmVkaXRvci5pc1Jlc2l6aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkcmFnOiBmdW5jdGlvbiAoZSwgdWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uRWxlbWVudCA9IGVsZW1lbnQucGFyZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtblNpemUgPSBjb2x1bW5FbGVtZW50LndpZHRoKCkgLyBzY29wZS5lbGVtZW50LndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb25uZWN0QWRqYWNlbnQgPSAhZS5jdHJsS2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKGUudGFyZ2V0KS5oYXNDbGFzcyhcImxheW91dC1jb2x1bW4tcmVzaXplLWJhci1sZWZ0XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IHVpLm9mZnNldC5sZWZ0IC0gY29sdW1uRWxlbWVudC5vZmZzZXQoKS5sZWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsdGEgPCAtY29sdW1uU2l6ZSAmJiBzY29wZS5lbGVtZW50LmNhbkV4cGFuZExlZnQoY29ubmVjdEFkamFjZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmV4cGFuZExlZnQoY29ubmVjdEFkamFjZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhID4gY29sdW1uU2l6ZSAmJiBzY29wZS5lbGVtZW50LmNhbkNvbnRyYWN0TGVmdChjb25uZWN0QWRqYWNlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuY29udHJhY3RMZWZ0KGNvbm5lY3RBZGphY2VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgkKGUudGFyZ2V0KS5oYXNDbGFzcyhcImxheW91dC1jb2x1bW4tcmVzaXplLWJhci1yaWdodFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSB1aS5vZmZzZXQubGVmdCAtIGNvbHVtbkVsZW1lbnQud2lkdGgoKSAtIGNvbHVtbkVsZW1lbnQub2Zmc2V0KCkubGVmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhID4gY29sdW1uU2l6ZSAmJiBzY29wZS5lbGVtZW50LmNhbkV4cGFuZFJpZ2h0KGNvbm5lY3RBZGphY2VudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZWxlbWVudC5leHBhbmRSaWdodChjb25uZWN0QWRqYWNlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEgPCAtY29sdW1uU2l6ZSAmJiBzY29wZS5lbGVtZW50LmNhbkNvbnRyYWN0UmlnaHQoY29ubmVjdEFkamFjZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmNvbnRyYWN0UmlnaHQoY29ubmVjdEFkamFjZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24gKGUsIHVpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuZWRpdG9yLmlzUmVzaXppbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRDb250ZW50XCIsIFtcIiRzY2VcIiwgXCJzY29wZUNvbmZpZ3VyYXRvclwiLCBcImVudmlyb25tZW50XCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKCRzY2UsIHNjb3BlQ29uZmlndXJhdG9yLCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgZWxlbWVudDogXCI9XCIgfSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yRWxlbWVudCgkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJ3cml0ZSB0aGUgc2V0SHRtbCBmdW5jdGlvbiBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlICRzY2Ugc2VydmljZSB0byB0cnVzdCB0aGUgaHRtbCAoYW5kIG5vdCBoYXZlIHRoZSBodG1sIGJpbmRpbmcgc3RyaXAgY2VydGFpbiB0YWdzKS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuc2V0SHRtbCA9IGZ1bmN0aW9uIChodG1sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5odG1sID0gaHRtbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50Lmh0bWxVbnNhZmUgPSAkc2NlLnRydXN0QXNIdG1sKGh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuc2V0SHRtbCgkc2NvcGUuZWxlbWVudC5odG1sKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiQ29udGVudFwiKSxcclxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRHcmlkXCIsIFtcIiRjb21waWxlXCIsIFwic2NvcGVDb25maWd1cmF0b3JcIiwgXCJlbnZpcm9ubWVudFwiLFxuICAgICAgICBmdW5jdGlvbiAoJGNvbXBpbGUsIHNjb3BlQ29uZmlndXJhdG9yLCBlbnZpcm9ubWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgZWxlbWVudDogXCI9XCIgfSxcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yRWxlbWVudCgkc2NvcGUsICRlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckNvbnRhaW5lcigkc2NvcGUsICRlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5zb3J0YWJsZU9wdGlvbnNbXCJheGlzXCJdID0gXCJ5XCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBlbnZpcm9ubWVudC50ZW1wbGF0ZVVybChcIkdyaWRcIiksXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIF0pOyIsImFuZ3VsYXJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dFJvd1wiLCBbXCIkY29tcGlsZVwiLCBcInNjb3BlQ29uZmlndXJhdG9yXCIsIFwiZW52aXJvbm1lbnRcIixcbiAgICAgICAgZnVuY3Rpb24gKCRjb21waWxlLCBzY29wZUNvbmZpZ3VyYXRvciwgZW52aXJvbm1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxuICAgICAgICAgICAgICAgIHNjb3BlOiB7IGVsZW1lbnQ6IFwiPVwiIH0sXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckVsZW1lbnQoJHNjb3BlLCAkZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNvbmZpZ3VyYXRvci5jb25maWd1cmVGb3JDb250YWluZXIoJHNjb3BlLCAkZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuc29ydGFibGVPcHRpb25zW1wiYXhpc1wiXSA9IFwieFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNvcnRhYmxlT3B0aW9uc1tcInVpLWZsb2F0aW5nXCJdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiUm93XCIpLFxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICBdKTsiLCJhbmd1bGFyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRQb3B1cFwiLCBbXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxuICAgICAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uIChzY29wZSwgZWxlbWVudCwgYXR0cnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvcHVwID0gJChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaWdnZXIgPSBwb3B1cC5jbG9zZXN0KFwiLmxheW91dC1wb3B1cC10cmlnZ2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IHBvcHVwLmNsb3Nlc3QoXCIubGF5b3V0LWVsZW1lbnRcIik7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIuY2xpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXAudG9nZ2xlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9wdXAuaXMoXCI6dmlzaWJsZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLnBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXk6IGF0dHJzLm9yY0xheW91dFBvcHVwTXkgfHwgXCJsZWZ0IHRvcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdDogYXR0cnMub3JjTGF5b3V0UG9wdXBBdCB8fCBcImxlZnQgYm90dG9tKzRweFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZjogdHJpZ2dlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLmZpbmQoXCJpbnB1dFwiKS5maXJzdCgpLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBwb3B1cC5jbGljayhmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuY2xpY2soZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHBvcHVwLmtleWRvd24oZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDI3KSAvLyBFc2NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1cC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcG9wdXAub24oXCJjdXQgY29weSBwYXN0ZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgY2xpcGJvYXJkIG9wZXJhdGlvbnMgaW4gcG9wdXAgd2l0aG91dCBpbnZva2luZyBjbGlwYm9hcmQgZXZlbnQgaGFuZGxlcnMgb24gcGFyZW50IGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgXSk7IiwiYW5ndWxhclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0VG9vbGJveFwiLCBbXCIkY29tcGlsZVwiLCBcImVudmlyb25tZW50XCIsXG4gICAgICAgIGZ1bmN0aW9uICgkY29tcGlsZSwgZW52aXJvbm1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50KSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5yZXNldEVsZW1lbnRzID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmdyaWRFbGVtZW50cyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLkdyaWQuZnJvbSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMDBhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiR3JpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIkVtcHR5IGdyaWQuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnJvd0VsZW1lbnRzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuUm93LmZyb20oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjBjOVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIlJvdyAoMSBjb2x1bW4pXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiUm93IHdpdGggMSBjb2x1bW4uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcygxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKDIgY29sdW1ucylcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJSb3cgd2l0aCAyIGNvbHVtbnMuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcygyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKDMgY29sdW1ucylcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJSb3cgd2l0aCAzIGNvbHVtbnMuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcygzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKDQgY29sdW1ucylcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJSb3cgd2l0aCA0IGNvbHVtbnMuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcyg0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKDYgY29sdW1ucylcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJSb3cgd2l0aCA2IGNvbHVtbnMuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcyg2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKDEyIGNvbHVtbnMpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiUm93IHdpdGggMTIgY29sdW1ucy5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBMYXlvdXRFZGl0b3IuQ29sdW1uLnRpbWVzKDEyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKGVtcHR5KVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIkVtcHR5IHJvdy5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuY29sdW1uRWxlbWVudHMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5Db2x1bW4uZnJvbSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMGRiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiRW1wdHkgY29sdW1uLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmNhbnZhc0VsZW1lbnRzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuQ2FudmFzLmZyb20oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjA0NFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIkNhbnZhc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIkVtcHR5IGNhbnZhcy5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuY29udGVudEVsZW1lbnRDYXRlZ29yaWVzID0gXygkc2NvcGUuZWxlbWVudC5jb25maWcuY2F0ZWdvcmllcykubWFwKGZ1bmN0aW9uIChjYXRlZ29yeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY2F0ZWdvcnkubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBfKGNhdGVnb3J5LmNvbnRlbnRUeXBlcykubWFwKGZ1bmN0aW9uIChjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gY29udGVudFR5cGUudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmFjdG9yeSA9IExheW91dEVkaXRvci5mYWN0b3JpZXNbdHlwZV0gfHwgTGF5b3V0RWRpdG9yLmZhY3Rvcmllc1tcIkNvbnRlbnRcIl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGVtcGxhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGU6IGNvbnRlbnRUeXBlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZUxhYmVsOiBjb250ZW50VHlwZS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGVDbGFzczogY29udGVudFR5cGUudHlwZUNsYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNFZGl0b3I6IGNvbnRlbnRUeXBlLmhhc0VkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbDogY29udGVudFR5cGUuaHRtbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBmYWN0b3J5KGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudG9vbGJveEljb24gPSBjb250ZW50VHlwZS5pY29uIHx8IFwiXFx1ZjFjOVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudG9vbGJveExhYmVsID0gY29udGVudFR5cGUubGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50b29sYm94RGVzY3JpcHRpb24gPSBjb250ZW50VHlwZS5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5yZXNldEVsZW1lbnRzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5nZXRTb3J0YWJsZU9wdGlvbnMgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlZGl0b3JJZCA9ICRlbGVtZW50LmNsb3Nlc3QoXCIubGF5b3V0LWVkaXRvclwiKS5hdHRyKFwiaWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudENsYXNzZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYWNlaG9sZGVyQ2xhc3NlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxvYXRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiR3JpZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3NlcyA9IFtcIi5sYXlvdXQtY2FudmFzXCIsIFwiLmxheW91dC1jb2x1bW5cIiwgXCIubGF5b3V0LWNvbW1vbi1ob2xkZXJcIl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckNsYXNzZXMgPSBcImxheW91dC1lbGVtZW50IGxheW91dC1jb250YWluZXIgbGF5b3V0LWdyaWQgdWktc29ydGFibGUtcGxhY2Vob2xkZXJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiUm93XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDbGFzc2VzID0gW1wiLmxheW91dC1ncmlkXCJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJDbGFzc2VzID0gXCJsYXlvdXQtZWxlbWVudCBsYXlvdXQtY29udGFpbmVyIGxheW91dC1yb3cgcm93IHVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkNvbHVtblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3NlcyA9IFtcIi5sYXlvdXQtcm93Om5vdCgubGF5b3V0LXJvdy1mdWxsKVwiXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyQ2xhc3NlcyA9IFwibGF5b3V0LWVsZW1lbnQgbGF5b3V0LWNvbnRhaW5lciBsYXlvdXQtY29sdW1uIHVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdGluZyA9IHRydWU7IC8vIFRvIGVuc3VyZSBhIHNtb290aCBob3Jpem9udGFsLWxpc3QgcmVvcmRlcmluZy4gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXItdWkvdWktc29ydGFibGUjZmxvYXRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiQ29udGVudFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3NlcyA9IFtcIi5sYXlvdXQtY2FudmFzXCIsIFwiLmxheW91dC1jb2x1bW5cIiwgXCIubGF5b3V0LWNvbW1vbi1ob2xkZXJcIl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckNsYXNzZXMgPSBcImxheW91dC1lbGVtZW50IGxheW91dC1jb250ZW50IHVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkNhbnZhc1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3NlcyA9IFtcIi5sYXlvdXQtY2FudmFzXCIsIFwiLmxheW91dC1jb2x1bW5cIiwgXCIubGF5b3V0LWNvbW1vbi1ob2xkZXJcIl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckNsYXNzZXMgPSBcImxheW91dC1lbGVtZW50IGxheW91dC1jb250YWluZXIgbGF5b3V0LWdyaWQgdWktc29ydGFibGUtcGxhY2Vob2xkZXJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJtb3ZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RXaXRoOiBfKHBhcmVudENsYXNzZXMpLm1hcChmdW5jdGlvbiAoZSkgeyByZXR1cm4gXCIjXCIgKyBlZGl0b3JJZCArIFwiIFwiICsgZSArIFwiOm5vdCgubGF5b3V0LWNvbnRhaW5lci1zZWFsZWQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuXCI7IH0pLmpvaW4oXCIsIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ1aS1mbG9hdGluZ1wiOiBmbG9hdGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAoZSwgdWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LmlzVG9vbGJveCA9IHRydWU7IC8vIFdpbGwgaW5kaWNhdGUgdG8gY29ubmVjdGVkIHNvcnRhYmxlcyB0aGF0IGRyb3BwZWQgaXRlbXMgd2VyZSBzZW50IGZyb20gdG9vbGJveC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uIChlLCB1aSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24gKGUsIHVpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnJlc2V0RWxlbWVudHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyOiBmdW5jdGlvbiAoZSwgdWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50LmNhbnZhcy5zZXRJc0Ryb3BUYXJnZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxheW91dElzQ29sbGFwc2VkQ29va2llTmFtZSA9IFwibGF5b3V0VG9vbGJveENhdGVnb3J5X0xheW91dF9Jc0NvbGxhcHNlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxheW91dElzQ29sbGFwc2VkID0gJC5jb29raWUobGF5b3V0SXNDb2xsYXBzZWRDb29raWVOYW1lKSA9PT0gXCJ0cnVlXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS50b2dnbGVMYXlvdXRJc0NvbGxhcHNlZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxheW91dElzQ29sbGFwc2VkID0gISRzY29wZS5sYXlvdXRJc0NvbGxhcHNlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmNvb2tpZShsYXlvdXRJc0NvbGxhcHNlZENvb2tpZU5hbWUsICRzY29wZS5sYXlvdXRJc0NvbGxhcHNlZCwgeyBleHBpcmVzOiAzNjUgfSk7IC8vIFJlbWVtYmVyIGNvbGxhcHNlZCBzdGF0ZSBmb3IgYSB5ZWFyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiVG9vbGJveFwiKSxcbiAgICAgICAgICAgICAgICByZXBsYWNlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uIChzY29wZSwgZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdG9vbGJveCA9IGVsZW1lbnQuZmluZChcIi5sYXlvdXQtdG9vbGJveFwiKTtcbiAgICAgICAgICAgICAgICAgICAgJCh3aW5kb3cpLm9uKFwicmVzaXplIHNjcm9sbFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGVsZW1lbnQucGFyZW50KCkuZmluZChcIi5sYXlvdXQtY2FudmFzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNhbnZhcyBpcyB0YWxsZXIgdGhhbiB0aGUgdG9vbGJveCwgbWFrZSB0aGUgdG9vbGJveCBzdGlja3ktcG9zaXRpb25lZCB3aXRoaW4gdGhlIGVkaXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gaGVscCB0aGUgdXNlciBhdm9pZCBleGNlc3NpdmUgdmVydGljYWwgc2Nyb2xsaW5nLlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhc0lzVGFsbGVyID0gISFjYW52YXMgJiYgY2FudmFzLmhlaWdodCgpID4gdG9vbGJveC5oZWlnaHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aW5kb3dQb3MgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FudmFzSXNUYWxsZXIgJiYgd2luZG93UG9zID4gZWxlbWVudC5vZmZzZXQoKS50b3AgKyBlbGVtZW50LmhlaWdodCgpIC0gdG9vbGJveC5oZWlnaHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3guYWRkQ2xhc3MoXCJzdGlja3ktYm90dG9tXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3gucmVtb3ZlQ2xhc3MoXCJzdGlja3ktdG9wXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FudmFzSXNUYWxsZXIgJiYgd2luZG93UG9zID4gZWxlbWVudC5vZmZzZXQoKS50b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94LmFkZENsYXNzKFwic3RpY2t5LXRvcFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94LnJlbW92ZUNsYXNzKFwic3RpY2t5LWJvdHRvbVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3gucmVtb3ZlQ2xhc3MoXCJzdGlja3ktdG9wXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3gucmVtb3ZlQ2xhc3MoXCJzdGlja3ktYm90dG9tXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgXSk7IiwiYW5ndWxhclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0VG9vbGJveEdyb3VwXCIsIFtcIiRjb21waWxlXCIsIFwiZW52aXJvbm1lbnRcIixcbiAgICAgICAgZnVuY3Rpb24gKCRjb21waWxlLCBlbnZpcm9ubWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgY2F0ZWdvcnk6IFwiPVwiIH0sXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0NvbGxhcHNlZENvb2tpZU5hbWUgPSBcImxheW91dFRvb2xib3hDYXRlZ29yeV9cIiArICRzY29wZS5jYXRlZ29yeS5uYW1lICsgXCJfSXNDb2xsYXBzZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5pc0NvbGxhcHNlZCA9ICQuY29va2llKGlzQ29sbGFwc2VkQ29va2llTmFtZSkgPT09IFwidHJ1ZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnRvZ2dsZUlzQ29sbGFwc2VkID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuaXNDb2xsYXBzZWQgPSAhJHNjb3BlLmlzQ29sbGFwc2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuY29va2llKGlzQ29sbGFwc2VkQ29va2llTmFtZSwgJHNjb3BlLmlzQ29sbGFwc2VkLCB7IGV4cGlyZXM6IDM2NSB9KTsgLy8gUmVtZW1iZXIgY29sbGFwc2VkIHN0YXRlIGZvciBhIHllYXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogZW52aXJvbm1lbnQudGVtcGxhdGVVcmwoXCJUb29sYm94R3JvdXBcIiksXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIF0pOyJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxheW91dEVkaXRvci5qcyIsIk1vZHVsZS5qcyIsIkNsaXBib2FyZC5qcyIsIlNjb3BlQ29uZmlndXJhdG9yLmpzIiwiRWRpdG9yLmpzIiwiQ2FudmFzLmpzIiwiQ2hpbGQuanMiLCJDb2x1bW4uanMiLCJDb250ZW50LmpzIiwiR3JpZC5qcyIsIlJvdy5qcyIsIlBvcHVwLmpzIiwiVG9vbGJveC5qcyIsIlRvb2xib3hHcm91cC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUNMQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2xWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUNoTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IkxheW91dEVkaXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiYW5ndWxhci5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIiwgW1wibmdTYW5pdGl6ZVwiLCBcIm5nUmVzb3VyY2VcIiwgXCJ1aS5zb3J0YWJsZVwiXSk7IiwidmFyIExheW91dEVkaXRvcjtcclxuKGZ1bmN0aW9uKExheW91dEVkaXRvcikge1xyXG5cclxuICAgIHZhciBDbGlwYm9hcmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuX2NsaXBib2FyZERhdGEgPSB7fTtcclxuICAgICAgICB0aGlzLl9pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fd2FzSW52b2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldERhdGEgPSBmdW5jdGlvbihjb250ZW50VHlwZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBzZWxmLl9jbGlwYm9hcmREYXRhW2NvbnRlbnRUeXBlXSA9IGRhdGE7XHJcbiAgICAgICAgICAgIHNlbGYuX3dhc0ludm9rZWQgPSB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5nZXREYXRhID0gZnVuY3Rpb24gKGNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgICAgIHNlbGYuX3dhc0ludm9rZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fY2xpcGJvYXJkRGF0YVtjb250ZW50VHlwZV07XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgc2VsZi5faXNEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHNlbGYuX3dhc0ludm9rZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2VsZi5fY2xpcGJvYXJkRGF0YSA9IHt9O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5faXNEaXNhYmxlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy53YXNJbnZva2VkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fd2FzSW52b2tlZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkNsaXBib2FyZCA9IG5ldyBDbGlwYm9hcmQoKTtcclxuXHJcbiAgICBhbmd1bGFyXHJcbiAgICAgICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgICAgIC5mYWN0b3J5KFwiY2xpcGJvYXJkXCIsIFtcclxuICAgICAgICAgICAgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldERhdGE6IExheW91dEVkaXRvci5DbGlwYm9hcmQuc2V0RGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBnZXREYXRhOiBMYXlvdXRFZGl0b3IuQ2xpcGJvYXJkLmdldERhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZTogTGF5b3V0RWRpdG9yLkNsaXBib2FyZC5kaXNhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IExheW91dEVkaXRvci5DbGlwYm9hcmQuaXNEaXNhYmxlZCxcclxuICAgICAgICAgICAgICAgICAgICB3YXNJbnZva2VkOiBMYXlvdXRFZGl0b3IuQ2xpcGJvYXJkLndhc0ludm9rZWRcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdKTtcclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5mYWN0b3J5KFwic2NvcGVDb25maWd1cmF0b3JcIiwgW1wiJHRpbWVvdXRcIiwgXCJjbGlwYm9hcmRcIixcclxuICAgICAgICBmdW5jdGlvbiAoJHRpbWVvdXQsIGNsaXBib2FyZCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZUZvckVsZW1lbnQ6IGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAkZWxlbWVudC5maW5kKFwiLmxheW91dC1wYW5lbFwiKS5jbGljayhmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoKS5rZXlkb3duKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNldEZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gJHNjb3BlLmVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmVkaXRvci5pc0RyYWdnaW5nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbmF0aXZlIGNsaXBib2FyZCBzdXBwb3J0IGV4aXN0cywgdGhlIHBzZXVkby1jbGlwYm9hcmQgd2lsbCBoYXZlIGJlZW4gZGlzYWJsZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2xpcGJvYXJkLmlzRGlzYWJsZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvY3VzZWRFbGVtZW50ID0gZWxlbWVudC5lZGl0b3IuZm9jdXNlZEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFmb2N1c2VkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBzZXVkbyBjbGlwYm9hcmQgaGFuZGxpbmcgZm9yIGJyb3dzZXJzIG5vdCBhbGxvd2luZyByZWFsIGNsaXBib2FyZCBvcGVyYXRpb25zLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmN0cmxLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlLndoaWNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjc6IC8vIENcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWRFbGVtZW50LmNvcHkoY2xpcGJvYXJkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg4OiAvLyBYXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2VkRWxlbWVudC5jdXQoY2xpcGJvYXJkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg2OiAvLyBWXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2VkRWxlbWVudC5wYXN0ZShjbGlwYm9hcmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDQ2KSB7IC8vIERlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmRlbGV0ZShlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIChlLndoaWNoID09IDMyIHx8IGUud2hpY2ggPT0gMjcpKSB7IC8vIFNwYWNlIG9yIEVzY1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVsZW1lbnQuZmluZChcIi5sYXlvdXQtcGFuZWwtYWN0aW9uLXByb3BlcnRpZXNcIikuZmlyc3QoKS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWVsZW1lbnQuaGFzRWRpdG9yKSB7IC8vIFRoaXMgZWxlbWVudCBoYXMgYW4gZWRpdG9yIGRpYWxvZy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDEzKSB7IC8vIEVudGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVsZW1lbnQuZmluZChcIi5sYXlvdXQtcGFuZWwtYWN0aW9uLWVkaXRcIikuZmlyc3QoKS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFlbGVtZW50LmNoaWxkcmVuKSB7IC8vIFRoaXMgaXMgYSBjb250YWluZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiBlLmFsdEtleSAmJiBlLndoaWNoID09IDQwKSB7IC8vIEFsdCtEb3duXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jaGlsZHJlblswXS5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09IFwiQ29sdW1uXCIpIHsgLy8gVGhpcyBpcyBhIGNvbHVtbi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29ubmVjdEFkamFjZW50ID0gIWUuY3RybEtleTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS53aGljaCA9PSAzNykgeyAvLyBMZWZ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmFsdEtleSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZXhwYW5kTGVmdChjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5zaGlmdEtleSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29udHJhY3RSaWdodChjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUud2hpY2ggPT0gMzkpIHsgLy8gUmlnaHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuYWx0S2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb250cmFjdExlZnQoY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmV4cGFuZFJpZ2h0KGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhZWxlbWVudC5wYXJlbnQpIHsgLy8gVGhpcyBpcyBhIGNoaWxkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMzgpIHsgLy8gQWx0K1VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnQuc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGFyZW50LnR5cGUgPT0gXCJSb3dcIikgeyAvLyBQYXJlbnQgaXMgYSBob3Jpem9udGFsIGNvbnRhaW5lci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSAzNykgeyAvLyBMZWZ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Lm1vdmVGb2N1c1ByZXZDaGlsZChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMzkpIHsgLy8gUmlnaHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnQubW92ZUZvY3VzTmV4dENoaWxkKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDM3KSB7IC8vIEN0cmwrTGVmdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1vdmVVcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldEZvY3VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSAzOSkgeyAvLyBDdHJsK1JpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubW92ZURvd24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IC8vIFBhcmVudCBpcyBhIHZlcnRpY2FsIGNvbnRhaW5lci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSAzOCkgeyAvLyBVcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudC5tb3ZlRm9jdXNQcmV2Q2hpbGQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDQwKSB7IC8vIERvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnQubW92ZUZvY3VzTmV4dENoaWxkKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDM4KSB7IC8vIEN0cmwrVXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tb3ZlVXAoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gNDApIHsgLy8gQ3RybCtEb3duXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubW92ZURvd24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseSgpOyAvLyBFdmVudCBpcyBub3QgdHJpZ2dlcmVkIGJ5IEFuZ3VsYXIgZGlyZWN0aXZlIGJ1dCByYXcgZXZlbnQgaGFuZGxlciBvbiBlbGVtZW50LlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFDSzogV29ya2Fyb3VuZCBiZWNhdXNlIG9mIGhvdyBBbmd1bGFyIHRyZWF0cyB0aGUgRE9NIHdoZW4gZWxlbWVudHMgYXJlIHNoaWZ0ZWQgYXJvdW5kIC0gaW5wdXQgZm9jdXMgaXMgc29tZXRpbWVzIGxvc3QuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNldEZvY3VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWRpdG9yLmZvY3VzZWRFbGVtZW50LnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5zZXRJc0ZvY3VzZWRFdmVudEhhbmRsZXJzLnB1c2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZGVsZXRlID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5kZWxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkc2NvcGUuZWxlbWVudC5oYXNFZGl0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVkaXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJHJvb3QuZWRpdEVsZW1lbnQoJHNjb3BlLmVsZW1lbnQpLnRoZW4oZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuZGF0YSA9IGFyZ3MuZWxlbWVudC5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5hcHBseUVsZW1lbnRFZGl0b3JNb2RlbChhcmdzLmVsZW1lbnRFZGl0b3JNb2RlbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISEkc2NvcGUuZWxlbWVudC5zZXRIdG1sKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuc2V0SHRtbChhcmdzLmVsZW1lbnQuaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZUZvckNvbnRhaW5lcjogZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9ICRzY29wZS5lbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyRzY29wZS5pc1JlY2VpdmluZyA9IGZhbHNlOyAvLyBUcnVlIHdoZW4gY29udGFpbmVyIGlzIHJlY2VpdmluZyBhbiBleHRlcm5hbCBlbGVtZW50IHZpYSBkcmFnL2Ryb3AuXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmdldFNob3dDaGlsZHJlblBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHNjb3BlLmVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwICYmICEkc2NvcGUuZWxlbWVudC5nZXRJc0Ryb3BUYXJnZXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUuc29ydGFibGVPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IFwibW92ZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheTogMTUwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZWxlbWVudC5nZXRJc1NlYWxlZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogNSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9oYW5kbGU6IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIDwgMiA/IFwiLmltYWdpbmFyeS1jbGFzc1wiIDogZmFsc2UsIC8vIEZvciBzb21lIHJlYXNvbiBkb2Vzbid0IGdldCByZS1ldmFsdWF0ZWQgYWZ0ZXIgYWRkaW5nIG1vcmUgY2hpbGRyZW4uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNEcm9wVGFyZ2V0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWRpdG9yLmlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHRoZSBkcm9wIHRhcmdldCBwbGFjZWhvbGRlciBhcyBoaWdoIGFzIHRoZSBpdGVtIGJlaW5nIGRyYWdnZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5wbGFjZWhvbGRlci5oZWlnaHQodWkuaXRlbS5oZWlnaHQoKSAtIDQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIuY3NzKFwibWluLWhlaWdodFwiLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVkaXRvci5pc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRJc0Ryb3BUYXJnZXQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXI6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhdWkuc2VuZGVyICYmICEhdWkuc2VuZGVyWzBdLmlzVG9vbGJveCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXVpLnNlbmRlclswXS5kcm9wVGFyZ2V0VGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZW91dC5jYW5jZWwodWkuc2VuZGVyWzBdLmRyb3BUYXJnZXRUaW1lb3V0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkuc2VuZGVyWzBdLmRyb3BUYXJnZXRUaW1lb3V0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09IFwiUm93XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBhIHByZXZpb3VzIGRyb3AgdGFyZ2V0IGFuZCBpdCB3YXMgYSByb3csIHJvbGwgYmFjayBhbnkgcGVuZGluZyBjb2x1bW4gYWRkcyB0byBpdC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0Ryb3BUYXJnZXQgPSBlbGVtZW50LmVkaXRvci5kcm9wVGFyZ2V0RWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXByZXZpb3VzRHJvcFRhcmdldCAmJiBwcmV2aW91c0Ryb3BUYXJnZXQudHlwZSA9PSBcIlJvd1wiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzRHJvcFRhcmdldC5yb2xsYmFja0FkZENvbHVtbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNEcm9wVGFyZ2V0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5zZW5kZXJbMF0uZHJvcFRhcmdldFRpbWVvdXQgPSAkdGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT0gXCJSb3dcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY2VpdmVkQ29sdW1uID0gdWkuaXRlbS5zb3J0YWJsZS5tb2RlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNlaXZlZENvbHVtbldpZHRoID0gTWF0aC5mbG9vcigxMiAvIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCArIDEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkQ29sdW1uLndpZHRoID0gcmVjZWl2ZWRDb2x1bW5XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkQ29sdW1uLm9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmJlZ2luQWRkQ29sdW1uKHJlY2VpdmVkQ29sdW1uV2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSB0aGUgZHJvcCB0YXJnZXQgcGxhY2Vob2xkZXIgdGhlIGNvcnJlY3Qgd2lkdGggYW5kIGFzIGhpZ2ggYXMgdGhlIGhpZ2hlc3QgZXhpc3RpbmcgY29sdW1uIGluIHRoZSByb3cuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4SGVpZ2h0ID0gXy5tYXgoXygkZWxlbWVudC5maW5kKFwiPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1jb2x1bW46bm90KC51aS1zb3J0YWJsZS1wbGFjZWhvbGRlcilcIikpLm1hcChmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKGUpLmhlaWdodCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8PSAxMjsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnBsYWNlaG9sZGVyLnJlbW92ZUNsYXNzKFwiY29sLXhzLVwiICsgaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5wbGFjZWhvbGRlci5hZGRDbGFzcyhcImNvbC14cy1cIiArIHJlY2VpdmVkQ29sdW1uLndpZHRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXhIZWlnaHQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIuaGVpZ2h0KG1heEhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIuY3NzKFwibWluLWhlaWdodFwiLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnBsYWNlaG9sZGVyLmhlaWdodCgwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5wbGFjZWhvbGRlci5jc3MoXCJtaW4taGVpZ2h0XCIsIFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNEcm9wVGFyZ2V0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDE1MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmU6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhdWkuc2VuZGVyICYmICEhdWkuc2VuZGVyWzBdLmlzVG9vbGJveCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVjZWl2ZWRFbGVtZW50ID0gdWkuaXRlbS5zb3J0YWJsZS5tb2RlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcmVjZWl2ZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09IFwiUm93XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb21taXRBZGRDb2x1bW4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBpZGVhbGx5IGNhbGwgTGF5b3V0RWRpdG9yLkNvbnRhaW5lci5hZGRDaGlsZCgpIGluc3RlYWQsIGJ1dCBzaW5jZSB0aGlzIGhhbmRsZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIHJ1biAqYmVmb3JlKiB0aGUgdWktc29ydGFibGUgZGlyZWN0aXZlJ3MgaGFuZGxlciwgaWYgd2UgdHJ5IHRvIGFkZCB0aGUgY2hpbGQgdG8gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSB0aGF0IGhhbmRsZXIgd2lsbCBnZXQgYW4gZXhjZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIGRvIHRoZSBzYW1lLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBvZiB0aGlzLCB3ZSBuZWVkIHRvIGludm9rZSBcInNldFBhcmVudFwiIHNvIHRoYXQgc3BlY2lmaWMgY29udGFpbmVyIHR5cGVzIGNhbiBwZXJmb3JtIGVsZW1lbnQgc3BlZmljaWMgaW5pdGlhbGl6YXRpb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZEVsZW1lbnQuc2V0RWRpdG9yKGVsZW1lbnQuZWRpdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5zZXRQYXJlbnQoZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcmVjZWl2ZWRFbGVtZW50Lmhhc0VkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kcm9vdC5lZGl0RWxlbWVudChyZWNlaXZlZEVsZW1lbnQpLnRoZW4oZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzLmNhbmNlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRFbGVtZW50LmRhdGEgPSBhcmdzLmVsZW1lbnQuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5hcHBseUVsZW1lbnRFZGl0b3JNb2RlbChhcmdzLmVsZW1lbnRFZGl0b3JNb2RlbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcmVjZWl2ZWRFbGVtZW50LnNldEh0bWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRFbGVtZW50LnNldEh0bWwoYXJncy5lbGVtZW50Lmh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWFyZ3MuY2FuY2VsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5kZWxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZEVsZW1lbnQuc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyRzY29wZS5pc1JlY2VpdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRJc0Ryb3BUYXJnZXQoZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyRzY29wZS5pc1JlY2VpdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRJc0Ryb3BUYXJnZXQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcmVjZWl2ZWRFbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUuY2xpY2sgPSBmdW5jdGlvbiAoY2hpbGQsIGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZC5lZGl0b3IuaXNEcmFnZ2luZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5nZXRDbGFzc2VzID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXCJsYXlvdXQtZWxlbWVudFwiXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWNoaWxkLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1jb250YWluZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0SXNTZWFsZWQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1jb250YWluZXItc2VhbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1cIiArIGNoaWxkLnR5cGUudG9Mb3dlckNhc2UoKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFjaGlsZC5kcm9wVGFyZ2V0Q2xhc3MpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjaGlsZC5kcm9wVGFyZ2V0Q2xhc3MpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byBlaXRoZXIgdGhlIENvbHVtbiBkaXJlY3RpdmUgb3IgdGhlIENvbHVtbiBtb2RlbCBjbGFzcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT0gXCJSb3dcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJyb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLmNhbkFkZENvbHVtbigpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LXJvdy1mdWxsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC50eXBlID09IFwiQ29sdW1uXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwiY29sLXhzLVwiICsgY2hpbGQud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJjb2wteHMtb2Zmc2V0LVwiICsgY2hpbGQub2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PSBcIkNvbnRlbnRcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWNvbnRlbnQtXCIgKyBjaGlsZC5jb250ZW50VHlwZUNsYXNzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5nZXRJc0FjdGl2ZSgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC1hY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5nZXRJc0ZvY3VzZWQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtZm9jdXNlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldElzU2VsZWN0ZWQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtc2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5nZXRJc0Ryb3BUYXJnZXQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmlzVGVtcGxhdGVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC10ZW1wbGF0ZWRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dEVkaXRvclwiLCBbXCJlbnZpcm9ubWVudFwiLFxyXG4gICAgICAgIGZ1bmN0aW9uIChlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHt9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIiwgXCIkYXR0cnNcIiwgXCIkY29tcGlsZVwiLCBcImNsaXBib2FyZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50LCAkYXR0cnMsICRjb21waWxlLCBjbGlwYm9hcmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhJGF0dHJzLm1vZGVsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQgPSBldmFsKCRhdHRycy5tb2RlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSAnbW9kZWwnIGF0dHJpYnV0ZSBtdXN0IGV2YWx1YXRlIHRvIGEgTGF5b3V0RWRpdG9yLkVkaXRvciBvYmplY3QuXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmNsaWNrID0gZnVuY3Rpb24gKGNhbnZhcywgZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW52YXMuZWRpdG9yLmlzRHJhZ2dpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5nZXRDbGFzc2VzID0gZnVuY3Rpb24gKGNhbnZhcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtcImxheW91dC1lbGVtZW50XCIsIFwibGF5b3V0LWNvbnRhaW5lclwiLCBcImxheW91dC1jYW52YXNcIl07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhcy5nZXRJc0FjdGl2ZSgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhcy5nZXRJc0ZvY3VzZWQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LWZvY3VzZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FudmFzLmdldElzU2VsZWN0ZWQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LXNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhcy5nZXRJc0Ryb3BUYXJnZXQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LWRyb3B0YXJnZXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FudmFzLmlzVGVtcGxhdGVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtdGVtcGxhdGVkXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBbiB1bmZvcnR1bmF0ZSBzaWRlLWVmZmVjdCBvZiB0aGUgbmV4dCBoYWNrIG9uIGxpbmUgNTQgaXMgdGhhdCB0aGUgY3JlYXRlZCBlbGVtZW50cyBhcmVuJ3QgYWRkZWQgdG8gdGhlIERPTSB5ZXQsIHNvIHdlIGNhbid0IHVzZSBpdCB0byBnZXQgdG8gdGhlIHBhcmVudCBcIi5sYXlvdXQtZGVzaWdlclwiIGVsZW1lbnQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdvcmsgYXJvdW5kOiBhY2Nlc3MgdGhhdCBlbGVtZW50IGRpcmVjdGx5ICh3aGljaCBlZmVjdGl2ZWx5IHR1cm5zIG11bHRpcGxlIGxheW91dCBlZGl0b3JzIG9uIGEgc2luZ2xlIHBhZ2UgaW1wb3NzaWJsZSkuIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAvL3ZhciBsYXlvdXREZXNpZ25lckhvc3QgPSAkZWxlbWVudC5jbG9zZXN0KFwiLmxheW91dC1kZXNpZ25lclwiKS5kYXRhKFwibGF5b3V0LWRlc2lnbmVyLWhvc3RcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXlvdXREZXNpZ25lckhvc3QgPSAkKFwiLmxheW91dC1kZXNpZ25lclwiKS5kYXRhKFwibGF5b3V0LWRlc2lnbmVyLWhvc3RcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJHJvb3QubGF5b3V0RGVzaWduZXJIb3N0ID0gbGF5b3V0RGVzaWduZXJIb3N0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0RGVzaWduZXJIb3N0LmVsZW1lbnQub24oXCJyZXBsYWNlY2FudmFzXCIsIGZ1bmN0aW9uIChlLCBhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWRpdG9yID0gJHNjb3BlLmVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBhcmdzLmNhbnZhcy5kYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxJZDogYXJncy5jYW52YXMuaHRtbElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxDbGFzczogYXJncy5jYW52YXMuaHRtbENsYXNzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxTdHlsZTogYXJncy5jYW52YXMuaHRtbFN0eWxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGVtcGxhdGVkOiBhcmdzLmNhbnZhcy5pc1RlbXBsYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogYXJncy5jYW52YXMuY2hpbGRyZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFDSzogSW5zdGVhZCBvZiBzaW1wbHkgdXBkYXRpbmcgdGhlICRzY29wZS5lbGVtZW50IHdpdGggYSBuZXcgaW5zdGFuY2UsIHdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgZW50aXJlIG9yYy1sYXlvdXQtZWRpdG9yIG1hcmt1cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gb3JkZXIgZm9yIGFuZ3VsYXIgdG8gcmViaW5kIHN0YXJ0aW5nIHdpdGggdGhlIENhbnZhcyBlbGVtZW50LiBPdGhlcndpc2UsIGZvciBzb21lIHJlYXNvbiwgaXQgd2lsbCByZWJpbmQgc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QgY2hpbGQgb2YgQ2FudmFzLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWW91IGNhbiBzZWUgdGhpcyBoYXBwZW5pbmcgd2hlbiBzZXR0aW5nIGEgYnJlYWtwb2ludCBpbiBTY29wZUNvbmZpZ3VyYXRvciB3aGVyZSBjb250YWluZXJzIGFyZSBpbml0aWFsaXplZCB3aXRoIGRyYWcgJiBkcm9wOiBvbiBwYWdlIGxvYWQsIHRoZSBmaXJzdCBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBhIENhbnZhcyAoZ29vZCksIGJ1dCBhZnRlciBoYXZpbmcgc2VsZWN0ZWQgYW5vdGhlciB0ZW1wbGF0ZSwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgKHR5cGljYWxseSkgYSBHcmlkIChiYWQpLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2ltcGx5IHJlY29tcGlsaW5nIHRoZSBvcmMtbGF5b3V0LWVkaXRvciBkaXJlY3RpdmUgd2lsbCBjYXVzZSB0aGUgZW50aXJlIHRoaW5nIHRvIGJlIGdlbmVyYXRlZCwgd2hpY2ggd29ya3MganVzdCBmaW5lIGFzIHdlbGwgKGV2ZW4gdGhvdWdoIG5vdCBpcyBuaWNlIGFzIHNpbXBseSBsZXZlcmFnaW5nIG1vZGVsIGJpbmRpbmcpLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0RGVzaWduZXJIb3N0LmVkaXRvciA9IHdpbmRvdy5sYXlvdXRFZGl0b3IgPSBuZXcgTGF5b3V0RWRpdG9yLkVkaXRvcihlZGl0b3IuY29uZmlnLCBjYW52YXNEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IFwiPG9yYy1sYXlvdXQtZWRpdG9yXCIgKyBcIiBtb2RlbD0nd2luZG93LmxheW91dEVkaXRvcicgLz5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gJGNvbXBpbGUodGVtcGxhdGUpKCRzY29wZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiLmxheW91dC1lZGl0b3ItaG9sZGVyXCIpLmh0bWwoaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRyb290LmVkaXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBob3N0ID0gJHNjb3BlLiRyb290LmxheW91dERlc2lnbmVySG9zdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBob3N0LmVkaXRFbGVtZW50KGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRyb290LmFkZEVsZW1lbnQgPSBmdW5jdGlvbiAoY29udGVudFR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBob3N0ID0gJHNjb3BlLiRyb290LmxheW91dERlc2lnbmVySG9zdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBob3N0LmFkZEVsZW1lbnQoY29udGVudFR5cGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkub24oXCJjdXQgY29weSBwYXN0ZVwiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBzZXVkbyBjbGlwYm9hcmQgd2FzIGFscmVhZHkgaW52b2tlZCAod2hpY2ggaGFwcGVucyBvbiB0aGUgZmlyc3QgY2xpcGJvYXJkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcGVyYXRpb24gYWZ0ZXIgcGFnZSBsb2FkIGV2ZW4gaWYgbmF0aXZlIGNsaXBib2FyZCBzdXBwb3J0IGV4aXN0cykgdGhlbiBzaXQgdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25lIG9wZXJhdGlvbiBvdXQsIGJ1dCBtYWtlIHN1cmUgd2hhdGV2ZXIgaXMgb24gdGhlIHBzZXVkbyBjbGlwYm9hcmQgZ2V0cyBtaWdyYXRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIG5hdGl2ZSBjbGlwYm9hcmQgZm9yIHN1YnNlcXVlbnQgb3BlcmF0aW9ucy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGlwYm9hcmQud2FzSW52b2tlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuc2V0RGF0YShcInRleHQvcGxhaW5cIiwgY2xpcGJvYXJkLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKFwidGV4dC9qc29uXCIsIGNsaXBib2FyZC5nZXREYXRhKFwidGV4dC9qc29uXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9jdXNlZEVsZW1lbnQgPSAkc2NvcGUuZWxlbWVudC5mb2N1c2VkRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFmb2N1c2VkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZS50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNvcHlcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZEVsZW1lbnQuY29weShlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjdXRcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZEVsZW1lbnQuY3V0KGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInBhc3RlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWRFbGVtZW50LnBhc3RlKGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFDSzogV29ya2Fyb3VuZCBiZWNhdXNlIG9mIGhvdyBBbmd1bGFyIHRyZWF0cyB0aGUgRE9NIHdoZW4gZWxlbWVudHMgYXJlIHNoaWZ0ZWQgYXJvdW5kIC0gaW5wdXQgZm9jdXMgaXMgc29tZXRpbWVzIGxvc3QuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghISRzY29wZS5lbGVtZW50LmZvY3VzZWRFbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5mb2N1c2VkRWxlbWVudC5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOYXRpdmUgY2xpcGJvYXJkIHN1cHBvcnQgb2J2aW91c2x5IGV4aXN0cywgc28gZGlzYWJsZSB0aGUgcGV1ZG8gY2xpcGJvYXJkIGZyb20gbm93IG9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcGJvYXJkLmRpc2FibGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBlbnZpcm9ubWVudC50ZW1wbGF0ZVVybChcIkVkaXRvclwiKSxcclxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBsaW5rOiBmdW5jdGlvbiAoc2NvcGUsIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBObyBjbGlja3Mgc2hvdWxkIHByb3BhZ2F0ZSBmcm9tIHRoZSBUaW55TUNFIHRvb2xiYXJzLlxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZmluZChcIi5sYXlvdXQtdG9vbGJhci1jb250YWluZXJcIikuY2xpY2soZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBVbmZvY3VzIGFuZCB1bnNlbGVjdCBldmVyeXRoaW5nIG9uIGNsaWNrIG91dHNpZGUgb2YgY2FudmFzLlxyXG4gICAgICAgICAgICAgICAgICAgICQod2luZG93KS5jbGljayhmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZWxlbWVudC5hY3RpdmVFbGVtZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuZm9jdXNlZEVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0Q2FudmFzXCIsIFtcInNjb3BlQ29uZmlndXJhdG9yXCIsIFwiZW52aXJvbm1lbnRcIixcclxuICAgICAgICBmdW5jdGlvbiAoc2NvcGVDb25maWd1cmF0b3IsIGVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXHJcbiAgICAgICAgICAgICAgICBzY29wZTogeyBlbGVtZW50OiBcIj1cIiB9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIiwgXCIkYXR0cnNcIixcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCwgJGF0dHJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckVsZW1lbnQoJHNjb3BlLCAkZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckNvbnRhaW5lcigkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNvcnRhYmxlT3B0aW9uc1tcImF4aXNcIl0gPSBcInlcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiQ2FudmFzXCIpLFxyXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRDaGlsZFwiLCBbXCIkY29tcGlsZVwiLFxyXG4gICAgICAgIGZ1bmN0aW9uICgkY29tcGlsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgZWxlbWVudDogXCI9XCIgfSxcclxuICAgICAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uIChzY29wZSwgZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IFwiPG9yYy1sYXlvdXQtXCIgKyBzY29wZS5lbGVtZW50LnR5cGUudG9Mb3dlckNhc2UoKSArIFwiIGVsZW1lbnQ9J2VsZW1lbnQnIC8+XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSAkY29tcGlsZSh0ZW1wbGF0ZSkoc2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkucmVwbGFjZVdpdGgoaHRtbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dENvbHVtblwiLCBbXCIkY29tcGlsZVwiLCBcInNjb3BlQ29uZmlndXJhdG9yXCIsIFwiZW52aXJvbm1lbnRcIixcclxuICAgICAgICBmdW5jdGlvbiAoJGNvbXBpbGUsIHNjb3BlQ29uZmlndXJhdG9yLCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgZWxlbWVudDogXCI9XCIgfSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yRWxlbWVudCgkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yQ29udGFpbmVyKCRzY29wZSwgJGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuc29ydGFibGVPcHRpb25zW1wiYXhpc1wiXSA9IFwieVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogZW52aXJvbm1lbnQudGVtcGxhdGVVcmwoXCJDb2x1bW5cIiksXHJcbiAgICAgICAgICAgICAgICByZXBsYWNlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbGluazogZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50LCBhdHRycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZmluZChcIi5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXJcIikuZHJhZ2dhYmxlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXhpczogXCJ4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlcjogXCJjbG9uZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXZlcnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZWxlbWVudC5lZGl0b3IuaXNSZXNpemluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZHJhZzogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uRWxlbWVudCA9IGVsZW1lbnQucGFyZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uU2l6ZSA9IGNvbHVtbkVsZW1lbnQud2lkdGgoKSAvIHNjb3BlLmVsZW1lbnQud2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29ubmVjdEFkamFjZW50ID0gIWUuY3RybEtleTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKGUudGFyZ2V0KS5oYXNDbGFzcyhcImxheW91dC1jb2x1bW4tcmVzaXplLWJhci1sZWZ0XCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhID0gdWkub2Zmc2V0LmxlZnQgLSBjb2x1bW5FbGVtZW50Lm9mZnNldCgpLmxlZnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhIDwgLWNvbHVtblNpemUgJiYgc2NvcGUuZWxlbWVudC5jYW5FeHBhbmRMZWZ0KGNvbm5lY3RBZGphY2VudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuZXhwYW5kTGVmdChjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEgPiBjb2x1bW5TaXplICYmIHNjb3BlLmVsZW1lbnQuY2FuQ29udHJhY3RMZWZ0KGNvbm5lY3RBZGphY2VudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuY29udHJhY3RMZWZ0KGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCQoZS50YXJnZXQpLmhhc0NsYXNzKFwibGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyLXJpZ2h0XCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhID0gdWkub2Zmc2V0LmxlZnQgLSBjb2x1bW5FbGVtZW50LndpZHRoKCkgLSBjb2x1bW5FbGVtZW50Lm9mZnNldCgpLmxlZnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhID4gY29sdW1uU2l6ZSAmJiBzY29wZS5lbGVtZW50LmNhbkV4cGFuZFJpZ2h0KGNvbm5lY3RBZGphY2VudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuZXhwYW5kUmlnaHQoY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhIDwgLWNvbHVtblNpemUgJiYgc2NvcGUuZWxlbWVudC5jYW5Db250cmFjdFJpZ2h0KGNvbm5lY3RBZGphY2VudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuY29udHJhY3RSaWdodChjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9wOiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuZWRpdG9yLmlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dENvbnRlbnRcIiwgW1wiJHNjZVwiLCBcInNjb3BlQ29uZmlndXJhdG9yXCIsIFwiZW52aXJvbm1lbnRcIixcclxuICAgICAgICBmdW5jdGlvbiAoJHNjZSwgc2NvcGVDb25maWd1cmF0b3IsIGVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXHJcbiAgICAgICAgICAgICAgICBzY29wZTogeyBlbGVtZW50OiBcIj1cIiB9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIixcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNvbmZpZ3VyYXRvci5jb25maWd1cmVGb3JFbGVtZW50KCRzY29wZSwgJGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3ZlcndyaXRlIHRoZSBzZXRIdG1sIGZ1bmN0aW9uIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGUgJHNjZSBzZXJ2aWNlIHRvIHRydXN0IHRoZSBodG1sIChhbmQgbm90IGhhdmUgdGhlIGh0bWwgYmluZGluZyBzdHJpcCBjZXJ0YWluIHRhZ3MpLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5zZXRIdG1sID0gZnVuY3Rpb24gKGh0bWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50Lmh0bWwgPSBodG1sO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuaHRtbFVuc2FmZSA9ICRzY2UudHJ1c3RBc0h0bWwoaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5zZXRIdG1sKCRzY29wZS5lbGVtZW50Lmh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogZW52aXJvbm1lbnQudGVtcGxhdGVVcmwoXCJDb250ZW50XCIpLFxyXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRHcmlkXCIsIFtcIiRjb21waWxlXCIsIFwic2NvcGVDb25maWd1cmF0b3JcIiwgXCJlbnZpcm9ubWVudFwiLFxyXG4gICAgICAgIGZ1bmN0aW9uICgkY29tcGlsZSwgc2NvcGVDb25maWd1cmF0b3IsIGVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXHJcbiAgICAgICAgICAgICAgICBzY29wZTogeyBlbGVtZW50OiBcIj1cIiB9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIixcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNvbmZpZ3VyYXRvci5jb25maWd1cmVGb3JFbGVtZW50KCRzY29wZSwgJGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNvbmZpZ3VyYXRvci5jb25maWd1cmVGb3JDb250YWluZXIoJHNjb3BlLCAkZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5zb3J0YWJsZU9wdGlvbnNbXCJheGlzXCJdID0gXCJ5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBlbnZpcm9ubWVudC50ZW1wbGF0ZVVybChcIkdyaWRcIiksXHJcbiAgICAgICAgICAgICAgICByZXBsYWNlOiB0cnVlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dFJvd1wiLCBbXCIkY29tcGlsZVwiLCBcInNjb3BlQ29uZmlndXJhdG9yXCIsIFwiZW52aXJvbm1lbnRcIixcclxuICAgICAgICBmdW5jdGlvbiAoJGNvbXBpbGUsIHNjb3BlQ29uZmlndXJhdG9yLCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgZWxlbWVudDogXCI9XCIgfSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yRWxlbWVudCgkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yQ29udGFpbmVyKCRzY29wZSwgJGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuc29ydGFibGVPcHRpb25zW1wiYXhpc1wiXSA9IFwieFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuc29ydGFibGVPcHRpb25zW1widWktZmxvYXRpbmdcIl0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogZW52aXJvbm1lbnQudGVtcGxhdGVVcmwoXCJSb3dcIiksXHJcbiAgICAgICAgICAgICAgICByZXBsYWNlOiB0cnVlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dFBvcHVwXCIsIFtcclxuICAgICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgICAgICAgICBsaW5rOiBmdW5jdGlvbiAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvcHVwID0gJChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdHJpZ2dlciA9IHBvcHVwLmNsb3Nlc3QoXCIubGF5b3V0LXBvcHVwLXRyaWdnZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudEVsZW1lbnQgPSBwb3B1cC5jbG9zZXN0KFwiLmxheW91dC1lbGVtZW50XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIuY2xpY2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3B1cC50b2dnbGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcHVwLmlzKFwiOnZpc2libGVcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLnBvc2l0aW9uKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteTogYXR0cnMub3JjTGF5b3V0UG9wdXBNeSB8fCBcImxlZnQgdG9wXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQ6IGF0dHJzLm9yY0xheW91dFBvcHVwQXQgfHwgXCJsZWZ0IGJvdHRvbSs0cHhcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZjogdHJpZ2dlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1cC5maW5kKFwiaW5wdXRcIikuZmlyc3QoKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wdXAuY2xpY2soZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LmNsaWNrKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBwb3B1cC5rZXlkb3duKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDI3KSAvLyBFc2NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBwb3B1cC5vbihcImN1dCBjb3B5IHBhc3RlXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsbG93IGNsaXBib2FyZCBvcGVyYXRpb25zIGluIHBvcHVwIHdpdGhvdXQgaW52b2tpbmcgY2xpcGJvYXJkIGV2ZW50IGhhbmRsZXJzIG9uIHBhcmVudCBlbGVtZW50LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRUb29sYm94XCIsIFtcIiRjb21waWxlXCIsIFwiZW52aXJvbm1lbnRcIixcclxuICAgICAgICBmdW5jdGlvbiAoJGNvbXBpbGUsIGVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUucmVzZXRFbGVtZW50cyA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZ3JpZEVsZW1lbnRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5HcmlkLmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMDBhXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJHcmlkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJFbXB0eSBncmlkLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUucm93RWxlbWVudHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjBjOVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiUm93ICgxIGNvbHVtbilcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIlJvdyB3aXRoIDEgY29sdW1uLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcygxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5Sb3cuZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIlJvdyAoMiBjb2x1bW5zKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiUm93IHdpdGggMiBjb2x1bW5zLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcygyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5Sb3cuZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIlJvdyAoMyBjb2x1bW5zKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiUm93IHdpdGggMyBjb2x1bW5zLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcygzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5Sb3cuZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIlJvdyAoNCBjb2x1bW5zKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiUm93IHdpdGggNCBjb2x1bW5zLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcyg0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5Sb3cuZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIlJvdyAoNiBjb2x1bW5zKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiUm93IHdpdGggNiBjb2x1bW5zLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcyg2KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5Sb3cuZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIlJvdyAoMTIgY29sdW1ucylcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIlJvdyB3aXRoIDEyIGNvbHVtbnMuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBMYXlvdXRFZGl0b3IuQ29sdW1uLnRpbWVzKDEyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBMYXlvdXRFZGl0b3IuUm93LmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMGM5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKGVtcHR5KVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiRW1wdHkgcm93LlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuY29sdW1uRWxlbWVudHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLkNvbHVtbi5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjBkYlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiQ29sdW1uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJFbXB0eSBjb2x1bW4uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5jYW52YXNFbGVtZW50cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuQ2FudmFzLmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMDQ0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJDYW52YXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIkVtcHR5IGNhbnZhcy5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmNvbnRlbnRFbGVtZW50Q2F0ZWdvcmllcyA9IF8oJHNjb3BlLmVsZW1lbnQuY29uZmlnLmNhdGVnb3JpZXMpLm1hcChmdW5jdGlvbiAoY2F0ZWdvcnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjYXRlZ29yeS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50czogXyhjYXRlZ29yeS5jb250ZW50VHlwZXMpLm1hcChmdW5jdGlvbiAoY29udGVudFR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gY29udGVudFR5cGUudHlwZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmYWN0b3J5ID0gTGF5b3V0RWRpdG9yLmZhY3Rvcmllc1t0eXBlXSB8fCBMYXlvdXRFZGl0b3IuZmFjdG9yaWVzW1wiQ29udGVudFwiXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGVtcGxhdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogY29udGVudFR5cGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGVMYWJlbDogY29udGVudFR5cGUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGVDbGFzczogY29udGVudFR5cGUudHlwZUNsYXNzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRWRpdG9yOiBjb250ZW50VHlwZS5oYXNFZGl0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbDogY29udGVudFR5cGUuaHRtbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZmFjdG9yeShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudG9vbGJveEljb24gPSBjb250ZW50VHlwZS5pY29uIHx8IFwiXFx1ZjFjOVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50b29sYm94TGFiZWwgPSBjb250ZW50VHlwZS5sYWJlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudG9vbGJveERlc2NyaXB0aW9uID0gY29udGVudFR5cGUuZGVzY3JpcHRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnJlc2V0RWxlbWVudHMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5nZXRTb3J0YWJsZU9wdGlvbnMgPSBmdW5jdGlvbiAodHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVkaXRvcklkID0gJGVsZW1lbnQuY2xvc2VzdChcIi5sYXlvdXQtZWRpdG9yXCIpLmF0dHIoXCJpZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRDbGFzc2VzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYWNlaG9sZGVyQ2xhc3NlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbG9hdGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJHcmlkXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENsYXNzZXMgPSBbXCIubGF5b3V0LWNhbnZhc1wiLCBcIi5sYXlvdXQtY29sdW1uXCIsIFwiLmxheW91dC1jb21tb24taG9sZGVyXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckNsYXNzZXMgPSBcImxheW91dC1lbGVtZW50IGxheW91dC1jb250YWluZXIgbGF5b3V0LWdyaWQgdWktc29ydGFibGUtcGxhY2Vob2xkZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlJvd1wiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDbGFzc2VzID0gW1wiLmxheW91dC1ncmlkXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckNsYXNzZXMgPSBcImxheW91dC1lbGVtZW50IGxheW91dC1jb250YWluZXIgbGF5b3V0LXJvdyByb3cgdWktc29ydGFibGUtcGxhY2Vob2xkZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkNvbHVtblwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDbGFzc2VzID0gW1wiLmxheW91dC1yb3c6bm90KC5sYXlvdXQtcm93LWZ1bGwpXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckNsYXNzZXMgPSBcImxheW91dC1lbGVtZW50IGxheW91dC1jb250YWluZXIgbGF5b3V0LWNvbHVtbiB1aS1zb3J0YWJsZS1wbGFjZWhvbGRlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdGluZyA9IHRydWU7IC8vIFRvIGVuc3VyZSBhIHNtb290aCBob3Jpem9udGFsLWxpc3QgcmVvcmRlcmluZy4gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXItdWkvdWktc29ydGFibGUjZmxvYXRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkNvbnRlbnRcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3NlcyA9IFtcIi5sYXlvdXQtY2FudmFzXCIsIFwiLmxheW91dC1jb2x1bW5cIiwgXCIubGF5b3V0LWNvbW1vbi1ob2xkZXJcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyQ2xhc3NlcyA9IFwibGF5b3V0LWVsZW1lbnQgbGF5b3V0LWNvbnRlbnQgdWktc29ydGFibGUtcGxhY2Vob2xkZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkNhbnZhc1wiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDbGFzc2VzID0gW1wiLmxheW91dC1jYW52YXNcIiwgXCIubGF5b3V0LWNvbHVtblwiLCBcIi5sYXlvdXQtY29tbW9uLWhvbGRlclwiXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJDbGFzc2VzID0gXCJsYXlvdXQtZWxlbWVudCBsYXlvdXQtY29udGFpbmVyIGxheW91dC1ncmlkIHVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBcIm1vdmVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0V2l0aDogXyhwYXJlbnRDbGFzc2VzKS5tYXAoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIFwiI1wiICsgZWRpdG9ySWQgKyBcIiBcIiArIGUgKyBcIjpub3QoLmxheW91dC1jb250YWluZXItc2VhbGVkKSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlblwiOyB9KS5qb2luKFwiLCBcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyQ2xhc3NlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInVpLWZsb2F0aW5nXCI6IGZsb2F0aW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlcjogXCJjbG9uZVwiLCAvLyBXZSBjbG9uZSB0aGUgZWxlbWVudCBhbmQgd2UgYXBwZW5kIGl0IHRvIHRoZSBib2R5IGJlY2F1c2UgdGhlIGNvbnRhaW5lciBvdmVyZmxvdyBpcyBzZXQgdG8gYXV0byAoc2VlOiBBc3NldHNcXExlc3NcXExheW91dEVkaXRvclxcVG9vbGJveC5sZXNzKSBhbmQgb3RoZXJ3aXNlIGl0IGNvdWxkIG5vdCBiZSBtb3ZlZCB3aXRoIGRyYWcmZHJvcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvOiBcImJvZHlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC5pc1Rvb2xib3ggPSB0cnVlOyAvLyBXaWxsIGluZGljYXRlIHRvIGNvbm5lY3RlZCBzb3J0YWJsZXMgdGhhdCBkcm9wcGVkIGl0ZW1zIHdlcmUgc2VudCBmcm9tIHRvb2xib3guXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnJlc2V0RWxlbWVudHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyOiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5jYW52YXMuc2V0SXNEcm9wVGFyZ2V0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXlvdXRJc0NvbGxhcHNlZENvb2tpZU5hbWUgPSBcImxheW91dFRvb2xib3hDYXRlZ29yeV9MYXlvdXRfSXNDb2xsYXBzZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxheW91dElzQ29sbGFwc2VkID0gJC5jb29raWUobGF5b3V0SXNDb2xsYXBzZWRDb29raWVOYW1lKSA9PT0gXCJ0cnVlXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUudG9nZ2xlTGF5b3V0SXNDb2xsYXBzZWQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxheW91dElzQ29sbGFwc2VkID0gISRzY29wZS5sYXlvdXRJc0NvbGxhcHNlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuY29va2llKGxheW91dElzQ29sbGFwc2VkQ29va2llTmFtZSwgJHNjb3BlLmxheW91dElzQ29sbGFwc2VkLCB7IGV4cGlyZXM6IDM2NSB9KTsgLy8gUmVtZW1iZXIgY29sbGFwc2VkIHN0YXRlIGZvciBhIHllYXIuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogZW52aXJvbm1lbnQudGVtcGxhdGVVcmwoXCJUb29sYm94XCIpLFxyXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uIChzY29wZSwgZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0b29sYm94ID0gZWxlbWVudC5maW5kKFwiLmxheW91dC10b29sYm94XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICQod2luZG93KS5vbihcInJlc2l6ZSBzY3JvbGxcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGVsZW1lbnQucGFyZW50KCkuZmluZChcIi5sYXlvdXQtY2FudmFzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2FudmFzIGlzIHRhbGxlciB0aGFuIHRoZSB0b29sYm94LCBtYWtlIHRoZSB0b29sYm94IHN0aWNreS1wb3NpdGlvbmVkIHdpdGhpbiB0aGUgZWRpdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGhlbHAgdGhlIHVzZXIgYXZvaWQgZXhjZXNzaXZlIHZlcnRpY2FsIHNjcm9sbGluZy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhc0lzVGFsbGVyID0gISFjYW52YXMgJiYgY2FudmFzLmhlaWdodCgpID4gdG9vbGJveC5oZWlnaHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpbmRvd1BvcyA9ICQod2luZG93KS5zY3JvbGxUb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhc0lzVGFsbGVyICYmIHdpbmRvd1BvcyA+IGVsZW1lbnQub2Zmc2V0KCkudG9wICsgZWxlbWVudC5oZWlnaHQoKSAtIHRvb2xib3guaGVpZ2h0KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3guYWRkQ2xhc3MoXCJzdGlja3ktYm90dG9tXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveC5yZW1vdmVDbGFzcyhcInN0aWNreS10b3BcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FudmFzSXNUYWxsZXIgJiYgd2luZG93UG9zID4gZWxlbWVudC5vZmZzZXQoKS50b3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3guYWRkQ2xhc3MoXCJzdGlja3ktdG9wXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveC5yZW1vdmVDbGFzcyhcInN0aWNreS1ib3R0b21cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94LnJlbW92ZUNsYXNzKFwic3RpY2t5LXRvcFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3gucmVtb3ZlQ2xhc3MoXCJzdGlja3ktYm90dG9tXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dFRvb2xib3hHcm91cFwiLCBbXCIkY29tcGlsZVwiLCBcImVudmlyb25tZW50XCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKCRjb21waWxlLCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgY2F0ZWdvcnk6IFwiPVwiIH0sXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0NvbGxhcHNlZENvb2tpZU5hbWUgPSBcImxheW91dFRvb2xib3hDYXRlZ29yeV9cIiArICRzY29wZS5jYXRlZ29yeS5uYW1lICsgXCJfSXNDb2xsYXBzZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmlzQ29sbGFwc2VkID0gJC5jb29raWUoaXNDb2xsYXBzZWRDb29raWVOYW1lKSA9PT0gXCJ0cnVlXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS50b2dnbGVJc0NvbGxhcHNlZCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuaXNDb2xsYXBzZWQgPSAhJHNjb3BlLmlzQ29sbGFwc2VkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5jb29raWUoaXNDb2xsYXBzZWRDb29raWVOYW1lLCAkc2NvcGUuaXNDb2xsYXBzZWQsIHsgZXhwaXJlczogMzY1IH0pOyAvLyBSZW1lbWJlciBjb2xsYXBzZWQgc3RhdGUgZm9yIGEgeWVhci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBlbnZpcm9ubWVudC50ZW1wbGF0ZVVybChcIlRvb2xib3hHcm91cFwiKSxcclxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js index 70a8c5e9d47..b5c45d3ea47 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js @@ -1 +1 @@ -var LayoutEditor;angular.module("LayoutEditor",["ngSanitize","ngResource","ui.sortable"]),function(e){e.Clipboard=new function(){var e=this;this._clipboardData={},this._isDisabled=!1,this._wasInvoked=!1,this.setData=function(t,o){e._clipboardData[t]=o,e._wasInvoked=!0},this.getData=function(t){return e._wasInvoked=!0,e._clipboardData[t]},this.disable=function(){e._isDisabled=!0,e._wasInvoked=!1,e._clipboardData={}},this.isDisabled=function(){return e._isDisabled},this.wasInvoked=function(){return e._wasInvoked}},angular.module("LayoutEditor").factory("clipboard",[function(){return{setData:e.Clipboard.setData,getData:e.Clipboard.getData,disable:e.Clipboard.disable,isDisabled:e.Clipboard.isDisabled,wasInvoked:e.Clipboard.wasInvoked}}])}(LayoutEditor||(LayoutEditor={})),angular.module("LayoutEditor").factory("scopeConfigurator",["$timeout","clipboard",function(e,t){return{configureForElement:function(e,o){o.find(".layout-panel").click((function(e){e.stopPropagation()})),o.parent().keydown((function(n){var l=!1,a=!1,i=e.element;if(!i.editor.isDragging){if(!t.isDisabled()){var r=i.editor.focusedElement;if(r&&n.ctrlKey)switch(n.which){case 67:r.copy(t);break;case 88:r.cut(t);break;case 86:r.paste(t)}}if(n.ctrlKey||n.shiftKey||n.altKey||46!=n.which?n.ctrlKey||n.shiftKey||n.altKey||32!=n.which&&27!=n.which||(o.find(".layout-panel-action-properties").first().click(),l=!0):(e.delete(i),l=!0),i.hasEditor&&(n.ctrlKey||n.shiftKey||n.altKey||13!=n.which||(o.find(".layout-panel-action-edit").first().click(),l=!0)),i.children&&(n.ctrlKey||n.shiftKey||!n.altKey||40!=n.which||(i.children.length>0&&i.children[0].setIsFocused(),l=!0),"Column"==i.type)){var c=!n.ctrlKey;37==n.which?(n.altKey&&i.expandLeft(c),n.shiftKey&&i.contractRight(c),l=!0):39==n.which&&(n.altKey&&i.contractLeft(c),n.shiftKey&&i.expandRight(c),l=!0)}i.parent&&(n.altKey&&38==n.which&&(i.parent.setIsFocused(),l=!0),"Row"==i.parent.type?n.ctrlKey||n.shiftKey||n.altKey||37!=n.which?n.ctrlKey||n.shiftKey||n.altKey||39!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||37!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||39!=n.which||(i.moveDown(),l=!0):(i.moveUp(),a=!0,l=!0):(i.parent.moveFocusNextChild(i),l=!0):(i.parent.moveFocusPrevChild(i),l=!0):n.ctrlKey||n.shiftKey||n.altKey||38!=n.which?n.ctrlKey||n.shiftKey||n.altKey||40!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||38!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||40!=n.which||(i.moveDown(),l=!0):(i.moveUp(),a=!0,l=!0):(i.parent.moveFocusNextChild(i),l=!0):(i.parent.moveFocusPrevChild(i),l=!0)),l&&n.preventDefault(),n.stopPropagation(),e.$apply(),a&&window.setTimeout((function(){e.$apply((function(){i.editor.focusedElement.setIsFocused()}))}),100)}})),e.element.setIsFocusedEventHandlers.push((function(){o.parent().focus()})),e.delete=function(e){e.delete()},e.element.hasEditor&&(e.edit=function(){e.$root.editElement(e.element).then((function(t){e.$apply((function(){t.cancel||(e.element.data=t.element.data,e.element.applyElementEditorModel(t.elementEditorModel),e.element.setHtml&&e.element.setHtml(t.element.html))}))}))})},configureForContainer:function(t,o){var n=t.element;t.getShowChildrenPlaceholder=function(){return 0===t.element.children.length&&!t.element.getIsDropTarget()},t.sortableOptions={cursor:"move",delay:150,disabled:n.getIsSealed(),distance:5,start:function(e,o){t.$apply((function(){n.setIsDropTarget(!0),n.editor.isDragging=!0})),o.placeholder.height(o.item.height()-4),o.placeholder.css("min-height",0)},stop:function(e,o){t.$apply((function(){n.editor.isDragging=!1,n.setIsDropTarget(!1)}))},over:function(t,l){l.sender&&l.sender[0].isToolbox&&(l.sender[0].dropTargetTimeout&&(e.cancel(l.sender[0].dropTargetTimeout),l.sender[0].dropTargetTimeout=null),e((function(){if("Row"==n.type){var e=n.editor.dropTargetElement;e&&"Row"==e.type&&e.rollbackAddColumn()}n.setIsDropTarget(!1)})),l.sender[0].dropTargetTimeout=e((function(){if("Row"==n.type){var e=l.item.sortable.model,t=Math.floor(12/(n.children.length+1));e.width=t,e.offset=0,n.beginAddColumn(t);var a=_.max(_(o.find("> .layout-children > .layout-column:not(.ui-sortable-placeholder)")).map((function(e){return $(e).height()})));for(i=1;i<=12;i++)l.placeholder.removeClass("col-xs-"+i);l.placeholder.addClass("col-xs-"+e.width),a>0?(l.placeholder.height(a),l.placeholder.css("min-height",0)):(l.placeholder.height(0),l.placeholder.css("min-height",""))}n.setIsDropTarget(!0)}),150))},receive:function(o,l){l.sender&&l.sender[0].isToolbox&&t.$apply((function(){var o=l.item.sortable.model;o&&("Row"==n.type&&n.commitAddColumn(),o.setEditor(n.editor),o.setParent(n),o.hasEditor&&t.$root.editElement(o).then((function(t){t.cancel||(o.data=t.element.data,o.applyElementEditorModel(t.elementEditorModel),o.setHtml&&o.setHtml(t.element.html)),e((function(){t.cancel?o.delete():o.setIsFocused(),n.setIsDropTarget(!1)}))}))),e((function(){n.setIsDropTarget(!1),o&&o.setIsFocused()}))}))}},t.click=function(e,t){e.editor.isDragging||e.setIsFocused(),t.stopPropagation()},t.getClasses=function(e){var t=["layout-element"];return e.children&&(t.push("layout-container"),e.getIsSealed()&&t.push("layout-container-sealed")),t.push("layout-"+e.type.toLowerCase()),e.dropTargetClass&&t.push(e.dropTargetClass),"Row"==e.type&&(t.push("row"),e.canAddColumn()||t.push("layout-row-full")),"Column"==e.type&&(t.push("col-xs-"+e.width),t.push("col-xs-offset-"+e.offset)),"Content"==e.type&&t.push("layout-content-"+e.contentTypeClass),e.getIsActive()&&t.push("layout-element-active"),e.getIsFocused()&&t.push("layout-element-focused"),e.getIsSelected()&&t.push("layout-element-selected"),e.getIsDropTarget()&&t.push("layout-element-droptarget"),e.isTemplated&&t.push("layout-element-templated"),t}}}}]),angular.module("LayoutEditor").directive("orcLayoutEditor",["environment",function(environment){return{restrict:"E",scope:{},controller:["$scope","$element","$attrs","$compile","clipboard",function($scope,$element,$attrs,$compile,clipboard){if(!$attrs.model)throw new Error("The 'model' attribute must evaluate to a LayoutEditor.Editor object.");$scope.element=eval($attrs.model),$scope.click=function(e,t){e.editor.isDragging||e.setIsFocused(),t.stopPropagation()},$scope.getClasses=function(e){var t=["layout-element","layout-container","layout-canvas"];return e.getIsActive()&&t.push("layout-element-active"),e.getIsFocused()&&t.push("layout-element-focused"),e.getIsSelected()&&t.push("layout-element-selected"),e.getIsDropTarget()&&t.push("layout-element-droptarget"),e.isTemplated&&t.push("layout-element-templated"),t};var layoutDesignerHost=$(".layout-designer").data("layout-designer-host");$scope.$root.layoutDesignerHost=layoutDesignerHost,layoutDesignerHost.element.on("replacecanvas",(function(e,t){var o=$scope.element,n={data:t.canvas.data,htmlId:t.canvas.htmlId,htmlClass:t.canvas.htmlClass,htmlStyle:t.canvas.htmlStyle,isTemplated:t.canvas.isTemplated,children:t.canvas.children};layoutDesignerHost.editor=window.layoutEditor=new LayoutEditor.Editor(o.config,n);var l=$compile("")($scope);$(".layout-editor-holder").html(l)})),$scope.$root.editElement=function(e){return $scope.$root.layoutDesignerHost.editElement(e)},$scope.$root.addElement=function(e){return $scope.$root.layoutDesignerHost.addElement(e)},$(document).on("cut copy paste",(function(e){if(clipboard.wasInvoked())e.originalEvent.clipboardData.setData("text/plain",clipboard.getData("text/plain")),e.originalEvent.clipboardData.setData("text/json",clipboard.getData("text/json")),e.preventDefault();else{var t=$scope.element.focusedElement;t&&($scope.$apply((function(){switch(e.type){case"copy":t.copy(e.originalEvent.clipboardData);break;case"cut":t.cut(e.originalEvent.clipboardData);break;case"paste":t.paste(e.originalEvent.clipboardData)}})),window.setTimeout((function(){$scope.$apply((function(){$scope.element.focusedElement&&$scope.element.focusedElement.setIsFocused()}))}),100),e.preventDefault())}clipboard.disable()}))}],templateUrl:environment.templateUrl("Editor"),replace:!0,link:function(e,t){t.find(".layout-toolbar-container").click((function(e){e.stopPropagation()})),$(window).click((function(t){e.$apply((function(){e.element.activeElement=null,e.element.focusedElement=null}))}))}}}]),angular.module("LayoutEditor").directive("orcLayoutCanvas",["scopeConfigurator","environment",function(e,t){return{restrict:"E",scope:{element:"="},controller:["$scope","$element","$attrs",function(t,o,n){e.configureForElement(t,o),e.configureForContainer(t,o),t.sortableOptions.axis="y"}],templateUrl:t.templateUrl("Canvas"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutChild",["$compile",function(e){return{restrict:"E",scope:{element:"="},link:function(t,o){var n="",l=e(n)(t);$(o).replaceWith(l)}}}]),angular.module("LayoutEditor").directive("orcLayoutColumn",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="y"}],templateUrl:o.templateUrl("Column"),replace:!0,link:function(e,t,o){t.find(".layout-column-resize-bar").draggable({axis:"x",helper:"clone",revert:!0,start:function(t,o){e.$apply((function(){e.element.editor.isResizing=!0}))},drag:function(o,n){var l=t.parent(),a=l.width()/e.element.width,i=!o.ctrlKey;if($(o.target).hasClass("layout-column-resize-bar-left"))(r=n.offset.left-l.offset().left)<-a&&e.element.canExpandLeft(i)?e.$apply((function(){e.element.expandLeft(i)})):r>a&&e.element.canContractLeft(i)&&e.$apply((function(){e.element.contractLeft(i)}));else if($(o.target).hasClass("layout-column-resize-bar-right")){var r;(r=n.offset.left-l.width()-l.offset().left)>a&&e.element.canExpandRight(i)?e.$apply((function(){e.element.expandRight(i)})):r<-a&&e.element.canContractRight(i)&&e.$apply((function(){e.element.contractRight(i)}))}},stop:function(t,o){e.$apply((function(){e.element.editor.isResizing=!1}))}})}}}]),angular.module("LayoutEditor").directive("orcLayoutContent",["$sce","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(o,n){t.configureForElement(o,n),o.element.setHtml=function(t){o.element.html=t,o.element.htmlUnsafe=e.trustAsHtml(t)},o.element.setHtml(o.element.html)}],templateUrl:o.templateUrl("Content"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutGrid",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="y"}],templateUrl:o.templateUrl("Grid"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutRow",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="x",e.sortableOptions["ui-floating"]=!0}],templateUrl:o.templateUrl("Row"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutPopup",[function(){return{restrict:"A",link:function(e,t,o){var n=$(t),l=n.closest(".layout-popup-trigger"),a=n.closest(".layout-element");l.click((function(){n.toggle(),n.is(":visible")&&(n.position({my:o.orcLayoutPopupMy||"left top",at:o.orcLayoutPopupAt||"left bottom+4px",of:l}),n.find("input").first().focus())})),n.click((function(e){e.stopPropagation()})),a.click((function(e){n.hide()})),n.keydown((function(e){e.ctrlKey||e.shiftKey||e.altKey||27!=e.which||n.hide(),e.stopPropagation()})),n.on("cut copy paste",(function(e){e.stopPropagation()}))}}}]),angular.module("LayoutEditor").directive("orcLayoutToolbox",["$compile","environment",function(e,t){return{restrict:"E",controller:["$scope","$element",function(e,t){e.resetElements=function(){e.gridElements=[LayoutEditor.Grid.from({toolboxIcon:"",toolboxLabel:"Grid",toolboxDescription:"Empty grid.",children:[]})],e.rowElements=[LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (1 column)",toolboxDescription:"Row with 1 column.",children:LayoutEditor.Column.times(1)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (2 columns)",toolboxDescription:"Row with 2 columns.",children:LayoutEditor.Column.times(2)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (3 columns)",toolboxDescription:"Row with 3 columns.",children:LayoutEditor.Column.times(3)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (4 columns)",toolboxDescription:"Row with 4 columns.",children:LayoutEditor.Column.times(4)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (6 columns)",toolboxDescription:"Row with 6 columns.",children:LayoutEditor.Column.times(6)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (12 columns)",toolboxDescription:"Row with 12 columns.",children:LayoutEditor.Column.times(12)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (empty)",toolboxDescription:"Empty row.",children:[]})],e.columnElements=[LayoutEditor.Column.from({toolboxIcon:"",toolboxLabel:"Column",toolboxDescription:"Empty column.",width:1,offset:0,children:[]})],e.canvasElements=[LayoutEditor.Canvas.from({toolboxIcon:"",toolboxLabel:"Canvas",toolboxDescription:"Empty canvas.",children:[]})],e.contentElementCategories=_(e.element.config.categories).map((function(e){return{name:e.name,elements:_(e.contentTypes).map((function(e){var t=e.type,o=(LayoutEditor.factories[t]||LayoutEditor.factories.Content)({isTemplated:!1,contentType:e.id,contentTypeLabel:e.label,contentTypeClass:e.typeClass,data:null,hasEditor:e.hasEditor,html:e.html});return o.toolboxIcon=e.icon||"",o.toolboxLabel=e.label,o.toolboxDescription=e.description,o}))}}))},e.resetElements(),e.getSortableOptions=function(o){var n,l,a=t.closest(".layout-editor").attr("id"),i=!1;switch(o){case"Grid":case"Canvas":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-container layout-grid ui-sortable-placeholder";break;case"Row":n=[".layout-grid"],l="layout-element layout-container layout-row row ui-sortable-placeholder";break;case"Column":n=[".layout-row:not(.layout-row-full)"],l="layout-element layout-container layout-column ui-sortable-placeholder",i=!0;break;case"Content":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-content ui-sortable-placeholder"}return{cursor:"move",connectWith:_(n).map((function(e){return"#"+a+" "+e+":not(.layout-container-sealed) > .layout-element-wrapper > .layout-children"})).join(", "),placeholder:l,"ui-floating":i,helper:"clone",appendTo:"body",create:function(e,t){e.target.isToolbox=!0},start:function(t,o){e.$apply((function(){e.element.isDragging=!0}))},stop:function(t,o){e.$apply((function(){e.element.isDragging=!1,e.resetElements()}))},over:function(t,o){e.$apply((function(){e.element.canvas.setIsDropTarget(!1)}))}}};var o="layoutToolboxCategory_Layout_IsCollapsed";e.layoutIsCollapsed="true"===$.cookie(o),e.toggleLayoutIsCollapsed=function(t){e.layoutIsCollapsed=!e.layoutIsCollapsed,$.cookie(o,e.layoutIsCollapsed,{expires:365}),t.preventDefault(),t.stopPropagation()}}],templateUrl:t.templateUrl("Toolbox"),replace:!0,link:function(e,t){var o=t.find(".layout-toolbox");$(window).on("resize scroll",(function(e){var n=t.parent().find(".layout-canvas"),l=!!n&&n.height()>o.height(),a=$(window).scrollTop();l&&a>t.offset().top+t.height()-o.height()?(o.addClass("sticky-bottom"),o.removeClass("sticky-top")):l&&a>t.offset().top?(o.addClass("sticky-top"),o.removeClass("sticky-bottom")):(o.removeClass("sticky-top"),o.removeClass("sticky-bottom"))}))}}}]),angular.module("LayoutEditor").directive("orcLayoutToolboxGroup",["$compile","environment",function(e,t){return{restrict:"E",scope:{category:"="},controller:["$scope","$element",function(e,t){var o="layoutToolboxCategory_"+e.category.name+"_IsCollapsed";e.isCollapsed="true"===$.cookie(o),e.toggleIsCollapsed=function(t){e.isCollapsed=!e.isCollapsed,$.cookie(o,e.isCollapsed,{expires:365}),t.preventDefault(),t.stopPropagation()}}],templateUrl:t.templateUrl("ToolboxGroup"),replace:!0}}]); \ No newline at end of file +angular.module("LayoutEditor",["ngSanitize","ngResource","ui.sortable"]);var LayoutEditor;!function(e){var t=function(){var e=this;this._clipboardData={},this._isDisabled=!1,this._wasInvoked=!1,this.setData=function(t,o){e._clipboardData[t]=o,e._wasInvoked=!0},this.getData=function(t){return e._wasInvoked=!0,e._clipboardData[t]},this.disable=function(){e._isDisabled=!0,e._wasInvoked=!1,e._clipboardData={}},this.isDisabled=function(){return e._isDisabled},this.wasInvoked=function(){return e._wasInvoked}};e.Clipboard=new t,angular.module("LayoutEditor").factory("clipboard",[function(){return{setData:e.Clipboard.setData,getData:e.Clipboard.getData,disable:e.Clipboard.disable,isDisabled:e.Clipboard.isDisabled,wasInvoked:e.Clipboard.wasInvoked}}])}(LayoutEditor||(LayoutEditor={})),angular.module("LayoutEditor").factory("scopeConfigurator",["$timeout","clipboard",function(e,t){return{configureForElement:function(e,o){o.find(".layout-panel").click(function(e){e.stopPropagation()}),o.parent().keydown(function(n){var l=!1,a=!1,r=e.element;if(!r.editor.isDragging){if(!t.isDisabled()){var i=r.editor.focusedElement;if(i&&n.ctrlKey)switch(n.which){case 67:i.copy(t);break;case 88:i.cut(t);break;case 86:i.paste(t)}}if(n.ctrlKey||n.shiftKey||n.altKey||46!=n.which?n.ctrlKey||n.shiftKey||n.altKey||32!=n.which&&27!=n.which||(o.find(".layout-panel-action-properties").first().click(),l=!0):(e["delete"](r),l=!0),r.hasEditor&&(n.ctrlKey||n.shiftKey||n.altKey||13!=n.which||(o.find(".layout-panel-action-edit").first().click(),l=!0)),r.children&&(n.ctrlKey||n.shiftKey||!n.altKey||40!=n.which||(r.children.length>0&&r.children[0].setIsFocused(),l=!0),"Column"==r.type)){var c=!n.ctrlKey;37==n.which?(n.altKey&&r.expandLeft(c),n.shiftKey&&r.contractRight(c),l=!0):39==n.which&&(n.altKey&&r.contractLeft(c),n.shiftKey&&r.expandRight(c),l=!0)}r.parent&&(n.altKey&&38==n.which&&(r.parent.setIsFocused(),l=!0),"Row"==r.parent.type?n.ctrlKey||n.shiftKey||n.altKey||37!=n.which?n.ctrlKey||n.shiftKey||n.altKey||39!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||37!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||39!=n.which||(r.moveDown(),l=!0):(r.moveUp(),a=!0,l=!0):(r.parent.moveFocusNextChild(r),l=!0):(r.parent.moveFocusPrevChild(r),l=!0):n.ctrlKey||n.shiftKey||n.altKey||38!=n.which?n.ctrlKey||n.shiftKey||n.altKey||40!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||38!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||40!=n.which||(r.moveDown(),l=!0):(r.moveUp(),a=!0,l=!0):(r.parent.moveFocusNextChild(r),l=!0):(r.parent.moveFocusPrevChild(r),l=!0)),l&&n.preventDefault(),n.stopPropagation(),e.$apply(),a&&window.setTimeout(function(){e.$apply(function(){r.editor.focusedElement.setIsFocused()})},100)}}),e.element.setIsFocusedEventHandlers.push(function(){o.parent().focus()}),e["delete"]=function(e){e["delete"]()},e.element.hasEditor&&(e.edit=function(){e.$root.editElement(e.element).then(function(t){e.$apply(function(){t.cancel||(e.element.data=t.element.data,e.element.applyElementEditorModel(t.elementEditorModel),e.element.setHtml&&e.element.setHtml(t.element.html))})})})},configureForContainer:function(t,o){var n=t.element;t.getShowChildrenPlaceholder=function(){return 0===t.element.children.length&&!t.element.getIsDropTarget()},t.sortableOptions={cursor:"move",delay:150,disabled:n.getIsSealed(),distance:5,start:function(e,o){t.$apply(function(){n.setIsDropTarget(!0),n.editor.isDragging=!0}),o.placeholder.height(o.item.height()-4),o.placeholder.css("min-height",0)},stop:function(e,o){t.$apply(function(){n.editor.isDragging=!1,n.setIsDropTarget(!1)})},over:function(t,l){l.sender&&l.sender[0].isToolbox&&(l.sender[0].dropTargetTimeout&&(e.cancel(l.sender[0].dropTargetTimeout),l.sender[0].dropTargetTimeout=null),e(function(){if("Row"==n.type){var e=n.editor.dropTargetElement;e&&"Row"==e.type&&e.rollbackAddColumn()}n.setIsDropTarget(!1)}),l.sender[0].dropTargetTimeout=e(function(){if("Row"==n.type){var e=l.item.sortable.model,t=Math.floor(12/(n.children.length+1));e.width=t,e.offset=0,n.beginAddColumn(t);var a=_.max(_(o.find("> .layout-children > .layout-column:not(.ui-sortable-placeholder)")).map(function(e){return $(e).height()}));for(i=1;i<=12;i++)l.placeholder.removeClass("col-xs-"+i);l.placeholder.addClass("col-xs-"+e.width),a>0?(l.placeholder.height(a),l.placeholder.css("min-height",0)):(l.placeholder.height(0),l.placeholder.css("min-height",""))}n.setIsDropTarget(!0)},150))},receive:function(o,l){l.sender&&l.sender[0].isToolbox&&t.$apply(function(){var o=l.item.sortable.model;o&&("Row"==n.type&&n.commitAddColumn(),o.setEditor(n.editor),o.setParent(n),o.hasEditor&&t.$root.editElement(o).then(function(t){t.cancel||(o.data=t.element.data,o.applyElementEditorModel(t.elementEditorModel),o.setHtml&&o.setHtml(t.element.html)),e(function(){t.cancel?o["delete"]():o.setIsFocused(),n.setIsDropTarget(!1)})})),e(function(){n.setIsDropTarget(!1),o&&o.setIsFocused()})})}},t.click=function(e,t){e.editor.isDragging||e.setIsFocused(),t.stopPropagation()},t.getClasses=function(e){var t=["layout-element"];return e.children&&(t.push("layout-container"),e.getIsSealed()&&t.push("layout-container-sealed")),t.push("layout-"+e.type.toLowerCase()),e.dropTargetClass&&t.push(e.dropTargetClass),"Row"==e.type&&(t.push("row"),e.canAddColumn()||t.push("layout-row-full")),"Column"==e.type&&(t.push("col-xs-"+e.width),t.push("col-xs-offset-"+e.offset)),"Content"==e.type&&t.push("layout-content-"+e.contentTypeClass),e.getIsActive()&&t.push("layout-element-active"),e.getIsFocused()&&t.push("layout-element-focused"),e.getIsSelected()&&t.push("layout-element-selected"),e.getIsDropTarget()&&t.push("layout-element-droptarget"),e.isTemplated&&t.push("layout-element-templated"),t}}}}]),angular.module("LayoutEditor").directive("orcLayoutEditor",["environment",function(environment){return{restrict:"E",scope:{},controller:["$scope","$element","$attrs","$compile","clipboard",function($scope,$element,$attrs,$compile,clipboard){if(!$attrs.model)throw new Error("The 'model' attribute must evaluate to a LayoutEditor.Editor object.");$scope.element=eval($attrs.model),$scope.click=function(e,t){e.editor.isDragging||e.setIsFocused(),t.stopPropagation()},$scope.getClasses=function(e){var t=["layout-element","layout-container","layout-canvas"];return e.getIsActive()&&t.push("layout-element-active"),e.getIsFocused()&&t.push("layout-element-focused"),e.getIsSelected()&&t.push("layout-element-selected"),e.getIsDropTarget()&&t.push("layout-element-droptarget"),e.isTemplated&&t.push("layout-element-templated"),t};var layoutDesignerHost=$(".layout-designer").data("layout-designer-host");$scope.$root.layoutDesignerHost=layoutDesignerHost,layoutDesignerHost.element.on("replacecanvas",function(e,t){var o=$scope.element,n={data:t.canvas.data,htmlId:t.canvas.htmlId,htmlClass:t.canvas.htmlClass,htmlStyle:t.canvas.htmlStyle,isTemplated:t.canvas.isTemplated,children:t.canvas.children};layoutDesignerHost.editor=window.layoutEditor=new LayoutEditor.Editor(o.config,n);var l="",a=$compile(l)($scope);$(".layout-editor-holder").html(a)}),$scope.$root.editElement=function(e){var t=$scope.$root.layoutDesignerHost;return t.editElement(e)},$scope.$root.addElement=function(e){var t=$scope.$root.layoutDesignerHost;return t.addElement(e)},$(document).on("cut copy paste",function(e){if(clipboard.wasInvoked())e.originalEvent.clipboardData.setData("text/plain",clipboard.getData("text/plain")),e.originalEvent.clipboardData.setData("text/json",clipboard.getData("text/json")),e.preventDefault();else{var t=$scope.element.focusedElement;t&&($scope.$apply(function(){switch(e.type){case"copy":t.copy(e.originalEvent.clipboardData);break;case"cut":t.cut(e.originalEvent.clipboardData);break;case"paste":t.paste(e.originalEvent.clipboardData)}}),window.setTimeout(function(){$scope.$apply(function(){$scope.element.focusedElement&&$scope.element.focusedElement.setIsFocused()})},100),e.preventDefault())}clipboard.disable()})}],templateUrl:environment.templateUrl("Editor"),replace:!0,link:function(e,t){t.find(".layout-toolbar-container").click(function(e){e.stopPropagation()}),$(window).click(function(t){e.$apply(function(){e.element.activeElement=null,e.element.focusedElement=null})})}}}]),angular.module("LayoutEditor").directive("orcLayoutCanvas",["scopeConfigurator","environment",function(e,t){return{restrict:"E",scope:{element:"="},controller:["$scope","$element","$attrs",function(t,o,n){e.configureForElement(t,o),e.configureForContainer(t,o),t.sortableOptions.axis="y"}],templateUrl:t.templateUrl("Canvas"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutChild",["$compile",function(e){return{restrict:"E",scope:{element:"="},link:function(t,o){var n="",l=e(n)(t);$(o).replaceWith(l)}}}]),angular.module("LayoutEditor").directive("orcLayoutColumn",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="y"}],templateUrl:o.templateUrl("Column"),replace:!0,link:function(e,t,o){t.find(".layout-column-resize-bar").draggable({axis:"x",helper:"clone",revert:!0,start:function(t,o){e.$apply(function(){e.element.editor.isResizing=!0})},drag:function(o,n){var l=t.parent(),a=l.width()/e.element.width,r=!o.ctrlKey;if($(o.target).hasClass("layout-column-resize-bar-left")){var i=n.offset.left-l.offset().left;-a>i&&e.element.canExpandLeft(r)?e.$apply(function(){e.element.expandLeft(r)}):i>a&&e.element.canContractLeft(r)&&e.$apply(function(){e.element.contractLeft(r)})}else if($(o.target).hasClass("layout-column-resize-bar-right")){var i=n.offset.left-l.width()-l.offset().left;i>a&&e.element.canExpandRight(r)?e.$apply(function(){e.element.expandRight(r)}):-a>i&&e.element.canContractRight(r)&&e.$apply(function(){e.element.contractRight(r)})}},stop:function(t,o){e.$apply(function(){e.element.editor.isResizing=!1})}})}}}]),angular.module("LayoutEditor").directive("orcLayoutContent",["$sce","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(o,n){t.configureForElement(o,n),o.element.setHtml=function(t){o.element.html=t,o.element.htmlUnsafe=e.trustAsHtml(t)},o.element.setHtml(o.element.html)}],templateUrl:o.templateUrl("Content"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutGrid",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="y"}],templateUrl:o.templateUrl("Grid"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutRow",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="x",e.sortableOptions["ui-floating"]=!0}],templateUrl:o.templateUrl("Row"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutPopup",[function(){return{restrict:"A",link:function(e,t,o){var n=$(t),l=n.closest(".layout-popup-trigger"),a=n.closest(".layout-element");l.click(function(){n.toggle(),n.is(":visible")&&(n.position({my:o.orcLayoutPopupMy||"left top",at:o.orcLayoutPopupAt||"left bottom+4px",of:l}),n.find("input").first().focus())}),n.click(function(e){e.stopPropagation()}),a.click(function(e){n.hide()}),n.keydown(function(e){e.ctrlKey||e.shiftKey||e.altKey||27!=e.which||n.hide(),e.stopPropagation()}),n.on("cut copy paste",function(e){e.stopPropagation()})}}}]),angular.module("LayoutEditor").directive("orcLayoutToolbox",["$compile","environment",function(e,t){return{restrict:"E",controller:["$scope","$element",function(e,t){e.resetElements=function(){e.gridElements=[LayoutEditor.Grid.from({toolboxIcon:"",toolboxLabel:"Grid",toolboxDescription:"Empty grid.",children:[]})],e.rowElements=[LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (1 column)",toolboxDescription:"Row with 1 column.",children:LayoutEditor.Column.times(1)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (2 columns)",toolboxDescription:"Row with 2 columns.",children:LayoutEditor.Column.times(2)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (3 columns)",toolboxDescription:"Row with 3 columns.",children:LayoutEditor.Column.times(3)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (4 columns)",toolboxDescription:"Row with 4 columns.",children:LayoutEditor.Column.times(4)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (6 columns)",toolboxDescription:"Row with 6 columns.",children:LayoutEditor.Column.times(6)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (12 columns)",toolboxDescription:"Row with 12 columns.",children:LayoutEditor.Column.times(12)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (empty)",toolboxDescription:"Empty row.",children:[]})],e.columnElements=[LayoutEditor.Column.from({toolboxIcon:"",toolboxLabel:"Column",toolboxDescription:"Empty column.",width:1,offset:0,children:[]})],e.canvasElements=[LayoutEditor.Canvas.from({toolboxIcon:"",toolboxLabel:"Canvas",toolboxDescription:"Empty canvas.",children:[]})],e.contentElementCategories=_(e.element.config.categories).map(function(e){return{name:e.name,elements:_(e.contentTypes).map(function(e){var t=e.type,o=LayoutEditor.factories[t]||LayoutEditor.factories.Content,n={isTemplated:!1,contentType:e.id,contentTypeLabel:e.label,contentTypeClass:e.typeClass,data:null,hasEditor:e.hasEditor,html:e.html},l=o(n);return l.toolboxIcon=e.icon||"",l.toolboxLabel=e.label,l.toolboxDescription=e.description,l})}})},e.resetElements(),e.getSortableOptions=function(o){var n,l,a=t.closest(".layout-editor").attr("id"),r=!1;switch(o){case"Grid":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-container layout-grid ui-sortable-placeholder";break;case"Row":n=[".layout-grid"],l="layout-element layout-container layout-row row ui-sortable-placeholder";break;case"Column":n=[".layout-row:not(.layout-row-full)"],l="layout-element layout-container layout-column ui-sortable-placeholder",r=!0;break;case"Content":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-content ui-sortable-placeholder";break;case"Canvas":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-container layout-grid ui-sortable-placeholder"}return{cursor:"move",connectWith:_(n).map(function(e){return"#"+a+" "+e+":not(.layout-container-sealed) > .layout-element-wrapper > .layout-children"}).join(", "),placeholder:l,"ui-floating":r,helper:"clone",appendTo:"body",create:function(e,t){e.target.isToolbox=!0},start:function(t,o){e.$apply(function(){e.element.isDragging=!0})},stop:function(t,o){e.$apply(function(){e.element.isDragging=!1,e.resetElements()})},over:function(t,o){e.$apply(function(){e.element.canvas.setIsDropTarget(!1)})}}};var o="layoutToolboxCategory_Layout_IsCollapsed";e.layoutIsCollapsed="true"===$.cookie(o),e.toggleLayoutIsCollapsed=function(t){e.layoutIsCollapsed=!e.layoutIsCollapsed,$.cookie(o,e.layoutIsCollapsed,{expires:365}),t.preventDefault(),t.stopPropagation()}}],templateUrl:t.templateUrl("Toolbox"),replace:!0,link:function(e,t){var o=t.find(".layout-toolbox");$(window).on("resize scroll",function(e){var n=t.parent().find(".layout-canvas"),l=!!n&&n.height()>o.height(),a=$(window).scrollTop();l&&a>t.offset().top+t.height()-o.height()?(o.addClass("sticky-bottom"),o.removeClass("sticky-top")):l&&a>t.offset().top?(o.addClass("sticky-top"),o.removeClass("sticky-bottom")):(o.removeClass("sticky-top"),o.removeClass("sticky-bottom"))})}}}]),angular.module("LayoutEditor").directive("orcLayoutToolboxGroup",["$compile","environment",function(e,t){return{restrict:"E",scope:{category:"="},controller:["$scope","$element",function(e,t){var o="layoutToolboxCategory_"+e.category.name+"_IsCollapsed";e.isCollapsed="true"===$.cookie(o),e.toggleIsCollapsed=function(t){e.isCollapsed=!e.isCollapsed,$.cookie(o,e.isCollapsed,{expires:365}),t.preventDefault(),t.stopPropagation()}}],templateUrl:t.templateUrl("ToolboxGroup"),replace:!0}}]); \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css index 67fb46d893a..a196a695829 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css @@ -3,386 +3,301 @@ ** Any changes made directly to this file will be overwritten next time its asset group is processed by Gulp. */ -body .layout-toolbox-item { - border: 1px solid #e4e5e6; - background-color: #fff; - padding: 9px 12px; - cursor: default; - list-style-type: none; -} - - body .layout-toolbox-item i { - display: inline-block; - width: 16px; - font: normal normal normal 14px/1 FontAwesome; - } - - body .layout-toolbox-item + .layout-toolbox-item { - margin-top: 4px; - } - .layout-editor-toolbar { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - position: relative; - top: 10px; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: justify; + justify-content: space-between; + position: relative; + top: 10px; +} +.layout-editor-toolbar .layout-editor-toolbar-group { + display: -ms-flexbox; + display: flex; +} +.layout-editor-toolbar .layout-editor-toolbar-group > li + li { + margin-left: 12px; } - - .layout-editor-toolbar .layout-editor-toolbar-group { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - } - - .layout-editor-toolbar .layout-editor-toolbar-group > li + li { - margin-left: 12px; - } - .layout-editor { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - margin-top: 1em; - font-size: 14px; - -webkit-align-items: stretch; - -ms-flex-align: stretch; - align-items: stretch; + display: -ms-flexbox; + display: flex; + margin-top: 1em; + font-size: 14px; + -ms-flex-align: stretch; + align-items: stretch; +} +.layout-editor > .layout-canvas-wrapper { + -ms-flex-positive: 1; + flex-grow: 1; + background-color: #f3f4f5; + border: 1px solid #e4e5e6; +} +.layout-editor > .layout-canvas-wrapper > .layout-toolbar-container { + display: none; + margin: 12px 12px 0; + min-height: 71px; +} +.layout-editor > .layout-canvas-wrapper > .layout-toolbar-container > .mce-panel { + width: 100% !important; +} +.layout-editor > .layout-canvas-wrapper .layout-content > .layout-element-wrapper .layout-content-markup > .layout-placeholder { + border: 1px dashed #ccc; + padding: 0.2em 0.4em; + background: #e8e8e8; +} +.layout-editor .layout-snippet { + background: #e8e8e8; } - - .layout-editor > .layout-canvas-wrapper { - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; - background-color: #f3f4f5; - border: 1px solid #e4e5e6; - } - - .layout-editor > .layout-canvas-wrapper > .layout-toolbar-container { - display: none; - margin: 12px 12px 0; - min-height: 71px; - } - - .layout-editor > .layout-canvas-wrapper > .layout-toolbar-container > .mce-panel { - width: 100% !important; - } - - .layout-editor > .layout-canvas-wrapper .layout-content > .layout-element-wrapper .layout-content-markup > .layout-placeholder { - border: 1px dashed #ccc; - padding: 0.2em 0.4em; - background: #e8e8e8; - } - - .layout-editor .layout-snippet { - background: #e8e8e8; - } - .layout-editor-help-dialog { - display: none; + display: none; +} +.layout-editor-help-dialog .help-row:before, +.layout-editor-help-dialog .help-row:after { + content: " "; + display: table; +} +.layout-editor-help-dialog .help-row:after { + clear: both; +} +.layout-editor-help-dialog .help-row > .help-column-full, +.layout-editor-help-dialog .help-row > .help-column-half { + margin: 0.5em 0; +} +.layout-editor-help-dialog .help-row > .help-column-half { + box-sizing: border-box; + float: left; + width: 50%; +} +.layout-editor-help-dialog .help-row > .help-column-half:nth-child(2n) { + padding-right: 10px; + clear: left; +} +.layout-editor-help-dialog .help-row + .help-row { + margin-top: 1em; +} +.layout-editor-help-dialog code { + border-radius: 4px; + background-color: #f3f4f5; + padding: 2px 4px; + font-family: monospace; +} +.layout-editor-help-dialog p { + margin-bottom: 0.5em; + line-height: 1.6em; +} +.layout-editor-help-dialog table > tbody > tr > td:first-child { + padding-right: 10px; } - - .layout-editor-help-dialog .help-row:before, - .layout-editor-help-dialog .help-row:after { - content: " "; - display: table; - } - - .layout-editor-help-dialog .help-row:after { - clear: both; - } - - .layout-editor-help-dialog .help-row > .help-column-full, - .layout-editor-help-dialog .help-row > .help-column-half { - margin: 0.5em 0; - } - - .layout-editor-help-dialog .help-row > .help-column-half { - box-sizing: border-box; - float: left; - width: 50%; - } - - .layout-editor-help-dialog .help-row > .help-column-half:nth-child(2n) { - padding-right: 10px; - clear: left; - } - - .layout-editor-help-dialog .help-row + .help-row { - margin-top: 1em; - } - - .layout-editor-help-dialog code { - border-radius: 4px; - background-color: #f3f4f5; - padding: 2px 4px; - font-family: monospace; - } - - .layout-editor-help-dialog p { - margin-bottom: 0.5em; - line-height: 1.6em; - } - - .layout-editor-help-dialog table > tbody > tr > td:first-child { - padding-right: 10px; - } .layout-editor .layout-element { - position: relative; - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - padding: 0; + position: relative; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + padding: 0; +} +.layout-editor .layout-element:not(.layout-column) { + margin-left: 0; +} +.layout-editor .layout-element > .layout-element-wrapper > .layout-panel { + display: none; + position: absolute; + margin: 0; + z-index: 20; + height: 25px; + padding: 0 6px; + list-style: none; + white-space: nowrap; + line-height: 25px; + vertical-align: middle; +} +.layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-item { + display: inline-block; + height: 25px; + padding: 1px 6px 0; +} +.layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-label { + font-size: 13px; +} +.layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-action { + display: none; + width: 28px; + cursor: pointer; + text-align: center; +} +.layout-editor .layout-element > .layout-element-wrapper > .layout-panel-main { + top: -27px; + left: -2px; } - - .layout-editor .layout-element:not(.layout-column) { - margin-left: 0; - } - - .layout-editor .layout-element > .layout-element-wrapper > .layout-panel { - display: none; - position: absolute; - margin: 0; - z-index: 20; - height: 25px; - padding: 0 6px; - list-style: none; - white-space: nowrap; - line-height: 25px; - vertical-align: middle; - } - - .layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-item { - display: inline-block; - height: 25px; - padding: 1px 6px 0; - } - - .layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-label { - font-size: 13px; - } - - .layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-action { - display: none; - width: 28px; - cursor: pointer; - text-align: center; - } - - .layout-editor .layout-element > .layout-element-wrapper > .layout-panel-main { - top: -27px; - left: -2px; - } - .layout-editor li.layout-element { - list-style: none; + list-style: none; } - .layout-editor:not(.layout-editor-dragging) .layout-element-active, .layout-editor:not(.layout-editor-dragging) .layout-element-focused { - border-width: 2px; - border-style: solid; + border-width: 2px; + border-style: solid; +} +.layout-editor:not(.layout-editor-dragging) .layout-element-active > .layout-element-wrapper, +.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper { + margin: -2px; } - - .layout-editor:not(.layout-editor-dragging) .layout-element-active > .layout-element-wrapper, - .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper { - margin: -2px; - } - .layout-editor:not(.layout-editor-dragging) .layout-element-active { - border-color: rgba(104, 104, 104, 0.1); + border-color: rgba(104, 104, 104, 0.1); +} +.layout-editor:not(.layout-editor-dragging) .layout-element-active > .layout-element-wrapper > .layout-panel-main { + display: block; + z-index: 30; + background-color: rgba(104, 104, 104, 0.1); } - - .layout-editor:not(.layout-editor-dragging) .layout-element-active > .layout-element-wrapper > .layout-panel-main { - display: block; - z-index: 30; - background-color: rgba(104, 104, 104, 0.1); - } - .layout-editor:not(.layout-editor-dragging) .layout-element-focused { - border-color: #648721; + border-color: #648721; +} +.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel { + display: block; + background-color: #648721; + color: #fefefe; +} +.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action { + display: inline-block; +} +.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action:hover { + background-color: #82b02b; +} +.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.disabled { + cursor: default; + color: rgba(254, 254, 254, 0.4); +} +.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.disabled:hover { + background-color: #648721; +} +.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.active { + color: #deff42; + background-color: #739b26; +} +.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.active:hover { + background-color: #82b02b; } - - .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel { - display: block; - background-color: #648721; - color: #fefefe; - } - - .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action { - display: inline-block; - } - - .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action:hover { - background-color: #82b02b; - } - - .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.disabled { - cursor: default; - color: rgba(254, 254, 254, 0.4); - } - - .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.disabled:hover { - background-color: #648721; - } - - .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.active { - color: #deff42; - background-color: #739b26; - } - - .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.active:hover { - background-color: #82b02b; - } - .layout-editor:not(.layout-editor-dragging) .layout-element-selected { - background-color: rgba(100, 135, 33, 0.08); + background-color: rgba(100, 135, 33, 0.08); } - .layout-editor .ui-sortable-placeholder { - display: none; + display: none; } - .layout-editor .layout-element-droptarget { - box-shadow: inset 0 0 12px 6px rgba(100, 135, 33, 0.5); + box-shadow: inset 0 0 12px 6px rgba(100, 135, 33, 0.5); +} +.layout-editor .layout-element-droptarget .ui-sortable-placeholder { + display: block; + visibility: visible !important; + min-height: 78px; + border: 2px dashed #648721 !important; + background-color: rgba(100, 135, 33, 0.16); } - - .layout-editor .layout-element-droptarget .ui-sortable-placeholder { - display: block; - visibility: visible !important; - min-height: 78px; - border: 2px dashed #648721 !important; - background-color: rgba(100, 135, 33, 0.16); - } - .layout-editor .media-thumbnail img { - max-width: 100%; - max-height: 100%; + max-width: 100%; + max-height: 100%; } .layout-editor .layout-container > .layout-element-wrapper > .layout-container-children-placeholder { - display: none; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - margin: 11px; - min-height: 80px; - border: 1px dashed rgba(124, 124, 124, 0.4); - border-radius: 4px; - padding: 12px; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - font-size: 13px; - font-style: italic; - opacity: 0.6; - text-align: center; + display: none; + -ms-flex-direction: column; + flex-direction: column; + margin: 11px; + min-height: 80px; + border: 1px dashed rgba(124, 124, 124, 0.4); + border-radius: 4px; + padding: 12px; + -ms-flex-pack: center; + justify-content: center; + font-size: 13px; + font-style: italic; + opacity: 0.6; + text-align: center; } - .layout-editor .layout-container > .layout-element-wrapper > .layout-children { - padding: 12px; + padding: 12px; +} +.layout-editor .layout-container > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-container) + .layout-element:not(.layout-container) { + margin-top: 12px; +} +.layout-editor .layout-container > .layout-element-wrapper > .layout-children > .ui-sortable-helper:first-child + .layout-element:not(.layout-container) { + margin-top: 0; } - - .layout-editor .layout-container > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-container) + .layout-element:not(.layout-container) { - margin-top: 12px; - } - - .layout-editor .layout-container > .layout-element-wrapper > .layout-children > .ui-sortable-helper:first-child + .layout-element:not(.layout-container) { - margin-top: 0; - } - .layout-editor .layout-container > .layout-element-wrapper.layout-container-empty > .layout-container-children-placeholder { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; + display: -ms-flexbox; + display: flex; } - .layout-editor .layout-container > .layout-element-wrapper.layout-container-empty > .layout-children { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; } - .layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) { - border: 1px dashed rgba(124, 124, 124, 0.6); + border: 1px dashed rgba(124, 124, 124, 0.6); +} +.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) > .layout-element-wrapper { + margin: -1px; } - - .layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) > .layout-element-wrapper { - margin: -1px; - } - .layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-container + .layout-container:not(.layout-element-active) { - border-top: 0; + border-top: 0; +} +.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-container + .layout-container:not(.layout-element-active) > .layout-element-wrapper { + margin-top: 0; } - - .layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-container + .layout-container:not(.layout-element-active) > .layout-element-wrapper { - margin-top: 0; - } .layout-editor .layout-canvas #dummy { - display: none; + display: none; } .layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) { - border-top: 1px dashed rgba(124, 124, 124, 0.6) !important; + border-top: 1px dashed rgba(124, 124, 124, 0.6) !important; +} +.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) > .layout-element-wrapper { + margin-top: -1px !important; } - - .layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) > .layout-element-wrapper { - margin-top: -1px !important; - } - .layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element + .layout-element:not(.layout-element-active) { - border-left: 0 !important; + border-left: 0 !important; +} +.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element + .layout-element:not(.layout-element-active) > .layout-element-wrapper { + margin-left: 0 !important; } - - .layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element + .layout-element:not(.layout-element-active) > .layout-element-wrapper { - margin-left: 0 !important; - } .layout-editor .layout-column > .layout-element-wrapper > .layout-column-resize-bar { - display: none; - position: absolute; - z-index: 30; - top: 0; - width: 16px; - height: 100%; - cursor: col-resize; + display: none; + position: absolute; + z-index: 30; + top: 0; + width: 16px; + height: 100%; + cursor: col-resize; } - .layout-editor .layout-column > .layout-element-wrapper > .layout-column-resize-bar-left { - left: -6px; + left: -6px; } - .layout-editor .layout-column > .layout-element-wrapper > .layout-column-resize-bar-right { - right: -6px; + right: -6px; } - .layout-editor .layout-column.layout-element-focused > .layout-element-wrapper > .layout-column-resize-bar { - display: block; + display: block; } .layout-editor .layout-content, .layout-editor .layout-html { - min-height: 1em; + min-height: 1em; } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup { - padding: 2px; - overflow-x: hidden; - line-height: normal; - /* this color is just a suggestion and can be changed based on implementation feedback */ - /* this also has bidi implications */ - /* this also has bidi implications */ - /* LTR-specific: use 'margin-right' for rtl elements */ - /* LTR-specific: use 'padding-right' for rtl elements */ - /*table[rules=none i], table[rules=groups i], table[rules=rows i], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup { + padding: 2px; + overflow-x: hidden; + line-height: normal; + /* this color is just a suggestion and can be changed based on implementation feedback */ + /* this also has bidi implications */ + /* this also has bidi implications */ + /* LTR-specific: use 'margin-right' for rtl elements */ + /* LTR-specific: use 'padding-right' for rtl elements */ + /*table[rules=none i], table[rules=groups i], table[rules=rows i], table[rules=cols i], table[rules=all i], table[frame=void i], table[frame=above i], table[frame=below i], table[frame=hsides i], table[frame=lhs i], table[frame=rhs i], table[frame=vsides i], @@ -409,911 +324,819 @@ table[rules=cols i] > tfoot > tr > td, table[rules=cols i] > tfoot > tr > th, table[rules=all i] > tfoot > tr > td, table[rules=all i] > tfoot > tr > th { border-color: black; }*/ - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup *, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup * { - margin: 0; - padding: 0; - box-sizing: content-box; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup address, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup address, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup center, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup center, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup div, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup div, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figcaption, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figcaption, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup footer, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup footer, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup form, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup form, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup header, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup header, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hr, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup legend, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup legend, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup p, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup p, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { - display: block; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup p, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup p, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { - margin-top: 1em; - margin-bottom: 1em; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure { - margin-left: 40px; - margin-right: 40px; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup address, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup address { - font-style: italic; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { - font-family: monospace; - white-space: pre; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup cite, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup cite, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dfn, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dfn, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup em, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup em, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup i, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup i, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup var, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup var { - font-style: italic; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup b, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup b, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup strong, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup strong { - font-weight: bolder; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup code, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup code, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup kbd, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup kbd, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup samp, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup samp, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tt, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tt { - font-family: monospace; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup big, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup big { - font-size: larger; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup small, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup small { - font-size: smaller; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sub, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sub { - vertical-align: sub; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sup, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sup { - vertical-align: super; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sub, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sub, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sup, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sup { - line-height: normal; - font-size: smaller; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ruby, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ruby { - display: ruby; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rb, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rb { - display: ruby-base; - white-space: nowrap; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rt, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rt { - display: ruby-text; - white-space: nowrap; - font-size: 50%; - font-variant-east-asian: ruby; - -webkit-text-emphasis: none; - text-emphasis: none; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rbc, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rbc { - display: ruby-base-container; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rtc, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rtc { - display: ruby-text-container; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ruby, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ruby, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rb, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rb, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rt, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rt, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rbc, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rbc, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rtc, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rtc { - unicode-bidi: isolate; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :link, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :link { - color: #0000EE; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :visited, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :visited { - color: #551A8B; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :link, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :link, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :visited, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :visited { - text-decoration: underline; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup a:link[rel~=help], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup a:link[rel~=help], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup a:visited[rel~=help], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup a:visited[rel~=help], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup area:link[rel~=help], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup area:link[rel~=help], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup area:visited[rel~=help], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup area:visited[rel~=help] { - cursor: help; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :focus, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :focus { - outline: auto; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup mark, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup mark { - background: yellow; - color: black; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup abbr[title], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup abbr[title], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup acronym[title], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup acronym[title] { - text-decoration: dotted underline; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ins, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ins, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup u, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup u { - text-decoration: underline; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup del, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup del, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup s, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup s, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup strike, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup strike { - text-decoration: line-through; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blink, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blink { - text-decoration: blink; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup q::before, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup q::before { - content: open-quote; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup q::after, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup q::after { - content: close-quote; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup br::before, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup br::before { - content: '\A'; - white-space: pre; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nobr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nobr { - white-space: nowrap; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup wbr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup wbr { - content: '\200B'; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nobr wbr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nobr wbr { - white-space: normal; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup article, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup article, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup aside, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup aside, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h1, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h1, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h2, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h2, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h3, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h3, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h4, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h4, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h5, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h5, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h6, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h6, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hgroup, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hgroup, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nav, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nav, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup section, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup section { - display: block; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h1, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h1 { - margin-top: 0.67em; - margin-bottom: 0.67em; - font-size: 2.00em; - font-weight: bold; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h2, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h2 { - margin-top: 0.83em; - margin-bottom: 0.83em; - font-size: 1.50em; - font-weight: bold; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h3, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h3 { - margin-top: 1.00em; - margin-bottom: 1.00em; - font-size: 1.17em; - font-weight: bold; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h4, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h4 { - margin-top: 1.33em; - margin-bottom: 1.33em; - font-size: 1.00em; - font-weight: bold; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h5, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h5 { - margin-top: 1.67em; - margin-bottom: 1.67em; - font-size: 0.83em; - font-weight: bold; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h6, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h6 { - margin-top: 2.33em; - margin-bottom: 2.33em; - font-size: 0.67em; - font-weight: bold; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dd, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dd, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dt, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dt, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { - display: block; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup li, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup li { - display: list-item; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { - margin-top: 1em; - margin-bottom: 1em; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dl, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dl, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl dl, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl dl, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl ol, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl ol, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dl, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dl, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dl, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dl, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul { - margin-top: 0; - margin-bottom: 0; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dd, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dd { - margin-left: 40px; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { - padding-left: 40px; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol { - list-style-type: decimal; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { - list-style-type: disc; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul { - list-style-type: circle; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul ul { - list-style-type: square; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table { - display: table; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup caption, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup caption { - display: table-caption; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup[hidden] { - display: table-column-group; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col[hidden] { - display: table-column; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead[hidden] { - display: table-header-group; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody[hidden] { - display: table-row-group; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot[hidden] { - display: table-footer-group; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr[hidden] { - display: table-row; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td[hidden], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th[hidden] { - display: table-cell; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup[hidden], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col[hidden], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead[hidden], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody[hidden], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot[hidden], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr[hidden], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td[hidden], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th[hidden] { - visibility: collapse; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table { - box-sizing: border-box; - border-spacing: 2px; - border-collapse: separate; - text-indent: initial; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { - padding: 1px; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { - font-weight: bold; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table > tr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table > tr { - vertical-align: middle; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { - vertical-align: inherit; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { - border-color: gray; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr { - border-color: inherit; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup select, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup select, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup option, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup option, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup optgroup, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup optgroup, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup textarea, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup textarea, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup keygen, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup keygen { - text-indent: initial; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup textarea, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup textarea { - white-space: pre-wrap; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="radio"], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="radio"], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="checkbox"], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="checkbox"], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="reset"], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="reset"], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="button"], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="button"], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="submit"], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="submit"], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup select, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup select, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button { - box-sizing: border-box; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="button"], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="button"], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button { - padding: 0.3em 0.5em; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hr { - color: gray; - border-style: inset; - border-width: 1px; - margin: 0.5em auto; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup fieldset, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup fieldset { - margin-left: 2px; - margin-right: 2px; - border: groove 2px ThreeDFace; - padding: 0.35em 0.625em 0.75em; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup legend, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup legend { - padding-left: 2px; - padding-right: 2px; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup > *:first-child, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup > *:first-child { - margin-top: 0 !important; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup > *:last-child, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup > *:last-child { - margin-bottom: 0 !important; - } - - .layout-editor .layout-content.layout-content-image > .layout-element-wrapper > .layout-content-markup > img, - .layout-editor .layout-html.layout-content-image > .layout-element-wrapper > .layout-content-markup > img, - .layout-editor .layout-content.layout-content-vector-image > .layout-element-wrapper > .layout-content-markup > img, - .layout-editor .layout-html.layout-content-vector-image > .layout-element-wrapper > .layout-content-markup > img { - display: block; - width: 100%; - max-width: 100%; - height: auto; - } - +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup *, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup * { + margin: 0; + padding: 0; + box-sizing: content-box; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup address, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup address, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup center, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup center, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup div, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup div, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figcaption, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figcaption, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup footer, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup footer, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup form, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup form, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup header, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup header, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hr, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup legend, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup legend, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup p, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup p, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { + display: block; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup p, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup p, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { + margin-top: 1em; + margin-bottom: 1em; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure { + margin-left: 40px; + margin-right: 40px; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup address, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup address { + font-style: italic; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { + font-family: monospace; + white-space: pre; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup cite, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup cite, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dfn, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dfn, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup em, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup em, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup i, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup i, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup var, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup var { + font-style: italic; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup b, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup b, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup strong, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup strong { + font-weight: bolder; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup code, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup code, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup kbd, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup kbd, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup samp, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup samp, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tt, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tt { + font-family: monospace; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup big, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup big { + font-size: larger; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup small, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup small { + font-size: smaller; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sub, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sub { + vertical-align: sub; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sup, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sup { + vertical-align: super; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sub, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sub, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sup, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sup { + line-height: normal; + font-size: smaller; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ruby, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ruby { + display: ruby; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rb, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rb { + display: ruby-base; + white-space: nowrap; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rt, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rt { + display: ruby-text; + white-space: nowrap; + font-size: 50%; + font-variant-east-asian: ruby; + text-emphasis: none; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rbc, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rbc { + display: ruby-base-container; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rtc, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rtc { + display: ruby-text-container; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ruby, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ruby, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rb, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rb, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rt, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rt, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rbc, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rbc, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rtc, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rtc { + unicode-bidi: isolate; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :link, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :link { + color: #0000EE; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :visited, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :visited { + color: #551A8B; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :link, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :link, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :visited, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :visited { + text-decoration: underline; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup a:link[rel~=help], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup a:link[rel~=help], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup a:visited[rel~=help], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup a:visited[rel~=help], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup area:link[rel~=help], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup area:link[rel~=help], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup area:visited[rel~=help], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup area:visited[rel~=help] { + cursor: help; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :focus, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :focus { + outline: auto; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup mark, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup mark { + background: yellow; + color: black; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup abbr[title], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup abbr[title], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup acronym[title], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup acronym[title] { + text-decoration: dotted underline; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ins, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ins, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup u, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup u { + text-decoration: underline; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup del, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup del, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup s, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup s, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup strike, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup strike { + text-decoration: line-through; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blink, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blink { + text-decoration: blink; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup q::before, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup q::before { + content: open-quote; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup q::after, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup q::after { + content: close-quote; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup br::before, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup br::before { + content: '\A'; + white-space: pre; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nobr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nobr { + white-space: nowrap; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup wbr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup wbr { + content: '\200B'; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nobr wbr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nobr wbr { + white-space: normal; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup article, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup article, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup aside, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup aside, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h1, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h1, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h2, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h2, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h3, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h3, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h4, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h4, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h5, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h5, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h6, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h6, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hgroup, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hgroup, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nav, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nav, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup section, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup section { + display: block; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h1, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h1 { + margin-top: 0.67em; + margin-bottom: 0.67em; + font-size: 2.00em; + font-weight: bold; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h2, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h2 { + margin-top: 0.83em; + margin-bottom: 0.83em; + font-size: 1.50em; + font-weight: bold; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h3, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h3 { + margin-top: 1.00em; + margin-bottom: 1.00em; + font-size: 1.17em; + font-weight: bold; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h4, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h4 { + margin-top: 1.33em; + margin-bottom: 1.33em; + font-size: 1.00em; + font-weight: bold; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h5, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h5 { + margin-top: 1.67em; + margin-bottom: 1.67em; + font-size: 0.83em; + font-weight: bold; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h6, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h6 { + margin-top: 2.33em; + margin-bottom: 2.33em; + font-size: 0.67em; + font-weight: bold; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dd, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dd, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dt, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dt, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { + display: block; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup li, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup li { + display: list-item; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { + margin-top: 1em; + margin-bottom: 1em; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dl, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dl, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl dl, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl dl, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl ol, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl ol, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dl, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dl, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dl, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dl, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul { + margin-top: 0; + margin-bottom: 0; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dd, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dd { + margin-left: 40px; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { + padding-left: 40px; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol { + list-style-type: decimal; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { + list-style-type: disc; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul { + list-style-type: circle; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul ul { + list-style-type: square; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table { + display: table; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup caption, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup caption { + display: table-caption; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup[hidden] { + display: table-column-group; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col[hidden] { + display: table-column; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead[hidden] { + display: table-header-group; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody[hidden] { + display: table-row-group; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot[hidden] { + display: table-footer-group; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr[hidden] { + display: table-row; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td[hidden], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th[hidden] { + display: table-cell; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup[hidden], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col[hidden], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead[hidden], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody[hidden], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot[hidden], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr[hidden], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td[hidden], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th[hidden] { + visibility: collapse; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table { + box-sizing: border-box; + border-spacing: 2px; + border-collapse: separate; + text-indent: initial; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { + padding: 1px; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { + font-weight: bold; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table > tr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table > tr { + vertical-align: middle; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { + vertical-align: inherit; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { + border-color: gray; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr { + border-color: inherit; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup select, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup select, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup option, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup option, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup optgroup, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup optgroup, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup textarea, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup textarea, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup keygen, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup keygen { + text-indent: initial; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup textarea, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup textarea { + white-space: pre-wrap; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="radio"], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="radio"], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="checkbox"], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="checkbox"], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="reset"], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="reset"], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="button"], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="button"], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="submit"], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="submit"], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup select, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup select, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button { + box-sizing: border-box; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="button"], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="button"], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button { + padding: 0.3em 0.5em; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hr { + color: gray; + border-style: inset; + border-width: 1px; + margin: 0.5em auto; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup fieldset, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup fieldset { + margin-left: 2px; + margin-right: 2px; + border: groove 2px ThreeDFace; + padding: 0.35em 0.625em 0.75em; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup legend, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup legend { + padding-left: 2px; + padding-right: 2px; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup > *:first-child, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup > *:first-child { + margin-top: 0 !important; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup > *:last-child, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup > *:last-child { + margin-bottom: 0 !important; +} +.layout-editor .layout-content.layout-content-image > .layout-element-wrapper > .layout-content-markup > img, +.layout-editor .layout-html.layout-content-image > .layout-element-wrapper > .layout-content-markup > img, +.layout-editor .layout-content.layout-content-vector-image > .layout-element-wrapper > .layout-content-markup > img, +.layout-editor .layout-html.layout-content-vector-image > .layout-element-wrapper > .layout-content-markup > img { + display: block; + width: 100%; + max-width: 100%; + height: auto; +} .layout-editor .img-responsive, .layout-editor .img-responsive img { - display: block; - width: 100%; - max-width: 100%; - height: auto; + display: block; + width: 100%; + max-width: 100%; + height: auto; } +body .layout-toolbox-item { + border: 1px solid #e4e5e6; + background-color: #fff; + padding: 9px 12px; + cursor: default; + list-style-type: none; +} +body .layout-toolbox-item i { + display: inline-block; + width: 16px; + font: normal normal normal 14px/1 FontAwesome; +} +body .layout-toolbox-item + .layout-toolbox-item { + margin-top: 4px; +} .layout-editor > .layout-toolbox-wrapper { - margin-left: 12px; - width: 218px; - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; - max-height: calc(100vh - 80px); - overflow-x: clip; - overflow-y: auto; - position: -webkit-sticky; - position: sticky; - top: 0; + margin-left: 12px; + width: 218px; + -ms-flex-negative: 0; + flex-shrink: 0; + /* forcing the toolbox height to be smaller than the viewport height + so it is always visible and scrollable*/ + max-height: calc(20vh); + overflow-x: clip; + overflow-y: auto; + /* forcing the toolbox to stay sticked at the the top of its container */ + position: sticky; + top: 0; +} +.layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar { + width: 2px; +} +.layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px #000000; + border-radius: 1px; +} +.layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, 0.3); +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox { + border: 1px solid #e4e5e6; + width: 220px; + min-height: 400px; + padding: 6px; + background-color: #f3f4f5; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox.sticky-top { + position: fixed; + top: 0; + max-height: 100%; + overflow-y: auto; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox.sticky-bottom { + position: absolute; + bottom: 0; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group { + margin-top: 12px; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading { + display: block; + margin-bottom: 4px; + text-decoration: none; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading:before { + display: inline-block; + width: 10px; + margin-right: 4px; + font: normal normal normal 14px/1 FontAwesome; + text-align: center; + content: "\f0d7"; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-group-heading:before { + content: "\f0da"; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-items { + display: none; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-section + .layout-toolbox-section { + margin-top: 4px; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item { + border: 1px solid #e4e5e6; + background-color: #fff; + padding: 9px 12px; + cursor: default; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item i { + display: inline-block; + width: 16px; + font: normal normal normal 14px/1 FontAwesome; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item + .layout-toolbox-item { + margin-top: 4px; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group + .layout-toolbox-group { + margin-top: 6px; } - - .layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar { - width: 2px; - } - - .layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar-track { - -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); - border-radius: 1px; - } - - .layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar-thumb { - background-color: rgba(0,0,0,0.3); - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox { - border: 1px solid #e4e5e6; - width: 220px; - min-height: 400px; - padding: 6px; - background-color: #f3f4f5; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox.sticky-top { - position: fixed; - top: 0; - max-height: 100%; - overflow-y: auto; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox.sticky-bottom { - position: absolute; - bottom: 0; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group { - margin-top: 12px; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading { - display: block; - margin-bottom: 4px; - text-decoration: none; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading:before { - display: inline-block; - width: 10px; - margin-right: 4px; - font: normal normal normal 14px/1 FontAwesome; - text-align: center; - content: "\f0d7"; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-group-heading:before { - content: "\f0da"; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-items { - display: none; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-section + .layout-toolbox-section { - margin-top: 4px; - } - - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item { - border: 1px solid #e4e5e6; - background-color: #fff; - padding: 9px 12px; - cursor: default; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item i { - display: inline-block; - width: 16px; - font: normal normal normal 14px/1 FontAwesome; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item + .layout-toolbox-item { - margin-top: 4px; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group + .layout-toolbox-group { - margin-top: 6px; - } .layout-editor .layout-popup { - display: none; - position: absolute; - margin: 0; - box-shadow: 3px 3px 11px 0 rgba(50, 50, 50, 0.5); - border: 1px solid #e4e5e6; - padding: 2px 0; - background-color: #f7f7f7; - list-style: none; - z-index: 20; - color: #7c7c7c; - text-align: left; - cursor: default; - white-space: nowrap; - line-height: normal; - min-width: 300px; + display: none; + position: absolute; + margin: 0; + box-shadow: 3px 3px 11px 0 rgba(50, 50, 50, 0.5); + border: 1px solid #e4e5e6; + padding: 2px 0; + background-color: #f7f7f7; + list-style: none; + z-index: 20; + color: #7c7c7c; + text-align: left; + cursor: default; + white-space: nowrap; + line-height: normal; + min-width: 300px; +} +.layout-editor .layout-popup.wide { + width: 600px; +} +.layout-editor .layout-popup .layout-popup-flex { + display: -ms-flexbox; + display: flex; + padding: 2px 5px; +} +.layout-editor .layout-popup .layout-popup-flex .layout-popup-column + .layout-popup-column { + margin-left: 4px; + border-left: 1px solid rgba(128, 128, 128, 0.15); + padding-left: 4px; +} +.layout-editor .layout-popup .layout-popup-item { + padding: 4px 6px; +} +.layout-editor .layout-popup .layout-popup-label { + font-size: 0.9em; + font-weight: bold; + color: #7c7c7c; +} +.layout-editor .layout-popup .layout-popup-action:hover { + background-color: #f3f4f5; + cursor: pointer; +} +.layout-editor .layout-popup .layout-popup-input input[type='text'], +.layout-editor .layout-popup .layout-popup-input textarea { + width: 100%; +} +.layout-editor .layout-popup .layout-popup-input > label { + display: block; + font-size: 0.9em; } - .layout-editor .layout-popup.wide { - width: 600px; - } - - .layout-editor .layout-popup .layout-popup-flex { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - padding: 2px 5px; - } - - .layout-editor .layout-popup .layout-popup-flex .layout-popup-column + .layout-popup-column { - margin-left: 4px; - border-left: 1px solid rgba(128, 128, 128, 0.15); - padding-left: 4px; - } - - .layout-editor .layout-popup .layout-popup-item { - padding: 4px 6px; - } - - .layout-editor .layout-popup .layout-popup-label { - font-size: 0.9em; - font-weight: bold; - color: #7c7c7c; - } - - .layout-editor .layout-popup .layout-popup-action:hover { - background-color: #f3f4f5; - cursor: pointer; - } - - .layout-editor .layout-popup .layout-popup-input input[type='text'], - .layout-editor .layout-popup .layout-popup-input textarea { - width: 100%; - } - - .layout-editor .layout-popup .layout-popup-input > label { - display: block; - font-size: 0.9em; - } - -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxheW91dEVkaXRvci5jc3MiLCJFZGl0b3IubGVzcyIsIkVsZW1lbnQubGVzcyIsIkNvbnRhaW5lci5sZXNzIiwiQ2FudmFzLmxlc3MiLCJSb3cubGVzcyIsIkNvbHVtbi5sZXNzIiwiQ29udGVudC5sZXNzIiwiUmVzZXQubGVzcyIsIlRvb2xib3gubGVzcyIsIlBvcHVwLmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFDSEE7RUFDSSxzQkFBQTtFQUFBLHFCQUFBO0VBQUEsY0FBQTtFQUNBLHVDQUFBO01BQUEsdUJBQUE7VUFBQSwrQkFBQTtFQUNBLG1CQUFBO0VBQ0EsVUFBQTtDRERIO0FDSEQ7RUFPUSxzQkFBQTtFQUFBLHFCQUFBO0VBQUEsY0FBQTtDRERQO0FDTkQ7RUFVWSxrQkFBQTtDRERYO0FDTUQ7RUFDSSxzQkFBQTtFQUFBLHFCQUFBO0VBQUEsY0FBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSw2QkFBQTtNQUFBLHdCQUFBO1VBQUEscUJBQUE7Q0RKSDtBQ0FEO0VBT1EscUJBQUE7TUFBQSxxQkFBQTtVQUFBLGFBQUE7RUFDQSwwQkFBQTtFQUNBLDBCQUFBO0NESlA7QUNMRDtFQVlZLGNBQUE7RUFDQSxvQkFBQTtFQUNBLGlCQUFBO0NESlg7QUNWRDtFQWlCZ0IsdUJBQUE7Q0RKZjtBQ2JEO0VBc0JZLHdCQUFBO0VBQ0EscUJBQUE7RUFDQSxvQkFBQTtDRE5YO0FDbEJEO0VBNkJRLG9CQUFBO0NEUlA7QUNZRDtFQUNJLGNBQUE7Q0RWSDtBQ2FPOztFQUNJLGFBQUE7RUFDQSxlQUFBO0NEVlg7QUNhTztFQUNJLFlBQUE7Q0RYWDtBQ0NEOztFQWNZLGdCQUFBO0NEWFg7QUNIRDtFQWtCWSx1QkFBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0NEWlg7QUNjVztFQUNJLG9CQUFBO0VBQ0EsWUFBQTtDRFpmO0FDWkQ7RUE2QlksZ0JBQUE7Q0RkWDtBQ2ZEO0VBa0NRLG1CQUFBO0VBQ0EsMEJBQUE7RUFDQSxpQkFBQTtFQUNBLHVCQUFBO0NEaEJQO0FDckJEO0VBeUNRLHFCQUFBO0VBQ0EsbUJBQUE7Q0RqQlA7QUN6QkQ7RUE4Q1Esb0JBQUE7Q0RsQlA7O0FFNUVEO0VBRVEsbUJBQUE7RUFDQSxjQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLFdBQUE7Q0Y4RVA7QUUzRU87RUFDSSxlQUFBO0NGNkVYO0FFdkZEO0VBZWdCLGNBQUE7RUFDQSxtQkFBQTtFQUNBLFVBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0Esa0JBQUE7RUFDQSx1QkFBQTtDRjJFZjtBRW5HRDtFQTJCb0Isc0JBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7Q0YyRW5CO0FFeEdEO0VBaUNvQixnQkFBQTtDRjBFbkI7QUUzR0Q7RUFxQ29CLGNBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxtQkFBQTtDRnlFbkI7QUVqSEQ7RUE2Q2dCLFdBQUE7RUFDQSxXQUFBO0NGdUVmO0FFckhEO0VBcURRLGlCQUFBO0NGbUVQO0FFaEVHOztFQUdRLGtCQUFBO0VBQ0Esb0JBQUE7Q0ZpRVg7QUVyRUc7O0VBT1ksYUFBQTtDRmtFZjtBRXpFRztFQWNRLHVDQUFBO0NGOERYO0FFNUVHO0VBaUJZLGVBQUE7RUFDQSxZQUFBO0VBQ0EsMkNBQUE7Q0Y4RGY7QUVqRkc7RUEyQlEsc0JBQUE7Q0Z5RFg7QUVwRkc7RUE4QlksZUFBQTtFQUNBLDBCQUFBO0VBQ0EsZUFBQTtDRnlEZjtBRXpGRztFQW1DZ0Isc0JBQUE7Q0Z5RG5CO0FFeERtQjtFQUNJLDBCQUFBO0NGMER2QjtBRXZEbUI7RUFDSSxnQkFBQTtFQUNBLGdDQUFBO0NGeUR2QjtBRXZEdUI7RUFDSSwwQkFBQTtDRnlEM0I7QUVyRG1CO0VBQ0ksZUFBQTtFQUNBLDBCQUFBO0NGdUR2QjtBRXJEdUI7RUFDSSwwQkFBQTtDRnVEM0I7QUU3R0c7RUErRFEsMkNBQUE7Q0ZpRFg7QUV4S0Q7RUE0SFEsY0FBQTtDRitDUDtBRTNLRDtFQWlJUSx1REFBQTtDRjZDUDtBRTlLRDtFQW9JWSxlQUFBO0VBQ0EsK0JBQUE7RUFDQSxpQkFBQTtFQUNBLHNDQUFBO0VBQ0EsMkNBQUE7Q0Y2Q1g7QUVyTEQ7RUErSVksZ0JBQUE7RUFDQSxpQkFBQTtDRnlDWDs7QUd6TEQ7RUFNZ0IsY0FBQTtFQUNBLCtCQUFBO01BQUEsMkJBQUE7VUFBQSx1QkFBQTtFQUNBLGFBQUE7RUFDQSxpQkFBQTtFQUNBLDRDQUFBO0VBQ0EsbUJBQUE7RUFDQSxjQUFBO0VBQ0EsZ0NBQUE7TUFBQSxzQkFBQTtVQUFBLHdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxtQkFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtDSHVMZjtBR3hNRDtFQXFCZ0IsY0FBQTtDSHNMZjtBRzNNRDtFQXlCb0IsaUJBQUE7Q0hxTG5CO0FHOU1EO0VBOEJvQixjQUFBO0NIbUxuQjtBRy9LVztFQUVRLHNCQUFBO0VBQUEscUJBQUE7RUFBQSxjQUFBO0NIZ0xuQjtBR2xMVztFQU1RLG1CQUFBO0VBQ0EsT0FBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0VBQ0EsUUFBQTtDSCtLbkI7QUd6S0c7RUFHWSw0Q0FBQTtDSHlLZjtBRzVLRztFQU1nQixhQUFBO0NIeUtuQjtBRy9LRztFQVdZLGNBQUE7Q0h1S2Y7QUdsTEc7RUFjZ0IsY0FBQTtDSHVLbkI7O0FJdk9EO0VBR1ksY0FBQTtDSndPWDs7QUt6T087RUFFUSwyREFBQTtDTDJPZjtBSzdPTztFQUlZLDRCQUFBO0NMNE9uQjtBS2hQTztFQVNRLDBCQUFBO0NMME9mO0FLblBPO0VBV1ksMEJBQUE7Q0wyT25COztBTXhQRDtFQUlnQixjQUFBO0VBQ0EsbUJBQUE7RUFDQSxZQUFBO0VBQ0EsT0FBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7Q053UGY7QU1sUUQ7RUFjZ0IsV0FBQTtDTnVQZjtBTXJRRDtFQWtCZ0IsWUFBQTtDTnNQZjtBTWxQTztFQUNJLGVBQUE7Q05vUFg7O0FPMVFEOztFQUVRLGdCQUFBO0NQNlFQO0FPL1FEOztFQU9nQixhQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFUDRRZCx5RkFBeUY7RUFDekYscUNBQXFDO0VBQ3JDLHFDQUFxQztFQUNyQyx1REFBdUQ7RUFDdkQsd0RBQXdEO0VBQ3hEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCQztDQUNGO0FPclREOztFQ0FRLFVBQUE7RUFDQSxXQUFBO0VBQ0Esd0JBQUE7Q1J5VFA7QU8zVEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VDT1EsZUFBQTtDUnNWUDtBTzdWRDs7Ozs7Ozs7Ozs7Ozs7RUNXUSxnQkFBQTtFQUNBLG1CQUFBO0NSa1dQO0FPOVdEOzs7O0VDZ0JRLGtCQUFBO0VBQ0EsbUJBQUE7Q1JvV1A7QU9yWEQ7O0VDcUJRLG1CQUFBO0NSb1dQO0FPelhEOzs7Ozs7OztFQ3lCUSx1QkFBQTtFQUNBLGlCQUFBO0NSMFdQO0FPcFlEOzs7Ozs7Ozs7O0VDOEJRLG1CQUFBO0NSa1hQO0FPaFpEOzs7O0VDa0NRLG9CQUFBO0NSb1hQO0FPdFpEOzs7Ozs7OztFQ3NDUSx1QkFBQTtDUjBYUDtBT2hhRDs7RUMwQ1Esa0JBQUE7Q1IwWFA7QU9wYUQ7O0VDOENRLG1CQUFBO0NSMFhQO0FPeGFEOztFQ2tEUSxvQkFBQTtDUjBYUDtBTzVhRDs7RUNzRFEsc0JBQUE7Q1IwWFA7QU9oYkQ7Ozs7RUMwRFEsb0JBQUE7RUFDQSxtQkFBQTtDUjRYUDtBT3ZiRDs7RUNnRVEsY0FBQTtDUjJYUDtBTzNiRDs7RUNvRVEsbUJBQUE7RUFDQSxvQkFBQTtDUjJYUDtBT2hjRDs7RUN5RVEsbUJBQUE7RUFDQSxvQkFBQTtFQUNBLGVBQUE7RUFDQSw4QkFBQTtFQUNBLDRCQUFBO1VBQUEsb0JBQUE7Q1IyWFA7QU94Y0Q7O0VDaUZRLDZCQUFBO0NSMlhQO0FPNWNEOztFQ3FGUSw2QkFBQTtDUjJYUDtBT2hkRDs7Ozs7Ozs7OztFQ3lGUSxzQkFBQTtDUm1ZUDtBTzVkRDs7RUM4RlEsZUFBQTtDUmtZUDtBT2hlRDs7RUNrR1EsZUFBQTtDUmtZUDtBT3BlRDs7OztFQ3NHUSwyQkFBQTtDUm9ZUDtBTzFlRDs7Ozs7Ozs7RUMyR1EsYUFBQTtDUnlZUDtBT3BmRDs7RUMrR1EsY0FBQTtDUnlZUDtBT3hmRDs7RUNtSFEsbUJBQUE7RUFDQSxhQUFBO0NSeVlQO0FPN2ZEOzs7O0VDd0hRLGtDQUFBO0NSMllQO0FPbmdCRDs7OztFQzRIUSwyQkFBQTtDUjZZUDtBT3pnQkQ7Ozs7OztFQ2dJUSw4QkFBQTtDUmlaUDtBT2poQkQ7O0VDb0lRLHVCQUFBO0NSaVpQO0FPcmhCRDs7RUN3SVEsb0JBQUE7Q1JpWlA7QU96aEJEOztFQzRJUSxxQkFBQTtDUmlaUDtBTzdoQkQ7O0VDZ0pRLGNBQUE7RUFDQSxpQkFBQTtDUmlaUDtBT2xpQkQ7O0VDcUpRLG9CQUFBO0NSaVpQO0FPdGlCRDs7RUN5SlEsaUJBQUE7Q1JpWlA7QU8xaUJEOztFQzZKUSxvQkFBQTtDUmlaUDtBTzlpQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUNpS1EsZUFBQTtDUnFhUDtBT3RrQkQ7O0VDcUtRLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0NScWFQO0FPN2tCRDs7RUM0S1EsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7Q1JxYVA7QU9wbEJEOztFQ21MUSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtDUnFhUDtBTzNsQkQ7O0VDMExRLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0NScWFQO0FPbG1CRDs7RUNpTVEsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7Q1JxYVA7QU96bUJEOztFQ3dNUSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtDUnFhUDtBT2huQkQ7Ozs7Ozs7Ozs7OztFQytNUSxlQUFBO0NSK2FQO0FPOW5CRDs7RUNtTlEsbUJBQUE7Q1IrYVA7QU9sb0JEOzs7Ozs7OztFQ3VOUSxnQkFBQTtFQUNBLG1CQUFBO0NScWJQO0FPN29CRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUMrTlksY0FBQTtFQUNBLGlCQUFBO0NSZ2RYO0FPaHJCRDs7RUNvT1Esa0JBQUE7Q1JnZFA7QU9wckJEOzs7Ozs7RUN3T1EsbUJBQUE7Q1JvZFA7QU81ckJEOztFQzRPUSx5QkFBQTtDUm9kUDtBT2hzQkQ7Ozs7RUNnUFEsc0JBQUE7Q1JzZFA7QU90c0JEOzs7Ozs7Ozs7Ozs7RUNzUFksd0JBQUE7Q1I4ZFg7QU9wdEJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUNrUWdCLHdCQUFBO0NSd2ZmO0FPMXZCRDs7RUNzUVEsZUFBQTtDUndmUDtBTzl2QkQ7O0VDMFFRLHVCQUFBO0NSd2ZQO0FPbHdCRDs7OztFQzhRUSw0QkFBQTtDUjBmUDtBT3h3QkQ7Ozs7RUNrUlEsc0JBQUE7Q1I0ZlA7QU85d0JEOzs7O0VDc1JRLDRCQUFBO0NSOGZQO0FPcHhCRDs7OztFQzBSUSx5QkFBQTtDUmdnQlA7QU8xeEJEOzs7O0VDOFJRLDRCQUFBO0NSa2dCUDtBT2h5QkQ7Ozs7RUNrU1EsbUJBQUE7Q1JvZ0JQO0FPdHlCRDs7Ozs7Ozs7RUNzU1Esb0JBQUE7Q1IwZ0JQO0FPaHpCRDs7Ozs7Ozs7Ozs7Ozs7OztFQzJTWSxxQkFBQTtDUnVoQlg7QU9sMEJEOztFQytTUSx1QkFBQTtFQUNBLG9CQUFBO0VBQ0EsMEJBQUE7RUFDQSxxQkFBQTtDUnVoQlA7QU96MEJEOzs7O0VDc1RRLGFBQUE7Q1J5aEJQO0FPLzBCRDs7RUMwVFEsa0JBQUE7Q1J5aEJQO0FPbjFCRDs7Ozs7Ozs7RUM4VFEsdUJBQUE7Q1IraEJQO0FPNzFCRDs7Ozs7O0VDa1VRLHdCQUFBO0NSbWlCUDtBT3IyQkQ7Ozs7OztFQ3NVUSxtQkFBQTtDUnVpQlA7QU83MkJEOzs7Ozs7OztFQzBVUSxzQkFBQTtDUjZpQlA7QU92M0JEOzs7Ozs7Ozs7Ozs7OztFQ3dXUSxxQkFBQTtDUitoQlA7QU92NEJEOztFQzRXUSxzQkFBQTtDUitoQlA7QU8zNEJEOzs7Ozs7Ozs7Ozs7OztFQ2lYUSx1QkFBQTtDUjBpQlA7QU8zNUJEOzs7O0VDcVhRLHFCQUFBO0NSNGlCUDtBT2o2QkQ7O0VDeVhRLFlBQUE7RUFDQSxvQkFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7Q1I0aUJQO0FPeDZCRDs7RUNnWVEsaUJBQUE7RUFDQSxrQkFBQTtFQUNBLDhCQUFBO0VBQ0EsK0JBQUE7Q1I0aUJQO0FPLzZCRDs7RUN1WVEsa0JBQUE7RUFDQSxtQkFBQTtDUjRpQlA7QU9wN0JEOztFQWVvQix5QkFBQTtDUHk2Qm5CO0FPeDdCRDs7RUFtQm9CLDRCQUFBO0NQeTZCbkI7QU9wNkJPOzs7O0VBRVEsZUFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLGFBQUE7Q1B3NkJmO0FPcjhCRDs7RUFtQ1EsZUFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLGFBQUE7Q1BzNkJQOztBUzc4QkQ7RUFFUSxtQkFBQTtFQUNBLGtCQUFBO0VBQ0EsYUFBQTtFQUNBLHVCQUFBO01BQUEscUJBQUE7VUFBQSxlQUFBO0NUKzhCUDtBU3A5QkQ7RUFRWSwwQkFBQTtFQUNBLGFBQUE7RUFDQSxrQkFBQTtFQUNBLGFBQUE7RUFDQSwwQkFBQTtDVCs4Qlg7QVM3OEJXO0VBQ0ksZ0JBQUE7RUFDQSxPQUFBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtDVCs4QmY7QVM1OEJXO0VBQ0ksbUJBQUE7RUFDQSxVQUFBO0NUODhCZjtBU3IrQkQ7RUEyQmdCLGlCQUFBO0NUNjhCZjtBU3grQkQ7RUE4Qm9CLGVBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0NUNjhCbkI7QVMzOEJtQjtFQUNJLHNCQUFBO0VBQ0EsWUFBQTtFQUNBLGtCQUFBO0VBQ0EsOENBQUE7RUFDQSxtQkFBQTtFQUNBLGlCQUFBO0NUNjhCdkI7QVN6OEJlO0VBRVEsaUJBQUE7Q1QwOEJ2QjtBUzU4QmU7RUFNUSxjQUFBO0NUeThCdkI7QVMzL0JEO0VBdURvQixnQkFBQTtDVHU4Qm5CO0FTOS9CRDtFQTJEb0IsMEJBQUE7RUFDQSx1QkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7Q1RzOEJuQjtBU3BnQ0Q7RUFpRXdCLHNCQUFBO0VBQ0EsWUFBQTtFQUNBLDhDQUFBO0NUczhCdkI7QVN6Z0NEO0VBdUV3QixnQkFBQTtDVHE4QnZCO0FTNWdDRDtFQTRFb0IsZ0JBQUE7Q1RtOEJuQjs7QVUvZ0NEO0VBRVEsY0FBQTtFQUNBLG1CQUFBO0VBQ0EsVUFBQTtFQUdBLGlEQUFBO0VBQ0EsMEJBQUE7RUFDQSxlQUFBO0VBQ0EsMEJBQUE7RUFDQSxpQkFBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLG9CQUFBO0VBQ0Esb0JBQUE7RUFDQSxpQkFBQTtDVmloQ1A7QVUvZ0NPO0VBQ0ksYUFBQTtDVmloQ1g7QVV0aUNEO0VBeUJZLHNCQUFBO0VBQUEscUJBQUE7RUFBQSxjQUFBO0VBQ0EsaUJBQUE7Q1ZnaENYO0FVMWlDRDtFQTZCZ0IsaUJBQUE7RUFDQSxpREFBQTtFQUNBLGtCQUFBO0NWZ2hDZjtBVS9pQ0Q7RUFvQ1ksaUJBQUE7Q1Y4Z0NYO0FVbGpDRDtFQXdDWSxpQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZUFBQTtDVjZnQ1g7QVV2akNEO0VBOENZLDBCQUFBO0VBQ0EsZ0JBQUE7Q1Y0Z0NYO0FVM2pDRDs7RUFvRGdCLFlBQUE7Q1YyZ0NmO0FVL2pDRDtFQXdEZ0IsZUFBQTtFQUNBLGlCQUFBO0NWMGdDZiIsImZpbGUiOiJMYXlvdXRFZGl0b3IuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmxheW91dC1lZGl0b3ItdG9vbGJhciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDEwcHg7XG59XG4ubGF5b3V0LWVkaXRvci10b29sYmFyIC5sYXlvdXQtZWRpdG9yLXRvb2xiYXItZ3JvdXAge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmxheW91dC1lZGl0b3ItdG9vbGJhciAubGF5b3V0LWVkaXRvci10b29sYmFyLWdyb3VwID4gbGkgKyBsaSB7XG4gIG1hcmdpbi1sZWZ0OiAxMnB4O1xufVxuLmxheW91dC1lZGl0b3Ige1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW4tdG9wOiAxZW07XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtY2FudmFzLXdyYXBwZXIge1xuICBmbGV4LWdyb3c6IDE7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNGU1ZTY7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtY2FudmFzLXdyYXBwZXIgPiAubGF5b3V0LXRvb2xiYXItY29udGFpbmVyIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgbWFyZ2luOiAxMnB4IDEycHggMDtcbiAgbWluLWhlaWdodDogNzFweDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC1jYW52YXMtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJhci1jb250YWluZXIgPiAubWNlLXBhbmVsIHtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC1jYW52YXMtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gLmxheW91dC1wbGFjZWhvbGRlciB7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCAjY2NjO1xuICBwYWRkaW5nOiAwLjJlbSAwLjRlbTtcbiAgYmFja2dyb3VuZDogI2U4ZThlODtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtc25pcHBldCB7XG4gIGJhY2tncm91bmQ6ICNlOGU4ZTg7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyAuaGVscC1yb3c6YmVmb3JlLFxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93OmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyAuaGVscC1yb3cgPiAuaGVscC1jb2x1bW4tZnVsbCxcbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyA+IC5oZWxwLWNvbHVtbi1oYWxmIHtcbiAgbWFyZ2luOiAwLjVlbSAwO1xufVxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93ID4gLmhlbHAtY29sdW1uLWhhbGYge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDUwJTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyA+IC5oZWxwLWNvbHVtbi1oYWxmOm50aC1jaGlsZCgybikge1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICBjbGVhcjogbGVmdDtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyArIC5oZWxwLXJvdyB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIGNvZGUge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjU7XG4gIHBhZGRpbmc6IDJweCA0cHg7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyBwIHtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjZlbTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIHRhYmxlID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkIHtcbiAgcGFkZGluZy1yaWdodDogMTBweDtcbn1cblxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHBhZGRpbmc6IDA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29sdW1uKSB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW46IDA7XG4gIHotaW5kZXg6IDIwO1xuICBoZWlnaHQ6IDI1cHg7XG4gIHBhZGRpbmc6IDAgNnB4O1xuICBsaXN0LXN0eWxlOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBsaW5lLWhlaWdodDogMjVweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtZWxlbWVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtaXRlbSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiAyNXB4O1xuICBwYWRkaW5nOiAxcHggNnB4IDA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWxhYmVsIHtcbiAgZm9udC1zaXplOiAxM3B4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24ge1xuICBkaXNwbGF5OiBub25lO1xuICB3aWR0aDogMjhweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwtbWFpbiB7XG4gIHRvcDogLTI3cHg7XG4gIGxlZnQ6IC0ycHg7XG59XG4ubGF5b3V0LWVkaXRvciBsaS5sYXlvdXQtZWxlbWVudCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUsXG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkIHtcbiAgYm9yZGVyLXdpZHRoOiAycHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlcixcbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XG4gIG1hcmdpbjogLTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWFjdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogcmdiYSgxMDQsIDEwNCwgMTA0LCAwLjEpO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtYWN0aXZlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsLW1haW4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgei1pbmRleDogMzA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTA0LCAxMDQsIDEwNCwgMC4xKTtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQge1xuICBib3JkZXItY29sb3I6ICM2NDg3MjE7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2NDg3MjE7XG4gIGNvbG9yOiAjZmVmZWZlO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyYjAyYjtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWFjdGlvbi5kaXNhYmxlZCB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgY29sb3I6IHJnYmEoMjU0LCAyNTQsIDI1NCwgMC40KTtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWFjdGlvbi5kaXNhYmxlZDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2NDg3MjE7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24uYWN0aXZlIHtcbiAgY29sb3I6ICNkZWZmNDI7XG4gIGJhY2tncm91bmQtY29sb3I6ICM3MzliMjY7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24uYWN0aXZlOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyYjAyYjtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LXNlbGVjdGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDEzNSwgMzMsIDAuMDgpO1xufVxuLmxheW91dC1lZGl0b3IgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0IHtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDEycHggNnB4IHJnYmEoMTAwLCAxMzUsIDMzLCAwLjUpO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDtcbiAgbWluLWhlaWdodDogNzhweDtcbiAgYm9yZGVyOiAycHggZGFzaGVkICM2NDg3MjEgIWltcG9ydGFudDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDEzNSwgMzMsIDAuMTYpO1xufVxuLmxheW91dC1lZGl0b3IgLm1lZGlhLXRodW1ibmFpbCBpbWcge1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRhaW5lci1jaGlsZHJlbi1wbGFjZWhvbGRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbjogMTFweDtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYm9yZGVyOiAxcHggZGFzaGVkIHJnYmEoMTI0LCAxMjQsIDEyNCwgMC40KTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBwYWRkaW5nOiAxMnB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIG9wYWNpdHk6IDAuNjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250YWluZXIgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4ge1xuICBwYWRkaW5nOiAxMnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250YWluZXIgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29udGFpbmVyKSArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpIHtcbiAgbWFyZ2luLXRvcDogMTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLnVpLXNvcnRhYmxlLWhlbHBlcjpmaXJzdC1jaGlsZCArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIubGF5b3V0LWNvbnRhaW5lci1lbXB0eSA+IC5sYXlvdXQtY29udGFpbmVyLWNoaWxkcmVuLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIubGF5b3V0LWNvbnRhaW5lci1lbXB0eSA+IC5sYXlvdXQtY2hpbGRyZW4ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1jb250YWluZXIubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXI6IDFweCBkYXNoZWQgcmdiYSgxMjQsIDEyNCwgMTI0LCAwLjYpO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcbiAgbWFyZ2luOiAtMXB4O1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1jb250YWluZXIgKyAubGF5b3V0LWNvbnRhaW5lcjpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXItdG9wOiAwO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1jb250YWluZXIgKyAubGF5b3V0LWNvbnRhaW5lcjpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY2FudmFzICNkdW1teSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcm93LmxheW91dC1lbGVtZW50LWZvY3VzZWQ6bm90KC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0KSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXItdG9wOiAxcHggZGFzaGVkIHJnYmEoMTI0LCAxMjQsIDEyNCwgMC42KSAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1yb3cubGF5b3V0LWVsZW1lbnQtZm9jdXNlZDpub3QoLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcbiAgbWFyZ2luLXRvcDogLTFweCAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1yb3cubGF5b3V0LWVsZW1lbnQtZm9jdXNlZDpub3QoLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50ICsgLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XG4gIGJvcmRlci1sZWZ0OiAwICFpbXBvcnRhbnQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXJvdy5sYXlvdXQtZWxlbWVudC1mb2N1c2VkOm5vdCgubGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldCkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWVsZW1lbnQgKyAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xuICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbHVtbiA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMzA7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTAwJTtcbiAgY3Vyc29yOiBjb2wtcmVzaXplO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb2x1bW4gPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXItbGVmdCB7XG4gIGxlZnQ6IC02cHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbHVtbiA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhci1yaWdodCB7XG4gIHJpZ2h0OiAtNnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb2x1bW4ubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwge1xuICBtaW4taGVpZ2h0OiAxZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB7XG4gIHBhZGRpbmc6IDJweDtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAvKiB0aGlzIGNvbG9yIGlzIGp1c3QgYSBzdWdnZXN0aW9uIGFuZCBjYW4gYmUgY2hhbmdlZCBiYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBmZWVkYmFjayAqL1xuICAvKiB0aGlzIGFsc28gaGFzIGJpZGkgaW1wbGljYXRpb25zICovXG4gIC8qIHRoaXMgYWxzbyBoYXMgYmlkaSBpbXBsaWNhdGlvbnMgKi9cbiAgLyogTFRSLXNwZWNpZmljOiB1c2UgJ21hcmdpbi1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xuICAvKiBMVFItc3BlY2lmaWM6IHVzZSAncGFkZGluZy1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xuICAvKnRhYmxlW3J1bGVzPW5vbmUgaV0sIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSwgdGFibGVbcnVsZXM9cm93cyBpXSxcbnRhYmxlW3J1bGVzPWNvbHMgaV0sIHRhYmxlW3J1bGVzPWFsbCBpXSwgdGFibGVbZnJhbWU9dm9pZCBpXSxcbnRhYmxlW2ZyYW1lPWFib3ZlIGldLCB0YWJsZVtmcmFtZT1iZWxvdyBpXSwgdGFibGVbZnJhbWU9aHNpZGVzIGldLFxudGFibGVbZnJhbWU9bGhzIGldLCB0YWJsZVtmcmFtZT1yaHMgaV0sIHRhYmxlW2ZyYW1lPXZzaWRlcyBpXSxcbnRhYmxlW2ZyYW1lPWJveCBpXSwgdGFibGVbZnJhbWU9Ym9yZGVyIGldLFxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1ub25lIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0aGVhZCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRoZWFkID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGJvZHkgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9cm93cyBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1hbGwgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRmb290ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1jb2xzIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdGZvb3QgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9YWxsIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1hbGwgaV0gPiB0Zm9vdCA+IHRyID4gdGgge1xuICAgIGJvcmRlci1jb2xvcjogYmxhY2s7XG59Ki9cbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgKixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgKiB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsb2NrcXVvdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsb2NrcXVvdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNlbnRlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY2VudGVyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXYsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpdixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZmlndXJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ2NhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ2NhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZvb3Rlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZm9vdGVyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmb3JtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmb3JtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoZWFkZXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhlYWRlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaHIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsZWdlbmQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxlZ2VuZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwbGFpbnRleHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcHJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHhtcCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ3VyZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwbGFpbnRleHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcHJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHhtcCB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ3VyZSB7XG4gIG1hcmdpbi1sZWZ0OiA0MHB4O1xuICBtYXJnaW4tcmlnaHQ6IDQwcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3Mge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxpc3RpbmcsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxpc3RpbmcsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHBsYWludGV4dCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwcmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgeG1wLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICB3aGl0ZS1zcGFjZTogcHJlO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjaXRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjaXRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZm4sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRmbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZW0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGVtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB2YXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHZhciB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3Ryb25nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBrYmQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGtiZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2FtcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2FtcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHR0IHtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYmlnLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBiaWcge1xuICBmb250LXNpemU6IGxhcmdlcjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc21hbGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNtYWxsIHtcbiAgZm9udC1zaXplOiBzbWFsbGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdWIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1YiB7XG4gIHZlcnRpY2FsLWFsaWduOiBzdWI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1cCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3VwIHtcbiAgdmVydGljYWwtYWxpZ246IHN1cGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdWIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1Yixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdXAge1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBmb250LXNpemU6IHNtYWxsZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ1YnksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ1Ynkge1xuICBkaXNwbGF5OiBydWJ5O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCByYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmIge1xuICBkaXNwbGF5OiBydWJ5LWJhc2U7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydCB7XG4gIGRpc3BsYXk6IHJ1YnktdGV4dDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZm9udC1zaXplOiA1MCU7XG4gIGZvbnQtdmFyaWFudC1lYXN0LWFzaWFuOiBydWJ5O1xuICB0ZXh0LWVtcGhhc2lzOiBub25lO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCByYmMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiYyB7XG4gIGRpc3BsYXk6IHJ1YnktYmFzZS1jb250YWluZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0Yyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnRjIHtcbiAgZGlzcGxheTogcnVieS10ZXh0LWNvbnRhaW5lcjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnVieSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnVieSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiYyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmJjLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydGMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0YyB7XG4gIHVuaWNvZGUtYmlkaTogaXNvbGF0ZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmxpbmssXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDpsaW5rIHtcbiAgY29sb3I6ICMwMDAwRUU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDp2aXNpdGVkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6dmlzaXRlZCB7XG4gIGNvbG9yOiAjNTUxQThCO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6bGluayxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmxpbmssXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDp2aXNpdGVkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6dmlzaXRlZCB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhOmxpbmtbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYTpsaW5rW3JlbH49aGVscF0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGE6dmlzaXRlZFtyZWx+PWhlbHBdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhOnZpc2l0ZWRbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYXJlYTpsaW5rW3JlbH49aGVscF0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFyZWE6bGlua1tyZWx+PWhlbHBdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhcmVhOnZpc2l0ZWRbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYXJlYTp2aXNpdGVkW3JlbH49aGVscF0ge1xuICBjdXJzb3I6IGhlbHA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDpmb2N1cyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmZvY3VzIHtcbiAgb3V0bGluZTogYXV0bztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbWFyayxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbWFyayB7XG4gIGJhY2tncm91bmQ6IHllbGxvdztcbiAgY29sb3I6IGJsYWNrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhYmJyW3RpdGxlXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYWJiclt0aXRsZV0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFjcm9ueW1bdGl0bGVdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhY3JvbnltW3RpdGxlXSB7XG4gIHRleHQtZGVjb3JhdGlvbjogZG90dGVkIHVuZGVybGluZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5zLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHUge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN0cmlrZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3RyaWtlIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsaW5rLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibGluayB7XG4gIHRleHQtZGVjb3JhdGlvbjogYmxpbms7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHE6OmJlZm9yZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcTo6YmVmb3JlIHtcbiAgY29udGVudDogb3Blbi1xdW90ZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcTo6YWZ0ZXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHE6OmFmdGVyIHtcbiAgY29udGVudDogY2xvc2UtcXVvdGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJyOjpiZWZvcmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJyOjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxBJztcbiAgd2hpdGUtc3BhY2U6IHByZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbm9icixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbm9iciB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHdicixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgd2JyIHtcbiAgY29udGVudDogJ1xcMjAwQic7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG5vYnIgd2JyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBub2JyIHdiciB7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFydGljbGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFydGljbGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFzaWRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhc2lkZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDEsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgxLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgzLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaGdyb3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoZ3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG5hdixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbmF2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzZWN0aW9uLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzZWN0aW9uIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgxLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMSB7XG4gIG1hcmdpbi10b3A6IDAuNjdlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC42N2VtO1xuICBmb250LXNpemU6IDIuMDBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMiB7XG4gIG1hcmdpbi10b3A6IDAuODNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC44M2VtO1xuICBmb250LXNpemU6IDEuNTBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgzLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMyB7XG4gIG1hcmdpbi10b3A6IDEuMDBlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS4wMGVtO1xuICBmb250LXNpemU6IDEuMTdlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNCB7XG4gIG1hcmdpbi10b3A6IDEuMzNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS4zM2VtO1xuICBmb250LXNpemU6IDEuMDBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg1LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNSB7XG4gIG1hcmdpbi10b3A6IDEuNjdlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS42N2VtO1xuICBmb250LXNpemU6IDAuODNlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNiB7XG4gIG1hcmdpbi10b3A6IDIuMzNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMi4zM2VtO1xuICBmb250LXNpemU6IDAuNjdlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGR0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsaSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGkge1xuICBkaXNwbGF5OiBsaXN0LWl0ZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHtcbiAgbWFyZ2luLXRvcDogMWVtO1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGQge1xuICBtYXJnaW4tbGVmdDogNDBweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHtcbiAgcGFkZGluZy1sZWZ0OiA0MHB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wge1xuICBsaXN0LXN0eWxlLXR5cGU6IGRlY2ltYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwge1xuICBsaXN0LXN0eWxlLXR5cGU6IGRpc2M7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHVsIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwgdWwge1xuICBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlIHtcbiAgZGlzcGxheTogdGFibGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNhcHRpb24ge1xuICBkaXNwbGF5OiB0YWJsZS1jYXB0aW9uO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sZ3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbGdyb3VwW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbGdyb3VwW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW4tZ3JvdXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW47XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aGVhZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWRbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWRbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keVtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keVtoaWRkZW5dIHtcbiAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGZvb3QsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1mb290ZXItZ3JvdXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHJbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHJbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IHRhYmxlLXJvdztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cFtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cFtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0ge1xuICB2aXNpYmlsaXR5OiBjb2xsYXBzZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXNwYWNpbmc6IDJweDtcbiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbiAgdGV4dC1pbmRlbnQ6IGluaXRpYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoIHtcbiAgcGFkZGluZzogMXB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUgPiB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUgPiB0ciB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgge1xuICB2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCB7XG4gIGJvcmRlci1jb2xvcjogZ3JheTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyIHtcbiAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNlbGVjdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2VsZWN0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9wdGlvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb3B0Z3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9wdGdyb3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBidXR0b24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGV4dGFyZWEsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRleHRhcmVhLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBrZXlnZW4sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGtleWdlbiB7XG4gIHRleHQtaW5kZW50OiBpbml0aWFsO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZXh0YXJlYSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGV4dGFyZWEge1xuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dFt0eXBlPVwicmVzZXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNlbGVjdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2VsZWN0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBidXR0b24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYnV0dG9uIHtcbiAgcGFkZGluZzogMC4zZW0gMC41ZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBociB7XG4gIGNvbG9yOiBncmF5O1xuICBib3JkZXItc3R5bGU6IGluc2V0O1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgbWFyZ2luOiAwLjVlbSBhdXRvO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWVsZHNldCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZmllbGRzZXQge1xuICBtYXJnaW4tbGVmdDogMnB4O1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgYm9yZGVyOiBncm9vdmUgMnB4IFRocmVlREZhY2U7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGVnZW5kLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsZWdlbmQge1xuICBwYWRkaW5nLWxlZnQ6IDJweDtcbiAgcGFkZGluZy1yaWdodDogMnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA+ICo6Zmlyc3QtY2hpbGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gKjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAqOmxhc3QtY2hpbGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gKjpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50LmxheW91dC1jb250ZW50LWltYWdlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gaW1nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sLmxheW91dC1jb250ZW50LWltYWdlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gaW1nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50LmxheW91dC1jb250ZW50LXZlY3Rvci1pbWFnZSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb250ZW50LW1hcmt1cCA+IGltZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbC5sYXlvdXQtY29udGVudC12ZWN0b3ItaW1hZ2UgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiBpbWcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmxheW91dC1lZGl0b3IgLmltZy1yZXNwb25zaXZlLFxuLmxheW91dC1lZGl0b3IgLmltZy1yZXNwb25zaXZlIGltZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1sZWZ0OiAxMnB4O1xuICB3aWR0aDogMjIwcHg7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNGU1ZTY7XG4gIHdpZHRoOiAyMjBweDtcbiAgbWluLWhlaWdodDogNDAwcHg7XG4gIHBhZGRpbmc6IDZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjRmNTtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3guc3RpY2t5LXRvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveC5zdGlja3ktYm90dG9tIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCB7XG4gIG1hcmdpbi10b3A6IDEycHg7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCAubGF5b3V0LXRvb2xib3gtZ3JvdXAtaGVhZGluZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIC5sYXlvdXQtdG9vbGJveC1ncm91cC1oZWFkaW5nOmJlZm9yZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDEwcHg7XG4gIG1hcmdpbi1yaWdodDogNHB4O1xuICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAxNHB4LzEgRm9udEF3ZXNvbWU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29udGVudDogXCJcXGYwZDdcIjtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwLmNvbGxhcHNlZCAubGF5b3V0LXRvb2xib3gtZ3JvdXAtaGVhZGluZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkYVwiO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAuY29sbGFwc2VkIC5sYXlvdXQtdG9vbGJveC1pdGVtcyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCAubGF5b3V0LXRvb2xib3gtc2VjdGlvbiArIC5sYXlvdXQtdG9vbGJveC1zZWN0aW9uIHtcbiAgbWFyZ2luLXRvcDogNHB4O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAgLmxheW91dC10b29sYm94LWl0ZW0ge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNWU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBwYWRkaW5nOiA5cHggMTJweDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAgLmxheW91dC10b29sYm94LWl0ZW0gaSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDE2cHg7XG4gIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIC5sYXlvdXQtdG9vbGJveC1pdGVtICsgLmxheW91dC10b29sYm94LWl0ZW0ge1xuICBtYXJnaW4tdG9wOiA0cHg7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCArIC5sYXlvdXQtdG9vbGJveC1ncm91cCB7XG4gIG1hcmdpbi10b3A6IDZweDtcbn1cblxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbWFyZ2luOiAwO1xuICAtbW96LWJveC1zaGFkb3c6IDNweCAzcHggMTFweCAwIHJnYmEoNTAsIDUwLCA1MCwgMC41KTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAzcHggM3B4IDExcHggMCByZ2JhKDUwLCA1MCwgNTAsIDAuNSk7XG4gIGJveC1zaGFkb3c6IDNweCAzcHggMTFweCAwIHJnYmEoNTAsIDUwLCA1MCwgMC41KTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U0ZTVlNjtcbiAgcGFkZGluZzogMnB4IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHotaW5kZXg6IDIwO1xuICBjb2xvcjogIzdjN2M3YztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBtaW4td2lkdGg6IDMwMHB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cC53aWRlIHtcbiAgd2lkdGg6IDYwMHB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCAubGF5b3V0LXBvcHVwLWZsZXgge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiAycHggNXB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCAubGF5b3V0LXBvcHVwLWZsZXggLmxheW91dC1wb3B1cC1jb2x1bW4gKyAubGF5b3V0LXBvcHVwLWNvbHVtbiB7XG4gIG1hcmdpbi1sZWZ0OiA0cHg7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiYSgxMjgsIDEyOCwgMTI4LCAwLjE1KTtcbiAgcGFkZGluZy1sZWZ0OiA0cHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtaXRlbSB7XG4gIHBhZGRpbmc6IDRweCA2cHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtbGFiZWwge1xuICBmb250LXNpemU6IDAuOWVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICM3YzdjN2M7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtYWN0aW9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjRmNTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCAubGF5b3V0LXBvcHVwLWlucHV0IGlucHV0W3R5cGU9J3RleHQnXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1pbnB1dCB0ZXh0YXJlYSB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCAubGF5b3V0LXBvcHVwLWlucHV0ID4gbGFiZWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAwLjllbTtcbn1cbiIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3ItdG9vbGJhciB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgdG9wOiAxMHB4O1xyXG5cclxuICAgIC5sYXlvdXQtZWRpdG9yLXRvb2xiYXItZ3JvdXAge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcblxyXG4gICAgICAgID4gbGkgKyBsaSB7XHJcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMnB4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIG1hcmdpbi10b3A6IDFlbTtcclxuICAgIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZTtcclxuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xyXG5cclxuICAgID4gLmxheW91dC1jYW52YXMtd3JhcHBlciB7XHJcbiAgICAgICAgZmxleC1ncm93OiAxO1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBncmF5LWJnO1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBncmF5LWJvcmRlcjtcclxuXHJcbiAgICAgICAgPiAubGF5b3V0LXRvb2xiYXItY29udGFpbmVyIHtcclxuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICAgICAgbWFyZ2luOiBAY29udGFpbmVyLXBhZGRpbmcgQGNvbnRhaW5lci1wYWRkaW5nIDA7XHJcbiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDcxcHg7XHJcblxyXG4gICAgICAgICAgICA+IC5tY2UtcGFuZWwge1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA+IC5sYXlvdXQtcGxhY2Vob2xkZXIge1xyXG4gICAgICAgICAgICBib3JkZXI6IDFweCBkYXNoZWQgI2NjYztcclxuICAgICAgICAgICAgcGFkZGluZzogMC4yZW0gMC40ZW07XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNlOGU4ZTg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5sYXlvdXQtc25pcHBldCB7XHJcbiAgICAgICAgYmFja2dyb3VuZDogI2U4ZThlODtcclxuICAgIH1cclxufVxyXG5cclxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuXHJcbiAgICAuaGVscC1yb3cge1xyXG4gICAgICAgICY6YmVmb3JlLCAmOmFmdGVyIHtcclxuICAgICAgICAgICAgY29udGVudDogXCIgXCI7IC8vIDFcclxuICAgICAgICAgICAgZGlzcGxheTogdGFibGU7IC8vIDJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICY6YWZ0ZXIge1xyXG4gICAgICAgICAgICBjbGVhcjogYm90aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgID4gLmhlbHAtY29sdW1uLWZ1bGwsID4gLmhlbHAtY29sdW1uLWhhbGYge1xyXG4gICAgICAgICAgICBtYXJnaW46IDAuNWVtIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA+IC5oZWxwLWNvbHVtbi1oYWxmIHtcclxuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICAgICAgICAgIHdpZHRoOiA1MCU7XHJcblxyXG4gICAgICAgICAgICAmOm50aC1jaGlsZCgybikge1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMTBweDtcclxuICAgICAgICAgICAgICAgIGNsZWFyOiBsZWZ0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICArIC5oZWxwLXJvdyB7XHJcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDFlbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29kZSB7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjU7XHJcbiAgICAgICAgcGFkZGluZzogMnB4IDRweDtcclxuICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xyXG4gICAgfVxyXG5cclxuICAgIHAge1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTtcclxuICAgIH1cclxuXHJcbiAgICB0YWJsZSA+IHRib2R5ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCB7XHJcbiAgICAgICAgcGFkZGluZy1yaWdodDogMTBweDtcclxuICAgIH1cclxufVxyXG4iLCJAaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtZWxlbWVudCB7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDA7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgICAgICAgcGFkZGluZzogMDtcclxuXHJcbiAgICAgICAgLy8gV2UgZG9uJ3QgZnVjayB3aXRoIHRoZSBsZWZ0IG1hcmdpbiBvZiBjb2x1bW5zLCBiZWNhdXNlIEJvb3RzdHJhcCB1c2VzIHRoZXNlIHRvIHJlbmRlciBjb2x1bW4gb2Zmc2V0cy5cclxuICAgICAgICAmOm5vdCgubGF5b3V0LWNvbHVtbikge1xyXG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICA+IC5sYXlvdXQtcGFuZWwge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTsgLy8gU2hvd24gb25seSBpbiBhY3RpdmUgb3IgZm9jdXNlZCBzdGF0ZXMuXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAyMDtcclxuICAgICAgICAgICAgICAgIGhlaWdodDogMjVweDtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgNnB4O1xyXG4gICAgICAgICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcclxuICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMjVweDtcclxuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LXBhbmVsLWl0ZW0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDI1cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMXB4IDZweCAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1wYW5lbC1sYWJlbCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiBAZm9udC1zaXplIC0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lOyAvLyBTaG93biBvbmx5IGluIGZvY3VzZWQgc3RhdGUuXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDI4cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LXBhbmVsLW1haW4ge1xyXG4gICAgICAgICAgICAgICAgdG9wOiAtMjdweDtcclxuICAgICAgICAgICAgICAgIGxlZnQ6IC0ycHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gV2hlbiBkcmFnZ2luZyBmcm9tIHRvb2xib3gsIGVsZW1lbnRzIHdpbGwgYmUgbGkgcmF0aGVyIHRoYW4gZGl2LlxyXG4gICAgbGkubGF5b3V0LWVsZW1lbnQge1xyXG4gICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgJjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIHtcclxuXHJcbiAgICAgICAgLmxheW91dC1lbGVtZW50LWFjdGl2ZSwgLmxheW91dC1lbGVtZW50LWZvY3VzZWQge1xyXG4gICAgICAgICAgICBib3JkZXItd2lkdGg6IDJweDtcclxuICAgICAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luOiAtMnB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LWVsZW1lbnQtYWN0aXZlIHtcclxuICAgICAgICAgICAgQGFjdGl2ZS1oaWdobGlnaHQ6IGZhZGUoIzY4Njg2OCwgMTAlKTtcclxuXHJcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogQGFjdGl2ZS1oaWdobGlnaHQ7XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbC1tYWluIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOyAvLyBUbyByZXZlYWwuXHJcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAzMDtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBhY3RpdmUtaGlnaGxpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCB7XHJcbiAgICAgICAgICAgIEBmb2N1c2VkLWhpZ2hsaWdodDogIzY0ODcyMTtcclxuICAgICAgICAgICAgQGZvY3VzZWQtdGV4dDogI2ZlZmVmZTtcclxuXHJcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogQGZvY3VzZWQtaGlnaGxpZ2h0O1xyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7IC8vIFRvIHJldmVhbC5cclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBmb2N1c2VkLWhpZ2hsaWdodDtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBAZm9jdXNlZC10ZXh0O1xyXG5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1wYW5lbC1hY3Rpb24ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgLy8gVG8gcmV2ZWFsLlxyXG4gICAgICAgICAgICAgICAgICAgICY6aG92ZXIge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKEBmb2N1c2VkLWhpZ2hsaWdodCwgMTAlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICYuZGlzYWJsZWQge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBmYWRlKEBmb2N1c2VkLXRleHQsIDQwJSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBmb2N1c2VkLWhpZ2hsaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJi5hY3RpdmUge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogbGlnaHRlbihzYXR1cmF0ZShzcGluKEBmb2N1c2VkLWhpZ2hsaWdodCwgLTEwKSwgMTAwJSksIDMwJSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0ZW4oQGZvY3VzZWQtaGlnaGxpZ2h0LCA1JSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0ZW4oQGZvY3VzZWQtaGlnaGxpZ2h0LCAxMCUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LWVsZW1lbnQtc2VsZWN0ZWQge1xyXG4gICAgICAgICAgICBAc2VsZWN0ZWQtaGlnaGxpZ2h0OiAjNjQ4NzIxO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBmYWRlKEBzZWxlY3RlZC1oaWdobGlnaHQsIDglKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcclxuICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgfVxyXG5cclxuICAgIC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0IHtcclxuICAgICAgICBAZHJvcHRhcmdldC1oaWdobGlnaHQ6ICM2NDg3MjE7XHJcbiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDEycHggNnB4IGZhZGUoQGRyb3B0YXJnZXQtaGlnaGxpZ2h0LCA1MCUpO1xyXG5cclxuICAgICAgICAudWktc29ydGFibGUtcGxhY2Vob2xkZXIge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jazsgLy8gVG8gcmV2ZWFsLlxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IEBlbGVtZW50LW1pbi1oZWlnaHQgLSAycHg7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCBAZHJvcHRhcmdldC1oaWdobGlnaHQgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZmFkZShAZHJvcHRhcmdldC1oaWdobGlnaHQsIDE2JSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEEgQ1NTIGZpeCBmb3IgbWVkaWEgaXRlbSBlbGVtZW50cy5cclxuICAgIC5tZWRpYS10aHVtYm5haWwge1xyXG4gICAgICAgIGltZyB7XHJcbiAgICAgICAgICAgIG1heC13aWR0aDoxMDAlO1xyXG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJAaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtY29udGFpbmVyIHtcclxuXHJcbiAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtY29udGFpbmVyLWNoaWxkcmVuLXBsYWNlaG9sZGVyIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luOiBAY29udGFpbmVyLXBhZGRpbmcgLSAxcHg7XHJcbiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiBAZWxlbWVudC1taW4taGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIGZhZGUoQGdyYXktdGV4dCwgNDAlKTtcclxuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IEBjb250YWluZXItcGFkZGluZztcclxuICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiBAZm9udC1zaXplIC0gMTtcclxuICAgICAgICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcclxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNjtcclxuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWNoaWxkcmVuIHtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IEBjb250YWluZXItcGFkZGluZztcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBBbGwgYWRqYWNlbnQgbm9uLWNvbnRhaW5lciBjaGlsZHJlbiBuZWVkIHNvbWUgc3BhY2UgYmV0d2Vlbi4uLlxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29udGFpbmVyKSArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiBAY29udGVudC1zcGFjaW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIC4uLiBleGNlcHQgd2hlbiBqUXVlcnkgVUkgc29ydGFibGUgaGVscGVyIGlzIHRoZSBmaXJzdCBlbGVtZW50IChiZWNhdXNlIHRoYXQgb25lIGlzIGFic29sdXRlbHkgcG9zaXRpb25lZCBhbmQgXCJmbG9hdGluZ1wiKS5cclxuICAgICAgICAgICAgICAgID4gLnVpLXNvcnRhYmxlLWhlbHBlcjpmaXJzdC1jaGlsZCArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAmLmxheW91dC1jb250YWluZXItZW1wdHkge1xyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWNvbnRhaW5lci1jaGlsZHJlbi1wbGFjZWhvbGRlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDsgLy8gVG8gcmV2ZWFsLlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1jaGlsZHJlbiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogMDtcclxuICAgICAgICAgICAgICAgICAgICByaWdodDogMDtcclxuICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAmOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykge1xyXG4gICAgICAgIC5sYXlvdXQtY29udGFpbmVyLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4ge1xyXG4gICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIGZhZGUoQGdyYXktdGV4dCwgNjAlKTtcclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IC0xcHg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1jb250YWluZXIgKyAubGF5b3V0LWNvbnRhaW5lcjpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMDtcclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgLmxheW91dC1jYW52YXMge1xyXG4gICAgICAgICNkdW1teSB7IC8vIE9ubHkgYWRkZWQgYmVjYXVzZSBXRSBkb2Vzbid0IGNvbXBpbGUgaWYgdGhlcmUgYXJlIG5vIHJ1bGVzLlxyXG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgLmxheW91dC1yb3cge1xyXG4gICAgICAgICYubGF5b3V0LWVsZW1lbnQtZm9jdXNlZDpub3QoLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuIHtcclxuICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGJvcmRlci10b3A6IDFweCBkYXNoZWQgZmFkZShAZ3JheS10ZXh0LCA2MCUpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtMXB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50ICsgLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgLmxheW91dC1jb2x1bW4ge1xyXG4gICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICA+IC5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXIge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgIHotaW5kZXg6IDMwO1xyXG4gICAgICAgICAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDE2cHg7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgICAgICAgICBjdXJzb3I6IGNvbC1yZXNpemU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhci1sZWZ0IHtcclxuICAgICAgICAgICAgICAgIGxlZnQ6IC02cHg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhci1yaWdodCB7XHJcbiAgICAgICAgICAgICAgICByaWdodDogLTZweDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyIHtcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5AaW1wb3J0IFwiUmVzZXQubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgLmxheW91dC1jb250ZW50LCAubGF5b3V0LWh0bWwge1xyXG4gICAgICAgIG1pbi1oZWlnaHQ6IDFlbTtcclxuXHJcbiAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgIC5sYXlvdXQtY29udGVudC1tYXJrdXAge1xyXG5cclxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDJweDtcclxuICAgICAgICAgICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcclxuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgdG8gSFRNTDUgVzNDIHN0YW5kYXJkIGRlZmF1bHQgc3R5bGluZyB3aXRoaW4gY29udGVudC5cclxuICAgICAgICAgICAgICAgIC5yZXNldCgpO1xyXG5cclxuICAgICAgICAgICAgICAgID4gKjpmaXJzdC1jaGlsZCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OyAvLyBJbXBvcnRhbnQgYmVjYXVzZSBzaXRlLmNzcyBvZiB0aGUgYWRtaW4gdGhlbWUgc3R5bGVzIGhlYWRpbmcgbWFyZ2lucyB3aXRoIGEgdmVyeSBoaWdoIHNwZWNpZmljaXR5LlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgID4gKjpsYXN0LWNoaWxkIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYubGF5b3V0LWNvbnRlbnQtaW1hZ2UsICYubGF5b3V0LWNvbnRlbnQtdmVjdG9yLWltYWdlIHtcclxuICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiBpbWcge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgICAgIGhlaWdodDogYXV0bztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAuaW1nLXJlc3BvbnNpdmUsIC5pbWctcmVzcG9uc2l2ZSBpbWcge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcclxuICAgICAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICB9XHJcbn1cclxuIiwi77u/LnJlc2V0KCkge1xyXG5cclxuICAgICoge1xyXG4gICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xyXG4gICAgfVxyXG5cclxuICAgIGFkZHJlc3MsIGJsb2NrcXVvdGUsIGNlbnRlciwgZGl2LCBmaWd1cmUsIGZpZ2NhcHRpb24sIGZvb3RlciwgZm9ybSxcclxuICAgIGhlYWRlciwgaHIsIGxlZ2VuZCwgbGlzdGluZywgcCwgcGxhaW50ZXh0LCBwcmUsIHhtcCB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICB9XHJcblxyXG4gICAgYmxvY2txdW90ZSwgZmlndXJlLCBsaXN0aW5nLCBwLCBwbGFpbnRleHQsIHByZSwgeG1wIHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAxZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMWVtO1xyXG4gICAgfVxyXG5cclxuICAgIGJsb2NrcXVvdGUsIGZpZ3VyZSB7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHg7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA0MHB4O1xyXG4gICAgfVxyXG5cclxuICAgIGFkZHJlc3Mge1xyXG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcclxuICAgIH1cclxuXHJcbiAgICBsaXN0aW5nLCBwbGFpbnRleHQsIHByZSwgeG1wIHtcclxuICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7XHJcbiAgICB9XHJcblxyXG4gICAgY2l0ZSwgZGZuLCBlbSwgaSwgdmFyIHtcclxuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XHJcbiAgICB9XHJcblxyXG4gICAgYiwgc3Ryb25nIHtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGNvZGUsIGtiZCwgc2FtcCwgdHQge1xyXG4gICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XHJcbiAgICB9XHJcblxyXG4gICAgYmlnIHtcclxuICAgICAgICBmb250LXNpemU6IGxhcmdlcjtcclxuICAgIH1cclxuXHJcbiAgICBzbWFsbCB7XHJcbiAgICAgICAgZm9udC1zaXplOiBzbWFsbGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHN1YiB7XHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHN1YjtcclxuICAgIH1cclxuXHJcbiAgICBzdXAge1xyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBzdXBlcjtcclxuICAgIH1cclxuXHJcbiAgICBzdWIsIHN1cCB7XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcclxuICAgICAgICBmb250LXNpemU6IHNtYWxsZXI7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHJ1Ynkge1xyXG4gICAgICAgIGRpc3BsYXk6IHJ1Ynk7XHJcbiAgICB9XHJcblxyXG4gICAgcmIge1xyXG4gICAgICAgIGRpc3BsYXk6IHJ1YnktYmFzZTtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgfVxyXG5cclxuICAgIHJ0IHtcclxuICAgICAgICBkaXNwbGF5OiBydWJ5LXRleHQ7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgICAgICBmb250LXNpemU6IDUwJTtcclxuICAgICAgICBmb250LXZhcmlhbnQtZWFzdC1hc2lhbjogcnVieTtcclxuICAgICAgICB0ZXh0LWVtcGhhc2lzOiBub25lO1xyXG4gICAgfVxyXG5cclxuICAgIHJiYyB7XHJcbiAgICAgICAgZGlzcGxheTogcnVieS1iYXNlLWNvbnRhaW5lcjtcclxuICAgIH1cclxuXHJcbiAgICBydGMge1xyXG4gICAgICAgIGRpc3BsYXk6IHJ1YnktdGV4dC1jb250YWluZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcnVieSwgcmIsIHJ0LCByYmMsIHJ0YyB7XHJcbiAgICAgICAgdW5pY29kZS1iaWRpOiBpc29sYXRlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICA6bGluayB7XHJcbiAgICAgICAgY29sb3I6ICMwMDAwRUU7XHJcbiAgICB9XHJcblxyXG4gICAgOnZpc2l0ZWQge1xyXG4gICAgICAgIGNvbG9yOiAjNTUxQThCO1xyXG4gICAgfVxyXG5cclxuICAgIDpsaW5rLCA6dmlzaXRlZCB7XHJcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XHJcbiAgICB9XHJcblxyXG4gICAgYTpsaW5rW3JlbH49aGVscF0sIGE6dmlzaXRlZFtyZWx+PWhlbHBdLFxyXG4gICAgYXJlYTpsaW5rW3JlbH49aGVscF0sIGFyZWE6dmlzaXRlZFtyZWx+PWhlbHBdIHtcclxuICAgICAgICBjdXJzb3I6IGhlbHA7XHJcbiAgICB9XHJcblxyXG4gICAgOmZvY3VzIHtcclxuICAgICAgICBvdXRsaW5lOiBhdXRvO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcmsge1xyXG4gICAgICAgIGJhY2tncm91bmQ6IHllbGxvdztcclxuICAgICAgICBjb2xvcjogYmxhY2s7XHJcbiAgICB9XHJcbiAgICAvKiB0aGlzIGNvbG9yIGlzIGp1c3QgYSBzdWdnZXN0aW9uIGFuZCBjYW4gYmUgY2hhbmdlZCBiYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBmZWVkYmFjayAqL1xyXG4gICAgYWJiclt0aXRsZV0sIGFjcm9ueW1bdGl0bGVdIHtcclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IGRvdHRlZCB1bmRlcmxpbmU7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zLCB1IHtcclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcclxuICAgIH1cclxuXHJcbiAgICBkZWwsIHMsIHN0cmlrZSB7XHJcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XHJcbiAgICB9XHJcblxyXG4gICAgYmxpbmsge1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogYmxpbms7XHJcbiAgICB9XHJcblxyXG4gICAgcTo6YmVmb3JlIHtcclxuICAgICAgICBjb250ZW50OiBvcGVuLXF1b3RlO1xyXG4gICAgfVxyXG5cclxuICAgIHE6OmFmdGVyIHtcclxuICAgICAgICBjb250ZW50OiBjbG9zZS1xdW90ZTtcclxuICAgIH1cclxuXHJcbiAgICBicjo6YmVmb3JlIHtcclxuICAgICAgICBjb250ZW50OiAnXFxBJztcclxuICAgICAgICB3aGl0ZS1zcGFjZTogcHJlO1xyXG4gICAgfVxyXG4gICAgLyogdGhpcyBhbHNvIGhhcyBiaWRpIGltcGxpY2F0aW9ucyAqL1xyXG4gICAgbm9iciB7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgIH1cclxuXHJcbiAgICB3YnIge1xyXG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMEInO1xyXG4gICAgfVxyXG4gICAgLyogdGhpcyBhbHNvIGhhcyBiaWRpIGltcGxpY2F0aW9ucyAqL1xyXG4gICAgbm9iciB3YnIge1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XHJcbiAgICB9XHJcblxyXG4gICAgYXJ0aWNsZSwgYXNpZGUsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGhncm91cCwgbmF2LCBzZWN0aW9uIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIH1cclxuXHJcbiAgICBoMSB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMC42N2VtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuNjdlbTtcclxuICAgICAgICBmb250LXNpemU6IDIuMDBlbTtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICBoMiB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMC44M2VtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuODNlbTtcclxuICAgICAgICBmb250LXNpemU6IDEuNTBlbTtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICBoMyB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMS4wMGVtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEuMDBlbTtcclxuICAgICAgICBmb250LXNpemU6IDEuMTdlbTtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICBoNCB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMS4zM2VtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEuMzNlbTtcclxuICAgICAgICBmb250LXNpemU6IDEuMDBlbTtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICBoNSB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMS42N2VtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEuNjdlbTtcclxuICAgICAgICBmb250LXNpemU6IDAuODNlbTtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICBoNiB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMi4zM2VtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIuMzNlbTtcclxuICAgICAgICBmb250LXNpemU6IDAuNjdlbTtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICBkaXIsIGRkLCBkbCwgZHQsIG9sLCB1bCB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICB9XHJcblxyXG4gICAgbGkge1xyXG4gICAgICAgIGRpc3BsYXk6IGxpc3QtaXRlbTtcclxuICAgIH1cclxuXHJcbiAgICBkaXIsIGRsLCBvbCwgdWwge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDFlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxZW07XHJcbiAgICB9XHJcblxyXG4gICAgICAgIGRpciBkaXIsIGRpciBkbCwgZGlyIG9sLCBkaXIgdWwsXHJcbiAgICAgICAgZGwgZGlyLCBkbCBkbCwgZGwgb2wsIGRsIHVsLFxyXG4gICAgICAgIG9sIGRpciwgb2wgZGwsIG9sIG9sLCBvbCB1bCxcclxuICAgICAgICB1bCBkaXIsIHVsIGRsLCB1bCBvbCwgdWwgdWwge1xyXG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICBkZCB7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHg7XHJcbiAgICB9XHJcbiAgICAvKiBMVFItc3BlY2lmaWM6IHVzZSAnbWFyZ2luLXJpZ2h0JyBmb3IgcnRsIGVsZW1lbnRzICovXHJcbiAgICBkaXIsIG9sLCB1bCB7XHJcbiAgICAgICAgcGFkZGluZy1sZWZ0OiA0MHB4O1xyXG4gICAgfVxyXG4gICAgLyogTFRSLXNwZWNpZmljOiB1c2UgJ3BhZGRpbmctcmlnaHQnIGZvciBydGwgZWxlbWVudHMgKi9cclxuICAgIG9sIHtcclxuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IGRlY2ltYWw7XHJcbiAgICB9XHJcblxyXG4gICAgZGlyLCB1bCB7XHJcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBkaXNjO1xyXG4gICAgfVxyXG5cclxuICAgICAgICBkaXIgZGlyLCBkaXIgdWwsXHJcbiAgICAgICAgb2wgZGlyLCBvbCB1bCxcclxuICAgICAgICB1bCBkaXIsIHVsIHVsIHtcclxuICAgICAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZGlyIGRpciBkaXIsIGRpciBkaXIgdWwsXHJcbiAgICAgICAgICAgIGRpciBvbCBkaXIsIGRpciBvbCB1bCxcclxuICAgICAgICAgICAgZGlyIHVsIGRpciwgZGlyIHVsIHVsLFxyXG4gICAgICAgICAgICBvbCBkaXIgZGlyLCBvbCBkaXIgdWwsXHJcbiAgICAgICAgICAgIG9sIG9sIGRpciwgb2wgb2wgdWwsXHJcbiAgICAgICAgICAgIG9sIHVsIGRpciwgb2wgdWwgdWwsXHJcbiAgICAgICAgICAgIHVsIGRpciBkaXIsIHVsIGRpciB1bCxcclxuICAgICAgICAgICAgdWwgb2wgZGlyLCB1bCBvbCB1bCxcclxuICAgICAgICAgICAgdWwgdWwgZGlyLCB1bCB1bCB1bCB7XHJcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgIHRhYmxlIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBjYXB0aW9uIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jYXB0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbGdyb3VwLCBjb2xncm91cFtoaWRkZW5dIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jb2x1bW4tZ3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgY29sLCBjb2xbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtY29sdW1uO1xyXG4gICAgfVxyXG5cclxuICAgIHRoZWFkLCB0aGVhZFtoaWRkZW5dIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgdGJvZHksIHRib2R5W2hpZGRlbl0ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cDtcclxuICAgIH1cclxuXHJcbiAgICB0Zm9vdCwgdGZvb3RbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtZm9vdGVyLWdyb3VwO1xyXG4gICAgfVxyXG5cclxuICAgIHRyLCB0cltoaWRkZW5dIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7XHJcbiAgICB9XHJcblxyXG4gICAgdGQsIHRoLCB0ZFtoaWRkZW5dLCB0aFtoaWRkZW5dIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xyXG4gICAgfVxyXG5cclxuICAgICAgICBjb2xncm91cFtoaWRkZW5dLCBjb2xbaGlkZGVuXSwgdGhlYWRbaGlkZGVuXSwgdGJvZHlbaGlkZGVuXSxcclxuICAgICAgICB0Zm9vdFtoaWRkZW5dLCB0cltoaWRkZW5dLCB0ZFtoaWRkZW5dLCB0aFtoaWRkZW5dIHtcclxuICAgICAgICAgICAgdmlzaWJpbGl0eTogY29sbGFwc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIHRhYmxlIHtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgIGJvcmRlci1zcGFjaW5nOiAycHg7XHJcbiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcclxuICAgICAgICB0ZXh0LWluZGVudDogaW5pdGlhbDtcclxuICAgIH1cclxuXHJcbiAgICB0ZCwgdGgge1xyXG4gICAgICAgIHBhZGRpbmc6IDFweDtcclxuICAgIH1cclxuXHJcbiAgICB0aCB7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhlYWQsIHRib2R5LCB0Zm9vdCwgdGFibGUgPiB0ciB7XHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICAgIH1cclxuXHJcbiAgICB0ciwgdGQsIHRoIHtcclxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDtcclxuICAgIH1cclxuXHJcbiAgICB0YWJsZSwgdGQsIHRoIHtcclxuICAgICAgICBib3JkZXItY29sb3I6IGdyYXk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhlYWQsIHRib2R5LCB0Zm9vdCwgdHIge1xyXG4gICAgICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdDtcclxuICAgIH1cclxuICAgIC8qdGFibGVbcnVsZXM9bm9uZSBpXSwgdGFibGVbcnVsZXM9Z3JvdXBzIGldLCB0YWJsZVtydWxlcz1yb3dzIGldLFxyXG50YWJsZVtydWxlcz1jb2xzIGldLCB0YWJsZVtydWxlcz1hbGwgaV0sIHRhYmxlW2ZyYW1lPXZvaWQgaV0sXHJcbnRhYmxlW2ZyYW1lPWFib3ZlIGldLCB0YWJsZVtmcmFtZT1iZWxvdyBpXSwgdGFibGVbZnJhbWU9aHNpZGVzIGldLFxyXG50YWJsZVtmcmFtZT1saHMgaV0sIHRhYmxlW2ZyYW1lPXJocyBpXSwgdGFibGVbZnJhbWU9dnNpZGVzIGldLFxyXG50YWJsZVtmcmFtZT1ib3ggaV0sIHRhYmxlW2ZyYW1lPWJvcmRlciBpXSxcclxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1yb3dzIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9cm93cyBpXSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9YWxsIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRoZWFkID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0aGVhZCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0aGVhZCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0aGVhZCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0aGVhZCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0aGVhZCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdGhlYWQgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1ub25lIGldID4gdGJvZHkgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdGJvZHkgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRib2R5ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9cm93cyBpXSA+IHRib2R5ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRib2R5ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9YWxsIGldID4gdGJvZHkgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1hbGwgaV0gPiB0Ym9keSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRmb290ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGZvb3QgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1yb3dzIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdGZvb3QgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1jb2xzIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdGZvb3QgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1hbGwgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRmb290ID4gdHIgPiB0aCB7XHJcbiAgICBib3JkZXItY29sb3I6IGJsYWNrO1xyXG59Ki9cclxuICAgIGlucHV0LCBzZWxlY3QsIG9wdGlvbiwgb3B0Z3JvdXAsIGJ1dHRvbiwgdGV4dGFyZWEsIGtleWdlbiB7XHJcbiAgICAgICAgdGV4dC1pbmRlbnQ6IGluaXRpYWw7XHJcbiAgICB9XHJcblxyXG4gICAgdGV4dGFyZWEge1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcclxuICAgIH1cclxuXHJcbiAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl0sIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSwgaW5wdXRbdHlwZT1cInJlc2V0XCJdLCBpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLFxyXG4gICAgaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSwgc2VsZWN0LCBidXR0b24ge1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICB9XHJcblxyXG4gICAgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSwgYnV0dG9uIHtcclxuICAgICAgICBwYWRkaW5nOiAwLjNlbSAwLjVlbTtcclxuICAgIH1cclxuXHJcbiAgICBociB7XHJcbiAgICAgICAgY29sb3I6IGdyYXk7XHJcbiAgICAgICAgYm9yZGVyLXN0eWxlOiBpbnNldDtcclxuICAgICAgICBib3JkZXItd2lkdGg6IDFweDtcclxuICAgICAgICBtYXJnaW46IDAuNWVtIGF1dG87XHJcbiAgICB9XHJcblxyXG4gICAgZmllbGRzZXQge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7XHJcbiAgICAgICAgYm9yZGVyOiBncm9vdmUgMnB4IFRocmVlREZhY2U7XHJcbiAgICAgICAgcGFkZGluZzogMC4zNWVtIDAuNjI1ZW0gMC43NWVtO1xyXG4gICAgfVxyXG5cclxuICAgIGxlZ2VuZCB7XHJcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7XHJcbiAgICAgICAgcGFkZGluZy1yaWdodDogMnB4O1xyXG4gICAgfVxyXG59XHJcbiIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciB7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiBAY29udGFpbmVyLXBhZGRpbmc7XHJcbiAgICAgICAgd2lkdGg6IDIyMHB4O1xyXG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xyXG5cclxuICAgICAgICA+IC5sYXlvdXQtdG9vbGJveCB7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBncmF5LWJvcmRlcjtcclxuICAgICAgICAgICAgd2lkdGg6IDIyMHB4O1xyXG4gICAgICAgICAgICBtaW4taGVpZ2h0OiA0MDBweDtcclxuICAgICAgICAgICAgcGFkZGluZzogQGNvbnRhaW5lci1wYWRkaW5nIC8gMjtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGdyYXktYmc7XHJcblxyXG4gICAgICAgICAgICAmLnN0aWNreS10b3Age1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICAgICAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICYuc3RpY2t5LWJvdHRvbSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICBib3R0b206IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC5sYXlvdXQtdG9vbGJveC1ncm91cCB7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiBAY29udGFpbmVyLXBhZGRpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgLmxheW91dC10b29sYm94LWdyb3VwLWhlYWRpbmcge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IEBjb250YWluZXItcGFkZGluZyAvIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMHB4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IEBjb250YWluZXItcGFkZGluZyAvIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjBkN1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAmLmNvbGxhcHNlZCB7XHJcbiAgICAgICAgICAgICAgICAgICAgLmxheW91dC10b29sYm94LWdyb3VwLWhlYWRpbmc6YmVmb3JlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwZGFcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC5sYXlvdXQtdG9vbGJveC1pdGVtcyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC5sYXlvdXQtdG9vbGJveC1zZWN0aW9uICsgLmxheW91dC10b29sYm94LXNlY3Rpb24ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IEBjb250YWluZXItcGFkZGluZyAvIDM7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLmxheW91dC10b29sYm94LWl0ZW0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBncmF5LWJvcmRlcjtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IChAY29udGFpbmVyLXBhZGRpbmcgLSAzKSBAY29udGFpbmVyLXBhZGRpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTZweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgKyAubGF5b3V0LXRvb2xib3gtaXRlbSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IEBjb250YWluZXItcGFkZGluZyAvIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICsgLmxheW91dC10b29sYm94LWdyb3VwIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiBAY29udGFpbmVyLXBhZGRpbmcgLyAyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgLmxheW91dC1wb3B1cCB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZTsgLy8gU2hvd24gb25seSBpbiBhY3RpdmUgb3IgZm9jdXNlZCBzdGF0ZXMuXHJcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAtbW96LWJveC1zaGFkb3c6IDNweCAzcHggMTFweCAwIHJnYmEoNTAsIDUwLCA1MCwgMC41KTtcclxuICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDNweCAzcHggMTFweCAwIHJnYmEoNTAsIDUwLCA1MCwgMC41KTtcclxuICAgICAgICBib3gtc2hhZG93OiAzcHggM3B4IDExcHggMCByZ2JhKDUwLCA1MCwgNTAsIDAuNSk7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgQGdyYXktYm9yZGVyO1xyXG4gICAgICAgIHBhZGRpbmc6IDJweCAwO1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XHJcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcclxuICAgICAgICB6LWluZGV4OiAyMDtcclxuICAgICAgICBjb2xvcjogQGdyYXktdGV4dDtcclxuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xyXG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XHJcbiAgICAgICAgbWluLXdpZHRoOiAzMDBweDtcclxuXHJcbiAgICAgICAgJi53aWRlIHtcclxuICAgICAgICAgICAgd2lkdGg6IDYwMHB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1wb3B1cC1mbGV4IHtcclxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgICAgcGFkZGluZzogMnB4IDVweDtcclxuXHJcbiAgICAgICAgICAgIC5sYXlvdXQtcG9wdXAtY29sdW1uICsgLmxheW91dC1wb3B1cC1jb2x1bW4ge1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDRweDtcclxuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgZmFkZShncmF5LCAxNSUpO1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA0cHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtcG9wdXAtaXRlbSB7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDRweCA2cHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LXBvcHVwLWxhYmVsIHtcclxuICAgICAgICAgICAgZm9udC1zaXplOiAwLjllbTtcclxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICAgICAgICAgIGNvbG9yOiBAZ3JheS10ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1wb3B1cC1hY3Rpb246aG92ZXIge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAZ3JheS1iZztcclxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1wb3B1cC1pbnB1dCB7XHJcbiAgICAgICAgICAgIGlucHV0W3R5cGU9J3RleHQnXSwgdGV4dGFyZWEge1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgID4gbGFiZWwge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDAuOWVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== */ +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxheW91dEVkaXRvci5jc3MiLCJFZGl0b3IubGVzcyIsIkVsZW1lbnQubGVzcyIsIkNvbnRhaW5lci5sZXNzIiwiQ2FudmFzLmxlc3MiLCJSb3cubGVzcyIsIkNvbHVtbi5sZXNzIiwiQ29udGVudC5sZXNzIiwiUmVzZXQubGVzcyIsIlRvb2xib3gubGVzcyIsIlBvcHVwLmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFDSEE7RUFDSSxxQkFBQTtFQUFBLGNBQUE7RUFDQSx1QkFBQTtNQUFBLCtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxVQUFBO0NEREg7QUNIRDtFQU9RLHFCQUFBO0VBQUEsY0FBQTtDRERQO0FDTkQ7RUFVWSxrQkFBQTtDRERYO0FDTUQ7RUFDSSxxQkFBQTtFQUFBLGNBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0VBQ0Esd0JBQUE7TUFBQSxxQkFBQTtDREpIO0FDQUQ7RUFPUSxxQkFBQTtNQUFBLGFBQUE7RUFDQSwwQkFBQTtFQUNBLDBCQUFBO0NESlA7QUNMRDtFQVlZLGNBQUE7RUFDQSxvQkFBQTtFQUNBLGlCQUFBO0NESlg7QUNWRDtFQWlCZ0IsdUJBQUE7Q0RKZjtBQ2JEO0VBc0JZLHdCQUFBO0VBQ0EscUJBQUE7RUFDQSxvQkFBQTtDRE5YO0FDbEJEO0VBNkJRLG9CQUFBO0NEUlA7QUNZRDtFQUNJLGNBQUE7Q0RWSDtBQ2FPOztFQUNJLGFBQUE7RUFDQSxlQUFBO0NEVlg7QUNhTztFQUNJLFlBQUE7Q0RYWDtBQ0NEOztFQWNZLGdCQUFBO0NEWFg7QUNIRDtFQWtCWSx1QkFBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0NEWlg7QUNjVztFQUNJLG9CQUFBO0VBQ0EsWUFBQTtDRFpmO0FDWkQ7RUE2QlksZ0JBQUE7Q0RkWDtBQ2ZEO0VBa0NRLG1CQUFBO0VBQ0EsMEJBQUE7RUFDQSxpQkFBQTtFQUNBLHVCQUFBO0NEaEJQO0FDckJEO0VBeUNRLHFCQUFBO0VBQ0EsbUJBQUE7Q0RqQlA7QUN6QkQ7RUE4Q1Esb0JBQUE7Q0RsQlA7O0FFNUVEO0VBRVEsbUJBQUE7RUFDQSxjQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLFdBQUE7Q0Y4RVA7QUUzRU87RUFDSSxlQUFBO0NGNkVYO0FFdkZEO0VBZWdCLGNBQUE7RUFDQSxtQkFBQTtFQUNBLFVBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0Esa0JBQUE7RUFDQSx1QkFBQTtDRjJFZjtBRW5HRDtFQTJCb0Isc0JBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7Q0YyRW5CO0FFeEdEO0VBaUNvQixnQkFBQTtDRjBFbkI7QUUzR0Q7RUFxQ29CLGNBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxtQkFBQTtDRnlFbkI7QUVqSEQ7RUE2Q2dCLFdBQUE7RUFDQSxXQUFBO0NGdUVmO0FFckhEO0VBcURRLGlCQUFBO0NGbUVQO0FFaEVHOztFQUdRLGtCQUFBO0VBQ0Esb0JBQUE7Q0ZpRVg7QUVyRUc7O0VBT1ksYUFBQTtDRmtFZjtBRXpFRztFQWNRLHVDQUFBO0NGOERYO0FFNUVHO0VBaUJZLGVBQUE7RUFDQSxZQUFBO0VBQ0EsMkNBQUE7Q0Y4RGY7QUVqRkc7RUEyQlEsc0JBQUE7Q0Z5RFg7QUVwRkc7RUE4QlksZUFBQTtFQUNBLDBCQUFBO0VBQ0EsZUFBQTtDRnlEZjtBRXpGRztFQW1DZ0Isc0JBQUE7Q0Z5RG5CO0FFeERtQjtFQUNJLDBCQUFBO0NGMER2QjtBRXZEbUI7RUFDSSxnQkFBQTtFQUNBLGdDQUFBO0NGeUR2QjtBRXZEdUI7RUFDSSwwQkFBQTtDRnlEM0I7QUVyRG1CO0VBQ0ksZUFBQTtFQUNBLDBCQUFBO0NGdUR2QjtBRXJEdUI7RUFDSSwwQkFBQTtDRnVEM0I7QUU3R0c7RUErRFEsMkNBQUE7Q0ZpRFg7QUV4S0Q7RUE0SFEsY0FBQTtDRitDUDtBRTNLRDtFQWlJUSx1REFBQTtDRjZDUDtBRTlLRDtFQW9JWSxlQUFBO0VBQ0EsK0JBQUE7RUFDQSxpQkFBQTtFQUNBLHNDQUFBO0VBQ0EsMkNBQUE7Q0Y2Q1g7QUVyTEQ7RUErSVksZ0JBQUE7RUFDQSxpQkFBQTtDRnlDWDs7QUd6TEQ7RUFNZ0IsY0FBQTtFQUNBLDJCQUFBO01BQUEsdUJBQUE7RUFDQSxhQUFBO0VBQ0EsaUJBQUE7RUFDQSw0Q0FBQTtFQUNBLG1CQUFBO0VBQ0EsY0FBQTtFQUNBLHNCQUFBO01BQUEsd0JBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0VBQ0EsYUFBQTtFQUNBLG1CQUFBO0NIdUxmO0FHeE1EO0VBcUJnQixjQUFBO0NIc0xmO0FHM01EO0VBeUJvQixpQkFBQTtDSHFMbkI7QUc5TUQ7RUE4Qm9CLGNBQUE7Q0htTG5CO0FHL0tXO0VBRVEscUJBQUE7RUFBQSxjQUFBO0NIZ0xuQjtBR2xMVztFQU1RLG1CQUFBO0VBQ0EsT0FBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0VBQ0EsUUFBQTtDSCtLbkI7QUd6S0c7RUFHWSw0Q0FBQTtDSHlLZjtBRzVLRztFQU1nQixhQUFBO0NIeUtuQjtBRy9LRztFQVdZLGNBQUE7Q0h1S2Y7QUdsTEc7RUFjZ0IsY0FBQTtDSHVLbkI7O0FJdk9EO0VBR1ksY0FBQTtDSndPWDs7QUt6T087RUFFUSwyREFBQTtDTDJPZjtBSzdPTztFQUlZLDRCQUFBO0NMNE9uQjtBS2hQTztFQVNRLDBCQUFBO0NMME9mO0FLblBPO0VBV1ksMEJBQUE7Q0wyT25COztBTXhQRDtFQUlnQixjQUFBO0VBQ0EsbUJBQUE7RUFDQSxZQUFBO0VBQ0EsT0FBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7Q053UGY7QU1sUUQ7RUFjZ0IsV0FBQTtDTnVQZjtBTXJRRDtFQWtCZ0IsWUFBQTtDTnNQZjtBTWxQTztFQUNJLGVBQUE7Q05vUFg7O0FPMVFEOztFQUVRLGdCQUFBO0NQNlFQO0FPL1FEOztFQU9nQixhQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFUDRRZCx5RkFBeUY7RUFDekYscUNBQXFDO0VBQ3JDLHFDQUFxQztFQUNyQyx1REFBdUQ7RUFDdkQsd0RBQXdEO0VBQ3hEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCQztDQUNGO0FPclREOztFQ0FRLFVBQUE7RUFDQSxXQUFBO0VBQ0Esd0JBQUE7Q1J5VFA7QU8zVEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VDT1EsZUFBQTtDUnNWUDtBTzdWRDs7Ozs7Ozs7Ozs7Ozs7RUNXUSxnQkFBQTtFQUNBLG1CQUFBO0NSa1dQO0FPOVdEOzs7O0VDZ0JRLGtCQUFBO0VBQ0EsbUJBQUE7Q1JvV1A7QU9yWEQ7O0VDcUJRLG1CQUFBO0NSb1dQO0FPelhEOzs7Ozs7OztFQ3lCUSx1QkFBQTtFQUNBLGlCQUFBO0NSMFdQO0FPcFlEOzs7Ozs7Ozs7O0VDOEJRLG1CQUFBO0NSa1hQO0FPaFpEOzs7O0VDa0NRLG9CQUFBO0NSb1hQO0FPdFpEOzs7Ozs7OztFQ3NDUSx1QkFBQTtDUjBYUDtBT2hhRDs7RUMwQ1Esa0JBQUE7Q1IwWFA7QU9wYUQ7O0VDOENRLG1CQUFBO0NSMFhQO0FPeGFEOztFQ2tEUSxvQkFBQTtDUjBYUDtBTzVhRDs7RUNzRFEsc0JBQUE7Q1IwWFA7QU9oYkQ7Ozs7RUMwRFEsb0JBQUE7RUFDQSxtQkFBQTtDUjRYUDtBT3ZiRDs7RUNnRVEsY0FBQTtDUjJYUDtBTzNiRDs7RUNvRVEsbUJBQUE7RUFDQSxvQkFBQTtDUjJYUDtBT2hjRDs7RUN5RVEsbUJBQUE7RUFDQSxvQkFBQTtFQUNBLGVBQUE7RUFDQSw4QkFBQTtFQUNBLG9CQUFBO0NSMlhQO0FPeGNEOztFQ2lGUSw2QkFBQTtDUjJYUDtBTzVjRDs7RUNxRlEsNkJBQUE7Q1IyWFA7QU9oZEQ7Ozs7Ozs7Ozs7RUN5RlEsc0JBQUE7Q1JtWVA7QU81ZEQ7O0VDOEZRLGVBQUE7Q1JrWVA7QU9oZUQ7O0VDa0dRLGVBQUE7Q1JrWVA7QU9wZUQ7Ozs7RUNzR1EsMkJBQUE7Q1JvWVA7QU8xZUQ7Ozs7Ozs7O0VDMkdRLGFBQUE7Q1J5WVA7QU9wZkQ7O0VDK0dRLGNBQUE7Q1J5WVA7QU94ZkQ7O0VDbUhRLG1CQUFBO0VBQ0EsYUFBQTtDUnlZUDtBTzdmRDs7OztFQ3dIUSxrQ0FBQTtDUjJZUDtBT25nQkQ7Ozs7RUM0SFEsMkJBQUE7Q1I2WVA7QU96Z0JEOzs7Ozs7RUNnSVEsOEJBQUE7Q1JpWlA7QU9qaEJEOztFQ29JUSx1QkFBQTtDUmlaUDtBT3JoQkQ7O0VDd0lRLG9CQUFBO0NSaVpQO0FPemhCRDs7RUM0SVEscUJBQUE7Q1JpWlA7QU83aEJEOztFQ2dKUSxjQUFBO0VBQ0EsaUJBQUE7Q1JpWlA7QU9saUJEOztFQ3FKUSxvQkFBQTtDUmlaUDtBT3RpQkQ7O0VDeUpRLGlCQUFBO0NSaVpQO0FPMWlCRDs7RUM2SlEsb0JBQUE7Q1JpWlA7QU85aUJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VDaUtRLGVBQUE7Q1JxYVA7QU90a0JEOztFQ3FLUSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtDUnFhUDtBTzdrQkQ7O0VDNEtRLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0NScWFQO0FPcGxCRDs7RUNtTFEsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7Q1JxYVA7QU8zbEJEOztFQzBMUSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtDUnFhUDtBT2xtQkQ7O0VDaU1RLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0NScWFQO0FPem1CRDs7RUN3TVEsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7Q1JxYVA7QU9obkJEOzs7Ozs7Ozs7Ozs7RUMrTVEsZUFBQTtDUithUDtBTzluQkQ7O0VDbU5RLG1CQUFBO0NSK2FQO0FPbG9CRDs7Ozs7Ozs7RUN1TlEsZ0JBQUE7RUFDQSxtQkFBQTtDUnFiUDtBTzdvQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VDK05ZLGNBQUE7RUFDQSxpQkFBQTtDUmdkWDtBT2hyQkQ7O0VDb09RLGtCQUFBO0NSZ2RQO0FPcHJCRDs7Ozs7O0VDd09RLG1CQUFBO0NSb2RQO0FPNXJCRDs7RUM0T1EseUJBQUE7Q1JvZFA7QU9oc0JEOzs7O0VDZ1BRLHNCQUFBO0NSc2RQO0FPdHNCRDs7Ozs7Ozs7Ozs7O0VDc1BZLHdCQUFBO0NSOGRYO0FPcHRCRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VDa1FnQix3QkFBQTtDUndmZjtBTzF2QkQ7O0VDc1FRLGVBQUE7Q1J3ZlA7QU85dkJEOztFQzBRUSx1QkFBQTtDUndmUDtBT2x3QkQ7Ozs7RUM4UVEsNEJBQUE7Q1IwZlA7QU94d0JEOzs7O0VDa1JRLHNCQUFBO0NSNGZQO0FPOXdCRDs7OztFQ3NSUSw0QkFBQTtDUjhmUDtBT3B4QkQ7Ozs7RUMwUlEseUJBQUE7Q1JnZ0JQO0FPMXhCRDs7OztFQzhSUSw0QkFBQTtDUmtnQlA7QU9oeUJEOzs7O0VDa1NRLG1CQUFBO0NSb2dCUDtBT3R5QkQ7Ozs7Ozs7O0VDc1NRLG9CQUFBO0NSMGdCUDtBT2h6QkQ7Ozs7Ozs7Ozs7Ozs7Ozs7RUMyU1kscUJBQUE7Q1J1aEJYO0FPbDBCRDs7RUMrU1EsdUJBQUE7RUFDQSxvQkFBQTtFQUNBLDBCQUFBO0VBQ0EscUJBQUE7Q1J1aEJQO0FPejBCRDs7OztFQ3NUUSxhQUFBO0NSeWhCUDtBTy8wQkQ7O0VDMFRRLGtCQUFBO0NSeWhCUDtBT24xQkQ7Ozs7Ozs7O0VDOFRRLHVCQUFBO0NSK2hCUDtBTzcxQkQ7Ozs7OztFQ2tVUSx3QkFBQTtDUm1pQlA7QU9yMkJEOzs7Ozs7RUNzVVEsbUJBQUE7Q1J1aUJQO0FPNzJCRDs7Ozs7Ozs7RUMwVVEsc0JBQUE7Q1I2aUJQO0FPdjNCRDs7Ozs7Ozs7Ozs7Ozs7RUN3V1EscUJBQUE7Q1IraEJQO0FPdjRCRDs7RUM0V1Esc0JBQUE7Q1IraEJQO0FPMzRCRDs7Ozs7Ozs7Ozs7Ozs7RUNpWFEsdUJBQUE7Q1IwaUJQO0FPMzVCRDs7OztFQ3FYUSxxQkFBQTtDUjRpQlA7QU9qNkJEOztFQ3lYUSxZQUFBO0VBQ0Esb0JBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0NSNGlCUDtBT3g2QkQ7O0VDZ1lRLGlCQUFBO0VBQ0Esa0JBQUE7RUFDQSw4QkFBQTtFQUNBLCtCQUFBO0NSNGlCUDtBTy82QkQ7O0VDdVlRLGtCQUFBO0VBQ0EsbUJBQUE7Q1I0aUJQO0FPcDdCRDs7RUFlb0IseUJBQUE7Q1B5NkJuQjtBT3g3QkQ7O0VBbUJvQiw0QkFBQTtDUHk2Qm5CO0FPcDZCTzs7OztFQUVRLGVBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxhQUFBO0NQdzZCZjtBT3I4QkQ7O0VBbUNRLGVBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxhQUFBO0NQczZCUDs7QVM3OEJEO0VBRVEsMEJBQUE7RUFDQSx1QkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxzQkFBQTtDVCs4QlA7QVNyOUJEO0VBU1ksc0JBQUE7RUFDQSxZQUFBO0VBQ0EsOENBQUE7Q1QrOEJYO0FTMTlCRDtFQWVZLGdCQUFBO0NUODhCWDtBU3o4QkQ7RUFFUSxrQkFBQTtFQUNBLGFBQUE7RUFFQSxxQkFBQTtFQUNBLGVBQUE7RVQwOEJOO29EQUNrRDtFU3g4QjVDLHVCQUFBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtFVDA4Qk4seUVBQXlFO0VTdjhCbkUsaUJBQUE7RUFDQSxPQUFBO0NUMDhCUDtBU3g4Qk87RUFDSSxXQUFBO0NUMDhCWDtBU3Y4Qk87RUFDSSwwQ0FBQTtFQUNBLG1CQUFBO0NUeThCWDtBU3Q4Qk87RUFDSSxxQ0FBQTtDVHc4Qlg7QVNuK0JEO0VBK0JZLDBCQUFBO0VBQ0EsYUFBQTtFQUNBLGtCQUFBO0VBQ0EsYUFBQTtFQUNBLDBCQUFBO0NUdThCWDtBU3I4Qlc7RUFDSSxnQkFBQTtFQUNBLE9BQUE7RUFDQSxpQkFBQTtFQUNBLGlCQUFBO0NUdThCZjtBU3A4Qlc7RUFDSSxtQkFBQTtFQUNBLFVBQUE7Q1RzOEJmO0FTcC9CRDtFQWtEZ0IsaUJBQUE7Q1RxOEJmO0FTdi9CRDtFQXFEb0IsZUFBQTtFQUNBLG1CQUFBO0VBQ0Esc0JBQUE7Q1RxOEJuQjtBU244Qm1CO0VBQ0ksc0JBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7RUFDQSw4Q0FBQTtFQUNBLG1CQUFBO0VBQ0EsaUJBQUE7Q1RxOEJ2QjtBU2o4QmU7RUFFUSxpQkFBQTtDVGs4QnZCO0FTcDhCZTtFQU1RLGNBQUE7Q1RpOEJ2QjtBUzFnQ0Q7RUE4RW9CLGdCQUFBO0NUKzdCbkI7QVM3Z0NEO0VBa0ZvQiwwQkFBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtDVDg3Qm5CO0FTbmhDRDtFQXdGd0Isc0JBQUE7RUFDQSxZQUFBO0VBQ0EsOENBQUE7Q1Q4N0J2QjtBU3hoQ0Q7RUE4RndCLGdCQUFBO0NUNjdCdkI7QVMzaENEO0VBbUdvQixnQkFBQTtDVDI3Qm5COztBVWxqQ0Q7RUFFUSxjQUFBO0VBQ0EsbUJBQUE7RUFDQSxVQUFBO0VBR0EsaURBQUE7RUFDQSwwQkFBQTtFQUNBLGVBQUE7RUFDQSwwQkFBQTtFQUNBLGlCQUFBO0VBQ0EsWUFBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0Esb0JBQUE7RUFDQSxvQkFBQTtFQUNBLGlCQUFBO0NWb2pDUDtBVWxqQ087RUFDSSxhQUFBO0NWb2pDWDtBVXprQ0Q7RUF5QlkscUJBQUE7RUFBQSxjQUFBO0VBQ0EsaUJBQUE7Q1ZtakNYO0FVN2tDRDtFQTZCZ0IsaUJBQUE7RUFDQSxpREFBQTtFQUNBLGtCQUFBO0NWbWpDZjtBVWxsQ0Q7RUFvQ1ksaUJBQUE7Q1ZpakNYO0FVcmxDRDtFQXdDWSxpQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZUFBQTtDVmdqQ1g7QVUxbENEO0VBOENZLDBCQUFBO0VBQ0EsZ0JBQUE7Q1YraUNYO0FVOWxDRDs7RUFvRGdCLFlBQUE7Q1Y4aUNmO0FVbG1DRDtFQXdEZ0IsZUFBQTtFQUNBLGlCQUFBO0NWNmlDZiIsImZpbGUiOiJMYXlvdXRFZGl0b3IuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmxheW91dC1lZGl0b3ItdG9vbGJhciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDEwcHg7XG59XG4ubGF5b3V0LWVkaXRvci10b29sYmFyIC5sYXlvdXQtZWRpdG9yLXRvb2xiYXItZ3JvdXAge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmxheW91dC1lZGl0b3ItdG9vbGJhciAubGF5b3V0LWVkaXRvci10b29sYmFyLWdyb3VwID4gbGkgKyBsaSB7XG4gIG1hcmdpbi1sZWZ0OiAxMnB4O1xufVxuLmxheW91dC1lZGl0b3Ige1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW4tdG9wOiAxZW07XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtY2FudmFzLXdyYXBwZXIge1xuICBmbGV4LWdyb3c6IDE7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNGU1ZTY7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtY2FudmFzLXdyYXBwZXIgPiAubGF5b3V0LXRvb2xiYXItY29udGFpbmVyIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgbWFyZ2luOiAxMnB4IDEycHggMDtcbiAgbWluLWhlaWdodDogNzFweDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC1jYW52YXMtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJhci1jb250YWluZXIgPiAubWNlLXBhbmVsIHtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC1jYW52YXMtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gLmxheW91dC1wbGFjZWhvbGRlciB7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCAjY2NjO1xuICBwYWRkaW5nOiAwLjJlbSAwLjRlbTtcbiAgYmFja2dyb3VuZDogI2U4ZThlODtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtc25pcHBldCB7XG4gIGJhY2tncm91bmQ6ICNlOGU4ZTg7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyAuaGVscC1yb3c6YmVmb3JlLFxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93OmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyAuaGVscC1yb3cgPiAuaGVscC1jb2x1bW4tZnVsbCxcbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyA+IC5oZWxwLWNvbHVtbi1oYWxmIHtcbiAgbWFyZ2luOiAwLjVlbSAwO1xufVxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93ID4gLmhlbHAtY29sdW1uLWhhbGYge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDUwJTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyA+IC5oZWxwLWNvbHVtbi1oYWxmOm50aC1jaGlsZCgybikge1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICBjbGVhcjogbGVmdDtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyArIC5oZWxwLXJvdyB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIGNvZGUge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjU7XG4gIHBhZGRpbmc6IDJweCA0cHg7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyBwIHtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjZlbTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIHRhYmxlID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkIHtcbiAgcGFkZGluZy1yaWdodDogMTBweDtcbn1cblxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHBhZGRpbmc6IDA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29sdW1uKSB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW46IDA7XG4gIHotaW5kZXg6IDIwO1xuICBoZWlnaHQ6IDI1cHg7XG4gIHBhZGRpbmc6IDAgNnB4O1xuICBsaXN0LXN0eWxlOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBsaW5lLWhlaWdodDogMjVweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtZWxlbWVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtaXRlbSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiAyNXB4O1xuICBwYWRkaW5nOiAxcHggNnB4IDA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWxhYmVsIHtcbiAgZm9udC1zaXplOiAxM3B4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24ge1xuICBkaXNwbGF5OiBub25lO1xuICB3aWR0aDogMjhweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwtbWFpbiB7XG4gIHRvcDogLTI3cHg7XG4gIGxlZnQ6IC0ycHg7XG59XG4ubGF5b3V0LWVkaXRvciBsaS5sYXlvdXQtZWxlbWVudCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUsXG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkIHtcbiAgYm9yZGVyLXdpZHRoOiAycHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlcixcbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XG4gIG1hcmdpbjogLTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWFjdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogcmdiYSgxMDQsIDEwNCwgMTA0LCAwLjEpO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtYWN0aXZlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsLW1haW4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgei1pbmRleDogMzA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTA0LCAxMDQsIDEwNCwgMC4xKTtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQge1xuICBib3JkZXItY29sb3I6ICM2NDg3MjE7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2NDg3MjE7XG4gIGNvbG9yOiAjZmVmZWZlO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyYjAyYjtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWFjdGlvbi5kaXNhYmxlZCB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgY29sb3I6IHJnYmEoMjU0LCAyNTQsIDI1NCwgMC40KTtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWFjdGlvbi5kaXNhYmxlZDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2NDg3MjE7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24uYWN0aXZlIHtcbiAgY29sb3I6ICNkZWZmNDI7XG4gIGJhY2tncm91bmQtY29sb3I6ICM3MzliMjY7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24uYWN0aXZlOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyYjAyYjtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LXNlbGVjdGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDEzNSwgMzMsIDAuMDgpO1xufVxuLmxheW91dC1lZGl0b3IgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0IHtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDEycHggNnB4IHJnYmEoMTAwLCAxMzUsIDMzLCAwLjUpO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDtcbiAgbWluLWhlaWdodDogNzhweDtcbiAgYm9yZGVyOiAycHggZGFzaGVkICM2NDg3MjEgIWltcG9ydGFudDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDEzNSwgMzMsIDAuMTYpO1xufVxuLmxheW91dC1lZGl0b3IgLm1lZGlhLXRodW1ibmFpbCBpbWcge1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRhaW5lci1jaGlsZHJlbi1wbGFjZWhvbGRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbjogMTFweDtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYm9yZGVyOiAxcHggZGFzaGVkIHJnYmEoMTI0LCAxMjQsIDEyNCwgMC40KTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBwYWRkaW5nOiAxMnB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIG9wYWNpdHk6IDAuNjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250YWluZXIgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4ge1xuICBwYWRkaW5nOiAxMnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250YWluZXIgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29udGFpbmVyKSArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpIHtcbiAgbWFyZ2luLXRvcDogMTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLnVpLXNvcnRhYmxlLWhlbHBlcjpmaXJzdC1jaGlsZCArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIubGF5b3V0LWNvbnRhaW5lci1lbXB0eSA+IC5sYXlvdXQtY29udGFpbmVyLWNoaWxkcmVuLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIubGF5b3V0LWNvbnRhaW5lci1lbXB0eSA+IC5sYXlvdXQtY2hpbGRyZW4ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1jb250YWluZXIubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXI6IDFweCBkYXNoZWQgcmdiYSgxMjQsIDEyNCwgMTI0LCAwLjYpO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcbiAgbWFyZ2luOiAtMXB4O1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1jb250YWluZXIgKyAubGF5b3V0LWNvbnRhaW5lcjpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXItdG9wOiAwO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1jb250YWluZXIgKyAubGF5b3V0LWNvbnRhaW5lcjpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY2FudmFzICNkdW1teSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcm93LmxheW91dC1lbGVtZW50LWZvY3VzZWQ6bm90KC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0KSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXItdG9wOiAxcHggZGFzaGVkIHJnYmEoMTI0LCAxMjQsIDEyNCwgMC42KSAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1yb3cubGF5b3V0LWVsZW1lbnQtZm9jdXNlZDpub3QoLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcbiAgbWFyZ2luLXRvcDogLTFweCAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1yb3cubGF5b3V0LWVsZW1lbnQtZm9jdXNlZDpub3QoLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50ICsgLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XG4gIGJvcmRlci1sZWZ0OiAwICFpbXBvcnRhbnQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXJvdy5sYXlvdXQtZWxlbWVudC1mb2N1c2VkOm5vdCgubGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldCkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWVsZW1lbnQgKyAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xuICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbHVtbiA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMzA7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTAwJTtcbiAgY3Vyc29yOiBjb2wtcmVzaXplO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb2x1bW4gPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXItbGVmdCB7XG4gIGxlZnQ6IC02cHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbHVtbiA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhci1yaWdodCB7XG4gIHJpZ2h0OiAtNnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb2x1bW4ubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwge1xuICBtaW4taGVpZ2h0OiAxZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB7XG4gIHBhZGRpbmc6IDJweDtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAvKiB0aGlzIGNvbG9yIGlzIGp1c3QgYSBzdWdnZXN0aW9uIGFuZCBjYW4gYmUgY2hhbmdlZCBiYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBmZWVkYmFjayAqL1xuICAvKiB0aGlzIGFsc28gaGFzIGJpZGkgaW1wbGljYXRpb25zICovXG4gIC8qIHRoaXMgYWxzbyBoYXMgYmlkaSBpbXBsaWNhdGlvbnMgKi9cbiAgLyogTFRSLXNwZWNpZmljOiB1c2UgJ21hcmdpbi1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xuICAvKiBMVFItc3BlY2lmaWM6IHVzZSAncGFkZGluZy1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xuICAvKnRhYmxlW3J1bGVzPW5vbmUgaV0sIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSwgdGFibGVbcnVsZXM9cm93cyBpXSxcbnRhYmxlW3J1bGVzPWNvbHMgaV0sIHRhYmxlW3J1bGVzPWFsbCBpXSwgdGFibGVbZnJhbWU9dm9pZCBpXSxcbnRhYmxlW2ZyYW1lPWFib3ZlIGldLCB0YWJsZVtmcmFtZT1iZWxvdyBpXSwgdGFibGVbZnJhbWU9aHNpZGVzIGldLFxudGFibGVbZnJhbWU9bGhzIGldLCB0YWJsZVtmcmFtZT1yaHMgaV0sIHRhYmxlW2ZyYW1lPXZzaWRlcyBpXSxcbnRhYmxlW2ZyYW1lPWJveCBpXSwgdGFibGVbZnJhbWU9Ym9yZGVyIGldLFxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1ub25lIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0aGVhZCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRoZWFkID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGJvZHkgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9cm93cyBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1hbGwgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRmb290ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1jb2xzIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdGZvb3QgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9YWxsIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1hbGwgaV0gPiB0Zm9vdCA+IHRyID4gdGgge1xuICAgIGJvcmRlci1jb2xvcjogYmxhY2s7XG59Ki9cbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgKixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgKiB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsb2NrcXVvdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsb2NrcXVvdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNlbnRlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY2VudGVyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXYsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpdixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZmlndXJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ2NhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ2NhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZvb3Rlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZm9vdGVyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmb3JtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmb3JtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoZWFkZXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhlYWRlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaHIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsZWdlbmQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxlZ2VuZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwbGFpbnRleHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcHJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHhtcCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ3VyZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwbGFpbnRleHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcHJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHhtcCB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ3VyZSB7XG4gIG1hcmdpbi1sZWZ0OiA0MHB4O1xuICBtYXJnaW4tcmlnaHQ6IDQwcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3Mge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxpc3RpbmcsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxpc3RpbmcsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHBsYWludGV4dCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwcmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgeG1wLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICB3aGl0ZS1zcGFjZTogcHJlO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjaXRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjaXRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZm4sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRmbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZW0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGVtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB2YXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHZhciB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3Ryb25nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBrYmQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGtiZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2FtcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2FtcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHR0IHtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYmlnLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBiaWcge1xuICBmb250LXNpemU6IGxhcmdlcjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc21hbGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNtYWxsIHtcbiAgZm9udC1zaXplOiBzbWFsbGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdWIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1YiB7XG4gIHZlcnRpY2FsLWFsaWduOiBzdWI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1cCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3VwIHtcbiAgdmVydGljYWwtYWxpZ246IHN1cGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdWIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1Yixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdXAge1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBmb250LXNpemU6IHNtYWxsZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ1YnksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ1Ynkge1xuICBkaXNwbGF5OiBydWJ5O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCByYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmIge1xuICBkaXNwbGF5OiBydWJ5LWJhc2U7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydCB7XG4gIGRpc3BsYXk6IHJ1YnktdGV4dDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZm9udC1zaXplOiA1MCU7XG4gIGZvbnQtdmFyaWFudC1lYXN0LWFzaWFuOiBydWJ5O1xuICB0ZXh0LWVtcGhhc2lzOiBub25lO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCByYmMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiYyB7XG4gIGRpc3BsYXk6IHJ1YnktYmFzZS1jb250YWluZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0Yyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnRjIHtcbiAgZGlzcGxheTogcnVieS10ZXh0LWNvbnRhaW5lcjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnVieSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnVieSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiYyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmJjLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydGMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0YyB7XG4gIHVuaWNvZGUtYmlkaTogaXNvbGF0ZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmxpbmssXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDpsaW5rIHtcbiAgY29sb3I6ICMwMDAwRUU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDp2aXNpdGVkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6dmlzaXRlZCB7XG4gIGNvbG9yOiAjNTUxQThCO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6bGluayxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmxpbmssXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDp2aXNpdGVkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6dmlzaXRlZCB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhOmxpbmtbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYTpsaW5rW3JlbH49aGVscF0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGE6dmlzaXRlZFtyZWx+PWhlbHBdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhOnZpc2l0ZWRbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYXJlYTpsaW5rW3JlbH49aGVscF0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFyZWE6bGlua1tyZWx+PWhlbHBdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhcmVhOnZpc2l0ZWRbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYXJlYTp2aXNpdGVkW3JlbH49aGVscF0ge1xuICBjdXJzb3I6IGhlbHA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDpmb2N1cyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmZvY3VzIHtcbiAgb3V0bGluZTogYXV0bztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbWFyayxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbWFyayB7XG4gIGJhY2tncm91bmQ6IHllbGxvdztcbiAgY29sb3I6IGJsYWNrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhYmJyW3RpdGxlXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYWJiclt0aXRsZV0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFjcm9ueW1bdGl0bGVdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhY3JvbnltW3RpdGxlXSB7XG4gIHRleHQtZGVjb3JhdGlvbjogZG90dGVkIHVuZGVybGluZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5zLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHUge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN0cmlrZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3RyaWtlIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsaW5rLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibGluayB7XG4gIHRleHQtZGVjb3JhdGlvbjogYmxpbms7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHE6OmJlZm9yZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcTo6YmVmb3JlIHtcbiAgY29udGVudDogb3Blbi1xdW90ZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcTo6YWZ0ZXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHE6OmFmdGVyIHtcbiAgY29udGVudDogY2xvc2UtcXVvdGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJyOjpiZWZvcmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJyOjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxBJztcbiAgd2hpdGUtc3BhY2U6IHByZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbm9icixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbm9iciB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHdicixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgd2JyIHtcbiAgY29udGVudDogJ1xcMjAwQic7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG5vYnIgd2JyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBub2JyIHdiciB7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFydGljbGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFydGljbGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFzaWRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhc2lkZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDEsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgxLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgzLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaGdyb3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoZ3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG5hdixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbmF2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzZWN0aW9uLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzZWN0aW9uIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgxLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMSB7XG4gIG1hcmdpbi10b3A6IDAuNjdlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC42N2VtO1xuICBmb250LXNpemU6IDIuMDBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMiB7XG4gIG1hcmdpbi10b3A6IDAuODNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC44M2VtO1xuICBmb250LXNpemU6IDEuNTBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgzLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMyB7XG4gIG1hcmdpbi10b3A6IDEuMDBlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS4wMGVtO1xuICBmb250LXNpemU6IDEuMTdlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNCB7XG4gIG1hcmdpbi10b3A6IDEuMzNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS4zM2VtO1xuICBmb250LXNpemU6IDEuMDBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg1LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNSB7XG4gIG1hcmdpbi10b3A6IDEuNjdlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS42N2VtO1xuICBmb250LXNpemU6IDAuODNlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNiB7XG4gIG1hcmdpbi10b3A6IDIuMzNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMi4zM2VtO1xuICBmb250LXNpemU6IDAuNjdlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGR0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsaSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGkge1xuICBkaXNwbGF5OiBsaXN0LWl0ZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHtcbiAgbWFyZ2luLXRvcDogMWVtO1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGQge1xuICBtYXJnaW4tbGVmdDogNDBweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHtcbiAgcGFkZGluZy1sZWZ0OiA0MHB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wge1xuICBsaXN0LXN0eWxlLXR5cGU6IGRlY2ltYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwge1xuICBsaXN0LXN0eWxlLXR5cGU6IGRpc2M7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHVsIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwgdWwge1xuICBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlIHtcbiAgZGlzcGxheTogdGFibGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNhcHRpb24ge1xuICBkaXNwbGF5OiB0YWJsZS1jYXB0aW9uO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sZ3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbGdyb3VwW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbGdyb3VwW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW4tZ3JvdXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW47XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aGVhZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWRbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWRbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keVtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keVtoaWRkZW5dIHtcbiAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGZvb3QsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1mb290ZXItZ3JvdXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHJbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHJbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IHRhYmxlLXJvdztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cFtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cFtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0ge1xuICB2aXNpYmlsaXR5OiBjb2xsYXBzZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXNwYWNpbmc6IDJweDtcbiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbiAgdGV4dC1pbmRlbnQ6IGluaXRpYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoIHtcbiAgcGFkZGluZzogMXB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUgPiB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUgPiB0ciB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgge1xuICB2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCB7XG4gIGJvcmRlci1jb2xvcjogZ3JheTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyIHtcbiAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNlbGVjdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2VsZWN0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9wdGlvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb3B0Z3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9wdGdyb3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBidXR0b24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGV4dGFyZWEsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRleHRhcmVhLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBrZXlnZW4sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGtleWdlbiB7XG4gIHRleHQtaW5kZW50OiBpbml0aWFsO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZXh0YXJlYSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGV4dGFyZWEge1xuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dFt0eXBlPVwicmVzZXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNlbGVjdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2VsZWN0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBidXR0b24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYnV0dG9uIHtcbiAgcGFkZGluZzogMC4zZW0gMC41ZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBociB7XG4gIGNvbG9yOiBncmF5O1xuICBib3JkZXItc3R5bGU6IGluc2V0O1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgbWFyZ2luOiAwLjVlbSBhdXRvO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWVsZHNldCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZmllbGRzZXQge1xuICBtYXJnaW4tbGVmdDogMnB4O1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgYm9yZGVyOiBncm9vdmUgMnB4IFRocmVlREZhY2U7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGVnZW5kLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsZWdlbmQge1xuICBwYWRkaW5nLWxlZnQ6IDJweDtcbiAgcGFkZGluZy1yaWdodDogMnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA+ICo6Zmlyc3QtY2hpbGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gKjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAqOmxhc3QtY2hpbGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gKjpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50LmxheW91dC1jb250ZW50LWltYWdlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gaW1nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sLmxheW91dC1jb250ZW50LWltYWdlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gaW1nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50LmxheW91dC1jb250ZW50LXZlY3Rvci1pbWFnZSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb250ZW50LW1hcmt1cCA+IGltZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbC5sYXlvdXQtY29udGVudC12ZWN0b3ItaW1hZ2UgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiBpbWcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmxheW91dC1lZGl0b3IgLmltZy1yZXNwb25zaXZlLFxuLmxheW91dC1lZGl0b3IgLmltZy1yZXNwb25zaXZlIGltZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbmJvZHkgLmxheW91dC10b29sYm94LWl0ZW0ge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNWU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBwYWRkaW5nOiA5cHggMTJweDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG59XG5ib2R5IC5sYXlvdXQtdG9vbGJveC1pdGVtIGkge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxNnB4O1xuICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAxNHB4LzEgRm9udEF3ZXNvbWU7XG59XG5ib2R5IC5sYXlvdXQtdG9vbGJveC1pdGVtICsgLmxheW91dC10b29sYm94LWl0ZW0ge1xuICBtYXJnaW4tdG9wOiA0cHg7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyIHtcbiAgbWFyZ2luLWxlZnQ6IDEycHg7XG4gIHdpZHRoOiAyMThweDtcbiAgLXdlYmtpdC1mbGV4LXNocmluazogMDtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICAvKiBmb3JjaW5nIHRoZSB0b29sYm94IGhlaWdodCB0byBiZSBzbWFsbGVyIHRoYW4gdGhlIHZpZXdwb3J0IGhlaWdodFxuICAgICAgICAgICAgc28gaXQgaXMgYWx3YXlzIHZpc2libGUgYW5kIHNjcm9sbGFibGUqL1xuICBtYXgtaGVpZ2h0OiBjYWxjKDIwdmgpO1xuICBvdmVyZmxvdy14OiBjbGlwO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICAvKiBmb3JjaW5nIHRoZSB0b29sYm94IHRvIHN0YXkgc3RpY2tlZCBhdCB0aGUgdGhlIHRvcCBvZiBpdHMgY29udGFpbmVyICovXG4gIHBvc2l0aW9uOiAtd2Via2l0LXN0aWNreTtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgdG9wOiAwO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogMnB4O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMCA2cHggIzAwMDAwMDtcbiAgYm9yZGVyLXJhZGl1czogMXB4O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U0ZTVlNjtcbiAgd2lkdGg6IDIyMHB4O1xuICBtaW4taGVpZ2h0OiA0MDBweDtcbiAgcGFkZGluZzogNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmNGY1O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveC5zdGlja3ktdG9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94LnN0aWNreS1ib3R0b20ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIHtcbiAgbWFyZ2luLXRvcDogMTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIC5sYXlvdXQtdG9vbGJveC1ncm91cC1oZWFkaW5nIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAgLmxheW91dC10b29sYm94LWdyb3VwLWhlYWRpbmc6YmVmb3JlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMTBweDtcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XG4gIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb250ZW50OiBcIlxcZjBkN1wiO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAuY29sbGFwc2VkIC5sYXlvdXQtdG9vbGJveC1ncm91cC1oZWFkaW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGRhXCI7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cC5jb2xsYXBzZWQgLmxheW91dC10b29sYm94LWl0ZW1zIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIC5sYXlvdXQtdG9vbGJveC1zZWN0aW9uICsgLmxheW91dC10b29sYm94LXNlY3Rpb24ge1xuICBtYXJnaW4tdG9wOiA0cHg7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCAubGF5b3V0LXRvb2xib3gtaXRlbSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNGU1ZTY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIHBhZGRpbmc6IDlweCAxMnB4O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCAubGF5b3V0LXRvb2xib3gtaXRlbSBpIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMTZweDtcbiAgZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAgLmxheW91dC10b29sYm94LWl0ZW0gKyAubGF5b3V0LXRvb2xib3gtaXRlbSB7XG4gIG1hcmdpbi10b3A6IDRweDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwICsgLmxheW91dC10b29sYm94LWdyb3VwIHtcbiAgbWFyZ2luLXRvcDogNnB4O1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW46IDA7XG4gIC1tb3otYm94LXNoYWRvdzogM3B4IDNweCAxMXB4IDAgcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDNweCAzcHggMTFweCAwIHJnYmEoNTAsIDUwLCA1MCwgMC41KTtcbiAgYm94LXNoYWRvdzogM3B4IDNweCAxMXB4IDAgcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNWU2O1xuICBwYWRkaW5nOiAycHggMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNztcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgei1pbmRleDogMjA7XG4gIGNvbG9yOiAjN2M3YzdjO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIG1pbi13aWR0aDogMzAwcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwLndpZGUge1xuICB3aWR0aDogNjAwcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtZmxleCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDJweCA1cHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtZmxleCAubGF5b3V0LXBvcHVwLWNvbHVtbiArIC5sYXlvdXQtcG9wdXAtY29sdW1uIHtcbiAgbWFyZ2luLWxlZnQ6IDRweDtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2JhKDEyOCwgMTI4LCAxMjgsIDAuMTUpO1xuICBwYWRkaW5nLWxlZnQ6IDRweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1pdGVtIHtcbiAgcGFkZGluZzogNHB4IDZweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1sYWJlbCB7XG4gIGZvbnQtc2l6ZTogMC45ZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzdjN2M3Yztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1hY3Rpb246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmNGY1O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtaW5wdXQgaW5wdXRbdHlwZT0ndGV4dCddLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCAubGF5b3V0LXBvcHVwLWlucHV0IHRleHRhcmVhIHtcbiAgd2lkdGg6IDEwMCU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtaW5wdXQgPiBsYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDAuOWVtO1xufVxuIiwiQGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvci10b29sYmFyIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB0b3A6IDEwcHg7XHJcblxyXG4gICAgLmxheW91dC1lZGl0b3ItdG9vbGJhci1ncm91cCB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuXHJcbiAgICAgICAgPiBsaSArIGxpIHtcclxuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEycHg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgbWFyZ2luLXRvcDogMWVtO1xyXG4gICAgZm9udC1zaXplOiBAZm9udC1zaXplO1xyXG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XHJcblxyXG4gICAgPiAubGF5b3V0LWNhbnZhcy13cmFwcGVyIHtcclxuICAgICAgICBmbGV4LWdyb3c6IDE7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGdyYXktYmc7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgQGdyYXktYm9yZGVyO1xyXG5cclxuICAgICAgICA+IC5sYXlvdXQtdG9vbGJhci1jb250YWluZXIge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgICAgICBtYXJnaW46IEBjb250YWluZXItcGFkZGluZyBAY29udGFpbmVyLXBhZGRpbmcgMDtcclxuICAgICAgICAgICAgbWluLWhlaWdodDogNzFweDtcclxuXHJcbiAgICAgICAgICAgID4gLm1jZS1wYW5lbCB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gLmxheW91dC1wbGFjZWhvbGRlciB7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCAjY2NjO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAwLjJlbSAwLjRlbTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogI2U4ZThlODtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLmxheW91dC1zbmlwcGV0IHtcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjZThlOGU4O1xyXG4gICAgfVxyXG59XHJcblxyXG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG5cclxuICAgIC5oZWxwLXJvdyB7XHJcbiAgICAgICAgJjpiZWZvcmUsICY6YWZ0ZXIge1xyXG4gICAgICAgICAgICBjb250ZW50OiBcIiBcIjsgLy8gMVxyXG4gICAgICAgICAgICBkaXNwbGF5OiB0YWJsZTsgLy8gMlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJjphZnRlciB7XHJcbiAgICAgICAgICAgIGNsZWFyOiBib3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPiAuaGVscC1jb2x1bW4tZnVsbCwgPiAuaGVscC1jb2x1bW4taGFsZiB7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMC41ZW0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgID4gLmhlbHAtY29sdW1uLWhhbGYge1xyXG4gICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcclxuICAgICAgICAgICAgd2lkdGg6IDUwJTtcclxuXHJcbiAgICAgICAgICAgICY6bnRoLWNoaWxkKDJuKSB7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xyXG4gICAgICAgICAgICAgICAgY2xlYXI6IGxlZnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICsgLmhlbHAtcm93IHtcclxuICAgICAgICAgICAgbWFyZ2luLXRvcDogMWVtO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb2RlIHtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjRmNTtcclxuICAgICAgICBwYWRkaW5nOiAycHggNHB4O1xyXG4gICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XHJcbiAgICB9XHJcblxyXG4gICAgcCB7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNmVtO1xyXG4gICAgfVxyXG5cclxuICAgIHRhYmxlID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkIHtcclxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xyXG4gICAgfVxyXG59XHJcbiIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgLmxheW91dC1lbGVtZW50IHtcclxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcclxuICAgICAgICBwYWRkaW5nOiAwO1xyXG5cclxuICAgICAgICAvLyBXZSBkb24ndCBmdWNrIHdpdGggdGhlIGxlZnQgbWFyZ2luIG9mIGNvbHVtbnMsIGJlY2F1c2UgQm9vdHN0cmFwIHVzZXMgdGhlc2UgdG8gcmVuZGVyIGNvbHVtbiBvZmZzZXRzLlxyXG4gICAgICAgICY6bm90KC5sYXlvdXQtY29sdW1uKSB7XHJcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgID4gLmxheW91dC1wYW5lbCB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lOyAvLyBTaG93biBvbmx5IGluIGFjdGl2ZSBvciBmb2N1c2VkIHN0YXRlcy5cclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAgICAgICAgIHotaW5kZXg6IDIwO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyNXB4O1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCA2cHg7XHJcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xyXG4gICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyNXB4O1xyXG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtcGFuZWwtaXRlbSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjVweDtcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxcHggNnB4IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LXBhbmVsLWxhYmVsIHtcclxuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IEBmb250LXNpemUgLSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1wYW5lbC1hY3Rpb24ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7IC8vIFNob3duIG9ubHkgaW4gZm9jdXNlZCBzdGF0ZS5cclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjhweDtcclxuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtcGFuZWwtbWFpbiB7XHJcbiAgICAgICAgICAgICAgICB0b3A6IC0yN3B4O1xyXG4gICAgICAgICAgICAgICAgbGVmdDogLTJweDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBXaGVuIGRyYWdnaW5nIGZyb20gdG9vbGJveCwgZWxlbWVudHMgd2lsbCBiZSBsaSByYXRoZXIgdGhhbiBkaXYuXHJcbiAgICBsaS5sYXlvdXQtZWxlbWVudCB7XHJcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcclxuICAgIH1cclxuXHJcbiAgICAmOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykge1xyXG5cclxuICAgICAgICAubGF5b3V0LWVsZW1lbnQtYWN0aXZlLCAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCB7XHJcbiAgICAgICAgICAgIGJvcmRlci13aWR0aDogMnB4O1xyXG4gICAgICAgICAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW46IC0ycHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUge1xyXG4gICAgICAgICAgICBAYWN0aXZlLWhpZ2hsaWdodDogZmFkZSgjNjg2ODY4LCAxMCUpO1xyXG5cclxuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBAYWN0aXZlLWhpZ2hsaWdodDtcclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsLW1haW4ge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7IC8vIFRvIHJldmVhbC5cclxuICAgICAgICAgICAgICAgIHotaW5kZXg6IDMwO1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGFjdGl2ZS1oaWdobGlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkIHtcclxuICAgICAgICAgICAgQGZvY3VzZWQtaGlnaGxpZ2h0OiAjNjQ4NzIxO1xyXG4gICAgICAgICAgICBAZm9jdXNlZC10ZXh0OiAjZmVmZWZlO1xyXG5cclxuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBAZm9jdXNlZC1oaWdobGlnaHQ7XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jazsgLy8gVG8gcmV2ZWFsLlxyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGZvY3VzZWQtaGlnaGxpZ2h0O1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IEBmb2N1c2VkLXRleHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LXBhbmVsLWFjdGlvbiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAvLyBUbyByZXZlYWwuXHJcbiAgICAgICAgICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0ZW4oQGZvY3VzZWQtaGlnaGxpZ2h0LCAxMCUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJi5kaXNhYmxlZCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGZhZGUoQGZvY3VzZWQtdGV4dCwgNDAlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICY6aG92ZXIge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGZvY3VzZWQtaGlnaGxpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAmLmFjdGl2ZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBsaWdodGVuKHNhdHVyYXRlKHNwaW4oQGZvY3VzZWQtaGlnaGxpZ2h0LCAtMTApLCAxMDAlKSwgMzAlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbihAZm9jdXNlZC1oaWdobGlnaHQsIDUlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICY6aG92ZXIge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbihAZm9jdXNlZC1oaWdobGlnaHQsIDEwJSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtZWxlbWVudC1zZWxlY3RlZCB7XHJcbiAgICAgICAgICAgIEBzZWxlY3RlZC1oaWdobGlnaHQ6ICM2NDg3MjE7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGZhZGUoQHNlbGVjdGVkLWhpZ2hsaWdodCwgOCUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAudWktc29ydGFibGUtcGxhY2Vob2xkZXIge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQge1xyXG4gICAgICAgIEBkcm9wdGFyZ2V0LWhpZ2hsaWdodDogIzY0ODcyMTtcclxuICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMTJweCA2cHggZmFkZShAZHJvcHRhcmdldC1oaWdobGlnaHQsIDUwJSk7XHJcblxyXG4gICAgICAgIC51aS1zb3J0YWJsZS1wbGFjZWhvbGRlciB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOyAvLyBUbyByZXZlYWwuXHJcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgbWluLWhlaWdodDogQGVsZW1lbnQtbWluLWhlaWdodCAtIDJweDtcclxuICAgICAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkIEBkcm9wdGFyZ2V0LWhpZ2hsaWdodCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBmYWRlKEBkcm9wdGFyZ2V0LWhpZ2hsaWdodCwgMTYlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQSBDU1MgZml4IGZvciBtZWRpYSBpdGVtIGVsZW1lbnRzLlxyXG4gICAgLm1lZGlhLXRodW1ibmFpbCB7XHJcbiAgICAgICAgaW1nIHtcclxuICAgICAgICAgICAgbWF4LXdpZHRoOjEwMCU7XHJcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgLmxheW91dC1jb250YWluZXIge1xyXG5cclxuICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1jb250YWluZXItY2hpbGRyZW4tcGxhY2Vob2xkZXIge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgICAgICAgICAgICBtYXJnaW46IEBjb250YWluZXItcGFkZGluZyAtIDFweDtcclxuICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IEBlbGVtZW50LW1pbi1oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBkYXNoZWQgZmFkZShAZ3JheS10ZXh0LCA0MCUpO1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZzogQGNvbnRhaW5lci1wYWRkaW5nO1xyXG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IEBmb250LXNpemUgLSAxO1xyXG4gICAgICAgICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMC42O1xyXG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtY2hpbGRyZW4ge1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZzogQGNvbnRhaW5lci1wYWRkaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEFsbCBhZGphY2VudCBub24tY29udGFpbmVyIGNoaWxkcmVuIG5lZWQgc29tZSBzcGFjZSBiZXR3ZWVuLi4uXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpICsgLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IEBjb250ZW50LXNwYWNpbmc7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gLi4uIGV4Y2VwdCB3aGVuIGpRdWVyeSBVSSBzb3J0YWJsZSBoZWxwZXIgaXMgdGhlIGZpcnN0IGVsZW1lbnQgKGJlY2F1c2UgdGhhdCBvbmUgaXMgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGFuZCBcImZsb2F0aW5nXCIpLlxyXG4gICAgICAgICAgICAgICAgPiAudWktc29ydGFibGUtaGVscGVyOmZpcnN0LWNoaWxkICsgLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICYubGF5b3V0LWNvbnRhaW5lci1lbXB0eSB7XHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtY29udGFpbmVyLWNoaWxkcmVuLXBsYWNlaG9sZGVyIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4OyAvLyBUbyByZXZlYWwuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWNoaWxkcmVuIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICY6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSB7XHJcbiAgICAgICAgLmxheW91dC1jb250YWluZXIubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiB7XHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBkYXNoZWQgZmFkZShAZ3JheS10ZXh0LCA2MCUpO1xyXG5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogLTFweDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWNvbnRhaW5lciArIC5sYXlvdXQtY29udGFpbmVyOm5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wOiAwO1xyXG5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiQGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICAubGF5b3V0LWNhbnZhcyB7XHJcbiAgICAgICAgI2R1bW15IHsgLy8gT25seSBhZGRlZCBiZWNhdXNlIFdFIGRvZXNuJ3QgY29tcGlsZSBpZiB0aGVyZSBhcmUgbm8gcnVsZXMuXHJcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiQGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICAubGF5b3V0LXJvdyB7XHJcbiAgICAgICAgJi5sYXlvdXQtZWxlbWVudC1mb2N1c2VkOm5vdCgubGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldCkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4ge1xyXG4gICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCBmYWRlKEBncmF5LXRleHQsIDYwJSkgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IC0xcHggIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQgKyAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiQGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICAubGF5b3V0LWNvbHVtbiB7XHJcbiAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgICAgei1pbmRleDogMzA7XHJcbiAgICAgICAgICAgICAgICB0b3A6IDA7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMTZweDtcclxuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyLWxlZnQge1xyXG4gICAgICAgICAgICAgICAgbGVmdDogLTZweDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyLXJpZ2h0IHtcclxuICAgICAgICAgICAgICAgIHJpZ2h0OiAtNnB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXIge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiQGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcbkBpbXBvcnQgXCJSZXNldC5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICAubGF5b3V0LWNvbnRlbnQsIC5sYXlvdXQtaHRtbCB7XHJcbiAgICAgICAgbWluLWhlaWdodDogMWVtO1xyXG5cclxuICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgLmxheW91dC1jb250ZW50LW1hcmt1cCB7XHJcblxyXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMnB4O1xyXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xyXG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBSZXNldCB0byBIVE1MNSBXM0Mgc3RhbmRhcmQgZGVmYXVsdCBzdHlsaW5nIHdpdGhpbiBjb250ZW50LlxyXG4gICAgICAgICAgICAgICAgLnJlc2V0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgPiAqOmZpcnN0LWNoaWxkIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7IC8vIEltcG9ydGFudCBiZWNhdXNlIHNpdGUuY3NzIG9mIHRoZSBhZG1pbiB0aGVtZSBzdHlsZXMgaGVhZGluZyBtYXJnaW5zIHdpdGggYSB2ZXJ5IGhpZ2ggc3BlY2lmaWNpdHkuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgPiAqOmxhc3QtY2hpbGQge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5sYXlvdXQtY29udGVudC1pbWFnZSwgJi5sYXlvdXQtY29udGVudC12ZWN0b3ItaW1hZ2Uge1xyXG4gICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb250ZW50LW1hcmt1cCA+IGltZyB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5pbWctcmVzcG9uc2l2ZSwgLmltZy1yZXNwb25zaXZlIGltZyB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xyXG4gICAgICAgIGhlaWdodDogYXV0bztcclxuICAgIH1cclxufVxyXG4iLCLvu78ucmVzZXQoKSB7XHJcblxyXG4gICAgKiB7XHJcbiAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkcmVzcywgYmxvY2txdW90ZSwgY2VudGVyLCBkaXYsIGZpZ3VyZSwgZmlnY2FwdGlvbiwgZm9vdGVyLCBmb3JtLFxyXG4gICAgaGVhZGVyLCBociwgbGVnZW5kLCBsaXN0aW5nLCBwLCBwbGFpbnRleHQsIHByZSwgeG1wIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIH1cclxuXHJcbiAgICBibG9ja3F1b3RlLCBmaWd1cmUsIGxpc3RpbmcsIHAsIHBsYWludGV4dCwgcHJlLCB4bXAge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDFlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxZW07XHJcbiAgICB9XHJcblxyXG4gICAgYmxvY2txdW90ZSwgZmlndXJlIHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogNDBweDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDQwcHg7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkcmVzcyB7XHJcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG4gICAgfVxyXG5cclxuICAgIGxpc3RpbmcsIHBsYWludGV4dCwgcHJlLCB4bXAge1xyXG4gICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTtcclxuICAgIH1cclxuXHJcbiAgICBjaXRlLCBkZm4sIGVtLCBpLCB2YXIge1xyXG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcclxuICAgIH1cclxuXHJcbiAgICBiLCBzdHJvbmcge1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgY29kZSwga2JkLCBzYW1wLCB0dCB7XHJcbiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcclxuICAgIH1cclxuXHJcbiAgICBiaWcge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogbGFyZ2VyO1xyXG4gICAgfVxyXG5cclxuICAgIHNtYWxsIHtcclxuICAgICAgICBmb250LXNpemU6IHNtYWxsZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc3ViIHtcclxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogc3ViO1xyXG4gICAgfVxyXG5cclxuICAgIHN1cCB7XHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHN1cGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHN1Yiwgc3VwIHtcclxuICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogc21hbGxlcjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcnVieSB7XHJcbiAgICAgICAgZGlzcGxheTogcnVieTtcclxuICAgIH1cclxuXHJcbiAgICByYiB7XHJcbiAgICAgICAgZGlzcGxheTogcnVieS1iYXNlO1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICB9XHJcblxyXG4gICAgcnQge1xyXG4gICAgICAgIGRpc3BsYXk6IHJ1YnktdGV4dDtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogNTAlO1xyXG4gICAgICAgIGZvbnQtdmFyaWFudC1lYXN0LWFzaWFuOiBydWJ5O1xyXG4gICAgICAgIHRleHQtZW1waGFzaXM6IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgcmJjIHtcclxuICAgICAgICBkaXNwbGF5OiBydWJ5LWJhc2UtY29udGFpbmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHJ0YyB7XHJcbiAgICAgICAgZGlzcGxheTogcnVieS10ZXh0LWNvbnRhaW5lcjtcclxuICAgIH1cclxuXHJcbiAgICBydWJ5LCByYiwgcnQsIHJiYywgcnRjIHtcclxuICAgICAgICB1bmljb2RlLWJpZGk6IGlzb2xhdGU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIDpsaW5rIHtcclxuICAgICAgICBjb2xvcjogIzAwMDBFRTtcclxuICAgIH1cclxuXHJcbiAgICA6dmlzaXRlZCB7XHJcbiAgICAgICAgY29sb3I6ICM1NTFBOEI7XHJcbiAgICB9XHJcblxyXG4gICAgOmxpbmssIDp2aXNpdGVkIHtcclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcclxuICAgIH1cclxuXHJcbiAgICBhOmxpbmtbcmVsfj1oZWxwXSwgYTp2aXNpdGVkW3JlbH49aGVscF0sXHJcbiAgICBhcmVhOmxpbmtbcmVsfj1oZWxwXSwgYXJlYTp2aXNpdGVkW3JlbH49aGVscF0ge1xyXG4gICAgICAgIGN1cnNvcjogaGVscDtcclxuICAgIH1cclxuXHJcbiAgICA6Zm9jdXMge1xyXG4gICAgICAgIG91dGxpbmU6IGF1dG87XHJcbiAgICB9XHJcblxyXG4gICAgbWFyayB7XHJcbiAgICAgICAgYmFja2dyb3VuZDogeWVsbG93O1xyXG4gICAgICAgIGNvbG9yOiBibGFjaztcclxuICAgIH1cclxuICAgIC8qIHRoaXMgY29sb3IgaXMganVzdCBhIHN1Z2dlc3Rpb24gYW5kIGNhbiBiZSBjaGFuZ2VkIGJhc2VkIG9uIGltcGxlbWVudGF0aW9uIGZlZWRiYWNrICovXHJcbiAgICBhYmJyW3RpdGxlXSwgYWNyb255bVt0aXRsZV0ge1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogZG90dGVkIHVuZGVybGluZTtcclxuICAgIH1cclxuXHJcbiAgICBpbnMsIHUge1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbCwgcywgc3RyaWtlIHtcclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcclxuICAgIH1cclxuXHJcbiAgICBibGluayB7XHJcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBibGluaztcclxuICAgIH1cclxuXHJcbiAgICBxOjpiZWZvcmUge1xyXG4gICAgICAgIGNvbnRlbnQ6IG9wZW4tcXVvdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcTo6YWZ0ZXIge1xyXG4gICAgICAgIGNvbnRlbnQ6IGNsb3NlLXF1b3RlO1xyXG4gICAgfVxyXG5cclxuICAgIGJyOjpiZWZvcmUge1xyXG4gICAgICAgIGNvbnRlbnQ6ICdcXEEnO1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7XHJcbiAgICB9XHJcbiAgICAvKiB0aGlzIGFsc28gaGFzIGJpZGkgaW1wbGljYXRpb25zICovXHJcbiAgICBub2JyIHtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgfVxyXG5cclxuICAgIHdiciB7XHJcbiAgICAgICAgY29udGVudDogJ1xcMjAwQic7XHJcbiAgICB9XHJcbiAgICAvKiB0aGlzIGFsc28gaGFzIGJpZGkgaW1wbGljYXRpb25zICovXHJcbiAgICBub2JyIHdiciB7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcclxuICAgIH1cclxuXHJcbiAgICBhcnRpY2xlLCBhc2lkZSwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgaGdyb3VwLCBuYXYsIHNlY3Rpb24ge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgfVxyXG5cclxuICAgIGgxIHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAwLjY3ZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC42N2VtO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMi4wMGVtO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIGgyIHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAwLjgzZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC44M2VtO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMS41MGVtO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIGgzIHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAxLjAwZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS4wMGVtO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMS4xN2VtO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIGg0IHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAxLjMzZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS4zM2VtO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMS4wMGVtO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIGg1IHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAxLjY3ZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS42N2VtO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMC44M2VtO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIGg2IHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAyLjMzZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMi4zM2VtO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMC42N2VtO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIGRpciwgZGQsIGRsLCBkdCwgb2wsIHVsIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIH1cclxuXHJcbiAgICBsaSB7XHJcbiAgICAgICAgZGlzcGxheTogbGlzdC1pdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIGRpciwgZGwsIG9sLCB1bCB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMWVtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTtcclxuICAgIH1cclxuXHJcbiAgICAgICAgZGlyIGRpciwgZGlyIGRsLCBkaXIgb2wsIGRpciB1bCxcclxuICAgICAgICBkbCBkaXIsIGRsIGRsLCBkbCBvbCwgZGwgdWwsXHJcbiAgICAgICAgb2wgZGlyLCBvbCBkbCwgb2wgb2wsIG9sIHVsLFxyXG4gICAgICAgIHVsIGRpciwgdWwgZGwsIHVsIG9sLCB1bCB1bCB7XHJcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XHJcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIGRkIHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogNDBweDtcclxuICAgIH1cclxuICAgIC8qIExUUi1zcGVjaWZpYzogdXNlICdtYXJnaW4tcmlnaHQnIGZvciBydGwgZWxlbWVudHMgKi9cclxuICAgIGRpciwgb2wsIHVsIHtcclxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7XHJcbiAgICB9XHJcbiAgICAvKiBMVFItc3BlY2lmaWM6IHVzZSAncGFkZGluZy1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xyXG4gICAgb2wge1xyXG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbDtcclxuICAgIH1cclxuXHJcbiAgICBkaXIsIHVsIHtcclxuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IGRpc2M7XHJcbiAgICB9XHJcblxyXG4gICAgICAgIGRpciBkaXIsIGRpciB1bCxcclxuICAgICAgICBvbCBkaXIsIG9sIHVsLFxyXG4gICAgICAgIHVsIGRpciwgdWwgdWwge1xyXG4gICAgICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkaXIgZGlyIGRpciwgZGlyIGRpciB1bCxcclxuICAgICAgICAgICAgZGlyIG9sIGRpciwgZGlyIG9sIHVsLFxyXG4gICAgICAgICAgICBkaXIgdWwgZGlyLCBkaXIgdWwgdWwsXHJcbiAgICAgICAgICAgIG9sIGRpciBkaXIsIG9sIGRpciB1bCxcclxuICAgICAgICAgICAgb2wgb2wgZGlyLCBvbCBvbCB1bCxcclxuICAgICAgICAgICAgb2wgdWwgZGlyLCBvbCB1bCB1bCxcclxuICAgICAgICAgICAgdWwgZGlyIGRpciwgdWwgZGlyIHVsLFxyXG4gICAgICAgICAgICB1bCBvbCBkaXIsIHVsIG9sIHVsLFxyXG4gICAgICAgICAgICB1bCB1bCBkaXIsIHVsIHVsIHVsIHtcclxuICAgICAgICAgICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogc3F1YXJlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgdGFibGUge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIGNhcHRpb24ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWNhcHRpb247XHJcbiAgICB9XHJcblxyXG4gICAgY29sZ3JvdXAsIGNvbGdyb3VwW2hpZGRlbl0ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWNvbHVtbi1ncm91cDtcclxuICAgIH1cclxuXHJcbiAgICBjb2wsIGNvbFtoaWRkZW5dIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jb2x1bW47XHJcbiAgICB9XHJcblxyXG4gICAgdGhlYWQsIHRoZWFkW2hpZGRlbl0ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDtcclxuICAgIH1cclxuXHJcbiAgICB0Ym9keSwgdGJvZHlbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwO1xyXG4gICAgfVxyXG5cclxuICAgIHRmb290LCB0Zm9vdFtoaWRkZW5dIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1mb290ZXItZ3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgdHIsIHRyW2hpZGRlbl0ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdztcclxuICAgIH1cclxuXHJcbiAgICB0ZCwgdGgsIHRkW2hpZGRlbl0sIHRoW2hpZGRlbl0ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XHJcbiAgICB9XHJcblxyXG4gICAgICAgIGNvbGdyb3VwW2hpZGRlbl0sIGNvbFtoaWRkZW5dLCB0aGVhZFtoaWRkZW5dLCB0Ym9keVtoaWRkZW5dLFxyXG4gICAgICAgIHRmb290W2hpZGRlbl0sIHRyW2hpZGRlbl0sIHRkW2hpZGRlbl0sIHRoW2hpZGRlbl0ge1xyXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBjb2xsYXBzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgdGFibGUge1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJweDtcclxuICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlO1xyXG4gICAgICAgIHRleHQtaW5kZW50OiBpbml0aWFsO1xyXG4gICAgfVxyXG5cclxuICAgIHRkLCB0aCB7XHJcbiAgICAgICAgcGFkZGluZzogMXB4O1xyXG4gICAgfVxyXG5cclxuICAgIHRoIHtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGVhZCwgdGJvZHksIHRmb290LCB0YWJsZSA+IHRyIHtcclxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgfVxyXG5cclxuICAgIHRyLCB0ZCwgdGgge1xyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBpbmhlcml0O1xyXG4gICAgfVxyXG5cclxuICAgIHRhYmxlLCB0ZCwgdGgge1xyXG4gICAgICAgIGJvcmRlci1jb2xvcjogZ3JheTtcclxuICAgIH1cclxuXHJcbiAgICB0aGVhZCwgdGJvZHksIHRmb290LCB0ciB7XHJcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xyXG4gICAgfVxyXG4gICAgLyp0YWJsZVtydWxlcz1ub25lIGldLCB0YWJsZVtydWxlcz1ncm91cHMgaV0sIHRhYmxlW3J1bGVzPXJvd3MgaV0sXHJcbnRhYmxlW3J1bGVzPWNvbHMgaV0sIHRhYmxlW3J1bGVzPWFsbCBpXSwgdGFibGVbZnJhbWU9dm9pZCBpXSxcclxudGFibGVbZnJhbWU9YWJvdmUgaV0sIHRhYmxlW2ZyYW1lPWJlbG93IGldLCB0YWJsZVtmcmFtZT1oc2lkZXMgaV0sXHJcbnRhYmxlW2ZyYW1lPWxocyBpXSwgdGFibGVbZnJhbWU9cmhzIGldLCB0YWJsZVtmcmFtZT12c2lkZXMgaV0sXHJcbnRhYmxlW2ZyYW1lPWJveCBpXSwgdGFibGVbZnJhbWU9Ym9yZGVyIGldLFxyXG50YWJsZVtydWxlcz1ub25lIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1hbGwgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1hbGwgaV0gPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1ub25lIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdGhlYWQgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0aGVhZCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRoZWFkID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9cm93cyBpXSA+IHRoZWFkID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRoZWFkID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9YWxsIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1hbGwgaV0gPiB0aGVhZCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Ym9keSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGJvZHkgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1yb3dzIGldID4gdGJvZHkgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdGJvZHkgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1jb2xzIGldID4gdGJvZHkgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdGJvZHkgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1hbGwgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRib2R5ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRmb290ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRmb290ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRmb290ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdGZvb3QgPiB0ciA+IHRoIHtcclxuICAgIGJvcmRlci1jb2xvcjogYmxhY2s7XHJcbn0qL1xyXG4gICAgaW5wdXQsIHNlbGVjdCwgb3B0aW9uLCBvcHRncm91cCwgYnV0dG9uLCB0ZXh0YXJlYSwga2V5Z2VuIHtcclxuICAgICAgICB0ZXh0LWluZGVudDogaW5pdGlhbDtcclxuICAgIH1cclxuXHJcbiAgICB0ZXh0YXJlYSB7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xyXG4gICAgfVxyXG5cclxuICAgIGlucHV0W3R5cGU9XCJyYWRpb1wiXSwgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLCBpbnB1dFt0eXBlPVwicmVzZXRcIl0sIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXHJcbiAgICBpbnB1dFt0eXBlPVwic3VibWl0XCJdLCBzZWxlY3QsIGJ1dHRvbiB7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIH1cclxuXHJcbiAgICBpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLCBidXR0b24ge1xyXG4gICAgICAgIHBhZGRpbmc6IDAuM2VtIDAuNWVtO1xyXG4gICAgfVxyXG5cclxuICAgIGhyIHtcclxuICAgICAgICBjb2xvcjogZ3JheTtcclxuICAgICAgICBib3JkZXItc3R5bGU6IGluc2V0O1xyXG4gICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xyXG4gICAgICAgIG1hcmdpbjogMC41ZW0gYXV0bztcclxuICAgIH1cclxuXHJcbiAgICBmaWVsZHNldCB7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDJweDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDJweDtcclxuICAgICAgICBib3JkZXI6IGdyb292ZSAycHggVGhyZWVERmFjZTtcclxuICAgICAgICBwYWRkaW5nOiAwLjM1ZW0gMC42MjVlbSAwLjc1ZW07XHJcbiAgICB9XHJcblxyXG4gICAgbGVnZW5kIHtcclxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDtcclxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAycHg7XHJcbiAgICB9XHJcbn1cclxuIiwiQGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG5ib2R5IHtcclxuICAgIC5sYXlvdXQtdG9vbGJveC1pdGVtIHtcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBAZ3JheS1ib3JkZXI7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgICAgICBwYWRkaW5nOiAoQGNvbnRhaW5lci1wYWRkaW5nIC0gMykgQGNvbnRhaW5lci1wYWRkaW5nO1xyXG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcclxuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XHJcblxyXG4gICAgICAgIGkge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxNnB4O1xyXG4gICAgICAgICAgICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAxNHB4LzEgRm9udEF3ZXNvbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICArIC5sYXlvdXQtdG9vbGJveC1pdGVtIHtcclxuICAgICAgICAgICAgbWFyZ2luLXRvcDogQGNvbnRhaW5lci1wYWRkaW5nIC8gMztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgID4gLmxheW91dC10b29sYm94LXdyYXBwZXIge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiBAY29udGFpbmVyLXBhZGRpbmc7XHJcbiAgICAgICAgd2lkdGg6IDIxOHB4O1xyXG4gICAgICAgIC13ZWJraXQtZmxleC1zaHJpbms6IDA7XHJcbiAgICAgICAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XHJcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XHJcbiAgICAgICAgLyogZm9yY2luZyB0aGUgdG9vbGJveCBoZWlnaHQgdG8gYmUgc21hbGxlciB0aGFuIHRoZSB2aWV3cG9ydCBoZWlnaHRcclxuICAgICAgICAgICAgc28gaXQgaXMgYWx3YXlzIHZpc2libGUgYW5kIHNjcm9sbGFibGUqL1xyXG4gICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA4MHB4KTtcclxuICAgICAgICBvdmVyZmxvdy14OiBjbGlwO1xyXG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgICAgLyogZm9yY2luZyB0aGUgdG9vbGJveCB0byBzdGF5IHN0aWNrZWQgYXQgdGhlIHRoZSB0b3Agb2YgaXRzIGNvbnRhaW5lciAqL1xyXG4gICAgICAgIHBvc2l0aW9uOiAtd2Via2l0LXN0aWNreTtcclxuICAgICAgICBwb3NpdGlvbjogc3RpY2t5O1xyXG4gICAgICAgIHRvcDogMDtcclxuXHJcbiAgICAgICAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xyXG4gICAgICAgICAgICB3aWR0aDogMnB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xyXG4gICAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMCA2cHggcmdiKDAsIDAsIDAsIC4zKTtcclxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMXB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLDAuMyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA+IC5sYXlvdXQtdG9vbGJveCB7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBncmF5LWJvcmRlcjtcclxuICAgICAgICAgICAgd2lkdGg6IDIyMHB4O1xyXG4gICAgICAgICAgICBtaW4taGVpZ2h0OiA0MDBweDtcclxuICAgICAgICAgICAgcGFkZGluZzogQGNvbnRhaW5lci1wYWRkaW5nIC8gMjtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGdyYXktYmc7XHJcblxyXG4gICAgICAgICAgICAmLnN0aWNreS10b3Age1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICAgICAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICYuc3RpY2t5LWJvdHRvbSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICBib3R0b206IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC5sYXlvdXQtdG9vbGJveC1ncm91cCB7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiBAY29udGFpbmVyLXBhZGRpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgLmxheW91dC10b29sYm94LWdyb3VwLWhlYWRpbmcge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IEBjb250YWluZXItcGFkZGluZyAvIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogQGNvbnRhaW5lci1wYWRkaW5nIC8gMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMGQ3XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICYuY29sbGFwc2VkIHtcclxuICAgICAgICAgICAgICAgICAgICAubGF5b3V0LXRvb2xib3gtZ3JvdXAtaGVhZGluZzpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjBkYVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLmxheW91dC10b29sYm94LWl0ZW1zIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLmxheW91dC10b29sYm94LXNlY3Rpb24gKyAubGF5b3V0LXRvb2xib3gtc2VjdGlvbiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogQGNvbnRhaW5lci1wYWRkaW5nIC8gMztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAubGF5b3V0LXRvb2xib3gtaXRlbSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgQGdyYXktYm9yZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogKEBjb250YWluZXItcGFkZGluZyAtIDMpIEBjb250YWluZXItcGFkZGluZztcclxuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNnB4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAxNHB4LzEgRm9udEF3ZXNvbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICArIC5sYXlvdXQtdG9vbGJveC1pdGVtIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogQGNvbnRhaW5lci1wYWRkaW5nIC8gMztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgKyAubGF5b3V0LXRvb2xib3gtZ3JvdXAge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IEBjb250YWluZXItcGFkZGluZyAvIDI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiQGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICAubGF5b3V0LXBvcHVwIHtcclxuICAgICAgICBkaXNwbGF5OiBub25lOyAvLyBTaG93biBvbmx5IGluIGFjdGl2ZSBvciBmb2N1c2VkIHN0YXRlcy5cclxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgIC1tb3otYm94LXNoYWRvdzogM3B4IDNweCAxMXB4IDAgcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xyXG4gICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogM3B4IDNweCAxMXB4IDAgcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xyXG4gICAgICAgIGJveC1zaGFkb3c6IDNweCAzcHggMTFweCAwIHJnYmEoNTAsIDUwLCA1MCwgMC41KTtcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBAZ3JheS1ib3JkZXI7XHJcbiAgICAgICAgcGFkZGluZzogMnB4IDA7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNztcclxuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xyXG4gICAgICAgIHotaW5kZXg6IDIwO1xyXG4gICAgICAgIGNvbG9yOiBAZ3JheS10ZXh0O1xyXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcclxuICAgICAgICBtaW4td2lkdGg6IDMwMHB4O1xyXG5cclxuICAgICAgICAmLndpZGUge1xyXG4gICAgICAgICAgICB3aWR0aDogNjAwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LXBvcHVwLWZsZXgge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAycHggNXB4O1xyXG5cclxuICAgICAgICAgICAgLmxheW91dC1wb3B1cC1jb2x1bW4gKyAubGF5b3V0LXBvcHVwLWNvbHVtbiB7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogNHB4O1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBmYWRlKGdyYXksIDE1JSk7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDRweDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1wb3B1cC1pdGVtIHtcclxuICAgICAgICAgICAgcGFkZGluZzogNHB4IDZweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtcG9wdXAtbGFiZWwge1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDAuOWVtO1xyXG4gICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgICAgICAgICAgY29sb3I6IEBncmF5LXRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LXBvcHVwLWFjdGlvbjpob3ZlciB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBncmF5LWJnO1xyXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LXBvcHVwLWlucHV0IHtcclxuICAgICAgICAgICAgaW5wdXRbdHlwZT0ndGV4dCddLCB0ZXh0YXJlYSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPiBsYWJlbCB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45ZW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */ diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css index 56beaf64572..69322a29f1f 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css @@ -1 +1 @@ -body .layout-toolbox-item{border:1px solid #e4e5e6;background-color:#fff;padding:9px 12px;cursor:default;list-style-type:none}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item i,body .layout-toolbox-item i{display:inline-block;width:16px;font:14px/1 FontAwesome}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item+.layout-toolbox-item,.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-section+.layout-toolbox-section,body .layout-toolbox-item+.layout-toolbox-item{margin-top:4px}.layout-editor-toolbar{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;position:relative;top:10px}.layout-editor .layout-container>.layout-element-wrapper.layout-container-empty>.layout-container-children-placeholder,.layout-editor-toolbar .layout-editor-toolbar-group{display:-webkit-flex;display:-ms-flexbox;display:flex}.layout-editor-toolbar .layout-editor-toolbar-group>li+li{margin-left:12px}.layout-editor{display:-webkit-flex;display:-ms-flexbox;display:flex;margin-top:1em;font-size:14px;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.layout-editor>.layout-canvas-wrapper{-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;background-color:#f3f4f5;border:1px solid #e4e5e6}.layout-editor>.layout-canvas-wrapper>.layout-toolbar-container{display:none;margin:12px 12px 0;min-height:71px}.layout-editor>.layout-canvas-wrapper>.layout-toolbar-container>.mce-panel{width:100%!important}.layout-editor>.layout-canvas-wrapper .layout-content>.layout-element-wrapper .layout-content-markup>.layout-placeholder{border:1px dashed #ccc;padding:.2em .4em;background:#e8e8e8}.layout-editor .layout-snippet{background:#e8e8e8}.layout-editor .layout-canvas #dummy,.layout-editor .ui-sortable-placeholder,.layout-editor-help-dialog,.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-items{display:none}.layout-editor-help-dialog .help-row:after,.layout-editor-help-dialog .help-row:before{content:" ";display:table}.layout-editor-help-dialog .help-row:after{clear:both}.layout-editor-help-dialog .help-row>.help-column-full,.layout-editor-help-dialog .help-row>.help-column-half{margin:.5em 0}.layout-editor-help-dialog .help-row>.help-column-half{box-sizing:border-box;float:left;width:50%}.layout-editor-help-dialog .help-row>.help-column-half:nth-child(2n){padding-right:10px;clear:left}.layout-editor-help-dialog .help-row+.help-row{margin-top:1em}.layout-editor-help-dialog code{border-radius:4px;background-color:#f3f4f5;padding:2px 4px;font-family:monospace}.layout-editor-help-dialog p{margin-bottom:.5em;line-height:1.6em}.layout-editor-help-dialog table>tbody>tr>td:first-child{padding-right:10px}.layout-editor .layout-element{position:relative;margin-top:0;margin-right:0;margin-bottom:0;padding:0}.layout-editor .layout-element:not(.layout-column){margin-left:0}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel{display:none;position:absolute;margin:0;z-index:20;height:25px;padding:0 6px;list-style:none;white-space:nowrap;line-height:25px;vertical-align:middle}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-item{display:inline-block;height:25px;padding:1px 6px 0}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-label{font-size:13px}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-action{display:none;width:28px;cursor:pointer;text-align:center}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel-main{top:-27px;left:-2px}.layout-editor li.layout-element{list-style:none}.layout-editor:not(.layout-editor-dragging) .layout-element-active,.layout-editor:not(.layout-editor-dragging) .layout-element-focused{border-width:2px;border-style:solid}.layout-editor:not(.layout-editor-dragging) .layout-element-active>.layout-element-wrapper,.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper{margin:-2px}.layout-editor:not(.layout-editor-dragging) .layout-element-active{border-color:rgba(104,104,104,.1)}.layout-editor:not(.layout-editor-dragging) .layout-element-active>.layout-element-wrapper>.layout-panel-main{display:block;z-index:30;background-color:rgba(104,104,104,.1)}.layout-editor:not(.layout-editor-dragging) .layout-element-focused{border-color:#648721}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel{display:block;background-color:#648721;color:#fefefe}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action{display:inline-block}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.active:hover,.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action:hover{background-color:#82b02b}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.disabled{cursor:default;color:rgba(254,254,254,.4)}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.disabled:hover{background-color:#648721}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.active{color:#deff42;background-color:#739b26}.layout-editor:not(.layout-editor-dragging) .layout-element-selected{background-color:rgba(100,135,33,.08)}.layout-editor .layout-element-droptarget{box-shadow:inset 0 0 12px 6px rgba(100,135,33,.5)}.layout-editor .layout-element-droptarget .ui-sortable-placeholder{display:block;visibility:visible!important;min-height:78px;border:2px dashed #648721!important;background-color:rgba(100,135,33,.16)}.layout-editor .media-thumbnail img{max-width:100%;max-height:100%}.layout-editor .layout-container>.layout-element-wrapper>.layout-container-children-placeholder{display:none;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin:11px;min-height:80px;border:1px dashed rgba(124,124,124,.4);border-radius:4px;padding:12px;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;font-size:13px;font-style:italic;opacity:.6;text-align:center}.layout-editor .layout-container>.layout-element-wrapper>.layout-children{padding:12px}.layout-editor .layout-container>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-container)+.layout-element:not(.layout-container),.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group{margin-top:12px}.layout-editor .layout-container>.layout-element-wrapper>.layout-children>.ui-sortable-helper:first-child+.layout-element:not(.layout-container),.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-container+.layout-container:not(.layout-element-active)>.layout-element-wrapper{margin-top:0}.layout-editor .layout-container>.layout-element-wrapper.layout-container-empty>.layout-children{position:absolute;top:0;right:0;bottom:0;left:0}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active){border:1px dashed rgba(124,124,124,.6)}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin:-1px}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-container+.layout-container:not(.layout-element-active){border-top:0}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active){border-top:1px dashed rgba(124,124,124,.6)!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin-top:-1px!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element+.layout-element:not(.layout-element-active){border-left:0!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element+.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin-left:0!important}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar{display:none;position:absolute;z-index:30;top:0;width:16px;height:100%;cursor:col-resize}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar-left{left:-6px}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar-right{right:-6px}.layout-editor .layout-column.layout-element-focused>.layout-element-wrapper>.layout-column-resize-bar,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup article,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup aside,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup center,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup div,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dt,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figcaption,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup footer,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup form,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup header,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nav,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup section,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup article,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup aside,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup center,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup div,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figcaption,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup footer,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup form,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup header,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nav,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup section,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{display:block}.layout-editor .layout-content,.layout-editor .layout-html{min-height:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup{padding:2px;overflow-x:hidden;line-height:normal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup *,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup *{margin:0;padding:0;box-sizing:content-box}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{margin-top:1em;margin-bottom:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure{margin-left:40px;margin-right:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup cite,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dfn,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup em,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup i,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup var,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup cite,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dfn,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup em,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup i,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup var{font-style:italic}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{font-family:monospace;white-space:pre}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup b,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup strong,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup b,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup strong{font-weight:bolder}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup code,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup kbd,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup samp,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup code,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup kbd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup samp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tt{font-family:monospace}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup big,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup big{font-size:larger}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup small,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup small{font-size:smaller}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sub{vertical-align:sub}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sup{vertical-align:super}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sup{line-height:normal;font-size:smaller}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ruby,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ruby{display:ruby}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rb{display:ruby-base;white-space:nowrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rt{display:ruby-text;white-space:nowrap;font-size:50%;font-variant-east-asian:ruby;-webkit-text-emphasis:none;text-emphasis:none}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rbc{display:ruby-base-container}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rtc{display:ruby-text-container}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ruby,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ruby{unicode-bidi:isolate}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :link{color:#00e}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :visited{color:#551a8b}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ins,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup u,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ins,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup u{text-decoration:underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup a:link[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup a:visited[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup area:link[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup area:visited[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup a:link[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup a:visited[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup area:link[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup area:visited[rel~=help]{cursor:help}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :focus,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :focus{outline:auto}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup mark,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup mark{background:#ff0;color:#000}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup abbr[title],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup acronym[title],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup abbr[title],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup acronym[title]{text-decoration:dotted underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup del,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup s,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup strike,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup del,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup s,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup strike{text-decoration:line-through}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blink,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blink{text-decoration:blink}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup q::before,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup q::before{content:open-quote}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup q::after,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup q::after{content:close-quote}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup br::before,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup br::before{content:'\A';white-space:pre}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nobr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nobr{white-space:nowrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup wbr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup wbr{content:'\200B'}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nobr wbr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nobr wbr{white-space:normal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h1{margin-top:.67em;margin-bottom:.67em;font-size:2em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h2{margin-top:.83em;margin-bottom:.83em;font-size:1.5em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h3{margin-top:1em;margin-bottom:1em;font-size:1.17em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h4{margin-top:1.33em;margin-bottom:1.33em;font-size:1em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h5{margin-top:1.67em;margin-bottom:1.67em;font-size:.83em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h6{margin-top:2.33em;margin-bottom:2.33em;font-size:.67em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup li,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup li{display:list-item}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul{margin-top:0;margin-bottom:0}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dd{margin-left:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{padding-left:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol{list-style-type:decimal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{list-style-type:disc}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul{list-style-type:circle}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul ul{list-style-type:square}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table{display:table;box-sizing:border-box;border-spacing:2px;border-collapse:separate;text-indent:initial}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup caption,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup caption{display:table-caption}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup[hidden]{display:table-column-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col[hidden]{display:table-column}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead[hidden]{display:table-header-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody[hidden]{display:table-row-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot[hidden]{display:table-footer-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr[hidden]{display:table-row}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th[hidden]{display:table-cell}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr[hidden]{visibility:collapse}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{padding:1px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table>tr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table>tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead{vertical-align:middle}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr{vertical-align:inherit}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{border-color:gray}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr{border-color:inherit}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup keygen,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup optgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup option,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup textarea,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup keygen,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup optgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup option,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup textarea{text-indent:initial}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup textarea,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup textarea{white-space:pre-wrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=checkbox],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=radio],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=reset],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=submit],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=checkbox],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=radio],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=reset],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=submit],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup select{box-sizing:border-box}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=button]{padding:.3em .5em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hr{color:gray;border-style:inset;border-width:1px;margin:.5em auto}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup fieldset,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup fieldset{margin-left:2px;margin-right:2px;border:2px groove ThreeDFace;padding:.35em .625em .75em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup legend{padding-left:2px;padding-right:2px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup>:first-child,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup>:first-child{margin-top:0!important}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup>:last-child,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup>:last-child{margin-bottom:0!important}.layout-editor .img-responsive,.layout-editor .img-responsive img,.layout-editor .layout-content.layout-content-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-content.layout-content-vector-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-html.layout-content-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-html.layout-content-vector-image>.layout-element-wrapper>.layout-content-markup>img{display:block;width:100%;max-width:100%;height:auto}.layout-editor>.layout-toolbox-wrapper{margin-left:12px;width:218px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;max-height:calc(100vh - 80px);overflow-x:clip;overflow-y:auto;position:-webkit-sticky;position:sticky;top:0}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar{width:2px}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);border-radius:1px}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3)}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox{border:1px solid #e4e5e6;width:220px;min-height:400px;padding:6px;background-color:#f3f4f5}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox.sticky-top{position:fixed;top:0;max-height:100%;overflow-y:auto}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox.sticky-bottom{position:absolute;bottom:0}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading{display:block;margin-bottom:4px;text-decoration:none}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading:before{display:inline-block;width:10px;margin-right:4px;font:14px/1 FontAwesome;text-align:center;content:"\f0d7"}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-group-heading:before{content:"\f0da"}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item{border:1px solid #e4e5e6;background-color:#fff;padding:9px 12px;cursor:default}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group+.layout-toolbox-group{margin-top:6px}.layout-editor .layout-popup{display:none;position:absolute;margin:0;box-shadow:3px 3px 11px 0 rgba(50,50,50,.5);border:1px solid #e4e5e6;padding:2px 0;background-color:#f7f7f7;list-style:none;z-index:20;color:#7c7c7c;text-align:left;cursor:default;white-space:nowrap;line-height:normal;min-width:300px}.layout-editor .layout-popup.wide{width:600px}.layout-editor .layout-popup .layout-popup-flex{display:-webkit-flex;display:-ms-flexbox;display:flex;padding:2px 5px}.layout-editor .layout-popup .layout-popup-flex .layout-popup-column+.layout-popup-column{margin-left:4px;border-left:1px solid rgba(128,128,128,.15);padding-left:4px}.layout-editor .layout-popup .layout-popup-item{padding:4px 6px}.layout-editor .layout-popup .layout-popup-label{font-size:.9em;font-weight:700;color:#7c7c7c}.layout-editor .layout-popup .layout-popup-action:hover{background-color:#f3f4f5;cursor:pointer}.layout-editor .layout-popup .layout-popup-input input[type=text],.layout-editor .layout-popup .layout-popup-input textarea{width:100%}.layout-editor .layout-popup .layout-popup-input>label{display:block;font-size:.9em} \ No newline at end of file +.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup cite,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dfn,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup em,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup i,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup var,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup cite,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dfn,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup em,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup i,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup var{font-style:italic}.layout-editor-toolbar{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;position:relative;top:10px}.layout-editor-toolbar .layout-editor-toolbar-group{display:-ms-flexbox;display:flex}.layout-editor-toolbar .layout-editor-toolbar-group>li+li{margin-left:12px}.layout-editor{display:-ms-flexbox;display:flex;margin-top:1em;font-size:14px;-ms-flex-align:stretch;align-items:stretch}.layout-editor>.layout-canvas-wrapper{-ms-flex-positive:1;flex-grow:1;background-color:#f3f4f5;border:1px solid #e4e5e6}.layout-editor>.layout-canvas-wrapper>.layout-toolbar-container{display:none;margin:12px 12px 0;min-height:71px}.layout-editor>.layout-canvas-wrapper>.layout-toolbar-container>.mce-panel{width:100%!important}.layout-editor>.layout-canvas-wrapper .layout-content>.layout-element-wrapper .layout-content-markup>.layout-placeholder{border:1px dashed #ccc;padding:.2em .4em;background:#e8e8e8}.layout-editor .layout-snippet{background:#e8e8e8}.layout-editor-help-dialog{display:none}.layout-editor-help-dialog .help-row:after,.layout-editor-help-dialog .help-row:before{content:" ";display:table}.layout-editor-help-dialog .help-row:after{clear:both}.layout-editor-help-dialog .help-row>.help-column-full,.layout-editor-help-dialog .help-row>.help-column-half{margin:.5em 0}.layout-editor-help-dialog .help-row>.help-column-half{box-sizing:border-box;float:left;width:50%}.layout-editor-help-dialog .help-row>.help-column-half:nth-child(2n){padding-right:10px;clear:left}.layout-editor-help-dialog .help-row+.help-row{margin-top:1em}.layout-editor-help-dialog code{border-radius:4px;background-color:#f3f4f5;padding:2px 4px;font-family:monospace}.layout-editor-help-dialog p{margin-bottom:.5em;line-height:1.6em}.layout-editor-help-dialog table>tbody>tr>td:first-child{padding-right:10px}.layout-editor .layout-element{position:relative;margin-top:0;margin-right:0;margin-bottom:0;padding:0}.layout-editor .layout-element:not(.layout-column){margin-left:0}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel{display:none;position:absolute;margin:0;z-index:20;height:25px;padding:0 6px;list-style:none;white-space:nowrap;line-height:25px;vertical-align:middle}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-item{display:inline-block;height:25px;padding:1px 6px 0}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-label{font-size:13px}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-action{display:none;width:28px;cursor:pointer;text-align:center}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel-main{top:-27px;left:-2px}.layout-editor li.layout-element{list-style:none}.layout-editor:not(.layout-editor-dragging) .layout-element-active,.layout-editor:not(.layout-editor-dragging) .layout-element-focused{border-width:2px;border-style:solid}.layout-editor:not(.layout-editor-dragging) .layout-element-active>.layout-element-wrapper,.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper{margin:-2px}.layout-editor:not(.layout-editor-dragging) .layout-element-active{border-color:rgba(104,104,104,.1)}.layout-editor:not(.layout-editor-dragging) .layout-element-active>.layout-element-wrapper>.layout-panel-main{display:block;z-index:30;background-color:rgba(104,104,104,.1)}.layout-editor:not(.layout-editor-dragging) .layout-element-focused{border-color:#648721}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel{display:block;background-color:#648721;color:#fefefe}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action{display:inline-block}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action:hover{background-color:#82b02b}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.disabled{cursor:default;color:rgba(254,254,254,.4)}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.disabled:hover{background-color:#648721}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.active{color:#deff42;background-color:#739b26}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.active:hover{background-color:#82b02b}.layout-editor:not(.layout-editor-dragging) .layout-element-selected{background-color:rgba(100,135,33,.08)}.layout-editor .ui-sortable-placeholder{display:none}.layout-editor .layout-element-droptarget{box-shadow:inset 0 0 12px 6px rgba(100,135,33,.5)}.layout-editor .layout-element-droptarget .ui-sortable-placeholder{display:block;visibility:visible!important;min-height:78px;border:2px dashed #648721!important;background-color:rgba(100,135,33,.16)}.layout-editor .media-thumbnail img{max-width:100%;max-height:100%}.layout-editor .layout-container>.layout-element-wrapper>.layout-container-children-placeholder{display:none;-ms-flex-direction:column;flex-direction:column;margin:11px;min-height:80px;border:1px dashed rgba(124,124,124,.4);border-radius:4px;padding:12px;-ms-flex-pack:center;justify-content:center;font-size:13px;font-style:italic;opacity:.6;text-align:center}.layout-editor .layout-container>.layout-element-wrapper>.layout-children{padding:12px}.layout-editor .layout-container>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-container)+.layout-element:not(.layout-container){margin-top:12px}.layout-editor .layout-container>.layout-element-wrapper>.layout-children>.ui-sortable-helper:first-child+.layout-element:not(.layout-container){margin-top:0}.layout-editor .layout-container>.layout-element-wrapper.layout-container-empty>.layout-container-children-placeholder{display:-ms-flexbox;display:flex}.layout-editor .layout-container>.layout-element-wrapper.layout-container-empty>.layout-children{position:absolute;top:0;right:0;bottom:0;left:0}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active){border:1px dashed rgba(124,124,124,.6)}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin:-1px}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-container+.layout-container:not(.layout-element-active){border-top:0}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-container+.layout-container:not(.layout-element-active)>.layout-element-wrapper{margin-top:0}.layout-editor .layout-canvas #dummy{display:none}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active){border-top:1px dashed rgba(124,124,124,.6)!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin-top:-1px!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element+.layout-element:not(.layout-element-active){border-left:0!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element+.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin-left:0!important}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar{display:none;position:absolute;z-index:30;top:0;width:16px;height:100%;cursor:col-resize}.layout-editor .layout-column.layout-element-focused>.layout-element-wrapper>.layout-column-resize-bar,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup center,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup div,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figcaption,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup footer,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup form,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup header,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup center,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup div,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figcaption,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup footer,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup form,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup header,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{display:block}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar-left{left:-6px}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar-right{right:-6px}.layout-editor .layout-content,.layout-editor .layout-html{min-height:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup{padding:2px;overflow-x:hidden;line-height:normal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup *,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup *{margin:0;padding:0;box-sizing:content-box}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{margin-top:1em;margin-bottom:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure{margin-left:40px;margin-right:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{font-family:monospace;white-space:pre}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup b,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup strong,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup b,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup strong{font-weight:bolder}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup code,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup kbd,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup samp,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup code,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup kbd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup samp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tt{font-family:monospace}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup big,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup big{font-size:larger}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup small,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup small{font-size:smaller}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sub{vertical-align:sub}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sup{vertical-align:super}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sup{line-height:normal;font-size:smaller}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ruby,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ruby{display:ruby}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rb{display:ruby-base;white-space:nowrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rt{display:ruby-text;white-space:nowrap;font-size:50%;font-variant-east-asian:ruby;text-emphasis:none}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rbc{display:ruby-base-container}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rtc{display:ruby-text-container}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup article,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup aside,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dt,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nav,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup section,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup article,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup aside,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nav,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup section,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{display:block}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ruby,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ruby{unicode-bidi:isolate}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :link{color:#00E}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :visited{color:#551A8B}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :visited{text-decoration:underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup a:link[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup a:visited[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup area:link[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup area:visited[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup a:link[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup a:visited[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup area:link[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup area:visited[rel~=help]{cursor:help}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :focus,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :focus{outline:auto}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup mark,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup mark{background:#ff0;color:#000}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup abbr[title],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup acronym[title],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup abbr[title],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup acronym[title]{text-decoration:dotted underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ins,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup u,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ins,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup u{text-decoration:underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup del,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup s,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup strike,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup del,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup s,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup strike{text-decoration:line-through}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blink,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blink{text-decoration:blink}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup q::before,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup q::before{content:open-quote}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup q::after,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup q::after{content:close-quote}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup br::before,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup br::before{content:'\A';white-space:pre}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nobr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nobr{white-space:nowrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup wbr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup wbr{content:'\200B'}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nobr wbr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nobr wbr{white-space:normal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h1{margin-top:.67em;margin-bottom:.67em;font-size:2em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h2{margin-top:.83em;margin-bottom:.83em;font-size:1.5em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h3{margin-top:1em;margin-bottom:1em;font-size:1.17em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h4{margin-top:1.33em;margin-bottom:1.33em;font-size:1em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h5{margin-top:1.67em;margin-bottom:1.67em;font-size:.83em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h6{margin-top:2.33em;margin-bottom:2.33em;font-size:.67em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup li,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup li{display:list-item}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{margin-top:1em;margin-bottom:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul{margin-top:0;margin-bottom:0}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dd{margin-left:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{padding-left:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol{list-style-type:decimal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{list-style-type:disc}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul{list-style-type:circle}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul ul{list-style-type:square}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table{display:table;box-sizing:border-box;border-spacing:2px;border-collapse:separate;text-indent:initial}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup caption,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup caption{display:table-caption}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup[hidden]{display:table-column-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col[hidden]{display:table-column}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead[hidden]{display:table-header-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody[hidden]{display:table-row-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot[hidden]{display:table-footer-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr[hidden]{display:table-row}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th[hidden]{display:table-cell}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr[hidden]{visibility:collapse}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{padding:1px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table>tr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table>tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead{vertical-align:middle}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr{vertical-align:inherit}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{border-color:gray}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr{border-color:inherit}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup keygen,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup optgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup option,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup textarea,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup keygen,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup optgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup option,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup textarea{text-indent:initial}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup textarea,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup textarea{white-space:pre-wrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=radio],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=checkbox],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=reset],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=submit],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=radio],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=checkbox],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=reset],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=submit],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup select{box-sizing:border-box}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=button]{padding:.3em .5em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hr{color:gray;border-style:inset;border-width:1px;margin:.5em auto}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup fieldset,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup fieldset{margin-left:2px;margin-right:2px;border:2px groove ThreeDFace;padding:.35em .625em .75em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup legend{padding-left:2px;padding-right:2px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup>:first-child,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup>:first-child{margin-top:0!important}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup>:last-child,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup>:last-child{margin-bottom:0!important}.layout-editor .img-responsive,.layout-editor .img-responsive img,.layout-editor .layout-content.layout-content-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-content.layout-content-vector-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-html.layout-content-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-html.layout-content-vector-image>.layout-element-wrapper>.layout-content-markup>img{display:block;width:100%;max-width:100%;height:auto}body .layout-toolbox-item{border:1px solid #e4e5e6;background-color:#fff;padding:9px 12px;cursor:default;list-style-type:none}body .layout-toolbox-item i{display:inline-block;width:16px;font:normal normal normal 14px/1 FontAwesome}body .layout-toolbox-item+.layout-toolbox-item{margin-top:4px}.layout-editor>.layout-toolbox-wrapper{margin-left:12px;width:218px;-ms-flex-negative:0;flex-shrink:0;max-height:calc(20vh);overflow-x:clip;overflow-y:auto;position:sticky;top:0}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar{width:2px}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px #000;border-radius:1px}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3)}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox{border:1px solid #e4e5e6;width:220px;min-height:400px;padding:6px;background-color:#f3f4f5}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox.sticky-top{position:fixed;top:0;max-height:100%;overflow-y:auto}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox.sticky-bottom{position:absolute;bottom:0}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group{margin-top:12px}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item+.layout-toolbox-item,.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-section+.layout-toolbox-section{margin-top:4px}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading{display:block;margin-bottom:4px;text-decoration:none}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading:before{display:inline-block;width:10px;margin-right:4px;font:normal normal normal 14px/1 FontAwesome;text-align:center;content:"\f0d7"}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-group-heading:before{content:"\f0da"}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-items{display:none}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item{border:1px solid #e4e5e6;background-color:#fff;padding:9px 12px;cursor:default}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item i{display:inline-block;width:16px;font:normal normal normal 14px/1 FontAwesome}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group+.layout-toolbox-group{margin-top:6px}.layout-editor .layout-popup{display:none;position:absolute;margin:0;box-shadow:3px 3px 11px 0 rgba(50,50,50,.5);border:1px solid #e4e5e6;padding:2px 0;background-color:#f7f7f7;list-style:none;z-index:20;color:#7c7c7c;text-align:left;cursor:default;white-space:nowrap;line-height:normal;min-width:300px}.layout-editor .layout-popup.wide{width:600px}.layout-editor .layout-popup .layout-popup-flex{display:-ms-flexbox;display:flex;padding:2px 5px}.layout-editor .layout-popup .layout-popup-flex .layout-popup-column+.layout-popup-column{margin-left:4px;border-left:1px solid rgba(128,128,128,.15);padding-left:4px}.layout-editor .layout-popup .layout-popup-item{padding:4px 6px}.layout-editor .layout-popup .layout-popup-label{font-size:.9em;font-weight:700;color:#7c7c7c}.layout-editor .layout-popup .layout-popup-action:hover{background-color:#f3f4f5;cursor:pointer}.layout-editor .layout-popup .layout-popup-input input[type=text],.layout-editor .layout-popup .layout-popup-input textarea{width:100%}.layout-editor .layout-popup .layout-popup-input>label{display:block;font-size:.9em} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.min.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.min.js index 17337926be1..1ca8d22c41e 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.min.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.min.js @@ -1,12 +1 @@ -/* -** NOTE: This file is generated by Gulp and should not be edited directly! -** Any changes made directly to this file will be overwritten next time its asset group is processed by Gulp. -*/ - -/* http://keith-wood.name/calendars.html - Calendars for jQuery v2.0.1. - Written by Keith Wood (kbwood{at}iinet.com.au) August 2009. - Available under the MIT (http://keith-wood.name/licence.html) license. - Please attribute the author if you use it. */ -(function($){function Calendars(){this.regionalOptions=[];this.regionalOptions['']={invalidCalendar:'Calendar {0} not found',invalidDate:'Invalid {0} date',invalidMonth:'Invalid {0} month',invalidYear:'Invalid {0} year',differentCalendars:'Cannot mix {0} and {1} dates'};this.local=this.regionalOptions[''];this.calendars={};this._localCals={}}$.extend(Calendars.prototype,{instance:function(a,b){a=(a||'gregorian').toLowerCase();b=b||'';var c=this._localCals[a+'-'+b];if(!c&&this.calendars[a]){c=new this.calendars[a](b);this._localCals[a+'-'+b]=c}if(!c){throw(this.local.invalidCalendar||this.regionalOptions[''].invalidCalendar).replace(/\{0\}/,a)}return c},newDate:function(a,b,c,d,e){d=(a!=null&&a.year?a.calendar():(typeof d==='string'?this.instance(d,e):d))||this.instance();return d.newDate(a,b,c)}});function CDate(a,b,c,d){this._calendar=a;this._year=b;this._month=c;this._day=d;if(this._calendar._validateLevel===0&&!this._calendar.isValid(this._year,this._month,this._day)){throw($.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate).replace(/\{0\}/,this._calendar.local.name)}}function pad(a,b){a=''+a;return'000000'.substring(0,b-a.length)+a}$.extend(CDate.prototype,{newDate:function(a,b,c){return this._calendar.newDate((a==null?this:a),b,c)},year:function(a){return(arguments.length===0?this._year:this.set(a,'y'))},month:function(a){return(arguments.length===0?this._month:this.set(a,'m'))},day:function(a){return(arguments.length===0?this._day:this.set(a,'d'))},date:function(a,b,c){if(!this._calendar.isValid(a,b,c)){throw($.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate).replace(/\{0\}/,this._calendar.local.name)}this._year=a;this._month=b;this._day=c;return this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(a,b){return this._calendar.add(this,a,b)},set:function(a,b){return this._calendar.set(this,a,b)},compareTo:function(a){if(this._calendar.name!==a._calendar.name){throw($.calendars.local.differentCalendars||$.calendars.regionalOptions[''].differentCalendars).replace(/\{0\}/,this._calendar.local.name).replace(/\{1\}/,a._calendar.local.name)}var c=(this._year!==a._year?this._year-a._year:this._month!==a._month?this.monthOfYear()-a.monthOfYear():this._day-a._day);return(c===0?0:(c<0?-1:+1))},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(a){return this._calendar.fromJD(a)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(a){return this._calendar.fromJSDate(a)},toString:function(){return(this.year()<0?'-':'')+pad(Math.abs(this.year()),4)+'-'+pad(this.month(),2)+'-'+pad(this.day(),2)}});function BaseCalendar(){this.shortYearCutoff='+10'}$.extend(BaseCalendar.prototype,{_validateLevel:0,newDate:function(a,b,c){if(a==null){return this.today()}if(a.year){this._validate(a,b,c,$.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate);c=a.day();b=a.month();a=a.year()}return new CDate(this,a,b,c)},today:function(){return this.fromJSDate(new Date())},epoch:function(a){var b=this._validate(a,this.minMonth,this.minDay,$.calendars.local.invalidYear||$.calendars.regionalOptions[''].invalidYear);return(b.year()<0?this.local.epochs[0]:this.local.epochs[1])},formatYear:function(a){var b=this._validate(a,this.minMonth,this.minDay,$.calendars.local.invalidYear||$.calendars.regionalOptions[''].invalidYear);return(b.year()<0?'-':'')+pad(Math.abs(b.year()),4)},monthsInYear:function(a){this._validate(a,this.minMonth,this.minDay,$.calendars.local.invalidYear||$.calendars.regionalOptions[''].invalidYear);return 12},monthOfYear:function(a,b){var c=this._validate(a,b,this.minDay,$.calendars.local.invalidMonth||$.calendars.regionalOptions[''].invalidMonth);return(c.month()+this.monthsInYear(c)-this.firstMonth)%this.monthsInYear(c)+this.minMonth},fromMonthOfYear:function(a,b){var m=(b+this.firstMonth-2*this.minMonth)%this.monthsInYear(a)+this.minMonth;this._validate(a,m,this.minDay,$.calendars.local.invalidMonth||$.calendars.regionalOptions[''].invalidMonth);return m},daysInYear:function(a){var b=this._validate(a,this.minMonth,this.minDay,$.calendars.local.invalidYear||$.calendars.regionalOptions[''].invalidYear);return(this.leapYear(b)?366:365)},dayOfYear:function(a,b,c){var d=this._validate(a,b,c,$.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate);return d.toJD()-this.newDate(d.year(),this.fromMonthOfYear(d.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(a,b,c){var d=this._validate(a,b,c,$.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate);return(Math.floor(this.toJD(d))+2)%this.daysInWeek()},extraInfo:function(a,b,c){this._validate(a,b,c,$.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate);return{}},add:function(a,b,c){this._validate(a,this.minMonth,this.minDay,$.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate);return this._correctAdd(a,this._add(a,b,c),b,c)},_add:function(c,f,g){this._validateLevel++;if(g==='d'||g==='w'){var h=c.toJD()+f*(g==='w'?this.daysInWeek():1);var d=c.calendar().fromJD(h);this._validateLevel--;return[d.year(),d.month(),d.day()]}try{var y=c.year()+(g==='y'?f:0);var m=c.monthOfYear()+(g==='m'?f:0);var d=c.day();var i=function(a){while(mb-1+a.minMonth){y++;m-=b;b=a.monthsInYear(y)}};if(g==='y'){if(c.month()!==this.fromMonthOfYear(y,m)){m=this.newDate(y,c.month(),this.minDay).monthOfYear()}m=Math.min(m,this.monthsInYear(y));d=Math.min(d,this.daysInMonth(y,this.fromMonthOfYear(y,m)))}else if(g==='m'){i(this);d=Math.min(d,this.daysInMonth(y,this.fromMonthOfYear(y,m)))}var j=[y,this.fromMonthOfYear(y,m),d];this._validateLevel--;return j}catch(e){this._validateLevel--;throw e;}},_correctAdd:function(a,b,c,d){if(!this.hasYearZero&&(d==='y'||d==='m')){if(b[0]===0||(a.year()>0)!==(b[0]>0)){var e={y:[1,1,'y'],m:[1,this.monthsInYear(-1),'m'],w:[this.daysInWeek(),this.daysInYear(-1),'d'],d:[1,this.daysInYear(-1),'d']}[d];var f=(c<0?-1:+1);b=this._add(a,c*e[0]+f*e[1],e[2])}}return a.date(b[0],b[1],b[2])},set:function(a,b,c){this._validate(a,this.minMonth,this.minDay,$.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate);var y=(c==='y'?b:a.year());var m=(c==='m'?b:a.month());var d=(c==='d'?b:a.day());if(c==='y'||c==='m'){d=Math.min(d,this.daysInMonth(y,m))}return a.date(y,m,d)},isValid:function(a,b,c){this._validateLevel++;var d=(this.hasYearZero||a!==0);if(d){var e=this.newDate(a,b,this.minDay);d=(b>=this.minMonth&&b-this.minMonth=this.minDay&&c-this.minDay13.5?13:1);var i=c-(h>2.5?4716:4715);if(i<=0){i--}return this.newDate(i,h,g)},toJSDate:function(a,b,c){var d=this._validate(a,b,c,$.calendars.local.invalidDate||$.calendars.regionalOptions[''].invalidDate);var e=new Date(d.year(),d.month()-1,d.day());e.setHours(0);e.setMinutes(0);e.setSeconds(0);e.setMilliseconds(0);e.setHours(e.getHours()>12?e.getHours()+2:0);return e},fromJSDate:function(a){return this.newDate(a.getFullYear(),a.getMonth()+1,a.getDate())}});$.calendars=new Calendars();$.calendars.cdate=CDate;$.calendars.baseCalendar=BaseCalendar;$.calendars.calendars.gregorian=GregorianCalendar})(jQuery); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5jYWxlbmRhcnMubWluLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJqcXVlcnkuY2FsZW5kYXJzLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGh0dHA6Ly9rZWl0aC13b29kLm5hbWUvY2FsZW5kYXJzLmh0bWxcbiAgIENhbGVuZGFycyBmb3IgalF1ZXJ5IHYyLjAuMS5cbiAgIFdyaXR0ZW4gYnkgS2VpdGggV29vZCAoa2J3b29ke2F0fWlpbmV0LmNvbS5hdSkgQXVndXN0IDIwMDkuXG4gICBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCAoaHR0cDovL2tlaXRoLXdvb2QubmFtZS9saWNlbmNlLmh0bWwpIGxpY2Vuc2UuIFxuICAgUGxlYXNlIGF0dHJpYnV0ZSB0aGUgYXV0aG9yIGlmIHlvdSB1c2UgaXQuICovXG4oZnVuY3Rpb24oJCl7ZnVuY3Rpb24gQ2FsZW5kYXJzKCl7dGhpcy5yZWdpb25hbE9wdGlvbnM9W107dGhpcy5yZWdpb25hbE9wdGlvbnNbJyddPXtpbnZhbGlkQ2FsZW5kYXI6J0NhbGVuZGFyIHswfSBub3QgZm91bmQnLGludmFsaWREYXRlOidJbnZhbGlkIHswfSBkYXRlJyxpbnZhbGlkTW9udGg6J0ludmFsaWQgezB9IG1vbnRoJyxpbnZhbGlkWWVhcjonSW52YWxpZCB7MH0geWVhcicsZGlmZmVyZW50Q2FsZW5kYXJzOidDYW5ub3QgbWl4IHswfSBhbmQgezF9IGRhdGVzJ307dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1snJ107dGhpcy5jYWxlbmRhcnM9e307dGhpcy5fbG9jYWxDYWxzPXt9fSQuZXh0ZW5kKENhbGVuZGFycy5wcm90b3R5cGUse2luc3RhbmNlOmZ1bmN0aW9uKGEsYil7YT0oYXx8J2dyZWdvcmlhbicpLnRvTG93ZXJDYXNlKCk7Yj1ifHwnJzt2YXIgYz10aGlzLl9sb2NhbENhbHNbYSsnLScrYl07aWYoIWMmJnRoaXMuY2FsZW5kYXJzW2FdKXtjPW5ldyB0aGlzLmNhbGVuZGFyc1thXShiKTt0aGlzLl9sb2NhbENhbHNbYSsnLScrYl09Y31pZighYyl7dGhyb3codGhpcy5sb2NhbC5pbnZhbGlkQ2FsZW5kYXJ8fHRoaXMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkQ2FsZW5kYXIpLnJlcGxhY2UoL1xcezBcXH0vLGEpfXJldHVybiBjfSxuZXdEYXRlOmZ1bmN0aW9uKGEsYixjLGQsZSl7ZD0oYSE9bnVsbCYmYS55ZWFyP2EuY2FsZW5kYXIoKToodHlwZW9mIGQ9PT0nc3RyaW5nJz90aGlzLmluc3RhbmNlKGQsZSk6ZCkpfHx0aGlzLmluc3RhbmNlKCk7cmV0dXJuIGQubmV3RGF0ZShhLGIsYyl9fSk7ZnVuY3Rpb24gQ0RhdGUoYSxiLGMsZCl7dGhpcy5fY2FsZW5kYXI9YTt0aGlzLl95ZWFyPWI7dGhpcy5fbW9udGg9Yzt0aGlzLl9kYXk9ZDtpZih0aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbD09PTAmJiF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHRoaXMuX3llYXIsdGhpcy5fbW9udGgsdGhpcy5fZGF5KSl7dGhyb3coJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGV8fCQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZERhdGUpLnJlcGxhY2UoL1xcezBcXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpfX1mdW5jdGlvbiBwYWQoYSxiKXthPScnK2E7cmV0dXJuJzAwMDAwMCcuc3Vic3RyaW5nKDAsYi1hLmxlbmd0aCkrYX0kLmV4dGVuZChDRGF0ZS5wcm90b3R5cGUse25ld0RhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLl9jYWxlbmRhci5uZXdEYXRlKChhPT1udWxsP3RoaXM6YSksYixjKX0seWVhcjpmdW5jdGlvbihhKXtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5feWVhcjp0aGlzLnNldChhLCd5JykpfSxtb250aDpmdW5jdGlvbihhKXtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fbW9udGg6dGhpcy5zZXQoYSwnbScpKX0sZGF5OmZ1bmN0aW9uKGEpe3JldHVybihhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLl9kYXk6dGhpcy5zZXQoYSwnZCcpKX0sZGF0ZTpmdW5jdGlvbihhLGIsYyl7aWYoIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQoYSxiLGMpKXt0aHJvdygkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZXx8JC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5fY2FsZW5kYXIubG9jYWwubmFtZSl9dGhpcy5feWVhcj1hO3RoaXMuX21vbnRoPWI7dGhpcy5fZGF5PWM7cmV0dXJuIHRoaXN9LGxlYXBZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmxlYXBZZWFyKHRoaXMpfSxlcG9jaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5lcG9jaCh0aGlzKX0sZm9ybWF0WWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5mb3JtYXRZZWFyKHRoaXMpfSxtb250aE9mWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5tb250aE9mWWVhcih0aGlzKX0sd2Vla09mWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci53ZWVrT2ZZZWFyKHRoaXMpfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheXNJblllYXIodGhpcyl9LGRheU9mWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZlllYXIodGhpcyl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheXNJbk1vbnRoKHRoaXMpfSxkYXlPZldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZXZWVrKHRoaXMpfSx3ZWVrRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtEYXkodGhpcyl9LGV4dHJhSW5mbzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5leHRyYUluZm8odGhpcyl9LGFkZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9jYWxlbmRhci5hZGQodGhpcyxhLGIpfSxzZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuc2V0KHRoaXMsYSxiKX0sY29tcGFyZVRvOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2NhbGVuZGFyLm5hbWUhPT1hLl9jYWxlbmRhci5uYW1lKXt0aHJvdygkLmNhbGVuZGFycy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fCQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uZGlmZmVyZW50Q2FsZW5kYXJzKS5yZXBsYWNlKC9cXHswXFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cXHsxXFx9LyxhLl9jYWxlbmRhci5sb2NhbC5uYW1lKX12YXIgYz0odGhpcy5feWVhciE9PWEuX3llYXI/dGhpcy5feWVhci1hLl95ZWFyOnRoaXMuX21vbnRoIT09YS5fbW9udGg/dGhpcy5tb250aE9mWWVhcigpLWEubW9udGhPZlllYXIoKTp0aGlzLl9kYXktYS5fZGF5KTtyZXR1cm4oYz09PTA/MDooYzwwPy0xOisxKSl9LGNhbGVuZGFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyfSx0b0pEOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnRvSkQodGhpcyl9LGZyb21KRDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZnJvbUpEKGEpfSx0b0pTRGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci50b0pTRGF0ZSh0aGlzKX0sZnJvbUpTRGF0ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZnJvbUpTRGF0ZShhKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy55ZWFyKCk8MD8nLSc6JycpK3BhZChNYXRoLmFicyh0aGlzLnllYXIoKSksNCkrJy0nK3BhZCh0aGlzLm1vbnRoKCksMikrJy0nK3BhZCh0aGlzLmRheSgpLDIpfX0pO2Z1bmN0aW9uIEJhc2VDYWxlbmRhcigpe3RoaXMuc2hvcnRZZWFyQ3V0b2ZmPScrMTAnfSQuZXh0ZW5kKEJhc2VDYWxlbmRhci5wcm90b3R5cGUse192YWxpZGF0ZUxldmVsOjAsbmV3RGF0ZTpmdW5jdGlvbihhLGIsYyl7aWYoYT09bnVsbCl7cmV0dXJuIHRoaXMudG9kYXkoKX1pZihhLnllYXIpe3RoaXMuX3ZhbGlkYXRlKGEsYixjLCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlfHwkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtjPWEuZGF5KCk7Yj1hLm1vbnRoKCk7YT1hLnllYXIoKX1yZXR1cm4gbmV3IENEYXRlKHRoaXMsYSxiLGMpfSx0b2RheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZyb21KU0RhdGUobmV3IERhdGUoKSl9LGVwb2NoOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX3ZhbGlkYXRlKGEsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSwkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhcnx8JC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkWWVhcik7cmV0dXJuKGIueWVhcigpPDA/dGhpcy5sb2NhbC5lcG9jaHNbMF06dGhpcy5sb2NhbC5lcG9jaHNbMV0pfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX3ZhbGlkYXRlKGEsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSwkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkWWVhcnx8JC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkWWVhcik7cmV0dXJuKGIueWVhcigpPDA/Jy0nOicnKStwYWQoTWF0aC5hYnMoYi55ZWFyKCkpLDQpfSxtb250aHNJblllYXI6ZnVuY3Rpb24oYSl7dGhpcy5fdmFsaWRhdGUoYSx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRZZWFyfHwkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWRZZWFyKTtyZXR1cm4gMTJ9LG1vbnRoT2ZZZWFyOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5fdmFsaWRhdGUoYSxiLHRoaXMubWluRGF5LCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWRNb250aHx8JC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkTW9udGgpO3JldHVybihjLm1vbnRoKCkrdGhpcy5tb250aHNJblllYXIoYyktdGhpcy5maXJzdE1vbnRoKSV0aGlzLm1vbnRoc0luWWVhcihjKSt0aGlzLm1pbk1vbnRofSxmcm9tTW9udGhPZlllYXI6ZnVuY3Rpb24oYSxiKXt2YXIgbT0oYit0aGlzLmZpcnN0TW9udGgtMip0aGlzLm1pbk1vbnRoKSV0aGlzLm1vbnRoc0luWWVhcihhKSt0aGlzLm1pbk1vbnRoO3RoaXMuX3ZhbGlkYXRlKGEsbSx0aGlzLm1pbkRheSwkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkTW9udGh8fCQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZE1vbnRoKTtyZXR1cm4gbX0sZGF5c0luWWVhcjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLl92YWxpZGF0ZShhLHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXJ8fCQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZFllYXIpO3JldHVybih0aGlzLmxlYXBZZWFyKGIpPzM2NjozNjUpfSxkYXlPZlllYXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX3ZhbGlkYXRlKGEsYixjLCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlfHwkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtyZXR1cm4gZC50b0pEKCktdGhpcy5uZXdEYXRlKGQueWVhcigpLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGQueWVhcigpLHRoaXMubWluTW9udGgpLHRoaXMubWluRGF5KS50b0pEKCkrMX0sZGF5c0luV2VlazpmdW5jdGlvbigpe3JldHVybiA3fSxkYXlPZldlZWs6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX3ZhbGlkYXRlKGEsYixjLCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlfHwkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtyZXR1cm4oTWF0aC5mbG9vcih0aGlzLnRvSkQoZCkpKzIpJXRoaXMuZGF5c0luV2VlaygpfSxleHRyYUluZm86ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX3ZhbGlkYXRlKGEsYixjLCQuY2FsZW5kYXJzLmxvY2FsLmludmFsaWREYXRlfHwkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmludmFsaWREYXRlKTtyZXR1cm57fX0sYWRkOmZ1bmN0aW9uKGEsYixjKXt0aGlzLl92YWxpZGF0ZShhLHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZERhdGV8fCQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZERhdGUpO3JldHVybiB0aGlzLl9jb3JyZWN0QWRkKGEsdGhpcy5fYWRkKGEsYixjKSxiLGMpfSxfYWRkOmZ1bmN0aW9uKGMsZixnKXt0aGlzLl92YWxpZGF0ZUxldmVsKys7aWYoZz09PSdkJ3x8Zz09PSd3Jyl7dmFyIGg9Yy50b0pEKCkrZiooZz09PSd3Jz90aGlzLmRheXNJbldlZWsoKToxKTt2YXIgZD1jLmNhbGVuZGFyKCkuZnJvbUpEKGgpO3RoaXMuX3ZhbGlkYXRlTGV2ZWwtLTtyZXR1cm5bZC55ZWFyKCksZC5tb250aCgpLGQuZGF5KCldfXRyeXt2YXIgeT1jLnllYXIoKSsoZz09PSd5Jz9mOjApO3ZhciBtPWMubW9udGhPZlllYXIoKSsoZz09PSdtJz9mOjApO3ZhciBkPWMuZGF5KCk7dmFyIGk9ZnVuY3Rpb24oYSl7d2hpbGUobTxhLm1pbk1vbnRoKXt5LS07bSs9YS5tb250aHNJblllYXIoeSl9dmFyIGI9YS5tb250aHNJblllYXIoeSk7d2hpbGUobT5iLTErYS5taW5Nb250aCl7eSsrO20tPWI7Yj1hLm1vbnRoc0luWWVhcih5KX19O2lmKGc9PT0neScpe2lmKGMubW9udGgoKSE9PXRoaXMuZnJvbU1vbnRoT2ZZZWFyKHksbSkpe209dGhpcy5uZXdEYXRlKHksYy5tb250aCgpLHRoaXMubWluRGF5KS5tb250aE9mWWVhcigpfW09TWF0aC5taW4obSx0aGlzLm1vbnRoc0luWWVhcih5KSk7ZD1NYXRoLm1pbihkLHRoaXMuZGF5c0luTW9udGgoeSx0aGlzLmZyb21Nb250aE9mWWVhcih5LG0pKSl9ZWxzZSBpZihnPT09J20nKXtpKHRoaXMpO2Q9TWF0aC5taW4oZCx0aGlzLmRheXNJbk1vbnRoKHksdGhpcy5mcm9tTW9udGhPZlllYXIoeSxtKSkpfXZhciBqPVt5LHRoaXMuZnJvbU1vbnRoT2ZZZWFyKHksbSksZF07dGhpcy5fdmFsaWRhdGVMZXZlbC0tO3JldHVybiBqfWNhdGNoKGUpe3RoaXMuX3ZhbGlkYXRlTGV2ZWwtLTt0aHJvdyBlO319LF9jb3JyZWN0QWRkOmZ1bmN0aW9uKGEsYixjLGQpe2lmKCF0aGlzLmhhc1llYXJaZXJvJiYoZD09PSd5J3x8ZD09PSdtJykpe2lmKGJbMF09PT0wfHwoYS55ZWFyKCk+MCkhPT0oYlswXT4wKSl7dmFyIGU9e3k6WzEsMSwneSddLG06WzEsdGhpcy5tb250aHNJblllYXIoLTEpLCdtJ10sdzpbdGhpcy5kYXlzSW5XZWVrKCksdGhpcy5kYXlzSW5ZZWFyKC0xKSwnZCddLGQ6WzEsdGhpcy5kYXlzSW5ZZWFyKC0xKSwnZCddfVtkXTt2YXIgZj0oYzwwPy0xOisxKTtiPXRoaXMuX2FkZChhLGMqZVswXStmKmVbMV0sZVsyXSl9fXJldHVybiBhLmRhdGUoYlswXSxiWzFdLGJbMl0pfSxzZXQ6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX3ZhbGlkYXRlKGEsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSwkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZXx8JC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSk7dmFyIHk9KGM9PT0neSc/YjphLnllYXIoKSk7dmFyIG09KGM9PT0nbSc/YjphLm1vbnRoKCkpO3ZhciBkPShjPT09J2QnP2I6YS5kYXkoKSk7aWYoYz09PSd5J3x8Yz09PSdtJyl7ZD1NYXRoLm1pbihkLHRoaXMuZGF5c0luTW9udGgoeSxtKSl9cmV0dXJuIGEuZGF0ZSh5LG0sZCl9LGlzVmFsaWQ6ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX3ZhbGlkYXRlTGV2ZWwrKzt2YXIgZD0odGhpcy5oYXNZZWFyWmVyb3x8YSE9PTApO2lmKGQpe3ZhciBlPXRoaXMubmV3RGF0ZShhLGIsdGhpcy5taW5EYXkpO2Q9KGI+PXRoaXMubWluTW9udGgmJmItdGhpcy5taW5Nb250aDx0aGlzLm1vbnRoc0luWWVhcihlKSkmJihjPj10aGlzLm1pbkRheSYmYy10aGlzLm1pbkRheTx0aGlzLmRheXNJbk1vbnRoKGUpKX10aGlzLl92YWxpZGF0ZUxldmVsLS07cmV0dXJuIGR9LHRvSlNEYXRlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLl92YWxpZGF0ZShhLGIsYywkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZXx8JC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSk7cmV0dXJuICQuY2FsZW5kYXJzLmluc3RhbmNlKCkuZnJvbUpEKHRoaXMudG9KRChkKSkudG9KU0RhdGUoKX0sZnJvbUpTRGF0ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5mcm9tSkQoJC5jYWxlbmRhcnMuaW5zdGFuY2UoKS5mcm9tSlNEYXRlKGEpLnRvSkQoKSl9LF92YWxpZGF0ZTpmdW5jdGlvbihhLGIsYyxkKXtpZihhLnllYXIpe2lmKHRoaXMuX3ZhbGlkYXRlTGV2ZWw9PT0wJiZ0aGlzLm5hbWUhPT1hLmNhbGVuZGFyKCkubmFtZSl7dGhyb3coJC5jYWxlbmRhcnMubG9jYWwuZGlmZmVyZW50Q2FsZW5kYXJzfHwkLmNhbGVuZGFycy5yZWdpb25hbE9wdGlvbnNbJyddLmRpZmZlcmVudENhbGVuZGFycykucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cXHsxXFx9LyxhLmNhbGVuZGFyKCkubG9jYWwubmFtZSl9cmV0dXJuIGF9dHJ5e3RoaXMuX3ZhbGlkYXRlTGV2ZWwrKztpZih0aGlzLl92YWxpZGF0ZUxldmVsPT09MSYmIXRoaXMuaXNWYWxpZChhLGIsYykpe3Rocm93IGQucmVwbGFjZSgvXFx7MFxcfS8sdGhpcy5sb2NhbC5uYW1lKX12YXIgZj10aGlzLm5ld0RhdGUoYSxiLGMpO3RoaXMuX3ZhbGlkYXRlTGV2ZWwtLTtyZXR1cm4gZn1jYXRjaChlKXt0aGlzLl92YWxpZGF0ZUxldmVsLS07dGhyb3cgZTt9fX0pO2Z1bmN0aW9uIEdyZWdvcmlhbkNhbGVuZGFyKGEpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbYV18fHRoaXMucmVnaW9uYWxPcHRpb25zWycnXX1HcmVnb3JpYW5DYWxlbmRhci5wcm90b3R5cGU9bmV3IEJhc2VDYWxlbmRhcjskLmV4dGVuZChHcmVnb3JpYW5DYWxlbmRhci5wcm90b3R5cGUse25hbWU6J0dyZWdvcmlhbicsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ZmFsc2UsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsnJzp7bmFtZTonR3JlZ29yaWFuJyxlcG9jaHM6WydCQ0UnLCdDRSddLG1vbnRoTmFtZXM6WydKYW51YXJ5JywnRmVicnVhcnknLCdNYXJjaCcsJ0FwcmlsJywnTWF5JywnSnVuZScsJ0p1bHknLCdBdWd1c3QnLCdTZXB0ZW1iZXInLCdPY3RvYmVyJywnTm92ZW1iZXInLCdEZWNlbWJlciddLG1vbnRoTmFtZXNTaG9ydDpbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01heScsJ0p1bicsJ0p1bCcsJ0F1ZycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RlYyddLGRheU5hbWVzOlsnU3VuZGF5JywnTW9uZGF5JywnVHVlc2RheScsJ1dlZG5lc2RheScsJ1RodXJzZGF5JywnRnJpZGF5JywnU2F0dXJkYXknXSxkYXlOYW1lc1Nob3J0OlsnU3VuJywnTW9uJywnVHVlJywnV2VkJywnVGh1JywnRnJpJywnU2F0J10sZGF5TmFtZXNNaW46WydTdScsJ01vJywnVHUnLCdXZScsJ1RoJywnRnInLCdTYSddLGRhdGVGb3JtYXQ6J21tL2RkL3l5eXknLGZpcnN0RGF5OjAsaXNSVEw6ZmFsc2V9fSxsZWFwWWVhcjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLl92YWxpZGF0ZShhLHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksJC5jYWxlbmRhcnMubG9jYWwuaW52YWxpZFllYXJ8fCQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZFllYXIpO3ZhciBhPWIueWVhcigpKyhiLnllYXIoKTwwPzE6MCk7cmV0dXJuIGElND09PTAmJihhJTEwMCE9PTB8fGElNDAwPT09MCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMubmV3RGF0ZShhLGIsYyk7ZC5hZGQoNC0oZC5kYXlPZldlZWsoKXx8NyksJ2QnKTtyZXR1cm4gTWF0aC5mbG9vcigoZC5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX3ZhbGlkYXRlKGEsYix0aGlzLm1pbkRheSwkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkTW9udGh8fCQuY2FsZW5kYXJzLnJlZ2lvbmFsT3B0aW9uc1snJ10uaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbYy5tb250aCgpLTFdKyhjLm1vbnRoKCk9PT0yJiZ0aGlzLmxlYXBZZWFyKGMueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4odGhpcy5kYXlPZldlZWsoYSxiLGMpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKGMsZCxlKXt2YXIgZj10aGlzLl92YWxpZGF0ZShjLGQsZSwkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZXx8JC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSk7Yz1mLnllYXIoKTtkPWYubW9udGgoKTtlPWYuZGF5KCk7aWYoYzwwKXtjKyt9aWYoZDwzKXtkKz0xMjtjLS19dmFyIGE9TWF0aC5mbG9vcihjLzEwMCk7dmFyIGI9Mi1hK01hdGguZmxvb3IoYS80KTtyZXR1cm4gTWF0aC5mbG9vcigzNjUuMjUqKGMrNDcxNikpK01hdGguZmxvb3IoMzAuNjAwMSooZCsxKSkrZStiLTE1MjQuNX0sZnJvbUpEOmZ1bmN0aW9uKGYpe3ZhciB6PU1hdGguZmxvb3IoZiswLjUpO3ZhciBhPU1hdGguZmxvb3IoKHotMTg2NzIxNi4yNSkvMzY1MjQuMjUpO2E9eisxK2EtTWF0aC5mbG9vcihhLzQpO3ZhciBiPWErMTUyNDt2YXIgYz1NYXRoLmZsb29yKChiLTEyMi4xKS8zNjUuMjUpO3ZhciBkPU1hdGguZmxvb3IoMzY1LjI1KmMpO3ZhciBlPU1hdGguZmxvb3IoKGItZCkvMzAuNjAwMSk7dmFyIGc9Yi1kLU1hdGguZmxvb3IoZSozMC42MDAxKTt2YXIgaD1lLShlPjEzLjU/MTM6MSk7dmFyIGk9Yy0oaD4yLjU/NDcxNjo0NzE1KTtpZihpPD0wKXtpLS19cmV0dXJuIHRoaXMubmV3RGF0ZShpLGgsZyl9LHRvSlNEYXRlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLl92YWxpZGF0ZShhLGIsYywkLmNhbGVuZGFycy5sb2NhbC5pbnZhbGlkRGF0ZXx8JC5jYWxlbmRhcnMucmVnaW9uYWxPcHRpb25zWycnXS5pbnZhbGlkRGF0ZSk7dmFyIGU9bmV3IERhdGUoZC55ZWFyKCksZC5tb250aCgpLTEsZC5kYXkoKSk7ZS5zZXRIb3VycygwKTtlLnNldE1pbnV0ZXMoMCk7ZS5zZXRTZWNvbmRzKDApO2Uuc2V0TWlsbGlzZWNvbmRzKDApO2Uuc2V0SG91cnMoZS5nZXRIb3VycygpPjEyP2UuZ2V0SG91cnMoKSsyOjApO3JldHVybiBlfSxmcm9tSlNEYXRlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5ld0RhdGUoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSsxLGEuZ2V0RGF0ZSgpKX19KTskLmNhbGVuZGFycz1uZXcgQ2FsZW5kYXJzKCk7JC5jYWxlbmRhcnMuY2RhdGU9Q0RhdGU7JC5jYWxlbmRhcnMuYmFzZUNhbGVuZGFyPUJhc2VDYWxlbmRhcjskLmNhbGVuZGFycy5jYWxlbmRhcnMuZ3JlZ29yaWFuPUdyZWdvcmlhbkNhbGVuZGFyfSkoalF1ZXJ5KTsiXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +!function(a){function t(){this.regionalOptions=[],this.regionalOptions[""]={invalidCalendar:"Calendar {0} not found",invalidDate:"Invalid {0} date",invalidMonth:"Invalid {0} month",invalidYear:"Invalid {0} year",differentCalendars:"Cannot mix {0} and {1} dates"},this.local=this.regionalOptions[""],this.calendars={},this._localCals={}}function n(t,n,e,i){if(this._calendar=t,this._year=n,this._month=e,this._day=i,0===this._calendar._validateLevel&&!this._calendar.isValid(this._year,this._month,this._day))throw(a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name)}function e(a,t){return a=""+a,"000000".substring(0,t-a.length)+a}function i(){this.shortYearCutoff="+10"}function r(a){this.local=this.regionalOptions[a]||this.regionalOptions[""]}a.extend(t.prototype,{instance:function(a,t){a=(a||"gregorian").toLowerCase(),t=t||"";var n=this._localCals[a+"-"+t];if(!n&&this.calendars[a]&&(n=new this.calendars[a](t),this._localCals[a+"-"+t]=n),!n)throw(this.local.invalidCalendar||this.regionalOptions[""].invalidCalendar).replace(/\{0\}/,a);return n},newDate:function(a,t,n,e,i){return e=(null!=a&&a.year?a.calendar():"string"==typeof e?this.instance(e,i):e)||this.instance(),e.newDate(a,t,n)}}),a.extend(n.prototype,{newDate:function(a,t,n){return this._calendar.newDate(null==a?this:a,t,n)},year:function(a){return 0===arguments.length?this._year:this.set(a,"y")},month:function(a){return 0===arguments.length?this._month:this.set(a,"m")},day:function(a){return 0===arguments.length?this._day:this.set(a,"d")},date:function(t,n,e){if(!this._calendar.isValid(t,n,e))throw(a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name);return this._year=t,this._month=n,this._day=e,this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(a,t){return this._calendar.add(this,a,t)},set:function(a,t){return this._calendar.set(this,a,t)},compareTo:function(t){if(this._calendar.name!==t._calendar.name)throw(a.calendars.local.differentCalendars||a.calendars.regionalOptions[""].differentCalendars).replace(/\{0\}/,this._calendar.local.name).replace(/\{1\}/,t._calendar.local.name);var n=this._year!==t._year?this._year-t._year:this._month!==t._month?this.monthOfYear()-t.monthOfYear():this._day-t._day;return 0===n?0:0>n?-1:1},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(a){return this._calendar.fromJD(a)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(a){return this._calendar.fromJSDate(a)},toString:function(){return(this.year()<0?"-":"")+e(Math.abs(this.year()),4)+"-"+e(this.month(),2)+"-"+e(this.day(),2)}}),a.extend(i.prototype,{_validateLevel:0,newDate:function(t,e,i){return null==t?this.today():(t.year&&(this._validate(t,e,i,a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate),i=t.day(),e=t.month(),t=t.year()),new n(this,t,e,i))},today:function(){return this.fromJSDate(new Date)},epoch:function(t){var n=this._validate(t,this.minMonth,this.minDay,a.calendars.local.invalidYear||a.calendars.regionalOptions[""].invalidYear);return n.year()<0?this.local.epochs[0]:this.local.epochs[1]},formatYear:function(t){var n=this._validate(t,this.minMonth,this.minDay,a.calendars.local.invalidYear||a.calendars.regionalOptions[""].invalidYear);return(n.year()<0?"-":"")+e(Math.abs(n.year()),4)},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,a.calendars.local.invalidYear||a.calendars.regionalOptions[""].invalidYear),12},monthOfYear:function(t,n){var e=this._validate(t,n,this.minDay,a.calendars.local.invalidMonth||a.calendars.regionalOptions[""].invalidMonth);return(e.month()+this.monthsInYear(e)-this.firstMonth)%this.monthsInYear(e)+this.minMonth},fromMonthOfYear:function(t,n){var e=(n+this.firstMonth-2*this.minMonth)%this.monthsInYear(t)+this.minMonth;return this._validate(t,e,this.minDay,a.calendars.local.invalidMonth||a.calendars.regionalOptions[""].invalidMonth),e},daysInYear:function(t){var n=this._validate(t,this.minMonth,this.minDay,a.calendars.local.invalidYear||a.calendars.regionalOptions[""].invalidYear);return this.leapYear(n)?366:365},dayOfYear:function(t,n,e){var i=this._validate(t,n,e,a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate);return i.toJD()-this.newDate(i.year(),this.fromMonthOfYear(i.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(t,n,e){var i=this._validate(t,n,e,a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate);return(Math.floor(this.toJD(i))+2)%this.daysInWeek()},extraInfo:function(t,n,e){return this._validate(t,n,e,a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate),{}},add:function(t,n,e){return this._validate(t,this.minMonth,this.minDay,a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate),this._correctAdd(t,this._add(t,n,e),n,e)},_add:function(a,t,n){if(this._validateLevel++,"d"===n||"w"===n){var e=a.toJD()+t*("w"===n?this.daysInWeek():1),i=a.calendar().fromJD(e);return this._validateLevel--,[i.year(),i.month(),i.day()]}try{var r=a.year()+("y"===n?t:0),s=a.monthOfYear()+("m"===n?t:0),i=a.day(),o=function(a){for(;st-1+a.minMonth;)r++,s-=t,t=a.monthsInYear(r)};"y"===n?(a.month()!==this.fromMonthOfYear(r,s)&&(s=this.newDate(r,a.month(),this.minDay).monthOfYear()),s=Math.min(s,this.monthsInYear(r)),i=Math.min(i,this.daysInMonth(r,this.fromMonthOfYear(r,s)))):"m"===n&&(o(this),i=Math.min(i,this.daysInMonth(r,this.fromMonthOfYear(r,s))));var l=[r,this.fromMonthOfYear(r,s),i];return this._validateLevel--,l}catch(h){throw this._validateLevel--,h}},_correctAdd:function(a,t,n,e){if(!(this.hasYearZero||"y"!==e&&"m"!==e||0!==t[0]&&a.year()>0==t[0]>0)){var i={y:[1,1,"y"],m:[1,this.monthsInYear(-1),"m"],w:[this.daysInWeek(),this.daysInYear(-1),"d"],d:[1,this.daysInYear(-1),"d"]}[e],r=0>n?-1:1;t=this._add(a,n*i[0]+r*i[1],i[2])}return a.date(t[0],t[1],t[2])},set:function(t,n,e){this._validate(t,this.minMonth,this.minDay,a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate);var i="y"===e?n:t.year(),r="m"===e?n:t.month(),s="d"===e?n:t.day();return("y"===e||"m"===e)&&(s=Math.min(s,this.daysInMonth(i,r))),t.date(i,r,s)},isValid:function(a,t,n){this._validateLevel++;var e=this.hasYearZero||0!==a;if(e){var i=this.newDate(a,t,this.minDay);e=t>=this.minMonth&&t-this.minMonth=this.minDay&&n-this.minDayt&&t++,3>n&&(n+=12,t--);var r=Math.floor(t/100),s=2-r+Math.floor(r/4);return Math.floor(365.25*(t+4716))+Math.floor(30.6001*(n+1))+e+s-1524.5},fromJD:function(a){var t=Math.floor(a+.5),n=Math.floor((t-1867216.25)/36524.25);n=t+1+n-Math.floor(n/4);var e=n+1524,i=Math.floor((e-122.1)/365.25),r=Math.floor(365.25*i),s=Math.floor((e-r)/30.6001),o=e-r-Math.floor(30.6001*s),l=s-(s>13.5?13:1),h=i-(l>2.5?4716:4715);return 0>=h&&h--,this.newDate(h,l,o)},toJSDate:function(t,n,e){var i=this._validate(t,n,e,a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate),r=new Date(i.year(),i.month()-1,i.day());return r.setHours(0),r.setMinutes(0),r.setSeconds(0),r.setMilliseconds(0),r.setHours(r.getHours()>12?r.getHours()+2:0),r},fromJSDate:function(a){return this.newDate(a.getFullYear(),a.getMonth()+1,a.getDate())}}),a.calendars=new t,a.calendars.cdate=n,a.calendars.baseCalendar=i,a.calendars.calendars.gregorian=r}(jQuery); \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Styles/bootstrap.css b/src/Orchard.Web/Modules/Orchard.Resources/Styles/bootstrap.css index 11c2d739a9a..e531b18a4ef 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Styles/bootstrap.css +++ b/src/Orchard.Web/Modules/Orchard.Resources/Styles/bootstrap.css @@ -2989,7 +2989,6 @@ select[multiple].input-lg { line-height: 1.42857143; border-radius: 4px; -webkit-user-select: none; - -moz-user-select: none; -ms-user-select: none; user-select: none; } @@ -5097,14 +5096,6 @@ a.thumbnail.active { .alert-danger .alert-link { color: #843534; } -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} @keyframes progress-bar-stripes { from { background-position: 40px 0; @@ -5140,7 +5131,6 @@ a.thumbnail.active { } .progress.active .progress-bar, .progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; animation: progress-bar-stripes 2s linear infinite; } .progress-bar-success { @@ -5851,13 +5841,10 @@ button.close { outline: 0; } .modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); transform: translate(0, -25%); - transition: -webkit-transform 0.3s ease-out; transition: transform 0.3s ease-out; } .modal.in .modal-dialog { - -webkit-transform: translate(0, 0); transform: translate(0, 0); } .modal-open .modal { @@ -6214,29 +6201,23 @@ button.close { } @media all and (transform-3d), (-webkit-transform-3d) { .carousel-inner > .item { - transition: -webkit-transform 0.6s ease-in-out; transition: transform 0.6s ease-in-out; - -webkit-backface-visibility: hidden; backface-visibility: hidden; - -webkit-perspective: 1000px; perspective: 1000px; } .carousel-inner > .item.next, .carousel-inner > .item.active.right { - -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); left: 0; } .carousel-inner > .item.prev, .carousel-inner > .item.active.left { - -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); left: 0; } .carousel-inner > .item.next.left, .carousel-inner > .item.prev.right, .carousel-inner > .item.active { - -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); left: 0; } @@ -6702,4 +6683,4 @@ button.close { } } -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJvb3RzdHJhcC5jc3MiLCJub3JtYWxpemUubGVzcyIsInByaW50Lmxlc3MiLCJnbHlwaGljb25zLmxlc3MiLCJzY2FmZm9sZGluZy5sZXNzIiwibWl4aW5zL3ZlbmRvci1wcmVmaXhlcy5sZXNzIiwibWl4aW5zL3RhYi1mb2N1cy5sZXNzIiwibWl4aW5zL2ltYWdlLmxlc3MiLCJ0eXBlLmxlc3MiLCJtaXhpbnMvdGV4dC1lbXBoYXNpcy5sZXNzIiwibWl4aW5zL2JhY2tncm91bmQtdmFyaWFudC5sZXNzIiwibWl4aW5zL3RleHQtb3ZlcmZsb3cubGVzcyIsImNvZGUubGVzcyIsImdyaWQubGVzcyIsIm1peGlucy9ncmlkLmxlc3MiLCJtaXhpbnMvZ3JpZC1mcmFtZXdvcmsubGVzcyIsInRhYmxlcy5sZXNzIiwibWl4aW5zL3RhYmxlLXJvdy5sZXNzIiwiZm9ybXMubGVzcyIsIm1peGlucy9mb3Jtcy5sZXNzIiwiYnV0dG9ucy5sZXNzIiwibWl4aW5zL2J1dHRvbnMubGVzcyIsIm1peGlucy9vcGFjaXR5Lmxlc3MiLCJjb21wb25lbnQtYW5pbWF0aW9ucy5sZXNzIiwiZHJvcGRvd25zLmxlc3MiLCJtaXhpbnMvbmF2LWRpdmlkZXIubGVzcyIsIm1peGlucy9yZXNldC1maWx0ZXIubGVzcyIsImJ1dHRvbi1ncm91cHMubGVzcyIsIm1peGlucy9ib3JkZXItcmFkaXVzLmxlc3MiLCJpbnB1dC1ncm91cHMubGVzcyIsIm5hdnMubGVzcyIsIm5hdmJhci5sZXNzIiwibWl4aW5zL25hdi12ZXJ0aWNhbC1hbGlnbi5sZXNzIiwidXRpbGl0aWVzLmxlc3MiLCJicmVhZGNydW1icy5sZXNzIiwicGFnaW5hdGlvbi5sZXNzIiwibWl4aW5zL3BhZ2luYXRpb24ubGVzcyIsInBhZ2VyLmxlc3MiLCJsYWJlbHMubGVzcyIsIm1peGlucy9sYWJlbHMubGVzcyIsImJhZGdlcy5sZXNzIiwianVtYm90cm9uLmxlc3MiLCJ0aHVtYm5haWxzLmxlc3MiLCJhbGVydHMubGVzcyIsIm1peGlucy9hbGVydHMubGVzcyIsInByb2dyZXNzLWJhcnMubGVzcyIsIm1peGlucy9ncmFkaWVudHMubGVzcyIsIm1peGlucy9wcm9ncmVzcy1iYXIubGVzcyIsIm1lZGlhLmxlc3MiLCJsaXN0LWdyb3VwLmxlc3MiLCJtaXhpbnMvbGlzdC1ncm91cC5sZXNzIiwicGFuZWxzLmxlc3MiLCJtaXhpbnMvcGFuZWxzLmxlc3MiLCJyZXNwb25zaXZlLWVtYmVkLmxlc3MiLCJ3ZWxscy5sZXNzIiwiY2xvc2UubGVzcyIsIm1vZGFscy5sZXNzIiwidG9vbHRpcC5sZXNzIiwibWl4aW5zL3Jlc2V0LXRleHQubGVzcyIsInBvcG92ZXJzLmxlc3MiLCJjYXJvdXNlbC5sZXNzIiwibWl4aW5zL2NsZWFyZml4Lmxlc3MiLCJtaXhpbnMvY2VudGVyLWJsb2NrLmxlc3MiLCJtaXhpbnMvaGlkZS10ZXh0Lmxlc3MiLCJyZXNwb25zaXZlLXV0aWxpdGllcy5sZXNzIiwibWl4aW5zL3Jlc3BvbnNpdmUtdmlzaWJpbGl0eS5sZXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBOzs7O0dBSUc7QUFDSCw0RUFBNEU7QUNHNUU7RUFDRSx3QkFBQTtFQUNBLDJCQUFBO0VBQ0EsK0JBQUE7Q0RERDtBQ1FEO0VBQ0UsVUFBQTtDRE5EO0FDbUJEOzs7Ozs7Ozs7Ozs7O0VBYUUsZUFBQTtDRGpCRDtBQ3lCRDs7OztFQUlFLHNCQUFBO0VBQ0EseUJBQUE7Q0R2QkQ7QUMrQkQ7RUFDRSxjQUFBO0VBQ0EsVUFBQTtDRDdCRDtBQ3FDRDs7RUFFRSxjQUFBO0NEbkNEO0FDNkNEO0VBQ0UsOEJBQUE7Q0QzQ0Q7QUNtREQ7O0VBRUUsV0FBQTtDRGpERDtBQzJERDtFQUNFLDBCQUFBO0NEekREO0FDZ0VEOztFQUVFLGtCQUFBO0NEOUREO0FDcUVEO0VBQ0UsbUJBQUE7Q0RuRUQ7QUMyRUQ7RUFDRSxlQUFBO0VBQ0EsaUJBQUE7Q0R6RUQ7QUNnRkQ7RUFDRSxpQkFBQTtFQUNBLFlBQUE7Q0Q5RUQ7QUNxRkQ7RUFDRSxlQUFBO0NEbkZEO0FDMEZEOztFQUVFLGVBQUE7RUFDQSxlQUFBO0VBQ0EsbUJBQUE7RUFDQSx5QkFBQTtDRHhGRDtBQzJGRDtFQUNFLFlBQUE7Q0R6RkQ7QUM0RkQ7RUFDRSxnQkFBQTtDRDFGRDtBQ29HRDtFQUNFLFVBQUE7Q0RsR0Q7QUN5R0Q7RUFDRSxpQkFBQTtDRHZHRDtBQ2lIRDtFQUNFLGlCQUFBO0NEL0dEO0FDc0hEO0VBQ0Usd0JBQUE7RUFDQSxVQUFBO0NEcEhEO0FDMkhEO0VBQ0UsZUFBQTtDRHpIRDtBQ2dJRDs7OztFQUlFLGtDQUFBO0VBQ0EsZUFBQTtDRDlIRDtBQ2dKRDs7Ozs7RUFLRSxlQUFBO0VBQ0EsY0FBQTtFQUNBLFVBQUE7Q0Q5SUQ7QUNxSkQ7RUFDRSxrQkFBQTtDRG5KRDtBQzZKRDs7RUFFRSxxQkFBQTtDRDNKRDtBQ3NLRDs7OztFQUlFLDJCQUFBO0VBQ0EsZ0JBQUE7Q0RwS0Q7QUMyS0Q7O0VBRUUsZ0JBQUE7Q0R6S0Q7QUNnTEQ7O0VBRUUsVUFBQTtFQUNBLFdBQUE7Q0Q5S0Q7QUNzTEQ7RUFDRSxvQkFBQTtDRHBMRDtBQytMRDs7RUFFRSx1QkFBQTtFQUNBLFdBQUE7Q0Q3TEQ7QUNzTUQ7O0VBRUUsYUFBQTtDRHBNRDtBQzRNRDtFQUNFLDhCQUFBO0VBQ0Esd0JBQUE7Q0QxTUQ7QUNtTkQ7O0VBRUUseUJBQUE7Q0RqTkQ7QUN3TkQ7RUFDRSwwQkFBQTtFQUNBLGNBQUE7RUFDQSwrQkFBQTtDRHRORDtBQzhORDtFQUNFLFVBQUE7RUFDQSxXQUFBO0NENU5EO0FDbU9EO0VBQ0UsZUFBQTtDRGpPRDtBQ3lPRDtFQUNFLGtCQUFBO0NEdk9EO0FDaVBEO0VBQ0UsMEJBQUE7RUFDQSxrQkFBQTtDRC9PRDtBQ2tQRDs7RUFFRSxXQUFBO0NEaFBEO0FBQ0QscUZBQXFGO0FFbEZyRjtFQTdGSTs7O0lBR0ksbUNBQUE7SUFDQSx1QkFBQTtJQUNBLDRCQUFBO0lBQ0EsNkJBQUE7R0ZrTEw7RUUvS0M7O0lBRUksMkJBQUE7R0ZpTEw7RUU5S0M7SUFDSSw2QkFBQTtHRmdMTDtFRTdLQztJQUNJLDhCQUFBO0dGK0tMO0VFMUtDOztJQUVJLFlBQUE7R0Y0S0w7RUV6S0M7O0lBRUksdUJBQUE7SUFDQSx5QkFBQTtHRjJLTDtFRXhLQztJQUNJLDRCQUFBO0dGMEtMO0VFdktDOztJQUVJLHlCQUFBO0dGeUtMO0VFdEtDO0lBQ0ksMkJBQUE7R0Z3S0w7RUVyS0M7OztJQUdJLFdBQUE7SUFDQSxVQUFBO0dGdUtMO0VFcEtDOztJQUVJLHdCQUFBO0dGc0tMO0VFaEtDO0lBQ0ksY0FBQTtHRmtLTDtFRWhLQzs7SUFHUSxrQ0FBQTtHRmlLVDtFRTlKQztJQUNJLHVCQUFBO0dGZ0tMO0VFN0pDO0lBQ0kscUNBQUE7R0YrSkw7RUVoS0M7O0lBS1Esa0NBQUE7R0YrSlQ7RUU1SkM7O0lBR1Esa0NBQUE7R0Y2SlQ7Q0FDRjtBR25QRDtFQUNFLG9DQUFBO0VBQ0Esc0RBQUE7RUFDQSxnWUFBQTtDSHFQRDtBRzdPRDtFQUNFLG1CQUFBO0VBQ0EsU0FBQTtFQUNBLHNCQUFBO0VBQ0Esb0NBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZUFBQTtFQUNBLG9DQUFBO0VBQ0EsbUNBQUE7Q0grT0Q7QUczT21DO0VBQVcsZUFBQTtDSDhPOUM7QUc3T21DO0VBQVcsZUFBQTtDSGdQOUM7QUc5T21DOztFQUFXLGlCQUFBO0NIa1A5QztBR2pQbUM7RUFBVyxpQkFBQTtDSG9QOUM7QUduUG1DO0VBQVcsaUJBQUE7Q0hzUDlDO0FHclBtQztFQUFXLGlCQUFBO0NId1A5QztBR3ZQbUM7RUFBVyxpQkFBQTtDSDBQOUM7QUd6UG1DO0VBQVcsaUJBQUE7Q0g0UDlDO0FHM1BtQztFQUFXLGlCQUFBO0NIOFA5QztBRzdQbUM7RUFBVyxpQkFBQTtDSGdROUM7QUcvUG1DO0VBQVcsaUJBQUE7Q0hrUTlDO0FHalFtQztFQUFXLGlCQUFBO0NIb1E5QztBR25RbUM7RUFBVyxpQkFBQTtDSHNROUM7QUdyUW1DO0VBQVcsaUJBQUE7Q0h3UTlDO0FHdlFtQztFQUFXLGlCQUFBO0NIMFE5QztBR3pRbUM7RUFBVyxpQkFBQTtDSDRROUM7QUczUW1DO0VBQVcsaUJBQUE7Q0g4UTlDO0FHN1FtQztFQUFXLGlCQUFBO0NIZ1I5QztBRy9RbUM7RUFBVyxpQkFBQTtDSGtSOUM7QUdqUm1DO0VBQVcsaUJBQUE7Q0hvUjlDO0FHblJtQztFQUFXLGlCQUFBO0NIc1I5QztBR3JSbUM7RUFBVyxpQkFBQTtDSHdSOUM7QUd2Um1DO0VBQVcsaUJBQUE7Q0gwUjlDO0FHelJtQztFQUFXLGlCQUFBO0NINFI5QztBRzNSbUM7RUFBVyxpQkFBQTtDSDhSOUM7QUc3Um1DO0VBQVcsaUJBQUE7Q0hnUzlDO0FHL1JtQztFQUFXLGlCQUFBO0NIa1M5QztBR2pTbUM7RUFBVyxpQkFBQTtDSG9TOUM7QUduU21DO0VBQVcsaUJBQUE7Q0hzUzlDO0FHclNtQztFQUFXLGlCQUFBO0NId1M5QztBR3ZTbUM7RUFBVyxpQkFBQTtDSDBTOUM7QUd6U21DO0VBQVcsaUJBQUE7Q0g0UzlDO0FHM1NtQztFQUFXLGlCQUFBO0NIOFM5QztBRzdTbUM7RUFBVyxpQkFBQTtDSGdUOUM7QUcvU21DO0VBQVcsaUJBQUE7Q0hrVDlDO0FHalRtQztFQUFXLGlCQUFBO0NIb1Q5QztBR25UbUM7RUFBVyxpQkFBQTtDSHNUOUM7QUdyVG1DO0VBQVcsaUJBQUE7Q0h3VDlDO0FHdlRtQztFQUFXLGlCQUFBO0NIMFQ5QztBR3pUbUM7RUFBVyxpQkFBQTtDSDRUOUM7QUczVG1DO0VBQVcsaUJBQUE7Q0g4VDlDO0FHN1RtQztFQUFXLGlCQUFBO0NIZ1U5QztBRy9UbUM7RUFBVyxpQkFBQTtDSGtVOUM7QUdqVW1DO0VBQVcsaUJBQUE7Q0hvVTlDO0FHblVtQztFQUFXLGlCQUFBO0NIc1U5QztBR3JVbUM7RUFBVyxpQkFBQTtDSHdVOUM7QUd2VW1DO0VBQVcsaUJBQUE7Q0gwVTlDO0FHelVtQztFQUFXLGlCQUFBO0NINFU5QztBRzNVbUM7RUFBVyxpQkFBQTtDSDhVOUM7QUc3VW1DO0VBQVcsaUJBQUE7Q0hnVjlDO0FHL1VtQztFQUFXLGlCQUFBO0NIa1Y5QztBR2pWbUM7RUFBVyxpQkFBQTtDSG9WOUM7QUduVm1DO0VBQVcsaUJBQUE7Q0hzVjlDO0FHclZtQztFQUFXLGlCQUFBO0NId1Y5QztBR3ZWbUM7RUFBVyxpQkFBQTtDSDBWOUM7QUd6Vm1DO0VBQVcsaUJBQUE7Q0g0VjlDO0FHM1ZtQztFQUFXLGlCQUFBO0NIOFY5QztBRzdWbUM7RUFBVyxpQkFBQTtDSGdXOUM7QUcvVm1DO0VBQVcsaUJBQUE7Q0hrVzlDO0FHaldtQztFQUFXLGlCQUFBO0NIb1c5QztBR25XbUM7RUFBVyxpQkFBQTtDSHNXOUM7QUdyV21DO0VBQVcsaUJBQUE7Q0h3VzlDO0FHdldtQztFQUFXLGlCQUFBO0NIMFc5QztBR3pXbUM7RUFBVyxpQkFBQTtDSDRXOUM7QUczV21DO0VBQVcsaUJBQUE7Q0g4VzlDO0FHN1dtQztFQUFXLGlCQUFBO0NIZ1g5QztBRy9XbUM7RUFBVyxpQkFBQTtDSGtYOUM7QUdqWG1DO0VBQVcsaUJBQUE7Q0hvWDlDO0FHblhtQztFQUFXLGlCQUFBO0NIc1g5QztBR3JYbUM7RUFBVyxpQkFBQTtDSHdYOUM7QUd2WG1DO0VBQVcsaUJBQUE7Q0gwWDlDO0FHelhtQztFQUFXLGlCQUFBO0NINFg5QztBRzNYbUM7RUFBVyxpQkFBQTtDSDhYOUM7QUc3WG1DO0VBQVcsaUJBQUE7Q0hnWTlDO0FHL1htQztFQUFXLGlCQUFBO0NIa1k5QztBR2pZbUM7RUFBVyxpQkFBQTtDSG9ZOUM7QUduWW1DO0VBQVcsaUJBQUE7Q0hzWTlDO0FHclltQztFQUFXLGlCQUFBO0NId1k5QztBR3ZZbUM7RUFBVyxpQkFBQTtDSDBZOUM7QUd6WW1DO0VBQVcsaUJBQUE7Q0g0WTlDO0FHM1ltQztFQUFXLGlCQUFBO0NIOFk5QztBRzdZbUM7RUFBVyxpQkFBQTtDSGdaOUM7QUcvWW1DO0VBQVcsaUJBQUE7Q0hrWjlDO0FHalptQztFQUFXLGlCQUFBO0NIb1o5QztBR25abUM7RUFBVyxpQkFBQTtDSHNaOUM7QUdyWm1DO0VBQVcsaUJBQUE7Q0h3WjlDO0FHdlptQztFQUFXLGlCQUFBO0NIMFo5QztBR3pabUM7RUFBVyxpQkFBQTtDSDRaOUM7QUczWm1DO0VBQVcsaUJBQUE7Q0g4WjlDO0FHN1ptQztFQUFXLGlCQUFBO0NIZ2E5QztBRy9abUM7RUFBVyxpQkFBQTtDSGthOUM7QUdqYW1DO0VBQVcsaUJBQUE7Q0hvYTlDO0FHbmFtQztFQUFXLGlCQUFBO0NIc2E5QztBR3JhbUM7RUFBVyxpQkFBQTtDSHdhOUM7QUd2YW1DO0VBQVcsaUJBQUE7Q0gwYTlDO0FHemFtQztFQUFXLGlCQUFBO0NINGE5QztBRzNhbUM7RUFBVyxpQkFBQTtDSDhhOUM7QUc3YW1DO0VBQVcsaUJBQUE7Q0hnYjlDO0FHL2FtQztFQUFXLGlCQUFBO0NIa2I5QztBR2pibUM7RUFBVyxpQkFBQTtDSG9iOUM7QUduYm1DO0VBQVcsaUJBQUE7Q0hzYjlDO0FHcmJtQztFQUFXLGlCQUFBO0NId2I5QztBR3ZibUM7RUFBVyxpQkFBQTtDSDBiOUM7QUd6Ym1DO0VBQVcsaUJBQUE7Q0g0YjlDO0FHM2JtQztFQUFXLGlCQUFBO0NIOGI5QztBRzdibUM7RUFBVyxpQkFBQTtDSGdjOUM7QUcvYm1DO0VBQVcsaUJBQUE7Q0hrYzlDO0FHamNtQztFQUFXLGlCQUFBO0NIb2M5QztBR25jbUM7RUFBVyxpQkFBQTtDSHNjOUM7QUdyY21DO0VBQVcsaUJBQUE7Q0h3YzlDO0FHdmNtQztFQUFXLGlCQUFBO0NIMGM5QztBR3pjbUM7RUFBVyxpQkFBQTtDSDRjOUM7QUczY21DO0VBQVcsaUJBQUE7Q0g4YzlDO0FHN2NtQztFQUFXLGlCQUFBO0NIZ2Q5QztBRy9jbUM7RUFBVyxpQkFBQTtDSGtkOUM7QUdqZG1DO0VBQVcsaUJBQUE7Q0hvZDlDO0FHbmRtQztFQUFXLGlCQUFBO0NIc2Q5QztBR3JkbUM7RUFBVyxpQkFBQTtDSHdkOUM7QUd2ZG1DO0VBQVcsaUJBQUE7Q0gwZDlDO0FHemRtQztFQUFXLGlCQUFBO0NINGQ5QztBRzNkbUM7RUFBVyxpQkFBQTtDSDhkOUM7QUc3ZG1DO0VBQVcsaUJBQUE7Q0hnZTlDO0FHL2RtQztFQUFXLGlCQUFBO0NIa2U5QztBR2plbUM7RUFBVyxpQkFBQTtDSG9lOUM7QUduZW1DO0VBQVcsaUJBQUE7Q0hzZTlDO0FHcmVtQztFQUFXLGlCQUFBO0NId2U5QztBR3ZlbUM7RUFBVyxpQkFBQTtDSDBlOUM7QUd6ZW1DO0VBQVcsaUJBQUE7Q0g0ZTlDO0FHM2VtQztFQUFXLGlCQUFBO0NIOGU5QztBRzdlbUM7RUFBVyxpQkFBQTtDSGdmOUM7QUcvZW1DO0VBQVcsaUJBQUE7Q0hrZjlDO0FHamZtQztFQUFXLGlCQUFBO0NIb2Y5QztBR25mbUM7RUFBVyxpQkFBQTtDSHNmOUM7QUdyZm1DO0VBQVcsaUJBQUE7Q0h3ZjlDO0FHdmZtQztFQUFXLGlCQUFBO0NIMGY5QztBR3pmbUM7RUFBVyxpQkFBQTtDSDRmOUM7QUczZm1DO0VBQVcsaUJBQUE7Q0g4ZjlDO0FHN2ZtQztFQUFXLGlCQUFBO0NIZ2dCOUM7QUcvZm1DO0VBQVcsaUJBQUE7Q0hrZ0I5QztBR2pnQm1DO0VBQVcsaUJBQUE7Q0hvZ0I5QztBR25nQm1DO0VBQVcsaUJBQUE7Q0hzZ0I5QztBR3JnQm1DO0VBQVcsaUJBQUE7Q0h3Z0I5QztBR3ZnQm1DO0VBQVcsaUJBQUE7Q0gwZ0I5QztBR3pnQm1DO0VBQVcsaUJBQUE7Q0g0Z0I5QztBRzNnQm1DO0VBQVcsaUJBQUE7Q0g4Z0I5QztBRzdnQm1DO0VBQVcsaUJBQUE7Q0hnaEI5QztBRy9nQm1DO0VBQVcsaUJBQUE7Q0hraEI5QztBR2poQm1DO0VBQVcsaUJBQUE7Q0hvaEI5QztBR25oQm1DO0VBQVcsaUJBQUE7Q0hzaEI5QztBR3JoQm1DO0VBQVcsaUJBQUE7Q0h3aEI5QztBR3ZoQm1DO0VBQVcsaUJBQUE7Q0gwaEI5QztBR3poQm1DO0VBQVcsaUJBQUE7Q0g0aEI5QztBRzNoQm1DO0VBQVcsaUJBQUE7Q0g4aEI5QztBRzdoQm1DO0VBQVcsaUJBQUE7Q0hnaUI5QztBRy9oQm1DO0VBQVcsaUJBQUE7Q0hraUI5QztBR2ppQm1DO0VBQVcsaUJBQUE7Q0hvaUI5QztBR25pQm1DO0VBQVcsaUJBQUE7Q0hzaUI5QztBR3JpQm1DO0VBQVcsaUJBQUE7Q0h3aUI5QztBR3ZpQm1DO0VBQVcsaUJBQUE7Q0gwaUI5QztBR3ppQm1DO0VBQVcsaUJBQUE7Q0g0aUI5QztBRzNpQm1DO0VBQVcsaUJBQUE7Q0g4aUI5QztBRzdpQm1DO0VBQVcsaUJBQUE7Q0hnakI5QztBRy9pQm1DO0VBQVcsaUJBQUE7Q0hrakI5QztBR2pqQm1DO0VBQVcsaUJBQUE7Q0hvakI5QztBR25qQm1DO0VBQVcsaUJBQUE7Q0hzakI5QztBR3JqQm1DO0VBQVcsaUJBQUE7Q0h3akI5QztBR3ZqQm1DO0VBQVcsaUJBQUE7Q0gwakI5QztBR3pqQm1DO0VBQVcsaUJBQUE7Q0g0akI5QztBRzNqQm1DO0VBQVcsaUJBQUE7Q0g4akI5QztBRzdqQm1DO0VBQVcsaUJBQUE7Q0hna0I5QztBRy9qQm1DO0VBQVcsaUJBQUE7Q0hra0I5QztBR2prQm1DO0VBQVcsaUJBQUE7Q0hva0I5QztBR25rQm1DO0VBQVcsaUJBQUE7Q0hza0I5QztBR3JrQm1DO0VBQVcsaUJBQUE7Q0h3a0I5QztBR3ZrQm1DO0VBQVcsaUJBQUE7Q0gwa0I5QztBR3prQm1DO0VBQVcsaUJBQUE7Q0g0a0I5QztBRzNrQm1DO0VBQVcsaUJBQUE7Q0g4a0I5QztBRzdrQm1DO0VBQVcsaUJBQUE7Q0hnbEI5QztBRy9rQm1DO0VBQVcsaUJBQUE7Q0hrbEI5QztBR2psQm1DO0VBQVcsaUJBQUE7Q0hvbEI5QztBR25sQm1DO0VBQVcsaUJBQUE7Q0hzbEI5QztBR3JsQm1DO0VBQVcsaUJBQUE7Q0h3bEI5QztBR3ZsQm1DO0VBQVcsaUJBQUE7Q0gwbEI5QztBR3psQm1DO0VBQVcsaUJBQUE7Q0g0bEI5QztBRzNsQm1DO0VBQVcsaUJBQUE7Q0g4bEI5QztBRzdsQm1DO0VBQVcsaUJBQUE7Q0hnbUI5QztBRy9sQm1DO0VBQVcsaUJBQUE7Q0hrbUI5QztBR2ptQm1DO0VBQVcsaUJBQUE7Q0hvbUI5QztBR25tQm1DO0VBQVcsaUJBQUE7Q0hzbUI5QztBR3JtQm1DO0VBQVcsaUJBQUE7Q0h3bUI5QztBR3ZtQm1DO0VBQVcsaUJBQUE7Q0gwbUI5QztBR3ptQm1DO0VBQVcsaUJBQUE7Q0g0bUI5QztBRzNtQm1DO0VBQVcsaUJBQUE7Q0g4bUI5QztBRzdtQm1DO0VBQVcsaUJBQUE7Q0hnbkI5QztBRy9tQm1DO0VBQVcsaUJBQUE7Q0hrbkI5QztBR2puQm1DO0VBQVcsaUJBQUE7Q0hvbkI5QztBR25uQm1DO0VBQVcsaUJBQUE7Q0hzbkI5QztBR3JuQm1DO0VBQVcsaUJBQUE7Q0h3bkI5QztBR3ZuQm1DO0VBQVcsaUJBQUE7Q0gwbkI5QztBR3puQm1DO0VBQVcsaUJBQUE7Q0g0bkI5QztBRzNuQm1DO0VBQVcsaUJBQUE7Q0g4bkI5QztBRzduQm1DO0VBQVcsaUJBQUE7Q0hnb0I5QztBRy9uQm1DO0VBQVcsaUJBQUE7Q0hrb0I5QztBR2pvQm1DO0VBQVcsaUJBQUE7Q0hvb0I5QztBR25vQm1DO0VBQVcsaUJBQUE7Q0hzb0I5QztBR3JvQm1DO0VBQVcsaUJBQUE7Q0h3b0I5QztBRy9uQm1DO0VBQVcsaUJBQUE7Q0hrb0I5QztBR2pvQm1DO0VBQVcsaUJBQUE7Q0hvb0I5QztBR25vQm1DO0VBQVcsaUJBQUE7Q0hzb0I5QztBR3JvQm1DO0VBQVcsaUJBQUE7Q0h3b0I5QztBR3ZvQm1DO0VBQVcsaUJBQUE7Q0gwb0I5QztBR3pvQm1DO0VBQVcsaUJBQUE7Q0g0b0I5QztBRzNvQm1DO0VBQVcsaUJBQUE7Q0g4b0I5QztBRzdvQm1DO0VBQVcsaUJBQUE7Q0hncEI5QztBRy9vQm1DO0VBQVcsaUJBQUE7Q0hrcEI5QztBR2pwQm1DO0VBQVcsaUJBQUE7Q0hvcEI5QztBR25wQm1DO0VBQVcsaUJBQUE7Q0hzcEI5QztBR3JwQm1DO0VBQVcsaUJBQUE7Q0h3cEI5QztBR3ZwQm1DO0VBQVcsaUJBQUE7Q0gwcEI5QztBR3pwQm1DO0VBQVcsaUJBQUE7Q0g0cEI5QztBRzNwQm1DO0VBQVcsaUJBQUE7Q0g4cEI5QztBRzdwQm1DO0VBQVcsaUJBQUE7Q0hncUI5QztBRy9wQm1DO0VBQVcsaUJBQUE7Q0hrcUI5QztBR2pxQm1DO0VBQVcsaUJBQUE7Q0hvcUI5QztBR25xQm1DO0VBQVcsaUJBQUE7Q0hzcUI5QztBR3JxQm1DO0VBQVcsaUJBQUE7Q0h3cUI5QztBR3ZxQm1DO0VBQVcsaUJBQUE7Q0gwcUI5QztBR3pxQm1DO0VBQVcsaUJBQUE7Q0g0cUI5QztBRzNxQm1DO0VBQVcsaUJBQUE7Q0g4cUI5QztBRzdxQm1DO0VBQVcsaUJBQUE7Q0hnckI5QztBRy9xQm1DO0VBQVcsaUJBQUE7Q0hrckI5QztBR2pyQm1DO0VBQVcsaUJBQUE7Q0hvckI5QztBR25yQm1DO0VBQVcsaUJBQUE7Q0hzckI5QztBR3JyQm1DO0VBQVcsaUJBQUE7Q0h3ckI5QztBR3ZyQm1DO0VBQVcsaUJBQUE7Q0gwckI5QztBR3pyQm1DO0VBQVcsaUJBQUE7Q0g0ckI5QztBRzNyQm1DO0VBQVcsaUJBQUE7Q0g4ckI5QztBRzdyQm1DO0VBQVcsaUJBQUE7Q0hnc0I5QztBRy9yQm1DO0VBQVcsaUJBQUE7Q0hrc0I5QztBR2pzQm1DO0VBQVcsaUJBQUE7Q0hvc0I5QztBR25zQm1DO0VBQVcsaUJBQUE7Q0hzc0I5QztBR3JzQm1DO0VBQVcsaUJBQUE7Q0h3c0I5QztBR3ZzQm1DO0VBQVcsaUJBQUE7Q0gwc0I5QztBR3pzQm1DO0VBQVcsaUJBQUE7Q0g0c0I5QztBRzNzQm1DO0VBQVcsaUJBQUE7Q0g4c0I5QztBRzdzQm1DO0VBQVcsaUJBQUE7Q0hndEI5QztBRy9zQm1DO0VBQVcsaUJBQUE7Q0hrdEI5QztBR2p0Qm1DO0VBQVcsaUJBQUE7Q0hvdEI5QztBR250Qm1DO0VBQVcsaUJBQUE7Q0hzdEI5QztBR3J0Qm1DO0VBQVcsaUJBQUE7Q0h3dEI5QztBR3Z0Qm1DO0VBQVcsaUJBQUE7Q0gwdEI5QztBR3p0Qm1DO0VBQVcsaUJBQUE7Q0g0dEI5QztBRzN0Qm1DO0VBQVcsaUJBQUE7Q0g4dEI5QztBRzd0Qm1DO0VBQVcsaUJBQUE7Q0hndUI5QztBRy90Qm1DO0VBQVcsaUJBQUE7Q0hrdUI5QztBR2p1Qm1DO0VBQVcsaUJBQUE7Q0hvdUI5QztBR251Qm1DO0VBQVcsaUJBQUE7Q0hzdUI5QztBR3J1Qm1DO0VBQVcsaUJBQUE7Q0h3dUI5QztBR3Z1Qm1DO0VBQVcsaUJBQUE7Q0gwdUI5QztBR3p1Qm1DO0VBQVcsaUJBQUE7Q0g0dUI5QztBRzN1Qm1DO0VBQVcsaUJBQUE7Q0g4dUI5QztBRzd1Qm1DO0VBQVcsaUJBQUE7Q0hndkI5QztBSXRoQ0Q7RUNrRVUsdUJBQUE7Q0x5OUJUO0FJeGhDRDs7RUMrRFUsdUJBQUE7Q0wrOUJUO0FJdGhDRDtFQUNFLGdCQUFBO0VBQ0EsOENBQUE7Q0p3aENEO0FJcmhDRDtFQUNFLDREQUFBO0VBQ0EsZ0JBQUE7RUFDQSx3QkFBQTtFQUNBLGVBQUE7RUFDQSx1QkFBQTtDSnVoQ0Q7QUluaENEOzs7O0VBSUUscUJBQUE7RUFDQSxtQkFBQTtFQUNBLHFCQUFBO0NKcWhDRDtBSS9nQ0Q7RUFDRSxlQUFBO0VBQ0Esc0JBQUE7Q0ppaENEO0FJL2dDQzs7RUFFRSxlQUFBO0VBQ0EsMkJBQUE7Q0ppaENIO0FJOWdDQztFRXJEQSxxQkFBQTtFQUVBLDJDQUFBO0VBQ0EscUJBQUE7Q05xa0NEO0FJeGdDRDtFQUNFLFVBQUE7Q0owZ0NEO0FJcGdDRDtFQUNFLHVCQUFBO0NKc2dDRDtBSWxnQ0Q7Ozs7O0VHdkVFLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGFBQUE7Q1BnbENEO0FJdGdDRDtFQUNFLG1CQUFBO0NKd2dDRDtBSWxnQ0Q7RUFDRSxhQUFBO0VBQ0Esd0JBQUE7RUFDQSx1QkFBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7RUMrRlEsaUNBQUE7RUV2TFIsc0JBQUE7RUFDQSxnQkFBQTtFQUNBLGFBQUE7Q1BnbUNEO0FJbGdDRDtFQUNFLG1CQUFBO0NKb2dDRDtBSTkvQkQ7RUFDRSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0EsVUFBQTtFQUNBLDhCQUFBO0NKZ2dDRDtBSXgvQkQ7RUFDRSxtQkFBQTtFQUNBLFdBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtFQUNBLHVCQUFBO0VBQ0EsVUFBQTtDSjAvQkQ7QUlsL0JDOztFQUVFLGlCQUFBO0VBQ0EsWUFBQTtFQUNBLGFBQUE7RUFDQSxVQUFBO0VBQ0Esa0JBQUE7RUFDQSxXQUFBO0NKby9CSDtBSXorQkQ7RUFDRSxnQkFBQTtDSjIrQkQ7QVFsb0NEOzs7Ozs7Ozs7Ozs7RUFFRSxxQkFBQTtFQUNBLGlCQUFBO0VBQ0EsaUJBQUE7RUFDQSxlQUFBO0NSOG9DRDtBUW5wQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQVNJLG9CQUFBO0VBQ0EsZUFBQTtFQUNBLGVBQUE7Q1JvcUNIO0FRaHFDRDs7Ozs7O0VBR0UsaUJBQUE7RUFDQSxvQkFBQTtDUnFxQ0Q7QVF6cUNEOzs7Ozs7Ozs7Ozs7RUFRSSxlQUFBO0NSK3FDSDtBUTVxQ0Q7Ozs7OztFQUdFLGlCQUFBO0VBQ0Esb0JBQUE7Q1JpckNEO0FRcnJDRDs7Ozs7Ozs7Ozs7O0VBUUksZUFBQTtDUjJyQ0g7QVF2ckNEOztFQUFVLGdCQUFBO0NSMnJDVDtBUTFyQ0Q7O0VBQVUsZ0JBQUE7Q1I4ckNUO0FRN3JDRDs7RUFBVSxnQkFBQTtDUmlzQ1Q7QVFoc0NEOztFQUFVLGdCQUFBO0NSb3NDVDtBUW5zQ0Q7O0VBQVUsZ0JBQUE7Q1J1c0NUO0FRdHNDRDs7RUFBVSxnQkFBQTtDUjBzQ1Q7QVFwc0NEO0VBQ0UsaUJBQUE7Q1Jzc0NEO0FRbnNDRDtFQUNFLG9CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLGlCQUFBO0NScXNDRDtBUWhzQ0Q7RUF3T0E7SUExT0ksZ0JBQUE7R1Jzc0NEO0NBQ0Y7QVE5ckNEOztFQUVFLGVBQUE7Q1Jnc0NEO0FRN3JDRDs7RUFFRSwwQkFBQTtFQUNBLGNBQUE7Q1IrckNEO0FRM3JDRDtFQUF1QixpQkFBQTtDUjhyQ3RCO0FRN3JDRDtFQUF1QixrQkFBQTtDUmdzQ3RCO0FRL3JDRDtFQUF1QixtQkFBQTtDUmtzQ3RCO0FRanNDRDtFQUF1QixvQkFBQTtDUm9zQ3RCO0FRbnNDRDtFQUF1QixvQkFBQTtDUnNzQ3RCO0FRbnNDRDtFQUF1QiwwQkFBQTtDUnNzQ3RCO0FRcnNDRDtFQUF1QiwwQkFBQTtDUndzQ3RCO0FRdnNDRDtFQUF1QiwyQkFBQTtDUjBzQ3RCO0FRdnNDRDtFQUNFLGVBQUE7Q1J5c0NEO0FRdnNDRDtFQ3JHRSxlQUFBO0NUK3lDRDtBUzl5Q0M7O0VBRUUsZUFBQTtDVGd6Q0g7QVEzc0NEO0VDeEdFLGVBQUE7Q1RzekNEO0FTcnpDQzs7RUFFRSxlQUFBO0NUdXpDSDtBUS9zQ0Q7RUMzR0UsZUFBQTtDVDZ6Q0Q7QVM1ekNDOztFQUVFLGVBQUE7Q1Q4ekNIO0FRbnRDRDtFQzlHRSxlQUFBO0NUbzBDRDtBU24wQ0M7O0VBRUUsZUFBQTtDVHEwQ0g7QVF2dENEO0VDakhFLGVBQUE7Q1QyMENEO0FTMTBDQzs7RUFFRSxlQUFBO0NUNDBDSDtBUXZ0Q0Q7RUFHRSxZQUFBO0VFM0hBLDBCQUFBO0NWbTFDRDtBVWwxQ0M7O0VBRUUsMEJBQUE7Q1ZvMUNIO0FRenRDRDtFRTlIRSwwQkFBQTtDVjAxQ0Q7QVV6MUNDOztFQUVFLDBCQUFBO0NWMjFDSDtBUTd0Q0Q7RUVqSUUsMEJBQUE7Q1ZpMkNEO0FVaDJDQzs7RUFFRSwwQkFBQTtDVmsyQ0g7QVFqdUNEO0VFcElFLDBCQUFBO0NWdzJDRDtBVXYyQ0M7O0VBRUUsMEJBQUE7Q1Z5MkNIO0FRcnVDRDtFRXZJRSwwQkFBQTtDVisyQ0Q7QVU5MkNDOztFQUVFLDBCQUFBO0NWZzNDSDtBUXB1Q0Q7RUFDRSxvQkFBQTtFQUNBLG9CQUFBO0VBQ0EsaUNBQUE7Q1JzdUNEO0FROXRDRDs7RUFFRSxjQUFBO0VBQ0Esb0JBQUE7Q1JndUNEO0FRbnVDRDs7OztFQU1JLGlCQUFBO0NSbXVDSDtBUTV0Q0Q7RUFDRSxnQkFBQTtFQUNBLGlCQUFBO0NSOHRDRDtBUTF0Q0Q7RUFMRSxnQkFBQTtFQUNBLGlCQUFBO0VBTUEsa0JBQUE7Q1I2dENEO0FRL3RDRDtFQUtJLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxtQkFBQTtDUjZ0Q0g7QVF4dENEO0VBQ0UsY0FBQTtFQUNBLG9CQUFBO0NSMHRDRDtBUXh0Q0Q7O0VBRUUsd0JBQUE7Q1IwdENEO0FReHRDRDtFQUNFLGtCQUFBO0NSMHRDRDtBUXh0Q0Q7RUFDRSxlQUFBO0NSMHRDRDtBUWpzQ0Q7RUE2RUE7SUF2Rk0sWUFBQTtJQUNBLGFBQUE7SUFDQSxZQUFBO0lBQ0Esa0JBQUE7SUd0TkosaUJBQUE7SUFDQSx3QkFBQTtJQUNBLG9CQUFBO0dYczZDQztFUTluQ0g7SUFoRk0sbUJBQUE7R1JpdENIO0NBQ0Y7QVF4c0NEOztFQUdFLGFBQUE7RUFDQSxrQ0FBQTtDUnlzQ0Q7QVF2c0NEO0VBQ0UsZUFBQTtFQTlJcUIsMEJBQUE7Q1J3MUN0QjtBUXJzQ0Q7RUFDRSxtQkFBQTtFQUNBLGlCQUFBO0VBQ0Esa0JBQUE7RUFDQSwrQkFBQTtDUnVzQ0Q7QVFsc0NHOzs7RUFDRSxpQkFBQTtDUnNzQ0w7QVFodENEOzs7RUFtQkksZUFBQTtFQUNBLGVBQUE7RUFDQSx3QkFBQTtFQUNBLGVBQUE7Q1Jrc0NIO0FRaHNDRzs7O0VBQ0UsdUJBQUE7Q1Jvc0NMO0FRNXJDRDs7RUFFRSxvQkFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0NBQUE7RUFDQSxlQUFBO0VBQ0Esa0JBQUE7Q1I4ckNEO0FReHJDRzs7Ozs7O0VBQVcsWUFBQTtDUmdzQ2Q7QVEvckNHOzs7Ozs7RUFDRSx1QkFBQTtDUnNzQ0w7QVFoc0NEO0VBQ0Usb0JBQUE7RUFDQSxtQkFBQTtFQUNBLHdCQUFBO0NSa3NDRDtBWXgrQ0Q7Ozs7RUFJRSwrREFBQTtDWjArQ0Q7QVl0K0NEO0VBQ0UsaUJBQUE7RUFDQSxlQUFBO0VBQ0EsZUFBQTtFQUNBLDBCQUFBO0VBQ0EsbUJBQUE7Q1p3K0NEO0FZcCtDRDtFQUNFLGlCQUFBO0VBQ0EsZUFBQTtFQUNBLFlBQUE7RUFDQSx1QkFBQTtFQUNBLG1CQUFBO0VBQ0EsK0NBQUE7Q1pzK0NEO0FZNStDRDtFQVNJLFdBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsaUJBQUE7Q1pzK0NIO0FZaitDRDtFQUNFLGVBQUE7RUFDQSxlQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLHdCQUFBO0VBQ0Esc0JBQUE7RUFDQSxzQkFBQTtFQUNBLGVBQUE7RUFDQSwwQkFBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7Q1ptK0NEO0FZOStDRDtFQWVJLFdBQUE7RUFDQSxtQkFBQTtFQUNBLGVBQUE7RUFDQSxzQkFBQTtFQUNBLDhCQUFBO0VBQ0EsaUJBQUE7Q1prK0NIO0FZNzlDRDtFQUNFLGtCQUFBO0VBQ0EsbUJBQUE7Q1orOUNEO0FhemhERDtFQ0hFLG1CQUFBO0VBQ0Esa0JBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0NkK2hERDtBYXpoREM7RUFxRUY7SUF2RUksYUFBQTtHYitoREQ7Q0FDRjtBYTNoREM7RUFrRUY7SUFwRUksYUFBQTtHYmlpREQ7Q0FDRjtBYTdoREQ7RUErREE7SUFqRUksY0FBQTtHYm1pREQ7Q0FDRjtBYTFoREQ7RUN2QkUsbUJBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7Q2RvakREO0FhdmhERDtFQ3ZCRSxtQkFBQTtFQUNBLG9CQUFBO0NkaWpERDtBZWpqREc7RUFDRSxtQkFBQTtFQUVBLGdCQUFBO0VBRUEsbUJBQUE7RUFDQSxvQkFBQTtDZmlqREw7QWVqaURHO0VBQ0UsWUFBQTtDZm1pREw7QWU1aERDO0VBQ0UsWUFBQTtDZjhoREg7QWUvaERDO0VBQ0Usb0JBQUE7Q2ZpaURIO0FlbGlEQztFQUNFLG9CQUFBO0Nmb2lESDtBZXJpREM7RUFDRSxXQUFBO0NmdWlESDtBZXhpREM7RUFDRSxvQkFBQTtDZjBpREg7QWUzaURDO0VBQ0Usb0JBQUE7Q2Y2aURIO0FlOWlEQztFQUNFLFdBQUE7Q2ZnakRIO0FlampEQztFQUNFLG9CQUFBO0NmbWpESDtBZXBqREM7RUFDRSxvQkFBQTtDZnNqREg7QWV2akRDO0VBQ0UsV0FBQTtDZnlqREg7QWUxakRDO0VBQ0Usb0JBQUE7Q2Y0akRIO0FlN2pEQztFQUNFLG1CQUFBO0NmK2pESDtBZWpqREM7RUFDRSxZQUFBO0NmbWpESDtBZXBqREM7RUFDRSxvQkFBQTtDZnNqREg7QWV2akRDO0VBQ0Usb0JBQUE7Q2Z5akRIO0FlMWpEQztFQUNFLFdBQUE7Q2Y0akRIO0FlN2pEQztFQUNFLG9CQUFBO0NmK2pESDtBZWhrREM7RUFDRSxvQkFBQTtDZmtrREg7QWVua0RDO0VBQ0UsV0FBQTtDZnFrREg7QWV0a0RDO0VBQ0Usb0JBQUE7Q2Z3a0RIO0FlemtEQztFQUNFLG9CQUFBO0NmMmtESDtBZTVrREM7RUFDRSxXQUFBO0NmOGtESDtBZS9rREM7RUFDRSxvQkFBQTtDZmlsREg7QWVsbERDO0VBQ0UsbUJBQUE7Q2ZvbERIO0FlaGxEQztFQUNFLFlBQUE7Q2ZrbERIO0FlbG1EQztFQUNFLFdBQUE7Q2ZvbURIO0Flcm1EQztFQUNFLG1CQUFBO0NmdW1ESDtBZXhtREM7RUFDRSxtQkFBQTtDZjBtREg7QWUzbURDO0VBQ0UsVUFBQTtDZjZtREg7QWU5bURDO0VBQ0UsbUJBQUE7Q2ZnbkRIO0Flam5EQztFQUNFLG1CQUFBO0NmbW5ESDtBZXBuREM7RUFDRSxVQUFBO0Nmc25ESDtBZXZuREM7RUFDRSxtQkFBQTtDZnluREg7QWUxbkRDO0VBQ0UsbUJBQUE7Q2Y0bkRIO0FlN25EQztFQUNFLFVBQUE7Q2YrbkRIO0FlaG9EQztFQUNFLG1CQUFBO0Nma29ESDtBZW5vREM7RUFDRSxrQkFBQTtDZnFvREg7QWVqb0RDO0VBQ0UsV0FBQTtDZm1vREg7QWVybkRDO0VBQ0Usa0JBQUE7Q2Z1bkRIO0FleG5EQztFQUNFLDBCQUFBO0NmMG5ESDtBZTNuREM7RUFDRSwwQkFBQTtDZjZuREg7QWU5bkRDO0VBQ0UsaUJBQUE7Q2Znb0RIO0Flam9EQztFQUNFLDBCQUFBO0NmbW9ESDtBZXBvREM7RUFDRSwwQkFBQTtDZnNvREg7QWV2b0RDO0VBQ0UsaUJBQUE7Q2Z5b0RIO0FlMW9EQztFQUNFLDBCQUFBO0NmNG9ESDtBZTdvREM7RUFDRSwwQkFBQTtDZitvREg7QWVocERDO0VBQ0UsaUJBQUE7Q2ZrcERIO0FlbnBEQztFQUNFLDBCQUFBO0NmcXBESDtBZXRwREM7RUFDRSx5QkFBQTtDZndwREg7QWV6cERDO0VBQ0UsZ0JBQUE7Q2YycERIO0FhM3BERDtFRWxDSTtJQUNFLFlBQUE7R2Znc0RIO0VlenJERDtJQUNFLFlBQUE7R2YyckREO0VlNXJERDtJQUNFLG9CQUFBO0dmOHJERDtFZS9yREQ7SUFDRSxvQkFBQTtHZmlzREQ7RWVsc0REO0lBQ0UsV0FBQTtHZm9zREQ7RWVyc0REO0lBQ0Usb0JBQUE7R2Z1c0REO0VleHNERDtJQUNFLG9CQUFBO0dmMHNERDtFZTNzREQ7SUFDRSxXQUFBO0dmNnNERDtFZTlzREQ7SUFDRSxvQkFBQTtHZmd0REQ7RWVqdEREO0lBQ0Usb0JBQUE7R2ZtdEREO0VlcHRERDtJQUNFLFdBQUE7R2ZzdEREO0VldnRERDtJQUNFLG9CQUFBO0dmeXRERDtFZTF0REQ7SUFDRSxtQkFBQTtHZjR0REQ7RWU5c0REO0lBQ0UsWUFBQTtHZmd0REQ7RWVqdEREO0lBQ0Usb0JBQUE7R2ZtdEREO0VlcHRERDtJQUNFLG9CQUFBO0dmc3RERDtFZXZ0REQ7SUFDRSxXQUFBO0dmeXRERDtFZTF0REQ7SUFDRSxvQkFBQTtHZjR0REQ7RWU3dEREO0lBQ0Usb0JBQUE7R2YrdEREO0VlaHVERDtJQUNFLFdBQUE7R2ZrdUREO0VlbnVERDtJQUNFLG9CQUFBO0dmcXVERDtFZXR1REQ7SUFDRSxvQkFBQTtHZnd1REQ7RWV6dUREO0lBQ0UsV0FBQTtHZjJ1REQ7RWU1dUREO0lBQ0Usb0JBQUE7R2Y4dUREO0VlL3VERDtJQUNFLG1CQUFBO0dmaXZERDtFZTd1REQ7SUFDRSxZQUFBO0dmK3VERDtFZS92REQ7SUFDRSxXQUFBO0dmaXdERDtFZWx3REQ7SUFDRSxtQkFBQTtHZm93REQ7RWVyd0REO0lBQ0UsbUJBQUE7R2Z1d0REO0VleHdERDtJQUNFLFVBQUE7R2Ywd0REO0VlM3dERDtJQUNFLG1CQUFBO0dmNndERDtFZTl3REQ7SUFDRSxtQkFBQTtHZmd4REQ7RWVqeEREO0lBQ0UsVUFBQTtHZm14REQ7RWVweEREO0lBQ0UsbUJBQUE7R2ZzeEREO0VldnhERDtJQUNFLG1CQUFBO0dmeXhERDtFZTF4REQ7SUFDRSxVQUFBO0dmNHhERDtFZTd4REQ7SUFDRSxtQkFBQTtHZit4REQ7RWVoeUREO0lBQ0Usa0JBQUE7R2ZreUREO0VlOXhERDtJQUNFLFdBQUE7R2ZneUREO0VlbHhERDtJQUNFLGtCQUFBO0dmb3hERDtFZXJ4REQ7SUFDRSwwQkFBQTtHZnV4REQ7RWV4eEREO0lBQ0UsMEJBQUE7R2YweEREO0VlM3hERDtJQUNFLGlCQUFBO0dmNnhERDtFZTl4REQ7SUFDRSwwQkFBQTtHZmd5REQ7RWVqeUREO0lBQ0UsMEJBQUE7R2ZteUREO0VlcHlERDtJQUNFLGlCQUFBO0dmc3lERDtFZXZ5REQ7SUFDRSwwQkFBQTtHZnl5REQ7RWUxeUREO0lBQ0UsMEJBQUE7R2Y0eUREO0VlN3lERDtJQUNFLGlCQUFBO0dmK3lERDtFZWh6REQ7SUFDRSwwQkFBQTtHZmt6REQ7RWVuekREO0lBQ0UseUJBQUE7R2ZxekREO0VldHpERDtJQUNFLGdCQUFBO0dmd3pERDtDQUNGO0FhaHpERDtFRTNDSTtJQUNFLFlBQUE7R2Y4MURIO0VldjFERDtJQUNFLFlBQUE7R2Z5MUREO0VlMTFERDtJQUNFLG9CQUFBO0dmNDFERDtFZTcxREQ7SUFDRSxvQkFBQTtHZisxREQ7RWVoMkREO0lBQ0UsV0FBQTtHZmsyREQ7RWVuMkREO0lBQ0Usb0JBQUE7R2ZxMkREO0VldDJERDtJQUNFLG9CQUFBO0dmdzJERDtFZXoyREQ7SUFDRSxXQUFBO0dmMjJERDtFZTUyREQ7SUFDRSxvQkFBQTtHZjgyREQ7RWUvMkREO0lBQ0Usb0JBQUE7R2ZpM0REO0VlbDNERDtJQUNFLFdBQUE7R2ZvM0REO0VlcjNERDtJQUNFLG9CQUFBO0dmdTNERDtFZXgzREQ7SUFDRSxtQkFBQTtHZjAzREQ7RWU1MkREO0lBQ0UsWUFBQTtHZjgyREQ7RWUvMkREO0lBQ0Usb0JBQUE7R2ZpM0REO0VlbDNERDtJQUNFLG9CQUFBO0dmbzNERDtFZXIzREQ7SUFDRSxXQUFBO0dmdTNERDtFZXgzREQ7SUFDRSxvQkFBQTtHZjAzREQ7RWUzM0REO0lBQ0Usb0JBQUE7R2Y2M0REO0VlOTNERDtJQUNFLFdBQUE7R2ZnNEREO0VlajRERDtJQUNFLG9CQUFBO0dmbTRERDtFZXA0REQ7SUFDRSxvQkFBQTtHZnM0REQ7RWV2NEREO0lBQ0UsV0FBQTtHZnk0REQ7RWUxNEREO0lBQ0Usb0JBQUE7R2Y0NEREO0VlNzRERDtJQUNFLG1CQUFBO0dmKzRERDtFZTM0REQ7SUFDRSxZQUFBO0dmNjRERDtFZTc1REQ7SUFDRSxXQUFBO0dmKzVERDtFZWg2REQ7SUFDRSxtQkFBQTtHZms2REQ7RWVuNkREO0lBQ0UsbUJBQUE7R2ZxNkREO0VldDZERDtJQUNFLFVBQUE7R2Z3NkREO0VlejZERDtJQUNFLG1CQUFBO0dmMjZERDtFZTU2REQ7SUFDRSxtQkFBQTtHZjg2REQ7RWUvNkREO0lBQ0UsVUFBQTtHZmk3REQ7RWVsN0REO0lBQ0UsbUJBQUE7R2ZvN0REO0VlcjdERDtJQUNFLG1CQUFBO0dmdTdERDtFZXg3REQ7SUFDRSxVQUFBO0dmMDdERDtFZTM3REQ7SUFDRSxtQkFBQTtHZjY3REQ7RWU5N0REO0lBQ0Usa0JBQUE7R2ZnOEREO0VlNTdERDtJQUNFLFdBQUE7R2Y4N0REO0VlaDdERDtJQUNFLGtCQUFBO0dmazdERDtFZW43REQ7SUFDRSwwQkFBQTtHZnE3REQ7RWV0N0REO0lBQ0UsMEJBQUE7R2Z3N0REO0VlejdERDtJQUNFLGlCQUFBO0dmMjdERDtFZTU3REQ7SUFDRSwwQkFBQTtHZjg3REQ7RWUvN0REO0lBQ0UsMEJBQUE7R2ZpOEREO0VlbDhERDtJQUNFLGlCQUFBO0dmbzhERDtFZXI4REQ7SUFDRSwwQkFBQTtHZnU4REQ7RWV4OEREO0lBQ0UsMEJBQUE7R2YwOEREO0VlMzhERDtJQUNFLGlCQUFBO0dmNjhERDtFZTk4REQ7SUFDRSwwQkFBQTtHZmc5REQ7RWVqOUREO0lBQ0UseUJBQUE7R2ZtOUREO0VlcDlERDtJQUNFLGdCQUFBO0dmczlERDtDQUNGO0FhMzhERDtFRTlDSTtJQUNFLFlBQUE7R2Y0L0RIO0Vlci9ERDtJQUNFLFlBQUE7R2Z1L0REO0VleC9ERDtJQUNFLG9CQUFBO0dmMC9ERDtFZTMvREQ7SUFDRSxvQkFBQTtHZjYvREQ7RWU5L0REO0lBQ0UsV0FBQTtHZmdnRUQ7RWVqZ0VEO0lBQ0Usb0JBQUE7R2ZtZ0VEO0VlcGdFRDtJQUNFLG9CQUFBO0dmc2dFRDtFZXZnRUQ7SUFDRSxXQUFBO0dmeWdFRDtFZTFnRUQ7SUFDRSxvQkFBQTtHZjRnRUQ7RWU3Z0VEO0lBQ0Usb0JBQUE7R2YrZ0VEO0VlaGhFRDtJQUNFLFdBQUE7R2ZraEVEO0VlbmhFRDtJQUNFLG9CQUFBO0dmcWhFRDtFZXRoRUQ7SUFDRSxtQkFBQTtHZndoRUQ7RWUxZ0VEO0lBQ0UsWUFBQTtHZjRnRUQ7RWU3Z0VEO0lBQ0Usb0JBQUE7R2YrZ0VEO0VlaGhFRDtJQUNFLG9CQUFBO0dma2hFRDtFZW5oRUQ7SUFDRSxXQUFBO0dmcWhFRDtFZXRoRUQ7SUFDRSxvQkFBQTtHZndoRUQ7RWV6aEVEO0lBQ0Usb0JBQUE7R2YyaEVEO0VlNWhFRDtJQUNFLFdBQUE7R2Y4aEVEO0VlL2hFRDtJQUNFLG9CQUFBO0dmaWlFRDtFZWxpRUQ7SUFDRSxvQkFBQTtHZm9pRUQ7RWVyaUVEO0lBQ0UsV0FBQTtHZnVpRUQ7RWV4aUVEO0lBQ0Usb0JBQUE7R2YwaUVEO0VlM2lFRDtJQUNFLG1CQUFBO0dmNmlFRDtFZXppRUQ7SUFDRSxZQUFBO0dmMmlFRDtFZTNqRUQ7SUFDRSxXQUFBO0dmNmpFRDtFZTlqRUQ7SUFDRSxtQkFBQTtHZmdrRUQ7RWVqa0VEO0lBQ0UsbUJBQUE7R2Zta0VEO0VlcGtFRDtJQUNFLFVBQUE7R2Zza0VEO0VldmtFRDtJQUNFLG1CQUFBO0dmeWtFRDtFZTFrRUQ7SUFDRSxtQkFBQTtHZjRrRUQ7RWU3a0VEO0lBQ0UsVUFBQTtHZitrRUQ7RWVobEVEO0lBQ0UsbUJBQUE7R2ZrbEVEO0VlbmxFRDtJQUNFLG1CQUFBO0dmcWxFRDtFZXRsRUQ7SUFDRSxVQUFBO0dmd2xFRDtFZXpsRUQ7SUFDRSxtQkFBQTtHZjJsRUQ7RWU1bEVEO0lBQ0Usa0JBQUE7R2Y4bEVEO0VlMWxFRDtJQUNFLFdBQUE7R2Y0bEVEO0VlOWtFRDtJQUNFLGtCQUFBO0dmZ2xFRDtFZWpsRUQ7SUFDRSwwQkFBQTtHZm1sRUQ7RWVwbEVEO0lBQ0UsMEJBQUE7R2ZzbEVEO0VldmxFRDtJQUNFLGlCQUFBO0dmeWxFRDtFZTFsRUQ7SUFDRSwwQkFBQTtHZjRsRUQ7RWU3bEVEO0lBQ0UsMEJBQUE7R2YrbEVEO0VlaG1FRDtJQUNFLGlCQUFBO0dma21FRDtFZW5tRUQ7SUFDRSwwQkFBQTtHZnFtRUQ7RWV0bUVEO0lBQ0UsMEJBQUE7R2Z3bUVEO0Vlem1FRDtJQUNFLGlCQUFBO0dmMm1FRDtFZTVtRUQ7SUFDRSwwQkFBQTtHZjhtRUQ7RWUvbUVEO0lBQ0UseUJBQUE7R2ZpbkVEO0VlbG5FRDtJQUNFLGdCQUFBO0dmb25FRDtDQUNGO0FnQnhyRUQ7RUFDRSw4QkFBQTtDaEIwckVEO0FnQnhyRUQ7RUFDRSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZUFBQTtFQUNBLGlCQUFBO0NoQjByRUQ7QWdCeHJFRDtFQUNFLGlCQUFBO0NoQjByRUQ7QWdCcHJFRDtFQUNFLFlBQUE7RUFDQSxnQkFBQTtFQUNBLG9CQUFBO0NoQnNyRUQ7QWdCenJFRDs7Ozs7O0VBV1EsYUFBQTtFQUNBLHdCQUFBO0VBQ0Esb0JBQUE7RUFDQSwyQkFBQTtDaEJzckVQO0FnQnBzRUQ7RUFvQkksdUJBQUE7RUFDQSw4QkFBQTtDaEJtckVIO0FnQnhzRUQ7Ozs7OztFQThCUSxjQUFBO0NoQmtyRVA7QWdCaHRFRDtFQW9DSSwyQkFBQTtDaEIrcUVIO0FnQm50RUQ7RUF5Q0ksdUJBQUE7Q2hCNnFFSDtBZ0J0cUVEOzs7Ozs7RUFPUSxhQUFBO0NoQnVxRVA7QWdCNXBFRDtFQUNFLHVCQUFBO0NoQjhwRUQ7QWdCL3BFRDs7Ozs7O0VBUVEsdUJBQUE7Q2hCK3BFUDtBZ0J2cUVEOztFQWVNLHlCQUFBO0NoQjRwRUw7QWdCbHBFRDtFQUVJLDBCQUFBO0NoQm1wRUg7QWdCMW9FRDtFQUVJLDBCQUFBO0NoQjJvRUg7QWdCbG9FRDtFQUNFLGlCQUFBO0VBQ0EsWUFBQTtFQUNBLHNCQUFBO0NoQm9vRUQ7QWdCL25FRzs7RUFDRSxpQkFBQTtFQUNBLFlBQUE7RUFDQSxvQkFBQTtDaEJrb0VMO0FpQjl3RUM7Ozs7Ozs7Ozs7OztFQU9JLDBCQUFBO0NqQnF4RUw7QWlCL3dFQzs7Ozs7RUFNSSwwQkFBQTtDakJneEVMO0FpQm55RUM7Ozs7Ozs7Ozs7OztFQU9JLDBCQUFBO0NqQjB5RUw7QWlCcHlFQzs7Ozs7RUFNSSwwQkFBQTtDakJxeUVMO0FpQnh6RUM7Ozs7Ozs7Ozs7OztFQU9JLDBCQUFBO0NqQit6RUw7QWlCenpFQzs7Ozs7RUFNSSwwQkFBQTtDakIwekVMO0FpQjcwRUM7Ozs7Ozs7Ozs7OztFQU9JLDBCQUFBO0NqQm8xRUw7QWlCOTBFQzs7Ozs7RUFNSSwwQkFBQTtDakIrMEVMO0FpQmwyRUM7Ozs7Ozs7Ozs7OztFQU9JLDBCQUFBO0NqQnkyRUw7QWlCbjJFQzs7Ozs7RUFNSSwwQkFBQTtDakJvMkVMO0FnQmx0RUQ7RUFDRSxpQkFBQTtFQUNBLGtCQUFBO0NoQm90RUQ7QWdCdnBFRDtFQUNBO0lBM0RJLFlBQUE7SUFDQSxvQkFBQTtJQUNBLG1CQUFBO0lBQ0EsNkNBQUE7SUFDQSx1QkFBQTtHaEJxdEVEO0VnQjlwRUg7SUFuRE0saUJBQUE7R2hCb3RFSDtFZ0JqcUVIOzs7Ozs7SUExQ1ksb0JBQUE7R2hCbXRFVDtFZ0J6cUVIO0lBbENNLFVBQUE7R2hCOHNFSDtFZ0I1cUVIOzs7Ozs7SUF6QlksZUFBQTtHaEI2c0VUO0VnQnByRUg7Ozs7OztJQXJCWSxnQkFBQTtHaEJpdEVUO0VnQjVyRUg7Ozs7SUFSWSxpQkFBQTtHaEIwc0VUO0NBQ0Y7QWtCcDZFRDtFQUNFLFdBQUE7RUFDQSxVQUFBO0VBQ0EsVUFBQTtFQUlBLGFBQUE7Q2xCbTZFRDtBa0JoNkVEO0VBQ0UsZUFBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0VBQ0Esb0JBQUE7RUFDQSxnQkFBQTtFQUNBLHFCQUFBO0VBQ0EsZUFBQTtFQUNBLFVBQUE7RUFDQSxpQ0FBQTtDbEJrNkVEO0FrQi81RUQ7RUFDRSxzQkFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxrQkFBQTtDbEJpNkVEO0FrQnQ1RUQ7RWI4QlUsdUJBQUE7Q0w2M0VUO0FrQnQ1RUQ7O0VBRUUsZ0JBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0NsQnc1RUQ7QWtCcjVFRDtFQUNFLGVBQUE7Q2xCdTVFRDtBa0JuNUVEO0VBQ0UsZUFBQTtFQUNBLFlBQUE7Q2xCcTVFRDtBa0JqNUVEOztFQUVFLGFBQUE7Q2xCbTVFRDtBa0IvNEVEOzs7RVp2RUUscUJBQUE7RUFFQSwyQ0FBQTtFQUNBLHFCQUFBO0NOMDlFRDtBa0IvNEVEO0VBQ0UsZUFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSx3QkFBQTtFQUNBLGVBQUE7Q2xCaTVFRDtBa0J2M0VEO0VBQ0UsZUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLHdCQUFBO0VBQ0EsZUFBQTtFQUNBLHVCQUFBO0VBQ0EsdUJBQUE7RUFDQSx1QkFBQTtFQUNBLG1CQUFBO0VidkRRLGlEQUFBO0VBMkhBLHVFQUFBO0NMMHpFVDtBbUJsOEVDO0VBQ0Usc0JBQUE7RUFDQSxXQUFBO0VkV00sK0VBQUE7Q0wyN0VUO0FLMTVFQztFQUNFLFlBQUE7RUFDQSxXQUFBO0NMNDVFSDtBSzE1RUM7RUFBMEIsWUFBQTtDTDY1RTNCO0FLNTVFQztFQUFnQyxZQUFBO0NMKzVFakM7QWtCLzNFQzs7O0VBR0UsMEJBQUE7RUFDQSxXQUFBO0NsQmk0RUg7QWtCOTNFQzs7RUFFRSxvQkFBQTtDbEJnNEVIO0FrQjUzRUM7RUFDRSxhQUFBO0NsQjgzRUg7QWtCbDNFRDtFQUNFLHlCQUFBO0NsQm8zRUQ7QWtCNTBFRDtFQXRCSTs7OztJQUNFLGtCQUFBO0dsQncyRUg7RWtCcjJFQzs7Ozs7Ozs7SUFFRSxrQkFBQTtHbEI2MkVIO0VrQjEyRUM7Ozs7Ozs7O0lBRUUsa0JBQUE7R2xCazNFSDtDQUNGO0FrQngyRUQ7RUFDRSxvQkFBQTtDbEIwMkVEO0FrQmwyRUQ7O0VBRUUsbUJBQUE7RUFDQSxlQUFBO0VBQ0EsaUJBQUE7RUFDQSxvQkFBQTtDbEJvMkVEO0FrQnoyRUQ7O0VBUUksaUJBQUE7RUFDQSxtQkFBQTtFQUNBLGlCQUFBO0VBQ0Esb0JBQUE7RUFDQSxnQkFBQTtDbEJxMkVIO0FrQmwyRUQ7Ozs7RUFJRSxtQkFBQTtFQUNBLG1CQUFBO0VBQ0EsbUJBQUE7Q2xCbzJFRDtBa0JqMkVEOztFQUVFLGlCQUFBO0NsQm0yRUQ7QWtCLzFFRDs7RUFFRSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsbUJBQUE7RUFDQSxpQkFBQTtFQUNBLHVCQUFBO0VBQ0Esb0JBQUE7RUFDQSxnQkFBQTtDbEJpMkVEO0FrQi8xRUQ7O0VBRUUsY0FBQTtFQUNBLGtCQUFBO0NsQmkyRUQ7QWtCeDFFQzs7Ozs7O0VBR0Usb0JBQUE7Q2xCNjFFSDtBa0J2MUVDOzs7O0VBRUUsb0JBQUE7Q2xCMjFFSDtBa0JyMUVDOzs7O0VBR0ksb0JBQUE7Q2xCdzFFTDtBa0I3MEVEO0VBRUUsaUJBQUE7RUFDQSxvQkFBQTtFQUVBLGlCQUFBO0VBQ0EsaUJBQUE7Q2xCNjBFRDtBa0IzMEVDOztFQUVFLGdCQUFBO0VBQ0EsaUJBQUE7Q2xCNjBFSDtBa0JoMEVEO0VDN1BFLGFBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxtQkFBQTtDbkJna0ZEO0FtQjlqRkM7RUFDRSxhQUFBO0VBQ0Esa0JBQUE7Q25CZ2tGSDtBbUI3akZDOztFQUVFLGFBQUE7Q25CK2pGSDtBa0I1MEVEO0VBRUksYUFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLG1CQUFBO0NsQjYwRUg7QWtCbjFFRDtFQVNJLGFBQUE7RUFDQSxrQkFBQTtDbEI2MEVIO0FrQnYxRUQ7O0VBY0ksYUFBQTtDbEI2MEVIO0FrQjMxRUQ7RUFpQkksYUFBQTtFQUNBLGlCQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0NsQjYwRUg7QWtCejBFRDtFQ3pSRSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7Q25CcW1GRDtBbUJubUZDO0VBQ0UsYUFBQTtFQUNBLGtCQUFBO0NuQnFtRkg7QW1CbG1GQzs7RUFFRSxhQUFBO0NuQm9tRkg7QWtCcjFFRDtFQUVJLGFBQUE7RUFDQSxtQkFBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtDbEJzMUVIO0FrQjUxRUQ7RUFTSSxhQUFBO0VBQ0Esa0JBQUE7Q2xCczFFSDtBa0JoMkVEOztFQWNJLGFBQUE7Q2xCczFFSDtBa0JwMkVEO0VBaUJJLGFBQUE7RUFDQSxpQkFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSx1QkFBQTtDbEJzMUVIO0FrQjcwRUQ7RUFFRSxtQkFBQTtDbEI4MEVEO0FrQmgxRUQ7RUFNSSxzQkFBQTtDbEI2MEVIO0FrQnowRUQ7RUFDRSxtQkFBQTtFQUNBLE9BQUE7RUFDQSxTQUFBO0VBQ0EsV0FBQTtFQUNBLGVBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxxQkFBQTtDbEIyMEVEO0FrQnowRUQ7OztFQUdFLFlBQUE7RUFDQSxhQUFBO0VBQ0Esa0JBQUE7Q2xCMjBFRDtBa0J6MEVEOzs7RUFHRSxZQUFBO0VBQ0EsYUFBQTtFQUNBLGtCQUFBO0NsQjIwRUQ7QWtCdjBFRDs7Ozs7Ozs7OztFQ3BaSSxlQUFBO0NuQnV1Rkg7QWtCbjFFRDtFQ2haSSxzQkFBQTtFZGdETSxpREFBQTtDTHdyRlQ7QW1CdHVGRztFQUNFLHNCQUFBO0VkNkNJLGtFQUFBO0NMNnJGVDtBa0I3MUVEO0VDdFlJLGVBQUE7RUFDQSxzQkFBQTtFQUNBLDBCQUFBO0NuQnN1Rkg7QWtCbDJFRDtFQ2hZSSxlQUFBO0NuQnF1Rkg7QWtCbDJFRDs7Ozs7Ozs7OztFQ3ZaSSxlQUFBO0NuQnF3Rkg7QWtCOTJFRDtFQ25aSSxzQkFBQTtFZGdETSxpREFBQTtDTHN0RlQ7QW1CcHdGRztFQUNFLHNCQUFBO0VkNkNJLGtFQUFBO0NMMnRGVDtBa0J4M0VEO0VDellJLGVBQUE7RUFDQSxzQkFBQTtFQUNBLDBCQUFBO0NuQm93Rkg7QWtCNzNFRDtFQ25ZSSxlQUFBO0NuQm13Rkg7QWtCNzNFRDs7Ozs7Ozs7OztFQzFaSSxlQUFBO0NuQm15Rkg7QWtCejRFRDtFQ3RaSSxzQkFBQTtFZGdETSxpREFBQTtDTG92RlQ7QW1CbHlGRztFQUNFLHNCQUFBO0VkNkNJLGtFQUFBO0NMeXZGVDtBa0JuNUVEO0VDNVlJLGVBQUE7RUFDQSxzQkFBQTtFQUNBLDBCQUFBO0NuQmt5Rkg7QWtCeDVFRDtFQ3RZSSxlQUFBO0NuQml5Rkg7QWtCcDVFQztFQUNHLFVBQUE7Q2xCczVFSjtBa0JwNUVDO0VBQ0csT0FBQTtDbEJzNUVKO0FrQjU0RUQ7RUFDRSxlQUFBO0VBQ0EsZ0JBQUE7RUFDQSxvQkFBQTtFQUNBLGVBQUE7Q2xCODRFRDtBa0IzekVEO0VBd0VBO0lBdElNLHNCQUFBO0lBQ0EsaUJBQUE7SUFDQSx1QkFBQTtHbEI2M0VIO0VrQnp2RUg7SUEvSE0sc0JBQUE7SUFDQSxZQUFBO0lBQ0EsdUJBQUE7R2xCMjNFSDtFa0I5dkVIO0lBeEhNLHNCQUFBO0dsQnkzRUg7RWtCandFSDtJQXBITSxzQkFBQTtJQUNBLHVCQUFBO0dsQnczRUg7RWtCcndFSDs7O0lBOUdRLFlBQUE7R2xCdzNFTDtFa0Ixd0VIO0lBeEdNLFlBQUE7R2xCcTNFSDtFa0I3d0VIO0lBcEdNLGlCQUFBO0lBQ0EsdUJBQUE7R2xCbzNFSDtFa0JqeEVIOztJQTVGTSxzQkFBQTtJQUNBLGNBQUE7SUFDQSxpQkFBQTtJQUNBLHVCQUFBO0dsQmkzRUg7RWtCeHhFSDs7SUF0RlEsZ0JBQUE7R2xCazNFTDtFa0I1eEVIOztJQWpGTSxtQkFBQTtJQUNBLGVBQUE7R2xCaTNFSDtFa0JqeUVIO0lBM0VNLE9BQUE7R2xCKzJFSDtDQUNGO0FrQnIyRUQ7Ozs7RUFTSSxjQUFBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtDbEJrMkVIO0FrQjcyRUQ7O0VBaUJJLGlCQUFBO0NsQmcyRUg7QWtCajNFRDtFSmhoQkUsbUJBQUE7RUFDQSxvQkFBQTtDZG80RkQ7QWtCOTBFQztFQXlCRjtJQW5DTSxrQkFBQTtJQUNBLGlCQUFBO0lBQ0EsaUJBQUE7R2xCNDFFSDtDQUNGO0FrQjUzRUQ7RUF3Q0ksWUFBQTtDbEJ1MUVIO0FrQnowRUM7RUFVRjtJQWRRLHlCQUFBO0lBQ0EsZ0JBQUE7R2xCaTFFTDtDQUNGO0FrQnYwRUM7RUFFRjtJQU5RLGlCQUFBO0lBQ0EsZ0JBQUE7R2xCKzBFTDtDQUNGO0FvQmw2RkQ7RUFDRSxzQkFBQTtFQUNBLGlCQUFBO0VBQ0Esb0JBQUE7RUFDQSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EsK0JBQUE7TUFBQSwyQkFBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSw4QkFBQTtFQUNBLG9CQUFBO0VDNkNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSx3QkFBQTtFQUNBLG1CQUFBO0VoQjRKQSwwQkFBQTtFQUNHLHVCQUFBO0VBQ0Msc0JBQUE7RUFDSSxrQkFBQTtDTDZ0RlQ7QW9CcjZGRzs7Ozs7O0VkckJGLHFCQUFBO0VBRUEsMkNBQUE7RUFDQSxxQkFBQTtDTmk4RkQ7QW9CejZGQzs7O0VBR0UsWUFBQTtFQUNBLHNCQUFBO0NwQjI2Rkg7QW9CeDZGQzs7RUFFRSxXQUFBO0VBQ0EsdUJBQUE7RWY0Qk0saURBQUE7Q0xnNUZUO0FvQng2RkM7OztFQUdFLG9CQUFBO0VFN0NGLGNBQUE7RUFHQSwwQkFBQTtFakIrRFEsaUJBQUE7Q0x5NUZUO0FvQng2Rkc7O0VBRUUscUJBQUE7Q3BCMDZGTDtBb0JqNkZEO0VDM0RFLFlBQUE7RUFDQSx1QkFBQTtFQUNBLG1CQUFBO0NyQis5RkQ7QXFCNzlGQzs7RUFFRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckIrOUZQO0FxQjc5RkM7RUFDRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckIrOUZQO0FxQjc5RkM7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQis5RlA7QXFCNzlGRzs7Ozs7Ozs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCcStGVDtBcUJsK0ZDOzs7RUFHRSx1QkFBQTtDckJvK0ZIO0FxQi85Rkc7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQU1FLHVCQUFBO0VBQ0ksbUJBQUE7Q3JCNitGVDtBb0IvOUZEO0VDVEksWUFBQTtFQUNBLHVCQUFBO0NyQjIrRkg7QW9CaCtGRDtFQzlERSxZQUFBO0VBQ0EsMEJBQUE7RUFDQSxzQkFBQTtDckJpaUdEO0FxQi9oR0M7O0VBRUUsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCaWlHUDtBcUIvaEdDO0VBQ0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCaWlHUDtBcUIvaEdDOzs7RUFHRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckJpaUdQO0FxQi9oR0c7Ozs7Ozs7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQnVpR1Q7QXFCcGlHQzs7O0VBR0UsdUJBQUE7Q3JCc2lHSDtBcUJqaUdHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFNRSwwQkFBQTtFQUNJLHNCQUFBO0NyQitpR1Q7QW9COWhHRDtFQ1pJLGVBQUE7RUFDQSx1QkFBQTtDckI2aUdIO0FvQjloR0Q7RUNsRUUsWUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q3JCbW1HRDtBcUJqbUdDOztFQUVFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQm1tR1A7QXFCam1HQztFQUNFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQm1tR1A7QXFCam1HQzs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCbW1HUDtBcUJqbUdHOzs7Ozs7Ozs7RUFHRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckJ5bUdUO0FxQnRtR0M7OztFQUdFLHVCQUFBO0NyQndtR0g7QXFCbm1HRzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBTUUsMEJBQUE7RUFDSSxzQkFBQTtDckJpbkdUO0FvQjVsR0Q7RUNoQkksZUFBQTtFQUNBLHVCQUFBO0NyQittR0g7QW9CNWxHRDtFQ3RFRSxZQUFBO0VBQ0EsMEJBQUE7RUFDQSxzQkFBQTtDckJxcUdEO0FxQm5xR0M7O0VBRUUsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCcXFHUDtBcUJucUdDO0VBQ0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCcXFHUDtBcUJucUdDOzs7RUFHRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckJxcUdQO0FxQm5xR0c7Ozs7Ozs7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQjJxR1Q7QXFCeHFHQzs7O0VBR0UsdUJBQUE7Q3JCMHFHSDtBcUJycUdHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFNRSwwQkFBQTtFQUNJLHNCQUFBO0NyQm1yR1Q7QW9CMXBHRDtFQ3BCSSxlQUFBO0VBQ0EsdUJBQUE7Q3JCaXJHSDtBb0IxcEdEO0VDMUVFLFlBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0NyQnV1R0Q7QXFCcnVHQzs7RUFFRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckJ1dUdQO0FxQnJ1R0M7RUFDRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckJ1dUdQO0FxQnJ1R0M7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQnV1R1A7QXFCcnVHRzs7Ozs7Ozs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCNnVHVDtBcUIxdUdDOzs7RUFHRSx1QkFBQTtDckI0dUdIO0FxQnZ1R0c7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQU1FLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCcXZHVDtBb0J4dEdEO0VDeEJJLGVBQUE7RUFDQSx1QkFBQTtDckJtdkdIO0FvQnh0R0Q7RUM5RUUsWUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q3JCeXlHRDtBcUJ2eUdDOztFQUVFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQnl5R1A7QXFCdnlHQztFQUNFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQnl5R1A7QXFCdnlHQzs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCeXlHUDtBcUJ2eUdHOzs7Ozs7Ozs7RUFHRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckIreUdUO0FxQjV5R0M7OztFQUdFLHVCQUFBO0NyQjh5R0g7QXFCenlHRzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBTUUsMEJBQUE7RUFDSSxzQkFBQTtDckJ1ekdUO0FvQnR4R0Q7RUM1QkksZUFBQTtFQUNBLHVCQUFBO0NyQnF6R0g7QW9CanhHRDtFQUNFLGVBQUE7RUFDQSxvQkFBQTtFQUNBLGlCQUFBO0NwQm14R0Q7QW9CanhHQzs7Ozs7RUFLRSw4QkFBQTtFZmxDTSxpQkFBQTtDTHV6R1Q7QW9CbHhHQzs7OztFQUlFLDBCQUFBO0NwQm94R0g7QW9CbHhHQzs7RUFFRSxlQUFBO0VBQ0EsMkJBQUE7RUFDQSw4QkFBQTtDcEJveEdIO0FvQmh4R0c7Ozs7RUFFRSxlQUFBO0VBQ0Esc0JBQUE7Q3BCb3hHTDtBb0Izd0dEOztFQ3JFRSxtQkFBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtDckJvMUdEO0FvQjl3R0Q7O0VDekVFLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLG1CQUFBO0NyQjIxR0Q7QW9CanhHRDs7RUM3RUUsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0VBQ0EsbUJBQUE7Q3JCazJHRDtBb0JoeEdEO0VBQ0UsZUFBQTtFQUNBLFlBQUE7Q3BCa3hHRDtBb0I5d0dEO0VBQ0UsZ0JBQUE7Q3BCZ3hHRDtBb0J6d0dDOzs7RUFDRSxZQUFBO0NwQjZ3R0g7QXVCdjZHRDtFQUNFLFdBQUE7RWxCc0xRLGlDQUFBO0NMc3ZHVDtBdUIxNkdDO0VBQ0UsV0FBQTtDdkI0NkdIO0F1Qng2R0Q7RUFDRSxjQUFBO0N2QjA2R0Q7QXVCeDZHQztFQUFZLGVBQUE7Q3ZCMjZHYjtBdUIxNkdDO0VBQVksbUJBQUE7Q3ZCNjZHYjtBdUI1NkdDO0VBQVkseUJBQUE7Q3ZCKzZHYjtBdUI1NkdEO0VBQ0UsbUJBQUE7RUFDQSxVQUFBO0VBQ0EsaUJBQUE7RWxCd0tRLHdDQUFBO0VBUUEsMkJBQUE7RUFJQSxpQ0FBQTtDTGd3R1Q7QXdCMThHRDtFQUNFLHNCQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7RUFDQSxpQkFBQTtFQUNBLHVCQUFBO0VBQ0EsdUJBQUE7RUFDQSx5QkFBQTtFQUNBLG9DQUFBO0VBQ0EsbUNBQUE7Q3hCNDhHRDtBd0J4OEdEOztFQUVFLG1CQUFBO0N4QjA4R0Q7QXdCdDhHRDtFQUNFLFdBQUE7Q3hCdzhHRDtBd0JwOEdEO0VBQ0UsbUJBQUE7RUFDQSxVQUFBO0VBQ0EsUUFBQTtFQUNBLGNBQUE7RUFDQSxjQUFBO0VBQ0EsWUFBQTtFQUNBLGlCQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0VBQ0EsdUJBQUE7RUFDQSx1QkFBQTtFQUNBLHNDQUFBO0VBQ0EsbUJBQUE7RW5CdUJRLDRDQUFBO0VtQnJCUiw2QkFBQTtDeEJ1OEdEO0F3Qmw4R0M7RUFDRSxTQUFBO0VBQ0EsV0FBQTtDeEJvOEdIO0F3Qjc5R0Q7RUN6QkUsWUFBQTtFQUNBLGNBQUE7RUFDQSxpQkFBQTtFQUNBLDBCQUFBO0N6QnkvR0Q7QXdCbitHRDtFQW1DSSxlQUFBO0VBQ0Esa0JBQUE7RUFDQSxZQUFBO0VBQ0Esb0JBQUE7RUFDQSx3QkFBQTtFQUNBLGVBQUE7RUFDQSxvQkFBQTtDeEJtOEdIO0F3Qjc3R0M7O0VBRUUsc0JBQUE7RUFDQSxlQUFBO0VBQ0EsMEJBQUE7Q3hCKzdHSDtBd0J6N0dDOzs7RUFHRSxZQUFBO0VBQ0Esc0JBQUE7RUFDQSxXQUFBO0VBQ0EsMEJBQUE7Q3hCMjdHSDtBd0JsN0dDOzs7RUFHRSxlQUFBO0N4Qm83R0g7QXdCaDdHQzs7RUFFRSxzQkFBQTtFQUNBLDhCQUFBO0VBQ0EsdUJBQUE7RUUzR0Ysb0VBQUE7RUY2R0Usb0JBQUE7Q3hCazdHSDtBd0I3NkdEO0VBR0ksZUFBQTtDeEI2NkdIO0F3Qmg3R0Q7RUFRSSxXQUFBO0N4QjI2R0g7QXdCbjZHRDtFQUNFLFdBQUE7RUFDQSxTQUFBO0N4QnE2R0Q7QXdCNzVHRDtFQUNFLFFBQUE7RUFDQSxZQUFBO0N4Qis1R0Q7QXdCMzVHRDtFQUNFLGVBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0Esd0JBQUE7RUFDQSxlQUFBO0VBQ0Esb0JBQUE7Q3hCNjVHRDtBd0J6NUdEO0VBQ0UsZ0JBQUE7RUFDQSxRQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7RUFDQSxPQUFBO0VBQ0EsYUFBQTtDeEIyNUdEO0F3QnY1R0Q7RUFDRSxTQUFBO0VBQ0EsV0FBQTtDeEJ5NUdEO0F3Qmo1R0Q7O0VBSUksY0FBQTtFQUNBLDBCQUFBO0VBQ0EsNEJBQUE7RUFDQSxZQUFBO0N4Qmk1R0g7QXdCeDVHRDs7RUFXSSxVQUFBO0VBQ0EsYUFBQTtFQUNBLG1CQUFBO0N4Qmk1R0g7QXdCNTNHRDtFQVhFO0lBcEVBLFdBQUE7SUFDQSxTQUFBO0d4Qis4R0M7RXdCNTRHRDtJQTFEQSxRQUFBO0lBQ0EsWUFBQTtHeEJ5OEdDO0NBQ0Y7QTJCemxIRDs7RUFFRSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsdUJBQUE7QzNCMmxIRDtBMkIvbEhEOztFQU1JLG1CQUFBO0VBQ0EsWUFBQTtDM0I2bEhIO0EyQjNsSEc7Ozs7Ozs7O0VBSUUsV0FBQTtDM0JpbUhMO0EyQjNsSEQ7Ozs7RUFLSSxrQkFBQTtDM0I0bEhIO0EyQnZsSEQ7RUFDRSxrQkFBQTtDM0J5bEhEO0EyQjFsSEQ7OztFQU9JLFlBQUE7QzNCd2xISDtBMkIvbEhEOzs7RUFZSSxpQkFBQTtDM0J3bEhIO0EyQnBsSEQ7RUFDRSxpQkFBQTtDM0JzbEhEO0EyQmxsSEQ7RUFDRSxlQUFBO0MzQm9sSEQ7QTJCbmxIQztFQ2xEQSw4QkFBQTtFQUNHLDJCQUFBO0M1QndvSEo7QTJCbGxIRDs7RUMvQ0UsNkJBQUE7RUFDRywwQkFBQTtDNUJxb0hKO0EyQmpsSEQ7RUFDRSxZQUFBO0MzQm1sSEQ7QTJCamxIRDtFQUNFLGlCQUFBO0MzQm1sSEQ7QTJCamxIRDs7RUNuRUUsOEJBQUE7RUFDRywyQkFBQTtDNUJ3cEhKO0EyQmhsSEQ7RUNqRUUsNkJBQUE7RUFDRywwQkFBQTtDNUJvcEhKO0EyQi9rSEQ7O0VBRUUsV0FBQTtDM0JpbEhEO0EyQmhrSEQ7RUFDRSxrQkFBQTtFQUNBLG1CQUFBO0MzQmtrSEQ7QTJCaGtIRDtFQUNFLG1CQUFBO0VBQ0Esb0JBQUE7QzNCa2tIRDtBMkI3akhEO0V0QjlDVSxpREFBQTtDTCttSFQ7QTJCN2pIQztFdEJsRFEsaUJBQUE7Q0xtbkhUO0EyQjFqSEQ7RUFDRSxlQUFBO0MzQjRqSEQ7QTJCempIRDtFQUNFLHdCQUFBO0VBQ0EsdUJBQUE7QzNCMmpIRDtBMkJ4akhEO0VBQ0Usd0JBQUE7QzNCMGpIRDtBMkJuakhEOzs7RUFJSSxlQUFBO0VBQ0EsWUFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtDM0JvakhIO0EyQjNqSEQ7RUFjTSxZQUFBO0MzQmdqSEw7QTJCOWpIRDs7OztFQXNCSSxpQkFBQTtFQUNBLGVBQUE7QzNCOGlISDtBMkJ6aUhDO0VBQ0UsaUJBQUE7QzNCMmlISDtBMkJ6aUhDO0VBQ0UsNkJBQUE7RUNwS0YsOEJBQUE7RUFDQyw2QkFBQTtDNUJndEhGO0EyQjFpSEM7RUFDRSwrQkFBQTtFQ2hMRiwyQkFBQTtFQUNDLDBCQUFBO0M1QjZ0SEY7QTJCMWlIRDtFQUNFLGlCQUFBO0MzQjRpSEQ7QTJCMWlIRDs7RUMvS0UsOEJBQUE7RUFDQyw2QkFBQTtDNUI2dEhGO0EyQnppSEQ7RUM3TEUsMkJBQUE7RUFDQywwQkFBQTtDNUJ5dUhGO0EyQnJpSEQ7RUFDRSxlQUFBO0VBQ0EsWUFBQTtFQUNBLG9CQUFBO0VBQ0EsMEJBQUE7QzNCdWlIRDtBMkIzaUhEOztFQU9JLFlBQUE7RUFDQSxvQkFBQTtFQUNBLFVBQUE7QzNCd2lISDtBMkJqakhEO0VBWUksWUFBQTtDM0J3aUhIO0EyQnBqSEQ7RUFnQkksV0FBQTtDM0J1aUhIO0EyQnRoSEQ7Ozs7RUFLTSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EscUJBQUE7QzNCdWhITDtBNkJqd0hEO0VBQ0UsbUJBQUE7RUFDQSxlQUFBO0VBQ0EsMEJBQUE7QzdCbXdIRDtBNkJod0hDO0VBQ0UsWUFBQTtFQUNBLGdCQUFBO0VBQ0EsaUJBQUE7QzdCa3dISDtBNkIzd0hEO0VBZUksbUJBQUE7RUFDQSxXQUFBO0VBS0EsWUFBQTtFQUVBLFlBQUE7RUFDQSxpQkFBQTtDN0IwdkhIO0E2Qmp2SEQ7OztFVjhCRSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7Q25Cd3RIRDtBbUJ0dEhDOzs7RUFDRSxhQUFBO0VBQ0Esa0JBQUE7Q25CMHRISDtBbUJ2dEhDOzs7Ozs7RUFFRSxhQUFBO0NuQjZ0SEg7QTZCbndIRDs7O0VWeUJFLGFBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxtQkFBQTtDbkIrdUhEO0FtQjd1SEM7OztFQUNFLGFBQUE7RUFDQSxrQkFBQTtDbkJpdkhIO0FtQjl1SEM7Ozs7OztFQUVFLGFBQUE7Q25Cb3ZISDtBNkJqeEhEOzs7RUFHRSxvQkFBQTtDN0JteEhEO0E2Qmp4SEM7OztFQUNFLGlCQUFBO0M3QnF4SEg7QTZCanhIRDs7RUFFRSxVQUFBO0VBQ0Esb0JBQUE7RUFDQSx1QkFBQTtDN0JteEhEO0E2Qjl3SEQ7RUFDRSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0Esb0JBQUE7RUFDQSxlQUFBO0VBQ0EsZUFBQTtFQUNBLG1CQUFBO0VBQ0EsMEJBQUE7RUFDQSx1QkFBQTtFQUNBLG1CQUFBO0M3Qmd4SEQ7QTZCN3dIQztFQUNFLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxtQkFBQTtDN0Ird0hIO0E2Qjd3SEM7RUFDRSxtQkFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7QzdCK3dISDtBNkJueUhEOztFQTBCSSxjQUFBO0M3QjZ3SEg7QTZCeHdIRDs7Ozs7OztFRGhHRSw4QkFBQTtFQUNHLDJCQUFBO0M1QmkzSEo7QTZCendIRDtFQUNFLGdCQUFBO0M3QjJ3SEQ7QTZCendIRDs7Ozs7OztFRHBHRSw2QkFBQTtFQUNHLDBCQUFBO0M1QnMzSEo7QTZCMXdIRDtFQUNFLGVBQUE7QzdCNHdIRDtBNkJ2d0hEO0VBQ0UsbUJBQUE7RUFHQSxhQUFBO0VBQ0Esb0JBQUE7QzdCdXdIRDtBNkI1d0hEO0VBVUksbUJBQUE7QzdCcXdISDtBNkIvd0hEO0VBWU0sa0JBQUE7QzdCc3dITDtBNkJud0hHOzs7RUFHRSxXQUFBO0M3QnF3SEw7QTZCaHdIQzs7RUFHSSxtQkFBQTtDN0Jpd0hMO0E2Qjl2SEM7O0VBR0ksV0FBQTtFQUNBLGtCQUFBO0M3Qit2SEw7QThCMTVIRDtFQUNFLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtDOUI0NUhEO0E4Qi81SEQ7RUFPSSxtQkFBQTtFQUNBLGVBQUE7QzlCMjVISDtBOEJuNkhEO0VBV00sbUJBQUE7RUFDQSxlQUFBO0VBQ0EsbUJBQUE7QzlCMjVITDtBOEIxNUhLOztFQUVFLHNCQUFBO0VBQ0EsMEJBQUE7QzlCNDVIUDtBOEJ2NUhHO0VBQ0UsZUFBQTtDOUJ5NUhMO0E4QnY1SEs7O0VBRUUsZUFBQTtFQUNBLHNCQUFBO0VBQ0EsOEJBQUE7RUFDQSxvQkFBQTtDOUJ5NUhQO0E4Qmw1SEc7OztFQUdFLDBCQUFBO0VBQ0Esc0JBQUE7QzlCbzVITDtBOEI3N0hEO0VMSEUsWUFBQTtFQUNBLGNBQUE7RUFDQSxpQkFBQTtFQUNBLDBCQUFBO0N6Qm04SEQ7QThCbjhIRDtFQTBESSxnQkFBQTtDOUI0NEhIO0E4Qm40SEQ7RUFDRSw4QkFBQTtDOUJxNEhEO0E4QnQ0SEQ7RUFHSSxZQUFBO0VBRUEsb0JBQUE7QzlCcTRISDtBOEIxNEhEO0VBU00sa0JBQUE7RUFDQSx3QkFBQTtFQUNBLDhCQUFBO0VBQ0EsMkJBQUE7QzlCbzRITDtBOEJuNEhLO0VBQ0UsbUNBQUE7QzlCcTRIUDtBOEIvM0hLOzs7RUFHRSxlQUFBO0VBQ0EsdUJBQUE7RUFDQSx1QkFBQTtFQUNBLGlDQUFBO0VBQ0EsZ0JBQUE7QzlCaTRIUDtBOEI1M0hDO0VBcURBLFlBQUE7RUE4QkEsaUJBQUE7QzlCNnlIRDtBOEJoNEhDO0VBd0RFLFlBQUE7QzlCMjBISDtBOEJuNEhDO0VBMERJLG1CQUFBO0VBQ0EsbUJBQUE7QzlCNDBITDtBOEJ2NEhDO0VBZ0VFLFVBQUE7RUFDQSxXQUFBO0M5QjAwSEg7QThCOXpIRDtFQTBEQTtJQWpFTSxvQkFBQTtJQUNBLFVBQUE7RzlCeTBISDtFOEJ6d0hIO0lBOURRLGlCQUFBO0c5QjAwSEw7Q0FDRjtBOEJwNUhDO0VBdUZFLGdCQUFBO0VBQ0EsbUJBQUE7QzlCZzBISDtBOEJ4NUhDOzs7RUE4RkUsdUJBQUE7QzlCK3pISDtBOEJqekhEO0VBMkJBO0lBcENNLDhCQUFBO0lBQ0EsMkJBQUE7RzlCOHpISDtFOEIzeEhIOzs7SUE5Qk0sMEJBQUE7RzlCOHpISDtDQUNGO0E4Qi81SEQ7RUFFSSxZQUFBO0M5Qmc2SEg7QThCbDZIRDtFQU1NLG1CQUFBO0M5Qis1SEw7QThCcjZIRDtFQVNNLGlCQUFBO0M5Qis1SEw7QThCMTVISzs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0M5QjQ1SFA7QThCcDVIRDtFQUVJLFlBQUE7QzlCcTVISDtBOEJ2NUhEO0VBSU0sZ0JBQUE7RUFDQSxlQUFBO0M5QnM1SEw7QThCMTRIRDtFQUNFLFlBQUE7QzlCNDRIRDtBOEI3NEhEO0VBSUksWUFBQTtDOUI0NEhIO0E4Qmg1SEQ7RUFNTSxtQkFBQTtFQUNBLG1CQUFBO0M5QjY0SEw7QThCcDVIRDtFQVlJLFVBQUE7RUFDQSxXQUFBO0M5QjI0SEg7QThCLzNIRDtFQTBEQTtJQWpFTSxvQkFBQTtJQUNBLFVBQUE7RzlCMDRISDtFOEIxMEhIO0lBOURRLGlCQUFBO0c5QjI0SEw7Q0FDRjtBOEJuNEhEO0VBQ0UsaUJBQUE7QzlCcTRIRDtBOEJ0NEhEO0VBS0ksZ0JBQUE7RUFDQSxtQkFBQTtDOUJvNEhIO0E4QjE0SEQ7OztFQVlJLHVCQUFBO0M5Qm00SEg7QThCcjNIRDtFQTJCQTtJQXBDTSw4QkFBQTtJQUNBLDJCQUFBO0c5Qms0SEg7RThCLzFISDs7O0lBOUJNLDBCQUFBO0c5Qms0SEg7Q0FDRjtBOEJ6M0hEO0VBRUksY0FBQTtDOUIwM0hIO0E4QjUzSEQ7RUFLSSxlQUFBO0M5QjAzSEg7QThCajNIRDtFQUVFLGlCQUFBO0VGM09BLDJCQUFBO0VBQ0MsMEJBQUE7QzVCOGxJRjtBK0J4bElEO0VBQ0UsbUJBQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0EsOEJBQUE7Qy9CMGxJRDtBK0JsbElEO0VBOG5CQTtJQWhvQkksbUJBQUE7Ry9Cd2xJRDtDQUNGO0ErQnprSUQ7RUFnbkJBO0lBbG5CSSxZQUFBO0cvQitrSUQ7Q0FDRjtBK0Jqa0lEO0VBQ0Usb0JBQUE7RUFDQSxvQkFBQTtFQUNBLG1CQUFBO0VBQ0Esa0NBQUE7RUFDQSxtREFBQTtFQUVBLGtDQUFBO0MvQmtrSUQ7QStCaGtJQztFQUNFLGlCQUFBO0MvQmtrSUg7QStCdGlJRDtFQTZqQkE7SUFybEJJLFlBQUE7SUFDQSxjQUFBO0lBQ0EsaUJBQUE7Ry9Ca2tJRDtFK0Joa0lDO0lBQ0UsMEJBQUE7SUFDQSx3QkFBQTtJQUNBLGtCQUFBO0lBQ0EsNkJBQUE7Ry9Ca2tJSDtFK0IvaklDO0lBQ0Usb0JBQUE7Ry9CaWtJSDtFK0I1aklDOzs7SUFHRSxnQkFBQTtJQUNBLGlCQUFBO0cvQjhqSUg7Q0FDRjtBK0IxaklEOztFQUdJLGtCQUFBO0MvQjJqSUg7QStCdGpJQztFQW1qQkY7O0lBcmpCTSxrQkFBQTtHL0I2aklIO0NBQ0Y7QStCcGpJRDs7OztFQUlJLG9CQUFBO0VBQ0EsbUJBQUE7Qy9Cc2pJSDtBK0JoaklDO0VBZ2lCRjs7OztJQW5pQk0sZ0JBQUE7SUFDQSxlQUFBO0cvQjBqSUg7Q0FDRjtBK0I5aUlEO0VBQ0UsY0FBQTtFQUNBLHNCQUFBO0MvQmdqSUQ7QStCM2lJRDtFQThnQkE7SUFoaEJJLGlCQUFBO0cvQmlqSUQ7Q0FDRjtBK0I3aUlEOztFQUVFLGdCQUFBO0VBQ0EsU0FBQTtFQUNBLFFBQUE7RUFDQSxjQUFBO0MvQitpSUQ7QStCemlJRDtFQWdnQkE7O0lBbGdCSSxpQkFBQTtHL0JnaklEO0NBQ0Y7QStCOWlJRDtFQUNFLE9BQUE7RUFDQSxzQkFBQTtDL0JnaklEO0ErQjlpSUQ7RUFDRSxVQUFBO0VBQ0EsaUJBQUE7RUFDQSxzQkFBQTtDL0JnaklEO0ErQjFpSUQ7RUFDRSxZQUFBO0VBQ0EsbUJBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsYUFBQTtDL0I0aUlEO0ErQjFpSUM7O0VBRUUsc0JBQUE7Qy9CNGlJSDtBK0JyaklEO0VBYUksZUFBQTtDL0IyaUlIO0ErQmxpSUQ7RUFMSTs7SUFFRSxtQkFBQTtHL0IwaUlIO0NBQ0Y7QStCaGlJRDtFQUNFLG1CQUFBO0VBQ0EsYUFBQTtFQUNBLG1CQUFBO0VBQ0Esa0JBQUE7RUM5TEEsZ0JBQUE7RUFDQSxtQkFBQTtFRCtMQSw4QkFBQTtFQUNBLHVCQUFBO0VBQ0EsOEJBQUE7RUFDQSxtQkFBQTtDL0JtaUlEO0ErQi9oSUM7RUFDRSxXQUFBO0MvQmlpSUg7QStCL2lJRDtFQW1CSSxlQUFBO0VBQ0EsWUFBQTtFQUNBLFlBQUE7RUFDQSxtQkFBQTtDL0IraElIO0ErQnJqSUQ7RUF5QkksZ0JBQUE7Qy9CK2hJSDtBK0J6aElEO0VBcWJBO0lBdmJJLGNBQUE7Ry9CK2hJRDtDQUNGO0ErQnRoSUQ7RUFDRSxvQkFBQTtDL0J3aElEO0ErQnpoSUQ7RUFJSSxrQkFBQTtFQUNBLHFCQUFBO0VBQ0Esa0JBQUE7Qy9Cd2hJSDtBK0I1L0hDO0VBMllGO0lBamFNLGlCQUFBO0lBQ0EsWUFBQTtJQUNBLFlBQUE7SUFDQSxjQUFBO0lBQ0EsOEJBQUE7SUFDQSxVQUFBO0lBQ0EsaUJBQUE7Ry9Cc2hJSDtFK0IzbkhIOztJQXhaUSwyQkFBQTtHL0J1aElMO0UrQi9uSEg7SUFyWlEsa0JBQUE7Ry9CdWhJTDtFK0J0aElLOztJQUVFLHVCQUFBO0cvQndoSVA7Q0FDRjtBK0J0Z0lEO0VBK1hBO0lBMVlJLFlBQUE7SUFDQSxVQUFBO0cvQnFoSUQ7RStCNW9ISDtJQXRZTSxZQUFBO0cvQnFoSUg7RStCL29ISDtJQXBZUSxrQkFBQTtJQUNBLHFCQUFBO0cvQnNoSUw7Q0FDRjtBK0IzZ0lEO0VBQ0UsbUJBQUE7RUFDQSxvQkFBQTtFQUNBLG1CQUFBO0VBQ0Esa0NBQUE7RUFDQSxxQ0FBQTtFMUI3TlEscUZBQUE7RTJCL0RSLGdCQUFBO0VBQ0EsbUJBQUE7Q2hDNHlJRDtBa0I1eEhEO0VBd0VBO0lBdElNLHNCQUFBO0lBQ0EsaUJBQUE7SUFDQSx1QkFBQTtHbEI4MUhIO0VrQjF0SEg7SUEvSE0sc0JBQUE7SUFDQSxZQUFBO0lBQ0EsdUJBQUE7R2xCNDFISDtFa0IvdEhIO0lBeEhNLHNCQUFBO0dsQjAxSEg7RWtCbHVISDtJQXBITSxzQkFBQTtJQUNBLHVCQUFBO0dsQnkxSEg7RWtCdHVISDs7O0lBOUdRLFlBQUE7R2xCeTFITDtFa0IzdUhIO0lBeEdNLFlBQUE7R2xCczFISDtFa0I5dUhIO0lBcEdNLGlCQUFBO0lBQ0EsdUJBQUE7R2xCcTFISDtFa0JsdkhIOztJQTVGTSxzQkFBQTtJQUNBLGNBQUE7SUFDQSxpQkFBQTtJQUNBLHVCQUFBO0dsQmsxSEg7RWtCenZISDs7SUF0RlEsZ0JBQUE7R2xCbTFITDtFa0I3dkhIOztJQWpGTSxtQkFBQTtJQUNBLGVBQUE7R2xCazFISDtFa0Jsd0hIO0lBM0VNLE9BQUE7R2xCZzFISDtDQUNGO0ErQnBqSUM7RUFtV0Y7SUF6V00sbUJBQUE7Ry9COGpJSDtFK0I1aklHO0lBQ0UsaUJBQUE7Ry9COGpJTDtDQUNGO0ErQjdpSUQ7RUFvVkE7SUE1VkksWUFBQTtJQUNBLFVBQUE7SUFDQSxlQUFBO0lBQ0EsZ0JBQUE7SUFDQSxlQUFBO0lBQ0Esa0JBQUE7STFCeFBNLGlCQUFBO0dMbXpJUDtDQUNGO0ErQm5qSUQ7RUFDRSxjQUFBO0VIcFVBLDJCQUFBO0VBQ0MsMEJBQUE7QzVCMDNJRjtBK0JuaklEO0VBQ0UsaUJBQUE7RUh6VUEsNkJBQUE7RUFDQyw0QkFBQTtFQU9ELDhCQUFBO0VBQ0MsNkJBQUE7QzVCeTNJRjtBK0IvaUlEO0VDaFZFLGdCQUFBO0VBQ0EsbUJBQUE7Q2hDazRJRDtBK0JoaklDO0VDblZBLGlCQUFBO0VBQ0Esb0JBQUE7Q2hDczRJRDtBK0JqaklDO0VDdFZBLGlCQUFBO0VBQ0Esb0JBQUE7Q2hDMDRJRDtBK0IzaUlEO0VDaFdFLGlCQUFBO0VBQ0Esb0JBQUE7Q2hDODRJRDtBK0J2aUlEO0VBc1NBO0lBMVNJLFlBQUE7SUFDQSxrQkFBQTtJQUNBLG1CQUFBO0cvQitpSUQ7Q0FDRjtBK0JsaElEO0VBaEJFO0lFeFdBLHVCQUFBO0dqQzg0SUM7RStCcmlJRDtJRTVXQSx3QkFBQTtJRjhXRSxvQkFBQTtHL0J1aUlEO0UrQnppSUQ7SUFLSSxnQkFBQTtHL0J1aUlIO0NBQ0Y7QStCOWhJRDtFQUNFLDBCQUFBO0VBQ0Esc0JBQUE7Qy9CZ2lJRDtBK0JsaUlEO0VBS0ksWUFBQTtDL0JnaUlIO0ErQi9oSUc7O0VBRUUsZUFBQTtFQUNBLDhCQUFBO0MvQmlpSUw7QStCMWlJRDtFQWNJLFlBQUE7Qy9CK2hJSDtBK0I3aUlEO0VBbUJNLFlBQUE7Qy9CNmhJTDtBK0IzaElLOztFQUVFLFlBQUE7RUFDQSw4QkFBQTtDL0I2aElQO0ErQnpoSUs7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtDL0IyaElQO0ErQnZoSUs7OztFQUdFLFlBQUE7RUFDQSw4QkFBQTtDL0J5aElQO0ErQmprSUQ7RUE4Q0ksbUJBQUE7Qy9Cc2hJSDtBK0JyaElHOztFQUVFLHVCQUFBO0MvQnVoSUw7QStCeGtJRDtFQW9ETSx1QkFBQTtDL0J1aElMO0ErQjNrSUQ7O0VBMERJLHNCQUFBO0MvQnFoSUg7QStCOWdJSzs7O0VBR0UsMEJBQUE7RUFDQSxZQUFBO0MvQmdoSVA7QStCLytIQztFQW9LRjtJQTdMVSxZQUFBO0cvQjRnSVA7RStCM2dJTzs7SUFFRSxZQUFBO0lBQ0EsOEJBQUE7Ry9CNmdJVDtFK0J6Z0lPOzs7SUFHRSxZQUFBO0lBQ0EsMEJBQUE7Ry9CMmdJVDtFK0J2Z0lPOzs7SUFHRSxZQUFBO0lBQ0EsOEJBQUE7Ry9CeWdJVDtDQUNGO0ErQjNtSUQ7RUE4R0ksWUFBQTtDL0JnZ0lIO0ErQi8vSEc7RUFDRSxZQUFBO0MvQmlnSUw7QStCam5JRDtFQXFISSxZQUFBO0MvQisvSEg7QStCOS9IRzs7RUFFRSxZQUFBO0MvQmdnSUw7QStCNS9ISzs7OztFQUVFLFlBQUE7Qy9CZ2dJUDtBK0J4L0hEO0VBQ0UsdUJBQUE7RUFDQSxzQkFBQTtDL0IwL0hEO0ErQjUvSEQ7RUFLSSxlQUFBO0MvQjAvSEg7QStCei9IRzs7RUFFRSxZQUFBO0VBQ0EsOEJBQUE7Qy9CMi9ITDtBK0JwZ0lEO0VBY0ksZUFBQTtDL0J5L0hIO0ErQnZnSUQ7RUFtQk0sZUFBQTtDL0J1L0hMO0ErQnIvSEs7O0VBRUUsWUFBQTtFQUNBLDhCQUFBO0MvQnUvSFA7QStCbi9ISzs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0MvQnEvSFA7QStCai9ISzs7O0VBR0UsWUFBQTtFQUNBLDhCQUFBO0MvQm0vSFA7QStCM2hJRDtFQStDSSxtQkFBQTtDL0IrK0hIO0ErQjkrSEc7O0VBRUUsdUJBQUE7Qy9CZy9ITDtBK0JsaUlEO0VBcURNLHVCQUFBO0MvQmcvSEw7QStCcmlJRDs7RUEyREksc0JBQUE7Qy9COCtISDtBK0J4K0hLOzs7RUFHRSwwQkFBQTtFQUNBLFlBQUE7Qy9CMCtIUDtBK0JuOEhDO0VBd0JGO0lBdkRVLHNCQUFBO0cvQnMrSFA7RStCLzZISDtJQXBEVSwwQkFBQTtHL0JzK0hQO0UrQmw3SEg7SUFqRFUsZUFBQTtHL0JzK0hQO0UrQnIrSE87O0lBRUUsWUFBQTtJQUNBLDhCQUFBO0cvQnUrSFQ7RStCbitITzs7O0lBR0UsWUFBQTtJQUNBLDBCQUFBO0cvQnErSFQ7RStCaitITzs7O0lBR0UsWUFBQTtJQUNBLDhCQUFBO0cvQm0rSFQ7Q0FDRjtBK0Iza0lEO0VBK0dJLGVBQUE7Qy9CKzlISDtBK0I5OUhHO0VBQ0UsWUFBQTtDL0JnK0hMO0ErQmpsSUQ7RUFzSEksZUFBQTtDL0I4OUhIO0ErQjc5SEc7O0VBRUUsWUFBQTtDL0IrOUhMO0ErQjM5SEs7Ozs7RUFFRSxZQUFBO0MvQis5SFA7QWtDem1KRDtFQUNFLGtCQUFBO0VBQ0Esb0JBQUE7RUFDQSxpQkFBQTtFQUNBLDBCQUFBO0VBQ0EsbUJBQUE7Q2xDMm1KRDtBa0NobkpEO0VBUUksc0JBQUE7Q2xDMm1KSDtBa0NubkpEO0VBV00sa0JBQUE7RUFDQSxlQUFBO0VBQ0EsWUFBQTtDbEMybUpMO0FrQ3huSkQ7RUFrQkksZUFBQTtDbEN5bUpIO0FtQzduSkQ7RUFDRSxzQkFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTtFQUNBLG1CQUFBO0NuQytuSkQ7QW1Dbm9KRDtFQU9JLGdCQUFBO0NuQytuSkg7QW1DdG9KRDs7RUFVTSxtQkFBQTtFQUNBLFlBQUE7RUFDQSxrQkFBQTtFQUNBLHdCQUFBO0VBQ0Esc0JBQUE7RUFDQSxlQUFBO0VBQ0EsdUJBQUE7RUFDQSx1QkFBQTtFQUNBLGtCQUFBO0NuQ2dvSkw7QW1DOW5KRzs7RUFHSSxlQUFBO0VQWE4sK0JBQUE7RUFDRyw0QkFBQTtDNUIyb0pKO0FtQzduSkc7O0VQdkJGLGdDQUFBO0VBQ0csNkJBQUE7QzVCd3BKSjtBbUN4bkpHOzs7O0VBRUUsV0FBQTtFQUNBLGVBQUE7RUFDQSwwQkFBQTtFQUNBLG1CQUFBO0NuQzRuSkw7QW1DdG5KRzs7Ozs7O0VBR0UsV0FBQTtFQUNBLFlBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0VBQ0EsZ0JBQUE7Q25DMm5KTDtBbUNsckpEOzs7Ozs7RUFrRU0sZUFBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtDbkN3bkpMO0FtQy9tSkQ7O0VDM0VNLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSx1QkFBQTtDcEM4ckpMO0FvQzVySkc7O0VSS0YsK0JBQUE7RUFDRyw0QkFBQTtDNUIyckpKO0FvQzNySkc7O0VSVEYsZ0NBQUE7RUFDRyw2QkFBQTtDNUJ3c0pKO0FtQzFuSkQ7O0VDaEZNLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtDcEM4c0pMO0FvQzVzSkc7O0VSS0YsK0JBQUE7RUFDRyw0QkFBQTtDNUIyc0pKO0FvQzNzSkc7O0VSVEYsZ0NBQUE7RUFDRyw2QkFBQTtDNUJ3dEpKO0FxQzN0SkQ7RUFDRSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTtFQUNBLG1CQUFBO0NyQzZ0SkQ7QXFDanVKRDtFQU9JLGdCQUFBO0NyQzZ0Skg7QXFDcHVKRDs7RUFVTSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0EsdUJBQUE7RUFDQSx1QkFBQTtFQUNBLG9CQUFBO0NyQzh0Skw7QXFDNXVKRDs7RUFtQk0sc0JBQUE7RUFDQSwwQkFBQTtDckM2dEpMO0FxQ2p2SkQ7O0VBMkJNLGFBQUE7Q3JDMHRKTDtBcUNydkpEOztFQWtDTSxZQUFBO0NyQ3V0Skw7QXFDenZKRDs7OztFQTJDTSxlQUFBO0VBQ0EsdUJBQUE7RUFDQSxvQkFBQTtDckNvdEpMO0FzQ2x3SkQ7RUFDRSxnQkFBQTtFQUNBLHdCQUFBO0VBQ0EsZUFBQTtFQUNBLGtCQUFBO0VBQ0EsZUFBQTtFQUNBLFlBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VBQ0EseUJBQUE7RUFDQSxxQkFBQTtDdENvd0pEO0FzQ2h3Skc7O0VBRUUsWUFBQTtFQUNBLHNCQUFBO0VBQ0EsZ0JBQUE7Q3RDa3dKTDtBc0M3dkpDO0VBQ0UsY0FBQTtDdEMrdkpIO0FzQzN2SkM7RUFDRSxtQkFBQTtFQUNBLFVBQUE7Q3RDNnZKSDtBc0N0dkpEO0VDdENFLDBCQUFBO0N2Qyt4SkQ7QXVDNXhKRzs7RUFFRSwwQkFBQTtDdkM4eEpMO0FzQ3p2SkQ7RUMxQ0UsMEJBQUE7Q3ZDc3lKRDtBdUNueUpHOztFQUVFLDBCQUFBO0N2Q3F5Skw7QXNDNXZKRDtFQzlDRSwwQkFBQTtDdkM2eUpEO0F1QzF5Skc7O0VBRUUsMEJBQUE7Q3ZDNHlKTDtBc0MvdkpEO0VDbERFLDBCQUFBO0N2Q296SkQ7QXVDanpKRzs7RUFFRSwwQkFBQTtDdkNtekpMO0FzQ2x3SkQ7RUN0REUsMEJBQUE7Q3ZDMnpKRDtBdUN4ekpHOztFQUVFLDBCQUFBO0N2QzB6Skw7QXNDcndKRDtFQzFERSwwQkFBQTtDdkNrMEpEO0F1Qy96Skc7O0VBRUUsMEJBQUE7Q3ZDaTBKTDtBd0NuMEpEO0VBQ0Usc0JBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxrQkFBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0VBQ0EsdUJBQUE7RUFDQSxvQkFBQTtFQUNBLG1CQUFBO0VBQ0EsMEJBQUE7RUFDQSxvQkFBQTtDeENxMEpEO0F3Q2wwSkM7RUFDRSxjQUFBO0N4Q28wSkg7QXdDaDBKQztFQUNFLG1CQUFBO0VBQ0EsVUFBQTtDeENrMEpIO0F3Qy96SkM7O0VBRUUsT0FBQTtFQUNBLGlCQUFBO0N4Q2kwSkg7QXdDNXpKRzs7RUFFRSxZQUFBO0VBQ0Esc0JBQUE7RUFDQSxnQkFBQTtDeEM4ekpMO0F3Q3p6SkM7O0VBRUUsZUFBQTtFQUNBLHVCQUFBO0N4QzJ6Skg7QXdDeHpKQztFQUNFLGFBQUE7Q3hDMHpKSDtBd0N2ekpDO0VBQ0Usa0JBQUE7Q3hDeXpKSDtBd0N0ekpDO0VBQ0UsaUJBQUE7Q3hDd3pKSDtBeUNsM0pEO0VBQ0Usa0JBQUE7RUFDQSxxQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZUFBQTtFQUNBLDBCQUFBO0N6Q28zSkQ7QXlDejNKRDs7RUFTSSxlQUFBO0N6Q28zSkg7QXlDNzNKRDtFQWFJLG9CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtDekNtM0pIO0F5Q2w0SkQ7RUFtQkksMEJBQUE7Q3pDazNKSDtBeUMvMkpDOztFQUVFLG1CQUFBO0N6Q2kzSkg7QXlDejRKRDtFQTRCSSxnQkFBQTtDekNnM0pIO0F5QzkxSkQ7RUFDQTtJQWZJLGtCQUFBO0lBQ0EscUJBQUE7R3pDZzNKRDtFeUM5MkpDOztJQUVFLG1CQUFBO0lBQ0Esb0JBQUE7R3pDZzNKSDtFeUN2MkpIOztJQUpNLGdCQUFBO0d6QysySkg7Q0FDRjtBMEMxNUpEO0VBQ0UsZUFBQTtFQUNBLGFBQUE7RUFDQSxvQkFBQTtFQUNBLHdCQUFBO0VBQ0EsdUJBQUE7RUFDQSx1QkFBQTtFQUNBLG1CQUFBO0VyQ21MUSxvQ0FBQTtDTDR1SlQ7QTBDdDZKRDs7RUFhSSxrQkFBQTtFQUNBLG1CQUFBO0MxQzY1Skg7QTBDejVKQzs7O0VBR0Usc0JBQUE7QzFDMjVKSDtBMENoN0pEO0VBMEJJLGFBQUE7RUFDQSxlQUFBO0MxQ3k1Skg7QTJDbDdKRDtFQUNFLGNBQUE7RUFDQSxvQkFBQTtFQUNBLDhCQUFBO0VBQ0EsbUJBQUE7QzNDbzdKRDtBMkN4N0pEO0VBUUksY0FBQTtFQUVBLGVBQUE7QzNDazdKSDtBMkM1N0pEO0VBZUksa0JBQUE7QzNDZzdKSDtBMkMvN0pEOztFQXFCSSxpQkFBQTtDM0M4NkpIO0EyQ244SkQ7RUF5QkksZ0JBQUE7QzNDNjZKSDtBMkNyNkpEOztFQUVFLG9CQUFBO0MzQ3U2SkQ7QTJDejZKRDs7RUFNSSxtQkFBQTtFQUNBLFVBQUE7RUFDQSxhQUFBO0VBQ0EsZUFBQTtDM0N1NkpIO0EyQy81SkQ7RUN2REUsMEJBQUE7RUFDQSxzQkFBQTtFQUNBLGVBQUE7QzVDeTlKRDtBMkNwNkpEO0VDbERJLDBCQUFBO0M1Q3k5Skg7QTJDdjZKRDtFQy9DSSxlQUFBO0M1Q3k5Skg7QTJDdDZKRDtFQzNERSwwQkFBQTtFQUNBLHNCQUFBO0VBQ0EsZUFBQTtDNUNvK0pEO0EyQzM2SkQ7RUN0REksMEJBQUE7QzVDbytKSDtBMkM5NkpEO0VDbkRJLGVBQUE7QzVDbytKSDtBMkM3NkpEO0VDL0RFLDBCQUFBO0VBQ0Esc0JBQUE7RUFDQSxlQUFBO0M1QysrSkQ7QTJDbDdKRDtFQzFESSwwQkFBQTtDNUMrK0pIO0EyQ3I3SkQ7RUN2REksZUFBQTtDNUMrK0pIO0EyQ3A3SkQ7RUNuRUUsMEJBQUE7RUFDQSxzQkFBQTtFQUNBLGVBQUE7QzVDMC9KRDtBMkN6N0pEO0VDOURJLDBCQUFBO0M1QzAvSkg7QTJDNTdKRDtFQzNESSxlQUFBO0M1QzAvSkg7QTZDNS9KRDtFQUNFO0lBQVEsNEJBQUE7RzdDKy9KUDtFNkM5L0pEO0lBQVEseUJBQUE7RzdDaWdLUDtDQUNGO0E2QzkvSkQ7RUFDRTtJQUFRLDRCQUFBO0c3Q2lnS1A7RTZDaGdLRDtJQUFRLHlCQUFBO0c3Q21nS1A7Q0FDRjtBNkM1L0pEO0VBQ0UsaUJBQUE7RUFDQSxhQUFBO0VBQ0Esb0JBQUE7RUFDQSwwQkFBQTtFQUNBLG1CQUFBO0V4Q3VDUSwrQ0FBQTtDTHk5SlQ7QTZDMy9KRDtFQUNFLFlBQUE7RUFDQSxVQUFBO0VBQ0EsYUFBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7RUFDQSxZQUFBO0VBQ0EsbUJBQUE7RUFDQSwwQkFBQTtFeEMwQlEsK0NBQUE7RUEySEEsNEJBQUE7Q0w2MkpUO0E2Q3gvSkQ7O0VDR0ksc01BQUE7RURBRiwyQkFBQTtDN0M0L0pEO0E2Q3IvSkQ7O0V4QzVDRSwyREFBQTtFQUVRLG1EQUFBO0NMcWlLVDtBNkNsL0pEO0VFckVFLDBCQUFBO0MvQzBqS0Q7QStDdmpLQztFRGtERSxzTUFBQTtDOUMwZ0tIO0E2Q3QvSkQ7RUV6RUUsMEJBQUE7Qy9Da2tLRDtBK0MvaktDO0VEa0RFLHNNQUFBO0M5Q2toS0g7QTZDMS9KRDtFRTdFRSwwQkFBQTtDL0Mwa0tEO0ErQ3ZrS0M7RURrREUsc01BQUE7QzlDMGhLSDtBNkM5L0pEO0VFakZFLDBCQUFBO0MvQ2tsS0Q7QStDL2tLQztFRGtERSxzTUFBQTtDOUNraUtIO0FnRDFsS0Q7RUFFRSxpQkFBQTtDaEQybEtEO0FnRHpsS0M7RUFDRSxjQUFBO0NoRDJsS0g7QWdEdmxLRDs7RUFFRSxRQUFBO0VBQ0EsaUJBQUE7Q2hEeWxLRDtBZ0R0bEtEO0VBQ0UsZUFBQTtDaER3bEtEO0FnRHJsS0Q7RUFDRSxlQUFBO0NoRHVsS0Q7QWdEcGxLQztFQUNFLGdCQUFBO0NoRHNsS0g7QWdEbGxLRDs7RUFFRSxtQkFBQTtDaERvbEtEO0FnRGpsS0Q7O0VBRUUsb0JBQUE7Q2hEbWxLRDtBZ0RobEtEOzs7RUFHRSxvQkFBQTtFQUNBLG9CQUFBO0NoRGtsS0Q7QWdEL2tLRDtFQUNFLHVCQUFBO0NoRGlsS0Q7QWdEOWtLRDtFQUNFLHVCQUFBO0NoRGdsS0Q7QWdENWtLRDtFQUNFLGNBQUE7RUFDQSxtQkFBQTtDaEQ4a0tEO0FnRHhrS0Q7RUFDRSxnQkFBQTtFQUNBLGlCQUFBO0NoRDBrS0Q7QWlEam9LRDtFQUVFLG9CQUFBO0VBQ0EsZ0JBQUE7Q2pEa29LRDtBaUQxbktEO0VBQ0UsbUJBQUE7RUFDQSxlQUFBO0VBQ0EsbUJBQUE7RUFFQSxvQkFBQTtFQUNBLHVCQUFBO0VBQ0EsdUJBQUE7Q2pEMm5LRDtBaUR4bktDO0VyQjNCQSw2QkFBQTtFQUNDLDRCQUFBO0M1QnNwS0Y7QWlEem5LQztFQUNFLGlCQUFBO0VyQnZCRixnQ0FBQTtFQUNDLCtCQUFBO0M1Qm1wS0Y7QWlEbG5LRDs7RUFFRSxZQUFBO0NqRG9uS0Q7QWlEdG5LRDs7RUFLSSxZQUFBO0NqRHFuS0g7QWlEam5LQzs7OztFQUVFLHNCQUFBO0VBQ0EsWUFBQTtFQUNBLDBCQUFBO0NqRHFuS0g7QWlEam5LRDtFQUNFLFlBQUE7RUFDQSxpQkFBQTtDakRtbktEO0FpRDltS0M7OztFQUdFLDBCQUFBO0VBQ0EsZUFBQTtFQUNBLG9CQUFBO0NqRGduS0g7QWlEcm5LQzs7O0VBU0ksZUFBQTtDakRpbktMO0FpRDFuS0M7OztFQVlJLGVBQUE7Q2pEbW5LTDtBaUQ5bUtDOzs7RUFHRSxXQUFBO0VBQ0EsWUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q2pEZ25LSDtBaUR0bktDOzs7Ozs7Ozs7RUFZSSxlQUFBO0NqRHFuS0w7QWlEam9LQzs7O0VBZUksZUFBQTtDakR1bktMO0FrRHp0S0M7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7Q2xEMnRLSDtBa0R6dEtHOztFQUVFLGVBQUE7Q2xEMnRLTDtBa0Q3dEtHOztFQUtJLGVBQUE7Q2xENHRLUDtBa0R6dEtLOzs7O0VBRUUsZUFBQTtFQUNBLDBCQUFBO0NsRDZ0S1A7QWtEM3RLSzs7Ozs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q2xEZ3VLUDtBa0R0dktDO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0NsRHd2S0g7QWtEdHZLRzs7RUFFRSxlQUFBO0NsRHd2S0w7QWtEMXZLRzs7RUFLSSxlQUFBO0NsRHl2S1A7QWtEdHZLSzs7OztFQUVFLGVBQUE7RUFDQSwwQkFBQTtDbEQwdktQO0FrRHh2S0s7Ozs7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0NsRDZ2S1A7QWtEbnhLQztFQUNFLGVBQUE7RUFDQSwwQkFBQTtDbERxeEtIO0FrRG54S0c7O0VBRUUsZUFBQTtDbERxeEtMO0FrRHZ4S0c7O0VBS0ksZUFBQTtDbERzeEtQO0FrRG54S0s7Ozs7RUFFRSxlQUFBO0VBQ0EsMEJBQUE7Q2xEdXhLUDtBa0RyeEtLOzs7Ozs7RUFHRSxZQUFBO0VBQ0EsMEJBQUE7RUFDQSxzQkFBQTtDbEQweEtQO0FrRGh6S0M7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7Q2xEa3pLSDtBa0RoektHOztFQUVFLGVBQUE7Q2xEa3pLTDtBa0RwektHOztFQUtJLGVBQUE7Q2xEbXpLUDtBa0RoektLOzs7O0VBRUUsZUFBQTtFQUNBLDBCQUFBO0NsRG96S1A7QWtEbHpLSzs7Ozs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q2xEdXpLUDtBaUR0dEtEO0VBQ0UsY0FBQTtFQUNBLG1CQUFBO0NqRHd0S0Q7QWlEdHRLRDtFQUNFLGlCQUFBO0VBQ0EsaUJBQUE7Q2pEd3RLRDtBbURsMUtEO0VBQ0Usb0JBQUE7RUFDQSx1QkFBQTtFQUNBLDhCQUFBO0VBQ0EsbUJBQUE7RTlDMkRRLDBDQUFBO0NMMnhLVDtBbURqMUtEO0VBQ0UsY0FBQTtDbkRtMUtEO0FtRDkwS0Q7RUFDRSxtQkFBQTtFQUNBLHFDQUFBO0V2QnBCQSw2QkFBQTtFQUNDLDRCQUFBO0M1QnEyS0Y7QW1EcDFLRDtFQU1JLGVBQUE7Q25EaTFLSDtBbUQ1MEtEO0VBQ0UsY0FBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxlQUFBO0NuRDgwS0Q7QW1EbDFLRDs7Ozs7RUFXSSxlQUFBO0NuRDgwS0g7QW1EejBLRDtFQUNFLG1CQUFBO0VBQ0EsMEJBQUE7RUFDQSwyQkFBQTtFdkJ4Q0EsZ0NBQUE7RUFDQywrQkFBQTtDNUJvM0tGO0FtRG4wS0Q7O0VBR0ksaUJBQUE7Q25EbzBLSDtBbUR2MEtEOztFQU1NLG9CQUFBO0VBQ0EsaUJBQUE7Q25EcTBLTDtBbURqMEtHOztFQUVJLGNBQUE7RXZCdkVOLDZCQUFBO0VBQ0MsNEJBQUE7QzVCMjRLRjtBbUQvektHOztFQUVJLGlCQUFBO0V2QnZFTixnQ0FBQTtFQUNDLCtCQUFBO0M1Qnk0S0Y7QW1EeDFLRDtFdkIxREUsMkJBQUE7RUFDQywwQkFBQTtDNUJxNUtGO0FtRDN6S0Q7RUFFSSxvQkFBQTtDbkQ0ektIO0FtRHp6S0Q7RUFDRSxvQkFBQTtDbkQyektEO0FtRG56S0Q7OztFQUlJLGlCQUFBO0NuRG96S0g7QW1EeHpLRDs7O0VBT00sbUJBQUE7RUFDQSxvQkFBQTtDbkRzektMO0FtRDl6S0Q7O0V2QnpHRSw2QkFBQTtFQUNDLDRCQUFBO0M1QjI2S0Y7QW1EbjBLRDs7OztFQW1CUSw0QkFBQTtFQUNBLDZCQUFBO0NuRHN6S1A7QW1EMTBLRDs7Ozs7Ozs7RUF3QlUsNEJBQUE7Q25ENHpLVDtBbURwMUtEOzs7Ozs7OztFQTRCVSw2QkFBQTtDbkRrMEtUO0FtRDkxS0Q7O0V2QmpHRSxnQ0FBQTtFQUNDLCtCQUFBO0M1Qm04S0Y7QW1EbjJLRDs7OztFQXlDUSwrQkFBQTtFQUNBLGdDQUFBO0NuRGcwS1A7QW1EMTJLRDs7Ozs7Ozs7RUE4Q1UsK0JBQUE7Q25EczBLVDtBbURwM0tEOzs7Ozs7OztFQWtEVSxnQ0FBQTtDbkQ0MEtUO0FtRDkzS0Q7Ozs7RUEyREksMkJBQUE7Q25EeTBLSDtBbURwNEtEOztFQStESSxjQUFBO0NuRHkwS0g7QW1EeDRLRDs7RUFtRUksVUFBQTtDbkR5MEtIO0FtRDU0S0Q7Ozs7Ozs7Ozs7OztFQTBFVSxlQUFBO0NuRGcxS1Q7QW1EMTVLRDs7Ozs7Ozs7Ozs7O0VBOEVVLGdCQUFBO0NuRDAxS1Q7QW1EeDZLRDs7Ozs7Ozs7RUF1RlUsaUJBQUE7Q25EMjFLVDtBbURsN0tEOzs7Ozs7OztFQWdHVSxpQkFBQTtDbkQ0MUtUO0FtRDU3S0Q7RUFzR0ksVUFBQTtFQUNBLGlCQUFBO0NuRHkxS0g7QW1ELzBLRDtFQUNFLG9CQUFBO0NuRGkxS0Q7QW1EbDFLRDtFQUtJLGlCQUFBO0VBQ0EsbUJBQUE7Q25EZzFLSDtBbUR0MUtEO0VBU00sZ0JBQUE7Q25EZzFLTDtBbUR6MUtEO0VBY0ksaUJBQUE7Q25EODBLSDtBbUQ1MUtEOztFQWtCTSwyQkFBQTtDbkQ4MEtMO0FtRGgyS0Q7RUF1QkksY0FBQTtDbkQ0MEtIO0FtRG4yS0Q7RUF5Qk0sOEJBQUE7Q25ENjBLTDtBbUR0MEtEO0VDMVBFLG1CQUFBO0NwRG1rTEQ7QW9EamtMQztFQUNFLGVBQUE7RUFDQSwwQkFBQTtFQUNBLG1CQUFBO0NwRG1rTEg7QW9EdGtMQztFQU1JLHVCQUFBO0NwRG1rTEw7QW9EemtMQztFQVNJLGVBQUE7RUFDQSwwQkFBQTtDcERta0xMO0FvRGhrTEM7RUFFSSwwQkFBQTtDcERpa0xMO0FtRHIxS0Q7RUM3UEUsc0JBQUE7Q3BEcWxMRDtBb0RubExDO0VBQ0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q3BEcWxMSDtBb0R4bExDO0VBTUksMEJBQUE7Q3BEcWxMTDtBb0QzbExDO0VBU0ksZUFBQTtFQUNBLHVCQUFBO0NwRHFsTEw7QW9EbGxMQztFQUVJLDZCQUFBO0NwRG1sTEw7QW1EcDJLRDtFQ2hRRSxzQkFBQTtDcER1bUxEO0FvRHJtTEM7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7RUFDQSxzQkFBQTtDcER1bUxIO0FvRDFtTEM7RUFNSSwwQkFBQTtDcER1bUxMO0FvRDdtTEM7RUFTSSxlQUFBO0VBQ0EsMEJBQUE7Q3BEdW1MTDtBb0RwbUxDO0VBRUksNkJBQUE7Q3BEcW1MTDtBbURuM0tEO0VDblFFLHNCQUFBO0NwRHluTEQ7QW9Edm5MQztFQUNFLGVBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0NwRHluTEg7QW9ENW5MQztFQU1JLDBCQUFBO0NwRHluTEw7QW9EL25MQztFQVNJLGVBQUE7RUFDQSwwQkFBQTtDcER5bkxMO0FvRHRuTEM7RUFFSSw2QkFBQTtDcER1bkxMO0FtRGw0S0Q7RUN0UUUsc0JBQUE7Q3BEMm9MRDtBb0R6b0xDO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q3BEMm9MSDtBb0Q5b0xDO0VBTUksMEJBQUE7Q3BEMm9MTDtBb0RqcExDO0VBU0ksZUFBQTtFQUNBLDBCQUFBO0NwRDJvTEw7QW9EeG9MQztFQUVJLDZCQUFBO0NwRHlvTEw7QW1EajVLRDtFQ3pRRSxzQkFBQTtDcEQ2cExEO0FvRDNwTEM7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7RUFDQSxzQkFBQTtDcEQ2cExIO0FvRGhxTEM7RUFNSSwwQkFBQTtDcEQ2cExMO0FvRG5xTEM7RUFTSSxlQUFBO0VBQ0EsMEJBQUE7Q3BENnBMTDtBb0QxcExDO0VBRUksNkJBQUE7Q3BEMnBMTDtBcUQzcUxEO0VBQ0UsbUJBQUE7RUFDQSxlQUFBO0VBQ0EsVUFBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtDckQ2cUxEO0FxRGxyTEQ7Ozs7O0VBWUksbUJBQUE7RUFDQSxPQUFBO0VBQ0EsUUFBQTtFQUNBLFVBQUE7RUFDQSxhQUFBO0VBQ0EsWUFBQTtFQUNBLFVBQUE7Q3JENnFMSDtBcUR4cUxEO0VBQ0UsdUJBQUE7Q3JEMHFMRDtBcUR0cUxEO0VBQ0Usb0JBQUE7Q3JEd3FMRDtBc0Ruc0xEO0VBQ0UsaUJBQUE7RUFDQSxjQUFBO0VBQ0Esb0JBQUE7RUFDQSwwQkFBQTtFQUNBLDBCQUFBO0VBQ0EsbUJBQUE7RWpEeURRLGdEQUFBO0NMOG9MVDtBc0Q3c0xEO0VBU0ksbUJBQUE7RUFDQSxrQ0FBQTtDdER1c0xIO0FzRGxzTEQ7RUFDRSxjQUFBO0VBQ0EsbUJBQUE7Q3REb3NMRDtBc0Rsc0xEO0VBQ0UsYUFBQTtFQUNBLG1CQUFBO0N0RG9zTEQ7QXVEMXRMRDtFQUNFLGFBQUE7RUFDQSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZUFBQTtFQUNBLFlBQUE7RUFDQSwwQkFBQTtFakNSQSxhQUFBO0VBR0EsMEJBQUE7Q3RCbXVMRDtBdUQzdExDOztFQUVFLFlBQUE7RUFDQSxzQkFBQTtFQUNBLGdCQUFBO0VqQ2ZGLGFBQUE7RUFHQSwwQkFBQTtDdEIydUxEO0F1RHZ0TEM7RUFDRSxXQUFBO0VBQ0EsZ0JBQUE7RUFDQSx3QkFBQTtFQUNBLFVBQUE7RUFDQSx5QkFBQTtDdkR5dExIO0F3RDl1TEQ7RUFDRSxpQkFBQTtDeERndkxEO0F3RDV1TEQ7RUFDRSxjQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLE9BQUE7RUFDQSxTQUFBO0VBQ0EsVUFBQTtFQUNBLFFBQUE7RUFDQSxjQUFBO0VBQ0Esa0NBQUE7RUFJQSxXQUFBO0N4RDJ1TEQ7QXdEeHVMQztFbkQrR0Esc0NBQUE7RUFHUSw4QkFBQTtFQXFFQSw0Q0FBQTtFQUFBLG9DQUFBO0NMMmpMVDtBd0Q5dUxDO0VuRDJHQSxtQ0FBQTtFQUdRLDJCQUFBO0NMc29MVDtBd0RsdkxEO0VBQ0UsbUJBQUE7RUFDQSxpQkFBQTtDeERvdkxEO0F3RGh2TEQ7RUFDRSxtQkFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0N4RGt2TEQ7QXdEOXVMRDtFQUNFLG1CQUFBO0VBQ0EsdUJBQUE7RUFDQSx1QkFBQTtFQUNBLHFDQUFBO0VBQ0EsbUJBQUE7RW5EY1EseUNBQUE7RW1EWlIsNkJBQUE7RUFFQSxXQUFBO0N4RGd2TEQ7QXdENXVMRDtFQUNFLGdCQUFBO0VBQ0EsT0FBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0VBQ0EsUUFBQTtFQUNBLGNBQUE7RUFDQSx1QkFBQTtDeEQ4dUxEO0F3RDV1TEM7RWxDckVBLFdBQUE7RUFHQSx5QkFBQTtDdEJrekxEO0F3RC91TEM7RWxDdEVBLGFBQUE7RUFHQSwwQkFBQTtDdEJzekxEO0F3RDl1TEQ7RUFDRSxjQUFBO0VBQ0EsaUNBQUE7RUFDQSwwQkFBQTtDeERndkxEO0F3RDd1TEQ7RUFDRSxpQkFBQTtDeEQrdUxEO0F3RDN1TEQ7RUFDRSxVQUFBO0VBQ0Esd0JBQUE7Q3hENnVMRDtBd0R4dUxEO0VBQ0UsbUJBQUE7RUFDQSxjQUFBO0N4RDB1TEQ7QXdEdHVMRDtFQUNFLGNBQUE7RUFDQSxrQkFBQTtFQUNBLDhCQUFBO0N4RHd1TEQ7QXdEM3VMRDtFQVFJLGlCQUFBO0VBQ0EsaUJBQUE7Q3hEc3VMSDtBd0QvdUxEO0VBYUksa0JBQUE7Q3hEcXVMSDtBd0RsdkxEO0VBaUJJLGVBQUE7Q3hEb3VMSDtBd0QvdExEO0VBQ0UsbUJBQUE7RUFDQSxhQUFBO0VBQ0EsWUFBQTtFQUNBLGFBQUE7RUFDQSxpQkFBQTtDeERpdUxEO0F3RC9zTEQ7RUFaRTtJQUNFLGFBQUE7SUFDQSxrQkFBQTtHeEQ4dExEO0V3RDV0TEQ7SW5EdEVRLDBDQUFBO0dMc3lMUDtFd0QzdExEO0lBQVksYUFBQTtHeEQ4dExYO0NBQ0Y7QXdEenRMRDtFQUZFO0lBQVksYUFBQTtHeEQrdExYO0NBQ0Y7QXlEOTJMRDtFQUNFLG1CQUFBO0VBQ0EsY0FBQTtFQUNBLGVBQUE7RUNSQSw0REFBQTtFQUVBLG1CQUFBO0VBQ0Esb0JBQUE7RUFDQSx1QkFBQTtFQUNBLGlCQUFBO0VBQ0Esd0JBQUE7RUFDQSxpQkFBQTtFQUNBLGtCQUFBO0VBQ0Esc0JBQUE7RUFDQSxrQkFBQTtFQUNBLHFCQUFBO0VBQ0Esb0JBQUE7RUFDQSxtQkFBQTtFQUNBLHFCQUFBO0VBQ0Esa0JBQUE7RURIQSxnQkFBQTtFbkNWQSxXQUFBO0VBR0EseUJBQUE7Q3RCcTRMRDtBeUQxM0xDO0VuQ2RBLGFBQUE7RUFHQSwwQkFBQTtDdEJ5NExEO0F5RDczTEM7RUFBVyxpQkFBQTtFQUFtQixlQUFBO0N6RGk0TC9CO0F5RGg0TEM7RUFBVyxpQkFBQTtFQUFtQixlQUFBO0N6RG80TC9CO0F5RG40TEM7RUFBVyxnQkFBQTtFQUFtQixlQUFBO0N6RHU0TC9CO0F5RHQ0TEM7RUFBVyxrQkFBQTtFQUFtQixlQUFBO0N6RDA0TC9CO0F5RHQ0TEQ7RUFDRSxpQkFBQTtFQUNBLGlCQUFBO0VBQ0EsWUFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtDekR3NExEO0F5RHA0TEQ7RUFDRSxtQkFBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0VBQ0EsMEJBQUE7RUFDQSxvQkFBQTtDekRzNExEO0F5RGw0TEM7RUFDRSxVQUFBO0VBQ0EsVUFBQTtFQUNBLGtCQUFBO0VBQ0Esd0JBQUE7RUFDQSx1QkFBQTtDekRvNExIO0F5RGw0TEM7RUFDRSxVQUFBO0VBQ0EsV0FBQTtFQUNBLG9CQUFBO0VBQ0Esd0JBQUE7RUFDQSx1QkFBQTtDekRvNExIO0F5RGw0TEM7RUFDRSxVQUFBO0VBQ0EsVUFBQTtFQUNBLG9CQUFBO0VBQ0Esd0JBQUE7RUFDQSx1QkFBQTtDekRvNExIO0F5RGw0TEM7RUFDRSxTQUFBO0VBQ0EsUUFBQTtFQUNBLGlCQUFBO0VBQ0EsNEJBQUE7RUFDQSx5QkFBQTtDekRvNExIO0F5RGw0TEM7RUFDRSxTQUFBO0VBQ0EsU0FBQTtFQUNBLGlCQUFBO0VBQ0EsNEJBQUE7RUFDQSx3QkFBQTtDekRvNExIO0F5RGw0TEM7RUFDRSxPQUFBO0VBQ0EsVUFBQTtFQUNBLGtCQUFBO0VBQ0Esd0JBQUE7RUFDQSwwQkFBQTtDekRvNExIO0F5RGw0TEM7RUFDRSxPQUFBO0VBQ0EsV0FBQTtFQUNBLGlCQUFBO0VBQ0Esd0JBQUE7RUFDQSwwQkFBQTtDekRvNExIO0F5RGw0TEM7RUFDRSxPQUFBO0VBQ0EsVUFBQTtFQUNBLGlCQUFBO0VBQ0Esd0JBQUE7RUFDQSwwQkFBQTtDekRvNExIO0EyRGorTEQ7RUFDRSxtQkFBQTtFQUNBLE9BQUE7RUFDQSxRQUFBO0VBQ0EsY0FBQTtFQUNBLGNBQUE7RUFDQSxpQkFBQTtFQUNBLGFBQUE7RURYQSw0REFBQTtFQUVBLG1CQUFBO0VBQ0Esb0JBQUE7RUFDQSx1QkFBQTtFQUNBLGlCQUFBO0VBQ0Esd0JBQUE7RUFDQSxpQkFBQTtFQUNBLGtCQUFBO0VBQ0Esc0JBQUE7RUFDQSxrQkFBQTtFQUNBLHFCQUFBO0VBQ0Esb0JBQUE7RUFDQSxtQkFBQTtFQUNBLHFCQUFBO0VBQ0Esa0JBQUE7RUNBQSxnQkFBQTtFQUVBLHVCQUFBO0VBQ0EsNkJBQUE7RUFDQSx1QkFBQTtFQUNBLHFDQUFBO0VBQ0EsbUJBQUE7RXREK0NRLDBDQUFBO0NMaThMVDtBMkQ1K0xDO0VBQVksa0JBQUE7QzNEKytMYjtBMkQ5K0xDO0VBQVksa0JBQUE7QzNEaS9MYjtBMkRoL0xDO0VBQVksaUJBQUE7QzNEbS9MYjtBMkRsL0xDO0VBQVksbUJBQUE7QzNEcS9MYjtBMkRsL0xEO0VBQ0UsVUFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSwwQkFBQTtFQUNBLGlDQUFBO0VBQ0EsMkJBQUE7QzNEby9MRDtBMkRqL0xEO0VBQ0Usa0JBQUE7QzNEbS9MRDtBMkQzK0xDOztFQUVFLG1CQUFBO0VBQ0EsZUFBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0VBQ0EsMEJBQUE7RUFDQSxvQkFBQTtDM0Q2K0xIO0EyRDErTEQ7RUFDRSxtQkFBQTtDM0Q0K0xEO0EyRDErTEQ7RUFDRSxtQkFBQTtFQUNBLFlBQUE7QzNENCtMRDtBMkR4K0xDO0VBQ0UsVUFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7RUFDQSwwQkFBQTtFQUNBLHNDQUFBO0VBQ0EsY0FBQTtDM0QwK0xIO0EyRHorTEc7RUFDRSxhQUFBO0VBQ0EsWUFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7RUFDQSx1QkFBQTtDM0QyK0xMO0EyRHgrTEM7RUFDRSxTQUFBO0VBQ0EsWUFBQTtFQUNBLGtCQUFBO0VBQ0EscUJBQUE7RUFDQSw0QkFBQTtFQUNBLHdDQUFBO0MzRDArTEg7QTJEeitMRztFQUNFLGFBQUE7RUFDQSxVQUFBO0VBQ0EsY0FBQTtFQUNBLHFCQUFBO0VBQ0EseUJBQUE7QzNEMitMTDtBMkR4K0xDO0VBQ0UsVUFBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7RUFDQSw2QkFBQTtFQUNBLHlDQUFBO0VBQ0EsV0FBQTtDM0QwK0xIO0EyRHorTEc7RUFDRSxhQUFBO0VBQ0EsU0FBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7RUFDQSwwQkFBQTtDM0QyK0xMO0EyRHYrTEM7RUFDRSxTQUFBO0VBQ0EsYUFBQTtFQUNBLGtCQUFBO0VBQ0Esc0JBQUE7RUFDQSwyQkFBQTtFQUNBLHVDQUFBO0MzRHkrTEg7QTJEeCtMRztFQUNFLGFBQUE7RUFDQSxXQUFBO0VBQ0Esc0JBQUE7RUFDQSx3QkFBQTtFQUNBLGNBQUE7QzNEMCtMTDtBNERubU1EO0VBQ0UsbUJBQUE7QzVEcW1NRDtBNERsbU1EO0VBQ0UsbUJBQUE7RUFDQSxpQkFBQTtFQUNBLFlBQUE7QzVEb21NRDtBNER2bU1EO0VBTUksY0FBQTtFQUNBLG1CQUFBO0V2RCtLTSxrQ0FBQTtDTHc3TFQ7QTREOW1NRDs7RUFjTSxlQUFBO0M1RG9tTUw7QTREMWtNQztFQTJORjtJdkR2RFUsK0NBQUE7SUFBQSx1Q0FBQTtJQTdKUixvQ0FBQTtJQUVRLDRCQUFBO0lBK0dSLDRCQUFBO0lBRVEsb0JBQUE7R0w2OUxQO0U0RHhtTUc7O0l2RG1ISiwyQ0FBQTtJQUNRLG1DQUFBO0l1RGpIRixRQUFBO0c1RDJtTUw7RTREem1NRzs7SXZEOEdKLDRDQUFBO0lBQ1Esb0NBQUE7SXVENUdGLFFBQUE7RzVENG1NTDtFNEQxbU1HOzs7SXZEeUdKLHdDQUFBO0lBQ1EsZ0NBQUE7SXVEdEdGLFFBQUE7RzVENm1NTDtDQUNGO0E0RG5wTUQ7OztFQTZDSSxlQUFBO0M1RDJtTUg7QTREeHBNRDtFQWlESSxRQUFBO0M1RDBtTUg7QTREM3BNRDs7RUFzREksbUJBQUE7RUFDQSxPQUFBO0VBQ0EsWUFBQTtDNUR5bU1IO0E0RGpxTUQ7RUE0REksV0FBQTtDNUR3bU1IO0E0RHBxTUQ7RUErREksWUFBQTtDNUR3bU1IO0E0RHZxTUQ7O0VBbUVJLFFBQUE7QzVEd21NSDtBNEQzcU1EO0VBdUVJLFlBQUE7QzVEdW1NSDtBNEQ5cU1EO0VBMEVJLFdBQUE7QzVEdW1NSDtBNEQvbE1EO0VBQ0UsbUJBQUE7RUFDQSxPQUFBO0VBQ0EsUUFBQTtFQUNBLFVBQUE7RUFDQSxXQUFBO0V0QzlGQSxhQUFBO0VBR0EsMEJBQUE7RXNDNkZBLGdCQUFBO0VBQ0EsWUFBQTtFQUNBLG1CQUFBO0VBQ0EsMENBQUE7QzVEa21NRDtBNEQ3bE1DO0VkaEdFLCtGQUFBO0VBQ0EsNEJBQUE7RUFDQSx1SEFBQTtDOUNrc01IO0E0RGptTUM7RUFDRSxXQUFBO0VBQ0EsU0FBQTtFZHJHQSwrRkFBQTtFQUNBLDRCQUFBO0VBQ0EsdUhBQUE7QzlDMnNNSDtBNERubU1DOztFQUVFLFdBQUE7RUFDQSxZQUFBO0VBQ0Esc0JBQUE7RXRDdEhGLGFBQUE7RUFHQSwwQkFBQTtDdEIwdE1EO0E0RHBvTUQ7Ozs7RUFzQ0ksbUJBQUE7RUFDQSxTQUFBO0VBQ0Esa0JBQUE7RUFDQSxXQUFBO0VBQ0Esc0JBQUE7QzVEb21NSDtBNEQ5b01EOztFQThDSSxVQUFBO0VBQ0EsbUJBQUE7QzVEb21NSDtBNERucE1EOztFQW1ESSxXQUFBO0VBQ0Esb0JBQUE7QzVEb21NSDtBNER4cE1EOztFQXdESSxZQUFBO0VBQ0EsYUFBQTtFQUNBLGVBQUE7RUFDQSxtQkFBQTtDNURvbU1IO0E0RC9sTUc7RUFDRSxpQkFBQTtDNURpbU1MO0E0RDdsTUc7RUFDRSxpQkFBQTtDNUQrbE1MO0E0RHJsTUQ7RUFDRSxtQkFBQTtFQUNBLGFBQUE7RUFDQSxVQUFBO0VBQ0EsWUFBQTtFQUNBLFdBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxtQkFBQTtDNUR1bE1EO0E0RGhtTUQ7RUFZSSxzQkFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsWUFBQTtFQUNBLG9CQUFBO0VBQ0EsdUJBQUE7RUFDQSxvQkFBQTtFQUNBLGdCQUFBO0VBV0EsMEJBQUE7RUFDQSxtQ0FBQTtDNUQ2a01IO0E0RDVtTUQ7RUFrQ0ksVUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsdUJBQUE7QzVENmtNSDtBNER0a01EO0VBQ0UsbUJBQUE7RUFDQSxVQUFBO0VBQ0EsV0FBQTtFQUNBLGFBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7RUFDQSxxQkFBQTtFQUNBLFlBQUE7RUFDQSxtQkFBQTtFQUNBLDBDQUFBO0M1RHdrTUQ7QTREdmtNQztFQUNFLGtCQUFBO0M1RHlrTUg7QTREaGlNRDtFQWhDRTs7OztJQUtJLFlBQUE7SUFDQSxhQUFBO0lBQ0Esa0JBQUE7SUFDQSxnQkFBQTtHNURra01IO0U0RDFrTUQ7O0lBWUksbUJBQUE7RzVEa2tNSDtFNEQ5a01EOztJQWdCSSxvQkFBQTtHNURra01IO0U0RDdqTUQ7SUFDRSxVQUFBO0lBQ0EsV0FBQTtJQUNBLHFCQUFBO0c1RCtqTUQ7RTREM2pNRDtJQUNFLGFBQUE7RzVENmpNRDtDQUNGO0E2RDN6TUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQUVFLGFBQUE7RUFDQSxlQUFBO0M3RHkxTUg7QTZEdjFNQzs7Ozs7Ozs7Ozs7Ozs7O0VBQ0UsWUFBQTtDN0R1Mk1IO0FpQy8yTUQ7RTZCUkUsZUFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7QzlEMDNNRDtBaUNqM01EO0VBQ0Usd0JBQUE7Q2pDbTNNRDtBaUNqM01EO0VBQ0UsdUJBQUE7Q2pDbTNNRDtBaUMzMk1EO0VBQ0UseUJBQUE7Q2pDNjJNRDtBaUMzMk1EO0VBQ0UsMEJBQUE7Q2pDNjJNRDtBaUMzMk1EO0VBQ0UsbUJBQUE7Q2pDNjJNRDtBaUMzMk1EO0U4QnpCRSxZQUFBO0VBQ0EsbUJBQUE7RUFDQSxrQkFBQTtFQUNBLDhCQUFBO0VBQ0EsVUFBQTtDL0R1NE1EO0FpQ3oyTUQ7RUFDRSx5QkFBQTtDakMyMk1EO0FpQ3AyTUQ7RUFDRSxnQkFBQTtDakNzMk1EO0FnRXY0TUQ7RUFDRSxvQkFBQTtDaEV5NE1EO0FnRW40TUQ7Ozs7RUNkRSx5QkFBQTtDakV1NU1EO0FnRWw0TUQ7Ozs7Ozs7Ozs7OztFQVlFLHlCQUFBO0NoRW80TUQ7QWdFNzNNRDtFQTZJQTtJQzdMRSwwQkFBQTtHakVpN01DO0VpRWg3TUQ7SUFBVSwwQkFBQTtHakVtN01UO0VpRWw3TUQ7SUFBVSw4QkFBQTtHakVxN01UO0VpRXA3TUQ7O0lBQ1UsK0JBQUE7R2pFdTdNVDtDQUNGO0FnRXY0TUQ7RUF3SUE7SUExSUksMEJBQUE7R2hFNjRNRDtDQUNGO0FnRXY0TUQ7RUFtSUE7SUFySUksMkJBQUE7R2hFNjRNRDtDQUNGO0FnRXY0TUQ7RUE4SEE7SUFoSUksaUNBQUE7R2hFNjRNRDtDQUNGO0FnRXQ0TUQ7RUF3SEE7SUM3TEUsMEJBQUE7R2pFKzhNQztFaUU5OE1EO0lBQVUsMEJBQUE7R2pFaTlNVDtFaUVoOU1EO0lBQVUsOEJBQUE7R2pFbTlNVDtFaUVsOU1EOztJQUNVLCtCQUFBO0dqRXE5TVQ7Q0FDRjtBZ0VoNU1EO0VBbUhBO0lBckhJLDBCQUFBO0doRXM1TUQ7Q0FDRjtBZ0VoNU1EO0VBOEdBO0lBaEhJLDJCQUFBO0doRXM1TUQ7Q0FDRjtBZ0VoNU1EO0VBeUdBO0lBM0dJLGlDQUFBO0doRXM1TUQ7Q0FDRjtBZ0UvNE1EO0VBbUdBO0lDN0xFLDBCQUFBO0dqRTYrTUM7RWlFNStNRDtJQUFVLDBCQUFBO0dqRSsrTVQ7RWlFOStNRDtJQUFVLDhCQUFBO0dqRWkvTVQ7RWlFaC9NRDs7SUFDVSwrQkFBQTtHakVtL01UO0NBQ0Y7QWdFejVNRDtFQThGQTtJQWhHSSwwQkFBQTtHaEUrNU1EO0NBQ0Y7QWdFejVNRDtFQXlGQTtJQTNGSSwyQkFBQTtHaEUrNU1EO0NBQ0Y7QWdFejVNRDtFQW9GQTtJQXRGSSxpQ0FBQTtHaEUrNU1EO0NBQ0Y7QWdFeDVNRDtFQThFQTtJQzdMRSwwQkFBQTtHakUyZ05DO0VpRTFnTkQ7SUFBVSwwQkFBQTtHakU2Z05UO0VpRTVnTkQ7SUFBVSw4QkFBQTtHakUrZ05UO0VpRTlnTkQ7O0lBQ1UsK0JBQUE7R2pFaWhOVDtDQUNGO0FnRWw2TUQ7RUF5RUE7SUEzRUksMEJBQUE7R2hFdzZNRDtDQUNGO0FnRWw2TUQ7RUFvRUE7SUF0RUksMkJBQUE7R2hFdzZNRDtDQUNGO0FnRWw2TUQ7RUErREE7SUFqRUksaUNBQUE7R2hFdzZNRDtDQUNGO0FnRWo2TUQ7RUF5REE7SUNyTEUseUJBQUE7R2pFaWlOQztDQUNGO0FnRWo2TUQ7RUFvREE7SUNyTEUseUJBQUE7R2pFc2lOQztDQUNGO0FnRWo2TUQ7RUErQ0E7SUNyTEUseUJBQUE7R2pFMmlOQztDQUNGO0FnRWo2TUQ7RUEwQ0E7SUNyTEUseUJBQUE7R2pFZ2pOQztDQUNGO0FnRTk1TUQ7RUNuSkUseUJBQUE7Q2pFb2pORDtBZ0UzNU1EO0VBNEJBO0lDN0xFLDBCQUFBO0dqRWdrTkM7RWlFL2pORDtJQUFVLDBCQUFBO0dqRWtrTlQ7RWlFamtORDtJQUFVLDhCQUFBO0dqRW9rTlQ7RWlFbmtORDs7SUFDVSwrQkFBQTtHakVza05UO0NBQ0Y7QWdFejZNRDtFQUNFLHlCQUFBO0NoRTI2TUQ7QWdFdDZNRDtFQXFCQTtJQXZCSSwwQkFBQTtHaEU0Nk1EO0NBQ0Y7QWdFMTZNRDtFQUNFLHlCQUFBO0NoRTQ2TUQ7QWdFdjZNRDtFQWNBO0lBaEJJLDJCQUFBO0doRTY2TUQ7Q0FDRjtBZ0UzNk1EO0VBQ0UseUJBQUE7Q2hFNjZNRDtBZ0V4Nk1EO0VBT0E7SUFUSSxpQ0FBQTtHaEU4Nk1EO0NBQ0Y7QWdFdjZNRDtFQUNBO0lDckxFLHlCQUFBO0dqRStsTkM7Q0FDRiIsImZpbGUiOiJib290c3RyYXAuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBCb290c3RyYXAgdjMuMy41IChodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbSlcbiAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLlxuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqL1xuLyohIG5vcm1hbGl6ZS5jc3MgdjMuMC4zIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcyAqL1xuaHRtbCB7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xuICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xufVxuYm9keSB7XG4gIG1hcmdpbjogMDtcbn1cbmFydGljbGUsXG5hc2lkZSxcbmRldGFpbHMsXG5maWdjYXB0aW9uLFxuZmlndXJlLFxuZm9vdGVyLFxuaGVhZGVyLFxuaGdyb3VwLFxubWFpbixcbm1lbnUsXG5uYXYsXG5zZWN0aW9uLFxuc3VtbWFyeSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuYXVkaW8sXG5jYW52YXMsXG5wcm9ncmVzcyxcbnZpZGVvIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG5hdWRpbzpub3QoW2NvbnRyb2xzXSkge1xuICBkaXNwbGF5OiBub25lO1xuICBoZWlnaHQ6IDA7XG59XG5baGlkZGVuXSxcbnRlbXBsYXRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbmEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbmE6YWN0aXZlLFxuYTpob3ZlciB7XG4gIG91dGxpbmU6IDA7XG59XG5hYmJyW3RpdGxlXSB7XG4gIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQ7XG59XG5iLFxuc3Ryb25nIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5kZm4ge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5oMSB7XG4gIGZvbnQtc2l6ZTogMmVtO1xuICBtYXJnaW46IDAuNjdlbSAwO1xufVxubWFyayB7XG4gIGJhY2tncm91bmQ6ICNmZjA7XG4gIGNvbG9yOiAjMDAwO1xufVxuc21hbGwge1xuICBmb250LXNpemU6IDgwJTtcbn1cbnN1YixcbnN1cCB7XG4gIGZvbnQtc2l6ZTogNzUlO1xuICBsaW5lLWhlaWdodDogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cbnN1YiB7XG4gIGJvdHRvbTogLTAuMjVlbTtcbn1cbmltZyB7XG4gIGJvcmRlcjogMDtcbn1cbnN2Zzpub3QoOnJvb3QpIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMWVtIDQwcHg7XG59XG5ociB7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICBoZWlnaHQ6IDA7XG59XG5wcmUge1xuICBvdmVyZmxvdzogYXV0bztcbn1cbmNvZGUsXG5rYmQsXG5wcmUsXG5zYW1wIHtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSwgbW9ub3NwYWNlO1xuICBmb250LXNpemU6IDFlbTtcbn1cbmJ1dHRvbixcbmlucHV0LFxub3B0Z3JvdXAsXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIGNvbG9yOiBpbmhlcml0O1xuICBmb250OiBpbmhlcml0O1xuICBtYXJnaW46IDA7XG59XG5idXR0b24ge1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cbmJ1dHRvbixcbnNlbGVjdCB7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuYnV0dG9uLFxuaHRtbCBpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLFxuaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5idXR0b25bZGlzYWJsZWRdLFxuaHRtbCBpbnB1dFtkaXNhYmxlZF0ge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5pbnB1dDo6LW1vei1mb2N1cy1pbm5lciB7XG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDtcbn1cbmlucHV0IHtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbmlucHV0W3R5cGU9XCJyYWRpb1wiXSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDA7XG59XG5pbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gIGhlaWdodDogYXV0bztcbn1cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG59XG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLFxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cbmZpZWxkc2V0IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgbWFyZ2luOiAwIDJweDtcbiAgcGFkZGluZzogMC4zNWVtIDAuNjI1ZW0gMC43NWVtO1xufVxubGVnZW5kIHtcbiAgYm9yZGVyOiAwO1xuICBwYWRkaW5nOiAwO1xufVxudGV4dGFyZWEge1xuICBvdmVyZmxvdzogYXV0bztcbn1cbm9wdGdyb3VwIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xufVxudGQsXG50aCB7XG4gIHBhZGRpbmc6IDA7XG59XG4vKiEgU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vaDVicC9odG1sNS1ib2lsZXJwbGF0ZS9ibG9iL21hc3Rlci9zcmMvY3NzL21haW4uY3NzICovXG5AbWVkaWEgcHJpbnQge1xuICAqLFxuICAqOmJlZm9yZSxcbiAgKjphZnRlciB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICBjb2xvcjogIzAwMCAhaW1wb3J0YW50O1xuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICB9XG4gIGEsXG4gIGE6dmlzaXRlZCB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cbiAgYVtocmVmXTphZnRlciB7XG4gICAgY29udGVudDogXCIgKFwiIGF0dHIoaHJlZikgXCIpXCI7XG4gIH1cbiAgYWJiclt0aXRsZV06YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIChcIiBhdHRyKHRpdGxlKSBcIilcIjtcbiAgfVxuICBhW2hyZWZePVwiI1wiXTphZnRlcixcbiAgYVtocmVmXj1cImphdmFzY3JpcHQ6XCJdOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIlwiO1xuICB9XG4gIHByZSxcbiAgYmxvY2txdW90ZSB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTtcbiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XG4gIH1cbiAgdGhlYWQge1xuICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDtcbiAgfVxuICB0cixcbiAgaW1nIHtcbiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XG4gIH1cbiAgaW1nIHtcbiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgfVxuICBwLFxuICBoMixcbiAgaDMge1xuICAgIG9ycGhhbnM6IDM7XG4gICAgd2lkb3dzOiAzO1xuICB9XG4gIGgyLFxuICBoMyB7XG4gICAgcGFnZS1icmVhay1hZnRlcjogYXZvaWQ7XG4gIH1cbiAgLm5hdmJhciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAuYnRuID4gLmNhcmV0LFxuICAuZHJvcHVwID4gLmJ0biA+IC5jYXJldCB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogIzAwMCAhaW1wb3J0YW50O1xuICB9XG4gIC5sYWJlbCB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcbiAgfVxuICAudGFibGUge1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UgIWltcG9ydGFudDtcbiAgfVxuICAudGFibGUgdGQsXG4gIC50YWJsZSB0aCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xuICB9XG4gIC50YWJsZS1ib3JkZXJlZCB0aCxcbiAgLnRhYmxlLWJvcmRlcmVkIHRkIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0dseXBoaWNvbnMgSGFsZmxpbmdzJztcbiAgc3JjOiB1cmwoJy4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuZW90Jyk7XG4gIHNyYzogdXJsKCcuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLmVvdD8jaWVmaXgnKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksIHVybCgnLi4vZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmMicpIGZvcm1hdCgnd29mZjInKSwgdXJsKCcuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwgdXJsKCcuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKSwgdXJsKCcuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnN2ZyNnbHlwaGljb25zX2hhbGZsaW5nc3JlZ3VsYXInKSBmb3JtYXQoJ3N2ZycpO1xufVxuLmdseXBoaWNvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAxcHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1mYW1pbHk6ICdHbHlwaGljb25zIEhhbGZsaW5ncyc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xufVxuLmdseXBoaWNvbi1hc3RlcmlzazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMmFcIjtcbn1cbi5nbHlwaGljb24tcGx1czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMmJcIjtcbn1cbi5nbHlwaGljb24tZXVybzpiZWZvcmUsXG4uZ2x5cGhpY29uLWV1cjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjBhY1wiO1xufVxuLmdseXBoaWNvbi1taW51czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjIxMlwiO1xufVxuLmdseXBoaWNvbi1jbG91ZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjYwMVwiO1xufVxuLmdseXBoaWNvbi1lbnZlbG9wZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjcwOVwiO1xufVxuLmdseXBoaWNvbi1wZW5jaWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDI3MGZcIjtcbn1cbi5nbHlwaGljb24tZ2xhc3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDFcIjtcbn1cbi5nbHlwaGljb24tbXVzaWM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDJcIjtcbn1cbi5nbHlwaGljb24tc2VhcmNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDAzXCI7XG59XG4uZ2x5cGhpY29uLWhlYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDA1XCI7XG59XG4uZ2x5cGhpY29uLXN0YXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDZcIjtcbn1cbi5nbHlwaGljb24tc3Rhci1lbXB0eTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAwN1wiO1xufVxuLmdseXBoaWNvbi11c2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDA4XCI7XG59XG4uZ2x5cGhpY29uLWZpbG06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDlcIjtcbn1cbi5nbHlwaGljb24tdGgtbGFyZ2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTBcIjtcbn1cbi5nbHlwaGljb24tdGg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTFcIjtcbn1cbi5nbHlwaGljb24tdGgtbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxMlwiO1xufVxuLmdseXBoaWNvbi1vazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxM1wiO1xufVxuLmdseXBoaWNvbi1yZW1vdmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTRcIjtcbn1cbi5nbHlwaGljb24tem9vbS1pbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxNVwiO1xufVxuLmdseXBoaWNvbi16b29tLW91dDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxNlwiO1xufVxuLmdseXBoaWNvbi1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTdcIjtcbn1cbi5nbHlwaGljb24tc2lnbmFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE4XCI7XG59XG4uZ2x5cGhpY29uLWNvZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxOVwiO1xufVxuLmdseXBoaWNvbi10cmFzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyMFwiO1xufVxuLmdseXBoaWNvbi1ob21lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDIxXCI7XG59XG4uZ2x5cGhpY29uLWZpbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjJcIjtcbn1cbi5nbHlwaGljb24tdGltZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyM1wiO1xufVxuLmdseXBoaWNvbi1yb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI0XCI7XG59XG4uZ2x5cGhpY29uLWRvd25sb2FkLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyNVwiO1xufVxuLmdseXBoaWNvbi1kb3dubG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyNlwiO1xufVxuLmdseXBoaWNvbi11cGxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjdcIjtcbn1cbi5nbHlwaGljb24taW5ib3g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjhcIjtcbn1cbi5nbHlwaGljb24tcGxheS1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjlcIjtcbn1cbi5nbHlwaGljb24tcmVwZWF0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDMwXCI7XG59XG4uZ2x5cGhpY29uLXJlZnJlc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzFcIjtcbn1cbi5nbHlwaGljb24tbGlzdC1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzJcIjtcbn1cbi5nbHlwaGljb24tbG9jazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzM1wiO1xufVxuLmdseXBoaWNvbi1mbGFnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDM0XCI7XG59XG4uZ2x5cGhpY29uLWhlYWRwaG9uZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzVcIjtcbn1cbi5nbHlwaGljb24tdm9sdW1lLW9mZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzNlwiO1xufVxuLmdseXBoaWNvbi12b2x1bWUtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzN1wiO1xufVxuLmdseXBoaWNvbi12b2x1bWUtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzhcIjtcbn1cbi5nbHlwaGljb24tcXJjb2RlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDM5XCI7XG59XG4uZ2x5cGhpY29uLWJhcmNvZGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDBcIjtcbn1cbi5nbHlwaGljb24tdGFnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQxXCI7XG59XG4uZ2x5cGhpY29uLXRhZ3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDJcIjtcbn1cbi5nbHlwaGljb24tYm9vazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0M1wiO1xufVxuLmdseXBoaWNvbi1ib29rbWFyazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0NFwiO1xufVxuLmdseXBoaWNvbi1wcmludDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0NVwiO1xufVxuLmdseXBoaWNvbi1jYW1lcmE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDZcIjtcbn1cbi5nbHlwaGljb24tZm9udDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0N1wiO1xufVxuLmdseXBoaWNvbi1ib2xkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQ4XCI7XG59XG4uZ2x5cGhpY29uLWl0YWxpYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0OVwiO1xufVxuLmdseXBoaWNvbi10ZXh0LWhlaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1MFwiO1xufVxuLmdseXBoaWNvbi10ZXh0LXdpZHRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDUxXCI7XG59XG4uZ2x5cGhpY29uLWFsaWduLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNTJcIjtcbn1cbi5nbHlwaGljb24tYWxpZ24tY2VudGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDUzXCI7XG59XG4uZ2x5cGhpY29uLWFsaWduLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDU0XCI7XG59XG4uZ2x5cGhpY29uLWFsaWduLWp1c3RpZnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNTVcIjtcbn1cbi5nbHlwaGljb24tbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1NlwiO1xufVxuLmdseXBoaWNvbi1pbmRlbnQtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1N1wiO1xufVxuLmdseXBoaWNvbi1pbmRlbnQtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNThcIjtcbn1cbi5nbHlwaGljb24tZmFjZXRpbWUtdmlkZW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNTlcIjtcbn1cbi5nbHlwaGljb24tcGljdHVyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2MFwiO1xufVxuLmdseXBoaWNvbi1tYXAtbWFya2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDYyXCI7XG59XG4uZ2x5cGhpY29uLWFkanVzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2M1wiO1xufVxuLmdseXBoaWNvbi10aW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY0XCI7XG59XG4uZ2x5cGhpY29uLWVkaXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjVcIjtcbn1cbi5nbHlwaGljb24tc2hhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjZcIjtcbn1cbi5nbHlwaGljb24tY2hlY2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjdcIjtcbn1cbi5nbHlwaGljb24tbW92ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2OFwiO1xufVxuLmdseXBoaWNvbi1zdGVwLWJhY2t3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY5XCI7XG59XG4uZ2x5cGhpY29uLWZhc3QtYmFja3dhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzBcIjtcbn1cbi5nbHlwaGljb24tYmFja3dhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzFcIjtcbn1cbi5nbHlwaGljb24tcGxheTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3MlwiO1xufVxuLmdseXBoaWNvbi1wYXVzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3M1wiO1xufVxuLmdseXBoaWNvbi1zdG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDc0XCI7XG59XG4uZ2x5cGhpY29uLWZvcndhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzVcIjtcbn1cbi5nbHlwaGljb24tZmFzdC1mb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDc2XCI7XG59XG4uZ2x5cGhpY29uLXN0ZXAtZm9yd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3N1wiO1xufVxuLmdseXBoaWNvbi1lamVjdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3OFwiO1xufVxuLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzlcIjtcbn1cbi5nbHlwaGljb24tY2hldnJvbi1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4MFwiO1xufVxuLmdseXBoaWNvbi1wbHVzLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODFcIjtcbn1cbi5nbHlwaGljb24tbWludXMtc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4MlwiO1xufVxuLmdseXBoaWNvbi1yZW1vdmUtc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4M1wiO1xufVxuLmdseXBoaWNvbi1vay1zaWduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDg0XCI7XG59XG4uZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODVcIjtcbn1cbi5nbHlwaGljb24taW5mby1zaWduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDg2XCI7XG59XG4uZ2x5cGhpY29uLXNjcmVlbnNob3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODdcIjtcbn1cbi5nbHlwaGljb24tcmVtb3ZlLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4OFwiO1xufVxuLmdseXBoaWNvbi1vay1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODlcIjtcbn1cbi5nbHlwaGljb24tYmFuLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5MFwiO1xufVxuLmdseXBoaWNvbi1hcnJvdy1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDkxXCI7XG59XG4uZ2x5cGhpY29uLWFycm93LXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDkyXCI7XG59XG4uZ2x5cGhpY29uLWFycm93LXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDkzXCI7XG59XG4uZ2x5cGhpY29uLWFycm93LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTRcIjtcbn1cbi5nbHlwaGljb24tc2hhcmUtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDk1XCI7XG59XG4uZ2x5cGhpY29uLXJlc2l6ZS1mdWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDk2XCI7XG59XG4uZ2x5cGhpY29uLXJlc2l6ZS1zbWFsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5N1wiO1xufVxuLmdseXBoaWNvbi1leGNsYW1hdGlvbi1zaWduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTAxXCI7XG59XG4uZ2x5cGhpY29uLWdpZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDJcIjtcbn1cbi5nbHlwaGljb24tbGVhZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwM1wiO1xufVxuLmdseXBoaWNvbi1maXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTA0XCI7XG59XG4uZ2x5cGhpY29uLWV5ZS1vcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTA1XCI7XG59XG4uZ2x5cGhpY29uLWV5ZS1jbG9zZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwNlwiO1xufVxuLmdseXBoaWNvbi13YXJuaW5nLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDdcIjtcbn1cbi5nbHlwaGljb24tcGxhbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDhcIjtcbn1cbi5nbHlwaGljb24tY2FsZW5kYXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDlcIjtcbn1cbi5nbHlwaGljb24tcmFuZG9tOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTEwXCI7XG59XG4uZ2x5cGhpY29uLWNvbW1lbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTFcIjtcbn1cbi5nbHlwaGljb24tbWFnbmV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTEyXCI7XG59XG4uZ2x5cGhpY29uLWNoZXZyb24tdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTNcIjtcbn1cbi5nbHlwaGljb24tY2hldnJvbi1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTE0XCI7XG59XG4uZ2x5cGhpY29uLXJldHdlZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTVcIjtcbn1cbi5nbHlwaGljb24tc2hvcHBpbmctY2FydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExNlwiO1xufVxuLmdseXBoaWNvbi1mb2xkZXItY2xvc2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTdcIjtcbn1cbi5nbHlwaGljb24tZm9sZGVyLW9wZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMThcIjtcbn1cbi5nbHlwaGljb24tcmVzaXplLXZlcnRpY2FsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTE5XCI7XG59XG4uZ2x5cGhpY29uLXJlc2l6ZS1ob3Jpem9udGFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTIwXCI7XG59XG4uZ2x5cGhpY29uLWhkZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyMVwiO1xufVxuLmdseXBoaWNvbi1idWxsaG9ybjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyMlwiO1xufVxuLmdseXBoaWNvbi1iZWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTIzXCI7XG59XG4uZ2x5cGhpY29uLWNlcnRpZmljYXRlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI0XCI7XG59XG4uZ2x5cGhpY29uLXRodW1icy11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyNVwiO1xufVxuLmdseXBoaWNvbi10aHVtYnMtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyNlwiO1xufVxuLmdseXBoaWNvbi1oYW5kLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI3XCI7XG59XG4uZ2x5cGhpY29uLWhhbmQtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyOFwiO1xufVxuLmdseXBoaWNvbi1oYW5kLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI5XCI7XG59XG4uZ2x5cGhpY29uLWhhbmQtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzMFwiO1xufVxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzFcIjtcbn1cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzJcIjtcbn1cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTMzXCI7XG59XG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTM0XCI7XG59XG4uZ2x5cGhpY29uLWdsb2JlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTM1XCI7XG59XG4uZ2x5cGhpY29uLXdyZW5jaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzNlwiO1xufVxuLmdseXBoaWNvbi10YXNrczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzN1wiO1xufVxuLmdseXBoaWNvbi1maWx0ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzhcIjtcbn1cbi5nbHlwaGljb24tYnJpZWZjYXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTM5XCI7XG59XG4uZ2x5cGhpY29uLWZ1bGxzY3JlZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNDBcIjtcbn1cbi5nbHlwaGljb24tZGFzaGJvYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQxXCI7XG59XG4uZ2x5cGhpY29uLXBhcGVyY2xpcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0MlwiO1xufVxuLmdseXBoaWNvbi1oZWFydC1lbXB0eTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0M1wiO1xufVxuLmdseXBoaWNvbi1saW5rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQ0XCI7XG59XG4uZ2x5cGhpY29uLXBob25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQ1XCI7XG59XG4uZ2x5cGhpY29uLXB1c2hwaW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNDZcIjtcbn1cbi5nbHlwaGljb24tdXNkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQ4XCI7XG59XG4uZ2x5cGhpY29uLWdicDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0OVwiO1xufVxuLmdseXBoaWNvbi1zb3J0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTUwXCI7XG59XG4uZ2x5cGhpY29uLXNvcnQtYnktYWxwaGFiZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTFcIjtcbn1cbi5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldC1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTJcIjtcbn1cbi5nbHlwaGljb24tc29ydC1ieS1vcmRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1M1wiO1xufVxuLmdseXBoaWNvbi1zb3J0LWJ5LW9yZGVyLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1NFwiO1xufVxuLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTVcIjtcbn1cbi5nbHlwaGljb24tc29ydC1ieS1hdHRyaWJ1dGVzLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1NlwiO1xufVxuLmdseXBoaWNvbi11bmNoZWNrZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTdcIjtcbn1cbi5nbHlwaGljb24tZXhwYW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU4XCI7XG59XG4uZ2x5cGhpY29uLWNvbGxhcHNlLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTlcIjtcbn1cbi5nbHlwaGljb24tY29sbGFwc2UtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjBcIjtcbn1cbi5nbHlwaGljb24tbG9nLWluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTYxXCI7XG59XG4uZ2x5cGhpY29uLWZsYXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTYyXCI7XG59XG4uZ2x5cGhpY29uLWxvZy1vdXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjNcIjtcbn1cbi5nbHlwaGljb24tbmV3LXdpbmRvdzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2NFwiO1xufVxuLmdseXBoaWNvbi1yZWNvcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjVcIjtcbn1cbi5nbHlwaGljb24tc2F2ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2NlwiO1xufVxuLmdseXBoaWNvbi1vcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTY3XCI7XG59XG4uZ2x5cGhpY29uLXNhdmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTY4XCI7XG59XG4uZ2x5cGhpY29uLWltcG9ydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2OVwiO1xufVxuLmdseXBoaWNvbi1leHBvcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzBcIjtcbn1cbi5nbHlwaGljb24tc2VuZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3MVwiO1xufVxuLmdseXBoaWNvbi1mbG9wcHktZGlzazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3MlwiO1xufVxuLmdseXBoaWNvbi1mbG9wcHktc2F2ZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzNcIjtcbn1cbi5nbHlwaGljb24tZmxvcHB5LXJlbW92ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3NFwiO1xufVxuLmdseXBoaWNvbi1mbG9wcHktc2F2ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3NVwiO1xufVxuLmdseXBoaWNvbi1mbG9wcHktb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3NlwiO1xufVxuLmdseXBoaWNvbi1jcmVkaXQtY2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3N1wiO1xufVxuLmdseXBoaWNvbi10cmFuc2ZlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3OFwiO1xufVxuLmdseXBoaWNvbi1jdXRsZXJ5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc5XCI7XG59XG4uZ2x5cGhpY29uLWhlYWRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4MFwiO1xufVxuLmdseXBoaWNvbi1jb21wcmVzc2VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTgxXCI7XG59XG4uZ2x5cGhpY29uLWVhcnBob25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTgyXCI7XG59XG4uZ2x5cGhpY29uLXBob25lLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4M1wiO1xufVxuLmdseXBoaWNvbi10b3dlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4NFwiO1xufVxuLmdseXBoaWNvbi1zdGF0czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4NVwiO1xufVxuLmdseXBoaWNvbi1zZC12aWRlbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4NlwiO1xufVxuLmdseXBoaWNvbi1oZC12aWRlbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4N1wiO1xufVxuLmdseXBoaWNvbi1zdWJ0aXRsZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODhcIjtcbn1cbi5nbHlwaGljb24tc291bmQtc3RlcmVvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTg5XCI7XG59XG4uZ2x5cGhpY29uLXNvdW5kLWRvbGJ5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTkwXCI7XG59XG4uZ2x5cGhpY29uLXNvdW5kLTUtMTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5MVwiO1xufVxuLmdseXBoaWNvbi1zb3VuZC02LTE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOTJcIjtcbn1cbi5nbHlwaGljb24tc291bmQtNy0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTkzXCI7XG59XG4uZ2x5cGhpY29uLWNvcHlyaWdodC1tYXJrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTk0XCI7XG59XG4uZ2x5cGhpY29uLXJlZ2lzdHJhdGlvbi1tYXJrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTk1XCI7XG59XG4uZ2x5cGhpY29uLWNsb3VkLWRvd25sb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTk3XCI7XG59XG4uZ2x5cGhpY29uLWNsb3VkLXVwbG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5OFwiO1xufVxuLmdseXBoaWNvbi10cmVlLWNvbmlmZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOTlcIjtcbn1cbi5nbHlwaGljb24tdHJlZS1kZWNpZHVvdXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDBcIjtcbn1cbi5nbHlwaGljb24tY2Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDFcIjtcbn1cbi5nbHlwaGljb24tc2F2ZS1maWxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjAyXCI7XG59XG4uZ2x5cGhpY29uLW9wZW4tZmlsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwM1wiO1xufVxuLmdseXBoaWNvbi1sZXZlbC11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwNFwiO1xufVxuLmdseXBoaWNvbi1jb3B5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjA1XCI7XG59XG4uZ2x5cGhpY29uLXBhc3RlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjA2XCI7XG59XG4uZ2x5cGhpY29uLWFsZXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjA5XCI7XG59XG4uZ2x5cGhpY29uLWVxdWFsaXplcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxMFwiO1xufVxuLmdseXBoaWNvbi1raW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjExXCI7XG59XG4uZ2x5cGhpY29uLXF1ZWVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjEyXCI7XG59XG4uZ2x5cGhpY29uLXBhd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMTNcIjtcbn1cbi5nbHlwaGljb24tYmlzaG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjE0XCI7XG59XG4uZ2x5cGhpY29uLWtuaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxNVwiO1xufVxuLmdseXBoaWNvbi1iYWJ5LWZvcm11bGE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMTZcIjtcbn1cbi5nbHlwaGljb24tdGVudDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjZmYVwiO1xufVxuLmdseXBoaWNvbi1ibGFja2JvYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjE4XCI7XG59XG4uZ2x5cGhpY29uLWJlZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxOVwiO1xufVxuLmdseXBoaWNvbi1hcHBsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjhmZlwiO1xufVxuLmdseXBoaWNvbi1lcmFzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIyMVwiO1xufVxuLmdseXBoaWNvbi1ob3VyZ2xhc3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDIzMWJcIjtcbn1cbi5nbHlwaGljb24tbGFtcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIyM1wiO1xufVxuLmdseXBoaWNvbi1kdXBsaWNhdGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjRcIjtcbn1cbi5nbHlwaGljb24tcGlnZ3ktYmFuazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIyNVwiO1xufVxuLmdseXBoaWNvbi1zY2lzc29yczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIyNlwiO1xufVxuLmdseXBoaWNvbi1iaXRjb2luOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI3XCI7XG59XG4uZ2x5cGhpY29uLWJ0YzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIyN1wiO1xufVxuLmdseXBoaWNvbi14YnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjdcIjtcbn1cbi5nbHlwaGljb24teWVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwwMGE1XCI7XG59XG4uZ2x5cGhpY29uLWpweTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMDBhNVwiO1xufVxuLmdseXBoaWNvbi1ydWJsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjBiZFwiO1xufVxuLmdseXBoaWNvbi1ydWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDIwYmRcIjtcbn1cbi5nbHlwaGljb24tc2NhbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzBcIjtcbn1cbi5nbHlwaGljb24taWNlLWxvbGx5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjMxXCI7XG59XG4uZ2x5cGhpY29uLWljZS1sb2xseS10YXN0ZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzJcIjtcbn1cbi5nbHlwaGljb24tZWR1Y2F0aW9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjMzXCI7XG59XG4uZ2x5cGhpY29uLW9wdGlvbi1ob3Jpem9udGFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjM0XCI7XG59XG4uZ2x5cGhpY29uLW9wdGlvbi12ZXJ0aWNhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzNVwiO1xufVxuLmdseXBoaWNvbi1tZW51LWhhbWJ1cmdlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzNlwiO1xufVxuLmdseXBoaWNvbi1tb2RhbC13aW5kb3c6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzdcIjtcbn1cbi5nbHlwaGljb24tb2lsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjM4XCI7XG59XG4uZ2x5cGhpY29uLWdyYWluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjM5XCI7XG59XG4uZ2x5cGhpY29uLXN1bmdsYXNzZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDBcIjtcbn1cbi5nbHlwaGljb24tdGV4dC1zaXplOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQxXCI7XG59XG4uZ2x5cGhpY29uLXRleHQtY29sb3I6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDJcIjtcbn1cbi5nbHlwaGljb24tdGV4dC1iYWNrZ3JvdW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQzXCI7XG59XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi10b3A6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDRcIjtcbn1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWJvdHRvbTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0NVwiO1xufVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24taG9yaXpvbnRhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0NlwiO1xufVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0N1wiO1xufVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tdmVydGljYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDhcIjtcbn1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQ5XCI7XG59XG4uZ2x5cGhpY29uLXRyaWFuZ2xlLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjUwXCI7XG59XG4uZ2x5cGhpY29uLXRyaWFuZ2xlLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTFcIjtcbn1cbi5nbHlwaGljb24tdHJpYW5nbGUtYm90dG9tOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjUyXCI7XG59XG4uZ2x5cGhpY29uLXRyaWFuZ2xlLXRvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1M1wiO1xufVxuLmdseXBoaWNvbi1jb25zb2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjU0XCI7XG59XG4uZ2x5cGhpY29uLXN1cGVyc2NyaXB0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjU1XCI7XG59XG4uZ2x5cGhpY29uLXN1YnNjcmlwdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1NlwiO1xufVxuLmdseXBoaWNvbi1tZW51LWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTdcIjtcbn1cbi5nbHlwaGljb24tbWVudS1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1OFwiO1xufVxuLmdseXBoaWNvbi1tZW51LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTlcIjtcbn1cbi5nbHlwaGljb24tbWVudS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI2MFwiO1xufVxuKiB7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuKjpiZWZvcmUsXG4qOmFmdGVyIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5odG1sIHtcbiAgZm9udC1zaXplOiAxMHB4O1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XG59XG5ib2R5IHtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5pbnB1dCxcbmJ1dHRvbixcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG59XG5hIHtcbiAgY29sb3I6ICMzMzdhYjc7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbmE6aG92ZXIsXG5hOmZvY3VzIHtcbiAgY29sb3I6ICMyMzUyN2M7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuYTpmb2N1cyB7XG4gIG91dGxpbmU6IHRoaW4gZG90dGVkO1xuICBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7XG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xufVxuZmlndXJlIHtcbiAgbWFyZ2luOiAwO1xufVxuaW1nIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5pbWctcmVzcG9uc2l2ZSxcbi50aHVtYm5haWwgPiBpbWcsXG4udGh1bWJuYWlsIGEgPiBpbWcsXG4uY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbSA+IGltZyxcbi5jYXJvdXNlbC1pbm5lciA+IC5pdGVtID4gYSA+IGltZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogYXV0bztcbn1cbi5pbWctcm91bmRlZCB7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbn1cbi5pbWctdGh1bWJuYWlsIHtcbiAgcGFkZGluZzogNHB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICAtby10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG4uaW1nLWNpcmNsZSB7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbn1cbmhyIHtcbiAgbWFyZ2luLXRvcDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgYm9yZGVyOiAwO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZWVlZTtcbn1cbi5zci1vbmx5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xuICBoZWlnaHQ6IDFweDtcbiAgbWFyZ2luOiAtMXB4O1xuICBwYWRkaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xuICBib3JkZXI6IDA7XG59XG4uc3Itb25seS1mb2N1c2FibGU6YWN0aXZlLFxuLnNyLW9ubHktZm9jdXNhYmxlOmZvY3VzIHtcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogYXV0bztcbiAgbWFyZ2luOiAwO1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgY2xpcDogYXV0bztcbn1cbltyb2xlPVwiYnV0dG9uXCJdIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2LFxuLmgxLFxuLmgyLFxuLmgzLFxuLmg0LFxuLmg1LFxuLmg2IHtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjE7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuaDEgc21hbGwsXG5oMiBzbWFsbCxcbmgzIHNtYWxsLFxuaDQgc21hbGwsXG5oNSBzbWFsbCxcbmg2IHNtYWxsLFxuLmgxIHNtYWxsLFxuLmgyIHNtYWxsLFxuLmgzIHNtYWxsLFxuLmg0IHNtYWxsLFxuLmg1IHNtYWxsLFxuLmg2IHNtYWxsLFxuaDEgLnNtYWxsLFxuaDIgLnNtYWxsLFxuaDMgLnNtYWxsLFxuaDQgLnNtYWxsLFxuaDUgLnNtYWxsLFxuaDYgLnNtYWxsLFxuLmgxIC5zbWFsbCxcbi5oMiAuc21hbGwsXG4uaDMgLnNtYWxsLFxuLmg0IC5zbWFsbCxcbi5oNSAuc21hbGwsXG4uaDYgLnNtYWxsIHtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiAjNzc3Nzc3O1xufVxuaDEsXG4uaDEsXG5oMixcbi5oMixcbmgzLFxuLmgzIHtcbiAgbWFyZ2luLXRvcDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbmgxIHNtYWxsLFxuLmgxIHNtYWxsLFxuaDIgc21hbGwsXG4uaDIgc21hbGwsXG5oMyBzbWFsbCxcbi5oMyBzbWFsbCxcbmgxIC5zbWFsbCxcbi5oMSAuc21hbGwsXG5oMiAuc21hbGwsXG4uaDIgLnNtYWxsLFxuaDMgLnNtYWxsLFxuLmgzIC5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogNjUlO1xufVxuaDQsXG4uaDQsXG5oNSxcbi5oNSxcbmg2LFxuLmg2IHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbmg0IHNtYWxsLFxuLmg0IHNtYWxsLFxuaDUgc21hbGwsXG4uaDUgc21hbGwsXG5oNiBzbWFsbCxcbi5oNiBzbWFsbCxcbmg0IC5zbWFsbCxcbi5oNCAuc21hbGwsXG5oNSAuc21hbGwsXG4uaDUgLnNtYWxsLFxuaDYgLnNtYWxsLFxuLmg2IC5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogNzUlO1xufVxuaDEsXG4uaDEge1xuICBmb250LXNpemU6IDM2cHg7XG59XG5oMixcbi5oMiB7XG4gIGZvbnQtc2l6ZTogMzBweDtcbn1cbmgzLFxuLmgzIHtcbiAgZm9udC1zaXplOiAyNHB4O1xufVxuaDQsXG4uaDQge1xuICBmb250LXNpemU6IDE4cHg7XG59XG5oNSxcbi5oNSB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbn1cbmg2LFxuLmg2IHtcbiAgZm9udC1zaXplOiAxMnB4O1xufVxucCB7XG4gIG1hcmdpbjogMCAwIDEwcHg7XG59XG4ubGVhZCB7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubGVhZCB7XG4gICAgZm9udC1zaXplOiAyMXB4O1xuICB9XG59XG5zbWFsbCxcbi5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogODUlO1xufVxubWFyayxcbi5tYXJrIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMztcbiAgcGFkZGluZzogLjJlbTtcbn1cbi50ZXh0LWxlZnQge1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLnRleHQtcmlnaHQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi50ZXh0LWNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi50ZXh0LWp1c3RpZnkge1xuICB0ZXh0LWFsaWduOiBqdXN0aWZ5O1xufVxuLnRleHQtbm93cmFwIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbi50ZXh0LWxvd2VyY2FzZSB7XG4gIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2U7XG59XG4udGV4dC11cHBlcmNhc2Uge1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuLnRleHQtY2FwaXRhbGl6ZSB7XG4gIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xufVxuLnRleHQtbXV0ZWQge1xuICBjb2xvcjogIzc3Nzc3Nztcbn1cbi50ZXh0LXByaW1hcnkge1xuICBjb2xvcjogIzMzN2FiNztcbn1cbmEudGV4dC1wcmltYXJ5OmhvdmVyLFxuYS50ZXh0LXByaW1hcnk6Zm9jdXMge1xuICBjb2xvcjogIzI4NjA5MDtcbn1cbi50ZXh0LXN1Y2Nlc3Mge1xuICBjb2xvcjogIzNjNzYzZDtcbn1cbmEudGV4dC1zdWNjZXNzOmhvdmVyLFxuYS50ZXh0LXN1Y2Nlc3M6Zm9jdXMge1xuICBjb2xvcjogIzJiNTQyYztcbn1cbi50ZXh0LWluZm8ge1xuICBjb2xvcjogIzMxNzA4Zjtcbn1cbmEudGV4dC1pbmZvOmhvdmVyLFxuYS50ZXh0LWluZm86Zm9jdXMge1xuICBjb2xvcjogIzI0NTI2OTtcbn1cbi50ZXh0LXdhcm5pbmcge1xuICBjb2xvcjogIzhhNmQzYjtcbn1cbmEudGV4dC13YXJuaW5nOmhvdmVyLFxuYS50ZXh0LXdhcm5pbmc6Zm9jdXMge1xuICBjb2xvcjogIzY2NTEyYztcbn1cbi50ZXh0LWRhbmdlciB7XG4gIGNvbG9yOiAjYTk0NDQyO1xufVxuYS50ZXh0LWRhbmdlcjpob3ZlcixcbmEudGV4dC1kYW5nZXI6Zm9jdXMge1xuICBjb2xvcjogIzg0MzUzNDtcbn1cbi5iZy1wcmltYXJ5IHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7XG59XG5hLmJnLXByaW1hcnk6aG92ZXIsXG5hLmJnLXByaW1hcnk6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjg2MDkwO1xufVxuLmJnLXN1Y2Nlc3Mge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZmMGQ4O1xufVxuYS5iZy1zdWNjZXNzOmhvdmVyLFxuYS5iZy1zdWNjZXNzOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2MxZTJiMztcbn1cbi5iZy1pbmZvIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5ZWRmNztcbn1cbmEuYmctaW5mbzpob3ZlcixcbmEuYmctaW5mbzpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNhZmQ5ZWU7XG59XG4uYmctd2FybmluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7XG59XG5hLmJnLXdhcm5pbmc6aG92ZXIsXG5hLmJnLXdhcm5pbmc6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdlY2I1O1xufVxuLmJnLWRhbmdlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMmRlZGU7XG59XG5hLmJnLWRhbmdlcjpob3ZlcixcbmEuYmctZGFuZ2VyOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U0YjliOTtcbn1cbi5wYWdlLWhlYWRlciB7XG4gIHBhZGRpbmctYm90dG9tOiA5cHg7XG4gIG1hcmdpbjogNDBweCAwIDIwcHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlZWVlO1xufVxudWwsXG5vbCB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG51bCB1bCxcbm9sIHVsLFxudWwgb2wsXG5vbCBvbCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4ubGlzdC11bnN0eWxlZCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbi5saXN0LWlubGluZSB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG59XG4ubGlzdC1pbmxpbmUgPiBsaSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZy1sZWZ0OiA1cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDVweDtcbn1cbmRsIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cbmR0LFxuZGQge1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mztcbn1cbmR0IHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5kZCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5kbC1ob3Jpem9udGFsIGR0IHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICB3aWR0aDogMTYwcHg7XG4gICAgY2xlYXI6IGxlZnQ7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG4gIC5kbC1ob3Jpem9udGFsIGRkIHtcbiAgICBtYXJnaW4tbGVmdDogMTgwcHg7XG4gIH1cbn1cbmFiYnJbdGl0bGVdLFxuYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXSB7XG4gIGN1cnNvcjogaGVscDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjNzc3Nzc3O1xufVxuLmluaXRpYWxpc20ge1xuICBmb250LXNpemU6IDkwJTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cbmJsb2NrcXVvdGUge1xuICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gIG1hcmdpbjogMCAwIDIwcHg7XG4gIGZvbnQtc2l6ZTogMTcuNXB4O1xuICBib3JkZXItbGVmdDogNXB4IHNvbGlkICNlZWVlZWU7XG59XG5ibG9ja3F1b3RlIHA6bGFzdC1jaGlsZCxcbmJsb2NrcXVvdGUgdWw6bGFzdC1jaGlsZCxcbmJsb2NrcXVvdGUgb2w6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5ibG9ja3F1b3RlIGZvb3RlcixcbmJsb2NrcXVvdGUgc21hbGwsXG5ibG9ja3F1b3RlIC5zbWFsbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDgwJTtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG4gIGNvbG9yOiAjNzc3Nzc3O1xufVxuYmxvY2txdW90ZSBmb290ZXI6YmVmb3JlLFxuYmxvY2txdW90ZSBzbWFsbDpiZWZvcmUsXG5ibG9ja3F1b3RlIC5zbWFsbDpiZWZvcmUge1xuICBjb250ZW50OiAnXFwyMDE0IFxcMDBBMCc7XG59XG4uYmxvY2txdW90ZS1yZXZlcnNlLFxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHtcbiAgcGFkZGluZy1yaWdodDogMTVweDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCAjZWVlZWVlO1xuICBib3JkZXItbGVmdDogMDtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG4uYmxvY2txdW90ZS1yZXZlcnNlIGZvb3RlcjpiZWZvcmUsXG5ibG9ja3F1b3RlLnB1bGwtcmlnaHQgZm9vdGVyOmJlZm9yZSxcbi5ibG9ja3F1b3RlLXJldmVyc2Ugc21hbGw6YmVmb3JlLFxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsOmJlZm9yZSxcbi5ibG9ja3F1b3RlLXJldmVyc2UgLnNtYWxsOmJlZm9yZSxcbmJsb2NrcXVvdGUucHVsbC1yaWdodCAuc21hbGw6YmVmb3JlIHtcbiAgY29udGVudDogJyc7XG59XG4uYmxvY2txdW90ZS1yZXZlcnNlIGZvb3RlcjphZnRlcixcbmJsb2NrcXVvdGUucHVsbC1yaWdodCBmb290ZXI6YWZ0ZXIsXG4uYmxvY2txdW90ZS1yZXZlcnNlIHNtYWxsOmFmdGVyLFxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsOmFmdGVyLFxuLmJsb2NrcXVvdGUtcmV2ZXJzZSAuc21hbGw6YWZ0ZXIsXG5ibG9ja3F1b3RlLnB1bGwtcmlnaHQgLnNtYWxsOmFmdGVyIHtcbiAgY29udGVudDogJ1xcMDBBMCBcXDIwMTQnO1xufVxuYWRkcmVzcyB7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG59XG5jb2RlLFxua2JkLFxucHJlLFxuc2FtcCB7XG4gIGZvbnQtZmFtaWx5OiBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG59XG5jb2RlIHtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgZm9udC1zaXplOiA5MCU7XG4gIGNvbG9yOiAjYzcyNTRlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmMmY0O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5rYmQge1xuICBwYWRkaW5nOiAycHggNHB4O1xuICBmb250LXNpemU6IDkwJTtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTtcbn1cbmtiZCBrYmQge1xuICBwYWRkaW5nOiAwO1xuICBmb250LXNpemU6IDEwMCU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBib3gtc2hhZG93OiBub25lO1xufVxucHJlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDkuNXB4O1xuICBtYXJnaW46IDAgMCAxMHB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cbnByZSBjb2RlIHtcbiAgcGFkZGluZzogMDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBjb2xvcjogaW5oZXJpdDtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5wcmUtc2Nyb2xsYWJsZSB7XG4gIG1heC1oZWlnaHQ6IDM0MHB4O1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG59XG4uY29udGFpbmVyIHtcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb250YWluZXIge1xuICAgIHdpZHRoOiA3NTBweDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5jb250YWluZXIge1xuICAgIHdpZHRoOiA5NzBweDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAuY29udGFpbmVyIHtcbiAgICB3aWR0aDogMTE3MHB4O1xuICB9XG59XG4uY29udGFpbmVyLWZsdWlkIHtcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuLnJvdyB7XG4gIG1hcmdpbi1sZWZ0OiAtMTVweDtcbiAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcbn1cbi5jb2wteHMtMSwgLmNvbC1zbS0xLCAuY29sLW1kLTEsIC5jb2wtbGctMSwgLmNvbC14cy0yLCAuY29sLXNtLTIsIC5jb2wtbWQtMiwgLmNvbC1sZy0yLCAuY29sLXhzLTMsIC5jb2wtc20tMywgLmNvbC1tZC0zLCAuY29sLWxnLTMsIC5jb2wteHMtNCwgLmNvbC1zbS00LCAuY29sLW1kLTQsIC5jb2wtbGctNCwgLmNvbC14cy01LCAuY29sLXNtLTUsIC5jb2wtbWQtNSwgLmNvbC1sZy01LCAuY29sLXhzLTYsIC5jb2wtc20tNiwgLmNvbC1tZC02LCAuY29sLWxnLTYsIC5jb2wteHMtNywgLmNvbC1zbS03LCAuY29sLW1kLTcsIC5jb2wtbGctNywgLmNvbC14cy04LCAuY29sLXNtLTgsIC5jb2wtbWQtOCwgLmNvbC1sZy04LCAuY29sLXhzLTksIC5jb2wtc20tOSwgLmNvbC1tZC05LCAuY29sLWxnLTksIC5jb2wteHMtMTAsIC5jb2wtc20tMTAsIC5jb2wtbWQtMTAsIC5jb2wtbGctMTAsIC5jb2wteHMtMTEsIC5jb2wtc20tMTEsIC5jb2wtbWQtMTEsIC5jb2wtbGctMTEsIC5jb2wteHMtMTIsIC5jb2wtc20tMTIsIC5jb2wtbWQtMTIsIC5jb2wtbGctMTIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1pbi1oZWlnaHQ6IDFweDtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuLmNvbC14cy0xLCAuY29sLXhzLTIsIC5jb2wteHMtMywgLmNvbC14cy00LCAuY29sLXhzLTUsIC5jb2wteHMtNiwgLmNvbC14cy03LCAuY29sLXhzLTgsIC5jb2wteHMtOSwgLmNvbC14cy0xMCwgLmNvbC14cy0xMSwgLmNvbC14cy0xMiB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLmNvbC14cy0xMiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmNvbC14cy0xMSB7XG4gIHdpZHRoOiA5MS42NjY2NjY2NyU7XG59XG4uY29sLXhzLTEwIHtcbiAgd2lkdGg6IDgzLjMzMzMzMzMzJTtcbn1cbi5jb2wteHMtOSB7XG4gIHdpZHRoOiA3NSU7XG59XG4uY29sLXhzLTgge1xuICB3aWR0aDogNjYuNjY2NjY2NjclO1xufVxuLmNvbC14cy03IHtcbiAgd2lkdGg6IDU4LjMzMzMzMzMzJTtcbn1cbi5jb2wteHMtNiB7XG4gIHdpZHRoOiA1MCU7XG59XG4uY29sLXhzLTUge1xuICB3aWR0aDogNDEuNjY2NjY2NjclO1xufVxuLmNvbC14cy00IHtcbiAgd2lkdGg6IDMzLjMzMzMzMzMzJTtcbn1cbi5jb2wteHMtMyB7XG4gIHdpZHRoOiAyNSU7XG59XG4uY29sLXhzLTIge1xuICB3aWR0aDogMTYuNjY2NjY2NjclO1xufVxuLmNvbC14cy0xIHtcbiAgd2lkdGg6IDguMzMzMzMzMzMlO1xufVxuLmNvbC14cy1wdWxsLTEyIHtcbiAgcmlnaHQ6IDEwMCU7XG59XG4uY29sLXhzLXB1bGwtMTEge1xuICByaWdodDogOTEuNjY2NjY2NjclO1xufVxuLmNvbC14cy1wdWxsLTEwIHtcbiAgcmlnaHQ6IDgzLjMzMzMzMzMzJTtcbn1cbi5jb2wteHMtcHVsbC05IHtcbiAgcmlnaHQ6IDc1JTtcbn1cbi5jb2wteHMtcHVsbC04IHtcbiAgcmlnaHQ6IDY2LjY2NjY2NjY3JTtcbn1cbi5jb2wteHMtcHVsbC03IHtcbiAgcmlnaHQ6IDU4LjMzMzMzMzMzJTtcbn1cbi5jb2wteHMtcHVsbC02IHtcbiAgcmlnaHQ6IDUwJTtcbn1cbi5jb2wteHMtcHVsbC01IHtcbiAgcmlnaHQ6IDQxLjY2NjY2NjY3JTtcbn1cbi5jb2wteHMtcHVsbC00IHtcbiAgcmlnaHQ6IDMzLjMzMzMzMzMzJTtcbn1cbi5jb2wteHMtcHVsbC0zIHtcbiAgcmlnaHQ6IDI1JTtcbn1cbi5jb2wteHMtcHVsbC0yIHtcbiAgcmlnaHQ6IDE2LjY2NjY2NjY3JTtcbn1cbi5jb2wteHMtcHVsbC0xIHtcbiAgcmlnaHQ6IDguMzMzMzMzMzMlO1xufVxuLmNvbC14cy1wdWxsLTAge1xuICByaWdodDogYXV0bztcbn1cbi5jb2wteHMtcHVzaC0xMiB7XG4gIGxlZnQ6IDEwMCU7XG59XG4uY29sLXhzLXB1c2gtMTEge1xuICBsZWZ0OiA5MS42NjY2NjY2NyU7XG59XG4uY29sLXhzLXB1c2gtMTAge1xuICBsZWZ0OiA4My4zMzMzMzMzMyU7XG59XG4uY29sLXhzLXB1c2gtOSB7XG4gIGxlZnQ6IDc1JTtcbn1cbi5jb2wteHMtcHVzaC04IHtcbiAgbGVmdDogNjYuNjY2NjY2NjclO1xufVxuLmNvbC14cy1wdXNoLTcge1xuICBsZWZ0OiA1OC4zMzMzMzMzMyU7XG59XG4uY29sLXhzLXB1c2gtNiB7XG4gIGxlZnQ6IDUwJTtcbn1cbi5jb2wteHMtcHVzaC01IHtcbiAgbGVmdDogNDEuNjY2NjY2NjclO1xufVxuLmNvbC14cy1wdXNoLTQge1xuICBsZWZ0OiAzMy4zMzMzMzMzMyU7XG59XG4uY29sLXhzLXB1c2gtMyB7XG4gIGxlZnQ6IDI1JTtcbn1cbi5jb2wteHMtcHVzaC0yIHtcbiAgbGVmdDogMTYuNjY2NjY2NjclO1xufVxuLmNvbC14cy1wdXNoLTEge1xuICBsZWZ0OiA4LjMzMzMzMzMzJTtcbn1cbi5jb2wteHMtcHVzaC0wIHtcbiAgbGVmdDogYXV0bztcbn1cbi5jb2wteHMtb2Zmc2V0LTEyIHtcbiAgbWFyZ2luLWxlZnQ6IDEwMCU7XG59XG4uY29sLXhzLW9mZnNldC0xMSB7XG4gIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NyU7XG59XG4uY29sLXhzLW9mZnNldC0xMCB7XG4gIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMyU7XG59XG4uY29sLXhzLW9mZnNldC05IHtcbiAgbWFyZ2luLWxlZnQ6IDc1JTtcbn1cbi5jb2wteHMtb2Zmc2V0LTgge1xuICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjclO1xufVxuLmNvbC14cy1vZmZzZXQtNyB7XG4gIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMyU7XG59XG4uY29sLXhzLW9mZnNldC02IHtcbiAgbWFyZ2luLWxlZnQ6IDUwJTtcbn1cbi5jb2wteHMtb2Zmc2V0LTUge1xuICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjclO1xufVxuLmNvbC14cy1vZmZzZXQtNCB7XG4gIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMyU7XG59XG4uY29sLXhzLW9mZnNldC0zIHtcbiAgbWFyZ2luLWxlZnQ6IDI1JTtcbn1cbi5jb2wteHMtb2Zmc2V0LTIge1xuICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjclO1xufVxuLmNvbC14cy1vZmZzZXQtMSB7XG4gIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMzMzJTtcbn1cbi5jb2wteHMtb2Zmc2V0LTAge1xuICBtYXJnaW4tbGVmdDogMCU7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNvbC1zbS0xLCAuY29sLXNtLTIsIC5jb2wtc20tMywgLmNvbC1zbS00LCAuY29sLXNtLTUsIC5jb2wtc20tNiwgLmNvbC1zbS03LCAuY29sLXNtLTgsIC5jb2wtc20tOSwgLmNvbC1zbS0xMCwgLmNvbC1zbS0xMSwgLmNvbC1zbS0xMiB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbiAgLmNvbC1zbS0xMiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbC1zbS0xMSB7XG4gICAgd2lkdGg6IDkxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLTEwIHtcbiAgICB3aWR0aDogODMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tOSB7XG4gICAgd2lkdGg6IDc1JTtcbiAgfVxuICAuY29sLXNtLTgge1xuICAgIHdpZHRoOiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS03IHtcbiAgICB3aWR0aDogNTguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tNiB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxuICAuY29sLXNtLTUge1xuICAgIHdpZHRoOiA0MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS00IHtcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tMyB7XG4gICAgd2lkdGg6IDI1JTtcbiAgfVxuICAuY29sLXNtLTIge1xuICAgIHdpZHRoOiAxNi42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS0xIHtcbiAgICB3aWR0aDogOC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTEyIHtcbiAgICByaWdodDogMTAwJTtcbiAgfVxuICAuY29sLXNtLXB1bGwtMTEge1xuICAgIHJpZ2h0OiA5MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTEwIHtcbiAgICByaWdodDogODMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tcHVsbC05IHtcbiAgICByaWdodDogNzUlO1xuICB9XG4gIC5jb2wtc20tcHVsbC04IHtcbiAgICByaWdodDogNjYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tcHVsbC03IHtcbiAgICByaWdodDogNTguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tcHVsbC02IHtcbiAgICByaWdodDogNTAlO1xuICB9XG4gIC5jb2wtc20tcHVsbC01IHtcbiAgICByaWdodDogNDEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tcHVsbC00IHtcbiAgICByaWdodDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tcHVsbC0zIHtcbiAgICByaWdodDogMjUlO1xuICB9XG4gIC5jb2wtc20tcHVsbC0yIHtcbiAgICByaWdodDogMTYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tcHVsbC0xIHtcbiAgICByaWdodDogOC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTAge1xuICAgIHJpZ2h0OiBhdXRvO1xuICB9XG4gIC5jb2wtc20tcHVzaC0xMiB7XG4gICAgbGVmdDogMTAwJTtcbiAgfVxuICAuY29sLXNtLXB1c2gtMTEge1xuICAgIGxlZnQ6IDkxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLXB1c2gtMTAge1xuICAgIGxlZnQ6IDgzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1c2gtOSB7XG4gICAgbGVmdDogNzUlO1xuICB9XG4gIC5jb2wtc20tcHVzaC04IHtcbiAgICBsZWZ0OiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTcge1xuICAgIGxlZnQ6IDU4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1c2gtNiB7XG4gICAgbGVmdDogNTAlO1xuICB9XG4gIC5jb2wtc20tcHVzaC01IHtcbiAgICBsZWZ0OiA0MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTQge1xuICAgIGxlZnQ6IDMzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1c2gtMyB7XG4gICAgbGVmdDogMjUlO1xuICB9XG4gIC5jb2wtc20tcHVzaC0yIHtcbiAgICBsZWZ0OiAxNi42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTEge1xuICAgIGxlZnQ6IDguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tcHVzaC0wIHtcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTEyIHtcbiAgICBtYXJnaW4tbGVmdDogMTAwJTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC0xMSB7XG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC0xMCB7XG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC05IHtcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTgge1xuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtNyB7XG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC02IHtcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTUge1xuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtNCB7XG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC0zIHtcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTIge1xuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtMSB7XG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTAge1xuICAgIG1hcmdpbi1sZWZ0OiAwJTtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5jb2wtbWQtMSwgLmNvbC1tZC0yLCAuY29sLW1kLTMsIC5jb2wtbWQtNCwgLmNvbC1tZC01LCAuY29sLW1kLTYsIC5jb2wtbWQtNywgLmNvbC1tZC04LCAuY29sLW1kLTksIC5jb2wtbWQtMTAsIC5jb2wtbWQtMTEsIC5jb2wtbWQtMTIge1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG4gIC5jb2wtbWQtMTIge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb2wtbWQtMTEge1xuICAgIHdpZHRoOiA5MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLTkge1xuICAgIHdpZHRoOiA3NSU7XG4gIH1cbiAgLmNvbC1tZC04IHtcbiAgICB3aWR0aDogNjYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtNyB7XG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLTYge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbiAgLmNvbC1tZC01IHtcbiAgICB3aWR0aDogNDEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtNCB7XG4gICAgd2lkdGg6IDMzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLTMge1xuICAgIHdpZHRoOiAyNSU7XG4gIH1cbiAgLmNvbC1tZC0yIHtcbiAgICB3aWR0aDogMTYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtMSB7XG4gICAgd2lkdGg6IDguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC0xMiB7XG4gICAgcmlnaHQ6IDEwMCU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTExIHtcbiAgICByaWdodDogOTEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtcHVsbC0xMCB7XG4gICAgcmlnaHQ6IDgzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLXB1bGwtOSB7XG4gICAgcmlnaHQ6IDc1JTtcbiAgfVxuICAuY29sLW1kLXB1bGwtOCB7XG4gICAgcmlnaHQ6IDY2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLXB1bGwtNyB7XG4gICAgcmlnaHQ6IDU4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLXB1bGwtNiB7XG4gICAgcmlnaHQ6IDUwJTtcbiAgfVxuICAuY29sLW1kLXB1bGwtNSB7XG4gICAgcmlnaHQ6IDQxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLXB1bGwtNCB7XG4gICAgcmlnaHQ6IDMzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLXB1bGwtMyB7XG4gICAgcmlnaHQ6IDI1JTtcbiAgfVxuICAuY29sLW1kLXB1bGwtMiB7XG4gICAgcmlnaHQ6IDE2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLXB1bGwtMSB7XG4gICAgcmlnaHQ6IDguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC0wIHtcbiAgICByaWdodDogYXV0bztcbiAgfVxuICAuY29sLW1kLXB1c2gtMTIge1xuICAgIGxlZnQ6IDEwMCU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTExIHtcbiAgICBsZWZ0OiA5MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTEwIHtcbiAgICBsZWZ0OiA4My4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTkge1xuICAgIGxlZnQ6IDc1JTtcbiAgfVxuICAuY29sLW1kLXB1c2gtOCB7XG4gICAgbGVmdDogNjYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtcHVzaC03IHtcbiAgICBsZWZ0OiA1OC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTYge1xuICAgIGxlZnQ6IDUwJTtcbiAgfVxuICAuY29sLW1kLXB1c2gtNSB7XG4gICAgbGVmdDogNDEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtcHVzaC00IHtcbiAgICBsZWZ0OiAzMy4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTMge1xuICAgIGxlZnQ6IDI1JTtcbiAgfVxuICAuY29sLW1kLXB1c2gtMiB7XG4gICAgbGVmdDogMTYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtcHVzaC0xIHtcbiAgICBsZWZ0OiA4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLXB1c2gtMCB7XG4gICAgbGVmdDogYXV0bztcbiAgfVxuICAuY29sLW1kLW9mZnNldC0xMiB7XG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtMTEge1xuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtMTAge1xuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtOSB7XG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC04IHtcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTcge1xuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtNiB7XG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC01IHtcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTQge1xuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtMyB7XG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC0yIHtcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTEge1xuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC0wIHtcbiAgICBtYXJnaW4tbGVmdDogMCU7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLmNvbC1sZy0xLCAuY29sLWxnLTIsIC5jb2wtbGctMywgLmNvbC1sZy00LCAuY29sLWxnLTUsIC5jb2wtbGctNiwgLmNvbC1sZy03LCAuY29sLWxnLTgsIC5jb2wtbGctOSwgLmNvbC1sZy0xMCwgLmNvbC1sZy0xMSwgLmNvbC1sZy0xMiB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbiAgLmNvbC1sZy0xMiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbC1sZy0xMSB7XG4gICAgd2lkdGg6IDkxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLTEwIHtcbiAgICB3aWR0aDogODMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctOSB7XG4gICAgd2lkdGg6IDc1JTtcbiAgfVxuICAuY29sLWxnLTgge1xuICAgIHdpZHRoOiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy03IHtcbiAgICB3aWR0aDogNTguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctNiB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxuICAuY29sLWxnLTUge1xuICAgIHdpZHRoOiA0MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy00IHtcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctMyB7XG4gICAgd2lkdGg6IDI1JTtcbiAgfVxuICAuY29sLWxnLTIge1xuICAgIHdpZHRoOiAxNi42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy0xIHtcbiAgICB3aWR0aDogOC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTEyIHtcbiAgICByaWdodDogMTAwJTtcbiAgfVxuICAuY29sLWxnLXB1bGwtMTEge1xuICAgIHJpZ2h0OiA5MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTEwIHtcbiAgICByaWdodDogODMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVsbC05IHtcbiAgICByaWdodDogNzUlO1xuICB9XG4gIC5jb2wtbGctcHVsbC04IHtcbiAgICByaWdodDogNjYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctcHVsbC03IHtcbiAgICByaWdodDogNTguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVsbC02IHtcbiAgICByaWdodDogNTAlO1xuICB9XG4gIC5jb2wtbGctcHVsbC01IHtcbiAgICByaWdodDogNDEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctcHVsbC00IHtcbiAgICByaWdodDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVsbC0zIHtcbiAgICByaWdodDogMjUlO1xuICB9XG4gIC5jb2wtbGctcHVsbC0yIHtcbiAgICByaWdodDogMTYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctcHVsbC0xIHtcbiAgICByaWdodDogOC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTAge1xuICAgIHJpZ2h0OiBhdXRvO1xuICB9XG4gIC5jb2wtbGctcHVzaC0xMiB7XG4gICAgbGVmdDogMTAwJTtcbiAgfVxuICAuY29sLWxnLXB1c2gtMTEge1xuICAgIGxlZnQ6IDkxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLXB1c2gtMTAge1xuICAgIGxlZnQ6IDgzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLXB1c2gtOSB7XG4gICAgbGVmdDogNzUlO1xuICB9XG4gIC5jb2wtbGctcHVzaC04IHtcbiAgICBsZWZ0OiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTcge1xuICAgIGxlZnQ6IDU4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLXB1c2gtNiB7XG4gICAgbGVmdDogNTAlO1xuICB9XG4gIC5jb2wtbGctcHVzaC01IHtcbiAgICBsZWZ0OiA0MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTQge1xuICAgIGxlZnQ6IDMzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLXB1c2gtMyB7XG4gICAgbGVmdDogMjUlO1xuICB9XG4gIC5jb2wtbGctcHVzaC0yIHtcbiAgICBsZWZ0OiAxNi42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTEge1xuICAgIGxlZnQ6IDguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVzaC0wIHtcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTEyIHtcbiAgICBtYXJnaW4tbGVmdDogMTAwJTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC0xMSB7XG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC0xMCB7XG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC05IHtcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTgge1xuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtNyB7XG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC02IHtcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTUge1xuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtNCB7XG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC0zIHtcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTIge1xuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtMSB7XG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTAge1xuICAgIG1hcmdpbi1sZWZ0OiAwJTtcbiAgfVxufVxudGFibGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbmNhcHRpb24ge1xuICBwYWRkaW5nLXRvcDogOHB4O1xuICBwYWRkaW5nLWJvdHRvbTogOHB4O1xuICBjb2xvcjogIzc3Nzc3NztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbnRoIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi50YWJsZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGgsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGgsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGgsXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGQsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGQsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGQge1xuICBwYWRkaW5nOiA4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbn1cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aCB7XG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZGRkO1xufVxuLnRhYmxlID4gY2FwdGlvbiArIHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbi50YWJsZSA+IGNvbGdyb3VwICsgdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRoLFxuLnRhYmxlID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCA+IHRoLFxuLnRhYmxlID4gY2FwdGlvbiArIHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbi50YWJsZSA+IGNvbGdyb3VwICsgdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkLFxuLnRhYmxlID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkIHtcbiAgYm9yZGVyLXRvcDogMDtcbn1cbi50YWJsZSA+IHRib2R5ICsgdGJvZHkge1xuICBib3JkZXItdG9wOiAycHggc29saWQgI2RkZDtcbn1cbi50YWJsZSAudGFibGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuLnRhYmxlLWNvbmRlbnNlZCA+IHRoZWFkID4gdHIgPiB0aCxcbi50YWJsZS1jb25kZW5zZWQgPiB0Ym9keSA+IHRyID4gdGgsXG4udGFibGUtY29uZGVuc2VkID4gdGZvb3QgPiB0ciA+IHRoLFxuLnRhYmxlLWNvbmRlbnNlZCA+IHRoZWFkID4gdHIgPiB0ZCxcbi50YWJsZS1jb25kZW5zZWQgPiB0Ym9keSA+IHRyID4gdGQsXG4udGFibGUtY29uZGVuc2VkID4gdGZvb3QgPiB0ciA+IHRkIHtcbiAgcGFkZGluZzogNXB4O1xufVxuLnRhYmxlLWJvcmRlcmVkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbn1cbi50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aCxcbi50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0aCxcbi50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aCxcbi50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZCxcbi50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZCxcbi50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG59XG4udGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGgsXG4udGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQge1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAycHg7XG59XG4udGFibGUtc3RyaXBlZCA+IHRib2R5ID4gdHI6bnRoLW9mLXR5cGUob2RkKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7XG59XG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbn1cbnRhYmxlIGNvbFtjbGFzcyo9XCJjb2wtXCJdIHtcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgZmxvYXQ6IG5vbmU7XG4gIGRpc3BsYXk6IHRhYmxlLWNvbHVtbjtcbn1cbnRhYmxlIHRkW2NsYXNzKj1cImNvbC1cIl0sXG50YWJsZSB0aFtjbGFzcyo9XCJjb2wtXCJdIHtcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgZmxvYXQ6IG5vbmU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG59XG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGQuYWN0aXZlLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLmFjdGl2ZSxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0ZC5hY3RpdmUsXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGguYWN0aXZlLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLmFjdGl2ZSxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5hY3RpdmUsXG4udGFibGUgPiB0aGVhZCA+IHRyLmFjdGl2ZSA+IHRkLFxuLnRhYmxlID4gdGJvZHkgPiB0ci5hY3RpdmUgPiB0ZCxcbi50YWJsZSA+IHRmb290ID4gdHIuYWN0aXZlID4gdGQsXG4udGFibGUgPiB0aGVhZCA+IHRyLmFjdGl2ZSA+IHRoLFxuLnRhYmxlID4gdGJvZHkgPiB0ci5hY3RpdmUgPiB0aCxcbi50YWJsZSA+IHRmb290ID4gdHIuYWN0aXZlID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRkLmFjdGl2ZTpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0aC5hY3RpdmU6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLmFjdGl2ZTpob3ZlciA+IHRkLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC5hY3RpdmUsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLmFjdGl2ZTpob3ZlciA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U4ZThlODtcbn1cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5zdWNjZXNzLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLnN1Y2Nlc3MsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGQuc3VjY2Vzcyxcbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aC5zdWNjZXNzLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLnN1Y2Nlc3MsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGguc3VjY2Vzcyxcbi50YWJsZSA+IHRoZWFkID4gdHIuc3VjY2VzcyA+IHRkLFxuLnRhYmxlID4gdGJvZHkgPiB0ci5zdWNjZXNzID4gdGQsXG4udGFibGUgPiB0Zm9vdCA+IHRyLnN1Y2Nlc3MgPiB0ZCxcbi50YWJsZSA+IHRoZWFkID4gdHIuc3VjY2VzcyA+IHRoLFxuLnRhYmxlID4gdGJvZHkgPiB0ci5zdWNjZXNzID4gdGgsXG4udGFibGUgPiB0Zm9vdCA+IHRyLnN1Y2Nlc3MgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZmYwZDg7XG59XG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGQuc3VjY2Vzczpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0aC5zdWNjZXNzOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5zdWNjZXNzOmhvdmVyID4gdGQsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyOmhvdmVyID4gLnN1Y2Nlc3MsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLnN1Y2Nlc3M6aG92ZXIgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkMGU5YzY7XG59XG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGQuaW5mbyxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZC5pbmZvLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLmluZm8sXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGguaW5mbyxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0aC5pbmZvLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRoLmluZm8sXG4udGFibGUgPiB0aGVhZCA+IHRyLmluZm8gPiB0ZCxcbi50YWJsZSA+IHRib2R5ID4gdHIuaW5mbyA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5pbmZvID4gdGQsXG4udGFibGUgPiB0aGVhZCA+IHRyLmluZm8gPiB0aCxcbi50YWJsZSA+IHRib2R5ID4gdHIuaW5mbyA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5pbmZvID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDllZGY3O1xufVxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRkLmluZm86aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGguaW5mbzpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuaW5mbzpob3ZlciA+IHRkLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC5pbmZvLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5pbmZvOmhvdmVyID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzRlM2YzO1xufVxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRkLndhcm5pbmcsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGQud2FybmluZyxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0ZC53YXJuaW5nLFxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLndhcm5pbmcsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGgud2FybmluZyxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC53YXJuaW5nLFxuLnRhYmxlID4gdGhlYWQgPiB0ci53YXJuaW5nID4gdGQsXG4udGFibGUgPiB0Ym9keSA+IHRyLndhcm5pbmcgPiB0ZCxcbi50YWJsZSA+IHRmb290ID4gdHIud2FybmluZyA+IHRkLFxuLnRhYmxlID4gdGhlYWQgPiB0ci53YXJuaW5nID4gdGgsXG4udGFibGUgPiB0Ym9keSA+IHRyLndhcm5pbmcgPiB0aCxcbi50YWJsZSA+IHRmb290ID4gdHIud2FybmluZyA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMztcbn1cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC53YXJuaW5nOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLndhcm5pbmc6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLndhcm5pbmc6aG92ZXIgPiB0ZCxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAud2FybmluZyxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIud2FybmluZzpob3ZlciA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZjJjYztcbn1cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5kYW5nZXIsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGQuZGFuZ2VyLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLmRhbmdlcixcbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aC5kYW5nZXIsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGguZGFuZ2VyLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRoLmRhbmdlcixcbi50YWJsZSA+IHRoZWFkID4gdHIuZGFuZ2VyID4gdGQsXG4udGFibGUgPiB0Ym9keSA+IHRyLmRhbmdlciA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5kYW5nZXIgPiB0ZCxcbi50YWJsZSA+IHRoZWFkID4gdHIuZGFuZ2VyID4gdGgsXG4udGFibGUgPiB0Ym9keSA+IHRyLmRhbmdlciA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5kYW5nZXIgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMmRlZGU7XG59XG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGQuZGFuZ2VyOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLmRhbmdlcjpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuZGFuZ2VyOmhvdmVyID4gdGQsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyOmhvdmVyID4gLmRhbmdlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuZGFuZ2VyOmhvdmVyID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWJjY2NjO1xufVxuLnRhYmxlLXJlc3BvbnNpdmUge1xuICBvdmVyZmxvdy14OiBhdXRvO1xuICBtaW4taGVpZ2h0OiAwLjAxJTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC50YWJsZS1yZXNwb25zaXZlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IC1tcy1hdXRvaGlkaW5nLXNjcm9sbGJhcjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICB9XG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSA+IHRib2R5ID4gdHIgPiB0aCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgPiB0Zm9vdCA+IHRyID4gdGgsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgPiB0Zm9vdCA+IHRyID4gdGQge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQge1xuICAgIGJvcmRlcjogMDtcbiAgfVxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkOmZpcnN0LWNoaWxkIHtcbiAgICBib3JkZXItbGVmdDogMDtcbiAgfVxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZDpsYXN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZDpsYXN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZDpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gIH1cbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmxhc3QtY2hpbGQgPiB0aCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyOmxhc3QtY2hpbGQgPiB0aCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmxhc3QtY2hpbGQgPiB0ZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyOmxhc3QtY2hpbGQgPiB0ZCB7XG4gICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgfVxufVxuZmllbGRzZXQge1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG4gIGJvcmRlcjogMDtcbiAgbWluLXdpZHRoOiAwO1xufVxubGVnZW5kIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBmb250LXNpemU6IDIxcHg7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICBjb2xvcjogIzMzMzMzMztcbiAgYm9yZGVyOiAwO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbn1cbmxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5pbnB1dFt0eXBlPVwicmFkaW9cIl0sXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBtYXJnaW46IDRweCAwIDA7XG4gIG1hcmdpbi10b3A6IDFweCBcXDk7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG59XG5pbnB1dFt0eXBlPVwiZmlsZVwiXSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuaW5wdXRbdHlwZT1cInJhbmdlXCJdIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xufVxuc2VsZWN0W211bHRpcGxlXSxcbnNlbGVjdFtzaXplXSB7XG4gIGhlaWdodDogYXV0bztcbn1cbmlucHV0W3R5cGU9XCJmaWxlXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmZvY3VzIHtcbiAgb3V0bGluZTogdGhpbiBkb3R0ZWQ7XG4gIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XG59XG5vdXRwdXQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZy10b3A6IDdweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgY29sb3I6ICM1NTU1NTU7XG59XG4uZm9ybS1jb250cm9sIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDM0cHg7XG4gIHBhZGRpbmc6IDZweCAxMnB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xuICBjb2xvcjogIzU1NTU1NTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IGJvcmRlci1jb2xvciBlYXNlLWluLW91dCAuMTVzLCBib3gtc2hhZG93IGVhc2UtaW4tb3V0IC4xNXM7XG4gIC1vLXRyYW5zaXRpb246IGJvcmRlci1jb2xvciBlYXNlLWluLW91dCAuMTVzLCBib3gtc2hhZG93IGVhc2UtaW4tb3V0IC4xNXM7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciBlYXNlLWluLW91dCAuMTVzLCBib3gtc2hhZG93IGVhc2UtaW4tb3V0IC4xNXM7XG59XG4uZm9ybS1jb250cm9sOmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjNjZhZmU5O1xuICBvdXRsaW5lOiAwO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpLCAwIDAgOHB4IHJnYmEoMTAyLCAxNzUsIDIzMywgMC42KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSksIDAgMCA4cHggcmdiYSgxMDIsIDE3NSwgMjMzLCAwLjYpO1xufVxuLmZvcm0tY29udHJvbDo6LW1vei1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjOTk5O1xuICBvcGFjaXR5OiAxO1xufVxuLmZvcm0tY29udHJvbDotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICBjb2xvcjogIzk5OTtcbn1cbi5mb3JtLWNvbnRyb2w6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICBjb2xvcjogIzk5OTtcbn1cbi5mb3JtLWNvbnRyb2xbZGlzYWJsZWRdLFxuLmZvcm0tY29udHJvbFtyZWFkb25seV0sXG5maWVsZHNldFtkaXNhYmxlZF0gLmZvcm0tY29udHJvbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7XG4gIG9wYWNpdHk6IDE7XG59XG4uZm9ybS1jb250cm9sW2Rpc2FibGVkXSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuZm9ybS1jb250cm9sIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbnRleHRhcmVhLmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogYXV0bztcbn1cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAwKSB7XG4gIGlucHV0W3R5cGU9XCJkYXRlXCJdLmZvcm0tY29udHJvbCxcbiAgaW5wdXRbdHlwZT1cInRpbWVcIl0uZm9ybS1jb250cm9sLFxuICBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0uZm9ybS1jb250cm9sLFxuICBpbnB1dFt0eXBlPVwibW9udGhcIl0uZm9ybS1jb250cm9sIHtcbiAgICBsaW5lLWhlaWdodDogMzRweDtcbiAgfVxuICBpbnB1dFt0eXBlPVwiZGF0ZVwiXS5pbnB1dC1zbSxcbiAgaW5wdXRbdHlwZT1cInRpbWVcIl0uaW5wdXQtc20sXG4gIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXS5pbnB1dC1zbSxcbiAgaW5wdXRbdHlwZT1cIm1vbnRoXCJdLmlucHV0LXNtLFxuICAuaW5wdXQtZ3JvdXAtc20gaW5wdXRbdHlwZT1cImRhdGVcIl0sXG4gIC5pbnB1dC1ncm91cC1zbSBpbnB1dFt0eXBlPVwidGltZVwiXSxcbiAgLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXSxcbiAgLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9XCJtb250aFwiXSB7XG4gICAgbGluZS1oZWlnaHQ6IDMwcHg7XG4gIH1cbiAgaW5wdXRbdHlwZT1cImRhdGVcIl0uaW5wdXQtbGcsXG4gIGlucHV0W3R5cGU9XCJ0aW1lXCJdLmlucHV0LWxnLFxuICBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0uaW5wdXQtbGcsXG4gIGlucHV0W3R5cGU9XCJtb250aFwiXS5pbnB1dC1sZyxcbiAgLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9XCJkYXRlXCJdLFxuICAuaW5wdXQtZ3JvdXAtbGcgaW5wdXRbdHlwZT1cInRpbWVcIl0sXG4gIC5pbnB1dC1ncm91cC1sZyBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG4gIC5pbnB1dC1ncm91cC1sZyBpbnB1dFt0eXBlPVwibW9udGhcIl0ge1xuICAgIGxpbmUtaGVpZ2h0OiA0NnB4O1xuICB9XG59XG4uZm9ybS1ncm91cCB7XG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XG59XG4ucmFkaW8sXG4uY2hlY2tib3gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuLnJhZGlvIGxhYmVsLFxuLmNoZWNrYm94IGxhYmVsIHtcbiAgbWluLWhlaWdodDogMjBweDtcbiAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ucmFkaW8gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLnJhZGlvLWlubGluZSBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4uY2hlY2tib3ggaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIG1hcmdpbi1sZWZ0OiAtMjBweDtcbiAgbWFyZ2luLXRvcDogNHB4IFxcOTtcbn1cbi5yYWRpbyArIC5yYWRpbyxcbi5jaGVja2JveCArIC5jaGVja2JveCB7XG4gIG1hcmdpbi10b3A6IC01cHg7XG59XG4ucmFkaW8taW5saW5lLFxuLmNoZWNrYm94LWlubGluZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5yYWRpby1pbmxpbmUgKyAucmFkaW8taW5saW5lLFxuLmNoZWNrYm94LWlubGluZSArIC5jaGVja2JveC1pbmxpbmUge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tbGVmdDogMTBweDtcbn1cbmlucHV0W3R5cGU9XCJyYWRpb1wiXVtkaXNhYmxlZF0sXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl1bZGlzYWJsZWRdLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdLmRpc2FibGVkLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmRpc2FibGVkLFxuZmllbGRzZXRbZGlzYWJsZWRdIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbmZpZWxkc2V0W2Rpc2FibGVkXSBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLnJhZGlvLWlubGluZS5kaXNhYmxlZCxcbi5jaGVja2JveC1pbmxpbmUuZGlzYWJsZWQsXG5maWVsZHNldFtkaXNhYmxlZF0gLnJhZGlvLWlubGluZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuY2hlY2tib3gtaW5saW5lIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5yYWRpby5kaXNhYmxlZCBsYWJlbCxcbi5jaGVja2JveC5kaXNhYmxlZCBsYWJlbCxcbmZpZWxkc2V0W2Rpc2FibGVkXSAucmFkaW8gbGFiZWwsXG5maWVsZHNldFtkaXNhYmxlZF0gLmNoZWNrYm94IGxhYmVsIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgcGFkZGluZy10b3A6IDdweDtcbiAgcGFkZGluZy1ib3R0b206IDdweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbWluLWhlaWdodDogMzRweDtcbn1cbi5mb3JtLWNvbnRyb2wtc3RhdGljLmlucHV0LWxnLFxuLmZvcm0tY29udHJvbC1zdGF0aWMuaW5wdXQtc20ge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG59XG4uaW5wdXQtc20ge1xuICBoZWlnaHQ6IDMwcHg7XG4gIHBhZGRpbmc6IDVweCAxMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cbnNlbGVjdC5pbnB1dC1zbSB7XG4gIGhlaWdodDogMzBweDtcbiAgbGluZS1oZWlnaHQ6IDMwcHg7XG59XG50ZXh0YXJlYS5pbnB1dC1zbSxcbnNlbGVjdFttdWx0aXBsZV0uaW5wdXQtc20ge1xuICBoZWlnaHQ6IGF1dG87XG59XG4uZm9ybS1ncm91cC1zbSAuZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICBwYWRkaW5nOiA1cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS41O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG4uZm9ybS1ncm91cC1zbSBzZWxlY3QuZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICBsaW5lLWhlaWdodDogMzBweDtcbn1cbi5mb3JtLWdyb3VwLXNtIHRleHRhcmVhLmZvcm0tY29udHJvbCxcbi5mb3JtLWdyb3VwLXNtIHNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmZvcm0tZ3JvdXAtc20gLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICBoZWlnaHQ6IDMwcHg7XG4gIG1pbi1oZWlnaHQ6IDMycHg7XG4gIHBhZGRpbmc6IDZweCAxMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG4uaW5wdXQtbGcge1xuICBoZWlnaHQ6IDQ2cHg7XG4gIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzO1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG5zZWxlY3QuaW5wdXQtbGcge1xuICBoZWlnaHQ6IDQ2cHg7XG4gIGxpbmUtaGVpZ2h0OiA0NnB4O1xufVxudGV4dGFyZWEuaW5wdXQtbGcsXG5zZWxlY3RbbXVsdGlwbGVdLmlucHV0LWxnIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogNDZweDtcbiAgcGFkZGluZzogMTBweCAxNnB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMzMzMzM7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbn1cbi5mb3JtLWdyb3VwLWxnIHNlbGVjdC5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IDQ2cHg7XG4gIGxpbmUtaGVpZ2h0OiA0NnB4O1xufVxuLmZvcm0tZ3JvdXAtbGcgdGV4dGFyZWEuZm9ybS1jb250cm9sLFxuLmZvcm0tZ3JvdXAtbGcgc2VsZWN0W211bHRpcGxlXS5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IGF1dG87XG59XG4uZm9ybS1ncm91cC1sZyAuZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gIGhlaWdodDogNDZweDtcbiAgbWluLWhlaWdodDogMzhweDtcbiAgcGFkZGluZzogMTFweCAxNnB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMzMzMzM7XG59XG4uaGFzLWZlZWRiYWNrIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sIHtcbiAgcGFkZGluZy1yaWdodDogNDIuNXB4O1xufVxuLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgei1pbmRleDogMjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAzNHB4O1xuICBoZWlnaHQ6IDM0cHg7XG4gIGxpbmUtaGVpZ2h0OiAzNHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLmlucHV0LWxnICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayxcbi5pbnB1dC1ncm91cC1sZyArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uZm9ybS1ncm91cC1sZyAuZm9ybS1jb250cm9sICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHdpZHRoOiA0NnB4O1xuICBoZWlnaHQ6IDQ2cHg7XG4gIGxpbmUtaGVpZ2h0OiA0NnB4O1xufVxuLmlucHV0LXNtICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayxcbi5pbnB1dC1ncm91cC1zbSArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uZm9ybS1ncm91cC1zbSAuZm9ybS1jb250cm9sICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHdpZHRoOiAzMHB4O1xuICBoZWlnaHQ6IDMwcHg7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xufVxuLmhhcy1zdWNjZXNzIC5oZWxwLWJsb2NrLFxuLmhhcy1zdWNjZXNzIC5jb250cm9sLWxhYmVsLFxuLmhhcy1zdWNjZXNzIC5yYWRpbyxcbi5oYXMtc3VjY2VzcyAuY2hlY2tib3gsXG4uaGFzLXN1Y2Nlc3MgLnJhZGlvLWlubGluZSxcbi5oYXMtc3VjY2VzcyAuY2hlY2tib3gtaW5saW5lLFxuLmhhcy1zdWNjZXNzLnJhZGlvIGxhYmVsLFxuLmhhcy1zdWNjZXNzLmNoZWNrYm94IGxhYmVsLFxuLmhhcy1zdWNjZXNzLnJhZGlvLWlubGluZSBsYWJlbCxcbi5oYXMtc3VjY2Vzcy5jaGVja2JveC1pbmxpbmUgbGFiZWwge1xuICBjb2xvcjogIzNjNzYzZDtcbn1cbi5oYXMtc3VjY2VzcyAuZm9ybS1jb250cm9sIHtcbiAgYm9yZGVyLWNvbG9yOiAjM2M3NjNkO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xufVxuLmhhcy1zdWNjZXNzIC5mb3JtLWNvbnRyb2w6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICMyYjU0MmM7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICM2N2IxNjg7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjNjdiMTY4O1xufVxuLmhhcy1zdWNjZXNzIC5pbnB1dC1ncm91cC1hZGRvbiB7XG4gIGNvbG9yOiAjM2M3NjNkO1xuICBib3JkZXItY29sb3I6ICMzYzc2M2Q7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZmYwZDg7XG59XG4uaGFzLXN1Y2Nlc3MgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIGNvbG9yOiAjM2M3NjNkO1xufVxuLmhhcy13YXJuaW5nIC5oZWxwLWJsb2NrLFxuLmhhcy13YXJuaW5nIC5jb250cm9sLWxhYmVsLFxuLmhhcy13YXJuaW5nIC5yYWRpbyxcbi5oYXMtd2FybmluZyAuY2hlY2tib3gsXG4uaGFzLXdhcm5pbmcgLnJhZGlvLWlubGluZSxcbi5oYXMtd2FybmluZyAuY2hlY2tib3gtaW5saW5lLFxuLmhhcy13YXJuaW5nLnJhZGlvIGxhYmVsLFxuLmhhcy13YXJuaW5nLmNoZWNrYm94IGxhYmVsLFxuLmhhcy13YXJuaW5nLnJhZGlvLWlubGluZSBsYWJlbCxcbi5oYXMtd2FybmluZy5jaGVja2JveC1pbmxpbmUgbGFiZWwge1xuICBjb2xvcjogIzhhNmQzYjtcbn1cbi5oYXMtd2FybmluZyAuZm9ybS1jb250cm9sIHtcbiAgYm9yZGVyLWNvbG9yOiAjOGE2ZDNiO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xufVxuLmhhcy13YXJuaW5nIC5mb3JtLWNvbnRyb2w6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICM2NjUxMmM7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICNjMGExNmI7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjYzBhMTZiO1xufVxuLmhhcy13YXJuaW5nIC5pbnB1dC1ncm91cC1hZGRvbiB7XG4gIGNvbG9yOiAjOGE2ZDNiO1xuICBib3JkZXItY29sb3I6ICM4YTZkM2I7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7XG59XG4uaGFzLXdhcm5pbmcgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIGNvbG9yOiAjOGE2ZDNiO1xufVxuLmhhcy1lcnJvciAuaGVscC1ibG9jayxcbi5oYXMtZXJyb3IgLmNvbnRyb2wtbGFiZWwsXG4uaGFzLWVycm9yIC5yYWRpbyxcbi5oYXMtZXJyb3IgLmNoZWNrYm94LFxuLmhhcy1lcnJvciAucmFkaW8taW5saW5lLFxuLmhhcy1lcnJvciAuY2hlY2tib3gtaW5saW5lLFxuLmhhcy1lcnJvci5yYWRpbyBsYWJlbCxcbi5oYXMtZXJyb3IuY2hlY2tib3ggbGFiZWwsXG4uaGFzLWVycm9yLnJhZGlvLWlubGluZSBsYWJlbCxcbi5oYXMtZXJyb3IuY2hlY2tib3gtaW5saW5lIGxhYmVsIHtcbiAgY29sb3I6ICNhOTQ0NDI7XG59XG4uaGFzLWVycm9yIC5mb3JtLWNvbnRyb2wge1xuICBib3JkZXItY29sb3I6ICNhOTQ0NDI7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG59XG4uaGFzLWVycm9yIC5mb3JtLWNvbnRyb2w6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICM4NDM1MzQ7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICNjZTg0ODM7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjY2U4NDgzO1xufVxuLmhhcy1lcnJvciAuaW5wdXQtZ3JvdXAtYWRkb24ge1xuICBjb2xvcjogI2E5NDQ0MjtcbiAgYm9yZGVyLWNvbG9yOiAjYTk0NDQyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlO1xufVxuLmhhcy1lcnJvciAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgY29sb3I6ICNhOTQ0NDI7XG59XG4uaGFzLWZlZWRiYWNrIGxhYmVsIH4gLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHRvcDogMjVweDtcbn1cbi5oYXMtZmVlZGJhY2sgbGFiZWwuc3Itb25seSB+IC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB0b3A6IDA7XG59XG4uaGVscC1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gIGNvbG9yOiAjNzM3MzczO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5mb3JtLWlubGluZSAuZm9ybS1ncm91cCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAuZm9ybS1pbmxpbmUgLmZvcm0tY29udHJvbCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIH1cbiAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIH1cbiAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCB7XG4gICAgZGlzcGxheTogaW5saW5lLXRhYmxlO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIH1cbiAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYWRkb24sXG4gIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWJ0bixcbiAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sIHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxuICAuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwID4gLmZvcm0tY29udHJvbCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgLmZvcm0taW5saW5lIC5jb250cm9sLWxhYmVsIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIH1cbiAgLmZvcm0taW5saW5lIC5yYWRpbyxcbiAgLmZvcm0taW5saW5lIC5jaGVja2JveCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5mb3JtLWlubGluZSAucmFkaW8gbGFiZWwsXG4gIC5mb3JtLWlubGluZSAuY2hlY2tib3ggbGFiZWwge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgfVxuICAuZm9ybS1pbmxpbmUgLnJhZGlvIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbiAgLmZvcm0taW5saW5lIC5jaGVja2JveCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxuICAuZm9ybS1pbmxpbmUgLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICB0b3A6IDA7XG4gIH1cbn1cbi5mb3JtLWhvcml6b250YWwgLnJhZGlvLFxuLmZvcm0taG9yaXpvbnRhbCAuY2hlY2tib3gsXG4uZm9ybS1ob3Jpem9udGFsIC5yYWRpby1pbmxpbmUsXG4uZm9ybS1ob3Jpem9udGFsIC5jaGVja2JveC1pbmxpbmUge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBwYWRkaW5nLXRvcDogN3B4O1xufVxuLmZvcm0taG9yaXpvbnRhbCAucmFkaW8sXG4uZm9ybS1ob3Jpem9udGFsIC5jaGVja2JveCB7XG4gIG1pbi1oZWlnaHQ6IDI3cHg7XG59XG4uZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwIHtcbiAgbWFyZ2luLWxlZnQ6IC0xNXB4O1xuICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtbGFiZWwge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgcGFkZGluZy10b3A6IDdweDtcbiAgfVxufVxuLmZvcm0taG9yaXpvbnRhbCAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICByaWdodDogMTVweDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwLWxnIC5jb250cm9sLWxhYmVsIHtcbiAgICBwYWRkaW5nLXRvcDogMTQuMzMzMzMzcHg7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cC1zbSAuY29udHJvbC1sYWJlbCB7XG4gICAgcGFkZGluZy10b3A6IDZweDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gIH1cbn1cbi5idG4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHBhZGRpbmc6IDZweCAxMnB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG4uYnRuOmZvY3VzLFxuLmJ0bjphY3RpdmU6Zm9jdXMsXG4uYnRuLmFjdGl2ZTpmb2N1cyxcbi5idG4uZm9jdXMsXG4uYnRuOmFjdGl2ZS5mb2N1cyxcbi5idG4uYWN0aXZlLmZvY3VzIHtcbiAgb3V0bGluZTogdGhpbiBkb3R0ZWQ7XG4gIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XG59XG4uYnRuOmhvdmVyLFxuLmJ0bjpmb2N1cyxcbi5idG4uZm9jdXMge1xuICBjb2xvcjogIzMzMztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmJ0bjphY3RpdmUsXG4uYnRuLmFjdGl2ZSB7XG4gIG91dGxpbmU6IDA7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyNSk7XG59XG4uYnRuLmRpc2FibGVkLFxuLmJ0bltkaXNhYmxlZF0sXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0biB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIG9wYWNpdHk6IDAuNjU7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT02NSk7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbmEuYnRuLmRpc2FibGVkLFxuZmllbGRzZXRbZGlzYWJsZWRdIGEuYnRuIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG4uYnRuLWRlZmF1bHQge1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xufVxuLmJ0bi1kZWZhdWx0OmZvY3VzLFxuLmJ0bi1kZWZhdWx0LmZvY3VzIHtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7XG4gIGJvcmRlci1jb2xvcjogIzhjOGM4Yztcbn1cbi5idG4tZGVmYXVsdDpob3ZlciB7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICBib3JkZXItY29sb3I6ICNhZGFkYWQ7XG59XG4uYnRuLWRlZmF1bHQ6YWN0aXZlLFxuLmJ0bi1kZWZhdWx0LmFjdGl2ZSxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tZGVmYXVsdCB7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICBib3JkZXItY29sb3I6ICNhZGFkYWQ7XG59XG4uYnRuLWRlZmF1bHQ6YWN0aXZlOmhvdmVyLFxuLmJ0bi1kZWZhdWx0LmFjdGl2ZTpob3Zlcixcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tZGVmYXVsdDpob3Zlcixcbi5idG4tZGVmYXVsdDphY3RpdmU6Zm9jdXMsXG4uYnRuLWRlZmF1bHQuYWN0aXZlOmZvY3VzLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1kZWZhdWx0OmZvY3VzLFxuLmJ0bi1kZWZhdWx0OmFjdGl2ZS5mb2N1cyxcbi5idG4tZGVmYXVsdC5hY3RpdmUuZm9jdXMsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWRlZmF1bHQuZm9jdXMge1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZDRkNDtcbiAgYm9yZGVyLWNvbG9yOiAjOGM4YzhjO1xufVxuLmJ0bi1kZWZhdWx0OmFjdGl2ZSxcbi5idG4tZGVmYXVsdC5hY3RpdmUsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWRlZmF1bHQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xufVxuLmJ0bi1kZWZhdWx0LmRpc2FibGVkLFxuLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQsXG4uYnRuLWRlZmF1bHQuZGlzYWJsZWQ6aG92ZXIsXG4uYnRuLWRlZmF1bHRbZGlzYWJsZWRdOmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdDpob3Zlcixcbi5idG4tZGVmYXVsdC5kaXNhYmxlZDpmb2N1cyxcbi5idG4tZGVmYXVsdFtkaXNhYmxlZF06Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0OmZvY3VzLFxuLmJ0bi1kZWZhdWx0LmRpc2FibGVkLmZvY3VzLFxuLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXS5mb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQuZm9jdXMsXG4uYnRuLWRlZmF1bHQuZGlzYWJsZWQ6YWN0aXZlLFxuLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXTphY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0OmFjdGl2ZSxcbi5idG4tZGVmYXVsdC5kaXNhYmxlZC5hY3RpdmUsXG4uYnRuLWRlZmF1bHRbZGlzYWJsZWRdLmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQuYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xufVxuLmJ0bi1kZWZhdWx0IC5iYWRnZSB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzO1xufVxuLmJ0bi1wcmltYXJ5IHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7XG4gIGJvcmRlci1jb2xvcjogIzJlNmRhNDtcbn1cbi5idG4tcHJpbWFyeTpmb2N1cyxcbi5idG4tcHJpbWFyeS5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjg2MDkwO1xuICBib3JkZXItY29sb3I6ICMxMjJiNDA7XG59XG4uYnRuLXByaW1hcnk6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4NjA5MDtcbiAgYm9yZGVyLWNvbG9yOiAjMjA0ZDc0O1xufVxuLmJ0bi1wcmltYXJ5OmFjdGl2ZSxcbi5idG4tcHJpbWFyeS5hY3RpdmUsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXByaW1hcnkge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4NjA5MDtcbiAgYm9yZGVyLWNvbG9yOiAjMjA0ZDc0O1xufVxuLmJ0bi1wcmltYXJ5OmFjdGl2ZTpob3Zlcixcbi5idG4tcHJpbWFyeS5hY3RpdmU6aG92ZXIsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXByaW1hcnk6aG92ZXIsXG4uYnRuLXByaW1hcnk6YWN0aXZlOmZvY3VzLFxuLmJ0bi1wcmltYXJ5LmFjdGl2ZTpmb2N1cyxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tcHJpbWFyeTpmb2N1cyxcbi5idG4tcHJpbWFyeTphY3RpdmUuZm9jdXMsXG4uYnRuLXByaW1hcnkuYWN0aXZlLmZvY3VzLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1wcmltYXJ5LmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyMDRkNzQ7XG4gIGJvcmRlci1jb2xvcjogIzEyMmI0MDtcbn1cbi5idG4tcHJpbWFyeTphY3RpdmUsXG4uYnRuLXByaW1hcnkuYWN0aXZlLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1wcmltYXJ5IHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbn1cbi5idG4tcHJpbWFyeS5kaXNhYmxlZCxcbi5idG4tcHJpbWFyeVtkaXNhYmxlZF0sXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LFxuLmJ0bi1wcmltYXJ5LmRpc2FibGVkOmhvdmVyLFxuLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXTpob3ZlcixcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6aG92ZXIsXG4uYnRuLXByaW1hcnkuZGlzYWJsZWQ6Zm9jdXMsXG4uYnRuLXByaW1hcnlbZGlzYWJsZWRdOmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeTpmb2N1cyxcbi5idG4tcHJpbWFyeS5kaXNhYmxlZC5mb2N1cyxcbi5idG4tcHJpbWFyeVtkaXNhYmxlZF0uZm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LmZvY3VzLFxuLmJ0bi1wcmltYXJ5LmRpc2FibGVkOmFjdGl2ZSxcbi5idG4tcHJpbWFyeVtkaXNhYmxlZF06YWN0aXZlLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeTphY3RpdmUsXG4uYnRuLXByaW1hcnkuZGlzYWJsZWQuYWN0aXZlLFxuLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXS5hY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7XG4gIGJvcmRlci1jb2xvcjogIzJlNmRhNDtcbn1cbi5idG4tcHJpbWFyeSAuYmFkZ2Uge1xuICBjb2xvcjogIzMzN2FiNztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5idG4tc3VjY2VzcyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWNiODVjO1xuICBib3JkZXItY29sb3I6ICM0Y2FlNGM7XG59XG4uYnRuLXN1Y2Nlc3M6Zm9jdXMsXG4uYnRuLXN1Y2Nlc3MuZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0OWQ0NDtcbiAgYm9yZGVyLWNvbG9yOiAjMjU1NjI1O1xufVxuLmJ0bi1zdWNjZXNzOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDlkNDQ7XG4gIGJvcmRlci1jb2xvcjogIzM5ODQzOTtcbn1cbi5idG4tc3VjY2VzczphY3RpdmUsXG4uYnRuLXN1Y2Nlc3MuYWN0aXZlLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1zdWNjZXNzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDlkNDQ7XG4gIGJvcmRlci1jb2xvcjogIzM5ODQzOTtcbn1cbi5idG4tc3VjY2VzczphY3RpdmU6aG92ZXIsXG4uYnRuLXN1Y2Nlc3MuYWN0aXZlOmhvdmVyLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1zdWNjZXNzOmhvdmVyLFxuLmJ0bi1zdWNjZXNzOmFjdGl2ZTpmb2N1cyxcbi5idG4tc3VjY2Vzcy5hY3RpdmU6Zm9jdXMsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXN1Y2Nlc3M6Zm9jdXMsXG4uYnRuLXN1Y2Nlc3M6YWN0aXZlLmZvY3VzLFxuLmJ0bi1zdWNjZXNzLmFjdGl2ZS5mb2N1cyxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tc3VjY2Vzcy5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzk4NDM5O1xuICBib3JkZXItY29sb3I6ICMyNTU2MjU7XG59XG4uYnRuLXN1Y2Nlc3M6YWN0aXZlLFxuLmJ0bi1zdWNjZXNzLmFjdGl2ZSxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG59XG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQsXG4uYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzcyxcbi5idG4tc3VjY2Vzcy5kaXNhYmxlZDpob3Zlcixcbi5idG4tc3VjY2Vzc1tkaXNhYmxlZF06aG92ZXIsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmhvdmVyLFxuLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmZvY3VzLFxuLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXTpmb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3M6Zm9jdXMsXG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQuZm9jdXMsXG4uYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzcy5mb2N1cyxcbi5idG4tc3VjY2Vzcy5kaXNhYmxlZDphY3RpdmUsXG4uYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdOmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3M6YWN0aXZlLFxuLmJ0bi1zdWNjZXNzLmRpc2FibGVkLmFjdGl2ZSxcbi5idG4tc3VjY2Vzc1tkaXNhYmxlZF0uYWN0aXZlLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzcy5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWNiODVjO1xuICBib3JkZXItY29sb3I6ICM0Y2FlNGM7XG59XG4uYnRuLXN1Y2Nlc3MgLmJhZGdlIHtcbiAgY29sb3I6ICM1Y2I4NWM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4uYnRuLWluZm8ge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzViYzBkZTtcbiAgYm9yZGVyLWNvbG9yOiAjNDZiOGRhO1xufVxuLmJ0bi1pbmZvOmZvY3VzLFxuLmJ0bi1pbmZvLmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMWIwZDU7XG4gIGJvcmRlci1jb2xvcjogIzFiNmQ4NTtcbn1cbi5idG4taW5mbzpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzFiMGQ1O1xuICBib3JkZXItY29sb3I6ICMyNjlhYmM7XG59XG4uYnRuLWluZm86YWN0aXZlLFxuLmJ0bi1pbmZvLmFjdGl2ZSxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4taW5mbyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzFiMGQ1O1xuICBib3JkZXItY29sb3I6ICMyNjlhYmM7XG59XG4uYnRuLWluZm86YWN0aXZlOmhvdmVyLFxuLmJ0bi1pbmZvLmFjdGl2ZTpob3Zlcixcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4taW5mbzpob3Zlcixcbi5idG4taW5mbzphY3RpdmU6Zm9jdXMsXG4uYnRuLWluZm8uYWN0aXZlOmZvY3VzLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1pbmZvOmZvY3VzLFxuLmJ0bi1pbmZvOmFjdGl2ZS5mb2N1cyxcbi5idG4taW5mby5hY3RpdmUuZm9jdXMsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWluZm8uZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI2OWFiYztcbiAgYm9yZGVyLWNvbG9yOiAjMWI2ZDg1O1xufVxuLmJ0bi1pbmZvOmFjdGl2ZSxcbi5idG4taW5mby5hY3RpdmUsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWluZm8ge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xufVxuLmJ0bi1pbmZvLmRpc2FibGVkLFxuLmJ0bi1pbmZvW2Rpc2FibGVkXSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm8sXG4uYnRuLWluZm8uZGlzYWJsZWQ6aG92ZXIsXG4uYnRuLWluZm9bZGlzYWJsZWRdOmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mbzpob3Zlcixcbi5idG4taW5mby5kaXNhYmxlZDpmb2N1cyxcbi5idG4taW5mb1tkaXNhYmxlZF06Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvOmZvY3VzLFxuLmJ0bi1pbmZvLmRpc2FibGVkLmZvY3VzLFxuLmJ0bi1pbmZvW2Rpc2FibGVkXS5mb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm8uZm9jdXMsXG4uYnRuLWluZm8uZGlzYWJsZWQ6YWN0aXZlLFxuLmJ0bi1pbmZvW2Rpc2FibGVkXTphY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvOmFjdGl2ZSxcbi5idG4taW5mby5kaXNhYmxlZC5hY3RpdmUsXG4uYnRuLWluZm9bZGlzYWJsZWRdLmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm8uYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzViYzBkZTtcbiAgYm9yZGVyLWNvbG9yOiAjNDZiOGRhO1xufVxuLmJ0bi1pbmZvIC5iYWRnZSB7XG4gIGNvbG9yOiAjNWJjMGRlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuLmJ0bi13YXJuaW5nIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7XG4gIGJvcmRlci1jb2xvcjogI2VlYTIzNjtcbn1cbi5idG4td2FybmluZzpmb2N1cyxcbi5idG4td2FybmluZy5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWM5NzFmO1xuICBib3JkZXItY29sb3I6ICM5ODVmMGQ7XG59XG4uYnRuLXdhcm5pbmc6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjOTcxZjtcbiAgYm9yZGVyLWNvbG9yOiAjZDU4NTEyO1xufVxuLmJ0bi13YXJuaW5nOmFjdGl2ZSxcbi5idG4td2FybmluZy5hY3RpdmUsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXdhcm5pbmcge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjOTcxZjtcbiAgYm9yZGVyLWNvbG9yOiAjZDU4NTEyO1xufVxuLmJ0bi13YXJuaW5nOmFjdGl2ZTpob3Zlcixcbi5idG4td2FybmluZy5hY3RpdmU6aG92ZXIsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXdhcm5pbmc6aG92ZXIsXG4uYnRuLXdhcm5pbmc6YWN0aXZlOmZvY3VzLFxuLmJ0bi13YXJuaW5nLmFjdGl2ZTpmb2N1cyxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4td2FybmluZzpmb2N1cyxcbi5idG4td2FybmluZzphY3RpdmUuZm9jdXMsXG4uYnRuLXdhcm5pbmcuYWN0aXZlLmZvY3VzLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi13YXJuaW5nLmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkNTg1MTI7XG4gIGJvcmRlci1jb2xvcjogIzk4NWYwZDtcbn1cbi5idG4td2FybmluZzphY3RpdmUsXG4uYnRuLXdhcm5pbmcuYWN0aXZlLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi13YXJuaW5nIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbn1cbi5idG4td2FybmluZy5kaXNhYmxlZCxcbi5idG4td2FybmluZ1tkaXNhYmxlZF0sXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nLFxuLmJ0bi13YXJuaW5nLmRpc2FibGVkOmhvdmVyLFxuLmJ0bi13YXJuaW5nW2Rpc2FibGVkXTpob3ZlcixcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6aG92ZXIsXG4uYnRuLXdhcm5pbmcuZGlzYWJsZWQ6Zm9jdXMsXG4uYnRuLXdhcm5pbmdbZGlzYWJsZWRdOmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZzpmb2N1cyxcbi5idG4td2FybmluZy5kaXNhYmxlZC5mb2N1cyxcbi5idG4td2FybmluZ1tkaXNhYmxlZF0uZm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nLmZvY3VzLFxuLmJ0bi13YXJuaW5nLmRpc2FibGVkOmFjdGl2ZSxcbi5idG4td2FybmluZ1tkaXNhYmxlZF06YWN0aXZlLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZzphY3RpdmUsXG4uYnRuLXdhcm5pbmcuZGlzYWJsZWQuYWN0aXZlLFxuLmJ0bi13YXJuaW5nW2Rpc2FibGVkXS5hY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nLmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7XG4gIGJvcmRlci1jb2xvcjogI2VlYTIzNjtcbn1cbi5idG4td2FybmluZyAuYmFkZ2Uge1xuICBjb2xvcjogI2YwYWQ0ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5idG4tZGFuZ2VyIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOTUzNGY7XG4gIGJvcmRlci1jb2xvcjogI2Q0M2YzYTtcbn1cbi5idG4tZGFuZ2VyOmZvY3VzLFxuLmJ0bi1kYW5nZXIuZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M5MzAyYztcbiAgYm9yZGVyLWNvbG9yOiAjNzYxYzE5O1xufVxuLmJ0bi1kYW5nZXI6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M5MzAyYztcbiAgYm9yZGVyLWNvbG9yOiAjYWMyOTI1O1xufVxuLmJ0bi1kYW5nZXI6YWN0aXZlLFxuLmJ0bi1kYW5nZXIuYWN0aXZlLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1kYW5nZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M5MzAyYztcbiAgYm9yZGVyLWNvbG9yOiAjYWMyOTI1O1xufVxuLmJ0bi1kYW5nZXI6YWN0aXZlOmhvdmVyLFxuLmJ0bi1kYW5nZXIuYWN0aXZlOmhvdmVyLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1kYW5nZXI6aG92ZXIsXG4uYnRuLWRhbmdlcjphY3RpdmU6Zm9jdXMsXG4uYnRuLWRhbmdlci5hY3RpdmU6Zm9jdXMsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWRhbmdlcjpmb2N1cyxcbi5idG4tZGFuZ2VyOmFjdGl2ZS5mb2N1cyxcbi5idG4tZGFuZ2VyLmFjdGl2ZS5mb2N1cyxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tZGFuZ2VyLmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNhYzI5MjU7XG4gIGJvcmRlci1jb2xvcjogIzc2MWMxOTtcbn1cbi5idG4tZGFuZ2VyOmFjdGl2ZSxcbi5idG4tZGFuZ2VyLmFjdGl2ZSxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tZGFuZ2VyIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbn1cbi5idG4tZGFuZ2VyLmRpc2FibGVkLFxuLmJ0bi1kYW5nZXJbZGlzYWJsZWRdLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyLFxuLmJ0bi1kYW5nZXIuZGlzYWJsZWQ6aG92ZXIsXG4uYnRuLWRhbmdlcltkaXNhYmxlZF06aG92ZXIsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kYW5nZXI6aG92ZXIsXG4uYnRuLWRhbmdlci5kaXNhYmxlZDpmb2N1cyxcbi5idG4tZGFuZ2VyW2Rpc2FibGVkXTpmb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlcjpmb2N1cyxcbi5idG4tZGFuZ2VyLmRpc2FibGVkLmZvY3VzLFxuLmJ0bi1kYW5nZXJbZGlzYWJsZWRdLmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyLmZvY3VzLFxuLmJ0bi1kYW5nZXIuZGlzYWJsZWQ6YWN0aXZlLFxuLmJ0bi1kYW5nZXJbZGlzYWJsZWRdOmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlcjphY3RpdmUsXG4uYnRuLWRhbmdlci5kaXNhYmxlZC5hY3RpdmUsXG4uYnRuLWRhbmdlcltkaXNhYmxlZF0uYWN0aXZlLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyLmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOTUzNGY7XG4gIGJvcmRlci1jb2xvcjogI2Q0M2YzYTtcbn1cbi5idG4tZGFuZ2VyIC5iYWRnZSB7XG4gIGNvbG9yOiAjZDk1MzRmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuLmJ0bi1saW5rIHtcbiAgY29sb3I6ICMzMzdhYjc7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4uYnRuLWxpbmssXG4uYnRuLWxpbms6YWN0aXZlLFxuLmJ0bi1saW5rLmFjdGl2ZSxcbi5idG4tbGlua1tkaXNhYmxlZF0sXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1saW5rIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5idG4tbGluayxcbi5idG4tbGluazpob3Zlcixcbi5idG4tbGluazpmb2N1cyxcbi5idG4tbGluazphY3RpdmUge1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xufVxuLmJ0bi1saW5rOmhvdmVyLFxuLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICMyMzUyN2M7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi5idG4tbGlua1tkaXNhYmxlZF06aG92ZXIsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1saW5rOmhvdmVyLFxuLmJ0bi1saW5rW2Rpc2FibGVkXTpmb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxpbms6Zm9jdXMge1xuICBjb2xvcjogIzc3Nzc3NztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmJ0bi1sZyxcbi5idG4tZ3JvdXAtbGcgPiAuYnRuIHtcbiAgcGFkZGluZzogMTBweCAxNnB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMzMzMzM7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbn1cbi5idG4tc20sXG4uYnRuLWdyb3VwLXNtID4gLmJ0biB7XG4gIHBhZGRpbmc6IDVweCAxMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cbi5idG4teHMsXG4uYnRuLWdyb3VwLXhzID4gLmJ0biB7XG4gIHBhZGRpbmc6IDFweCA1cHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuLmJ0bi1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbn1cbi5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcbiAgbWFyZ2luLXRvcDogNXB4O1xufVxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXS5idG4tYmxvY2ssXG5pbnB1dFt0eXBlPVwicmVzZXRcIl0uYnRuLWJsb2NrLFxuaW5wdXRbdHlwZT1cImJ1dHRvblwiXS5idG4tYmxvY2sge1xuICB3aWR0aDogMTAwJTtcbn1cbi5mYWRlIHtcbiAgb3BhY2l0eTogMDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGxpbmVhcjtcbiAgLW8tdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyO1xufVxuLmZhZGUuaW4ge1xuICBvcGFjaXR5OiAxO1xufVxuLmNvbGxhcHNlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5jb2xsYXBzZS5pbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxudHIuY29sbGFwc2UuaW4ge1xuICBkaXNwbGF5OiB0YWJsZS1yb3c7XG59XG50Ym9keS5jb2xsYXBzZS5pbiB7XG4gIGRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cDtcbn1cbi5jb2xsYXBzaW5nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogaGVpZ2h0LCB2aXNpYmlsaXR5O1xuICB0cmFuc2l0aW9uLXByb3BlcnR5OiBoZWlnaHQsIHZpc2liaWxpdHk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zNXM7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMzVzO1xuICAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTtcbn1cbi5jYXJldCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgbWFyZ2luLWxlZnQ6IDJweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgYm9yZGVyLXRvcDogNHB4IGRhc2hlZDtcbiAgYm9yZGVyLXRvcDogNHB4IHNvbGlkIFxcOTtcbiAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7XG59XG4uZHJvcHVwLFxuLmRyb3Bkb3duIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XG4gIG91dGxpbmU6IDA7XG59XG4uZHJvcGRvd24tbWVudSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAxMDAlO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxMDAwO1xuICBkaXNwbGF5OiBub25lO1xuICBmbG9hdDogbGVmdDtcbiAgbWluLXdpZHRoOiAxNjBweDtcbiAgcGFkZGluZzogNXB4IDA7XG4gIG1hcmdpbjogMnB4IDAgMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCA2cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTc1KTtcbiAgYm94LXNoYWRvdzogMCA2cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTc1KTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbn1cbi5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHQge1xuICByaWdodDogMDtcbiAgbGVmdDogYXV0bztcbn1cbi5kcm9wZG93bi1tZW51IC5kaXZpZGVyIHtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogOXB4IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNWU1ZTU7XG59XG4uZHJvcGRvd24tbWVudSA+IGxpID4gYSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAzcHggMjBweDtcbiAgY2xlYXI6IGJvdGg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xuICBjb2xvcjogIzMzMzMzMztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbi5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmhvdmVyLFxuLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjMjYyNjI2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxuLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSxcbi5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4uZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgb3V0bGluZTogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzN2FiNztcbn1cbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYSxcbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpob3Zlcixcbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjNzc3Nzc3O1xufVxuLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLFxuLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZCA9IGZhbHNlKTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5vcGVuID4gLmRyb3Bkb3duLW1lbnUge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5vcGVuID4gYSB7XG4gIG91dGxpbmU6IDA7XG59XG4uZHJvcGRvd24tbWVudS1yaWdodCB7XG4gIGxlZnQ6IGF1dG87XG4gIHJpZ2h0OiAwO1xufVxuLmRyb3Bkb3duLW1lbnUtbGVmdCB7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiBhdXRvO1xufVxuLmRyb3Bkb3duLWhlYWRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAzcHggMjBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgY29sb3I6ICM3Nzc3Nzc7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4uZHJvcGRvd24tYmFja2Ryb3Age1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIHRvcDogMDtcbiAgei1pbmRleDogOTkwO1xufVxuLnB1bGwtcmlnaHQgPiAuZHJvcGRvd24tbWVudSB7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiBhdXRvO1xufVxuLmRyb3B1cCAuY2FyZXQsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmNhcmV0IHtcbiAgYm9yZGVyLXRvcDogMDtcbiAgYm9yZGVyLWJvdHRvbTogNHB4IGRhc2hlZDtcbiAgYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkIFxcOTtcbiAgY29udGVudDogXCJcIjtcbn1cbi5kcm9wdXAgLmRyb3Bkb3duLW1lbnUsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUge1xuICB0b3A6IGF1dG87XG4gIGJvdHRvbTogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMnB4O1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXItcmlnaHQgLmRyb3Bkb3duLW1lbnUge1xuICAgIGxlZnQ6IGF1dG87XG4gICAgcmlnaHQ6IDA7XG4gIH1cbiAgLm5hdmJhci1yaWdodCAuZHJvcGRvd24tbWVudS1sZWZ0IHtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiBhdXRvO1xuICB9XG59XG4uYnRuLWdyb3VwLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ0bi1ncm91cCA+IC5idG4sXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uYnRuLWdyb3VwID4gLmJ0bjpob3Zlcixcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmhvdmVyLFxuLmJ0bi1ncm91cCA+IC5idG46Zm9jdXMsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpmb2N1cyxcbi5idG4tZ3JvdXAgPiAuYnRuOmFjdGl2ZSxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmFjdGl2ZSxcbi5idG4tZ3JvdXAgPiAuYnRuLmFjdGl2ZSxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLmFjdGl2ZSB7XG4gIHotaW5kZXg6IDI7XG59XG4uYnRuLWdyb3VwIC5idG4gKyAuYnRuLFxuLmJ0bi1ncm91cCAuYnRuICsgLmJ0bi1ncm91cCxcbi5idG4tZ3JvdXAgLmJ0bi1ncm91cCArIC5idG4sXG4uYnRuLWdyb3VwIC5idG4tZ3JvdXAgKyAuYnRuLWdyb3VwIHtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG59XG4uYnRuLXRvb2xiYXIge1xuICBtYXJnaW4tbGVmdDogLTVweDtcbn1cbi5idG4tdG9vbGJhciAuYnRuLFxuLmJ0bi10b29sYmFyIC5idG4tZ3JvdXAsXG4uYnRuLXRvb2xiYXIgLmlucHV0LWdyb3VwIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uYnRuLXRvb2xiYXIgPiAuYnRuLFxuLmJ0bi10b29sYmFyID4gLmJ0bi1ncm91cCxcbi5idG4tdG9vbGJhciA+IC5pbnB1dC1ncm91cCB7XG4gIG1hcmdpbi1sZWZ0OiA1cHg7XG59XG4uYnRuLWdyb3VwID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmJ0bi1ncm91cCA+IC5idG46Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSkge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwID4gLmJ0bjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpLFxuLmJ0bi1ncm91cCA+IC5kcm9wZG93bi10b2dnbGU6bm90KDpmaXJzdC1jaGlsZCkge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xufVxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXAge1xuICBmbG9hdDogbGVmdDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuOmxhc3QtY2hpbGQsXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpID4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuOmZpcnN0LWNoaWxkIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbn1cbi5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUsXG4uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIG91dGxpbmU6IDA7XG59XG4uYnRuLWdyb3VwID4gLmJ0biArIC5kcm9wZG93bi10b2dnbGUge1xuICBwYWRkaW5nLWxlZnQ6IDhweDtcbiAgcGFkZGluZy1yaWdodDogOHB4O1xufVxuLmJ0bi1ncm91cCA+IC5idG4tbGcgKyAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgcGFkZGluZy1sZWZ0OiAxMnB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxMnB4O1xufVxuLmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGUge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTI1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xufVxuLmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGUuYnRuLWxpbmsge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XG4uYnRuIC5jYXJldCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmJ0bi1sZyAuY2FyZXQge1xuICBib3JkZXItd2lkdGg6IDVweCA1cHggMDtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbn1cbi5kcm9wdXAgLmJ0bi1sZyAuY2FyZXQge1xuICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDtcbn1cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cCA+IC5idG4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZmxvYXQ6IG5vbmU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cCA+IC5idG4ge1xuICBmbG9hdDogbm9uZTtcbn1cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuICsgLmJ0bixcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuICsgLmJ0bi1ncm91cCxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwICsgLmJ0bixcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwICsgLmJ0bi1ncm91cCB7XG4gIG1hcmdpbi10b3A6IC0xcHg7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbn1cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuOmxhc3QtY2hpbGQsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpID4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xufVxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG46Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbn1cbi5idG4tZ3JvdXAtanVzdGlmaWVkIHtcbiAgZGlzcGxheTogdGFibGU7XG4gIHdpZHRoOiAxMDAlO1xuICB0YWJsZS1sYXlvdXQ6IGZpeGVkO1xuICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlO1xufVxuLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLFxuLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLWdyb3VwIHtcbiAgZmxvYXQ6IG5vbmU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIHdpZHRoOiAxJTtcbn1cbi5idG4tZ3JvdXAtanVzdGlmaWVkID4gLmJ0bi1ncm91cCAuYnRuIHtcbiAgd2lkdGg6IDEwMCU7XG59XG4uYnRuLWdyb3VwLWp1c3RpZmllZCA+IC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUge1xuICBsZWZ0OiBhdXRvO1xufVxuW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXSA+IC5idG4gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXSA+IC5idG4tZ3JvdXAgPiAuYnRuIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbltkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIl0gPiAuYnRuIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbltkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIl0gPiAuYnRuLWdyb3VwID4gLmJ0biBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLmlucHV0LWdyb3VwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbn1cbi5pbnB1dC1ncm91cFtjbGFzcyo9XCJjb2wtXCJdIHtcbiAgZmxvYXQ6IG5vbmU7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgcGFkZGluZy1yaWdodDogMDtcbn1cbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAyO1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4ge1xuICBoZWlnaHQ6IDQ2cHg7XG4gIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzO1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG5zZWxlY3QuaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLFxuc2VsZWN0LmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuc2VsZWN0LmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4ge1xuICBoZWlnaHQ6IDQ2cHg7XG4gIGxpbmUtaGVpZ2h0OiA0NnB4O1xufVxudGV4dGFyZWEuaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLFxudGV4dGFyZWEuaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYWRkb24sXG50ZXh0YXJlYS5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuLFxuc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1sZyA+IC5mb3JtLWNvbnRyb2wsXG5zZWxlY3RbbXVsdGlwbGVdLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmlucHV0LWdyb3VwLXNtID4gLmZvcm0tY29udHJvbCxcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICBwYWRkaW5nOiA1cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS41O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5zZWxlY3QuaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sLFxuc2VsZWN0LmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuc2VsZWN0LmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4ge1xuICBoZWlnaHQ6IDMwcHg7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xufVxudGV4dGFyZWEuaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sLFxudGV4dGFyZWEuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYWRkb24sXG50ZXh0YXJlYS5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuLFxuc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2wsXG5zZWxlY3RbbXVsdGlwbGVdLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWJ0bixcbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sIHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbn1cbi5pbnB1dC1ncm91cC1hZGRvbjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLFxuLmlucHV0LWdyb3VwLWJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLFxuLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2w6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4uaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtYnRuIHtcbiAgd2lkdGg6IDElO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmlucHV0LWdyb3VwLWFkZG9uIHtcbiAgcGFkZGluZzogNnB4IDEycHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiAjNTU1NTU1O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cbi5pbnB1dC1ncm91cC1hZGRvbi5pbnB1dC1zbSB7XG4gIHBhZGRpbmc6IDVweCAxMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cbi5pbnB1dC1ncm91cC1hZGRvbi5pbnB1dC1sZyB7XG4gIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG4uaW5wdXQtZ3JvdXAtYWRkb24gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmlucHV0LWdyb3VwLWFkZG9uIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpmaXJzdC1jaGlsZCxcbi5pbnB1dC1ncm91cC1hZGRvbjpmaXJzdC1jaGlsZCxcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4tZ3JvdXAgPiAuYnRuLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5kcm9wZG93bi10b2dnbGUsXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpLFxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bi1ncm91cDpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbn1cbi5pbnB1dC1ncm91cC1hZGRvbjpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1yaWdodDogMDtcbn1cbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmxhc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZCxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5kcm9wZG93bi10b2dnbGUsXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKSxcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0biB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG59XG4uaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1sZWZ0OiAwO1xufVxuLmlucHV0LWdyb3VwLWJ0biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZm9udC1zaXplOiAwO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuLmlucHV0LWdyb3VwLWJ0biA+IC5idG4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biArIC5idG4ge1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cbi5pbnB1dC1ncm91cC1idG4gPiAuYnRuOmhvdmVyLFxuLmlucHV0LWdyb3VwLWJ0biA+IC5idG46Zm9jdXMsXG4uaW5wdXQtZ3JvdXAtYnRuID4gLmJ0bjphY3RpdmUge1xuICB6LWluZGV4OiAyO1xufVxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cCB7XG4gIG1hcmdpbi1yaWdodDogLTFweDtcbn1cbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwIHtcbiAgei1pbmRleDogMjtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG59XG4ubmF2IHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuLm5hdiA+IGxpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5uYXYgPiBsaSA+IGEge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAxMHB4IDE1cHg7XG59XG4ubmF2ID4gbGkgPiBhOmhvdmVyLFxuLm5hdiA+IGxpID4gYTpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTtcbn1cbi5uYXYgPiBsaS5kaXNhYmxlZCA+IGEge1xuICBjb2xvcjogIzc3Nzc3Nztcbn1cbi5uYXYgPiBsaS5kaXNhYmxlZCA+IGE6aG92ZXIsXG4ubmF2ID4gbGkuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICM3Nzc3Nzc7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ubmF2IC5vcGVuID4gYSxcbi5uYXYgLm9wZW4gPiBhOmhvdmVyLFxuLm5hdiAub3BlbiA+IGE6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xuICBib3JkZXItY29sb3I6ICMzMzdhYjc7XG59XG4ubmF2IC5uYXYtZGl2aWRlciB7XG4gIGhlaWdodDogMXB4O1xuICBtYXJnaW46IDlweCAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTVlNWU1O1xufVxuLm5hdiA+IGxpID4gYSA+IGltZyB7XG4gIG1heC13aWR0aDogbm9uZTtcbn1cbi5uYXYtdGFicyB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xufVxuLm5hdi10YWJzID4gbGkge1xuICBmbG9hdDogbGVmdDtcbiAgbWFyZ2luLWJvdHRvbTogLTFweDtcbn1cbi5uYXYtdGFicyA+IGxpID4gYSB7XG4gIG1hcmdpbi1yaWdodDogMnB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwO1xufVxuLm5hdi10YWJzID4gbGkgPiBhOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjZWVlZWVlICNlZWVlZWUgI2RkZDtcbn1cbi5uYXYtdGFicyA+IGxpLmFjdGl2ZSA+IGEsXG4ubmF2LXRhYnMgPiBsaS5hY3RpdmUgPiBhOmhvdmVyLFxuLm5hdi10YWJzID4gbGkuYWN0aXZlID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjNTU1NTU1O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQge1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cbi5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkge1xuICBmbG9hdDogbm9uZTtcbn1cbi5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkgPiBhIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG4ubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSB7XG4gIHRvcDogYXV0bztcbiAgbGVmdDogYXV0bztcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IGxpIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIHdpZHRoOiAxJTtcbiAgfVxuICAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IGxpID4gYSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cbi5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGEsXG4ubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwO1xuICB9XG4gIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGEsXG4gIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4gIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7XG4gIH1cbn1cbi5uYXYtcGlsbHMgPiBsaSB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLm5hdi1waWxscyA+IGxpID4gYSB7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cbi5uYXYtcGlsbHMgPiBsaSArIGxpIHtcbiAgbWFyZ2luLWxlZnQ6IDJweDtcbn1cbi5uYXYtcGlsbHMgPiBsaS5hY3RpdmUgPiBhLFxuLm5hdi1waWxscyA+IGxpLmFjdGl2ZSA+IGE6aG92ZXIsXG4ubmF2LXBpbGxzID4gbGkuYWN0aXZlID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3O1xufVxuLm5hdi1zdGFja2VkID4gbGkge1xuICBmbG9hdDogbm9uZTtcbn1cbi5uYXYtc3RhY2tlZCA+IGxpICsgbGkge1xuICBtYXJnaW4tdG9wOiAycHg7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLm5hdi1qdXN0aWZpZWQge1xuICB3aWR0aDogMTAwJTtcbn1cbi5uYXYtanVzdGlmaWVkID4gbGkge1xuICBmbG9hdDogbm9uZTtcbn1cbi5uYXYtanVzdGlmaWVkID4gbGkgPiBhIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG4ubmF2LWp1c3RpZmllZCA+IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSB7XG4gIHRvcDogYXV0bztcbiAgbGVmdDogYXV0bztcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2LWp1c3RpZmllZCA+IGxpIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIHdpZHRoOiAxJTtcbiAgfVxuICAubmF2LWp1c3RpZmllZCA+IGxpID4gYSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuLm5hdi10YWJzLWp1c3RpZmllZCB7XG4gIGJvcmRlci1ib3R0b206IDA7XG59XG4ubmF2LXRhYnMtanVzdGlmaWVkID4gbGkgPiBhIHtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4ubmF2LXRhYnMtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGEsXG4ubmF2LXRhYnMtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4ubmF2LXRhYnMtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXYtdGFicy1qdXN0aWZpZWQgPiBsaSA+IGEge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwO1xuICB9XG4gIC5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYSxcbiAgLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuICAubmF2LXRhYnMtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7XG4gIH1cbn1cbi50YWItY29udGVudCA+IC50YWItcGFuZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4udGFiLWNvbnRlbnQgPiAuYWN0aXZlIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ubmF2LXRhYnMgLmRyb3Bkb3duLW1lbnUge1xuICBtYXJnaW4tdG9wOiAtMXB4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbn1cbi5uYXZiYXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1pbi1oZWlnaHQ6IDUwcHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXItaGVhZGVyIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxufVxuLm5hdmJhci1jb2xsYXBzZSB7XG4gIG92ZXJmbG93LXg6IHZpc2libGU7XG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7XG4gIHBhZGRpbmctbGVmdDogMTVweDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xufVxuLm5hdmJhci1jb2xsYXBzZS5pbiB7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdmJhci1jb2xsYXBzZSB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG4gIC5uYXZiYXItY29sbGFwc2UuY29sbGFwc2Uge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDtcbiAgfVxuICAubmF2YmFyLWNvbGxhcHNlLmluIHtcbiAgICBvdmVyZmxvdy15OiB2aXNpYmxlO1xuICB9XG4gIC5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItY29sbGFwc2UsXG4gIC5uYXZiYXItc3RhdGljLXRvcCAubmF2YmFyLWNvbGxhcHNlLFxuICAubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWNvbGxhcHNlIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgfVxufVxuLm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1jb2xsYXBzZSxcbi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItY29sbGFwc2Uge1xuICBtYXgtaGVpZ2h0OiAzNDBweDtcbn1cbkBtZWRpYSAobWF4LWRldmljZS13aWR0aDogNDgwcHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWNvbGxhcHNlLFxuICAubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWNvbGxhcHNlIHtcbiAgICBtYXgtaGVpZ2h0OiAyMDBweDtcbiAgfVxufVxuLmNvbnRhaW5lciA+IC5uYXZiYXItaGVhZGVyLFxuLmNvbnRhaW5lci1mbHVpZCA+IC5uYXZiYXItaGVhZGVyLFxuLmNvbnRhaW5lciA+IC5uYXZiYXItY29sbGFwc2UsXG4uY29udGFpbmVyLWZsdWlkID4gLm5hdmJhci1jb2xsYXBzZSB7XG4gIG1hcmdpbi1yaWdodDogLTE1cHg7XG4gIG1hcmdpbi1sZWZ0OiAtMTVweDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29udGFpbmVyID4gLm5hdmJhci1oZWFkZXIsXG4gIC5jb250YWluZXItZmx1aWQgPiAubmF2YmFyLWhlYWRlcixcbiAgLmNvbnRhaW5lciA+IC5uYXZiYXItY29sbGFwc2UsXG4gIC5jb250YWluZXItZmx1aWQgPiAubmF2YmFyLWNvbGxhcHNlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbn1cbi5uYXZiYXItc3RhdGljLXRvcCB7XG4gIHotaW5kZXg6IDEwMDA7XG4gIGJvcmRlci13aWR0aDogMCAwIDFweDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2YmFyLXN0YXRpYy10b3Age1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gIH1cbn1cbi5uYXZiYXItZml4ZWQtdG9wLFxuLm5hdmJhci1maXhlZC1ib3R0b20ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxMDMwO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXItZml4ZWQtdG9wLFxuICAubmF2YmFyLWZpeGVkLWJvdHRvbSB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxufVxuLm5hdmJhci1maXhlZC10b3Age1xuICB0b3A6IDA7XG4gIGJvcmRlci13aWR0aDogMCAwIDFweDtcbn1cbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgYm90dG9tOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBib3JkZXItd2lkdGg6IDFweCAwIDA7XG59XG4ubmF2YmFyLWJyYW5kIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHBhZGRpbmc6IDE1cHggMTVweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgaGVpZ2h0OiA1MHB4O1xufVxuLm5hdmJhci1icmFuZDpob3Zlcixcbi5uYXZiYXItYnJhbmQ6Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4ubmF2YmFyLWJyYW5kID4gaW1nIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdmJhciA+IC5jb250YWluZXIgLm5hdmJhci1icmFuZCxcbiAgLm5hdmJhciA+IC5jb250YWluZXItZmx1aWQgLm5hdmJhci1icmFuZCB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xNXB4O1xuICB9XG59XG4ubmF2YmFyLXRvZ2dsZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxvYXQ6IHJpZ2h0O1xuICBtYXJnaW4tcmlnaHQ6IDE1cHg7XG4gIHBhZGRpbmc6IDlweCAxMHB4O1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4ubmF2YmFyLXRvZ2dsZTpmb2N1cyB7XG4gIG91dGxpbmU6IDA7XG59XG4ubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDIycHg7XG4gIGhlaWdodDogMnB4O1xuICBib3JkZXItcmFkaXVzOiAxcHg7XG59XG4ubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIgKyAuaWNvbi1iYXIge1xuICBtYXJnaW4tdG9wOiA0cHg7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdmJhci10b2dnbGUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5uYXZiYXItbmF2IHtcbiAgbWFyZ2luOiA3LjVweCAtMTVweDtcbn1cbi5uYXZiYXItbmF2ID4gbGkgPiBhIHtcbiAgcGFkZGluZy10b3A6IDEwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSB7XG4gICAgcG9zaXRpb246IHN0YXRpYztcbiAgICBmbG9hdDogbm9uZTtcbiAgICB3aWR0aDogYXV0bztcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlcjogMDtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG4gIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhLFxuICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVyIHtcbiAgICBwYWRkaW5nOiA1cHggMTVweCA1cHggMjVweDtcbiAgfVxuICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYSB7XG4gICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIH1cbiAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIsXG4gIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdmJhci1uYXYge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbjogMDtcbiAgfVxuICAubmF2YmFyLW5hdiA+IGxpIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxuICAubmF2YmFyLW5hdiA+IGxpID4gYSB7XG4gICAgcGFkZGluZy10b3A6IDE1cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDE1cHg7XG4gIH1cbn1cbi5uYXZiYXItZm9ybSB7XG4gIG1hcmdpbi1sZWZ0OiAtMTVweDtcbiAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcbiAgcGFkZGluZzogMTBweCAxNXB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSwgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpLCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcbiAgbWFyZ2luLXRvcDogOHB4O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5uYXZiYXItZm9ybSAuZm9ybS1jb250cm9sIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAubmF2YmFyLWZvcm0gLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxuICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtdGFibGU7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1hZGRvbixcbiAgLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYnRuLFxuICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wge1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG4gIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAubmF2YmFyLWZvcm0gLmNvbnRyb2wtbGFiZWwge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAubmF2YmFyLWZvcm0gLnJhZGlvLFxuICAubmF2YmFyLWZvcm0gLmNoZWNrYm94IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIH1cbiAgLm5hdmJhci1mb3JtIC5yYWRpbyBsYWJlbCxcbiAgLm5hdmJhci1mb3JtIC5jaGVja2JveCBsYWJlbCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICB9XG4gIC5uYXZiYXItZm9ybSAucmFkaW8gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuICAubmF2YmFyLWZvcm0gLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICB9XG4gIC5uYXZiYXItZm9ybSAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgIHRvcDogMDtcbiAgfVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5uYXZiYXItZm9ybSAuZm9ybS1ncm91cCB7XG4gICAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICB9XG4gIC5uYXZiYXItZm9ybSAuZm9ybS1ncm91cDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdmJhci1mb3JtIHtcbiAgICB3aWR0aDogYXV0bztcbiAgICBib3JkZXI6IDA7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG59XG4ubmF2YmFyLW5hdiA+IGxpID4gLmRyb3Bkb3duLW1lbnUge1xuICBtYXJnaW4tdG9wOiAwO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbn1cbi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItbmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG59XG4ubmF2YmFyLWJ0biB7XG4gIG1hcmdpbi10b3A6IDhweDtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xufVxuLm5hdmJhci1idG4uYnRuLXNtIHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbi5uYXZiYXItYnRuLmJ0bi14cyB7XG4gIG1hcmdpbi10b3A6IDE0cHg7XG4gIG1hcmdpbi1ib3R0b206IDE0cHg7XG59XG4ubmF2YmFyLXRleHQge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXItdGV4dCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLWxlZnQ6IDE1cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdmJhci1sZWZ0IHtcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xuICB9XG4gIC5uYXZiYXItcmlnaHQge1xuICAgIGZsb2F0OiByaWdodCAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi1yaWdodDogLTE1cHg7XG4gIH1cbiAgLm5hdmJhci1yaWdodCB+IC5uYXZiYXItcmlnaHQge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxufVxuLm5hdmJhci1kZWZhdWx0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODtcbiAgYm9yZGVyLWNvbG9yOiAjZTdlN2U3O1xufVxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItYnJhbmQge1xuICBjb2xvcjogIzc3Nztcbn1cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kOmhvdmVyLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItYnJhbmQ6Zm9jdXMge1xuICBjb2xvcjogIzVlNWU1ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10ZXh0IHtcbiAgY29sb3I6ICM3Nzc7XG59XG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiBsaSA+IGEge1xuICBjb2xvcjogIzc3Nztcbn1cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpID4gYTpob3Zlcixcbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5hY3RpdmUgPiBhLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjNTU1O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdlN2U3O1xufVxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYSxcbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICNjY2M7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlIHtcbiAgYm9yZGVyLWNvbG9yOiAjZGRkO1xufVxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlOmhvdmVyLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDtcbn1cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODg4O1xufVxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItY29sbGFwc2UsXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1mb3JtIHtcbiAgYm9yZGVyLWNvbG9yOiAjZTdlN2U3O1xufVxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhOmhvdmVyLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U3ZTdlNztcbiAgY29sb3I6ICM1NTU7XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHtcbiAgICBjb2xvcjogIzc3NztcbiAgfVxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIsXG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpmb2N1cyB7XG4gICAgY29sb3I6ICMzMzM7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEsXG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gICAgY29sb3I6ICM1NTU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2U3ZTdlNztcbiAgfVxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhLFxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLFxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogI2NjYztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxufVxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbGluayB7XG4gIGNvbG9yOiAjNzc3O1xufVxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbGluazpob3ZlciB7XG4gIGNvbG9yOiAjMzMzO1xufVxuLm5hdmJhci1kZWZhdWx0IC5idG4tbGluayB7XG4gIGNvbG9yOiAjNzc3O1xufVxuLm5hdmJhci1kZWZhdWx0IC5idG4tbGluazpob3Zlcixcbi5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbms6Zm9jdXMge1xuICBjb2xvcjogIzMzMztcbn1cbi5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbms6aG92ZXIsXG4ubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rW2Rpc2FibGVkXTpmb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICNjY2M7XG59XG4ubmF2YmFyLWludmVyc2Uge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyO1xuICBib3JkZXItY29sb3I6ICMwODA4MDg7XG59XG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZCB7XG4gIGNvbG9yOiAjOWQ5ZDlkO1xufVxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQ6aG92ZXIsXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZDpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRleHQge1xuICBjb2xvcjogIzlkOWQ5ZDtcbn1cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IGxpID4gYSB7XG4gIGNvbG9yOiAjOWQ5ZDlkO1xufVxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gbGkgPiBhOmhvdmVyLFxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gbGkgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmFjdGl2ZSA+IGEsXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuYWN0aXZlID4gYTpob3Zlcixcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwODA4MDg7XG59XG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhLFxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYTpob3Zlcixcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICBjb2xvcjogIzQ0NDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGUge1xuICBib3JkZXItY29sb3I6ICMzMzM7XG59XG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGU6aG92ZXIsXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGU6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzO1xufVxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdG9nZ2xlIC5pY29uLWJhciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1jb2xsYXBzZSxcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWZvcm0ge1xuICBib3JkZXItY29sb3I6ICMxMDEwMTA7XG59XG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAub3BlbiA+IGEsXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAub3BlbiA+IGE6aG92ZXIsXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAub3BlbiA+IGE6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDgwODA4O1xuICBjb2xvcjogI2ZmZjtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuZHJvcGRvd24taGVhZGVyIHtcbiAgICBib3JkZXItY29sb3I6ICMwODA4MDg7XG4gIH1cbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IC5kaXZpZGVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDgwODA4O1xuICB9XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYSB7XG4gICAgY29sb3I6ICM5ZDlkOWQ7XG4gIH1cbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmhvdmVyLFxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMge1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhLFxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpob3ZlcixcbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMwODA4MDg7XG4gIH1cbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYSxcbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpob3ZlcixcbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gICAgY29sb3I6ICM0NDQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbn1cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbmsge1xuICBjb2xvcjogIzlkOWQ5ZDtcbn1cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbms6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbn1cbi5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbmsge1xuICBjb2xvcjogIzlkOWQ5ZDtcbn1cbi5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbms6aG92ZXIsXG4ubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG59XG4ubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rW2Rpc2FibGVkXTpob3ZlcixcbmZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmhvdmVyLFxuLm5hdmJhci1pbnZlcnNlIC5idG4tbGlua1tkaXNhYmxlZF06Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLm5hdmJhci1pbnZlcnNlIC5idG4tbGluazpmb2N1cyB7XG4gIGNvbG9yOiAjNDQ0O1xufVxuLmJyZWFkY3J1bWIge1xuICBwYWRkaW5nOiA4cHggMTVweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLmJyZWFkY3J1bWIgPiBsaSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5icmVhZGNydW1iID4gbGkgKyBsaTpiZWZvcmUge1xuICBjb250ZW50OiBcIi9cXDAwYTBcIjtcbiAgcGFkZGluZzogMCA1cHg7XG4gIGNvbG9yOiAjY2NjO1xufVxuLmJyZWFkY3J1bWIgPiAuYWN0aXZlIHtcbiAgY29sb3I6ICM3Nzc3Nzc7XG59XG4ucGFnaW5hdGlvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBtYXJnaW46IDIwcHggMDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLnBhZ2luYXRpb24gPiBsaSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbn1cbi5wYWdpbmF0aW9uID4gbGkgPiBhLFxuLnBhZ2luYXRpb24gPiBsaSA+IHNwYW4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsb2F0OiBsZWZ0O1xuICBwYWRkaW5nOiA2cHggMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6ICMzMzdhYjc7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuLnBhZ2luYXRpb24gPiBsaTpmaXJzdC1jaGlsZCA+IGEsXG4ucGFnaW5hdGlvbiA+IGxpOmZpcnN0LWNoaWxkID4gc3BhbiB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDtcbn1cbi5wYWdpbmF0aW9uID4gbGk6bGFzdC1jaGlsZCA+IGEsXG4ucGFnaW5hdGlvbiA+IGxpOmxhc3QtY2hpbGQgPiBzcGFuIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDtcbn1cbi5wYWdpbmF0aW9uID4gbGkgPiBhOmhvdmVyLFxuLnBhZ2luYXRpb24gPiBsaSA+IHNwYW46aG92ZXIsXG4ucGFnaW5hdGlvbiA+IGxpID4gYTpmb2N1cyxcbi5wYWdpbmF0aW9uID4gbGkgPiBzcGFuOmZvY3VzIHtcbiAgei1pbmRleDogMztcbiAgY29sb3I6ICMyMzUyN2M7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7XG4gIGJvcmRlci1jb2xvcjogI2RkZDtcbn1cbi5wYWdpbmF0aW9uID4gLmFjdGl2ZSA+IGEsXG4ucGFnaW5hdGlvbiA+IC5hY3RpdmUgPiBzcGFuLFxuLnBhZ2luYXRpb24gPiAuYWN0aXZlID4gYTpob3Zlcixcbi5wYWdpbmF0aW9uID4gLmFjdGl2ZSA+IHNwYW46aG92ZXIsXG4ucGFnaW5hdGlvbiA+IC5hY3RpdmUgPiBhOmZvY3VzLFxuLnBhZ2luYXRpb24gPiAuYWN0aXZlID4gc3Bhbjpmb2N1cyB7XG4gIHotaW5kZXg6IDI7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3O1xuICBib3JkZXItY29sb3I6ICMzMzdhYjc7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cbi5wYWdpbmF0aW9uID4gLmRpc2FibGVkID4gc3Bhbixcbi5wYWdpbmF0aW9uID4gLmRpc2FibGVkID4gc3Bhbjpob3Zlcixcbi5wYWdpbmF0aW9uID4gLmRpc2FibGVkID4gc3Bhbjpmb2N1cyxcbi5wYWdpbmF0aW9uID4gLmRpc2FibGVkID4gYSxcbi5wYWdpbmF0aW9uID4gLmRpc2FibGVkID4gYTpob3Zlcixcbi5wYWdpbmF0aW9uID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjNzc3Nzc3O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItY29sb3I6ICNkZGQ7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ucGFnaW5hdGlvbi1sZyA+IGxpID4gYSxcbi5wYWdpbmF0aW9uLWxnID4gbGkgPiBzcGFuIHtcbiAgcGFkZGluZzogMTBweCAxNnB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMzMzMzM7XG59XG4ucGFnaW5hdGlvbi1sZyA+IGxpOmZpcnN0LWNoaWxkID4gYSxcbi5wYWdpbmF0aW9uLWxnID4gbGk6Zmlyc3QtY2hpbGQgPiBzcGFuIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNnB4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA2cHg7XG59XG4ucGFnaW5hdGlvbi1sZyA+IGxpOmxhc3QtY2hpbGQgPiBhLFxuLnBhZ2luYXRpb24tbGcgPiBsaTpsYXN0LWNoaWxkID4gc3BhbiB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA2cHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA2cHg7XG59XG4ucGFnaW5hdGlvbi1zbSA+IGxpID4gYSxcbi5wYWdpbmF0aW9uLXNtID4gbGkgPiBzcGFuIHtcbiAgcGFkZGluZzogNXB4IDEwcHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbn1cbi5wYWdpbmF0aW9uLXNtID4gbGk6Zmlyc3QtY2hpbGQgPiBhLFxuLnBhZ2luYXRpb24tc20gPiBsaTpmaXJzdC1jaGlsZCA+IHNwYW4ge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDtcbn1cbi5wYWdpbmF0aW9uLXNtID4gbGk6bGFzdC1jaGlsZCA+IGEsXG4ucGFnaW5hdGlvbi1zbSA+IGxpOmxhc3QtY2hpbGQgPiBzcGFuIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDtcbn1cbi5wYWdlciB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbWFyZ2luOiAyMHB4IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5wYWdlciBsaSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbn1cbi5wYWdlciBsaSA+IGEsXG4ucGFnZXIgbGkgPiBzcGFuIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiA1cHggMTRweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLXJhZGl1czogMTVweDtcbn1cbi5wYWdlciBsaSA+IGE6aG92ZXIsXG4ucGFnZXIgbGkgPiBhOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xufVxuLnBhZ2VyIC5uZXh0ID4gYSxcbi5wYWdlciAubmV4dCA+IHNwYW4ge1xuICBmbG9hdDogcmlnaHQ7XG59XG4ucGFnZXIgLnByZXZpb3VzID4gYSxcbi5wYWdlciAucHJldmlvdXMgPiBzcGFuIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4ucGFnZXIgLmRpc2FibGVkID4gYSxcbi5wYWdlciAuZGlzYWJsZWQgPiBhOmhvdmVyLFxuLnBhZ2VyIC5kaXNhYmxlZCA+IGE6Zm9jdXMsXG4ucGFnZXIgLmRpc2FibGVkID4gc3BhbiB7XG4gIGNvbG9yOiAjNzc3Nzc3O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLmxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lO1xuICBwYWRkaW5nOiAuMmVtIC42ZW0gLjNlbTtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICBib3JkZXItcmFkaXVzOiAuMjVlbTtcbn1cbmEubGFiZWw6aG92ZXIsXG5hLmxhYmVsOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmxhYmVsOmVtcHR5IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5idG4gLmxhYmVsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0xcHg7XG59XG4ubGFiZWwtZGVmYXVsdCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM3Nzc3Nzc7XG59XG4ubGFiZWwtZGVmYXVsdFtocmVmXTpob3Zlcixcbi5sYWJlbC1kZWZhdWx0W2hyZWZdOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVlNWU1ZTtcbn1cbi5sYWJlbC1wcmltYXJ5IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzN2FiNztcbn1cbi5sYWJlbC1wcmltYXJ5W2hyZWZdOmhvdmVyLFxuLmxhYmVsLXByaW1hcnlbaHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjg2MDkwO1xufVxuLmxhYmVsLXN1Y2Nlc3Mge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWNiODVjO1xufVxuLmxhYmVsLXN1Y2Nlc3NbaHJlZl06aG92ZXIsXG4ubGFiZWwtc3VjY2Vzc1tocmVmXTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDlkNDQ7XG59XG4ubGFiZWwtaW5mbyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1YmMwZGU7XG59XG4ubGFiZWwtaW5mb1tocmVmXTpob3Zlcixcbi5sYWJlbC1pbmZvW2hyZWZdOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMxYjBkNTtcbn1cbi5sYWJlbC13YXJuaW5nIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwYWQ0ZTtcbn1cbi5sYWJlbC13YXJuaW5nW2hyZWZdOmhvdmVyLFxuLmxhYmVsLXdhcm5pbmdbaHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWM5NzFmO1xufVxuLmxhYmVsLWRhbmdlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOTUzNGY7XG59XG4ubGFiZWwtZGFuZ2VyW2hyZWZdOmhvdmVyLFxuLmxhYmVsLWRhbmdlcltocmVmXTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjOTMwMmM7XG59XG4uYmFkZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1pbi13aWR0aDogMTBweDtcbiAgcGFkZGluZzogM3B4IDdweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICNmZmY7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICM3Nzc3Nzc7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG59XG4uYmFkZ2U6ZW1wdHkge1xuICBkaXNwbGF5OiBub25lO1xufVxuLmJ0biAuYmFkZ2Uge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogLTFweDtcbn1cbi5idG4teHMgLmJhZGdlLFxuLmJ0bi1ncm91cC14cyA+IC5idG4gLmJhZGdlIHtcbiAgdG9wOiAwO1xuICBwYWRkaW5nOiAxcHggNXB4O1xufVxuYS5iYWRnZTpob3ZlcixcbmEuYmFkZ2U6Zm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSA+IC5iYWRnZSxcbi5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYSA+IC5iYWRnZSB7XG4gIGNvbG9yOiAjMzM3YWI3O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuLmxpc3QtZ3JvdXAtaXRlbSA+IC5iYWRnZSB7XG4gIGZsb2F0OiByaWdodDtcbn1cbi5saXN0LWdyb3VwLWl0ZW0gPiAuYmFkZ2UgKyAuYmFkZ2Uge1xuICBtYXJnaW4tcmlnaHQ6IDVweDtcbn1cbi5uYXYtcGlsbHMgPiBsaSA+IGEgPiAuYmFkZ2Uge1xuICBtYXJnaW4tbGVmdDogM3B4O1xufVxuLmp1bWJvdHJvbiB7XG4gIHBhZGRpbmctdG9wOiAzMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMzBweDtcbiAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7XG59XG4uanVtYm90cm9uIGgxLFxuLmp1bWJvdHJvbiAuaDEge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5qdW1ib3Ryb24gcCB7XG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gIGZvbnQtc2l6ZTogMjFweDtcbiAgZm9udC13ZWlnaHQ6IDIwMDtcbn1cbi5qdW1ib3Ryb24gPiBociB7XG4gIGJvcmRlci10b3AtY29sb3I6ICNkNWQ1ZDU7XG59XG4uY29udGFpbmVyIC5qdW1ib3Ryb24sXG4uY29udGFpbmVyLWZsdWlkIC5qdW1ib3Ryb24ge1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG4uanVtYm90cm9uIC5jb250YWluZXIge1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuanVtYm90cm9uIHtcbiAgICBwYWRkaW5nLXRvcDogNDhweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogNDhweDtcbiAgfVxuICAuY29udGFpbmVyIC5qdW1ib3Ryb24sXG4gIC5jb250YWluZXItZmx1aWQgLmp1bWJvdHJvbiB7XG4gICAgcGFkZGluZy1sZWZ0OiA2MHB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDYwcHg7XG4gIH1cbiAgLmp1bWJvdHJvbiBoMSxcbiAgLmp1bWJvdHJvbiAuaDEge1xuICAgIGZvbnQtc2l6ZTogNjNweDtcbiAgfVxufVxuLnRodW1ibmFpbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiA0cHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYm9yZGVyIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIC1vLXRyYW5zaXRpb246IGJvcmRlciAwLjJzIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBib3JkZXIgMC4ycyBlYXNlLWluLW91dDtcbn1cbi50aHVtYm5haWwgPiBpbWcsXG4udGh1bWJuYWlsIGEgPiBpbWcge1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xufVxuYS50aHVtYm5haWw6aG92ZXIsXG5hLnRodW1ibmFpbDpmb2N1cyxcbmEudGh1bWJuYWlsLmFjdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogIzMzN2FiNztcbn1cbi50aHVtYm5haWwgLmNhcHRpb24ge1xuICBwYWRkaW5nOiA5cHg7XG4gIGNvbG9yOiAjMzMzMzMzO1xufVxuLmFsZXJ0IHtcbiAgcGFkZGluZzogMTVweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cbi5hbGVydCBoNCB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuLmFsZXJ0IC5hbGVydC1saW5rIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4uYWxlcnQgPiBwLFxuLmFsZXJ0ID4gdWwge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLmFsZXJ0ID4gcCArIHAge1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG4uYWxlcnQtZGlzbWlzc2FibGUsXG4uYWxlcnQtZGlzbWlzc2libGUge1xuICBwYWRkaW5nLXJpZ2h0OiAzNXB4O1xufVxuLmFsZXJ0LWRpc21pc3NhYmxlIC5jbG9zZSxcbi5hbGVydC1kaXNtaXNzaWJsZSAuY2xvc2Uge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogLTJweDtcbiAgcmlnaHQ6IC0yMXB4O1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5hbGVydC1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RmZjBkODtcbiAgYm9yZGVyLWNvbG9yOiAjZDZlOWM2O1xuICBjb2xvcjogIzNjNzYzZDtcbn1cbi5hbGVydC1zdWNjZXNzIGhyIHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2M5ZTJiMztcbn1cbi5hbGVydC1zdWNjZXNzIC5hbGVydC1saW5rIHtcbiAgY29sb3I6ICMyYjU0MmM7XG59XG4uYWxlcnQtaW5mbyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7XG4gIGJvcmRlci1jb2xvcjogI2JjZThmMTtcbiAgY29sb3I6ICMzMTcwOGY7XG59XG4uYWxlcnQtaW5mbyBociB7XG4gIGJvcmRlci10b3AtY29sb3I6ICNhNmUxZWM7XG59XG4uYWxlcnQtaW5mbyAuYWxlcnQtbGluayB7XG4gIGNvbG9yOiAjMjQ1MjY5O1xufVxuLmFsZXJ0LXdhcm5pbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzO1xuICBib3JkZXItY29sb3I6ICNmYWViY2M7XG4gIGNvbG9yOiAjOGE2ZDNiO1xufVxuLmFsZXJ0LXdhcm5pbmcgaHIge1xuICBib3JkZXItdG9wLWNvbG9yOiAjZjdlMWI1O1xufVxuLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWxpbmsge1xuICBjb2xvcjogIzY2NTEyYztcbn1cbi5hbGVydC1kYW5nZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlO1xuICBib3JkZXItY29sb3I6ICNlYmNjZDE7XG4gIGNvbG9yOiAjYTk0NDQyO1xufVxuLmFsZXJ0LWRhbmdlciBociB7XG4gIGJvcmRlci10b3AtY29sb3I6ICNlNGI5YzA7XG59XG4uYWxlcnQtZGFuZ2VyIC5hbGVydC1saW5rIHtcbiAgY29sb3I6ICM4NDM1MzQ7XG59XG5ALXdlYmtpdC1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXMge1xuICBmcm9tIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA0MHB4IDA7XG4gIH1cbiAgdG8ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDtcbiAgfVxufVxuQGtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlcyB7XG4gIGZyb20ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDQwcHggMDtcbiAgfVxuICB0byB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xuICB9XG59XG4ucHJvZ3Jlc3Mge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBoZWlnaHQ6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuLnByb2dyZXNzLWJhciB7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzN2FiNztcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IHdpZHRoIDAuNnMgZWFzZTtcbiAgLW8tdHJhbnNpdGlvbjogd2lkdGggMC42cyBlYXNlO1xuICB0cmFuc2l0aW9uOiB3aWR0aCAwLjZzIGVhc2U7XG59XG4ucHJvZ3Jlc3Mtc3RyaXBlZCAucHJvZ3Jlc3MtYmFyLFxuLnByb2dyZXNzLWJhci1zdHJpcGVkIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLXNpemU6IDQwcHggNDBweDtcbn1cbi5wcm9ncmVzcy5hY3RpdmUgLnByb2dyZXNzLWJhcixcbi5wcm9ncmVzcy1iYXIuYWN0aXZlIHtcbiAgLXdlYmtpdC1hbmltYXRpb246IHByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTtcbiAgLW8tYW5pbWF0aW9uOiBwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7XG4gIGFuaW1hdGlvbjogcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlO1xufVxuLnByb2dyZXNzLWJhci1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVjYjg1Yztcbn1cbi5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXItc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbn1cbi5wcm9ncmVzcy1iYXItaW5mbyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1YmMwZGU7XG59XG4ucHJvZ3Jlc3Mtc3RyaXBlZCAucHJvZ3Jlc3MtYmFyLWluZm8ge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG59XG4ucHJvZ3Jlc3MtYmFyLXdhcm5pbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBhZDRlO1xufVxuLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhci13YXJuaW5nIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xufVxuLnByb2dyZXNzLWJhci1kYW5nZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDk1MzRmO1xufVxuLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhci1kYW5nZXIge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG59XG4ubWVkaWEge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuLm1lZGlhOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5tZWRpYSxcbi5tZWRpYS1ib2R5IHtcbiAgem9vbTogMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tZWRpYS1ib2R5IHtcbiAgd2lkdGg6IDEwMDAwcHg7XG59XG4ubWVkaWEtb2JqZWN0IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ubWVkaWEtb2JqZWN0LmltZy10aHVtYm5haWwge1xuICBtYXgtd2lkdGg6IG5vbmU7XG59XG4ubWVkaWEtcmlnaHQsXG4ubWVkaWEgPiAucHVsbC1yaWdodCB7XG4gIHBhZGRpbmctbGVmdDogMTBweDtcbn1cbi5tZWRpYS1sZWZ0LFxuLm1lZGlhID4gLnB1bGwtbGVmdCB7XG4gIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG59XG4ubWVkaWEtbGVmdCxcbi5tZWRpYS1yaWdodCxcbi5tZWRpYS1ib2R5IHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cbi5tZWRpYS1taWRkbGUge1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLm1lZGlhLWJvdHRvbSB7XG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG59XG4ubWVkaWEtaGVhZGluZyB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cbi5tZWRpYS1saXN0IHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuLmxpc3QtZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBwYWRkaW5nLWxlZnQ6IDA7XG59XG4ubGlzdC1ncm91cC1pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMTBweCAxNXB4O1xuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xufVxuLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDtcbn1cbi5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDtcbn1cbmEubGlzdC1ncm91cC1pdGVtLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbSB7XG4gIGNvbG9yOiAjNTU1O1xufVxuYS5saXN0LWdyb3VwLWl0ZW0gLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbSAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICBjb2xvcjogIzMzMztcbn1cbmEubGlzdC1ncm91cC1pdGVtOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbTpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtOmZvY3VzLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbTpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6ICM1NTU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG59XG5idXR0b24ubGlzdC1ncm91cC1pdGVtIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4ubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkLFxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpob3Zlcixcbi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xuICBjb2xvcjogIzc3Nzc3NztcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsXG4ubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZCAubGlzdC1ncm91cC1pdGVtLXRleHQsXG4ubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmhvdmVyIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCxcbi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0IHtcbiAgY29sb3I6ICM3Nzc3Nzc7XG59XG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmhvdmVyLFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMge1xuICB6LWluZGV4OiAyO1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzN2FiNztcbiAgYm9yZGVyLWNvbG9yOiAjMzM3YWI3O1xufVxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nID4gc21hbGwsXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiBzbWFsbCxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyA+IHNtYWxsLFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nID4gLnNtYWxsLFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nID4gLnNtYWxsLFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nID4gLnNtYWxsIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSAubGlzdC1ncm91cC1pdGVtLXRleHQsXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLXRleHQsXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpmb2N1cyAubGlzdC1ncm91cC1pdGVtLXRleHQge1xuICBjb2xvcjogI2M3ZGRlZjtcbn1cbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyB7XG4gIGNvbG9yOiAjM2M3NjNkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZmMGQ4O1xufVxuYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyB7XG4gIGNvbG9yOiAjM2M3NjNkO1xufVxuYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5hLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzOmhvdmVyLFxuYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpmb2N1cyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpmb2N1cyB7XG4gIGNvbG9yOiAjM2M3NjNkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDBlOWM2O1xufVxuYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmUsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlLFxuYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmU6aG92ZXIsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlOmhvdmVyLFxuYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmU6Zm9jdXMsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYzc2M2Q7XG4gIGJvcmRlci1jb2xvcjogIzNjNzYzZDtcbn1cbi5saXN0LWdyb3VwLWl0ZW0taW5mbyB7XG4gIGNvbG9yOiAjMzE3MDhmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDllZGY3O1xufVxuYS5saXN0LWdyb3VwLWl0ZW0taW5mbyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mbyB7XG4gIGNvbG9yOiAjMzE3MDhmO1xufVxuYS5saXN0LWdyb3VwLWl0ZW0taW5mbyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8gLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5hLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmhvdmVyLFxuYS5saXN0LWdyb3VwLWl0ZW0taW5mbzpmb2N1cyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mbzpmb2N1cyB7XG4gIGNvbG9yOiAjMzE3MDhmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzRlM2YzO1xufVxuYS5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmUsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlLFxuYS5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmU6aG92ZXIsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlOmhvdmVyLFxuYS5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmU6Zm9jdXMsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMTcwOGY7XG4gIGJvcmRlci1jb2xvcjogIzMxNzA4Zjtcbn1cbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZyB7XG4gIGNvbG9yOiAjOGE2ZDNiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzO1xufVxuYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZyB7XG4gIGNvbG9yOiAjOGE2ZDNiO1xufVxuYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5hLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nOmhvdmVyLFxuYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZzpmb2N1cyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZzpmb2N1cyB7XG4gIGNvbG9yOiAjOGE2ZDNiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmMmNjO1xufVxuYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5hY3RpdmUsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlLFxuYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5hY3RpdmU6aG92ZXIsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlOmhvdmVyLFxuYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5hY3RpdmU6Zm9jdXMsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM4YTZkM2I7XG4gIGJvcmRlci1jb2xvcjogIzhhNmQzYjtcbn1cbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyIHtcbiAgY29sb3I6ICNhOTQ0NDI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMmRlZGU7XG59XG5hLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlciB7XG4gIGNvbG9yOiAjYTk0NDQyO1xufVxuYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXI6aG92ZXIsXG5hLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXI6Zm9jdXMsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlcjpmb2N1cyB7XG4gIGNvbG9yOiAjYTk0NDQyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWJjY2NjO1xufVxuYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmFjdGl2ZSxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmFjdGl2ZSxcbmEubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmU6aG92ZXIsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmU6aG92ZXIsXG5hLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlOmZvY3VzLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNhOTQ0NDI7XG4gIGJvcmRlci1jb2xvcjogI2E5NDQ0Mjtcbn1cbi5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cbi5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjM7XG59XG4ucGFuZWwge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cbi5wYW5lbC1ib2R5IHtcbiAgcGFkZGluZzogMTVweDtcbn1cbi5wYW5lbC1oZWFkaW5nIHtcbiAgcGFkZGluZzogMTBweCAxNXB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDtcbn1cbi5wYW5lbC1oZWFkaW5nID4gLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5wYW5lbC10aXRsZSB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG4ucGFuZWwtdGl0bGUgPiBhLFxuLnBhbmVsLXRpdGxlID4gc21hbGwsXG4ucGFuZWwtdGl0bGUgPiAuc21hbGwsXG4ucGFuZWwtdGl0bGUgPiBzbWFsbCA+IGEsXG4ucGFuZWwtdGl0bGUgPiAuc21hbGwgPiBhIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG4ucGFuZWwtZm9vdGVyIHtcbiAgcGFkZGluZzogMTBweCAxNXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4O1xufVxuLnBhbmVsID4gLmxpc3QtZ3JvdXAsXG4ucGFuZWwgPiAucGFuZWwtY29sbGFwc2UgPiAubGlzdC1ncm91cCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4ucGFuZWwgPiAubGlzdC1ncm91cCAubGlzdC1ncm91cC1pdGVtLFxuLnBhbmVsID4gLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbSB7XG4gIGJvcmRlci13aWR0aDogMXB4IDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ucGFuZWwgPiAubGlzdC1ncm91cDpmaXJzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXA6Zmlyc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci10b3A6IDA7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDtcbn1cbi5wYW5lbCA+IC5saXN0LWdyb3VwOmxhc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXA6bGFzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xuICBib3JkZXItYm90dG9tOiAwO1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4O1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7XG59XG4ucGFuZWwgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbn1cbi5wYW5lbC1oZWFkaW5nICsgLmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci10b3Atd2lkdGg6IDA7XG59XG4ubGlzdC1ncm91cCArIC5wYW5lbC1mb290ZXIge1xuICBib3JkZXItdG9wLXdpZHRoOiAwO1xufVxuLnBhbmVsID4gLnRhYmxlLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUsXG4ucGFuZWwgPiAucGFuZWwtY29sbGFwc2UgPiAudGFibGUge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLnBhbmVsID4gLnRhYmxlIGNhcHRpb24sXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSBjYXB0aW9uLFxuLnBhbmVsID4gLnBhbmVsLWNvbGxhcHNlID4gLnRhYmxlIGNhcHRpb24ge1xuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7XG59XG4ucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDtcbn1cbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xufVxuLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDtcbn1cbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDtcbn1cbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4O1xufVxuLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4O1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4O1xufVxuLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4O1xufVxuLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGZvb3Q6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGZvb3Q6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7XG59XG4ucGFuZWwgPiAucGFuZWwtYm9keSArIC50YWJsZSxcbi5wYW5lbCA+IC5wYW5lbC1ib2R5ICsgLnRhYmxlLXJlc3BvbnNpdmUsXG4ucGFuZWwgPiAudGFibGUgKyAucGFuZWwtYm9keSxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlICsgLnBhbmVsLWJvZHkge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbn1cbi5wYW5lbCA+IC50YWJsZSA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGgsXG4ucGFuZWwgPiAudGFibGUgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRkIHtcbiAgYm9yZGVyLXRvcDogMDtcbn1cbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkIHtcbiAgYm9yZGVyOiAwO1xufVxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkOmZpcnN0LWNoaWxkIHtcbiAgYm9yZGVyLWxlZnQ6IDA7XG59XG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkOmxhc3QtY2hpbGQge1xuICBib3JkZXItcmlnaHQ6IDA7XG59XG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpmaXJzdC1jaGlsZCA+IHRkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRoLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmZpcnN0LWNoaWxkID4gdGgsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCB7XG4gIGJvcmRlci1ib3R0b206IDA7XG59XG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmxhc3QtY2hpbGQgPiB0ZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpsYXN0LWNoaWxkID4gdGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyOmxhc3QtY2hpbGQgPiB0ZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmxhc3QtY2hpbGQgPiB0aCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpsYXN0LWNoaWxkID4gdGgsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyOmxhc3QtY2hpbGQgPiB0aCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGgge1xuICBib3JkZXItYm90dG9tOiAwO1xufVxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUge1xuICBib3JkZXI6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4ucGFuZWwtZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuLnBhbmVsLWdyb3VwIC5wYW5lbCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cbi5wYW5lbC1ncm91cCAucGFuZWwgKyAucGFuZWwge1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG4ucGFuZWwtZ3JvdXAgLnBhbmVsLWhlYWRpbmcge1xuICBib3JkZXItYm90dG9tOiAwO1xufVxuLnBhbmVsLWdyb3VwIC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHksXG4ucGFuZWwtZ3JvdXAgLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAubGlzdC1ncm91cCB7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xufVxuLnBhbmVsLWdyb3VwIC5wYW5lbC1mb290ZXIge1xuICBib3JkZXItdG9wOiAwO1xufVxuLnBhbmVsLWdyb3VwIC5wYW5lbC1mb290ZXIgKyAucGFuZWwtY29sbGFwc2UgLnBhbmVsLWJvZHkge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbn1cbi5wYW5lbC1kZWZhdWx0IHtcbiAgYm9yZGVyLWNvbG9yOiAjZGRkO1xufVxuLnBhbmVsLWRlZmF1bHQgPiAucGFuZWwtaGVhZGluZyB7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXItY29sb3I6ICNkZGQ7XG59XG4ucGFuZWwtZGVmYXVsdCA+IC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xuICBib3JkZXItdG9wLWNvbG9yOiAjZGRkO1xufVxuLnBhbmVsLWRlZmF1bHQgPiAucGFuZWwtaGVhZGluZyAuYmFkZ2Uge1xuICBjb2xvcjogI2Y1ZjVmNTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzMzMztcbn1cbi5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2RkZDtcbn1cbi5wYW5lbC1wcmltYXJ5IHtcbiAgYm9yZGVyLWNvbG9yOiAjMzM3YWI3O1xufVxuLnBhbmVsLXByaW1hcnkgPiAucGFuZWwtaGVhZGluZyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3O1xuICBib3JkZXItY29sb3I6ICMzMzdhYjc7XG59XG4ucGFuZWwtcHJpbWFyeSA+IC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xuICBib3JkZXItdG9wLWNvbG9yOiAjMzM3YWI3O1xufVxuLnBhbmVsLXByaW1hcnkgPiAucGFuZWwtaGVhZGluZyAuYmFkZ2Uge1xuICBjb2xvcjogIzMzN2FiNztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5wYW5lbC1wcmltYXJ5ID4gLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzMzN2FiNztcbn1cbi5wYW5lbC1zdWNjZXNzIHtcbiAgYm9yZGVyLWNvbG9yOiAjZDZlOWM2O1xufVxuLnBhbmVsLXN1Y2Nlc3MgPiAucGFuZWwtaGVhZGluZyB7XG4gIGNvbG9yOiAjM2M3NjNkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZmMGQ4O1xuICBib3JkZXItY29sb3I6ICNkNmU5YzY7XG59XG4ucGFuZWwtc3VjY2VzcyA+IC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xuICBib3JkZXItdG9wLWNvbG9yOiAjZDZlOWM2O1xufVxuLnBhbmVsLXN1Y2Nlc3MgPiAucGFuZWwtaGVhZGluZyAuYmFkZ2Uge1xuICBjb2xvcjogI2RmZjBkODtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNjNzYzZDtcbn1cbi5wYW5lbC1zdWNjZXNzID4gLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2Q2ZTljNjtcbn1cbi5wYW5lbC1pbmZvIHtcbiAgYm9yZGVyLWNvbG9yOiAjYmNlOGYxO1xufVxuLnBhbmVsLWluZm8gPiAucGFuZWwtaGVhZGluZyB7XG4gIGNvbG9yOiAjMzE3MDhmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDllZGY3O1xuICBib3JkZXItY29sb3I6ICNiY2U4ZjE7XG59XG4ucGFuZWwtaW5mbyA+IC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xuICBib3JkZXItdG9wLWNvbG9yOiAjYmNlOGYxO1xufVxuLnBhbmVsLWluZm8gPiAucGFuZWwtaGVhZGluZyAuYmFkZ2Uge1xuICBjb2xvcjogI2Q5ZWRmNztcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMxNzA4Zjtcbn1cbi5wYW5lbC1pbmZvID4gLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2JjZThmMTtcbn1cbi5wYW5lbC13YXJuaW5nIHtcbiAgYm9yZGVyLWNvbG9yOiAjZmFlYmNjO1xufVxuLnBhbmVsLXdhcm5pbmcgPiAucGFuZWwtaGVhZGluZyB7XG4gIGNvbG9yOiAjOGE2ZDNiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzO1xuICBib3JkZXItY29sb3I6ICNmYWViY2M7XG59XG4ucGFuZWwtd2FybmluZyA+IC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xuICBib3JkZXItdG9wLWNvbG9yOiAjZmFlYmNjO1xufVxuLnBhbmVsLXdhcm5pbmcgPiAucGFuZWwtaGVhZGluZyAuYmFkZ2Uge1xuICBjb2xvcjogI2ZjZjhlMztcbiAgYmFja2dyb3VuZC1jb2xvcjogIzhhNmQzYjtcbn1cbi5wYW5lbC13YXJuaW5nID4gLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZhZWJjYztcbn1cbi5wYW5lbC1kYW5nZXIge1xuICBib3JkZXItY29sb3I6ICNlYmNjZDE7XG59XG4ucGFuZWwtZGFuZ2VyID4gLnBhbmVsLWhlYWRpbmcge1xuICBjb2xvcjogI2E5NDQ0MjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZGVkZTtcbiAgYm9yZGVyLWNvbG9yOiAjZWJjY2QxO1xufVxuLnBhbmVsLWRhbmdlciA+IC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xuICBib3JkZXItdG9wLWNvbG9yOiAjZWJjY2QxO1xufVxuLnBhbmVsLWRhbmdlciA+IC5wYW5lbC1oZWFkaW5nIC5iYWRnZSB7XG4gIGNvbG9yOiAjZjJkZWRlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTk0NDQyO1xufVxuLnBhbmVsLWRhbmdlciA+IC5wYW5lbC1mb290ZXIgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNlYmNjZDE7XG59XG4uZW1iZWQtcmVzcG9uc2l2ZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogMDtcbiAgcGFkZGluZzogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5lbWJlZC1yZXNwb25zaXZlIC5lbWJlZC1yZXNwb25zaXZlLWl0ZW0sXG4uZW1iZWQtcmVzcG9uc2l2ZSBpZnJhbWUsXG4uZW1iZWQtcmVzcG9uc2l2ZSBlbWJlZCxcbi5lbWJlZC1yZXNwb25zaXZlIG9iamVjdCxcbi5lbWJlZC1yZXNwb25zaXZlIHZpZGVvIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyOiAwO1xufVxuLmVtYmVkLXJlc3BvbnNpdmUtMTZieTkge1xuICBwYWRkaW5nLWJvdHRvbTogNTYuMjUlO1xufVxuLmVtYmVkLXJlc3BvbnNpdmUtNGJ5MyB7XG4gIHBhZGRpbmctYm90dG9tOiA3NSU7XG59XG4ud2VsbCB7XG4gIG1pbi1oZWlnaHQ6IDIwcHg7XG4gIHBhZGRpbmc6IDE5cHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlM2UzZTM7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG4ud2VsbCBibG9ja3F1b3RlIHtcbiAgYm9yZGVyLWNvbG9yOiAjZGRkO1xuICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG59XG4ud2VsbC1sZyB7XG4gIHBhZGRpbmc6IDI0cHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbn1cbi53ZWxsLXNtIHtcbiAgcGFkZGluZzogOXB4O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG4uY2xvc2Uge1xuICBmbG9hdDogcmlnaHQ7XG4gIGZvbnQtc2l6ZTogMjFweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogIzAwMDtcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZjtcbiAgb3BhY2l0eTogMC4yO1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MjApO1xufVxuLmNsb3NlOmhvdmVyLFxuLmNsb3NlOmZvY3VzIHtcbiAgY29sb3I6ICMwMDA7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBvcGFjaXR5OiAwLjU7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT01MCk7XG59XG5idXR0b24uY2xvc2Uge1xuICBwYWRkaW5nOiAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDA7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cbi5tb2RhbC1vcGVuIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tb2RhbCB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxMDUwO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gIG91dGxpbmU6IDA7XG59XG4ubW9kYWwuZmFkZSAubW9kYWwtZGlhbG9nIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjUlKTtcbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjUlKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcyBlYXNlLW91dDtcbiAgLW1vei10cmFuc2l0aW9uOiAtbW96LXRyYW5zZm9ybSAwLjNzIGVhc2Utb3V0O1xuICAtby10cmFuc2l0aW9uOiAtby10cmFuc2Zvcm0gMC4zcyBlYXNlLW91dDtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XG59XG4ubW9kYWwuaW4gLm1vZGFsLWRpYWxvZyB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xufVxuLm1vZGFsLW9wZW4gLm1vZGFsIHtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuLm1vZGFsLWRpYWxvZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IGF1dG87XG4gIG1hcmdpbjogMTBweDtcbn1cbi5tb2RhbC1jb250ZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjOTk5O1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDNweCA5cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xuICBib3gtc2hhZG93OiAwIDNweCA5cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICBvdXRsaW5lOiAwO1xufVxuLm1vZGFsLWJhY2tkcm9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDEwNDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDA7XG59XG4ubW9kYWwtYmFja2Ryb3AuZmFkZSB7XG4gIG9wYWNpdHk6IDA7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT0wKTtcbn1cbi5tb2RhbC1iYWNrZHJvcC5pbiB7XG4gIG9wYWNpdHk6IDAuNTtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUwKTtcbn1cbi5tb2RhbC1oZWFkZXIge1xuICBwYWRkaW5nOiAxNXB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbiAgbWluLWhlaWdodDogMTYuNDI4NTcxNDNweDtcbn1cbi5tb2RhbC1oZWFkZXIgLmNsb3NlIHtcbiAgbWFyZ2luLXRvcDogLTJweDtcbn1cbi5tb2RhbC10aXRsZSB7XG4gIG1hcmdpbjogMDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG59XG4ubW9kYWwtYm9keSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogMTVweDtcbn1cbi5tb2RhbC1mb290ZXIge1xuICBwYWRkaW5nOiAxNXB4O1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNWU1ZTU7XG59XG4ubW9kYWwtZm9vdGVyIC5idG4gKyAuYnRuIHtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5tb2RhbC1mb290ZXIgLmJ0bi1ncm91cCAuYnRuICsgLmJ0biB7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuLm1vZGFsLWZvb3RlciAuYnRuLWJsb2NrICsgLmJ0bi1ibG9jayB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLm1vZGFsLXNjcm9sbGJhci1tZWFzdXJlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC05OTk5cHg7XG4gIHdpZHRoOiA1MHB4O1xuICBoZWlnaHQ6IDUwcHg7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm1vZGFsLWRpYWxvZyB7XG4gICAgd2lkdGg6IDYwMHB4O1xuICAgIG1hcmdpbjogMzBweCBhdXRvO1xuICB9XG4gIC5tb2RhbC1jb250ZW50IHtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xuICAgIGJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xuICB9XG4gIC5tb2RhbC1zbSB7XG4gICAgd2lkdGg6IDMwMHB4O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLm1vZGFsLWxnIHtcbiAgICB3aWR0aDogOTAwcHg7XG4gIH1cbn1cbi50b29sdGlwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxMDcwO1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICBsaW5lLWJyZWFrOiBhdXRvO1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgdGV4dC1hbGlnbjogc3RhcnQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICB3b3JkLWJyZWFrOiBub3JtYWw7XG4gIHdvcmQtc3BhY2luZzogbm9ybWFsO1xuICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBvcGFjaXR5OiAwO1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MCk7XG59XG4udG9vbHRpcC5pbiB7XG4gIG9wYWNpdHk6IDAuOTtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTkwKTtcbn1cbi50b29sdGlwLnRvcCB7XG4gIG1hcmdpbi10b3A6IC0zcHg7XG4gIHBhZGRpbmc6IDVweCAwO1xufVxuLnRvb2x0aXAucmlnaHQge1xuICBtYXJnaW4tbGVmdDogM3B4O1xuICBwYWRkaW5nOiAwIDVweDtcbn1cbi50b29sdGlwLmJvdHRvbSB7XG4gIG1hcmdpbi10b3A6IDNweDtcbiAgcGFkZGluZzogNXB4IDA7XG59XG4udG9vbHRpcC5sZWZ0IHtcbiAgbWFyZ2luLWxlZnQ6IC0zcHg7XG4gIHBhZGRpbmc6IDAgNXB4O1xufVxuLnRvb2x0aXAtaW5uZXIge1xuICBtYXgtd2lkdGg6IDIwMHB4O1xuICBwYWRkaW5nOiAzcHggOHB4O1xuICBjb2xvcjogI2ZmZjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4udG9vbHRpcC1hcnJvdyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbn1cbi50b29sdGlwLnRvcCAudG9vbHRpcC1hcnJvdyB7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogNTAlO1xuICBtYXJnaW4tbGVmdDogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDA7XG4gIGJvcmRlci10b3AtY29sb3I6ICMwMDA7XG59XG4udG9vbHRpcC50b3AtbGVmdCAudG9vbHRpcC1hcnJvdyB7XG4gIGJvdHRvbTogMDtcbiAgcmlnaHQ6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDA7XG4gIGJvcmRlci10b3AtY29sb3I6ICMwMDA7XG59XG4udG9vbHRpcC50b3AtcmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDA7XG4gIGJvcmRlci10b3AtY29sb3I6ICMwMDA7XG59XG4udG9vbHRpcC5yaWdodCAudG9vbHRpcC1hcnJvdyB7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiAwO1xuICBtYXJnaW4tdG9wOiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDVweCA1cHggNXB4IDA7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogIzAwMDtcbn1cbi50b29sdGlwLmxlZnQgLnRvb2x0aXAtYXJyb3cge1xuICB0b3A6IDUwJTtcbiAgcmlnaHQ6IDA7XG4gIG1hcmdpbi10b3A6IC01cHg7XG4gIGJvcmRlci13aWR0aDogNXB4IDAgNXB4IDVweDtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMDA7XG59XG4udG9vbHRpcC5ib3R0b20gLnRvb2x0aXAtYXJyb3cge1xuICB0b3A6IDA7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gIGJvcmRlci13aWR0aDogMCA1cHggNXB4O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjMDAwO1xufVxuLnRvb2x0aXAuYm90dG9tLWxlZnQgLnRvb2x0aXAtYXJyb3cge1xuICB0b3A6IDA7XG4gIHJpZ2h0OiA1cHg7XG4gIG1hcmdpbi10b3A6IC01cHg7XG4gIGJvcmRlci13aWR0aDogMCA1cHggNXB4O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjMDAwO1xufVxuLnRvb2x0aXAuYm90dG9tLXJpZ2h0IC50b29sdGlwLWFycm93IHtcbiAgdG9wOiAwO1xuICBsZWZ0OiA1cHg7XG4gIG1hcmdpbi10b3A6IC01cHg7XG4gIGJvcmRlci13aWR0aDogMCA1cHggNXB4O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjMDAwO1xufVxuLnBvcG92ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTA2MDtcbiAgZGlzcGxheTogbm9uZTtcbiAgbWF4LXdpZHRoOiAyNzZweDtcbiAgcGFkZGluZzogMXB4O1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XG4gIGxpbmUtYnJlYWs6IGF1dG87XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB0ZXh0LWFsaWduOiBzdGFydDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB0ZXh0LXNoYWRvdzogbm9uZTtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gIHdvcmQtYnJlYWs6IG5vcm1hbDtcbiAgd29yZC1zcGFjaW5nOiBub3JtYWw7XG4gIHdvcmQtd3JhcDogbm9ybWFsO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgNXB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbn1cbi5wb3BvdmVyLnRvcCB7XG4gIG1hcmdpbi10b3A6IC0xMHB4O1xufVxuLnBvcG92ZXIucmlnaHQge1xuICBtYXJnaW4tbGVmdDogMTBweDtcbn1cbi5wb3BvdmVyLmJvdHRvbSB7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG59XG4ucG9wb3Zlci5sZWZ0IHtcbiAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xufVxuLnBvcG92ZXItdGl0bGUge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDhweCAxNHB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWJlYmViO1xuICBib3JkZXItcmFkaXVzOiA1cHggNXB4IDAgMDtcbn1cbi5wb3BvdmVyLWNvbnRlbnQge1xuICBwYWRkaW5nOiA5cHggMTRweDtcbn1cbi5wb3BvdmVyID4gLmFycm93LFxuLnBvcG92ZXIgPiAuYXJyb3c6YWZ0ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuLnBvcG92ZXIgPiAuYXJyb3cge1xuICBib3JkZXItd2lkdGg6IDExcHg7XG59XG4ucG9wb3ZlciA+IC5hcnJvdzphZnRlciB7XG4gIGJvcmRlci13aWR0aDogMTBweDtcbiAgY29udGVudDogXCJcIjtcbn1cbi5wb3BvdmVyLnRvcCA+IC5hcnJvdyB7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC0xMXB4O1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuICBib3JkZXItdG9wLWNvbG9yOiAjOTk5OTk5O1xuICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBib3R0b206IC0xMXB4O1xufVxuLnBvcG92ZXIudG9wID4gLmFycm93OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGJvdHRvbTogMXB4O1xuICBtYXJnaW4tbGVmdDogLTEwcHg7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG4gIGJvcmRlci10b3AtY29sb3I6ICNmZmY7XG59XG4ucG9wb3Zlci5yaWdodCA+IC5hcnJvdyB7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiAtMTFweDtcbiAgbWFyZ2luLXRvcDogLTExcHg7XG4gIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICBib3JkZXItcmlnaHQtY29sb3I6ICM5OTk5OTk7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbn1cbi5wb3BvdmVyLnJpZ2h0ID4gLmFycm93OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGxlZnQ6IDFweDtcbiAgYm90dG9tOiAtMTBweDtcbiAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogI2ZmZjtcbn1cbi5wb3BvdmVyLmJvdHRvbSA+IC5hcnJvdyB7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC0xMXB4O1xuICBib3JkZXItdG9wLXdpZHRoOiAwO1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjOTk5OTk5O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICB0b3A6IC0xMXB4O1xufVxuLnBvcG92ZXIuYm90dG9tID4gLmFycm93OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIHRvcDogMXB4O1xuICBtYXJnaW4tbGVmdDogLTEwcHg7XG4gIGJvcmRlci10b3Atd2lkdGg6IDA7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7XG59XG4ucG9wb3Zlci5sZWZ0ID4gLmFycm93IHtcbiAgdG9wOiA1MCU7XG4gIHJpZ2h0OiAtMTFweDtcbiAgbWFyZ2luLXRvcDogLTExcHg7XG4gIGJvcmRlci1yaWdodC13aWR0aDogMDtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICM5OTk5OTk7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xufVxuLnBvcG92ZXIubGVmdCA+IC5hcnJvdzphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICByaWdodDogMXB4O1xuICBib3JkZXItcmlnaHQtd2lkdGg6IDA7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmZmO1xuICBib3R0b206IC0xMHB4O1xufVxuLmNhcm91c2VsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmNhcm91c2VsLWlubmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aWR0aDogMTAwJTtcbn1cbi5jYXJvdXNlbC1pbm5lciA+IC5pdGVtIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAtd2Via2l0LXRyYW5zaXRpb246IDAuNnMgZWFzZS1pbi1vdXQgbGVmdDtcbiAgLW8tdHJhbnNpdGlvbjogMC42cyBlYXNlLWluLW91dCBsZWZ0O1xuICB0cmFuc2l0aW9uOiAwLjZzIGVhc2UtaW4tb3V0IGxlZnQ7XG59XG4uY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbSA+IGltZyxcbi5jYXJvdXNlbC1pbm5lciA+IC5pdGVtID4gYSA+IGltZyB7XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxuQG1lZGlhIGFsbCBhbmQgKHRyYW5zZm9ybS0zZCksICgtd2Via2l0LXRyYW5zZm9ybS0zZCkge1xuICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbSB7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjZzIGVhc2UtaW4tb3V0O1xuICAgIC1tb3otdHJhbnNpdGlvbjogLW1vei10cmFuc2Zvcm0gMC42cyBlYXNlLWluLW91dDtcbiAgICAtby10cmFuc2l0aW9uOiAtby10cmFuc2Zvcm0gMC42cyBlYXNlLWluLW91dDtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC42cyBlYXNlLWluLW91dDtcbiAgICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAtbW96LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogMTAwMHB4O1xuICAgIC1tb3otcGVyc3BlY3RpdmU6IDEwMDBweDtcbiAgICBwZXJzcGVjdGl2ZTogMTAwMHB4O1xuICB9XG4gIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLm5leHQsXG4gIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLmFjdGl2ZS5yaWdodCB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7XG4gICAgbGVmdDogMDtcbiAgfVxuICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbS5wcmV2LFxuICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbS5hY3RpdmUubGVmdCB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKTtcbiAgICBsZWZ0OiAwO1xuICB9XG4gIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLm5leHQubGVmdCxcbiAgLmNhcm91c2VsLWlubmVyID4gLml0ZW0ucHJldi5yaWdodCxcbiAgLmNhcm91c2VsLWlubmVyID4gLml0ZW0uYWN0aXZlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgICBsZWZ0OiAwO1xuICB9XG59XG4uY2Fyb3VzZWwtaW5uZXIgPiAuYWN0aXZlLFxuLmNhcm91c2VsLWlubmVyID4gLm5leHQsXG4uY2Fyb3VzZWwtaW5uZXIgPiAucHJldiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmNhcm91c2VsLWlubmVyID4gLmFjdGl2ZSB7XG4gIGxlZnQ6IDA7XG59XG4uY2Fyb3VzZWwtaW5uZXIgPiAubmV4dCxcbi5jYXJvdXNlbC1pbm5lciA+IC5wcmV2IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmNhcm91c2VsLWlubmVyID4gLm5leHQge1xuICBsZWZ0OiAxMDAlO1xufVxuLmNhcm91c2VsLWlubmVyID4gLnByZXYge1xuICBsZWZ0OiAtMTAwJTtcbn1cbi5jYXJvdXNlbC1pbm5lciA+IC5uZXh0LmxlZnQsXG4uY2Fyb3VzZWwtaW5uZXIgPiAucHJldi5yaWdodCB7XG4gIGxlZnQ6IDA7XG59XG4uY2Fyb3VzZWwtaW5uZXIgPiAuYWN0aXZlLmxlZnQge1xuICBsZWZ0OiAtMTAwJTtcbn1cbi5jYXJvdXNlbC1pbm5lciA+IC5hY3RpdmUucmlnaHQge1xuICBsZWZ0OiAxMDAlO1xufVxuLmNhcm91c2VsLWNvbnRyb2wge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTUlO1xuICBvcGFjaXR5OiAwLjU7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT01MCk7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuNik7XG59XG4uY2Fyb3VzZWwtY29udHJvbC5sZWZ0IHtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgwLCAwLCAwLCAwLjUpIDAlLCByZ2JhKDAsIDAsIDAsIDAuMDAwMSkgMTAwJSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChsZWZ0LCByZ2JhKDAsIDAsIDAsIDAuNSkgMCUsIHJnYmEoMCwgMCwgMCwgMC4wMDAxKSAxMDAlKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuNSkgMCUsIHJnYmEoMCwgMCwgMCwgMC4wMDAxKSAxMDAlKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjODAwMDAwMDAnLCBlbmRDb2xvcnN0cj0nIzAwMDAwMDAwJywgR3JhZGllbnRUeXBlPTEpO1xufVxuLmNhcm91c2VsLWNvbnRyb2wucmlnaHQge1xuICBsZWZ0OiBhdXRvO1xuICByaWdodDogMDtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgwLCAwLCAwLCAwLjAwMDEpIDAlLCByZ2JhKDAsIDAsIDAsIDAuNSkgMTAwJSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChsZWZ0LCByZ2JhKDAsIDAsIDAsIDAuMDAwMSkgMCUsIHJnYmEoMCwgMCwgMCwgMC41KSAxMDAlKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuMDAwMSkgMCUsIHJnYmEoMCwgMCwgMCwgMC41KSAxMDAlKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjMDAwMDAwMDAnLCBlbmRDb2xvcnN0cj0nIzgwMDAwMDAwJywgR3JhZGllbnRUeXBlPTEpO1xufVxuLmNhcm91c2VsLWNvbnRyb2w6aG92ZXIsXG4uY2Fyb3VzZWwtY29udHJvbDpmb2N1cyB7XG4gIG91dGxpbmU6IDA7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIG9wYWNpdHk6IDAuOTtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTkwKTtcbn1cbi5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXYsXG4uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0LFxuLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQsXG4uY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBtYXJnaW4tdG9wOiAtMTBweDtcbiAgei1pbmRleDogNTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldixcbi5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0IHtcbiAgbGVmdDogNTAlO1xuICBtYXJnaW4tbGVmdDogLTEwcHg7XG59XG4uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0LFxuLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0IHtcbiAgcmlnaHQ6IDUwJTtcbiAgbWFyZ2luLXJpZ2h0OiAtMTBweDtcbn1cbi5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXYsXG4uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0IHtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGZvbnQtZmFtaWx5OiBzZXJpZjtcbn1cbi5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXY6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcMjAzOSc7XG59XG4uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXDIwM2EnO1xufVxuLmNhcm91c2VsLWluZGljYXRvcnMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMTBweDtcbiAgbGVmdDogNTAlO1xuICB6LWluZGV4OiAxNTtcbiAgd2lkdGg6IDYwJTtcbiAgbWFyZ2luLWxlZnQ6IC0zMCU7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmNhcm91c2VsLWluZGljYXRvcnMgbGkge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxMHB4O1xuICBoZWlnaHQ6IDEwcHg7XG4gIG1hcmdpbjogMXB4O1xuICB0ZXh0LWluZGVudDogLTk5OXB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZmZmO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDAgXFw5O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xufVxuLmNhcm91c2VsLWluZGljYXRvcnMgLmFjdGl2ZSB7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEycHg7XG4gIGhlaWdodDogMTJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5jYXJvdXNlbC1jYXB0aW9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAxNSU7XG4gIHJpZ2h0OiAxNSU7XG4gIGJvdHRvbTogMjBweDtcbiAgei1pbmRleDogMTA7XG4gIHBhZGRpbmctdG9wOiAyMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuNik7XG59XG4uY2Fyb3VzZWwtY2FwdGlvbiAuYnRuIHtcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCxcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0LFxuICAuY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2LFxuICAuY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0IHtcbiAgICB3aWR0aDogMzBweDtcbiAgICBoZWlnaHQ6IDMwcHg7XG4gICAgbWFyZ2luLXRvcDogLTE1cHg7XG4gICAgZm9udC1zaXplOiAzMHB4O1xuICB9XG4gIC5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0LFxuICAuY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2IHtcbiAgICBtYXJnaW4tbGVmdDogLTE1cHg7XG4gIH1cbiAgLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0LFxuICAuY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0IHtcbiAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xuICB9XG4gIC5jYXJvdXNlbC1jYXB0aW9uIHtcbiAgICBsZWZ0OiAyMCU7XG4gICAgcmlnaHQ6IDIwJTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDtcbiAgfVxuICAuY2Fyb3VzZWwtaW5kaWNhdG9ycyB7XG4gICAgYm90dG9tOiAyMHB4O1xuICB9XG59XG4uY2xlYXJmaXg6YmVmb3JlLFxuLmNsZWFyZml4OmFmdGVyLFxuLmRsLWhvcml6b250YWwgZGQ6YmVmb3JlLFxuLmRsLWhvcml6b250YWwgZGQ6YWZ0ZXIsXG4uY29udGFpbmVyOmJlZm9yZSxcbi5jb250YWluZXI6YWZ0ZXIsXG4uY29udGFpbmVyLWZsdWlkOmJlZm9yZSxcbi5jb250YWluZXItZmx1aWQ6YWZ0ZXIsXG4ucm93OmJlZm9yZSxcbi5yb3c6YWZ0ZXIsXG4uZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwOmJlZm9yZSxcbi5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXA6YWZ0ZXIsXG4uYnRuLXRvb2xiYXI6YmVmb3JlLFxuLmJ0bi10b29sYmFyOmFmdGVyLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6YmVmb3JlLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6YWZ0ZXIsXG4ubmF2OmJlZm9yZSxcbi5uYXY6YWZ0ZXIsXG4ubmF2YmFyOmJlZm9yZSxcbi5uYXZiYXI6YWZ0ZXIsXG4ubmF2YmFyLWhlYWRlcjpiZWZvcmUsXG4ubmF2YmFyLWhlYWRlcjphZnRlcixcbi5uYXZiYXItY29sbGFwc2U6YmVmb3JlLFxuLm5hdmJhci1jb2xsYXBzZTphZnRlcixcbi5wYWdlcjpiZWZvcmUsXG4ucGFnZXI6YWZ0ZXIsXG4ucGFuZWwtYm9keTpiZWZvcmUsXG4ucGFuZWwtYm9keTphZnRlcixcbi5tb2RhbC1mb290ZXI6YmVmb3JlLFxuLm1vZGFsLWZvb3RlcjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cbi5jbGVhcmZpeDphZnRlcixcbi5kbC1ob3Jpem9udGFsIGRkOmFmdGVyLFxuLmNvbnRhaW5lcjphZnRlcixcbi5jb250YWluZXItZmx1aWQ6YWZ0ZXIsXG4ucm93OmFmdGVyLFxuLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cDphZnRlcixcbi5idG4tdG9vbGJhcjphZnRlcixcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmFmdGVyLFxuLm5hdjphZnRlcixcbi5uYXZiYXI6YWZ0ZXIsXG4ubmF2YmFyLWhlYWRlcjphZnRlcixcbi5uYXZiYXItY29sbGFwc2U6YWZ0ZXIsXG4ucGFnZXI6YWZ0ZXIsXG4ucGFuZWwtYm9keTphZnRlcixcbi5tb2RhbC1mb290ZXI6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cbi5jZW50ZXItYmxvY2sge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbn1cbi5wdWxsLXJpZ2h0IHtcbiAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XG59XG4ucHVsbC1sZWZ0IHtcbiAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcbn1cbi5oaWRlIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuLnNob3cge1xuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xufVxuLmludmlzaWJsZSB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbi50ZXh0LWhpZGUge1xuICBmb250OiAwLzAgYTtcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuICB0ZXh0LXNoYWRvdzogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogMDtcbn1cbi5oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG4uYWZmaXgge1xuICBwb3NpdGlvbjogZml4ZWQ7XG59XG5ALW1zLXZpZXdwb3J0IHtcbiAgd2lkdGg6IGRldmljZS13aWR0aDtcbn1cbi52aXNpYmxlLXhzLFxuLnZpc2libGUtc20sXG4udmlzaWJsZS1tZCxcbi52aXNpYmxlLWxnIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuLnZpc2libGUteHMtYmxvY2ssXG4udmlzaWJsZS14cy1pbmxpbmUsXG4udmlzaWJsZS14cy1pbmxpbmUtYmxvY2ssXG4udmlzaWJsZS1zbS1ibG9jayxcbi52aXNpYmxlLXNtLWlubGluZSxcbi52aXNpYmxlLXNtLWlubGluZS1ibG9jayxcbi52aXNpYmxlLW1kLWJsb2NrLFxuLnZpc2libGUtbWQtaW5saW5lLFxuLnZpc2libGUtbWQtaW5saW5lLWJsb2NrLFxuLnZpc2libGUtbGctYmxvY2ssXG4udmlzaWJsZS1sZy1pbmxpbmUsXG4udmlzaWJsZS1sZy1pbmxpbmUtYmxvY2sge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLnZpc2libGUteHMge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGFibGUudmlzaWJsZS14cyB7XG4gICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcbiAgfVxuICB0ci52aXNpYmxlLXhzIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDtcbiAgfVxuICB0aC52aXNpYmxlLXhzLFxuICB0ZC52aXNpYmxlLXhzIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAudmlzaWJsZS14cy1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC52aXNpYmxlLXhzLWlubGluZSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAudmlzaWJsZS14cy1pbmxpbmUtYmxvY2sge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTFweCkge1xuICAudmlzaWJsZS1zbSB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxuICB0YWJsZS52aXNpYmxlLXNtIHtcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xuICB9XG4gIHRyLnZpc2libGUtc20ge1xuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xuICB9XG4gIHRoLnZpc2libGUtc20sXG4gIHRkLnZpc2libGUtc20ge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgLnZpc2libGUtc20tYmxvY2sge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC52aXNpYmxlLXNtLWlubGluZSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC52aXNpYmxlLXNtLWlubGluZS1ibG9jayB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCkge1xuICAudmlzaWJsZS1tZCB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxuICB0YWJsZS52aXNpYmxlLW1kIHtcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xuICB9XG4gIHRyLnZpc2libGUtbWQge1xuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xuICB9XG4gIHRoLnZpc2libGUtbWQsXG4gIHRkLnZpc2libGUtbWQge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KSB7XG4gIC52aXNpYmxlLW1kLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMTk5cHgpIHtcbiAgLnZpc2libGUtbWQtaW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KSB7XG4gIC52aXNpYmxlLW1kLWlubGluZS1ibG9jayB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLnZpc2libGUtbGcge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGFibGUudmlzaWJsZS1sZyB7XG4gICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcbiAgfVxuICB0ci52aXNpYmxlLWxnIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDtcbiAgfVxuICB0aC52aXNpYmxlLWxnLFxuICB0ZC52aXNpYmxlLWxnIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLnZpc2libGUtbGctYmxvY2sge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLnZpc2libGUtbGctaW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAudmlzaWJsZS1sZy1pbmxpbmUtYmxvY2sge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLmhpZGRlbi14cyB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTFweCkge1xuICAuaGlkZGVuLXNtIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCkge1xuICAuaGlkZGVuLW1kIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLmhpZGRlbi1sZyB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1wcmludCB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC52aXNpYmxlLXByaW50IHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG4gIHRhYmxlLnZpc2libGUtcHJpbnQge1xuICAgIGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7XG4gIH1cbiAgdHIudmlzaWJsZS1wcmludCB7XG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGgudmlzaWJsZS1wcmludCxcbiAgdGQudmlzaWJsZS1wcmludCB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1wcmludC1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC52aXNpYmxlLXByaW50LWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1wcmludC1pbmxpbmUge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5AbWVkaWEgcHJpbnQge1xuICAudmlzaWJsZS1wcmludC1pbmxpbmUge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1wcmludC1pbmxpbmUtYmxvY2sge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5AbWVkaWEgcHJpbnQge1xuICAudmlzaWJsZS1wcmludC1pbmxpbmUtYmxvY2sge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgcHJpbnQge1xuICAuaGlkZGVuLXByaW50IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbiIsIi8qISBub3JtYWxpemUuY3NzIHYzLjAuMyB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MgKi9cblxuLy9cbi8vIDEuIFNldCBkZWZhdWx0IGZvbnQgZmFtaWx5IHRvIHNhbnMtc2VyaWYuXG4vLyAyLiBQcmV2ZW50IGlPUyBhbmQgSUUgdGV4dCBzaXplIGFkanVzdCBhZnRlciBkZXZpY2Ugb3JpZW50YXRpb24gY2hhbmdlLFxuLy8gICAgd2l0aG91dCBkaXNhYmxpbmcgdXNlciB6b29tLlxuLy9cblxuaHRtbCB7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyAvLyAxXG4gIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvLyAyXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLy8gMlxufVxuXG4vL1xuLy8gUmVtb3ZlIGRlZmF1bHQgbWFyZ2luLlxuLy9cblxuYm9keSB7XG4gIG1hcmdpbjogMDtcbn1cblxuLy8gSFRNTDUgZGlzcGxheSBkZWZpbml0aW9uc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBhbnkgSFRNTDUgZWxlbWVudCBpbiBJRSA4LzkuXG4vLyBDb3JyZWN0IGBibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBmb3IgYGRldGFpbHNgIG9yIGBzdW1tYXJ5YCBpbiBJRSAxMC8xMVxuLy8gYW5kIEZpcmVmb3guXG4vLyBDb3JyZWN0IGBibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBmb3IgYG1haW5gIGluIElFIDExLlxuLy9cblxuYXJ0aWNsZSxcbmFzaWRlLFxuZGV0YWlscyxcbmZpZ2NhcHRpb24sXG5maWd1cmUsXG5mb290ZXIsXG5oZWFkZXIsXG5oZ3JvdXAsXG5tYWluLFxubWVudSxcbm5hdixcbnNlY3Rpb24sXG5zdW1tYXJ5IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8vXG4vLyAxLiBDb3JyZWN0IGBpbmxpbmUtYmxvY2tgIGRpc3BsYXkgbm90IGRlZmluZWQgaW4gSUUgOC85LlxuLy8gMi4gTm9ybWFsaXplIHZlcnRpY2FsIGFsaWdubWVudCBvZiBgcHJvZ3Jlc3NgIGluIENocm9tZSwgRmlyZWZveCwgYW5kIE9wZXJhLlxuLy9cblxuYXVkaW8sXG5jYW52YXMsXG5wcm9ncmVzcyxcbnZpZGVvIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAvLyAxXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgLy8gMlxufVxuXG4vL1xuLy8gUHJldmVudCBtb2Rlcm4gYnJvd3NlcnMgZnJvbSBkaXNwbGF5aW5nIGBhdWRpb2Agd2l0aG91dCBjb250cm9scy5cbi8vIFJlbW92ZSBleGNlc3MgaGVpZ2h0IGluIGlPUyA1IGRldmljZXMuXG4vL1xuXG5hdWRpbzpub3QoW2NvbnRyb2xzXSkge1xuICBkaXNwbGF5OiBub25lO1xuICBoZWlnaHQ6IDA7XG59XG5cbi8vXG4vLyBBZGRyZXNzIGBbaGlkZGVuXWAgc3R5bGluZyBub3QgcHJlc2VudCBpbiBJRSA4LzkvMTAuXG4vLyBIaWRlIHRoZSBgdGVtcGxhdGVgIGVsZW1lbnQgaW4gSUUgOC85LzEwLzExLCBTYWZhcmksIGFuZCBGaXJlZm94IDwgMjIuXG4vL1xuXG5baGlkZGVuXSxcbnRlbXBsYXRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLy8gTGlua3Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vXG4vLyBSZW1vdmUgdGhlIGdyYXkgYmFja2dyb3VuZCBjb2xvciBmcm9tIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cbi8vXG5cbmEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLy9cbi8vIEltcHJvdmUgcmVhZGFiaWxpdHkgb2YgZm9jdXNlZCBlbGVtZW50cyB3aGVuIHRoZXkgYXJlIGFsc28gaW4gYW5cbi8vIGFjdGl2ZS9ob3ZlciBzdGF0ZS5cbi8vXG5cbmE6YWN0aXZlLFxuYTpob3ZlciB7XG4gIG91dGxpbmU6IDA7XG59XG5cbi8vIFRleHQtbGV2ZWwgc2VtYW50aWNzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vL1xuLy8gQWRkcmVzcyBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS8xMC8xMSwgU2FmYXJpLCBhbmQgQ2hyb21lLlxuLy9cblxuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkO1xufVxuXG4vL1xuLy8gQWRkcmVzcyBzdHlsZSBzZXQgdG8gYGJvbGRlcmAgaW4gRmlyZWZveCA0KywgU2FmYXJpLCBhbmQgQ2hyb21lLlxuLy9cblxuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4vL1xuLy8gQWRkcmVzcyBzdHlsaW5nIG5vdCBwcmVzZW50IGluIFNhZmFyaSBhbmQgQ2hyb21lLlxuLy9cblxuZGZuIHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xufVxuXG4vL1xuLy8gQWRkcmVzcyB2YXJpYWJsZSBgaDFgIGZvbnQtc2l6ZSBhbmQgbWFyZ2luIHdpdGhpbiBgc2VjdGlvbmAgYW5kIGBhcnRpY2xlYFxuLy8gY29udGV4dHMgaW4gRmlyZWZveCA0KywgU2FmYXJpLCBhbmQgQ2hyb21lLlxuLy9cblxuaDEge1xuICBmb250LXNpemU6IDJlbTtcbiAgbWFyZ2luOiAwLjY3ZW0gMDtcbn1cblxuLy9cbi8vIEFkZHJlc3Mgc3R5bGluZyBub3QgcHJlc2VudCBpbiBJRSA4LzkuXG4vL1xuXG5tYXJrIHtcbiAgYmFja2dyb3VuZDogI2ZmMDtcbiAgY29sb3I6ICMwMDA7XG59XG5cbi8vXG4vLyBBZGRyZXNzIGluY29uc2lzdGVudCBhbmQgdmFyaWFibGUgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbi8vXG5cbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG5cbi8vXG4vLyBQcmV2ZW50IGBzdWJgIGFuZCBgc3VwYCBhZmZlY3RpbmcgYGxpbmUtaGVpZ2h0YCBpbiBhbGwgYnJvd3NlcnMuXG4vL1xuXG5zdWIsXG5zdXAge1xuICBmb250LXNpemU6IDc1JTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG4vLyBFbWJlZGRlZCBjb250ZW50XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vL1xuLy8gUmVtb3ZlIGJvcmRlciB3aGVuIGluc2lkZSBgYWAgZWxlbWVudCBpbiBJRSA4LzkvMTAuXG4vL1xuXG5pbWcge1xuICBib3JkZXI6IDA7XG59XG5cbi8vXG4vLyBDb3JyZWN0IG92ZXJmbG93IG5vdCBoaWRkZW4gaW4gSUUgOS8xMC8xMS5cbi8vXG5cbnN2Zzpub3QoOnJvb3QpIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLy8gR3JvdXBpbmcgY29udGVudFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIEFkZHJlc3MgbWFyZ2luIG5vdCBwcmVzZW50IGluIElFIDgvOSBhbmQgU2FmYXJpLlxuLy9cblxuZmlndXJlIHtcbiAgbWFyZ2luOiAxZW0gNDBweDtcbn1cblxuLy9cbi8vIEFkZHJlc3MgZGlmZmVyZW5jZXMgYmV0d2VlbiBGaXJlZm94IGFuZCBvdGhlciBicm93c2Vycy5cbi8vXG5cbmhyIHtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIGhlaWdodDogMDtcbn1cblxuLy9cbi8vIENvbnRhaW4gb3ZlcmZsb3cgaW4gYWxsIGJyb3dzZXJzLlxuLy9cblxucHJlIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbi8vXG4vLyBBZGRyZXNzIG9kZCBgZW1gLXVuaXQgZm9udCBzaXplIHJlbmRlcmluZyBpbiBhbGwgYnJvd3NlcnMuXG4vL1xuXG5jb2RlLFxua2JkLFxucHJlLFxuc2FtcCB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbi8vIEZvcm1zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vL1xuLy8gS25vd24gbGltaXRhdGlvbjogYnkgZGVmYXVsdCwgQ2hyb21lIGFuZCBTYWZhcmkgb24gT1MgWCBhbGxvdyB2ZXJ5IGxpbWl0ZWRcbi8vIHN0eWxpbmcgb2YgYHNlbGVjdGAsIHVubGVzcyBhIGBib3JkZXJgIHByb3BlcnR5IGlzIHNldC5cbi8vXG5cbi8vXG4vLyAxLiBDb3JyZWN0IGNvbG9yIG5vdCBiZWluZyBpbmhlcml0ZWQuXG4vLyAgICBLbm93biBpc3N1ZTogYWZmZWN0cyBjb2xvciBvZiBkaXNhYmxlZCBlbGVtZW50cy5cbi8vIDIuIENvcnJlY3QgZm9udCBwcm9wZXJ0aWVzIG5vdCBiZWluZyBpbmhlcml0ZWQuXG4vLyAzLiBBZGRyZXNzIG1hcmdpbnMgc2V0IGRpZmZlcmVudGx5IGluIEZpcmVmb3ggNCssIFNhZmFyaSwgYW5kIENocm9tZS5cbi8vXG5cbmJ1dHRvbixcbmlucHV0LFxub3B0Z3JvdXAsXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIGNvbG9yOiBpbmhlcml0OyAvLyAxXG4gIGZvbnQ6IGluaGVyaXQ7IC8vIDJcbiAgbWFyZ2luOiAwOyAvLyAzXG59XG5cbi8vXG4vLyBBZGRyZXNzIGBvdmVyZmxvd2Agc2V0IHRvIGBoaWRkZW5gIGluIElFIDgvOS8xMC8xMS5cbi8vXG5cbmJ1dHRvbiB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuXG4vL1xuLy8gQWRkcmVzcyBpbmNvbnNpc3RlbnQgYHRleHQtdHJhbnNmb3JtYCBpbmhlcml0YW5jZSBmb3IgYGJ1dHRvbmAgYW5kIGBzZWxlY3RgLlxuLy8gQWxsIG90aGVyIGZvcm0gY29udHJvbCBlbGVtZW50cyBkbyBub3QgaW5oZXJpdCBgdGV4dC10cmFuc2Zvcm1gIHZhbHVlcy5cbi8vIENvcnJlY3QgYGJ1dHRvbmAgc3R5bGUgaW5oZXJpdGFuY2UgaW4gRmlyZWZveCwgSUUgOC85LzEwLzExLCBhbmQgT3BlcmEuXG4vLyBDb3JyZWN0IGBzZWxlY3RgIHN0eWxlIGluaGVyaXRhbmNlIGluIEZpcmVmb3guXG4vL1xuXG5idXR0b24sXG5zZWxlY3Qge1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cblxuLy9cbi8vIDEuIEF2b2lkIHRoZSBXZWJLaXQgYnVnIGluIEFuZHJvaWQgNC4wLiogd2hlcmUgKDIpIGRlc3Ryb3lzIG5hdGl2ZSBgYXVkaW9gXG4vLyAgICBhbmQgYHZpZGVvYCBjb250cm9scy5cbi8vIDIuIENvcnJlY3QgaW5hYmlsaXR5IHRvIHN0eWxlIGNsaWNrYWJsZSBgaW5wdXRgIHR5cGVzIGluIGlPUy5cbi8vIDMuIEltcHJvdmUgdXNhYmlsaXR5IGFuZCBjb25zaXN0ZW5jeSBvZiBjdXJzb3Igc3R5bGUgYmV0d2VlbiBpbWFnZS10eXBlXG4vLyAgICBgaW5wdXRgIGFuZCBvdGhlcnMuXG4vL1xuXG5idXR0b24sXG5odG1sIGlucHV0W3R5cGU9XCJidXR0b25cIl0sIC8vIDFcbmlucHV0W3R5cGU9XCJyZXNldFwiXSxcbmlucHV0W3R5cGU9XCJzdWJtaXRcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjsgLy8gMlxuICBjdXJzb3I6IHBvaW50ZXI7IC8vIDNcbn1cblxuLy9cbi8vIFJlLXNldCBkZWZhdWx0IGN1cnNvciBmb3IgZGlzYWJsZWQgZWxlbWVudHMuXG4vL1xuXG5idXR0b25bZGlzYWJsZWRdLFxuaHRtbCBpbnB1dFtkaXNhYmxlZF0ge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi8vXG4vLyBSZW1vdmUgaW5uZXIgcGFkZGluZyBhbmQgYm9yZGVyIGluIEZpcmVmb3ggNCsuXG4vL1xuXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5pbnB1dDo6LW1vei1mb2N1cy1pbm5lciB7XG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuLy9cbi8vIEFkZHJlc3MgRmlyZWZveCA0KyBzZXR0aW5nIGBsaW5lLWhlaWdodGAgb24gYGlucHV0YCB1c2luZyBgIWltcG9ydGFudGAgaW5cbi8vIHRoZSBVQSBzdHlsZXNoZWV0LlxuLy9cblxuaW5wdXQge1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xufVxuXG4vL1xuLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBhdHRlbXB0IHRvIHN0eWxlIHRoZXNlIGVsZW1lbnRzLlxuLy8gRmlyZWZveCdzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgcmVzcGVjdCBib3gtc2l6aW5nLCBwYWRkaW5nLCBvciB3aWR0aC5cbi8vXG4vLyAxLiBBZGRyZXNzIGJveCBzaXppbmcgc2V0IHRvIGBjb250ZW50LWJveGAgaW4gSUUgOC85LzEwLlxuLy8gMi4gUmVtb3ZlIGV4Y2VzcyBwYWRkaW5nIGluIElFIDgvOS8xMC5cbi8vXG5cbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbmlucHV0W3R5cGU9XCJyYWRpb1wiXSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IC8vIDFcbiAgcGFkZGluZzogMDsgLy8gMlxufVxuXG4vL1xuLy8gRml4IHRoZSBjdXJzb3Igc3R5bGUgZm9yIENocm9tZSdzIGluY3JlbWVudC9kZWNyZW1lbnQgYnV0dG9ucy4gRm9yIGNlcnRhaW5cbi8vIGBmb250LXNpemVgIHZhbHVlcyBvZiB0aGUgYGlucHV0YCwgaXQgY2F1c2VzIHRoZSBjdXJzb3Igc3R5bGUgb2YgdGhlXG4vLyBkZWNyZW1lbnQgYnV0dG9uIHRvIGNoYW5nZSBmcm9tIGBkZWZhdWx0YCB0byBgdGV4dGAuXG4vL1xuXG5pbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLy9cbi8vIDEuIEFkZHJlc3MgYGFwcGVhcmFuY2VgIHNldCB0byBgc2VhcmNoZmllbGRgIGluIFNhZmFyaSBhbmQgQ2hyb21lLlxuLy8gMi4gQWRkcmVzcyBgYm94LXNpemluZ2Agc2V0IHRvIGBib3JkZXItYm94YCBpbiBTYWZhcmkgYW5kIENocm9tZS5cbi8vXG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsgLy8gMVxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLy8yXG59XG5cbi8vXG4vLyBSZW1vdmUgaW5uZXIgcGFkZGluZyBhbmQgc2VhcmNoIGNhbmNlbCBidXR0b24gaW4gU2FmYXJpIGFuZCBDaHJvbWUgb24gT1MgWC5cbi8vIFNhZmFyaSAoYnV0IG5vdCBDaHJvbWUpIGNsaXBzIHRoZSBjYW5jZWwgYnV0dG9uIHdoZW4gdGhlIHNlYXJjaCBpbnB1dCBoYXNcbi8vIHBhZGRpbmcgKGFuZCBgdGV4dGZpZWxkYCBhcHBlYXJhbmNlKS5cbi8vXG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuXG4vL1xuLy8gRGVmaW5lIGNvbnNpc3RlbnQgYm9yZGVyLCBtYXJnaW4sIGFuZCBwYWRkaW5nLlxuLy9cblxuZmllbGRzZXQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICBtYXJnaW46IDAgMnB4O1xuICBwYWRkaW5nOiAwLjM1ZW0gMC42MjVlbSAwLjc1ZW07XG59XG5cbi8vXG4vLyAxLiBDb3JyZWN0IGBjb2xvcmAgbm90IGJlaW5nIGluaGVyaXRlZCBpbiBJRSA4LzkvMTAvMTEuXG4vLyAyLiBSZW1vdmUgcGFkZGluZyBzbyBwZW9wbGUgYXJlbid0IGNhdWdodCBvdXQgaWYgdGhleSB6ZXJvIG91dCBmaWVsZHNldHMuXG4vL1xuXG5sZWdlbmQge1xuICBib3JkZXI6IDA7IC8vIDFcbiAgcGFkZGluZzogMDsgLy8gMlxufVxuXG4vL1xuLy8gUmVtb3ZlIGRlZmF1bHQgdmVydGljYWwgc2Nyb2xsYmFyIGluIElFIDgvOS8xMC8xMS5cbi8vXG5cbnRleHRhcmVhIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbi8vXG4vLyBEb24ndCBpbmhlcml0IHRoZSBgZm9udC13ZWlnaHRgIChhcHBsaWVkIGJ5IGEgcnVsZSBhYm92ZSkuXG4vLyBOT1RFOiB0aGUgZGVmYXVsdCBjYW5ub3Qgc2FmZWx5IGJlIGNoYW5nZWQgaW4gQ2hyb21lIGFuZCBTYWZhcmkgb24gT1MgWC5cbi8vXG5cbm9wdGdyb3VwIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi8vIFRhYmxlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIFJlbW92ZSBtb3N0IHNwYWNpbmcgYmV0d2VlbiB0YWJsZSBjZWxscy5cbi8vXG5cbnRhYmxlIHtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgYm9yZGVyLXNwYWNpbmc6IDA7XG59XG5cbnRkLFxudGgge1xuICBwYWRkaW5nOiAwO1xufVxuIiwiLyohIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2g1YnAvaHRtbDUtYm9pbGVycGxhdGUvYmxvYi9tYXN0ZXIvc3JjL2Nzcy9tYWluLmNzcyAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUHJpbnQgc3R5bGVzLlxuLy8gSW5saW5lZCB0byBhdm9pZCB0aGUgYWRkaXRpb25hbCBIVFRQIHJlcXVlc3Q6IGg1YnAuY29tL3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkBtZWRpYSBwcmludCB7XG4gICAgKixcbiAgICAqOmJlZm9yZSxcbiAgICAqOmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDsgLy8gQmxhY2sgcHJpbnRzIGZhc3RlcjogaDVicC5jb20vc1xuICAgICAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIHRleHQtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgYSxcbiAgICBhOnZpc2l0ZWQge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICB9XG5cbiAgICBhW2hyZWZdOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogXCIgKFwiIGF0dHIoaHJlZikgXCIpXCI7XG4gICAgfVxuXG4gICAgYWJiclt0aXRsZV06YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiBcIiAoXCIgYXR0cih0aXRsZSkgXCIpXCI7XG4gICAgfVxuXG4gICAgLy8gRG9uJ3Qgc2hvdyBsaW5rcyB0aGF0IGFyZSBmcmFnbWVudCBpZGVudGlmaWVycyxcbiAgICAvLyBvciB1c2UgdGhlIGBqYXZhc2NyaXB0OmAgcHNldWRvIHByb3RvY29sXG4gICAgYVtocmVmXj1cIiNcIl06YWZ0ZXIsXG4gICAgYVtocmVmXj1cImphdmFzY3JpcHQ6XCJdOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICB9XG5cbiAgICBwcmUsXG4gICAgYmxvY2txdW90ZSB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7XG4gICAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcbiAgICB9XG5cbiAgICB0aGVhZCB7XG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsgLy8gaDVicC5jb20vdFxuICAgIH1cblxuICAgIHRyLFxuICAgIGltZyB7XG4gICAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcbiAgICB9XG5cbiAgICBpbWcge1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICBwLFxuICAgIGgyLFxuICAgIGgzIHtcbiAgICAgICAgb3JwaGFuczogMztcbiAgICAgICAgd2lkb3dzOiAzO1xuICAgIH1cblxuICAgIGgyLFxuICAgIGgzIHtcbiAgICAgICAgcGFnZS1icmVhay1hZnRlcjogYXZvaWQ7XG4gICAgfVxuXG4gICAgLy8gQm9vdHN0cmFwIHNwZWNpZmljIGNoYW5nZXMgc3RhcnRcblxuICAgIC8vIEJvb3RzdHJhcCBjb21wb25lbnRzXG4gICAgLm5hdmJhciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICAgIC5idG4sXG4gICAgLmRyb3B1cCA+IC5idG4ge1xuICAgICAgICA+IC5jYXJldCB7XG4gICAgICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAjMDAwICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLmxhYmVsIHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcbiAgICB9XG5cbiAgICAudGFibGUge1xuICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlICFpbXBvcnRhbnQ7XG5cbiAgICAgICAgdGQsXG4gICAgICAgIHRoIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudGFibGUtYm9yZGVyZWQge1xuICAgICAgICB0aCxcbiAgICAgICAgdGQge1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQm9vdHN0cmFwIHNwZWNpZmljIGNoYW5nZXMgZW5kXG59XG4iLCIvL1xuLy8gR2x5cGhpY29ucyBmb3IgQm9vdHN0cmFwXG4vL1xuLy8gU2luY2UgaWNvbnMgYXJlIGZvbnRzLCB0aGV5IGNhbiBiZSBwbGFjZWQgYW55d2hlcmUgdGV4dCBpcyBwbGFjZWQgYW5kIGFyZVxuLy8gdGh1cyBhdXRvbWF0aWNhbGx5IHNpemVkIHRvIG1hdGNoIHRoZSBzdXJyb3VuZGluZyBjaGlsZC4gVG8gdXNlLCBjcmVhdGUgYW5cbi8vIGlubGluZSBlbGVtZW50IHdpdGggdGhlIGFwcHJvcHJpYXRlIGNsYXNzZXMsIGxpa2Ugc286XG4vL1xuLy8gPGEgaHJlZj1cIiNcIj48c3BhbiBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tc3RhclwiPjwvc3Bhbj4gU3RhcjwvYT5cblxuLy8gSW1wb3J0IHRoZSBmb250c1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnR2x5cGhpY29ucyBIYWxmbGluZ3MnO1xuICBzcmM6IHVybCgnQHtpY29uLWZvbnQtcGF0aH1Ae2ljb24tZm9udC1uYW1lfS5lb3QnKTtcbiAgc3JjOiB1cmwoJ0B7aWNvbi1mb250LXBhdGh9QHtpY29uLWZvbnQtbmFtZX0uZW90PyNpZWZpeCcpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcbiAgICAgICB1cmwoJ0B7aWNvbi1mb250LXBhdGh9QHtpY29uLWZvbnQtbmFtZX0ud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKCdAe2ljb24tZm9udC1wYXRofUB7aWNvbi1mb250LW5hbWV9LndvZmYnKSBmb3JtYXQoJ3dvZmYnKSxcbiAgICAgICB1cmwoJ0B7aWNvbi1mb250LXBhdGh9QHtpY29uLWZvbnQtbmFtZX0udHRmJykgZm9ybWF0KCd0cnVldHlwZScpLFxuICAgICAgIHVybCgnQHtpY29uLWZvbnQtcGF0aH1Ae2ljb24tZm9udC1uYW1lfS5zdmcjQHtpY29uLWZvbnQtc3ZnLWlkfScpIGZvcm1hdCgnc3ZnJyk7XG59XG5cbi8vIENhdGNoYWxsIGJhc2VjbGFzc1xuLmdseXBoaWNvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAxcHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1mYW1pbHk6ICdHbHlwaGljb25zIEhhbGZsaW5ncyc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xufVxuXG4vLyBJbmRpdmlkdWFsIGljb25zXG4uZ2x5cGhpY29uLWFzdGVyaXNrICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyYVwiOyB9IH1cbi5nbHlwaGljb24tcGx1cyAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDJiXCI7IH0gfVxuLmdseXBoaWNvbi1ldXJvLFxuLmdseXBoaWNvbi1ldXIgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjBhY1wiOyB9IH1cbi5nbHlwaGljb24tbWludXMgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDIyMTJcIjsgfSB9XG4uZ2x5cGhpY29uLWNsb3VkICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyNjAxXCI7IH0gfVxuLmdseXBoaWNvbi1lbnZlbG9wZSAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjcwOVwiOyB9IH1cbi5nbHlwaGljb24tcGVuY2lsICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDI3MGZcIjsgfSB9XG4uZ2x5cGhpY29uLWdsYXNzICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDAxXCI7IH0gfVxuLmdseXBoaWNvbi1tdXNpYyAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwMlwiOyB9IH1cbi5nbHlwaGljb24tc2VhcmNoICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDNcIjsgfSB9XG4uZ2x5cGhpY29uLWhlYXJ0ICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDA1XCI7IH0gfVxuLmdseXBoaWNvbi1zdGFyICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwNlwiOyB9IH1cbi5nbHlwaGljb24tc3Rhci1lbXB0eSAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDdcIjsgfSB9XG4uZ2x5cGhpY29uLXVzZXIgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDA4XCI7IH0gfVxuLmdseXBoaWNvbi1maWxtICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwOVwiOyB9IH1cbi5nbHlwaGljb24tdGgtbGFyZ2UgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTBcIjsgfSB9XG4uZ2x5cGhpY29uLXRoICAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDExXCI7IH0gfVxuLmdseXBoaWNvbi10aC1saXN0ICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxMlwiOyB9IH1cbi5nbHlwaGljb24tb2sgICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTNcIjsgfSB9XG4uZ2x5cGhpY29uLXJlbW92ZSAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDE0XCI7IH0gfVxuLmdseXBoaWNvbi16b29tLWluICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxNVwiOyB9IH1cbi5nbHlwaGljb24tem9vbS1vdXQgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTZcIjsgfSB9XG4uZ2x5cGhpY29uLW9mZiAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDE3XCI7IH0gfVxuLmdseXBoaWNvbi1zaWduYWwgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxOFwiOyB9IH1cbi5nbHlwaGljb24tY29nICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTlcIjsgfSB9XG4uZ2x5cGhpY29uLXRyYXNoICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDIwXCI7IH0gfVxuLmdseXBoaWNvbi1ob21lICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyMVwiOyB9IH1cbi5nbHlwaGljb24tZmlsZSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjJcIjsgfSB9XG4uZ2x5cGhpY29uLXRpbWUgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDIzXCI7IH0gfVxuLmdseXBoaWNvbi1yb2FkICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyNFwiOyB9IH1cbi5nbHlwaGljb24tZG93bmxvYWQtYWx0ICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjVcIjsgfSB9XG4uZ2x5cGhpY29uLWRvd25sb2FkICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDI2XCI7IH0gfVxuLmdseXBoaWNvbi11cGxvYWQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyN1wiOyB9IH1cbi5nbHlwaGljb24taW5ib3ggICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjhcIjsgfSB9XG4uZ2x5cGhpY29uLXBsYXktY2lyY2xlICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDI5XCI7IH0gfVxuLmdseXBoaWNvbi1yZXBlYXQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzMFwiOyB9IH1cbi5nbHlwaGljb24tcmVmcmVzaCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzFcIjsgfSB9XG4uZ2x5cGhpY29uLWxpc3QtYWx0ICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDMyXCI7IH0gfVxuLmdseXBoaWNvbi1sb2NrICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzM1wiOyB9IH1cbi5nbHlwaGljb24tZmxhZyAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzRcIjsgfSB9XG4uZ2x5cGhpY29uLWhlYWRwaG9uZXMgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDM1XCI7IH0gfVxuLmdseXBoaWNvbi12b2x1bWUtb2ZmICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzNlwiOyB9IH1cbi5nbHlwaGljb24tdm9sdW1lLWRvd24gICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzdcIjsgfSB9XG4uZ2x5cGhpY29uLXZvbHVtZS11cCAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDM4XCI7IH0gfVxuLmdseXBoaWNvbi1xcmNvZGUgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzOVwiOyB9IH1cbi5nbHlwaGljb24tYmFyY29kZSAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDBcIjsgfSB9XG4uZ2x5cGhpY29uLXRhZyAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQxXCI7IH0gfVxuLmdseXBoaWNvbi10YWdzICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0MlwiOyB9IH1cbi5nbHlwaGljb24tYm9vayAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDNcIjsgfSB9XG4uZ2x5cGhpY29uLWJvb2ttYXJrICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQ0XCI7IH0gfVxuLmdseXBoaWNvbi1wcmludCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0NVwiOyB9IH1cbi5nbHlwaGljb24tY2FtZXJhICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDZcIjsgfSB9XG4uZ2x5cGhpY29uLWZvbnQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQ3XCI7IH0gfVxuLmdseXBoaWNvbi1ib2xkICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0OFwiOyB9IH1cbi5nbHlwaGljb24taXRhbGljICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDlcIjsgfSB9XG4uZ2x5cGhpY29uLXRleHQtaGVpZ2h0ICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDUwXCI7IH0gfVxuLmdseXBoaWNvbi10ZXh0LXdpZHRoICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1MVwiOyB9IH1cbi5nbHlwaGljb24tYWxpZ24tbGVmdCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTJcIjsgfSB9XG4uZ2x5cGhpY29uLWFsaWduLWNlbnRlciAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDUzXCI7IH0gfVxuLmdseXBoaWNvbi1hbGlnbi1yaWdodCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1NFwiOyB9IH1cbi5nbHlwaGljb24tYWxpZ24tanVzdGlmeSAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTVcIjsgfSB9XG4uZ2x5cGhpY29uLWxpc3QgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDU2XCI7IH0gfVxuLmdseXBoaWNvbi1pbmRlbnQtbGVmdCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1N1wiOyB9IH1cbi5nbHlwaGljb24taW5kZW50LXJpZ2h0ICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNThcIjsgfSB9XG4uZ2x5cGhpY29uLWZhY2V0aW1lLXZpZGVvICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDU5XCI7IH0gfVxuLmdseXBoaWNvbi1waWN0dXJlICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2MFwiOyB9IH1cbi5nbHlwaGljb24tbWFwLW1hcmtlciAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjJcIjsgfSB9XG4uZ2x5cGhpY29uLWFkanVzdCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDYzXCI7IH0gfVxuLmdseXBoaWNvbi10aW50ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2NFwiOyB9IH1cbi5nbHlwaGljb24tZWRpdCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjVcIjsgfSB9XG4uZ2x5cGhpY29uLXNoYXJlICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDY2XCI7IH0gfVxuLmdseXBoaWNvbi1jaGVjayAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2N1wiOyB9IH1cbi5nbHlwaGljb24tbW92ZSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjhcIjsgfSB9XG4uZ2x5cGhpY29uLXN0ZXAtYmFja3dhcmQgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDY5XCI7IH0gfVxuLmdseXBoaWNvbi1mYXN0LWJhY2t3YXJkICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3MFwiOyB9IH1cbi5nbHlwaGljb24tYmFja3dhcmQgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzFcIjsgfSB9XG4uZ2x5cGhpY29uLXBsYXkgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDcyXCI7IH0gfVxuLmdseXBoaWNvbi1wYXVzZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3M1wiOyB9IH1cbi5nbHlwaGljb24tc3RvcCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzRcIjsgfSB9XG4uZ2x5cGhpY29uLWZvcndhcmQgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDc1XCI7IH0gfVxuLmdseXBoaWNvbi1mYXN0LWZvcndhcmQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3NlwiOyB9IH1cbi5nbHlwaGljb24tc3RlcC1mb3J3YXJkICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzdcIjsgfSB9XG4uZ2x5cGhpY29uLWVqZWN0ICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDc4XCI7IH0gfVxuLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3OVwiOyB9IH1cbi5nbHlwaGljb24tY2hldnJvbi1yaWdodCAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODBcIjsgfSB9XG4uZ2x5cGhpY29uLXBsdXMtc2lnbiAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDgxXCI7IH0gfVxuLmdseXBoaWNvbi1taW51cy1zaWduICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4MlwiOyB9IH1cbi5nbHlwaGljb24tcmVtb3ZlLXNpZ24gICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODNcIjsgfSB9XG4uZ2x5cGhpY29uLW9rLXNpZ24gICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDg0XCI7IH0gfVxuLmdseXBoaWNvbi1xdWVzdGlvbi1zaWduICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4NVwiOyB9IH1cbi5nbHlwaGljb24taW5mby1zaWduICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODZcIjsgfSB9XG4uZ2x5cGhpY29uLXNjcmVlbnNob3QgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDg3XCI7IH0gfVxuLmdseXBoaWNvbi1yZW1vdmUtY2lyY2xlICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4OFwiOyB9IH1cbi5nbHlwaGljb24tb2stY2lyY2xlICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODlcIjsgfSB9XG4uZ2x5cGhpY29uLWJhbi1jaXJjbGUgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDkwXCI7IH0gfVxuLmdseXBoaWNvbi1hcnJvdy1sZWZ0ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5MVwiOyB9IH1cbi5nbHlwaGljb24tYXJyb3ctcmlnaHQgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTJcIjsgfSB9XG4uZ2x5cGhpY29uLWFycm93LXVwICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDkzXCI7IH0gfVxuLmdseXBoaWNvbi1hcnJvdy1kb3duICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5NFwiOyB9IH1cbi5nbHlwaGljb24tc2hhcmUtYWx0ICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTVcIjsgfSB9XG4uZ2x5cGhpY29uLXJlc2l6ZS1mdWxsICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDk2XCI7IH0gfVxuLmdseXBoaWNvbi1yZXNpemUtc21hbGwgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5N1wiOyB9IH1cbi5nbHlwaGljb24tZXhjbGFtYXRpb24tc2lnbiAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDFcIjsgfSB9XG4uZ2x5cGhpY29uLWdpZnQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTAyXCI7IH0gfVxuLmdseXBoaWNvbi1sZWFmICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwM1wiOyB9IH1cbi5nbHlwaGljb24tZmlyZSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDRcIjsgfSB9XG4uZ2x5cGhpY29uLWV5ZS1vcGVuICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTA1XCI7IH0gfVxuLmdseXBoaWNvbi1leWUtY2xvc2UgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwNlwiOyB9IH1cbi5nbHlwaGljb24td2FybmluZy1zaWduICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDdcIjsgfSB9XG4uZ2x5cGhpY29uLXBsYW5lICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTA4XCI7IH0gfVxuLmdseXBoaWNvbi1jYWxlbmRhciAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwOVwiOyB9IH1cbi5nbHlwaGljb24tcmFuZG9tICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTBcIjsgfSB9XG4uZ2x5cGhpY29uLWNvbW1lbnQgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTExXCI7IH0gfVxuLmdseXBoaWNvbi1tYWduZXQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExMlwiOyB9IH1cbi5nbHlwaGljb24tY2hldnJvbi11cCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTNcIjsgfSB9XG4uZ2x5cGhpY29uLWNoZXZyb24tZG93biAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTE0XCI7IH0gfVxuLmdseXBoaWNvbi1yZXR3ZWV0ICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExNVwiOyB9IH1cbi5nbHlwaGljb24tc2hvcHBpbmctY2FydCAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTZcIjsgfSB9XG4uZ2x5cGhpY29uLWZvbGRlci1jbG9zZSAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTE3XCI7IH0gfVxuLmdseXBoaWNvbi1mb2xkZXItb3BlbiAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExOFwiOyB9IH1cbi5nbHlwaGljb24tcmVzaXplLXZlcnRpY2FsICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTlcIjsgfSB9XG4uZ2x5cGhpY29uLXJlc2l6ZS1ob3Jpem9udGFsICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTIwXCI7IH0gfVxuLmdseXBoaWNvbi1oZGQgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyMVwiOyB9IH1cbi5nbHlwaGljb24tYnVsbGhvcm4gICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjJcIjsgfSB9XG4uZ2x5cGhpY29uLWJlbGwgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTIzXCI7IH0gfVxuLmdseXBoaWNvbi1jZXJ0aWZpY2F0ZSAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyNFwiOyB9IH1cbi5nbHlwaGljb24tdGh1bWJzLXVwICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjVcIjsgfSB9XG4uZ2x5cGhpY29uLXRodW1icy1kb3duICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTI2XCI7IH0gfVxuLmdseXBoaWNvbi1oYW5kLXJpZ2h0ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyN1wiOyB9IH1cbi5nbHlwaGljb24taGFuZC1sZWZ0ICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjhcIjsgfSB9XG4uZ2x5cGhpY29uLWhhbmQtdXAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTI5XCI7IH0gfVxuLmdseXBoaWNvbi1oYW5kLWRvd24gICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzMFwiOyB9IH1cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LXJpZ2h0ICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzFcIjsgfSB9XG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy1sZWZ0ICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTMyXCI7IH0gfVxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctdXAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzM1wiOyB9IH1cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LWRvd24gICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzRcIjsgfSB9XG4uZ2x5cGhpY29uLWdsb2JlICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTM1XCI7IH0gfVxuLmdseXBoaWNvbi13cmVuY2ggICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzNlwiOyB9IH1cbi5nbHlwaGljb24tdGFza3MgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzdcIjsgfSB9XG4uZ2x5cGhpY29uLWZpbHRlciAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTM4XCI7IH0gfVxuLmdseXBoaWNvbi1icmllZmNhc2UgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzOVwiOyB9IH1cbi5nbHlwaGljb24tZnVsbHNjcmVlbiAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDBcIjsgfSB9XG4uZ2x5cGhpY29uLWRhc2hib2FyZCAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQxXCI7IH0gfVxuLmdseXBoaWNvbi1wYXBlcmNsaXAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0MlwiOyB9IH1cbi5nbHlwaGljb24taGVhcnQtZW1wdHkgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDNcIjsgfSB9XG4uZ2x5cGhpY29uLWxpbmsgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQ0XCI7IH0gfVxuLmdseXBoaWNvbi1waG9uZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0NVwiOyB9IH1cbi5nbHlwaGljb24tcHVzaHBpbiAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDZcIjsgfSB9XG4uZ2x5cGhpY29uLXVzZCAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQ4XCI7IH0gfVxuLmdseXBoaWNvbi1nYnAgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0OVwiOyB9IH1cbi5nbHlwaGljb24tc29ydCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTBcIjsgfSB9XG4uZ2x5cGhpY29uLXNvcnQtYnktYWxwaGFiZXQgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTUxXCI7IH0gfVxuLmdseXBoaWNvbi1zb3J0LWJ5LWFscGhhYmV0LWFsdCAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1MlwiOyB9IH1cbi5nbHlwaGljb24tc29ydC1ieS1vcmRlciAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTNcIjsgfSB9XG4uZ2x5cGhpY29uLXNvcnQtYnktb3JkZXItYWx0ICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTU0XCI7IH0gfVxuLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXMgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1NVwiOyB9IH1cbi5nbHlwaGljb24tc29ydC1ieS1hdHRyaWJ1dGVzLWFsdCB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTZcIjsgfSB9XG4uZ2x5cGhpY29uLXVuY2hlY2tlZCAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTU3XCI7IH0gfVxuLmdseXBoaWNvbi1leHBhbmQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1OFwiOyB9IH1cbi5nbHlwaGljb24tY29sbGFwc2UtZG93biAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTlcIjsgfSB9XG4uZ2x5cGhpY29uLWNvbGxhcHNlLXVwICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTYwXCI7IH0gfVxuLmdseXBoaWNvbi1sb2ctaW4gICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2MVwiOyB9IH1cbi5nbHlwaGljb24tZmxhc2ggICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjJcIjsgfSB9XG4uZ2x5cGhpY29uLWxvZy1vdXQgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTYzXCI7IH0gfVxuLmdseXBoaWNvbi1uZXctd2luZG93ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2NFwiOyB9IH1cbi5nbHlwaGljb24tcmVjb3JkICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjVcIjsgfSB9XG4uZ2x5cGhpY29uLXNhdmUgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTY2XCI7IH0gfVxuLmdseXBoaWNvbi1vcGVuICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2N1wiOyB9IH1cbi5nbHlwaGljb24tc2F2ZWQgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjhcIjsgfSB9XG4uZ2x5cGhpY29uLWltcG9ydCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTY5XCI7IH0gfVxuLmdseXBoaWNvbi1leHBvcnQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3MFwiOyB9IH1cbi5nbHlwaGljb24tc2VuZCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzFcIjsgfSB9XG4uZ2x5cGhpY29uLWZsb3BweS1kaXNrICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTcyXCI7IH0gfVxuLmdseXBoaWNvbi1mbG9wcHktc2F2ZWQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3M1wiOyB9IH1cbi5nbHlwaGljb24tZmxvcHB5LXJlbW92ZSAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzRcIjsgfSB9XG4uZ2x5cGhpY29uLWZsb3BweS1zYXZlICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTc1XCI7IH0gfVxuLmdseXBoaWNvbi1mbG9wcHktb3BlbiAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3NlwiOyB9IH1cbi5nbHlwaGljb24tY3JlZGl0LWNhcmQgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzdcIjsgfSB9XG4uZ2x5cGhpY29uLXRyYW5zZmVyICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTc4XCI7IH0gfVxuLmdseXBoaWNvbi1jdXRsZXJ5ICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3OVwiOyB9IH1cbi5nbHlwaGljb24taGVhZGVyICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODBcIjsgfSB9XG4uZ2x5cGhpY29uLWNvbXByZXNzZWQgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTgxXCI7IH0gfVxuLmdseXBoaWNvbi1lYXJwaG9uZSAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4MlwiOyB9IH1cbi5nbHlwaGljb24tcGhvbmUtYWx0ICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODNcIjsgfSB9XG4uZ2x5cGhpY29uLXRvd2VyICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTg0XCI7IH0gfVxuLmdseXBoaWNvbi1zdGF0cyAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4NVwiOyB9IH1cbi5nbHlwaGljb24tc2QtdmlkZW8gICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODZcIjsgfSB9XG4uZ2x5cGhpY29uLWhkLXZpZGVvICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTg3XCI7IH0gfVxuLmdseXBoaWNvbi1zdWJ0aXRsZXMgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4OFwiOyB9IH1cbi5nbHlwaGljb24tc291bmQtc3RlcmVvICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODlcIjsgfSB9XG4uZ2x5cGhpY29uLXNvdW5kLWRvbGJ5ICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTkwXCI7IH0gfVxuLmdseXBoaWNvbi1zb3VuZC01LTEgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5MVwiOyB9IH1cbi5nbHlwaGljb24tc291bmQtNi0xICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTJcIjsgfSB9XG4uZ2x5cGhpY29uLXNvdW5kLTctMSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTkzXCI7IH0gfVxuLmdseXBoaWNvbi1jb3B5cmlnaHQtbWFyayAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5NFwiOyB9IH1cbi5nbHlwaGljb24tcmVnaXN0cmF0aW9uLW1hcmsgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTVcIjsgfSB9XG4uZ2x5cGhpY29uLWNsb3VkLWRvd25sb2FkICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTk3XCI7IH0gfVxuLmdseXBoaWNvbi1jbG91ZC11cGxvYWQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5OFwiOyB9IH1cbi5nbHlwaGljb24tdHJlZS1jb25pZmVyICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTlcIjsgfSB9XG4uZ2x5cGhpY29uLXRyZWUtZGVjaWR1b3VzICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjAwXCI7IH0gfVxuLmdseXBoaWNvbi1jZCAgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwMVwiOyB9IH1cbi5nbHlwaGljb24tc2F2ZS1maWxlICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDJcIjsgfSB9XG4uZ2x5cGhpY29uLW9wZW4tZmlsZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjAzXCI7IH0gfVxuLmdseXBoaWNvbi1sZXZlbC11cCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwNFwiOyB9IH1cbi5nbHlwaGljb24tY29weSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDVcIjsgfSB9XG4uZ2x5cGhpY29uLXBhc3RlICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjA2XCI7IH0gfVxuLy8gVGhlIGZvbGxvd2luZyAyIEdseXBoaWNvbnMgYXJlIG9taXR0ZWQgZm9yIHRoZSB0aW1lIGJlaW5nIGJlY2F1c2Vcbi8vIHRoZXkgY3VycmVudGx5IHVzZSBVbmljb2RlIGNvZGVwb2ludHMgdGhhdCBhcmUgb3V0c2lkZSB0aGVcbi8vIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSAoQk1QKS4gT2xkZXIgYnVnZ3kgdmVyc2lvbnMgb2YgV2ViS2l0IGNhbid0IGhhbmRsZVxuLy8gbm9uLUJNUCBjb2RlcG9pbnRzIGluIENTUyBzdHJpbmcgZXNjYXBlcywgYW5kIHRodXMgY2FuJ3QgZGlzcGxheSB0aGVzZSB0d28gaWNvbnMuXG4vLyBOb3RhYmx5LCB0aGUgYnVnIGFmZmVjdHMgc29tZSBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgQW5kcm9pZCBCcm93c2VyLlxuLy8gTW9yZSBpbmZvOiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzEwMTA2XG4vLyAuZ2x5cGhpY29uLWRvb3IgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwxZjZhYVwiOyB9IH1cbi8vIC5nbHlwaGljb24ta2V5ICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDFmNTExXCI7IH0gfVxuLmdseXBoaWNvbi1hbGVydCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwOVwiOyB9IH1cbi5nbHlwaGljb24tZXF1YWxpemVyICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTBcIjsgfSB9XG4uZ2x5cGhpY29uLWtpbmcgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjExXCI7IH0gfVxuLmdseXBoaWNvbi1xdWVlbiAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxMlwiOyB9IH1cbi5nbHlwaGljb24tcGF3biAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTNcIjsgfSB9XG4uZ2x5cGhpY29uLWJpc2hvcCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjE0XCI7IH0gfVxuLmdseXBoaWNvbi1rbmlnaHQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxNVwiOyB9IH1cbi5nbHlwaGljb24tYmFieS1mb3JtdWxhICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTZcIjsgfSB9XG4uZ2x5cGhpY29uLXRlbnQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyNmZhXCI7IH0gfVxuLmdseXBoaWNvbi1ibGFja2JvYXJkICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxOFwiOyB9IH1cbi5nbHlwaGljb24tYmVkICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTlcIjsgfSB9XG4uZ2x5cGhpY29uLWFwcGxlICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmOGZmXCI7IH0gfVxuLmdseXBoaWNvbi1lcmFzZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIyMVwiOyB9IH1cbi5nbHlwaGljb24taG91cmdsYXNzICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDIzMWJcIjsgfSB9XG4uZ2x5cGhpY29uLWxhbXAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjIzXCI7IH0gfVxuLmdseXBoaWNvbi1kdXBsaWNhdGUgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIyNFwiOyB9IH1cbi5nbHlwaGljb24tcGlnZ3ktYmFuayAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjVcIjsgfSB9XG4uZ2x5cGhpY29uLXNjaXNzb3JzICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjI2XCI7IH0gfVxuLmdseXBoaWNvbi1iaXRjb2luICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIyN1wiOyB9IH1cbi5nbHlwaGljb24tYnRjICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjdcIjsgfSB9XG4uZ2x5cGhpY29uLXhidCAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjI3XCI7IH0gfVxuLmdseXBoaWNvbi15ZW4gICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMDBhNVwiOyB9IH1cbi5nbHlwaGljb24tanB5ICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDAwYTVcIjsgfSB9XG4uZ2x5cGhpY29uLXJ1YmxlICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyMGJkXCI7IH0gfVxuLmdseXBoaWNvbi1ydWIgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjBiZFwiOyB9IH1cbi5nbHlwaGljb24tc2NhbGUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzBcIjsgfSB9XG4uZ2x5cGhpY29uLWljZS1sb2xseSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjMxXCI7IH0gfVxuLmdseXBoaWNvbi1pY2UtbG9sbHktdGFzdGVkICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzMlwiOyB9IH1cbi5nbHlwaGljb24tZWR1Y2F0aW9uICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzNcIjsgfSB9XG4uZ2x5cGhpY29uLW9wdGlvbi1ob3Jpem9udGFsICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjM0XCI7IH0gfVxuLmdseXBoaWNvbi1vcHRpb24tdmVydGljYWwgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzNVwiOyB9IH1cbi5nbHlwaGljb24tbWVudS1oYW1idXJnZXIgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzZcIjsgfSB9XG4uZ2x5cGhpY29uLW1vZGFsLXdpbmRvdyAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjM3XCI7IH0gfVxuLmdseXBoaWNvbi1vaWwgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzOFwiOyB9IH1cbi5nbHlwaGljb24tZ3JhaW4gICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzlcIjsgfSB9XG4uZ2x5cGhpY29uLXN1bmdsYXNzZXMgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQwXCI7IH0gfVxuLmdseXBoaWNvbi10ZXh0LXNpemUgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0MVwiOyB9IH1cbi5nbHlwaGljb24tdGV4dC1jb2xvciAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDJcIjsgfSB9XG4uZ2x5cGhpY29uLXRleHQtYmFja2dyb3VuZCAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQzXCI7IH0gfVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tdG9wICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0NFwiOyB9IH1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWJvdHRvbSAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDVcIjsgfSB9XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1ob3Jpem9udGFseyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQ2XCI7IH0gfVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tbGVmdCAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0N1wiOyB9IH1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLXZlcnRpY2FsICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDhcIjsgfSB9XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1yaWdodCAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQ5XCI7IH0gfVxuLmdseXBoaWNvbi10cmlhbmdsZS1yaWdodCAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1MFwiOyB9IH1cbi5nbHlwaGljb24tdHJpYW5nbGUtbGVmdCAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTFcIjsgfSB9XG4uZ2x5cGhpY29uLXRyaWFuZ2xlLWJvdHRvbSAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjUyXCI7IH0gfVxuLmdseXBoaWNvbi10cmlhbmdsZS10b3AgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1M1wiOyB9IH1cbi5nbHlwaGljb24tY29uc29sZSAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTRcIjsgfSB9XG4uZ2x5cGhpY29uLXN1cGVyc2NyaXB0ICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjU1XCI7IH0gfVxuLmdseXBoaWNvbi1zdWJzY3JpcHQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1NlwiOyB9IH1cbi5nbHlwaGljb24tbWVudS1sZWZ0ICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTdcIjsgfSB9XG4uZ2x5cGhpY29uLW1lbnUtcmlnaHQgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjU4XCI7IH0gfVxuLmdseXBoaWNvbi1tZW51LWRvd24gICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1OVwiOyB9IH1cbi5nbHlwaGljb24tbWVudS11cCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNjBcIjsgfSB9XG4iLCIvL1xuLy8gU2NhZmZvbGRpbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gUmVzZXQgdGhlIGJveC1zaXppbmdcbi8vXG4vLyBIZWFkcyB1cCEgVGhpcyByZXNldCBtYXkgY2F1c2UgY29uZmxpY3RzIHdpdGggc29tZSB0aGlyZC1wYXJ0eSB3aWRnZXRzLlxuLy8gRm9yIHJlY29tbWVuZGF0aW9ucyBvbiByZXNvbHZpbmcgc3VjaCBjb25mbGljdHMsIHNlZVxuLy8gaHR0cDovL2dldGJvb3RzdHJhcC5jb20vZ2V0dGluZy1zdGFydGVkLyN0aGlyZC1ib3gtc2l6aW5nXG4qIHtcbiAgLmJveC1zaXppbmcoYm9yZGVyLWJveCk7XG59XG4qOmJlZm9yZSxcbio6YWZ0ZXIge1xuICAuYm94LXNpemluZyhib3JkZXItYm94KTtcbn1cblxuXG4vLyBCb2R5IHJlc2V0XG5cbmh0bWwge1xuICBmb250LXNpemU6IDEwcHg7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLDAsMCwwKTtcbn1cblxuYm9keSB7XG4gIGZvbnQtZmFtaWx5OiBAZm9udC1mYW1pbHktYmFzZTtcbiAgZm9udC1zaXplOiBAZm9udC1zaXplLWJhc2U7XG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcbiAgY29sb3I6IEB0ZXh0LWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAYm9keS1iZztcbn1cblxuLy8gUmVzZXQgZm9udHMgZm9yIHJlbGV2YW50IGVsZW1lbnRzXG5pbnB1dCxcbmJ1dHRvbixcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG59XG5cblxuLy8gTGlua3NcblxuYSB7XG4gIGNvbG9yOiBAbGluay1jb2xvcjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiBAbGluay1ob3Zlci1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IEBsaW5rLWhvdmVyLWRlY29yYXRpb247XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICAudGFiLWZvY3VzKCk7XG4gIH1cbn1cblxuXG4vLyBGaWd1cmVzXG4vL1xuLy8gV2UgcmVzZXQgdGhpcyBoZXJlIGJlY2F1c2UgcHJldmlvdXNseSBOb3JtYWxpemUgaGFkIG5vIGBmaWd1cmVgIG1hcmdpbnMuIFRoaXNcbi8vIGVuc3VyZXMgd2UgZG9uJ3QgYnJlYWsgYW55b25lJ3MgdXNlIG9mIHRoZSBlbGVtZW50LlxuXG5maWd1cmUge1xuICBtYXJnaW46IDA7XG59XG5cblxuLy8gSW1hZ2VzXG5cbmltZyB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi8vIFJlc3BvbnNpdmUgaW1hZ2VzIChlbnN1cmUgaW1hZ2VzIGRvbid0IHNjYWxlIGJleW9uZCB0aGVpciBwYXJlbnRzKVxuLmltZy1yZXNwb25zaXZlIHtcbiAgLmltZy1yZXNwb25zaXZlKCk7XG59XG5cbi8vIFJvdW5kZWQgY29ybmVyc1xuLmltZy1yb3VuZGVkIHtcbiAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtbGFyZ2U7XG59XG5cbi8vIEltYWdlIHRodW1ibmFpbHNcbi8vXG4vLyBIZWFkcyB1cCEgVGhpcyBpcyBtaXhpbi1lZCBpbnRvIHRodW1ibmFpbHMubGVzcyBmb3IgYC50aHVtYm5haWxgLlxuLmltZy10aHVtYm5haWwge1xuICBwYWRkaW5nOiBAdGh1bWJuYWlsLXBhZGRpbmc7XG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogQHRodW1ibmFpbC1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgQHRodW1ibmFpbC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6IEB0aHVtYm5haWwtYm9yZGVyLXJhZGl1cztcbiAgLnRyYW5zaXRpb24oYWxsIC4ycyBlYXNlLWluLW91dCk7XG5cbiAgLy8gS2VlcCB0aGVtIGF0IG1vc3QgMTAwJSB3aWRlXG4gIC5pbWctcmVzcG9uc2l2ZShpbmxpbmUtYmxvY2spO1xufVxuXG4vLyBQZXJmZWN0IGNpcmNsZVxuLmltZy1jaXJjbGUge1xuICBib3JkZXItcmFkaXVzOiA1MCU7IC8vIHNldCByYWRpdXMgaW4gcGVyY2VudHNcbn1cblxuXG4vLyBIb3Jpem9udGFsIHJ1bGVzXG5cbmhyIHtcbiAgbWFyZ2luLXRvcDogICAgQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBtYXJnaW4tYm90dG9tOiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIEBoci1ib3JkZXI7XG59XG5cblxuLy8gT25seSBkaXNwbGF5IGNvbnRlbnQgdG8gc2NyZWVuIHJlYWRlcnNcbi8vXG4vLyBTZWU6IGh0dHA6Ly9hMTF5cHJvamVjdC5jb20vcG9zdHMvaG93LXRvLWhpZGUtY29udGVudC9cblxuLnNyLW9ubHkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxcHg7XG4gIGhlaWdodDogMXB4O1xuICBtYXJnaW46IC0xcHg7XG4gIHBhZGRpbmc6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGNsaXA6IHJlY3QoMCwwLDAsMCk7XG4gIGJvcmRlcjogMDtcbn1cblxuLy8gVXNlIGluIGNvbmp1bmN0aW9uIHdpdGggLnNyLW9ubHkgdG8gb25seSBkaXNwbGF5IGNvbnRlbnQgd2hlbiBpdCdzIGZvY3VzZWQuXG4vLyBVc2VmdWwgZm9yIFwiU2tpcCB0byBtYWluIGNvbnRlbnRcIiBsaW5rczsgc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTMvTk9URS1XQ0FHMjAtVEVDSFMtMjAxMzA5MDUvRzFcbi8vIENyZWRpdDogSFRNTDUgQm9pbGVycGxhdGVcblxuLnNyLW9ubHktZm9jdXNhYmxlIHtcbiAgJjphY3RpdmUsXG4gICY6Zm9jdXMge1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIG1hcmdpbjogMDtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICBjbGlwOiBhdXRvO1xuICB9XG59XG5cblxuLy8gaU9TIFwiY2xpY2thYmxlIGVsZW1lbnRzXCIgZml4IGZvciByb2xlPVwiYnV0dG9uXCJcbi8vXG4vLyBGaXhlcyBcImNsaWNrYWJpbGl0eVwiIGlzc3VlIChhbmQgbW9yZSBnZW5lcmFsbHksIHRoZSBmaXJpbmcgb2YgZXZlbnRzIHN1Y2ggYXMgZm9jdXMgYXMgd2VsbClcbi8vIGZvciB0cmFkaXRpb25hbGx5IG5vbi1mb2N1c2FibGUgZWxlbWVudHMgd2l0aCByb2xlPVwiYnV0dG9uXCJcbi8vIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvY2xpY2sjU2FmYXJpX01vYmlsZVxuXG5bcm9sZT1cImJ1dHRvblwiXSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbiIsIi8vIFZlbmRvciBQcmVmaXhlc1xuLy9cbi8vIEFsbCB2ZW5kb3IgbWl4aW5zIGFyZSBkZXByZWNhdGVkIGFzIG9mIHYzLjIuMCBkdWUgdG8gdGhlIGludHJvZHVjdGlvbiBvZlxuLy8gQXV0b3ByZWZpeGVyIGluIG91ciBHcnVudGZpbGUuIFRoZXkgd2lsbCBiZSByZW1vdmVkIGluIHY0LlxuXG4vLyAtIEFuaW1hdGlvbnNcbi8vIC0gQmFja2ZhY2UgdmlzaWJpbGl0eVxuLy8gLSBCb3ggc2hhZG93XG4vLyAtIEJveCBzaXppbmdcbi8vIC0gQ29udGVudCBjb2x1bW5zXG4vLyAtIEh5cGhlbnNcbi8vIC0gUGxhY2Vob2xkZXIgdGV4dFxuLy8gLSBUcmFuc2Zvcm1hdGlvbnNcbi8vIC0gVHJhbnNpdGlvbnNcbi8vIC0gVXNlciBTZWxlY3RcblxuXG4vLyBBbmltYXRpb25zXG4uYW5pbWF0aW9uKEBhbmltYXRpb24pIHtcbiAgLXdlYmtpdC1hbmltYXRpb246IEBhbmltYXRpb247XG4gICAgICAgLW8tYW5pbWF0aW9uOiBAYW5pbWF0aW9uO1xuICAgICAgICAgIGFuaW1hdGlvbjogQGFuaW1hdGlvbjtcbn1cbi5hbmltYXRpb24tbmFtZShAbmFtZSkge1xuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBAbmFtZTtcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogQG5hbWU7XG59XG4uYW5pbWF0aW9uLWR1cmF0aW9uKEBkdXJhdGlvbikge1xuICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogQGR1cmF0aW9uO1xuICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogQGR1cmF0aW9uO1xufVxuLmFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24oQHRpbWluZy1mdW5jdGlvbikge1xuICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IEB0aW1pbmctZnVuY3Rpb247XG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogQHRpbWluZy1mdW5jdGlvbjtcbn1cbi5hbmltYXRpb24tZGVsYXkoQGRlbGF5KSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiBAZGVsYXk7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiBAZGVsYXk7XG59XG4uYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudChAaXRlcmF0aW9uLWNvdW50KSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogQGl0ZXJhdGlvbi1jb3VudDtcbiAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBAaXRlcmF0aW9uLWNvdW50O1xufVxuLmFuaW1hdGlvbi1kaXJlY3Rpb24oQGRpcmVjdGlvbikge1xuICAtd2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb246IEBkaXJlY3Rpb247XG4gICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogQGRpcmVjdGlvbjtcbn1cbi5hbmltYXRpb24tZmlsbC1tb2RlKEBmaWxsLW1vZGUpIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBAZmlsbC1tb2RlO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IEBmaWxsLW1vZGU7XG59XG5cbi8vIEJhY2tmYWNlIHZpc2liaWxpdHlcbi8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBmbGlja2VyaW5nIHdoZW4gdXNpbmcgQ1NTIDNEIHRyYW5zZm9ybXMuXG4vLyBEZWZhdWx0IHZhbHVlIGlzIGB2aXNpYmxlYCwgYnV0IGNhbiBiZSBjaGFuZ2VkIHRvIGBoaWRkZW5gXG5cbi5iYWNrZmFjZS12aXNpYmlsaXR5KEB2aXNpYmlsaXR5KXtcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBAdmlzaWJpbGl0eTtcbiAgICAgLW1vei1iYWNrZmFjZS12aXNpYmlsaXR5OiBAdmlzaWJpbGl0eTtcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBAdmlzaWJpbGl0eTtcbn1cblxuLy8gRHJvcCBzaGFkb3dzXG4vL1xuLy8gTm90ZTogRGVwcmVjYXRlZCBgLmJveC1zaGFkb3coKWAgYXMgb2YgdjMuMS4wIHNpbmNlIGFsbCBvZiBCb290c3RyYXAnc1xuLy8gc3VwcG9ydGVkIGJyb3dzZXJzIHRoYXQgaGF2ZSBib3ggc2hhZG93IGNhcGFiaWxpdGllcyBub3cgc3VwcG9ydCBpdC5cblxuLmJveC1zaGFkb3coQHNoYWRvdykge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IEBzaGFkb3c7IC8vIGlPUyA8NC4zICYgQW5kcm9pZCA8NC4xXG4gICAgICAgICAgYm94LXNoYWRvdzogQHNoYWRvdztcbn1cblxuLy8gQm94IHNpemluZ1xuLmJveC1zaXppbmcoQGJveG1vZGVsKSB7XG4gIC13ZWJraXQtYm94LXNpemluZzogQGJveG1vZGVsO1xuICAgICAtbW96LWJveC1zaXppbmc6IEBib3htb2RlbDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBAYm94bW9kZWw7XG59XG5cbi8vIENTUzMgQ29udGVudCBDb2x1bW5zXG4uY29udGVudC1jb2x1bW5zKEBjb2x1bW4tY291bnQ7IEBjb2x1bW4tZ2FwOiBAZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgLXdlYmtpdC1jb2x1bW4tY291bnQ6IEBjb2x1bW4tY291bnQ7XG4gICAgIC1tb3otY29sdW1uLWNvdW50OiBAY29sdW1uLWNvdW50O1xuICAgICAgICAgIGNvbHVtbi1jb3VudDogQGNvbHVtbi1jb3VudDtcbiAgLXdlYmtpdC1jb2x1bW4tZ2FwOiBAY29sdW1uLWdhcDtcbiAgICAgLW1vei1jb2x1bW4tZ2FwOiBAY29sdW1uLWdhcDtcbiAgICAgICAgICBjb2x1bW4tZ2FwOiBAY29sdW1uLWdhcDtcbn1cblxuLy8gT3B0aW9uYWwgaHlwaGVuYXRpb25cbi5oeXBoZW5zKEBtb2RlOiBhdXRvKSB7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgLXdlYmtpdC1oeXBoZW5zOiBAbW9kZTtcbiAgICAgLW1vei1oeXBoZW5zOiBAbW9kZTtcbiAgICAgIC1tcy1oeXBoZW5zOiBAbW9kZTsgLy8gSUUxMCtcbiAgICAgICAtby1oeXBoZW5zOiBAbW9kZTtcbiAgICAgICAgICBoeXBoZW5zOiBAbW9kZTtcbn1cblxuLy8gUGxhY2Vob2xkZXIgdGV4dFxuLnBsYWNlaG9sZGVyKEBjb2xvcjogQGlucHV0LWNvbG9yLXBsYWNlaG9sZGVyKSB7XG4gIC8vIEZpcmVmb3hcbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IEBjb2xvcjtcbiAgICBvcGFjaXR5OiAxOyAvLyBPdmVycmlkZSBGaXJlZm94J3MgdW51c3VhbCBkZWZhdWx0IG9wYWNpdHk7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8xMTUyNlxuICB9XG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHsgY29sb3I6IEBjb2xvcjsgfSAvLyBJbnRlcm5ldCBFeHBsb3JlciAxMCtcbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciAgeyBjb2xvcjogQGNvbG9yOyB9IC8vIFNhZmFyaSBhbmQgQ2hyb21lXG59XG5cbi8vIFRyYW5zZm9ybWF0aW9uc1xuLnNjYWxlKEByYXRpbykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoQHJhdGlvKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlKEByYXRpbyk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiBzY2FsZShAcmF0aW8pO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoQHJhdGlvKTtcbn1cbi5zY2FsZShAcmF0aW9YOyBAcmF0aW9ZKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZShAcmF0aW9YLCBAcmF0aW9ZKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlKEByYXRpb1gsIEByYXRpb1kpOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogc2NhbGUoQHJhdGlvWCwgQHJhdGlvWSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZShAcmF0aW9YLCBAcmF0aW9ZKTtcbn1cbi5zY2FsZVgoQHJhdGlvKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoQHJhdGlvKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlWChAcmF0aW8pOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogc2NhbGVYKEByYXRpbyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoQHJhdGlvKTtcbn1cbi5zY2FsZVkoQHJhdGlvKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVkoQHJhdGlvKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlWShAcmF0aW8pOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogc2NhbGVZKEByYXRpbyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVkoQHJhdGlvKTtcbn1cbi5za2V3KEB4OyBAeSkge1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2tld1goQHgpIHNrZXdZKEB5KTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHNrZXdYKEB4KSBza2V3WShAeSk7IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzQ4ODU7IElFOStcbiAgICAgICAtby10cmFuc2Zvcm06IHNrZXdYKEB4KSBza2V3WShAeSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBza2V3WChAeCkgc2tld1koQHkpO1xufVxuLnRyYW5zbGF0ZShAeDsgQHkpIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZShAeCwgQHkpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKEB4LCBAeSk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUoQHgsIEB5KTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZShAeCwgQHkpO1xufVxuLnRyYW5zbGF0ZTNkKEB4OyBAeTsgQHopIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKEB4LCBAeSwgQHopO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoQHgsIEB5LCBAeik7XG59XG4ucm90YXRlKEBkZWdyZWVzKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoQGRlZ3JlZXMpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlKEBkZWdyZWVzKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHJvdGF0ZShAZGVncmVlcyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoQGRlZ3JlZXMpO1xufVxuLnJvdGF0ZVgoQGRlZ3JlZXMpIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZVgoQGRlZ3JlZXMpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlWChAZGVncmVlcyk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiByb3RhdGVYKEBkZWdyZWVzKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoQGRlZ3JlZXMpO1xufVxuLnJvdGF0ZVkoQGRlZ3JlZXMpIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZVkoQGRlZ3JlZXMpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlWShAZGVncmVlcyk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiByb3RhdGVZKEBkZWdyZWVzKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVkoQGRlZ3JlZXMpO1xufVxuLnBlcnNwZWN0aXZlKEBwZXJzcGVjdGl2ZSkge1xuICAtd2Via2l0LXBlcnNwZWN0aXZlOiBAcGVyc3BlY3RpdmU7XG4gICAgIC1tb3otcGVyc3BlY3RpdmU6IEBwZXJzcGVjdGl2ZTtcbiAgICAgICAgICBwZXJzcGVjdGl2ZTogQHBlcnNwZWN0aXZlO1xufVxuLnBlcnNwZWN0aXZlLW9yaWdpbihAcGVyc3BlY3RpdmUpIHtcbiAgLXdlYmtpdC1wZXJzcGVjdGl2ZS1vcmlnaW46IEBwZXJzcGVjdGl2ZTtcbiAgICAgLW1vei1wZXJzcGVjdGl2ZS1vcmlnaW46IEBwZXJzcGVjdGl2ZTtcbiAgICAgICAgICBwZXJzcGVjdGl2ZS1vcmlnaW46IEBwZXJzcGVjdGl2ZTtcbn1cbi50cmFuc2Zvcm0tb3JpZ2luKEBvcmlnaW4pIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBAb3JpZ2luO1xuICAgICAtbW96LXRyYW5zZm9ybS1vcmlnaW46IEBvcmlnaW47XG4gICAgICAtbXMtdHJhbnNmb3JtLW9yaWdpbjogQG9yaWdpbjsgLy8gSUU5IG9ubHlcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBAb3JpZ2luO1xufVxuXG5cbi8vIFRyYW5zaXRpb25zXG5cbi50cmFuc2l0aW9uKEB0cmFuc2l0aW9uKSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogQHRyYW5zaXRpb247XG4gICAgICAgLW8tdHJhbnNpdGlvbjogQHRyYW5zaXRpb247XG4gICAgICAgICAgdHJhbnNpdGlvbjogQHRyYW5zaXRpb247XG59XG4udHJhbnNpdGlvbi1wcm9wZXJ0eShAdHJhbnNpdGlvbi1wcm9wZXJ0eSkge1xuICAtd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6IEB0cmFuc2l0aW9uLXByb3BlcnR5O1xuICAgICAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IEB0cmFuc2l0aW9uLXByb3BlcnR5O1xufVxuLnRyYW5zaXRpb24tZGVsYXkoQHRyYW5zaXRpb24tZGVsYXkpIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiBAdHJhbnNpdGlvbi1kZWxheTtcbiAgICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiBAdHJhbnNpdGlvbi1kZWxheTtcbn1cbi50cmFuc2l0aW9uLWR1cmF0aW9uKEB0cmFuc2l0aW9uLWR1cmF0aW9uKSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogQHRyYW5zaXRpb24tZHVyYXRpb247XG4gICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogQHRyYW5zaXRpb24tZHVyYXRpb247XG59XG4udHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24oQHRpbWluZy1mdW5jdGlvbikge1xuICAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBAdGltaW5nLWZ1bmN0aW9uO1xuICAgICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBAdGltaW5nLWZ1bmN0aW9uO1xufVxuLnRyYW5zaXRpb24tdHJhbnNmb3JtKEB0cmFuc2l0aW9uKSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gQHRyYW5zaXRpb247XG4gICAgIC1tb3otdHJhbnNpdGlvbjogLW1vei10cmFuc2Zvcm0gQHRyYW5zaXRpb247XG4gICAgICAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIEB0cmFuc2l0aW9uO1xuICAgICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSBAdHJhbnNpdGlvbjtcbn1cblxuXG4vLyBVc2VyIHNlbGVjdFxuLy8gRm9yIHNlbGVjdGluZyB0ZXh0IG9uIHRoZSBwYWdlXG5cbi51c2VyLXNlbGVjdChAc2VsZWN0KSB7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IEBzZWxlY3Q7XG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IEBzZWxlY3Q7XG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IEBzZWxlY3Q7IC8vIElFMTArXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IEBzZWxlY3Q7XG59XG4iLCIvLyBXZWJLaXQtc3R5bGUgZm9jdXNcblxuLnRhYi1mb2N1cygpIHtcbiAgLy8gRGVmYXVsdFxuICBvdXRsaW5lOiB0aGluIGRvdHRlZDtcbiAgLy8gV2ViS2l0XG4gIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XG59XG4iLCIvLyBJbWFnZSBNaXhpbnNcbi8vIC0gUmVzcG9uc2l2ZSBpbWFnZVxuLy8gLSBSZXRpbmEgaW1hZ2VcblxuXG4vLyBSZXNwb25zaXZlIGltYWdlXG4vL1xuLy8gS2VlcCBpbWFnZXMgZnJvbSBzY2FsaW5nIGJleW9uZCB0aGUgd2lkdGggb2YgdGhlaXIgcGFyZW50cy5cbi5pbWctcmVzcG9uc2l2ZShAZGlzcGxheTogYmxvY2spIHtcbiAgZGlzcGxheTogQGRpc3BsYXk7XG4gIG1heC13aWR0aDogMTAwJTsgLy8gUGFydCAxOiBTZXQgYSBtYXhpbXVtIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnRcbiAgaGVpZ2h0OiBhdXRvOyAvLyBQYXJ0IDI6IFNjYWxlIHRoZSBoZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSB3aWR0aCwgb3RoZXJ3aXNlIHlvdSBnZXQgc3RyZXRjaGluZ1xufVxuXG5cbi8vIFJldGluYSBpbWFnZVxuLy9cbi8vIFNob3J0IHJldGluYSBtaXhpbiBmb3Igc2V0dGluZyBiYWNrZ3JvdW5kLWltYWdlIGFuZCAtc2l6ZS4gTm90ZSB0aGF0IHRoZVxuLy8gc3BlbGxpbmcgb2YgYG1pbi0tbW96LWRldmljZS1waXhlbC1yYXRpb2AgaXMgaW50ZW50aW9uYWwuXG4uaW1nLXJldGluYShAZmlsZS0xeDsgQGZpbGUtMng7IEB3aWR0aC0xeDsgQGhlaWdodC0xeCkge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJAe2ZpbGUtMXh9XCIpO1xuXG4gIEBtZWRpYVxuICBvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksXG4gIG9ubHkgc2NyZWVuIGFuZCAoICAgbWluLS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSxcbiAgb25seSBzY3JlZW4gYW5kICggICAgIC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIvMSksXG4gIG9ubHkgc2NyZWVuIGFuZCAoICAgICAgICBtaW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSxcbiAgb25seSBzY3JlZW4gYW5kICggICAgICAgICAgICAgICAgbWluLXJlc29sdXRpb246IDE5MmRwaSksXG4gIG9ubHkgc2NyZWVuIGFuZCAoICAgICAgICAgICAgICAgIG1pbi1yZXNvbHV0aW9uOiAyZHBweCkge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIkB7ZmlsZS0yeH1cIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBAd2lkdGgtMXggQGhlaWdodC0xeDtcbiAgfVxufVxuIiwiLy9cbi8vIFR5cG9ncmFwaHlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gSGVhZGluZ3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNixcbi5oMSwgLmgyLCAuaDMsIC5oNCwgLmg1LCAuaDYge1xuICBmb250LWZhbWlseTogQGhlYWRpbmdzLWZvbnQtZmFtaWx5O1xuICBmb250LXdlaWdodDogQGhlYWRpbmdzLWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogQGhlYWRpbmdzLWxpbmUtaGVpZ2h0O1xuICBjb2xvcjogQGhlYWRpbmdzLWNvbG9yO1xuXG4gIHNtYWxsLFxuICAuc21hbGwge1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgY29sb3I6IEBoZWFkaW5ncy1zbWFsbC1jb2xvcjtcbiAgfVxufVxuXG5oMSwgLmgxLFxuaDIsIC5oMixcbmgzLCAuaDMge1xuICBtYXJnaW4tdG9wOiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIG1hcmdpbi1ib3R0b206IChAbGluZS1oZWlnaHQtY29tcHV0ZWQgLyAyKTtcblxuICBzbWFsbCxcbiAgLnNtYWxsIHtcbiAgICBmb250LXNpemU6IDY1JTtcbiAgfVxufVxuaDQsIC5oNCxcbmg1LCAuaDUsXG5oNiwgLmg2IHtcbiAgbWFyZ2luLXRvcDogKEBsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpO1xuICBtYXJnaW4tYm90dG9tOiAoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG5cbiAgc21hbGwsXG4gIC5zbWFsbCB7XG4gICAgZm9udC1zaXplOiA3NSU7XG4gIH1cbn1cblxuaDEsIC5oMSB7IGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1oMTsgfVxuaDIsIC5oMiB7IGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1oMjsgfVxuaDMsIC5oMyB7IGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1oMzsgfVxuaDQsIC5oNCB7IGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1oNDsgfVxuaDUsIC5oNSB7IGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1oNTsgfVxuaDYsIC5oNiB7IGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1oNjsgfVxuXG5cbi8vIEJvZHkgdGV4dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5wIHtcbiAgbWFyZ2luOiAwIDAgKEBsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpO1xufVxuXG4ubGVhZCB7XG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgZm9udC1zaXplOiBmbG9vcigoQGZvbnQtc2l6ZS1iYXNlICogMS4xNSkpO1xuICBmb250LXdlaWdodDogMzAwO1xuICBsaW5lLWhlaWdodDogMS40O1xuXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLXNtLW1pbikge1xuICAgIGZvbnQtc2l6ZTogKEBmb250LXNpemUtYmFzZSAqIDEuNSk7XG4gIH1cbn1cblxuXG4vLyBFbXBoYXNpcyAmIG1pc2Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gRXg6ICgxMnB4IHNtYWxsIGZvbnQgLyAxNHB4IGJhc2UgZm9udCkgKiAxMDAlID0gYWJvdXQgODUlXG5zbWFsbCxcbi5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogZmxvb3IoKDEwMCUgKiBAZm9udC1zaXplLXNtYWxsIC8gQGZvbnQtc2l6ZS1iYXNlKSk7XG59XG5cbm1hcmssXG4ubWFyayB7XG4gIGJhY2tncm91bmQtY29sb3I6IEBzdGF0ZS13YXJuaW5nLWJnO1xuICBwYWRkaW5nOiAuMmVtO1xufVxuXG4vLyBBbGlnbm1lbnRcbi50ZXh0LWxlZnQgICAgICAgICAgIHsgdGV4dC1hbGlnbjogbGVmdDsgfVxuLnRleHQtcmlnaHQgICAgICAgICAgeyB0ZXh0LWFsaWduOiByaWdodDsgfVxuLnRleHQtY2VudGVyICAgICAgICAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbi50ZXh0LWp1c3RpZnkgICAgICAgIHsgdGV4dC1hbGlnbjoganVzdGlmeTsgfVxuLnRleHQtbm93cmFwICAgICAgICAgeyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9XG5cbi8vIFRyYW5zZm9ybWF0aW9uXG4udGV4dC1sb3dlcmNhc2UgICAgICB7IHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2U7IH1cbi50ZXh0LXVwcGVyY2FzZSAgICAgIHsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxuLnRleHQtY2FwaXRhbGl6ZSAgICAgeyB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsgfVxuXG4vLyBDb250ZXh0dWFsIGNvbG9yc1xuLnRleHQtbXV0ZWQge1xuICBjb2xvcjogQHRleHQtbXV0ZWQ7XG59XG4udGV4dC1wcmltYXJ5IHtcbiAgLnRleHQtZW1waGFzaXMtdmFyaWFudChAYnJhbmQtcHJpbWFyeSk7XG59XG4udGV4dC1zdWNjZXNzIHtcbiAgLnRleHQtZW1waGFzaXMtdmFyaWFudChAc3RhdGUtc3VjY2Vzcy10ZXh0KTtcbn1cbi50ZXh0LWluZm8ge1xuICAudGV4dC1lbXBoYXNpcy12YXJpYW50KEBzdGF0ZS1pbmZvLXRleHQpO1xufVxuLnRleHQtd2FybmluZyB7XG4gIC50ZXh0LWVtcGhhc2lzLXZhcmlhbnQoQHN0YXRlLXdhcm5pbmctdGV4dCk7XG59XG4udGV4dC1kYW5nZXIge1xuICAudGV4dC1lbXBoYXNpcy12YXJpYW50KEBzdGF0ZS1kYW5nZXItdGV4dCk7XG59XG5cbi8vIENvbnRleHR1YWwgYmFja2dyb3VuZHNcbi8vIEZvciBub3cgd2UnbGwgbGVhdmUgdGhlc2UgYWxvbmdzaWRlIHRoZSB0ZXh0IGNsYXNzZXMgdW50aWwgdjQgd2hlbiB3ZSBjYW5cbi8vIHNhZmVseSBzaGlmdCB0aGluZ3MgYXJvdW5kIChwZXIgU2VtVmVyIHJ1bGVzKS5cbi5iZy1wcmltYXJ5IHtcbiAgLy8gR2l2ZW4gdGhlIGNvbnRyYXN0IGhlcmUsIHRoaXMgaXMgdGhlIG9ubHkgY2xhc3MgdG8gaGF2ZSBpdHMgY29sb3IgaW52ZXJ0ZWRcbiAgLy8gYXV0b21hdGljYWxseS5cbiAgY29sb3I6ICNmZmY7XG4gIC5iZy12YXJpYW50KEBicmFuZC1wcmltYXJ5KTtcbn1cbi5iZy1zdWNjZXNzIHtcbiAgLmJnLXZhcmlhbnQoQHN0YXRlLXN1Y2Nlc3MtYmcpO1xufVxuLmJnLWluZm8ge1xuICAuYmctdmFyaWFudChAc3RhdGUtaW5mby1iZyk7XG59XG4uYmctd2FybmluZyB7XG4gIC5iZy12YXJpYW50KEBzdGF0ZS13YXJuaW5nLWJnKTtcbn1cbi5iZy1kYW5nZXIge1xuICAuYmctdmFyaWFudChAc3RhdGUtZGFuZ2VyLWJnKTtcbn1cblxuXG4vLyBQYWdlIGhlYWRlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4ucGFnZS1oZWFkZXIge1xuICBwYWRkaW5nLWJvdHRvbTogKChAbGluZS1oZWlnaHQtY29tcHV0ZWQgLyAyKSAtIDEpO1xuICBtYXJnaW46IChAbGluZS1oZWlnaHQtY29tcHV0ZWQgKiAyKSAwIEBsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIEBwYWdlLWhlYWRlci1ib3JkZXItY29sb3I7XG59XG5cblxuLy8gTGlzdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gVW5vcmRlcmVkIGFuZCBPcmRlcmVkIGxpc3RzXG51bCxcbm9sIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogKEBsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpO1xuICB1bCxcbiAgb2wge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuLy8gTGlzdCBvcHRpb25zXG5cbi8vIFVuc3R5bGVkIGtlZXBzIGxpc3QgaXRlbXMgYmxvY2sgbGV2ZWwsIGp1c3QgcmVtb3ZlcyBkZWZhdWx0IGJyb3dzZXIgcGFkZGluZyBhbmQgbGlzdC1zdHlsZVxuLmxpc3QtdW5zdHlsZWQge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbi8vIElubGluZSB0dXJucyBsaXN0IGl0ZW1zIGludG8gaW5saW5lLWJsb2NrXG4ubGlzdC1pbmxpbmUge1xuICAubGlzdC11bnN0eWxlZCgpO1xuICBtYXJnaW4tbGVmdDogLTVweDtcblxuICA+IGxpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZy1sZWZ0OiA1cHg7XG4gICAgcGFkZGluZy1yaWdodDogNXB4O1xuICB9XG59XG5cbi8vIERlc2NyaXB0aW9uIExpc3RzXG5kbCB7XG4gIG1hcmdpbi10b3A6IDA7IC8vIFJlbW92ZSBicm93c2VyIGRlZmF1bHRcbiAgbWFyZ2luLWJvdHRvbTogQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xufVxuZHQsXG5kZCB7XG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcbn1cbmR0IHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5kZCB7XG4gIG1hcmdpbi1sZWZ0OiAwOyAvLyBVbmRvIGJyb3dzZXIgZGVmYXVsdFxufVxuXG4vLyBIb3Jpem9udGFsIGRlc2NyaXB0aW9uIGxpc3RzXG4vL1xuLy8gRGVmYXVsdHMgdG8gYmVpbmcgc3RhY2tlZCB3aXRob3V0IGFueSBvZiB0aGUgYmVsb3cgc3R5bGVzIGFwcGxpZWQsIHVudGlsIHRoZVxuLy8gZ3JpZCBicmVha3BvaW50IGlzIHJlYWNoZWQgKGRlZmF1bHQgb2Ygfjc2OHB4KS5cblxuLmRsLWhvcml6b250YWwge1xuICBkZCB7XG4gICAgJjpleHRlbmQoLmNsZWFyZml4IGFsbCk7IC8vIENsZWFyIHRoZSBmbG9hdGVkIGBkdGAgaWYgYW4gZW1wdHkgYGRkYCBpcyBwcmVzZW50XG4gIH1cblxuICBAbWVkaWEgKG1pbi13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIGR0IHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgd2lkdGg6IChAZGwtaG9yaXpvbnRhbC1vZmZzZXQgLSAyMCk7XG4gICAgICBjbGVhcjogbGVmdDtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgLnRleHQtb3ZlcmZsb3coKTtcbiAgICB9XG4gICAgZGQge1xuICAgICAgbWFyZ2luLWxlZnQ6IEBkbC1ob3Jpem9udGFsLW9mZnNldDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBNaXNjXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEFiYnJldmlhdGlvbnMgYW5kIGFjcm9ueW1zXG5hYmJyW3RpdGxlXSxcbi8vIEFkZCBkYXRhLSogYXR0cmlidXRlIHRvIGhlbHAgb3V0IG91ciB0b29sdGlwIHBsdWdpbiwgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvNTI1N1xuYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXSB7XG4gIGN1cnNvcjogaGVscDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCBAYWJici1ib3JkZXItY29sb3I7XG59XG4uaW5pdGlhbGlzbSB7XG4gIGZvbnQtc2l6ZTogOTAlO1xuICAudGV4dC11cHBlcmNhc2UoKTtcbn1cblxuLy8gQmxvY2txdW90ZXNcbmJsb2NrcXVvdGUge1xuICBwYWRkaW5nOiAoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMikgQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBtYXJnaW46IDAgMCBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGZvbnQtc2l6ZTogQGJsb2NrcXVvdGUtZm9udC1zaXplO1xuICBib3JkZXItbGVmdDogNXB4IHNvbGlkIEBibG9ja3F1b3RlLWJvcmRlci1jb2xvcjtcblxuICBwLFxuICB1bCxcbiAgb2wge1xuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5vdGU6IERlcHJlY2F0ZWQgc21hbGwgYW5kIC5zbWFsbCBhcyBvZiB2My4xLjBcbiAgLy8gQ29udGV4dDogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMTY2MFxuICBmb290ZXIsXG4gIHNtYWxsLFxuICAuc21hbGwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogODAlOyAvLyBiYWNrIHRvIGRlZmF1bHQgZm9udC1zaXplXG4gICAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xuICAgIGNvbG9yOiBAYmxvY2txdW90ZS1zbWFsbC1jb2xvcjtcblxuICAgICY6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICdcXDIwMTQgXFwwMEEwJzsgLy8gZW0gZGFzaCwgbmJzcFxuICAgIH1cbiAgfVxufVxuXG4vLyBPcHBvc2l0ZSBhbGlnbm1lbnQgb2YgYmxvY2txdW90ZVxuLy9cbi8vIEhlYWRzIHVwOiBgYmxvY2txdW90ZS5wdWxsLXJpZ2h0YCBoYXMgYmVlbiBkZXByZWNhdGVkIGFzIG9mIHYzLjEuMC5cbi5ibG9ja3F1b3RlLXJldmVyc2UsXG5ibG9ja3F1b3RlLnB1bGwtcmlnaHQge1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIEBibG9ja3F1b3RlLWJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLWxlZnQ6IDA7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuXG4gIC8vIEFjY291bnQgZm9yIGNpdGF0aW9uXG4gIGZvb3RlcixcbiAgc21hbGwsXG4gIC5zbWFsbCB7XG4gICAgJjpiZWZvcmUgeyBjb250ZW50OiAnJzsgfVxuICAgICY6YWZ0ZXIge1xuICAgICAgY29udGVudDogJ1xcMDBBMCBcXDIwMTQnOyAvLyBuYnNwLCBlbSBkYXNoXG4gICAgfVxuICB9XG59XG5cbi8vIEFkZHJlc3Nlc1xuYWRkcmVzcyB7XG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LWJhc2U7XG59XG4iLCIvLyBUeXBvZ3JhcGh5XG5cbi50ZXh0LWVtcGhhc2lzLXZhcmlhbnQoQGNvbG9yKSB7XG4gIGNvbG9yOiBAY29sb3I7XG4gIGEmOmhvdmVyLFxuICBhJjpmb2N1cyB7XG4gICAgY29sb3I6IGRhcmtlbihAY29sb3IsIDEwJSk7XG4gIH1cbn1cbiIsIi8vIENvbnRleHR1YWwgYmFja2dyb3VuZHNcblxuLmJnLXZhcmlhbnQoQGNvbG9yKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IEBjb2xvcjtcbiAgYSY6aG92ZXIsXG4gIGEmOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oQGNvbG9yLCAxMCUpO1xuICB9XG59XG4iLCIvLyBUZXh0IG92ZXJmbG93XG4vLyBSZXF1aXJlcyBpbmxpbmUtYmxvY2sgb3IgYmxvY2sgZm9yIHByb3BlciBzdHlsaW5nXG5cbi50ZXh0LW92ZXJmbG93KCkge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbiIsIi8vXG4vLyBDb2RlIChpbmxpbmUgYW5kIGJsb2NrKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBJbmxpbmUgYW5kIGJsb2NrIGNvZGUgc3R5bGVzXG5jb2RlLFxua2JkLFxucHJlLFxuc2FtcCB7XG4gIGZvbnQtZmFtaWx5OiBAZm9udC1mYW1pbHktbW9ub3NwYWNlO1xufVxuXG4vLyBJbmxpbmUgY29kZVxuY29kZSB7XG4gIHBhZGRpbmc6IDJweCA0cHg7XG4gIGZvbnQtc2l6ZTogOTAlO1xuICBjb2xvcjogQGNvZGUtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6IEBjb2RlLWJnO1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1iYXNlO1xufVxuXG4vLyBVc2VyIGlucHV0IHR5cGljYWxseSBlbnRlcmVkIHZpYSBrZXlib2FyZFxua2JkIHtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgZm9udC1zaXplOiA5MCU7XG4gIGNvbG9yOiBAa2JkLWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAa2JkLWJnO1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1zbWFsbDtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwuMjUpO1xuXG4gIGtiZCB7XG4gICAgcGFkZGluZzogMDtcbiAgICBmb250LXNpemU6IDEwMCU7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgfVxufVxuXG4vLyBCbG9ja3Mgb2YgY29kZVxucHJlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6ICgoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC0gMSkgLyAyKTtcbiAgbWFyZ2luOiAwIDAgKEBsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpO1xuICBmb250LXNpemU6IChAZm9udC1zaXplLWJhc2UgLSAxKTsgLy8gMTRweCB0byAxM3B4XG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIGNvbG9yOiBAcHJlLWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAcHJlLWJnO1xuICBib3JkZXI6IDFweCBzb2xpZCBAcHJlLWJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtYmFzZTtcblxuICAvLyBBY2NvdW50IGZvciBzb21lIGNvZGUgb3V0cHV0cyB0aGF0IHBsYWNlIGNvZGUgdGFncyBpbiBwcmUgdGFnc1xuICBjb2RlIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxufVxuXG4vLyBFbmFibGUgc2Nyb2xsYWJsZSBibG9ja3Mgb2YgY29kZVxuLnByZS1zY3JvbGxhYmxlIHtcbiAgbWF4LWhlaWdodDogQHByZS1zY3JvbGxhYmxlLW1heC1oZWlnaHQ7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbn1cbiIsIi8vXG4vLyBHcmlkIHN5c3RlbVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBDb250YWluZXIgd2lkdGhzXG4vL1xuLy8gU2V0IHRoZSBjb250YWluZXIgd2lkdGgsIGFuZCBvdmVycmlkZSBpdCBmb3IgZml4ZWQgbmF2YmFycyBpbiBtZWRpYSBxdWVyaWVzLlxuXG4uY29udGFpbmVyIHtcbiAgLmNvbnRhaW5lci1maXhlZCgpO1xuXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLXNtLW1pbikge1xuICAgIHdpZHRoOiBAY29udGFpbmVyLXNtO1xuICB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLW1kLW1pbikge1xuICAgIHdpZHRoOiBAY29udGFpbmVyLW1kO1xuICB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLWxnLW1pbikge1xuICAgIHdpZHRoOiBAY29udGFpbmVyLWxnO1xuICB9XG59XG5cblxuLy8gRmx1aWQgY29udGFpbmVyXG4vL1xuLy8gVXRpbGl6ZXMgdGhlIG1peGluIG1lYW50IGZvciBmaXhlZCB3aWR0aCBjb250YWluZXJzLCBidXQgd2l0aG91dCBhbnkgZGVmaW5lZFxuLy8gd2lkdGggZm9yIGZsdWlkLCBmdWxsIHdpZHRoIGxheW91dHMuXG5cbi5jb250YWluZXItZmx1aWQge1xuICAuY29udGFpbmVyLWZpeGVkKCk7XG59XG5cblxuLy8gUm93XG4vL1xuLy8gUm93cyBjb250YWluIGFuZCBjbGVhciB0aGUgZmxvYXRzIG9mIHlvdXIgY29sdW1ucy5cblxuLnJvdyB7XG4gIC5tYWtlLXJvdygpO1xufVxuXG5cbi8vIENvbHVtbnNcbi8vXG4vLyBDb21tb24gc3R5bGVzIGZvciBzbWFsbCBhbmQgbGFyZ2UgZ3JpZCBjb2x1bW5zXG5cbi5tYWtlLWdyaWQtY29sdW1ucygpO1xuXG5cbi8vIEV4dHJhIHNtYWxsIGdyaWRcbi8vXG4vLyBDb2x1bW5zLCBvZmZzZXRzLCBwdXNoZXMsIGFuZCBwdWxscyBmb3IgZXh0cmEgc21hbGwgZGV2aWNlcyBsaWtlXG4vLyBzbWFydHBob25lcy5cblxuLm1ha2UtZ3JpZCh4cyk7XG5cblxuLy8gU21hbGwgZ3JpZFxuLy9cbi8vIENvbHVtbnMsIG9mZnNldHMsIHB1c2hlcywgYW5kIHB1bGxzIGZvciB0aGUgc21hbGwgZGV2aWNlIHJhbmdlLCBmcm9tIHBob25lc1xuLy8gdG8gdGFibGV0cy5cblxuQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XG4gIC5tYWtlLWdyaWQoc20pO1xufVxuXG5cbi8vIE1lZGl1bSBncmlkXG4vL1xuLy8gQ29sdW1ucywgb2Zmc2V0cywgcHVzaGVzLCBhbmQgcHVsbHMgZm9yIHRoZSBkZXNrdG9wIGRldmljZSByYW5nZS5cblxuQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbWQtbWluKSB7XG4gIC5tYWtlLWdyaWQobWQpO1xufVxuXG5cbi8vIExhcmdlIGdyaWRcbi8vXG4vLyBDb2x1bW5zLCBvZmZzZXRzLCBwdXNoZXMsIGFuZCBwdWxscyBmb3IgdGhlIGxhcmdlIGRlc2t0b3AgZGV2aWNlIHJhbmdlLlxuXG5AbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1sZy1taW4pIHtcbiAgLm1ha2UtZ3JpZChsZyk7XG59XG4iLCIvLyBHcmlkIHN5c3RlbVxuLy9cbi8vIEdlbmVyYXRlIHNlbWFudGljIGdyaWQgY29sdW1ucyB3aXRoIHRoZXNlIG1peGlucy5cblxuLy8gQ2VudGVyZWQgY29udGFpbmVyIGVsZW1lbnRcbi5jb250YWluZXItZml4ZWQoQGd1dHRlcjogQGdyaWQtZ3V0dGVyLXdpZHRoKSB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIHBhZGRpbmctbGVmdDogIChAZ3V0dGVyIC8gMik7XG4gIHBhZGRpbmctcmlnaHQ6IChAZ3V0dGVyIC8gMik7XG4gICY6ZXh0ZW5kKC5jbGVhcmZpeCBhbGwpO1xufVxuXG4vLyBDcmVhdGVzIGEgd3JhcHBlciBmb3IgYSBzZXJpZXMgb2YgY29sdW1uc1xuLm1ha2Utcm93KEBndXR0ZXI6IEBncmlkLWd1dHRlci13aWR0aCkge1xuICBtYXJnaW4tbGVmdDogIGNlaWwoKEBndXR0ZXIgLyAtMikpO1xuICBtYXJnaW4tcmlnaHQ6IGZsb29yKChAZ3V0dGVyIC8gLTIpKTtcbiAgJjpleHRlbmQoLmNsZWFyZml4IGFsbCk7XG59XG5cbi8vIEdlbmVyYXRlIHRoZSBleHRyYSBzbWFsbCBjb2x1bW5zXG4ubWFrZS14cy1jb2x1bW4oQGNvbHVtbnM7IEBndXR0ZXI6IEBncmlkLWd1dHRlci13aWR0aCkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XG4gIG1pbi1oZWlnaHQ6IDFweDtcbiAgcGFkZGluZy1sZWZ0OiAgKEBndXR0ZXIgLyAyKTtcbiAgcGFkZGluZy1yaWdodDogKEBndXR0ZXIgLyAyKTtcbn1cbi5tYWtlLXhzLWNvbHVtbi1vZmZzZXQoQGNvbHVtbnMpIHtcbiAgbWFyZ2luLWxlZnQ6IHBlcmNlbnRhZ2UoKEBjb2x1bW5zIC8gQGdyaWQtY29sdW1ucykpO1xufVxuLm1ha2UteHMtY29sdW1uLXB1c2goQGNvbHVtbnMpIHtcbiAgbGVmdDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XG59XG4ubWFrZS14cy1jb2x1bW4tcHVsbChAY29sdW1ucykge1xuICByaWdodDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XG59XG5cbi8vIEdlbmVyYXRlIHRoZSBzbWFsbCBjb2x1bW5zXG4ubWFrZS1zbS1jb2x1bW4oQGNvbHVtbnM7IEBndXR0ZXI6IEBncmlkLWd1dHRlci13aWR0aCkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1pbi1oZWlnaHQ6IDFweDtcbiAgcGFkZGluZy1sZWZ0OiAgKEBndXR0ZXIgLyAyKTtcbiAgcGFkZGluZy1yaWdodDogKEBndXR0ZXIgLyAyKTtcblxuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICB3aWR0aDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbi5tYWtlLXNtLWNvbHVtbi1vZmZzZXQoQGNvbHVtbnMpIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XG4gICAgbWFyZ2luLWxlZnQ6IHBlcmNlbnRhZ2UoKEBjb2x1bW5zIC8gQGdyaWQtY29sdW1ucykpO1xuICB9XG59XG4ubWFrZS1zbS1jb2x1bW4tcHVzaChAY29sdW1ucykge1xuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIHtcbiAgICBsZWZ0OiBwZXJjZW50YWdlKChAY29sdW1ucyAvIEBncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuLm1ha2Utc20tY29sdW1uLXB1bGwoQGNvbHVtbnMpIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XG4gICAgcmlnaHQ6IHBlcmNlbnRhZ2UoKEBjb2x1bW5zIC8gQGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5cbi8vIEdlbmVyYXRlIHRoZSBtZWRpdW0gY29sdW1uc1xuLm1ha2UtbWQtY29sdW1uKEBjb2x1bW5zOyBAZ3V0dGVyOiBAZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAxcHg7XG4gIHBhZGRpbmctbGVmdDogIChAZ3V0dGVyIC8gMik7XG4gIHBhZGRpbmctcmlnaHQ6IChAZ3V0dGVyIC8gMik7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbWQtbWluKSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IHBlcmNlbnRhZ2UoKEBjb2x1bW5zIC8gQGdyaWQtY29sdW1ucykpO1xuICB9XG59XG4ubWFrZS1tZC1jb2x1bW4tb2Zmc2V0KEBjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLW1kLW1pbikge1xuICAgIG1hcmdpbi1sZWZ0OiBwZXJjZW50YWdlKChAY29sdW1ucyAvIEBncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuLm1ha2UtbWQtY29sdW1uLXB1c2goQGNvbHVtbnMpIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbWQtbWluKSB7XG4gICAgbGVmdDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbi5tYWtlLW1kLWNvbHVtbi1wdWxsKEBjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLW1kLW1pbikge1xuICAgIHJpZ2h0OiBwZXJjZW50YWdlKChAY29sdW1ucyAvIEBncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuXG4vLyBHZW5lcmF0ZSB0aGUgbGFyZ2UgY29sdW1uc1xuLm1ha2UtbGctY29sdW1uKEBjb2x1bW5zOyBAZ3V0dGVyOiBAZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAxcHg7XG4gIHBhZGRpbmctbGVmdDogIChAZ3V0dGVyIC8gMik7XG4gIHBhZGRpbmctcmlnaHQ6IChAZ3V0dGVyIC8gMik7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbGctbWluKSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IHBlcmNlbnRhZ2UoKEBjb2x1bW5zIC8gQGdyaWQtY29sdW1ucykpO1xuICB9XG59XG4ubWFrZS1sZy1jb2x1bW4tb2Zmc2V0KEBjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLWxnLW1pbikge1xuICAgIG1hcmdpbi1sZWZ0OiBwZXJjZW50YWdlKChAY29sdW1ucyAvIEBncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuLm1ha2UtbGctY29sdW1uLXB1c2goQGNvbHVtbnMpIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbGctbWluKSB7XG4gICAgbGVmdDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbi5tYWtlLWxnLWNvbHVtbi1wdWxsKEBjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLWxnLW1pbikge1xuICAgIHJpZ2h0OiBwZXJjZW50YWdlKChAY29sdW1ucyAvIEBncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuIiwiLy8gRnJhbWV3b3JrIGdyaWQgZ2VuZXJhdGlvblxuLy9cbi8vIFVzZWQgb25seSBieSBCb290c3RyYXAgdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGdyaWQgY2xhc3NlcyBnaXZlblxuLy8gYW55IHZhbHVlIG9mIGBAZ3JpZC1jb2x1bW5zYC5cblxuLm1ha2UtZ3JpZC1jb2x1bW5zKCkge1xuICAvLyBDb21tb24gc3R5bGVzIGZvciBhbGwgc2l6ZXMgb2YgZ3JpZCBjb2x1bW5zLCB3aWR0aHMgMS0xMlxuICAuY29sKEBpbmRleCkgeyAvLyBpbml0aWFsXG4gICAgQGl0ZW06IH5cIi5jb2wteHMtQHtpbmRleH0sIC5jb2wtc20tQHtpbmRleH0sIC5jb2wtbWQtQHtpbmRleH0sIC5jb2wtbGctQHtpbmRleH1cIjtcbiAgICAuY29sKChAaW5kZXggKyAxKSwgQGl0ZW0pO1xuICB9XG4gIC5jb2woQGluZGV4LCBAbGlzdCkgd2hlbiAoQGluZGV4ID08IEBncmlkLWNvbHVtbnMpIHsgLy8gZ2VuZXJhbDsgXCI9PFwiIGlzbid0IGEgdHlwb1xuICAgIEBpdGVtOiB+XCIuY29sLXhzLUB7aW5kZXh9LCAuY29sLXNtLUB7aW5kZXh9LCAuY29sLW1kLUB7aW5kZXh9LCAuY29sLWxnLUB7aW5kZXh9XCI7XG4gICAgLmNvbCgoQGluZGV4ICsgMSksIH5cIkB7bGlzdH0sIEB7aXRlbX1cIik7XG4gIH1cbiAgLmNvbChAaW5kZXgsIEBsaXN0KSB3aGVuIChAaW5kZXggPiBAZ3JpZC1jb2x1bW5zKSB7IC8vIHRlcm1pbmFsXG4gICAgQHtsaXN0fSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAvLyBQcmV2ZW50IGNvbHVtbnMgZnJvbSBjb2xsYXBzaW5nIHdoZW4gZW1wdHlcbiAgICAgIG1pbi1oZWlnaHQ6IDFweDtcbiAgICAgIC8vIElubmVyIGd1dHRlciB2aWEgcGFkZGluZ1xuICAgICAgcGFkZGluZy1sZWZ0OiAgY2VpbCgoQGdyaWQtZ3V0dGVyLXdpZHRoIC8gMikpO1xuICAgICAgcGFkZGluZy1yaWdodDogZmxvb3IoKEBncmlkLWd1dHRlci13aWR0aCAvIDIpKTtcbiAgICB9XG4gIH1cbiAgLmNvbCgxKTsgLy8ga2lja3N0YXJ0IGl0XG59XG5cbi5mbG9hdC1ncmlkLWNvbHVtbnMoQGNsYXNzKSB7XG4gIC5jb2woQGluZGV4KSB7IC8vIGluaXRpYWxcbiAgICBAaXRlbTogflwiLmNvbC1Ae2NsYXNzfS1Ae2luZGV4fVwiO1xuICAgIC5jb2woKEBpbmRleCArIDEpLCBAaXRlbSk7XG4gIH1cbiAgLmNvbChAaW5kZXgsIEBsaXN0KSB3aGVuIChAaW5kZXggPTwgQGdyaWQtY29sdW1ucykgeyAvLyBnZW5lcmFsXG4gICAgQGl0ZW06IH5cIi5jb2wtQHtjbGFzc30tQHtpbmRleH1cIjtcbiAgICAuY29sKChAaW5kZXggKyAxKSwgflwiQHtsaXN0fSwgQHtpdGVtfVwiKTtcbiAgfVxuICAuY29sKEBpbmRleCwgQGxpc3QpIHdoZW4gKEBpbmRleCA+IEBncmlkLWNvbHVtbnMpIHsgLy8gdGVybWluYWxcbiAgICBAe2xpc3R9IHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgIH1cbiAgfVxuICAuY29sKDEpOyAvLyBraWNrc3RhcnQgaXRcbn1cblxuLmNhbGMtZ3JpZC1jb2x1bW4oQGluZGV4LCBAY2xhc3MsIEB0eXBlKSB3aGVuIChAdHlwZSA9IHdpZHRoKSBhbmQgKEBpbmRleCA+IDApIHtcbiAgLmNvbC1Ae2NsYXNzfS1Ae2luZGV4fSB7XG4gICAgd2lkdGg6IHBlcmNlbnRhZ2UoKEBpbmRleCAvIEBncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuLmNhbGMtZ3JpZC1jb2x1bW4oQGluZGV4LCBAY2xhc3MsIEB0eXBlKSB3aGVuIChAdHlwZSA9IHB1c2gpIGFuZCAoQGluZGV4ID4gMCkge1xuICAuY29sLUB7Y2xhc3N9LXB1c2gtQHtpbmRleH0ge1xuICAgIGxlZnQ6IHBlcmNlbnRhZ2UoKEBpbmRleCAvIEBncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuLmNhbGMtZ3JpZC1jb2x1bW4oQGluZGV4LCBAY2xhc3MsIEB0eXBlKSB3aGVuIChAdHlwZSA9IHB1c2gpIGFuZCAoQGluZGV4ID0gMCkge1xuICAuY29sLUB7Y2xhc3N9LXB1c2gtMCB7XG4gICAgbGVmdDogYXV0bztcbiAgfVxufVxuLmNhbGMtZ3JpZC1jb2x1bW4oQGluZGV4LCBAY2xhc3MsIEB0eXBlKSB3aGVuIChAdHlwZSA9IHB1bGwpIGFuZCAoQGluZGV4ID4gMCkge1xuICAuY29sLUB7Y2xhc3N9LXB1bGwtQHtpbmRleH0ge1xuICAgIHJpZ2h0OiBwZXJjZW50YWdlKChAaW5kZXggLyBAZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbi5jYWxjLWdyaWQtY29sdW1uKEBpbmRleCwgQGNsYXNzLCBAdHlwZSkgd2hlbiAoQHR5cGUgPSBwdWxsKSBhbmQgKEBpbmRleCA9IDApIHtcbiAgLmNvbC1Ae2NsYXNzfS1wdWxsLTAge1xuICAgIHJpZ2h0OiBhdXRvO1xuICB9XG59XG4uY2FsYy1ncmlkLWNvbHVtbihAaW5kZXgsIEBjbGFzcywgQHR5cGUpIHdoZW4gKEB0eXBlID0gb2Zmc2V0KSB7XG4gIC5jb2wtQHtjbGFzc30tb2Zmc2V0LUB7aW5kZXh9IHtcbiAgICBtYXJnaW4tbGVmdDogcGVyY2VudGFnZSgoQGluZGV4IC8gQGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5cbi8vIEJhc2ljIGxvb3BpbmcgaW4gTEVTU1xuLmxvb3AtZ3JpZC1jb2x1bW5zKEBpbmRleCwgQGNsYXNzLCBAdHlwZSkgd2hlbiAoQGluZGV4ID49IDApIHtcbiAgLmNhbGMtZ3JpZC1jb2x1bW4oQGluZGV4LCBAY2xhc3MsIEB0eXBlKTtcbiAgLy8gbmV4dCBpdGVyYXRpb25cbiAgLmxvb3AtZ3JpZC1jb2x1bW5zKChAaW5kZXggLSAxKSwgQGNsYXNzLCBAdHlwZSk7XG59XG5cbi8vIENyZWF0ZSBncmlkIGZvciBzcGVjaWZpYyBjbGFzc1xuLm1ha2UtZ3JpZChAY2xhc3MpIHtcbiAgLmZsb2F0LWdyaWQtY29sdW1ucyhAY2xhc3MpO1xuICAubG9vcC1ncmlkLWNvbHVtbnMoQGdyaWQtY29sdW1ucywgQGNsYXNzLCB3aWR0aCk7XG4gIC5sb29wLWdyaWQtY29sdW1ucyhAZ3JpZC1jb2x1bW5zLCBAY2xhc3MsIHB1bGwpO1xuICAubG9vcC1ncmlkLWNvbHVtbnMoQGdyaWQtY29sdW1ucywgQGNsYXNzLCBwdXNoKTtcbiAgLmxvb3AtZ3JpZC1jb2x1bW5zKEBncmlkLWNvbHVtbnMsIEBjbGFzcywgb2Zmc2V0KTtcbn1cbiIsIi8vXG4vLyBUYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxudGFibGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAdGFibGUtYmc7XG59XG5jYXB0aW9uIHtcbiAgcGFkZGluZy10b3A6IEB0YWJsZS1jZWxsLXBhZGRpbmc7XG4gIHBhZGRpbmctYm90dG9tOiBAdGFibGUtY2VsbC1wYWRkaW5nO1xuICBjb2xvcjogQHRleHQtbXV0ZWQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG50aCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cblxuLy8gQmFzZWxpbmUgc3R5bGVzXG5cbi50YWJsZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgLy8gQ2VsbHNcbiAgPiB0aGVhZCxcbiAgPiB0Ym9keSxcbiAgPiB0Zm9vdCB7XG4gICAgPiB0ciB7XG4gICAgICA+IHRoLFxuICAgICAgPiB0ZCB7XG4gICAgICAgIHBhZGRpbmc6IEB0YWJsZS1jZWxsLXBhZGRpbmc7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIEB0YWJsZS1ib3JkZXItY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEJvdHRvbSBhbGlnbiBmb3IgY29sdW1uIGhlYWRpbmdzXG4gID4gdGhlYWQgPiB0ciA+IHRoIHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBAdGFibGUtYm9yZGVyLWNvbG9yO1xuICB9XG4gIC8vIFJlbW92ZSB0b3AgYm9yZGVyIGZyb20gdGhlYWQgYnkgZGVmYXVsdFxuICA+IGNhcHRpb24gKyB0aGVhZCxcbiAgPiBjb2xncm91cCArIHRoZWFkLFxuICA+IHRoZWFkOmZpcnN0LWNoaWxkIHtcbiAgICA+IHRyOmZpcnN0LWNoaWxkIHtcbiAgICAgID4gdGgsXG4gICAgICA+IHRkIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gQWNjb3VudCBmb3IgbXVsdGlwbGUgdGJvZHkgaW5zdGFuY2VzXG4gID4gdGJvZHkgKyB0Ym9keSB7XG4gICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIEB0YWJsZS1ib3JkZXItY29sb3I7XG4gIH1cblxuICAvLyBOZXN0aW5nXG4gIC50YWJsZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGJvZHktYmc7XG4gIH1cbn1cblxuXG4vLyBDb25kZW5zZWQgdGFibGUgdy8gaGFsZiBwYWRkaW5nXG5cbi50YWJsZS1jb25kZW5zZWQge1xuICA+IHRoZWFkLFxuICA+IHRib2R5LFxuICA+IHRmb290IHtcbiAgICA+IHRyIHtcbiAgICAgID4gdGgsXG4gICAgICA+IHRkIHtcbiAgICAgICAgcGFkZGluZzogQHRhYmxlLWNvbmRlbnNlZC1jZWxsLXBhZGRpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLy8gQm9yZGVyZWQgdmVyc2lvblxuLy9cbi8vIEFkZCBib3JkZXJzIGFsbCBhcm91bmQgdGhlIHRhYmxlIGFuZCBiZXR3ZWVuIGFsbCB0aGUgY29sdW1ucy5cblxuLnRhYmxlLWJvcmRlcmVkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgQHRhYmxlLWJvcmRlci1jb2xvcjtcbiAgPiB0aGVhZCxcbiAgPiB0Ym9keSxcbiAgPiB0Zm9vdCB7XG4gICAgPiB0ciB7XG4gICAgICA+IHRoLFxuICAgICAgPiB0ZCB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEB0YWJsZS1ib3JkZXItY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gID4gdGhlYWQgPiB0ciB7XG4gICAgPiB0aCxcbiAgICA+IHRkIHtcbiAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDJweDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBaZWJyYS1zdHJpcGluZ1xuLy9cbi8vIERlZmF1bHQgemVicmEtc3RyaXBlIHN0eWxlcyAoYWx0ZXJuYXRpbmcgZ3JheSBhbmQgdHJhbnNwYXJlbnQgYmFja2dyb3VuZHMpXG5cbi50YWJsZS1zdHJpcGVkIHtcbiAgPiB0Ym9keSA+IHRyOm50aC1vZi10eXBlKG9kZCkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB0YWJsZS1iZy1hY2NlbnQ7XG4gIH1cbn1cblxuXG4vLyBIb3ZlciBlZmZlY3Rcbi8vXG4vLyBQbGFjZWQgaGVyZSBzaW5jZSBpdCBoYXMgdG8gY29tZSBhZnRlciB0aGUgcG90ZW50aWFsIHplYnJhIHN0cmlwaW5nXG5cbi50YWJsZS1ob3ZlciB7XG4gID4gdGJvZHkgPiB0cjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQHRhYmxlLWJnLWhvdmVyO1xuICB9XG59XG5cblxuLy8gVGFibGUgY2VsbCBzaXppbmdcbi8vXG4vLyBSZXNldCBkZWZhdWx0IHRhYmxlIGJlaGF2aW9yXG5cbnRhYmxlIGNvbFtjbGFzcyo9XCJjb2wtXCJdIHtcbiAgcG9zaXRpb246IHN0YXRpYzsgLy8gUHJldmVudCBib3JkZXIgaGlkaW5nIGluIEZpcmVmb3ggYW5kIElFOS0xMSAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTE2MjMpXG4gIGZsb2F0OiBub25lO1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW47XG59XG50YWJsZSB7XG4gIHRkLFxuICB0aCB7XG4gICAgJltjbGFzcyo9XCJjb2wtXCJdIHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0aWM7IC8vIFByZXZlbnQgYm9yZGVyIGhpZGluZyBpbiBGaXJlZm94IGFuZCBJRTktMTEgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNjIzKVxuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIFRhYmxlIGJhY2tncm91bmRzXG4vL1xuLy8gRXhhY3Qgc2VsZWN0b3JzIGJlbG93IHJlcXVpcmVkIHRvIG92ZXJyaWRlIGAudGFibGUtc3RyaXBlZGAgYW5kIHByZXZlbnRcbi8vIGluaGVyaXRhbmNlIHRvIG5lc3RlZCB0YWJsZXMuXG5cbi8vIEdlbmVyYXRlIHRoZSBjb250ZXh0dWFsIHZhcmlhbnRzXG4udGFibGUtcm93LXZhcmlhbnQoYWN0aXZlOyBAdGFibGUtYmctYWN0aXZlKTtcbi50YWJsZS1yb3ctdmFyaWFudChzdWNjZXNzOyBAc3RhdGUtc3VjY2Vzcy1iZyk7XG4udGFibGUtcm93LXZhcmlhbnQoaW5mbzsgQHN0YXRlLWluZm8tYmcpO1xuLnRhYmxlLXJvdy12YXJpYW50KHdhcm5pbmc7IEBzdGF0ZS13YXJuaW5nLWJnKTtcbi50YWJsZS1yb3ctdmFyaWFudChkYW5nZXI7IEBzdGF0ZS1kYW5nZXItYmcpO1xuXG5cbi8vIFJlc3BvbnNpdmUgdGFibGVzXG4vL1xuLy8gV3JhcCB5b3VyIHRhYmxlcyBpbiBgLnRhYmxlLXJlc3BvbnNpdmVgIGFuZCB3ZSdsbCBtYWtlIHRoZW0gbW9iaWxlIGZyaWVuZGx5XG4vLyBieSBlbmFibGluZyBob3Jpem9udGFsIHNjcm9sbGluZy4gT25seSBhcHBsaWVzIDw3NjhweC4gRXZlcnl0aGluZyBhYm92ZSB0aGF0XG4vLyB3aWxsIGRpc3BsYXkgbm9ybWFsbHkuXG5cbi50YWJsZS1yZXNwb25zaXZlIHtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgbWluLWhlaWdodDogMC4wMSU7IC8vIFdvcmthcm91bmQgZm9yIElFOSBidWcgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzE0ODM3KVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IEBzY3JlZW4teHMtbWF4KSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogKEBsaW5lLWhlaWdodC1jb21wdXRlZCAqIDAuNzUpO1xuICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IC1tcy1hdXRvaGlkaW5nLXNjcm9sbGJhcjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBAdGFibGUtYm9yZGVyLWNvbG9yO1xuXG4gICAgLy8gVGlnaHRlbiB1cCBzcGFjaW5nXG4gICAgPiAudGFibGUge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcblxuICAgICAgLy8gRW5zdXJlIHRoZSBjb250ZW50IGRvZXNuJ3Qgd3JhcFxuICAgICAgPiB0aGVhZCxcbiAgICAgID4gdGJvZHksXG4gICAgICA+IHRmb290IHtcbiAgICAgICAgPiB0ciB7XG4gICAgICAgICAgPiB0aCxcbiAgICAgICAgICA+IHRkIHtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBvdmVycmlkZXMgZm9yIHRoZSBib3JkZXJlZCB0YWJsZXNcbiAgICA+IC50YWJsZS1ib3JkZXJlZCB7XG4gICAgICBib3JkZXI6IDA7XG5cbiAgICAgIC8vIE51a2UgdGhlIGFwcHJvcHJpYXRlIGJvcmRlcnMgc28gdGhhdCB0aGUgcGFyZW50IGNhbiBoYW5kbGUgdGhlbVxuICAgICAgPiB0aGVhZCxcbiAgICAgID4gdGJvZHksXG4gICAgICA+IHRmb290IHtcbiAgICAgICAgPiB0ciB7XG4gICAgICAgICAgPiB0aDpmaXJzdC1jaGlsZCxcbiAgICAgICAgICA+IHRkOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICA+IHRoOmxhc3QtY2hpbGQsXG4gICAgICAgICAgPiB0ZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgIGJvcmRlci1yaWdodDogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT25seSBudWtlIHRoZSBsYXN0IHJvdydzIGJvdHRvbS1ib3JkZXIgaW4gYHRib2R5YCBhbmQgYHRmb290YCBzaW5jZVxuICAgICAgLy8gY2hhbmNlcyBhcmUgdGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBgdHJgIGluIGEgYHRoZWFkYCBhbmQgdGhhdCB3b3VsZFxuICAgICAgLy8gcmVtb3ZlIHRoZSBib3JkZXIgYWx0b2dldGhlci5cbiAgICAgID4gdGJvZHksXG4gICAgICA+IHRmb290IHtcbiAgICAgICAgPiB0cjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICA+IHRoLFxuICAgICAgICAgID4gdGQge1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cbiAgfVxufVxuIiwiLy8gVGFibGVzXG5cbi50YWJsZS1yb3ctdmFyaWFudChAc3RhdGU7IEBiYWNrZ3JvdW5kKSB7XG4gIC8vIEV4YWN0IHNlbGVjdG9ycyBiZWxvdyByZXF1aXJlZCB0byBvdmVycmlkZSBgLnRhYmxlLXN0cmlwZWRgIGFuZCBwcmV2ZW50XG4gIC8vIGluaGVyaXRhbmNlIHRvIG5lc3RlZCB0YWJsZXMuXG4gIC50YWJsZSA+IHRoZWFkID4gdHIsXG4gIC50YWJsZSA+IHRib2R5ID4gdHIsXG4gIC50YWJsZSA+IHRmb290ID4gdHIge1xuICAgID4gdGQuQHtzdGF0ZX0sXG4gICAgPiB0aC5Ae3N0YXRlfSxcbiAgICAmLkB7c3RhdGV9ID4gdGQsXG4gICAgJi5Ae3N0YXRlfSA+IHRoIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBiYWNrZ3JvdW5kO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhvdmVyIHN0YXRlcyBmb3IgYC50YWJsZS1ob3ZlcmBcbiAgLy8gTm90ZTogdGhpcyBpcyBub3QgYXZhaWxhYmxlIGZvciBjZWxscyBvciByb3dzIHdpdGhpbiBgdGhlYWRgIG9yIGB0Zm9vdGAuXG4gIC50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIge1xuICAgID4gdGQuQHtzdGF0ZX06aG92ZXIsXG4gICAgPiB0aC5Ae3N0YXRlfTpob3ZlcixcbiAgICAmLkB7c3RhdGV9OmhvdmVyID4gdGQsXG4gICAgJjpob3ZlciA+IC5Ae3N0YXRlfSxcbiAgICAmLkB7c3RhdGV9OmhvdmVyID4gdGgge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKEBiYWNrZ3JvdW5kLCA1JSk7XG4gICAgfVxuICB9XG59XG4iLCIvL1xuLy8gRm9ybXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gTm9ybWFsaXplIG5vbi1jb250cm9sc1xuLy9cbi8vIFJlc3R5bGUgYW5kIGJhc2VsaW5lIG5vbi1jb250cm9sIGZvcm0gZWxlbWVudHMuXG5cbmZpZWxkc2V0IHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBib3JkZXI6IDA7XG4gIC8vIENocm9tZSBhbmQgRmlyZWZveCBzZXQgYSBgbWluLXdpZHRoOiBtaW4tY29udGVudDtgIG9uIGZpZWxkc2V0cyxcbiAgLy8gc28gd2UgcmVzZXQgdGhhdCB0byBlbnN1cmUgaXQgYmVoYXZlcyBtb3JlIGxpa2UgYSBzdGFuZGFyZCBibG9jayBlbGVtZW50LlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMjM1OS5cbiAgbWluLXdpZHRoOiAwO1xufVxuXG5sZWdlbmQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgZm9udC1zaXplOiAoQGZvbnQtc2l6ZS1iYXNlICogMS41KTtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gIGNvbG9yOiBAbGVnZW5kLWNvbG9yO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAbGVnZW5kLWJvcmRlci1jb2xvcjtcbn1cblxubGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTsgLy8gRm9yY2UgSUU4IHRvIHdyYXAgbG9uZyBjb250ZW50IChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMzE0MSlcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuXG4vLyBOb3JtYWxpemUgZm9ybSBjb250cm9sc1xuLy9cbi8vIFdoaWxlIG1vc3Qgb2Ygb3VyIGZvcm0gc3R5bGVzIHJlcXVpcmUgZXh0cmEgY2xhc3Nlcywgc29tZSBiYXNpYyBub3JtYWxpemF0aW9uXG4vLyBpcyByZXF1aXJlZCB0byBlbnN1cmUgb3B0aW11bSBkaXNwbGF5IHdpdGggb3Igd2l0aG91dCB0aG9zZSBjbGFzc2VzIHRvIGJldHRlclxuLy8gYWRkcmVzcyBicm93c2VyIGluY29uc2lzdGVuY2llcy5cblxuLy8gT3ZlcnJpZGUgY29udGVudC1ib3ggaW4gTm9ybWFsaXplICgqIGlzbid0IHNwZWNpZmljIGVub3VnaClcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAuYm94LXNpemluZyhib3JkZXItYm94KTtcbn1cblxuLy8gUG9zaXRpb24gcmFkaW9zIGFuZCBjaGVja2JveGVzIGJldHRlclxuaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgbWFyZ2luOiA0cHggMCAwO1xuICBtYXJnaW4tdG9wOiAxcHggXFw5OyAvLyBJRTgtOVxuICBsaW5lLWhlaWdodDogbm9ybWFsO1xufVxuXG5pbnB1dFt0eXBlPVwiZmlsZVwiXSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vLyBNYWtlIHJhbmdlIGlucHV0cyBiZWhhdmUgbGlrZSB0ZXh0dWFsIGZvcm0gY29udHJvbHNcbmlucHV0W3R5cGU9XCJyYW5nZVwiXSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLy8gTWFrZSBtdWx0aXBsZSBzZWxlY3QgZWxlbWVudHMgaGVpZ2h0IG5vdCBmaXhlZFxuc2VsZWN0W211bHRpcGxlXSxcbnNlbGVjdFtzaXplXSB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLy8gRm9jdXMgZm9yIGZpbGUsIHJhZGlvLCBhbmQgY2hlY2tib3hcbmlucHV0W3R5cGU9XCJmaWxlXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmZvY3VzIHtcbiAgLnRhYi1mb2N1cygpO1xufVxuXG4vLyBBZGp1c3Qgb3V0cHV0IGVsZW1lbnRcbm91dHB1dCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nLXRvcDogKEBwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKTtcbiAgZm9udC1zaXplOiBAZm9udC1zaXplLWJhc2U7XG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcbiAgY29sb3I6IEBpbnB1dC1jb2xvcjtcbn1cblxuXG4vLyBDb21tb24gZm9ybSBjb250cm9sc1xuLy9cbi8vIFNoYXJlZCBzaXplIGFuZCB0eXBlIHJlc2V0cyBmb3IgZm9ybSBjb250cm9scy4gQXBwbHkgYC5mb3JtLWNvbnRyb2xgIHRvIGFueVxuLy8gb2YgdGhlIGZvbGxvd2luZyBmb3JtIGNvbnRyb2xzOlxuLy9cbi8vIHNlbGVjdFxuLy8gdGV4dGFyZWFcbi8vIGlucHV0W3R5cGU9XCJ0ZXh0XCJdXG4vLyBpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl1cbi8vIGlucHV0W3R5cGU9XCJkYXRldGltZVwiXVxuLy8gaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdXG4vLyBpbnB1dFt0eXBlPVwiZGF0ZVwiXVxuLy8gaW5wdXRbdHlwZT1cIm1vbnRoXCJdXG4vLyBpbnB1dFt0eXBlPVwidGltZVwiXVxuLy8gaW5wdXRbdHlwZT1cIndlZWtcIl1cbi8vIGlucHV0W3R5cGU9XCJudW1iZXJcIl1cbi8vIGlucHV0W3R5cGU9XCJlbWFpbFwiXVxuLy8gaW5wdXRbdHlwZT1cInVybFwiXVxuLy8gaW5wdXRbdHlwZT1cInNlYXJjaFwiXVxuLy8gaW5wdXRbdHlwZT1cInRlbFwiXVxuLy8gaW5wdXRbdHlwZT1cImNvbG9yXCJdXG5cbi5mb3JtLWNvbnRyb2wge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogQGlucHV0LWhlaWdodC1iYXNlOyAvLyBNYWtlIGlucHV0cyBhdCBsZWFzdCB0aGUgaGVpZ2h0IG9mIHRoZWlyIGJ1dHRvbiBjb3VudGVycGFydCAoYmFzZSBsaW5lLWhlaWdodCArIHBhZGRpbmcgKyBib3JkZXIpXG4gIHBhZGRpbmc6IEBwYWRkaW5nLWJhc2UtdmVydGljYWwgQHBhZGRpbmctYmFzZS1ob3Jpem9udGFsO1xuICBmb250LXNpemU6IEBmb250LXNpemUtYmFzZTtcbiAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xuICBjb2xvcjogQGlucHV0LWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAaW5wdXQtYmc7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IC8vIFJlc2V0IHVudXN1YWwgRmlyZWZveC1vbi1BbmRyb2lkIGRlZmF1bHQgc3R5bGU7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzL2lzc3Vlcy8yMTRcbiAgYm9yZGVyOiAxcHggc29saWQgQGlucHV0LWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogQGlucHV0LWJvcmRlci1yYWRpdXM7IC8vIE5vdGU6IFRoaXMgaGFzIG5vIGVmZmVjdCBvbiA8c2VsZWN0PnMgaW4gc29tZSBicm93c2VycywgZHVlIHRvIHRoZSBsaW1pdGVkIHN0eWxhYmlsaXR5IG9mIDxzZWxlY3Q+cyBpbiBDU1MuXG4gIC5ib3gtc2hhZG93KGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpKTtcbiAgLnRyYW5zaXRpb24oflwiYm9yZGVyLWNvbG9yIGVhc2UtaW4tb3V0IC4xNXMsIGJveC1zaGFkb3cgZWFzZS1pbi1vdXQgLjE1c1wiKTtcblxuICAvLyBDdXN0b21pemUgdGhlIGA6Zm9jdXNgIHN0YXRlIHRvIGltaXRhdGUgbmF0aXZlIFdlYktpdCBzdHlsZXMuXG4gIC5mb3JtLWNvbnRyb2wtZm9jdXMoKTtcblxuICAvLyBQbGFjZWhvbGRlclxuICAucGxhY2Vob2xkZXIoKTtcblxuICAvLyBEaXNhYmxlZCBhbmQgcmVhZC1vbmx5IGlucHV0c1xuICAvL1xuICAvLyBIVE1MNSBzYXlzIHRoYXQgY29udHJvbHMgdW5kZXIgYSBmaWVsZHNldCA+IGxlZ2VuZDpmaXJzdC1jaGlsZCB3b24ndCBiZVxuICAvLyBkaXNhYmxlZCBpZiB0aGUgZmllbGRzZXQgaXMgZGlzYWJsZWQuIER1ZSB0byBpbXBsZW1lbnRhdGlvbiBkaWZmaWN1bHR5LCB3ZVxuICAvLyBkb24ndCBob25vciB0aGF0IGVkZ2UgY2FzZTsgd2Ugc3R5bGUgdGhlbSBhcyBkaXNhYmxlZCBhbnl3YXkuXG4gICZbZGlzYWJsZWRdLFxuICAmW3JlYWRvbmx5XSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgIGJhY2tncm91bmQtY29sb3I6IEBpbnB1dC1iZy1kaXNhYmxlZDtcbiAgICBvcGFjaXR5OiAxOyAvLyBpT1MgZml4IGZvciB1bnJlYWRhYmxlIGRpc2FibGVkIGNvbnRlbnQ7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNjU1XG4gIH1cblxuICAmW2Rpc2FibGVkXSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgIGN1cnNvcjogQGN1cnNvci1kaXNhYmxlZDtcbiAgfVxuXG4gIC8vIFJlc2V0IGhlaWdodCBmb3IgYHRleHRhcmVhYHNcbiAgdGV4dGFyZWEmIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gIH1cbn1cblxuXG4vLyBTZWFyY2ggaW5wdXRzIGluIGlPU1xuLy9cbi8vIFRoaXMgb3ZlcnJpZGVzIHRoZSBleHRyYSByb3VuZGVkIGNvcm5lcnMgb24gc2VhcmNoIGlucHV0cyBpbiBpT1Mgc28gdGhhdCBvdXJcbi8vIGAuZm9ybS1jb250cm9sYCBjbGFzcyBjYW4gcHJvcGVybHkgc3R5bGUgdGhlbS4gTm90ZSB0aGF0IHRoaXMgY2Fubm90IHNpbXBseVxuLy8gYmUgYWRkZWQgdG8gYC5mb3JtLWNvbnRyb2xgIGFzIGl0J3Mgbm90IHNwZWNpZmljIGVub3VnaC4gRm9yIGRldGFpbHMsIHNlZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMTU4Ni5cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuXG4vLyBTcGVjaWFsIHN0eWxlcyBmb3IgaU9TIHRlbXBvcmFsIGlucHV0c1xuLy9cbi8vIEluIE1vYmlsZSBTYWZhcmksIHNldHRpbmcgYGRpc3BsYXk6IGJsb2NrYCBvbiB0ZW1wb3JhbCBpbnB1dHMgY2F1c2VzIHRoZVxuLy8gdGV4dCB3aXRoaW4gdGhlIGlucHV0IHRvIGJlY29tZSB2ZXJ0aWNhbGx5IG1pc2FsaWduZWQuIEFzIGEgd29ya2Fyb3VuZCwgd2Vcbi8vIHNldCBhIHBpeGVsIGxpbmUtaGVpZ2h0IHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gaGVpZ2h0IG9mIHRoZSBpbnB1dCwgYnV0IG9ubHlcbi8vIGZvciBTYWZhcmkuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5ODQ4XG4vL1xuLy8gTm90ZSB0aGF0IGFzIG9mIDguMywgaU9TIGRvZXNuJ3Qgc3VwcG9ydCBgZGF0ZXRpbWVgIG9yIGB3ZWVrYC5cblxuQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMCkge1xuICBpbnB1dFt0eXBlPVwiZGF0ZVwiXSxcbiAgaW5wdXRbdHlwZT1cInRpbWVcIl0sXG4gIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXSxcbiAgaW5wdXRbdHlwZT1cIm1vbnRoXCJdIHtcbiAgICAmLmZvcm0tY29udHJvbCB7XG4gICAgICBsaW5lLWhlaWdodDogQGlucHV0LWhlaWdodC1iYXNlO1xuICAgIH1cblxuICAgICYuaW5wdXQtc20sXG4gICAgLmlucHV0LWdyb3VwLXNtICYge1xuICAgICAgbGluZS1oZWlnaHQ6IEBpbnB1dC1oZWlnaHQtc21hbGw7XG4gICAgfVxuXG4gICAgJi5pbnB1dC1sZyxcbiAgICAuaW5wdXQtZ3JvdXAtbGcgJiB7XG4gICAgICBsaW5lLWhlaWdodDogQGlucHV0LWhlaWdodC1sYXJnZTtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBGb3JtIGdyb3Vwc1xuLy9cbi8vIERlc2lnbmVkIHRvIGhlbHAgd2l0aCB0aGUgb3JnYW5pemF0aW9uIGFuZCBzcGFjaW5nIG9mIHZlcnRpY2FsIGZvcm1zLiBGb3Jcbi8vIGhvcml6b250YWwgZm9ybXMsIHVzZSB0aGUgcHJlZGVmaW5lZCBncmlkIGNsYXNzZXMuXG5cbi5mb3JtLWdyb3VwIHtcbiAgbWFyZ2luLWJvdHRvbTogQGZvcm0tZ3JvdXAtbWFyZ2luLWJvdHRvbTtcbn1cblxuXG4vLyBDaGVja2JveGVzIGFuZCByYWRpb3Ncbi8vXG4vLyBJbmRlbnQgdGhlIGxhYmVscyB0byBwb3NpdGlvbiByYWRpb3MvY2hlY2tib3hlcyBhcyBoYW5naW5nIGNvbnRyb2xzLlxuXG4ucmFkaW8sXG4uY2hlY2tib3gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuXG4gIGxhYmVsIHtcbiAgICBtaW4taGVpZ2h0OiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7IC8vIEVuc3VyZSB0aGUgaW5wdXQgZG9lc24ndCBqdW1wIHdoZW4gdGhlcmUgaXMgbm8gdGV4dFxuICAgIHBhZGRpbmctbGVmdDogMjBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG59XG4ucmFkaW8gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLnJhZGlvLWlubGluZSBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4uY2hlY2tib3ggaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIG1hcmdpbi1sZWZ0OiAtMjBweDtcbiAgbWFyZ2luLXRvcDogNHB4IFxcOTtcbn1cblxuLnJhZGlvICsgLnJhZGlvLFxuLmNoZWNrYm94ICsgLmNoZWNrYm94IHtcbiAgbWFyZ2luLXRvcDogLTVweDsgLy8gTW92ZSB1cCBzaWJsaW5nIHJhZGlvcyBvciBjaGVja2JveGVzIGZvciB0aWdodGVyIHNwYWNpbmdcbn1cblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIG9uIHNhbWUgbGluZVxuLnJhZGlvLWlubGluZSxcbi5jaGVja2JveC1pbmxpbmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ucmFkaW8taW5saW5lICsgLnJhZGlvLWlubGluZSxcbi5jaGVja2JveC1pbmxpbmUgKyAuY2hlY2tib3gtaW5saW5lIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7IC8vIHNwYWNlIG91dCBjb25zZWN1dGl2ZSBpbmxpbmUgY29udHJvbHNcbn1cblxuLy8gQXBwbHkgc2FtZSBkaXNhYmxlZCBjdXJzb3IgdHdlYWsgYXMgZm9yIGlucHV0c1xuLy8gU29tZSBzcGVjaWFsIGNhcmUgaXMgbmVlZGVkIGJlY2F1c2UgPGxhYmVsPnMgZG9uJ3QgaW5oZXJpdCB0aGVpciBwYXJlbnQncyBgY3Vyc29yYC5cbi8vXG4vLyBOb3RlOiBOZWl0aGVyIHJhZGlvcyBub3IgY2hlY2tib3hlcyBjYW4gYmUgcmVhZG9ubHkuXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0sXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICAmW2Rpc2FibGVkXSxcbiAgJi5kaXNhYmxlZCxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgIGN1cnNvcjogQGN1cnNvci1kaXNhYmxlZDtcbiAgfVxufVxuLy8gVGhlc2UgY2xhc3NlcyBhcmUgdXNlZCBkaXJlY3RseSBvbiA8bGFiZWw+c1xuLnJhZGlvLWlubGluZSxcbi5jaGVja2JveC1pbmxpbmUge1xuICAmLmRpc2FibGVkLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgY3Vyc29yOiBAY3Vyc29yLWRpc2FibGVkO1xuICB9XG59XG4vLyBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIG9uIGVsZW1lbnRzIHdpdGggPGxhYmVsPiBkZXNjZW5kYW50c1xuLnJhZGlvLFxuLmNoZWNrYm94IHtcbiAgJi5kaXNhYmxlZCxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgIGxhYmVsIHtcbiAgICAgIGN1cnNvcjogQGN1cnNvci1kaXNhYmxlZDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBTdGF0aWMgZm9ybSBjb250cm9sIHRleHRcbi8vXG4vLyBBcHBseSBjbGFzcyB0byBhIGBwYCBlbGVtZW50IHRvIG1ha2UgYW55IHN0cmluZyBvZiB0ZXh0IGFsaWduIHdpdGggbGFiZWxzIGluXG4vLyBhIGhvcml6b250YWwgZm9ybSBsYXlvdXQuXG5cbi5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgLy8gU2l6ZSBpdCBhcHByb3ByaWF0ZWx5IG5leHQgdG8gcmVhbCBmb3JtIGNvbnRyb2xzXG4gIHBhZGRpbmctdG9wOiAoQHBhZGRpbmctYmFzZS12ZXJ0aWNhbCArIDEpO1xuICBwYWRkaW5nLWJvdHRvbTogKEBwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKTtcbiAgLy8gUmVtb3ZlIGRlZmF1bHQgbWFyZ2luIGZyb20gYHBgXG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIG1pbi1oZWlnaHQ6IChAbGluZS1oZWlnaHQtY29tcHV0ZWQgKyBAZm9udC1zaXplLWJhc2UpO1xuXG4gICYuaW5wdXQtbGcsXG4gICYuaW5wdXQtc20ge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG59XG5cblxuLy8gRm9ybSBjb250cm9sIHNpemluZ1xuLy9cbi8vIEJ1aWxkIG9uIGAuZm9ybS1jb250cm9sYCB3aXRoIG1vZGlmaWVyIGNsYXNzZXMgdG8gZGVjcmVhc2Ugb3IgaW5jcmVhc2UgdGhlXG4vLyBoZWlnaHQgYW5kIGZvbnQtc2l6ZSBvZiBmb3JtIGNvbnRyb2xzLlxuLy9cbi8vIFRoZSBgLmZvcm0tZ3JvdXAtKiBmb3JtLWNvbnRyb2xgIHZhcmlhdGlvbnMgYXJlIHNhZGx5IGR1cGxpY2F0ZWQgdG8gYXZvaWQgdGhlXG4vLyBpc3N1ZSBkb2N1bWVudGVkIGluIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTUwNzQuXG5cbi5pbnB1dC1zbSB7XG4gIC5pbnB1dC1zaXplKEBpbnB1dC1oZWlnaHQtc21hbGw7IEBwYWRkaW5nLXNtYWxsLXZlcnRpY2FsOyBAcGFkZGluZy1zbWFsbC1ob3Jpem9udGFsOyBAZm9udC1zaXplLXNtYWxsOyBAbGluZS1oZWlnaHQtc21hbGw7IEBpbnB1dC1ib3JkZXItcmFkaXVzLXNtYWxsKTtcbn1cbi5mb3JtLWdyb3VwLXNtIHtcbiAgLmZvcm0tY29udHJvbCB7XG4gICAgaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LXNtYWxsO1xuICAgIHBhZGRpbmc6IEBwYWRkaW5nLXNtYWxsLXZlcnRpY2FsIEBwYWRkaW5nLXNtYWxsLWhvcml6b250YWw7XG4gICAgZm9udC1zaXplOiBAZm9udC1zaXplLXNtYWxsO1xuICAgIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtc21hbGw7XG4gICAgYm9yZGVyLXJhZGl1czogQGlucHV0LWJvcmRlci1yYWRpdXMtc21hbGw7XG4gIH1cbiAgc2VsZWN0LmZvcm0tY29udHJvbCB7XG4gICAgaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LXNtYWxsO1xuICAgIGxpbmUtaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LXNtYWxsO1xuICB9XG4gIHRleHRhcmVhLmZvcm0tY29udHJvbCxcbiAgc2VsZWN0W211bHRpcGxlXS5mb3JtLWNvbnRyb2wge1xuICAgIGhlaWdodDogYXV0bztcbiAgfVxuICAuZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gICAgaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LXNtYWxsO1xuICAgIG1pbi1oZWlnaHQ6IChAbGluZS1oZWlnaHQtY29tcHV0ZWQgKyBAZm9udC1zaXplLXNtYWxsKTtcbiAgICBwYWRkaW5nOiAoQHBhZGRpbmctc21hbGwtdmVydGljYWwgKyAxKSBAcGFkZGluZy1zbWFsbC1ob3Jpem9udGFsO1xuICAgIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1zbWFsbDtcbiAgICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LXNtYWxsO1xuICB9XG59XG5cbi5pbnB1dC1sZyB7XG4gIC5pbnB1dC1zaXplKEBpbnB1dC1oZWlnaHQtbGFyZ2U7IEBwYWRkaW5nLWxhcmdlLXZlcnRpY2FsOyBAcGFkZGluZy1sYXJnZS1ob3Jpem9udGFsOyBAZm9udC1zaXplLWxhcmdlOyBAbGluZS1oZWlnaHQtbGFyZ2U7IEBpbnB1dC1ib3JkZXItcmFkaXVzLWxhcmdlKTtcbn1cbi5mb3JtLWdyb3VwLWxnIHtcbiAgLmZvcm0tY29udHJvbCB7XG4gICAgaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LWxhcmdlO1xuICAgIHBhZGRpbmc6IEBwYWRkaW5nLWxhcmdlLXZlcnRpY2FsIEBwYWRkaW5nLWxhcmdlLWhvcml6b250YWw7XG4gICAgZm9udC1zaXplOiBAZm9udC1zaXplLWxhcmdlO1xuICAgIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtbGFyZ2U7XG4gICAgYm9yZGVyLXJhZGl1czogQGlucHV0LWJvcmRlci1yYWRpdXMtbGFyZ2U7XG4gIH1cbiAgc2VsZWN0LmZvcm0tY29udHJvbCB7XG4gICAgaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LWxhcmdlO1xuICAgIGxpbmUtaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LWxhcmdlO1xuICB9XG4gIHRleHRhcmVhLmZvcm0tY29udHJvbCxcbiAgc2VsZWN0W211bHRpcGxlXS5mb3JtLWNvbnRyb2wge1xuICAgIGhlaWdodDogYXV0bztcbiAgfVxuICAuZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gICAgaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LWxhcmdlO1xuICAgIG1pbi1oZWlnaHQ6IChAbGluZS1oZWlnaHQtY29tcHV0ZWQgKyBAZm9udC1zaXplLWxhcmdlKTtcbiAgICBwYWRkaW5nOiAoQHBhZGRpbmctbGFyZ2UtdmVydGljYWwgKyAxKSBAcGFkZGluZy1sYXJnZS1ob3Jpem9udGFsO1xuICAgIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1sYXJnZTtcbiAgICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LWxhcmdlO1xuICB9XG59XG5cblxuLy8gRm9ybSBjb250cm9sIGZlZWRiYWNrIHN0YXRlc1xuLy9cbi8vIEFwcGx5IGNvbnRleHR1YWwgYW5kIHNlbWFudGljIHN0YXRlcyB0byBpbmRpdmlkdWFsIGZvcm0gY29udHJvbHMuXG5cbi5oYXMtZmVlZGJhY2sge1xuICAvLyBFbmFibGUgYWJzb2x1dGUgcG9zaXRpb25pbmdcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC8vIEVuc3VyZSBpY29ucyBkb24ndCBvdmVybGFwIHRleHRcbiAgLmZvcm0tY29udHJvbCB7XG4gICAgcGFkZGluZy1yaWdodDogKEBpbnB1dC1oZWlnaHQtYmFzZSAqIDEuMjUpO1xuICB9XG59XG4vLyBGZWVkYmFjayBpY29uIChyZXF1aXJlcyAuZ2x5cGhpY29uIGNsYXNzZXMpXG4uZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICB6LWluZGV4OiAyOyAvLyBFbnN1cmUgaWNvbiBpcyBhYm92ZSBpbnB1dCBncm91cHNcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiBAaW5wdXQtaGVpZ2h0LWJhc2U7XG4gIGhlaWdodDogQGlucHV0LWhlaWdodC1iYXNlO1xuICBsaW5lLWhlaWdodDogQGlucHV0LWhlaWdodC1iYXNlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLmlucHV0LWxnICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayxcbi5pbnB1dC1ncm91cC1sZyArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uZm9ybS1ncm91cC1sZyAuZm9ybS1jb250cm9sICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHdpZHRoOiBAaW5wdXQtaGVpZ2h0LWxhcmdlO1xuICBoZWlnaHQ6IEBpbnB1dC1oZWlnaHQtbGFyZ2U7XG4gIGxpbmUtaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LWxhcmdlO1xufVxuLmlucHV0LXNtICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayxcbi5pbnB1dC1ncm91cC1zbSArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uZm9ybS1ncm91cC1zbSAuZm9ybS1jb250cm9sICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHdpZHRoOiBAaW5wdXQtaGVpZ2h0LXNtYWxsO1xuICBoZWlnaHQ6IEBpbnB1dC1oZWlnaHQtc21hbGw7XG4gIGxpbmUtaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LXNtYWxsO1xufVxuXG4vLyBGZWVkYmFjayBzdGF0ZXNcbi5oYXMtc3VjY2VzcyB7XG4gIC5mb3JtLWNvbnRyb2wtdmFsaWRhdGlvbihAc3RhdGUtc3VjY2Vzcy10ZXh0OyBAc3RhdGUtc3VjY2Vzcy10ZXh0OyBAc3RhdGUtc3VjY2Vzcy1iZyk7XG59XG4uaGFzLXdhcm5pbmcge1xuICAuZm9ybS1jb250cm9sLXZhbGlkYXRpb24oQHN0YXRlLXdhcm5pbmctdGV4dDsgQHN0YXRlLXdhcm5pbmctdGV4dDsgQHN0YXRlLXdhcm5pbmctYmcpO1xufVxuLmhhcy1lcnJvciB7XG4gIC5mb3JtLWNvbnRyb2wtdmFsaWRhdGlvbihAc3RhdGUtZGFuZ2VyLXRleHQ7IEBzdGF0ZS1kYW5nZXItdGV4dDsgQHN0YXRlLWRhbmdlci1iZyk7XG59XG5cbi8vIFJlcG9zaXRpb24gZmVlZGJhY2sgaWNvbiBpZiBpbnB1dCBoYXMgdmlzaWJsZSBsYWJlbCBhYm92ZVxuLmhhcy1mZWVkYmFjayBsYWJlbCB7XG5cbiAgJiB+IC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgICB0b3A6IChAbGluZS1oZWlnaHQtY29tcHV0ZWQgKyA1KTsgLy8gSGVpZ2h0IG9mIHRoZSBgbGFiZWxgIGFuZCBpdHMgbWFyZ2luXG4gIH1cbiAgJi5zci1vbmx5IH4gLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gICAgIHRvcDogMDtcbiAgfVxufVxuXG5cbi8vIEhlbHAgdGV4dFxuLy9cbi8vIEFwcGx5IHRvIGFueSBlbGVtZW50IHlvdSB3aXNoIHRvIGNyZWF0ZSBsaWdodCB0ZXh0IGZvciBwbGFjZW1lbnQgaW1tZWRpYXRlbHlcbi8vIGJlbG93IGEgZm9ybSBjb250cm9sLiBVc2UgZm9yIGdlbmVyYWwgaGVscCwgZm9ybWF0dGluZywgb3IgaW5zdHJ1Y3Rpb25hbCB0ZXh0LlxuXG4uaGVscC1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrOyAvLyBhY2NvdW50IGZvciBhbnkgZWxlbWVudCB1c2luZyBoZWxwLWJsb2NrXG4gIG1hcmdpbi10b3A6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgY29sb3I6IGxpZ2h0ZW4oQHRleHQtY29sb3IsIDI1JSk7IC8vIGxpZ2h0ZW4gdGhlIHRleHQgc29tZSBmb3IgY29udHJhc3Rcbn1cblxuXG4vLyBJbmxpbmUgZm9ybXNcbi8vXG4vLyBNYWtlIGZvcm1zIGFwcGVhciBpbmxpbmUoLWJsb2NrKSBieSBhZGRpbmcgdGhlIGAuZm9ybS1pbmxpbmVgIGNsYXNzLiBJbmxpbmVcbi8vIGZvcm1zIGJlZ2luIHN0YWNrZWQgb24gZXh0cmEgc21hbGwgKG1vYmlsZSkgZGV2aWNlcyBhbmQgdGhlbiBnbyBpbmxpbmUgd2hlblxuLy8gdmlld3BvcnRzIHJlYWNoIDw3NjhweC5cbi8vXG4vLyBSZXF1aXJlcyB3cmFwcGluZyBpbnB1dHMgYW5kIGxhYmVscyB3aXRoIGAuZm9ybS1ncm91cGAgZm9yIHByb3BlciBkaXNwbGF5IG9mXG4vLyBkZWZhdWx0IEhUTUwgZm9ybSBjb250cm9scyBhbmQgb3VyIGN1c3RvbSBmb3JtIGNvbnRyb2xzIChlLmcuLCBpbnB1dCBncm91cHMpLlxuLy9cbi8vIEhlYWRzIHVwISBUaGlzIGlzIG1peGluLWVkIGludG8gYC5uYXZiYXItZm9ybWAgaW4gbmF2YmFycy5sZXNzLlxuXG4uZm9ybS1pbmxpbmUge1xuXG4gIC8vIEtpY2sgaW4gdGhlIGlubGluZVxuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIHtcbiAgICAvLyBJbmxpbmUtYmxvY2sgYWxsIHRoZSB0aGluZ3MgZm9yIFwiaW5saW5lXCJcbiAgICAuZm9ybS1ncm91cCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG5cbiAgICAvLyBJbiBuYXZiYXItZm9ybSwgYWxsb3cgZm9sa3MgdG8gKm5vdCogdXNlIGAuZm9ybS1ncm91cGBcbiAgICAuZm9ybS1jb250cm9sIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiBhdXRvOyAvLyBQcmV2ZW50IGxhYmVscyBmcm9tIHN0YWNraW5nIGFib3ZlIGlucHV0cyBpbiBgLmZvcm0tZ3JvdXBgXG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cblxuICAgIC8vIE1ha2Ugc3RhdGljIGNvbnRyb2xzIGJlaGF2ZSBsaWtlIHJlZ3VsYXIgb25lc1xuICAgIC5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG5cbiAgICAuaW5wdXQtZ3JvdXAge1xuICAgICAgZGlzcGxheTogaW5saW5lLXRhYmxlO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcblxuICAgICAgLmlucHV0LWdyb3VwLWFkZG9uLFxuICAgICAgLmlucHV0LWdyb3VwLWJ0bixcbiAgICAgIC5mb3JtLWNvbnRyb2wge1xuICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbnB1dCBncm91cHMgbmVlZCB0aGF0IDEwMCUgd2lkdGggdGhvdWdoXG4gICAgLmlucHV0LWdyb3VwID4gLmZvcm0tY29udHJvbCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAuY29udHJvbC1sYWJlbCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgZGVmYXVsdCBtYXJnaW4gb24gcmFkaW9zL2NoZWNrYm94ZXMgdGhhdCB3ZXJlIHVzZWQgZm9yIHN0YWNraW5nLCBhbmRcbiAgICAvLyB0aGVuIHVuZG8gdGhlIGZsb2F0aW5nIG9mIHJhZGlvcyBhbmQgY2hlY2tib3hlcyB0byBtYXRjaC5cbiAgICAucmFkaW8sXG4gICAgLmNoZWNrYm94IHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcblxuICAgICAgbGFiZWwge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICB9XG4gICAgfVxuICAgIC5yYWRpbyBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gICAgLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB9XG5cbiAgICAvLyBSZS1vdmVycmlkZSB0aGUgZmVlZGJhY2sgaWNvbi5cbiAgICAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgICAgdG9wOiAwO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIEhvcml6b250YWwgZm9ybXNcbi8vXG4vLyBIb3Jpem9udGFsIGZvcm1zIGFyZSBidWlsdCBvbiBncmlkIGNsYXNzZXMgYW5kIGFsbG93IHlvdSB0byBjcmVhdGUgZm9ybXMgd2l0aFxuLy8gbGFiZWxzIG9uIHRoZSBsZWZ0IGFuZCBpbnB1dHMgb24gdGhlIHJpZ2h0LlxuXG4uZm9ybS1ob3Jpem9udGFsIHtcblxuICAvLyBDb25zaXN0ZW50IHZlcnRpY2FsIGFsaWdubWVudCBvZiByYWRpb3MgYW5kIGNoZWNrYm94ZXNcbiAgLy9cbiAgLy8gTGFiZWxzIGFsc28gZ2V0IHNvbWUgcmVzZXQgc3R5bGVzLCBidXQgdGhhdCBpcyBzY29wZWQgdG8gYSBtZWRpYSBxdWVyeSBiZWxvdy5cbiAgLnJhZGlvLFxuICAuY2hlY2tib3gsXG4gIC5yYWRpby1pbmxpbmUsXG4gIC5jaGVja2JveC1pbmxpbmUge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBwYWRkaW5nLXRvcDogKEBwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKTsgLy8gRGVmYXVsdCBwYWRkaW5nIHBsdXMgYSBib3JkZXJcbiAgfVxuICAvLyBBY2NvdW50IGZvciBwYWRkaW5nIHdlJ3JlIGFkZGluZyB0byBlbnN1cmUgdGhlIGFsaWdubWVudCBhbmQgb2YgaGVscCB0ZXh0XG4gIC8vIGFuZCBvdGhlciBjb250ZW50IGJlbG93IGl0ZW1zXG4gIC5yYWRpbyxcbiAgLmNoZWNrYm94IHtcbiAgICBtaW4taGVpZ2h0OiAoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgKEBwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKSk7XG4gIH1cblxuICAvLyBNYWtlIGZvcm0gZ3JvdXBzIGJlaGF2ZSBsaWtlIHJvd3NcbiAgLmZvcm0tZ3JvdXAge1xuICAgIC5tYWtlLXJvdygpO1xuICB9XG5cbiAgLy8gUmVzZXQgc3BhY2luZyBhbmQgcmlnaHQgYWxpZ24gbGFiZWxzLCBidXQgc2NvcGUgdG8gbWVkaWEgcXVlcmllcyBzbyB0aGF0XG4gIC8vIGxhYmVscyBvbiBuYXJyb3cgdmlld3BvcnRzIHN0YWNrIHRoZSBzYW1lIGFzIGEgZGVmYXVsdCBmb3JtIGV4YW1wbGUuXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLXNtLW1pbikge1xuICAgIC5jb250cm9sLWxhYmVsIHtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIHBhZGRpbmctdG9wOiAoQHBhZGRpbmctYmFzZS12ZXJ0aWNhbCArIDEpOyAvLyBEZWZhdWx0IHBhZGRpbmcgcGx1cyBhIGJvcmRlclxuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRpb24gc3RhdGVzXG4gIC8vXG4gIC8vIFJlcG9zaXRpb24gdGhlIGljb24gYmVjYXVzZSBpdCdzIG5vdyB3aXRoaW4gYSBncmlkIGNvbHVtbiBhbmQgY29sdW1ucyBoYXZlXG4gIC8vIGBwb3NpdGlvbjogcmVsYXRpdmU7YCBvbiB0aGVtLiBBbHNvIGFjY291bnRzIGZvciB0aGUgZ3JpZCBndXR0ZXIgcGFkZGluZy5cbiAgLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICByaWdodDogZmxvb3IoKEBncmlkLWd1dHRlci13aWR0aCAvIDIpKTtcbiAgfVxuXG4gIC8vIEZvcm0gZ3JvdXAgc2l6ZXNcbiAgLy9cbiAgLy8gUXVpY2sgdXRpbGl0eSBjbGFzcyBmb3IgYXBwbHlpbmcgYC5pbnB1dC1sZ2AgYW5kIGAuaW5wdXQtc21gIHN0eWxlcyB0byB0aGVcbiAgLy8gaW5wdXRzIGFuZCBsYWJlbHMgd2l0aGluIGEgYC5mb3JtLWdyb3VwYC5cbiAgLmZvcm0tZ3JvdXAtbGcge1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLXNtLW1pbikge1xuICAgICAgLmNvbnRyb2wtbGFiZWwge1xuICAgICAgICBwYWRkaW5nLXRvcDogKChAcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCAqIEBsaW5lLWhlaWdodC1sYXJnZSkgKyAxKTtcbiAgICAgICAgZm9udC1zaXplOiBAZm9udC1zaXplLWxhcmdlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAuZm9ybS1ncm91cC1zbSB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XG4gICAgICAuY29udHJvbC1sYWJlbCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAoQHBhZGRpbmctc21hbGwtdmVydGljYWwgKyAxKTtcbiAgICAgICAgZm9udC1zaXplOiBAZm9udC1zaXplLXNtYWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm9ybSB2YWxpZGF0aW9uIHN0YXRlc1xuLy9cbi8vIFVzZWQgaW4gZm9ybXMubGVzcyB0byBnZW5lcmF0ZSB0aGUgZm9ybSB2YWxpZGF0aW9uIENTUyBmb3Igd2FybmluZ3MsIGVycm9ycyxcbi8vIGFuZCBzdWNjZXNzZXMuXG5cbi5mb3JtLWNvbnRyb2wtdmFsaWRhdGlvbihAdGV4dC1jb2xvcjogIzU1NTsgQGJvcmRlci1jb2xvcjogI2NjYzsgQGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjUpIHtcbiAgLy8gQ29sb3IgdGhlIGxhYmVsIGFuZCBoZWxwIHRleHRcbiAgLmhlbHAtYmxvY2ssXG4gIC5jb250cm9sLWxhYmVsLFxuICAucmFkaW8sXG4gIC5jaGVja2JveCxcbiAgLnJhZGlvLWlubGluZSxcbiAgLmNoZWNrYm94LWlubGluZSxcbiAgJi5yYWRpbyBsYWJlbCxcbiAgJi5jaGVja2JveCBsYWJlbCxcbiAgJi5yYWRpby1pbmxpbmUgbGFiZWwsXG4gICYuY2hlY2tib3gtaW5saW5lIGxhYmVsICB7XG4gICAgY29sb3I6IEB0ZXh0LWNvbG9yO1xuICB9XG4gIC8vIFNldCB0aGUgYm9yZGVyIGFuZCBib3ggc2hhZG93IG9uIHNwZWNpZmljIGlucHV0cyB0byBtYXRjaFxuICAuZm9ybS1jb250cm9sIHtcbiAgICBib3JkZXItY29sb3I6IEBib3JkZXItY29sb3I7XG4gICAgLmJveC1zaGFkb3coaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSkpOyAvLyBSZWRlY2xhcmUgc28gdHJhbnNpdGlvbnMgd29ya1xuICAgICY6Zm9jdXMge1xuICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oQGJvcmRlci1jb2xvciwgMTAlKTtcbiAgICAgIEBzaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpLCAwIDAgNnB4IGxpZ2h0ZW4oQGJvcmRlci1jb2xvciwgMjAlKTtcbiAgICAgIC5ib3gtc2hhZG93KEBzaGFkb3cpO1xuICAgIH1cbiAgfVxuICAvLyBTZXQgdmFsaWRhdGlvbiBzdGF0ZXMgYWxzbyBmb3IgYWRkb25zXG4gIC5pbnB1dC1ncm91cC1hZGRvbiB7XG4gICAgY29sb3I6IEB0ZXh0LWNvbG9yO1xuICAgIGJvcmRlci1jb2xvcjogQGJvcmRlci1jb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmFja2dyb3VuZC1jb2xvcjtcbiAgfVxuICAvLyBPcHRpb25hbCBmZWVkYmFjayBpY29uXG4gIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgIGNvbG9yOiBAdGV4dC1jb2xvcjtcbiAgfVxufVxuXG5cbi8vIEZvcm0gY29udHJvbCBmb2N1cyBzdGF0ZVxuLy9cbi8vIEdlbmVyYXRlIGEgY3VzdG9taXplZCBmb2N1cyBzdGF0ZSBhbmQgZm9yIGFueSBpbnB1dCB3aXRoIHRoZSBzcGVjaWZpZWQgY29sb3IsXG4vLyB3aGljaCBkZWZhdWx0cyB0byB0aGUgYEBpbnB1dC1ib3JkZXItZm9jdXNgIHZhcmlhYmxlLlxuLy9cbi8vIFdlIGhpZ2hseSBlbmNvdXJhZ2UgeW91IHRvIG5vdCBjdXN0b21pemUgdGhlIGRlZmF1bHQgdmFsdWUsIGJ1dCBpbnN0ZWFkIHVzZVxuLy8gdGhpcyB0byB0d2VhayBjb2xvcnMgb24gYW4gYXMtbmVlZGVkIGJhc2lzLiBUaGlzIGFlc3RoZXRpYyBjaGFuZ2UgaXMgYmFzZWQgb25cbi8vIFdlYktpdCdzIGRlZmF1bHQgc3R5bGVzLCBidXQgYXBwbGljYWJsZSB0byBhIHdpZGVyIHJhbmdlIG9mIGJyb3dzZXJzLiBJdHNcbi8vIHVzYWJpbGl0eSBhbmQgYWNjZXNzaWJpbGl0eSBzaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50IHdpdGggYW55IGNoYW5nZS5cbi8vXG4vLyBFeGFtcGxlIHVzYWdlOiBjaGFuZ2UgdGhlIGRlZmF1bHQgYmx1ZSBib3JkZXIgYW5kIHNoYWRvdyB0byB3aGl0ZSBmb3IgYmV0dGVyXG4vLyBjb250cmFzdCBhZ2FpbnN0IGEgZGFyayBncmF5IGJhY2tncm91bmQuXG4uZm9ybS1jb250cm9sLWZvY3VzKEBjb2xvcjogQGlucHV0LWJvcmRlci1mb2N1cykge1xuICBAY29sb3ItcmdiYTogcmdiYShyZWQoQGNvbG9yKSwgZ3JlZW4oQGNvbG9yKSwgYmx1ZShAY29sb3IpLCAuNik7XG4gICY6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogQGNvbG9yO1xuICAgIG91dGxpbmU6IDA7XG4gICAgLmJveC1zaGFkb3coflwiaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSksIDAgMCA4cHggQHtjb2xvci1yZ2JhfVwiKTtcbiAgfVxufVxuXG4vLyBGb3JtIGNvbnRyb2wgc2l6aW5nXG4vL1xuLy8gUmVsYXRpdmUgdGV4dCBzaXplLCBwYWRkaW5nLCBhbmQgYm9yZGVyLXJhZGlpIGNoYW5nZXMgZm9yIGZvcm0gY29udHJvbHMuIEZvclxuLy8gaG9yaXpvbnRhbCBzaXppbmcsIHdyYXAgY29udHJvbHMgaW4gdGhlIHByZWRlZmluZWQgZ3JpZCBjbGFzc2VzLiBgPHNlbGVjdD5gXG4vLyBlbGVtZW50IGdldHMgc3BlY2lhbCBsb3ZlIGJlY2F1c2UgaXQncyBzcGVjaWFsLCBhbmQgdGhhdCdzIGEgZmFjdCFcbi5pbnB1dC1zaXplKEBpbnB1dC1oZWlnaHQ7IEBwYWRkaW5nLXZlcnRpY2FsOyBAcGFkZGluZy1ob3Jpem9udGFsOyBAZm9udC1zaXplOyBAbGluZS1oZWlnaHQ7IEBib3JkZXItcmFkaXVzKSB7XG4gIGhlaWdodDogQGlucHV0LWhlaWdodDtcbiAgcGFkZGluZzogQHBhZGRpbmctdmVydGljYWwgQHBhZGRpbmctaG9yaXpvbnRhbDtcbiAgZm9udC1zaXplOiBAZm9udC1zaXplO1xuICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0O1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cztcblxuICBzZWxlY3QmIHtcbiAgICBoZWlnaHQ6IEBpbnB1dC1oZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6IEBpbnB1dC1oZWlnaHQ7XG4gIH1cblxuICB0ZXh0YXJlYSYsXG4gIHNlbGVjdFttdWx0aXBsZV0mIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gIH1cbn1cbiIsIi8vXG4vLyBCdXR0b25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIEJhc2Ugc3R5bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uYnRuIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tYm90dG9tOiAwOyAvLyBGb3IgaW5wdXQuYnRuXG4gIGZvbnQtd2VpZ2h0OiBAYnRuLWZvbnQtd2VpZ2h0O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IC8vIFJlc2V0IHVudXN1YWwgRmlyZWZveC1vbi1BbmRyb2lkIGRlZmF1bHQgc3R5bGU7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzL2lzc3Vlcy8yMTRcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIC5idXR0b24tc2l6ZShAcGFkZGluZy1iYXNlLXZlcnRpY2FsOyBAcGFkZGluZy1iYXNlLWhvcml6b250YWw7IEBmb250LXNpemUtYmFzZTsgQGxpbmUtaGVpZ2h0LWJhc2U7IEBidG4tYm9yZGVyLXJhZGl1cy1iYXNlKTtcbiAgLnVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICYsXG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSB7XG4gICAgJjpmb2N1cyxcbiAgICAmLmZvY3VzIHtcbiAgICAgIC50YWItZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICAmOmhvdmVyLFxuICAmOmZvY3VzLFxuICAmLmZvY3VzIHtcbiAgICBjb2xvcjogQGJ0bi1kZWZhdWx0LWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuXG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSB7XG4gICAgb3V0bGluZTogMDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAgIC5ib3gtc2hhZG93KGluc2V0IDAgM3B4IDVweCByZ2JhKDAsMCwwLC4xMjUpKTtcbiAgfVxuXG4gICYuZGlzYWJsZWQsXG4gICZbZGlzYWJsZWRdLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgY3Vyc29yOiBAY3Vyc29yLWRpc2FibGVkO1xuICAgIC5vcGFjaXR5KC42NSk7XG4gICAgLmJveC1zaGFkb3cobm9uZSk7XG4gIH1cblxuICBhJiB7XG4gICAgJi5kaXNhYmxlZCxcbiAgICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsgLy8gRnV0dXJlLXByb29mIGRpc2FibGluZyBvZiBjbGlja3Mgb24gYDxhPmAgZWxlbWVudHNcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBBbHRlcm5hdGUgYnV0dG9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmJ0bi1kZWZhdWx0IHtcbiAgLmJ1dHRvbi12YXJpYW50KEBidG4tZGVmYXVsdC1jb2xvcjsgQGJ0bi1kZWZhdWx0LWJnOyBAYnRuLWRlZmF1bHQtYm9yZGVyKTtcbn1cbi5idG4tcHJpbWFyeSB7XG4gIC5idXR0b24tdmFyaWFudChAYnRuLXByaW1hcnktY29sb3I7IEBidG4tcHJpbWFyeS1iZzsgQGJ0bi1wcmltYXJ5LWJvcmRlcik7XG59XG4vLyBTdWNjZXNzIGFwcGVhcnMgYXMgZ3JlZW5cbi5idG4tc3VjY2VzcyB7XG4gIC5idXR0b24tdmFyaWFudChAYnRuLXN1Y2Nlc3MtY29sb3I7IEBidG4tc3VjY2Vzcy1iZzsgQGJ0bi1zdWNjZXNzLWJvcmRlcik7XG59XG4vLyBJbmZvIGFwcGVhcnMgYXMgYmx1ZS1ncmVlblxuLmJ0bi1pbmZvIHtcbiAgLmJ1dHRvbi12YXJpYW50KEBidG4taW5mby1jb2xvcjsgQGJ0bi1pbmZvLWJnOyBAYnRuLWluZm8tYm9yZGVyKTtcbn1cbi8vIFdhcm5pbmcgYXBwZWFycyBhcyBvcmFuZ2Vcbi5idG4td2FybmluZyB7XG4gIC5idXR0b24tdmFyaWFudChAYnRuLXdhcm5pbmctY29sb3I7IEBidG4td2FybmluZy1iZzsgQGJ0bi13YXJuaW5nLWJvcmRlcik7XG59XG4vLyBEYW5nZXIgYW5kIGVycm9yIGFwcGVhciBhcyByZWRcbi5idG4tZGFuZ2VyIHtcbiAgLmJ1dHRvbi12YXJpYW50KEBidG4tZGFuZ2VyLWNvbG9yOyBAYnRuLWRhbmdlci1iZzsgQGJ0bi1kYW5nZXItYm9yZGVyKTtcbn1cblxuXG4vLyBMaW5rIGJ1dHRvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTWFrZSBhIGJ1dHRvbiBsb29rIGFuZCBiZWhhdmUgbGlrZSBhIGxpbmtcbi5idG4tbGluayB7XG4gIGNvbG9yOiBAbGluay1jb2xvcjtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgYm9yZGVyLXJhZGl1czogMDtcblxuICAmLFxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUsXG4gICZbZGlzYWJsZWRdLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgLmJveC1zaGFkb3cobm9uZSk7XG4gIH1cbiAgJixcbiAgJjpob3ZlcixcbiAgJjpmb2N1cyxcbiAgJjphY3RpdmUge1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6IEBsaW5rLWhvdmVyLWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogQGxpbmstaG92ZXItZGVjb3JhdGlvbjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuICAmW2Rpc2FibGVkXSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogQGJ0bi1saW5rLWRpc2FibGVkLWNvbG9yO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIEJ1dHRvbiBTaXplc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmJ0bi1sZyB7XG4gIC8vIGxpbmUtaGVpZ2h0OiBlbnN1cmUgZXZlbi1udW1iZXJlZCBoZWlnaHQgb2YgYnV0dG9uIG5leHQgdG8gbGFyZ2UgaW5wdXRcbiAgLmJ1dHRvbi1zaXplKEBwYWRkaW5nLWxhcmdlLXZlcnRpY2FsOyBAcGFkZGluZy1sYXJnZS1ob3Jpem9udGFsOyBAZm9udC1zaXplLWxhcmdlOyBAbGluZS1oZWlnaHQtbGFyZ2U7IEBidG4tYm9yZGVyLXJhZGl1cy1sYXJnZSk7XG59XG4uYnRuLXNtIHtcbiAgLy8gbGluZS1oZWlnaHQ6IGVuc3VyZSBwcm9wZXIgaGVpZ2h0IG9mIGJ1dHRvbiBuZXh0IHRvIHNtYWxsIGlucHV0XG4gIC5idXR0b24tc2l6ZShAcGFkZGluZy1zbWFsbC12ZXJ0aWNhbDsgQHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbDsgQGZvbnQtc2l6ZS1zbWFsbDsgQGxpbmUtaGVpZ2h0LXNtYWxsOyBAYnRuLWJvcmRlci1yYWRpdXMtc21hbGwpO1xufVxuLmJ0bi14cyB7XG4gIC5idXR0b24tc2l6ZShAcGFkZGluZy14cy12ZXJ0aWNhbDsgQHBhZGRpbmcteHMtaG9yaXpvbnRhbDsgQGZvbnQtc2l6ZS1zbWFsbDsgQGxpbmUtaGVpZ2h0LXNtYWxsOyBAYnRuLWJvcmRlci1yYWRpdXMtc21hbGwpO1xufVxuXG5cbi8vIEJsb2NrIGJ1dHRvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmJ0bi1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLy8gVmVydGljYWxseSBzcGFjZSBvdXQgbXVsdGlwbGUgYmxvY2sgYnV0dG9uc1xuLmJ0bi1ibG9jayArIC5idG4tYmxvY2sge1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG5cbi8vIFNwZWNpZmljaXR5IG92ZXJyaWRlc1xuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSxcbmlucHV0W3R5cGU9XCJyZXNldFwiXSxcbmlucHV0W3R5cGU9XCJidXR0b25cIl0ge1xuICAmLmJ0bi1ibG9jayB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbiIsIi8vIEJ1dHRvbiB2YXJpYW50c1xuLy9cbi8vIEVhc2lseSBwdW1wIG91dCBkZWZhdWx0IHN0eWxlcywgYXMgd2VsbCBhcyA6aG92ZXIsIDpmb2N1cywgOmFjdGl2ZSxcbi8vIGFuZCBkaXNhYmxlZCBvcHRpb25zIGZvciBhbGwgYnV0dG9uc1xuXG4uYnV0dG9uLXZhcmlhbnQoQGNvbG9yOyBAYmFja2dyb3VuZDsgQGJvcmRlcikge1xuICBjb2xvcjogQGNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmFja2dyb3VuZDtcbiAgYm9yZGVyLWNvbG9yOiBAYm9yZGVyO1xuXG4gICY6Zm9jdXMsXG4gICYuZm9jdXMge1xuICAgIGNvbG9yOiBAY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKEBiYWNrZ3JvdW5kLCAxMCUpO1xuICAgICAgICBib3JkZXItY29sb3I6IGRhcmtlbihAYm9yZGVyLCAyNSUpO1xuICB9XG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiBAY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKEBiYWNrZ3JvdW5kLCAxMCUpO1xuICAgICAgICBib3JkZXItY29sb3I6IGRhcmtlbihAYm9yZGVyLCAxMiUpO1xuICB9XG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSxcbiAgLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlJiB7XG4gICAgY29sb3I6IEBjb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oQGJhY2tncm91bmQsIDEwJSk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKEBib3JkZXIsIDEyJSk7XG5cbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMsXG4gICAgJi5mb2N1cyB7XG4gICAgICBjb2xvcjogQGNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKEBiYWNrZ3JvdW5kLCAxNyUpO1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKEBib3JkZXIsIDI1JSk7XG4gICAgfVxuICB9XG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSxcbiAgLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlJiB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgfVxuICAmLmRpc2FibGVkLFxuICAmW2Rpc2FibGVkXSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgICYsXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzLFxuICAgICYuZm9jdXMsXG4gICAgJjphY3RpdmUsXG4gICAgJi5hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGJhY2tncm91bmQ7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiBAYm9yZGVyO1xuICAgIH1cbiAgfVxuXG4gIC5iYWRnZSB7XG4gICAgY29sb3I6IEBiYWNrZ3JvdW5kO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEBjb2xvcjtcbiAgfVxufVxuXG4vLyBCdXR0b24gc2l6ZXNcbi5idXR0b24tc2l6ZShAcGFkZGluZy12ZXJ0aWNhbDsgQHBhZGRpbmctaG9yaXpvbnRhbDsgQGZvbnQtc2l6ZTsgQGxpbmUtaGVpZ2h0OyBAYm9yZGVyLXJhZGl1cykge1xuICBwYWRkaW5nOiBAcGFkZGluZy12ZXJ0aWNhbCBAcGFkZGluZy1ob3Jpem9udGFsO1xuICBmb250LXNpemU6IEBmb250LXNpemU7XG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQ7XG4gIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzO1xufVxuIiwiLy8gT3BhY2l0eVxuXG4ub3BhY2l0eShAb3BhY2l0eSkge1xuICBvcGFjaXR5OiBAb3BhY2l0eTtcbiAgLy8gSUU4IGZpbHRlclxuICBAb3BhY2l0eS1pZTogKEBvcGFjaXR5ICogMTAwKTtcbiAgZmlsdGVyOiB+XCJhbHBoYShvcGFjaXR5PUB7b3BhY2l0eS1pZX0pXCI7XG59XG4iLCIvL1xuLy8gQ29tcG9uZW50IGFuaW1hdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEhlYWRzIHVwIVxuLy9cbi8vIFdlIGRvbid0IHVzZSB0aGUgYC5vcGFjaXR5KClgIG1peGluIGhlcmUgc2luY2UgaXQgY2F1c2VzIGEgYnVnIHdpdGggdGV4dFxuLy8gZmllbGRzIGluIElFNy04LiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9wdWxsLzM1NTIuXG5cbi5mYWRlIHtcbiAgb3BhY2l0eTogMDtcbiAgLnRyYW5zaXRpb24ob3BhY2l0eSAuMTVzIGxpbmVhcik7XG4gICYuaW4ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuLmNvbGxhcHNlIHtcbiAgZGlzcGxheTogbm9uZTtcblxuICAmLmluICAgICAgeyBkaXNwbGF5OiBibG9jazsgfVxuICB0ciYuaW4gICAgeyBkaXNwbGF5OiB0YWJsZS1yb3c7IH1cbiAgdGJvZHkmLmluIHsgZGlzcGxheTogdGFibGUtcm93LWdyb3VwOyB9XG59XG5cbi5jb2xsYXBzaW5nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC50cmFuc2l0aW9uLXByb3BlcnR5KH5cImhlaWdodCwgdmlzaWJpbGl0eVwiKTtcbiAgLnRyYW5zaXRpb24tZHVyYXRpb24oLjM1cyk7XG4gIC50cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbihlYXNlKTtcbn1cbiIsIi8vXG4vLyBEcm9wZG93biBtZW51c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBEcm9wZG93biBhcnJvdy9jYXJldFxuLmNhcmV0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW4tbGVmdDogMnB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBib3JkZXItdG9wOiAgIEBjYXJldC13aWR0aC1iYXNlIGRhc2hlZDtcbiAgYm9yZGVyLXRvcDogICBAY2FyZXQtd2lkdGgtYmFzZSBzb2xpZCB+XCJcXDlcIjsgLy8gSUU4XG4gIGJvcmRlci1yaWdodDogQGNhcmV0LXdpZHRoLWJhc2Ugc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1sZWZ0OiAgQGNhcmV0LXdpZHRoLWJhc2Ugc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cbi8vIFRoZSBkcm9wZG93biB3cmFwcGVyIChkaXYpXG4uZHJvcHVwLFxuLmRyb3Bkb3duIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4vLyBQcmV2ZW50IHRoZSBmb2N1cyBvbiB0aGUgZHJvcGRvd24gdG9nZ2xlIHdoZW4gY2xvc2luZyBkcm9wZG93bnNcbi5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xuICBvdXRsaW5lOiAwO1xufVxuXG4vLyBUaGUgZHJvcGRvd24gbWVudSAodWwpXG4uZHJvcGRvd24tbWVudSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAxMDAlO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiBAemluZGV4LWRyb3Bkb3duO1xuICBkaXNwbGF5OiBub25lOyAvLyBub25lIGJ5IGRlZmF1bHQsIGJ1dCBibG9jayBvbiBcIm9wZW5cIiBvZiB0aGUgbWVudVxuICBmbG9hdDogbGVmdDtcbiAgbWluLXdpZHRoOiAxNjBweDtcbiAgcGFkZGluZzogNXB4IDA7XG4gIG1hcmdpbjogMnB4IDAgMDsgLy8gb3ZlcnJpZGUgZGVmYXVsdCB1bFxuICBsaXN0LXN0eWxlOiBub25lO1xuICBmb250LXNpemU6IEBmb250LXNpemUtYmFzZTtcbiAgdGV4dC1hbGlnbjogbGVmdDsgLy8gRW5zdXJlcyBwcm9wZXIgYWxpZ25tZW50IGlmIHBhcmVudCBoYXMgaXQgY2hhbmdlZCAoZS5nLiwgbW9kYWwgZm9vdGVyKVxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAZHJvcGRvd24tYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkIEBkcm9wZG93bi1mYWxsYmFjay1ib3JkZXI7IC8vIElFOCBmYWxsYmFja1xuICBib3JkZXI6IDFweCBzb2xpZCBAZHJvcGRvd24tYm9yZGVyO1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1iYXNlO1xuICAuYm94LXNoYWRvdygwIDZweCAxMnB4IHJnYmEoMCwwLDAsLjE3NSkpO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuXG4gIC8vIEFsaWducyB0aGUgZHJvcGRvd24gbWVudSB0byByaWdodFxuICAvL1xuICAvLyBEZXByZWNhdGVkIGFzIG9mIDMuMS4wIGluIGZhdm9yIG9mIGAuZHJvcGRvd24tbWVudS1bZGlyXWBcbiAgJi5wdWxsLXJpZ2h0IHtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG5cbiAgLy8gRGl2aWRlcnMgKGJhc2ljYWxseSBhbiBocikgd2l0aGluIHRoZSBkcm9wZG93blxuICAuZGl2aWRlciB7XG4gICAgLm5hdi1kaXZpZGVyKEBkcm9wZG93bi1kaXZpZGVyLWJnKTtcbiAgfVxuXG4gIC8vIExpbmtzIHdpdGhpbiB0aGUgZHJvcGRvd24gbWVudVxuICA+IGxpID4gYSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogM3B4IDIwcHg7XG4gICAgY2xlYXI6IGJvdGg7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LWJhc2U7XG4gICAgY29sb3I6IEBkcm9wZG93bi1saW5rLWNvbG9yO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7IC8vIHByZXZlbnQgbGlua3MgZnJvbSByYW5kb21seSBicmVha2luZyBvbnRvIG5ldyBsaW5lc1xuICB9XG59XG5cbi8vIEhvdmVyL0ZvY3VzIHN0YXRlXG4uZHJvcGRvd24tbWVudSA+IGxpID4gYSB7XG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogQGRyb3Bkb3duLWxpbmstaG92ZXItY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGRyb3Bkb3duLWxpbmstaG92ZXItYmc7XG4gIH1cbn1cblxuLy8gQWN0aXZlIHN0YXRlXG4uZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhIHtcbiAgJixcbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6IEBkcm9wZG93bi1saW5rLWFjdGl2ZS1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgb3V0bGluZTogMDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAZHJvcGRvd24tbGluay1hY3RpdmUtYmc7XG4gIH1cbn1cblxuLy8gRGlzYWJsZWQgc3RhdGVcbi8vXG4vLyBHcmF5IG91dCB0ZXh0IGFuZCBlbnN1cmUgdGhlIGhvdmVyL2ZvY3VzIHN0YXRlIHJlbWFpbnMgZ3JheVxuXG4uZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGEge1xuICAmLFxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBjb2xvcjogQGRyb3Bkb3duLWxpbmstZGlzYWJsZWQtY29sb3I7XG4gIH1cblxuICAvLyBOdWtlIGhvdmVyL2ZvY3VzIGVmZmVjdHNcbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IC8vIFJlbW92ZSBDU1MgZ3JhZGllbnRcbiAgICAucmVzZXQtZmlsdGVyKCk7XG4gICAgY3Vyc29yOiBAY3Vyc29yLWRpc2FibGVkO1xuICB9XG59XG5cbi8vIE9wZW4gc3RhdGUgZm9yIHRoZSBkcm9wZG93blxuLm9wZW4ge1xuICAvLyBTaG93IHRoZSBtZW51XG4gID4gLmRyb3Bkb3duLW1lbnUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSBvdXRsaW5lIHdoZW4gOmZvY3VzIGlzIHRyaWdnZXJlZFxuICA+IGEge1xuICAgIG91dGxpbmU6IDA7XG4gIH1cbn1cblxuLy8gTWVudSBwb3NpdGlvbmluZ1xuLy9cbi8vIEFkZCBleHRyYSBjbGFzcyB0byBgLmRyb3Bkb3duLW1lbnVgIHRvIGZsaXAgdGhlIGFsaWdubWVudCBvZiB0aGUgZHJvcGRvd25cbi8vIG1lbnUgd2l0aCB0aGUgcGFyZW50LlxuLmRyb3Bkb3duLW1lbnUtcmlnaHQge1xuICBsZWZ0OiBhdXRvOyAvLyBSZXNldCB0aGUgZGVmYXVsdCBmcm9tIGAuZHJvcGRvd24tbWVudWBcbiAgcmlnaHQ6IDA7XG59XG4vLyBXaXRoIHYzLCB3ZSBlbmFibGVkIGF1dG8tZmxpcHBpbmcgaWYgeW91IGhhdmUgYSBkcm9wZG93biB3aXRoaW4gYSByaWdodFxuLy8gYWxpZ25lZCBuYXYgY29tcG9uZW50LiBUbyBlbmFibGUgdGhlIHVuZG9pbmcgb2YgdGhhdCwgd2UgcHJvdmlkZSBhbiBvdmVycmlkZVxuLy8gdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBkcm9wZG93biBtZW51IGFsaWdubWVudC5cbi8vXG4vLyBUaGlzIGlzIG9ubHkgZm9yIGxlZnQtYWxpZ25pbmcgYSBkcm9wZG93biBtZW51IHdpdGhpbiBhIGAubmF2YmFyLXJpZ2h0YCBvclxuLy8gYC5wdWxsLXJpZ2h0YCBuYXYgY29tcG9uZW50LlxuLmRyb3Bkb3duLW1lbnUtbGVmdCB7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiBhdXRvO1xufVxuXG4vLyBEcm9wZG93biBzZWN0aW9uIGhlYWRlcnNcbi5kcm9wZG93bi1oZWFkZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogM3B4IDIwcHg7XG4gIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1zbWFsbDtcbiAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xuICBjb2xvcjogQGRyb3Bkb3duLWhlYWRlci1jb2xvcjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgLy8gYXMgd2l0aCA+IGxpID4gYVxufVxuXG4vLyBCYWNrZHJvcCB0byBjYXRjaCBib2R5IGNsaWNrcyBvbiBtb2JpbGUsIGV0Yy5cbi5kcm9wZG93bi1iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiAoQHppbmRleC1kcm9wZG93biAtIDEwKTtcbn1cblxuLy8gUmlnaHQgYWxpZ25lZCBkcm9wZG93bnNcbi5wdWxsLXJpZ2h0ID4gLmRyb3Bkb3duLW1lbnUge1xuICByaWdodDogMDtcbiAgbGVmdDogYXV0bztcbn1cblxuLy8gQWxsb3cgZm9yIGRyb3Bkb3ducyB0byBnbyBib3R0b20gdXAgKGFrYSwgZHJvcHVwLW1lbnUpXG4vL1xuLy8gSnVzdCBhZGQgLmRyb3B1cCBhZnRlciB0aGUgc3RhbmRhcmQgLmRyb3Bkb3duIGNsYXNzIGFuZCB5b3UncmUgc2V0LCBicm8uXG4vLyBUT0RPOiBhYnN0cmFjdCB0aGlzIHNvIHRoYXQgdGhlIG5hdmJhciBmaXhlZCBzdHlsZXMgYXJlIG5vdCBwbGFjZWQgaGVyZT9cblxuLmRyb3B1cCxcbi5uYXZiYXItZml4ZWQtYm90dG9tIC5kcm9wZG93biB7XG4gIC8vIFJldmVyc2UgdGhlIGNhcmV0XG4gIC5jYXJldCB7XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgICBib3JkZXItYm90dG9tOiBAY2FyZXQtd2lkdGgtYmFzZSBkYXNoZWQ7XG4gICAgYm9yZGVyLWJvdHRvbTogQGNhcmV0LXdpZHRoLWJhc2Ugc29saWQgflwiXFw5XCI7IC8vIElFOFxuICAgIGNvbnRlbnQ6IFwiXCI7XG4gIH1cbiAgLy8gRGlmZmVyZW50IHBvc2l0aW9uaW5nIGZvciBib3R0b20gdXAgbWVudVxuICAuZHJvcGRvd24tbWVudSB7XG4gICAgdG9wOiBhdXRvO1xuICAgIGJvdHRvbTogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAycHg7XG4gIH1cbn1cblxuXG4vLyBDb21wb25lbnQgYWxpZ25tZW50XG4vL1xuLy8gUmVpdGVyYXRlIHBlciBuYXZiYXIubGVzcyBhbmQgdGhlIG1vZGlmaWVkIGNvbXBvbmVudCBhbGlnbm1lbnQgdGhlcmUuXG5cbkBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gIC5uYXZiYXItcmlnaHQge1xuICAgIC5kcm9wZG93bi1tZW51IHtcbiAgICAgIC5kcm9wZG93bi1tZW51LXJpZ2h0KCk7XG4gICAgfVxuICAgIC8vIE5lY2Vzc2FyeSBmb3Igb3ZlcnJpZGVzIG9mIHRoZSBkZWZhdWx0IHJpZ2h0IGFsaWduZWQgbWVudS5cbiAgICAvLyBXaWxsIHJlbW92ZSBjb21lIHY0IGluIGFsbCBsaWtlbGlob29kLlxuICAgIC5kcm9wZG93bi1tZW51LWxlZnQge1xuICAgICAgLmRyb3Bkb3duLW1lbnUtbGVmdCgpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gSG9yaXpvbnRhbCBkaXZpZGVyc1xuLy9cbi8vIERpdmlkZXJzIChiYXNpY2FsbHkgYW4gaHIpIHdpdGhpbiBkcm9wZG93bnMgYW5kIG5hdiBsaXN0c1xuXG4ubmF2LWRpdmlkZXIoQGNvbG9yOiAjZTVlNWU1KSB7XG4gIGhlaWdodDogMXB4O1xuICBtYXJnaW46ICgoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMikgLSAxKSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAY29sb3I7XG59XG4iLCIvLyBSZXNldCBmaWx0ZXJzIGZvciBJRVxuLy9cbi8vIFdoZW4geW91IG5lZWQgdG8gcmVtb3ZlIGEgZ3JhZGllbnQgYmFja2dyb3VuZCwgZG8gbm90IGZvcmdldCB0byB1c2UgdGhpcyB0byByZXNldFxuLy8gdGhlIElFIGZpbHRlciBmb3IgSUU5IGFuZCBiZWxvdy5cblxuLnJlc2V0LWZpbHRlcigpIHtcbiAgZmlsdGVyOiBlKCUoXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZCA9IGZhbHNlKVwiKSk7XG59XG4iLCIvL1xuLy8gQnV0dG9uIGdyb3Vwc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTWFrZSB0aGUgZGl2IGJlaGF2ZSBsaWtlIGEgYnV0dG9uXG4uYnRuLWdyb3VwLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyAvLyBtYXRjaCAuYnRuIGFsaWdubWVudCBnaXZlbiBmb250LXNpemUgaGFjayBhYm92ZVxuICA+IC5idG4ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBmbG9hdDogbGVmdDtcbiAgICAvLyBCcmluZyB0aGUgXCJhY3RpdmVcIiBidXR0b24gdG8gdGhlIGZyb250XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzLFxuICAgICY6YWN0aXZlLFxuICAgICYuYWN0aXZlIHtcbiAgICAgIHotaW5kZXg6IDI7XG4gICAgfVxuICB9XG59XG5cbi8vIFByZXZlbnQgZG91YmxlIGJvcmRlcnMgd2hlbiBidXR0b25zIGFyZSBuZXh0IHRvIGVhY2ggb3RoZXJcbi5idG4tZ3JvdXAge1xuICAuYnRuICsgLmJ0bixcbiAgLmJ0biArIC5idG4tZ3JvdXAsXG4gIC5idG4tZ3JvdXAgKyAuYnRuLFxuICAuYnRuLWdyb3VwICsgLmJ0bi1ncm91cCB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gIH1cbn1cblxuLy8gT3B0aW9uYWw6IEdyb3VwIG11bHRpcGxlIGJ1dHRvbiBncm91cHMgdG9nZXRoZXIgZm9yIGEgdG9vbGJhclxuLmJ0bi10b29sYmFyIHtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7IC8vIE9mZnNldCB0aGUgZmlyc3QgY2hpbGQncyBtYXJnaW5cbiAgJjpleHRlbmQoLmNsZWFyZml4IGFsbCk7XG5cbiAgLmJ0bixcbiAgLmJ0bi1ncm91cCxcbiAgLmlucHV0LWdyb3VwIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxuICA+IC5idG4sXG4gID4gLmJ0bi1ncm91cCxcbiAgPiAuaW5wdXQtZ3JvdXAge1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gIH1cbn1cblxuLmJ0bi1ncm91cCA+IC5idG46bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSkge1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG4vLyBTZXQgY29ybmVycyBpbmRpdmlkdWFsIGJlY2F1c2Ugc29tZXRpbWVzIGEgc2luZ2xlIGJ1dHRvbiBjYW4gYmUgaW4gYSAuYnRuLWdyb3VwIGFuZCB3ZSBuZWVkIDpmaXJzdC1jaGlsZCBhbmQgOmxhc3QtY2hpbGQgdG8gYm90aCBtYXRjaFxuLmJ0bi1ncm91cCA+IC5idG46Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tbGVmdDogMDtcbiAgJjpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7XG4gICAgLmJvcmRlci1yaWdodC1yYWRpdXMoMCk7XG4gIH1cbn1cbi8vIE5lZWQgLmRyb3Bkb3duLXRvZ2dsZSBzaW5jZSA6bGFzdC1jaGlsZCBkb2Vzbid0IGFwcGx5IGdpdmVuIGEgLmRyb3Bkb3duLW1lbnUgaW1tZWRpYXRlbHkgYWZ0ZXIgaXRcbi5idG4tZ3JvdXAgPiAuYnRuOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCksXG4uYnRuLWdyb3VwID4gLmRyb3Bkb3duLXRvZ2dsZTpub3QoOmZpcnN0LWNoaWxkKSB7XG4gIC5ib3JkZXItbGVmdC1yYWRpdXMoMCk7XG59XG5cbi8vIEN1c3RvbSBlZGl0cyBmb3IgaW5jbHVkaW5nIGJ0bi1ncm91cHMgd2l0aGluIGJ0bi1ncm91cHMgKHVzZWZ1bCBmb3IgaW5jbHVkaW5nIGRyb3Bkb3duIGJ1dHRvbnMgd2l0aGluIGEgYnRuLWdyb3VwKVxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXAge1xuICBmbG9hdDogbGVmdDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkge1xuICA+IC5idG46bGFzdC1jaGlsZCxcbiAgPiAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICAuYm9yZGVyLXJpZ2h0LXJhZGl1cygwKTtcbiAgfVxufVxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXA6bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG46Zmlyc3QtY2hpbGQge1xuICAuYm9yZGVyLWxlZnQtcmFkaXVzKDApO1xufVxuXG4vLyBPbiBhY3RpdmUgYW5kIG9wZW4sIGRvbid0IHNob3cgb3V0bGluZVxuLmJ0bi1ncm91cCAuZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZSxcbi5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgb3V0bGluZTogMDtcbn1cblxuXG4vLyBTaXppbmdcbi8vXG4vLyBSZW1peCB0aGUgZGVmYXVsdCBidXR0b24gc2l6aW5nIGNsYXNzZXMgaW50byBuZXcgb25lcyBmb3IgZWFzaWVyIG1hbmlwdWxhdGlvbi5cblxuLmJ0bi1ncm91cC14cyA+IC5idG4geyAmOmV4dGVuZCguYnRuLXhzKTsgfVxuLmJ0bi1ncm91cC1zbSA+IC5idG4geyAmOmV4dGVuZCguYnRuLXNtKTsgfVxuLmJ0bi1ncm91cC1sZyA+IC5idG4geyAmOmV4dGVuZCguYnRuLWxnKTsgfVxuXG5cbi8vIFNwbGl0IGJ1dHRvbiBkcm9wZG93bnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gR2l2ZSB0aGUgbGluZSBiZXR3ZWVuIGJ1dHRvbnMgc29tZSBkZXB0aFxuLmJ0bi1ncm91cCA+IC5idG4gKyAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWxnICsgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIHBhZGRpbmctbGVmdDogMTJweDtcbiAgcGFkZGluZy1yaWdodDogMTJweDtcbn1cblxuLy8gVGhlIGNsaWNrYWJsZSBidXR0b24gZm9yIHRvZ2dsaW5nIHRoZSBtZW51XG4vLyBSZW1vdmUgdGhlIGdyYWRpZW50IGFuZCBzZXQgdGhlIHNhbWUgaW5zZXQgc2hhZG93IGFzIHRoZSA6YWN0aXZlIHN0YXRlXG4uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIC5ib3gtc2hhZG93KGluc2V0IDAgM3B4IDVweCByZ2JhKDAsMCwwLC4xMjUpKTtcblxuICAvLyBTaG93IG5vIHNoYWRvdyBmb3IgYC5idG4tbGlua2Agc2luY2UgaXQgaGFzIG5vIG90aGVyIGJ1dHRvbiBzdHlsZXMuXG4gICYuYnRuLWxpbmsge1xuICAgIC5ib3gtc2hhZG93KG5vbmUpO1xuICB9XG59XG5cblxuLy8gUmVwb3NpdGlvbiB0aGUgY2FyZXRcbi5idG4gLmNhcmV0IHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG4vLyBDYXJldHMgaW4gb3RoZXIgYnV0dG9uIHNpemVzXG4uYnRuLWxnIC5jYXJldCB7XG4gIGJvcmRlci13aWR0aDogQGNhcmV0LXdpZHRoLWxhcmdlIEBjYXJldC13aWR0aC1sYXJnZSAwO1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xufVxuLy8gVXBzaWRlIGRvd24gY2FyZXRzIGZvciAuZHJvcHVwXG4uZHJvcHVwIC5idG4tbGcgLmNhcmV0IHtcbiAgYm9yZGVyLXdpZHRoOiAwIEBjYXJldC13aWR0aC1sYXJnZSBAY2FyZXQtd2lkdGgtbGFyZ2U7XG59XG5cblxuLy8gVmVydGljYWwgYnV0dG9uIGdyb3Vwc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsIHtcbiAgPiAuYnRuLFxuICA+IC5idG4tZ3JvdXAsXG4gID4gLmJ0bi1ncm91cCA+IC5idG4ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZsb2F0OiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxuXG4gIC8vIENsZWFyIGZsb2F0cyBzbyBkcm9wZG93biBtZW51cyBjYW4gYmUgcHJvcGVybHkgcGxhY2VkXG4gID4gLmJ0bi1ncm91cCB7XG4gICAgJjpleHRlbmQoLmNsZWFyZml4IGFsbCk7XG4gICAgPiAuYnRuIHtcbiAgICAgIGZsb2F0OiBub25lO1xuICAgIH1cbiAgfVxuXG4gID4gLmJ0biArIC5idG4sXG4gID4gLmJ0biArIC5idG4tZ3JvdXAsXG4gID4gLmJ0bi1ncm91cCArIC5idG4sXG4gID4gLmJ0bi1ncm91cCArIC5idG4tZ3JvdXAge1xuICAgIG1hcmdpbi10b3A6IC0xcHg7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbn1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4ge1xuICAmOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gIH1cbiAgJjpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogQGJ0bi1ib3JkZXItcmFkaXVzLWJhc2U7XG4gICAgLmJvcmRlci1ib3R0b20tcmFkaXVzKDApO1xuICB9XG4gICY6bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogQGJ0bi1ib3JkZXItcmFkaXVzLWJhc2U7XG4gICAgLmJvcmRlci10b3AtcmFkaXVzKDApO1xuICB9XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgPiAuYnRuOmxhc3QtY2hpbGQsXG4gID4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgLmJvcmRlci1ib3R0b20tcmFkaXVzKDApO1xuICB9XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIC5ib3JkZXItdG9wLXJhZGl1cygwKTtcbn1cblxuXG4vLyBKdXN0aWZpZWQgYnV0dG9uIGdyb3Vwc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uYnRuLWdyb3VwLWp1c3RpZmllZCB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICB3aWR0aDogMTAwJTtcbiAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbiAgPiAuYnRuLFxuICA+IC5idG4tZ3JvdXAge1xuICAgIGZsb2F0OiBub25lO1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgd2lkdGg6IDElO1xuICB9XG4gID4gLmJ0bi1ncm91cCAuYnRuIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gID4gLmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSB7XG4gICAgbGVmdDogYXV0bztcbiAgfVxufVxuXG5cbi8vIENoZWNrYm94IGFuZCByYWRpbyBvcHRpb25zXG4vL1xuLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGUgYnJvd3NlcidzIGZvcm0gdmFsaWRhdGlvbiBmZWVkYmFjaywgcG93ZXJlZCBieSB0aGVcbi8vIGByZXF1aXJlZGAgYXR0cmlidXRlLCB3ZSBoYXZlIHRvIFwiaGlkZVwiIHRoZSBpbnB1dHMgdmlhIGBjbGlwYC4gV2UgY2Fubm90IHVzZVxuLy8gYGRpc3BsYXk6IG5vbmU7YCBvciBgdmlzaWJpbGl0eTogaGlkZGVuO2AgYXMgdGhhdCBhbHNvIGhpZGVzIHRoZSBwb3BvdmVyLlxuLy8gU2ltcGx5IHZpc3VhbGx5IGhpZGluZyB0aGUgaW5wdXRzIHZpYSBgb3BhY2l0eWAgd291bGQgbGVhdmUgdGhlbSBjbGlja2FibGUgaW5cbi8vIGNlcnRhaW4gY2FzZXMgd2hpY2ggaXMgcHJldmVudGVkIGJ5IHVzaW5nIGBjbGlwYCBhbmQgYHBvaW50ZXItZXZlbnRzYC5cbi8vIFRoaXMgd2F5LCB3ZSBlbnN1cmUgYSBET00gZWxlbWVudCBpcyB2aXNpYmxlIHRvIHBvc2l0aW9uIHRoZSBwb3BvdmVyIGZyb20uXG4vL1xuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9wdWxsLzEyNzk0IGFuZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL3B1bGwvMTQ1NTkgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbltkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIl0ge1xuICA+IC5idG4sXG4gID4gLmJ0bi1ncm91cCA+IC5idG4ge1xuICAgIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbiAgICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgY2xpcDogcmVjdCgwLDAsMCwwKTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gU2luZ2xlIHNpZGUgYm9yZGVyLXJhZGl1c1xuXG4uYm9yZGVyLXRvcC1yYWRpdXMoQHJhZGl1cykge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogQHJhZGl1cztcbiAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IEByYWRpdXM7XG59XG4uYm9yZGVyLXJpZ2h0LXJhZGl1cyhAcmFkaXVzKSB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiBAcmFkaXVzO1xuICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogQHJhZGl1cztcbn1cbi5ib3JkZXItYm90dG9tLXJhZGl1cyhAcmFkaXVzKSB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiBAcmFkaXVzO1xuICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogQHJhZGl1cztcbn1cbi5ib3JkZXItbGVmdC1yYWRpdXMoQHJhZGl1cykge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiBAcmFkaXVzO1xuICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBAcmFkaXVzO1xufVxuIiwiLy9cbi8vIElucHV0IGdyb3Vwc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQmFzZSBzdHlsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi5pbnB1dC1ncm91cCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgLy8gRm9yIGRyb3Bkb3duc1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsgLy8gcHJldmVudCBpbnB1dCBncm91cHMgZnJvbSBpbmhlcml0aW5nIGJvcmRlciBzdHlsZXMgZnJvbSB0YWJsZSBjZWxscyB3aGVuIHBsYWNlZCB3aXRoaW4gYSB0YWJsZVxuXG4gIC8vIFVuZG8gcGFkZGluZyBhbmQgZmxvYXQgb2YgZ3JpZCBjbGFzc2VzXG4gICZbY2xhc3MqPVwiY29sLVwiXSB7XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gIH1cblxuICAuZm9ybS1jb250cm9sIHtcbiAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaW5wdXQgaXMgYWx3YXlzIGFib3ZlIHRoZSAqYXBwZW5kZWQqIGFkZG9uIGJ1dHRvbiBmb3JcbiAgICAvLyBwcm9wZXIgYm9yZGVyIGNvbG9ycy5cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMjtcblxuICAgIC8vIElFOSBmdWJhcnMgdGhlIHBsYWNlaG9sZGVyIGF0dHJpYnV0ZSBpbiB0ZXh0IGlucHV0cyBhbmQgdGhlIGFycm93cyBvblxuICAgIC8vIHNlbGVjdCBlbGVtZW50cyBpbiBpbnB1dCBncm91cHMuIFRvIGZpeCBpdCwgd2UgZmxvYXQgdGhlIGlucHV0LiBEZXRhaWxzOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTE1NjEjaXNzdWVjb21tZW50LTI4OTM2ODU1XG4gICAgZmxvYXQ6IGxlZnQ7XG5cbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5cbi8vIFNpemluZyBvcHRpb25zXG4vL1xuLy8gUmVtaXggdGhlIGRlZmF1bHQgZm9ybSBjb250cm9sIHNpemluZyBjbGFzc2VzIGludG8gbmV3IG9uZXMgZm9yIGVhc2llclxuLy8gbWFuaXB1bGF0aW9uLlxuXG4uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4ge1xuICAuaW5wdXQtbGcoKTtcbn1cbi5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biB7XG4gIC5pbnB1dC1zbSgpO1xufVxuXG5cbi8vIERpc3BsYXkgYXMgdGFibGUtY2VsbFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWJ0bixcbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sIHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcblxuICAmOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gIH1cbn1cbi8vIEFkZG9uIGFuZCBhZGRvbiB3cmFwcGVyIGZvciBidXR0b25zXG4uaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtYnRuIHtcbiAgd2lkdGg6IDElO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyAvLyBNYXRjaCB0aGUgaW5wdXRzXG59XG5cbi8vIFRleHQgaW5wdXQgZ3JvdXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4uaW5wdXQtZ3JvdXAtYWRkb24ge1xuICBwYWRkaW5nOiBAcGFkZGluZy1iYXNlLXZlcnRpY2FsIEBwYWRkaW5nLWJhc2UtaG9yaXpvbnRhbDtcbiAgZm9udC1zaXplOiBAZm9udC1zaXplLWJhc2U7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogQGlucHV0LWNvbG9yO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IEBpbnB1dC1ncm91cC1hZGRvbi1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgQGlucHV0LWdyb3VwLWFkZG9uLWJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtYmFzZTtcblxuICAvLyBTaXppbmdcbiAgJi5pbnB1dC1zbSB7XG4gICAgcGFkZGluZzogQHBhZGRpbmctc21hbGwtdmVydGljYWwgQHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbDtcbiAgICBmb250LXNpemU6IEBmb250LXNpemUtc21hbGw7XG4gICAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtc21hbGw7XG4gIH1cbiAgJi5pbnB1dC1sZyB7XG4gICAgcGFkZGluZzogQHBhZGRpbmctbGFyZ2UtdmVydGljYWwgQHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbDtcbiAgICBmb250LXNpemU6IEBmb250LXNpemUtbGFyZ2U7XG4gICAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtbGFyZ2U7XG4gIH1cblxuICAvLyBOdWtlIGRlZmF1bHQgbWFyZ2lucyBmcm9tIGNoZWNrYm94ZXMgYW5kIHJhZGlvcyB0byB2ZXJ0aWNhbGx5IGNlbnRlciB3aXRoaW4uXG4gIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbiAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG59XG5cbi8vIFJlc2V0IHJvdW5kZWQgY29ybmVyc1xuLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2w6Zmlyc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYWRkb246Zmlyc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLWdyb3VwID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuZHJvcGRvd24tdG9nZ2xlLFxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bjpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4tZ3JvdXA6bm90KDpsYXN0LWNoaWxkKSA+IC5idG4ge1xuICAuYm9yZGVyLXJpZ2h0LXJhZGl1cygwKTtcbn1cbi5pbnB1dC1ncm91cC1hZGRvbjpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1yaWdodDogMDtcbn1cbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmxhc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZCxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5kcm9wZG93bi10b2dnbGUsXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKSxcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0biB7XG4gIC5ib3JkZXItbGVmdC1yYWRpdXMoMCk7XG59XG4uaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1sZWZ0OiAwO1xufVxuXG4vLyBCdXR0b24gaW5wdXQgZ3JvdXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4uaW5wdXQtZ3JvdXAtYnRuIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBKYW5raWx5IHByZXZlbnQgaW5wdXQgYnV0dG9uIGdyb3VwcyBmcm9tIHdyYXBwaW5nIHdpdGggYHdoaXRlLXNwYWNlYCBhbmRcbiAgLy8gYGZvbnQtc2l6ZWAgaW4gY29tYmluYXRpb24gd2l0aCBgaW5saW5lLWJsb2NrYCBvbiBidXR0b25zLlxuICBmb250LXNpemU6IDA7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgLy8gTmVnYXRpdmUgbWFyZ2luIGZvciBzcGFjaW5nLCBwb3NpdGlvbiBmb3IgYnJpbmdpbmcgaG92ZXJlZC9mb2N1c2VkL2FjdGl2ZWRcbiAgLy8gZWxlbWVudCBhYm92ZSB0aGUgc2libGluZ3MuXG4gID4gLmJ0biB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICsgLmJ0biB7XG4gICAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgICB9XG4gICAgLy8gQnJpbmcgdGhlIFwiYWN0aXZlXCIgYnV0dG9uIHRvIHRoZSBmcm9udFxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyxcbiAgICAmOmFjdGl2ZSB7XG4gICAgICB6LWluZGV4OiAyO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5lZ2F0aXZlIG1hcmdpbiB0byBvbmx5IGhhdmUgYSAxcHggYm9yZGVyIGJldHdlZW4gdGhlIHR3b1xuICAmOmZpcnN0LWNoaWxkIHtcbiAgICA+IC5idG4sXG4gICAgPiAuYnRuLWdyb3VwIHtcbiAgICAgIG1hcmdpbi1yaWdodDogLTFweDtcbiAgICB9XG4gIH1cbiAgJjpsYXN0LWNoaWxkIHtcbiAgICA+IC5idG4sXG4gICAgPiAuYnRuLWdyb3VwIHtcbiAgICAgIHotaW5kZXg6IDI7XG4gICAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vXG4vLyBOYXZzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIEJhc2UgY2xhc3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5uYXYge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBwYWRkaW5nLWxlZnQ6IDA7IC8vIE92ZXJyaWRlIGRlZmF1bHQgdWwvb2xcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgJjpleHRlbmQoLmNsZWFyZml4IGFsbCk7XG5cbiAgPiBsaSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgPiBhIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZzogQG5hdi1saW5rLXBhZGRpbmc7XG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdi1saW5rLWhvdmVyLWJnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpc2FibGVkIHN0YXRlIHNldHMgdGV4dCB0byBncmF5IGFuZCBudWtlcyBob3Zlci90YWIgZWZmZWN0c1xuICAgICYuZGlzYWJsZWQgPiBhIHtcbiAgICAgIGNvbG9yOiBAbmF2LWRpc2FibGVkLWxpbmstY29sb3I7XG5cbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6IEBuYXYtZGlzYWJsZWQtbGluay1ob3Zlci1jb2xvcjtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgY3Vyc29yOiBAY3Vyc29yLWRpc2FibGVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE9wZW4gZHJvcGRvd25zXG4gIC5vcGVuID4gYSB7XG4gICAgJixcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdi1saW5rLWhvdmVyLWJnO1xuICAgICAgYm9yZGVyLWNvbG9yOiBAbGluay1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAvLyBOYXYgZGl2aWRlcnMgKGRlcHJlY2F0ZWQgd2l0aCB2My4wLjEpXG4gIC8vXG4gIC8vIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGluIHYzIHdpdGggdGhlIGRyb3BwaW5nIG9mIGAubmF2LWxpc3RgLCBidXRcbiAgLy8gd2UgbWlzc2VkIGl0LiBXZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCB0aGlzIGFueXdoZXJlLCBidXQgaW4gdGhlIGludGVyZXN0XG4gIC8vIG9mIG1haW50YWluaW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaW4gY2FzZSB5b3UgdXNlIGl0LCBpdCdzIGRlcHJlY2F0ZWQuXG4gIC5uYXYtZGl2aWRlciB7XG4gICAgLm5hdi1kaXZpZGVyKCk7XG4gIH1cblxuICAvLyBQcmV2ZW50IElFOCBmcm9tIG1pc3BsYWNpbmcgaW1nc1xuICAvL1xuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2g1YnAvaHRtbDUtYm9pbGVycGxhdGUvaXNzdWVzLzk4NCNpc3N1ZWNvbW1lbnQtMzk4NTk4OVxuICA+IGxpID4gYSA+IGltZyB7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuICB9XG59XG5cblxuLy8gVGFic1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBHaXZlIHRoZSB0YWJzIHNvbWV0aGluZyB0byBzaXQgb25cbi5uYXYtdGFicyB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAbmF2LXRhYnMtYm9yZGVyLWNvbG9yO1xuICA+IGxpIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICAvLyBNYWtlIHRoZSBsaXN0LWl0ZW1zIG92ZXJsYXkgdGhlIGJvdHRvbSBib3JkZXJcbiAgICBtYXJnaW4tYm90dG9tOiAtMXB4O1xuXG4gICAgLy8gQWN0dWFsIHRhYnMgKGFzIGxpbmtzKVxuICAgID4gYSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtYmFzZSBAYm9yZGVyLXJhZGl1cy1iYXNlIDAgMDtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6IEBuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvciBAbmF2LXRhYnMtbGluay1ob3Zlci1ib3JkZXItY29sb3IgQG5hdi10YWJzLWJvcmRlci1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBY3RpdmUgc3RhdGUsIGFuZCBpdHMgOmhvdmVyIHRvIG92ZXJyaWRlIG5vcm1hbCA6aG92ZXJcbiAgICAmLmFjdGl2ZSA+IGEge1xuICAgICAgJixcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6IEBuYXYtdGFicy1hY3RpdmUtbGluay1ob3Zlci1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdi10YWJzLWFjdGl2ZS1saW5rLWhvdmVyLWJnO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBAbmF2LXRhYnMtYWN0aXZlLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yO1xuICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBwdWxsaW5nIHRoaXMgaW4gbWFpbmx5IGZvciBsZXNzIHNob3J0aGFuZFxuICAmLm5hdi1qdXN0aWZpZWQge1xuICAgIC5uYXYtanVzdGlmaWVkKCk7XG4gICAgLm5hdi10YWJzLWp1c3RpZmllZCgpO1xuICB9XG59XG5cblxuLy8gUGlsbHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi5uYXYtcGlsbHMge1xuICA+IGxpIHtcbiAgICBmbG9hdDogbGVmdDtcblxuICAgIC8vIExpbmtzIHJlbmRlcmVkIGFzIHBpbGxzXG4gICAgPiBhIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IEBuYXYtcGlsbHMtYm9yZGVyLXJhZGl1cztcbiAgICB9XG4gICAgKyBsaSB7XG4gICAgICBtYXJnaW4tbGVmdDogMnB4O1xuICAgIH1cblxuICAgIC8vIEFjdGl2ZSBzdGF0ZVxuICAgICYuYWN0aXZlID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogQG5hdi1waWxscy1hY3RpdmUtbGluay1ob3Zlci1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdi1waWxscy1hY3RpdmUtbGluay1ob3Zlci1iZztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG4vLyBTdGFja2VkIHBpbGxzXG4ubmF2LXN0YWNrZWQge1xuICA+IGxpIHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICArIGxpIHtcbiAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwOyAvLyBubyBuZWVkIGZvciB0aGlzIGdhcCBiZXR3ZWVuIG5hdiBpdGVtc1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIE5hdiB2YXJpYXRpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBKdXN0aWZpZWQgbmF2IGxpbmtzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5uYXYtanVzdGlmaWVkIHtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgPiBsaSB7XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgPiBhIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICB9XG4gIH1cblxuICA+IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSB7XG4gICAgdG9wOiBhdXRvO1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cblxuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIHtcbiAgICA+IGxpIHtcbiAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICB3aWR0aDogMSU7XG4gICAgICA+IGEge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBNb3ZlIGJvcmRlcnMgdG8gYW5jaG9ycyBpbnN0ZWFkIG9mIGJvdHRvbSBvZiBsaXN0XG4vL1xuLy8gTWl4aW4gZm9yIGFkZGluZyBvbiB0b3AgdGhlIHNoYXJlZCBgLm5hdi1qdXN0aWZpZWRgIHN0eWxlcyBmb3Igb3VyIHRhYnNcbi5uYXYtdGFicy1qdXN0aWZpZWQge1xuICBib3JkZXItYm90dG9tOiAwO1xuXG4gID4gbGkgPiBhIHtcbiAgICAvLyBPdmVycmlkZSBtYXJnaW4gZnJvbSAubmF2LXRhYnNcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtYmFzZTtcbiAgfVxuXG4gID4gLmFjdGl2ZSA+IGEsXG4gID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4gID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIEBuYXYtdGFicy1qdXN0aWZpZWQtbGluay1ib3JkZXItY29sb3I7XG4gIH1cblxuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIHtcbiAgICA+IGxpID4gYSB7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQG5hdi10YWJzLWp1c3RpZmllZC1saW5rLWJvcmRlci1jb2xvcjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWJhc2UgQGJvcmRlci1yYWRpdXMtYmFzZSAwIDA7XG4gICAgfVxuICAgID4gLmFjdGl2ZSA+IGEsXG4gICAgPiAuYWN0aXZlID4gYTpob3ZlcixcbiAgICA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IEBuYXYtdGFicy1qdXN0aWZpZWQtYWN0aXZlLWxpbmstYm9yZGVyLWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIFRhYmJhYmxlIHRhYnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gSGlkZSB0YWJiYWJsZSBwYW5lcyB0byBzdGFydCwgc2hvdyB0aGVtIHdoZW4gYC5hY3RpdmVgXG4udGFiLWNvbnRlbnQge1xuICA+IC50YWItcGFuZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICA+IC5hY3RpdmUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5cblxuLy8gRHJvcGRvd25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNwZWNpZmljIGRyb3Bkb3duc1xuLm5hdi10YWJzIC5kcm9wZG93bi1tZW51IHtcbiAgLy8gbWFrZSBkcm9wZG93biBib3JkZXIgb3ZlcmxhcCB0YWIgYm9yZGVyXG4gIG1hcmdpbi10b3A6IC0xcHg7XG4gIC8vIFJlbW92ZSB0aGUgdG9wIHJvdW5kZWQgY29ybmVycyBoZXJlIHNpbmNlIHRoZXJlIGlzIGEgaGFyZCBlZGdlIGFib3ZlIHRoZSBtZW51XG4gIC5ib3JkZXItdG9wLXJhZGl1cygwKTtcbn1cbiIsIi8vXG4vLyBOYXZiYXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIFdyYXBwZXIgYW5kIGJhc2UgY2xhc3Ncbi8vXG4vLyBQcm92aWRlIGEgc3RhdGljIG5hdmJhciBmcm9tIHdoaWNoIHdlIGV4cGFuZCB0byBjcmVhdGUgZnVsbC13aWR0aCwgZml4ZWQsIGFuZFxuLy8gb3RoZXIgbmF2YmFyIHZhcmlhdGlvbnMuXG5cbi5uYXZiYXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1pbi1oZWlnaHQ6IEBuYXZiYXItaGVpZ2h0OyAvLyBFbnN1cmUgYSBuYXZiYXIgYWx3YXlzIHNob3dzIChlLmcuLCB3aXRob3V0IGEgLm5hdmJhci1icmFuZCBpbiBjb2xsYXBzZWQgbW9kZSlcbiAgbWFyZ2luLWJvdHRvbTogQG5hdmJhci1tYXJnaW4tYm90dG9tO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcblxuICAvLyBQcmV2ZW50IGZsb2F0cyBmcm9tIGJyZWFraW5nIHRoZSBuYXZiYXJcbiAgJjpleHRlbmQoLmNsZWFyZml4IGFsbCk7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6IEBncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBib3JkZXItcmFkaXVzOiBAbmF2YmFyLWJvcmRlci1yYWRpdXM7XG4gIH1cbn1cblxuXG4vLyBOYXZiYXIgaGVhZGluZ1xuLy9cbi8vIEdyb3VwcyBgLm5hdmJhci1icmFuZGAgYW5kIGAubmF2YmFyLXRvZ2dsZWAgaW50byBhIHNpbmdsZSBjb21wb25lbnQgZm9yIGVhc3lcbi8vIHN0eWxpbmcgb2YgcmVzcG9uc2l2ZSBhc3BlY3RzLlxuXG4ubmF2YmFyLWhlYWRlciB7XG4gICY6ZXh0ZW5kKC5jbGVhcmZpeCBhbGwpO1xuXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbn1cblxuXG4vLyBOYXZiYXIgY29sbGFwc2UgKGJvZHkpXG4vL1xuLy8gR3JvdXAgeW91ciBuYXZiYXIgY29udGVudCBpbnRvIHRoaXMgZm9yIGVhc3kgY29sbGFwc2luZyBhbmQgZXhwYW5kaW5nIGFjcm9zc1xuLy8gdmFyaW91cyBkZXZpY2Ugc2l6ZXMuIEJ5IGRlZmF1bHQsIHRoaXMgY29udGVudCBpcyBjb2xsYXBzZWQgd2hlbiA8NzY4cHgsIGJ1dFxuLy8gd2lsbCBleHBhbmQgcGFzdCB0aGF0IGZvciBhIGhvcml6b250YWwgZGlzcGxheS5cbi8vXG4vLyBUbyBzdGFydCAob24gbW9iaWxlIGRldmljZXMpIHRoZSBuYXZiYXIgbGlua3MsIGZvcm1zLCBhbmQgYnV0dG9ucyBhcmUgc3RhY2tlZFxuLy8gdmVydGljYWxseSBhbmQgaW5jbHVkZSBhIGBtYXgtaGVpZ2h0YCB0byBvdmVyZmxvdyBpbiBjYXNlIHlvdSBoYXZlIHRvbyBtdWNoXG4vLyBjb250ZW50IGZvciB0aGUgdXNlcidzIHZpZXdwb3J0LlxuXG4ubmF2YmFyLWNvbGxhcHNlIHtcbiAgb3ZlcmZsb3cteDogdmlzaWJsZTtcbiAgcGFkZGluZy1yaWdodDogQG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gIHBhZGRpbmctbGVmdDogIEBuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuMSk7XG4gICY6ZXh0ZW5kKC5jbGVhcmZpeCBhbGwpO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG5cbiAgJi5pbiB7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgfVxuXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgICBib3gtc2hhZG93OiBub25lO1xuXG4gICAgJi5jb2xsYXBzZSB7XG4gICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICAgICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMDsgLy8gT3ZlcnJpZGUgZGVmYXVsdCBzZXR0aW5nXG4gICAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgICYuaW4ge1xuICAgICAgb3ZlcmZsb3cteTogdmlzaWJsZTtcbiAgICB9XG5cbiAgICAvLyBVbmRvIHRoZSBjb2xsYXBzZSBzaWRlIHBhZGRpbmcgZm9yIG5hdmJhcnMgd2l0aCBjb250YWluZXJzIHRvIGVuc3VyZVxuICAgIC8vIGFsaWdubWVudCBvZiByaWdodC1hbGlnbmVkIGNvbnRlbnRzLlxuICAgIC5uYXZiYXItZml4ZWQtdG9wICYsXG4gICAgLm5hdmJhci1zdGF0aWMtdG9wICYsXG4gICAgLm5hdmJhci1maXhlZC1ib3R0b20gJiB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxufVxuXG4ubmF2YmFyLWZpeGVkLXRvcCxcbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgLm5hdmJhci1jb2xsYXBzZSB7XG4gICAgbWF4LWhlaWdodDogQG5hdmJhci1jb2xsYXBzZS1tYXgtaGVpZ2h0O1xuXG4gICAgQG1lZGlhIChtYXgtZGV2aWNlLXdpZHRoOiBAc2NyZWVuLXhzLW1pbikgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICBtYXgtaGVpZ2h0OiAyMDBweDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBCb3RoIG5hdmJhciBoZWFkZXIgYW5kIGNvbGxhcHNlXG4vL1xuLy8gV2hlbiBhIGNvbnRhaW5lciBpcyBwcmVzZW50LCBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBoZWFkZXIgYW5kIGNvbGxhcHNlLlxuXG4uY29udGFpbmVyLFxuLmNvbnRhaW5lci1mbHVpZCB7XG4gID4gLm5hdmJhci1oZWFkZXIsXG4gID4gLm5hdmJhci1jb2xsYXBzZSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAtQG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gICAgbWFyZ2luLWxlZnQ6ICAtQG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG5cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgbWFyZ2luLWxlZnQ6ICAwO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vXG4vLyBOYXZiYXIgYWxpZ25tZW50IG9wdGlvbnNcbi8vXG4vLyBEaXNwbGF5IHRoZSBuYXZiYXIgYWNyb3NzIHRoZSBlbnRpcmV0eSBvZiB0aGUgcGFnZSBvciBmaXhlZCBpdCB0byB0aGUgdG9wIG9yXG4vLyBib3R0b20gb2YgdGhlIHBhZ2UuXG5cbi8vIFN0YXRpYyB0b3AgKHVuZml4ZWQsIGJ1dCAxMDAlIHdpZGUpIG5hdmJhclxuLm5hdmJhci1zdGF0aWMtdG9wIHtcbiAgei1pbmRleDogQHppbmRleC1uYXZiYXI7XG4gIGJvcmRlci13aWR0aDogMCAwIDFweDtcblxuICBAbWVkaWEgKG1pbi13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gIH1cbn1cblxuLy8gRml4IHRoZSB0b3AvYm90dG9tIG5hdmJhcnMgd2hlbiBzY3JlZW4gcmVhbCBlc3RhdGUgc3VwcG9ydHMgaXRcbi5uYXZiYXItZml4ZWQtdG9wLFxuLm5hdmJhci1maXhlZC1ib3R0b20ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiBAemluZGV4LW5hdmJhci1maXhlZDtcblxuICAvLyBVbmRvIHRoZSByb3VuZGVkIGNvcm5lcnNcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG59XG4ubmF2YmFyLWZpeGVkLXRvcCB7XG4gIHRvcDogMDtcbiAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4O1xufVxuLm5hdmJhci1maXhlZC1ib3R0b20ge1xuICBib3R0b206IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7IC8vIG92ZXJyaWRlIC5uYXZiYXIgZGVmYXVsdHNcbiAgYm9yZGVyLXdpZHRoOiAxcHggMCAwO1xufVxuXG5cbi8vIEJyYW5kL3Byb2plY3QgbmFtZVxuXG4ubmF2YmFyLWJyYW5kIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHBhZGRpbmc6IEBuYXZiYXItcGFkZGluZy12ZXJ0aWNhbCBAbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgZm9udC1zaXplOiBAZm9udC1zaXplLWxhcmdlO1xuICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBoZWlnaHQ6IEBuYXZiYXItaGVpZ2h0O1xuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuXG4gID4gaW1nIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgLm5hdmJhciA+IC5jb250YWluZXIgJixcbiAgICAubmF2YmFyID4gLmNvbnRhaW5lci1mbHVpZCAmIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtQG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gICAgfVxuICB9XG59XG5cblxuLy8gTmF2YmFyIHRvZ2dsZVxuLy9cbi8vIEN1c3RvbSBidXR0b24gZm9yIHRvZ2dsaW5nIHRoZSBgLm5hdmJhci1jb2xsYXBzZWAsIHBvd2VyZWQgYnkgdGhlIGNvbGxhcHNlXG4vLyBKYXZhU2NyaXB0IHBsdWdpbi5cblxuLm5hdmJhci10b2dnbGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsb2F0OiByaWdodDtcbiAgbWFyZ2luLXJpZ2h0OiBAbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgcGFkZGluZzogOXB4IDEwcHg7XG4gIC5uYXZiYXItdmVydGljYWwtYWxpZ24oMzRweCk7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOyAvLyBSZXNldCB1bnVzdWFsIEZpcmVmb3gtb24tQW5kcm9pZCBkZWZhdWx0IHN0eWxlOyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcy9pc3N1ZXMvMjE0XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1iYXNlO1xuXG4gIC8vIFdlIHJlbW92ZSB0aGUgYG91dGxpbmVgIGhlcmUsIGJ1dCBsYXRlciBjb21wZW5zYXRlIGJ5IGF0dGFjaGluZyBgOmhvdmVyYFxuICAvLyBzdHlsZXMgdG8gYDpmb2N1c2AuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7XG4gIH1cblxuICAvLyBCYXJzXG4gIC5pY29uLWJhciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDIycHg7XG4gICAgaGVpZ2h0OiAycHg7XG4gICAgYm9yZGVyLXJhZGl1czogMXB4O1xuICB9XG4gIC5pY29uLWJhciArIC5pY29uLWJhciB7XG4gICAgbWFyZ2luLXRvcDogNHB4O1xuICB9XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6IEBncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cblxuLy8gTmF2YmFyIG5hdiBsaW5rc1xuLy9cbi8vIEJ1aWxkcyBvbiB0b3Agb2YgdGhlIGAubmF2YCBjb21wb25lbnRzIHdpdGggaXRzIG93biBtb2RpZmllciBjbGFzcyB0byBtYWtlXG4vLyB0aGUgbmF2IHRoZSBmdWxsIGhlaWdodCBvZiB0aGUgaG9yaXpvbnRhbCBuYXYgKGFib3ZlIDc2OHB4KS5cblxuLm5hdmJhci1uYXYge1xuICBtYXJnaW46IChAbmF2YmFyLXBhZGRpbmctdmVydGljYWwgLyAyKSAtQG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG5cbiAgPiBsaSA+IGEge1xuICAgIHBhZGRpbmctdG9wOiAgICAxMHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIH1cblxuICBAbWVkaWEgKG1heC13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludC1tYXgpIHtcbiAgICAvLyBEcm9wZG93bnMgZ2V0IGN1c3RvbSBkaXNwbGF5IHdoZW4gY29sbGFwc2VkXG4gICAgLm9wZW4gLmRyb3Bkb3duLW1lbnUge1xuICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgIGZsb2F0OiBub25lO1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgPiBsaSA+IGEsXG4gICAgICAuZHJvcGRvd24taGVhZGVyIHtcbiAgICAgICAgcGFkZGluZzogNXB4IDE1cHggNXB4IDI1cHg7XG4gICAgICB9XG4gICAgICA+IGxpID4gYSB7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gICAgICAgICY6aG92ZXIsXG4gICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBVbmNvbGxhcHNlIHRoZSBuYXZcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW46IDA7XG5cbiAgICA+IGxpIHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgPiBhIHtcbiAgICAgICAgcGFkZGluZy10b3A6ICAgIEBuYXZiYXItcGFkZGluZy12ZXJ0aWNhbDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IEBuYXZiYXItcGFkZGluZy12ZXJ0aWNhbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG4vLyBOYXZiYXIgZm9ybVxuLy9cbi8vIEV4dGVuc2lvbiBvZiB0aGUgYC5mb3JtLWlubGluZWAgd2l0aCBzb21lIGV4dHJhIGZsYXZvciBmb3Igb3B0aW11bSBkaXNwbGF5IGluXG4vLyBvdXIgbmF2YmFycy5cblxuLm5hdmJhci1mb3JtIHtcbiAgbWFyZ2luLWxlZnQ6IC1AbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgbWFyZ2luLXJpZ2h0OiAtQG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gIHBhZGRpbmc6IDEwcHggQG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBAc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsLjEpLCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsLjEpO1xuICAuYm94LXNoYWRvdyhAc2hhZG93KTtcblxuICAvLyBNaXhpbiBiZWhhdmlvciBmb3Igb3B0aW11bSBkaXNwbGF5XG4gIC5mb3JtLWlubGluZSgpO1xuXG4gIC5mb3JtLWdyb3VwIHtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludC1tYXgpIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBpbiBleHBhbmRlZCwgaG9yaXpvbnRhbCBuYXZiYXJcbiAgLm5hdmJhci12ZXJ0aWNhbC1hbGlnbihAaW5wdXQtaGVpZ2h0LWJhc2UpO1xuXG4gIC8vIFVuZG8gMTAwJSB3aWR0aCBmb3IgcHVsbCBjbGFzc2VzXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAuYm94LXNoYWRvdyhub25lKTtcbiAgfVxufVxuXG5cbi8vIERyb3Bkb3duIG1lbnVzXG5cbi8vIE1lbnUgcG9zaXRpb24gYW5kIG1lbnUgY2FyZXRzXG4ubmF2YmFyLW5hdiA+IGxpID4gLmRyb3Bkb3duLW1lbnUge1xuICBtYXJnaW4tdG9wOiAwO1xuICAuYm9yZGVyLXRvcC1yYWRpdXMoMCk7XG59XG4vLyBNZW51IHBvc2l0aW9uIGFuZCBtZW51IGNhcmV0IHN1cHBvcnQgZm9yIGRyb3B1cHMgdmlhIGV4dHJhIGRyb3B1cCBjbGFzc1xuLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1uYXYgPiBsaSA+IC5kcm9wZG93bi1tZW51IHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgLmJvcmRlci10b3AtcmFkaXVzKEBuYXZiYXItYm9yZGVyLXJhZGl1cyk7XG4gIC5ib3JkZXItYm90dG9tLXJhZGl1cygwKTtcbn1cblxuXG4vLyBCdXR0b25zIGluIG5hdmJhcnNcbi8vXG4vLyBWZXJ0aWNhbGx5IGNlbnRlciBhIGJ1dHRvbiB3aXRoaW4gYSBuYXZiYXIgKHdoZW4gKm5vdCogaW4gYSBmb3JtKS5cblxuLm5hdmJhci1idG4ge1xuICAubmF2YmFyLXZlcnRpY2FsLWFsaWduKEBpbnB1dC1oZWlnaHQtYmFzZSk7XG5cbiAgJi5idG4tc20ge1xuICAgIC5uYXZiYXItdmVydGljYWwtYWxpZ24oQGlucHV0LWhlaWdodC1zbWFsbCk7XG4gIH1cbiAgJi5idG4teHMge1xuICAgIC5uYXZiYXItdmVydGljYWwtYWxpZ24oMjIpO1xuICB9XG59XG5cblxuLy8gVGV4dCBpbiBuYXZiYXJzXG4vL1xuLy8gQWRkIGEgY2xhc3MgdG8gbWFrZSBhbnkgZWxlbWVudCBwcm9wZXJseSBhbGlnbiBpdHNlbGYgdmVydGljYWxseSB3aXRoaW4gdGhlIG5hdmJhcnMuXG5cbi5uYXZiYXItdGV4dCB7XG4gIC5uYXZiYXItdmVydGljYWwtYWxpZ24oQGxpbmUtaGVpZ2h0LWNvbXB1dGVkKTtcblxuICBAbWVkaWEgKG1pbi13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbi1sZWZ0OiBAbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgICBtYXJnaW4tcmlnaHQ6IEBuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICB9XG59XG5cblxuLy8gQ29tcG9uZW50IGFsaWdubWVudFxuLy9cbi8vIFJlcHVycG9zZSB0aGUgcHVsbCB1dGlsaXRpZXMgYXMgdGhlaXIgb3duIG5hdmJhciB1dGlsaXRpZXMgdG8gYXZvaWQgc3BlY2lmaWNpdHlcbi8vIGlzc3VlcyB3aXRoIHBhcmVudHMgYW5kIGNoYWluaW5nLiBPbmx5IGRvIHRoaXMgd2hlbiB0aGUgbmF2YmFyIGlzIHVuY29sbGFwc2VkXG4vLyB0aG91Z2ggc28gdGhhdCBuYXZiYXIgY29udGVudHMgcHJvcGVybHkgc3RhY2sgYW5kIGFsaWduIGluIG1vYmlsZS5cbi8vXG4vLyBEZWNsYXJlZCBhZnRlciB0aGUgbmF2YmFyIGNvbXBvbmVudHMgdG8gZW5zdXJlIG1vcmUgc3BlY2lmaWNpdHkgb24gdGhlIG1hcmdpbnMuXG5cbkBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gIC5uYXZiYXItbGVmdCAgeyAucHVsbC1sZWZ0KCk7IH1cbiAgLm5hdmJhci1yaWdodCB7XG4gICAgLnB1bGwtcmlnaHQoKTtcbiAgICBtYXJnaW4tcmlnaHQ6IC1AbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcblxuICAgIH4gLm5hdmJhci1yaWdodCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgfVxuICB9XG59XG5cblxuLy8gQWx0ZXJuYXRlIG5hdmJhcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIERlZmF1bHQgbmF2YmFyXG4ubmF2YmFyLWRlZmF1bHQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtYmc7XG4gIGJvcmRlci1jb2xvcjogQG5hdmJhci1kZWZhdWx0LWJvcmRlcjtcblxuICAubmF2YmFyLWJyYW5kIHtcbiAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWJyYW5kLWNvbG9yO1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWJyYW5kLWhvdmVyLWNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1kZWZhdWx0LWJyYW5kLWhvdmVyLWJnO1xuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItdGV4dCB7XG4gICAgY29sb3I6IEBuYXZiYXItZGVmYXVsdC1jb2xvcjtcbiAgfVxuXG4gIC5uYXZiYXItbmF2IHtcbiAgICA+IGxpID4gYSB7XG4gICAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstY29sb3I7XG5cbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1ob3Zlci1iZztcbiAgICAgIH1cbiAgICB9XG4gICAgPiAuYWN0aXZlID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1hY3RpdmUtYmc7XG4gICAgICB9XG4gICAgfVxuICAgID4gLmRpc2FibGVkID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWRpc2FibGVkLWJnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItdG9nZ2xlIHtcbiAgICBib3JkZXItY29sb3I6IEBuYXZiYXItZGVmYXVsdC10b2dnbGUtYm9yZGVyLWNvbG9yO1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtdG9nZ2xlLWhvdmVyLWJnO1xuICAgIH1cbiAgICAuaWNvbi1iYXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1kZWZhdWx0LXRvZ2dsZS1pY29uLWJhci1iZztcbiAgICB9XG4gIH1cblxuICAubmF2YmFyLWNvbGxhcHNlLFxuICAubmF2YmFyLWZvcm0ge1xuICAgIGJvcmRlci1jb2xvcjogQG5hdmJhci1kZWZhdWx0LWJvcmRlcjtcbiAgfVxuXG4gIC8vIERyb3Bkb3duIG1lbnUgaXRlbXNcbiAgLm5hdmJhci1uYXYge1xuICAgIC8vIFJlbW92ZSBiYWNrZ3JvdW5kIGNvbG9yIGZyb20gb3BlbiBkcm9wZG93blxuICAgID4gLm9wZW4gPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1iZztcbiAgICAgICAgY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludC1tYXgpIHtcbiAgICAgIC8vIERyb3Bkb3ducyBnZXQgY3VzdG9tIGRpc3BsYXkgd2hlbiBjb2xsYXBzZWRcbiAgICAgIC5vcGVuIC5kcm9wZG93bi1tZW51IHtcbiAgICAgICAgPiBsaSA+IGEge1xuICAgICAgICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1jb2xvcjtcbiAgICAgICAgICAmOmhvdmVyLFxuICAgICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItYmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgID4gLmFjdGl2ZSA+IGEge1xuICAgICAgICAgICYsXG4gICAgICAgICAgJjpob3ZlcixcbiAgICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1hY3RpdmUtY29sb3I7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1hY3RpdmUtYmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgID4gLmRpc2FibGVkID4gYSB7XG4gICAgICAgICAgJixcbiAgICAgICAgICAmOmhvdmVyLFxuICAgICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWRpc2FibGVkLWNvbG9yO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstZGlzYWJsZWQtYmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICAvLyBMaW5rcyBpbiBuYXZiYXJzXG4gIC8vXG4gIC8vIEFkZCBhIGNsYXNzIHRvIGVuc3VyZSBsaW5rcyBvdXRzaWRlIHRoZSBuYXZiYXIgbmF2IGFyZSBjb2xvcmVkIGNvcnJlY3RseS5cblxuICAubmF2YmFyLWxpbmsge1xuICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1jb2xvcjtcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1ob3Zlci1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAuYnRuLWxpbmsge1xuICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1jb2xvcjtcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWNvbG9yO1xuICAgIH1cbiAgICAmW2Rpc2FibGVkXSxcbiAgICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gSW52ZXJzZSBuYXZiYXJcblxuLm5hdmJhci1pbnZlcnNlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1pbnZlcnNlLWJnO1xuICBib3JkZXItY29sb3I6IEBuYXZiYXItaW52ZXJzZS1ib3JkZXI7XG5cbiAgLm5hdmJhci1icmFuZCB7XG4gICAgY29sb3I6IEBuYXZiYXItaW52ZXJzZS1icmFuZC1jb2xvcjtcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgY29sb3I6IEBuYXZiYXItaW52ZXJzZS1icmFuZC1ob3Zlci1jb2xvcjtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItaW52ZXJzZS1icmFuZC1ob3Zlci1iZztcbiAgICB9XG4gIH1cblxuICAubmF2YmFyLXRleHQge1xuICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtY29sb3I7XG4gIH1cblxuICAubmF2YmFyLW5hdiB7XG4gICAgPiBsaSA+IGEge1xuICAgICAgY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWNvbG9yO1xuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItYmc7XG4gICAgICB9XG4gICAgfVxuICAgID4gLmFjdGl2ZSA+IGEge1xuICAgICAgJixcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWFjdGl2ZS1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWJnO1xuICAgICAgfVxuICAgIH1cbiAgICA+IC5kaXNhYmxlZCA+IGEge1xuICAgICAgJixcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWRpc2FibGVkLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1kaXNhYmxlZC1iZztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBEYXJrZW4gdGhlIHJlc3BvbnNpdmUgbmF2IHRvZ2dsZVxuICAubmF2YmFyLXRvZ2dsZSB7XG4gICAgYm9yZGVyLWNvbG9yOiBAbmF2YmFyLWludmVyc2UtdG9nZ2xlLWJvcmRlci1jb2xvcjtcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1pbnZlcnNlLXRvZ2dsZS1ob3Zlci1iZztcbiAgICB9XG4gICAgLmljb24tYmFyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItaW52ZXJzZS10b2dnbGUtaWNvbi1iYXItYmc7XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci1jb2xsYXBzZSxcbiAgLm5hdmJhci1mb3JtIHtcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbihAbmF2YmFyLWludmVyc2UtYmcsIDclKTtcbiAgfVxuXG4gIC8vIERyb3Bkb3duc1xuICAubmF2YmFyLW5hdiB7XG4gICAgPiAub3BlbiA+IGEge1xuICAgICAgJixcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWJnO1xuICAgICAgICBjb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50LW1heCkge1xuICAgICAgLy8gRHJvcGRvd25zIGdldCBjdXN0b20gZGlzcGxheVxuICAgICAgLm9wZW4gLmRyb3Bkb3duLW1lbnUge1xuICAgICAgICA+IC5kcm9wZG93bi1oZWFkZXIge1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogQG5hdmJhci1pbnZlcnNlLWJvcmRlcjtcbiAgICAgICAgfVxuICAgICAgICAuZGl2aWRlciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1pbnZlcnNlLWJvcmRlcjtcbiAgICAgICAgfVxuICAgICAgICA+IGxpID4gYSB7XG4gICAgICAgICAgY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWNvbG9yO1xuICAgICAgICAgICY6aG92ZXIsXG4gICAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBjb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItY29sb3I7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1iZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPiAuYWN0aXZlID4gYSB7XG4gICAgICAgICAgJixcbiAgICAgICAgICAmOmhvdmVyLFxuICAgICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWFjdGl2ZS1jb2xvcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWFjdGl2ZS1iZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPiAuZGlzYWJsZWQgPiBhIHtcbiAgICAgICAgICAmLFxuICAgICAgICAgICY6aG92ZXIsXG4gICAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBjb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1kaXNhYmxlZC1iZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubmF2YmFyLWxpbmsge1xuICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1jb2xvcjtcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAuYnRuLWxpbmsge1xuICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1jb2xvcjtcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWNvbG9yO1xuICAgIH1cbiAgICAmW2Rpc2FibGVkXSxcbiAgICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIE5hdmJhciB2ZXJ0aWNhbCBhbGlnblxuLy9cbi8vIFZlcnRpY2FsbHkgY2VudGVyIGVsZW1lbnRzIGluIHRoZSBuYXZiYXIuXG4vLyBFeGFtcGxlOiBhbiBlbGVtZW50IGhhcyBhIGhlaWdodCBvZiAzMHB4LCBzbyB3cml0ZSBvdXQgYC5uYXZiYXItdmVydGljYWwtYWxpZ24oMzBweCk7YCB0byBjYWxjdWxhdGUgdGhlIGFwcHJvcHJpYXRlIHRvcCBtYXJnaW4uXG5cbi5uYXZiYXItdmVydGljYWwtYWxpZ24oQGVsZW1lbnQtaGVpZ2h0KSB7XG4gIG1hcmdpbi10b3A6ICgoQG5hdmJhci1oZWlnaHQgLSBAZWxlbWVudC1oZWlnaHQpIC8gMik7XG4gIG1hcmdpbi1ib3R0b206ICgoQG5hdmJhci1oZWlnaHQgLSBAZWxlbWVudC1oZWlnaHQpIC8gMik7XG59XG4iLCIvL1xuLy8gVXRpbGl0eSBjbGFzc2VzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIEZsb2F0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uY2xlYXJmaXgge1xuICAuY2xlYXJmaXgoKTtcbn1cbi5jZW50ZXItYmxvY2sge1xuICAuY2VudGVyLWJsb2NrKCk7XG59XG4ucHVsbC1yaWdodCB7XG4gIGZsb2F0OiByaWdodCAhaW1wb3J0YW50O1xufVxuLnB1bGwtbGVmdCB7XG4gIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7XG59XG5cblxuLy8gVG9nZ2xpbmcgY29udGVudFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBOb3RlOiBEZXByZWNhdGVkIC5oaWRlIGluIGZhdm9yIG9mIC5oaWRkZW4gb3IgLnNyLW9ubHkgKGFzIGFwcHJvcHJpYXRlKSBpbiB2My4wLjFcbi5oaWRlIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuLnNob3cge1xuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xufVxuLmludmlzaWJsZSB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbi50ZXh0LWhpZGUge1xuICAudGV4dC1oaWRlKCk7XG59XG5cblxuLy8gSGlkZSBmcm9tIHNjcmVlbnJlYWRlcnMgYW5kIGJyb3dzZXJzXG4vL1xuLy8gQ3JlZGl0OiBIVE1MNSBCb2lsZXJwbGF0ZVxuXG4uaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG5cbi8vIEZvciBBZmZpeCBwbHVnaW5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmFmZml4IHtcbiAgcG9zaXRpb246IGZpeGVkO1xufVxuIiwiLy9cbi8vIEJyZWFkY3J1bWJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi5icmVhZGNydW1iIHtcbiAgcGFkZGluZzogQGJyZWFkY3J1bWItcGFkZGluZy12ZXJ0aWNhbCBAYnJlYWRjcnVtYi1wYWRkaW5nLWhvcml6b250YWw7XG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogQGJyZWFkY3J1bWItYmc7XG4gIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWJhc2U7XG5cbiAgPiBsaSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG4gICAgKyBsaTpiZWZvcmUge1xuICAgICAgY29udGVudDogXCJAe2JyZWFkY3J1bWItc2VwYXJhdG9yfVxcMDBhMFwiOyAvLyBVbmljb2RlIHNwYWNlIGFkZGVkIHNpbmNlIGlubGluZS1ibG9jayBtZWFucyBub24tY29sbGFwc2luZyB3aGl0ZS1zcGFjZVxuICAgICAgcGFkZGluZzogMCA1cHg7XG4gICAgICBjb2xvcjogQGJyZWFkY3J1bWItY29sb3I7XG4gICAgfVxuICB9XG5cbiAgPiAuYWN0aXZlIHtcbiAgICBjb2xvcjogQGJyZWFkY3J1bWItYWN0aXZlLWNvbG9yO1xuICB9XG59XG4iLCIvL1xuLy8gUGFnaW5hdGlvbiAobXVsdGlwbGUgcGFnZXMpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLnBhZ2luYXRpb24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbWFyZ2luOiBAbGluZS1oZWlnaHQtY29tcHV0ZWQgMDtcbiAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtYmFzZTtcblxuICA+IGxpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7IC8vIFJlbW92ZSBsaXN0LXN0eWxlIGFuZCBibG9jay1sZXZlbCBkZWZhdWx0c1xuICAgID4gYSxcbiAgICA+IHNwYW4ge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgZmxvYXQ6IGxlZnQ7IC8vIENvbGxhcHNlIHdoaXRlLXNwYWNlXG4gICAgICBwYWRkaW5nOiBAcGFkZGluZy1iYXNlLXZlcnRpY2FsIEBwYWRkaW5nLWJhc2UtaG9yaXpvbnRhbDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIGNvbG9yOiBAcGFnaW5hdGlvbi1jb2xvcjtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBwYWdpbmF0aW9uLWJnO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgQHBhZ2luYXRpb24tYm9yZGVyO1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gICAgfVxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgPiBhLFxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIC5ib3JkZXItbGVmdC1yYWRpdXMoQGJvcmRlci1yYWRpdXMtYmFzZSk7XG4gICAgICB9XG4gICAgfVxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICA+IGEsXG4gICAgICA+IHNwYW4ge1xuICAgICAgICAuYm9yZGVyLXJpZ2h0LXJhZGl1cyhAYm9yZGVyLXJhZGl1cy1iYXNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICA+IGxpID4gYSxcbiAgPiBsaSA+IHNwYW4ge1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICB6LWluZGV4OiAzO1xuICAgICAgY29sb3I6IEBwYWdpbmF0aW9uLWhvdmVyLWNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHBhZ2luYXRpb24taG92ZXItYmc7XG4gICAgICBib3JkZXItY29sb3I6IEBwYWdpbmF0aW9uLWhvdmVyLWJvcmRlcjtcbiAgICB9XG4gIH1cblxuICA+IC5hY3RpdmUgPiBhLFxuICA+IC5hY3RpdmUgPiBzcGFuIHtcbiAgICAmLFxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICB6LWluZGV4OiAyO1xuICAgICAgY29sb3I6IEBwYWdpbmF0aW9uLWFjdGl2ZS1jb2xvcjtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBwYWdpbmF0aW9uLWFjdGl2ZS1iZztcbiAgICAgIGJvcmRlci1jb2xvcjogQHBhZ2luYXRpb24tYWN0aXZlLWJvcmRlcjtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICB9XG4gIH1cblxuICA+IC5kaXNhYmxlZCB7XG4gICAgPiBzcGFuLFxuICAgID4gc3Bhbjpob3ZlcixcbiAgICA+IHNwYW46Zm9jdXMsXG4gICAgPiBhLFxuICAgID4gYTpob3ZlcixcbiAgICA+IGE6Zm9jdXMge1xuICAgICAgY29sb3I6IEBwYWdpbmF0aW9uLWRpc2FibGVkLWNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHBhZ2luYXRpb24tZGlzYWJsZWQtYmc7XG4gICAgICBib3JkZXItY29sb3I6IEBwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlcjtcbiAgICAgIGN1cnNvcjogQGN1cnNvci1kaXNhYmxlZDtcbiAgICB9XG4gIH1cbn1cblxuLy8gU2l6aW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBMYXJnZVxuLnBhZ2luYXRpb24tbGcge1xuICAucGFnaW5hdGlvbi1zaXplKEBwYWRkaW5nLWxhcmdlLXZlcnRpY2FsOyBAcGFkZGluZy1sYXJnZS1ob3Jpem9udGFsOyBAZm9udC1zaXplLWxhcmdlOyBAbGluZS1oZWlnaHQtbGFyZ2U7IEBib3JkZXItcmFkaXVzLWxhcmdlKTtcbn1cblxuLy8gU21hbGxcbi5wYWdpbmF0aW9uLXNtIHtcbiAgLnBhZ2luYXRpb24tc2l6ZShAcGFkZGluZy1zbWFsbC12ZXJ0aWNhbDsgQHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbDsgQGZvbnQtc2l6ZS1zbWFsbDsgQGxpbmUtaGVpZ2h0LXNtYWxsOyBAYm9yZGVyLXJhZGl1cy1zbWFsbCk7XG59XG4iLCIvLyBQYWdpbmF0aW9uXG5cbi5wYWdpbmF0aW9uLXNpemUoQHBhZGRpbmctdmVydGljYWw7IEBwYWRkaW5nLWhvcml6b250YWw7IEBmb250LXNpemU7IEBsaW5lLWhlaWdodDsgQGJvcmRlci1yYWRpdXMpIHtcbiAgPiBsaSB7XG4gICAgPiBhLFxuICAgID4gc3BhbiB7XG4gICAgICBwYWRkaW5nOiBAcGFkZGluZy12ZXJ0aWNhbCBAcGFkZGluZy1ob3Jpem9udGFsO1xuICAgICAgZm9udC1zaXplOiBAZm9udC1zaXplO1xuICAgICAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodDtcbiAgICB9XG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICA+IGEsXG4gICAgICA+IHNwYW4ge1xuICAgICAgICAuYm9yZGVyLWxlZnQtcmFkaXVzKEBib3JkZXItcmFkaXVzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgID4gYSxcbiAgICAgID4gc3BhbiB7XG4gICAgICAgIC5ib3JkZXItcmlnaHQtcmFkaXVzKEBib3JkZXItcmFkaXVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vXG4vLyBQYWdlciBwYWdpbmF0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi5wYWdlciB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbWFyZ2luOiBAbGluZS1oZWlnaHQtY29tcHV0ZWQgMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAmOmV4dGVuZCguY2xlYXJmaXggYWxsKTtcbiAgbGkge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICA+IGEsXG4gICAgPiBzcGFuIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHBhZGRpbmc6IDVweCAxNHB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHBhZ2VyLWJnO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgQHBhZ2VyLWJvcmRlcjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IEBwYWdlci1ib3JkZXItcmFkaXVzO1xuICAgIH1cblxuICAgID4gYTpob3ZlcixcbiAgICA+IGE6Zm9jdXMge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHBhZ2VyLWhvdmVyLWJnO1xuICAgIH1cbiAgfVxuXG4gIC5uZXh0IHtcbiAgICA+IGEsXG4gICAgPiBzcGFuIHtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICB9XG4gIH1cblxuICAucHJldmlvdXMge1xuICAgID4gYSxcbiAgICA+IHNwYW4ge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgfVxuICB9XG5cbiAgLmRpc2FibGVkIHtcbiAgICA+IGEsXG4gICAgPiBhOmhvdmVyLFxuICAgID4gYTpmb2N1cyxcbiAgICA+IHNwYW4ge1xuICAgICAgY29sb3I6IEBwYWdlci1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBwYWdlci1iZztcbiAgICAgIGN1cnNvcjogQGN1cnNvci1kaXNhYmxlZDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vXG4vLyBMYWJlbHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgcGFkZGluZzogLjJlbSAuNmVtIC4zZW07XG4gIGZvbnQtc2l6ZTogNzUlO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiBAbGFiZWwtY29sb3I7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICBib3JkZXItcmFkaXVzOiAuMjVlbTtcblxuICAvLyBBZGQgaG92ZXIgZWZmZWN0cywgYnV0IG9ubHkgZm9yIGxpbmtzXG4gIGEmIHtcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgY29sb3I6IEBsYWJlbC1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVtcHR5IGxhYmVscyBjb2xsYXBzZSBhdXRvbWF0aWNhbGx5IChub3QgYXZhaWxhYmxlIGluIElFOClcbiAgJjplbXB0eSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIC8vIFF1aWNrIGZpeCBmb3IgbGFiZWxzIGluIGJ1dHRvbnNcbiAgLmJ0biAmIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAtMXB4O1xuICB9XG59XG5cbi8vIENvbG9yc1xuLy8gQ29udGV4dHVhbCB2YXJpYXRpb25zIChsaW5rZWQgbGFiZWxzIGdldCBkYXJrZXIgb24gOmhvdmVyKVxuXG4ubGFiZWwtZGVmYXVsdCB7XG4gIC5sYWJlbC12YXJpYW50KEBsYWJlbC1kZWZhdWx0LWJnKTtcbn1cblxuLmxhYmVsLXByaW1hcnkge1xuICAubGFiZWwtdmFyaWFudChAbGFiZWwtcHJpbWFyeS1iZyk7XG59XG5cbi5sYWJlbC1zdWNjZXNzIHtcbiAgLmxhYmVsLXZhcmlhbnQoQGxhYmVsLXN1Y2Nlc3MtYmcpO1xufVxuXG4ubGFiZWwtaW5mbyB7XG4gIC5sYWJlbC12YXJpYW50KEBsYWJlbC1pbmZvLWJnKTtcbn1cblxuLmxhYmVsLXdhcm5pbmcge1xuICAubGFiZWwtdmFyaWFudChAbGFiZWwtd2FybmluZy1iZyk7XG59XG5cbi5sYWJlbC1kYW5nZXIge1xuICAubGFiZWwtdmFyaWFudChAbGFiZWwtZGFuZ2VyLWJnKTtcbn1cbiIsIi8vIExhYmVsc1xuXG4ubGFiZWwtdmFyaWFudChAY29sb3IpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogQGNvbG9yO1xuXG4gICZbaHJlZl0ge1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oQGNvbG9yLCAxMCUpO1xuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIEJhZGdlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBCYXNlIGNsYXNzXG4uYmFkZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1pbi13aWR0aDogMTBweDtcbiAgcGFkZGluZzogM3B4IDdweDtcbiAgZm9udC1zaXplOiBAZm9udC1zaXplLXNtYWxsO1xuICBmb250LXdlaWdodDogQGJhZGdlLWZvbnQtd2VpZ2h0O1xuICBjb2xvcjogQGJhZGdlLWNvbG9yO1xuICBsaW5lLWhlaWdodDogQGJhZGdlLWxpbmUtaGVpZ2h0O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IEBiYWRnZS1iZztcbiAgYm9yZGVyLXJhZGl1czogQGJhZGdlLWJvcmRlci1yYWRpdXM7XG5cbiAgLy8gRW1wdHkgYmFkZ2VzIGNvbGxhcHNlIGF1dG9tYXRpY2FsbHkgKG5vdCBhdmFpbGFibGUgaW4gSUU4KVxuICAmOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gUXVpY2sgZml4IGZvciBiYWRnZXMgaW4gYnV0dG9uc1xuICAuYnRuICYge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC0xcHg7XG4gIH1cblxuICAuYnRuLXhzICYsXG4gIC5idG4tZ3JvdXAteHMgPiAuYnRuICYge1xuICAgIHRvcDogMDtcbiAgICBwYWRkaW5nOiAxcHggNXB4O1xuICB9XG5cbiAgLy8gSG92ZXIgc3RhdGUsIGJ1dCBvbmx5IGZvciBsaW5rc1xuICBhJiB7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiBAYmFkZ2UtbGluay1ob3Zlci1jb2xvcjtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gIH1cblxuICAvLyBBY2NvdW50IGZvciBiYWRnZXMgaW4gbmF2c1xuICAubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSA+ICYsXG4gIC5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYSA+ICYge1xuICAgIGNvbG9yOiBAYmFkZ2UtYWN0aXZlLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEBiYWRnZS1hY3RpdmUtYmc7XG4gIH1cblxuICAubGlzdC1ncm91cC1pdGVtID4gJiB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICB9XG5cbiAgLmxpc3QtZ3JvdXAtaXRlbSA+ICYgKyAmIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgfVxuXG4gIC5uYXYtcGlsbHMgPiBsaSA+IGEgPiAmIHtcbiAgICBtYXJnaW4tbGVmdDogM3B4O1xuICB9XG59XG4iLCIvL1xuLy8gSnVtYm90cm9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi5qdW1ib3Ryb24ge1xuICBwYWRkaW5nLXRvcDogICAgQGp1bWJvdHJvbi1wYWRkaW5nO1xuICBwYWRkaW5nLWJvdHRvbTogQGp1bWJvdHJvbi1wYWRkaW5nO1xuICBtYXJnaW4tYm90dG9tOiBAanVtYm90cm9uLXBhZGRpbmc7XG4gIGNvbG9yOiBAanVtYm90cm9uLWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAanVtYm90cm9uLWJnO1xuXG4gIGgxLFxuICAuaDEge1xuICAgIGNvbG9yOiBAanVtYm90cm9uLWhlYWRpbmctY29sb3I7XG4gIH1cblxuICBwIHtcbiAgICBtYXJnaW4tYm90dG9tOiAoQGp1bWJvdHJvbi1wYWRkaW5nIC8gMik7XG4gICAgZm9udC1zaXplOiBAanVtYm90cm9uLWZvbnQtc2l6ZTtcbiAgICBmb250LXdlaWdodDogMjAwO1xuICB9XG5cbiAgPiBociB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogZGFya2VuKEBqdW1ib3Ryb24tYmcsIDEwJSk7XG4gIH1cblxuICAuY29udGFpbmVyICYsXG4gIC5jb250YWluZXItZmx1aWQgJiB7XG4gICAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtbGFyZ2U7IC8vIE9ubHkgcm91bmQgY29ybmVycyBhdCBoaWdoZXIgcmVzb2x1dGlvbnMgaWYgY29udGFpbmVkIGluIGEgY29udGFpbmVyXG4gIH1cblxuICAuY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBAc2NyZWVuLXNtLW1pbikge1xuICAgIHBhZGRpbmctdG9wOiAgICAoQGp1bWJvdHJvbi1wYWRkaW5nICogMS42KTtcbiAgICBwYWRkaW5nLWJvdHRvbTogKEBqdW1ib3Ryb24tcGFkZGluZyAqIDEuNik7XG5cbiAgICAuY29udGFpbmVyICYsXG4gICAgLmNvbnRhaW5lci1mbHVpZCAmIHtcbiAgICAgIHBhZGRpbmctbGVmdDogIChAanVtYm90cm9uLXBhZGRpbmcgKiAyKTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IChAanVtYm90cm9uLXBhZGRpbmcgKiAyKTtcbiAgICB9XG5cbiAgICBoMSxcbiAgICAuaDEge1xuICAgICAgZm9udC1zaXplOiBAanVtYm90cm9uLWhlYWRpbmctZm9udC1zaXplO1xuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIFRodW1ibmFpbHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gTWl4aW4gYW5kIGFkanVzdCB0aGUgcmVndWxhciBpbWFnZSBjbGFzc1xuLnRodW1ibmFpbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiBAdGh1bWJuYWlsLXBhZGRpbmc7XG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAdGh1bWJuYWlsLWJnO1xuICBib3JkZXI6IDFweCBzb2xpZCBAdGh1bWJuYWlsLWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogQHRodW1ibmFpbC1ib3JkZXItcmFkaXVzO1xuICAudHJhbnNpdGlvbihib3JkZXIgLjJzIGVhc2UtaW4tb3V0KTtcblxuICA+IGltZyxcbiAgYSA+IGltZyB7XG4gICAgJjpleHRlbmQoLmltZy1yZXNwb25zaXZlKTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIH1cblxuICAvLyBBZGQgYSBob3ZlciBzdGF0ZSBmb3IgbGlua2VkIHZlcnNpb25zIG9ubHlcbiAgYSY6aG92ZXIsXG4gIGEmOmZvY3VzLFxuICBhJi5hY3RpdmUge1xuICAgIGJvcmRlci1jb2xvcjogQGxpbmstY29sb3I7XG4gIH1cblxuICAvLyBJbWFnZSBjYXB0aW9uc1xuICAuY2FwdGlvbiB7XG4gICAgcGFkZGluZzogQHRodW1ibmFpbC1jYXB0aW9uLXBhZGRpbmc7XG4gICAgY29sb3I6IEB0aHVtYm5haWwtY2FwdGlvbi1jb2xvcjtcbiAgfVxufVxuIiwiLy9cbi8vIEFsZXJ0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBCYXNlIHN0eWxlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uYWxlcnQge1xuICBwYWRkaW5nOiBAYWxlcnQtcGFkZGluZztcbiAgbWFyZ2luLWJvdHRvbTogQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogQGFsZXJ0LWJvcmRlci1yYWRpdXM7XG5cbiAgLy8gSGVhZGluZ3MgZm9yIGxhcmdlciBhbGVydHNcbiAgaDQge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgLy8gU3BlY2lmaWVkIGZvciB0aGUgaDQgdG8gcHJldmVudCBjb25mbGljdHMgb2YgY2hhbmdpbmcgQGhlYWRpbmdzLWNvbG9yXG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cblxuICAvLyBQcm92aWRlIGNsYXNzIGZvciBsaW5rcyB0aGF0IG1hdGNoIGFsZXJ0c1xuICAuYWxlcnQtbGluayB7XG4gICAgZm9udC13ZWlnaHQ6IEBhbGVydC1saW5rLWZvbnQtd2VpZ2h0O1xuICB9XG5cbiAgLy8gSW1wcm92ZSBhbGlnbm1lbnQgYW5kIHNwYWNpbmcgb2YgaW5uZXIgY29udGVudFxuICA+IHAsXG4gID4gdWwge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cblxuICA+IHAgKyBwIHtcbiAgICBtYXJnaW4tdG9wOiA1cHg7XG4gIH1cbn1cblxuLy8gRGlzbWlzc2libGUgYWxlcnRzXG4vL1xuLy8gRXhwYW5kIHRoZSByaWdodCBwYWRkaW5nIGFuZCBhY2NvdW50IGZvciB0aGUgY2xvc2UgYnV0dG9uJ3MgcG9zaXRpb25pbmcuXG5cbi5hbGVydC1kaXNtaXNzYWJsZSwgLy8gVGhlIG1pc3NwZWxsZWQgLmFsZXJ0LWRpc21pc3NhYmxlIHdhcyBkZXByZWNhdGVkIGluIDMuMi4wLlxuLmFsZXJ0LWRpc21pc3NpYmxlIHtcbiAgcGFkZGluZy1yaWdodDogKEBhbGVydC1wYWRkaW5nICsgMjApO1xuXG4gIC8vIEFkanVzdCBjbG9zZSBsaW5rIHBvc2l0aW9uXG4gIC5jbG9zZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogLTJweDtcbiAgICByaWdodDogLTIxcHg7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cbn1cblxuLy8gQWx0ZXJuYXRlIHN0eWxlc1xuLy9cbi8vIEdlbmVyYXRlIGNvbnRleHR1YWwgbW9kaWZpZXIgY2xhc3NlcyBmb3IgY29sb3JpemluZyB0aGUgYWxlcnQuXG5cbi5hbGVydC1zdWNjZXNzIHtcbiAgLmFsZXJ0LXZhcmlhbnQoQGFsZXJ0LXN1Y2Nlc3MtYmc7IEBhbGVydC1zdWNjZXNzLWJvcmRlcjsgQGFsZXJ0LXN1Y2Nlc3MtdGV4dCk7XG59XG5cbi5hbGVydC1pbmZvIHtcbiAgLmFsZXJ0LXZhcmlhbnQoQGFsZXJ0LWluZm8tYmc7IEBhbGVydC1pbmZvLWJvcmRlcjsgQGFsZXJ0LWluZm8tdGV4dCk7XG59XG5cbi5hbGVydC13YXJuaW5nIHtcbiAgLmFsZXJ0LXZhcmlhbnQoQGFsZXJ0LXdhcm5pbmctYmc7IEBhbGVydC13YXJuaW5nLWJvcmRlcjsgQGFsZXJ0LXdhcm5pbmctdGV4dCk7XG59XG5cbi5hbGVydC1kYW5nZXIge1xuICAuYWxlcnQtdmFyaWFudChAYWxlcnQtZGFuZ2VyLWJnOyBAYWxlcnQtZGFuZ2VyLWJvcmRlcjsgQGFsZXJ0LWRhbmdlci10ZXh0KTtcbn1cbiIsIi8vIEFsZXJ0c1xuXG4uYWxlcnQtdmFyaWFudChAYmFja2dyb3VuZDsgQGJvcmRlcjsgQHRleHQtY29sb3IpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogQGJhY2tncm91bmQ7XG4gIGJvcmRlci1jb2xvcjogQGJvcmRlcjtcbiAgY29sb3I6IEB0ZXh0LWNvbG9yO1xuXG4gIGhyIHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBkYXJrZW4oQGJvcmRlciwgNSUpO1xuICB9XG4gIC5hbGVydC1saW5rIHtcbiAgICBjb2xvcjogZGFya2VuKEB0ZXh0LWNvbG9yLCAxMCUpO1xuICB9XG59XG4iLCIvL1xuLy8gUHJvZ3Jlc3MgYmFyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBCYXIgYW5pbWF0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBXZWJLaXRcbkAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlcyB7XG4gIGZyb20gIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogNDBweCAwOyB9XG4gIHRvICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9XG59XG5cbi8vIFNwZWMgYW5kIElFMTArXG5Aa2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHtcbiAgZnJvbSAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA0MHB4IDA7IH1cbiAgdG8gICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH1cbn1cblxuXG4vLyBCYXIgaXRzZWxmXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE91dGVyIGNvbnRhaW5lclxuLnByb2dyZXNzIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogQHByb2dyZXNzLWJnO1xuICBib3JkZXItcmFkaXVzOiBAcHJvZ3Jlc3MtYm9yZGVyLXJhZGl1cztcbiAgLmJveC1zaGFkb3coaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsLjEpKTtcbn1cblxuLy8gQmFyIG9mIHByb2dyZXNzXG4ucHJvZ3Jlc3MtYmFyIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmb250LXNpemU6IEBmb250LXNpemUtc21hbGw7XG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGNvbG9yOiBAcHJvZ3Jlc3MtYmFyLWNvbG9yO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IEBwcm9ncmVzcy1iYXItYmc7XG4gIC5ib3gtc2hhZG93KGluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsLjE1KSk7XG4gIC50cmFuc2l0aW9uKHdpZHRoIC42cyBlYXNlKTtcbn1cblxuLy8gU3RyaXBlZCBiYXJzXG4vL1xuLy8gYC5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXJgIGlzIGRlcHJlY2F0ZWQgYXMgb2YgdjMuMi4wIGluIGZhdm9yIG9mIHRoZVxuLy8gYC5wcm9ncmVzcy1iYXItc3RyaXBlZGAgY2xhc3MsIHdoaWNoIHlvdSBqdXN0IGFkZCB0byBhbiBleGlzdGluZ1xuLy8gYC5wcm9ncmVzcy1iYXJgLlxuLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhcixcbi5wcm9ncmVzcy1iYXItc3RyaXBlZCB7XG4gICNncmFkaWVudCA+IC5zdHJpcGVkKCk7XG4gIGJhY2tncm91bmQtc2l6ZTogNDBweCA0MHB4O1xufVxuXG4vLyBDYWxsIGFuaW1hdGlvbiBmb3IgdGhlIGFjdGl2ZSBvbmVcbi8vXG4vLyBgLnByb2dyZXNzLmFjdGl2ZSAucHJvZ3Jlc3MtYmFyYCBpcyBkZXByZWNhdGVkIGFzIG9mIHYzLjIuMCBpbiBmYXZvciBvZiB0aGVcbi8vIGAucHJvZ3Jlc3MtYmFyLmFjdGl2ZWAgYXBwcm9hY2guXG4ucHJvZ3Jlc3MuYWN0aXZlIC5wcm9ncmVzcy1iYXIsXG4ucHJvZ3Jlc3MtYmFyLmFjdGl2ZSB7XG4gIC5hbmltYXRpb24ocHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlKTtcbn1cblxuXG4vLyBWYXJpYXRpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5wcm9ncmVzcy1iYXItc3VjY2VzcyB7XG4gIC5wcm9ncmVzcy1iYXItdmFyaWFudChAcHJvZ3Jlc3MtYmFyLXN1Y2Nlc3MtYmcpO1xufVxuXG4ucHJvZ3Jlc3MtYmFyLWluZm8ge1xuICAucHJvZ3Jlc3MtYmFyLXZhcmlhbnQoQHByb2dyZXNzLWJhci1pbmZvLWJnKTtcbn1cblxuLnByb2dyZXNzLWJhci13YXJuaW5nIHtcbiAgLnByb2dyZXNzLWJhci12YXJpYW50KEBwcm9ncmVzcy1iYXItd2FybmluZy1iZyk7XG59XG5cbi5wcm9ncmVzcy1iYXItZGFuZ2VyIHtcbiAgLnByb2dyZXNzLWJhci12YXJpYW50KEBwcm9ncmVzcy1iYXItZGFuZ2VyLWJnKTtcbn1cbiIsIi8vIEdyYWRpZW50c1xuXG4jZ3JhZGllbnQge1xuXG4gIC8vIEhvcml6b250YWwgZ3JhZGllbnQsIGZyb20gbGVmdCB0byByaWdodFxuICAvL1xuICAvLyBDcmVhdGVzIHR3byBjb2xvciBzdG9wcywgc3RhcnQgYW5kIGVuZCwgYnkgc3BlY2lmeWluZyBhIGNvbG9yIGFuZCBwb3NpdGlvbiBmb3IgZWFjaCBjb2xvciBzdG9wLlxuICAvLyBDb2xvciBzdG9wcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBJRTkgYW5kIGJlbG93LlxuICAuaG9yaXpvbnRhbChAc3RhcnQtY29sb3I6ICM1NTU7IEBlbmQtY29sb3I6ICMzMzM7IEBzdGFydC1wZXJjZW50OiAwJTsgQGVuZC1wZXJjZW50OiAxMDAlKSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCwgQHN0YXJ0LWNvbG9yIEBzdGFydC1wZXJjZW50LCBAZW5kLWNvbG9yIEBlbmQtcGVyY2VudCk7IC8vIFNhZmFyaSA1LjEtNiwgQ2hyb21lIDEwK1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChsZWZ0LCBAc3RhcnQtY29sb3IgQHN0YXJ0LXBlcmNlbnQsIEBlbmQtY29sb3IgQGVuZC1wZXJjZW50KTsgLy8gT3BlcmEgMTJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIEBzdGFydC1jb2xvciBAc3RhcnQtcGVyY2VudCwgQGVuZC1jb2xvciBAZW5kLXBlcmNlbnQpOyAvLyBTdGFuZGFyZCwgSUUxMCwgRmlyZWZveCAxNissIE9wZXJhIDEyLjEwKywgU2FmYXJpIDcrLCBDaHJvbWUgMjYrXG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICAgIGZpbHRlcjogZSglKFwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyVkJywgZW5kQ29sb3JzdHI9JyVkJywgR3JhZGllbnRUeXBlPTEpXCIsYXJnYihAc3RhcnQtY29sb3IpLGFyZ2IoQGVuZC1jb2xvcikpKTsgLy8gSUU5IGFuZCBkb3duXG4gIH1cblxuICAvLyBWZXJ0aWNhbCBncmFkaWVudCwgZnJvbSB0b3AgdG8gYm90dG9tXG4gIC8vXG4gIC8vIENyZWF0ZXMgdHdvIGNvbG9yIHN0b3BzLCBzdGFydCBhbmQgZW5kLCBieSBzcGVjaWZ5aW5nIGEgY29sb3IgYW5kIHBvc2l0aW9uIGZvciBlYWNoIGNvbG9yIHN0b3AuXG4gIC8vIENvbG9yIHN0b3BzIGFyZSBub3QgYXZhaWxhYmxlIGluIElFOSBhbmQgYmVsb3cuXG4gIC52ZXJ0aWNhbChAc3RhcnQtY29sb3I6ICM1NTU7IEBlbmQtY29sb3I6ICMzMzM7IEBzdGFydC1wZXJjZW50OiAwJTsgQGVuZC1wZXJjZW50OiAxMDAlKSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCBAc3RhcnQtY29sb3IgQHN0YXJ0LXBlcmNlbnQsIEBlbmQtY29sb3IgQGVuZC1wZXJjZW50KTsgIC8vIFNhZmFyaSA1LjEtNiwgQ2hyb21lIDEwK1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsIEBzdGFydC1jb2xvciBAc3RhcnQtcGVyY2VudCwgQGVuZC1jb2xvciBAZW5kLXBlcmNlbnQpOyAgLy8gT3BlcmEgMTJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCBAc3RhcnQtY29sb3IgQHN0YXJ0LXBlcmNlbnQsIEBlbmQtY29sb3IgQGVuZC1wZXJjZW50KTsgLy8gU3RhbmRhcmQsIElFMTAsIEZpcmVmb3ggMTYrLCBPcGVyYSAxMi4xMCssIFNhZmFyaSA3KywgQ2hyb21lIDI2K1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbiAgICBmaWx0ZXI6IGUoJShcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSclZCcsIGVuZENvbG9yc3RyPSclZCcsIEdyYWRpZW50VHlwZT0wKVwiLGFyZ2IoQHN0YXJ0LWNvbG9yKSxhcmdiKEBlbmQtY29sb3IpKSk7IC8vIElFOSBhbmQgZG93blxuICB9XG5cbiAgLmRpcmVjdGlvbmFsKEBzdGFydC1jb2xvcjogIzU1NTsgQGVuZC1jb2xvcjogIzMzMzsgQGRlZzogNDVkZWcpIHtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoQGRlZywgQHN0YXJ0LWNvbG9yLCBAZW5kLWNvbG9yKTsgLy8gU2FmYXJpIDUuMS02LCBDaHJvbWUgMTArXG4gICAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KEBkZWcsIEBzdGFydC1jb2xvciwgQGVuZC1jb2xvcik7IC8vIE9wZXJhIDEyXG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KEBkZWcsIEBzdGFydC1jb2xvciwgQGVuZC1jb2xvcik7IC8vIFN0YW5kYXJkLCBJRTEwLCBGaXJlZm94IDE2KywgT3BlcmEgMTIuMTArLCBTYWZhcmkgNyssIENocm9tZSAyNitcbiAgfVxuICAuaG9yaXpvbnRhbC10aHJlZS1jb2xvcnMoQHN0YXJ0LWNvbG9yOiAjMDBiM2VlOyBAbWlkLWNvbG9yOiAjN2E0M2I2OyBAY29sb3Itc3RvcDogNTAlOyBAZW5kLWNvbG9yOiAjYzMzMjVmKSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCwgQHN0YXJ0LWNvbG9yLCBAbWlkLWNvbG9yIEBjb2xvci1zdG9wLCBAZW5kLWNvbG9yKTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQobGVmdCwgQHN0YXJ0LWNvbG9yLCBAbWlkLWNvbG9yIEBjb2xvci1zdG9wLCBAZW5kLWNvbG9yKTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIEBzdGFydC1jb2xvciwgQG1pZC1jb2xvciBAY29sb3Itc3RvcCwgQGVuZC1jb2xvcik7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBmaWx0ZXI6IGUoJShcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSclZCcsIGVuZENvbG9yc3RyPSclZCcsIEdyYWRpZW50VHlwZT0xKVwiLGFyZ2IoQHN0YXJ0LWNvbG9yKSxhcmdiKEBlbmQtY29sb3IpKSk7IC8vIElFOSBhbmQgZG93biwgZ2V0cyBubyBjb2xvci1zdG9wIGF0IGFsbCBmb3IgcHJvcGVyIGZhbGxiYWNrXG4gIH1cbiAgLnZlcnRpY2FsLXRocmVlLWNvbG9ycyhAc3RhcnQtY29sb3I6ICMwMGIzZWU7IEBtaWQtY29sb3I6ICM3YTQzYjY7IEBjb2xvci1zdG9wOiA1MCU7IEBlbmQtY29sb3I6ICNjMzMyNWYpIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChAc3RhcnQtY29sb3IsIEBtaWQtY29sb3IgQGNvbG9yLXN0b3AsIEBlbmQtY29sb3IpO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChAc3RhcnQtY29sb3IsIEBtaWQtY29sb3IgQGNvbG9yLXN0b3AsIEBlbmQtY29sb3IpO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChAc3RhcnQtY29sb3IsIEBtaWQtY29sb3IgQGNvbG9yLXN0b3AsIEBlbmQtY29sb3IpO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgZmlsdGVyOiBlKCUoXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nJWQnLCBlbmRDb2xvcnN0cj0nJWQnLCBHcmFkaWVudFR5cGU9MClcIixhcmdiKEBzdGFydC1jb2xvciksYXJnYihAZW5kLWNvbG9yKSkpOyAvLyBJRTkgYW5kIGRvd24sIGdldHMgbm8gY29sb3Itc3RvcCBhdCBhbGwgZm9yIHByb3BlciBmYWxsYmFja1xuICB9XG4gIC5yYWRpYWwoQGlubmVyLWNvbG9yOiAjNTU1OyBAb3V0ZXItY29sb3I6ICMzMzMpIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LXJhZGlhbC1ncmFkaWVudChjaXJjbGUsIEBpbm5lci1jb2xvciwgQG91dGVyLWNvbG9yKTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCBAaW5uZXItY29sb3IsIEBvdXRlci1jb2xvcik7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgfVxuICAuc3RyaXBlZChAY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjE1KTsgQGFuZ2xlOiA0NWRlZykge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KEBhbmdsZSwgQGNvbG9yIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIEBjb2xvciA1MCUsIEBjb2xvciA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChAYW5nbGUsIEBjb2xvciAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCBAY29sb3IgNTAlLCBAY29sb3IgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoQGFuZ2xlLCBAY29sb3IgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgQGNvbG9yIDUwJSwgQGNvbG9yIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIH1cbn1cbiIsIi8vIFByb2dyZXNzIGJhcnNcblxuLnByb2dyZXNzLWJhci12YXJpYW50KEBjb2xvcikge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAY29sb3I7XG5cbiAgLy8gRGVwcmVjYXRlZCBwYXJlbnQgY2xhc3MgcmVxdWlyZW1lbnQgYXMgb2YgdjMuMi4wXG4gIC5wcm9ncmVzcy1zdHJpcGVkICYge1xuICAgICNncmFkaWVudCA+IC5zdHJpcGVkKCk7XG4gIH1cbn1cbiIsIi5tZWRpYSB7XG4gIC8vIFByb3BlciBzcGFjaW5nIGJldHdlZW4gaW5zdGFuY2VzIG9mIC5tZWRpYVxuICBtYXJnaW4tdG9wOiAxNXB4O1xuXG4gICY6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cbn1cblxuLm1lZGlhLFxuLm1lZGlhLWJvZHkge1xuICB6b29tOiAxO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ubWVkaWEtYm9keSB7XG4gIHdpZHRoOiAxMDAwMHB4O1xufVxuXG4ubWVkaWEtb2JqZWN0IHtcbiAgZGlzcGxheTogYmxvY2s7XG5cbiAgLy8gRml4IGNvbGxhcHNlIGluIHdlYmtpdCBmcm9tIG1heC13aWR0aDogMTAwJSBhbmQgZGlzcGxheTogdGFibGUtY2VsbC5cbiAgJi5pbWctdGh1bWJuYWlsIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gIH1cbn1cblxuLm1lZGlhLXJpZ2h0LFxuLm1lZGlhID4gLnB1bGwtcmlnaHQge1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG59XG5cbi5tZWRpYS1sZWZ0LFxuLm1lZGlhID4gLnB1bGwtbGVmdCB7XG4gIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG59XG5cbi5tZWRpYS1sZWZ0LFxuLm1lZGlhLXJpZ2h0LFxuLm1lZGlhLWJvZHkge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuXG4ubWVkaWEtbWlkZGxlIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLm1lZGlhLWJvdHRvbSB7XG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG59XG5cbi8vIFJlc2V0IG1hcmdpbnMgb24gaGVhZGluZ3MgZm9yIHRpZ2h0ZXIgZGVmYXVsdCBzcGFjaW5nXG4ubWVkaWEtaGVhZGluZyB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cblxuLy8gTWVkaWEgbGlzdCB2YXJpYXRpb25cbi8vXG4vLyBVbmRvIGRlZmF1bHQgdWwvb2wgc3R5bGVzXG4ubWVkaWEtbGlzdCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbiIsIi8vXG4vLyBMaXN0IGdyb3Vwc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBCYXNlIGNsYXNzXG4vL1xuLy8gRWFzaWx5IHVzYWJsZSBvbiA8dWw+LCA8b2w+LCBvciA8ZGl2Pi5cblxuLmxpc3QtZ3JvdXAge1xuICAvLyBObyBuZWVkIHRvIHNldCBsaXN0LXN0eWxlOiBub25lOyBzaW5jZSAubGlzdC1ncm91cC1pdGVtIGlzIGJsb2NrIGxldmVsXG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIHBhZGRpbmctbGVmdDogMDsgLy8gcmVzZXQgcGFkZGluZyBiZWNhdXNlIHVsIGFuZCBvbFxufVxuXG5cbi8vIEluZGl2aWR1YWwgbGlzdCBpdGVtc1xuLy9cbi8vIFVzZSBvbiBgbGlgcyBvciBgZGl2YHMgd2l0aGluIHRoZSBgLmxpc3QtZ3JvdXBgIHBhcmVudC5cblxuLmxpc3QtZ3JvdXAtaXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgLy8gUGxhY2UgdGhlIGJvcmRlciBvbiB0aGUgbGlzdCBpdGVtcyBhbmQgbmVnYXRpdmUgbWFyZ2luIHVwIGZvciBiZXR0ZXIgc3R5bGluZ1xuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAbGlzdC1ncm91cC1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgQGxpc3QtZ3JvdXAtYm9yZGVyO1xuXG4gIC8vIFJvdW5kIHRoZSBmaXJzdCBhbmQgbGFzdCBpdGVtc1xuICAmOmZpcnN0LWNoaWxkIHtcbiAgICAuYm9yZGVyLXRvcC1yYWRpdXMoQGxpc3QtZ3JvdXAtYm9yZGVyLXJhZGl1cyk7XG4gIH1cbiAgJjpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIC5ib3JkZXItYm90dG9tLXJhZGl1cyhAbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzKTtcbiAgfVxufVxuXG5cbi8vIEludGVyYWN0aXZlIGxpc3QgaXRlbXNcbi8vXG4vLyBVc2UgYW5jaG9yIG9yIGJ1dHRvbiBlbGVtZW50cyBpbnN0ZWFkIG9mIGBsaWBzIG9yIGBkaXZgcyB0byBjcmVhdGUgaW50ZXJhY3RpdmUgaXRlbXMuXG4vLyBJbmNsdWRlcyBhbiBleHRyYSBgLmFjdGl2ZWAgbW9kaWZpZXIgY2xhc3MgZm9yIHNob3dpbmcgc2VsZWN0ZWQgaXRlbXMuXG5cbmEubGlzdC1ncm91cC1pdGVtLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbSB7XG4gIGNvbG9yOiBAbGlzdC1ncm91cC1saW5rLWNvbG9yO1xuXG4gIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gICAgY29sb3I6IEBsaXN0LWdyb3VwLWxpbmstaGVhZGluZy1jb2xvcjtcbiAgfVxuXG4gIC8vIEhvdmVyIHN0YXRlXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogQGxpc3QtZ3JvdXAtbGluay1ob3Zlci1jb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbGlzdC1ncm91cC1ob3Zlci1iZztcbiAgfVxufVxuXG5idXR0b24ubGlzdC1ncm91cC1pdGVtIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi5saXN0LWdyb3VwLWl0ZW0ge1xuICAvLyBEaXNhYmxlZCBzdGF0ZVxuICAmLmRpc2FibGVkLFxuICAmLmRpc2FibGVkOmhvdmVyLFxuICAmLmRpc2FibGVkOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbGlzdC1ncm91cC1kaXNhYmxlZC1iZztcbiAgICBjb2xvcjogQGxpc3QtZ3JvdXAtZGlzYWJsZWQtY29sb3I7XG4gICAgY3Vyc29yOiBAY3Vyc29yLWRpc2FibGVkO1xuXG4gICAgLy8gRm9yY2UgY29sb3IgdG8gaW5oZXJpdCBmb3IgY3VzdG9tIGNvbnRlbnRcbiAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuICAgIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7XG4gICAgICBjb2xvcjogQGxpc3QtZ3JvdXAtZGlzYWJsZWQtdGV4dC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAvLyBBY3RpdmUgY2xhc3Mgb24gaXRlbSBpdHNlbGYsIG5vdCBwYXJlbnRcbiAgJi5hY3RpdmUsXG4gICYuYWN0aXZlOmhvdmVyLFxuICAmLmFjdGl2ZTpmb2N1cyB7XG4gICAgei1pbmRleDogMjsgLy8gUGxhY2UgYWN0aXZlIGl0ZW1zIGFib3ZlIHRoZWlyIHNpYmxpbmdzIGZvciBwcm9wZXIgYm9yZGVyIHN0eWxpbmdcbiAgICBjb2xvcjogQGxpc3QtZ3JvdXAtYWN0aXZlLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEBsaXN0LWdyb3VwLWFjdGl2ZS1iZztcbiAgICBib3JkZXItY29sb3I6IEBsaXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXI7XG5cbiAgICAvLyBGb3JjZSBjb2xvciB0byBpbmhlcml0IGZvciBjdXN0b20gY29udGVudFxuICAgIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbiAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiBzbWFsbCxcbiAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiAuc21hbGwge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuICAgIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7XG4gICAgICBjb2xvcjogQGxpc3QtZ3JvdXAtYWN0aXZlLXRleHQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cblxuLy8gQ29udGV4dHVhbCB2YXJpYW50c1xuLy9cbi8vIEFkZCBtb2RpZmllciBjbGFzc2VzIHRvIGNoYW5nZSB0ZXh0IGFuZCBiYWNrZ3JvdW5kIGNvbG9yIG9uIGluZGl2aWR1YWwgaXRlbXMuXG4vLyBPcmdhbml6YXRpb25hbGx5LCB0aGlzIG11c3QgY29tZSBhZnRlciB0aGUgYDpob3ZlcmAgc3RhdGVzLlxuXG4ubGlzdC1ncm91cC1pdGVtLXZhcmlhbnQoc3VjY2VzczsgQHN0YXRlLXN1Y2Nlc3MtYmc7IEBzdGF0ZS1zdWNjZXNzLXRleHQpO1xuLmxpc3QtZ3JvdXAtaXRlbS12YXJpYW50KGluZm87IEBzdGF0ZS1pbmZvLWJnOyBAc3RhdGUtaW5mby10ZXh0KTtcbi5saXN0LWdyb3VwLWl0ZW0tdmFyaWFudCh3YXJuaW5nOyBAc3RhdGUtd2FybmluZy1iZzsgQHN0YXRlLXdhcm5pbmctdGV4dCk7XG4ubGlzdC1ncm91cC1pdGVtLXZhcmlhbnQoZGFuZ2VyOyBAc3RhdGUtZGFuZ2VyLWJnOyBAc3RhdGUtZGFuZ2VyLXRleHQpO1xuXG5cbi8vIEN1c3RvbSBjb250ZW50IG9wdGlvbnNcbi8vXG4vLyBFeHRyYSBjbGFzc2VzIGZvciBjcmVhdGluZyB3ZWxsLWZvcm1hdHRlZCBjb250ZW50IHdpdGhpbiBgLmxpc3QtZ3JvdXAtaXRlbWBzLlxuXG4ubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG4ubGlzdC1ncm91cC1pdGVtLXRleHQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBsaW5lLWhlaWdodDogMS4zO1xufVxuIiwiLy8gTGlzdCBHcm91cHNcblxuLmxpc3QtZ3JvdXAtaXRlbS12YXJpYW50KEBzdGF0ZTsgQGJhY2tncm91bmQ7IEBjb2xvcikge1xuICAubGlzdC1ncm91cC1pdGVtLUB7c3RhdGV9IHtcbiAgICBjb2xvcjogQGNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEBiYWNrZ3JvdW5kO1xuXG4gICAgYSYsXG4gICAgYnV0dG9uJiB7XG4gICAgICBjb2xvcjogQGNvbG9yO1xuXG4gICAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogQGNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oQGJhY2tncm91bmQsIDUlKTtcbiAgICAgIH1cbiAgICAgICYuYWN0aXZlLFxuICAgICAgJi5hY3RpdmU6aG92ZXIsXG4gICAgICAmLmFjdGl2ZTpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAY29sb3I7XG4gICAgICAgIGJvcmRlci1jb2xvcjogQGNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIFBhbmVsc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBCYXNlIGNsYXNzXG4ucGFuZWwge1xuICBtYXJnaW4tYm90dG9tOiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGJhY2tncm91bmQtY29sb3I6IEBwYW5lbC1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yYWRpdXM6IEBwYW5lbC1ib3JkZXItcmFkaXVzO1xuICAuYm94LXNoYWRvdygwIDFweCAxcHggcmdiYSgwLDAsMCwuMDUpKTtcbn1cblxuLy8gUGFuZWwgY29udGVudHNcbi5wYW5lbC1ib2R5IHtcbiAgcGFkZGluZzogQHBhbmVsLWJvZHktcGFkZGluZztcbiAgJjpleHRlbmQoLmNsZWFyZml4IGFsbCk7XG59XG5cbi8vIE9wdGlvbmFsIGhlYWRpbmdcbi5wYW5lbC1oZWFkaW5nIHtcbiAgcGFkZGluZzogQHBhbmVsLWhlYWRpbmctcGFkZGluZztcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAuYm9yZGVyLXRvcC1yYWRpdXMoKEBwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSkpO1xuXG4gID4gLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUge1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICB9XG59XG5cbi8vIFdpdGhpbiBoZWFkaW5nLCBzdHJpcCBhbnkgYGgqYCB0YWcgb2YgaXRzIGRlZmF1bHQgbWFyZ2lucyBmb3Igc3BhY2luZy5cbi5wYW5lbC10aXRsZSB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtc2l6ZTogY2VpbCgoQGZvbnQtc2l6ZS1iYXNlICogMS4xMjUpKTtcbiAgY29sb3I6IGluaGVyaXQ7XG5cbiAgPiBhLFxuICA+IHNtYWxsLFxuICA+IC5zbWFsbCxcbiAgPiBzbWFsbCA+IGEsXG4gID4gLnNtYWxsID4gYSB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cbn1cblxuLy8gT3B0aW9uYWwgZm9vdGVyIChzdGF5cyBncmF5IGluIGV2ZXJ5IG1vZGlmaWVyIGNsYXNzKVxuLnBhbmVsLWZvb3RlciB7XG4gIHBhZGRpbmc6IEBwYW5lbC1mb290ZXItcGFkZGluZztcbiAgYmFja2dyb3VuZC1jb2xvcjogQHBhbmVsLWZvb3Rlci1iZztcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIEBwYW5lbC1pbm5lci1ib3JkZXI7XG4gIC5ib3JkZXItYm90dG9tLXJhZGl1cygoQHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKSk7XG59XG5cblxuLy8gTGlzdCBncm91cHMgaW4gcGFuZWxzXG4vL1xuLy8gQnkgZGVmYXVsdCwgc3BhY2Ugb3V0IGxpc3QgZ3JvdXAgY29udGVudCBmcm9tIHBhbmVsIGhlYWRpbmdzIHRvIGFjY291bnQgZm9yXG4vLyBhbnkga2luZCBvZiBjdXN0b20gY29udGVudCBiZXR3ZWVuIHRoZSB0d28uXG5cbi5wYW5lbCB7XG4gID4gLmxpc3QtZ3JvdXAsXG4gID4gLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXAge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG5cbiAgICAubGlzdC1ncm91cC1pdGVtIHtcbiAgICAgIGJvcmRlci13aWR0aDogMXB4IDA7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIH1cblxuICAgIC8vIEFkZCBib3JkZXIgdG9wIHJhZGl1cyBmb3IgZmlyc3Qgb25lXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMDtcbiAgICAgICAgLmJvcmRlci10b3AtcmFkaXVzKChAcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgYm9yZGVyIGJvdHRvbSByYWRpdXMgZm9yIGxhc3Qgb25lXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgIC5ib3JkZXItYm90dG9tLXJhZGl1cygoQHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gID4gLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAubGlzdC1ncm91cCB7XG4gICAgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XG4gICAgICAuYm9yZGVyLXRvcC1yYWRpdXMoMCk7XG4gICAgfVxuICB9XG59XG4vLyBDb2xsYXBzZSBzcGFjZSBiZXR3ZWVuIHdoZW4gdGhlcmUncyBubyBhZGRpdGlvbmFsIGNvbnRlbnQuXG4ucGFuZWwtaGVhZGluZyArIC5saXN0LWdyb3VwIHtcbiAgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXRvcC13aWR0aDogMDtcbiAgfVxufVxuLmxpc3QtZ3JvdXAgKyAucGFuZWwtZm9vdGVyIHtcbiAgYm9yZGVyLXRvcC13aWR0aDogMDtcbn1cblxuLy8gVGFibGVzIGluIHBhbmVsc1xuLy9cbi8vIFBsYWNlIGEgbm9uLWJvcmRlcmVkIGAudGFibGVgIHdpdGhpbiBhIHBhbmVsIChub3Qgd2l0aGluIGEgYC5wYW5lbC1ib2R5YCkgYW5kXG4vLyB3YXRjaCBpdCBnbyBmdWxsIHdpZHRoLlxuXG4ucGFuZWwge1xuICA+IC50YWJsZSxcbiAgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSxcbiAgPiAucGFuZWwtY29sbGFwc2UgPiAudGFibGUge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG5cbiAgICBjYXB0aW9uIHtcbiAgICAgIHBhZGRpbmctbGVmdDogQHBhbmVsLWJvZHktcGFkZGluZztcbiAgICAgIHBhZGRpbmctcmlnaHQ6IEBwYW5lbC1ib2R5LXBhZGRpbmc7XG4gICAgfVxuICB9XG4gIC8vIEFkZCBib3JkZXIgdG9wIHJhZGl1cyBmb3IgZmlyc3Qgb25lXG4gID4gLnRhYmxlOmZpcnN0LWNoaWxkLFxuICA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkIHtcbiAgICAuYm9yZGVyLXRvcC1yYWRpdXMoKEBwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSkpO1xuXG4gICAgPiB0aGVhZDpmaXJzdC1jaGlsZCxcbiAgICA+IHRib2R5OmZpcnN0LWNoaWxkIHtcbiAgICAgID4gdHI6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAoQHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKTtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IChAcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpO1xuXG4gICAgICAgIHRkOmZpcnN0LWNoaWxkLFxuICAgICAgICB0aDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogKEBwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGQ6bGFzdC1jaGlsZCxcbiAgICAgICAgdGg6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IChAcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEFkZCBib3JkZXIgYm90dG9tIHJhZGl1cyBmb3IgbGFzdCBvbmVcbiAgPiAudGFibGU6bGFzdC1jaGlsZCxcbiAgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQge1xuICAgIC5ib3JkZXItYm90dG9tLXJhZGl1cygoQHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKSk7XG5cbiAgICA+IHRib2R5Omxhc3QtY2hpbGQsXG4gICAgPiB0Zm9vdDpsYXN0LWNoaWxkIHtcbiAgICAgID4gdHI6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IChAcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpO1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogKEBwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSk7XG5cbiAgICAgICAgdGQ6Zmlyc3QtY2hpbGQsXG4gICAgICAgIHRoOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAoQHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKTtcbiAgICAgICAgfVxuICAgICAgICB0ZDpsYXN0LWNoaWxkLFxuICAgICAgICB0aDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogKEBwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgPiAucGFuZWwtYm9keSArIC50YWJsZSxcbiAgPiAucGFuZWwtYm9keSArIC50YWJsZS1yZXNwb25zaXZlLFxuICA+IC50YWJsZSArIC5wYW5lbC1ib2R5LFxuICA+IC50YWJsZS1yZXNwb25zaXZlICsgLnBhbmVsLWJvZHkge1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBAdGFibGUtYm9yZGVyLWNvbG9yO1xuICB9XG4gID4gLnRhYmxlID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0aCxcbiAgPiAudGFibGUgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRkIHtcbiAgICBib3JkZXItdG9wOiAwO1xuICB9XG4gID4gLnRhYmxlLWJvcmRlcmVkLFxuICA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkIHtcbiAgICBib3JkZXI6IDA7XG4gICAgPiB0aGVhZCxcbiAgICA+IHRib2R5LFxuICAgID4gdGZvb3Qge1xuICAgICAgPiB0ciB7XG4gICAgICAgID4gdGg6Zmlyc3QtY2hpbGQsXG4gICAgICAgID4gdGQ6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICB9XG4gICAgICAgID4gdGg6bGFzdC1jaGlsZCxcbiAgICAgICAgPiB0ZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgPiB0aGVhZCxcbiAgICA+IHRib2R5IHtcbiAgICAgID4gdHI6Zmlyc3QtY2hpbGQge1xuICAgICAgICA+IHRkLFxuICAgICAgICA+IHRoIHtcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgID4gdGJvZHksXG4gICAgPiB0Zm9vdCB7XG4gICAgICA+IHRyOmxhc3QtY2hpbGQge1xuICAgICAgICA+IHRkLFxuICAgICAgICA+IHRoIHtcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gID4gLnRhYmxlLXJlc3BvbnNpdmUge1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5cblxuLy8gQ29sbGFwc2FibGUgcGFuZWxzIChha2EsIGFjY29yZGlvbilcbi8vXG4vLyBXcmFwIGEgc2VyaWVzIG9mIHBhbmVscyBpbiBgLnBhbmVsLWdyb3VwYCB0byB0dXJuIHRoZW0gaW50byBhbiBhY2NvcmRpb24gd2l0aFxuLy8gdGhlIGhlbHAgb2Ygb3VyIGNvbGxhcHNlIEphdmFTY3JpcHQgcGx1Z2luLlxuXG4ucGFuZWwtZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG5cbiAgLy8gVGlnaHRlbiB1cCBtYXJnaW4gc28gaXQncyBvbmx5IGJldHdlZW4gcGFuZWxzXG4gIC5wYW5lbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBib3JkZXItcmFkaXVzOiBAcGFuZWwtYm9yZGVyLXJhZGl1cztcblxuICAgICsgLnBhbmVsIHtcbiAgICAgIG1hcmdpbi10b3A6IDVweDtcbiAgICB9XG4gIH1cblxuICAucGFuZWwtaGVhZGluZyB7XG4gICAgYm9yZGVyLWJvdHRvbTogMDtcblxuICAgICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHksXG4gICAgKyAucGFuZWwtY29sbGFwc2UgPiAubGlzdC1ncm91cCB7XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgQHBhbmVsLWlubmVyLWJvcmRlcjtcbiAgICB9XG4gIH1cblxuICAucGFuZWwtZm9vdGVyIHtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgICsgLnBhbmVsLWNvbGxhcHNlIC5wYW5lbC1ib2R5IHtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAcGFuZWwtaW5uZXItYm9yZGVyO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIENvbnRleHR1YWwgdmFyaWF0aW9uc1xuLnBhbmVsLWRlZmF1bHQge1xuICAucGFuZWwtdmFyaWFudChAcGFuZWwtZGVmYXVsdC1ib3JkZXI7IEBwYW5lbC1kZWZhdWx0LXRleHQ7IEBwYW5lbC1kZWZhdWx0LWhlYWRpbmctYmc7IEBwYW5lbC1kZWZhdWx0LWJvcmRlcik7XG59XG4ucGFuZWwtcHJpbWFyeSB7XG4gIC5wYW5lbC12YXJpYW50KEBwYW5lbC1wcmltYXJ5LWJvcmRlcjsgQHBhbmVsLXByaW1hcnktdGV4dDsgQHBhbmVsLXByaW1hcnktaGVhZGluZy1iZzsgQHBhbmVsLXByaW1hcnktYm9yZGVyKTtcbn1cbi5wYW5lbC1zdWNjZXNzIHtcbiAgLnBhbmVsLXZhcmlhbnQoQHBhbmVsLXN1Y2Nlc3MtYm9yZGVyOyBAcGFuZWwtc3VjY2Vzcy10ZXh0OyBAcGFuZWwtc3VjY2Vzcy1oZWFkaW5nLWJnOyBAcGFuZWwtc3VjY2Vzcy1ib3JkZXIpO1xufVxuLnBhbmVsLWluZm8ge1xuICAucGFuZWwtdmFyaWFudChAcGFuZWwtaW5mby1ib3JkZXI7IEBwYW5lbC1pbmZvLXRleHQ7IEBwYW5lbC1pbmZvLWhlYWRpbmctYmc7IEBwYW5lbC1pbmZvLWJvcmRlcik7XG59XG4ucGFuZWwtd2FybmluZyB7XG4gIC5wYW5lbC12YXJpYW50KEBwYW5lbC13YXJuaW5nLWJvcmRlcjsgQHBhbmVsLXdhcm5pbmctdGV4dDsgQHBhbmVsLXdhcm5pbmctaGVhZGluZy1iZzsgQHBhbmVsLXdhcm5pbmctYm9yZGVyKTtcbn1cbi5wYW5lbC1kYW5nZXIge1xuICAucGFuZWwtdmFyaWFudChAcGFuZWwtZGFuZ2VyLWJvcmRlcjsgQHBhbmVsLWRhbmdlci10ZXh0OyBAcGFuZWwtZGFuZ2VyLWhlYWRpbmctYmc7IEBwYW5lbC1kYW5nZXItYm9yZGVyKTtcbn1cbiIsIi8vIFBhbmVsc1xuXG4ucGFuZWwtdmFyaWFudChAYm9yZGVyOyBAaGVhZGluZy10ZXh0LWNvbG9yOyBAaGVhZGluZy1iZy1jb2xvcjsgQGhlYWRpbmctYm9yZGVyKSB7XG4gIGJvcmRlci1jb2xvcjogQGJvcmRlcjtcblxuICAmID4gLnBhbmVsLWhlYWRpbmcge1xuICAgIGNvbG9yOiBAaGVhZGluZy10ZXh0LWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEBoZWFkaW5nLWJnLWNvbG9yO1xuICAgIGJvcmRlci1jb2xvcjogQGhlYWRpbmctYm9yZGVyO1xuXG4gICAgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiBAYm9yZGVyO1xuICAgIH1cbiAgICAuYmFkZ2Uge1xuICAgICAgY29sb3I6IEBoZWFkaW5nLWJnLWNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGhlYWRpbmctdGV4dC1jb2xvcjtcbiAgICB9XG4gIH1cbiAgJiA+IC5wYW5lbC1mb290ZXIge1xuICAgICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogQGJvcmRlcjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEVtYmVkcyByZXNwb25zaXZlXG4vL1xuLy8gQ3JlZGl0OiBOaWNvbGFzIEdhbGxhZ2hlciBhbmQgU1VJVCBDU1MuXG5cbi5lbWJlZC1yZXNwb25zaXZlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgaGVpZ2h0OiAwO1xuICBwYWRkaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIC5lbWJlZC1yZXNwb25zaXZlLWl0ZW0sXG4gIGlmcmFtZSxcbiAgZW1iZWQsXG4gIG9iamVjdCxcbiAgdmlkZW8ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICBib3R0b206IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlcjogMDtcbiAgfVxufVxuXG4vLyBNb2RpZmllciBjbGFzcyBmb3IgMTY6OSBhc3BlY3QgcmF0aW9cbi5lbWJlZC1yZXNwb25zaXZlLTE2Ynk5IHtcbiAgcGFkZGluZy1ib3R0b206IDU2LjI1JTtcbn1cblxuLy8gTW9kaWZpZXIgY2xhc3MgZm9yIDQ6MyBhc3BlY3QgcmF0aW9cbi5lbWJlZC1yZXNwb25zaXZlLTRieTMge1xuICBwYWRkaW5nLWJvdHRvbTogNzUlO1xufVxuIiwiLy9cbi8vIFdlbGxzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIEJhc2UgY2xhc3Ncbi53ZWxsIHtcbiAgbWluLWhlaWdodDogMjBweDtcbiAgcGFkZGluZzogMTlweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogQHdlbGwtYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkIEB3ZWxsLWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtYmFzZTtcbiAgLmJveC1zaGFkb3coaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA1KSk7XG4gIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlci1jb2xvcjogI2RkZDtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMCwwLDAsLjE1KTtcbiAgfVxufVxuXG4vLyBTaXplc1xuLndlbGwtbGcge1xuICBwYWRkaW5nOiAyNHB4O1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1sYXJnZTtcbn1cbi53ZWxsLXNtIHtcbiAgcGFkZGluZzogOXB4O1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1zbWFsbDtcbn1cbiIsIi8vXG4vLyBDbG9zZSBpY29uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4uY2xvc2Uge1xuICBmbG9hdDogcmlnaHQ7XG4gIGZvbnQtc2l6ZTogKEBmb250LXNpemUtYmFzZSAqIDEuNSk7XG4gIGZvbnQtd2VpZ2h0OiBAY2xvc2UtZm9udC13ZWlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogQGNsb3NlLWNvbG9yO1xuICB0ZXh0LXNoYWRvdzogQGNsb3NlLXRleHQtc2hhZG93O1xuICAub3BhY2l0eSguMik7XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6IEBjbG9zZS1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIC5vcGFjaXR5KC41KTtcbiAgfVxuXG4gIC8vIEFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgYnV0dG9uIHZlcnNpb25cbiAgLy8gaU9TIHJlcXVpcmVzIHRoZSBidXR0b24gZWxlbWVudCBpbnN0ZWFkIG9mIGFuIGFuY2hvciB0YWcuXG4gIC8vIElmIHlvdSB3YW50IHRoZSBhbmNob3IgdmVyc2lvbiwgaXQgcmVxdWlyZXMgYGhyZWY9XCIjXCJgLlxuICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL2NsaWNrI1NhZmFyaV9Nb2JpbGVcbiAgYnV0dG9uJiB7XG4gICAgcGFkZGluZzogMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiAwO1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxufVxuIiwiLy9cbi8vIE1vZGFsc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gLm1vZGFsLW9wZW4gICAgICAtIGJvZHkgY2xhc3MgZm9yIGtpbGxpbmcgdGhlIHNjcm9sbFxuLy8gLm1vZGFsICAgICAgICAgICAtIGNvbnRhaW5lciB0byBzY3JvbGwgd2l0aGluXG4vLyAubW9kYWwtZGlhbG9nICAgIC0gcG9zaXRpb25pbmcgc2hlbGwgZm9yIHRoZSBhY3R1YWwgbW9kYWxcbi8vIC5tb2RhbC1jb250ZW50ICAgLSBhY3R1YWwgbW9kYWwgdy8gYmcgYW5kIGNvcm5lcnMgYW5kIHNoaXRcblxuLy8gS2lsbCB0aGUgc2Nyb2xsIG9uIHRoZSBib2R5XG4ubW9kYWwtb3BlbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8vIENvbnRhaW5lciB0aGF0IHRoZSBtb2RhbCBzY3JvbGxzIHdpdGhpblxuLm1vZGFsIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IEB6aW5kZXgtbW9kYWw7XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcblxuICAvLyBQcmV2ZW50IENocm9tZSBvbiBXaW5kb3dzIGZyb20gYWRkaW5nIGEgZm9jdXMgb3V0bGluZS4gRm9yIGRldGFpbHMsIHNlZVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8xMDk1MS5cbiAgb3V0bGluZTogMDtcblxuICAvLyBXaGVuIGZhZGluZyBpbiB0aGUgbW9kYWwsIGFuaW1hdGUgaXQgdG8gc2xpZGUgZG93blxuICAmLmZhZGUgLm1vZGFsLWRpYWxvZyB7XG4gICAgLnRyYW5zbGF0ZSgwLCAtMjUlKTtcbiAgICAudHJhbnNpdGlvbi10cmFuc2Zvcm0oflwiMC4zcyBlYXNlLW91dFwiKTtcbiAgfVxuICAmLmluIC5tb2RhbC1kaWFsb2cgeyAudHJhbnNsYXRlKDAsIDApIH1cbn1cbi5tb2RhbC1vcGVuIC5tb2RhbCB7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cblxuLy8gU2hlbGwgZGl2IHRvIHBvc2l0aW9uIHRoZSBtb2RhbCB3aXRoIGJvdHRvbSBwYWRkaW5nXG4ubW9kYWwtZGlhbG9nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogYXV0bztcbiAgbWFyZ2luOiAxMHB4O1xufVxuXG4vLyBBY3R1YWwgbW9kYWxcbi5tb2RhbC1jb250ZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAbW9kYWwtY29udGVudC1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgQG1vZGFsLWNvbnRlbnQtZmFsbGJhY2stYm9yZGVyLWNvbG9yOyAvL29sZCBicm93c2VycyBmYWxsYmFjayAoaWU4IGV0YylcbiAgYm9yZGVyOiAxcHggc29saWQgQG1vZGFsLWNvbnRlbnQtYm9yZGVyLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1sYXJnZTtcbiAgLmJveC1zaGFkb3coMCAzcHggOXB4IHJnYmEoMCwwLDAsLjUpKTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgLy8gUmVtb3ZlIGZvY3VzIG91dGxpbmUgZnJvbSBvcGVuZWQgbW9kYWxcbiAgb3V0bGluZTogMDtcbn1cblxuLy8gTW9kYWwgYmFja2dyb3VuZFxuLm1vZGFsLWJhY2tkcm9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IEB6aW5kZXgtbW9kYWwtYmFja2dyb3VuZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogQG1vZGFsLWJhY2tkcm9wLWJnO1xuICAvLyBGYWRlIGZvciBiYWNrZHJvcFxuICAmLmZhZGUgeyAub3BhY2l0eSgwKTsgfVxuICAmLmluIHsgLm9wYWNpdHkoQG1vZGFsLWJhY2tkcm9wLW9wYWNpdHkpOyB9XG59XG5cbi8vIE1vZGFsIGhlYWRlclxuLy8gVG9wIHNlY3Rpb24gb2YgdGhlIG1vZGFsIHcvIHRpdGxlIGFuZCBkaXNtaXNzXG4ubW9kYWwtaGVhZGVyIHtcbiAgcGFkZGluZzogQG1vZGFsLXRpdGxlLXBhZGRpbmc7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjtcbiAgbWluLWhlaWdodDogKEBtb2RhbC10aXRsZS1wYWRkaW5nICsgQG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0KTtcbn1cbi8vIENsb3NlIGljb25cbi5tb2RhbC1oZWFkZXIgLmNsb3NlIHtcbiAgbWFyZ2luLXRvcDogLTJweDtcbn1cblxuLy8gVGl0bGUgdGV4dCB3aXRoaW4gaGVhZGVyXG4ubW9kYWwtdGl0bGUge1xuICBtYXJnaW46IDA7XG4gIGxpbmUtaGVpZ2h0OiBAbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ7XG59XG5cbi8vIE1vZGFsIGJvZHlcbi8vIFdoZXJlIGFsbCBtb2RhbCBjb250ZW50IHJlc2lkZXMgKHNpYmxpbmcgb2YgLm1vZGFsLWhlYWRlciBhbmQgLm1vZGFsLWZvb3Rlcilcbi5tb2RhbC1ib2R5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiBAbW9kYWwtaW5uZXItcGFkZGluZztcbn1cblxuLy8gRm9vdGVyIChmb3IgYWN0aW9ucylcbi5tb2RhbC1mb290ZXIge1xuICBwYWRkaW5nOiBAbW9kYWwtaW5uZXItcGFkZGluZztcbiAgdGV4dC1hbGlnbjogcmlnaHQ7IC8vIHJpZ2h0IGFsaWduIGJ1dHRvbnNcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIEBtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yO1xuICAmOmV4dGVuZCguY2xlYXJmaXggYWxsKTsgLy8gY2xlYXIgaXQgaW4gY2FzZSBmb2xrcyB1c2UgLnB1bGwtKiBjbGFzc2VzIG9uIGJ1dHRvbnNcblxuICAvLyBQcm9wZXJseSBzcGFjZSBvdXQgYnV0dG9uc1xuICAuYnRuICsgLmJ0biB7XG4gICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICBtYXJnaW4tYm90dG9tOiAwOyAvLyBhY2NvdW50IGZvciBpbnB1dFt0eXBlPVwic3VibWl0XCJdIHdoaWNoIGdldHMgdGhlIGJvdHRvbSBtYXJnaW4gbGlrZSBhbGwgb3RoZXIgaW5wdXRzXG4gIH1cbiAgLy8gYnV0IG92ZXJyaWRlIHRoYXQgZm9yIGJ1dHRvbiBncm91cHNcbiAgLmJ0bi1ncm91cCAuYnRuICsgLmJ0biB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gIH1cbiAgLy8gYW5kIG92ZXJyaWRlIGl0IGZvciBibG9jayBidXR0b25zIGFzIHdlbGxcbiAgLmJ0bi1ibG9jayArIC5idG4tYmxvY2sge1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICB9XG59XG5cbi8vIE1lYXN1cmUgc2Nyb2xsYmFyIHdpZHRoIGZvciBwYWRkaW5nIGJvZHkgZHVyaW5nIG1vZGFsIHNob3cvaGlkZVxuLm1vZGFsLXNjcm9sbGJhci1tZWFzdXJlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC05OTk5cHg7XG4gIHdpZHRoOiA1MHB4O1xuICBoZWlnaHQ6IDUwcHg7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG59XG5cbi8vIFNjYWxlIHVwIHRoZSBtb2RhbFxuQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XG4gIC8vIEF1dG9tYXRpY2FsbHkgc2V0IG1vZGFsJ3Mgd2lkdGggZm9yIGxhcmdlciB2aWV3cG9ydHNcbiAgLm1vZGFsLWRpYWxvZyB7XG4gICAgd2lkdGg6IEBtb2RhbC1tZDtcbiAgICBtYXJnaW46IDMwcHggYXV0bztcbiAgfVxuICAubW9kYWwtY29udGVudCB7XG4gICAgLmJveC1zaGFkb3coMCA1cHggMTVweCByZ2JhKDAsMCwwLC41KSk7XG4gIH1cblxuICAvLyBNb2RhbCBzaXplc1xuICAubW9kYWwtc20geyB3aWR0aDogQG1vZGFsLXNtOyB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLW1kLW1pbikge1xuICAubW9kYWwtbGcgeyB3aWR0aDogQG1vZGFsLWxnOyB9XG59XG4iLCIvL1xuLy8gVG9vbHRpcHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBjbGFzc1xuLnRvb2x0aXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IEB6aW5kZXgtdG9vbHRpcDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIC8vIE91ciBwYXJlbnQgZWxlbWVudCBjYW4gYmUgYXJiaXRyYXJ5IHNpbmNlIHRvb2x0aXBzIGFyZSBieSBkZWZhdWx0IGluc2VydGVkIGFzIGEgc2libGluZyBvZiB0aGVpciB0YXJnZXQgZWxlbWVudC5cbiAgLy8gU28gcmVzZXQgb3VyIGZvbnQgYW5kIHRleHQgcHJvcGVydGllcyB0byBhdm9pZCBpbmhlcml0aW5nIHdlaXJkIHZhbHVlcy5cbiAgLnJlc2V0LXRleHQoKTtcbiAgZm9udC1zaXplOiBAZm9udC1zaXplLXNtYWxsO1xuXG4gIC5vcGFjaXR5KDApO1xuXG4gICYuaW4gICAgIHsgLm9wYWNpdHkoQHRvb2x0aXAtb3BhY2l0eSk7IH1cbiAgJi50b3AgICAgeyBtYXJnaW4tdG9wOiAgLTNweDsgcGFkZGluZzogQHRvb2x0aXAtYXJyb3ctd2lkdGggMDsgfVxuICAmLnJpZ2h0ICB7IG1hcmdpbi1sZWZ0OiAgM3B4OyBwYWRkaW5nOiAwIEB0b29sdGlwLWFycm93LXdpZHRoOyB9XG4gICYuYm90dG9tIHsgbWFyZ2luLXRvcDogICAzcHg7IHBhZGRpbmc6IEB0b29sdGlwLWFycm93LXdpZHRoIDA7IH1cbiAgJi5sZWZ0ICAgeyBtYXJnaW4tbGVmdDogLTNweDsgcGFkZGluZzogMCBAdG9vbHRpcC1hcnJvdy13aWR0aDsgfVxufVxuXG4vLyBXcmFwcGVyIGZvciB0aGUgdG9vbHRpcCBjb250ZW50XG4udG9vbHRpcC1pbm5lciB7XG4gIG1heC13aWR0aDogQHRvb2x0aXAtbWF4LXdpZHRoO1xuICBwYWRkaW5nOiAzcHggOHB4O1xuICBjb2xvcjogQHRvb2x0aXAtY29sb3I7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogQHRvb2x0aXAtYmc7XG4gIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWJhc2U7XG59XG5cbi8vIEFycm93c1xuLnRvb2x0aXAtYXJyb3cge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG4vLyBOb3RlOiBEZXByZWNhdGVkIC50b3AtbGVmdCwgLnRvcC1yaWdodCwgLmJvdHRvbS1sZWZ0LCBhbmQgLmJvdHRvbS1yaWdodCBhcyBvZiB2My4zLjFcbi50b29sdGlwIHtcbiAgJi50b3AgLnRvb2x0aXAtYXJyb3cge1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgbWFyZ2luLWxlZnQ6IC1AdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItd2lkdGg6IEB0b29sdGlwLWFycm93LXdpZHRoIEB0b29sdGlwLWFycm93LXdpZHRoIDA7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogQHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbiAgJi50b3AtbGVmdCAudG9vbHRpcC1hcnJvdyB7XG4gICAgYm90dG9tOiAwO1xuICAgIHJpZ2h0OiBAdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBtYXJnaW4tYm90dG9tOiAtQHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiBAdG9vbHRpcC1hcnJvdy13aWR0aCBAdG9vbHRpcC1hcnJvdy13aWR0aCAwO1xuICAgIGJvcmRlci10b3AtY29sb3I6IEB0b29sdGlwLWFycm93LWNvbG9yO1xuICB9XG4gICYudG9wLXJpZ2h0IC50b29sdGlwLWFycm93IHtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogQHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgbWFyZ2luLWJvdHRvbTogLUB0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci13aWR0aDogQHRvb2x0aXAtYXJyb3ctd2lkdGggQHRvb2x0aXAtYXJyb3ctd2lkdGggMDtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBAdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxuICAmLnJpZ2h0IC50b29sdGlwLWFycm93IHtcbiAgICB0b3A6IDUwJTtcbiAgICBsZWZ0OiAwO1xuICAgIG1hcmdpbi10b3A6IC1AdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItd2lkdGg6IEB0b29sdGlwLWFycm93LXdpZHRoIEB0b29sdGlwLWFycm93LXdpZHRoIEB0b29sdGlwLWFycm93LXdpZHRoIDA7XG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiBAdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxuICAmLmxlZnQgLnRvb2x0aXAtYXJyb3cge1xuICAgIHRvcDogNTAlO1xuICAgIHJpZ2h0OiAwO1xuICAgIG1hcmdpbi10b3A6IC1AdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItd2lkdGg6IEB0b29sdGlwLWFycm93LXdpZHRoIDAgQHRvb2x0aXAtYXJyb3ctd2lkdGggQHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLWxlZnQtY29sb3I6IEB0b29sdGlwLWFycm93LWNvbG9yO1xuICB9XG4gICYuYm90dG9tIC50b29sdGlwLWFycm93IHtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogNTAlO1xuICAgIG1hcmdpbi1sZWZ0OiAtQHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiAwIEB0b29sdGlwLWFycm93LXdpZHRoIEB0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IEB0b29sdGlwLWFycm93LWNvbG9yO1xuICB9XG4gICYuYm90dG9tLWxlZnQgLnRvb2x0aXAtYXJyb3cge1xuICAgIHRvcDogMDtcbiAgICByaWdodDogQHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgbWFyZ2luLXRvcDogLUB0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci13aWR0aDogMCBAdG9vbHRpcC1hcnJvdy13aWR0aCBAdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiBAdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxuICAmLmJvdHRvbS1yaWdodCAudG9vbHRpcC1hcnJvdyB7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IEB0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIG1hcmdpbi10b3A6IC1AdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItd2lkdGg6IDAgQHRvb2x0aXAtYXJyb3ctd2lkdGggQHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogQHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbn1cbiIsIi5yZXNldC10ZXh0KCkge1xuICBmb250LWZhbWlseTogQGZvbnQtZmFtaWx5LWJhc2U7XG4gIC8vIFdlIGRlbGliZXJhdGVseSBkbyBOT1QgcmVzZXQgZm9udC1zaXplLlxuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XG4gIGxpbmUtYnJlYWs6IGF1dG87XG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcbiAgdGV4dC1hbGlnbjogbGVmdDsgLy8gRmFsbGJhY2sgZm9yIHdoZXJlIGBzdGFydGAgaXMgbm90IHN1cHBvcnRlZFxuICB0ZXh0LWFsaWduOiBzdGFydDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB0ZXh0LXNoYWRvdzogbm9uZTtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gIHdvcmQtYnJlYWs6IG5vcm1hbDtcbiAgd29yZC1zcGFjaW5nOiBub3JtYWw7XG4gIHdvcmQtd3JhcDogbm9ybWFsO1xufVxuIiwiLy9cbi8vIFBvcG92ZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi5wb3BvdmVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IEB6aW5kZXgtcG9wb3ZlcjtcbiAgZGlzcGxheTogbm9uZTtcbiAgbWF4LXdpZHRoOiBAcG9wb3Zlci1tYXgtd2lkdGg7XG4gIHBhZGRpbmc6IDFweDtcbiAgLy8gT3VyIHBhcmVudCBlbGVtZW50IGNhbiBiZSBhcmJpdHJhcnkgc2luY2UgcG9wb3ZlcnMgYXJlIGJ5IGRlZmF1bHQgaW5zZXJ0ZWQgYXMgYSBzaWJsaW5nIG9mIHRoZWlyIHRhcmdldCBlbGVtZW50LlxuICAvLyBTbyByZXNldCBvdXIgZm9udCBhbmQgdGV4dCBwcm9wZXJ0aWVzIHRvIGF2b2lkIGluaGVyaXRpbmcgd2VpcmQgdmFsdWVzLlxuICAucmVzZXQtdGV4dCgpO1xuICBmb250LXNpemU6IEBmb250LXNpemUtYmFzZTtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAcG9wb3Zlci1iZztcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgYm9yZGVyOiAxcHggc29saWQgQHBvcG92ZXItZmFsbGJhY2stYm9yZGVyLWNvbG9yO1xuICBib3JkZXI6IDFweCBzb2xpZCBAcG9wb3Zlci1ib3JkZXItY29sb3I7XG4gIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWxhcmdlO1xuICAuYm94LXNoYWRvdygwIDVweCAxMHB4IHJnYmEoMCwwLDAsLjIpKTtcblxuICAvLyBPZmZzZXQgdGhlIHBvcG92ZXIgdG8gYWNjb3VudCBmb3IgdGhlIHBvcG92ZXIgYXJyb3dcbiAgJi50b3AgICAgIHsgbWFyZ2luLXRvcDogLUBwb3BvdmVyLWFycm93LXdpZHRoOyB9XG4gICYucmlnaHQgICB7IG1hcmdpbi1sZWZ0OiBAcG9wb3Zlci1hcnJvdy13aWR0aDsgfVxuICAmLmJvdHRvbSAgeyBtYXJnaW4tdG9wOiBAcG9wb3Zlci1hcnJvdy13aWR0aDsgfVxuICAmLmxlZnQgICAgeyBtYXJnaW4tbGVmdDogLUBwb3BvdmVyLWFycm93LXdpZHRoOyB9XG59XG5cbi5wb3BvdmVyLXRpdGxlIHtcbiAgbWFyZ2luOiAwOyAvLyByZXNldCBoZWFkaW5nIG1hcmdpblxuICBwYWRkaW5nOiA4cHggMTRweDtcbiAgZm9udC1zaXplOiBAZm9udC1zaXplLWJhc2U7XG4gIGJhY2tncm91bmQtY29sb3I6IEBwb3BvdmVyLXRpdGxlLWJnO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgZGFya2VuKEBwb3BvdmVyLXRpdGxlLWJnLCA1JSk7XG4gIGJvcmRlci1yYWRpdXM6IChAYm9yZGVyLXJhZGl1cy1sYXJnZSAtIDEpIChAYm9yZGVyLXJhZGl1cy1sYXJnZSAtIDEpIDAgMDtcbn1cblxuLnBvcG92ZXItY29udGVudCB7XG4gIHBhZGRpbmc6IDlweCAxNHB4O1xufVxuXG4vLyBBcnJvd3Ncbi8vXG4vLyAuYXJyb3cgaXMgb3V0ZXIsIC5hcnJvdzphZnRlciBpcyBpbm5lclxuXG4ucG9wb3ZlciA+IC5hcnJvdyB7XG4gICYsXG4gICY6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMDtcbiAgICBoZWlnaHQ6IDA7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICB9XG59XG4ucG9wb3ZlciA+IC5hcnJvdyB7XG4gIGJvcmRlci13aWR0aDogQHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XG59XG4ucG9wb3ZlciA+IC5hcnJvdzphZnRlciB7XG4gIGJvcmRlci13aWR0aDogQHBvcG92ZXItYXJyb3ctd2lkdGg7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5cbi5wb3BvdmVyIHtcbiAgJi50b3AgPiAuYXJyb3cge1xuICAgIGxlZnQ6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogLUBwb3BvdmVyLWFycm93LW91dGVyLXdpZHRoO1xuICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogQHBvcG92ZXItYXJyb3ctb3V0ZXItZmFsbGJhY2stY29sb3I7IC8vIElFOCBmYWxsYmFja1xuICAgIGJvcmRlci10b3AtY29sb3I6IEBwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yO1xuICAgIGJvdHRvbTogLUBwb3BvdmVyLWFycm93LW91dGVyLXdpZHRoO1xuICAgICY6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCIgXCI7XG4gICAgICBib3R0b206IDFweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtQHBvcG92ZXItYXJyb3ctd2lkdGg7XG4gICAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogQHBvcG92ZXItYXJyb3ctY29sb3I7XG4gICAgfVxuICB9XG4gICYucmlnaHQgPiAuYXJyb3cge1xuICAgIHRvcDogNTAlO1xuICAgIGxlZnQ6IC1AcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDtcbiAgICBtYXJnaW4tdG9wOiAtQHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XG4gICAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7XG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiBAcG9wb3Zlci1hcnJvdy1vdXRlci1mYWxsYmFjay1jb2xvcjsgLy8gSUU4IGZhbGxiYWNrXG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiBAcG9wb3Zlci1hcnJvdy1vdXRlci1jb2xvcjtcbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgbGVmdDogMXB4O1xuICAgICAgYm90dG9tOiAtQHBvcG92ZXItYXJyb3ctd2lkdGg7XG4gICAgICBib3JkZXItbGVmdC13aWR0aDogMDtcbiAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogQHBvcG92ZXItYXJyb3ctY29sb3I7XG4gICAgfVxuICB9XG4gICYuYm90dG9tID4gLmFycm93IHtcbiAgICBsZWZ0OiA1MCU7XG4gICAgbWFyZ2luLWxlZnQ6IC1AcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDtcbiAgICBib3JkZXItdG9wLXdpZHRoOiAwO1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IEBwb3BvdmVyLWFycm93LW91dGVyLWZhbGxiYWNrLWNvbG9yOyAvLyBJRTggZmFsbGJhY2tcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiBAcG9wb3Zlci1hcnJvdy1vdXRlci1jb2xvcjtcbiAgICB0b3A6IC1AcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDtcbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgdG9wOiAxcHg7XG4gICAgICBtYXJnaW4tbGVmdDogLUBwb3BvdmVyLWFycm93LXdpZHRoO1xuICAgICAgYm9yZGVyLXRvcC13aWR0aDogMDtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IEBwb3BvdmVyLWFycm93LWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gICYubGVmdCA+IC5hcnJvdyB7XG4gICAgdG9wOiA1MCU7XG4gICAgcmlnaHQ6IC1AcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDtcbiAgICBtYXJnaW4tdG9wOiAtQHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XG4gICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBAcG9wb3Zlci1hcnJvdy1vdXRlci1mYWxsYmFjay1jb2xvcjsgLy8gSUU4IGZhbGxiYWNrXG4gICAgYm9yZGVyLWxlZnQtY29sb3I6IEBwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yO1xuICAgICY6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCIgXCI7XG4gICAgICByaWdodDogMXB4O1xuICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IEBwb3BvdmVyLWFycm93LWNvbG9yO1xuICAgICAgYm90dG9tOiAtQHBvcG92ZXItYXJyb3ctd2lkdGg7XG4gICAgfVxuICB9XG59XG4iLCIvL1xuLy8gQ2Fyb3VzZWxcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gV3JhcHBlciBmb3IgdGhlIHNsaWRlIGNvbnRhaW5lciBhbmQgaW5kaWNhdG9yc1xuLmNhcm91c2VsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHdpZHRoOiAxMDAlO1xuXG4gID4gLml0ZW0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIC50cmFuc2l0aW9uKC42cyBlYXNlLWluLW91dCBsZWZ0KTtcblxuICAgIC8vIEFjY291bnQgZm9yIGphbmtpdHVkZSBvbiBpbWFnZXNcbiAgICA+IGltZyxcbiAgICA+IGEgPiBpbWcge1xuICAgICAgJjpleHRlbmQoLmltZy1yZXNwb25zaXZlKTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIH1cblxuICAgIC8vIFdlYktpdCBDU1MzIHRyYW5zZm9ybXMgZm9yIHN1cHBvcnRlZCBkZXZpY2VzXG4gICAgQG1lZGlhIGFsbCBhbmQgKHRyYW5zZm9ybS0zZCksICgtd2Via2l0LXRyYW5zZm9ybS0zZCkge1xuICAgICAgLnRyYW5zaXRpb24tdHJhbnNmb3JtKH4nMC42cyBlYXNlLWluLW91dCcpO1xuICAgICAgLmJhY2tmYWNlLXZpc2liaWxpdHkofidoaWRkZW4nKTtcbiAgICAgIC5wZXJzcGVjdGl2ZSgxMDAwcHgpO1xuXG4gICAgICAmLm5leHQsXG4gICAgICAmLmFjdGl2ZS5yaWdodCB7XG4gICAgICAgIC50cmFuc2xhdGUzZCgxMDAlLCAwLCAwKTtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgIH1cbiAgICAgICYucHJldixcbiAgICAgICYuYWN0aXZlLmxlZnQge1xuICAgICAgICAudHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgfVxuICAgICAgJi5uZXh0LmxlZnQsXG4gICAgICAmLnByZXYucmlnaHQsXG4gICAgICAmLmFjdGl2ZSB7XG4gICAgICAgIC50cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICA+IC5hY3RpdmUsXG4gID4gLm5leHQsXG4gID4gLnByZXYge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgPiAuYWN0aXZlIHtcbiAgICBsZWZ0OiAwO1xuICB9XG5cbiAgPiAubmV4dCxcbiAgPiAucHJldiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gID4gLm5leHQge1xuICAgIGxlZnQ6IDEwMCU7XG4gIH1cbiAgPiAucHJldiB7XG4gICAgbGVmdDogLTEwMCU7XG4gIH1cbiAgPiAubmV4dC5sZWZ0LFxuICA+IC5wcmV2LnJpZ2h0IHtcbiAgICBsZWZ0OiAwO1xuICB9XG5cbiAgPiAuYWN0aXZlLmxlZnQge1xuICAgIGxlZnQ6IC0xMDAlO1xuICB9XG4gID4gLmFjdGl2ZS5yaWdodCB7XG4gICAgbGVmdDogMTAwJTtcbiAgfVxuXG59XG5cbi8vIExlZnQvcmlnaHQgY29udHJvbHMgZm9yIG5hdlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5jYXJvdXNlbC1jb250cm9sIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IEBjYXJvdXNlbC1jb250cm9sLXdpZHRoO1xuICAub3BhY2l0eShAY2Fyb3VzZWwtY29udHJvbC1vcGFjaXR5KTtcbiAgZm9udC1zaXplOiBAY2Fyb3VzZWwtY29udHJvbC1mb250LXNpemU7XG4gIGNvbG9yOiBAY2Fyb3VzZWwtY29udHJvbC1jb2xvcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0ZXh0LXNoYWRvdzogQGNhcm91c2VsLXRleHQtc2hhZG93O1xuICAvLyBXZSBjYW4ndCBoYXZlIHRoaXMgdHJhbnNpdGlvbiBoZXJlIGJlY2F1c2UgV2ViS2l0IGNhbmNlbHMgdGhlIGNhcm91c2VsXG4gIC8vIGFuaW1hdGlvbiBpZiB5b3UgdHJpcCB0aGlzIHdoaWxlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciBhbmltYXRpb24uXG5cbiAgLy8gU2V0IGdyYWRpZW50cyBmb3IgYmFja2dyb3VuZHNcbiAgJi5sZWZ0IHtcbiAgICAjZ3JhZGllbnQgPiAuaG9yaXpvbnRhbChAc3RhcnQtY29sb3I6IHJnYmEoMCwwLDAsLjUpOyBAZW5kLWNvbG9yOiByZ2JhKDAsMCwwLC4wMDAxKSk7XG4gIH1cbiAgJi5yaWdodCB7XG4gICAgbGVmdDogYXV0bztcbiAgICByaWdodDogMDtcbiAgICAjZ3JhZGllbnQgPiAuaG9yaXpvbnRhbChAc3RhcnQtY29sb3I6IHJnYmEoMCwwLDAsLjAwMDEpOyBAZW5kLWNvbG9yOiByZ2JhKDAsMCwwLC41KSk7XG4gIH1cblxuICAvLyBIb3Zlci9mb2N1cyBzdGF0ZVxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGNvbG9yOiBAY2Fyb3VzZWwtY29udHJvbC1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgLm9wYWNpdHkoLjkpO1xuICB9XG5cbiAgLy8gVG9nZ2xlc1xuICAuaWNvbi1wcmV2LFxuICAuaWNvbi1uZXh0LFxuICAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCxcbiAgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MCU7XG4gICAgbWFyZ2luLXRvcDogLTEwcHg7XG4gICAgei1pbmRleDogNTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIH1cbiAgLmljb24tcHJldixcbiAgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQge1xuICAgIGxlZnQ6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogLTEwcHg7XG4gIH1cbiAgLmljb24tbmV4dCxcbiAgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0IHtcbiAgICByaWdodDogNTAlO1xuICAgIG1hcmdpbi1yaWdodDogLTEwcHg7XG4gIH1cbiAgLmljb24tcHJldixcbiAgLmljb24tbmV4dCB7XG4gICAgd2lkdGg6ICAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBmb250LWZhbWlseTogc2VyaWY7XG4gIH1cblxuXG4gIC5pY29uLXByZXYge1xuICAgICY6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICdcXDIwMzknOy8vIFNJTkdMRSBMRUZULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLIChVKzIwMzkpXG4gICAgfVxuICB9XG4gIC5pY29uLW5leHQge1xuICAgICY6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICdcXDIwM2EnOy8vIFNJTkdMRSBSSUdIVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSSyAoVSsyMDNBKVxuICAgIH1cbiAgfVxufVxuXG4vLyBPcHRpb25hbCBpbmRpY2F0b3IgcGlwc1xuLy9cbi8vIEFkZCBhbiB1bm9yZGVyZWQgbGlzdCB3aXRoIHRoZSBmb2xsb3dpbmcgY2xhc3MgYW5kIGFkZCBhIGxpc3QgaXRlbSBmb3IgZWFjaFxuLy8gc2xpZGUgeW91ciBjYXJvdXNlbCBob2xkcy5cblxuLmNhcm91c2VsLWluZGljYXRvcnMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMTBweDtcbiAgbGVmdDogNTAlO1xuICB6LWluZGV4OiAxNTtcbiAgd2lkdGg6IDYwJTtcbiAgbWFyZ2luLWxlZnQ6IC0zMCU7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gIGxpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6ICAxMHB4O1xuICAgIGhlaWdodDogMTBweDtcbiAgICBtYXJnaW46IDFweDtcbiAgICB0ZXh0LWluZGVudDogLTk5OXB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIEBjYXJvdXNlbC1pbmRpY2F0b3ItYm9yZGVyLWNvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgLy8gSUU4LTkgaGFjayBmb3IgZXZlbnQgaGFuZGxpbmdcbiAgICAvL1xuICAgIC8vIEludGVybmV0IEV4cGxvcmVyIDgtOSBkb2VzIG5vdCBzdXBwb3J0IGNsaWNrcyBvbiBlbGVtZW50cyB3aXRob3V0IGEgc2V0XG4gICAgLy8gYGJhY2tncm91bmQtY29sb3JgLiBXZSBjYW5ub3QgdXNlIGBmaWx0ZXJgIHNpbmNlIHRoYXQncyBub3Qgdmlld2VkIGFzIGFcbiAgICAvLyBiYWNrZ3JvdW5kIGNvbG9yIGJ5IHRoZSBicm93c2VyLiBUaHVzLCBhIGhhY2sgaXMgbmVlZGVkLlxuICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvY2xpY2sjSW50ZXJuZXRfRXhwbG9yZXJcbiAgICAvL1xuICAgIC8vIEZvciBJRTgsIHdlIHNldCBzb2xpZCBibGFjayBhcyBpdCBkb2Vzbid0IHN1cHBvcnQgYHJnYmEoKWAuIEZvciBJRTksIHdlXG4gICAgLy8gc2V0IGFscGhhIHRyYW5zcGFyZW5jeSBmb3IgdGhlIGJlc3QgcmVzdWx0cyBwb3NzaWJsZS5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwIFxcOTsgLy8gSUU4XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAsMCwwKTsgLy8gSUU5XG4gIH1cbiAgLmFjdGl2ZSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHdpZHRoOiAgMTJweDtcbiAgICBoZWlnaHQ6IDEycHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGNhcm91c2VsLWluZGljYXRvci1hY3RpdmUtYmc7XG4gIH1cbn1cblxuLy8gT3B0aW9uYWwgY2FwdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIaWRkZW4gYnkgZGVmYXVsdCBmb3Igc21hbGxlciB2aWV3cG9ydHNcbi5jYXJvdXNlbC1jYXB0aW9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAxNSU7XG4gIHJpZ2h0OiAxNSU7XG4gIGJvdHRvbTogMjBweDtcbiAgei1pbmRleDogMTA7XG4gIHBhZGRpbmctdG9wOiAyMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgY29sb3I6IEBjYXJvdXNlbC1jYXB0aW9uLWNvbG9yO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRleHQtc2hhZG93OiBAY2Fyb3VzZWwtdGV4dC1zaGFkb3c7XG4gICYgLmJ0biB7XG4gICAgdGV4dC1zaGFkb3c6IG5vbmU7IC8vIE5vIHNoYWRvdyBmb3IgYnV0dG9uIGVsZW1lbnRzIGluIGNhcm91c2VsLWNhcHRpb25cbiAgfVxufVxuXG5cbi8vIFNjYWxlIHVwIGNvbnRyb2xzIGZvciB0YWJsZXRzIGFuZCB1cFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIHtcblxuICAvLyBTY2FsZSB1cCB0aGUgY29udHJvbHMgYSBzbWlkZ2VcbiAgLmNhcm91c2VsLWNvbnRyb2wge1xuICAgIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0LFxuICAgIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCxcbiAgICAuaWNvbi1wcmV2LFxuICAgIC5pY29uLW5leHQge1xuICAgICAgd2lkdGg6IDMwcHg7XG4gICAgICBoZWlnaHQ6IDMwcHg7XG4gICAgICBtYXJnaW4tdG9wOiAtMTVweDtcbiAgICAgIGZvbnQtc2l6ZTogMzBweDtcbiAgICB9XG4gICAgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQsXG4gICAgLmljb24tcHJldiB7XG4gICAgICBtYXJnaW4tbGVmdDogLTE1cHg7XG4gICAgfVxuICAgIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCxcbiAgICAuaWNvbi1uZXh0IHtcbiAgICAgIG1hcmdpbi1yaWdodDogLTE1cHg7XG4gICAgfVxuICB9XG5cbiAgLy8gU2hvdyBhbmQgbGVmdCBhbGlnbiB0aGUgY2FwdGlvbnNcbiAgLmNhcm91c2VsLWNhcHRpb24ge1xuICAgIGxlZnQ6IDIwJTtcbiAgICByaWdodDogMjAlO1xuICAgIHBhZGRpbmctYm90dG9tOiAzMHB4O1xuICB9XG5cbiAgLy8gTW92ZSB1cCB0aGUgaW5kaWNhdG9yc1xuICAuY2Fyb3VzZWwtaW5kaWNhdG9ycyB7XG4gICAgYm90dG9tOiAyMHB4O1xuICB9XG59XG4iLCIvLyBDbGVhcmZpeFxuLy9cbi8vIEZvciBtb2Rlcm4gYnJvd3NlcnNcbi8vIDEuIFRoZSBzcGFjZSBjb250ZW50IGlzIG9uZSB3YXkgdG8gYXZvaWQgYW4gT3BlcmEgYnVnIHdoZW4gdGhlXG4vLyAgICBjb250ZW50ZWRpdGFibGUgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGRvY3VtZW50LlxuLy8gICAgT3RoZXJ3aXNlIGl0IGNhdXNlcyBzcGFjZSB0byBhcHBlYXIgYXQgdGhlIHRvcCBhbmQgYm90dG9tIG9mIGVsZW1lbnRzXG4vLyAgICB0aGF0IGFyZSBjbGVhcmZpeGVkLlxuLy8gMi4gVGhlIHVzZSBvZiBgdGFibGVgIHJhdGhlciB0aGFuIGBibG9ja2AgaXMgb25seSBuZWNlc3NhcnkgaWYgdXNpbmdcbi8vICAgIGA6YmVmb3JlYCB0byBjb250YWluIHRoZSB0b3AtbWFyZ2lucyBvZiBjaGlsZCBlbGVtZW50cy5cbi8vXG4vLyBTb3VyY2U6IGh0dHA6Ly9uaWNvbGFzZ2FsbGFnaGVyLmNvbS9taWNyby1jbGVhcmZpeC1oYWNrL1xuXG4uY2xlYXJmaXgoKSB7XG4gICY6YmVmb3JlLFxuICAmOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIiBcIjsgLy8gMVxuICAgIGRpc3BsYXk6IHRhYmxlOyAvLyAyXG4gIH1cbiAgJjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7XG4gIH1cbn1cbiIsIi8vIENlbnRlci1hbGlnbiBhIGJsb2NrIGxldmVsIGVsZW1lbnRcblxuLmNlbnRlci1ibG9jaygpIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG59XG4iLCIvLyBDU1MgaW1hZ2UgcmVwbGFjZW1lbnRcbi8vXG4vLyBIZWFkcyB1cCEgdjMgbGF1bmNoZWQgd2l0aCBvbmx5IGAuaGlkZS10ZXh0KClgLCBidXQgcGVyIG91ciBwYXR0ZXJuIGZvclxuLy8gbWl4aW5zIGJlaW5nIHJldXNlZCBhcyBjbGFzc2VzIHdpdGggdGhlIHNhbWUgbmFtZSwgdGhpcyBkb2Vzbid0IGhvbGQgdXAuIEFzXG4vLyBvZiB2My4wLjEgd2UgaGF2ZSBhZGRlZCBgLnRleHQtaGlkZSgpYCBhbmQgZGVwcmVjYXRlZCBgLmhpZGUtdGV4dCgpYC5cbi8vXG4vLyBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9oNWJwL2h0bWw1LWJvaWxlcnBsYXRlL2NvbW1pdC9hYTAzOTZlYWU3NTdcblxuLy8gRGVwcmVjYXRlZCBhcyBvZiB2My4wLjEgKHdpbGwgYmUgcmVtb3ZlZCBpbiB2NClcbi5oaWRlLXRleHQoKSB7XG4gIGZvbnQ6IH5cIjAvMFwiIGE7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDA7XG59XG5cbi8vIE5ldyBtaXhpbiB0byB1c2UgYXMgb2YgdjMuMC4xXG4udGV4dC1oaWRlKCkge1xuICAuaGlkZS10ZXh0KCk7XG59XG4iLCIvL1xuLy8gUmVzcG9uc2l2ZTogVXRpbGl0eSBjbGFzc2VzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIElFMTAgaW4gV2luZG93cyAoUGhvbmUpIDhcbi8vXG4vLyBTdXBwb3J0IGZvciByZXNwb25zaXZlIHZpZXdzIHZpYSBtZWRpYSBxdWVyaWVzIGlzIGtpbmQgb2YgYm9ya2VkIGluIElFMTAsIGZvclxuLy8gU3VyZmFjZS9kZXNrdG9wIGluIHNwbGl0IHZpZXcgYW5kIGZvciBXaW5kb3dzIFBob25lIDguIFRoaXMgcGFydGljdWxhciBmaXhcbi8vIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgYSBzbmlwcGV0IG9mIEphdmFTY3JpcHQgdG8gc25pZmYgdGhlIHVzZXIgYWdlbnQgYW5kXG4vLyBhcHBseSBzb21lIGNvbmRpdGlvbmFsIENTUyB0byAqb25seSogdGhlIFN1cmZhY2UvZGVza3RvcCBXaW5kb3dzIDguIExvb2sgYXRcbi8vIG91ciBHZXR0aW5nIFN0YXJ0ZWQgcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGJ1Zy5cbi8vXG4vLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBmb2xsb3dpbmc6XG4vL1xuLy8gSXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTA0OTdcbi8vIERvY3M6IGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2dldHRpbmctc3RhcnRlZC8jc3VwcG9ydC1pZTEwLXdpZHRoXG4vLyBTb3VyY2U6IGh0dHA6Ly90aW1rYWRsZWMuY29tLzIwMTMvMDEvd2luZG93cy1waG9uZS04LWFuZC1kZXZpY2Utd2lkdGgvXG4vLyBTb3VyY2U6IGh0dHA6Ly90aW1rYWRsZWMuY29tLzIwMTIvMTAvaWUxMC1zbmFwLW1vZGUtYW5kLXJlc3BvbnNpdmUtZGVzaWduL1xuXG5ALW1zLXZpZXdwb3J0IHtcbiAgd2lkdGg6IGRldmljZS13aWR0aDtcbn1cblxuXG4vLyBWaXNpYmlsaXR5IHV0aWxpdGllc1xuLy8gTm90ZTogRGVwcmVjYXRlZCAudmlzaWJsZS14cywgLnZpc2libGUtc20sIC52aXNpYmxlLW1kLCBhbmQgLnZpc2libGUtbGcgYXMgb2YgdjMuMi4wXG4udmlzaWJsZS14cyxcbi52aXNpYmxlLXNtLFxuLnZpc2libGUtbWQsXG4udmlzaWJsZS1sZyB7XG4gIC5yZXNwb25zaXZlLWludmlzaWJpbGl0eSgpO1xufVxuXG4udmlzaWJsZS14cy1ibG9jayxcbi52aXNpYmxlLXhzLWlubGluZSxcbi52aXNpYmxlLXhzLWlubGluZS1ibG9jayxcbi52aXNpYmxlLXNtLWJsb2NrLFxuLnZpc2libGUtc20taW5saW5lLFxuLnZpc2libGUtc20taW5saW5lLWJsb2NrLFxuLnZpc2libGUtbWQtYmxvY2ssXG4udmlzaWJsZS1tZC1pbmxpbmUsXG4udmlzaWJsZS1tZC1pbmxpbmUtYmxvY2ssXG4udmlzaWJsZS1sZy1ibG9jayxcbi52aXNpYmxlLWxnLWlubGluZSxcbi52aXNpYmxlLWxnLWlubGluZS1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLnZpc2libGUteHMge1xuICBAbWVkaWEgKG1heC13aWR0aDogQHNjcmVlbi14cy1tYXgpIHtcbiAgICAucmVzcG9uc2l2ZS12aXNpYmlsaXR5KCk7XG4gIH1cbn1cbi52aXNpYmxlLXhzLWJsb2NrIHtcbiAgQG1lZGlhIChtYXgtd2lkdGg6IEBzY3JlZW4teHMtbWF4KSB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUteHMtaW5saW5lIHtcbiAgQG1lZGlhIChtYXgtd2lkdGg6IEBzY3JlZW4teHMtbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXhzLWlubGluZS1ibG9jayB7XG4gIEBtZWRpYSAobWF4LXdpZHRoOiBAc2NyZWVuLXhzLW1heCkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbi52aXNpYmxlLXNtIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSBhbmQgKG1heC13aWR0aDogQHNjcmVlbi1zbS1tYXgpIHtcbiAgICAucmVzcG9uc2l2ZS12aXNpYmlsaXR5KCk7XG4gIH1cbn1cbi52aXNpYmxlLXNtLWJsb2NrIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSBhbmQgKG1heC13aWR0aDogQHNjcmVlbi1zbS1tYXgpIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1zbS1pbmxpbmUge1xuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIGFuZCAobWF4LXdpZHRoOiBAc2NyZWVuLXNtLW1heCkge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1zbS1pbmxpbmUtYmxvY2sge1xuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIGFuZCAobWF4LXdpZHRoOiBAc2NyZWVuLXNtLW1heCkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbi52aXNpYmxlLW1kIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbWQtbWluKSBhbmQgKG1heC13aWR0aDogQHNjcmVlbi1tZC1tYXgpIHtcbiAgICAucmVzcG9uc2l2ZS12aXNpYmlsaXR5KCk7XG4gIH1cbn1cbi52aXNpYmxlLW1kLWJsb2NrIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbWQtbWluKSBhbmQgKG1heC13aWR0aDogQHNjcmVlbi1tZC1tYXgpIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1tZC1pbmxpbmUge1xuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1tZC1taW4pIGFuZCAobWF4LXdpZHRoOiBAc2NyZWVuLW1kLW1heCkge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1tZC1pbmxpbmUtYmxvY2sge1xuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1tZC1taW4pIGFuZCAobWF4LXdpZHRoOiBAc2NyZWVuLW1kLW1heCkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbi52aXNpYmxlLWxnIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbGctbWluKSB7XG4gICAgLnJlc3BvbnNpdmUtdmlzaWJpbGl0eSgpO1xuICB9XG59XG4udmlzaWJsZS1sZy1ibG9jayB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLWxnLW1pbikge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLWxnLWlubGluZSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLWxnLW1pbikge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1sZy1pbmxpbmUtYmxvY2sge1xuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1sZy1taW4pIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuXG4uaGlkZGVuLXhzIHtcbiAgQG1lZGlhIChtYXgtd2lkdGg6IEBzY3JlZW4teHMtbWF4KSB7XG4gICAgLnJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCk7XG4gIH1cbn1cbi5oaWRkZW4tc20ge1xuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIGFuZCAobWF4LXdpZHRoOiBAc2NyZWVuLXNtLW1heCkge1xuICAgIC5yZXNwb25zaXZlLWludmlzaWJpbGl0eSgpO1xuICB9XG59XG4uaGlkZGVuLW1kIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbWQtbWluKSBhbmQgKG1heC13aWR0aDogQHNjcmVlbi1tZC1tYXgpIHtcbiAgICAucmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoKTtcbiAgfVxufVxuLmhpZGRlbi1sZyB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLWxnLW1pbikge1xuICAgIC5yZXNwb25zaXZlLWludmlzaWJpbGl0eSgpO1xuICB9XG59XG5cblxuLy8gUHJpbnQgdXRpbGl0aWVzXG4vL1xuLy8gTWVkaWEgcXVlcmllcyBhcmUgcGxhY2VkIG9uIHRoZSBpbnNpZGUgdG8gYmUgbWl4aW4tZnJpZW5kbHkuXG5cbi8vIE5vdGU6IERlcHJlY2F0ZWQgLnZpc2libGUtcHJpbnQgYXMgb2YgdjMuMi4wXG4udmlzaWJsZS1wcmludCB7XG4gIC5yZXNwb25zaXZlLWludmlzaWJpbGl0eSgpO1xuXG4gIEBtZWRpYSBwcmludCB7XG4gICAgLnJlc3BvbnNpdmUtdmlzaWJpbGl0eSgpO1xuICB9XG59XG4udmlzaWJsZS1wcmludC1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblxuICBAbWVkaWEgcHJpbnQge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXByaW50LWlubGluZSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblxuICBAbWVkaWEgcHJpbnQge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1wcmludC1pbmxpbmUtYmxvY2sge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG5cbiAgQG1lZGlhIHByaW50IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuXG4uaGlkZGVuLXByaW50IHtcbiAgQG1lZGlhIHByaW50IHtcbiAgICAucmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoKTtcbiAgfVxufVxuIiwiLy8gUmVzcG9uc2l2ZSB1dGlsaXRpZXNcblxuLy9cbi8vIE1vcmUgZWFzaWx5IGluY2x1ZGUgYWxsIHRoZSBzdGF0ZXMgZm9yIHJlc3BvbnNpdmUtdXRpbGl0aWVzLmxlc3MuXG4ucmVzcG9uc2l2ZS12aXNpYmlsaXR5KCkge1xuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB0YWJsZSYgIHsgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDsgfVxuICB0ciYgICAgIHsgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cbiAgdGgmLFxuICB0ZCYgICAgIHsgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9XG59XG5cbi5yZXNwb25zaXZlLWludmlzaWJpbGl0eSgpIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */ +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJvb3RzdHJhcC5jc3MiLCJub3JtYWxpemUubGVzcyIsInByaW50Lmxlc3MiLCJnbHlwaGljb25zLmxlc3MiLCJzY2FmZm9sZGluZy5sZXNzIiwibWl4aW5zL3ZlbmRvci1wcmVmaXhlcy5sZXNzIiwibWl4aW5zL3RhYi1mb2N1cy5sZXNzIiwibWl4aW5zL2ltYWdlLmxlc3MiLCJ0eXBlLmxlc3MiLCJtaXhpbnMvdGV4dC1lbXBoYXNpcy5sZXNzIiwibWl4aW5zL2JhY2tncm91bmQtdmFyaWFudC5sZXNzIiwibWl4aW5zL3RleHQtb3ZlcmZsb3cubGVzcyIsImNvZGUubGVzcyIsImdyaWQubGVzcyIsIm1peGlucy9ncmlkLmxlc3MiLCJtaXhpbnMvZ3JpZC1mcmFtZXdvcmsubGVzcyIsInRhYmxlcy5sZXNzIiwibWl4aW5zL3RhYmxlLXJvdy5sZXNzIiwiZm9ybXMubGVzcyIsIm1peGlucy9mb3Jtcy5sZXNzIiwiYnV0dG9ucy5sZXNzIiwibWl4aW5zL2J1dHRvbnMubGVzcyIsIm1peGlucy9vcGFjaXR5Lmxlc3MiLCJjb21wb25lbnQtYW5pbWF0aW9ucy5sZXNzIiwiZHJvcGRvd25zLmxlc3MiLCJtaXhpbnMvbmF2LWRpdmlkZXIubGVzcyIsIm1peGlucy9yZXNldC1maWx0ZXIubGVzcyIsImJ1dHRvbi1ncm91cHMubGVzcyIsIm1peGlucy9ib3JkZXItcmFkaXVzLmxlc3MiLCJpbnB1dC1ncm91cHMubGVzcyIsIm5hdnMubGVzcyIsIm5hdmJhci5sZXNzIiwibWl4aW5zL25hdi12ZXJ0aWNhbC1hbGlnbi5sZXNzIiwidXRpbGl0aWVzLmxlc3MiLCJicmVhZGNydW1icy5sZXNzIiwicGFnaW5hdGlvbi5sZXNzIiwibWl4aW5zL3BhZ2luYXRpb24ubGVzcyIsInBhZ2VyLmxlc3MiLCJsYWJlbHMubGVzcyIsIm1peGlucy9sYWJlbHMubGVzcyIsImJhZGdlcy5sZXNzIiwianVtYm90cm9uLmxlc3MiLCJ0aHVtYm5haWxzLmxlc3MiLCJhbGVydHMubGVzcyIsIm1peGlucy9hbGVydHMubGVzcyIsInByb2dyZXNzLWJhcnMubGVzcyIsIm1peGlucy9ncmFkaWVudHMubGVzcyIsIm1peGlucy9wcm9ncmVzcy1iYXIubGVzcyIsIm1lZGlhLmxlc3MiLCJsaXN0LWdyb3VwLmxlc3MiLCJtaXhpbnMvbGlzdC1ncm91cC5sZXNzIiwicGFuZWxzLmxlc3MiLCJtaXhpbnMvcGFuZWxzLmxlc3MiLCJyZXNwb25zaXZlLWVtYmVkLmxlc3MiLCJ3ZWxscy5sZXNzIiwiY2xvc2UubGVzcyIsIm1vZGFscy5sZXNzIiwidG9vbHRpcC5sZXNzIiwibWl4aW5zL3Jlc2V0LXRleHQubGVzcyIsInBvcG92ZXJzLmxlc3MiLCJjYXJvdXNlbC5sZXNzIiwibWl4aW5zL2NsZWFyZml4Lmxlc3MiLCJtaXhpbnMvY2VudGVyLWJsb2NrLmxlc3MiLCJtaXhpbnMvaGlkZS10ZXh0Lmxlc3MiLCJyZXNwb25zaXZlLXV0aWxpdGllcy5sZXNzIiwibWl4aW5zL3Jlc3BvbnNpdmUtdmlzaWJpbGl0eS5sZXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxBQUxBOzs7O0dBSUc7QUFDSCw0RUFBNEU7QUNHNUU7RUFDRSx3QkFBQTtFQUNBLDJCQUFBO0VBQ0EsK0JBQUE7Q0RERDtBQ1FEO0VBQ0UsVUFBQTtDRE5EO0FDbUJEOzs7Ozs7Ozs7Ozs7O0VBYUUsZUFBQTtDRGpCRDtBQ3lCRDs7OztFQUlFLHNCQUFBO0VBQ0EseUJBQUE7Q0R2QkQ7QUMrQkQ7RUFDRSxjQUFBO0VBQ0EsVUFBQTtDRDdCRDtBQ3FDRDs7RUFFRSxjQUFBO0NEbkNEO0FDNkNEO0VBQ0UsOEJBQUE7Q0QzQ0Q7QUNtREQ7O0VBRUUsV0FBQTtDRGpERDtBQzJERDtFQUNFLDBCQUFBO0NEekREO0FDZ0VEOztFQUVFLGtCQUFBO0NEOUREO0FDcUVEO0VBQ0UsbUJBQUE7Q0RuRUQ7QUMyRUQ7RUFDRSxlQUFBO0VBQ0EsaUJBQUE7Q0R6RUQ7QUNnRkQ7RUFDRSxpQkFBQTtFQUNBLFlBQUE7Q0Q5RUQ7QUNxRkQ7RUFDRSxlQUFBO0NEbkZEO0FDMEZEOztFQUVFLGVBQUE7RUFDQSxlQUFBO0VBQ0EsbUJBQUE7RUFDQSx5QkFBQTtDRHhGRDtBQzJGRDtFQUNFLFlBQUE7Q0R6RkQ7QUM0RkQ7RUFDRSxnQkFBQTtDRDFGRDtBQ29HRDtFQUNFLFVBQUE7Q0RsR0Q7QUN5R0Q7RUFDRSxpQkFBQTtDRHZHRDtBQ2lIRDtFQUNFLGlCQUFBO0NEL0dEO0FDc0hEO0VBQ0Usd0JBQUE7RUFDQSxVQUFBO0NEcEhEO0FDMkhEO0VBQ0UsZUFBQTtDRHpIRDtBQ2dJRDs7OztFQUlFLGtDQUFBO0VBQ0EsZUFBQTtDRDlIRDtBQ2dKRDs7Ozs7RUFLRSxlQUFBO0VBQ0EsY0FBQTtFQUNBLFVBQUE7Q0Q5SUQ7QUNxSkQ7RUFDRSxrQkFBQTtDRG5KRDtBQzZKRDs7RUFFRSxxQkFBQTtDRDNKRDtBQ3NLRDs7OztFQUlFLDJCQUFBO0VBQ0EsZ0JBQUE7Q0RwS0Q7QUMyS0Q7O0VBRUUsZ0JBQUE7Q0R6S0Q7QUNnTEQ7O0VBRUUsVUFBQTtFQUNBLFdBQUE7Q0Q5S0Q7QUNzTEQ7RUFDRSxvQkFBQTtDRHBMRDtBQytMRDs7RUFFRSx1QkFBQTtFQUNBLFdBQUE7Q0Q3TEQ7QUNzTUQ7O0VBRUUsYUFBQTtDRHBNRDtBQzRNRDtFQUNFLDhCQUFBO0VBQ0Esd0JBQUE7Q0QxTUQ7QUNtTkQ7O0VBRUUseUJBQUE7Q0RqTkQ7QUN3TkQ7RUFDRSwwQkFBQTtFQUNBLGNBQUE7RUFDQSwrQkFBQTtDRHRORDtBQzhORDtFQUNFLFVBQUE7RUFDQSxXQUFBO0NENU5EO0FDbU9EO0VBQ0UsZUFBQTtDRGpPRDtBQ3lPRDtFQUNFLGtCQUFBO0NEdk9EO0FDaVBEO0VBQ0UsMEJBQUE7RUFDQSxrQkFBQTtDRC9PRDtBQ2tQRDs7RUFFRSxXQUFBO0NEaFBEO0FBQ0QscUZBQXFGO0FFaExyRjtFQUNJOzs7SUFHSSxtQ0FBQTtJQUNBLHVCQUFBO0lBQ0EsNEJBQUE7SUFDQSw2QkFBQTtHRmtMTDtFRS9LQzs7SUFFSSwyQkFBQTtHRmlMTDtFRTlLQztJQUNJLDZCQUFBO0dGZ0xMO0VFN0tDO0lBQ0ksOEJBQUE7R0YrS0w7RUUxS0M7O0lBRUksWUFBQTtHRjRLTDtFRXpLQzs7SUFFSSx1QkFBQTtJQUNBLHlCQUFBO0dGMktMO0VFeEtDO0lBQ0ksNEJBQUE7R0YwS0w7RUV2S0M7O0lBRUkseUJBQUE7R0Z5S0w7RUV0S0M7SUFDSSwyQkFBQTtHRndLTDtFRXJLQzs7O0lBR0ksV0FBQTtJQUNBLFVBQUE7R0Z1S0w7RUVwS0M7O0lBRUksd0JBQUE7R0ZzS0w7RUVoS0M7SUFDSSxjQUFBO0dGa0tMO0VFaEtDOztJQUdRLGtDQUFBO0dGaUtUO0VFOUpDO0lBQ0ksdUJBQUE7R0ZnS0w7RUU3SkM7SUFDSSxxQ0FBQTtHRitKTDtFRWhLQzs7SUFLUSxrQ0FBQTtHRitKVDtFRTVKQzs7SUFHUSxrQ0FBQTtHRjZKVDtDQUNGO0FHblBEO0VBQ0Usb0NBQUE7RUFDQSxzREFBQTtFQUNBLGdZQUFBO0NIcVBEO0FHN09EO0VBQ0UsbUJBQUE7RUFDQSxTQUFBO0VBQ0Esc0JBQUE7RUFDQSxvQ0FBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7RUFDQSxlQUFBO0VBQ0Esb0NBQUE7RUFDQSxtQ0FBQTtDSCtPRDtBRzNPbUM7RUFBVyxlQUFBO0NIOE85QztBRzdPbUM7RUFBVyxlQUFBO0NIZ1A5QztBRzlPbUM7O0VBQVcsaUJBQUE7Q0hrUDlDO0FHalBtQztFQUFXLGlCQUFBO0NIb1A5QztBR25QbUM7RUFBVyxpQkFBQTtDSHNQOUM7QUdyUG1DO0VBQVcsaUJBQUE7Q0h3UDlDO0FHdlBtQztFQUFXLGlCQUFBO0NIMFA5QztBR3pQbUM7RUFBVyxpQkFBQTtDSDRQOUM7QUczUG1DO0VBQVcsaUJBQUE7Q0g4UDlDO0FHN1BtQztFQUFXLGlCQUFBO0NIZ1E5QztBRy9QbUM7RUFBVyxpQkFBQTtDSGtROUM7QUdqUW1DO0VBQVcsaUJBQUE7Q0hvUTlDO0FHblFtQztFQUFXLGlCQUFBO0NIc1E5QztBR3JRbUM7RUFBVyxpQkFBQTtDSHdROUM7QUd2UW1DO0VBQVcsaUJBQUE7Q0gwUTlDO0FHelFtQztFQUFXLGlCQUFBO0NINFE5QztBRzNRbUM7RUFBVyxpQkFBQTtDSDhROUM7QUc3UW1DO0VBQVcsaUJBQUE7Q0hnUjlDO0FHL1FtQztFQUFXLGlCQUFBO0NIa1I5QztBR2pSbUM7RUFBVyxpQkFBQTtDSG9SOUM7QUduUm1DO0VBQVcsaUJBQUE7Q0hzUjlDO0FHclJtQztFQUFXLGlCQUFBO0NId1I5QztBR3ZSbUM7RUFBVyxpQkFBQTtDSDBSOUM7QUd6Um1DO0VBQVcsaUJBQUE7Q0g0UjlDO0FHM1JtQztFQUFXLGlCQUFBO0NIOFI5QztBRzdSbUM7RUFBVyxpQkFBQTtDSGdTOUM7QUcvUm1DO0VBQVcsaUJBQUE7Q0hrUzlDO0FHalNtQztFQUFXLGlCQUFBO0NIb1M5QztBR25TbUM7RUFBVyxpQkFBQTtDSHNTOUM7QUdyU21DO0VBQVcsaUJBQUE7Q0h3UzlDO0FHdlNtQztFQUFXLGlCQUFBO0NIMFM5QztBR3pTbUM7RUFBVyxpQkFBQTtDSDRTOUM7QUczU21DO0VBQVcsaUJBQUE7Q0g4UzlDO0FHN1NtQztFQUFXLGlCQUFBO0NIZ1Q5QztBRy9TbUM7RUFBVyxpQkFBQTtDSGtUOUM7QUdqVG1DO0VBQVcsaUJBQUE7Q0hvVDlDO0FHblRtQztFQUFXLGlCQUFBO0NIc1Q5QztBR3JUbUM7RUFBVyxpQkFBQTtDSHdUOUM7QUd2VG1DO0VBQVcsaUJBQUE7Q0gwVDlDO0FHelRtQztFQUFXLGlCQUFBO0NINFQ5QztBRzNUbUM7RUFBVyxpQkFBQTtDSDhUOUM7QUc3VG1DO0VBQVcsaUJBQUE7Q0hnVTlDO0FHL1RtQztFQUFXLGlCQUFBO0NIa1U5QztBR2pVbUM7RUFBVyxpQkFBQTtDSG9VOUM7QUduVW1DO0VBQVcsaUJBQUE7Q0hzVTlDO0FHclVtQztFQUFXLGlCQUFBO0NId1U5QztBR3ZVbUM7RUFBVyxpQkFBQTtDSDBVOUM7QUd6VW1DO0VBQVcsaUJBQUE7Q0g0VTlDO0FHM1VtQztFQUFXLGlCQUFBO0NIOFU5QztBRzdVbUM7RUFBVyxpQkFBQTtDSGdWOUM7QUcvVW1DO0VBQVcsaUJBQUE7Q0hrVjlDO0FHalZtQztFQUFXLGlCQUFBO0NIb1Y5QztBR25WbUM7RUFBVyxpQkFBQTtDSHNWOUM7QUdyVm1DO0VBQVcsaUJBQUE7Q0h3VjlDO0FHdlZtQztFQUFXLGlCQUFBO0NIMFY5QztBR3pWbUM7RUFBVyxpQkFBQTtDSDRWOUM7QUczVm1DO0VBQVcsaUJBQUE7Q0g4VjlDO0FHN1ZtQztFQUFXLGlCQUFBO0NIZ1c5QztBRy9WbUM7RUFBVyxpQkFBQTtDSGtXOUM7QUdqV21DO0VBQVcsaUJBQUE7Q0hvVzlDO0FHbldtQztFQUFXLGlCQUFBO0NIc1c5QztBR3JXbUM7RUFBVyxpQkFBQTtDSHdXOUM7QUd2V21DO0VBQVcsaUJBQUE7Q0gwVzlDO0FHeldtQztFQUFXLGlCQUFBO0NINFc5QztBRzNXbUM7RUFBVyxpQkFBQTtDSDhXOUM7QUc3V21DO0VBQVcsaUJBQUE7Q0hnWDlDO0FHL1dtQztFQUFXLGlCQUFBO0NIa1g5QztBR2pYbUM7RUFBVyxpQkFBQTtDSG9YOUM7QUduWG1DO0VBQVcsaUJBQUE7Q0hzWDlDO0FHclhtQztFQUFXLGlCQUFBO0NId1g5QztBR3ZYbUM7RUFBVyxpQkFBQTtDSDBYOUM7QUd6WG1DO0VBQVcsaUJBQUE7Q0g0WDlDO0FHM1htQztFQUFXLGlCQUFBO0NIOFg5QztBRzdYbUM7RUFBVyxpQkFBQTtDSGdZOUM7QUcvWG1DO0VBQVcsaUJBQUE7Q0hrWTlDO0FHalltQztFQUFXLGlCQUFBO0NIb1k5QztBR25ZbUM7RUFBVyxpQkFBQTtDSHNZOUM7QUdyWW1DO0VBQVcsaUJBQUE7Q0h3WTlDO0FHdlltQztFQUFXLGlCQUFBO0NIMFk5QztBR3pZbUM7RUFBVyxpQkFBQTtDSDRZOUM7QUczWW1DO0VBQVcsaUJBQUE7Q0g4WTlDO0FHN1ltQztFQUFXLGlCQUFBO0NIZ1o5QztBRy9ZbUM7RUFBVyxpQkFBQTtDSGtaOUM7QUdqWm1DO0VBQVcsaUJBQUE7Q0hvWjlDO0FHblptQztFQUFXLGlCQUFBO0NIc1o5QztBR3JabUM7RUFBVyxpQkFBQTtDSHdaOUM7QUd2Wm1DO0VBQVcsaUJBQUE7Q0gwWjlDO0FHelptQztFQUFXLGlCQUFBO0NINFo5QztBRzNabUM7RUFBVyxpQkFBQTtDSDhaOUM7QUc3Wm1DO0VBQVcsaUJBQUE7Q0hnYTlDO0FHL1ptQztFQUFXLGlCQUFBO0NIa2E5QztBR2phbUM7RUFBVyxpQkFBQTtDSG9hOUM7QUduYW1DO0VBQVcsaUJBQUE7Q0hzYTlDO0FHcmFtQztFQUFXLGlCQUFBO0NId2E5QztBR3ZhbUM7RUFBVyxpQkFBQTtDSDBhOUM7QUd6YW1DO0VBQVcsaUJBQUE7Q0g0YTlDO0FHM2FtQztFQUFXLGlCQUFBO0NIOGE5QztBRzdhbUM7RUFBVyxpQkFBQTtDSGdiOUM7QUcvYW1DO0VBQVcsaUJBQUE7Q0hrYjlDO0FHamJtQztFQUFXLGlCQUFBO0NIb2I5QztBR25ibUM7RUFBVyxpQkFBQTtDSHNiOUM7QUdyYm1DO0VBQVcsaUJBQUE7Q0h3YjlDO0FHdmJtQztFQUFXLGlCQUFBO0NIMGI5QztBR3pibUM7RUFBVyxpQkFBQTtDSDRiOUM7QUczYm1DO0VBQVcsaUJBQUE7Q0g4YjlDO0FHN2JtQztFQUFXLGlCQUFBO0NIZ2M5QztBRy9ibUM7RUFBVyxpQkFBQTtDSGtjOUM7QUdqY21DO0VBQVcsaUJBQUE7Q0hvYzlDO0FHbmNtQztFQUFXLGlCQUFBO0NIc2M5QztBR3JjbUM7RUFBVyxpQkFBQTtDSHdjOUM7QUd2Y21DO0VBQVcsaUJBQUE7Q0gwYzlDO0FHemNtQztFQUFXLGlCQUFBO0NINGM5QztBRzNjbUM7RUFBVyxpQkFBQTtDSDhjOUM7QUc3Y21DO0VBQVcsaUJBQUE7Q0hnZDlDO0FHL2NtQztFQUFXLGlCQUFBO0NIa2Q5QztBR2pkbUM7RUFBVyxpQkFBQTtDSG9kOUM7QUduZG1DO0VBQVcsaUJBQUE7Q0hzZDlDO0FHcmRtQztFQUFXLGlCQUFBO0NId2Q5QztBR3ZkbUM7RUFBVyxpQkFBQTtDSDBkOUM7QUd6ZG1DO0VBQVcsaUJBQUE7Q0g0ZDlDO0FHM2RtQztFQUFXLGlCQUFBO0NIOGQ5QztBRzdkbUM7RUFBVyxpQkFBQTtDSGdlOUM7QUcvZG1DO0VBQVcsaUJBQUE7Q0hrZTlDO0FHamVtQztFQUFXLGlCQUFBO0NIb2U5QztBR25lbUM7RUFBVyxpQkFBQTtDSHNlOUM7QUdyZW1DO0VBQVcsaUJBQUE7Q0h3ZTlDO0FHdmVtQztFQUFXLGlCQUFBO0NIMGU5QztBR3plbUM7RUFBVyxpQkFBQTtDSDRlOUM7QUczZW1DO0VBQVcsaUJBQUE7Q0g4ZTlDO0FHN2VtQztFQUFXLGlCQUFBO0NIZ2Y5QztBRy9lbUM7RUFBVyxpQkFBQTtDSGtmOUM7QUdqZm1DO0VBQVcsaUJBQUE7Q0hvZjlDO0FHbmZtQztFQUFXLGlCQUFBO0NIc2Y5QztBR3JmbUM7RUFBVyxpQkFBQTtDSHdmOUM7QUd2Zm1DO0VBQVcsaUJBQUE7Q0gwZjlDO0FHemZtQztFQUFXLGlCQUFBO0NINGY5QztBRzNmbUM7RUFBVyxpQkFBQTtDSDhmOUM7QUc3Zm1DO0VBQVcsaUJBQUE7Q0hnZ0I5QztBRy9mbUM7RUFBVyxpQkFBQTtDSGtnQjlDO0FHamdCbUM7RUFBVyxpQkFBQTtDSG9nQjlDO0FHbmdCbUM7RUFBVyxpQkFBQTtDSHNnQjlDO0FHcmdCbUM7RUFBVyxpQkFBQTtDSHdnQjlDO0FHdmdCbUM7RUFBVyxpQkFBQTtDSDBnQjlDO0FHemdCbUM7RUFBVyxpQkFBQTtDSDRnQjlDO0FHM2dCbUM7RUFBVyxpQkFBQTtDSDhnQjlDO0FHN2dCbUM7RUFBVyxpQkFBQTtDSGdoQjlDO0FHL2dCbUM7RUFBVyxpQkFBQTtDSGtoQjlDO0FHamhCbUM7RUFBVyxpQkFBQTtDSG9oQjlDO0FHbmhCbUM7RUFBVyxpQkFBQTtDSHNoQjlDO0FHcmhCbUM7RUFBVyxpQkFBQTtDSHdoQjlDO0FHdmhCbUM7RUFBVyxpQkFBQTtDSDBoQjlDO0FHemhCbUM7RUFBVyxpQkFBQTtDSDRoQjlDO0FHM2hCbUM7RUFBVyxpQkFBQTtDSDhoQjlDO0FHN2hCbUM7RUFBVyxpQkFBQTtDSGdpQjlDO0FHL2hCbUM7RUFBVyxpQkFBQTtDSGtpQjlDO0FHamlCbUM7RUFBVyxpQkFBQTtDSG9pQjlDO0FHbmlCbUM7RUFBVyxpQkFBQTtDSHNpQjlDO0FHcmlCbUM7RUFBVyxpQkFBQTtDSHdpQjlDO0FHdmlCbUM7RUFBVyxpQkFBQTtDSDBpQjlDO0FHemlCbUM7RUFBVyxpQkFBQTtDSDRpQjlDO0FHM2lCbUM7RUFBVyxpQkFBQTtDSDhpQjlDO0FHN2lCbUM7RUFBVyxpQkFBQTtDSGdqQjlDO0FHL2lCbUM7RUFBVyxpQkFBQTtDSGtqQjlDO0FHampCbUM7RUFBVyxpQkFBQTtDSG9qQjlDO0FHbmpCbUM7RUFBVyxpQkFBQTtDSHNqQjlDO0FHcmpCbUM7RUFBVyxpQkFBQTtDSHdqQjlDO0FHdmpCbUM7RUFBVyxpQkFBQTtDSDBqQjlDO0FHempCbUM7RUFBVyxpQkFBQTtDSDRqQjlDO0FHM2pCbUM7RUFBVyxpQkFBQTtDSDhqQjlDO0FHN2pCbUM7RUFBVyxpQkFBQTtDSGdrQjlDO0FHL2pCbUM7RUFBVyxpQkFBQTtDSGtrQjlDO0FHamtCbUM7RUFBVyxpQkFBQTtDSG9rQjlDO0FHbmtCbUM7RUFBVyxpQkFBQTtDSHNrQjlDO0FHcmtCbUM7RUFBVyxpQkFBQTtDSHdrQjlDO0FHdmtCbUM7RUFBVyxpQkFBQTtDSDBrQjlDO0FHemtCbUM7RUFBVyxpQkFBQTtDSDRrQjlDO0FHM2tCbUM7RUFBVyxpQkFBQTtDSDhrQjlDO0FHN2tCbUM7RUFBVyxpQkFBQTtDSGdsQjlDO0FHL2tCbUM7RUFBVyxpQkFBQTtDSGtsQjlDO0FHamxCbUM7RUFBVyxpQkFBQTtDSG9sQjlDO0FHbmxCbUM7RUFBVyxpQkFBQTtDSHNsQjlDO0FHcmxCbUM7RUFBVyxpQkFBQTtDSHdsQjlDO0FHdmxCbUM7RUFBVyxpQkFBQTtDSDBsQjlDO0FHemxCbUM7RUFBVyxpQkFBQTtDSDRsQjlDO0FHM2xCbUM7RUFBVyxpQkFBQTtDSDhsQjlDO0FHN2xCbUM7RUFBVyxpQkFBQTtDSGdtQjlDO0FHL2xCbUM7RUFBVyxpQkFBQTtDSGttQjlDO0FHam1CbUM7RUFBVyxpQkFBQTtDSG9tQjlDO0FHbm1CbUM7RUFBVyxpQkFBQTtDSHNtQjlDO0FHcm1CbUM7RUFBVyxpQkFBQTtDSHdtQjlDO0FHdm1CbUM7RUFBVyxpQkFBQTtDSDBtQjlDO0FHem1CbUM7RUFBVyxpQkFBQTtDSDRtQjlDO0FHM21CbUM7RUFBVyxpQkFBQTtDSDhtQjlDO0FHN21CbUM7RUFBVyxpQkFBQTtDSGduQjlDO0FHL21CbUM7RUFBVyxpQkFBQTtDSGtuQjlDO0FHam5CbUM7RUFBVyxpQkFBQTtDSG9uQjlDO0FHbm5CbUM7RUFBVyxpQkFBQTtDSHNuQjlDO0FHcm5CbUM7RUFBVyxpQkFBQTtDSHduQjlDO0FHdm5CbUM7RUFBVyxpQkFBQTtDSDBuQjlDO0FHem5CbUM7RUFBVyxpQkFBQTtDSDRuQjlDO0FHM25CbUM7RUFBVyxpQkFBQTtDSDhuQjlDO0FHN25CbUM7RUFBVyxpQkFBQTtDSGdvQjlDO0FHL25CbUM7RUFBVyxpQkFBQTtDSGtvQjlDO0FHam9CbUM7RUFBVyxpQkFBQTtDSG9vQjlDO0FHbm9CbUM7RUFBVyxpQkFBQTtDSHNvQjlDO0FHcm9CbUM7RUFBVyxpQkFBQTtDSHdvQjlDO0FHL25CbUM7RUFBVyxpQkFBQTtDSGtvQjlDO0FHam9CbUM7RUFBVyxpQkFBQTtDSG9vQjlDO0FHbm9CbUM7RUFBVyxpQkFBQTtDSHNvQjlDO0FHcm9CbUM7RUFBVyxpQkFBQTtDSHdvQjlDO0FHdm9CbUM7RUFBVyxpQkFBQTtDSDBvQjlDO0FHem9CbUM7RUFBVyxpQkFBQTtDSDRvQjlDO0FHM29CbUM7RUFBVyxpQkFBQTtDSDhvQjlDO0FHN29CbUM7RUFBVyxpQkFBQTtDSGdwQjlDO0FHL29CbUM7RUFBVyxpQkFBQTtDSGtwQjlDO0FHanBCbUM7RUFBVyxpQkFBQTtDSG9wQjlDO0FHbnBCbUM7RUFBVyxpQkFBQTtDSHNwQjlDO0FHcnBCbUM7RUFBVyxpQkFBQTtDSHdwQjlDO0FHdnBCbUM7RUFBVyxpQkFBQTtDSDBwQjlDO0FHenBCbUM7RUFBVyxpQkFBQTtDSDRwQjlDO0FHM3BCbUM7RUFBVyxpQkFBQTtDSDhwQjlDO0FHN3BCbUM7RUFBVyxpQkFBQTtDSGdxQjlDO0FHL3BCbUM7RUFBVyxpQkFBQTtDSGtxQjlDO0FHanFCbUM7RUFBVyxpQkFBQTtDSG9xQjlDO0FHbnFCbUM7RUFBVyxpQkFBQTtDSHNxQjlDO0FHcnFCbUM7RUFBVyxpQkFBQTtDSHdxQjlDO0FHdnFCbUM7RUFBVyxpQkFBQTtDSDBxQjlDO0FHenFCbUM7RUFBVyxpQkFBQTtDSDRxQjlDO0FHM3FCbUM7RUFBVyxpQkFBQTtDSDhxQjlDO0FHN3FCbUM7RUFBVyxpQkFBQTtDSGdyQjlDO0FHL3FCbUM7RUFBVyxpQkFBQTtDSGtyQjlDO0FHanJCbUM7RUFBVyxpQkFBQTtDSG9yQjlDO0FHbnJCbUM7RUFBVyxpQkFBQTtDSHNyQjlDO0FHcnJCbUM7RUFBVyxpQkFBQTtDSHdyQjlDO0FHdnJCbUM7RUFBVyxpQkFBQTtDSDByQjlDO0FHenJCbUM7RUFBVyxpQkFBQTtDSDRyQjlDO0FHM3JCbUM7RUFBVyxpQkFBQTtDSDhyQjlDO0FHN3JCbUM7RUFBVyxpQkFBQTtDSGdzQjlDO0FHL3JCbUM7RUFBVyxpQkFBQTtDSGtzQjlDO0FHanNCbUM7RUFBVyxpQkFBQTtDSG9zQjlDO0FHbnNCbUM7RUFBVyxpQkFBQTtDSHNzQjlDO0FHcnNCbUM7RUFBVyxpQkFBQTtDSHdzQjlDO0FHdnNCbUM7RUFBVyxpQkFBQTtDSDBzQjlDO0FHenNCbUM7RUFBVyxpQkFBQTtDSDRzQjlDO0FHM3NCbUM7RUFBVyxpQkFBQTtDSDhzQjlDO0FHN3NCbUM7RUFBVyxpQkFBQTtDSGd0QjlDO0FHL3NCbUM7RUFBVyxpQkFBQTtDSGt0QjlDO0FHanRCbUM7RUFBVyxpQkFBQTtDSG90QjlDO0FHbnRCbUM7RUFBVyxpQkFBQTtDSHN0QjlDO0FHcnRCbUM7RUFBVyxpQkFBQTtDSHd0QjlDO0FHdnRCbUM7RUFBVyxpQkFBQTtDSDB0QjlDO0FHenRCbUM7RUFBVyxpQkFBQTtDSDR0QjlDO0FHM3RCbUM7RUFBVyxpQkFBQTtDSDh0QjlDO0FHN3RCbUM7RUFBVyxpQkFBQTtDSGd1QjlDO0FHL3RCbUM7RUFBVyxpQkFBQTtDSGt1QjlDO0FHanVCbUM7RUFBVyxpQkFBQTtDSG91QjlDO0FHbnVCbUM7RUFBVyxpQkFBQTtDSHN1QjlDO0FHcnVCbUM7RUFBVyxpQkFBQTtDSHd1QjlDO0FHdnVCbUM7RUFBVyxpQkFBQTtDSDB1QjlDO0FHenVCbUM7RUFBVyxpQkFBQTtDSDR1QjlDO0FHM3VCbUM7RUFBVyxpQkFBQTtDSDh1QjlDO0FHN3VCbUM7RUFBVyxpQkFBQTtDSGd2QjlDO0FJdGhDRDtFQ2tFVSx1QkFBQTtDTHk5QlQ7QUl4aENEOztFQytEVSx1QkFBQTtDTCs5QlQ7QUl0aENEO0VBQ0UsZ0JBQUE7RUFDQSw4Q0FBQTtDSndoQ0Q7QUlyaENEO0VBQ0UsNERBQUE7RUFDQSxnQkFBQTtFQUNBLHdCQUFBO0VBQ0EsZUFBQTtFQUNBLHVCQUFBO0NKdWhDRDtBSW5oQ0Q7Ozs7RUFJRSxxQkFBQTtFQUNBLG1CQUFBO0VBQ0EscUJBQUE7Q0pxaENEO0FJL2dDRDtFQUNFLGVBQUE7RUFDQSxzQkFBQTtDSmloQ0Q7QUkvZ0NDOztFQUVFLGVBQUE7RUFDQSwyQkFBQTtDSmloQ0g7QUk5Z0NDO0VFckRBLHFCQUFBO0VBRUEsMkNBQUE7RUFDQSxxQkFBQTtDTnFrQ0Q7QUl4Z0NEO0VBQ0UsVUFBQTtDSjBnQ0Q7QUlwZ0NEO0VBQ0UsdUJBQUE7Q0pzZ0NEO0FJbGdDRDs7Ozs7RUd2RUUsZUFBQTtFQUNBLGdCQUFBO0VBQ0EsYUFBQTtDUGdsQ0Q7QUl0Z0NEO0VBQ0UsbUJBQUE7Q0p3Z0NEO0FJbGdDRDtFQUNFLGFBQUE7RUFDQSx3QkFBQTtFQUNBLHVCQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtFQytGUSxpQ0FBQTtFRXZMUixzQkFBQTtFQUNBLGdCQUFBO0VBQ0EsYUFBQTtDUGdtQ0Q7QUlsZ0NEO0VBQ0UsbUJBQUE7Q0pvZ0NEO0FJOS9CRDtFQUNFLGlCQUFBO0VBQ0Esb0JBQUE7RUFDQSxVQUFBO0VBQ0EsOEJBQUE7Q0pnZ0NEO0FJeC9CRDtFQUNFLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsV0FBQTtFQUNBLGlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxVQUFBO0NKMC9CRDtBSWwvQkM7O0VBRUUsaUJBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLFVBQUE7RUFDQSxrQkFBQTtFQUNBLFdBQUE7Q0pvL0JIO0FJeitCRDtFQUNFLGdCQUFBO0NKMitCRDtBUWxvQ0Q7Ozs7Ozs7Ozs7OztFQUVFLHFCQUFBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtFQUNBLGVBQUE7Q1I4b0NEO0FRbnBDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBU0ksb0JBQUE7RUFDQSxlQUFBO0VBQ0EsZUFBQTtDUm9xQ0g7QVFocUNEOzs7Ozs7RUFHRSxpQkFBQTtFQUNBLG9CQUFBO0NScXFDRDtBUXpxQ0Q7Ozs7Ozs7Ozs7OztFQVFJLGVBQUE7Q1IrcUNIO0FRNXFDRDs7Ozs7O0VBR0UsaUJBQUE7RUFDQSxvQkFBQTtDUmlyQ0Q7QVFyckNEOzs7Ozs7Ozs7Ozs7RUFRSSxlQUFBO0NSMnJDSDtBUXZyQ0Q7O0VBQVUsZ0JBQUE7Q1IyckNUO0FRMXJDRDs7RUFBVSxnQkFBQTtDUjhyQ1Q7QVE3ckNEOztFQUFVLGdCQUFBO0NSaXNDVDtBUWhzQ0Q7O0VBQVUsZ0JBQUE7Q1Jvc0NUO0FRbnNDRDs7RUFBVSxnQkFBQTtDUnVzQ1Q7QVF0c0NEOztFQUFVLGdCQUFBO0NSMHNDVDtBUXBzQ0Q7RUFDRSxpQkFBQTtDUnNzQ0Q7QVFuc0NEO0VBQ0Usb0JBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0VBQ0EsaUJBQUE7Q1Jxc0NEO0FRbnNDQztFQTJPRjtJQTFPSSxnQkFBQTtHUnNzQ0Q7Q0FDRjtBUTlyQ0Q7O0VBRUUsZUFBQTtDUmdzQ0Q7QVE3ckNEOztFQUVFLDBCQUFBO0VBQ0EsY0FBQTtDUityQ0Q7QVEzckNEO0VBQXVCLGlCQUFBO0NSOHJDdEI7QVE3ckNEO0VBQXVCLGtCQUFBO0NSZ3NDdEI7QVEvckNEO0VBQXVCLG1CQUFBO0NSa3NDdEI7QVFqc0NEO0VBQXVCLG9CQUFBO0NSb3NDdEI7QVFuc0NEO0VBQXVCLG9CQUFBO0NSc3NDdEI7QVFuc0NEO0VBQXVCLDBCQUFBO0NSc3NDdEI7QVFyc0NEO0VBQXVCLDBCQUFBO0NSd3NDdEI7QVF2c0NEO0VBQXVCLDJCQUFBO0NSMHNDdEI7QVF2c0NEO0VBQ0UsZUFBQTtDUnlzQ0Q7QVF2c0NEO0VDckdFLGVBQUE7Q1QreUNEO0FTOXlDQzs7RUFFRSxlQUFBO0NUZ3pDSDtBUTNzQ0Q7RUN4R0UsZUFBQTtDVHN6Q0Q7QVNyekNDOztFQUVFLGVBQUE7Q1R1ekNIO0FRL3NDRDtFQzNHRSxlQUFBO0NUNnpDRDtBUzV6Q0M7O0VBRUUsZUFBQTtDVDh6Q0g7QVFudENEO0VDOUdFLGVBQUE7Q1RvMENEO0FTbjBDQzs7RUFFRSxlQUFBO0NUcTBDSDtBUXZ0Q0Q7RUNqSEUsZUFBQTtDVDIwQ0Q7QVMxMENDOztFQUVFLGVBQUE7Q1Q0MENIO0FRdnRDRDtFQUdFLFlBQUE7RUUzSEEsMEJBQUE7Q1ZtMUNEO0FVbDFDQzs7RUFFRSwwQkFBQTtDVm8xQ0g7QVF6dENEO0VFOUhFLDBCQUFBO0NWMDFDRDtBVXoxQ0M7O0VBRUUsMEJBQUE7Q1YyMUNIO0FRN3RDRDtFRWpJRSwwQkFBQTtDVmkyQ0Q7QVVoMkNDOztFQUVFLDBCQUFBO0NWazJDSDtBUWp1Q0Q7RUVwSUUsMEJBQUE7Q1Z3MkNEO0FVdjJDQzs7RUFFRSwwQkFBQTtDVnkyQ0g7QVFydUNEO0VFdklFLDBCQUFBO0NWKzJDRDtBVTkyQ0M7O0VBRUUsMEJBQUE7Q1ZnM0NIO0FRcHVDRDtFQUNFLG9CQUFBO0VBQ0Esb0JBQUE7RUFDQSxpQ0FBQTtDUnN1Q0Q7QVE5dENEOztFQUVFLGNBQUE7RUFDQSxvQkFBQTtDUmd1Q0Q7QVFudUNEOzs7O0VBTUksaUJBQUE7Q1JtdUNIO0FRNXRDRDtFQUNFLGdCQUFBO0VBQ0EsaUJBQUE7Q1I4dENEO0FRMXRDRDtFQUxFLGdCQUFBO0VBQ0EsaUJBQUE7RUFNQSxrQkFBQTtDUjZ0Q0Q7QVEvdENEO0VBS0ksc0JBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0NSNnRDSDtBUXh0Q0Q7RUFDRSxjQUFBO0VBQ0Esb0JBQUE7Q1IwdENEO0FReHRDRDs7RUFFRSx3QkFBQTtDUjB0Q0Q7QVF4dENEO0VBQ0Usa0JBQUE7Q1IwdENEO0FReHRDRDtFQUNFLGVBQUE7Q1IwdENEO0FRN3NDQztFQXlGRjtJQXZGTSxZQUFBO0lBQ0EsYUFBQTtJQUNBLFlBQUE7SUFDQSxrQkFBQTtJR3ROSixpQkFBQTtJQUNBLHdCQUFBO0lBQ0Esb0JBQUE7R1hzNkNDO0VROW5DSDtJQWhGTSxtQkFBQTtHUml0Q0g7Q0FDRjtBUXhzQ0Q7O0VBR0UsYUFBQTtFQUNBLGtDQUFBO0NSeXNDRDtBUXZzQ0Q7RUFDRSxlQUFBO0VBOUlxQiwwQkFBQTtDUncxQ3RCO0FRcnNDRDtFQUNFLG1CQUFBO0VBQ0EsaUJBQUE7RUFDQSxrQkFBQTtFQUNBLCtCQUFBO0NSdXNDRDtBUWxzQ0c7OztFQUNFLGlCQUFBO0NSc3NDTDtBUWh0Q0Q7OztFQW1CSSxlQUFBO0VBQ0EsZUFBQTtFQUNBLHdCQUFBO0VBQ0EsZUFBQTtDUmtzQ0g7QVFoc0NHOzs7RUFDRSx1QkFBQTtDUm9zQ0w7QVE1ckNEOztFQUVFLG9CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQ0FBQTtFQUNBLGVBQUE7RUFDQSxrQkFBQTtDUjhyQ0Q7QVF4ckNHOzs7Ozs7RUFBVyxZQUFBO0NSZ3NDZDtBUS9yQ0c7Ozs7OztFQUNFLHVCQUFBO0NSc3NDTDtBUWhzQ0Q7RUFDRSxvQkFBQTtFQUNBLG1CQUFBO0VBQ0Esd0JBQUE7Q1Jrc0NEO0FZeCtDRDs7OztFQUlFLCtEQUFBO0NaMCtDRDtBWXQrQ0Q7RUFDRSxpQkFBQTtFQUNBLGVBQUE7RUFDQSxlQUFBO0VBQ0EsMEJBQUE7RUFDQSxtQkFBQTtDWncrQ0Q7QVlwK0NEO0VBQ0UsaUJBQUE7RUFDQSxlQUFBO0VBQ0EsWUFBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7RUFDQSwrQ0FBQTtDWnMrQ0Q7QVk1K0NEO0VBU0ksV0FBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7RUFDQSxpQkFBQTtDWnMrQ0g7QVlqK0NEO0VBQ0UsZUFBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0Esd0JBQUE7RUFDQSxzQkFBQTtFQUNBLHNCQUFBO0VBQ0EsZUFBQTtFQUNBLDBCQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtDWm0rQ0Q7QVk5K0NEO0VBZUksV0FBQTtFQUNBLG1CQUFBO0VBQ0EsZUFBQTtFQUNBLHNCQUFBO0VBQ0EsOEJBQUE7RUFDQSxpQkFBQTtDWmsrQ0g7QVk3OUNEO0VBQ0Usa0JBQUE7RUFDQSxtQkFBQTtDWis5Q0Q7QWF6aEREO0VDSEUsbUJBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7Q2QraEREO0FhNWhEQztFQXdFRjtJQXZFSSxhQUFBO0diK2hERDtDQUNGO0FhOWhEQztFQXFFRjtJQXBFSSxhQUFBO0diaWlERDtDQUNGO0FhaGlEQztFQWtFRjtJQWpFSSxjQUFBO0dibWlERDtDQUNGO0FhMWhERDtFQ3ZCRSxtQkFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtDZG9qREQ7QWF2aEREO0VDdkJFLG1CQUFBO0VBQ0Esb0JBQUE7Q2RpakREO0FlampERztFQUNFLG1CQUFBO0VBRUEsZ0JBQUE7RUFFQSxtQkFBQTtFQUNBLG9CQUFBO0NmaWpETDtBZWppREc7RUFDRSxZQUFBO0NmbWlETDtBZTVoREM7RUFDRSxZQUFBO0NmOGhESDtBZS9oREM7RUFDRSxvQkFBQTtDZmlpREg7QWVsaURDO0VBQ0Usb0JBQUE7Q2ZvaURIO0FlcmlEQztFQUNFLFdBQUE7Q2Z1aURIO0FleGlEQztFQUNFLG9CQUFBO0NmMGlESDtBZTNpREM7RUFDRSxvQkFBQTtDZjZpREg7QWU5aURDO0VBQ0UsV0FBQTtDZmdqREg7QWVqakRDO0VBQ0Usb0JBQUE7Q2ZtakRIO0FlcGpEQztFQUNFLG9CQUFBO0Nmc2pESDtBZXZqREM7RUFDRSxXQUFBO0NmeWpESDtBZTFqREM7RUFDRSxvQkFBQTtDZjRqREg7QWU3akRDO0VBQ0UsbUJBQUE7Q2YrakRIO0FlampEQztFQUNFLFlBQUE7Q2ZtakRIO0FlcGpEQztFQUNFLG9CQUFBO0Nmc2pESDtBZXZqREM7RUFDRSxvQkFBQTtDZnlqREg7QWUxakRDO0VBQ0UsV0FBQTtDZjRqREg7QWU3akRDO0VBQ0Usb0JBQUE7Q2YrakRIO0FlaGtEQztFQUNFLG9CQUFBO0Nma2tESDtBZW5rREM7RUFDRSxXQUFBO0NmcWtESDtBZXRrREM7RUFDRSxvQkFBQTtDZndrREg7QWV6a0RDO0VBQ0Usb0JBQUE7Q2Yya0RIO0FlNWtEQztFQUNFLFdBQUE7Q2Y4a0RIO0FlL2tEQztFQUNFLG9CQUFBO0NmaWxESDtBZWxsREM7RUFDRSxtQkFBQTtDZm9sREg7QWVobERDO0VBQ0UsWUFBQTtDZmtsREg7QWVsbURDO0VBQ0UsV0FBQTtDZm9tREg7QWVybURDO0VBQ0UsbUJBQUE7Q2Z1bURIO0FleG1EQztFQUNFLG1CQUFBO0NmMG1ESDtBZTNtREM7RUFDRSxVQUFBO0NmNm1ESDtBZTltREM7RUFDRSxtQkFBQTtDZmduREg7QWVqbkRDO0VBQ0UsbUJBQUE7Q2ZtbkRIO0FlcG5EQztFQUNFLFVBQUE7Q2ZzbkRIO0Fldm5EQztFQUNFLG1CQUFBO0NmeW5ESDtBZTFuREM7RUFDRSxtQkFBQTtDZjRuREg7QWU3bkRDO0VBQ0UsVUFBQTtDZituREg7QWVob0RDO0VBQ0UsbUJBQUE7Q2Zrb0RIO0Flbm9EQztFQUNFLGtCQUFBO0NmcW9ESDtBZWpvREM7RUFDRSxXQUFBO0NmbW9ESDtBZXJuREM7RUFDRSxrQkFBQTtDZnVuREg7QWV4bkRDO0VBQ0UsMEJBQUE7Q2YwbkRIO0FlM25EQztFQUNFLDBCQUFBO0NmNm5ESDtBZTluREM7RUFDRSxpQkFBQTtDZmdvREg7QWVqb0RDO0VBQ0UsMEJBQUE7Q2Ztb0RIO0FlcG9EQztFQUNFLDBCQUFBO0Nmc29ESDtBZXZvREM7RUFDRSxpQkFBQTtDZnlvREg7QWUxb0RDO0VBQ0UsMEJBQUE7Q2Y0b0RIO0FlN29EQztFQUNFLDBCQUFBO0NmK29ESDtBZWhwREM7RUFDRSxpQkFBQTtDZmtwREg7QWVucERDO0VBQ0UsMEJBQUE7Q2ZxcERIO0FldHBEQztFQUNFLHlCQUFBO0Nmd3BESDtBZXpwREM7RUFDRSxnQkFBQTtDZjJwREg7QWFwcUREO0VFekJJO0lBQ0UsWUFBQTtHZmdzREg7RWV6ckREO0lBQ0UsWUFBQTtHZjJyREQ7RWU1ckREO0lBQ0Usb0JBQUE7R2Y4ckREO0VlL3JERDtJQUNFLG9CQUFBO0dmaXNERDtFZWxzREQ7SUFDRSxXQUFBO0dmb3NERDtFZXJzREQ7SUFDRSxvQkFBQTtHZnVzREQ7RWV4c0REO0lBQ0Usb0JBQUE7R2Ywc0REO0VlM3NERDtJQUNFLFdBQUE7R2Y2c0REO0VlOXNERDtJQUNFLG9CQUFBO0dmZ3RERDtFZWp0REQ7SUFDRSxvQkFBQTtHZm10REQ7RWVwdEREO0lBQ0UsV0FBQTtHZnN0REQ7RWV2dEREO0lBQ0Usb0JBQUE7R2Z5dEREO0VlMXRERDtJQUNFLG1CQUFBO0dmNHRERDtFZTlzREQ7SUFDRSxZQUFBO0dmZ3RERDtFZWp0REQ7SUFDRSxvQkFBQTtHZm10REQ7RWVwdEREO0lBQ0Usb0JBQUE7R2ZzdEREO0VldnRERDtJQUNFLFdBQUE7R2Z5dEREO0VlMXRERDtJQUNFLG9CQUFBO0dmNHRERDtFZTd0REQ7SUFDRSxvQkFBQTtHZit0REQ7RWVodUREO0lBQ0UsV0FBQTtHZmt1REQ7RWVudUREO0lBQ0Usb0JBQUE7R2ZxdUREO0VldHVERDtJQUNFLG9CQUFBO0dmd3VERDtFZXp1REQ7SUFDRSxXQUFBO0dmMnVERDtFZTV1REQ7SUFDRSxvQkFBQTtHZjh1REQ7RWUvdUREO0lBQ0UsbUJBQUE7R2ZpdkREO0VlN3VERDtJQUNFLFlBQUE7R2YrdUREO0VlL3ZERDtJQUNFLFdBQUE7R2Zpd0REO0VlbHdERDtJQUNFLG1CQUFBO0dmb3dERDtFZXJ3REQ7SUFDRSxtQkFBQTtHZnV3REQ7RWV4d0REO0lBQ0UsVUFBQTtHZjB3REQ7RWUzd0REO0lBQ0UsbUJBQUE7R2Y2d0REO0VlOXdERDtJQUNFLG1CQUFBO0dmZ3hERDtFZWp4REQ7SUFDRSxVQUFBO0dmbXhERDtFZXB4REQ7SUFDRSxtQkFBQTtHZnN4REQ7RWV2eEREO0lBQ0UsbUJBQUE7R2Z5eEREO0VlMXhERDtJQUNFLFVBQUE7R2Y0eEREO0VlN3hERDtJQUNFLG1CQUFBO0dmK3hERDtFZWh5REQ7SUFDRSxrQkFBQTtHZmt5REQ7RWU5eEREO0lBQ0UsV0FBQTtHZmd5REQ7RWVseEREO0lBQ0Usa0JBQUE7R2ZveEREO0VlcnhERDtJQUNFLDBCQUFBO0dmdXhERDtFZXh4REQ7SUFDRSwwQkFBQTtHZjB4REQ7RWUzeEREO0lBQ0UsaUJBQUE7R2Y2eEREO0VlOXhERDtJQUNFLDBCQUFBO0dmZ3lERDtFZWp5REQ7SUFDRSwwQkFBQTtHZm15REQ7RWVweUREO0lBQ0UsaUJBQUE7R2ZzeUREO0VldnlERDtJQUNFLDBCQUFBO0dmeXlERDtFZTF5REQ7SUFDRSwwQkFBQTtHZjR5REQ7RWU3eUREO0lBQ0UsaUJBQUE7R2YreUREO0VlaHpERDtJQUNFLDBCQUFBO0dma3pERDtFZW56REQ7SUFDRSx5QkFBQTtHZnF6REQ7RWV0ekREO0lBQ0UsZ0JBQUE7R2Z3ekREO0NBQ0Y7QWF6ekREO0VFbENJO0lBQ0UsWUFBQTtHZjgxREg7RWV2MUREO0lBQ0UsWUFBQTtHZnkxREQ7RWUxMUREO0lBQ0Usb0JBQUE7R2Y0MUREO0VlNzFERDtJQUNFLG9CQUFBO0dmKzFERDtFZWgyREQ7SUFDRSxXQUFBO0dmazJERDtFZW4yREQ7SUFDRSxvQkFBQTtHZnEyREQ7RWV0MkREO0lBQ0Usb0JBQUE7R2Z3MkREO0VlejJERDtJQUNFLFdBQUE7R2YyMkREO0VlNTJERDtJQUNFLG9CQUFBO0dmODJERDtFZS8yREQ7SUFDRSxvQkFBQTtHZmkzREQ7RWVsM0REO0lBQ0UsV0FBQTtHZm8zREQ7RWVyM0REO0lBQ0Usb0JBQUE7R2Z1M0REO0VleDNERDtJQUNFLG1CQUFBO0dmMDNERDtFZTUyREQ7SUFDRSxZQUFBO0dmODJERDtFZS8yREQ7SUFDRSxvQkFBQTtHZmkzREQ7RWVsM0REO0lBQ0Usb0JBQUE7R2ZvM0REO0VlcjNERDtJQUNFLFdBQUE7R2Z1M0REO0VleDNERDtJQUNFLG9CQUFBO0dmMDNERDtFZTMzREQ7SUFDRSxvQkFBQTtHZjYzREQ7RWU5M0REO0lBQ0UsV0FBQTtHZmc0REQ7RWVqNEREO0lBQ0Usb0JBQUE7R2ZtNEREO0VlcDRERDtJQUNFLG9CQUFBO0dmczRERDtFZXY0REQ7SUFDRSxXQUFBO0dmeTRERDtFZTE0REQ7SUFDRSxvQkFBQTtHZjQ0REQ7RWU3NEREO0lBQ0UsbUJBQUE7R2YrNEREO0VlMzRERDtJQUNFLFlBQUE7R2Y2NEREO0VlNzVERDtJQUNFLFdBQUE7R2YrNUREO0VlaDZERDtJQUNFLG1CQUFBO0dmazZERDtFZW42REQ7SUFDRSxtQkFBQTtHZnE2REQ7RWV0NkREO0lBQ0UsVUFBQTtHZnc2REQ7RWV6NkREO0lBQ0UsbUJBQUE7R2YyNkREO0VlNTZERDtJQUNFLG1CQUFBO0dmODZERDtFZS82REQ7SUFDRSxVQUFBO0dmaTdERDtFZWw3REQ7SUFDRSxtQkFBQTtHZm83REQ7RWVyN0REO0lBQ0UsbUJBQUE7R2Z1N0REO0VleDdERDtJQUNFLFVBQUE7R2YwN0REO0VlMzdERDtJQUNFLG1CQUFBO0dmNjdERDtFZTk3REQ7SUFDRSxrQkFBQTtHZmc4REQ7RWU1N0REO0lBQ0UsV0FBQTtHZjg3REQ7RWVoN0REO0lBQ0Usa0JBQUE7R2ZrN0REO0VlbjdERDtJQUNFLDBCQUFBO0dmcTdERDtFZXQ3REQ7SUFDRSwwQkFBQTtHZnc3REQ7RWV6N0REO0lBQ0UsaUJBQUE7R2YyN0REO0VlNTdERDtJQUNFLDBCQUFBO0dmODdERDtFZS83REQ7SUFDRSwwQkFBQTtHZmk4REQ7RWVsOEREO0lBQ0UsaUJBQUE7R2ZvOEREO0VlcjhERDtJQUNFLDBCQUFBO0dmdThERDtFZXg4REQ7SUFDRSwwQkFBQTtHZjA4REQ7RWUzOEREO0lBQ0UsaUJBQUE7R2Y2OEREO0VlOThERDtJQUNFLDBCQUFBO0dmZzlERDtFZWo5REQ7SUFDRSx5QkFBQTtHZm05REQ7RWVwOUREO0lBQ0UsZ0JBQUE7R2ZzOUREO0NBQ0Y7QWE5OEREO0VFM0NJO0lBQ0UsWUFBQTtHZjQvREg7RWVyL0REO0lBQ0UsWUFBQTtHZnUvREQ7RWV4L0REO0lBQ0Usb0JBQUE7R2YwL0REO0VlMy9ERDtJQUNFLG9CQUFBO0dmNi9ERDtFZTkvREQ7SUFDRSxXQUFBO0dmZ2dFRDtFZWpnRUQ7SUFDRSxvQkFBQTtHZm1nRUQ7RWVwZ0VEO0lBQ0Usb0JBQUE7R2ZzZ0VEO0VldmdFRDtJQUNFLFdBQUE7R2Z5Z0VEO0VlMWdFRDtJQUNFLG9CQUFBO0dmNGdFRDtFZTdnRUQ7SUFDRSxvQkFBQTtHZitnRUQ7RWVoaEVEO0lBQ0UsV0FBQTtHZmtoRUQ7RWVuaEVEO0lBQ0Usb0JBQUE7R2ZxaEVEO0VldGhFRDtJQUNFLG1CQUFBO0dmd2hFRDtFZTFnRUQ7SUFDRSxZQUFBO0dmNGdFRDtFZTdnRUQ7SUFDRSxvQkFBQTtHZitnRUQ7RWVoaEVEO0lBQ0Usb0JBQUE7R2ZraEVEO0VlbmhFRDtJQUNFLFdBQUE7R2ZxaEVEO0VldGhFRDtJQUNFLG9CQUFBO0dmd2hFRDtFZXpoRUQ7SUFDRSxvQkFBQTtHZjJoRUQ7RWU1aEVEO0lBQ0UsV0FBQTtHZjhoRUQ7RWUvaEVEO0lBQ0Usb0JBQUE7R2ZpaUVEO0VlbGlFRDtJQUNFLG9CQUFBO0dmb2lFRDtFZXJpRUQ7SUFDRSxXQUFBO0dmdWlFRDtFZXhpRUQ7SUFDRSxvQkFBQTtHZjBpRUQ7RWUzaUVEO0lBQ0UsbUJBQUE7R2Y2aUVEO0VlemlFRDtJQUNFLFlBQUE7R2YyaUVEO0VlM2pFRDtJQUNFLFdBQUE7R2Y2akVEO0VlOWpFRDtJQUNFLG1CQUFBO0dmZ2tFRDtFZWprRUQ7SUFDRSxtQkFBQTtHZm1rRUQ7RWVwa0VEO0lBQ0UsVUFBQTtHZnNrRUQ7RWV2a0VEO0lBQ0UsbUJBQUE7R2Z5a0VEO0VlMWtFRDtJQUNFLG1CQUFBO0dmNGtFRDtFZTdrRUQ7SUFDRSxVQUFBO0dmK2tFRDtFZWhsRUQ7SUFDRSxtQkFBQTtHZmtsRUQ7RWVubEVEO0lBQ0UsbUJBQUE7R2ZxbEVEO0VldGxFRDtJQUNFLFVBQUE7R2Z3bEVEO0VlemxFRDtJQUNFLG1CQUFBO0dmMmxFRDtFZTVsRUQ7SUFDRSxrQkFBQTtHZjhsRUQ7RWUxbEVEO0lBQ0UsV0FBQTtHZjRsRUQ7RWU5a0VEO0lBQ0Usa0JBQUE7R2ZnbEVEO0VlamxFRDtJQUNFLDBCQUFBO0dmbWxFRDtFZXBsRUQ7SUFDRSwwQkFBQTtHZnNsRUQ7RWV2bEVEO0lBQ0UsaUJBQUE7R2Z5bEVEO0VlMWxFRDtJQUNFLDBCQUFBO0dmNGxFRDtFZTdsRUQ7SUFDRSwwQkFBQTtHZitsRUQ7RWVobUVEO0lBQ0UsaUJBQUE7R2ZrbUVEO0Vlbm1FRDtJQUNFLDBCQUFBO0dmcW1FRDtFZXRtRUQ7SUFDRSwwQkFBQTtHZndtRUQ7RWV6bUVEO0lBQ0UsaUJBQUE7R2YybUVEO0VlNW1FRDtJQUNFLDBCQUFBO0dmOG1FRDtFZS9tRUQ7SUFDRSx5QkFBQTtHZmluRUQ7RWVsbkVEO0lBQ0UsZ0JBQUE7R2ZvbkVEO0NBQ0Y7QWdCeHJFRDtFQUNFLDhCQUFBO0NoQjByRUQ7QWdCeHJFRDtFQUNFLGlCQUFBO0VBQ0Esb0JBQUE7RUFDQSxlQUFBO0VBQ0EsaUJBQUE7Q2hCMHJFRDtBZ0J4ckVEO0VBQ0UsaUJBQUE7Q2hCMHJFRDtBZ0JwckVEO0VBQ0UsWUFBQTtFQUNBLGdCQUFBO0VBQ0Esb0JBQUE7Q2hCc3JFRDtBZ0J6ckVEOzs7Ozs7RUFXUSxhQUFBO0VBQ0Esd0JBQUE7RUFDQSxvQkFBQTtFQUNBLDJCQUFBO0NoQnNyRVA7QWdCcHNFRDtFQW9CSSx1QkFBQTtFQUNBLDhCQUFBO0NoQm1yRUg7QWdCeHNFRDs7Ozs7O0VBOEJRLGNBQUE7Q2hCa3JFUDtBZ0JodEVEO0VBb0NJLDJCQUFBO0NoQitxRUg7QWdCbnRFRDtFQXlDSSx1QkFBQTtDaEI2cUVIO0FnQnRxRUQ7Ozs7OztFQU9RLGFBQUE7Q2hCdXFFUDtBZ0I1cEVEO0VBQ0UsdUJBQUE7Q2hCOHBFRDtBZ0IvcEVEOzs7Ozs7RUFRUSx1QkFBQTtDaEIrcEVQO0FnQnZxRUQ7O0VBZU0seUJBQUE7Q2hCNHBFTDtBZ0JscEVEO0VBRUksMEJBQUE7Q2hCbXBFSDtBZ0Ixb0VEO0VBRUksMEJBQUE7Q2hCMm9FSDtBZ0Jsb0VEO0VBQ0UsaUJBQUE7RUFDQSxZQUFBO0VBQ0Esc0JBQUE7Q2hCb29FRDtBZ0IvbkVHOztFQUNFLGlCQUFBO0VBQ0EsWUFBQTtFQUNBLG9CQUFBO0NoQmtvRUw7QWlCOXdFQzs7Ozs7Ozs7Ozs7O0VBT0ksMEJBQUE7Q2pCcXhFTDtBaUIvd0VDOzs7OztFQU1JLDBCQUFBO0NqQmd4RUw7QWlCbnlFQzs7Ozs7Ozs7Ozs7O0VBT0ksMEJBQUE7Q2pCMHlFTDtBaUJweUVDOzs7OztFQU1JLDBCQUFBO0NqQnF5RUw7QWlCeHpFQzs7Ozs7Ozs7Ozs7O0VBT0ksMEJBQUE7Q2pCK3pFTDtBaUJ6ekVDOzs7OztFQU1JLDBCQUFBO0NqQjB6RUw7QWlCNzBFQzs7Ozs7Ozs7Ozs7O0VBT0ksMEJBQUE7Q2pCbzFFTDtBaUI5MEVDOzs7OztFQU1JLDBCQUFBO0NqQiswRUw7QWlCbDJFQzs7Ozs7Ozs7Ozs7O0VBT0ksMEJBQUE7Q2pCeTJFTDtBaUJuMkVDOzs7OztFQU1JLDBCQUFBO0NqQm8yRUw7QWdCbHRFRDtFQUNFLGlCQUFBO0VBQ0Esa0JBQUE7Q2hCb3RFRDtBZ0JsdEVDO0VBNERGO0lBM0RJLFlBQUE7SUFDQSxvQkFBQTtJQUNBLG1CQUFBO0lBQ0EsNkNBQUE7SUFDQSx1QkFBQTtHaEJxdEVEO0VnQjlwRUg7SUFuRE0saUJBQUE7R2hCb3RFSDtFZ0JqcUVIOzs7Ozs7SUExQ1ksb0JBQUE7R2hCbXRFVDtFZ0J6cUVIO0lBbENNLFVBQUE7R2hCOHNFSDtFZ0I1cUVIOzs7Ozs7SUF6QlksZUFBQTtHaEI2c0VUO0VnQnByRUg7Ozs7OztJQXJCWSxnQkFBQTtHaEJpdEVUO0VnQjVyRUg7Ozs7SUFSWSxpQkFBQTtHaEIwc0VUO0NBQ0Y7QWtCcDZFRDtFQUNFLFdBQUE7RUFDQSxVQUFBO0VBQ0EsVUFBQTtFQUlBLGFBQUE7Q2xCbTZFRDtBa0JoNkVEO0VBQ0UsZUFBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0VBQ0Esb0JBQUE7RUFDQSxnQkFBQTtFQUNBLHFCQUFBO0VBQ0EsZUFBQTtFQUNBLFVBQUE7RUFDQSxpQ0FBQTtDbEJrNkVEO0FrQi81RUQ7RUFDRSxzQkFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxrQkFBQTtDbEJpNkVEO0FrQnQ1RUQ7RWI4QlUsdUJBQUE7Q0w2M0VUO0FrQnQ1RUQ7O0VBRUUsZ0JBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0NsQnc1RUQ7QWtCcjVFRDtFQUNFLGVBQUE7Q2xCdTVFRDtBa0JuNUVEO0VBQ0UsZUFBQTtFQUNBLFlBQUE7Q2xCcTVFRDtBa0JqNUVEOztFQUVFLGFBQUE7Q2xCbTVFRDtBa0IvNEVEOzs7RVp2RUUscUJBQUE7RUFFQSwyQ0FBQTtFQUNBLHFCQUFBO0NOMDlFRDtBa0IvNEVEO0VBQ0UsZUFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSx3QkFBQTtFQUNBLGVBQUE7Q2xCaTVFRDtBa0J2M0VEO0VBQ0UsZUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLHdCQUFBO0VBQ0EsZUFBQTtFQUNBLHVCQUFBO0VBQ0EsdUJBQUE7RUFDQSx1QkFBQTtFQUNBLG1CQUFBO0VidkRRLGlEQUFBO0VBMkhBLHVFQUFBO0NMMHpFVDtBbUJsOEVDO0VBQ0Usc0JBQUE7RUFDQSxXQUFBO0VkV00sK0VBQUE7Q0wyN0VUO0FLMTVFQztFQUNFLFlBQUE7RUFDQSxXQUFBO0NMNDVFSDtBSzE1RUM7RUFBMEIsWUFBQTtDTDY1RTNCO0FLNTVFQztFQUFnQyxZQUFBO0NMKzVFakM7QWtCLzNFQzs7O0VBR0UsMEJBQUE7RUFDQSxXQUFBO0NsQmk0RUg7QWtCOTNFQzs7RUFFRSxvQkFBQTtDbEJnNEVIO0FrQjUzRUM7RUFDRSxhQUFBO0NsQjgzRUg7QWtCbDNFRDtFQUNFLHlCQUFBO0NsQm8zRUQ7QWtCdjJFRDtFQUtJOzs7O0lBQ0Usa0JBQUE7R2xCdzJFSDtFa0JyMkVDOzs7Ozs7OztJQUVFLGtCQUFBO0dsQjYyRUg7RWtCMTJFQzs7Ozs7Ozs7SUFFRSxrQkFBQTtHbEJrM0VIO0NBQ0Y7QWtCeDJFRDtFQUNFLG9CQUFBO0NsQjAyRUQ7QWtCbDJFRDs7RUFFRSxtQkFBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0NsQm8yRUQ7QWtCejJFRDs7RUFRSSxpQkFBQTtFQUNBLG1CQUFBO0VBQ0EsaUJBQUE7RUFDQSxvQkFBQTtFQUNBLGdCQUFBO0NsQnEyRUg7QWtCbDJFRDs7OztFQUlFLG1CQUFBO0VBQ0EsbUJBQUE7RUFDQSxtQkFBQTtDbEJvMkVEO0FrQmoyRUQ7O0VBRUUsaUJBQUE7Q2xCbTJFRDtBa0IvMUVEOztFQUVFLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxtQkFBQTtFQUNBLGlCQUFBO0VBQ0EsdUJBQUE7RUFDQSxvQkFBQTtFQUNBLGdCQUFBO0NsQmkyRUQ7QWtCLzFFRDs7RUFFRSxjQUFBO0VBQ0Esa0JBQUE7Q2xCaTJFRDtBa0J4MUVDOzs7Ozs7RUFHRSxvQkFBQTtDbEI2MUVIO0FrQnYxRUM7Ozs7RUFFRSxvQkFBQTtDbEIyMUVIO0FrQnIxRUM7Ozs7RUFHSSxvQkFBQTtDbEJ3MUVMO0FrQjcwRUQ7RUFFRSxpQkFBQTtFQUNBLG9CQUFBO0VBRUEsaUJBQUE7RUFDQSxpQkFBQTtDbEI2MEVEO0FrQjMwRUM7O0VBRUUsZ0JBQUE7RUFDQSxpQkFBQTtDbEI2MEVIO0FrQmgwRUQ7RUM3UEUsYUFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLG1CQUFBO0NuQmdrRkQ7QW1COWpGQztFQUNFLGFBQUE7RUFDQSxrQkFBQTtDbkJna0ZIO0FtQjdqRkM7O0VBRUUsYUFBQTtDbkIrakZIO0FrQjUwRUQ7RUFFSSxhQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0VBQ0EsbUJBQUE7Q2xCNjBFSDtBa0JuMUVEO0VBU0ksYUFBQTtFQUNBLGtCQUFBO0NsQjYwRUg7QWtCdjFFRDs7RUFjSSxhQUFBO0NsQjYwRUg7QWtCMzFFRDtFQWlCSSxhQUFBO0VBQ0EsaUJBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EsaUJBQUE7Q2xCNjBFSDtBa0J6MEVEO0VDelJFLGFBQUE7RUFDQSxtQkFBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtDbkJxbUZEO0FtQm5tRkM7RUFDRSxhQUFBO0VBQ0Esa0JBQUE7Q25CcW1GSDtBbUJsbUZDOztFQUVFLGFBQUE7Q25Cb21GSDtBa0JyMUVEO0VBRUksYUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSx1QkFBQTtFQUNBLG1CQUFBO0NsQnMxRUg7QWtCNTFFRDtFQVNJLGFBQUE7RUFDQSxrQkFBQTtDbEJzMUVIO0FrQmgyRUQ7O0VBY0ksYUFBQTtDbEJzMUVIO0FrQnAyRUQ7RUFpQkksYUFBQTtFQUNBLGlCQUFBO0VBQ0EsbUJBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0NsQnMxRUg7QWtCNzBFRDtFQUVFLG1CQUFBO0NsQjgwRUQ7QWtCaDFFRDtFQU1JLHNCQUFBO0NsQjYwRUg7QWtCejBFRDtFQUNFLG1CQUFBO0VBQ0EsT0FBQTtFQUNBLFNBQUE7RUFDQSxXQUFBO0VBQ0EsZUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0Esa0JBQUE7RUFDQSxtQkFBQTtFQUNBLHFCQUFBO0NsQjIwRUQ7QWtCejBFRDs7O0VBR0UsWUFBQTtFQUNBLGFBQUE7RUFDQSxrQkFBQTtDbEIyMEVEO0FrQnowRUQ7OztFQUdFLFlBQUE7RUFDQSxhQUFBO0VBQ0Esa0JBQUE7Q2xCMjBFRDtBa0J2MEVEOzs7Ozs7Ozs7O0VDcFpJLGVBQUE7Q25CdXVGSDtBa0JuMUVEO0VDaFpJLHNCQUFBO0VkZ0RNLGlEQUFBO0NMd3JGVDtBbUJ0dUZHO0VBQ0Usc0JBQUE7RWQ2Q0ksa0VBQUE7Q0w2ckZUO0FrQjcxRUQ7RUN0WUksZUFBQTtFQUNBLHNCQUFBO0VBQ0EsMEJBQUE7Q25Cc3VGSDtBa0JsMkVEO0VDaFlJLGVBQUE7Q25CcXVGSDtBa0JsMkVEOzs7Ozs7Ozs7O0VDdlpJLGVBQUE7Q25CcXdGSDtBa0I5MkVEO0VDblpJLHNCQUFBO0VkZ0RNLGlEQUFBO0NMc3RGVDtBbUJwd0ZHO0VBQ0Usc0JBQUE7RWQ2Q0ksa0VBQUE7Q0wydEZUO0FrQngzRUQ7RUN6WUksZUFBQTtFQUNBLHNCQUFBO0VBQ0EsMEJBQUE7Q25Cb3dGSDtBa0I3M0VEO0VDbllJLGVBQUE7Q25CbXdGSDtBa0I3M0VEOzs7Ozs7Ozs7O0VDMVpJLGVBQUE7Q25CbXlGSDtBa0J6NEVEO0VDdFpJLHNCQUFBO0VkZ0RNLGlEQUFBO0NMb3ZGVDtBbUJseUZHO0VBQ0Usc0JBQUE7RWQ2Q0ksa0VBQUE7Q0x5dkZUO0FrQm41RUQ7RUM1WUksZUFBQTtFQUNBLHNCQUFBO0VBQ0EsMEJBQUE7Q25Ca3lGSDtBa0J4NUVEO0VDdFlJLGVBQUE7Q25CaXlGSDtBa0JwNUVDO0VBQ0csVUFBQTtDbEJzNUVKO0FrQnA1RUM7RUFDRyxPQUFBO0NsQnM1RUo7QWtCNTRFRDtFQUNFLGVBQUE7RUFDQSxnQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZUFBQTtDbEI4NEVEO0FrQjUzRUM7RUF5SUY7SUF0SU0sc0JBQUE7SUFDQSxpQkFBQTtJQUNBLHVCQUFBO0dsQjYzRUg7RWtCenZFSDtJQS9ITSxzQkFBQTtJQUNBLFlBQUE7SUFDQSx1QkFBQTtHbEIyM0VIO0VrQjl2RUg7SUF4SE0sc0JBQUE7R2xCeTNFSDtFa0Jqd0VIO0lBcEhNLHNCQUFBO0lBQ0EsdUJBQUE7R2xCdzNFSDtFa0Jyd0VIOzs7SUE5R1EsWUFBQTtHbEJ3M0VMO0VrQjF3RUg7SUF4R00sWUFBQTtHbEJxM0VIO0VrQjd3RUg7SUFwR00saUJBQUE7SUFDQSx1QkFBQTtHbEJvM0VIO0VrQmp4RUg7O0lBNUZNLHNCQUFBO0lBQ0EsY0FBQTtJQUNBLGlCQUFBO0lBQ0EsdUJBQUE7R2xCaTNFSDtFa0J4eEVIOztJQXRGUSxnQkFBQTtHbEJrM0VMO0VrQjV4RUg7O0lBakZNLG1CQUFBO0lBQ0EsZUFBQTtHbEJpM0VIO0VrQmp5RUg7SUEzRU0sT0FBQTtHbEIrMkVIO0NBQ0Y7QWtCcjJFRDs7OztFQVNJLGNBQUE7RUFDQSxpQkFBQTtFQUNBLGlCQUFBO0NsQmsyRUg7QWtCNzJFRDs7RUFpQkksaUJBQUE7Q2xCZzJFSDtBa0JqM0VEO0VKaGhCRSxtQkFBQTtFQUNBLG9CQUFBO0NkbzRGRDtBa0IxMUVDO0VBcUNGO0lBbkNNLGtCQUFBO0lBQ0EsaUJBQUE7SUFDQSxpQkFBQTtHbEI0MUVIO0NBQ0Y7QWtCNTNFRDtFQXdDSSxZQUFBO0NsQnUxRUg7QWtCLzBFRztFQWdCSjtJQWRRLHlCQUFBO0lBQ0EsZ0JBQUE7R2xCaTFFTDtDQUNGO0FrQjcwRUc7RUFRSjtJQU5RLGlCQUFBO0lBQ0EsZ0JBQUE7R2xCKzBFTDtDQUNGO0FvQmw2RkQ7RUFDRSxzQkFBQTtFQUNBLGlCQUFBO0VBQ0Esb0JBQUE7RUFDQSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EsK0JBQUE7TUFBQSwyQkFBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSw4QkFBQTtFQUNBLG9CQUFBO0VDNkNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSx3QkFBQTtFQUNBLG1CQUFBO0VoQjRKQSwwQkFBQTtFQUVJLHNCQUFBO0VBQ0ksa0JBQUE7Q0w2dEZUO0FvQnI2Rkc7Ozs7OztFZHJCRixxQkFBQTtFQUVBLDJDQUFBO0VBQ0EscUJBQUE7Q05pOEZEO0FvQno2RkM7OztFQUdFLFlBQUE7RUFDQSxzQkFBQTtDcEIyNkZIO0FvQng2RkM7O0VBRUUsV0FBQTtFQUNBLHVCQUFBO0VmNEJNLGlEQUFBO0NMZzVGVDtBb0J4NkZDOzs7RUFHRSxvQkFBQTtFRTdDRixjQUFBO0VBR0EsMEJBQUE7RWpCK0RRLGlCQUFBO0NMeTVGVDtBb0J4NkZHOztFQUVFLHFCQUFBO0NwQjA2Rkw7QW9CajZGRDtFQzNERSxZQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtDckIrOUZEO0FxQjc5RkM7O0VBRUUsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCKzlGUDtBcUI3OUZDO0VBQ0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCKzlGUDtBcUI3OUZDOzs7RUFHRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckIrOUZQO0FxQjc5Rkc7Ozs7Ozs7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQnErRlQ7QXFCbCtGQzs7O0VBR0UsdUJBQUE7Q3JCbytGSDtBcUIvOUZHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFNRSx1QkFBQTtFQUNJLG1CQUFBO0NyQjYrRlQ7QW9CLzlGRDtFQ1RJLFlBQUE7RUFDQSx1QkFBQTtDckIyK0ZIO0FvQmgrRkQ7RUM5REUsWUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q3JCaWlHRDtBcUIvaEdDOztFQUVFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQmlpR1A7QXFCL2hHQztFQUNFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQmlpR1A7QXFCL2hHQzs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCaWlHUDtBcUIvaEdHOzs7Ozs7Ozs7RUFHRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckJ1aUdUO0FxQnBpR0M7OztFQUdFLHVCQUFBO0NyQnNpR0g7QXFCamlHRzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBTUUsMEJBQUE7RUFDSSxzQkFBQTtDckIraUdUO0FvQjloR0Q7RUNaSSxlQUFBO0VBQ0EsdUJBQUE7Q3JCNmlHSDtBb0I5aEdEO0VDbEVFLFlBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0NyQm1tR0Q7QXFCam1HQzs7RUFFRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckJtbUdQO0FxQmptR0M7RUFDRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckJtbUdQO0FxQmptR0M7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQm1tR1A7QXFCam1HRzs7Ozs7Ozs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCeW1HVDtBcUJ0bUdDOzs7RUFHRSx1QkFBQTtDckJ3bUdIO0FxQm5tR0c7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQU1FLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCaW5HVDtBb0I1bEdEO0VDaEJJLGVBQUE7RUFDQSx1QkFBQTtDckIrbUdIO0FvQjVsR0Q7RUN0RUUsWUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q3JCcXFHRDtBcUJucUdDOztFQUVFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQnFxR1A7QXFCbnFHQztFQUNFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQnFxR1A7QXFCbnFHQzs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCcXFHUDtBcUJucUdHOzs7Ozs7Ozs7RUFHRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckIycUdUO0FxQnhxR0M7OztFQUdFLHVCQUFBO0NyQjBxR0g7QXFCcnFHRzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBTUUsMEJBQUE7RUFDSSxzQkFBQTtDckJtckdUO0FvQjFwR0Q7RUNwQkksZUFBQTtFQUNBLHVCQUFBO0NyQmlyR0g7QW9CMXBHRDtFQzFFRSxZQUFBO0VBQ0EsMEJBQUE7RUFDQSxzQkFBQTtDckJ1dUdEO0FxQnJ1R0M7O0VBRUUsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCdXVHUDtBcUJydUdDO0VBQ0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCdXVHUDtBcUJydUdDOzs7RUFHRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckJ1dUdQO0FxQnJ1R0c7Ozs7Ozs7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQjZ1R1Q7QXFCMXVHQzs7O0VBR0UsdUJBQUE7Q3JCNHVHSDtBcUJ2dUdHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFNRSwwQkFBQTtFQUNJLHNCQUFBO0NyQnF2R1Q7QW9CeHRHRDtFQ3hCSSxlQUFBO0VBQ0EsdUJBQUE7Q3JCbXZHSDtBb0J4dEdEO0VDOUVFLFlBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0NyQnl5R0Q7QXFCdnlHQzs7RUFFRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckJ5eUdQO0FxQnZ5R0M7RUFDRSxZQUFBO0VBQ0EsMEJBQUE7RUFDSSxzQkFBQTtDckJ5eUdQO0FxQnZ5R0M7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNJLHNCQUFBO0NyQnl5R1A7QXFCdnlHRzs7Ozs7Ozs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCK3lHVDtBcUI1eUdDOzs7RUFHRSx1QkFBQTtDckI4eUdIO0FxQnp5R0c7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQU1FLDBCQUFBO0VBQ0ksc0JBQUE7Q3JCdXpHVDtBb0J0eEdEO0VDNUJJLGVBQUE7RUFDQSx1QkFBQTtDckJxekdIO0FvQmp4R0Q7RUFDRSxlQUFBO0VBQ0Esb0JBQUE7RUFDQSxpQkFBQTtDcEJteEdEO0FvQmp4R0M7Ozs7O0VBS0UsOEJBQUE7RWZsQ00saUJBQUE7Q0x1ekdUO0FvQmx4R0M7Ozs7RUFJRSwwQkFBQTtDcEJveEdIO0FvQmx4R0M7O0VBRUUsZUFBQTtFQUNBLDJCQUFBO0VBQ0EsOEJBQUE7Q3BCb3hHSDtBb0JoeEdHOzs7O0VBRUUsZUFBQTtFQUNBLHNCQUFBO0NwQm94R0w7QW9CM3dHRDs7RUNyRUUsbUJBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7Q3JCbzFHRDtBb0I5d0dEOztFQ3pFRSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxtQkFBQTtDckIyMUdEO0FvQmp4R0Q7O0VDN0VFLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLG1CQUFBO0NyQmsyR0Q7QW9CaHhHRDtFQUNFLGVBQUE7RUFDQSxZQUFBO0NwQmt4R0Q7QW9COXdHRDtFQUNFLGdCQUFBO0NwQmd4R0Q7QW9CendHQzs7O0VBQ0UsWUFBQTtDcEI2d0dIO0F1QnY2R0Q7RUFDRSxXQUFBO0VsQnNMUSxpQ0FBQTtDTHN2R1Q7QXVCMTZHQztFQUNFLFdBQUE7Q3ZCNDZHSDtBdUJ4NkdEO0VBQ0UsY0FBQTtDdkIwNkdEO0F1Qng2R0M7RUFBWSxlQUFBO0N2QjI2R2I7QXVCMTZHQztFQUFZLG1CQUFBO0N2QjY2R2I7QXVCNTZHQztFQUFZLHlCQUFBO0N2Qis2R2I7QXVCNTZHRDtFQUNFLG1CQUFBO0VBQ0EsVUFBQTtFQUNBLGlCQUFBO0VsQndLUSx3Q0FBQTtFQVFBLDJCQUFBO0VBSUEsaUNBQUE7Q0xnd0dUO0F3QjE4R0Q7RUFDRSxzQkFBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0VBQ0EsaUJBQUE7RUFDQSx1QkFBQTtFQUNBLHVCQUFBO0VBQ0EseUJBQUE7RUFDQSxvQ0FBQTtFQUNBLG1DQUFBO0N4QjQ4R0Q7QXdCeDhHRDs7RUFFRSxtQkFBQTtDeEIwOEdEO0F3QnQ4R0Q7RUFDRSxXQUFBO0N4Qnc4R0Q7QXdCcDhHRDtFQUNFLG1CQUFBO0VBQ0EsVUFBQTtFQUNBLFFBQUE7RUFDQSxjQUFBO0VBQ0EsY0FBQTtFQUNBLFlBQUE7RUFDQSxpQkFBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLHVCQUFBO0VBQ0EsdUJBQUE7RUFDQSxzQ0FBQTtFQUNBLG1CQUFBO0VuQnVCUSw0Q0FBQTtFbUJyQlIsNkJBQUE7Q3hCdThHRDtBd0JsOEdDO0VBQ0UsU0FBQTtFQUNBLFdBQUE7Q3hCbzhHSDtBd0I3OUdEO0VDekJFLFlBQUE7RUFDQSxjQUFBO0VBQ0EsaUJBQUE7RUFDQSwwQkFBQTtDekJ5L0dEO0F3Qm4rR0Q7RUFtQ0ksZUFBQTtFQUNBLGtCQUFBO0VBQ0EsWUFBQTtFQUNBLG9CQUFBO0VBQ0Esd0JBQUE7RUFDQSxlQUFBO0VBQ0Esb0JBQUE7Q3hCbThHSDtBd0I3N0dDOztFQUVFLHNCQUFBO0VBQ0EsZUFBQTtFQUNBLDBCQUFBO0N4Qis3R0g7QXdCejdHQzs7O0VBR0UsWUFBQTtFQUNBLHNCQUFBO0VBQ0EsV0FBQTtFQUNBLDBCQUFBO0N4QjI3R0g7QXdCbDdHQzs7O0VBR0UsZUFBQTtDeEJvN0dIO0F3Qmg3R0M7O0VBRUUsc0JBQUE7RUFDQSw4QkFBQTtFQUNBLHVCQUFBO0VFM0dGLG9FQUFBO0VGNkdFLG9CQUFBO0N4Qms3R0g7QXdCNzZHRDtFQUdJLGVBQUE7Q3hCNjZHSDtBd0JoN0dEO0VBUUksV0FBQTtDeEIyNkdIO0F3Qm42R0Q7RUFDRSxXQUFBO0VBQ0EsU0FBQTtDeEJxNkdEO0F3Qjc1R0Q7RUFDRSxRQUFBO0VBQ0EsWUFBQTtDeEIrNUdEO0F3QjM1R0Q7RUFDRSxlQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLHdCQUFBO0VBQ0EsZUFBQTtFQUNBLG9CQUFBO0N4QjY1R0Q7QXdCejVHRDtFQUNFLGdCQUFBO0VBQ0EsUUFBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0VBQ0EsT0FBQTtFQUNBLGFBQUE7Q3hCMjVHRDtBd0J2NUdEO0VBQ0UsU0FBQTtFQUNBLFdBQUE7Q3hCeTVHRDtBd0JqNUdEOztFQUlJLGNBQUE7RUFDQSwwQkFBQTtFQUNBLDRCQUFBO0VBQ0EsWUFBQTtDeEJpNUdIO0F3Qng1R0Q7O0VBV0ksVUFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtDeEJpNUdIO0F3Qng0R0Q7RUFDRTtJQXBFQSxXQUFBO0lBQ0EsU0FBQTtHeEIrOEdDO0V3QjU0R0Q7SUExREEsUUFBQTtJQUNBLFlBQUE7R3hCeThHQztDQUNGO0EyQnpsSEQ7O0VBRUUsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLHVCQUFBO0MzQjJsSEQ7QTJCL2xIRDs7RUFNSSxtQkFBQTtFQUNBLFlBQUE7QzNCNmxISDtBMkIzbEhHOzs7Ozs7OztFQUlFLFdBQUE7QzNCaW1ITDtBMkIzbEhEOzs7O0VBS0ksa0JBQUE7QzNCNGxISDtBMkJ2bEhEO0VBQ0Usa0JBQUE7QzNCeWxIRDtBMkIxbEhEOzs7RUFPSSxZQUFBO0MzQndsSEg7QTJCL2xIRDs7O0VBWUksaUJBQUE7QzNCd2xISDtBMkJwbEhEO0VBQ0UsaUJBQUE7QzNCc2xIRDtBMkJsbEhEO0VBQ0UsZUFBQTtDM0JvbEhEO0EyQm5sSEM7RUNsREEsOEJBQUE7RUFDRywyQkFBQTtDNUJ3b0hKO0EyQmxsSEQ7O0VDL0NFLDZCQUFBO0VBQ0csMEJBQUE7QzVCcW9ISjtBMkJqbEhEO0VBQ0UsWUFBQTtDM0JtbEhEO0EyQmpsSEQ7RUFDRSxpQkFBQTtDM0JtbEhEO0EyQmpsSEQ7O0VDbkVFLDhCQUFBO0VBQ0csMkJBQUE7QzVCd3BISjtBMkJobEhEO0VDakVFLDZCQUFBO0VBQ0csMEJBQUE7QzVCb3BISjtBMkIva0hEOztFQUVFLFdBQUE7QzNCaWxIRDtBMkJoa0hEO0VBQ0Usa0JBQUE7RUFDQSxtQkFBQTtDM0Jra0hEO0EyQmhrSEQ7RUFDRSxtQkFBQTtFQUNBLG9CQUFBO0MzQmtrSEQ7QTJCN2pIRDtFdEI5Q1UsaURBQUE7Q0wrbUhUO0EyQjdqSEM7RXRCbERRLGlCQUFBO0NMbW5IVDtBMkIxakhEO0VBQ0UsZUFBQTtDM0I0akhEO0EyQnpqSEQ7RUFDRSx3QkFBQTtFQUNBLHVCQUFBO0MzQjJqSEQ7QTJCeGpIRDtFQUNFLHdCQUFBO0MzQjBqSEQ7QTJCbmpIRDs7O0VBSUksZUFBQTtFQUNBLFlBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7QzNCb2pISDtBMkIzakhEO0VBY00sWUFBQTtDM0JnakhMO0EyQjlqSEQ7Ozs7RUFzQkksaUJBQUE7RUFDQSxlQUFBO0MzQjhpSEg7QTJCemlIQztFQUNFLGlCQUFBO0MzQjJpSEg7QTJCemlIQztFQUNFLDZCQUFBO0VDcEtGLDhCQUFBO0VBQ0MsNkJBQUE7QzVCZ3RIRjtBMkIxaUhDO0VBQ0UsK0JBQUE7RUNoTEYsMkJBQUE7RUFDQywwQkFBQTtDNUI2dEhGO0EyQjFpSEQ7RUFDRSxpQkFBQTtDM0I0aUhEO0EyQjFpSEQ7O0VDL0tFLDhCQUFBO0VBQ0MsNkJBQUE7QzVCNnRIRjtBMkJ6aUhEO0VDN0xFLDJCQUFBO0VBQ0MsMEJBQUE7QzVCeXVIRjtBMkJyaUhEO0VBQ0UsZUFBQTtFQUNBLFlBQUE7RUFDQSxvQkFBQTtFQUNBLDBCQUFBO0MzQnVpSEQ7QTJCM2lIRDs7RUFPSSxZQUFBO0VBQ0Esb0JBQUE7RUFDQSxVQUFBO0MzQndpSEg7QTJCampIRDtFQVlJLFlBQUE7QzNCd2lISDtBMkJwakhEO0VBZ0JJLFdBQUE7QzNCdWlISDtBMkJ0aEhEOzs7O0VBS00sbUJBQUE7RUFDQSx1QkFBQTtFQUNBLHFCQUFBO0MzQnVoSEw7QTZCandIRDtFQUNFLG1CQUFBO0VBQ0EsZUFBQTtFQUNBLDBCQUFBO0M3Qm13SEQ7QTZCaHdIQztFQUNFLFlBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0M3Qmt3SEg7QTZCM3dIRDtFQWVJLG1CQUFBO0VBQ0EsV0FBQTtFQUtBLFlBQUE7RUFFQSxZQUFBO0VBQ0EsaUJBQUE7QzdCMHZISDtBNkJqdkhEOzs7RVY4QkUsYUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSx1QkFBQTtFQUNBLG1CQUFBO0NuQnd0SEQ7QW1CdHRIQzs7O0VBQ0UsYUFBQTtFQUNBLGtCQUFBO0NuQjB0SEg7QW1CdnRIQzs7Ozs7O0VBRUUsYUFBQTtDbkI2dEhIO0E2Qm53SEQ7OztFVnlCRSxhQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0VBQ0EsbUJBQUE7Q25CK3VIRDtBbUI3dUhDOzs7RUFDRSxhQUFBO0VBQ0Esa0JBQUE7Q25CaXZISDtBbUI5dUhDOzs7Ozs7RUFFRSxhQUFBO0NuQm92SEg7QTZCanhIRDs7O0VBR0Usb0JBQUE7QzdCbXhIRDtBNkJqeEhDOzs7RUFDRSxpQkFBQTtDN0JxeEhIO0E2Qmp4SEQ7O0VBRUUsVUFBQTtFQUNBLG9CQUFBO0VBQ0EsdUJBQUE7QzdCbXhIRDtBNkI5d0hEO0VBQ0Usa0JBQUE7RUFDQSxnQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZUFBQTtFQUNBLGVBQUE7RUFDQSxtQkFBQTtFQUNBLDBCQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtDN0JneEhEO0E2Qjd3SEM7RUFDRSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7QzdCK3dISDtBNkI3d0hDO0VBQ0UsbUJBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0M3Qit3SEg7QTZCbnlIRDs7RUEwQkksY0FBQTtDN0I2d0hIO0E2Qnh3SEQ7Ozs7Ozs7RURoR0UsOEJBQUE7RUFDRywyQkFBQTtDNUJpM0hKO0E2Qnp3SEQ7RUFDRSxnQkFBQTtDN0Iyd0hEO0E2Qnp3SEQ7Ozs7Ozs7RURwR0UsNkJBQUE7RUFDRywwQkFBQTtDNUJzM0hKO0E2QjF3SEQ7RUFDRSxlQUFBO0M3QjR3SEQ7QTZCdndIRDtFQUNFLG1CQUFBO0VBR0EsYUFBQTtFQUNBLG9CQUFBO0M3QnV3SEQ7QTZCNXdIRDtFQVVJLG1CQUFBO0M3QnF3SEg7QTZCL3dIRDtFQVlNLGtCQUFBO0M3QnN3SEw7QTZCbndIRzs7O0VBR0UsV0FBQTtDN0Jxd0hMO0E2Qmh3SEM7O0VBR0ksbUJBQUE7QzdCaXdITDtBNkI5dkhDOztFQUdJLFdBQUE7RUFDQSxrQkFBQTtDN0IrdkhMO0E4QjE1SEQ7RUFDRSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0EsaUJBQUE7QzlCNDVIRDtBOEIvNUhEO0VBT0ksbUJBQUE7RUFDQSxlQUFBO0M5QjI1SEg7QThCbjZIRDtFQVdNLG1CQUFBO0VBQ0EsZUFBQTtFQUNBLG1CQUFBO0M5QjI1SEw7QThCMTVISzs7RUFFRSxzQkFBQTtFQUNBLDBCQUFBO0M5QjQ1SFA7QThCdjVIRztFQUNFLGVBQUE7QzlCeTVITDtBOEJ2NUhLOztFQUVFLGVBQUE7RUFDQSxzQkFBQTtFQUNBLDhCQUFBO0VBQ0Esb0JBQUE7QzlCeTVIUDtBOEJsNUhHOzs7RUFHRSwwQkFBQTtFQUNBLHNCQUFBO0M5Qm81SEw7QThCNzdIRDtFTEhFLFlBQUE7RUFDQSxjQUFBO0VBQ0EsaUJBQUE7RUFDQSwwQkFBQTtDekJtOEhEO0E4Qm44SEQ7RUEwREksZ0JBQUE7QzlCNDRISDtBOEJuNEhEO0VBQ0UsOEJBQUE7QzlCcTRIRDtBOEJ0NEhEO0VBR0ksWUFBQTtFQUVBLG9CQUFBO0M5QnE0SEg7QThCMTRIRDtFQVNNLGtCQUFBO0VBQ0Esd0JBQUE7RUFDQSw4QkFBQTtFQUNBLDJCQUFBO0M5Qm80SEw7QThCbjRISztFQUNFLG1DQUFBO0M5QnE0SFA7QThCLzNISzs7O0VBR0UsZUFBQTtFQUNBLHVCQUFBO0VBQ0EsdUJBQUE7RUFDQSxpQ0FBQTtFQUNBLGdCQUFBO0M5Qmk0SFA7QThCNTNIQztFQXFEQSxZQUFBO0VBOEJBLGlCQUFBO0M5QjZ5SEQ7QThCaDRIQztFQXdERSxZQUFBO0M5QjIwSEg7QThCbjRIQztFQTBESSxtQkFBQTtFQUNBLG1CQUFBO0M5QjQwSEw7QThCdjRIQztFQWdFRSxVQUFBO0VBQ0EsV0FBQTtDOUIwMEhIO0E4QnYwSEM7RUFtRUY7SUFqRU0sb0JBQUE7SUFDQSxVQUFBO0c5QnkwSEg7RThCendISDtJQTlEUSxpQkFBQTtHOUIwMEhMO0NBQ0Y7QThCcDVIQztFQXVGRSxnQkFBQTtFQUNBLG1CQUFBO0M5QmcwSEg7QThCeDVIQzs7O0VBOEZFLHVCQUFBO0M5Qit6SEg7QThCNXpIQztFQXNDRjtJQXBDTSw4QkFBQTtJQUNBLDJCQUFBO0c5Qjh6SEg7RThCM3hISDs7O0lBOUJNLDBCQUFBO0c5Qjh6SEg7Q0FDRjtBOEIvNUhEO0VBRUksWUFBQTtDOUJnNkhIO0E4Qmw2SEQ7RUFNTSxtQkFBQTtDOUIrNUhMO0E4QnI2SEQ7RUFTTSxpQkFBQTtDOUIrNUhMO0E4QjE1SEs7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtDOUI0NUhQO0E4QnA1SEQ7RUFFSSxZQUFBO0M5QnE1SEg7QThCdjVIRDtFQUlNLGdCQUFBO0VBQ0EsZUFBQTtDOUJzNUhMO0E4QjE0SEQ7RUFDRSxZQUFBO0M5QjQ0SEQ7QThCNzRIRDtFQUlJLFlBQUE7QzlCNDRISDtBOEJoNUhEO0VBTU0sbUJBQUE7RUFDQSxtQkFBQTtDOUI2NEhMO0E4QnA1SEQ7RUFZSSxVQUFBO0VBQ0EsV0FBQTtDOUIyNEhIO0E4Qng0SEM7RUFtRUY7SUFqRU0sb0JBQUE7SUFDQSxVQUFBO0c5QjA0SEg7RThCMTBISDtJQTlEUSxpQkFBQTtHOUIyNEhMO0NBQ0Y7QThCbjRIRDtFQUNFLGlCQUFBO0M5QnE0SEQ7QThCdDRIRDtFQUtJLGdCQUFBO0VBQ0EsbUJBQUE7QzlCbzRISDtBOEIxNEhEOzs7RUFZSSx1QkFBQTtDOUJtNEhIO0E4Qmg0SEM7RUFzQ0Y7SUFwQ00sOEJBQUE7SUFDQSwyQkFBQTtHOUJrNEhIO0U4Qi8xSEg7OztJQTlCTSwwQkFBQTtHOUJrNEhIO0NBQ0Y7QThCejNIRDtFQUVJLGNBQUE7QzlCMDNISDtBOEI1M0hEO0VBS0ksZUFBQTtDOUIwM0hIO0E4QmozSEQ7RUFFRSxpQkFBQTtFRjNPQSwyQkFBQTtFQUNDLDBCQUFBO0M1QjhsSUY7QStCeGxJRDtFQUNFLG1CQUFBO0VBQ0EsaUJBQUE7RUFDQSxvQkFBQTtFQUNBLDhCQUFBO0MvQjBsSUQ7QStCcmxJQztFQWlvQkY7SUFob0JJLG1CQUFBO0cvQndsSUQ7Q0FDRjtBK0I1a0lDO0VBbW5CRjtJQWxuQkksWUFBQTtHL0Ira0lEO0NBQ0Y7QStCamtJRDtFQUNFLG9CQUFBO0VBQ0Esb0JBQUE7RUFDQSxtQkFBQTtFQUNBLGtDQUFBO0VBQ0EsbURBQUE7RUFFQSxrQ0FBQTtDL0Jra0lEO0ErQmhrSUM7RUFDRSxpQkFBQTtDL0Jra0lIO0ErQi9qSUM7RUFzbEJGO0lBcmxCSSxZQUFBO0lBQ0EsY0FBQTtJQUNBLGlCQUFBO0cvQmtrSUQ7RStCaGtJQztJQUNFLDBCQUFBO0lBQ0Esd0JBQUE7SUFDQSxrQkFBQTtJQUNBLDZCQUFBO0cvQmtrSUg7RStCL2pJQztJQUNFLG9CQUFBO0cvQmlrSUg7RStCNWpJQzs7O0lBR0UsZ0JBQUE7SUFDQSxpQkFBQTtHL0I4aklIO0NBQ0Y7QStCMWpJRDs7RUFHSSxrQkFBQTtDL0IyaklIO0ErQnpqSUc7RUFzakJKOztJQXJqQk0sa0JBQUE7Ry9CNmpJSDtDQUNGO0ErQnBqSUQ7Ozs7RUFJSSxvQkFBQTtFQUNBLG1CQUFBO0MvQnNqSUg7QStCcGpJRztFQW9pQko7Ozs7SUFuaUJNLGdCQUFBO0lBQ0EsZUFBQTtHL0IwaklIO0NBQ0Y7QStCOWlJRDtFQUNFLGNBQUE7RUFDQSxzQkFBQTtDL0JnaklEO0ErQjlpSUM7RUFpaEJGO0lBaGhCSSxpQkFBQTtHL0JpaklEO0NBQ0Y7QStCN2lJRDs7RUFFRSxnQkFBQTtFQUNBLFNBQUE7RUFDQSxRQUFBO0VBQ0EsY0FBQTtDL0IraUlEO0ErQjVpSUM7RUFtZ0JGOztJQWxnQkksaUJBQUE7Ry9CZ2pJRDtDQUNGO0ErQjlpSUQ7RUFDRSxPQUFBO0VBQ0Esc0JBQUE7Qy9CZ2pJRDtBK0I5aUlEO0VBQ0UsVUFBQTtFQUNBLGlCQUFBO0VBQ0Esc0JBQUE7Qy9CZ2pJRDtBK0IxaUlEO0VBQ0UsWUFBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxrQkFBQTtFQUNBLGFBQUE7Qy9CNGlJRDtBK0IxaUlDOztFQUVFLHNCQUFBO0MvQjRpSUg7QStCcmpJRDtFQWFJLGVBQUE7Qy9CMmlJSDtBK0J4aUlDO0VBQ0U7O0lBRUUsbUJBQUE7Ry9CMGlJSDtDQUNGO0ErQmhpSUQ7RUFDRSxtQkFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtFQUNBLGtCQUFBO0VDOUxBLGdCQUFBO0VBQ0EsbUJBQUE7RUQrTEEsOEJBQUE7RUFDQSx1QkFBQTtFQUNBLDhCQUFBO0VBQ0EsbUJBQUE7Qy9CbWlJRDtBK0IvaElDO0VBQ0UsV0FBQTtDL0JpaUlIO0ErQi9pSUQ7RUFtQkksZUFBQTtFQUNBLFlBQUE7RUFDQSxZQUFBO0VBQ0EsbUJBQUE7Qy9CK2hJSDtBK0JyaklEO0VBeUJJLGdCQUFBO0MvQitoSUg7QStCNWhJQztFQXdiRjtJQXZiSSxjQUFBO0cvQitoSUQ7Q0FDRjtBK0J0aElEO0VBQ0Usb0JBQUE7Qy9Cd2hJRDtBK0J6aElEO0VBSUksa0JBQUE7RUFDQSxxQkFBQTtFQUNBLGtCQUFBO0MvQndoSUg7QStCcmhJQztFQW9hRjtJQWphTSxpQkFBQTtJQUNBLFlBQUE7SUFDQSxZQUFBO0lBQ0EsY0FBQTtJQUNBLDhCQUFBO0lBQ0EsVUFBQTtJQUNBLGlCQUFBO0cvQnNoSUg7RStCM25ISDs7SUF4WlEsMkJBQUE7Ry9CdWhJTDtFK0IvbkhIO0lBclpRLGtCQUFBO0cvQnVoSUw7RStCdGhJSzs7SUFFRSx1QkFBQTtHL0J3aElQO0NBQ0Y7QStCbGhJQztFQTJZRjtJQTFZSSxZQUFBO0lBQ0EsVUFBQTtHL0JxaElEO0UrQjVvSEg7SUF0WU0sWUFBQTtHL0JxaElIO0UrQi9vSEg7SUFwWVEsa0JBQUE7SUFDQSxxQkFBQTtHL0JzaElMO0NBQ0Y7QStCM2dJRDtFQUNFLG1CQUFBO0VBQ0Esb0JBQUE7RUFDQSxtQkFBQTtFQUNBLGtDQUFBO0VBQ0EscUNBQUE7RTFCN05RLHFGQUFBO0UyQi9EUixnQkFBQTtFQUNBLG1CQUFBO0NoQzR5SUQ7QWtCNzFIQztFQXlJRjtJQXRJTSxzQkFBQTtJQUNBLGlCQUFBO0lBQ0EsdUJBQUE7R2xCODFISDtFa0IxdEhIO0lBL0hNLHNCQUFBO0lBQ0EsWUFBQTtJQUNBLHVCQUFBO0dsQjQxSEg7RWtCL3RISDtJQXhITSxzQkFBQTtHbEIwMUhIO0VrQmx1SEg7SUFwSE0sc0JBQUE7SUFDQSx1QkFBQTtHbEJ5MUhIO0VrQnR1SEg7OztJQTlHUSxZQUFBO0dsQnkxSEw7RWtCM3VISDtJQXhHTSxZQUFBO0dsQnMxSEg7RWtCOXVISDtJQXBHTSxpQkFBQTtJQUNBLHVCQUFBO0dsQnExSEg7RWtCbHZISDs7SUE1Rk0sc0JBQUE7SUFDQSxjQUFBO0lBQ0EsaUJBQUE7SUFDQSx1QkFBQTtHbEJrMUhIO0VrQnp2SEg7O0lBdEZRLGdCQUFBO0dsQm0xSEw7RWtCN3ZISDs7SUFqRk0sbUJBQUE7SUFDQSxlQUFBO0dsQmsxSEg7RWtCbHdISDtJQTNFTSxPQUFBO0dsQmcxSEg7Q0FDRjtBK0IzaklHO0VBMFdKO0lBeldNLG1CQUFBO0cvQjhqSUg7RStCNWpJRztJQUNFLGlCQUFBO0cvQjhqSUw7Q0FDRjtBK0J0aklDO0VBNlZGO0lBNVZJLFlBQUE7SUFDQSxVQUFBO0lBQ0EsZUFBQTtJQUNBLGdCQUFBO0lBQ0EsZUFBQTtJQUNBLGtCQUFBO0kxQnhQTSxpQkFBQTtHTG16SVA7Q0FDRjtBK0JuaklEO0VBQ0UsY0FBQTtFSHBVQSwyQkFBQTtFQUNDLDBCQUFBO0M1QjAzSUY7QStCbmpJRDtFQUNFLGlCQUFBO0VIelVBLDZCQUFBO0VBQ0MsNEJBQUE7RUFPRCw4QkFBQTtFQUNDLDZCQUFBO0M1QnkzSUY7QStCL2lJRDtFQ2hWRSxnQkFBQTtFQUNBLG1CQUFBO0NoQ2s0SUQ7QStCaGpJQztFQ25WQSxpQkFBQTtFQUNBLG9CQUFBO0NoQ3M0SUQ7QStCampJQztFQ3RWQSxpQkFBQTtFQUNBLG9CQUFBO0NoQzA0SUQ7QStCM2lJRDtFQ2hXRSxpQkFBQTtFQUNBLG9CQUFBO0NoQzg0SUQ7QStCNWlJQztFQTJTRjtJQTFTSSxZQUFBO0lBQ0Esa0JBQUE7SUFDQSxtQkFBQTtHL0IraUlEO0NBQ0Y7QStCbmlJRDtFQUNFO0lFeFdBLHVCQUFBO0dqQzg0SUM7RStCcmlJRDtJRTVXQSx3QkFBQTtJRjhXRSxvQkFBQTtHL0J1aUlEO0UrQnppSUQ7SUFLSSxnQkFBQTtHL0J1aUlIO0NBQ0Y7QStCOWhJRDtFQUNFLDBCQUFBO0VBQ0Esc0JBQUE7Qy9CZ2lJRDtBK0JsaUlEO0VBS0ksWUFBQTtDL0JnaUlIO0ErQi9oSUc7O0VBRUUsZUFBQTtFQUNBLDhCQUFBO0MvQmlpSUw7QStCMWlJRDtFQWNJLFlBQUE7Qy9CK2hJSDtBK0I3aUlEO0VBbUJNLFlBQUE7Qy9CNmhJTDtBK0IzaElLOztFQUVFLFlBQUE7RUFDQSw4QkFBQTtDL0I2aElQO0ErQnpoSUs7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtDL0IyaElQO0ErQnZoSUs7OztFQUdFLFlBQUE7RUFDQSw4QkFBQTtDL0J5aElQO0ErQmprSUQ7RUE4Q0ksbUJBQUE7Qy9Cc2hJSDtBK0JyaElHOztFQUVFLHVCQUFBO0MvQnVoSUw7QStCeGtJRDtFQW9ETSx1QkFBQTtDL0J1aElMO0ErQjNrSUQ7O0VBMERJLHNCQUFBO0MvQnFoSUg7QStCOWdJSzs7O0VBR0UsMEJBQUE7RUFDQSxZQUFBO0MvQmdoSVA7QStCNWdJRztFQWlNSjtJQTdMVSxZQUFBO0cvQjRnSVA7RStCM2dJTzs7SUFFRSxZQUFBO0lBQ0EsOEJBQUE7Ry9CNmdJVDtFK0J6Z0lPOzs7SUFHRSxZQUFBO0lBQ0EsMEJBQUE7Ry9CMmdJVDtFK0J2Z0lPOzs7SUFHRSxZQUFBO0lBQ0EsOEJBQUE7Ry9CeWdJVDtDQUNGO0ErQjNtSUQ7RUE4R0ksWUFBQTtDL0JnZ0lIO0ErQi8vSEc7RUFDRSxZQUFBO0MvQmlnSUw7QStCam5JRDtFQXFISSxZQUFBO0MvQisvSEg7QStCOS9IRzs7RUFFRSxZQUFBO0MvQmdnSUw7QStCNS9ISzs7OztFQUVFLFlBQUE7Qy9CZ2dJUDtBK0J4L0hEO0VBQ0UsdUJBQUE7RUFDQSxzQkFBQTtDL0IwL0hEO0ErQjUvSEQ7RUFLSSxlQUFBO0MvQjAvSEg7QStCei9IRzs7RUFFRSxZQUFBO0VBQ0EsOEJBQUE7Qy9CMi9ITDtBK0JwZ0lEO0VBY0ksZUFBQTtDL0J5L0hIO0ErQnZnSUQ7RUFtQk0sZUFBQTtDL0J1L0hMO0ErQnIvSEs7O0VBRUUsWUFBQTtFQUNBLDhCQUFBO0MvQnUvSFA7QStCbi9ISzs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0MvQnEvSFA7QStCai9ISzs7O0VBR0UsWUFBQTtFQUNBLDhCQUFBO0MvQm0vSFA7QStCM2hJRDtFQStDSSxtQkFBQTtDL0IrK0hIO0ErQjkrSEc7O0VBRUUsdUJBQUE7Qy9CZy9ITDtBK0JsaUlEO0VBcURNLHVCQUFBO0MvQmcvSEw7QStCcmlJRDs7RUEyREksc0JBQUE7Qy9COCtISDtBK0J4K0hLOzs7RUFHRSwwQkFBQTtFQUNBLFlBQUE7Qy9CMCtIUDtBK0J0K0hHO0VBMkRKO0lBdkRVLHNCQUFBO0cvQnMrSFA7RStCLzZISDtJQXBEVSwwQkFBQTtHL0JzK0hQO0UrQmw3SEg7SUFqRFUsZUFBQTtHL0JzK0hQO0UrQnIrSE87O0lBRUUsWUFBQTtJQUNBLDhCQUFBO0cvQnUrSFQ7RStCbitITzs7O0lBR0UsWUFBQTtJQUNBLDBCQUFBO0cvQnErSFQ7RStCaitITzs7O0lBR0UsWUFBQTtJQUNBLDhCQUFBO0cvQm0rSFQ7Q0FDRjtBK0Iza0lEO0VBK0dJLGVBQUE7Qy9CKzlISDtBK0I5OUhHO0VBQ0UsWUFBQTtDL0JnK0hMO0ErQmpsSUQ7RUFzSEksZUFBQTtDL0I4OUhIO0ErQjc5SEc7O0VBRUUsWUFBQTtDL0IrOUhMO0ErQjM5SEs7Ozs7RUFFRSxZQUFBO0MvQis5SFA7QWtDem1KRDtFQUNFLGtCQUFBO0VBQ0Esb0JBQUE7RUFDQSxpQkFBQTtFQUNBLDBCQUFBO0VBQ0EsbUJBQUE7Q2xDMm1KRDtBa0NobkpEO0VBUUksc0JBQUE7Q2xDMm1KSDtBa0NubkpEO0VBV00sa0JBQUE7RUFDQSxlQUFBO0VBQ0EsWUFBQTtDbEMybUpMO0FrQ3huSkQ7RUFrQkksZUFBQTtDbEN5bUpIO0FtQzduSkQ7RUFDRSxzQkFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTtFQUNBLG1CQUFBO0NuQytuSkQ7QW1Dbm9KRDtFQU9JLGdCQUFBO0NuQytuSkg7QW1DdG9KRDs7RUFVTSxtQkFBQTtFQUNBLFlBQUE7RUFDQSxrQkFBQTtFQUNBLHdCQUFBO0VBQ0Esc0JBQUE7RUFDQSxlQUFBO0VBQ0EsdUJBQUE7RUFDQSx1QkFBQTtFQUNBLGtCQUFBO0NuQ2dvSkw7QW1DOW5KRzs7RUFHSSxlQUFBO0VQWE4sK0JBQUE7RUFDRyw0QkFBQTtDNUIyb0pKO0FtQzduSkc7O0VQdkJGLGdDQUFBO0VBQ0csNkJBQUE7QzVCd3BKSjtBbUN4bkpHOzs7O0VBRUUsV0FBQTtFQUNBLGVBQUE7RUFDQSwwQkFBQTtFQUNBLG1CQUFBO0NuQzRuSkw7QW1DdG5KRzs7Ozs7O0VBR0UsV0FBQTtFQUNBLFlBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0VBQ0EsZ0JBQUE7Q25DMm5KTDtBbUNsckpEOzs7Ozs7RUFrRU0sZUFBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtDbkN3bkpMO0FtQy9tSkQ7O0VDM0VNLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSx1QkFBQTtDcEM4ckpMO0FvQzVySkc7O0VSS0YsK0JBQUE7RUFDRyw0QkFBQTtDNUIyckpKO0FvQzNySkc7O0VSVEYsZ0NBQUE7RUFDRyw2QkFBQTtDNUJ3c0pKO0FtQzFuSkQ7O0VDaEZNLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtDcEM4c0pMO0FvQzVzSkc7O0VSS0YsK0JBQUE7RUFDRyw0QkFBQTtDNUIyc0pKO0FvQzNzSkc7O0VSVEYsZ0NBQUE7RUFDRyw2QkFBQTtDNUJ3dEpKO0FxQzN0SkQ7RUFDRSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTtFQUNBLG1CQUFBO0NyQzZ0SkQ7QXFDanVKRDtFQU9JLGdCQUFBO0NyQzZ0Skg7QXFDcHVKRDs7RUFVTSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0EsdUJBQUE7RUFDQSx1QkFBQTtFQUNBLG9CQUFBO0NyQzh0Skw7QXFDNXVKRDs7RUFtQk0sc0JBQUE7RUFDQSwwQkFBQTtDckM2dEpMO0FxQ2p2SkQ7O0VBMkJNLGFBQUE7Q3JDMHRKTDtBcUNydkpEOztFQWtDTSxZQUFBO0NyQ3V0Skw7QXFDenZKRDs7OztFQTJDTSxlQUFBO0VBQ0EsdUJBQUE7RUFDQSxvQkFBQTtDckNvdEpMO0FzQ2x3SkQ7RUFDRSxnQkFBQTtFQUNBLHdCQUFBO0VBQ0EsZUFBQTtFQUNBLGtCQUFBO0VBQ0EsZUFBQTtFQUNBLFlBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VBQ0EseUJBQUE7RUFDQSxxQkFBQTtDdENvd0pEO0FzQ2h3Skc7O0VBRUUsWUFBQTtFQUNBLHNCQUFBO0VBQ0EsZ0JBQUE7Q3RDa3dKTDtBc0M3dkpDO0VBQ0UsY0FBQTtDdEMrdkpIO0FzQzN2SkM7RUFDRSxtQkFBQTtFQUNBLFVBQUE7Q3RDNnZKSDtBc0N0dkpEO0VDdENFLDBCQUFBO0N2Qyt4SkQ7QXVDNXhKRzs7RUFFRSwwQkFBQTtDdkM4eEpMO0FzQ3p2SkQ7RUMxQ0UsMEJBQUE7Q3ZDc3lKRDtBdUNueUpHOztFQUVFLDBCQUFBO0N2Q3F5Skw7QXNDNXZKRDtFQzlDRSwwQkFBQTtDdkM2eUpEO0F1QzF5Skc7O0VBRUUsMEJBQUE7Q3ZDNHlKTDtBc0MvdkpEO0VDbERFLDBCQUFBO0N2Q296SkQ7QXVDanpKRzs7RUFFRSwwQkFBQTtDdkNtekpMO0FzQ2x3SkQ7RUN0REUsMEJBQUE7Q3ZDMnpKRDtBdUN4ekpHOztFQUVFLDBCQUFBO0N2QzB6Skw7QXNDcndKRDtFQzFERSwwQkFBQTtDdkNrMEpEO0F1Qy96Skc7O0VBRUUsMEJBQUE7Q3ZDaTBKTDtBd0NuMEpEO0VBQ0Usc0JBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxrQkFBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0VBQ0EsdUJBQUE7RUFDQSxvQkFBQTtFQUNBLG1CQUFBO0VBQ0EsMEJBQUE7RUFDQSxvQkFBQTtDeENxMEpEO0F3Q2wwSkM7RUFDRSxjQUFBO0N4Q28wSkg7QXdDaDBKQztFQUNFLG1CQUFBO0VBQ0EsVUFBQTtDeENrMEpIO0F3Qy96SkM7O0VBRUUsT0FBQTtFQUNBLGlCQUFBO0N4Q2kwSkg7QXdDNXpKRzs7RUFFRSxZQUFBO0VBQ0Esc0JBQUE7RUFDQSxnQkFBQTtDeEM4ekpMO0F3Q3p6SkM7O0VBRUUsZUFBQTtFQUNBLHVCQUFBO0N4QzJ6Skg7QXdDeHpKQztFQUNFLGFBQUE7Q3hDMHpKSDtBd0N2ekpDO0VBQ0Usa0JBQUE7Q3hDeXpKSDtBd0N0ekpDO0VBQ0UsaUJBQUE7Q3hDd3pKSDtBeUNsM0pEO0VBQ0Usa0JBQUE7RUFDQSxxQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZUFBQTtFQUNBLDBCQUFBO0N6Q28zSkQ7QXlDejNKRDs7RUFTSSxlQUFBO0N6Q28zSkg7QXlDNzNKRDtFQWFJLG9CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtDekNtM0pIO0F5Q2w0SkQ7RUFtQkksMEJBQUE7Q3pDazNKSDtBeUMvMkpDOztFQUVFLG1CQUFBO0N6Q2kzSkg7QXlDejRKRDtFQTRCSSxnQkFBQTtDekNnM0pIO0F5QzcySkM7RUFnQkY7SUFmSSxrQkFBQTtJQUNBLHFCQUFBO0d6Q2czSkQ7RXlDOTJKQzs7SUFFRSxtQkFBQTtJQUNBLG9CQUFBO0d6Q2czSkg7RXlDdjJKSDs7SUFKTSxnQkFBQTtHekMrMkpIO0NBQ0Y7QTBDMTVKRDtFQUNFLGVBQUE7RUFDQSxhQUFBO0VBQ0Esb0JBQUE7RUFDQSx3QkFBQTtFQUNBLHVCQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtFckNtTFEsb0NBQUE7Q0w0dUpUO0EwQ3Q2SkQ7O0VBYUksa0JBQUE7RUFDQSxtQkFBQTtDMUM2NUpIO0EwQ3o1SkM7OztFQUdFLHNCQUFBO0MxQzI1Skg7QTBDaDdKRDtFQTBCSSxhQUFBO0VBQ0EsZUFBQTtDMUN5NUpIO0EyQ2w3SkQ7RUFDRSxjQUFBO0VBQ0Esb0JBQUE7RUFDQSw4QkFBQTtFQUNBLG1CQUFBO0MzQ283SkQ7QTJDeDdKRDtFQVFJLGNBQUE7RUFFQSxlQUFBO0MzQ2s3Skg7QTJDNTdKRDtFQWVJLGtCQUFBO0MzQ2c3Skg7QTJDLzdKRDs7RUFxQkksaUJBQUE7QzNDODZKSDtBMkNuOEpEO0VBeUJJLGdCQUFBO0MzQzY2Skg7QTJDcjZKRDs7RUFFRSxvQkFBQTtDM0N1NkpEO0EyQ3o2SkQ7O0VBTUksbUJBQUE7RUFDQSxVQUFBO0VBQ0EsYUFBQTtFQUNBLGVBQUE7QzNDdTZKSDtBMkMvNUpEO0VDdkRFLDBCQUFBO0VBQ0Esc0JBQUE7RUFDQSxlQUFBO0M1Q3k5SkQ7QTJDcDZKRDtFQ2xESSwwQkFBQTtDNUN5OUpIO0EyQ3Y2SkQ7RUMvQ0ksZUFBQTtDNUN5OUpIO0EyQ3Q2SkQ7RUMzREUsMEJBQUE7RUFDQSxzQkFBQTtFQUNBLGVBQUE7QzVDbytKRDtBMkMzNkpEO0VDdERJLDBCQUFBO0M1Q28rSkg7QTJDOTZKRDtFQ25ESSxlQUFBO0M1Q28rSkg7QTJDNzZKRDtFQy9ERSwwQkFBQTtFQUNBLHNCQUFBO0VBQ0EsZUFBQTtDNUMrK0pEO0EyQ2w3SkQ7RUMxREksMEJBQUE7QzVDKytKSDtBMkNyN0pEO0VDdkRJLGVBQUE7QzVDKytKSDtBMkNwN0pEO0VDbkVFLDBCQUFBO0VBQ0Esc0JBQUE7RUFDQSxlQUFBO0M1QzAvSkQ7QTJDejdKRDtFQzlESSwwQkFBQTtDNUMwL0pIO0EyQzU3SkQ7RUMzREksZUFBQTtDNUMwL0pIO0E2Q3QvSkQ7RUFDRTtJQUFRLDRCQUFBO0c3Q2lnS1A7RTZDaGdLRDtJQUFRLHlCQUFBO0c3Q21nS1A7Q0FDRjtBNkM1L0pEO0VBQ0UsaUJBQUE7RUFDQSxhQUFBO0VBQ0Esb0JBQUE7RUFDQSwwQkFBQTtFQUNBLG1CQUFBO0V4Q3VDUSwrQ0FBQTtDTHk5SlQ7QTZDMy9KRDtFQUNFLFlBQUE7RUFDQSxVQUFBO0VBQ0EsYUFBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7RUFDQSxZQUFBO0VBQ0EsbUJBQUE7RUFDQSwwQkFBQTtFeEMwQlEsK0NBQUE7RUEySEEsNEJBQUE7Q0w2MkpUO0E2Q3gvSkQ7O0VDR0ksc01BQUE7RURBRiwyQkFBQTtDN0M0L0pEO0E2Q3IvSkQ7O0V4QzFDVSxtREFBQTtDTHFpS1Q7QTZDbC9KRDtFRXJFRSwwQkFBQTtDL0MwaktEO0ErQ3ZqS0M7RURrREUsc01BQUE7QzlDMGdLSDtBNkN0L0pEO0VFekVFLDBCQUFBO0MvQ2trS0Q7QStDL2pLQztFRGtERSxzTUFBQTtDOUNraEtIO0E2QzEvSkQ7RUU3RUUsMEJBQUE7Qy9DMGtLRDtBK0N2a0tDO0VEa0RFLHNNQUFBO0M5QzBoS0g7QTZDOS9KRDtFRWpGRSwwQkFBQTtDL0NrbEtEO0ErQy9rS0M7RURrREUsc01BQUE7QzlDa2lLSDtBZ0QxbEtEO0VBRUUsaUJBQUE7Q2hEMmxLRDtBZ0R6bEtDO0VBQ0UsY0FBQTtDaEQybEtIO0FnRHZsS0Q7O0VBRUUsUUFBQTtFQUNBLGlCQUFBO0NoRHlsS0Q7QWdEdGxLRDtFQUNFLGVBQUE7Q2hEd2xLRDtBZ0RybEtEO0VBQ0UsZUFBQTtDaER1bEtEO0FnRHBsS0M7RUFDRSxnQkFBQTtDaERzbEtIO0FnRGxsS0Q7O0VBRUUsbUJBQUE7Q2hEb2xLRDtBZ0RqbEtEOztFQUVFLG9CQUFBO0NoRG1sS0Q7QWdEaGxLRDs7O0VBR0Usb0JBQUE7RUFDQSxvQkFBQTtDaERrbEtEO0FnRC9rS0Q7RUFDRSx1QkFBQTtDaERpbEtEO0FnRDlrS0Q7RUFDRSx1QkFBQTtDaERnbEtEO0FnRDVrS0Q7RUFDRSxjQUFBO0VBQ0EsbUJBQUE7Q2hEOGtLRDtBZ0R4a0tEO0VBQ0UsZ0JBQUE7RUFDQSxpQkFBQTtDaEQwa0tEO0FpRGpvS0Q7RUFFRSxvQkFBQTtFQUNBLGdCQUFBO0NqRGtvS0Q7QWlEMW5LRDtFQUNFLG1CQUFBO0VBQ0EsZUFBQTtFQUNBLG1CQUFBO0VBRUEsb0JBQUE7RUFDQSx1QkFBQTtFQUNBLHVCQUFBO0NqRDJuS0Q7QWlEeG5LQztFckIzQkEsNkJBQUE7RUFDQyw0QkFBQTtDNUJzcEtGO0FpRHpuS0M7RUFDRSxpQkFBQTtFckJ2QkYsZ0NBQUE7RUFDQywrQkFBQTtDNUJtcEtGO0FpRGxuS0Q7O0VBRUUsWUFBQTtDakRvbktEO0FpRHRuS0Q7O0VBS0ksWUFBQTtDakRxbktIO0FpRGpuS0M7Ozs7RUFFRSxzQkFBQTtFQUNBLFlBQUE7RUFDQSwwQkFBQTtDakRxbktIO0FpRGpuS0Q7RUFDRSxZQUFBO0VBQ0EsaUJBQUE7Q2pEbW5LRDtBaUQ5bUtDOzs7RUFHRSwwQkFBQTtFQUNBLGVBQUE7RUFDQSxvQkFBQTtDakRnbktIO0FpRHJuS0M7OztFQVNJLGVBQUE7Q2pEaW5LTDtBaUQxbktDOzs7RUFZSSxlQUFBO0NqRG1uS0w7QWlEOW1LQzs7O0VBR0UsV0FBQTtFQUNBLFlBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0NqRGduS0g7QWlEdG5LQzs7Ozs7Ozs7O0VBWUksZUFBQTtDakRxbktMO0FpRGpvS0M7OztFQWVJLGVBQUE7Q2pEdW5LTDtBa0R6dEtDO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0NsRDJ0S0g7QWtEenRLRzs7RUFFRSxlQUFBO0NsRDJ0S0w7QWtEN3RLRzs7RUFLSSxlQUFBO0NsRDR0S1A7QWtEenRLSzs7OztFQUVFLGVBQUE7RUFDQSwwQkFBQTtDbEQ2dEtQO0FrRDN0S0s7Ozs7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0NsRGd1S1A7QWtEdHZLQztFQUNFLGVBQUE7RUFDQSwwQkFBQTtDbER3dktIO0FrRHR2S0c7O0VBRUUsZUFBQTtDbER3dktMO0FrRDF2S0c7O0VBS0ksZUFBQTtDbER5dktQO0FrRHR2S0s7Ozs7RUFFRSxlQUFBO0VBQ0EsMEJBQUE7Q2xEMHZLUDtBa0R4dktLOzs7Ozs7RUFHRSxZQUFBO0VBQ0EsMEJBQUE7RUFDQSxzQkFBQTtDbEQ2dktQO0FrRG54S0M7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7Q2xEcXhLSDtBa0RueEtHOztFQUVFLGVBQUE7Q2xEcXhLTDtBa0R2eEtHOztFQUtJLGVBQUE7Q2xEc3hLUDtBa0RueEtLOzs7O0VBRUUsZUFBQTtFQUNBLDBCQUFBO0NsRHV4S1A7QWtEcnhLSzs7Ozs7O0VBR0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q2xEMHhLUDtBa0RoektDO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0NsRGt6S0g7QWtEaHpLRzs7RUFFRSxlQUFBO0NsRGt6S0w7QWtEcHpLRzs7RUFLSSxlQUFBO0NsRG16S1A7QWtEaHpLSzs7OztFQUVFLGVBQUE7RUFDQSwwQkFBQTtDbERvektQO0FrRGx6S0s7Ozs7OztFQUdFLFlBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0NsRHV6S1A7QWlEdHRLRDtFQUNFLGNBQUE7RUFDQSxtQkFBQTtDakR3dEtEO0FpRHR0S0Q7RUFDRSxpQkFBQTtFQUNBLGlCQUFBO0NqRHd0S0Q7QW1EbDFLRDtFQUNFLG9CQUFBO0VBQ0EsdUJBQUE7RUFDQSw4QkFBQTtFQUNBLG1CQUFBO0U5QzJEUSwwQ0FBQTtDTDJ4S1Q7QW1EajFLRDtFQUNFLGNBQUE7Q25EbTFLRDtBbUQ5MEtEO0VBQ0UsbUJBQUE7RUFDQSxxQ0FBQTtFdkJwQkEsNkJBQUE7RUFDQyw0QkFBQTtDNUJxMktGO0FtRHAxS0Q7RUFNSSxlQUFBO0NuRGkxS0g7QW1ENTBLRDtFQUNFLGNBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0EsZUFBQTtDbkQ4MEtEO0FtRGwxS0Q7Ozs7O0VBV0ksZUFBQTtDbkQ4MEtIO0FtRHowS0Q7RUFDRSxtQkFBQTtFQUNBLDBCQUFBO0VBQ0EsMkJBQUE7RXZCeENBLGdDQUFBO0VBQ0MsK0JBQUE7QzVCbzNLRjtBbURuMEtEOztFQUdJLGlCQUFBO0NuRG8wS0g7QW1EdjBLRDs7RUFNTSxvQkFBQTtFQUNBLGlCQUFBO0NuRHEwS0w7QW1EajBLRzs7RUFFSSxjQUFBO0V2QnZFTiw2QkFBQTtFQUNDLDRCQUFBO0M1QjI0S0Y7QW1EL3pLRzs7RUFFSSxpQkFBQTtFdkJ2RU4sZ0NBQUE7RUFDQywrQkFBQTtDNUJ5NEtGO0FtRHgxS0Q7RXZCMURFLDJCQUFBO0VBQ0MsMEJBQUE7QzVCcTVLRjtBbUQzektEO0VBRUksb0JBQUE7Q25ENHpLSDtBbUR6ektEO0VBQ0Usb0JBQUE7Q25EMnpLRDtBbURuektEOzs7RUFJSSxpQkFBQTtDbkRvektIO0FtRHh6S0Q7OztFQU9NLG1CQUFBO0VBQ0Esb0JBQUE7Q25Ec3pLTDtBbUQ5ektEOztFdkJ6R0UsNkJBQUE7RUFDQyw0QkFBQTtDNUIyNktGO0FtRG4wS0Q7Ozs7RUFtQlEsNEJBQUE7RUFDQSw2QkFBQTtDbkRzektQO0FtRDEwS0Q7Ozs7Ozs7O0VBd0JVLDRCQUFBO0NuRDR6S1Q7QW1EcDFLRDs7Ozs7Ozs7RUE0QlUsNkJBQUE7Q25EazBLVDtBbUQ5MUtEOztFdkJqR0UsZ0NBQUE7RUFDQywrQkFBQTtDNUJtOEtGO0FtRG4yS0Q7Ozs7RUF5Q1EsK0JBQUE7RUFDQSxnQ0FBQTtDbkRnMEtQO0FtRDEyS0Q7Ozs7Ozs7O0VBOENVLCtCQUFBO0NuRHMwS1Q7QW1EcDNLRDs7Ozs7Ozs7RUFrRFUsZ0NBQUE7Q25ENDBLVDtBbUQ5M0tEOzs7O0VBMkRJLDJCQUFBO0NuRHkwS0g7QW1EcDRLRDs7RUErREksY0FBQTtDbkR5MEtIO0FtRHg0S0Q7O0VBbUVJLFVBQUE7Q25EeTBLSDtBbUQ1NEtEOzs7Ozs7Ozs7Ozs7RUEwRVUsZUFBQTtDbkRnMUtUO0FtRDE1S0Q7Ozs7Ozs7Ozs7OztFQThFVSxnQkFBQTtDbkQwMUtUO0FtRHg2S0Q7Ozs7Ozs7O0VBdUZVLGlCQUFBO0NuRDIxS1Q7QW1EbDdLRDs7Ozs7Ozs7RUFnR1UsaUJBQUE7Q25ENDFLVDtBbUQ1N0tEO0VBc0dJLFVBQUE7RUFDQSxpQkFBQTtDbkR5MUtIO0FtRC8wS0Q7RUFDRSxvQkFBQTtDbkRpMUtEO0FtRGwxS0Q7RUFLSSxpQkFBQTtFQUNBLG1CQUFBO0NuRGcxS0g7QW1EdDFLRDtFQVNNLGdCQUFBO0NuRGcxS0w7QW1EejFLRDtFQWNJLGlCQUFBO0NuRDgwS0g7QW1ENTFLRDs7RUFrQk0sMkJBQUE7Q25EODBLTDtBbURoMktEO0VBdUJJLGNBQUE7Q25ENDBLSDtBbURuMktEO0VBeUJNLDhCQUFBO0NuRDYwS0w7QW1EdDBLRDtFQzFQRSxtQkFBQTtDcERta0xEO0FvRGprTEM7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7RUFDQSxtQkFBQTtDcERta0xIO0FvRHRrTEM7RUFNSSx1QkFBQTtDcERta0xMO0FvRHprTEM7RUFTSSxlQUFBO0VBQ0EsMEJBQUE7Q3BEbWtMTDtBb0Roa0xDO0VBRUksMEJBQUE7Q3BEaWtMTDtBbURyMUtEO0VDN1BFLHNCQUFBO0NwRHFsTEQ7QW9EbmxMQztFQUNFLFlBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0NwRHFsTEg7QW9EeGxMQztFQU1JLDBCQUFBO0NwRHFsTEw7QW9EM2xMQztFQVNJLGVBQUE7RUFDQSx1QkFBQTtDcERxbExMO0FvRGxsTEM7RUFFSSw2QkFBQTtDcERtbExMO0FtRHAyS0Q7RUNoUUUsc0JBQUE7Q3BEdW1MRDtBb0RybUxDO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q3BEdW1MSDtBb0QxbUxDO0VBTUksMEJBQUE7Q3BEdW1MTDtBb0Q3bUxDO0VBU0ksZUFBQTtFQUNBLDBCQUFBO0NwRHVtTEw7QW9EcG1MQztFQUVJLDZCQUFBO0NwRHFtTEw7QW1EbjNLRDtFQ25RRSxzQkFBQTtDcER5bkxEO0FvRHZuTEM7RUFDRSxlQUFBO0VBQ0EsMEJBQUE7RUFDQSxzQkFBQTtDcER5bkxIO0FvRDVuTEM7RUFNSSwwQkFBQTtDcER5bkxMO0FvRC9uTEM7RUFTSSxlQUFBO0VBQ0EsMEJBQUE7Q3BEeW5MTDtBb0R0bkxDO0VBRUksNkJBQUE7Q3BEdW5MTDtBbURsNEtEO0VDdFFFLHNCQUFBO0NwRDJvTEQ7QW9Eem9MQztFQUNFLGVBQUE7RUFDQSwwQkFBQTtFQUNBLHNCQUFBO0NwRDJvTEg7QW9EOW9MQztFQU1JLDBCQUFBO0NwRDJvTEw7QW9EanBMQztFQVNJLGVBQUE7RUFDQSwwQkFBQTtDcEQyb0xMO0FvRHhvTEM7RUFFSSw2QkFBQTtDcER5b0xMO0FtRGo1S0Q7RUN6UUUsc0JBQUE7Q3BENnBMRDtBb0QzcExDO0VBQ0UsZUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q3BENnBMSDtBb0RocUxDO0VBTUksMEJBQUE7Q3BENnBMTDtBb0RucUxDO0VBU0ksZUFBQTtFQUNBLDBCQUFBO0NwRDZwTEw7QW9EMXBMQztFQUVJLDZCQUFBO0NwRDJwTEw7QXFEM3FMRDtFQUNFLG1CQUFBO0VBQ0EsZUFBQTtFQUNBLFVBQUE7RUFDQSxXQUFBO0VBQ0EsaUJBQUE7Q3JENnFMRDtBcURsckxEOzs7OztFQVlJLG1CQUFBO0VBQ0EsT0FBQTtFQUNBLFFBQUE7RUFDQSxVQUFBO0VBQ0EsYUFBQTtFQUNBLFlBQUE7RUFDQSxVQUFBO0NyRDZxTEg7QXFEeHFMRDtFQUNFLHVCQUFBO0NyRDBxTEQ7QXFEdHFMRDtFQUNFLG9CQUFBO0NyRHdxTEQ7QXNEbnNMRDtFQUNFLGlCQUFBO0VBQ0EsY0FBQTtFQUNBLG9CQUFBO0VBQ0EsMEJBQUE7RUFDQSwwQkFBQTtFQUNBLG1CQUFBO0VqRHlEUSxnREFBQTtDTDhvTFQ7QXNEN3NMRDtFQVNJLG1CQUFBO0VBQ0Esa0NBQUE7Q3REdXNMSDtBc0Rsc0xEO0VBQ0UsY0FBQTtFQUNBLG1CQUFBO0N0RG9zTEQ7QXNEbHNMRDtFQUNFLGFBQUE7RUFDQSxtQkFBQTtDdERvc0xEO0F1RDF0TEQ7RUFDRSxhQUFBO0VBQ0EsZ0JBQUE7RUFDQSxrQkFBQTtFQUNBLGVBQUE7RUFDQSxZQUFBO0VBQ0EsMEJBQUE7RWpDUkEsYUFBQTtFQUdBLDBCQUFBO0N0Qm11TEQ7QXVEM3RMQzs7RUFFRSxZQUFBO0VBQ0Esc0JBQUE7RUFDQSxnQkFBQTtFakNmRixhQUFBO0VBR0EsMEJBQUE7Q3RCMnVMRDtBdUR2dExDO0VBQ0UsV0FBQTtFQUNBLGdCQUFBO0VBQ0Esd0JBQUE7RUFDQSxVQUFBO0VBQ0EseUJBQUE7Q3ZEeXRMSDtBd0Q5dUxEO0VBQ0UsaUJBQUE7Q3hEZ3ZMRDtBd0Q1dUxEO0VBQ0UsY0FBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxPQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7RUFDQSxRQUFBO0VBQ0EsY0FBQTtFQUNBLGtDQUFBO0VBSUEsV0FBQTtDeEQydUxEO0F3RHh1TEM7RW5Ea0hRLDhCQUFBO0VBcUVBLG9DQUFBO0NMMmpMVDtBd0Q5dUxDO0VuRDhHUSwyQkFBQTtDTHNvTFQ7QXdEbHZMRDtFQUNFLG1CQUFBO0VBQ0EsaUJBQUE7Q3hEb3ZMRDtBd0RodkxEO0VBQ0UsbUJBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtDeERrdkxEO0F3RDl1TEQ7RUFDRSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EsdUJBQUE7RUFDQSxxQ0FBQTtFQUNBLG1CQUFBO0VuRGNRLHlDQUFBO0VtRFpSLDZCQUFBO0VBRUEsV0FBQTtDeERndkxEO0F3RDV1TEQ7RUFDRSxnQkFBQTtFQUNBLE9BQUE7RUFDQSxTQUFBO0VBQ0EsVUFBQTtFQUNBLFFBQUE7RUFDQSxjQUFBO0VBQ0EsdUJBQUE7Q3hEOHVMRDtBd0Q1dUxDO0VsQ3JFQSxXQUFBO0VBR0EseUJBQUE7Q3RCa3pMRDtBd0QvdUxDO0VsQ3RFQSxhQUFBO0VBR0EsMEJBQUE7Q3RCc3pMRDtBd0Q5dUxEO0VBQ0UsY0FBQTtFQUNBLGlDQUFBO0VBQ0EsMEJBQUE7Q3hEZ3ZMRDtBd0Q3dUxEO0VBQ0UsaUJBQUE7Q3hEK3VMRDtBd0QzdUxEO0VBQ0UsVUFBQTtFQUNBLHdCQUFBO0N4RDZ1TEQ7QXdEeHVMRDtFQUNFLG1CQUFBO0VBQ0EsY0FBQTtDeEQwdUxEO0F3RHR1TEQ7RUFDRSxjQUFBO0VBQ0Esa0JBQUE7RUFDQSw4QkFBQTtDeER3dUxEO0F3RDN1TEQ7RUFRSSxpQkFBQTtFQUNBLGlCQUFBO0N4RHN1TEg7QXdEL3VMRDtFQWFJLGtCQUFBO0N4RHF1TEg7QXdEbHZMRDtFQWlCSSxlQUFBO0N4RG91TEg7QXdEL3RMRDtFQUNFLG1CQUFBO0VBQ0EsYUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsaUJBQUE7Q3hEaXVMRDtBd0Q3dExEO0VBRUU7SUFDRSxhQUFBO0lBQ0Esa0JBQUE7R3hEOHRMRDtFd0Q1dExEO0luRHRFUSwwQ0FBQTtHTHN5TFA7RXdEM3RMRDtJQUFZLGFBQUE7R3hEOHRMWDtDQUNGO0F3RDV0TEQ7RUFDRTtJQUFZLGFBQUE7R3hEK3RMWDtDQUNGO0F5RDkyTEQ7RUFDRSxtQkFBQTtFQUNBLGNBQUE7RUFDQSxlQUFBO0VDUkEsNERBQUE7RUFFQSxtQkFBQTtFQUNBLG9CQUFBO0VBQ0EsdUJBQUE7RUFDQSxpQkFBQTtFQUNBLHdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxrQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxxQkFBQTtFQUNBLG9CQUFBO0VBQ0EsbUJBQUE7RUFDQSxxQkFBQTtFQUNBLGtCQUFBO0VESEEsZ0JBQUE7RW5DVkEsV0FBQTtFQUdBLHlCQUFBO0N0QnE0TEQ7QXlEMTNMQztFbkNkQSxhQUFBO0VBR0EsMEJBQUE7Q3RCeTRMRDtBeUQ3M0xDO0VBQVcsaUJBQUE7RUFBbUIsZUFBQTtDekRpNEwvQjtBeURoNExDO0VBQVcsaUJBQUE7RUFBbUIsZUFBQTtDekRvNEwvQjtBeURuNExDO0VBQVcsZ0JBQUE7RUFBbUIsZUFBQTtDekR1NEwvQjtBeUR0NExDO0VBQVcsa0JBQUE7RUFBbUIsZUFBQTtDekQwNEwvQjtBeUR0NExEO0VBQ0UsaUJBQUE7RUFDQSxpQkFBQTtFQUNBLFlBQUE7RUFDQSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7Q3pEdzRMRDtBeURwNExEO0VBQ0UsbUJBQUE7RUFDQSxTQUFBO0VBQ0EsVUFBQTtFQUNBLDBCQUFBO0VBQ0Esb0JBQUE7Q3pEczRMRDtBeURsNExDO0VBQ0UsVUFBQTtFQUNBLFVBQUE7RUFDQSxrQkFBQTtFQUNBLHdCQUFBO0VBQ0EsdUJBQUE7Q3pEbzRMSDtBeURsNExDO0VBQ0UsVUFBQTtFQUNBLFdBQUE7RUFDQSxvQkFBQTtFQUNBLHdCQUFBO0VBQ0EsdUJBQUE7Q3pEbzRMSDtBeURsNExDO0VBQ0UsVUFBQTtFQUNBLFVBQUE7RUFDQSxvQkFBQTtFQUNBLHdCQUFBO0VBQ0EsdUJBQUE7Q3pEbzRMSDtBeURsNExDO0VBQ0UsU0FBQTtFQUNBLFFBQUE7RUFDQSxpQkFBQTtFQUNBLDRCQUFBO0VBQ0EseUJBQUE7Q3pEbzRMSDtBeURsNExDO0VBQ0UsU0FBQTtFQUNBLFNBQUE7RUFDQSxpQkFBQTtFQUNBLDRCQUFBO0VBQ0Esd0JBQUE7Q3pEbzRMSDtBeURsNExDO0VBQ0UsT0FBQTtFQUNBLFVBQUE7RUFDQSxrQkFBQTtFQUNBLHdCQUFBO0VBQ0EsMEJBQUE7Q3pEbzRMSDtBeURsNExDO0VBQ0UsT0FBQTtFQUNBLFdBQUE7RUFDQSxpQkFBQTtFQUNBLHdCQUFBO0VBQ0EsMEJBQUE7Q3pEbzRMSDtBeURsNExDO0VBQ0UsT0FBQTtFQUNBLFVBQUE7RUFDQSxpQkFBQTtFQUNBLHdCQUFBO0VBQ0EsMEJBQUE7Q3pEbzRMSDtBMkRqK0xEO0VBQ0UsbUJBQUE7RUFDQSxPQUFBO0VBQ0EsUUFBQTtFQUNBLGNBQUE7RUFDQSxjQUFBO0VBQ0EsaUJBQUE7RUFDQSxhQUFBO0VEWEEsNERBQUE7RUFFQSxtQkFBQTtFQUNBLG9CQUFBO0VBQ0EsdUJBQUE7RUFDQSxpQkFBQTtFQUNBLHdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxrQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxxQkFBQTtFQUNBLG9CQUFBO0VBQ0EsbUJBQUE7RUFDQSxxQkFBQTtFQUNBLGtCQUFBO0VDQUEsZ0JBQUE7RUFFQSx1QkFBQTtFQUNBLDZCQUFBO0VBQ0EsdUJBQUE7RUFDQSxxQ0FBQTtFQUNBLG1CQUFBO0V0RCtDUSwwQ0FBQTtDTGk4TFQ7QTJENStMQztFQUFZLGtCQUFBO0MzRCsrTGI7QTJEOStMQztFQUFZLGtCQUFBO0MzRGkvTGI7QTJEaC9MQztFQUFZLGlCQUFBO0MzRG0vTGI7QTJEbC9MQztFQUFZLG1CQUFBO0MzRHEvTGI7QTJEbC9MRDtFQUNFLFVBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EsMEJBQUE7RUFDQSxpQ0FBQTtFQUNBLDJCQUFBO0MzRG8vTEQ7QTJEai9MRDtFQUNFLGtCQUFBO0MzRG0vTEQ7QTJEMytMQzs7RUFFRSxtQkFBQTtFQUNBLGVBQUE7RUFDQSxTQUFBO0VBQ0EsVUFBQTtFQUNBLDBCQUFBO0VBQ0Esb0JBQUE7QzNENitMSDtBMkQxK0xEO0VBQ0UsbUJBQUE7QzNENCtMRDtBMkQxK0xEO0VBQ0UsbUJBQUE7RUFDQSxZQUFBO0MzRDQrTEQ7QTJEeCtMQztFQUNFLFVBQUE7RUFDQSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EsMEJBQUE7RUFDQSxzQ0FBQTtFQUNBLGNBQUE7QzNEMCtMSDtBMkR6K0xHO0VBQ0UsYUFBQTtFQUNBLFlBQUE7RUFDQSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EsdUJBQUE7QzNEMitMTDtBMkR4K0xDO0VBQ0UsU0FBQTtFQUNBLFlBQUE7RUFDQSxrQkFBQTtFQUNBLHFCQUFBO0VBQ0EsNEJBQUE7RUFDQSx3Q0FBQTtDM0QwK0xIO0EyRHorTEc7RUFDRSxhQUFBO0VBQ0EsVUFBQTtFQUNBLGNBQUE7RUFDQSxxQkFBQTtFQUNBLHlCQUFBO0MzRDIrTEw7QTJEeCtMQztFQUNFLFVBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VBQ0EsNkJBQUE7RUFDQSx5Q0FBQTtFQUNBLFdBQUE7QzNEMCtMSDtBMkR6K0xHO0VBQ0UsYUFBQTtFQUNBLFNBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VBQ0EsMEJBQUE7QzNEMitMTDtBMkR2K0xDO0VBQ0UsU0FBQTtFQUNBLGFBQUE7RUFDQSxrQkFBQTtFQUNBLHNCQUFBO0VBQ0EsMkJBQUE7RUFDQSx1Q0FBQTtDM0R5K0xIO0EyRHgrTEc7RUFDRSxhQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBO0VBQ0Esd0JBQUE7RUFDQSxjQUFBO0MzRDArTEw7QTREbm1NRDtFQUNFLG1CQUFBO0M1RHFtTUQ7QTREbG1NRDtFQUNFLG1CQUFBO0VBQ0EsaUJBQUE7RUFDQSxZQUFBO0M1RG9tTUQ7QTREdm1NRDtFQU1JLGNBQUE7RUFDQSxtQkFBQTtFdkQrS00sa0NBQUE7Q0x3N0xUO0E0RDltTUQ7O0VBY00sZUFBQTtDNURvbU1MO0E0RGhtTUc7RUFpUEo7SXZEdkRVLHVDQUFBO0lBM0pBLDRCQUFBO0lBaUhBLG9CQUFBO0dMNjlMUDtFNER4bU1HOztJdkRvSEksbUNBQUE7SXVEakhGLFFBQUE7RzVEMm1NTDtFNER6bU1HOztJdkQrR0ksb0NBQUE7SXVENUdGLFFBQUE7RzVENG1NTDtFNEQxbU1HOzs7SXZEMEdJLGdDQUFBO0l1RHRHRixRQUFBO0c1RDZtTUw7Q0FDRjtBNERucE1EOzs7RUE2Q0ksZUFBQTtDNUQybU1IO0E0RHhwTUQ7RUFpREksUUFBQTtDNUQwbU1IO0E0RDNwTUQ7O0VBc0RJLG1CQUFBO0VBQ0EsT0FBQTtFQUNBLFlBQUE7QzVEeW1NSDtBNERqcU1EO0VBNERJLFdBQUE7QzVEd21NSDtBNERwcU1EO0VBK0RJLFlBQUE7QzVEd21NSDtBNER2cU1EOztFQW1FSSxRQUFBO0M1RHdtTUg7QTREM3FNRDtFQXVFSSxZQUFBO0M1RHVtTUg7QTREOXFNRDtFQTBFSSxXQUFBO0M1RHVtTUg7QTREL2xNRDtFQUNFLG1CQUFBO0VBQ0EsT0FBQTtFQUNBLFFBQUE7RUFDQSxVQUFBO0VBQ0EsV0FBQTtFdEM5RkEsYUFBQTtFQUdBLDBCQUFBO0VzQzZGQSxnQkFBQTtFQUNBLFlBQUE7RUFDQSxtQkFBQTtFQUNBLDBDQUFBO0M1RGttTUQ7QTREN2xNQztFZGhHRSwrRkFBQTtFQUNBLDRCQUFBO0VBQ0EsdUhBQUE7QzlDa3NNSDtBNERqbU1DO0VBQ0UsV0FBQTtFQUNBLFNBQUE7RWRyR0EsK0ZBQUE7RUFDQSw0QkFBQTtFQUNBLHVIQUFBO0M5QzJzTUg7QTREbm1NQzs7RUFFRSxXQUFBO0VBQ0EsWUFBQTtFQUNBLHNCQUFBO0V0Q3RIRixhQUFBO0VBR0EsMEJBQUE7Q3RCMHRNRDtBNERwb01EOzs7O0VBc0NJLG1CQUFBO0VBQ0EsU0FBQTtFQUNBLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBO0M1RG9tTUg7QTREOW9NRDs7RUE4Q0ksVUFBQTtFQUNBLG1CQUFBO0M1RG9tTUg7QTREbnBNRDs7RUFtREksV0FBQTtFQUNBLG9CQUFBO0M1RG9tTUg7QTREeHBNRDs7RUF3REksWUFBQTtFQUNBLGFBQUE7RUFDQSxlQUFBO0VBQ0EsbUJBQUE7QzVEb21NSDtBNEQvbE1HO0VBQ0UsaUJBQUE7QzVEaW1NTDtBNEQ3bE1HO0VBQ0UsaUJBQUE7QzVEK2xNTDtBNERybE1EO0VBQ0UsbUJBQUE7RUFDQSxhQUFBO0VBQ0EsVUFBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0VBQ0EsbUJBQUE7QzVEdWxNRDtBNERobU1EO0VBWUksc0JBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLFlBQUE7RUFDQSxvQkFBQTtFQUNBLHVCQUFBO0VBQ0Esb0JBQUE7RUFDQSxnQkFBQTtFQVdBLDBCQUFBO0VBQ0EsbUNBQUE7QzVENmtNSDtBNEQ1bU1EO0VBa0NJLFVBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLHVCQUFBO0M1RDZrTUg7QTREdGtNRDtFQUNFLG1CQUFBO0VBQ0EsVUFBQTtFQUNBLFdBQUE7RUFDQSxhQUFBO0VBQ0EsWUFBQTtFQUNBLGtCQUFBO0VBQ0EscUJBQUE7RUFDQSxZQUFBO0VBQ0EsbUJBQUE7RUFDQSwwQ0FBQTtDNUR3a01EO0E0RHZrTUM7RUFDRSxrQkFBQTtDNUR5a01IO0E0RG5rTUQ7RUFHRTs7OztJQUtJLFlBQUE7SUFDQSxhQUFBO0lBQ0Esa0JBQUE7SUFDQSxnQkFBQTtHNURra01IO0U0RDFrTUQ7O0lBWUksbUJBQUE7RzVEa2tNSDtFNEQ5a01EOztJQWdCSSxvQkFBQTtHNURra01IO0U0RDdqTUQ7SUFDRSxVQUFBO0lBQ0EsV0FBQTtJQUNBLHFCQUFBO0c1RCtqTUQ7RTREM2pNRDtJQUNFLGFBQUE7RzVENmpNRDtDQUNGO0E2RDN6TUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQUVFLGFBQUE7RUFDQSxlQUFBO0M3RHkxTUg7QTZEdjFNQzs7Ozs7Ozs7Ozs7Ozs7O0VBQ0UsWUFBQTtDN0R1Mk1IO0FpQy8yTUQ7RTZCUkUsZUFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7QzlEMDNNRDtBaUNqM01EO0VBQ0Usd0JBQUE7Q2pDbTNNRDtBaUNqM01EO0VBQ0UsdUJBQUE7Q2pDbTNNRDtBaUMzMk1EO0VBQ0UseUJBQUE7Q2pDNjJNRDtBaUMzMk1EO0VBQ0UsMEJBQUE7Q2pDNjJNRDtBaUMzMk1EO0VBQ0UsbUJBQUE7Q2pDNjJNRDtBaUMzMk1EO0U4QnpCRSxZQUFBO0VBQ0EsbUJBQUE7RUFDQSxrQkFBQTtFQUNBLDhCQUFBO0VBQ0EsVUFBQTtDL0R1NE1EO0FpQ3oyTUQ7RUFDRSx5QkFBQTtDakMyMk1EO0FpQ3AyTUQ7RUFDRSxnQkFBQTtDakNzMk1EO0FnRXY0TUQ7RUFDRSxvQkFBQTtDaEV5NE1EO0FnRW40TUQ7Ozs7RUNkRSx5QkFBQTtDakV1NU1EO0FnRWw0TUQ7Ozs7Ozs7Ozs7OztFQVlFLHlCQUFBO0NoRW80TUQ7QWdFaDRNQztFQWdKRjtJQzdMRSwwQkFBQTtHakVpN01DO0VpRWg3TUQ7SUFBVSwwQkFBQTtHakVtN01UO0VpRWw3TUQ7SUFBVSw4QkFBQTtHakVxN01UO0VpRXA3TUQ7O0lBQ1UsK0JBQUE7R2pFdTdNVDtDQUNGO0FnRTE0TUM7RUEySUY7SUExSUksMEJBQUE7R2hFNjRNRDtDQUNGO0FnRTE0TUM7RUFzSUY7SUFySUksMkJBQUE7R2hFNjRNRDtDQUNGO0FnRTE0TUM7RUFpSUY7SUFoSUksaUNBQUE7R2hFNjRNRDtDQUNGO0FnRXo0TUM7RUEySEY7SUM3TEUsMEJBQUE7R2pFKzhNQztFaUU5OE1EO0lBQVUsMEJBQUE7R2pFaTlNVDtFaUVoOU1EO0lBQVUsOEJBQUE7R2pFbTlNVDtFaUVsOU1EOztJQUNVLCtCQUFBO0dqRXE5TVQ7Q0FDRjtBZ0VuNU1DO0VBc0hGO0lBckhJLDBCQUFBO0doRXM1TUQ7Q0FDRjtBZ0VuNU1DO0VBaUhGO0lBaEhJLDJCQUFBO0doRXM1TUQ7Q0FDRjtBZ0VuNU1DO0VBNEdGO0lBM0dJLGlDQUFBO0doRXM1TUQ7Q0FDRjtBZ0VsNU1DO0VBc0dGO0lDN0xFLDBCQUFBO0dqRTYrTUM7RWlFNStNRDtJQUFVLDBCQUFBO0dqRSsrTVQ7RWlFOStNRDtJQUFVLDhCQUFBO0dqRWkvTVQ7RWlFaC9NRDs7SUFDVSwrQkFBQTtHakVtL01UO0NBQ0Y7QWdFNTVNQztFQWlHRjtJQWhHSSwwQkFBQTtHaEUrNU1EO0NBQ0Y7QWdFNTVNQztFQTRGRjtJQTNGSSwyQkFBQTtHaEUrNU1EO0NBQ0Y7QWdFNTVNQztFQXVGRjtJQXRGSSxpQ0FBQTtHaEUrNU1EO0NBQ0Y7QWdFMzVNQztFQWlGRjtJQzdMRSwwQkFBQTtHakUyZ05DO0VpRTFnTkQ7SUFBVSwwQkFBQTtHakU2Z05UO0VpRTVnTkQ7SUFBVSw4QkFBQTtHakUrZ05UO0VpRTlnTkQ7O0lBQ1UsK0JBQUE7R2pFaWhOVDtDQUNGO0FnRXI2TUM7RUE0RUY7SUEzRUksMEJBQUE7R2hFdzZNRDtDQUNGO0FnRXI2TUM7RUF1RUY7SUF0RUksMkJBQUE7R2hFdzZNRDtDQUNGO0FnRXI2TUM7RUFrRUY7SUFqRUksaUNBQUE7R2hFdzZNRDtDQUNGO0FnRXA2TUM7RUE0REY7SUNyTEUseUJBQUE7R2pFaWlOQztDQUNGO0FnRXA2TUM7RUF1REY7SUNyTEUseUJBQUE7R2pFc2lOQztDQUNGO0FnRXA2TUM7RUFrREY7SUNyTEUseUJBQUE7R2pFMmlOQztDQUNGO0FnRXA2TUM7RUE2Q0Y7SUNyTEUseUJBQUE7R2pFZ2pOQztDQUNGO0FnRTk1TUQ7RUNuSkUseUJBQUE7Q2pFb2pORDtBZ0U5NU1DO0VBK0JGO0lDN0xFLDBCQUFBO0dqRWdrTkM7RWlFL2pORDtJQUFVLDBCQUFBO0dqRWtrTlQ7RWlFamtORDtJQUFVLDhCQUFBO0dqRW9rTlQ7RWlFbmtORDs7SUFDVSwrQkFBQTtHakVza05UO0NBQ0Y7QWdFejZNRDtFQUNFLHlCQUFBO0NoRTI2TUQ7QWdFejZNQztFQXdCRjtJQXZCSSwwQkFBQTtHaEU0Nk1EO0NBQ0Y7QWdFMTZNRDtFQUNFLHlCQUFBO0NoRTQ2TUQ7QWdFMTZNQztFQWlCRjtJQWhCSSwyQkFBQTtHaEU2Nk1EO0NBQ0Y7QWdFMzZNRDtFQUNFLHlCQUFBO0NoRTY2TUQ7QWdFMzZNQztFQVVGO0lBVEksaUNBQUE7R2hFODZNRDtDQUNGO0FnRTE2TUM7RUFJRjtJQ3JMRSx5QkFBQTtHakUrbE5DO0NBQ0YiLCJmaWxlIjoiYm9vdHN0cmFwLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQm9vdHN0cmFwIHYzLjMuNSAoaHR0cDovL2dldGJvb3RzdHJhcC5jb20pXG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKi9cbi8qISBub3JtYWxpemUuY3NzIHYzLjAuMyB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MgKi9cbmh0bWwge1xuICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcbiAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbn1cbmJvZHkge1xuICBtYXJnaW46IDA7XG59XG5hcnRpY2xlLFxuYXNpZGUsXG5kZXRhaWxzLFxuZmlnY2FwdGlvbixcbmZpZ3VyZSxcbmZvb3RlcixcbmhlYWRlcixcbmhncm91cCxcbm1haW4sXG5tZW51LFxubmF2LFxuc2VjdGlvbixcbnN1bW1hcnkge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbmF1ZGlvLFxuY2FudmFzLFxucHJvZ3Jlc3MsXG52aWRlbyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuYXVkaW86bm90KFtjb250cm9sc10pIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgaGVpZ2h0OiAwO1xufVxuW2hpZGRlbl0sXG50ZW1wbGF0ZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5hIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5hOmFjdGl2ZSxcbmE6aG92ZXIge1xuICBvdXRsaW5lOiAwO1xufVxuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkO1xufVxuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuZGZuIHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xufVxuaDEge1xuICBmb250LXNpemU6IDJlbTtcbiAgbWFyZ2luOiAwLjY3ZW0gMDtcbn1cbm1hcmsge1xuICBiYWNrZ3JvdW5kOiAjZmYwO1xuICBjb2xvcjogIzAwMDtcbn1cbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG5zdWIsXG5zdXAge1xuICBmb250LXNpemU6IDc1JTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuc3VwIHtcbiAgdG9wOiAtMC41ZW07XG59XG5zdWIge1xuICBib3R0b206IC0wLjI1ZW07XG59XG5pbWcge1xuICBib3JkZXI6IDA7XG59XG5zdmc6bm90KDpyb290KSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5maWd1cmUge1xuICBtYXJnaW46IDFlbSA0MHB4O1xufVxuaHIge1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgaGVpZ2h0OiAwO1xufVxucHJlIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5jb2RlLFxua2JkLFxucHJlLFxuc2FtcCB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTtcbiAgZm9udC1zaXplOiAxZW07XG59XG5idXR0b24sXG5pbnB1dCxcbm9wdGdyb3VwLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBjb2xvcjogaW5oZXJpdDtcbiAgZm9udDogaW5oZXJpdDtcbiAgbWFyZ2luOiAwO1xufVxuYnV0dG9uIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5idXR0b24sXG5zZWxlY3Qge1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cbmJ1dHRvbixcbmh0bWwgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSxcbmlucHV0W3R5cGU9XCJyZXNldFwiXSxcbmlucHV0W3R5cGU9XCJzdWJtaXRcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuYnV0dG9uW2Rpc2FibGVkXSxcbmh0bWwgaW5wdXRbZGlzYWJsZWRdIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxuaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXIge1xuICBib3JkZXI6IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5pbnB1dCB7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG59XG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiAwO1xufVxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICBoZWlnaHQ6IGF1dG87XG59XG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xufVxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5maWVsZHNldCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gIG1hcmdpbjogMCAycHg7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcbn1cbmxlZ2VuZCB7XG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDtcbn1cbnRleHRhcmVhIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5vcHRncm91cCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxudGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICBib3JkZXItc3BhY2luZzogMDtcbn1cbnRkLFxudGgge1xuICBwYWRkaW5nOiAwO1xufVxuLyohIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2g1YnAvaHRtbDUtYm9pbGVycGxhdGUvYmxvYi9tYXN0ZXIvc3JjL2Nzcy9tYWluLmNzcyAqL1xuQG1lZGlhIHByaW50IHtcbiAgKixcbiAgKjpiZWZvcmUsXG4gICo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDtcbiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxuICBhLFxuICBhOnZpc2l0ZWQge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG4gIGFbaHJlZl06YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIChcIiBhdHRyKGhyZWYpIFwiKVwiO1xuICB9XG4gIGFiYnJbdGl0bGVdOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIiAoXCIgYXR0cih0aXRsZSkgXCIpXCI7XG4gIH1cbiAgYVtocmVmXj1cIiNcIl06YWZ0ZXIsXG4gIGFbaHJlZl49XCJqYXZhc2NyaXB0OlwiXTphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgfVxuICBwcmUsXG4gIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7XG4gICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkO1xuICB9XG4gIHRoZWFkIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7XG4gIH1cbiAgdHIsXG4gIGltZyB7XG4gICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkO1xuICB9XG4gIGltZyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIH1cbiAgcCxcbiAgaDIsXG4gIGgzIHtcbiAgICBvcnBoYW5zOiAzO1xuICAgIHdpZG93czogMztcbiAgfVxuICBoMixcbiAgaDMge1xuICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkO1xuICB9XG4gIC5uYXZiYXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLmJ0biA+IC5jYXJldCxcbiAgLmRyb3B1cCA+IC5idG4gPiAuY2FyZXQge1xuICAgIGJvcmRlci10b3AtY29sb3I6ICMwMDAgIWltcG9ydGFudDtcbiAgfVxuICAubGFiZWwge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gIH1cbiAgLnRhYmxlIHtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlICFpbXBvcnRhbnQ7XG4gIH1cbiAgLnRhYmxlIHRkLFxuICAudGFibGUgdGgge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDtcbiAgfVxuICAudGFibGUtYm9yZGVyZWQgdGgsXG4gIC50YWJsZS1ib3JkZXJlZCB0ZCB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2RkZCAhaW1wb3J0YW50O1xuICB9XG59XG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdHbHlwaGljb25zIEhhbGZsaW5ncyc7XG4gIHNyYzogdXJsKCcuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLmVvdCcpO1xuICBzcmM6IHVybCgnLi4vZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLCB1cmwoJy4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksIHVybCgnLi4vZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmJykgZm9ybWF0KCd3b2ZmJyksIHVybCgnLi4vZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksIHVybCgnLi4vZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5zdmcjZ2x5cGhpY29uc19oYWxmbGluZ3NyZWd1bGFyJykgZm9ybWF0KCdzdmcnKTtcbn1cbi5nbHlwaGljb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMXB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiAnR2x5cGhpY29ucyBIYWxmbGluZ3MnO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cbi5nbHlwaGljb24tYXN0ZXJpc2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDJhXCI7XG59XG4uZ2x5cGhpY29uLXBsdXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDJiXCI7XG59XG4uZ2x5cGhpY29uLWV1cm86YmVmb3JlLFxuLmdseXBoaWNvbi1ldXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDIwYWNcIjtcbn1cbi5nbHlwaGljb24tbWludXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDIyMTJcIjtcbn1cbi5nbHlwaGljb24tY2xvdWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDI2MDFcIjtcbn1cbi5nbHlwaGljb24tZW52ZWxvcGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDI3MDlcIjtcbn1cbi5nbHlwaGljb24tcGVuY2lsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyNzBmXCI7XG59XG4uZ2x5cGhpY29uLWdsYXNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDAxXCI7XG59XG4uZ2x5cGhpY29uLW11c2ljOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDAyXCI7XG59XG4uZ2x5cGhpY29uLXNlYXJjaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAwM1wiO1xufVxuLmdseXBoaWNvbi1oZWFydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAwNVwiO1xufVxuLmdseXBoaWNvbi1zdGFyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDA2XCI7XG59XG4uZ2x5cGhpY29uLXN0YXItZW1wdHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDdcIjtcbn1cbi5nbHlwaGljb24tdXNlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAwOFwiO1xufVxuLmdseXBoaWNvbi1maWxtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDA5XCI7XG59XG4uZ2x5cGhpY29uLXRoLWxhcmdlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDEwXCI7XG59XG4uZ2x5cGhpY29uLXRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDExXCI7XG59XG4uZ2x5cGhpY29uLXRoLWxpc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTJcIjtcbn1cbi5nbHlwaGljb24tb2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTNcIjtcbn1cbi5nbHlwaGljb24tcmVtb3ZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE0XCI7XG59XG4uZ2x5cGhpY29uLXpvb20taW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTVcIjtcbn1cbi5nbHlwaGljb24tem9vbS1vdXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTZcIjtcbn1cbi5nbHlwaGljb24tb2ZmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE3XCI7XG59XG4uZ2x5cGhpY29uLXNpZ25hbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxOFwiO1xufVxuLmdseXBoaWNvbi1jb2c6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTlcIjtcbn1cbi5nbHlwaGljb24tdHJhc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjBcIjtcbn1cbi5nbHlwaGljb24taG9tZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyMVwiO1xufVxuLmdseXBoaWNvbi1maWxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDIyXCI7XG59XG4uZ2x5cGhpY29uLXRpbWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjNcIjtcbn1cbi5nbHlwaGljb24tcm9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyNFwiO1xufVxuLmdseXBoaWNvbi1kb3dubG9hZC1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjVcIjtcbn1cbi5nbHlwaGljb24tZG93bmxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjZcIjtcbn1cbi5nbHlwaGljb24tdXBsb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI3XCI7XG59XG4uZ2x5cGhpY29uLWluYm94OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI4XCI7XG59XG4uZ2x5cGhpY29uLXBsYXktY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI5XCI7XG59XG4uZ2x5cGhpY29uLXJlcGVhdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzMFwiO1xufVxuLmdseXBoaWNvbi1yZWZyZXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDMxXCI7XG59XG4uZ2x5cGhpY29uLWxpc3QtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDMyXCI7XG59XG4uZ2x5cGhpY29uLWxvY2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzNcIjtcbn1cbi5nbHlwaGljb24tZmxhZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzNFwiO1xufVxuLmdseXBoaWNvbi1oZWFkcGhvbmVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDM1XCI7XG59XG4uZ2x5cGhpY29uLXZvbHVtZS1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzZcIjtcbn1cbi5nbHlwaGljb24tdm9sdW1lLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzdcIjtcbn1cbi5nbHlwaGljb24tdm9sdW1lLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDM4XCI7XG59XG4uZ2x5cGhpY29uLXFyY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzOVwiO1xufVxuLmdseXBoaWNvbi1iYXJjb2RlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQwXCI7XG59XG4uZ2x5cGhpY29uLXRhZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0MVwiO1xufVxuLmdseXBoaWNvbi10YWdzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQyXCI7XG59XG4uZ2x5cGhpY29uLWJvb2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDNcIjtcbn1cbi5nbHlwaGljb24tYm9va21hcms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDRcIjtcbn1cbi5nbHlwaGljb24tcHJpbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDVcIjtcbn1cbi5nbHlwaGljb24tY2FtZXJhOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQ2XCI7XG59XG4uZ2x5cGhpY29uLWZvbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDdcIjtcbn1cbi5nbHlwaGljb24tYm9sZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0OFwiO1xufVxuLmdseXBoaWNvbi1pdGFsaWM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDlcIjtcbn1cbi5nbHlwaGljb24tdGV4dC1oZWlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNTBcIjtcbn1cbi5nbHlwaGljb24tdGV4dC13aWR0aDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1MVwiO1xufVxuLmdseXBoaWNvbi1hbGlnbi1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDUyXCI7XG59XG4uZ2x5cGhpY29uLWFsaWduLWNlbnRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1M1wiO1xufVxuLmdseXBoaWNvbi1hbGlnbi1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1NFwiO1xufVxuLmdseXBoaWNvbi1hbGlnbi1qdXN0aWZ5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDU1XCI7XG59XG4uZ2x5cGhpY29uLWxpc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNTZcIjtcbn1cbi5nbHlwaGljb24taW5kZW50LWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNTdcIjtcbn1cbi5nbHlwaGljb24taW5kZW50LXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDU4XCI7XG59XG4uZ2x5cGhpY29uLWZhY2V0aW1lLXZpZGVvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDU5XCI7XG59XG4uZ2x5cGhpY29uLXBpY3R1cmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjBcIjtcbn1cbi5nbHlwaGljb24tbWFwLW1hcmtlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2MlwiO1xufVxuLmdseXBoaWNvbi1hZGp1c3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjNcIjtcbn1cbi5nbHlwaGljb24tdGludDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2NFwiO1xufVxuLmdseXBoaWNvbi1lZGl0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY1XCI7XG59XG4uZ2x5cGhpY29uLXNoYXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY2XCI7XG59XG4uZ2x5cGhpY29uLWNoZWNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY3XCI7XG59XG4uZ2x5cGhpY29uLW1vdmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjhcIjtcbn1cbi5nbHlwaGljb24tc3RlcC1iYWNrd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2OVwiO1xufVxuLmdseXBoaWNvbi1mYXN0LWJhY2t3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDcwXCI7XG59XG4uZ2x5cGhpY29uLWJhY2t3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDcxXCI7XG59XG4uZ2x5cGhpY29uLXBsYXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzJcIjtcbn1cbi5nbHlwaGljb24tcGF1c2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzNcIjtcbn1cbi5nbHlwaGljb24tc3RvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3NFwiO1xufVxuLmdseXBoaWNvbi1mb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDc1XCI7XG59XG4uZ2x5cGhpY29uLWZhc3QtZm9yd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3NlwiO1xufVxuLmdseXBoaWNvbi1zdGVwLWZvcndhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzdcIjtcbn1cbi5nbHlwaGljb24tZWplY3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzhcIjtcbn1cbi5nbHlwaGljb24tY2hldnJvbi1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDc5XCI7XG59XG4uZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODBcIjtcbn1cbi5nbHlwaGljb24tcGx1cy1zaWduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDgxXCI7XG59XG4uZ2x5cGhpY29uLW1pbnVzLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODJcIjtcbn1cbi5nbHlwaGljb24tcmVtb3ZlLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODNcIjtcbn1cbi5nbHlwaGljb24tb2stc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4NFwiO1xufVxuLmdseXBoaWNvbi1xdWVzdGlvbi1zaWduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDg1XCI7XG59XG4uZ2x5cGhpY29uLWluZm8tc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4NlwiO1xufVxuLmdseXBoaWNvbi1zY3JlZW5zaG90OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDg3XCI7XG59XG4uZ2x5cGhpY29uLXJlbW92ZS1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODhcIjtcbn1cbi5nbHlwaGljb24tb2stY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDg5XCI7XG59XG4uZ2x5cGhpY29uLWJhbi1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTBcIjtcbn1cbi5nbHlwaGljb24tYXJyb3ctbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5MVwiO1xufVxuLmdseXBoaWNvbi1hcnJvdy1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5MlwiO1xufVxuLmdseXBoaWNvbi1hcnJvdy11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5M1wiO1xufVxuLmdseXBoaWNvbi1hcnJvdy1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDk0XCI7XG59XG4uZ2x5cGhpY29uLXNoYXJlLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5NVwiO1xufVxuLmdseXBoaWNvbi1yZXNpemUtZnVsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5NlwiO1xufVxuLmdseXBoaWNvbi1yZXNpemUtc21hbGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTdcIjtcbn1cbi5nbHlwaGljb24tZXhjbGFtYXRpb24tc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwMVwiO1xufVxuLmdseXBoaWNvbi1naWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTAyXCI7XG59XG4uZ2x5cGhpY29uLWxlYWY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDNcIjtcbn1cbi5nbHlwaGljb24tZmlyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwNFwiO1xufVxuLmdseXBoaWNvbi1leWUtb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwNVwiO1xufVxuLmdseXBoaWNvbi1leWUtY2xvc2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDZcIjtcbn1cbi5nbHlwaGljb24td2FybmluZy1zaWduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTA3XCI7XG59XG4uZ2x5cGhpY29uLXBsYW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTA4XCI7XG59XG4uZ2x5cGhpY29uLWNhbGVuZGFyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTA5XCI7XG59XG4uZ2x5cGhpY29uLXJhbmRvbTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExMFwiO1xufVxuLmdseXBoaWNvbi1jb21tZW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTExXCI7XG59XG4uZ2x5cGhpY29uLW1hZ25ldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExMlwiO1xufVxuLmdseXBoaWNvbi1jaGV2cm9uLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTEzXCI7XG59XG4uZ2x5cGhpY29uLWNoZXZyb24tZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExNFwiO1xufVxuLmdseXBoaWNvbi1yZXR3ZWV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTE1XCI7XG59XG4uZ2x5cGhpY29uLXNob3BwaW5nLWNhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTZcIjtcbn1cbi5nbHlwaGljb24tZm9sZGVyLWNsb3NlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTE3XCI7XG59XG4uZ2x5cGhpY29uLWZvbGRlci1vcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTE4XCI7XG59XG4uZ2x5cGhpY29uLXJlc2l6ZS12ZXJ0aWNhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExOVwiO1xufVxuLmdseXBoaWNvbi1yZXNpemUtaG9yaXpvbnRhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyMFwiO1xufVxuLmdseXBoaWNvbi1oZGQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjFcIjtcbn1cbi5nbHlwaGljb24tYnVsbGhvcm46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjJcIjtcbn1cbi5nbHlwaGljb24tYmVsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyM1wiO1xufVxuLmdseXBoaWNvbi1jZXJ0aWZpY2F0ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyNFwiO1xufVxuLmdseXBoaWNvbi10aHVtYnMtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjVcIjtcbn1cbi5nbHlwaGljb24tdGh1bWJzLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjZcIjtcbn1cbi5nbHlwaGljb24taGFuZC1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyN1wiO1xufVxuLmdseXBoaWNvbi1oYW5kLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjhcIjtcbn1cbi5nbHlwaGljb24taGFuZC11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyOVwiO1xufVxuLmdseXBoaWNvbi1oYW5kLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzBcIjtcbn1cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTMxXCI7XG59XG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTMyXCI7XG59XG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzM1wiO1xufVxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzNFwiO1xufVxuLmdseXBoaWNvbi1nbG9iZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzNVwiO1xufVxuLmdseXBoaWNvbi13cmVuY2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzZcIjtcbn1cbi5nbHlwaGljb24tdGFza3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzdcIjtcbn1cbi5nbHlwaGljb24tZmlsdGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTM4XCI7XG59XG4uZ2x5cGhpY29uLWJyaWVmY2FzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzOVwiO1xufVxuLmdseXBoaWNvbi1mdWxsc2NyZWVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQwXCI7XG59XG4uZ2x5cGhpY29uLWRhc2hib2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0MVwiO1xufVxuLmdseXBoaWNvbi1wYXBlcmNsaXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNDJcIjtcbn1cbi5nbHlwaGljb24taGVhcnQtZW1wdHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNDNcIjtcbn1cbi5nbHlwaGljb24tbGluazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0NFwiO1xufVxuLmdseXBoaWNvbi1waG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0NVwiO1xufVxuLmdseXBoaWNvbi1wdXNocGluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQ2XCI7XG59XG4uZ2x5cGhpY29uLXVzZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0OFwiO1xufVxuLmdseXBoaWNvbi1nYnA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNDlcIjtcbn1cbi5nbHlwaGljb24tc29ydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1MFwiO1xufVxuLmdseXBoaWNvbi1zb3J0LWJ5LWFscGhhYmV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTUxXCI7XG59XG4uZ2x5cGhpY29uLXNvcnQtYnktYWxwaGFiZXQtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTUyXCI7XG59XG4uZ2x5cGhpY29uLXNvcnQtYnktb3JkZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTNcIjtcbn1cbi5nbHlwaGljb24tc29ydC1ieS1vcmRlci1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTRcIjtcbn1cbi5nbHlwaGljb24tc29ydC1ieS1hdHRyaWJ1dGVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU1XCI7XG59XG4uZ2x5cGhpY29uLXNvcnQtYnktYXR0cmlidXRlcy1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTZcIjtcbn1cbi5nbHlwaGljb24tdW5jaGVja2VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU3XCI7XG59XG4uZ2x5cGhpY29uLWV4cGFuZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1OFwiO1xufVxuLmdseXBoaWNvbi1jb2xsYXBzZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU5XCI7XG59XG4uZ2x5cGhpY29uLWNvbGxhcHNlLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTYwXCI7XG59XG4uZ2x5cGhpY29uLWxvZy1pbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2MVwiO1xufVxuLmdseXBoaWNvbi1mbGFzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2MlwiO1xufVxuLmdseXBoaWNvbi1sb2ctb3V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTYzXCI7XG59XG4uZ2x5cGhpY29uLW5ldy13aW5kb3c6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjRcIjtcbn1cbi5nbHlwaGljb24tcmVjb3JkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTY1XCI7XG59XG4uZ2x5cGhpY29uLXNhdmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjZcIjtcbn1cbi5nbHlwaGljb24tb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2N1wiO1xufVxuLmdseXBoaWNvbi1zYXZlZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2OFwiO1xufVxuLmdseXBoaWNvbi1pbXBvcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjlcIjtcbn1cbi5nbHlwaGljb24tZXhwb3J0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTcwXCI7XG59XG4uZ2x5cGhpY29uLXNlbmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzFcIjtcbn1cbi5nbHlwaGljb24tZmxvcHB5LWRpc2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzJcIjtcbn1cbi5nbHlwaGljb24tZmxvcHB5LXNhdmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTczXCI7XG59XG4uZ2x5cGhpY29uLWZsb3BweS1yZW1vdmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzRcIjtcbn1cbi5nbHlwaGljb24tZmxvcHB5LXNhdmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzVcIjtcbn1cbi5nbHlwaGljb24tZmxvcHB5LW9wZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzZcIjtcbn1cbi5nbHlwaGljb24tY3JlZGl0LWNhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzdcIjtcbn1cbi5nbHlwaGljb24tdHJhbnNmZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzhcIjtcbn1cbi5nbHlwaGljb24tY3V0bGVyeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3OVwiO1xufVxuLmdseXBoaWNvbi1oZWFkZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODBcIjtcbn1cbi5nbHlwaGljb24tY29tcHJlc3NlZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4MVwiO1xufVxuLmdseXBoaWNvbi1lYXJwaG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4MlwiO1xufVxuLmdseXBoaWNvbi1waG9uZS1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODNcIjtcbn1cbi5nbHlwaGljb24tdG93ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODRcIjtcbn1cbi5nbHlwaGljb24tc3RhdHM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODVcIjtcbn1cbi5nbHlwaGljb24tc2QtdmlkZW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODZcIjtcbn1cbi5nbHlwaGljb24taGQtdmlkZW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODdcIjtcbn1cbi5nbHlwaGljb24tc3VidGl0bGVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTg4XCI7XG59XG4uZ2x5cGhpY29uLXNvdW5kLXN0ZXJlbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4OVwiO1xufVxuLmdseXBoaWNvbi1zb3VuZC1kb2xieTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5MFwiO1xufVxuLmdseXBoaWNvbi1zb3VuZC01LTE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOTFcIjtcbn1cbi5nbHlwaGljb24tc291bmQtNi0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTkyXCI7XG59XG4uZ2x5cGhpY29uLXNvdW5kLTctMTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5M1wiO1xufVxuLmdseXBoaWNvbi1jb3B5cmlnaHQtbWFyazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5NFwiO1xufVxuLmdseXBoaWNvbi1yZWdpc3RyYXRpb24tbWFyazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5NVwiO1xufVxuLmdseXBoaWNvbi1jbG91ZC1kb3dubG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5N1wiO1xufVxuLmdseXBoaWNvbi1jbG91ZC11cGxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOThcIjtcbn1cbi5nbHlwaGljb24tdHJlZS1jb25pZmVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTk5XCI7XG59XG4uZ2x5cGhpY29uLXRyZWUtZGVjaWR1b3VzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjAwXCI7XG59XG4uZ2x5cGhpY29uLWNkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjAxXCI7XG59XG4uZ2x5cGhpY29uLXNhdmUtZmlsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwMlwiO1xufVxuLmdseXBoaWNvbi1vcGVuLWZpbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDNcIjtcbn1cbi5nbHlwaGljb24tbGV2ZWwtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDRcIjtcbn1cbi5nbHlwaGljb24tY29weTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwNVwiO1xufVxuLmdseXBoaWNvbi1wYXN0ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwNlwiO1xufVxuLmdseXBoaWNvbi1hbGVydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwOVwiO1xufVxuLmdseXBoaWNvbi1lcXVhbGl6ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMTBcIjtcbn1cbi5nbHlwaGljb24ta2luZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxMVwiO1xufVxuLmdseXBoaWNvbi1xdWVlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxMlwiO1xufVxuLmdseXBoaWNvbi1wYXduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjEzXCI7XG59XG4uZ2x5cGhpY29uLWJpc2hvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxNFwiO1xufVxuLmdseXBoaWNvbi1rbmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMTVcIjtcbn1cbi5nbHlwaGljb24tYmFieS1mb3JtdWxhOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjE2XCI7XG59XG4uZ2x5cGhpY29uLXRlbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDI2ZmFcIjtcbn1cbi5nbHlwaGljb24tYmxhY2tib2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxOFwiO1xufVxuLmdseXBoaWNvbi1iZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMTlcIjtcbn1cbi5nbHlwaGljb24tYXBwbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY4ZmZcIjtcbn1cbi5nbHlwaGljb24tZXJhc2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjFcIjtcbn1cbi5nbHlwaGljb24taG91cmdsYXNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyMzFiXCI7XG59XG4uZ2x5cGhpY29uLWxhbXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjNcIjtcbn1cbi5nbHlwaGljb24tZHVwbGljYXRlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI0XCI7XG59XG4uZ2x5cGhpY29uLXBpZ2d5LWJhbms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjVcIjtcbn1cbi5nbHlwaGljb24tc2Npc3NvcnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjZcIjtcbn1cbi5nbHlwaGljb24tYml0Y29pbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIyN1wiO1xufVxuLmdseXBoaWNvbi1idGM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjdcIjtcbn1cbi5nbHlwaGljb24teGJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI3XCI7XG59XG4uZ2x5cGhpY29uLXllbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMDBhNVwiO1xufVxuLmdseXBoaWNvbi1qcHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDAwYTVcIjtcbn1cbi5nbHlwaGljb24tcnVibGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDIwYmRcIjtcbn1cbi5nbHlwaGljb24tcnViOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyMGJkXCI7XG59XG4uZ2x5cGhpY29uLXNjYWxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjMwXCI7XG59XG4uZ2x5cGhpY29uLWljZS1sb2xseTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzMVwiO1xufVxuLmdseXBoaWNvbi1pY2UtbG9sbHktdGFzdGVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjMyXCI7XG59XG4uZ2x5cGhpY29uLWVkdWNhdGlvbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzM1wiO1xufVxuLmdseXBoaWNvbi1vcHRpb24taG9yaXpvbnRhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzNFwiO1xufVxuLmdseXBoaWNvbi1vcHRpb24tdmVydGljYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzVcIjtcbn1cbi5nbHlwaGljb24tbWVudS1oYW1idXJnZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzZcIjtcbn1cbi5nbHlwaGljb24tbW9kYWwtd2luZG93OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjM3XCI7XG59XG4uZ2x5cGhpY29uLW9pbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzOFwiO1xufVxuLmdseXBoaWNvbi1ncmFpbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzOVwiO1xufVxuLmdseXBoaWNvbi1zdW5nbGFzc2VzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQwXCI7XG59XG4uZ2x5cGhpY29uLXRleHQtc2l6ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0MVwiO1xufVxuLmdseXBoaWNvbi10ZXh0LWNvbG9yOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQyXCI7XG59XG4uZ2x5cGhpY29uLXRleHQtYmFja2dyb3VuZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0M1wiO1xufVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tdG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQ0XCI7XG59XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1ib3R0b206YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDVcIjtcbn1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWhvcml6b250YWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDZcIjtcbn1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDdcIjtcbn1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLXZlcnRpY2FsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQ4XCI7XG59XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0OVwiO1xufVxuLmdseXBoaWNvbi10cmlhbmdsZS1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1MFwiO1xufVxuLmdseXBoaWNvbi10cmlhbmdsZS1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjUxXCI7XG59XG4uZ2x5cGhpY29uLXRyaWFuZ2xlLWJvdHRvbTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1MlwiO1xufVxuLmdseXBoaWNvbi10cmlhbmdsZS10b3A6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTNcIjtcbn1cbi5nbHlwaGljb24tY29uc29sZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1NFwiO1xufVxuLmdseXBoaWNvbi1zdXBlcnNjcmlwdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1NVwiO1xufVxuLmdseXBoaWNvbi1zdWJzY3JpcHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTZcIjtcbn1cbi5nbHlwaGljb24tbWVudS1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjU3XCI7XG59XG4uZ2x5cGhpY29uLW1lbnUtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNThcIjtcbn1cbi5nbHlwaGljb24tbWVudS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjU5XCI7XG59XG4uZ2x5cGhpY29uLW1lbnUtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNjBcIjtcbn1cbioge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbio6YmVmb3JlLFxuKjphZnRlciB7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuaHRtbCB7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xufVxuYm9keSB7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuaW5wdXQsXG5idXR0b24sXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xufVxuYSB7XG4gIGNvbG9yOiAjMzM3YWI3O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5hOmhvdmVyLFxuYTpmb2N1cyB7XG4gIGNvbG9yOiAjMjM1MjdjO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbmE6Zm9jdXMge1xuICBvdXRsaW5lOiB0aGluIGRvdHRlZDtcbiAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xuICBvdXRsaW5lLW9mZnNldDogLTJweDtcbn1cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMDtcbn1cbmltZyB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uaW1nLXJlc3BvbnNpdmUsXG4udGh1bWJuYWlsID4gaW1nLFxuLnRodW1ibmFpbCBhID4gaW1nLFxuLmNhcm91c2VsLWlubmVyID4gLml0ZW0gPiBpbWcsXG4uY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbSA+IGEgPiBpbWcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG4uaW1nLXJvdW5kZWQge1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG4uaW1nLXRodW1ibmFpbCB7XG4gIHBhZGRpbmc6IDRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDtcbiAgLW8tdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmltZy1jaXJjbGUge1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG59XG5ociB7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlZWVlZWU7XG59XG4uc3Itb25seSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDFweDtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogLTFweDtcbiAgcGFkZGluZzogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcbiAgYm9yZGVyOiAwO1xufVxuLnNyLW9ubHktZm9jdXNhYmxlOmFjdGl2ZSxcbi5zci1vbmx5LWZvY3VzYWJsZTpmb2N1cyB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIHdpZHRoOiBhdXRvO1xuICBoZWlnaHQ6IGF1dG87XG4gIG1hcmdpbjogMDtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIGNsaXA6IGF1dG87XG59XG5bcm9sZT1cImJ1dHRvblwiXSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbmgxLFxuaDIsXG5oMyxcbmg0LFxuaDUsXG5oNixcbi5oMSxcbi5oMixcbi5oMyxcbi5oNCxcbi5oNSxcbi5oNiB7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXdlaWdodDogNTAwO1xuICBsaW5lLWhlaWdodDogMS4xO1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbmgxIHNtYWxsLFxuaDIgc21hbGwsXG5oMyBzbWFsbCxcbmg0IHNtYWxsLFxuaDUgc21hbGwsXG5oNiBzbWFsbCxcbi5oMSBzbWFsbCxcbi5oMiBzbWFsbCxcbi5oMyBzbWFsbCxcbi5oNCBzbWFsbCxcbi5oNSBzbWFsbCxcbi5oNiBzbWFsbCxcbmgxIC5zbWFsbCxcbmgyIC5zbWFsbCxcbmgzIC5zbWFsbCxcbmg0IC5zbWFsbCxcbmg1IC5zbWFsbCxcbmg2IC5zbWFsbCxcbi5oMSAuc21hbGwsXG4uaDIgLnNtYWxsLFxuLmgzIC5zbWFsbCxcbi5oNCAuc21hbGwsXG4uaDUgLnNtYWxsLFxuLmg2IC5zbWFsbCB7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogIzc3Nzc3Nztcbn1cbmgxLFxuLmgxLFxuaDIsXG4uaDIsXG5oMyxcbi5oMyB7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5oMSBzbWFsbCxcbi5oMSBzbWFsbCxcbmgyIHNtYWxsLFxuLmgyIHNtYWxsLFxuaDMgc21hbGwsXG4uaDMgc21hbGwsXG5oMSAuc21hbGwsXG4uaDEgLnNtYWxsLFxuaDIgLnNtYWxsLFxuLmgyIC5zbWFsbCxcbmgzIC5zbWFsbCxcbi5oMyAuc21hbGwge1xuICBmb250LXNpemU6IDY1JTtcbn1cbmg0LFxuLmg0LFxuaDUsXG4uaDUsXG5oNixcbi5oNiB7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5oNCBzbWFsbCxcbi5oNCBzbWFsbCxcbmg1IHNtYWxsLFxuLmg1IHNtYWxsLFxuaDYgc21hbGwsXG4uaDYgc21hbGwsXG5oNCAuc21hbGwsXG4uaDQgLnNtYWxsLFxuaDUgLnNtYWxsLFxuLmg1IC5zbWFsbCxcbmg2IC5zbWFsbCxcbi5oNiAuc21hbGwge1xuICBmb250LXNpemU6IDc1JTtcbn1cbmgxLFxuLmgxIHtcbiAgZm9udC1zaXplOiAzNnB4O1xufVxuaDIsXG4uaDIge1xuICBmb250LXNpemU6IDMwcHg7XG59XG5oMyxcbi5oMyB7XG4gIGZvbnQtc2l6ZTogMjRweDtcbn1cbmg0LFxuLmg0IHtcbiAgZm9udC1zaXplOiAxOHB4O1xufVxuaDUsXG4uaDUge1xuICBmb250LXNpemU6IDE0cHg7XG59XG5oNixcbi5oNiB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbn1cbnAge1xuICBtYXJnaW46IDAgMCAxMHB4O1xufVxuLmxlYWQge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmxlYWQge1xuICAgIGZvbnQtc2l6ZTogMjFweDtcbiAgfVxufVxuc21hbGwsXG4uc21hbGwge1xuICBmb250LXNpemU6IDg1JTtcbn1cbm1hcmssXG4ubWFyayB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7XG4gIHBhZGRpbmc6IC4yZW07XG59XG4udGV4dC1sZWZ0IHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi50ZXh0LXJpZ2h0IHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG4udGV4dC1jZW50ZXIge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4udGV4dC1qdXN0aWZ5IHtcbiAgdGV4dC1hbGlnbjoganVzdGlmeTtcbn1cbi50ZXh0LW5vd3JhcCB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4udGV4dC1sb3dlcmNhc2Uge1xuICB0ZXh0LXRyYW5zZm9ybTogbG93ZXJjYXNlO1xufVxuLnRleHQtdXBwZXJjYXNlIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cbi50ZXh0LWNhcGl0YWxpemUge1xuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbn1cbi50ZXh0LW11dGVkIHtcbiAgY29sb3I6ICM3Nzc3Nzc7XG59XG4udGV4dC1wcmltYXJ5IHtcbiAgY29sb3I6ICMzMzdhYjc7XG59XG5hLnRleHQtcHJpbWFyeTpob3ZlcixcbmEudGV4dC1wcmltYXJ5OmZvY3VzIHtcbiAgY29sb3I6ICMyODYwOTA7XG59XG4udGV4dC1zdWNjZXNzIHtcbiAgY29sb3I6ICMzYzc2M2Q7XG59XG5hLnRleHQtc3VjY2Vzczpob3ZlcixcbmEudGV4dC1zdWNjZXNzOmZvY3VzIHtcbiAgY29sb3I6ICMyYjU0MmM7XG59XG4udGV4dC1pbmZvIHtcbiAgY29sb3I6ICMzMTcwOGY7XG59XG5hLnRleHQtaW5mbzpob3ZlcixcbmEudGV4dC1pbmZvOmZvY3VzIHtcbiAgY29sb3I6ICMyNDUyNjk7XG59XG4udGV4dC13YXJuaW5nIHtcbiAgY29sb3I6ICM4YTZkM2I7XG59XG5hLnRleHQtd2FybmluZzpob3ZlcixcbmEudGV4dC13YXJuaW5nOmZvY3VzIHtcbiAgY29sb3I6ICM2NjUxMmM7XG59XG4udGV4dC1kYW5nZXIge1xuICBjb2xvcjogI2E5NDQ0Mjtcbn1cbmEudGV4dC1kYW5nZXI6aG92ZXIsXG5hLnRleHQtZGFuZ2VyOmZvY3VzIHtcbiAgY29sb3I6ICM4NDM1MzQ7XG59XG4uYmctcHJpbWFyeSB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3O1xufVxuYS5iZy1wcmltYXJ5OmhvdmVyLFxuYS5iZy1wcmltYXJ5OmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4NjA5MDtcbn1cbi5iZy1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RmZjBkODtcbn1cbmEuYmctc3VjY2Vzczpob3ZlcixcbmEuYmctc3VjY2Vzczpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjMWUyYjM7XG59XG4uYmctaW5mbyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7XG59XG5hLmJnLWluZm86aG92ZXIsXG5hLmJnLWluZm86Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWZkOWVlO1xufVxuLmJnLXdhcm5pbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzO1xufVxuYS5iZy13YXJuaW5nOmhvdmVyLFxuYS5iZy13YXJuaW5nOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZWNiNTtcbn1cbi5iZy1kYW5nZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlO1xufVxuYS5iZy1kYW5nZXI6aG92ZXIsXG5hLmJnLWRhbmdlcjpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNGI5Yjk7XG59XG4ucGFnZS1oZWFkZXIge1xuICBwYWRkaW5nLWJvdHRvbTogOXB4O1xuICBtYXJnaW46IDQwcHggMCAyMHB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZWVlZTtcbn1cbnVsLFxub2wge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxudWwgdWwsXG5vbCB1bCxcbnVsIG9sLFxub2wgb2wge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLmxpc3QtdW5zdHlsZWQge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG4ubGlzdC1pbmxpbmUge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIG1hcmdpbi1sZWZ0OiAtNXB4O1xufVxuLmxpc3QtaW5saW5lID4gbGkge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmctbGVmdDogNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG59XG5kbCB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5kdCxcbmRkIHtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG59XG5kdCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuZGQge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZGwtaG9yaXpvbnRhbCBkdCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IDE2MHB4O1xuICAgIGNsZWFyOiBsZWZ0O1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuICAuZGwtaG9yaXpvbnRhbCBkZCB7XG4gICAgbWFyZ2luLWxlZnQ6IDE4MHB4O1xuICB9XG59XG5hYmJyW3RpdGxlXSxcbmFiYnJbZGF0YS1vcmlnaW5hbC10aXRsZV0ge1xuICBjdXJzb3I6IGhlbHA7XG4gIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgIzc3Nzc3Nztcbn1cbi5pbml0aWFsaXNtIHtcbiAgZm9udC1zaXplOiA5MCU7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG59XG5ibG9ja3F1b3RlIHtcbiAgcGFkZGluZzogMTBweCAyMHB4O1xuICBtYXJnaW46IDAgMCAyMHB4O1xuICBmb250LXNpemU6IDE3LjVweDtcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjZWVlZWVlO1xufVxuYmxvY2txdW90ZSBwOmxhc3QtY2hpbGQsXG5ibG9ja3F1b3RlIHVsOmxhc3QtY2hpbGQsXG5ibG9ja3F1b3RlIG9sOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuYmxvY2txdW90ZSBmb290ZXIsXG5ibG9ja3F1b3RlIHNtYWxsLFxuYmxvY2txdW90ZSAuc21hbGwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiA4MCU7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xuICBjb2xvcjogIzc3Nzc3Nztcbn1cbmJsb2NrcXVvdGUgZm9vdGVyOmJlZm9yZSxcbmJsb2NrcXVvdGUgc21hbGw6YmVmb3JlLFxuYmxvY2txdW90ZSAuc21hbGw6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcMjAxNCBcXDAwQTAnO1xufVxuLmJsb2NrcXVvdGUtcmV2ZXJzZSxcbmJsb2NrcXVvdGUucHVsbC1yaWdodCB7XG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgI2VlZWVlZTtcbiAgYm9yZGVyLWxlZnQ6IDA7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuLmJsb2NrcXVvdGUtcmV2ZXJzZSBmb290ZXI6YmVmb3JlLFxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IGZvb3RlcjpiZWZvcmUsXG4uYmxvY2txdW90ZS1yZXZlcnNlIHNtYWxsOmJlZm9yZSxcbmJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbDpiZWZvcmUsXG4uYmxvY2txdW90ZS1yZXZlcnNlIC5zbWFsbDpiZWZvcmUsXG5ibG9ja3F1b3RlLnB1bGwtcmlnaHQgLnNtYWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICcnO1xufVxuLmJsb2NrcXVvdGUtcmV2ZXJzZSBmb290ZXI6YWZ0ZXIsXG5ibG9ja3F1b3RlLnB1bGwtcmlnaHQgZm9vdGVyOmFmdGVyLFxuLmJsb2NrcXVvdGUtcmV2ZXJzZSBzbWFsbDphZnRlcixcbmJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbDphZnRlcixcbi5ibG9ja3F1b3RlLXJldmVyc2UgLnNtYWxsOmFmdGVyLFxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IC5zbWFsbDphZnRlciB7XG4gIGNvbnRlbnQ6ICdcXDAwQTAgXFwyMDE0Jztcbn1cbmFkZHJlc3Mge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xufVxuY29kZSxcbmtiZCxcbnByZSxcbnNhbXAge1xuICBmb250LWZhbWlseTogTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xufVxuY29kZSB7XG4gIHBhZGRpbmc6IDJweCA0cHg7XG4gIGZvbnQtc2l6ZTogOTAlO1xuICBjb2xvcjogI2M3MjU0ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZjJmNDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxua2JkIHtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgZm9udC1zaXplOiA5MCU7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7XG59XG5rYmQga2JkIHtcbiAgcGFkZGluZzogMDtcbiAgZm9udC1zaXplOiAxMDAlO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbnByZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiA5LjVweDtcbiAgbWFyZ2luOiAwIDAgMTBweDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5wcmUgY29kZSB7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ucHJlLXNjcm9sbGFibGUge1xuICBtYXgtaGVpZ2h0OiAzNDBweDtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xufVxuLmNvbnRhaW5lciB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIHBhZGRpbmctbGVmdDogMTVweDtcbiAgcGFkZGluZy1yaWdodDogMTVweDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29udGFpbmVyIHtcbiAgICB3aWR0aDogNzUwcHg7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAuY29udGFpbmVyIHtcbiAgICB3aWR0aDogOTcwcHg7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLmNvbnRhaW5lciB7XG4gICAgd2lkdGg6IDExNzBweDtcbiAgfVxufVxuLmNvbnRhaW5lci1mbHVpZCB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIHBhZGRpbmctbGVmdDogMTVweDtcbiAgcGFkZGluZy1yaWdodDogMTVweDtcbn1cbi5yb3cge1xuICBtYXJnaW4tbGVmdDogLTE1cHg7XG4gIG1hcmdpbi1yaWdodDogLTE1cHg7XG59XG4uY29sLXhzLTEsIC5jb2wtc20tMSwgLmNvbC1tZC0xLCAuY29sLWxnLTEsIC5jb2wteHMtMiwgLmNvbC1zbS0yLCAuY29sLW1kLTIsIC5jb2wtbGctMiwgLmNvbC14cy0zLCAuY29sLXNtLTMsIC5jb2wtbWQtMywgLmNvbC1sZy0zLCAuY29sLXhzLTQsIC5jb2wtc20tNCwgLmNvbC1tZC00LCAuY29sLWxnLTQsIC5jb2wteHMtNSwgLmNvbC1zbS01LCAuY29sLW1kLTUsIC5jb2wtbGctNSwgLmNvbC14cy02LCAuY29sLXNtLTYsIC5jb2wtbWQtNiwgLmNvbC1sZy02LCAuY29sLXhzLTcsIC5jb2wtc20tNywgLmNvbC1tZC03LCAuY29sLWxnLTcsIC5jb2wteHMtOCwgLmNvbC1zbS04LCAuY29sLW1kLTgsIC5jb2wtbGctOCwgLmNvbC14cy05LCAuY29sLXNtLTksIC5jb2wtbWQtOSwgLmNvbC1sZy05LCAuY29sLXhzLTEwLCAuY29sLXNtLTEwLCAuY29sLW1kLTEwLCAuY29sLWxnLTEwLCAuY29sLXhzLTExLCAuY29sLXNtLTExLCAuY29sLW1kLTExLCAuY29sLWxnLTExLCAuY29sLXhzLTEyLCAuY29sLXNtLTEyLCAuY29sLW1kLTEyLCAuY29sLWxnLTEyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAxcHg7XG4gIHBhZGRpbmctbGVmdDogMTVweDtcbiAgcGFkZGluZy1yaWdodDogMTVweDtcbn1cbi5jb2wteHMtMSwgLmNvbC14cy0yLCAuY29sLXhzLTMsIC5jb2wteHMtNCwgLmNvbC14cy01LCAuY29sLXhzLTYsIC5jb2wteHMtNywgLmNvbC14cy04LCAuY29sLXhzLTksIC5jb2wteHMtMTAsIC5jb2wteHMtMTEsIC5jb2wteHMtMTIge1xuICBmbG9hdDogbGVmdDtcbn1cbi5jb2wteHMtMTIge1xuICB3aWR0aDogMTAwJTtcbn1cbi5jb2wteHMtMTEge1xuICB3aWR0aDogOTEuNjY2NjY2NjclO1xufVxuLmNvbC14cy0xMCB7XG4gIHdpZHRoOiA4My4zMzMzMzMzMyU7XG59XG4uY29sLXhzLTkge1xuICB3aWR0aDogNzUlO1xufVxuLmNvbC14cy04IHtcbiAgd2lkdGg6IDY2LjY2NjY2NjY3JTtcbn1cbi5jb2wteHMtNyB7XG4gIHdpZHRoOiA1OC4zMzMzMzMzMyU7XG59XG4uY29sLXhzLTYge1xuICB3aWR0aDogNTAlO1xufVxuLmNvbC14cy01IHtcbiAgd2lkdGg6IDQxLjY2NjY2NjY3JTtcbn1cbi5jb2wteHMtNCB7XG4gIHdpZHRoOiAzMy4zMzMzMzMzMyU7XG59XG4uY29sLXhzLTMge1xuICB3aWR0aDogMjUlO1xufVxuLmNvbC14cy0yIHtcbiAgd2lkdGg6IDE2LjY2NjY2NjY3JTtcbn1cbi5jb2wteHMtMSB7XG4gIHdpZHRoOiA4LjMzMzMzMzMzJTtcbn1cbi5jb2wteHMtcHVsbC0xMiB7XG4gIHJpZ2h0OiAxMDAlO1xufVxuLmNvbC14cy1wdWxsLTExIHtcbiAgcmlnaHQ6IDkxLjY2NjY2NjY3JTtcbn1cbi5jb2wteHMtcHVsbC0xMCB7XG4gIHJpZ2h0OiA4My4zMzMzMzMzMyU7XG59XG4uY29sLXhzLXB1bGwtOSB7XG4gIHJpZ2h0OiA3NSU7XG59XG4uY29sLXhzLXB1bGwtOCB7XG4gIHJpZ2h0OiA2Ni42NjY2NjY2NyU7XG59XG4uY29sLXhzLXB1bGwtNyB7XG4gIHJpZ2h0OiA1OC4zMzMzMzMzMyU7XG59XG4uY29sLXhzLXB1bGwtNiB7XG4gIHJpZ2h0OiA1MCU7XG59XG4uY29sLXhzLXB1bGwtNSB7XG4gIHJpZ2h0OiA0MS42NjY2NjY2NyU7XG59XG4uY29sLXhzLXB1bGwtNCB7XG4gIHJpZ2h0OiAzMy4zMzMzMzMzMyU7XG59XG4uY29sLXhzLXB1bGwtMyB7XG4gIHJpZ2h0OiAyNSU7XG59XG4uY29sLXhzLXB1bGwtMiB7XG4gIHJpZ2h0OiAxNi42NjY2NjY2NyU7XG59XG4uY29sLXhzLXB1bGwtMSB7XG4gIHJpZ2h0OiA4LjMzMzMzMzMzJTtcbn1cbi5jb2wteHMtcHVsbC0wIHtcbiAgcmlnaHQ6IGF1dG87XG59XG4uY29sLXhzLXB1c2gtMTIge1xuICBsZWZ0OiAxMDAlO1xufVxuLmNvbC14cy1wdXNoLTExIHtcbiAgbGVmdDogOTEuNjY2NjY2NjclO1xufVxuLmNvbC14cy1wdXNoLTEwIHtcbiAgbGVmdDogODMuMzMzMzMzMzMlO1xufVxuLmNvbC14cy1wdXNoLTkge1xuICBsZWZ0OiA3NSU7XG59XG4uY29sLXhzLXB1c2gtOCB7XG4gIGxlZnQ6IDY2LjY2NjY2NjY3JTtcbn1cbi5jb2wteHMtcHVzaC03IHtcbiAgbGVmdDogNTguMzMzMzMzMzMlO1xufVxuLmNvbC14cy1wdXNoLTYge1xuICBsZWZ0OiA1MCU7XG59XG4uY29sLXhzLXB1c2gtNSB7XG4gIGxlZnQ6IDQxLjY2NjY2NjY3JTtcbn1cbi5jb2wteHMtcHVzaC00IHtcbiAgbGVmdDogMzMuMzMzMzMzMzMlO1xufVxuLmNvbC14cy1wdXNoLTMge1xuICBsZWZ0OiAyNSU7XG59XG4uY29sLXhzLXB1c2gtMiB7XG4gIGxlZnQ6IDE2LjY2NjY2NjY3JTtcbn1cbi5jb2wteHMtcHVzaC0xIHtcbiAgbGVmdDogOC4zMzMzMzMzMyU7XG59XG4uY29sLXhzLXB1c2gtMCB7XG4gIGxlZnQ6IGF1dG87XG59XG4uY29sLXhzLW9mZnNldC0xMiB7XG4gIG1hcmdpbi1sZWZ0OiAxMDAlO1xufVxuLmNvbC14cy1vZmZzZXQtMTEge1xuICBtYXJnaW4tbGVmdDogOTEuNjY2NjY2NjclO1xufVxuLmNvbC14cy1vZmZzZXQtMTAge1xuICBtYXJnaW4tbGVmdDogODMuMzMzMzMzMzMlO1xufVxuLmNvbC14cy1vZmZzZXQtOSB7XG4gIG1hcmdpbi1sZWZ0OiA3NSU7XG59XG4uY29sLXhzLW9mZnNldC04IHtcbiAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY3JTtcbn1cbi5jb2wteHMtb2Zmc2V0LTcge1xuICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMlO1xufVxuLmNvbC14cy1vZmZzZXQtNiB7XG4gIG1hcmdpbi1sZWZ0OiA1MCU7XG59XG4uY29sLXhzLW9mZnNldC01IHtcbiAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY3JTtcbn1cbi5jb2wteHMtb2Zmc2V0LTQge1xuICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMlO1xufVxuLmNvbC14cy1vZmZzZXQtMyB7XG4gIG1hcmdpbi1sZWZ0OiAyNSU7XG59XG4uY29sLXhzLW9mZnNldC0yIHtcbiAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY3JTtcbn1cbi5jb2wteHMtb2Zmc2V0LTEge1xuICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMyU7XG59XG4uY29sLXhzLW9mZnNldC0wIHtcbiAgbWFyZ2luLWxlZnQ6IDAlO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb2wtc20tMSwgLmNvbC1zbS0yLCAuY29sLXNtLTMsIC5jb2wtc20tNCwgLmNvbC1zbS01LCAuY29sLXNtLTYsIC5jb2wtc20tNywgLmNvbC1zbS04LCAuY29sLXNtLTksIC5jb2wtc20tMTAsIC5jb2wtc20tMTEsIC5jb2wtc20tMTIge1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG4gIC5jb2wtc20tMTIge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb2wtc20tMTEge1xuICAgIHdpZHRoOiA5MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLTkge1xuICAgIHdpZHRoOiA3NSU7XG4gIH1cbiAgLmNvbC1zbS04IHtcbiAgICB3aWR0aDogNjYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tNyB7XG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLTYge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbiAgLmNvbC1zbS01IHtcbiAgICB3aWR0aDogNDEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tNCB7XG4gICAgd2lkdGg6IDMzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLTMge1xuICAgIHdpZHRoOiAyNSU7XG4gIH1cbiAgLmNvbC1zbS0yIHtcbiAgICB3aWR0aDogMTYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tMSB7XG4gICAgd2lkdGg6IDguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tcHVsbC0xMiB7XG4gICAgcmlnaHQ6IDEwMCU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTExIHtcbiAgICByaWdodDogOTEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tcHVsbC0xMCB7XG4gICAgcmlnaHQ6IDgzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1bGwtOSB7XG4gICAgcmlnaHQ6IDc1JTtcbiAgfVxuICAuY29sLXNtLXB1bGwtOCB7XG4gICAgcmlnaHQ6IDY2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLXB1bGwtNyB7XG4gICAgcmlnaHQ6IDU4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1bGwtNiB7XG4gICAgcmlnaHQ6IDUwJTtcbiAgfVxuICAuY29sLXNtLXB1bGwtNSB7XG4gICAgcmlnaHQ6IDQxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLXB1bGwtNCB7XG4gICAgcmlnaHQ6IDMzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1bGwtMyB7XG4gICAgcmlnaHQ6IDI1JTtcbiAgfVxuICAuY29sLXNtLXB1bGwtMiB7XG4gICAgcmlnaHQ6IDE2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLXB1bGwtMSB7XG4gICAgcmlnaHQ6IDguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tcHVsbC0wIHtcbiAgICByaWdodDogYXV0bztcbiAgfVxuICAuY29sLXNtLXB1c2gtMTIge1xuICAgIGxlZnQ6IDEwMCU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTExIHtcbiAgICBsZWZ0OiA5MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTEwIHtcbiAgICBsZWZ0OiA4My4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTkge1xuICAgIGxlZnQ6IDc1JTtcbiAgfVxuICAuY29sLXNtLXB1c2gtOCB7XG4gICAgbGVmdDogNjYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tcHVzaC03IHtcbiAgICBsZWZ0OiA1OC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTYge1xuICAgIGxlZnQ6IDUwJTtcbiAgfVxuICAuY29sLXNtLXB1c2gtNSB7XG4gICAgbGVmdDogNDEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tcHVzaC00IHtcbiAgICBsZWZ0OiAzMy4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTMge1xuICAgIGxlZnQ6IDI1JTtcbiAgfVxuICAuY29sLXNtLXB1c2gtMiB7XG4gICAgbGVmdDogMTYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tcHVzaC0xIHtcbiAgICBsZWZ0OiA4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1c2gtMCB7XG4gICAgbGVmdDogYXV0bztcbiAgfVxuICAuY29sLXNtLW9mZnNldC0xMiB7XG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtMTEge1xuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtMTAge1xuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtOSB7XG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC04IHtcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTcge1xuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtNiB7XG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC01IHtcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTQge1xuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtMyB7XG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC0yIHtcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTEge1xuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC0wIHtcbiAgICBtYXJnaW4tbGVmdDogMCU7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAuY29sLW1kLTEsIC5jb2wtbWQtMiwgLmNvbC1tZC0zLCAuY29sLW1kLTQsIC5jb2wtbWQtNSwgLmNvbC1tZC02LCAuY29sLW1kLTcsIC5jb2wtbWQtOCwgLmNvbC1tZC05LCAuY29sLW1kLTEwLCAuY29sLW1kLTExLCAuY29sLW1kLTEyIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxuICAuY29sLW1kLTEyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAuY29sLW1kLTExIHtcbiAgICB3aWR0aDogOTEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtMTAge1xuICAgIHdpZHRoOiA4My4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC05IHtcbiAgICB3aWR0aDogNzUlO1xuICB9XG4gIC5jb2wtbWQtOCB7XG4gICAgd2lkdGg6IDY2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLTcge1xuICAgIHdpZHRoOiA1OC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC02IHtcbiAgICB3aWR0aDogNTAlO1xuICB9XG4gIC5jb2wtbWQtNSB7XG4gICAgd2lkdGg6IDQxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLTQge1xuICAgIHdpZHRoOiAzMy4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC0zIHtcbiAgICB3aWR0aDogMjUlO1xuICB9XG4gIC5jb2wtbWQtMiB7XG4gICAgd2lkdGg6IDE2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLTEge1xuICAgIHdpZHRoOiA4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLXB1bGwtMTIge1xuICAgIHJpZ2h0OiAxMDAlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC0xMSB7XG4gICAgcmlnaHQ6IDkxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLXB1bGwtMTAge1xuICAgIHJpZ2h0OiA4My4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTkge1xuICAgIHJpZ2h0OiA3NSU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTgge1xuICAgIHJpZ2h0OiA2Ni42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTcge1xuICAgIHJpZ2h0OiA1OC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTYge1xuICAgIHJpZ2h0OiA1MCU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTUge1xuICAgIHJpZ2h0OiA0MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTQge1xuICAgIHJpZ2h0OiAzMy4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTMge1xuICAgIHJpZ2h0OiAyNSU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTIge1xuICAgIHJpZ2h0OiAxNi42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTEge1xuICAgIHJpZ2h0OiA4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLXB1bGwtMCB7XG4gICAgcmlnaHQ6IGF1dG87XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTEyIHtcbiAgICBsZWZ0OiAxMDAlO1xuICB9XG4gIC5jb2wtbWQtcHVzaC0xMSB7XG4gICAgbGVmdDogOTEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtcHVzaC0xMCB7XG4gICAgbGVmdDogODMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVzaC05IHtcbiAgICBsZWZ0OiA3NSU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTgge1xuICAgIGxlZnQ6IDY2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLXB1c2gtNyB7XG4gICAgbGVmdDogNTguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVzaC02IHtcbiAgICBsZWZ0OiA1MCU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTUge1xuICAgIGxlZnQ6IDQxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLXB1c2gtNCB7XG4gICAgbGVmdDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVzaC0zIHtcbiAgICBsZWZ0OiAyNSU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTIge1xuICAgIGxlZnQ6IDE2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLXB1c2gtMSB7XG4gICAgbGVmdDogOC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTAge1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtMTIge1xuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTExIHtcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTEwIHtcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTkge1xuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtOCB7XG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC03IHtcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTYge1xuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtNSB7XG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC00IHtcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTMge1xuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtMiB7XG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC0xIHtcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtMCB7XG4gICAgbWFyZ2luLWxlZnQ6IDAlO1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC5jb2wtbGctMSwgLmNvbC1sZy0yLCAuY29sLWxnLTMsIC5jb2wtbGctNCwgLmNvbC1sZy01LCAuY29sLWxnLTYsIC5jb2wtbGctNywgLmNvbC1sZy04LCAuY29sLWxnLTksIC5jb2wtbGctMTAsIC5jb2wtbGctMTEsIC5jb2wtbGctMTIge1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG4gIC5jb2wtbGctMTIge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb2wtbGctMTEge1xuICAgIHdpZHRoOiA5MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLTkge1xuICAgIHdpZHRoOiA3NSU7XG4gIH1cbiAgLmNvbC1sZy04IHtcbiAgICB3aWR0aDogNjYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctNyB7XG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLTYge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbiAgLmNvbC1sZy01IHtcbiAgICB3aWR0aDogNDEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctNCB7XG4gICAgd2lkdGg6IDMzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLTMge1xuICAgIHdpZHRoOiAyNSU7XG4gIH1cbiAgLmNvbC1sZy0yIHtcbiAgICB3aWR0aDogMTYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctMSB7XG4gICAgd2lkdGg6IDguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVsbC0xMiB7XG4gICAgcmlnaHQ6IDEwMCU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTExIHtcbiAgICByaWdodDogOTEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctcHVsbC0xMCB7XG4gICAgcmlnaHQ6IDgzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLXB1bGwtOSB7XG4gICAgcmlnaHQ6IDc1JTtcbiAgfVxuICAuY29sLWxnLXB1bGwtOCB7XG4gICAgcmlnaHQ6IDY2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLXB1bGwtNyB7XG4gICAgcmlnaHQ6IDU4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLXB1bGwtNiB7XG4gICAgcmlnaHQ6IDUwJTtcbiAgfVxuICAuY29sLWxnLXB1bGwtNSB7XG4gICAgcmlnaHQ6IDQxLjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLXB1bGwtNCB7XG4gICAgcmlnaHQ6IDMzLjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLXB1bGwtMyB7XG4gICAgcmlnaHQ6IDI1JTtcbiAgfVxuICAuY29sLWxnLXB1bGwtMiB7XG4gICAgcmlnaHQ6IDE2LjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLXB1bGwtMSB7XG4gICAgcmlnaHQ6IDguMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVsbC0wIHtcbiAgICByaWdodDogYXV0bztcbiAgfVxuICAuY29sLWxnLXB1c2gtMTIge1xuICAgIGxlZnQ6IDEwMCU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTExIHtcbiAgICBsZWZ0OiA5MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTEwIHtcbiAgICBsZWZ0OiA4My4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTkge1xuICAgIGxlZnQ6IDc1JTtcbiAgfVxuICAuY29sLWxnLXB1c2gtOCB7XG4gICAgbGVmdDogNjYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctcHVzaC03IHtcbiAgICBsZWZ0OiA1OC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTYge1xuICAgIGxlZnQ6IDUwJTtcbiAgfVxuICAuY29sLWxnLXB1c2gtNSB7XG4gICAgbGVmdDogNDEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctcHVzaC00IHtcbiAgICBsZWZ0OiAzMy4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTMge1xuICAgIGxlZnQ6IDI1JTtcbiAgfVxuICAuY29sLWxnLXB1c2gtMiB7XG4gICAgbGVmdDogMTYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctcHVzaC0xIHtcbiAgICBsZWZ0OiA4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLXB1c2gtMCB7XG4gICAgbGVmdDogYXV0bztcbiAgfVxuICAuY29sLWxnLW9mZnNldC0xMiB7XG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtMTEge1xuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtMTAge1xuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtOSB7XG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC04IHtcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTcge1xuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtNiB7XG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC01IHtcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTQge1xuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtMyB7XG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC0yIHtcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTEge1xuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC0wIHtcbiAgICBtYXJnaW4tbGVmdDogMCU7XG4gIH1cbn1cbnRhYmxlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5jYXB0aW9uIHtcbiAgcGFkZGluZy10b3A6IDhweDtcbiAgcGFkZGluZy1ib3R0b206IDhweDtcbiAgY29sb3I6ICM3Nzc3Nzc7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG50aCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4udGFibGUge1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRoLFxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRkLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkIHtcbiAgcGFkZGluZzogOHB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG59XG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGgge1xuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2RkZDtcbn1cbi50YWJsZSA+IGNhcHRpb24gKyB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsXG4udGFibGUgPiBjb2xncm91cCArIHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbi50YWJsZSA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbi50YWJsZSA+IGNhcHRpb24gKyB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGQsXG4udGFibGUgPiBjb2xncm91cCArIHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbi50YWJsZSA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCB7XG4gIGJvcmRlci10b3A6IDA7XG59XG4udGFibGUgPiB0Ym9keSArIHRib2R5IHtcbiAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICNkZGQ7XG59XG4udGFibGUgLnRhYmxlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi50YWJsZS1jb25kZW5zZWQgPiB0aGVhZCA+IHRyID4gdGgsXG4udGFibGUtY29uZGVuc2VkID4gdGJvZHkgPiB0ciA+IHRoLFxuLnRhYmxlLWNvbmRlbnNlZCA+IHRmb290ID4gdHIgPiB0aCxcbi50YWJsZS1jb25kZW5zZWQgPiB0aGVhZCA+IHRyID4gdGQsXG4udGFibGUtY29uZGVuc2VkID4gdGJvZHkgPiB0ciA+IHRkLFxuLnRhYmxlLWNvbmRlbnNlZCA+IHRmb290ID4gdHIgPiB0ZCB7XG4gIHBhZGRpbmc6IDVweDtcbn1cbi50YWJsZS1ib3JkZXJlZCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG59XG4udGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGgsXG4udGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGgsXG4udGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGgsXG4udGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQsXG4udGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGQsXG4udGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xufVxuLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoLFxuLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkIHtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMnB4O1xufVxuLnRhYmxlLXN0cmlwZWQgPiB0Ym9keSA+IHRyOm50aC1vZi10eXBlKG9kZCkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5O1xufVxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG59XG50YWJsZSBjb2xbY2xhc3MqPVwiY29sLVwiXSB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIGZsb2F0OiBub25lO1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW47XG59XG50YWJsZSB0ZFtjbGFzcyo9XCJjb2wtXCJdLFxudGFibGUgdGhbY2xhc3MqPVwiY29sLVwiXSB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIGZsb2F0OiBub25lO1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xufVxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRkLmFjdGl2ZSxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZC5hY3RpdmUsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGQuYWN0aXZlLFxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLmFjdGl2ZSxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0aC5hY3RpdmUsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGguYWN0aXZlLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5hY3RpdmUgPiB0ZCxcbi50YWJsZSA+IHRib2R5ID4gdHIuYWN0aXZlID4gdGQsXG4udGFibGUgPiB0Zm9vdCA+IHRyLmFjdGl2ZSA+IHRkLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5hY3RpdmUgPiB0aCxcbi50YWJsZSA+IHRib2R5ID4gdHIuYWN0aXZlID4gdGgsXG4udGFibGUgPiB0Zm9vdCA+IHRyLmFjdGl2ZSA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbn1cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5hY3RpdmU6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGguYWN0aXZlOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5hY3RpdmU6aG92ZXIgPiB0ZCxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuYWN0aXZlLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5hY3RpdmU6aG92ZXIgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlOGU4ZTg7XG59XG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGQuc3VjY2Vzcyxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZC5zdWNjZXNzLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLnN1Y2Nlc3MsXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGguc3VjY2Vzcyxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0aC5zdWNjZXNzLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRoLnN1Y2Nlc3MsXG4udGFibGUgPiB0aGVhZCA+IHRyLnN1Y2Nlc3MgPiB0ZCxcbi50YWJsZSA+IHRib2R5ID4gdHIuc3VjY2VzcyA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5zdWNjZXNzID4gdGQsXG4udGFibGUgPiB0aGVhZCA+IHRyLnN1Y2Nlc3MgPiB0aCxcbi50YWJsZSA+IHRib2R5ID4gdHIuc3VjY2VzcyA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5zdWNjZXNzID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZmMGQ4O1xufVxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRkLnN1Y2Nlc3M6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGguc3VjY2Vzczpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuc3VjY2Vzczpob3ZlciA+IHRkLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC5zdWNjZXNzLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5zdWNjZXNzOmhvdmVyID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDBlOWM2O1xufVxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRkLmluZm8sXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGQuaW5mbyxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0ZC5pbmZvLFxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLmluZm8sXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGguaW5mbyxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5pbmZvLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5pbmZvID4gdGQsXG4udGFibGUgPiB0Ym9keSA+IHRyLmluZm8gPiB0ZCxcbi50YWJsZSA+IHRmb290ID4gdHIuaW5mbyA+IHRkLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5pbmZvID4gdGgsXG4udGFibGUgPiB0Ym9keSA+IHRyLmluZm8gPiB0aCxcbi50YWJsZSA+IHRmb290ID4gdHIuaW5mbyA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5ZWRmNztcbn1cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5pbmZvOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLmluZm86aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLmluZm86aG92ZXIgPiB0ZCxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuaW5mbyxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuaW5mbzpob3ZlciA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M0ZTNmMztcbn1cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC53YXJuaW5nLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLndhcm5pbmcsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGQud2FybmluZyxcbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aC53YXJuaW5nLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLndhcm5pbmcsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGgud2FybmluZyxcbi50YWJsZSA+IHRoZWFkID4gdHIud2FybmluZyA+IHRkLFxuLnRhYmxlID4gdGJvZHkgPiB0ci53YXJuaW5nID4gdGQsXG4udGFibGUgPiB0Zm9vdCA+IHRyLndhcm5pbmcgPiB0ZCxcbi50YWJsZSA+IHRoZWFkID4gdHIud2FybmluZyA+IHRoLFxuLnRhYmxlID4gdGJvZHkgPiB0ci53YXJuaW5nID4gdGgsXG4udGFibGUgPiB0Zm9vdCA+IHRyLndhcm5pbmcgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7XG59XG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGQud2FybmluZzpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0aC53YXJuaW5nOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci53YXJuaW5nOmhvdmVyID4gdGQsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyOmhvdmVyID4gLndhcm5pbmcsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLndhcm5pbmc6aG92ZXIgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWYyY2M7XG59XG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGQuZGFuZ2VyLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLmRhbmdlcixcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0ZC5kYW5nZXIsXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGguZGFuZ2VyLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLmRhbmdlcixcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5kYW5nZXIsXG4udGFibGUgPiB0aGVhZCA+IHRyLmRhbmdlciA+IHRkLFxuLnRhYmxlID4gdGJvZHkgPiB0ci5kYW5nZXIgPiB0ZCxcbi50YWJsZSA+IHRmb290ID4gdHIuZGFuZ2VyID4gdGQsXG4udGFibGUgPiB0aGVhZCA+IHRyLmRhbmdlciA+IHRoLFxuLnRhYmxlID4gdGJvZHkgPiB0ci5kYW5nZXIgPiB0aCxcbi50YWJsZSA+IHRmb290ID4gdHIuZGFuZ2VyID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlO1xufVxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRkLmRhbmdlcjpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0aC5kYW5nZXI6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLmRhbmdlcjpob3ZlciA+IHRkLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC5kYW5nZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLmRhbmdlcjpob3ZlciA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ViY2NjYztcbn1cbi50YWJsZS1yZXNwb25zaXZlIHtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgbWluLWhlaWdodDogMC4wMSU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAudGFibGUtcmVzcG9uc2l2ZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgICBvdmVyZmxvdy15OiBoaWRkZW47XG4gICAgLW1zLW92ZXJmbG93LXN0eWxlOiAtbXMtYXV0b2hpZGluZy1zY3JvbGxiYXI7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgfVxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSA+IHRoZWFkID4gdHIgPiB0aCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgPiB0Ym9keSA+IHRyID4gdGgsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRoLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgPiB0Ym9keSA+IHRyID4gdGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkIHtcbiAgICBib3JkZXI6IDA7XG4gIH1cbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLWxlZnQ6IDA7XG4gIH1cbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGg6bGFzdC1jaGlsZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGg6bGFzdC1jaGlsZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGg6bGFzdC1jaGlsZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQ6bGFzdC1jaGlsZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGQ6bGFzdC1jaGlsZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGQ6bGFzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICB9XG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpsYXN0LWNoaWxkID4gdGgsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGgsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpsYXN0LWNoaWxkID4gdGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGQge1xuICAgIGJvcmRlci1ib3R0b206IDA7XG4gIH1cbn1cbmZpZWxkc2V0IHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBib3JkZXI6IDA7XG4gIG1pbi13aWR0aDogMDtcbn1cbmxlZ2VuZCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgZm9udC1zaXplOiAyMXB4O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNWU1ZTU7XG59XG5sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgbWFyZ2luOiA0cHggMCAwO1xuICBtYXJnaW4tdG9wOiAxcHggXFw5O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xufVxuaW5wdXRbdHlwZT1cImZpbGVcIl0ge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbmlucHV0W3R5cGU9XCJyYW5nZVwiXSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbn1cbnNlbGVjdFttdWx0aXBsZV0sXG5zZWxlY3Rbc2l6ZV0ge1xuICBoZWlnaHQ6IGF1dG87XG59XG5pbnB1dFt0eXBlPVwiZmlsZVwiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJyYWRpb1wiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpmb2N1cyB7XG4gIG91dGxpbmU6IHRoaW4gZG90dGVkO1xuICBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7XG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xufVxub3V0cHV0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmctdG9wOiA3cHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG4gIGNvbG9yOiAjNTU1NTU1O1xufVxuLmZvcm0tY29udHJvbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAzNHB4O1xuICBwYWRkaW5nOiA2cHggMTJweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgY29sb3I6ICM1NTU1NTU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgLjE1cywgYm94LXNoYWRvdyBlYXNlLWluLW91dCAuMTVzO1xuICAtby10cmFuc2l0aW9uOiBib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgLjE1cywgYm94LXNoYWRvdyBlYXNlLWluLW91dCAuMTVzO1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgLjE1cywgYm94LXNoYWRvdyBlYXNlLWluLW91dCAuMTVzO1xufVxuLmZvcm0tY29udHJvbDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogIzY2YWZlOTtcbiAgb3V0bGluZTogMDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KSwgMCAwIDhweCByZ2JhKDEwMiwgMTc1LCAyMzMsIDAuNik7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpLCAwIDAgOHB4IHJnYmEoMTAyLCAxNzUsIDIzMywgMC42KTtcbn1cbi5mb3JtLWNvbnRyb2w6Oi1tb3otcGxhY2Vob2xkZXIge1xuICBjb2xvcjogIzk5OTtcbiAgb3BhY2l0eTogMTtcbn1cbi5mb3JtLWNvbnRyb2w6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6ICM5OTk7XG59XG4uZm9ybS1jb250cm9sOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6ICM5OTk7XG59XG4uZm9ybS1jb250cm9sW2Rpc2FibGVkXSxcbi5mb3JtLWNvbnRyb2xbcmVhZG9ubHldLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5mb3JtLWNvbnRyb2wge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xuICBvcGFjaXR5OiAxO1xufVxuLmZvcm0tY29udHJvbFtkaXNhYmxlZF0sXG5maWVsZHNldFtkaXNhYmxlZF0gLmZvcm0tY29udHJvbCB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG50ZXh0YXJlYS5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IGF1dG87XG59XG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMCkge1xuICBpbnB1dFt0eXBlPVwiZGF0ZVwiXS5mb3JtLWNvbnRyb2wsXG4gIGlucHV0W3R5cGU9XCJ0aW1lXCJdLmZvcm0tY29udHJvbCxcbiAgaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLmZvcm0tY29udHJvbCxcbiAgaW5wdXRbdHlwZT1cIm1vbnRoXCJdLmZvcm0tY29udHJvbCB7XG4gICAgbGluZS1oZWlnaHQ6IDM0cHg7XG4gIH1cbiAgaW5wdXRbdHlwZT1cImRhdGVcIl0uaW5wdXQtc20sXG4gIGlucHV0W3R5cGU9XCJ0aW1lXCJdLmlucHV0LXNtLFxuICBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0uaW5wdXQtc20sXG4gIGlucHV0W3R5cGU9XCJtb250aFwiXS5pbnB1dC1zbSxcbiAgLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9XCJkYXRlXCJdLFxuICAuaW5wdXQtZ3JvdXAtc20gaW5wdXRbdHlwZT1cInRpbWVcIl0sXG4gIC5pbnB1dC1ncm91cC1zbSBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG4gIC5pbnB1dC1ncm91cC1zbSBpbnB1dFt0eXBlPVwibW9udGhcIl0ge1xuICAgIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICB9XG4gIGlucHV0W3R5cGU9XCJkYXRlXCJdLmlucHV0LWxnLFxuICBpbnB1dFt0eXBlPVwidGltZVwiXS5pbnB1dC1sZyxcbiAgaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLmlucHV0LWxnLFxuICBpbnB1dFt0eXBlPVwibW9udGhcIl0uaW5wdXQtbGcsXG4gIC5pbnB1dC1ncm91cC1sZyBpbnB1dFt0eXBlPVwiZGF0ZVwiXSxcbiAgLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9XCJ0aW1lXCJdLFxuICAuaW5wdXQtZ3JvdXAtbGcgaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLFxuICAuaW5wdXQtZ3JvdXAtbGcgaW5wdXRbdHlwZT1cIm1vbnRoXCJdIHtcbiAgICBsaW5lLWhlaWdodDogNDZweDtcbiAgfVxufVxuLmZvcm0tZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuLnJhZGlvLFxuLmNoZWNrYm94IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbi5yYWRpbyBsYWJlbCxcbi5jaGVja2JveCBsYWJlbCB7XG4gIG1pbi1oZWlnaHQ6IDIwcHg7XG4gIHBhZGRpbmctbGVmdDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLnJhZGlvIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbi5yYWRpby1pbmxpbmUgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5jaGVja2JveC1pbmxpbmUgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW4tbGVmdDogLTIwcHg7XG4gIG1hcmdpbi10b3A6IDRweCBcXDk7XG59XG4ucmFkaW8gKyAucmFkaW8sXG4uY2hlY2tib3ggKyAuY2hlY2tib3gge1xuICBtYXJnaW4tdG9wOiAtNXB4O1xufVxuLnJhZGlvLWlubGluZSxcbi5jaGVja2JveC1pbmxpbmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ucmFkaW8taW5saW5lICsgLnJhZGlvLWlubGluZSxcbi5jaGVja2JveC1pbmxpbmUgKyAuY2hlY2tib3gtaW5saW5lIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XG59XG5pbnB1dFt0eXBlPVwicmFkaW9cIl1bZGlzYWJsZWRdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdW2Rpc2FibGVkXSxcbmlucHV0W3R5cGU9XCJyYWRpb1wiXS5kaXNhYmxlZCxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5kaXNhYmxlZCxcbmZpZWxkc2V0W2Rpc2FibGVkXSBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG5maWVsZHNldFtkaXNhYmxlZF0gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5yYWRpby1pbmxpbmUuZGlzYWJsZWQsXG4uY2hlY2tib3gtaW5saW5lLmRpc2FibGVkLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5yYWRpby1pbmxpbmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmNoZWNrYm94LWlubGluZSB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ucmFkaW8uZGlzYWJsZWQgbGFiZWwsXG4uY2hlY2tib3guZGlzYWJsZWQgbGFiZWwsXG5maWVsZHNldFtkaXNhYmxlZF0gLnJhZGlvIGxhYmVsLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5jaGVja2JveCBsYWJlbCB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4uZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gIHBhZGRpbmctdG9wOiA3cHg7XG4gIHBhZGRpbmctYm90dG9tOiA3cHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIG1pbi1oZWlnaHQ6IDM0cHg7XG59XG4uZm9ybS1jb250cm9sLXN0YXRpYy5pbnB1dC1sZyxcbi5mb3JtLWNvbnRyb2wtc3RhdGljLmlucHV0LXNtIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuLmlucHV0LXNtIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICBwYWRkaW5nOiA1cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS41O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5zZWxlY3QuaW5wdXQtc20ge1xuICBoZWlnaHQ6IDMwcHg7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xufVxudGV4dGFyZWEuaW5wdXQtc20sXG5zZWxlY3RbbXVsdGlwbGVdLmlucHV0LXNtIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmZvcm0tZ3JvdXAtc20gLmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogMzBweDtcbiAgcGFkZGluZzogNXB4IDEwcHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuLmZvcm0tZ3JvdXAtc20gc2VsZWN0LmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogMzBweDtcbiAgbGluZS1oZWlnaHQ6IDMwcHg7XG59XG4uZm9ybS1ncm91cC1zbSB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsXG4uZm9ybS1ncm91cC1zbSBzZWxlY3RbbXVsdGlwbGVdLmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogYXV0bztcbn1cbi5mb3JtLWdyb3VwLXNtIC5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICBtaW4taGVpZ2h0OiAzMnB4O1xuICBwYWRkaW5nOiA2cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS41O1xufVxuLmlucHV0LWxnIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBwYWRkaW5nOiAxMHB4IDE2cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMztcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xufVxuc2VsZWN0LmlucHV0LWxnIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBsaW5lLWhlaWdodDogNDZweDtcbn1cbnRleHRhcmVhLmlucHV0LWxnLFxuc2VsZWN0W211bHRpcGxlXS5pbnB1dC1sZyB7XG4gIGhlaWdodDogYXV0bztcbn1cbi5mb3JtLWdyb3VwLWxnIC5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IDQ2cHg7XG4gIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzO1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG4uZm9ybS1ncm91cC1sZyBzZWxlY3QuZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBsaW5lLWhlaWdodDogNDZweDtcbn1cbi5mb3JtLWdyb3VwLWxnIHRleHRhcmVhLmZvcm0tY29udHJvbCxcbi5mb3JtLWdyb3VwLWxnIHNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICBoZWlnaHQ6IDQ2cHg7XG4gIG1pbi1oZWlnaHQ6IDM4cHg7XG4gIHBhZGRpbmc6IDExcHggMTZweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzO1xufVxuLmhhcy1mZWVkYmFjayB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbCB7XG4gIHBhZGRpbmctcmlnaHQ6IDQyLjVweDtcbn1cbi5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIHotaW5kZXg6IDI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMzRweDtcbiAgaGVpZ2h0OiAzNHB4O1xuICBsaW5lLWhlaWdodDogMzRweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbi5pbnB1dC1sZyArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uaW5wdXQtZ3JvdXAtbGcgKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLFxuLmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbCArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB3aWR0aDogNDZweDtcbiAgaGVpZ2h0OiA0NnB4O1xuICBsaW5lLWhlaWdodDogNDZweDtcbn1cbi5pbnB1dC1zbSArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uaW5wdXQtZ3JvdXAtc20gKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLFxuLmZvcm0tZ3JvdXAtc20gLmZvcm0tY29udHJvbCArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB3aWR0aDogMzBweDtcbiAgaGVpZ2h0OiAzMHB4O1xuICBsaW5lLWhlaWdodDogMzBweDtcbn1cbi5oYXMtc3VjY2VzcyAuaGVscC1ibG9jayxcbi5oYXMtc3VjY2VzcyAuY29udHJvbC1sYWJlbCxcbi5oYXMtc3VjY2VzcyAucmFkaW8sXG4uaGFzLXN1Y2Nlc3MgLmNoZWNrYm94LFxuLmhhcy1zdWNjZXNzIC5yYWRpby1pbmxpbmUsXG4uaGFzLXN1Y2Nlc3MgLmNoZWNrYm94LWlubGluZSxcbi5oYXMtc3VjY2Vzcy5yYWRpbyBsYWJlbCxcbi5oYXMtc3VjY2Vzcy5jaGVja2JveCBsYWJlbCxcbi5oYXMtc3VjY2Vzcy5yYWRpby1pbmxpbmUgbGFiZWwsXG4uaGFzLXN1Y2Nlc3MuY2hlY2tib3gtaW5saW5lIGxhYmVsIHtcbiAgY29sb3I6ICMzYzc2M2Q7XG59XG4uaGFzLXN1Y2Nlc3MgLmZvcm0tY29udHJvbCB7XG4gIGJvcmRlci1jb2xvcjogIzNjNzYzZDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbn1cbi5oYXMtc3VjY2VzcyAuZm9ybS1jb250cm9sOmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjMmI1NDJjO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjNjdiMTY4O1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggIzY3YjE2ODtcbn1cbi5oYXMtc3VjY2VzcyAuaW5wdXQtZ3JvdXAtYWRkb24ge1xuICBjb2xvcjogIzNjNzYzZDtcbiAgYm9yZGVyLWNvbG9yOiAjM2M3NjNkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZmMGQ4O1xufVxuLmhhcy1zdWNjZXNzIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICBjb2xvcjogIzNjNzYzZDtcbn1cbi5oYXMtd2FybmluZyAuaGVscC1ibG9jayxcbi5oYXMtd2FybmluZyAuY29udHJvbC1sYWJlbCxcbi5oYXMtd2FybmluZyAucmFkaW8sXG4uaGFzLXdhcm5pbmcgLmNoZWNrYm94LFxuLmhhcy13YXJuaW5nIC5yYWRpby1pbmxpbmUsXG4uaGFzLXdhcm5pbmcgLmNoZWNrYm94LWlubGluZSxcbi5oYXMtd2FybmluZy5yYWRpbyBsYWJlbCxcbi5oYXMtd2FybmluZy5jaGVja2JveCBsYWJlbCxcbi5oYXMtd2FybmluZy5yYWRpby1pbmxpbmUgbGFiZWwsXG4uaGFzLXdhcm5pbmcuY2hlY2tib3gtaW5saW5lIGxhYmVsIHtcbiAgY29sb3I6ICM4YTZkM2I7XG59XG4uaGFzLXdhcm5pbmcgLmZvcm0tY29udHJvbCB7XG4gIGJvcmRlci1jb2xvcjogIzhhNmQzYjtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbn1cbi5oYXMtd2FybmluZyAuZm9ybS1jb250cm9sOmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjNjY1MTJjO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjYzBhMTZiO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggI2MwYTE2Yjtcbn1cbi5oYXMtd2FybmluZyAuaW5wdXQtZ3JvdXAtYWRkb24ge1xuICBjb2xvcjogIzhhNmQzYjtcbiAgYm9yZGVyLWNvbG9yOiAjOGE2ZDNiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzO1xufVxuLmhhcy13YXJuaW5nIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICBjb2xvcjogIzhhNmQzYjtcbn1cbi5oYXMtZXJyb3IgLmhlbHAtYmxvY2ssXG4uaGFzLWVycm9yIC5jb250cm9sLWxhYmVsLFxuLmhhcy1lcnJvciAucmFkaW8sXG4uaGFzLWVycm9yIC5jaGVja2JveCxcbi5oYXMtZXJyb3IgLnJhZGlvLWlubGluZSxcbi5oYXMtZXJyb3IgLmNoZWNrYm94LWlubGluZSxcbi5oYXMtZXJyb3IucmFkaW8gbGFiZWwsXG4uaGFzLWVycm9yLmNoZWNrYm94IGxhYmVsLFxuLmhhcy1lcnJvci5yYWRpby1pbmxpbmUgbGFiZWwsXG4uaGFzLWVycm9yLmNoZWNrYm94LWlubGluZSBsYWJlbCB7XG4gIGNvbG9yOiAjYTk0NDQyO1xufVxuLmhhcy1lcnJvciAuZm9ybS1jb250cm9sIHtcbiAgYm9yZGVyLWNvbG9yOiAjYTk0NDQyO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xufVxuLmhhcy1lcnJvciAuZm9ybS1jb250cm9sOmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjODQzNTM0O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjY2U4NDgzO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggI2NlODQ4Mztcbn1cbi5oYXMtZXJyb3IgLmlucHV0LWdyb3VwLWFkZG9uIHtcbiAgY29sb3I6ICNhOTQ0NDI7XG4gIGJvcmRlci1jb2xvcjogI2E5NDQ0MjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZGVkZTtcbn1cbi5oYXMtZXJyb3IgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIGNvbG9yOiAjYTk0NDQyO1xufVxuLmhhcy1mZWVkYmFjayBsYWJlbCB+IC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB0b3A6IDI1cHg7XG59XG4uaGFzLWZlZWRiYWNrIGxhYmVsLnNyLW9ubHkgfiAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgdG9wOiAwO1xufVxuLmhlbHAtYmxvY2sge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogNXB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICBjb2xvcjogIzczNzM3Mztcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZm9ybS1pbmxpbmUgLmZvcm0tZ3JvdXAge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIH1cbiAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogYXV0bztcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5mb3JtLWlubGluZSAuZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB9XG4gIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAge1xuICAgIGRpc3BsYXk6IGlubGluZS10YWJsZTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWFkZG9uLFxuICAuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1idG4sXG4gIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbCB7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbiAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5mb3JtLWlubGluZSAuY29udHJvbC1sYWJlbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5mb3JtLWlubGluZSAucmFkaW8sXG4gIC5mb3JtLWlubGluZSAuY2hlY2tib3gge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAuZm9ybS1pbmxpbmUgLnJhZGlvIGxhYmVsLFxuICAuZm9ybS1pbmxpbmUgLmNoZWNrYm94IGxhYmVsIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gIH1cbiAgLmZvcm0taW5saW5lIC5yYWRpbyBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gIC5mb3JtLWlubGluZSAuY2hlY2tib3ggaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbiAgLmZvcm0taW5saW5lIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gICAgdG9wOiAwO1xuICB9XG59XG4uZm9ybS1ob3Jpem9udGFsIC5yYWRpbyxcbi5mb3JtLWhvcml6b250YWwgLmNoZWNrYm94LFxuLmZvcm0taG9yaXpvbnRhbCAucmFkaW8taW5saW5lLFxuLmZvcm0taG9yaXpvbnRhbCAuY2hlY2tib3gtaW5saW5lIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZy10b3A6IDdweDtcbn1cbi5mb3JtLWhvcml6b250YWwgLnJhZGlvLFxuLmZvcm0taG9yaXpvbnRhbCAuY2hlY2tib3gge1xuICBtaW4taGVpZ2h0OiAyN3B4O1xufVxuLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cCB7XG4gIG1hcmdpbi1sZWZ0OiAtMTVweDtcbiAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWxhYmVsIHtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHBhZGRpbmctdG9wOiA3cHg7XG4gIH1cbn1cbi5mb3JtLWhvcml6b250YWwgLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgcmlnaHQ6IDE1cHg7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cC1sZyAuY29udHJvbC1sYWJlbCB7XG4gICAgcGFkZGluZy10b3A6IDE0LjMzMzMzM3B4O1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXAtc20gLmNvbnRyb2wtbGFiZWwge1xuICAgIHBhZGRpbmctdG9wOiA2cHg7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICB9XG59XG4uYnRuIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBwYWRkaW5nOiA2cHggMTJweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuLmJ0bjpmb2N1cyxcbi5idG46YWN0aXZlOmZvY3VzLFxuLmJ0bi5hY3RpdmU6Zm9jdXMsXG4uYnRuLmZvY3VzLFxuLmJ0bjphY3RpdmUuZm9jdXMsXG4uYnRuLmFjdGl2ZS5mb2N1cyB7XG4gIG91dGxpbmU6IHRoaW4gZG90dGVkO1xuICBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7XG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xufVxuLmJ0bjpob3Zlcixcbi5idG46Zm9jdXMsXG4uYnRuLmZvY3VzIHtcbiAgY29sb3I6ICMzMzM7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5idG46YWN0aXZlLFxuLmJ0bi5hY3RpdmUge1xuICBvdXRsaW5lOiAwO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTI1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xufVxuLmJ0bi5kaXNhYmxlZCxcbi5idG5bZGlzYWJsZWRdLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4ge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICBvcGFjaXR5OiAwLjY1O1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NjUpO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XG5hLmJ0bi5kaXNhYmxlZCxcbmZpZWxkc2V0W2Rpc2FibGVkXSBhLmJ0biB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLmJ0bi1kZWZhdWx0IHtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogI2NjYztcbn1cbi5idG4tZGVmYXVsdDpmb2N1cyxcbi5idG4tZGVmYXVsdC5mb2N1cyB7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICBib3JkZXItY29sb3I6ICM4YzhjOGM7XG59XG4uYnRuLWRlZmF1bHQ6aG92ZXIge1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcbiAgYm9yZGVyLWNvbG9yOiAjYWRhZGFkO1xufVxuLmJ0bi1kZWZhdWx0OmFjdGl2ZSxcbi5idG4tZGVmYXVsdC5hY3RpdmUsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWRlZmF1bHQge1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcbiAgYm9yZGVyLWNvbG9yOiAjYWRhZGFkO1xufVxuLmJ0bi1kZWZhdWx0OmFjdGl2ZTpob3Zlcixcbi5idG4tZGVmYXVsdC5hY3RpdmU6aG92ZXIsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWRlZmF1bHQ6aG92ZXIsXG4uYnRuLWRlZmF1bHQ6YWN0aXZlOmZvY3VzLFxuLmJ0bi1kZWZhdWx0LmFjdGl2ZTpmb2N1cyxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tZGVmYXVsdDpmb2N1cyxcbi5idG4tZGVmYXVsdDphY3RpdmUuZm9jdXMsXG4uYnRuLWRlZmF1bHQuYWN0aXZlLmZvY3VzLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1kZWZhdWx0LmZvY3VzIHtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkNGQ0ZDQ7XG4gIGJvcmRlci1jb2xvcjogIzhjOGM4Yztcbn1cbi5idG4tZGVmYXVsdDphY3RpdmUsXG4uYnRuLWRlZmF1bHQuYWN0aXZlLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1kZWZhdWx0IHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbn1cbi5idG4tZGVmYXVsdC5kaXNhYmxlZCxcbi5idG4tZGVmYXVsdFtkaXNhYmxlZF0sXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0LFxuLmJ0bi1kZWZhdWx0LmRpc2FibGVkOmhvdmVyLFxuLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXTpob3ZlcixcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQ6aG92ZXIsXG4uYnRuLWRlZmF1bHQuZGlzYWJsZWQ6Zm9jdXMsXG4uYnRuLWRlZmF1bHRbZGlzYWJsZWRdOmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdDpmb2N1cyxcbi5idG4tZGVmYXVsdC5kaXNhYmxlZC5mb2N1cyxcbi5idG4tZGVmYXVsdFtkaXNhYmxlZF0uZm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0LmZvY3VzLFxuLmJ0bi1kZWZhdWx0LmRpc2FibGVkOmFjdGl2ZSxcbi5idG4tZGVmYXVsdFtkaXNhYmxlZF06YWN0aXZlLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdDphY3RpdmUsXG4uYnRuLWRlZmF1bHQuZGlzYWJsZWQuYWN0aXZlLFxuLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXS5hY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0LmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogI2NjYztcbn1cbi5idG4tZGVmYXVsdCAuYmFkZ2Uge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMztcbn1cbi5idG4tcHJpbWFyeSB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3O1xuICBib3JkZXItY29sb3I6ICMyZTZkYTQ7XG59XG4uYnRuLXByaW1hcnk6Zm9jdXMsXG4uYnRuLXByaW1hcnkuZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4NjA5MDtcbiAgYm9yZGVyLWNvbG9yOiAjMTIyYjQwO1xufVxuLmJ0bi1wcmltYXJ5OmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyODYwOTA7XG4gIGJvcmRlci1jb2xvcjogIzIwNGQ3NDtcbn1cbi5idG4tcHJpbWFyeTphY3RpdmUsXG4uYnRuLXByaW1hcnkuYWN0aXZlLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1wcmltYXJ5IHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyODYwOTA7XG4gIGJvcmRlci1jb2xvcjogIzIwNGQ3NDtcbn1cbi5idG4tcHJpbWFyeTphY3RpdmU6aG92ZXIsXG4uYnRuLXByaW1hcnkuYWN0aXZlOmhvdmVyLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1wcmltYXJ5OmhvdmVyLFxuLmJ0bi1wcmltYXJ5OmFjdGl2ZTpmb2N1cyxcbi5idG4tcHJpbWFyeS5hY3RpdmU6Zm9jdXMsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXByaW1hcnk6Zm9jdXMsXG4uYnRuLXByaW1hcnk6YWN0aXZlLmZvY3VzLFxuLmJ0bi1wcmltYXJ5LmFjdGl2ZS5mb2N1cyxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tcHJpbWFyeS5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjA0ZDc0O1xuICBib3JkZXItY29sb3I6ICMxMjJiNDA7XG59XG4uYnRuLXByaW1hcnk6YWN0aXZlLFxuLmJ0bi1wcmltYXJ5LmFjdGl2ZSxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tcHJpbWFyeSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG59XG4uYnRuLXByaW1hcnkuZGlzYWJsZWQsXG4uYnRuLXByaW1hcnlbZGlzYWJsZWRdLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeSxcbi5idG4tcHJpbWFyeS5kaXNhYmxlZDpob3Zlcixcbi5idG4tcHJpbWFyeVtkaXNhYmxlZF06aG92ZXIsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5OmhvdmVyLFxuLmJ0bi1wcmltYXJ5LmRpc2FibGVkOmZvY3VzLFxuLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXTpmb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6Zm9jdXMsXG4uYnRuLXByaW1hcnkuZGlzYWJsZWQuZm9jdXMsXG4uYnRuLXByaW1hcnlbZGlzYWJsZWRdLmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeS5mb2N1cyxcbi5idG4tcHJpbWFyeS5kaXNhYmxlZDphY3RpdmUsXG4uYnRuLXByaW1hcnlbZGlzYWJsZWRdOmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6YWN0aXZlLFxuLmJ0bi1wcmltYXJ5LmRpc2FibGVkLmFjdGl2ZSxcbi5idG4tcHJpbWFyeVtkaXNhYmxlZF0uYWN0aXZlLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeS5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3O1xuICBib3JkZXItY29sb3I6ICMyZTZkYTQ7XG59XG4uYnRuLXByaW1hcnkgLmJhZGdlIHtcbiAgY29sb3I6ICMzMzdhYjc7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4uYnRuLXN1Y2Nlc3Mge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVjYjg1YztcbiAgYm9yZGVyLWNvbG9yOiAjNGNhZTRjO1xufVxuLmJ0bi1zdWNjZXNzOmZvY3VzLFxuLmJ0bi1zdWNjZXNzLmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDlkNDQ7XG4gIGJvcmRlci1jb2xvcjogIzI1NTYyNTtcbn1cbi5idG4tc3VjY2Vzczpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ5ZDQ0O1xuICBib3JkZXItY29sb3I6ICMzOTg0Mzk7XG59XG4uYnRuLXN1Y2Nlc3M6YWN0aXZlLFxuLmJ0bi1zdWNjZXNzLmFjdGl2ZSxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tc3VjY2VzcyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ5ZDQ0O1xuICBib3JkZXItY29sb3I6ICMzOTg0Mzk7XG59XG4uYnRuLXN1Y2Nlc3M6YWN0aXZlOmhvdmVyLFxuLmJ0bi1zdWNjZXNzLmFjdGl2ZTpob3Zlcixcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tc3VjY2Vzczpob3Zlcixcbi5idG4tc3VjY2VzczphY3RpdmU6Zm9jdXMsXG4uYnRuLXN1Y2Nlc3MuYWN0aXZlOmZvY3VzLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1zdWNjZXNzOmZvY3VzLFxuLmJ0bi1zdWNjZXNzOmFjdGl2ZS5mb2N1cyxcbi5idG4tc3VjY2Vzcy5hY3RpdmUuZm9jdXMsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXN1Y2Nlc3MuZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM5ODQzOTtcbiAgYm9yZGVyLWNvbG9yOiAjMjU1NjI1O1xufVxuLmJ0bi1zdWNjZXNzOmFjdGl2ZSxcbi5idG4tc3VjY2Vzcy5hY3RpdmUsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXN1Y2Nlc3Mge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xufVxuLmJ0bi1zdWNjZXNzLmRpc2FibGVkLFxuLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MsXG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQ6aG92ZXIsXG4uYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdOmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzczpob3Zlcixcbi5idG4tc3VjY2Vzcy5kaXNhYmxlZDpmb2N1cyxcbi5idG4tc3VjY2Vzc1tkaXNhYmxlZF06Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmZvY3VzLFxuLmJ0bi1zdWNjZXNzLmRpc2FibGVkLmZvY3VzLFxuLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXS5mb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MuZm9jdXMsXG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQ6YWN0aXZlLFxuLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXTphY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmFjdGl2ZSxcbi5idG4tc3VjY2Vzcy5kaXNhYmxlZC5hY3RpdmUsXG4uYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MuYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVjYjg1YztcbiAgYm9yZGVyLWNvbG9yOiAjNGNhZTRjO1xufVxuLmJ0bi1zdWNjZXNzIC5iYWRnZSB7XG4gIGNvbG9yOiAjNWNiODVjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuLmJ0bi1pbmZvIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1YmMwZGU7XG4gIGJvcmRlci1jb2xvcjogIzQ2YjhkYTtcbn1cbi5idG4taW5mbzpmb2N1cyxcbi5idG4taW5mby5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzFiMGQ1O1xuICBib3JkZXItY29sb3I6ICMxYjZkODU7XG59XG4uYnRuLWluZm86aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMxYjBkNTtcbiAgYm9yZGVyLWNvbG9yOiAjMjY5YWJjO1xufVxuLmJ0bi1pbmZvOmFjdGl2ZSxcbi5idG4taW5mby5hY3RpdmUsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWluZm8ge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMxYjBkNTtcbiAgYm9yZGVyLWNvbG9yOiAjMjY5YWJjO1xufVxuLmJ0bi1pbmZvOmFjdGl2ZTpob3Zlcixcbi5idG4taW5mby5hY3RpdmU6aG92ZXIsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWluZm86aG92ZXIsXG4uYnRuLWluZm86YWN0aXZlOmZvY3VzLFxuLmJ0bi1pbmZvLmFjdGl2ZTpmb2N1cyxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4taW5mbzpmb2N1cyxcbi5idG4taW5mbzphY3RpdmUuZm9jdXMsXG4uYnRuLWluZm8uYWN0aXZlLmZvY3VzLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1pbmZvLmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyNjlhYmM7XG4gIGJvcmRlci1jb2xvcjogIzFiNmQ4NTtcbn1cbi5idG4taW5mbzphY3RpdmUsXG4uYnRuLWluZm8uYWN0aXZlLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1pbmZvIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbn1cbi5idG4taW5mby5kaXNhYmxlZCxcbi5idG4taW5mb1tkaXNhYmxlZF0sXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvLFxuLmJ0bi1pbmZvLmRpc2FibGVkOmhvdmVyLFxuLmJ0bi1pbmZvW2Rpc2FibGVkXTpob3ZlcixcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm86aG92ZXIsXG4uYnRuLWluZm8uZGlzYWJsZWQ6Zm9jdXMsXG4uYnRuLWluZm9bZGlzYWJsZWRdOmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mbzpmb2N1cyxcbi5idG4taW5mby5kaXNhYmxlZC5mb2N1cyxcbi5idG4taW5mb1tkaXNhYmxlZF0uZm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvLmZvY3VzLFxuLmJ0bi1pbmZvLmRpc2FibGVkOmFjdGl2ZSxcbi5idG4taW5mb1tkaXNhYmxlZF06YWN0aXZlLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mbzphY3RpdmUsXG4uYnRuLWluZm8uZGlzYWJsZWQuYWN0aXZlLFxuLmJ0bi1pbmZvW2Rpc2FibGVkXS5hY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvLmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1YmMwZGU7XG4gIGJvcmRlci1jb2xvcjogIzQ2YjhkYTtcbn1cbi5idG4taW5mbyAuYmFkZ2Uge1xuICBjb2xvcjogIzViYzBkZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5idG4td2FybmluZyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBhZDRlO1xuICBib3JkZXItY29sb3I6ICNlZWEyMzY7XG59XG4uYnRuLXdhcm5pbmc6Zm9jdXMsXG4uYnRuLXdhcm5pbmcuZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjOTcxZjtcbiAgYm9yZGVyLWNvbG9yOiAjOTg1ZjBkO1xufVxuLmJ0bi13YXJuaW5nOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlYzk3MWY7XG4gIGJvcmRlci1jb2xvcjogI2Q1ODUxMjtcbn1cbi5idG4td2FybmluZzphY3RpdmUsXG4uYnRuLXdhcm5pbmcuYWN0aXZlLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi13YXJuaW5nIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlYzk3MWY7XG4gIGJvcmRlci1jb2xvcjogI2Q1ODUxMjtcbn1cbi5idG4td2FybmluZzphY3RpdmU6aG92ZXIsXG4uYnRuLXdhcm5pbmcuYWN0aXZlOmhvdmVyLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi13YXJuaW5nOmhvdmVyLFxuLmJ0bi13YXJuaW5nOmFjdGl2ZTpmb2N1cyxcbi5idG4td2FybmluZy5hY3RpdmU6Zm9jdXMsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLXdhcm5pbmc6Zm9jdXMsXG4uYnRuLXdhcm5pbmc6YWN0aXZlLmZvY3VzLFxuLmJ0bi13YXJuaW5nLmFjdGl2ZS5mb2N1cyxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4td2FybmluZy5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDU4NTEyO1xuICBib3JkZXItY29sb3I6ICM5ODVmMGQ7XG59XG4uYnRuLXdhcm5pbmc6YWN0aXZlLFxuLmJ0bi13YXJuaW5nLmFjdGl2ZSxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4td2FybmluZyB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG59XG4uYnRuLXdhcm5pbmcuZGlzYWJsZWQsXG4uYnRuLXdhcm5pbmdbZGlzYWJsZWRdLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZyxcbi5idG4td2FybmluZy5kaXNhYmxlZDpob3Zlcixcbi5idG4td2FybmluZ1tkaXNhYmxlZF06aG92ZXIsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nOmhvdmVyLFxuLmJ0bi13YXJuaW5nLmRpc2FibGVkOmZvY3VzLFxuLmJ0bi13YXJuaW5nW2Rpc2FibGVkXTpmb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6Zm9jdXMsXG4uYnRuLXdhcm5pbmcuZGlzYWJsZWQuZm9jdXMsXG4uYnRuLXdhcm5pbmdbZGlzYWJsZWRdLmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZy5mb2N1cyxcbi5idG4td2FybmluZy5kaXNhYmxlZDphY3RpdmUsXG4uYnRuLXdhcm5pbmdbZGlzYWJsZWRdOmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6YWN0aXZlLFxuLmJ0bi13YXJuaW5nLmRpc2FibGVkLmFjdGl2ZSxcbi5idG4td2FybmluZ1tkaXNhYmxlZF0uYWN0aXZlLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZy5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBhZDRlO1xuICBib3JkZXItY29sb3I6ICNlZWEyMzY7XG59XG4uYnRuLXdhcm5pbmcgLmJhZGdlIHtcbiAgY29sb3I6ICNmMGFkNGU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4uYnRuLWRhbmdlciB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDk1MzRmO1xuICBib3JkZXItY29sb3I6ICNkNDNmM2E7XG59XG4uYnRuLWRhbmdlcjpmb2N1cyxcbi5idG4tZGFuZ2VyLmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjOTMwMmM7XG4gIGJvcmRlci1jb2xvcjogIzc2MWMxOTtcbn1cbi5idG4tZGFuZ2VyOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjOTMwMmM7XG4gIGJvcmRlci1jb2xvcjogI2FjMjkyNTtcbn1cbi5idG4tZGFuZ2VyOmFjdGl2ZSxcbi5idG4tZGFuZ2VyLmFjdGl2ZSxcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tZGFuZ2VyIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjOTMwMmM7XG4gIGJvcmRlci1jb2xvcjogI2FjMjkyNTtcbn1cbi5idG4tZGFuZ2VyOmFjdGl2ZTpob3Zlcixcbi5idG4tZGFuZ2VyLmFjdGl2ZTpob3Zlcixcbi5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZS5idG4tZGFuZ2VyOmhvdmVyLFxuLmJ0bi1kYW5nZXI6YWN0aXZlOmZvY3VzLFxuLmJ0bi1kYW5nZXIuYWN0aXZlOmZvY3VzLFxuLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1kYW5nZXI6Zm9jdXMsXG4uYnRuLWRhbmdlcjphY3RpdmUuZm9jdXMsXG4uYnRuLWRhbmdlci5hY3RpdmUuZm9jdXMsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWRhbmdlci5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWMyOTI1O1xuICBib3JkZXItY29sb3I6ICM3NjFjMTk7XG59XG4uYnRuLWRhbmdlcjphY3RpdmUsXG4uYnRuLWRhbmdlci5hY3RpdmUsXG4ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUuYnRuLWRhbmdlciB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG59XG4uYnRuLWRhbmdlci5kaXNhYmxlZCxcbi5idG4tZGFuZ2VyW2Rpc2FibGVkXSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlcixcbi5idG4tZGFuZ2VyLmRpc2FibGVkOmhvdmVyLFxuLmJ0bi1kYW5nZXJbZGlzYWJsZWRdOmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyOmhvdmVyLFxuLmJ0bi1kYW5nZXIuZGlzYWJsZWQ6Zm9jdXMsXG4uYnRuLWRhbmdlcltkaXNhYmxlZF06Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kYW5nZXI6Zm9jdXMsXG4uYnRuLWRhbmdlci5kaXNhYmxlZC5mb2N1cyxcbi5idG4tZGFuZ2VyW2Rpc2FibGVkXS5mb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlci5mb2N1cyxcbi5idG4tZGFuZ2VyLmRpc2FibGVkOmFjdGl2ZSxcbi5idG4tZGFuZ2VyW2Rpc2FibGVkXTphY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kYW5nZXI6YWN0aXZlLFxuLmJ0bi1kYW5nZXIuZGlzYWJsZWQuYWN0aXZlLFxuLmJ0bi1kYW5nZXJbZGlzYWJsZWRdLmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlci5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDk1MzRmO1xuICBib3JkZXItY29sb3I6ICNkNDNmM2E7XG59XG4uYnRuLWRhbmdlciAuYmFkZ2Uge1xuICBjb2xvcjogI2Q5NTM0ZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5idG4tbGluayB7XG4gIGNvbG9yOiAjMzM3YWI3O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLmJ0bi1saW5rLFxuLmJ0bi1saW5rOmFjdGl2ZSxcbi5idG4tbGluay5hY3RpdmUsXG4uYnRuLWxpbmtbZGlzYWJsZWRdLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tbGluayB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XG4uYnRuLWxpbmssXG4uYnRuLWxpbms6aG92ZXIsXG4uYnRuLWxpbms6Zm9jdXMsXG4uYnRuLWxpbms6YWN0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi5idG4tbGluazpob3Zlcixcbi5idG4tbGluazpmb2N1cyB7XG4gIGNvbG9yOiAjMjM1MjdjO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG4uYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tbGluazpob3Zlcixcbi5idG4tbGlua1tkaXNhYmxlZF06Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICM3Nzc3Nzc7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5idG4tbGcsXG4uYnRuLWdyb3VwLWxnID4gLmJ0biB7XG4gIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzO1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG4uYnRuLXNtLFxuLmJ0bi1ncm91cC1zbSA+IC5idG4ge1xuICBwYWRkaW5nOiA1cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS41O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG4uYnRuLXhzLFxuLmJ0bi1ncm91cC14cyA+IC5idG4ge1xuICBwYWRkaW5nOiAxcHggNXB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cbi5idG4tYmxvY2sge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG59XG4uYnRuLWJsb2NrICsgLmJ0bi1ibG9jayB7XG4gIG1hcmdpbi10b3A6IDVweDtcbn1cbmlucHV0W3R5cGU9XCJzdWJtaXRcIl0uYnRuLWJsb2NrLFxuaW5wdXRbdHlwZT1cInJlc2V0XCJdLmJ0bi1ibG9jayxcbmlucHV0W3R5cGU9XCJidXR0b25cIl0uYnRuLWJsb2NrIHtcbiAgd2lkdGg6IDEwMCU7XG59XG4uZmFkZSB7XG4gIG9wYWNpdHk6IDA7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7XG4gIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGxpbmVhcjtcbn1cbi5mYWRlLmluIHtcbiAgb3BhY2l0eTogMTtcbn1cbi5jb2xsYXBzZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uY29sbGFwc2UuaW4ge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbnRyLmNvbGxhcHNlLmluIHtcbiAgZGlzcGxheTogdGFibGUtcm93O1xufVxudGJvZHkuY29sbGFwc2UuaW4ge1xuICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXA7XG59XG4uY29sbGFwc2luZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAtd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6IGhlaWdodCwgdmlzaWJpbGl0eTtcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogaGVpZ2h0LCB2aXNpYmlsaXR5O1xuICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IDAuMzVzO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjM1cztcbiAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTtcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7XG59XG4uY2FyZXQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIG1hcmdpbi1sZWZ0OiAycHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGJvcmRlci10b3A6IDRweCBkYXNoZWQ7XG4gIGJvcmRlci10b3A6IDRweCBzb2xpZCBcXDk7XG4gIGJvcmRlci1yaWdodDogNHB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHRyYW5zcGFyZW50O1xufVxuLmRyb3B1cCxcbi5kcm9wZG93biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xuICBvdXRsaW5lOiAwO1xufVxuLmRyb3Bkb3duLW1lbnUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTAwJTtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAwMDtcbiAgZGlzcGxheTogbm9uZTtcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1pbi13aWR0aDogMTYwcHg7XG4gIHBhZGRpbmc6IDVweCAwO1xuICBtYXJnaW46IDJweCAwIDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgNnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE3NSk7XG4gIGJveC1zaGFkb3c6IDAgNnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE3NSk7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG59XG4uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0IHtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IGF1dG87XG59XG4uZHJvcGRvd24tbWVudSAuZGl2aWRlciB7XG4gIGhlaWdodDogMXB4O1xuICBtYXJnaW46IDlweCAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTVlNWU1O1xufVxuLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogM3B4IDIwcHg7XG4gIGNsZWFyOiBib3RoO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgY29sb3I6ICMzMzMzMzM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4uZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3Zlcixcbi5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogIzI2MjYyNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbn1cbi5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEsXG4uZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIG91dGxpbmU6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7XG59XG4uZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGEsXG4uZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4uZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICBjb2xvcjogIzc3Nzc3Nztcbn1cbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpob3Zlcixcbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQgPSBmYWxzZSk7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ub3BlbiA+IC5kcm9wZG93bi1tZW51IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ub3BlbiA+IGEge1xuICBvdXRsaW5lOiAwO1xufVxuLmRyb3Bkb3duLW1lbnUtcmlnaHQge1xuICBsZWZ0OiBhdXRvO1xuICByaWdodDogMDtcbn1cbi5kcm9wZG93bi1tZW51LWxlZnQge1xuICBsZWZ0OiAwO1xuICByaWdodDogYXV0bztcbn1cbi5kcm9wZG93bi1oZWFkZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogM3B4IDIwcHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG4gIGNvbG9yOiAjNzc3Nzc3O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuLmRyb3Bkb3duLWJhY2tkcm9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICB0b3A6IDA7XG4gIHotaW5kZXg6IDk5MDtcbn1cbi5wdWxsLXJpZ2h0ID4gLmRyb3Bkb3duLW1lbnUge1xuICByaWdodDogMDtcbiAgbGVmdDogYXV0bztcbn1cbi5kcm9wdXAgLmNhcmV0LFxuLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5jYXJldCB7XG4gIGJvcmRlci10b3A6IDA7XG4gIGJvcmRlci1ib3R0b206IDRweCBkYXNoZWQ7XG4gIGJvcmRlci1ib3R0b206IDRweCBzb2xpZCBcXDk7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG4uZHJvcHVwIC5kcm9wZG93bi1tZW51LFxuLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHtcbiAgdG9wOiBhdXRvO1xuICBib3R0b206IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDJweDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2YmFyLXJpZ2h0IC5kcm9wZG93bi1tZW51IHtcbiAgICBsZWZ0OiBhdXRvO1xuICAgIHJpZ2h0OiAwO1xuICB9XG4gIC5uYXZiYXItcmlnaHQgLmRyb3Bkb3duLW1lbnUtbGVmdCB7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogYXV0bztcbiAgfVxufVxuLmJ0bi1ncm91cCxcbi5idG4tZ3JvdXAtdmVydGljYWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLmJ0bi1ncm91cCA+IC5idG46aG92ZXIsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpob3Zlcixcbi5idG4tZ3JvdXAgPiAuYnRuOmZvY3VzLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46Zm9jdXMsXG4uYnRuLWdyb3VwID4gLmJ0bjphY3RpdmUsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjphY3RpdmUsXG4uYnRuLWdyb3VwID4gLmJ0bi5hY3RpdmUsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi5hY3RpdmUge1xuICB6LWluZGV4OiAyO1xufVxuLmJ0bi1ncm91cCAuYnRuICsgLmJ0bixcbi5idG4tZ3JvdXAgLmJ0biArIC5idG4tZ3JvdXAsXG4uYnRuLWdyb3VwIC5idG4tZ3JvdXAgKyAuYnRuLFxuLmJ0bi1ncm91cCAuYnRuLWdyb3VwICsgLmJ0bi1ncm91cCB7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuLmJ0bi10b29sYmFyIHtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG59XG4uYnRuLXRvb2xiYXIgLmJ0bixcbi5idG4tdG9vbGJhciAuYnRuLWdyb3VwLFxuLmJ0bi10b29sYmFyIC5pbnB1dC1ncm91cCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLmJ0bi10b29sYmFyID4gLmJ0bixcbi5idG4tdG9vbGJhciA+IC5idG4tZ3JvdXAsXG4uYnRuLXRvb2xiYXIgPiAuaW5wdXQtZ3JvdXAge1xuICBtYXJnaW4tbGVmdDogNXB4O1xufVxuLmJ0bi1ncm91cCA+IC5idG46bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSkge1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLmJ0bi1ncm91cCA+IC5idG46Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xufVxuLmJ0bi1ncm91cCA+IC5idG46bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSxcbi5idG4tZ3JvdXAgPiAuZHJvcGRvd24tdG9nZ2xlOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpID4gLmJ0bjpsYXN0LWNoaWxkLFxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSA+IC5kcm9wZG93bi10b2dnbGUge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwIC5kcm9wZG93bi10b2dnbGU6YWN0aXZlLFxuLmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGUge1xuICBvdXRsaW5lOiAwO1xufVxuLmJ0bi1ncm91cCA+IC5idG4gKyAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWxnICsgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIHBhZGRpbmctbGVmdDogMTJweDtcbiAgcGFkZGluZy1yaWdodDogMTJweDtcbn1cbi5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyNSk7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTI1KTtcbn1cbi5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1saW5rIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xuICBib3gtc2hhZG93OiBub25lO1xufVxuLmJ0biAuY2FyZXQge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cbi5idG4tbGcgLmNhcmV0IHtcbiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDA7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG59XG4uZHJvcHVwIC5idG4tbGcgLmNhcmV0IHtcbiAgYm9yZGVyLXdpZHRoOiAwIDVweCA1cHg7XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bixcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAgPiAuYnRuIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZsb2F0OiBub25lO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAgPiAuYnRuIHtcbiAgZmxvYXQ6IG5vbmU7XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0biArIC5idG4sXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0biArIC5idG4tZ3JvdXAsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cCArIC5idG4sXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cCArIC5idG4tZ3JvdXAge1xuICBtYXJnaW4tdG9wOiAtMXB4O1xuICBtYXJnaW4tbGVmdDogMDtcbn1cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkge1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xufVxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpID4gLmJ0bjpsYXN0LWNoaWxkLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSA+IC5kcm9wZG93bi10b2dnbGUge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbn1cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuOmZpcnN0LWNoaWxkIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwLWp1c3RpZmllZCB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICB3aWR0aDogMTAwJTtcbiAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbn1cbi5idG4tZ3JvdXAtanVzdGlmaWVkID4gLmJ0bixcbi5idG4tZ3JvdXAtanVzdGlmaWVkID4gLmJ0bi1ncm91cCB7XG4gIGZsb2F0OiBub25lO1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICB3aWR0aDogMSU7XG59XG4uYnRuLWdyb3VwLWp1c3RpZmllZCA+IC5idG4tZ3JvdXAgLmJ0biB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IHtcbiAgbGVmdDogYXV0bztcbn1cbltkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIl0gPiAuYnRuIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbltkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIl0gPiAuYnRuLWdyb3VwID4gLmJ0biBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG5bZGF0YS10b2dnbGU9XCJidXR0b25zXCJdID4gLmJ0biBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG5bZGF0YS10b2dnbGU9XCJidXR0b25zXCJdID4gLmJ0bi1ncm91cCA+IC5idG4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbi5pbnB1dC1ncm91cCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogdGFibGU7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XG59XG4uaW5wdXQtZ3JvdXBbY2xhc3MqPVwiY29sLVwiXSB7XG4gIGZsb2F0OiBub25lO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG59XG4uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMjtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbCxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBwYWRkaW5nOiAxMHB4IDE2cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMztcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xufVxuc2VsZWN0LmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbCxcbnNlbGVjdC5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1hZGRvbixcbnNlbGVjdC5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBsaW5lLWhlaWdodDogNDZweDtcbn1cbnRleHRhcmVhLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbCxcbnRleHRhcmVhLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWFkZG9uLFxudGV4dGFyZWEuaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0bixcbnNlbGVjdFttdWx0aXBsZV0uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLFxuc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1hZGRvbixcbnNlbGVjdFttdWx0aXBsZV0uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biB7XG4gIGhlaWdodDogYXV0bztcbn1cbi5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biB7XG4gIGhlaWdodDogMzBweDtcbiAgcGFkZGluZzogNXB4IDEwcHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuc2VsZWN0LmlucHV0LWdyb3VwLXNtID4gLmZvcm0tY29udHJvbCxcbnNlbGVjdC5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1hZGRvbixcbnNlbGVjdC5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICBsaW5lLWhlaWdodDogMzBweDtcbn1cbnRleHRhcmVhLmlucHV0LWdyb3VwLXNtID4gLmZvcm0tY29udHJvbCxcbnRleHRhcmVhLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFkZG9uLFxudGV4dGFyZWEuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0bixcbnNlbGVjdFttdWx0aXBsZV0uaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sLFxuc2VsZWN0W211bHRpcGxlXS5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1hZGRvbixcbnNlbGVjdFttdWx0aXBsZV0uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biB7XG4gIGhlaWdodDogYXV0bztcbn1cbi5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1idG4sXG4uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbCB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG59XG4uaW5wdXQtZ3JvdXAtYWRkb246bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSxcbi5pbnB1dC1ncm91cC1idG46bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSxcbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkge1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWJ0biB7XG4gIHdpZHRoOiAxJTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5pbnB1dC1ncm91cC1hZGRvbiB7XG4gIHBhZGRpbmc6IDZweCAxMnB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogIzU1NTU1NTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4uaW5wdXQtZ3JvdXAtYWRkb24uaW5wdXQtc20ge1xuICBwYWRkaW5nOiA1cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG4uaW5wdXQtZ3JvdXAtYWRkb24uaW5wdXQtbGcge1xuICBwYWRkaW5nOiAxMHB4IDE2cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xufVxuLmlucHV0LWdyb3VwLWFkZG9uIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbi5pbnB1dC1ncm91cC1hZGRvbiBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2w6Zmlyc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYWRkb246Zmlyc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLWdyb3VwID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuZHJvcGRvd24tdG9nZ2xlLFxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bjpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4tZ3JvdXA6bm90KDpsYXN0LWNoaWxkKSA+IC5idG4ge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG59XG4uaW5wdXQtZ3JvdXAtYWRkb246Zmlyc3QtY2hpbGQge1xuICBib3JkZXItcmlnaHQ6IDA7XG59XG4uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpsYXN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWFkZG9uOmxhc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLFxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bi1ncm91cCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuZHJvcGRvd24tdG9nZ2xlLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG46bm90KDpmaXJzdC1jaGlsZCksXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG4ge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xufVxuLmlucHV0LWdyb3VwLWFkZG9uOmxhc3QtY2hpbGQge1xuICBib3JkZXItbGVmdDogMDtcbn1cbi5pbnB1dC1ncm91cC1idG4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogMDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbi5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmlucHV0LWdyb3VwLWJ0biA+IC5idG4gKyAuYnRuIHtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG59XG4uaW5wdXQtZ3JvdXAtYnRuID4gLmJ0bjpob3Zlcixcbi5pbnB1dC1ncm91cC1idG4gPiAuYnRuOmZvY3VzLFxuLmlucHV0LWdyb3VwLWJ0biA+IC5idG46YWN0aXZlIHtcbiAgei1pbmRleDogMjtcbn1cbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4tZ3JvdXAge1xuICBtYXJnaW4tcmlnaHQ6IC0xcHg7XG59XG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLFxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bi1ncm91cCB7XG4gIHotaW5kZXg6IDI7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuLm5hdiB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbi5uYXYgPiBsaSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ubmF2ID4gbGkgPiBhIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMTBweCAxNXB4O1xufVxuLm5hdiA+IGxpID4gYTpob3Zlcixcbi5uYXYgPiBsaSA+IGE6Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7XG59XG4ubmF2ID4gbGkuZGlzYWJsZWQgPiBhIHtcbiAgY29sb3I6ICM3Nzc3Nzc7XG59XG4ubmF2ID4gbGkuZGlzYWJsZWQgPiBhOmhvdmVyLFxuLm5hdiA+IGxpLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjNzc3Nzc3O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLm5hdiAub3BlbiA+IGEsXG4ubmF2IC5vcGVuID4gYTpob3Zlcixcbi5uYXYgLm9wZW4gPiBhOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTtcbiAgYm9yZGVyLWNvbG9yOiAjMzM3YWI3O1xufVxuLm5hdiAubmF2LWRpdmlkZXIge1xuICBoZWlnaHQ6IDFweDtcbiAgbWFyZ2luOiA5cHggMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1ZTVlNTtcbn1cbi5uYXYgPiBsaSA+IGEgPiBpbWcge1xuICBtYXgtd2lkdGg6IG5vbmU7XG59XG4ubmF2LXRhYnMge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbn1cbi5uYXYtdGFicyA+IGxpIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1hcmdpbi1ib3R0b206IC0xcHg7XG59XG4ubmF2LXRhYnMgPiBsaSA+IGEge1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDtcbn1cbi5uYXYtdGFicyA+IGxpID4gYTpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogI2VlZWVlZSAjZWVlZWVlICNkZGQ7XG59XG4ubmF2LXRhYnMgPiBsaS5hY3RpdmUgPiBhLFxuLm5hdi10YWJzID4gbGkuYWN0aXZlID4gYTpob3Zlcixcbi5uYXYtdGFicyA+IGxpLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICBjb2xvcjogIzU1NTU1NTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cbi5uYXYtdGFicy5uYXYtanVzdGlmaWVkIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1ib3R0b206IDA7XG59XG4ubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IGxpIHtcbiAgZmxvYXQ6IG5vbmU7XG59XG4ubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IGxpID4gYSB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xufVxuLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUge1xuICB0b3A6IGF1dG87XG4gIGxlZnQ6IGF1dG87XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICB3aWR0aDogMSU7XG4gIH1cbiAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cbi5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkgPiBhIHtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4ubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhLFxuLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpob3Zlcixcbi5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkgPiBhIHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDtcbiAgfVxuICAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhLFxuICAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuICAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmO1xuICB9XG59XG4ubmF2LXBpbGxzID4gbGkge1xuICBmbG9hdDogbGVmdDtcbn1cbi5uYXYtcGlsbHMgPiBsaSA+IGEge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4ubmF2LXBpbGxzID4gbGkgKyBsaSB7XG4gIG1hcmdpbi1sZWZ0OiAycHg7XG59XG4ubmF2LXBpbGxzID4gbGkuYWN0aXZlID4gYSxcbi5uYXYtcGlsbHMgPiBsaS5hY3RpdmUgPiBhOmhvdmVyLFxuLm5hdi1waWxscyA+IGxpLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzN2FiNztcbn1cbi5uYXYtc3RhY2tlZCA+IGxpIHtcbiAgZmxvYXQ6IG5vbmU7XG59XG4ubmF2LXN0YWNrZWQgPiBsaSArIGxpIHtcbiAgbWFyZ2luLXRvcDogMnB4O1xuICBtYXJnaW4tbGVmdDogMDtcbn1cbi5uYXYtanVzdGlmaWVkIHtcbiAgd2lkdGg6IDEwMCU7XG59XG4ubmF2LWp1c3RpZmllZCA+IGxpIHtcbiAgZmxvYXQ6IG5vbmU7XG59XG4ubmF2LWp1c3RpZmllZCA+IGxpID4gYSB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xufVxuLm5hdi1qdXN0aWZpZWQgPiAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUge1xuICB0b3A6IGF1dG87XG4gIGxlZnQ6IGF1dG87XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdi1qdXN0aWZpZWQgPiBsaSB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICB3aWR0aDogMSU7XG4gIH1cbiAgLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cbi5uYXYtdGFicy1qdXN0aWZpZWQge1xuICBib3JkZXItYm90dG9tOiAwO1xufVxuLm5hdi10YWJzLWp1c3RpZmllZCA+IGxpID4gYSB7XG4gIG1hcmdpbi1yaWdodDogMDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhLFxuLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2LXRhYnMtanVzdGlmaWVkID4gbGkgPiBhIHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDtcbiAgfVxuICAubmF2LXRhYnMtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGEsXG4gIC5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpob3ZlcixcbiAgLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmO1xuICB9XG59XG4udGFiLWNvbnRlbnQgPiAudGFiLXBhbmUge1xuICBkaXNwbGF5OiBub25lO1xufVxuLnRhYi1jb250ZW50ID4gLmFjdGl2ZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLm5hdi10YWJzIC5kcm9wZG93bi1tZW51IHtcbiAgbWFyZ2luLXRvcDogLTFweDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG59XG4ubmF2YmFyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiA1MHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2YmFyIHtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2YmFyLWhlYWRlciB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbn1cbi5uYXZiYXItY29sbGFwc2Uge1xuICBvdmVyZmxvdy14OiB2aXNpYmxlO1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cbi5uYXZiYXItY29sbGFwc2UuaW4ge1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXItY29sbGFwc2Uge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgfVxuICAubmF2YmFyLWNvbGxhcHNlLmNvbGxhcHNlIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm5hdmJhci1jb2xsYXBzZS5pbiB7XG4gICAgb3ZlcmZsb3cteTogdmlzaWJsZTtcbiAgfVxuICAubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWNvbGxhcHNlLFxuICAubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1jb2xsYXBzZSxcbiAgLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1jb2xsYXBzZSB7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gIH1cbn1cbi5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItY29sbGFwc2UsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWNvbGxhcHNlIHtcbiAgbWF4LWhlaWdodDogMzQwcHg7XG59XG5AbWVkaWEgKG1heC1kZXZpY2Utd2lkdGg6IDQ4MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgLm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1jb2xsYXBzZSxcbiAgLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1jb2xsYXBzZSB7XG4gICAgbWF4LWhlaWdodDogMjAwcHg7XG4gIH1cbn1cbi5jb250YWluZXIgPiAubmF2YmFyLWhlYWRlcixcbi5jb250YWluZXItZmx1aWQgPiAubmF2YmFyLWhlYWRlcixcbi5jb250YWluZXIgPiAubmF2YmFyLWNvbGxhcHNlLFxuLmNvbnRhaW5lci1mbHVpZCA+IC5uYXZiYXItY29sbGFwc2Uge1xuICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xuICBtYXJnaW4tbGVmdDogLTE1cHg7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNvbnRhaW5lciA+IC5uYXZiYXItaGVhZGVyLFxuICAuY29udGFpbmVyLWZsdWlkID4gLm5hdmJhci1oZWFkZXIsXG4gIC5jb250YWluZXIgPiAubmF2YmFyLWNvbGxhcHNlLFxuICAuY29udGFpbmVyLWZsdWlkID4gLm5hdmJhci1jb2xsYXBzZSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICB9XG59XG4ubmF2YmFyLXN0YXRpYy10b3Age1xuICB6LWluZGV4OiAxMDAwO1xuICBib3JkZXItd2lkdGg6IDAgMCAxcHg7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdmJhci1zdGF0aWMtdG9wIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG59XG4ubmF2YmFyLWZpeGVkLXRvcCxcbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICByaWdodDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAzMDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2YmFyLWZpeGVkLXRvcCxcbiAgLm5hdmJhci1maXhlZC1ib3R0b20ge1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gIH1cbn1cbi5uYXZiYXItZml4ZWQtdG9wIHtcbiAgdG9wOiAwO1xuICBib3JkZXItd2lkdGg6IDAgMCAxcHg7XG59XG4ubmF2YmFyLWZpeGVkLWJvdHRvbSB7XG4gIGJvdHRvbTogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgYm9yZGVyLXdpZHRoOiAxcHggMCAwO1xufVxuLm5hdmJhci1icmFuZCB7XG4gIGZsb2F0OiBsZWZ0O1xuICBwYWRkaW5nOiAxNXB4IDE1cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGhlaWdodDogNTBweDtcbn1cbi5uYXZiYXItYnJhbmQ6aG92ZXIsXG4ubmF2YmFyLWJyYW5kOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLm5hdmJhci1icmFuZCA+IGltZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXIgPiAuY29udGFpbmVyIC5uYXZiYXItYnJhbmQsXG4gIC5uYXZiYXIgPiAuY29udGFpbmVyLWZsdWlkIC5uYXZiYXItYnJhbmQge1xuICAgIG1hcmdpbi1sZWZ0OiAtMTVweDtcbiAgfVxufVxuLm5hdmJhci10b2dnbGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsb2F0OiByaWdodDtcbiAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xuICBwYWRkaW5nOiA5cHggMTBweDtcbiAgbWFyZ2luLXRvcDogOHB4O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLm5hdmJhci10b2dnbGU6Zm9jdXMge1xuICBvdXRsaW5lOiAwO1xufVxuLm5hdmJhci10b2dnbGUgLmljb24tYmFyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAyMnB4O1xuICBoZWlnaHQ6IDJweDtcbiAgYm9yZGVyLXJhZGl1czogMXB4O1xufVxuLm5hdmJhci10b2dnbGUgLmljb24tYmFyICsgLmljb24tYmFyIHtcbiAgbWFyZ2luLXRvcDogNHB4O1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXItdG9nZ2xlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4ubmF2YmFyLW5hdiB7XG4gIG1hcmdpbjogNy41cHggLTE1cHg7XG59XG4ubmF2YmFyLW5hdiA+IGxpID4gYSB7XG4gIHBhZGRpbmctdG9wOiAxMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTBweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUge1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IDA7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgfVxuICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYSxcbiAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWhlYWRlciB7XG4gICAgcGFkZGluZzogNXB4IDE1cHggNXB4IDI1cHg7XG4gIH1cbiAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEge1xuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICB9XG4gIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmhvdmVyLFxuICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXItbmF2IHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW46IDA7XG4gIH1cbiAgLm5hdmJhci1uYXYgPiBsaSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbiAgLm5hdmJhci1uYXYgPiBsaSA+IGEge1xuICAgIHBhZGRpbmctdG9wOiAxNXB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICB9XG59XG4ubmF2YmFyLWZvcm0ge1xuICBtYXJnaW4tbGVmdDogLTE1cHg7XG4gIG1hcmdpbi1yaWdodDogLTE1cHg7XG4gIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSksIDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSwgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG4gIG1hcmdpbi10b3A6IDhweDtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXItZm9ybSAuZm9ybS1ncm91cCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAubmF2YmFyLWZvcm0gLmZvcm0tY29udHJvbCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIH1cbiAgLm5hdmJhci1mb3JtIC5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIH1cbiAgLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCB7XG4gICAgZGlzcGxheTogaW5saW5lLXRhYmxlO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIH1cbiAgLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYWRkb24sXG4gIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWJ0bixcbiAgLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sIHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxuICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwID4gLmZvcm0tY29udHJvbCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgLm5hdmJhci1mb3JtIC5jb250cm9sLWxhYmVsIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIH1cbiAgLm5hdmJhci1mb3JtIC5yYWRpbyxcbiAgLm5hdmJhci1mb3JtIC5jaGVja2JveCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5uYXZiYXItZm9ybSAucmFkaW8gbGFiZWwsXG4gIC5uYXZiYXItZm9ybSAuY2hlY2tib3ggbGFiZWwge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgfVxuICAubmF2YmFyLWZvcm0gLnJhZGlvIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbiAgLm5hdmJhci1mb3JtIC5jaGVja2JveCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxuICAubmF2YmFyLWZvcm0gLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICB0b3A6IDA7XG4gIH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAubmF2YmFyLWZvcm0gLmZvcm0tZ3JvdXAge1xuICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgfVxuICAubmF2YmFyLWZvcm0gLmZvcm0tZ3JvdXA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXItZm9ybSB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgfVxufVxuLm5hdmJhci1uYXYgPiBsaSA+IC5kcm9wZG93bi1tZW51IHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG59XG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLW5hdiA+IGxpID4gLmRyb3Bkb3duLW1lbnUge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xufVxuLm5hdmJhci1idG4ge1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbn1cbi5uYXZiYXItYnRuLmJ0bi1zbSB7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG4ubmF2YmFyLWJ0bi5idG4teHMge1xuICBtYXJnaW4tdG9wOiAxNHB4O1xuICBtYXJnaW4tYm90dG9tOiAxNHB4O1xufVxuLm5hdmJhci10ZXh0IHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbiAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2YmFyLXRleHQge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICAgIG1hcmdpbi1yaWdodDogMTVweDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXItbGVmdCB7XG4gICAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcbiAgfVxuICAubmF2YmFyLXJpZ2h0IHtcbiAgICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xuICB9XG4gIC5uYXZiYXItcmlnaHQgfiAubmF2YmFyLXJpZ2h0IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gIH1cbn1cbi5uYXZiYXItZGVmYXVsdCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7XG4gIGJvcmRlci1jb2xvcjogI2U3ZTdlNztcbn1cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kIHtcbiAgY29sb3I6ICM3Nzc7XG59XG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZDpob3Zlcixcbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kOmZvY3VzIHtcbiAgY29sb3I6ICM1ZTVlNWU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdGV4dCB7XG4gIGNvbG9yOiAjNzc3O1xufVxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gbGkgPiBhIHtcbiAgY29sb3I6ICM3Nzc7XG59XG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiBsaSA+IGE6aG92ZXIsXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiBsaSA+IGE6Zm9jdXMge1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuYWN0aXZlID4gYSxcbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICBjb2xvcjogIzU1NTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U3ZTdlNztcbn1cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5kaXNhYmxlZCA+IGEsXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjY2NjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZSB7XG4gIGJvcmRlci1jb2xvcjogI2RkZDtcbn1cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZTpob3Zlcixcbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZGQ7XG59XG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10b2dnbGUgLmljb24tYmFyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzg4ODtcbn1cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWNvbGxhcHNlLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItZm9ybSB7XG4gIGJvcmRlci1jb2xvcjogI2U3ZTdlNztcbn1cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5vcGVuID4gYSxcbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpob3Zlcixcbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlN2U3ZTc7XG4gIGNvbG9yOiAjNTU1O1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYSB7XG4gICAgY29sb3I6ICM3Nzc7XG4gIH1cbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmhvdmVyLFxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMge1xuICAgIGNvbG9yOiAjMzMzO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhLFxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpob3ZlcixcbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICAgIGNvbG9yOiAjNTU1O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlN2U3ZTc7XG4gIH1cbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYSxcbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpob3ZlcixcbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gICAgY29sb3I6ICNjY2M7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbn1cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWxpbmsge1xuICBjb2xvcjogIzc3Nztcbn1cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWxpbms6aG92ZXIge1xuICBjb2xvcjogIzMzMztcbn1cbi5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbmsge1xuICBjb2xvcjogIzc3Nztcbn1cbi5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbms6aG92ZXIsXG4ubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICMzMzM7XG59XG4ubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rW2Rpc2FibGVkXTpob3ZlcixcbmZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmhvdmVyLFxuLm5hdmJhci1kZWZhdWx0IC5idG4tbGlua1tkaXNhYmxlZF06Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLm5hdmJhci1kZWZhdWx0IC5idG4tbGluazpmb2N1cyB7XG4gIGNvbG9yOiAjY2NjO1xufVxuLm5hdmJhci1pbnZlcnNlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjtcbiAgYm9yZGVyLWNvbG9yOiAjMDgwODA4O1xufVxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQge1xuICBjb2xvcjogIzlkOWQ5ZDtcbn1cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kOmhvdmVyLFxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQ6Zm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci10ZXh0IHtcbiAgY29sb3I6ICM5ZDlkOWQ7XG59XG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiBsaSA+IGEge1xuICBjb2xvcjogIzlkOWQ5ZDtcbn1cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IGxpID4gYTpob3Zlcixcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IGxpID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5hY3RpdmUgPiBhLFxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDgwODA4O1xufVxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYSxcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICM0NDQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdG9nZ2xlIHtcbiAgYm9yZGVyLWNvbG9yOiAjMzMzO1xufVxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdG9nZ2xlOmhvdmVyLFxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdG9nZ2xlOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMztcbn1cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItY29sbGFwc2UsXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1mb3JtIHtcbiAgYm9yZGVyLWNvbG9yOiAjMTAxMDEwO1xufVxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhLFxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhOmhvdmVyLFxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzA4MDgwODtcbiAgY29sb3I6ICNmZmY7XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRyb3Bkb3duLWhlYWRlciB7XG4gICAgYm9yZGVyLWNvbG9yOiAjMDgwODA4O1xuICB9XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSAuZGl2aWRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzA4MDgwODtcbiAgfVxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEge1xuICAgIGNvbG9yOiAjOWQ5ZDlkO1xuICB9XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlcixcbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSxcbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDgwODA4O1xuICB9XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGEsXG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICAgIGNvbG9yOiAjNDQ0O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG59XG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5rIHtcbiAgY29sb3I6ICM5ZDlkOWQ7XG59XG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5rOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG59XG4ubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rIHtcbiAgY29sb3I6ICM5ZDlkOWQ7XG59XG4ubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmhvdmVyLFxuLm5hdmJhci1pbnZlcnNlIC5idG4tbGluazpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm5hdmJhci1pbnZlcnNlIC5idG4tbGlua1tkaXNhYmxlZF06aG92ZXIsXG5maWVsZHNldFtkaXNhYmxlZF0gLm5hdmJhci1pbnZlcnNlIC5idG4tbGluazpob3Zlcixcbi5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbmtbZGlzYWJsZWRdOmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbms6Zm9jdXMge1xuICBjb2xvcjogIzQ0NDtcbn1cbi5icmVhZGNydW1iIHtcbiAgcGFkZGluZzogOHB4IDE1cHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cbi5icmVhZGNydW1iID4gbGkge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4uYnJlYWRjcnVtYiA+IGxpICsgbGk6YmVmb3JlIHtcbiAgY29udGVudDogXCIvXFwwMGEwXCI7XG4gIHBhZGRpbmc6IDAgNXB4O1xuICBjb2xvcjogI2NjYztcbn1cbi5icmVhZGNydW1iID4gLmFjdGl2ZSB7XG4gIGNvbG9yOiAjNzc3Nzc3O1xufVxuLnBhZ2luYXRpb24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbWFyZ2luOiAyMHB4IDA7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cbi5wYWdpbmF0aW9uID4gbGkge1xuICBkaXNwbGF5OiBpbmxpbmU7XG59XG4ucGFnaW5hdGlvbiA+IGxpID4gYSxcbi5wYWdpbmF0aW9uID4gbGkgPiBzcGFuIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbG9hdDogbGVmdDtcbiAgcGFkZGluZzogNnB4IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjMzM3YWI3O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cbi5wYWdpbmF0aW9uID4gbGk6Zmlyc3QtY2hpbGQgPiBhLFxuLnBhZ2luYXRpb24gPiBsaTpmaXJzdC1jaGlsZCA+IHNwYW4ge1xuICBtYXJnaW4tbGVmdDogMDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XG59XG4ucGFnaW5hdGlvbiA+IGxpOmxhc3QtY2hpbGQgPiBhLFxuLnBhZ2luYXRpb24gPiBsaTpsYXN0LWNoaWxkID4gc3BhbiB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XG59XG4ucGFnaW5hdGlvbiA+IGxpID4gYTpob3Zlcixcbi5wYWdpbmF0aW9uID4gbGkgPiBzcGFuOmhvdmVyLFxuLnBhZ2luYXRpb24gPiBsaSA+IGE6Zm9jdXMsXG4ucGFnaW5hdGlvbiA+IGxpID4gc3Bhbjpmb2N1cyB7XG4gIHotaW5kZXg6IDM7XG4gIGNvbG9yOiAjMjM1MjdjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xuICBib3JkZXItY29sb3I6ICNkZGQ7XG59XG4ucGFnaW5hdGlvbiA+IC5hY3RpdmUgPiBhLFxuLnBhZ2luYXRpb24gPiAuYWN0aXZlID4gc3Bhbixcbi5wYWdpbmF0aW9uID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4ucGFnaW5hdGlvbiA+IC5hY3RpdmUgPiBzcGFuOmhvdmVyLFxuLnBhZ2luYXRpb24gPiAuYWN0aXZlID4gYTpmb2N1cyxcbi5wYWdpbmF0aW9uID4gLmFjdGl2ZSA+IHNwYW46Zm9jdXMge1xuICB6LWluZGV4OiAyO1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzN2FiNztcbiAgYm9yZGVyLWNvbG9yOiAjMzM3YWI3O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4ucGFnaW5hdGlvbiA+IC5kaXNhYmxlZCA+IHNwYW4sXG4ucGFnaW5hdGlvbiA+IC5kaXNhYmxlZCA+IHNwYW46aG92ZXIsXG4ucGFnaW5hdGlvbiA+IC5kaXNhYmxlZCA+IHNwYW46Zm9jdXMsXG4ucGFnaW5hdGlvbiA+IC5kaXNhYmxlZCA+IGEsXG4ucGFnaW5hdGlvbiA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4ucGFnaW5hdGlvbiA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICBjb2xvcjogIzc3Nzc3NztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWNvbG9yOiAjZGRkO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLnBhZ2luYXRpb24tbGcgPiBsaSA+IGEsXG4ucGFnaW5hdGlvbi1sZyA+IGxpID4gc3BhbiB7XG4gIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzO1xufVxuLnBhZ2luYXRpb24tbGcgPiBsaTpmaXJzdC1jaGlsZCA+IGEsXG4ucGFnaW5hdGlvbi1sZyA+IGxpOmZpcnN0LWNoaWxkID4gc3BhbiB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDZweDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNnB4O1xufVxuLnBhZ2luYXRpb24tbGcgPiBsaTpsYXN0LWNoaWxkID4gYSxcbi5wYWdpbmF0aW9uLWxnID4gbGk6bGFzdC1jaGlsZCA+IHNwYW4ge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNnB4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNnB4O1xufVxuLnBhZ2luYXRpb24tc20gPiBsaSA+IGEsXG4ucGFnaW5hdGlvbi1zbSA+IGxpID4gc3BhbiB7XG4gIHBhZGRpbmc6IDVweCAxMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG4ucGFnaW5hdGlvbi1zbSA+IGxpOmZpcnN0LWNoaWxkID4gYSxcbi5wYWdpbmF0aW9uLXNtID4gbGk6Zmlyc3QtY2hpbGQgPiBzcGFuIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG59XG4ucGFnaW5hdGlvbi1zbSA+IGxpOmxhc3QtY2hpbGQgPiBhLFxuLnBhZ2luYXRpb24tc20gPiBsaTpsYXN0LWNoaWxkID4gc3BhbiB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7XG59XG4ucGFnZXIge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIG1hcmdpbjogMjBweCAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ucGFnZXIgbGkge1xuICBkaXNwbGF5OiBpbmxpbmU7XG59XG4ucGFnZXIgbGkgPiBhLFxuLnBhZ2VyIGxpID4gc3BhbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogNXB4IDE0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1yYWRpdXM6IDE1cHg7XG59XG4ucGFnZXIgbGkgPiBhOmhvdmVyLFxuLnBhZ2VyIGxpID4gYTpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTtcbn1cbi5wYWdlciAubmV4dCA+IGEsXG4ucGFnZXIgLm5leHQgPiBzcGFuIHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuLnBhZ2VyIC5wcmV2aW91cyA+IGEsXG4ucGFnZXIgLnByZXZpb3VzID4gc3BhbiB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLnBhZ2VyIC5kaXNhYmxlZCA+IGEsXG4ucGFnZXIgLmRpc2FibGVkID4gYTpob3Zlcixcbi5wYWdlciAuZGlzYWJsZWQgPiBhOmZvY3VzLFxuLnBhZ2VyIC5kaXNhYmxlZCA+IHNwYW4ge1xuICBjb2xvcjogIzc3Nzc3NztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgcGFkZGluZzogLjJlbSAuNmVtIC4zZW07XG4gIGZvbnQtc2l6ZTogNzUlO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgYm9yZGVyLXJhZGl1czogLjI1ZW07XG59XG5hLmxhYmVsOmhvdmVyLFxuYS5sYWJlbDpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5sYWJlbDplbXB0eSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uYnRuIC5sYWJlbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAtMXB4O1xufVxuLmxhYmVsLWRlZmF1bHQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzc3Nzc3O1xufVxuLmxhYmVsLWRlZmF1bHRbaHJlZl06aG92ZXIsXG4ubGFiZWwtZGVmYXVsdFtocmVmXTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1ZTVlNWU7XG59XG4ubGFiZWwtcHJpbWFyeSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7XG59XG4ubGFiZWwtcHJpbWFyeVtocmVmXTpob3Zlcixcbi5sYWJlbC1wcmltYXJ5W2hyZWZdOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4NjA5MDtcbn1cbi5sYWJlbC1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVjYjg1Yztcbn1cbi5sYWJlbC1zdWNjZXNzW2hyZWZdOmhvdmVyLFxuLmxhYmVsLXN1Y2Nlc3NbaHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ5ZDQ0O1xufVxuLmxhYmVsLWluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWJjMGRlO1xufVxuLmxhYmVsLWluZm9baHJlZl06aG92ZXIsXG4ubGFiZWwtaW5mb1tocmVmXTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMWIwZDU7XG59XG4ubGFiZWwtd2FybmluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7XG59XG4ubGFiZWwtd2FybmluZ1tocmVmXTpob3Zlcixcbi5sYWJlbC13YXJuaW5nW2hyZWZdOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjOTcxZjtcbn1cbi5sYWJlbC1kYW5nZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDk1MzRmO1xufVxuLmxhYmVsLWRhbmdlcltocmVmXTpob3Zlcixcbi5sYWJlbC1kYW5nZXJbaHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzkzMDJjO1xufVxuLmJhZGdlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtaW4td2lkdGg6IDEwcHg7XG4gIHBhZGRpbmc6IDNweCA3cHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjZmZmO1xuICBsaW5lLWhlaWdodDogMTtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzc3Nzc3O1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xufVxuLmJhZGdlOmVtcHR5IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5idG4gLmJhZGdlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0xcHg7XG59XG4uYnRuLXhzIC5iYWRnZSxcbi5idG4tZ3JvdXAteHMgPiAuYnRuIC5iYWRnZSB7XG4gIHRvcDogMDtcbiAgcGFkZGluZzogMXB4IDVweDtcbn1cbmEuYmFkZ2U6aG92ZXIsXG5hLmJhZGdlOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgPiAuYmFkZ2UsXG4ubmF2LXBpbGxzID4gLmFjdGl2ZSA+IGEgPiAuYmFkZ2Uge1xuICBjb2xvcjogIzMzN2FiNztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5saXN0LWdyb3VwLWl0ZW0gPiAuYmFkZ2Uge1xuICBmbG9hdDogcmlnaHQ7XG59XG4ubGlzdC1ncm91cC1pdGVtID4gLmJhZGdlICsgLmJhZGdlIHtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG59XG4ubmF2LXBpbGxzID4gbGkgPiBhID4gLmJhZGdlIHtcbiAgbWFyZ2luLWxlZnQ6IDNweDtcbn1cbi5qdW1ib3Ryb24ge1xuICBwYWRkaW5nLXRvcDogMzBweDtcbiAgcGFkZGluZy1ib3R0b206IDMwcHg7XG4gIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gIGNvbG9yOiBpbmhlcml0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xufVxuLmp1bWJvdHJvbiBoMSxcbi5qdW1ib3Ryb24gLmgxIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG4uanVtYm90cm9uIHAge1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICBmb250LXNpemU6IDIxcHg7XG4gIGZvbnQtd2VpZ2h0OiAyMDA7XG59XG4uanVtYm90cm9uID4gaHIge1xuICBib3JkZXItdG9wLWNvbG9yOiAjZDVkNWQ1O1xufVxuLmNvbnRhaW5lciAuanVtYm90cm9uLFxuLmNvbnRhaW5lci1mbHVpZCAuanVtYm90cm9uIHtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xufVxuLmp1bWJvdHJvbiAuY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmp1bWJvdHJvbiB7XG4gICAgcGFkZGluZy10b3A6IDQ4cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDQ4cHg7XG4gIH1cbiAgLmNvbnRhaW5lciAuanVtYm90cm9uLFxuICAuY29udGFpbmVyLWZsdWlkIC5qdW1ib3Ryb24ge1xuICAgIHBhZGRpbmctbGVmdDogNjBweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiA2MHB4O1xuICB9XG4gIC5qdW1ib3Ryb24gaDEsXG4gIC5qdW1ib3Ryb24gLmgxIHtcbiAgICBmb250LXNpemU6IDYzcHg7XG4gIH1cbn1cbi50aHVtYm5haWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogNHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAtd2Via2l0LXRyYW5zaXRpb246IGJvcmRlciAwLjJzIGVhc2UtaW4tb3V0O1xuICAtby10cmFuc2l0aW9uOiBib3JkZXIgMC4ycyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogYm9yZGVyIDAuMnMgZWFzZS1pbi1vdXQ7XG59XG4udGh1bWJuYWlsID4gaW1nLFxuLnRodW1ibmFpbCBhID4gaW1nIHtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbn1cbmEudGh1bWJuYWlsOmhvdmVyLFxuYS50aHVtYm5haWw6Zm9jdXMsXG5hLnRodW1ibmFpbC5hY3RpdmUge1xuICBib3JkZXItY29sb3I6ICMzMzdhYjc7XG59XG4udGh1bWJuYWlsIC5jYXB0aW9uIHtcbiAgcGFkZGluZzogOXB4O1xuICBjb2xvcjogIzMzMzMzMztcbn1cbi5hbGVydCB7XG4gIHBhZGRpbmc6IDE1cHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4uYWxlcnQgaDQge1xuICBtYXJnaW4tdG9wOiAwO1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5hbGVydCAuYWxlcnQtbGluayB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLmFsZXJ0ID4gcCxcbi5hbGVydCA+IHVsIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5hbGVydCA+IHAgKyBwIHtcbiAgbWFyZ2luLXRvcDogNXB4O1xufVxuLmFsZXJ0LWRpc21pc3NhYmxlLFxuLmFsZXJ0LWRpc21pc3NpYmxlIHtcbiAgcGFkZGluZy1yaWdodDogMzVweDtcbn1cbi5hbGVydC1kaXNtaXNzYWJsZSAuY2xvc2UsXG4uYWxlcnQtZGlzbWlzc2libGUgLmNsb3NlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0ycHg7XG4gIHJpZ2h0OiAtMjFweDtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG4uYWxlcnQtc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZmYwZDg7XG4gIGJvcmRlci1jb2xvcjogI2Q2ZTljNjtcbiAgY29sb3I6ICMzYzc2M2Q7XG59XG4uYWxlcnQtc3VjY2VzcyBociB7XG4gIGJvcmRlci10b3AtY29sb3I6ICNjOWUyYjM7XG59XG4uYWxlcnQtc3VjY2VzcyAuYWxlcnQtbGluayB7XG4gIGNvbG9yOiAjMmI1NDJjO1xufVxuLmFsZXJ0LWluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDllZGY3O1xuICBib3JkZXItY29sb3I6ICNiY2U4ZjE7XG4gIGNvbG9yOiAjMzE3MDhmO1xufVxuLmFsZXJ0LWluZm8gaHIge1xuICBib3JkZXItdG9wLWNvbG9yOiAjYTZlMWVjO1xufVxuLmFsZXJ0LWluZm8gLmFsZXJ0LWxpbmsge1xuICBjb2xvcjogIzI0NTI2OTtcbn1cbi5hbGVydC13YXJuaW5nIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMztcbiAgYm9yZGVyLWNvbG9yOiAjZmFlYmNjO1xuICBjb2xvcjogIzhhNmQzYjtcbn1cbi5hbGVydC13YXJuaW5nIGhyIHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2Y3ZTFiNTtcbn1cbi5hbGVydC13YXJuaW5nIC5hbGVydC1saW5rIHtcbiAgY29sb3I6ICM2NjUxMmM7XG59XG4uYWxlcnQtZGFuZ2VyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZGVkZTtcbiAgYm9yZGVyLWNvbG9yOiAjZWJjY2QxO1xuICBjb2xvcjogI2E5NDQ0Mjtcbn1cbi5hbGVydC1kYW5nZXIgaHIge1xuICBib3JkZXItdG9wLWNvbG9yOiAjZTRiOWMwO1xufVxuLmFsZXJ0LWRhbmdlciAuYWxlcnQtbGluayB7XG4gIGNvbG9yOiAjODQzNTM0O1xufVxuQC13ZWJraXQta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHtcbiAgZnJvbSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNDBweCAwO1xuICB9XG4gIHRvIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XG4gIH1cbn1cbkBrZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXMge1xuICBmcm9tIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA0MHB4IDA7XG4gIH1cbiAgdG8ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDtcbiAgfVxufVxuLnByb2dyZXNzIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi5wcm9ncmVzcy1iYXIge1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiB3aWR0aCAwLjZzIGVhc2U7XG4gIC1vLXRyYW5zaXRpb246IHdpZHRoIDAuNnMgZWFzZTtcbiAgdHJhbnNpdGlvbjogd2lkdGggMC42cyBlYXNlO1xufVxuLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhcixcbi5wcm9ncmVzcy1iYXItc3RyaXBlZCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1zaXplOiA0MHB4IDQwcHg7XG59XG4ucHJvZ3Jlc3MuYWN0aXZlIC5wcm9ncmVzcy1iYXIsXG4ucHJvZ3Jlc3MtYmFyLmFjdGl2ZSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7XG4gIC1vLWFuaW1hdGlvbjogcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlO1xuICBhbmltYXRpb246IHByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTtcbn1cbi5wcm9ncmVzcy1iYXItc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1Y2I4NWM7XG59XG4ucHJvZ3Jlc3Mtc3RyaXBlZCAucHJvZ3Jlc3MtYmFyLXN1Y2Nlc3Mge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG59XG4ucHJvZ3Jlc3MtYmFyLWluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWJjMGRlO1xufVxuLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhci1pbmZvIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xufVxuLnByb2dyZXNzLWJhci13YXJuaW5nIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwYWQ0ZTtcbn1cbi5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXItd2FybmluZyB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbn1cbi5wcm9ncmVzcy1iYXItZGFuZ2VyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5NTM0Zjtcbn1cbi5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXItZGFuZ2VyIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xufVxuLm1lZGlhIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cbi5tZWRpYTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4ubWVkaWEsXG4ubWVkaWEtYm9keSB7XG4gIHpvb206IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWVkaWEtYm9keSB7XG4gIHdpZHRoOiAxMDAwMHB4O1xufVxuLm1lZGlhLW9iamVjdCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLm1lZGlhLW9iamVjdC5pbWctdGh1bWJuYWlsIHtcbiAgbWF4LXdpZHRoOiBub25lO1xufVxuLm1lZGlhLXJpZ2h0LFxuLm1lZGlhID4gLnB1bGwtcmlnaHQge1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG59XG4ubWVkaWEtbGVmdCxcbi5tZWRpYSA+IC5wdWxsLWxlZnQge1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xufVxuLm1lZGlhLWxlZnQsXG4ubWVkaWEtcmlnaHQsXG4ubWVkaWEtYm9keSB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG4ubWVkaWEtbWlkZGxlIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5tZWRpYS1ib3R0b20ge1xuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xufVxuLm1lZGlhLWhlYWRpbmcge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG4ubWVkaWEtbGlzdCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbi5saXN0LWdyb3VwIHtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuLmxpc3QtZ3JvdXAtaXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgbWFyZ2luLWJvdHRvbTogLTFweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbn1cbi5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XG59XG4ubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4O1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7XG59XG5hLmxpc3QtZ3JvdXAtaXRlbSxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0ge1xuICBjb2xvcjogIzU1NTtcbn1cbmEubGlzdC1ncm91cC1pdGVtIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0gLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHtcbiAgY29sb3I6ICMzMzM7XG59XG5hLmxpc3QtZ3JvdXAtaXRlbTpob3ZlcixcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW06aG92ZXIsXG5hLmxpc3QtZ3JvdXAtaXRlbTpmb2N1cyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW06Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjNTU1O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbSB7XG4gIHdpZHRoOiAxMDAlO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZCxcbi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6aG92ZXIsXG4ubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTtcbiAgY29sb3I6ICM3Nzc3Nzc7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpmb2N1cyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LFxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpob3ZlciAubGlzdC1ncm91cC1pdGVtLXRleHQsXG4ubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7XG4gIGNvbG9yOiAjNzc3Nzc3O1xufVxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUsXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3Zlcixcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIHtcbiAgei1pbmRleDogMjtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7XG4gIGJvcmRlci1jb2xvcjogIzMzN2FiNztcbn1cbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmhvdmVyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyA+IHNtYWxsLFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nID4gc21hbGwsXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpmb2N1cyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiBzbWFsbCxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyA+IC5zbWFsbCxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmhvdmVyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyA+IC5zbWFsbCxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyA+IC5zbWFsbCB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0IHtcbiAgY29sb3I6ICNjN2RkZWY7XG59XG4ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3Mge1xuICBjb2xvcjogIzNjNzYzZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RmZjBkODtcbn1cbmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3Mge1xuICBjb2xvcjogIzNjNzYzZDtcbn1cbmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpob3ZlcixcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3M6Zm9jdXMsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3M6Zm9jdXMge1xuICBjb2xvcjogIzNjNzYzZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QwZTljNjtcbn1cbmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZSxcbmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZTpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlOmZvY3VzLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2M3NjNkO1xuICBib3JkZXItY29sb3I6ICMzYzc2M2Q7XG59XG4ubGlzdC1ncm91cC1pdGVtLWluZm8ge1xuICBjb2xvcjogIzMxNzA4ZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5ZWRmNztcbn1cbmEubGlzdC1ncm91cC1pdGVtLWluZm8sXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8ge1xuICBjb2xvcjogIzMxNzA4Zjtcbn1cbmEubGlzdC1ncm91cC1pdGVtLWluZm8gLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuYS5saXN0LWdyb3VwLWl0ZW0taW5mbzpob3ZlcixcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mbzpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLWluZm86Zm9jdXMsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm86Zm9jdXMge1xuICBjb2xvcjogIzMxNzA4ZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M0ZTNmMztcbn1cbmEubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZSxcbmEubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZTpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlOmZvY3VzLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzE3MDhmO1xuICBib3JkZXItY29sb3I6ICMzMTcwOGY7XG59XG4ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcge1xuICBjb2xvcjogIzhhNmQzYjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMztcbn1cbmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcge1xuICBjb2xvcjogIzhhNmQzYjtcbn1cbmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZzpob3ZlcixcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZzpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmc6Zm9jdXMsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmc6Zm9jdXMge1xuICBjb2xvcjogIzhhNmQzYjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZjJjYztcbn1cbmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZSxcbmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZTpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlOmZvY3VzLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGE2ZDNiO1xuICBib3JkZXItY29sb3I6ICM4YTZkM2I7XG59XG4ubGlzdC1ncm91cC1pdGVtLWRhbmdlciB7XG4gIGNvbG9yOiAjYTk0NDQyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlO1xufVxuYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIge1xuICBjb2xvcjogI2E5NDQ0Mjtcbn1cbmEubGlzdC1ncm91cC1pdGVtLWRhbmdlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbmEubGlzdC1ncm91cC1pdGVtLWRhbmdlcjpob3ZlcixcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyOmhvdmVyLFxuYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyOmZvY3VzLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXI6Zm9jdXMge1xuICBjb2xvcjogI2E5NDQ0MjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ViY2NjYztcbn1cbmEubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmUsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmUsXG5hLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlOmhvdmVyLFxuYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmFjdGl2ZTpmb2N1cyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmFjdGl2ZTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTk0NDQyO1xuICBib3JkZXItY29sb3I6ICNhOTQ0NDI7XG59XG4ubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG4ubGlzdC1ncm91cC1pdGVtLXRleHQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBsaW5lLWhlaWdodDogMS4zO1xufVxuLnBhbmVsIHtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG4ucGFuZWwtYm9keSB7XG4gIHBhZGRpbmc6IDE1cHg7XG59XG4ucGFuZWwtaGVhZGluZyB7XG4gIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG59XG4ucGFuZWwtaGVhZGluZyA+IC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG4ucGFuZWwtdGl0bGUge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuLnBhbmVsLXRpdGxlID4gYSxcbi5wYW5lbC10aXRsZSA+IHNtYWxsLFxuLnBhbmVsLXRpdGxlID4gLnNtYWxsLFxuLnBhbmVsLXRpdGxlID4gc21hbGwgPiBhLFxuLnBhbmVsLXRpdGxlID4gLnNtYWxsID4gYSB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuLnBhbmVsLWZvb3RlciB7XG4gIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDtcbn1cbi5wYW5lbCA+IC5saXN0LWdyb3VwLFxuLnBhbmVsID4gLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLnBhbmVsID4gLmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbSxcbi5wYW5lbCA+IC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0ge1xuICBib3JkZXItd2lkdGg6IDFweCAwO1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLnBhbmVsID4gLmxpc3QtZ3JvdXA6Zmlyc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwOmZpcnN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wOiAwO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG59XG4ucGFuZWwgPiAubGlzdC1ncm91cDpsYXN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwOmxhc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4O1xufVxuLnBhbmVsID4gLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAubGlzdC1ncm91cCAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG59XG4ucGFuZWwtaGVhZGluZyArIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLXdpZHRoOiAwO1xufVxuLmxpc3QtZ3JvdXAgKyAucGFuZWwtZm9vdGVyIHtcbiAgYm9yZGVyLXRvcC13aWR0aDogMDtcbn1cbi5wYW5lbCA+IC50YWJsZSxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLFxuLnBhbmVsID4gLnBhbmVsLWNvbGxhcHNlID4gLnRhYmxlIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5wYW5lbCA+IC50YWJsZSBjYXB0aW9uLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgY2FwdGlvbixcbi5wYW5lbCA+IC5wYW5lbC1jb2xsYXBzZSA+IC50YWJsZSBjYXB0aW9uIHtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG59XG4ucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDtcbn1cbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG59XG4ucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7XG59XG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDtcbn1cbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGZvb3Q6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDtcbn1cbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGZvb3Q6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGZvb3Q6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDtcbn1cbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGZvb3Q6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4O1xufVxuLnBhbmVsID4gLnBhbmVsLWJvZHkgKyAudGFibGUsXG4ucGFuZWwgPiAucGFuZWwtYm9keSArIC50YWJsZS1yZXNwb25zaXZlLFxuLnBhbmVsID4gLnRhYmxlICsgLnBhbmVsLWJvZHksXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSArIC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG59XG4ucGFuZWwgPiAudGFibGUgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoLFxuLnBhbmVsID4gLnRhYmxlID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0ZCB7XG4gIGJvcmRlci10b3A6IDA7XG59XG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCB7XG4gIGJvcmRlcjogMDtcbn1cbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1sZWZ0OiAwO1xufVxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZDpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLXJpZ2h0OiAwO1xufVxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmZpcnN0LWNoaWxkID4gdGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRoLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpmaXJzdC1jaGlsZCA+IHRoLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmZpcnN0LWNoaWxkID4gdGgge1xuICBib3JkZXItYm90dG9tOiAwO1xufVxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpsYXN0LWNoaWxkID4gdGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6bGFzdC1jaGlsZCA+IHRkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHI6bGFzdC1jaGlsZCA+IHRkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpsYXN0LWNoaWxkID4gdGgsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6bGFzdC1jaGlsZCA+IHRoLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGgsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHI6bGFzdC1jaGlsZCA+IHRoIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlIHtcbiAgYm9yZGVyOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLnBhbmVsLWdyb3VwIHtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cbi5wYW5lbC1ncm91cCAucGFuZWwge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4ucGFuZWwtZ3JvdXAgLnBhbmVsICsgLnBhbmVsIHtcbiAgbWFyZ2luLXRvcDogNXB4O1xufVxuLnBhbmVsLWdyb3VwIC5wYW5lbC1oZWFkaW5nIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cbi5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5LFxuLnBhbmVsLWdyb3VwIC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXAge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbn1cbi5wYW5lbC1ncm91cCAucGFuZWwtZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogMDtcbn1cbi5wYW5lbC1ncm91cCAucGFuZWwtZm9vdGVyICsgLnBhbmVsLWNvbGxhcHNlIC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG59XG4ucGFuZWwtZGVmYXVsdCB7XG4gIGJvcmRlci1jb2xvcjogI2RkZDtcbn1cbi5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWhlYWRpbmcge1xuICBjb2xvcjogIzMzMzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgYm9yZGVyLWNvbG9yOiAjZGRkO1xufVxuLnBhbmVsLWRlZmF1bHQgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2RkZDtcbn1cbi5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHtcbiAgY29sb3I6ICNmNWY1ZjU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzMzMzM7XG59XG4ucGFuZWwtZGVmYXVsdCA+IC5wYW5lbC1mb290ZXIgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNkZGQ7XG59XG4ucGFuZWwtcHJpbWFyeSB7XG4gIGJvcmRlci1jb2xvcjogIzMzN2FiNztcbn1cbi5wYW5lbC1wcmltYXJ5ID4gLnBhbmVsLWhlYWRpbmcge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzN2FiNztcbiAgYm9yZGVyLWNvbG9yOiAjMzM3YWI3O1xufVxuLnBhbmVsLXByaW1hcnkgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzMzN2FiNztcbn1cbi5wYW5lbC1wcmltYXJ5ID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHtcbiAgY29sb3I6ICMzMzdhYjc7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4ucGFuZWwtcHJpbWFyeSA+IC5wYW5lbC1mb290ZXIgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICMzMzdhYjc7XG59XG4ucGFuZWwtc3VjY2VzcyB7XG4gIGJvcmRlci1jb2xvcjogI2Q2ZTljNjtcbn1cbi5wYW5lbC1zdWNjZXNzID4gLnBhbmVsLWhlYWRpbmcge1xuICBjb2xvcjogIzNjNzYzZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RmZjBkODtcbiAgYm9yZGVyLWNvbG9yOiAjZDZlOWM2O1xufVxuLnBhbmVsLXN1Y2Nlc3MgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2Q2ZTljNjtcbn1cbi5wYW5lbC1zdWNjZXNzID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHtcbiAgY29sb3I6ICNkZmYwZDg7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYzc2M2Q7XG59XG4ucGFuZWwtc3VjY2VzcyA+IC5wYW5lbC1mb290ZXIgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNkNmU5YzY7XG59XG4ucGFuZWwtaW5mbyB7XG4gIGJvcmRlci1jb2xvcjogI2JjZThmMTtcbn1cbi5wYW5lbC1pbmZvID4gLnBhbmVsLWhlYWRpbmcge1xuICBjb2xvcjogIzMxNzA4ZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5ZWRmNztcbiAgYm9yZGVyLWNvbG9yOiAjYmNlOGYxO1xufVxuLnBhbmVsLWluZm8gPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2JjZThmMTtcbn1cbi5wYW5lbC1pbmZvID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHtcbiAgY29sb3I6ICNkOWVkZjc7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMTcwOGY7XG59XG4ucGFuZWwtaW5mbyA+IC5wYW5lbC1mb290ZXIgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNiY2U4ZjE7XG59XG4ucGFuZWwtd2FybmluZyB7XG4gIGJvcmRlci1jb2xvcjogI2ZhZWJjYztcbn1cbi5wYW5lbC13YXJuaW5nID4gLnBhbmVsLWhlYWRpbmcge1xuICBjb2xvcjogIzhhNmQzYjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMztcbiAgYm9yZGVyLWNvbG9yOiAjZmFlYmNjO1xufVxuLnBhbmVsLXdhcm5pbmcgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZhZWJjYztcbn1cbi5wYW5lbC13YXJuaW5nID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHtcbiAgY29sb3I6ICNmY2Y4ZTM7XG4gIGJhY2tncm91bmQtY29sb3I6ICM4YTZkM2I7XG59XG4ucGFuZWwtd2FybmluZyA+IC5wYW5lbC1mb290ZXIgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNmYWViY2M7XG59XG4ucGFuZWwtZGFuZ2VyIHtcbiAgYm9yZGVyLWNvbG9yOiAjZWJjY2QxO1xufVxuLnBhbmVsLWRhbmdlciA+IC5wYW5lbC1oZWFkaW5nIHtcbiAgY29sb3I6ICNhOTQ0NDI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMmRlZGU7XG4gIGJvcmRlci1jb2xvcjogI2ViY2NkMTtcbn1cbi5wYW5lbC1kYW5nZXIgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ViY2NkMTtcbn1cbi5wYW5lbC1kYW5nZXIgPiAucGFuZWwtaGVhZGluZyAuYmFkZ2Uge1xuICBjb2xvcjogI2YyZGVkZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2E5NDQ0Mjtcbn1cbi5wYW5lbC1kYW5nZXIgPiAucGFuZWwtZm9vdGVyICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjZWJjY2QxO1xufVxuLmVtYmVkLXJlc3BvbnNpdmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uZW1iZWQtcmVzcG9uc2l2ZSAuZW1iZWQtcmVzcG9uc2l2ZS1pdGVtLFxuLmVtYmVkLXJlc3BvbnNpdmUgaWZyYW1lLFxuLmVtYmVkLXJlc3BvbnNpdmUgZW1iZWQsXG4uZW1iZWQtcmVzcG9uc2l2ZSBvYmplY3QsXG4uZW1iZWQtcmVzcG9uc2l2ZSB2aWRlbyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlcjogMDtcbn1cbi5lbWJlZC1yZXNwb25zaXZlLTE2Ynk5IHtcbiAgcGFkZGluZy1ib3R0b206IDU2LjI1JTtcbn1cbi5lbWJlZC1yZXNwb25zaXZlLTRieTMge1xuICBwYWRkaW5nLWJvdHRvbTogNzUlO1xufVxuLndlbGwge1xuICBtaW4taGVpZ2h0OiAyMHB4O1xuICBwYWRkaW5nOiAxOXB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTNlM2UzO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuLndlbGwgYmxvY2txdW90ZSB7XG4gIGJvcmRlci1jb2xvcjogI2RkZDtcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTUpO1xufVxuLndlbGwtbGcge1xuICBwYWRkaW5nOiAyNHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG4ud2VsbC1zbSB7XG4gIHBhZGRpbmc6IDlweDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuLmNsb3NlIHtcbiAgZmxvYXQ6IHJpZ2h0O1xuICBmb250LXNpemU6IDIxcHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICMwMDA7XG4gIHRleHQtc2hhZG93OiAwIDFweCAwICNmZmY7XG4gIG9wYWNpdHk6IDAuMjtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTIwKTtcbn1cbi5jbG9zZTpob3Zlcixcbi5jbG9zZTpmb2N1cyB7XG4gIGNvbG9yOiAjMDAwO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgb3BhY2l0eTogMC41O1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApO1xufVxuYnV0dG9uLmNsb3NlIHtcbiAgcGFkZGluZzogMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiAwO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG4ubW9kYWwtb3BlbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubW9kYWwge1xuICBkaXNwbGF5OiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTA1MDtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICBvdXRsaW5lOiAwO1xufVxuLm1vZGFsLmZhZGUgLm1vZGFsLWRpYWxvZyB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7XG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjUlKTtcbiAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XG4gIC1tb3otdHJhbnNpdGlvbjogLW1vei10cmFuc2Zvcm0gMC4zcyBlYXNlLW91dDtcbiAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2Utb3V0O1xufVxuLm1vZGFsLmluIC5tb2RhbC1kaWFsb2cge1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbn1cbi5tb2RhbC1vcGVuIC5tb2RhbCB7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cbi5tb2RhbC1kaWFsb2cge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiBhdXRvO1xuICBtYXJnaW46IDEwcHg7XG59XG4ubW9kYWwtY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgIzk5OTtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAzcHggOXB4IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgYm94LXNoYWRvdzogMCAzcHggOXB4IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgb3V0bGluZTogMDtcbn1cbi5tb2RhbC1iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxMDQwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xufVxuLm1vZGFsLWJhY2tkcm9wLmZhZGUge1xuICBvcGFjaXR5OiAwO1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MCk7XG59XG4ubW9kYWwtYmFja2Ryb3AuaW4ge1xuICBvcGFjaXR5OiAwLjU7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT01MCk7XG59XG4ubW9kYWwtaGVhZGVyIHtcbiAgcGFkZGluZzogMTVweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNWU1ZTU7XG4gIG1pbi1oZWlnaHQ6IDE2LjQyODU3MTQzcHg7XG59XG4ubW9kYWwtaGVhZGVyIC5jbG9zZSB7XG4gIG1hcmdpbi10b3A6IC0ycHg7XG59XG4ubW9kYWwtdGl0bGUge1xuICBtYXJnaW46IDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xufVxuLm1vZGFsLWJvZHkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDE1cHg7XG59XG4ubW9kYWwtZm9vdGVyIHtcbiAgcGFkZGluZzogMTVweDtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1O1xufVxuLm1vZGFsLWZvb3RlciAuYnRuICsgLmJ0biB7XG4gIG1hcmdpbi1sZWZ0OiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4ubW9kYWwtZm9vdGVyIC5idG4tZ3JvdXAgLmJ0biArIC5idG4ge1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cbi5tb2RhbC1mb290ZXIgLmJ0bi1ibG9jayArIC5idG4tYmxvY2sge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cbi5tb2RhbC1zY3JvbGxiYXItbWVhc3VyZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtOTk5OXB4O1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBvdmVyZmxvdzogc2Nyb2xsO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tb2RhbC1kaWFsb2cge1xuICAgIHdpZHRoOiA2MDBweDtcbiAgICBtYXJnaW46IDMwcHggYXV0bztcbiAgfVxuICAubW9kYWwtY29udGVudCB7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDVweCAxNXB4IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgICBib3gtc2hhZG93OiAwIDVweCAxNXB4IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgfVxuICAubW9kYWwtc20ge1xuICAgIHdpZHRoOiAzMDBweDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5tb2RhbC1sZyB7XG4gICAgd2lkdGg6IDkwMHB4O1xuICB9XG59XG4udG9vbHRpcCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTA3MDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcbiAgbGluZS1icmVhazogYXV0bztcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHRleHQtYWxpZ246IHN0YXJ0O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRleHQtc2hhZG93OiBub25lO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgd29yZC1icmVhazogbm9ybWFsO1xuICB3b3JkLXNwYWNpbmc6IG5vcm1hbDtcbiAgd29yZC13cmFwOiBub3JtYWw7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgb3BhY2l0eTogMDtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApO1xufVxuLnRvb2x0aXAuaW4ge1xuICBvcGFjaXR5OiAwLjk7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT05MCk7XG59XG4udG9vbHRpcC50b3Age1xuICBtYXJnaW4tdG9wOiAtM3B4O1xuICBwYWRkaW5nOiA1cHggMDtcbn1cbi50b29sdGlwLnJpZ2h0IHtcbiAgbWFyZ2luLWxlZnQ6IDNweDtcbiAgcGFkZGluZzogMCA1cHg7XG59XG4udG9vbHRpcC5ib3R0b20ge1xuICBtYXJnaW4tdG9wOiAzcHg7XG4gIHBhZGRpbmc6IDVweCAwO1xufVxuLnRvb2x0aXAubGVmdCB7XG4gIG1hcmdpbi1sZWZ0OiAtM3B4O1xuICBwYWRkaW5nOiAwIDVweDtcbn1cbi50b29sdGlwLWlubmVyIHtcbiAgbWF4LXdpZHRoOiAyMDBweDtcbiAgcGFkZGluZzogM3B4IDhweDtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLnRvb2x0aXAtYXJyb3cge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG4udG9vbHRpcC50b3AgLnRvb2x0aXAtYXJyb3cge1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gIGJvcmRlci13aWR0aDogNXB4IDVweCAwO1xuICBib3JkZXItdG9wLWNvbG9yOiAjMDAwO1xufVxuLnRvb2x0aXAudG9wLWxlZnQgLnRvb2x0aXAtYXJyb3cge1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IC01cHg7XG4gIGJvcmRlci13aWR0aDogNXB4IDVweCAwO1xuICBib3JkZXItdG9wLWNvbG9yOiAjMDAwO1xufVxuLnRvb2x0aXAudG9wLXJpZ2h0IC50b29sdGlwLWFycm93IHtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IC01cHg7XG4gIGJvcmRlci13aWR0aDogNXB4IDVweCAwO1xuICBib3JkZXItdG9wLWNvbG9yOiAjMDAwO1xufVxuLnRvb2x0aXAucmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICB0b3A6IDUwJTtcbiAgbGVmdDogMDtcbiAgbWFyZ2luLXRvcDogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDVweCAwO1xuICBib3JkZXItcmlnaHQtY29sb3I6ICMwMDA7XG59XG4udG9vbHRpcC5sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgdG9wOiA1MCU7XG4gIHJpZ2h0OiAwO1xuICBtYXJnaW4tdG9wOiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDVweCAwIDVweCA1cHg7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjMDAwO1xufVxuLnRvb2x0aXAuYm90dG9tIC50b29sdGlwLWFycm93IHtcbiAgdG9wOiAwO1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbi1sZWZ0OiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDtcbn1cbi50b29sdGlwLmJvdHRvbS1sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgdG9wOiAwO1xuICByaWdodDogNXB4O1xuICBtYXJnaW4tdG9wOiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDtcbn1cbi50b29sdGlwLmJvdHRvbS1yaWdodCAudG9vbHRpcC1hcnJvdyB7XG4gIHRvcDogMDtcbiAgbGVmdDogNXB4O1xuICBtYXJnaW4tdG9wOiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDtcbn1cbi5wb3BvdmVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDEwNjA7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIG1heC13aWR0aDogMjc2cHg7XG4gIHBhZGRpbmc6IDFweDtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICBsaW5lLWJyZWFrOiBhdXRvO1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0MztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgdGV4dC1hbGlnbjogc3RhcnQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICB3b3JkLWJyZWFrOiBub3JtYWw7XG4gIHdvcmQtc3BhY2luZzogbm9ybWFsO1xuICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgYm94LXNoYWRvdzogMCA1cHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG4ucG9wb3Zlci50b3Age1xuICBtYXJnaW4tdG9wOiAtMTBweDtcbn1cbi5wb3BvdmVyLnJpZ2h0IHtcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XG59XG4ucG9wb3Zlci5ib3R0b20ge1xuICBtYXJnaW4tdG9wOiAxMHB4O1xufVxuLnBvcG92ZXIubGVmdCB7XG4gIG1hcmdpbi1sZWZ0OiAtMTBweDtcbn1cbi5wb3BvdmVyLXRpdGxlIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiA4cHggMTRweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2ViZWJlYjtcbiAgYm9yZGVyLXJhZGl1czogNXB4IDVweCAwIDA7XG59XG4ucG9wb3Zlci1jb250ZW50IHtcbiAgcGFkZGluZzogOXB4IDE0cHg7XG59XG4ucG9wb3ZlciA+IC5hcnJvdyxcbi5wb3BvdmVyID4gLmFycm93OmFmdGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbn1cbi5wb3BvdmVyID4gLmFycm93IHtcbiAgYm9yZGVyLXdpZHRoOiAxMXB4O1xufVxuLnBvcG92ZXIgPiAuYXJyb3c6YWZ0ZXIge1xuICBib3JkZXItd2lkdGg6IDEwcHg7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG4ucG9wb3Zlci50b3AgPiAuYXJyb3cge1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbi1sZWZ0OiAtMTFweDtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzk5OTk5OTtcbiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgYm90dG9tOiAtMTFweDtcbn1cbi5wb3BvdmVyLnRvcCA+IC5hcnJvdzphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBib3R0b206IDFweDtcbiAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuICBib3JkZXItdG9wLWNvbG9yOiAjZmZmO1xufVxuLnBvcG92ZXIucmlnaHQgPiAuYXJyb3cge1xuICB0b3A6IDUwJTtcbiAgbGVmdDogLTExcHg7XG4gIG1hcmdpbi10b3A6IC0xMXB4O1xuICBib3JkZXItbGVmdC13aWR0aDogMDtcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjOTk5OTk5O1xuICBib3JkZXItcmlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG59XG4ucG9wb3Zlci5yaWdodCA+IC5hcnJvdzphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBsZWZ0OiAxcHg7XG4gIGJvdHRvbTogLTEwcHg7XG4gIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICBib3JkZXItcmlnaHQtY29sb3I6ICNmZmY7XG59XG4ucG9wb3Zlci5ib3R0b20gPiAuYXJyb3cge1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbi1sZWZ0OiAtMTFweDtcbiAgYm9yZGVyLXRvcC13aWR0aDogMDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzk5OTk5OTtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgdG9wOiAtMTFweDtcbn1cbi5wb3BvdmVyLmJvdHRvbSA+IC5hcnJvdzphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICB0b3A6IDFweDtcbiAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xuICBib3JkZXItdG9wLXdpZHRoOiAwO1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmO1xufVxuLnBvcG92ZXIubGVmdCA+IC5hcnJvdyB7XG4gIHRvcDogNTAlO1xuICByaWdodDogLTExcHg7XG4gIG1hcmdpbi10b3A6IC0xMXB4O1xuICBib3JkZXItcmlnaHQtd2lkdGg6IDA7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjOTk5OTk5O1xuICBib3JkZXItbGVmdC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbn1cbi5wb3BvdmVyLmxlZnQgPiAuYXJyb3c6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgcmlnaHQ6IDFweDtcbiAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICBib3JkZXItbGVmdC1jb2xvcjogI2ZmZjtcbiAgYm90dG9tOiAtMTBweDtcbn1cbi5jYXJvdXNlbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5jYXJvdXNlbC1pbm5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgd2lkdGg6IDEwMCU7XG59XG4uY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiAwLjZzIGVhc2UtaW4tb3V0IGxlZnQ7XG4gIC1vLXRyYW5zaXRpb246IDAuNnMgZWFzZS1pbi1vdXQgbGVmdDtcbiAgdHJhbnNpdGlvbjogMC42cyBlYXNlLWluLW91dCBsZWZ0O1xufVxuLmNhcm91c2VsLWlubmVyID4gLml0ZW0gPiBpbWcsXG4uY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbSA+IGEgPiBpbWcge1xuICBsaW5lLWhlaWdodDogMTtcbn1cbkBtZWRpYSBhbGwgYW5kICh0cmFuc2Zvcm0tM2QpLCAoLXdlYmtpdC10cmFuc2Zvcm0tM2QpIHtcbiAgLmNhcm91c2VsLWlubmVyID4gLml0ZW0ge1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC42cyBlYXNlLWluLW91dDtcbiAgICAtbW96LXRyYW5zaXRpb246IC1tb3otdHJhbnNmb3JtIDAuNnMgZWFzZS1pbi1vdXQ7XG4gICAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIDAuNnMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNnMgZWFzZS1pbi1vdXQ7XG4gICAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgLW1vei1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIC13ZWJraXQtcGVyc3BlY3RpdmU6IDEwMDBweDtcbiAgICAtbW96LXBlcnNwZWN0aXZlOiAxMDAwcHg7XG4gICAgcGVyc3BlY3RpdmU6IDEwMDBweDtcbiAgfVxuICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbS5uZXh0LFxuICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbS5hY3RpdmUucmlnaHQge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxMDAlLCAwLCAwKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApO1xuICAgIGxlZnQ6IDA7XG4gIH1cbiAgLmNhcm91c2VsLWlubmVyID4gLml0ZW0ucHJldixcbiAgLmNhcm91c2VsLWlubmVyID4gLml0ZW0uYWN0aXZlLmxlZnQge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCk7XG4gICAgbGVmdDogMDtcbiAgfVxuICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbS5uZXh0LmxlZnQsXG4gIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLnByZXYucmlnaHQsXG4gIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLmFjdGl2ZSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgbGVmdDogMDtcbiAgfVxufVxuLmNhcm91c2VsLWlubmVyID4gLmFjdGl2ZSxcbi5jYXJvdXNlbC1pbm5lciA+IC5uZXh0LFxuLmNhcm91c2VsLWlubmVyID4gLnByZXYge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5jYXJvdXNlbC1pbm5lciA+IC5hY3RpdmUge1xuICBsZWZ0OiAwO1xufVxuLmNhcm91c2VsLWlubmVyID4gLm5leHQsXG4uY2Fyb3VzZWwtaW5uZXIgPiAucHJldiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICB3aWR0aDogMTAwJTtcbn1cbi5jYXJvdXNlbC1pbm5lciA+IC5uZXh0IHtcbiAgbGVmdDogMTAwJTtcbn1cbi5jYXJvdXNlbC1pbm5lciA+IC5wcmV2IHtcbiAgbGVmdDogLTEwMCU7XG59XG4uY2Fyb3VzZWwtaW5uZXIgPiAubmV4dC5sZWZ0LFxuLmNhcm91c2VsLWlubmVyID4gLnByZXYucmlnaHQge1xuICBsZWZ0OiAwO1xufVxuLmNhcm91c2VsLWlubmVyID4gLmFjdGl2ZS5sZWZ0IHtcbiAgbGVmdDogLTEwMCU7XG59XG4uY2Fyb3VzZWwtaW5uZXIgPiAuYWN0aXZlLnJpZ2h0IHtcbiAgbGVmdDogMTAwJTtcbn1cbi5jYXJvdXNlbC1jb250cm9sIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDE1JTtcbiAgb3BhY2l0eTogMC41O1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApO1xuICBmb250LXNpemU6IDIwcHg7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRleHQtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjYpO1xufVxuLmNhcm91c2VsLWNvbnRyb2wubGVmdCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMCwgMCwgMCwgMC41KSAwJSwgcmdiYSgwLCAwLCAwLCAwLjAwMDEpIDEwMCUpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgwLCAwLCAwLCAwLjUpIDAlLCByZ2JhKDAsIDAsIDAsIDAuMDAwMSkgMTAwJSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjUpIDAlLCByZ2JhKDAsIDAsIDAsIDAuMDAwMSkgMTAwJSk7XG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nIzgwMDAwMDAwJywgZW5kQ29sb3JzdHI9JyMwMDAwMDAwMCcsIEdyYWRpZW50VHlwZT0xKTtcbn1cbi5jYXJvdXNlbC1jb250cm9sLnJpZ2h0IHtcbiAgbGVmdDogYXV0bztcbiAgcmlnaHQ6IDA7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMCwgMCwgMCwgMC4wMDAxKSAwJSwgcmdiYSgwLCAwLCAwLCAwLjUpIDEwMCUpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgwLCAwLCAwLCAwLjAwMDEpIDAlLCByZ2JhKDAsIDAsIDAsIDAuNSkgMTAwJSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjAwMDEpIDAlLCByZ2JhKDAsIDAsIDAsIDAuNSkgMTAwJSk7XG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nIzAwMDAwMDAwJywgZW5kQ29sb3JzdHI9JyM4MDAwMDAwMCcsIEdyYWRpZW50VHlwZT0xKTtcbn1cbi5jYXJvdXNlbC1jb250cm9sOmhvdmVyLFxuLmNhcm91c2VsLWNvbnRyb2w6Zm9jdXMge1xuICBvdXRsaW5lOiAwO1xuICBjb2xvcjogI2ZmZjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBvcGFjaXR5OiAwLjk7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT05MCk7XG59XG4uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2LFxuLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCxcbi5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0LFxuLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgbWFyZ2luLXRvcDogLTEwcHg7XG4gIHotaW5kZXg6IDU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXYsXG4uY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCB7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xufVxuLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCxcbi5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCB7XG4gIHJpZ2h0OiA1MCU7XG4gIG1hcmdpbi1yaWdodDogLTEwcHg7XG59XG4uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2LFxuLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCB7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBmb250LWZhbWlseTogc2VyaWY7XG59XG4uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXDIwMzknO1xufVxuLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dDpiZWZvcmUge1xuICBjb250ZW50OiAnXFwyMDNhJztcbn1cbi5jYXJvdXNlbC1pbmRpY2F0b3JzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDEwcHg7XG4gIGxlZnQ6IDUwJTtcbiAgei1pbmRleDogMTU7XG4gIHdpZHRoOiA2MCU7XG4gIG1hcmdpbi1sZWZ0OiAtMzAlO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5jYXJvdXNlbC1pbmRpY2F0b3JzIGxpIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xuICBtYXJnaW46IDFweDtcbiAgdGV4dC1pbmRlbnQ6IC05OTlweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2ZmZjtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwIFxcOTtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcbn1cbi5jYXJvdXNlbC1pbmRpY2F0b3JzIC5hY3RpdmUge1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMnB4O1xuICBoZWlnaHQ6IDEycHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4uY2Fyb3VzZWwtY2FwdGlvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMTUlO1xuICByaWdodDogMTUlO1xuICBib3R0b206IDIwcHg7XG4gIHotaW5kZXg6IDEwO1xuICBwYWRkaW5nLXRvcDogMjBweDtcbiAgcGFkZGluZy1ib3R0b206IDIwcHg7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRleHQtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjYpO1xufVxuLmNhcm91c2VsLWNhcHRpb24gLmJ0biB7XG4gIHRleHQtc2hhZG93OiBub25lO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQsXG4gIC5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCxcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldixcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCB7XG4gICAgd2lkdGg6IDMwcHg7XG4gICAgaGVpZ2h0OiAzMHB4O1xuICAgIG1hcmdpbi10b3A6IC0xNXB4O1xuICAgIGZvbnQtc2l6ZTogMzBweDtcbiAgfVxuICAuY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCxcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldiB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xNXB4O1xuICB9XG4gIC5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCxcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcbiAgfVxuICAuY2Fyb3VzZWwtY2FwdGlvbiB7XG4gICAgbGVmdDogMjAlO1xuICAgIHJpZ2h0OiAyMCU7XG4gICAgcGFkZGluZy1ib3R0b206IDMwcHg7XG4gIH1cbiAgLmNhcm91c2VsLWluZGljYXRvcnMge1xuICAgIGJvdHRvbTogMjBweDtcbiAgfVxufVxuLmNsZWFyZml4OmJlZm9yZSxcbi5jbGVhcmZpeDphZnRlcixcbi5kbC1ob3Jpem9udGFsIGRkOmJlZm9yZSxcbi5kbC1ob3Jpem9udGFsIGRkOmFmdGVyLFxuLmNvbnRhaW5lcjpiZWZvcmUsXG4uY29udGFpbmVyOmFmdGVyLFxuLmNvbnRhaW5lci1mbHVpZDpiZWZvcmUsXG4uY29udGFpbmVyLWZsdWlkOmFmdGVyLFxuLnJvdzpiZWZvcmUsXG4ucm93OmFmdGVyLFxuLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cDpiZWZvcmUsXG4uZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwOmFmdGVyLFxuLmJ0bi10b29sYmFyOmJlZm9yZSxcbi5idG4tdG9vbGJhcjphZnRlcixcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmJlZm9yZSxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmFmdGVyLFxuLm5hdjpiZWZvcmUsXG4ubmF2OmFmdGVyLFxuLm5hdmJhcjpiZWZvcmUsXG4ubmF2YmFyOmFmdGVyLFxuLm5hdmJhci1oZWFkZXI6YmVmb3JlLFxuLm5hdmJhci1oZWFkZXI6YWZ0ZXIsXG4ubmF2YmFyLWNvbGxhcHNlOmJlZm9yZSxcbi5uYXZiYXItY29sbGFwc2U6YWZ0ZXIsXG4ucGFnZXI6YmVmb3JlLFxuLnBhZ2VyOmFmdGVyLFxuLnBhbmVsLWJvZHk6YmVmb3JlLFxuLnBhbmVsLWJvZHk6YWZ0ZXIsXG4ubW9kYWwtZm9vdGVyOmJlZm9yZSxcbi5tb2RhbC1mb290ZXI6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgZGlzcGxheTogdGFibGU7XG59XG4uY2xlYXJmaXg6YWZ0ZXIsXG4uZGwtaG9yaXpvbnRhbCBkZDphZnRlcixcbi5jb250YWluZXI6YWZ0ZXIsXG4uY29udGFpbmVyLWZsdWlkOmFmdGVyLFxuLnJvdzphZnRlcixcbi5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXA6YWZ0ZXIsXG4uYnRuLXRvb2xiYXI6YWZ0ZXIsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDphZnRlcixcbi5uYXY6YWZ0ZXIsXG4ubmF2YmFyOmFmdGVyLFxuLm5hdmJhci1oZWFkZXI6YWZ0ZXIsXG4ubmF2YmFyLWNvbGxhcHNlOmFmdGVyLFxuLnBhZ2VyOmFmdGVyLFxuLnBhbmVsLWJvZHk6YWZ0ZXIsXG4ubW9kYWwtZm9vdGVyOmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG4uY2VudGVyLWJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG59XG4ucHVsbC1yaWdodCB7XG4gIGZsb2F0OiByaWdodCAhaW1wb3J0YW50O1xufVxuLnB1bGwtbGVmdCB7XG4gIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7XG59XG4uaGlkZSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbi5zaG93IHtcbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbn1cbi5pbnZpc2libGUge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG4udGV4dC1oaWRlIHtcbiAgZm9udDogMC8wIGE7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDA7XG59XG4uaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuLmFmZml4IHtcbiAgcG9zaXRpb246IGZpeGVkO1xufVxuQC1tcy12aWV3cG9ydCB7XG4gIHdpZHRoOiBkZXZpY2Utd2lkdGg7XG59XG4udmlzaWJsZS14cyxcbi52aXNpYmxlLXNtLFxuLnZpc2libGUtbWQsXG4udmlzaWJsZS1sZyB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbi52aXNpYmxlLXhzLWJsb2NrLFxuLnZpc2libGUteHMtaW5saW5lLFxuLnZpc2libGUteHMtaW5saW5lLWJsb2NrLFxuLnZpc2libGUtc20tYmxvY2ssXG4udmlzaWJsZS1zbS1pbmxpbmUsXG4udmlzaWJsZS1zbS1pbmxpbmUtYmxvY2ssXG4udmlzaWJsZS1tZC1ibG9jayxcbi52aXNpYmxlLW1kLWlubGluZSxcbi52aXNpYmxlLW1kLWlubGluZS1ibG9jayxcbi52aXNpYmxlLWxnLWJsb2NrLFxuLnZpc2libGUtbGctaW5saW5lLFxuLnZpc2libGUtbGctaW5saW5lLWJsb2NrIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC52aXNpYmxlLXhzIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG4gIHRhYmxlLnZpc2libGUteHMge1xuICAgIGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7XG4gIH1cbiAgdHIudmlzaWJsZS14cyB7XG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGgudmlzaWJsZS14cyxcbiAgdGQudmlzaWJsZS14cyB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLnZpc2libGUteHMtYmxvY2sge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAudmlzaWJsZS14cy1pbmxpbmUge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLnZpc2libGUteHMtaW5saW5lLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgLnZpc2libGUtc20ge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGFibGUudmlzaWJsZS1zbSB7XG4gICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcbiAgfVxuICB0ci52aXNpYmxlLXNtIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDtcbiAgfVxuICB0aC52aXNpYmxlLXNtLFxuICB0ZC52aXNpYmxlLXNtIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC52aXNpYmxlLXNtLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTFweCkge1xuICAudmlzaWJsZS1zbS1pbmxpbmUge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTFweCkge1xuICAudmlzaWJsZS1zbS1pbmxpbmUtYmxvY2sge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMTk5cHgpIHtcbiAgLnZpc2libGUtbWQge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGFibGUudmlzaWJsZS1tZCB7XG4gICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcbiAgfVxuICB0ci52aXNpYmxlLW1kIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDtcbiAgfVxuICB0aC52aXNpYmxlLW1kLFxuICB0ZC52aXNpYmxlLW1kIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCkge1xuICAudmlzaWJsZS1tZC1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KSB7XG4gIC52aXNpYmxlLW1kLWlubGluZSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCkge1xuICAudmlzaWJsZS1tZC1pbmxpbmUtYmxvY2sge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC52aXNpYmxlLWxnIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG4gIHRhYmxlLnZpc2libGUtbGcge1xuICAgIGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7XG4gIH1cbiAgdHIudmlzaWJsZS1sZyB7XG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGgudmlzaWJsZS1sZyxcbiAgdGQudmlzaWJsZS1sZyB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC52aXNpYmxlLWxnLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC52aXNpYmxlLWxnLWlubGluZSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLnZpc2libGUtbGctaW5saW5lLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5oaWRkZW4teHMge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgLmhpZGRlbi1zbSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMTk5cHgpIHtcbiAgLmhpZGRlbi1tZCB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC5oaWRkZW4tbGcge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUtcHJpbnQge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5AbWVkaWEgcHJpbnQge1xuICAudmlzaWJsZS1wcmludCB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxuICB0YWJsZS52aXNpYmxlLXByaW50IHtcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xuICB9XG4gIHRyLnZpc2libGUtcHJpbnQge1xuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xuICB9XG4gIHRoLnZpc2libGUtcHJpbnQsXG4gIHRkLnZpc2libGUtcHJpbnQge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUtcHJpbnQtYmxvY2sge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5AbWVkaWEgcHJpbnQge1xuICAudmlzaWJsZS1wcmludC1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUtcHJpbnQtaW5saW5lIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuQG1lZGlhIHByaW50IHtcbiAgLnZpc2libGUtcHJpbnQtaW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUtcHJpbnQtaW5saW5lLWJsb2NrIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuQG1lZGlhIHByaW50IHtcbiAgLnZpc2libGUtcHJpbnQtaW5saW5lLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIHByaW50IHtcbiAgLmhpZGRlbi1wcmludCB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG4iLCIvKiEgbm9ybWFsaXplLmNzcyB2My4wLjMgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzICovXHJcblxyXG4vL1xyXG4vLyAxLiBTZXQgZGVmYXVsdCBmb250IGZhbWlseSB0byBzYW5zLXNlcmlmLlxyXG4vLyAyLiBQcmV2ZW50IGlPUyBhbmQgSUUgdGV4dCBzaXplIGFkanVzdCBhZnRlciBkZXZpY2Ugb3JpZW50YXRpb24gY2hhbmdlLFxyXG4vLyAgICB3aXRob3V0IGRpc2FibGluZyB1c2VyIHpvb20uXHJcbi8vXHJcblxyXG5odG1sIHtcclxuICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsgLy8gMVxyXG4gIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvLyAyXHJcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvLyAyXHJcbn1cclxuXHJcbi8vXHJcbi8vIFJlbW92ZSBkZWZhdWx0IG1hcmdpbi5cclxuLy9cclxuXHJcbmJvZHkge1xyXG4gIG1hcmdpbjogMDtcclxufVxyXG5cclxuLy8gSFRNTDUgZGlzcGxheSBkZWZpbml0aW9uc1xyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuLy9cclxuLy8gQ29ycmVjdCBgYmxvY2tgIGRpc3BsYXkgbm90IGRlZmluZWQgZm9yIGFueSBIVE1MNSBlbGVtZW50IGluIElFIDgvOS5cclxuLy8gQ29ycmVjdCBgYmxvY2tgIGRpc3BsYXkgbm90IGRlZmluZWQgZm9yIGBkZXRhaWxzYCBvciBgc3VtbWFyeWAgaW4gSUUgMTAvMTFcclxuLy8gYW5kIEZpcmVmb3guXHJcbi8vIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBgbWFpbmAgaW4gSUUgMTEuXHJcbi8vXHJcblxyXG5hcnRpY2xlLFxyXG5hc2lkZSxcclxuZGV0YWlscyxcclxuZmlnY2FwdGlvbixcclxuZmlndXJlLFxyXG5mb290ZXIsXHJcbmhlYWRlcixcclxuaGdyb3VwLFxyXG5tYWluLFxyXG5tZW51LFxyXG5uYXYsXHJcbnNlY3Rpb24sXHJcbnN1bW1hcnkge1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG59XHJcblxyXG4vL1xyXG4vLyAxLiBDb3JyZWN0IGBpbmxpbmUtYmxvY2tgIGRpc3BsYXkgbm90IGRlZmluZWQgaW4gSUUgOC85LlxyXG4vLyAyLiBOb3JtYWxpemUgdmVydGljYWwgYWxpZ25tZW50IG9mIGBwcm9ncmVzc2AgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmEuXHJcbi8vXHJcblxyXG5hdWRpbyxcclxuY2FudmFzLFxyXG5wcm9ncmVzcyxcclxudmlkZW8ge1xyXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jazsgLy8gMVxyXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgLy8gMlxyXG59XHJcblxyXG4vL1xyXG4vLyBQcmV2ZW50IG1vZGVybiBicm93c2VycyBmcm9tIGRpc3BsYXlpbmcgYGF1ZGlvYCB3aXRob3V0IGNvbnRyb2xzLlxyXG4vLyBSZW1vdmUgZXhjZXNzIGhlaWdodCBpbiBpT1MgNSBkZXZpY2VzLlxyXG4vL1xyXG5cclxuYXVkaW86bm90KFtjb250cm9sc10pIHtcclxuICBkaXNwbGF5OiBub25lO1xyXG4gIGhlaWdodDogMDtcclxufVxyXG5cclxuLy9cclxuLy8gQWRkcmVzcyBgW2hpZGRlbl1gIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUUgOC85LzEwLlxyXG4vLyBIaWRlIHRoZSBgdGVtcGxhdGVgIGVsZW1lbnQgaW4gSUUgOC85LzEwLzExLCBTYWZhcmksIGFuZCBGaXJlZm94IDwgMjIuXHJcbi8vXHJcblxyXG5baGlkZGVuXSxcclxudGVtcGxhdGUge1xyXG4gIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuXHJcbi8vIExpbmtzXHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4vL1xyXG4vLyBSZW1vdmUgdGhlIGdyYXkgYmFja2dyb3VuZCBjb2xvciBmcm9tIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cclxuLy9cclxuXHJcbmEge1xyXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG59XHJcblxyXG4vL1xyXG4vLyBJbXByb3ZlIHJlYWRhYmlsaXR5IG9mIGZvY3VzZWQgZWxlbWVudHMgd2hlbiB0aGV5IGFyZSBhbHNvIGluIGFuXHJcbi8vIGFjdGl2ZS9ob3ZlciBzdGF0ZS5cclxuLy9cclxuXHJcbmE6YWN0aXZlLFxyXG5hOmhvdmVyIHtcclxuICBvdXRsaW5lOiAwO1xyXG59XHJcblxyXG4vLyBUZXh0LWxldmVsIHNlbWFudGljc1xyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuLy9cclxuLy8gQWRkcmVzcyBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS8xMC8xMSwgU2FmYXJpLCBhbmQgQ2hyb21lLlxyXG4vL1xyXG5cclxuYWJiclt0aXRsZV0ge1xyXG4gIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQ7XHJcbn1cclxuXHJcbi8vXHJcbi8vIEFkZHJlc3Mgc3R5bGUgc2V0IHRvIGBib2xkZXJgIGluIEZpcmVmb3ggNCssIFNhZmFyaSwgYW5kIENocm9tZS5cclxuLy9cclxuXHJcbmIsXHJcbnN0cm9uZyB7XHJcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuXHJcbi8vXHJcbi8vIEFkZHJlc3Mgc3R5bGluZyBub3QgcHJlc2VudCBpbiBTYWZhcmkgYW5kIENocm9tZS5cclxuLy9cclxuXHJcbmRmbiB7XHJcbiAgZm9udC1zdHlsZTogaXRhbGljO1xyXG59XHJcblxyXG4vL1xyXG4vLyBBZGRyZXNzIHZhcmlhYmxlIGBoMWAgZm9udC1zaXplIGFuZCBtYXJnaW4gd2l0aGluIGBzZWN0aW9uYCBhbmQgYGFydGljbGVgXHJcbi8vIGNvbnRleHRzIGluIEZpcmVmb3ggNCssIFNhZmFyaSwgYW5kIENocm9tZS5cclxuLy9cclxuXHJcbmgxIHtcclxuICBmb250LXNpemU6IDJlbTtcclxuICBtYXJnaW46IDAuNjdlbSAwO1xyXG59XHJcblxyXG4vL1xyXG4vLyBBZGRyZXNzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUUgOC85LlxyXG4vL1xyXG5cclxubWFyayB7XHJcbiAgYmFja2dyb3VuZDogI2ZmMDtcclxuICBjb2xvcjogIzAwMDtcclxufVxyXG5cclxuLy9cclxuLy8gQWRkcmVzcyBpbmNvbnNpc3RlbnQgYW5kIHZhcmlhYmxlIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXHJcbi8vXHJcblxyXG5zbWFsbCB7XHJcbiAgZm9udC1zaXplOiA4MCU7XHJcbn1cclxuXHJcbi8vXHJcbi8vIFByZXZlbnQgYHN1YmAgYW5kIGBzdXBgIGFmZmVjdGluZyBgbGluZS1oZWlnaHRgIGluIGFsbCBicm93c2Vycy5cclxuLy9cclxuXHJcbnN1Yixcclxuc3VwIHtcclxuICBmb250LXNpemU6IDc1JTtcclxuICBsaW5lLWhlaWdodDogMDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xyXG59XHJcblxyXG5zdXAge1xyXG4gIHRvcDogLTAuNWVtO1xyXG59XHJcblxyXG5zdWIge1xyXG4gIGJvdHRvbTogLTAuMjVlbTtcclxufVxyXG5cclxuLy8gRW1iZWRkZWQgY29udGVudFxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuLy9cclxuLy8gUmVtb3ZlIGJvcmRlciB3aGVuIGluc2lkZSBgYWAgZWxlbWVudCBpbiBJRSA4LzkvMTAuXHJcbi8vXHJcblxyXG5pbWcge1xyXG4gIGJvcmRlcjogMDtcclxufVxyXG5cclxuLy9cclxuLy8gQ29ycmVjdCBvdmVyZmxvdyBub3QgaGlkZGVuIGluIElFIDkvMTAvMTEuXHJcbi8vXHJcblxyXG5zdmc6bm90KDpyb290KSB7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxufVxyXG5cclxuLy8gR3JvdXBpbmcgY29udGVudFxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuLy9cclxuLy8gQWRkcmVzcyBtYXJnaW4gbm90IHByZXNlbnQgaW4gSUUgOC85IGFuZCBTYWZhcmkuXHJcbi8vXHJcblxyXG5maWd1cmUge1xyXG4gIG1hcmdpbjogMWVtIDQwcHg7XHJcbn1cclxuXHJcbi8vXHJcbi8vIEFkZHJlc3MgZGlmZmVyZW5jZXMgYmV0d2VlbiBGaXJlZm94IGFuZCBvdGhlciBicm93c2Vycy5cclxuLy9cclxuXHJcbmhyIHtcclxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcclxuICBoZWlnaHQ6IDA7XHJcbn1cclxuXHJcbi8vXHJcbi8vIENvbnRhaW4gb3ZlcmZsb3cgaW4gYWxsIGJyb3dzZXJzLlxyXG4vL1xyXG5cclxucHJlIHtcclxuICBvdmVyZmxvdzogYXV0bztcclxufVxyXG5cclxuLy9cclxuLy8gQWRkcmVzcyBvZGQgYGVtYC11bml0IGZvbnQgc2l6ZSByZW5kZXJpbmcgaW4gYWxsIGJyb3dzZXJzLlxyXG4vL1xyXG5cclxuY29kZSxcclxua2JkLFxyXG5wcmUsXHJcbnNhbXAge1xyXG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTtcclxuICBmb250LXNpemU6IDFlbTtcclxufVxyXG5cclxuLy8gRm9ybXNcclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbi8vXHJcbi8vIEtub3duIGxpbWl0YXRpb246IGJ5IGRlZmF1bHQsIENocm9tZSBhbmQgU2FmYXJpIG9uIE9TIFggYWxsb3cgdmVyeSBsaW1pdGVkXHJcbi8vIHN0eWxpbmcgb2YgYHNlbGVjdGAsIHVubGVzcyBhIGBib3JkZXJgIHByb3BlcnR5IGlzIHNldC5cclxuLy9cclxuXHJcbi8vXHJcbi8vIDEuIENvcnJlY3QgY29sb3Igbm90IGJlaW5nIGluaGVyaXRlZC5cclxuLy8gICAgS25vd24gaXNzdWU6IGFmZmVjdHMgY29sb3Igb2YgZGlzYWJsZWQgZWxlbWVudHMuXHJcbi8vIDIuIENvcnJlY3QgZm9udCBwcm9wZXJ0aWVzIG5vdCBiZWluZyBpbmhlcml0ZWQuXHJcbi8vIDMuIEFkZHJlc3MgbWFyZ2lucyBzZXQgZGlmZmVyZW50bHkgaW4gRmlyZWZveCA0KywgU2FmYXJpLCBhbmQgQ2hyb21lLlxyXG4vL1xyXG5cclxuYnV0dG9uLFxyXG5pbnB1dCxcclxub3B0Z3JvdXAsXHJcbnNlbGVjdCxcclxudGV4dGFyZWEge1xyXG4gIGNvbG9yOiBpbmhlcml0OyAvLyAxXHJcbiAgZm9udDogaW5oZXJpdDsgLy8gMlxyXG4gIG1hcmdpbjogMDsgLy8gM1xyXG59XHJcblxyXG4vL1xyXG4vLyBBZGRyZXNzIGBvdmVyZmxvd2Agc2V0IHRvIGBoaWRkZW5gIGluIElFIDgvOS8xMC8xMS5cclxuLy9cclxuXHJcbmJ1dHRvbiB7XHJcbiAgb3ZlcmZsb3c6IHZpc2libGU7XHJcbn1cclxuXHJcbi8vXHJcbi8vIEFkZHJlc3MgaW5jb25zaXN0ZW50IGB0ZXh0LXRyYW5zZm9ybWAgaW5oZXJpdGFuY2UgZm9yIGBidXR0b25gIGFuZCBgc2VsZWN0YC5cclxuLy8gQWxsIG90aGVyIGZvcm0gY29udHJvbCBlbGVtZW50cyBkbyBub3QgaW5oZXJpdCBgdGV4dC10cmFuc2Zvcm1gIHZhbHVlcy5cclxuLy8gQ29ycmVjdCBgYnV0dG9uYCBzdHlsZSBpbmhlcml0YW5jZSBpbiBGaXJlZm94LCBJRSA4LzkvMTAvMTEsIGFuZCBPcGVyYS5cclxuLy8gQ29ycmVjdCBgc2VsZWN0YCBzdHlsZSBpbmhlcml0YW5jZSBpbiBGaXJlZm94LlxyXG4vL1xyXG5cclxuYnV0dG9uLFxyXG5zZWxlY3Qge1xyXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xyXG59XHJcblxyXG4vL1xyXG4vLyAxLiBBdm9pZCB0aGUgV2ViS2l0IGJ1ZyBpbiBBbmRyb2lkIDQuMC4qIHdoZXJlICgyKSBkZXN0cm95cyBuYXRpdmUgYGF1ZGlvYFxyXG4vLyAgICBhbmQgYHZpZGVvYCBjb250cm9scy5cclxuLy8gMi4gQ29ycmVjdCBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIGBpbnB1dGAgdHlwZXMgaW4gaU9TLlxyXG4vLyAzLiBJbXByb3ZlIHVzYWJpbGl0eSBhbmQgY29uc2lzdGVuY3kgb2YgY3Vyc29yIHN0eWxlIGJldHdlZW4gaW1hZ2UtdHlwZVxyXG4vLyAgICBgaW5wdXRgIGFuZCBvdGhlcnMuXHJcbi8vXHJcblxyXG5idXR0b24sXHJcbmh0bWwgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSwgLy8gMVxyXG5pbnB1dFt0eXBlPVwicmVzZXRcIl0sXHJcbmlucHV0W3R5cGU9XCJzdWJtaXRcIl0ge1xyXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyAvLyAyXHJcbiAgY3Vyc29yOiBwb2ludGVyOyAvLyAzXHJcbn1cclxuXHJcbi8vXHJcbi8vIFJlLXNldCBkZWZhdWx0IGN1cnNvciBmb3IgZGlzYWJsZWQgZWxlbWVudHMuXHJcbi8vXHJcblxyXG5idXR0b25bZGlzYWJsZWRdLFxyXG5odG1sIGlucHV0W2Rpc2FibGVkXSB7XHJcbiAgY3Vyc29yOiBkZWZhdWx0O1xyXG59XHJcblxyXG4vL1xyXG4vLyBSZW1vdmUgaW5uZXIgcGFkZGluZyBhbmQgYm9yZGVyIGluIEZpcmVmb3ggNCsuXHJcbi8vXHJcblxyXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXHJcbmlucHV0OjotbW96LWZvY3VzLWlubmVyIHtcclxuICBib3JkZXI6IDA7XHJcbiAgcGFkZGluZzogMDtcclxufVxyXG5cclxuLy9cclxuLy8gQWRkcmVzcyBGaXJlZm94IDQrIHNldHRpbmcgYGxpbmUtaGVpZ2h0YCBvbiBgaW5wdXRgIHVzaW5nIGAhaW1wb3J0YW50YCBpblxyXG4vLyB0aGUgVUEgc3R5bGVzaGVldC5cclxuLy9cclxuXHJcbmlucHV0IHtcclxuICBsaW5lLWhlaWdodDogbm9ybWFsO1xyXG59XHJcblxyXG4vL1xyXG4vLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGF0dGVtcHQgdG8gc3R5bGUgdGhlc2UgZWxlbWVudHMuXHJcbi8vIEZpcmVmb3gncyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHJlc3BlY3QgYm94LXNpemluZywgcGFkZGluZywgb3Igd2lkdGguXHJcbi8vXHJcbi8vIDEuIEFkZHJlc3MgYm94IHNpemluZyBzZXQgdG8gYGNvbnRlbnQtYm94YCBpbiBJRSA4LzkvMTAuXHJcbi8vIDIuIFJlbW92ZSBleGNlc3MgcGFkZGluZyBpbiBJRSA4LzkvMTAuXHJcbi8vXHJcblxyXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXHJcbmlucHV0W3R5cGU9XCJyYWRpb1wiXSB7XHJcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDsgLy8gMVxyXG4gIHBhZGRpbmc6IDA7IC8vIDJcclxufVxyXG5cclxuLy9cclxuLy8gRml4IHRoZSBjdXJzb3Igc3R5bGUgZm9yIENocm9tZSdzIGluY3JlbWVudC9kZWNyZW1lbnQgYnV0dG9ucy4gRm9yIGNlcnRhaW5cclxuLy8gYGZvbnQtc2l6ZWAgdmFsdWVzIG9mIHRoZSBgaW5wdXRgLCBpdCBjYXVzZXMgdGhlIGN1cnNvciBzdHlsZSBvZiB0aGVcclxuLy8gZGVjcmVtZW50IGJ1dHRvbiB0byBjaGFuZ2UgZnJvbSBgZGVmYXVsdGAgdG8gYHRleHRgLlxyXG4vL1xyXG5cclxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcclxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XHJcbiAgaGVpZ2h0OiBhdXRvO1xyXG59XHJcblxyXG4vL1xyXG4vLyAxLiBBZGRyZXNzIGBhcHBlYXJhbmNlYCBzZXQgdG8gYHNlYXJjaGZpZWxkYCBpbiBTYWZhcmkgYW5kIENocm9tZS5cclxuLy8gMi4gQWRkcmVzcyBgYm94LXNpemluZ2Agc2V0IHRvIGBib3JkZXItYm94YCBpbiBTYWZhcmkgYW5kIENocm9tZS5cclxuLy9cclxuXHJcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xyXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkOyAvLyAxXHJcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7IC8vMlxyXG59XHJcblxyXG4vL1xyXG4vLyBSZW1vdmUgaW5uZXIgcGFkZGluZyBhbmQgc2VhcmNoIGNhbmNlbCBidXR0b24gaW4gU2FmYXJpIGFuZCBDaHJvbWUgb24gT1MgWC5cclxuLy8gU2FmYXJpIChidXQgbm90IENocm9tZSkgY2xpcHMgdGhlIGNhbmNlbCBidXR0b24gd2hlbiB0aGUgc2VhcmNoIGlucHV0IGhhc1xyXG4vLyBwYWRkaW5nIChhbmQgYHRleHRmaWVsZGAgYXBwZWFyYW5jZSkuXHJcbi8vXHJcblxyXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLFxyXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcclxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XHJcbn1cclxuXHJcbi8vXHJcbi8vIERlZmluZSBjb25zaXN0ZW50IGJvcmRlciwgbWFyZ2luLCBhbmQgcGFkZGluZy5cclxuLy9cclxuXHJcbmZpZWxkc2V0IHtcclxuICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xyXG4gIG1hcmdpbjogMCAycHg7XHJcbiAgcGFkZGluZzogMC4zNWVtIDAuNjI1ZW0gMC43NWVtO1xyXG59XHJcblxyXG4vL1xyXG4vLyAxLiBDb3JyZWN0IGBjb2xvcmAgbm90IGJlaW5nIGluaGVyaXRlZCBpbiBJRSA4LzkvMTAvMTEuXHJcbi8vIDIuIFJlbW92ZSBwYWRkaW5nIHNvIHBlb3BsZSBhcmVuJ3QgY2F1Z2h0IG91dCBpZiB0aGV5IHplcm8gb3V0IGZpZWxkc2V0cy5cclxuLy9cclxuXHJcbmxlZ2VuZCB7XHJcbiAgYm9yZGVyOiAwOyAvLyAxXHJcbiAgcGFkZGluZzogMDsgLy8gMlxyXG59XHJcblxyXG4vL1xyXG4vLyBSZW1vdmUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUgOC85LzEwLzExLlxyXG4vL1xyXG5cclxudGV4dGFyZWEge1xyXG4gIG92ZXJmbG93OiBhdXRvO1xyXG59XHJcblxyXG4vL1xyXG4vLyBEb24ndCBpbmhlcml0IHRoZSBgZm9udC13ZWlnaHRgIChhcHBsaWVkIGJ5IGEgcnVsZSBhYm92ZSkuXHJcbi8vIE5PVEU6IHRoZSBkZWZhdWx0IGNhbm5vdCBzYWZlbHkgYmUgY2hhbmdlZCBpbiBDaHJvbWUgYW5kIFNhZmFyaSBvbiBPUyBYLlxyXG4vL1xyXG5cclxub3B0Z3JvdXAge1xyXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG59XHJcblxyXG4vLyBUYWJsZXNcclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbi8vXHJcbi8vIFJlbW92ZSBtb3N0IHNwYWNpbmcgYmV0d2VlbiB0YWJsZSBjZWxscy5cclxuLy9cclxuXHJcbnRhYmxlIHtcclxuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xyXG4gIGJvcmRlci1zcGFjaW5nOiAwO1xyXG59XHJcblxyXG50ZCxcclxudGgge1xyXG4gIHBhZGRpbmc6IDA7XHJcbn1cclxuIiwiLyohIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2g1YnAvaHRtbDUtYm9pbGVycGxhdGUvYmxvYi9tYXN0ZXIvc3JjL2Nzcy9tYWluLmNzcyAqL1xyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gUHJpbnQgc3R5bGVzLlxyXG4vLyBJbmxpbmVkIHRvIGF2b2lkIHRoZSBhZGRpdGlvbmFsIEhUVFAgcmVxdWVzdDogaDVicC5jb20vclxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuQG1lZGlhIHByaW50IHtcclxuICAgICosXHJcbiAgICAqOmJlZm9yZSxcclxuICAgICo6YWZ0ZXIge1xyXG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDsgLy8gQmxhY2sgcHJpbnRzIGZhc3RlcjogaDVicC5jb20vc1xyXG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcclxuICAgICAgICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuICAgIGEsXHJcbiAgICBhOnZpc2l0ZWQge1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gICAgfVxyXG5cclxuICAgIGFbaHJlZl06YWZ0ZXIge1xyXG4gICAgICAgIGNvbnRlbnQ6IFwiIChcIiBhdHRyKGhyZWYpIFwiKVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGFiYnJbdGl0bGVdOmFmdGVyIHtcclxuICAgICAgICBjb250ZW50OiBcIiAoXCIgYXR0cih0aXRsZSkgXCIpXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRG9uJ3Qgc2hvdyBsaW5rcyB0aGF0IGFyZSBmcmFnbWVudCBpZGVudGlmaWVycyxcclxuICAgIC8vIG9yIHVzZSB0aGUgYGphdmFzY3JpcHQ6YCBwc2V1ZG8gcHJvdG9jb2xcclxuICAgIGFbaHJlZl49XCIjXCJdOmFmdGVyLFxyXG4gICAgYVtocmVmXj1cImphdmFzY3JpcHQ6XCJdOmFmdGVyIHtcclxuICAgICAgICBjb250ZW50OiBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHByZSxcclxuICAgIGJsb2NrcXVvdGUge1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7XHJcbiAgICAgICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoZWFkIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7IC8vIGg1YnAuY29tL3RcclxuICAgIH1cclxuXHJcbiAgICB0cixcclxuICAgIGltZyB7XHJcbiAgICAgICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkO1xyXG4gICAgfVxyXG5cclxuICAgIGltZyB7XHJcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcCxcclxuICAgIGgyLFxyXG4gICAgaDMge1xyXG4gICAgICAgIG9ycGhhbnM6IDM7XHJcbiAgICAgICAgd2lkb3dzOiAzO1xyXG4gICAgfVxyXG5cclxuICAgIGgyLFxyXG4gICAgaDMge1xyXG4gICAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEJvb3RzdHJhcCBzcGVjaWZpYyBjaGFuZ2VzIHN0YXJ0XHJcblxyXG4gICAgLy8gQm9vdHN0cmFwIGNvbXBvbmVudHNcclxuICAgIC5uYXZiYXIge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICB9XHJcbiAgICAuYnRuLFxyXG4gICAgLmRyb3B1cCA+IC5idG4ge1xyXG4gICAgICAgID4gLmNhcmV0IHtcclxuICAgICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogIzAwMCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC5sYWJlbCB7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcclxuICAgIH1cclxuXHJcbiAgICAudGFibGUge1xyXG4gICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UgIWltcG9ydGFudDtcclxuXHJcbiAgICAgICAgdGQsXHJcbiAgICAgICAgdGgge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLnRhYmxlLWJvcmRlcmVkIHtcclxuICAgICAgICB0aCxcclxuICAgICAgICB0ZCB7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQm9vdHN0cmFwIHNwZWNpZmljIGNoYW5nZXMgZW5kXHJcbn1cclxuIiwiLy9cclxuLy8gR2x5cGhpY29ucyBmb3IgQm9vdHN0cmFwXHJcbi8vXHJcbi8vIFNpbmNlIGljb25zIGFyZSBmb250cywgdGhleSBjYW4gYmUgcGxhY2VkIGFueXdoZXJlIHRleHQgaXMgcGxhY2VkIGFuZCBhcmVcclxuLy8gdGh1cyBhdXRvbWF0aWNhbGx5IHNpemVkIHRvIG1hdGNoIHRoZSBzdXJyb3VuZGluZyBjaGlsZC4gVG8gdXNlLCBjcmVhdGUgYW5cclxuLy8gaW5saW5lIGVsZW1lbnQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY2xhc3NlcywgbGlrZSBzbzpcclxuLy9cclxuLy8gPGEgaHJlZj1cIiNcIj48c3BhbiBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tc3RhclwiPjwvc3Bhbj4gU3RhcjwvYT5cclxuXHJcbi8vIEltcG9ydCB0aGUgZm9udHNcclxuQGZvbnQtZmFjZSB7XHJcbiAgZm9udC1mYW1pbHk6ICdHbHlwaGljb25zIEhhbGZsaW5ncyc7XHJcbiAgc3JjOiB1cmwoJ0B7aWNvbi1mb250LXBhdGh9QHtpY29uLWZvbnQtbmFtZX0uZW90Jyk7XHJcbiAgc3JjOiB1cmwoJ0B7aWNvbi1mb250LXBhdGh9QHtpY29uLWZvbnQtbmFtZX0uZW90PyNpZWZpeCcpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcclxuICAgICAgIHVybCgnQHtpY29uLWZvbnQtcGF0aH1Ae2ljb24tZm9udC1uYW1lfS53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcclxuICAgICAgIHVybCgnQHtpY29uLWZvbnQtcGF0aH1Ae2ljb24tZm9udC1uYW1lfS53b2ZmJykgZm9ybWF0KCd3b2ZmJyksXHJcbiAgICAgICB1cmwoJ0B7aWNvbi1mb250LXBhdGh9QHtpY29uLWZvbnQtbmFtZX0udHRmJykgZm9ybWF0KCd0cnVldHlwZScpLFxyXG4gICAgICAgdXJsKCdAe2ljb24tZm9udC1wYXRofUB7aWNvbi1mb250LW5hbWV9LnN2ZyNAe2ljb24tZm9udC1zdmctaWR9JykgZm9ybWF0KCdzdmcnKTtcclxufVxyXG5cclxuLy8gQ2F0Y2hhbGwgYmFzZWNsYXNzXHJcbi5nbHlwaGljb24ge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB0b3A6IDFweDtcclxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgZm9udC1mYW1pbHk6ICdHbHlwaGljb25zIEhhbGZsaW5ncyc7XHJcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xyXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcbiAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XHJcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcclxufVxyXG5cclxuLy8gSW5kaXZpZHVhbCBpY29uc1xyXG4uZ2x5cGhpY29uLWFzdGVyaXNrICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyYVwiOyB9IH1cclxuLmdseXBoaWNvbi1wbHVzICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMmJcIjsgfSB9XHJcbi5nbHlwaGljb24tZXVybyxcclxuLmdseXBoaWNvbi1ldXIgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjBhY1wiOyB9IH1cclxuLmdseXBoaWNvbi1taW51cyAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjIxMlwiOyB9IH1cclxuLmdseXBoaWNvbi1jbG91ZCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjYwMVwiOyB9IH1cclxuLmdseXBoaWNvbi1lbnZlbG9wZSAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjcwOVwiOyB9IH1cclxuLmdseXBoaWNvbi1wZW5jaWwgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjcwZlwiOyB9IH1cclxuLmdseXBoaWNvbi1nbGFzcyAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwMVwiOyB9IH1cclxuLmdseXBoaWNvbi1tdXNpYyAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwMlwiOyB9IH1cclxuLmdseXBoaWNvbi1zZWFyY2ggICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwM1wiOyB9IH1cclxuLmdseXBoaWNvbi1oZWFydCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwNVwiOyB9IH1cclxuLmdseXBoaWNvbi1zdGFyICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwNlwiOyB9IH1cclxuLmdseXBoaWNvbi1zdGFyLWVtcHR5ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwN1wiOyB9IH1cclxuLmdseXBoaWNvbi11c2VyICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwOFwiOyB9IH1cclxuLmdseXBoaWNvbi1maWxtICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwOVwiOyB9IH1cclxuLmdseXBoaWNvbi10aC1sYXJnZSAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxMFwiOyB9IH1cclxuLmdseXBoaWNvbi10aCAgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxMVwiOyB9IH1cclxuLmdseXBoaWNvbi10aC1saXN0ICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxMlwiOyB9IH1cclxuLmdseXBoaWNvbi1vayAgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxM1wiOyB9IH1cclxuLmdseXBoaWNvbi1yZW1vdmUgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxNFwiOyB9IH1cclxuLmdseXBoaWNvbi16b29tLWluICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxNVwiOyB9IH1cclxuLmdseXBoaWNvbi16b29tLW91dCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxNlwiOyB9IH1cclxuLmdseXBoaWNvbi1vZmYgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxN1wiOyB9IH1cclxuLmdseXBoaWNvbi1zaWduYWwgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxOFwiOyB9IH1cclxuLmdseXBoaWNvbi1jb2cgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxOVwiOyB9IH1cclxuLmdseXBoaWNvbi10cmFzaCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyMFwiOyB9IH1cclxuLmdseXBoaWNvbi1ob21lICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyMVwiOyB9IH1cclxuLmdseXBoaWNvbi1maWxlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyMlwiOyB9IH1cclxuLmdseXBoaWNvbi10aW1lICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyM1wiOyB9IH1cclxuLmdseXBoaWNvbi1yb2FkICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyNFwiOyB9IH1cclxuLmdseXBoaWNvbi1kb3dubG9hZC1hbHQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyNVwiOyB9IH1cclxuLmdseXBoaWNvbi1kb3dubG9hZCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyNlwiOyB9IH1cclxuLmdseXBoaWNvbi11cGxvYWQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyN1wiOyB9IH1cclxuLmdseXBoaWNvbi1pbmJveCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyOFwiOyB9IH1cclxuLmdseXBoaWNvbi1wbGF5LWNpcmNsZSAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyOVwiOyB9IH1cclxuLmdseXBoaWNvbi1yZXBlYXQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzMFwiOyB9IH1cclxuLmdseXBoaWNvbi1yZWZyZXNoICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzMVwiOyB9IH1cclxuLmdseXBoaWNvbi1saXN0LWFsdCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzMlwiOyB9IH1cclxuLmdseXBoaWNvbi1sb2NrICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzM1wiOyB9IH1cclxuLmdseXBoaWNvbi1mbGFnICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzNFwiOyB9IH1cclxuLmdseXBoaWNvbi1oZWFkcGhvbmVzICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzNVwiOyB9IH1cclxuLmdseXBoaWNvbi12b2x1bWUtb2ZmICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzNlwiOyB9IH1cclxuLmdseXBoaWNvbi12b2x1bWUtZG93biAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzN1wiOyB9IH1cclxuLmdseXBoaWNvbi12b2x1bWUtdXAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzOFwiOyB9IH1cclxuLmdseXBoaWNvbi1xcmNvZGUgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzOVwiOyB9IH1cclxuLmdseXBoaWNvbi1iYXJjb2RlICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0MFwiOyB9IH1cclxuLmdseXBoaWNvbi10YWcgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0MVwiOyB9IH1cclxuLmdseXBoaWNvbi10YWdzICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0MlwiOyB9IH1cclxuLmdseXBoaWNvbi1ib29rICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0M1wiOyB9IH1cclxuLmdseXBoaWNvbi1ib29rbWFyayAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0NFwiOyB9IH1cclxuLmdseXBoaWNvbi1wcmludCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0NVwiOyB9IH1cclxuLmdseXBoaWNvbi1jYW1lcmEgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0NlwiOyB9IH1cclxuLmdseXBoaWNvbi1mb250ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0N1wiOyB9IH1cclxuLmdseXBoaWNvbi1ib2xkICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0OFwiOyB9IH1cclxuLmdseXBoaWNvbi1pdGFsaWMgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0OVwiOyB9IH1cclxuLmdseXBoaWNvbi10ZXh0LWhlaWdodCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1MFwiOyB9IH1cclxuLmdseXBoaWNvbi10ZXh0LXdpZHRoICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1MVwiOyB9IH1cclxuLmdseXBoaWNvbi1hbGlnbi1sZWZ0ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1MlwiOyB9IH1cclxuLmdseXBoaWNvbi1hbGlnbi1jZW50ZXIgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1M1wiOyB9IH1cclxuLmdseXBoaWNvbi1hbGlnbi1yaWdodCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1NFwiOyB9IH1cclxuLmdseXBoaWNvbi1hbGlnbi1qdXN0aWZ5ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1NVwiOyB9IH1cclxuLmdseXBoaWNvbi1saXN0ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1NlwiOyB9IH1cclxuLmdseXBoaWNvbi1pbmRlbnQtbGVmdCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1N1wiOyB9IH1cclxuLmdseXBoaWNvbi1pbmRlbnQtcmlnaHQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1OFwiOyB9IH1cclxuLmdseXBoaWNvbi1mYWNldGltZS12aWRlbyAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1OVwiOyB9IH1cclxuLmdseXBoaWNvbi1waWN0dXJlICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2MFwiOyB9IH1cclxuLmdseXBoaWNvbi1tYXAtbWFya2VyICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2MlwiOyB9IH1cclxuLmdseXBoaWNvbi1hZGp1c3QgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2M1wiOyB9IH1cclxuLmdseXBoaWNvbi10aW50ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2NFwiOyB9IH1cclxuLmdseXBoaWNvbi1lZGl0ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2NVwiOyB9IH1cclxuLmdseXBoaWNvbi1zaGFyZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2NlwiOyB9IH1cclxuLmdseXBoaWNvbi1jaGVjayAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2N1wiOyB9IH1cclxuLmdseXBoaWNvbi1tb3ZlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2OFwiOyB9IH1cclxuLmdseXBoaWNvbi1zdGVwLWJhY2t3YXJkICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2OVwiOyB9IH1cclxuLmdseXBoaWNvbi1mYXN0LWJhY2t3YXJkICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3MFwiOyB9IH1cclxuLmdseXBoaWNvbi1iYWNrd2FyZCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3MVwiOyB9IH1cclxuLmdseXBoaWNvbi1wbGF5ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3MlwiOyB9IH1cclxuLmdseXBoaWNvbi1wYXVzZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3M1wiOyB9IH1cclxuLmdseXBoaWNvbi1zdG9wICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3NFwiOyB9IH1cclxuLmdseXBoaWNvbi1mb3J3YXJkICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3NVwiOyB9IH1cclxuLmdseXBoaWNvbi1mYXN0LWZvcndhcmQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3NlwiOyB9IH1cclxuLmdseXBoaWNvbi1zdGVwLWZvcndhcmQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3N1wiOyB9IH1cclxuLmdseXBoaWNvbi1lamVjdCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3OFwiOyB9IH1cclxuLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3OVwiOyB9IH1cclxuLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4MFwiOyB9IH1cclxuLmdseXBoaWNvbi1wbHVzLXNpZ24gICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4MVwiOyB9IH1cclxuLmdseXBoaWNvbi1taW51cy1zaWduICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4MlwiOyB9IH1cclxuLmdseXBoaWNvbi1yZW1vdmUtc2lnbiAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4M1wiOyB9IH1cclxuLmdseXBoaWNvbi1vay1zaWduICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4NFwiOyB9IH1cclxuLmdseXBoaWNvbi1xdWVzdGlvbi1zaWduICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4NVwiOyB9IH1cclxuLmdseXBoaWNvbi1pbmZvLXNpZ24gICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4NlwiOyB9IH1cclxuLmdseXBoaWNvbi1zY3JlZW5zaG90ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4N1wiOyB9IH1cclxuLmdseXBoaWNvbi1yZW1vdmUtY2lyY2xlICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4OFwiOyB9IH1cclxuLmdseXBoaWNvbi1vay1jaXJjbGUgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4OVwiOyB9IH1cclxuLmdseXBoaWNvbi1iYW4tY2lyY2xlICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5MFwiOyB9IH1cclxuLmdseXBoaWNvbi1hcnJvdy1sZWZ0ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5MVwiOyB9IH1cclxuLmdseXBoaWNvbi1hcnJvdy1yaWdodCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5MlwiOyB9IH1cclxuLmdseXBoaWNvbi1hcnJvdy11cCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5M1wiOyB9IH1cclxuLmdseXBoaWNvbi1hcnJvdy1kb3duICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5NFwiOyB9IH1cclxuLmdseXBoaWNvbi1zaGFyZS1hbHQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5NVwiOyB9IH1cclxuLmdseXBoaWNvbi1yZXNpemUtZnVsbCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5NlwiOyB9IH1cclxuLmdseXBoaWNvbi1yZXNpemUtc21hbGwgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5N1wiOyB9IH1cclxuLmdseXBoaWNvbi1leGNsYW1hdGlvbi1zaWduICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwMVwiOyB9IH1cclxuLmdseXBoaWNvbi1naWZ0ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwMlwiOyB9IH1cclxuLmdseXBoaWNvbi1sZWFmICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwM1wiOyB9IH1cclxuLmdseXBoaWNvbi1maXJlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwNFwiOyB9IH1cclxuLmdseXBoaWNvbi1leWUtb3BlbiAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwNVwiOyB9IH1cclxuLmdseXBoaWNvbi1leWUtY2xvc2UgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwNlwiOyB9IH1cclxuLmdseXBoaWNvbi13YXJuaW5nLXNpZ24gICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwN1wiOyB9IH1cclxuLmdseXBoaWNvbi1wbGFuZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwOFwiOyB9IH1cclxuLmdseXBoaWNvbi1jYWxlbmRhciAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwOVwiOyB9IH1cclxuLmdseXBoaWNvbi1yYW5kb20gICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExMFwiOyB9IH1cclxuLmdseXBoaWNvbi1jb21tZW50ICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExMVwiOyB9IH1cclxuLmdseXBoaWNvbi1tYWduZXQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExMlwiOyB9IH1cclxuLmdseXBoaWNvbi1jaGV2cm9uLXVwICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExM1wiOyB9IH1cclxuLmdseXBoaWNvbi1jaGV2cm9uLWRvd24gICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExNFwiOyB9IH1cclxuLmdseXBoaWNvbi1yZXR3ZWV0ICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExNVwiOyB9IH1cclxuLmdseXBoaWNvbi1zaG9wcGluZy1jYXJ0ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExNlwiOyB9IH1cclxuLmdseXBoaWNvbi1mb2xkZXItY2xvc2UgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExN1wiOyB9IH1cclxuLmdseXBoaWNvbi1mb2xkZXItb3BlbiAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExOFwiOyB9IH1cclxuLmdseXBoaWNvbi1yZXNpemUtdmVydGljYWwgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExOVwiOyB9IH1cclxuLmdseXBoaWNvbi1yZXNpemUtaG9yaXpvbnRhbCAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyMFwiOyB9IH1cclxuLmdseXBoaWNvbi1oZGQgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyMVwiOyB9IH1cclxuLmdseXBoaWNvbi1idWxsaG9ybiAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyMlwiOyB9IH1cclxuLmdseXBoaWNvbi1iZWxsICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyM1wiOyB9IH1cclxuLmdseXBoaWNvbi1jZXJ0aWZpY2F0ZSAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyNFwiOyB9IH1cclxuLmdseXBoaWNvbi10aHVtYnMtdXAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyNVwiOyB9IH1cclxuLmdseXBoaWNvbi10aHVtYnMtZG93biAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyNlwiOyB9IH1cclxuLmdseXBoaWNvbi1oYW5kLXJpZ2h0ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyN1wiOyB9IH1cclxuLmdseXBoaWNvbi1oYW5kLWxlZnQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyOFwiOyB9IH1cclxuLmdseXBoaWNvbi1oYW5kLXVwICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyOVwiOyB9IH1cclxuLmdseXBoaWNvbi1oYW5kLWRvd24gICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzMFwiOyB9IH1cclxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctcmlnaHQgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzMVwiOyB9IH1cclxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctbGVmdCAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzMlwiOyB9IH1cclxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctdXAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzM1wiOyB9IH1cclxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctZG93biAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzNFwiOyB9IH1cclxuLmdseXBoaWNvbi1nbG9iZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzNVwiOyB9IH1cclxuLmdseXBoaWNvbi13cmVuY2ggICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzNlwiOyB9IH1cclxuLmdseXBoaWNvbi10YXNrcyAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzN1wiOyB9IH1cclxuLmdseXBoaWNvbi1maWx0ZXIgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzOFwiOyB9IH1cclxuLmdseXBoaWNvbi1icmllZmNhc2UgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzOVwiOyB9IH1cclxuLmdseXBoaWNvbi1mdWxsc2NyZWVuICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0MFwiOyB9IH1cclxuLmdseXBoaWNvbi1kYXNoYm9hcmQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0MVwiOyB9IH1cclxuLmdseXBoaWNvbi1wYXBlcmNsaXAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0MlwiOyB9IH1cclxuLmdseXBoaWNvbi1oZWFydC1lbXB0eSAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0M1wiOyB9IH1cclxuLmdseXBoaWNvbi1saW5rICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0NFwiOyB9IH1cclxuLmdseXBoaWNvbi1waG9uZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0NVwiOyB9IH1cclxuLmdseXBoaWNvbi1wdXNocGluICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0NlwiOyB9IH1cclxuLmdseXBoaWNvbi11c2QgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0OFwiOyB9IH1cclxuLmdseXBoaWNvbi1nYnAgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0OVwiOyB9IH1cclxuLmdseXBoaWNvbi1zb3J0ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1MFwiOyB9IH1cclxuLmdseXBoaWNvbi1zb3J0LWJ5LWFscGhhYmV0ICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1MVwiOyB9IH1cclxuLmdseXBoaWNvbi1zb3J0LWJ5LWFscGhhYmV0LWFsdCAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1MlwiOyB9IH1cclxuLmdseXBoaWNvbi1zb3J0LWJ5LW9yZGVyICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1M1wiOyB9IH1cclxuLmdseXBoaWNvbi1zb3J0LWJ5LW9yZGVyLWFsdCAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1NFwiOyB9IH1cclxuLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXMgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1NVwiOyB9IH1cclxuLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXMtYWx0IHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1NlwiOyB9IH1cclxuLmdseXBoaWNvbi11bmNoZWNrZWQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1N1wiOyB9IH1cclxuLmdseXBoaWNvbi1leHBhbmQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1OFwiOyB9IH1cclxuLmdseXBoaWNvbi1jb2xsYXBzZS1kb3duICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1OVwiOyB9IH1cclxuLmdseXBoaWNvbi1jb2xsYXBzZS11cCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2MFwiOyB9IH1cclxuLmdseXBoaWNvbi1sb2ctaW4gICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2MVwiOyB9IH1cclxuLmdseXBoaWNvbi1mbGFzaCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2MlwiOyB9IH1cclxuLmdseXBoaWNvbi1sb2ctb3V0ICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2M1wiOyB9IH1cclxuLmdseXBoaWNvbi1uZXctd2luZG93ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2NFwiOyB9IH1cclxuLmdseXBoaWNvbi1yZWNvcmQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2NVwiOyB9IH1cclxuLmdseXBoaWNvbi1zYXZlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2NlwiOyB9IH1cclxuLmdseXBoaWNvbi1vcGVuICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2N1wiOyB9IH1cclxuLmdseXBoaWNvbi1zYXZlZCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2OFwiOyB9IH1cclxuLmdseXBoaWNvbi1pbXBvcnQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2OVwiOyB9IH1cclxuLmdseXBoaWNvbi1leHBvcnQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3MFwiOyB9IH1cclxuLmdseXBoaWNvbi1zZW5kICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3MVwiOyB9IH1cclxuLmdseXBoaWNvbi1mbG9wcHktZGlzayAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3MlwiOyB9IH1cclxuLmdseXBoaWNvbi1mbG9wcHktc2F2ZWQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3M1wiOyB9IH1cclxuLmdseXBoaWNvbi1mbG9wcHktcmVtb3ZlICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3NFwiOyB9IH1cclxuLmdseXBoaWNvbi1mbG9wcHktc2F2ZSAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3NVwiOyB9IH1cclxuLmdseXBoaWNvbi1mbG9wcHktb3BlbiAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3NlwiOyB9IH1cclxuLmdseXBoaWNvbi1jcmVkaXQtY2FyZCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3N1wiOyB9IH1cclxuLmdseXBoaWNvbi10cmFuc2ZlciAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3OFwiOyB9IH1cclxuLmdseXBoaWNvbi1jdXRsZXJ5ICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3OVwiOyB9IH1cclxuLmdseXBoaWNvbi1oZWFkZXIgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4MFwiOyB9IH1cclxuLmdseXBoaWNvbi1jb21wcmVzc2VkICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4MVwiOyB9IH1cclxuLmdseXBoaWNvbi1lYXJwaG9uZSAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4MlwiOyB9IH1cclxuLmdseXBoaWNvbi1waG9uZS1hbHQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4M1wiOyB9IH1cclxuLmdseXBoaWNvbi10b3dlciAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4NFwiOyB9IH1cclxuLmdseXBoaWNvbi1zdGF0cyAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4NVwiOyB9IH1cclxuLmdseXBoaWNvbi1zZC12aWRlbyAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4NlwiOyB9IH1cclxuLmdseXBoaWNvbi1oZC12aWRlbyAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4N1wiOyB9IH1cclxuLmdseXBoaWNvbi1zdWJ0aXRsZXMgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4OFwiOyB9IH1cclxuLmdseXBoaWNvbi1zb3VuZC1zdGVyZW8gICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4OVwiOyB9IH1cclxuLmdseXBoaWNvbi1zb3VuZC1kb2xieSAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5MFwiOyB9IH1cclxuLmdseXBoaWNvbi1zb3VuZC01LTEgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5MVwiOyB9IH1cclxuLmdseXBoaWNvbi1zb3VuZC02LTEgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5MlwiOyB9IH1cclxuLmdseXBoaWNvbi1zb3VuZC03LTEgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5M1wiOyB9IH1cclxuLmdseXBoaWNvbi1jb3B5cmlnaHQtbWFyayAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5NFwiOyB9IH1cclxuLmdseXBoaWNvbi1yZWdpc3RyYXRpb24tbWFyayAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5NVwiOyB9IH1cclxuLmdseXBoaWNvbi1jbG91ZC1kb3dubG9hZCAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5N1wiOyB9IH1cclxuLmdseXBoaWNvbi1jbG91ZC11cGxvYWQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5OFwiOyB9IH1cclxuLmdseXBoaWNvbi10cmVlLWNvbmlmZXIgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5OVwiOyB9IH1cclxuLmdseXBoaWNvbi10cmVlLWRlY2lkdW91cyAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwMFwiOyB9IH1cclxuLmdseXBoaWNvbi1jZCAgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwMVwiOyB9IH1cclxuLmdseXBoaWNvbi1zYXZlLWZpbGUgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwMlwiOyB9IH1cclxuLmdseXBoaWNvbi1vcGVuLWZpbGUgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwM1wiOyB9IH1cclxuLmdseXBoaWNvbi1sZXZlbC11cCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwNFwiOyB9IH1cclxuLmdseXBoaWNvbi1jb3B5ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwNVwiOyB9IH1cclxuLmdseXBoaWNvbi1wYXN0ZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwNlwiOyB9IH1cclxuLy8gVGhlIGZvbGxvd2luZyAyIEdseXBoaWNvbnMgYXJlIG9taXR0ZWQgZm9yIHRoZSB0aW1lIGJlaW5nIGJlY2F1c2VcclxuLy8gdGhleSBjdXJyZW50bHkgdXNlIFVuaWNvZGUgY29kZXBvaW50cyB0aGF0IGFyZSBvdXRzaWRlIHRoZVxyXG4vLyBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKEJNUCkuIE9sZGVyIGJ1Z2d5IHZlcnNpb25zIG9mIFdlYktpdCBjYW4ndCBoYW5kbGVcclxuLy8gbm9uLUJNUCBjb2RlcG9pbnRzIGluIENTUyBzdHJpbmcgZXNjYXBlcywgYW5kIHRodXMgY2FuJ3QgZGlzcGxheSB0aGVzZSB0d28gaWNvbnMuXHJcbi8vIE5vdGFibHksIHRoZSBidWcgYWZmZWN0cyBzb21lIG9sZGVyIHZlcnNpb25zIG9mIHRoZSBBbmRyb2lkIEJyb3dzZXIuXHJcbi8vIE1vcmUgaW5mbzogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMDEwNlxyXG4vLyAuZ2x5cGhpY29uLWRvb3IgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwxZjZhYVwiOyB9IH1cclxuLy8gLmdseXBoaWNvbi1rZXkgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMWY1MTFcIjsgfSB9XHJcbi5nbHlwaGljb24tYWxlcnQgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDlcIjsgfSB9XHJcbi5nbHlwaGljb24tZXF1YWxpemVyICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTBcIjsgfSB9XHJcbi5nbHlwaGljb24ta2luZyAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTFcIjsgfSB9XHJcbi5nbHlwaGljb24tcXVlZW4gICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTJcIjsgfSB9XHJcbi5nbHlwaGljb24tcGF3biAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTNcIjsgfSB9XHJcbi5nbHlwaGljb24tYmlzaG9wICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTRcIjsgfSB9XHJcbi5nbHlwaGljb24ta25pZ2h0ICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTVcIjsgfSB9XHJcbi5nbHlwaGljb24tYmFieS1mb3JtdWxhICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTZcIjsgfSB9XHJcbi5nbHlwaGljb24tdGVudCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDI2ZmFcIjsgfSB9XHJcbi5nbHlwaGljb24tYmxhY2tib2FyZCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMThcIjsgfSB9XHJcbi5nbHlwaGljb24tYmVkICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTlcIjsgfSB9XHJcbi5nbHlwaGljb24tYXBwbGUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGY4ZmZcIjsgfSB9XHJcbi5nbHlwaGljb24tZXJhc2UgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjFcIjsgfSB9XHJcbi5nbHlwaGljb24taG91cmdsYXNzICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDIzMWJcIjsgfSB9XHJcbi5nbHlwaGljb24tbGFtcCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjNcIjsgfSB9XHJcbi5nbHlwaGljb24tZHVwbGljYXRlICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjRcIjsgfSB9XHJcbi5nbHlwaGljb24tcGlnZ3ktYmFuayAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjVcIjsgfSB9XHJcbi5nbHlwaGljb24tc2Npc3NvcnMgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjZcIjsgfSB9XHJcbi5nbHlwaGljb24tYml0Y29pbiAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjdcIjsgfSB9XHJcbi5nbHlwaGljb24tYnRjICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjdcIjsgfSB9XHJcbi5nbHlwaGljb24teGJ0ICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjdcIjsgfSB9XHJcbi5nbHlwaGljb24teWVuICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDAwYTVcIjsgfSB9XHJcbi5nbHlwaGljb24tanB5ICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDAwYTVcIjsgfSB9XHJcbi5nbHlwaGljb24tcnVibGUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDIwYmRcIjsgfSB9XHJcbi5nbHlwaGljb24tcnViICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDIwYmRcIjsgfSB9XHJcbi5nbHlwaGljb24tc2NhbGUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzBcIjsgfSB9XHJcbi5nbHlwaGljb24taWNlLWxvbGx5ICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzFcIjsgfSB9XHJcbi5nbHlwaGljb24taWNlLWxvbGx5LXRhc3RlZCAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzJcIjsgfSB9XHJcbi5nbHlwaGljb24tZWR1Y2F0aW9uICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzNcIjsgfSB9XHJcbi5nbHlwaGljb24tb3B0aW9uLWhvcml6b250YWwgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzRcIjsgfSB9XHJcbi5nbHlwaGljb24tb3B0aW9uLXZlcnRpY2FsICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzVcIjsgfSB9XHJcbi5nbHlwaGljb24tbWVudS1oYW1idXJnZXIgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzZcIjsgfSB9XHJcbi5nbHlwaGljb24tbW9kYWwtd2luZG93ICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzdcIjsgfSB9XHJcbi5nbHlwaGljb24tb2lsICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzhcIjsgfSB9XHJcbi5nbHlwaGljb24tZ3JhaW4gICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzlcIjsgfSB9XHJcbi5nbHlwaGljb24tc3VuZ2xhc3NlcyAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDBcIjsgfSB9XHJcbi5nbHlwaGljb24tdGV4dC1zaXplICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDFcIjsgfSB9XHJcbi5nbHlwaGljb24tdGV4dC1jb2xvciAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDJcIjsgfSB9XHJcbi5nbHlwaGljb24tdGV4dC1iYWNrZ3JvdW5kICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDNcIjsgfSB9XHJcbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLXRvcCAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDRcIjsgfSB9XHJcbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWJvdHRvbSAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDVcIjsgfSB9XHJcbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWhvcml6b250YWx7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDZcIjsgfSB9XHJcbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWxlZnQgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDdcIjsgfSB9XHJcbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLXZlcnRpY2FsICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDhcIjsgfSB9XHJcbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLXJpZ2h0ICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDlcIjsgfSB9XHJcbi5nbHlwaGljb24tdHJpYW5nbGUtcmlnaHQgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTBcIjsgfSB9XHJcbi5nbHlwaGljb24tdHJpYW5nbGUtbGVmdCAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTFcIjsgfSB9XHJcbi5nbHlwaGljb24tdHJpYW5nbGUtYm90dG9tICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTJcIjsgfSB9XHJcbi5nbHlwaGljb24tdHJpYW5nbGUtdG9wICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTNcIjsgfSB9XHJcbi5nbHlwaGljb24tY29uc29sZSAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTRcIjsgfSB9XHJcbi5nbHlwaGljb24tc3VwZXJzY3JpcHQgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTVcIjsgfSB9XHJcbi5nbHlwaGljb24tc3Vic2NyaXB0ICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTZcIjsgfSB9XHJcbi5nbHlwaGljb24tbWVudS1sZWZ0ICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTdcIjsgfSB9XHJcbi5nbHlwaGljb24tbWVudS1yaWdodCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNThcIjsgfSB9XHJcbi5nbHlwaGljb24tbWVudS1kb3duICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTlcIjsgfSB9XHJcbi5nbHlwaGljb24tbWVudS11cCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNjBcIjsgfSB9XHJcbiIsIi8vXHJcbi8vIFNjYWZmb2xkaW5nXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuLy8gUmVzZXQgdGhlIGJveC1zaXppbmdcclxuLy9cclxuLy8gSGVhZHMgdXAhIFRoaXMgcmVzZXQgbWF5IGNhdXNlIGNvbmZsaWN0cyB3aXRoIHNvbWUgdGhpcmQtcGFydHkgd2lkZ2V0cy5cclxuLy8gRm9yIHJlY29tbWVuZGF0aW9ucyBvbiByZXNvbHZpbmcgc3VjaCBjb25mbGljdHMsIHNlZVxyXG4vLyBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9nZXR0aW5nLXN0YXJ0ZWQvI3RoaXJkLWJveC1zaXppbmdcclxuKiB7XHJcbiAgLmJveC1zaXppbmcoYm9yZGVyLWJveCk7XHJcbn1cclxuKjpiZWZvcmUsXHJcbio6YWZ0ZXIge1xyXG4gIC5ib3gtc2l6aW5nKGJvcmRlci1ib3gpO1xyXG59XHJcblxyXG5cclxuLy8gQm9keSByZXNldFxyXG5cclxuaHRtbCB7XHJcbiAgZm9udC1zaXplOiAxMHB4O1xyXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLDAsMCwwKTtcclxufVxyXG5cclxuYm9keSB7XHJcbiAgZm9udC1mYW1pbHk6IEBmb250LWZhbWlseS1iYXNlO1xyXG4gIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1iYXNlO1xyXG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcclxuICBjb2xvcjogQHRleHQtY29sb3I7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogQGJvZHktYmc7XHJcbn1cclxuXHJcbi8vIFJlc2V0IGZvbnRzIGZvciByZWxldmFudCBlbGVtZW50c1xyXG5pbnB1dCxcclxuYnV0dG9uLFxyXG5zZWxlY3QsXHJcbnRleHRhcmVhIHtcclxuICBmb250LWZhbWlseTogaW5oZXJpdDtcclxuICBmb250LXNpemU6IGluaGVyaXQ7XHJcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XHJcbn1cclxuXHJcblxyXG4vLyBMaW5rc1xyXG5cclxuYSB7XHJcbiAgY29sb3I6IEBsaW5rLWNvbG9yO1xyXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuXHJcbiAgJjpob3ZlcixcclxuICAmOmZvY3VzIHtcclxuICAgIGNvbG9yOiBAbGluay1ob3Zlci1jb2xvcjtcclxuICAgIHRleHQtZGVjb3JhdGlvbjogQGxpbmstaG92ZXItZGVjb3JhdGlvbjtcclxuICB9XHJcblxyXG4gICY6Zm9jdXMge1xyXG4gICAgLnRhYi1mb2N1cygpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIEZpZ3VyZXNcclxuLy9cclxuLy8gV2UgcmVzZXQgdGhpcyBoZXJlIGJlY2F1c2UgcHJldmlvdXNseSBOb3JtYWxpemUgaGFkIG5vIGBmaWd1cmVgIG1hcmdpbnMuIFRoaXNcclxuLy8gZW5zdXJlcyB3ZSBkb24ndCBicmVhayBhbnlvbmUncyB1c2Ugb2YgdGhlIGVsZW1lbnQuXHJcblxyXG5maWd1cmUge1xyXG4gIG1hcmdpbjogMDtcclxufVxyXG5cclxuXHJcbi8vIEltYWdlc1xyXG5cclxuaW1nIHtcclxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG59XHJcblxyXG4vLyBSZXNwb25zaXZlIGltYWdlcyAoZW5zdXJlIGltYWdlcyBkb24ndCBzY2FsZSBiZXlvbmQgdGhlaXIgcGFyZW50cylcclxuLmltZy1yZXNwb25zaXZlIHtcclxuICAuaW1nLXJlc3BvbnNpdmUoKTtcclxufVxyXG5cclxuLy8gUm91bmRlZCBjb3JuZXJzXHJcbi5pbWctcm91bmRlZCB7XHJcbiAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtbGFyZ2U7XHJcbn1cclxuXHJcbi8vIEltYWdlIHRodW1ibmFpbHNcclxuLy9cclxuLy8gSGVhZHMgdXAhIFRoaXMgaXMgbWl4aW4tZWQgaW50byB0aHVtYm5haWxzLmxlc3MgZm9yIGAudGh1bWJuYWlsYC5cclxuLmltZy10aHVtYm5haWwge1xyXG4gIHBhZGRpbmc6IEB0aHVtYm5haWwtcGFkZGluZztcclxuICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LWJhc2U7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogQHRodW1ibmFpbC1iZztcclxuICBib3JkZXI6IDFweCBzb2xpZCBAdGh1bWJuYWlsLWJvcmRlcjtcclxuICBib3JkZXItcmFkaXVzOiBAdGh1bWJuYWlsLWJvcmRlci1yYWRpdXM7XHJcbiAgLnRyYW5zaXRpb24oYWxsIC4ycyBlYXNlLWluLW91dCk7XHJcblxyXG4gIC8vIEtlZXAgdGhlbSBhdCBtb3N0IDEwMCUgd2lkZVxyXG4gIC5pbWctcmVzcG9uc2l2ZShpbmxpbmUtYmxvY2spO1xyXG59XHJcblxyXG4vLyBQZXJmZWN0IGNpcmNsZVxyXG4uaW1nLWNpcmNsZSB7XHJcbiAgYm9yZGVyLXJhZGl1czogNTAlOyAvLyBzZXQgcmFkaXVzIGluIHBlcmNlbnRzXHJcbn1cclxuXHJcblxyXG4vLyBIb3Jpem9udGFsIHJ1bGVzXHJcblxyXG5ociB7XHJcbiAgbWFyZ2luLXRvcDogICAgQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xyXG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcclxuICBib3JkZXI6IDA7XHJcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIEBoci1ib3JkZXI7XHJcbn1cclxuXHJcblxyXG4vLyBPbmx5IGRpc3BsYXkgY29udGVudCB0byBzY3JlZW4gcmVhZGVyc1xyXG4vL1xyXG4vLyBTZWU6IGh0dHA6Ly9hMTF5cHJvamVjdC5jb20vcG9zdHMvaG93LXRvLWhpZGUtY29udGVudC9cclxuXHJcbi5zci1vbmx5IHtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgd2lkdGg6IDFweDtcclxuICBoZWlnaHQ6IDFweDtcclxuICBtYXJnaW46IC0xcHg7XHJcbiAgcGFkZGluZzogMDtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIGNsaXA6IHJlY3QoMCwwLDAsMCk7XHJcbiAgYm9yZGVyOiAwO1xyXG59XHJcblxyXG4vLyBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCAuc3Itb25seSB0byBvbmx5IGRpc3BsYXkgY29udGVudCB3aGVuIGl0J3MgZm9jdXNlZC5cclxuLy8gVXNlZnVsIGZvciBcIlNraXAgdG8gbWFpbiBjb250ZW50XCIgbGlua3M7IHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL05PVEUtV0NBRzIwLVRFQ0hTLTIwMTMwOTA1L0cxXHJcbi8vIENyZWRpdDogSFRNTDUgQm9pbGVycGxhdGVcclxuXHJcbi5zci1vbmx5LWZvY3VzYWJsZSB7XHJcbiAgJjphY3RpdmUsXHJcbiAgJjpmb2N1cyB7XHJcbiAgICBwb3NpdGlvbjogc3RhdGljO1xyXG4gICAgd2lkdGg6IGF1dG87XHJcbiAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcclxuICAgIGNsaXA6IGF1dG87XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gaU9TIFwiY2xpY2thYmxlIGVsZW1lbnRzXCIgZml4IGZvciByb2xlPVwiYnV0dG9uXCJcclxuLy9cclxuLy8gRml4ZXMgXCJjbGlja2FiaWxpdHlcIiBpc3N1ZSAoYW5kIG1vcmUgZ2VuZXJhbGx5LCB0aGUgZmlyaW5nIG9mIGV2ZW50cyBzdWNoIGFzIGZvY3VzIGFzIHdlbGwpXHJcbi8vIGZvciB0cmFkaXRpb25hbGx5IG5vbi1mb2N1c2FibGUgZWxlbWVudHMgd2l0aCByb2xlPVwiYnV0dG9uXCJcclxuLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9jbGljayNTYWZhcmlfTW9iaWxlXHJcblxyXG5bcm9sZT1cImJ1dHRvblwiXSB7XHJcbiAgY3Vyc29yOiBwb2ludGVyO1xyXG59XHJcbiIsIi8vIFZlbmRvciBQcmVmaXhlc1xyXG4vL1xyXG4vLyBBbGwgdmVuZG9yIG1peGlucyBhcmUgZGVwcmVjYXRlZCBhcyBvZiB2My4yLjAgZHVlIHRvIHRoZSBpbnRyb2R1Y3Rpb24gb2ZcclxuLy8gQXV0b3ByZWZpeGVyIGluIG91ciBHcnVudGZpbGUuIFRoZXkgd2lsbCBiZSByZW1vdmVkIGluIHY0LlxyXG5cclxuLy8gLSBBbmltYXRpb25zXHJcbi8vIC0gQmFja2ZhY2UgdmlzaWJpbGl0eVxyXG4vLyAtIEJveCBzaGFkb3dcclxuLy8gLSBCb3ggc2l6aW5nXHJcbi8vIC0gQ29udGVudCBjb2x1bW5zXHJcbi8vIC0gSHlwaGVuc1xyXG4vLyAtIFBsYWNlaG9sZGVyIHRleHRcclxuLy8gLSBUcmFuc2Zvcm1hdGlvbnNcclxuLy8gLSBUcmFuc2l0aW9uc1xyXG4vLyAtIFVzZXIgU2VsZWN0XHJcblxyXG5cclxuLy8gQW5pbWF0aW9uc1xyXG4uYW5pbWF0aW9uKEBhbmltYXRpb24pIHtcclxuICAtd2Via2l0LWFuaW1hdGlvbjogQGFuaW1hdGlvbjtcclxuICAgICAgIC1vLWFuaW1hdGlvbjogQGFuaW1hdGlvbjtcclxuICAgICAgICAgIGFuaW1hdGlvbjogQGFuaW1hdGlvbjtcclxufVxyXG4uYW5pbWF0aW9uLW5hbWUoQG5hbWUpIHtcclxuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBAbmFtZTtcclxuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBAbmFtZTtcclxufVxyXG4uYW5pbWF0aW9uLWR1cmF0aW9uKEBkdXJhdGlvbikge1xyXG4gIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiBAZHVyYXRpb247XHJcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IEBkdXJhdGlvbjtcclxufVxyXG4uYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbihAdGltaW5nLWZ1bmN0aW9uKSB7XHJcbiAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBAdGltaW5nLWZ1bmN0aW9uO1xyXG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogQHRpbWluZy1mdW5jdGlvbjtcclxufVxyXG4uYW5pbWF0aW9uLWRlbGF5KEBkZWxheSkge1xyXG4gIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiBAZGVsYXk7XHJcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IEBkZWxheTtcclxufVxyXG4uYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudChAaXRlcmF0aW9uLWNvdW50KSB7XHJcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBAaXRlcmF0aW9uLWNvdW50O1xyXG4gICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogQGl0ZXJhdGlvbi1jb3VudDtcclxufVxyXG4uYW5pbWF0aW9uLWRpcmVjdGlvbihAZGlyZWN0aW9uKSB7XHJcbiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiBAZGlyZWN0aW9uO1xyXG4gICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogQGRpcmVjdGlvbjtcclxufVxyXG4uYW5pbWF0aW9uLWZpbGwtbW9kZShAZmlsbC1tb2RlKSB7XHJcbiAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBAZmlsbC1tb2RlO1xyXG4gICAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogQGZpbGwtbW9kZTtcclxufVxyXG5cclxuLy8gQmFja2ZhY2UgdmlzaWJpbGl0eVxyXG4vLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gZmxpY2tlcmluZyB3aGVuIHVzaW5nIENTUyAzRCB0cmFuc2Zvcm1zLlxyXG4vLyBEZWZhdWx0IHZhbHVlIGlzIGB2aXNpYmxlYCwgYnV0IGNhbiBiZSBjaGFuZ2VkIHRvIGBoaWRkZW5gXHJcblxyXG4uYmFja2ZhY2UtdmlzaWJpbGl0eShAdmlzaWJpbGl0eSl7XHJcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBAdmlzaWJpbGl0eTtcclxuICAgICAtbW96LWJhY2tmYWNlLXZpc2liaWxpdHk6IEB2aXNpYmlsaXR5O1xyXG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogQHZpc2liaWxpdHk7XHJcbn1cclxuXHJcbi8vIERyb3Agc2hhZG93c1xyXG4vL1xyXG4vLyBOb3RlOiBEZXByZWNhdGVkIGAuYm94LXNoYWRvdygpYCBhcyBvZiB2My4xLjAgc2luY2UgYWxsIG9mIEJvb3RzdHJhcCdzXHJcbi8vIHN1cHBvcnRlZCBicm93c2VycyB0aGF0IGhhdmUgYm94IHNoYWRvdyBjYXBhYmlsaXRpZXMgbm93IHN1cHBvcnQgaXQuXHJcblxyXG4uYm94LXNoYWRvdyhAc2hhZG93KSB7XHJcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBAc2hhZG93OyAvLyBpT1MgPDQuMyAmIEFuZHJvaWQgPDQuMVxyXG4gICAgICAgICAgYm94LXNoYWRvdzogQHNoYWRvdztcclxufVxyXG5cclxuLy8gQm94IHNpemluZ1xyXG4uYm94LXNpemluZyhAYm94bW9kZWwpIHtcclxuICAtd2Via2l0LWJveC1zaXppbmc6IEBib3htb2RlbDtcclxuICAgICAtbW96LWJveC1zaXppbmc6IEBib3htb2RlbDtcclxuICAgICAgICAgIGJveC1zaXppbmc6IEBib3htb2RlbDtcclxufVxyXG5cclxuLy8gQ1NTMyBDb250ZW50IENvbHVtbnNcclxuLmNvbnRlbnQtY29sdW1ucyhAY29sdW1uLWNvdW50OyBAY29sdW1uLWdhcDogQGdyaWQtZ3V0dGVyLXdpZHRoKSB7XHJcbiAgLXdlYmtpdC1jb2x1bW4tY291bnQ6IEBjb2x1bW4tY291bnQ7XHJcbiAgICAgLW1vei1jb2x1bW4tY291bnQ6IEBjb2x1bW4tY291bnQ7XHJcbiAgICAgICAgICBjb2x1bW4tY291bnQ6IEBjb2x1bW4tY291bnQ7XHJcbiAgLXdlYmtpdC1jb2x1bW4tZ2FwOiBAY29sdW1uLWdhcDtcclxuICAgICAtbW96LWNvbHVtbi1nYXA6IEBjb2x1bW4tZ2FwO1xyXG4gICAgICAgICAgY29sdW1uLWdhcDogQGNvbHVtbi1nYXA7XHJcbn1cclxuXHJcbi8vIE9wdGlvbmFsIGh5cGhlbmF0aW9uXHJcbi5oeXBoZW5zKEBtb2RlOiBhdXRvKSB7XHJcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xyXG4gIC13ZWJraXQtaHlwaGVuczogQG1vZGU7XHJcbiAgICAgLW1vei1oeXBoZW5zOiBAbW9kZTtcclxuICAgICAgLW1zLWh5cGhlbnM6IEBtb2RlOyAvLyBJRTEwK1xyXG4gICAgICAgLW8taHlwaGVuczogQG1vZGU7XHJcbiAgICAgICAgICBoeXBoZW5zOiBAbW9kZTtcclxufVxyXG5cclxuLy8gUGxhY2Vob2xkZXIgdGV4dFxyXG4ucGxhY2Vob2xkZXIoQGNvbG9yOiBAaW5wdXQtY29sb3ItcGxhY2Vob2xkZXIpIHtcclxuICAvLyBGaXJlZm94XHJcbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XHJcbiAgICBjb2xvcjogQGNvbG9yO1xyXG4gICAgb3BhY2l0eTogMTsgLy8gT3ZlcnJpZGUgRmlyZWZveCdzIHVudXN1YWwgZGVmYXVsdCBvcGFjaXR5OyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL3B1bGwvMTE1MjZcclxuICB9XHJcbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIgeyBjb2xvcjogQGNvbG9yOyB9IC8vIEludGVybmV0IEV4cGxvcmVyIDEwK1xyXG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgIHsgY29sb3I6IEBjb2xvcjsgfSAvLyBTYWZhcmkgYW5kIENocm9tZVxyXG59XHJcblxyXG4vLyBUcmFuc2Zvcm1hdGlvbnNcclxuLnNjYWxlKEByYXRpbykge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZShAcmF0aW8pO1xyXG4gICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZShAcmF0aW8pOyAvLyBJRTkgb25seVxyXG4gICAgICAgLW8tdHJhbnNmb3JtOiBzY2FsZShAcmF0aW8pO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZShAcmF0aW8pO1xyXG59XHJcbi5zY2FsZShAcmF0aW9YOyBAcmF0aW9ZKSB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKEByYXRpb1gsIEByYXRpb1kpO1xyXG4gICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZShAcmF0aW9YLCBAcmF0aW9ZKTsgLy8gSUU5IG9ubHlcclxuICAgICAgIC1vLXRyYW5zZm9ybTogc2NhbGUoQHJhdGlvWCwgQHJhdGlvWSk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKEByYXRpb1gsIEByYXRpb1kpO1xyXG59XHJcbi5zY2FsZVgoQHJhdGlvKSB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWChAcmF0aW8pO1xyXG4gICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZVgoQHJhdGlvKTsgLy8gSUU5IG9ubHlcclxuICAgICAgIC1vLXRyYW5zZm9ybTogc2NhbGVYKEByYXRpbyk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWChAcmF0aW8pO1xyXG59XHJcbi5zY2FsZVkoQHJhdGlvKSB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWShAcmF0aW8pO1xyXG4gICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZVkoQHJhdGlvKTsgLy8gSUU5IG9ubHlcclxuICAgICAgIC1vLXRyYW5zZm9ybTogc2NhbGVZKEByYXRpbyk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWShAcmF0aW8pO1xyXG59XHJcbi5za2V3KEB4OyBAeSkge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBza2V3WChAeCkgc2tld1koQHkpO1xyXG4gICAgICAtbXMtdHJhbnNmb3JtOiBza2V3WChAeCkgc2tld1koQHkpOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy80ODg1OyBJRTkrXHJcbiAgICAgICAtby10cmFuc2Zvcm06IHNrZXdYKEB4KSBza2V3WShAeSk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHNrZXdYKEB4KSBza2V3WShAeSk7XHJcbn1cclxuLnRyYW5zbGF0ZShAeDsgQHkpIHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKEB4LCBAeSk7XHJcbiAgICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZShAeCwgQHkpOyAvLyBJRTkgb25seVxyXG4gICAgICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUoQHgsIEB5KTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKEB4LCBAeSk7XHJcbn1cclxuLnRyYW5zbGF0ZTNkKEB4OyBAeTsgQHopIHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoQHgsIEB5LCBAeik7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKEB4LCBAeSwgQHopO1xyXG59XHJcbi5yb3RhdGUoQGRlZ3JlZXMpIHtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKEBkZWdyZWVzKTtcclxuICAgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlKEBkZWdyZWVzKTsgLy8gSUU5IG9ubHlcclxuICAgICAgIC1vLXRyYW5zZm9ybTogcm90YXRlKEBkZWdyZWVzKTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKEBkZWdyZWVzKTtcclxufVxyXG4ucm90YXRlWChAZGVncmVlcykge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVYKEBkZWdyZWVzKTtcclxuICAgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlWChAZGVncmVlcyk7IC8vIElFOSBvbmx5XHJcbiAgICAgICAtby10cmFuc2Zvcm06IHJvdGF0ZVgoQGRlZ3JlZXMpO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVYKEBkZWdyZWVzKTtcclxufVxyXG4ucm90YXRlWShAZGVncmVlcykge1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVZKEBkZWdyZWVzKTtcclxuICAgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlWShAZGVncmVlcyk7IC8vIElFOSBvbmx5XHJcbiAgICAgICAtby10cmFuc2Zvcm06IHJvdGF0ZVkoQGRlZ3JlZXMpO1xyXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVZKEBkZWdyZWVzKTtcclxufVxyXG4ucGVyc3BlY3RpdmUoQHBlcnNwZWN0aXZlKSB7XHJcbiAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogQHBlcnNwZWN0aXZlO1xyXG4gICAgIC1tb3otcGVyc3BlY3RpdmU6IEBwZXJzcGVjdGl2ZTtcclxuICAgICAgICAgIHBlcnNwZWN0aXZlOiBAcGVyc3BlY3RpdmU7XHJcbn1cclxuLnBlcnNwZWN0aXZlLW9yaWdpbihAcGVyc3BlY3RpdmUpIHtcclxuICAtd2Via2l0LXBlcnNwZWN0aXZlLW9yaWdpbjogQHBlcnNwZWN0aXZlO1xyXG4gICAgIC1tb3otcGVyc3BlY3RpdmUtb3JpZ2luOiBAcGVyc3BlY3RpdmU7XHJcbiAgICAgICAgICBwZXJzcGVjdGl2ZS1vcmlnaW46IEBwZXJzcGVjdGl2ZTtcclxufVxyXG4udHJhbnNmb3JtLW9yaWdpbihAb3JpZ2luKSB7XHJcbiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBAb3JpZ2luO1xyXG4gICAgIC1tb3otdHJhbnNmb3JtLW9yaWdpbjogQG9yaWdpbjtcclxuICAgICAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IEBvcmlnaW47IC8vIElFOSBvbmx5XHJcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBAb3JpZ2luO1xyXG59XHJcblxyXG5cclxuLy8gVHJhbnNpdGlvbnNcclxuXHJcbi50cmFuc2l0aW9uKEB0cmFuc2l0aW9uKSB7XHJcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBAdHJhbnNpdGlvbjtcclxuICAgICAgIC1vLXRyYW5zaXRpb246IEB0cmFuc2l0aW9uO1xyXG4gICAgICAgICAgdHJhbnNpdGlvbjogQHRyYW5zaXRpb247XHJcbn1cclxuLnRyYW5zaXRpb24tcHJvcGVydHkoQHRyYW5zaXRpb24tcHJvcGVydHkpIHtcclxuICAtd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6IEB0cmFuc2l0aW9uLXByb3BlcnR5O1xyXG4gICAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogQHRyYW5zaXRpb24tcHJvcGVydHk7XHJcbn1cclxuLnRyYW5zaXRpb24tZGVsYXkoQHRyYW5zaXRpb24tZGVsYXkpIHtcclxuICAtd2Via2l0LXRyYW5zaXRpb24tZGVsYXk6IEB0cmFuc2l0aW9uLWRlbGF5O1xyXG4gICAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogQHRyYW5zaXRpb24tZGVsYXk7XHJcbn1cclxuLnRyYW5zaXRpb24tZHVyYXRpb24oQHRyYW5zaXRpb24tZHVyYXRpb24pIHtcclxuICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IEB0cmFuc2l0aW9uLWR1cmF0aW9uO1xyXG4gICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogQHRyYW5zaXRpb24tZHVyYXRpb247XHJcbn1cclxuLnRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKEB0aW1pbmctZnVuY3Rpb24pIHtcclxuICAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBAdGltaW5nLWZ1bmN0aW9uO1xyXG4gICAgICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IEB0aW1pbmctZnVuY3Rpb247XHJcbn1cclxuLnRyYW5zaXRpb24tdHJhbnNmb3JtKEB0cmFuc2l0aW9uKSB7XHJcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSBAdHJhbnNpdGlvbjtcclxuICAgICAtbW96LXRyYW5zaXRpb246IC1tb3otdHJhbnNmb3JtIEB0cmFuc2l0aW9uO1xyXG4gICAgICAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIEB0cmFuc2l0aW9uO1xyXG4gICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIEB0cmFuc2l0aW9uO1xyXG59XHJcblxyXG5cclxuLy8gVXNlciBzZWxlY3RcclxuLy8gRm9yIHNlbGVjdGluZyB0ZXh0IG9uIHRoZSBwYWdlXHJcblxyXG4udXNlci1zZWxlY3QoQHNlbGVjdCkge1xyXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IEBzZWxlY3Q7XHJcbiAgICAgLW1vei11c2VyLXNlbGVjdDogQHNlbGVjdDtcclxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBAc2VsZWN0OyAvLyBJRTEwK1xyXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IEBzZWxlY3Q7XHJcbn1cclxuIiwiLy8gV2ViS2l0LXN0eWxlIGZvY3VzXHJcblxyXG4udGFiLWZvY3VzKCkge1xyXG4gIC8vIERlZmF1bHRcclxuICBvdXRsaW5lOiB0aGluIGRvdHRlZDtcclxuICAvLyBXZWJLaXRcclxuICBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7XHJcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XHJcbn1cclxuIiwiLy8gSW1hZ2UgTWl4aW5zXHJcbi8vIC0gUmVzcG9uc2l2ZSBpbWFnZVxyXG4vLyAtIFJldGluYSBpbWFnZVxyXG5cclxuXHJcbi8vIFJlc3BvbnNpdmUgaW1hZ2VcclxuLy9cclxuLy8gS2VlcCBpbWFnZXMgZnJvbSBzY2FsaW5nIGJleW9uZCB0aGUgd2lkdGggb2YgdGhlaXIgcGFyZW50cy5cclxuLmltZy1yZXNwb25zaXZlKEBkaXNwbGF5OiBibG9jaykge1xyXG4gIGRpc3BsYXk6IEBkaXNwbGF5O1xyXG4gIG1heC13aWR0aDogMTAwJTsgLy8gUGFydCAxOiBTZXQgYSBtYXhpbXVtIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnRcclxuICBoZWlnaHQ6IGF1dG87IC8vIFBhcnQgMjogU2NhbGUgdGhlIGhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHdpZHRoLCBvdGhlcndpc2UgeW91IGdldCBzdHJldGNoaW5nXHJcbn1cclxuXHJcblxyXG4vLyBSZXRpbmEgaW1hZ2VcclxuLy9cclxuLy8gU2hvcnQgcmV0aW5hIG1peGluIGZvciBzZXR0aW5nIGJhY2tncm91bmQtaW1hZ2UgYW5kIC1zaXplLiBOb3RlIHRoYXQgdGhlXHJcbi8vIHNwZWxsaW5nIG9mIGBtaW4tLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW9gIGlzIGludGVudGlvbmFsLlxyXG4uaW1nLXJldGluYShAZmlsZS0xeDsgQGZpbGUtMng7IEB3aWR0aC0xeDsgQGhlaWdodC0xeCkge1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIkB7ZmlsZS0xeH1cIik7XHJcblxyXG4gIEBtZWRpYVxyXG4gIG9ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSxcclxuICBvbmx5IHNjcmVlbiBhbmQgKCAgIG1pbi0tbW96LWRldmljZS1waXhlbC1yYXRpbzogMiksXHJcbiAgb25seSBzY3JlZW4gYW5kICggICAgIC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIvMSksXHJcbiAgb25seSBzY3JlZW4gYW5kICggICAgICAgIG1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLFxyXG4gIG9ubHkgc2NyZWVuIGFuZCAoICAgICAgICAgICAgICAgIG1pbi1yZXNvbHV0aW9uOiAxOTJkcGkpLFxyXG4gIG9ubHkgc2NyZWVuIGFuZCAoICAgICAgICAgICAgICAgIG1pbi1yZXNvbHV0aW9uOiAyZHBweCkge1xyXG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiQHtmaWxlLTJ4fVwiKTtcclxuICAgIGJhY2tncm91bmQtc2l6ZTogQHdpZHRoLTF4IEBoZWlnaHQtMXg7XHJcbiAgfVxyXG59XHJcbiIsIi8vXHJcbi8vIFR5cG9ncmFwaHlcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4vLyBIZWFkaW5nc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2LFxyXG4uaDEsIC5oMiwgLmgzLCAuaDQsIC5oNSwgLmg2IHtcclxuICBmb250LWZhbWlseTogQGhlYWRpbmdzLWZvbnQtZmFtaWx5O1xyXG4gIGZvbnQtd2VpZ2h0OiBAaGVhZGluZ3MtZm9udC13ZWlnaHQ7XHJcbiAgbGluZS1oZWlnaHQ6IEBoZWFkaW5ncy1saW5lLWhlaWdodDtcclxuICBjb2xvcjogQGhlYWRpbmdzLWNvbG9yO1xyXG5cclxuICBzbWFsbCxcclxuICAuc21hbGwge1xyXG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgY29sb3I6IEBoZWFkaW5ncy1zbWFsbC1jb2xvcjtcclxuICB9XHJcbn1cclxuXHJcbmgxLCAuaDEsXHJcbmgyLCAuaDIsXHJcbmgzLCAuaDMge1xyXG4gIG1hcmdpbi10b3A6IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcclxuICBtYXJnaW4tYm90dG9tOiAoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XHJcblxyXG4gIHNtYWxsLFxyXG4gIC5zbWFsbCB7XHJcbiAgICBmb250LXNpemU6IDY1JTtcclxuICB9XHJcbn1cclxuaDQsIC5oNCxcclxuaDUsIC5oNSxcclxuaDYsIC5oNiB7XHJcbiAgbWFyZ2luLXRvcDogKEBsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpO1xyXG4gIG1hcmdpbi1ib3R0b206IChAbGluZS1oZWlnaHQtY29tcHV0ZWQgLyAyKTtcclxuXHJcbiAgc21hbGwsXHJcbiAgLnNtYWxsIHtcclxuICAgIGZvbnQtc2l6ZTogNzUlO1xyXG4gIH1cclxufVxyXG5cclxuaDEsIC5oMSB7IGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1oMTsgfVxyXG5oMiwgLmgyIHsgZm9udC1zaXplOiBAZm9udC1zaXplLWgyOyB9XHJcbmgzLCAuaDMgeyBmb250LXNpemU6IEBmb250LXNpemUtaDM7IH1cclxuaDQsIC5oNCB7IGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1oNDsgfVxyXG5oNSwgLmg1IHsgZm9udC1zaXplOiBAZm9udC1zaXplLWg1OyB9XHJcbmg2LCAuaDYgeyBmb250LXNpemU6IEBmb250LXNpemUtaDY7IH1cclxuXHJcblxyXG4vLyBCb2R5IHRleHRcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxucCB7XHJcbiAgbWFyZ2luOiAwIDAgKEBsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpO1xyXG59XHJcblxyXG4ubGVhZCB7XHJcbiAgbWFyZ2luLWJvdHRvbTogQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xyXG4gIGZvbnQtc2l6ZTogZmxvb3IoKEBmb250LXNpemUtYmFzZSAqIDEuMTUpKTtcclxuICBmb250LXdlaWdodDogMzAwO1xyXG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XHJcblxyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLXNtLW1pbikge1xyXG4gICAgZm9udC1zaXplOiAoQGZvbnQtc2l6ZS1iYXNlICogMS41KTtcclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyBFbXBoYXNpcyAmIG1pc2NcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuLy8gRXg6ICgxMnB4IHNtYWxsIGZvbnQgLyAxNHB4IGJhc2UgZm9udCkgKiAxMDAlID0gYWJvdXQgODUlXHJcbnNtYWxsLFxyXG4uc21hbGwge1xyXG4gIGZvbnQtc2l6ZTogZmxvb3IoKDEwMCUgKiBAZm9udC1zaXplLXNtYWxsIC8gQGZvbnQtc2l6ZS1iYXNlKSk7XHJcbn1cclxuXHJcbm1hcmssXHJcbi5tYXJrIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAc3RhdGUtd2FybmluZy1iZztcclxuICBwYWRkaW5nOiAuMmVtO1xyXG59XHJcblxyXG4vLyBBbGlnbm1lbnRcclxuLnRleHQtbGVmdCAgICAgICAgICAgeyB0ZXh0LWFsaWduOiBsZWZ0OyB9XHJcbi50ZXh0LXJpZ2h0ICAgICAgICAgIHsgdGV4dC1hbGlnbjogcmlnaHQ7IH1cclxuLnRleHQtY2VudGVyICAgICAgICAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cclxuLnRleHQtanVzdGlmeSAgICAgICAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9XHJcbi50ZXh0LW5vd3JhcCAgICAgICAgIHsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfVxyXG5cclxuLy8gVHJhbnNmb3JtYXRpb25cclxuLnRleHQtbG93ZXJjYXNlICAgICAgeyB0ZXh0LXRyYW5zZm9ybTogbG93ZXJjYXNlOyB9XHJcbi50ZXh0LXVwcGVyY2FzZSAgICAgIHsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxyXG4udGV4dC1jYXBpdGFsaXplICAgICB7IHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOyB9XHJcblxyXG4vLyBDb250ZXh0dWFsIGNvbG9yc1xyXG4udGV4dC1tdXRlZCB7XHJcbiAgY29sb3I6IEB0ZXh0LW11dGVkO1xyXG59XHJcbi50ZXh0LXByaW1hcnkge1xyXG4gIC50ZXh0LWVtcGhhc2lzLXZhcmlhbnQoQGJyYW5kLXByaW1hcnkpO1xyXG59XHJcbi50ZXh0LXN1Y2Nlc3Mge1xyXG4gIC50ZXh0LWVtcGhhc2lzLXZhcmlhbnQoQHN0YXRlLXN1Y2Nlc3MtdGV4dCk7XHJcbn1cclxuLnRleHQtaW5mbyB7XHJcbiAgLnRleHQtZW1waGFzaXMtdmFyaWFudChAc3RhdGUtaW5mby10ZXh0KTtcclxufVxyXG4udGV4dC13YXJuaW5nIHtcclxuICAudGV4dC1lbXBoYXNpcy12YXJpYW50KEBzdGF0ZS13YXJuaW5nLXRleHQpO1xyXG59XHJcbi50ZXh0LWRhbmdlciB7XHJcbiAgLnRleHQtZW1waGFzaXMtdmFyaWFudChAc3RhdGUtZGFuZ2VyLXRleHQpO1xyXG59XHJcblxyXG4vLyBDb250ZXh0dWFsIGJhY2tncm91bmRzXHJcbi8vIEZvciBub3cgd2UnbGwgbGVhdmUgdGhlc2UgYWxvbmdzaWRlIHRoZSB0ZXh0IGNsYXNzZXMgdW50aWwgdjQgd2hlbiB3ZSBjYW5cclxuLy8gc2FmZWx5IHNoaWZ0IHRoaW5ncyBhcm91bmQgKHBlciBTZW1WZXIgcnVsZXMpLlxyXG4uYmctcHJpbWFyeSB7XHJcbiAgLy8gR2l2ZW4gdGhlIGNvbnRyYXN0IGhlcmUsIHRoaXMgaXMgdGhlIG9ubHkgY2xhc3MgdG8gaGF2ZSBpdHMgY29sb3IgaW52ZXJ0ZWRcclxuICAvLyBhdXRvbWF0aWNhbGx5LlxyXG4gIGNvbG9yOiAjZmZmO1xyXG4gIC5iZy12YXJpYW50KEBicmFuZC1wcmltYXJ5KTtcclxufVxyXG4uYmctc3VjY2VzcyB7XHJcbiAgLmJnLXZhcmlhbnQoQHN0YXRlLXN1Y2Nlc3MtYmcpO1xyXG59XHJcbi5iZy1pbmZvIHtcclxuICAuYmctdmFyaWFudChAc3RhdGUtaW5mby1iZyk7XHJcbn1cclxuLmJnLXdhcm5pbmcge1xyXG4gIC5iZy12YXJpYW50KEBzdGF0ZS13YXJuaW5nLWJnKTtcclxufVxyXG4uYmctZGFuZ2VyIHtcclxuICAuYmctdmFyaWFudChAc3RhdGUtZGFuZ2VyLWJnKTtcclxufVxyXG5cclxuXHJcbi8vIFBhZ2UgaGVhZGVyXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi5wYWdlLWhlYWRlciB7XHJcbiAgcGFkZGluZy1ib3R0b206ICgoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMikgLSAxKTtcclxuICBtYXJnaW46IChAbGluZS1oZWlnaHQtY29tcHV0ZWQgKiAyKSAwIEBsaW5lLWhlaWdodC1jb21wdXRlZDtcclxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQHBhZ2UtaGVhZGVyLWJvcmRlci1jb2xvcjtcclxufVxyXG5cclxuXHJcbi8vIExpc3RzXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi8vIFVub3JkZXJlZCBhbmQgT3JkZXJlZCBsaXN0c1xyXG51bCxcclxub2wge1xyXG4gIG1hcmdpbi10b3A6IDA7XHJcbiAgbWFyZ2luLWJvdHRvbTogKEBsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpO1xyXG4gIHVsLFxyXG4gIG9sIHtcclxuICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBMaXN0IG9wdGlvbnNcclxuXHJcbi8vIFVuc3R5bGVkIGtlZXBzIGxpc3QgaXRlbXMgYmxvY2sgbGV2ZWwsIGp1c3QgcmVtb3ZlcyBkZWZhdWx0IGJyb3dzZXIgcGFkZGluZyBhbmQgbGlzdC1zdHlsZVxyXG4ubGlzdC11bnN0eWxlZCB7XHJcbiAgcGFkZGluZy1sZWZ0OiAwO1xyXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XHJcbn1cclxuXHJcbi8vIElubGluZSB0dXJucyBsaXN0IGl0ZW1zIGludG8gaW5saW5lLWJsb2NrXHJcbi5saXN0LWlubGluZSB7XHJcbiAgLmxpc3QtdW5zdHlsZWQoKTtcclxuICBtYXJnaW4tbGVmdDogLTVweDtcclxuXHJcbiAgPiBsaSB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDVweDtcclxuICAgIHBhZGRpbmctcmlnaHQ6IDVweDtcclxuICB9XHJcbn1cclxuXHJcbi8vIERlc2NyaXB0aW9uIExpc3RzXHJcbmRsIHtcclxuICBtYXJnaW4tdG9wOiAwOyAvLyBSZW1vdmUgYnJvd3NlciBkZWZhdWx0XHJcbiAgbWFyZ2luLWJvdHRvbTogQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xyXG59XHJcbmR0LFxyXG5kZCB7XHJcbiAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xyXG59XHJcbmR0IHtcclxuICBmb250LXdlaWdodDogYm9sZDtcclxufVxyXG5kZCB7XHJcbiAgbWFyZ2luLWxlZnQ6IDA7IC8vIFVuZG8gYnJvd3NlciBkZWZhdWx0XHJcbn1cclxuXHJcbi8vIEhvcml6b250YWwgZGVzY3JpcHRpb24gbGlzdHNcclxuLy9cclxuLy8gRGVmYXVsdHMgdG8gYmVpbmcgc3RhY2tlZCB3aXRob3V0IGFueSBvZiB0aGUgYmVsb3cgc3R5bGVzIGFwcGxpZWQsIHVudGlsIHRoZVxyXG4vLyBncmlkIGJyZWFrcG9pbnQgaXMgcmVhY2hlZCAoZGVmYXVsdCBvZiB+NzY4cHgpLlxyXG5cclxuLmRsLWhvcml6b250YWwge1xyXG4gIGRkIHtcclxuICAgICY6ZXh0ZW5kKC5jbGVhcmZpeCBhbGwpOyAvLyBDbGVhciB0aGUgZmxvYXRlZCBgZHRgIGlmIGFuIGVtcHR5IGBkZGAgaXMgcHJlc2VudFxyXG4gIH1cclxuXHJcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcclxuICAgIGR0IHtcclxuICAgICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICAgIHdpZHRoOiAoQGRsLWhvcml6b250YWwtb2Zmc2V0IC0gMjApO1xyXG4gICAgICBjbGVhcjogbGVmdDtcclxuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XHJcbiAgICAgIC50ZXh0LW92ZXJmbG93KCk7XHJcbiAgICB9XHJcbiAgICBkZCB7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiBAZGwtaG9yaXpvbnRhbC1vZmZzZXQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gTWlzY1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vLyBBYmJyZXZpYXRpb25zIGFuZCBhY3Jvbnltc1xyXG5hYmJyW3RpdGxlXSxcclxuLy8gQWRkIGRhdGEtKiBhdHRyaWJ1dGUgdG8gaGVscCBvdXQgb3VyIHRvb2x0aXAgcGx1Z2luLCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy81MjU3XHJcbmFiYnJbZGF0YS1vcmlnaW5hbC10aXRsZV0ge1xyXG4gIGN1cnNvcjogaGVscDtcclxuICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkIEBhYmJyLWJvcmRlci1jb2xvcjtcclxufVxyXG4uaW5pdGlhbGlzbSB7XHJcbiAgZm9udC1zaXplOiA5MCU7XHJcbiAgLnRleHQtdXBwZXJjYXNlKCk7XHJcbn1cclxuXHJcbi8vIEJsb2NrcXVvdGVzXHJcbmJsb2NrcXVvdGUge1xyXG4gIHBhZGRpbmc6IChAbGluZS1oZWlnaHQtY29tcHV0ZWQgLyAyKSBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XHJcbiAgbWFyZ2luOiAwIDAgQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xyXG4gIGZvbnQtc2l6ZTogQGJsb2NrcXVvdGUtZm9udC1zaXplO1xyXG4gIGJvcmRlci1sZWZ0OiA1cHggc29saWQgQGJsb2NrcXVvdGUtYm9yZGVyLWNvbG9yO1xyXG5cclxuICBwLFxyXG4gIHVsLFxyXG4gIG9sIHtcclxuICAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBOb3RlOiBEZXByZWNhdGVkIHNtYWxsIGFuZCAuc21hbGwgYXMgb2YgdjMuMS4wXHJcbiAgLy8gQ29udGV4dDogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMTY2MFxyXG4gIGZvb3RlcixcclxuICBzbWFsbCxcclxuICAuc21hbGwge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBmb250LXNpemU6IDgwJTsgLy8gYmFjayB0byBkZWZhdWx0IGZvbnQtc2l6ZVxyXG4gICAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xyXG4gICAgY29sb3I6IEBibG9ja3F1b3RlLXNtYWxsLWNvbG9yO1xyXG5cclxuICAgICY6YmVmb3JlIHtcclxuICAgICAgY29udGVudDogJ1xcMjAxNCBcXDAwQTAnOyAvLyBlbSBkYXNoLCBuYnNwXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vLyBPcHBvc2l0ZSBhbGlnbm1lbnQgb2YgYmxvY2txdW90ZVxyXG4vL1xyXG4vLyBIZWFkcyB1cDogYGJsb2NrcXVvdGUucHVsbC1yaWdodGAgaGFzIGJlZW4gZGVwcmVjYXRlZCBhcyBvZiB2My4xLjAuXHJcbi5ibG9ja3F1b3RlLXJldmVyc2UsXHJcbmJsb2NrcXVvdGUucHVsbC1yaWdodCB7XHJcbiAgcGFkZGluZy1yaWdodDogMTVweDtcclxuICBwYWRkaW5nLWxlZnQ6IDA7XHJcbiAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgQGJsb2NrcXVvdGUtYm9yZGVyLWNvbG9yO1xyXG4gIGJvcmRlci1sZWZ0OiAwO1xyXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xyXG5cclxuICAvLyBBY2NvdW50IGZvciBjaXRhdGlvblxyXG4gIGZvb3RlcixcclxuICBzbWFsbCxcclxuICAuc21hbGwge1xyXG4gICAgJjpiZWZvcmUgeyBjb250ZW50OiAnJzsgfVxyXG4gICAgJjphZnRlciB7XHJcbiAgICAgIGNvbnRlbnQ6ICdcXDAwQTAgXFwyMDE0JzsgLy8gbmJzcCwgZW0gZGFzaFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLy8gQWRkcmVzc2VzXHJcbmFkZHJlc3Mge1xyXG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcclxuICBmb250LXN0eWxlOiBub3JtYWw7XHJcbiAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xyXG59XHJcbiIsIi8vIFR5cG9ncmFwaHlcclxuXHJcbi50ZXh0LWVtcGhhc2lzLXZhcmlhbnQoQGNvbG9yKSB7XHJcbiAgY29sb3I6IEBjb2xvcjtcclxuICBhJjpob3ZlcixcclxuICBhJjpmb2N1cyB7XHJcbiAgICBjb2xvcjogZGFya2VuKEBjb2xvciwgMTAlKTtcclxuICB9XHJcbn1cclxuIiwiLy8gQ29udGV4dHVhbCBiYWNrZ3JvdW5kc1xyXG5cclxuLmJnLXZhcmlhbnQoQGNvbG9yKSB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogQGNvbG9yO1xyXG4gIGEmOmhvdmVyLFxyXG4gIGEmOmZvY3VzIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbihAY29sb3IsIDEwJSk7XHJcbiAgfVxyXG59XHJcbiIsIi8vIFRleHQgb3ZlcmZsb3dcclxuLy8gUmVxdWlyZXMgaW5saW5lLWJsb2NrIG9yIGJsb2NrIGZvciBwcm9wZXIgc3R5bGluZ1xyXG5cclxuLnRleHQtb3ZlcmZsb3coKSB7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcclxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG59XHJcbiIsIi8vXHJcbi8vIENvZGUgKGlubGluZSBhbmQgYmxvY2spXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuLy8gSW5saW5lIGFuZCBibG9jayBjb2RlIHN0eWxlc1xyXG5jb2RlLFxyXG5rYmQsXHJcbnByZSxcclxuc2FtcCB7XHJcbiAgZm9udC1mYW1pbHk6IEBmb250LWZhbWlseS1tb25vc3BhY2U7XHJcbn1cclxuXHJcbi8vIElubGluZSBjb2RlXHJcbmNvZGUge1xyXG4gIHBhZGRpbmc6IDJweCA0cHg7XHJcbiAgZm9udC1zaXplOiA5MCU7XHJcbiAgY29sb3I6IEBjb2RlLWNvbG9yO1xyXG4gIGJhY2tncm91bmQtY29sb3I6IEBjb2RlLWJnO1xyXG4gIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWJhc2U7XHJcbn1cclxuXHJcbi8vIFVzZXIgaW5wdXQgdHlwaWNhbGx5IGVudGVyZWQgdmlhIGtleWJvYXJkXHJcbmtiZCB7XHJcbiAgcGFkZGluZzogMnB4IDRweDtcclxuICBmb250LXNpemU6IDkwJTtcclxuICBjb2xvcjogQGtiZC1jb2xvcjtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAa2JkLWJnO1xyXG4gIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLXNtYWxsO1xyXG4gIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsLjI1KTtcclxuXHJcbiAga2JkIHtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICBmb250LXNpemU6IDEwMCU7XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBCbG9ja3Mgb2YgY29kZVxyXG5wcmUge1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIHBhZGRpbmc6ICgoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC0gMSkgLyAyKTtcclxuICBtYXJnaW46IDAgMCAoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XHJcbiAgZm9udC1zaXplOiAoQGZvbnQtc2l6ZS1iYXNlIC0gMSk7IC8vIDE0cHggdG8gMTNweFxyXG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcclxuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XHJcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xyXG4gIGNvbG9yOiBAcHJlLWNvbG9yO1xyXG4gIGJhY2tncm91bmQtY29sb3I6IEBwcmUtYmc7XHJcbiAgYm9yZGVyOiAxcHggc29saWQgQHByZS1ib3JkZXItY29sb3I7XHJcbiAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtYmFzZTtcclxuXHJcbiAgLy8gQWNjb3VudCBmb3Igc29tZSBjb2RlIG91dHB1dHMgdGhhdCBwbGFjZSBjb2RlIHRhZ3MgaW4gcHJlIHRhZ3NcclxuICBjb2RlIHtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XHJcbiAgICBjb2xvcjogaW5oZXJpdDtcclxuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgYm9yZGVyLXJhZGl1czogMDtcclxuICB9XHJcbn1cclxuXHJcbi8vIEVuYWJsZSBzY3JvbGxhYmxlIGJsb2NrcyBvZiBjb2RlXHJcbi5wcmUtc2Nyb2xsYWJsZSB7XHJcbiAgbWF4LWhlaWdodDogQHByZS1zY3JvbGxhYmxlLW1heC1oZWlnaHQ7XHJcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xyXG59XHJcbiIsIi8vXHJcbi8vIEdyaWQgc3lzdGVtXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuLy8gQ29udGFpbmVyIHdpZHRoc1xyXG4vL1xyXG4vLyBTZXQgdGhlIGNvbnRhaW5lciB3aWR0aCwgYW5kIG92ZXJyaWRlIGl0IGZvciBmaXhlZCBuYXZiYXJzIGluIG1lZGlhIHF1ZXJpZXMuXHJcblxyXG4uY29udGFpbmVyIHtcclxuICAuY29udGFpbmVyLWZpeGVkKCk7XHJcblxyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLXNtLW1pbikge1xyXG4gICAgd2lkdGg6IEBjb250YWluZXItc207XHJcbiAgfVxyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLW1kLW1pbikge1xyXG4gICAgd2lkdGg6IEBjb250YWluZXItbWQ7XHJcbiAgfVxyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLWxnLW1pbikge1xyXG4gICAgd2lkdGg6IEBjb250YWluZXItbGc7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gRmx1aWQgY29udGFpbmVyXHJcbi8vXHJcbi8vIFV0aWxpemVzIHRoZSBtaXhpbiBtZWFudCBmb3IgZml4ZWQgd2lkdGggY29udGFpbmVycywgYnV0IHdpdGhvdXQgYW55IGRlZmluZWRcclxuLy8gd2lkdGggZm9yIGZsdWlkLCBmdWxsIHdpZHRoIGxheW91dHMuXHJcblxyXG4uY29udGFpbmVyLWZsdWlkIHtcclxuICAuY29udGFpbmVyLWZpeGVkKCk7XHJcbn1cclxuXHJcblxyXG4vLyBSb3dcclxuLy9cclxuLy8gUm93cyBjb250YWluIGFuZCBjbGVhciB0aGUgZmxvYXRzIG9mIHlvdXIgY29sdW1ucy5cclxuXHJcbi5yb3cge1xyXG4gIC5tYWtlLXJvdygpO1xyXG59XHJcblxyXG5cclxuLy8gQ29sdW1uc1xyXG4vL1xyXG4vLyBDb21tb24gc3R5bGVzIGZvciBzbWFsbCBhbmQgbGFyZ2UgZ3JpZCBjb2x1bW5zXHJcblxyXG4ubWFrZS1ncmlkLWNvbHVtbnMoKTtcclxuXHJcblxyXG4vLyBFeHRyYSBzbWFsbCBncmlkXHJcbi8vXHJcbi8vIENvbHVtbnMsIG9mZnNldHMsIHB1c2hlcywgYW5kIHB1bGxzIGZvciBleHRyYSBzbWFsbCBkZXZpY2VzIGxpa2VcclxuLy8gc21hcnRwaG9uZXMuXHJcblxyXG4ubWFrZS1ncmlkKHhzKTtcclxuXHJcblxyXG4vLyBTbWFsbCBncmlkXHJcbi8vXHJcbi8vIENvbHVtbnMsIG9mZnNldHMsIHB1c2hlcywgYW5kIHB1bGxzIGZvciB0aGUgc21hbGwgZGV2aWNlIHJhbmdlLCBmcm9tIHBob25lc1xyXG4vLyB0byB0YWJsZXRzLlxyXG5cclxuQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XHJcbiAgLm1ha2UtZ3JpZChzbSk7XHJcbn1cclxuXHJcblxyXG4vLyBNZWRpdW0gZ3JpZFxyXG4vL1xyXG4vLyBDb2x1bW5zLCBvZmZzZXRzLCBwdXNoZXMsIGFuZCBwdWxscyBmb3IgdGhlIGRlc2t0b3AgZGV2aWNlIHJhbmdlLlxyXG5cclxuQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbWQtbWluKSB7XHJcbiAgLm1ha2UtZ3JpZChtZCk7XHJcbn1cclxuXHJcblxyXG4vLyBMYXJnZSBncmlkXHJcbi8vXHJcbi8vIENvbHVtbnMsIG9mZnNldHMsIHB1c2hlcywgYW5kIHB1bGxzIGZvciB0aGUgbGFyZ2UgZGVza3RvcCBkZXZpY2UgcmFuZ2UuXHJcblxyXG5AbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1sZy1taW4pIHtcclxuICAubWFrZS1ncmlkKGxnKTtcclxufVxyXG4iLCIvLyBHcmlkIHN5c3RlbVxyXG4vL1xyXG4vLyBHZW5lcmF0ZSBzZW1hbnRpYyBncmlkIGNvbHVtbnMgd2l0aCB0aGVzZSBtaXhpbnMuXHJcblxyXG4vLyBDZW50ZXJlZCBjb250YWluZXIgZWxlbWVudFxyXG4uY29udGFpbmVyLWZpeGVkKEBndXR0ZXI6IEBncmlkLWd1dHRlci13aWR0aCkge1xyXG4gIG1hcmdpbi1yaWdodDogYXV0bztcclxuICBtYXJnaW4tbGVmdDogYXV0bztcclxuICBwYWRkaW5nLWxlZnQ6ICAoQGd1dHRlciAvIDIpO1xyXG4gIHBhZGRpbmctcmlnaHQ6IChAZ3V0dGVyIC8gMik7XHJcbiAgJjpleHRlbmQoLmNsZWFyZml4IGFsbCk7XHJcbn1cclxuXHJcbi8vIENyZWF0ZXMgYSB3cmFwcGVyIGZvciBhIHNlcmllcyBvZiBjb2x1bW5zXHJcbi5tYWtlLXJvdyhAZ3V0dGVyOiBAZ3JpZC1ndXR0ZXItd2lkdGgpIHtcclxuICBtYXJnaW4tbGVmdDogIGNlaWwoKEBndXR0ZXIgLyAtMikpO1xyXG4gIG1hcmdpbi1yaWdodDogZmxvb3IoKEBndXR0ZXIgLyAtMikpO1xyXG4gICY6ZXh0ZW5kKC5jbGVhcmZpeCBhbGwpO1xyXG59XHJcblxyXG4vLyBHZW5lcmF0ZSB0aGUgZXh0cmEgc21hbGwgY29sdW1uc1xyXG4ubWFrZS14cy1jb2x1bW4oQGNvbHVtbnM7IEBndXR0ZXI6IEBncmlkLWd1dHRlci13aWR0aCkge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICBmbG9hdDogbGVmdDtcclxuICB3aWR0aDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XHJcbiAgbWluLWhlaWdodDogMXB4O1xyXG4gIHBhZGRpbmctbGVmdDogIChAZ3V0dGVyIC8gMik7XHJcbiAgcGFkZGluZy1yaWdodDogKEBndXR0ZXIgLyAyKTtcclxufVxyXG4ubWFrZS14cy1jb2x1bW4tb2Zmc2V0KEBjb2x1bW5zKSB7XHJcbiAgbWFyZ2luLWxlZnQ6IHBlcmNlbnRhZ2UoKEBjb2x1bW5zIC8gQGdyaWQtY29sdW1ucykpO1xyXG59XHJcbi5tYWtlLXhzLWNvbHVtbi1wdXNoKEBjb2x1bW5zKSB7XHJcbiAgbGVmdDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XHJcbn1cclxuLm1ha2UteHMtY29sdW1uLXB1bGwoQGNvbHVtbnMpIHtcclxuICByaWdodDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XHJcbn1cclxuXHJcbi8vIEdlbmVyYXRlIHRoZSBzbWFsbCBjb2x1bW5zXHJcbi5tYWtlLXNtLWNvbHVtbihAY29sdW1uczsgQGd1dHRlcjogQGdyaWQtZ3V0dGVyLXdpZHRoKSB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIG1pbi1oZWlnaHQ6IDFweDtcclxuICBwYWRkaW5nLWxlZnQ6ICAoQGd1dHRlciAvIDIpO1xyXG4gIHBhZGRpbmctcmlnaHQ6IChAZ3V0dGVyIC8gMik7XHJcblxyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLXNtLW1pbikge1xyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICB3aWR0aDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XHJcbiAgfVxyXG59XHJcbi5tYWtlLXNtLWNvbHVtbi1vZmZzZXQoQGNvbHVtbnMpIHtcclxuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIHtcclxuICAgIG1hcmdpbi1sZWZ0OiBwZXJjZW50YWdlKChAY29sdW1ucyAvIEBncmlkLWNvbHVtbnMpKTtcclxuICB9XHJcbn1cclxuLm1ha2Utc20tY29sdW1uLXB1c2goQGNvbHVtbnMpIHtcclxuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIHtcclxuICAgIGxlZnQ6IHBlcmNlbnRhZ2UoKEBjb2x1bW5zIC8gQGdyaWQtY29sdW1ucykpO1xyXG4gIH1cclxufVxyXG4ubWFrZS1zbS1jb2x1bW4tcHVsbChAY29sdW1ucykge1xyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLXNtLW1pbikge1xyXG4gICAgcmlnaHQ6IHBlcmNlbnRhZ2UoKEBjb2x1bW5zIC8gQGdyaWQtY29sdW1ucykpO1xyXG4gIH1cclxufVxyXG5cclxuLy8gR2VuZXJhdGUgdGhlIG1lZGl1bSBjb2x1bW5zXHJcbi5tYWtlLW1kLWNvbHVtbihAY29sdW1uczsgQGd1dHRlcjogQGdyaWQtZ3V0dGVyLXdpZHRoKSB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIG1pbi1oZWlnaHQ6IDFweDtcclxuICBwYWRkaW5nLWxlZnQ6ICAoQGd1dHRlciAvIDIpO1xyXG4gIHBhZGRpbmctcmlnaHQ6IChAZ3V0dGVyIC8gMik7XHJcblxyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLW1kLW1pbikge1xyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICB3aWR0aDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XHJcbiAgfVxyXG59XHJcbi5tYWtlLW1kLWNvbHVtbi1vZmZzZXQoQGNvbHVtbnMpIHtcclxuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1tZC1taW4pIHtcclxuICAgIG1hcmdpbi1sZWZ0OiBwZXJjZW50YWdlKChAY29sdW1ucyAvIEBncmlkLWNvbHVtbnMpKTtcclxuICB9XHJcbn1cclxuLm1ha2UtbWQtY29sdW1uLXB1c2goQGNvbHVtbnMpIHtcclxuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1tZC1taW4pIHtcclxuICAgIGxlZnQ6IHBlcmNlbnRhZ2UoKEBjb2x1bW5zIC8gQGdyaWQtY29sdW1ucykpO1xyXG4gIH1cclxufVxyXG4ubWFrZS1tZC1jb2x1bW4tcHVsbChAY29sdW1ucykge1xyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLW1kLW1pbikge1xyXG4gICAgcmlnaHQ6IHBlcmNlbnRhZ2UoKEBjb2x1bW5zIC8gQGdyaWQtY29sdW1ucykpO1xyXG4gIH1cclxufVxyXG5cclxuLy8gR2VuZXJhdGUgdGhlIGxhcmdlIGNvbHVtbnNcclxuLm1ha2UtbGctY29sdW1uKEBjb2x1bW5zOyBAZ3V0dGVyOiBAZ3JpZC1ndXR0ZXItd2lkdGgpIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgbWluLWhlaWdodDogMXB4O1xyXG4gIHBhZGRpbmctbGVmdDogIChAZ3V0dGVyIC8gMik7XHJcbiAgcGFkZGluZy1yaWdodDogKEBndXR0ZXIgLyAyKTtcclxuXHJcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbGctbWluKSB7XHJcbiAgICBmbG9hdDogbGVmdDtcclxuICAgIHdpZHRoOiBwZXJjZW50YWdlKChAY29sdW1ucyAvIEBncmlkLWNvbHVtbnMpKTtcclxuICB9XHJcbn1cclxuLm1ha2UtbGctY29sdW1uLW9mZnNldChAY29sdW1ucykge1xyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLWxnLW1pbikge1xyXG4gICAgbWFyZ2luLWxlZnQ6IHBlcmNlbnRhZ2UoKEBjb2x1bW5zIC8gQGdyaWQtY29sdW1ucykpO1xyXG4gIH1cclxufVxyXG4ubWFrZS1sZy1jb2x1bW4tcHVzaChAY29sdW1ucykge1xyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLWxnLW1pbikge1xyXG4gICAgbGVmdDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XHJcbiAgfVxyXG59XHJcbi5tYWtlLWxnLWNvbHVtbi1wdWxsKEBjb2x1bW5zKSB7XHJcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbGctbWluKSB7XHJcbiAgICByaWdodDogcGVyY2VudGFnZSgoQGNvbHVtbnMgLyBAZ3JpZC1jb2x1bW5zKSk7XHJcbiAgfVxyXG59XHJcbiIsIi8vIEZyYW1ld29yayBncmlkIGdlbmVyYXRpb25cclxuLy9cclxuLy8gVXNlZCBvbmx5IGJ5IEJvb3RzdHJhcCB0byBnZW5lcmF0ZSB0aGUgY29ycmVjdCBudW1iZXIgb2YgZ3JpZCBjbGFzc2VzIGdpdmVuXHJcbi8vIGFueSB2YWx1ZSBvZiBgQGdyaWQtY29sdW1uc2AuXHJcblxyXG4ubWFrZS1ncmlkLWNvbHVtbnMoKSB7XHJcbiAgLy8gQ29tbW9uIHN0eWxlcyBmb3IgYWxsIHNpemVzIG9mIGdyaWQgY29sdW1ucywgd2lkdGhzIDEtMTJcclxuICAuY29sKEBpbmRleCkgeyAvLyBpbml0aWFsXHJcbiAgICBAaXRlbTogflwiLmNvbC14cy1Ae2luZGV4fSwgLmNvbC1zbS1Ae2luZGV4fSwgLmNvbC1tZC1Ae2luZGV4fSwgLmNvbC1sZy1Ae2luZGV4fVwiO1xyXG4gICAgLmNvbCgoQGluZGV4ICsgMSksIEBpdGVtKTtcclxuICB9XHJcbiAgLmNvbChAaW5kZXgsIEBsaXN0KSB3aGVuIChAaW5kZXggPTwgQGdyaWQtY29sdW1ucykgeyAvLyBnZW5lcmFsOyBcIj08XCIgaXNuJ3QgYSB0eXBvXHJcbiAgICBAaXRlbTogflwiLmNvbC14cy1Ae2luZGV4fSwgLmNvbC1zbS1Ae2luZGV4fSwgLmNvbC1tZC1Ae2luZGV4fSwgLmNvbC1sZy1Ae2luZGV4fVwiO1xyXG4gICAgLmNvbCgoQGluZGV4ICsgMSksIH5cIkB7bGlzdH0sIEB7aXRlbX1cIik7XHJcbiAgfVxyXG4gIC5jb2woQGluZGV4LCBAbGlzdCkgd2hlbiAoQGluZGV4ID4gQGdyaWQtY29sdW1ucykgeyAvLyB0ZXJtaW5hbFxyXG4gICAgQHtsaXN0fSB7XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgLy8gUHJldmVudCBjb2x1bW5zIGZyb20gY29sbGFwc2luZyB3aGVuIGVtcHR5XHJcbiAgICAgIG1pbi1oZWlnaHQ6IDFweDtcclxuICAgICAgLy8gSW5uZXIgZ3V0dGVyIHZpYSBwYWRkaW5nXHJcbiAgICAgIHBhZGRpbmctbGVmdDogIGNlaWwoKEBncmlkLWd1dHRlci13aWR0aCAvIDIpKTtcclxuICAgICAgcGFkZGluZy1yaWdodDogZmxvb3IoKEBncmlkLWd1dHRlci13aWR0aCAvIDIpKTtcclxuICAgIH1cclxuICB9XHJcbiAgLmNvbCgxKTsgLy8ga2lja3N0YXJ0IGl0XHJcbn1cclxuXHJcbi5mbG9hdC1ncmlkLWNvbHVtbnMoQGNsYXNzKSB7XHJcbiAgLmNvbChAaW5kZXgpIHsgLy8gaW5pdGlhbFxyXG4gICAgQGl0ZW06IH5cIi5jb2wtQHtjbGFzc30tQHtpbmRleH1cIjtcclxuICAgIC5jb2woKEBpbmRleCArIDEpLCBAaXRlbSk7XHJcbiAgfVxyXG4gIC5jb2woQGluZGV4LCBAbGlzdCkgd2hlbiAoQGluZGV4ID08IEBncmlkLWNvbHVtbnMpIHsgLy8gZ2VuZXJhbFxyXG4gICAgQGl0ZW06IH5cIi5jb2wtQHtjbGFzc30tQHtpbmRleH1cIjtcclxuICAgIC5jb2woKEBpbmRleCArIDEpLCB+XCJAe2xpc3R9LCBAe2l0ZW19XCIpO1xyXG4gIH1cclxuICAuY29sKEBpbmRleCwgQGxpc3QpIHdoZW4gKEBpbmRleCA+IEBncmlkLWNvbHVtbnMpIHsgLy8gdGVybWluYWxcclxuICAgIEB7bGlzdH0ge1xyXG4gICAgICBmbG9hdDogbGVmdDtcclxuICAgIH1cclxuICB9XHJcbiAgLmNvbCgxKTsgLy8ga2lja3N0YXJ0IGl0XHJcbn1cclxuXHJcbi5jYWxjLWdyaWQtY29sdW1uKEBpbmRleCwgQGNsYXNzLCBAdHlwZSkgd2hlbiAoQHR5cGUgPSB3aWR0aCkgYW5kIChAaW5kZXggPiAwKSB7XHJcbiAgLmNvbC1Ae2NsYXNzfS1Ae2luZGV4fSB7XHJcbiAgICB3aWR0aDogcGVyY2VudGFnZSgoQGluZGV4IC8gQGdyaWQtY29sdW1ucykpO1xyXG4gIH1cclxufVxyXG4uY2FsYy1ncmlkLWNvbHVtbihAaW5kZXgsIEBjbGFzcywgQHR5cGUpIHdoZW4gKEB0eXBlID0gcHVzaCkgYW5kIChAaW5kZXggPiAwKSB7XHJcbiAgLmNvbC1Ae2NsYXNzfS1wdXNoLUB7aW5kZXh9IHtcclxuICAgIGxlZnQ6IHBlcmNlbnRhZ2UoKEBpbmRleCAvIEBncmlkLWNvbHVtbnMpKTtcclxuICB9XHJcbn1cclxuLmNhbGMtZ3JpZC1jb2x1bW4oQGluZGV4LCBAY2xhc3MsIEB0eXBlKSB3aGVuIChAdHlwZSA9IHB1c2gpIGFuZCAoQGluZGV4ID0gMCkge1xyXG4gIC5jb2wtQHtjbGFzc30tcHVzaC0wIHtcclxuICAgIGxlZnQ6IGF1dG87XHJcbiAgfVxyXG59XHJcbi5jYWxjLWdyaWQtY29sdW1uKEBpbmRleCwgQGNsYXNzLCBAdHlwZSkgd2hlbiAoQHR5cGUgPSBwdWxsKSBhbmQgKEBpbmRleCA+IDApIHtcclxuICAuY29sLUB7Y2xhc3N9LXB1bGwtQHtpbmRleH0ge1xyXG4gICAgcmlnaHQ6IHBlcmNlbnRhZ2UoKEBpbmRleCAvIEBncmlkLWNvbHVtbnMpKTtcclxuICB9XHJcbn1cclxuLmNhbGMtZ3JpZC1jb2x1bW4oQGluZGV4LCBAY2xhc3MsIEB0eXBlKSB3aGVuIChAdHlwZSA9IHB1bGwpIGFuZCAoQGluZGV4ID0gMCkge1xyXG4gIC5jb2wtQHtjbGFzc30tcHVsbC0wIHtcclxuICAgIHJpZ2h0OiBhdXRvO1xyXG4gIH1cclxufVxyXG4uY2FsYy1ncmlkLWNvbHVtbihAaW5kZXgsIEBjbGFzcywgQHR5cGUpIHdoZW4gKEB0eXBlID0gb2Zmc2V0KSB7XHJcbiAgLmNvbC1Ae2NsYXNzfS1vZmZzZXQtQHtpbmRleH0ge1xyXG4gICAgbWFyZ2luLWxlZnQ6IHBlcmNlbnRhZ2UoKEBpbmRleCAvIEBncmlkLWNvbHVtbnMpKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIEJhc2ljIGxvb3BpbmcgaW4gTEVTU1xyXG4ubG9vcC1ncmlkLWNvbHVtbnMoQGluZGV4LCBAY2xhc3MsIEB0eXBlKSB3aGVuIChAaW5kZXggPj0gMCkge1xyXG4gIC5jYWxjLWdyaWQtY29sdW1uKEBpbmRleCwgQGNsYXNzLCBAdHlwZSk7XHJcbiAgLy8gbmV4dCBpdGVyYXRpb25cclxuICAubG9vcC1ncmlkLWNvbHVtbnMoKEBpbmRleCAtIDEpLCBAY2xhc3MsIEB0eXBlKTtcclxufVxyXG5cclxuLy8gQ3JlYXRlIGdyaWQgZm9yIHNwZWNpZmljIGNsYXNzXHJcbi5tYWtlLWdyaWQoQGNsYXNzKSB7XHJcbiAgLmZsb2F0LWdyaWQtY29sdW1ucyhAY2xhc3MpO1xyXG4gIC5sb29wLWdyaWQtY29sdW1ucyhAZ3JpZC1jb2x1bW5zLCBAY2xhc3MsIHdpZHRoKTtcclxuICAubG9vcC1ncmlkLWNvbHVtbnMoQGdyaWQtY29sdW1ucywgQGNsYXNzLCBwdWxsKTtcclxuICAubG9vcC1ncmlkLWNvbHVtbnMoQGdyaWQtY29sdW1ucywgQGNsYXNzLCBwdXNoKTtcclxuICAubG9vcC1ncmlkLWNvbHVtbnMoQGdyaWQtY29sdW1ucywgQGNsYXNzLCBvZmZzZXQpO1xyXG59XHJcbiIsIi8vXHJcbi8vIFRhYmxlc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbnRhYmxlIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAdGFibGUtYmc7XHJcbn1cclxuY2FwdGlvbiB7XHJcbiAgcGFkZGluZy10b3A6IEB0YWJsZS1jZWxsLXBhZGRpbmc7XHJcbiAgcGFkZGluZy1ib3R0b206IEB0YWJsZS1jZWxsLXBhZGRpbmc7XHJcbiAgY29sb3I6IEB0ZXh0LW11dGVkO1xyXG4gIHRleHQtYWxpZ246IGxlZnQ7XHJcbn1cclxudGgge1xyXG4gIHRleHQtYWxpZ246IGxlZnQ7XHJcbn1cclxuXHJcblxyXG4vLyBCYXNlbGluZSBzdHlsZXNcclxuXHJcbi50YWJsZSB7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgbWF4LXdpZHRoOiAxMDAlO1xyXG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcclxuICAvLyBDZWxsc1xyXG4gID4gdGhlYWQsXHJcbiAgPiB0Ym9keSxcclxuICA+IHRmb290IHtcclxuICAgID4gdHIge1xyXG4gICAgICA+IHRoLFxyXG4gICAgICA+IHRkIHtcclxuICAgICAgICBwYWRkaW5nOiBAdGFibGUtY2VsbC1wYWRkaW5nO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcclxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBAdGFibGUtYm9yZGVyLWNvbG9yO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIEJvdHRvbSBhbGlnbiBmb3IgY29sdW1uIGhlYWRpbmdzXHJcbiAgPiB0aGVhZCA+IHRyID4gdGgge1xyXG4gICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcclxuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBAdGFibGUtYm9yZGVyLWNvbG9yO1xyXG4gIH1cclxuICAvLyBSZW1vdmUgdG9wIGJvcmRlciBmcm9tIHRoZWFkIGJ5IGRlZmF1bHRcclxuICA+IGNhcHRpb24gKyB0aGVhZCxcclxuICA+IGNvbGdyb3VwICsgdGhlYWQsXHJcbiAgPiB0aGVhZDpmaXJzdC1jaGlsZCB7XHJcbiAgICA+IHRyOmZpcnN0LWNoaWxkIHtcclxuICAgICAgPiB0aCxcclxuICAgICAgPiB0ZCB7XHJcbiAgICAgICAgYm9yZGVyLXRvcDogMDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvLyBBY2NvdW50IGZvciBtdWx0aXBsZSB0Ym9keSBpbnN0YW5jZXNcclxuICA+IHRib2R5ICsgdGJvZHkge1xyXG4gICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIEB0YWJsZS1ib3JkZXItY29sb3I7XHJcbiAgfVxyXG5cclxuICAvLyBOZXN0aW5nXHJcbiAgLnRhYmxlIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IEBib2R5LWJnO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIENvbmRlbnNlZCB0YWJsZSB3LyBoYWxmIHBhZGRpbmdcclxuXHJcbi50YWJsZS1jb25kZW5zZWQge1xyXG4gID4gdGhlYWQsXHJcbiAgPiB0Ym9keSxcclxuICA+IHRmb290IHtcclxuICAgID4gdHIge1xyXG4gICAgICA+IHRoLFxyXG4gICAgICA+IHRkIHtcclxuICAgICAgICBwYWRkaW5nOiBAdGFibGUtY29uZGVuc2VkLWNlbGwtcGFkZGluZztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIEJvcmRlcmVkIHZlcnNpb25cclxuLy9cclxuLy8gQWRkIGJvcmRlcnMgYWxsIGFyb3VuZCB0aGUgdGFibGUgYW5kIGJldHdlZW4gYWxsIHRoZSBjb2x1bW5zLlxyXG5cclxuLnRhYmxlLWJvcmRlcmVkIHtcclxuICBib3JkZXI6IDFweCBzb2xpZCBAdGFibGUtYm9yZGVyLWNvbG9yO1xyXG4gID4gdGhlYWQsXHJcbiAgPiB0Ym9keSxcclxuICA+IHRmb290IHtcclxuICAgID4gdHIge1xyXG4gICAgICA+IHRoLFxyXG4gICAgICA+IHRkIHtcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBAdGFibGUtYm9yZGVyLWNvbG9yO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gID4gdGhlYWQgPiB0ciB7XHJcbiAgICA+IHRoLFxyXG4gICAgPiB0ZCB7XHJcbiAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDJweDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyBaZWJyYS1zdHJpcGluZ1xyXG4vL1xyXG4vLyBEZWZhdWx0IHplYnJhLXN0cmlwZSBzdHlsZXMgKGFsdGVybmF0aW5nIGdyYXkgYW5kIHRyYW5zcGFyZW50IGJhY2tncm91bmRzKVxyXG5cclxuLnRhYmxlLXN0cmlwZWQge1xyXG4gID4gdGJvZHkgPiB0cjpudGgtb2YtdHlwZShvZGQpIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IEB0YWJsZS1iZy1hY2NlbnQ7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gSG92ZXIgZWZmZWN0XHJcbi8vXHJcbi8vIFBsYWNlZCBoZXJlIHNpbmNlIGl0IGhhcyB0byBjb21lIGFmdGVyIHRoZSBwb3RlbnRpYWwgemVicmEgc3RyaXBpbmdcclxuXHJcbi50YWJsZS1ob3ZlciB7XHJcbiAgPiB0Ym9keSA+IHRyOmhvdmVyIHtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IEB0YWJsZS1iZy1ob3ZlcjtcclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyBUYWJsZSBjZWxsIHNpemluZ1xyXG4vL1xyXG4vLyBSZXNldCBkZWZhdWx0IHRhYmxlIGJlaGF2aW9yXHJcblxyXG50YWJsZSBjb2xbY2xhc3MqPVwiY29sLVwiXSB7XHJcbiAgcG9zaXRpb246IHN0YXRpYzsgLy8gUHJldmVudCBib3JkZXIgaGlkaW5nIGluIEZpcmVmb3ggYW5kIElFOS0xMSAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTE2MjMpXHJcbiAgZmxvYXQ6IG5vbmU7XHJcbiAgZGlzcGxheTogdGFibGUtY29sdW1uO1xyXG59XHJcbnRhYmxlIHtcclxuICB0ZCxcclxuICB0aCB7XHJcbiAgICAmW2NsYXNzKj1cImNvbC1cIl0ge1xyXG4gICAgICBwb3NpdGlvbjogc3RhdGljOyAvLyBQcmV2ZW50IGJvcmRlciBoaWRpbmcgaW4gRmlyZWZveCBhbmQgSUU5LTExIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMTYyMylcclxuICAgICAgZmxvYXQ6IG5vbmU7XHJcbiAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gVGFibGUgYmFja2dyb3VuZHNcclxuLy9cclxuLy8gRXhhY3Qgc2VsZWN0b3JzIGJlbG93IHJlcXVpcmVkIHRvIG92ZXJyaWRlIGAudGFibGUtc3RyaXBlZGAgYW5kIHByZXZlbnRcclxuLy8gaW5oZXJpdGFuY2UgdG8gbmVzdGVkIHRhYmxlcy5cclxuXHJcbi8vIEdlbmVyYXRlIHRoZSBjb250ZXh0dWFsIHZhcmlhbnRzXHJcbi50YWJsZS1yb3ctdmFyaWFudChhY3RpdmU7IEB0YWJsZS1iZy1hY3RpdmUpO1xyXG4udGFibGUtcm93LXZhcmlhbnQoc3VjY2VzczsgQHN0YXRlLXN1Y2Nlc3MtYmcpO1xyXG4udGFibGUtcm93LXZhcmlhbnQoaW5mbzsgQHN0YXRlLWluZm8tYmcpO1xyXG4udGFibGUtcm93LXZhcmlhbnQod2FybmluZzsgQHN0YXRlLXdhcm5pbmctYmcpO1xyXG4udGFibGUtcm93LXZhcmlhbnQoZGFuZ2VyOyBAc3RhdGUtZGFuZ2VyLWJnKTtcclxuXHJcblxyXG4vLyBSZXNwb25zaXZlIHRhYmxlc1xyXG4vL1xyXG4vLyBXcmFwIHlvdXIgdGFibGVzIGluIGAudGFibGUtcmVzcG9uc2l2ZWAgYW5kIHdlJ2xsIG1ha2UgdGhlbSBtb2JpbGUgZnJpZW5kbHlcclxuLy8gYnkgZW5hYmxpbmcgaG9yaXpvbnRhbCBzY3JvbGxpbmcuIE9ubHkgYXBwbGllcyA8NzY4cHguIEV2ZXJ5dGhpbmcgYWJvdmUgdGhhdFxyXG4vLyB3aWxsIGRpc3BsYXkgbm9ybWFsbHkuXHJcblxyXG4udGFibGUtcmVzcG9uc2l2ZSB7XHJcbiAgb3ZlcmZsb3cteDogYXV0bztcclxuICBtaW4taGVpZ2h0OiAwLjAxJTsgLy8gV29ya2Fyb3VuZCBmb3IgSUU5IGJ1ZyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTQ4MzcpXHJcblxyXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IEBzY3JlZW4teHMtbWF4KSB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIG1hcmdpbi1ib3R0b206IChAbGluZS1oZWlnaHQtY29tcHV0ZWQgKiAwLjc1KTtcclxuICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcclxuICAgIC1tcy1vdmVyZmxvdy1zdHlsZTogLW1zLWF1dG9oaWRpbmctc2Nyb2xsYmFyO1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgQHRhYmxlLWJvcmRlci1jb2xvcjtcclxuXHJcbiAgICAvLyBUaWdodGVuIHVwIHNwYWNpbmdcclxuICAgID4gLnRhYmxlIHtcclxuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcclxuXHJcbiAgICAgIC8vIEVuc3VyZSB0aGUgY29udGVudCBkb2Vzbid0IHdyYXBcclxuICAgICAgPiB0aGVhZCxcclxuICAgICAgPiB0Ym9keSxcclxuICAgICAgPiB0Zm9vdCB7XHJcbiAgICAgICAgPiB0ciB7XHJcbiAgICAgICAgICA+IHRoLFxyXG4gICAgICAgICAgPiB0ZCB7XHJcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3BlY2lhbCBvdmVycmlkZXMgZm9yIHRoZSBib3JkZXJlZCB0YWJsZXNcclxuICAgID4gLnRhYmxlLWJvcmRlcmVkIHtcclxuICAgICAgYm9yZGVyOiAwO1xyXG5cclxuICAgICAgLy8gTnVrZSB0aGUgYXBwcm9wcmlhdGUgYm9yZGVycyBzbyB0aGF0IHRoZSBwYXJlbnQgY2FuIGhhbmRsZSB0aGVtXHJcbiAgICAgID4gdGhlYWQsXHJcbiAgICAgID4gdGJvZHksXHJcbiAgICAgID4gdGZvb3Qge1xyXG4gICAgICAgID4gdHIge1xyXG4gICAgICAgICAgPiB0aDpmaXJzdC1jaGlsZCxcclxuICAgICAgICAgID4gdGQ6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgICAgICBib3JkZXItbGVmdDogMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgID4gdGg6bGFzdC1jaGlsZCxcclxuICAgICAgICAgID4gdGQ6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgICAgIGJvcmRlci1yaWdodDogMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE9ubHkgbnVrZSB0aGUgbGFzdCByb3cncyBib3R0b20tYm9yZGVyIGluIGB0Ym9keWAgYW5kIGB0Zm9vdGAgc2luY2VcclxuICAgICAgLy8gY2hhbmNlcyBhcmUgdGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBgdHJgIGluIGEgYHRoZWFkYCBhbmQgdGhhdCB3b3VsZFxyXG4gICAgICAvLyByZW1vdmUgdGhlIGJvcmRlciBhbHRvZ2V0aGVyLlxyXG4gICAgICA+IHRib2R5LFxyXG4gICAgICA+IHRmb290IHtcclxuICAgICAgICA+IHRyOmxhc3QtY2hpbGQge1xyXG4gICAgICAgICAgPiB0aCxcclxuICAgICAgICAgID4gdGQge1xyXG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiLy8gVGFibGVzXHJcblxyXG4udGFibGUtcm93LXZhcmlhbnQoQHN0YXRlOyBAYmFja2dyb3VuZCkge1xyXG4gIC8vIEV4YWN0IHNlbGVjdG9ycyBiZWxvdyByZXF1aXJlZCB0byBvdmVycmlkZSBgLnRhYmxlLXN0cmlwZWRgIGFuZCBwcmV2ZW50XHJcbiAgLy8gaW5oZXJpdGFuY2UgdG8gbmVzdGVkIHRhYmxlcy5cclxuICAudGFibGUgPiB0aGVhZCA+IHRyLFxyXG4gIC50YWJsZSA+IHRib2R5ID4gdHIsXHJcbiAgLnRhYmxlID4gdGZvb3QgPiB0ciB7XHJcbiAgICA+IHRkLkB7c3RhdGV9LFxyXG4gICAgPiB0aC5Ae3N0YXRlfSxcclxuICAgICYuQHtzdGF0ZX0gPiB0ZCxcclxuICAgICYuQHtzdGF0ZX0gPiB0aCB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBiYWNrZ3JvdW5kO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gSG92ZXIgc3RhdGVzIGZvciBgLnRhYmxlLWhvdmVyYFxyXG4gIC8vIE5vdGU6IHRoaXMgaXMgbm90IGF2YWlsYWJsZSBmb3IgY2VsbHMgb3Igcm93cyB3aXRoaW4gYHRoZWFkYCBvciBgdGZvb3RgLlxyXG4gIC50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIge1xyXG4gICAgPiB0ZC5Ae3N0YXRlfTpob3ZlcixcclxuICAgID4gdGguQHtzdGF0ZX06aG92ZXIsXHJcbiAgICAmLkB7c3RhdGV9OmhvdmVyID4gdGQsXHJcbiAgICAmOmhvdmVyID4gLkB7c3RhdGV9LFxyXG4gICAgJi5Ae3N0YXRlfTpob3ZlciA+IHRoIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKEBiYWNrZ3JvdW5kLCA1JSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIi8vXHJcbi8vIEZvcm1zXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuLy8gTm9ybWFsaXplIG5vbi1jb250cm9sc1xyXG4vL1xyXG4vLyBSZXN0eWxlIGFuZCBiYXNlbGluZSBub24tY29udHJvbCBmb3JtIGVsZW1lbnRzLlxyXG5cclxuZmllbGRzZXQge1xyXG4gIHBhZGRpbmc6IDA7XHJcbiAgbWFyZ2luOiAwO1xyXG4gIGJvcmRlcjogMDtcclxuICAvLyBDaHJvbWUgYW5kIEZpcmVmb3ggc2V0IGEgYG1pbi13aWR0aDogbWluLWNvbnRlbnQ7YCBvbiBmaWVsZHNldHMsXHJcbiAgLy8gc28gd2UgcmVzZXQgdGhhdCB0byBlbnN1cmUgaXQgYmVoYXZlcyBtb3JlIGxpa2UgYSBzdGFuZGFyZCBibG9jayBlbGVtZW50LlxyXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzEyMzU5LlxyXG4gIG1pbi13aWR0aDogMDtcclxufVxyXG5cclxubGVnZW5kIHtcclxuICBkaXNwbGF5OiBibG9jaztcclxuICB3aWR0aDogMTAwJTtcclxuICBwYWRkaW5nOiAwO1xyXG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcclxuICBmb250LXNpemU6IChAZm9udC1zaXplLWJhc2UgKiAxLjUpO1xyXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xyXG4gIGNvbG9yOiBAbGVnZW5kLWNvbG9yO1xyXG4gIGJvcmRlcjogMDtcclxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQGxlZ2VuZC1ib3JkZXItY29sb3I7XHJcbn1cclxuXHJcbmxhYmVsIHtcclxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgbWF4LXdpZHRoOiAxMDAlOyAvLyBGb3JjZSBJRTggdG8gd3JhcCBsb25nIGNvbnRlbnQgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzEzMTQxKVxyXG4gIG1hcmdpbi1ib3R0b206IDVweDtcclxuICBmb250LXdlaWdodDogYm9sZDtcclxufVxyXG5cclxuXHJcbi8vIE5vcm1hbGl6ZSBmb3JtIGNvbnRyb2xzXHJcbi8vXHJcbi8vIFdoaWxlIG1vc3Qgb2Ygb3VyIGZvcm0gc3R5bGVzIHJlcXVpcmUgZXh0cmEgY2xhc3Nlcywgc29tZSBiYXNpYyBub3JtYWxpemF0aW9uXHJcbi8vIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSBvcHRpbXVtIGRpc3BsYXkgd2l0aCBvciB3aXRob3V0IHRob3NlIGNsYXNzZXMgdG8gYmV0dGVyXHJcbi8vIGFkZHJlc3MgYnJvd3NlciBpbmNvbnNpc3RlbmNpZXMuXHJcblxyXG4vLyBPdmVycmlkZSBjb250ZW50LWJveCBpbiBOb3JtYWxpemUgKCogaXNuJ3Qgc3BlY2lmaWMgZW5vdWdoKVxyXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdIHtcclxuICAuYm94LXNpemluZyhib3JkZXItYm94KTtcclxufVxyXG5cclxuLy8gUG9zaXRpb24gcmFkaW9zIGFuZCBjaGVja2JveGVzIGJldHRlclxyXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0sXHJcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XHJcbiAgbWFyZ2luOiA0cHggMCAwO1xyXG4gIG1hcmdpbi10b3A6IDFweCBcXDk7IC8vIElFOC05XHJcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcclxufVxyXG5cclxuaW5wdXRbdHlwZT1cImZpbGVcIl0ge1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG59XHJcblxyXG4vLyBNYWtlIHJhbmdlIGlucHV0cyBiZWhhdmUgbGlrZSB0ZXh0dWFsIGZvcm0gY29udHJvbHNcclxuaW5wdXRbdHlwZT1cInJhbmdlXCJdIHtcclxuICBkaXNwbGF5OiBibG9jaztcclxuICB3aWR0aDogMTAwJTtcclxufVxyXG5cclxuLy8gTWFrZSBtdWx0aXBsZSBzZWxlY3QgZWxlbWVudHMgaGVpZ2h0IG5vdCBmaXhlZFxyXG5zZWxlY3RbbXVsdGlwbGVdLFxyXG5zZWxlY3Rbc2l6ZV0ge1xyXG4gIGhlaWdodDogYXV0bztcclxufVxyXG5cclxuLy8gRm9jdXMgZm9yIGZpbGUsIHJhZGlvLCBhbmQgY2hlY2tib3hcclxuaW5wdXRbdHlwZT1cImZpbGVcIl06Zm9jdXMsXHJcbmlucHV0W3R5cGU9XCJyYWRpb1wiXTpmb2N1cyxcclxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmZvY3VzIHtcclxuICAudGFiLWZvY3VzKCk7XHJcbn1cclxuXHJcbi8vIEFkanVzdCBvdXRwdXQgZWxlbWVudFxyXG5vdXRwdXQge1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIHBhZGRpbmctdG9wOiAoQHBhZGRpbmctYmFzZS12ZXJ0aWNhbCArIDEpO1xyXG4gIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1iYXNlO1xyXG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcclxuICBjb2xvcjogQGlucHV0LWNvbG9yO1xyXG59XHJcblxyXG5cclxuLy8gQ29tbW9uIGZvcm0gY29udHJvbHNcclxuLy9cclxuLy8gU2hhcmVkIHNpemUgYW5kIHR5cGUgcmVzZXRzIGZvciBmb3JtIGNvbnRyb2xzLiBBcHBseSBgLmZvcm0tY29udHJvbGAgdG8gYW55XHJcbi8vIG9mIHRoZSBmb2xsb3dpbmcgZm9ybSBjb250cm9sczpcclxuLy9cclxuLy8gc2VsZWN0XHJcbi8vIHRleHRhcmVhXHJcbi8vIGlucHV0W3R5cGU9XCJ0ZXh0XCJdXHJcbi8vIGlucHV0W3R5cGU9XCJwYXNzd29yZFwiXVxyXG4vLyBpbnB1dFt0eXBlPVwiZGF0ZXRpbWVcIl1cclxuLy8gaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdXHJcbi8vIGlucHV0W3R5cGU9XCJkYXRlXCJdXHJcbi8vIGlucHV0W3R5cGU9XCJtb250aFwiXVxyXG4vLyBpbnB1dFt0eXBlPVwidGltZVwiXVxyXG4vLyBpbnB1dFt0eXBlPVwid2Vla1wiXVxyXG4vLyBpbnB1dFt0eXBlPVwibnVtYmVyXCJdXHJcbi8vIGlucHV0W3R5cGU9XCJlbWFpbFwiXVxyXG4vLyBpbnB1dFt0eXBlPVwidXJsXCJdXHJcbi8vIGlucHV0W3R5cGU9XCJzZWFyY2hcIl1cclxuLy8gaW5wdXRbdHlwZT1cInRlbFwiXVxyXG4vLyBpbnB1dFt0eXBlPVwiY29sb3JcIl1cclxuXHJcbi5mb3JtLWNvbnRyb2wge1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogQGlucHV0LWhlaWdodC1iYXNlOyAvLyBNYWtlIGlucHV0cyBhdCBsZWFzdCB0aGUgaGVpZ2h0IG9mIHRoZWlyIGJ1dHRvbiBjb3VudGVycGFydCAoYmFzZSBsaW5lLWhlaWdodCArIHBhZGRpbmcgKyBib3JkZXIpXHJcbiAgcGFkZGluZzogQHBhZGRpbmctYmFzZS12ZXJ0aWNhbCBAcGFkZGluZy1iYXNlLWhvcml6b250YWw7XHJcbiAgZm9udC1zaXplOiBAZm9udC1zaXplLWJhc2U7XHJcbiAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xyXG4gIGNvbG9yOiBAaW5wdXQtY29sb3I7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogQGlucHV0LWJnO1xyXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IC8vIFJlc2V0IHVudXN1YWwgRmlyZWZveC1vbi1BbmRyb2lkIGRlZmF1bHQgc3R5bGU7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzL2lzc3Vlcy8yMTRcclxuICBib3JkZXI6IDFweCBzb2xpZCBAaW5wdXQtYm9yZGVyO1xyXG4gIGJvcmRlci1yYWRpdXM6IEBpbnB1dC1ib3JkZXItcmFkaXVzOyAvLyBOb3RlOiBUaGlzIGhhcyBubyBlZmZlY3Qgb24gPHNlbGVjdD5zIGluIHNvbWUgYnJvd3NlcnMsIGR1ZSB0byB0aGUgbGltaXRlZCBzdHlsYWJpbGl0eSBvZiA8c2VsZWN0PnMgaW4gQ1NTLlxyXG4gIC5ib3gtc2hhZG93KGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpKTtcclxuICAudHJhbnNpdGlvbih+XCJib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgLjE1cywgYm94LXNoYWRvdyBlYXNlLWluLW91dCAuMTVzXCIpO1xyXG5cclxuICAvLyBDdXN0b21pemUgdGhlIGA6Zm9jdXNgIHN0YXRlIHRvIGltaXRhdGUgbmF0aXZlIFdlYktpdCBzdHlsZXMuXHJcbiAgLmZvcm0tY29udHJvbC1mb2N1cygpO1xyXG5cclxuICAvLyBQbGFjZWhvbGRlclxyXG4gIC5wbGFjZWhvbGRlcigpO1xyXG5cclxuICAvLyBEaXNhYmxlZCBhbmQgcmVhZC1vbmx5IGlucHV0c1xyXG4gIC8vXHJcbiAgLy8gSFRNTDUgc2F5cyB0aGF0IGNvbnRyb2xzIHVuZGVyIGEgZmllbGRzZXQgPiBsZWdlbmQ6Zmlyc3QtY2hpbGQgd29uJ3QgYmVcclxuICAvLyBkaXNhYmxlZCBpZiB0aGUgZmllbGRzZXQgaXMgZGlzYWJsZWQuIER1ZSB0byBpbXBsZW1lbnRhdGlvbiBkaWZmaWN1bHR5LCB3ZVxyXG4gIC8vIGRvbid0IGhvbm9yIHRoYXQgZWRnZSBjYXNlOyB3ZSBzdHlsZSB0aGVtIGFzIGRpc2FibGVkIGFueXdheS5cclxuICAmW2Rpc2FibGVkXSxcclxuICAmW3JlYWRvbmx5XSxcclxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAaW5wdXQtYmctZGlzYWJsZWQ7XHJcbiAgICBvcGFjaXR5OiAxOyAvLyBpT1MgZml4IGZvciB1bnJlYWRhYmxlIGRpc2FibGVkIGNvbnRlbnQ7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNjU1XHJcbiAgfVxyXG5cclxuICAmW2Rpc2FibGVkXSxcclxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XHJcbiAgICBjdXJzb3I6IEBjdXJzb3ItZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvLyBSZXNldCBoZWlnaHQgZm9yIGB0ZXh0YXJlYWBzXHJcbiAgdGV4dGFyZWEmIHtcclxuICAgIGhlaWdodDogYXV0bztcclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyBTZWFyY2ggaW5wdXRzIGluIGlPU1xyXG4vL1xyXG4vLyBUaGlzIG92ZXJyaWRlcyB0aGUgZXh0cmEgcm91bmRlZCBjb3JuZXJzIG9uIHNlYXJjaCBpbnB1dHMgaW4gaU9TIHNvIHRoYXQgb3VyXHJcbi8vIGAuZm9ybS1jb250cm9sYCBjbGFzcyBjYW4gcHJvcGVybHkgc3R5bGUgdGhlbS4gTm90ZSB0aGF0IHRoaXMgY2Fubm90IHNpbXBseVxyXG4vLyBiZSBhZGRlZCB0byBgLmZvcm0tY29udHJvbGAgYXMgaXQncyBub3Qgc3BlY2lmaWMgZW5vdWdoLiBGb3IgZGV0YWlscywgc2VlXHJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTE1ODYuXHJcblxyXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdIHtcclxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XHJcbn1cclxuXHJcblxyXG4vLyBTcGVjaWFsIHN0eWxlcyBmb3IgaU9TIHRlbXBvcmFsIGlucHV0c1xyXG4vL1xyXG4vLyBJbiBNb2JpbGUgU2FmYXJpLCBzZXR0aW5nIGBkaXNwbGF5OiBibG9ja2Agb24gdGVtcG9yYWwgaW5wdXRzIGNhdXNlcyB0aGVcclxuLy8gdGV4dCB3aXRoaW4gdGhlIGlucHV0IHRvIGJlY29tZSB2ZXJ0aWNhbGx5IG1pc2FsaWduZWQuIEFzIGEgd29ya2Fyb3VuZCwgd2VcclxuLy8gc2V0IGEgcGl4ZWwgbGluZS1oZWlnaHQgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBoZWlnaHQgb2YgdGhlIGlucHV0LCBidXQgb25seVxyXG4vLyBmb3IgU2FmYXJpLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTg0OFxyXG4vL1xyXG4vLyBOb3RlIHRoYXQgYXMgb2YgOC4zLCBpT1MgZG9lc24ndCBzdXBwb3J0IGBkYXRldGltZWAgb3IgYHdlZWtgLlxyXG5cclxuQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMCkge1xyXG4gIGlucHV0W3R5cGU9XCJkYXRlXCJdLFxyXG4gIGlucHV0W3R5cGU9XCJ0aW1lXCJdLFxyXG4gIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXSxcclxuICBpbnB1dFt0eXBlPVwibW9udGhcIl0ge1xyXG4gICAgJi5mb3JtLWNvbnRyb2wge1xyXG4gICAgICBsaW5lLWhlaWdodDogQGlucHV0LWhlaWdodC1iYXNlO1xyXG4gICAgfVxyXG5cclxuICAgICYuaW5wdXQtc20sXHJcbiAgICAuaW5wdXQtZ3JvdXAtc20gJiB7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LXNtYWxsO1xyXG4gICAgfVxyXG5cclxuICAgICYuaW5wdXQtbGcsXHJcbiAgICAuaW5wdXQtZ3JvdXAtbGcgJiB7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LWxhcmdlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIEZvcm0gZ3JvdXBzXHJcbi8vXHJcbi8vIERlc2lnbmVkIHRvIGhlbHAgd2l0aCB0aGUgb3JnYW5pemF0aW9uIGFuZCBzcGFjaW5nIG9mIHZlcnRpY2FsIGZvcm1zLiBGb3JcclxuLy8gaG9yaXpvbnRhbCBmb3JtcywgdXNlIHRoZSBwcmVkZWZpbmVkIGdyaWQgY2xhc3Nlcy5cclxuXHJcbi5mb3JtLWdyb3VwIHtcclxuICBtYXJnaW4tYm90dG9tOiBAZm9ybS1ncm91cC1tYXJnaW4tYm90dG9tO1xyXG59XHJcblxyXG5cclxuLy8gQ2hlY2tib3hlcyBhbmQgcmFkaW9zXHJcbi8vXHJcbi8vIEluZGVudCB0aGUgbGFiZWxzIHRvIHBvc2l0aW9uIHJhZGlvcy9jaGVja2JveGVzIGFzIGhhbmdpbmcgY29udHJvbHMuXHJcblxyXG4ucmFkaW8sXHJcbi5jaGVja2JveCB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIG1hcmdpbi10b3A6IDEwcHg7XHJcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcclxuXHJcbiAgbGFiZWwge1xyXG4gICAgbWluLWhlaWdodDogQGxpbmUtaGVpZ2h0LWNvbXB1dGVkOyAvLyBFbnN1cmUgdGhlIGlucHV0IGRvZXNuJ3QganVtcCB3aGVuIHRoZXJlIGlzIG5vIHRleHRcclxuICAgIHBhZGRpbmctbGVmdDogMjBweDtcclxuICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gIH1cclxufVxyXG4ucmFkaW8gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxyXG4ucmFkaW8taW5saW5lIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcclxuLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcclxuLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICBtYXJnaW4tbGVmdDogLTIwcHg7XHJcbiAgbWFyZ2luLXRvcDogNHB4IFxcOTtcclxufVxyXG5cclxuLnJhZGlvICsgLnJhZGlvLFxyXG4uY2hlY2tib3ggKyAuY2hlY2tib3gge1xyXG4gIG1hcmdpbi10b3A6IC01cHg7IC8vIE1vdmUgdXAgc2libGluZyByYWRpb3Mgb3IgY2hlY2tib3hlcyBmb3IgdGlnaHRlciBzcGFjaW5nXHJcbn1cclxuXHJcbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBvbiBzYW1lIGxpbmVcclxuLnJhZGlvLWlubGluZSxcclxuLmNoZWNrYm94LWlubGluZSB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICBwYWRkaW5nLWxlZnQ6IDIwcHg7XHJcbiAgbWFyZ2luLWJvdHRvbTogMDtcclxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcbiAgY3Vyc29yOiBwb2ludGVyO1xyXG59XHJcbi5yYWRpby1pbmxpbmUgKyAucmFkaW8taW5saW5lLFxyXG4uY2hlY2tib3gtaW5saW5lICsgLmNoZWNrYm94LWlubGluZSB7XHJcbiAgbWFyZ2luLXRvcDogMDtcclxuICBtYXJnaW4tbGVmdDogMTBweDsgLy8gc3BhY2Ugb3V0IGNvbnNlY3V0aXZlIGlubGluZSBjb250cm9sc1xyXG59XHJcblxyXG4vLyBBcHBseSBzYW1lIGRpc2FibGVkIGN1cnNvciB0d2VhayBhcyBmb3IgaW5wdXRzXHJcbi8vIFNvbWUgc3BlY2lhbCBjYXJlIGlzIG5lZWRlZCBiZWNhdXNlIDxsYWJlbD5zIGRvbid0IGluaGVyaXQgdGhlaXIgcGFyZW50J3MgYGN1cnNvcmAuXHJcbi8vXHJcbi8vIE5vdGU6IE5laXRoZXIgcmFkaW9zIG5vciBjaGVja2JveGVzIGNhbiBiZSByZWFkb25seS5cclxuaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxyXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xyXG4gICZbZGlzYWJsZWRdLFxyXG4gICYuZGlzYWJsZWQsXHJcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xyXG4gICAgY3Vyc29yOiBAY3Vyc29yLWRpc2FibGVkO1xyXG4gIH1cclxufVxyXG4vLyBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIGRpcmVjdGx5IG9uIDxsYWJlbD5zXHJcbi5yYWRpby1pbmxpbmUsXHJcbi5jaGVja2JveC1pbmxpbmUge1xyXG4gICYuZGlzYWJsZWQsXHJcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xyXG4gICAgY3Vyc29yOiBAY3Vyc29yLWRpc2FibGVkO1xyXG4gIH1cclxufVxyXG4vLyBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIG9uIGVsZW1lbnRzIHdpdGggPGxhYmVsPiBkZXNjZW5kYW50c1xyXG4ucmFkaW8sXHJcbi5jaGVja2JveCB7XHJcbiAgJi5kaXNhYmxlZCxcclxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XHJcbiAgICBsYWJlbCB7XHJcbiAgICAgIGN1cnNvcjogQGN1cnNvci1kaXNhYmxlZDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyBTdGF0aWMgZm9ybSBjb250cm9sIHRleHRcclxuLy9cclxuLy8gQXBwbHkgY2xhc3MgdG8gYSBgcGAgZWxlbWVudCB0byBtYWtlIGFueSBzdHJpbmcgb2YgdGV4dCBhbGlnbiB3aXRoIGxhYmVscyBpblxyXG4vLyBhIGhvcml6b250YWwgZm9ybSBsYXlvdXQuXHJcblxyXG4uZm9ybS1jb250cm9sLXN0YXRpYyB7XHJcbiAgLy8gU2l6ZSBpdCBhcHByb3ByaWF0ZWx5IG5leHQgdG8gcmVhbCBmb3JtIGNvbnRyb2xzXHJcbiAgcGFkZGluZy10b3A6IChAcGFkZGluZy1iYXNlLXZlcnRpY2FsICsgMSk7XHJcbiAgcGFkZGluZy1ib3R0b206IChAcGFkZGluZy1iYXNlLXZlcnRpY2FsICsgMSk7XHJcbiAgLy8gUmVtb3ZlIGRlZmF1bHQgbWFyZ2luIGZyb20gYHBgXHJcbiAgbWFyZ2luLWJvdHRvbTogMDtcclxuICBtaW4taGVpZ2h0OiAoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgQGZvbnQtc2l6ZS1iYXNlKTtcclxuXHJcbiAgJi5pbnB1dC1sZyxcclxuICAmLmlucHV0LXNtIHtcclxuICAgIHBhZGRpbmctbGVmdDogMDtcclxuICAgIHBhZGRpbmctcmlnaHQ6IDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gRm9ybSBjb250cm9sIHNpemluZ1xyXG4vL1xyXG4vLyBCdWlsZCBvbiBgLmZvcm0tY29udHJvbGAgd2l0aCBtb2RpZmllciBjbGFzc2VzIHRvIGRlY3JlYXNlIG9yIGluY3JlYXNlIHRoZVxyXG4vLyBoZWlnaHQgYW5kIGZvbnQtc2l6ZSBvZiBmb3JtIGNvbnRyb2xzLlxyXG4vL1xyXG4vLyBUaGUgYC5mb3JtLWdyb3VwLSogZm9ybS1jb250cm9sYCB2YXJpYXRpb25zIGFyZSBzYWRseSBkdXBsaWNhdGVkIHRvIGF2b2lkIHRoZVxyXG4vLyBpc3N1ZSBkb2N1bWVudGVkIGluIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTUwNzQuXHJcblxyXG4uaW5wdXQtc20ge1xyXG4gIC5pbnB1dC1zaXplKEBpbnB1dC1oZWlnaHQtc21hbGw7IEBwYWRkaW5nLXNtYWxsLXZlcnRpY2FsOyBAcGFkZGluZy1zbWFsbC1ob3Jpem9udGFsOyBAZm9udC1zaXplLXNtYWxsOyBAbGluZS1oZWlnaHQtc21hbGw7IEBpbnB1dC1ib3JkZXItcmFkaXVzLXNtYWxsKTtcclxufVxyXG4uZm9ybS1ncm91cC1zbSB7XHJcbiAgLmZvcm0tY29udHJvbCB7XHJcbiAgICBoZWlnaHQ6IEBpbnB1dC1oZWlnaHQtc21hbGw7XHJcbiAgICBwYWRkaW5nOiBAcGFkZGluZy1zbWFsbC12ZXJ0aWNhbCBAcGFkZGluZy1zbWFsbC1ob3Jpem9udGFsO1xyXG4gICAgZm9udC1zaXplOiBAZm9udC1zaXplLXNtYWxsO1xyXG4gICAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1zbWFsbDtcclxuICAgIGJvcmRlci1yYWRpdXM6IEBpbnB1dC1ib3JkZXItcmFkaXVzLXNtYWxsO1xyXG4gIH1cclxuICBzZWxlY3QuZm9ybS1jb250cm9sIHtcclxuICAgIGhlaWdodDogQGlucHV0LWhlaWdodC1zbWFsbDtcclxuICAgIGxpbmUtaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LXNtYWxsO1xyXG4gIH1cclxuICB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsXHJcbiAgc2VsZWN0W211bHRpcGxlXS5mb3JtLWNvbnRyb2wge1xyXG4gICAgaGVpZ2h0OiBhdXRvO1xyXG4gIH1cclxuICAuZm9ybS1jb250cm9sLXN0YXRpYyB7XHJcbiAgICBoZWlnaHQ6IEBpbnB1dC1oZWlnaHQtc21hbGw7XHJcbiAgICBtaW4taGVpZ2h0OiAoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgQGZvbnQtc2l6ZS1zbWFsbCk7XHJcbiAgICBwYWRkaW5nOiAoQHBhZGRpbmctc21hbGwtdmVydGljYWwgKyAxKSBAcGFkZGluZy1zbWFsbC1ob3Jpem9udGFsO1xyXG4gICAgZm9udC1zaXplOiBAZm9udC1zaXplLXNtYWxsO1xyXG4gICAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1zbWFsbDtcclxuICB9XHJcbn1cclxuXHJcbi5pbnB1dC1sZyB7XHJcbiAgLmlucHV0LXNpemUoQGlucHV0LWhlaWdodC1sYXJnZTsgQHBhZGRpbmctbGFyZ2UtdmVydGljYWw7IEBwYWRkaW5nLWxhcmdlLWhvcml6b250YWw7IEBmb250LXNpemUtbGFyZ2U7IEBsaW5lLWhlaWdodC1sYXJnZTsgQGlucHV0LWJvcmRlci1yYWRpdXMtbGFyZ2UpO1xyXG59XHJcbi5mb3JtLWdyb3VwLWxnIHtcclxuICAuZm9ybS1jb250cm9sIHtcclxuICAgIGhlaWdodDogQGlucHV0LWhlaWdodC1sYXJnZTtcclxuICAgIHBhZGRpbmc6IEBwYWRkaW5nLWxhcmdlLXZlcnRpY2FsIEBwYWRkaW5nLWxhcmdlLWhvcml6b250YWw7XHJcbiAgICBmb250LXNpemU6IEBmb250LXNpemUtbGFyZ2U7XHJcbiAgICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LWxhcmdlO1xyXG4gICAgYm9yZGVyLXJhZGl1czogQGlucHV0LWJvcmRlci1yYWRpdXMtbGFyZ2U7XHJcbiAgfVxyXG4gIHNlbGVjdC5mb3JtLWNvbnRyb2wge1xyXG4gICAgaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LWxhcmdlO1xyXG4gICAgbGluZS1oZWlnaHQ6IEBpbnB1dC1oZWlnaHQtbGFyZ2U7XHJcbiAgfVxyXG4gIHRleHRhcmVhLmZvcm0tY29udHJvbCxcclxuICBzZWxlY3RbbXVsdGlwbGVdLmZvcm0tY29udHJvbCB7XHJcbiAgICBoZWlnaHQ6IGF1dG87XHJcbiAgfVxyXG4gIC5mb3JtLWNvbnRyb2wtc3RhdGljIHtcclxuICAgIGhlaWdodDogQGlucHV0LWhlaWdodC1sYXJnZTtcclxuICAgIG1pbi1oZWlnaHQ6IChAbGluZS1oZWlnaHQtY29tcHV0ZWQgKyBAZm9udC1zaXplLWxhcmdlKTtcclxuICAgIHBhZGRpbmc6IChAcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCArIDEpIEBwYWRkaW5nLWxhcmdlLWhvcml6b250YWw7XHJcbiAgICBmb250LXNpemU6IEBmb250LXNpemUtbGFyZ2U7XHJcbiAgICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LWxhcmdlO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIEZvcm0gY29udHJvbCBmZWVkYmFjayBzdGF0ZXNcclxuLy9cclxuLy8gQXBwbHkgY29udGV4dHVhbCBhbmQgc2VtYW50aWMgc3RhdGVzIHRvIGluZGl2aWR1YWwgZm9ybSBjb250cm9scy5cclxuXHJcbi5oYXMtZmVlZGJhY2sge1xyXG4gIC8vIEVuYWJsZSBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHJcbiAgLy8gRW5zdXJlIGljb25zIGRvbid0IG92ZXJsYXAgdGV4dFxyXG4gIC5mb3JtLWNvbnRyb2wge1xyXG4gICAgcGFkZGluZy1yaWdodDogKEBpbnB1dC1oZWlnaHQtYmFzZSAqIDEuMjUpO1xyXG4gIH1cclxufVxyXG4vLyBGZWVkYmFjayBpY29uIChyZXF1aXJlcyAuZ2x5cGhpY29uIGNsYXNzZXMpXHJcbi5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICB0b3A6IDA7XHJcbiAgcmlnaHQ6IDA7XHJcbiAgei1pbmRleDogMjsgLy8gRW5zdXJlIGljb24gaXMgYWJvdmUgaW5wdXQgZ3JvdXBzXHJcbiAgZGlzcGxheTogYmxvY2s7XHJcbiAgd2lkdGg6IEBpbnB1dC1oZWlnaHQtYmFzZTtcclxuICBoZWlnaHQ6IEBpbnB1dC1oZWlnaHQtYmFzZTtcclxuICBsaW5lLWhlaWdodDogQGlucHV0LWhlaWdodC1iYXNlO1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcclxufVxyXG4uaW5wdXQtbGcgKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLFxyXG4uaW5wdXQtZ3JvdXAtbGcgKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLFxyXG4uZm9ybS1ncm91cC1sZyAuZm9ybS1jb250cm9sICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XHJcbiAgd2lkdGg6IEBpbnB1dC1oZWlnaHQtbGFyZ2U7XHJcbiAgaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LWxhcmdlO1xyXG4gIGxpbmUtaGVpZ2h0OiBAaW5wdXQtaGVpZ2h0LWxhcmdlO1xyXG59XHJcbi5pbnB1dC1zbSArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXHJcbi5pbnB1dC1ncm91cC1zbSArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXHJcbi5mb3JtLWdyb3VwLXNtIC5mb3JtLWNvbnRyb2wgKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcclxuICB3aWR0aDogQGlucHV0LWhlaWdodC1zbWFsbDtcclxuICBoZWlnaHQ6IEBpbnB1dC1oZWlnaHQtc21hbGw7XHJcbiAgbGluZS1oZWlnaHQ6IEBpbnB1dC1oZWlnaHQtc21hbGw7XHJcbn1cclxuXHJcbi8vIEZlZWRiYWNrIHN0YXRlc1xyXG4uaGFzLXN1Y2Nlc3Mge1xyXG4gIC5mb3JtLWNvbnRyb2wtdmFsaWRhdGlvbihAc3RhdGUtc3VjY2Vzcy10ZXh0OyBAc3RhdGUtc3VjY2Vzcy10ZXh0OyBAc3RhdGUtc3VjY2Vzcy1iZyk7XHJcbn1cclxuLmhhcy13YXJuaW5nIHtcclxuICAuZm9ybS1jb250cm9sLXZhbGlkYXRpb24oQHN0YXRlLXdhcm5pbmctdGV4dDsgQHN0YXRlLXdhcm5pbmctdGV4dDsgQHN0YXRlLXdhcm5pbmctYmcpO1xyXG59XHJcbi5oYXMtZXJyb3Ige1xyXG4gIC5mb3JtLWNvbnRyb2wtdmFsaWRhdGlvbihAc3RhdGUtZGFuZ2VyLXRleHQ7IEBzdGF0ZS1kYW5nZXItdGV4dDsgQHN0YXRlLWRhbmdlci1iZyk7XHJcbn1cclxuXHJcbi8vIFJlcG9zaXRpb24gZmVlZGJhY2sgaWNvbiBpZiBpbnB1dCBoYXMgdmlzaWJsZSBsYWJlbCBhYm92ZVxyXG4uaGFzLWZlZWRiYWNrIGxhYmVsIHtcclxuXHJcbiAgJiB+IC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xyXG4gICAgIHRvcDogKEBsaW5lLWhlaWdodC1jb21wdXRlZCArIDUpOyAvLyBIZWlnaHQgb2YgdGhlIGBsYWJlbGAgYW5kIGl0cyBtYXJnaW5cclxuICB9XHJcbiAgJi5zci1vbmx5IH4gLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XHJcbiAgICAgdG9wOiAwO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIEhlbHAgdGV4dFxyXG4vL1xyXG4vLyBBcHBseSB0byBhbnkgZWxlbWVudCB5b3Ugd2lzaCB0byBjcmVhdGUgbGlnaHQgdGV4dCBmb3IgcGxhY2VtZW50IGltbWVkaWF0ZWx5XHJcbi8vIGJlbG93IGEgZm9ybSBjb250cm9sLiBVc2UgZm9yIGdlbmVyYWwgaGVscCwgZm9ybWF0dGluZywgb3IgaW5zdHJ1Y3Rpb25hbCB0ZXh0LlxyXG5cclxuLmhlbHAtYmxvY2sge1xyXG4gIGRpc3BsYXk6IGJsb2NrOyAvLyBhY2NvdW50IGZvciBhbnkgZWxlbWVudCB1c2luZyBoZWxwLWJsb2NrXHJcbiAgbWFyZ2luLXRvcDogNXB4O1xyXG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XHJcbiAgY29sb3I6IGxpZ2h0ZW4oQHRleHQtY29sb3IsIDI1JSk7IC8vIGxpZ2h0ZW4gdGhlIHRleHQgc29tZSBmb3IgY29udHJhc3RcclxufVxyXG5cclxuXHJcbi8vIElubGluZSBmb3Jtc1xyXG4vL1xyXG4vLyBNYWtlIGZvcm1zIGFwcGVhciBpbmxpbmUoLWJsb2NrKSBieSBhZGRpbmcgdGhlIGAuZm9ybS1pbmxpbmVgIGNsYXNzLiBJbmxpbmVcclxuLy8gZm9ybXMgYmVnaW4gc3RhY2tlZCBvbiBleHRyYSBzbWFsbCAobW9iaWxlKSBkZXZpY2VzIGFuZCB0aGVuIGdvIGlubGluZSB3aGVuXHJcbi8vIHZpZXdwb3J0cyByZWFjaCA8NzY4cHguXHJcbi8vXHJcbi8vIFJlcXVpcmVzIHdyYXBwaW5nIGlucHV0cyBhbmQgbGFiZWxzIHdpdGggYC5mb3JtLWdyb3VwYCBmb3IgcHJvcGVyIGRpc3BsYXkgb2ZcclxuLy8gZGVmYXVsdCBIVE1MIGZvcm0gY29udHJvbHMgYW5kIG91ciBjdXN0b20gZm9ybSBjb250cm9scyAoZS5nLiwgaW5wdXQgZ3JvdXBzKS5cclxuLy9cclxuLy8gSGVhZHMgdXAhIFRoaXMgaXMgbWl4aW4tZWQgaW50byBgLm5hdmJhci1mb3JtYCBpbiBuYXZiYXJzLmxlc3MuXHJcblxyXG4uZm9ybS1pbmxpbmUge1xyXG5cclxuICAvLyBLaWNrIGluIHRoZSBpbmxpbmVcclxuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIHtcclxuICAgIC8vIElubGluZS1ibG9jayBhbGwgdGhlIHRoaW5ncyBmb3IgXCJpbmxpbmVcIlxyXG4gICAgLmZvcm0tZ3JvdXAge1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW4gbmF2YmFyLWZvcm0sIGFsbG93IGZvbGtzIHRvICpub3QqIHVzZSBgLmZvcm0tZ3JvdXBgXHJcbiAgICAuZm9ybS1jb250cm9sIHtcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICB3aWR0aDogYXV0bzsgLy8gUHJldmVudCBsYWJlbHMgZnJvbSBzdGFja2luZyBhYm92ZSBpbnB1dHMgaW4gYC5mb3JtLWdyb3VwYFxyXG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3RhdGljIGNvbnRyb2xzIGJlaGF2ZSBsaWtlIHJlZ3VsYXIgb25lc1xyXG4gICAgLmZvcm0tY29udHJvbC1zdGF0aWMge1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB9XHJcblxyXG4gICAgLmlucHV0LWdyb3VwIHtcclxuICAgICAgZGlzcGxheTogaW5saW5lLXRhYmxlO1xyXG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cclxuICAgICAgLmlucHV0LWdyb3VwLWFkZG9uLFxyXG4gICAgICAuaW5wdXQtZ3JvdXAtYnRuLFxyXG4gICAgICAuZm9ybS1jb250cm9sIHtcclxuICAgICAgICB3aWR0aDogYXV0bztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIElucHV0IGdyb3VwcyBuZWVkIHRoYXQgMTAwJSB3aWR0aCB0aG91Z2hcclxuICAgIC5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wge1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgIH1cclxuXHJcbiAgICAuY29udHJvbC1sYWJlbCB7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIGRlZmF1bHQgbWFyZ2luIG9uIHJhZGlvcy9jaGVja2JveGVzIHRoYXQgd2VyZSB1c2VkIGZvciBzdGFja2luZywgYW5kXHJcbiAgICAvLyB0aGVuIHVuZG8gdGhlIGZsb2F0aW5nIG9mIHJhZGlvcyBhbmQgY2hlY2tib3hlcyB0byBtYXRjaC5cclxuICAgIC5yYWRpbyxcclxuICAgIC5jaGVja2JveCB7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgbWFyZ2luLXRvcDogMDtcclxuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcclxuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuXHJcbiAgICAgIGxhYmVsIHtcclxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC5yYWRpbyBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXHJcbiAgICAuY2hlY2tib3ggaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcclxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICBtYXJnaW4tbGVmdDogMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZS1vdmVycmlkZSB0aGUgZmVlZGJhY2sgaWNvbi5cclxuICAgIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XHJcbiAgICAgIHRvcDogMDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyBIb3Jpem9udGFsIGZvcm1zXHJcbi8vXHJcbi8vIEhvcml6b250YWwgZm9ybXMgYXJlIGJ1aWx0IG9uIGdyaWQgY2xhc3NlcyBhbmQgYWxsb3cgeW91IHRvIGNyZWF0ZSBmb3JtcyB3aXRoXHJcbi8vIGxhYmVscyBvbiB0aGUgbGVmdCBhbmQgaW5wdXRzIG9uIHRoZSByaWdodC5cclxuXHJcbi5mb3JtLWhvcml6b250YWwge1xyXG5cclxuICAvLyBDb25zaXN0ZW50IHZlcnRpY2FsIGFsaWdubWVudCBvZiByYWRpb3MgYW5kIGNoZWNrYm94ZXNcclxuICAvL1xyXG4gIC8vIExhYmVscyBhbHNvIGdldCBzb21lIHJlc2V0IHN0eWxlcywgYnV0IHRoYXQgaXMgc2NvcGVkIHRvIGEgbWVkaWEgcXVlcnkgYmVsb3cuXHJcbiAgLnJhZGlvLFxyXG4gIC5jaGVja2JveCxcclxuICAucmFkaW8taW5saW5lLFxyXG4gIC5jaGVja2JveC1pbmxpbmUge1xyXG4gICAgbWFyZ2luLXRvcDogMDtcclxuICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgICBwYWRkaW5nLXRvcDogKEBwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKTsgLy8gRGVmYXVsdCBwYWRkaW5nIHBsdXMgYSBib3JkZXJcclxuICB9XHJcbiAgLy8gQWNjb3VudCBmb3IgcGFkZGluZyB3ZSdyZSBhZGRpbmcgdG8gZW5zdXJlIHRoZSBhbGlnbm1lbnQgYW5kIG9mIGhlbHAgdGV4dFxyXG4gIC8vIGFuZCBvdGhlciBjb250ZW50IGJlbG93IGl0ZW1zXHJcbiAgLnJhZGlvLFxyXG4gIC5jaGVja2JveCB7XHJcbiAgICBtaW4taGVpZ2h0OiAoQGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgKEBwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKSk7XHJcbiAgfVxyXG5cclxuICAvLyBNYWtlIGZvcm0gZ3JvdXBzIGJlaGF2ZSBsaWtlIHJvd3NcclxuICAuZm9ybS1ncm91cCB7XHJcbiAgICAubWFrZS1yb3coKTtcclxuICB9XHJcblxyXG4gIC8vIFJlc2V0IHNwYWNpbmcgYW5kIHJpZ2h0IGFsaWduIGxhYmVscywgYnV0IHNjb3BlIHRvIG1lZGlhIHF1ZXJpZXMgc28gdGhhdFxyXG4gIC8vIGxhYmVscyBvbiBuYXJyb3cgdmlld3BvcnRzIHN0YWNrIHRoZSBzYW1lIGFzIGEgZGVmYXVsdCBmb3JtIGV4YW1wbGUuXHJcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XHJcbiAgICAuY29udHJvbC1sYWJlbCB7XHJcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xyXG4gICAgICBwYWRkaW5nLXRvcDogKEBwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKTsgLy8gRGVmYXVsdCBwYWRkaW5nIHBsdXMgYSBib3JkZXJcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFZhbGlkYXRpb24gc3RhdGVzXHJcbiAgLy9cclxuICAvLyBSZXBvc2l0aW9uIHRoZSBpY29uIGJlY2F1c2UgaXQncyBub3cgd2l0aGluIGEgZ3JpZCBjb2x1bW4gYW5kIGNvbHVtbnMgaGF2ZVxyXG4gIC8vIGBwb3NpdGlvbjogcmVsYXRpdmU7YCBvbiB0aGVtLiBBbHNvIGFjY291bnRzIGZvciB0aGUgZ3JpZCBndXR0ZXIgcGFkZGluZy5cclxuICAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xyXG4gICAgcmlnaHQ6IGZsb29yKChAZ3JpZC1ndXR0ZXItd2lkdGggLyAyKSk7XHJcbiAgfVxyXG5cclxuICAvLyBGb3JtIGdyb3VwIHNpemVzXHJcbiAgLy9cclxuICAvLyBRdWljayB1dGlsaXR5IGNsYXNzIGZvciBhcHBseWluZyBgLmlucHV0LWxnYCBhbmQgYC5pbnB1dC1zbWAgc3R5bGVzIHRvIHRoZVxyXG4gIC8vIGlucHV0cyBhbmQgbGFiZWxzIHdpdGhpbiBhIGAuZm9ybS1ncm91cGAuXHJcbiAgLmZvcm0tZ3JvdXAtbGcge1xyXG4gICAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XHJcbiAgICAgIC5jb250cm9sLWxhYmVsIHtcclxuICAgICAgICBwYWRkaW5nLXRvcDogKChAcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCAqIEBsaW5lLWhlaWdodC1sYXJnZSkgKyAxKTtcclxuICAgICAgICBmb250LXNpemU6IEBmb250LXNpemUtbGFyZ2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLmZvcm0tZ3JvdXAtc20ge1xyXG4gICAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XHJcbiAgICAgIC5jb250cm9sLWxhYmVsIHtcclxuICAgICAgICBwYWRkaW5nLXRvcDogKEBwYWRkaW5nLXNtYWxsLXZlcnRpY2FsICsgMSk7XHJcbiAgICAgICAgZm9udC1zaXplOiBAZm9udC1zaXplLXNtYWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIi8vIEZvcm0gdmFsaWRhdGlvbiBzdGF0ZXNcclxuLy9cclxuLy8gVXNlZCBpbiBmb3Jtcy5sZXNzIHRvIGdlbmVyYXRlIHRoZSBmb3JtIHZhbGlkYXRpb24gQ1NTIGZvciB3YXJuaW5ncywgZXJyb3JzLFxyXG4vLyBhbmQgc3VjY2Vzc2VzLlxyXG5cclxuLmZvcm0tY29udHJvbC12YWxpZGF0aW9uKEB0ZXh0LWNvbG9yOiAjNTU1OyBAYm9yZGVyLWNvbG9yOiAjY2NjOyBAYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNSkge1xyXG4gIC8vIENvbG9yIHRoZSBsYWJlbCBhbmQgaGVscCB0ZXh0XHJcbiAgLmhlbHAtYmxvY2ssXHJcbiAgLmNvbnRyb2wtbGFiZWwsXHJcbiAgLnJhZGlvLFxyXG4gIC5jaGVja2JveCxcclxuICAucmFkaW8taW5saW5lLFxyXG4gIC5jaGVja2JveC1pbmxpbmUsXHJcbiAgJi5yYWRpbyBsYWJlbCxcclxuICAmLmNoZWNrYm94IGxhYmVsLFxyXG4gICYucmFkaW8taW5saW5lIGxhYmVsLFxyXG4gICYuY2hlY2tib3gtaW5saW5lIGxhYmVsICB7XHJcbiAgICBjb2xvcjogQHRleHQtY29sb3I7XHJcbiAgfVxyXG4gIC8vIFNldCB0aGUgYm9yZGVyIGFuZCBib3ggc2hhZG93IG9uIHNwZWNpZmljIGlucHV0cyB0byBtYXRjaFxyXG4gIC5mb3JtLWNvbnRyb2wge1xyXG4gICAgYm9yZGVyLWNvbG9yOiBAYm9yZGVyLWNvbG9yO1xyXG4gICAgLmJveC1zaGFkb3coaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSkpOyAvLyBSZWRlY2xhcmUgc28gdHJhbnNpdGlvbnMgd29ya1xyXG4gICAgJjpmb2N1cyB7XHJcbiAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKEBib3JkZXItY29sb3IsIDEwJSk7XHJcbiAgICAgIEBzaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpLCAwIDAgNnB4IGxpZ2h0ZW4oQGJvcmRlci1jb2xvciwgMjAlKTtcclxuICAgICAgLmJveC1zaGFkb3coQHNoYWRvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIFNldCB2YWxpZGF0aW9uIHN0YXRlcyBhbHNvIGZvciBhZGRvbnNcclxuICAuaW5wdXQtZ3JvdXAtYWRkb24ge1xyXG4gICAgY29sb3I6IEB0ZXh0LWNvbG9yO1xyXG4gICAgYm9yZGVyLWNvbG9yOiBAYm9yZGVyLWNvbG9yO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGJhY2tncm91bmQtY29sb3I7XHJcbiAgfVxyXG4gIC8vIE9wdGlvbmFsIGZlZWRiYWNrIGljb25cclxuICAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcclxuICAgIGNvbG9yOiBAdGV4dC1jb2xvcjtcclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyBGb3JtIGNvbnRyb2wgZm9jdXMgc3RhdGVcclxuLy9cclxuLy8gR2VuZXJhdGUgYSBjdXN0b21pemVkIGZvY3VzIHN0YXRlIGFuZCBmb3IgYW55IGlucHV0IHdpdGggdGhlIHNwZWNpZmllZCBjb2xvcixcclxuLy8gd2hpY2ggZGVmYXVsdHMgdG8gdGhlIGBAaW5wdXQtYm9yZGVyLWZvY3VzYCB2YXJpYWJsZS5cclxuLy9cclxuLy8gV2UgaGlnaGx5IGVuY291cmFnZSB5b3UgdG8gbm90IGN1c3RvbWl6ZSB0aGUgZGVmYXVsdCB2YWx1ZSwgYnV0IGluc3RlYWQgdXNlXHJcbi8vIHRoaXMgdG8gdHdlYWsgY29sb3JzIG9uIGFuIGFzLW5lZWRlZCBiYXNpcy4gVGhpcyBhZXN0aGV0aWMgY2hhbmdlIGlzIGJhc2VkIG9uXHJcbi8vIFdlYktpdCdzIGRlZmF1bHQgc3R5bGVzLCBidXQgYXBwbGljYWJsZSB0byBhIHdpZGVyIHJhbmdlIG9mIGJyb3dzZXJzLiBJdHNcclxuLy8gdXNhYmlsaXR5IGFuZCBhY2Nlc3NpYmlsaXR5IHNob3VsZCBiZSB0YWtlbiBpbnRvIGFjY291bnQgd2l0aCBhbnkgY2hhbmdlLlxyXG4vL1xyXG4vLyBFeGFtcGxlIHVzYWdlOiBjaGFuZ2UgdGhlIGRlZmF1bHQgYmx1ZSBib3JkZXIgYW5kIHNoYWRvdyB0byB3aGl0ZSBmb3IgYmV0dGVyXHJcbi8vIGNvbnRyYXN0IGFnYWluc3QgYSBkYXJrIGdyYXkgYmFja2dyb3VuZC5cclxuLmZvcm0tY29udHJvbC1mb2N1cyhAY29sb3I6IEBpbnB1dC1ib3JkZXItZm9jdXMpIHtcclxuICBAY29sb3ItcmdiYTogcmdiYShyZWQoQGNvbG9yKSwgZ3JlZW4oQGNvbG9yKSwgYmx1ZShAY29sb3IpLCAuNik7XHJcbiAgJjpmb2N1cyB7XHJcbiAgICBib3JkZXItY29sb3I6IEBjb2xvcjtcclxuICAgIG91dGxpbmU6IDA7XHJcbiAgICAuYm94LXNoYWRvdyh+XCJpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KSwgMCAwIDhweCBAe2NvbG9yLXJnYmF9XCIpO1xyXG4gIH1cclxufVxyXG5cclxuLy8gRm9ybSBjb250cm9sIHNpemluZ1xyXG4vL1xyXG4vLyBSZWxhdGl2ZSB0ZXh0IHNpemUsIHBhZGRpbmcsIGFuZCBib3JkZXItcmFkaWkgY2hhbmdlcyBmb3IgZm9ybSBjb250cm9scy4gRm9yXHJcbi8vIGhvcml6b250YWwgc2l6aW5nLCB3cmFwIGNvbnRyb2xzIGluIHRoZSBwcmVkZWZpbmVkIGdyaWQgY2xhc3Nlcy4gYDxzZWxlY3Q+YFxyXG4vLyBlbGVtZW50IGdldHMgc3BlY2lhbCBsb3ZlIGJlY2F1c2UgaXQncyBzcGVjaWFsLCBhbmQgdGhhdCdzIGEgZmFjdCFcclxuLmlucHV0LXNpemUoQGlucHV0LWhlaWdodDsgQHBhZGRpbmctdmVydGljYWw7IEBwYWRkaW5nLWhvcml6b250YWw7IEBmb250LXNpemU7IEBsaW5lLWhlaWdodDsgQGJvcmRlci1yYWRpdXMpIHtcclxuICBoZWlnaHQ6IEBpbnB1dC1oZWlnaHQ7XHJcbiAgcGFkZGluZzogQHBhZGRpbmctdmVydGljYWwgQHBhZGRpbmctaG9yaXpvbnRhbDtcclxuICBmb250LXNpemU6IEBmb250LXNpemU7XHJcbiAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodDtcclxuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cztcclxuXHJcbiAgc2VsZWN0JiB7XHJcbiAgICBoZWlnaHQ6IEBpbnB1dC1oZWlnaHQ7XHJcbiAgICBsaW5lLWhlaWdodDogQGlucHV0LWhlaWdodDtcclxuICB9XHJcblxyXG4gIHRleHRhcmVhJixcclxuICBzZWxlY3RbbXVsdGlwbGVdJiB7XHJcbiAgICBoZWlnaHQ6IGF1dG87XHJcbiAgfVxyXG59XHJcbiIsIi8vXHJcbi8vIEJ1dHRvbnNcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4vLyBCYXNlIHN0eWxlc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuLmJ0biB7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIG1hcmdpbi1ib3R0b206IDA7IC8vIEZvciBpbnB1dC5idG5cclxuICBmb250LXdlaWdodDogQGJ0bi1mb250LXdlaWdodDtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcclxuICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgLy8gUmVzZXQgdW51c3VhbCBGaXJlZm94LW9uLUFuZHJvaWQgZGVmYXVsdCBzdHlsZTsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MvaXNzdWVzLzIxNFxyXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xyXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgLmJ1dHRvbi1zaXplKEBwYWRkaW5nLWJhc2UtdmVydGljYWw7IEBwYWRkaW5nLWJhc2UtaG9yaXpvbnRhbDsgQGZvbnQtc2l6ZS1iYXNlOyBAbGluZS1oZWlnaHQtYmFzZTsgQGJ0bi1ib3JkZXItcmFkaXVzLWJhc2UpO1xyXG4gIC51c2VyLXNlbGVjdChub25lKTtcclxuXHJcbiAgJixcclxuICAmOmFjdGl2ZSxcclxuICAmLmFjdGl2ZSB7XHJcbiAgICAmOmZvY3VzLFxyXG4gICAgJi5mb2N1cyB7XHJcbiAgICAgIC50YWItZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICY6aG92ZXIsXHJcbiAgJjpmb2N1cyxcclxuICAmLmZvY3VzIHtcclxuICAgIGNvbG9yOiBAYnRuLWRlZmF1bHQtY29sb3I7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgfVxyXG5cclxuICAmOmFjdGl2ZSxcclxuICAmLmFjdGl2ZSB7XHJcbiAgICBvdXRsaW5lOiAwO1xyXG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcclxuICAgIC5ib3gtc2hhZG93KGluc2V0IDAgM3B4IDVweCByZ2JhKDAsMCwwLC4xMjUpKTtcclxuICB9XHJcblxyXG4gICYuZGlzYWJsZWQsXHJcbiAgJltkaXNhYmxlZF0sXHJcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xyXG4gICAgY3Vyc29yOiBAY3Vyc29yLWRpc2FibGVkO1xyXG4gICAgLm9wYWNpdHkoLjY1KTtcclxuICAgIC5ib3gtc2hhZG93KG5vbmUpO1xyXG4gIH1cclxuXHJcbiAgYSYge1xyXG4gICAgJi5kaXNhYmxlZCxcclxuICAgIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcclxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7IC8vIEZ1dHVyZS1wcm9vZiBkaXNhYmxpbmcgb2YgY2xpY2tzIG9uIGA8YT5gIGVsZW1lbnRzXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gQWx0ZXJuYXRlIGJ1dHRvbnNcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi5idG4tZGVmYXVsdCB7XHJcbiAgLmJ1dHRvbi12YXJpYW50KEBidG4tZGVmYXVsdC1jb2xvcjsgQGJ0bi1kZWZhdWx0LWJnOyBAYnRuLWRlZmF1bHQtYm9yZGVyKTtcclxufVxyXG4uYnRuLXByaW1hcnkge1xyXG4gIC5idXR0b24tdmFyaWFudChAYnRuLXByaW1hcnktY29sb3I7IEBidG4tcHJpbWFyeS1iZzsgQGJ0bi1wcmltYXJ5LWJvcmRlcik7XHJcbn1cclxuLy8gU3VjY2VzcyBhcHBlYXJzIGFzIGdyZWVuXHJcbi5idG4tc3VjY2VzcyB7XHJcbiAgLmJ1dHRvbi12YXJpYW50KEBidG4tc3VjY2Vzcy1jb2xvcjsgQGJ0bi1zdWNjZXNzLWJnOyBAYnRuLXN1Y2Nlc3MtYm9yZGVyKTtcclxufVxyXG4vLyBJbmZvIGFwcGVhcnMgYXMgYmx1ZS1ncmVlblxyXG4uYnRuLWluZm8ge1xyXG4gIC5idXR0b24tdmFyaWFudChAYnRuLWluZm8tY29sb3I7IEBidG4taW5mby1iZzsgQGJ0bi1pbmZvLWJvcmRlcik7XHJcbn1cclxuLy8gV2FybmluZyBhcHBlYXJzIGFzIG9yYW5nZVxyXG4uYnRuLXdhcm5pbmcge1xyXG4gIC5idXR0b24tdmFyaWFudChAYnRuLXdhcm5pbmctY29sb3I7IEBidG4td2FybmluZy1iZzsgQGJ0bi13YXJuaW5nLWJvcmRlcik7XHJcbn1cclxuLy8gRGFuZ2VyIGFuZCBlcnJvciBhcHBlYXIgYXMgcmVkXHJcbi5idG4tZGFuZ2VyIHtcclxuICAuYnV0dG9uLXZhcmlhbnQoQGJ0bi1kYW5nZXItY29sb3I7IEBidG4tZGFuZ2VyLWJnOyBAYnRuLWRhbmdlci1ib3JkZXIpO1xyXG59XHJcblxyXG5cclxuLy8gTGluayBidXR0b25zXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi8vIE1ha2UgYSBidXR0b24gbG9vayBhbmQgYmVoYXZlIGxpa2UgYSBsaW5rXHJcbi5idG4tbGluayB7XHJcbiAgY29sb3I6IEBsaW5rLWNvbG9yO1xyXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcbiAgYm9yZGVyLXJhZGl1czogMDtcclxuXHJcbiAgJixcclxuICAmOmFjdGl2ZSxcclxuICAmLmFjdGl2ZSxcclxuICAmW2Rpc2FibGVkXSxcclxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgIC5ib3gtc2hhZG93KG5vbmUpO1xyXG4gIH1cclxuICAmLFxyXG4gICY6aG92ZXIsXHJcbiAgJjpmb2N1cyxcclxuICAmOmFjdGl2ZSB7XHJcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gIH1cclxuICAmOmhvdmVyLFxyXG4gICY6Zm9jdXMge1xyXG4gICAgY29sb3I6IEBsaW5rLWhvdmVyLWNvbG9yO1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBAbGluay1ob3Zlci1kZWNvcmF0aW9uO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgfVxyXG4gICZbZGlzYWJsZWRdLFxyXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcclxuICAgICY6aG92ZXIsXHJcbiAgICAmOmZvY3VzIHtcclxuICAgICAgY29sb3I6IEBidG4tbGluay1kaXNhYmxlZC1jb2xvcjtcclxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIEJ1dHRvbiBTaXplc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuLmJ0bi1sZyB7XHJcbiAgLy8gbGluZS1oZWlnaHQ6IGVuc3VyZSBldmVuLW51bWJlcmVkIGhlaWdodCBvZiBidXR0b24gbmV4dCB0byBsYXJnZSBpbnB1dFxyXG4gIC5idXR0b24tc2l6ZShAcGFkZGluZy1sYXJnZS12ZXJ0aWNhbDsgQHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbDsgQGZvbnQtc2l6ZS1sYXJnZTsgQGxpbmUtaGVpZ2h0LWxhcmdlOyBAYnRuLWJvcmRlci1yYWRpdXMtbGFyZ2UpO1xyXG59XHJcbi5idG4tc20ge1xyXG4gIC8vIGxpbmUtaGVpZ2h0OiBlbnN1cmUgcHJvcGVyIGhlaWdodCBvZiBidXR0b24gbmV4dCB0byBzbWFsbCBpbnB1dFxyXG4gIC5idXR0b24tc2l6ZShAcGFkZGluZy1zbWFsbC12ZXJ0aWNhbDsgQHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbDsgQGZvbnQtc2l6ZS1zbWFsbDsgQGxpbmUtaGVpZ2h0LXNtYWxsOyBAYnRuLWJvcmRlci1yYWRpdXMtc21hbGwpO1xyXG59XHJcbi5idG4teHMge1xyXG4gIC5idXR0b24tc2l6ZShAcGFkZGluZy14cy12ZXJ0aWNhbDsgQHBhZGRpbmcteHMtaG9yaXpvbnRhbDsgQGZvbnQtc2l6ZS1zbWFsbDsgQGxpbmUtaGVpZ2h0LXNtYWxsOyBAYnRuLWJvcmRlci1yYWRpdXMtc21hbGwpO1xyXG59XHJcblxyXG5cclxuLy8gQmxvY2sgYnV0dG9uXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4uYnRuLWJsb2NrIHtcclxuICBkaXNwbGF5OiBibG9jaztcclxuICB3aWR0aDogMTAwJTtcclxufVxyXG5cclxuLy8gVmVydGljYWxseSBzcGFjZSBvdXQgbXVsdGlwbGUgYmxvY2sgYnV0dG9uc1xyXG4uYnRuLWJsb2NrICsgLmJ0bi1ibG9jayB7XHJcbiAgbWFyZ2luLXRvcDogNXB4O1xyXG59XHJcblxyXG4vLyBTcGVjaWZpY2l0eSBvdmVycmlkZXNcclxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSxcclxuaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxyXG5pbnB1dFt0eXBlPVwiYnV0dG9uXCJdIHtcclxuICAmLmJ0bi1ibG9jayB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICB9XHJcbn1cclxuIiwiLy8gQnV0dG9uIHZhcmlhbnRzXHJcbi8vXHJcbi8vIEVhc2lseSBwdW1wIG91dCBkZWZhdWx0IHN0eWxlcywgYXMgd2VsbCBhcyA6aG92ZXIsIDpmb2N1cywgOmFjdGl2ZSxcclxuLy8gYW5kIGRpc2FibGVkIG9wdGlvbnMgZm9yIGFsbCBidXR0b25zXHJcblxyXG4uYnV0dG9uLXZhcmlhbnQoQGNvbG9yOyBAYmFja2dyb3VuZDsgQGJvcmRlcikge1xyXG4gIGNvbG9yOiBAY29sb3I7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogQGJhY2tncm91bmQ7XHJcbiAgYm9yZGVyLWNvbG9yOiBAYm9yZGVyO1xyXG5cclxuICAmOmZvY3VzLFxyXG4gICYuZm9jdXMge1xyXG4gICAgY29sb3I6IEBjb2xvcjtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbihAYmFja2dyb3VuZCwgMTAlKTtcclxuICAgICAgICBib3JkZXItY29sb3I6IGRhcmtlbihAYm9yZGVyLCAyNSUpO1xyXG4gIH1cclxuICAmOmhvdmVyIHtcclxuICAgIGNvbG9yOiBAY29sb3I7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oQGJhY2tncm91bmQsIDEwJSk7XHJcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oQGJvcmRlciwgMTIlKTtcclxuICB9XHJcbiAgJjphY3RpdmUsXHJcbiAgJi5hY3RpdmUsXHJcbiAgLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlJiB7XHJcbiAgICBjb2xvcjogQGNvbG9yO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKEBiYWNrZ3JvdW5kLCAxMCUpO1xyXG4gICAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKEBib3JkZXIsIDEyJSk7XHJcblxyXG4gICAgJjpob3ZlcixcclxuICAgICY6Zm9jdXMsXHJcbiAgICAmLmZvY3VzIHtcclxuICAgICAgY29sb3I6IEBjb2xvcjtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKEBiYWNrZ3JvdW5kLCAxNyUpO1xyXG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oQGJvcmRlciwgMjUlKTtcclxuICAgIH1cclxuICB9XHJcbiAgJjphY3RpdmUsXHJcbiAgJi5hY3RpdmUsXHJcbiAgLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlJiB7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xyXG4gIH1cclxuICAmLmRpc2FibGVkLFxyXG4gICZbZGlzYWJsZWRdLFxyXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcclxuICAgICYsXHJcbiAgICAmOmhvdmVyLFxyXG4gICAgJjpmb2N1cyxcclxuICAgICYuZm9jdXMsXHJcbiAgICAmOmFjdGl2ZSxcclxuICAgICYuYWN0aXZlIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGJhY2tncm91bmQ7XHJcbiAgICAgICAgICBib3JkZXItY29sb3I6IEBib3JkZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuYmFkZ2Uge1xyXG4gICAgY29sb3I6IEBiYWNrZ3JvdW5kO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGNvbG9yO1xyXG4gIH1cclxufVxyXG5cclxuLy8gQnV0dG9uIHNpemVzXHJcbi5idXR0b24tc2l6ZShAcGFkZGluZy12ZXJ0aWNhbDsgQHBhZGRpbmctaG9yaXpvbnRhbDsgQGZvbnQtc2l6ZTsgQGxpbmUtaGVpZ2h0OyBAYm9yZGVyLXJhZGl1cykge1xyXG4gIHBhZGRpbmc6IEBwYWRkaW5nLXZlcnRpY2FsIEBwYWRkaW5nLWhvcml6b250YWw7XHJcbiAgZm9udC1zaXplOiBAZm9udC1zaXplO1xyXG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQ7XHJcbiAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXM7XHJcbn1cclxuIiwiLy8gT3BhY2l0eVxyXG5cclxuLm9wYWNpdHkoQG9wYWNpdHkpIHtcclxuICBvcGFjaXR5OiBAb3BhY2l0eTtcclxuICAvLyBJRTggZmlsdGVyXHJcbiAgQG9wYWNpdHktaWU6IChAb3BhY2l0eSAqIDEwMCk7XHJcbiAgZmlsdGVyOiB+XCJhbHBoYShvcGFjaXR5PUB7b3BhY2l0eS1pZX0pXCI7XHJcbn1cclxuIiwiLy9cclxuLy8gQ29tcG9uZW50IGFuaW1hdGlvbnNcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi8vIEhlYWRzIHVwIVxyXG4vL1xyXG4vLyBXZSBkb24ndCB1c2UgdGhlIGAub3BhY2l0eSgpYCBtaXhpbiBoZXJlIHNpbmNlIGl0IGNhdXNlcyBhIGJ1ZyB3aXRoIHRleHRcclxuLy8gZmllbGRzIGluIElFNy04LiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9wdWxsLzM1NTIuXHJcblxyXG4uZmFkZSB7XHJcbiAgb3BhY2l0eTogMDtcclxuICAudHJhbnNpdGlvbihvcGFjaXR5IC4xNXMgbGluZWFyKTtcclxuICAmLmluIHtcclxuICAgIG9wYWNpdHk6IDE7XHJcbiAgfVxyXG59XHJcblxyXG4uY29sbGFwc2Uge1xyXG4gIGRpc3BsYXk6IG5vbmU7XHJcblxyXG4gICYuaW4gICAgICB7IGRpc3BsYXk6IGJsb2NrOyB9XHJcbiAgdHImLmluICAgIHsgZGlzcGxheTogdGFibGUtcm93OyB9XHJcbiAgdGJvZHkmLmluIHsgZGlzcGxheTogdGFibGUtcm93LWdyb3VwOyB9XHJcbn1cclxuXHJcbi5jb2xsYXBzaW5nIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgaGVpZ2h0OiAwO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgLnRyYW5zaXRpb24tcHJvcGVydHkoflwiaGVpZ2h0LCB2aXNpYmlsaXR5XCIpO1xyXG4gIC50cmFuc2l0aW9uLWR1cmF0aW9uKC4zNXMpO1xyXG4gIC50cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbihlYXNlKTtcclxufVxyXG4iLCIvL1xyXG4vLyBEcm9wZG93biBtZW51c1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbi8vIERyb3Bkb3duIGFycm93L2NhcmV0XHJcbi5jYXJldCB7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIHdpZHRoOiAwO1xyXG4gIGhlaWdodDogMDtcclxuICBtYXJnaW4tbGVmdDogMnB4O1xyXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgYm9yZGVyLXRvcDogICBAY2FyZXQtd2lkdGgtYmFzZSBkYXNoZWQ7XHJcbiAgYm9yZGVyLXRvcDogICBAY2FyZXQtd2lkdGgtYmFzZSBzb2xpZCB+XCJcXDlcIjsgLy8gSUU4XHJcbiAgYm9yZGVyLXJpZ2h0OiBAY2FyZXQtd2lkdGgtYmFzZSBzb2xpZCB0cmFuc3BhcmVudDtcclxuICBib3JkZXItbGVmdDogIEBjYXJldC13aWR0aC1iYXNlIHNvbGlkIHRyYW5zcGFyZW50O1xyXG59XHJcblxyXG4vLyBUaGUgZHJvcGRvd24gd3JhcHBlciAoZGl2KVxyXG4uZHJvcHVwLFxyXG4uZHJvcGRvd24ge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG5cclxuLy8gUHJldmVudCB0aGUgZm9jdXMgb24gdGhlIGRyb3Bkb3duIHRvZ2dsZSB3aGVuIGNsb3NpbmcgZHJvcGRvd25zXHJcbi5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xyXG4gIG91dGxpbmU6IDA7XHJcbn1cclxuXHJcbi8vIFRoZSBkcm9wZG93biBtZW51ICh1bClcclxuLmRyb3Bkb3duLW1lbnUge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICB0b3A6IDEwMCU7XHJcbiAgbGVmdDogMDtcclxuICB6LWluZGV4OiBAemluZGV4LWRyb3Bkb3duO1xyXG4gIGRpc3BsYXk6IG5vbmU7IC8vIG5vbmUgYnkgZGVmYXVsdCwgYnV0IGJsb2NrIG9uIFwib3BlblwiIG9mIHRoZSBtZW51XHJcbiAgZmxvYXQ6IGxlZnQ7XHJcbiAgbWluLXdpZHRoOiAxNjBweDtcclxuICBwYWRkaW5nOiA1cHggMDtcclxuICBtYXJnaW46IDJweCAwIDA7IC8vIG92ZXJyaWRlIGRlZmF1bHQgdWxcclxuICBsaXN0LXN0eWxlOiBub25lO1xyXG4gIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1iYXNlO1xyXG4gIHRleHQtYWxpZ246IGxlZnQ7IC8vIEVuc3VyZXMgcHJvcGVyIGFsaWdubWVudCBpZiBwYXJlbnQgaGFzIGl0IGNoYW5nZWQgKGUuZy4sIG1vZGFsIGZvb3RlcilcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAZHJvcGRvd24tYmc7XHJcbiAgYm9yZGVyOiAxcHggc29saWQgQGRyb3Bkb3duLWZhbGxiYWNrLWJvcmRlcjsgLy8gSUU4IGZhbGxiYWNrXHJcbiAgYm9yZGVyOiAxcHggc29saWQgQGRyb3Bkb3duLWJvcmRlcjtcclxuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1iYXNlO1xyXG4gIC5ib3gtc2hhZG93KDAgNnB4IDEycHggcmdiYSgwLDAsMCwuMTc1KSk7XHJcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcclxuXHJcbiAgLy8gQWxpZ25zIHRoZSBkcm9wZG93biBtZW51IHRvIHJpZ2h0XHJcbiAgLy9cclxuICAvLyBEZXByZWNhdGVkIGFzIG9mIDMuMS4wIGluIGZhdm9yIG9mIGAuZHJvcGRvd24tbWVudS1bZGlyXWBcclxuICAmLnB1bGwtcmlnaHQge1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBsZWZ0OiBhdXRvO1xyXG4gIH1cclxuXHJcbiAgLy8gRGl2aWRlcnMgKGJhc2ljYWxseSBhbiBocikgd2l0aGluIHRoZSBkcm9wZG93blxyXG4gIC5kaXZpZGVyIHtcclxuICAgIC5uYXYtZGl2aWRlcihAZHJvcGRvd24tZGl2aWRlci1iZyk7XHJcbiAgfVxyXG5cclxuICAvLyBMaW5rcyB3aXRoaW4gdGhlIGRyb3Bkb3duIG1lbnVcclxuICA+IGxpID4gYSB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIHBhZGRpbmc6IDNweCAyMHB4O1xyXG4gICAgY2xlYXI6IGJvdGg7XHJcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xyXG4gICAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xyXG4gICAgY29sb3I6IEBkcm9wZG93bi1saW5rLWNvbG9yO1xyXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgLy8gcHJldmVudCBsaW5rcyBmcm9tIHJhbmRvbWx5IGJyZWFraW5nIG9udG8gbmV3IGxpbmVzXHJcbiAgfVxyXG59XHJcblxyXG4vLyBIb3Zlci9Gb2N1cyBzdGF0ZVxyXG4uZHJvcGRvd24tbWVudSA+IGxpID4gYSB7XHJcbiAgJjpob3ZlcixcclxuICAmOmZvY3VzIHtcclxuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgIGNvbG9yOiBAZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IEBkcm9wZG93bi1saW5rLWhvdmVyLWJnO1xyXG4gIH1cclxufVxyXG5cclxuLy8gQWN0aXZlIHN0YXRlXHJcbi5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEge1xyXG4gICYsXHJcbiAgJjpob3ZlcixcclxuICAmOmZvY3VzIHtcclxuICAgIGNvbG9yOiBAZHJvcGRvd24tbGluay1hY3RpdmUtY29sb3I7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICBvdXRsaW5lOiAwO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGRyb3Bkb3duLWxpbmstYWN0aXZlLWJnO1xyXG4gIH1cclxufVxyXG5cclxuLy8gRGlzYWJsZWQgc3RhdGVcclxuLy9cclxuLy8gR3JheSBvdXQgdGV4dCBhbmQgZW5zdXJlIHRoZSBob3Zlci9mb2N1cyBzdGF0ZSByZW1haW5zIGdyYXlcclxuXHJcbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYSB7XHJcbiAgJixcclxuICAmOmhvdmVyLFxyXG4gICY6Zm9jdXMge1xyXG4gICAgY29sb3I6IEBkcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yO1xyXG4gIH1cclxuXHJcbiAgLy8gTnVrZSBob3Zlci9mb2N1cyBlZmZlY3RzXHJcbiAgJjpob3ZlcixcclxuICAmOmZvY3VzIHtcclxuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgLy8gUmVtb3ZlIENTUyBncmFkaWVudFxyXG4gICAgLnJlc2V0LWZpbHRlcigpO1xyXG4gICAgY3Vyc29yOiBAY3Vyc29yLWRpc2FibGVkO1xyXG4gIH1cclxufVxyXG5cclxuLy8gT3BlbiBzdGF0ZSBmb3IgdGhlIGRyb3Bkb3duXHJcbi5vcGVuIHtcclxuICAvLyBTaG93IHRoZSBtZW51XHJcbiAgPiAuZHJvcGRvd24tbWVudSB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICB9XHJcblxyXG4gIC8vIFJlbW92ZSB0aGUgb3V0bGluZSB3aGVuIDpmb2N1cyBpcyB0cmlnZ2VyZWRcclxuICA+IGEge1xyXG4gICAgb3V0bGluZTogMDtcclxuICB9XHJcbn1cclxuXHJcbi8vIE1lbnUgcG9zaXRpb25pbmdcclxuLy9cclxuLy8gQWRkIGV4dHJhIGNsYXNzIHRvIGAuZHJvcGRvd24tbWVudWAgdG8gZmxpcCB0aGUgYWxpZ25tZW50IG9mIHRoZSBkcm9wZG93blxyXG4vLyBtZW51IHdpdGggdGhlIHBhcmVudC5cclxuLmRyb3Bkb3duLW1lbnUtcmlnaHQge1xyXG4gIGxlZnQ6IGF1dG87IC8vIFJlc2V0IHRoZSBkZWZhdWx0IGZyb20gYC5kcm9wZG93bi1tZW51YFxyXG4gIHJpZ2h0OiAwO1xyXG59XHJcbi8vIFdpdGggdjMsIHdlIGVuYWJsZWQgYXV0by1mbGlwcGluZyBpZiB5b3UgaGF2ZSBhIGRyb3Bkb3duIHdpdGhpbiBhIHJpZ2h0XHJcbi8vIGFsaWduZWQgbmF2IGNvbXBvbmVudC4gVG8gZW5hYmxlIHRoZSB1bmRvaW5nIG9mIHRoYXQsIHdlIHByb3ZpZGUgYW4gb3ZlcnJpZGVcclxuLy8gdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBkcm9wZG93biBtZW51IGFsaWdubWVudC5cclxuLy9cclxuLy8gVGhpcyBpcyBvbmx5IGZvciBsZWZ0LWFsaWduaW5nIGEgZHJvcGRvd24gbWVudSB3aXRoaW4gYSBgLm5hdmJhci1yaWdodGAgb3JcclxuLy8gYC5wdWxsLXJpZ2h0YCBuYXYgY29tcG9uZW50LlxyXG4uZHJvcGRvd24tbWVudS1sZWZ0IHtcclxuICBsZWZ0OiAwO1xyXG4gIHJpZ2h0OiBhdXRvO1xyXG59XHJcblxyXG4vLyBEcm9wZG93biBzZWN0aW9uIGhlYWRlcnNcclxuLmRyb3Bkb3duLWhlYWRlciB7XHJcbiAgZGlzcGxheTogYmxvY2s7XHJcbiAgcGFkZGluZzogM3B4IDIwcHg7XHJcbiAgZm9udC1zaXplOiBAZm9udC1zaXplLXNtYWxsO1xyXG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcclxuICBjb2xvcjogQGRyb3Bkb3duLWhlYWRlci1jb2xvcjtcclxuICB3aGl0ZS1zcGFjZTogbm93cmFwOyAvLyBhcyB3aXRoID4gbGkgPiBhXHJcbn1cclxuXHJcbi8vIEJhY2tkcm9wIHRvIGNhdGNoIGJvZHkgY2xpY2tzIG9uIG1vYmlsZSwgZXRjLlxyXG4uZHJvcGRvd24tYmFja2Ryb3Age1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICBsZWZ0OiAwO1xyXG4gIHJpZ2h0OiAwO1xyXG4gIGJvdHRvbTogMDtcclxuICB0b3A6IDA7XHJcbiAgei1pbmRleDogKEB6aW5kZXgtZHJvcGRvd24gLSAxMCk7XHJcbn1cclxuXHJcbi8vIFJpZ2h0IGFsaWduZWQgZHJvcGRvd25zXHJcbi5wdWxsLXJpZ2h0ID4gLmRyb3Bkb3duLW1lbnUge1xyXG4gIHJpZ2h0OiAwO1xyXG4gIGxlZnQ6IGF1dG87XHJcbn1cclxuXHJcbi8vIEFsbG93IGZvciBkcm9wZG93bnMgdG8gZ28gYm90dG9tIHVwIChha2EsIGRyb3B1cC1tZW51KVxyXG4vL1xyXG4vLyBKdXN0IGFkZCAuZHJvcHVwIGFmdGVyIHRoZSBzdGFuZGFyZCAuZHJvcGRvd24gY2xhc3MgYW5kIHlvdSdyZSBzZXQsIGJyby5cclxuLy8gVE9ETzogYWJzdHJhY3QgdGhpcyBzbyB0aGF0IHRoZSBuYXZiYXIgZml4ZWQgc3R5bGVzIGFyZSBub3QgcGxhY2VkIGhlcmU/XHJcblxyXG4uZHJvcHVwLFxyXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24ge1xyXG4gIC8vIFJldmVyc2UgdGhlIGNhcmV0XHJcbiAgLmNhcmV0IHtcclxuICAgIGJvcmRlci10b3A6IDA7XHJcbiAgICBib3JkZXItYm90dG9tOiBAY2FyZXQtd2lkdGgtYmFzZSBkYXNoZWQ7XHJcbiAgICBib3JkZXItYm90dG9tOiBAY2FyZXQtd2lkdGgtYmFzZSBzb2xpZCB+XCJcXDlcIjsgLy8gSUU4XHJcbiAgICBjb250ZW50OiBcIlwiO1xyXG4gIH1cclxuICAvLyBEaWZmZXJlbnQgcG9zaXRpb25pbmcgZm9yIGJvdHRvbSB1cCBtZW51XHJcbiAgLmRyb3Bkb3duLW1lbnUge1xyXG4gICAgdG9wOiBhdXRvO1xyXG4gICAgYm90dG9tOiAxMDAlO1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMnB4O1xyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIENvbXBvbmVudCBhbGlnbm1lbnRcclxuLy9cclxuLy8gUmVpdGVyYXRlIHBlciBuYXZiYXIubGVzcyBhbmQgdGhlIG1vZGlmaWVkIGNvbXBvbmVudCBhbGlnbm1lbnQgdGhlcmUuXHJcblxyXG5AbWVkaWEgKG1pbi13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xyXG4gIC5uYXZiYXItcmlnaHQge1xyXG4gICAgLmRyb3Bkb3duLW1lbnUge1xyXG4gICAgICAuZHJvcGRvd24tbWVudS1yaWdodCgpO1xyXG4gICAgfVxyXG4gICAgLy8gTmVjZXNzYXJ5IGZvciBvdmVycmlkZXMgb2YgdGhlIGRlZmF1bHQgcmlnaHQgYWxpZ25lZCBtZW51LlxyXG4gICAgLy8gV2lsbCByZW1vdmUgY29tZSB2NCBpbiBhbGwgbGlrZWxpaG9vZC5cclxuICAgIC5kcm9wZG93bi1tZW51LWxlZnQge1xyXG4gICAgICAuZHJvcGRvd24tbWVudS1sZWZ0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIi8vIEhvcml6b250YWwgZGl2aWRlcnNcclxuLy9cclxuLy8gRGl2aWRlcnMgKGJhc2ljYWxseSBhbiBocikgd2l0aGluIGRyb3Bkb3ducyBhbmQgbmF2IGxpc3RzXHJcblxyXG4ubmF2LWRpdmlkZXIoQGNvbG9yOiAjZTVlNWU1KSB7XHJcbiAgaGVpZ2h0OiAxcHg7XHJcbiAgbWFyZ2luOiAoKEBsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpIC0gMSkgMDtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIGJhY2tncm91bmQtY29sb3I6IEBjb2xvcjtcclxufVxyXG4iLCIvLyBSZXNldCBmaWx0ZXJzIGZvciBJRVxyXG4vL1xyXG4vLyBXaGVuIHlvdSBuZWVkIHRvIHJlbW92ZSBhIGdyYWRpZW50IGJhY2tncm91bmQsIGRvIG5vdCBmb3JnZXQgdG8gdXNlIHRoaXMgdG8gcmVzZXRcclxuLy8gdGhlIElFIGZpbHRlciBmb3IgSUU5IGFuZCBiZWxvdy5cclxuXHJcbi5yZXNldC1maWx0ZXIoKSB7XHJcbiAgZmlsdGVyOiBlKCUoXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZCA9IGZhbHNlKVwiKSk7XHJcbn1cclxuIiwiLy9cclxuLy8gQnV0dG9uIGdyb3Vwc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuLy8gTWFrZSB0aGUgZGl2IGJlaGF2ZSBsaWtlIGEgYnV0dG9uXHJcbi5idG4tZ3JvdXAsXHJcbi5idG4tZ3JvdXAtdmVydGljYWwge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgLy8gbWF0Y2ggLmJ0biBhbGlnbm1lbnQgZ2l2ZW4gZm9udC1zaXplIGhhY2sgYWJvdmVcclxuICA+IC5idG4ge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICAvLyBCcmluZyB0aGUgXCJhY3RpdmVcIiBidXR0b24gdG8gdGhlIGZyb250XHJcbiAgICAmOmhvdmVyLFxyXG4gICAgJjpmb2N1cyxcclxuICAgICY6YWN0aXZlLFxyXG4gICAgJi5hY3RpdmUge1xyXG4gICAgICB6LWluZGV4OiAyO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLy8gUHJldmVudCBkb3VibGUgYm9yZGVycyB3aGVuIGJ1dHRvbnMgYXJlIG5leHQgdG8gZWFjaCBvdGhlclxyXG4uYnRuLWdyb3VwIHtcclxuICAuYnRuICsgLmJ0bixcclxuICAuYnRuICsgLmJ0bi1ncm91cCxcclxuICAuYnRuLWdyb3VwICsgLmJ0bixcclxuICAuYnRuLWdyb3VwICsgLmJ0bi1ncm91cCB7XHJcbiAgICBtYXJnaW4tbGVmdDogLTFweDtcclxuICB9XHJcbn1cclxuXHJcbi8vIE9wdGlvbmFsOiBHcm91cCBtdWx0aXBsZSBidXR0b24gZ3JvdXBzIHRvZ2V0aGVyIGZvciBhIHRvb2xiYXJcclxuLmJ0bi10b29sYmFyIHtcclxuICBtYXJnaW4tbGVmdDogLTVweDsgLy8gT2Zmc2V0IHRoZSBmaXJzdCBjaGlsZCdzIG1hcmdpblxyXG4gICY6ZXh0ZW5kKC5jbGVhcmZpeCBhbGwpO1xyXG5cclxuICAuYnRuLFxyXG4gIC5idG4tZ3JvdXAsXHJcbiAgLmlucHV0LWdyb3VwIHtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gIH1cclxuICA+IC5idG4sXHJcbiAgPiAuYnRuLWdyb3VwLFxyXG4gID4gLmlucHV0LWdyb3VwIHtcclxuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XHJcbiAgfVxyXG59XHJcblxyXG4uYnRuLWdyb3VwID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7XHJcbiAgYm9yZGVyLXJhZGl1czogMDtcclxufVxyXG5cclxuLy8gU2V0IGNvcm5lcnMgaW5kaXZpZHVhbCBiZWNhdXNlIHNvbWV0aW1lcyBhIHNpbmdsZSBidXR0b24gY2FuIGJlIGluIGEgLmJ0bi1ncm91cCBhbmQgd2UgbmVlZCA6Zmlyc3QtY2hpbGQgYW5kIDpsYXN0LWNoaWxkIHRvIGJvdGggbWF0Y2hcclxuLmJ0bi1ncm91cCA+IC5idG46Zmlyc3QtY2hpbGQge1xyXG4gIG1hcmdpbi1sZWZ0OiAwO1xyXG4gICY6bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSkge1xyXG4gICAgLmJvcmRlci1yaWdodC1yYWRpdXMoMCk7XHJcbiAgfVxyXG59XHJcbi8vIE5lZWQgLmRyb3Bkb3duLXRvZ2dsZSBzaW5jZSA6bGFzdC1jaGlsZCBkb2Vzbid0IGFwcGx5IGdpdmVuIGEgLmRyb3Bkb3duLW1lbnUgaW1tZWRpYXRlbHkgYWZ0ZXIgaXRcclxuLmJ0bi1ncm91cCA+IC5idG46bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSxcclxuLmJ0bi1ncm91cCA+IC5kcm9wZG93bi10b2dnbGU6bm90KDpmaXJzdC1jaGlsZCkge1xyXG4gIC5ib3JkZXItbGVmdC1yYWRpdXMoMCk7XHJcbn1cclxuXHJcbi8vIEN1c3RvbSBlZGl0cyBmb3IgaW5jbHVkaW5nIGJ0bi1ncm91cHMgd2l0aGluIGJ0bi1ncm91cHMgKHVzZWZ1bCBmb3IgaW5jbHVkaW5nIGRyb3Bkb3duIGJ1dHRvbnMgd2l0aGluIGEgYnRuLWdyb3VwKVxyXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cCB7XHJcbiAgZmxvYXQ6IGxlZnQ7XHJcbn1cclxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSA+IC5idG4ge1xyXG4gIGJvcmRlci1yYWRpdXM6IDA7XHJcbn1cclxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7XHJcbiAgPiAuYnRuOmxhc3QtY2hpbGQsXHJcbiAgPiAuZHJvcGRvd24tdG9nZ2xlIHtcclxuICAgIC5ib3JkZXItcmlnaHQtcmFkaXVzKDApO1xyXG4gIH1cclxufVxyXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0bjpmaXJzdC1jaGlsZCB7XHJcbiAgLmJvcmRlci1sZWZ0LXJhZGl1cygwKTtcclxufVxyXG5cclxuLy8gT24gYWN0aXZlIGFuZCBvcGVuLCBkb24ndCBzaG93IG91dGxpbmVcclxuLmJ0bi1ncm91cCAuZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZSxcclxuLmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGUge1xyXG4gIG91dGxpbmU6IDA7XHJcbn1cclxuXHJcblxyXG4vLyBTaXppbmdcclxuLy9cclxuLy8gUmVtaXggdGhlIGRlZmF1bHQgYnV0dG9uIHNpemluZyBjbGFzc2VzIGludG8gbmV3IG9uZXMgZm9yIGVhc2llciBtYW5pcHVsYXRpb24uXHJcblxyXG4uYnRuLWdyb3VwLXhzID4gLmJ0biB7ICY6ZXh0ZW5kKC5idG4teHMpOyB9XHJcbi5idG4tZ3JvdXAtc20gPiAuYnRuIHsgJjpleHRlbmQoLmJ0bi1zbSk7IH1cclxuLmJ0bi1ncm91cC1sZyA+IC5idG4geyAmOmV4dGVuZCguYnRuLWxnKTsgfVxyXG5cclxuXHJcbi8vIFNwbGl0IGJ1dHRvbiBkcm9wZG93bnNcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuLy8gR2l2ZSB0aGUgbGluZSBiZXR3ZWVuIGJ1dHRvbnMgc29tZSBkZXB0aFxyXG4uYnRuLWdyb3VwID4gLmJ0biArIC5kcm9wZG93bi10b2dnbGUge1xyXG4gIHBhZGRpbmctbGVmdDogOHB4O1xyXG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcclxufVxyXG4uYnRuLWdyb3VwID4gLmJ0bi1sZyArIC5kcm9wZG93bi10b2dnbGUge1xyXG4gIHBhZGRpbmctbGVmdDogMTJweDtcclxuICBwYWRkaW5nLXJpZ2h0OiAxMnB4O1xyXG59XHJcblxyXG4vLyBUaGUgY2xpY2thYmxlIGJ1dHRvbiBmb3IgdG9nZ2xpbmcgdGhlIG1lbnVcclxuLy8gUmVtb3ZlIHRoZSBncmFkaWVudCBhbmQgc2V0IHRoZSBzYW1lIGluc2V0IHNoYWRvdyBhcyB0aGUgOmFjdGl2ZSBzdGF0ZVxyXG4uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7XHJcbiAgLmJveC1zaGFkb3coaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwwLDAsLjEyNSkpO1xyXG5cclxuICAvLyBTaG93IG5vIHNoYWRvdyBmb3IgYC5idG4tbGlua2Agc2luY2UgaXQgaGFzIG5vIG90aGVyIGJ1dHRvbiBzdHlsZXMuXHJcbiAgJi5idG4tbGluayB7XHJcbiAgICAuYm94LXNoYWRvdyhub25lKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyBSZXBvc2l0aW9uIHRoZSBjYXJldFxyXG4uYnRuIC5jYXJldCB7XHJcbiAgbWFyZ2luLWxlZnQ6IDA7XHJcbn1cclxuLy8gQ2FyZXRzIGluIG90aGVyIGJ1dHRvbiBzaXplc1xyXG4uYnRuLWxnIC5jYXJldCB7XHJcbiAgYm9yZGVyLXdpZHRoOiBAY2FyZXQtd2lkdGgtbGFyZ2UgQGNhcmV0LXdpZHRoLWxhcmdlIDA7XHJcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcclxufVxyXG4vLyBVcHNpZGUgZG93biBjYXJldHMgZm9yIC5kcm9wdXBcclxuLmRyb3B1cCAuYnRuLWxnIC5jYXJldCB7XHJcbiAgYm9yZGVyLXdpZHRoOiAwIEBjYXJldC13aWR0aC1sYXJnZSBAY2FyZXQtd2lkdGgtbGFyZ2U7XHJcbn1cclxuXHJcblxyXG4vLyBWZXJ0aWNhbCBidXR0b24gZ3JvdXBzXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi5idG4tZ3JvdXAtdmVydGljYWwge1xyXG4gID4gLmJ0bixcclxuICA+IC5idG4tZ3JvdXAsXHJcbiAgPiAuYnRuLWdyb3VwID4gLmJ0biB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIGZsb2F0OiBub25lO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBtYXgtd2lkdGg6IDEwMCU7XHJcbiAgfVxyXG5cclxuICAvLyBDbGVhciBmbG9hdHMgc28gZHJvcGRvd24gbWVudXMgY2FuIGJlIHByb3Blcmx5IHBsYWNlZFxyXG4gID4gLmJ0bi1ncm91cCB7XHJcbiAgICAmOmV4dGVuZCguY2xlYXJmaXggYWxsKTtcclxuICAgID4gLmJ0biB7XHJcbiAgICAgIGZsb2F0OiBub25lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgPiAuYnRuICsgLmJ0bixcclxuICA+IC5idG4gKyAuYnRuLWdyb3VwLFxyXG4gID4gLmJ0bi1ncm91cCArIC5idG4sXHJcbiAgPiAuYnRuLWdyb3VwICsgLmJ0bi1ncm91cCB7XHJcbiAgICBtYXJnaW4tdG9wOiAtMXB4O1xyXG4gICAgbWFyZ2luLWxlZnQ6IDA7XHJcbiAgfVxyXG59XHJcblxyXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0biB7XHJcbiAgJjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpIHtcclxuICAgIGJvcmRlci1yYWRpdXM6IDA7XHJcbiAgfVxyXG4gICY6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7XHJcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogQGJ0bi1ib3JkZXItcmFkaXVzLWJhc2U7XHJcbiAgICAuYm9yZGVyLWJvdHRvbS1yYWRpdXMoMCk7XHJcbiAgfVxyXG4gICY6bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSB7XHJcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiBAYnRuLWJvcmRlci1yYWRpdXMtYmFzZTtcclxuICAgIC5ib3JkZXItdG9wLXJhZGl1cygwKTtcclxuICB9XHJcbn1cclxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSA+IC5idG4ge1xyXG4gIGJvcmRlci1yYWRpdXM6IDA7XHJcbn1cclxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7XHJcbiAgPiAuYnRuOmxhc3QtY2hpbGQsXHJcbiAgPiAuZHJvcGRvd24tdG9nZ2xlIHtcclxuICAgIC5ib3JkZXItYm90dG9tLXJhZGl1cygwKTtcclxuICB9XHJcbn1cclxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG46Zmlyc3QtY2hpbGQge1xyXG4gIC5ib3JkZXItdG9wLXJhZGl1cygwKTtcclxufVxyXG5cclxuXHJcbi8vIEp1c3RpZmllZCBidXR0b24gZ3JvdXBzXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi5idG4tZ3JvdXAtanVzdGlmaWVkIHtcclxuICBkaXNwbGF5OiB0YWJsZTtcclxuICB3aWR0aDogMTAwJTtcclxuICB0YWJsZS1sYXlvdXQ6IGZpeGVkO1xyXG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XHJcbiAgPiAuYnRuLFxyXG4gID4gLmJ0bi1ncm91cCB7XHJcbiAgICBmbG9hdDogbm9uZTtcclxuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XHJcbiAgICB3aWR0aDogMSU7XHJcbiAgfVxyXG4gID4gLmJ0bi1ncm91cCAuYnRuIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gIH1cclxuXHJcbiAgPiAuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IHtcclxuICAgIGxlZnQ6IGF1dG87XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gQ2hlY2tib3ggYW5kIHJhZGlvIG9wdGlvbnNcclxuLy9cclxuLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGUgYnJvd3NlcidzIGZvcm0gdmFsaWRhdGlvbiBmZWVkYmFjaywgcG93ZXJlZCBieSB0aGVcclxuLy8gYHJlcXVpcmVkYCBhdHRyaWJ1dGUsIHdlIGhhdmUgdG8gXCJoaWRlXCIgdGhlIGlucHV0cyB2aWEgYGNsaXBgLiBXZSBjYW5ub3QgdXNlXHJcbi8vIGBkaXNwbGF5OiBub25lO2Agb3IgYHZpc2liaWxpdHk6IGhpZGRlbjtgIGFzIHRoYXQgYWxzbyBoaWRlcyB0aGUgcG9wb3Zlci5cclxuLy8gU2ltcGx5IHZpc3VhbGx5IGhpZGluZyB0aGUgaW5wdXRzIHZpYSBgb3BhY2l0eWAgd291bGQgbGVhdmUgdGhlbSBjbGlja2FibGUgaW5cclxuLy8gY2VydGFpbiBjYXNlcyB3aGljaCBpcyBwcmV2ZW50ZWQgYnkgdXNpbmcgYGNsaXBgIGFuZCBgcG9pbnRlci1ldmVudHNgLlxyXG4vLyBUaGlzIHdheSwgd2UgZW5zdXJlIGEgRE9NIGVsZW1lbnQgaXMgdmlzaWJsZSB0byBwb3NpdGlvbiB0aGUgcG9wb3ZlciBmcm9tLlxyXG4vL1xyXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL3B1bGwvMTI3OTQgYW5kXHJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9wdWxsLzE0NTU5IGZvciBtb3JlIGluZm9ybWF0aW9uLlxyXG5cclxuW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXSB7XHJcbiAgPiAuYnRuLFxyXG4gID4gLmJ0bi1ncm91cCA+IC5idG4ge1xyXG4gICAgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxyXG4gICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICBjbGlwOiByZWN0KDAsMCwwLDApO1xyXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiLy8gU2luZ2xlIHNpZGUgYm9yZGVyLXJhZGl1c1xyXG5cclxuLmJvcmRlci10b3AtcmFkaXVzKEByYWRpdXMpIHtcclxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogQHJhZGl1cztcclxuICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogQHJhZGl1cztcclxufVxyXG4uYm9yZGVyLXJpZ2h0LXJhZGl1cyhAcmFkaXVzKSB7XHJcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IEByYWRpdXM7XHJcbiAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IEByYWRpdXM7XHJcbn1cclxuLmJvcmRlci1ib3R0b20tcmFkaXVzKEByYWRpdXMpIHtcclxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogQHJhZGl1cztcclxuICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogQHJhZGl1cztcclxufVxyXG4uYm9yZGVyLWxlZnQtcmFkaXVzKEByYWRpdXMpIHtcclxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiBAcmFkaXVzO1xyXG4gICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IEByYWRpdXM7XHJcbn1cclxuIiwiLy9cclxuLy8gSW5wdXQgZ3JvdXBzXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vLyBCYXNlIHN0eWxlc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi5pbnB1dC1ncm91cCB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlOyAvLyBGb3IgZHJvcGRvd25zXHJcbiAgZGlzcGxheTogdGFibGU7XHJcbiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsgLy8gcHJldmVudCBpbnB1dCBncm91cHMgZnJvbSBpbmhlcml0aW5nIGJvcmRlciBzdHlsZXMgZnJvbSB0YWJsZSBjZWxscyB3aGVuIHBsYWNlZCB3aXRoaW4gYSB0YWJsZVxyXG5cclxuICAvLyBVbmRvIHBhZGRpbmcgYW5kIGZsb2F0IG9mIGdyaWQgY2xhc3Nlc1xyXG4gICZbY2xhc3MqPVwiY29sLVwiXSB7XHJcbiAgICBmbG9hdDogbm9uZTtcclxuICAgIHBhZGRpbmctbGVmdDogMDtcclxuICAgIHBhZGRpbmctcmlnaHQ6IDA7XHJcbiAgfVxyXG5cclxuICAuZm9ybS1jb250cm9sIHtcclxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBpbnB1dCBpcyBhbHdheXMgYWJvdmUgdGhlICphcHBlbmRlZCogYWRkb24gYnV0dG9uIGZvclxyXG4gICAgLy8gcHJvcGVyIGJvcmRlciBjb2xvcnMuXHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB6LWluZGV4OiAyO1xyXG5cclxuICAgIC8vIElFOSBmdWJhcnMgdGhlIHBsYWNlaG9sZGVyIGF0dHJpYnV0ZSBpbiB0ZXh0IGlucHV0cyBhbmQgdGhlIGFycm93cyBvblxyXG4gICAgLy8gc2VsZWN0IGVsZW1lbnRzIGluIGlucHV0IGdyb3Vwcy4gVG8gZml4IGl0LCB3ZSBmbG9hdCB0aGUgaW5wdXQuIERldGFpbHM6XHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNTYxI2lzc3VlY29tbWVudC0yODkzNjg1NVxyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcblxyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xyXG4gIH1cclxufVxyXG5cclxuLy8gU2l6aW5nIG9wdGlvbnNcclxuLy9cclxuLy8gUmVtaXggdGhlIGRlZmF1bHQgZm9ybSBjb250cm9sIHNpemluZyBjbGFzc2VzIGludG8gbmV3IG9uZXMgZm9yIGVhc2llclxyXG4vLyBtYW5pcHVsYXRpb24uXHJcblxyXG4uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLFxyXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYWRkb24sXHJcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcclxuICAuaW5wdXQtbGcoKTtcclxufVxyXG4uaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sLFxyXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYWRkb24sXHJcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcclxuICAuaW5wdXQtc20oKTtcclxufVxyXG5cclxuXHJcbi8vIERpc3BsYXkgYXMgdGFibGUtY2VsbFxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi5pbnB1dC1ncm91cC1hZGRvbixcclxuLmlucHV0LWdyb3VwLWJ0bixcclxuLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wge1xyXG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XHJcblxyXG4gICY6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7XHJcbiAgICBib3JkZXItcmFkaXVzOiAwO1xyXG4gIH1cclxufVxyXG4vLyBBZGRvbiBhbmQgYWRkb24gd3JhcHBlciBmb3IgYnV0dG9uc1xyXG4uaW5wdXQtZ3JvdXAtYWRkb24sXHJcbi5pbnB1dC1ncm91cC1idG4ge1xyXG4gIHdpZHRoOiAxJTtcclxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IC8vIE1hdGNoIHRoZSBpbnB1dHNcclxufVxyXG5cclxuLy8gVGV4dCBpbnB1dCBncm91cHNcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4uaW5wdXQtZ3JvdXAtYWRkb24ge1xyXG4gIHBhZGRpbmc6IEBwYWRkaW5nLWJhc2UtdmVydGljYWwgQHBhZGRpbmctYmFzZS1ob3Jpem9udGFsO1xyXG4gIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1iYXNlO1xyXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcbiAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgY29sb3I6IEBpbnB1dC1jb2xvcjtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogQGlucHV0LWdyb3VwLWFkZG9uLWJnO1xyXG4gIGJvcmRlcjogMXB4IHNvbGlkIEBpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I7XHJcbiAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtYmFzZTtcclxuXHJcbiAgLy8gU2l6aW5nXHJcbiAgJi5pbnB1dC1zbSB7XHJcbiAgICBwYWRkaW5nOiBAcGFkZGluZy1zbWFsbC12ZXJ0aWNhbCBAcGFkZGluZy1zbWFsbC1ob3Jpem9udGFsO1xyXG4gICAgZm9udC1zaXplOiBAZm9udC1zaXplLXNtYWxsO1xyXG4gICAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtc21hbGw7XHJcbiAgfVxyXG4gICYuaW5wdXQtbGcge1xyXG4gICAgcGFkZGluZzogQHBhZGRpbmctbGFyZ2UtdmVydGljYWwgQHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbDtcclxuICAgIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1sYXJnZTtcclxuICAgIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWxhcmdlO1xyXG4gIH1cclxuXHJcbiAgLy8gTnVrZSBkZWZhdWx0IG1hcmdpbnMgZnJvbSBjaGVja2JveGVzIGFuZCByYWRpb3MgdG8gdmVydGljYWxseSBjZW50ZXIgd2l0aGluLlxyXG4gIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcclxuICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xyXG4gICAgbWFyZ2luLXRvcDogMDtcclxuICB9XHJcbn1cclxuXHJcbi8vIFJlc2V0IHJvdW5kZWQgY29ybmVyc1xyXG4uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpmaXJzdC1jaGlsZCxcclxuLmlucHV0LWdyb3VwLWFkZG9uOmZpcnN0LWNoaWxkLFxyXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bixcclxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4tZ3JvdXAgPiAuYnRuLFxyXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmRyb3Bkb3duLXRvZ2dsZSxcclxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bjpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSxcclxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bi1ncm91cDpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XHJcbiAgLmJvcmRlci1yaWdodC1yYWRpdXMoMCk7XHJcbn1cclxuLmlucHV0LWdyb3VwLWFkZG9uOmZpcnN0LWNoaWxkIHtcclxuICBib3JkZXItcmlnaHQ6IDA7XHJcbn1cclxuLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2w6bGFzdC1jaGlsZCxcclxuLmlucHV0LWdyb3VwLWFkZG9uOmxhc3QtY2hpbGQsXHJcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4sXHJcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4tZ3JvdXAgPiAuYnRuLFxyXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuZHJvcGRvd24tdG9nZ2xlLFxyXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKSxcclxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuIHtcclxuICAuYm9yZGVyLWxlZnQtcmFkaXVzKDApO1xyXG59XHJcbi5pbnB1dC1ncm91cC1hZGRvbjpsYXN0LWNoaWxkIHtcclxuICBib3JkZXItbGVmdDogMDtcclxufVxyXG5cclxuLy8gQnV0dG9uIGlucHV0IGdyb3Vwc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi5pbnB1dC1ncm91cC1idG4ge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAvLyBKYW5raWx5IHByZXZlbnQgaW5wdXQgYnV0dG9uIGdyb3VwcyBmcm9tIHdyYXBwaW5nIHdpdGggYHdoaXRlLXNwYWNlYCBhbmRcclxuICAvLyBgZm9udC1zaXplYCBpbiBjb21iaW5hdGlvbiB3aXRoIGBpbmxpbmUtYmxvY2tgIG9uIGJ1dHRvbnMuXHJcbiAgZm9udC1zaXplOiAwO1xyXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcblxyXG4gIC8vIE5lZ2F0aXZlIG1hcmdpbiBmb3Igc3BhY2luZywgcG9zaXRpb24gZm9yIGJyaW5naW5nIGhvdmVyZWQvZm9jdXNlZC9hY3RpdmVkXHJcbiAgLy8gZWxlbWVudCBhYm92ZSB0aGUgc2libGluZ3MuXHJcbiAgPiAuYnRuIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICsgLmJ0biB7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xyXG4gICAgfVxyXG4gICAgLy8gQnJpbmcgdGhlIFwiYWN0aXZlXCIgYnV0dG9uIHRvIHRoZSBmcm9udFxyXG4gICAgJjpob3ZlcixcclxuICAgICY6Zm9jdXMsXHJcbiAgICAmOmFjdGl2ZSB7XHJcbiAgICAgIHotaW5kZXg6IDI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBOZWdhdGl2ZSBtYXJnaW4gdG8gb25seSBoYXZlIGEgMXB4IGJvcmRlciBiZXR3ZWVuIHRoZSB0d29cclxuICAmOmZpcnN0LWNoaWxkIHtcclxuICAgID4gLmJ0bixcclxuICAgID4gLmJ0bi1ncm91cCB7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogLTFweDtcclxuICAgIH1cclxuICB9XHJcbiAgJjpsYXN0LWNoaWxkIHtcclxuICAgID4gLmJ0bixcclxuICAgID4gLmJ0bi1ncm91cCB7XHJcbiAgICAgIHotaW5kZXg6IDI7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCIvL1xyXG4vLyBOYXZzXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuLy8gQmFzZSBjbGFzc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuLm5hdiB7XHJcbiAgbWFyZ2luLWJvdHRvbTogMDtcclxuICBwYWRkaW5nLWxlZnQ6IDA7IC8vIE92ZXJyaWRlIGRlZmF1bHQgdWwvb2xcclxuICBsaXN0LXN0eWxlOiBub25lO1xyXG4gICY6ZXh0ZW5kKC5jbGVhcmZpeCBhbGwpO1xyXG5cclxuICA+IGxpIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG5cclxuICAgID4gYSB7XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgIHBhZGRpbmc6IEBuYXYtbGluay1wYWRkaW5nO1xyXG4gICAgICAmOmhvdmVyLFxyXG4gICAgICAmOmZvY3VzIHtcclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdi1saW5rLWhvdmVyLWJnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGlzYWJsZWQgc3RhdGUgc2V0cyB0ZXh0IHRvIGdyYXkgYW5kIG51a2VzIGhvdmVyL3RhYiBlZmZlY3RzXHJcbiAgICAmLmRpc2FibGVkID4gYSB7XHJcbiAgICAgIGNvbG9yOiBAbmF2LWRpc2FibGVkLWxpbmstY29sb3I7XHJcblxyXG4gICAgICAmOmhvdmVyLFxyXG4gICAgICAmOmZvY3VzIHtcclxuICAgICAgICBjb2xvcjogQG5hdi1kaXNhYmxlZC1saW5rLWhvdmVyLWNvbG9yO1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICAgICAgICBjdXJzb3I6IEBjdXJzb3ItZGlzYWJsZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIE9wZW4gZHJvcGRvd25zXHJcbiAgLm9wZW4gPiBhIHtcclxuICAgICYsXHJcbiAgICAmOmhvdmVyLFxyXG4gICAgJjpmb2N1cyB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXYtbGluay1ob3Zlci1iZztcclxuICAgICAgYm9yZGVyLWNvbG9yOiBAbGluay1jb2xvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIE5hdiBkaXZpZGVycyAoZGVwcmVjYXRlZCB3aXRoIHYzLjAuMSlcclxuICAvL1xyXG4gIC8vIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGluIHYzIHdpdGggdGhlIGRyb3BwaW5nIG9mIGAubmF2LWxpc3RgLCBidXRcclxuICAvLyB3ZSBtaXNzZWQgaXQuIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHRoaXMgYW55d2hlcmUsIGJ1dCBpbiB0aGUgaW50ZXJlc3RcclxuICAvLyBvZiBtYWludGFpbmluZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGluIGNhc2UgeW91IHVzZSBpdCwgaXQncyBkZXByZWNhdGVkLlxyXG4gIC5uYXYtZGl2aWRlciB7XHJcbiAgICAubmF2LWRpdmlkZXIoKTtcclxuICB9XHJcblxyXG4gIC8vIFByZXZlbnQgSUU4IGZyb20gbWlzcGxhY2luZyBpbWdzXHJcbiAgLy9cclxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2g1YnAvaHRtbDUtYm9pbGVycGxhdGUvaXNzdWVzLzk4NCNpc3N1ZWNvbW1lbnQtMzk4NTk4OVxyXG4gID4gbGkgPiBhID4gaW1nIHtcclxuICAgIG1heC13aWR0aDogbm9uZTtcclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyBUYWJzXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi8vIEdpdmUgdGhlIHRhYnMgc29tZXRoaW5nIHRvIHNpdCBvblxyXG4ubmF2LXRhYnMge1xyXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAbmF2LXRhYnMtYm9yZGVyLWNvbG9yO1xyXG4gID4gbGkge1xyXG4gICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICAvLyBNYWtlIHRoZSBsaXN0LWl0ZW1zIG92ZXJsYXkgdGhlIGJvdHRvbSBib3JkZXJcclxuICAgIG1hcmdpbi1ib3R0b206IC0xcHg7XHJcblxyXG4gICAgLy8gQWN0dWFsIHRhYnMgKGFzIGxpbmtzKVxyXG4gICAgPiBhIHtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcclxuICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWJhc2UgQGJvcmRlci1yYWRpdXMtYmFzZSAwIDA7XHJcbiAgICAgICY6aG92ZXIge1xyXG4gICAgICAgIGJvcmRlci1jb2xvcjogQG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yIEBuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvciBAbmF2LXRhYnMtYm9yZGVyLWNvbG9yO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWN0aXZlIHN0YXRlLCBhbmQgaXRzIDpob3ZlciB0byBvdmVycmlkZSBub3JtYWwgOmhvdmVyXHJcbiAgICAmLmFjdGl2ZSA+IGEge1xyXG4gICAgICAmLFxyXG4gICAgICAmOmhvdmVyLFxyXG4gICAgICAmOmZvY3VzIHtcclxuICAgICAgICBjb2xvcjogQG5hdi10YWJzLWFjdGl2ZS1saW5rLWhvdmVyLWNvbG9yO1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXYtdGFicy1hY3RpdmUtbGluay1ob3Zlci1iZztcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBAbmF2LXRhYnMtYWN0aXZlLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yO1xyXG4gICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvLyBwdWxsaW5nIHRoaXMgaW4gbWFpbmx5IGZvciBsZXNzIHNob3J0aGFuZFxyXG4gICYubmF2LWp1c3RpZmllZCB7XHJcbiAgICAubmF2LWp1c3RpZmllZCgpO1xyXG4gICAgLm5hdi10YWJzLWp1c3RpZmllZCgpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIFBpbGxzXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLm5hdi1waWxscyB7XHJcbiAgPiBsaSB7XHJcbiAgICBmbG9hdDogbGVmdDtcclxuXHJcbiAgICAvLyBMaW5rcyByZW5kZXJlZCBhcyBwaWxsc1xyXG4gICAgPiBhIHtcclxuICAgICAgYm9yZGVyLXJhZGl1czogQG5hdi1waWxscy1ib3JkZXItcmFkaXVzO1xyXG4gICAgfVxyXG4gICAgKyBsaSB7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAycHg7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWN0aXZlIHN0YXRlXHJcbiAgICAmLmFjdGl2ZSA+IGEge1xyXG4gICAgICAmLFxyXG4gICAgICAmOmhvdmVyLFxyXG4gICAgICAmOmZvY3VzIHtcclxuICAgICAgICBjb2xvcjogQG5hdi1waWxscy1hY3RpdmUtbGluay1ob3Zlci1jb2xvcjtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2LXBpbGxzLWFjdGl2ZS1saW5rLWhvdmVyLWJnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gU3RhY2tlZCBwaWxsc1xyXG4ubmF2LXN0YWNrZWQge1xyXG4gID4gbGkge1xyXG4gICAgZmxvYXQ6IG5vbmU7XHJcbiAgICArIGxpIHtcclxuICAgICAgbWFyZ2luLXRvcDogMnB4O1xyXG4gICAgICBtYXJnaW4tbGVmdDogMDsgLy8gbm8gbmVlZCBmb3IgdGhpcyBnYXAgYmV0d2VlbiBuYXYgaXRlbXNcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyBOYXYgdmFyaWF0aW9uc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuLy8gSnVzdGlmaWVkIG5hdiBsaW5rc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4ubmF2LWp1c3RpZmllZCB7XHJcbiAgd2lkdGg6IDEwMCU7XHJcblxyXG4gID4gbGkge1xyXG4gICAgZmxvYXQ6IG5vbmU7XHJcbiAgICA+IGEge1xyXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gID4gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHtcclxuICAgIHRvcDogYXV0bztcclxuICAgIGxlZnQ6IGF1dG87XHJcbiAgfVxyXG5cclxuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIHtcclxuICAgID4gbGkge1xyXG4gICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xyXG4gICAgICB3aWR0aDogMSU7XHJcbiAgICAgID4gYSB7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLy8gTW92ZSBib3JkZXJzIHRvIGFuY2hvcnMgaW5zdGVhZCBvZiBib3R0b20gb2YgbGlzdFxyXG4vL1xyXG4vLyBNaXhpbiBmb3IgYWRkaW5nIG9uIHRvcCB0aGUgc2hhcmVkIGAubmF2LWp1c3RpZmllZGAgc3R5bGVzIGZvciBvdXIgdGFic1xyXG4ubmF2LXRhYnMtanVzdGlmaWVkIHtcclxuICBib3JkZXItYm90dG9tOiAwO1xyXG5cclxuICA+IGxpID4gYSB7XHJcbiAgICAvLyBPdmVycmlkZSBtYXJnaW4gZnJvbSAubmF2LXRhYnNcclxuICAgIG1hcmdpbi1yaWdodDogMDtcclxuICAgIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWJhc2U7XHJcbiAgfVxyXG5cclxuICA+IC5hY3RpdmUgPiBhLFxyXG4gID4gLmFjdGl2ZSA+IGE6aG92ZXIsXHJcbiAgPiAuYWN0aXZlID4gYTpmb2N1cyB7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCBAbmF2LXRhYnMtanVzdGlmaWVkLWxpbmstYm9yZGVyLWNvbG9yO1xyXG4gIH1cclxuXHJcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XHJcbiAgICA+IGxpID4gYSB7XHJcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAbmF2LXRhYnMtanVzdGlmaWVkLWxpbmstYm9yZGVyLWNvbG9yO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1iYXNlIEBib3JkZXItcmFkaXVzLWJhc2UgMCAwO1xyXG4gICAgfVxyXG4gICAgPiAuYWN0aXZlID4gYSxcclxuICAgID4gLmFjdGl2ZSA+IGE6aG92ZXIsXHJcbiAgICA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcclxuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogQG5hdi10YWJzLWp1c3RpZmllZC1hY3RpdmUtbGluay1ib3JkZXItY29sb3I7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gVGFiYmFibGUgdGFic1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vLyBIaWRlIHRhYmJhYmxlIHBhbmVzIHRvIHN0YXJ0LCBzaG93IHRoZW0gd2hlbiBgLmFjdGl2ZWBcclxuLnRhYi1jb250ZW50IHtcclxuICA+IC50YWItcGFuZSB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG4gIH1cclxuICA+IC5hY3RpdmUge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gRHJvcGRvd25zXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi8vIFNwZWNpZmljIGRyb3Bkb3duc1xyXG4ubmF2LXRhYnMgLmRyb3Bkb3duLW1lbnUge1xyXG4gIC8vIG1ha2UgZHJvcGRvd24gYm9yZGVyIG92ZXJsYXAgdGFiIGJvcmRlclxyXG4gIG1hcmdpbi10b3A6IC0xcHg7XHJcbiAgLy8gUmVtb3ZlIHRoZSB0b3Agcm91bmRlZCBjb3JuZXJzIGhlcmUgc2luY2UgdGhlcmUgaXMgYSBoYXJkIGVkZ2UgYWJvdmUgdGhlIG1lbnVcclxuICAuYm9yZGVyLXRvcC1yYWRpdXMoMCk7XHJcbn1cclxuIiwiLy9cclxuLy8gTmF2YmFyc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbi8vIFdyYXBwZXIgYW5kIGJhc2UgY2xhc3NcclxuLy9cclxuLy8gUHJvdmlkZSBhIHN0YXRpYyBuYXZiYXIgZnJvbSB3aGljaCB3ZSBleHBhbmQgdG8gY3JlYXRlIGZ1bGwtd2lkdGgsIGZpeGVkLCBhbmRcclxuLy8gb3RoZXIgbmF2YmFyIHZhcmlhdGlvbnMuXHJcblxyXG4ubmF2YmFyIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgbWluLWhlaWdodDogQG5hdmJhci1oZWlnaHQ7IC8vIEVuc3VyZSBhIG5hdmJhciBhbHdheXMgc2hvd3MgKGUuZy4sIHdpdGhvdXQgYSAubmF2YmFyLWJyYW5kIGluIGNvbGxhcHNlZCBtb2RlKVxyXG4gIG1hcmdpbi1ib3R0b206IEBuYXZiYXItbWFyZ2luLWJvdHRvbTtcclxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcclxuXHJcbiAgLy8gUHJldmVudCBmbG9hdHMgZnJvbSBicmVha2luZyB0aGUgbmF2YmFyXHJcbiAgJjpleHRlbmQoLmNsZWFyZml4IGFsbCk7XHJcblxyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XHJcbiAgICBib3JkZXItcmFkaXVzOiBAbmF2YmFyLWJvcmRlci1yYWRpdXM7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gTmF2YmFyIGhlYWRpbmdcclxuLy9cclxuLy8gR3JvdXBzIGAubmF2YmFyLWJyYW5kYCBhbmQgYC5uYXZiYXItdG9nZ2xlYCBpbnRvIGEgc2luZ2xlIGNvbXBvbmVudCBmb3IgZWFzeVxyXG4vLyBzdHlsaW5nIG9mIHJlc3BvbnNpdmUgYXNwZWN0cy5cclxuXHJcbi5uYXZiYXItaGVhZGVyIHtcclxuICAmOmV4dGVuZCguY2xlYXJmaXggYWxsKTtcclxuXHJcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIE5hdmJhciBjb2xsYXBzZSAoYm9keSlcclxuLy9cclxuLy8gR3JvdXAgeW91ciBuYXZiYXIgY29udGVudCBpbnRvIHRoaXMgZm9yIGVhc3kgY29sbGFwc2luZyBhbmQgZXhwYW5kaW5nIGFjcm9zc1xyXG4vLyB2YXJpb3VzIGRldmljZSBzaXplcy4gQnkgZGVmYXVsdCwgdGhpcyBjb250ZW50IGlzIGNvbGxhcHNlZCB3aGVuIDw3NjhweCwgYnV0XHJcbi8vIHdpbGwgZXhwYW5kIHBhc3QgdGhhdCBmb3IgYSBob3Jpem9udGFsIGRpc3BsYXkuXHJcbi8vXHJcbi8vIFRvIHN0YXJ0IChvbiBtb2JpbGUgZGV2aWNlcykgdGhlIG5hdmJhciBsaW5rcywgZm9ybXMsIGFuZCBidXR0b25zIGFyZSBzdGFja2VkXHJcbi8vIHZlcnRpY2FsbHkgYW5kIGluY2x1ZGUgYSBgbWF4LWhlaWdodGAgdG8gb3ZlcmZsb3cgaW4gY2FzZSB5b3UgaGF2ZSB0b28gbXVjaFxyXG4vLyBjb250ZW50IGZvciB0aGUgdXNlcidzIHZpZXdwb3J0LlxyXG5cclxuLm5hdmJhci1jb2xsYXBzZSB7XHJcbiAgb3ZlcmZsb3cteDogdmlzaWJsZTtcclxuICBwYWRkaW5nLXJpZ2h0OiBAbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcclxuICBwYWRkaW5nLWxlZnQ6ICBAbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcclxuICBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XHJcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LC4xKTtcclxuICAmOmV4dGVuZCguY2xlYXJmaXggYWxsKTtcclxuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XHJcblxyXG4gICYuaW4ge1xyXG4gICAgb3ZlcmZsb3cteTogYXV0bztcclxuICB9XHJcblxyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XHJcbiAgICB3aWR0aDogYXV0bztcclxuICAgIGJvcmRlci10b3A6IDA7XHJcbiAgICBib3gtc2hhZG93OiBub25lO1xyXG5cclxuICAgICYuY29sbGFwc2Uge1xyXG4gICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xyXG4gICAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcclxuICAgICAgcGFkZGluZy1ib3R0b206IDA7IC8vIE92ZXJyaWRlIGRlZmF1bHQgc2V0dGluZ1xyXG4gICAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuICAgICYuaW4ge1xyXG4gICAgICBvdmVyZmxvdy15OiB2aXNpYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVuZG8gdGhlIGNvbGxhcHNlIHNpZGUgcGFkZGluZyBmb3IgbmF2YmFycyB3aXRoIGNvbnRhaW5lcnMgdG8gZW5zdXJlXHJcbiAgICAvLyBhbGlnbm1lbnQgb2YgcmlnaHQtYWxpZ25lZCBjb250ZW50cy5cclxuICAgIC5uYXZiYXItZml4ZWQtdG9wICYsXHJcbiAgICAubmF2YmFyLXN0YXRpYy10b3AgJixcclxuICAgIC5uYXZiYXItZml4ZWQtYm90dG9tICYge1xyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XHJcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4ubmF2YmFyLWZpeGVkLXRvcCxcclxuLm5hdmJhci1maXhlZC1ib3R0b20ge1xyXG4gIC5uYXZiYXItY29sbGFwc2Uge1xyXG4gICAgbWF4LWhlaWdodDogQG5hdmJhci1jb2xsYXBzZS1tYXgtaGVpZ2h0O1xyXG5cclxuICAgIEBtZWRpYSAobWF4LWRldmljZS13aWR0aDogQHNjcmVlbi14cy1taW4pIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xyXG4gICAgICBtYXgtaGVpZ2h0OiAyMDBweDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyBCb3RoIG5hdmJhciBoZWFkZXIgYW5kIGNvbGxhcHNlXHJcbi8vXHJcbi8vIFdoZW4gYSBjb250YWluZXIgaXMgcHJlc2VudCwgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgaGVhZGVyIGFuZCBjb2xsYXBzZS5cclxuXHJcbi5jb250YWluZXIsXHJcbi5jb250YWluZXItZmx1aWQge1xyXG4gID4gLm5hdmJhci1oZWFkZXIsXHJcbiAgPiAubmF2YmFyLWNvbGxhcHNlIHtcclxuICAgIG1hcmdpbi1yaWdodDogLUBuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xyXG4gICAgbWFyZ2luLWxlZnQ6ICAtQG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XHJcblxyXG4gICAgQG1lZGlhIChtaW4td2lkdGg6IEBncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcclxuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xyXG4gICAgICBtYXJnaW4tbGVmdDogIDA7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy9cclxuLy8gTmF2YmFyIGFsaWdubWVudCBvcHRpb25zXHJcbi8vXHJcbi8vIERpc3BsYXkgdGhlIG5hdmJhciBhY3Jvc3MgdGhlIGVudGlyZXR5IG9mIHRoZSBwYWdlIG9yIGZpeGVkIGl0IHRvIHRoZSB0b3Agb3JcclxuLy8gYm90dG9tIG9mIHRoZSBwYWdlLlxyXG5cclxuLy8gU3RhdGljIHRvcCAodW5maXhlZCwgYnV0IDEwMCUgd2lkZSkgbmF2YmFyXHJcbi5uYXZiYXItc3RhdGljLXRvcCB7XHJcbiAgei1pbmRleDogQHppbmRleC1uYXZiYXI7XHJcbiAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4O1xyXG5cclxuICBAbWVkaWEgKG1pbi13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xyXG4gICAgYm9yZGVyLXJhZGl1czogMDtcclxuICB9XHJcbn1cclxuXHJcbi8vIEZpeCB0aGUgdG9wL2JvdHRvbSBuYXZiYXJzIHdoZW4gc2NyZWVuIHJlYWwgZXN0YXRlIHN1cHBvcnRzIGl0XHJcbi5uYXZiYXItZml4ZWQtdG9wLFxyXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIHJpZ2h0OiAwO1xyXG4gIGxlZnQ6IDA7XHJcbiAgei1pbmRleDogQHppbmRleC1uYXZiYXItZml4ZWQ7XHJcblxyXG4gIC8vIFVuZG8gdGhlIHJvdW5kZWQgY29ybmVyc1xyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XHJcbiAgICBib3JkZXItcmFkaXVzOiAwO1xyXG4gIH1cclxufVxyXG4ubmF2YmFyLWZpeGVkLXRvcCB7XHJcbiAgdG9wOiAwO1xyXG4gIGJvcmRlci13aWR0aDogMCAwIDFweDtcclxufVxyXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSB7XHJcbiAgYm90dG9tOiAwO1xyXG4gIG1hcmdpbi1ib3R0b206IDA7IC8vIG92ZXJyaWRlIC5uYXZiYXIgZGVmYXVsdHNcclxuICBib3JkZXItd2lkdGg6IDFweCAwIDA7XHJcbn1cclxuXHJcblxyXG4vLyBCcmFuZC9wcm9qZWN0IG5hbWVcclxuXHJcbi5uYXZiYXItYnJhbmQge1xyXG4gIGZsb2F0OiBsZWZ0O1xyXG4gIHBhZGRpbmc6IEBuYXZiYXItcGFkZGluZy12ZXJ0aWNhbCBAbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcclxuICBmb250LXNpemU6IEBmb250LXNpemUtbGFyZ2U7XHJcbiAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcclxuICBoZWlnaHQ6IEBuYXZiYXItaGVpZ2h0O1xyXG5cclxuICAmOmhvdmVyLFxyXG4gICY6Zm9jdXMge1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gIH1cclxuXHJcbiAgPiBpbWcge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgfVxyXG5cclxuICBAbWVkaWEgKG1pbi13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xyXG4gICAgLm5hdmJhciA+IC5jb250YWluZXIgJixcclxuICAgIC5uYXZiYXIgPiAuY29udGFpbmVyLWZsdWlkICYge1xyXG4gICAgICBtYXJnaW4tbGVmdDogLUBuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIE5hdmJhciB0b2dnbGVcclxuLy9cclxuLy8gQ3VzdG9tIGJ1dHRvbiBmb3IgdG9nZ2xpbmcgdGhlIGAubmF2YmFyLWNvbGxhcHNlYCwgcG93ZXJlZCBieSB0aGUgY29sbGFwc2VcclxuLy8gSmF2YVNjcmlwdCBwbHVnaW4uXHJcblxyXG4ubmF2YmFyLXRvZ2dsZSB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIGZsb2F0OiByaWdodDtcclxuICBtYXJnaW4tcmlnaHQ6IEBuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xyXG4gIHBhZGRpbmc6IDlweCAxMHB4O1xyXG4gIC5uYXZiYXItdmVydGljYWwtYWxpZ24oMzRweCk7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgLy8gUmVzZXQgdW51c3VhbCBGaXJlZm94LW9uLUFuZHJvaWQgZGVmYXVsdCBzdHlsZTsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MvaXNzdWVzLzIxNFxyXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xyXG4gIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWJhc2U7XHJcblxyXG4gIC8vIFdlIHJlbW92ZSB0aGUgYG91dGxpbmVgIGhlcmUsIGJ1dCBsYXRlciBjb21wZW5zYXRlIGJ5IGF0dGFjaGluZyBgOmhvdmVyYFxyXG4gIC8vIHN0eWxlcyB0byBgOmZvY3VzYC5cclxuICAmOmZvY3VzIHtcclxuICAgIG91dGxpbmU6IDA7XHJcbiAgfVxyXG5cclxuICAvLyBCYXJzXHJcbiAgLmljb24tYmFyIHtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgd2lkdGg6IDIycHg7XHJcbiAgICBoZWlnaHQ6IDJweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDFweDtcclxuICB9XHJcbiAgLmljb24tYmFyICsgLmljb24tYmFyIHtcclxuICAgIG1hcmdpbi10b3A6IDRweDtcclxuICB9XHJcblxyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIE5hdmJhciBuYXYgbGlua3NcclxuLy9cclxuLy8gQnVpbGRzIG9uIHRvcCBvZiB0aGUgYC5uYXZgIGNvbXBvbmVudHMgd2l0aCBpdHMgb3duIG1vZGlmaWVyIGNsYXNzIHRvIG1ha2VcclxuLy8gdGhlIG5hdiB0aGUgZnVsbCBoZWlnaHQgb2YgdGhlIGhvcml6b250YWwgbmF2IChhYm92ZSA3NjhweCkuXHJcblxyXG4ubmF2YmFyLW5hdiB7XHJcbiAgbWFyZ2luOiAoQG5hdmJhci1wYWRkaW5nLXZlcnRpY2FsIC8gMikgLUBuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xyXG5cclxuICA+IGxpID4gYSB7XHJcbiAgICBwYWRkaW5nLXRvcDogICAgMTBweDtcclxuICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcclxuICB9XHJcblxyXG4gIEBtZWRpYSAobWF4LXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50LW1heCkge1xyXG4gICAgLy8gRHJvcGRvd25zIGdldCBjdXN0b20gZGlzcGxheSB3aGVuIGNvbGxhcHNlZFxyXG4gICAgLm9wZW4gLmRyb3Bkb3duLW1lbnUge1xyXG4gICAgICBwb3NpdGlvbjogc3RhdGljO1xyXG4gICAgICBmbG9hdDogbm9uZTtcclxuICAgICAgd2lkdGg6IGF1dG87XHJcbiAgICAgIG1hcmdpbi10b3A6IDA7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgICBib3JkZXI6IDA7XHJcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbiAgICAgID4gbGkgPiBhLFxyXG4gICAgICAuZHJvcGRvd24taGVhZGVyIHtcclxuICAgICAgICBwYWRkaW5nOiA1cHggMTVweCA1cHggMjVweDtcclxuICAgICAgfVxyXG4gICAgICA+IGxpID4gYSB7XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcclxuICAgICAgICAmOmhvdmVyLFxyXG4gICAgICAgICY6Zm9jdXMge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFVuY29sbGFwc2UgdGhlIG5hdlxyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XHJcbiAgICBmbG9hdDogbGVmdDtcclxuICAgIG1hcmdpbjogMDtcclxuXHJcbiAgICA+IGxpIHtcclxuICAgICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICAgID4gYSB7XHJcbiAgICAgICAgcGFkZGluZy10b3A6ICAgIEBuYXZiYXItcGFkZGluZy12ZXJ0aWNhbDtcclxuICAgICAgICBwYWRkaW5nLWJvdHRvbTogQG5hdmJhci1wYWRkaW5nLXZlcnRpY2FsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gTmF2YmFyIGZvcm1cclxuLy9cclxuLy8gRXh0ZW5zaW9uIG9mIHRoZSBgLmZvcm0taW5saW5lYCB3aXRoIHNvbWUgZXh0cmEgZmxhdm9yIGZvciBvcHRpbXVtIGRpc3BsYXkgaW5cclxuLy8gb3VyIG5hdmJhcnMuXHJcblxyXG4ubmF2YmFyLWZvcm0ge1xyXG4gIG1hcmdpbi1sZWZ0OiAtQG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XHJcbiAgbWFyZ2luLXJpZ2h0OiAtQG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XHJcbiAgcGFkZGluZzogMTBweCBAbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcclxuICBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XHJcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xyXG4gIEBzaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuMSksIDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuMSk7XHJcbiAgLmJveC1zaGFkb3coQHNoYWRvdyk7XHJcblxyXG4gIC8vIE1peGluIGJlaGF2aW9yIGZvciBvcHRpbXVtIGRpc3BsYXlcclxuICAuZm9ybS1pbmxpbmUoKTtcclxuXHJcbiAgLmZvcm0tZ3JvdXAge1xyXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IEBncmlkLWZsb2F0LWJyZWFrcG9pbnQtbWF4KSB7XHJcbiAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcclxuXHJcbiAgICAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gVmVydGljYWxseSBjZW50ZXIgaW4gZXhwYW5kZWQsIGhvcml6b250YWwgbmF2YmFyXHJcbiAgLm5hdmJhci12ZXJ0aWNhbC1hbGlnbihAaW5wdXQtaGVpZ2h0LWJhc2UpO1xyXG5cclxuICAvLyBVbmRvIDEwMCUgd2lkdGggZm9yIHB1bGwgY2xhc3Nlc1xyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XHJcbiAgICB3aWR0aDogYXV0bztcclxuICAgIGJvcmRlcjogMDtcclxuICAgIG1hcmdpbi1sZWZ0OiAwO1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xyXG4gICAgcGFkZGluZy10b3A6IDA7XHJcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcclxuICAgIC5ib3gtc2hhZG93KG5vbmUpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIERyb3Bkb3duIG1lbnVzXHJcblxyXG4vLyBNZW51IHBvc2l0aW9uIGFuZCBtZW51IGNhcmV0c1xyXG4ubmF2YmFyLW5hdiA+IGxpID4gLmRyb3Bkb3duLW1lbnUge1xyXG4gIG1hcmdpbi10b3A6IDA7XHJcbiAgLmJvcmRlci10b3AtcmFkaXVzKDApO1xyXG59XHJcbi8vIE1lbnUgcG9zaXRpb24gYW5kIG1lbnUgY2FyZXQgc3VwcG9ydCBmb3IgZHJvcHVwcyB2aWEgZXh0cmEgZHJvcHVwIGNsYXNzXHJcbi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItbmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudSB7XHJcbiAgbWFyZ2luLWJvdHRvbTogMDtcclxuICAuYm9yZGVyLXRvcC1yYWRpdXMoQG5hdmJhci1ib3JkZXItcmFkaXVzKTtcclxuICAuYm9yZGVyLWJvdHRvbS1yYWRpdXMoMCk7XHJcbn1cclxuXHJcblxyXG4vLyBCdXR0b25zIGluIG5hdmJhcnNcclxuLy9cclxuLy8gVmVydGljYWxseSBjZW50ZXIgYSBidXR0b24gd2l0aGluIGEgbmF2YmFyICh3aGVuICpub3QqIGluIGEgZm9ybSkuXHJcblxyXG4ubmF2YmFyLWJ0biB7XHJcbiAgLm5hdmJhci12ZXJ0aWNhbC1hbGlnbihAaW5wdXQtaGVpZ2h0LWJhc2UpO1xyXG5cclxuICAmLmJ0bi1zbSB7XHJcbiAgICAubmF2YmFyLXZlcnRpY2FsLWFsaWduKEBpbnB1dC1oZWlnaHQtc21hbGwpO1xyXG4gIH1cclxuICAmLmJ0bi14cyB7XHJcbiAgICAubmF2YmFyLXZlcnRpY2FsLWFsaWduKDIyKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyBUZXh0IGluIG5hdmJhcnNcclxuLy9cclxuLy8gQWRkIGEgY2xhc3MgdG8gbWFrZSBhbnkgZWxlbWVudCBwcm9wZXJseSBhbGlnbiBpdHNlbGYgdmVydGljYWxseSB3aXRoaW4gdGhlIG5hdmJhcnMuXHJcblxyXG4ubmF2YmFyLXRleHQge1xyXG4gIC5uYXZiYXItdmVydGljYWwtYWxpZ24oQGxpbmUtaGVpZ2h0LWNvbXB1dGVkKTtcclxuXHJcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcclxuICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgbWFyZ2luLWxlZnQ6IEBuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xyXG4gICAgbWFyZ2luLXJpZ2h0OiBAbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyBDb21wb25lbnQgYWxpZ25tZW50XHJcbi8vXHJcbi8vIFJlcHVycG9zZSB0aGUgcHVsbCB1dGlsaXRpZXMgYXMgdGhlaXIgb3duIG5hdmJhciB1dGlsaXRpZXMgdG8gYXZvaWQgc3BlY2lmaWNpdHlcclxuLy8gaXNzdWVzIHdpdGggcGFyZW50cyBhbmQgY2hhaW5pbmcuIE9ubHkgZG8gdGhpcyB3aGVuIHRoZSBuYXZiYXIgaXMgdW5jb2xsYXBzZWRcclxuLy8gdGhvdWdoIHNvIHRoYXQgbmF2YmFyIGNvbnRlbnRzIHByb3Blcmx5IHN0YWNrIGFuZCBhbGlnbiBpbiBtb2JpbGUuXHJcbi8vXHJcbi8vIERlY2xhcmVkIGFmdGVyIHRoZSBuYXZiYXIgY29tcG9uZW50cyB0byBlbnN1cmUgbW9yZSBzcGVjaWZpY2l0eSBvbiB0aGUgbWFyZ2lucy5cclxuXHJcbkBtZWRpYSAobWluLXdpZHRoOiBAZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XHJcbiAgLm5hdmJhci1sZWZ0ICB7IC5wdWxsLWxlZnQoKTsgfVxyXG4gIC5uYXZiYXItcmlnaHQge1xyXG4gICAgLnB1bGwtcmlnaHQoKTtcclxuICAgIG1hcmdpbi1yaWdodDogLUBuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xyXG5cclxuICAgIH4gLm5hdmJhci1yaWdodCB7XHJcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyBBbHRlcm5hdGUgbmF2YmFyc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuLy8gRGVmYXVsdCBuYXZiYXJcclxuLm5hdmJhci1kZWZhdWx0IHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtYmc7XHJcbiAgYm9yZGVyLWNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtYm9yZGVyO1xyXG5cclxuICAubmF2YmFyLWJyYW5kIHtcclxuICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtYnJhbmQtY29sb3I7XHJcbiAgICAmOmhvdmVyLFxyXG4gICAgJjpmb2N1cyB7XHJcbiAgICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtYnJhbmQtaG92ZXItY29sb3I7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItZGVmYXVsdC1icmFuZC1ob3Zlci1iZztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5uYXZiYXItdGV4dCB7XHJcbiAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWNvbG9yO1xyXG4gIH1cclxuXHJcbiAgLm5hdmJhci1uYXYge1xyXG4gICAgPiBsaSA+IGEge1xyXG4gICAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstY29sb3I7XHJcblxyXG4gICAgICAmOmhvdmVyLFxyXG4gICAgICAmOmZvY3VzIHtcclxuICAgICAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItY29sb3I7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItYmc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgID4gLmFjdGl2ZSA+IGEge1xyXG4gICAgICAmLFxyXG4gICAgICAmOmhvdmVyLFxyXG4gICAgICAmOmZvY3VzIHtcclxuICAgICAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWNvbG9yO1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1iZztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgPiAuZGlzYWJsZWQgPiBhIHtcclxuICAgICAgJixcclxuICAgICAgJjpob3ZlcixcclxuICAgICAgJjpmb2N1cyB7XHJcbiAgICAgICAgY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWRpc2FibGVkLWNvbG9yO1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWRpc2FibGVkLWJnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAubmF2YmFyLXRvZ2dsZSB7XHJcbiAgICBib3JkZXItY29sb3I6IEBuYXZiYXItZGVmYXVsdC10b2dnbGUtYm9yZGVyLWNvbG9yO1xyXG4gICAgJjpob3ZlcixcclxuICAgICY6Zm9jdXMge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtdG9nZ2xlLWhvdmVyLWJnO1xyXG4gICAgfVxyXG4gICAgLmljb24tYmFyIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1kZWZhdWx0LXRvZ2dsZS1pY29uLWJhci1iZztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5uYXZiYXItY29sbGFwc2UsXHJcbiAgLm5hdmJhci1mb3JtIHtcclxuICAgIGJvcmRlci1jb2xvcjogQG5hdmJhci1kZWZhdWx0LWJvcmRlcjtcclxuICB9XHJcblxyXG4gIC8vIERyb3Bkb3duIG1lbnUgaXRlbXNcclxuICAubmF2YmFyLW5hdiB7XHJcbiAgICAvLyBSZW1vdmUgYmFja2dyb3VuZCBjb2xvciBmcm9tIG9wZW4gZHJvcGRvd25cclxuICAgID4gLm9wZW4gPiBhIHtcclxuICAgICAgJixcclxuICAgICAgJjpob3ZlcixcclxuICAgICAgJjpmb2N1cyB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWJnO1xyXG4gICAgICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1hY3RpdmUtY29sb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBAbWVkaWEgKG1heC13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludC1tYXgpIHtcclxuICAgICAgLy8gRHJvcGRvd25zIGdldCBjdXN0b20gZGlzcGxheSB3aGVuIGNvbGxhcHNlZFxyXG4gICAgICAub3BlbiAuZHJvcGRvd24tbWVudSB7XHJcbiAgICAgICAgPiBsaSA+IGEge1xyXG4gICAgICAgICAgY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yO1xyXG4gICAgICAgICAgJjpob3ZlcixcclxuICAgICAgICAgICY6Zm9jdXMge1xyXG4gICAgICAgICAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItY29sb3I7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWJnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICA+IC5hY3RpdmUgPiBhIHtcclxuICAgICAgICAgICYsXHJcbiAgICAgICAgICAmOmhvdmVyLFxyXG4gICAgICAgICAgJjpmb2N1cyB7XHJcbiAgICAgICAgICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1hY3RpdmUtY29sb3I7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1iZztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgPiAuZGlzYWJsZWQgPiBhIHtcclxuICAgICAgICAgICYsXHJcbiAgICAgICAgICAmOmhvdmVyLFxyXG4gICAgICAgICAgJjpmb2N1cyB7XHJcbiAgICAgICAgICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1jb2xvcjtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstZGlzYWJsZWQtYmc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gTGlua3MgaW4gbmF2YmFyc1xyXG4gIC8vXHJcbiAgLy8gQWRkIGEgY2xhc3MgdG8gZW5zdXJlIGxpbmtzIG91dHNpZGUgdGhlIG5hdmJhciBuYXYgYXJlIGNvbG9yZWQgY29ycmVjdGx5LlxyXG5cclxuICAubmF2YmFyLWxpbmsge1xyXG4gICAgY29sb3I6IEBuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yO1xyXG4gICAgJjpob3ZlciB7XHJcbiAgICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1ob3Zlci1jb2xvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5idG4tbGluayB7XHJcbiAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstY29sb3I7XHJcbiAgICAmOmhvdmVyLFxyXG4gICAgJjpmb2N1cyB7XHJcbiAgICAgIGNvbG9yOiBAbmF2YmFyLWRlZmF1bHQtbGluay1ob3Zlci1jb2xvcjtcclxuICAgIH1cclxuICAgICZbZGlzYWJsZWRdLFxyXG4gICAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xyXG4gICAgICAmOmhvdmVyLFxyXG4gICAgICAmOmZvY3VzIHtcclxuICAgICAgICBjb2xvcjogQG5hdmJhci1kZWZhdWx0LWxpbmstZGlzYWJsZWQtY29sb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8vIEludmVyc2UgbmF2YmFyXHJcblxyXG4ubmF2YmFyLWludmVyc2Uge1xyXG4gIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItaW52ZXJzZS1iZztcclxuICBib3JkZXItY29sb3I6IEBuYXZiYXItaW52ZXJzZS1ib3JkZXI7XHJcblxyXG4gIC5uYXZiYXItYnJhbmQge1xyXG4gICAgY29sb3I6IEBuYXZiYXItaW52ZXJzZS1icmFuZC1jb2xvcjtcclxuICAgICY6aG92ZXIsXHJcbiAgICAmOmZvY3VzIHtcclxuICAgICAgY29sb3I6IEBuYXZiYXItaW52ZXJzZS1icmFuZC1ob3Zlci1jb2xvcjtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1pbnZlcnNlLWJyYW5kLWhvdmVyLWJnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLm5hdmJhci10ZXh0IHtcclxuICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtY29sb3I7XHJcbiAgfVxyXG5cclxuICAubmF2YmFyLW5hdiB7XHJcbiAgICA+IGxpID4gYSB7XHJcbiAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1jb2xvcjtcclxuXHJcbiAgICAgICY6aG92ZXIsXHJcbiAgICAgICY6Zm9jdXMge1xyXG4gICAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1jb2xvcjtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1iZztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgPiAuYWN0aXZlID4gYSB7XHJcbiAgICAgICYsXHJcbiAgICAgICY6aG92ZXIsXHJcbiAgICAgICY6Zm9jdXMge1xyXG4gICAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtY29sb3I7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWJnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICA+IC5kaXNhYmxlZCA+IGEge1xyXG4gICAgICAmLFxyXG4gICAgICAmOmhvdmVyLFxyXG4gICAgICAmOmZvY3VzIHtcclxuICAgICAgICBjb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtY29sb3I7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtYmc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIERhcmtlbiB0aGUgcmVzcG9uc2l2ZSBuYXYgdG9nZ2xlXHJcbiAgLm5hdmJhci10b2dnbGUge1xyXG4gICAgYm9yZGVyLWNvbG9yOiBAbmF2YmFyLWludmVyc2UtdG9nZ2xlLWJvcmRlci1jb2xvcjtcclxuICAgICY6aG92ZXIsXHJcbiAgICAmOmZvY3VzIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1pbnZlcnNlLXRvZ2dsZS1ob3Zlci1iZztcclxuICAgIH1cclxuICAgIC5pY29uLWJhciB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItaW52ZXJzZS10b2dnbGUtaWNvbi1iYXItYmc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAubmF2YmFyLWNvbGxhcHNlLFxyXG4gIC5uYXZiYXItZm9ybSB7XHJcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbihAbmF2YmFyLWludmVyc2UtYmcsIDclKTtcclxuICB9XHJcblxyXG4gIC8vIERyb3Bkb3duc1xyXG4gIC5uYXZiYXItbmF2IHtcclxuICAgID4gLm9wZW4gPiBhIHtcclxuICAgICAgJixcclxuICAgICAgJjpob3ZlcixcclxuICAgICAgJjpmb2N1cyB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWJnO1xyXG4gICAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtY29sb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBAbWVkaWEgKG1heC13aWR0aDogQGdyaWQtZmxvYXQtYnJlYWtwb2ludC1tYXgpIHtcclxuICAgICAgLy8gRHJvcGRvd25zIGdldCBjdXN0b20gZGlzcGxheVxyXG4gICAgICAub3BlbiAuZHJvcGRvd24tbWVudSB7XHJcbiAgICAgICAgPiAuZHJvcGRvd24taGVhZGVyIHtcclxuICAgICAgICAgIGJvcmRlci1jb2xvcjogQG5hdmJhci1pbnZlcnNlLWJvcmRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLmRpdmlkZXIge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1pbnZlcnNlLWJvcmRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgPiBsaSA+IGEge1xyXG4gICAgICAgICAgY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWNvbG9yO1xyXG4gICAgICAgICAgJjpob3ZlcixcclxuICAgICAgICAgICY6Zm9jdXMge1xyXG4gICAgICAgICAgICBjb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItY29sb3I7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWJnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICA+IC5hY3RpdmUgPiBhIHtcclxuICAgICAgICAgICYsXHJcbiAgICAgICAgICAmOmhvdmVyLFxyXG4gICAgICAgICAgJjpmb2N1cyB7XHJcbiAgICAgICAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtY29sb3I7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWFjdGl2ZS1iZztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgPiAuZGlzYWJsZWQgPiBhIHtcclxuICAgICAgICAgICYsXHJcbiAgICAgICAgICAmOmhvdmVyLFxyXG4gICAgICAgICAgJjpmb2N1cyB7XHJcbiAgICAgICAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1kaXNhYmxlZC1jb2xvcjtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtYmc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAubmF2YmFyLWxpbmsge1xyXG4gICAgY29sb3I6IEBuYXZiYXItaW52ZXJzZS1saW5rLWNvbG9yO1xyXG4gICAgJjpob3ZlciB7XHJcbiAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1jb2xvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5idG4tbGluayB7XHJcbiAgICBjb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstY29sb3I7XHJcbiAgICAmOmhvdmVyLFxyXG4gICAgJjpmb2N1cyB7XHJcbiAgICAgIGNvbG9yOiBAbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1jb2xvcjtcclxuICAgIH1cclxuICAgICZbZGlzYWJsZWRdLFxyXG4gICAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xyXG4gICAgICAmOmhvdmVyLFxyXG4gICAgICAmOmZvY3VzIHtcclxuICAgICAgICBjb2xvcjogQG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtY29sb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiLy8gTmF2YmFyIHZlcnRpY2FsIGFsaWduXHJcbi8vXHJcbi8vIFZlcnRpY2FsbHkgY2VudGVyIGVsZW1lbnRzIGluIHRoZSBuYXZiYXIuXHJcbi8vIEV4YW1wbGU6IGFuIGVsZW1lbnQgaGFzIGEgaGVpZ2h0IG9mIDMwcHgsIHNvIHdyaXRlIG91dCBgLm5hdmJhci12ZXJ0aWNhbC1hbGlnbigzMHB4KTtgIHRvIGNhbGN1bGF0ZSB0aGUgYXBwcm9wcmlhdGUgdG9wIG1hcmdpbi5cclxuXHJcbi5uYXZiYXItdmVydGljYWwtYWxpZ24oQGVsZW1lbnQtaGVpZ2h0KSB7XHJcbiAgbWFyZ2luLXRvcDogKChAbmF2YmFyLWhlaWdodCAtIEBlbGVtZW50LWhlaWdodCkgLyAyKTtcclxuICBtYXJnaW4tYm90dG9tOiAoKEBuYXZiYXItaGVpZ2h0IC0gQGVsZW1lbnQtaGVpZ2h0KSAvIDIpO1xyXG59XHJcbiIsIi8vXHJcbi8vIFV0aWxpdHkgY2xhc3Nlc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbi8vIEZsb2F0c1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4uY2xlYXJmaXgge1xyXG4gIC5jbGVhcmZpeCgpO1xyXG59XHJcbi5jZW50ZXItYmxvY2sge1xyXG4gIC5jZW50ZXItYmxvY2soKTtcclxufVxyXG4ucHVsbC1yaWdodCB7XHJcbiAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XHJcbn1cclxuLnB1bGwtbGVmdCB7XHJcbiAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcclxufVxyXG5cclxuXHJcbi8vIFRvZ2dsaW5nIGNvbnRlbnRcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuLy8gTm90ZTogRGVwcmVjYXRlZCAuaGlkZSBpbiBmYXZvciBvZiAuaGlkZGVuIG9yIC5zci1vbmx5IChhcyBhcHByb3ByaWF0ZSkgaW4gdjMuMC4xXHJcbi5oaWRlIHtcclxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XHJcbn1cclxuLnNob3cge1xyXG4gIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XHJcbn1cclxuLmludmlzaWJsZSB7XHJcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG59XHJcbi50ZXh0LWhpZGUge1xyXG4gIC50ZXh0LWhpZGUoKTtcclxufVxyXG5cclxuXHJcbi8vIEhpZGUgZnJvbSBzY3JlZW5yZWFkZXJzIGFuZCBicm93c2Vyc1xyXG4vL1xyXG4vLyBDcmVkaXQ6IEhUTUw1IEJvaWxlcnBsYXRlXHJcblxyXG4uaGlkZGVuIHtcclxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcblxyXG4vLyBGb3IgQWZmaXggcGx1Z2luXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi5hZmZpeCB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG59XHJcbiIsIi8vXHJcbi8vIEJyZWFkY3J1bWJzXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuLmJyZWFkY3J1bWIge1xyXG4gIHBhZGRpbmc6IEBicmVhZGNydW1iLXBhZGRpbmctdmVydGljYWwgQGJyZWFkY3J1bWItcGFkZGluZy1ob3Jpem9udGFsO1xyXG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcclxuICBsaXN0LXN0eWxlOiBub25lO1xyXG4gIGJhY2tncm91bmQtY29sb3I6IEBicmVhZGNydW1iLWJnO1xyXG4gIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWJhc2U7XHJcblxyXG4gID4gbGkge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cclxuICAgICsgbGk6YmVmb3JlIHtcclxuICAgICAgY29udGVudDogXCJAe2JyZWFkY3J1bWItc2VwYXJhdG9yfVxcMDBhMFwiOyAvLyBVbmljb2RlIHNwYWNlIGFkZGVkIHNpbmNlIGlubGluZS1ibG9jayBtZWFucyBub24tY29sbGFwc2luZyB3aGl0ZS1zcGFjZVxyXG4gICAgICBwYWRkaW5nOiAwIDVweDtcclxuICAgICAgY29sb3I6IEBicmVhZGNydW1iLWNvbG9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgPiAuYWN0aXZlIHtcclxuICAgIGNvbG9yOiBAYnJlYWRjcnVtYi1hY3RpdmUtY29sb3I7XHJcbiAgfVxyXG59XHJcbiIsIi8vXHJcbi8vIFBhZ2luYXRpb24gKG11bHRpcGxlIHBhZ2VzKVxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4ucGFnaW5hdGlvbiB7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIHBhZGRpbmctbGVmdDogMDtcclxuICBtYXJnaW46IEBsaW5lLWhlaWdodC1jb21wdXRlZCAwO1xyXG4gIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWJhc2U7XHJcblxyXG4gID4gbGkge1xyXG4gICAgZGlzcGxheTogaW5saW5lOyAvLyBSZW1vdmUgbGlzdC1zdHlsZSBhbmQgYmxvY2stbGV2ZWwgZGVmYXVsdHNcclxuICAgID4gYSxcclxuICAgID4gc3BhbiB7XHJcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgZmxvYXQ6IGxlZnQ7IC8vIENvbGxhcHNlIHdoaXRlLXNwYWNlXHJcbiAgICAgIHBhZGRpbmc6IEBwYWRkaW5nLWJhc2UtdmVydGljYWwgQHBhZGRpbmctYmFzZS1ob3Jpem9udGFsO1xyXG4gICAgICBsaW5lLWhlaWdodDogQGxpbmUtaGVpZ2h0LWJhc2U7XHJcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgICAgY29sb3I6IEBwYWdpbmF0aW9uLWNvbG9yO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAcGFnaW5hdGlvbi1iZztcclxuICAgICAgYm9yZGVyOiAxcHggc29saWQgQHBhZ2luYXRpb24tYm9yZGVyO1xyXG4gICAgICBtYXJnaW4tbGVmdDogLTFweDtcclxuICAgIH1cclxuICAgICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICA+IGEsXHJcbiAgICAgID4gc3BhbiB7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XHJcbiAgICAgICAgLmJvcmRlci1sZWZ0LXJhZGl1cyhAYm9yZGVyLXJhZGl1cy1iYXNlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgJjpsYXN0LWNoaWxkIHtcclxuICAgICAgPiBhLFxyXG4gICAgICA+IHNwYW4ge1xyXG4gICAgICAgIC5ib3JkZXItcmlnaHQtcmFkaXVzKEBib3JkZXItcmFkaXVzLWJhc2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICA+IGxpID4gYSxcclxuICA+IGxpID4gc3BhbiB7XHJcbiAgICAmOmhvdmVyLFxyXG4gICAgJjpmb2N1cyB7XHJcbiAgICAgIHotaW5kZXg6IDM7XHJcbiAgICAgIGNvbG9yOiBAcGFnaW5hdGlvbi1ob3Zlci1jb2xvcjtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHBhZ2luYXRpb24taG92ZXItYmc7XHJcbiAgICAgIGJvcmRlci1jb2xvcjogQHBhZ2luYXRpb24taG92ZXItYm9yZGVyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgPiAuYWN0aXZlID4gYSxcclxuICA+IC5hY3RpdmUgPiBzcGFuIHtcclxuICAgICYsXHJcbiAgICAmOmhvdmVyLFxyXG4gICAgJjpmb2N1cyB7XHJcbiAgICAgIHotaW5kZXg6IDI7XHJcbiAgICAgIGNvbG9yOiBAcGFnaW5hdGlvbi1hY3RpdmUtY29sb3I7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBwYWdpbmF0aW9uLWFjdGl2ZS1iZztcclxuICAgICAgYm9yZGVyLWNvbG9yOiBAcGFnaW5hdGlvbi1hY3RpdmUtYm9yZGVyO1xyXG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICA+IC5kaXNhYmxlZCB7XHJcbiAgICA+IHNwYW4sXHJcbiAgICA+IHNwYW46aG92ZXIsXHJcbiAgICA+IHNwYW46Zm9jdXMsXHJcbiAgICA+IGEsXHJcbiAgICA+IGE6aG92ZXIsXHJcbiAgICA+IGE6Zm9jdXMge1xyXG4gICAgICBjb2xvcjogQHBhZ2luYXRpb24tZGlzYWJsZWQtY29sb3I7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBwYWdpbmF0aW9uLWRpc2FibGVkLWJnO1xyXG4gICAgICBib3JkZXItY29sb3I6IEBwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlcjtcclxuICAgICAgY3Vyc29yOiBAY3Vyc29yLWRpc2FibGVkO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLy8gU2l6aW5nXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vLyBMYXJnZVxyXG4ucGFnaW5hdGlvbi1sZyB7XHJcbiAgLnBhZ2luYXRpb24tc2l6ZShAcGFkZGluZy1sYXJnZS12ZXJ0aWNhbDsgQHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbDsgQGZvbnQtc2l6ZS1sYXJnZTsgQGxpbmUtaGVpZ2h0LWxhcmdlOyBAYm9yZGVyLXJhZGl1cy1sYXJnZSk7XHJcbn1cclxuXHJcbi8vIFNtYWxsXHJcbi5wYWdpbmF0aW9uLXNtIHtcclxuICAucGFnaW5hdGlvbi1zaXplKEBwYWRkaW5nLXNtYWxsLXZlcnRpY2FsOyBAcGFkZGluZy1zbWFsbC1ob3Jpem9udGFsOyBAZm9udC1zaXplLXNtYWxsOyBAbGluZS1oZWlnaHQtc21hbGw7IEBib3JkZXItcmFkaXVzLXNtYWxsKTtcclxufVxyXG4iLCIvLyBQYWdpbmF0aW9uXHJcblxyXG4ucGFnaW5hdGlvbi1zaXplKEBwYWRkaW5nLXZlcnRpY2FsOyBAcGFkZGluZy1ob3Jpem9udGFsOyBAZm9udC1zaXplOyBAbGluZS1oZWlnaHQ7IEBib3JkZXItcmFkaXVzKSB7XHJcbiAgPiBsaSB7XHJcbiAgICA+IGEsXHJcbiAgICA+IHNwYW4ge1xyXG4gICAgICBwYWRkaW5nOiBAcGFkZGluZy12ZXJ0aWNhbCBAcGFkZGluZy1ob3Jpem9udGFsO1xyXG4gICAgICBmb250LXNpemU6IEBmb250LXNpemU7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQ7XHJcbiAgICB9XHJcbiAgICAmOmZpcnN0LWNoaWxkIHtcclxuICAgICAgPiBhLFxyXG4gICAgICA+IHNwYW4ge1xyXG4gICAgICAgIC5ib3JkZXItbGVmdC1yYWRpdXMoQGJvcmRlci1yYWRpdXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAmOmxhc3QtY2hpbGQge1xyXG4gICAgICA+IGEsXHJcbiAgICAgID4gc3BhbiB7XHJcbiAgICAgICAgLmJvcmRlci1yaWdodC1yYWRpdXMoQGJvcmRlci1yYWRpdXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIi8vXHJcbi8vIFBhZ2VyIHBhZ2luYXRpb25cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4ucGFnZXIge1xyXG4gIHBhZGRpbmctbGVmdDogMDtcclxuICBtYXJnaW46IEBsaW5lLWhlaWdodC1jb21wdXRlZCAwO1xyXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICY6ZXh0ZW5kKC5jbGVhcmZpeCBhbGwpO1xyXG4gIGxpIHtcclxuICAgIGRpc3BsYXk6IGlubGluZTtcclxuICAgID4gYSxcclxuICAgID4gc3BhbiB7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgcGFkZGluZzogNXB4IDE0cHg7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBwYWdlci1iZztcclxuICAgICAgYm9yZGVyOiAxcHggc29saWQgQHBhZ2VyLWJvcmRlcjtcclxuICAgICAgYm9yZGVyLXJhZGl1czogQHBhZ2VyLWJvcmRlci1yYWRpdXM7XHJcbiAgICB9XHJcblxyXG4gICAgPiBhOmhvdmVyLFxyXG4gICAgPiBhOmZvY3VzIHtcclxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAcGFnZXItaG92ZXItYmc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAubmV4dCB7XHJcbiAgICA+IGEsXHJcbiAgICA+IHNwYW4ge1xyXG4gICAgICBmbG9hdDogcmlnaHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAucHJldmlvdXMge1xyXG4gICAgPiBhLFxyXG4gICAgPiBzcGFuIHtcclxuICAgICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAuZGlzYWJsZWQge1xyXG4gICAgPiBhLFxyXG4gICAgPiBhOmhvdmVyLFxyXG4gICAgPiBhOmZvY3VzLFxyXG4gICAgPiBzcGFuIHtcclxuICAgICAgY29sb3I6IEBwYWdlci1kaXNhYmxlZC1jb2xvcjtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHBhZ2VyLWJnO1xyXG4gICAgICBjdXJzb3I6IEBjdXJzb3ItZGlzYWJsZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIi8vXHJcbi8vIExhYmVsc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuLmxhYmVsIHtcclxuICBkaXNwbGF5OiBpbmxpbmU7XHJcbiAgcGFkZGluZzogLjJlbSAuNmVtIC4zZW07XHJcbiAgZm9udC1zaXplOiA3NSU7XHJcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgY29sb3I6IEBsYWJlbC1jb2xvcjtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XHJcbiAgYm9yZGVyLXJhZGl1czogLjI1ZW07XHJcblxyXG4gIC8vIEFkZCBob3ZlciBlZmZlY3RzLCBidXQgb25seSBmb3IgbGlua3NcclxuICBhJiB7XHJcbiAgICAmOmhvdmVyLFxyXG4gICAgJjpmb2N1cyB7XHJcbiAgICAgIGNvbG9yOiBAbGFiZWwtbGluay1ob3Zlci1jb2xvcjtcclxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBFbXB0eSBsYWJlbHMgY29sbGFwc2UgYXV0b21hdGljYWxseSAobm90IGF2YWlsYWJsZSBpbiBJRTgpXHJcbiAgJjplbXB0eSB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG4gIH1cclxuXHJcbiAgLy8gUXVpY2sgZml4IGZvciBsYWJlbHMgaW4gYnV0dG9uc1xyXG4gIC5idG4gJiB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB0b3A6IC0xcHg7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBDb2xvcnNcclxuLy8gQ29udGV4dHVhbCB2YXJpYXRpb25zIChsaW5rZWQgbGFiZWxzIGdldCBkYXJrZXIgb24gOmhvdmVyKVxyXG5cclxuLmxhYmVsLWRlZmF1bHQge1xyXG4gIC5sYWJlbC12YXJpYW50KEBsYWJlbC1kZWZhdWx0LWJnKTtcclxufVxyXG5cclxuLmxhYmVsLXByaW1hcnkge1xyXG4gIC5sYWJlbC12YXJpYW50KEBsYWJlbC1wcmltYXJ5LWJnKTtcclxufVxyXG5cclxuLmxhYmVsLXN1Y2Nlc3Mge1xyXG4gIC5sYWJlbC12YXJpYW50KEBsYWJlbC1zdWNjZXNzLWJnKTtcclxufVxyXG5cclxuLmxhYmVsLWluZm8ge1xyXG4gIC5sYWJlbC12YXJpYW50KEBsYWJlbC1pbmZvLWJnKTtcclxufVxyXG5cclxuLmxhYmVsLXdhcm5pbmcge1xyXG4gIC5sYWJlbC12YXJpYW50KEBsYWJlbC13YXJuaW5nLWJnKTtcclxufVxyXG5cclxuLmxhYmVsLWRhbmdlciB7XHJcbiAgLmxhYmVsLXZhcmlhbnQoQGxhYmVsLWRhbmdlci1iZyk7XHJcbn1cclxuIiwiLy8gTGFiZWxzXHJcblxyXG4ubGFiZWwtdmFyaWFudChAY29sb3IpIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAY29sb3I7XHJcblxyXG4gICZbaHJlZl0ge1xyXG4gICAgJjpob3ZlcixcclxuICAgICY6Zm9jdXMge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oQGNvbG9yLCAxMCUpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCIvL1xyXG4vLyBCYWRnZXNcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4vLyBCYXNlIGNsYXNzXHJcbi5iYWRnZSB7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIG1pbi13aWR0aDogMTBweDtcclxuICBwYWRkaW5nOiAzcHggN3B4O1xyXG4gIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZS1zbWFsbDtcclxuICBmb250LXdlaWdodDogQGJhZGdlLWZvbnQtd2VpZ2h0O1xyXG4gIGNvbG9yOiBAYmFkZ2UtY29sb3I7XHJcbiAgbGluZS1oZWlnaHQ6IEBiYWRnZS1saW5lLWhlaWdodDtcclxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIGJhY2tncm91bmQtY29sb3I6IEBiYWRnZS1iZztcclxuICBib3JkZXItcmFkaXVzOiBAYmFkZ2UtYm9yZGVyLXJhZGl1cztcclxuXHJcbiAgLy8gRW1wdHkgYmFkZ2VzIGNvbGxhcHNlIGF1dG9tYXRpY2FsbHkgKG5vdCBhdmFpbGFibGUgaW4gSUU4KVxyXG4gICY6ZW1wdHkge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuICB9XHJcblxyXG4gIC8vIFF1aWNrIGZpeCBmb3IgYmFkZ2VzIGluIGJ1dHRvbnNcclxuICAuYnRuICYge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgdG9wOiAtMXB4O1xyXG4gIH1cclxuXHJcbiAgLmJ0bi14cyAmLFxyXG4gIC5idG4tZ3JvdXAteHMgPiAuYnRuICYge1xyXG4gICAgdG9wOiAwO1xyXG4gICAgcGFkZGluZzogMXB4IDVweDtcclxuICB9XHJcblxyXG4gIC8vIEhvdmVyIHN0YXRlLCBidXQgb25seSBmb3IgbGlua3NcclxuICBhJiB7XHJcbiAgICAmOmhvdmVyLFxyXG4gICAgJjpmb2N1cyB7XHJcbiAgICAgIGNvbG9yOiBAYmFkZ2UtbGluay1ob3Zlci1jb2xvcjtcclxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBBY2NvdW50IGZvciBiYWRnZXMgaW4gbmF2c1xyXG4gIC5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlID4gJixcclxuICAubmF2LXBpbGxzID4gLmFjdGl2ZSA+IGEgPiAmIHtcclxuICAgIGNvbG9yOiBAYmFkZ2UtYWN0aXZlLWNvbG9yO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGJhZGdlLWFjdGl2ZS1iZztcclxuICB9XHJcblxyXG4gIC5saXN0LWdyb3VwLWl0ZW0gPiAmIHtcclxuICAgIGZsb2F0OiByaWdodDtcclxuICB9XHJcblxyXG4gIC5saXN0LWdyb3VwLWl0ZW0gPiAmICsgJiB7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IDVweDtcclxuICB9XHJcblxyXG4gIC5uYXYtcGlsbHMgPiBsaSA+IGEgPiAmIHtcclxuICAgIG1hcmdpbi1sZWZ0OiAzcHg7XHJcbiAgfVxyXG59XHJcbiIsIi8vXHJcbi8vIEp1bWJvdHJvblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbi5qdW1ib3Ryb24ge1xyXG4gIHBhZGRpbmctdG9wOiAgICBAanVtYm90cm9uLXBhZGRpbmc7XHJcbiAgcGFkZGluZy1ib3R0b206IEBqdW1ib3Ryb24tcGFkZGluZztcclxuICBtYXJnaW4tYm90dG9tOiBAanVtYm90cm9uLXBhZGRpbmc7XHJcbiAgY29sb3I6IEBqdW1ib3Ryb24tY29sb3I7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogQGp1bWJvdHJvbi1iZztcclxuXHJcbiAgaDEsXHJcbiAgLmgxIHtcclxuICAgIGNvbG9yOiBAanVtYm90cm9uLWhlYWRpbmctY29sb3I7XHJcbiAgfVxyXG5cclxuICBwIHtcclxuICAgIG1hcmdpbi1ib3R0b206IChAanVtYm90cm9uLXBhZGRpbmcgLyAyKTtcclxuICAgIGZvbnQtc2l6ZTogQGp1bWJvdHJvbi1mb250LXNpemU7XHJcbiAgICBmb250LXdlaWdodDogMjAwO1xyXG4gIH1cclxuXHJcbiAgPiBociB7XHJcbiAgICBib3JkZXItdG9wLWNvbG9yOiBkYXJrZW4oQGp1bWJvdHJvbi1iZywgMTAlKTtcclxuICB9XHJcblxyXG4gIC5jb250YWluZXIgJixcclxuICAuY29udGFpbmVyLWZsdWlkICYge1xyXG4gICAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtbGFyZ2U7IC8vIE9ubHkgcm91bmQgY29ybmVycyBhdCBoaWdoZXIgcmVzb2x1dGlvbnMgaWYgY29udGFpbmVkIGluIGEgY29udGFpbmVyXHJcbiAgfVxyXG5cclxuICAuY29udGFpbmVyIHtcclxuICAgIG1heC13aWR0aDogMTAwJTtcclxuICB9XHJcblxyXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSB7XHJcbiAgICBwYWRkaW5nLXRvcDogICAgKEBqdW1ib3Ryb24tcGFkZGluZyAqIDEuNik7XHJcbiAgICBwYWRkaW5nLWJvdHRvbTogKEBqdW1ib3Ryb24tcGFkZGluZyAqIDEuNik7XHJcblxyXG4gICAgLmNvbnRhaW5lciAmLFxyXG4gICAgLmNvbnRhaW5lci1mbHVpZCAmIHtcclxuICAgICAgcGFkZGluZy1sZWZ0OiAgKEBqdW1ib3Ryb24tcGFkZGluZyAqIDIpO1xyXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAoQGp1bWJvdHJvbi1wYWRkaW5nICogMik7XHJcbiAgICB9XHJcblxyXG4gICAgaDEsXHJcbiAgICAuaDEge1xyXG4gICAgICBmb250LXNpemU6IEBqdW1ib3Ryb24taGVhZGluZy1mb250LXNpemU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIi8vXHJcbi8vIFRodW1ibmFpbHNcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4vLyBNaXhpbiBhbmQgYWRqdXN0IHRoZSByZWd1bGFyIGltYWdlIGNsYXNzXHJcbi50aHVtYm5haWwge1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIHBhZGRpbmc6IEB0aHVtYm5haWwtcGFkZGluZztcclxuICBtYXJnaW4tYm90dG9tOiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XHJcbiAgbGluZS1oZWlnaHQ6IEBsaW5lLWhlaWdodC1iYXNlO1xyXG4gIGJhY2tncm91bmQtY29sb3I6IEB0aHVtYm5haWwtYmc7XHJcbiAgYm9yZGVyOiAxcHggc29saWQgQHRodW1ibmFpbC1ib3JkZXI7XHJcbiAgYm9yZGVyLXJhZGl1czogQHRodW1ibmFpbC1ib3JkZXItcmFkaXVzO1xyXG4gIC50cmFuc2l0aW9uKGJvcmRlciAuMnMgZWFzZS1pbi1vdXQpO1xyXG5cclxuICA+IGltZyxcclxuICBhID4gaW1nIHtcclxuICAgICY6ZXh0ZW5kKC5pbWctcmVzcG9uc2l2ZSk7XHJcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcclxuICAgIG1hcmdpbi1yaWdodDogYXV0bztcclxuICB9XHJcblxyXG4gIC8vIEFkZCBhIGhvdmVyIHN0YXRlIGZvciBsaW5rZWQgdmVyc2lvbnMgb25seVxyXG4gIGEmOmhvdmVyLFxyXG4gIGEmOmZvY3VzLFxyXG4gIGEmLmFjdGl2ZSB7XHJcbiAgICBib3JkZXItY29sb3I6IEBsaW5rLWNvbG9yO1xyXG4gIH1cclxuXHJcbiAgLy8gSW1hZ2UgY2FwdGlvbnNcclxuICAuY2FwdGlvbiB7XHJcbiAgICBwYWRkaW5nOiBAdGh1bWJuYWlsLWNhcHRpb24tcGFkZGluZztcclxuICAgIGNvbG9yOiBAdGh1bWJuYWlsLWNhcHRpb24tY29sb3I7XHJcbiAgfVxyXG59XHJcbiIsIi8vXHJcbi8vIEFsZXJ0c1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbi8vIEJhc2Ugc3R5bGVzXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi5hbGVydCB7XHJcbiAgcGFkZGluZzogQGFsZXJ0LXBhZGRpbmc7XHJcbiAgbWFyZ2luLWJvdHRvbTogQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xyXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xyXG4gIGJvcmRlci1yYWRpdXM6IEBhbGVydC1ib3JkZXItcmFkaXVzO1xyXG5cclxuICAvLyBIZWFkaW5ncyBmb3IgbGFyZ2VyIGFsZXJ0c1xyXG4gIGg0IHtcclxuICAgIG1hcmdpbi10b3A6IDA7XHJcbiAgICAvLyBTcGVjaWZpZWQgZm9yIHRoZSBoNCB0byBwcmV2ZW50IGNvbmZsaWN0cyBvZiBjaGFuZ2luZyBAaGVhZGluZ3MtY29sb3JcclxuICAgIGNvbG9yOiBpbmhlcml0O1xyXG4gIH1cclxuXHJcbiAgLy8gUHJvdmlkZSBjbGFzcyBmb3IgbGlua3MgdGhhdCBtYXRjaCBhbGVydHNcclxuICAuYWxlcnQtbGluayB7XHJcbiAgICBmb250LXdlaWdodDogQGFsZXJ0LWxpbmstZm9udC13ZWlnaHQ7XHJcbiAgfVxyXG5cclxuICAvLyBJbXByb3ZlIGFsaWdubWVudCBhbmQgc3BhY2luZyBvZiBpbm5lciBjb250ZW50XHJcbiAgPiBwLFxyXG4gID4gdWwge1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcclxuICB9XHJcblxyXG4gID4gcCArIHAge1xyXG4gICAgbWFyZ2luLXRvcDogNXB4O1xyXG4gIH1cclxufVxyXG5cclxuLy8gRGlzbWlzc2libGUgYWxlcnRzXHJcbi8vXHJcbi8vIEV4cGFuZCB0aGUgcmlnaHQgcGFkZGluZyBhbmQgYWNjb3VudCBmb3IgdGhlIGNsb3NlIGJ1dHRvbidzIHBvc2l0aW9uaW5nLlxyXG5cclxuLmFsZXJ0LWRpc21pc3NhYmxlLCAvLyBUaGUgbWlzc3BlbGxlZCAuYWxlcnQtZGlzbWlzc2FibGUgd2FzIGRlcHJlY2F0ZWQgaW4gMy4yLjAuXHJcbi5hbGVydC1kaXNtaXNzaWJsZSB7XHJcbiAgcGFkZGluZy1yaWdodDogKEBhbGVydC1wYWRkaW5nICsgMjApO1xyXG5cclxuICAvLyBBZGp1c3QgY2xvc2UgbGluayBwb3NpdGlvblxyXG4gIC5jbG9zZSB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB0b3A6IC0ycHg7XHJcbiAgICByaWdodDogLTIxcHg7XHJcbiAgICBjb2xvcjogaW5oZXJpdDtcclxuICB9XHJcbn1cclxuXHJcbi8vIEFsdGVybmF0ZSBzdHlsZXNcclxuLy9cclxuLy8gR2VuZXJhdGUgY29udGV4dHVhbCBtb2RpZmllciBjbGFzc2VzIGZvciBjb2xvcml6aW5nIHRoZSBhbGVydC5cclxuXHJcbi5hbGVydC1zdWNjZXNzIHtcclxuICAuYWxlcnQtdmFyaWFudChAYWxlcnQtc3VjY2Vzcy1iZzsgQGFsZXJ0LXN1Y2Nlc3MtYm9yZGVyOyBAYWxlcnQtc3VjY2Vzcy10ZXh0KTtcclxufVxyXG5cclxuLmFsZXJ0LWluZm8ge1xyXG4gIC5hbGVydC12YXJpYW50KEBhbGVydC1pbmZvLWJnOyBAYWxlcnQtaW5mby1ib3JkZXI7IEBhbGVydC1pbmZvLXRleHQpO1xyXG59XHJcblxyXG4uYWxlcnQtd2FybmluZyB7XHJcbiAgLmFsZXJ0LXZhcmlhbnQoQGFsZXJ0LXdhcm5pbmctYmc7IEBhbGVydC13YXJuaW5nLWJvcmRlcjsgQGFsZXJ0LXdhcm5pbmctdGV4dCk7XHJcbn1cclxuXHJcbi5hbGVydC1kYW5nZXIge1xyXG4gIC5hbGVydC12YXJpYW50KEBhbGVydC1kYW5nZXItYmc7IEBhbGVydC1kYW5nZXItYm9yZGVyOyBAYWxlcnQtZGFuZ2VyLXRleHQpO1xyXG59XHJcbiIsIi8vIEFsZXJ0c1xyXG5cclxuLmFsZXJ0LXZhcmlhbnQoQGJhY2tncm91bmQ7IEBib3JkZXI7IEB0ZXh0LWNvbG9yKSB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogQGJhY2tncm91bmQ7XHJcbiAgYm9yZGVyLWNvbG9yOiBAYm9yZGVyO1xyXG4gIGNvbG9yOiBAdGV4dC1jb2xvcjtcclxuXHJcbiAgaHIge1xyXG4gICAgYm9yZGVyLXRvcC1jb2xvcjogZGFya2VuKEBib3JkZXIsIDUlKTtcclxuICB9XHJcbiAgLmFsZXJ0LWxpbmsge1xyXG4gICAgY29sb3I6IGRhcmtlbihAdGV4dC1jb2xvciwgMTAlKTtcclxuICB9XHJcbn1cclxuIiwiLy9cclxuLy8gUHJvZ3Jlc3MgYmFyc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbi8vIEJhciBhbmltYXRpb25zXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi8vIFdlYktpdFxyXG5ALXdlYmtpdC1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXMge1xyXG4gIGZyb20gIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogNDBweCAwOyB9XHJcbiAgdG8gICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH1cclxufVxyXG5cclxuLy8gU3BlYyBhbmQgSUUxMCtcclxuQGtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlcyB7XHJcbiAgZnJvbSAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA0MHB4IDA7IH1cclxuICB0byAgICB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfVxyXG59XHJcblxyXG5cclxuLy8gQmFyIGl0c2VsZlxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vLyBPdXRlciBjb250YWluZXJcclxuLnByb2dyZXNzIHtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIGhlaWdodDogQGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xyXG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAcHJvZ3Jlc3MtYmc7XHJcbiAgYm9yZGVyLXJhZGl1czogQHByb2dyZXNzLWJvcmRlci1yYWRpdXM7XHJcbiAgLmJveC1zaGFkb3coaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsLjEpKTtcclxufVxyXG5cclxuLy8gQmFyIG9mIHByb2dyZXNzXHJcbi5wcm9ncmVzcy1iYXIge1xyXG4gIGZsb2F0OiBsZWZ0O1xyXG4gIHdpZHRoOiAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgZm9udC1zaXplOiBAZm9udC1zaXplLXNtYWxsO1xyXG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XHJcbiAgY29sb3I6IEBwcm9ncmVzcy1iYXItY29sb3I7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIGJhY2tncm91bmQtY29sb3I6IEBwcm9ncmVzcy1iYXItYmc7XHJcbiAgLmJveC1zaGFkb3coaW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwuMTUpKTtcclxuICAudHJhbnNpdGlvbih3aWR0aCAuNnMgZWFzZSk7XHJcbn1cclxuXHJcbi8vIFN0cmlwZWQgYmFyc1xyXG4vL1xyXG4vLyBgLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhcmAgaXMgZGVwcmVjYXRlZCBhcyBvZiB2My4yLjAgaW4gZmF2b3Igb2YgdGhlXHJcbi8vIGAucHJvZ3Jlc3MtYmFyLXN0cmlwZWRgIGNsYXNzLCB3aGljaCB5b3UganVzdCBhZGQgdG8gYW4gZXhpc3RpbmdcclxuLy8gYC5wcm9ncmVzcy1iYXJgLlxyXG4ucHJvZ3Jlc3Mtc3RyaXBlZCAucHJvZ3Jlc3MtYmFyLFxyXG4ucHJvZ3Jlc3MtYmFyLXN0cmlwZWQge1xyXG4gICNncmFkaWVudCA+IC5zdHJpcGVkKCk7XHJcbiAgYmFja2dyb3VuZC1zaXplOiA0MHB4IDQwcHg7XHJcbn1cclxuXHJcbi8vIENhbGwgYW5pbWF0aW9uIGZvciB0aGUgYWN0aXZlIG9uZVxyXG4vL1xyXG4vLyBgLnByb2dyZXNzLmFjdGl2ZSAucHJvZ3Jlc3MtYmFyYCBpcyBkZXByZWNhdGVkIGFzIG9mIHYzLjIuMCBpbiBmYXZvciBvZiB0aGVcclxuLy8gYC5wcm9ncmVzcy1iYXIuYWN0aXZlYCBhcHByb2FjaC5cclxuLnByb2dyZXNzLmFjdGl2ZSAucHJvZ3Jlc3MtYmFyLFxyXG4ucHJvZ3Jlc3MtYmFyLmFjdGl2ZSB7XHJcbiAgLmFuaW1hdGlvbihwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGUpO1xyXG59XHJcblxyXG5cclxuLy8gVmFyaWF0aW9uc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4ucHJvZ3Jlc3MtYmFyLXN1Y2Nlc3Mge1xyXG4gIC5wcm9ncmVzcy1iYXItdmFyaWFudChAcHJvZ3Jlc3MtYmFyLXN1Y2Nlc3MtYmcpO1xyXG59XHJcblxyXG4ucHJvZ3Jlc3MtYmFyLWluZm8ge1xyXG4gIC5wcm9ncmVzcy1iYXItdmFyaWFudChAcHJvZ3Jlc3MtYmFyLWluZm8tYmcpO1xyXG59XHJcblxyXG4ucHJvZ3Jlc3MtYmFyLXdhcm5pbmcge1xyXG4gIC5wcm9ncmVzcy1iYXItdmFyaWFudChAcHJvZ3Jlc3MtYmFyLXdhcm5pbmctYmcpO1xyXG59XHJcblxyXG4ucHJvZ3Jlc3MtYmFyLWRhbmdlciB7XHJcbiAgLnByb2dyZXNzLWJhci12YXJpYW50KEBwcm9ncmVzcy1iYXItZGFuZ2VyLWJnKTtcclxufVxyXG4iLCIvLyBHcmFkaWVudHNcclxuXHJcbiNncmFkaWVudCB7XHJcblxyXG4gIC8vIEhvcml6b250YWwgZ3JhZGllbnQsIGZyb20gbGVmdCB0byByaWdodFxyXG4gIC8vXHJcbiAgLy8gQ3JlYXRlcyB0d28gY29sb3Igc3RvcHMsIHN0YXJ0IGFuZCBlbmQsIGJ5IHNwZWNpZnlpbmcgYSBjb2xvciBhbmQgcG9zaXRpb24gZm9yIGVhY2ggY29sb3Igc3RvcC5cclxuICAvLyBDb2xvciBzdG9wcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBJRTkgYW5kIGJlbG93LlxyXG4gIC5ob3Jpem9udGFsKEBzdGFydC1jb2xvcjogIzU1NTsgQGVuZC1jb2xvcjogIzMzMzsgQHN0YXJ0LXBlcmNlbnQ6IDAlOyBAZW5kLXBlcmNlbnQ6IDEwMCUpIHtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGxlZnQsIEBzdGFydC1jb2xvciBAc3RhcnQtcGVyY2VudCwgQGVuZC1jb2xvciBAZW5kLXBlcmNlbnQpOyAvLyBTYWZhcmkgNS4xLTYsIENocm9tZSAxMCtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChsZWZ0LCBAc3RhcnQtY29sb3IgQHN0YXJ0LXBlcmNlbnQsIEBlbmQtY29sb3IgQGVuZC1wZXJjZW50KTsgLy8gT3BlcmEgMTJcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgQHN0YXJ0LWNvbG9yIEBzdGFydC1wZXJjZW50LCBAZW5kLWNvbG9yIEBlbmQtcGVyY2VudCk7IC8vIFN0YW5kYXJkLCBJRTEwLCBGaXJlZm94IDE2KywgT3BlcmEgMTIuMTArLCBTYWZhcmkgNyssIENocm9tZSAyNitcclxuICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcclxuICAgIGZpbHRlcjogZSglKFwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyVkJywgZW5kQ29sb3JzdHI9JyVkJywgR3JhZGllbnRUeXBlPTEpXCIsYXJnYihAc3RhcnQtY29sb3IpLGFyZ2IoQGVuZC1jb2xvcikpKTsgLy8gSUU5IGFuZCBkb3duXHJcbiAgfVxyXG5cclxuICAvLyBWZXJ0aWNhbCBncmFkaWVudCwgZnJvbSB0b3AgdG8gYm90dG9tXHJcbiAgLy9cclxuICAvLyBDcmVhdGVzIHR3byBjb2xvciBzdG9wcywgc3RhcnQgYW5kIGVuZCwgYnkgc3BlY2lmeWluZyBhIGNvbG9yIGFuZCBwb3NpdGlvbiBmb3IgZWFjaCBjb2xvciBzdG9wLlxyXG4gIC8vIENvbG9yIHN0b3BzIGFyZSBub3QgYXZhaWxhYmxlIGluIElFOSBhbmQgYmVsb3cuXHJcbiAgLnZlcnRpY2FsKEBzdGFydC1jb2xvcjogIzU1NTsgQGVuZC1jb2xvcjogIzMzMzsgQHN0YXJ0LXBlcmNlbnQ6IDAlOyBAZW5kLXBlcmNlbnQ6IDEwMCUpIHtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgQHN0YXJ0LWNvbG9yIEBzdGFydC1wZXJjZW50LCBAZW5kLWNvbG9yIEBlbmQtcGVyY2VudCk7ICAvLyBTYWZhcmkgNS4xLTYsIENocm9tZSAxMCtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsIEBzdGFydC1jb2xvciBAc3RhcnQtcGVyY2VudCwgQGVuZC1jb2xvciBAZW5kLXBlcmNlbnQpOyAgLy8gT3BlcmEgMTJcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIEBzdGFydC1jb2xvciBAc3RhcnQtcGVyY2VudCwgQGVuZC1jb2xvciBAZW5kLXBlcmNlbnQpOyAvLyBTdGFuZGFyZCwgSUUxMCwgRmlyZWZveCAxNissIE9wZXJhIDEyLjEwKywgU2FmYXJpIDcrLCBDaHJvbWUgMjYrXHJcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XHJcbiAgICBmaWx0ZXI6IGUoJShcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSclZCcsIGVuZENvbG9yc3RyPSclZCcsIEdyYWRpZW50VHlwZT0wKVwiLGFyZ2IoQHN0YXJ0LWNvbG9yKSxhcmdiKEBlbmQtY29sb3IpKSk7IC8vIElFOSBhbmQgZG93blxyXG4gIH1cclxuXHJcbiAgLmRpcmVjdGlvbmFsKEBzdGFydC1jb2xvcjogIzU1NTsgQGVuZC1jb2xvcjogIzMzMzsgQGRlZzogNDVkZWcpIHtcclxuICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KEBkZWcsIEBzdGFydC1jb2xvciwgQGVuZC1jb2xvcik7IC8vIFNhZmFyaSA1LjEtNiwgQ2hyb21lIDEwK1xyXG4gICAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KEBkZWcsIEBzdGFydC1jb2xvciwgQGVuZC1jb2xvcik7IC8vIE9wZXJhIDEyXHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoQGRlZywgQHN0YXJ0LWNvbG9yLCBAZW5kLWNvbG9yKTsgLy8gU3RhbmRhcmQsIElFMTAsIEZpcmVmb3ggMTYrLCBPcGVyYSAxMi4xMCssIFNhZmFyaSA3KywgQ2hyb21lIDI2K1xyXG4gIH1cclxuICAuaG9yaXpvbnRhbC10aHJlZS1jb2xvcnMoQHN0YXJ0LWNvbG9yOiAjMDBiM2VlOyBAbWlkLWNvbG9yOiAjN2E0M2I2OyBAY29sb3Itc3RvcDogNTAlOyBAZW5kLWNvbG9yOiAjYzMzMjVmKSB7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChsZWZ0LCBAc3RhcnQtY29sb3IsIEBtaWQtY29sb3IgQGNvbG9yLXN0b3AsIEBlbmQtY29sb3IpO1xyXG4gICAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KGxlZnQsIEBzdGFydC1jb2xvciwgQG1pZC1jb2xvciBAY29sb3Itc3RvcCwgQGVuZC1jb2xvcik7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIEBzdGFydC1jb2xvciwgQG1pZC1jb2xvciBAY29sb3Itc3RvcCwgQGVuZC1jb2xvcik7XHJcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xyXG4gICAgZmlsdGVyOiBlKCUoXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nJWQnLCBlbmRDb2xvcnN0cj0nJWQnLCBHcmFkaWVudFR5cGU9MSlcIixhcmdiKEBzdGFydC1jb2xvciksYXJnYihAZW5kLWNvbG9yKSkpOyAvLyBJRTkgYW5kIGRvd24sIGdldHMgbm8gY29sb3Itc3RvcCBhdCBhbGwgZm9yIHByb3BlciBmYWxsYmFja1xyXG4gIH1cclxuICAudmVydGljYWwtdGhyZWUtY29sb3JzKEBzdGFydC1jb2xvcjogIzAwYjNlZTsgQG1pZC1jb2xvcjogIzdhNDNiNjsgQGNvbG9yLXN0b3A6IDUwJTsgQGVuZC1jb2xvcjogI2MzMzI1Zikge1xyXG4gICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoQHN0YXJ0LWNvbG9yLCBAbWlkLWNvbG9yIEBjb2xvci1zdG9wLCBAZW5kLWNvbG9yKTtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChAc3RhcnQtY29sb3IsIEBtaWQtY29sb3IgQGNvbG9yLXN0b3AsIEBlbmQtY29sb3IpO1xyXG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KEBzdGFydC1jb2xvciwgQG1pZC1jb2xvciBAY29sb3Itc3RvcCwgQGVuZC1jb2xvcik7XHJcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xyXG4gICAgZmlsdGVyOiBlKCUoXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nJWQnLCBlbmRDb2xvcnN0cj0nJWQnLCBHcmFkaWVudFR5cGU9MClcIixhcmdiKEBzdGFydC1jb2xvciksYXJnYihAZW5kLWNvbG9yKSkpOyAvLyBJRTkgYW5kIGRvd24sIGdldHMgbm8gY29sb3Itc3RvcCBhdCBhbGwgZm9yIHByb3BlciBmYWxsYmFja1xyXG4gIH1cclxuICAucmFkaWFsKEBpbm5lci1jb2xvcjogIzU1NTsgQG91dGVyLWNvbG9yOiAjMzMzKSB7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LXJhZGlhbC1ncmFkaWVudChjaXJjbGUsIEBpbm5lci1jb2xvciwgQG91dGVyLWNvbG9yKTtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUsIEBpbm5lci1jb2xvciwgQG91dGVyLWNvbG9yKTtcclxuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XHJcbiAgfVxyXG4gIC5zdHJpcGVkKEBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwuMTUpOyBAYW5nbGU6IDQ1ZGVnKSB7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChAYW5nbGUsIEBjb2xvciAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCBAY29sb3IgNTAlLCBAY29sb3IgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChAYW5nbGUsIEBjb2xvciAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCBAY29sb3IgNTAlLCBAY29sb3IgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChAYW5nbGUsIEBjb2xvciAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCBAY29sb3IgNTAlLCBAY29sb3IgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcclxuICB9XHJcbn1cclxuIiwiLy8gUHJvZ3Jlc3MgYmFyc1xyXG5cclxuLnByb2dyZXNzLWJhci12YXJpYW50KEBjb2xvcikge1xyXG4gIGJhY2tncm91bmQtY29sb3I6IEBjb2xvcjtcclxuXHJcbiAgLy8gRGVwcmVjYXRlZCBwYXJlbnQgY2xhc3MgcmVxdWlyZW1lbnQgYXMgb2YgdjMuMi4wXHJcbiAgLnByb2dyZXNzLXN0cmlwZWQgJiB7XHJcbiAgICAjZ3JhZGllbnQgPiAuc3RyaXBlZCgpO1xyXG4gIH1cclxufVxyXG4iLCIubWVkaWEge1xyXG4gIC8vIFByb3BlciBzcGFjaW5nIGJldHdlZW4gaW5zdGFuY2VzIG9mIC5tZWRpYVxyXG4gIG1hcmdpbi10b3A6IDE1cHg7XHJcblxyXG4gICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgbWFyZ2luLXRvcDogMDtcclxuICB9XHJcbn1cclxuXHJcbi5tZWRpYSxcclxuLm1lZGlhLWJvZHkge1xyXG4gIHpvb206IDE7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxufVxyXG5cclxuLm1lZGlhLWJvZHkge1xyXG4gIHdpZHRoOiAxMDAwMHB4O1xyXG59XHJcblxyXG4ubWVkaWEtb2JqZWN0IHtcclxuICBkaXNwbGF5OiBibG9jaztcclxuXHJcbiAgLy8gRml4IGNvbGxhcHNlIGluIHdlYmtpdCBmcm9tIG1heC13aWR0aDogMTAwJSBhbmQgZGlzcGxheTogdGFibGUtY2VsbC5cclxuICAmLmltZy10aHVtYm5haWwge1xyXG4gICAgbWF4LXdpZHRoOiBub25lO1xyXG4gIH1cclxufVxyXG5cclxuLm1lZGlhLXJpZ2h0LFxyXG4ubWVkaWEgPiAucHVsbC1yaWdodCB7XHJcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xyXG59XHJcblxyXG4ubWVkaWEtbGVmdCxcclxuLm1lZGlhID4gLnB1bGwtbGVmdCB7XHJcbiAgcGFkZGluZy1yaWdodDogMTBweDtcclxufVxyXG5cclxuLm1lZGlhLWxlZnQsXHJcbi5tZWRpYS1yaWdodCxcclxuLm1lZGlhLWJvZHkge1xyXG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XHJcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcclxufVxyXG5cclxuLm1lZGlhLW1pZGRsZSB7XHJcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxufVxyXG5cclxuLm1lZGlhLWJvdHRvbSB7XHJcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcclxufVxyXG5cclxuLy8gUmVzZXQgbWFyZ2lucyBvbiBoZWFkaW5ncyBmb3IgdGlnaHRlciBkZWZhdWx0IHNwYWNpbmdcclxuLm1lZGlhLWhlYWRpbmcge1xyXG4gIG1hcmdpbi10b3A6IDA7XHJcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xyXG59XHJcblxyXG4vLyBNZWRpYSBsaXN0IHZhcmlhdGlvblxyXG4vL1xyXG4vLyBVbmRvIGRlZmF1bHQgdWwvb2wgc3R5bGVzXHJcbi5tZWRpYS1saXN0IHtcclxuICBwYWRkaW5nLWxlZnQ6IDA7XHJcbiAgbGlzdC1zdHlsZTogbm9uZTtcclxufVxyXG4iLCIvL1xyXG4vLyBMaXN0IGdyb3Vwc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbi8vIEJhc2UgY2xhc3NcclxuLy9cclxuLy8gRWFzaWx5IHVzYWJsZSBvbiA8dWw+LCA8b2w+LCBvciA8ZGl2Pi5cclxuXHJcbi5saXN0LWdyb3VwIHtcclxuICAvLyBObyBuZWVkIHRvIHNldCBsaXN0LXN0eWxlOiBub25lOyBzaW5jZSAubGlzdC1ncm91cC1pdGVtIGlzIGJsb2NrIGxldmVsXHJcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcclxuICBwYWRkaW5nLWxlZnQ6IDA7IC8vIHJlc2V0IHBhZGRpbmcgYmVjYXVzZSB1bCBhbmQgb2xcclxufVxyXG5cclxuXHJcbi8vIEluZGl2aWR1YWwgbGlzdCBpdGVtc1xyXG4vL1xyXG4vLyBVc2Ugb24gYGxpYHMgb3IgYGRpdmBzIHdpdGhpbiB0aGUgYC5saXN0LWdyb3VwYCBwYXJlbnQuXHJcblxyXG4ubGlzdC1ncm91cC1pdGVtIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgZGlzcGxheTogYmxvY2s7XHJcbiAgcGFkZGluZzogMTBweCAxNXB4O1xyXG4gIC8vIFBsYWNlIHRoZSBib3JkZXIgb24gdGhlIGxpc3QgaXRlbXMgYW5kIG5lZ2F0aXZlIG1hcmdpbiB1cCBmb3IgYmV0dGVyIHN0eWxpbmdcclxuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xyXG4gIGJhY2tncm91bmQtY29sb3I6IEBsaXN0LWdyb3VwLWJnO1xyXG4gIGJvcmRlcjogMXB4IHNvbGlkIEBsaXN0LWdyb3VwLWJvcmRlcjtcclxuXHJcbiAgLy8gUm91bmQgdGhlIGZpcnN0IGFuZCBsYXN0IGl0ZW1zXHJcbiAgJjpmaXJzdC1jaGlsZCB7XHJcbiAgICAuYm9yZGVyLXRvcC1yYWRpdXMoQGxpc3QtZ3JvdXAtYm9yZGVyLXJhZGl1cyk7XHJcbiAgfVxyXG4gICY6bGFzdC1jaGlsZCB7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xyXG4gICAgLmJvcmRlci1ib3R0b20tcmFkaXVzKEBsaXN0LWdyb3VwLWJvcmRlci1yYWRpdXMpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIEludGVyYWN0aXZlIGxpc3QgaXRlbXNcclxuLy9cclxuLy8gVXNlIGFuY2hvciBvciBidXR0b24gZWxlbWVudHMgaW5zdGVhZCBvZiBgbGlgcyBvciBgZGl2YHMgdG8gY3JlYXRlIGludGVyYWN0aXZlIGl0ZW1zLlxyXG4vLyBJbmNsdWRlcyBhbiBleHRyYSBgLmFjdGl2ZWAgbW9kaWZpZXIgY2xhc3MgZm9yIHNob3dpbmcgc2VsZWN0ZWQgaXRlbXMuXHJcblxyXG5hLmxpc3QtZ3JvdXAtaXRlbSxcclxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbSB7XHJcbiAgY29sb3I6IEBsaXN0LWdyb3VwLWxpbmstY29sb3I7XHJcblxyXG4gIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XHJcbiAgICBjb2xvcjogQGxpc3QtZ3JvdXAtbGluay1oZWFkaW5nLWNvbG9yO1xyXG4gIH1cclxuXHJcbiAgLy8gSG92ZXIgc3RhdGVcclxuICAmOmhvdmVyLFxyXG4gICY6Zm9jdXMge1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgY29sb3I6IEBsaXN0LWdyb3VwLWxpbmstaG92ZXItY29sb3I7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAbGlzdC1ncm91cC1ob3Zlci1iZztcclxuICB9XHJcbn1cclxuXHJcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0ge1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIHRleHQtYWxpZ246IGxlZnQ7XHJcbn1cclxuXHJcbi5saXN0LWdyb3VwLWl0ZW0ge1xyXG4gIC8vIERpc2FibGVkIHN0YXRlXHJcbiAgJi5kaXNhYmxlZCxcclxuICAmLmRpc2FibGVkOmhvdmVyLFxyXG4gICYuZGlzYWJsZWQ6Zm9jdXMge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGxpc3QtZ3JvdXAtZGlzYWJsZWQtYmc7XHJcbiAgICBjb2xvcjogQGxpc3QtZ3JvdXAtZGlzYWJsZWQtY29sb3I7XHJcbiAgICBjdXJzb3I6IEBjdXJzb3ItZGlzYWJsZWQ7XHJcblxyXG4gICAgLy8gRm9yY2UgY29sb3IgdG8gaW5oZXJpdCBmb3IgY3VzdG9tIGNvbnRlbnRcclxuICAgIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XHJcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xyXG4gICAgfVxyXG4gICAgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0IHtcclxuICAgICAgY29sb3I6IEBsaXN0LWdyb3VwLWRpc2FibGVkLXRleHQtY29sb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBBY3RpdmUgY2xhc3Mgb24gaXRlbSBpdHNlbGYsIG5vdCBwYXJlbnRcclxuICAmLmFjdGl2ZSxcclxuICAmLmFjdGl2ZTpob3ZlcixcclxuICAmLmFjdGl2ZTpmb2N1cyB7XHJcbiAgICB6LWluZGV4OiAyOyAvLyBQbGFjZSBhY3RpdmUgaXRlbXMgYWJvdmUgdGhlaXIgc2libGluZ3MgZm9yIHByb3BlciBib3JkZXIgc3R5bGluZ1xyXG4gICAgY29sb3I6IEBsaXN0LWdyb3VwLWFjdGl2ZS1jb2xvcjtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IEBsaXN0LWdyb3VwLWFjdGl2ZS1iZztcclxuICAgIGJvcmRlci1jb2xvcjogQGxpc3QtZ3JvdXAtYWN0aXZlLWJvcmRlcjtcclxuXHJcbiAgICAvLyBGb3JjZSBjb2xvciB0byBpbmhlcml0IGZvciBjdXN0b20gY29udGVudFxyXG4gICAgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxyXG4gICAgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nID4gc21hbGwsXHJcbiAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiAuc21hbGwge1xyXG4gICAgICBjb2xvcjogaW5oZXJpdDtcclxuICAgIH1cclxuICAgIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7XHJcbiAgICAgIGNvbG9yOiBAbGlzdC1ncm91cC1hY3RpdmUtdGV4dC1jb2xvcjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyBDb250ZXh0dWFsIHZhcmlhbnRzXHJcbi8vXHJcbi8vIEFkZCBtb2RpZmllciBjbGFzc2VzIHRvIGNoYW5nZSB0ZXh0IGFuZCBiYWNrZ3JvdW5kIGNvbG9yIG9uIGluZGl2aWR1YWwgaXRlbXMuXHJcbi8vIE9yZ2FuaXphdGlvbmFsbHksIHRoaXMgbXVzdCBjb21lIGFmdGVyIHRoZSBgOmhvdmVyYCBzdGF0ZXMuXHJcblxyXG4ubGlzdC1ncm91cC1pdGVtLXZhcmlhbnQoc3VjY2VzczsgQHN0YXRlLXN1Y2Nlc3MtYmc7IEBzdGF0ZS1zdWNjZXNzLXRleHQpO1xyXG4ubGlzdC1ncm91cC1pdGVtLXZhcmlhbnQoaW5mbzsgQHN0YXRlLWluZm8tYmc7IEBzdGF0ZS1pbmZvLXRleHQpO1xyXG4ubGlzdC1ncm91cC1pdGVtLXZhcmlhbnQod2FybmluZzsgQHN0YXRlLXdhcm5pbmctYmc7IEBzdGF0ZS13YXJuaW5nLXRleHQpO1xyXG4ubGlzdC1ncm91cC1pdGVtLXZhcmlhbnQoZGFuZ2VyOyBAc3RhdGUtZGFuZ2VyLWJnOyBAc3RhdGUtZGFuZ2VyLXRleHQpO1xyXG5cclxuXHJcbi8vIEN1c3RvbSBjb250ZW50IG9wdGlvbnNcclxuLy9cclxuLy8gRXh0cmEgY2xhc3NlcyBmb3IgY3JlYXRpbmcgd2VsbC1mb3JtYXR0ZWQgY29udGVudCB3aXRoaW4gYC5saXN0LWdyb3VwLWl0ZW1gcy5cclxuXHJcbi5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XHJcbiAgbWFyZ2luLXRvcDogMDtcclxuICBtYXJnaW4tYm90dG9tOiA1cHg7XHJcbn1cclxuLmxpc3QtZ3JvdXAtaXRlbS10ZXh0IHtcclxuICBtYXJnaW4tYm90dG9tOiAwO1xyXG4gIGxpbmUtaGVpZ2h0OiAxLjM7XHJcbn1cclxuIiwiLy8gTGlzdCBHcm91cHNcclxuXHJcbi5saXN0LWdyb3VwLWl0ZW0tdmFyaWFudChAc3RhdGU7IEBiYWNrZ3JvdW5kOyBAY29sb3IpIHtcclxuICAubGlzdC1ncm91cC1pdGVtLUB7c3RhdGV9IHtcclxuICAgIGNvbG9yOiBAY29sb3I7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmFja2dyb3VuZDtcclxuXHJcbiAgICBhJixcclxuICAgIGJ1dHRvbiYge1xyXG4gICAgICBjb2xvcjogQGNvbG9yO1xyXG5cclxuICAgICAgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHtcclxuICAgICAgICBjb2xvcjogaW5oZXJpdDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJjpob3ZlcixcclxuICAgICAgJjpmb2N1cyB7XHJcbiAgICAgICAgY29sb3I6IEBjb2xvcjtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oQGJhY2tncm91bmQsIDUlKTtcclxuICAgICAgfVxyXG4gICAgICAmLmFjdGl2ZSxcclxuICAgICAgJi5hY3RpdmU6aG92ZXIsXHJcbiAgICAgICYuYWN0aXZlOmZvY3VzIHtcclxuICAgICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAY29sb3I7XHJcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBAY29sb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiLy9cclxuLy8gUGFuZWxzXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuLy8gQmFzZSBjbGFzc1xyXG4ucGFuZWwge1xyXG4gIG1hcmdpbi1ib3R0b206IEBsaW5lLWhlaWdodC1jb21wdXRlZDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAcGFuZWwtYmc7XHJcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XHJcbiAgYm9yZGVyLXJhZGl1czogQHBhbmVsLWJvcmRlci1yYWRpdXM7XHJcbiAgLmJveC1zaGFkb3coMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA1KSk7XHJcbn1cclxuXHJcbi8vIFBhbmVsIGNvbnRlbnRzXHJcbi5wYW5lbC1ib2R5IHtcclxuICBwYWRkaW5nOiBAcGFuZWwtYm9keS1wYWRkaW5nO1xyXG4gICY6ZXh0ZW5kKC5jbGVhcmZpeCBhbGwpO1xyXG59XHJcblxyXG4vLyBPcHRpb25hbCBoZWFkaW5nXHJcbi5wYW5lbC1oZWFkaW5nIHtcclxuICBwYWRkaW5nOiBAcGFuZWwtaGVhZGluZy1wYWRkaW5nO1xyXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcclxuICAuYm9yZGVyLXRvcC1yYWRpdXMoKEBwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSkpO1xyXG5cclxuICA+IC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIHtcclxuICAgIGNvbG9yOiBpbmhlcml0O1xyXG4gIH1cclxufVxyXG5cclxuLy8gV2l0aGluIGhlYWRpbmcsIHN0cmlwIGFueSBgaCpgIHRhZyBvZiBpdHMgZGVmYXVsdCBtYXJnaW5zIGZvciBzcGFjaW5nLlxyXG4ucGFuZWwtdGl0bGUge1xyXG4gIG1hcmdpbi10b3A6IDA7XHJcbiAgbWFyZ2luLWJvdHRvbTogMDtcclxuICBmb250LXNpemU6IGNlaWwoKEBmb250LXNpemUtYmFzZSAqIDEuMTI1KSk7XHJcbiAgY29sb3I6IGluaGVyaXQ7XHJcblxyXG4gID4gYSxcclxuICA+IHNtYWxsLFxyXG4gID4gLnNtYWxsLFxyXG4gID4gc21hbGwgPiBhLFxyXG4gID4gLnNtYWxsID4gYSB7XHJcbiAgICBjb2xvcjogaW5oZXJpdDtcclxuICB9XHJcbn1cclxuXHJcbi8vIE9wdGlvbmFsIGZvb3RlciAoc3RheXMgZ3JheSBpbiBldmVyeSBtb2RpZmllciBjbGFzcylcclxuLnBhbmVsLWZvb3RlciB7XHJcbiAgcGFkZGluZzogQHBhbmVsLWZvb3Rlci1wYWRkaW5nO1xyXG4gIGJhY2tncm91bmQtY29sb3I6IEBwYW5lbC1mb290ZXItYmc7XHJcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIEBwYW5lbC1pbm5lci1ib3JkZXI7XHJcbiAgLmJvcmRlci1ib3R0b20tcmFkaXVzKChAcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpKTtcclxufVxyXG5cclxuXHJcbi8vIExpc3QgZ3JvdXBzIGluIHBhbmVsc1xyXG4vL1xyXG4vLyBCeSBkZWZhdWx0LCBzcGFjZSBvdXQgbGlzdCBncm91cCBjb250ZW50IGZyb20gcGFuZWwgaGVhZGluZ3MgdG8gYWNjb3VudCBmb3JcclxuLy8gYW55IGtpbmQgb2YgY3VzdG9tIGNvbnRlbnQgYmV0d2VlbiB0aGUgdHdvLlxyXG5cclxuLnBhbmVsIHtcclxuICA+IC5saXN0LWdyb3VwLFxyXG4gID4gLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXAge1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcclxuXHJcbiAgICAubGlzdC1ncm91cC1pdGVtIHtcclxuICAgICAgYm9yZGVyLXdpZHRoOiAxcHggMDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgYm9yZGVyIHRvcCByYWRpdXMgZm9yIGZpcnN0IG9uZVxyXG4gICAgJjpmaXJzdC1jaGlsZCB7XHJcbiAgICAgIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgIGJvcmRlci10b3A6IDA7XHJcbiAgICAgICAgLmJvcmRlci10b3AtcmFkaXVzKChAcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCBib3JkZXIgYm90dG9tIHJhZGl1cyBmb3IgbGFzdCBvbmVcclxuICAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMDtcclxuICAgICAgICAuYm9yZGVyLWJvdHRvbS1yYWRpdXMoKEBwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gID4gLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAubGlzdC1ncm91cCB7XHJcbiAgICAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcclxuICAgICAgLmJvcmRlci10b3AtcmFkaXVzKDApO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4vLyBDb2xsYXBzZSBzcGFjZSBiZXR3ZWVuIHdoZW4gdGhlcmUncyBubyBhZGRpdGlvbmFsIGNvbnRlbnQuXHJcbi5wYW5lbC1oZWFkaW5nICsgLmxpc3QtZ3JvdXAge1xyXG4gIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xyXG4gICAgYm9yZGVyLXRvcC13aWR0aDogMDtcclxuICB9XHJcbn1cclxuLmxpc3QtZ3JvdXAgKyAucGFuZWwtZm9vdGVyIHtcclxuICBib3JkZXItdG9wLXdpZHRoOiAwO1xyXG59XHJcblxyXG4vLyBUYWJsZXMgaW4gcGFuZWxzXHJcbi8vXHJcbi8vIFBsYWNlIGEgbm9uLWJvcmRlcmVkIGAudGFibGVgIHdpdGhpbiBhIHBhbmVsIChub3Qgd2l0aGluIGEgYC5wYW5lbC1ib2R5YCkgYW5kXHJcbi8vIHdhdGNoIGl0IGdvIGZ1bGwgd2lkdGguXHJcblxyXG4ucGFuZWwge1xyXG4gID4gLnRhYmxlLFxyXG4gID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUsXHJcbiAgPiAucGFuZWwtY29sbGFwc2UgPiAudGFibGUge1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcclxuXHJcbiAgICBjYXB0aW9uIHtcclxuICAgICAgcGFkZGluZy1sZWZ0OiBAcGFuZWwtYm9keS1wYWRkaW5nO1xyXG4gICAgICBwYWRkaW5nLXJpZ2h0OiBAcGFuZWwtYm9keS1wYWRkaW5nO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyBBZGQgYm9yZGVyIHRvcCByYWRpdXMgZm9yIGZpcnN0IG9uZVxyXG4gID4gLnRhYmxlOmZpcnN0LWNoaWxkLFxyXG4gID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQge1xyXG4gICAgLmJvcmRlci10b3AtcmFkaXVzKChAcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpKTtcclxuXHJcbiAgICA+IHRoZWFkOmZpcnN0LWNoaWxkLFxyXG4gICAgPiB0Ym9keTpmaXJzdC1jaGlsZCB7XHJcbiAgICAgID4gdHI6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IChAcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpO1xyXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAoQHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKTtcclxuXHJcbiAgICAgICAgdGQ6Zmlyc3QtY2hpbGQsXHJcbiAgICAgICAgdGg6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogKEBwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRkOmxhc3QtY2hpbGQsXHJcbiAgICAgICAgdGg6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogKEBwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIEFkZCBib3JkZXIgYm90dG9tIHJhZGl1cyBmb3IgbGFzdCBvbmVcclxuICA+IC50YWJsZTpsYXN0LWNoaWxkLFxyXG4gID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkIHtcclxuICAgIC5ib3JkZXItYm90dG9tLXJhZGl1cygoQHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKSk7XHJcblxyXG4gICAgPiB0Ym9keTpsYXN0LWNoaWxkLFxyXG4gICAgPiB0Zm9vdDpsYXN0LWNoaWxkIHtcclxuICAgICAgPiB0cjpsYXN0LWNoaWxkIHtcclxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAoQHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKTtcclxuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogKEBwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSk7XHJcblxyXG4gICAgICAgIHRkOmZpcnN0LWNoaWxkLFxyXG4gICAgICAgIHRoOmZpcnN0LWNoaWxkIHtcclxuICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IChAcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZDpsYXN0LWNoaWxkLFxyXG4gICAgICAgIHRoOmxhc3QtY2hpbGQge1xyXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IChAcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICA+IC5wYW5lbC1ib2R5ICsgLnRhYmxlLFxyXG4gID4gLnBhbmVsLWJvZHkgKyAudGFibGUtcmVzcG9uc2l2ZSxcclxuICA+IC50YWJsZSArIC5wYW5lbC1ib2R5LFxyXG4gID4gLnRhYmxlLXJlc3BvbnNpdmUgKyAucGFuZWwtYm9keSB7XHJcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgQHRhYmxlLWJvcmRlci1jb2xvcjtcclxuICB9XHJcbiAgPiAudGFibGUgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoLFxyXG4gID4gLnRhYmxlID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0ZCB7XHJcbiAgICBib3JkZXItdG9wOiAwO1xyXG4gIH1cclxuICA+IC50YWJsZS1ib3JkZXJlZCxcclxuICA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkIHtcclxuICAgIGJvcmRlcjogMDtcclxuICAgID4gdGhlYWQsXHJcbiAgICA+IHRib2R5LFxyXG4gICAgPiB0Zm9vdCB7XHJcbiAgICAgID4gdHIge1xyXG4gICAgICAgID4gdGg6Zmlyc3QtY2hpbGQsXHJcbiAgICAgICAgPiB0ZDpmaXJzdC1jaGlsZCB7XHJcbiAgICAgICAgICBib3JkZXItbGVmdDogMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgPiB0aDpsYXN0LWNoaWxkLFxyXG4gICAgICAgID4gdGQ6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICA+IHRoZWFkLFxyXG4gICAgPiB0Ym9keSB7XHJcbiAgICAgID4gdHI6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgID4gdGQsXHJcbiAgICAgICAgPiB0aCB7XHJcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgPiB0Ym9keSxcclxuICAgID4gdGZvb3Qge1xyXG4gICAgICA+IHRyOmxhc3QtY2hpbGQge1xyXG4gICAgICAgID4gdGQsXHJcbiAgICAgICAgPiB0aCB7XHJcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICA+IC50YWJsZS1yZXNwb25zaXZlIHtcclxuICAgIGJvcmRlcjogMDtcclxuICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gQ29sbGFwc2FibGUgcGFuZWxzIChha2EsIGFjY29yZGlvbilcclxuLy9cclxuLy8gV3JhcCBhIHNlcmllcyBvZiBwYW5lbHMgaW4gYC5wYW5lbC1ncm91cGAgdG8gdHVybiB0aGVtIGludG8gYW4gYWNjb3JkaW9uIHdpdGhcclxuLy8gdGhlIGhlbHAgb2Ygb3VyIGNvbGxhcHNlIEphdmFTY3JpcHQgcGx1Z2luLlxyXG5cclxuLnBhbmVsLWdyb3VwIHtcclxuICBtYXJnaW4tYm90dG9tOiBAbGluZS1oZWlnaHQtY29tcHV0ZWQ7XHJcblxyXG4gIC8vIFRpZ2h0ZW4gdXAgbWFyZ2luIHNvIGl0J3Mgb25seSBiZXR3ZWVuIHBhbmVsc1xyXG4gIC5wYW5lbCB7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xyXG4gICAgYm9yZGVyLXJhZGl1czogQHBhbmVsLWJvcmRlci1yYWRpdXM7XHJcblxyXG4gICAgKyAucGFuZWwge1xyXG4gICAgICBtYXJnaW4tdG9wOiA1cHg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAucGFuZWwtaGVhZGluZyB7XHJcbiAgICBib3JkZXItYm90dG9tOiAwO1xyXG5cclxuICAgICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHksXHJcbiAgICArIC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwIHtcclxuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIEBwYW5lbC1pbm5lci1ib3JkZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAucGFuZWwtZm9vdGVyIHtcclxuICAgIGJvcmRlci10b3A6IDA7XHJcbiAgICArIC5wYW5lbC1jb2xsYXBzZSAucGFuZWwtYm9keSB7XHJcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAcGFuZWwtaW5uZXItYm9yZGVyO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIENvbnRleHR1YWwgdmFyaWF0aW9uc1xyXG4ucGFuZWwtZGVmYXVsdCB7XHJcbiAgLnBhbmVsLXZhcmlhbnQoQHBhbmVsLWRlZmF1bHQtYm9yZGVyOyBAcGFuZWwtZGVmYXVsdC10ZXh0OyBAcGFuZWwtZGVmYXVsdC1oZWFkaW5nLWJnOyBAcGFuZWwtZGVmYXVsdC1ib3JkZXIpO1xyXG59XHJcbi5wYW5lbC1wcmltYXJ5IHtcclxuICAucGFuZWwtdmFyaWFudChAcGFuZWwtcHJpbWFyeS1ib3JkZXI7IEBwYW5lbC1wcmltYXJ5LXRleHQ7IEBwYW5lbC1wcmltYXJ5LWhlYWRpbmctYmc7IEBwYW5lbC1wcmltYXJ5LWJvcmRlcik7XHJcbn1cclxuLnBhbmVsLXN1Y2Nlc3Mge1xyXG4gIC5wYW5lbC12YXJpYW50KEBwYW5lbC1zdWNjZXNzLWJvcmRlcjsgQHBhbmVsLXN1Y2Nlc3MtdGV4dDsgQHBhbmVsLXN1Y2Nlc3MtaGVhZGluZy1iZzsgQHBhbmVsLXN1Y2Nlc3MtYm9yZGVyKTtcclxufVxyXG4ucGFuZWwtaW5mbyB7XHJcbiAgLnBhbmVsLXZhcmlhbnQoQHBhbmVsLWluZm8tYm9yZGVyOyBAcGFuZWwtaW5mby10ZXh0OyBAcGFuZWwtaW5mby1oZWFkaW5nLWJnOyBAcGFuZWwtaW5mby1ib3JkZXIpO1xyXG59XHJcbi5wYW5lbC13YXJuaW5nIHtcclxuICAucGFuZWwtdmFyaWFudChAcGFuZWwtd2FybmluZy1ib3JkZXI7IEBwYW5lbC13YXJuaW5nLXRleHQ7IEBwYW5lbC13YXJuaW5nLWhlYWRpbmctYmc7IEBwYW5lbC13YXJuaW5nLWJvcmRlcik7XHJcbn1cclxuLnBhbmVsLWRhbmdlciB7XHJcbiAgLnBhbmVsLXZhcmlhbnQoQHBhbmVsLWRhbmdlci1ib3JkZXI7IEBwYW5lbC1kYW5nZXItdGV4dDsgQHBhbmVsLWRhbmdlci1oZWFkaW5nLWJnOyBAcGFuZWwtZGFuZ2VyLWJvcmRlcik7XHJcbn1cclxuIiwiLy8gUGFuZWxzXHJcblxyXG4ucGFuZWwtdmFyaWFudChAYm9yZGVyOyBAaGVhZGluZy10ZXh0LWNvbG9yOyBAaGVhZGluZy1iZy1jb2xvcjsgQGhlYWRpbmctYm9yZGVyKSB7XHJcbiAgYm9yZGVyLWNvbG9yOiBAYm9yZGVyO1xyXG5cclxuICAmID4gLnBhbmVsLWhlYWRpbmcge1xyXG4gICAgY29sb3I6IEBoZWFkaW5nLXRleHQtY29sb3I7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAaGVhZGluZy1iZy1jb2xvcjtcclxuICAgIGJvcmRlci1jb2xvcjogQGhlYWRpbmctYm9yZGVyO1xyXG5cclxuICAgICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xyXG4gICAgICBib3JkZXItdG9wLWNvbG9yOiBAYm9yZGVyO1xyXG4gICAgfVxyXG4gICAgLmJhZGdlIHtcclxuICAgICAgY29sb3I6IEBoZWFkaW5nLWJnLWNvbG9yO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAaGVhZGluZy10ZXh0LWNvbG9yO1xyXG4gICAgfVxyXG4gIH1cclxuICAmID4gLnBhbmVsLWZvb3RlciB7XHJcbiAgICArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcclxuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogQGJvcmRlcjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiLy8gRW1iZWRzIHJlc3BvbnNpdmVcclxuLy9cclxuLy8gQ3JlZGl0OiBOaWNvbGFzIEdhbGxhZ2hlciBhbmQgU1VJVCBDU1MuXHJcblxyXG4uZW1iZWQtcmVzcG9uc2l2ZSB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG4gIGhlaWdodDogMDtcclxuICBwYWRkaW5nOiAwO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcblxyXG4gIC5lbWJlZC1yZXNwb25zaXZlLWl0ZW0sXHJcbiAgaWZyYW1lLFxyXG4gIGVtYmVkLFxyXG4gIG9iamVjdCxcclxuICB2aWRlbyB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBib3JkZXI6IDA7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBNb2RpZmllciBjbGFzcyBmb3IgMTY6OSBhc3BlY3QgcmF0aW9cclxuLmVtYmVkLXJlc3BvbnNpdmUtMTZieTkge1xyXG4gIHBhZGRpbmctYm90dG9tOiA1Ni4yNSU7XHJcbn1cclxuXHJcbi8vIE1vZGlmaWVyIGNsYXNzIGZvciA0OjMgYXNwZWN0IHJhdGlvXHJcbi5lbWJlZC1yZXNwb25zaXZlLTRieTMge1xyXG4gIHBhZGRpbmctYm90dG9tOiA3NSU7XHJcbn1cclxuIiwiLy9cclxuLy8gV2VsbHNcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4vLyBCYXNlIGNsYXNzXHJcbi53ZWxsIHtcclxuICBtaW4taGVpZ2h0OiAyMHB4O1xyXG4gIHBhZGRpbmc6IDE5cHg7XHJcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2VsbC1iZztcclxuICBib3JkZXI6IDFweCBzb2xpZCBAd2VsbC1ib3JkZXI7XHJcbiAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtYmFzZTtcclxuICAuYm94LXNoYWRvdyhpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDUpKTtcclxuICBibG9ja3F1b3RlIHtcclxuICAgIGJvcmRlci1jb2xvcjogI2RkZDtcclxuICAgIGJvcmRlci1jb2xvcjogcmdiYSgwLDAsMCwuMTUpO1xyXG4gIH1cclxufVxyXG5cclxuLy8gU2l6ZXNcclxuLndlbGwtbGcge1xyXG4gIHBhZGRpbmc6IDI0cHg7XHJcbiAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtbGFyZ2U7XHJcbn1cclxuLndlbGwtc20ge1xyXG4gIHBhZGRpbmc6IDlweDtcclxuICBib3JkZXItcmFkaXVzOiBAYm9yZGVyLXJhZGl1cy1zbWFsbDtcclxufVxyXG4iLCIvL1xyXG4vLyBDbG9zZSBpY29uc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbi5jbG9zZSB7XHJcbiAgZmxvYXQ6IHJpZ2h0O1xyXG4gIGZvbnQtc2l6ZTogKEBmb250LXNpemUtYmFzZSAqIDEuNSk7XHJcbiAgZm9udC13ZWlnaHQ6IEBjbG9zZS1mb250LXdlaWdodDtcclxuICBsaW5lLWhlaWdodDogMTtcclxuICBjb2xvcjogQGNsb3NlLWNvbG9yO1xyXG4gIHRleHQtc2hhZG93OiBAY2xvc2UtdGV4dC1zaGFkb3c7XHJcbiAgLm9wYWNpdHkoLjIpO1xyXG5cclxuICAmOmhvdmVyLFxyXG4gICY6Zm9jdXMge1xyXG4gICAgY29sb3I6IEBjbG9zZS1jb2xvcjtcclxuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIC5vcGFjaXR5KC41KTtcclxuICB9XHJcblxyXG4gIC8vIEFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgYnV0dG9uIHZlcnNpb25cclxuICAvLyBpT1MgcmVxdWlyZXMgdGhlIGJ1dHRvbiBlbGVtZW50IGluc3RlYWQgb2YgYW4gYW5jaG9yIHRhZy5cclxuICAvLyBJZiB5b3Ugd2FudCB0aGUgYW5jaG9yIHZlcnNpb24sIGl0IHJlcXVpcmVzIGBocmVmPVwiI1wiYC5cclxuICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL2NsaWNrI1NhZmFyaV9Nb2JpbGVcclxuICBidXR0b24mIHtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgIGJvcmRlcjogMDtcclxuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcclxuICB9XHJcbn1cclxuIiwiLy9cclxuLy8gTW9kYWxzXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vLyAubW9kYWwtb3BlbiAgICAgIC0gYm9keSBjbGFzcyBmb3Iga2lsbGluZyB0aGUgc2Nyb2xsXHJcbi8vIC5tb2RhbCAgICAgICAgICAgLSBjb250YWluZXIgdG8gc2Nyb2xsIHdpdGhpblxyXG4vLyAubW9kYWwtZGlhbG9nICAgIC0gcG9zaXRpb25pbmcgc2hlbGwgZm9yIHRoZSBhY3R1YWwgbW9kYWxcclxuLy8gLm1vZGFsLWNvbnRlbnQgICAtIGFjdHVhbCBtb2RhbCB3LyBiZyBhbmQgY29ybmVycyBhbmQgc2hpdFxyXG5cclxuLy8gS2lsbCB0aGUgc2Nyb2xsIG9uIHRoZSBib2R5XHJcbi5tb2RhbC1vcGVuIHtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG59XHJcblxyXG4vLyBDb250YWluZXIgdGhhdCB0aGUgbW9kYWwgc2Nyb2xscyB3aXRoaW5cclxuLm1vZGFsIHtcclxuICBkaXNwbGF5OiBub25lO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIHRvcDogMDtcclxuICByaWdodDogMDtcclxuICBib3R0b206IDA7XHJcbiAgbGVmdDogMDtcclxuICB6LWluZGV4OiBAemluZGV4LW1vZGFsO1xyXG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcclxuXHJcbiAgLy8gUHJldmVudCBDaHJvbWUgb24gV2luZG93cyBmcm9tIGFkZGluZyBhIGZvY3VzIG91dGxpbmUuIEZvciBkZXRhaWxzLCBzZWVcclxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8xMDk1MS5cclxuICBvdXRsaW5lOiAwO1xyXG5cclxuICAvLyBXaGVuIGZhZGluZyBpbiB0aGUgbW9kYWwsIGFuaW1hdGUgaXQgdG8gc2xpZGUgZG93blxyXG4gICYuZmFkZSAubW9kYWwtZGlhbG9nIHtcclxuICAgIC50cmFuc2xhdGUoMCwgLTI1JSk7XHJcbiAgICAudHJhbnNpdGlvbi10cmFuc2Zvcm0oflwiMC4zcyBlYXNlLW91dFwiKTtcclxuICB9XHJcbiAgJi5pbiAubW9kYWwtZGlhbG9nIHsgLnRyYW5zbGF0ZSgwLCAwKSB9XHJcbn1cclxuLm1vZGFsLW9wZW4gLm1vZGFsIHtcclxuICBvdmVyZmxvdy14OiBoaWRkZW47XHJcbiAgb3ZlcmZsb3cteTogYXV0bztcclxufVxyXG5cclxuLy8gU2hlbGwgZGl2IHRvIHBvc2l0aW9uIHRoZSBtb2RhbCB3aXRoIGJvdHRvbSBwYWRkaW5nXHJcbi5tb2RhbC1kaWFsb2cge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB3aWR0aDogYXV0bztcclxuICBtYXJnaW46IDEwcHg7XHJcbn1cclxuXHJcbi8vIEFjdHVhbCBtb2RhbFxyXG4ubW9kYWwtY29udGVudCB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIGJhY2tncm91bmQtY29sb3I6IEBtb2RhbC1jb250ZW50LWJnO1xyXG4gIGJvcmRlcjogMXB4IHNvbGlkIEBtb2RhbC1jb250ZW50LWZhbGxiYWNrLWJvcmRlci1jb2xvcjsgLy9vbGQgYnJvd3NlcnMgZmFsbGJhY2sgKGllOCBldGMpXHJcbiAgYm9yZGVyOiAxcHggc29saWQgQG1vZGFsLWNvbnRlbnQtYm9yZGVyLWNvbG9yO1xyXG4gIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWxhcmdlO1xyXG4gIC5ib3gtc2hhZG93KDAgM3B4IDlweCByZ2JhKDAsMCwwLC41KSk7XHJcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcclxuICAvLyBSZW1vdmUgZm9jdXMgb3V0bGluZSBmcm9tIG9wZW5lZCBtb2RhbFxyXG4gIG91dGxpbmU6IDA7XHJcbn1cclxuXHJcbi8vIE1vZGFsIGJhY2tncm91bmRcclxuLm1vZGFsLWJhY2tkcm9wIHtcclxuICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgdG9wOiAwO1xyXG4gIHJpZ2h0OiAwO1xyXG4gIGJvdHRvbTogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHotaW5kZXg6IEB6aW5kZXgtbW9kYWwtYmFja2dyb3VuZDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAbW9kYWwtYmFja2Ryb3AtYmc7XHJcbiAgLy8gRmFkZSBmb3IgYmFja2Ryb3BcclxuICAmLmZhZGUgeyAub3BhY2l0eSgwKTsgfVxyXG4gICYuaW4geyAub3BhY2l0eShAbW9kYWwtYmFja2Ryb3Atb3BhY2l0eSk7IH1cclxufVxyXG5cclxuLy8gTW9kYWwgaGVhZGVyXHJcbi8vIFRvcCBzZWN0aW9uIG9mIHRoZSBtb2RhbCB3LyB0aXRsZSBhbmQgZGlzbWlzc1xyXG4ubW9kYWwtaGVhZGVyIHtcclxuICBwYWRkaW5nOiBAbW9kYWwtdGl0bGUtcGFkZGluZztcclxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3I7XHJcbiAgbWluLWhlaWdodDogKEBtb2RhbC10aXRsZS1wYWRkaW5nICsgQG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0KTtcclxufVxyXG4vLyBDbG9zZSBpY29uXHJcbi5tb2RhbC1oZWFkZXIgLmNsb3NlIHtcclxuICBtYXJnaW4tdG9wOiAtMnB4O1xyXG59XHJcblxyXG4vLyBUaXRsZSB0ZXh0IHdpdGhpbiBoZWFkZXJcclxuLm1vZGFsLXRpdGxlIHtcclxuICBtYXJnaW46IDA7XHJcbiAgbGluZS1oZWlnaHQ6IEBtb2RhbC10aXRsZS1saW5lLWhlaWdodDtcclxufVxyXG5cclxuLy8gTW9kYWwgYm9keVxyXG4vLyBXaGVyZSBhbGwgbW9kYWwgY29udGVudCByZXNpZGVzIChzaWJsaW5nIG9mIC5tb2RhbC1oZWFkZXIgYW5kIC5tb2RhbC1mb290ZXIpXHJcbi5tb2RhbC1ib2R5IHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgcGFkZGluZzogQG1vZGFsLWlubmVyLXBhZGRpbmc7XHJcbn1cclxuXHJcbi8vIEZvb3RlciAoZm9yIGFjdGlvbnMpXHJcbi5tb2RhbC1mb290ZXIge1xyXG4gIHBhZGRpbmc6IEBtb2RhbC1pbm5lci1wYWRkaW5nO1xyXG4gIHRleHQtYWxpZ246IHJpZ2h0OyAvLyByaWdodCBhbGlnbiBidXR0b25zXHJcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIEBtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yO1xyXG4gICY6ZXh0ZW5kKC5jbGVhcmZpeCBhbGwpOyAvLyBjbGVhciBpdCBpbiBjYXNlIGZvbGtzIHVzZSAucHVsbC0qIGNsYXNzZXMgb24gYnV0dG9uc1xyXG5cclxuICAvLyBQcm9wZXJseSBzcGFjZSBvdXQgYnV0dG9uc1xyXG4gIC5idG4gKyAuYnRuIHtcclxuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAwOyAvLyBhY2NvdW50IGZvciBpbnB1dFt0eXBlPVwic3VibWl0XCJdIHdoaWNoIGdldHMgdGhlIGJvdHRvbSBtYXJnaW4gbGlrZSBhbGwgb3RoZXIgaW5wdXRzXHJcbiAgfVxyXG4gIC8vIGJ1dCBvdmVycmlkZSB0aGF0IGZvciBidXR0b24gZ3JvdXBzXHJcbiAgLmJ0bi1ncm91cCAuYnRuICsgLmJ0biB7XHJcbiAgICBtYXJnaW4tbGVmdDogLTFweDtcclxuICB9XHJcbiAgLy8gYW5kIG92ZXJyaWRlIGl0IGZvciBibG9jayBidXR0b25zIGFzIHdlbGxcclxuICAuYnRuLWJsb2NrICsgLmJ0bi1ibG9jayB7XHJcbiAgICBtYXJnaW4tbGVmdDogMDtcclxuICB9XHJcbn1cclxuXHJcbi8vIE1lYXN1cmUgc2Nyb2xsYmFyIHdpZHRoIGZvciBwYWRkaW5nIGJvZHkgZHVyaW5nIG1vZGFsIHNob3cvaGlkZVxyXG4ubW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmUge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICB0b3A6IC05OTk5cHg7XHJcbiAgd2lkdGg6IDUwcHg7XHJcbiAgaGVpZ2h0OiA1MHB4O1xyXG4gIG92ZXJmbG93OiBzY3JvbGw7XHJcbn1cclxuXHJcbi8vIFNjYWxlIHVwIHRoZSBtb2RhbFxyXG5AbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIHtcclxuICAvLyBBdXRvbWF0aWNhbGx5IHNldCBtb2RhbCdzIHdpZHRoIGZvciBsYXJnZXIgdmlld3BvcnRzXHJcbiAgLm1vZGFsLWRpYWxvZyB7XHJcbiAgICB3aWR0aDogQG1vZGFsLW1kO1xyXG4gICAgbWFyZ2luOiAzMHB4IGF1dG87XHJcbiAgfVxyXG4gIC5tb2RhbC1jb250ZW50IHtcclxuICAgIC5ib3gtc2hhZG93KDAgNXB4IDE1cHggcmdiYSgwLDAsMCwuNSkpO1xyXG4gIH1cclxuXHJcbiAgLy8gTW9kYWwgc2l6ZXNcclxuICAubW9kYWwtc20geyB3aWR0aDogQG1vZGFsLXNtOyB9XHJcbn1cclxuXHJcbkBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLW1kLW1pbikge1xyXG4gIC5tb2RhbC1sZyB7IHdpZHRoOiBAbW9kYWwtbGc7IH1cclxufVxyXG4iLCIvL1xyXG4vLyBUb29sdGlwc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbi8vIEJhc2UgY2xhc3NcclxuLnRvb2x0aXAge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICB6LWluZGV4OiBAemluZGV4LXRvb2x0aXA7XHJcbiAgZGlzcGxheTogYmxvY2s7XHJcbiAgLy8gT3VyIHBhcmVudCBlbGVtZW50IGNhbiBiZSBhcmJpdHJhcnkgc2luY2UgdG9vbHRpcHMgYXJlIGJ5IGRlZmF1bHQgaW5zZXJ0ZWQgYXMgYSBzaWJsaW5nIG9mIHRoZWlyIHRhcmdldCBlbGVtZW50LlxyXG4gIC8vIFNvIHJlc2V0IG91ciBmb250IGFuZCB0ZXh0IHByb3BlcnRpZXMgdG8gYXZvaWQgaW5oZXJpdGluZyB3ZWlyZCB2YWx1ZXMuXHJcbiAgLnJlc2V0LXRleHQoKTtcclxuICBmb250LXNpemU6IEBmb250LXNpemUtc21hbGw7XHJcblxyXG4gIC5vcGFjaXR5KDApO1xyXG5cclxuICAmLmluICAgICB7IC5vcGFjaXR5KEB0b29sdGlwLW9wYWNpdHkpOyB9XHJcbiAgJi50b3AgICAgeyBtYXJnaW4tdG9wOiAgLTNweDsgcGFkZGluZzogQHRvb2x0aXAtYXJyb3ctd2lkdGggMDsgfVxyXG4gICYucmlnaHQgIHsgbWFyZ2luLWxlZnQ6ICAzcHg7IHBhZGRpbmc6IDAgQHRvb2x0aXAtYXJyb3ctd2lkdGg7IH1cclxuICAmLmJvdHRvbSB7IG1hcmdpbi10b3A6ICAgM3B4OyBwYWRkaW5nOiBAdG9vbHRpcC1hcnJvdy13aWR0aCAwOyB9XHJcbiAgJi5sZWZ0ICAgeyBtYXJnaW4tbGVmdDogLTNweDsgcGFkZGluZzogMCBAdG9vbHRpcC1hcnJvdy13aWR0aDsgfVxyXG59XHJcblxyXG4vLyBXcmFwcGVyIGZvciB0aGUgdG9vbHRpcCBjb250ZW50XHJcbi50b29sdGlwLWlubmVyIHtcclxuICBtYXgtd2lkdGg6IEB0b29sdGlwLW1heC13aWR0aDtcclxuICBwYWRkaW5nOiAzcHggOHB4O1xyXG4gIGNvbG9yOiBAdG9vbHRpcC1jb2xvcjtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogQHRvb2x0aXAtYmc7XHJcbiAgYm9yZGVyLXJhZGl1czogQGJvcmRlci1yYWRpdXMtYmFzZTtcclxufVxyXG5cclxuLy8gQXJyb3dzXHJcbi50b29sdGlwLWFycm93IHtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgd2lkdGg6IDA7XHJcbiAgaGVpZ2h0OiAwO1xyXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XHJcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcclxufVxyXG4vLyBOb3RlOiBEZXByZWNhdGVkIC50b3AtbGVmdCwgLnRvcC1yaWdodCwgLmJvdHRvbS1sZWZ0LCBhbmQgLmJvdHRvbS1yaWdodCBhcyBvZiB2My4zLjFcclxuLnRvb2x0aXAge1xyXG4gICYudG9wIC50b29sdGlwLWFycm93IHtcclxuICAgIGJvdHRvbTogMDtcclxuICAgIGxlZnQ6IDUwJTtcclxuICAgIG1hcmdpbi1sZWZ0OiAtQHRvb2x0aXAtYXJyb3ctd2lkdGg7XHJcbiAgICBib3JkZXItd2lkdGg6IEB0b29sdGlwLWFycm93LXdpZHRoIEB0b29sdGlwLWFycm93LXdpZHRoIDA7XHJcbiAgICBib3JkZXItdG9wLWNvbG9yOiBAdG9vbHRpcC1hcnJvdy1jb2xvcjtcclxuICB9XHJcbiAgJi50b3AtbGVmdCAudG9vbHRpcC1hcnJvdyB7XHJcbiAgICBib3R0b206IDA7XHJcbiAgICByaWdodDogQHRvb2x0aXAtYXJyb3ctd2lkdGg7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAtQHRvb2x0aXAtYXJyb3ctd2lkdGg7XHJcbiAgICBib3JkZXItd2lkdGg6IEB0b29sdGlwLWFycm93LXdpZHRoIEB0b29sdGlwLWFycm93LXdpZHRoIDA7XHJcbiAgICBib3JkZXItdG9wLWNvbG9yOiBAdG9vbHRpcC1hcnJvdy1jb2xvcjtcclxuICB9XHJcbiAgJi50b3AtcmlnaHQgLnRvb2x0aXAtYXJyb3cge1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgbGVmdDogQHRvb2x0aXAtYXJyb3ctd2lkdGg7XHJcbiAgICBtYXJnaW4tYm90dG9tOiAtQHRvb2x0aXAtYXJyb3ctd2lkdGg7XHJcbiAgICBib3JkZXItd2lkdGg6IEB0b29sdGlwLWFycm93LXdpZHRoIEB0b29sdGlwLWFycm93LXdpZHRoIDA7XHJcbiAgICBib3JkZXItdG9wLWNvbG9yOiBAdG9vbHRpcC1hcnJvdy1jb2xvcjtcclxuICB9XHJcbiAgJi5yaWdodCAudG9vbHRpcC1hcnJvdyB7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICBtYXJnaW4tdG9wOiAtQHRvb2x0aXAtYXJyb3ctd2lkdGg7XHJcbiAgICBib3JkZXItd2lkdGg6IEB0b29sdGlwLWFycm93LXdpZHRoIEB0b29sdGlwLWFycm93LXdpZHRoIEB0b29sdGlwLWFycm93LXdpZHRoIDA7XHJcbiAgICBib3JkZXItcmlnaHQtY29sb3I6IEB0b29sdGlwLWFycm93LWNvbG9yO1xyXG4gIH1cclxuICAmLmxlZnQgLnRvb2x0aXAtYXJyb3cge1xyXG4gICAgdG9wOiA1MCU7XHJcbiAgICByaWdodDogMDtcclxuICAgIG1hcmdpbi10b3A6IC1AdG9vbHRpcC1hcnJvdy13aWR0aDtcclxuICAgIGJvcmRlci13aWR0aDogQHRvb2x0aXAtYXJyb3ctd2lkdGggMCBAdG9vbHRpcC1hcnJvdy13aWR0aCBAdG9vbHRpcC1hcnJvdy13aWR0aDtcclxuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBAdG9vbHRpcC1hcnJvdy1jb2xvcjtcclxuICB9XHJcbiAgJi5ib3R0b20gLnRvb2x0aXAtYXJyb3cge1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogNTAlO1xyXG4gICAgbWFyZ2luLWxlZnQ6IC1AdG9vbHRpcC1hcnJvdy13aWR0aDtcclxuICAgIGJvcmRlci13aWR0aDogMCBAdG9vbHRpcC1hcnJvdy13aWR0aCBAdG9vbHRpcC1hcnJvdy13aWR0aDtcclxuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IEB0b29sdGlwLWFycm93LWNvbG9yO1xyXG4gIH1cclxuICAmLmJvdHRvbS1sZWZ0IC50b29sdGlwLWFycm93IHtcclxuICAgIHRvcDogMDtcclxuICAgIHJpZ2h0OiBAdG9vbHRpcC1hcnJvdy13aWR0aDtcclxuICAgIG1hcmdpbi10b3A6IC1AdG9vbHRpcC1hcnJvdy13aWR0aDtcclxuICAgIGJvcmRlci13aWR0aDogMCBAdG9vbHRpcC1hcnJvdy13aWR0aCBAdG9vbHRpcC1hcnJvdy13aWR0aDtcclxuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IEB0b29sdGlwLWFycm93LWNvbG9yO1xyXG4gIH1cclxuICAmLmJvdHRvbS1yaWdodCAudG9vbHRpcC1hcnJvdyB7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiBAdG9vbHRpcC1hcnJvdy13aWR0aDtcclxuICAgIG1hcmdpbi10b3A6IC1AdG9vbHRpcC1hcnJvdy13aWR0aDtcclxuICAgIGJvcmRlci13aWR0aDogMCBAdG9vbHRpcC1hcnJvdy13aWR0aCBAdG9vbHRpcC1hcnJvdy13aWR0aDtcclxuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IEB0b29sdGlwLWFycm93LWNvbG9yO1xyXG4gIH1cclxufVxyXG4iLCIucmVzZXQtdGV4dCgpIHtcclxuICBmb250LWZhbWlseTogQGZvbnQtZmFtaWx5LWJhc2U7XHJcbiAgLy8gV2UgZGVsaWJlcmF0ZWx5IGRvIE5PVCByZXNldCBmb250LXNpemUuXHJcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xyXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcclxuICBsaW5lLWJyZWFrOiBhdXRvO1xyXG4gIGxpbmUtaGVpZ2h0OiBAbGluZS1oZWlnaHQtYmFzZTtcclxuICB0ZXh0LWFsaWduOiBsZWZ0OyAvLyBGYWxsYmFjayBmb3Igd2hlcmUgYHN0YXJ0YCBpcyBub3Qgc3VwcG9ydGVkXHJcbiAgdGV4dC1hbGlnbjogc3RhcnQ7XHJcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gIHRleHQtc2hhZG93OiBub25lO1xyXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xyXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XHJcbiAgd29yZC1icmVhazogbm9ybWFsO1xyXG4gIHdvcmQtc3BhY2luZzogbm9ybWFsO1xyXG4gIHdvcmQtd3JhcDogbm9ybWFsO1xyXG59XHJcbiIsIi8vXHJcbi8vIFBvcG92ZXJzXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuLnBvcG92ZXIge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICB0b3A6IDA7XHJcbiAgbGVmdDogMDtcclxuICB6LWluZGV4OiBAemluZGV4LXBvcG92ZXI7XHJcbiAgZGlzcGxheTogbm9uZTtcclxuICBtYXgtd2lkdGg6IEBwb3BvdmVyLW1heC13aWR0aDtcclxuICBwYWRkaW5nOiAxcHg7XHJcbiAgLy8gT3VyIHBhcmVudCBlbGVtZW50IGNhbiBiZSBhcmJpdHJhcnkgc2luY2UgcG9wb3ZlcnMgYXJlIGJ5IGRlZmF1bHQgaW5zZXJ0ZWQgYXMgYSBzaWJsaW5nIG9mIHRoZWlyIHRhcmdldCBlbGVtZW50LlxyXG4gIC8vIFNvIHJlc2V0IG91ciBmb250IGFuZCB0ZXh0IHByb3BlcnRpZXMgdG8gYXZvaWQgaW5oZXJpdGluZyB3ZWlyZCB2YWx1ZXMuXHJcbiAgLnJlc2V0LXRleHQoKTtcclxuICBmb250LXNpemU6IEBmb250LXNpemUtYmFzZTtcclxuXHJcbiAgYmFja2dyb3VuZC1jb2xvcjogQHBvcG92ZXItYmc7XHJcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcclxuICBib3JkZXI6IDFweCBzb2xpZCBAcG9wb3Zlci1mYWxsYmFjay1ib3JkZXItY29sb3I7XHJcbiAgYm9yZGVyOiAxcHggc29saWQgQHBvcG92ZXItYm9yZGVyLWNvbG9yO1xyXG4gIGJvcmRlci1yYWRpdXM6IEBib3JkZXItcmFkaXVzLWxhcmdlO1xyXG4gIC5ib3gtc2hhZG93KDAgNXB4IDEwcHggcmdiYSgwLDAsMCwuMikpO1xyXG5cclxuICAvLyBPZmZzZXQgdGhlIHBvcG92ZXIgdG8gYWNjb3VudCBmb3IgdGhlIHBvcG92ZXIgYXJyb3dcclxuICAmLnRvcCAgICAgeyBtYXJnaW4tdG9wOiAtQHBvcG92ZXItYXJyb3ctd2lkdGg7IH1cclxuICAmLnJpZ2h0ICAgeyBtYXJnaW4tbGVmdDogQHBvcG92ZXItYXJyb3ctd2lkdGg7IH1cclxuICAmLmJvdHRvbSAgeyBtYXJnaW4tdG9wOiBAcG9wb3Zlci1hcnJvdy13aWR0aDsgfVxyXG4gICYubGVmdCAgICB7IG1hcmdpbi1sZWZ0OiAtQHBvcG92ZXItYXJyb3ctd2lkdGg7IH1cclxufVxyXG5cclxuLnBvcG92ZXItdGl0bGUge1xyXG4gIG1hcmdpbjogMDsgLy8gcmVzZXQgaGVhZGluZyBtYXJnaW5cclxuICBwYWRkaW5nOiA4cHggMTRweDtcclxuICBmb250LXNpemU6IEBmb250LXNpemUtYmFzZTtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAcG9wb3Zlci10aXRsZS1iZztcclxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgZGFya2VuKEBwb3BvdmVyLXRpdGxlLWJnLCA1JSk7XHJcbiAgYm9yZGVyLXJhZGl1czogKEBib3JkZXItcmFkaXVzLWxhcmdlIC0gMSkgKEBib3JkZXItcmFkaXVzLWxhcmdlIC0gMSkgMCAwO1xyXG59XHJcblxyXG4ucG9wb3Zlci1jb250ZW50IHtcclxuICBwYWRkaW5nOiA5cHggMTRweDtcclxufVxyXG5cclxuLy8gQXJyb3dzXHJcbi8vXHJcbi8vIC5hcnJvdyBpcyBvdXRlciwgLmFycm93OmFmdGVyIGlzIGlubmVyXHJcblxyXG4ucG9wb3ZlciA+IC5hcnJvdyB7XHJcbiAgJixcclxuICAmOmFmdGVyIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgd2lkdGg6IDA7XHJcbiAgICBoZWlnaHQ6IDA7XHJcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcclxuICB9XHJcbn1cclxuLnBvcG92ZXIgPiAuYXJyb3cge1xyXG4gIGJvcmRlci13aWR0aDogQHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XHJcbn1cclxuLnBvcG92ZXIgPiAuYXJyb3c6YWZ0ZXIge1xyXG4gIGJvcmRlci13aWR0aDogQHBvcG92ZXItYXJyb3ctd2lkdGg7XHJcbiAgY29udGVudDogXCJcIjtcclxufVxyXG5cclxuLnBvcG92ZXIge1xyXG4gICYudG9wID4gLmFycm93IHtcclxuICAgIGxlZnQ6IDUwJTtcclxuICAgIG1hcmdpbi1sZWZ0OiAtQHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XHJcbiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xyXG4gICAgYm9yZGVyLXRvcC1jb2xvcjogQHBvcG92ZXItYXJyb3ctb3V0ZXItZmFsbGJhY2stY29sb3I7IC8vIElFOCBmYWxsYmFja1xyXG4gICAgYm9yZGVyLXRvcC1jb2xvcjogQHBvcG92ZXItYXJyb3ctb3V0ZXItY29sb3I7XHJcbiAgICBib3R0b206IC1AcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDtcclxuICAgICY6YWZ0ZXIge1xyXG4gICAgICBjb250ZW50OiBcIiBcIjtcclxuICAgICAgYm90dG9tOiAxcHg7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAtQHBvcG92ZXItYXJyb3ctd2lkdGg7XHJcbiAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XHJcbiAgICAgIGJvcmRlci10b3AtY29sb3I6IEBwb3BvdmVyLWFycm93LWNvbG9yO1xyXG4gICAgfVxyXG4gIH1cclxuICAmLnJpZ2h0ID4gLmFycm93IHtcclxuICAgIHRvcDogNTAlO1xyXG4gICAgbGVmdDogLUBwb3BvdmVyLWFycm93LW91dGVyLXdpZHRoO1xyXG4gICAgbWFyZ2luLXRvcDogLUBwb3BvdmVyLWFycm93LW91dGVyLXdpZHRoO1xyXG4gICAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7XHJcbiAgICBib3JkZXItcmlnaHQtY29sb3I6IEBwb3BvdmVyLWFycm93LW91dGVyLWZhbGxiYWNrLWNvbG9yOyAvLyBJRTggZmFsbGJhY2tcclxuICAgIGJvcmRlci1yaWdodC1jb2xvcjogQHBvcG92ZXItYXJyb3ctb3V0ZXItY29sb3I7XHJcbiAgICAmOmFmdGVyIHtcclxuICAgICAgY29udGVudDogXCIgXCI7XHJcbiAgICAgIGxlZnQ6IDFweDtcclxuICAgICAgYm90dG9tOiAtQHBvcG92ZXItYXJyb3ctd2lkdGg7XHJcbiAgICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xyXG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6IEBwb3BvdmVyLWFycm93LWNvbG9yO1xyXG4gICAgfVxyXG4gIH1cclxuICAmLmJvdHRvbSA+IC5hcnJvdyB7XHJcbiAgICBsZWZ0OiA1MCU7XHJcbiAgICBtYXJnaW4tbGVmdDogLUBwb3BvdmVyLWFycm93LW91dGVyLXdpZHRoO1xyXG4gICAgYm9yZGVyLXRvcC13aWR0aDogMDtcclxuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IEBwb3BvdmVyLWFycm93LW91dGVyLWZhbGxiYWNrLWNvbG9yOyAvLyBJRTggZmFsbGJhY2tcclxuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IEBwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yO1xyXG4gICAgdG9wOiAtQHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XHJcbiAgICAmOmFmdGVyIHtcclxuICAgICAgY29udGVudDogXCIgXCI7XHJcbiAgICAgIHRvcDogMXB4O1xyXG4gICAgICBtYXJnaW4tbGVmdDogLUBwb3BvdmVyLWFycm93LXdpZHRoO1xyXG4gICAgICBib3JkZXItdG9wLXdpZHRoOiAwO1xyXG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiBAcG9wb3Zlci1hcnJvdy1jb2xvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICYubGVmdCA+IC5hcnJvdyB7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIHJpZ2h0OiAtQHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XHJcbiAgICBtYXJnaW4tdG9wOiAtQHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XHJcbiAgICBib3JkZXItcmlnaHQtd2lkdGg6IDA7XHJcbiAgICBib3JkZXItbGVmdC1jb2xvcjogQHBvcG92ZXItYXJyb3ctb3V0ZXItZmFsbGJhY2stY29sb3I7IC8vIElFOCBmYWxsYmFja1xyXG4gICAgYm9yZGVyLWxlZnQtY29sb3I6IEBwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yO1xyXG4gICAgJjphZnRlciB7XHJcbiAgICAgIGNvbnRlbnQ6IFwiIFwiO1xyXG4gICAgICByaWdodDogMXB4O1xyXG4gICAgICBib3JkZXItcmlnaHQtd2lkdGg6IDA7XHJcbiAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBAcG9wb3Zlci1hcnJvdy1jb2xvcjtcclxuICAgICAgYm90dG9tOiAtQHBvcG92ZXItYXJyb3ctd2lkdGg7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIi8vXHJcbi8vIENhcm91c2VsXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuLy8gV3JhcHBlciBmb3IgdGhlIHNsaWRlIGNvbnRhaW5lciBhbmQgaW5kaWNhdG9yc1xyXG4uY2Fyb3VzZWwge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG5cclxuLmNhcm91c2VsLWlubmVyIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB3aWR0aDogMTAwJTtcclxuXHJcbiAgPiAuaXRlbSB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgLnRyYW5zaXRpb24oLjZzIGVhc2UtaW4tb3V0IGxlZnQpO1xyXG5cclxuICAgIC8vIEFjY291bnQgZm9yIGphbmtpdHVkZSBvbiBpbWFnZXNcclxuICAgID4gaW1nLFxyXG4gICAgPiBhID4gaW1nIHtcclxuICAgICAgJjpleHRlbmQoLmltZy1yZXNwb25zaXZlKTtcclxuICAgICAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gV2ViS2l0IENTUzMgdHJhbnNmb3JtcyBmb3Igc3VwcG9ydGVkIGRldmljZXNcclxuICAgIEBtZWRpYSBhbGwgYW5kICh0cmFuc2Zvcm0tM2QpLCAoLXdlYmtpdC10cmFuc2Zvcm0tM2QpIHtcclxuICAgICAgLnRyYW5zaXRpb24tdHJhbnNmb3JtKH4nMC42cyBlYXNlLWluLW91dCcpO1xyXG4gICAgICAuYmFja2ZhY2UtdmlzaWJpbGl0eSh+J2hpZGRlbicpO1xyXG4gICAgICAucGVyc3BlY3RpdmUoMTAwMHB4KTtcclxuXHJcbiAgICAgICYubmV4dCxcclxuICAgICAgJi5hY3RpdmUucmlnaHQge1xyXG4gICAgICAgIC50cmFuc2xhdGUzZCgxMDAlLCAwLCAwKTtcclxuICAgICAgICBsZWZ0OiAwO1xyXG4gICAgICB9XHJcbiAgICAgICYucHJldixcclxuICAgICAgJi5hY3RpdmUubGVmdCB7XHJcbiAgICAgICAgLnRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKTtcclxuICAgICAgICBsZWZ0OiAwO1xyXG4gICAgICB9XHJcbiAgICAgICYubmV4dC5sZWZ0LFxyXG4gICAgICAmLnByZXYucmlnaHQsXHJcbiAgICAgICYuYWN0aXZlIHtcclxuICAgICAgICAudHJhbnNsYXRlM2QoMCwgMCwgMCk7XHJcbiAgICAgICAgbGVmdDogMDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgPiAuYWN0aXZlLFxyXG4gID4gLm5leHQsXHJcbiAgPiAucHJldiB7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICB9XHJcblxyXG4gID4gLmFjdGl2ZSB7XHJcbiAgICBsZWZ0OiAwO1xyXG4gIH1cclxuXHJcbiAgPiAubmV4dCxcclxuICA+IC5wcmV2IHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gIH1cclxuXHJcbiAgPiAubmV4dCB7XHJcbiAgICBsZWZ0OiAxMDAlO1xyXG4gIH1cclxuICA+IC5wcmV2IHtcclxuICAgIGxlZnQ6IC0xMDAlO1xyXG4gIH1cclxuICA+IC5uZXh0LmxlZnQsXHJcbiAgPiAucHJldi5yaWdodCB7XHJcbiAgICBsZWZ0OiAwO1xyXG4gIH1cclxuXHJcbiAgPiAuYWN0aXZlLmxlZnQge1xyXG4gICAgbGVmdDogLTEwMCU7XHJcbiAgfVxyXG4gID4gLmFjdGl2ZS5yaWdodCB7XHJcbiAgICBsZWZ0OiAxMDAlO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbi8vIExlZnQvcmlnaHQgY29udHJvbHMgZm9yIG5hdlxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi5jYXJvdXNlbC1jb250cm9sIHtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgdG9wOiAwO1xyXG4gIGxlZnQ6IDA7XHJcbiAgYm90dG9tOiAwO1xyXG4gIHdpZHRoOiBAY2Fyb3VzZWwtY29udHJvbC13aWR0aDtcclxuICAub3BhY2l0eShAY2Fyb3VzZWwtY29udHJvbC1vcGFjaXR5KTtcclxuICBmb250LXNpemU6IEBjYXJvdXNlbC1jb250cm9sLWZvbnQtc2l6ZTtcclxuICBjb2xvcjogQGNhcm91c2VsLWNvbnRyb2wtY29sb3I7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIHRleHQtc2hhZG93OiBAY2Fyb3VzZWwtdGV4dC1zaGFkb3c7XHJcbiAgLy8gV2UgY2FuJ3QgaGF2ZSB0aGlzIHRyYW5zaXRpb24gaGVyZSBiZWNhdXNlIFdlYktpdCBjYW5jZWxzIHRoZSBjYXJvdXNlbFxyXG4gIC8vIGFuaW1hdGlvbiBpZiB5b3UgdHJpcCB0aGlzIHdoaWxlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciBhbmltYXRpb24uXHJcblxyXG4gIC8vIFNldCBncmFkaWVudHMgZm9yIGJhY2tncm91bmRzXHJcbiAgJi5sZWZ0IHtcclxuICAgICNncmFkaWVudCA+IC5ob3Jpem9udGFsKEBzdGFydC1jb2xvcjogcmdiYSgwLDAsMCwuNSk7IEBlbmQtY29sb3I6IHJnYmEoMCwwLDAsLjAwMDEpKTtcclxuICB9XHJcbiAgJi5yaWdodCB7XHJcbiAgICBsZWZ0OiBhdXRvO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICAjZ3JhZGllbnQgPiAuaG9yaXpvbnRhbChAc3RhcnQtY29sb3I6IHJnYmEoMCwwLDAsLjAwMDEpOyBAZW5kLWNvbG9yOiByZ2JhKDAsMCwwLC41KSk7XHJcbiAgfVxyXG5cclxuICAvLyBIb3Zlci9mb2N1cyBzdGF0ZVxyXG4gICY6aG92ZXIsXHJcbiAgJjpmb2N1cyB7XHJcbiAgICBvdXRsaW5lOiAwO1xyXG4gICAgY29sb3I6IEBjYXJvdXNlbC1jb250cm9sLWNvbG9yO1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgLm9wYWNpdHkoLjkpO1xyXG4gIH1cclxuXHJcbiAgLy8gVG9nZ2xlc1xyXG4gIC5pY29uLXByZXYsXHJcbiAgLmljb24tbmV4dCxcclxuICAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCxcclxuICAuZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiA1MCU7XHJcbiAgICBtYXJnaW4tdG9wOiAtMTBweDtcclxuICAgIHotaW5kZXg6IDU7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgfVxyXG4gIC5pY29uLXByZXYsXHJcbiAgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQge1xyXG4gICAgbGVmdDogNTAlO1xyXG4gICAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xyXG4gIH1cclxuICAuaWNvbi1uZXh0LFxyXG4gIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCB7XHJcbiAgICByaWdodDogNTAlO1xyXG4gICAgbWFyZ2luLXJpZ2h0OiAtMTBweDtcclxuICB9XHJcbiAgLmljb24tcHJldixcclxuICAuaWNvbi1uZXh0IHtcclxuICAgIHdpZHRoOiAgMjBweDtcclxuICAgIGhlaWdodDogMjBweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxO1xyXG4gICAgZm9udC1mYW1pbHk6IHNlcmlmO1xyXG4gIH1cclxuXHJcblxyXG4gIC5pY29uLXByZXYge1xyXG4gICAgJjpiZWZvcmUge1xyXG4gICAgICBjb250ZW50OiAnXFwyMDM5JzsvLyBTSU5HTEUgTEVGVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSSyAoVSsyMDM5KVxyXG4gICAgfVxyXG4gIH1cclxuICAuaWNvbi1uZXh0IHtcclxuICAgICY6YmVmb3JlIHtcclxuICAgICAgY29udGVudDogJ1xcMjAzYSc7Ly8gU0lOR0xFIFJJR0hULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLIChVKzIwM0EpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vLyBPcHRpb25hbCBpbmRpY2F0b3IgcGlwc1xyXG4vL1xyXG4vLyBBZGQgYW4gdW5vcmRlcmVkIGxpc3Qgd2l0aCB0aGUgZm9sbG93aW5nIGNsYXNzIGFuZCBhZGQgYSBsaXN0IGl0ZW0gZm9yIGVhY2hcclxuLy8gc2xpZGUgeW91ciBjYXJvdXNlbCBob2xkcy5cclxuXHJcbi5jYXJvdXNlbC1pbmRpY2F0b3JzIHtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgYm90dG9tOiAxMHB4O1xyXG4gIGxlZnQ6IDUwJTtcclxuICB6LWluZGV4OiAxNTtcclxuICB3aWR0aDogNjAlO1xyXG4gIG1hcmdpbi1sZWZ0OiAtMzAlO1xyXG4gIHBhZGRpbmctbGVmdDogMDtcclxuICBsaXN0LXN0eWxlOiBub25lO1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHJcbiAgbGkge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgd2lkdGg6ICAxMHB4O1xyXG4gICAgaGVpZ2h0OiAxMHB4O1xyXG4gICAgbWFyZ2luOiAxcHg7XHJcbiAgICB0ZXh0LWluZGVudDogLTk5OXB4O1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgQGNhcm91c2VsLWluZGljYXRvci1ib3JkZXItY29sb3I7XHJcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG5cclxuICAgIC8vIElFOC05IGhhY2sgZm9yIGV2ZW50IGhhbmRsaW5nXHJcbiAgICAvL1xyXG4gICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgOC05IGRvZXMgbm90IHN1cHBvcnQgY2xpY2tzIG9uIGVsZW1lbnRzIHdpdGhvdXQgYSBzZXRcclxuICAgIC8vIGBiYWNrZ3JvdW5kLWNvbG9yYC4gV2UgY2Fubm90IHVzZSBgZmlsdGVyYCBzaW5jZSB0aGF0J3Mgbm90IHZpZXdlZCBhcyBhXHJcbiAgICAvLyBiYWNrZ3JvdW5kIGNvbG9yIGJ5IHRoZSBicm93c2VyLiBUaHVzLCBhIGhhY2sgaXMgbmVlZGVkLlxyXG4gICAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9jbGljayNJbnRlcm5ldF9FeHBsb3JlclxyXG4gICAgLy9cclxuICAgIC8vIEZvciBJRTgsIHdlIHNldCBzb2xpZCBibGFjayBhcyBpdCBkb2Vzbid0IHN1cHBvcnQgYHJnYmEoKWAuIEZvciBJRTksIHdlXHJcbiAgICAvLyBzZXQgYWxwaGEgdHJhbnNwYXJlbmN5IGZvciB0aGUgYmVzdCByZXN1bHRzIHBvc3NpYmxlLlxyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMCBcXDk7IC8vIElFOFxyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAsMCwwKTsgLy8gSUU5XHJcbiAgfVxyXG4gIC5hY3RpdmUge1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgd2lkdGg6ICAxMnB4O1xyXG4gICAgaGVpZ2h0OiAxMnB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGNhcm91c2VsLWluZGljYXRvci1hY3RpdmUtYmc7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBPcHRpb25hbCBjYXB0aW9uc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyBIaWRkZW4gYnkgZGVmYXVsdCBmb3Igc21hbGxlciB2aWV3cG9ydHNcclxuLmNhcm91c2VsLWNhcHRpb24ge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICBsZWZ0OiAxNSU7XHJcbiAgcmlnaHQ6IDE1JTtcclxuICBib3R0b206IDIwcHg7XHJcbiAgei1pbmRleDogMTA7XHJcbiAgcGFkZGluZy10b3A6IDIwcHg7XHJcbiAgcGFkZGluZy1ib3R0b206IDIwcHg7XHJcbiAgY29sb3I6IEBjYXJvdXNlbC1jYXB0aW9uLWNvbG9yO1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICB0ZXh0LXNoYWRvdzogQGNhcm91c2VsLXRleHQtc2hhZG93O1xyXG4gICYgLmJ0biB7XHJcbiAgICB0ZXh0LXNoYWRvdzogbm9uZTsgLy8gTm8gc2hhZG93IGZvciBidXR0b24gZWxlbWVudHMgaW4gY2Fyb3VzZWwtY2FwdGlvblxyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIFNjYWxlIHVwIGNvbnRyb2xzIGZvciB0YWJsZXRzIGFuZCB1cFxyXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBAc2NyZWVuLXNtLW1pbikge1xyXG5cclxuICAvLyBTY2FsZSB1cCB0aGUgY29udHJvbHMgYSBzbWlkZ2VcclxuICAuY2Fyb3VzZWwtY29udHJvbCB7XHJcbiAgICAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCxcclxuICAgIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCxcclxuICAgIC5pY29uLXByZXYsXHJcbiAgICAuaWNvbi1uZXh0IHtcclxuICAgICAgd2lkdGg6IDMwcHg7XHJcbiAgICAgIGhlaWdodDogMzBweDtcclxuICAgICAgbWFyZ2luLXRvcDogLTE1cHg7XHJcbiAgICAgIGZvbnQtc2l6ZTogMzBweDtcclxuICAgIH1cclxuICAgIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0LFxyXG4gICAgLmljb24tcHJldiB7XHJcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMTVweDtcclxuICAgIH1cclxuICAgIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCxcclxuICAgIC5pY29uLW5leHQge1xyXG4gICAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gU2hvdyBhbmQgbGVmdCBhbGlnbiB0aGUgY2FwdGlvbnNcclxuICAuY2Fyb3VzZWwtY2FwdGlvbiB7XHJcbiAgICBsZWZ0OiAyMCU7XHJcbiAgICByaWdodDogMjAlO1xyXG4gICAgcGFkZGluZy1ib3R0b206IDMwcHg7XHJcbiAgfVxyXG5cclxuICAvLyBNb3ZlIHVwIHRoZSBpbmRpY2F0b3JzXHJcbiAgLmNhcm91c2VsLWluZGljYXRvcnMge1xyXG4gICAgYm90dG9tOiAyMHB4O1xyXG4gIH1cclxufVxyXG4iLCIvLyBDbGVhcmZpeFxyXG4vL1xyXG4vLyBGb3IgbW9kZXJuIGJyb3dzZXJzXHJcbi8vIDEuIFRoZSBzcGFjZSBjb250ZW50IGlzIG9uZSB3YXkgdG8gYXZvaWQgYW4gT3BlcmEgYnVnIHdoZW4gdGhlXHJcbi8vICAgIGNvbnRlbnRlZGl0YWJsZSBhdHRyaWJ1dGUgaXMgaW5jbHVkZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUgZG9jdW1lbnQuXHJcbi8vICAgIE90aGVyd2lzZSBpdCBjYXVzZXMgc3BhY2UgdG8gYXBwZWFyIGF0IHRoZSB0b3AgYW5kIGJvdHRvbSBvZiBlbGVtZW50c1xyXG4vLyAgICB0aGF0IGFyZSBjbGVhcmZpeGVkLlxyXG4vLyAyLiBUaGUgdXNlIG9mIGB0YWJsZWAgcmF0aGVyIHRoYW4gYGJsb2NrYCBpcyBvbmx5IG5lY2Vzc2FyeSBpZiB1c2luZ1xyXG4vLyAgICBgOmJlZm9yZWAgdG8gY29udGFpbiB0aGUgdG9wLW1hcmdpbnMgb2YgY2hpbGQgZWxlbWVudHMuXHJcbi8vXHJcbi8vIFNvdXJjZTogaHR0cDovL25pY29sYXNnYWxsYWdoZXIuY29tL21pY3JvLWNsZWFyZml4LWhhY2svXHJcblxyXG4uY2xlYXJmaXgoKSB7XHJcbiAgJjpiZWZvcmUsXHJcbiAgJjphZnRlciB7XHJcbiAgICBjb250ZW50OiBcIiBcIjsgLy8gMVxyXG4gICAgZGlzcGxheTogdGFibGU7IC8vIDJcclxuICB9XHJcbiAgJjphZnRlciB7XHJcbiAgICBjbGVhcjogYm90aDtcclxuICB9XHJcbn1cclxuIiwiLy8gQ2VudGVyLWFsaWduIGEgYmxvY2sgbGV2ZWwgZWxlbWVudFxyXG5cclxuLmNlbnRlci1ibG9jaygpIHtcclxuICBkaXNwbGF5OiBibG9jaztcclxuICBtYXJnaW4tbGVmdDogYXV0bztcclxuICBtYXJnaW4tcmlnaHQ6IGF1dG87XHJcbn1cclxuIiwiLy8gQ1NTIGltYWdlIHJlcGxhY2VtZW50XHJcbi8vXHJcbi8vIEhlYWRzIHVwISB2MyBsYXVuY2hlZCB3aXRoIG9ubHkgYC5oaWRlLXRleHQoKWAsIGJ1dCBwZXIgb3VyIHBhdHRlcm4gZm9yXHJcbi8vIG1peGlucyBiZWluZyByZXVzZWQgYXMgY2xhc3NlcyB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoaXMgZG9lc24ndCBob2xkIHVwLiBBc1xyXG4vLyBvZiB2My4wLjEgd2UgaGF2ZSBhZGRlZCBgLnRleHQtaGlkZSgpYCBhbmQgZGVwcmVjYXRlZCBgLmhpZGUtdGV4dCgpYC5cclxuLy9cclxuLy8gU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vaDVicC9odG1sNS1ib2lsZXJwbGF0ZS9jb21taXQvYWEwMzk2ZWFlNzU3XHJcblxyXG4vLyBEZXByZWNhdGVkIGFzIG9mIHYzLjAuMSAod2lsbCBiZSByZW1vdmVkIGluIHY0KVxyXG4uaGlkZS10ZXh0KCkge1xyXG4gIGZvbnQ6IH5cIjAvMFwiIGE7XHJcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gIHRleHQtc2hhZG93OiBub25lO1xyXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG4gIGJvcmRlcjogMDtcclxufVxyXG5cclxuLy8gTmV3IG1peGluIHRvIHVzZSBhcyBvZiB2My4wLjFcclxuLnRleHQtaGlkZSgpIHtcclxuICAuaGlkZS10ZXh0KCk7XHJcbn1cclxuIiwiLy9cclxuLy8gUmVzcG9uc2l2ZTogVXRpbGl0eSBjbGFzc2VzXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuLy8gSUUxMCBpbiBXaW5kb3dzIChQaG9uZSkgOFxyXG4vL1xyXG4vLyBTdXBwb3J0IGZvciByZXNwb25zaXZlIHZpZXdzIHZpYSBtZWRpYSBxdWVyaWVzIGlzIGtpbmQgb2YgYm9ya2VkIGluIElFMTAsIGZvclxyXG4vLyBTdXJmYWNlL2Rlc2t0b3AgaW4gc3BsaXQgdmlldyBhbmQgZm9yIFdpbmRvd3MgUGhvbmUgOC4gVGhpcyBwYXJ0aWN1bGFyIGZpeFxyXG4vLyBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IGEgc25pcHBldCBvZiBKYXZhU2NyaXB0IHRvIHNuaWZmIHRoZSB1c2VyIGFnZW50IGFuZFxyXG4vLyBhcHBseSBzb21lIGNvbmRpdGlvbmFsIENTUyB0byAqb25seSogdGhlIFN1cmZhY2UvZGVza3RvcCBXaW5kb3dzIDguIExvb2sgYXRcclxuLy8gb3VyIEdldHRpbmcgU3RhcnRlZCBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgYnVnLlxyXG4vL1xyXG4vLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBmb2xsb3dpbmc6XHJcbi8vXHJcbi8vIElzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzEwNDk3XHJcbi8vIERvY3M6IGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2dldHRpbmctc3RhcnRlZC8jc3VwcG9ydC1pZTEwLXdpZHRoXHJcbi8vIFNvdXJjZTogaHR0cDovL3RpbWthZGxlYy5jb20vMjAxMy8wMS93aW5kb3dzLXBob25lLTgtYW5kLWRldmljZS13aWR0aC9cclxuLy8gU291cmNlOiBodHRwOi8vdGlta2FkbGVjLmNvbS8yMDEyLzEwL2llMTAtc25hcC1tb2RlLWFuZC1yZXNwb25zaXZlLWRlc2lnbi9cclxuXHJcbkAtbXMtdmlld3BvcnQge1xyXG4gIHdpZHRoOiBkZXZpY2Utd2lkdGg7XHJcbn1cclxuXHJcblxyXG4vLyBWaXNpYmlsaXR5IHV0aWxpdGllc1xyXG4vLyBOb3RlOiBEZXByZWNhdGVkIC52aXNpYmxlLXhzLCAudmlzaWJsZS1zbSwgLnZpc2libGUtbWQsIGFuZCAudmlzaWJsZS1sZyBhcyBvZiB2My4yLjBcclxuLnZpc2libGUteHMsXHJcbi52aXNpYmxlLXNtLFxyXG4udmlzaWJsZS1tZCxcclxuLnZpc2libGUtbGcge1xyXG4gIC5yZXNwb25zaXZlLWludmlzaWJpbGl0eSgpO1xyXG59XHJcblxyXG4udmlzaWJsZS14cy1ibG9jayxcclxuLnZpc2libGUteHMtaW5saW5lLFxyXG4udmlzaWJsZS14cy1pbmxpbmUtYmxvY2ssXHJcbi52aXNpYmxlLXNtLWJsb2NrLFxyXG4udmlzaWJsZS1zbS1pbmxpbmUsXHJcbi52aXNpYmxlLXNtLWlubGluZS1ibG9jayxcclxuLnZpc2libGUtbWQtYmxvY2ssXHJcbi52aXNpYmxlLW1kLWlubGluZSxcclxuLnZpc2libGUtbWQtaW5saW5lLWJsb2NrLFxyXG4udmlzaWJsZS1sZy1ibG9jayxcclxuLnZpc2libGUtbGctaW5saW5lLFxyXG4udmlzaWJsZS1sZy1pbmxpbmUtYmxvY2sge1xyXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufVxyXG5cclxuLnZpc2libGUteHMge1xyXG4gIEBtZWRpYSAobWF4LXdpZHRoOiBAc2NyZWVuLXhzLW1heCkge1xyXG4gICAgLnJlc3BvbnNpdmUtdmlzaWJpbGl0eSgpO1xyXG4gIH1cclxufVxyXG4udmlzaWJsZS14cy1ibG9jayB7XHJcbiAgQG1lZGlhIChtYXgtd2lkdGg6IEBzY3JlZW4teHMtbWF4KSB7XHJcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xyXG4gIH1cclxufVxyXG4udmlzaWJsZS14cy1pbmxpbmUge1xyXG4gIEBtZWRpYSAobWF4LXdpZHRoOiBAc2NyZWVuLXhzLW1heCkge1xyXG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG59XHJcbi52aXNpYmxlLXhzLWlubGluZS1ibG9jayB7XHJcbiAgQG1lZGlhIChtYXgtd2lkdGg6IEBzY3JlZW4teHMtbWF4KSB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcclxuICB9XHJcbn1cclxuXHJcbi52aXNpYmxlLXNtIHtcclxuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIGFuZCAobWF4LXdpZHRoOiBAc2NyZWVuLXNtLW1heCkge1xyXG4gICAgLnJlc3BvbnNpdmUtdmlzaWJpbGl0eSgpO1xyXG4gIH1cclxufVxyXG4udmlzaWJsZS1zbS1ibG9jayB7XHJcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSBhbmQgKG1heC13aWR0aDogQHNjcmVlbi1zbS1tYXgpIHtcclxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG59XHJcbi52aXNpYmxlLXNtLWlubGluZSB7XHJcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tc20tbWluKSBhbmQgKG1heC13aWR0aDogQHNjcmVlbi1zbS1tYXgpIHtcclxuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xyXG4gIH1cclxufVxyXG4udmlzaWJsZS1zbS1pbmxpbmUtYmxvY2sge1xyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLXNtLW1pbikgYW5kIChtYXgtd2lkdGg6IEBzY3JlZW4tc20tbWF4KSB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcclxuICB9XHJcbn1cclxuXHJcbi52aXNpYmxlLW1kIHtcclxuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1tZC1taW4pIGFuZCAobWF4LXdpZHRoOiBAc2NyZWVuLW1kLW1heCkge1xyXG4gICAgLnJlc3BvbnNpdmUtdmlzaWJpbGl0eSgpO1xyXG4gIH1cclxufVxyXG4udmlzaWJsZS1tZC1ibG9jayB7XHJcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbWQtbWluKSBhbmQgKG1heC13aWR0aDogQHNjcmVlbi1tZC1tYXgpIHtcclxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG59XHJcbi52aXNpYmxlLW1kLWlubGluZSB7XHJcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbWQtbWluKSBhbmQgKG1heC13aWR0aDogQHNjcmVlbi1tZC1tYXgpIHtcclxuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xyXG4gIH1cclxufVxyXG4udmlzaWJsZS1tZC1pbmxpbmUtYmxvY2sge1xyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLW1kLW1pbikgYW5kIChtYXgtd2lkdGg6IEBzY3JlZW4tbWQtbWF4KSB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcclxuICB9XHJcbn1cclxuXHJcbi52aXNpYmxlLWxnIHtcclxuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1sZy1taW4pIHtcclxuICAgIC5yZXNwb25zaXZlLXZpc2liaWxpdHkoKTtcclxuICB9XHJcbn1cclxuLnZpc2libGUtbGctYmxvY2sge1xyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLWxnLW1pbikge1xyXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcclxuICB9XHJcbn1cclxuLnZpc2libGUtbGctaW5saW5lIHtcclxuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1sZy1taW4pIHtcclxuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xyXG4gIH1cclxufVxyXG4udmlzaWJsZS1sZy1pbmxpbmUtYmxvY2sge1xyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLWxnLW1pbikge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG59XHJcblxyXG4uaGlkZGVuLXhzIHtcclxuICBAbWVkaWEgKG1heC13aWR0aDogQHNjcmVlbi14cy1tYXgpIHtcclxuICAgIC5yZXNwb25zaXZlLWludmlzaWJpbGl0eSgpO1xyXG4gIH1cclxufVxyXG4uaGlkZGVuLXNtIHtcclxuICBAbWVkaWEgKG1pbi13aWR0aDogQHNjcmVlbi1zbS1taW4pIGFuZCAobWF4LXdpZHRoOiBAc2NyZWVuLXNtLW1heCkge1xyXG4gICAgLnJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCk7XHJcbiAgfVxyXG59XHJcbi5oaWRkZW4tbWQge1xyXG4gIEBtZWRpYSAobWluLXdpZHRoOiBAc2NyZWVuLW1kLW1pbikgYW5kIChtYXgtd2lkdGg6IEBzY3JlZW4tbWQtbWF4KSB7XHJcbiAgICAucmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoKTtcclxuICB9XHJcbn1cclxuLmhpZGRlbi1sZyB7XHJcbiAgQG1lZGlhIChtaW4td2lkdGg6IEBzY3JlZW4tbGctbWluKSB7XHJcbiAgICAucmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyBQcmludCB1dGlsaXRpZXNcclxuLy9cclxuLy8gTWVkaWEgcXVlcmllcyBhcmUgcGxhY2VkIG9uIHRoZSBpbnNpZGUgdG8gYmUgbWl4aW4tZnJpZW5kbHkuXHJcblxyXG4vLyBOb3RlOiBEZXByZWNhdGVkIC52aXNpYmxlLXByaW50IGFzIG9mIHYzLjIuMFxyXG4udmlzaWJsZS1wcmludCB7XHJcbiAgLnJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCk7XHJcblxyXG4gIEBtZWRpYSBwcmludCB7XHJcbiAgICAucmVzcG9uc2l2ZS12aXNpYmlsaXR5KCk7XHJcbiAgfVxyXG59XHJcbi52aXNpYmxlLXByaW50LWJsb2NrIHtcclxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XHJcblxyXG4gIEBtZWRpYSBwcmludCB7XHJcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xyXG4gIH1cclxufVxyXG4udmlzaWJsZS1wcmludC1pbmxpbmUge1xyXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxuXHJcbiAgQG1lZGlhIHByaW50IHtcclxuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xyXG4gIH1cclxufVxyXG4udmlzaWJsZS1wcmludC1pbmxpbmUtYmxvY2sge1xyXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxuXHJcbiAgQG1lZGlhIHByaW50IHtcclxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xyXG4gIH1cclxufVxyXG5cclxuLmhpZGRlbi1wcmludCB7XHJcbiAgQG1lZGlhIHByaW50IHtcclxuICAgIC5yZXNwb25zaXZlLWludmlzaWJpbGl0eSgpO1xyXG4gIH1cclxufVxyXG4iLCIvLyBSZXNwb25zaXZlIHV0aWxpdGllc1xyXG5cclxuLy9cclxuLy8gTW9yZSBlYXNpbHkgaW5jbHVkZSBhbGwgdGhlIHN0YXRlcyBmb3IgcmVzcG9uc2l2ZS11dGlsaXRpZXMubGVzcy5cclxuLnJlc3BvbnNpdmUtdmlzaWJpbGl0eSgpIHtcclxuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xyXG4gIHRhYmxlJiAgeyBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50OyB9XHJcbiAgdHImICAgICB7IGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50OyB9XHJcbiAgdGgmLFxyXG4gIHRkJiAgICAgeyBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7IH1cclxufVxyXG5cclxuLnJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCkge1xyXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufVxyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */ diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Styles/bootstrap.min.css b/src/Orchard.Web/Modules/Orchard.Resources/Styles/bootstrap.min.css index 9bb472f74c6..bea83d43492 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Styles/bootstrap.min.css +++ b/src/Orchard.Web/Modules/Orchard.Resources/Styles/bootstrap.min.css @@ -2,4 +2,4 @@ * Bootstrap v3.3.5 (http://getbootstrap.com) * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */.label,sub,sup{vertical-align:baseline}.btn,.btn-group,.btn-group-vertical,.caret,.checkbox-inline,.radio-inline,img{vertical-align:middle}hr,img{border:0}body,figure{margin:0}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}.glyphicon,address{font-style:normal}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.dropdown-toggle.btn-danger,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-info,.open>.dropdown-toggle.btn-primary,.open>.dropdown-toggle.btn-warning{background-image:none}.img-thumbnail,body{background-color:#fff}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*,:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;border:1px solid #ddd;border-radius:4px;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre{line-height:1.42857143}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address,dl{margin-bottom:20px}ol,ul{margin-bottom:10px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;color:#777}legend,pre{display:block;color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;box-shadow:none}pre{padding:9.5px;margin:0 0 10px;font-size:13px;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-left:15px;padding-right:15px}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.42857143;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.form-group-sm .form-control,.input-sm{padding:5px 10px;border-radius:3px;font-size:12px}.input-sm{height:30px;line-height:1.5}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;line-height:1.5}.form-group-lg .form-control,.input-lg{border-radius:6px;padding:10px 16px;font-size:18px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;line-height:1.3333333}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;line-height:1.3333333}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;transition-property:height,visibility;transition-duration:.35s;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu-right,.dropdown-menu.pull-right{left:auto;right:0}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.42857143;white-space:nowrap}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{clear:both;font-weight:400;color:#333}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{font-size:12px;color:#777}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.nav>li,.nav>li>a{display:block;position:relative}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px;margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;box-shadow:none}}.breadcrumb>li,.pagination{display:inline-block}.btn .badge,.btn .label{top:-1px;position:relative}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{padding-left:0;margin:20px 0;border-radius:4px}.pager li,.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.badge,.label{font-weight:700;line-height:1;white-space:nowrap;text-align:center}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;color:#fff;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.alert,.thumbnail{margin-bottom:20px}.alert .alert-link,.close{font-weight:700}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-left:auto;margin-right:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.popover,.tooltip{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;text-decoration:none}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-content,.popover{background-clip:padding-box}.modal{display:none;position:fixed;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);transform:translate(0,-25%);transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.43px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;text-align:left;text-align:start;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#000;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;text-align:start;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.carousel-caption,.carousel-control{color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.carousel,.carousel-inner{position:relative}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.left>.arrow:after,.popover.right>.arrow:after{content:" ";bottom:-10px}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{left:1px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.carousel-inner{overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px}.carousel-control.left{background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}} \ No newline at end of file + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */.label,sub,sup{vertical-align:baseline}.btn,.btn-group,.btn-group-vertical,.caret,.checkbox-inline,.radio-inline,img{vertical-align:middle}hr,img{border:0}body,figure{margin:0}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}.glyphicon,address{font-style:normal}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.dropdown-toggle.btn-danger,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-info,.open>.dropdown-toggle.btn-primary,.open>.dropdown-toggle.btn-warning{background-image:none}.img-thumbnail,body{background-color:#fff}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*,:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;border:1px solid #ddd;border-radius:4px;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre{line-height:1.42857143}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address,dl{margin-bottom:20px}ol,ul{margin-bottom:10px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;color:#777}legend,pre{display:block;color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;box-shadow:none}pre{padding:9.5px;margin:0 0 10px;font-size:13px;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-left:15px;padding-right:15px}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.42857143;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.form-group-sm .form-control,.input-sm{padding:5px 10px;border-radius:3px;font-size:12px}.input-sm{height:30px;line-height:1.5}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;line-height:1.5}.form-group-lg .form-control,.input-lg{border-radius:6px;padding:10px 16px;font-size:18px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;line-height:1.3333333}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;line-height:1.3333333}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;transition-property:height,visibility;transition-duration:.35s;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu-right,.dropdown-menu.pull-right{left:auto;right:0}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.42857143;white-space:nowrap}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{clear:both;font-weight:400;color:#333}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{font-size:12px;color:#777}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.nav>li,.nav>li>a{display:block;position:relative}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px;margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-danger,.progress-striped .progress-bar-info,.progress-striped .progress-bar-success,.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;box-shadow:none}}.breadcrumb>li,.pagination{display:inline-block}.btn .badge,.btn .label{top:-1px;position:relative}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{padding-left:0;margin:20px 0;border-radius:4px}.pager li,.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.badge,.label{font-weight:700;line-height:1;white-space:nowrap;text-align:center}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}a.badge:focus,a.badge:hover,a.label:focus,a.label:hover{color:#fff;cursor:pointer;text-decoration:none}.label{display:inline;padding:.2em .6em .3em;font-size:75%;color:#fff;border-radius:.25em}.label:empty{display:none}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.alert,.thumbnail{margin-bottom:20px}.alert .alert-link,.close{font-weight:700}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-left:auto;margin-right:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-bar-info{background-color:#5bc0de}.progress-bar-warning{background-color:#f0ad4e}.progress-bar-danger{background-color:#d9534f}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.popover,.tooltip{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;text-decoration:none}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-content,.popover{background-clip:padding-box}.modal{display:none;position:fixed;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{transform:translate(0,-25%);transition:transform .3s ease-out}.modal.in .modal-dialog{transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.43px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;text-align:left;text-align:start;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow,.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.top .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.top-left .tooltip-arrow{right:5px;margin-bottom:-5px}.tooltip.top-right .tooltip-arrow{left:5px;margin-bottom:-5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#000;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;text-align:start;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.carousel-caption,.carousel-control{color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.carousel,.carousel-inner{position:relative}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.left>.arrow:after,.popover.right>.arrow:after{content:" ";bottom:-10px}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{left:1px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.carousel-inner{overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{transition:transform .6s ease-in-out;backface-visibility:hidden;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px}.carousel-control.left{background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Styles/font-awesome.css b/src/Orchard.Web/Modules/Orchard.Resources/Styles/font-awesome.css index d39bfeb96dc..9d329a74c6d 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Styles/font-awesome.css +++ b/src/Orchard.Web/Modules/Orchard.Resources/Styles/font-awesome.css @@ -95,56 +95,37 @@ margin-left: .3em; } .fa-spin { - -webkit-animation: fa-spin 2s infinite linear; animation: fa-spin 2s infinite linear; } .fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); animation: fa-spin 1s infinite steps(8); } -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} @keyframes fa-spin { 0% { - -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { - -webkit-transform: rotate(359deg); transform: rotate(359deg); } } .fa-rotate-90 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); - -webkit-transform: rotate(90deg); transform: rotate(90deg); } .fa-rotate-180 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); transform: rotate(180deg); } .fa-rotate-270 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - -webkit-transform: rotate(270deg); transform: rotate(270deg); } .fa-flip-horizontal { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); - -webkit-transform: scale(-1, 1); transform: scale(-1, 1); } .fa-flip-vertical { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); - -webkit-transform: scale(1, -1); transform: scale(1, -1); } :root .fa-rotate-90, @@ -152,8 +133,7 @@ :root .fa-rotate-270, :root .fa-flip-horizontal, :root .fa-flip-vertical { - -webkit-filter: none; - filter: none; + filter: none; } .fa-stack { position: relative; @@ -2026,4 +2006,4 @@ content: "\f280"; } -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvbnQtYXdlc29tZS5jc3MiLCJwYXRoLmxlc3MiLCJjb3JlLmxlc3MiLCJsYXJnZXIubGVzcyIsImZpeGVkLXdpZHRoLmxlc3MiLCJsaXN0Lmxlc3MiLCJib3JkZXJlZC1wdWxsZWQubGVzcyIsImFuaW1hdGVkLmxlc3MiLCJyb3RhdGVkLWZsaXBwZWQubGVzcyIsIm1peGlucy5sZXNzIiwic3RhY2tlZC5sZXNzIiwiaWNvbnMubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTs7O0dBR0c7QUFDSDtnQ0FDZ0M7QUNGaEM7RUFDRSwyQkFBQTtFQUNBLHFEQUFBO0VBQ0Esa1hBQUE7RUFNQSxvQkFBQTtFQUNBLG1CQUFBO0NEREQ7QUVURDtFQUNFLHNCQUFBO0VBQ0EsOENBQUE7RUFDQSxtQkFBQTtFQUNBLHFCQUFBO0VBQ0Esb0NBQUE7RUFDQSxtQ0FBQTtDRldEO0FBQ0QsOERBQThEO0FHakI5RDtFQUNFLHdCQUFBO0VBQ0Esb0JBQUE7RUFDQSxxQkFBQTtDSG1CRDtBR2pCRDtFQUF1QixlQUFBO0NIb0J0QjtBR25CRDtFQUF1QixlQUFBO0NIc0J0QjtBR3JCRDtFQUF1QixlQUFBO0NId0J0QjtBR3ZCRDtFQUF1QixlQUFBO0NIMEJ0QjtBSXBDRDtFQUNFLG9CQUFBO0VBQ0EsbUJBQUE7Q0pzQ0Q7QUt2Q0Q7RUFDRSxnQkFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q0x5Q0Q7QUs1Q0Q7RUFJUyxtQkFBQTtDTDJDUjtBS3pDRDtFQUNFLG1CQUFBO0VBQ0Esb0JBQUE7RUFDQSxvQkFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7Q0wyQ0Q7QUsxQ0M7RUFDRSxvQkFBQTtDTDRDSDtBTXpERDtFQUNFLDBCQUFBO0VBQ0EsMEJBQUE7RUFDQSxvQkFBQTtDTjJERDtBTXhERDtFQUE4QixZQUFBO0NOMkQ3QjtBTTFERDtFQUErQixhQUFBO0NONkQ5QjtBTTFEQztFQUErQixtQkFBQTtDTjZEaEM7QU01REM7RUFBZ0Msa0JBQUE7Q04rRGpDO0FBQ0QsNEJBQTRCO0FNNUQ1QjtFQUFjLGFBQUE7Q04rRGI7QU05REQ7RUFBYSxZQUFBO0NOaUVaO0FNOURDO0VBQWMsbUJBQUE7Q05pRWY7QU1oRUM7RUFBZSxrQkFBQTtDTm1FaEI7QU92RkQ7RUFDRSw4Q0FBQTtFQUNRLHNDQUFBO0NQeUZUO0FPdEZEO0VBQ0UsZ0RBQUE7RUFDUSx3Q0FBQTtDUHdGVDtBT3JGRDtFQUNFO0lBQ0UsZ0NBQUE7SUFDUSx3QkFBQTtHUHVGVDtFT3JGRDtJQUNFLGtDQUFBO0lBQ1EsMEJBQUE7R1B1RlQ7Q0FDRjtBT3BGRDtFQUNFO0lBQ0UsZ0NBQUE7SUFDUSx3QkFBQTtHUHNGVDtFT3BGRDtJQUNFLGtDQUFBO0lBQ1EsMEJBQUE7R1BzRlQ7Q0FDRjtBUW5IRDtFQ1dFLGlFQUFBO0VBQ0EsaUNBQUE7RUFFUSx5QkFBQTtDVDJHVDtBUXhIRDtFQ1VFLGlFQUFBO0VBQ0Esa0NBQUE7RUFFUSwwQkFBQTtDVGlIVDtBUTdIRDtFQ1NFLGlFQUFBO0VBQ0Esa0NBQUE7RUFFUSwwQkFBQTtDVHVIVDtBUWpJRDtFQ2NFLDJFQUFBO0VBQ0EsZ0NBQUE7RUFFUSx3QkFBQTtDVHNIVDtBUXRJRDtFQ2FFLDJFQUFBO0VBQ0EsZ0NBQUE7RUFFUSx3QkFBQTtDVDRIVDtBUXZJRDs7Ozs7RUFLRSxxQkFBQTtVQUFBLGFBQUE7Q1J5SUQ7QVV4SkQ7RUFDRSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7RUFDQSxpQkFBQTtFQUNBLHVCQUFBO0NWMEpEO0FVeEpEOztFQUNFLG1CQUFBO0VBQ0EsUUFBQTtFQUNBLFlBQUE7RUFDQSxtQkFBQTtDVjJKRDtBVXpKRDtFQUE2QixxQkFBQTtDVjRKNUI7QVUzSkQ7RUFBNkIsZUFBQTtDVjhKNUI7QVU3SkQ7RUFBNEIsWUFBQTtDVmdLM0I7QUFDRDtvRUFDb0U7QVdsTHBFO0VBQWlDLGlCQUFBO0NYcUxoQztBV3BMRDtFQUFpQyxpQkFBQTtDWHVMaEM7QVd0TEQ7RUFBa0MsaUJBQUE7Q1h5TGpDO0FXeExEO0VBQXNDLGlCQUFBO0NYMkxyQztBVzFMRDtFQUFpQyxpQkFBQTtDWDZMaEM7QVc1TEQ7RUFBZ0MsaUJBQUE7Q1grTC9CO0FXOUxEO0VBQWtDLGlCQUFBO0NYaU1qQztBV2hNRDtFQUFnQyxpQkFBQTtDWG1NL0I7QVdsTUQ7RUFBZ0MsaUJBQUE7Q1hxTS9CO0FXcE1EO0VBQW9DLGlCQUFBO0NYdU1uQztBV3RNRDtFQUE4QixpQkFBQTtDWHlNN0I7QVd4TUQ7RUFBbUMsaUJBQUE7Q1gyTWxDO0FXMU1EO0VBQWlDLGlCQUFBO0NYNk1oQztBVzVNRDs7O0VBRWlDLGlCQUFBO0NYK01oQztBVzlNRDtFQUF1QyxpQkFBQTtDWGlOdEM7QVdoTkQ7RUFBd0MsaUJBQUE7Q1htTnZDO0FXbE5EO0VBQXFDLGlCQUFBO0NYcU5wQztBV3BORDtFQUFrQyxpQkFBQTtDWHVOakM7QVd0TkQ7O0VBQytCLGlCQUFBO0NYeU45QjtBV3hORDtFQUFtQyxpQkFBQTtDWDJObEM7QVcxTkQ7RUFBZ0MsaUJBQUE7Q1g2Ti9CO0FXNU5EO0VBQWtDLGlCQUFBO0NYK05qQztBVzlORDtFQUFtQyxpQkFBQTtDWGlPbEM7QVdoT0Q7RUFBZ0MsaUJBQUE7Q1htTy9CO0FXbE9EO0VBQW9DLGlCQUFBO0NYcU9uQztBV3BPRDtFQUErQyxpQkFBQTtDWHVPOUM7QVd0T0Q7RUFBNkMsaUJBQUE7Q1h5TzVDO0FXeE9EO0VBQWlDLGlCQUFBO0NYMk9oQztBVzFPRDtFQUF5QyxpQkFBQTtDWDZPeEM7QVc1T0Q7O0VBQ2tDLGlCQUFBO0NYK09qQztBVzlPRDtFQUFtQyxpQkFBQTtDWGlQbEM7QVdoUEQ7RUFBb0MsaUJBQUE7Q1htUG5DO0FXbFBEO0VBQWdDLGlCQUFBO0NYcVAvQjtBV3BQRDtFQUFnQyxpQkFBQTtDWHVQL0I7QVd0UEQ7RUFBc0MsaUJBQUE7Q1h5UHJDO0FXeFBEO0VBQXNDLGlCQUFBO0NYMlByQztBVzFQRDtFQUF1QyxpQkFBQTtDWDZQdEM7QVc1UEQ7RUFBcUMsaUJBQUE7Q1grUHBDO0FXOVBEO0VBQWtDLGlCQUFBO0NYaVFqQztBV2hRRDtFQUFtQyxpQkFBQTtDWG1RbEM7QVdsUUQ7RUFBK0IsaUJBQUE7Q1hxUTlCO0FXcFFEO0VBQWdDLGlCQUFBO0NYdVEvQjtBV3RRRDtFQUFnQyxpQkFBQTtDWHlRL0I7QVd4UUQ7RUFBb0MsaUJBQUE7Q1gyUW5DO0FXMVFEO0VBQWlDLGlCQUFBO0NYNlFoQztBVzVRRDtFQUFrQyxpQkFBQTtDWCtRakM7QVc5UUQ7RUFBZ0MsaUJBQUE7Q1hpUi9CO0FXaFJEO0VBQWdDLGlCQUFBO0NYbVIvQjtBV2xSRDtFQUFrQyxpQkFBQTtDWHFSakM7QVdwUkQ7RUFBdUMsaUJBQUE7Q1h1UnRDO0FXdFJEO0VBQXNDLGlCQUFBO0NYeVJyQztBV3hSRDtFQUFzQyxpQkFBQTtDWDJSckM7QVcxUkQ7RUFBd0MsaUJBQUE7Q1g2UnZDO0FXNVJEO0VBQXVDLGlCQUFBO0NYK1J0QztBVzlSRDtFQUF5QyxpQkFBQTtDWGlTeEM7QVdoU0Q7RUFBZ0MsaUJBQUE7Q1htUy9CO0FXbFNEOztFQUNtQyxpQkFBQTtDWHFTbEM7QVdwU0Q7RUFBa0MsaUJBQUE7Q1h1U2pDO0FXdFNEO0VBQXdDLGlCQUFBO0NYeVN2QztBV3hTRDs7O0VBRXFDLGlCQUFBO0NYMlNwQztBVzFTRDtFQUFrQyxpQkFBQTtDWDZTakM7QVc1U0Q7RUFBc0MsaUJBQUE7Q1grU3JDO0FXOVNEO0VBQWtDLGlCQUFBO0NYaVRqQztBV2hURDtFQUFnQyxpQkFBQTtDWG1UL0I7QVdsVEQ7O0VBQzJDLGlCQUFBO0NYcVQxQztBV3BURDtFQUEwQyxpQkFBQTtDWHVUekM7QVd0VEQ7RUFBMEMsaUJBQUE7Q1h5VHpDO0FXeFREO0VBQWtDLGlCQUFBO0NYMlRqQztBVzFURDtFQUF5QyxpQkFBQTtDWDZUeEM7QVc1VEQ7RUFBeUMsaUJBQUE7Q1grVHhDO0FXOVREO0VBQW9DLGlCQUFBO0NYaVVuQztBV2hVRDtFQUFnQyxpQkFBQTtDWG1VL0I7QVdsVUQ7RUFBaUMsaUJBQUE7Q1hxVWhDO0FXcFVEO0VBQWdDLGlCQUFBO0NYdVUvQjtBV3RVRDtFQUFtQyxpQkFBQTtDWHlVbEM7QVd4VUQ7RUFBd0MsaUJBQUE7Q1gyVXZDO0FXMVVEO0VBQXdDLGlCQUFBO0NYNlV2QztBVzVVRDtFQUFpQyxpQkFBQTtDWCtVaEM7QVc5VUQ7RUFBd0MsaUJBQUE7Q1hpVnZDO0FXaFZEO0VBQXlDLGlCQUFBO0NYbVZ4QztBV2xWRDtFQUF1QyxpQkFBQTtDWHFWdEM7QVdwVkQ7RUFBd0MsaUJBQUE7Q1h1VnZDO0FXdFZEO0VBQXdDLGlCQUFBO0NYeVZ2QztBV3hWRDtFQUF3QyxpQkFBQTtDWDJWdkM7QVcxVkQ7RUFBMkMsaUJBQUE7Q1g2VjFDO0FXNVZEO0VBQXVDLGlCQUFBO0NYK1Z0QztBVzlWRDtFQUFzQyxpQkFBQTtDWGlXckM7QVdoV0Q7RUFBMEMsaUJBQUE7Q1htV3pDO0FXbFdEO0VBQTBDLGlCQUFBO0NYcVd6QztBV3BXRDtFQUErQixpQkFBQTtDWHVXOUI7QVd0V0Q7RUFBc0MsaUJBQUE7Q1h5V3JDO0FXeFdEO0VBQXVDLGlCQUFBO0NYMld0QztBVzFXRDtFQUFvQyxpQkFBQTtDWDZXbkM7QVc1V0Q7RUFBc0MsaUJBQUE7Q1grV3JDO0FXOVdEOztFQUNpQyxpQkFBQTtDWGlYaEM7QVdoWEQ7RUFBa0MsaUJBQUE7Q1htWGpDO0FXbFhEO0VBQW9DLGlCQUFBO0NYcVhuQztBV3BYRDtFQUFnQyxpQkFBQTtDWHVYL0I7QVd0WEQ7RUFBaUMsaUJBQUE7Q1h5WGhDO0FXeFhEO0VBQW9DLGlCQUFBO0NYMlhuQztBVzFYRDtFQUE4QyxpQkFBQTtDWDZYN0M7QVc1WEQ7RUFBZ0MsaUJBQUE7Q1grWC9CO0FXOVhEO0VBQWdDLGlCQUFBO0NYaVkvQjtBV2hZRDtFQUFnQyxpQkFBQTtDWG1ZL0I7QVdsWUQ7RUFBK0IsaUJBQUE7Q1hxWTlCO0FXcFlEO0VBQXFDLGlCQUFBO0NYdVlwQztBV3RZRDs7RUFDZ0QsaUJBQUE7Q1h5WS9DO0FXeFlEO0VBQWlDLGlCQUFBO0NYMlloQztBVzFZRDtFQUFvQyxpQkFBQTtDWDZZbkM7QVc1WUQ7RUFBa0MsaUJBQUE7Q1grWWpDO0FXOVlEO0VBQW1DLGlCQUFBO0NYaVpsQztBV2haRDtFQUFrQyxpQkFBQTtDWG1aakM7QVdsWkQ7RUFBc0MsaUJBQUE7Q1hxWnJDO0FXcFpEO0VBQXdDLGlCQUFBO0NYdVp2QztBV3RaRDtFQUFtQyxpQkFBQTtDWHlabEM7QVd4WkQ7RUFBeUMsaUJBQUE7Q1gyWnhDO0FXMVpEO0VBQWtDLGlCQUFBO0NYNlpqQztBVzVaRDtFQUF1QyxpQkFBQTtDWCtadEM7QVc5WkQ7RUFBb0MsaUJBQUE7Q1hpYW5DO0FXaGFEO0VBQW9DLGlCQUFBO0NYbWFuQztBV2xhRDs7RUFDcUMsaUJBQUE7Q1hxYXBDO0FXcGFEO0VBQTBDLGlCQUFBO0NYdWF6QztBV3RhRDtFQUEyQyxpQkFBQTtDWHlhMUM7QVd4YUQ7RUFBd0MsaUJBQUE7Q1gyYXZDO0FXMWFEO0VBQStCLGlCQUFBO0NYNmE5QjtBVzVhRDs7RUFDZ0MsaUJBQUE7Q1grYS9CO0FXOWFEO0VBQW9DLGlCQUFBO0NYaWJuQztBV2hiRDtFQUF1QyxpQkFBQTtDWG1idEM7QVdsYkQ7RUFBeUMsaUJBQUE7Q1hxYnhDO0FXcGJEO0VBQXFDLGlCQUFBO0NYdWJwQztBV3RiRDtFQUFtQyxpQkFBQTtDWHlibEM7QVd4YkQ7RUFBb0MsaUJBQUE7Q1gyYm5DO0FXMWJEO0VBQTJDLGlCQUFBO0NYNmIxQztBVzViRDtFQUFzQyxpQkFBQTtDWCtickM7QVc5YkQ7RUFBeUMsaUJBQUE7Q1hpY3hDO0FXaGNEO0VBQW1DLGlCQUFBO0NYbWNsQztBV2xjRDtFQUFrQyxpQkFBQTtDWHFjakM7QVdwY0Q7RUFBeUMsaUJBQUE7Q1h1Y3hDO0FXdGNEO0VBQWtDLGlCQUFBO0NYeWNqQztBV3hjRDtFQUFtQyxpQkFBQTtDWDJjbEM7QVcxY0Q7RUFBaUMsaUJBQUE7Q1g2Y2hDO0FXNWNEO0VBQW9DLGlCQUFBO0NYK2NuQztBVzljRDtFQUFzQyxpQkFBQTtDWGlkckM7QVdoZEQ7RUFBd0MsaUJBQUE7Q1htZHZDO0FXbGREO0VBQW1DLGlCQUFBO0NYcWRsQztBV3BkRDs7RUFDb0MsaUJBQUE7Q1h1ZG5DO0FXdGREO0VBQWtDLGlCQUFBO0NYeWRqQztBV3hkRDtFQUFrQyxpQkFBQTtDWDJkakM7QVcxZEQ7RUFBdUMsaUJBQUE7Q1g2ZHRDO0FXNWREOztFQUMrQixpQkFBQTtDWCtkOUI7QVc5ZEQ7RUFBaUMsaUJBQUE7Q1hpZWhDO0FXaGVEO0VBQW9DLGlCQUFBO0NYbWVuQztBV2xlRDtFQUFnQyxpQkFBQTtDWHFlL0I7QVdwZUQ7RUFBdUMsaUJBQUE7Q1h1ZXRDO0FXdGVEO0VBQXdDLGlCQUFBO0NYeWV2QztBV3hlRDtFQUF1QyxpQkFBQTtDWDJldEM7QVcxZUQ7RUFBcUMsaUJBQUE7Q1g2ZXBDO0FXNWVEO0VBQXVDLGlCQUFBO0NYK2V0QztBVzllRDtFQUE2QyxpQkFBQTtDWGlmNUM7QVdoZkQ7RUFBOEMsaUJBQUE7Q1htZjdDO0FXbGZEO0VBQTJDLGlCQUFBO0NYcWYxQztBV3BmRDtFQUE2QyxpQkFBQTtDWHVmNUM7QVd0ZkQ7RUFBaUMsaUJBQUE7Q1h5ZmhDO0FXeGZEO0VBQWtDLGlCQUFBO0NYMmZqQztBVzFmRDtFQUFpQyxpQkFBQTtDWDZmaEM7QVc1ZkQ7RUFBa0MsaUJBQUE7Q1grZmpDO0FXOWZEO0VBQXFDLGlCQUFBO0NYaWdCcEM7QVdoZ0JEO0VBQXNDLGlCQUFBO0NYbWdCckM7QVdsZ0JEOztFQUNpQyxpQkFBQTtDWHFnQmhDO0FXcGdCRDs7RUFDZ0MsaUJBQUE7Q1h1Z0IvQjtBV3RnQkQ7RUFBaUMsaUJBQUE7Q1h5Z0JoQztBV3hnQkQ7RUFBaUMsaUJBQUE7Q1gyZ0JoQztBVzFnQkQ7O0VBQ29DLGlCQUFBO0NYNmdCbkM7QVc1Z0JEOztFQUNtQyxpQkFBQTtDWCtnQmxDO0FXOWdCRDtFQUFxQyxpQkFBQTtDWGloQnBDO0FXaGhCRDs7RUFDb0MsaUJBQUE7Q1htaEJuQztBV2xoQkQ7RUFBa0MsaUJBQUE7Q1hxaEJqQztBV3BoQkQ7OztFQUVnQyxpQkFBQTtDWHVoQi9CO0FXdGhCRDtFQUFtQyxpQkFBQTtDWHloQmxDO0FXeGhCRDtFQUFtQyxpQkFBQTtDWDJoQmxDO0FXMWhCRDtFQUF5QyxpQkFBQTtDWDZoQnhDO0FXNWhCRDtFQUFxQyxpQkFBQTtDWCtoQnBDO0FXOWhCRDtFQUFpQyxpQkFBQTtDWGlpQmhDO0FXaGlCRDtFQUFpQyxpQkFBQTtDWG1pQmhDO0FXbGlCRDtFQUFpQyxpQkFBQTtDWHFpQmhDO0FXcGlCRDtFQUFxQyxpQkFBQTtDWHVpQnBDO0FXdGlCRDtFQUE0QyxpQkFBQTtDWHlpQjNDO0FXeGlCRDtFQUE4QyxpQkFBQTtDWDJpQjdDO0FXMWlCRDtFQUF1QyxpQkFBQTtDWDZpQnRDO0FXNWlCRDtFQUFpQyxpQkFBQTtDWCtpQmhDO0FXOWlCRDtFQUFzQyxpQkFBQTtDWGlqQnJDO0FXaGpCRDtFQUFvQyxpQkFBQTtDWG1qQm5DO0FXbGpCRDtFQUFzQyxpQkFBQTtDWHFqQnJDO0FXcGpCRDtFQUF1QyxpQkFBQTtDWHVqQnRDO0FXdGpCRDtFQUFtQyxpQkFBQTtDWHlqQmxDO0FXeGpCRDs7RUFDZ0MsaUJBQUE7Q1gyakIvQjtBVzFqQkQ7O0VBQ3FDLGlCQUFBO0NYNmpCcEM7QVc1akJEOztFQUNvQyxpQkFBQTtDWCtqQm5DO0FXOWpCRDtFQUFvQyxpQkFBQTtDWGlrQm5DO0FXaGtCRDtFQUFvQyxpQkFBQTtDWG1rQm5DO0FXbGtCRDs7RUFDZ0MsaUJBQUE7Q1hxa0IvQjtBV3BrQkQ7O0VBQ2lDLGlCQUFBO0NYdWtCaEM7QVd0a0JEOztFQUNzQyxpQkFBQTtDWHlrQnJDO0FXeGtCRDtFQUFxQyxpQkFBQTtDWDJrQnBDO0FXMWtCRDtFQUFzQyxpQkFBQTtDWDZrQnJDO0FXNWtCRDs7RUFDZ0MsaUJBQUE7Q1gra0IvQjtBVzlrQkQ7RUFBbUMsaUJBQUE7Q1hpbEJsQztBV2hsQkQ7RUFBb0MsaUJBQUE7Q1htbEJuQztBV2xsQkQ7O0VBQ3FDLGlCQUFBO0NYcWxCcEM7QVdwbEJEO0VBQXVDLGlCQUFBO0NYdWxCdEM7QVd0bEJEO0VBQW9DLGlCQUFBO0NYeWxCbkM7QVd4bEJEO0VBQTBDLGlCQUFBO0NYMmxCekM7QVcxbEJEO0VBQXdDLGlCQUFBO0NYNmxCdkM7QVc1bEJEO0VBQW1DLGlCQUFBO0NYK2xCbEM7QVc5bEJEO0VBQXVDLGlCQUFBO0NYaW1CdEM7QVdobUJEO0VBQW9DLGlCQUFBO0NYbW1CbkM7QVdsbUJEO0VBQWtDLGlCQUFBO0NYcW1CakM7QVdwbUJEO0VBQWtDLGlCQUFBO0NYdW1CakM7QVd0bUJEO0VBQW1DLGlCQUFBO0NYeW1CbEM7QVd4bUJEO0VBQXVDLGlCQUFBO0NYMm1CdEM7QVcxbUJEO0VBQXNDLGlCQUFBO0NYNm1CckM7QVc1bUJEO0VBQXNDLGlCQUFBO0NYK21CckM7QVc5bUJEO0VBQXFDLGlCQUFBO0NYaW5CcEM7QVdobkJEO0VBQWtDLGlCQUFBO0NYbW5CakM7QVdsbkJEO0VBQXVDLGlCQUFBO0NYcW5CdEM7QVdwbkJEO0VBQWdDLGlCQUFBO0NYdW5CL0I7QVd0bkJEO0VBQW9DLGlCQUFBO0NYeW5CbkM7QVd4bkJEO0VBQXVDLGlCQUFBO0NYMm5CdEM7QVcxbkJEO0VBQTZDLGlCQUFBO0NYNm5CNUM7QVc1bkJEO0VBQThDLGlCQUFBO0NYK25CN0M7QVc5bkJEO0VBQTJDLGlCQUFBO0NYaW9CMUM7QVdob0JEO0VBQTZDLGlCQUFBO0NYbW9CNUM7QVdsb0JEO0VBQXNDLGlCQUFBO0NYcW9CckM7QVdwb0JEO0VBQXVDLGlCQUFBO0NYdW9CdEM7QVd0b0JEO0VBQW9DLGlCQUFBO0NYeW9CbkM7QVd4b0JEO0VBQXNDLGlCQUFBO0NYMm9CckM7QVcxb0JEO0VBQW1DLGlCQUFBO0NYNm9CbEM7QVc1b0JEO0VBQWtDLGlCQUFBO0NYK29CakM7QVc5b0JEO0VBQWtDLGlCQUFBO0NYaXBCakM7QVdocEJEOztFQUNrQyxpQkFBQTtDWG1wQmpDO0FXbHBCRDtFQUFvQyxpQkFBQTtDWHFwQm5DO0FXcHBCRDtFQUFzQyxpQkFBQTtDWHVwQnJDO0FXdHBCRDtFQUF1QyxpQkFBQTtDWHlwQnRDO0FXeHBCRDtFQUFtQyxpQkFBQTtDWDJwQmxDO0FXMXBCRDtFQUFrQyxpQkFBQTtDWDZwQmpDO0FXNXBCRDs7RUFDaUMsaUJBQUE7Q1grcEJoQztBVzlwQkQ7RUFBc0MsaUJBQUE7Q1hpcUJyQztBV2hxQkQ7RUFBb0MsaUJBQUE7Q1htcUJuQztBV2xxQkQ7RUFBeUMsaUJBQUE7Q1hxcUJ4QztBV3BxQkQ7RUFBbUMsaUJBQUE7Q1h1cUJsQztBV3RxQkQ7RUFBbUMsaUJBQUE7Q1h5cUJsQztBV3hxQkQ7RUFBaUMsaUJBQUE7Q1gycUJoQztBVzFxQkQ7RUFBbUMsaUJBQUE7Q1g2cUJsQztBVzVxQkQ7RUFBc0MsaUJBQUE7Q1grcUJyQztBVzlxQkQ7RUFBa0MsaUJBQUE7Q1hpckJqQztBV2hyQkQ7RUFBMEMsaUJBQUE7Q1htckJ6QztBV2xyQkQ7RUFBb0MsaUJBQUE7Q1hxckJuQztBV3ByQkQ7RUFBZ0MsaUJBQUE7Q1h1ckIvQjtBV3RyQkQ7O0VBQ3FDLGlCQUFBO0NYeXJCcEM7QVd4ckJEOzs7RUFFdUMsaUJBQUE7Q1gyckJ0QztBVzFyQkQ7RUFBMEMsaUJBQUE7Q1g2ckJ6QztBVzVyQkQ7RUFBZ0MsaUJBQUE7Q1grckIvQjtBVzlyQkQ7RUFBcUMsaUJBQUE7Q1hpc0JwQztBV2hzQkQ7O0VBQ3dDLGlCQUFBO0NYbXNCdkM7QVdsc0JEO0VBQW9DLGlCQUFBO0NYcXNCbkM7QVdwc0JEO0VBQWdDLGlCQUFBO0NYdXNCL0I7QVd0c0JEO0VBQXVDLGlCQUFBO0NYeXNCdEM7QVd4c0JEO0VBQXVDLGlCQUFBO0NYMnNCdEM7QVcxc0JEO0VBQXFDLGlCQUFBO0NYNnNCcEM7QVc1c0JEO0VBQWtDLGlCQUFBO0NYK3NCakM7QVc5c0JEO0VBQXdDLGlCQUFBO0NYaXRCdkM7QVdodEJEO0VBQXNDLGlCQUFBO0NYbXRCckM7QVdsdEJEO0VBQTRDLGlCQUFBO0NYcXRCM0M7QVdwdEJEO0VBQWtDLGlCQUFBO0NYdXRCakM7QVd0dEJEO0VBQXNDLGlCQUFBO0NYeXRCckM7QVd4dEJEO0VBQTZDLGlCQUFBO0NYMnRCNUM7QVcxdEJEO0VBQWtDLGlCQUFBO0NYNnRCakM7QVc1dEJEO0VBQWtDLGlCQUFBO0NYK3RCakM7QVc5dEJEO0VBQStDLGlCQUFBO0NYaXVCOUM7QVdodUJEO0VBQWdELGlCQUFBO0NYbXVCL0M7QVdsdUJEO0VBQTZDLGlCQUFBO0NYcXVCNUM7QVdwdUJEO0VBQStDLGlCQUFBO0NYdXVCOUM7QVd0dUJEO0VBQWlDLGlCQUFBO0NYeXVCaEM7QVd4dUJEO0VBQWdDLGlCQUFBO0NYMnVCL0I7QVcxdUJEO0VBQWtDLGlCQUFBO0NYNnVCakM7QVc1dUJEO0VBQXNDLGlCQUFBO0NYK3VCckM7QVc5dUJEO0VBQW9DLGlCQUFBO0NYaXZCbkM7QVdodkJEO0VBQXNDLGlCQUFBO0NYbXZCckM7QVdsdkJEO0VBQXNDLGlCQUFBO0NYcXZCckM7QVdwdkJEO0VBQXNDLGlCQUFBO0NYdXZCckM7QVd0dkJEO0VBQXVDLGlCQUFBO0NYeXZCdEM7QVd4dkJEO0VBQWtDLGlCQUFBO0NYMnZCakM7QVcxdkJEO0VBQXdDLGlCQUFBO0NYNnZCdkM7QVc1dkJEO0VBQTBDLGlCQUFBO0NYK3ZCekM7QVc5dkJEO0VBQW9DLGlCQUFBO0NYaXdCbkM7QVdod0JEO0VBQXNDLGlCQUFBO0NYbXdCckM7QVdsd0JEO0VBQXdDLGlCQUFBO0NYcXdCdkM7QVdwd0JEO0VBQXlDLGlCQUFBO0NYdXdCeEM7QVd0d0JEO0VBQWdELGlCQUFBO0NYeXdCL0M7QVd4d0JEO0VBQXdDLGlCQUFBO0NYMndCdkM7QVcxd0JEO0VBQW1DLGlCQUFBO0NYNndCbEM7QVc1d0JEOztFQUMrQyxpQkFBQTtDWCt3QjlDO0FXOXdCRDs7RUFDNkMsaUJBQUE7Q1hpeEI1QztBV2h4QkQ7O0VBQ2dELGlCQUFBO0NYbXhCL0M7QVdseEJEOztFQUMrQixpQkFBQTtDWHF4QjlCO0FXcHhCRDtFQUErQixpQkFBQTtDWHV4QjlCO0FXdHhCRDs7RUFDK0IsaUJBQUE7Q1h5eEI5QjtBV3h4QkQ7O0VBQytCLGlCQUFBO0NYMnhCOUI7QVcxeEJEOzs7O0VBRytCLGlCQUFBO0NYNnhCOUI7QVc1eEJEOzs7RUFFK0IsaUJBQUE7Q1greEI5QjtBVzl4QkQ7O0VBQytCLGlCQUFBO0NYaXlCOUI7QVdoeUJEOztFQUMrQixpQkFBQTtDWG15QjlCO0FXbHlCRDtFQUFnQyxpQkFBQTtDWHF5Qi9CO0FXcHlCRDtFQUFxQyxpQkFBQTtDWHV5QnBDO0FXdHlCRDtFQUEwQyxpQkFBQTtDWHl5QnpDO0FXeHlCRDtFQUEyQyxpQkFBQTtDWDJ5QjFDO0FXMXlCRDtFQUEyQyxpQkFBQTtDWDZ5QjFDO0FXNXlCRDtFQUE0QyxpQkFBQTtDWCt5QjNDO0FXOXlCRDtFQUE0QyxpQkFBQTtDWGl6QjNDO0FXaHpCRDtFQUE2QyxpQkFBQTtDWG16QjVDO0FXbHpCRDtFQUFxQyxpQkFBQTtDWHF6QnBDO0FXcHpCRDtFQUF1QyxpQkFBQTtDWHV6QnRDO0FXdHpCRDtFQUEwQyxpQkFBQTtDWHl6QnpDO0FXeHpCRDtFQUFtQyxpQkFBQTtDWDJ6QmxDO0FXMXpCRDtFQUFnQyxpQkFBQTtDWDZ6Qi9CO0FXNXpCRDtFQUF1QyxpQkFBQTtDWCt6QnRDO0FXOXpCRDtFQUF3QyxpQkFBQTtDWGkwQnZDO0FXaDBCRDtFQUFtQyxpQkFBQTtDWG0wQmxDO0FXbDBCRDtFQUEwQyxpQkFBQTtDWHEwQnpDO0FXcDBCRDtFQUFxQyxpQkFBQTtDWHUwQnBDO0FXdDBCRDtFQUFrQyxpQkFBQTtDWHkwQmpDO0FXeDBCRDtFQUErQixpQkFBQTtDWDIwQjlCO0FXMTBCRDtFQUFxQyxpQkFBQTtDWDYwQnBDO0FXNTBCRDtFQUE0QyxpQkFBQTtDWCswQjNDO0FXOTBCRDtFQUFrQyxpQkFBQTtDWGkxQmpDO0FXaDFCRDtFQUF5QyxpQkFBQTtDWG0xQnhDO0FXbDFCRDtFQUEyQyxpQkFBQTtDWHExQjFDO0FXcDFCRDtFQUF5QyxpQkFBQTtDWHUxQnhDO0FXdDFCRDtFQUEyQyxpQkFBQTtDWHkxQjFDO0FXeDFCRDtFQUE0QyxpQkFBQTtDWDIxQjNDO0FXMTFCRDtFQUFpQyxpQkFBQTtDWDYxQmhDO0FXNTFCRDtFQUFtQyxpQkFBQTtDWCsxQmxDO0FXOTFCRDtFQUFtQyxpQkFBQTtDWGkyQmxDO0FXaDJCRDtFQUFpQyxpQkFBQTtDWG0yQmhDO0FXbDJCRDtFQUFvQyxpQkFBQTtDWHEyQm5DO0FXcDJCRDtFQUFpQyxpQkFBQTtDWHUyQmhDO0FXdDJCRDtFQUFzQyxpQkFBQTtDWHkyQnJDO0FXeDJCRDtFQUFrQyxpQkFBQTtDWDIyQmpDO0FXMTJCRDtFQUFrQyxpQkFBQTtDWDYyQmpDO0FXNTJCRDtFQUFnQyxpQkFBQTtDWCsyQi9CO0FXOTJCRDs7RUFDb0MsaUJBQUE7Q1hpM0JuQztBV2gzQkQ7RUFBaUMsaUJBQUE7Q1htM0JoQztBV2wzQkQ7RUFBa0MsaUJBQUE7Q1hxM0JqQztBV3AzQkQ7RUFBbUMsaUJBQUE7Q1h1M0JsQztBV3QzQkQ7RUFBK0IsaUJBQUE7Q1h5M0I5QjtBV3gzQkQ7RUFBOEIsaUJBQUE7Q1gyM0I3QjtBVzEzQkQ7RUFBaUMsaUJBQUE7Q1g2M0JoQztBVzUzQkQ7RUFBa0MsaUJBQUE7Q1grM0JqQztBVzkzQkQ7RUFBcUMsaUJBQUE7Q1hpNEJwQztBV2g0QkQ7RUFBMEMsaUJBQUE7Q1htNEJ6QztBV2w0QkQ7RUFBZ0QsaUJBQUE7Q1hxNEIvQztBV3A0QkQ7RUFBK0MsaUJBQUE7Q1h1NEI5QztBV3Q0QkQ7O0VBQytDLGlCQUFBO0NYeTRCOUM7QVd4NEJEO0VBQXdDLGlCQUFBO0NYMjRCdkM7QVcxNEJEO0VBQXNDLGlCQUFBO0NYNjRCckM7QVc1NEJEO0VBQXdDLGlCQUFBO0NYKzRCdkM7QVc5NEJEOztFQUMrQixpQkFBQTtDWGk1QjlCO0FXaDVCRDtFQUF5QyxpQkFBQTtDWG01QnhDO0FXbDVCRDtFQUF5QyxpQkFBQTtDWHE1QnhDO0FXcDVCRDtFQUFpQyxpQkFBQTtDWHU1QmhDO0FXdDVCRDtFQUEyQyxpQkFBQTtDWHk1QjFDO0FXeDVCRDtFQUFxQyxpQkFBQTtDWDI1QnBDO0FXMTVCRDtFQUFrQyxpQkFBQTtDWDY1QmpDO0FXNTVCRDs7O0VBRXNDLGlCQUFBO0NYKzVCckM7QVc5NUJEOztFQUMwQyxpQkFBQTtDWGk2QnpDO0FXaDZCRDtFQUFpQyxpQkFBQTtDWG02QmhDO0FXbDZCRDtFQUFrQyxpQkFBQTtDWHE2QmpDO0FXcDZCRDtFQUFrQyxpQkFBQTtDWHU2QmpDO0FXdDZCRDtFQUF5QyxpQkFBQTtDWHk2QnhDO0FXeDZCRDtFQUE4QyxpQkFBQTtDWDI2QjdDO0FXMTZCRDtFQUF1QyxpQkFBQTtDWDY2QnRDO0FXNTZCRDtFQUFxQyxpQkFBQTtDWCs2QnBDO0FXOTZCRDtFQUFnQyxpQkFBQTtDWGk3Qi9CO0FXaDdCRDtFQUFzQyxpQkFBQTtDWG03QnJDO0FXbDdCRDtFQUEwQyxpQkFBQTtDWHE3QnpDO0FXcDdCRDtFQUFrQyxpQkFBQTtDWHU3QmpDO0FXdDdCRDtFQUFrQyxpQkFBQTtDWHk3QmpDO0FXeDdCRDtFQUFvQyxpQkFBQTtDWDI3Qm5DO0FXMTdCRDtFQUErQixpQkFBQTtDWDY3QjlCO0FXNTdCRDtFQUFvQyxpQkFBQTtDWCs3Qm5DO0FXOTdCRDtFQUFpQyxpQkFBQTtDWGk4QmhDO0FXaDhCRDtFQUErQixpQkFBQTtDWG04QjlCO0FXbDhCRDtFQUFpQyxpQkFBQTtDWHE4QmhDO0FXcDhCRDtFQUFnQyxpQkFBQTtDWHU4Qi9CO0FXdDhCRDtFQUFpQyxpQkFBQTtDWHk4QmhDO0FXeDhCRDtFQUFtQyxpQkFBQTtDWDI4QmxDO0FXMThCRDtFQUEwQyxpQkFBQTtDWDY4QnpDO0FXNThCRDtFQUFpQyxpQkFBQTtDWCs4QmhDO0FXOThCRDtFQUF3QyxpQkFBQTtDWGk5QnZDO0FXaDlCRDtFQUFtQyxpQkFBQTtDWG05QmxDO0FXbDlCRDs7RUFDK0IsaUJBQUE7Q1hxOUI5QjtBV3A5QkQ7O0VBQ2dDLGlCQUFBO0NYdTlCL0I7QVd0OUJEO0VBQWdDLGlCQUFBO0NYeTlCL0I7QVd4OUJEO0VBQW1DLGlCQUFBO0NYMjlCbEM7QVcxOUJEO0VBQXNDLGlCQUFBO0NYNjlCckM7QVc1OUJEO0VBQXNDLGlCQUFBO0NYKzlCckM7QVc5OUJEO0VBQW9DLGlCQUFBO0NYaStCbkM7QVdoK0JEO0VBQXNDLGlCQUFBO0NYbStCckM7QVdsK0JEO0VBQXVDLGlCQUFBO0NYcStCdEM7QVdwK0JEO0VBQXdDLGlCQUFBO0NYdStCdkM7QVd0K0JEO0VBQTZDLGlCQUFBO0NYeStCNUM7QVd4K0JEOzs7RUFFd0MsaUJBQUE7Q1gyK0J2QztBVzErQkQ7O0VBQzBDLGlCQUFBO0NYNitCekM7QVc1K0JEOztFQUN3QyxpQkFBQTtDWCsrQnZDO0FXOStCRDs7RUFDd0MsaUJBQUE7Q1hpL0J2QztBV2gvQkQ7RUFBdUMsaUJBQUE7Q1htL0J0QztBV2wvQkQ7RUFBZ0MsaUJBQUE7Q1hxL0IvQjtBV3AvQkQ7RUFBbUMsaUJBQUE7Q1h1L0JsQztBV3QvQkQ7RUFBb0MsaUJBQUE7Q1h5L0JuQztBV3gvQkQ7Ozs7O0VBSXFDLGlCQUFBO0NYMi9CcEM7QVcxL0JEO0VBQTBDLGlCQUFBO0NYNi9CekM7QVc1L0JEOztFQUNpQyxpQkFBQTtDWCsvQmhDO0FXOS9CRDs7RUFDa0MsaUJBQUE7Q1hpZ0NqQztBV2hnQ0Q7RUFBc0MsaUJBQUE7Q1htZ0NyQztBV2xnQ0Q7RUFBK0IsaUJBQUE7Q1hxZ0M5QjtBV3BnQ0Q7OztFQUV1QyxpQkFBQTtDWHVnQ3RDO0FXdGdDRDtFQUF5QyxpQkFBQTtDWHlnQ3hDO0FXeGdDRDtFQUE4QixpQkFBQTtDWDJnQzdCO0FXMWdDRDs7RUFDa0MsaUJBQUE7Q1g2Z0NqQztBVzVnQ0Q7O0VBQ3VDLGlCQUFBO0NYK2dDdEM7QVc5Z0NEOztFQUN5QyxpQkFBQTtDWGloQ3hDO0FXaGhDRDtFQUFtQyxpQkFBQTtDWG1oQ2xDO0FXbGhDRDtFQUF1QyxpQkFBQTtDWHFoQ3RDO0FXcGhDRDtFQUFrQyxpQkFBQTtDWHVoQ2pDO0FXdGhDRDtFQUFxQyxpQkFBQTtDWHloQ3BDO0FXeGhDRDtFQUFtQyxpQkFBQTtDWDJoQ2xDO0FXMWhDRDtFQUFxQyxpQkFBQTtDWDZoQ3BDO0FXNWhDRDtFQUE0QyxpQkFBQTtDWCtoQzNDO0FXOWhDRDtFQUFnQyxpQkFBQTtDWGlpQy9CO0FXaGlDRDs7RUFDb0MsaUJBQUE7Q1htaUNuQztBV2xpQ0Q7RUFBK0IsaUJBQUE7Q1hxaUM5QjtBV3BpQ0Q7RUFBc0MsaUJBQUE7Q1h1aUNyQztBV3RpQ0Q7RUFBZ0MsaUJBQUE7Q1h5aUMvQjtBV3hpQ0Q7RUFBc0MsaUJBQUE7Q1gyaUNyQztBVzFpQ0Q7RUFBa0MsaUJBQUE7Q1g2aUNqQztBVzVpQ0Q7RUFBZ0MsaUJBQUE7Q1graUMvQjtBVzlpQ0Q7RUFBdUMsaUJBQUE7Q1hpakN0QztBV2hqQ0Q7RUFBZ0MsaUJBQUE7Q1htakMvQjtBV2xqQ0Q7RUFBc0MsaUJBQUE7Q1hxakNyQztBV3BqQ0Q7RUFBa0MsaUJBQUE7Q1h1akNqQztBV3RqQ0Q7RUFBeUMsaUJBQUE7Q1h5akN4QztBV3hqQ0Q7RUFBbUMsaUJBQUE7Q1gyakNsQztBVzFqQ0Q7RUFBeUMsaUJBQUE7Q1g2akN4QztBVzVqQ0Q7RUFBdUMsaUJBQUE7Q1grakN0QztBVzlqQ0Q7RUFBbUMsaUJBQUE7Q1hpa0NsQztBV2hrQ0Q7RUFBcUMsaUJBQUE7Q1hta0NwQztBV2xrQ0Q7RUFBcUMsaUJBQUE7Q1hxa0NwQztBV3BrQ0Q7RUFBc0MsaUJBQUE7Q1h1a0NyQztBV3RrQ0Q7RUFBd0MsaUJBQUE7Q1h5a0N2QztBV3hrQ0Q7RUFBaUMsaUJBQUE7Q1gya0NoQztBVzFrQ0Q7RUFBcUMsaUJBQUE7Q1g2a0NwQztBVzVrQ0Q7RUFBOEIsaUJBQUE7Q1gra0M3QjtBVzlrQ0Q7RUFBc0MsaUJBQUE7Q1hpbENyQztBV2hsQ0Q7RUFBdUMsaUJBQUE7Q1htbEN0QztBV2xsQ0Q7RUFBeUMsaUJBQUE7Q1hxbEN4QztBV3BsQ0Q7RUFBc0MsaUJBQUE7Q1h1bENyQztBV3RsQ0Q7RUFBcUMsaUJBQUE7Q1h5bENwQztBV3hsQ0Q7RUFBc0MsaUJBQUE7Q1gybENyQztBVzFsQ0Q7RUFBa0MsaUJBQUE7Q1g2bENqQztBVzVsQ0Q7RUFBeUMsaUJBQUE7Q1grbEN4QztBVzlsQ0Q7RUFBc0MsaUJBQUE7Q1hpbUNyQztBV2htQ0Q7RUFBcUMsaUJBQUE7Q1htbUNwQztBV2xtQ0Q7RUFBbUMsaUJBQUE7Q1hxbUNsQztBV3BtQ0Q7RUFBK0IsaUJBQUE7Q1h1bUM5QjtBV3RtQ0Q7RUFBbUMsaUJBQUE7Q1h5bUNsQztBV3htQ0Q7RUFBcUMsaUJBQUE7Q1gybUNwQztBVzFtQ0Q7RUFBOEIsaUJBQUE7Q1g2bUM3QjtBVzVtQ0Q7OztFQUUrQixpQkFBQTtDWCttQzlCO0FXOW1DRDtFQUFvQyxpQkFBQTtDWGluQ25DO0FXaG5DRDtFQUFzQyxpQkFBQTtDWG1uQ3JDO0FXbG5DRDtFQUEwQyxpQkFBQTtDWHFuQ3pDO0FXcG5DRDtFQUFvQyxpQkFBQTtDWHVuQ25DO0FXdG5DRDtFQUFvQyxpQkFBQTtDWHluQ25DO0FXeG5DRDtFQUFtQyxpQkFBQTtDWDJuQ2xDO0FXMW5DRDtFQUFrQyxpQkFBQTtDWDZuQ2pDO0FXNW5DRDtFQUF3QyxpQkFBQTtDWCtuQ3ZDO0FXOW5DRDtFQUF1QyxpQkFBQTtDWGlvQ3RDO0FXaG9DRDtFQUFvQyxpQkFBQTtDWG1vQ25DO0FXbG9DRDtFQUFxQyxpQkFBQTtDWHFvQ3BDO0FXcG9DRDtFQUEyQyxpQkFBQTtDWHVvQzFDO0FXdG9DRDtFQUFtQyxpQkFBQTtDWHlvQ2xDO0FXeG9DRDtFQUFnQyxpQkFBQTtDWDJvQy9CO0FXMW9DRDtFQUF1QyxpQkFBQTtDWDZvQ3RDO0FXNW9DRDtFQUFzQyxpQkFBQTtDWCtvQ3JDO0FXOW9DRDtFQUF1QyxpQkFBQTtDWGlwQ3RDO0FXaHBDRDtFQUFxQyxpQkFBQTtDWG1wQ3BDO0FXbHBDRDtFQUFpQyxpQkFBQTtDWHFwQ2hDO0FXcHBDRDtFQUFnQyxpQkFBQTtDWHVwQy9CO0FXdHBDRDtFQUFtQyxpQkFBQTtDWHlwQ2xDO0FXeHBDRDs7RUFDdUMsaUJBQUE7Q1gycEN0QztBVzFwQ0Q7RUFBMkMsaUJBQUE7Q1g2cEMxQztBVzVwQ0Q7RUFBd0MsaUJBQUE7Q1grcEN2QztBVzlwQ0Q7RUFBdUMsaUJBQUE7Q1hpcUN0QztBV2hxQ0Q7RUFBc0MsaUJBQUE7Q1htcUNyQztBV2xxQ0Q7RUFBdUMsaUJBQUE7Q1hxcUN0QztBV3BxQ0Q7RUFBeUMsaUJBQUE7Q1h1cUN4QztBV3RxQ0Q7RUFBeUMsaUJBQUE7Q1h5cUN4QztBV3hxQ0Q7RUFBa0MsaUJBQUE7Q1gycUNqQztBVzFxQ0Q7RUFBc0MsaUJBQUE7Q1g2cUNyQztBVzVxQ0Q7RUFBNkMsaUJBQUE7Q1grcUM1QztBVzlxQ0Q7RUFBdUMsaUJBQUE7Q1hpckN0QztBV2hyQ0Q7RUFBb0MsaUJBQUE7Q1htckNuQztBV2xyQ0Q7RUFBa0MsaUJBQUE7Q1hxckNqQztBV3ByQ0Q7RUFBcUMsaUJBQUE7Q1h1ckNwQztBV3RyQ0Q7RUFBc0MsaUJBQUE7Q1h5ckNyQztBV3hyQ0Q7O0VBQytCLGlCQUFBO0NYMnJDOUI7QVcxckNEO0VBQW1DLGlCQUFBO0NYNnJDbEM7QVc1ckNEO0VBQWlDLGlCQUFBO0NYK3JDaEM7QVc5ckNEO0VBQWtDLGlCQUFBO0NYaXNDakM7QVdoc0NEO0VBQWtDLGlCQUFBO0NYbXNDakM7QVdsc0NEOztFQUN3QyxpQkFBQTtDWHFzQ3ZDO0FXcHNDRDtFQUF5QyxpQkFBQTtDWHVzQ3hDO0FXdHNDRDtFQUFvQyxpQkFBQTtDWHlzQ25DO0FXeHNDRDtFQUF3QyxpQkFBQTtDWDJzQ3ZDO0FXMXNDRDs7RUFDd0MsaUJBQUE7Q1g2c0N2QztBVzVzQ0Q7O0VBQ2tELGlCQUFBO0NYK3NDakQ7QVc5c0NEOztFQUN3QyxpQkFBQTtDWGl0Q3ZDO0FXaHRDRDs7RUFDMkMsaUJBQUE7Q1htdEMxQztBV2x0Q0Q7O0VBQ3lDLGlCQUFBO0NYcXRDeEM7QVdwdENEO0VBQXlDLGlCQUFBO0NYdXRDeEM7QVd0dENEO0VBQW9DLGlCQUFBO0NYeXRDbkM7QVd4dENEO0VBQXdDLGlCQUFBO0NYMnRDdkM7QVcxdENEO0VBQTBDLGlCQUFBO0NYNnRDekM7QVc1dENEO0VBQXVDLGlCQUFBO0NYK3RDdEM7QVc5dENEO0VBQXlDLGlCQUFBO0NYaXVDeEM7QVdodUNEO0VBQWtDLGlCQUFBO0NYbXVDakM7QVdsdUNEO0VBQTBDLGlCQUFBO0NYcXVDekM7QVdwdUNEO0VBQWlDLGlCQUFBO0NYdXVDaEM7QVd0dUNEO0VBQXlDLGlCQUFBO0NYeXVDeEM7QVd4dUNEO0VBQXVDLGlCQUFBO0NYMnVDdEM7QVcxdUNEOztFQUMyQyxpQkFBQTtDWDZ1QzFDO0FXNXVDRDs7RUFDMEMsaUJBQUE7Q1grdUN6QztBVzl1Q0Q7O0VBQ3lDLGlCQUFBO0NYaXZDeEM7QVdodkNEO0VBQXFDLGlCQUFBO0NYbXZDcEM7QVdsdkNEOztFQUN1QyxpQkFBQTtDWHF2Q3RDO0FXcHZDRDs7RUFDd0MsaUJBQUE7Q1h1dkN2QztBV3R2Q0Q7RUFBMkMsaUJBQUE7Q1h5dkMxQztBV3h2Q0Q7RUFBeUMsaUJBQUE7Q1gydkN4QztBVzF2Q0Q7RUFBd0MsaUJBQUE7Q1g2dkN2QztBVzV2Q0Q7RUFBMEMsaUJBQUE7Q1grdkN6QztBVzl2Q0Q7RUFBd0MsaUJBQUE7Q1hpd0N2QztBV2h3Q0Q7RUFBcUMsaUJBQUE7Q1htd0NwQztBV2x3Q0Q7RUFBc0MsaUJBQUE7Q1hxd0NyQztBV3B3Q0Q7RUFBNEMsaUJBQUE7Q1h1d0MzQztBV3R3Q0Q7RUFBOEIsaUJBQUE7Q1h5d0M3QjtBV3h3Q0Q7RUFBcUMsaUJBQUE7Q1gyd0NwQztBVzF3Q0Q7RUFBdUMsaUJBQUE7Q1g2d0N0QztBVzV3Q0Q7RUFBeUMsaUJBQUE7Q1grd0N4QztBVzl3Q0Q7RUFBZ0QsaUJBQUE7Q1hpeEMvQztBV2h4Q0Q7RUFBc0MsaUJBQUE7Q1hteENyQztBV2x4Q0Q7RUFBdUMsaUJBQUE7Q1hxeEN0QztBV3B4Q0Q7RUFBa0MsaUJBQUE7Q1h1eENqQztBV3R4Q0Q7RUFBa0MsaUJBQUE7Q1h5eENqQztBV3h4Q0Q7RUFBbUMsaUJBQUE7Q1gyeENsQztBVzF4Q0Q7RUFBaUMsaUJBQUE7Q1g2eENoQztBVzV4Q0Q7RUFBNkMsaUJBQUE7Q1greEM1QztBVzl4Q0Q7O0VBQ3NDLGlCQUFBO0NYaXlDckM7QVdoeUNEO0VBQWtDLGlCQUFBO0NYbXlDakM7QVdseUNEO0VBQWlDLGlCQUFBO0NYcXlDaEM7QVdweUNEO0VBQWtDLGlCQUFBO0NYdXlDakM7QVd0eUNEO0VBQTJDLGlCQUFBO0NYeXlDMUM7QVd4eUNEO0VBQTRDLGlCQUFBO0NYMnlDM0M7QVcxeUNEO0VBQTRDLGlCQUFBO0NYNnlDM0M7QVc1eUNEO0VBQTRDLGlCQUFBO0NYK3lDM0M7QVc5eUNEO0VBQW9DLGlCQUFBO0NYaXpDbkM7QVdoekNEO0VBQW1DLGlCQUFBO0NYbXpDbEM7QVdsekNEO0VBQXFDLGlCQUFBO0NYcXpDcEM7QVdwekNEO0VBQWlDLGlCQUFBO0NYdXpDaEM7QVd0ekNEO0VBQStCLGlCQUFBO0NYeXpDOUI7QVd4ekNEO0VBQXNDLGlCQUFBO0NYMnpDckM7QVcxekNEO0VBQXdDLGlCQUFBO0NYNnpDdkM7QVc1ekNEO0VBQWlDLGlCQUFBO0NYK3pDaEM7QVc5ekNEO0VBQWlDLGlCQUFBO0NYaTBDaEM7QVdoMENEO0VBQXFDLGlCQUFBO0NYbTBDcEM7QVdsMENEO0VBQXFDLGlCQUFBO0NYcTBDcEMiLCJmaWxlIjoiZm9udC1hd2Vzb21lLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogIEZvbnQgQXdlc29tZSA0LjQuMCBieSBAZGF2ZWdhbmR5IC0gaHR0cDovL2ZvbnRhd2Vzb21lLmlvIC0gQGZvbnRhd2Vzb21lXG4gKiAgTGljZW5zZSAtIGh0dHA6Ly9mb250YXdlc29tZS5pby9saWNlbnNlIChGb250OiBTSUwgT0ZMIDEuMSwgQ1NTOiBNSVQgTGljZW5zZSlcbiAqL1xuLyogRk9OVCBQQVRIXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnRm9udEF3ZXNvbWUnO1xuICBzcmM6IHVybCgnLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5lb3Q/dj00LjQuMCcpO1xuICBzcmM6IHVybCgnLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5lb3Q/I2llZml4JnY9NC40LjAnKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksIHVybCgnLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC53b2ZmMj92PTQuNC4wJykgZm9ybWF0KCd3b2ZmMicpLCB1cmwoJy4uL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQud29mZj92PTQuNC4wJykgZm9ybWF0KCd3b2ZmJyksIHVybCgnLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC50dGY/dj00LjQuMCcpIGZvcm1hdCgndHJ1ZXR5cGUnKSwgdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LnN2Zz92PTQuNC4wI2ZvbnRhd2Vzb21lcmVndWxhcicpIGZvcm1hdCgnc3ZnJyk7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cbi5mYSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIHRleHQtcmVuZGVyaW5nOiBhdXRvO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cbi8qIG1ha2VzIHRoZSBmb250IDMzJSBsYXJnZXIgcmVsYXRpdmUgdG8gdGhlIGljb24gY29udGFpbmVyICovXG4uZmEtbGcge1xuICBmb250LXNpemU6IDEuMzMzMzMzMzNlbTtcbiAgbGluZS1oZWlnaHQ6IDAuNzVlbTtcbiAgdmVydGljYWwtYWxpZ246IC0xNSU7XG59XG4uZmEtMngge1xuICBmb250LXNpemU6IDJlbTtcbn1cbi5mYS0zeCB7XG4gIGZvbnQtc2l6ZTogM2VtO1xufVxuLmZhLTR4IHtcbiAgZm9udC1zaXplOiA0ZW07XG59XG4uZmEtNXgge1xuICBmb250LXNpemU6IDVlbTtcbn1cbi5mYS1mdyB7XG4gIHdpZHRoOiAxLjI4NTcxNDI5ZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5mYS11bCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbWFyZ2luLWxlZnQ6IDIuMTQyODU3MTRlbTtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xufVxuLmZhLXVsID4gbGkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uZmEtbGkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IC0yLjE0Mjg1NzE0ZW07XG4gIHdpZHRoOiAyLjE0Mjg1NzE0ZW07XG4gIHRvcDogMC4xNDI4NTcxNGVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uZmEtbGkuZmEtbGcge1xuICBsZWZ0OiAtMS44NTcxNDI4NmVtO1xufVxuLmZhLWJvcmRlciB7XG4gIHBhZGRpbmc6IC4yZW0gLjI1ZW0gLjE1ZW07XG4gIGJvcmRlcjogc29saWQgMC4wOGVtICNlZWU7XG4gIGJvcmRlci1yYWRpdXM6IC4xZW07XG59XG4uZmEtcHVsbC1sZWZ0IHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uZmEtcHVsbC1yaWdodCB7XG4gIGZsb2F0OiByaWdodDtcbn1cbi5mYS5mYS1wdWxsLWxlZnQge1xuICBtYXJnaW4tcmlnaHQ6IC4zZW07XG59XG4uZmEuZmEtcHVsbC1yaWdodCB7XG4gIG1hcmdpbi1sZWZ0OiAuM2VtO1xufVxuLyogRGVwcmVjYXRlZCBhcyBvZiA0LjQuMCAqL1xuLnB1bGwtcmlnaHQge1xuICBmbG9hdDogcmlnaHQ7XG59XG4ucHVsbC1sZWZ0IHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uZmEucHVsbC1sZWZ0IHtcbiAgbWFyZ2luLXJpZ2h0OiAuM2VtO1xufVxuLmZhLnB1bGwtcmlnaHQge1xuICBtYXJnaW4tbGVmdDogLjNlbTtcbn1cbi5mYS1zcGluIHtcbiAgLXdlYmtpdC1hbmltYXRpb246IGZhLXNwaW4gMnMgaW5maW5pdGUgbGluZWFyO1xuICBhbmltYXRpb246IGZhLXNwaW4gMnMgaW5maW5pdGUgbGluZWFyO1xufVxuLmZhLXB1bHNlIHtcbiAgLXdlYmtpdC1hbmltYXRpb246IGZhLXNwaW4gMXMgaW5maW5pdGUgc3RlcHMoOCk7XG4gIGFuaW1hdGlvbjogZmEtc3BpbiAxcyBpbmZpbml0ZSBzdGVwcyg4KTtcbn1cbkAtd2Via2l0LWtleWZyYW1lcyBmYS1zcGluIHtcbiAgMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIH1cbiAgMTAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgZmEtc3BpbiB7XG4gIDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xuICB9XG59XG4uZmEtcm90YXRlLTkwIHtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0xKTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbn1cbi5mYS1yb3RhdGUtMTgwIHtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0yKTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbn1cbi5mYS1yb3RhdGUtMjcwIHtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0zKTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpO1xuICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcbn1cbi5mYS1mbGlwLWhvcml6b250YWwge1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTAsIG1pcnJvcj0xKTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKC0xLCAxKTtcbiAgLW1zLXRyYW5zZm9ybTogc2NhbGUoLTEsIDEpO1xuICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAxKTtcbn1cbi5mYS1mbGlwLXZlcnRpY2FsIHtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0yLCBtaXJyb3I9MSk7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAtMSk7XG4gIC1tcy10cmFuc2Zvcm06IHNjYWxlKDEsIC0xKTtcbiAgdHJhbnNmb3JtOiBzY2FsZSgxLCAtMSk7XG59XG46cm9vdCAuZmEtcm90YXRlLTkwLFxuOnJvb3QgLmZhLXJvdGF0ZS0xODAsXG46cm9vdCAuZmEtcm90YXRlLTI3MCxcbjpyb290IC5mYS1mbGlwLWhvcml6b250YWwsXG46cm9vdCAuZmEtZmxpcC12ZXJ0aWNhbCB7XG4gIGZpbHRlcjogbm9uZTtcbn1cbi5mYS1zdGFjayB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMmVtO1xuICBoZWlnaHQ6IDJlbTtcbiAgbGluZS1oZWlnaHQ6IDJlbTtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5mYS1zdGFjay0xeCxcbi5mYS1zdGFjay0yeCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5mYS1zdGFjay0xeCB7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xufVxuLmZhLXN0YWNrLTJ4IHtcbiAgZm9udC1zaXplOiAyZW07XG59XG4uZmEtaW52ZXJzZSB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLyogRm9udCBBd2Vzb21lIHVzZXMgdGhlIFVuaWNvZGUgUHJpdmF0ZSBVc2UgQXJlYSAoUFVBKSB0byBlbnN1cmUgc2NyZWVuXG4gICByZWFkZXJzIGRvIG5vdCByZWFkIG9mZiByYW5kb20gY2hhcmFjdGVycyB0aGF0IHJlcHJlc2VudCBpY29ucyAqL1xuLmZhLWdsYXNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDAwXCI7XG59XG4uZmEtbXVzaWM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMDFcIjtcbn1cbi5mYS1zZWFyY2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMDJcIjtcbn1cbi5mYS1lbnZlbG9wZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDAzXCI7XG59XG4uZmEtaGVhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMDRcIjtcbn1cbi5mYS1zdGFyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDA1XCI7XG59XG4uZmEtc3Rhci1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDA2XCI7XG59XG4uZmEtdXNlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwN1wiO1xufVxuLmZhLWZpbG06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMDhcIjtcbn1cbi5mYS10aC1sYXJnZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwOVwiO1xufVxuLmZhLXRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDBhXCI7XG59XG4uZmEtdGgtbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwYlwiO1xufVxuLmZhLWNoZWNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDBjXCI7XG59XG4uZmEtcmVtb3ZlOmJlZm9yZSxcbi5mYS1jbG9zZTpiZWZvcmUsXG4uZmEtdGltZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMGRcIjtcbn1cbi5mYS1zZWFyY2gtcGx1czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwZVwiO1xufVxuLmZhLXNlYXJjaC1taW51czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxMFwiO1xufVxuLmZhLXBvd2VyLW9mZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxMVwiO1xufVxuLmZhLXNpZ25hbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxMlwiO1xufVxuLmZhLWdlYXI6YmVmb3JlLFxuLmZhLWNvZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxM1wiO1xufVxuLmZhLXRyYXNoLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTRcIjtcbn1cbi5mYS1ob21lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDE1XCI7XG59XG4uZmEtZmlsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDE2XCI7XG59XG4uZmEtY2xvY2stbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxN1wiO1xufVxuLmZhLXJvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMThcIjtcbn1cbi5mYS1kb3dubG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxOVwiO1xufVxuLmZhLWFycm93LWNpcmNsZS1vLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMWFcIjtcbn1cbi5mYS1hcnJvdy1jaXJjbGUtby11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxYlwiO1xufVxuLmZhLWluYm94OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDFjXCI7XG59XG4uZmEtcGxheS1jaXJjbGUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxZFwiO1xufVxuLmZhLXJvdGF0ZS1yaWdodDpiZWZvcmUsXG4uZmEtcmVwZWF0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDFlXCI7XG59XG4uZmEtcmVmcmVzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyMVwiO1xufVxuLmZhLWxpc3QtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDIyXCI7XG59XG4uZmEtbG9jazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyM1wiO1xufVxuLmZhLWZsYWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMjRcIjtcbn1cbi5mYS1oZWFkcGhvbmVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDI1XCI7XG59XG4uZmEtdm9sdW1lLW9mZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyNlwiO1xufVxuLmZhLXZvbHVtZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDI3XCI7XG59XG4uZmEtdm9sdW1lLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDI4XCI7XG59XG4uZmEtcXJjb2RlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDI5XCI7XG59XG4uZmEtYmFyY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyYVwiO1xufVxuLmZhLXRhZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyYlwiO1xufVxuLmZhLXRhZ3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMmNcIjtcbn1cbi5mYS1ib29rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDJkXCI7XG59XG4uZmEtYm9va21hcms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMmVcIjtcbn1cbi5mYS1wcmludDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyZlwiO1xufVxuLmZhLWNhbWVyYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzMFwiO1xufVxuLmZhLWZvbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMzFcIjtcbn1cbi5mYS1ib2xkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDMyXCI7XG59XG4uZmEtaXRhbGljOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDMzXCI7XG59XG4uZmEtdGV4dC1oZWlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMzRcIjtcbn1cbi5mYS10ZXh0LXdpZHRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDM1XCI7XG59XG4uZmEtYWxpZ24tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzNlwiO1xufVxuLmZhLWFsaWduLWNlbnRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzN1wiO1xufVxuLmZhLWFsaWduLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDM4XCI7XG59XG4uZmEtYWxpZ24tanVzdGlmeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzOVwiO1xufVxuLmZhLWxpc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwM2FcIjtcbn1cbi5mYS1kZWRlbnQ6YmVmb3JlLFxuLmZhLW91dGRlbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwM2JcIjtcbn1cbi5mYS1pbmRlbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwM2NcIjtcbn1cbi5mYS12aWRlby1jYW1lcmE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwM2RcIjtcbn1cbi5mYS1waG90bzpiZWZvcmUsXG4uZmEtaW1hZ2U6YmVmb3JlLFxuLmZhLXBpY3R1cmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzZVwiO1xufVxuLmZhLXBlbmNpbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0MFwiO1xufVxuLmZhLW1hcC1tYXJrZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNDFcIjtcbn1cbi5mYS1hZGp1c3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNDJcIjtcbn1cbi5mYS10aW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDQzXCI7XG59XG4uZmEtZWRpdDpiZWZvcmUsXG4uZmEtcGVuY2lsLXNxdWFyZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDQ0XCI7XG59XG4uZmEtc2hhcmUtc3F1YXJlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNDVcIjtcbn1cbi5mYS1jaGVjay1zcXVhcmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0NlwiO1xufVxuLmZhLWFycm93czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0N1wiO1xufVxuLmZhLXN0ZXAtYmFja3dhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNDhcIjtcbn1cbi5mYS1mYXN0LWJhY2t3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDQ5XCI7XG59XG4uZmEtYmFja3dhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNGFcIjtcbn1cbi5mYS1wbGF5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDRiXCI7XG59XG4uZmEtcGF1c2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNGNcIjtcbn1cbi5mYS1zdG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDRkXCI7XG59XG4uZmEtZm9yd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0ZVwiO1xufVxuLmZhLWZhc3QtZm9yd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1MFwiO1xufVxuLmZhLXN0ZXAtZm9yd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1MVwiO1xufVxuLmZhLWVqZWN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDUyXCI7XG59XG4uZmEtY2hldnJvbi1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDUzXCI7XG59XG4uZmEtY2hldnJvbi1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1NFwiO1xufVxuLmZhLXBsdXMtY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDU1XCI7XG59XG4uZmEtbWludXMtY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDU2XCI7XG59XG4uZmEtdGltZXMtY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDU3XCI7XG59XG4uZmEtY2hlY2stY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDU4XCI7XG59XG4uZmEtcXVlc3Rpb24tY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDU5XCI7XG59XG4uZmEtaW5mby1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNWFcIjtcbn1cbi5mYS1jcm9zc2hhaXJzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDViXCI7XG59XG4uZmEtdGltZXMtY2lyY2xlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNWNcIjtcbn1cbi5mYS1jaGVjay1jaXJjbGUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1ZFwiO1xufVxuLmZhLWJhbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1ZVwiO1xufVxuLmZhLWFycm93LWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNjBcIjtcbn1cbi5mYS1hcnJvdy1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2MVwiO1xufVxuLmZhLWFycm93LXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDYyXCI7XG59XG4uZmEtYXJyb3ctZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2M1wiO1xufVxuLmZhLW1haWwtZm9yd2FyZDpiZWZvcmUsXG4uZmEtc2hhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNjRcIjtcbn1cbi5mYS1leHBhbmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNjVcIjtcbn1cbi5mYS1jb21wcmVzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2NlwiO1xufVxuLmZhLXBsdXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNjdcIjtcbn1cbi5mYS1taW51czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2OFwiO1xufVxuLmZhLWFzdGVyaXNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDY5XCI7XG59XG4uZmEtZXhjbGFtYXRpb24tY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDZhXCI7XG59XG4uZmEtZ2lmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2YlwiO1xufVxuLmZhLWxlYWY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNmNcIjtcbn1cbi5mYS1maXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDZkXCI7XG59XG4uZmEtZXllOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDZlXCI7XG59XG4uZmEtZXllLXNsYXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDcwXCI7XG59XG4uZmEtd2FybmluZzpiZWZvcmUsXG4uZmEtZXhjbGFtYXRpb24tdHJpYW5nbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNzFcIjtcbn1cbi5mYS1wbGFuZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3MlwiO1xufVxuLmZhLWNhbGVuZGFyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDczXCI7XG59XG4uZmEtcmFuZG9tOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDc0XCI7XG59XG4uZmEtY29tbWVudDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3NVwiO1xufVxuLmZhLW1hZ25ldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3NlwiO1xufVxuLmZhLWNoZXZyb24tdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNzdcIjtcbn1cbi5mYS1jaGV2cm9uLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNzhcIjtcbn1cbi5mYS1yZXR3ZWV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDc5XCI7XG59XG4uZmEtc2hvcHBpbmctY2FydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3YVwiO1xufVxuLmZhLWZvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3YlwiO1xufVxuLmZhLWZvbGRlci1vcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDdjXCI7XG59XG4uZmEtYXJyb3dzLXY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwN2RcIjtcbn1cbi5mYS1hcnJvd3MtaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3ZVwiO1xufVxuLmZhLWJhci1jaGFydC1vOmJlZm9yZSxcbi5mYS1iYXItY2hhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODBcIjtcbn1cbi5mYS10d2l0dGVyLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA4MVwiO1xufVxuLmZhLWZhY2Vib29rLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA4MlwiO1xufVxuLmZhLWNhbWVyYS1yZXRybzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA4M1wiO1xufVxuLmZhLWtleTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA4NFwiO1xufVxuLmZhLWdlYXJzOmJlZm9yZSxcbi5mYS1jb2dzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDg1XCI7XG59XG4uZmEtY29tbWVudHM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODZcIjtcbn1cbi5mYS10aHVtYnMtby11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA4N1wiO1xufVxuLmZhLXRodW1icy1vLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODhcIjtcbn1cbi5mYS1zdGFyLWhhbGY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODlcIjtcbn1cbi5mYS1oZWFydC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDhhXCI7XG59XG4uZmEtc2lnbi1vdXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwOGJcIjtcbn1cbi5mYS1saW5rZWRpbi1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwOGNcIjtcbn1cbi5mYS10aHVtYi10YWNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDhkXCI7XG59XG4uZmEtZXh0ZXJuYWwtbGluazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA4ZVwiO1xufVxuLmZhLXNpZ24taW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwOTBcIjtcbn1cbi5mYS10cm9waHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwOTFcIjtcbn1cbi5mYS1naXRodWItc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDkyXCI7XG59XG4uZmEtdXBsb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDkzXCI7XG59XG4uZmEtbGVtb24tbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5NFwiO1xufVxuLmZhLXBob25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDk1XCI7XG59XG4uZmEtc3F1YXJlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwOTZcIjtcbn1cbi5mYS1ib29rbWFyay1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDk3XCI7XG59XG4uZmEtcGhvbmUtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDk4XCI7XG59XG4uZmEtdHdpdHRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5OVwiO1xufVxuLmZhLWZhY2Vib29rLWY6YmVmb3JlLFxuLmZhLWZhY2Vib29rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDlhXCI7XG59XG4uZmEtZ2l0aHViOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDliXCI7XG59XG4uZmEtdW5sb2NrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDljXCI7XG59XG4uZmEtY3JlZGl0LWNhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwOWRcIjtcbn1cbi5mYS1mZWVkOmJlZm9yZSxcbi5mYS1yc3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwOWVcIjtcbn1cbi5mYS1oZGQtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhMFwiO1xufVxuLmZhLWJ1bGxob3JuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGExXCI7XG59XG4uZmEtYmVsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmM1wiO1xufVxuLmZhLWNlcnRpZmljYXRlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGEzXCI7XG59XG4uZmEtaGFuZC1vLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGE0XCI7XG59XG4uZmEtaGFuZC1vLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYTVcIjtcbn1cbi5mYS1oYW5kLW8tdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYTZcIjtcbn1cbi5mYS1oYW5kLW8tZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhN1wiO1xufVxuLmZhLWFycm93LWNpcmNsZS1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGE4XCI7XG59XG4uZmEtYXJyb3ctY2lyY2xlLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGE5XCI7XG59XG4uZmEtYXJyb3ctY2lyY2xlLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGFhXCI7XG59XG4uZmEtYXJyb3ctY2lyY2xlLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYWJcIjtcbn1cbi5mYS1nbG9iZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhY1wiO1xufVxuLmZhLXdyZW5jaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhZFwiO1xufVxuLmZhLXRhc2tzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGFlXCI7XG59XG4uZmEtZmlsdGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGIwXCI7XG59XG4uZmEtYnJpZWZjYXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGIxXCI7XG59XG4uZmEtYXJyb3dzLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBiMlwiO1xufVxuLmZhLWdyb3VwOmJlZm9yZSxcbi5mYS11c2VyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjMFwiO1xufVxuLmZhLWNoYWluOmJlZm9yZSxcbi5mYS1saW5rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGMxXCI7XG59XG4uZmEtY2xvdWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYzJcIjtcbn1cbi5mYS1mbGFzazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjM1wiO1xufVxuLmZhLWN1dDpiZWZvcmUsXG4uZmEtc2Npc3NvcnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYzRcIjtcbn1cbi5mYS1jb3B5OmJlZm9yZSxcbi5mYS1maWxlcy1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGM1XCI7XG59XG4uZmEtcGFwZXJjbGlwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGM2XCI7XG59XG4uZmEtc2F2ZTpiZWZvcmUsXG4uZmEtZmxvcHB5LW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYzdcIjtcbn1cbi5mYS1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYzhcIjtcbn1cbi5mYS1uYXZpY29uOmJlZm9yZSxcbi5mYS1yZW9yZGVyOmJlZm9yZSxcbi5mYS1iYXJzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGM5XCI7XG59XG4uZmEtbGlzdC11bDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjYVwiO1xufVxuLmZhLWxpc3Qtb2w6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwY2JcIjtcbn1cbi5mYS1zdHJpa2V0aHJvdWdoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGNjXCI7XG59XG4uZmEtdW5kZXJsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGNkXCI7XG59XG4uZmEtdGFibGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwY2VcIjtcbn1cbi5mYS1tYWdpYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkMFwiO1xufVxuLmZhLXRydWNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGQxXCI7XG59XG4uZmEtcGludGVyZXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGQyXCI7XG59XG4uZmEtcGludGVyZXN0LXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkM1wiO1xufVxuLmZhLWdvb2dsZS1wbHVzLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkNFwiO1xufVxuLmZhLWdvb2dsZS1wbHVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGQ1XCI7XG59XG4uZmEtbW9uZXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZDZcIjtcbn1cbi5mYS1jYXJldC1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGQ3XCI7XG59XG4uZmEtY2FyZXQtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZDhcIjtcbn1cbi5mYS1jYXJldC1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGQ5XCI7XG59XG4uZmEtY2FyZXQtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZGFcIjtcbn1cbi5mYS1jb2x1bW5zOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGRiXCI7XG59XG4uZmEtdW5zb3J0ZWQ6YmVmb3JlLFxuLmZhLXNvcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZGNcIjtcbn1cbi5mYS1zb3J0LWRvd246YmVmb3JlLFxuLmZhLXNvcnQtZGVzYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkZFwiO1xufVxuLmZhLXNvcnQtdXA6YmVmb3JlLFxuLmZhLXNvcnQtYXNjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGRlXCI7XG59XG4uZmEtZW52ZWxvcGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZTBcIjtcbn1cbi5mYS1saW5rZWRpbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlMVwiO1xufVxuLmZhLXJvdGF0ZS1sZWZ0OmJlZm9yZSxcbi5mYS11bmRvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGUyXCI7XG59XG4uZmEtbGVnYWw6YmVmb3JlLFxuLmZhLWdhdmVsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGUzXCI7XG59XG4uZmEtZGFzaGJvYXJkOmJlZm9yZSxcbi5mYS10YWNob21ldGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGU0XCI7XG59XG4uZmEtY29tbWVudC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGU1XCI7XG59XG4uZmEtY29tbWVudHMtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlNlwiO1xufVxuLmZhLWZsYXNoOmJlZm9yZSxcbi5mYS1ib2x0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGU3XCI7XG59XG4uZmEtc2l0ZW1hcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlOFwiO1xufVxuLmZhLXVtYnJlbGxhOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGU5XCI7XG59XG4uZmEtcGFzdGU6YmVmb3JlLFxuLmZhLWNsaXBib2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlYVwiO1xufVxuLmZhLWxpZ2h0YnVsYi1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGViXCI7XG59XG4uZmEtZXhjaGFuZ2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZWNcIjtcbn1cbi5mYS1jbG91ZC1kb3dubG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlZFwiO1xufVxuLmZhLWNsb3VkLXVwbG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlZVwiO1xufVxuLmZhLXVzZXItbWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZjBcIjtcbn1cbi5mYS1zdGV0aG9zY29wZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmMVwiO1xufVxuLmZhLXN1aXRjYXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGYyXCI7XG59XG4uZmEtYmVsbC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGEyXCI7XG59XG4uZmEtY29mZmVlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGY0XCI7XG59XG4uZmEtY3V0bGVyeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmNVwiO1xufVxuLmZhLWZpbGUtdGV4dC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGY2XCI7XG59XG4uZmEtYnVpbGRpbmctbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmN1wiO1xufVxuLmZhLWhvc3BpdGFsLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZjhcIjtcbn1cbi5mYS1hbWJ1bGFuY2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZjlcIjtcbn1cbi5mYS1tZWRraXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZmFcIjtcbn1cbi5mYS1maWdodGVyLWpldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmYlwiO1xufVxuLmZhLWJlZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZmNcIjtcbn1cbi5mYS1oLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmZFwiO1xufVxuLmZhLXBsdXMtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGZlXCI7XG59XG4uZmEtYW5nbGUtZG91YmxlLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDBcIjtcbn1cbi5mYS1hbmdsZS1kb3VibGUtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDFcIjtcbn1cbi5mYS1hbmdsZS1kb3VibGUtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDJcIjtcbn1cbi5mYS1hbmdsZS1kb3VibGUtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwM1wiO1xufVxuLmZhLWFuZ2xlLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDRcIjtcbn1cbi5mYS1hbmdsZS1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwNVwiO1xufVxuLmZhLWFuZ2xlLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTA2XCI7XG59XG4uZmEtYW5nbGUtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwN1wiO1xufVxuLmZhLWRlc2t0b3A6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDhcIjtcbn1cbi5mYS1sYXB0b3A6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDlcIjtcbn1cbi5mYS10YWJsZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMGFcIjtcbn1cbi5mYS1tb2JpbGUtcGhvbmU6YmVmb3JlLFxuLmZhLW1vYmlsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwYlwiO1xufVxuLmZhLWNpcmNsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTBjXCI7XG59XG4uZmEtcXVvdGUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwZFwiO1xufVxuLmZhLXF1b3RlLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTBlXCI7XG59XG4uZmEtc3Bpbm5lcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExMFwiO1xufVxuLmZhLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExMVwiO1xufVxuLmZhLW1haWwtcmVwbHk6YmVmb3JlLFxuLmZhLXJlcGx5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTEyXCI7XG59XG4uZmEtZ2l0aHViLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExM1wiO1xufVxuLmZhLWZvbGRlci1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTE0XCI7XG59XG4uZmEtZm9sZGVyLW9wZW4tbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExNVwiO1xufVxuLmZhLXNtaWxlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMThcIjtcbn1cbi5mYS1mcm93bi1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTE5XCI7XG59XG4uZmEtbWVoLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMWFcIjtcbn1cbi5mYS1nYW1lcGFkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTFiXCI7XG59XG4uZmEta2V5Ym9hcmQtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExY1wiO1xufVxuLmZhLWZsYWctbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExZFwiO1xufVxuLmZhLWZsYWctY2hlY2tlcmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTFlXCI7XG59XG4uZmEtdGVybWluYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMjBcIjtcbn1cbi5mYS1jb2RlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTIxXCI7XG59XG4uZmEtbWFpbC1yZXBseS1hbGw6YmVmb3JlLFxuLmZhLXJlcGx5LWFsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyMlwiO1xufVxuLmZhLXN0YXItaGFsZi1lbXB0eTpiZWZvcmUsXG4uZmEtc3Rhci1oYWxmLWZ1bGw6YmVmb3JlLFxuLmZhLXN0YXItaGFsZi1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTIzXCI7XG59XG4uZmEtbG9jYXRpb24tYXJyb3c6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMjRcIjtcbn1cbi5mYS1jcm9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTI1XCI7XG59XG4uZmEtY29kZS1mb3JrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTI2XCI7XG59XG4uZmEtdW5saW5rOmJlZm9yZSxcbi5mYS1jaGFpbi1icm9rZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMjdcIjtcbn1cbi5mYS1xdWVzdGlvbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyOFwiO1xufVxuLmZhLWluZm86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMjlcIjtcbn1cbi5mYS1leGNsYW1hdGlvbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyYVwiO1xufVxuLmZhLXN1cGVyc2NyaXB0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTJiXCI7XG59XG4uZmEtc3Vic2NyaXB0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTJjXCI7XG59XG4uZmEtZXJhc2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTJkXCI7XG59XG4uZmEtcHV6emxlLXBpZWNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTJlXCI7XG59XG4uZmEtbWljcm9waG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzMFwiO1xufVxuLmZhLW1pY3JvcGhvbmUtc2xhc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMzFcIjtcbn1cbi5mYS1zaGllbGQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMzJcIjtcbn1cbi5mYS1jYWxlbmRhci1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTMzXCI7XG59XG4uZmEtZmlyZS1leHRpbmd1aXNoZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMzRcIjtcbn1cbi5mYS1yb2NrZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMzVcIjtcbn1cbi5mYS1tYXhjZG46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMzZcIjtcbn1cbi5mYS1jaGV2cm9uLWNpcmNsZS1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTM3XCI7XG59XG4uZmEtY2hldnJvbi1jaXJjbGUtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMzhcIjtcbn1cbi5mYS1jaGV2cm9uLWNpcmNsZS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzOVwiO1xufVxuLmZhLWNoZXZyb24tY2lyY2xlLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxM2FcIjtcbn1cbi5mYS1odG1sNTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzYlwiO1xufVxuLmZhLWNzczM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxM2NcIjtcbn1cbi5mYS1hbmNob3I6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxM2RcIjtcbn1cbi5mYS11bmxvY2stYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTNlXCI7XG59XG4uZmEtYnVsbHNleWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDBcIjtcbn1cbi5mYS1lbGxpcHNpcy1oOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQxXCI7XG59XG4uZmEtZWxsaXBzaXMtdjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0MlwiO1xufVxuLmZhLXJzcy1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDNcIjtcbn1cbi5mYS1wbGF5LWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0NFwiO1xufVxuLmZhLXRpY2tldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0NVwiO1xufVxuLmZhLW1pbnVzLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0NlwiO1xufVxuLmZhLW1pbnVzLXNxdWFyZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQ3XCI7XG59XG4uZmEtbGV2ZWwtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDhcIjtcbn1cbi5mYS1sZXZlbC1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQ5XCI7XG59XG4uZmEtY2hlY2stc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTRhXCI7XG59XG4uZmEtcGVuY2lsLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0YlwiO1xufVxuLmZhLWV4dGVybmFsLWxpbmstc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTRjXCI7XG59XG4uZmEtc2hhcmUtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTRkXCI7XG59XG4uZmEtY29tcGFzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0ZVwiO1xufVxuLmZhLXRvZ2dsZS1kb3duOmJlZm9yZSxcbi5mYS1jYXJldC1zcXVhcmUtby1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTUwXCI7XG59XG4uZmEtdG9nZ2xlLXVwOmJlZm9yZSxcbi5mYS1jYXJldC1zcXVhcmUtby11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1MVwiO1xufVxuLmZhLXRvZ2dsZS1yaWdodDpiZWZvcmUsXG4uZmEtY2FyZXQtc3F1YXJlLW8tcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNTJcIjtcbn1cbi5mYS1ldXJvOmJlZm9yZSxcbi5mYS1ldXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNTNcIjtcbn1cbi5mYS1nYnA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNTRcIjtcbn1cbi5mYS1kb2xsYXI6YmVmb3JlLFxuLmZhLXVzZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1NVwiO1xufVxuLmZhLXJ1cGVlOmJlZm9yZSxcbi5mYS1pbnI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNTZcIjtcbn1cbi5mYS1jbnk6YmVmb3JlLFxuLmZhLXJtYjpiZWZvcmUsXG4uZmEteWVuOmJlZm9yZSxcbi5mYS1qcHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNTdcIjtcbn1cbi5mYS1ydWJsZTpiZWZvcmUsXG4uZmEtcm91YmxlOmJlZm9yZSxcbi5mYS1ydWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNThcIjtcbn1cbi5mYS13b246YmVmb3JlLFxuLmZhLWtydzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1OVwiO1xufVxuLmZhLWJpdGNvaW46YmVmb3JlLFxuLmZhLWJ0YzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1YVwiO1xufVxuLmZhLWZpbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNWJcIjtcbn1cbi5mYS1maWxlLXRleHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNWNcIjtcbn1cbi5mYS1zb3J0LWFscGhhLWFzYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1ZFwiO1xufVxuLmZhLXNvcnQtYWxwaGEtZGVzYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1ZVwiO1xufVxuLmZhLXNvcnQtYW1vdW50LWFzYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2MFwiO1xufVxuLmZhLXNvcnQtYW1vdW50LWRlc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjFcIjtcbn1cbi5mYS1zb3J0LW51bWVyaWMtYXNjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTYyXCI7XG59XG4uZmEtc29ydC1udW1lcmljLWRlc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjNcIjtcbn1cbi5mYS10aHVtYnMtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjRcIjtcbn1cbi5mYS10aHVtYnMtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2NVwiO1xufVxuLmZhLXlvdXR1YmUtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTY2XCI7XG59XG4uZmEteW91dHViZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2N1wiO1xufVxuLmZhLXhpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjhcIjtcbn1cbi5mYS14aW5nLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2OVwiO1xufVxuLmZhLXlvdXR1YmUtcGxheTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2YVwiO1xufVxuLmZhLWRyb3Bib3g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNmJcIjtcbn1cbi5mYS1zdGFjay1vdmVyZmxvdzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2Y1wiO1xufVxuLmZhLWluc3RhZ3JhbTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2ZFwiO1xufVxuLmZhLWZsaWNrcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2ZVwiO1xufVxuLmZhLWFkbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3MFwiO1xufVxuLmZhLWJpdGJ1Y2tldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3MVwiO1xufVxuLmZhLWJpdGJ1Y2tldC1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzJcIjtcbn1cbi5mYS10dW1ibHI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzNcIjtcbn1cbi5mYS10dW1ibHItc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTc0XCI7XG59XG4uZmEtbG9uZy1hcnJvdy1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTc1XCI7XG59XG4uZmEtbG9uZy1hcnJvdy11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3NlwiO1xufVxuLmZhLWxvbmctYXJyb3ctbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3N1wiO1xufVxuLmZhLWxvbmctYXJyb3ctcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzhcIjtcbn1cbi5mYS1hcHBsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3OVwiO1xufVxuLmZhLXdpbmRvd3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxN2FcIjtcbn1cbi5mYS1hbmRyb2lkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTdiXCI7XG59XG4uZmEtbGludXg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxN2NcIjtcbn1cbi5mYS1kcmliYmJsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3ZFwiO1xufVxuLmZhLXNreXBlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTdlXCI7XG59XG4uZmEtZm91cnNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4MFwiO1xufVxuLmZhLXRyZWxsbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4MVwiO1xufVxuLmZhLWZlbWFsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4MlwiO1xufVxuLmZhLW1hbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODNcIjtcbn1cbi5mYS1naXR0aXA6YmVmb3JlLFxuLmZhLWdyYXRpcGF5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTg0XCI7XG59XG4uZmEtc3VuLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODVcIjtcbn1cbi5mYS1tb29uLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODZcIjtcbn1cbi5mYS1hcmNoaXZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTg3XCI7XG59XG4uZmEtYnVnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTg4XCI7XG59XG4uZmEtdms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODlcIjtcbn1cbi5mYS13ZWlibzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4YVwiO1xufVxuLmZhLXJlbnJlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4YlwiO1xufVxuLmZhLXBhZ2VsaW5lczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4Y1wiO1xufVxuLmZhLXN0YWNrLWV4Y2hhbmdlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMThkXCI7XG59XG4uZmEtYXJyb3ctY2lyY2xlLW8tcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOGVcIjtcbn1cbi5mYS1hcnJvdy1jaXJjbGUtby1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTkwXCI7XG59XG4uZmEtdG9nZ2xlLWxlZnQ6YmVmb3JlLFxuLmZhLWNhcmV0LXNxdWFyZS1vLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOTFcIjtcbn1cbi5mYS1kb3QtY2lyY2xlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOTJcIjtcbn1cbi5mYS13aGVlbGNoYWlyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTkzXCI7XG59XG4uZmEtdmltZW8tc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTk0XCI7XG59XG4uZmEtdHVya2lzaC1saXJhOmJlZm9yZSxcbi5mYS10cnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOTVcIjtcbn1cbi5mYS1wbHVzLXNxdWFyZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTk2XCI7XG59XG4uZmEtc3BhY2Utc2h1dHRsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5N1wiO1xufVxuLmZhLXNsYWNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTk4XCI7XG59XG4uZmEtZW52ZWxvcGUtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTk5XCI7XG59XG4uZmEtd29yZHByZXNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTlhXCI7XG59XG4uZmEtb3BlbmlkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTliXCI7XG59XG4uZmEtaW5zdGl0dXRpb246YmVmb3JlLFxuLmZhLWJhbms6YmVmb3JlLFxuLmZhLXVuaXZlcnNpdHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOWNcIjtcbn1cbi5mYS1tb3J0YXItYm9hcmQ6YmVmb3JlLFxuLmZhLWdyYWR1YXRpb24tY2FwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTlkXCI7XG59XG4uZmEteWFob286YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOWVcIjtcbn1cbi5mYS1nb29nbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYTBcIjtcbn1cbi5mYS1yZWRkaXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYTFcIjtcbn1cbi5mYS1yZWRkaXQtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWEyXCI7XG59XG4uZmEtc3R1bWJsZXVwb24tY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWEzXCI7XG59XG4uZmEtc3R1bWJsZXVwb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYTRcIjtcbn1cbi5mYS1kZWxpY2lvdXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYTVcIjtcbn1cbi5mYS1kaWdnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWE2XCI7XG59XG4uZmEtcGllZC1waXBlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhN1wiO1xufVxuLmZhLXBpZWQtcGlwZXItYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWE4XCI7XG59XG4uZmEtZHJ1cGFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWE5XCI7XG59XG4uZmEtam9vbWxhOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWFhXCI7XG59XG4uZmEtbGFuZ3VhZ2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYWJcIjtcbn1cbi5mYS1mYXg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYWNcIjtcbn1cbi5mYS1idWlsZGluZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhZFwiO1xufVxuLmZhLWNoaWxkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWFlXCI7XG59XG4uZmEtcGF3OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWIwXCI7XG59XG4uZmEtc3Bvb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjFcIjtcbn1cbi5mYS1jdWJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWIyXCI7XG59XG4uZmEtY3ViZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjNcIjtcbn1cbi5mYS1iZWhhbmNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWI0XCI7XG59XG4uZmEtYmVoYW5jZS1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjVcIjtcbn1cbi5mYS1zdGVhbTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiNlwiO1xufVxuLmZhLXN0ZWFtLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiN1wiO1xufVxuLmZhLXJlY3ljbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjhcIjtcbn1cbi5mYS1hdXRvbW9iaWxlOmJlZm9yZSxcbi5mYS1jYXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjlcIjtcbn1cbi5mYS1jYWI6YmVmb3JlLFxuLmZhLXRheGk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYmFcIjtcbn1cbi5mYS10cmVlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWJiXCI7XG59XG4uZmEtc3BvdGlmeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiY1wiO1xufVxuLmZhLWRldmlhbnRhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYmRcIjtcbn1cbi5mYS1zb3VuZGNsb3VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWJlXCI7XG59XG4uZmEtZGF0YWJhc2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYzBcIjtcbn1cbi5mYS1maWxlLXBkZi1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWMxXCI7XG59XG4uZmEtZmlsZS13b3JkLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYzJcIjtcbn1cbi5mYS1maWxlLWV4Y2VsLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYzNcIjtcbn1cbi5mYS1maWxlLXBvd2VycG9pbnQtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjNFwiO1xufVxuLmZhLWZpbGUtcGhvdG8tbzpiZWZvcmUsXG4uZmEtZmlsZS1waWN0dXJlLW86YmVmb3JlLFxuLmZhLWZpbGUtaW1hZ2UtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjNVwiO1xufVxuLmZhLWZpbGUtemlwLW86YmVmb3JlLFxuLmZhLWZpbGUtYXJjaGl2ZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWM2XCI7XG59XG4uZmEtZmlsZS1zb3VuZC1vOmJlZm9yZSxcbi5mYS1maWxlLWF1ZGlvLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYzdcIjtcbn1cbi5mYS1maWxlLW1vdmllLW86YmVmb3JlLFxuLmZhLWZpbGUtdmlkZW8tbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjOFwiO1xufVxuLmZhLWZpbGUtY29kZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWM5XCI7XG59XG4uZmEtdmluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjYVwiO1xufVxuLmZhLWNvZGVwZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxY2JcIjtcbn1cbi5mYS1qc2ZpZGRsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjY1wiO1xufVxuLmZhLWxpZmUtYm91eTpiZWZvcmUsXG4uZmEtbGlmZS1idW95OmJlZm9yZSxcbi5mYS1saWZlLXNhdmVyOmJlZm9yZSxcbi5mYS1zdXBwb3J0OmJlZm9yZSxcbi5mYS1saWZlLXJpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxY2RcIjtcbn1cbi5mYS1jaXJjbGUtby1ub3RjaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjZVwiO1xufVxuLmZhLXJhOmJlZm9yZSxcbi5mYS1yZWJlbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkMFwiO1xufVxuLmZhLWdlOmJlZm9yZSxcbi5mYS1lbXBpcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZDFcIjtcbn1cbi5mYS1naXQtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQyXCI7XG59XG4uZmEtZ2l0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQzXCI7XG59XG4uZmEteS1jb21iaW5hdG9yLXNxdWFyZTpiZWZvcmUsXG4uZmEteWMtc3F1YXJlOmJlZm9yZSxcbi5mYS1oYWNrZXItbmV3czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkNFwiO1xufVxuLmZhLXRlbmNlbnQtd2VpYm86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZDVcIjtcbn1cbi5mYS1xcTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkNlwiO1xufVxuLmZhLXdlY2hhdDpiZWZvcmUsXG4uZmEtd2VpeGluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQ3XCI7XG59XG4uZmEtc2VuZDpiZWZvcmUsXG4uZmEtcGFwZXItcGxhbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZDhcIjtcbn1cbi5mYS1zZW5kLW86YmVmb3JlLFxuLmZhLXBhcGVyLXBsYW5lLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZDlcIjtcbn1cbi5mYS1oaXN0b3J5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWRhXCI7XG59XG4uZmEtY2lyY2xlLXRoaW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZGJcIjtcbn1cbi5mYS1oZWFkZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZGNcIjtcbn1cbi5mYS1wYXJhZ3JhcGg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZGRcIjtcbn1cbi5mYS1zbGlkZXJzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWRlXCI7XG59XG4uZmEtc2hhcmUtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWUwXCI7XG59XG4uZmEtc2hhcmUtYWx0LXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlMVwiO1xufVxuLmZhLWJvbWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTJcIjtcbn1cbi5mYS1zb2NjZXItYmFsbC1vOmJlZm9yZSxcbi5mYS1mdXRib2wtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlM1wiO1xufVxuLmZhLXR0eTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlNFwiO1xufVxuLmZhLWJpbm9jdWxhcnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTVcIjtcbn1cbi5mYS1wbHVnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWU2XCI7XG59XG4uZmEtc2xpZGVzaGFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlN1wiO1xufVxuLmZhLXR3aXRjaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlOFwiO1xufVxuLmZhLXllbHA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTlcIjtcbn1cbi5mYS1uZXdzcGFwZXItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlYVwiO1xufVxuLmZhLXdpZmk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZWJcIjtcbn1cbi5mYS1jYWxjdWxhdG9yOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWVjXCI7XG59XG4uZmEtcGF5cGFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWVkXCI7XG59XG4uZmEtZ29vZ2xlLXdhbGxldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlZVwiO1xufVxuLmZhLWNjLXZpc2E6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZjBcIjtcbn1cbi5mYS1jYy1tYXN0ZXJjYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWYxXCI7XG59XG4uZmEtY2MtZGlzY292ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZjJcIjtcbn1cbi5mYS1jYy1hbWV4OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWYzXCI7XG59XG4uZmEtY2MtcGF5cGFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWY0XCI7XG59XG4uZmEtY2Mtc3RyaXBlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWY1XCI7XG59XG4uZmEtYmVsbC1zbGFzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmNlwiO1xufVxuLmZhLWJlbGwtc2xhc2gtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmN1wiO1xufVxuLmZhLXRyYXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWY4XCI7XG59XG4uZmEtY29weXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWY5XCI7XG59XG4uZmEtYXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZmFcIjtcbn1cbi5mYS1leWVkcm9wcGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWZiXCI7XG59XG4uZmEtcGFpbnQtYnJ1c2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZmNcIjtcbn1cbi5mYS1iaXJ0aGRheS1jYWtlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWZkXCI7XG59XG4uZmEtYXJlYS1jaGFydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmZVwiO1xufVxuLmZhLXBpZS1jaGFydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwMFwiO1xufVxuLmZhLWxpbmUtY2hhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMDFcIjtcbn1cbi5mYS1sYXN0Zm06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMDJcIjtcbn1cbi5mYS1sYXN0Zm0tc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjAzXCI7XG59XG4uZmEtdG9nZ2xlLW9mZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwNFwiO1xufVxuLmZhLXRvZ2dsZS1vbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwNVwiO1xufVxuLmZhLWJpY3ljbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMDZcIjtcbn1cbi5mYS1idXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMDdcIjtcbn1cbi5mYS1pb3hob3N0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjA4XCI7XG59XG4uZmEtYW5nZWxsaXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjA5XCI7XG59XG4uZmEtY2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMGFcIjtcbn1cbi5mYS1zaGVrZWw6YmVmb3JlLFxuLmZhLXNoZXFlbDpiZWZvcmUsXG4uZmEtaWxzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjBiXCI7XG59XG4uZmEtbWVhbnBhdGg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMGNcIjtcbn1cbi5mYS1idXlzZWxsYWRzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjBkXCI7XG59XG4uZmEtY29ubmVjdGRldmVsb3A6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMGVcIjtcbn1cbi5mYS1kYXNoY3ViZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxMFwiO1xufVxuLmZhLWZvcnVtYmVlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjExXCI7XG59XG4uZmEtbGVhbnB1YjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxMlwiO1xufVxuLmZhLXNlbGxzeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxM1wiO1xufVxuLmZhLXNoaXJ0c2luYnVsazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxNFwiO1xufVxuLmZhLXNpbXBseWJ1aWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjE1XCI7XG59XG4uZmEtc2t5YXRsYXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTZcIjtcbn1cbi5mYS1jYXJ0LXBsdXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTdcIjtcbn1cbi5mYS1jYXJ0LWFycm93LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMThcIjtcbn1cbi5mYS1kaWFtb25kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjE5XCI7XG59XG4uZmEtc2hpcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxYVwiO1xufVxuLmZhLXVzZXItc2VjcmV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjFiXCI7XG59XG4uZmEtbW90b3JjeWNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxY1wiO1xufVxuLmZhLXN0cmVldC12aWV3OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjFkXCI7XG59XG4uZmEtaGVhcnRiZWF0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjFlXCI7XG59XG4uZmEtdmVudXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjFcIjtcbn1cbi5mYS1tYXJzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjIyXCI7XG59XG4uZmEtbWVyY3VyeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyM1wiO1xufVxuLmZhLWludGVyc2V4OmJlZm9yZSxcbi5mYS10cmFuc2dlbmRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyNFwiO1xufVxuLmZhLXRyYW5zZ2VuZGVyLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyNVwiO1xufVxuLmZhLXZlbnVzLWRvdWJsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyNlwiO1xufVxuLmZhLW1hcnMtZG91YmxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjI3XCI7XG59XG4uZmEtdmVudXMtbWFyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyOFwiO1xufVxuLmZhLW1hcnMtc3Ryb2tlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjI5XCI7XG59XG4uZmEtbWFycy1zdHJva2UtdjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyYVwiO1xufVxuLmZhLW1hcnMtc3Ryb2tlLWg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMmJcIjtcbn1cbi5mYS1uZXV0ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMmNcIjtcbn1cbi5mYS1nZW5kZXJsZXNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjJkXCI7XG59XG4uZmEtZmFjZWJvb2stb2ZmaWNpYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMzBcIjtcbn1cbi5mYS1waW50ZXJlc3QtcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzMVwiO1xufVxuLmZhLXdoYXRzYXBwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjMyXCI7XG59XG4uZmEtc2VydmVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjMzXCI7XG59XG4uZmEtdXNlci1wbHVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjM0XCI7XG59XG4uZmEtdXNlci10aW1lczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzNVwiO1xufVxuLmZhLWhvdGVsOmJlZm9yZSxcbi5mYS1iZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMzZcIjtcbn1cbi5mYS12aWFjb2luOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjM3XCI7XG59XG4uZmEtdHJhaW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMzhcIjtcbn1cbi5mYS1zdWJ3YXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMzlcIjtcbn1cbi5mYS1tZWRpdW06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyM2FcIjtcbn1cbi5mYS15YzpiZWZvcmUsXG4uZmEteS1jb21iaW5hdG9yOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjNiXCI7XG59XG4uZmEtb3B0aW4tbW9uc3RlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzY1wiO1xufVxuLmZhLW9wZW5jYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjNkXCI7XG59XG4uZmEtZXhwZWRpdGVkc3NsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjNlXCI7XG59XG4uZmEtYmF0dGVyeS00OmJlZm9yZSxcbi5mYS1iYXR0ZXJ5LWZ1bGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNDBcIjtcbn1cbi5mYS1iYXR0ZXJ5LTM6YmVmb3JlLFxuLmZhLWJhdHRlcnktdGhyZWUtcXVhcnRlcnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNDFcIjtcbn1cbi5mYS1iYXR0ZXJ5LTI6YmVmb3JlLFxuLmZhLWJhdHRlcnktaGFsZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0MlwiO1xufVxuLmZhLWJhdHRlcnktMTpiZWZvcmUsXG4uZmEtYmF0dGVyeS1xdWFydGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjQzXCI7XG59XG4uZmEtYmF0dGVyeS0wOmJlZm9yZSxcbi5mYS1iYXR0ZXJ5LWVtcHR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjQ0XCI7XG59XG4uZmEtbW91c2UtcG9pbnRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0NVwiO1xufVxuLmZhLWktY3Vyc29yOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjQ2XCI7XG59XG4uZmEtb2JqZWN0LWdyb3VwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjQ3XCI7XG59XG4uZmEtb2JqZWN0LXVuZ3JvdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNDhcIjtcbn1cbi5mYS1zdGlja3ktbm90ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0OVwiO1xufVxuLmZhLXN0aWNreS1ub3RlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNGFcIjtcbn1cbi5mYS1jYy1qY2I6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNGJcIjtcbn1cbi5mYS1jYy1kaW5lcnMtY2x1YjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0Y1wiO1xufVxuLmZhLWNsb25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjRkXCI7XG59XG4uZmEtYmFsYW5jZS1zY2FsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0ZVwiO1xufVxuLmZhLWhvdXJnbGFzcy1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjUwXCI7XG59XG4uZmEtaG91cmdsYXNzLTE6YmVmb3JlLFxuLmZhLWhvdXJnbGFzcy1zdGFydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1MVwiO1xufVxuLmZhLWhvdXJnbGFzcy0yOmJlZm9yZSxcbi5mYS1ob3VyZ2xhc3MtaGFsZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1MlwiO1xufVxuLmZhLWhvdXJnbGFzcy0zOmJlZm9yZSxcbi5mYS1ob3VyZ2xhc3MtZW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjUzXCI7XG59XG4uZmEtaG91cmdsYXNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjU0XCI7XG59XG4uZmEtaGFuZC1ncmFiLW86YmVmb3JlLFxuLmZhLWhhbmQtcm9jay1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjU1XCI7XG59XG4uZmEtaGFuZC1zdG9wLW86YmVmb3JlLFxuLmZhLWhhbmQtcGFwZXItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1NlwiO1xufVxuLmZhLWhhbmQtc2Npc3NvcnMtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1N1wiO1xufVxuLmZhLWhhbmQtbGl6YXJkLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNThcIjtcbn1cbi5mYS1oYW5kLXNwb2NrLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNTlcIjtcbn1cbi5mYS1oYW5kLXBvaW50ZXItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1YVwiO1xufVxuLmZhLWhhbmQtcGVhY2UtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1YlwiO1xufVxuLmZhLXRyYWRlbWFyazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1Y1wiO1xufVxuLmZhLXJlZ2lzdGVyZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNWRcIjtcbn1cbi5mYS1jcmVhdGl2ZS1jb21tb25zOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjVlXCI7XG59XG4uZmEtZ2c6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjBcIjtcbn1cbi5mYS1nZy1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjFcIjtcbn1cbi5mYS10cmlwYWR2aXNvcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2MlwiO1xufVxuLmZhLW9kbm9rbGFzc25pa2k6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjNcIjtcbn1cbi5mYS1vZG5va2xhc3NuaWtpLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2NFwiO1xufVxuLmZhLWdldC1wb2NrZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjVcIjtcbn1cbi5mYS13aWtpcGVkaWEtdzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2NlwiO1xufVxuLmZhLXNhZmFyaTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2N1wiO1xufVxuLmZhLWNocm9tZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2OFwiO1xufVxuLmZhLWZpcmVmb3g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjlcIjtcbn1cbi5mYS1vcGVyYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2YVwiO1xufVxuLmZhLWludGVybmV0LWV4cGxvcmVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjZiXCI7XG59XG4uZmEtdHY6YmVmb3JlLFxuLmZhLXRlbGV2aXNpb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNmNcIjtcbn1cbi5mYS1jb250YW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNmRcIjtcbn1cbi5mYS01MDBweDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2ZVwiO1xufVxuLmZhLWFtYXpvbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3MFwiO1xufVxuLmZhLWNhbGVuZGFyLXBsdXMtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3MVwiO1xufVxuLmZhLWNhbGVuZGFyLW1pbnVzLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzJcIjtcbn1cbi5mYS1jYWxlbmRhci10aW1lcy1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjczXCI7XG59XG4uZmEtY2FsZW5kYXItY2hlY2stbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3NFwiO1xufVxuLmZhLWluZHVzdHJ5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjc1XCI7XG59XG4uZmEtbWFwLXBpbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3NlwiO1xufVxuLmZhLW1hcC1zaWduczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3N1wiO1xufVxuLmZhLW1hcC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjc4XCI7XG59XG4uZmEtbWFwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjc5XCI7XG59XG4uZmEtY29tbWVudGluZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3YVwiO1xufVxuLmZhLWNvbW1lbnRpbmctbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3YlwiO1xufVxuLmZhLWhvdXp6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjdjXCI7XG59XG4uZmEtdmltZW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyN2RcIjtcbn1cbi5mYS1ibGFjay10aWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyN2VcIjtcbn1cbi5mYS1mb250aWNvbnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyODBcIjtcbn1cbiIsIi8qIEZPTlQgUEFUSFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnRm9udEF3ZXNvbWUnO1xuICBzcmM6IHVybCgnQHtmYS1mb250LXBhdGh9L2ZvbnRhd2Vzb21lLXdlYmZvbnQuZW90P3Y9QHtmYS12ZXJzaW9ufScpO1xuICBzcmM6IHVybCgnQHtmYS1mb250LXBhdGh9L2ZvbnRhd2Vzb21lLXdlYmZvbnQuZW90PyNpZWZpeCZ2PUB7ZmEtdmVyc2lvbn0nKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksXG4gICAgdXJsKCdAe2ZhLWZvbnQtcGF0aH0vZm9udGF3ZXNvbWUtd2ViZm9udC53b2ZmMj92PUB7ZmEtdmVyc2lvbn0nKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgdXJsKCdAe2ZhLWZvbnQtcGF0aH0vZm9udGF3ZXNvbWUtd2ViZm9udC53b2ZmP3Y9QHtmYS12ZXJzaW9ufScpIGZvcm1hdCgnd29mZicpLFxuICAgIHVybCgnQHtmYS1mb250LXBhdGh9L2ZvbnRhd2Vzb21lLXdlYmZvbnQudHRmP3Y9QHtmYS12ZXJzaW9ufScpIGZvcm1hdCgndHJ1ZXR5cGUnKSxcbiAgICB1cmwoJ0B7ZmEtZm9udC1wYXRofS9mb250YXdlc29tZS13ZWJmb250LnN2Zz92PUB7ZmEtdmVyc2lvbn0jZm9udGF3ZXNvbWVyZWd1bGFyJykgZm9ybWF0KCdzdmcnKTtcbi8vICBzcmM6IHVybCgnQHtmYS1mb250LXBhdGh9L0ZvbnRBd2Vzb21lLm90ZicpIGZvcm1hdCgnb3BlbnR5cGUnKTsgLy8gdXNlZCB3aGVuIGRldmVsb3BpbmcgZm9udHNcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuIiwiLy8gQmFzZSBDbGFzcyBEZWZpbml0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5Ae2ZhLWNzcy1wcmVmaXh9IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCBAZmEtZm9udC1zaXplLWJhc2UvQGZhLWxpbmUtaGVpZ2h0LWJhc2UgRm9udEF3ZXNvbWU7IC8vIHNob3J0ZW5pbmcgZm9udCBkZWNsYXJhdGlvblxuICBmb250LXNpemU6IGluaGVyaXQ7IC8vIGNhbid0IGhhdmUgZm9udC1zaXplIGluaGVyaXQgb24gbGluZSBhYm92ZSwgc28gbmVlZCB0byBvdmVycmlkZVxuICB0ZXh0LXJlbmRlcmluZzogYXV0bzsgLy8gb3B0aW1pemVsZWdpYmlsaXR5IHRocm93cyB0aGluZ3Mgb2ZmICMxMDk0XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuXG59XG4iLCIvLyBJY29uIFNpemVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qIG1ha2VzIHRoZSBmb250IDMzJSBsYXJnZXIgcmVsYXRpdmUgdG8gdGhlIGljb24gY29udGFpbmVyICovXG4uQHtmYS1jc3MtcHJlZml4fS1sZyB7XG4gIGZvbnQtc2l6ZTogKDRlbSAvIDMpO1xuICBsaW5lLWhlaWdodDogKDNlbSAvIDQpO1xuICB2ZXJ0aWNhbC1hbGlnbjogLTE1JTtcbn1cbi5Ae2ZhLWNzcy1wcmVmaXh9LTJ4IHsgZm9udC1zaXplOiAyZW07IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LTN4IHsgZm9udC1zaXplOiAzZW07IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LTR4IHsgZm9udC1zaXplOiA0ZW07IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LTV4IHsgZm9udC1zaXplOiA1ZW07IH1cbiIsIi8vIEZpeGVkIFdpZHRoIEljb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4uQHtmYS1jc3MtcHJlZml4fS1mdyB7XG4gIHdpZHRoOiAoMThlbSAvIDE0KTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuIiwiLy8gTGlzdCBJY29uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uQHtmYS1jc3MtcHJlZml4fS11bCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbWFyZ2luLWxlZnQ6IEBmYS1saS13aWR0aDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICA+IGxpIHsgcG9zaXRpb246IHJlbGF0aXZlOyB9XG59XG4uQHtmYS1jc3MtcHJlZml4fS1saSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogLUBmYS1saS13aWR0aDtcbiAgd2lkdGg6IEBmYS1saS13aWR0aDtcbiAgdG9wOiAoMmVtIC8gMTQpO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICYuQHtmYS1jc3MtcHJlZml4fS1sZyB7XG4gICAgbGVmdDogKC1AZmEtbGktd2lkdGggKyAoNGVtIC8gMTQpKTtcbiAgfVxufVxuIiwiLy8gQm9yZGVyZWQgJiBQdWxsZWRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLkB7ZmEtY3NzLXByZWZpeH0tYm9yZGVyIHtcbiAgcGFkZGluZzogLjJlbSAuMjVlbSAuMTVlbTtcbiAgYm9yZGVyOiBzb2xpZCAuMDhlbSBAZmEtYm9yZGVyLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiAuMWVtO1xufVxuXG4uQHtmYS1jc3MtcHJlZml4fS1wdWxsLWxlZnQgeyBmbG9hdDogbGVmdDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcHVsbC1yaWdodCB7IGZsb2F0OiByaWdodDsgfVxuXG4uQHtmYS1jc3MtcHJlZml4fSB7XG4gICYuQHtmYS1jc3MtcHJlZml4fS1wdWxsLWxlZnQgeyBtYXJnaW4tcmlnaHQ6IC4zZW07IH1cbiAgJi5Ae2ZhLWNzcy1wcmVmaXh9LXB1bGwtcmlnaHQgeyBtYXJnaW4tbGVmdDogLjNlbTsgfVxufVxuXG4vKiBEZXByZWNhdGVkIGFzIG9mIDQuNC4wICovXG4ucHVsbC1yaWdodCB7IGZsb2F0OiByaWdodDsgfVxuLnB1bGwtbGVmdCB7IGZsb2F0OiBsZWZ0OyB9XG5cbi5Ae2ZhLWNzcy1wcmVmaXh9IHtcbiAgJi5wdWxsLWxlZnQgeyBtYXJnaW4tcmlnaHQ6IC4zZW07IH1cbiAgJi5wdWxsLXJpZ2h0IHsgbWFyZ2luLWxlZnQ6IC4zZW07IH1cbn1cbiIsIi8vIEFuaW1hdGVkIEljb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uQHtmYS1jc3MtcHJlZml4fS1zcGluIHtcbiAgLXdlYmtpdC1hbmltYXRpb246IGZhLXNwaW4gMnMgaW5maW5pdGUgbGluZWFyO1xuICAgICAgICAgIGFuaW1hdGlvbjogZmEtc3BpbiAycyBpbmZpbml0ZSBsaW5lYXI7XG59XG5cbi5Ae2ZhLWNzcy1wcmVmaXh9LXB1bHNlIHtcbiAgLXdlYmtpdC1hbmltYXRpb246IGZhLXNwaW4gMXMgaW5maW5pdGUgc3RlcHMoOCk7XG4gICAgICAgICAgYW5pbWF0aW9uOiBmYS1zcGluIDFzIGluZmluaXRlIHN0ZXBzKDgpO1xufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgZmEtc3BpbiB7XG4gIDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIH1cbiAgMTAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGZhLXNwaW4ge1xuICAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XG4gIH1cbn1cbiIsIi8vIFJvdGF0ZWQgJiBGbGlwcGVkIEljb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5Ae2ZhLWNzcy1wcmVmaXh9LXJvdGF0ZS05MCAgeyAuZmEtaWNvbi1yb3RhdGUoOTBkZWcsIDEpOyAgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcm90YXRlLTE4MCB7IC5mYS1pY29uLXJvdGF0ZSgxODBkZWcsIDIpOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1yb3RhdGUtMjcwIHsgLmZhLWljb24tcm90YXRlKDI3MGRlZywgMyk7IH1cblxuLkB7ZmEtY3NzLXByZWZpeH0tZmxpcC1ob3Jpem9udGFsIHsgLmZhLWljb24tZmxpcCgtMSwgMSwgMCk7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWZsaXAtdmVydGljYWwgICB7IC5mYS1pY29uLWZsaXAoMSwgLTEsIDIpOyB9XG5cbi8vIEhvb2sgZm9yIElFOC05XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbjpyb290IC5Ae2ZhLWNzcy1wcmVmaXh9LXJvdGF0ZS05MCxcbjpyb290IC5Ae2ZhLWNzcy1wcmVmaXh9LXJvdGF0ZS0xODAsXG46cm9vdCAuQHtmYS1jc3MtcHJlZml4fS1yb3RhdGUtMjcwLFxuOnJvb3QgLkB7ZmEtY3NzLXByZWZpeH0tZmxpcC1ob3Jpem9udGFsLFxuOnJvb3QgLkB7ZmEtY3NzLXByZWZpeH0tZmxpcC12ZXJ0aWNhbCB7XG4gIGZpbHRlcjogbm9uZTtcbn1cbiIsIi8vIE1peGluc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmZhLWljb24oKSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgQGZhLWZvbnQtc2l6ZS1iYXNlL0BmYS1saW5lLWhlaWdodC1iYXNlIEZvbnRBd2Vzb21lOyAvLyBzaG9ydGVuaW5nIGZvbnQgZGVjbGFyYXRpb25cbiAgZm9udC1zaXplOiBpbmhlcml0OyAvLyBjYW4ndCBoYXZlIGZvbnQtc2l6ZSBpbmhlcml0IG9uIGxpbmUgYWJvdmUsIHNvIG5lZWQgdG8gb3ZlcnJpZGVcbiAgdGV4dC1yZW5kZXJpbmc6IGF1dG87IC8vIG9wdGltaXplbGVnaWJpbGl0eSB0aHJvd3MgdGhpbmdzIG9mZiAjMTA5NFxuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcblxufVxuXG4uZmEtaWNvbi1yb3RhdGUoQGRlZ3JlZXMsIEByb3RhdGlvbikge1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPUByb3RhdGlvbik7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoQGRlZ3JlZXMpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlKEBkZWdyZWVzKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZShAZGVncmVlcyk7XG59XG5cbi5mYS1pY29uLWZsaXAoQGhvcml6LCBAdmVydCwgQHJvdGF0aW9uKSB7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249QHJvdGF0aW9uLCBtaXJyb3I9MSk7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZShAaG9yaXosIEB2ZXJ0KTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlKEBob3JpeiwgQHZlcnQpO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoQGhvcml6LCBAdmVydCk7XG59XG4iLCIvLyBTdGFja2VkIEljb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5Ae2ZhLWNzcy1wcmVmaXh9LXN0YWNrIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAyZW07XG4gIGhlaWdodDogMmVtO1xuICBsaW5lLWhlaWdodDogMmVtO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLkB7ZmEtY3NzLXByZWZpeH0tc3RhY2stMXgsIC5Ae2ZhLWNzcy1wcmVmaXh9LXN0YWNrLTJ4IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLkB7ZmEtY3NzLXByZWZpeH0tc3RhY2stMXggeyBsaW5lLWhlaWdodDogaW5oZXJpdDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc3RhY2stMnggeyBmb250LXNpemU6IDJlbTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0taW52ZXJzZSB7IGNvbG9yOiBAZmEtaW52ZXJzZTsgfVxuIiwiLyogRm9udCBBd2Vzb21lIHVzZXMgdGhlIFVuaWNvZGUgUHJpdmF0ZSBVc2UgQXJlYSAoUFVBKSB0byBlbnN1cmUgc2NyZWVuXG4gICByZWFkZXJzIGRvIG5vdCByZWFkIG9mZiByYW5kb20gY2hhcmFjdGVycyB0aGF0IHJlcHJlc2VudCBpY29ucyAqL1xuXG4uQHtmYS1jc3MtcHJlZml4fS1nbGFzczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWdsYXNzOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1tdXNpYzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW11c2ljOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zZWFyY2g6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zZWFyY2g7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWVudmVsb3BlLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1lbnZlbG9wZS1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1oZWFydDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWhlYXJ0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zdGFyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3RhcjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc3Rhci1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3Rhci1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS11c2VyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdXNlcjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmlsbTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbG07IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXRoLWxhcmdlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGgtbGFyZ2U7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXRoOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGg7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXRoLWxpc3Q6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10aC1saXN0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jaGVjazpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNoZWNrOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1yZW1vdmU6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tY2xvc2U6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tdGltZXM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10aW1lczsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc2VhcmNoLXBsdXM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zZWFyY2gtcGx1czsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc2VhcmNoLW1pbnVzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2VhcmNoLW1pbnVzOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1wb3dlci1vZmY6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1wb3dlci1vZmY7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXNpZ25hbDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNpZ25hbDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZ2VhcjpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1jb2c6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jb2c7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXRyYXNoLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10cmFzaC1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1ob21lOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaG9tZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmlsZS1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmlsZS1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jbG9jay1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2xvY2stbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcm9hZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXJvYWQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWRvd25sb2FkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZG93bmxvYWQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFycm93LWNpcmNsZS1vLWRvd246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcnJvdy1jaXJjbGUtby1kb3duOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1hcnJvdy1jaXJjbGUtby11cDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFycm93LWNpcmNsZS1vLXVwOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1pbmJveDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWluYm94OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1wbGF5LWNpcmNsZS1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGxheS1jaXJjbGUtbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcm90YXRlLXJpZ2h0OmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LXJlcGVhdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXJlcGVhdDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcmVmcmVzaDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXJlZnJlc2g7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWxpc3QtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbGlzdC1hbHQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWxvY2s6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1sb2NrOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1mbGFnOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmxhZzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0taGVhZHBob25lczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWhlYWRwaG9uZXM7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXZvbHVtZS1vZmY6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci12b2x1bWUtb2ZmOyB9XG4uQHtmYS1jc3MtcHJlZml4fS12b2x1bWUtZG93bjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXZvbHVtZS1kb3duOyB9XG4uQHtmYS1jc3MtcHJlZml4fS12b2x1bWUtdXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci12b2x1bWUtdXA7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXFyY29kZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXFyY29kZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYmFyY29kZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJhcmNvZGU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXRhZzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRhZzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdGFnczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRhZ3M7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWJvb2s6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1ib29rOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1ib29rbWFyazpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJvb2ttYXJrOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1wcmludDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXByaW50OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jYW1lcmE6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYW1lcmE7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWZvbnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1mb250OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1ib2xkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYm9sZDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0taXRhbGljOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaXRhbGljOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10ZXh0LWhlaWdodDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRleHQtaGVpZ2h0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS10ZXh0LXdpZHRoOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGV4dC13aWR0aDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYWxpZ24tbGVmdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFsaWduLWxlZnQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFsaWduLWNlbnRlcjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFsaWduLWNlbnRlcjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYWxpZ24tcmlnaHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hbGlnbi1yaWdodDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYWxpZ24tanVzdGlmeTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFsaWduLWp1c3RpZnk7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWxpc3Q6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1saXN0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1kZWRlbnQ6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tb3V0ZGVudDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW91dGRlbnQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWluZGVudDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWluZGVudDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdmlkZW8tY2FtZXJhOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdmlkZW8tY2FtZXJhOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1waG90bzpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1pbWFnZTpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1waWN0dXJlLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1waWN0dXJlLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXBlbmNpbDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBlbmNpbDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbWFwLW1hcmtlcjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1hcC1tYXJrZXI7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFkanVzdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFkanVzdDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdGludDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRpbnQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWVkaXQ6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tcGVuY2lsLXNxdWFyZS1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGVuY2lsLXNxdWFyZS1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zaGFyZS1zcXVhcmUtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNoYXJlLXNxdWFyZS1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jaGVjay1zcXVhcmUtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNoZWNrLXNxdWFyZS1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1hcnJvd3M6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcnJvd3M7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXN0ZXAtYmFja3dhcmQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zdGVwLWJhY2t3YXJkOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1mYXN0LWJhY2t3YXJkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmFzdC1iYWNrd2FyZDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYmFja3dhcmQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1iYWNrd2FyZDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcGxheTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBsYXk7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXBhdXNlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGF1c2U7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXN0b3A6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zdG9wOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1mb3J3YXJkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZm9yd2FyZDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmFzdC1mb3J3YXJkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmFzdC1mb3J3YXJkOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zdGVwLWZvcndhcmQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zdGVwLWZvcndhcmQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWVqZWN0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZWplY3Q7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNoZXZyb24tbGVmdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNoZXZyb24tbGVmdDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2hldnJvbi1yaWdodDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNoZXZyb24tcmlnaHQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXBsdXMtY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGx1cy1jaXJjbGU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LW1pbnVzLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1pbnVzLWNpcmNsZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdGltZXMtY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGltZXMtY2lyY2xlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jaGVjay1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jaGVjay1jaXJjbGU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXF1ZXN0aW9uLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXF1ZXN0aW9uLWNpcmNsZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0taW5mby1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1pbmZvLWNpcmNsZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY3Jvc3NoYWlyczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNyb3NzaGFpcnM7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXRpbWVzLWNpcmNsZS1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGltZXMtY2lyY2xlLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNoZWNrLWNpcmNsZS1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2hlY2stY2lyY2xlLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWJhbjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJhbjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYXJyb3ctbGVmdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFycm93LWxlZnQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFycm93LXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYXJyb3ctcmlnaHQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFycm93LXVwOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYXJyb3ctdXA7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFycm93LWRvd246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcnJvdy1kb3duOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1tYWlsLWZvcndhcmQ6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tc2hhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zaGFyZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZXhwYW5kOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZXhwYW5kOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jb21wcmVzczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNvbXByZXNzOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1wbHVzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGx1czsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbWludXM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1taW51czsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYXN0ZXJpc2s6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hc3RlcmlzazsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZXhjbGFtYXRpb24tY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZXhjbGFtYXRpb24tY2lyY2xlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1naWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZ2lmdDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbGVhZjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxlYWY7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1maXJlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1leWU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1leWU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWV5ZS1zbGFzaDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWV5ZS1zbGFzaDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0td2FybmluZzpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1leGNsYW1hdGlvbi10cmlhbmdsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1wbGFuZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBsYW5lOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jYWxlbmRhcjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNhbGVuZGFyOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1yYW5kb206YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1yYW5kb207IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNvbW1lbnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jb21tZW50OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1tYWduZXQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tYWduZXQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNoZXZyb24tdXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jaGV2cm9uLXVwOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jaGV2cm9uLWRvd246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jaGV2cm9uLWRvd247IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXJldHdlZXQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1yZXR3ZWV0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zaG9wcGluZy1jYXJ0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2hvcHBpbmctY2FydDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZm9sZGVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZm9sZGVyOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1mb2xkZXItb3BlbjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZvbGRlci1vcGVuOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1hcnJvd3MtdjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFycm93cy12OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1hcnJvd3MtaDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFycm93cy1oOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1iYXItY2hhcnQtbzpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1iYXItY2hhcnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1iYXItY2hhcnQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXR3aXR0ZXItc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdHdpdHRlci1zcXVhcmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWZhY2Vib29rLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZhY2Vib29rLXNxdWFyZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2FtZXJhLXJldHJvOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2FtZXJhLXJldHJvOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1rZXk6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1rZXk7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWdlYXJzOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNvZ3M6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jb2dzOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jb21tZW50czpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNvbW1lbnRzOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10aHVtYnMtby11cDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRodW1icy1vLXVwOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10aHVtYnMtby1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGh1bWJzLW8tZG93bjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc3Rhci1oYWxmOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3Rhci1oYWxmOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1oZWFydC1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaGVhcnQtbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc2lnbi1vdXQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zaWduLW91dDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbGlua2VkaW4tc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbGlua2VkaW4tc3F1YXJlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10aHVtYi10YWNrOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGh1bWItdGFjazsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZXh0ZXJuYWwtbGluazpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWV4dGVybmFsLWxpbms7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXNpZ24taW46YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zaWduLWluOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10cm9waHk6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10cm9waHk7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWdpdGh1Yi1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1naXRodWItc3F1YXJlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS11cGxvYWQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci11cGxvYWQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWxlbW9uLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1sZW1vbi1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1waG9uZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBob25lOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zcXVhcmUtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNxdWFyZS1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1ib29rbWFyay1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYm9va21hcmstbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcGhvbmUtc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGhvbmUtc3F1YXJlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10d2l0dGVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdHdpdHRlcjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmFjZWJvb2stZjpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1mYWNlYm9vazpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZhY2Vib29rOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1naXRodWI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1naXRodWI7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXVubG9jazpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXVubG9jazsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY3JlZGl0LWNhcmQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jcmVkaXQtY2FyZDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmVlZDpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1yc3M6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1yc3M7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWhkZC1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaGRkLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWJ1bGxob3JuOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYnVsbGhvcm47IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWJlbGw6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1iZWxsOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jZXJ0aWZpY2F0ZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNlcnRpZmljYXRlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1oYW5kLW8tcmlnaHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oYW5kLW8tcmlnaHQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWhhbmQtby1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaGFuZC1vLWxlZnQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWhhbmQtby11cDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWhhbmQtby11cDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0taGFuZC1vLWRvd246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oYW5kLW8tZG93bjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYXJyb3ctY2lyY2xlLWxlZnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcnJvdy1jaXJjbGUtbGVmdDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYXJyb3ctY2lyY2xlLXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYXJyb3ctY2lyY2xlLXJpZ2h0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1hcnJvdy1jaXJjbGUtdXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcnJvdy1jaXJjbGUtdXA7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFycm93LWNpcmNsZS1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYXJyb3ctY2lyY2xlLWRvd247IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWdsb2JlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZ2xvYmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXdyZW5jaDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXdyZW5jaDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdGFza3M6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10YXNrczsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmlsdGVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmlsdGVyOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1icmllZmNhc2U6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1icmllZmNhc2U7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFycm93cy1hbHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcnJvd3MtYWx0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1ncm91cDpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS11c2VyczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXVzZXJzOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jaGFpbjpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1saW5rOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbGluazsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2xvdWQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jbG91ZDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmxhc2s6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1mbGFzazsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY3V0OmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNjaXNzb3JzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2Npc3NvcnM7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNvcHk6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tZmlsZXMtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbGVzLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXBhcGVyY2xpcDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBhcGVyY2xpcDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc2F2ZTpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1mbG9wcHktbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZsb3BweS1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zcXVhcmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LW5hdmljb246YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tcmVvcmRlcjpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1iYXJzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYmFyczsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbGlzdC11bDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxpc3QtdWw7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWxpc3Qtb2w6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1saXN0LW9sOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zdHJpa2V0aHJvdWdoOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3RyaWtldGhyb3VnaDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdW5kZXJsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdW5kZXJsaW5lOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10YWJsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRhYmxlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1tYWdpYzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1hZ2ljOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10cnVjazpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRydWNrOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1waW50ZXJlc3Q6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1waW50ZXJlc3Q7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXBpbnRlcmVzdC1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1waW50ZXJlc3Qtc3F1YXJlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1nb29nbGUtcGx1cy1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1nb29nbGUtcGx1cy1zcXVhcmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWdvb2dsZS1wbHVzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZ29vZ2xlLXBsdXM7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LW1vbmV5OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbW9uZXk7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNhcmV0LWRvd246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYXJldC1kb3duOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jYXJldC11cDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNhcmV0LXVwOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jYXJldC1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2FyZXQtbGVmdDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2FyZXQtcmlnaHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYXJldC1yaWdodDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY29sdW1uczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNvbHVtbnM7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXVuc29ydGVkOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNvcnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zb3J0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zb3J0LWRvd246YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tc29ydC1kZXNjOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc29ydC1kZXNjOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zb3J0LXVwOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNvcnQtYXNjOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc29ydC1hc2M7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWVudmVsb3BlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZW52ZWxvcGU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWxpbmtlZGluOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbGlua2VkaW47IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXJvdGF0ZS1sZWZ0OmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LXVuZG86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci11bmRvOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1sZWdhbDpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1nYXZlbDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWdhdmVsOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1kYXNoYm9hcmQ6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tdGFjaG9tZXRlcjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRhY2hvbWV0ZXI7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNvbW1lbnQtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNvbW1lbnQtbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY29tbWVudHMtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNvbW1lbnRzLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWZsYXNoOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJvbHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1ib2x0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zaXRlbWFwOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2l0ZW1hcDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdW1icmVsbGE6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci11bWJyZWxsYTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcGFzdGU6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tY2xpcGJvYXJkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2xpcGJvYXJkOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1saWdodGJ1bGItbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxpZ2h0YnVsYi1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1leGNoYW5nZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWV4Y2hhbmdlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jbG91ZC1kb3dubG9hZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNsb3VkLWRvd25sb2FkOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jbG91ZC11cGxvYWQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jbG91ZC11cGxvYWQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXVzZXItbWQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci11c2VyLW1kOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zdGV0aG9zY29wZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXN0ZXRob3Njb3BlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zdWl0Y2FzZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXN1aXRjYXNlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1iZWxsLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1iZWxsLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNvZmZlZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNvZmZlZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY3V0bGVyeTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWN1dGxlcnk7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpbGUtdGV4dC1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmlsZS10ZXh0LW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWJ1aWxkaW5nLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1idWlsZGluZy1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1ob3NwaXRhbC1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaG9zcGl0YWwtbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYW1idWxhbmNlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYW1idWxhbmNlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1tZWRraXQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tZWRraXQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpZ2h0ZXItamV0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmlnaHRlci1qZXQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWJlZXI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1iZWVyOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1oLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWgtc3F1YXJlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1wbHVzLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBsdXMtc3F1YXJlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1hbmdsZS1kb3VibGUtbGVmdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFuZ2xlLWRvdWJsZS1sZWZ0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1hbmdsZS1kb3VibGUtcmlnaHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hbmdsZS1kb3VibGUtcmlnaHQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFuZ2xlLWRvdWJsZS11cDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFuZ2xlLWRvdWJsZS11cDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYW5nbGUtZG91YmxlLWRvd246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hbmdsZS1kb3VibGUtZG93bjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYW5nbGUtbGVmdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFuZ2xlLWxlZnQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFuZ2xlLXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYW5nbGUtcmlnaHQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFuZ2xlLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYW5nbGUtdXA7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFuZ2xlLWRvd246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hbmdsZS1kb3duOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1kZXNrdG9wOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZGVza3RvcDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbGFwdG9wOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbGFwdG9wOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10YWJsZXQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10YWJsZXQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LW1vYmlsZS1waG9uZTpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1tb2JpbGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tb2JpbGU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNpcmNsZS1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2lyY2xlLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXF1b3RlLWxlZnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1xdW90ZS1sZWZ0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1xdW90ZS1yaWdodDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXF1b3RlLXJpZ2h0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zcGlubmVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3Bpbm5lcjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2lyY2xlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1tYWlsLXJlcGx5OmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LXJlcGx5OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcmVwbHk7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWdpdGh1Yi1hbHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1naXRodWItYWx0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1mb2xkZXItbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZvbGRlci1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1mb2xkZXItb3Blbi1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZm9sZGVyLW9wZW4tbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc21pbGUtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNtaWxlLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWZyb3duLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1mcm93bi1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1tZWgtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1laC1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1nYW1lcGFkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZ2FtZXBhZDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0ta2V5Ym9hcmQtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWtleWJvYXJkLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWZsYWctbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZsYWctbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmxhZy1jaGVja2VyZWQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1mbGFnLWNoZWNrZXJlZDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdGVybWluYWw6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10ZXJtaW5hbDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY29kZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNvZGU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LW1haWwtcmVwbHktYWxsOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LXJlcGx5LWFsbDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXJlcGx5LWFsbDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc3Rhci1oYWxmLWVtcHR5OmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LXN0YXItaGFsZi1mdWxsOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LXN0YXItaGFsZi1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3Rhci1oYWxmLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWxvY2F0aW9uLWFycm93OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbG9jYXRpb24tYXJyb3c7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNyb3A6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jcm9wOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jb2RlLWZvcms6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jb2RlLWZvcms7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXVubGluazpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1jaGFpbi1icm9rZW46YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jaGFpbi1icm9rZW47IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXF1ZXN0aW9uOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcXVlc3Rpb247IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWluZm86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1pbmZvOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1leGNsYW1hdGlvbjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWV4Y2xhbWF0aW9uOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zdXBlcnNjcmlwdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXN1cGVyc2NyaXB0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zdWJzY3JpcHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zdWJzY3JpcHQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWVyYXNlcjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWVyYXNlcjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcHV6emxlLXBpZWNlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcHV6emxlLXBpZWNlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1taWNyb3Bob25lOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbWljcm9waG9uZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbWljcm9waG9uZS1zbGFzaDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1pY3JvcGhvbmUtc2xhc2g7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXNoaWVsZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNoaWVsZDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2FsZW5kYXItbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNhbGVuZGFyLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpcmUtZXh0aW5ndWlzaGVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmlyZS1leHRpbmd1aXNoZXI7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXJvY2tldDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXJvY2tldDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbWF4Y2RuOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbWF4Y2RuOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jaGV2cm9uLWNpcmNsZS1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2hldnJvbi1jaXJjbGUtbGVmdDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2hldnJvbi1jaXJjbGUtcmlnaHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jaGV2cm9uLWNpcmNsZS1yaWdodDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2hldnJvbi1jaXJjbGUtdXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jaGV2cm9uLWNpcmNsZS11cDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2hldnJvbi1jaXJjbGUtZG93bjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNoZXZyb24tY2lyY2xlLWRvd247IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWh0bWw1OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaHRtbDU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNzczM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jc3MzOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1hbmNob3I6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hbmNob3I7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXVubG9jay1hbHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci11bmxvY2stYWx0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1idWxsc2V5ZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJ1bGxzZXllOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1lbGxpcHNpcy1oOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZWxsaXBzaXMtaDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZWxsaXBzaXMtdjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWVsbGlwc2lzLXY7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXJzcy1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1yc3Mtc3F1YXJlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1wbGF5LWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBsYXktY2lyY2xlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10aWNrZXQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10aWNrZXQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LW1pbnVzLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1pbnVzLXNxdWFyZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbWludXMtc3F1YXJlLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1taW51cy1zcXVhcmUtbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbGV2ZWwtdXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1sZXZlbC11cDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbGV2ZWwtZG93bjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxldmVsLWRvd247IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNoZWNrLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNoZWNrLXNxdWFyZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcGVuY2lsLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBlbmNpbC1zcXVhcmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWV4dGVybmFsLWxpbmstc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZXh0ZXJuYWwtbGluay1zcXVhcmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXNoYXJlLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNoYXJlLXNxdWFyZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY29tcGFzczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNvbXBhc3M7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXRvZ2dsZS1kb3duOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNhcmV0LXNxdWFyZS1vLWRvd246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYXJldC1zcXVhcmUtby1kb3duOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10b2dnbGUtdXA6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tY2FyZXQtc3F1YXJlLW8tdXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYXJldC1zcXVhcmUtby11cDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdG9nZ2xlLXJpZ2h0OmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNhcmV0LXNxdWFyZS1vLXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2FyZXQtc3F1YXJlLW8tcmlnaHQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWV1cm86YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tZXVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZXVyOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1nYnA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1nYnA7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWRvbGxhcjpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS11c2Q6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci11c2Q7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXJ1cGVlOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LWlucjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWlucjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY255OmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LXJtYjpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS15ZW46YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tanB5OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItanB5OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1ydWJsZTpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1yb3VibGU6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tcnViOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcnViOyB9XG4uQHtmYS1jc3MtcHJlZml4fS13b246YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0ta3J3OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXIta3J3OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1iaXRjb2luOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJ0YzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJ0YzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmlsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbGU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpbGUtdGV4dDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbGUtdGV4dDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc29ydC1hbHBoYS1hc2M6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zb3J0LWFscGhhLWFzYzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc29ydC1hbHBoYS1kZXNjOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc29ydC1hbHBoYS1kZXNjOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zb3J0LWFtb3VudC1hc2M6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zb3J0LWFtb3VudC1hc2M7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXNvcnQtYW1vdW50LWRlc2M6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zb3J0LWFtb3VudC1kZXNjOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zb3J0LW51bWVyaWMtYXNjOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc29ydC1udW1lcmljLWFzYzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc29ydC1udW1lcmljLWRlc2M6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zb3J0LW51bWVyaWMtZGVzYzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdGh1bWJzLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGh1bWJzLXVwOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10aHVtYnMtZG93bjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRodW1icy1kb3duOyB9XG4uQHtmYS1jc3MtcHJlZml4fS15b3V0dWJlLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXlvdXR1YmUtc3F1YXJlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS15b3V0dWJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXIteW91dHViZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0teGluZzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXhpbmc7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXhpbmctc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXIteGluZy1zcXVhcmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXlvdXR1YmUtcGxheTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXlvdXR1YmUtcGxheTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZHJvcGJveDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWRyb3Bib3g7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXN0YWNrLW92ZXJmbG93OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3RhY2stb3ZlcmZsb3c7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWluc3RhZ3JhbTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWluc3RhZ3JhbTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmxpY2tyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmxpY2tyOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1hZG46YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hZG47IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWJpdGJ1Y2tldDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJpdGJ1Y2tldDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYml0YnVja2V0LXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJpdGJ1Y2tldC1zcXVhcmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXR1bWJscjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXR1bWJscjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdHVtYmxyLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXR1bWJsci1zcXVhcmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWxvbmctYXJyb3ctZG93bjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxvbmctYXJyb3ctZG93bjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbG9uZy1hcnJvdy11cDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxvbmctYXJyb3ctdXA7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWxvbmctYXJyb3ctbGVmdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxvbmctYXJyb3ctbGVmdDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbG9uZy1hcnJvdy1yaWdodDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxvbmctYXJyb3ctcmlnaHQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFwcGxlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYXBwbGU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXdpbmRvd3M6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci13aW5kb3dzOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1hbmRyb2lkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYW5kcm9pZDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbGludXg6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1saW51eDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZHJpYmJibGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1kcmliYmJsZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc2t5cGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1za3lwZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZm91cnNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZvdXJzcXVhcmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXRyZWxsbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRyZWxsbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmVtYWxlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmVtYWxlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1tYWxlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbWFsZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZ2l0dGlwOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LWdyYXRpcGF5OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZ3JhdGlwYXk7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXN1bi1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3VuLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LW1vb24tbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1vb24tbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYXJjaGl2ZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFyY2hpdmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWJ1ZzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJ1ZzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdms6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci12azsgfVxuLkB7ZmEtY3NzLXByZWZpeH0td2VpYm86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci13ZWlibzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcmVucmVuOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcmVucmVuOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1wYWdlbGluZXM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1wYWdlbGluZXM7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXN0YWNrLWV4Y2hhbmdlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3RhY2stZXhjaGFuZ2U7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFycm93LWNpcmNsZS1vLXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYXJyb3ctY2lyY2xlLW8tcmlnaHQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFycm93LWNpcmNsZS1vLWxlZnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcnJvdy1jaXJjbGUtby1sZWZ0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS10b2dnbGUtbGVmdDpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1jYXJldC1zcXVhcmUtby1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2FyZXQtc3F1YXJlLW8tbGVmdDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZG90LWNpcmNsZS1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZG90LWNpcmNsZS1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS13aGVlbGNoYWlyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItd2hlZWxjaGFpcjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdmltZW8tc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdmltZW8tc3F1YXJlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10dXJraXNoLWxpcmE6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tdHJ5OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdHJ5OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1wbHVzLXNxdWFyZS1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGx1cy1zcXVhcmUtbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc3BhY2Utc2h1dHRsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNwYWNlLXNodXR0bGU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXNsYWNrOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2xhY2s7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWVudmVsb3BlLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWVudmVsb3BlLXNxdWFyZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0td29yZHByZXNzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItd29yZHByZXNzOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1vcGVuaWQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1vcGVuaWQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWluc3RpdHV0aW9uOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJhbms6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tdW5pdmVyc2l0eTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXVuaXZlcnNpdHk7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LW1vcnRhci1ib2FyZDpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1ncmFkdWF0aW9uLWNhcDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWdyYWR1YXRpb24tY2FwOyB9XG4uQHtmYS1jc3MtcHJlZml4fS15YWhvbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXlhaG9vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1nb29nbGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1nb29nbGU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXJlZGRpdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXJlZGRpdDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcmVkZGl0LXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXJlZGRpdC1zcXVhcmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXN0dW1ibGV1cG9uLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXN0dW1ibGV1cG9uLWNpcmNsZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc3R1bWJsZXVwb246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zdHVtYmxldXBvbjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZGVsaWNpb3VzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZGVsaWNpb3VzOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1kaWdnOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZGlnZzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcGllZC1waXBlcjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBpZWQtcGlwZXI7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXBpZWQtcGlwZXItYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGllZC1waXBlci1hbHQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWRydXBhbDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWRydXBhbDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tam9vbWxhOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItam9vbWxhOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1sYW5ndWFnZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxhbmd1YWdlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1mYXg6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1mYXg7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWJ1aWxkaW5nOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYnVpbGRpbmc7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNoaWxkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2hpbGQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXBhdzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBhdzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc3Bvb246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zcG9vbjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY3ViZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWN1YmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWN1YmVzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY3ViZXM7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWJlaGFuY2U6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1iZWhhbmNlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1iZWhhbmNlLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJlaGFuY2Utc3F1YXJlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zdGVhbTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXN0ZWFtOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zdGVhbS1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zdGVhbS1zcXVhcmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXJlY3ljbGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1yZWN5Y2xlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1hdXRvbW9iaWxlOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNhcjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNhcjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2FiOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LXRheGk6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10YXhpOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10cmVlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdHJlZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc3BvdGlmeTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNwb3RpZnk7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWRldmlhbnRhcnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1kZXZpYW50YXJ0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zb3VuZGNsb3VkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc291bmRjbG91ZDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZGF0YWJhc2U6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1kYXRhYmFzZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmlsZS1wZGYtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbGUtcGRmLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpbGUtd29yZC1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmlsZS13b3JkLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpbGUtZXhjZWwtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbGUtZXhjZWwtbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmlsZS1wb3dlcnBvaW50LW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1maWxlLXBvd2VycG9pbnQtbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmlsZS1waG90by1vOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpbGUtcGljdHVyZS1vOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpbGUtaW1hZ2UtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbGUtaW1hZ2UtbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmlsZS16aXAtbzpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1maWxlLWFyY2hpdmUtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbGUtYXJjaGl2ZS1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1maWxlLXNvdW5kLW86YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tZmlsZS1hdWRpby1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmlsZS1hdWRpby1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1maWxlLW1vdmllLW86YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tZmlsZS12aWRlby1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmlsZS12aWRlby1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1maWxlLWNvZGUtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbGUtY29kZS1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS12aW5lOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdmluZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY29kZXBlbjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNvZGVwZW47IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWpzZmlkZGxlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItanNmaWRkbGU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWxpZmUtYm91eTpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1saWZlLWJ1b3k6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tbGlmZS1zYXZlcjpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1zdXBwb3J0OmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LWxpZmUtcmluZzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxpZmUtcmluZzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2lyY2xlLW8tbm90Y2g6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jaXJjbGUtby1ub3RjaDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcmE6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tcmViZWw6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1yZWJlbDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZ2U6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tZW1waXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZW1waXJlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1naXQtc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZ2l0LXNxdWFyZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZ2l0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZ2l0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS15LWNvbWJpbmF0b3Itc3F1YXJlOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LXljLXNxdWFyZTpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1oYWNrZXItbmV3czpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWhhY2tlci1uZXdzOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10ZW5jZW50LXdlaWJvOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGVuY2VudC13ZWlibzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcXE6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1xcTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0td2VjaGF0OmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LXdlaXhpbjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXdlaXhpbjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc2VuZDpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1wYXBlci1wbGFuZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBhcGVyLXBsYW5lOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zZW5kLW86YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tcGFwZXItcGxhbmUtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBhcGVyLXBsYW5lLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWhpc3Rvcnk6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oaXN0b3J5OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jaXJjbGUtdGhpbjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNpcmNsZS10aGluOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1oZWFkZXI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oZWFkZXI7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXBhcmFncmFwaDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBhcmFncmFwaDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc2xpZGVyczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNsaWRlcnM7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXNoYXJlLWFsdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNoYXJlLWFsdDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc2hhcmUtYWx0LXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNoYXJlLWFsdC1zcXVhcmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWJvbWI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1ib21iOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zb2NjZXItYmFsbC1vOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZ1dGJvbC1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZnV0Ym9sLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXR0eTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXR0eTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYmlub2N1bGFyczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJpbm9jdWxhcnM7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXBsdWc6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1wbHVnOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zbGlkZXNoYXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2xpZGVzaGFyZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdHdpdGNoOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdHdpdGNoOyB9XG4uQHtmYS1jc3MtcHJlZml4fS15ZWxwOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXIteWVscDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbmV3c3BhcGVyLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1uZXdzcGFwZXItbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0td2lmaTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXdpZmk7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNhbGN1bGF0b3I6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYWxjdWxhdG9yOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1wYXlwYWw6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1wYXlwYWw7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWdvb2dsZS13YWxsZXQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1nb29nbGUtd2FsbGV0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jYy12aXNhOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2MtdmlzYTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2MtbWFzdGVyY2FyZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNjLW1hc3RlcmNhcmQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNjLWRpc2NvdmVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2MtZGlzY292ZXI7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNjLWFtZXg6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYy1hbWV4OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jYy1wYXlwYWw6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYy1wYXlwYWw7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNjLXN0cmlwZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNjLXN0cmlwZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYmVsbC1zbGFzaDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJlbGwtc2xhc2g7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWJlbGwtc2xhc2gtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJlbGwtc2xhc2gtbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdHJhc2g6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10cmFzaDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY29weXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY29weXJpZ2h0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1hdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWF0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1leWVkcm9wcGVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZXllZHJvcHBlcjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcGFpbnQtYnJ1c2g6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1wYWludC1icnVzaDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYmlydGhkYXktY2FrZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJpcnRoZGF5LWNha2U7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFyZWEtY2hhcnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcmVhLWNoYXJ0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1waWUtY2hhcnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1waWUtY2hhcnQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWxpbmUtY2hhcnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1saW5lLWNoYXJ0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1sYXN0Zm06YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1sYXN0Zm07IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWxhc3RmbS1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1sYXN0Zm0tc3F1YXJlOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10b2dnbGUtb2ZmOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdG9nZ2xlLW9mZjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdG9nZ2xlLW9uOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdG9nZ2xlLW9uOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1iaWN5Y2xlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYmljeWNsZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYnVzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYnVzOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1pb3hob3N0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaW94aG9zdDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYW5nZWxsaXN0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYW5nZWxsaXN0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jYzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNjOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zaGVrZWw6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tc2hlcWVsOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LWlsczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWlsczsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbWVhbnBhdGg6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tZWFucGF0aDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYnV5c2VsbGFkczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJ1eXNlbGxhZHM7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNvbm5lY3RkZXZlbG9wOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY29ubmVjdGRldmVsb3A7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWRhc2hjdWJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZGFzaGN1YmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWZvcnVtYmVlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZm9ydW1iZWU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWxlYW5wdWI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1sZWFucHViOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zZWxsc3k6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zZWxsc3k7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXNoaXJ0c2luYnVsazpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNoaXJ0c2luYnVsazsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc2ltcGx5YnVpbHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zaW1wbHlidWlsdDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc2t5YXRsYXM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1za3lhdGxhczsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2FydC1wbHVzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2FydC1wbHVzOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jYXJ0LWFycm93LWRvd246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYXJ0LWFycm93LWRvd247IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWRpYW1vbmQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1kaWFtb25kOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zaGlwOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2hpcDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdXNlci1zZWNyZXQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci11c2VyLXNlY3JldDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbW90b3JjeWNsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1vdG9yY3ljbGU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXN0cmVldC12aWV3OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3RyZWV0LXZpZXc7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWhlYXJ0YmVhdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWhlYXJ0YmVhdDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdmVudXM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci12ZW51czsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbWFyczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1hcnM7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LW1lcmN1cnk6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tZXJjdXJ5OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1pbnRlcnNleDpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS10cmFuc2dlbmRlcjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRyYW5zZ2VuZGVyOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10cmFuc2dlbmRlci1hbHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10cmFuc2dlbmRlci1hbHQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXZlbnVzLWRvdWJsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXZlbnVzLWRvdWJsZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbWFycy1kb3VibGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tYXJzLWRvdWJsZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdmVudXMtbWFyczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXZlbnVzLW1hcnM7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LW1hcnMtc3Ryb2tlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbWFycy1zdHJva2U7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LW1hcnMtc3Ryb2tlLXY6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tYXJzLXN0cm9rZS12OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1tYXJzLXN0cm9rZS1oOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbWFycy1zdHJva2UtaDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbmV1dGVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbmV1dGVyOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1nZW5kZXJsZXNzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZ2VuZGVybGVzczsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmFjZWJvb2stb2ZmaWNpYWw6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1mYWNlYm9vay1vZmZpY2lhbDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tcGludGVyZXN0LXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1waW50ZXJlc3QtcDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0td2hhdHNhcHA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci13aGF0c2FwcDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc2VydmVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2VydmVyOyB9XG4uQHtmYS1jc3MtcHJlZml4fS11c2VyLXBsdXM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci11c2VyLXBsdXM7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXVzZXItdGltZXM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci11c2VyLXRpbWVzOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1ob3RlbDpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1iZWQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1iZWQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXZpYWNvaW46YmVmb3JlIHsgY29udGVudDogQGZhLXZhci12aWFjb2luOyB9XG4uQHtmYS1jc3MtcHJlZml4fS10cmFpbjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRyYWluOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zdWJ3YXk6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zdWJ3YXk7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LW1lZGl1bTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1lZGl1bTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0teWM6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0teS1jb21iaW5hdG9yOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXIteS1jb21iaW5hdG9yOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1vcHRpbi1tb25zdGVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItb3B0aW4tbW9uc3RlcjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tb3BlbmNhcnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1vcGVuY2FydDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZXhwZWRpdGVkc3NsOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZXhwZWRpdGVkc3NsOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1iYXR0ZXJ5LTQ6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tYmF0dGVyeS1mdWxsOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYmF0dGVyeS1mdWxsOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1iYXR0ZXJ5LTM6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0tYmF0dGVyeS10aHJlZS1xdWFydGVyczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJhdHRlcnktdGhyZWUtcXVhcnRlcnM7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWJhdHRlcnktMjpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1iYXR0ZXJ5LWhhbGY6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1iYXR0ZXJ5LWhhbGY7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWJhdHRlcnktMTpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1iYXR0ZXJ5LXF1YXJ0ZXI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1iYXR0ZXJ5LXF1YXJ0ZXI7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWJhdHRlcnktMDpiZWZvcmUsXG4uQHtmYS1jc3MtcHJlZml4fS1iYXR0ZXJ5LWVtcHR5OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYmF0dGVyeS1lbXB0eTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbW91c2UtcG9pbnRlcjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1vdXNlLXBvaW50ZXI7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWktY3Vyc29yOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaS1jdXJzb3I7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LW9iamVjdC1ncm91cDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW9iamVjdC1ncm91cDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tb2JqZWN0LXVuZ3JvdXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1vYmplY3QtdW5ncm91cDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc3RpY2t5LW5vdGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zdGlja3ktbm90ZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tc3RpY2t5LW5vdGUtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXN0aWNreS1ub3RlLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNjLWpjYjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNjLWpjYjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2MtZGluZXJzLWNsdWI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYy1kaW5lcnMtY2x1YjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2xvbmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jbG9uZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tYmFsYW5jZS1zY2FsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJhbGFuY2Utc2NhbGU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWhvdXJnbGFzcy1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaG91cmdsYXNzLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWhvdXJnbGFzcy0xOmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LWhvdXJnbGFzcy1zdGFydDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWhvdXJnbGFzcy1zdGFydDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0taG91cmdsYXNzLTI6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0taG91cmdsYXNzLWhhbGY6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1ob3VyZ2xhc3MtaGFsZjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0taG91cmdsYXNzLTM6YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0taG91cmdsYXNzLWVuZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWhvdXJnbGFzcy1lbmQ7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWhvdXJnbGFzczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWhvdXJnbGFzczsgfVxuLkB7ZmEtY3NzLXByZWZpeH0taGFuZC1ncmFiLW86YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0taGFuZC1yb2NrLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oYW5kLXJvY2stbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0taGFuZC1zdG9wLW86YmVmb3JlLFxuLkB7ZmEtY3NzLXByZWZpeH0taGFuZC1wYXBlci1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaGFuZC1wYXBlci1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1oYW5kLXNjaXNzb3JzLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oYW5kLXNjaXNzb3JzLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWhhbmQtbGl6YXJkLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oYW5kLWxpemFyZC1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1oYW5kLXNwb2NrLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oYW5kLXNwb2NrLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWhhbmQtcG9pbnRlci1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaGFuZC1wb2ludGVyLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWhhbmQtcGVhY2UtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWhhbmQtcGVhY2UtbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdHJhZGVtYXJrOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdHJhZGVtYXJrOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1yZWdpc3RlcmVkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcmVnaXN0ZXJlZDsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY3JlYXRpdmUtY29tbW9uczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNyZWF0aXZlLWNvbW1vbnM7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWdnOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZ2c7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWdnLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWdnLWNpcmNsZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tdHJpcGFkdmlzb3I6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10cmlwYWR2aXNvcjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tb2Rub2tsYXNzbmlraTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW9kbm9rbGFzc25pa2k7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LW9kbm9rbGFzc25pa2ktc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItb2Rub2tsYXNzbmlraS1zcXVhcmU7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWdldC1wb2NrZXQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1nZXQtcG9ja2V0OyB9XG4uQHtmYS1jc3MtcHJlZml4fS13aWtpcGVkaWEtdzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXdpa2lwZWRpYS13OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1zYWZhcmk6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zYWZhcmk7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNocm9tZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNocm9tZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZmlyZWZveDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpcmVmb3g7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LW9wZXJhOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItb3BlcmE7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWludGVybmV0LWV4cGxvcmVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaW50ZXJuZXQtZXhwbG9yZXI7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXR2OmJlZm9yZSxcbi5Ae2ZhLWNzcy1wcmVmaXh9LXRlbGV2aXNpb246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10ZWxldmlzaW9uOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jb250YW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jb250YW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LTUwMHB4OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItNTAwcHg7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWFtYXpvbjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFtYXpvbjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2FsZW5kYXItcGx1cy1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2FsZW5kYXItcGx1cy1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jYWxlbmRhci1taW51cy1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2FsZW5kYXItbWludXMtbzsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tY2FsZW5kYXItdGltZXMtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNhbGVuZGFyLXRpbWVzLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNhbGVuZGFyLWNoZWNrLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYWxlbmRhci1jaGVjay1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1pbmR1c3RyeTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWluZHVzdHJ5OyB9XG4uQHtmYS1jc3MtcHJlZml4fS1tYXAtcGluOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbWFwLXBpbjsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tbWFwLXNpZ25zOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbWFwLXNpZ25zOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1tYXAtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1hcC1vOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1tYXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tYXA7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWNvbW1lbnRpbmc6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jb21tZW50aW5nOyB9XG4uQHtmYS1jc3MtcHJlZml4fS1jb21tZW50aW5nLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jb21tZW50aW5nLW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWhvdXp6OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaG91eno7IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LXZpbWVvOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdmltZW87IH1cbi5Ae2ZhLWNzcy1wcmVmaXh9LWJsYWNrLXRpZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJsYWNrLXRpZTsgfVxuLkB7ZmEtY3NzLXByZWZpeH0tZm9udGljb25zOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZm9udGljb25zOyB9XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */ +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvbnQtYXdlc29tZS5jc3MiLCJwYXRoLmxlc3MiLCJjb3JlLmxlc3MiLCJsYXJnZXIubGVzcyIsImZpeGVkLXdpZHRoLmxlc3MiLCJsaXN0Lmxlc3MiLCJib3JkZXJlZC1wdWxsZWQubGVzcyIsImFuaW1hdGVkLmxlc3MiLCJyb3RhdGVkLWZsaXBwZWQubGVzcyIsIm1peGlucy5sZXNzIiwic3RhY2tlZC5sZXNzIiwiaWNvbnMubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUFMQTs7O0dBR0c7QUFDSDtnQ0FDZ0M7QUNGaEM7RUFDRSwyQkFBQTtFQUNBLHFEQUFBO0VBQ0Esa1hBQUE7RUFNQSxvQkFBQTtFQUNBLG1CQUFBO0NEREQ7QUVURDtFQUNFLHNCQUFBO0VBQ0EsOENBQUE7RUFDQSxtQkFBQTtFQUNBLHFCQUFBO0VBQ0Esb0NBQUE7RUFDQSxtQ0FBQTtDRldEO0FBQ0QsOERBQThEO0FHakI5RDtFQUNFLHdCQUFBO0VBQ0Esb0JBQUE7RUFDQSxxQkFBQTtDSG1CRDtBR2pCRDtFQUF1QixlQUFBO0NIb0J0QjtBR25CRDtFQUF1QixlQUFBO0NIc0J0QjtBR3JCRDtFQUF1QixlQUFBO0NId0J0QjtBR3ZCRDtFQUF1QixlQUFBO0NIMEJ0QjtBSXBDRDtFQUNFLG9CQUFBO0VBQ0EsbUJBQUE7Q0pzQ0Q7QUt2Q0Q7RUFDRSxnQkFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q0x5Q0Q7QUs1Q0Q7RUFJUyxtQkFBQTtDTDJDUjtBS3pDRDtFQUNFLG1CQUFBO0VBQ0Esb0JBQUE7RUFDQSxvQkFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7Q0wyQ0Q7QUsxQ0M7RUFDRSxvQkFBQTtDTDRDSDtBTXpERDtFQUNFLDBCQUFBO0VBQ0EsMEJBQUE7RUFDQSxvQkFBQTtDTjJERDtBTXhERDtFQUE4QixZQUFBO0NOMkQ3QjtBTTFERDtFQUErQixhQUFBO0NONkQ5QjtBTTFEQztFQUErQixtQkFBQTtDTjZEaEM7QU01REM7RUFBZ0Msa0JBQUE7Q04rRGpDO0FBQ0QsNEJBQTRCO0FNNUQ1QjtFQUFjLGFBQUE7Q04rRGI7QU05REQ7RUFBYSxZQUFBO0NOaUVaO0FNOURDO0VBQWMsbUJBQUE7Q05pRWY7QU1oRUM7RUFBZSxrQkFBQTtDTm1FaEI7QU92RkQ7RUFFVSxzQ0FBQTtDUHlGVDtBT3RGRDtFQUVVLHdDQUFBO0NQd0ZUO0FPMUVEO0VBQ0U7SUFFVSx3QkFBQTtHUHNGVDtFT3BGRDtJQUVVLDBCQUFBO0dQc0ZUO0NBQ0Y7QVFuSEQ7RUNXRSxpRUFBQTtFQUdRLHlCQUFBO0NUMkdUO0FReEhEO0VDVUUsaUVBQUE7RUFHUSwwQkFBQTtDVGlIVDtBUTdIRDtFQ1NFLGlFQUFBO0VBR1EsMEJBQUE7Q1R1SFQ7QVFqSUQ7RUNjRSwyRUFBQTtFQUdRLHdCQUFBO0NUc0hUO0FRdElEO0VDYUUsMkVBQUE7RUFHUSx3QkFBQTtDVDRIVDtBUXZJRDs7Ozs7RUFLRSxhQUFBO0NSeUlEO0FVeEpEO0VBQ0UsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLFdBQUE7RUFDQSxZQUFBO0VBQ0EsaUJBQUE7RUFDQSx1QkFBQTtDVjBKRDtBVXhKRDs7RUFDRSxtQkFBQTtFQUNBLFFBQUE7RUFDQSxZQUFBO0VBQ0EsbUJBQUE7Q1YySkQ7QVV6SkQ7RUFBNkIscUJBQUE7Q1Y0SjVCO0FVM0pEO0VBQTZCLGVBQUE7Q1Y4SjVCO0FVN0pEO0VBQTRCLFlBQUE7Q1ZnSzNCO0FBQ0Q7b0VBQ29FO0FXbExwRTtFQUFpQyxpQkFBQTtDWHFMaEM7QVdwTEQ7RUFBaUMsaUJBQUE7Q1h1TGhDO0FXdExEO0VBQWtDLGlCQUFBO0NYeUxqQztBV3hMRDtFQUFzQyxpQkFBQTtDWDJMckM7QVcxTEQ7RUFBaUMsaUJBQUE7Q1g2TGhDO0FXNUxEO0VBQWdDLGlCQUFBO0NYK0wvQjtBVzlMRDtFQUFrQyxpQkFBQTtDWGlNakM7QVdoTUQ7RUFBZ0MsaUJBQUE7Q1htTS9CO0FXbE1EO0VBQWdDLGlCQUFBO0NYcU0vQjtBV3BNRDtFQUFvQyxpQkFBQTtDWHVNbkM7QVd0TUQ7RUFBOEIsaUJBQUE7Q1h5TTdCO0FXeE1EO0VBQW1DLGlCQUFBO0NYMk1sQztBVzFNRDtFQUFpQyxpQkFBQTtDWDZNaEM7QVc1TUQ7OztFQUVpQyxpQkFBQTtDWCtNaEM7QVc5TUQ7RUFBdUMsaUJBQUE7Q1hpTnRDO0FXaE5EO0VBQXdDLGlCQUFBO0NYbU52QztBV2xORDtFQUFxQyxpQkFBQTtDWHFOcEM7QVdwTkQ7RUFBa0MsaUJBQUE7Q1h1TmpDO0FXdE5EOztFQUMrQixpQkFBQTtDWHlOOUI7QVd4TkQ7RUFBbUMsaUJBQUE7Q1gyTmxDO0FXMU5EO0VBQWdDLGlCQUFBO0NYNk4vQjtBVzVORDtFQUFrQyxpQkFBQTtDWCtOakM7QVc5TkQ7RUFBbUMsaUJBQUE7Q1hpT2xDO0FXaE9EO0VBQWdDLGlCQUFBO0NYbU8vQjtBV2xPRDtFQUFvQyxpQkFBQTtDWHFPbkM7QVdwT0Q7RUFBK0MsaUJBQUE7Q1h1TzlDO0FXdE9EO0VBQTZDLGlCQUFBO0NYeU81QztBV3hPRDtFQUFpQyxpQkFBQTtDWDJPaEM7QVcxT0Q7RUFBeUMsaUJBQUE7Q1g2T3hDO0FXNU9EOztFQUNrQyxpQkFBQTtDWCtPakM7QVc5T0Q7RUFBbUMsaUJBQUE7Q1hpUGxDO0FXaFBEO0VBQW9DLGlCQUFBO0NYbVBuQztBV2xQRDtFQUFnQyxpQkFBQTtDWHFQL0I7QVdwUEQ7RUFBZ0MsaUJBQUE7Q1h1UC9CO0FXdFBEO0VBQXNDLGlCQUFBO0NYeVByQztBV3hQRDtFQUFzQyxpQkFBQTtDWDJQckM7QVcxUEQ7RUFBdUMsaUJBQUE7Q1g2UHRDO0FXNVBEO0VBQXFDLGlCQUFBO0NYK1BwQztBVzlQRDtFQUFrQyxpQkFBQTtDWGlRakM7QVdoUUQ7RUFBbUMsaUJBQUE7Q1htUWxDO0FXbFFEO0VBQStCLGlCQUFBO0NYcVE5QjtBV3BRRDtFQUFnQyxpQkFBQTtDWHVRL0I7QVd0UUQ7RUFBZ0MsaUJBQUE7Q1h5US9CO0FXeFFEO0VBQW9DLGlCQUFBO0NYMlFuQztBVzFRRDtFQUFpQyxpQkFBQTtDWDZRaEM7QVc1UUQ7RUFBa0MsaUJBQUE7Q1grUWpDO0FXOVFEO0VBQWdDLGlCQUFBO0NYaVIvQjtBV2hSRDtFQUFnQyxpQkFBQTtDWG1SL0I7QVdsUkQ7RUFBa0MsaUJBQUE7Q1hxUmpDO0FXcFJEO0VBQXVDLGlCQUFBO0NYdVJ0QztBV3RSRDtFQUFzQyxpQkFBQTtDWHlSckM7QVd4UkQ7RUFBc0MsaUJBQUE7Q1gyUnJDO0FXMVJEO0VBQXdDLGlCQUFBO0NYNlJ2QztBVzVSRDtFQUF1QyxpQkFBQTtDWCtSdEM7QVc5UkQ7RUFBeUMsaUJBQUE7Q1hpU3hDO0FXaFNEO0VBQWdDLGlCQUFBO0NYbVMvQjtBV2xTRDs7RUFDbUMsaUJBQUE7Q1hxU2xDO0FXcFNEO0VBQWtDLGlCQUFBO0NYdVNqQztBV3RTRDtFQUF3QyxpQkFBQTtDWHlTdkM7QVd4U0Q7OztFQUVxQyxpQkFBQTtDWDJTcEM7QVcxU0Q7RUFBa0MsaUJBQUE7Q1g2U2pDO0FXNVNEO0VBQXNDLGlCQUFBO0NYK1NyQztBVzlTRDtFQUFrQyxpQkFBQTtDWGlUakM7QVdoVEQ7RUFBZ0MsaUJBQUE7Q1htVC9CO0FXbFREOztFQUMyQyxpQkFBQTtDWHFUMUM7QVdwVEQ7RUFBMEMsaUJBQUE7Q1h1VHpDO0FXdFREO0VBQTBDLGlCQUFBO0NYeVR6QztBV3hURDtFQUFrQyxpQkFBQTtDWDJUakM7QVcxVEQ7RUFBeUMsaUJBQUE7Q1g2VHhDO0FXNVREO0VBQXlDLGlCQUFBO0NYK1R4QztBVzlURDtFQUFvQyxpQkFBQTtDWGlVbkM7QVdoVUQ7RUFBZ0MsaUJBQUE7Q1htVS9CO0FXbFVEO0VBQWlDLGlCQUFBO0NYcVVoQztBV3BVRDtFQUFnQyxpQkFBQTtDWHVVL0I7QVd0VUQ7RUFBbUMsaUJBQUE7Q1h5VWxDO0FXeFVEO0VBQXdDLGlCQUFBO0NYMlV2QztBVzFVRDtFQUF3QyxpQkFBQTtDWDZVdkM7QVc1VUQ7RUFBaUMsaUJBQUE7Q1grVWhDO0FXOVVEO0VBQXdDLGlCQUFBO0NYaVZ2QztBV2hWRDtFQUF5QyxpQkFBQTtDWG1WeEM7QVdsVkQ7RUFBdUMsaUJBQUE7Q1hxVnRDO0FXcFZEO0VBQXdDLGlCQUFBO0NYdVZ2QztBV3RWRDtFQUF3QyxpQkFBQTtDWHlWdkM7QVd4VkQ7RUFBd0MsaUJBQUE7Q1gyVnZDO0FXMVZEO0VBQTJDLGlCQUFBO0NYNlYxQztBVzVWRDtFQUF1QyxpQkFBQTtDWCtWdEM7QVc5VkQ7RUFBc0MsaUJBQUE7Q1hpV3JDO0FXaFdEO0VBQTBDLGlCQUFBO0NYbVd6QztBV2xXRDtFQUEwQyxpQkFBQTtDWHFXekM7QVdwV0Q7RUFBK0IsaUJBQUE7Q1h1VzlCO0FXdFdEO0VBQXNDLGlCQUFBO0NYeVdyQztBV3hXRDtFQUF1QyxpQkFBQTtDWDJXdEM7QVcxV0Q7RUFBb0MsaUJBQUE7Q1g2V25DO0FXNVdEO0VBQXNDLGlCQUFBO0NYK1dyQztBVzlXRDs7RUFDaUMsaUJBQUE7Q1hpWGhDO0FXaFhEO0VBQWtDLGlCQUFBO0NYbVhqQztBV2xYRDtFQUFvQyxpQkFBQTtDWHFYbkM7QVdwWEQ7RUFBZ0MsaUJBQUE7Q1h1WC9CO0FXdFhEO0VBQWlDLGlCQUFBO0NYeVhoQztBV3hYRDtFQUFvQyxpQkFBQTtDWDJYbkM7QVcxWEQ7RUFBOEMsaUJBQUE7Q1g2WDdDO0FXNVhEO0VBQWdDLGlCQUFBO0NYK1gvQjtBVzlYRDtFQUFnQyxpQkFBQTtDWGlZL0I7QVdoWUQ7RUFBZ0MsaUJBQUE7Q1htWS9CO0FXbFlEO0VBQStCLGlCQUFBO0NYcVk5QjtBV3BZRDtFQUFxQyxpQkFBQTtDWHVZcEM7QVd0WUQ7O0VBQ2dELGlCQUFBO0NYeVkvQztBV3hZRDtFQUFpQyxpQkFBQTtDWDJZaEM7QVcxWUQ7RUFBb0MsaUJBQUE7Q1g2WW5DO0FXNVlEO0VBQWtDLGlCQUFBO0NYK1lqQztBVzlZRDtFQUFtQyxpQkFBQTtDWGlabEM7QVdoWkQ7RUFBa0MsaUJBQUE7Q1htWmpDO0FXbFpEO0VBQXNDLGlCQUFBO0NYcVpyQztBV3BaRDtFQUF3QyxpQkFBQTtDWHVadkM7QVd0WkQ7RUFBbUMsaUJBQUE7Q1h5WmxDO0FXeFpEO0VBQXlDLGlCQUFBO0NYMlp4QztBVzFaRDtFQUFrQyxpQkFBQTtDWDZaakM7QVc1WkQ7RUFBdUMsaUJBQUE7Q1grWnRDO0FXOVpEO0VBQW9DLGlCQUFBO0NYaWFuQztBV2hhRDtFQUFvQyxpQkFBQTtDWG1hbkM7QVdsYUQ7O0VBQ3FDLGlCQUFBO0NYcWFwQztBV3BhRDtFQUEwQyxpQkFBQTtDWHVhekM7QVd0YUQ7RUFBMkMsaUJBQUE7Q1h5YTFDO0FXeGFEO0VBQXdDLGlCQUFBO0NYMmF2QztBVzFhRDtFQUErQixpQkFBQTtDWDZhOUI7QVc1YUQ7O0VBQ2dDLGlCQUFBO0NYK2EvQjtBVzlhRDtFQUFvQyxpQkFBQTtDWGlibkM7QVdoYkQ7RUFBdUMsaUJBQUE7Q1htYnRDO0FXbGJEO0VBQXlDLGlCQUFBO0NYcWJ4QztBV3BiRDtFQUFxQyxpQkFBQTtDWHVicEM7QVd0YkQ7RUFBbUMsaUJBQUE7Q1h5YmxDO0FXeGJEO0VBQW9DLGlCQUFBO0NYMmJuQztBVzFiRDtFQUEyQyxpQkFBQTtDWDZiMUM7QVc1YkQ7RUFBc0MsaUJBQUE7Q1grYnJDO0FXOWJEO0VBQXlDLGlCQUFBO0NYaWN4QztBV2hjRDtFQUFtQyxpQkFBQTtDWG1jbEM7QVdsY0Q7RUFBa0MsaUJBQUE7Q1hxY2pDO0FXcGNEO0VBQXlDLGlCQUFBO0NYdWN4QztBV3RjRDtFQUFrQyxpQkFBQTtDWHljakM7QVd4Y0Q7RUFBbUMsaUJBQUE7Q1gyY2xDO0FXMWNEO0VBQWlDLGlCQUFBO0NYNmNoQztBVzVjRDtFQUFvQyxpQkFBQTtDWCtjbkM7QVc5Y0Q7RUFBc0MsaUJBQUE7Q1hpZHJDO0FXaGREO0VBQXdDLGlCQUFBO0NYbWR2QztBV2xkRDtFQUFtQyxpQkFBQTtDWHFkbEM7QVdwZEQ7O0VBQ29DLGlCQUFBO0NYdWRuQztBV3RkRDtFQUFrQyxpQkFBQTtDWHlkakM7QVd4ZEQ7RUFBa0MsaUJBQUE7Q1gyZGpDO0FXMWREO0VBQXVDLGlCQUFBO0NYNmR0QztBVzVkRDs7RUFDK0IsaUJBQUE7Q1grZDlCO0FXOWREO0VBQWlDLGlCQUFBO0NYaWVoQztBV2hlRDtFQUFvQyxpQkFBQTtDWG1lbkM7QVdsZUQ7RUFBZ0MsaUJBQUE7Q1hxZS9CO0FXcGVEO0VBQXVDLGlCQUFBO0NYdWV0QztBV3RlRDtFQUF3QyxpQkFBQTtDWHlldkM7QVd4ZUQ7RUFBdUMsaUJBQUE7Q1gyZXRDO0FXMWVEO0VBQXFDLGlCQUFBO0NYNmVwQztBVzVlRDtFQUF1QyxpQkFBQTtDWCtldEM7QVc5ZUQ7RUFBNkMsaUJBQUE7Q1hpZjVDO0FXaGZEO0VBQThDLGlCQUFBO0NYbWY3QztBV2xmRDtFQUEyQyxpQkFBQTtDWHFmMUM7QVdwZkQ7RUFBNkMsaUJBQUE7Q1h1ZjVDO0FXdGZEO0VBQWlDLGlCQUFBO0NYeWZoQztBV3hmRDtFQUFrQyxpQkFBQTtDWDJmakM7QVcxZkQ7RUFBaUMsaUJBQUE7Q1g2ZmhDO0FXNWZEO0VBQWtDLGlCQUFBO0NYK2ZqQztBVzlmRDtFQUFxQyxpQkFBQTtDWGlnQnBDO0FXaGdCRDtFQUFzQyxpQkFBQTtDWG1nQnJDO0FXbGdCRDs7RUFDaUMsaUJBQUE7Q1hxZ0JoQztBV3BnQkQ7O0VBQ2dDLGlCQUFBO0NYdWdCL0I7QVd0Z0JEO0VBQWlDLGlCQUFBO0NYeWdCaEM7QVd4Z0JEO0VBQWlDLGlCQUFBO0NYMmdCaEM7QVcxZ0JEOztFQUNvQyxpQkFBQTtDWDZnQm5DO0FXNWdCRDs7RUFDbUMsaUJBQUE7Q1grZ0JsQztBVzlnQkQ7RUFBcUMsaUJBQUE7Q1hpaEJwQztBV2hoQkQ7O0VBQ29DLGlCQUFBO0NYbWhCbkM7QVdsaEJEO0VBQWtDLGlCQUFBO0NYcWhCakM7QVdwaEJEOzs7RUFFZ0MsaUJBQUE7Q1h1aEIvQjtBV3RoQkQ7RUFBbUMsaUJBQUE7Q1h5aEJsQztBV3hoQkQ7RUFBbUMsaUJBQUE7Q1gyaEJsQztBVzFoQkQ7RUFBeUMsaUJBQUE7Q1g2aEJ4QztBVzVoQkQ7RUFBcUMsaUJBQUE7Q1graEJwQztBVzloQkQ7RUFBaUMsaUJBQUE7Q1hpaUJoQztBV2hpQkQ7RUFBaUMsaUJBQUE7Q1htaUJoQztBV2xpQkQ7RUFBaUMsaUJBQUE7Q1hxaUJoQztBV3BpQkQ7RUFBcUMsaUJBQUE7Q1h1aUJwQztBV3RpQkQ7RUFBNEMsaUJBQUE7Q1h5aUIzQztBV3hpQkQ7RUFBOEMsaUJBQUE7Q1gyaUI3QztBVzFpQkQ7RUFBdUMsaUJBQUE7Q1g2aUJ0QztBVzVpQkQ7RUFBaUMsaUJBQUE7Q1graUJoQztBVzlpQkQ7RUFBc0MsaUJBQUE7Q1hpakJyQztBV2hqQkQ7RUFBb0MsaUJBQUE7Q1htakJuQztBV2xqQkQ7RUFBc0MsaUJBQUE7Q1hxakJyQztBV3BqQkQ7RUFBdUMsaUJBQUE7Q1h1akJ0QztBV3RqQkQ7RUFBbUMsaUJBQUE7Q1h5akJsQztBV3hqQkQ7O0VBQ2dDLGlCQUFBO0NYMmpCL0I7QVcxakJEOztFQUNxQyxpQkFBQTtDWDZqQnBDO0FXNWpCRDs7RUFDb0MsaUJBQUE7Q1grakJuQztBVzlqQkQ7RUFBb0MsaUJBQUE7Q1hpa0JuQztBV2hrQkQ7RUFBb0MsaUJBQUE7Q1hta0JuQztBV2xrQkQ7O0VBQ2dDLGlCQUFBO0NYcWtCL0I7QVdwa0JEOztFQUNpQyxpQkFBQTtDWHVrQmhDO0FXdGtCRDs7RUFDc0MsaUJBQUE7Q1h5a0JyQztBV3hrQkQ7RUFBcUMsaUJBQUE7Q1gya0JwQztBVzFrQkQ7RUFBc0MsaUJBQUE7Q1g2a0JyQztBVzVrQkQ7O0VBQ2dDLGlCQUFBO0NYK2tCL0I7QVc5a0JEO0VBQW1DLGlCQUFBO0NYaWxCbEM7QVdobEJEO0VBQW9DLGlCQUFBO0NYbWxCbkM7QVdsbEJEOztFQUNxQyxpQkFBQTtDWHFsQnBDO0FXcGxCRDtFQUF1QyxpQkFBQTtDWHVsQnRDO0FXdGxCRDtFQUFvQyxpQkFBQTtDWHlsQm5DO0FXeGxCRDtFQUEwQyxpQkFBQTtDWDJsQnpDO0FXMWxCRDtFQUF3QyxpQkFBQTtDWDZsQnZDO0FXNWxCRDtFQUFtQyxpQkFBQTtDWCtsQmxDO0FXOWxCRDtFQUF1QyxpQkFBQTtDWGltQnRDO0FXaG1CRDtFQUFvQyxpQkFBQTtDWG1tQm5DO0FXbG1CRDtFQUFrQyxpQkFBQTtDWHFtQmpDO0FXcG1CRDtFQUFrQyxpQkFBQTtDWHVtQmpDO0FXdG1CRDtFQUFtQyxpQkFBQTtDWHltQmxDO0FXeG1CRDtFQUF1QyxpQkFBQTtDWDJtQnRDO0FXMW1CRDtFQUFzQyxpQkFBQTtDWDZtQnJDO0FXNW1CRDtFQUFzQyxpQkFBQTtDWCttQnJDO0FXOW1CRDtFQUFxQyxpQkFBQTtDWGluQnBDO0FXaG5CRDtFQUFrQyxpQkFBQTtDWG1uQmpDO0FXbG5CRDtFQUF1QyxpQkFBQTtDWHFuQnRDO0FXcG5CRDtFQUFnQyxpQkFBQTtDWHVuQi9CO0FXdG5CRDtFQUFvQyxpQkFBQTtDWHluQm5DO0FXeG5CRDtFQUF1QyxpQkFBQTtDWDJuQnRDO0FXMW5CRDtFQUE2QyxpQkFBQTtDWDZuQjVDO0FXNW5CRDtFQUE4QyxpQkFBQTtDWCtuQjdDO0FXOW5CRDtFQUEyQyxpQkFBQTtDWGlvQjFDO0FXaG9CRDtFQUE2QyxpQkFBQTtDWG1vQjVDO0FXbG9CRDtFQUFzQyxpQkFBQTtDWHFvQnJDO0FXcG9CRDtFQUF1QyxpQkFBQTtDWHVvQnRDO0FXdG9CRDtFQUFvQyxpQkFBQTtDWHlvQm5DO0FXeG9CRDtFQUFzQyxpQkFBQTtDWDJvQnJDO0FXMW9CRDtFQUFtQyxpQkFBQTtDWDZvQmxDO0FXNW9CRDtFQUFrQyxpQkFBQTtDWCtvQmpDO0FXOW9CRDtFQUFrQyxpQkFBQTtDWGlwQmpDO0FXaHBCRDs7RUFDa0MsaUJBQUE7Q1htcEJqQztBV2xwQkQ7RUFBb0MsaUJBQUE7Q1hxcEJuQztBV3BwQkQ7RUFBc0MsaUJBQUE7Q1h1cEJyQztBV3RwQkQ7RUFBdUMsaUJBQUE7Q1h5cEJ0QztBV3hwQkQ7RUFBbUMsaUJBQUE7Q1gycEJsQztBVzFwQkQ7RUFBa0MsaUJBQUE7Q1g2cEJqQztBVzVwQkQ7O0VBQ2lDLGlCQUFBO0NYK3BCaEM7QVc5cEJEO0VBQXNDLGlCQUFBO0NYaXFCckM7QVdocUJEO0VBQW9DLGlCQUFBO0NYbXFCbkM7QVdscUJEO0VBQXlDLGlCQUFBO0NYcXFCeEM7QVdwcUJEO0VBQW1DLGlCQUFBO0NYdXFCbEM7QVd0cUJEO0VBQW1DLGlCQUFBO0NYeXFCbEM7QVd4cUJEO0VBQWlDLGlCQUFBO0NYMnFCaEM7QVcxcUJEO0VBQW1DLGlCQUFBO0NYNnFCbEM7QVc1cUJEO0VBQXNDLGlCQUFBO0NYK3FCckM7QVc5cUJEO0VBQWtDLGlCQUFBO0NYaXJCakM7QVdockJEO0VBQTBDLGlCQUFBO0NYbXJCekM7QVdsckJEO0VBQW9DLGlCQUFBO0NYcXJCbkM7QVdwckJEO0VBQWdDLGlCQUFBO0NYdXJCL0I7QVd0ckJEOztFQUNxQyxpQkFBQTtDWHlyQnBDO0FXeHJCRDs7O0VBRXVDLGlCQUFBO0NYMnJCdEM7QVcxckJEO0VBQTBDLGlCQUFBO0NYNnJCekM7QVc1ckJEO0VBQWdDLGlCQUFBO0NYK3JCL0I7QVc5ckJEO0VBQXFDLGlCQUFBO0NYaXNCcEM7QVdoc0JEOztFQUN3QyxpQkFBQTtDWG1zQnZDO0FXbHNCRDtFQUFvQyxpQkFBQTtDWHFzQm5DO0FXcHNCRDtFQUFnQyxpQkFBQTtDWHVzQi9CO0FXdHNCRDtFQUF1QyxpQkFBQTtDWHlzQnRDO0FXeHNCRDtFQUF1QyxpQkFBQTtDWDJzQnRDO0FXMXNCRDtFQUFxQyxpQkFBQTtDWDZzQnBDO0FXNXNCRDtFQUFrQyxpQkFBQTtDWCtzQmpDO0FXOXNCRDtFQUF3QyxpQkFBQTtDWGl0QnZDO0FXaHRCRDtFQUFzQyxpQkFBQTtDWG10QnJDO0FXbHRCRDtFQUE0QyxpQkFBQTtDWHF0QjNDO0FXcHRCRDtFQUFrQyxpQkFBQTtDWHV0QmpDO0FXdHRCRDtFQUFzQyxpQkFBQTtDWHl0QnJDO0FXeHRCRDtFQUE2QyxpQkFBQTtDWDJ0QjVDO0FXMXRCRDtFQUFrQyxpQkFBQTtDWDZ0QmpDO0FXNXRCRDtFQUFrQyxpQkFBQTtDWCt0QmpDO0FXOXRCRDtFQUErQyxpQkFBQTtDWGl1QjlDO0FXaHVCRDtFQUFnRCxpQkFBQTtDWG11Qi9DO0FXbHVCRDtFQUE2QyxpQkFBQTtDWHF1QjVDO0FXcHVCRDtFQUErQyxpQkFBQTtDWHV1QjlDO0FXdHVCRDtFQUFpQyxpQkFBQTtDWHl1QmhDO0FXeHVCRDtFQUFnQyxpQkFBQTtDWDJ1Qi9CO0FXMXVCRDtFQUFrQyxpQkFBQTtDWDZ1QmpDO0FXNXVCRDtFQUFzQyxpQkFBQTtDWCt1QnJDO0FXOXVCRDtFQUFvQyxpQkFBQTtDWGl2Qm5DO0FXaHZCRDtFQUFzQyxpQkFBQTtDWG12QnJDO0FXbHZCRDtFQUFzQyxpQkFBQTtDWHF2QnJDO0FXcHZCRDtFQUFzQyxpQkFBQTtDWHV2QnJDO0FXdHZCRDtFQUF1QyxpQkFBQTtDWHl2QnRDO0FXeHZCRDtFQUFrQyxpQkFBQTtDWDJ2QmpDO0FXMXZCRDtFQUF3QyxpQkFBQTtDWDZ2QnZDO0FXNXZCRDtFQUEwQyxpQkFBQTtDWCt2QnpDO0FXOXZCRDtFQUFvQyxpQkFBQTtDWGl3Qm5DO0FXaHdCRDtFQUFzQyxpQkFBQTtDWG13QnJDO0FXbHdCRDtFQUF3QyxpQkFBQTtDWHF3QnZDO0FXcHdCRDtFQUF5QyxpQkFBQTtDWHV3QnhDO0FXdHdCRDtFQUFnRCxpQkFBQTtDWHl3Qi9DO0FXeHdCRDtFQUF3QyxpQkFBQTtDWDJ3QnZDO0FXMXdCRDtFQUFtQyxpQkFBQTtDWDZ3QmxDO0FXNXdCRDs7RUFDK0MsaUJBQUE7Q1grd0I5QztBVzl3QkQ7O0VBQzZDLGlCQUFBO0NYaXhCNUM7QVdoeEJEOztFQUNnRCxpQkFBQTtDWG14Qi9DO0FXbHhCRDs7RUFDK0IsaUJBQUE7Q1hxeEI5QjtBV3B4QkQ7RUFBK0IsaUJBQUE7Q1h1eEI5QjtBV3R4QkQ7O0VBQytCLGlCQUFBO0NYeXhCOUI7QVd4eEJEOztFQUMrQixpQkFBQTtDWDJ4QjlCO0FXMXhCRDs7OztFQUcrQixpQkFBQTtDWDZ4QjlCO0FXNXhCRDs7O0VBRStCLGlCQUFBO0NYK3hCOUI7QVc5eEJEOztFQUMrQixpQkFBQTtDWGl5QjlCO0FXaHlCRDs7RUFDK0IsaUJBQUE7Q1hteUI5QjtBV2x5QkQ7RUFBZ0MsaUJBQUE7Q1hxeUIvQjtBV3B5QkQ7RUFBcUMsaUJBQUE7Q1h1eUJwQztBV3R5QkQ7RUFBMEMsaUJBQUE7Q1h5eUJ6QztBV3h5QkQ7RUFBMkMsaUJBQUE7Q1gyeUIxQztBVzF5QkQ7RUFBMkMsaUJBQUE7Q1g2eUIxQztBVzV5QkQ7RUFBNEMsaUJBQUE7Q1greUIzQztBVzl5QkQ7RUFBNEMsaUJBQUE7Q1hpekIzQztBV2h6QkQ7RUFBNkMsaUJBQUE7Q1htekI1QztBV2x6QkQ7RUFBcUMsaUJBQUE7Q1hxekJwQztBV3B6QkQ7RUFBdUMsaUJBQUE7Q1h1ekJ0QztBV3R6QkQ7RUFBMEMsaUJBQUE7Q1h5ekJ6QztBV3h6QkQ7RUFBbUMsaUJBQUE7Q1gyekJsQztBVzF6QkQ7RUFBZ0MsaUJBQUE7Q1g2ekIvQjtBVzV6QkQ7RUFBdUMsaUJBQUE7Q1grekJ0QztBVzl6QkQ7RUFBd0MsaUJBQUE7Q1hpMEJ2QztBV2gwQkQ7RUFBbUMsaUJBQUE7Q1htMEJsQztBV2wwQkQ7RUFBMEMsaUJBQUE7Q1hxMEJ6QztBV3AwQkQ7RUFBcUMsaUJBQUE7Q1h1MEJwQztBV3QwQkQ7RUFBa0MsaUJBQUE7Q1h5MEJqQztBV3gwQkQ7RUFBK0IsaUJBQUE7Q1gyMEI5QjtBVzEwQkQ7RUFBcUMsaUJBQUE7Q1g2MEJwQztBVzUwQkQ7RUFBNEMsaUJBQUE7Q1grMEIzQztBVzkwQkQ7RUFBa0MsaUJBQUE7Q1hpMUJqQztBV2gxQkQ7RUFBeUMsaUJBQUE7Q1htMUJ4QztBV2wxQkQ7RUFBMkMsaUJBQUE7Q1hxMUIxQztBV3AxQkQ7RUFBeUMsaUJBQUE7Q1h1MUJ4QztBV3QxQkQ7RUFBMkMsaUJBQUE7Q1h5MUIxQztBV3gxQkQ7RUFBNEMsaUJBQUE7Q1gyMUIzQztBVzExQkQ7RUFBaUMsaUJBQUE7Q1g2MUJoQztBVzUxQkQ7RUFBbUMsaUJBQUE7Q1grMUJsQztBVzkxQkQ7RUFBbUMsaUJBQUE7Q1hpMkJsQztBV2gyQkQ7RUFBaUMsaUJBQUE7Q1htMkJoQztBV2wyQkQ7RUFBb0MsaUJBQUE7Q1hxMkJuQztBV3AyQkQ7RUFBaUMsaUJBQUE7Q1h1MkJoQztBV3QyQkQ7RUFBc0MsaUJBQUE7Q1h5MkJyQztBV3gyQkQ7RUFBa0MsaUJBQUE7Q1gyMkJqQztBVzEyQkQ7RUFBa0MsaUJBQUE7Q1g2MkJqQztBVzUyQkQ7RUFBZ0MsaUJBQUE7Q1grMkIvQjtBVzkyQkQ7O0VBQ29DLGlCQUFBO0NYaTNCbkM7QVdoM0JEO0VBQWlDLGlCQUFBO0NYbTNCaEM7QVdsM0JEO0VBQWtDLGlCQUFBO0NYcTNCakM7QVdwM0JEO0VBQW1DLGlCQUFBO0NYdTNCbEM7QVd0M0JEO0VBQStCLGlCQUFBO0NYeTNCOUI7QVd4M0JEO0VBQThCLGlCQUFBO0NYMjNCN0I7QVcxM0JEO0VBQWlDLGlCQUFBO0NYNjNCaEM7QVc1M0JEO0VBQWtDLGlCQUFBO0NYKzNCakM7QVc5M0JEO0VBQXFDLGlCQUFBO0NYaTRCcEM7QVdoNEJEO0VBQTBDLGlCQUFBO0NYbTRCekM7QVdsNEJEO0VBQWdELGlCQUFBO0NYcTRCL0M7QVdwNEJEO0VBQStDLGlCQUFBO0NYdTRCOUM7QVd0NEJEOztFQUMrQyxpQkFBQTtDWHk0QjlDO0FXeDRCRDtFQUF3QyxpQkFBQTtDWDI0QnZDO0FXMTRCRDtFQUFzQyxpQkFBQTtDWDY0QnJDO0FXNTRCRDtFQUF3QyxpQkFBQTtDWCs0QnZDO0FXOTRCRDs7RUFDK0IsaUJBQUE7Q1hpNUI5QjtBV2g1QkQ7RUFBeUMsaUJBQUE7Q1htNUJ4QztBV2w1QkQ7RUFBeUMsaUJBQUE7Q1hxNUJ4QztBV3A1QkQ7RUFBaUMsaUJBQUE7Q1h1NUJoQztBV3Q1QkQ7RUFBMkMsaUJBQUE7Q1h5NUIxQztBV3g1QkQ7RUFBcUMsaUJBQUE7Q1gyNUJwQztBVzE1QkQ7RUFBa0MsaUJBQUE7Q1g2NUJqQztBVzU1QkQ7OztFQUVzQyxpQkFBQTtDWCs1QnJDO0FXOTVCRDs7RUFDMEMsaUJBQUE7Q1hpNkJ6QztBV2g2QkQ7RUFBaUMsaUJBQUE7Q1htNkJoQztBV2w2QkQ7RUFBa0MsaUJBQUE7Q1hxNkJqQztBV3A2QkQ7RUFBa0MsaUJBQUE7Q1h1NkJqQztBV3Q2QkQ7RUFBeUMsaUJBQUE7Q1h5NkJ4QztBV3g2QkQ7RUFBOEMsaUJBQUE7Q1gyNkI3QztBVzE2QkQ7RUFBdUMsaUJBQUE7Q1g2NkJ0QztBVzU2QkQ7RUFBcUMsaUJBQUE7Q1grNkJwQztBVzk2QkQ7RUFBZ0MsaUJBQUE7Q1hpN0IvQjtBV2g3QkQ7RUFBc0MsaUJBQUE7Q1htN0JyQztBV2w3QkQ7RUFBMEMsaUJBQUE7Q1hxN0J6QztBV3A3QkQ7RUFBa0MsaUJBQUE7Q1h1N0JqQztBV3Q3QkQ7RUFBa0MsaUJBQUE7Q1h5N0JqQztBV3g3QkQ7RUFBb0MsaUJBQUE7Q1gyN0JuQztBVzE3QkQ7RUFBK0IsaUJBQUE7Q1g2N0I5QjtBVzU3QkQ7RUFBb0MsaUJBQUE7Q1grN0JuQztBVzk3QkQ7RUFBaUMsaUJBQUE7Q1hpOEJoQztBV2g4QkQ7RUFBK0IsaUJBQUE7Q1htOEI5QjtBV2w4QkQ7RUFBaUMsaUJBQUE7Q1hxOEJoQztBV3A4QkQ7RUFBZ0MsaUJBQUE7Q1h1OEIvQjtBV3Q4QkQ7RUFBaUMsaUJBQUE7Q1h5OEJoQztBV3g4QkQ7RUFBbUMsaUJBQUE7Q1gyOEJsQztBVzE4QkQ7RUFBMEMsaUJBQUE7Q1g2OEJ6QztBVzU4QkQ7RUFBaUMsaUJBQUE7Q1grOEJoQztBVzk4QkQ7RUFBd0MsaUJBQUE7Q1hpOUJ2QztBV2g5QkQ7RUFBbUMsaUJBQUE7Q1htOUJsQztBV2w5QkQ7O0VBQytCLGlCQUFBO0NYcTlCOUI7QVdwOUJEOztFQUNnQyxpQkFBQTtDWHU5Qi9CO0FXdDlCRDtFQUFnQyxpQkFBQTtDWHk5Qi9CO0FXeDlCRDtFQUFtQyxpQkFBQTtDWDI5QmxDO0FXMTlCRDtFQUFzQyxpQkFBQTtDWDY5QnJDO0FXNTlCRDtFQUFzQyxpQkFBQTtDWCs5QnJDO0FXOTlCRDtFQUFvQyxpQkFBQTtDWGkrQm5DO0FXaCtCRDtFQUFzQyxpQkFBQTtDWG0rQnJDO0FXbCtCRDtFQUF1QyxpQkFBQTtDWHErQnRDO0FXcCtCRDtFQUF3QyxpQkFBQTtDWHUrQnZDO0FXdCtCRDtFQUE2QyxpQkFBQTtDWHkrQjVDO0FXeCtCRDs7O0VBRXdDLGlCQUFBO0NYMitCdkM7QVcxK0JEOztFQUMwQyxpQkFBQTtDWDYrQnpDO0FXNStCRDs7RUFDd0MsaUJBQUE7Q1grK0J2QztBVzkrQkQ7O0VBQ3dDLGlCQUFBO0NYaS9CdkM7QVdoL0JEO0VBQXVDLGlCQUFBO0NYbS9CdEM7QVdsL0JEO0VBQWdDLGlCQUFBO0NYcS9CL0I7QVdwL0JEO0VBQW1DLGlCQUFBO0NYdS9CbEM7QVd0L0JEO0VBQW9DLGlCQUFBO0NYeS9CbkM7QVd4L0JEOzs7OztFQUlxQyxpQkFBQTtDWDIvQnBDO0FXMS9CRDtFQUEwQyxpQkFBQTtDWDYvQnpDO0FXNS9CRDs7RUFDaUMsaUJBQUE7Q1grL0JoQztBVzkvQkQ7O0VBQ2tDLGlCQUFBO0NYaWdDakM7QVdoZ0NEO0VBQXNDLGlCQUFBO0NYbWdDckM7QVdsZ0NEO0VBQStCLGlCQUFBO0NYcWdDOUI7QVdwZ0NEOzs7RUFFdUMsaUJBQUE7Q1h1Z0N0QztBV3RnQ0Q7RUFBeUMsaUJBQUE7Q1h5Z0N4QztBV3hnQ0Q7RUFBOEIsaUJBQUE7Q1gyZ0M3QjtBVzFnQ0Q7O0VBQ2tDLGlCQUFBO0NYNmdDakM7QVc1Z0NEOztFQUN1QyxpQkFBQTtDWCtnQ3RDO0FXOWdDRDs7RUFDeUMsaUJBQUE7Q1hpaEN4QztBV2hoQ0Q7RUFBbUMsaUJBQUE7Q1htaENsQztBV2xoQ0Q7RUFBdUMsaUJBQUE7Q1hxaEN0QztBV3BoQ0Q7RUFBa0MsaUJBQUE7Q1h1aENqQztBV3RoQ0Q7RUFBcUMsaUJBQUE7Q1h5aENwQztBV3hoQ0Q7RUFBbUMsaUJBQUE7Q1gyaENsQztBVzFoQ0Q7RUFBcUMsaUJBQUE7Q1g2aENwQztBVzVoQ0Q7RUFBNEMsaUJBQUE7Q1graEMzQztBVzloQ0Q7RUFBZ0MsaUJBQUE7Q1hpaUMvQjtBV2hpQ0Q7O0VBQ29DLGlCQUFBO0NYbWlDbkM7QVdsaUNEO0VBQStCLGlCQUFBO0NYcWlDOUI7QVdwaUNEO0VBQXNDLGlCQUFBO0NYdWlDckM7QVd0aUNEO0VBQWdDLGlCQUFBO0NYeWlDL0I7QVd4aUNEO0VBQXNDLGlCQUFBO0NYMmlDckM7QVcxaUNEO0VBQWtDLGlCQUFBO0NYNmlDakM7QVc1aUNEO0VBQWdDLGlCQUFBO0NYK2lDL0I7QVc5aUNEO0VBQXVDLGlCQUFBO0NYaWpDdEM7QVdoakNEO0VBQWdDLGlCQUFBO0NYbWpDL0I7QVdsakNEO0VBQXNDLGlCQUFBO0NYcWpDckM7QVdwakNEO0VBQWtDLGlCQUFBO0NYdWpDakM7QVd0akNEO0VBQXlDLGlCQUFBO0NYeWpDeEM7QVd4akNEO0VBQW1DLGlCQUFBO0NYMmpDbEM7QVcxakNEO0VBQXlDLGlCQUFBO0NYNmpDeEM7QVc1akNEO0VBQXVDLGlCQUFBO0NYK2pDdEM7QVc5akNEO0VBQW1DLGlCQUFBO0NYaWtDbEM7QVdoa0NEO0VBQXFDLGlCQUFBO0NYbWtDcEM7QVdsa0NEO0VBQXFDLGlCQUFBO0NYcWtDcEM7QVdwa0NEO0VBQXNDLGlCQUFBO0NYdWtDckM7QVd0a0NEO0VBQXdDLGlCQUFBO0NYeWtDdkM7QVd4a0NEO0VBQWlDLGlCQUFBO0NYMmtDaEM7QVcxa0NEO0VBQXFDLGlCQUFBO0NYNmtDcEM7QVc1a0NEO0VBQThCLGlCQUFBO0NYK2tDN0I7QVc5a0NEO0VBQXNDLGlCQUFBO0NYaWxDckM7QVdobENEO0VBQXVDLGlCQUFBO0NYbWxDdEM7QVdsbENEO0VBQXlDLGlCQUFBO0NYcWxDeEM7QVdwbENEO0VBQXNDLGlCQUFBO0NYdWxDckM7QVd0bENEO0VBQXFDLGlCQUFBO0NYeWxDcEM7QVd4bENEO0VBQXNDLGlCQUFBO0NYMmxDckM7QVcxbENEO0VBQWtDLGlCQUFBO0NYNmxDakM7QVc1bENEO0VBQXlDLGlCQUFBO0NYK2xDeEM7QVc5bENEO0VBQXNDLGlCQUFBO0NYaW1DckM7QVdobUNEO0VBQXFDLGlCQUFBO0NYbW1DcEM7QVdsbUNEO0VBQW1DLGlCQUFBO0NYcW1DbEM7QVdwbUNEO0VBQStCLGlCQUFBO0NYdW1DOUI7QVd0bUNEO0VBQW1DLGlCQUFBO0NYeW1DbEM7QVd4bUNEO0VBQXFDLGlCQUFBO0NYMm1DcEM7QVcxbUNEO0VBQThCLGlCQUFBO0NYNm1DN0I7QVc1bUNEOzs7RUFFK0IsaUJBQUE7Q1grbUM5QjtBVzltQ0Q7RUFBb0MsaUJBQUE7Q1hpbkNuQztBV2huQ0Q7RUFBc0MsaUJBQUE7Q1htbkNyQztBV2xuQ0Q7RUFBMEMsaUJBQUE7Q1hxbkN6QztBV3BuQ0Q7RUFBb0MsaUJBQUE7Q1h1bkNuQztBV3RuQ0Q7RUFBb0MsaUJBQUE7Q1h5bkNuQztBV3huQ0Q7RUFBbUMsaUJBQUE7Q1gybkNsQztBVzFuQ0Q7RUFBa0MsaUJBQUE7Q1g2bkNqQztBVzVuQ0Q7RUFBd0MsaUJBQUE7Q1grbkN2QztBVzluQ0Q7RUFBdUMsaUJBQUE7Q1hpb0N0QztBV2hvQ0Q7RUFBb0MsaUJBQUE7Q1htb0NuQztBV2xvQ0Q7RUFBcUMsaUJBQUE7Q1hxb0NwQztBV3BvQ0Q7RUFBMkMsaUJBQUE7Q1h1b0MxQztBV3RvQ0Q7RUFBbUMsaUJBQUE7Q1h5b0NsQztBV3hvQ0Q7RUFBZ0MsaUJBQUE7Q1gyb0MvQjtBVzFvQ0Q7RUFBdUMsaUJBQUE7Q1g2b0N0QztBVzVvQ0Q7RUFBc0MsaUJBQUE7Q1grb0NyQztBVzlvQ0Q7RUFBdUMsaUJBQUE7Q1hpcEN0QztBV2hwQ0Q7RUFBcUMsaUJBQUE7Q1htcENwQztBV2xwQ0Q7RUFBaUMsaUJBQUE7Q1hxcENoQztBV3BwQ0Q7RUFBZ0MsaUJBQUE7Q1h1cEMvQjtBV3RwQ0Q7RUFBbUMsaUJBQUE7Q1h5cENsQztBV3hwQ0Q7O0VBQ3VDLGlCQUFBO0NYMnBDdEM7QVcxcENEO0VBQTJDLGlCQUFBO0NYNnBDMUM7QVc1cENEO0VBQXdDLGlCQUFBO0NYK3BDdkM7QVc5cENEO0VBQXVDLGlCQUFBO0NYaXFDdEM7QVdocUNEO0VBQXNDLGlCQUFBO0NYbXFDckM7QVdscUNEO0VBQXVDLGlCQUFBO0NYcXFDdEM7QVdwcUNEO0VBQXlDLGlCQUFBO0NYdXFDeEM7QVd0cUNEO0VBQXlDLGlCQUFBO0NYeXFDeEM7QVd4cUNEO0VBQWtDLGlCQUFBO0NYMnFDakM7QVcxcUNEO0VBQXNDLGlCQUFBO0NYNnFDckM7QVc1cUNEO0VBQTZDLGlCQUFBO0NYK3FDNUM7QVc5cUNEO0VBQXVDLGlCQUFBO0NYaXJDdEM7QVdockNEO0VBQW9DLGlCQUFBO0NYbXJDbkM7QVdsckNEO0VBQWtDLGlCQUFBO0NYcXJDakM7QVdwckNEO0VBQXFDLGlCQUFBO0NYdXJDcEM7QVd0ckNEO0VBQXNDLGlCQUFBO0NYeXJDckM7QVd4ckNEOztFQUMrQixpQkFBQTtDWDJyQzlCO0FXMXJDRDtFQUFtQyxpQkFBQTtDWDZyQ2xDO0FXNXJDRDtFQUFpQyxpQkFBQTtDWCtyQ2hDO0FXOXJDRDtFQUFrQyxpQkFBQTtDWGlzQ2pDO0FXaHNDRDtFQUFrQyxpQkFBQTtDWG1zQ2pDO0FXbHNDRDs7RUFDd0MsaUJBQUE7Q1hxc0N2QztBV3BzQ0Q7RUFBeUMsaUJBQUE7Q1h1c0N4QztBV3RzQ0Q7RUFBb0MsaUJBQUE7Q1h5c0NuQztBV3hzQ0Q7RUFBd0MsaUJBQUE7Q1gyc0N2QztBVzFzQ0Q7O0VBQ3dDLGlCQUFBO0NYNnNDdkM7QVc1c0NEOztFQUNrRCxpQkFBQTtDWCtzQ2pEO0FXOXNDRDs7RUFDd0MsaUJBQUE7Q1hpdEN2QztBV2h0Q0Q7O0VBQzJDLGlCQUFBO0NYbXRDMUM7QVdsdENEOztFQUN5QyxpQkFBQTtDWHF0Q3hDO0FXcHRDRDtFQUF5QyxpQkFBQTtDWHV0Q3hDO0FXdHRDRDtFQUFvQyxpQkFBQTtDWHl0Q25DO0FXeHRDRDtFQUF3QyxpQkFBQTtDWDJ0Q3ZDO0FXMXRDRDtFQUEwQyxpQkFBQTtDWDZ0Q3pDO0FXNXRDRDtFQUF1QyxpQkFBQTtDWCt0Q3RDO0FXOXRDRDtFQUF5QyxpQkFBQTtDWGl1Q3hDO0FXaHVDRDtFQUFrQyxpQkFBQTtDWG11Q2pDO0FXbHVDRDtFQUEwQyxpQkFBQTtDWHF1Q3pDO0FXcHVDRDtFQUFpQyxpQkFBQTtDWHV1Q2hDO0FXdHVDRDtFQUF5QyxpQkFBQTtDWHl1Q3hDO0FXeHVDRDtFQUF1QyxpQkFBQTtDWDJ1Q3RDO0FXMXVDRDs7RUFDMkMsaUJBQUE7Q1g2dUMxQztBVzV1Q0Q7O0VBQzBDLGlCQUFBO0NYK3VDekM7QVc5dUNEOztFQUN5QyxpQkFBQTtDWGl2Q3hDO0FXaHZDRDtFQUFxQyxpQkFBQTtDWG12Q3BDO0FXbHZDRDs7RUFDdUMsaUJBQUE7Q1hxdkN0QztBV3B2Q0Q7O0VBQ3dDLGlCQUFBO0NYdXZDdkM7QVd0dkNEO0VBQTJDLGlCQUFBO0NYeXZDMUM7QVd4dkNEO0VBQXlDLGlCQUFBO0NYMnZDeEM7QVcxdkNEO0VBQXdDLGlCQUFBO0NYNnZDdkM7QVc1dkNEO0VBQTBDLGlCQUFBO0NYK3ZDekM7QVc5dkNEO0VBQXdDLGlCQUFBO0NYaXdDdkM7QVdod0NEO0VBQXFDLGlCQUFBO0NYbXdDcEM7QVdsd0NEO0VBQXNDLGlCQUFBO0NYcXdDckM7QVdwd0NEO0VBQTRDLGlCQUFBO0NYdXdDM0M7QVd0d0NEO0VBQThCLGlCQUFBO0NYeXdDN0I7QVd4d0NEO0VBQXFDLGlCQUFBO0NYMndDcEM7QVcxd0NEO0VBQXVDLGlCQUFBO0NYNndDdEM7QVc1d0NEO0VBQXlDLGlCQUFBO0NYK3dDeEM7QVc5d0NEO0VBQWdELGlCQUFBO0NYaXhDL0M7QVdoeENEO0VBQXNDLGlCQUFBO0NYbXhDckM7QVdseENEO0VBQXVDLGlCQUFBO0NYcXhDdEM7QVdweENEO0VBQWtDLGlCQUFBO0NYdXhDakM7QVd0eENEO0VBQWtDLGlCQUFBO0NYeXhDakM7QVd4eENEO0VBQW1DLGlCQUFBO0NYMnhDbEM7QVcxeENEO0VBQWlDLGlCQUFBO0NYNnhDaEM7QVc1eENEO0VBQTZDLGlCQUFBO0NYK3hDNUM7QVc5eENEOztFQUNzQyxpQkFBQTtDWGl5Q3JDO0FXaHlDRDtFQUFrQyxpQkFBQTtDWG15Q2pDO0FXbHlDRDtFQUFpQyxpQkFBQTtDWHF5Q2hDO0FXcHlDRDtFQUFrQyxpQkFBQTtDWHV5Q2pDO0FXdHlDRDtFQUEyQyxpQkFBQTtDWHl5QzFDO0FXeHlDRDtFQUE0QyxpQkFBQTtDWDJ5QzNDO0FXMXlDRDtFQUE0QyxpQkFBQTtDWDZ5QzNDO0FXNXlDRDtFQUE0QyxpQkFBQTtDWCt5QzNDO0FXOXlDRDtFQUFvQyxpQkFBQTtDWGl6Q25DO0FXaHpDRDtFQUFtQyxpQkFBQTtDWG16Q2xDO0FXbHpDRDtFQUFxQyxpQkFBQTtDWHF6Q3BDO0FXcHpDRDtFQUFpQyxpQkFBQTtDWHV6Q2hDO0FXdHpDRDtFQUErQixpQkFBQTtDWHl6QzlCO0FXeHpDRDtFQUFzQyxpQkFBQTtDWDJ6Q3JDO0FXMXpDRDtFQUF3QyxpQkFBQTtDWDZ6Q3ZDO0FXNXpDRDtFQUFpQyxpQkFBQTtDWCt6Q2hDO0FXOXpDRDtFQUFpQyxpQkFBQTtDWGkwQ2hDO0FXaDBDRDtFQUFxQyxpQkFBQTtDWG0wQ3BDO0FXbDBDRDtFQUFxQyxpQkFBQTtDWHEwQ3BDIiwiZmlsZSI6ImZvbnQtYXdlc29tZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqICBGb250IEF3ZXNvbWUgNC40LjAgYnkgQGRhdmVnYW5keSAtIGh0dHA6Ly9mb250YXdlc29tZS5pbyAtIEBmb250YXdlc29tZVxuICogIExpY2Vuc2UgLSBodHRwOi8vZm9udGF3ZXNvbWUuaW8vbGljZW5zZSAoRm9udDogU0lMIE9GTCAxLjEsIENTUzogTUlUIExpY2Vuc2UpXG4gKi9cbi8qIEZPTlQgUEFUSFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ZvbnRBd2Vzb21lJztcbiAgc3JjOiB1cmwoJy4uL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQuZW90P3Y9NC40LjAnKTtcbiAgc3JjOiB1cmwoJy4uL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQuZW90PyNpZWZpeCZ2PTQuNC4wJykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLCB1cmwoJy4uL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQud29mZjI/dj00LjQuMCcpIGZvcm1hdCgnd29mZjInKSwgdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmY/dj00LjQuMCcpIGZvcm1hdCgnd29mZicpLCB1cmwoJy4uL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQudHRmP3Y9NC40LjAnKSBmb3JtYXQoJ3RydWV0eXBlJyksIHVybCgnLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5zdmc/dj00LjQuMCNmb250YXdlc29tZXJlZ3VsYXInKSBmb3JtYXQoJ3N2ZycpO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG59XG4uZmEge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICB0ZXh0LXJlbmRlcmluZzogYXV0bztcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG4vKiBtYWtlcyB0aGUgZm9udCAzMyUgbGFyZ2VyIHJlbGF0aXZlIHRvIHRoZSBpY29uIGNvbnRhaW5lciAqL1xuLmZhLWxnIHtcbiAgZm9udC1zaXplOiAxLjMzMzMzMzMzZW07XG4gIGxpbmUtaGVpZ2h0OiAwLjc1ZW07XG4gIHZlcnRpY2FsLWFsaWduOiAtMTUlO1xufVxuLmZhLTJ4IHtcbiAgZm9udC1zaXplOiAyZW07XG59XG4uZmEtM3gge1xuICBmb250LXNpemU6IDNlbTtcbn1cbi5mYS00eCB7XG4gIGZvbnQtc2l6ZTogNGVtO1xufVxuLmZhLTV4IHtcbiAgZm9udC1zaXplOiA1ZW07XG59XG4uZmEtZncge1xuICB3aWR0aDogMS4yODU3MTQyOWVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uZmEtdWwge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIG1hcmdpbi1sZWZ0OiAyLjE0Mjg1NzE0ZW07XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbn1cbi5mYS11bCA+IGxpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmZhLWxpIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAtMi4xNDI4NTcxNGVtO1xuICB3aWR0aDogMi4xNDI4NTcxNGVtO1xuICB0b3A6IDAuMTQyODU3MTRlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmZhLWxpLmZhLWxnIHtcbiAgbGVmdDogLTEuODU3MTQyODZlbTtcbn1cbi5mYS1ib3JkZXIge1xuICBwYWRkaW5nOiAuMmVtIC4yNWVtIC4xNWVtO1xuICBib3JkZXI6IHNvbGlkIDAuMDhlbSAjZWVlO1xuICBib3JkZXItcmFkaXVzOiAuMWVtO1xufVxuLmZhLXB1bGwtbGVmdCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLmZhLXB1bGwtcmlnaHQge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uZmEuZmEtcHVsbC1sZWZ0IHtcbiAgbWFyZ2luLXJpZ2h0OiAuM2VtO1xufVxuLmZhLmZhLXB1bGwtcmlnaHQge1xuICBtYXJnaW4tbGVmdDogLjNlbTtcbn1cbi8qIERlcHJlY2F0ZWQgYXMgb2YgNC40LjAgKi9cbi5wdWxsLXJpZ2h0IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuLnB1bGwtbGVmdCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLmZhLnB1bGwtbGVmdCB7XG4gIG1hcmdpbi1yaWdodDogLjNlbTtcbn1cbi5mYS5wdWxsLXJpZ2h0IHtcbiAgbWFyZ2luLWxlZnQ6IC4zZW07XG59XG4uZmEtc3BpbiB7XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmYS1zcGluIDJzIGluZmluaXRlIGxpbmVhcjtcbiAgYW5pbWF0aW9uOiBmYS1zcGluIDJzIGluZmluaXRlIGxpbmVhcjtcbn1cbi5mYS1wdWxzZSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmYS1zcGluIDFzIGluZmluaXRlIHN0ZXBzKDgpO1xuICBhbmltYXRpb246IGZhLXNwaW4gMXMgaW5maW5pdGUgc3RlcHMoOCk7XG59XG5ALXdlYmtpdC1rZXlmcmFtZXMgZmEtc3BpbiB7XG4gIDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xuICB9XG59XG5Aa2V5ZnJhbWVzIGZhLXNwaW4ge1xuICAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICAxMDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgfVxufVxuLmZhLXJvdGF0ZS05MCB7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249MSk7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG59XG4uZmEtcm90YXRlLTE4MCB7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249Mik7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG59XG4uZmEtcm90YXRlLTI3MCB7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249Myk7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcbiAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7XG4gIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7XG59XG4uZmEtZmxpcC1ob3Jpem9udGFsIHtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0wLCBtaXJyb3I9MSk7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7XG4gIC1tcy10cmFuc2Zvcm06IHNjYWxlKC0xLCAxKTtcbiAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7XG59XG4uZmEtZmxpcC12ZXJ0aWNhbCB7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249MiwgbWlycm9yPTEpO1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSwgLTEpO1xuICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgxLCAtMSk7XG4gIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpO1xufVxuOnJvb3QgLmZhLXJvdGF0ZS05MCxcbjpyb290IC5mYS1yb3RhdGUtMTgwLFxuOnJvb3QgLmZhLXJvdGF0ZS0yNzAsXG46cm9vdCAuZmEtZmxpcC1ob3Jpem9udGFsLFxuOnJvb3QgLmZhLWZsaXAtdmVydGljYWwge1xuICBmaWx0ZXI6IG5vbmU7XG59XG4uZmEtc3RhY2sge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDJlbTtcbiAgaGVpZ2h0OiAyZW07XG4gIGxpbmUtaGVpZ2h0OiAyZW07XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uZmEtc3RhY2stMXgsXG4uZmEtc3RhY2stMngge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uZmEtc3RhY2stMXgge1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbn1cbi5mYS1zdGFjay0yeCB7XG4gIGZvbnQtc2l6ZTogMmVtO1xufVxuLmZhLWludmVyc2Uge1xuICBjb2xvcjogI2ZmZjtcbn1cbi8qIEZvbnQgQXdlc29tZSB1c2VzIHRoZSBVbmljb2RlIFByaXZhdGUgVXNlIEFyZWEgKFBVQSkgdG8gZW5zdXJlIHNjcmVlblxuICAgcmVhZGVycyBkbyBub3QgcmVhZCBvZmYgcmFuZG9tIGNoYXJhY3RlcnMgdGhhdCByZXByZXNlbnQgaWNvbnMgKi9cbi5mYS1nbGFzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwMFwiO1xufVxuLmZhLW11c2ljOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDAxXCI7XG59XG4uZmEtc2VhcmNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDAyXCI7XG59XG4uZmEtZW52ZWxvcGUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwM1wiO1xufVxuLmZhLWhlYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDA0XCI7XG59XG4uZmEtc3RhcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwNVwiO1xufVxuLmZhLXN0YXItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwNlwiO1xufVxuLmZhLXVzZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMDdcIjtcbn1cbi5mYS1maWxtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDA4XCI7XG59XG4uZmEtdGgtbGFyZ2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMDlcIjtcbn1cbi5mYS10aDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwYVwiO1xufVxuLmZhLXRoLWxpc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMGJcIjtcbn1cbi5mYS1jaGVjazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAwY1wiO1xufVxuLmZhLXJlbW92ZTpiZWZvcmUsXG4uZmEtY2xvc2U6YmVmb3JlLFxuLmZhLXRpbWVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDBkXCI7XG59XG4uZmEtc2VhcmNoLXBsdXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMGVcIjtcbn1cbi5mYS1zZWFyY2gtbWludXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTBcIjtcbn1cbi5mYS1wb3dlci1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTFcIjtcbn1cbi5mYS1zaWduYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTJcIjtcbn1cbi5mYS1nZWFyOmJlZm9yZSxcbi5mYS1jb2c6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTNcIjtcbn1cbi5mYS10cmFzaC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDE0XCI7XG59XG4uZmEtaG9tZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxNVwiO1xufVxuLmZhLWZpbGUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxNlwiO1xufVxuLmZhLWNsb2NrLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTdcIjtcbn1cbi5mYS1yb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDE4XCI7XG59XG4uZmEtZG93bmxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMTlcIjtcbn1cbi5mYS1hcnJvdy1jaXJjbGUtby1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDFhXCI7XG59XG4uZmEtYXJyb3ctY2lyY2xlLW8tdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMWJcIjtcbn1cbi5mYS1pbmJveDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxY1wiO1xufVxuLmZhLXBsYXktY2lyY2xlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMWRcIjtcbn1cbi5mYS1yb3RhdGUtcmlnaHQ6YmVmb3JlLFxuLmZhLXJlcGVhdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAxZVwiO1xufVxuLmZhLXJlZnJlc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMjFcIjtcbn1cbi5mYS1saXN0LWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyMlwiO1xufVxuLmZhLWxvY2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMjNcIjtcbn1cbi5mYS1mbGFnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDI0XCI7XG59XG4uZmEtaGVhZHBob25lczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyNVwiO1xufVxuLmZhLXZvbHVtZS1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMjZcIjtcbn1cbi5mYS12b2x1bWUtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyN1wiO1xufVxuLmZhLXZvbHVtZS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyOFwiO1xufVxuLmZhLXFyY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyOVwiO1xufVxuLmZhLWJhcmNvZGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMmFcIjtcbn1cbi5mYS10YWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMmJcIjtcbn1cbi5mYS10YWdzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDJjXCI7XG59XG4uZmEtYm9vazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAyZFwiO1xufVxuLmZhLWJvb2ttYXJrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDJlXCI7XG59XG4uZmEtcHJpbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMmZcIjtcbn1cbi5mYS1jYW1lcmE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMzBcIjtcbn1cbi5mYS1mb250OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDMxXCI7XG59XG4uZmEtYm9sZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzMlwiO1xufVxuLmZhLWl0YWxpYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzM1wiO1xufVxuLmZhLXRleHQtaGVpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDM0XCI7XG59XG4uZmEtdGV4dC13aWR0aDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzNVwiO1xufVxuLmZhLWFsaWduLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMzZcIjtcbn1cbi5mYS1hbGlnbi1jZW50ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMzdcIjtcbn1cbi5mYS1hbGlnbi1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjAzOFwiO1xufVxuLmZhLWFsaWduLWp1c3RpZnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwMzlcIjtcbn1cbi5mYS1saXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDNhXCI7XG59XG4uZmEtZGVkZW50OmJlZm9yZSxcbi5mYS1vdXRkZW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDNiXCI7XG59XG4uZmEtaW5kZW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDNjXCI7XG59XG4uZmEtdmlkZW8tY2FtZXJhOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDNkXCI7XG59XG4uZmEtcGhvdG86YmVmb3JlLFxuLmZhLWltYWdlOmJlZm9yZSxcbi5mYS1waWN0dXJlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwM2VcIjtcbn1cbi5mYS1wZW5jaWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNDBcIjtcbn1cbi5mYS1tYXAtbWFya2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDQxXCI7XG59XG4uZmEtYWRqdXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDQyXCI7XG59XG4uZmEtdGludDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0M1wiO1xufVxuLmZhLWVkaXQ6YmVmb3JlLFxuLmZhLXBlbmNpbC1zcXVhcmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0NFwiO1xufVxuLmZhLXNoYXJlLXNxdWFyZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDQ1XCI7XG59XG4uZmEtY2hlY2stc3F1YXJlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNDZcIjtcbn1cbi5mYS1hcnJvd3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNDdcIjtcbn1cbi5mYS1zdGVwLWJhY2t3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDQ4XCI7XG59XG4uZmEtZmFzdC1iYWNrd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0OVwiO1xufVxuLmZhLWJhY2t3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDRhXCI7XG59XG4uZmEtcGxheTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0YlwiO1xufVxuLmZhLXBhdXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDRjXCI7XG59XG4uZmEtc3RvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA0ZFwiO1xufVxuLmZhLWZvcndhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNGVcIjtcbn1cbi5mYS1mYXN0LWZvcndhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNTBcIjtcbn1cbi5mYS1zdGVwLWZvcndhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNTFcIjtcbn1cbi5mYS1lamVjdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1MlwiO1xufVxuLmZhLWNoZXZyb24tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1M1wiO1xufVxuLmZhLWNoZXZyb24tcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNTRcIjtcbn1cbi5mYS1wbHVzLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1NVwiO1xufVxuLmZhLW1pbnVzLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1NlwiO1xufVxuLmZhLXRpbWVzLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1N1wiO1xufVxuLmZhLWNoZWNrLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1OFwiO1xufVxuLmZhLXF1ZXN0aW9uLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1OVwiO1xufVxuLmZhLWluZm8tY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDVhXCI7XG59XG4uZmEtY3Jvc3NoYWlyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA1YlwiO1xufVxuLmZhLXRpbWVzLWNpcmNsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDVjXCI7XG59XG4uZmEtY2hlY2stY2lyY2xlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNWRcIjtcbn1cbi5mYS1iYW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNWVcIjtcbn1cbi5mYS1hcnJvdy1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDYwXCI7XG59XG4uZmEtYXJyb3ctcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNjFcIjtcbn1cbi5mYS1hcnJvdy11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2MlwiO1xufVxuLmZhLWFycm93LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNjNcIjtcbn1cbi5mYS1tYWlsLWZvcndhcmQ6YmVmb3JlLFxuLmZhLXNoYXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDY0XCI7XG59XG4uZmEtZXhwYW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDY1XCI7XG59XG4uZmEtY29tcHJlc3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNjZcIjtcbn1cbi5mYS1wbHVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDY3XCI7XG59XG4uZmEtbWludXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNjhcIjtcbn1cbi5mYS1hc3RlcmlzazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2OVwiO1xufVxuLmZhLWV4Y2xhbWF0aW9uLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2YVwiO1xufVxuLmZhLWdpZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNmJcIjtcbn1cbi5mYS1sZWFmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDZjXCI7XG59XG4uZmEtZmlyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2ZFwiO1xufVxuLmZhLWV5ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA2ZVwiO1xufVxuLmZhLWV5ZS1zbGFzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3MFwiO1xufVxuLmZhLXdhcm5pbmc6YmVmb3JlLFxuLmZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDcxXCI7XG59XG4uZmEtcGxhbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNzJcIjtcbn1cbi5mYS1jYWxlbmRhcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3M1wiO1xufVxuLmZhLXJhbmRvbTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3NFwiO1xufVxuLmZhLWNvbW1lbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNzVcIjtcbn1cbi5mYS1tYWduZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwNzZcIjtcbn1cbi5mYS1jaGV2cm9uLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDc3XCI7XG59XG4uZmEtY2hldnJvbi1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDc4XCI7XG59XG4uZmEtcmV0d2VldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3OVwiO1xufVxuLmZhLXNob3BwaW5nLWNhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwN2FcIjtcbn1cbi5mYS1mb2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwN2JcIjtcbn1cbi5mYS1mb2xkZXItb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA3Y1wiO1xufVxuLmZhLWFycm93cy12OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDdkXCI7XG59XG4uZmEtYXJyb3dzLWg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwN2VcIjtcbn1cbi5mYS1iYXItY2hhcnQtbzpiZWZvcmUsXG4uZmEtYmFyLWNoYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDgwXCI7XG59XG4uZmEtdHdpdHRlci1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODFcIjtcbn1cbi5mYS1mYWNlYm9vay1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODJcIjtcbn1cbi5mYS1jYW1lcmEtcmV0cm86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODNcIjtcbn1cbi5mYS1rZXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODRcIjtcbn1cbi5mYS1nZWFyczpiZWZvcmUsXG4uZmEtY29nczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA4NVwiO1xufVxuLmZhLWNvbW1lbnRzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDg2XCI7XG59XG4uZmEtdGh1bWJzLW8tdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwODdcIjtcbn1cbi5mYS10aHVtYnMtby1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDg4XCI7XG59XG4uZmEtc3Rhci1oYWxmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDg5XCI7XG59XG4uZmEtaGVhcnQtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA4YVwiO1xufVxuLmZhLXNpZ24tb3V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDhiXCI7XG59XG4uZmEtbGlua2VkaW4tc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDhjXCI7XG59XG4uZmEtdGh1bWItdGFjazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA4ZFwiO1xufVxuLmZhLWV4dGVybmFsLWxpbms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwOGVcIjtcbn1cbi5mYS1zaWduLWluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDkwXCI7XG59XG4uZmEtdHJvcGh5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDkxXCI7XG59XG4uZmEtZ2l0aHViLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5MlwiO1xufVxuLmZhLXVwbG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5M1wiO1xufVxuLmZhLWxlbW9uLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwOTRcIjtcbn1cbi5mYS1waG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5NVwiO1xufVxuLmZhLXNxdWFyZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDk2XCI7XG59XG4uZmEtYm9va21hcmstbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5N1wiO1xufVxuLmZhLXBob25lLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5OFwiO1xufVxuLmZhLXR3aXR0ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwOTlcIjtcbn1cbi5mYS1mYWNlYm9vay1mOmJlZm9yZSxcbi5mYS1mYWNlYm9vazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5YVwiO1xufVxuLmZhLWdpdGh1YjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5YlwiO1xufVxuLmZhLXVubG9jazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjA5Y1wiO1xufVxuLmZhLWNyZWRpdC1jYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDlkXCI7XG59XG4uZmEtZmVlZDpiZWZvcmUsXG4uZmEtcnNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMDllXCI7XG59XG4uZmEtaGRkLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYTBcIjtcbn1cbi5mYS1idWxsaG9ybjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhMVwiO1xufVxuLmZhLWJlbGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZjNcIjtcbn1cbi5mYS1jZXJ0aWZpY2F0ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhM1wiO1xufVxuLmZhLWhhbmQtby1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhNFwiO1xufVxuLmZhLWhhbmQtby1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGE1XCI7XG59XG4uZmEtaGFuZC1vLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGE2XCI7XG59XG4uZmEtaGFuZC1vLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYTdcIjtcbn1cbi5mYS1hcnJvdy1jaXJjbGUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhOFwiO1xufVxuLmZhLWFycm93LWNpcmNsZS1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhOVwiO1xufVxuLmZhLWFycm93LWNpcmNsZS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhYVwiO1xufVxuLmZhLWFycm93LWNpcmNsZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGFiXCI7XG59XG4uZmEtZ2xvYmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYWNcIjtcbn1cbi5mYS13cmVuY2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYWRcIjtcbn1cbi5mYS10YXNrczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhZVwiO1xufVxuLmZhLWZpbHRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBiMFwiO1xufVxuLmZhLWJyaWVmY2FzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBiMVwiO1xufVxuLmZhLWFycm93cy1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYjJcIjtcbn1cbi5mYS1ncm91cDpiZWZvcmUsXG4uZmEtdXNlcnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYzBcIjtcbn1cbi5mYS1jaGFpbjpiZWZvcmUsXG4uZmEtbGluazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjMVwiO1xufVxuLmZhLWNsb3VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGMyXCI7XG59XG4uZmEtZmxhc2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwYzNcIjtcbn1cbi5mYS1jdXQ6YmVmb3JlLFxuLmZhLXNjaXNzb3JzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGM0XCI7XG59XG4uZmEtY29weTpiZWZvcmUsXG4uZmEtZmlsZXMtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjNVwiO1xufVxuLmZhLXBhcGVyY2xpcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjNlwiO1xufVxuLmZhLXNhdmU6YmVmb3JlLFxuLmZhLWZsb3BweS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGM3XCI7XG59XG4uZmEtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGM4XCI7XG59XG4uZmEtbmF2aWNvbjpiZWZvcmUsXG4uZmEtcmVvcmRlcjpiZWZvcmUsXG4uZmEtYmFyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjOVwiO1xufVxuLmZhLWxpc3QtdWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwY2FcIjtcbn1cbi5mYS1saXN0LW9sOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGNiXCI7XG59XG4uZmEtc3RyaWtldGhyb3VnaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjY1wiO1xufVxuLmZhLXVuZGVybGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBjZFwiO1xufVxuLmZhLXRhYmxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGNlXCI7XG59XG4uZmEtbWFnaWM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZDBcIjtcbn1cbi5mYS10cnVjazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkMVwiO1xufVxuLmZhLXBpbnRlcmVzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkMlwiO1xufVxuLmZhLXBpbnRlcmVzdC1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZDNcIjtcbn1cbi5mYS1nb29nbGUtcGx1cy1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZDRcIjtcbn1cbi5mYS1nb29nbGUtcGx1czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkNVwiO1xufVxuLmZhLW1vbmV5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGQ2XCI7XG59XG4uZmEtY2FyZXQtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkN1wiO1xufVxuLmZhLWNhcmV0LXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGQ4XCI7XG59XG4uZmEtY2FyZXQtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkOVwiO1xufVxuLmZhLWNhcmV0LXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGRhXCI7XG59XG4uZmEtY29sdW1uczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkYlwiO1xufVxuLmZhLXVuc29ydGVkOmJlZm9yZSxcbi5mYS1zb3J0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGRjXCI7XG59XG4uZmEtc29ydC1kb3duOmJlZm9yZSxcbi5mYS1zb3J0LWRlc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZGRcIjtcbn1cbi5mYS1zb3J0LXVwOmJlZm9yZSxcbi5mYS1zb3J0LWFzYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBkZVwiO1xufVxuLmZhLWVudmVsb3BlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGUwXCI7XG59XG4uZmEtbGlua2VkaW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZTFcIjtcbn1cbi5mYS1yb3RhdGUtbGVmdDpiZWZvcmUsXG4uZmEtdW5kbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlMlwiO1xufVxuLmZhLWxlZ2FsOmJlZm9yZSxcbi5mYS1nYXZlbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlM1wiO1xufVxuLmZhLWRhc2hib2FyZDpiZWZvcmUsXG4uZmEtdGFjaG9tZXRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlNFwiO1xufVxuLmZhLWNvbW1lbnQtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlNVwiO1xufVxuLmZhLWNvbW1lbnRzLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZTZcIjtcbn1cbi5mYS1mbGFzaDpiZWZvcmUsXG4uZmEtYm9sdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlN1wiO1xufVxuLmZhLXNpdGVtYXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZThcIjtcbn1cbi5mYS11bWJyZWxsYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlOVwiO1xufVxuLmZhLXBhc3RlOmJlZm9yZSxcbi5mYS1jbGlwYm9hcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZWFcIjtcbn1cbi5mYS1saWdodGJ1bGItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBlYlwiO1xufVxuLmZhLWV4Y2hhbmdlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGVjXCI7XG59XG4uZmEtY2xvdWQtZG93bmxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZWRcIjtcbn1cbi5mYS1jbG91ZC11cGxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZWVcIjtcbn1cbi5mYS11c2VyLW1kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGYwXCI7XG59XG4uZmEtc3RldGhvc2NvcGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZjFcIjtcbn1cbi5mYS1zdWl0Y2FzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmMlwiO1xufVxuLmZhLWJlbGwtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBhMlwiO1xufVxuLmZhLWNvZmZlZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmNFwiO1xufVxuLmZhLWN1dGxlcnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZjVcIjtcbn1cbi5mYS1maWxlLXRleHQtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmNlwiO1xufVxuLmZhLWJ1aWxkaW5nLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZjdcIjtcbn1cbi5mYS1ob3NwaXRhbC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGY4XCI7XG59XG4uZmEtYW1idWxhbmNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGY5XCI7XG59XG4uZmEtbWVka2l0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGZhXCI7XG59XG4uZmEtZmlnaHRlci1qZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZmJcIjtcbn1cbi5mYS1iZWVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGZjXCI7XG59XG4uZmEtaC1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZmRcIjtcbn1cbi5mYS1wbHVzLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjBmZVwiO1xufVxuLmZhLWFuZ2xlLWRvdWJsZS1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTAwXCI7XG59XG4uZmEtYW5nbGUtZG91YmxlLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTAxXCI7XG59XG4uZmEtYW5nbGUtZG91YmxlLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTAyXCI7XG59XG4uZmEtYW5nbGUtZG91YmxlLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDNcIjtcbn1cbi5mYS1hbmdsZS1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTA0XCI7XG59XG4uZmEtYW5nbGUtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDVcIjtcbn1cbi5mYS1hbmdsZS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwNlwiO1xufVxuLmZhLWFuZ2xlLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDdcIjtcbn1cbi5mYS1kZXNrdG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTA4XCI7XG59XG4uZmEtbGFwdG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTA5XCI7XG59XG4uZmEtdGFibGV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTBhXCI7XG59XG4uZmEtbW9iaWxlLXBob25lOmJlZm9yZSxcbi5mYS1tb2JpbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMGJcIjtcbn1cbi5mYS1jaXJjbGUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwY1wiO1xufVxuLmZhLXF1b3RlLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMGRcIjtcbn1cbi5mYS1xdW90ZS1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwZVwiO1xufVxuLmZhLXNwaW5uZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTBcIjtcbn1cbi5mYS1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTFcIjtcbn1cbi5mYS1tYWlsLXJlcGx5OmJlZm9yZSxcbi5mYS1yZXBseTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExMlwiO1xufVxuLmZhLWdpdGh1Yi1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTNcIjtcbn1cbi5mYS1mb2xkZXItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExNFwiO1xufVxuLmZhLWZvbGRlci1vcGVuLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTVcIjtcbn1cbi5mYS1zbWlsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTE4XCI7XG59XG4uZmEtZnJvd24tbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExOVwiO1xufVxuLmZhLW1laC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTFhXCI7XG59XG4uZmEtZ2FtZXBhZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExYlwiO1xufVxuLmZhLWtleWJvYXJkLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMWNcIjtcbn1cbi5mYS1mbGFnLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMWRcIjtcbn1cbi5mYS1mbGFnLWNoZWNrZXJlZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExZVwiO1xufVxuLmZhLXRlcm1pbmFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTIwXCI7XG59XG4uZmEtY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyMVwiO1xufVxuLmZhLW1haWwtcmVwbHktYWxsOmJlZm9yZSxcbi5mYS1yZXBseS1hbGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMjJcIjtcbn1cbi5mYS1zdGFyLWhhbGYtZW1wdHk6YmVmb3JlLFxuLmZhLXN0YXItaGFsZi1mdWxsOmJlZm9yZSxcbi5mYS1zdGFyLWhhbGYtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyM1wiO1xufVxuLmZhLWxvY2F0aW9uLWFycm93OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTI0XCI7XG59XG4uZmEtY3JvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyNVwiO1xufVxuLmZhLWNvZGUtZm9yazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyNlwiO1xufVxuLmZhLXVubGluazpiZWZvcmUsXG4uZmEtY2hhaW4tYnJva2VuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTI3XCI7XG59XG4uZmEtcXVlc3Rpb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMjhcIjtcbn1cbi5mYS1pbmZvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTI5XCI7XG59XG4uZmEtZXhjbGFtYXRpb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMmFcIjtcbn1cbi5mYS1zdXBlcnNjcmlwdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyYlwiO1xufVxuLmZhLXN1YnNjcmlwdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyY1wiO1xufVxuLmZhLWVyYXNlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyZFwiO1xufVxuLmZhLXB1enpsZS1waWVjZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyZVwiO1xufVxuLmZhLW1pY3JvcGhvbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMzBcIjtcbn1cbi5mYS1taWNyb3Bob25lLXNsYXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTMxXCI7XG59XG4uZmEtc2hpZWxkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTMyXCI7XG59XG4uZmEtY2FsZW5kYXItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzM1wiO1xufVxuLmZhLWZpcmUtZXh0aW5ndWlzaGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTM0XCI7XG59XG4uZmEtcm9ja2V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTM1XCI7XG59XG4uZmEtbWF4Y2RuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTM2XCI7XG59XG4uZmEtY2hldnJvbi1jaXJjbGUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzN1wiO1xufVxuLmZhLWNoZXZyb24tY2lyY2xlLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTM4XCI7XG59XG4uZmEtY2hldnJvbi1jaXJjbGUtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMzlcIjtcbn1cbi5mYS1jaGV2cm9uLWNpcmNsZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTNhXCI7XG59XG4uZmEtaHRtbDU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxM2JcIjtcbn1cbi5mYS1jc3MzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTNjXCI7XG59XG4uZmEtYW5jaG9yOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTNkXCI7XG59XG4uZmEtdW5sb2NrLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzZVwiO1xufVxuLmZhLWJ1bGxzZXllOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQwXCI7XG59XG4uZmEtZWxsaXBzaXMtaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0MVwiO1xufVxuLmZhLWVsbGlwc2lzLXY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDJcIjtcbn1cbi5mYS1yc3Mtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQzXCI7XG59XG4uZmEtcGxheS1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDRcIjtcbn1cbi5mYS10aWNrZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDVcIjtcbn1cbi5mYS1taW51cy1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDZcIjtcbn1cbi5mYS1taW51cy1zcXVhcmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0N1wiO1xufVxuLmZhLWxldmVsLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQ4XCI7XG59XG4uZmEtbGV2ZWwtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0OVwiO1xufVxuLmZhLWNoZWNrLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0YVwiO1xufVxuLmZhLXBlbmNpbC1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNGJcIjtcbn1cbi5mYS1leHRlcm5hbC1saW5rLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0Y1wiO1xufVxuLmZhLXNoYXJlLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0ZFwiO1xufVxuLmZhLWNvbXBhc3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNGVcIjtcbn1cbi5mYS10b2dnbGUtZG93bjpiZWZvcmUsXG4uZmEtY2FyZXQtc3F1YXJlLW8tZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1MFwiO1xufVxuLmZhLXRvZ2dsZS11cDpiZWZvcmUsXG4uZmEtY2FyZXQtc3F1YXJlLW8tdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNTFcIjtcbn1cbi5mYS10b2dnbGUtcmlnaHQ6YmVmb3JlLFxuLmZhLWNhcmV0LXNxdWFyZS1vLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTUyXCI7XG59XG4uZmEtZXVybzpiZWZvcmUsXG4uZmEtZXVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTUzXCI7XG59XG4uZmEtZ2JwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTU0XCI7XG59XG4uZmEtZG9sbGFyOmJlZm9yZSxcbi5mYS11c2Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNTVcIjtcbn1cbi5mYS1ydXBlZTpiZWZvcmUsXG4uZmEtaW5yOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTU2XCI7XG59XG4uZmEtY255OmJlZm9yZSxcbi5mYS1ybWI6YmVmb3JlLFxuLmZhLXllbjpiZWZvcmUsXG4uZmEtanB5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTU3XCI7XG59XG4uZmEtcnVibGU6YmVmb3JlLFxuLmZhLXJvdWJsZTpiZWZvcmUsXG4uZmEtcnViOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTU4XCI7XG59XG4uZmEtd29uOmJlZm9yZSxcbi5mYS1rcnc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNTlcIjtcbn1cbi5mYS1iaXRjb2luOmJlZm9yZSxcbi5mYS1idGM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNWFcIjtcbn1cbi5mYS1maWxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTViXCI7XG59XG4uZmEtZmlsZS10ZXh0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTVjXCI7XG59XG4uZmEtc29ydC1hbHBoYS1hc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNWRcIjtcbn1cbi5mYS1zb3J0LWFscGhhLWRlc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNWVcIjtcbn1cbi5mYS1zb3J0LWFtb3VudC1hc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjBcIjtcbn1cbi5mYS1zb3J0LWFtb3VudC1kZXNjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTYxXCI7XG59XG4uZmEtc29ydC1udW1lcmljLWFzYzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2MlwiO1xufVxuLmZhLXNvcnQtbnVtZXJpYy1kZXNjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTYzXCI7XG59XG4uZmEtdGh1bWJzLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTY0XCI7XG59XG4uZmEtdGh1bWJzLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjVcIjtcbn1cbi5mYS15b3V0dWJlLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2NlwiO1xufVxuLmZhLXlvdXR1YmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjdcIjtcbn1cbi5mYS14aW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTY4XCI7XG59XG4uZmEteGluZy1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjlcIjtcbn1cbi5mYS15b3V0dWJlLXBsYXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNmFcIjtcbn1cbi5mYS1kcm9wYm94OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTZiXCI7XG59XG4uZmEtc3RhY2stb3ZlcmZsb3c6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNmNcIjtcbn1cbi5mYS1pbnN0YWdyYW06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNmRcIjtcbn1cbi5mYS1mbGlja3I6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNmVcIjtcbn1cbi5mYS1hZG46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzBcIjtcbn1cbi5mYS1iaXRidWNrZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzFcIjtcbn1cbi5mYS1iaXRidWNrZXQtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTcyXCI7XG59XG4uZmEtdHVtYmxyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTczXCI7XG59XG4uZmEtdHVtYmxyLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3NFwiO1xufVxuLmZhLWxvbmctYXJyb3ctZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3NVwiO1xufVxuLmZhLWxvbmctYXJyb3ctdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzZcIjtcbn1cbi5mYS1sb25nLWFycm93LWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzdcIjtcbn1cbi5mYS1sb25nLWFycm93LXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTc4XCI7XG59XG4uZmEtYXBwbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzlcIjtcbn1cbi5mYS13aW5kb3dzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTdhXCI7XG59XG4uZmEtYW5kcm9pZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3YlwiO1xufVxuLmZhLWxpbnV4OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTdjXCI7XG59XG4uZmEtZHJpYmJibGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxN2RcIjtcbn1cbi5mYS1za3lwZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3ZVwiO1xufVxuLmZhLWZvdXJzcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODBcIjtcbn1cbi5mYS10cmVsbG86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODFcIjtcbn1cbi5mYS1mZW1hbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODJcIjtcbn1cbi5mYS1tYWxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTgzXCI7XG59XG4uZmEtZ2l0dGlwOmJlZm9yZSxcbi5mYS1ncmF0aXBheTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4NFwiO1xufVxuLmZhLXN1bi1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTg1XCI7XG59XG4uZmEtbW9vbi1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTg2XCI7XG59XG4uZmEtYXJjaGl2ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4N1wiO1xufVxuLmZhLWJ1ZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4OFwiO1xufVxuLmZhLXZrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTg5XCI7XG59XG4uZmEtd2VpYm86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOGFcIjtcbn1cbi5mYS1yZW5yZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOGJcIjtcbn1cbi5mYS1wYWdlbGluZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOGNcIjtcbn1cbi5mYS1zdGFjay1leGNoYW5nZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4ZFwiO1xufVxuLmZhLWFycm93LWNpcmNsZS1vLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMThlXCI7XG59XG4uZmEtYXJyb3ctY2lyY2xlLW8tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5MFwiO1xufVxuLmZhLXRvZ2dsZS1sZWZ0OmJlZm9yZSxcbi5mYS1jYXJldC1zcXVhcmUtby1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTkxXCI7XG59XG4uZmEtZG90LWNpcmNsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTkyXCI7XG59XG4uZmEtd2hlZWxjaGFpcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5M1wiO1xufVxuLmZhLXZpbWVvLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5NFwiO1xufVxuLmZhLXR1cmtpc2gtbGlyYTpiZWZvcmUsXG4uZmEtdHJ5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTk1XCI7XG59XG4uZmEtcGx1cy1zcXVhcmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5NlwiO1xufVxuLmZhLXNwYWNlLXNodXR0bGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOTdcIjtcbn1cbi5mYS1zbGFjazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5OFwiO1xufVxuLmZhLWVudmVsb3BlLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5OVwiO1xufVxuLmZhLXdvcmRwcmVzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5YVwiO1xufVxuLmZhLW9wZW5pZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5YlwiO1xufVxuLmZhLWluc3RpdHV0aW9uOmJlZm9yZSxcbi5mYS1iYW5rOmJlZm9yZSxcbi5mYS11bml2ZXJzaXR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTljXCI7XG59XG4uZmEtbW9ydGFyLWJvYXJkOmJlZm9yZSxcbi5mYS1ncmFkdWF0aW9uLWNhcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5ZFwiO1xufVxuLmZhLXlhaG9vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTllXCI7XG59XG4uZmEtZ29vZ2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWEwXCI7XG59XG4uZmEtcmVkZGl0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWExXCI7XG59XG4uZmEtcmVkZGl0LXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhMlwiO1xufVxuLmZhLXN0dW1ibGV1cG9uLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhM1wiO1xufVxuLmZhLXN0dW1ibGV1cG9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWE0XCI7XG59XG4uZmEtZGVsaWNpb3VzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWE1XCI7XG59XG4uZmEtZGlnZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhNlwiO1xufVxuLmZhLXBpZWQtcGlwZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYTdcIjtcbn1cbi5mYS1waWVkLXBpcGVyLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhOFwiO1xufVxuLmZhLWRydXBhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhOVwiO1xufVxuLmZhLWpvb21sYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhYVwiO1xufVxuLmZhLWxhbmd1YWdlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWFiXCI7XG59XG4uZmEtZmF4OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWFjXCI7XG59XG4uZmEtYnVpbGRpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYWRcIjtcbn1cbi5mYS1jaGlsZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhZVwiO1xufVxuLmZhLXBhdzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiMFwiO1xufVxuLmZhLXNwb29uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWIxXCI7XG59XG4uZmEtY3ViZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiMlwiO1xufVxuLmZhLWN1YmVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWIzXCI7XG59XG4uZmEtYmVoYW5jZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiNFwiO1xufVxuLmZhLWJlaGFuY2Utc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWI1XCI7XG59XG4uZmEtc3RlYW06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjZcIjtcbn1cbi5mYS1zdGVhbS1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjdcIjtcbn1cbi5mYS1yZWN5Y2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWI4XCI7XG59XG4uZmEtYXV0b21vYmlsZTpiZWZvcmUsXG4uZmEtY2FyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWI5XCI7XG59XG4uZmEtY2FiOmJlZm9yZSxcbi5mYS10YXhpOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWJhXCI7XG59XG4uZmEtdHJlZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiYlwiO1xufVxuLmZhLXNwb3RpZnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYmNcIjtcbn1cbi5mYS1kZXZpYW50YXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWJkXCI7XG59XG4uZmEtc291bmRjbG91ZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiZVwiO1xufVxuLmZhLWRhdGFiYXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWMwXCI7XG59XG4uZmEtZmlsZS1wZGYtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjMVwiO1xufVxuLmZhLWZpbGUtd29yZC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWMyXCI7XG59XG4uZmEtZmlsZS1leGNlbC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWMzXCI7XG59XG4uZmEtZmlsZS1wb3dlcnBvaW50LW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYzRcIjtcbn1cbi5mYS1maWxlLXBob3RvLW86YmVmb3JlLFxuLmZhLWZpbGUtcGljdHVyZS1vOmJlZm9yZSxcbi5mYS1maWxlLWltYWdlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYzVcIjtcbn1cbi5mYS1maWxlLXppcC1vOmJlZm9yZSxcbi5mYS1maWxlLWFyY2hpdmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjNlwiO1xufVxuLmZhLWZpbGUtc291bmQtbzpiZWZvcmUsXG4uZmEtZmlsZS1hdWRpby1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWM3XCI7XG59XG4uZmEtZmlsZS1tb3ZpZS1vOmJlZm9yZSxcbi5mYS1maWxlLXZpZGVvLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYzhcIjtcbn1cbi5mYS1maWxlLWNvZGUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjOVwiO1xufVxuLmZhLXZpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxY2FcIjtcbn1cbi5mYS1jb2RlcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWNiXCI7XG59XG4uZmEtanNmaWRkbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxY2NcIjtcbn1cbi5mYS1saWZlLWJvdXk6YmVmb3JlLFxuLmZhLWxpZmUtYnVveTpiZWZvcmUsXG4uZmEtbGlmZS1zYXZlcjpiZWZvcmUsXG4uZmEtc3VwcG9ydDpiZWZvcmUsXG4uZmEtbGlmZS1yaW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWNkXCI7XG59XG4uZmEtY2lyY2xlLW8tbm90Y2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxY2VcIjtcbn1cbi5mYS1yYTpiZWZvcmUsXG4uZmEtcmViZWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZDBcIjtcbn1cbi5mYS1nZTpiZWZvcmUsXG4uZmEtZW1waXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQxXCI7XG59XG4uZmEtZ2l0LXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkMlwiO1xufVxuLmZhLWdpdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkM1wiO1xufVxuLmZhLXktY29tYmluYXRvci1zcXVhcmU6YmVmb3JlLFxuLmZhLXljLXNxdWFyZTpiZWZvcmUsXG4uZmEtaGFja2VyLW5ld3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZDRcIjtcbn1cbi5mYS10ZW5jZW50LXdlaWJvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQ1XCI7XG59XG4uZmEtcXE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZDZcIjtcbn1cbi5mYS13ZWNoYXQ6YmVmb3JlLFxuLmZhLXdlaXhpbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkN1wiO1xufVxuLmZhLXNlbmQ6YmVmb3JlLFxuLmZhLXBhcGVyLXBsYW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQ4XCI7XG59XG4uZmEtc2VuZC1vOmJlZm9yZSxcbi5mYS1wYXBlci1wbGFuZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQ5XCI7XG59XG4uZmEtaGlzdG9yeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkYVwiO1xufVxuLmZhLWNpcmNsZS10aGluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWRiXCI7XG59XG4uZmEtaGVhZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWRjXCI7XG59XG4uZmEtcGFyYWdyYXBoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWRkXCI7XG59XG4uZmEtc2xpZGVyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkZVwiO1xufVxuLmZhLXNoYXJlLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlMFwiO1xufVxuLmZhLXNoYXJlLWFsdC1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTFcIjtcbn1cbi5mYS1ib21iOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWUyXCI7XG59XG4uZmEtc29jY2VyLWJhbGwtbzpiZWZvcmUsXG4uZmEtZnV0Ym9sLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTNcIjtcbn1cbi5mYS10dHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTRcIjtcbn1cbi5mYS1iaW5vY3VsYXJzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWU1XCI7XG59XG4uZmEtcGx1ZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlNlwiO1xufVxuLmZhLXNsaWRlc2hhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTdcIjtcbn1cbi5mYS10d2l0Y2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZThcIjtcbn1cbi5mYS15ZWxwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWU5XCI7XG59XG4uZmEtbmV3c3BhcGVyLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZWFcIjtcbn1cbi5mYS13aWZpOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWViXCI7XG59XG4uZmEtY2FsY3VsYXRvcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlY1wiO1xufVxuLmZhLXBheXBhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlZFwiO1xufVxuLmZhLWdvb2dsZS13YWxsZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZWVcIjtcbn1cbi5mYS1jYy12aXNhOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWYwXCI7XG59XG4uZmEtY2MtbWFzdGVyY2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmMVwiO1xufVxuLmZhLWNjLWRpc2NvdmVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWYyXCI7XG59XG4uZmEtY2MtYW1leDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmM1wiO1xufVxuLmZhLWNjLXBheXBhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmNFwiO1xufVxuLmZhLWNjLXN0cmlwZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmNVwiO1xufVxuLmZhLWJlbGwtc2xhc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZjZcIjtcbn1cbi5mYS1iZWxsLXNsYXNoLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZjdcIjtcbn1cbi5mYS10cmFzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmOFwiO1xufVxuLmZhLWNvcHlyaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmOVwiO1xufVxuLmZhLWF0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWZhXCI7XG59XG4uZmEtZXllZHJvcHBlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmYlwiO1xufVxuLmZhLXBhaW50LWJydXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWZjXCI7XG59XG4uZmEtYmlydGhkYXktY2FrZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmZFwiO1xufVxuLmZhLWFyZWEtY2hhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZmVcIjtcbn1cbi5mYS1waWUtY2hhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMDBcIjtcbn1cbi5mYS1saW5lLWNoYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjAxXCI7XG59XG4uZmEtbGFzdGZtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjAyXCI7XG59XG4uZmEtbGFzdGZtLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwM1wiO1xufVxuLmZhLXRvZ2dsZS1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMDRcIjtcbn1cbi5mYS10b2dnbGUtb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMDVcIjtcbn1cbi5mYS1iaWN5Y2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjA2XCI7XG59XG4uZmEtYnVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjA3XCI7XG59XG4uZmEtaW94aG9zdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwOFwiO1xufVxuLmZhLWFuZ2VsbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwOVwiO1xufVxuLmZhLWNjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjBhXCI7XG59XG4uZmEtc2hla2VsOmJlZm9yZSxcbi5mYS1zaGVxZWw6YmVmb3JlLFxuLmZhLWlsczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwYlwiO1xufVxuLmZhLW1lYW5wYXRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjBjXCI7XG59XG4uZmEtYnV5c2VsbGFkczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwZFwiO1xufVxuLmZhLWNvbm5lY3RkZXZlbG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjBlXCI7XG59XG4uZmEtZGFzaGN1YmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTBcIjtcbn1cbi5mYS1mb3J1bWJlZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxMVwiO1xufVxuLmZhLWxlYW5wdWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTJcIjtcbn1cbi5mYS1zZWxsc3k6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTNcIjtcbn1cbi5mYS1zaGlydHNpbmJ1bGs6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTRcIjtcbn1cbi5mYS1zaW1wbHlidWlsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxNVwiO1xufVxuLmZhLXNreWF0bGFzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjE2XCI7XG59XG4uZmEtY2FydC1wbHVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjE3XCI7XG59XG4uZmEtY2FydC1hcnJvdy1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjE4XCI7XG59XG4uZmEtZGlhbW9uZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxOVwiO1xufVxuLmZhLXNoaXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMWFcIjtcbn1cbi5mYS11c2VyLXNlY3JldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxYlwiO1xufVxuLmZhLW1vdG9yY3ljbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMWNcIjtcbn1cbi5mYS1zdHJlZXQtdmlldzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxZFwiO1xufVxuLmZhLWhlYXJ0YmVhdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxZVwiO1xufVxuLmZhLXZlbnVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjIxXCI7XG59XG4uZmEtbWFyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyMlwiO1xufVxuLmZhLW1lcmN1cnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjNcIjtcbn1cbi5mYS1pbnRlcnNleDpiZWZvcmUsXG4uZmEtdHJhbnNnZW5kZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjRcIjtcbn1cbi5mYS10cmFuc2dlbmRlci1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjVcIjtcbn1cbi5mYS12ZW51cy1kb3VibGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjZcIjtcbn1cbi5mYS1tYXJzLWRvdWJsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyN1wiO1xufVxuLmZhLXZlbnVzLW1hcnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjhcIjtcbn1cbi5mYS1tYXJzLXN0cm9rZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyOVwiO1xufVxuLmZhLW1hcnMtc3Ryb2tlLXY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMmFcIjtcbn1cbi5mYS1tYXJzLXN0cm9rZS1oOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjJiXCI7XG59XG4uZmEtbmV1dGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjJjXCI7XG59XG4uZmEtZ2VuZGVybGVzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyZFwiO1xufVxuLmZhLWZhY2Vib29rLW9mZmljaWFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjMwXCI7XG59XG4uZmEtcGludGVyZXN0LXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMzFcIjtcbn1cbi5mYS13aGF0c2FwcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzMlwiO1xufVxuLmZhLXNlcnZlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzM1wiO1xufVxuLmZhLXVzZXItcGx1czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzNFwiO1xufVxuLmZhLXVzZXItdGltZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMzVcIjtcbn1cbi5mYS1ob3RlbDpiZWZvcmUsXG4uZmEtYmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjM2XCI7XG59XG4uZmEtdmlhY29pbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzN1wiO1xufVxuLmZhLXRyYWluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjM4XCI7XG59XG4uZmEtc3Vid2F5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjM5XCI7XG59XG4uZmEtbWVkaXVtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjNhXCI7XG59XG4uZmEteWM6YmVmb3JlLFxuLmZhLXktY29tYmluYXRvcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzYlwiO1xufVxuLmZhLW9wdGluLW1vbnN0ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyM2NcIjtcbn1cbi5mYS1vcGVuY2FydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzZFwiO1xufVxuLmZhLWV4cGVkaXRlZHNzbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzZVwiO1xufVxuLmZhLWJhdHRlcnktNDpiZWZvcmUsXG4uZmEtYmF0dGVyeS1mdWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjQwXCI7XG59XG4uZmEtYmF0dGVyeS0zOmJlZm9yZSxcbi5mYS1iYXR0ZXJ5LXRocmVlLXF1YXJ0ZXJzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjQxXCI7XG59XG4uZmEtYmF0dGVyeS0yOmJlZm9yZSxcbi5mYS1iYXR0ZXJ5LWhhbGY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNDJcIjtcbn1cbi5mYS1iYXR0ZXJ5LTE6YmVmb3JlLFxuLmZhLWJhdHRlcnktcXVhcnRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0M1wiO1xufVxuLmZhLWJhdHRlcnktMDpiZWZvcmUsXG4uZmEtYmF0dGVyeS1lbXB0eTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0NFwiO1xufVxuLmZhLW1vdXNlLXBvaW50ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNDVcIjtcbn1cbi5mYS1pLWN1cnNvcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0NlwiO1xufVxuLmZhLW9iamVjdC1ncm91cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0N1wiO1xufVxuLmZhLW9iamVjdC11bmdyb3VwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjQ4XCI7XG59XG4uZmEtc3RpY2t5LW5vdGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNDlcIjtcbn1cbi5mYS1zdGlja3ktbm90ZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjRhXCI7XG59XG4uZmEtY2MtamNiOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjRiXCI7XG59XG4uZmEtY2MtZGluZXJzLWNsdWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNGNcIjtcbn1cbi5mYS1jbG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0ZFwiO1xufVxuLmZhLWJhbGFuY2Utc2NhbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNGVcIjtcbn1cbi5mYS1ob3VyZ2xhc3MtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1MFwiO1xufVxuLmZhLWhvdXJnbGFzcy0xOmJlZm9yZSxcbi5mYS1ob3VyZ2xhc3Mtc3RhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNTFcIjtcbn1cbi5mYS1ob3VyZ2xhc3MtMjpiZWZvcmUsXG4uZmEtaG91cmdsYXNzLWhhbGY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNTJcIjtcbn1cbi5mYS1ob3VyZ2xhc3MtMzpiZWZvcmUsXG4uZmEtaG91cmdsYXNzLWVuZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1M1wiO1xufVxuLmZhLWhvdXJnbGFzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1NFwiO1xufVxuLmZhLWhhbmQtZ3JhYi1vOmJlZm9yZSxcbi5mYS1oYW5kLXJvY2stbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1NVwiO1xufVxuLmZhLWhhbmQtc3RvcC1vOmJlZm9yZSxcbi5mYS1oYW5kLXBhcGVyLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNTZcIjtcbn1cbi5mYS1oYW5kLXNjaXNzb3JzLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNTdcIjtcbn1cbi5mYS1oYW5kLWxpemFyZC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjU4XCI7XG59XG4uZmEtaGFuZC1zcG9jay1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjU5XCI7XG59XG4uZmEtaGFuZC1wb2ludGVyLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNWFcIjtcbn1cbi5mYS1oYW5kLXBlYWNlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNWJcIjtcbn1cbi5mYS10cmFkZW1hcms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNWNcIjtcbn1cbi5mYS1yZWdpc3RlcmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjVkXCI7XG59XG4uZmEtY3JlYXRpdmUtY29tbW9uczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1ZVwiO1xufVxuLmZhLWdnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjYwXCI7XG59XG4uZmEtZ2ctY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjYxXCI7XG59XG4uZmEtdHJpcGFkdmlzb3I6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjJcIjtcbn1cbi5mYS1vZG5va2xhc3NuaWtpOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjYzXCI7XG59XG4uZmEtb2Rub2tsYXNzbmlraS1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjRcIjtcbn1cbi5mYS1nZXQtcG9ja2V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjY1XCI7XG59XG4uZmEtd2lraXBlZGlhLXc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjZcIjtcbn1cbi5mYS1zYWZhcmk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjdcIjtcbn1cbi5mYS1jaHJvbWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjhcIjtcbn1cbi5mYS1maXJlZm94OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjY5XCI7XG59XG4uZmEtb3BlcmE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNmFcIjtcbn1cbi5mYS1pbnRlcm5ldC1leHBsb3JlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2YlwiO1xufVxuLmZhLXR2OmJlZm9yZSxcbi5mYS10ZWxldmlzaW9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjZjXCI7XG59XG4uZmEtY29udGFvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjZkXCI7XG59XG4uZmEtNTAwcHg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNmVcIjtcbn1cbi5mYS1hbWF6b246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzBcIjtcbn1cbi5mYS1jYWxlbmRhci1wbHVzLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzFcIjtcbn1cbi5mYS1jYWxlbmRhci1taW51cy1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjcyXCI7XG59XG4uZmEtY2FsZW5kYXItdGltZXMtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3M1wiO1xufVxuLmZhLWNhbGVuZGFyLWNoZWNrLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzRcIjtcbn1cbi5mYS1pbmR1c3RyeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3NVwiO1xufVxuLmZhLW1hcC1waW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzZcIjtcbn1cbi5mYS1tYXAtc2lnbnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzdcIjtcbn1cbi5mYS1tYXAtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3OFwiO1xufVxuLmZhLW1hcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3OVwiO1xufVxuLmZhLWNvbW1lbnRpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyN2FcIjtcbn1cbi5mYS1jb21tZW50aW5nLW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyN2JcIjtcbn1cbi5mYS1ob3V6ejpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3Y1wiO1xufVxuLmZhLXZpbWVvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjdkXCI7XG59XG4uZmEtYmxhY2stdGllOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjdlXCI7XG59XG4uZmEtZm9udGljb25zOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjgwXCI7XG59XG4iLCIvKiBGT05UIFBBVEhcclxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbkBmb250LWZhY2Uge1xyXG4gIGZvbnQtZmFtaWx5OiAnRm9udEF3ZXNvbWUnO1xyXG4gIHNyYzogdXJsKCdAe2ZhLWZvbnQtcGF0aH0vZm9udGF3ZXNvbWUtd2ViZm9udC5lb3Q/dj1Ae2ZhLXZlcnNpb259Jyk7XHJcbiAgc3JjOiB1cmwoJ0B7ZmEtZm9udC1wYXRofS9mb250YXdlc29tZS13ZWJmb250LmVvdD8jaWVmaXgmdj1Ae2ZhLXZlcnNpb259JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLFxyXG4gICAgdXJsKCdAe2ZhLWZvbnQtcGF0aH0vZm9udGF3ZXNvbWUtd2ViZm9udC53b2ZmMj92PUB7ZmEtdmVyc2lvbn0nKSBmb3JtYXQoJ3dvZmYyJyksXHJcbiAgICB1cmwoJ0B7ZmEtZm9udC1wYXRofS9mb250YXdlc29tZS13ZWJmb250LndvZmY/dj1Ae2ZhLXZlcnNpb259JykgZm9ybWF0KCd3b2ZmJyksXHJcbiAgICB1cmwoJ0B7ZmEtZm9udC1wYXRofS9mb250YXdlc29tZS13ZWJmb250LnR0Zj92PUB7ZmEtdmVyc2lvbn0nKSBmb3JtYXQoJ3RydWV0eXBlJyksXHJcbiAgICB1cmwoJ0B7ZmEtZm9udC1wYXRofS9mb250YXdlc29tZS13ZWJmb250LnN2Zz92PUB7ZmEtdmVyc2lvbn0jZm9udGF3ZXNvbWVyZWd1bGFyJykgZm9ybWF0KCdzdmcnKTtcclxuLy8gIHNyYzogdXJsKCdAe2ZhLWZvbnQtcGF0aH0vRm9udEF3ZXNvbWUub3RmJykgZm9ybWF0KCdvcGVudHlwZScpOyAvLyB1c2VkIHdoZW4gZGV2ZWxvcGluZyBmb250c1xyXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xyXG59XHJcbiIsIi8vIEJhc2UgQ2xhc3MgRGVmaW5pdGlvblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4uQHtmYS1jc3MtcHJlZml4fSB7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIEBmYS1mb250LXNpemUtYmFzZS9AZmEtbGluZS1oZWlnaHQtYmFzZSBGb250QXdlc29tZTsgLy8gc2hvcnRlbmluZyBmb250IGRlY2xhcmF0aW9uXHJcbiAgZm9udC1zaXplOiBpbmhlcml0OyAvLyBjYW4ndCBoYXZlIGZvbnQtc2l6ZSBpbmhlcml0IG9uIGxpbmUgYWJvdmUsIHNvIG5lZWQgdG8gb3ZlcnJpZGVcclxuICB0ZXh0LXJlbmRlcmluZzogYXV0bzsgLy8gb3B0aW1pemVsZWdpYmlsaXR5IHRocm93cyB0aGluZ3Mgb2ZmICMxMDk0XHJcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XHJcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcclxuXHJcbn1cclxuIiwiLy8gSWNvbiBTaXplc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4vKiBtYWtlcyB0aGUgZm9udCAzMyUgbGFyZ2VyIHJlbGF0aXZlIHRvIHRoZSBpY29uIGNvbnRhaW5lciAqL1xyXG4uQHtmYS1jc3MtcHJlZml4fS1sZyB7XHJcbiAgZm9udC1zaXplOiAoNGVtIC8gMyk7XHJcbiAgbGluZS1oZWlnaHQ6ICgzZW0gLyA0KTtcclxuICB2ZXJ0aWNhbC1hbGlnbjogLTE1JTtcclxufVxyXG4uQHtmYS1jc3MtcHJlZml4fS0yeCB7IGZvbnQtc2l6ZTogMmVtOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LTN4IHsgZm9udC1zaXplOiAzZW07IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tNHggeyBmb250LXNpemU6IDRlbTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS01eCB7IGZvbnQtc2l6ZTogNWVtOyB9XHJcbiIsIi8vIEZpeGVkIFdpZHRoIEljb25zXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZncge1xyXG4gIHdpZHRoOiAoMThlbSAvIDE0KTtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuIiwiLy8gTGlzdCBJY29uc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4uQHtmYS1jc3MtcHJlZml4fS11bCB7XHJcbiAgcGFkZGluZy1sZWZ0OiAwO1xyXG4gIG1hcmdpbi1sZWZ0OiBAZmEtbGktd2lkdGg7XHJcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xyXG4gID4gbGkgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH1cclxufVxyXG4uQHtmYS1jc3MtcHJlZml4fS1saSB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIGxlZnQ6IC1AZmEtbGktd2lkdGg7XHJcbiAgd2lkdGg6IEBmYS1saS13aWR0aDtcclxuICB0b3A6ICgyZW0gLyAxNCk7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICYuQHtmYS1jc3MtcHJlZml4fS1sZyB7XHJcbiAgICBsZWZ0OiAoLUBmYS1saS13aWR0aCArICg0ZW0gLyAxNCkpO1xyXG4gIH1cclxufVxyXG4iLCIvLyBCb3JkZXJlZCAmIFB1bGxlZFxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4uQHtmYS1jc3MtcHJlZml4fS1ib3JkZXIge1xyXG4gIHBhZGRpbmc6IC4yZW0gLjI1ZW0gLjE1ZW07XHJcbiAgYm9yZGVyOiBzb2xpZCAuMDhlbSBAZmEtYm9yZGVyLWNvbG9yO1xyXG4gIGJvcmRlci1yYWRpdXM6IC4xZW07XHJcbn1cclxuXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXB1bGwtbGVmdCB7IGZsb2F0OiBsZWZ0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXB1bGwtcmlnaHQgeyBmbG9hdDogcmlnaHQ7IH1cclxuXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9IHtcclxuICAmLkB7ZmEtY3NzLXByZWZpeH0tcHVsbC1sZWZ0IHsgbWFyZ2luLXJpZ2h0OiAuM2VtOyB9XHJcbiAgJi5Ae2ZhLWNzcy1wcmVmaXh9LXB1bGwtcmlnaHQgeyBtYXJnaW4tbGVmdDogLjNlbTsgfVxyXG59XHJcblxyXG4vKiBEZXByZWNhdGVkIGFzIG9mIDQuNC4wICovXHJcbi5wdWxsLXJpZ2h0IHsgZmxvYXQ6IHJpZ2h0OyB9XHJcbi5wdWxsLWxlZnQgeyBmbG9hdDogbGVmdDsgfVxyXG5cclxuLkB7ZmEtY3NzLXByZWZpeH0ge1xyXG4gICYucHVsbC1sZWZ0IHsgbWFyZ2luLXJpZ2h0OiAuM2VtOyB9XHJcbiAgJi5wdWxsLXJpZ2h0IHsgbWFyZ2luLWxlZnQ6IC4zZW07IH1cclxufVxyXG4iLCIvLyBBbmltYXRlZCBJY29uc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuLkB7ZmEtY3NzLXByZWZpeH0tc3BpbiB7XHJcbiAgLXdlYmtpdC1hbmltYXRpb246IGZhLXNwaW4gMnMgaW5maW5pdGUgbGluZWFyO1xyXG4gICAgICAgICAgYW5pbWF0aW9uOiBmYS1zcGluIDJzIGluZmluaXRlIGxpbmVhcjtcclxufVxyXG5cclxuLkB7ZmEtY3NzLXByZWZpeH0tcHVsc2Uge1xyXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmYS1zcGluIDFzIGluZmluaXRlIHN0ZXBzKDgpO1xyXG4gICAgICAgICAgYW5pbWF0aW9uOiBmYS1zcGluIDFzIGluZmluaXRlIHN0ZXBzKDgpO1xyXG59XHJcblxyXG5ALXdlYmtpdC1rZXlmcmFtZXMgZmEtc3BpbiB7XHJcbiAgMCUge1xyXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XHJcbiAgfVxyXG4gIDEwMCUge1xyXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xyXG4gIH1cclxufVxyXG5cclxuQGtleWZyYW1lcyBmYS1zcGluIHtcclxuICAwJSB7XHJcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcclxuICB9XHJcbiAgMTAwJSB7XHJcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XHJcbiAgfVxyXG59XHJcbiIsIi8vIFJvdGF0ZWQgJiBGbGlwcGVkIEljb25zXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXJvdGF0ZS05MCAgeyAuZmEtaWNvbi1yb3RhdGUoOTBkZWcsIDEpOyAgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1yb3RhdGUtMTgwIHsgLmZhLWljb24tcm90YXRlKDE4MGRlZywgMik7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tcm90YXRlLTI3MCB7IC5mYS1pY29uLXJvdGF0ZSgyNzBkZWcsIDMpOyB9XHJcblxyXG4uQHtmYS1jc3MtcHJlZml4fS1mbGlwLWhvcml6b250YWwgeyAuZmEtaWNvbi1mbGlwKC0xLCAxLCAwKTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1mbGlwLXZlcnRpY2FsICAgeyAuZmEtaWNvbi1mbGlwKDEsIC0xLCAyKTsgfVxyXG5cclxuLy8gSG9vayBmb3IgSUU4LTlcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuOnJvb3QgLkB7ZmEtY3NzLXByZWZpeH0tcm90YXRlLTkwLFxyXG46cm9vdCAuQHtmYS1jc3MtcHJlZml4fS1yb3RhdGUtMTgwLFxyXG46cm9vdCAuQHtmYS1jc3MtcHJlZml4fS1yb3RhdGUtMjcwLFxyXG46cm9vdCAuQHtmYS1jc3MtcHJlZml4fS1mbGlwLWhvcml6b250YWwsXHJcbjpyb290IC5Ae2ZhLWNzcy1wcmVmaXh9LWZsaXAtdmVydGljYWwge1xyXG4gIGZpbHRlcjogbm9uZTtcclxufVxyXG4iLCIvLyBNaXhpbnNcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi5mYS1pY29uKCkge1xyXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCBAZmEtZm9udC1zaXplLWJhc2UvQGZhLWxpbmUtaGVpZ2h0LWJhc2UgRm9udEF3ZXNvbWU7IC8vIHNob3J0ZW5pbmcgZm9udCBkZWNsYXJhdGlvblxyXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDsgLy8gY2FuJ3QgaGF2ZSBmb250LXNpemUgaW5oZXJpdCBvbiBsaW5lIGFib3ZlLCBzbyBuZWVkIHRvIG92ZXJyaWRlXHJcbiAgdGV4dC1yZW5kZXJpbmc6IGF1dG87IC8vIG9wdGltaXplbGVnaWJpbGl0eSB0aHJvd3MgdGhpbmdzIG9mZiAjMTA5NFxyXG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xyXG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XHJcblxyXG59XHJcblxyXG4uZmEtaWNvbi1yb3RhdGUoQGRlZ3JlZXMsIEByb3RhdGlvbikge1xyXG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249QHJvdGF0aW9uKTtcclxuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKEBkZWdyZWVzKTtcclxuICAgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlKEBkZWdyZWVzKTtcclxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKEBkZWdyZWVzKTtcclxufVxyXG5cclxuLmZhLWljb24tZmxpcChAaG9yaXosIEB2ZXJ0LCBAcm90YXRpb24pIHtcclxuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPUByb3RhdGlvbiwgbWlycm9yPTEpO1xyXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZShAaG9yaXosIEB2ZXJ0KTtcclxuICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoQGhvcml6LCBAdmVydCk7XHJcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKEBob3JpeiwgQHZlcnQpO1xyXG59XHJcbiIsIi8vIFN0YWNrZWQgSWNvbnNcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuLkB7ZmEtY3NzLXByZWZpeH0tc3RhY2sge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgd2lkdGg6IDJlbTtcclxuICBoZWlnaHQ6IDJlbTtcclxuICBsaW5lLWhlaWdodDogMmVtO1xyXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbn1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc3RhY2stMXgsIC5Ae2ZhLWNzcy1wcmVmaXh9LXN0YWNrLTJ4IHtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgbGVmdDogMDtcclxuICB3aWR0aDogMTAwJTtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc3RhY2stMXggeyBsaW5lLWhlaWdodDogaW5oZXJpdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zdGFjay0yeCB7IGZvbnQtc2l6ZTogMmVtOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWludmVyc2UgeyBjb2xvcjogQGZhLWludmVyc2U7IH1cclxuIiwiLyogRm9udCBBd2Vzb21lIHVzZXMgdGhlIFVuaWNvZGUgUHJpdmF0ZSBVc2UgQXJlYSAoUFVBKSB0byBlbnN1cmUgc2NyZWVuXHJcbiAgIHJlYWRlcnMgZG8gbm90IHJlYWQgb2ZmIHJhbmRvbSBjaGFyYWN0ZXJzIHRoYXQgcmVwcmVzZW50IGljb25zICovXHJcblxyXG4uQHtmYS1jc3MtcHJlZml4fS1nbGFzczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWdsYXNzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LW11c2ljOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbXVzaWM7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc2VhcmNoOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2VhcmNoOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWVudmVsb3BlLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1lbnZlbG9wZS1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWhlYXJ0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaGVhcnQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc3RhcjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXN0YXI7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc3Rhci1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3Rhci1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXVzZXI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci11c2VyOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpbG06YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1maWxtOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXRoLWxhcmdlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGgtbGFyZ2U7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdGg6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10aDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10aC1saXN0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGgtbGlzdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jaGVjazpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNoZWNrOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXJlbW92ZTpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNsb3NlOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tdGltZXM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10aW1lczsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zZWFyY2gtcGx1czpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNlYXJjaC1wbHVzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNlYXJjaC1taW51czpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNlYXJjaC1taW51czsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1wb3dlci1vZmY6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1wb3dlci1vZmY7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc2lnbmFsOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2lnbmFsOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWdlYXI6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1jb2c6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jb2c7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdHJhc2gtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRyYXNoLW87IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0taG9tZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWhvbWU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZmlsZS1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmlsZS1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNsb2NrLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jbG9jay1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXJvYWQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1yb2FkOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWRvd25sb2FkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZG93bmxvYWQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYXJyb3ctY2lyY2xlLW8tZG93bjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFycm93LWNpcmNsZS1vLWRvd247IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYXJyb3ctY2lyY2xlLW8tdXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcnJvdy1jaXJjbGUtby11cDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1pbmJveDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWluYm94OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXBsYXktY2lyY2xlLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1wbGF5LWNpcmNsZS1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXJvdGF0ZS1yaWdodDpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXJlcGVhdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXJlcGVhdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1yZWZyZXNoOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcmVmcmVzaDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1saXN0LWFsdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxpc3QtYWx0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWxvY2s6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1sb2NrOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZsYWc6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1mbGFnOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWhlYWRwaG9uZXM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oZWFkcGhvbmVzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXZvbHVtZS1vZmY6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci12b2x1bWUtb2ZmOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXZvbHVtZS1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdm9sdW1lLWRvd247IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdm9sdW1lLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdm9sdW1lLXVwOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXFyY29kZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXFyY29kZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1iYXJjb2RlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYmFyY29kZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10YWc6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10YWc7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdGFnczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRhZ3M7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYm9vazpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJvb2s7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYm9va21hcms6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1ib29rbWFyazsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1wcmludDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXByaW50OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNhbWVyYTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNhbWVyYTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1mb250OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZm9udDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1ib2xkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYm9sZDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1pdGFsaWM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1pdGFsaWM7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdGV4dC1oZWlnaHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10ZXh0LWhlaWdodDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10ZXh0LXdpZHRoOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGV4dC13aWR0aDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1hbGlnbi1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYWxpZ24tbGVmdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1hbGlnbi1jZW50ZXI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hbGlnbi1jZW50ZXI7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYWxpZ24tcmlnaHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hbGlnbi1yaWdodDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1hbGlnbi1qdXN0aWZ5OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYWxpZ24tanVzdGlmeTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1saXN0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbGlzdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1kZWRlbnQ6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1vdXRkZW50OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItb3V0ZGVudDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1pbmRlbnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1pbmRlbnQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdmlkZW8tY2FtZXJhOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdmlkZW8tY2FtZXJhOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXBob3RvOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0taW1hZ2U6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1waWN0dXJlLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1waWN0dXJlLW87IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tcGVuY2lsOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGVuY2lsOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LW1hcC1tYXJrZXI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tYXAtbWFya2VyOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWFkanVzdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFkanVzdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10aW50OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGludDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1lZGl0OmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tcGVuY2lsLXNxdWFyZS1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGVuY2lsLXNxdWFyZS1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNoYXJlLXNxdWFyZS1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2hhcmUtc3F1YXJlLW87IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY2hlY2stc3F1YXJlLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jaGVjay1zcXVhcmUtbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1hcnJvd3M6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcnJvd3M7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc3RlcC1iYWNrd2FyZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXN0ZXAtYmFja3dhcmQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZmFzdC1iYWNrd2FyZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZhc3QtYmFja3dhcmQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYmFja3dhcmQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1iYWNrd2FyZDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1wbGF5OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGxheTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1wYXVzZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBhdXNlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXN0b3A6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zdG9wOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZvcndhcmQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1mb3J3YXJkOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZhc3QtZm9yd2FyZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZhc3QtZm9yd2FyZDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zdGVwLWZvcndhcmQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zdGVwLWZvcndhcmQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZWplY3Q6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1lamVjdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jaGV2cm9uLWxlZnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jaGV2cm9uLWxlZnQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY2hldnJvbi1yaWdodDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNoZXZyb24tcmlnaHQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tcGx1cy1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1wbHVzLWNpcmNsZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1taW51cy1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1taW51cy1jaXJjbGU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdGltZXMtY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGltZXMtY2lyY2xlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNoZWNrLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNoZWNrLWNpcmNsZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1xdWVzdGlvbi1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1xdWVzdGlvbi1jaXJjbGU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0taW5mby1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1pbmZvLWNpcmNsZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jcm9zc2hhaXJzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY3Jvc3NoYWlyczsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10aW1lcy1jaXJjbGUtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRpbWVzLWNpcmNsZS1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNoZWNrLWNpcmNsZS1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2hlY2stY2lyY2xlLW87IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYmFuOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYmFuOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWFycm93LWxlZnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcnJvdy1sZWZ0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWFycm93LXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYXJyb3ctcmlnaHQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYXJyb3ctdXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcnJvdy11cDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1hcnJvdy1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYXJyb3ctZG93bjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1tYWlsLWZvcndhcmQ6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1zaGFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNoYXJlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWV4cGFuZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWV4cGFuZDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jb21wcmVzczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNvbXByZXNzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXBsdXM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1wbHVzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LW1pbnVzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbWludXM7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYXN0ZXJpc2s6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hc3RlcmlzazsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1leGNsYW1hdGlvbi1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1leGNsYW1hdGlvbi1jaXJjbGU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZ2lmdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWdpZnQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tbGVhZjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxlYWY7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZmlyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpcmU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZXllOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZXllOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWV5ZS1zbGFzaDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWV5ZS1zbGFzaDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS13YXJuaW5nOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tZXhjbGFtYXRpb24tdHJpYW5nbGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1leGNsYW1hdGlvbi10cmlhbmdsZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1wbGFuZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBsYW5lOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNhbGVuZGFyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2FsZW5kYXI7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tcmFuZG9tOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcmFuZG9tOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNvbW1lbnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jb21tZW50OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LW1hZ25ldDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1hZ25ldDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jaGV2cm9uLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2hldnJvbi11cDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jaGV2cm9uLWRvd246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jaGV2cm9uLWRvd247IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tcmV0d2VldDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXJldHdlZXQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc2hvcHBpbmctY2FydDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNob3BwaW5nLWNhcnQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZm9sZGVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZm9sZGVyOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZvbGRlci1vcGVuOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZm9sZGVyLW9wZW47IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYXJyb3dzLXY6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcnJvd3MtdjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1hcnJvd3MtaDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFycm93cy1oOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJhci1jaGFydC1vOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tYmFyLWNoYXJ0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYmFyLWNoYXJ0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXR3aXR0ZXItc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdHdpdHRlci1zcXVhcmU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZmFjZWJvb2stc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmFjZWJvb2stc3F1YXJlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNhbWVyYS1yZXRybzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNhbWVyYS1yZXRybzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1rZXk6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1rZXk7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZ2VhcnM6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1jb2dzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY29nczsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jb21tZW50czpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNvbW1lbnRzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXRodW1icy1vLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGh1bWJzLW8tdXA7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdGh1bWJzLW8tZG93bjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRodW1icy1vLWRvd247IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc3Rhci1oYWxmOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3Rhci1oYWxmOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWhlYXJ0LW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oZWFydC1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNpZ24tb3V0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2lnbi1vdXQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tbGlua2VkaW4tc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbGlua2VkaW4tc3F1YXJlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXRodW1iLXRhY2s6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10aHVtYi10YWNrOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWV4dGVybmFsLWxpbms6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1leHRlcm5hbC1saW5rOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNpZ24taW46YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zaWduLWluOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXRyb3BoeTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRyb3BoeTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1naXRodWItc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZ2l0aHViLXNxdWFyZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS11cGxvYWQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci11cGxvYWQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tbGVtb24tbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxlbW9uLW87IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tcGhvbmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1waG9uZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zcXVhcmUtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNxdWFyZS1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJvb2ttYXJrLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1ib29rbWFyay1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXBob25lLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBob25lLXNxdWFyZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10d2l0dGVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdHdpdHRlcjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1mYWNlYm9vay1mOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tZmFjZWJvb2s6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1mYWNlYm9vazsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1naXRodWI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1naXRodWI7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdW5sb2NrOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdW5sb2NrOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNyZWRpdC1jYXJkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY3JlZGl0LWNhcmQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZmVlZDpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXJzczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXJzczsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1oZGQtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWhkZC1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJ1bGxob3JuOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYnVsbGhvcm47IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYmVsbDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJlbGw7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY2VydGlmaWNhdGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jZXJ0aWZpY2F0ZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1oYW5kLW8tcmlnaHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oYW5kLW8tcmlnaHQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0taGFuZC1vLWxlZnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oYW5kLW8tbGVmdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1oYW5kLW8tdXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oYW5kLW8tdXA7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0taGFuZC1vLWRvd246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oYW5kLW8tZG93bjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1hcnJvdy1jaXJjbGUtbGVmdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFycm93LWNpcmNsZS1sZWZ0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWFycm93LWNpcmNsZS1yaWdodDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFycm93LWNpcmNsZS1yaWdodDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1hcnJvdy1jaXJjbGUtdXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcnJvdy1jaXJjbGUtdXA7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYXJyb3ctY2lyY2xlLWRvd246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcnJvdy1jaXJjbGUtZG93bjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1nbG9iZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWdsb2JlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXdyZW5jaDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXdyZW5jaDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10YXNrczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRhc2tzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpbHRlcjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbHRlcjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1icmllZmNhc2U6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1icmllZmNhc2U7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYXJyb3dzLWFsdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFycm93cy1hbHQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZ3JvdXA6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS11c2VyczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXVzZXJzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNoYWluOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tbGluazpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxpbms7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY2xvdWQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jbG91ZDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1mbGFzazpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZsYXNrOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWN1dDpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNjaXNzb3JzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2Npc3NvcnM7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY29weTpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpbGVzLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1maWxlcy1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXBhcGVyY2xpcDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBhcGVyY2xpcDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zYXZlOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tZmxvcHB5LW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1mbG9wcHktbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zcXVhcmU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tbmF2aWNvbjpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXJlb3JkZXI6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1iYXJzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYmFyczsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1saXN0LXVsOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbGlzdC11bDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1saXN0LW9sOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbGlzdC1vbDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zdHJpa2V0aHJvdWdoOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3RyaWtldGhyb3VnaDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS11bmRlcmxpbmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci11bmRlcmxpbmU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdGFibGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10YWJsZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1tYWdpYzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1hZ2ljOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXRydWNrOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdHJ1Y2s7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tcGludGVyZXN0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGludGVyZXN0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXBpbnRlcmVzdC1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1waW50ZXJlc3Qtc3F1YXJlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWdvb2dsZS1wbHVzLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWdvb2dsZS1wbHVzLXNxdWFyZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1nb29nbGUtcGx1czpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWdvb2dsZS1wbHVzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LW1vbmV5OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbW9uZXk7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY2FyZXQtZG93bjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNhcmV0LWRvd247IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY2FyZXQtdXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYXJldC11cDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jYXJldC1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2FyZXQtbGVmdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jYXJldC1yaWdodDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNhcmV0LXJpZ2h0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNvbHVtbnM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jb2x1bW5zOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXVuc29ydGVkOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tc29ydDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNvcnQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc29ydC1kb3duOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tc29ydC1kZXNjOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc29ydC1kZXNjOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNvcnQtdXA6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1zb3J0LWFzYzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNvcnQtYXNjOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWVudmVsb3BlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZW52ZWxvcGU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tbGlua2VkaW46YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1saW5rZWRpbjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1yb3RhdGUtbGVmdDpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXVuZG86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci11bmRvOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWxlZ2FsOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tZ2F2ZWw6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1nYXZlbDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1kYXNoYm9hcmQ6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS10YWNob21ldGVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGFjaG9tZXRlcjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jb21tZW50LW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jb21tZW50LW87IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY29tbWVudHMtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNvbW1lbnRzLW87IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZmxhc2g6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1ib2x0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYm9sdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zaXRlbWFwOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2l0ZW1hcDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS11bWJyZWxsYTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXVtYnJlbGxhOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXBhc3RlOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tY2xpcGJvYXJkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2xpcGJvYXJkOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWxpZ2h0YnVsYi1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbGlnaHRidWxiLW87IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZXhjaGFuZ2U6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1leGNoYW5nZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jbG91ZC1kb3dubG9hZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNsb3VkLWRvd25sb2FkOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNsb3VkLXVwbG9hZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNsb3VkLXVwbG9hZDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS11c2VyLW1kOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdXNlci1tZDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zdGV0aG9zY29wZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXN0ZXRob3Njb3BlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXN1aXRjYXNlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3VpdGNhc2U7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYmVsbC1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYmVsbC1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNvZmZlZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNvZmZlZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jdXRsZXJ5OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY3V0bGVyeTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1maWxlLXRleHQtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbGUtdGV4dC1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJ1aWxkaW5nLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1idWlsZGluZy1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWhvc3BpdGFsLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1ob3NwaXRhbC1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWFtYnVsYW5jZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFtYnVsYW5jZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1tZWRraXQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tZWRraXQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZmlnaHRlci1qZXQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1maWdodGVyLWpldDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1iZWVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYmVlcjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1oLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWgtc3F1YXJlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXBsdXMtc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGx1cy1zcXVhcmU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYW5nbGUtZG91YmxlLWxlZnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hbmdsZS1kb3VibGUtbGVmdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1hbmdsZS1kb3VibGUtcmlnaHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hbmdsZS1kb3VibGUtcmlnaHQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYW5nbGUtZG91YmxlLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYW5nbGUtZG91YmxlLXVwOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWFuZ2xlLWRvdWJsZS1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYW5nbGUtZG91YmxlLWRvd247IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYW5nbGUtbGVmdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFuZ2xlLWxlZnQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYW5nbGUtcmlnaHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hbmdsZS1yaWdodDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1hbmdsZS11cDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFuZ2xlLXVwOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWFuZ2xlLWRvd246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hbmdsZS1kb3duOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWRlc2t0b3A6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1kZXNrdG9wOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWxhcHRvcDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxhcHRvcDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10YWJsZXQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10YWJsZXQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tbW9iaWxlLXBob25lOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tbW9iaWxlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbW9iaWxlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNpcmNsZS1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2lyY2xlLW87IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tcXVvdGUtbGVmdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXF1b3RlLWxlZnQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tcXVvdGUtcmlnaHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1xdW90ZS1yaWdodDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zcGlubmVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3Bpbm5lcjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jaXJjbGU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tbWFpbC1yZXBseTpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXJlcGx5OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcmVwbHk7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZ2l0aHViLWFsdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWdpdGh1Yi1hbHQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZm9sZGVyLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1mb2xkZXItbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1mb2xkZXItb3Blbi1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZm9sZGVyLW9wZW4tbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zbWlsZS1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc21pbGUtbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1mcm93bi1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZnJvd24tbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1tZWgtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1laC1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWdhbWVwYWQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1nYW1lcGFkOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWtleWJvYXJkLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1rZXlib2FyZC1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZsYWctbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZsYWctbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1mbGFnLWNoZWNrZXJlZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZsYWctY2hlY2tlcmVkOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXRlcm1pbmFsOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGVybWluYWw7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY29kZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNvZGU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tbWFpbC1yZXBseS1hbGw6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1yZXBseS1hbGw6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1yZXBseS1hbGw7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc3Rhci1oYWxmLWVtcHR5OmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tc3Rhci1oYWxmLWZ1bGw6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1zdGFyLWhhbGYtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXN0YXItaGFsZi1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWxvY2F0aW9uLWFycm93OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbG9jYXRpb24tYXJyb3c7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY3JvcDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNyb3A7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY29kZS1mb3JrOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY29kZS1mb3JrOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXVubGluazpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNoYWluLWJyb2tlbjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNoYWluLWJyb2tlbjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1xdWVzdGlvbjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXF1ZXN0aW9uOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWluZm86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1pbmZvOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWV4Y2xhbWF0aW9uOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZXhjbGFtYXRpb247IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc3VwZXJzY3JpcHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zdXBlcnNjcmlwdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zdWJzY3JpcHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zdWJzY3JpcHQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZXJhc2VyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZXJhc2VyOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXB1enpsZS1waWVjZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXB1enpsZS1waWVjZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1taWNyb3Bob25lOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbWljcm9waG9uZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1taWNyb3Bob25lLXNsYXNoOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbWljcm9waG9uZS1zbGFzaDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zaGllbGQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zaGllbGQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY2FsZW5kYXItbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNhbGVuZGFyLW87IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZmlyZS1leHRpbmd1aXNoZXI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1maXJlLWV4dGluZ3Vpc2hlcjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1yb2NrZXQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1yb2NrZXQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tbWF4Y2RuOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbWF4Y2RuOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNoZXZyb24tY2lyY2xlLWxlZnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jaGV2cm9uLWNpcmNsZS1sZWZ0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNoZXZyb24tY2lyY2xlLXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2hldnJvbi1jaXJjbGUtcmlnaHQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY2hldnJvbi1jaXJjbGUtdXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jaGV2cm9uLWNpcmNsZS11cDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jaGV2cm9uLWNpcmNsZS1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2hldnJvbi1jaXJjbGUtZG93bjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1odG1sNTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWh0bWw1OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNzczM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jc3MzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWFuY2hvcjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFuY2hvcjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS11bmxvY2stYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdW5sb2NrLWFsdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1idWxsc2V5ZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJ1bGxzZXllOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWVsbGlwc2lzLWg6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1lbGxpcHNpcy1oOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWVsbGlwc2lzLXY6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1lbGxpcHNpcy12OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXJzcy1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1yc3Mtc3F1YXJlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXBsYXktY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGxheS1jaXJjbGU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdGlja2V0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGlja2V0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LW1pbnVzLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1pbnVzLXNxdWFyZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1taW51cy1zcXVhcmUtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1pbnVzLXNxdWFyZS1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWxldmVsLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbGV2ZWwtdXA7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tbGV2ZWwtZG93bjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxldmVsLWRvd247IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY2hlY2stc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2hlY2stc3F1YXJlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXBlbmNpbC1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1wZW5jaWwtc3F1YXJlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWV4dGVybmFsLWxpbmstc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZXh0ZXJuYWwtbGluay1zcXVhcmU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc2hhcmUtc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2hhcmUtc3F1YXJlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNvbXBhc3M6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jb21wYXNzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXRvZ2dsZS1kb3duOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tY2FyZXQtc3F1YXJlLW8tZG93bjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNhcmV0LXNxdWFyZS1vLWRvd247IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdG9nZ2xlLXVwOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tY2FyZXQtc3F1YXJlLW8tdXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYXJldC1zcXVhcmUtby11cDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10b2dnbGUtcmlnaHQ6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1jYXJldC1zcXVhcmUtby1yaWdodDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNhcmV0LXNxdWFyZS1vLXJpZ2h0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWV1cm86YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1ldXI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1ldXI7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZ2JwOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZ2JwOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWRvbGxhcjpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXVzZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXVzZDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1ydXBlZTpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWlucjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWlucjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jbnk6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1ybWI6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS15ZW46YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1qcHk6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1qcHk7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tcnVibGU6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1yb3VibGU6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1ydWI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1ydWI7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0td29uOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0ta3J3OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXIta3J3OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJpdGNvaW46YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1idGM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1idGM7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZmlsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbGU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZmlsZS10ZXh0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmlsZS10ZXh0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNvcnQtYWxwaGEtYXNjOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc29ydC1hbHBoYS1hc2M7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc29ydC1hbHBoYS1kZXNjOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc29ydC1hbHBoYS1kZXNjOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNvcnQtYW1vdW50LWFzYzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNvcnQtYW1vdW50LWFzYzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zb3J0LWFtb3VudC1kZXNjOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc29ydC1hbW91bnQtZGVzYzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zb3J0LW51bWVyaWMtYXNjOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc29ydC1udW1lcmljLWFzYzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zb3J0LW51bWVyaWMtZGVzYzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNvcnQtbnVtZXJpYy1kZXNjOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXRodW1icy11cDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRodW1icy11cDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10aHVtYnMtZG93bjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRodW1icy1kb3duOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXlvdXR1YmUtc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXIteW91dHViZS1zcXVhcmU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0teW91dHViZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXlvdXR1YmU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0teGluZzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXhpbmc7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0teGluZy1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci14aW5nLXNxdWFyZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS15b3V0dWJlLXBsYXk6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci15b3V0dWJlLXBsYXk7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZHJvcGJveDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWRyb3Bib3g7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc3RhY2stb3ZlcmZsb3c6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zdGFjay1vdmVyZmxvdzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1pbnN0YWdyYW06YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1pbnN0YWdyYW07IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZmxpY2tyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmxpY2tyOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWFkbjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFkbjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1iaXRidWNrZXQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1iaXRidWNrZXQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYml0YnVja2V0LXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJpdGJ1Y2tldC1zcXVhcmU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdHVtYmxyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdHVtYmxyOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXR1bWJsci1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10dW1ibHItc3F1YXJlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWxvbmctYXJyb3ctZG93bjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxvbmctYXJyb3ctZG93bjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1sb25nLWFycm93LXVwOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbG9uZy1hcnJvdy11cDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1sb25nLWFycm93LWxlZnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1sb25nLWFycm93LWxlZnQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tbG9uZy1hcnJvdy1yaWdodDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxvbmctYXJyb3ctcmlnaHQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYXBwbGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcHBsZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS13aW5kb3dzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItd2luZG93czsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1hbmRyb2lkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYW5kcm9pZDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1saW51eDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxpbnV4OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWRyaWJiYmxlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZHJpYmJibGU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc2t5cGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1za3lwZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1mb3Vyc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZm91cnNxdWFyZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10cmVsbG86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10cmVsbG87IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZmVtYWxlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmVtYWxlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LW1hbGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tYWxlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWdpdHRpcDpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWdyYXRpcGF5OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZ3JhdGlwYXk7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc3VuLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zdW4tbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1tb29uLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tb29uLW87IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYXJjaGl2ZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFyY2hpdmU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYnVnOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYnVnOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXZrOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdms7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0td2VpYm86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci13ZWlibzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1yZW5yZW46YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1yZW5yZW47IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tcGFnZWxpbmVzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGFnZWxpbmVzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXN0YWNrLWV4Y2hhbmdlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3RhY2stZXhjaGFuZ2U7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYXJyb3ctY2lyY2xlLW8tcmlnaHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1hcnJvdy1jaXJjbGUtby1yaWdodDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1hcnJvdy1jaXJjbGUtby1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYXJyb3ctY2lyY2xlLW8tbGVmdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10b2dnbGUtbGVmdDpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNhcmV0LXNxdWFyZS1vLWxlZnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYXJldC1zcXVhcmUtby1sZWZ0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWRvdC1jaXJjbGUtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWRvdC1jaXJjbGUtbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS13aGVlbGNoYWlyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItd2hlZWxjaGFpcjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS12aW1lby1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci12aW1lby1zcXVhcmU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdHVya2lzaC1saXJhOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tdHJ5OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdHJ5OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXBsdXMtc3F1YXJlLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1wbHVzLXNxdWFyZS1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNwYWNlLXNodXR0bGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zcGFjZS1zaHV0dGxlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNsYWNrOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2xhY2s7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZW52ZWxvcGUtc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZW52ZWxvcGUtc3F1YXJlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXdvcmRwcmVzczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXdvcmRwcmVzczsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1vcGVuaWQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1vcGVuaWQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0taW5zdGl0dXRpb246YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1iYW5rOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tdW5pdmVyc2l0eTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXVuaXZlcnNpdHk7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tbW9ydGFyLWJvYXJkOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tZ3JhZHVhdGlvbi1jYXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1ncmFkdWF0aW9uLWNhcDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS15YWhvbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXlhaG9vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWdvb2dsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWdvb2dsZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1yZWRkaXQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1yZWRkaXQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tcmVkZGl0LXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXJlZGRpdC1zcXVhcmU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc3R1bWJsZXVwb24tY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3R1bWJsZXVwb24tY2lyY2xlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXN0dW1ibGV1cG9uOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3R1bWJsZXVwb247IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZGVsaWNpb3VzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZGVsaWNpb3VzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWRpZ2c6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1kaWdnOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXBpZWQtcGlwZXI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1waWVkLXBpcGVyOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXBpZWQtcGlwZXItYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGllZC1waXBlci1hbHQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZHJ1cGFsOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZHJ1cGFsOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWpvb21sYTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWpvb21sYTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1sYW5ndWFnZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxhbmd1YWdlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZheDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZheDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1idWlsZGluZzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJ1aWxkaW5nOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNoaWxkOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2hpbGQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tcGF3OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGF3OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNwb29uOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3Bvb247IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY3ViZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWN1YmU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY3ViZXM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jdWJlczsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1iZWhhbmNlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYmVoYW5jZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1iZWhhbmNlLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJlaGFuY2Utc3F1YXJlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXN0ZWFtOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3RlYW07IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc3RlYW0tc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc3RlYW0tc3F1YXJlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXJlY3ljbGU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1yZWN5Y2xlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWF1dG9tb2JpbGU6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1jYXI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYXI7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY2FiOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tdGF4aTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRheGk7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdHJlZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRyZWU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc3BvdGlmeTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNwb3RpZnk7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZGV2aWFudGFydDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWRldmlhbnRhcnQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc291bmRjbG91ZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNvdW5kY2xvdWQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZGF0YWJhc2U6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1kYXRhYmFzZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1maWxlLXBkZi1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmlsZS1wZGYtbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1maWxlLXdvcmQtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbGUtd29yZC1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpbGUtZXhjZWwtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbGUtZXhjZWwtbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1maWxlLXBvd2VycG9pbnQtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbGUtcG93ZXJwb2ludC1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpbGUtcGhvdG8tbzpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpbGUtcGljdHVyZS1vOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tZmlsZS1pbWFnZS1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZmlsZS1pbWFnZS1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpbGUtemlwLW86YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1maWxlLWFyY2hpdmUtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbGUtYXJjaGl2ZS1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpbGUtc291bmQtbzpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWZpbGUtYXVkaW8tbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpbGUtYXVkaW8tbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1maWxlLW1vdmllLW86YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1maWxlLXZpZGVvLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1maWxlLXZpZGVvLW87IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZmlsZS1jb2RlLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1maWxlLWNvZGUtbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS12aW5lOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdmluZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jb2RlcGVuOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY29kZXBlbjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1qc2ZpZGRsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWpzZmlkZGxlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWxpZmUtYm91eTpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWxpZmUtYnVveTpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWxpZmUtc2F2ZXI6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1zdXBwb3J0OmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tbGlmZS1yaW5nOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbGlmZS1yaW5nOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNpcmNsZS1vLW5vdGNoOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2lyY2xlLW8tbm90Y2g7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tcmE6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1yZWJlbDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXJlYmVsOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWdlOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tZW1waXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZW1waXJlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWdpdC1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1naXQtc3F1YXJlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWdpdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWdpdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS15LWNvbWJpbmF0b3Itc3F1YXJlOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0teWMtc3F1YXJlOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0taGFja2VyLW5ld3M6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oYWNrZXItbmV3czsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10ZW5jZW50LXdlaWJvOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdGVuY2VudC13ZWlibzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1xcTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXFxOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXdlY2hhdDpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXdlaXhpbjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXdlaXhpbjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zZW5kOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tcGFwZXItcGxhbmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1wYXBlci1wbGFuZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zZW5kLW86YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1wYXBlci1wbGFuZS1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGFwZXItcGxhbmUtbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1oaXN0b3J5OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaGlzdG9yeTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jaXJjbGUtdGhpbjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNpcmNsZS10aGluOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWhlYWRlcjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWhlYWRlcjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1wYXJhZ3JhcGg6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1wYXJhZ3JhcGg7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc2xpZGVyczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNsaWRlcnM7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc2hhcmUtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2hhcmUtYWx0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNoYXJlLWFsdC1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zaGFyZS1hbHQtc3F1YXJlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJvbWI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1ib21iOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNvY2Nlci1iYWxsLW86YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1mdXRib2wtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZ1dGJvbC1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXR0eTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXR0eTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1iaW5vY3VsYXJzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYmlub2N1bGFyczsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1wbHVnOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGx1ZzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zbGlkZXNoYXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2xpZGVzaGFyZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10d2l0Y2g6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10d2l0Y2g7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0teWVscDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXllbHA7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tbmV3c3BhcGVyLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1uZXdzcGFwZXItbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS13aWZpOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItd2lmaTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jYWxjdWxhdG9yOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2FsY3VsYXRvcjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1wYXlwYWw6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1wYXlwYWw7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZ29vZ2xlLXdhbGxldDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWdvb2dsZS13YWxsZXQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY2MtdmlzYTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNjLXZpc2E7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY2MtbWFzdGVyY2FyZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNjLW1hc3RlcmNhcmQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY2MtZGlzY292ZXI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYy1kaXNjb3ZlcjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jYy1hbWV4OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2MtYW1leDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jYy1wYXlwYWw6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYy1wYXlwYWw7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY2Mtc3RyaXBlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2Mtc3RyaXBlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJlbGwtc2xhc2g6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1iZWxsLXNsYXNoOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJlbGwtc2xhc2gtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJlbGwtc2xhc2gtbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10cmFzaDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRyYXNoOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNvcHlyaWdodDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNvcHlyaWdodDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1hdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWF0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWV5ZWRyb3BwZXI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1leWVkcm9wcGVyOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXBhaW50LWJydXNoOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGFpbnQtYnJ1c2g7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYmlydGhkYXktY2FrZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJpcnRoZGF5LWNha2U7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYXJlYS1jaGFydDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFyZWEtY2hhcnQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tcGllLWNoYXJ0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItcGllLWNoYXJ0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWxpbmUtY2hhcnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1saW5lLWNoYXJ0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWxhc3RmbTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWxhc3RmbTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1sYXN0Zm0tc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbGFzdGZtLXNxdWFyZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10b2dnbGUtb2ZmOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdG9nZ2xlLW9mZjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10b2dnbGUtb246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10b2dnbGUtb247IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYmljeWNsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJpY3ljbGU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYnVzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYnVzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWlveGhvc3Q6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1pb3hob3N0OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWFuZ2VsbGlzdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWFuZ2VsbGlzdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jYzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNjOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNoZWtlbDpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNoZXFlbDpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWlsczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWlsczsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1tZWFucGF0aDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1lYW5wYXRoOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJ1eXNlbGxhZHM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1idXlzZWxsYWRzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNvbm5lY3RkZXZlbG9wOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY29ubmVjdGRldmVsb3A7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZGFzaGN1YmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1kYXNoY3ViZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1mb3J1bWJlZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZvcnVtYmVlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWxlYW5wdWI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1sZWFucHViOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNlbGxzeTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNlbGxzeTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zaGlydHNpbmJ1bGs6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zaGlydHNpbmJ1bGs7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc2ltcGx5YnVpbHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zaW1wbHlidWlsdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1za3lhdGxhczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNreWF0bGFzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNhcnQtcGx1czpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNhcnQtcGx1czsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jYXJ0LWFycm93LWRvd246YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jYXJ0LWFycm93LWRvd247IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZGlhbW9uZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWRpYW1vbmQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc2hpcDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNoaXA7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdXNlci1zZWNyZXQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci11c2VyLXNlY3JldDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1tb3RvcmN5Y2xlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbW90b3JjeWNsZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zdHJlZXQtdmlldzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXN0cmVldC12aWV3OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWhlYXJ0YmVhdDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWhlYXJ0YmVhdDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS12ZW51czpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXZlbnVzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LW1hcnM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tYXJzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LW1lcmN1cnk6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tZXJjdXJ5OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWludGVyc2V4OmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tdHJhbnNnZW5kZXI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10cmFuc2dlbmRlcjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10cmFuc2dlbmRlci1hbHQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci10cmFuc2dlbmRlci1hbHQ7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdmVudXMtZG91YmxlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdmVudXMtZG91YmxlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LW1hcnMtZG91YmxlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbWFycy1kb3VibGU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdmVudXMtbWFyczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXZlbnVzLW1hcnM7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tbWFycy1zdHJva2U6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tYXJzLXN0cm9rZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1tYXJzLXN0cm9rZS12OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbWFycy1zdHJva2UtdjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1tYXJzLXN0cm9rZS1oOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItbWFycy1zdHJva2UtaDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1uZXV0ZXI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1uZXV0ZXI7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZ2VuZGVybGVzczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWdlbmRlcmxlc3M7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZmFjZWJvb2stb2ZmaWNpYWw6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1mYWNlYm9vay1vZmZpY2lhbDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1waW50ZXJlc3QtcDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXBpbnRlcmVzdC1wOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXdoYXRzYXBwOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItd2hhdHNhcHA7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tc2VydmVyOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItc2VydmVyOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXVzZXItcGx1czpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXVzZXItcGx1czsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS11c2VyLXRpbWVzOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdXNlci10aW1lczsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1ob3RlbDpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJlZDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJlZDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS12aWFjb2luOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdmlhY29pbjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS10cmFpbjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRyYWluOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXN1YndheTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXN1YndheTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1tZWRpdW06YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tZWRpdW07IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0teWM6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS15LWNvbWJpbmF0b3I6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci15LWNvbWJpbmF0b3I7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tb3B0aW4tbW9uc3RlcjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW9wdGluLW1vbnN0ZXI7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tb3BlbmNhcnQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1vcGVuY2FydDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1leHBlZGl0ZWRzc2w6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1leHBlZGl0ZWRzc2w7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYmF0dGVyeS00OmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tYmF0dGVyeS1mdWxsOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYmF0dGVyeS1mdWxsOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJhdHRlcnktMzpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJhdHRlcnktdGhyZWUtcXVhcnRlcnM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1iYXR0ZXJ5LXRocmVlLXF1YXJ0ZXJzOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJhdHRlcnktMjpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJhdHRlcnktaGFsZjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJhdHRlcnktaGFsZjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1iYXR0ZXJ5LTE6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1iYXR0ZXJ5LXF1YXJ0ZXI6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1iYXR0ZXJ5LXF1YXJ0ZXI7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYmF0dGVyeS0wOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tYmF0dGVyeS1lbXB0eTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJhdHRlcnktZW1wdHk7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tbW91c2UtcG9pbnRlcjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1vdXNlLXBvaW50ZXI7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0taS1jdXJzb3I6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1pLWN1cnNvcjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1vYmplY3QtZ3JvdXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1vYmplY3QtZ3JvdXA7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tb2JqZWN0LXVuZ3JvdXA6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1vYmplY3QtdW5ncm91cDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1zdGlja3ktbm90ZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXN0aWNreS1ub3RlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXN0aWNreS1ub3RlLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1zdGlja3ktbm90ZS1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNjLWpjYjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNjLWpjYjsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jYy1kaW5lcnMtY2x1YjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNjLWRpbmVycy1jbHViOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNsb25lOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2xvbmU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYmFsYW5jZS1zY2FsZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJhbGFuY2Utc2NhbGU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0taG91cmdsYXNzLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1ob3VyZ2xhc3MtbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1ob3VyZ2xhc3MtMTpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWhvdXJnbGFzcy1zdGFydDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWhvdXJnbGFzcy1zdGFydDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1ob3VyZ2xhc3MtMjpiZWZvcmUsXHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWhvdXJnbGFzcy1oYWxmOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaG91cmdsYXNzLWhhbGY7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0taG91cmdsYXNzLTM6YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1ob3VyZ2xhc3MtZW5kOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaG91cmdsYXNzLWVuZDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1ob3VyZ2xhc3M6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1ob3VyZ2xhc3M7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0taGFuZC1ncmFiLW86YmVmb3JlLFxyXG4uQHtmYS1jc3MtcHJlZml4fS1oYW5kLXJvY2stbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWhhbmQtcm9jay1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWhhbmQtc3RvcC1vOmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0taGFuZC1wYXBlci1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaGFuZC1wYXBlci1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWhhbmQtc2Npc3NvcnMtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWhhbmQtc2Npc3NvcnMtbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1oYW5kLWxpemFyZC1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItaGFuZC1saXphcmQtbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1oYW5kLXNwb2NrLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oYW5kLXNwb2NrLW87IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0taGFuZC1wb2ludGVyLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oYW5kLXBvaW50ZXItbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1oYW5kLXBlYWNlLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1oYW5kLXBlYWNlLW87IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tdHJhZGVtYXJrOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdHJhZGVtYXJrOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXJlZ2lzdGVyZWQ6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1yZWdpc3RlcmVkOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNyZWF0aXZlLWNvbW1vbnM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jcmVhdGl2ZS1jb21tb25zOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWdnOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZ2c7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZ2ctY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZ2ctY2lyY2xlOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXRyaXBhZHZpc29yOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItdHJpcGFkdmlzb3I7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tb2Rub2tsYXNzbmlraTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW9kbm9rbGFzc25pa2k7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tb2Rub2tsYXNzbmlraS1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1vZG5va2xhc3NuaWtpLXNxdWFyZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1nZXQtcG9ja2V0OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItZ2V0LXBvY2tldDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS13aWtpcGVkaWEtdzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXdpa2lwZWRpYS13OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXNhZmFyaTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXNhZmFyaTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jaHJvbWU6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jaHJvbWU7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tZmlyZWZveDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWZpcmVmb3g7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tb3BlcmE6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1vcGVyYTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1pbnRlcm5ldC1leHBsb3JlcjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWludGVybmV0LWV4cGxvcmVyOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LXR2OmJlZm9yZSxcclxuLkB7ZmEtY3NzLXByZWZpeH0tdGVsZXZpc2lvbjpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXRlbGV2aXNpb247IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tY29udGFvOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY29udGFvOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LTUwMHB4OmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItNTAwcHg7IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0tYW1hem9uOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItYW1hem9uOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWNhbGVuZGFyLXBsdXMtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWNhbGVuZGFyLXBsdXMtbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jYWxlbmRhci1taW51cy1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2FsZW5kYXItbWludXMtbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jYWxlbmRhci10aW1lcy1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2FsZW5kYXItdGltZXMtbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jYWxlbmRhci1jaGVjay1vOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY2FsZW5kYXItY2hlY2stbzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1pbmR1c3RyeTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWluZHVzdHJ5OyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LW1hcC1waW46YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1tYXAtcGluOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LW1hcC1zaWduczpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1hcC1zaWduczsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1tYXAtbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1hcC1vOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LW1hcDpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLW1hcDsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jb21tZW50aW5nOmJlZm9yZSB7IGNvbnRlbnQ6IEBmYS12YXItY29tbWVudGluZzsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1jb21tZW50aW5nLW86YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1jb21tZW50aW5nLW87IH1cclxuLkB7ZmEtY3NzLXByZWZpeH0taG91eno6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1ob3V6ejsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS12aW1lbzpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLXZpbWVvOyB9XHJcbi5Ae2ZhLWNzcy1wcmVmaXh9LWJsYWNrLXRpZTpiZWZvcmUgeyBjb250ZW50OiBAZmEtdmFyLWJsYWNrLXRpZTsgfVxyXG4uQHtmYS1jc3MtcHJlZml4fS1mb250aWNvbnM6YmVmb3JlIHsgY29udGVudDogQGZhLXZhci1mb250aWNvbnM7IH1cclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */ diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Styles/font-awesome.min.css b/src/Orchard.Web/Modules/Orchard.Resources/Styles/font-awesome.min.css index 461ed2cf90a..0bede8509ea 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Styles/font-awesome.min.css +++ b/src/Orchard.Web/Modules/Orchard.Resources/Styles/font-awesome.min.css @@ -1,4 +1,4 @@ /*! * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */.fa.fa-pull-left,.fa.pull-left{margin-right:.3em}.fa,.fa-stack{display:inline-block}.fa-fw,.fa-li{text-align:center}@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.4.0);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0) format('embedded-opentype'),url(../fonts/fontawesome-webfont.woff2?v=4.4.0) format('woff2'),url(../fonts/fontawesome-webfont.woff?v=4.4.0) format('woff'),url(../fonts/fontawesome-webfont.ttf?v=4.4.0) format('truetype'),url(../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa.fa-pull-right,.fa.pull-right{margin-left:.3em}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right,.pull-right{float:right}.pull-left{float:left}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"} \ No newline at end of file + */.fa.fa-pull-left,.fa.pull-left{margin-right:.3em}.fa,.fa-stack{display:inline-block}.fa-fw,.fa-li{text-align:center}@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.4.0);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0) format('embedded-opentype'),url(../fonts/fontawesome-webfont.woff2?v=4.4.0) format('woff2'),url(../fonts/fontawesome-webfont.woff?v=4.4.0) format('woff'),url(../fonts/fontawesome-webfont.ttf?v=4.4.0) format('truetype'),url(../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa.fa-pull-right,.fa.pull-right{margin-left:.3em}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right,.pull-right{float:right}.pull-left{float:left}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery-ui.css b/src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery-ui.css index d52326c3619..04292ab49cb 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery-ui.css +++ b/src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery-ui.css @@ -684,8 +684,7 @@ button.ui-button::-moz-focus-inner { /* support: IE8 - See #6727 */ .ui-slider.ui-state-disabled .ui-slider-handle, .ui-slider.ui-state-disabled .ui-slider-range { - -webkit-filter: inherit; - filter: inherit; + filter: inherit; } .ui-slider-horizontal { @@ -1915,8 +1914,7 @@ button.ui-button::-moz-focus-inner { /* support: IE8 - See #6727 */ .ui-slider.ui-state-disabled .ui-slider-handle, .ui-slider.ui-state-disabled .ui-slider-range { - -webkit-filter: inherit; - filter: inherit; + filter: inherit; } .ui-slider-horizontal { @@ -2474,4 +2472,4 @@ body .ui-tooltip { border-radius: 8px; } -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS11aS5jc3MiLCJqcXVlcnktdWkuc3RydWN0dXJlLmNzcyIsImpxdWVyeS11aS50aGVtZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7Ozs7cUVBSUE7O0FBRUE7b0NBQ0E7QUFDQTtDQUNBLGNBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBLG9CQUFBO0NBQ0EsWUFBQTtDQUNBLGFBQUE7Q0FDQSxpQkFBQTtDQUNBLFdBQUE7Q0FDQSxtQkFBQTtDQUNBLFdBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBLFdBQUE7Q0FDQSxVQUFBO0NBQ0EsV0FBQTtDQUNBLGlCQUFBO0NBQ0Esc0JBQUE7Q0FDQSxnQkFBQTtDQUNBLGlCQUFBO0NBQ0E7QUFDQTs7Q0FFQSxZQUFBO0NBQ0EsZUFBQTtDQUNBLDBCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsY0FBQSxDQUFBLGtCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxhQUFBO0NBQ0EsT0FBQTtDQUNBLFFBQUE7Q0FDQSxtQkFBQTtDQUNBLFdBQUE7Q0FDQSx3QkFBQSxDQUFBLGtCQUFBO0NBQ0E7O0FBRUE7Q0FDQSxhQUFBO0NBQ0E7OztBQUdBO29DQUNBO0FBQ0E7Q0FDQSwyQkFBQTtDQUNBOzs7QUFHQTtvQ0FDQTs7QUFFQSx1QkFBQTtBQUNBO0NBQ0EsZUFBQTtDQUNBLHNCQUFBO0NBQ0EsaUJBQUE7Q0FDQSw2QkFBQTtDQUNBOzs7QUFHQTtvQ0FDQTs7QUFFQSxjQUFBO0FBQ0E7Q0FDQSxnQkFBQTtDQUNBLE9BQUE7Q0FDQSxRQUFBO0NBQ0EsWUFBQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsdUJBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLGlCQUFBO0NBQ0EsZUFBQTtDQUNBLHVCQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBOztDQUVBLGNBQUE7Q0FDQTtBQUNBO0NBQ0EsaUJBQUE7Q0FDQSxZQUFBO0NBQ0EsWUFBQTtDQUNBLFVBQUE7Q0FDQSxRQUFBO0NBQ0E7QUFDQTtDQUNBLGlCQUFBO0NBQ0EsWUFBQTtDQUNBLFlBQUE7Q0FDQSxhQUFBO0NBQ0EsUUFBQTtDQUNBO0FBQ0E7Q0FDQSxpQkFBQTtDQUNBLFdBQUE7Q0FDQSxZQUFBO0NBQ0EsT0FBQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsaUJBQUE7Q0FDQSxXQUFBO0NBQ0EsV0FBQTtDQUNBLE9BQUE7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLGtCQUFBO0NBQ0EsWUFBQTtDQUNBLGFBQUE7Q0FDQSxXQUFBO0NBQ0EsWUFBQTtDQUNBO0FBQ0E7Q0FDQSxrQkFBQTtDQUNBLFdBQUE7Q0FDQSxZQUFBO0NBQ0EsV0FBQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0Esa0JBQUE7Q0FDQSxXQUFBO0NBQ0EsWUFBQTtDQUNBLFdBQUE7Q0FDQSxVQUFBO0NBQ0E7QUFDQTtDQUNBLGtCQUFBO0NBQ0EsV0FBQTtDQUNBLFlBQUE7Q0FDQSxZQUFBO0NBQ0EsVUFBQTtDQUNBO0FBQ0E7Q0FDQSx1QkFBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsYUFBQTtDQUNBLHlCQUFBO0NBQ0E7QUFDQTtDQUNBLHVCQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsZUFBQTtDQUNBLGdCQUFBO0NBQ0EsbUJBQUE7Q0FDQSxrQkFBQTtDQUNBLDZCQUFBO0NBQ0EsY0FBQSxDQUFBLGtCQUFBO0NBQ0EsZ0JBQUE7Q0FDQTtBQUNBO0NBQ0Esb0JBQUE7Q0FDQTtBQUNBO0NBQ0Esb0JBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxXQUFBO0NBQ0EsU0FBQTtDQUNBLGlCQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsY0FBQTtDQUNBLGVBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxPQUFBO0NBQ0EsUUFBQTtDQUNBLGdCQUFBO0NBQ0E7QUFDQTtDQUNBLHNCQUFBO0NBQ0EsbUJBQUE7Q0FDQSxXQUFBO0NBQ0Esb0JBQUE7Q0FDQSxtQkFBQTtDQUNBLGdCQUFBO0NBQ0EsdUJBQUE7Q0FDQSxtQkFBQTtDQUNBLGtCQUFBLENBQUEsK0JBQUE7Q0FDQTtBQUNBOzs7OztDQUtBLHNCQUFBO0NBQ0E7QUFDQSw2REFBQTtBQUNBO0NBQ0EsYUFBQTtDQUNBO0FBQ0Esc0RBQUE7QUFDQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0E7O0FBRUEseUJBQUE7QUFDQTtDQUNBLGVBQUE7Q0FDQSxvQkFBQTtDQUNBO0FBQ0E7Q0FDQSxrQkFBQTtDQUNBO0FBQ0E7O0NBRUEsY0FBQTtDQUNBLHdCQUFBO0NBQ0E7QUFDQTs7Q0FFQSw2QkFBQTtDQUNBO0FBQ0E7O0NBRUEsNkJBQUE7Q0FDQTtBQUNBO0NBQ0Esb0JBQUE7Q0FDQSxxQkFBQTtDQUNBO0FBQ0Esb0VBQUE7QUFDQTtDQUNBLGtCQUFBO0NBQ0E7O0FBRUEsNEJBQUE7QUFDQTs7Ozs7Q0FLQSxtQkFBQTtDQUNBLFNBQUE7Q0FDQSxpQkFBQTtDQUNBO0FBQ0E7Q0FDQSxVQUFBO0NBQ0Esa0JBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxXQUFBO0NBQ0E7QUFDQTs7O0NBR0EsWUFBQTtDQUNBOztBQUVBLGlCQUFBO0FBQ0E7Q0FDQSxrQkFBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0Esb0JBQUE7Q0FDQTs7QUFFQSxpQkFBQTtBQUNBLG9EQUFBO0FBQ0E7O0NBRUEsVUFBQTtDQUNBLFdBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLHFCQUFBO0NBQ0EsY0FBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLGdCQUFBO0NBQ0E7QUFDQTs7Q0FFQSxtQkFBQTtDQUNBLFNBQUE7Q0FDQSxhQUFBO0NBQ0EsY0FBQTtDQUNBO0FBQ0E7O0NBRUEsU0FBQTtDQUNBO0FBQ0E7Q0FDQSxVQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBO0FBQ0E7Q0FDQSxXQUFBO0NBQ0E7QUFDQTs7Q0FFQSxlQUFBO0NBQ0EsbUJBQUE7Q0FDQSxVQUFBO0NBQ0Esa0JBQUE7Q0FDQSxTQUFBO0NBQ0EsaUJBQUE7Q0FDQTtBQUNBO0NBQ0EsZ0JBQUE7Q0FDQSxtQkFBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLGVBQUE7Q0FDQSxjQUFBO0NBQ0E7QUFDQTs7Q0FFQSxXQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxnQkFBQTtDQUNBLDBCQUFBO0NBQ0EsaUJBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxtQkFBQTtDQUNBLGtCQUFBO0NBQ0EsVUFBQTtDQUNBO0FBQ0E7Q0FDQSxVQUFBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7O0NBRUEsZUFBQTtDQUNBLGNBQUE7Q0FDQSxrQkFBQTtDQUNBLHNCQUFBO0NBQ0E7QUFDQTtDQUNBLHVCQUFBO0NBQ0EsbUJBQUE7Q0FDQSxnQkFBQTtDQUNBLGVBQUE7Q0FDQSxnQkFBQTtDQUNBLGlCQUFBO0NBQ0E7QUFDQTtDQUNBLGFBQUE7Q0FDQSx1QkFBQTtDQUNBLGdCQUFBO0NBQ0EsNkJBQUE7Q0FDQSxZQUFBO0NBQ0Esa0JBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBOztBQUVBLDZCQUFBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsV0FBQTtDQUNBLG9CQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxXQUFBO0NBQ0E7QUFDQTs7Q0FFQSxxQkFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxZQUFBO0NBQ0EsYUFBQTtDQUNBOztBQUVBLGlCQUFBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQSxXQUFBO0NBQ0E7QUFDQTtDQUNBLFVBQUE7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQSxXQUFBO0NBQ0E7QUFDQTtDQUNBLFVBQUE7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBO0FBQ0E7O0NBRUEsYUFBQTtDQUNBO0FBQ0E7O0NBRUEsc0JBQUE7Q0FDQSx1QkFBQTtDQUNBO0FBQ0E7Q0FDQSxpQkFBQTtDQUNBLG1CQUFBO0NBQ0EsT0FBQTtDQUNBLFFBQUE7Q0FDQSxjQUFBO0NBQ0EsV0FBQTtDQUNBO0FBQ0E7Q0FDQSxrQkFBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxlQUFBO0NBQ0Esb0JBQUE7Q0FDQSxXQUFBO0NBQ0EsaUJBQUE7Q0FDQSx3QkFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLFlBQUE7Q0FDQSxTQUFBO0NBQ0EsWUFBQTtDQUNBLG9CQUFBO0NBQ0EsYUFBQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxVQUFBO0NBQ0Esa0JBQUE7Q0FDQSxpQkFBQTtDQUNBLGVBQUE7Q0FDQTtBQUNBO0NBQ0EsaUJBQUE7Q0FDQSx3QkFBQTtDQUNBLHVCQUFBO0NBQ0EsaUJBQUE7Q0FDQSw0QkFBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLHlCQUFBO0NBQ0EsZ0JBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLGFBQUE7Q0FDQSxZQUFBO0NBQ0EsYUFBQTtDQUNBLCtCQUFBO0NBQ0E7QUFDQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsaUJBQUE7Q0FDQSxXQUFBO0NBQ0EsVUFBQTtDQUNBLGVBQUE7Q0FDQSxjQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsVUFBQTtDQUNBLDBCQUFBO0NBQ0EsZ0JBQUE7Q0FDQSxjQUFBLENBQUEsa0JBQUE7Q0FDQSw4QkFBQTtDQUNBLHdHQUFBO0NBQ0E7QUFDQTtDQUNBLGNBQUE7Q0FDQSxVQUFBO0NBQ0EsYUFBQTtDQUNBLGVBQUE7Q0FDQSx3QkFBQTtDQUNBO0FBQ0E7O0NBRUEsYUFBQTtDQUNBOztBQUVBLGtCQUFBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxrQkFBQTtDQUNBOztBQUVBLGtCQUFBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLE9BQUE7Q0FDQSxVQUFBO0NBQ0EsV0FBQTtDQUNBLGVBQUE7Q0FDQTs7QUFFQSxtQkFBQTtBQUNBO0NBQ0EsV0FBQTtDQUNBLFNBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLGlCQUFBO0NBQ0EsaUJBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsMHpFQUFBO0NBQ0EsYUFBQTtDQUNBLDBCQUFBLENBQUEsa0JBQUE7Q0FDQSxjQUFBO0NBQ0E7QUFDQTtDQUNBLHVCQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQSxVQUFBO0NBQ0EsbUJBQUE7Q0FDQSxPQUFBO0NBQ0EsUUFBQTtDQUNBLGNBQUE7Q0FDQTtBQUNBO0NBQ0EsZUFBQTtDQUNBLGtCQUFBO0NBQ0EsbUJBQUE7Q0FDQSxvQkFBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0Esa0JBQUE7Q0FDQSxpQkFBQTtDQUNBLG1CQUFBO0NBQ0Esb0JBQUE7Q0FDQSxhQUFBO0NBQ0EsVUFBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0E7QUFDQTtDQUNBLHNCQUFBO0NBQ0EsaUJBQUE7Q0FDQSxtQkFBQTtDQUNBLHNCQUFBO0NBQ0EsZ0JBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBLFdBQUE7Q0FDQSxpQkFBQTtDQUNBLG1CQUFBO0NBQ0EsU0FBQTtDQUNBO0FBQ0E7Q0FDQSxpQkFBQTtDQUNBLCtCQUFBO0NBQ0EsZUFBQTtDQUNBLGlCQUFBO0NBQ0EsaUJBQUE7Q0FDQSx3QkFBQTtDQUNBLG9CQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsaUJBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxXQUFBO0NBQ0EsYUFBQTtDQUNBLGNBQUE7Q0FDQSxnQkFBQTtDQUNBLHVCQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxXQUFBO0NBQ0EsZ0JBQUE7Q0FDQSxlQUFBO0NBQ0EsVUFBQTtDQUNBLHlCQUFBO0NBQ0E7O0FBRUEsOEJBQUE7QUFDQTs7Q0FFQSx3QkFBQTtTQUFBLGdCQUFBO0NBQ0E7O0FBRUE7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxPQUFBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxRQUFBO0NBQ0E7QUFDQTtDQUNBLFNBQUE7Q0FDQTs7QUFFQTtDQUNBLFlBQUE7Q0FDQSxjQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxlQUFBO0NBQ0EscUJBQUE7Q0FDQTtBQUNBO0NBQ0EsUUFBQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBO0FBQ0E7Q0FDQSxPQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0Esc0JBQUE7Q0FDQSxpQkFBQTtDQUNBLFdBQUE7Q0FDQSx1QkFBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0EsaUJBQUE7Q0FDQSxlQUFBO0NBQ0EsV0FBQTtDQUNBLGVBQUE7Q0FDQSx1QkFBQTtDQUNBLGtCQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLFlBQUE7Q0FDQSxnQkFBQTtDQUNBLFdBQUE7Q0FDQSxVQUFBO0NBQ0EsbUJBQUE7Q0FDQSxtQkFBQTtDQUNBLGdCQUFBO0NBQ0EsZUFBQTtDQUNBLGlCQUFBO0NBQ0EsU0FBQTtDQUNBO0FBQ0EsZ0VBQUE7QUFDQTtDQUNBLGlCQUFBO0NBQ0Esb0JBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0EsNEJBQUE7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsaUJBQUE7Q0FDQSxTQUFBO0NBQ0EsUUFBQTtDQUNBO0FBQ0E7Q0FDQSxPQUFBO0NBQ0E7QUFDQTtDQUNBLFVBQUE7Q0FDQTs7QUFFQSxrQkFBQTtBQUNBO0NBQ0EsOEJBQUE7Q0FDQSxpQ0FBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQSx3SUFBQTtDQUNBLGNBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBLHFCQUFBO0NBQ0E7QUFDQTtDQUNBLGlCQUFBO0NBQ0EsWUFBQTtDQUNBLG1CQUFBO0NBQ0EsT0FBQTtDQUNBLHFCQUFBO0NBQ0EsdUJBQUE7Q0FDQSxXQUFBO0NBQ0Esb0JBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLGtCQUFBO0NBQ0Esc0JBQUE7Q0FDQTtBQUNBO0NBQ0Esb0JBQUE7Q0FDQSxvQkFBQTtDQUNBO0FBQ0E7OztDQUdBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsZ0JBQUE7Q0FDQTtBQUNBO0NBQ0EsZUFBQTtDQUNBLGdCQUFBO0NBQ0EsbUJBQUE7Q0FDQSxpQkFBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0EsbUJBQUE7Q0FDQSxjQUFBO0NBQ0EsaUJBQUE7Q0FFQSx5QkFBQTtDQUNBO0FBQ0E7Q0FDQSxrQkFBQTtDQUNBOztBQUVBO29DQUNBO0FBQ0E7Q0FDQSxzQ0FBQTtDQUNBLGlCQUFBO0NBQ0E7QUFDQTtDQUNBLGVBQUE7Q0FDQTtBQUNBOzs7O0NBSUEsc0NBQUE7Q0FDQSxlQUFBO0NBQ0E7QUFDQTtDQUNBLDBCQUFBO0NBQ0Esb0JBQUE7Q0FDQSxlQUFBO0NBQ0E7QUFDQTtDQUNBLGVBQUE7Q0FDQTtBQUNBO0NBQ0EsMEJBQUE7Q0FDQSw0RkFBQTtDQUNBLGVBQUE7Q0FDQSxrQkFBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0E7O0FBRUE7b0NBQ0E7QUFDQTs7O0NBR0EsMEJBQUE7Q0FDQSxtRkFBQTtDQUNBLG9CQUFBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7OztDQUdBLGVBQUE7Q0FDQSxzQkFBQTtDQUNBO0FBQ0E7Ozs7OztDQU1BLDBCQUFBO0NBQ0EsbUZBQUE7Q0FDQSxvQkFBQTtDQUNBLGVBQUE7Q0FDQTtBQUNBOzs7Ozs7OztDQVFBLGVBQUE7Q0FDQSxzQkFBQTtDQUNBO0FBQ0E7OztDQUdBLDBCQUFBO0NBQ0EsbUZBQUE7Q0FDQSxvQkFBQTtDQUNBLGVBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxlQUFBO0NBQ0Esc0JBQUE7Q0FDQTs7QUFFQTtvQ0FDQTtBQUNBOzs7Q0FHQSwwQkFBQTtDQUNBLG1GQUFBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7OztDQUdBLGVBQUE7Q0FDQTtBQUNBOzs7Q0FHQSwwQkFBQTtDQUNBLG1GQUFBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7OztDQUdBLGVBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxlQUFBO0NBQ0E7QUFDQTs7O0NBR0Esa0JBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxZQUFBO0NBQ0EseUJBQUEsQ0FBQSxrQkFBQTtDQUNBLG9CQUFBO0NBQ0E7QUFDQTs7O0NBR0EsYUFBQTtDQUNBLHlCQUFBLENBQUEsa0JBQUE7Q0FDQSx1QkFBQTtDQUNBO0FBQ0E7Q0FDQSx5QkFBQSxDQUFBLDhCQUFBO0NBQ0E7O0FBRUE7b0NBQ0E7O0FBRUEsdUJBQUE7QUFDQTtDQUNBLFlBQUE7Q0FDQSxhQUFBO0NBQ0E7QUFDQTs7Q0FFQSw0REFBQTtDQUNBO0FBQ0E7Q0FDQSw0REFBQTtDQUNBO0FBQ0E7Q0FDQSw0REFBQTtDQUNBO0FBQ0E7O0NBRUEsNERBQUE7Q0FDQTtBQUNBO0NBQ0EsNERBQUE7Q0FDQTtBQUNBO0NBQ0EsNERBQUE7Q0FDQTtBQUNBOztDQUVBLDREQUFBO0NBQ0E7O0FBRUEsaUJBQUE7QUFDQSxpQkFBQSwrQkFBQSxFQUFBO0FBQ0EscUJBQUEseUJBQUEsRUFBQTtBQUNBLHNCQUFBLDZCQUFBLEVBQUE7QUFDQSxxQkFBQSw2QkFBQSxFQUFBO0FBQ0Esc0JBQUEsNkJBQUEsRUFBQTtBQUNBLHFCQUFBLDZCQUFBLEVBQUE7QUFDQSxzQkFBQSw2QkFBQSxFQUFBO0FBQ0EscUJBQUEsNkJBQUEsRUFBQTtBQUNBLHNCQUFBLDhCQUFBLEVBQUE7QUFDQSx1QkFBQSw4QkFBQSxFQUFBO0FBQ0EsdUJBQUEsOEJBQUEsRUFBQTtBQUNBLHdCQUFBLDZCQUFBLEVBQUE7QUFDQSx5QkFBQSxpQ0FBQSxFQUFBO0FBQ0Esd0JBQUEsaUNBQUEsRUFBQTtBQUNBLHlCQUFBLGlDQUFBLEVBQUE7QUFDQSx3QkFBQSxpQ0FBQSxFQUFBO0FBQ0EseUJBQUEsaUNBQUEsRUFBQTtBQUNBLHdCQUFBLGlDQUFBLEVBQUE7QUFDQSx5QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsMEJBQUEsa0NBQUEsRUFBQTtBQUNBLDBCQUFBLGtDQUFBLEVBQUE7QUFDQSxxQkFBQSw2QkFBQSxFQUFBO0FBQ0Esc0JBQUEsaUNBQUEsRUFBQTtBQUNBLHFCQUFBLGlDQUFBLEVBQUE7QUFDQSxzQkFBQSxpQ0FBQSxFQUFBO0FBQ0EscUJBQUEsaUNBQUEsRUFBQTtBQUNBLHNCQUFBLGlDQUFBLEVBQUE7QUFDQSxxQkFBQSxpQ0FBQSxFQUFBO0FBQ0Esc0JBQUEsa0NBQUEsRUFBQTtBQUNBLHVCQUFBLGtDQUFBLEVBQUE7QUFDQSx5QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsdUJBQUEsa0NBQUEsRUFBQTtBQUNBLHlCQUFBLGtDQUFBLEVBQUE7QUFDQSx5QkFBQSxrQ0FBQSxFQUFBO0FBQ0EseUJBQUEsa0NBQUEsRUFBQTtBQUNBLHlCQUFBLGtDQUFBLEVBQUE7QUFDQSx5QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsMEJBQUEsNkJBQUEsRUFBQTtBQUNBLDJCQUFBLGlDQUFBLEVBQUE7QUFDQSwwQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsMkJBQUEsaUNBQUEsRUFBQTtBQUNBLDBCQUFBLGlDQUFBLEVBQUE7QUFDQSwyQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsMEJBQUEsaUNBQUEsRUFBQTtBQUNBLDJCQUFBLGtDQUFBLEVBQUE7QUFDQSw0QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsOEJBQUEsa0NBQUEsRUFBQTtBQUNBLDRCQUFBLGtDQUFBLEVBQUE7QUFDQSw4QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsOEJBQUEsa0NBQUEsRUFBQTtBQUNBLDhCQUFBLGtDQUFBLEVBQUE7QUFDQSw4QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsOEJBQUEsa0NBQUEsRUFBQTtBQUNBLGdDQUFBLDZCQUFBLEVBQUE7QUFDQSxnQ0FBQSxpQ0FBQSxFQUFBO0FBQ0EsZ0NBQUEsaUNBQUEsRUFBQTtBQUNBLGdDQUFBLGlDQUFBLEVBQUE7QUFDQSwyQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsMkJBQUEsaUNBQUEsRUFBQTtBQUNBLDJCQUFBLGlDQUFBLEVBQUE7QUFDQSwyQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNEJBQUEsa0NBQUEsRUFBQTtBQUNBLDRCQUFBLGtDQUFBLEVBQUE7QUFDQSw0QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNEJBQUEsa0NBQUEsRUFBQTtBQUNBLG1CQUFBLDZCQUFBLEVBQUE7QUFDQSx3QkFBQSxpQ0FBQSxFQUFBO0FBQ0EsbUJBQUEsaUNBQUEsRUFBQTtBQUNBLGtCQUFBLGlDQUFBLEVBQUE7QUFDQSxtQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsbUJBQUEsaUNBQUEsRUFBQTtBQUNBLHdCQUFBLGlDQUFBLEVBQUE7QUFDQSw2QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNEJBQUEsNkJBQUEsRUFBQTtBQUNBLHVCQUFBLGlDQUFBLEVBQUE7QUFDQSxvQkFBQSxpQ0FBQSxFQUFBO0FBQ0Esc0JBQUEsaUNBQUEsRUFBQTtBQUNBLGdCQUFBLGlDQUFBLEVBQUE7QUFDQSx1QkFBQSxpQ0FBQSxFQUFBO0FBQ0EscUJBQUEsaUNBQUEsRUFBQTtBQUNBLG9CQUFBLGtDQUFBLEVBQUE7QUFDQSxtQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esa0JBQUEsa0NBQUEsRUFBQTtBQUNBLGlCQUFBLGtDQUFBLEVBQUE7QUFDQSxpQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esa0JBQUEsa0NBQUEsRUFBQTtBQUNBLG9CQUFBLGtDQUFBLEVBQUE7QUFDQSxvQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsZUFBQSxrQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsOEJBQUEsRUFBQTtBQUNBLGdCQUFBLGtDQUFBLEVBQUE7QUFDQSxvQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsa0NBQUEsRUFBQTtBQUNBLGtCQUFBLGtDQUFBLEVBQUE7QUFDQSxpQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsa0NBQUEsRUFBQTtBQUNBLHNCQUFBLG1DQUFBLEVBQUE7QUFDQSxrQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsbUJBQUEsbUNBQUEsRUFBQTtBQUNBLGtCQUFBLG1DQUFBLEVBQUE7QUFDQSxrQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsbUNBQUEsRUFBQTtBQUNBLGlCQUFBLG1DQUFBLEVBQUE7QUFDQSxnQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsbUNBQUEsRUFBQTtBQUNBLGtCQUFBLDhCQUFBLEVBQUE7QUFDQSxnQkFBQSxrQ0FBQSxFQUFBO0FBQ0EscUJBQUEsa0NBQUEsRUFBQTtBQUNBLGlCQUFBLGtDQUFBLEVBQUE7QUFDQSxzQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsaUJBQUEsa0NBQUEsRUFBQTtBQUNBLHNCQUFBLGtDQUFBLEVBQUE7QUFDQSxlQUFBLG1DQUFBLEVBQUE7QUFDQSxxQkFBQSxtQ0FBQSxFQUFBO0FBQ0Esb0JBQUEsbUNBQUEsRUFBQTtBQUNBLHFCQUFBLG1DQUFBLEVBQUE7QUFDQSxnQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsbUJBQUEsbUNBQUEsRUFBQTtBQUNBLGlCQUFBLG1DQUFBLEVBQUE7QUFDQSxpQkFBQSxtQ0FBQSxFQUFBO0FBQ0Esa0JBQUEsbUNBQUEsRUFBQTtBQUNBLGlCQUFBLDhCQUFBLEVBQUE7QUFDQSxnQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esa0JBQUEsa0NBQUEsRUFBQTtBQUNBLGdCQUFBLGtDQUFBLEVBQUE7QUFDQSxpQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esa0JBQUEsa0NBQUEsRUFBQTtBQUNBLG9CQUFBLGtDQUFBLEVBQUE7QUFDQSxxQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsaUJBQUEsbUNBQUEsRUFBQTtBQUNBLGlCQUFBLG1DQUFBLEVBQUE7QUFDQSxnQkFBQSw4QkFBQSxFQUFBO0FBQ0EsaUJBQUEsa0NBQUEsRUFBQTtBQUNBLHFCQUFBLGtDQUFBLEVBQUE7QUFDQSxxQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esb0JBQUEsa0NBQUEsRUFBQTtBQUNBLHNCQUFBLGtDQUFBLEVBQUE7QUFDQSxzRUFBQTtBQUNBLHNCQUFBLGtDQUFBLEVBQUE7QUFDQSxnQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsaUJBQUEsbUNBQUEsRUFBQTtBQUNBLHNCQUFBLG1DQUFBLEVBQUE7QUFDQSxxQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsaUJBQUEsOEJBQUEsRUFBQTtBQUNBLHVCQUFBLGtDQUFBLEVBQUE7QUFDQSxrQkFBQSxrQ0FBQSxFQUFBO0FBQ0EscUJBQUEsa0NBQUEsRUFBQTtBQUNBLHFCQUFBLGtDQUFBLEVBQUE7QUFDQSxxQkFBQSxrQ0FBQSxFQUFBO0FBQ0EscUJBQUEsa0NBQUEsRUFBQTtBQUNBLHVCQUFBLDhCQUFBLEVBQUE7QUFDQSx3QkFBQSxrQ0FBQSxFQUFBO0FBQ0Esd0JBQUEsa0NBQUEsRUFBQTtBQUNBLDZCQUFBLGtDQUFBLEVBQUE7QUFDQSw2QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNkJBQUEsa0NBQUEsRUFBQTtBQUNBLDZCQUFBLGtDQUFBLEVBQUE7QUFDQSwwQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsMEJBQUEsbUNBQUEsRUFBQTtBQUNBLDBCQUFBLG1DQUFBLEVBQUE7QUFDQSwwQkFBQSxtQ0FBQSxFQUFBO0FBQ0EseUJBQUEsbUNBQUEsRUFBQTtBQUNBLDBCQUFBLG1DQUFBLEVBQUE7QUFDQSx3QkFBQSxtQ0FBQSxFQUFBO0FBQ0EsNEJBQUEsOEJBQUEsRUFBQTtBQUNBLDZCQUFBLGtDQUFBLEVBQUE7QUFDQSw2QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNEJBQUEsa0NBQUEsRUFBQTtBQUNBLDZCQUFBLGtDQUFBLEVBQUE7QUFDQSw2QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsZ0NBQUEsOEJBQUEsRUFBQTtBQUNBLGtDQUFBLGtDQUFBLEVBQUE7QUFDQSwrQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsaUNBQUEsa0NBQUEsRUFBQTtBQUNBLGlDQUFBLGtDQUFBLEVBQUE7QUFDQSw0QkFBQSxrQ0FBQSxFQUFBOzs7QUFHQTtvQ0FDQTs7QUFFQSxtQkFBQTtBQUNBOzs7O0NBSUEsNEJBQUE7Q0FDQTtBQUNBOzs7O0NBSUEsNkJBQUE7Q0FDQTtBQUNBOzs7O0NBSUEsK0JBQUE7Q0FDQTtBQUNBOzs7O0NBSUEsZ0NBQUE7Q0FDQTs7QUFFQSxjQUFBO0FBQ0E7Q0FDQSxvQkFBQTtDQUNBLFlBQUE7Q0FDQSwwQkFBQSxDQUFBLGtCQUFBO0NBQ0E7QUFDQTtDQUNBLHNCQUFBO0NBQ0EsYUFBQTtDQUNBLG9CQUFBO0NBQ0EsWUFBQTtDQUNBLDBCQUFBLENBQUEsa0JBQUE7Q0FDQSxtQkFBQTtDQUNBOztBQ3hzQ0E7Ozs7Ozs7OztHQVNBOztBQUVBO29DQUNBO0FBQ0E7Q0FDQSxjQUFBO0NBQ0E7QUFDQTtDQUNBLFVBQUE7Q0FDQSxvQkFBQTtDQUNBLFlBQUE7Q0FDQSxhQUFBO0NBQ0EsaUJBQUE7Q0FDQSxXQUFBO0NBQ0EsbUJBQUE7Q0FDQSxXQUFBO0NBQ0E7QUFDQTtDQUNBLFVBQUE7Q0FDQSxXQUFBO0NBQ0EsVUFBQTtDQUNBLFdBQUE7Q0FDQSxpQkFBQTtDQUNBLHNCQUFBO0NBQ0EsZ0JBQUE7Q0FDQSxpQkFBQTtDQUNBO0FBQ0E7O0NBRUEsWUFBQTtDQUNBLGVBQUE7Q0FDQSwwQkFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLGNBQUEsQ0FBQSxrQkFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsYUFBQTtDQUNBLE9BQUE7Q0FDQSxRQUFBO0NBQ0EsbUJBQUE7Q0FDQSxXQUFBO0NBQ0Esd0JBQUEsQ0FBQSxrQkFBQTtDQUNBOztBQUVBO0NBQ0EsYUFBQTtDQUNBOzs7QUFHQTtvQ0FDQTtBQUNBO0NBQ0EsMkJBQUE7Q0FDQTs7O0FBR0E7b0NBQ0E7O0FBRUEsdUJBQUE7QUFDQTtDQUNBLGVBQUE7Q0FDQSxzQkFBQTtDQUNBLGlCQUFBO0NBQ0EsNkJBQUE7Q0FDQTs7O0FBR0E7b0NBQ0E7O0FBRUEsY0FBQTtBQUNBO0NBQ0EsZ0JBQUE7Q0FDQSxPQUFBO0NBQ0EsUUFBQTtDQUNBLFlBQUE7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLHVCQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxpQkFBQTtDQUNBLGVBQUE7Q0FDQSx1QkFBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTs7Q0FFQSxjQUFBO0NBQ0E7QUFDQTtDQUNBLGlCQUFBO0NBQ0EsWUFBQTtDQUNBLFlBQUE7Q0FDQSxVQUFBO0NBQ0EsUUFBQTtDQUNBO0FBQ0E7Q0FDQSxpQkFBQTtDQUNBLFlBQUE7Q0FDQSxZQUFBO0NBQ0EsYUFBQTtDQUNBLFFBQUE7Q0FDQTtBQUNBO0NBQ0EsaUJBQUE7Q0FDQSxXQUFBO0NBQ0EsWUFBQTtDQUNBLE9BQUE7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLGlCQUFBO0NBQ0EsV0FBQTtDQUNBLFdBQUE7Q0FDQSxPQUFBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxrQkFBQTtDQUNBLFlBQUE7Q0FDQSxhQUFBO0NBQ0EsV0FBQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0Esa0JBQUE7Q0FDQSxXQUFBO0NBQ0EsWUFBQTtDQUNBLFdBQUE7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLGtCQUFBO0NBQ0EsV0FBQTtDQUNBLFlBQUE7Q0FDQSxXQUFBO0NBQ0EsVUFBQTtDQUNBO0FBQ0E7Q0FDQSxrQkFBQTtDQUNBLFdBQUE7Q0FDQSxZQUFBO0NBQ0EsWUFBQTtDQUNBLFVBQUE7Q0FDQTtBQUNBO0NBQ0EsdUJBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLGFBQUE7Q0FDQSx5QkFBQTtDQUNBO0FBQ0E7Q0FDQSx1QkFBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLGVBQUE7Q0FDQSxnQkFBQTtDQUNBLG1CQUFBO0NBQ0Esa0JBQUE7Q0FDQSw2QkFBQTtDQUNBLGNBQUEsQ0FBQSxrQkFBQTtDQUNBLGdCQUFBO0NBQ0E7QUFDQTtDQUNBLG9CQUFBO0NBQ0E7QUFDQTtDQUNBLG9CQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsV0FBQTtDQUNBLFNBQUE7Q0FDQSxpQkFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLGNBQUE7Q0FDQSxlQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsT0FBQTtDQUNBLFFBQUE7Q0FDQSxnQkFBQTtDQUNBO0FBQ0E7Q0FDQSxzQkFBQTtDQUNBLG1CQUFBO0NBQ0EsV0FBQTtDQUNBLG9CQUFBO0NBQ0EsbUJBQUE7Q0FDQSxnQkFBQTtDQUNBLHVCQUFBO0NBQ0EsbUJBQUE7Q0FDQSxrQkFBQSxDQUFBLCtCQUFBO0NBQ0E7QUFDQTs7Ozs7Q0FLQSxzQkFBQTtDQUNBO0FBQ0EsNkRBQUE7QUFDQTtDQUNBLGFBQUE7Q0FDQTtBQUNBLHNEQUFBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBOztBQUVBLHlCQUFBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0Esb0JBQUE7Q0FDQTtBQUNBO0NBQ0Esa0JBQUE7Q0FDQTtBQUNBOztDQUVBLGNBQUE7Q0FDQSx3QkFBQTtDQUNBO0FBQ0E7O0NBRUEsNkJBQUE7Q0FDQTtBQUNBOztDQUVBLDZCQUFBO0NBQ0E7QUFDQTtDQUNBLG9CQUFBO0NBQ0EscUJBQUE7Q0FDQTtBQUNBLG9FQUFBO0FBQ0E7Q0FDQSxrQkFBQTtDQUNBOztBQUVBLDRCQUFBO0FBQ0E7Ozs7O0NBS0EsbUJBQUE7Q0FDQSxTQUFBO0NBQ0EsaUJBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBLGtCQUFBO0NBQ0E7QUFDQTs7O0NBR0EsV0FBQTtDQUNBO0FBQ0E7OztDQUdBLFlBQUE7Q0FDQTs7QUFFQSxpQkFBQTtBQUNBO0NBQ0Esa0JBQUE7Q0FDQTtBQUNBO0NBQ0EsZUFBQTtDQUNBLG9CQUFBO0NBQ0E7O0FBRUEsaUJBQUE7QUFDQSxvREFBQTtBQUNBOztDQUVBLFVBQUE7Q0FDQSxXQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxxQkFBQTtDQUNBLGNBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxnQkFBQTtDQUNBO0FBQ0E7O0NBRUEsbUJBQUE7Q0FDQSxTQUFBO0NBQ0EsYUFBQTtDQUNBLGNBQUE7Q0FDQTtBQUNBOztDQUVBLFNBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBO0FBQ0E7Q0FDQSxXQUFBO0NBQ0E7QUFDQTtDQUNBLFVBQUE7Q0FDQTtBQUNBO0NBQ0EsV0FBQTtDQUNBO0FBQ0E7O0NBRUEsZUFBQTtDQUNBLG1CQUFBO0NBQ0EsVUFBQTtDQUNBLGtCQUFBO0NBQ0EsU0FBQTtDQUNBLGlCQUFBO0NBQ0E7QUFDQTtDQUNBLGdCQUFBO0NBQ0EsbUJBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0EsY0FBQTtDQUNBO0FBQ0E7O0NBRUEsV0FBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsZ0JBQUE7Q0FDQSwwQkFBQTtDQUNBLGlCQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsbUJBQUE7Q0FDQSxrQkFBQTtDQUNBLFVBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBLGFBQUE7Q0FDQTtBQUNBOztDQUVBLGVBQUE7Q0FDQSxjQUFBO0NBQ0Esa0JBQUE7Q0FDQSxzQkFBQTtDQUNBO0FBQ0E7Q0FDQSx1QkFBQTtDQUNBLG1CQUFBO0NBQ0EsZ0JBQUE7Q0FDQSxlQUFBO0NBQ0EsZ0JBQUE7Q0FDQSxpQkFBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0EsdUJBQUE7Q0FDQSxnQkFBQTtDQUNBLDZCQUFBO0NBQ0EsWUFBQTtDQUNBLGtCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQTs7QUFFQSw2QkFBQTtBQUNBO0NBQ0EsWUFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQSxvQkFBQTtDQUNBO0FBQ0E7Q0FDQSxXQUFBO0NBQ0E7QUFDQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsV0FBQTtDQUNBO0FBQ0E7O0NBRUEscUJBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsWUFBQTtDQUNBLGFBQUE7Q0FDQTs7QUFFQSxpQkFBQTtBQUNBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7Q0FDQSxXQUFBO0NBQ0EsV0FBQTtDQUNBO0FBQ0E7Q0FDQSxVQUFBO0NBQ0EsWUFBQTtDQUNBO0FBQ0E7Q0FDQSxXQUFBO0NBQ0EsV0FBQTtDQUNBO0FBQ0E7Q0FDQSxVQUFBO0NBQ0EsWUFBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQTtBQUNBOztDQUVBLGFBQUE7Q0FDQTtBQUNBOztDQUVBLHNCQUFBO0NBQ0EsdUJBQUE7Q0FDQTtBQUNBO0NBQ0EsaUJBQUE7Q0FDQSxtQkFBQTtDQUNBLE9BQUE7Q0FDQSxRQUFBO0NBQ0EsY0FBQTtDQUNBLFdBQUE7Q0FDQTtBQUNBO0NBQ0Esa0JBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsZUFBQTtDQUNBLG9CQUFBO0NBQ0EsV0FBQTtDQUNBLGlCQUFBO0NBQ0Esd0JBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxZQUFBO0NBQ0EsU0FBQTtDQUNBLFlBQUE7Q0FDQSxvQkFBQTtDQUNBLGFBQUE7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsVUFBQTtDQUNBLGtCQUFBO0NBQ0EsaUJBQUE7Q0FDQSxlQUFBO0NBQ0E7QUFDQTtDQUNBLGlCQUFBO0NBQ0Esd0JBQUE7Q0FDQSx1QkFBQTtDQUNBLGlCQUFBO0NBQ0EsNEJBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSx5QkFBQTtDQUNBLGdCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxhQUFBO0NBQ0EsWUFBQTtDQUNBLGFBQUE7Q0FDQSwrQkFBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLGlCQUFBO0NBQ0EsV0FBQTtDQUNBLFVBQUE7Q0FDQSxlQUFBO0NBQ0EsY0FBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLFVBQUE7Q0FDQSwwQkFBQTtDQUNBLGdCQUFBO0NBQ0EsY0FBQSxDQUFBLGtCQUFBO0NBQ0EsOEJBQUE7Q0FDQSx3R0FBQTtDQUNBO0FBQ0E7Q0FDQSxjQUFBO0NBQ0EsVUFBQTtDQUNBLGFBQUE7Q0FDQSxlQUFBO0NBQ0Esd0JBQUE7Q0FDQTtBQUNBOztDQUVBLGFBQUE7Q0FDQTs7QUFFQSxrQkFBQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0Esa0JBQUE7Q0FDQTs7QUFFQSxrQkFBQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxPQUFBO0NBQ0EsVUFBQTtDQUNBLFdBQUE7Q0FDQSxlQUFBO0NBQ0E7O0FBRUEsbUJBQUE7QUFDQTtDQUNBLFdBQUE7Q0FDQSxTQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxpQkFBQTtDQUNBLGlCQUFBO0NBQ0E7QUFDQTtDQUNBLGFBQUE7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLDB6RUFBQTtDQUNBLGFBQUE7Q0FDQSwwQkFBQSxDQUFBLGtCQUFBO0NBQ0EsY0FBQTtDQUNBO0FBQ0E7Q0FDQSx1QkFBQTtDQUNBO0FBQ0E7Q0FDQSxXQUFBO0NBQ0EsVUFBQTtDQUNBLG1CQUFBO0NBQ0EsT0FBQTtDQUNBLFFBQUE7Q0FDQSxjQUFBO0NBQ0E7QUFDQTtDQUNBLGVBQUE7Q0FDQSxrQkFBQTtDQUNBLG1CQUFBO0NBQ0Esb0JBQUE7Q0FDQTtBQUNBO0NBQ0EsZUFBQTtDQUNBLGtCQUFBO0NBQ0EsaUJBQUE7Q0FDQSxtQkFBQTtDQUNBLG9CQUFBO0NBQ0EsYUFBQTtDQUNBLFVBQUE7Q0FDQTtBQUNBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7Q0FDQSxzQkFBQTtDQUNBLGlCQUFBO0NBQ0EsbUJBQUE7Q0FDQSxzQkFBQTtDQUNBLGdCQUFBO0NBQ0E7QUFDQTtDQUNBLGFBQUE7Q0FDQSxXQUFBO0NBQ0EsaUJBQUE7Q0FDQSxtQkFBQTtDQUNBLFNBQUE7Q0FDQTtBQUNBO0NBQ0EsaUJBQUE7Q0FDQSwrQkFBQTtDQUNBLGVBQUE7Q0FDQSxpQkFBQTtDQUNBLGlCQUFBO0NBQ0Esd0JBQUE7Q0FDQSxvQkFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLGlCQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsV0FBQTtDQUNBLGFBQUE7Q0FDQSxjQUFBO0NBQ0EsZ0JBQUE7Q0FDQSx1QkFBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsV0FBQTtDQUNBLGdCQUFBO0NBQ0EsZUFBQTtDQUNBLFVBQUE7Q0FDQSx5QkFBQTtDQUNBOztBQUVBLDhCQUFBO0FBQ0E7O0NBRUEsd0JBQUE7U0FBQSxnQkFBQTtDQUNBOztBQUVBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxXQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsT0FBQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsUUFBQTtDQUNBO0FBQ0E7Q0FDQSxTQUFBO0NBQ0E7O0FBRUE7Q0FDQSxZQUFBO0NBQ0EsY0FBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsZUFBQTtDQUNBLHFCQUFBO0NBQ0E7QUFDQTtDQUNBLFFBQUE7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLFVBQUE7Q0FDQTtBQUNBO0NBQ0EsT0FBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLHNCQUFBO0NBQ0EsaUJBQUE7Q0FDQSxXQUFBO0NBQ0EsdUJBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBLGlCQUFBO0NBQ0EsZUFBQTtDQUNBLFdBQUE7Q0FDQSxlQUFBO0NBQ0EsdUJBQUE7Q0FDQSxrQkFBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxZQUFBO0NBQ0EsZ0JBQUE7Q0FDQSxXQUFBO0NBQ0EsVUFBQTtDQUNBLG1CQUFBO0NBQ0EsbUJBQUE7Q0FDQSxnQkFBQTtDQUNBLGVBQUE7Q0FDQSxpQkFBQTtDQUNBLFNBQUE7Q0FDQTtBQUNBLGdFQUFBO0FBQ0E7Q0FDQSxpQkFBQTtDQUNBLG9CQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBLDRCQUFBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLGlCQUFBO0NBQ0EsU0FBQTtDQUNBLFFBQUE7Q0FDQTtBQUNBO0NBQ0EsT0FBQTtDQUNBO0FBQ0E7Q0FDQSxVQUFBO0NBQ0E7O0FBRUEsa0JBQUE7QUFDQTtDQUNBLDhCQUFBO0NBQ0EsaUNBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUEsd0lBQUE7Q0FDQSxjQUFBO0NBQ0E7QUFDQTtDQUNBLFVBQUE7Q0FDQSxxQkFBQTtDQUNBO0FBQ0E7Q0FDQSxpQkFBQTtDQUNBLFlBQUE7Q0FDQSxtQkFBQTtDQUNBLE9BQUE7Q0FDQSxxQkFBQTtDQUNBLHVCQUFBO0NBQ0EsV0FBQTtDQUNBLG9CQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxrQkFBQTtDQUNBLHNCQUFBO0NBQ0E7QUFDQTtDQUNBLG9CQUFBO0NBQ0Esb0JBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLGdCQUFBO0NBQ0E7QUFDQTtDQUNBLGVBQUE7Q0FDQSxnQkFBQTtDQUNBLG1CQUFBO0NBQ0EsaUJBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBLG1CQUFBO0NBQ0EsY0FBQTtDQUNBLGlCQUFBO0NBRUEseUJBQUE7Q0FDQTtBQUNBO0NBQ0Esa0JBQUE7Q0FDQTs7QUNoMEJBOzs7Ozs7Ozs7OztHQVdBOzs7QUFHQTtvQ0FDQTtBQUNBO0NBQ0Esc0NBQUE7Q0FDQSxpQkFBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0E7QUFDQTs7OztDQUlBLHNDQUFBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7Q0FDQSwwQkFBQTtDQUNBLG9CQUFBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0E7QUFDQTtDQUNBLDBCQUFBO0NBQ0EsNEZBQUE7Q0FDQSxlQUFBO0NBQ0Esa0JBQUE7Q0FDQTtBQUNBO0NBQ0EsZUFBQTtDQUNBOztBQUVBO29DQUNBO0FBQ0E7OztDQUdBLDBCQUFBO0NBQ0EsbUZBQUE7Q0FDQSxvQkFBQTtDQUNBLGVBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxlQUFBO0NBQ0Esc0JBQUE7Q0FDQTtBQUNBOzs7Ozs7Q0FNQSwwQkFBQTtDQUNBLG1GQUFBO0NBQ0Esb0JBQUE7Q0FDQSxlQUFBO0NBQ0E7QUFDQTs7Ozs7Ozs7Q0FRQSxlQUFBO0NBQ0Esc0JBQUE7Q0FDQTtBQUNBOzs7Q0FHQSwwQkFBQTtDQUNBLG1GQUFBO0NBQ0Esb0JBQUE7Q0FDQSxlQUFBO0NBQ0E7QUFDQTs7O0NBR0EsZUFBQTtDQUNBLHNCQUFBO0NBQ0E7O0FBRUE7b0NBQ0E7QUFDQTs7O0NBR0EsMEJBQUE7Q0FDQSxtRkFBQTtDQUNBLGVBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxlQUFBO0NBQ0E7QUFDQTs7O0NBR0EsMEJBQUE7Q0FDQSxtRkFBQTtDQUNBLGVBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxlQUFBO0NBQ0E7QUFDQTs7O0NBR0EsZUFBQTtDQUNBO0FBQ0E7OztDQUdBLGtCQUFBO0NBQ0E7QUFDQTs7O0NBR0EsWUFBQTtDQUNBLHlCQUFBLENBQUEsa0JBQUE7Q0FDQSxvQkFBQTtDQUNBO0FBQ0E7OztDQUdBLGFBQUE7Q0FDQSx5QkFBQSxDQUFBLGtCQUFBO0NBQ0EsdUJBQUE7Q0FDQTtBQUNBO0NBQ0EseUJBQUEsQ0FBQSw4QkFBQTtDQUNBOztBQUVBO29DQUNBOztBQUVBLHVCQUFBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7O0NBRUEsNERBQUE7Q0FDQTtBQUNBO0NBQ0EsNERBQUE7Q0FDQTtBQUNBO0NBQ0EsNERBQUE7Q0FDQTtBQUNBOztDQUVBLDREQUFBO0NBQ0E7QUFDQTtDQUNBLDREQUFBO0NBQ0E7QUFDQTtDQUNBLDREQUFBO0NBQ0E7QUFDQTs7Q0FFQSw0REFBQTtDQUNBOztBQUVBLGlCQUFBO0FBQ0EsaUJBQUEsK0JBQUEsRUFBQTtBQUNBLHFCQUFBLHlCQUFBLEVBQUE7QUFDQSxzQkFBQSw2QkFBQSxFQUFBO0FBQ0EscUJBQUEsNkJBQUEsRUFBQTtBQUNBLHNCQUFBLDZCQUFBLEVBQUE7QUFDQSxxQkFBQSw2QkFBQSxFQUFBO0FBQ0Esc0JBQUEsNkJBQUEsRUFBQTtBQUNBLHFCQUFBLDZCQUFBLEVBQUE7QUFDQSxzQkFBQSw4QkFBQSxFQUFBO0FBQ0EsdUJBQUEsOEJBQUEsRUFBQTtBQUNBLHVCQUFBLDhCQUFBLEVBQUE7QUFDQSx3QkFBQSw2QkFBQSxFQUFBO0FBQ0EseUJBQUEsaUNBQUEsRUFBQTtBQUNBLHdCQUFBLGlDQUFBLEVBQUE7QUFDQSx5QkFBQSxpQ0FBQSxFQUFBO0FBQ0Esd0JBQUEsaUNBQUEsRUFBQTtBQUNBLHlCQUFBLGlDQUFBLEVBQUE7QUFDQSx3QkFBQSxpQ0FBQSxFQUFBO0FBQ0EseUJBQUEsa0NBQUEsRUFBQTtBQUNBLDBCQUFBLGtDQUFBLEVBQUE7QUFDQSwwQkFBQSxrQ0FBQSxFQUFBO0FBQ0EscUJBQUEsNkJBQUEsRUFBQTtBQUNBLHNCQUFBLGlDQUFBLEVBQUE7QUFDQSxxQkFBQSxpQ0FBQSxFQUFBO0FBQ0Esc0JBQUEsaUNBQUEsRUFBQTtBQUNBLHFCQUFBLGlDQUFBLEVBQUE7QUFDQSxzQkFBQSxpQ0FBQSxFQUFBO0FBQ0EscUJBQUEsaUNBQUEsRUFBQTtBQUNBLHNCQUFBLGtDQUFBLEVBQUE7QUFDQSx1QkFBQSxrQ0FBQSxFQUFBO0FBQ0EseUJBQUEsa0NBQUEsRUFBQTtBQUNBLHVCQUFBLGtDQUFBLEVBQUE7QUFDQSx5QkFBQSxrQ0FBQSxFQUFBO0FBQ0EseUJBQUEsa0NBQUEsRUFBQTtBQUNBLHlCQUFBLGtDQUFBLEVBQUE7QUFDQSx5QkFBQSxrQ0FBQSxFQUFBO0FBQ0EseUJBQUEsa0NBQUEsRUFBQTtBQUNBLDBCQUFBLDZCQUFBLEVBQUE7QUFDQSwyQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsMEJBQUEsaUNBQUEsRUFBQTtBQUNBLDJCQUFBLGlDQUFBLEVBQUE7QUFDQSwwQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsMkJBQUEsaUNBQUEsRUFBQTtBQUNBLDBCQUFBLGlDQUFBLEVBQUE7QUFDQSwyQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNEJBQUEsa0NBQUEsRUFBQTtBQUNBLDhCQUFBLGtDQUFBLEVBQUE7QUFDQSw0QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsOEJBQUEsa0NBQUEsRUFBQTtBQUNBLDhCQUFBLGtDQUFBLEVBQUE7QUFDQSw4QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsOEJBQUEsa0NBQUEsRUFBQTtBQUNBLDhCQUFBLGtDQUFBLEVBQUE7QUFDQSxnQ0FBQSw2QkFBQSxFQUFBO0FBQ0EsZ0NBQUEsaUNBQUEsRUFBQTtBQUNBLGdDQUFBLGlDQUFBLEVBQUE7QUFDQSxnQ0FBQSxpQ0FBQSxFQUFBO0FBQ0EsMkJBQUEsaUNBQUEsRUFBQTtBQUNBLDJCQUFBLGlDQUFBLEVBQUE7QUFDQSwyQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsMkJBQUEsa0NBQUEsRUFBQTtBQUNBLDRCQUFBLGtDQUFBLEVBQUE7QUFDQSw0QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNEJBQUEsa0NBQUEsRUFBQTtBQUNBLDRCQUFBLGtDQUFBLEVBQUE7QUFDQSxtQkFBQSw2QkFBQSxFQUFBO0FBQ0Esd0JBQUEsaUNBQUEsRUFBQTtBQUNBLG1CQUFBLGlDQUFBLEVBQUE7QUFDQSxrQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsbUJBQUEsaUNBQUEsRUFBQTtBQUNBLG1CQUFBLGlDQUFBLEVBQUE7QUFDQSx3QkFBQSxpQ0FBQSxFQUFBO0FBQ0EsNkJBQUEsa0NBQUEsRUFBQTtBQUNBLDRCQUFBLDZCQUFBLEVBQUE7QUFDQSx1QkFBQSxpQ0FBQSxFQUFBO0FBQ0Esb0JBQUEsaUNBQUEsRUFBQTtBQUNBLHNCQUFBLGlDQUFBLEVBQUE7QUFDQSxnQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsdUJBQUEsaUNBQUEsRUFBQTtBQUNBLHFCQUFBLGlDQUFBLEVBQUE7QUFDQSxvQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsbUJBQUEsa0NBQUEsRUFBQTtBQUNBLGtCQUFBLGtDQUFBLEVBQUE7QUFDQSxpQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsaUJBQUEsa0NBQUEsRUFBQTtBQUNBLGtCQUFBLGtDQUFBLEVBQUE7QUFDQSxvQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esb0JBQUEsa0NBQUEsRUFBQTtBQUNBLGVBQUEsa0NBQUEsRUFBQTtBQUNBLGdCQUFBLDhCQUFBLEVBQUE7QUFDQSxnQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esb0JBQUEsa0NBQUEsRUFBQTtBQUNBLGdCQUFBLGtDQUFBLEVBQUE7QUFDQSxrQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsaUJBQUEsa0NBQUEsRUFBQTtBQUNBLGdCQUFBLGtDQUFBLEVBQUE7QUFDQSxzQkFBQSxtQ0FBQSxFQUFBO0FBQ0Esa0JBQUEsbUNBQUEsRUFBQTtBQUNBLG1CQUFBLG1DQUFBLEVBQUE7QUFDQSxrQkFBQSxtQ0FBQSxFQUFBO0FBQ0Esa0JBQUEsbUNBQUEsRUFBQTtBQUNBLGdCQUFBLG1DQUFBLEVBQUE7QUFDQSxpQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsbUNBQUEsRUFBQTtBQUNBLGdCQUFBLG1DQUFBLEVBQUE7QUFDQSxrQkFBQSw4QkFBQSxFQUFBO0FBQ0EsZ0JBQUEsa0NBQUEsRUFBQTtBQUNBLHFCQUFBLGtDQUFBLEVBQUE7QUFDQSxpQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esc0JBQUEsa0NBQUEsRUFBQTtBQUNBLGlCQUFBLGtDQUFBLEVBQUE7QUFDQSxzQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsZUFBQSxtQ0FBQSxFQUFBO0FBQ0EscUJBQUEsbUNBQUEsRUFBQTtBQUNBLG9CQUFBLG1DQUFBLEVBQUE7QUFDQSxxQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsbUNBQUEsRUFBQTtBQUNBLG1CQUFBLG1DQUFBLEVBQUE7QUFDQSxpQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsaUJBQUEsbUNBQUEsRUFBQTtBQUNBLGtCQUFBLG1DQUFBLEVBQUE7QUFDQSxpQkFBQSw4QkFBQSxFQUFBO0FBQ0EsZ0JBQUEsa0NBQUEsRUFBQTtBQUNBLGtCQUFBLGtDQUFBLEVBQUE7QUFDQSxnQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsaUJBQUEsa0NBQUEsRUFBQTtBQUNBLGtCQUFBLGtDQUFBLEVBQUE7QUFDQSxvQkFBQSxrQ0FBQSxFQUFBO0FBQ0EscUJBQUEsbUNBQUEsRUFBQTtBQUNBLGlCQUFBLG1DQUFBLEVBQUE7QUFDQSxpQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsOEJBQUEsRUFBQTtBQUNBLGlCQUFBLGtDQUFBLEVBQUE7QUFDQSxxQkFBQSxrQ0FBQSxFQUFBO0FBQ0EscUJBQUEsa0NBQUEsRUFBQTtBQUNBLG9CQUFBLGtDQUFBLEVBQUE7QUFDQSxzQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esc0VBQUE7QUFDQSxzQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsa0NBQUEsRUFBQTtBQUNBLGlCQUFBLG1DQUFBLEVBQUE7QUFDQSxzQkFBQSxtQ0FBQSxFQUFBO0FBQ0EscUJBQUEsbUNBQUEsRUFBQTtBQUNBLGlCQUFBLDhCQUFBLEVBQUE7QUFDQSx1QkFBQSxrQ0FBQSxFQUFBO0FBQ0Esa0JBQUEsa0NBQUEsRUFBQTtBQUNBLHFCQUFBLGtDQUFBLEVBQUE7QUFDQSxxQkFBQSxrQ0FBQSxFQUFBO0FBQ0EscUJBQUEsa0NBQUEsRUFBQTtBQUNBLHFCQUFBLGtDQUFBLEVBQUE7QUFDQSx1QkFBQSw4QkFBQSxFQUFBO0FBQ0Esd0JBQUEsa0NBQUEsRUFBQTtBQUNBLHdCQUFBLGtDQUFBLEVBQUE7QUFDQSw2QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNkJBQUEsa0NBQUEsRUFBQTtBQUNBLDZCQUFBLGtDQUFBLEVBQUE7QUFDQSw2QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsMEJBQUEsbUNBQUEsRUFBQTtBQUNBLDBCQUFBLG1DQUFBLEVBQUE7QUFDQSwwQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsMEJBQUEsbUNBQUEsRUFBQTtBQUNBLHlCQUFBLG1DQUFBLEVBQUE7QUFDQSwwQkFBQSxtQ0FBQSxFQUFBO0FBQ0Esd0JBQUEsbUNBQUEsRUFBQTtBQUNBLDRCQUFBLDhCQUFBLEVBQUE7QUFDQSw2QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNkJBQUEsa0NBQUEsRUFBQTtBQUNBLDRCQUFBLGtDQUFBLEVBQUE7QUFDQSw2QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNkJBQUEsa0NBQUEsRUFBQTtBQUNBLGdDQUFBLDhCQUFBLEVBQUE7QUFDQSxrQ0FBQSxrQ0FBQSxFQUFBO0FBQ0EsK0JBQUEsa0NBQUEsRUFBQTtBQUNBLGlDQUFBLGtDQUFBLEVBQUE7QUFDQSxpQ0FBQSxrQ0FBQSxFQUFBO0FBQ0EsNEJBQUEsa0NBQUEsRUFBQTs7O0FBR0E7b0NBQ0E7O0FBRUEsbUJBQUE7QUFDQTs7OztDQUlBLDRCQUFBO0NBQ0E7QUFDQTs7OztDQUlBLDZCQUFBO0NBQ0E7QUFDQTs7OztDQUlBLCtCQUFBO0NBQ0E7QUFDQTs7OztDQUlBLGdDQUFBO0NBQ0E7O0FBRUEsY0FBQTtBQUNBO0NBQ0Esb0JBQUE7Q0FDQSxZQUFBO0NBQ0EsMEJBQUEsQ0FBQSxrQkFBQTtDQUNBO0FBQ0E7Q0FDQSxzQkFBQTtDQUNBLGFBQUE7Q0FDQSxvQkFBQTtDQUNBLFlBQUE7Q0FDQSwwQkFBQSxDQUFBLGtCQUFBO0NBQ0EsbUJBQUE7Q0FDQSIsImZpbGUiOiJqcXVlcnktdWkuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyohIGpRdWVyeSBVSSAtIHYxLjExLjQgLSAyMDE2LTAyLTA5XHJcbiogaHR0cDovL2pxdWVyeXVpLmNvbVxyXG4qIEluY2x1ZGVzOiBjb3JlLmNzcywgZHJhZ2dhYmxlLmNzcywgcmVzaXphYmxlLmNzcywgc2VsZWN0YWJsZS5jc3MsIHNvcnRhYmxlLmNzcywgYWNjb3JkaW9uLmNzcywgYXV0b2NvbXBsZXRlLmNzcywgYnV0dG9uLmNzcywgZGF0ZXBpY2tlci5jc3MsIGRpYWxvZy5jc3MsIG1lbnUuY3NzLCBwcm9ncmVzc2Jhci5jc3MsIHNlbGVjdG1lbnUuY3NzLCBzbGlkZXIuY3NzLCBzcGlubmVyLmNzcywgdGFicy5jc3MsIHRvb2x0aXAuY3NzLCB0aGVtZS5jc3NcclxuKiBUbyB2aWV3IGFuZCBtb2RpZnkgdGhpcyB0aGVtZSwgdmlzaXQgaHR0cDovL2pxdWVyeXVpLmNvbS90aGVtZXJvbGxlci8/ZmZEZWZhdWx0PVZlcmRhbmElMkNBcmlhbCUyQ3NhbnMtc2VyaWYmZndEZWZhdWx0PW5vcm1hbCZmc0RlZmF1bHQ9MS4xZW0mY29ybmVyUmFkaXVzPTRweCZiZ0NvbG9ySGVhZGVyPWNjY2NjYyZiZ1RleHR1cmVIZWFkZXI9aGlnaGxpZ2h0X3NvZnQmYmdJbWdPcGFjaXR5SGVhZGVyPTc1JmJvcmRlckNvbG9ySGVhZGVyPWFhYWFhYSZmY0hlYWRlcj0yMjIyMjImaWNvbkNvbG9ySGVhZGVyPTIyMjIyMiZiZ0NvbG9yQ29udGVudD1mZmZmZmYmYmdUZXh0dXJlQ29udGVudD1mbGF0JmJnSW1nT3BhY2l0eUNvbnRlbnQ9NzUmYm9yZGVyQ29sb3JDb250ZW50PWFhYWFhYSZmY0NvbnRlbnQ9MjIyMjIyJmljb25Db2xvckNvbnRlbnQ9MjIyMjIyJmJnQ29sb3JEZWZhdWx0PWU2ZTZlNiZiZ1RleHR1cmVEZWZhdWx0PWdsYXNzJmJnSW1nT3BhY2l0eURlZmF1bHQ9NzUmYm9yZGVyQ29sb3JEZWZhdWx0PWQzZDNkMyZmY0RlZmF1bHQ9NTU1NTU1Jmljb25Db2xvckRlZmF1bHQ9ODg4ODg4JmJnQ29sb3JIb3Zlcj1kYWRhZGEmYmdUZXh0dXJlSG92ZXI9Z2xhc3MmYmdJbWdPcGFjaXR5SG92ZXI9NzUmYm9yZGVyQ29sb3JIb3Zlcj05OTk5OTkmZmNIb3Zlcj0yMTIxMjEmaWNvbkNvbG9ySG92ZXI9NDU0NTQ1JmJnQ29sb3JBY3RpdmU9ZmZmZmZmJmJnVGV4dHVyZUFjdGl2ZT1nbGFzcyZiZ0ltZ09wYWNpdHlBY3RpdmU9NjUmYm9yZGVyQ29sb3JBY3RpdmU9YWFhYWFhJmZjQWN0aXZlPTIxMjEyMSZpY29uQ29sb3JBY3RpdmU9NDU0NTQ1JmJnQ29sb3JIaWdobGlnaHQ9ZmJmOWVlJmJnVGV4dHVyZUhpZ2hsaWdodD1nbGFzcyZiZ0ltZ09wYWNpdHlIaWdobGlnaHQ9NTUmYm9yZGVyQ29sb3JIaWdobGlnaHQ9ZmNlZmExJmZjSGlnaGxpZ2h0PTM2MzYzNiZpY29uQ29sb3JIaWdobGlnaHQ9MmU4M2ZmJmJnQ29sb3JFcnJvcj1mZWYxZWMmYmdUZXh0dXJlRXJyb3I9Z2xhc3MmYmdJbWdPcGFjaXR5RXJyb3I9OTUmYm9yZGVyQ29sb3JFcnJvcj1jZDBhMGEmZmNFcnJvcj1jZDBhMGEmaWNvbkNvbG9yRXJyb3I9Y2QwYTBhJmJnQ29sb3JPdmVybGF5PWFhYWFhYSZiZ1RleHR1cmVPdmVybGF5PWZsYXQmYmdJbWdPcGFjaXR5T3ZlcmxheT0wJm9wYWNpdHlPdmVybGF5PTMwJmJnQ29sb3JTaGFkb3c9YWFhYWFhJmJnVGV4dHVyZVNoYWRvdz1mbGF0JmJnSW1nT3BhY2l0eVNoYWRvdz0wJm9wYWNpdHlTaGFkb3c9MzAmdGhpY2tuZXNzU2hhZG93PThweCZvZmZzZXRUb3BTaGFkb3c9LThweCZvZmZzZXRMZWZ0U2hhZG93PS04cHgmY29ybmVyUmFkaXVzU2hhZG93PThweFxyXG4qIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzOyBMaWNlbnNlZCBNSVQgKi9cclxuXHJcbi8qIExheW91dCBoZWxwZXJzXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4udWktaGVscGVyLWhpZGRlbiB7XHJcblx0ZGlzcGxheTogbm9uZTtcclxufVxyXG4udWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIHtcclxuXHRib3JkZXI6IDA7XHJcblx0Y2xpcDogcmVjdCgwIDAgMCAwKTtcclxuXHRoZWlnaHQ6IDFweDtcclxuXHRtYXJnaW46IC0xcHg7XHJcblx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHRwYWRkaW5nOiAwO1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHR3aWR0aDogMXB4O1xyXG59XHJcbi51aS1oZWxwZXItcmVzZXQge1xyXG5cdG1hcmdpbjogMDtcclxuXHRwYWRkaW5nOiAwO1xyXG5cdGJvcmRlcjogMDtcclxuXHRvdXRsaW5lOiAwO1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjM7XHJcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG5cdGZvbnQtc2l6ZTogMTAwJTtcclxuXHRsaXN0LXN0eWxlOiBub25lO1xyXG59XHJcbi51aS1oZWxwZXItY2xlYXJmaXg6YmVmb3JlLFxyXG4udWktaGVscGVyLWNsZWFyZml4OmFmdGVyIHtcclxuXHRjb250ZW50OiBcIlwiO1xyXG5cdGRpc3BsYXk6IHRhYmxlO1xyXG5cdGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XHJcbn1cclxuLnVpLWhlbHBlci1jbGVhcmZpeDphZnRlciB7XHJcblx0Y2xlYXI6IGJvdGg7XHJcbn1cclxuLnVpLWhlbHBlci1jbGVhcmZpeCB7XHJcblx0bWluLWhlaWdodDogMDsgLyogc3VwcG9ydDogSUU3ICovXHJcbn1cclxuLnVpLWhlbHBlci16Zml4IHtcclxuXHR3aWR0aDogMTAwJTtcclxuXHRoZWlnaHQ6IDEwMCU7XHJcblx0dG9wOiAwO1xyXG5cdGxlZnQ6IDA7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdG9wYWNpdHk6IDA7XHJcblx0ZmlsdGVyOkFscGhhKE9wYWNpdHk9MCk7IC8qIHN1cHBvcnQ6IElFOCAqL1xyXG59XHJcblxyXG4udWktZnJvbnQge1xyXG5cdHotaW5kZXg6IDEwMDtcclxufVxyXG5cclxuXHJcbi8qIEludGVyYWN0aW9uIEN1ZXNcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbi51aS1zdGF0ZS1kaXNhYmxlZCB7XHJcblx0Y3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcblxyXG4vKiBJY29uc1xyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbi8qIHN0YXRlcyBhbmQgaW1hZ2VzICovXHJcbi51aS1pY29uIHtcclxuXHRkaXNwbGF5OiBibG9jaztcclxuXHR0ZXh0LWluZGVudDogLTk5OTk5cHg7XHJcblx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHRiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xyXG59XHJcblxyXG5cclxuLyogTWlzYyB2aXN1YWxzXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuLyogT3ZlcmxheXMgKi9cclxuLnVpLXdpZGdldC1vdmVybGF5IHtcclxuXHRwb3NpdGlvbjogZml4ZWQ7XHJcblx0dG9wOiAwO1xyXG5cdGxlZnQ6IDA7XHJcblx0d2lkdGg6IDEwMCU7XHJcblx0aGVpZ2h0OiAxMDAlO1xyXG59XHJcbi51aS1kcmFnZ2FibGUtaGFuZGxlIHtcclxuXHQtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xyXG5cdHRvdWNoLWFjdGlvbjogbm9uZTtcclxufVxyXG4udWktcmVzaXphYmxlIHtcclxuXHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcbn1cclxuLnVpLXJlc2l6YWJsZS1oYW5kbGUge1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRmb250LXNpemU6IDAuMXB4O1xyXG5cdGRpc3BsYXk6IGJsb2NrO1xyXG5cdC1tcy10b3VjaC1hY3Rpb246IG5vbmU7XHJcblx0dG91Y2gtYWN0aW9uOiBub25lO1xyXG59XHJcbi51aS1yZXNpemFibGUtZGlzYWJsZWQgLnVpLXJlc2l6YWJsZS1oYW5kbGUsXHJcbi51aS1yZXNpemFibGUtYXV0b2hpZGUgLnVpLXJlc2l6YWJsZS1oYW5kbGUge1xyXG5cdGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuLnVpLXJlc2l6YWJsZS1uIHtcclxuXHRjdXJzb3I6IG4tcmVzaXplO1xyXG5cdGhlaWdodDogN3B4O1xyXG5cdHdpZHRoOiAxMDAlO1xyXG5cdHRvcDogLTVweDtcclxuXHRsZWZ0OiAwO1xyXG59XHJcbi51aS1yZXNpemFibGUtcyB7XHJcblx0Y3Vyc29yOiBzLXJlc2l6ZTtcclxuXHRoZWlnaHQ6IDdweDtcclxuXHR3aWR0aDogMTAwJTtcclxuXHRib3R0b206IC01cHg7XHJcblx0bGVmdDogMDtcclxufVxyXG4udWktcmVzaXphYmxlLWUge1xyXG5cdGN1cnNvcjogZS1yZXNpemU7XHJcblx0d2lkdGg6IDdweDtcclxuXHRyaWdodDogLTVweDtcclxuXHR0b3A6IDA7XHJcblx0aGVpZ2h0OiAxMDAlO1xyXG59XHJcbi51aS1yZXNpemFibGUtdyB7XHJcblx0Y3Vyc29yOiB3LXJlc2l6ZTtcclxuXHR3aWR0aDogN3B4O1xyXG5cdGxlZnQ6IC01cHg7XHJcblx0dG9wOiAwO1xyXG5cdGhlaWdodDogMTAwJTtcclxufVxyXG4udWktcmVzaXphYmxlLXNlIHtcclxuXHRjdXJzb3I6IHNlLXJlc2l6ZTtcclxuXHR3aWR0aDogMTJweDtcclxuXHRoZWlnaHQ6IDEycHg7XHJcblx0cmlnaHQ6IDFweDtcclxuXHRib3R0b206IDFweDtcclxufVxyXG4udWktcmVzaXphYmxlLXN3IHtcclxuXHRjdXJzb3I6IHN3LXJlc2l6ZTtcclxuXHR3aWR0aDogOXB4O1xyXG5cdGhlaWdodDogOXB4O1xyXG5cdGxlZnQ6IC01cHg7XHJcblx0Ym90dG9tOiAtNXB4O1xyXG59XHJcbi51aS1yZXNpemFibGUtbncge1xyXG5cdGN1cnNvcjogbnctcmVzaXplO1xyXG5cdHdpZHRoOiA5cHg7XHJcblx0aGVpZ2h0OiA5cHg7XHJcblx0bGVmdDogLTVweDtcclxuXHR0b3A6IC01cHg7XHJcbn1cclxuLnVpLXJlc2l6YWJsZS1uZSB7XHJcblx0Y3Vyc29yOiBuZS1yZXNpemU7XHJcblx0d2lkdGg6IDlweDtcclxuXHRoZWlnaHQ6IDlweDtcclxuXHRyaWdodDogLTVweDtcclxuXHR0b3A6IC01cHg7XHJcbn1cclxuLnVpLXNlbGVjdGFibGUge1xyXG5cdC1tcy10b3VjaC1hY3Rpb246IG5vbmU7XHJcblx0dG91Y2gtYWN0aW9uOiBub25lO1xyXG59XHJcbi51aS1zZWxlY3RhYmxlLWhlbHBlciB7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdHotaW5kZXg6IDEwMDtcclxuXHRib3JkZXI6IDFweCBkb3R0ZWQgYmxhY2s7XHJcbn1cclxuLnVpLXNvcnRhYmxlLWhhbmRsZSB7XHJcblx0LW1zLXRvdWNoLWFjdGlvbjogbm9uZTtcclxuXHR0b3VjaC1hY3Rpb246IG5vbmU7XHJcbn1cclxuLnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWhlYWRlciB7XHJcblx0ZGlzcGxheTogYmxvY2s7XHJcblx0Y3Vyc29yOiBwb2ludGVyO1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHRtYXJnaW46IDJweCAwIDAgMDtcclxuXHRwYWRkaW5nOiAuNWVtIC41ZW0gLjVlbSAuN2VtO1xyXG5cdG1pbi1oZWlnaHQ6IDA7IC8qIHN1cHBvcnQ6IElFNyAqL1xyXG5cdGZvbnQtc2l6ZTogMTAwJTtcclxufVxyXG4udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taWNvbnMge1xyXG5cdHBhZGRpbmctbGVmdDogMi4yZW07XHJcbn1cclxuLnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWljb25zIC51aS1hY2NvcmRpb24taWNvbnMge1xyXG5cdHBhZGRpbmctbGVmdDogMi4yZW07XHJcbn1cclxuLnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWhlYWRlciAudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIHtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0bGVmdDogLjVlbTtcclxuXHR0b3A6IDUwJTtcclxuXHRtYXJnaW4tdG9wOiAtOHB4O1xyXG59XHJcbi51aS1hY2NvcmRpb24gLnVpLWFjY29yZGlvbi1jb250ZW50IHtcclxuXHRwYWRkaW5nOiAxZW0gMi4yZW07XHJcblx0Ym9yZGVyLXRvcDogMDtcclxuXHRvdmVyZmxvdzogYXV0bztcclxufVxyXG4udWktYXV0b2NvbXBsZXRlIHtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0dG9wOiAwO1xyXG5cdGxlZnQ6IDA7XHJcblx0Y3Vyc29yOiBkZWZhdWx0O1xyXG59XHJcbi51aS1idXR0b24ge1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0cGFkZGluZzogMDtcclxuXHRsaW5lLWhlaWdodDogbm9ybWFsO1xyXG5cdG1hcmdpbi1yaWdodDogLjFlbTtcclxuXHRjdXJzb3I6IHBvaW50ZXI7XHJcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0b3ZlcmZsb3c6IHZpc2libGU7IC8qIHJlbW92ZXMgZXh0cmEgd2lkdGggaW4gSUUgKi9cclxufVxyXG4udWktYnV0dG9uLFxyXG4udWktYnV0dG9uOmxpbmssXHJcbi51aS1idXR0b246dmlzaXRlZCxcclxuLnVpLWJ1dHRvbjpob3ZlcixcclxuLnVpLWJ1dHRvbjphY3RpdmUge1xyXG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxufVxyXG4vKiB0byBtYWtlIHJvb20gZm9yIHRoZSBpY29uLCBhIHdpZHRoIG5lZWRzIHRvIGJlIHNldCBoZXJlICovXHJcbi51aS1idXR0b24taWNvbi1vbmx5IHtcclxuXHR3aWR0aDogMi4yZW07XHJcbn1cclxuLyogYnV0dG9uIGVsZW1lbnRzIHNlZW0gdG8gbmVlZCBhIGxpdHRsZSBtb3JlIHdpZHRoICovXHJcbmJ1dHRvbi51aS1idXR0b24taWNvbi1vbmx5IHtcclxuXHR3aWR0aDogMi40ZW07XHJcbn1cclxuLnVpLWJ1dHRvbi1pY29ucy1vbmx5IHtcclxuXHR3aWR0aDogMy40ZW07XHJcbn1cclxuYnV0dG9uLnVpLWJ1dHRvbi1pY29ucy1vbmx5IHtcclxuXHR3aWR0aDogMy43ZW07XHJcbn1cclxuXHJcbi8qIGJ1dHRvbiB0ZXh0IGVsZW1lbnQgKi9cclxuLnVpLWJ1dHRvbiAudWktYnV0dG9uLXRleHQge1xyXG5cdGRpc3BsYXk6IGJsb2NrO1xyXG5cdGxpbmUtaGVpZ2h0OiBub3JtYWw7XHJcbn1cclxuLnVpLWJ1dHRvbi10ZXh0LW9ubHkgLnVpLWJ1dHRvbi10ZXh0IHtcclxuXHRwYWRkaW5nOiAuNGVtIDFlbTtcclxufVxyXG4udWktYnV0dG9uLWljb24tb25seSAudWktYnV0dG9uLXRleHQsXHJcbi51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLXRleHQge1xyXG5cdHBhZGRpbmc6IC40ZW07XHJcblx0dGV4dC1pbmRlbnQ6IC05OTk5OTk5cHg7XHJcbn1cclxuLnVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSAudWktYnV0dG9uLXRleHQsXHJcbi51aS1idXR0b24tdGV4dC1pY29ucyAudWktYnV0dG9uLXRleHQge1xyXG5cdHBhZGRpbmc6IC40ZW0gMWVtIC40ZW0gMi4xZW07XHJcbn1cclxuLnVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IC51aS1idXR0b24tdGV4dCxcclxuLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24tdGV4dCB7XHJcblx0cGFkZGluZzogLjRlbSAyLjFlbSAuNGVtIDFlbTtcclxufVxyXG4udWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWJ1dHRvbi10ZXh0IHtcclxuXHRwYWRkaW5nLWxlZnQ6IDIuMWVtO1xyXG5cdHBhZGRpbmctcmlnaHQ6IDIuMWVtO1xyXG59XHJcbi8qIG5vIGljb24gc3VwcG9ydCBmb3IgaW5wdXQgZWxlbWVudHMsIHByb3ZpZGUgcGFkZGluZyBieSBkZWZhdWx0ICovXHJcbmlucHV0LnVpLWJ1dHRvbiB7XHJcblx0cGFkZGluZzogLjRlbSAxZW07XHJcbn1cclxuXHJcbi8qIGJ1dHRvbiBpY29uIGVsZW1lbnQocykgKi9cclxuLnVpLWJ1dHRvbi1pY29uLW9ubHkgLnVpLWljb24sXHJcbi51aS1idXR0b24tdGV4dC1pY29uLXByaW1hcnkgLnVpLWljb24sXHJcbi51aS1idXR0b24tdGV4dC1pY29uLXNlY29uZGFyeSAudWktaWNvbixcclxuLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1pY29uLFxyXG4udWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWljb24ge1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHR0b3A6IDUwJTtcclxuXHRtYXJnaW4tdG9wOiAtOHB4O1xyXG59XHJcbi51aS1idXR0b24taWNvbi1vbmx5IC51aS1pY29uIHtcclxuXHRsZWZ0OiA1MCU7XHJcblx0bWFyZ2luLWxlZnQ6IC04cHg7XHJcbn1cclxuLnVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSAudWktYnV0dG9uLWljb24tcHJpbWFyeSxcclxuLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1wcmltYXJ5LFxyXG4udWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi1pY29uLXByaW1hcnkge1xyXG5cdGxlZnQ6IC41ZW07XHJcbn1cclxuLnVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksXHJcbi51aS1idXR0b24tdGV4dC1pY29ucyAudWktYnV0dG9uLWljb24tc2Vjb25kYXJ5LFxyXG4udWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi1pY29uLXNlY29uZGFyeSB7XHJcblx0cmlnaHQ6IC41ZW07XHJcbn1cclxuXHJcbi8qIGJ1dHRvbiBzZXRzICovXHJcbi51aS1idXR0b25zZXQge1xyXG5cdG1hcmdpbi1yaWdodDogN3B4O1xyXG59XHJcbi51aS1idXR0b25zZXQgLnVpLWJ1dHRvbiB7XHJcblx0bWFyZ2luLWxlZnQ6IDA7XHJcblx0bWFyZ2luLXJpZ2h0OiAtLjNlbTtcclxufVxyXG5cclxuLyogd29ya2Fyb3VuZHMgKi9cclxuLyogcmVzZXQgZXh0cmEgcGFkZGluZyBpbiBGaXJlZm94LCBzZWUgaDVicC5jb20vbCAqL1xyXG5pbnB1dC51aS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXHJcbmJ1dHRvbi51aS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIge1xyXG5cdGJvcmRlcjogMDtcclxuXHRwYWRkaW5nOiAwO1xyXG59XHJcbi51aS1kYXRlcGlja2VyIHtcclxuXHR3aWR0aDogMTdlbTtcclxuXHRwYWRkaW5nOiAuMmVtIC4yZW0gMDtcclxuXHRkaXNwbGF5OiBub25lO1xyXG59XHJcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWhlYWRlciB7XHJcblx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdHBhZGRpbmc6IC4yZW0gMDtcclxufVxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LFxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0IHtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0dG9wOiAycHg7XHJcblx0d2lkdGg6IDEuOGVtO1xyXG5cdGhlaWdodDogMS44ZW07XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlcixcclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlciB7XHJcblx0dG9wOiAxcHg7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldiB7XHJcblx0bGVmdDogMnB4O1xyXG59XHJcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQge1xyXG5cdHJpZ2h0OiAycHg7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciB7XHJcblx0bGVmdDogMXB4O1xyXG59XHJcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXIge1xyXG5cdHJpZ2h0OiAxcHg7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldiBzcGFuLFxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0IHNwYW4ge1xyXG5cdGRpc3BsYXk6IGJsb2NrO1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRsZWZ0OiA1MCU7XHJcblx0bWFyZ2luLWxlZnQ6IC04cHg7XHJcblx0dG9wOiA1MCU7XHJcblx0bWFyZ2luLXRvcDogLThweDtcclxufVxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci10aXRsZSB7XHJcblx0bWFyZ2luOiAwIDIuM2VtO1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjhlbTtcclxuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItdGl0bGUgc2VsZWN0IHtcclxuXHRmb250LXNpemU6IDFlbTtcclxuXHRtYXJnaW46IDFweCAwO1xyXG59XHJcbi51aS1kYXRlcGlja2VyIHNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLFxyXG4udWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIHtcclxuXHR3aWR0aDogNDUlO1xyXG59XHJcbi51aS1kYXRlcGlja2VyIHRhYmxlIHtcclxuXHR3aWR0aDogMTAwJTtcclxuXHRmb250LXNpemU6IC45ZW07XHJcblx0Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcclxuXHRtYXJnaW46IDAgMCAuNGVtO1xyXG59XHJcbi51aS1kYXRlcGlja2VyIHRoIHtcclxuXHRwYWRkaW5nOiAuN2VtIC4zZW07XHJcblx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdGJvcmRlcjogMDtcclxufVxyXG4udWktZGF0ZXBpY2tlciB0ZCB7XHJcblx0Ym9yZGVyOiAwO1xyXG5cdHBhZGRpbmc6IDFweDtcclxufVxyXG4udWktZGF0ZXBpY2tlciB0ZCBzcGFuLFxyXG4udWktZGF0ZXBpY2tlciB0ZCBhIHtcclxuXHRkaXNwbGF5OiBibG9jaztcclxuXHRwYWRkaW5nOiAuMmVtO1xyXG5cdHRleHQtYWxpZ246IHJpZ2h0O1xyXG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxufVxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHtcclxuXHRiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xyXG5cdG1hcmdpbjogLjdlbSAwIDAgMDtcclxuXHRwYWRkaW5nOiAwIC4yZW07XHJcblx0Ym9yZGVyLWxlZnQ6IDA7XHJcblx0Ym9yZGVyLXJpZ2h0OiAwO1xyXG5cdGJvcmRlci1ib3R0b206IDA7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24ge1xyXG5cdGZsb2F0OiByaWdodDtcclxuXHRtYXJnaW46IC41ZW0gLjJlbSAuNGVtO1xyXG5cdGN1cnNvcjogcG9pbnRlcjtcclxuXHRwYWRkaW5nOiAuMmVtIC42ZW0gLjNlbSAuNmVtO1xyXG5cdHdpZHRoOiBhdXRvO1xyXG5cdG92ZXJmbG93OiB2aXNpYmxlO1xyXG59XHJcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudCB7XHJcblx0ZmxvYXQ6IGxlZnQ7XHJcbn1cclxuXHJcbi8qIHdpdGggbXVsdGlwbGUgY2FsZW5kYXJzICovXHJcbi51aS1kYXRlcGlja2VyLnVpLWRhdGVwaWNrZXItbXVsdGkge1xyXG5cdHdpZHRoOiBhdXRvO1xyXG59XHJcbi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwIHtcclxuXHRmbG9hdDogbGVmdDtcclxufVxyXG4udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cCB0YWJsZSB7XHJcblx0d2lkdGg6IDk1JTtcclxuXHRtYXJnaW46IDAgYXV0byAuNGVtO1xyXG59XHJcbi51aS1kYXRlcGlja2VyLW11bHRpLTIgLnVpLWRhdGVwaWNrZXItZ3JvdXAge1xyXG5cdHdpZHRoOiA1MCU7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItbXVsdGktMyAudWktZGF0ZXBpY2tlci1ncm91cCB7XHJcblx0d2lkdGg6IDMzLjMlO1xyXG59XHJcbi51aS1kYXRlcGlja2VyLW11bHRpLTQgLnVpLWRhdGVwaWNrZXItZ3JvdXAge1xyXG5cdHdpZHRoOiAyNSU7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCAudWktZGF0ZXBpY2tlci1oZWFkZXIsXHJcbi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXIge1xyXG5cdGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xyXG59XHJcbi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUge1xyXG5cdGNsZWFyOiBsZWZ0O1xyXG59XHJcbi51aS1kYXRlcGlja2VyLXJvdy1icmVhayB7XHJcblx0Y2xlYXI6IGJvdGg7XHJcblx0d2lkdGg6IDEwMCU7XHJcblx0Zm9udC1zaXplOiAwO1xyXG59XHJcblxyXG4vKiBSVEwgc3VwcG9ydCAqL1xyXG4udWktZGF0ZXBpY2tlci1ydGwge1xyXG5cdGRpcmVjdGlvbjogcnRsO1xyXG59XHJcbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1wcmV2IHtcclxuXHRyaWdodDogMnB4O1xyXG5cdGxlZnQ6IGF1dG87XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHQge1xyXG5cdGxlZnQ6IDJweDtcclxuXHRyaWdodDogYXV0bztcclxufVxyXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldjpob3ZlciB7XHJcblx0cmlnaHQ6IDFweDtcclxuXHRsZWZ0OiBhdXRvO1xyXG59XHJcbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1uZXh0OmhvdmVyIHtcclxuXHRsZWZ0OiAxcHg7XHJcblx0cmlnaHQ6IGF1dG87XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUge1xyXG5cdGNsZWFyOiByaWdodDtcclxufVxyXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24ge1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG59XHJcbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbi51aS1kYXRlcGlja2VyLWN1cnJlbnQsXHJcbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cCB7XHJcblx0ZmxvYXQ6IHJpZ2h0O1xyXG59XHJcbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IC51aS1kYXRlcGlja2VyLWhlYWRlcixcclxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXIge1xyXG5cdGJvcmRlci1yaWdodC13aWR0aDogMDtcclxuXHRib3JkZXItbGVmdC13aWR0aDogMXB4O1xyXG59XHJcbi51aS1kaWFsb2cge1xyXG5cdG92ZXJmbG93OiBoaWRkZW47XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdHRvcDogMDtcclxuXHRsZWZ0OiAwO1xyXG5cdHBhZGRpbmc6IC4yZW07XHJcblx0b3V0bGluZTogMDtcclxufVxyXG4udWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGViYXIge1xyXG5cdHBhZGRpbmc6IC40ZW0gMWVtO1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG4udWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGUge1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdG1hcmdpbjogLjFlbSAwO1xyXG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcblx0d2lkdGg6IDkwJTtcclxuXHRvdmVyZmxvdzogaGlkZGVuO1xyXG5cdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG59XHJcbi51aS1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSB7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdHJpZ2h0OiAuM2VtO1xyXG5cdHRvcDogNTAlO1xyXG5cdHdpZHRoOiAyMHB4O1xyXG5cdG1hcmdpbjogLTEwcHggMCAwIDA7XHJcblx0cGFkZGluZzogMXB4O1xyXG5cdGhlaWdodDogMjBweDtcclxufVxyXG4udWktZGlhbG9nIC51aS1kaWFsb2ctY29udGVudCB7XHJcblx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdGJvcmRlcjogMDtcclxuXHRwYWRkaW5nOiAuNWVtIDFlbTtcclxuXHRiYWNrZ3JvdW5kOiBub25lO1xyXG5cdG92ZXJmbG93OiBhdXRvO1xyXG59XHJcbi51aS1kaWFsb2cgLnVpLWRpYWxvZy1idXR0b25wYW5lIHtcclxuXHR0ZXh0LWFsaWduOiBsZWZ0O1xyXG5cdGJvcmRlci13aWR0aDogMXB4IDAgMCAwO1xyXG5cdGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XHJcblx0bWFyZ2luLXRvcDogLjVlbTtcclxuXHRwYWRkaW5nOiAuM2VtIDFlbSAuNWVtIC40ZW07XHJcbn1cclxuLnVpLWRpYWxvZyAudWktZGlhbG9nLWJ1dHRvbnBhbmUgLnVpLWRpYWxvZy1idXR0b25zZXQge1xyXG5cdGZsb2F0OiByaWdodDtcclxufVxyXG4udWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZSBidXR0b24ge1xyXG5cdG1hcmdpbjogLjVlbSAuNGVtIC41ZW0gMDtcclxuXHRjdXJzb3I6IHBvaW50ZXI7XHJcbn1cclxuLnVpLWRpYWxvZyAudWktcmVzaXphYmxlLXNlIHtcclxuXHR3aWR0aDogMTJweDtcclxuXHRoZWlnaHQ6IDEycHg7XHJcblx0cmlnaHQ6IC01cHg7XHJcblx0Ym90dG9tOiAtNXB4O1xyXG5cdGJhY2tncm91bmQtcG9zaXRpb246IDE2cHggMTZweDtcclxufVxyXG4udWktZHJhZ2dhYmxlIC51aS1kaWFsb2ctdGl0bGViYXIge1xyXG5cdGN1cnNvcjogbW92ZTtcclxufVxyXG4udWktbWVudSB7XHJcblx0bGlzdC1zdHlsZTogbm9uZTtcclxuXHRwYWRkaW5nOiAwO1xyXG5cdG1hcmdpbjogMDtcclxuXHRkaXNwbGF5OiBibG9jaztcclxuXHRvdXRsaW5lOiBub25lO1xyXG59XHJcbi51aS1tZW51IC51aS1tZW51IHtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcbn1cclxuLnVpLW1lbnUgLnVpLW1lbnUtaXRlbSB7XHJcblx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdG1hcmdpbjogMDtcclxuXHRwYWRkaW5nOiAzcHggMWVtIDNweCAuNGVtO1xyXG5cdGN1cnNvcjogcG9pbnRlcjtcclxuXHRtaW4taGVpZ2h0OiAwOyAvKiBzdXBwb3J0OiBJRTcgKi9cclxuXHQvKiBzdXBwb3J0OiBJRTEwLCBzZWUgIzg4NDQgKi9cclxuXHRsaXN0LXN0eWxlLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBQUFBUC8vL3lINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQlJBQTdcIik7XHJcbn1cclxuLnVpLW1lbnUgLnVpLW1lbnUtZGl2aWRlciB7XHJcblx0bWFyZ2luOiA1cHggMDtcclxuXHRoZWlnaHQ6IDA7XHJcblx0Zm9udC1zaXplOiAwO1xyXG5cdGxpbmUtaGVpZ2h0OiAwO1xyXG5cdGJvcmRlci13aWR0aDogMXB4IDAgMCAwO1xyXG59XHJcbi51aS1tZW51IC51aS1zdGF0ZS1mb2N1cyxcclxuLnVpLW1lbnUgLnVpLXN0YXRlLWFjdGl2ZSB7XHJcblx0bWFyZ2luOiAtMXB4O1xyXG59XHJcblxyXG4vKiBpY29uIHN1cHBvcnQgKi9cclxuLnVpLW1lbnUtaWNvbnMge1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG4udWktbWVudS1pY29ucyAudWktbWVudS1pdGVtIHtcclxuXHRwYWRkaW5nLWxlZnQ6IDJlbTtcclxufVxyXG5cclxuLyogbGVmdC1hbGlnbmVkICovXHJcbi51aS1tZW51IC51aS1pY29uIHtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0dG9wOiAwO1xyXG5cdGJvdHRvbTogMDtcclxuXHRsZWZ0OiAuMmVtO1xyXG5cdG1hcmdpbjogYXV0byAwO1xyXG59XHJcblxyXG4vKiByaWdodC1hbGlnbmVkICovXHJcbi51aS1tZW51IC51aS1tZW51LWljb24ge1xyXG5cdGxlZnQ6IGF1dG87XHJcblx0cmlnaHQ6IDA7XHJcbn1cclxuLnVpLXByb2dyZXNzYmFyIHtcclxuXHRoZWlnaHQ6IDJlbTtcclxuXHR0ZXh0LWFsaWduOiBsZWZ0O1xyXG5cdG92ZXJmbG93OiBoaWRkZW47XHJcbn1cclxuLnVpLXByb2dyZXNzYmFyIC51aS1wcm9ncmVzc2Jhci12YWx1ZSB7XHJcblx0bWFyZ2luOiAtMXB4O1xyXG5cdGhlaWdodDogMTAwJTtcclxufVxyXG4udWktcHJvZ3Jlc3NiYXIgLnVpLXByb2dyZXNzYmFyLW92ZXJsYXkge1xyXG5cdGJhY2tncm91bmQ6IHVybChcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEtBQW9BSUFCQUFBQUFQLy8veUgvQzA1RlZGTkRRVkJGTWk0d0F3RUFBQUFoK1FRSkFRQUJBQ3dBQUFBQUtBQW9BQUFDa1l3TnFYcmRDNTJEUzA2YTdNRlpJKzRGSEJDS29EZVdLWHF5bVBxR3F4dkpyWFpiTXg3VHRjK3c5WGdVMkZCM2xPeVFSV0VUMklGR2lVOW0xZnJEVnB4WlpjNmJmSHd2NGMxWVhQNmsxVmR5MjkyRmI2VWt1dkZ0WHB2V1N6QStIeWNYSkhVWGlHWUlpTWcyUjZXNDU5Z25XR2ZITmRqSXFEV1ZxZW1IMmVrcE9ia3BPbHBwV1VxWmlxcjZlZHFxV1FBQUlma0VDUUVBQVFBc0FBQUFBQ2dBS0FBQUFwU01nWm5HZmFxY2cxRTJ1dXpEbW1IVUJSOFFpbDk1aGlQS3FXbjNhcXRMc1MxOHk3RzFTek5lb3dXQkVOdFFkK1QxSmt0UDA1bnpQVGRKWmxSNnZVeE5XV2pWK3ZVV2hXTmtXRnd4bDlWcFpSZWRZY2ZsSU9MYWZhYTI4WGRzSC95bmxjYzF1UFZEWnhRSVIwSzI1K2NJQ0Ntb3FDZTVtR2haT2ZlWVNVaDV5SmNKeXJrWldXcGFSOGRvSjJvNE5ZcTYybEFBQUNINUJBa0JBQUVBTEFBQUFBQW9BQ2dBQUFLVkRJNFl5MjJabklOUk5xb3N3MEJ2N2kxZ3lIVWtGajdvU2FXbHUzb3ZDOEd4TnNvNWZsdXozcUxWaEJWZVQvTHo3WlRIeXhMNWREYWxRV1BWT3NRV3RSbnV3WGFGVGo5alZWaDhwbWE5SmpaNHpZU2o1Wk95bWE3dXVvbGZmaCtJUjVhVzk3Y0h1QlVYS0dLWGxLam4rRGlIV01jWUphaDROMGxZQ01sSk9YaXBHUnI1cWRnb1NUcnFXU3E2V0ZsMnlwb2FVQUFBSWZrRUNRRUFBUUFzQUFBQUFDZ0FLQUFBQXBhRWI2SExnZC9pTzdGTld0Y0ZXZSt1Zk9ER2pSZm9pSjJha1NoYnVlYjB3dEk1MHptMDJwYnZ3ZldFTVdCUTF6S0dsTEloc2tpRVBtOVI2dlJYeFY0WnpXVDJ5SE9HcFdNeW9yYmxLbE5wOEhtSEViL2xDWGpjVzdibXRYUDhYdDIyOU9WV1IxZm9kMmVXcU5mSHVNalhDUGtJR05pbGVPaUltVm1DT0Vtb1NmbjN5WGxKV21vSEdocXA2aWxZdVdZcG1UcUtVZ0FBSWZrRUNRRUFBUUFzQUFBQUFDZ0FLQUFBQXBpRUg2a2I1OGJpUTNGTld0TUZXVzNlTlZjb2p1RkdmcW5acVNlYnVTMDZ3NVY4MC9YMDJwS2U4ekZ3UDZFRldPVDFsREZrOHJHRVJoMVRUTk9vY1E2MUhtNFhtMlZleFVIcHpqeW1WaUhyRmJpRUxzZWZWcm42WEtmbnQyUTlHLytYZGllNDk5WEhkMmc0aDdpb09HaFhHSmJvR0FuWFNCbm9Cd0tZeWZpb3ViWkoySG4wUnVSWmFmbFpPaWw1NlpwNmlpb0tTWHBVQUFBaCtRUUpBUUFCQUN3QUFBQUFLQUFvQUFBQ2tvUVJxUnZueHVJN2tVMWExVVU1YmQ1dG5TZU9aWGhtbjVsV0szcU5UV3ZSZFF4UDhxdmFDKy95YVlRelhPN0JNdmFVRW1KUmQzVHNpTUFnc3dtTllyU2daZFlyVFg2dFNIR1pPNzNlenVBdzJ1eHVRK0JiZVpmTXhzZXhZMzUrL1FlNEoxaW5WMGc0eDNXSHVNaElsMmpYT0tUMlErVlU1ZmdvU1VJNTJWZlp5ZmtKR2toYTZqbVkrYWFZZGlycStsUUFBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtXQklLcFllMEwzWU5LVG9xc3dVbHZ6bmlnZDR3aVI0S2hackt0OVVwcWlwNjFpOUUzdk12eFJkSGxiRUZpRVhmazlZQVJZeE9aWkQ2VlEycFV1bkJtdFJYbzFMZjhoTVZWY05sOEphZlYzOGFNMi9GdTVWMTZCbjYzcjZ4dDk3ajA5K01YU0ZpNEJuaUdGYWUzaHpiSDkraFlCemtwdVVoNWFabUh1YW5aT1pnSXV2YkdpTmVvbUNuYXh4YXAydXBhQ1pzcSsxa0FBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtYakk4Qnk1emY0a094VFZyWE5WbHYxWDBkOElHWkdLTG5OcFl0bThMcjljcVZldU9TdmZPVzc5RDlhREhpek5oREppZEZaaE55ZEVhaE9hREg2bm9tdEpqcDF0dXRLb05Xa3ZBNkpxZlJWTEhVL1FVZmF1OWwyeDdHNTRkMWZsOTk1eGNJR0FkWHFNZkJOYWRvWXJoSCtNZzJLQmxwVnBibHVDaVhtTW5aMlNoNEdCcUorY2tJT3FxSjZMbUtTbGxabXNvcTZ3cFFBQUFoK1FRSkFRQUJBQ3dBQUFBQUtBQW9BQUFDbFl4L29Mdm94dUpEa1UxYTFZVVpiSjU5blNkMlpYaFdxYlJhMi9nRjhHdTJEWTNpcXM3eXJxK3hCWUVrWXZGU004YVNTT2JFK1pnUmwxQkhGWk5yN3BSQ2F2WjVCVzIxNDJoWTNBTi96V3RzbWYxMnA5WHh4RmwybHBMbjFyc2V6dGZYWmpkSVdJZjJzNWRJdHdqWUtCZ285eWc1cEhnekpYVEVlR2xadWVucHlQbXBHUW9LT1drWW1TcGFTbnFLaWxlSTJGQUFBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtWakIrZ3Urakc0a09SVFZyVmhSbHNubjJkSjNabGVGYXB0RnJiK0NYbU85T296ZUw1VmZQOTlIdkFXaHBpVWRjd2twQkgzODI1QXdZZFU4eFRxbExHaHRDb3NBcktNcHZmYTFtTVJhZTlWdldaZmVCMlhmUGtlTG1tMThsVWNCaitwNWRuTjhqWFozWUlHRWhZdU9VbjQ1YW9DRGtwMTZobDVJallKdmpXS2Nub0dRcHF5UGxwT2hyM2FFbGFxcnE1NkJxN1ZBQUFPdz09XCIpO1xyXG5cdGhlaWdodDogMTAwJTtcclxuXHRmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MjUpOyAvKiBzdXBwb3J0OiBJRTggKi9cclxuXHRvcGFjaXR5OiAwLjI1O1xyXG59XHJcbi51aS1wcm9ncmVzc2Jhci1pbmRldGVybWluYXRlIC51aS1wcm9ncmVzc2Jhci12YWx1ZSB7XHJcblx0YmFja2dyb3VuZC1pbWFnZTogbm9uZTtcclxufVxyXG4udWktc2VsZWN0bWVudS1tZW51IHtcclxuXHRwYWRkaW5nOiAwO1xyXG5cdG1hcmdpbjogMDtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0dG9wOiAwO1xyXG5cdGxlZnQ6IDA7XHJcblx0ZGlzcGxheTogbm9uZTtcclxufVxyXG4udWktc2VsZWN0bWVudS1tZW51IC51aS1tZW51IHtcclxuXHRvdmVyZmxvdzogYXV0bztcclxuXHQvKiBTdXBwb3J0OiBJRTcgKi9cclxuXHRvdmVyZmxvdy14OiBoaWRkZW47XHJcblx0cGFkZGluZy1ib3R0b206IDFweDtcclxufVxyXG4udWktc2VsZWN0bWVudS1tZW51IC51aS1tZW51IC51aS1zZWxlY3RtZW51LW9wdGdyb3VwIHtcclxuXHRmb250LXNpemU6IDFlbTtcclxuXHRmb250LXdlaWdodDogYm9sZDtcclxuXHRsaW5lLWhlaWdodDogMS41O1xyXG5cdHBhZGRpbmc6IDJweCAwLjRlbTtcclxuXHRtYXJnaW46IDAuNWVtIDAgMCAwO1xyXG5cdGhlaWdodDogYXV0bztcclxuXHRib3JkZXI6IDA7XHJcbn1cclxuLnVpLXNlbGVjdG1lbnUtb3BlbiB7XHJcblx0ZGlzcGxheTogYmxvY2s7XHJcbn1cclxuLnVpLXNlbGVjdG1lbnUtYnV0dG9uIHtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG5cdGN1cnNvcjogcG9pbnRlcjtcclxufVxyXG4udWktc2VsZWN0bWVudS1idXR0b24gc3Bhbi51aS1pY29uIHtcclxuXHRyaWdodDogMC41ZW07XHJcblx0bGVmdDogYXV0bztcclxuXHRtYXJnaW4tdG9wOiAtOHB4O1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHR0b3A6IDUwJTtcclxufVxyXG4udWktc2VsZWN0bWVudS1idXR0b24gc3Bhbi51aS1zZWxlY3RtZW51LXRleHQge1xyXG5cdHRleHQtYWxpZ246IGxlZnQ7XHJcblx0cGFkZGluZzogMC40ZW0gMi4xZW0gMC40ZW0gMWVtO1xyXG5cdGRpc3BsYXk6IGJsb2NrO1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjQ7XHJcblx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHR0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcclxuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG59XHJcbi51aS1zbGlkZXIge1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHR0ZXh0LWFsaWduOiBsZWZ0O1xyXG59XHJcbi51aS1zbGlkZXIgLnVpLXNsaWRlci1oYW5kbGUge1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHR6LWluZGV4OiAyO1xyXG5cdHdpZHRoOiAxLjJlbTtcclxuXHRoZWlnaHQ6IDEuMmVtO1xyXG5cdGN1cnNvcjogZGVmYXVsdDtcclxuXHQtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xyXG5cdHRvdWNoLWFjdGlvbjogbm9uZTtcclxufVxyXG4udWktc2xpZGVyIC51aS1zbGlkZXItcmFuZ2Uge1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHR6LWluZGV4OiAxO1xyXG5cdGZvbnQtc2l6ZTogLjdlbTtcclxuXHRkaXNwbGF5OiBibG9jaztcclxuXHRib3JkZXI6IDA7XHJcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xyXG59XHJcblxyXG4vKiBzdXBwb3J0OiBJRTggLSBTZWUgIzY3MjcgKi9cclxuLnVpLXNsaWRlci51aS1zdGF0ZS1kaXNhYmxlZCAudWktc2xpZGVyLWhhbmRsZSxcclxuLnVpLXNsaWRlci51aS1zdGF0ZS1kaXNhYmxlZCAudWktc2xpZGVyLXJhbmdlIHtcclxuXHRmaWx0ZXI6IGluaGVyaXQ7XHJcbn1cclxuXHJcbi51aS1zbGlkZXItaG9yaXpvbnRhbCB7XHJcblx0aGVpZ2h0OiAuOGVtO1xyXG59XHJcbi51aS1zbGlkZXItaG9yaXpvbnRhbCAudWktc2xpZGVyLWhhbmRsZSB7XHJcblx0dG9wOiAtLjNlbTtcclxuXHRtYXJnaW4tbGVmdDogLS42ZW07XHJcbn1cclxuLnVpLXNsaWRlci1ob3Jpem9udGFsIC51aS1zbGlkZXItcmFuZ2Uge1xyXG5cdHRvcDogMDtcclxuXHRoZWlnaHQ6IDEwMCU7XHJcbn1cclxuLnVpLXNsaWRlci1ob3Jpem9udGFsIC51aS1zbGlkZXItcmFuZ2UtbWluIHtcclxuXHRsZWZ0OiAwO1xyXG59XHJcbi51aS1zbGlkZXItaG9yaXpvbnRhbCAudWktc2xpZGVyLXJhbmdlLW1heCB7XHJcblx0cmlnaHQ6IDA7XHJcbn1cclxuXHJcbi51aS1zbGlkZXItdmVydGljYWwge1xyXG5cdHdpZHRoOiAuOGVtO1xyXG5cdGhlaWdodDogMTAwcHg7XHJcbn1cclxuLnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLWhhbmRsZSB7XHJcblx0bGVmdDogLS4zZW07XHJcblx0bWFyZ2luLWxlZnQ6IDA7XHJcblx0bWFyZ2luLWJvdHRvbTogLS42ZW07XHJcbn1cclxuLnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLXJhbmdlIHtcclxuXHRsZWZ0OiAwO1xyXG5cdHdpZHRoOiAxMDAlO1xyXG59XHJcbi51aS1zbGlkZXItdmVydGljYWwgLnVpLXNsaWRlci1yYW5nZS1taW4ge1xyXG5cdGJvdHRvbTogMDtcclxufVxyXG4udWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItcmFuZ2UtbWF4IHtcclxuXHR0b3A6IDA7XHJcbn1cclxuLnVpLXNwaW5uZXIge1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHRwYWRkaW5nOiAwO1xyXG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbn1cclxuLnVpLXNwaW5uZXItaW5wdXQge1xyXG5cdGJvcmRlcjogbm9uZTtcclxuXHRiYWNrZ3JvdW5kOiBub25lO1xyXG5cdGNvbG9yOiBpbmhlcml0O1xyXG5cdHBhZGRpbmc6IDA7XHJcblx0bWFyZ2luOiAuMmVtIDA7XHJcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuXHRtYXJnaW4tbGVmdDogLjRlbTtcclxuXHRtYXJnaW4tcmlnaHQ6IDIycHg7XHJcbn1cclxuLnVpLXNwaW5uZXItYnV0dG9uIHtcclxuXHR3aWR0aDogMTZweDtcclxuXHRoZWlnaHQ6IDUwJTtcclxuXHRmb250LXNpemU6IC41ZW07XHJcblx0cGFkZGluZzogMDtcclxuXHRtYXJnaW46IDA7XHJcblx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRjdXJzb3I6IGRlZmF1bHQ7XHJcblx0ZGlzcGxheTogYmxvY2s7XHJcblx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHRyaWdodDogMDtcclxufVxyXG4vKiBtb3JlIHNwZWNpZmljaXR5IHJlcXVpcmVkIGhlcmUgdG8gb3ZlcnJpZGUgZGVmYXVsdCBib3JkZXJzICovXHJcbi51aS1zcGlubmVyIGEudWktc3Bpbm5lci1idXR0b24ge1xyXG5cdGJvcmRlci10b3A6IG5vbmU7XHJcblx0Ym9yZGVyLWJvdHRvbTogbm9uZTtcclxuXHRib3JkZXItcmlnaHQ6IG5vbmU7XHJcbn1cclxuLyogdmVydGljYWxseSBjZW50ZXIgaWNvbiAqL1xyXG4udWktc3Bpbm5lciAudWktaWNvbiB7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdG1hcmdpbi10b3A6IC04cHg7XHJcblx0dG9wOiA1MCU7XHJcblx0bGVmdDogMDtcclxufVxyXG4udWktc3Bpbm5lci11cCB7XHJcblx0dG9wOiAwO1xyXG59XHJcbi51aS1zcGlubmVyLWRvd24ge1xyXG5cdGJvdHRvbTogMDtcclxufVxyXG5cclxuLyogVFIgb3ZlcnJpZGVzICovXHJcbi51aS1zcGlubmVyIC51aS1pY29uLXRyaWFuZ2xlLTEtcyB7XHJcblx0LyogbmVlZCB0byBmaXggaWNvbnMgc3ByaXRlICovXHJcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogLTY1cHggLTE2cHg7XHJcbn1cclxuLnVpLXRhYnMge1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTsvKiBwb3NpdGlvbjogcmVsYXRpdmUgcHJldmVudHMgSUUgc2Nyb2xsIGJ1ZyAoZWxlbWVudCB3aXRoIHBvc2l0aW9uOiByZWxhdGl2ZSBpbnNpZGUgY29udGFpbmVyIHdpdGggb3ZlcmZsb3c6IGF1dG8gYXBwZWFyIGFzIFwiZml4ZWRcIikgKi9cclxuXHRwYWRkaW5nOiAuMmVtO1xyXG59XHJcbi51aS10YWJzIC51aS10YWJzLW5hdiB7XHJcblx0bWFyZ2luOiAwO1xyXG5cdHBhZGRpbmc6IC4yZW0gLjJlbSAwO1xyXG59XHJcbi51aS10YWJzIC51aS10YWJzLW5hdiBsaSB7XHJcblx0bGlzdC1zdHlsZTogbm9uZTtcclxuXHRmbG9hdDogbGVmdDtcclxuXHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0dG9wOiAwO1xyXG5cdG1hcmdpbjogMXB4IC4yZW0gMCAwO1xyXG5cdGJvcmRlci1ib3R0b20td2lkdGg6IDA7XHJcblx0cGFkZGluZzogMDtcclxuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG59XHJcbi51aS10YWJzIC51aS10YWJzLW5hdiAudWktdGFicy1hbmNob3Ige1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdHBhZGRpbmc6IC41ZW0gMWVtO1xyXG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxufVxyXG4udWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1hY3RpdmUge1xyXG5cdG1hcmdpbi1ib3R0b206IC0xcHg7XHJcblx0cGFkZGluZy1ib3R0b206IDFweDtcclxufVxyXG4udWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1hY3RpdmUgLnVpLXRhYnMtYW5jaG9yLFxyXG4udWktdGFicyAudWktdGFicy1uYXYgbGkudWktc3RhdGUtZGlzYWJsZWQgLnVpLXRhYnMtYW5jaG9yLFxyXG4udWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1sb2FkaW5nIC51aS10YWJzLWFuY2hvciB7XHJcblx0Y3Vyc29yOiB0ZXh0O1xyXG59XHJcbi51aS10YWJzLWNvbGxhcHNpYmxlIC51aS10YWJzLW5hdiBsaS51aS10YWJzLWFjdGl2ZSAudWktdGFicy1hbmNob3Ige1xyXG5cdGN1cnNvcjogcG9pbnRlcjtcclxufVxyXG4udWktdGFicyAudWktdGFicy1wYW5lbCB7XHJcblx0ZGlzcGxheTogYmxvY2s7XHJcblx0Ym9yZGVyLXdpZHRoOiAwO1xyXG5cdHBhZGRpbmc6IDFlbSAxLjRlbTtcclxuXHRiYWNrZ3JvdW5kOiBub25lO1xyXG59XHJcbi51aS10b29sdGlwIHtcclxuXHRwYWRkaW5nOiA4cHg7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdHotaW5kZXg6IDk5OTk7XHJcblx0bWF4LXdpZHRoOiAzMDBweDtcclxuXHQtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA1cHggI2FhYTtcclxuXHRib3gtc2hhZG93OiAwIDAgNXB4ICNhYWE7XHJcbn1cclxuYm9keSAudWktdG9vbHRpcCB7XHJcblx0Ym9yZGVyLXdpZHRoOiAycHg7XHJcbn1cclxuXHJcbi8qIENvbXBvbmVudCBjb250YWluZXJzXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4udWktd2lkZ2V0IHtcclxuXHRmb250LWZhbWlseTogVmVyZGFuYSxBcmlhbCxzYW5zLXNlcmlmO1xyXG5cdGZvbnQtc2l6ZTogMS4xZW07XHJcbn1cclxuLnVpLXdpZGdldCAudWktd2lkZ2V0IHtcclxuXHRmb250LXNpemU6IDFlbTtcclxufVxyXG4udWktd2lkZ2V0IGlucHV0LFxyXG4udWktd2lkZ2V0IHNlbGVjdCxcclxuLnVpLXdpZGdldCB0ZXh0YXJlYSxcclxuLnVpLXdpZGdldCBidXR0b24ge1xyXG5cdGZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7XHJcblx0Zm9udC1zaXplOiAxZW07XHJcbn1cclxuLnVpLXdpZGdldC1jb250ZW50IHtcclxuXHRib3JkZXI6IDFweCBzb2xpZCAjYWFhYWFhO1xyXG5cdGJhY2tncm91bmQ6ICNmZmZmZmY7XHJcblx0Y29sb3I6ICMyMjIyMjI7XHJcbn1cclxuLnVpLXdpZGdldC1jb250ZW50IGEge1xyXG5cdGNvbG9yOiAjMjIyMjIyO1xyXG59XHJcbi51aS13aWRnZXQtaGVhZGVyIHtcclxuXHRib3JkZXI6IDFweCBzb2xpZCAjYWFhYWFhO1xyXG5cdGJhY2tncm91bmQ6ICNjY2NjY2MgdXJsKFwiaW1hZ2VzL3VpLWJnX2hpZ2hsaWdodC1zb2Z0Xzc1X2NjY2NjY18xeDEwMC5wbmdcIikgNTAlIDUwJSByZXBlYXQteDtcclxuXHRjb2xvcjogIzIyMjIyMjtcclxuXHRmb250LXdlaWdodDogYm9sZDtcclxufVxyXG4udWktd2lkZ2V0LWhlYWRlciBhIHtcclxuXHRjb2xvcjogIzIyMjIyMjtcclxufVxyXG5cclxuLyogSW50ZXJhY3Rpb24gc3RhdGVzXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4udWktc3RhdGUtZGVmYXVsdCxcclxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kZWZhdWx0LFxyXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZGVmYXVsdCB7XHJcblx0Ym9yZGVyOiAxcHggc29saWQgI2QzZDNkMztcclxuXHRiYWNrZ3JvdW5kOiAjZTZlNmU2IHVybChcImltYWdlcy91aS1iZ19nbGFzc183NV9lNmU2ZTZfMXg0MDAucG5nXCIpIDUwJSA1MCUgcmVwZWF0LXg7XHJcblx0Zm9udC13ZWlnaHQ6IG5vcm1hbDtcclxuXHRjb2xvcjogIzU1NTU1NTtcclxufVxyXG4udWktc3RhdGUtZGVmYXVsdCBhLFxyXG4udWktc3RhdGUtZGVmYXVsdCBhOmxpbmssXHJcbi51aS1zdGF0ZS1kZWZhdWx0IGE6dmlzaXRlZCB7XHJcblx0Y29sb3I6ICM1NTU1NTU7XHJcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG59XHJcbi51aS1zdGF0ZS1ob3ZlcixcclxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1ob3ZlcixcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhvdmVyLFxyXG4udWktc3RhdGUtZm9jdXMsXHJcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZm9jdXMsXHJcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1mb2N1cyB7XHJcblx0Ym9yZGVyOiAxcHggc29saWQgIzk5OTk5OTtcclxuXHRiYWNrZ3JvdW5kOiAjZGFkYWRhIHVybChcImltYWdlcy91aS1iZ19nbGFzc183NV9kYWRhZGFfMXg0MDAucG5nXCIpIDUwJSA1MCUgcmVwZWF0LXg7XHJcblx0Zm9udC13ZWlnaHQ6IG5vcm1hbDtcclxuXHRjb2xvcjogIzIxMjEyMTtcclxufVxyXG4udWktc3RhdGUtaG92ZXIgYSxcclxuLnVpLXN0YXRlLWhvdmVyIGE6aG92ZXIsXHJcbi51aS1zdGF0ZS1ob3ZlciBhOmxpbmssXHJcbi51aS1zdGF0ZS1ob3ZlciBhOnZpc2l0ZWQsXHJcbi51aS1zdGF0ZS1mb2N1cyBhLFxyXG4udWktc3RhdGUtZm9jdXMgYTpob3ZlcixcclxuLnVpLXN0YXRlLWZvY3VzIGE6bGluayxcclxuLnVpLXN0YXRlLWZvY3VzIGE6dmlzaXRlZCB7XHJcblx0Y29sb3I6ICMyMTIxMjE7XHJcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG59XHJcbi51aS1zdGF0ZS1hY3RpdmUsXHJcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtYWN0aXZlLFxyXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtYWN0aXZlIHtcclxuXHRib3JkZXI6IDFweCBzb2xpZCAjYWFhYWFhO1xyXG5cdGJhY2tncm91bmQ6ICNmZmZmZmYgdXJsKFwiaW1hZ2VzL3VpLWJnX2dsYXNzXzY1X2ZmZmZmZl8xeDQwMC5wbmdcIikgNTAlIDUwJSByZXBlYXQteDtcclxuXHRmb250LXdlaWdodDogbm9ybWFsO1xyXG5cdGNvbG9yOiAjMjEyMTIxO1xyXG59XHJcbi51aS1zdGF0ZS1hY3RpdmUgYSxcclxuLnVpLXN0YXRlLWFjdGl2ZSBhOmxpbmssXHJcbi51aS1zdGF0ZS1hY3RpdmUgYTp2aXNpdGVkIHtcclxuXHRjb2xvcjogIzIxMjEyMTtcclxuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbn1cclxuXHJcbi8qIEludGVyYWN0aW9uIEN1ZXNcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbi51aS1zdGF0ZS1oaWdobGlnaHQsXHJcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaGlnaGxpZ2h0LFxyXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0IHtcclxuXHRib3JkZXI6IDFweCBzb2xpZCAjZmNlZmExO1xyXG5cdGJhY2tncm91bmQ6ICNmYmY5ZWUgdXJsKFwiaW1hZ2VzL3VpLWJnX2dsYXNzXzU1X2ZiZjllZV8xeDQwMC5wbmdcIikgNTAlIDUwJSByZXBlYXQteDtcclxuXHRjb2xvcjogIzM2MzYzNjtcclxufVxyXG4udWktc3RhdGUtaGlnaGxpZ2h0IGEsXHJcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaGlnaGxpZ2h0IGEsXHJcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1oaWdobGlnaHQgYSB7XHJcblx0Y29sb3I6ICMzNjM2MzY7XHJcbn1cclxuLnVpLXN0YXRlLWVycm9yLFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yLFxyXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3Ige1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNjZDBhMGE7XHJcblx0YmFja2dyb3VuZDogI2ZlZjFlYyB1cmwoXCJpbWFnZXMvdWktYmdfZ2xhc3NfOTVfZmVmMWVjXzF4NDAwLnBuZ1wiKSA1MCUgNTAlIHJlcGVhdC14O1xyXG5cdGNvbG9yOiAjY2QwYTBhO1xyXG59XHJcbi51aS1zdGF0ZS1lcnJvciBhLFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yIGEsXHJcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvciBhIHtcclxuXHRjb2xvcjogI2NkMGEwYTtcclxufVxyXG4udWktc3RhdGUtZXJyb3ItdGV4dCxcclxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvci10ZXh0LFxyXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3ItdGV4dCB7XHJcblx0Y29sb3I6ICNjZDBhMGE7XHJcbn1cclxuLnVpLXByaW9yaXR5LXByaW1hcnksXHJcbi51aS13aWRnZXQtY29udGVudCAudWktcHJpb3JpdHktcHJpbWFyeSxcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXByaW9yaXR5LXByaW1hcnkge1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG59XHJcbi51aS1wcmlvcml0eS1zZWNvbmRhcnksXHJcbi51aS13aWRnZXQtY29udGVudCAudWktcHJpb3JpdHktc2Vjb25kYXJ5LFxyXG4udWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktc2Vjb25kYXJ5IHtcclxuXHRvcGFjaXR5OiAuNztcclxuXHRmaWx0ZXI6QWxwaGEoT3BhY2l0eT03MCk7IC8qIHN1cHBvcnQ6IElFOCAqL1xyXG5cdGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcbn1cclxuLnVpLXN0YXRlLWRpc2FibGVkLFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRpc2FibGVkLFxyXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZGlzYWJsZWQge1xyXG5cdG9wYWNpdHk6IC4zNTtcclxuXHRmaWx0ZXI6QWxwaGEoT3BhY2l0eT0zNSk7IC8qIHN1cHBvcnQ6IElFOCAqL1xyXG5cdGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XHJcbn1cclxuLnVpLXN0YXRlLWRpc2FibGVkIC51aS1pY29uIHtcclxuXHRmaWx0ZXI6QWxwaGEoT3BhY2l0eT0zNSk7IC8qIHN1cHBvcnQ6IElFOCAtIFNlZSAjNjA1OSAqL1xyXG59XHJcblxyXG4vKiBJY29uc1xyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbi8qIHN0YXRlcyBhbmQgaW1hZ2VzICovXHJcbi51aS1pY29uIHtcclxuXHR3aWR0aDogMTZweDtcclxuXHRoZWlnaHQ6IDE2cHg7XHJcbn1cclxuLnVpLWljb24sXHJcbi51aS13aWRnZXQtY29udGVudCAudWktaWNvbiB7XHJcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiaW1hZ2VzL3VpLWljb25zXzIyMjIyMl8yNTZ4MjQwLnBuZ1wiKTtcclxufVxyXG4udWktd2lkZ2V0LWhlYWRlciAudWktaWNvbiB7XHJcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiaW1hZ2VzL3VpLWljb25zXzIyMjIyMl8yNTZ4MjQwLnBuZ1wiKTtcclxufVxyXG4udWktc3RhdGUtZGVmYXVsdCAudWktaWNvbiB7XHJcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiaW1hZ2VzL3VpLWljb25zXzg4ODg4OF8yNTZ4MjQwLnBuZ1wiKTtcclxufVxyXG4udWktc3RhdGUtaG92ZXIgLnVpLWljb24sXHJcbi51aS1zdGF0ZS1mb2N1cyAudWktaWNvbiB7XHJcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiaW1hZ2VzL3VpLWljb25zXzQ1NDU0NV8yNTZ4MjQwLnBuZ1wiKTtcclxufVxyXG4udWktc3RhdGUtYWN0aXZlIC51aS1pY29uIHtcclxuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfNDU0NTQ1XzI1NngyNDAucG5nXCIpO1xyXG59XHJcbi51aS1zdGF0ZS1oaWdobGlnaHQgLnVpLWljb24ge1xyXG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc18yZTgzZmZfMjU2eDI0MC5wbmdcIik7XHJcbn1cclxuLnVpLXN0YXRlLWVycm9yIC51aS1pY29uLFxyXG4udWktc3RhdGUtZXJyb3ItdGV4dCAudWktaWNvbiB7XHJcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiaW1hZ2VzL3VpLWljb25zX2NkMGEwYV8yNTZ4MjQwLnBuZ1wiKTtcclxufVxyXG5cclxuLyogcG9zaXRpb25pbmcgKi9cclxuLnVpLWljb24tYmxhbmsgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxNnB4IDE2cHg7IH1cclxuLnVpLWljb24tY2FyYXQtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9XHJcbi51aS1pY29uLWNhcmF0LTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAwOyB9XHJcbi51aS1pY29uLWNhcmF0LTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IDA7IH1cclxuLnVpLWljb24tY2FyYXQtMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IDA7IH1cclxuLnVpLWljb24tY2FyYXQtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggMDsgfVxyXG4udWktaWNvbi1jYXJhdC0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggMDsgfVxyXG4udWktaWNvbi1jYXJhdC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAwOyB9XHJcbi51aS1pY29uLWNhcmF0LTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggMDsgfVxyXG4udWktaWNvbi1jYXJhdC0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAwOyB9XHJcbi51aS1pY29uLWNhcmF0LTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IDA7IH1cclxuLnVpLWljb24tdHJpYW5nbGUtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTZweDsgfVxyXG4udWktaWNvbi10cmlhbmdsZS0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE2cHg7IH1cclxuLnVpLWljb24tdHJpYW5nbGUtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE2cHg7IH1cclxuLnVpLWljb24tdHJpYW5nbGUtMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNnB4OyB9XHJcbi51aS1pY29uLXRyaWFuZ2xlLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNnB4OyB9XHJcbi51aS1pY29uLXRyaWFuZ2xlLTEtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTZweDsgfVxyXG4udWktaWNvbi10cmlhbmdsZS0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTZweDsgfVxyXG4udWktaWNvbi10cmlhbmdsZS0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNnB4OyB9XHJcbi51aS1pY29uLXRyaWFuZ2xlLTItbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNnB4OyB9XHJcbi51aS1pY29uLXRyaWFuZ2xlLTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNnB4OyB9XHJcbi51aS1pY29uLWFycm93LTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3ctMS1uZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93LTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93LTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvdy0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvdy0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3ctMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3ctMS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvdy0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvdy0yLW5lLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93LTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93LTItc2UtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3dzdG9wLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvd3N0b3AtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93c3RvcC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3dzdG9wLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGljay0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGljay0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGljay0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGljay0yLW5lLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGljay0yLXNlLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTY0cHg7IH1cclxuLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtNjRweDsgfVxyXG4udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTY0cHg7IH1cclxuLnVpLWljb24tYXJyb3dyZXR1cm4tMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTY0cHg7IH1cclxuLnVpLWljb24tYXJyb3dyZXR1cm4tMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTY0cHg7IH1cclxuLnVpLWljb24tYXJyb3dyZXR1cm4tMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTY0cHg7IH1cclxuLnVpLWljb24tYXJyb3dyZXR1cm4tMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmVmcmVzaC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTY0cHg7IH1cclxuLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNjRweDsgfVxyXG4udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmVmcmVzaC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTY0cHg7IH1cclxuLnVpLWljb24tYXJyb3ctNCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTgwcHg7IH1cclxuLnVpLWljb24tYXJyb3ctNC1kaWFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTgwcHg7IH1cclxuLnVpLWljb24tZXh0bGluayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC04MHB4OyB9XHJcbi51aS1pY29uLW5ld3dpbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC04MHB4OyB9XHJcbi51aS1pY29uLXJlZnJlc2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtODBweDsgfVxyXG4udWktaWNvbi1zaHVmZmxlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTgwcHg7IH1cclxuLnVpLWljb24tdHJhbnNmZXItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTgwcHg7IH1cclxuLnVpLWljb24tdHJhbnNmZXJ0aGljay1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTgwcHg7IH1cclxuLnVpLWljb24tZm9sZGVyLWNvbGxhcHNlZCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTk2cHg7IH1cclxuLnVpLWljb24tZm9sZGVyLW9wZW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtOTZweDsgfVxyXG4udWktaWNvbi1kb2N1bWVudCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC05NnB4OyB9XHJcbi51aS1pY29uLWRvY3VtZW50LWIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtOTZweDsgfVxyXG4udWktaWNvbi1ub3RlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTk2cHg7IH1cclxuLnVpLWljb24tbWFpbC1jbG9zZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtOTZweDsgfVxyXG4udWktaWNvbi1tYWlsLW9wZW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtOTZweDsgfVxyXG4udWktaWNvbi1zdWl0Y2FzZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtOTZweDsgfVxyXG4udWktaWNvbi1jb21tZW50IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC05NnB4OyB9XHJcbi51aS1pY29uLXBlcnNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtOTZweDsgfVxyXG4udWktaWNvbi1wcmludCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtOTZweDsgfVxyXG4udWktaWNvbi10cmFzaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtOTZweDsgfVxyXG4udWktaWNvbi1sb2NrZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTk2cHg7IH1cclxuLnVpLWljb24tdW5sb2NrZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTk2cHg7IH1cclxuLnVpLWljb24tYm9va21hcmsgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTk2cHg7IH1cclxuLnVpLWljb24tdGFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC05NnB4OyB9XHJcbi51aS1pY29uLWhvbWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMTJweDsgfVxyXG4udWktaWNvbi1mbGFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTExMnB4OyB9XHJcbi51aS1pY29uLWNhbGVuZGFyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTExMnB4OyB9XHJcbi51aS1pY29uLWNhcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTEycHg7IH1cclxuLnVpLWljb24tcGVuY2lsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTExMnB4OyB9XHJcbi51aS1pY29uLWNsb2NrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTExMnB4OyB9XHJcbi51aS1pY29uLWRpc2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTEycHg7IH1cclxuLnVpLWljb24tY2FsY3VsYXRvciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTEycHg7IH1cclxuLnVpLWljb24tem9vbWluIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMTJweDsgfVxyXG4udWktaWNvbi16b29tb3V0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1zZWFyY2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTExMnB4OyB9XHJcbi51aS1pY29uLXdyZW5jaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTEycHg7IH1cclxuLnVpLWljb24tZ2VhciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTEycHg7IH1cclxuLnVpLWljb24taGVhcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTExMnB4OyB9XHJcbi51aS1pY29uLXN0YXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTExMnB4OyB9XHJcbi51aS1pY29uLWxpbmsgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTExMnB4OyB9XHJcbi51aS1pY29uLWNhbmNlbCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEyOHB4OyB9XHJcbi51aS1pY29uLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTI4cHg7IH1cclxuLnVpLWljb24tcGx1c3RoaWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTEyOHB4OyB9XHJcbi51aS1pY29uLW1pbnVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTEyOHB4OyB9XHJcbi51aS1pY29uLW1pbnVzdGhpY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTI4cHg7IH1cclxuLnVpLWljb24tY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTI4cHg7IH1cclxuLnVpLWljb24tY2xvc2V0aGljayB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1rZXkgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTEyOHB4OyB9XHJcbi51aS1pY29uLWxpZ2h0YnVsYiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHg7IH1cclxuLnVpLWljb24tc2Npc3NvcnMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTEyOHB4OyB9XHJcbi51aS1pY29uLWNsaXBib2FyZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTI4cHg7IH1cclxuLnVpLWljb24tY29weSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTI4cHg7IH1cclxuLnVpLWljb24tY29udGFjdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTI4cHg7IH1cclxuLnVpLWljb24taW1hZ2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTEyOHB4OyB9XHJcbi51aS1pY29uLXZpZGVvIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1zY3JpcHQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTEyOHB4OyB9XHJcbi51aS1pY29uLWFsZXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ0cHg7IH1cclxuLnVpLWljb24taW5mbyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNDRweDsgfVxyXG4udWktaWNvbi1ub3RpY2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTQ0cHg7IH1cclxuLnVpLWljb24taGVscCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNDRweDsgfVxyXG4udWktaWNvbi1jaGVjayB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNDRweDsgfVxyXG4udWktaWNvbi1idWxsZXQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTQ0cHg7IH1cclxuLnVpLWljb24tcmFkaW8tb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTQ0cHg7IH1cclxuLnVpLWljb24tcmFkaW8tb2ZmIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNDRweDsgfVxyXG4udWktaWNvbi1waW4tdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTQ0cHg7IH1cclxuLnVpLWljb24tcGluLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE0NHB4OyB9XHJcbi51aS1pY29uLXBsYXkgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNjBweDsgfVxyXG4udWktaWNvbi1wYXVzZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNjBweDsgfVxyXG4udWktaWNvbi1zZWVrLW5leHQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTYwcHg7IH1cclxuLnVpLWljb24tc2Vlay1wcmV2IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE2MHB4OyB9XHJcbi51aS1pY29uLXNlZWstZW5kIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE2MHB4OyB9XHJcbi51aS1pY29uLXNlZWstc3RhcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTYwcHg7IH1cclxuLyogdWktaWNvbi1zZWVrLWZpcnN0IGlzIGRlcHJlY2F0ZWQsIHVzZSB1aS1pY29uLXNlZWstc3RhcnQgaW5zdGVhZCAqL1xyXG4udWktaWNvbi1zZWVrLWZpcnN0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE2MHB4OyB9XHJcbi51aS1pY29uLXN0b3AgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTYwcHg7IH1cclxuLnVpLWljb24tZWplY3QgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE2MHB4OyB9XHJcbi51aS1pY29uLXZvbHVtZS1vZmYgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE2MHB4OyB9XHJcbi51aS1pY29uLXZvbHVtZS1vbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTYwcHg7IH1cclxuLnVpLWljb24tcG93ZXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNzZweDsgfVxyXG4udWktaWNvbi1zaWduYWwtZGlhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNzZweDsgfVxyXG4udWktaWNvbi1zaWduYWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTc2cHg7IH1cclxuLnVpLWljb24tYmF0dGVyeS0wIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE3NnB4OyB9XHJcbi51aS1pY29uLWJhdHRlcnktMSB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNzZweDsgfVxyXG4udWktaWNvbi1iYXR0ZXJ5LTIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTc2cHg7IH1cclxuLnVpLWljb24tYmF0dGVyeS0zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE3NnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLW1pbnVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtYXJyb3ctZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLWFycm93LXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS1hcnJvdy13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtYXJyb3ctbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLXpvb21pbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLXpvb21vdXQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS1jaGVjayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlc21hbGwtcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTIwOHB4OyB9XHJcbi51aS1pY29uLWNpcmNsZXNtYWxsLW1pbnVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTIwOHB4OyB9XHJcbi51aS1pY29uLWNpcmNsZXNtYWxsLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTIwOHB4OyB9XHJcbi51aS1pY29uLXNxdWFyZXNtYWxsLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMjA4cHg7IH1cclxuLnVpLWljb24tc3F1YXJlc21hbGwtbWludXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMjA4cHg7IH1cclxuLnVpLWljb24tc3F1YXJlc21hbGwtY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMjA4cHg7IH1cclxuLnVpLWljb24tZ3JpcC1kb3R0ZWQtdmVydGljYWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMjRweDsgfVxyXG4udWktaWNvbi1ncmlwLWRvdHRlZC1ob3Jpem9udGFsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTIyNHB4OyB9XHJcbi51aS1pY29uLWdyaXAtc29saWQtdmVydGljYWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMjI0cHg7IH1cclxuLnVpLWljb24tZ3JpcC1zb2xpZC1ob3Jpem9udGFsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTIyNHB4OyB9XHJcbi51aS1pY29uLWdyaXBzbWFsbC1kaWFnb25hbC1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0yMjRweDsgfVxyXG4udWktaWNvbi1ncmlwLWRpYWdvbmFsLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTIyNHB4OyB9XHJcblxyXG5cclxuLyogTWlzYyB2aXN1YWxzXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuLyogQ29ybmVyIHJhZGl1cyAqL1xyXG4udWktY29ybmVyLWFsbCxcclxuLnVpLWNvcm5lci10b3AsXHJcbi51aS1jb3JuZXItbGVmdCxcclxuLnVpLWNvcm5lci10bCB7XHJcblx0Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4O1xyXG59XHJcbi51aS1jb3JuZXItYWxsLFxyXG4udWktY29ybmVyLXRvcCxcclxuLnVpLWNvcm5lci1yaWdodCxcclxuLnVpLWNvcm5lci10ciB7XHJcblx0Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDtcclxufVxyXG4udWktY29ybmVyLWFsbCxcclxuLnVpLWNvcm5lci1ib3R0b20sXHJcbi51aS1jb3JuZXItbGVmdCxcclxuLnVpLWNvcm5lci1ibCB7XHJcblx0Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4O1xyXG59XHJcbi51aS1jb3JuZXItYWxsLFxyXG4udWktY29ybmVyLWJvdHRvbSxcclxuLnVpLWNvcm5lci1yaWdodCxcclxuLnVpLWNvcm5lci1iciB7XHJcblx0Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDtcclxufVxyXG5cclxuLyogT3ZlcmxheXMgKi9cclxuLnVpLXdpZGdldC1vdmVybGF5IHtcclxuXHRiYWNrZ3JvdW5kOiAjYWFhYWFhO1xyXG5cdG9wYWNpdHk6IC4zO1xyXG5cdGZpbHRlcjogQWxwaGEoT3BhY2l0eT0zMCk7IC8qIHN1cHBvcnQ6IElFOCAqL1xyXG59XHJcbi51aS13aWRnZXQtc2hhZG93IHtcclxuXHRtYXJnaW46IC04cHggMCAwIC04cHg7XHJcblx0cGFkZGluZzogOHB4O1xyXG5cdGJhY2tncm91bmQ6ICNhYWFhYWE7XHJcblx0b3BhY2l0eTogLjM7XHJcblx0ZmlsdGVyOiBBbHBoYShPcGFjaXR5PTMwKTsgLyogc3VwcG9ydDogSUU4ICovXHJcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xyXG59XHJcbiIsIi8qIVxuICogalF1ZXJ5IFVJIENTUyBGcmFtZXdvcmsgMS4xMS40XG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9jYXRlZ29yeS90aGVtaW5nL1xuICovXG5cbi8qIExheW91dCBoZWxwZXJzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi51aS1oZWxwZXItaGlkZGVuIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cbi51aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUge1xuXHRib3JkZXI6IDA7XG5cdGNsaXA6IHJlY3QoMCAwIDAgMCk7XG5cdGhlaWdodDogMXB4O1xuXHRtYXJnaW46IC0xcHg7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdHBhZGRpbmc6IDA7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0d2lkdGg6IDFweDtcbn1cbi51aS1oZWxwZXItcmVzZXQge1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogMDtcblx0bGluZS1oZWlnaHQ6IDEuMztcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRmb250LXNpemU6IDEwMCU7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG59XG4udWktaGVscGVyLWNsZWFyZml4OmJlZm9yZSxcbi51aS1oZWxwZXItY2xlYXJmaXg6YWZ0ZXIge1xuXHRjb250ZW50OiBcIlwiO1xuXHRkaXNwbGF5OiB0YWJsZTtcblx0Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbn1cbi51aS1oZWxwZXItY2xlYXJmaXg6YWZ0ZXIge1xuXHRjbGVhcjogYm90aDtcbn1cbi51aS1oZWxwZXItY2xlYXJmaXgge1xuXHRtaW4taGVpZ2h0OiAwOyAvKiBzdXBwb3J0OiBJRTcgKi9cbn1cbi51aS1oZWxwZXItemZpeCB7XG5cdHdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdHRvcDogMDtcblx0bGVmdDogMDtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRvcGFjaXR5OiAwO1xuXHRmaWx0ZXI6QWxwaGEoT3BhY2l0eT0wKTsgLyogc3VwcG9ydDogSUU4ICovXG59XG5cbi51aS1mcm9udCB7XG5cdHotaW5kZXg6IDEwMDtcbn1cblxuXG4vKiBJbnRlcmFjdGlvbiBDdWVzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi51aS1zdGF0ZS1kaXNhYmxlZCB7XG5cdGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50O1xufVxuXG5cbi8qIEljb25zXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyogc3RhdGVzIGFuZCBpbWFnZXMgKi9cbi51aS1pY29uIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHRleHQtaW5kZW50OiAtOTk5OTlweDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbn1cblxuXG4vKiBNaXNjIHZpc3VhbHNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKiBPdmVybGF5cyAqL1xuLnVpLXdpZGdldC1vdmVybGF5IHtcblx0cG9zaXRpb246IGZpeGVkO1xuXHR0b3A6IDA7XG5cdGxlZnQ6IDA7XG5cdHdpZHRoOiAxMDAlO1xuXHRoZWlnaHQ6IDEwMCU7XG59XG4udWktZHJhZ2dhYmxlLWhhbmRsZSB7XG5cdC1tcy10b3VjaC1hY3Rpb246IG5vbmU7XG5cdHRvdWNoLWFjdGlvbjogbm9uZTtcbn1cbi51aS1yZXNpemFibGUge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4udWktcmVzaXphYmxlLWhhbmRsZSB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0Zm9udC1zaXplOiAwLjFweDtcblx0ZGlzcGxheTogYmxvY2s7XG5cdC1tcy10b3VjaC1hY3Rpb246IG5vbmU7XG5cdHRvdWNoLWFjdGlvbjogbm9uZTtcbn1cbi51aS1yZXNpemFibGUtZGlzYWJsZWQgLnVpLXJlc2l6YWJsZS1oYW5kbGUsXG4udWktcmVzaXphYmxlLWF1dG9oaWRlIC51aS1yZXNpemFibGUtaGFuZGxlIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cbi51aS1yZXNpemFibGUtbiB7XG5cdGN1cnNvcjogbi1yZXNpemU7XG5cdGhlaWdodDogN3B4O1xuXHR3aWR0aDogMTAwJTtcblx0dG9wOiAtNXB4O1xuXHRsZWZ0OiAwO1xufVxuLnVpLXJlc2l6YWJsZS1zIHtcblx0Y3Vyc29yOiBzLXJlc2l6ZTtcblx0aGVpZ2h0OiA3cHg7XG5cdHdpZHRoOiAxMDAlO1xuXHRib3R0b206IC01cHg7XG5cdGxlZnQ6IDA7XG59XG4udWktcmVzaXphYmxlLWUge1xuXHRjdXJzb3I6IGUtcmVzaXplO1xuXHR3aWR0aDogN3B4O1xuXHRyaWdodDogLTVweDtcblx0dG9wOiAwO1xuXHRoZWlnaHQ6IDEwMCU7XG59XG4udWktcmVzaXphYmxlLXcge1xuXHRjdXJzb3I6IHctcmVzaXplO1xuXHR3aWR0aDogN3B4O1xuXHRsZWZ0OiAtNXB4O1xuXHR0b3A6IDA7XG5cdGhlaWdodDogMTAwJTtcbn1cbi51aS1yZXNpemFibGUtc2Uge1xuXHRjdXJzb3I6IHNlLXJlc2l6ZTtcblx0d2lkdGg6IDEycHg7XG5cdGhlaWdodDogMTJweDtcblx0cmlnaHQ6IDFweDtcblx0Ym90dG9tOiAxcHg7XG59XG4udWktcmVzaXphYmxlLXN3IHtcblx0Y3Vyc29yOiBzdy1yZXNpemU7XG5cdHdpZHRoOiA5cHg7XG5cdGhlaWdodDogOXB4O1xuXHRsZWZ0OiAtNXB4O1xuXHRib3R0b206IC01cHg7XG59XG4udWktcmVzaXphYmxlLW53IHtcblx0Y3Vyc29yOiBudy1yZXNpemU7XG5cdHdpZHRoOiA5cHg7XG5cdGhlaWdodDogOXB4O1xuXHRsZWZ0OiAtNXB4O1xuXHR0b3A6IC01cHg7XG59XG4udWktcmVzaXphYmxlLW5lIHtcblx0Y3Vyc29yOiBuZS1yZXNpemU7XG5cdHdpZHRoOiA5cHg7XG5cdGhlaWdodDogOXB4O1xuXHRyaWdodDogLTVweDtcblx0dG9wOiAtNXB4O1xufVxuLnVpLXNlbGVjdGFibGUge1xuXHQtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xuXHR0b3VjaC1hY3Rpb246IG5vbmU7XG59XG4udWktc2VsZWN0YWJsZS1oZWxwZXIge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHotaW5kZXg6IDEwMDtcblx0Ym9yZGVyOiAxcHggZG90dGVkIGJsYWNrO1xufVxuLnVpLXNvcnRhYmxlLWhhbmRsZSB7XG5cdC1tcy10b3VjaC1hY3Rpb246IG5vbmU7XG5cdHRvdWNoLWFjdGlvbjogbm9uZTtcbn1cbi51aS1hY2NvcmRpb24gLnVpLWFjY29yZGlvbi1oZWFkZXIge1xuXHRkaXNwbGF5OiBibG9jaztcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdG1hcmdpbjogMnB4IDAgMCAwO1xuXHRwYWRkaW5nOiAuNWVtIC41ZW0gLjVlbSAuN2VtO1xuXHRtaW4taGVpZ2h0OiAwOyAvKiBzdXBwb3J0OiBJRTcgKi9cblx0Zm9udC1zaXplOiAxMDAlO1xufVxuLnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWljb25zIHtcblx0cGFkZGluZy1sZWZ0OiAyLjJlbTtcbn1cbi51aS1hY2NvcmRpb24gLnVpLWFjY29yZGlvbi1pY29ucyAudWktYWNjb3JkaW9uLWljb25zIHtcblx0cGFkZGluZy1sZWZ0OiAyLjJlbTtcbn1cbi51aS1hY2NvcmRpb24gLnVpLWFjY29yZGlvbi1oZWFkZXIgLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0bGVmdDogLjVlbTtcblx0dG9wOiA1MCU7XG5cdG1hcmdpbi10b3A6IC04cHg7XG59XG4udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24tY29udGVudCB7XG5cdHBhZGRpbmc6IDFlbSAyLjJlbTtcblx0Ym9yZGVyLXRvcDogMDtcblx0b3ZlcmZsb3c6IGF1dG87XG59XG4udWktYXV0b2NvbXBsZXRlIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDA7XG5cdGxlZnQ6IDA7XG5cdGN1cnNvcjogZGVmYXVsdDtcbn1cbi51aS1idXR0b24ge1xuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0cGFkZGluZzogMDtcblx0bGluZS1oZWlnaHQ6IG5vcm1hbDtcblx0bWFyZ2luLXJpZ2h0OiAuMWVtO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0b3ZlcmZsb3c6IHZpc2libGU7IC8qIHJlbW92ZXMgZXh0cmEgd2lkdGggaW4gSUUgKi9cbn1cbi51aS1idXR0b24sXG4udWktYnV0dG9uOmxpbmssXG4udWktYnV0dG9uOnZpc2l0ZWQsXG4udWktYnV0dG9uOmhvdmVyLFxuLnVpLWJ1dHRvbjphY3RpdmUge1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4vKiB0byBtYWtlIHJvb20gZm9yIHRoZSBpY29uLCBhIHdpZHRoIG5lZWRzIHRvIGJlIHNldCBoZXJlICovXG4udWktYnV0dG9uLWljb24tb25seSB7XG5cdHdpZHRoOiAyLjJlbTtcbn1cbi8qIGJ1dHRvbiBlbGVtZW50cyBzZWVtIHRvIG5lZWQgYSBsaXR0bGUgbW9yZSB3aWR0aCAqL1xuYnV0dG9uLnVpLWJ1dHRvbi1pY29uLW9ubHkge1xuXHR3aWR0aDogMi40ZW07XG59XG4udWktYnV0dG9uLWljb25zLW9ubHkge1xuXHR3aWR0aDogMy40ZW07XG59XG5idXR0b24udWktYnV0dG9uLWljb25zLW9ubHkge1xuXHR3aWR0aDogMy43ZW07XG59XG5cbi8qIGJ1dHRvbiB0ZXh0IGVsZW1lbnQgKi9cbi51aS1idXR0b24gLnVpLWJ1dHRvbi10ZXh0IHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGxpbmUtaGVpZ2h0OiBub3JtYWw7XG59XG4udWktYnV0dG9uLXRleHQtb25seSAudWktYnV0dG9uLXRleHQge1xuXHRwYWRkaW5nOiAuNGVtIDFlbTtcbn1cbi51aS1idXR0b24taWNvbi1vbmx5IC51aS1idXR0b24tdGV4dCxcbi51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLXRleHQge1xuXHRwYWRkaW5nOiAuNGVtO1xuXHR0ZXh0LWluZGVudDogLTk5OTk5OTlweDtcbn1cbi51aS1idXR0b24tdGV4dC1pY29uLXByaW1hcnkgLnVpLWJ1dHRvbi10ZXh0LFxuLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24tdGV4dCB7XG5cdHBhZGRpbmc6IC40ZW0gMWVtIC40ZW0gMi4xZW07XG59XG4udWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgLnVpLWJ1dHRvbi10ZXh0LFxuLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24tdGV4dCB7XG5cdHBhZGRpbmc6IC40ZW0gMi4xZW0gLjRlbSAxZW07XG59XG4udWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWJ1dHRvbi10ZXh0IHtcblx0cGFkZGluZy1sZWZ0OiAyLjFlbTtcblx0cGFkZGluZy1yaWdodDogMi4xZW07XG59XG4vKiBubyBpY29uIHN1cHBvcnQgZm9yIGlucHV0IGVsZW1lbnRzLCBwcm92aWRlIHBhZGRpbmcgYnkgZGVmYXVsdCAqL1xuaW5wdXQudWktYnV0dG9uIHtcblx0cGFkZGluZzogLjRlbSAxZW07XG59XG5cbi8qIGJ1dHRvbiBpY29uIGVsZW1lbnQocykgKi9cbi51aS1idXR0b24taWNvbi1vbmx5IC51aS1pY29uLFxuLnVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSAudWktaWNvbixcbi51aS1idXR0b24tdGV4dC1pY29uLXNlY29uZGFyeSAudWktaWNvbixcbi51aS1idXR0b24tdGV4dC1pY29ucyAudWktaWNvbixcbi51aS1idXR0b24taWNvbnMtb25seSAudWktaWNvbiB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiA1MCU7XG5cdG1hcmdpbi10b3A6IC04cHg7XG59XG4udWktYnV0dG9uLWljb24tb25seSAudWktaWNvbiB7XG5cdGxlZnQ6IDUwJTtcblx0bWFyZ2luLWxlZnQ6IC04cHg7XG59XG4udWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IC51aS1idXR0b24taWNvbi1wcmltYXJ5LFxuLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1wcmltYXJ5LFxuLnVpLWJ1dHRvbi1pY29ucy1vbmx5IC51aS1idXR0b24taWNvbi1wcmltYXJ5IHtcblx0bGVmdDogLjVlbTtcbn1cbi51aS1idXR0b24tdGV4dC1pY29uLXNlY29uZGFyeSAudWktYnV0dG9uLWljb24tc2Vjb25kYXJ5LFxuLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksXG4udWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi1pY29uLXNlY29uZGFyeSB7XG5cdHJpZ2h0OiAuNWVtO1xufVxuXG4vKiBidXR0b24gc2V0cyAqL1xuLnVpLWJ1dHRvbnNldCB7XG5cdG1hcmdpbi1yaWdodDogN3B4O1xufVxuLnVpLWJ1dHRvbnNldCAudWktYnV0dG9uIHtcblx0bWFyZ2luLWxlZnQ6IDA7XG5cdG1hcmdpbi1yaWdodDogLS4zZW07XG59XG5cbi8qIHdvcmthcm91bmRzICovXG4vKiByZXNldCBleHRyYSBwYWRkaW5nIGluIEZpcmVmb3gsIHNlZSBoNWJwLmNvbS9sICovXG5pbnB1dC51aS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5idXR0b24udWktYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHtcblx0Ym9yZGVyOiAwO1xuXHRwYWRkaW5nOiAwO1xufVxuLnVpLWRhdGVwaWNrZXIge1xuXHR3aWR0aDogMTdlbTtcblx0cGFkZGluZzogLjJlbSAuMmVtIDA7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1oZWFkZXIge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdHBhZGRpbmc6IC4yZW0gMDtcbn1cbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYsXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0IHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDJweDtcblx0d2lkdGg6IDEuOGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xufVxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3Zlcixcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXIge1xuXHR0b3A6IDFweDtcbn1cbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYge1xuXHRsZWZ0OiAycHg7XG59XG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0IHtcblx0cmlnaHQ6IDJweDtcbn1cbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYtaG92ZXIge1xuXHRsZWZ0OiAxcHg7XG59XG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIHtcblx0cmlnaHQ6IDFweDtcbn1cbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYgc3Bhbixcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQgc3BhbiB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGxlZnQ6IDUwJTtcblx0bWFyZ2luLWxlZnQ6IC04cHg7XG5cdHRvcDogNTAlO1xuXHRtYXJnaW4tdG9wOiAtOHB4O1xufVxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItdGl0bGUge1xuXHRtYXJnaW46IDAgMi4zZW07XG5cdGxpbmUtaGVpZ2h0OiAxLjhlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xufVxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItdGl0bGUgc2VsZWN0IHtcblx0Zm9udC1zaXplOiAxZW07XG5cdG1hcmdpbjogMXB4IDA7XG59XG4udWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCxcbi51aS1kYXRlcGlja2VyIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXIge1xuXHR3aWR0aDogNDUlO1xufVxuLnVpLWRhdGVwaWNrZXIgdGFibGUge1xuXHR3aWR0aDogMTAwJTtcblx0Zm9udC1zaXplOiAuOWVtO1xuXHRib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuXHRtYXJnaW46IDAgMCAuNGVtO1xufVxuLnVpLWRhdGVwaWNrZXIgdGgge1xuXHRwYWRkaW5nOiAuN2VtIC4zZW07XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XG5cdGJvcmRlcjogMDtcbn1cbi51aS1kYXRlcGlja2VyIHRkIHtcblx0Ym9yZGVyOiAwO1xuXHRwYWRkaW5nOiAxcHg7XG59XG4udWktZGF0ZXBpY2tlciB0ZCBzcGFuLFxuLnVpLWRhdGVwaWNrZXIgdGQgYSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRwYWRkaW5nOiAuMmVtO1xuXHR0ZXh0LWFsaWduOiByaWdodDtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB7XG5cdGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG5cdG1hcmdpbjogLjdlbSAwIDAgMDtcblx0cGFkZGluZzogMCAuMmVtO1xuXHRib3JkZXItbGVmdDogMDtcblx0Ym9yZGVyLXJpZ2h0OiAwO1xuXHRib3JkZXItYm90dG9tOiAwO1xufVxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24ge1xuXHRmbG9hdDogcmlnaHQ7XG5cdG1hcmdpbjogLjVlbSAuMmVtIC40ZW07XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0cGFkZGluZzogLjJlbSAuNmVtIC4zZW0gLjZlbTtcblx0d2lkdGg6IGF1dG87XG5cdG92ZXJmbG93OiB2aXNpYmxlO1xufVxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24udWktZGF0ZXBpY2tlci1jdXJyZW50IHtcblx0ZmxvYXQ6IGxlZnQ7XG59XG5cbi8qIHdpdGggbXVsdGlwbGUgY2FsZW5kYXJzICovXG4udWktZGF0ZXBpY2tlci51aS1kYXRlcGlja2VyLW11bHRpIHtcblx0d2lkdGg6IGF1dG87XG59XG4udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cCB7XG5cdGZsb2F0OiBsZWZ0O1xufVxuLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAgdGFibGUge1xuXHR3aWR0aDogOTUlO1xuXHRtYXJnaW46IDAgYXV0byAuNGVtO1xufVxuLnVpLWRhdGVwaWNrZXItbXVsdGktMiAudWktZGF0ZXBpY2tlci1ncm91cCB7XG5cdHdpZHRoOiA1MCU7XG59XG4udWktZGF0ZXBpY2tlci1tdWx0aS0zIC51aS1kYXRlcGlja2VyLWdyb3VwIHtcblx0d2lkdGg6IDMzLjMlO1xufVxuLnVpLWRhdGVwaWNrZXItbXVsdGktNCAudWktZGF0ZXBpY2tlci1ncm91cCB7XG5cdHdpZHRoOiAyNSU7XG59XG4udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IC51aS1kYXRlcGlja2VyLWhlYWRlcixcbi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXIge1xuXHRib3JkZXItbGVmdC13aWR0aDogMDtcbn1cbi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUge1xuXHRjbGVhcjogbGVmdDtcbn1cbi51aS1kYXRlcGlja2VyLXJvdy1icmVhayB7XG5cdGNsZWFyOiBib3RoO1xuXHR3aWR0aDogMTAwJTtcblx0Zm9udC1zaXplOiAwO1xufVxuXG4vKiBSVEwgc3VwcG9ydCAqL1xuLnVpLWRhdGVwaWNrZXItcnRsIHtcblx0ZGlyZWN0aW9uOiBydGw7XG59XG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldiB7XG5cdHJpZ2h0OiAycHg7XG5cdGxlZnQ6IGF1dG87XG59XG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dCB7XG5cdGxlZnQ6IDJweDtcblx0cmlnaHQ6IGF1dG87XG59XG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldjpob3ZlciB7XG5cdHJpZ2h0OiAxcHg7XG5cdGxlZnQ6IGF1dG87XG59XG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dDpob3ZlciB7XG5cdGxlZnQ6IDFweDtcblx0cmlnaHQ6IGF1dG87XG59XG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB7XG5cdGNsZWFyOiByaWdodDtcbn1cbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbiB7XG5cdGZsb2F0OiBsZWZ0O1xufVxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudCxcbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cCB7XG5cdGZsb2F0OiByaWdodDtcbn1cbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IC51aS1kYXRlcGlja2VyLWhlYWRlcixcbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUgLnVpLWRhdGVwaWNrZXItaGVhZGVyIHtcblx0Ym9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuXHRib3JkZXItbGVmdC13aWR0aDogMXB4O1xufVxuLnVpLWRpYWxvZyB7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiAwO1xuXHRsZWZ0OiAwO1xuXHRwYWRkaW5nOiAuMmVtO1xuXHRvdXRsaW5lOiAwO1xufVxuLnVpLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlYmFyIHtcblx0cGFkZGluZzogLjRlbSAxZW07XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi51aS1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZSB7XG5cdGZsb2F0OiBsZWZ0O1xuXHRtYXJnaW46IC4xZW0gMDtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0d2lkdGg6IDkwJTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG4udWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGViYXItY2xvc2Uge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHJpZ2h0OiAuM2VtO1xuXHR0b3A6IDUwJTtcblx0d2lkdGg6IDIwcHg7XG5cdG1hcmdpbjogLTEwcHggMCAwIDA7XG5cdHBhZGRpbmc6IDFweDtcblx0aGVpZ2h0OiAyMHB4O1xufVxuLnVpLWRpYWxvZyAudWktZGlhbG9nLWNvbnRlbnQge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdGJvcmRlcjogMDtcblx0cGFkZGluZzogLjVlbSAxZW07XG5cdGJhY2tncm91bmQ6IG5vbmU7XG5cdG92ZXJmbG93OiBhdXRvO1xufVxuLnVpLWRpYWxvZyAudWktZGlhbG9nLWJ1dHRvbnBhbmUge1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRib3JkZXItd2lkdGg6IDFweCAwIDAgMDtcblx0YmFja2dyb3VuZC1pbWFnZTogbm9uZTtcblx0bWFyZ2luLXRvcDogLjVlbTtcblx0cGFkZGluZzogLjNlbSAxZW0gLjVlbSAuNGVtO1xufVxuLnVpLWRpYWxvZyAudWktZGlhbG9nLWJ1dHRvbnBhbmUgLnVpLWRpYWxvZy1idXR0b25zZXQge1xuXHRmbG9hdDogcmlnaHQ7XG59XG4udWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZSBidXR0b24ge1xuXHRtYXJnaW46IC41ZW0gLjRlbSAuNWVtIDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbn1cbi51aS1kaWFsb2cgLnVpLXJlc2l6YWJsZS1zZSB7XG5cdHdpZHRoOiAxMnB4O1xuXHRoZWlnaHQ6IDEycHg7XG5cdHJpZ2h0OiAtNXB4O1xuXHRib3R0b206IC01cHg7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IDE2cHggMTZweDtcbn1cbi51aS1kcmFnZ2FibGUgLnVpLWRpYWxvZy10aXRsZWJhciB7XG5cdGN1cnNvcjogbW92ZTtcbn1cbi51aS1tZW51IHtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0cGFkZGluZzogMDtcblx0bWFyZ2luOiAwO1xuXHRkaXNwbGF5OiBibG9jaztcblx0b3V0bGluZTogbm9uZTtcbn1cbi51aS1tZW51IC51aS1tZW51IHtcblx0cG9zaXRpb246IGFic29sdXRlO1xufVxuLnVpLW1lbnUgLnVpLW1lbnUtaXRlbSB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAzcHggMWVtIDNweCAuNGVtO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdG1pbi1oZWlnaHQ6IDA7IC8qIHN1cHBvcnQ6IElFNyAqL1xuXHQvKiBzdXBwb3J0OiBJRTEwLCBzZWUgIzg4NDQgKi9cblx0bGlzdC1zdHlsZS1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQUFBQVAvLy95SDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUJSQUE3XCIpO1xufVxuLnVpLW1lbnUgLnVpLW1lbnUtZGl2aWRlciB7XG5cdG1hcmdpbjogNXB4IDA7XG5cdGhlaWdodDogMDtcblx0Zm9udC1zaXplOiAwO1xuXHRsaW5lLWhlaWdodDogMDtcblx0Ym9yZGVyLXdpZHRoOiAxcHggMCAwIDA7XG59XG4udWktbWVudSAudWktc3RhdGUtZm9jdXMsXG4udWktbWVudSAudWktc3RhdGUtYWN0aXZlIHtcblx0bWFyZ2luOiAtMXB4O1xufVxuXG4vKiBpY29uIHN1cHBvcnQgKi9cbi51aS1tZW51LWljb25zIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnVpLW1lbnUtaWNvbnMgLnVpLW1lbnUtaXRlbSB7XG5cdHBhZGRpbmctbGVmdDogMmVtO1xufVxuXG4vKiBsZWZ0LWFsaWduZWQgKi9cbi51aS1tZW51IC51aS1pY29uIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDA7XG5cdGJvdHRvbTogMDtcblx0bGVmdDogLjJlbTtcblx0bWFyZ2luOiBhdXRvIDA7XG59XG5cbi8qIHJpZ2h0LWFsaWduZWQgKi9cbi51aS1tZW51IC51aS1tZW51LWljb24ge1xuXHRsZWZ0OiBhdXRvO1xuXHRyaWdodDogMDtcbn1cbi51aS1wcm9ncmVzc2JhciB7XG5cdGhlaWdodDogMmVtO1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRvdmVyZmxvdzogaGlkZGVuO1xufVxuLnVpLXByb2dyZXNzYmFyIC51aS1wcm9ncmVzc2Jhci12YWx1ZSB7XG5cdG1hcmdpbjogLTFweDtcblx0aGVpZ2h0OiAxMDAlO1xufVxuLnVpLXByb2dyZXNzYmFyIC51aS1wcm9ncmVzc2Jhci1vdmVybGF5IHtcblx0YmFja2dyb3VuZDogdXJsKFwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoS0FBb0FJQUJBQUFBQVAvLy95SC9DMDVGVkZORFFWQkZNaTR3QXdFQUFBQWgrUVFKQVFBQkFDd0FBQUFBS0FBb0FBQUNrWXdOcVhyZEM1MkRTMDZhN01GWkkrNEZIQkNLb0RlV0tYcXltUHFHcXh2SnJYWmJNeDdUdGMrdzlYZ1UyRkIzbE95UVJXRVQySUZHaVU5bTFmckRWcHhaWmM2YmZId3Y0YzFZWFA2azFWZHkyOTJGYjZVa3V2RnRYcHZXU3pBK0h5Y1hKSFVYaUdZSWlNZzJSNlc0NTlnbldHZkhOZGpJcURXVnFlbUgyZWtwT2JrcE9scHBXVXFaaXFyNmVkcXFXUUFBSWZrRUNRRUFBUUFzQUFBQUFDZ0FLQUFBQXBTTWdabkdmYXFjZzFFMnV1ekRtbUhVQlI4UWlsOTVoaVBLcVduM2FxdExzUzE4eTdHMVN6TmVvd1dCRU50UWQrVDFKa3RQMDVuelBUZEpabFI2dlV4TldXalYrdlVXaFdOa1dGd3hsOVZwWlJlZFljZmxJT0xhZmFhMjhYZHNIL3lubGNjMXVQVkRaeFFJUjBLMjUrY0lDQ21vcUNlNW1HaFpPZmVZU1VoNXlKY0p5cmtaV1dwYVI4ZG9KMm80TllxNjJsQUFBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtWREk0WXkyMlpuSU5STnFvc3cwQnY3aTFneUhVa0ZqN29TYVdsdTNvdkM4R3hOc281Zmx1ejNxTFZoQlZlVC9MejdaVEh5eEw1ZERhbFFXUFZPc1FXdFJudXdYYUZUajlqVlZoOHBtYTlKalo0ellTajVaT3ltYTd1dW9sZmZoK0lSNWFXOTdjSHVCVVhLR0tYbEtqbitEaUhXTWNZSmFoNE4wbFlDTWxKT1hpcEdScjVxZGdvU1RycVdTcTZXRmwyeXBvYVVBQUFJZmtFQ1FFQUFRQXNBQUFBQUNnQUtBQUFBcGFFYjZITGdkL2lPN0ZOV3RjRldlK3VmT0RHalJmb2lKMmFrU2hidWViMHd0STUwem0wMnBidndmV0VNV0JRMXpLR2xMSWhza2lFUG05UjZ2Ulh4VjRaeldUMnlIT0dwV015b3JibEtsTnA4SG1IRWIvbENYamNXN2JtdFhQOFh0MjI5T1ZXUjFmb2QyZVdxTmZIdU1qWENQa0lHTmlsZU9pSW1WbUNPRW1vU2ZuM3lYbEpXbW9IR2hxcDZpbFl1V1lwbVRxS1VnQUFJZmtFQ1FFQUFRQXNBQUFBQUNnQUtBQUFBcGlFSDZrYjU4YmlRM0ZOV3RNRldXM2VOVmNvanVGR2ZxblpxU2VidVMwNnc1VjgwL1gwMnBLZTh6RndQNkVGV09UMWxERms4ckdFUmgxVFROT29jUTYxSG00WG0yVmV4VUhwemp5bVZpSHJGYmlFTHNlZlZybjZYS2ZudDJROUcvK1hkaWU0OTlYSGQyZzRoN2lvT0doWEdKYm9HQW5YU0Jub0J3S1l5ZmlvdWJaSjJIbjBSdVJaYWZsWk9pbDU2WnA2aWlvS1NYcFVBQUFoK1FRSkFRQUJBQ3dBQUFBQUtBQW9BQUFDa29RUnFSdm54dUk3a1UxYTFVVTViZDV0blNlT1pYaG1uNWxXSzNxTlRXdlJkUXhQOHF2YUMrL3lhWVF6WE83Qk12YVVFbUpSZDNUc2lNQWdzd21OWXJTZ1pkWXJUWDZ0U0hHWk83M2V6dUF3MnV4dVErQmJlWmZNeHNleFkzNSsvUWU0SjFpblYwZzR4M1dIdU1oSWwyalhPS1QyUStWVTVmZ29TVUk1MlZmWnlma0pHa2hhNmptWSthYVlkaXJxK2xRQUFDSDVCQWtCQUFFQUxBQUFBQUFvQUNnQUFBS1dCSUtwWWUwTDNZTktUb3Fzd1VsdnpuaWdkNHdpUjRLaFpyS3Q5VXBxaXA2MWk5RTN2TXZ4UmRIbGJFRmlFWGZrOVlBUll4T1paRDZWUTJwVXVuQm10UlhvMUxmOGhNVlZjTmw4SmFmVjM4YU0yL0Z1NVYxNkJuNjNyNnh0OTdqMDkrTVhTRmk0Qm5pR0ZhZTNoemJIOStoWUJ6a3B1VWg1YVptSHVhblpPWmdJdXZiR2lOZW9tQ25heHhhcDJ1cGFDWnNxKzFrQUFDSDVCQWtCQUFFQUxBQUFBQUFvQUNnQUFBS1hqSThCeTV6ZjRrT3hUVnJYTlZsdjFYMGQ4SUdaR0tMbk5wWXRtOExyOWNxVmV1T1N2Zk9XNzlEOWFESGl6TmhESmlkRlpoTnlkRWFoT2FESDZub210SmpwMXR1dEtvTldrdkE2SnFmUlZMSFUvUVVmYXU5bDJ4N0c1NGQxZmw5OTV4Y0lHQWRYcU1mQk5hZG9ZcmhIK01nMktCbHBWcGJsdUNpWG1NbloyU2g0R0JxSitja0lPcXFKNkxtS1NsbFptc29xNndwUUFBQWgrUVFKQVFBQkFDd0FBQUFBS0FBb0FBQUNsWXgvb0x2b3h1SkRrVTFhMVlVWmJKNTluU2QyWlhoV3FiUmEyL2dGOEd1MkRZM2lxczd5cnEreEJZRWtZdkZTTThhU1NPYkUrWmdSbDFCSEZaTnI3cFJDYXZaNUJXMjE0MmhZM0FOL3pXdHNtZjEycDlYeHhGbDJscExuMXJzZXp0ZlhaamRJV0lmMnM1ZEl0d2pZS0Jnbzl5ZzVwSGd6SlhURWVHbFp1ZW5weVBtcEdRb0tPV2tZbVNwYVNucUtpbGVJMkZBQUFDSDVCQWtCQUFFQUxBQUFBQUFvQUNnQUFBS1ZqQitndStqRzRrT1JUVnJWaFJsc25uMmRKM1psZUZhcHRGcmIrQ1htTzlPb3plTDVWZlA5OUh2QVdocGlVZGN3a3BCSDM4MjVBd1lkVTh4VHFsTEdodENvc0FyS01wdmZhMW1NUmFlOVZ2V1pmZUIyWGZQa2VMbW0xOGxVY0JqK3A1ZG5OOGpYWjNZSUdFaFl1T1VuNDVhb0NEa3AxNmhsNUlqWUp2aldLY25vR1FwcXlQbHBPaHIzYUVsYXFycTU2QnE3VkFBQU93PT1cIik7XG5cdGhlaWdodDogMTAwJTtcblx0ZmlsdGVyOiBhbHBoYShvcGFjaXR5PTI1KTsgLyogc3VwcG9ydDogSUU4ICovXG5cdG9wYWNpdHk6IDAuMjU7XG59XG4udWktcHJvZ3Jlc3NiYXItaW5kZXRlcm1pbmF0ZSAudWktcHJvZ3Jlc3NiYXItdmFsdWUge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xufVxuLnVpLXNlbGVjdG1lbnUtbWVudSB7XG5cdHBhZGRpbmc6IDA7XG5cdG1hcmdpbjogMDtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDA7XG5cdGxlZnQ6IDA7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG4udWktc2VsZWN0bWVudS1tZW51IC51aS1tZW51IHtcblx0b3ZlcmZsb3c6IGF1dG87XG5cdC8qIFN1cHBvcnQ6IElFNyAqL1xuXHRvdmVyZmxvdy14OiBoaWRkZW47XG5cdHBhZGRpbmctYm90dG9tOiAxcHg7XG59XG4udWktc2VsZWN0bWVudS1tZW51IC51aS1tZW51IC51aS1zZWxlY3RtZW51LW9wdGdyb3VwIHtcblx0Zm9udC1zaXplOiAxZW07XG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xuXHRsaW5lLWhlaWdodDogMS41O1xuXHRwYWRkaW5nOiAycHggMC40ZW07XG5cdG1hcmdpbjogMC41ZW0gMCAwIDA7XG5cdGhlaWdodDogYXV0bztcblx0Ym9yZGVyOiAwO1xufVxuLnVpLXNlbGVjdG1lbnUtb3BlbiB7XG5cdGRpc3BsYXk6IGJsb2NrO1xufVxuLnVpLXNlbGVjdG1lbnUtYnV0dG9uIHtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuLnVpLXNlbGVjdG1lbnUtYnV0dG9uIHNwYW4udWktaWNvbiB7XG5cdHJpZ2h0OiAwLjVlbTtcblx0bGVmdDogYXV0bztcblx0bWFyZ2luLXRvcDogLThweDtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDUwJTtcbn1cbi51aS1zZWxlY3RtZW51LWJ1dHRvbiBzcGFuLnVpLXNlbGVjdG1lbnUtdGV4dCB7XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDAuNGVtIDIuMWVtIDAuNGVtIDFlbTtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGxpbmUtaGVpZ2h0OiAxLjQ7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuLnVpLXNsaWRlciB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0dGV4dC1hbGlnbjogbGVmdDtcbn1cbi51aS1zbGlkZXIgLnVpLXNsaWRlci1oYW5kbGUge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHotaW5kZXg6IDI7XG5cdHdpZHRoOiAxLjJlbTtcblx0aGVpZ2h0OiAxLjJlbTtcblx0Y3Vyc29yOiBkZWZhdWx0O1xuXHQtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xuXHR0b3VjaC1hY3Rpb246IG5vbmU7XG59XG4udWktc2xpZGVyIC51aS1zbGlkZXItcmFuZ2Uge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHotaW5kZXg6IDE7XG5cdGZvbnQtc2l6ZTogLjdlbTtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xufVxuXG4vKiBzdXBwb3J0OiBJRTggLSBTZWUgIzY3MjcgKi9cbi51aS1zbGlkZXIudWktc3RhdGUtZGlzYWJsZWQgLnVpLXNsaWRlci1oYW5kbGUsXG4udWktc2xpZGVyLnVpLXN0YXRlLWRpc2FibGVkIC51aS1zbGlkZXItcmFuZ2Uge1xuXHRmaWx0ZXI6IGluaGVyaXQ7XG59XG5cbi51aS1zbGlkZXItaG9yaXpvbnRhbCB7XG5cdGhlaWdodDogLjhlbTtcbn1cbi51aS1zbGlkZXItaG9yaXpvbnRhbCAudWktc2xpZGVyLWhhbmRsZSB7XG5cdHRvcDogLS4zZW07XG5cdG1hcmdpbi1sZWZ0OiAtLjZlbTtcbn1cbi51aS1zbGlkZXItaG9yaXpvbnRhbCAudWktc2xpZGVyLXJhbmdlIHtcblx0dG9wOiAwO1xuXHRoZWlnaHQ6IDEwMCU7XG59XG4udWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1yYW5nZS1taW4ge1xuXHRsZWZ0OiAwO1xufVxuLnVpLXNsaWRlci1ob3Jpem9udGFsIC51aS1zbGlkZXItcmFuZ2UtbWF4IHtcblx0cmlnaHQ6IDA7XG59XG5cbi51aS1zbGlkZXItdmVydGljYWwge1xuXHR3aWR0aDogLjhlbTtcblx0aGVpZ2h0OiAxMDBweDtcbn1cbi51aS1zbGlkZXItdmVydGljYWwgLnVpLXNsaWRlci1oYW5kbGUge1xuXHRsZWZ0OiAtLjNlbTtcblx0bWFyZ2luLWxlZnQ6IDA7XG5cdG1hcmdpbi1ib3R0b206IC0uNmVtO1xufVxuLnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLXJhbmdlIHtcblx0bGVmdDogMDtcblx0d2lkdGg6IDEwMCU7XG59XG4udWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItcmFuZ2UtbWluIHtcblx0Ym90dG9tOiAwO1xufVxuLnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLXJhbmdlLW1heCB7XG5cdHRvcDogMDtcbn1cbi51aS1zcGlubmVyIHtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdHBhZGRpbmc6IDA7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4udWktc3Bpbm5lci1pbnB1dCB7XG5cdGJvcmRlcjogbm9uZTtcblx0YmFja2dyb3VuZDogbm9uZTtcblx0Y29sb3I6IGluaGVyaXQ7XG5cdHBhZGRpbmc6IDA7XG5cdG1hcmdpbjogLjJlbSAwO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRtYXJnaW4tbGVmdDogLjRlbTtcblx0bWFyZ2luLXJpZ2h0OiAyMnB4O1xufVxuLnVpLXNwaW5uZXItYnV0dG9uIHtcblx0d2lkdGg6IDE2cHg7XG5cdGhlaWdodDogNTAlO1xuXHRmb250LXNpemU6IC41ZW07XG5cdHBhZGRpbmc6IDA7XG5cdG1hcmdpbjogMDtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGN1cnNvcjogZGVmYXVsdDtcblx0ZGlzcGxheTogYmxvY2s7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdHJpZ2h0OiAwO1xufVxuLyogbW9yZSBzcGVjaWZpY2l0eSByZXF1aXJlZCBoZXJlIHRvIG92ZXJyaWRlIGRlZmF1bHQgYm9yZGVycyAqL1xuLnVpLXNwaW5uZXIgYS51aS1zcGlubmVyLWJ1dHRvbiB7XG5cdGJvcmRlci10b3A6IG5vbmU7XG5cdGJvcmRlci1ib3R0b206IG5vbmU7XG5cdGJvcmRlci1yaWdodDogbm9uZTtcbn1cbi8qIHZlcnRpY2FsbHkgY2VudGVyIGljb24gKi9cbi51aS1zcGlubmVyIC51aS1pY29uIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRtYXJnaW4tdG9wOiAtOHB4O1xuXHR0b3A6IDUwJTtcblx0bGVmdDogMDtcbn1cbi51aS1zcGlubmVyLXVwIHtcblx0dG9wOiAwO1xufVxuLnVpLXNwaW5uZXItZG93biB7XG5cdGJvdHRvbTogMDtcbn1cblxuLyogVFIgb3ZlcnJpZGVzICovXG4udWktc3Bpbm5lciAudWktaWNvbi10cmlhbmdsZS0xLXMge1xuXHQvKiBuZWVkIHRvIGZpeCBpY29ucyBzcHJpdGUgKi9cblx0YmFja2dyb3VuZC1wb3NpdGlvbjogLTY1cHggLTE2cHg7XG59XG4udWktdGFicyB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTsvKiBwb3NpdGlvbjogcmVsYXRpdmUgcHJldmVudHMgSUUgc2Nyb2xsIGJ1ZyAoZWxlbWVudCB3aXRoIHBvc2l0aW9uOiByZWxhdGl2ZSBpbnNpZGUgY29udGFpbmVyIHdpdGggb3ZlcmZsb3c6IGF1dG8gYXBwZWFyIGFzIFwiZml4ZWRcIikgKi9cblx0cGFkZGluZzogLjJlbTtcbn1cbi51aS10YWJzIC51aS10YWJzLW5hdiB7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogLjJlbSAuMmVtIDA7XG59XG4udWktdGFicyAudWktdGFicy1uYXYgbGkge1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRmbG9hdDogbGVmdDtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHR0b3A6IDA7XG5cdG1hcmdpbjogMXB4IC4yZW0gMCAwO1xuXHRib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuXHRwYWRkaW5nOiAwO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuLnVpLXRhYnMgLnVpLXRhYnMtbmF2IC51aS10YWJzLWFuY2hvciB7XG5cdGZsb2F0OiBsZWZ0O1xuXHRwYWRkaW5nOiAuNWVtIDFlbTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpLnVpLXRhYnMtYWN0aXZlIHtcblx0bWFyZ2luLWJvdHRvbTogLTFweDtcblx0cGFkZGluZy1ib3R0b206IDFweDtcbn1cbi51aS10YWJzIC51aS10YWJzLW5hdiBsaS51aS10YWJzLWFjdGl2ZSAudWktdGFicy1hbmNob3IsXG4udWktdGFicyAudWktdGFicy1uYXYgbGkudWktc3RhdGUtZGlzYWJsZWQgLnVpLXRhYnMtYW5jaG9yLFxuLnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpLnVpLXRhYnMtbG9hZGluZyAudWktdGFicy1hbmNob3Ige1xuXHRjdXJzb3I6IHRleHQ7XG59XG4udWktdGFicy1jb2xsYXBzaWJsZSAudWktdGFicy1uYXYgbGkudWktdGFicy1hY3RpdmUgLnVpLXRhYnMtYW5jaG9yIHtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuLnVpLXRhYnMgLnVpLXRhYnMtcGFuZWwge1xuXHRkaXNwbGF5OiBibG9jaztcblx0Ym9yZGVyLXdpZHRoOiAwO1xuXHRwYWRkaW5nOiAxZW0gMS40ZW07XG5cdGJhY2tncm91bmQ6IG5vbmU7XG59XG4udWktdG9vbHRpcCB7XG5cdHBhZGRpbmc6IDhweDtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR6LWluZGV4OiA5OTk5O1xuXHRtYXgtd2lkdGg6IDMwMHB4O1xuXHQtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA1cHggI2FhYTtcblx0Ym94LXNoYWRvdzogMCAwIDVweCAjYWFhO1xufVxuYm9keSAudWktdG9vbHRpcCB7XG5cdGJvcmRlci13aWR0aDogMnB4O1xufVxuIiwiLyohXHJcbiAqIGpRdWVyeSBVSSBDU1MgRnJhbWV3b3JrIDEuMTEuNFxyXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXHJcbiAqXHJcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXHJcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cclxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxyXG4gKlxyXG4gKiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9jYXRlZ29yeS90aGVtaW5nL1xyXG4gKlxyXG4gKiBUbyB2aWV3IGFuZCBtb2RpZnkgdGhpcyB0aGVtZSwgdmlzaXQgaHR0cDovL2pxdWVyeXVpLmNvbS90aGVtZXJvbGxlci8/ZmZEZWZhdWx0PVZlcmRhbmElMkNBcmlhbCUyQ3NhbnMtc2VyaWYmZndEZWZhdWx0PW5vcm1hbCZmc0RlZmF1bHQ9MS4xZW0mY29ybmVyUmFkaXVzPTRweCZiZ0NvbG9ySGVhZGVyPWNjY2NjYyZiZ1RleHR1cmVIZWFkZXI9aGlnaGxpZ2h0X3NvZnQmYmdJbWdPcGFjaXR5SGVhZGVyPTc1JmJvcmRlckNvbG9ySGVhZGVyPWFhYWFhYSZmY0hlYWRlcj0yMjIyMjImaWNvbkNvbG9ySGVhZGVyPTIyMjIyMiZiZ0NvbG9yQ29udGVudD1mZmZmZmYmYmdUZXh0dXJlQ29udGVudD1mbGF0JmJnSW1nT3BhY2l0eUNvbnRlbnQ9NzUmYm9yZGVyQ29sb3JDb250ZW50PWFhYWFhYSZmY0NvbnRlbnQ9MjIyMjIyJmljb25Db2xvckNvbnRlbnQ9MjIyMjIyJmJnQ29sb3JEZWZhdWx0PWU2ZTZlNiZiZ1RleHR1cmVEZWZhdWx0PWdsYXNzJmJnSW1nT3BhY2l0eURlZmF1bHQ9NzUmYm9yZGVyQ29sb3JEZWZhdWx0PWQzZDNkMyZmY0RlZmF1bHQ9NTU1NTU1Jmljb25Db2xvckRlZmF1bHQ9ODg4ODg4JmJnQ29sb3JIb3Zlcj1kYWRhZGEmYmdUZXh0dXJlSG92ZXI9Z2xhc3MmYmdJbWdPcGFjaXR5SG92ZXI9NzUmYm9yZGVyQ29sb3JIb3Zlcj05OTk5OTkmZmNIb3Zlcj0yMTIxMjEmaWNvbkNvbG9ySG92ZXI9NDU0NTQ1JmJnQ29sb3JBY3RpdmU9ZmZmZmZmJmJnVGV4dHVyZUFjdGl2ZT1nbGFzcyZiZ0ltZ09wYWNpdHlBY3RpdmU9NjUmYm9yZGVyQ29sb3JBY3RpdmU9YWFhYWFhJmZjQWN0aXZlPTIxMjEyMSZpY29uQ29sb3JBY3RpdmU9NDU0NTQ1JmJnQ29sb3JIaWdobGlnaHQ9ZmJmOWVlJmJnVGV4dHVyZUhpZ2hsaWdodD1nbGFzcyZiZ0ltZ09wYWNpdHlIaWdobGlnaHQ9NTUmYm9yZGVyQ29sb3JIaWdobGlnaHQ9ZmNlZmExJmZjSGlnaGxpZ2h0PTM2MzYzNiZpY29uQ29sb3JIaWdobGlnaHQ9MmU4M2ZmJmJnQ29sb3JFcnJvcj1mZWYxZWMmYmdUZXh0dXJlRXJyb3I9Z2xhc3MmYmdJbWdPcGFjaXR5RXJyb3I9OTUmYm9yZGVyQ29sb3JFcnJvcj1jZDBhMGEmZmNFcnJvcj1jZDBhMGEmaWNvbkNvbG9yRXJyb3I9Y2QwYTBhJmJnQ29sb3JPdmVybGF5PWFhYWFhYSZiZ1RleHR1cmVPdmVybGF5PWZsYXQmYmdJbWdPcGFjaXR5T3ZlcmxheT0wJm9wYWNpdHlPdmVybGF5PTMwJmJnQ29sb3JTaGFkb3c9YWFhYWFhJmJnVGV4dHVyZVNoYWRvdz1mbGF0JmJnSW1nT3BhY2l0eVNoYWRvdz0wJm9wYWNpdHlTaGFkb3c9MzAmdGhpY2tuZXNzU2hhZG93PThweCZvZmZzZXRUb3BTaGFkb3c9LThweCZvZmZzZXRMZWZ0U2hhZG93PS04cHgmY29ybmVyUmFkaXVzU2hhZG93PThweFxyXG4gKi9cclxuXHJcblxyXG4vKiBDb21wb25lbnQgY29udGFpbmVyc1xyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuLnVpLXdpZGdldCB7XHJcblx0Zm9udC1mYW1pbHk6IFZlcmRhbmEsQXJpYWwsc2Fucy1zZXJpZjtcclxuXHRmb250LXNpemU6IDEuMWVtO1xyXG59XHJcbi51aS13aWRnZXQgLnVpLXdpZGdldCB7XHJcblx0Zm9udC1zaXplOiAxZW07XHJcbn1cclxuLnVpLXdpZGdldCBpbnB1dCxcclxuLnVpLXdpZGdldCBzZWxlY3QsXHJcbi51aS13aWRnZXQgdGV4dGFyZWEsXHJcbi51aS13aWRnZXQgYnV0dG9uIHtcclxuXHRmb250LWZhbWlseTogVmVyZGFuYSxBcmlhbCxzYW5zLXNlcmlmO1xyXG5cdGZvbnQtc2l6ZTogMWVtO1xyXG59XHJcbi51aS13aWRnZXQtY29udGVudCB7XHJcblx0Ym9yZGVyOiAxcHggc29saWQgI2FhYWFhYTtcclxuXHRiYWNrZ3JvdW5kOiAjZmZmZmZmO1xyXG5cdGNvbG9yOiAjMjIyMjIyO1xyXG59XHJcbi51aS13aWRnZXQtY29udGVudCBhIHtcclxuXHRjb2xvcjogIzIyMjIyMjtcclxufVxyXG4udWktd2lkZ2V0LWhlYWRlciB7XHJcblx0Ym9yZGVyOiAxcHggc29saWQgI2FhYWFhYTtcclxuXHRiYWNrZ3JvdW5kOiAjY2NjY2NjIHVybChcImltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF83NV9jY2NjY2NfMXgxMDAucG5nXCIpIDUwJSA1MCUgcmVwZWF0LXg7XHJcblx0Y29sb3I6ICMyMjIyMjI7XHJcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuLnVpLXdpZGdldC1oZWFkZXIgYSB7XHJcblx0Y29sb3I6ICMyMjIyMjI7XHJcbn1cclxuXHJcbi8qIEludGVyYWN0aW9uIHN0YXRlc1xyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuLnVpLXN0YXRlLWRlZmF1bHQsXHJcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGVmYXVsdCxcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRlZmF1bHQge1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNkM2QzZDM7XHJcblx0YmFja2dyb3VuZDogI2U2ZTZlNiB1cmwoXCJpbWFnZXMvdWktYmdfZ2xhc3NfNzVfZTZlNmU2XzF4NDAwLnBuZ1wiKSA1MCUgNTAlIHJlcGVhdC14O1xyXG5cdGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcblx0Y29sb3I6ICM1NTU1NTU7XHJcbn1cclxuLnVpLXN0YXRlLWRlZmF1bHQgYSxcclxuLnVpLXN0YXRlLWRlZmF1bHQgYTpsaW5rLFxyXG4udWktc3RhdGUtZGVmYXVsdCBhOnZpc2l0ZWQge1xyXG5cdGNvbG9yOiAjNTU1NTU1O1xyXG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxufVxyXG4udWktc3RhdGUtaG92ZXIsXHJcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaG92ZXIsXHJcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1ob3ZlcixcclxuLnVpLXN0YXRlLWZvY3VzLFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWZvY3VzLFxyXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZm9jdXMge1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICM5OTk5OTk7XHJcblx0YmFja2dyb3VuZDogI2RhZGFkYSB1cmwoXCJpbWFnZXMvdWktYmdfZ2xhc3NfNzVfZGFkYWRhXzF4NDAwLnBuZ1wiKSA1MCUgNTAlIHJlcGVhdC14O1xyXG5cdGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcblx0Y29sb3I6ICMyMTIxMjE7XHJcbn1cclxuLnVpLXN0YXRlLWhvdmVyIGEsXHJcbi51aS1zdGF0ZS1ob3ZlciBhOmhvdmVyLFxyXG4udWktc3RhdGUtaG92ZXIgYTpsaW5rLFxyXG4udWktc3RhdGUtaG92ZXIgYTp2aXNpdGVkLFxyXG4udWktc3RhdGUtZm9jdXMgYSxcclxuLnVpLXN0YXRlLWZvY3VzIGE6aG92ZXIsXHJcbi51aS1zdGF0ZS1mb2N1cyBhOmxpbmssXHJcbi51aS1zdGF0ZS1mb2N1cyBhOnZpc2l0ZWQge1xyXG5cdGNvbG9yOiAjMjEyMTIxO1xyXG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxufVxyXG4udWktc3RhdGUtYWN0aXZlLFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWFjdGl2ZSxcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWFjdGl2ZSB7XHJcblx0Ym9yZGVyOiAxcHggc29saWQgI2FhYWFhYTtcclxuXHRiYWNrZ3JvdW5kOiAjZmZmZmZmIHVybChcImltYWdlcy91aS1iZ19nbGFzc182NV9mZmZmZmZfMXg0MDAucG5nXCIpIDUwJSA1MCUgcmVwZWF0LXg7XHJcblx0Zm9udC13ZWlnaHQ6IG5vcm1hbDtcclxuXHRjb2xvcjogIzIxMjEyMTtcclxufVxyXG4udWktc3RhdGUtYWN0aXZlIGEsXHJcbi51aS1zdGF0ZS1hY3RpdmUgYTpsaW5rLFxyXG4udWktc3RhdGUtYWN0aXZlIGE6dmlzaXRlZCB7XHJcblx0Y29sb3I6ICMyMTIxMjE7XHJcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG59XHJcblxyXG4vKiBJbnRlcmFjdGlvbiBDdWVzXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4udWktc3RhdGUtaGlnaGxpZ2h0LFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCxcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCB7XHJcblx0Ym9yZGVyOiAxcHggc29saWQgI2ZjZWZhMTtcclxuXHRiYWNrZ3JvdW5kOiAjZmJmOWVlIHVybChcImltYWdlcy91aS1iZ19nbGFzc181NV9mYmY5ZWVfMXg0MDAucG5nXCIpIDUwJSA1MCUgcmVwZWF0LXg7XHJcblx0Y29sb3I6ICMzNjM2MzY7XHJcbn1cclxuLnVpLXN0YXRlLWhpZ2hsaWdodCBhLFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCBhLFxyXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0IGEge1xyXG5cdGNvbG9yOiAjMzYzNjM2O1xyXG59XHJcbi51aS1zdGF0ZS1lcnJvcixcclxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvcixcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9yIHtcclxuXHRib3JkZXI6IDFweCBzb2xpZCAjY2QwYTBhO1xyXG5cdGJhY2tncm91bmQ6ICNmZWYxZWMgdXJsKFwiaW1hZ2VzL3VpLWJnX2dsYXNzXzk1X2ZlZjFlY18xeDQwMC5wbmdcIikgNTAlIDUwJSByZXBlYXQteDtcclxuXHRjb2xvcjogI2NkMGEwYTtcclxufVxyXG4udWktc3RhdGUtZXJyb3IgYSxcclxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciBhLFxyXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3IgYSB7XHJcblx0Y29sb3I6ICNjZDBhMGE7XHJcbn1cclxuLnVpLXN0YXRlLWVycm9yLXRleHQsXHJcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3ItdGV4dCxcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9yLXRleHQge1xyXG5cdGNvbG9yOiAjY2QwYTBhO1xyXG59XHJcbi51aS1wcmlvcml0eS1wcmltYXJ5LFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXByaW1hcnksXHJcbi51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1wcmltYXJ5IHtcclxuXHRmb250LXdlaWdodDogYm9sZDtcclxufVxyXG4udWktcHJpb3JpdHktc2Vjb25kYXJ5LFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXNlY29uZGFyeSxcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXByaW9yaXR5LXNlY29uZGFyeSB7XHJcblx0b3BhY2l0eTogLjc7XHJcblx0ZmlsdGVyOkFscGhhKE9wYWNpdHk9NzApOyAvKiBzdXBwb3J0OiBJRTggKi9cclxuXHRmb250LXdlaWdodDogbm9ybWFsO1xyXG59XHJcbi51aS1zdGF0ZS1kaXNhYmxlZCxcclxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kaXNhYmxlZCxcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRpc2FibGVkIHtcclxuXHRvcGFjaXR5OiAuMzU7XHJcblx0ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpOyAvKiBzdXBwb3J0OiBJRTggKi9cclxuXHRiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xyXG59XHJcbi51aS1zdGF0ZS1kaXNhYmxlZCAudWktaWNvbiB7XHJcblx0ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpOyAvKiBzdXBwb3J0OiBJRTggLSBTZWUgIzYwNTkgKi9cclxufVxyXG5cclxuLyogSWNvbnNcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4vKiBzdGF0ZXMgYW5kIGltYWdlcyAqL1xyXG4udWktaWNvbiB7XHJcblx0d2lkdGg6IDE2cHg7XHJcblx0aGVpZ2h0OiAxNnB4O1xyXG59XHJcbi51aS1pY29uLFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLWljb24ge1xyXG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc18yMjIyMjJfMjU2eDI0MC5wbmdcIik7XHJcbn1cclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLWljb24ge1xyXG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc18yMjIyMjJfMjU2eDI0MC5wbmdcIik7XHJcbn1cclxuLnVpLXN0YXRlLWRlZmF1bHQgLnVpLWljb24ge1xyXG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc184ODg4ODhfMjU2eDI0MC5wbmdcIik7XHJcbn1cclxuLnVpLXN0YXRlLWhvdmVyIC51aS1pY29uLFxyXG4udWktc3RhdGUtZm9jdXMgLnVpLWljb24ge1xyXG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc180NTQ1NDVfMjU2eDI0MC5wbmdcIik7XHJcbn1cclxuLnVpLXN0YXRlLWFjdGl2ZSAudWktaWNvbiB7XHJcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiaW1hZ2VzL3VpLWljb25zXzQ1NDU0NV8yNTZ4MjQwLnBuZ1wiKTtcclxufVxyXG4udWktc3RhdGUtaGlnaGxpZ2h0IC51aS1pY29uIHtcclxuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfMmU4M2ZmXzI1NngyNDAucG5nXCIpO1xyXG59XHJcbi51aS1zdGF0ZS1lcnJvciAudWktaWNvbixcclxuLnVpLXN0YXRlLWVycm9yLXRleHQgLnVpLWljb24ge1xyXG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc19jZDBhMGFfMjU2eDI0MC5wbmdcIik7XHJcbn1cclxuXHJcbi8qIHBvc2l0aW9uaW5nICovXHJcbi51aS1pY29uLWJsYW5rIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMTZweCAxNnB4OyB9XHJcbi51aS1pY29uLWNhcmF0LTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfVxyXG4udWktaWNvbi1jYXJhdC0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggMDsgfVxyXG4udWktaWNvbi1jYXJhdC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAwOyB9XHJcbi51aS1pY29uLWNhcmF0LTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAwOyB9XHJcbi51aS1pY29uLWNhcmF0LTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IDA7IH1cclxuLnVpLWljb24tY2FyYXQtMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IDA7IH1cclxuLnVpLWljb24tY2FyYXQtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggMDsgfVxyXG4udWktaWNvbi1jYXJhdC0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IDA7IH1cclxuLnVpLWljb24tY2FyYXQtMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggMDsgfVxyXG4udWktaWNvbi1jYXJhdC0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAwOyB9XHJcbi51aS1pY29uLXRyaWFuZ2xlLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2cHg7IH1cclxuLnVpLWljb24tdHJpYW5nbGUtMS1uZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNnB4OyB9XHJcbi51aS1pY29uLXRyaWFuZ2xlLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNnB4OyB9XHJcbi51aS1pY29uLXRyaWFuZ2xlLTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTZweDsgfVxyXG4udWktaWNvbi10cmlhbmdsZS0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTZweDsgfVxyXG4udWktaWNvbi10cmlhbmdsZS0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE2cHg7IH1cclxuLnVpLWljb24tdHJpYW5nbGUtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2cHg7IH1cclxuLnVpLWljb24tdHJpYW5nbGUtMS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTZweDsgfVxyXG4udWktaWNvbi10cmlhbmdsZS0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTZweDsgfVxyXG4udWktaWNvbi10cmlhbmdsZS0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTZweDsgfVxyXG4udWktaWNvbi1hcnJvdy0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93LTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvdy0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvdy0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3ctMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3ctMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93LTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93LTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3ctMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3ctMi1uZS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvdy0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvdy0yLXNlLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93c3RvcC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3dzdG9wLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvd3N0b3AtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93c3RvcC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGljay0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMS1uZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGljay0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGljay0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrLTItbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMi1uZS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrLTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMi1zZS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTY0cHg7IH1cclxuLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNjRweDsgfVxyXG4udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmV0dXJuLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmV0dXJuLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmV0dXJuLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmV0dXJuLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtNjRweDsgfVxyXG4udWktaWNvbi1hcnJvd3JlZnJlc2gtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmVmcmVzaC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTY0cHg7IH1cclxuLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtNjRweDsgfVxyXG4udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93LTQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04MHB4OyB9XHJcbi51aS1pY29uLWFycm93LTQtZGlhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC04MHB4OyB9XHJcbi51aS1pY29uLWV4dGxpbmsgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtODBweDsgfVxyXG4udWktaWNvbi1uZXd3aW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtODBweDsgfVxyXG4udWktaWNvbi1yZWZyZXNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTgwcHg7IH1cclxuLnVpLWljb24tc2h1ZmZsZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC04MHB4OyB9XHJcbi51aS1pY29uLXRyYW5zZmVyLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC04MHB4OyB9XHJcbi51aS1pY29uLXRyYW5zZmVydGhpY2stZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC04MHB4OyB9XHJcbi51aS1pY29uLWZvbGRlci1jb2xsYXBzZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyB9XHJcbi51aS1pY29uLWZvbGRlci1vcGVuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTk2cHg7IH1cclxuLnVpLWljb24tZG9jdW1lbnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtOTZweDsgfVxyXG4udWktaWNvbi1kb2N1bWVudC1iIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTk2cHg7IH1cclxuLnVpLWljb24tbm90ZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC05NnB4OyB9XHJcbi51aS1pY29uLW1haWwtY2xvc2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTk2cHg7IH1cclxuLnVpLWljb24tbWFpbC1vcGVuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTk2cHg7IH1cclxuLnVpLWljb24tc3VpdGNhc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTk2cHg7IH1cclxuLnVpLWljb24tY29tbWVudCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtOTZweDsgfVxyXG4udWktaWNvbi1wZXJzb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTk2cHg7IH1cclxuLnVpLWljb24tcHJpbnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTk2cHg7IH1cclxuLnVpLWljb24tdHJhc2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTk2cHg7IH1cclxuLnVpLWljb24tbG9ja2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC05NnB4OyB9XHJcbi51aS1pY29uLXVubG9ja2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC05NnB4OyB9XHJcbi51aS1pY29uLWJvb2ttYXJrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC05NnB4OyB9XHJcbi51aS1pY29uLXRhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtOTZweDsgfVxyXG4udWktaWNvbi1ob21lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTEycHg7IH1cclxuLnVpLWljb24tZmxhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1jYWxlbmRhciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1jYXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTExMnB4OyB9XHJcbi51aS1pY29uLXBlbmNpbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1jbG9jayB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1kaXNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTExMnB4OyB9XHJcbi51aS1pY29uLWNhbGN1bGF0b3IgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTExMnB4OyB9XHJcbi51aS1pY29uLXpvb21pbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTEycHg7IH1cclxuLnVpLWljb24tem9vbW91dCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTEycHg7IH1cclxuLnVpLWljb24tc2VhcmNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xMTJweDsgfVxyXG4udWktaWNvbi13cmVuY2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTExMnB4OyB9XHJcbi51aS1pY29uLWdlYXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTExMnB4OyB9XHJcbi51aS1pY29uLWhlYXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1zdGFyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1saW5rIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1jYW5jZWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMjhweDsgfVxyXG4udWktaWNvbi1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTEyOHB4OyB9XHJcbi51aS1pY29uLXBsdXN0aGljayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1taW51c3RoaWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTEyOHB4OyB9XHJcbi51aS1pY29uLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTEyOHB4OyB9XHJcbi51aS1pY29uLWNsb3NldGhpY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTI4cHg7IH1cclxuLnVpLWljb24ta2V5IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1saWdodGJ1bGIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTEyOHB4OyB9XHJcbi51aS1pY29uLXNjaXNzb3JzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1jbGlwYm9hcmQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTEyOHB4OyB9XHJcbi51aS1pY29uLWNvcHkgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTEyOHB4OyB9XHJcbi51aS1pY29uLWNvbnRhY3QgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTEyOHB4OyB9XHJcbi51aS1pY29uLWltYWdlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xMjhweDsgfVxyXG4udWktaWNvbi12aWRlbyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTI4cHg7IH1cclxuLnVpLWljb24tc2NyaXB0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1hbGVydCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE0NHB4OyB9XHJcbi51aS1pY29uLWluZm8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTQ0cHg7IH1cclxuLnVpLWljb24tbm90aWNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE0NHB4OyB9XHJcbi51aS1pY29uLWhlbHAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTQ0cHg7IH1cclxuLnVpLWljb24tY2hlY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTQ0cHg7IH1cclxuLnVpLWljb24tYnVsbGV0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE0NHB4OyB9XHJcbi51aS1pY29uLXJhZGlvLW9uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE0NHB4OyB9XHJcbi51aS1pY29uLXJhZGlvLW9mZiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTQ0cHg7IH1cclxuLnVpLWljb24tcGluLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE0NHB4OyB9XHJcbi51aS1pY29uLXBpbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNDRweDsgfVxyXG4udWktaWNvbi1wbGF5IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTYwcHg7IH1cclxuLnVpLWljb24tcGF1c2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTYwcHg7IH1cclxuLnVpLWljb24tc2Vlay1uZXh0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE2MHB4OyB9XHJcbi51aS1pY29uLXNlZWstcHJldiB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNjBweDsgfVxyXG4udWktaWNvbi1zZWVrLWVuZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNjBweDsgfVxyXG4udWktaWNvbi1zZWVrLXN0YXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE2MHB4OyB9XHJcbi8qIHVpLWljb24tc2Vlay1maXJzdCBpcyBkZXByZWNhdGVkLCB1c2UgdWktaWNvbi1zZWVrLXN0YXJ0IGluc3RlYWQgKi9cclxuLnVpLWljb24tc2Vlay1maXJzdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNjBweDsgfVxyXG4udWktaWNvbi1zdG9wIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2MHB4OyB9XHJcbi51aS1pY29uLWVqZWN0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNjBweDsgfVxyXG4udWktaWNvbi12b2x1bWUtb2ZmIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNjBweDsgfVxyXG4udWktaWNvbi12b2x1bWUtb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2MHB4OyB9XHJcbi51aS1pY29uLXBvd2VyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTc2cHg7IH1cclxuLnVpLWljb24tc2lnbmFsLWRpYWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTc2cHg7IH1cclxuLnVpLWljb24tc2lnbmFsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE3NnB4OyB9XHJcbi51aS1pY29uLWJhdHRlcnktMCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNzZweDsgfVxyXG4udWktaWNvbi1iYXR0ZXJ5LTEgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTc2cHg7IH1cclxuLnVpLWljb24tYmF0dGVyeS0yIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE3NnB4OyB9XHJcbi51aS1pY29uLWJhdHRlcnktMyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNzZweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLWFycm93LWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS1hcnJvdy1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtYXJyb3ctdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLWFycm93LW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS16b29taW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS16b29tb3V0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtY2hlY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZXNtYWxsLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMDhweDsgfVxyXG4udWktaWNvbi1jaXJjbGVzbWFsbC1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMDhweDsgfVxyXG4udWktaWNvbi1jaXJjbGVzbWFsbC1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0yMDhweDsgfVxyXG4udWktaWNvbi1zcXVhcmVzbWFsbC1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTIwOHB4OyB9XHJcbi51aS1pY29uLXNxdWFyZXNtYWxsLW1pbnVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTIwOHB4OyB9XHJcbi51aS1pY29uLXNxdWFyZXNtYWxsLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTIwOHB4OyB9XHJcbi51aS1pY29uLWdyaXAtZG90dGVkLXZlcnRpY2FsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjI0cHg7IH1cclxuLnVpLWljb24tZ3JpcC1kb3R0ZWQtaG9yaXpvbnRhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMjRweDsgfVxyXG4udWktaWNvbi1ncmlwLXNvbGlkLXZlcnRpY2FsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTIyNHB4OyB9XHJcbi51aS1pY29uLWdyaXAtc29saWQtaG9yaXpvbnRhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0yMjRweDsgfVxyXG4udWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMjI0cHg7IH1cclxuLnVpLWljb24tZ3JpcC1kaWFnb25hbC1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0yMjRweDsgfVxyXG5cclxuXHJcbi8qIE1pc2MgdmlzdWFsc1xyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbi8qIENvcm5lciByYWRpdXMgKi9cclxuLnVpLWNvcm5lci1hbGwsXHJcbi51aS1jb3JuZXItdG9wLFxyXG4udWktY29ybmVyLWxlZnQsXHJcbi51aS1jb3JuZXItdGwge1xyXG5cdGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDtcclxufVxyXG4udWktY29ybmVyLWFsbCxcclxuLnVpLWNvcm5lci10b3AsXHJcbi51aS1jb3JuZXItcmlnaHQsXHJcbi51aS1jb3JuZXItdHIge1xyXG5cdGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XHJcbn1cclxuLnVpLWNvcm5lci1hbGwsXHJcbi51aS1jb3JuZXItYm90dG9tLFxyXG4udWktY29ybmVyLWxlZnQsXHJcbi51aS1jb3JuZXItYmwge1xyXG5cdGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDtcclxufVxyXG4udWktY29ybmVyLWFsbCxcclxuLnVpLWNvcm5lci1ib3R0b20sXHJcbi51aS1jb3JuZXItcmlnaHQsXHJcbi51aS1jb3JuZXItYnIge1xyXG5cdGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7XHJcbn1cclxuXHJcbi8qIE92ZXJsYXlzICovXHJcbi51aS13aWRnZXQtb3ZlcmxheSB7XHJcblx0YmFja2dyb3VuZDogI2FhYWFhYTtcclxuXHRvcGFjaXR5OiAuMztcclxuXHRmaWx0ZXI6IEFscGhhKE9wYWNpdHk9MzApOyAvKiBzdXBwb3J0OiBJRTggKi9cclxufVxyXG4udWktd2lkZ2V0LXNoYWRvdyB7XHJcblx0bWFyZ2luOiAtOHB4IDAgMCAtOHB4O1xyXG5cdHBhZGRpbmc6IDhweDtcclxuXHRiYWNrZ3JvdW5kOiAjYWFhYWFhO1xyXG5cdG9wYWNpdHk6IC4zO1xyXG5cdGZpbHRlcjogQWxwaGEoT3BhY2l0eT0zMCk7IC8qIHN1cHBvcnQ6IElFOCAqL1xyXG5cdGJvcmRlci1yYWRpdXM6IDhweDtcclxufVxyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */ +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS11aS5jc3MiLCJqcXVlcnktdWkuc3RydWN0dXJlLmNzcyIsImpxdWVyeS11aS50aGVtZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFBTEE7Ozs7cUVBSUE7O0FBRUE7b0NBQ0E7QUFDQTtDQUNBLGNBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBLG9CQUFBO0NBQ0EsWUFBQTtDQUNBLGFBQUE7Q0FDQSxpQkFBQTtDQUNBLFdBQUE7Q0FDQSxtQkFBQTtDQUNBLFdBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBLFdBQUE7Q0FDQSxVQUFBO0NBQ0EsV0FBQTtDQUNBLGlCQUFBO0NBQ0Esc0JBQUE7Q0FDQSxnQkFBQTtDQUNBLGlCQUFBO0NBQ0E7QUFDQTs7Q0FFQSxZQUFBO0NBQ0EsZUFBQTtDQUNBLDBCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsY0FBQSxDQUFBLGtCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxhQUFBO0NBQ0EsT0FBQTtDQUNBLFFBQUE7Q0FDQSxtQkFBQTtDQUNBLFdBQUE7Q0FDQSx3QkFBQSxDQUFBLGtCQUFBO0NBQ0E7O0FBRUE7Q0FDQSxhQUFBO0NBQ0E7OztBQUdBO29DQUNBO0FBQ0E7Q0FDQSwyQkFBQTtDQUNBOzs7QUFHQTtvQ0FDQTs7QUFFQSx1QkFBQTtBQUNBO0NBQ0EsZUFBQTtDQUNBLHNCQUFBO0NBQ0EsaUJBQUE7Q0FDQSw2QkFBQTtDQUNBOzs7QUFHQTtvQ0FDQTs7QUFFQSxjQUFBO0FBQ0E7Q0FDQSxnQkFBQTtDQUNBLE9BQUE7Q0FDQSxRQUFBO0NBQ0EsWUFBQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsdUJBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLGlCQUFBO0NBQ0EsZUFBQTtDQUNBLHVCQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBOztDQUVBLGNBQUE7Q0FDQTtBQUNBO0NBQ0EsaUJBQUE7Q0FDQSxZQUFBO0NBQ0EsWUFBQTtDQUNBLFVBQUE7Q0FDQSxRQUFBO0NBQ0E7QUFDQTtDQUNBLGlCQUFBO0NBQ0EsWUFBQTtDQUNBLFlBQUE7Q0FDQSxhQUFBO0NBQ0EsUUFBQTtDQUNBO0FBQ0E7Q0FDQSxpQkFBQTtDQUNBLFdBQUE7Q0FDQSxZQUFBO0NBQ0EsT0FBQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsaUJBQUE7Q0FDQSxXQUFBO0NBQ0EsV0FBQTtDQUNBLE9BQUE7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLGtCQUFBO0NBQ0EsWUFBQTtDQUNBLGFBQUE7Q0FDQSxXQUFBO0NBQ0EsWUFBQTtDQUNBO0FBQ0E7Q0FDQSxrQkFBQTtDQUNBLFdBQUE7Q0FDQSxZQUFBO0NBQ0EsV0FBQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0Esa0JBQUE7Q0FDQSxXQUFBO0NBQ0EsWUFBQTtDQUNBLFdBQUE7Q0FDQSxVQUFBO0NBQ0E7QUFDQTtDQUNBLGtCQUFBO0NBQ0EsV0FBQTtDQUNBLFlBQUE7Q0FDQSxZQUFBO0NBQ0EsVUFBQTtDQUNBO0FBQ0E7Q0FDQSx1QkFBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsYUFBQTtDQUNBLHlCQUFBO0NBQ0E7QUFDQTtDQUNBLHVCQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsZUFBQTtDQUNBLGdCQUFBO0NBQ0EsbUJBQUE7Q0FDQSxrQkFBQTtDQUNBLDZCQUFBO0NBQ0EsY0FBQSxDQUFBLGtCQUFBO0NBQ0EsZ0JBQUE7Q0FDQTtBQUNBO0NBQ0Esb0JBQUE7Q0FDQTtBQUNBO0NBQ0Esb0JBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxXQUFBO0NBQ0EsU0FBQTtDQUNBLGlCQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsY0FBQTtDQUNBLGVBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxPQUFBO0NBQ0EsUUFBQTtDQUNBLGdCQUFBO0NBQ0E7QUFDQTtDQUNBLHNCQUFBO0NBQ0EsbUJBQUE7Q0FDQSxXQUFBO0NBQ0Esb0JBQUE7Q0FDQSxtQkFBQTtDQUNBLGdCQUFBO0NBQ0EsdUJBQUE7Q0FDQSxtQkFBQTtDQUNBLGtCQUFBLENBQUEsK0JBQUE7Q0FDQTtBQUNBOzs7OztDQUtBLHNCQUFBO0NBQ0E7QUFDQSw2REFBQTtBQUNBO0NBQ0EsYUFBQTtDQUNBO0FBQ0Esc0RBQUE7QUFDQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0E7O0FBRUEseUJBQUE7QUFDQTtDQUNBLGVBQUE7Q0FDQSxvQkFBQTtDQUNBO0FBQ0E7Q0FDQSxrQkFBQTtDQUNBO0FBQ0E7O0NBRUEsY0FBQTtDQUNBLHdCQUFBO0NBQ0E7QUFDQTs7Q0FFQSw2QkFBQTtDQUNBO0FBQ0E7O0NBRUEsNkJBQUE7Q0FDQTtBQUNBO0NBQ0Esb0JBQUE7Q0FDQSxxQkFBQTtDQUNBO0FBQ0Esb0VBQUE7QUFDQTtDQUNBLGtCQUFBO0NBQ0E7O0FBRUEsNEJBQUE7QUFDQTs7Ozs7Q0FLQSxtQkFBQTtDQUNBLFNBQUE7Q0FDQSxpQkFBQTtDQUNBO0FBQ0E7Q0FDQSxVQUFBO0NBQ0Esa0JBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxXQUFBO0NBQ0E7QUFDQTs7O0NBR0EsWUFBQTtDQUNBOztBQUVBLGlCQUFBO0FBQ0E7Q0FDQSxrQkFBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0Esb0JBQUE7Q0FDQTs7QUFFQSxpQkFBQTtBQUNBLG9EQUFBO0FBQ0E7O0NBRUEsVUFBQTtDQUNBLFdBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLHFCQUFBO0NBQ0EsY0FBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLGdCQUFBO0NBQ0E7QUFDQTs7Q0FFQSxtQkFBQTtDQUNBLFNBQUE7Q0FDQSxhQUFBO0NBQ0EsY0FBQTtDQUNBO0FBQ0E7O0NBRUEsU0FBQTtDQUNBO0FBQ0E7Q0FDQSxVQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBO0FBQ0E7Q0FDQSxXQUFBO0NBQ0E7QUFDQTs7Q0FFQSxlQUFBO0NBQ0EsbUJBQUE7Q0FDQSxVQUFBO0NBQ0Esa0JBQUE7Q0FDQSxTQUFBO0NBQ0EsaUJBQUE7Q0FDQTtBQUNBO0NBQ0EsZ0JBQUE7Q0FDQSxtQkFBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLGVBQUE7Q0FDQSxjQUFBO0NBQ0E7QUFDQTs7Q0FFQSxXQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxnQkFBQTtDQUNBLDBCQUFBO0NBQ0EsaUJBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxtQkFBQTtDQUNBLGtCQUFBO0NBQ0EsVUFBQTtDQUNBO0FBQ0E7Q0FDQSxVQUFBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7O0NBRUEsZUFBQTtDQUNBLGNBQUE7Q0FDQSxrQkFBQTtDQUNBLHNCQUFBO0NBQ0E7QUFDQTtDQUNBLHVCQUFBO0NBQ0EsbUJBQUE7Q0FDQSxnQkFBQTtDQUNBLGVBQUE7Q0FDQSxnQkFBQTtDQUNBLGlCQUFBO0NBQ0E7QUFDQTtDQUNBLGFBQUE7Q0FDQSx1QkFBQTtDQUNBLGdCQUFBO0NBQ0EsNkJBQUE7Q0FDQSxZQUFBO0NBQ0Esa0JBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBOztBQUVBLDZCQUFBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsV0FBQTtDQUNBLG9CQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxXQUFBO0NBQ0E7QUFDQTs7Q0FFQSxxQkFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxZQUFBO0NBQ0EsYUFBQTtDQUNBOztBQUVBLGlCQUFBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQSxXQUFBO0NBQ0E7QUFDQTtDQUNBLFVBQUE7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQSxXQUFBO0NBQ0E7QUFDQTtDQUNBLFVBQUE7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBO0FBQ0E7O0NBRUEsYUFBQTtDQUNBO0FBQ0E7O0NBRUEsc0JBQUE7Q0FDQSx1QkFBQTtDQUNBO0FBQ0E7Q0FDQSxpQkFBQTtDQUNBLG1CQUFBO0NBQ0EsT0FBQTtDQUNBLFFBQUE7Q0FDQSxjQUFBO0NBQ0EsV0FBQTtDQUNBO0FBQ0E7Q0FDQSxrQkFBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxlQUFBO0NBQ0Esb0JBQUE7Q0FDQSxXQUFBO0NBQ0EsaUJBQUE7Q0FDQSx3QkFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLFlBQUE7Q0FDQSxTQUFBO0NBQ0EsWUFBQTtDQUNBLG9CQUFBO0NBQ0EsYUFBQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxVQUFBO0NBQ0Esa0JBQUE7Q0FDQSxpQkFBQTtDQUNBLGVBQUE7Q0FDQTtBQUNBO0NBQ0EsaUJBQUE7Q0FDQSx3QkFBQTtDQUNBLHVCQUFBO0NBQ0EsaUJBQUE7Q0FDQSw0QkFBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLHlCQUFBO0NBQ0EsZ0JBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLGFBQUE7Q0FDQSxZQUFBO0NBQ0EsYUFBQTtDQUNBLCtCQUFBO0NBQ0E7QUFDQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsaUJBQUE7Q0FDQSxXQUFBO0NBQ0EsVUFBQTtDQUNBLGVBQUE7Q0FDQSxjQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsVUFBQTtDQUNBLDBCQUFBO0NBQ0EsZ0JBQUE7Q0FDQSxjQUFBLENBQUEsa0JBQUE7Q0FDQSw4QkFBQTtDQUNBLHdHQUFBO0NBQ0E7QUFDQTtDQUNBLGNBQUE7Q0FDQSxVQUFBO0NBQ0EsYUFBQTtDQUNBLGVBQUE7Q0FDQSx3QkFBQTtDQUNBO0FBQ0E7O0NBRUEsYUFBQTtDQUNBOztBQUVBLGtCQUFBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxrQkFBQTtDQUNBOztBQUVBLGtCQUFBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLE9BQUE7Q0FDQSxVQUFBO0NBQ0EsV0FBQTtDQUNBLGVBQUE7Q0FDQTs7QUFFQSxtQkFBQTtBQUNBO0NBQ0EsV0FBQTtDQUNBLFNBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLGlCQUFBO0NBQ0EsaUJBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsMHpFQUFBO0NBQ0EsYUFBQTtDQUNBLDBCQUFBLENBQUEsa0JBQUE7Q0FDQSxjQUFBO0NBQ0E7QUFDQTtDQUNBLHVCQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQSxVQUFBO0NBQ0EsbUJBQUE7Q0FDQSxPQUFBO0NBQ0EsUUFBQTtDQUNBLGNBQUE7Q0FDQTtBQUNBO0NBQ0EsZUFBQTtDQUNBLGtCQUFBO0NBQ0EsbUJBQUE7Q0FDQSxvQkFBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0Esa0JBQUE7Q0FDQSxpQkFBQTtDQUNBLG1CQUFBO0NBQ0Esb0JBQUE7Q0FDQSxhQUFBO0NBQ0EsVUFBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0E7QUFDQTtDQUNBLHNCQUFBO0NBQ0EsaUJBQUE7Q0FDQSxtQkFBQTtDQUNBLHNCQUFBO0NBQ0EsZ0JBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBLFdBQUE7Q0FDQSxpQkFBQTtDQUNBLG1CQUFBO0NBQ0EsU0FBQTtDQUNBO0FBQ0E7Q0FDQSxpQkFBQTtDQUNBLCtCQUFBO0NBQ0EsZUFBQTtDQUNBLGlCQUFBO0NBQ0EsaUJBQUE7Q0FDQSx3QkFBQTtDQUNBLG9CQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsaUJBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxXQUFBO0NBQ0EsYUFBQTtDQUNBLGNBQUE7Q0FDQSxnQkFBQTtDQUNBLHVCQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxXQUFBO0NBQ0EsZ0JBQUE7Q0FDQSxlQUFBO0NBQ0EsVUFBQTtDQUNBLHlCQUFBO0NBQ0E7O0FBRUEsOEJBQUE7QUFDQTs7Q0FFQSxnQkFBQTtDQUNBOztBQUVBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxXQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsT0FBQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsUUFBQTtDQUNBO0FBQ0E7Q0FDQSxTQUFBO0NBQ0E7O0FBRUE7Q0FDQSxZQUFBO0NBQ0EsY0FBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsZUFBQTtDQUNBLHFCQUFBO0NBQ0E7QUFDQTtDQUNBLFFBQUE7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLFVBQUE7Q0FDQTtBQUNBO0NBQ0EsT0FBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLHNCQUFBO0NBQ0EsaUJBQUE7Q0FDQSxXQUFBO0NBQ0EsdUJBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBLGlCQUFBO0NBQ0EsZUFBQTtDQUNBLFdBQUE7Q0FDQSxlQUFBO0NBQ0EsdUJBQUE7Q0FDQSxrQkFBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxZQUFBO0NBQ0EsZ0JBQUE7Q0FDQSxXQUFBO0NBQ0EsVUFBQTtDQUNBLG1CQUFBO0NBQ0EsbUJBQUE7Q0FDQSxnQkFBQTtDQUNBLGVBQUE7Q0FDQSxpQkFBQTtDQUNBLFNBQUE7Q0FDQTtBQUNBLGdFQUFBO0FBQ0E7Q0FDQSxpQkFBQTtDQUNBLG9CQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBLDRCQUFBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLGlCQUFBO0NBQ0EsU0FBQTtDQUNBLFFBQUE7Q0FDQTtBQUNBO0NBQ0EsT0FBQTtDQUNBO0FBQ0E7Q0FDQSxVQUFBO0NBQ0E7O0FBRUEsa0JBQUE7QUFDQTtDQUNBLDhCQUFBO0NBQ0EsaUNBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUEsd0lBQUE7Q0FDQSxjQUFBO0NBQ0E7QUFDQTtDQUNBLFVBQUE7Q0FDQSxxQkFBQTtDQUNBO0FBQ0E7Q0FDQSxpQkFBQTtDQUNBLFlBQUE7Q0FDQSxtQkFBQTtDQUNBLE9BQUE7Q0FDQSxxQkFBQTtDQUNBLHVCQUFBO0NBQ0EsV0FBQTtDQUNBLG9CQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxrQkFBQTtDQUNBLHNCQUFBO0NBQ0E7QUFDQTtDQUNBLG9CQUFBO0NBQ0Esb0JBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLGdCQUFBO0NBQ0E7QUFDQTtDQUNBLGVBQUE7Q0FDQSxnQkFBQTtDQUNBLG1CQUFBO0NBQ0EsaUJBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBLG1CQUFBO0NBQ0EsY0FBQTtDQUNBLGlCQUFBO0NBRUEseUJBQUE7Q0FDQTtBQUNBO0NBQ0Esa0JBQUE7Q0FDQTs7QUFFQTtvQ0FDQTtBQUNBO0NBQ0Esc0NBQUE7Q0FDQSxpQkFBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0E7QUFDQTs7OztDQUlBLHNDQUFBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7Q0FDQSwwQkFBQTtDQUNBLG9CQUFBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0E7QUFDQTtDQUNBLDBCQUFBO0NBQ0EsNEZBQUE7Q0FDQSxlQUFBO0NBQ0Esa0JBQUE7Q0FDQTtBQUNBO0NBQ0EsZUFBQTtDQUNBOztBQUVBO29DQUNBO0FBQ0E7OztDQUdBLDBCQUFBO0NBQ0EsbUZBQUE7Q0FDQSxvQkFBQTtDQUNBLGVBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxlQUFBO0NBQ0Esc0JBQUE7Q0FDQTtBQUNBOzs7Ozs7Q0FNQSwwQkFBQTtDQUNBLG1GQUFBO0NBQ0Esb0JBQUE7Q0FDQSxlQUFBO0NBQ0E7QUFDQTs7Ozs7Ozs7Q0FRQSxlQUFBO0NBQ0Esc0JBQUE7Q0FDQTtBQUNBOzs7Q0FHQSwwQkFBQTtDQUNBLG1GQUFBO0NBQ0Esb0JBQUE7Q0FDQSxlQUFBO0NBQ0E7QUFDQTs7O0NBR0EsZUFBQTtDQUNBLHNCQUFBO0NBQ0E7O0FBRUE7b0NBQ0E7QUFDQTs7O0NBR0EsMEJBQUE7Q0FDQSxtRkFBQTtDQUNBLGVBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxlQUFBO0NBQ0E7QUFDQTs7O0NBR0EsMEJBQUE7Q0FDQSxtRkFBQTtDQUNBLGVBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxlQUFBO0NBQ0E7QUFDQTs7O0NBR0EsZUFBQTtDQUNBO0FBQ0E7OztDQUdBLGtCQUFBO0NBQ0E7QUFDQTs7O0NBR0EsWUFBQTtDQUNBLHlCQUFBLENBQUEsa0JBQUE7Q0FDQSxvQkFBQTtDQUNBO0FBQ0E7OztDQUdBLGFBQUE7Q0FDQSx5QkFBQSxDQUFBLGtCQUFBO0NBQ0EsdUJBQUE7Q0FDQTtBQUNBO0NBQ0EseUJBQUEsQ0FBQSw4QkFBQTtDQUNBOztBQUVBO29DQUNBOztBQUVBLHVCQUFBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7O0NBRUEsNERBQUE7Q0FDQTtBQUNBO0NBQ0EsNERBQUE7Q0FDQTtBQUNBO0NBQ0EsNERBQUE7Q0FDQTtBQUNBOztDQUVBLDREQUFBO0NBQ0E7QUFDQTtDQUNBLDREQUFBO0NBQ0E7QUFDQTtDQUNBLDREQUFBO0NBQ0E7QUFDQTs7Q0FFQSw0REFBQTtDQUNBOztBQUVBLGlCQUFBO0FBQ0EsaUJBQUEsK0JBQUEsRUFBQTtBQUNBLHFCQUFBLHlCQUFBLEVBQUE7QUFDQSxzQkFBQSw2QkFBQSxFQUFBO0FBQ0EscUJBQUEsNkJBQUEsRUFBQTtBQUNBLHNCQUFBLDZCQUFBLEVBQUE7QUFDQSxxQkFBQSw2QkFBQSxFQUFBO0FBQ0Esc0JBQUEsNkJBQUEsRUFBQTtBQUNBLHFCQUFBLDZCQUFBLEVBQUE7QUFDQSxzQkFBQSw4QkFBQSxFQUFBO0FBQ0EsdUJBQUEsOEJBQUEsRUFBQTtBQUNBLHVCQUFBLDhCQUFBLEVBQUE7QUFDQSx3QkFBQSw2QkFBQSxFQUFBO0FBQ0EseUJBQUEsaUNBQUEsRUFBQTtBQUNBLHdCQUFBLGlDQUFBLEVBQUE7QUFDQSx5QkFBQSxpQ0FBQSxFQUFBO0FBQ0Esd0JBQUEsaUNBQUEsRUFBQTtBQUNBLHlCQUFBLGlDQUFBLEVBQUE7QUFDQSx3QkFBQSxpQ0FBQSxFQUFBO0FBQ0EseUJBQUEsa0NBQUEsRUFBQTtBQUNBLDBCQUFBLGtDQUFBLEVBQUE7QUFDQSwwQkFBQSxrQ0FBQSxFQUFBO0FBQ0EscUJBQUEsNkJBQUEsRUFBQTtBQUNBLHNCQUFBLGlDQUFBLEVBQUE7QUFDQSxxQkFBQSxpQ0FBQSxFQUFBO0FBQ0Esc0JBQUEsaUNBQUEsRUFBQTtBQUNBLHFCQUFBLGlDQUFBLEVBQUE7QUFDQSxzQkFBQSxpQ0FBQSxFQUFBO0FBQ0EscUJBQUEsaUNBQUEsRUFBQTtBQUNBLHNCQUFBLGtDQUFBLEVBQUE7QUFDQSx1QkFBQSxrQ0FBQSxFQUFBO0FBQ0EseUJBQUEsa0NBQUEsRUFBQTtBQUNBLHVCQUFBLGtDQUFBLEVBQUE7QUFDQSx5QkFBQSxrQ0FBQSxFQUFBO0FBQ0EseUJBQUEsa0NBQUEsRUFBQTtBQUNBLHlCQUFBLGtDQUFBLEVBQUE7QUFDQSx5QkFBQSxrQ0FBQSxFQUFBO0FBQ0EseUJBQUEsa0NBQUEsRUFBQTtBQUNBLDBCQUFBLDZCQUFBLEVBQUE7QUFDQSwyQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsMEJBQUEsaUNBQUEsRUFBQTtBQUNBLDJCQUFBLGlDQUFBLEVBQUE7QUFDQSwwQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsMkJBQUEsaUNBQUEsRUFBQTtBQUNBLDBCQUFBLGlDQUFBLEVBQUE7QUFDQSwyQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNEJBQUEsa0NBQUEsRUFBQTtBQUNBLDhCQUFBLGtDQUFBLEVBQUE7QUFDQSw0QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsOEJBQUEsa0NBQUEsRUFBQTtBQUNBLDhCQUFBLGtDQUFBLEVBQUE7QUFDQSw4QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsOEJBQUEsa0NBQUEsRUFBQTtBQUNBLDhCQUFBLGtDQUFBLEVBQUE7QUFDQSxnQ0FBQSw2QkFBQSxFQUFBO0FBQ0EsZ0NBQUEsaUNBQUEsRUFBQTtBQUNBLGdDQUFBLGlDQUFBLEVBQUE7QUFDQSxnQ0FBQSxpQ0FBQSxFQUFBO0FBQ0EsMkJBQUEsaUNBQUEsRUFBQTtBQUNBLDJCQUFBLGlDQUFBLEVBQUE7QUFDQSwyQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsMkJBQUEsa0NBQUEsRUFBQTtBQUNBLDRCQUFBLGtDQUFBLEVBQUE7QUFDQSw0QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNEJBQUEsa0NBQUEsRUFBQTtBQUNBLDRCQUFBLGtDQUFBLEVBQUE7QUFDQSxtQkFBQSw2QkFBQSxFQUFBO0FBQ0Esd0JBQUEsaUNBQUEsRUFBQTtBQUNBLG1CQUFBLGlDQUFBLEVBQUE7QUFDQSxrQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsbUJBQUEsaUNBQUEsRUFBQTtBQUNBLG1CQUFBLGlDQUFBLEVBQUE7QUFDQSx3QkFBQSxpQ0FBQSxFQUFBO0FBQ0EsNkJBQUEsa0NBQUEsRUFBQTtBQUNBLDRCQUFBLDZCQUFBLEVBQUE7QUFDQSx1QkFBQSxpQ0FBQSxFQUFBO0FBQ0Esb0JBQUEsaUNBQUEsRUFBQTtBQUNBLHNCQUFBLGlDQUFBLEVBQUE7QUFDQSxnQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsdUJBQUEsaUNBQUEsRUFBQTtBQUNBLHFCQUFBLGlDQUFBLEVBQUE7QUFDQSxvQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsbUJBQUEsa0NBQUEsRUFBQTtBQUNBLGtCQUFBLGtDQUFBLEVBQUE7QUFDQSxpQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsaUJBQUEsa0NBQUEsRUFBQTtBQUNBLGtCQUFBLGtDQUFBLEVBQUE7QUFDQSxvQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esb0JBQUEsa0NBQUEsRUFBQTtBQUNBLGVBQUEsa0NBQUEsRUFBQTtBQUNBLGdCQUFBLDhCQUFBLEVBQUE7QUFDQSxnQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esb0JBQUEsa0NBQUEsRUFBQTtBQUNBLGdCQUFBLGtDQUFBLEVBQUE7QUFDQSxrQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsaUJBQUEsa0NBQUEsRUFBQTtBQUNBLGdCQUFBLGtDQUFBLEVBQUE7QUFDQSxzQkFBQSxtQ0FBQSxFQUFBO0FBQ0Esa0JBQUEsbUNBQUEsRUFBQTtBQUNBLG1CQUFBLG1DQUFBLEVBQUE7QUFDQSxrQkFBQSxtQ0FBQSxFQUFBO0FBQ0Esa0JBQUEsbUNBQUEsRUFBQTtBQUNBLGdCQUFBLG1DQUFBLEVBQUE7QUFDQSxpQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsbUNBQUEsRUFBQTtBQUNBLGdCQUFBLG1DQUFBLEVBQUE7QUFDQSxrQkFBQSw4QkFBQSxFQUFBO0FBQ0EsZ0JBQUEsa0NBQUEsRUFBQTtBQUNBLHFCQUFBLGtDQUFBLEVBQUE7QUFDQSxpQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esc0JBQUEsa0NBQUEsRUFBQTtBQUNBLGlCQUFBLGtDQUFBLEVBQUE7QUFDQSxzQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsZUFBQSxtQ0FBQSxFQUFBO0FBQ0EscUJBQUEsbUNBQUEsRUFBQTtBQUNBLG9CQUFBLG1DQUFBLEVBQUE7QUFDQSxxQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsbUNBQUEsRUFBQTtBQUNBLG1CQUFBLG1DQUFBLEVBQUE7QUFDQSxpQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsaUJBQUEsbUNBQUEsRUFBQTtBQUNBLGtCQUFBLG1DQUFBLEVBQUE7QUFDQSxpQkFBQSw4QkFBQSxFQUFBO0FBQ0EsZ0JBQUEsa0NBQUEsRUFBQTtBQUNBLGtCQUFBLGtDQUFBLEVBQUE7QUFDQSxnQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsaUJBQUEsa0NBQUEsRUFBQTtBQUNBLGtCQUFBLGtDQUFBLEVBQUE7QUFDQSxvQkFBQSxrQ0FBQSxFQUFBO0FBQ0EscUJBQUEsbUNBQUEsRUFBQTtBQUNBLGlCQUFBLG1DQUFBLEVBQUE7QUFDQSxpQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsOEJBQUEsRUFBQTtBQUNBLGlCQUFBLGtDQUFBLEVBQUE7QUFDQSxxQkFBQSxrQ0FBQSxFQUFBO0FBQ0EscUJBQUEsa0NBQUEsRUFBQTtBQUNBLG9CQUFBLGtDQUFBLEVBQUE7QUFDQSxzQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esc0VBQUE7QUFDQSxzQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsa0NBQUEsRUFBQTtBQUNBLGlCQUFBLG1DQUFBLEVBQUE7QUFDQSxzQkFBQSxtQ0FBQSxFQUFBO0FBQ0EscUJBQUEsbUNBQUEsRUFBQTtBQUNBLGlCQUFBLDhCQUFBLEVBQUE7QUFDQSx1QkFBQSxrQ0FBQSxFQUFBO0FBQ0Esa0JBQUEsa0NBQUEsRUFBQTtBQUNBLHFCQUFBLGtDQUFBLEVBQUE7QUFDQSxxQkFBQSxrQ0FBQSxFQUFBO0FBQ0EscUJBQUEsa0NBQUEsRUFBQTtBQUNBLHFCQUFBLGtDQUFBLEVBQUE7QUFDQSx1QkFBQSw4QkFBQSxFQUFBO0FBQ0Esd0JBQUEsa0NBQUEsRUFBQTtBQUNBLHdCQUFBLGtDQUFBLEVBQUE7QUFDQSw2QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNkJBQUEsa0NBQUEsRUFBQTtBQUNBLDZCQUFBLGtDQUFBLEVBQUE7QUFDQSw2QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsMEJBQUEsbUNBQUEsRUFBQTtBQUNBLDBCQUFBLG1DQUFBLEVBQUE7QUFDQSwwQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsMEJBQUEsbUNBQUEsRUFBQTtBQUNBLHlCQUFBLG1DQUFBLEVBQUE7QUFDQSwwQkFBQSxtQ0FBQSxFQUFBO0FBQ0Esd0JBQUEsbUNBQUEsRUFBQTtBQUNBLDRCQUFBLDhCQUFBLEVBQUE7QUFDQSw2QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNkJBQUEsa0NBQUEsRUFBQTtBQUNBLDRCQUFBLGtDQUFBLEVBQUE7QUFDQSw2QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNkJBQUEsa0NBQUEsRUFBQTtBQUNBLGdDQUFBLDhCQUFBLEVBQUE7QUFDQSxrQ0FBQSxrQ0FBQSxFQUFBO0FBQ0EsK0JBQUEsa0NBQUEsRUFBQTtBQUNBLGlDQUFBLGtDQUFBLEVBQUE7QUFDQSxpQ0FBQSxrQ0FBQSxFQUFBO0FBQ0EsNEJBQUEsa0NBQUEsRUFBQTs7O0FBR0E7b0NBQ0E7O0FBRUEsbUJBQUE7QUFDQTs7OztDQUlBLDRCQUFBO0NBQ0E7QUFDQTs7OztDQUlBLDZCQUFBO0NBQ0E7QUFDQTs7OztDQUlBLCtCQUFBO0NBQ0E7QUFDQTs7OztDQUlBLGdDQUFBO0NBQ0E7O0FBRUEsY0FBQTtBQUNBO0NBQ0Esb0JBQUE7Q0FDQSxZQUFBO0NBQ0EsMEJBQUEsQ0FBQSxrQkFBQTtDQUNBO0FBQ0E7Q0FDQSxzQkFBQTtDQUNBLGFBQUE7Q0FDQSxvQkFBQTtDQUNBLFlBQUE7Q0FDQSwwQkFBQSxDQUFBLGtCQUFBO0NBQ0EsbUJBQUE7Q0FDQTs7QUN4c0NBOzs7Ozs7Ozs7R0FTQTs7QUFFQTtvQ0FDQTtBQUNBO0NBQ0EsY0FBQTtDQUNBO0FBQ0E7Q0FDQSxVQUFBO0NBQ0Esb0JBQUE7Q0FDQSxZQUFBO0NBQ0EsYUFBQTtDQUNBLGlCQUFBO0NBQ0EsV0FBQTtDQUNBLG1CQUFBO0NBQ0EsV0FBQTtDQUNBO0FBQ0E7Q0FDQSxVQUFBO0NBQ0EsV0FBQTtDQUNBLFVBQUE7Q0FDQSxXQUFBO0NBQ0EsaUJBQUE7Q0FDQSxzQkFBQTtDQUNBLGdCQUFBO0NBQ0EsaUJBQUE7Q0FDQTtBQUNBOztDQUVBLFlBQUE7Q0FDQSxlQUFBO0NBQ0EsMEJBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBO0FBQ0E7Q0FDQSxjQUFBLENBQUEsa0JBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLGFBQUE7Q0FDQSxPQUFBO0NBQ0EsUUFBQTtDQUNBLG1CQUFBO0NBQ0EsV0FBQTtDQUNBLHdCQUFBLENBQUEsa0JBQUE7Q0FDQTs7QUFFQTtDQUNBLGFBQUE7Q0FDQTs7O0FBR0E7b0NBQ0E7QUFDQTtDQUNBLDJCQUFBO0NBQ0E7OztBQUdBO29DQUNBOztBQUVBLHVCQUFBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0Esc0JBQUE7Q0FDQSxpQkFBQTtDQUNBLDZCQUFBO0NBQ0E7OztBQUdBO29DQUNBOztBQUVBLGNBQUE7QUFDQTtDQUNBLGdCQUFBO0NBQ0EsT0FBQTtDQUNBLFFBQUE7Q0FDQSxZQUFBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSx1QkFBQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsaUJBQUE7Q0FDQSxlQUFBO0NBQ0EsdUJBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7O0NBRUEsY0FBQTtDQUNBO0FBQ0E7Q0FDQSxpQkFBQTtDQUNBLFlBQUE7Q0FDQSxZQUFBO0NBQ0EsVUFBQTtDQUNBLFFBQUE7Q0FDQTtBQUNBO0NBQ0EsaUJBQUE7Q0FDQSxZQUFBO0NBQ0EsWUFBQTtDQUNBLGFBQUE7Q0FDQSxRQUFBO0NBQ0E7QUFDQTtDQUNBLGlCQUFBO0NBQ0EsV0FBQTtDQUNBLFlBQUE7Q0FDQSxPQUFBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxpQkFBQTtDQUNBLFdBQUE7Q0FDQSxXQUFBO0NBQ0EsT0FBQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0Esa0JBQUE7Q0FDQSxZQUFBO0NBQ0EsYUFBQTtDQUNBLFdBQUE7Q0FDQSxZQUFBO0NBQ0E7QUFDQTtDQUNBLGtCQUFBO0NBQ0EsV0FBQTtDQUNBLFlBQUE7Q0FDQSxXQUFBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxrQkFBQTtDQUNBLFdBQUE7Q0FDQSxZQUFBO0NBQ0EsV0FBQTtDQUNBLFVBQUE7Q0FDQTtBQUNBO0NBQ0Esa0JBQUE7Q0FDQSxXQUFBO0NBQ0EsWUFBQTtDQUNBLFlBQUE7Q0FDQSxVQUFBO0NBQ0E7QUFDQTtDQUNBLHVCQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxhQUFBO0NBQ0EseUJBQUE7Q0FDQTtBQUNBO0NBQ0EsdUJBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0EsZ0JBQUE7Q0FDQSxtQkFBQTtDQUNBLGtCQUFBO0NBQ0EsNkJBQUE7Q0FDQSxjQUFBLENBQUEsa0JBQUE7Q0FDQSxnQkFBQTtDQUNBO0FBQ0E7Q0FDQSxvQkFBQTtDQUNBO0FBQ0E7Q0FDQSxvQkFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLFdBQUE7Q0FDQSxTQUFBO0NBQ0EsaUJBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxjQUFBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLE9BQUE7Q0FDQSxRQUFBO0NBQ0EsZ0JBQUE7Q0FDQTtBQUNBO0NBQ0Esc0JBQUE7Q0FDQSxtQkFBQTtDQUNBLFdBQUE7Q0FDQSxvQkFBQTtDQUNBLG1CQUFBO0NBQ0EsZ0JBQUE7Q0FDQSx1QkFBQTtDQUNBLG1CQUFBO0NBQ0Esa0JBQUEsQ0FBQSwrQkFBQTtDQUNBO0FBQ0E7Ozs7O0NBS0Esc0JBQUE7Q0FDQTtBQUNBLDZEQUFBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0E7QUFDQSxzREFBQTtBQUNBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLGFBQUE7Q0FDQTs7QUFFQSx5QkFBQTtBQUNBO0NBQ0EsZUFBQTtDQUNBLG9CQUFBO0NBQ0E7QUFDQTtDQUNBLGtCQUFBO0NBQ0E7QUFDQTs7Q0FFQSxjQUFBO0NBQ0Esd0JBQUE7Q0FDQTtBQUNBOztDQUVBLDZCQUFBO0NBQ0E7QUFDQTs7Q0FFQSw2QkFBQTtDQUNBO0FBQ0E7Q0FDQSxvQkFBQTtDQUNBLHFCQUFBO0NBQ0E7QUFDQSxvRUFBQTtBQUNBO0NBQ0Esa0JBQUE7Q0FDQTs7QUFFQSw0QkFBQTtBQUNBOzs7OztDQUtBLG1CQUFBO0NBQ0EsU0FBQTtDQUNBLGlCQUFBO0NBQ0E7QUFDQTtDQUNBLFVBQUE7Q0FDQSxrQkFBQTtDQUNBO0FBQ0E7OztDQUdBLFdBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxZQUFBO0NBQ0E7O0FBRUEsaUJBQUE7QUFDQTtDQUNBLGtCQUFBO0NBQ0E7QUFDQTtDQUNBLGVBQUE7Q0FDQSxvQkFBQTtDQUNBOztBQUVBLGlCQUFBO0FBQ0Esb0RBQUE7QUFDQTs7Q0FFQSxVQUFBO0NBQ0EsV0FBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EscUJBQUE7Q0FDQSxjQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsZ0JBQUE7Q0FDQTtBQUNBOztDQUVBLG1CQUFBO0NBQ0EsU0FBQTtDQUNBLGFBQUE7Q0FDQSxjQUFBO0NBQ0E7QUFDQTs7Q0FFQSxTQUFBO0NBQ0E7QUFDQTtDQUNBLFVBQUE7Q0FDQTtBQUNBO0NBQ0EsV0FBQTtDQUNBO0FBQ0E7Q0FDQSxVQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQTtBQUNBOztDQUVBLGVBQUE7Q0FDQSxtQkFBQTtDQUNBLFVBQUE7Q0FDQSxrQkFBQTtDQUNBLFNBQUE7Q0FDQSxpQkFBQTtDQUNBO0FBQ0E7Q0FDQSxnQkFBQTtDQUNBLG1CQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsZUFBQTtDQUNBLGNBQUE7Q0FDQTtBQUNBOztDQUVBLFdBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLGdCQUFBO0NBQ0EsMEJBQUE7Q0FDQSxpQkFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLG1CQUFBO0NBQ0Esa0JBQUE7Q0FDQSxVQUFBO0NBQ0E7QUFDQTtDQUNBLFVBQUE7Q0FDQSxhQUFBO0NBQ0E7QUFDQTs7Q0FFQSxlQUFBO0NBQ0EsY0FBQTtDQUNBLGtCQUFBO0NBQ0Esc0JBQUE7Q0FDQTtBQUNBO0NBQ0EsdUJBQUE7Q0FDQSxtQkFBQTtDQUNBLGdCQUFBO0NBQ0EsZUFBQTtDQUNBLGdCQUFBO0NBQ0EsaUJBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBLHVCQUFBO0NBQ0EsZ0JBQUE7Q0FDQSw2QkFBQTtDQUNBLFlBQUE7Q0FDQSxrQkFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0E7O0FBRUEsNkJBQUE7QUFDQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBO0FBQ0E7Q0FDQSxXQUFBO0NBQ0Esb0JBQUE7Q0FDQTtBQUNBO0NBQ0EsV0FBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQTtBQUNBOztDQUVBLHFCQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLFlBQUE7Q0FDQSxhQUFBO0NBQ0E7O0FBRUEsaUJBQUE7QUFDQTtDQUNBLGVBQUE7Q0FDQTtBQUNBO0NBQ0EsV0FBQTtDQUNBLFdBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsV0FBQTtDQUNBLFdBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0E7QUFDQTs7Q0FFQSxhQUFBO0NBQ0E7QUFDQTs7Q0FFQSxzQkFBQTtDQUNBLHVCQUFBO0NBQ0E7QUFDQTtDQUNBLGlCQUFBO0NBQ0EsbUJBQUE7Q0FDQSxPQUFBO0NBQ0EsUUFBQTtDQUNBLGNBQUE7Q0FDQSxXQUFBO0NBQ0E7QUFDQTtDQUNBLGtCQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLGVBQUE7Q0FDQSxvQkFBQTtDQUNBLFdBQUE7Q0FDQSxpQkFBQTtDQUNBLHdCQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsWUFBQTtDQUNBLFNBQUE7Q0FDQSxZQUFBO0NBQ0Esb0JBQUE7Q0FDQSxhQUFBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLFVBQUE7Q0FDQSxrQkFBQTtDQUNBLGlCQUFBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7Q0FDQSxpQkFBQTtDQUNBLHdCQUFBO0NBQ0EsdUJBQUE7Q0FDQSxpQkFBQTtDQUNBLDRCQUFBO0NBQ0E7QUFDQTtDQUNBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EseUJBQUE7Q0FDQSxnQkFBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsYUFBQTtDQUNBLFlBQUE7Q0FDQSxhQUFBO0NBQ0EsK0JBQUE7Q0FDQTtBQUNBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxpQkFBQTtDQUNBLFdBQUE7Q0FDQSxVQUFBO0NBQ0EsZUFBQTtDQUNBLGNBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxVQUFBO0NBQ0EsMEJBQUE7Q0FDQSxnQkFBQTtDQUNBLGNBQUEsQ0FBQSxrQkFBQTtDQUNBLDhCQUFBO0NBQ0Esd0dBQUE7Q0FDQTtBQUNBO0NBQ0EsY0FBQTtDQUNBLFVBQUE7Q0FDQSxhQUFBO0NBQ0EsZUFBQTtDQUNBLHdCQUFBO0NBQ0E7QUFDQTs7Q0FFQSxhQUFBO0NBQ0E7O0FBRUEsa0JBQUE7QUFDQTtDQUNBLG1CQUFBO0NBQ0E7QUFDQTtDQUNBLGtCQUFBO0NBQ0E7O0FBRUEsa0JBQUE7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsT0FBQTtDQUNBLFVBQUE7Q0FDQSxXQUFBO0NBQ0EsZUFBQTtDQUNBOztBQUVBLG1CQUFBO0FBQ0E7Q0FDQSxXQUFBO0NBQ0EsU0FBQTtDQUNBO0FBQ0E7Q0FDQSxZQUFBO0NBQ0EsaUJBQUE7Q0FDQSxpQkFBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSwwekVBQUE7Q0FDQSxhQUFBO0NBQ0EsMEJBQUEsQ0FBQSxrQkFBQTtDQUNBLGNBQUE7Q0FDQTtBQUNBO0NBQ0EsdUJBQUE7Q0FDQTtBQUNBO0NBQ0EsV0FBQTtDQUNBLFVBQUE7Q0FDQSxtQkFBQTtDQUNBLE9BQUE7Q0FDQSxRQUFBO0NBQ0EsY0FBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0Esa0JBQUE7Q0FDQSxtQkFBQTtDQUNBLG9CQUFBO0NBQ0E7QUFDQTtDQUNBLGVBQUE7Q0FDQSxrQkFBQTtDQUNBLGlCQUFBO0NBQ0EsbUJBQUE7Q0FDQSxvQkFBQTtDQUNBLGFBQUE7Q0FDQSxVQUFBO0NBQ0E7QUFDQTtDQUNBLGVBQUE7Q0FDQTtBQUNBO0NBQ0Esc0JBQUE7Q0FDQSxpQkFBQTtDQUNBLG1CQUFBO0NBQ0Esc0JBQUE7Q0FDQSxnQkFBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0EsV0FBQTtDQUNBLGlCQUFBO0NBQ0EsbUJBQUE7Q0FDQSxTQUFBO0NBQ0E7QUFDQTtDQUNBLGlCQUFBO0NBQ0EsK0JBQUE7Q0FDQSxlQUFBO0NBQ0EsaUJBQUE7Q0FDQSxpQkFBQTtDQUNBLHdCQUFBO0NBQ0Esb0JBQUE7Q0FDQTtBQUNBO0NBQ0EsbUJBQUE7Q0FDQSxpQkFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLFdBQUE7Q0FDQSxhQUFBO0NBQ0EsY0FBQTtDQUNBLGdCQUFBO0NBQ0EsdUJBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQTtDQUNBLFdBQUE7Q0FDQSxnQkFBQTtDQUNBLGVBQUE7Q0FDQSxVQUFBO0NBQ0EseUJBQUE7Q0FDQTs7QUFFQSw4QkFBQTtBQUNBOztDQUVBLGdCQUFBO0NBQ0E7O0FBRUE7Q0FDQSxhQUFBO0NBQ0E7QUFDQTtDQUNBLFdBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0E7Q0FDQSxPQUFBO0NBQ0EsYUFBQTtDQUNBO0FBQ0E7Q0FDQSxRQUFBO0NBQ0E7QUFDQTtDQUNBLFNBQUE7Q0FDQTs7QUFFQTtDQUNBLFlBQUE7Q0FDQSxjQUFBO0NBQ0E7QUFDQTtDQUNBLFlBQUE7Q0FDQSxlQUFBO0NBQ0EscUJBQUE7Q0FDQTtBQUNBO0NBQ0EsUUFBQTtDQUNBLFlBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBO0FBQ0E7Q0FDQSxPQUFBO0NBQ0E7QUFDQTtDQUNBLG1CQUFBO0NBQ0Esc0JBQUE7Q0FDQSxpQkFBQTtDQUNBLFdBQUE7Q0FDQSx1QkFBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0EsaUJBQUE7Q0FDQSxlQUFBO0NBQ0EsV0FBQTtDQUNBLGVBQUE7Q0FDQSx1QkFBQTtDQUNBLGtCQUFBO0NBQ0EsbUJBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLFlBQUE7Q0FDQSxnQkFBQTtDQUNBLFdBQUE7Q0FDQSxVQUFBO0NBQ0EsbUJBQUE7Q0FDQSxtQkFBQTtDQUNBLGdCQUFBO0NBQ0EsZUFBQTtDQUNBLGlCQUFBO0NBQ0EsU0FBQTtDQUNBO0FBQ0EsZ0VBQUE7QUFDQTtDQUNBLGlCQUFBO0NBQ0Esb0JBQUE7Q0FDQSxtQkFBQTtDQUNBO0FBQ0EsNEJBQUE7QUFDQTtDQUNBLG1CQUFBO0NBQ0EsaUJBQUE7Q0FDQSxTQUFBO0NBQ0EsUUFBQTtDQUNBO0FBQ0E7Q0FDQSxPQUFBO0NBQ0E7QUFDQTtDQUNBLFVBQUE7Q0FDQTs7QUFFQSxrQkFBQTtBQUNBO0NBQ0EsOEJBQUE7Q0FDQSxpQ0FBQTtDQUNBO0FBQ0E7Q0FDQSxtQkFBQSx3SUFBQTtDQUNBLGNBQUE7Q0FDQTtBQUNBO0NBQ0EsVUFBQTtDQUNBLHFCQUFBO0NBQ0E7QUFDQTtDQUNBLGlCQUFBO0NBQ0EsWUFBQTtDQUNBLG1CQUFBO0NBQ0EsT0FBQTtDQUNBLHFCQUFBO0NBQ0EsdUJBQUE7Q0FDQSxXQUFBO0NBQ0Esb0JBQUE7Q0FDQTtBQUNBO0NBQ0EsWUFBQTtDQUNBLGtCQUFBO0NBQ0Esc0JBQUE7Q0FDQTtBQUNBO0NBQ0Esb0JBQUE7Q0FDQSxvQkFBQTtDQUNBO0FBQ0E7OztDQUdBLGFBQUE7Q0FDQTtBQUNBO0NBQ0EsZ0JBQUE7Q0FDQTtBQUNBO0NBQ0EsZUFBQTtDQUNBLGdCQUFBO0NBQ0EsbUJBQUE7Q0FDQSxpQkFBQTtDQUNBO0FBQ0E7Q0FDQSxhQUFBO0NBQ0EsbUJBQUE7Q0FDQSxjQUFBO0NBQ0EsaUJBQUE7Q0FFQSx5QkFBQTtDQUNBO0FBQ0E7Q0FDQSxrQkFBQTtDQUNBOztBQ2gwQkE7Ozs7Ozs7Ozs7O0dBV0E7OztBQUdBO29DQUNBO0FBQ0E7Q0FDQSxzQ0FBQTtDQUNBLGlCQUFBO0NBQ0E7QUFDQTtDQUNBLGVBQUE7Q0FDQTtBQUNBOzs7O0NBSUEsc0NBQUE7Q0FDQSxlQUFBO0NBQ0E7QUFDQTtDQUNBLDBCQUFBO0NBQ0Esb0JBQUE7Q0FDQSxlQUFBO0NBQ0E7QUFDQTtDQUNBLGVBQUE7Q0FDQTtBQUNBO0NBQ0EsMEJBQUE7Q0FDQSw0RkFBQTtDQUNBLGVBQUE7Q0FDQSxrQkFBQTtDQUNBO0FBQ0E7Q0FDQSxlQUFBO0NBQ0E7O0FBRUE7b0NBQ0E7QUFDQTs7O0NBR0EsMEJBQUE7Q0FDQSxtRkFBQTtDQUNBLG9CQUFBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7OztDQUdBLGVBQUE7Q0FDQSxzQkFBQTtDQUNBO0FBQ0E7Ozs7OztDQU1BLDBCQUFBO0NBQ0EsbUZBQUE7Q0FDQSxvQkFBQTtDQUNBLGVBQUE7Q0FDQTtBQUNBOzs7Ozs7OztDQVFBLGVBQUE7Q0FDQSxzQkFBQTtDQUNBO0FBQ0E7OztDQUdBLDBCQUFBO0NBQ0EsbUZBQUE7Q0FDQSxvQkFBQTtDQUNBLGVBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxlQUFBO0NBQ0Esc0JBQUE7Q0FDQTs7QUFFQTtvQ0FDQTtBQUNBOzs7Q0FHQSwwQkFBQTtDQUNBLG1GQUFBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7OztDQUdBLGVBQUE7Q0FDQTtBQUNBOzs7Q0FHQSwwQkFBQTtDQUNBLG1GQUFBO0NBQ0EsZUFBQTtDQUNBO0FBQ0E7OztDQUdBLGVBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxlQUFBO0NBQ0E7QUFDQTs7O0NBR0Esa0JBQUE7Q0FDQTtBQUNBOzs7Q0FHQSxZQUFBO0NBQ0EseUJBQUEsQ0FBQSxrQkFBQTtDQUNBLG9CQUFBO0NBQ0E7QUFDQTs7O0NBR0EsYUFBQTtDQUNBLHlCQUFBLENBQUEsa0JBQUE7Q0FDQSx1QkFBQTtDQUNBO0FBQ0E7Q0FDQSx5QkFBQSxDQUFBLDhCQUFBO0NBQ0E7O0FBRUE7b0NBQ0E7O0FBRUEsdUJBQUE7QUFDQTtDQUNBLFlBQUE7Q0FDQSxhQUFBO0NBQ0E7QUFDQTs7Q0FFQSw0REFBQTtDQUNBO0FBQ0E7Q0FDQSw0REFBQTtDQUNBO0FBQ0E7Q0FDQSw0REFBQTtDQUNBO0FBQ0E7O0NBRUEsNERBQUE7Q0FDQTtBQUNBO0NBQ0EsNERBQUE7Q0FDQTtBQUNBO0NBQ0EsNERBQUE7Q0FDQTtBQUNBOztDQUVBLDREQUFBO0NBQ0E7O0FBRUEsaUJBQUE7QUFDQSxpQkFBQSwrQkFBQSxFQUFBO0FBQ0EscUJBQUEseUJBQUEsRUFBQTtBQUNBLHNCQUFBLDZCQUFBLEVBQUE7QUFDQSxxQkFBQSw2QkFBQSxFQUFBO0FBQ0Esc0JBQUEsNkJBQUEsRUFBQTtBQUNBLHFCQUFBLDZCQUFBLEVBQUE7QUFDQSxzQkFBQSw2QkFBQSxFQUFBO0FBQ0EscUJBQUEsNkJBQUEsRUFBQTtBQUNBLHNCQUFBLDhCQUFBLEVBQUE7QUFDQSx1QkFBQSw4QkFBQSxFQUFBO0FBQ0EsdUJBQUEsOEJBQUEsRUFBQTtBQUNBLHdCQUFBLDZCQUFBLEVBQUE7QUFDQSx5QkFBQSxpQ0FBQSxFQUFBO0FBQ0Esd0JBQUEsaUNBQUEsRUFBQTtBQUNBLHlCQUFBLGlDQUFBLEVBQUE7QUFDQSx3QkFBQSxpQ0FBQSxFQUFBO0FBQ0EseUJBQUEsaUNBQUEsRUFBQTtBQUNBLHdCQUFBLGlDQUFBLEVBQUE7QUFDQSx5QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsMEJBQUEsa0NBQUEsRUFBQTtBQUNBLDBCQUFBLGtDQUFBLEVBQUE7QUFDQSxxQkFBQSw2QkFBQSxFQUFBO0FBQ0Esc0JBQUEsaUNBQUEsRUFBQTtBQUNBLHFCQUFBLGlDQUFBLEVBQUE7QUFDQSxzQkFBQSxpQ0FBQSxFQUFBO0FBQ0EscUJBQUEsaUNBQUEsRUFBQTtBQUNBLHNCQUFBLGlDQUFBLEVBQUE7QUFDQSxxQkFBQSxpQ0FBQSxFQUFBO0FBQ0Esc0JBQUEsa0NBQUEsRUFBQTtBQUNBLHVCQUFBLGtDQUFBLEVBQUE7QUFDQSx5QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsdUJBQUEsa0NBQUEsRUFBQTtBQUNBLHlCQUFBLGtDQUFBLEVBQUE7QUFDQSx5QkFBQSxrQ0FBQSxFQUFBO0FBQ0EseUJBQUEsa0NBQUEsRUFBQTtBQUNBLHlCQUFBLGtDQUFBLEVBQUE7QUFDQSx5QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsMEJBQUEsNkJBQUEsRUFBQTtBQUNBLDJCQUFBLGlDQUFBLEVBQUE7QUFDQSwwQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsMkJBQUEsaUNBQUEsRUFBQTtBQUNBLDBCQUFBLGlDQUFBLEVBQUE7QUFDQSwyQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsMEJBQUEsaUNBQUEsRUFBQTtBQUNBLDJCQUFBLGtDQUFBLEVBQUE7QUFDQSw0QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsOEJBQUEsa0NBQUEsRUFBQTtBQUNBLDRCQUFBLGtDQUFBLEVBQUE7QUFDQSw4QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsOEJBQUEsa0NBQUEsRUFBQTtBQUNBLDhCQUFBLGtDQUFBLEVBQUE7QUFDQSw4QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsOEJBQUEsa0NBQUEsRUFBQTtBQUNBLGdDQUFBLDZCQUFBLEVBQUE7QUFDQSxnQ0FBQSxpQ0FBQSxFQUFBO0FBQ0EsZ0NBQUEsaUNBQUEsRUFBQTtBQUNBLGdDQUFBLGlDQUFBLEVBQUE7QUFDQSwyQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsMkJBQUEsaUNBQUEsRUFBQTtBQUNBLDJCQUFBLGlDQUFBLEVBQUE7QUFDQSwyQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNEJBQUEsa0NBQUEsRUFBQTtBQUNBLDRCQUFBLGtDQUFBLEVBQUE7QUFDQSw0QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNEJBQUEsa0NBQUEsRUFBQTtBQUNBLG1CQUFBLDZCQUFBLEVBQUE7QUFDQSx3QkFBQSxpQ0FBQSxFQUFBO0FBQ0EsbUJBQUEsaUNBQUEsRUFBQTtBQUNBLGtCQUFBLGlDQUFBLEVBQUE7QUFDQSxtQkFBQSxpQ0FBQSxFQUFBO0FBQ0EsbUJBQUEsaUNBQUEsRUFBQTtBQUNBLHdCQUFBLGlDQUFBLEVBQUE7QUFDQSw2QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNEJBQUEsNkJBQUEsRUFBQTtBQUNBLHVCQUFBLGlDQUFBLEVBQUE7QUFDQSxvQkFBQSxpQ0FBQSxFQUFBO0FBQ0Esc0JBQUEsaUNBQUEsRUFBQTtBQUNBLGdCQUFBLGlDQUFBLEVBQUE7QUFDQSx1QkFBQSxpQ0FBQSxFQUFBO0FBQ0EscUJBQUEsaUNBQUEsRUFBQTtBQUNBLG9CQUFBLGtDQUFBLEVBQUE7QUFDQSxtQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esa0JBQUEsa0NBQUEsRUFBQTtBQUNBLGlCQUFBLGtDQUFBLEVBQUE7QUFDQSxpQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esa0JBQUEsa0NBQUEsRUFBQTtBQUNBLG9CQUFBLGtDQUFBLEVBQUE7QUFDQSxvQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsZUFBQSxrQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsOEJBQUEsRUFBQTtBQUNBLGdCQUFBLGtDQUFBLEVBQUE7QUFDQSxvQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsa0NBQUEsRUFBQTtBQUNBLGtCQUFBLGtDQUFBLEVBQUE7QUFDQSxpQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsa0NBQUEsRUFBQTtBQUNBLHNCQUFBLG1DQUFBLEVBQUE7QUFDQSxrQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsbUJBQUEsbUNBQUEsRUFBQTtBQUNBLGtCQUFBLG1DQUFBLEVBQUE7QUFDQSxrQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsbUNBQUEsRUFBQTtBQUNBLGlCQUFBLG1DQUFBLEVBQUE7QUFDQSxnQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsZ0JBQUEsbUNBQUEsRUFBQTtBQUNBLGtCQUFBLDhCQUFBLEVBQUE7QUFDQSxnQkFBQSxrQ0FBQSxFQUFBO0FBQ0EscUJBQUEsa0NBQUEsRUFBQTtBQUNBLGlCQUFBLGtDQUFBLEVBQUE7QUFDQSxzQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsaUJBQUEsa0NBQUEsRUFBQTtBQUNBLHNCQUFBLGtDQUFBLEVBQUE7QUFDQSxlQUFBLG1DQUFBLEVBQUE7QUFDQSxxQkFBQSxtQ0FBQSxFQUFBO0FBQ0Esb0JBQUEsbUNBQUEsRUFBQTtBQUNBLHFCQUFBLG1DQUFBLEVBQUE7QUFDQSxnQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsbUJBQUEsbUNBQUEsRUFBQTtBQUNBLGlCQUFBLG1DQUFBLEVBQUE7QUFDQSxpQkFBQSxtQ0FBQSxFQUFBO0FBQ0Esa0JBQUEsbUNBQUEsRUFBQTtBQUNBLGlCQUFBLDhCQUFBLEVBQUE7QUFDQSxnQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esa0JBQUEsa0NBQUEsRUFBQTtBQUNBLGdCQUFBLGtDQUFBLEVBQUE7QUFDQSxpQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esa0JBQUEsa0NBQUEsRUFBQTtBQUNBLG9CQUFBLGtDQUFBLEVBQUE7QUFDQSxxQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsaUJBQUEsbUNBQUEsRUFBQTtBQUNBLGlCQUFBLG1DQUFBLEVBQUE7QUFDQSxnQkFBQSw4QkFBQSxFQUFBO0FBQ0EsaUJBQUEsa0NBQUEsRUFBQTtBQUNBLHFCQUFBLGtDQUFBLEVBQUE7QUFDQSxxQkFBQSxrQ0FBQSxFQUFBO0FBQ0Esb0JBQUEsa0NBQUEsRUFBQTtBQUNBLHNCQUFBLGtDQUFBLEVBQUE7QUFDQSxzRUFBQTtBQUNBLHNCQUFBLGtDQUFBLEVBQUE7QUFDQSxnQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsaUJBQUEsbUNBQUEsRUFBQTtBQUNBLHNCQUFBLG1DQUFBLEVBQUE7QUFDQSxxQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsaUJBQUEsOEJBQUEsRUFBQTtBQUNBLHVCQUFBLGtDQUFBLEVBQUE7QUFDQSxrQkFBQSxrQ0FBQSxFQUFBO0FBQ0EscUJBQUEsa0NBQUEsRUFBQTtBQUNBLHFCQUFBLGtDQUFBLEVBQUE7QUFDQSxxQkFBQSxrQ0FBQSxFQUFBO0FBQ0EscUJBQUEsa0NBQUEsRUFBQTtBQUNBLHVCQUFBLDhCQUFBLEVBQUE7QUFDQSx3QkFBQSxrQ0FBQSxFQUFBO0FBQ0Esd0JBQUEsa0NBQUEsRUFBQTtBQUNBLDZCQUFBLGtDQUFBLEVBQUE7QUFDQSw2QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNkJBQUEsa0NBQUEsRUFBQTtBQUNBLDZCQUFBLGtDQUFBLEVBQUE7QUFDQSwwQkFBQSxtQ0FBQSxFQUFBO0FBQ0EsMEJBQUEsbUNBQUEsRUFBQTtBQUNBLDBCQUFBLG1DQUFBLEVBQUE7QUFDQSwwQkFBQSxtQ0FBQSxFQUFBO0FBQ0EseUJBQUEsbUNBQUEsRUFBQTtBQUNBLDBCQUFBLG1DQUFBLEVBQUE7QUFDQSx3QkFBQSxtQ0FBQSxFQUFBO0FBQ0EsNEJBQUEsOEJBQUEsRUFBQTtBQUNBLDZCQUFBLGtDQUFBLEVBQUE7QUFDQSw2QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsNEJBQUEsa0NBQUEsRUFBQTtBQUNBLDZCQUFBLGtDQUFBLEVBQUE7QUFDQSw2QkFBQSxrQ0FBQSxFQUFBO0FBQ0EsZ0NBQUEsOEJBQUEsRUFBQTtBQUNBLGtDQUFBLGtDQUFBLEVBQUE7QUFDQSwrQkFBQSxrQ0FBQSxFQUFBO0FBQ0EsaUNBQUEsa0NBQUEsRUFBQTtBQUNBLGlDQUFBLGtDQUFBLEVBQUE7QUFDQSw0QkFBQSxrQ0FBQSxFQUFBOzs7QUFHQTtvQ0FDQTs7QUFFQSxtQkFBQTtBQUNBOzs7O0NBSUEsNEJBQUE7Q0FDQTtBQUNBOzs7O0NBSUEsNkJBQUE7Q0FDQTtBQUNBOzs7O0NBSUEsK0JBQUE7Q0FDQTtBQUNBOzs7O0NBSUEsZ0NBQUE7Q0FDQTs7QUFFQSxjQUFBO0FBQ0E7Q0FDQSxvQkFBQTtDQUNBLFlBQUE7Q0FDQSwwQkFBQSxDQUFBLGtCQUFBO0NBQ0E7QUFDQTtDQUNBLHNCQUFBO0NBQ0EsYUFBQTtDQUNBLG9CQUFBO0NBQ0EsWUFBQTtDQUNBLDBCQUFBLENBQUEsa0JBQUE7Q0FDQSxtQkFBQTtDQUNBIiwiZmlsZSI6ImpxdWVyeS11aS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgalF1ZXJ5IFVJIC0gdjEuMTEuNCAtIDIwMTYtMDItMDlcclxuKiBodHRwOi8vanF1ZXJ5dWkuY29tXHJcbiogSW5jbHVkZXM6IGNvcmUuY3NzLCBkcmFnZ2FibGUuY3NzLCByZXNpemFibGUuY3NzLCBzZWxlY3RhYmxlLmNzcywgc29ydGFibGUuY3NzLCBhY2NvcmRpb24uY3NzLCBhdXRvY29tcGxldGUuY3NzLCBidXR0b24uY3NzLCBkYXRlcGlja2VyLmNzcywgZGlhbG9nLmNzcywgbWVudS5jc3MsIHByb2dyZXNzYmFyLmNzcywgc2VsZWN0bWVudS5jc3MsIHNsaWRlci5jc3MsIHNwaW5uZXIuY3NzLCB0YWJzLmNzcywgdG9vbHRpcC5jc3MsIHRoZW1lLmNzc1xyXG4qIFRvIHZpZXcgYW5kIG1vZGlmeSB0aGlzIHRoZW1lLCB2aXNpdCBodHRwOi8vanF1ZXJ5dWkuY29tL3RoZW1lcm9sbGVyLz9mZkRlZmF1bHQ9VmVyZGFuYSUyQ0FyaWFsJTJDc2Fucy1zZXJpZiZmd0RlZmF1bHQ9bm9ybWFsJmZzRGVmYXVsdD0xLjFlbSZjb3JuZXJSYWRpdXM9NHB4JmJnQ29sb3JIZWFkZXI9Y2NjY2NjJmJnVGV4dHVyZUhlYWRlcj1oaWdobGlnaHRfc29mdCZiZ0ltZ09wYWNpdHlIZWFkZXI9NzUmYm9yZGVyQ29sb3JIZWFkZXI9YWFhYWFhJmZjSGVhZGVyPTIyMjIyMiZpY29uQ29sb3JIZWFkZXI9MjIyMjIyJmJnQ29sb3JDb250ZW50PWZmZmZmZiZiZ1RleHR1cmVDb250ZW50PWZsYXQmYmdJbWdPcGFjaXR5Q29udGVudD03NSZib3JkZXJDb2xvckNvbnRlbnQ9YWFhYWFhJmZjQ29udGVudD0yMjIyMjImaWNvbkNvbG9yQ29udGVudD0yMjIyMjImYmdDb2xvckRlZmF1bHQ9ZTZlNmU2JmJnVGV4dHVyZURlZmF1bHQ9Z2xhc3MmYmdJbWdPcGFjaXR5RGVmYXVsdD03NSZib3JkZXJDb2xvckRlZmF1bHQ9ZDNkM2QzJmZjRGVmYXVsdD01NTU1NTUmaWNvbkNvbG9yRGVmYXVsdD04ODg4ODgmYmdDb2xvckhvdmVyPWRhZGFkYSZiZ1RleHR1cmVIb3Zlcj1nbGFzcyZiZ0ltZ09wYWNpdHlIb3Zlcj03NSZib3JkZXJDb2xvckhvdmVyPTk5OTk5OSZmY0hvdmVyPTIxMjEyMSZpY29uQ29sb3JIb3Zlcj00NTQ1NDUmYmdDb2xvckFjdGl2ZT1mZmZmZmYmYmdUZXh0dXJlQWN0aXZlPWdsYXNzJmJnSW1nT3BhY2l0eUFjdGl2ZT02NSZib3JkZXJDb2xvckFjdGl2ZT1hYWFhYWEmZmNBY3RpdmU9MjEyMTIxJmljb25Db2xvckFjdGl2ZT00NTQ1NDUmYmdDb2xvckhpZ2hsaWdodD1mYmY5ZWUmYmdUZXh0dXJlSGlnaGxpZ2h0PWdsYXNzJmJnSW1nT3BhY2l0eUhpZ2hsaWdodD01NSZib3JkZXJDb2xvckhpZ2hsaWdodD1mY2VmYTEmZmNIaWdobGlnaHQ9MzYzNjM2Jmljb25Db2xvckhpZ2hsaWdodD0yZTgzZmYmYmdDb2xvckVycm9yPWZlZjFlYyZiZ1RleHR1cmVFcnJvcj1nbGFzcyZiZ0ltZ09wYWNpdHlFcnJvcj05NSZib3JkZXJDb2xvckVycm9yPWNkMGEwYSZmY0Vycm9yPWNkMGEwYSZpY29uQ29sb3JFcnJvcj1jZDBhMGEmYmdDb2xvck92ZXJsYXk9YWFhYWFhJmJnVGV4dHVyZU92ZXJsYXk9ZmxhdCZiZ0ltZ09wYWNpdHlPdmVybGF5PTAmb3BhY2l0eU92ZXJsYXk9MzAmYmdDb2xvclNoYWRvdz1hYWFhYWEmYmdUZXh0dXJlU2hhZG93PWZsYXQmYmdJbWdPcGFjaXR5U2hhZG93PTAmb3BhY2l0eVNoYWRvdz0zMCZ0aGlja25lc3NTaGFkb3c9OHB4Jm9mZnNldFRvcFNoYWRvdz0tOHB4Jm9mZnNldExlZnRTaGFkb3c9LThweCZjb3JuZXJSYWRpdXNTaGFkb3c9OHB4XHJcbiogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqL1xyXG5cclxuLyogTGF5b3V0IGhlbHBlcnNcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbi51aS1oZWxwZXItaGlkZGVuIHtcclxuXHRkaXNwbGF5OiBub25lO1xyXG59XHJcbi51aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUge1xyXG5cdGJvcmRlcjogMDtcclxuXHRjbGlwOiByZWN0KDAgMCAwIDApO1xyXG5cdGhlaWdodDogMXB4O1xyXG5cdG1hcmdpbjogLTFweDtcclxuXHRvdmVyZmxvdzogaGlkZGVuO1xyXG5cdHBhZGRpbmc6IDA7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdHdpZHRoOiAxcHg7XHJcbn1cclxuLnVpLWhlbHBlci1yZXNldCB7XHJcblx0bWFyZ2luOiAwO1xyXG5cdHBhZGRpbmc6IDA7XHJcblx0Ym9yZGVyOiAwO1xyXG5cdG91dGxpbmU6IDA7XHJcblx0bGluZS1oZWlnaHQ6IDEuMztcclxuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcblx0Zm9udC1zaXplOiAxMDAlO1xyXG5cdGxpc3Qtc3R5bGU6IG5vbmU7XHJcbn1cclxuLnVpLWhlbHBlci1jbGVhcmZpeDpiZWZvcmUsXHJcbi51aS1oZWxwZXItY2xlYXJmaXg6YWZ0ZXIge1xyXG5cdGNvbnRlbnQ6IFwiXCI7XHJcblx0ZGlzcGxheTogdGFibGU7XHJcblx0Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcclxufVxyXG4udWktaGVscGVyLWNsZWFyZml4OmFmdGVyIHtcclxuXHRjbGVhcjogYm90aDtcclxufVxyXG4udWktaGVscGVyLWNsZWFyZml4IHtcclxuXHRtaW4taGVpZ2h0OiAwOyAvKiBzdXBwb3J0OiBJRTcgKi9cclxufVxyXG4udWktaGVscGVyLXpmaXgge1xyXG5cdHdpZHRoOiAxMDAlO1xyXG5cdGhlaWdodDogMTAwJTtcclxuXHR0b3A6IDA7XHJcblx0bGVmdDogMDtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0b3BhY2l0eTogMDtcclxuXHRmaWx0ZXI6QWxwaGEoT3BhY2l0eT0wKTsgLyogc3VwcG9ydDogSUU4ICovXHJcbn1cclxuXHJcbi51aS1mcm9udCB7XHJcblx0ei1pbmRleDogMTAwO1xyXG59XHJcblxyXG5cclxuLyogSW50ZXJhY3Rpb24gQ3Vlc1xyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuLnVpLXN0YXRlLWRpc2FibGVkIHtcclxuXHRjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDtcclxufVxyXG5cclxuXHJcbi8qIEljb25zXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuLyogc3RhdGVzIGFuZCBpbWFnZXMgKi9cclxuLnVpLWljb24ge1xyXG5cdGRpc3BsYXk6IGJsb2NrO1xyXG5cdHRleHQtaW5kZW50OiAtOTk5OTlweDtcclxuXHRvdmVyZmxvdzogaGlkZGVuO1xyXG5cdGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XHJcbn1cclxuXHJcblxyXG4vKiBNaXNjIHZpc3VhbHNcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4vKiBPdmVybGF5cyAqL1xyXG4udWktd2lkZ2V0LW92ZXJsYXkge1xyXG5cdHBvc2l0aW9uOiBmaXhlZDtcclxuXHR0b3A6IDA7XHJcblx0bGVmdDogMDtcclxuXHR3aWR0aDogMTAwJTtcclxuXHRoZWlnaHQ6IDEwMCU7XHJcbn1cclxuLnVpLWRyYWdnYWJsZS1oYW5kbGUge1xyXG5cdC1tcy10b3VjaC1hY3Rpb246IG5vbmU7XHJcblx0dG91Y2gtYWN0aW9uOiBub25lO1xyXG59XHJcbi51aS1yZXNpemFibGUge1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG4udWktcmVzaXphYmxlLWhhbmRsZSB7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdGZvbnQtc2l6ZTogMC4xcHg7XHJcblx0ZGlzcGxheTogYmxvY2s7XHJcblx0LW1zLXRvdWNoLWFjdGlvbjogbm9uZTtcclxuXHR0b3VjaC1hY3Rpb246IG5vbmU7XHJcbn1cclxuLnVpLXJlc2l6YWJsZS1kaXNhYmxlZCAudWktcmVzaXphYmxlLWhhbmRsZSxcclxuLnVpLXJlc2l6YWJsZS1hdXRvaGlkZSAudWktcmVzaXphYmxlLWhhbmRsZSB7XHJcblx0ZGlzcGxheTogbm9uZTtcclxufVxyXG4udWktcmVzaXphYmxlLW4ge1xyXG5cdGN1cnNvcjogbi1yZXNpemU7XHJcblx0aGVpZ2h0OiA3cHg7XHJcblx0d2lkdGg6IDEwMCU7XHJcblx0dG9wOiAtNXB4O1xyXG5cdGxlZnQ6IDA7XHJcbn1cclxuLnVpLXJlc2l6YWJsZS1zIHtcclxuXHRjdXJzb3I6IHMtcmVzaXplO1xyXG5cdGhlaWdodDogN3B4O1xyXG5cdHdpZHRoOiAxMDAlO1xyXG5cdGJvdHRvbTogLTVweDtcclxuXHRsZWZ0OiAwO1xyXG59XHJcbi51aS1yZXNpemFibGUtZSB7XHJcblx0Y3Vyc29yOiBlLXJlc2l6ZTtcclxuXHR3aWR0aDogN3B4O1xyXG5cdHJpZ2h0OiAtNXB4O1xyXG5cdHRvcDogMDtcclxuXHRoZWlnaHQ6IDEwMCU7XHJcbn1cclxuLnVpLXJlc2l6YWJsZS13IHtcclxuXHRjdXJzb3I6IHctcmVzaXplO1xyXG5cdHdpZHRoOiA3cHg7XHJcblx0bGVmdDogLTVweDtcclxuXHR0b3A6IDA7XHJcblx0aGVpZ2h0OiAxMDAlO1xyXG59XHJcbi51aS1yZXNpemFibGUtc2Uge1xyXG5cdGN1cnNvcjogc2UtcmVzaXplO1xyXG5cdHdpZHRoOiAxMnB4O1xyXG5cdGhlaWdodDogMTJweDtcclxuXHRyaWdodDogMXB4O1xyXG5cdGJvdHRvbTogMXB4O1xyXG59XHJcbi51aS1yZXNpemFibGUtc3cge1xyXG5cdGN1cnNvcjogc3ctcmVzaXplO1xyXG5cdHdpZHRoOiA5cHg7XHJcblx0aGVpZ2h0OiA5cHg7XHJcblx0bGVmdDogLTVweDtcclxuXHRib3R0b206IC01cHg7XHJcbn1cclxuLnVpLXJlc2l6YWJsZS1udyB7XHJcblx0Y3Vyc29yOiBudy1yZXNpemU7XHJcblx0d2lkdGg6IDlweDtcclxuXHRoZWlnaHQ6IDlweDtcclxuXHRsZWZ0OiAtNXB4O1xyXG5cdHRvcDogLTVweDtcclxufVxyXG4udWktcmVzaXphYmxlLW5lIHtcclxuXHRjdXJzb3I6IG5lLXJlc2l6ZTtcclxuXHR3aWR0aDogOXB4O1xyXG5cdGhlaWdodDogOXB4O1xyXG5cdHJpZ2h0OiAtNXB4O1xyXG5cdHRvcDogLTVweDtcclxufVxyXG4udWktc2VsZWN0YWJsZSB7XHJcblx0LW1zLXRvdWNoLWFjdGlvbjogbm9uZTtcclxuXHR0b3VjaC1hY3Rpb246IG5vbmU7XHJcbn1cclxuLnVpLXNlbGVjdGFibGUtaGVscGVyIHtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0ei1pbmRleDogMTAwO1xyXG5cdGJvcmRlcjogMXB4IGRvdHRlZCBibGFjaztcclxufVxyXG4udWktc29ydGFibGUtaGFuZGxlIHtcclxuXHQtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xyXG5cdHRvdWNoLWFjdGlvbjogbm9uZTtcclxufVxyXG4udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taGVhZGVyIHtcclxuXHRkaXNwbGF5OiBibG9jaztcclxuXHRjdXJzb3I6IHBvaW50ZXI7XHJcblx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdG1hcmdpbjogMnB4IDAgMCAwO1xyXG5cdHBhZGRpbmc6IC41ZW0gLjVlbSAuNWVtIC43ZW07XHJcblx0bWluLWhlaWdodDogMDsgLyogc3VwcG9ydDogSUU3ICovXHJcblx0Zm9udC1zaXplOiAxMDAlO1xyXG59XHJcbi51aS1hY2NvcmRpb24gLnVpLWFjY29yZGlvbi1pY29ucyB7XHJcblx0cGFkZGluZy1sZWZ0OiAyLjJlbTtcclxufVxyXG4udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taWNvbnMgLnVpLWFjY29yZGlvbi1pY29ucyB7XHJcblx0cGFkZGluZy1sZWZ0OiAyLjJlbTtcclxufVxyXG4udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taGVhZGVyIC51aS1hY2NvcmRpb24taGVhZGVyLWljb24ge1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRsZWZ0OiAuNWVtO1xyXG5cdHRvcDogNTAlO1xyXG5cdG1hcmdpbi10b3A6IC04cHg7XHJcbn1cclxuLnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWNvbnRlbnQge1xyXG5cdHBhZGRpbmc6IDFlbSAyLjJlbTtcclxuXHRib3JkZXItdG9wOiAwO1xyXG5cdG92ZXJmbG93OiBhdXRvO1xyXG59XHJcbi51aS1hdXRvY29tcGxldGUge1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHR0b3A6IDA7XHJcblx0bGVmdDogMDtcclxuXHRjdXJzb3I6IGRlZmF1bHQ7XHJcbn1cclxuLnVpLWJ1dHRvbiB7XHJcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHRwYWRkaW5nOiAwO1xyXG5cdGxpbmUtaGVpZ2h0OiBub3JtYWw7XHJcblx0bWFyZ2luLXJpZ2h0OiAuMWVtO1xyXG5cdGN1cnNvcjogcG9pbnRlcjtcclxuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRvdmVyZmxvdzogdmlzaWJsZTsgLyogcmVtb3ZlcyBleHRyYSB3aWR0aCBpbiBJRSAqL1xyXG59XHJcbi51aS1idXR0b24sXHJcbi51aS1idXR0b246bGluayxcclxuLnVpLWJ1dHRvbjp2aXNpdGVkLFxyXG4udWktYnV0dG9uOmhvdmVyLFxyXG4udWktYnV0dG9uOmFjdGl2ZSB7XHJcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG59XHJcbi8qIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIGljb24sIGEgd2lkdGggbmVlZHMgdG8gYmUgc2V0IGhlcmUgKi9cclxuLnVpLWJ1dHRvbi1pY29uLW9ubHkge1xyXG5cdHdpZHRoOiAyLjJlbTtcclxufVxyXG4vKiBidXR0b24gZWxlbWVudHMgc2VlbSB0byBuZWVkIGEgbGl0dGxlIG1vcmUgd2lkdGggKi9cclxuYnV0dG9uLnVpLWJ1dHRvbi1pY29uLW9ubHkge1xyXG5cdHdpZHRoOiAyLjRlbTtcclxufVxyXG4udWktYnV0dG9uLWljb25zLW9ubHkge1xyXG5cdHdpZHRoOiAzLjRlbTtcclxufVxyXG5idXR0b24udWktYnV0dG9uLWljb25zLW9ubHkge1xyXG5cdHdpZHRoOiAzLjdlbTtcclxufVxyXG5cclxuLyogYnV0dG9uIHRleHQgZWxlbWVudCAqL1xyXG4udWktYnV0dG9uIC51aS1idXR0b24tdGV4dCB7XHJcblx0ZGlzcGxheTogYmxvY2s7XHJcblx0bGluZS1oZWlnaHQ6IG5vcm1hbDtcclxufVxyXG4udWktYnV0dG9uLXRleHQtb25seSAudWktYnV0dG9uLXRleHQge1xyXG5cdHBhZGRpbmc6IC40ZW0gMWVtO1xyXG59XHJcbi51aS1idXR0b24taWNvbi1vbmx5IC51aS1idXR0b24tdGV4dCxcclxuLnVpLWJ1dHRvbi1pY29ucy1vbmx5IC51aS1idXR0b24tdGV4dCB7XHJcblx0cGFkZGluZzogLjRlbTtcclxuXHR0ZXh0LWluZGVudDogLTk5OTk5OTlweDtcclxufVxyXG4udWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IC51aS1idXR0b24tdGV4dCxcclxuLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24tdGV4dCB7XHJcblx0cGFkZGluZzogLjRlbSAxZW0gLjRlbSAyLjFlbTtcclxufVxyXG4udWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgLnVpLWJ1dHRvbi10ZXh0LFxyXG4udWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWJ1dHRvbi10ZXh0IHtcclxuXHRwYWRkaW5nOiAuNGVtIDIuMWVtIC40ZW0gMWVtO1xyXG59XHJcbi51aS1idXR0b24tdGV4dC1pY29ucyAudWktYnV0dG9uLXRleHQge1xyXG5cdHBhZGRpbmctbGVmdDogMi4xZW07XHJcblx0cGFkZGluZy1yaWdodDogMi4xZW07XHJcbn1cclxuLyogbm8gaWNvbiBzdXBwb3J0IGZvciBpbnB1dCBlbGVtZW50cywgcHJvdmlkZSBwYWRkaW5nIGJ5IGRlZmF1bHQgKi9cclxuaW5wdXQudWktYnV0dG9uIHtcclxuXHRwYWRkaW5nOiAuNGVtIDFlbTtcclxufVxyXG5cclxuLyogYnV0dG9uIGljb24gZWxlbWVudChzKSAqL1xyXG4udWktYnV0dG9uLWljb24tb25seSAudWktaWNvbixcclxuLnVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSAudWktaWNvbixcclxuLnVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IC51aS1pY29uLFxyXG4udWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWljb24sXHJcbi51aS1idXR0b24taWNvbnMtb25seSAudWktaWNvbiB7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdHRvcDogNTAlO1xyXG5cdG1hcmdpbi10b3A6IC04cHg7XHJcbn1cclxuLnVpLWJ1dHRvbi1pY29uLW9ubHkgLnVpLWljb24ge1xyXG5cdGxlZnQ6IDUwJTtcclxuXHRtYXJnaW4tbGVmdDogLThweDtcclxufVxyXG4udWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IC51aS1idXR0b24taWNvbi1wcmltYXJ5LFxyXG4udWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWJ1dHRvbi1pY29uLXByaW1hcnksXHJcbi51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLWljb24tcHJpbWFyeSB7XHJcblx0bGVmdDogLjVlbTtcclxufVxyXG4udWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgLnVpLWJ1dHRvbi1pY29uLXNlY29uZGFyeSxcclxuLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksXHJcbi51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHtcclxuXHRyaWdodDogLjVlbTtcclxufVxyXG5cclxuLyogYnV0dG9uIHNldHMgKi9cclxuLnVpLWJ1dHRvbnNldCB7XHJcblx0bWFyZ2luLXJpZ2h0OiA3cHg7XHJcbn1cclxuLnVpLWJ1dHRvbnNldCAudWktYnV0dG9uIHtcclxuXHRtYXJnaW4tbGVmdDogMDtcclxuXHRtYXJnaW4tcmlnaHQ6IC0uM2VtO1xyXG59XHJcblxyXG4vKiB3b3JrYXJvdW5kcyAqL1xyXG4vKiByZXNldCBleHRyYSBwYWRkaW5nIGluIEZpcmVmb3gsIHNlZSBoNWJwLmNvbS9sICovXHJcbmlucHV0LnVpLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcclxuYnV0dG9uLnVpLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciB7XHJcblx0Ym9yZGVyOiAwO1xyXG5cdHBhZGRpbmc6IDA7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIge1xyXG5cdHdpZHRoOiAxN2VtO1xyXG5cdHBhZGRpbmc6IC4yZW0gLjJlbSAwO1xyXG5cdGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItaGVhZGVyIHtcclxuXHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0cGFkZGluZzogLjJlbSAwO1xyXG59XHJcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYsXHJcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQge1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHR0b3A6IDJweDtcclxuXHR3aWR0aDogMS44ZW07XHJcblx0aGVpZ2h0OiAxLjhlbTtcclxufVxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyLFxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIHtcclxuXHR0b3A6IDFweDtcclxufVxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2IHtcclxuXHRsZWZ0OiAycHg7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dCB7XHJcblx0cmlnaHQ6IDJweDtcclxufVxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyIHtcclxuXHRsZWZ0OiAxcHg7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlciB7XHJcblx0cmlnaHQ6IDFweDtcclxufVxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2IHNwYW4sXHJcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQgc3BhbiB7XHJcblx0ZGlzcGxheTogYmxvY2s7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdGxlZnQ6IDUwJTtcclxuXHRtYXJnaW4tbGVmdDogLThweDtcclxuXHR0b3A6IDUwJTtcclxuXHRtYXJnaW4tdG9wOiAtOHB4O1xyXG59XHJcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxlIHtcclxuXHRtYXJnaW46IDAgMi4zZW07XHJcblx0bGluZS1oZWlnaHQ6IDEuOGVtO1xyXG5cdHRleHQtYWxpZ246IGNlbnRlcjtcclxufVxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci10aXRsZSBzZWxlY3Qge1xyXG5cdGZvbnQtc2l6ZTogMWVtO1xyXG5cdG1hcmdpbjogMXB4IDA7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsXHJcbi51aS1kYXRlcGlja2VyIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXIge1xyXG5cdHdpZHRoOiA0NSU7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgdGFibGUge1xyXG5cdHdpZHRoOiAxMDAlO1xyXG5cdGZvbnQtc2l6ZTogLjllbTtcclxuXHRib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xyXG5cdG1hcmdpbjogMCAwIC40ZW07XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgdGgge1xyXG5cdHBhZGRpbmc6IC43ZW0gLjNlbTtcclxuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcblx0Ym9yZGVyOiAwO1xyXG59XHJcbi51aS1kYXRlcGlja2VyIHRkIHtcclxuXHRib3JkZXI6IDA7XHJcblx0cGFkZGluZzogMXB4O1xyXG59XHJcbi51aS1kYXRlcGlja2VyIHRkIHNwYW4sXHJcbi51aS1kYXRlcGlja2VyIHRkIGEge1xyXG5cdGRpc3BsYXk6IGJsb2NrO1xyXG5cdHBhZGRpbmc6IC4yZW07XHJcblx0dGV4dC1hbGlnbjogcmlnaHQ7XHJcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG59XHJcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUge1xyXG5cdGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XHJcblx0bWFyZ2luOiAuN2VtIDAgMCAwO1xyXG5cdHBhZGRpbmc6IDAgLjJlbTtcclxuXHRib3JkZXItbGVmdDogMDtcclxuXHRib3JkZXItcmlnaHQ6IDA7XHJcblx0Ym9yZGVyLWJvdHRvbTogMDtcclxufVxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbiB7XHJcblx0ZmxvYXQ6IHJpZ2h0O1xyXG5cdG1hcmdpbjogLjVlbSAuMmVtIC40ZW07XHJcblx0Y3Vyc29yOiBwb2ludGVyO1xyXG5cdHBhZGRpbmc6IC4yZW0gLjZlbSAuM2VtIC42ZW07XHJcblx0d2lkdGg6IGF1dG87XHJcblx0b3ZlcmZsb3c6IHZpc2libGU7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24udWktZGF0ZXBpY2tlci1jdXJyZW50IHtcclxuXHRmbG9hdDogbGVmdDtcclxufVxyXG5cclxuLyogd2l0aCBtdWx0aXBsZSBjYWxlbmRhcnMgKi9cclxuLnVpLWRhdGVwaWNrZXIudWktZGF0ZXBpY2tlci1tdWx0aSB7XHJcblx0d2lkdGg6IGF1dG87XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAge1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG59XHJcbi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwIHRhYmxlIHtcclxuXHR3aWR0aDogOTUlO1xyXG5cdG1hcmdpbjogMCBhdXRvIC40ZW07XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItbXVsdGktMiAudWktZGF0ZXBpY2tlci1ncm91cCB7XHJcblx0d2lkdGg6IDUwJTtcclxufVxyXG4udWktZGF0ZXBpY2tlci1tdWx0aS0zIC51aS1kYXRlcGlja2VyLWdyb3VwIHtcclxuXHR3aWR0aDogMzMuMyU7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItbXVsdGktNCAudWktZGF0ZXBpY2tlci1ncm91cCB7XHJcblx0d2lkdGg6IDI1JTtcclxufVxyXG4udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IC51aS1kYXRlcGlja2VyLWhlYWRlcixcclxuLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIC51aS1kYXRlcGlja2VyLWhlYWRlciB7XHJcblx0Ym9yZGVyLWxlZnQtd2lkdGg6IDA7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB7XHJcblx0Y2xlYXI6IGxlZnQ7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItcm93LWJyZWFrIHtcclxuXHRjbGVhcjogYm90aDtcclxuXHR3aWR0aDogMTAwJTtcclxuXHRmb250LXNpemU6IDA7XHJcbn1cclxuXHJcbi8qIFJUTCBzdXBwb3J0ICovXHJcbi51aS1kYXRlcGlja2VyLXJ0bCB7XHJcblx0ZGlyZWN0aW9uOiBydGw7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLXByZXYge1xyXG5cdHJpZ2h0OiAycHg7XHJcblx0bGVmdDogYXV0bztcclxufVxyXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dCB7XHJcblx0bGVmdDogMnB4O1xyXG5cdHJpZ2h0OiBhdXRvO1xyXG59XHJcbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1wcmV2OmhvdmVyIHtcclxuXHRyaWdodDogMXB4O1xyXG5cdGxlZnQ6IGF1dG87XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHQ6aG92ZXIge1xyXG5cdGxlZnQ6IDFweDtcclxuXHRyaWdodDogYXV0bztcclxufVxyXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB7XHJcblx0Y2xlYXI6IHJpZ2h0O1xyXG59XHJcbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbiB7XHJcblx0ZmxvYXQ6IGxlZnQ7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudCxcclxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwIHtcclxuXHRmbG9hdDogcmlnaHQ7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QgLnVpLWRhdGVwaWNrZXItaGVhZGVyLFxyXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIC51aS1kYXRlcGlja2VyLWhlYWRlciB7XHJcblx0Ym9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xyXG5cdGJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7XHJcbn1cclxuLnVpLWRpYWxvZyB7XHJcblx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0dG9wOiAwO1xyXG5cdGxlZnQ6IDA7XHJcblx0cGFkZGluZzogLjJlbTtcclxuXHRvdXRsaW5lOiAwO1xyXG59XHJcbi51aS1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZWJhciB7XHJcblx0cGFkZGluZzogLjRlbSAxZW07XHJcblx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG59XHJcbi51aS1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZSB7XHJcblx0ZmxvYXQ6IGxlZnQ7XHJcblx0bWFyZ2luOiAuMWVtIDA7XHJcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuXHR3aWR0aDogOTAlO1xyXG5cdG92ZXJmbG93OiBoaWRkZW47XHJcblx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XHJcbn1cclxuLnVpLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlIHtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0cmlnaHQ6IC4zZW07XHJcblx0dG9wOiA1MCU7XHJcblx0d2lkdGg6IDIwcHg7XHJcblx0bWFyZ2luOiAtMTBweCAwIDAgMDtcclxuXHRwYWRkaW5nOiAxcHg7XHJcblx0aGVpZ2h0OiAyMHB4O1xyXG59XHJcbi51aS1kaWFsb2cgLnVpLWRpYWxvZy1jb250ZW50IHtcclxuXHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0Ym9yZGVyOiAwO1xyXG5cdHBhZGRpbmc6IC41ZW0gMWVtO1xyXG5cdGJhY2tncm91bmQ6IG5vbmU7XHJcblx0b3ZlcmZsb3c6IGF1dG87XHJcbn1cclxuLnVpLWRpYWxvZyAudWktZGlhbG9nLWJ1dHRvbnBhbmUge1xyXG5cdHRleHQtYWxpZ246IGxlZnQ7XHJcblx0Ym9yZGVyLXdpZHRoOiAxcHggMCAwIDA7XHJcblx0YmFja2dyb3VuZC1pbWFnZTogbm9uZTtcclxuXHRtYXJnaW4tdG9wOiAuNWVtO1xyXG5cdHBhZGRpbmc6IC4zZW0gMWVtIC41ZW0gLjRlbTtcclxufVxyXG4udWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZSAudWktZGlhbG9nLWJ1dHRvbnNldCB7XHJcblx0ZmxvYXQ6IHJpZ2h0O1xyXG59XHJcbi51aS1kaWFsb2cgLnVpLWRpYWxvZy1idXR0b25wYW5lIGJ1dHRvbiB7XHJcblx0bWFyZ2luOiAuNWVtIC40ZW0gLjVlbSAwO1xyXG5cdGN1cnNvcjogcG9pbnRlcjtcclxufVxyXG4udWktZGlhbG9nIC51aS1yZXNpemFibGUtc2Uge1xyXG5cdHdpZHRoOiAxMnB4O1xyXG5cdGhlaWdodDogMTJweDtcclxuXHRyaWdodDogLTVweDtcclxuXHRib3R0b206IC01cHg7XHJcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogMTZweCAxNnB4O1xyXG59XHJcbi51aS1kcmFnZ2FibGUgLnVpLWRpYWxvZy10aXRsZWJhciB7XHJcblx0Y3Vyc29yOiBtb3ZlO1xyXG59XHJcbi51aS1tZW51IHtcclxuXHRsaXN0LXN0eWxlOiBub25lO1xyXG5cdHBhZGRpbmc6IDA7XHJcblx0bWFyZ2luOiAwO1xyXG5cdGRpc3BsYXk6IGJsb2NrO1xyXG5cdG91dGxpbmU6IG5vbmU7XHJcbn1cclxuLnVpLW1lbnUgLnVpLW1lbnUge1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxufVxyXG4udWktbWVudSAudWktbWVudS1pdGVtIHtcclxuXHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0bWFyZ2luOiAwO1xyXG5cdHBhZGRpbmc6IDNweCAxZW0gM3B4IC40ZW07XHJcblx0Y3Vyc29yOiBwb2ludGVyO1xyXG5cdG1pbi1oZWlnaHQ6IDA7IC8qIHN1cHBvcnQ6IElFNyAqL1xyXG5cdC8qIHN1cHBvcnQ6IElFMTAsIHNlZSAjODg0NCAqL1xyXG5cdGxpc3Qtc3R5bGUtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBSUFBQUFBQUFQLy8veUg1QkFFQUFBQUFMQUFBQUFBQkFBRUFBQUlCUkFBN1wiKTtcclxufVxyXG4udWktbWVudSAudWktbWVudS1kaXZpZGVyIHtcclxuXHRtYXJnaW46IDVweCAwO1xyXG5cdGhlaWdodDogMDtcclxuXHRmb250LXNpemU6IDA7XHJcblx0bGluZS1oZWlnaHQ6IDA7XHJcblx0Ym9yZGVyLXdpZHRoOiAxcHggMCAwIDA7XHJcbn1cclxuLnVpLW1lbnUgLnVpLXN0YXRlLWZvY3VzLFxyXG4udWktbWVudSAudWktc3RhdGUtYWN0aXZlIHtcclxuXHRtYXJnaW46IC0xcHg7XHJcbn1cclxuXHJcbi8qIGljb24gc3VwcG9ydCAqL1xyXG4udWktbWVudS1pY29ucyB7XHJcblx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG59XHJcbi51aS1tZW51LWljb25zIC51aS1tZW51LWl0ZW0ge1xyXG5cdHBhZGRpbmctbGVmdDogMmVtO1xyXG59XHJcblxyXG4vKiBsZWZ0LWFsaWduZWQgKi9cclxuLnVpLW1lbnUgLnVpLWljb24ge1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHR0b3A6IDA7XHJcblx0Ym90dG9tOiAwO1xyXG5cdGxlZnQ6IC4yZW07XHJcblx0bWFyZ2luOiBhdXRvIDA7XHJcbn1cclxuXHJcbi8qIHJpZ2h0LWFsaWduZWQgKi9cclxuLnVpLW1lbnUgLnVpLW1lbnUtaWNvbiB7XHJcblx0bGVmdDogYXV0bztcclxuXHRyaWdodDogMDtcclxufVxyXG4udWktcHJvZ3Jlc3NiYXIge1xyXG5cdGhlaWdodDogMmVtO1xyXG5cdHRleHQtYWxpZ246IGxlZnQ7XHJcblx0b3ZlcmZsb3c6IGhpZGRlbjtcclxufVxyXG4udWktcHJvZ3Jlc3NiYXIgLnVpLXByb2dyZXNzYmFyLXZhbHVlIHtcclxuXHRtYXJnaW46IC0xcHg7XHJcblx0aGVpZ2h0OiAxMDAlO1xyXG59XHJcbi51aS1wcm9ncmVzc2JhciAudWktcHJvZ3Jlc3NiYXItb3ZlcmxheSB7XHJcblx0YmFja2dyb3VuZDogdXJsKFwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoS0FBb0FJQUJBQUFBQVAvLy95SC9DMDVGVkZORFFWQkZNaTR3QXdFQUFBQWgrUVFKQVFBQkFDd0FBQUFBS0FBb0FBQUNrWXdOcVhyZEM1MkRTMDZhN01GWkkrNEZIQkNLb0RlV0tYcXltUHFHcXh2SnJYWmJNeDdUdGMrdzlYZ1UyRkIzbE95UVJXRVQySUZHaVU5bTFmckRWcHhaWmM2YmZId3Y0YzFZWFA2azFWZHkyOTJGYjZVa3V2RnRYcHZXU3pBK0h5Y1hKSFVYaUdZSWlNZzJSNlc0NTlnbldHZkhOZGpJcURXVnFlbUgyZWtwT2JrcE9scHBXVXFaaXFyNmVkcXFXUUFBSWZrRUNRRUFBUUFzQUFBQUFDZ0FLQUFBQXBTTWdabkdmYXFjZzFFMnV1ekRtbUhVQlI4UWlsOTVoaVBLcVduM2FxdExzUzE4eTdHMVN6TmVvd1dCRU50UWQrVDFKa3RQMDVuelBUZEpabFI2dlV4TldXalYrdlVXaFdOa1dGd3hsOVZwWlJlZFljZmxJT0xhZmFhMjhYZHNIL3lubGNjMXVQVkRaeFFJUjBLMjUrY0lDQ21vcUNlNW1HaFpPZmVZU1VoNXlKY0p5cmtaV1dwYVI4ZG9KMm80TllxNjJsQUFBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtWREk0WXkyMlpuSU5STnFvc3cwQnY3aTFneUhVa0ZqN29TYVdsdTNvdkM4R3hOc281Zmx1ejNxTFZoQlZlVC9MejdaVEh5eEw1ZERhbFFXUFZPc1FXdFJudXdYYUZUajlqVlZoOHBtYTlKalo0ellTajVaT3ltYTd1dW9sZmZoK0lSNWFXOTdjSHVCVVhLR0tYbEtqbitEaUhXTWNZSmFoNE4wbFlDTWxKT1hpcEdScjVxZGdvU1RycVdTcTZXRmwyeXBvYVVBQUFJZmtFQ1FFQUFRQXNBQUFBQUNnQUtBQUFBcGFFYjZITGdkL2lPN0ZOV3RjRldlK3VmT0RHalJmb2lKMmFrU2hidWViMHd0STUwem0wMnBidndmV0VNV0JRMXpLR2xMSWhza2lFUG05UjZ2Ulh4VjRaeldUMnlIT0dwV015b3JibEtsTnA4SG1IRWIvbENYamNXN2JtdFhQOFh0MjI5T1ZXUjFmb2QyZVdxTmZIdU1qWENQa0lHTmlsZU9pSW1WbUNPRW1vU2ZuM3lYbEpXbW9IR2hxcDZpbFl1V1lwbVRxS1VnQUFJZmtFQ1FFQUFRQXNBQUFBQUNnQUtBQUFBcGlFSDZrYjU4YmlRM0ZOV3RNRldXM2VOVmNvanVGR2ZxblpxU2VidVMwNnc1VjgwL1gwMnBLZTh6RndQNkVGV09UMWxERms4ckdFUmgxVFROT29jUTYxSG00WG0yVmV4VUhwemp5bVZpSHJGYmlFTHNlZlZybjZYS2ZudDJROUcvK1hkaWU0OTlYSGQyZzRoN2lvT0doWEdKYm9HQW5YU0Jub0J3S1l5ZmlvdWJaSjJIbjBSdVJaYWZsWk9pbDU2WnA2aWlvS1NYcFVBQUFoK1FRSkFRQUJBQ3dBQUFBQUtBQW9BQUFDa29RUnFSdm54dUk3a1UxYTFVVTViZDV0blNlT1pYaG1uNWxXSzNxTlRXdlJkUXhQOHF2YUMrL3lhWVF6WE83Qk12YVVFbUpSZDNUc2lNQWdzd21OWXJTZ1pkWXJUWDZ0U0hHWk83M2V6dUF3MnV4dVErQmJlWmZNeHNleFkzNSsvUWU0SjFpblYwZzR4M1dIdU1oSWwyalhPS1QyUStWVTVmZ29TVUk1MlZmWnlma0pHa2hhNmptWSthYVlkaXJxK2xRQUFDSDVCQWtCQUFFQUxBQUFBQUFvQUNnQUFBS1dCSUtwWWUwTDNZTktUb3Fzd1VsdnpuaWdkNHdpUjRLaFpyS3Q5VXBxaXA2MWk5RTN2TXZ4UmRIbGJFRmlFWGZrOVlBUll4T1paRDZWUTJwVXVuQm10UlhvMUxmOGhNVlZjTmw4SmFmVjM4YU0yL0Z1NVYxNkJuNjNyNnh0OTdqMDkrTVhTRmk0Qm5pR0ZhZTNoemJIOStoWUJ6a3B1VWg1YVptSHVhblpPWmdJdXZiR2lOZW9tQ25heHhhcDJ1cGFDWnNxKzFrQUFDSDVCQWtCQUFFQUxBQUFBQUFvQUNnQUFBS1hqSThCeTV6ZjRrT3hUVnJYTlZsdjFYMGQ4SUdaR0tMbk5wWXRtOExyOWNxVmV1T1N2Zk9XNzlEOWFESGl6TmhESmlkRlpoTnlkRWFoT2FESDZub210SmpwMXR1dEtvTldrdkE2SnFmUlZMSFUvUVVmYXU5bDJ4N0c1NGQxZmw5OTV4Y0lHQWRYcU1mQk5hZG9ZcmhIK01nMktCbHBWcGJsdUNpWG1NbloyU2g0R0JxSitja0lPcXFKNkxtS1NsbFptc29xNndwUUFBQWgrUVFKQVFBQkFDd0FBQUFBS0FBb0FBQUNsWXgvb0x2b3h1SkRrVTFhMVlVWmJKNTluU2QyWlhoV3FiUmEyL2dGOEd1MkRZM2lxczd5cnEreEJZRWtZdkZTTThhU1NPYkUrWmdSbDFCSEZaTnI3cFJDYXZaNUJXMjE0MmhZM0FOL3pXdHNtZjEycDlYeHhGbDJscExuMXJzZXp0ZlhaamRJV0lmMnM1ZEl0d2pZS0Jnbzl5ZzVwSGd6SlhURWVHbFp1ZW5weVBtcEdRb0tPV2tZbVNwYVNucUtpbGVJMkZBQUFDSDVCQWtCQUFFQUxBQUFBQUFvQUNnQUFBS1ZqQitndStqRzRrT1JUVnJWaFJsc25uMmRKM1psZUZhcHRGcmIrQ1htTzlPb3plTDVWZlA5OUh2QVdocGlVZGN3a3BCSDM4MjVBd1lkVTh4VHFsTEdodENvc0FyS01wdmZhMW1NUmFlOVZ2V1pmZUIyWGZQa2VMbW0xOGxVY0JqK3A1ZG5OOGpYWjNZSUdFaFl1T1VuNDVhb0NEa3AxNmhsNUlqWUp2aldLY25vR1FwcXlQbHBPaHIzYUVsYXFycTU2QnE3VkFBQU93PT1cIik7XHJcblx0aGVpZ2h0OiAxMDAlO1xyXG5cdGZpbHRlcjogYWxwaGEob3BhY2l0eT0yNSk7IC8qIHN1cHBvcnQ6IElFOCAqL1xyXG5cdG9wYWNpdHk6IDAuMjU7XHJcbn1cclxuLnVpLXByb2dyZXNzYmFyLWluZGV0ZXJtaW5hdGUgLnVpLXByb2dyZXNzYmFyLXZhbHVlIHtcclxuXHRiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xyXG59XHJcbi51aS1zZWxlY3RtZW51LW1lbnUge1xyXG5cdHBhZGRpbmc6IDA7XHJcblx0bWFyZ2luOiAwO1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHR0b3A6IDA7XHJcblx0bGVmdDogMDtcclxuXHRkaXNwbGF5OiBub25lO1xyXG59XHJcbi51aS1zZWxlY3RtZW51LW1lbnUgLnVpLW1lbnUge1xyXG5cdG92ZXJmbG93OiBhdXRvO1xyXG5cdC8qIFN1cHBvcnQ6IElFNyAqL1xyXG5cdG92ZXJmbG93LXg6IGhpZGRlbjtcclxuXHRwYWRkaW5nLWJvdHRvbTogMXB4O1xyXG59XHJcbi51aS1zZWxlY3RtZW51LW1lbnUgLnVpLW1lbnUgLnVpLXNlbGVjdG1lbnUtb3B0Z3JvdXAge1xyXG5cdGZvbnQtc2l6ZTogMWVtO1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjU7XHJcblx0cGFkZGluZzogMnB4IDAuNGVtO1xyXG5cdG1hcmdpbjogMC41ZW0gMCAwIDA7XHJcblx0aGVpZ2h0OiBhdXRvO1xyXG5cdGJvcmRlcjogMDtcclxufVxyXG4udWktc2VsZWN0bWVudS1vcGVuIHtcclxuXHRkaXNwbGF5OiBibG9jaztcclxufVxyXG4udWktc2VsZWN0bWVudS1idXR0b24ge1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRvdmVyZmxvdzogaGlkZGVuO1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcblx0Y3Vyc29yOiBwb2ludGVyO1xyXG59XHJcbi51aS1zZWxlY3RtZW51LWJ1dHRvbiBzcGFuLnVpLWljb24ge1xyXG5cdHJpZ2h0OiAwLjVlbTtcclxuXHRsZWZ0OiBhdXRvO1xyXG5cdG1hcmdpbi10b3A6IC04cHg7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdHRvcDogNTAlO1xyXG59XHJcbi51aS1zZWxlY3RtZW51LWJ1dHRvbiBzcGFuLnVpLXNlbGVjdG1lbnUtdGV4dCB7XHJcblx0dGV4dC1hbGlnbjogbGVmdDtcclxuXHRwYWRkaW5nOiAwLjRlbSAyLjFlbSAwLjRlbSAxZW07XHJcblx0ZGlzcGxheTogYmxvY2s7XHJcblx0bGluZS1oZWlnaHQ6IDEuNDtcclxuXHRvdmVyZmxvdzogaGlkZGVuO1xyXG5cdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbn1cclxuLnVpLXNsaWRlciB7XHJcblx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdHRleHQtYWxpZ246IGxlZnQ7XHJcbn1cclxuLnVpLXNsaWRlciAudWktc2xpZGVyLWhhbmRsZSB7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdHotaW5kZXg6IDI7XHJcblx0d2lkdGg6IDEuMmVtO1xyXG5cdGhlaWdodDogMS4yZW07XHJcblx0Y3Vyc29yOiBkZWZhdWx0O1xyXG5cdC1tcy10b3VjaC1hY3Rpb246IG5vbmU7XHJcblx0dG91Y2gtYWN0aW9uOiBub25lO1xyXG59XHJcbi51aS1zbGlkZXIgLnVpLXNsaWRlci1yYW5nZSB7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdHotaW5kZXg6IDE7XHJcblx0Zm9udC1zaXplOiAuN2VtO1xyXG5cdGRpc3BsYXk6IGJsb2NrO1xyXG5cdGJvcmRlcjogMDtcclxuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XHJcbn1cclxuXHJcbi8qIHN1cHBvcnQ6IElFOCAtIFNlZSAjNjcyNyAqL1xyXG4udWktc2xpZGVyLnVpLXN0YXRlLWRpc2FibGVkIC51aS1zbGlkZXItaGFuZGxlLFxyXG4udWktc2xpZGVyLnVpLXN0YXRlLWRpc2FibGVkIC51aS1zbGlkZXItcmFuZ2Uge1xyXG5cdGZpbHRlcjogaW5oZXJpdDtcclxufVxyXG5cclxuLnVpLXNsaWRlci1ob3Jpem9udGFsIHtcclxuXHRoZWlnaHQ6IC44ZW07XHJcbn1cclxuLnVpLXNsaWRlci1ob3Jpem9udGFsIC51aS1zbGlkZXItaGFuZGxlIHtcclxuXHR0b3A6IC0uM2VtO1xyXG5cdG1hcmdpbi1sZWZ0OiAtLjZlbTtcclxufVxyXG4udWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1yYW5nZSB7XHJcblx0dG9wOiAwO1xyXG5cdGhlaWdodDogMTAwJTtcclxufVxyXG4udWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1yYW5nZS1taW4ge1xyXG5cdGxlZnQ6IDA7XHJcbn1cclxuLnVpLXNsaWRlci1ob3Jpem9udGFsIC51aS1zbGlkZXItcmFuZ2UtbWF4IHtcclxuXHRyaWdodDogMDtcclxufVxyXG5cclxuLnVpLXNsaWRlci12ZXJ0aWNhbCB7XHJcblx0d2lkdGg6IC44ZW07XHJcblx0aGVpZ2h0OiAxMDBweDtcclxufVxyXG4udWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItaGFuZGxlIHtcclxuXHRsZWZ0OiAtLjNlbTtcclxuXHRtYXJnaW4tbGVmdDogMDtcclxuXHRtYXJnaW4tYm90dG9tOiAtLjZlbTtcclxufVxyXG4udWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItcmFuZ2Uge1xyXG5cdGxlZnQ6IDA7XHJcblx0d2lkdGg6IDEwMCU7XHJcbn1cclxuLnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLXJhbmdlLW1pbiB7XHJcblx0Ym90dG9tOiAwO1xyXG59XHJcbi51aS1zbGlkZXItdmVydGljYWwgLnVpLXNsaWRlci1yYW5nZS1tYXgge1xyXG5cdHRvcDogMDtcclxufVxyXG4udWktc3Bpbm5lciB7XHJcblx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRvdmVyZmxvdzogaGlkZGVuO1xyXG5cdHBhZGRpbmc6IDA7XHJcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxufVxyXG4udWktc3Bpbm5lci1pbnB1dCB7XHJcblx0Ym9yZGVyOiBub25lO1xyXG5cdGJhY2tncm91bmQ6IG5vbmU7XHJcblx0Y29sb3I6IGluaGVyaXQ7XHJcblx0cGFkZGluZzogMDtcclxuXHRtYXJnaW46IC4yZW0gMDtcclxuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cdG1hcmdpbi1sZWZ0OiAuNGVtO1xyXG5cdG1hcmdpbi1yaWdodDogMjJweDtcclxufVxyXG4udWktc3Bpbm5lci1idXR0b24ge1xyXG5cdHdpZHRoOiAxNnB4O1xyXG5cdGhlaWdodDogNTAlO1xyXG5cdGZvbnQtc2l6ZTogLjVlbTtcclxuXHRwYWRkaW5nOiAwO1xyXG5cdG1hcmdpbjogMDtcclxuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdGN1cnNvcjogZGVmYXVsdDtcclxuXHRkaXNwbGF5OiBibG9jaztcclxuXHRvdmVyZmxvdzogaGlkZGVuO1xyXG5cdHJpZ2h0OiAwO1xyXG59XHJcbi8qIG1vcmUgc3BlY2lmaWNpdHkgcmVxdWlyZWQgaGVyZSB0byBvdmVycmlkZSBkZWZhdWx0IGJvcmRlcnMgKi9cclxuLnVpLXNwaW5uZXIgYS51aS1zcGlubmVyLWJ1dHRvbiB7XHJcblx0Ym9yZGVyLXRvcDogbm9uZTtcclxuXHRib3JkZXItYm90dG9tOiBub25lO1xyXG5cdGJvcmRlci1yaWdodDogbm9uZTtcclxufVxyXG4vKiB2ZXJ0aWNhbGx5IGNlbnRlciBpY29uICovXHJcbi51aS1zcGlubmVyIC51aS1pY29uIHtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0bWFyZ2luLXRvcDogLThweDtcclxuXHR0b3A6IDUwJTtcclxuXHRsZWZ0OiAwO1xyXG59XHJcbi51aS1zcGlubmVyLXVwIHtcclxuXHR0b3A6IDA7XHJcbn1cclxuLnVpLXNwaW5uZXItZG93biB7XHJcblx0Ym90dG9tOiAwO1xyXG59XHJcblxyXG4vKiBUUiBvdmVycmlkZXMgKi9cclxuLnVpLXNwaW5uZXIgLnVpLWljb24tdHJpYW5nbGUtMS1zIHtcclxuXHQvKiBuZWVkIHRvIGZpeCBpY29ucyBzcHJpdGUgKi9cclxuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjVweCAtMTZweDtcclxufVxyXG4udWktdGFicyB7XHJcblx0cG9zaXRpb246IHJlbGF0aXZlOy8qIHBvc2l0aW9uOiByZWxhdGl2ZSBwcmV2ZW50cyBJRSBzY3JvbGwgYnVnIChlbGVtZW50IHdpdGggcG9zaXRpb246IHJlbGF0aXZlIGluc2lkZSBjb250YWluZXIgd2l0aCBvdmVyZmxvdzogYXV0byBhcHBlYXIgYXMgXCJmaXhlZFwiKSAqL1xyXG5cdHBhZGRpbmc6IC4yZW07XHJcbn1cclxuLnVpLXRhYnMgLnVpLXRhYnMtbmF2IHtcclxuXHRtYXJnaW46IDA7XHJcblx0cGFkZGluZzogLjJlbSAuMmVtIDA7XHJcbn1cclxuLnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpIHtcclxuXHRsaXN0LXN0eWxlOiBub25lO1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHR0b3A6IDA7XHJcblx0bWFyZ2luOiAxcHggLjJlbSAwIDA7XHJcblx0Ym9yZGVyLWJvdHRvbS13aWR0aDogMDtcclxuXHRwYWRkaW5nOiAwO1xyXG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbn1cclxuLnVpLXRhYnMgLnVpLXRhYnMtbmF2IC51aS10YWJzLWFuY2hvciB7XHJcblx0ZmxvYXQ6IGxlZnQ7XHJcblx0cGFkZGluZzogLjVlbSAxZW07XHJcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG59XHJcbi51aS10YWJzIC51aS10YWJzLW5hdiBsaS51aS10YWJzLWFjdGl2ZSB7XHJcblx0bWFyZ2luLWJvdHRvbTogLTFweDtcclxuXHRwYWRkaW5nLWJvdHRvbTogMXB4O1xyXG59XHJcbi51aS10YWJzIC51aS10YWJzLW5hdiBsaS51aS10YWJzLWFjdGl2ZSAudWktdGFicy1hbmNob3IsXHJcbi51aS10YWJzIC51aS10YWJzLW5hdiBsaS51aS1zdGF0ZS1kaXNhYmxlZCAudWktdGFicy1hbmNob3IsXHJcbi51aS10YWJzIC51aS10YWJzLW5hdiBsaS51aS10YWJzLWxvYWRpbmcgLnVpLXRhYnMtYW5jaG9yIHtcclxuXHRjdXJzb3I6IHRleHQ7XHJcbn1cclxuLnVpLXRhYnMtY29sbGFwc2libGUgLnVpLXRhYnMtbmF2IGxpLnVpLXRhYnMtYWN0aXZlIC51aS10YWJzLWFuY2hvciB7XHJcblx0Y3Vyc29yOiBwb2ludGVyO1xyXG59XHJcbi51aS10YWJzIC51aS10YWJzLXBhbmVsIHtcclxuXHRkaXNwbGF5OiBibG9jaztcclxuXHRib3JkZXItd2lkdGg6IDA7XHJcblx0cGFkZGluZzogMWVtIDEuNGVtO1xyXG5cdGJhY2tncm91bmQ6IG5vbmU7XHJcbn1cclxuLnVpLXRvb2x0aXAge1xyXG5cdHBhZGRpbmc6IDhweDtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0ei1pbmRleDogOTk5OTtcclxuXHRtYXgtd2lkdGg6IDMwMHB4O1xyXG5cdC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDVweCAjYWFhO1xyXG5cdGJveC1zaGFkb3c6IDAgMCA1cHggI2FhYTtcclxufVxyXG5ib2R5IC51aS10b29sdGlwIHtcclxuXHRib3JkZXItd2lkdGg6IDJweDtcclxufVxyXG5cclxuLyogQ29tcG9uZW50IGNvbnRhaW5lcnNcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbi51aS13aWRnZXQge1xyXG5cdGZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7XHJcblx0Zm9udC1zaXplOiAxLjFlbTtcclxufVxyXG4udWktd2lkZ2V0IC51aS13aWRnZXQge1xyXG5cdGZvbnQtc2l6ZTogMWVtO1xyXG59XHJcbi51aS13aWRnZXQgaW5wdXQsXHJcbi51aS13aWRnZXQgc2VsZWN0LFxyXG4udWktd2lkZ2V0IHRleHRhcmVhLFxyXG4udWktd2lkZ2V0IGJ1dHRvbiB7XHJcblx0Zm9udC1mYW1pbHk6IFZlcmRhbmEsQXJpYWwsc2Fucy1zZXJpZjtcclxuXHRmb250LXNpemU6IDFlbTtcclxufVxyXG4udWktd2lkZ2V0LWNvbnRlbnQge1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNhYWFhYWE7XHJcblx0YmFja2dyb3VuZDogI2ZmZmZmZjtcclxuXHRjb2xvcjogIzIyMjIyMjtcclxufVxyXG4udWktd2lkZ2V0LWNvbnRlbnQgYSB7XHJcblx0Y29sb3I6ICMyMjIyMjI7XHJcbn1cclxuLnVpLXdpZGdldC1oZWFkZXIge1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNhYWFhYWE7XHJcblx0YmFja2dyb3VuZDogI2NjY2NjYyB1cmwoXCJpbWFnZXMvdWktYmdfaGlnaGxpZ2h0LXNvZnRfNzVfY2NjY2NjXzF4MTAwLnBuZ1wiKSA1MCUgNTAlIHJlcGVhdC14O1xyXG5cdGNvbG9yOiAjMjIyMjIyO1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG59XHJcbi51aS13aWRnZXQtaGVhZGVyIGEge1xyXG5cdGNvbG9yOiAjMjIyMjIyO1xyXG59XHJcblxyXG4vKiBJbnRlcmFjdGlvbiBzdGF0ZXNcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbi51aS1zdGF0ZS1kZWZhdWx0LFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRlZmF1bHQsXHJcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1kZWZhdWx0IHtcclxuXHRib3JkZXI6IDFweCBzb2xpZCAjZDNkM2QzO1xyXG5cdGJhY2tncm91bmQ6ICNlNmU2ZTYgdXJsKFwiaW1hZ2VzL3VpLWJnX2dsYXNzXzc1X2U2ZTZlNl8xeDQwMC5wbmdcIikgNTAlIDUwJSByZXBlYXQteDtcclxuXHRmb250LXdlaWdodDogbm9ybWFsO1xyXG5cdGNvbG9yOiAjNTU1NTU1O1xyXG59XHJcbi51aS1zdGF0ZS1kZWZhdWx0IGEsXHJcbi51aS1zdGF0ZS1kZWZhdWx0IGE6bGluayxcclxuLnVpLXN0YXRlLWRlZmF1bHQgYTp2aXNpdGVkIHtcclxuXHRjb2xvcjogIzU1NTU1NTtcclxuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbn1cclxuLnVpLXN0YXRlLWhvdmVyLFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhvdmVyLFxyXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaG92ZXIsXHJcbi51aS1zdGF0ZS1mb2N1cyxcclxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1mb2N1cyxcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWZvY3VzIHtcclxuXHRib3JkZXI6IDFweCBzb2xpZCAjOTk5OTk5O1xyXG5cdGJhY2tncm91bmQ6ICNkYWRhZGEgdXJsKFwiaW1hZ2VzL3VpLWJnX2dsYXNzXzc1X2RhZGFkYV8xeDQwMC5wbmdcIikgNTAlIDUwJSByZXBlYXQteDtcclxuXHRmb250LXdlaWdodDogbm9ybWFsO1xyXG5cdGNvbG9yOiAjMjEyMTIxO1xyXG59XHJcbi51aS1zdGF0ZS1ob3ZlciBhLFxyXG4udWktc3RhdGUtaG92ZXIgYTpob3ZlcixcclxuLnVpLXN0YXRlLWhvdmVyIGE6bGluayxcclxuLnVpLXN0YXRlLWhvdmVyIGE6dmlzaXRlZCxcclxuLnVpLXN0YXRlLWZvY3VzIGEsXHJcbi51aS1zdGF0ZS1mb2N1cyBhOmhvdmVyLFxyXG4udWktc3RhdGUtZm9jdXMgYTpsaW5rLFxyXG4udWktc3RhdGUtZm9jdXMgYTp2aXNpdGVkIHtcclxuXHRjb2xvcjogIzIxMjEyMTtcclxuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbn1cclxuLnVpLXN0YXRlLWFjdGl2ZSxcclxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1hY3RpdmUsXHJcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1hY3RpdmUge1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNhYWFhYWE7XHJcblx0YmFja2dyb3VuZDogI2ZmZmZmZiB1cmwoXCJpbWFnZXMvdWktYmdfZ2xhc3NfNjVfZmZmZmZmXzF4NDAwLnBuZ1wiKSA1MCUgNTAlIHJlcGVhdC14O1xyXG5cdGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcblx0Y29sb3I6ICMyMTIxMjE7XHJcbn1cclxuLnVpLXN0YXRlLWFjdGl2ZSBhLFxyXG4udWktc3RhdGUtYWN0aXZlIGE6bGluayxcclxuLnVpLXN0YXRlLWFjdGl2ZSBhOnZpc2l0ZWQge1xyXG5cdGNvbG9yOiAjMjEyMTIxO1xyXG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxufVxyXG5cclxuLyogSW50ZXJhY3Rpb24gQ3Vlc1xyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuLnVpLXN0YXRlLWhpZ2hsaWdodCxcclxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQsXHJcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1oaWdobGlnaHQge1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNmY2VmYTE7XHJcblx0YmFja2dyb3VuZDogI2ZiZjllZSB1cmwoXCJpbWFnZXMvdWktYmdfZ2xhc3NfNTVfZmJmOWVlXzF4NDAwLnBuZ1wiKSA1MCUgNTAlIHJlcGVhdC14O1xyXG5cdGNvbG9yOiAjMzYzNjM2O1xyXG59XHJcbi51aS1zdGF0ZS1oaWdobGlnaHQgYSxcclxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQgYSxcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCBhIHtcclxuXHRjb2xvcjogIzM2MzYzNjtcclxufVxyXG4udWktc3RhdGUtZXJyb3IsXHJcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3IsXHJcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvciB7XHJcblx0Ym9yZGVyOiAxcHggc29saWQgI2NkMGEwYTtcclxuXHRiYWNrZ3JvdW5kOiAjZmVmMWVjIHVybChcImltYWdlcy91aS1iZ19nbGFzc185NV9mZWYxZWNfMXg0MDAucG5nXCIpIDUwJSA1MCUgcmVwZWF0LXg7XHJcblx0Y29sb3I6ICNjZDBhMGE7XHJcbn1cclxuLnVpLXN0YXRlLWVycm9yIGEsXHJcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3IgYSxcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9yIGEge1xyXG5cdGNvbG9yOiAjY2QwYTBhO1xyXG59XHJcbi51aS1zdGF0ZS1lcnJvci10ZXh0LFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yLXRleHQsXHJcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvci10ZXh0IHtcclxuXHRjb2xvcjogI2NkMGEwYTtcclxufVxyXG4udWktcHJpb3JpdHktcHJpbWFyeSxcclxuLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1wcmltYXJ5LFxyXG4udWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktcHJpbWFyeSB7XHJcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuLnVpLXByaW9yaXR5LXNlY29uZGFyeSxcclxuLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1zZWNvbmRhcnksXHJcbi51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1zZWNvbmRhcnkge1xyXG5cdG9wYWNpdHk6IC43O1xyXG5cdGZpbHRlcjpBbHBoYShPcGFjaXR5PTcwKTsgLyogc3VwcG9ydDogSUU4ICovXHJcblx0Zm9udC13ZWlnaHQ6IG5vcm1hbDtcclxufVxyXG4udWktc3RhdGUtZGlzYWJsZWQsXHJcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGlzYWJsZWQsXHJcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1kaXNhYmxlZCB7XHJcblx0b3BhY2l0eTogLjM1O1xyXG5cdGZpbHRlcjpBbHBoYShPcGFjaXR5PTM1KTsgLyogc3VwcG9ydDogSUU4ICovXHJcblx0YmFja2dyb3VuZC1pbWFnZTogbm9uZTtcclxufVxyXG4udWktc3RhdGUtZGlzYWJsZWQgLnVpLWljb24ge1xyXG5cdGZpbHRlcjpBbHBoYShPcGFjaXR5PTM1KTsgLyogc3VwcG9ydDogSUU4IC0gU2VlICM2MDU5ICovXHJcbn1cclxuXHJcbi8qIEljb25zXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuLyogc3RhdGVzIGFuZCBpbWFnZXMgKi9cclxuLnVpLWljb24ge1xyXG5cdHdpZHRoOiAxNnB4O1xyXG5cdGhlaWdodDogMTZweDtcclxufVxyXG4udWktaWNvbixcclxuLnVpLXdpZGdldC1jb250ZW50IC51aS1pY29uIHtcclxuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfMjIyMjIyXzI1NngyNDAucG5nXCIpO1xyXG59XHJcbi51aS13aWRnZXQtaGVhZGVyIC51aS1pY29uIHtcclxuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfMjIyMjIyXzI1NngyNDAucG5nXCIpO1xyXG59XHJcbi51aS1zdGF0ZS1kZWZhdWx0IC51aS1pY29uIHtcclxuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfODg4ODg4XzI1NngyNDAucG5nXCIpO1xyXG59XHJcbi51aS1zdGF0ZS1ob3ZlciAudWktaWNvbixcclxuLnVpLXN0YXRlLWZvY3VzIC51aS1pY29uIHtcclxuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfNDU0NTQ1XzI1NngyNDAucG5nXCIpO1xyXG59XHJcbi51aS1zdGF0ZS1hY3RpdmUgLnVpLWljb24ge1xyXG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc180NTQ1NDVfMjU2eDI0MC5wbmdcIik7XHJcbn1cclxuLnVpLXN0YXRlLWhpZ2hsaWdodCAudWktaWNvbiB7XHJcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiaW1hZ2VzL3VpLWljb25zXzJlODNmZl8yNTZ4MjQwLnBuZ1wiKTtcclxufVxyXG4udWktc3RhdGUtZXJyb3IgLnVpLWljb24sXHJcbi51aS1zdGF0ZS1lcnJvci10ZXh0IC51aS1pY29uIHtcclxuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfY2QwYTBhXzI1NngyNDAucG5nXCIpO1xyXG59XHJcblxyXG4vKiBwb3NpdGlvbmluZyAqL1xyXG4udWktaWNvbi1ibGFuayB7IGJhY2tncm91bmQtcG9zaXRpb246IDE2cHggMTZweDsgfVxyXG4udWktaWNvbi1jYXJhdC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH1cclxuLnVpLWljb24tY2FyYXQtMS1uZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IDA7IH1cclxuLnVpLWljb24tY2FyYXQtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggMDsgfVxyXG4udWktaWNvbi1jYXJhdC0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggMDsgfVxyXG4udWktaWNvbi1jYXJhdC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAwOyB9XHJcbi51aS1pY29uLWNhcmF0LTEtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAwOyB9XHJcbi51aS1pY29uLWNhcmF0LTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IDA7IH1cclxuLnVpLWljb24tY2FyYXQtMS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAwOyB9XHJcbi51aS1pY29uLWNhcmF0LTItbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IDA7IH1cclxuLnVpLWljb24tY2FyYXQtMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggMDsgfVxyXG4udWktaWNvbi10cmlhbmdsZS0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNnB4OyB9XHJcbi51aS1pY29uLXRyaWFuZ2xlLTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTZweDsgfVxyXG4udWktaWNvbi10cmlhbmdsZS0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTZweDsgfVxyXG4udWktaWNvbi10cmlhbmdsZS0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE2cHg7IH1cclxuLnVpLWljb24tdHJpYW5nbGUtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE2cHg7IH1cclxuLnVpLWljb24tdHJpYW5nbGUtMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNnB4OyB9XHJcbi51aS1pY29uLXRyaWFuZ2xlLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNnB4OyB9XHJcbi51aS1pY29uLXRyaWFuZ2xlLTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE2cHg7IH1cclxuLnVpLWljb24tdHJpYW5nbGUtMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE2cHg7IH1cclxuLnVpLWljb24tdHJpYW5nbGUtMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2cHg7IH1cclxuLnVpLWljb24tYXJyb3ctMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvdy0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3ctMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3ctMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93LTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93LTEtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvdy0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvdy0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93LTItbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93LTItbmUtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3ctMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3ctMi1zZS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvd3N0b3AtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93c3RvcC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3dzdG9wLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvd3N0b3AtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGljay0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGljay0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGljay0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrLTItbmUtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGljay0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrLTItc2UtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNjRweDsgfVxyXG4udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTY0cHg7IH1cclxuLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNjRweDsgfVxyXG4udWktaWNvbi1hcnJvd3JldHVybi0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtNjRweDsgfVxyXG4udWktaWNvbi1hcnJvd3JldHVybi0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtNjRweDsgfVxyXG4udWktaWNvbi1hcnJvd3JldHVybi0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtNjRweDsgfVxyXG4udWktaWNvbi1hcnJvd3JldHVybi0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTY0cHg7IH1cclxuLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtNjRweDsgfVxyXG4udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmVmcmVzaC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTY0cHg7IH1cclxuLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtNjRweDsgfVxyXG4udWktaWNvbi1hcnJvdy00IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtODBweDsgfVxyXG4udWktaWNvbi1hcnJvdy00LWRpYWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtODBweDsgfVxyXG4udWktaWNvbi1leHRsaW5rIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTgwcHg7IH1cclxuLnVpLWljb24tbmV3d2luIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTgwcHg7IH1cclxuLnVpLWljb24tcmVmcmVzaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC04MHB4OyB9XHJcbi51aS1pY29uLXNodWZmbGUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtODBweDsgfVxyXG4udWktaWNvbi10cmFuc2Zlci1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtODBweDsgfVxyXG4udWktaWNvbi10cmFuc2ZlcnRoaWNrLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtODBweDsgfVxyXG4udWktaWNvbi1mb2xkZXItY29sbGFwc2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTZweDsgfVxyXG4udWktaWNvbi1mb2xkZXItb3BlbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC05NnB4OyB9XHJcbi51aS1pY29uLWRvY3VtZW50IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTk2cHg7IH1cclxuLnVpLWljb24tZG9jdW1lbnQtYiB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC05NnB4OyB9XHJcbi51aS1pY29uLW5vdGUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtOTZweDsgfVxyXG4udWktaWNvbi1tYWlsLWNsb3NlZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC05NnB4OyB9XHJcbi51aS1pY29uLW1haWwtb3BlbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC05NnB4OyB9XHJcbi51aS1pY29uLXN1aXRjYXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC05NnB4OyB9XHJcbi51aS1pY29uLWNvbW1lbnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTk2cHg7IH1cclxuLnVpLWljb24tcGVyc29uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC05NnB4OyB9XHJcbi51aS1pY29uLXByaW50IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC05NnB4OyB9XHJcbi51aS1pY29uLXRyYXNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC05NnB4OyB9XHJcbi51aS1pY29uLWxvY2tlZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtOTZweDsgfVxyXG4udWktaWNvbi11bmxvY2tlZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtOTZweDsgfVxyXG4udWktaWNvbi1ib29rbWFyayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtOTZweDsgfVxyXG4udWktaWNvbi10YWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTk2cHg7IH1cclxuLnVpLWljb24taG9tZSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTExMnB4OyB9XHJcbi51aS1pY29uLWZsYWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTEycHg7IH1cclxuLnVpLWljb24tY2FsZW5kYXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTEycHg7IH1cclxuLnVpLWljb24tY2FydCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1wZW5jaWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTEycHg7IH1cclxuLnVpLWljb24tY2xvY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTEycHg7IH1cclxuLnVpLWljb24tZGlzayB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1jYWxjdWxhdG9yIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMTJweDsgfVxyXG4udWktaWNvbi16b29taW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTExMnB4OyB9XHJcbi51aS1pY29uLXpvb21vdXQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTExMnB4OyB9XHJcbi51aS1pY29uLXNlYXJjaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTEycHg7IH1cclxuLnVpLWljb24td3JlbmNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1nZWFyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1oZWFydCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTEycHg7IH1cclxuLnVpLWljb24tc3RhciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTEycHg7IH1cclxuLnVpLWljb24tbGluayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMTEycHg7IH1cclxuLnVpLWljb24tY2FuY2VsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTI4cHg7IH1cclxuLnVpLWljb24tcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1wbHVzdGhpY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTI4cHg7IH1cclxuLnVpLWljb24tbWludXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTI4cHg7IH1cclxuLnVpLWljb24tbWludXN0aGljayB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1jbG9zZXRoaWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTEyOHB4OyB9XHJcbi51aS1pY29uLWtleSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTI4cHg7IH1cclxuLnVpLWljb24tbGlnaHRidWxiIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1zY2lzc29ycyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTI4cHg7IH1cclxuLnVpLWljb24tY2xpcGJvYXJkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1jb3B5IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1jb250YWN0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1pbWFnZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTI4cHg7IH1cclxuLnVpLWljb24tdmlkZW8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTEyOHB4OyB9XHJcbi51aS1pY29uLXNjcmlwdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMTI4cHg7IH1cclxuLnVpLWljb24tYWxlcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNDRweDsgfVxyXG4udWktaWNvbi1pbmZvIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE0NHB4OyB9XHJcbi51aS1pY29uLW5vdGljZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNDRweDsgfVxyXG4udWktaWNvbi1oZWxwIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE0NHB4OyB9XHJcbi51aS1pY29uLWNoZWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE0NHB4OyB9XHJcbi51aS1pY29uLWJ1bGxldCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNDRweDsgfVxyXG4udWktaWNvbi1yYWRpby1vbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNDRweDsgfVxyXG4udWktaWNvbi1yYWRpby1vZmYgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE0NHB4OyB9XHJcbi51aS1pY29uLXBpbi13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNDRweDsgfVxyXG4udWktaWNvbi1waW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTQ0cHg7IH1cclxuLnVpLWljb24tcGxheSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2MHB4OyB9XHJcbi51aS1pY29uLXBhdXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE2MHB4OyB9XHJcbi51aS1pY29uLXNlZWstbmV4dCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNjBweDsgfVxyXG4udWktaWNvbi1zZWVrLXByZXYgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTYwcHg7IH1cclxuLnVpLWljb24tc2Vlay1lbmQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTYwcHg7IH1cclxuLnVpLWljb24tc2Vlay1zdGFydCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNjBweDsgfVxyXG4vKiB1aS1pY29uLXNlZWstZmlyc3QgaXMgZGVwcmVjYXRlZCwgdXNlIHVpLWljb24tc2Vlay1zdGFydCBpbnN0ZWFkICovXHJcbi51aS1pY29uLXNlZWstZmlyc3QgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTYwcHg7IH1cclxuLnVpLWljb24tc3RvcCB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNjBweDsgfVxyXG4udWktaWNvbi1lamVjdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTYwcHg7IH1cclxuLnVpLWljb24tdm9sdW1lLW9mZiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTYwcHg7IH1cclxuLnVpLWljb24tdm9sdW1lLW9uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNjBweDsgfVxyXG4udWktaWNvbi1wb3dlciB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE3NnB4OyB9XHJcbi51aS1pY29uLXNpZ25hbC1kaWFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE3NnB4OyB9XHJcbi51aS1pY29uLXNpZ25hbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNzZweDsgfVxyXG4udWktaWNvbi1iYXR0ZXJ5LTAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTc2cHg7IH1cclxuLnVpLWljb24tYmF0dGVyeS0xIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE3NnB4OyB9XHJcbi51aS1pY29uLWJhdHRlcnktMiB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNzZweDsgfVxyXG4udWktaWNvbi1iYXR0ZXJ5LTMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTc2cHg7IH1cclxuLnVpLWljb24tY2lyY2xlLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtbWludXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS10cmlhbmdsZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS1hcnJvdy1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtYXJyb3ctcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLWFycm93LXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS1hcnJvdy1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtem9vbWluIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtem9vbW91dCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLWNoZWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGVzbWFsbC1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjA4cHg7IH1cclxuLnVpLWljb24tY2lyY2xlc21hbGwtbWludXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMjA4cHg7IH1cclxuLnVpLWljb24tY2lyY2xlc21hbGwtY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMjA4cHg7IH1cclxuLnVpLWljb24tc3F1YXJlc21hbGwtcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0yMDhweDsgfVxyXG4udWktaWNvbi1zcXVhcmVzbWFsbC1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0yMDhweDsgfVxyXG4udWktaWNvbi1zcXVhcmVzbWFsbC1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0yMDhweDsgfVxyXG4udWktaWNvbi1ncmlwLWRvdHRlZC12ZXJ0aWNhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTIyNHB4OyB9XHJcbi51aS1pY29uLWdyaXAtZG90dGVkLWhvcml6b250YWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMjI0cHg7IH1cclxuLnVpLWljb24tZ3JpcC1zb2xpZC12ZXJ0aWNhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0yMjRweDsgfVxyXG4udWktaWNvbi1ncmlwLXNvbGlkLWhvcml6b250YWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMjI0cHg7IH1cclxuLnVpLWljb24tZ3JpcHNtYWxsLWRpYWdvbmFsLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTIyNHB4OyB9XHJcbi51aS1pY29uLWdyaXAtZGlhZ29uYWwtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMjI0cHg7IH1cclxuXHJcblxyXG4vKiBNaXNjIHZpc3VhbHNcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4vKiBDb3JuZXIgcmFkaXVzICovXHJcbi51aS1jb3JuZXItYWxsLFxyXG4udWktY29ybmVyLXRvcCxcclxuLnVpLWNvcm5lci1sZWZ0LFxyXG4udWktY29ybmVyLXRsIHtcclxuXHRib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XHJcbn1cclxuLnVpLWNvcm5lci1hbGwsXHJcbi51aS1jb3JuZXItdG9wLFxyXG4udWktY29ybmVyLXJpZ2h0LFxyXG4udWktY29ybmVyLXRyIHtcclxuXHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xyXG59XHJcbi51aS1jb3JuZXItYWxsLFxyXG4udWktY29ybmVyLWJvdHRvbSxcclxuLnVpLWNvcm5lci1sZWZ0LFxyXG4udWktY29ybmVyLWJsIHtcclxuXHRib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7XHJcbn1cclxuLnVpLWNvcm5lci1hbGwsXHJcbi51aS1jb3JuZXItYm90dG9tLFxyXG4udWktY29ybmVyLXJpZ2h0LFxyXG4udWktY29ybmVyLWJyIHtcclxuXHRib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4O1xyXG59XHJcblxyXG4vKiBPdmVybGF5cyAqL1xyXG4udWktd2lkZ2V0LW92ZXJsYXkge1xyXG5cdGJhY2tncm91bmQ6ICNhYWFhYWE7XHJcblx0b3BhY2l0eTogLjM7XHJcblx0ZmlsdGVyOiBBbHBoYShPcGFjaXR5PTMwKTsgLyogc3VwcG9ydDogSUU4ICovXHJcbn1cclxuLnVpLXdpZGdldC1zaGFkb3cge1xyXG5cdG1hcmdpbjogLThweCAwIDAgLThweDtcclxuXHRwYWRkaW5nOiA4cHg7XHJcblx0YmFja2dyb3VuZDogI2FhYWFhYTtcclxuXHRvcGFjaXR5OiAuMztcclxuXHRmaWx0ZXI6IEFscGhhKE9wYWNpdHk9MzApOyAvKiBzdXBwb3J0OiBJRTggKi9cclxuXHRib3JkZXItcmFkaXVzOiA4cHg7XHJcbn1cclxuIiwiLyohXHJcbiAqIGpRdWVyeSBVSSBDU1MgRnJhbWV3b3JrIDEuMTEuNFxyXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXHJcbiAqXHJcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXHJcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cclxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxyXG4gKlxyXG4gKiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9jYXRlZ29yeS90aGVtaW5nL1xyXG4gKi9cclxuXHJcbi8qIExheW91dCBoZWxwZXJzXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4udWktaGVscGVyLWhpZGRlbiB7XHJcblx0ZGlzcGxheTogbm9uZTtcclxufVxyXG4udWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIHtcclxuXHRib3JkZXI6IDA7XHJcblx0Y2xpcDogcmVjdCgwIDAgMCAwKTtcclxuXHRoZWlnaHQ6IDFweDtcclxuXHRtYXJnaW46IC0xcHg7XHJcblx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHRwYWRkaW5nOiAwO1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHR3aWR0aDogMXB4O1xyXG59XHJcbi51aS1oZWxwZXItcmVzZXQge1xyXG5cdG1hcmdpbjogMDtcclxuXHRwYWRkaW5nOiAwO1xyXG5cdGJvcmRlcjogMDtcclxuXHRvdXRsaW5lOiAwO1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjM7XHJcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG5cdGZvbnQtc2l6ZTogMTAwJTtcclxuXHRsaXN0LXN0eWxlOiBub25lO1xyXG59XHJcbi51aS1oZWxwZXItY2xlYXJmaXg6YmVmb3JlLFxyXG4udWktaGVscGVyLWNsZWFyZml4OmFmdGVyIHtcclxuXHRjb250ZW50OiBcIlwiO1xyXG5cdGRpc3BsYXk6IHRhYmxlO1xyXG5cdGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XHJcbn1cclxuLnVpLWhlbHBlci1jbGVhcmZpeDphZnRlciB7XHJcblx0Y2xlYXI6IGJvdGg7XHJcbn1cclxuLnVpLWhlbHBlci1jbGVhcmZpeCB7XHJcblx0bWluLWhlaWdodDogMDsgLyogc3VwcG9ydDogSUU3ICovXHJcbn1cclxuLnVpLWhlbHBlci16Zml4IHtcclxuXHR3aWR0aDogMTAwJTtcclxuXHRoZWlnaHQ6IDEwMCU7XHJcblx0dG9wOiAwO1xyXG5cdGxlZnQ6IDA7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdG9wYWNpdHk6IDA7XHJcblx0ZmlsdGVyOkFscGhhKE9wYWNpdHk9MCk7IC8qIHN1cHBvcnQ6IElFOCAqL1xyXG59XHJcblxyXG4udWktZnJvbnQge1xyXG5cdHotaW5kZXg6IDEwMDtcclxufVxyXG5cclxuXHJcbi8qIEludGVyYWN0aW9uIEN1ZXNcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbi51aS1zdGF0ZS1kaXNhYmxlZCB7XHJcblx0Y3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcblxyXG4vKiBJY29uc1xyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbi8qIHN0YXRlcyBhbmQgaW1hZ2VzICovXHJcbi51aS1pY29uIHtcclxuXHRkaXNwbGF5OiBibG9jaztcclxuXHR0ZXh0LWluZGVudDogLTk5OTk5cHg7XHJcblx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHRiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xyXG59XHJcblxyXG5cclxuLyogTWlzYyB2aXN1YWxzXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuLyogT3ZlcmxheXMgKi9cclxuLnVpLXdpZGdldC1vdmVybGF5IHtcclxuXHRwb3NpdGlvbjogZml4ZWQ7XHJcblx0dG9wOiAwO1xyXG5cdGxlZnQ6IDA7XHJcblx0d2lkdGg6IDEwMCU7XHJcblx0aGVpZ2h0OiAxMDAlO1xyXG59XHJcbi51aS1kcmFnZ2FibGUtaGFuZGxlIHtcclxuXHQtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xyXG5cdHRvdWNoLWFjdGlvbjogbm9uZTtcclxufVxyXG4udWktcmVzaXphYmxlIHtcclxuXHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcbn1cclxuLnVpLXJlc2l6YWJsZS1oYW5kbGUge1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRmb250LXNpemU6IDAuMXB4O1xyXG5cdGRpc3BsYXk6IGJsb2NrO1xyXG5cdC1tcy10b3VjaC1hY3Rpb246IG5vbmU7XHJcblx0dG91Y2gtYWN0aW9uOiBub25lO1xyXG59XHJcbi51aS1yZXNpemFibGUtZGlzYWJsZWQgLnVpLXJlc2l6YWJsZS1oYW5kbGUsXHJcbi51aS1yZXNpemFibGUtYXV0b2hpZGUgLnVpLXJlc2l6YWJsZS1oYW5kbGUge1xyXG5cdGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuLnVpLXJlc2l6YWJsZS1uIHtcclxuXHRjdXJzb3I6IG4tcmVzaXplO1xyXG5cdGhlaWdodDogN3B4O1xyXG5cdHdpZHRoOiAxMDAlO1xyXG5cdHRvcDogLTVweDtcclxuXHRsZWZ0OiAwO1xyXG59XHJcbi51aS1yZXNpemFibGUtcyB7XHJcblx0Y3Vyc29yOiBzLXJlc2l6ZTtcclxuXHRoZWlnaHQ6IDdweDtcclxuXHR3aWR0aDogMTAwJTtcclxuXHRib3R0b206IC01cHg7XHJcblx0bGVmdDogMDtcclxufVxyXG4udWktcmVzaXphYmxlLWUge1xyXG5cdGN1cnNvcjogZS1yZXNpemU7XHJcblx0d2lkdGg6IDdweDtcclxuXHRyaWdodDogLTVweDtcclxuXHR0b3A6IDA7XHJcblx0aGVpZ2h0OiAxMDAlO1xyXG59XHJcbi51aS1yZXNpemFibGUtdyB7XHJcblx0Y3Vyc29yOiB3LXJlc2l6ZTtcclxuXHR3aWR0aDogN3B4O1xyXG5cdGxlZnQ6IC01cHg7XHJcblx0dG9wOiAwO1xyXG5cdGhlaWdodDogMTAwJTtcclxufVxyXG4udWktcmVzaXphYmxlLXNlIHtcclxuXHRjdXJzb3I6IHNlLXJlc2l6ZTtcclxuXHR3aWR0aDogMTJweDtcclxuXHRoZWlnaHQ6IDEycHg7XHJcblx0cmlnaHQ6IDFweDtcclxuXHRib3R0b206IDFweDtcclxufVxyXG4udWktcmVzaXphYmxlLXN3IHtcclxuXHRjdXJzb3I6IHN3LXJlc2l6ZTtcclxuXHR3aWR0aDogOXB4O1xyXG5cdGhlaWdodDogOXB4O1xyXG5cdGxlZnQ6IC01cHg7XHJcblx0Ym90dG9tOiAtNXB4O1xyXG59XHJcbi51aS1yZXNpemFibGUtbncge1xyXG5cdGN1cnNvcjogbnctcmVzaXplO1xyXG5cdHdpZHRoOiA5cHg7XHJcblx0aGVpZ2h0OiA5cHg7XHJcblx0bGVmdDogLTVweDtcclxuXHR0b3A6IC01cHg7XHJcbn1cclxuLnVpLXJlc2l6YWJsZS1uZSB7XHJcblx0Y3Vyc29yOiBuZS1yZXNpemU7XHJcblx0d2lkdGg6IDlweDtcclxuXHRoZWlnaHQ6IDlweDtcclxuXHRyaWdodDogLTVweDtcclxuXHR0b3A6IC01cHg7XHJcbn1cclxuLnVpLXNlbGVjdGFibGUge1xyXG5cdC1tcy10b3VjaC1hY3Rpb246IG5vbmU7XHJcblx0dG91Y2gtYWN0aW9uOiBub25lO1xyXG59XHJcbi51aS1zZWxlY3RhYmxlLWhlbHBlciB7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdHotaW5kZXg6IDEwMDtcclxuXHRib3JkZXI6IDFweCBkb3R0ZWQgYmxhY2s7XHJcbn1cclxuLnVpLXNvcnRhYmxlLWhhbmRsZSB7XHJcblx0LW1zLXRvdWNoLWFjdGlvbjogbm9uZTtcclxuXHR0b3VjaC1hY3Rpb246IG5vbmU7XHJcbn1cclxuLnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWhlYWRlciB7XHJcblx0ZGlzcGxheTogYmxvY2s7XHJcblx0Y3Vyc29yOiBwb2ludGVyO1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHRtYXJnaW46IDJweCAwIDAgMDtcclxuXHRwYWRkaW5nOiAuNWVtIC41ZW0gLjVlbSAuN2VtO1xyXG5cdG1pbi1oZWlnaHQ6IDA7IC8qIHN1cHBvcnQ6IElFNyAqL1xyXG5cdGZvbnQtc2l6ZTogMTAwJTtcclxufVxyXG4udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taWNvbnMge1xyXG5cdHBhZGRpbmctbGVmdDogMi4yZW07XHJcbn1cclxuLnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWljb25zIC51aS1hY2NvcmRpb24taWNvbnMge1xyXG5cdHBhZGRpbmctbGVmdDogMi4yZW07XHJcbn1cclxuLnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWhlYWRlciAudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIHtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0bGVmdDogLjVlbTtcclxuXHR0b3A6IDUwJTtcclxuXHRtYXJnaW4tdG9wOiAtOHB4O1xyXG59XHJcbi51aS1hY2NvcmRpb24gLnVpLWFjY29yZGlvbi1jb250ZW50IHtcclxuXHRwYWRkaW5nOiAxZW0gMi4yZW07XHJcblx0Ym9yZGVyLXRvcDogMDtcclxuXHRvdmVyZmxvdzogYXV0bztcclxufVxyXG4udWktYXV0b2NvbXBsZXRlIHtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0dG9wOiAwO1xyXG5cdGxlZnQ6IDA7XHJcblx0Y3Vyc29yOiBkZWZhdWx0O1xyXG59XHJcbi51aS1idXR0b24ge1xyXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuXHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0cGFkZGluZzogMDtcclxuXHRsaW5lLWhlaWdodDogbm9ybWFsO1xyXG5cdG1hcmdpbi1yaWdodDogLjFlbTtcclxuXHRjdXJzb3I6IHBvaW50ZXI7XHJcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0b3ZlcmZsb3c6IHZpc2libGU7IC8qIHJlbW92ZXMgZXh0cmEgd2lkdGggaW4gSUUgKi9cclxufVxyXG4udWktYnV0dG9uLFxyXG4udWktYnV0dG9uOmxpbmssXHJcbi51aS1idXR0b246dmlzaXRlZCxcclxuLnVpLWJ1dHRvbjpob3ZlcixcclxuLnVpLWJ1dHRvbjphY3RpdmUge1xyXG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxufVxyXG4vKiB0byBtYWtlIHJvb20gZm9yIHRoZSBpY29uLCBhIHdpZHRoIG5lZWRzIHRvIGJlIHNldCBoZXJlICovXHJcbi51aS1idXR0b24taWNvbi1vbmx5IHtcclxuXHR3aWR0aDogMi4yZW07XHJcbn1cclxuLyogYnV0dG9uIGVsZW1lbnRzIHNlZW0gdG8gbmVlZCBhIGxpdHRsZSBtb3JlIHdpZHRoICovXHJcbmJ1dHRvbi51aS1idXR0b24taWNvbi1vbmx5IHtcclxuXHR3aWR0aDogMi40ZW07XHJcbn1cclxuLnVpLWJ1dHRvbi1pY29ucy1vbmx5IHtcclxuXHR3aWR0aDogMy40ZW07XHJcbn1cclxuYnV0dG9uLnVpLWJ1dHRvbi1pY29ucy1vbmx5IHtcclxuXHR3aWR0aDogMy43ZW07XHJcbn1cclxuXHJcbi8qIGJ1dHRvbiB0ZXh0IGVsZW1lbnQgKi9cclxuLnVpLWJ1dHRvbiAudWktYnV0dG9uLXRleHQge1xyXG5cdGRpc3BsYXk6IGJsb2NrO1xyXG5cdGxpbmUtaGVpZ2h0OiBub3JtYWw7XHJcbn1cclxuLnVpLWJ1dHRvbi10ZXh0LW9ubHkgLnVpLWJ1dHRvbi10ZXh0IHtcclxuXHRwYWRkaW5nOiAuNGVtIDFlbTtcclxufVxyXG4udWktYnV0dG9uLWljb24tb25seSAudWktYnV0dG9uLXRleHQsXHJcbi51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLXRleHQge1xyXG5cdHBhZGRpbmc6IC40ZW07XHJcblx0dGV4dC1pbmRlbnQ6IC05OTk5OTk5cHg7XHJcbn1cclxuLnVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSAudWktYnV0dG9uLXRleHQsXHJcbi51aS1idXR0b24tdGV4dC1pY29ucyAudWktYnV0dG9uLXRleHQge1xyXG5cdHBhZGRpbmc6IC40ZW0gMWVtIC40ZW0gMi4xZW07XHJcbn1cclxuLnVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IC51aS1idXR0b24tdGV4dCxcclxuLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24tdGV4dCB7XHJcblx0cGFkZGluZzogLjRlbSAyLjFlbSAuNGVtIDFlbTtcclxufVxyXG4udWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWJ1dHRvbi10ZXh0IHtcclxuXHRwYWRkaW5nLWxlZnQ6IDIuMWVtO1xyXG5cdHBhZGRpbmctcmlnaHQ6IDIuMWVtO1xyXG59XHJcbi8qIG5vIGljb24gc3VwcG9ydCBmb3IgaW5wdXQgZWxlbWVudHMsIHByb3ZpZGUgcGFkZGluZyBieSBkZWZhdWx0ICovXHJcbmlucHV0LnVpLWJ1dHRvbiB7XHJcblx0cGFkZGluZzogLjRlbSAxZW07XHJcbn1cclxuXHJcbi8qIGJ1dHRvbiBpY29uIGVsZW1lbnQocykgKi9cclxuLnVpLWJ1dHRvbi1pY29uLW9ubHkgLnVpLWljb24sXHJcbi51aS1idXR0b24tdGV4dC1pY29uLXByaW1hcnkgLnVpLWljb24sXHJcbi51aS1idXR0b24tdGV4dC1pY29uLXNlY29uZGFyeSAudWktaWNvbixcclxuLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1pY29uLFxyXG4udWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWljb24ge1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHR0b3A6IDUwJTtcclxuXHRtYXJnaW4tdG9wOiAtOHB4O1xyXG59XHJcbi51aS1idXR0b24taWNvbi1vbmx5IC51aS1pY29uIHtcclxuXHRsZWZ0OiA1MCU7XHJcblx0bWFyZ2luLWxlZnQ6IC04cHg7XHJcbn1cclxuLnVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSAudWktYnV0dG9uLWljb24tcHJpbWFyeSxcclxuLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1wcmltYXJ5LFxyXG4udWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi1pY29uLXByaW1hcnkge1xyXG5cdGxlZnQ6IC41ZW07XHJcbn1cclxuLnVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksXHJcbi51aS1idXR0b24tdGV4dC1pY29ucyAudWktYnV0dG9uLWljb24tc2Vjb25kYXJ5LFxyXG4udWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi1pY29uLXNlY29uZGFyeSB7XHJcblx0cmlnaHQ6IC41ZW07XHJcbn1cclxuXHJcbi8qIGJ1dHRvbiBzZXRzICovXHJcbi51aS1idXR0b25zZXQge1xyXG5cdG1hcmdpbi1yaWdodDogN3B4O1xyXG59XHJcbi51aS1idXR0b25zZXQgLnVpLWJ1dHRvbiB7XHJcblx0bWFyZ2luLWxlZnQ6IDA7XHJcblx0bWFyZ2luLXJpZ2h0OiAtLjNlbTtcclxufVxyXG5cclxuLyogd29ya2Fyb3VuZHMgKi9cclxuLyogcmVzZXQgZXh0cmEgcGFkZGluZyBpbiBGaXJlZm94LCBzZWUgaDVicC5jb20vbCAqL1xyXG5pbnB1dC51aS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXHJcbmJ1dHRvbi51aS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIge1xyXG5cdGJvcmRlcjogMDtcclxuXHRwYWRkaW5nOiAwO1xyXG59XHJcbi51aS1kYXRlcGlja2VyIHtcclxuXHR3aWR0aDogMTdlbTtcclxuXHRwYWRkaW5nOiAuMmVtIC4yZW0gMDtcclxuXHRkaXNwbGF5OiBub25lO1xyXG59XHJcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWhlYWRlciB7XHJcblx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdHBhZGRpbmc6IC4yZW0gMDtcclxufVxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LFxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0IHtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0dG9wOiAycHg7XHJcblx0d2lkdGg6IDEuOGVtO1xyXG5cdGhlaWdodDogMS44ZW07XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlcixcclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlciB7XHJcblx0dG9wOiAxcHg7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldiB7XHJcblx0bGVmdDogMnB4O1xyXG59XHJcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQge1xyXG5cdHJpZ2h0OiAycHg7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciB7XHJcblx0bGVmdDogMXB4O1xyXG59XHJcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXIge1xyXG5cdHJpZ2h0OiAxcHg7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldiBzcGFuLFxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0IHNwYW4ge1xyXG5cdGRpc3BsYXk6IGJsb2NrO1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRsZWZ0OiA1MCU7XHJcblx0bWFyZ2luLWxlZnQ6IC04cHg7XHJcblx0dG9wOiA1MCU7XHJcblx0bWFyZ2luLXRvcDogLThweDtcclxufVxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci10aXRsZSB7XHJcblx0bWFyZ2luOiAwIDIuM2VtO1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjhlbTtcclxuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItdGl0bGUgc2VsZWN0IHtcclxuXHRmb250LXNpemU6IDFlbTtcclxuXHRtYXJnaW46IDFweCAwO1xyXG59XHJcbi51aS1kYXRlcGlja2VyIHNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLFxyXG4udWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIHtcclxuXHR3aWR0aDogNDUlO1xyXG59XHJcbi51aS1kYXRlcGlja2VyIHRhYmxlIHtcclxuXHR3aWR0aDogMTAwJTtcclxuXHRmb250LXNpemU6IC45ZW07XHJcblx0Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcclxuXHRtYXJnaW46IDAgMCAuNGVtO1xyXG59XHJcbi51aS1kYXRlcGlja2VyIHRoIHtcclxuXHRwYWRkaW5nOiAuN2VtIC4zZW07XHJcblx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdGJvcmRlcjogMDtcclxufVxyXG4udWktZGF0ZXBpY2tlciB0ZCB7XHJcblx0Ym9yZGVyOiAwO1xyXG5cdHBhZGRpbmc6IDFweDtcclxufVxyXG4udWktZGF0ZXBpY2tlciB0ZCBzcGFuLFxyXG4udWktZGF0ZXBpY2tlciB0ZCBhIHtcclxuXHRkaXNwbGF5OiBibG9jaztcclxuXHRwYWRkaW5nOiAuMmVtO1xyXG5cdHRleHQtYWxpZ246IHJpZ2h0O1xyXG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxufVxyXG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHtcclxuXHRiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xyXG5cdG1hcmdpbjogLjdlbSAwIDAgMDtcclxuXHRwYWRkaW5nOiAwIC4yZW07XHJcblx0Ym9yZGVyLWxlZnQ6IDA7XHJcblx0Ym9yZGVyLXJpZ2h0OiAwO1xyXG5cdGJvcmRlci1ib3R0b206IDA7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24ge1xyXG5cdGZsb2F0OiByaWdodDtcclxuXHRtYXJnaW46IC41ZW0gLjJlbSAuNGVtO1xyXG5cdGN1cnNvcjogcG9pbnRlcjtcclxuXHRwYWRkaW5nOiAuMmVtIC42ZW0gLjNlbSAuNmVtO1xyXG5cdHdpZHRoOiBhdXRvO1xyXG5cdG92ZXJmbG93OiB2aXNpYmxlO1xyXG59XHJcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudCB7XHJcblx0ZmxvYXQ6IGxlZnQ7XHJcbn1cclxuXHJcbi8qIHdpdGggbXVsdGlwbGUgY2FsZW5kYXJzICovXHJcbi51aS1kYXRlcGlja2VyLnVpLWRhdGVwaWNrZXItbXVsdGkge1xyXG5cdHdpZHRoOiBhdXRvO1xyXG59XHJcbi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwIHtcclxuXHRmbG9hdDogbGVmdDtcclxufVxyXG4udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cCB0YWJsZSB7XHJcblx0d2lkdGg6IDk1JTtcclxuXHRtYXJnaW46IDAgYXV0byAuNGVtO1xyXG59XHJcbi51aS1kYXRlcGlja2VyLW11bHRpLTIgLnVpLWRhdGVwaWNrZXItZ3JvdXAge1xyXG5cdHdpZHRoOiA1MCU7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItbXVsdGktMyAudWktZGF0ZXBpY2tlci1ncm91cCB7XHJcblx0d2lkdGg6IDMzLjMlO1xyXG59XHJcbi51aS1kYXRlcGlja2VyLW11bHRpLTQgLnVpLWRhdGVwaWNrZXItZ3JvdXAge1xyXG5cdHdpZHRoOiAyNSU7XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCAudWktZGF0ZXBpY2tlci1oZWFkZXIsXHJcbi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXIge1xyXG5cdGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xyXG59XHJcbi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUge1xyXG5cdGNsZWFyOiBsZWZ0O1xyXG59XHJcbi51aS1kYXRlcGlja2VyLXJvdy1icmVhayB7XHJcblx0Y2xlYXI6IGJvdGg7XHJcblx0d2lkdGg6IDEwMCU7XHJcblx0Zm9udC1zaXplOiAwO1xyXG59XHJcblxyXG4vKiBSVEwgc3VwcG9ydCAqL1xyXG4udWktZGF0ZXBpY2tlci1ydGwge1xyXG5cdGRpcmVjdGlvbjogcnRsO1xyXG59XHJcbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1wcmV2IHtcclxuXHRyaWdodDogMnB4O1xyXG5cdGxlZnQ6IGF1dG87XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHQge1xyXG5cdGxlZnQ6IDJweDtcclxuXHRyaWdodDogYXV0bztcclxufVxyXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldjpob3ZlciB7XHJcblx0cmlnaHQ6IDFweDtcclxuXHRsZWZ0OiBhdXRvO1xyXG59XHJcbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1uZXh0OmhvdmVyIHtcclxuXHRsZWZ0OiAxcHg7XHJcblx0cmlnaHQ6IGF1dG87XHJcbn1cclxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUge1xyXG5cdGNsZWFyOiByaWdodDtcclxufVxyXG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24ge1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG59XHJcbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbi51aS1kYXRlcGlja2VyLWN1cnJlbnQsXHJcbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cCB7XHJcblx0ZmxvYXQ6IHJpZ2h0O1xyXG59XHJcbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IC51aS1kYXRlcGlja2VyLWhlYWRlcixcclxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXIge1xyXG5cdGJvcmRlci1yaWdodC13aWR0aDogMDtcclxuXHRib3JkZXItbGVmdC13aWR0aDogMXB4O1xyXG59XHJcbi51aS1kaWFsb2cge1xyXG5cdG92ZXJmbG93OiBoaWRkZW47XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdHRvcDogMDtcclxuXHRsZWZ0OiAwO1xyXG5cdHBhZGRpbmc6IC4yZW07XHJcblx0b3V0bGluZTogMDtcclxufVxyXG4udWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGViYXIge1xyXG5cdHBhZGRpbmc6IC40ZW0gMWVtO1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG4udWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGUge1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdG1hcmdpbjogLjFlbSAwO1xyXG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcblx0d2lkdGg6IDkwJTtcclxuXHRvdmVyZmxvdzogaGlkZGVuO1xyXG5cdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG59XHJcbi51aS1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSB7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdHJpZ2h0OiAuM2VtO1xyXG5cdHRvcDogNTAlO1xyXG5cdHdpZHRoOiAyMHB4O1xyXG5cdG1hcmdpbjogLTEwcHggMCAwIDA7XHJcblx0cGFkZGluZzogMXB4O1xyXG5cdGhlaWdodDogMjBweDtcclxufVxyXG4udWktZGlhbG9nIC51aS1kaWFsb2ctY29udGVudCB7XHJcblx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdGJvcmRlcjogMDtcclxuXHRwYWRkaW5nOiAuNWVtIDFlbTtcclxuXHRiYWNrZ3JvdW5kOiBub25lO1xyXG5cdG92ZXJmbG93OiBhdXRvO1xyXG59XHJcbi51aS1kaWFsb2cgLnVpLWRpYWxvZy1idXR0b25wYW5lIHtcclxuXHR0ZXh0LWFsaWduOiBsZWZ0O1xyXG5cdGJvcmRlci13aWR0aDogMXB4IDAgMCAwO1xyXG5cdGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XHJcblx0bWFyZ2luLXRvcDogLjVlbTtcclxuXHRwYWRkaW5nOiAuM2VtIDFlbSAuNWVtIC40ZW07XHJcbn1cclxuLnVpLWRpYWxvZyAudWktZGlhbG9nLWJ1dHRvbnBhbmUgLnVpLWRpYWxvZy1idXR0b25zZXQge1xyXG5cdGZsb2F0OiByaWdodDtcclxufVxyXG4udWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZSBidXR0b24ge1xyXG5cdG1hcmdpbjogLjVlbSAuNGVtIC41ZW0gMDtcclxuXHRjdXJzb3I6IHBvaW50ZXI7XHJcbn1cclxuLnVpLWRpYWxvZyAudWktcmVzaXphYmxlLXNlIHtcclxuXHR3aWR0aDogMTJweDtcclxuXHRoZWlnaHQ6IDEycHg7XHJcblx0cmlnaHQ6IC01cHg7XHJcblx0Ym90dG9tOiAtNXB4O1xyXG5cdGJhY2tncm91bmQtcG9zaXRpb246IDE2cHggMTZweDtcclxufVxyXG4udWktZHJhZ2dhYmxlIC51aS1kaWFsb2ctdGl0bGViYXIge1xyXG5cdGN1cnNvcjogbW92ZTtcclxufVxyXG4udWktbWVudSB7XHJcblx0bGlzdC1zdHlsZTogbm9uZTtcclxuXHRwYWRkaW5nOiAwO1xyXG5cdG1hcmdpbjogMDtcclxuXHRkaXNwbGF5OiBibG9jaztcclxuXHRvdXRsaW5lOiBub25lO1xyXG59XHJcbi51aS1tZW51IC51aS1tZW51IHtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcbn1cclxuLnVpLW1lbnUgLnVpLW1lbnUtaXRlbSB7XHJcblx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdG1hcmdpbjogMDtcclxuXHRwYWRkaW5nOiAzcHggMWVtIDNweCAuNGVtO1xyXG5cdGN1cnNvcjogcG9pbnRlcjtcclxuXHRtaW4taGVpZ2h0OiAwOyAvKiBzdXBwb3J0OiBJRTcgKi9cclxuXHQvKiBzdXBwb3J0OiBJRTEwLCBzZWUgIzg4NDQgKi9cclxuXHRsaXN0LXN0eWxlLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBQUFBUC8vL3lINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQlJBQTdcIik7XHJcbn1cclxuLnVpLW1lbnUgLnVpLW1lbnUtZGl2aWRlciB7XHJcblx0bWFyZ2luOiA1cHggMDtcclxuXHRoZWlnaHQ6IDA7XHJcblx0Zm9udC1zaXplOiAwO1xyXG5cdGxpbmUtaGVpZ2h0OiAwO1xyXG5cdGJvcmRlci13aWR0aDogMXB4IDAgMCAwO1xyXG59XHJcbi51aS1tZW51IC51aS1zdGF0ZS1mb2N1cyxcclxuLnVpLW1lbnUgLnVpLXN0YXRlLWFjdGl2ZSB7XHJcblx0bWFyZ2luOiAtMXB4O1xyXG59XHJcblxyXG4vKiBpY29uIHN1cHBvcnQgKi9cclxuLnVpLW1lbnUtaWNvbnMge1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG4udWktbWVudS1pY29ucyAudWktbWVudS1pdGVtIHtcclxuXHRwYWRkaW5nLWxlZnQ6IDJlbTtcclxufVxyXG5cclxuLyogbGVmdC1hbGlnbmVkICovXHJcbi51aS1tZW51IC51aS1pY29uIHtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0dG9wOiAwO1xyXG5cdGJvdHRvbTogMDtcclxuXHRsZWZ0OiAuMmVtO1xyXG5cdG1hcmdpbjogYXV0byAwO1xyXG59XHJcblxyXG4vKiByaWdodC1hbGlnbmVkICovXHJcbi51aS1tZW51IC51aS1tZW51LWljb24ge1xyXG5cdGxlZnQ6IGF1dG87XHJcblx0cmlnaHQ6IDA7XHJcbn1cclxuLnVpLXByb2dyZXNzYmFyIHtcclxuXHRoZWlnaHQ6IDJlbTtcclxuXHR0ZXh0LWFsaWduOiBsZWZ0O1xyXG5cdG92ZXJmbG93OiBoaWRkZW47XHJcbn1cclxuLnVpLXByb2dyZXNzYmFyIC51aS1wcm9ncmVzc2Jhci12YWx1ZSB7XHJcblx0bWFyZ2luOiAtMXB4O1xyXG5cdGhlaWdodDogMTAwJTtcclxufVxyXG4udWktcHJvZ3Jlc3NiYXIgLnVpLXByb2dyZXNzYmFyLW92ZXJsYXkge1xyXG5cdGJhY2tncm91bmQ6IHVybChcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEtBQW9BSUFCQUFBQUFQLy8veUgvQzA1RlZGTkRRVkJGTWk0d0F3RUFBQUFoK1FRSkFRQUJBQ3dBQUFBQUtBQW9BQUFDa1l3TnFYcmRDNTJEUzA2YTdNRlpJKzRGSEJDS29EZVdLWHF5bVBxR3F4dkpyWFpiTXg3VHRjK3c5WGdVMkZCM2xPeVFSV0VUMklGR2lVOW0xZnJEVnB4WlpjNmJmSHd2NGMxWVhQNmsxVmR5MjkyRmI2VWt1dkZ0WHB2V1N6QStIeWNYSkhVWGlHWUlpTWcyUjZXNDU5Z25XR2ZITmRqSXFEV1ZxZW1IMmVrcE9ia3BPbHBwV1VxWmlxcjZlZHFxV1FBQUlma0VDUUVBQVFBc0FBQUFBQ2dBS0FBQUFwU01nWm5HZmFxY2cxRTJ1dXpEbW1IVUJSOFFpbDk1aGlQS3FXbjNhcXRMc1MxOHk3RzFTek5lb3dXQkVOdFFkK1QxSmt0UDA1bnpQVGRKWmxSNnZVeE5XV2pWK3ZVV2hXTmtXRnd4bDlWcFpSZWRZY2ZsSU9MYWZhYTI4WGRzSC95bmxjYzF1UFZEWnhRSVIwSzI1K2NJQ0Ntb3FDZTVtR2haT2ZlWVNVaDV5SmNKeXJrWldXcGFSOGRvSjJvNE5ZcTYybEFBQUNINUJBa0JBQUVBTEFBQUFBQW9BQ2dBQUFLVkRJNFl5MjJabklOUk5xb3N3MEJ2N2kxZ3lIVWtGajdvU2FXbHUzb3ZDOEd4TnNvNWZsdXozcUxWaEJWZVQvTHo3WlRIeXhMNWREYWxRV1BWT3NRV3RSbnV3WGFGVGo5alZWaDhwbWE5SmpaNHpZU2o1Wk95bWE3dXVvbGZmaCtJUjVhVzk3Y0h1QlVYS0dLWGxLam4rRGlIV01jWUphaDROMGxZQ01sSk9YaXBHUnI1cWRnb1NUcnFXU3E2V0ZsMnlwb2FVQUFBSWZrRUNRRUFBUUFzQUFBQUFDZ0FLQUFBQXBhRWI2SExnZC9pTzdGTld0Y0ZXZSt1Zk9ER2pSZm9pSjJha1NoYnVlYjB3dEk1MHptMDJwYnZ3ZldFTVdCUTF6S0dsTEloc2tpRVBtOVI2dlJYeFY0WnpXVDJ5SE9HcFdNeW9yYmxLbE5wOEhtSEViL2xDWGpjVzdibXRYUDhYdDIyOU9WV1IxZm9kMmVXcU5mSHVNalhDUGtJR05pbGVPaUltVm1DT0Vtb1NmbjN5WGxKV21vSEdocXA2aWxZdVdZcG1UcUtVZ0FBSWZrRUNRRUFBUUFzQUFBQUFDZ0FLQUFBQXBpRUg2a2I1OGJpUTNGTld0TUZXVzNlTlZjb2p1RkdmcW5acVNlYnVTMDZ3NVY4MC9YMDJwS2U4ekZ3UDZFRldPVDFsREZrOHJHRVJoMVRUTk9vY1E2MUhtNFhtMlZleFVIcHpqeW1WaUhyRmJpRUxzZWZWcm42WEtmbnQyUTlHLytYZGllNDk5WEhkMmc0aDdpb09HaFhHSmJvR0FuWFNCbm9Cd0tZeWZpb3ViWkoySG4wUnVSWmFmbFpPaWw1NlpwNmlpb0tTWHBVQUFBaCtRUUpBUUFCQUN3QUFBQUFLQUFvQUFBQ2tvUVJxUnZueHVJN2tVMWExVVU1YmQ1dG5TZU9aWGhtbjVsV0szcU5UV3ZSZFF4UDhxdmFDKy95YVlRelhPN0JNdmFVRW1KUmQzVHNpTUFnc3dtTllyU2daZFlyVFg2dFNIR1pPNzNlenVBdzJ1eHVRK0JiZVpmTXhzZXhZMzUrL1FlNEoxaW5WMGc0eDNXSHVNaElsMmpYT0tUMlErVlU1ZmdvU1VJNTJWZlp5ZmtKR2toYTZqbVkrYWFZZGlycStsUUFBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtXQklLcFllMEwzWU5LVG9xc3dVbHZ6bmlnZDR3aVI0S2hackt0OVVwcWlwNjFpOUUzdk12eFJkSGxiRUZpRVhmazlZQVJZeE9aWkQ2VlEycFV1bkJtdFJYbzFMZjhoTVZWY05sOEphZlYzOGFNMi9GdTVWMTZCbjYzcjZ4dDk3ajA5K01YU0ZpNEJuaUdGYWUzaHpiSDkraFlCemtwdVVoNWFabUh1YW5aT1pnSXV2YkdpTmVvbUNuYXh4YXAydXBhQ1pzcSsxa0FBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtYakk4Qnk1emY0a094VFZyWE5WbHYxWDBkOElHWkdLTG5OcFl0bThMcjljcVZldU9TdmZPVzc5RDlhREhpek5oREppZEZaaE55ZEVhaE9hREg2bm9tdEpqcDF0dXRLb05Xa3ZBNkpxZlJWTEhVL1FVZmF1OWwyeDdHNTRkMWZsOTk1eGNJR0FkWHFNZkJOYWRvWXJoSCtNZzJLQmxwVnBibHVDaVhtTW5aMlNoNEdCcUorY2tJT3FxSjZMbUtTbGxabXNvcTZ3cFFBQUFoK1FRSkFRQUJBQ3dBQUFBQUtBQW9BQUFDbFl4L29Mdm94dUpEa1UxYTFZVVpiSjU5blNkMlpYaFdxYlJhMi9nRjhHdTJEWTNpcXM3eXJxK3hCWUVrWXZGU004YVNTT2JFK1pnUmwxQkhGWk5yN3BSQ2F2WjVCVzIxNDJoWTNBTi96V3RzbWYxMnA5WHh4RmwybHBMbjFyc2V6dGZYWmpkSVdJZjJzNWRJdHdqWUtCZ285eWc1cEhnekpYVEVlR2xadWVucHlQbXBHUW9LT1drWW1TcGFTbnFLaWxlSTJGQUFBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtWakIrZ3Urakc0a09SVFZyVmhSbHNubjJkSjNabGVGYXB0RnJiK0NYbU85T296ZUw1VmZQOTlIdkFXaHBpVWRjd2twQkgzODI1QXdZZFU4eFRxbExHaHRDb3NBcktNcHZmYTFtTVJhZTlWdldaZmVCMlhmUGtlTG1tMThsVWNCaitwNWRuTjhqWFozWUlHRWhZdU9VbjQ1YW9DRGtwMTZobDVJallKdmpXS2Nub0dRcHF5UGxwT2hyM2FFbGFxcnE1NkJxN1ZBQUFPdz09XCIpO1xyXG5cdGhlaWdodDogMTAwJTtcclxuXHRmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MjUpOyAvKiBzdXBwb3J0OiBJRTggKi9cclxuXHRvcGFjaXR5OiAwLjI1O1xyXG59XHJcbi51aS1wcm9ncmVzc2Jhci1pbmRldGVybWluYXRlIC51aS1wcm9ncmVzc2Jhci12YWx1ZSB7XHJcblx0YmFja2dyb3VuZC1pbWFnZTogbm9uZTtcclxufVxyXG4udWktc2VsZWN0bWVudS1tZW51IHtcclxuXHRwYWRkaW5nOiAwO1xyXG5cdG1hcmdpbjogMDtcclxuXHRwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0dG9wOiAwO1xyXG5cdGxlZnQ6IDA7XHJcblx0ZGlzcGxheTogbm9uZTtcclxufVxyXG4udWktc2VsZWN0bWVudS1tZW51IC51aS1tZW51IHtcclxuXHRvdmVyZmxvdzogYXV0bztcclxuXHQvKiBTdXBwb3J0OiBJRTcgKi9cclxuXHRvdmVyZmxvdy14OiBoaWRkZW47XHJcblx0cGFkZGluZy1ib3R0b206IDFweDtcclxufVxyXG4udWktc2VsZWN0bWVudS1tZW51IC51aS1tZW51IC51aS1zZWxlY3RtZW51LW9wdGdyb3VwIHtcclxuXHRmb250LXNpemU6IDFlbTtcclxuXHRmb250LXdlaWdodDogYm9sZDtcclxuXHRsaW5lLWhlaWdodDogMS41O1xyXG5cdHBhZGRpbmc6IDJweCAwLjRlbTtcclxuXHRtYXJnaW46IDAuNWVtIDAgMCAwO1xyXG5cdGhlaWdodDogYXV0bztcclxuXHRib3JkZXI6IDA7XHJcbn1cclxuLnVpLXNlbGVjdG1lbnUtb3BlbiB7XHJcblx0ZGlzcGxheTogYmxvY2s7XHJcbn1cclxuLnVpLXNlbGVjdG1lbnUtYnV0dG9uIHtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG5cdGN1cnNvcjogcG9pbnRlcjtcclxufVxyXG4udWktc2VsZWN0bWVudS1idXR0b24gc3Bhbi51aS1pY29uIHtcclxuXHRyaWdodDogMC41ZW07XHJcblx0bGVmdDogYXV0bztcclxuXHRtYXJnaW4tdG9wOiAtOHB4O1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHR0b3A6IDUwJTtcclxufVxyXG4udWktc2VsZWN0bWVudS1idXR0b24gc3Bhbi51aS1zZWxlY3RtZW51LXRleHQge1xyXG5cdHRleHQtYWxpZ246IGxlZnQ7XHJcblx0cGFkZGluZzogMC40ZW0gMi4xZW0gMC40ZW0gMWVtO1xyXG5cdGRpc3BsYXk6IGJsb2NrO1xyXG5cdGxpbmUtaGVpZ2h0OiAxLjQ7XHJcblx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHR0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcclxuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG59XHJcbi51aS1zbGlkZXIge1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHR0ZXh0LWFsaWduOiBsZWZ0O1xyXG59XHJcbi51aS1zbGlkZXIgLnVpLXNsaWRlci1oYW5kbGUge1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHR6LWluZGV4OiAyO1xyXG5cdHdpZHRoOiAxLjJlbTtcclxuXHRoZWlnaHQ6IDEuMmVtO1xyXG5cdGN1cnNvcjogZGVmYXVsdDtcclxuXHQtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xyXG5cdHRvdWNoLWFjdGlvbjogbm9uZTtcclxufVxyXG4udWktc2xpZGVyIC51aS1zbGlkZXItcmFuZ2Uge1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHR6LWluZGV4OiAxO1xyXG5cdGZvbnQtc2l6ZTogLjdlbTtcclxuXHRkaXNwbGF5OiBibG9jaztcclxuXHRib3JkZXI6IDA7XHJcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xyXG59XHJcblxyXG4vKiBzdXBwb3J0OiBJRTggLSBTZWUgIzY3MjcgKi9cclxuLnVpLXNsaWRlci51aS1zdGF0ZS1kaXNhYmxlZCAudWktc2xpZGVyLWhhbmRsZSxcclxuLnVpLXNsaWRlci51aS1zdGF0ZS1kaXNhYmxlZCAudWktc2xpZGVyLXJhbmdlIHtcclxuXHRmaWx0ZXI6IGluaGVyaXQ7XHJcbn1cclxuXHJcbi51aS1zbGlkZXItaG9yaXpvbnRhbCB7XHJcblx0aGVpZ2h0OiAuOGVtO1xyXG59XHJcbi51aS1zbGlkZXItaG9yaXpvbnRhbCAudWktc2xpZGVyLWhhbmRsZSB7XHJcblx0dG9wOiAtLjNlbTtcclxuXHRtYXJnaW4tbGVmdDogLS42ZW07XHJcbn1cclxuLnVpLXNsaWRlci1ob3Jpem9udGFsIC51aS1zbGlkZXItcmFuZ2Uge1xyXG5cdHRvcDogMDtcclxuXHRoZWlnaHQ6IDEwMCU7XHJcbn1cclxuLnVpLXNsaWRlci1ob3Jpem9udGFsIC51aS1zbGlkZXItcmFuZ2UtbWluIHtcclxuXHRsZWZ0OiAwO1xyXG59XHJcbi51aS1zbGlkZXItaG9yaXpvbnRhbCAudWktc2xpZGVyLXJhbmdlLW1heCB7XHJcblx0cmlnaHQ6IDA7XHJcbn1cclxuXHJcbi51aS1zbGlkZXItdmVydGljYWwge1xyXG5cdHdpZHRoOiAuOGVtO1xyXG5cdGhlaWdodDogMTAwcHg7XHJcbn1cclxuLnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLWhhbmRsZSB7XHJcblx0bGVmdDogLS4zZW07XHJcblx0bWFyZ2luLWxlZnQ6IDA7XHJcblx0bWFyZ2luLWJvdHRvbTogLS42ZW07XHJcbn1cclxuLnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLXJhbmdlIHtcclxuXHRsZWZ0OiAwO1xyXG5cdHdpZHRoOiAxMDAlO1xyXG59XHJcbi51aS1zbGlkZXItdmVydGljYWwgLnVpLXNsaWRlci1yYW5nZS1taW4ge1xyXG5cdGJvdHRvbTogMDtcclxufVxyXG4udWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItcmFuZ2UtbWF4IHtcclxuXHR0b3A6IDA7XHJcbn1cclxuLnVpLXNwaW5uZXIge1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHRwYWRkaW5nOiAwO1xyXG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbn1cclxuLnVpLXNwaW5uZXItaW5wdXQge1xyXG5cdGJvcmRlcjogbm9uZTtcclxuXHRiYWNrZ3JvdW5kOiBub25lO1xyXG5cdGNvbG9yOiBpbmhlcml0O1xyXG5cdHBhZGRpbmc6IDA7XHJcblx0bWFyZ2luOiAuMmVtIDA7XHJcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuXHRtYXJnaW4tbGVmdDogLjRlbTtcclxuXHRtYXJnaW4tcmlnaHQ6IDIycHg7XHJcbn1cclxuLnVpLXNwaW5uZXItYnV0dG9uIHtcclxuXHR3aWR0aDogMTZweDtcclxuXHRoZWlnaHQ6IDUwJTtcclxuXHRmb250LXNpemU6IC41ZW07XHJcblx0cGFkZGluZzogMDtcclxuXHRtYXJnaW46IDA7XHJcblx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRjdXJzb3I6IGRlZmF1bHQ7XHJcblx0ZGlzcGxheTogYmxvY2s7XHJcblx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHRyaWdodDogMDtcclxufVxyXG4vKiBtb3JlIHNwZWNpZmljaXR5IHJlcXVpcmVkIGhlcmUgdG8gb3ZlcnJpZGUgZGVmYXVsdCBib3JkZXJzICovXHJcbi51aS1zcGlubmVyIGEudWktc3Bpbm5lci1idXR0b24ge1xyXG5cdGJvcmRlci10b3A6IG5vbmU7XHJcblx0Ym9yZGVyLWJvdHRvbTogbm9uZTtcclxuXHRib3JkZXItcmlnaHQ6IG5vbmU7XHJcbn1cclxuLyogdmVydGljYWxseSBjZW50ZXIgaWNvbiAqL1xyXG4udWktc3Bpbm5lciAudWktaWNvbiB7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdG1hcmdpbi10b3A6IC04cHg7XHJcblx0dG9wOiA1MCU7XHJcblx0bGVmdDogMDtcclxufVxyXG4udWktc3Bpbm5lci11cCB7XHJcblx0dG9wOiAwO1xyXG59XHJcbi51aS1zcGlubmVyLWRvd24ge1xyXG5cdGJvdHRvbTogMDtcclxufVxyXG5cclxuLyogVFIgb3ZlcnJpZGVzICovXHJcbi51aS1zcGlubmVyIC51aS1pY29uLXRyaWFuZ2xlLTEtcyB7XHJcblx0LyogbmVlZCB0byBmaXggaWNvbnMgc3ByaXRlICovXHJcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogLTY1cHggLTE2cHg7XHJcbn1cclxuLnVpLXRhYnMge1xyXG5cdHBvc2l0aW9uOiByZWxhdGl2ZTsvKiBwb3NpdGlvbjogcmVsYXRpdmUgcHJldmVudHMgSUUgc2Nyb2xsIGJ1ZyAoZWxlbWVudCB3aXRoIHBvc2l0aW9uOiByZWxhdGl2ZSBpbnNpZGUgY29udGFpbmVyIHdpdGggb3ZlcmZsb3c6IGF1dG8gYXBwZWFyIGFzIFwiZml4ZWRcIikgKi9cclxuXHRwYWRkaW5nOiAuMmVtO1xyXG59XHJcbi51aS10YWJzIC51aS10YWJzLW5hdiB7XHJcblx0bWFyZ2luOiAwO1xyXG5cdHBhZGRpbmc6IC4yZW0gLjJlbSAwO1xyXG59XHJcbi51aS10YWJzIC51aS10YWJzLW5hdiBsaSB7XHJcblx0bGlzdC1zdHlsZTogbm9uZTtcclxuXHRmbG9hdDogbGVmdDtcclxuXHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0dG9wOiAwO1xyXG5cdG1hcmdpbjogMXB4IC4yZW0gMCAwO1xyXG5cdGJvcmRlci1ib3R0b20td2lkdGg6IDA7XHJcblx0cGFkZGluZzogMDtcclxuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG59XHJcbi51aS10YWJzIC51aS10YWJzLW5hdiAudWktdGFicy1hbmNob3Ige1xyXG5cdGZsb2F0OiBsZWZ0O1xyXG5cdHBhZGRpbmc6IC41ZW0gMWVtO1xyXG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxufVxyXG4udWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1hY3RpdmUge1xyXG5cdG1hcmdpbi1ib3R0b206IC0xcHg7XHJcblx0cGFkZGluZy1ib3R0b206IDFweDtcclxufVxyXG4udWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1hY3RpdmUgLnVpLXRhYnMtYW5jaG9yLFxyXG4udWktdGFicyAudWktdGFicy1uYXYgbGkudWktc3RhdGUtZGlzYWJsZWQgLnVpLXRhYnMtYW5jaG9yLFxyXG4udWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1sb2FkaW5nIC51aS10YWJzLWFuY2hvciB7XHJcblx0Y3Vyc29yOiB0ZXh0O1xyXG59XHJcbi51aS10YWJzLWNvbGxhcHNpYmxlIC51aS10YWJzLW5hdiBsaS51aS10YWJzLWFjdGl2ZSAudWktdGFicy1hbmNob3Ige1xyXG5cdGN1cnNvcjogcG9pbnRlcjtcclxufVxyXG4udWktdGFicyAudWktdGFicy1wYW5lbCB7XHJcblx0ZGlzcGxheTogYmxvY2s7XHJcblx0Ym9yZGVyLXdpZHRoOiAwO1xyXG5cdHBhZGRpbmc6IDFlbSAxLjRlbTtcclxuXHRiYWNrZ3JvdW5kOiBub25lO1xyXG59XHJcbi51aS10b29sdGlwIHtcclxuXHRwYWRkaW5nOiA4cHg7XHJcblx0cG9zaXRpb246IGFic29sdXRlO1xyXG5cdHotaW5kZXg6IDk5OTk7XHJcblx0bWF4LXdpZHRoOiAzMDBweDtcclxuXHQtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA1cHggI2FhYTtcclxuXHRib3gtc2hhZG93OiAwIDAgNXB4ICNhYWE7XHJcbn1cclxuYm9keSAudWktdG9vbHRpcCB7XHJcblx0Ym9yZGVyLXdpZHRoOiAycHg7XHJcbn1cclxuIiwiLyohXHJcbiAqIGpRdWVyeSBVSSBDU1MgRnJhbWV3b3JrIDEuMTEuNFxyXG4gKiBodHRwOi8vanF1ZXJ5dWkuY29tXHJcbiAqXHJcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXHJcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cclxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxyXG4gKlxyXG4gKiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9jYXRlZ29yeS90aGVtaW5nL1xyXG4gKlxyXG4gKiBUbyB2aWV3IGFuZCBtb2RpZnkgdGhpcyB0aGVtZSwgdmlzaXQgaHR0cDovL2pxdWVyeXVpLmNvbS90aGVtZXJvbGxlci8/ZmZEZWZhdWx0PVZlcmRhbmElMkNBcmlhbCUyQ3NhbnMtc2VyaWYmZndEZWZhdWx0PW5vcm1hbCZmc0RlZmF1bHQ9MS4xZW0mY29ybmVyUmFkaXVzPTRweCZiZ0NvbG9ySGVhZGVyPWNjY2NjYyZiZ1RleHR1cmVIZWFkZXI9aGlnaGxpZ2h0X3NvZnQmYmdJbWdPcGFjaXR5SGVhZGVyPTc1JmJvcmRlckNvbG9ySGVhZGVyPWFhYWFhYSZmY0hlYWRlcj0yMjIyMjImaWNvbkNvbG9ySGVhZGVyPTIyMjIyMiZiZ0NvbG9yQ29udGVudD1mZmZmZmYmYmdUZXh0dXJlQ29udGVudD1mbGF0JmJnSW1nT3BhY2l0eUNvbnRlbnQ9NzUmYm9yZGVyQ29sb3JDb250ZW50PWFhYWFhYSZmY0NvbnRlbnQ9MjIyMjIyJmljb25Db2xvckNvbnRlbnQ9MjIyMjIyJmJnQ29sb3JEZWZhdWx0PWU2ZTZlNiZiZ1RleHR1cmVEZWZhdWx0PWdsYXNzJmJnSW1nT3BhY2l0eURlZmF1bHQ9NzUmYm9yZGVyQ29sb3JEZWZhdWx0PWQzZDNkMyZmY0RlZmF1bHQ9NTU1NTU1Jmljb25Db2xvckRlZmF1bHQ9ODg4ODg4JmJnQ29sb3JIb3Zlcj1kYWRhZGEmYmdUZXh0dXJlSG92ZXI9Z2xhc3MmYmdJbWdPcGFjaXR5SG92ZXI9NzUmYm9yZGVyQ29sb3JIb3Zlcj05OTk5OTkmZmNIb3Zlcj0yMTIxMjEmaWNvbkNvbG9ySG92ZXI9NDU0NTQ1JmJnQ29sb3JBY3RpdmU9ZmZmZmZmJmJnVGV4dHVyZUFjdGl2ZT1nbGFzcyZiZ0ltZ09wYWNpdHlBY3RpdmU9NjUmYm9yZGVyQ29sb3JBY3RpdmU9YWFhYWFhJmZjQWN0aXZlPTIxMjEyMSZpY29uQ29sb3JBY3RpdmU9NDU0NTQ1JmJnQ29sb3JIaWdobGlnaHQ9ZmJmOWVlJmJnVGV4dHVyZUhpZ2hsaWdodD1nbGFzcyZiZ0ltZ09wYWNpdHlIaWdobGlnaHQ9NTUmYm9yZGVyQ29sb3JIaWdobGlnaHQ9ZmNlZmExJmZjSGlnaGxpZ2h0PTM2MzYzNiZpY29uQ29sb3JIaWdobGlnaHQ9MmU4M2ZmJmJnQ29sb3JFcnJvcj1mZWYxZWMmYmdUZXh0dXJlRXJyb3I9Z2xhc3MmYmdJbWdPcGFjaXR5RXJyb3I9OTUmYm9yZGVyQ29sb3JFcnJvcj1jZDBhMGEmZmNFcnJvcj1jZDBhMGEmaWNvbkNvbG9yRXJyb3I9Y2QwYTBhJmJnQ29sb3JPdmVybGF5PWFhYWFhYSZiZ1RleHR1cmVPdmVybGF5PWZsYXQmYmdJbWdPcGFjaXR5T3ZlcmxheT0wJm9wYWNpdHlPdmVybGF5PTMwJmJnQ29sb3JTaGFkb3c9YWFhYWFhJmJnVGV4dHVyZVNoYWRvdz1mbGF0JmJnSW1nT3BhY2l0eVNoYWRvdz0wJm9wYWNpdHlTaGFkb3c9MzAmdGhpY2tuZXNzU2hhZG93PThweCZvZmZzZXRUb3BTaGFkb3c9LThweCZvZmZzZXRMZWZ0U2hhZG93PS04cHgmY29ybmVyUmFkaXVzU2hhZG93PThweFxyXG4gKi9cclxuXHJcblxyXG4vKiBDb21wb25lbnQgY29udGFpbmVyc1xyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuLnVpLXdpZGdldCB7XHJcblx0Zm9udC1mYW1pbHk6IFZlcmRhbmEsQXJpYWwsc2Fucy1zZXJpZjtcclxuXHRmb250LXNpemU6IDEuMWVtO1xyXG59XHJcbi51aS13aWRnZXQgLnVpLXdpZGdldCB7XHJcblx0Zm9udC1zaXplOiAxZW07XHJcbn1cclxuLnVpLXdpZGdldCBpbnB1dCxcclxuLnVpLXdpZGdldCBzZWxlY3QsXHJcbi51aS13aWRnZXQgdGV4dGFyZWEsXHJcbi51aS13aWRnZXQgYnV0dG9uIHtcclxuXHRmb250LWZhbWlseTogVmVyZGFuYSxBcmlhbCxzYW5zLXNlcmlmO1xyXG5cdGZvbnQtc2l6ZTogMWVtO1xyXG59XHJcbi51aS13aWRnZXQtY29udGVudCB7XHJcblx0Ym9yZGVyOiAxcHggc29saWQgI2FhYWFhYTtcclxuXHRiYWNrZ3JvdW5kOiAjZmZmZmZmO1xyXG5cdGNvbG9yOiAjMjIyMjIyO1xyXG59XHJcbi51aS13aWRnZXQtY29udGVudCBhIHtcclxuXHRjb2xvcjogIzIyMjIyMjtcclxufVxyXG4udWktd2lkZ2V0LWhlYWRlciB7XHJcblx0Ym9yZGVyOiAxcHggc29saWQgI2FhYWFhYTtcclxuXHRiYWNrZ3JvdW5kOiAjY2NjY2NjIHVybChcImltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF83NV9jY2NjY2NfMXgxMDAucG5nXCIpIDUwJSA1MCUgcmVwZWF0LXg7XHJcblx0Y29sb3I6ICMyMjIyMjI7XHJcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuLnVpLXdpZGdldC1oZWFkZXIgYSB7XHJcblx0Y29sb3I6ICMyMjIyMjI7XHJcbn1cclxuXHJcbi8qIEludGVyYWN0aW9uIHN0YXRlc1xyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuLnVpLXN0YXRlLWRlZmF1bHQsXHJcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGVmYXVsdCxcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRlZmF1bHQge1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICNkM2QzZDM7XHJcblx0YmFja2dyb3VuZDogI2U2ZTZlNiB1cmwoXCJpbWFnZXMvdWktYmdfZ2xhc3NfNzVfZTZlNmU2XzF4NDAwLnBuZ1wiKSA1MCUgNTAlIHJlcGVhdC14O1xyXG5cdGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcblx0Y29sb3I6ICM1NTU1NTU7XHJcbn1cclxuLnVpLXN0YXRlLWRlZmF1bHQgYSxcclxuLnVpLXN0YXRlLWRlZmF1bHQgYTpsaW5rLFxyXG4udWktc3RhdGUtZGVmYXVsdCBhOnZpc2l0ZWQge1xyXG5cdGNvbG9yOiAjNTU1NTU1O1xyXG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxufVxyXG4udWktc3RhdGUtaG92ZXIsXHJcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaG92ZXIsXHJcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1ob3ZlcixcclxuLnVpLXN0YXRlLWZvY3VzLFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWZvY3VzLFxyXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZm9jdXMge1xyXG5cdGJvcmRlcjogMXB4IHNvbGlkICM5OTk5OTk7XHJcblx0YmFja2dyb3VuZDogI2RhZGFkYSB1cmwoXCJpbWFnZXMvdWktYmdfZ2xhc3NfNzVfZGFkYWRhXzF4NDAwLnBuZ1wiKSA1MCUgNTAlIHJlcGVhdC14O1xyXG5cdGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcblx0Y29sb3I6ICMyMTIxMjE7XHJcbn1cclxuLnVpLXN0YXRlLWhvdmVyIGEsXHJcbi51aS1zdGF0ZS1ob3ZlciBhOmhvdmVyLFxyXG4udWktc3RhdGUtaG92ZXIgYTpsaW5rLFxyXG4udWktc3RhdGUtaG92ZXIgYTp2aXNpdGVkLFxyXG4udWktc3RhdGUtZm9jdXMgYSxcclxuLnVpLXN0YXRlLWZvY3VzIGE6aG92ZXIsXHJcbi51aS1zdGF0ZS1mb2N1cyBhOmxpbmssXHJcbi51aS1zdGF0ZS1mb2N1cyBhOnZpc2l0ZWQge1xyXG5cdGNvbG9yOiAjMjEyMTIxO1xyXG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxufVxyXG4udWktc3RhdGUtYWN0aXZlLFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWFjdGl2ZSxcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWFjdGl2ZSB7XHJcblx0Ym9yZGVyOiAxcHggc29saWQgI2FhYWFhYTtcclxuXHRiYWNrZ3JvdW5kOiAjZmZmZmZmIHVybChcImltYWdlcy91aS1iZ19nbGFzc182NV9mZmZmZmZfMXg0MDAucG5nXCIpIDUwJSA1MCUgcmVwZWF0LXg7XHJcblx0Zm9udC13ZWlnaHQ6IG5vcm1hbDtcclxuXHRjb2xvcjogIzIxMjEyMTtcclxufVxyXG4udWktc3RhdGUtYWN0aXZlIGEsXHJcbi51aS1zdGF0ZS1hY3RpdmUgYTpsaW5rLFxyXG4udWktc3RhdGUtYWN0aXZlIGE6dmlzaXRlZCB7XHJcblx0Y29sb3I6ICMyMTIxMjE7XHJcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG59XHJcblxyXG4vKiBJbnRlcmFjdGlvbiBDdWVzXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4udWktc3RhdGUtaGlnaGxpZ2h0LFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCxcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCB7XHJcblx0Ym9yZGVyOiAxcHggc29saWQgI2ZjZWZhMTtcclxuXHRiYWNrZ3JvdW5kOiAjZmJmOWVlIHVybChcImltYWdlcy91aS1iZ19nbGFzc181NV9mYmY5ZWVfMXg0MDAucG5nXCIpIDUwJSA1MCUgcmVwZWF0LXg7XHJcblx0Y29sb3I6ICMzNjM2MzY7XHJcbn1cclxuLnVpLXN0YXRlLWhpZ2hsaWdodCBhLFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCBhLFxyXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0IGEge1xyXG5cdGNvbG9yOiAjMzYzNjM2O1xyXG59XHJcbi51aS1zdGF0ZS1lcnJvcixcclxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvcixcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9yIHtcclxuXHRib3JkZXI6IDFweCBzb2xpZCAjY2QwYTBhO1xyXG5cdGJhY2tncm91bmQ6ICNmZWYxZWMgdXJsKFwiaW1hZ2VzL3VpLWJnX2dsYXNzXzk1X2ZlZjFlY18xeDQwMC5wbmdcIikgNTAlIDUwJSByZXBlYXQteDtcclxuXHRjb2xvcjogI2NkMGEwYTtcclxufVxyXG4udWktc3RhdGUtZXJyb3IgYSxcclxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciBhLFxyXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3IgYSB7XHJcblx0Y29sb3I6ICNjZDBhMGE7XHJcbn1cclxuLnVpLXN0YXRlLWVycm9yLXRleHQsXHJcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3ItdGV4dCxcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9yLXRleHQge1xyXG5cdGNvbG9yOiAjY2QwYTBhO1xyXG59XHJcbi51aS1wcmlvcml0eS1wcmltYXJ5LFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXByaW1hcnksXHJcbi51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1wcmltYXJ5IHtcclxuXHRmb250LXdlaWdodDogYm9sZDtcclxufVxyXG4udWktcHJpb3JpdHktc2Vjb25kYXJ5LFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXNlY29uZGFyeSxcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXByaW9yaXR5LXNlY29uZGFyeSB7XHJcblx0b3BhY2l0eTogLjc7XHJcblx0ZmlsdGVyOkFscGhhKE9wYWNpdHk9NzApOyAvKiBzdXBwb3J0OiBJRTggKi9cclxuXHRmb250LXdlaWdodDogbm9ybWFsO1xyXG59XHJcbi51aS1zdGF0ZS1kaXNhYmxlZCxcclxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kaXNhYmxlZCxcclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRpc2FibGVkIHtcclxuXHRvcGFjaXR5OiAuMzU7XHJcblx0ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpOyAvKiBzdXBwb3J0OiBJRTggKi9cclxuXHRiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xyXG59XHJcbi51aS1zdGF0ZS1kaXNhYmxlZCAudWktaWNvbiB7XHJcblx0ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpOyAvKiBzdXBwb3J0OiBJRTggLSBTZWUgIzYwNTkgKi9cclxufVxyXG5cclxuLyogSWNvbnNcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4vKiBzdGF0ZXMgYW5kIGltYWdlcyAqL1xyXG4udWktaWNvbiB7XHJcblx0d2lkdGg6IDE2cHg7XHJcblx0aGVpZ2h0OiAxNnB4O1xyXG59XHJcbi51aS1pY29uLFxyXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLWljb24ge1xyXG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc18yMjIyMjJfMjU2eDI0MC5wbmdcIik7XHJcbn1cclxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLWljb24ge1xyXG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc18yMjIyMjJfMjU2eDI0MC5wbmdcIik7XHJcbn1cclxuLnVpLXN0YXRlLWRlZmF1bHQgLnVpLWljb24ge1xyXG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc184ODg4ODhfMjU2eDI0MC5wbmdcIik7XHJcbn1cclxuLnVpLXN0YXRlLWhvdmVyIC51aS1pY29uLFxyXG4udWktc3RhdGUtZm9jdXMgLnVpLWljb24ge1xyXG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc180NTQ1NDVfMjU2eDI0MC5wbmdcIik7XHJcbn1cclxuLnVpLXN0YXRlLWFjdGl2ZSAudWktaWNvbiB7XHJcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiaW1hZ2VzL3VpLWljb25zXzQ1NDU0NV8yNTZ4MjQwLnBuZ1wiKTtcclxufVxyXG4udWktc3RhdGUtaGlnaGxpZ2h0IC51aS1pY29uIHtcclxuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfMmU4M2ZmXzI1NngyNDAucG5nXCIpO1xyXG59XHJcbi51aS1zdGF0ZS1lcnJvciAudWktaWNvbixcclxuLnVpLXN0YXRlLWVycm9yLXRleHQgLnVpLWljb24ge1xyXG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc19jZDBhMGFfMjU2eDI0MC5wbmdcIik7XHJcbn1cclxuXHJcbi8qIHBvc2l0aW9uaW5nICovXHJcbi51aS1pY29uLWJsYW5rIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMTZweCAxNnB4OyB9XHJcbi51aS1pY29uLWNhcmF0LTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfVxyXG4udWktaWNvbi1jYXJhdC0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggMDsgfVxyXG4udWktaWNvbi1jYXJhdC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAwOyB9XHJcbi51aS1pY29uLWNhcmF0LTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAwOyB9XHJcbi51aS1pY29uLWNhcmF0LTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IDA7IH1cclxuLnVpLWljb24tY2FyYXQtMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IDA7IH1cclxuLnVpLWljb24tY2FyYXQtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggMDsgfVxyXG4udWktaWNvbi1jYXJhdC0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IDA7IH1cclxuLnVpLWljb24tY2FyYXQtMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggMDsgfVxyXG4udWktaWNvbi1jYXJhdC0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAwOyB9XHJcbi51aS1pY29uLXRyaWFuZ2xlLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2cHg7IH1cclxuLnVpLWljb24tdHJpYW5nbGUtMS1uZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNnB4OyB9XHJcbi51aS1pY29uLXRyaWFuZ2xlLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNnB4OyB9XHJcbi51aS1pY29uLXRyaWFuZ2xlLTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTZweDsgfVxyXG4udWktaWNvbi10cmlhbmdsZS0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTZweDsgfVxyXG4udWktaWNvbi10cmlhbmdsZS0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE2cHg7IH1cclxuLnVpLWljb24tdHJpYW5nbGUtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2cHg7IH1cclxuLnVpLWljb24tdHJpYW5nbGUtMS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTZweDsgfVxyXG4udWktaWNvbi10cmlhbmdsZS0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTZweDsgfVxyXG4udWktaWNvbi10cmlhbmdsZS0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTZweDsgfVxyXG4udWktaWNvbi1hcnJvdy0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93LTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvdy0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvdy0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3ctMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3ctMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93LTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93LTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3ctMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3ctMi1uZS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvdy0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvdy0yLXNlLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93c3RvcC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3dzdG9wLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMzJweDsgfVxyXG4udWktaWNvbi1hcnJvd3N0b3AtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0zMnB4OyB9XHJcbi51aS1pY29uLWFycm93c3RvcC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTMycHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGljay0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMS1uZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGljay0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGljay0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrLTItbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMi1uZS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrLTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2stMi1zZS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC00OHB4OyB9XHJcbi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtNDhweDsgfVxyXG4udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTQ4cHg7IH1cclxuLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTY0cHg7IH1cclxuLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNjRweDsgfVxyXG4udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmV0dXJuLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmV0dXJuLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmV0dXJuLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmV0dXJuLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtNjRweDsgfVxyXG4udWktaWNvbi1hcnJvd3JlZnJlc2gtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93cmVmcmVzaC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTY0cHg7IH1cclxuLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtNjRweDsgfVxyXG4udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC02NHB4OyB9XHJcbi51aS1pY29uLWFycm93LTQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04MHB4OyB9XHJcbi51aS1pY29uLWFycm93LTQtZGlhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC04MHB4OyB9XHJcbi51aS1pY29uLWV4dGxpbmsgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtODBweDsgfVxyXG4udWktaWNvbi1uZXd3aW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtODBweDsgfVxyXG4udWktaWNvbi1yZWZyZXNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTgwcHg7IH1cclxuLnVpLWljb24tc2h1ZmZsZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC04MHB4OyB9XHJcbi51aS1pY29uLXRyYW5zZmVyLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC04MHB4OyB9XHJcbi51aS1pY29uLXRyYW5zZmVydGhpY2stZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC04MHB4OyB9XHJcbi51aS1pY29uLWZvbGRlci1jb2xsYXBzZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyB9XHJcbi51aS1pY29uLWZvbGRlci1vcGVuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTk2cHg7IH1cclxuLnVpLWljb24tZG9jdW1lbnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtOTZweDsgfVxyXG4udWktaWNvbi1kb2N1bWVudC1iIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTk2cHg7IH1cclxuLnVpLWljb24tbm90ZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC05NnB4OyB9XHJcbi51aS1pY29uLW1haWwtY2xvc2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTk2cHg7IH1cclxuLnVpLWljb24tbWFpbC1vcGVuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTk2cHg7IH1cclxuLnVpLWljb24tc3VpdGNhc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTk2cHg7IH1cclxuLnVpLWljb24tY29tbWVudCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtOTZweDsgfVxyXG4udWktaWNvbi1wZXJzb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTk2cHg7IH1cclxuLnVpLWljb24tcHJpbnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTk2cHg7IH1cclxuLnVpLWljb24tdHJhc2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTk2cHg7IH1cclxuLnVpLWljb24tbG9ja2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC05NnB4OyB9XHJcbi51aS1pY29uLXVubG9ja2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC05NnB4OyB9XHJcbi51aS1pY29uLWJvb2ttYXJrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC05NnB4OyB9XHJcbi51aS1pY29uLXRhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtOTZweDsgfVxyXG4udWktaWNvbi1ob21lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTEycHg7IH1cclxuLnVpLWljb24tZmxhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1jYWxlbmRhciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1jYXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTExMnB4OyB9XHJcbi51aS1pY29uLXBlbmNpbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1jbG9jayB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1kaXNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTExMnB4OyB9XHJcbi51aS1pY29uLWNhbGN1bGF0b3IgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTExMnB4OyB9XHJcbi51aS1pY29uLXpvb21pbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTEycHg7IH1cclxuLnVpLWljb24tem9vbW91dCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTEycHg7IH1cclxuLnVpLWljb24tc2VhcmNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xMTJweDsgfVxyXG4udWktaWNvbi13cmVuY2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTExMnB4OyB9XHJcbi51aS1pY29uLWdlYXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTExMnB4OyB9XHJcbi51aS1pY29uLWhlYXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1zdGFyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1saW5rIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0xMTJweDsgfVxyXG4udWktaWNvbi1jYW5jZWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMjhweDsgfVxyXG4udWktaWNvbi1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTEyOHB4OyB9XHJcbi51aS1pY29uLXBsdXN0aGljayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1taW51c3RoaWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTEyOHB4OyB9XHJcbi51aS1pY29uLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTEyOHB4OyB9XHJcbi51aS1pY29uLWNsb3NldGhpY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTI4cHg7IH1cclxuLnVpLWljb24ta2V5IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1saWdodGJ1bGIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTEyOHB4OyB9XHJcbi51aS1pY29uLXNjaXNzb3JzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1jbGlwYm9hcmQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTEyOHB4OyB9XHJcbi51aS1pY29uLWNvcHkgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTEyOHB4OyB9XHJcbi51aS1pY29uLWNvbnRhY3QgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTEyOHB4OyB9XHJcbi51aS1pY29uLWltYWdlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xMjhweDsgfVxyXG4udWktaWNvbi12aWRlbyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTI4cHg7IH1cclxuLnVpLWljb24tc2NyaXB0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0xMjhweDsgfVxyXG4udWktaWNvbi1hbGVydCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE0NHB4OyB9XHJcbi51aS1pY29uLWluZm8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTQ0cHg7IH1cclxuLnVpLWljb24tbm90aWNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE0NHB4OyB9XHJcbi51aS1pY29uLWhlbHAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTQ0cHg7IH1cclxuLnVpLWljb24tY2hlY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTQ0cHg7IH1cclxuLnVpLWljb24tYnVsbGV0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE0NHB4OyB9XHJcbi51aS1pY29uLXJhZGlvLW9uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE0NHB4OyB9XHJcbi51aS1pY29uLXJhZGlvLW9mZiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTQ0cHg7IH1cclxuLnVpLWljb24tcGluLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE0NHB4OyB9XHJcbi51aS1pY29uLXBpbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNDRweDsgfVxyXG4udWktaWNvbi1wbGF5IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTYwcHg7IH1cclxuLnVpLWljb24tcGF1c2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTYwcHg7IH1cclxuLnVpLWljb24tc2Vlay1uZXh0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE2MHB4OyB9XHJcbi51aS1pY29uLXNlZWstcHJldiB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNjBweDsgfVxyXG4udWktaWNvbi1zZWVrLWVuZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNjBweDsgfVxyXG4udWktaWNvbi1zZWVrLXN0YXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE2MHB4OyB9XHJcbi8qIHVpLWljb24tc2Vlay1maXJzdCBpcyBkZXByZWNhdGVkLCB1c2UgdWktaWNvbi1zZWVrLXN0YXJ0IGluc3RlYWQgKi9cclxuLnVpLWljb24tc2Vlay1maXJzdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNjBweDsgfVxyXG4udWktaWNvbi1zdG9wIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2MHB4OyB9XHJcbi51aS1pY29uLWVqZWN0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNjBweDsgfVxyXG4udWktaWNvbi12b2x1bWUtb2ZmIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNjBweDsgfVxyXG4udWktaWNvbi12b2x1bWUtb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2MHB4OyB9XHJcbi51aS1pY29uLXBvd2VyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTc2cHg7IH1cclxuLnVpLWljb24tc2lnbmFsLWRpYWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTc2cHg7IH1cclxuLnVpLWljb24tc2lnbmFsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE3NnB4OyB9XHJcbi51aS1pY29uLWJhdHRlcnktMCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNzZweDsgfVxyXG4udWktaWNvbi1iYXR0ZXJ5LTEgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTc2cHg7IH1cclxuLnVpLWljb24tYmF0dGVyeS0yIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE3NnB4OyB9XHJcbi51aS1pY29uLWJhdHRlcnktMyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNzZweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLWFycm93LWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS1hcnJvdy1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtYXJyb3ctdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTkycHg7IH1cclxuLnVpLWljb24tY2lyY2xlLWFycm93LW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS16b29taW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZS16b29tb3V0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xOTJweDsgfVxyXG4udWktaWNvbi1jaXJjbGUtY2hlY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTE5MnB4OyB9XHJcbi51aS1pY29uLWNpcmNsZXNtYWxsLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMDhweDsgfVxyXG4udWktaWNvbi1jaXJjbGVzbWFsbC1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMDhweDsgfVxyXG4udWktaWNvbi1jaXJjbGVzbWFsbC1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0yMDhweDsgfVxyXG4udWktaWNvbi1zcXVhcmVzbWFsbC1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTIwOHB4OyB9XHJcbi51aS1pY29uLXNxdWFyZXNtYWxsLW1pbnVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTIwOHB4OyB9XHJcbi51aS1pY29uLXNxdWFyZXNtYWxsLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTIwOHB4OyB9XHJcbi51aS1pY29uLWdyaXAtZG90dGVkLXZlcnRpY2FsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjI0cHg7IH1cclxuLnVpLWljb24tZ3JpcC1kb3R0ZWQtaG9yaXpvbnRhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMjRweDsgfVxyXG4udWktaWNvbi1ncmlwLXNvbGlkLXZlcnRpY2FsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTIyNHB4OyB9XHJcbi51aS1pY29uLWdyaXAtc29saWQtaG9yaXpvbnRhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0yMjRweDsgfVxyXG4udWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMjI0cHg7IH1cclxuLnVpLWljb24tZ3JpcC1kaWFnb25hbC1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0yMjRweDsgfVxyXG5cclxuXHJcbi8qIE1pc2MgdmlzdWFsc1xyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbi8qIENvcm5lciByYWRpdXMgKi9cclxuLnVpLWNvcm5lci1hbGwsXHJcbi51aS1jb3JuZXItdG9wLFxyXG4udWktY29ybmVyLWxlZnQsXHJcbi51aS1jb3JuZXItdGwge1xyXG5cdGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDtcclxufVxyXG4udWktY29ybmVyLWFsbCxcclxuLnVpLWNvcm5lci10b3AsXHJcbi51aS1jb3JuZXItcmlnaHQsXHJcbi51aS1jb3JuZXItdHIge1xyXG5cdGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XHJcbn1cclxuLnVpLWNvcm5lci1hbGwsXHJcbi51aS1jb3JuZXItYm90dG9tLFxyXG4udWktY29ybmVyLWxlZnQsXHJcbi51aS1jb3JuZXItYmwge1xyXG5cdGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDtcclxufVxyXG4udWktY29ybmVyLWFsbCxcclxuLnVpLWNvcm5lci1ib3R0b20sXHJcbi51aS1jb3JuZXItcmlnaHQsXHJcbi51aS1jb3JuZXItYnIge1xyXG5cdGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7XHJcbn1cclxuXHJcbi8qIE92ZXJsYXlzICovXHJcbi51aS13aWRnZXQtb3ZlcmxheSB7XHJcblx0YmFja2dyb3VuZDogI2FhYWFhYTtcclxuXHRvcGFjaXR5OiAuMztcclxuXHRmaWx0ZXI6IEFscGhhKE9wYWNpdHk9MzApOyAvKiBzdXBwb3J0OiBJRTggKi9cclxufVxyXG4udWktd2lkZ2V0LXNoYWRvdyB7XHJcblx0bWFyZ2luOiAtOHB4IDAgMCAtOHB4O1xyXG5cdHBhZGRpbmc6IDhweDtcclxuXHRiYWNrZ3JvdW5kOiAjYWFhYWFhO1xyXG5cdG9wYWNpdHk6IC4zO1xyXG5cdGZpbHRlcjogQWxwaGEoT3BhY2l0eT0zMCk7IC8qIHN1cHBvcnQ6IElFOCAqL1xyXG5cdGJvcmRlci1yYWRpdXM6IDhweDtcclxufVxyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */ diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery-ui.min.css b/src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery-ui.min.css index 0f80868a04b..4d35037c11c 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery-ui.min.css +++ b/src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery-ui.min.css @@ -2,7 +2,7 @@ * http://jqueryui.com * Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px -* Copyright jQuery Foundation and other contributors; Licensed MIT */.ui-helper-reset,.ui-menu{outline:0;list-style:none}.ui-button,.ui-spinner,.ui-spinner-input{vertical-align:middle}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}/*! +* Copyright jQuery Foundation and other contributors; Licensed MIT */.ui-helper-reset,.ui-menu{outline:0;list-style:none}.ui-button,.ui-spinner,.ui-spinner-input{vertical-align:middle}/*! * jQuery UI CSS Framework 1.11.4 * http://jqueryui.com * @@ -11,7 +11,7 @@ * http://jquery.org/license * * http://api.jqueryui.com/category/theming/ - */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;line-height:1.3;text-decoration:none;font-size:100%}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons,.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;text-align:center;overflow:visible}.ui-button,.ui-button:active,.ui-button:hover,.ui-button:link,.ui-button:visited{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-icons-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-icons-only .ui-button-icon-primary,.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary{left:.5em}.ui-button-icons-only .ui-button-icon-secondary,.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}button.ui-button::-moz-focus-inner,input.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-next-hover,.ui-datepicker .ui-datepicker-prev-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td a,.ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-multi .ui-datepicker-group,.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0 0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-slider-vertical .ui-slider-range-min,.ui-spinner-down{bottom:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{padding:0;margin:0;display:block}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-state-active,.ui-menu .ui-state-focus{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:700;line-height:1.5;padding:2px .4em;margin:.5em 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:.4em 2.1em .4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{-webkit-filter:inherit;filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0}.ui-spinner-input{border:none;background:0 0;color:inherit;padding:0;margin:.2em 22px .2em .4em}.ui-widget-content a,.ui-widget-header,.ui-widget-header a{color:#222}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0 0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}/*! + */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;line-height:1.3;text-decoration:none;font-size:100%}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons,.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;text-align:center;overflow:visible}.ui-button,.ui-button:active,.ui-button:hover,.ui-button:link,.ui-button:visited{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-icons-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-icons-only .ui-button-icon-primary,.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary{left:.5em}.ui-button-icons-only .ui-button-icon-secondary,.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}button.ui-button::-moz-focus-inner,input.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-next-hover,.ui-datepicker .ui-datepicker-prev-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td a,.ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-multi .ui-datepicker-group,.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0 0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-slider-vertical .ui-slider-range-min,.ui-spinner-down{bottom:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{padding:0;margin:0;display:block}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-state-active,.ui-menu .ui-state-focus{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:700;line-height:1.5;padding:2px .4em;margin:.5em 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:.4em 2.1em .4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0}.ui-spinner-input{border:none;background:0 0;color:inherit;padding:0;margin:.2em 22px .2em .4em}.ui-widget-content a,.ui-widget-header,.ui-widget-header a{color:#222}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0 0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}/*! * jQuery UI CSS Framework 1.11.4 * http://jqueryui.com * From c420676ba03c6f431a44724319dc590259575281 Mon Sep 17 00:00:00 2001 From: Benedek Farkas Date: Sun, 10 Mar 2024 00:13:47 +0100 Subject: [PATCH 32/56] Fixing/simplifying Layout editor toolbox stickyness and height restriction to viewport --- .../LayoutEditor/Directives/Toolbox.js | 24 +-------- .../Assets/Less/LayoutEditor/Editor.less | 4 +- .../Assets/Less/LayoutEditor/Toolbox.less | 50 +++-------------- .../Orchard.Layouts/Scripts/LayoutEditor.js | 26 +-------- .../Scripts/LayoutEditor.min.js | 2 +- .../Orchard.Layouts/Styles/LayoutEditor.css | 53 +++++-------------- .../Styles/LayoutEditor.min.css | 2 +- 7 files changed, 27 insertions(+), 134 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Assets/JavaScript/LayoutEditor/Directives/Toolbox.js b/src/Orchard.Web/Modules/Orchard.Layouts/Assets/JavaScript/LayoutEditor/Directives/Toolbox.js index a7c8dcb93d5..5655ac3014a 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Assets/JavaScript/LayoutEditor/Directives/Toolbox.js +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Assets/JavaScript/LayoutEditor/Directives/Toolbox.js @@ -181,29 +181,7 @@ } ], templateUrl: environment.templateUrl("Toolbox"), - replace: true, - link: function (scope, element) { - var toolbox = element.find(".layout-toolbox"); - $(window).on("resize scroll", function (e) { - var canvas = element.parent().find(".layout-canvas"); - // If the canvas is taller than the toolbox, make the toolbox sticky-positioned within the editor - // to help the user avoid excessive vertical scrolling. - var canvasIsTaller = !!canvas && canvas.height() > toolbox.height(); - var windowPos = $(window).scrollTop(); - if (canvasIsTaller && windowPos > element.offset().top + element.height() - toolbox.height()) { - toolbox.addClass("sticky-bottom"); - toolbox.removeClass("sticky-top"); - } - else if (canvasIsTaller && windowPos > element.offset().top) { - toolbox.addClass("sticky-top"); - toolbox.removeClass("sticky-bottom"); - } - else { - toolbox.removeClass("sticky-top"); - toolbox.removeClass("sticky-bottom"); - } - }); - } + replace: true }; } ]); \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Assets/Less/LayoutEditor/Editor.less b/src/Orchard.Web/Modules/Orchard.Layouts/Assets/Less/LayoutEditor/Editor.less index 35cb262b36d..258feafb75b 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Assets/Less/LayoutEditor/Editor.less +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Assets/Less/LayoutEditor/Editor.less @@ -19,10 +19,10 @@ display: flex; margin-top: 1em; font-size: @font-size; - align-items: stretch; > .layout-canvas-wrapper { - flex-grow: 1; + flex: 1 1; + height: fit-content; background-color: @gray-bg; border: 1px solid @gray-border; diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Assets/Less/LayoutEditor/Toolbox.less b/src/Orchard.Web/Modules/Orchard.Layouts/Assets/Less/LayoutEditor/Toolbox.less index 1b21a0b1fe2..0b3971e2160 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Assets/Less/LayoutEditor/Toolbox.less +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Assets/Less/LayoutEditor/Toolbox.less @@ -22,56 +22,22 @@ body { .layout-editor { > .layout-toolbox-wrapper { - margin-left: @container-padding; - width: 218px; - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; - /* forcing the toolbox height to be smaller than the viewport height - so it is always visible and scrollable*/ - max-height: calc(100vh - 80px); - overflow-x: clip; - overflow-y: auto; - /* forcing the toolbox to stay sticked at the the top of its container */ - position: -webkit-sticky; position: sticky; - top: 0; - - &::-webkit-scrollbar { - width: 2px; - } - - &::-webkit-scrollbar-track { - -webkit-box-shadow: inset 0 0 6px rgb(0, 0, 0, .3); - border-radius: 1px; - } - - &::-webkit-scrollbar-thumb { - background-color: rgba(0,0,0,0.3); - } + top: 1vh; + padding-left: @container-padding; + width: 220px; + overflow-y: auto; + scrollbar-width: thin; + min-height: 400px; + max-height: 98vh; + height: 100%; > .layout-toolbox { border: 1px solid @gray-border; - width: 220px; - min-height: 400px; padding: @container-padding / 2; background-color: @gray-bg; - &.sticky-top { - position: fixed; - top: 0; - max-height: 100%; - overflow-y: auto; - } - - &.sticky-bottom { - position: absolute; - bottom: 0; - } - .layout-toolbox-group { - margin-top: @container-padding; - .layout-toolbox-group-heading { display: block; margin-bottom: @container-padding / 3; diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js index fa7b2abc1a3..abd4c8a3b2b 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js @@ -916,29 +916,7 @@ angular } ], templateUrl: environment.templateUrl("Toolbox"), - replace: true, - link: function (scope, element) { - var toolbox = element.find(".layout-toolbox"); - $(window).on("resize scroll", function (e) { - var canvas = element.parent().find(".layout-canvas"); - // If the canvas is taller than the toolbox, make the toolbox sticky-positioned within the editor - // to help the user avoid excessive vertical scrolling. - var canvasIsTaller = !!canvas && canvas.height() > toolbox.height(); - var windowPos = $(window).scrollTop(); - if (canvasIsTaller && windowPos > element.offset().top + element.height() - toolbox.height()) { - toolbox.addClass("sticky-bottom"); - toolbox.removeClass("sticky-top"); - } - else if (canvasIsTaller && windowPos > element.offset().top) { - toolbox.addClass("sticky-top"); - toolbox.removeClass("sticky-bottom"); - } - else { - toolbox.removeClass("sticky-top"); - toolbox.removeClass("sticky-bottom"); - } - }); - } + replace: true }; } ]); @@ -966,4 +944,4 @@ angular }; } ]); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxheW91dEVkaXRvci5qcyIsIk1vZHVsZS5qcyIsIkNsaXBib2FyZC5qcyIsIlNjb3BlQ29uZmlndXJhdG9yLmpzIiwiRWRpdG9yLmpzIiwiQ2FudmFzLmpzIiwiQ2hpbGQuanMiLCJDb2x1bW4uanMiLCJDb250ZW50LmpzIiwiR3JpZC5qcyIsIlJvdy5qcyIsIlBvcHVwLmpzIiwiVG9vbGJveC5qcyIsIlRvb2xib3hHcm91cC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUNMQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2xWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUNoTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IkxheW91dEVkaXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiYW5ndWxhci5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIiwgW1wibmdTYW5pdGl6ZVwiLCBcIm5nUmVzb3VyY2VcIiwgXCJ1aS5zb3J0YWJsZVwiXSk7IiwidmFyIExheW91dEVkaXRvcjtcclxuKGZ1bmN0aW9uKExheW91dEVkaXRvcikge1xyXG5cclxuICAgIHZhciBDbGlwYm9hcmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuX2NsaXBib2FyZERhdGEgPSB7fTtcclxuICAgICAgICB0aGlzLl9pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fd2FzSW52b2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnNldERhdGEgPSBmdW5jdGlvbihjb250ZW50VHlwZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBzZWxmLl9jbGlwYm9hcmREYXRhW2NvbnRlbnRUeXBlXSA9IGRhdGE7XHJcbiAgICAgICAgICAgIHNlbGYuX3dhc0ludm9rZWQgPSB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5nZXREYXRhID0gZnVuY3Rpb24gKGNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgICAgIHNlbGYuX3dhc0ludm9rZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fY2xpcGJvYXJkRGF0YVtjb250ZW50VHlwZV07XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgc2VsZi5faXNEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHNlbGYuX3dhc0ludm9rZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2VsZi5fY2xpcGJvYXJkRGF0YSA9IHt9O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5faXNEaXNhYmxlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy53YXNJbnZva2VkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fd2FzSW52b2tlZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkNsaXBib2FyZCA9IG5ldyBDbGlwYm9hcmQoKTtcclxuXHJcbiAgICBhbmd1bGFyXHJcbiAgICAgICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgICAgIC5mYWN0b3J5KFwiY2xpcGJvYXJkXCIsIFtcclxuICAgICAgICAgICAgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldERhdGE6IExheW91dEVkaXRvci5DbGlwYm9hcmQuc2V0RGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBnZXREYXRhOiBMYXlvdXRFZGl0b3IuQ2xpcGJvYXJkLmdldERhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZTogTGF5b3V0RWRpdG9yLkNsaXBib2FyZC5kaXNhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IExheW91dEVkaXRvci5DbGlwYm9hcmQuaXNEaXNhYmxlZCxcclxuICAgICAgICAgICAgICAgICAgICB3YXNJbnZva2VkOiBMYXlvdXRFZGl0b3IuQ2xpcGJvYXJkLndhc0ludm9rZWRcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdKTtcclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5mYWN0b3J5KFwic2NvcGVDb25maWd1cmF0b3JcIiwgW1wiJHRpbWVvdXRcIiwgXCJjbGlwYm9hcmRcIixcclxuICAgICAgICBmdW5jdGlvbiAoJHRpbWVvdXQsIGNsaXBib2FyZCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZUZvckVsZW1lbnQ6IGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAkZWxlbWVudC5maW5kKFwiLmxheW91dC1wYW5lbFwiKS5jbGljayhmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoKS5rZXlkb3duKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNldEZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gJHNjb3BlLmVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmVkaXRvci5pc0RyYWdnaW5nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbmF0aXZlIGNsaXBib2FyZCBzdXBwb3J0IGV4aXN0cywgdGhlIHBzZXVkby1jbGlwYm9hcmQgd2lsbCBoYXZlIGJlZW4gZGlzYWJsZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2xpcGJvYXJkLmlzRGlzYWJsZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvY3VzZWRFbGVtZW50ID0gZWxlbWVudC5lZGl0b3IuZm9jdXNlZEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFmb2N1c2VkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBzZXVkbyBjbGlwYm9hcmQgaGFuZGxpbmcgZm9yIGJyb3dzZXJzIG5vdCBhbGxvd2luZyByZWFsIGNsaXBib2FyZCBvcGVyYXRpb25zLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmN0cmxLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlLndoaWNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjc6IC8vIENcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWRFbGVtZW50LmNvcHkoY2xpcGJvYXJkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg4OiAvLyBYXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2VkRWxlbWVudC5jdXQoY2xpcGJvYXJkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg2OiAvLyBWXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2VkRWxlbWVudC5wYXN0ZShjbGlwYm9hcmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDQ2KSB7IC8vIERlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmRlbGV0ZShlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIChlLndoaWNoID09IDMyIHx8IGUud2hpY2ggPT0gMjcpKSB7IC8vIFNwYWNlIG9yIEVzY1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVsZW1lbnQuZmluZChcIi5sYXlvdXQtcGFuZWwtYWN0aW9uLXByb3BlcnRpZXNcIikuZmlyc3QoKS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWVsZW1lbnQuaGFzRWRpdG9yKSB7IC8vIFRoaXMgZWxlbWVudCBoYXMgYW4gZWRpdG9yIGRpYWxvZy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDEzKSB7IC8vIEVudGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVsZW1lbnQuZmluZChcIi5sYXlvdXQtcGFuZWwtYWN0aW9uLWVkaXRcIikuZmlyc3QoKS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFlbGVtZW50LmNoaWxkcmVuKSB7IC8vIFRoaXMgaXMgYSBjb250YWluZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiBlLmFsdEtleSAmJiBlLndoaWNoID09IDQwKSB7IC8vIEFsdCtEb3duXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jaGlsZHJlblswXS5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09IFwiQ29sdW1uXCIpIHsgLy8gVGhpcyBpcyBhIGNvbHVtbi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29ubmVjdEFkamFjZW50ID0gIWUuY3RybEtleTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS53aGljaCA9PSAzNykgeyAvLyBMZWZ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmFsdEtleSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZXhwYW5kTGVmdChjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5zaGlmdEtleSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29udHJhY3RSaWdodChjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUud2hpY2ggPT0gMzkpIHsgLy8gUmlnaHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuYWx0S2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb250cmFjdExlZnQoY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmV4cGFuZFJpZ2h0KGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhZWxlbWVudC5wYXJlbnQpIHsgLy8gVGhpcyBpcyBhIGNoaWxkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMzgpIHsgLy8gQWx0K1VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnQuc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGFyZW50LnR5cGUgPT0gXCJSb3dcIikgeyAvLyBQYXJlbnQgaXMgYSBob3Jpem9udGFsIGNvbnRhaW5lci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSAzNykgeyAvLyBMZWZ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Lm1vdmVGb2N1c1ByZXZDaGlsZChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMzkpIHsgLy8gUmlnaHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnQubW92ZUZvY3VzTmV4dENoaWxkKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDM3KSB7IC8vIEN0cmwrTGVmdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1vdmVVcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldEZvY3VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSAzOSkgeyAvLyBDdHJsK1JpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubW92ZURvd24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IC8vIFBhcmVudCBpcyBhIHZlcnRpY2FsIGNvbnRhaW5lci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSAzOCkgeyAvLyBVcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudC5tb3ZlRm9jdXNQcmV2Q2hpbGQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDQwKSB7IC8vIERvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnQubW92ZUZvY3VzTmV4dENoaWxkKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDM4KSB7IC8vIEN0cmwrVXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tb3ZlVXAoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gNDApIHsgLy8gQ3RybCtEb3duXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubW92ZURvd24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseSgpOyAvLyBFdmVudCBpcyBub3QgdHJpZ2dlcmVkIGJ5IEFuZ3VsYXIgZGlyZWN0aXZlIGJ1dCByYXcgZXZlbnQgaGFuZGxlciBvbiBlbGVtZW50LlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFDSzogV29ya2Fyb3VuZCBiZWNhdXNlIG9mIGhvdyBBbmd1bGFyIHRyZWF0cyB0aGUgRE9NIHdoZW4gZWxlbWVudHMgYXJlIHNoaWZ0ZWQgYXJvdW5kIC0gaW5wdXQgZm9jdXMgaXMgc29tZXRpbWVzIGxvc3QuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNldEZvY3VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWRpdG9yLmZvY3VzZWRFbGVtZW50LnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5zZXRJc0ZvY3VzZWRFdmVudEhhbmRsZXJzLnB1c2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkZWxlbWVudC5wYXJlbnQoKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZGVsZXRlID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5kZWxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkc2NvcGUuZWxlbWVudC5oYXNFZGl0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVkaXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJHJvb3QuZWRpdEVsZW1lbnQoJHNjb3BlLmVsZW1lbnQpLnRoZW4oZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuZGF0YSA9IGFyZ3MuZWxlbWVudC5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5hcHBseUVsZW1lbnRFZGl0b3JNb2RlbChhcmdzLmVsZW1lbnRFZGl0b3JNb2RlbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISEkc2NvcGUuZWxlbWVudC5zZXRIdG1sKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuc2V0SHRtbChhcmdzLmVsZW1lbnQuaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZUZvckNvbnRhaW5lcjogZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9ICRzY29wZS5lbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyRzY29wZS5pc1JlY2VpdmluZyA9IGZhbHNlOyAvLyBUcnVlIHdoZW4gY29udGFpbmVyIGlzIHJlY2VpdmluZyBhbiBleHRlcm5hbCBlbGVtZW50IHZpYSBkcmFnL2Ryb3AuXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmdldFNob3dDaGlsZHJlblBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHNjb3BlLmVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwICYmICEkc2NvcGUuZWxlbWVudC5nZXRJc0Ryb3BUYXJnZXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUuc29ydGFibGVPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IFwibW92ZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheTogMTUwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZWxlbWVudC5nZXRJc1NlYWxlZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogNSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9oYW5kbGU6IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIDwgMiA/IFwiLmltYWdpbmFyeS1jbGFzc1wiIDogZmFsc2UsIC8vIEZvciBzb21lIHJlYXNvbiBkb2Vzbid0IGdldCByZS1ldmFsdWF0ZWQgYWZ0ZXIgYWRkaW5nIG1vcmUgY2hpbGRyZW4uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNEcm9wVGFyZ2V0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWRpdG9yLmlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHRoZSBkcm9wIHRhcmdldCBwbGFjZWhvbGRlciBhcyBoaWdoIGFzIHRoZSBpdGVtIGJlaW5nIGRyYWdnZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5wbGFjZWhvbGRlci5oZWlnaHQodWkuaXRlbS5oZWlnaHQoKSAtIDQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIuY3NzKFwibWluLWhlaWdodFwiLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVkaXRvci5pc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRJc0Ryb3BUYXJnZXQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXI6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhdWkuc2VuZGVyICYmICEhdWkuc2VuZGVyWzBdLmlzVG9vbGJveCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXVpLnNlbmRlclswXS5kcm9wVGFyZ2V0VGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZW91dC5jYW5jZWwodWkuc2VuZGVyWzBdLmRyb3BUYXJnZXRUaW1lb3V0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkuc2VuZGVyWzBdLmRyb3BUYXJnZXRUaW1lb3V0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09IFwiUm93XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBhIHByZXZpb3VzIGRyb3AgdGFyZ2V0IGFuZCBpdCB3YXMgYSByb3csIHJvbGwgYmFjayBhbnkgcGVuZGluZyBjb2x1bW4gYWRkcyB0byBpdC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0Ryb3BUYXJnZXQgPSBlbGVtZW50LmVkaXRvci5kcm9wVGFyZ2V0RWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXByZXZpb3VzRHJvcFRhcmdldCAmJiBwcmV2aW91c0Ryb3BUYXJnZXQudHlwZSA9PSBcIlJvd1wiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzRHJvcFRhcmdldC5yb2xsYmFja0FkZENvbHVtbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNEcm9wVGFyZ2V0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5zZW5kZXJbMF0uZHJvcFRhcmdldFRpbWVvdXQgPSAkdGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT0gXCJSb3dcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY2VpdmVkQ29sdW1uID0gdWkuaXRlbS5zb3J0YWJsZS5tb2RlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNlaXZlZENvbHVtbldpZHRoID0gTWF0aC5mbG9vcigxMiAvIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCArIDEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkQ29sdW1uLndpZHRoID0gcmVjZWl2ZWRDb2x1bW5XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkQ29sdW1uLm9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmJlZ2luQWRkQ29sdW1uKHJlY2VpdmVkQ29sdW1uV2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSB0aGUgZHJvcCB0YXJnZXQgcGxhY2Vob2xkZXIgdGhlIGNvcnJlY3Qgd2lkdGggYW5kIGFzIGhpZ2ggYXMgdGhlIGhpZ2hlc3QgZXhpc3RpbmcgY29sdW1uIGluIHRoZSByb3cuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4SGVpZ2h0ID0gXy5tYXgoXygkZWxlbWVudC5maW5kKFwiPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1jb2x1bW46bm90KC51aS1zb3J0YWJsZS1wbGFjZWhvbGRlcilcIikpLm1hcChmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKGUpLmhlaWdodCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8PSAxMjsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnBsYWNlaG9sZGVyLnJlbW92ZUNsYXNzKFwiY29sLXhzLVwiICsgaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5wbGFjZWhvbGRlci5hZGRDbGFzcyhcImNvbC14cy1cIiArIHJlY2VpdmVkQ29sdW1uLndpZHRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXhIZWlnaHQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIuaGVpZ2h0KG1heEhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIuY3NzKFwibWluLWhlaWdodFwiLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnBsYWNlaG9sZGVyLmhlaWdodCgwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5wbGFjZWhvbGRlci5jc3MoXCJtaW4taGVpZ2h0XCIsIFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNEcm9wVGFyZ2V0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDE1MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmU6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhdWkuc2VuZGVyICYmICEhdWkuc2VuZGVyWzBdLmlzVG9vbGJveCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVjZWl2ZWRFbGVtZW50ID0gdWkuaXRlbS5zb3J0YWJsZS5tb2RlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcmVjZWl2ZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09IFwiUm93XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb21taXRBZGRDb2x1bW4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBpZGVhbGx5IGNhbGwgTGF5b3V0RWRpdG9yLkNvbnRhaW5lci5hZGRDaGlsZCgpIGluc3RlYWQsIGJ1dCBzaW5jZSB0aGlzIGhhbmRsZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIHJ1biAqYmVmb3JlKiB0aGUgdWktc29ydGFibGUgZGlyZWN0aXZlJ3MgaGFuZGxlciwgaWYgd2UgdHJ5IHRvIGFkZCB0aGUgY2hpbGQgdG8gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSB0aGF0IGhhbmRsZXIgd2lsbCBnZXQgYW4gZXhjZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIGRvIHRoZSBzYW1lLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBvZiB0aGlzLCB3ZSBuZWVkIHRvIGludm9rZSBcInNldFBhcmVudFwiIHNvIHRoYXQgc3BlY2lmaWMgY29udGFpbmVyIHR5cGVzIGNhbiBwZXJmb3JtIGVsZW1lbnQgc3BlZmljaWMgaW5pdGlhbGl6YXRpb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZEVsZW1lbnQuc2V0RWRpdG9yKGVsZW1lbnQuZWRpdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5zZXRQYXJlbnQoZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcmVjZWl2ZWRFbGVtZW50Lmhhc0VkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kcm9vdC5lZGl0RWxlbWVudChyZWNlaXZlZEVsZW1lbnQpLnRoZW4oZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzLmNhbmNlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRFbGVtZW50LmRhdGEgPSBhcmdzLmVsZW1lbnQuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5hcHBseUVsZW1lbnRFZGl0b3JNb2RlbChhcmdzLmVsZW1lbnRFZGl0b3JNb2RlbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcmVjZWl2ZWRFbGVtZW50LnNldEh0bWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRFbGVtZW50LnNldEh0bWwoYXJncy5lbGVtZW50Lmh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWFyZ3MuY2FuY2VsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5kZWxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZEVsZW1lbnQuc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyRzY29wZS5pc1JlY2VpdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRJc0Ryb3BUYXJnZXQoZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyRzY29wZS5pc1JlY2VpdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRJc0Ryb3BUYXJnZXQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcmVjZWl2ZWRFbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUuY2xpY2sgPSBmdW5jdGlvbiAoY2hpbGQsIGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZC5lZGl0b3IuaXNEcmFnZ2luZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5nZXRDbGFzc2VzID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXCJsYXlvdXQtZWxlbWVudFwiXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWNoaWxkLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1jb250YWluZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0SXNTZWFsZWQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1jb250YWluZXItc2VhbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1cIiArIGNoaWxkLnR5cGUudG9Mb3dlckNhc2UoKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFjaGlsZC5kcm9wVGFyZ2V0Q2xhc3MpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjaGlsZC5kcm9wVGFyZ2V0Q2xhc3MpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byBlaXRoZXIgdGhlIENvbHVtbiBkaXJlY3RpdmUgb3IgdGhlIENvbHVtbiBtb2RlbCBjbGFzcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT0gXCJSb3dcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJyb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLmNhbkFkZENvbHVtbigpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LXJvdy1mdWxsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC50eXBlID09IFwiQ29sdW1uXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwiY29sLXhzLVwiICsgY2hpbGQud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJjb2wteHMtb2Zmc2V0LVwiICsgY2hpbGQub2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PSBcIkNvbnRlbnRcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWNvbnRlbnQtXCIgKyBjaGlsZC5jb250ZW50VHlwZUNsYXNzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5nZXRJc0FjdGl2ZSgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC1hY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5nZXRJc0ZvY3VzZWQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtZm9jdXNlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldElzU2VsZWN0ZWQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtc2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5nZXRJc0Ryb3BUYXJnZXQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmlzVGVtcGxhdGVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC10ZW1wbGF0ZWRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dEVkaXRvclwiLCBbXCJlbnZpcm9ubWVudFwiLFxyXG4gICAgICAgIGZ1bmN0aW9uIChlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHt9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIiwgXCIkYXR0cnNcIiwgXCIkY29tcGlsZVwiLCBcImNsaXBib2FyZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50LCAkYXR0cnMsICRjb21waWxlLCBjbGlwYm9hcmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhJGF0dHJzLm1vZGVsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQgPSBldmFsKCRhdHRycy5tb2RlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSAnbW9kZWwnIGF0dHJpYnV0ZSBtdXN0IGV2YWx1YXRlIHRvIGEgTGF5b3V0RWRpdG9yLkVkaXRvciBvYmplY3QuXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmNsaWNrID0gZnVuY3Rpb24gKGNhbnZhcywgZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW52YXMuZWRpdG9yLmlzRHJhZ2dpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5nZXRDbGFzc2VzID0gZnVuY3Rpb24gKGNhbnZhcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtcImxheW91dC1lbGVtZW50XCIsIFwibGF5b3V0LWNvbnRhaW5lclwiLCBcImxheW91dC1jYW52YXNcIl07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhcy5nZXRJc0FjdGl2ZSgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhcy5nZXRJc0ZvY3VzZWQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LWZvY3VzZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FudmFzLmdldElzU2VsZWN0ZWQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LXNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhcy5nZXRJc0Ryb3BUYXJnZXQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LWRyb3B0YXJnZXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FudmFzLmlzVGVtcGxhdGVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtdGVtcGxhdGVkXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBbiB1bmZvcnR1bmF0ZSBzaWRlLWVmZmVjdCBvZiB0aGUgbmV4dCBoYWNrIG9uIGxpbmUgNTQgaXMgdGhhdCB0aGUgY3JlYXRlZCBlbGVtZW50cyBhcmVuJ3QgYWRkZWQgdG8gdGhlIERPTSB5ZXQsIHNvIHdlIGNhbid0IHVzZSBpdCB0byBnZXQgdG8gdGhlIHBhcmVudCBcIi5sYXlvdXQtZGVzaWdlclwiIGVsZW1lbnQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdvcmsgYXJvdW5kOiBhY2Nlc3MgdGhhdCBlbGVtZW50IGRpcmVjdGx5ICh3aGljaCBlZmVjdGl2ZWx5IHR1cm5zIG11bHRpcGxlIGxheW91dCBlZGl0b3JzIG9uIGEgc2luZ2xlIHBhZ2UgaW1wb3NzaWJsZSkuIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAvL3ZhciBsYXlvdXREZXNpZ25lckhvc3QgPSAkZWxlbWVudC5jbG9zZXN0KFwiLmxheW91dC1kZXNpZ25lclwiKS5kYXRhKFwibGF5b3V0LWRlc2lnbmVyLWhvc3RcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXlvdXREZXNpZ25lckhvc3QgPSAkKFwiLmxheW91dC1kZXNpZ25lclwiKS5kYXRhKFwibGF5b3V0LWRlc2lnbmVyLWhvc3RcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJHJvb3QubGF5b3V0RGVzaWduZXJIb3N0ID0gbGF5b3V0RGVzaWduZXJIb3N0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0RGVzaWduZXJIb3N0LmVsZW1lbnQub24oXCJyZXBsYWNlY2FudmFzXCIsIGZ1bmN0aW9uIChlLCBhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWRpdG9yID0gJHNjb3BlLmVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBhcmdzLmNhbnZhcy5kYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxJZDogYXJncy5jYW52YXMuaHRtbElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxDbGFzczogYXJncy5jYW52YXMuaHRtbENsYXNzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxTdHlsZTogYXJncy5jYW52YXMuaHRtbFN0eWxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGVtcGxhdGVkOiBhcmdzLmNhbnZhcy5pc1RlbXBsYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogYXJncy5jYW52YXMuY2hpbGRyZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFDSzogSW5zdGVhZCBvZiBzaW1wbHkgdXBkYXRpbmcgdGhlICRzY29wZS5lbGVtZW50IHdpdGggYSBuZXcgaW5zdGFuY2UsIHdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgZW50aXJlIG9yYy1sYXlvdXQtZWRpdG9yIG1hcmt1cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gb3JkZXIgZm9yIGFuZ3VsYXIgdG8gcmViaW5kIHN0YXJ0aW5nIHdpdGggdGhlIENhbnZhcyBlbGVtZW50LiBPdGhlcndpc2UsIGZvciBzb21lIHJlYXNvbiwgaXQgd2lsbCByZWJpbmQgc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QgY2hpbGQgb2YgQ2FudmFzLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWW91IGNhbiBzZWUgdGhpcyBoYXBwZW5pbmcgd2hlbiBzZXR0aW5nIGEgYnJlYWtwb2ludCBpbiBTY29wZUNvbmZpZ3VyYXRvciB3aGVyZSBjb250YWluZXJzIGFyZSBpbml0aWFsaXplZCB3aXRoIGRyYWcgJiBkcm9wOiBvbiBwYWdlIGxvYWQsIHRoZSBmaXJzdCBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBhIENhbnZhcyAoZ29vZCksIGJ1dCBhZnRlciBoYXZpbmcgc2VsZWN0ZWQgYW5vdGhlciB0ZW1wbGF0ZSwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgKHR5cGljYWxseSkgYSBHcmlkIChiYWQpLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2ltcGx5IHJlY29tcGlsaW5nIHRoZSBvcmMtbGF5b3V0LWVkaXRvciBkaXJlY3RpdmUgd2lsbCBjYXVzZSB0aGUgZW50aXJlIHRoaW5nIHRvIGJlIGdlbmVyYXRlZCwgd2hpY2ggd29ya3MganVzdCBmaW5lIGFzIHdlbGwgKGV2ZW4gdGhvdWdoIG5vdCBpcyBuaWNlIGFzIHNpbXBseSBsZXZlcmFnaW5nIG1vZGVsIGJpbmRpbmcpLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0RGVzaWduZXJIb3N0LmVkaXRvciA9IHdpbmRvdy5sYXlvdXRFZGl0b3IgPSBuZXcgTGF5b3V0RWRpdG9yLkVkaXRvcihlZGl0b3IuY29uZmlnLCBjYW52YXNEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IFwiPG9yYy1sYXlvdXQtZWRpdG9yXCIgKyBcIiBtb2RlbD0nd2luZG93LmxheW91dEVkaXRvcicgLz5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gJGNvbXBpbGUodGVtcGxhdGUpKCRzY29wZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiLmxheW91dC1lZGl0b3ItaG9sZGVyXCIpLmh0bWwoaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRyb290LmVkaXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBob3N0ID0gJHNjb3BlLiRyb290LmxheW91dERlc2lnbmVySG9zdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBob3N0LmVkaXRFbGVtZW50KGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRyb290LmFkZEVsZW1lbnQgPSBmdW5jdGlvbiAoY29udGVudFR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBob3N0ID0gJHNjb3BlLiRyb290LmxheW91dERlc2lnbmVySG9zdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBob3N0LmFkZEVsZW1lbnQoY29udGVudFR5cGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkub24oXCJjdXQgY29weSBwYXN0ZVwiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBzZXVkbyBjbGlwYm9hcmQgd2FzIGFscmVhZHkgaW52b2tlZCAod2hpY2ggaGFwcGVucyBvbiB0aGUgZmlyc3QgY2xpcGJvYXJkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcGVyYXRpb24gYWZ0ZXIgcGFnZSBsb2FkIGV2ZW4gaWYgbmF0aXZlIGNsaXBib2FyZCBzdXBwb3J0IGV4aXN0cykgdGhlbiBzaXQgdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25lIG9wZXJhdGlvbiBvdXQsIGJ1dCBtYWtlIHN1cmUgd2hhdGV2ZXIgaXMgb24gdGhlIHBzZXVkbyBjbGlwYm9hcmQgZ2V0cyBtaWdyYXRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIG5hdGl2ZSBjbGlwYm9hcmQgZm9yIHN1YnNlcXVlbnQgb3BlcmF0aW9ucy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGlwYm9hcmQud2FzSW52b2tlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuc2V0RGF0YShcInRleHQvcGxhaW5cIiwgY2xpcGJvYXJkLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKFwidGV4dC9qc29uXCIsIGNsaXBib2FyZC5nZXREYXRhKFwidGV4dC9qc29uXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9jdXNlZEVsZW1lbnQgPSAkc2NvcGUuZWxlbWVudC5mb2N1c2VkRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFmb2N1c2VkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZS50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNvcHlcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZEVsZW1lbnQuY29weShlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjdXRcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZEVsZW1lbnQuY3V0KGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInBhc3RlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWRFbGVtZW50LnBhc3RlKGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFDSzogV29ya2Fyb3VuZCBiZWNhdXNlIG9mIGhvdyBBbmd1bGFyIHRyZWF0cyB0aGUgRE9NIHdoZW4gZWxlbWVudHMgYXJlIHNoaWZ0ZWQgYXJvdW5kIC0gaW5wdXQgZm9jdXMgaXMgc29tZXRpbWVzIGxvc3QuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghISRzY29wZS5lbGVtZW50LmZvY3VzZWRFbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5mb2N1c2VkRWxlbWVudC5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOYXRpdmUgY2xpcGJvYXJkIHN1cHBvcnQgb2J2aW91c2x5IGV4aXN0cywgc28gZGlzYWJsZSB0aGUgcGV1ZG8gY2xpcGJvYXJkIGZyb20gbm93IG9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcGJvYXJkLmRpc2FibGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBlbnZpcm9ubWVudC50ZW1wbGF0ZVVybChcIkVkaXRvclwiKSxcclxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBsaW5rOiBmdW5jdGlvbiAoc2NvcGUsIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBObyBjbGlja3Mgc2hvdWxkIHByb3BhZ2F0ZSBmcm9tIHRoZSBUaW55TUNFIHRvb2xiYXJzLlxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZmluZChcIi5sYXlvdXQtdG9vbGJhci1jb250YWluZXJcIikuY2xpY2soZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBVbmZvY3VzIGFuZCB1bnNlbGVjdCBldmVyeXRoaW5nIG9uIGNsaWNrIG91dHNpZGUgb2YgY2FudmFzLlxyXG4gICAgICAgICAgICAgICAgICAgICQod2luZG93KS5jbGljayhmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZWxlbWVudC5hY3RpdmVFbGVtZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuZm9jdXNlZEVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0Q2FudmFzXCIsIFtcInNjb3BlQ29uZmlndXJhdG9yXCIsIFwiZW52aXJvbm1lbnRcIixcclxuICAgICAgICBmdW5jdGlvbiAoc2NvcGVDb25maWd1cmF0b3IsIGVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXHJcbiAgICAgICAgICAgICAgICBzY29wZTogeyBlbGVtZW50OiBcIj1cIiB9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIiwgXCIkYXR0cnNcIixcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCwgJGF0dHJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckVsZW1lbnQoJHNjb3BlLCAkZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckNvbnRhaW5lcigkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNvcnRhYmxlT3B0aW9uc1tcImF4aXNcIl0gPSBcInlcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiQ2FudmFzXCIpLFxyXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRDaGlsZFwiLCBbXCIkY29tcGlsZVwiLFxyXG4gICAgICAgIGZ1bmN0aW9uICgkY29tcGlsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgZWxlbWVudDogXCI9XCIgfSxcclxuICAgICAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uIChzY29wZSwgZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IFwiPG9yYy1sYXlvdXQtXCIgKyBzY29wZS5lbGVtZW50LnR5cGUudG9Mb3dlckNhc2UoKSArIFwiIGVsZW1lbnQ9J2VsZW1lbnQnIC8+XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSAkY29tcGlsZSh0ZW1wbGF0ZSkoc2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkucmVwbGFjZVdpdGgoaHRtbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dENvbHVtblwiLCBbXCIkY29tcGlsZVwiLCBcInNjb3BlQ29uZmlndXJhdG9yXCIsIFwiZW52aXJvbm1lbnRcIixcclxuICAgICAgICBmdW5jdGlvbiAoJGNvbXBpbGUsIHNjb3BlQ29uZmlndXJhdG9yLCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgZWxlbWVudDogXCI9XCIgfSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yRWxlbWVudCgkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yQ29udGFpbmVyKCRzY29wZSwgJGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuc29ydGFibGVPcHRpb25zW1wiYXhpc1wiXSA9IFwieVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogZW52aXJvbm1lbnQudGVtcGxhdGVVcmwoXCJDb2x1bW5cIiksXHJcbiAgICAgICAgICAgICAgICByZXBsYWNlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbGluazogZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50LCBhdHRycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZmluZChcIi5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXJcIikuZHJhZ2dhYmxlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXhpczogXCJ4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlcjogXCJjbG9uZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXZlcnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZWxlbWVudC5lZGl0b3IuaXNSZXNpemluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZHJhZzogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uRWxlbWVudCA9IGVsZW1lbnQucGFyZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uU2l6ZSA9IGNvbHVtbkVsZW1lbnQud2lkdGgoKSAvIHNjb3BlLmVsZW1lbnQud2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29ubmVjdEFkamFjZW50ID0gIWUuY3RybEtleTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKGUudGFyZ2V0KS5oYXNDbGFzcyhcImxheW91dC1jb2x1bW4tcmVzaXplLWJhci1sZWZ0XCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhID0gdWkub2Zmc2V0LmxlZnQgLSBjb2x1bW5FbGVtZW50Lm9mZnNldCgpLmxlZnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhIDwgLWNvbHVtblNpemUgJiYgc2NvcGUuZWxlbWVudC5jYW5FeHBhbmRMZWZ0KGNvbm5lY3RBZGphY2VudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuZXhwYW5kTGVmdChjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEgPiBjb2x1bW5TaXplICYmIHNjb3BlLmVsZW1lbnQuY2FuQ29udHJhY3RMZWZ0KGNvbm5lY3RBZGphY2VudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuY29udHJhY3RMZWZ0KGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCQoZS50YXJnZXQpLmhhc0NsYXNzKFwibGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyLXJpZ2h0XCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhID0gdWkub2Zmc2V0LmxlZnQgLSBjb2x1bW5FbGVtZW50LndpZHRoKCkgLSBjb2x1bW5FbGVtZW50Lm9mZnNldCgpLmxlZnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhID4gY29sdW1uU2l6ZSAmJiBzY29wZS5lbGVtZW50LmNhbkV4cGFuZFJpZ2h0KGNvbm5lY3RBZGphY2VudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuZXhwYW5kUmlnaHQoY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhIDwgLWNvbHVtblNpemUgJiYgc2NvcGUuZWxlbWVudC5jYW5Db250cmFjdFJpZ2h0KGNvbm5lY3RBZGphY2VudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuY29udHJhY3RSaWdodChjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9wOiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuZWRpdG9yLmlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dENvbnRlbnRcIiwgW1wiJHNjZVwiLCBcInNjb3BlQ29uZmlndXJhdG9yXCIsIFwiZW52aXJvbm1lbnRcIixcclxuICAgICAgICBmdW5jdGlvbiAoJHNjZSwgc2NvcGVDb25maWd1cmF0b3IsIGVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXHJcbiAgICAgICAgICAgICAgICBzY29wZTogeyBlbGVtZW50OiBcIj1cIiB9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIixcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNvbmZpZ3VyYXRvci5jb25maWd1cmVGb3JFbGVtZW50KCRzY29wZSwgJGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3ZlcndyaXRlIHRoZSBzZXRIdG1sIGZ1bmN0aW9uIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGUgJHNjZSBzZXJ2aWNlIHRvIHRydXN0IHRoZSBodG1sIChhbmQgbm90IGhhdmUgdGhlIGh0bWwgYmluZGluZyBzdHJpcCBjZXJ0YWluIHRhZ3MpLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5zZXRIdG1sID0gZnVuY3Rpb24gKGh0bWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50Lmh0bWwgPSBodG1sO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuaHRtbFVuc2FmZSA9ICRzY2UudHJ1c3RBc0h0bWwoaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5zZXRIdG1sKCRzY29wZS5lbGVtZW50Lmh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogZW52aXJvbm1lbnQudGVtcGxhdGVVcmwoXCJDb250ZW50XCIpLFxyXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRHcmlkXCIsIFtcIiRjb21waWxlXCIsIFwic2NvcGVDb25maWd1cmF0b3JcIiwgXCJlbnZpcm9ubWVudFwiLFxyXG4gICAgICAgIGZ1bmN0aW9uICgkY29tcGlsZSwgc2NvcGVDb25maWd1cmF0b3IsIGVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXHJcbiAgICAgICAgICAgICAgICBzY29wZTogeyBlbGVtZW50OiBcIj1cIiB9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIixcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNvbmZpZ3VyYXRvci5jb25maWd1cmVGb3JFbGVtZW50KCRzY29wZSwgJGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNvbmZpZ3VyYXRvci5jb25maWd1cmVGb3JDb250YWluZXIoJHNjb3BlLCAkZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5zb3J0YWJsZU9wdGlvbnNbXCJheGlzXCJdID0gXCJ5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBlbnZpcm9ubWVudC50ZW1wbGF0ZVVybChcIkdyaWRcIiksXHJcbiAgICAgICAgICAgICAgICByZXBsYWNlOiB0cnVlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dFJvd1wiLCBbXCIkY29tcGlsZVwiLCBcInNjb3BlQ29uZmlndXJhdG9yXCIsIFwiZW52aXJvbm1lbnRcIixcclxuICAgICAgICBmdW5jdGlvbiAoJGNvbXBpbGUsIHNjb3BlQ29uZmlndXJhdG9yLCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgZWxlbWVudDogXCI9XCIgfSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yRWxlbWVudCgkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yQ29udGFpbmVyKCRzY29wZSwgJGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuc29ydGFibGVPcHRpb25zW1wiYXhpc1wiXSA9IFwieFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuc29ydGFibGVPcHRpb25zW1widWktZmxvYXRpbmdcIl0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogZW52aXJvbm1lbnQudGVtcGxhdGVVcmwoXCJSb3dcIiksXHJcbiAgICAgICAgICAgICAgICByZXBsYWNlOiB0cnVlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dFBvcHVwXCIsIFtcclxuICAgICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJBXCIsXHJcbiAgICAgICAgICAgICAgICBsaW5rOiBmdW5jdGlvbiAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvcHVwID0gJChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdHJpZ2dlciA9IHBvcHVwLmNsb3Nlc3QoXCIubGF5b3V0LXBvcHVwLXRyaWdnZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudEVsZW1lbnQgPSBwb3B1cC5jbG9zZXN0KFwiLmxheW91dC1lbGVtZW50XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIuY2xpY2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3B1cC50b2dnbGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcHVwLmlzKFwiOnZpc2libGVcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLnBvc2l0aW9uKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteTogYXR0cnMub3JjTGF5b3V0UG9wdXBNeSB8fCBcImxlZnQgdG9wXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQ6IGF0dHJzLm9yY0xheW91dFBvcHVwQXQgfHwgXCJsZWZ0IGJvdHRvbSs0cHhcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZjogdHJpZ2dlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1cC5maW5kKFwiaW5wdXRcIikuZmlyc3QoKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wdXAuY2xpY2soZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LmNsaWNrKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBwb3B1cC5rZXlkb3duKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDI3KSAvLyBFc2NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBwb3B1cC5vbihcImN1dCBjb3B5IHBhc3RlXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsbG93IGNsaXBib2FyZCBvcGVyYXRpb25zIGluIHBvcHVwIHdpdGhvdXQgaW52b2tpbmcgY2xpcGJvYXJkIGV2ZW50IGhhbmRsZXJzIG9uIHBhcmVudCBlbGVtZW50LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRUb29sYm94XCIsIFtcIiRjb21waWxlXCIsIFwiZW52aXJvbm1lbnRcIixcclxuICAgICAgICBmdW5jdGlvbiAoJGNvbXBpbGUsIGVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUucmVzZXRFbGVtZW50cyA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZ3JpZEVsZW1lbnRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5HcmlkLmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMDBhXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJHcmlkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJFbXB0eSBncmlkLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUucm93RWxlbWVudHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjBjOVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiUm93ICgxIGNvbHVtbilcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIlJvdyB3aXRoIDEgY29sdW1uLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcygxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5Sb3cuZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIlJvdyAoMiBjb2x1bW5zKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiUm93IHdpdGggMiBjb2x1bW5zLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcygyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5Sb3cuZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIlJvdyAoMyBjb2x1bW5zKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiUm93IHdpdGggMyBjb2x1bW5zLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcygzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5Sb3cuZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIlJvdyAoNCBjb2x1bW5zKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiUm93IHdpdGggNCBjb2x1bW5zLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcyg0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5Sb3cuZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIlJvdyAoNiBjb2x1bW5zKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiUm93IHdpdGggNiBjb2x1bW5zLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcyg2KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5Sb3cuZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIlJvdyAoMTIgY29sdW1ucylcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIlJvdyB3aXRoIDEyIGNvbHVtbnMuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBMYXlvdXRFZGl0b3IuQ29sdW1uLnRpbWVzKDEyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBMYXlvdXRFZGl0b3IuUm93LmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMGM5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKGVtcHR5KVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiRW1wdHkgcm93LlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuY29sdW1uRWxlbWVudHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLkNvbHVtbi5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjBkYlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiQ29sdW1uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJFbXB0eSBjb2x1bW4uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5jYW52YXNFbGVtZW50cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuQ2FudmFzLmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMDQ0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJDYW52YXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIkVtcHR5IGNhbnZhcy5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmNvbnRlbnRFbGVtZW50Q2F0ZWdvcmllcyA9IF8oJHNjb3BlLmVsZW1lbnQuY29uZmlnLmNhdGVnb3JpZXMpLm1hcChmdW5jdGlvbiAoY2F0ZWdvcnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjYXRlZ29yeS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50czogXyhjYXRlZ29yeS5jb250ZW50VHlwZXMpLm1hcChmdW5jdGlvbiAoY29udGVudFR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gY29udGVudFR5cGUudHlwZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmYWN0b3J5ID0gTGF5b3V0RWRpdG9yLmZhY3Rvcmllc1t0eXBlXSB8fCBMYXlvdXRFZGl0b3IuZmFjdG9yaWVzW1wiQ29udGVudFwiXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGVtcGxhdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogY29udGVudFR5cGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGVMYWJlbDogY29udGVudFR5cGUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGVDbGFzczogY29udGVudFR5cGUudHlwZUNsYXNzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRWRpdG9yOiBjb250ZW50VHlwZS5oYXNFZGl0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbDogY29udGVudFR5cGUuaHRtbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZmFjdG9yeShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudG9vbGJveEljb24gPSBjb250ZW50VHlwZS5pY29uIHx8IFwiXFx1ZjFjOVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50b29sYm94TGFiZWwgPSBjb250ZW50VHlwZS5sYWJlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudG9vbGJveERlc2NyaXB0aW9uID0gY29udGVudFR5cGUuZGVzY3JpcHRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnJlc2V0RWxlbWVudHMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5nZXRTb3J0YWJsZU9wdGlvbnMgPSBmdW5jdGlvbiAodHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVkaXRvcklkID0gJGVsZW1lbnQuY2xvc2VzdChcIi5sYXlvdXQtZWRpdG9yXCIpLmF0dHIoXCJpZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRDbGFzc2VzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYWNlaG9sZGVyQ2xhc3NlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbG9hdGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJHcmlkXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENsYXNzZXMgPSBbXCIubGF5b3V0LWNhbnZhc1wiLCBcIi5sYXlvdXQtY29sdW1uXCIsIFwiLmxheW91dC1jb21tb24taG9sZGVyXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckNsYXNzZXMgPSBcImxheW91dC1lbGVtZW50IGxheW91dC1jb250YWluZXIgbGF5b3V0LWdyaWQgdWktc29ydGFibGUtcGxhY2Vob2xkZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlJvd1wiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDbGFzc2VzID0gW1wiLmxheW91dC1ncmlkXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckNsYXNzZXMgPSBcImxheW91dC1lbGVtZW50IGxheW91dC1jb250YWluZXIgbGF5b3V0LXJvdyByb3cgdWktc29ydGFibGUtcGxhY2Vob2xkZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkNvbHVtblwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDbGFzc2VzID0gW1wiLmxheW91dC1yb3c6bm90KC5sYXlvdXQtcm93LWZ1bGwpXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckNsYXNzZXMgPSBcImxheW91dC1lbGVtZW50IGxheW91dC1jb250YWluZXIgbGF5b3V0LWNvbHVtbiB1aS1zb3J0YWJsZS1wbGFjZWhvbGRlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdGluZyA9IHRydWU7IC8vIFRvIGVuc3VyZSBhIHNtb290aCBob3Jpem9udGFsLWxpc3QgcmVvcmRlcmluZy4gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXItdWkvdWktc29ydGFibGUjZmxvYXRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkNvbnRlbnRcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3NlcyA9IFtcIi5sYXlvdXQtY2FudmFzXCIsIFwiLmxheW91dC1jb2x1bW5cIiwgXCIubGF5b3V0LWNvbW1vbi1ob2xkZXJcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyQ2xhc3NlcyA9IFwibGF5b3V0LWVsZW1lbnQgbGF5b3V0LWNvbnRlbnQgdWktc29ydGFibGUtcGxhY2Vob2xkZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkNhbnZhc1wiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDbGFzc2VzID0gW1wiLmxheW91dC1jYW52YXNcIiwgXCIubGF5b3V0LWNvbHVtblwiLCBcIi5sYXlvdXQtY29tbW9uLWhvbGRlclwiXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJDbGFzc2VzID0gXCJsYXlvdXQtZWxlbWVudCBsYXlvdXQtY29udGFpbmVyIGxheW91dC1ncmlkIHVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBcIm1vdmVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0V2l0aDogXyhwYXJlbnRDbGFzc2VzKS5tYXAoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIFwiI1wiICsgZWRpdG9ySWQgKyBcIiBcIiArIGUgKyBcIjpub3QoLmxheW91dC1jb250YWluZXItc2VhbGVkKSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlblwiOyB9KS5qb2luKFwiLCBcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyQ2xhc3NlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInVpLWZsb2F0aW5nXCI6IGZsb2F0aW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlcjogXCJjbG9uZVwiLCAvLyBXZSBjbG9uZSB0aGUgZWxlbWVudCBhbmQgd2UgYXBwZW5kIGl0IHRvIHRoZSBib2R5IGJlY2F1c2UgdGhlIGNvbnRhaW5lciBvdmVyZmxvdyBpcyBzZXQgdG8gYXV0byAoc2VlOiBBc3NldHNcXExlc3NcXExheW91dEVkaXRvclxcVG9vbGJveC5sZXNzKSBhbmQgb3RoZXJ3aXNlIGl0IGNvdWxkIG5vdCBiZSBtb3ZlZCB3aXRoIGRyYWcmZHJvcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvOiBcImJvZHlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC5pc1Rvb2xib3ggPSB0cnVlOyAvLyBXaWxsIGluZGljYXRlIHRvIGNvbm5lY3RlZCBzb3J0YWJsZXMgdGhhdCBkcm9wcGVkIGl0ZW1zIHdlcmUgc2VudCBmcm9tIHRvb2xib3guXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnJlc2V0RWxlbWVudHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyOiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5jYW52YXMuc2V0SXNEcm9wVGFyZ2V0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXlvdXRJc0NvbGxhcHNlZENvb2tpZU5hbWUgPSBcImxheW91dFRvb2xib3hDYXRlZ29yeV9MYXlvdXRfSXNDb2xsYXBzZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxheW91dElzQ29sbGFwc2VkID0gJC5jb29raWUobGF5b3V0SXNDb2xsYXBzZWRDb29raWVOYW1lKSA9PT0gXCJ0cnVlXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUudG9nZ2xlTGF5b3V0SXNDb2xsYXBzZWQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxheW91dElzQ29sbGFwc2VkID0gISRzY29wZS5sYXlvdXRJc0NvbGxhcHNlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuY29va2llKGxheW91dElzQ29sbGFwc2VkQ29va2llTmFtZSwgJHNjb3BlLmxheW91dElzQ29sbGFwc2VkLCB7IGV4cGlyZXM6IDM2NSB9KTsgLy8gUmVtZW1iZXIgY29sbGFwc2VkIHN0YXRlIGZvciBhIHllYXIuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogZW52aXJvbm1lbnQudGVtcGxhdGVVcmwoXCJUb29sYm94XCIpLFxyXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uIChzY29wZSwgZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0b29sYm94ID0gZWxlbWVudC5maW5kKFwiLmxheW91dC10b29sYm94XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICQod2luZG93KS5vbihcInJlc2l6ZSBzY3JvbGxcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGVsZW1lbnQucGFyZW50KCkuZmluZChcIi5sYXlvdXQtY2FudmFzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2FudmFzIGlzIHRhbGxlciB0aGFuIHRoZSB0b29sYm94LCBtYWtlIHRoZSB0b29sYm94IHN0aWNreS1wb3NpdGlvbmVkIHdpdGhpbiB0aGUgZWRpdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGhlbHAgdGhlIHVzZXIgYXZvaWQgZXhjZXNzaXZlIHZlcnRpY2FsIHNjcm9sbGluZy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhc0lzVGFsbGVyID0gISFjYW52YXMgJiYgY2FudmFzLmhlaWdodCgpID4gdG9vbGJveC5oZWlnaHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpbmRvd1BvcyA9ICQod2luZG93KS5zY3JvbGxUb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhc0lzVGFsbGVyICYmIHdpbmRvd1BvcyA+IGVsZW1lbnQub2Zmc2V0KCkudG9wICsgZWxlbWVudC5oZWlnaHQoKSAtIHRvb2xib3guaGVpZ2h0KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3guYWRkQ2xhc3MoXCJzdGlja3ktYm90dG9tXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveC5yZW1vdmVDbGFzcyhcInN0aWNreS10b3BcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FudmFzSXNUYWxsZXIgJiYgd2luZG93UG9zID4gZWxlbWVudC5vZmZzZXQoKS50b3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3guYWRkQ2xhc3MoXCJzdGlja3ktdG9wXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveC5yZW1vdmVDbGFzcyhcInN0aWNreS1ib3R0b21cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94LnJlbW92ZUNsYXNzKFwic3RpY2t5LXRvcFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3gucmVtb3ZlQ2xhc3MoXCJzdGlja3ktYm90dG9tXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dFRvb2xib3hHcm91cFwiLCBbXCIkY29tcGlsZVwiLCBcImVudmlyb25tZW50XCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKCRjb21waWxlLCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgY2F0ZWdvcnk6IFwiPVwiIH0sXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0NvbGxhcHNlZENvb2tpZU5hbWUgPSBcImxheW91dFRvb2xib3hDYXRlZ29yeV9cIiArICRzY29wZS5jYXRlZ29yeS5uYW1lICsgXCJfSXNDb2xsYXBzZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmlzQ29sbGFwc2VkID0gJC5jb29raWUoaXNDb2xsYXBzZWRDb29raWVOYW1lKSA9PT0gXCJ0cnVlXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS50b2dnbGVJc0NvbGxhcHNlZCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuaXNDb2xsYXBzZWQgPSAhJHNjb3BlLmlzQ29sbGFwc2VkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5jb29raWUoaXNDb2xsYXBzZWRDb29raWVOYW1lLCAkc2NvcGUuaXNDb2xsYXBzZWQsIHsgZXhwaXJlczogMzY1IH0pOyAvLyBSZW1lbWJlciBjb2xsYXBzZWQgc3RhdGUgZm9yIGEgeWVhci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBlbnZpcm9ubWVudC50ZW1wbGF0ZVVybChcIlRvb2xib3hHcm91cFwiKSxcclxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxheW91dEVkaXRvci5qcyIsIk1vZHVsZS5qcyIsIkNsaXBib2FyZC5qcyIsIlNjb3BlQ29uZmlndXJhdG9yLmpzIiwiRWRpdG9yLmpzIiwiQ2FudmFzLmpzIiwiQ2hpbGQuanMiLCJDb2x1bW4uanMiLCJDb250ZW50LmpzIiwiR3JpZC5qcyIsIlJvdy5qcyIsIlBvcHVwLmpzIiwiVG9vbGJveC5qcyIsIlRvb2xib3hHcm91cC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUNMQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2xWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDMUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJMYXlvdXRFZGl0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImFuZ3VsYXIubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIsIFtcIm5nU2FuaXRpemVcIiwgXCJuZ1Jlc291cmNlXCIsIFwidWkuc29ydGFibGVcIl0pOyIsInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbihMYXlvdXRFZGl0b3IpIHtcclxuXHJcbiAgICB2YXIgQ2xpcGJvYXJkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLl9jbGlwYm9hcmREYXRhID0ge307XHJcbiAgICAgICAgdGhpcy5faXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3dhc0ludm9rZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXREYXRhID0gZnVuY3Rpb24oY29udGVudFR5cGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgc2VsZi5fY2xpcGJvYXJkRGF0YVtjb250ZW50VHlwZV0gPSBkYXRhO1xyXG4gICAgICAgICAgICBzZWxmLl93YXNJbnZva2VkID0gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YSA9IGZ1bmN0aW9uIChjb250ZW50VHlwZSkge1xyXG4gICAgICAgICAgICBzZWxmLl93YXNJbnZva2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NsaXBib2FyZERhdGFbY29udGVudFR5cGVdO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHNlbGYuX2lzRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBzZWxmLl93YXNJbnZva2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNlbGYuX2NsaXBib2FyZERhdGEgPSB7fTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2lzRGlzYWJsZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2FzSW52b2tlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3dhc0ludm9rZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIExheW91dEVkaXRvci5DbGlwYm9hcmQgPSBuZXcgQ2xpcGJvYXJkKCk7XHJcblxyXG4gICAgYW5ndWxhclxyXG4gICAgICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgICAgICAuZmFjdG9yeShcImNsaXBib2FyZFwiLCBbXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXREYXRhOiBMYXlvdXRFZGl0b3IuQ2xpcGJvYXJkLnNldERhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0RGF0YTogTGF5b3V0RWRpdG9yLkNsaXBib2FyZC5nZXREYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGU6IExheW91dEVkaXRvci5DbGlwYm9hcmQuZGlzYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBMYXlvdXRFZGl0b3IuQ2xpcGJvYXJkLmlzRGlzYWJsZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgd2FzSW52b2tlZDogTGF5b3V0RWRpdG9yLkNsaXBib2FyZC53YXNJbnZva2VkXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXSk7XHJcbn0pKExheW91dEVkaXRvciB8fCAoTGF5b3V0RWRpdG9yID0ge30pKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZmFjdG9yeShcInNjb3BlQ29uZmlndXJhdG9yXCIsIFtcIiR0aW1lb3V0XCIsIFwiY2xpcGJvYXJkXCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKCR0aW1lb3V0LCBjbGlwYm9hcmQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmVGb3JFbGVtZW50OiBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgJGVsZW1lbnQuZmluZChcIi5sYXlvdXQtcGFuZWxcIikuY2xpY2soZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJGVsZW1lbnQucGFyZW50KCkua2V5ZG93bihmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzZXRGb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9ICRzY29wZS5lbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5lZGl0b3IuaXNEcmFnZ2luZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5hdGl2ZSBjbGlwYm9hcmQgc3VwcG9ydCBleGlzdHMsIHRoZSBwc2V1ZG8tY2xpcGJvYXJkIHdpbGwgaGF2ZSBiZWVuIGRpc2FibGVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsaXBib2FyZC5pc0Rpc2FibGVkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb2N1c2VkRWxlbWVudCA9IGVsZW1lbnQuZWRpdG9yLmZvY3VzZWRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhZm9jdXNlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQc2V1ZG8gY2xpcGJvYXJkIGhhbmRsaW5nIGZvciBicm93c2VycyBub3QgYWxsb3dpbmcgcmVhbCBjbGlwYm9hcmQgb3BlcmF0aW9ucy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jdHJsS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZS53aGljaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY3OiAvLyBDXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2VkRWxlbWVudC5jb3B5KGNsaXBib2FyZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4ODogLy8gWFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZEVsZW1lbnQuY3V0KGNsaXBib2FyZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4NjogLy8gVlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZEVsZW1lbnQucGFzdGUoY2xpcGJvYXJkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSA0NikgeyAvLyBEZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5kZWxldGUoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiAoZS53aGljaCA9PSAzMiB8fCBlLndoaWNoID09IDI3KSkgeyAvLyBTcGFjZSBvciBFc2NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlbGVtZW50LmZpbmQoXCIubGF5b3V0LXBhbmVsLWFjdGlvbi1wcm9wZXJ0aWVzXCIpLmZpcnN0KCkuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFlbGVtZW50Lmhhc0VkaXRvcikgeyAvLyBUaGlzIGVsZW1lbnQgaGFzIGFuIGVkaXRvciBkaWFsb2cuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSAxMykgeyAvLyBFbnRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlbGVtZW50LmZpbmQoXCIubGF5b3V0LXBhbmVsLWFjdGlvbi1lZGl0XCIpLmZpcnN0KCkuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhZWxlbWVudC5jaGlsZHJlbikgeyAvLyBUaGlzIGlzIGEgY29udGFpbmVyLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgZS5hbHRLZXkgJiYgZS53aGljaCA9PSA0MCkgeyAvLyBBbHQrRG93blxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRyZW5bMF0uc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSBcIkNvbHVtblwiKSB7IC8vIFRoaXMgaXMgYSBjb2x1bW4uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbm5lY3RBZGphY2VudCA9ICFlLmN0cmxLZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUud2hpY2ggPT0gMzcpIHsgLy8gTGVmdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5hbHRLZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmV4cGFuZExlZnQoY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNvbnRyYWN0UmlnaHQoY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLndoaWNoID09IDM5KSB7IC8vIFJpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmFsdEtleSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29udHJhY3RMZWZ0KGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnNoaWZ0S2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5leHBhbmRSaWdodChjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWVsZW1lbnQucGFyZW50KSB7IC8vIFRoaXMgaXMgYSBjaGlsZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmFsdEtleSAmJiBlLndoaWNoID09IDM4KSB7IC8vIEFsdCtVcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucGFyZW50LnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnBhcmVudC50eXBlID09IFwiUm93XCIpIHsgLy8gUGFyZW50IGlzIGEgaG9yaXpvbnRhbCBjb250YWluZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMzcpIHsgLy8gTGVmdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudC5tb3ZlRm9jdXNQcmV2Q2hpbGQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDM5KSB7IC8vIFJpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Lm1vdmVGb2N1c05leHRDaGlsZChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSAzNykgeyAvLyBDdHJsK0xlZnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tb3ZlVXAoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMzkpIHsgLy8gQ3RybCtSaWdodFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1vdmVEb3duKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAvLyBQYXJlbnQgaXMgYSB2ZXJ0aWNhbCBjb250YWluZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMzgpIHsgLy8gVXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnQubW92ZUZvY3VzUHJldkNoaWxkKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSA0MCkgeyAvLyBEb3duXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Lm1vdmVGb2N1c05leHRDaGlsZChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSAzOCkgeyAvLyBDdHJsK1VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubW92ZVVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Rm9jdXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDQwKSB7IC8vIEN0cmwrRG93blxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1vdmVEb3duKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoKTsgLy8gRXZlbnQgaXMgbm90IHRyaWdnZXJlZCBieSBBbmd1bGFyIGRpcmVjdGl2ZSBidXQgcmF3IGV2ZW50IGhhbmRsZXIgb24gZWxlbWVudC5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhBQ0s6IFdvcmthcm91bmQgYmVjYXVzZSBvZiBob3cgQW5ndWxhciB0cmVhdHMgdGhlIERPTSB3aGVuIGVsZW1lbnRzIGFyZSBzaGlmdGVkIGFyb3VuZCAtIGlucHV0IGZvY3VzIGlzIHNvbWV0aW1lcyBsb3N0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzZXRGb2N1cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVkaXRvci5mb2N1c2VkRWxlbWVudC5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuc2V0SXNGb2N1c2VkRXZlbnRIYW5kbGVycy5wdXNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJGVsZW1lbnQucGFyZW50KCkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmRlbGV0ZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZGVsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoJHNjb3BlLmVsZW1lbnQuaGFzRWRpdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lZGl0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRyb290LmVkaXRFbGVtZW50KCRzY29wZS5lbGVtZW50KS50aGVuKGZ1bmN0aW9uIChhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmNhbmNlbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50LmRhdGEgPSBhcmdzLmVsZW1lbnQuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuYXBwbHlFbGVtZW50RWRpdG9yTW9kZWwoYXJncy5lbGVtZW50RWRpdG9yTW9kZWwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhJHNjb3BlLmVsZW1lbnQuc2V0SHRtbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50LnNldEh0bWwoYXJncy5lbGVtZW50Lmh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmVGb3JDb250YWluZXI6IGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSAkc2NvcGUuZWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8kc2NvcGUuaXNSZWNlaXZpbmcgPSBmYWxzZTsgLy8gVHJ1ZSB3aGVuIGNvbnRhaW5lciBpcyByZWNlaXZpbmcgYW4gZXh0ZXJuYWwgZWxlbWVudCB2aWEgZHJhZy9kcm9wLlxyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5nZXRTaG93Q2hpbGRyZW5QbGFjZWhvbGRlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRzY29wZS5lbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiAhJHNjb3BlLmVsZW1lbnQuZ2V0SXNEcm9wVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNvcnRhYmxlT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBcIm1vdmVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IDE1MCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGVsZW1lbnQuZ2V0SXNTZWFsZWQoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IDUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaGFuZGxlOiBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA8IDIgPyBcIi5pbWFnaW5hcnktY2xhc3NcIiA6IGZhbHNlLCAvLyBGb3Igc29tZSByZWFzb24gZG9lc24ndCBnZXQgcmUtZXZhbHVhdGVkIGFmdGVyIGFkZGluZyBtb3JlIGNoaWxkcmVuLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldElzRHJvcFRhcmdldCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVkaXRvci5pc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSB0aGUgZHJvcCB0YXJnZXQgcGxhY2Vob2xkZXIgYXMgaGlnaCBhcyB0aGUgaXRlbSBiZWluZyBkcmFnZ2VkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIuaGVpZ2h0KHVpLml0ZW0uaGVpZ2h0KCkgLSA0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnBsYWNlaG9sZGVyLmNzcyhcIm1pbi1oZWlnaHRcIiwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3A6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lZGl0b3IuaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNEcm9wVGFyZ2V0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyOiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXVpLnNlbmRlciAmJiAhIXVpLnNlbmRlclswXS5pc1Rvb2xib3gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISF1aS5zZW5kZXJbMF0uZHJvcFRhcmdldFRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpbWVvdXQuY2FuY2VsKHVpLnNlbmRlclswXS5kcm9wVGFyZ2V0VGltZW91dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnNlbmRlclswXS5kcm9wVGFyZ2V0VGltZW91dCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSBcIlJvd1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSB3YXMgYSBwcmV2aW91cyBkcm9wIHRhcmdldCBhbmQgaXQgd2FzIGEgcm93LCByb2xsIGJhY2sgYW55IHBlbmRpbmcgY29sdW1uIGFkZHMgdG8gaXQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNEcm9wVGFyZ2V0ID0gZWxlbWVudC5lZGl0b3IuZHJvcFRhcmdldEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFwcmV2aW91c0Ryb3BUYXJnZXQgJiYgcHJldmlvdXNEcm9wVGFyZ2V0LnR5cGUgPT0gXCJSb3dcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0Ryb3BUYXJnZXQucm9sbGJhY2tBZGRDb2x1bW4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldElzRHJvcFRhcmdldChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkuc2VuZGVyWzBdLmRyb3BUYXJnZXRUaW1lb3V0ID0gJHRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09IFwiUm93XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNlaXZlZENvbHVtbiA9IHVpLml0ZW0uc29ydGFibGUubW9kZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVjZWl2ZWRDb2x1bW5XaWR0aCA9IE1hdGguZmxvb3IoMTIgLyAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggKyAxKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZENvbHVtbi53aWR0aCA9IHJlY2VpdmVkQ29sdW1uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZENvbHVtbi5vZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5iZWdpbkFkZENvbHVtbihyZWNlaXZlZENvbHVtbldpZHRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2UgdGhlIGRyb3AgdGFyZ2V0IHBsYWNlaG9sZGVyIHRoZSBjb3JyZWN0IHdpZHRoIGFuZCBhcyBoaWdoIGFzIHRoZSBoaWdoZXN0IGV4aXN0aW5nIGNvbHVtbiBpbiB0aGUgcm93LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heEhlaWdodCA9IF8ubWF4KF8oJGVsZW1lbnQuZmluZChcIj4gLmxheW91dC1jaGlsZHJlbiA+IC5sYXlvdXQtY29sdW1uOm5vdCgudWktc29ydGFibGUtcGxhY2Vob2xkZXIpXCIpKS5tYXAoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChlKS5oZWlnaHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gMTI7IGkrKylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5wbGFjZWhvbGRlci5yZW1vdmVDbGFzcyhcImNvbC14cy1cIiArIGkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIuYWRkQ2xhc3MoXCJjb2wteHMtXCIgKyByZWNlaXZlZENvbHVtbi53aWR0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4SGVpZ2h0ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnBsYWNlaG9sZGVyLmhlaWdodChtYXhIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnBsYWNlaG9sZGVyLmNzcyhcIm1pbi1oZWlnaHRcIiwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5wbGFjZWhvbGRlci5oZWlnaHQoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIuY3NzKFwibWluLWhlaWdodFwiLCBcIlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldElzRHJvcFRhcmdldCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxNTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlOiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXVpLnNlbmRlciAmJiAhIXVpLnNlbmRlclswXS5pc1Rvb2xib3gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY2VpdmVkRWxlbWVudCA9IHVpLml0ZW0uc29ydGFibGUubW9kZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXJlY2VpdmVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSBcIlJvd1wiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29tbWl0QWRkQ29sdW1uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGQgaWRlYWxseSBjYWxsIExheW91dEVkaXRvci5Db250YWluZXIuYWRkQ2hpbGQoKSBpbnN0ZWFkLCBidXQgc2luY2UgdGhpcyBoYW5kbGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBydW4gKmJlZm9yZSogdGhlIHVpLXNvcnRhYmxlIGRpcmVjdGl2ZSdzIGhhbmRsZXIsIGlmIHdlIHRyeSB0byBhZGQgdGhlIGNoaWxkIHRvIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJyYXkgdGhhdCBoYW5kbGVyIHdpbGwgZ2V0IGFuIGV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBkbyB0aGUgc2FtZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb2YgdGhpcywgd2UgbmVlZCB0byBpbnZva2UgXCJzZXRQYXJlbnRcIiBzbyB0aGF0IHNwZWNpZmljIGNvbnRhaW5lciB0eXBlcyBjYW4gcGVyZm9ybSBlbGVtZW50IHNwZWZpY2ljIGluaXRpYWxpemF0aW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRFbGVtZW50LnNldEVkaXRvcihlbGVtZW50LmVkaXRvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZEVsZW1lbnQuc2V0UGFyZW50KGVsZW1lbnQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXJlY2VpdmVkRWxlbWVudC5oYXNFZGl0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJHJvb3QuZWRpdEVsZW1lbnQocmVjZWl2ZWRFbGVtZW50KS50aGVuKGZ1bmN0aW9uIChhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJncy5jYW5jZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5kYXRhID0gYXJncy5lbGVtZW50LmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZEVsZW1lbnQuYXBwbHlFbGVtZW50RWRpdG9yTW9kZWwoYXJncy5lbGVtZW50RWRpdG9yTW9kZWwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXJlY2VpdmVkRWxlbWVudC5zZXRIdG1sKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5zZXRIdG1sKGFyZ3MuZWxlbWVudC5odG1sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFhcmdzLmNhbmNlbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZEVsZW1lbnQuZGVsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRFbGVtZW50LnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kc2NvcGUuaXNSZWNlaXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNEcm9wVGFyZ2V0KGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kc2NvcGUuaXNSZWNlaXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNEcm9wVGFyZ2V0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXJlY2VpdmVkRWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZEVsZW1lbnQuc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmNsaWNrID0gZnVuY3Rpb24gKGNoaWxkLCBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGQuZWRpdG9yLmlzRHJhZ2dpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZ2V0Q2xhc3NlcyA9IGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gW1wibGF5b3V0LWVsZW1lbnRcIl07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFjaGlsZC5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtY29udGFpbmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldElzU2VhbGVkKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtY29udGFpbmVyLXNlYWxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtXCIgKyBjaGlsZC50eXBlLnRvTG93ZXJDYXNlKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhY2hpbGQuZHJvcFRhcmdldENsYXNzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpbGQuZHJvcFRhcmdldENsYXNzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gZWl0aGVyIHRoZSBDb2x1bW4gZGlyZWN0aXZlIG9yIHRoZSBDb2x1bW4gbW9kZWwgY2xhc3MuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC50eXBlID09IFwiUm93XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwicm93XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZC5jYW5BZGRDb2x1bW4oKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1yb3ctZnVsbFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PSBcIkNvbHVtblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImNvbC14cy1cIiArIGNoaWxkLndpZHRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwiY29sLXhzLW9mZnNldC1cIiArIGNoaWxkLm9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT0gXCJDb250ZW50XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1jb250ZW50LVwiICsgY2hpbGQuY29udGVudFR5cGVDbGFzcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0SXNBY3RpdmUoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0SXNGb2N1c2VkKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LWZvY3VzZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5nZXRJc1NlbGVjdGVkKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LXNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0SXNEcm9wVGFyZ2V0KCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LWRyb3B0YXJnZXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5pc1RlbXBsYXRlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtdGVtcGxhdGVkXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRFZGl0b3JcIiwgW1wiZW52aXJvbm1lbnRcIixcclxuICAgICAgICBmdW5jdGlvbiAoZW52aXJvbm1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHJlc3RyaWN0OiBcIkVcIixcclxuICAgICAgICAgICAgICAgIHNjb3BlOiB7fSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsIFwiJGF0dHJzXCIsIFwiJGNvbXBpbGVcIiwgXCJjbGlwYm9hcmRcIixcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCwgJGF0dHJzLCAkY29tcGlsZSwgY2xpcGJvYXJkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghISRhdHRycy5tb2RlbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50ID0gZXZhbCgkYXR0cnMubW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgJ21vZGVsJyBhdHRyaWJ1dGUgbXVzdCBldmFsdWF0ZSB0byBhIExheW91dEVkaXRvci5FZGl0b3Igb2JqZWN0LlwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5jbGljayA9IGZ1bmN0aW9uIChjYW52YXMsIGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FudmFzLmVkaXRvci5pc0RyYWdnaW5nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZ2V0Q2xhc3NlcyA9IGZ1bmN0aW9uIChjYW52YXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXCJsYXlvdXQtZWxlbWVudFwiLCBcImxheW91dC1jb250YWluZXJcIiwgXCJsYXlvdXQtY2FudmFzXCJdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW52YXMuZ2V0SXNBY3RpdmUoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LWFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW52YXMuZ2V0SXNGb2N1c2VkKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC1mb2N1c2VkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhcy5nZXRJc1NlbGVjdGVkKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC1zZWxlY3RlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW52YXMuZ2V0SXNEcm9wVGFyZ2V0KCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhcy5pc1RlbXBsYXRlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LXRlbXBsYXRlZFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW4gdW5mb3J0dW5hdGUgc2lkZS1lZmZlY3Qgb2YgdGhlIG5leHQgaGFjayBvbiBsaW5lIDU0IGlzIHRoYXQgdGhlIGNyZWF0ZWQgZWxlbWVudHMgYXJlbid0IGFkZGVkIHRvIHRoZSBET00geWV0LCBzbyB3ZSBjYW4ndCB1c2UgaXQgdG8gZ2V0IHRvIHRoZSBwYXJlbnQgXCIubGF5b3V0LWRlc2lnZXJcIiBlbGVtZW50LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXb3JrIGFyb3VuZDogYWNjZXNzIHRoYXQgZWxlbWVudCBkaXJlY3RseSAod2hpY2ggZWZlY3RpdmVseSB0dXJucyBtdWx0aXBsZSBsYXlvdXQgZWRpdG9ycyBvbiBhIHNpbmdsZSBwYWdlIGltcG9zc2libGUpLiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gLy92YXIgbGF5b3V0RGVzaWduZXJIb3N0ID0gJGVsZW1lbnQuY2xvc2VzdChcIi5sYXlvdXQtZGVzaWduZXJcIikuZGF0YShcImxheW91dC1kZXNpZ25lci1ob3N0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGF5b3V0RGVzaWduZXJIb3N0ID0gJChcIi5sYXlvdXQtZGVzaWduZXJcIikuZGF0YShcImxheW91dC1kZXNpZ25lci1ob3N0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRyb290LmxheW91dERlc2lnbmVySG9zdCA9IGxheW91dERlc2lnbmVySG9zdDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dERlc2lnbmVySG9zdC5lbGVtZW50Lm9uKFwicmVwbGFjZWNhbnZhc1wiLCBmdW5jdGlvbiAoZSwgYXJncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVkaXRvciA9ICRzY29wZS5lbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhc0RhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogYXJncy5jYW52YXMuZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sSWQ6IGFyZ3MuY2FudmFzLmh0bWxJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sQ2xhc3M6IGFyZ3MuY2FudmFzLmh0bWxDbGFzcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sU3R5bGU6IGFyZ3MuY2FudmFzLmh0bWxTdHlsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RlbXBsYXRlZDogYXJncy5jYW52YXMuaXNUZW1wbGF0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGFyZ3MuY2FudmFzLmNoaWxkcmVuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhBQ0s6IEluc3RlYWQgb2Ygc2ltcGx5IHVwZGF0aW5nIHRoZSAkc2NvcGUuZWxlbWVudCB3aXRoIGEgbmV3IGluc3RhbmNlLCB3ZSBuZWVkIHRvIHJlcGxhY2UgdGhlIGVudGlyZSBvcmMtbGF5b3V0LWVkaXRvciBtYXJrdXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIG9yZGVyIGZvciBhbmd1bGFyIHRvIHJlYmluZCBzdGFydGluZyB3aXRoIHRoZSBDYW52YXMgZWxlbWVudC4gT3RoZXJ3aXNlLCBmb3Igc29tZSByZWFzb24sIGl0IHdpbGwgcmViaW5kIHN0YXJ0aW5nIHdpdGggdGhlIGZpcnN0IGNoaWxkIG9mIENhbnZhcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFlvdSBjYW4gc2VlIHRoaXMgaGFwcGVuaW5nIHdoZW4gc2V0dGluZyBhIGJyZWFrcG9pbnQgaW4gU2NvcGVDb25maWd1cmF0b3Igd2hlcmUgY29udGFpbmVycyBhcmUgaW5pdGlhbGl6ZWQgd2l0aCBkcmFnICYgZHJvcDogb24gcGFnZSBsb2FkLCB0aGUgZmlyc3QgZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgYSBDYW52YXMgKGdvb2QpLCBidXQgYWZ0ZXIgaGF2aW5nIHNlbGVjdGVkIGFub3RoZXIgdGVtcGxhdGUsIHRoZSBmaXJzdCBlbGVtZW50IGlzICh0eXBpY2FsbHkpIGEgR3JpZCAoYmFkKS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbXBseSByZWNvbXBpbGluZyB0aGUgb3JjLWxheW91dC1lZGl0b3IgZGlyZWN0aXZlIHdpbGwgY2F1c2UgdGhlIGVudGlyZSB0aGluZyB0byBiZSBnZW5lcmF0ZWQsIHdoaWNoIHdvcmtzIGp1c3QgZmluZSBhcyB3ZWxsIChldmVuIHRob3VnaCBub3QgaXMgbmljZSBhcyBzaW1wbHkgbGV2ZXJhZ2luZyBtb2RlbCBiaW5kaW5nKS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dERlc2lnbmVySG9zdC5lZGl0b3IgPSB3aW5kb3cubGF5b3V0RWRpdG9yID0gbmV3IExheW91dEVkaXRvci5FZGl0b3IoZWRpdG9yLmNvbmZpZywgY2FudmFzRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSBcIjxvcmMtbGF5b3V0LWVkaXRvclwiICsgXCIgbW9kZWw9J3dpbmRvdy5sYXlvdXRFZGl0b3InIC8+XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9ICRjb21waWxlKHRlbXBsYXRlKSgkc2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChcIi5sYXlvdXQtZWRpdG9yLWhvbGRlclwiKS5odG1sKGh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kcm9vdC5lZGl0RWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG9zdCA9ICRzY29wZS4kcm9vdC5sYXlvdXREZXNpZ25lckhvc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG9zdC5lZGl0RWxlbWVudChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kcm9vdC5hZGRFbGVtZW50ID0gZnVuY3Rpb24gKGNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG9zdCA9ICRzY29wZS4kcm9vdC5sYXlvdXREZXNpZ25lckhvc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG9zdC5hZGRFbGVtZW50KGNvbnRlbnRUeXBlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKFwiY3V0IGNvcHkgcGFzdGVcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwc2V1ZG8gY2xpcGJvYXJkIHdhcyBhbHJlYWR5IGludm9rZWQgKHdoaWNoIGhhcHBlbnMgb24gdGhlIGZpcnN0IGNsaXBib2FyZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3BlcmF0aW9uIGFmdGVyIHBhZ2UgbG9hZCBldmVuIGlmIG5hdGl2ZSBjbGlwYm9hcmQgc3VwcG9ydCBleGlzdHMpIHRoZW4gc2l0IHRoaXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9uZSBvcGVyYXRpb24gb3V0LCBidXQgbWFrZSBzdXJlIHdoYXRldmVyIGlzIG9uIHRoZSBwc2V1ZG8gY2xpcGJvYXJkIGdldHMgbWlncmF0ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBuYXRpdmUgY2xpcGJvYXJkIGZvciBzdWJzZXF1ZW50IG9wZXJhdGlvbnMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xpcGJvYXJkLndhc0ludm9rZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnNldERhdGEoXCJ0ZXh0L3BsYWluXCIsIGNsaXBib2FyZC5nZXREYXRhKFwidGV4dC9wbGFpblwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuc2V0RGF0YShcInRleHQvanNvblwiLCBjbGlwYm9hcmQuZ2V0RGF0YShcInRleHQvanNvblwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvY3VzZWRFbGVtZW50ID0gJHNjb3BlLmVsZW1lbnQuZm9jdXNlZEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhZm9jdXNlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGUudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjb3B5XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWRFbGVtZW50LmNvcHkoZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY3V0XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWRFbGVtZW50LmN1dChlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJwYXN0ZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2VkRWxlbWVudC5wYXN0ZShlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhBQ0s6IFdvcmthcm91bmQgYmVjYXVzZSBvZiBob3cgQW5ndWxhciB0cmVhdHMgdGhlIERPTSB3aGVuIGVsZW1lbnRzIGFyZSBzaGlmdGVkIGFyb3VuZCAtIGlucHV0IGZvY3VzIGlzIHNvbWV0aW1lcyBsb3N0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISEkc2NvcGUuZWxlbWVudC5mb2N1c2VkRWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuZm9jdXNlZEVsZW1lbnQuc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmF0aXZlIGNsaXBib2FyZCBzdXBwb3J0IG9idmlvdXNseSBleGlzdHMsIHNvIGRpc2FibGUgdGhlIHBldWRvIGNsaXBib2FyZCBmcm9tIG5vdyBvbi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBib2FyZC5kaXNhYmxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogZW52aXJvbm1lbnQudGVtcGxhdGVVcmwoXCJFZGl0b3JcIiksXHJcbiAgICAgICAgICAgICAgICByZXBsYWNlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbGluazogZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTm8gY2xpY2tzIHNob3VsZCBwcm9wYWdhdGUgZnJvbSB0aGUgVGlueU1DRSB0b29sYmFycy5cclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZpbmQoXCIubGF5b3V0LXRvb2xiYXItY29udGFpbmVyXCIpLmNsaWNrKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVW5mb2N1cyBhbmQgdW5zZWxlY3QgZXZlcnl0aGluZyBvbiBjbGljayBvdXRzaWRlIG9mIGNhbnZhcy5cclxuICAgICAgICAgICAgICAgICAgICAkKHdpbmRvdykuY2xpY2soZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuYWN0aXZlRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmZvY3VzZWRFbGVtZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dENhbnZhc1wiLCBbXCJzY29wZUNvbmZpZ3VyYXRvclwiLCBcImVudmlyb25tZW50XCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKHNjb3BlQ29uZmlndXJhdG9yLCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgZWxlbWVudDogXCI9XCIgfSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsIFwiJGF0dHJzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQsICRhdHRycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNvbmZpZ3VyYXRvci5jb25maWd1cmVGb3JFbGVtZW50KCRzY29wZSwgJGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNvbmZpZ3VyYXRvci5jb25maWd1cmVGb3JDb250YWluZXIoJHNjb3BlLCAkZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5zb3J0YWJsZU9wdGlvbnNbXCJheGlzXCJdID0gXCJ5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBlbnZpcm9ubWVudC50ZW1wbGF0ZVVybChcIkNhbnZhc1wiKSxcclxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0Q2hpbGRcIiwgW1wiJGNvbXBpbGVcIixcclxuICAgICAgICBmdW5jdGlvbiAoJGNvbXBpbGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHJlc3RyaWN0OiBcIkVcIixcclxuICAgICAgICAgICAgICAgIHNjb3BlOiB7IGVsZW1lbnQ6IFwiPVwiIH0sXHJcbiAgICAgICAgICAgICAgICBsaW5rOiBmdW5jdGlvbiAoc2NvcGUsIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSBcIjxvcmMtbGF5b3V0LVwiICsgc2NvcGUuZWxlbWVudC50eXBlLnRvTG93ZXJDYXNlKCkgKyBcIiBlbGVtZW50PSdlbGVtZW50JyAvPlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gJGNvbXBpbGUodGVtcGxhdGUpKHNjb3BlKTtcclxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLnJlcGxhY2VXaXRoKGh0bWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRDb2x1bW5cIiwgW1wiJGNvbXBpbGVcIiwgXCJzY29wZUNvbmZpZ3VyYXRvclwiLCBcImVudmlyb25tZW50XCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKCRjb21waWxlLCBzY29wZUNvbmZpZ3VyYXRvciwgZW52aXJvbm1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHJlc3RyaWN0OiBcIkVcIixcclxuICAgICAgICAgICAgICAgIHNjb3BlOiB7IGVsZW1lbnQ6IFwiPVwiIH0sXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckVsZW1lbnQoJHNjb3BlLCAkZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckNvbnRhaW5lcigkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNvcnRhYmxlT3B0aW9uc1tcImF4aXNcIl0gPSBcInlcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiQ29sdW1uXCIpLFxyXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uIChzY29wZSwgZWxlbWVudCwgYXR0cnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZpbmQoXCIubGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyXCIpLmRyYWdnYWJsZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF4aXM6IFwieFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXI6IFwiY2xvbmVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJ0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuZWRpdG9yLmlzUmVzaXppbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyYWc6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbkVsZW1lbnQgPSBlbGVtZW50LnBhcmVudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtblNpemUgPSBjb2x1bW5FbGVtZW50LndpZHRoKCkgLyBzY29wZS5lbGVtZW50LndpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbm5lY3RBZGphY2VudCA9ICFlLmN0cmxLZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChlLnRhcmdldCkuaGFzQ2xhc3MoXCJsYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXItbGVmdFwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IHVpLm9mZnNldC5sZWZ0IC0gY29sdW1uRWxlbWVudC5vZmZzZXQoKS5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSA8IC1jb2x1bW5TaXplICYmIHNjb3BlLmVsZW1lbnQuY2FuRXhwYW5kTGVmdChjb25uZWN0QWRqYWNlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmV4cGFuZExlZnQoY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhID4gY29sdW1uU2l6ZSAmJiBzY29wZS5lbGVtZW50LmNhbkNvbnRyYWN0TGVmdChjb25uZWN0QWRqYWNlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmNvbnRyYWN0TGVmdChjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgkKGUudGFyZ2V0KS5oYXNDbGFzcyhcImxheW91dC1jb2x1bW4tcmVzaXplLWJhci1yaWdodFwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IHVpLm9mZnNldC5sZWZ0IC0gY29sdW1uRWxlbWVudC53aWR0aCgpIC0gY29sdW1uRWxlbWVudC5vZmZzZXQoKS5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSA+IGNvbHVtblNpemUgJiYgc2NvcGUuZWxlbWVudC5jYW5FeHBhbmRSaWdodChjb25uZWN0QWRqYWNlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmV4cGFuZFJpZ2h0KGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWx0YSA8IC1jb2x1bW5TaXplICYmIHNjb3BlLmVsZW1lbnQuY2FuQ29udHJhY3RSaWdodChjb25uZWN0QWRqYWNlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmNvbnRyYWN0UmlnaHQoY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmVkaXRvci5pc1Jlc2l6aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRDb250ZW50XCIsIFtcIiRzY2VcIiwgXCJzY29wZUNvbmZpZ3VyYXRvclwiLCBcImVudmlyb25tZW50XCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKCRzY2UsIHNjb3BlQ29uZmlndXJhdG9yLCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgZWxlbWVudDogXCI9XCIgfSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yRWxlbWVudCgkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJ3cml0ZSB0aGUgc2V0SHRtbCBmdW5jdGlvbiBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlICRzY2Ugc2VydmljZSB0byB0cnVzdCB0aGUgaHRtbCAoYW5kIG5vdCBoYXZlIHRoZSBodG1sIGJpbmRpbmcgc3RyaXAgY2VydGFpbiB0YWdzKS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuc2V0SHRtbCA9IGZ1bmN0aW9uIChodG1sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5odG1sID0gaHRtbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50Lmh0bWxVbnNhZmUgPSAkc2NlLnRydXN0QXNIdG1sKGh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuc2V0SHRtbCgkc2NvcGUuZWxlbWVudC5odG1sKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiQ29udGVudFwiKSxcclxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0R3JpZFwiLCBbXCIkY29tcGlsZVwiLCBcInNjb3BlQ29uZmlndXJhdG9yXCIsIFwiZW52aXJvbm1lbnRcIixcclxuICAgICAgICBmdW5jdGlvbiAoJGNvbXBpbGUsIHNjb3BlQ29uZmlndXJhdG9yLCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgZWxlbWVudDogXCI9XCIgfSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yRWxlbWVudCgkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yQ29udGFpbmVyKCRzY29wZSwgJGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuc29ydGFibGVPcHRpb25zW1wiYXhpc1wiXSA9IFwieVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogZW52aXJvbm1lbnQudGVtcGxhdGVVcmwoXCJHcmlkXCIpLFxyXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRSb3dcIiwgW1wiJGNvbXBpbGVcIiwgXCJzY29wZUNvbmZpZ3VyYXRvclwiLCBcImVudmlyb25tZW50XCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKCRjb21waWxlLCBzY29wZUNvbmZpZ3VyYXRvciwgZW52aXJvbm1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHJlc3RyaWN0OiBcIkVcIixcclxuICAgICAgICAgICAgICAgIHNjb3BlOiB7IGVsZW1lbnQ6IFwiPVwiIH0sXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckVsZW1lbnQoJHNjb3BlLCAkZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckNvbnRhaW5lcigkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNvcnRhYmxlT3B0aW9uc1tcImF4aXNcIl0gPSBcInhcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNvcnRhYmxlT3B0aW9uc1tcInVpLWZsb2F0aW5nXCJdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiUm93XCIpLFxyXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRQb3B1cFwiLCBbXHJcbiAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgICAgICAgICAgbGluazogZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50LCBhdHRycykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3B1cCA9ICQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaWdnZXIgPSBwb3B1cC5jbG9zZXN0KFwiLmxheW91dC1wb3B1cC10cmlnZ2VyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gcG9wdXAuY2xvc2VzdChcIi5sYXlvdXQtZWxlbWVudFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLmNsaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXAudG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3B1cC5pcyhcIjp2aXNpYmxlXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1cC5wb3NpdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXk6IGF0dHJzLm9yY0xheW91dFBvcHVwTXkgfHwgXCJsZWZ0IHRvcFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0OiBhdHRycy5vcmNMYXlvdXRQb3B1cEF0IHx8IFwibGVmdCBib3R0b20rNHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Y6IHRyaWdnZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXAuZmluZChcImlucHV0XCIpLmZpcnN0KCkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHBvcHVwLmNsaWNrKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5jbGljayhmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3B1cC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wdXAua2V5ZG93bihmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSAyNykgLy8gRXNjXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1cC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wdXAub24oXCJjdXQgY29weSBwYXN0ZVwiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBbGxvdyBjbGlwYm9hcmQgb3BlcmF0aW9ucyBpbiBwb3B1cCB3aXRob3V0IGludm9raW5nIGNsaXBib2FyZCBldmVudCBoYW5kbGVycyBvbiBwYXJlbnQgZWxlbWVudC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0VG9vbGJveFwiLCBbXCIkY29tcGlsZVwiLCBcImVudmlyb25tZW50XCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKCRjb21waWxlLCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIixcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnJlc2V0RWxlbWVudHMgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmdyaWRFbGVtZW50cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuR3JpZC5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjAwYVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiR3JpZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiRW1wdHkgZ3JpZC5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnJvd0VsZW1lbnRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5Sb3cuZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIlJvdyAoMSBjb2x1bW4pXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJSb3cgd2l0aCAxIGNvbHVtbi5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IExheW91dEVkaXRvci5Db2x1bW4udGltZXMoMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuUm93LmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMGM5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKDIgY29sdW1ucylcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIlJvdyB3aXRoIDIgY29sdW1ucy5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IExheW91dEVkaXRvci5Db2x1bW4udGltZXMoMilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuUm93LmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMGM5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKDMgY29sdW1ucylcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIlJvdyB3aXRoIDMgY29sdW1ucy5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IExheW91dEVkaXRvci5Db2x1bW4udGltZXMoMylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuUm93LmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMGM5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKDQgY29sdW1ucylcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIlJvdyB3aXRoIDQgY29sdW1ucy5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IExheW91dEVkaXRvci5Db2x1bW4udGltZXMoNClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuUm93LmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMGM5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKDYgY29sdW1ucylcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIlJvdyB3aXRoIDYgY29sdW1ucy5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IExheW91dEVkaXRvci5Db2x1bW4udGltZXMoNilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuUm93LmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMGM5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKDEyIGNvbHVtbnMpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJSb3cgd2l0aCAxMiBjb2x1bW5zLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcygxMilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjBjOVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiUm93IChlbXB0eSlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIkVtcHR5IHJvdy5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmNvbHVtbkVsZW1lbnRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5Db2x1bW4uZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwZGJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIkNvbHVtblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiRW1wdHkgY29sdW1uLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuY2FudmFzRWxlbWVudHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLkNhbnZhcy5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjA0NFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiQ2FudmFzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJFbXB0eSBjYW52YXMuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5jb250ZW50RWxlbWVudENhdGVnb3JpZXMgPSBfKCRzY29wZS5lbGVtZW50LmNvbmZpZy5jYXRlZ29yaWVzKS5tYXAoZnVuY3Rpb24gKGNhdGVnb3J5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY2F0ZWdvcnkubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHM6IF8oY2F0ZWdvcnkuY29udGVudFR5cGVzKS5tYXAoZnVuY3Rpb24gKGNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGNvbnRlbnRUeXBlLnR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmFjdG9yeSA9IExheW91dEVkaXRvci5mYWN0b3JpZXNbdHlwZV0gfHwgTGF5b3V0RWRpdG9yLmZhY3Rvcmllc1tcIkNvbnRlbnRcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RlbXBsYXRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGU6IGNvbnRlbnRUeXBlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlTGFiZWw6IGNvbnRlbnRUeXBlLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlQ2xhc3M6IGNvbnRlbnRUeXBlLnR5cGVDbGFzcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0VkaXRvcjogY29udGVudFR5cGUuaGFzRWRpdG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IGNvbnRlbnRUeXBlLmh0bWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGZhY3RvcnkoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnRvb2xib3hJY29uID0gY29udGVudFR5cGUuaWNvbiB8fCBcIlxcdWYxYzlcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudG9vbGJveExhYmVsID0gY29udGVudFR5cGUubGFiZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnRvb2xib3hEZXNjcmlwdGlvbiA9IGNvbnRlbnRUeXBlLmRlc2NyaXB0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5yZXNldEVsZW1lbnRzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZ2V0U29ydGFibGVPcHRpb25zID0gZnVuY3Rpb24gKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlZGl0b3JJZCA9ICRlbGVtZW50LmNsb3Nlc3QoXCIubGF5b3V0LWVkaXRvclwiKS5hdHRyKFwiaWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50Q2xhc3NlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbGFjZWhvbGRlckNsYXNzZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxvYXRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiR3JpZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDbGFzc2VzID0gW1wiLmxheW91dC1jYW52YXNcIiwgXCIubGF5b3V0LWNvbHVtblwiLCBcIi5sYXlvdXQtY29tbW9uLWhvbGRlclwiXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJDbGFzc2VzID0gXCJsYXlvdXQtZWxlbWVudCBsYXlvdXQtY29udGFpbmVyIGxheW91dC1ncmlkIHVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJSb3dcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3NlcyA9IFtcIi5sYXlvdXQtZ3JpZFwiXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJDbGFzc2VzID0gXCJsYXlvdXQtZWxlbWVudCBsYXlvdXQtY29udGFpbmVyIGxheW91dC1yb3cgcm93IHVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJDb2x1bW5cIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3NlcyA9IFtcIi5sYXlvdXQtcm93Om5vdCgubGF5b3V0LXJvdy1mdWxsKVwiXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJDbGFzc2VzID0gXCJsYXlvdXQtZWxlbWVudCBsYXlvdXQtY29udGFpbmVyIGxheW91dC1jb2x1bW4gdWktc29ydGFibGUtcGxhY2Vob2xkZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRpbmcgPSB0cnVlOyAvLyBUbyBlbnN1cmUgYSBzbW9vdGggaG9yaXpvbnRhbC1saXN0IHJlb3JkZXJpbmcuIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyLXVpL3VpLXNvcnRhYmxlI2Zsb2F0aW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJDb250ZW50XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENsYXNzZXMgPSBbXCIubGF5b3V0LWNhbnZhc1wiLCBcIi5sYXlvdXQtY29sdW1uXCIsIFwiLmxheW91dC1jb21tb24taG9sZGVyXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckNsYXNzZXMgPSBcImxheW91dC1lbGVtZW50IGxheW91dC1jb250ZW50IHVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJDYW52YXNcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3NlcyA9IFtcIi5sYXlvdXQtY2FudmFzXCIsIFwiLmxheW91dC1jb2x1bW5cIiwgXCIubGF5b3V0LWNvbW1vbi1ob2xkZXJcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyQ2xhc3NlcyA9IFwibGF5b3V0LWVsZW1lbnQgbGF5b3V0LWNvbnRhaW5lciBsYXlvdXQtZ3JpZCB1aS1zb3J0YWJsZS1wbGFjZWhvbGRlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJtb3ZlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdFdpdGg6IF8ocGFyZW50Q2xhc3NlcykubWFwKGZ1bmN0aW9uIChlKSB7IHJldHVybiBcIiNcIiArIGVkaXRvcklkICsgXCIgXCIgKyBlICsgXCI6bm90KC5sYXlvdXQtY29udGFpbmVyLXNlYWxlZCkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW5cIjsgfSkuam9pbihcIiwgXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlckNsYXNzZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ1aS1mbG9hdGluZ1wiOiBmbG9hdGluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXI6IFwiY2xvbmVcIiwgLy8gV2UgY2xvbmUgdGhlIGVsZW1lbnQgYW5kIHdlIGFwcGVuZCBpdCB0byB0aGUgYm9keSBiZWNhdXNlIHRoZSBjb250YWluZXIgb3ZlcmZsb3cgaXMgc2V0IHRvIGF1dG8gKHNlZTogQXNzZXRzXFxMZXNzXFxMYXlvdXRFZGl0b3JcXFRvb2xib3gubGVzcykgYW5kIG90aGVyd2lzZSBpdCBjb3VsZCBub3QgYmUgbW92ZWQgd2l0aCBkcmFnJmRyb3BcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUbzogXCJib2R5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQuaXNUb29sYm94ID0gdHJ1ZTsgLy8gV2lsbCBpbmRpY2F0ZSB0byBjb25uZWN0ZWQgc29ydGFibGVzIHRoYXQgZHJvcHBlZCBpdGVtcyB3ZXJlIHNlbnQgZnJvbSB0b29sYm94LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50LmlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3A6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50LmlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5yZXNldEVsZW1lbnRzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcjogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuY2FudmFzLnNldElzRHJvcFRhcmdldChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGF5b3V0SXNDb2xsYXBzZWRDb29raWVOYW1lID0gXCJsYXlvdXRUb29sYm94Q2F0ZWdvcnlfTGF5b3V0X0lzQ29sbGFwc2VkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5sYXlvdXRJc0NvbGxhcHNlZCA9ICQuY29va2llKGxheW91dElzQ29sbGFwc2VkQ29va2llTmFtZSkgPT09IFwidHJ1ZVwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnRvZ2dsZUxheW91dElzQ29sbGFwc2VkID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5sYXlvdXRJc0NvbGxhcHNlZCA9ICEkc2NvcGUubGF5b3V0SXNDb2xsYXBzZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmNvb2tpZShsYXlvdXRJc0NvbGxhcHNlZENvb2tpZU5hbWUsICRzY29wZS5sYXlvdXRJc0NvbGxhcHNlZCwgeyBleHBpcmVzOiAzNjUgfSk7IC8vIFJlbWVtYmVyIGNvbGxhcHNlZCBzdGF0ZSBmb3IgYSB5ZWFyLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiVG9vbGJveFwiKSxcclxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0VG9vbGJveEdyb3VwXCIsIFtcIiRjb21waWxlXCIsIFwiZW52aXJvbm1lbnRcIixcclxuICAgICAgICBmdW5jdGlvbiAoJGNvbXBpbGUsIGVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXHJcbiAgICAgICAgICAgICAgICBzY29wZTogeyBjYXRlZ29yeTogXCI9XCIgfSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzQ29sbGFwc2VkQ29va2llTmFtZSA9IFwibGF5b3V0VG9vbGJveENhdGVnb3J5X1wiICsgJHNjb3BlLmNhdGVnb3J5Lm5hbWUgKyBcIl9Jc0NvbGxhcHNlZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuaXNDb2xsYXBzZWQgPSAkLmNvb2tpZShpc0NvbGxhcHNlZENvb2tpZU5hbWUpID09PSBcInRydWVcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnRvZ2dsZUlzQ29sbGFwc2VkID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5pc0NvbGxhcHNlZCA9ICEkc2NvcGUuaXNDb2xsYXBzZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmNvb2tpZShpc0NvbGxhcHNlZENvb2tpZU5hbWUsICRzY29wZS5pc0NvbGxhcHNlZCwgeyBleHBpcmVzOiAzNjUgfSk7IC8vIFJlbWVtYmVyIGNvbGxhcHNlZCBzdGF0ZSBmb3IgYSB5ZWFyLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiVG9vbGJveEdyb3VwXCIpLFxyXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js index b5c45d3ea47..358917f54c1 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js @@ -1 +1 @@ -angular.module("LayoutEditor",["ngSanitize","ngResource","ui.sortable"]);var LayoutEditor;!function(e){var t=function(){var e=this;this._clipboardData={},this._isDisabled=!1,this._wasInvoked=!1,this.setData=function(t,o){e._clipboardData[t]=o,e._wasInvoked=!0},this.getData=function(t){return e._wasInvoked=!0,e._clipboardData[t]},this.disable=function(){e._isDisabled=!0,e._wasInvoked=!1,e._clipboardData={}},this.isDisabled=function(){return e._isDisabled},this.wasInvoked=function(){return e._wasInvoked}};e.Clipboard=new t,angular.module("LayoutEditor").factory("clipboard",[function(){return{setData:e.Clipboard.setData,getData:e.Clipboard.getData,disable:e.Clipboard.disable,isDisabled:e.Clipboard.isDisabled,wasInvoked:e.Clipboard.wasInvoked}}])}(LayoutEditor||(LayoutEditor={})),angular.module("LayoutEditor").factory("scopeConfigurator",["$timeout","clipboard",function(e,t){return{configureForElement:function(e,o){o.find(".layout-panel").click(function(e){e.stopPropagation()}),o.parent().keydown(function(n){var l=!1,a=!1,r=e.element;if(!r.editor.isDragging){if(!t.isDisabled()){var i=r.editor.focusedElement;if(i&&n.ctrlKey)switch(n.which){case 67:i.copy(t);break;case 88:i.cut(t);break;case 86:i.paste(t)}}if(n.ctrlKey||n.shiftKey||n.altKey||46!=n.which?n.ctrlKey||n.shiftKey||n.altKey||32!=n.which&&27!=n.which||(o.find(".layout-panel-action-properties").first().click(),l=!0):(e["delete"](r),l=!0),r.hasEditor&&(n.ctrlKey||n.shiftKey||n.altKey||13!=n.which||(o.find(".layout-panel-action-edit").first().click(),l=!0)),r.children&&(n.ctrlKey||n.shiftKey||!n.altKey||40!=n.which||(r.children.length>0&&r.children[0].setIsFocused(),l=!0),"Column"==r.type)){var c=!n.ctrlKey;37==n.which?(n.altKey&&r.expandLeft(c),n.shiftKey&&r.contractRight(c),l=!0):39==n.which&&(n.altKey&&r.contractLeft(c),n.shiftKey&&r.expandRight(c),l=!0)}r.parent&&(n.altKey&&38==n.which&&(r.parent.setIsFocused(),l=!0),"Row"==r.parent.type?n.ctrlKey||n.shiftKey||n.altKey||37!=n.which?n.ctrlKey||n.shiftKey||n.altKey||39!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||37!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||39!=n.which||(r.moveDown(),l=!0):(r.moveUp(),a=!0,l=!0):(r.parent.moveFocusNextChild(r),l=!0):(r.parent.moveFocusPrevChild(r),l=!0):n.ctrlKey||n.shiftKey||n.altKey||38!=n.which?n.ctrlKey||n.shiftKey||n.altKey||40!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||38!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||40!=n.which||(r.moveDown(),l=!0):(r.moveUp(),a=!0,l=!0):(r.parent.moveFocusNextChild(r),l=!0):(r.parent.moveFocusPrevChild(r),l=!0)),l&&n.preventDefault(),n.stopPropagation(),e.$apply(),a&&window.setTimeout(function(){e.$apply(function(){r.editor.focusedElement.setIsFocused()})},100)}}),e.element.setIsFocusedEventHandlers.push(function(){o.parent().focus()}),e["delete"]=function(e){e["delete"]()},e.element.hasEditor&&(e.edit=function(){e.$root.editElement(e.element).then(function(t){e.$apply(function(){t.cancel||(e.element.data=t.element.data,e.element.applyElementEditorModel(t.elementEditorModel),e.element.setHtml&&e.element.setHtml(t.element.html))})})})},configureForContainer:function(t,o){var n=t.element;t.getShowChildrenPlaceholder=function(){return 0===t.element.children.length&&!t.element.getIsDropTarget()},t.sortableOptions={cursor:"move",delay:150,disabled:n.getIsSealed(),distance:5,start:function(e,o){t.$apply(function(){n.setIsDropTarget(!0),n.editor.isDragging=!0}),o.placeholder.height(o.item.height()-4),o.placeholder.css("min-height",0)},stop:function(e,o){t.$apply(function(){n.editor.isDragging=!1,n.setIsDropTarget(!1)})},over:function(t,l){l.sender&&l.sender[0].isToolbox&&(l.sender[0].dropTargetTimeout&&(e.cancel(l.sender[0].dropTargetTimeout),l.sender[0].dropTargetTimeout=null),e(function(){if("Row"==n.type){var e=n.editor.dropTargetElement;e&&"Row"==e.type&&e.rollbackAddColumn()}n.setIsDropTarget(!1)}),l.sender[0].dropTargetTimeout=e(function(){if("Row"==n.type){var e=l.item.sortable.model,t=Math.floor(12/(n.children.length+1));e.width=t,e.offset=0,n.beginAddColumn(t);var a=_.max(_(o.find("> .layout-children > .layout-column:not(.ui-sortable-placeholder)")).map(function(e){return $(e).height()}));for(i=1;i<=12;i++)l.placeholder.removeClass("col-xs-"+i);l.placeholder.addClass("col-xs-"+e.width),a>0?(l.placeholder.height(a),l.placeholder.css("min-height",0)):(l.placeholder.height(0),l.placeholder.css("min-height",""))}n.setIsDropTarget(!0)},150))},receive:function(o,l){l.sender&&l.sender[0].isToolbox&&t.$apply(function(){var o=l.item.sortable.model;o&&("Row"==n.type&&n.commitAddColumn(),o.setEditor(n.editor),o.setParent(n),o.hasEditor&&t.$root.editElement(o).then(function(t){t.cancel||(o.data=t.element.data,o.applyElementEditorModel(t.elementEditorModel),o.setHtml&&o.setHtml(t.element.html)),e(function(){t.cancel?o["delete"]():o.setIsFocused(),n.setIsDropTarget(!1)})})),e(function(){n.setIsDropTarget(!1),o&&o.setIsFocused()})})}},t.click=function(e,t){e.editor.isDragging||e.setIsFocused(),t.stopPropagation()},t.getClasses=function(e){var t=["layout-element"];return e.children&&(t.push("layout-container"),e.getIsSealed()&&t.push("layout-container-sealed")),t.push("layout-"+e.type.toLowerCase()),e.dropTargetClass&&t.push(e.dropTargetClass),"Row"==e.type&&(t.push("row"),e.canAddColumn()||t.push("layout-row-full")),"Column"==e.type&&(t.push("col-xs-"+e.width),t.push("col-xs-offset-"+e.offset)),"Content"==e.type&&t.push("layout-content-"+e.contentTypeClass),e.getIsActive()&&t.push("layout-element-active"),e.getIsFocused()&&t.push("layout-element-focused"),e.getIsSelected()&&t.push("layout-element-selected"),e.getIsDropTarget()&&t.push("layout-element-droptarget"),e.isTemplated&&t.push("layout-element-templated"),t}}}}]),angular.module("LayoutEditor").directive("orcLayoutEditor",["environment",function(environment){return{restrict:"E",scope:{},controller:["$scope","$element","$attrs","$compile","clipboard",function($scope,$element,$attrs,$compile,clipboard){if(!$attrs.model)throw new Error("The 'model' attribute must evaluate to a LayoutEditor.Editor object.");$scope.element=eval($attrs.model),$scope.click=function(e,t){e.editor.isDragging||e.setIsFocused(),t.stopPropagation()},$scope.getClasses=function(e){var t=["layout-element","layout-container","layout-canvas"];return e.getIsActive()&&t.push("layout-element-active"),e.getIsFocused()&&t.push("layout-element-focused"),e.getIsSelected()&&t.push("layout-element-selected"),e.getIsDropTarget()&&t.push("layout-element-droptarget"),e.isTemplated&&t.push("layout-element-templated"),t};var layoutDesignerHost=$(".layout-designer").data("layout-designer-host");$scope.$root.layoutDesignerHost=layoutDesignerHost,layoutDesignerHost.element.on("replacecanvas",function(e,t){var o=$scope.element,n={data:t.canvas.data,htmlId:t.canvas.htmlId,htmlClass:t.canvas.htmlClass,htmlStyle:t.canvas.htmlStyle,isTemplated:t.canvas.isTemplated,children:t.canvas.children};layoutDesignerHost.editor=window.layoutEditor=new LayoutEditor.Editor(o.config,n);var l="",a=$compile(l)($scope);$(".layout-editor-holder").html(a)}),$scope.$root.editElement=function(e){var t=$scope.$root.layoutDesignerHost;return t.editElement(e)},$scope.$root.addElement=function(e){var t=$scope.$root.layoutDesignerHost;return t.addElement(e)},$(document).on("cut copy paste",function(e){if(clipboard.wasInvoked())e.originalEvent.clipboardData.setData("text/plain",clipboard.getData("text/plain")),e.originalEvent.clipboardData.setData("text/json",clipboard.getData("text/json")),e.preventDefault();else{var t=$scope.element.focusedElement;t&&($scope.$apply(function(){switch(e.type){case"copy":t.copy(e.originalEvent.clipboardData);break;case"cut":t.cut(e.originalEvent.clipboardData);break;case"paste":t.paste(e.originalEvent.clipboardData)}}),window.setTimeout(function(){$scope.$apply(function(){$scope.element.focusedElement&&$scope.element.focusedElement.setIsFocused()})},100),e.preventDefault())}clipboard.disable()})}],templateUrl:environment.templateUrl("Editor"),replace:!0,link:function(e,t){t.find(".layout-toolbar-container").click(function(e){e.stopPropagation()}),$(window).click(function(t){e.$apply(function(){e.element.activeElement=null,e.element.focusedElement=null})})}}}]),angular.module("LayoutEditor").directive("orcLayoutCanvas",["scopeConfigurator","environment",function(e,t){return{restrict:"E",scope:{element:"="},controller:["$scope","$element","$attrs",function(t,o,n){e.configureForElement(t,o),e.configureForContainer(t,o),t.sortableOptions.axis="y"}],templateUrl:t.templateUrl("Canvas"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutChild",["$compile",function(e){return{restrict:"E",scope:{element:"="},link:function(t,o){var n="",l=e(n)(t);$(o).replaceWith(l)}}}]),angular.module("LayoutEditor").directive("orcLayoutColumn",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="y"}],templateUrl:o.templateUrl("Column"),replace:!0,link:function(e,t,o){t.find(".layout-column-resize-bar").draggable({axis:"x",helper:"clone",revert:!0,start:function(t,o){e.$apply(function(){e.element.editor.isResizing=!0})},drag:function(o,n){var l=t.parent(),a=l.width()/e.element.width,r=!o.ctrlKey;if($(o.target).hasClass("layout-column-resize-bar-left")){var i=n.offset.left-l.offset().left;-a>i&&e.element.canExpandLeft(r)?e.$apply(function(){e.element.expandLeft(r)}):i>a&&e.element.canContractLeft(r)&&e.$apply(function(){e.element.contractLeft(r)})}else if($(o.target).hasClass("layout-column-resize-bar-right")){var i=n.offset.left-l.width()-l.offset().left;i>a&&e.element.canExpandRight(r)?e.$apply(function(){e.element.expandRight(r)}):-a>i&&e.element.canContractRight(r)&&e.$apply(function(){e.element.contractRight(r)})}},stop:function(t,o){e.$apply(function(){e.element.editor.isResizing=!1})}})}}}]),angular.module("LayoutEditor").directive("orcLayoutContent",["$sce","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(o,n){t.configureForElement(o,n),o.element.setHtml=function(t){o.element.html=t,o.element.htmlUnsafe=e.trustAsHtml(t)},o.element.setHtml(o.element.html)}],templateUrl:o.templateUrl("Content"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutGrid",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="y"}],templateUrl:o.templateUrl("Grid"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutRow",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="x",e.sortableOptions["ui-floating"]=!0}],templateUrl:o.templateUrl("Row"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutPopup",[function(){return{restrict:"A",link:function(e,t,o){var n=$(t),l=n.closest(".layout-popup-trigger"),a=n.closest(".layout-element");l.click(function(){n.toggle(),n.is(":visible")&&(n.position({my:o.orcLayoutPopupMy||"left top",at:o.orcLayoutPopupAt||"left bottom+4px",of:l}),n.find("input").first().focus())}),n.click(function(e){e.stopPropagation()}),a.click(function(e){n.hide()}),n.keydown(function(e){e.ctrlKey||e.shiftKey||e.altKey||27!=e.which||n.hide(),e.stopPropagation()}),n.on("cut copy paste",function(e){e.stopPropagation()})}}}]),angular.module("LayoutEditor").directive("orcLayoutToolbox",["$compile","environment",function(e,t){return{restrict:"E",controller:["$scope","$element",function(e,t){e.resetElements=function(){e.gridElements=[LayoutEditor.Grid.from({toolboxIcon:"",toolboxLabel:"Grid",toolboxDescription:"Empty grid.",children:[]})],e.rowElements=[LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (1 column)",toolboxDescription:"Row with 1 column.",children:LayoutEditor.Column.times(1)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (2 columns)",toolboxDescription:"Row with 2 columns.",children:LayoutEditor.Column.times(2)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (3 columns)",toolboxDescription:"Row with 3 columns.",children:LayoutEditor.Column.times(3)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (4 columns)",toolboxDescription:"Row with 4 columns.",children:LayoutEditor.Column.times(4)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (6 columns)",toolboxDescription:"Row with 6 columns.",children:LayoutEditor.Column.times(6)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (12 columns)",toolboxDescription:"Row with 12 columns.",children:LayoutEditor.Column.times(12)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (empty)",toolboxDescription:"Empty row.",children:[]})],e.columnElements=[LayoutEditor.Column.from({toolboxIcon:"",toolboxLabel:"Column",toolboxDescription:"Empty column.",width:1,offset:0,children:[]})],e.canvasElements=[LayoutEditor.Canvas.from({toolboxIcon:"",toolboxLabel:"Canvas",toolboxDescription:"Empty canvas.",children:[]})],e.contentElementCategories=_(e.element.config.categories).map(function(e){return{name:e.name,elements:_(e.contentTypes).map(function(e){var t=e.type,o=LayoutEditor.factories[t]||LayoutEditor.factories.Content,n={isTemplated:!1,contentType:e.id,contentTypeLabel:e.label,contentTypeClass:e.typeClass,data:null,hasEditor:e.hasEditor,html:e.html},l=o(n);return l.toolboxIcon=e.icon||"",l.toolboxLabel=e.label,l.toolboxDescription=e.description,l})}})},e.resetElements(),e.getSortableOptions=function(o){var n,l,a=t.closest(".layout-editor").attr("id"),r=!1;switch(o){case"Grid":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-container layout-grid ui-sortable-placeholder";break;case"Row":n=[".layout-grid"],l="layout-element layout-container layout-row row ui-sortable-placeholder";break;case"Column":n=[".layout-row:not(.layout-row-full)"],l="layout-element layout-container layout-column ui-sortable-placeholder",r=!0;break;case"Content":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-content ui-sortable-placeholder";break;case"Canvas":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-container layout-grid ui-sortable-placeholder"}return{cursor:"move",connectWith:_(n).map(function(e){return"#"+a+" "+e+":not(.layout-container-sealed) > .layout-element-wrapper > .layout-children"}).join(", "),placeholder:l,"ui-floating":r,helper:"clone",appendTo:"body",create:function(e,t){e.target.isToolbox=!0},start:function(t,o){e.$apply(function(){e.element.isDragging=!0})},stop:function(t,o){e.$apply(function(){e.element.isDragging=!1,e.resetElements()})},over:function(t,o){e.$apply(function(){e.element.canvas.setIsDropTarget(!1)})}}};var o="layoutToolboxCategory_Layout_IsCollapsed";e.layoutIsCollapsed="true"===$.cookie(o),e.toggleLayoutIsCollapsed=function(t){e.layoutIsCollapsed=!e.layoutIsCollapsed,$.cookie(o,e.layoutIsCollapsed,{expires:365}),t.preventDefault(),t.stopPropagation()}}],templateUrl:t.templateUrl("Toolbox"),replace:!0,link:function(e,t){var o=t.find(".layout-toolbox");$(window).on("resize scroll",function(e){var n=t.parent().find(".layout-canvas"),l=!!n&&n.height()>o.height(),a=$(window).scrollTop();l&&a>t.offset().top+t.height()-o.height()?(o.addClass("sticky-bottom"),o.removeClass("sticky-top")):l&&a>t.offset().top?(o.addClass("sticky-top"),o.removeClass("sticky-bottom")):(o.removeClass("sticky-top"),o.removeClass("sticky-bottom"))})}}}]),angular.module("LayoutEditor").directive("orcLayoutToolboxGroup",["$compile","environment",function(e,t){return{restrict:"E",scope:{category:"="},controller:["$scope","$element",function(e,t){var o="layoutToolboxCategory_"+e.category.name+"_IsCollapsed";e.isCollapsed="true"===$.cookie(o),e.toggleIsCollapsed=function(t){e.isCollapsed=!e.isCollapsed,$.cookie(o,e.isCollapsed,{expires:365}),t.preventDefault(),t.stopPropagation()}}],templateUrl:t.templateUrl("ToolboxGroup"),replace:!0}}]); \ No newline at end of file +angular.module("LayoutEditor",["ngSanitize","ngResource","ui.sortable"]);var LayoutEditor;!function(e){var t=function(){var e=this;this._clipboardData={},this._isDisabled=!1,this._wasInvoked=!1,this.setData=function(t,o){e._clipboardData[t]=o,e._wasInvoked=!0},this.getData=function(t){return e._wasInvoked=!0,e._clipboardData[t]},this.disable=function(){e._isDisabled=!0,e._wasInvoked=!1,e._clipboardData={}},this.isDisabled=function(){return e._isDisabled},this.wasInvoked=function(){return e._wasInvoked}};e.Clipboard=new t,angular.module("LayoutEditor").factory("clipboard",[function(){return{setData:e.Clipboard.setData,getData:e.Clipboard.getData,disable:e.Clipboard.disable,isDisabled:e.Clipboard.isDisabled,wasInvoked:e.Clipboard.wasInvoked}}])}(LayoutEditor||(LayoutEditor={})),angular.module("LayoutEditor").factory("scopeConfigurator",["$timeout","clipboard",function(e,t){return{configureForElement:function(e,o){o.find(".layout-panel").click(function(e){e.stopPropagation()}),o.parent().keydown(function(n){var l=!1,a=!1,r=e.element;if(!r.editor.isDragging){if(!t.isDisabled()){var i=r.editor.focusedElement;if(i&&n.ctrlKey)switch(n.which){case 67:i.copy(t);break;case 88:i.cut(t);break;case 86:i.paste(t)}}if(n.ctrlKey||n.shiftKey||n.altKey||46!=n.which?n.ctrlKey||n.shiftKey||n.altKey||32!=n.which&&27!=n.which||(o.find(".layout-panel-action-properties").first().click(),l=!0):(e["delete"](r),l=!0),r.hasEditor&&(n.ctrlKey||n.shiftKey||n.altKey||13!=n.which||(o.find(".layout-panel-action-edit").first().click(),l=!0)),r.children&&(n.ctrlKey||n.shiftKey||!n.altKey||40!=n.which||(r.children.length>0&&r.children[0].setIsFocused(),l=!0),"Column"==r.type)){var c=!n.ctrlKey;37==n.which?(n.altKey&&r.expandLeft(c),n.shiftKey&&r.contractRight(c),l=!0):39==n.which&&(n.altKey&&r.contractLeft(c),n.shiftKey&&r.expandRight(c),l=!0)}r.parent&&(n.altKey&&38==n.which&&(r.parent.setIsFocused(),l=!0),"Row"==r.parent.type?n.ctrlKey||n.shiftKey||n.altKey||37!=n.which?n.ctrlKey||n.shiftKey||n.altKey||39!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||37!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||39!=n.which||(r.moveDown(),l=!0):(r.moveUp(),a=!0,l=!0):(r.parent.moveFocusNextChild(r),l=!0):(r.parent.moveFocusPrevChild(r),l=!0):n.ctrlKey||n.shiftKey||n.altKey||38!=n.which?n.ctrlKey||n.shiftKey||n.altKey||40!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||38!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||40!=n.which||(r.moveDown(),l=!0):(r.moveUp(),a=!0,l=!0):(r.parent.moveFocusNextChild(r),l=!0):(r.parent.moveFocusPrevChild(r),l=!0)),l&&n.preventDefault(),n.stopPropagation(),e.$apply(),a&&window.setTimeout(function(){e.$apply(function(){r.editor.focusedElement.setIsFocused()})},100)}}),e.element.setIsFocusedEventHandlers.push(function(){o.parent().focus()}),e["delete"]=function(e){e["delete"]()},e.element.hasEditor&&(e.edit=function(){e.$root.editElement(e.element).then(function(t){e.$apply(function(){t.cancel||(e.element.data=t.element.data,e.element.applyElementEditorModel(t.elementEditorModel),e.element.setHtml&&e.element.setHtml(t.element.html))})})})},configureForContainer:function(t,o){var n=t.element;t.getShowChildrenPlaceholder=function(){return 0===t.element.children.length&&!t.element.getIsDropTarget()},t.sortableOptions={cursor:"move",delay:150,disabled:n.getIsSealed(),distance:5,start:function(e,o){t.$apply(function(){n.setIsDropTarget(!0),n.editor.isDragging=!0}),o.placeholder.height(o.item.height()-4),o.placeholder.css("min-height",0)},stop:function(e,o){t.$apply(function(){n.editor.isDragging=!1,n.setIsDropTarget(!1)})},over:function(t,l){l.sender&&l.sender[0].isToolbox&&(l.sender[0].dropTargetTimeout&&(e.cancel(l.sender[0].dropTargetTimeout),l.sender[0].dropTargetTimeout=null),e(function(){if("Row"==n.type){var e=n.editor.dropTargetElement;e&&"Row"==e.type&&e.rollbackAddColumn()}n.setIsDropTarget(!1)}),l.sender[0].dropTargetTimeout=e(function(){if("Row"==n.type){var e=l.item.sortable.model,t=Math.floor(12/(n.children.length+1));e.width=t,e.offset=0,n.beginAddColumn(t);var a=_.max(_(o.find("> .layout-children > .layout-column:not(.ui-sortable-placeholder)")).map(function(e){return $(e).height()}));for(i=1;i<=12;i++)l.placeholder.removeClass("col-xs-"+i);l.placeholder.addClass("col-xs-"+e.width),a>0?(l.placeholder.height(a),l.placeholder.css("min-height",0)):(l.placeholder.height(0),l.placeholder.css("min-height",""))}n.setIsDropTarget(!0)},150))},receive:function(o,l){l.sender&&l.sender[0].isToolbox&&t.$apply(function(){var o=l.item.sortable.model;o&&("Row"==n.type&&n.commitAddColumn(),o.setEditor(n.editor),o.setParent(n),o.hasEditor&&t.$root.editElement(o).then(function(t){t.cancel||(o.data=t.element.data,o.applyElementEditorModel(t.elementEditorModel),o.setHtml&&o.setHtml(t.element.html)),e(function(){t.cancel?o["delete"]():o.setIsFocused(),n.setIsDropTarget(!1)})})),e(function(){n.setIsDropTarget(!1),o&&o.setIsFocused()})})}},t.click=function(e,t){e.editor.isDragging||e.setIsFocused(),t.stopPropagation()},t.getClasses=function(e){var t=["layout-element"];return e.children&&(t.push("layout-container"),e.getIsSealed()&&t.push("layout-container-sealed")),t.push("layout-"+e.type.toLowerCase()),e.dropTargetClass&&t.push(e.dropTargetClass),"Row"==e.type&&(t.push("row"),e.canAddColumn()||t.push("layout-row-full")),"Column"==e.type&&(t.push("col-xs-"+e.width),t.push("col-xs-offset-"+e.offset)),"Content"==e.type&&t.push("layout-content-"+e.contentTypeClass),e.getIsActive()&&t.push("layout-element-active"),e.getIsFocused()&&t.push("layout-element-focused"),e.getIsSelected()&&t.push("layout-element-selected"),e.getIsDropTarget()&&t.push("layout-element-droptarget"),e.isTemplated&&t.push("layout-element-templated"),t}}}}]),angular.module("LayoutEditor").directive("orcLayoutEditor",["environment",function(environment){return{restrict:"E",scope:{},controller:["$scope","$element","$attrs","$compile","clipboard",function($scope,$element,$attrs,$compile,clipboard){if(!$attrs.model)throw new Error("The 'model' attribute must evaluate to a LayoutEditor.Editor object.");$scope.element=eval($attrs.model),$scope.click=function(e,t){e.editor.isDragging||e.setIsFocused(),t.stopPropagation()},$scope.getClasses=function(e){var t=["layout-element","layout-container","layout-canvas"];return e.getIsActive()&&t.push("layout-element-active"),e.getIsFocused()&&t.push("layout-element-focused"),e.getIsSelected()&&t.push("layout-element-selected"),e.getIsDropTarget()&&t.push("layout-element-droptarget"),e.isTemplated&&t.push("layout-element-templated"),t};var layoutDesignerHost=$(".layout-designer").data("layout-designer-host");$scope.$root.layoutDesignerHost=layoutDesignerHost,layoutDesignerHost.element.on("replacecanvas",function(e,t){var o=$scope.element,n={data:t.canvas.data,htmlId:t.canvas.htmlId,htmlClass:t.canvas.htmlClass,htmlStyle:t.canvas.htmlStyle,isTemplated:t.canvas.isTemplated,children:t.canvas.children};layoutDesignerHost.editor=window.layoutEditor=new LayoutEditor.Editor(o.config,n);var l="",a=$compile(l)($scope);$(".layout-editor-holder").html(a)}),$scope.$root.editElement=function(e){var t=$scope.$root.layoutDesignerHost;return t.editElement(e)},$scope.$root.addElement=function(e){var t=$scope.$root.layoutDesignerHost;return t.addElement(e)},$(document).on("cut copy paste",function(e){if(clipboard.wasInvoked())e.originalEvent.clipboardData.setData("text/plain",clipboard.getData("text/plain")),e.originalEvent.clipboardData.setData("text/json",clipboard.getData("text/json")),e.preventDefault();else{var t=$scope.element.focusedElement;t&&($scope.$apply(function(){switch(e.type){case"copy":t.copy(e.originalEvent.clipboardData);break;case"cut":t.cut(e.originalEvent.clipboardData);break;case"paste":t.paste(e.originalEvent.clipboardData)}}),window.setTimeout(function(){$scope.$apply(function(){$scope.element.focusedElement&&$scope.element.focusedElement.setIsFocused()})},100),e.preventDefault())}clipboard.disable()})}],templateUrl:environment.templateUrl("Editor"),replace:!0,link:function(e,t){t.find(".layout-toolbar-container").click(function(e){e.stopPropagation()}),$(window).click(function(t){e.$apply(function(){e.element.activeElement=null,e.element.focusedElement=null})})}}}]),angular.module("LayoutEditor").directive("orcLayoutCanvas",["scopeConfigurator","environment",function(e,t){return{restrict:"E",scope:{element:"="},controller:["$scope","$element","$attrs",function(t,o,n){e.configureForElement(t,o),e.configureForContainer(t,o),t.sortableOptions.axis="y"}],templateUrl:t.templateUrl("Canvas"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutChild",["$compile",function(e){return{restrict:"E",scope:{element:"="},link:function(t,o){var n="",l=e(n)(t);$(o).replaceWith(l)}}}]),angular.module("LayoutEditor").directive("orcLayoutColumn",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="y"}],templateUrl:o.templateUrl("Column"),replace:!0,link:function(e,t,o){t.find(".layout-column-resize-bar").draggable({axis:"x",helper:"clone",revert:!0,start:function(t,o){e.$apply(function(){e.element.editor.isResizing=!0})},drag:function(o,n){var l=t.parent(),a=l.width()/e.element.width,r=!o.ctrlKey;if($(o.target).hasClass("layout-column-resize-bar-left")){var i=n.offset.left-l.offset().left;-a>i&&e.element.canExpandLeft(r)?e.$apply(function(){e.element.expandLeft(r)}):i>a&&e.element.canContractLeft(r)&&e.$apply(function(){e.element.contractLeft(r)})}else if($(o.target).hasClass("layout-column-resize-bar-right")){var i=n.offset.left-l.width()-l.offset().left;i>a&&e.element.canExpandRight(r)?e.$apply(function(){e.element.expandRight(r)}):-a>i&&e.element.canContractRight(r)&&e.$apply(function(){e.element.contractRight(r)})}},stop:function(t,o){e.$apply(function(){e.element.editor.isResizing=!1})}})}}}]),angular.module("LayoutEditor").directive("orcLayoutContent",["$sce","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(o,n){t.configureForElement(o,n),o.element.setHtml=function(t){o.element.html=t,o.element.htmlUnsafe=e.trustAsHtml(t)},o.element.setHtml(o.element.html)}],templateUrl:o.templateUrl("Content"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutGrid",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="y"}],templateUrl:o.templateUrl("Grid"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutRow",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="x",e.sortableOptions["ui-floating"]=!0}],templateUrl:o.templateUrl("Row"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutPopup",[function(){return{restrict:"A",link:function(e,t,o){var n=$(t),l=n.closest(".layout-popup-trigger"),a=n.closest(".layout-element");l.click(function(){n.toggle(),n.is(":visible")&&(n.position({my:o.orcLayoutPopupMy||"left top",at:o.orcLayoutPopupAt||"left bottom+4px",of:l}),n.find("input").first().focus())}),n.click(function(e){e.stopPropagation()}),a.click(function(e){n.hide()}),n.keydown(function(e){e.ctrlKey||e.shiftKey||e.altKey||27!=e.which||n.hide(),e.stopPropagation()}),n.on("cut copy paste",function(e){e.stopPropagation()})}}}]),angular.module("LayoutEditor").directive("orcLayoutToolbox",["$compile","environment",function(e,t){return{restrict:"E",controller:["$scope","$element",function(e,t){e.resetElements=function(){e.gridElements=[LayoutEditor.Grid.from({toolboxIcon:"",toolboxLabel:"Grid",toolboxDescription:"Empty grid.",children:[]})],e.rowElements=[LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (1 column)",toolboxDescription:"Row with 1 column.",children:LayoutEditor.Column.times(1)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (2 columns)",toolboxDescription:"Row with 2 columns.",children:LayoutEditor.Column.times(2)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (3 columns)",toolboxDescription:"Row with 3 columns.",children:LayoutEditor.Column.times(3)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (4 columns)",toolboxDescription:"Row with 4 columns.",children:LayoutEditor.Column.times(4)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (6 columns)",toolboxDescription:"Row with 6 columns.",children:LayoutEditor.Column.times(6)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (12 columns)",toolboxDescription:"Row with 12 columns.",children:LayoutEditor.Column.times(12)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (empty)",toolboxDescription:"Empty row.",children:[]})],e.columnElements=[LayoutEditor.Column.from({toolboxIcon:"",toolboxLabel:"Column",toolboxDescription:"Empty column.",width:1,offset:0,children:[]})],e.canvasElements=[LayoutEditor.Canvas.from({toolboxIcon:"",toolboxLabel:"Canvas",toolboxDescription:"Empty canvas.",children:[]})],e.contentElementCategories=_(e.element.config.categories).map(function(e){return{name:e.name,elements:_(e.contentTypes).map(function(e){var t=e.type,o=LayoutEditor.factories[t]||LayoutEditor.factories.Content,n={isTemplated:!1,contentType:e.id,contentTypeLabel:e.label,contentTypeClass:e.typeClass,data:null,hasEditor:e.hasEditor,html:e.html},l=o(n);return l.toolboxIcon=e.icon||"",l.toolboxLabel=e.label,l.toolboxDescription=e.description,l})}})},e.resetElements(),e.getSortableOptions=function(o){var n,l,a=t.closest(".layout-editor").attr("id"),r=!1;switch(o){case"Grid":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-container layout-grid ui-sortable-placeholder";break;case"Row":n=[".layout-grid"],l="layout-element layout-container layout-row row ui-sortable-placeholder";break;case"Column":n=[".layout-row:not(.layout-row-full)"],l="layout-element layout-container layout-column ui-sortable-placeholder",r=!0;break;case"Content":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-content ui-sortable-placeholder";break;case"Canvas":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-container layout-grid ui-sortable-placeholder"}return{cursor:"move",connectWith:_(n).map(function(e){return"#"+a+" "+e+":not(.layout-container-sealed) > .layout-element-wrapper > .layout-children"}).join(", "),placeholder:l,"ui-floating":r,helper:"clone",appendTo:"body",create:function(e,t){e.target.isToolbox=!0},start:function(t,o){e.$apply(function(){e.element.isDragging=!0})},stop:function(t,o){e.$apply(function(){e.element.isDragging=!1,e.resetElements()})},over:function(t,o){e.$apply(function(){e.element.canvas.setIsDropTarget(!1)})}}};var o="layoutToolboxCategory_Layout_IsCollapsed";e.layoutIsCollapsed="true"===$.cookie(o),e.toggleLayoutIsCollapsed=function(t){e.layoutIsCollapsed=!e.layoutIsCollapsed,$.cookie(o,e.layoutIsCollapsed,{expires:365}),t.preventDefault(),t.stopPropagation()}}],templateUrl:t.templateUrl("Toolbox"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutToolboxGroup",["$compile","environment",function(e,t){return{restrict:"E",scope:{category:"="},controller:["$scope","$element",function(e,t){var o="layoutToolboxCategory_"+e.category.name+"_IsCollapsed";e.isCollapsed="true"===$.cookie(o),e.toggleIsCollapsed=function(t){e.isCollapsed=!e.isCollapsed,$.cookie(o,e.isCollapsed,{expires:365}),t.preventDefault(),t.stopPropagation()}}],templateUrl:t.templateUrl("ToolboxGroup"),replace:!0}}]); \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css index a196a695829..5f36c6bbb26 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css @@ -23,12 +23,11 @@ display: flex; margin-top: 1em; font-size: 14px; - -ms-flex-align: stretch; - align-items: stretch; } .layout-editor > .layout-canvas-wrapper { - -ms-flex-positive: 1; - flex-grow: 1; + -ms-flex: 1 1; + flex: 1 1; + height: fit-content; background-color: #f3f4f5; border: 1px solid #e4e5e6; } @@ -1005,49 +1004,21 @@ body .layout-toolbox-item + .layout-toolbox-item { margin-top: 4px; } .layout-editor > .layout-toolbox-wrapper { - margin-left: 12px; - width: 218px; - -ms-flex-negative: 0; - flex-shrink: 0; - /* forcing the toolbox height to be smaller than the viewport height - so it is always visible and scrollable*/ - max-height: calc(20vh); - overflow-x: clip; - overflow-y: auto; - /* forcing the toolbox to stay sticked at the the top of its container */ position: sticky; - top: 0; -} -.layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar { - width: 2px; -} -.layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar-track { - -webkit-box-shadow: inset 0 0 6px #000000; - border-radius: 1px; -} -.layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar-thumb { - background-color: rgba(0, 0, 0, 0.3); + top: 1vh; + padding-left: 12px; + width: 220px; + overflow-y: auto; + scrollbar-width: thin; + min-height: 400px; + max-height: 98vh; + height: 100%; } .layout-editor > .layout-toolbox-wrapper > .layout-toolbox { border: 1px solid #e4e5e6; - width: 220px; - min-height: 400px; padding: 6px; background-color: #f3f4f5; } -.layout-editor > .layout-toolbox-wrapper > .layout-toolbox.sticky-top { - position: fixed; - top: 0; - max-height: 100%; - overflow-y: auto; -} -.layout-editor > .layout-toolbox-wrapper > .layout-toolbox.sticky-bottom { - position: absolute; - bottom: 0; -} -.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group { - margin-top: 12px; -} .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading { display: block; margin-bottom: 4px; @@ -1139,4 +1110,4 @@ body .layout-toolbox-item + .layout-toolbox-item { font-size: 0.9em; } -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxheW91dEVkaXRvci5jc3MiLCJFZGl0b3IubGVzcyIsIkVsZW1lbnQubGVzcyIsIkNvbnRhaW5lci5sZXNzIiwiQ2FudmFzLmxlc3MiLCJSb3cubGVzcyIsIkNvbHVtbi5sZXNzIiwiQ29udGVudC5sZXNzIiwiUmVzZXQubGVzcyIsIlRvb2xib3gubGVzcyIsIlBvcHVwLmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFDSEE7RUFDSSxxQkFBQTtFQUFBLGNBQUE7RUFDQSx1QkFBQTtNQUFBLCtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxVQUFBO0NEREg7QUNIRDtFQU9RLHFCQUFBO0VBQUEsY0FBQTtDRERQO0FDTkQ7RUFVWSxrQkFBQTtDRERYO0FDTUQ7RUFDSSxxQkFBQTtFQUFBLGNBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0VBQ0Esd0JBQUE7TUFBQSxxQkFBQTtDREpIO0FDQUQ7RUFPUSxxQkFBQTtNQUFBLGFBQUE7RUFDQSwwQkFBQTtFQUNBLDBCQUFBO0NESlA7QUNMRDtFQVlZLGNBQUE7RUFDQSxvQkFBQTtFQUNBLGlCQUFBO0NESlg7QUNWRDtFQWlCZ0IsdUJBQUE7Q0RKZjtBQ2JEO0VBc0JZLHdCQUFBO0VBQ0EscUJBQUE7RUFDQSxvQkFBQTtDRE5YO0FDbEJEO0VBNkJRLG9CQUFBO0NEUlA7QUNZRDtFQUNJLGNBQUE7Q0RWSDtBQ2FPOztFQUNJLGFBQUE7RUFDQSxlQUFBO0NEVlg7QUNhTztFQUNJLFlBQUE7Q0RYWDtBQ0NEOztFQWNZLGdCQUFBO0NEWFg7QUNIRDtFQWtCWSx1QkFBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0NEWlg7QUNjVztFQUNJLG9CQUFBO0VBQ0EsWUFBQTtDRFpmO0FDWkQ7RUE2QlksZ0JBQUE7Q0RkWDtBQ2ZEO0VBa0NRLG1CQUFBO0VBQ0EsMEJBQUE7RUFDQSxpQkFBQTtFQUNBLHVCQUFBO0NEaEJQO0FDckJEO0VBeUNRLHFCQUFBO0VBQ0EsbUJBQUE7Q0RqQlA7QUN6QkQ7RUE4Q1Esb0JBQUE7Q0RsQlA7O0FFNUVEO0VBRVEsbUJBQUE7RUFDQSxjQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLFdBQUE7Q0Y4RVA7QUUzRU87RUFDSSxlQUFBO0NGNkVYO0FFdkZEO0VBZWdCLGNBQUE7RUFDQSxtQkFBQTtFQUNBLFVBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0Esa0JBQUE7RUFDQSx1QkFBQTtDRjJFZjtBRW5HRDtFQTJCb0Isc0JBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7Q0YyRW5CO0FFeEdEO0VBaUNvQixnQkFBQTtDRjBFbkI7QUUzR0Q7RUFxQ29CLGNBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxtQkFBQTtDRnlFbkI7QUVqSEQ7RUE2Q2dCLFdBQUE7RUFDQSxXQUFBO0NGdUVmO0FFckhEO0VBcURRLGlCQUFBO0NGbUVQO0FFaEVHOztFQUdRLGtCQUFBO0VBQ0Esb0JBQUE7Q0ZpRVg7QUVyRUc7O0VBT1ksYUFBQTtDRmtFZjtBRXpFRztFQWNRLHVDQUFBO0NGOERYO0FFNUVHO0VBaUJZLGVBQUE7RUFDQSxZQUFBO0VBQ0EsMkNBQUE7Q0Y4RGY7QUVqRkc7RUEyQlEsc0JBQUE7Q0Z5RFg7QUVwRkc7RUE4QlksZUFBQTtFQUNBLDBCQUFBO0VBQ0EsZUFBQTtDRnlEZjtBRXpGRztFQW1DZ0Isc0JBQUE7Q0Z5RG5CO0FFeERtQjtFQUNJLDBCQUFBO0NGMER2QjtBRXZEbUI7RUFDSSxnQkFBQTtFQUNBLGdDQUFBO0NGeUR2QjtBRXZEdUI7RUFDSSwwQkFBQTtDRnlEM0I7QUVyRG1CO0VBQ0ksZUFBQTtFQUNBLDBCQUFBO0NGdUR2QjtBRXJEdUI7RUFDSSwwQkFBQTtDRnVEM0I7QUU3R0c7RUErRFEsMkNBQUE7Q0ZpRFg7QUV4S0Q7RUE0SFEsY0FBQTtDRitDUDtBRTNLRDtFQWlJUSx1REFBQTtDRjZDUDtBRTlLRDtFQW9JWSxlQUFBO0VBQ0EsK0JBQUE7RUFDQSxpQkFBQTtFQUNBLHNDQUFBO0VBQ0EsMkNBQUE7Q0Y2Q1g7QUVyTEQ7RUErSVksZ0JBQUE7RUFDQSxpQkFBQTtDRnlDWDs7QUd6TEQ7RUFNZ0IsY0FBQTtFQUNBLDJCQUFBO01BQUEsdUJBQUE7RUFDQSxhQUFBO0VBQ0EsaUJBQUE7RUFDQSw0Q0FBQTtFQUNBLG1CQUFBO0VBQ0EsY0FBQTtFQUNBLHNCQUFBO01BQUEsd0JBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0VBQ0EsYUFBQTtFQUNBLG1CQUFBO0NIdUxmO0FHeE1EO0VBcUJnQixjQUFBO0NIc0xmO0FHM01EO0VBeUJvQixpQkFBQTtDSHFMbkI7QUc5TUQ7RUE4Qm9CLGNBQUE7Q0htTG5CO0FHL0tXO0VBRVEscUJBQUE7RUFBQSxjQUFBO0NIZ0xuQjtBR2xMVztFQU1RLG1CQUFBO0VBQ0EsT0FBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0VBQ0EsUUFBQTtDSCtLbkI7QUd6S0c7RUFHWSw0Q0FBQTtDSHlLZjtBRzVLRztFQU1nQixhQUFBO0NIeUtuQjtBRy9LRztFQVdZLGNBQUE7Q0h1S2Y7QUdsTEc7RUFjZ0IsY0FBQTtDSHVLbkI7O0FJdk9EO0VBR1ksY0FBQTtDSndPWDs7QUt6T087RUFFUSwyREFBQTtDTDJPZjtBSzdPTztFQUlZLDRCQUFBO0NMNE9uQjtBS2hQTztFQVNRLDBCQUFBO0NMME9mO0FLblBPO0VBV1ksMEJBQUE7Q0wyT25COztBTXhQRDtFQUlnQixjQUFBO0VBQ0EsbUJBQUE7RUFDQSxZQUFBO0VBQ0EsT0FBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7Q053UGY7QU1sUUQ7RUFjZ0IsV0FBQTtDTnVQZjtBTXJRRDtFQWtCZ0IsWUFBQTtDTnNQZjtBTWxQTztFQUNJLGVBQUE7Q05vUFg7O0FPMVFEOztFQUVRLGdCQUFBO0NQNlFQO0FPL1FEOztFQU9nQixhQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFUDRRZCx5RkFBeUY7RUFDekYscUNBQXFDO0VBQ3JDLHFDQUFxQztFQUNyQyx1REFBdUQ7RUFDdkQsd0RBQXdEO0VBQ3hEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCQztDQUNGO0FPclREOztFQ0FRLFVBQUE7RUFDQSxXQUFBO0VBQ0Esd0JBQUE7Q1J5VFA7QU8zVEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VDT1EsZUFBQTtDUnNWUDtBTzdWRDs7Ozs7Ozs7Ozs7Ozs7RUNXUSxnQkFBQTtFQUNBLG1CQUFBO0NSa1dQO0FPOVdEOzs7O0VDZ0JRLGtCQUFBO0VBQ0EsbUJBQUE7Q1JvV1A7QU9yWEQ7O0VDcUJRLG1CQUFBO0NSb1dQO0FPelhEOzs7Ozs7OztFQ3lCUSx1QkFBQTtFQUNBLGlCQUFBO0NSMFdQO0FPcFlEOzs7Ozs7Ozs7O0VDOEJRLG1CQUFBO0NSa1hQO0FPaFpEOzs7O0VDa0NRLG9CQUFBO0NSb1hQO0FPdFpEOzs7Ozs7OztFQ3NDUSx1QkFBQTtDUjBYUDtBT2hhRDs7RUMwQ1Esa0JBQUE7Q1IwWFA7QU9wYUQ7O0VDOENRLG1CQUFBO0NSMFhQO0FPeGFEOztFQ2tEUSxvQkFBQTtDUjBYUDtBTzVhRDs7RUNzRFEsc0JBQUE7Q1IwWFA7QU9oYkQ7Ozs7RUMwRFEsb0JBQUE7RUFDQSxtQkFBQTtDUjRYUDtBT3ZiRDs7RUNnRVEsY0FBQTtDUjJYUDtBTzNiRDs7RUNvRVEsbUJBQUE7RUFDQSxvQkFBQTtDUjJYUDtBT2hjRDs7RUN5RVEsbUJBQUE7RUFDQSxvQkFBQTtFQUNBLGVBQUE7RUFDQSw4QkFBQTtFQUNBLG9CQUFBO0NSMlhQO0FPeGNEOztFQ2lGUSw2QkFBQTtDUjJYUDtBTzVjRDs7RUNxRlEsNkJBQUE7Q1IyWFA7QU9oZEQ7Ozs7Ozs7Ozs7RUN5RlEsc0JBQUE7Q1JtWVA7QU81ZEQ7O0VDOEZRLGVBQUE7Q1JrWVA7QU9oZUQ7O0VDa0dRLGVBQUE7Q1JrWVA7QU9wZUQ7Ozs7RUNzR1EsMkJBQUE7Q1JvWVA7QU8xZUQ7Ozs7Ozs7O0VDMkdRLGFBQUE7Q1J5WVA7QU9wZkQ7O0VDK0dRLGNBQUE7Q1J5WVA7QU94ZkQ7O0VDbUhRLG1CQUFBO0VBQ0EsYUFBQTtDUnlZUDtBTzdmRDs7OztFQ3dIUSxrQ0FBQTtDUjJZUDtBT25nQkQ7Ozs7RUM0SFEsMkJBQUE7Q1I2WVA7QU96Z0JEOzs7Ozs7RUNnSVEsOEJBQUE7Q1JpWlA7QU9qaEJEOztFQ29JUSx1QkFBQTtDUmlaUDtBT3JoQkQ7O0VDd0lRLG9CQUFBO0NSaVpQO0FPemhCRDs7RUM0SVEscUJBQUE7Q1JpWlA7QU83aEJEOztFQ2dKUSxjQUFBO0VBQ0EsaUJBQUE7Q1JpWlA7QU9saUJEOztFQ3FKUSxvQkFBQTtDUmlaUDtBT3RpQkQ7O0VDeUpRLGlCQUFBO0NSaVpQO0FPMWlCRDs7RUM2SlEsb0JBQUE7Q1JpWlA7QU85aUJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VDaUtRLGVBQUE7Q1JxYVA7QU90a0JEOztFQ3FLUSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtDUnFhUDtBTzdrQkQ7O0VDNEtRLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0NScWFQO0FPcGxCRDs7RUNtTFEsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7Q1JxYVA7QU8zbEJEOztFQzBMUSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtDUnFhUDtBT2xtQkQ7O0VDaU1RLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0NScWFQO0FPem1CRDs7RUN3TVEsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7Q1JxYVA7QU9obkJEOzs7Ozs7Ozs7Ozs7RUMrTVEsZUFBQTtDUithUDtBTzluQkQ7O0VDbU5RLG1CQUFBO0NSK2FQO0FPbG9CRDs7Ozs7Ozs7RUN1TlEsZ0JBQUE7RUFDQSxtQkFBQTtDUnFiUDtBTzdvQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VDK05ZLGNBQUE7RUFDQSxpQkFBQTtDUmdkWDtBT2hyQkQ7O0VDb09RLGtCQUFBO0NSZ2RQO0FPcHJCRDs7Ozs7O0VDd09RLG1CQUFBO0NSb2RQO0FPNXJCRDs7RUM0T1EseUJBQUE7Q1JvZFA7QU9oc0JEOzs7O0VDZ1BRLHNCQUFBO0NSc2RQO0FPdHNCRDs7Ozs7Ozs7Ozs7O0VDc1BZLHdCQUFBO0NSOGRYO0FPcHRCRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VDa1FnQix3QkFBQTtDUndmZjtBTzF2QkQ7O0VDc1FRLGVBQUE7Q1J3ZlA7QU85dkJEOztFQzBRUSx1QkFBQTtDUndmUDtBT2x3QkQ7Ozs7RUM4UVEsNEJBQUE7Q1IwZlA7QU94d0JEOzs7O0VDa1JRLHNCQUFBO0NSNGZQO0FPOXdCRDs7OztFQ3NSUSw0QkFBQTtDUjhmUDtBT3B4QkQ7Ozs7RUMwUlEseUJBQUE7Q1JnZ0JQO0FPMXhCRDs7OztFQzhSUSw0QkFBQTtDUmtnQlA7QU9oeUJEOzs7O0VDa1NRLG1CQUFBO0NSb2dCUDtBT3R5QkQ7Ozs7Ozs7O0VDc1NRLG9CQUFBO0NSMGdCUDtBT2h6QkQ7Ozs7Ozs7Ozs7Ozs7Ozs7RUMyU1kscUJBQUE7Q1J1aEJYO0FPbDBCRDs7RUMrU1EsdUJBQUE7RUFDQSxvQkFBQTtFQUNBLDBCQUFBO0VBQ0EscUJBQUE7Q1J1aEJQO0FPejBCRDs7OztFQ3NUUSxhQUFBO0NSeWhCUDtBTy8wQkQ7O0VDMFRRLGtCQUFBO0NSeWhCUDtBT24xQkQ7Ozs7Ozs7O0VDOFRRLHVCQUFBO0NSK2hCUDtBTzcxQkQ7Ozs7OztFQ2tVUSx3QkFBQTtDUm1pQlA7QU9yMkJEOzs7Ozs7RUNzVVEsbUJBQUE7Q1J1aUJQO0FPNzJCRDs7Ozs7Ozs7RUMwVVEsc0JBQUE7Q1I2aUJQO0FPdjNCRDs7Ozs7Ozs7Ozs7Ozs7RUN3V1EscUJBQUE7Q1IraEJQO0FPdjRCRDs7RUM0V1Esc0JBQUE7Q1IraEJQO0FPMzRCRDs7Ozs7Ozs7Ozs7Ozs7RUNpWFEsdUJBQUE7Q1IwaUJQO0FPMzVCRDs7OztFQ3FYUSxxQkFBQTtDUjRpQlA7QU9qNkJEOztFQ3lYUSxZQUFBO0VBQ0Esb0JBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0NSNGlCUDtBT3g2QkQ7O0VDZ1lRLGlCQUFBO0VBQ0Esa0JBQUE7RUFDQSw4QkFBQTtFQUNBLCtCQUFBO0NSNGlCUDtBTy82QkQ7O0VDdVlRLGtCQUFBO0VBQ0EsbUJBQUE7Q1I0aUJQO0FPcDdCRDs7RUFlb0IseUJBQUE7Q1B5NkJuQjtBT3g3QkQ7O0VBbUJvQiw0QkFBQTtDUHk2Qm5CO0FPcDZCTzs7OztFQUVRLGVBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxhQUFBO0NQdzZCZjtBT3I4QkQ7O0VBbUNRLGVBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxhQUFBO0NQczZCUDs7QVM3OEJEO0VBRVEsMEJBQUE7RUFDQSx1QkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxzQkFBQTtDVCs4QlA7QVNyOUJEO0VBU1ksc0JBQUE7RUFDQSxZQUFBO0VBQ0EsOENBQUE7Q1QrOEJYO0FTMTlCRDtFQWVZLGdCQUFBO0NUODhCWDtBU3o4QkQ7RUFFUSxrQkFBQTtFQUNBLGFBQUE7RUFFQSxxQkFBQTtFQUNBLGVBQUE7RVQwOEJOO29EQUNrRDtFU3g4QjVDLHVCQUFBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtFVDA4Qk4seUVBQXlFO0VTdjhCbkUsaUJBQUE7RUFDQSxPQUFBO0NUMDhCUDtBU3g4Qk87RUFDSSxXQUFBO0NUMDhCWDtBU3Y4Qk87RUFDSSwwQ0FBQTtFQUNBLG1CQUFBO0NUeThCWDtBU3Q4Qk87RUFDSSxxQ0FBQTtDVHc4Qlg7QVNuK0JEO0VBK0JZLDBCQUFBO0VBQ0EsYUFBQTtFQUNBLGtCQUFBO0VBQ0EsYUFBQTtFQUNBLDBCQUFBO0NUdThCWDtBU3I4Qlc7RUFDSSxnQkFBQTtFQUNBLE9BQUE7RUFDQSxpQkFBQTtFQUNBLGlCQUFBO0NUdThCZjtBU3A4Qlc7RUFDSSxtQkFBQTtFQUNBLFVBQUE7Q1RzOEJmO0FTcC9CRDtFQWtEZ0IsaUJBQUE7Q1RxOEJmO0FTdi9CRDtFQXFEb0IsZUFBQTtFQUNBLG1CQUFBO0VBQ0Esc0JBQUE7Q1RxOEJuQjtBU244Qm1CO0VBQ0ksc0JBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7RUFDQSw4Q0FBQTtFQUNBLG1CQUFBO0VBQ0EsaUJBQUE7Q1RxOEJ2QjtBU2o4QmU7RUFFUSxpQkFBQTtDVGs4QnZCO0FTcDhCZTtFQU1RLGNBQUE7Q1RpOEJ2QjtBUzFnQ0Q7RUE4RW9CLGdCQUFBO0NUKzdCbkI7QVM3Z0NEO0VBa0ZvQiwwQkFBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtDVDg3Qm5CO0FTbmhDRDtFQXdGd0Isc0JBQUE7RUFDQSxZQUFBO0VBQ0EsOENBQUE7Q1Q4N0J2QjtBU3hoQ0Q7RUE4RndCLGdCQUFBO0NUNjdCdkI7QVMzaENEO0VBbUdvQixnQkFBQTtDVDI3Qm5COztBVWxqQ0Q7RUFFUSxjQUFBO0VBQ0EsbUJBQUE7RUFDQSxVQUFBO0VBR0EsaURBQUE7RUFDQSwwQkFBQTtFQUNBLGVBQUE7RUFDQSwwQkFBQTtFQUNBLGlCQUFBO0VBQ0EsWUFBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0Esb0JBQUE7RUFDQSxvQkFBQTtFQUNBLGlCQUFBO0NWb2pDUDtBVWxqQ087RUFDSSxhQUFBO0NWb2pDWDtBVXprQ0Q7RUF5QlkscUJBQUE7RUFBQSxjQUFBO0VBQ0EsaUJBQUE7Q1ZtakNYO0FVN2tDRDtFQTZCZ0IsaUJBQUE7RUFDQSxpREFBQTtFQUNBLGtCQUFBO0NWbWpDZjtBVWxsQ0Q7RUFvQ1ksaUJBQUE7Q1ZpakNYO0FVcmxDRDtFQXdDWSxpQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZUFBQTtDVmdqQ1g7QVUxbENEO0VBOENZLDBCQUFBO0VBQ0EsZ0JBQUE7Q1YraUNYO0FVOWxDRDs7RUFvRGdCLFlBQUE7Q1Y4aUNmO0FVbG1DRDtFQXdEZ0IsZUFBQTtFQUNBLGlCQUFBO0NWNmlDZiIsImZpbGUiOiJMYXlvdXRFZGl0b3IuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmxheW91dC1lZGl0b3ItdG9vbGJhciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDEwcHg7XG59XG4ubGF5b3V0LWVkaXRvci10b29sYmFyIC5sYXlvdXQtZWRpdG9yLXRvb2xiYXItZ3JvdXAge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmxheW91dC1lZGl0b3ItdG9vbGJhciAubGF5b3V0LWVkaXRvci10b29sYmFyLWdyb3VwID4gbGkgKyBsaSB7XG4gIG1hcmdpbi1sZWZ0OiAxMnB4O1xufVxuLmxheW91dC1lZGl0b3Ige1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW4tdG9wOiAxZW07XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtY2FudmFzLXdyYXBwZXIge1xuICBmbGV4LWdyb3c6IDE7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNGU1ZTY7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtY2FudmFzLXdyYXBwZXIgPiAubGF5b3V0LXRvb2xiYXItY29udGFpbmVyIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgbWFyZ2luOiAxMnB4IDEycHggMDtcbiAgbWluLWhlaWdodDogNzFweDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC1jYW52YXMtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJhci1jb250YWluZXIgPiAubWNlLXBhbmVsIHtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC1jYW52YXMtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gLmxheW91dC1wbGFjZWhvbGRlciB7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCAjY2NjO1xuICBwYWRkaW5nOiAwLjJlbSAwLjRlbTtcbiAgYmFja2dyb3VuZDogI2U4ZThlODtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtc25pcHBldCB7XG4gIGJhY2tncm91bmQ6ICNlOGU4ZTg7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyAuaGVscC1yb3c6YmVmb3JlLFxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93OmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyAuaGVscC1yb3cgPiAuaGVscC1jb2x1bW4tZnVsbCxcbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyA+IC5oZWxwLWNvbHVtbi1oYWxmIHtcbiAgbWFyZ2luOiAwLjVlbSAwO1xufVxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93ID4gLmhlbHAtY29sdW1uLWhhbGYge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDUwJTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyA+IC5oZWxwLWNvbHVtbi1oYWxmOm50aC1jaGlsZCgybikge1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICBjbGVhcjogbGVmdDtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyArIC5oZWxwLXJvdyB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIGNvZGUge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjU7XG4gIHBhZGRpbmc6IDJweCA0cHg7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyBwIHtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjZlbTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIHRhYmxlID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkIHtcbiAgcGFkZGluZy1yaWdodDogMTBweDtcbn1cblxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHBhZGRpbmc6IDA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29sdW1uKSB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW46IDA7XG4gIHotaW5kZXg6IDIwO1xuICBoZWlnaHQ6IDI1cHg7XG4gIHBhZGRpbmc6IDAgNnB4O1xuICBsaXN0LXN0eWxlOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBsaW5lLWhlaWdodDogMjVweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtZWxlbWVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtaXRlbSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiAyNXB4O1xuICBwYWRkaW5nOiAxcHggNnB4IDA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWxhYmVsIHtcbiAgZm9udC1zaXplOiAxM3B4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24ge1xuICBkaXNwbGF5OiBub25lO1xuICB3aWR0aDogMjhweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwtbWFpbiB7XG4gIHRvcDogLTI3cHg7XG4gIGxlZnQ6IC0ycHg7XG59XG4ubGF5b3V0LWVkaXRvciBsaS5sYXlvdXQtZWxlbWVudCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUsXG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkIHtcbiAgYm9yZGVyLXdpZHRoOiAycHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlcixcbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XG4gIG1hcmdpbjogLTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWFjdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogcmdiYSgxMDQsIDEwNCwgMTA0LCAwLjEpO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtYWN0aXZlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsLW1haW4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgei1pbmRleDogMzA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTA0LCAxMDQsIDEwNCwgMC4xKTtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQge1xuICBib3JkZXItY29sb3I6ICM2NDg3MjE7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2NDg3MjE7XG4gIGNvbG9yOiAjZmVmZWZlO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyYjAyYjtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWFjdGlvbi5kaXNhYmxlZCB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgY29sb3I6IHJnYmEoMjU0LCAyNTQsIDI1NCwgMC40KTtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWFjdGlvbi5kaXNhYmxlZDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2NDg3MjE7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24uYWN0aXZlIHtcbiAgY29sb3I6ICNkZWZmNDI7XG4gIGJhY2tncm91bmQtY29sb3I6ICM3MzliMjY7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24uYWN0aXZlOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyYjAyYjtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LXNlbGVjdGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDEzNSwgMzMsIDAuMDgpO1xufVxuLmxheW91dC1lZGl0b3IgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0IHtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDEycHggNnB4IHJnYmEoMTAwLCAxMzUsIDMzLCAwLjUpO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDtcbiAgbWluLWhlaWdodDogNzhweDtcbiAgYm9yZGVyOiAycHggZGFzaGVkICM2NDg3MjEgIWltcG9ydGFudDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDEzNSwgMzMsIDAuMTYpO1xufVxuLmxheW91dC1lZGl0b3IgLm1lZGlhLXRodW1ibmFpbCBpbWcge1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRhaW5lci1jaGlsZHJlbi1wbGFjZWhvbGRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbjogMTFweDtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYm9yZGVyOiAxcHggZGFzaGVkIHJnYmEoMTI0LCAxMjQsIDEyNCwgMC40KTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBwYWRkaW5nOiAxMnB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIG9wYWNpdHk6IDAuNjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250YWluZXIgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4ge1xuICBwYWRkaW5nOiAxMnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250YWluZXIgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29udGFpbmVyKSArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpIHtcbiAgbWFyZ2luLXRvcDogMTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLnVpLXNvcnRhYmxlLWhlbHBlcjpmaXJzdC1jaGlsZCArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIubGF5b3V0LWNvbnRhaW5lci1lbXB0eSA+IC5sYXlvdXQtY29udGFpbmVyLWNoaWxkcmVuLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIubGF5b3V0LWNvbnRhaW5lci1lbXB0eSA+IC5sYXlvdXQtY2hpbGRyZW4ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1jb250YWluZXIubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXI6IDFweCBkYXNoZWQgcmdiYSgxMjQsIDEyNCwgMTI0LCAwLjYpO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcbiAgbWFyZ2luOiAtMXB4O1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1jb250YWluZXIgKyAubGF5b3V0LWNvbnRhaW5lcjpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXItdG9wOiAwO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1jb250YWluZXIgKyAubGF5b3V0LWNvbnRhaW5lcjpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY2FudmFzICNkdW1teSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcm93LmxheW91dC1lbGVtZW50LWZvY3VzZWQ6bm90KC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0KSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXItdG9wOiAxcHggZGFzaGVkIHJnYmEoMTI0LCAxMjQsIDEyNCwgMC42KSAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1yb3cubGF5b3V0LWVsZW1lbnQtZm9jdXNlZDpub3QoLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcbiAgbWFyZ2luLXRvcDogLTFweCAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1yb3cubGF5b3V0LWVsZW1lbnQtZm9jdXNlZDpub3QoLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50ICsgLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XG4gIGJvcmRlci1sZWZ0OiAwICFpbXBvcnRhbnQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXJvdy5sYXlvdXQtZWxlbWVudC1mb2N1c2VkOm5vdCgubGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldCkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWVsZW1lbnQgKyAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xuICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbHVtbiA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMzA7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTAwJTtcbiAgY3Vyc29yOiBjb2wtcmVzaXplO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb2x1bW4gPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXItbGVmdCB7XG4gIGxlZnQ6IC02cHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbHVtbiA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhci1yaWdodCB7XG4gIHJpZ2h0OiAtNnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb2x1bW4ubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwge1xuICBtaW4taGVpZ2h0OiAxZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB7XG4gIHBhZGRpbmc6IDJweDtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAvKiB0aGlzIGNvbG9yIGlzIGp1c3QgYSBzdWdnZXN0aW9uIGFuZCBjYW4gYmUgY2hhbmdlZCBiYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBmZWVkYmFjayAqL1xuICAvKiB0aGlzIGFsc28gaGFzIGJpZGkgaW1wbGljYXRpb25zICovXG4gIC8qIHRoaXMgYWxzbyBoYXMgYmlkaSBpbXBsaWNhdGlvbnMgKi9cbiAgLyogTFRSLXNwZWNpZmljOiB1c2UgJ21hcmdpbi1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xuICAvKiBMVFItc3BlY2lmaWM6IHVzZSAncGFkZGluZy1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xuICAvKnRhYmxlW3J1bGVzPW5vbmUgaV0sIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSwgdGFibGVbcnVsZXM9cm93cyBpXSxcbnRhYmxlW3J1bGVzPWNvbHMgaV0sIHRhYmxlW3J1bGVzPWFsbCBpXSwgdGFibGVbZnJhbWU9dm9pZCBpXSxcbnRhYmxlW2ZyYW1lPWFib3ZlIGldLCB0YWJsZVtmcmFtZT1iZWxvdyBpXSwgdGFibGVbZnJhbWU9aHNpZGVzIGldLFxudGFibGVbZnJhbWU9bGhzIGldLCB0YWJsZVtmcmFtZT1yaHMgaV0sIHRhYmxlW2ZyYW1lPXZzaWRlcyBpXSxcbnRhYmxlW2ZyYW1lPWJveCBpXSwgdGFibGVbZnJhbWU9Ym9yZGVyIGldLFxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1ub25lIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0aGVhZCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRoZWFkID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGJvZHkgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9cm93cyBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1hbGwgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRmb290ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1jb2xzIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdGZvb3QgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9YWxsIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1hbGwgaV0gPiB0Zm9vdCA+IHRyID4gdGgge1xuICAgIGJvcmRlci1jb2xvcjogYmxhY2s7XG59Ki9cbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgKixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgKiB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsb2NrcXVvdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsb2NrcXVvdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNlbnRlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY2VudGVyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXYsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpdixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZmlndXJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ2NhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ2NhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZvb3Rlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZm9vdGVyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmb3JtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmb3JtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoZWFkZXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhlYWRlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaHIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsZWdlbmQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxlZ2VuZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwbGFpbnRleHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcHJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHhtcCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ3VyZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwbGFpbnRleHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcHJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHhtcCB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ3VyZSB7XG4gIG1hcmdpbi1sZWZ0OiA0MHB4O1xuICBtYXJnaW4tcmlnaHQ6IDQwcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3Mge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxpc3RpbmcsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxpc3RpbmcsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHBsYWludGV4dCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwcmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgeG1wLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICB3aGl0ZS1zcGFjZTogcHJlO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjaXRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjaXRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZm4sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRmbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZW0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGVtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB2YXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHZhciB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3Ryb25nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBrYmQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGtiZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2FtcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2FtcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHR0IHtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYmlnLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBiaWcge1xuICBmb250LXNpemU6IGxhcmdlcjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc21hbGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNtYWxsIHtcbiAgZm9udC1zaXplOiBzbWFsbGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdWIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1YiB7XG4gIHZlcnRpY2FsLWFsaWduOiBzdWI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1cCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3VwIHtcbiAgdmVydGljYWwtYWxpZ246IHN1cGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdWIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1Yixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdXAge1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBmb250LXNpemU6IHNtYWxsZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ1YnksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ1Ynkge1xuICBkaXNwbGF5OiBydWJ5O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCByYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmIge1xuICBkaXNwbGF5OiBydWJ5LWJhc2U7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydCB7XG4gIGRpc3BsYXk6IHJ1YnktdGV4dDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZm9udC1zaXplOiA1MCU7XG4gIGZvbnQtdmFyaWFudC1lYXN0LWFzaWFuOiBydWJ5O1xuICB0ZXh0LWVtcGhhc2lzOiBub25lO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCByYmMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiYyB7XG4gIGRpc3BsYXk6IHJ1YnktYmFzZS1jb250YWluZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0Yyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnRjIHtcbiAgZGlzcGxheTogcnVieS10ZXh0LWNvbnRhaW5lcjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnVieSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnVieSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiYyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmJjLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydGMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0YyB7XG4gIHVuaWNvZGUtYmlkaTogaXNvbGF0ZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmxpbmssXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDpsaW5rIHtcbiAgY29sb3I6ICMwMDAwRUU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDp2aXNpdGVkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6dmlzaXRlZCB7XG4gIGNvbG9yOiAjNTUxQThCO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6bGluayxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmxpbmssXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDp2aXNpdGVkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6dmlzaXRlZCB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhOmxpbmtbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYTpsaW5rW3JlbH49aGVscF0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGE6dmlzaXRlZFtyZWx+PWhlbHBdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhOnZpc2l0ZWRbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYXJlYTpsaW5rW3JlbH49aGVscF0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFyZWE6bGlua1tyZWx+PWhlbHBdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhcmVhOnZpc2l0ZWRbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYXJlYTp2aXNpdGVkW3JlbH49aGVscF0ge1xuICBjdXJzb3I6IGhlbHA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDpmb2N1cyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmZvY3VzIHtcbiAgb3V0bGluZTogYXV0bztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbWFyayxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbWFyayB7XG4gIGJhY2tncm91bmQ6IHllbGxvdztcbiAgY29sb3I6IGJsYWNrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhYmJyW3RpdGxlXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYWJiclt0aXRsZV0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFjcm9ueW1bdGl0bGVdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhY3JvbnltW3RpdGxlXSB7XG4gIHRleHQtZGVjb3JhdGlvbjogZG90dGVkIHVuZGVybGluZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5zLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHUge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN0cmlrZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3RyaWtlIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsaW5rLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibGluayB7XG4gIHRleHQtZGVjb3JhdGlvbjogYmxpbms7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHE6OmJlZm9yZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcTo6YmVmb3JlIHtcbiAgY29udGVudDogb3Blbi1xdW90ZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcTo6YWZ0ZXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHE6OmFmdGVyIHtcbiAgY29udGVudDogY2xvc2UtcXVvdGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJyOjpiZWZvcmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJyOjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxBJztcbiAgd2hpdGUtc3BhY2U6IHByZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbm9icixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbm9iciB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHdicixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgd2JyIHtcbiAgY29udGVudDogJ1xcMjAwQic7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG5vYnIgd2JyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBub2JyIHdiciB7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFydGljbGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFydGljbGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFzaWRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhc2lkZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDEsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgxLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgzLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaGdyb3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoZ3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG5hdixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbmF2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzZWN0aW9uLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzZWN0aW9uIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgxLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMSB7XG4gIG1hcmdpbi10b3A6IDAuNjdlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC42N2VtO1xuICBmb250LXNpemU6IDIuMDBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMiB7XG4gIG1hcmdpbi10b3A6IDAuODNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC44M2VtO1xuICBmb250LXNpemU6IDEuNTBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgzLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMyB7XG4gIG1hcmdpbi10b3A6IDEuMDBlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS4wMGVtO1xuICBmb250LXNpemU6IDEuMTdlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNCB7XG4gIG1hcmdpbi10b3A6IDEuMzNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS4zM2VtO1xuICBmb250LXNpemU6IDEuMDBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg1LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNSB7XG4gIG1hcmdpbi10b3A6IDEuNjdlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS42N2VtO1xuICBmb250LXNpemU6IDAuODNlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNiB7XG4gIG1hcmdpbi10b3A6IDIuMzNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMi4zM2VtO1xuICBmb250LXNpemU6IDAuNjdlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGR0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsaSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGkge1xuICBkaXNwbGF5OiBsaXN0LWl0ZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHtcbiAgbWFyZ2luLXRvcDogMWVtO1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGQge1xuICBtYXJnaW4tbGVmdDogNDBweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHtcbiAgcGFkZGluZy1sZWZ0OiA0MHB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wge1xuICBsaXN0LXN0eWxlLXR5cGU6IGRlY2ltYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwge1xuICBsaXN0LXN0eWxlLXR5cGU6IGRpc2M7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHVsIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwgdWwge1xuICBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlIHtcbiAgZGlzcGxheTogdGFibGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNhcHRpb24ge1xuICBkaXNwbGF5OiB0YWJsZS1jYXB0aW9uO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sZ3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbGdyb3VwW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbGdyb3VwW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW4tZ3JvdXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW47XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aGVhZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWRbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWRbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keVtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keVtoaWRkZW5dIHtcbiAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGZvb3QsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1mb290ZXItZ3JvdXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHJbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHJbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IHRhYmxlLXJvdztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cFtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cFtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0ge1xuICB2aXNpYmlsaXR5OiBjb2xsYXBzZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXNwYWNpbmc6IDJweDtcbiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbiAgdGV4dC1pbmRlbnQ6IGluaXRpYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoIHtcbiAgcGFkZGluZzogMXB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUgPiB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUgPiB0ciB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgge1xuICB2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCB7XG4gIGJvcmRlci1jb2xvcjogZ3JheTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyIHtcbiAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNlbGVjdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2VsZWN0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9wdGlvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb3B0Z3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9wdGdyb3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBidXR0b24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGV4dGFyZWEsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRleHRhcmVhLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBrZXlnZW4sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGtleWdlbiB7XG4gIHRleHQtaW5kZW50OiBpbml0aWFsO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZXh0YXJlYSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGV4dGFyZWEge1xuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dFt0eXBlPVwicmVzZXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNlbGVjdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2VsZWN0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBidXR0b24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYnV0dG9uIHtcbiAgcGFkZGluZzogMC4zZW0gMC41ZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBociB7XG4gIGNvbG9yOiBncmF5O1xuICBib3JkZXItc3R5bGU6IGluc2V0O1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgbWFyZ2luOiAwLjVlbSBhdXRvO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWVsZHNldCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZmllbGRzZXQge1xuICBtYXJnaW4tbGVmdDogMnB4O1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgYm9yZGVyOiBncm9vdmUgMnB4IFRocmVlREZhY2U7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGVnZW5kLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsZWdlbmQge1xuICBwYWRkaW5nLWxlZnQ6IDJweDtcbiAgcGFkZGluZy1yaWdodDogMnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA+ICo6Zmlyc3QtY2hpbGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gKjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAqOmxhc3QtY2hpbGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gKjpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50LmxheW91dC1jb250ZW50LWltYWdlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gaW1nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sLmxheW91dC1jb250ZW50LWltYWdlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gaW1nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50LmxheW91dC1jb250ZW50LXZlY3Rvci1pbWFnZSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb250ZW50LW1hcmt1cCA+IGltZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbC5sYXlvdXQtY29udGVudC12ZWN0b3ItaW1hZ2UgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiBpbWcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmxheW91dC1lZGl0b3IgLmltZy1yZXNwb25zaXZlLFxuLmxheW91dC1lZGl0b3IgLmltZy1yZXNwb25zaXZlIGltZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbmJvZHkgLmxheW91dC10b29sYm94LWl0ZW0ge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNWU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBwYWRkaW5nOiA5cHggMTJweDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG59XG5ib2R5IC5sYXlvdXQtdG9vbGJveC1pdGVtIGkge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxNnB4O1xuICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAxNHB4LzEgRm9udEF3ZXNvbWU7XG59XG5ib2R5IC5sYXlvdXQtdG9vbGJveC1pdGVtICsgLmxheW91dC10b29sYm94LWl0ZW0ge1xuICBtYXJnaW4tdG9wOiA0cHg7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyIHtcbiAgbWFyZ2luLWxlZnQ6IDEycHg7XG4gIHdpZHRoOiAyMThweDtcbiAgLXdlYmtpdC1mbGV4LXNocmluazogMDtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICAvKiBmb3JjaW5nIHRoZSB0b29sYm94IGhlaWdodCB0byBiZSBzbWFsbGVyIHRoYW4gdGhlIHZpZXdwb3J0IGhlaWdodFxuICAgICAgICAgICAgc28gaXQgaXMgYWx3YXlzIHZpc2libGUgYW5kIHNjcm9sbGFibGUqL1xuICBtYXgtaGVpZ2h0OiBjYWxjKDIwdmgpO1xuICBvdmVyZmxvdy14OiBjbGlwO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICAvKiBmb3JjaW5nIHRoZSB0b29sYm94IHRvIHN0YXkgc3RpY2tlZCBhdCB0aGUgdGhlIHRvcCBvZiBpdHMgY29udGFpbmVyICovXG4gIHBvc2l0aW9uOiAtd2Via2l0LXN0aWNreTtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgdG9wOiAwO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogMnB4O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMCA2cHggIzAwMDAwMDtcbiAgYm9yZGVyLXJhZGl1czogMXB4O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U0ZTVlNjtcbiAgd2lkdGg6IDIyMHB4O1xuICBtaW4taGVpZ2h0OiA0MDBweDtcbiAgcGFkZGluZzogNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmNGY1O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveC5zdGlja3ktdG9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94LnN0aWNreS1ib3R0b20ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIHtcbiAgbWFyZ2luLXRvcDogMTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIC5sYXlvdXQtdG9vbGJveC1ncm91cC1oZWFkaW5nIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAgLmxheW91dC10b29sYm94LWdyb3VwLWhlYWRpbmc6YmVmb3JlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMTBweDtcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XG4gIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb250ZW50OiBcIlxcZjBkN1wiO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAuY29sbGFwc2VkIC5sYXlvdXQtdG9vbGJveC1ncm91cC1oZWFkaW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGRhXCI7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cC5jb2xsYXBzZWQgLmxheW91dC10b29sYm94LWl0ZW1zIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIC5sYXlvdXQtdG9vbGJveC1zZWN0aW9uICsgLmxheW91dC10b29sYm94LXNlY3Rpb24ge1xuICBtYXJnaW4tdG9wOiA0cHg7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCAubGF5b3V0LXRvb2xib3gtaXRlbSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNGU1ZTY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIHBhZGRpbmc6IDlweCAxMnB4O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCAubGF5b3V0LXRvb2xib3gtaXRlbSBpIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMTZweDtcbiAgZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAgLmxheW91dC10b29sYm94LWl0ZW0gKyAubGF5b3V0LXRvb2xib3gtaXRlbSB7XG4gIG1hcmdpbi10b3A6IDRweDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwICsgLmxheW91dC10b29sYm94LWdyb3VwIHtcbiAgbWFyZ2luLXRvcDogNnB4O1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW46IDA7XG4gIC1tb3otYm94LXNoYWRvdzogM3B4IDNweCAxMXB4IDAgcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDNweCAzcHggMTFweCAwIHJnYmEoNTAsIDUwLCA1MCwgMC41KTtcbiAgYm94LXNoYWRvdzogM3B4IDNweCAxMXB4IDAgcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNWU2O1xuICBwYWRkaW5nOiAycHggMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNztcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgei1pbmRleDogMjA7XG4gIGNvbG9yOiAjN2M3YzdjO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIG1pbi13aWR0aDogMzAwcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwLndpZGUge1xuICB3aWR0aDogNjAwcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtZmxleCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDJweCA1cHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtZmxleCAubGF5b3V0LXBvcHVwLWNvbHVtbiArIC5sYXlvdXQtcG9wdXAtY29sdW1uIHtcbiAgbWFyZ2luLWxlZnQ6IDRweDtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2JhKDEyOCwgMTI4LCAxMjgsIDAuMTUpO1xuICBwYWRkaW5nLWxlZnQ6IDRweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1pdGVtIHtcbiAgcGFkZGluZzogNHB4IDZweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1sYWJlbCB7XG4gIGZvbnQtc2l6ZTogMC45ZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzdjN2M3Yztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1hY3Rpb246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmNGY1O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtaW5wdXQgaW5wdXRbdHlwZT0ndGV4dCddLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCAubGF5b3V0LXBvcHVwLWlucHV0IHRleHRhcmVhIHtcbiAgd2lkdGg6IDEwMCU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtaW5wdXQgPiBsYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDAuOWVtO1xufVxuIiwiQGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvci10b29sYmFyIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB0b3A6IDEwcHg7XHJcblxyXG4gICAgLmxheW91dC1lZGl0b3ItdG9vbGJhci1ncm91cCB7XHJcbiAgICAgICAgZGlzcGxheTogZmxleDtcclxuXHJcbiAgICAgICAgPiBsaSArIGxpIHtcclxuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEycHg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgbWFyZ2luLXRvcDogMWVtO1xyXG4gICAgZm9udC1zaXplOiBAZm9udC1zaXplO1xyXG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XHJcblxyXG4gICAgPiAubGF5b3V0LWNhbnZhcy13cmFwcGVyIHtcclxuICAgICAgICBmbGV4LWdyb3c6IDE7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGdyYXktYmc7XHJcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgQGdyYXktYm9yZGVyO1xyXG5cclxuICAgICAgICA+IC5sYXlvdXQtdG9vbGJhci1jb250YWluZXIge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgICAgICBtYXJnaW46IEBjb250YWluZXItcGFkZGluZyBAY29udGFpbmVyLXBhZGRpbmcgMDtcclxuICAgICAgICAgICAgbWluLWhlaWdodDogNzFweDtcclxuXHJcbiAgICAgICAgICAgID4gLm1jZS1wYW5lbCB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gLmxheW91dC1wbGFjZWhvbGRlciB7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCAjY2NjO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAwLjJlbSAwLjRlbTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogI2U4ZThlODtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLmxheW91dC1zbmlwcGV0IHtcclxuICAgICAgICBiYWNrZ3JvdW5kOiAjZThlOGU4O1xyXG4gICAgfVxyXG59XHJcblxyXG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG5cclxuICAgIC5oZWxwLXJvdyB7XHJcbiAgICAgICAgJjpiZWZvcmUsICY6YWZ0ZXIge1xyXG4gICAgICAgICAgICBjb250ZW50OiBcIiBcIjsgLy8gMVxyXG4gICAgICAgICAgICBkaXNwbGF5OiB0YWJsZTsgLy8gMlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJjphZnRlciB7XHJcbiAgICAgICAgICAgIGNsZWFyOiBib3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPiAuaGVscC1jb2x1bW4tZnVsbCwgPiAuaGVscC1jb2x1bW4taGFsZiB7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMC41ZW0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgID4gLmhlbHAtY29sdW1uLWhhbGYge1xyXG4gICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcclxuICAgICAgICAgICAgd2lkdGg6IDUwJTtcclxuXHJcbiAgICAgICAgICAgICY6bnRoLWNoaWxkKDJuKSB7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xyXG4gICAgICAgICAgICAgICAgY2xlYXI6IGxlZnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICsgLmhlbHAtcm93IHtcclxuICAgICAgICAgICAgbWFyZ2luLXRvcDogMWVtO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb2RlIHtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjRmNTtcclxuICAgICAgICBwYWRkaW5nOiAycHggNHB4O1xyXG4gICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XHJcbiAgICB9XHJcblxyXG4gICAgcCB7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNmVtO1xyXG4gICAgfVxyXG5cclxuICAgIHRhYmxlID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkIHtcclxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xyXG4gICAgfVxyXG59XHJcbiIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgLmxheW91dC1lbGVtZW50IHtcclxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcclxuICAgICAgICBwYWRkaW5nOiAwO1xyXG5cclxuICAgICAgICAvLyBXZSBkb24ndCBmdWNrIHdpdGggdGhlIGxlZnQgbWFyZ2luIG9mIGNvbHVtbnMsIGJlY2F1c2UgQm9vdHN0cmFwIHVzZXMgdGhlc2UgdG8gcmVuZGVyIGNvbHVtbiBvZmZzZXRzLlxyXG4gICAgICAgICY6bm90KC5sYXlvdXQtY29sdW1uKSB7XHJcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgID4gLmxheW91dC1wYW5lbCB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lOyAvLyBTaG93biBvbmx5IGluIGFjdGl2ZSBvciBmb2N1c2VkIHN0YXRlcy5cclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAgICAgICAgIHotaW5kZXg6IDIwO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyNXB4O1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCA2cHg7XHJcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xyXG4gICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyNXB4O1xyXG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtcGFuZWwtaXRlbSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjVweDtcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxcHggNnB4IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LXBhbmVsLWxhYmVsIHtcclxuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IEBmb250LXNpemUgLSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1wYW5lbC1hY3Rpb24ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7IC8vIFNob3duIG9ubHkgaW4gZm9jdXNlZCBzdGF0ZS5cclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjhweDtcclxuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtcGFuZWwtbWFpbiB7XHJcbiAgICAgICAgICAgICAgICB0b3A6IC0yN3B4O1xyXG4gICAgICAgICAgICAgICAgbGVmdDogLTJweDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBXaGVuIGRyYWdnaW5nIGZyb20gdG9vbGJveCwgZWxlbWVudHMgd2lsbCBiZSBsaSByYXRoZXIgdGhhbiBkaXYuXHJcbiAgICBsaS5sYXlvdXQtZWxlbWVudCB7XHJcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcclxuICAgIH1cclxuXHJcbiAgICAmOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykge1xyXG5cclxuICAgICAgICAubGF5b3V0LWVsZW1lbnQtYWN0aXZlLCAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCB7XHJcbiAgICAgICAgICAgIGJvcmRlci13aWR0aDogMnB4O1xyXG4gICAgICAgICAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW46IC0ycHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUge1xyXG4gICAgICAgICAgICBAYWN0aXZlLWhpZ2hsaWdodDogZmFkZSgjNjg2ODY4LCAxMCUpO1xyXG5cclxuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBAYWN0aXZlLWhpZ2hsaWdodDtcclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsLW1haW4ge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7IC8vIFRvIHJldmVhbC5cclxuICAgICAgICAgICAgICAgIHotaW5kZXg6IDMwO1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGFjdGl2ZS1oaWdobGlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkIHtcclxuICAgICAgICAgICAgQGZvY3VzZWQtaGlnaGxpZ2h0OiAjNjQ4NzIxO1xyXG4gICAgICAgICAgICBAZm9jdXNlZC10ZXh0OiAjZmVmZWZlO1xyXG5cclxuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBAZm9jdXNlZC1oaWdobGlnaHQ7XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jazsgLy8gVG8gcmV2ZWFsLlxyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGZvY3VzZWQtaGlnaGxpZ2h0O1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IEBmb2N1c2VkLXRleHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LXBhbmVsLWFjdGlvbiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAvLyBUbyByZXZlYWwuXHJcbiAgICAgICAgICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0ZW4oQGZvY3VzZWQtaGlnaGxpZ2h0LCAxMCUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJi5kaXNhYmxlZCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGZhZGUoQGZvY3VzZWQtdGV4dCwgNDAlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICY6aG92ZXIge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGZvY3VzZWQtaGlnaGxpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAmLmFjdGl2ZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBsaWdodGVuKHNhdHVyYXRlKHNwaW4oQGZvY3VzZWQtaGlnaGxpZ2h0LCAtMTApLCAxMDAlKSwgMzAlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbihAZm9jdXNlZC1oaWdobGlnaHQsIDUlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICY6aG92ZXIge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbihAZm9jdXNlZC1oaWdobGlnaHQsIDEwJSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtZWxlbWVudC1zZWxlY3RlZCB7XHJcbiAgICAgICAgICAgIEBzZWxlY3RlZC1oaWdobGlnaHQ6ICM2NDg3MjE7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGZhZGUoQHNlbGVjdGVkLWhpZ2hsaWdodCwgOCUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAudWktc29ydGFibGUtcGxhY2Vob2xkZXIge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQge1xyXG4gICAgICAgIEBkcm9wdGFyZ2V0LWhpZ2hsaWdodDogIzY0ODcyMTtcclxuICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMTJweCA2cHggZmFkZShAZHJvcHRhcmdldC1oaWdobGlnaHQsIDUwJSk7XHJcblxyXG4gICAgICAgIC51aS1zb3J0YWJsZS1wbGFjZWhvbGRlciB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOyAvLyBUbyByZXZlYWwuXHJcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgbWluLWhlaWdodDogQGVsZW1lbnQtbWluLWhlaWdodCAtIDJweDtcclxuICAgICAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkIEBkcm9wdGFyZ2V0LWhpZ2hsaWdodCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBmYWRlKEBkcm9wdGFyZ2V0LWhpZ2hsaWdodCwgMTYlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQSBDU1MgZml4IGZvciBtZWRpYSBpdGVtIGVsZW1lbnRzLlxyXG4gICAgLm1lZGlhLXRodW1ibmFpbCB7XHJcbiAgICAgICAgaW1nIHtcclxuICAgICAgICAgICAgbWF4LXdpZHRoOjEwMCU7XHJcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIkBpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgLmxheW91dC1jb250YWluZXIge1xyXG5cclxuICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1jb250YWluZXItY2hpbGRyZW4tcGxhY2Vob2xkZXIge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICAgICAgICAgICAgICBtYXJnaW46IEBjb250YWluZXItcGFkZGluZyAtIDFweDtcclxuICAgICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IEBlbGVtZW50LW1pbi1oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBkYXNoZWQgZmFkZShAZ3JheS10ZXh0LCA0MCUpO1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZzogQGNvbnRhaW5lci1wYWRkaW5nO1xyXG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IEBmb250LXNpemUgLSAxO1xyXG4gICAgICAgICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMC42O1xyXG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtY2hpbGRyZW4ge1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZzogQGNvbnRhaW5lci1wYWRkaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEFsbCBhZGphY2VudCBub24tY29udGFpbmVyIGNoaWxkcmVuIG5lZWQgc29tZSBzcGFjZSBiZXR3ZWVuLi4uXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpICsgLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IEBjb250ZW50LXNwYWNpbmc7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gLi4uIGV4Y2VwdCB3aGVuIGpRdWVyeSBVSSBzb3J0YWJsZSBoZWxwZXIgaXMgdGhlIGZpcnN0IGVsZW1lbnQgKGJlY2F1c2UgdGhhdCBvbmUgaXMgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGFuZCBcImZsb2F0aW5nXCIpLlxyXG4gICAgICAgICAgICAgICAgPiAudWktc29ydGFibGUtaGVscGVyOmZpcnN0LWNoaWxkICsgLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICYubGF5b3V0LWNvbnRhaW5lci1lbXB0eSB7XHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtY29udGFpbmVyLWNoaWxkcmVuLXBsYWNlaG9sZGVyIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4OyAvLyBUbyByZXZlYWwuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWNoaWxkcmVuIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICY6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSB7XHJcbiAgICAgICAgLmxheW91dC1jb250YWluZXIubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiB7XHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBkYXNoZWQgZmFkZShAZ3JheS10ZXh0LCA2MCUpO1xyXG5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogLTFweDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWNvbnRhaW5lciArIC5sYXlvdXQtY29udGFpbmVyOm5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wOiAwO1xyXG5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiQGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICAubGF5b3V0LWNhbnZhcyB7XHJcbiAgICAgICAgI2R1bW15IHsgLy8gT25seSBhZGRlZCBiZWNhdXNlIFdFIGRvZXNuJ3QgY29tcGlsZSBpZiB0aGVyZSBhcmUgbm8gcnVsZXMuXHJcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiQGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICAubGF5b3V0LXJvdyB7XHJcbiAgICAgICAgJi5sYXlvdXQtZWxlbWVudC1mb2N1c2VkOm5vdCgubGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldCkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4ge1xyXG4gICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCBmYWRlKEBncmF5LXRleHQsIDYwJSkgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IC0xcHggIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQgKyAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiQGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICAubGF5b3V0LWNvbHVtbiB7XHJcbiAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgICAgei1pbmRleDogMzA7XHJcbiAgICAgICAgICAgICAgICB0b3A6IDA7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMTZweDtcclxuICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyLWxlZnQge1xyXG4gICAgICAgICAgICAgICAgbGVmdDogLTZweDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyLXJpZ2h0IHtcclxuICAgICAgICAgICAgICAgIHJpZ2h0OiAtNnB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXIge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiQGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcbkBpbXBvcnQgXCJSZXNldC5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICAubGF5b3V0LWNvbnRlbnQsIC5sYXlvdXQtaHRtbCB7XHJcbiAgICAgICAgbWluLWhlaWdodDogMWVtO1xyXG5cclxuICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgLmxheW91dC1jb250ZW50LW1hcmt1cCB7XHJcblxyXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMnB4O1xyXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xyXG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBSZXNldCB0byBIVE1MNSBXM0Mgc3RhbmRhcmQgZGVmYXVsdCBzdHlsaW5nIHdpdGhpbiBjb250ZW50LlxyXG4gICAgICAgICAgICAgICAgLnJlc2V0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgPiAqOmZpcnN0LWNoaWxkIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7IC8vIEltcG9ydGFudCBiZWNhdXNlIHNpdGUuY3NzIG9mIHRoZSBhZG1pbiB0aGVtZSBzdHlsZXMgaGVhZGluZyBtYXJnaW5zIHdpdGggYSB2ZXJ5IGhpZ2ggc3BlY2lmaWNpdHkuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgPiAqOmxhc3QtY2hpbGQge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJi5sYXlvdXQtY29udGVudC1pbWFnZSwgJi5sYXlvdXQtY29udGVudC12ZWN0b3ItaW1hZ2Uge1xyXG4gICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb250ZW50LW1hcmt1cCA+IGltZyB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5pbWctcmVzcG9uc2l2ZSwgLmltZy1yZXNwb25zaXZlIGltZyB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xyXG4gICAgICAgIGhlaWdodDogYXV0bztcclxuICAgIH1cclxufVxyXG4iLCLvu78ucmVzZXQoKSB7XHJcblxyXG4gICAgKiB7XHJcbiAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkcmVzcywgYmxvY2txdW90ZSwgY2VudGVyLCBkaXYsIGZpZ3VyZSwgZmlnY2FwdGlvbiwgZm9vdGVyLCBmb3JtLFxyXG4gICAgaGVhZGVyLCBociwgbGVnZW5kLCBsaXN0aW5nLCBwLCBwbGFpbnRleHQsIHByZSwgeG1wIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIH1cclxuXHJcbiAgICBibG9ja3F1b3RlLCBmaWd1cmUsIGxpc3RpbmcsIHAsIHBsYWludGV4dCwgcHJlLCB4bXAge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDFlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxZW07XHJcbiAgICB9XHJcblxyXG4gICAgYmxvY2txdW90ZSwgZmlndXJlIHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogNDBweDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDQwcHg7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkcmVzcyB7XHJcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG4gICAgfVxyXG5cclxuICAgIGxpc3RpbmcsIHBsYWludGV4dCwgcHJlLCB4bXAge1xyXG4gICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTtcclxuICAgIH1cclxuXHJcbiAgICBjaXRlLCBkZm4sIGVtLCBpLCB2YXIge1xyXG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcclxuICAgIH1cclxuXHJcbiAgICBiLCBzdHJvbmcge1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgY29kZSwga2JkLCBzYW1wLCB0dCB7XHJcbiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcclxuICAgIH1cclxuXHJcbiAgICBiaWcge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogbGFyZ2VyO1xyXG4gICAgfVxyXG5cclxuICAgIHNtYWxsIHtcclxuICAgICAgICBmb250LXNpemU6IHNtYWxsZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc3ViIHtcclxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogc3ViO1xyXG4gICAgfVxyXG5cclxuICAgIHN1cCB7XHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHN1cGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHN1Yiwgc3VwIHtcclxuICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogc21hbGxlcjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcnVieSB7XHJcbiAgICAgICAgZGlzcGxheTogcnVieTtcclxuICAgIH1cclxuXHJcbiAgICByYiB7XHJcbiAgICAgICAgZGlzcGxheTogcnVieS1iYXNlO1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICB9XHJcblxyXG4gICAgcnQge1xyXG4gICAgICAgIGRpc3BsYXk6IHJ1YnktdGV4dDtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogNTAlO1xyXG4gICAgICAgIGZvbnQtdmFyaWFudC1lYXN0LWFzaWFuOiBydWJ5O1xyXG4gICAgICAgIHRleHQtZW1waGFzaXM6IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgcmJjIHtcclxuICAgICAgICBkaXNwbGF5OiBydWJ5LWJhc2UtY29udGFpbmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHJ0YyB7XHJcbiAgICAgICAgZGlzcGxheTogcnVieS10ZXh0LWNvbnRhaW5lcjtcclxuICAgIH1cclxuXHJcbiAgICBydWJ5LCByYiwgcnQsIHJiYywgcnRjIHtcclxuICAgICAgICB1bmljb2RlLWJpZGk6IGlzb2xhdGU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIDpsaW5rIHtcclxuICAgICAgICBjb2xvcjogIzAwMDBFRTtcclxuICAgIH1cclxuXHJcbiAgICA6dmlzaXRlZCB7XHJcbiAgICAgICAgY29sb3I6ICM1NTFBOEI7XHJcbiAgICB9XHJcblxyXG4gICAgOmxpbmssIDp2aXNpdGVkIHtcclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcclxuICAgIH1cclxuXHJcbiAgICBhOmxpbmtbcmVsfj1oZWxwXSwgYTp2aXNpdGVkW3JlbH49aGVscF0sXHJcbiAgICBhcmVhOmxpbmtbcmVsfj1oZWxwXSwgYXJlYTp2aXNpdGVkW3JlbH49aGVscF0ge1xyXG4gICAgICAgIGN1cnNvcjogaGVscDtcclxuICAgIH1cclxuXHJcbiAgICA6Zm9jdXMge1xyXG4gICAgICAgIG91dGxpbmU6IGF1dG87XHJcbiAgICB9XHJcblxyXG4gICAgbWFyayB7XHJcbiAgICAgICAgYmFja2dyb3VuZDogeWVsbG93O1xyXG4gICAgICAgIGNvbG9yOiBibGFjaztcclxuICAgIH1cclxuICAgIC8qIHRoaXMgY29sb3IgaXMganVzdCBhIHN1Z2dlc3Rpb24gYW5kIGNhbiBiZSBjaGFuZ2VkIGJhc2VkIG9uIGltcGxlbWVudGF0aW9uIGZlZWRiYWNrICovXHJcbiAgICBhYmJyW3RpdGxlXSwgYWNyb255bVt0aXRsZV0ge1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogZG90dGVkIHVuZGVybGluZTtcclxuICAgIH1cclxuXHJcbiAgICBpbnMsIHUge1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbCwgcywgc3RyaWtlIHtcclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcclxuICAgIH1cclxuXHJcbiAgICBibGluayB7XHJcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBibGluaztcclxuICAgIH1cclxuXHJcbiAgICBxOjpiZWZvcmUge1xyXG4gICAgICAgIGNvbnRlbnQ6IG9wZW4tcXVvdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcTo6YWZ0ZXIge1xyXG4gICAgICAgIGNvbnRlbnQ6IGNsb3NlLXF1b3RlO1xyXG4gICAgfVxyXG5cclxuICAgIGJyOjpiZWZvcmUge1xyXG4gICAgICAgIGNvbnRlbnQ6ICdcXEEnO1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7XHJcbiAgICB9XHJcbiAgICAvKiB0aGlzIGFsc28gaGFzIGJpZGkgaW1wbGljYXRpb25zICovXHJcbiAgICBub2JyIHtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgfVxyXG5cclxuICAgIHdiciB7XHJcbiAgICAgICAgY29udGVudDogJ1xcMjAwQic7XHJcbiAgICB9XHJcbiAgICAvKiB0aGlzIGFsc28gaGFzIGJpZGkgaW1wbGljYXRpb25zICovXHJcbiAgICBub2JyIHdiciB7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcclxuICAgIH1cclxuXHJcbiAgICBhcnRpY2xlLCBhc2lkZSwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgaGdyb3VwLCBuYXYsIHNlY3Rpb24ge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgfVxyXG5cclxuICAgIGgxIHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAwLjY3ZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC42N2VtO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMi4wMGVtO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIGgyIHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAwLjgzZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC44M2VtO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMS41MGVtO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIGgzIHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAxLjAwZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS4wMGVtO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMS4xN2VtO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIGg0IHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAxLjMzZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS4zM2VtO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMS4wMGVtO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIGg1IHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAxLjY3ZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS42N2VtO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMC44M2VtO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIGg2IHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAyLjMzZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMi4zM2VtO1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMC42N2VtO1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIGRpciwgZGQsIGRsLCBkdCwgb2wsIHVsIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIH1cclxuXHJcbiAgICBsaSB7XHJcbiAgICAgICAgZGlzcGxheTogbGlzdC1pdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIGRpciwgZGwsIG9sLCB1bCB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMWVtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTtcclxuICAgIH1cclxuXHJcbiAgICAgICAgZGlyIGRpciwgZGlyIGRsLCBkaXIgb2wsIGRpciB1bCxcclxuICAgICAgICBkbCBkaXIsIGRsIGRsLCBkbCBvbCwgZGwgdWwsXHJcbiAgICAgICAgb2wgZGlyLCBvbCBkbCwgb2wgb2wsIG9sIHVsLFxyXG4gICAgICAgIHVsIGRpciwgdWwgZGwsIHVsIG9sLCB1bCB1bCB7XHJcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XHJcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIGRkIHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogNDBweDtcclxuICAgIH1cclxuICAgIC8qIExUUi1zcGVjaWZpYzogdXNlICdtYXJnaW4tcmlnaHQnIGZvciBydGwgZWxlbWVudHMgKi9cclxuICAgIGRpciwgb2wsIHVsIHtcclxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7XHJcbiAgICB9XHJcbiAgICAvKiBMVFItc3BlY2lmaWM6IHVzZSAncGFkZGluZy1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xyXG4gICAgb2wge1xyXG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbDtcclxuICAgIH1cclxuXHJcbiAgICBkaXIsIHVsIHtcclxuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IGRpc2M7XHJcbiAgICB9XHJcblxyXG4gICAgICAgIGRpciBkaXIsIGRpciB1bCxcclxuICAgICAgICBvbCBkaXIsIG9sIHVsLFxyXG4gICAgICAgIHVsIGRpciwgdWwgdWwge1xyXG4gICAgICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkaXIgZGlyIGRpciwgZGlyIGRpciB1bCxcclxuICAgICAgICAgICAgZGlyIG9sIGRpciwgZGlyIG9sIHVsLFxyXG4gICAgICAgICAgICBkaXIgdWwgZGlyLCBkaXIgdWwgdWwsXHJcbiAgICAgICAgICAgIG9sIGRpciBkaXIsIG9sIGRpciB1bCxcclxuICAgICAgICAgICAgb2wgb2wgZGlyLCBvbCBvbCB1bCxcclxuICAgICAgICAgICAgb2wgdWwgZGlyLCBvbCB1bCB1bCxcclxuICAgICAgICAgICAgdWwgZGlyIGRpciwgdWwgZGlyIHVsLFxyXG4gICAgICAgICAgICB1bCBvbCBkaXIsIHVsIG9sIHVsLFxyXG4gICAgICAgICAgICB1bCB1bCBkaXIsIHVsIHVsIHVsIHtcclxuICAgICAgICAgICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogc3F1YXJlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgdGFibGUge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIGNhcHRpb24ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWNhcHRpb247XHJcbiAgICB9XHJcblxyXG4gICAgY29sZ3JvdXAsIGNvbGdyb3VwW2hpZGRlbl0ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWNvbHVtbi1ncm91cDtcclxuICAgIH1cclxuXHJcbiAgICBjb2wsIGNvbFtoaWRkZW5dIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jb2x1bW47XHJcbiAgICB9XHJcblxyXG4gICAgdGhlYWQsIHRoZWFkW2hpZGRlbl0ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDtcclxuICAgIH1cclxuXHJcbiAgICB0Ym9keSwgdGJvZHlbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwO1xyXG4gICAgfVxyXG5cclxuICAgIHRmb290LCB0Zm9vdFtoaWRkZW5dIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1mb290ZXItZ3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgdHIsIHRyW2hpZGRlbl0ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdztcclxuICAgIH1cclxuXHJcbiAgICB0ZCwgdGgsIHRkW2hpZGRlbl0sIHRoW2hpZGRlbl0ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XHJcbiAgICB9XHJcblxyXG4gICAgICAgIGNvbGdyb3VwW2hpZGRlbl0sIGNvbFtoaWRkZW5dLCB0aGVhZFtoaWRkZW5dLCB0Ym9keVtoaWRkZW5dLFxyXG4gICAgICAgIHRmb290W2hpZGRlbl0sIHRyW2hpZGRlbl0sIHRkW2hpZGRlbl0sIHRoW2hpZGRlbl0ge1xyXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBjb2xsYXBzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgdGFibGUge1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDJweDtcclxuICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlO1xyXG4gICAgICAgIHRleHQtaW5kZW50OiBpbml0aWFsO1xyXG4gICAgfVxyXG5cclxuICAgIHRkLCB0aCB7XHJcbiAgICAgICAgcGFkZGluZzogMXB4O1xyXG4gICAgfVxyXG5cclxuICAgIHRoIHtcclxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGVhZCwgdGJvZHksIHRmb290LCB0YWJsZSA+IHRyIHtcclxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gICAgfVxyXG5cclxuICAgIHRyLCB0ZCwgdGgge1xyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBpbmhlcml0O1xyXG4gICAgfVxyXG5cclxuICAgIHRhYmxlLCB0ZCwgdGgge1xyXG4gICAgICAgIGJvcmRlci1jb2xvcjogZ3JheTtcclxuICAgIH1cclxuXHJcbiAgICB0aGVhZCwgdGJvZHksIHRmb290LCB0ciB7XHJcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xyXG4gICAgfVxyXG4gICAgLyp0YWJsZVtydWxlcz1ub25lIGldLCB0YWJsZVtydWxlcz1ncm91cHMgaV0sIHRhYmxlW3J1bGVzPXJvd3MgaV0sXHJcbnRhYmxlW3J1bGVzPWNvbHMgaV0sIHRhYmxlW3J1bGVzPWFsbCBpXSwgdGFibGVbZnJhbWU9dm9pZCBpXSxcclxudGFibGVbZnJhbWU9YWJvdmUgaV0sIHRhYmxlW2ZyYW1lPWJlbG93IGldLCB0YWJsZVtmcmFtZT1oc2lkZXMgaV0sXHJcbnRhYmxlW2ZyYW1lPWxocyBpXSwgdGFibGVbZnJhbWU9cmhzIGldLCB0YWJsZVtmcmFtZT12c2lkZXMgaV0sXHJcbnRhYmxlW2ZyYW1lPWJveCBpXSwgdGFibGVbZnJhbWU9Ym9yZGVyIGldLFxyXG50YWJsZVtydWxlcz1ub25lIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1hbGwgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1hbGwgaV0gPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1ub25lIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdGhlYWQgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0aGVhZCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRoZWFkID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9cm93cyBpXSA+IHRoZWFkID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRoZWFkID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9YWxsIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1hbGwgaV0gPiB0aGVhZCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Ym9keSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGJvZHkgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1yb3dzIGldID4gdGJvZHkgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdGJvZHkgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1jb2xzIGldID4gdGJvZHkgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdGJvZHkgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1hbGwgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRib2R5ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRmb290ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRmb290ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRmb290ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdGZvb3QgPiB0ciA+IHRoIHtcclxuICAgIGJvcmRlci1jb2xvcjogYmxhY2s7XHJcbn0qL1xyXG4gICAgaW5wdXQsIHNlbGVjdCwgb3B0aW9uLCBvcHRncm91cCwgYnV0dG9uLCB0ZXh0YXJlYSwga2V5Z2VuIHtcclxuICAgICAgICB0ZXh0LWluZGVudDogaW5pdGlhbDtcclxuICAgIH1cclxuXHJcbiAgICB0ZXh0YXJlYSB7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xyXG4gICAgfVxyXG5cclxuICAgIGlucHV0W3R5cGU9XCJyYWRpb1wiXSwgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLCBpbnB1dFt0eXBlPVwicmVzZXRcIl0sIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXHJcbiAgICBpbnB1dFt0eXBlPVwic3VibWl0XCJdLCBzZWxlY3QsIGJ1dHRvbiB7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIH1cclxuXHJcbiAgICBpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLCBidXR0b24ge1xyXG4gICAgICAgIHBhZGRpbmc6IDAuM2VtIDAuNWVtO1xyXG4gICAgfVxyXG5cclxuICAgIGhyIHtcclxuICAgICAgICBjb2xvcjogZ3JheTtcclxuICAgICAgICBib3JkZXItc3R5bGU6IGluc2V0O1xyXG4gICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xyXG4gICAgICAgIG1hcmdpbjogMC41ZW0gYXV0bztcclxuICAgIH1cclxuXHJcbiAgICBmaWVsZHNldCB7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDJweDtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDJweDtcclxuICAgICAgICBib3JkZXI6IGdyb292ZSAycHggVGhyZWVERmFjZTtcclxuICAgICAgICBwYWRkaW5nOiAwLjM1ZW0gMC42MjVlbSAwLjc1ZW07XHJcbiAgICB9XHJcblxyXG4gICAgbGVnZW5kIHtcclxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDtcclxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAycHg7XHJcbiAgICB9XHJcbn1cclxuIiwiQGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG5ib2R5IHtcclxuICAgIC5sYXlvdXQtdG9vbGJveC1pdGVtIHtcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBAZ3JheS1ib3JkZXI7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgICAgICBwYWRkaW5nOiAoQGNvbnRhaW5lci1wYWRkaW5nIC0gMykgQGNvbnRhaW5lci1wYWRkaW5nO1xyXG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcclxuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XHJcblxyXG4gICAgICAgIGkge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxNnB4O1xyXG4gICAgICAgICAgICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAxNHB4LzEgRm9udEF3ZXNvbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICArIC5sYXlvdXQtdG9vbGJveC1pdGVtIHtcclxuICAgICAgICAgICAgbWFyZ2luLXRvcDogQGNvbnRhaW5lci1wYWRkaW5nIC8gMztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgID4gLmxheW91dC10b29sYm94LXdyYXBwZXIge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiBAY29udGFpbmVyLXBhZGRpbmc7XHJcbiAgICAgICAgd2lkdGg6IDIxOHB4O1xyXG4gICAgICAgIC13ZWJraXQtZmxleC1zaHJpbms6IDA7XHJcbiAgICAgICAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XHJcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XHJcbiAgICAgICAgLyogZm9yY2luZyB0aGUgdG9vbGJveCBoZWlnaHQgdG8gYmUgc21hbGxlciB0aGFuIHRoZSB2aWV3cG9ydCBoZWlnaHRcclxuICAgICAgICAgICAgc28gaXQgaXMgYWx3YXlzIHZpc2libGUgYW5kIHNjcm9sbGFibGUqL1xyXG4gICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA4MHB4KTtcclxuICAgICAgICBvdmVyZmxvdy14OiBjbGlwO1xyXG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgICAgLyogZm9yY2luZyB0aGUgdG9vbGJveCB0byBzdGF5IHN0aWNrZWQgYXQgdGhlIHRoZSB0b3Agb2YgaXRzIGNvbnRhaW5lciAqL1xyXG4gICAgICAgIHBvc2l0aW9uOiAtd2Via2l0LXN0aWNreTtcclxuICAgICAgICBwb3NpdGlvbjogc3RpY2t5O1xyXG4gICAgICAgIHRvcDogMDtcclxuXHJcbiAgICAgICAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xyXG4gICAgICAgICAgICB3aWR0aDogMnB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xyXG4gICAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMCA2cHggcmdiKDAsIDAsIDAsIC4zKTtcclxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMXB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLDAuMyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA+IC5sYXlvdXQtdG9vbGJveCB7XHJcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBncmF5LWJvcmRlcjtcclxuICAgICAgICAgICAgd2lkdGg6IDIyMHB4O1xyXG4gICAgICAgICAgICBtaW4taGVpZ2h0OiA0MDBweDtcclxuICAgICAgICAgICAgcGFkZGluZzogQGNvbnRhaW5lci1wYWRkaW5nIC8gMjtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGdyYXktYmc7XHJcblxyXG4gICAgICAgICAgICAmLnN0aWNreS10b3Age1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICAgICAgICAgICAgdG9wOiAwO1xyXG4gICAgICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICYuc3RpY2t5LWJvdHRvbSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICBib3R0b206IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC5sYXlvdXQtdG9vbGJveC1ncm91cCB7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiBAY29udGFpbmVyLXBhZGRpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgLmxheW91dC10b29sYm94LWdyb3VwLWhlYWRpbmcge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IEBjb250YWluZXItcGFkZGluZyAvIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogQGNvbnRhaW5lci1wYWRkaW5nIC8gMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMGQ3XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICYuY29sbGFwc2VkIHtcclxuICAgICAgICAgICAgICAgICAgICAubGF5b3V0LXRvb2xib3gtZ3JvdXAtaGVhZGluZzpiZWZvcmUge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjBkYVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLmxheW91dC10b29sYm94LWl0ZW1zIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLmxheW91dC10b29sYm94LXNlY3Rpb24gKyAubGF5b3V0LXRvb2xib3gtc2VjdGlvbiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogQGNvbnRhaW5lci1wYWRkaW5nIC8gMztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAubGF5b3V0LXRvb2xib3gtaXRlbSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgQGdyYXktYm9yZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogKEBjb250YWluZXItcGFkZGluZyAtIDMpIEBjb250YWluZXItcGFkZGluZztcclxuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNnB4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAxNHB4LzEgRm9udEF3ZXNvbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICArIC5sYXlvdXQtdG9vbGJveC1pdGVtIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogQGNvbnRhaW5lci1wYWRkaW5nIC8gMztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgKyAubGF5b3V0LXRvb2xib3gtZ3JvdXAge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IEBjb250YWluZXItcGFkZGluZyAvIDI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiQGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICAubGF5b3V0LXBvcHVwIHtcclxuICAgICAgICBkaXNwbGF5OiBub25lOyAvLyBTaG93biBvbmx5IGluIGFjdGl2ZSBvciBmb2N1c2VkIHN0YXRlcy5cclxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgIC1tb3otYm94LXNoYWRvdzogM3B4IDNweCAxMXB4IDAgcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xyXG4gICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogM3B4IDNweCAxMXB4IDAgcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xyXG4gICAgICAgIGJveC1zaGFkb3c6IDNweCAzcHggMTFweCAwIHJnYmEoNTAsIDUwLCA1MCwgMC41KTtcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBAZ3JheS1ib3JkZXI7XHJcbiAgICAgICAgcGFkZGluZzogMnB4IDA7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNztcclxuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xyXG4gICAgICAgIHotaW5kZXg6IDIwO1xyXG4gICAgICAgIGNvbG9yOiBAZ3JheS10ZXh0O1xyXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcclxuICAgICAgICBtaW4td2lkdGg6IDMwMHB4O1xyXG5cclxuICAgICAgICAmLndpZGUge1xyXG4gICAgICAgICAgICB3aWR0aDogNjAwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LXBvcHVwLWZsZXgge1xyXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAycHggNXB4O1xyXG5cclxuICAgICAgICAgICAgLmxheW91dC1wb3B1cC1jb2x1bW4gKyAubGF5b3V0LXBvcHVwLWNvbHVtbiB7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogNHB4O1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBmYWRlKGdyYXksIDE1JSk7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDRweDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1wb3B1cC1pdGVtIHtcclxuICAgICAgICAgICAgcGFkZGluZzogNHB4IDZweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtcG9wdXAtbGFiZWwge1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDAuOWVtO1xyXG4gICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgICAgICAgICAgY29sb3I6IEBncmF5LXRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LXBvcHVwLWFjdGlvbjpob3ZlciB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBncmF5LWJnO1xyXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LXBvcHVwLWlucHV0IHtcclxuICAgICAgICAgICAgaW5wdXRbdHlwZT0ndGV4dCddLCB0ZXh0YXJlYSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPiBsYWJlbCB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45ZW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */ +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxheW91dEVkaXRvci5jc3MiLCJFZGl0b3IubGVzcyIsIkVsZW1lbnQubGVzcyIsIkNvbnRhaW5lci5sZXNzIiwiQ2FudmFzLmxlc3MiLCJSb3cubGVzcyIsIkNvbHVtbi5sZXNzIiwiQ29udGVudC5sZXNzIiwiUmVzZXQubGVzcyIsIlRvb2xib3gubGVzcyIsIlBvcHVwLmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEFDSEE7RUFDSSxxQkFBQTtFQUFBLGNBQUE7RUFDQSx1QkFBQTtNQUFBLCtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxVQUFBO0NEREg7QUNIRDtFQU9RLHFCQUFBO0VBQUEsY0FBQTtDRERQO0FDTkQ7RUFVWSxrQkFBQTtDRERYO0FDTUQ7RUFDSSxxQkFBQTtFQUFBLGNBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0NESkg7QUNDRDtFQU1RLGNBQUE7TUFBQSxVQUFBO0VBQ0Esb0JBQUE7RUFDQSwwQkFBQTtFQUNBLDBCQUFBO0NESlA7QUNMRDtFQVlZLGNBQUE7RUFDQSxvQkFBQTtFQUNBLGlCQUFBO0NESlg7QUNWRDtFQWlCZ0IsdUJBQUE7Q0RKZjtBQ2JEO0VBc0JZLHdCQUFBO0VBQ0EscUJBQUE7RUFDQSxvQkFBQTtDRE5YO0FDbEJEO0VBNkJRLG9CQUFBO0NEUlA7QUNZRDtFQUNJLGNBQUE7Q0RWSDtBQ2FPOztFQUNJLGFBQUE7RUFDQSxlQUFBO0NEVlg7QUNhTztFQUNJLFlBQUE7Q0RYWDtBQ0NEOztFQWNZLGdCQUFBO0NEWFg7QUNIRDtFQWtCWSx1QkFBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0NEWlg7QUNjVztFQUNJLG9CQUFBO0VBQ0EsWUFBQTtDRFpmO0FDWkQ7RUE2QlksZ0JBQUE7Q0RkWDtBQ2ZEO0VBa0NRLG1CQUFBO0VBQ0EsMEJBQUE7RUFDQSxpQkFBQTtFQUNBLHVCQUFBO0NEaEJQO0FDckJEO0VBeUNRLHFCQUFBO0VBQ0EsbUJBQUE7Q0RqQlA7QUN6QkQ7RUE4Q1Esb0JBQUE7Q0RsQlA7O0FFNUVEO0VBRVEsbUJBQUE7RUFDQSxjQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLFdBQUE7Q0Y4RVA7QUUzRU87RUFDSSxlQUFBO0NGNkVYO0FFdkZEO0VBZWdCLGNBQUE7RUFDQSxtQkFBQTtFQUNBLFVBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTtFQUNBLG9CQUFBO0VBQ0Esa0JBQUE7RUFDQSx1QkFBQTtDRjJFZjtBRW5HRDtFQTJCb0Isc0JBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7Q0YyRW5CO0FFeEdEO0VBaUNvQixnQkFBQTtDRjBFbkI7QUUzR0Q7RUFxQ29CLGNBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxtQkFBQTtDRnlFbkI7QUVqSEQ7RUE2Q2dCLFdBQUE7RUFDQSxXQUFBO0NGdUVmO0FFckhEO0VBcURRLGlCQUFBO0NGbUVQO0FFaEVHOztFQUdRLGtCQUFBO0VBQ0Esb0JBQUE7Q0ZpRVg7QUVyRUc7O0VBT1ksYUFBQTtDRmtFZjtBRXpFRztFQWNRLHVDQUFBO0NGOERYO0FFNUVHO0VBaUJZLGVBQUE7RUFDQSxZQUFBO0VBQ0EsMkNBQUE7Q0Y4RGY7QUVqRkc7RUEyQlEsc0JBQUE7Q0Z5RFg7QUVwRkc7RUE4QlksZUFBQTtFQUNBLDBCQUFBO0VBQ0EsZUFBQTtDRnlEZjtBRXpGRztFQW1DZ0Isc0JBQUE7Q0Z5RG5CO0FFeERtQjtFQUNJLDBCQUFBO0NGMER2QjtBRXZEbUI7RUFDSSxnQkFBQTtFQUNBLGdDQUFBO0NGeUR2QjtBRXZEdUI7RUFDSSwwQkFBQTtDRnlEM0I7QUVyRG1CO0VBQ0ksZUFBQTtFQUNBLDBCQUFBO0NGdUR2QjtBRXJEdUI7RUFDSSwwQkFBQTtDRnVEM0I7QUU3R0c7RUErRFEsMkNBQUE7Q0ZpRFg7QUV4S0Q7RUE0SFEsY0FBQTtDRitDUDtBRTNLRDtFQWlJUSx1REFBQTtDRjZDUDtBRTlLRDtFQW9JWSxlQUFBO0VBQ0EsK0JBQUE7RUFDQSxpQkFBQTtFQUNBLHNDQUFBO0VBQ0EsMkNBQUE7Q0Y2Q1g7QUVyTEQ7RUErSVksZ0JBQUE7RUFDQSxpQkFBQTtDRnlDWDs7QUd6TEQ7RUFNZ0IsY0FBQTtFQUNBLDJCQUFBO01BQUEsdUJBQUE7RUFDQSxhQUFBO0VBQ0EsaUJBQUE7RUFDQSw0Q0FBQTtFQUNBLG1CQUFBO0VBQ0EsY0FBQTtFQUNBLHNCQUFBO01BQUEsd0JBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0VBQ0EsYUFBQTtFQUNBLG1CQUFBO0NIdUxmO0FHeE1EO0VBcUJnQixjQUFBO0NIc0xmO0FHM01EO0VBeUJvQixpQkFBQTtDSHFMbkI7QUc5TUQ7RUE4Qm9CLGNBQUE7Q0htTG5CO0FHL0tXO0VBRVEscUJBQUE7RUFBQSxjQUFBO0NIZ0xuQjtBR2xMVztFQU1RLG1CQUFBO0VBQ0EsT0FBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0VBQ0EsUUFBQTtDSCtLbkI7QUd6S0c7RUFHWSw0Q0FBQTtDSHlLZjtBRzVLRztFQU1nQixhQUFBO0NIeUtuQjtBRy9LRztFQVdZLGNBQUE7Q0h1S2Y7QUdsTEc7RUFjZ0IsY0FBQTtDSHVLbkI7O0FJdk9EO0VBR1ksY0FBQTtDSndPWDs7QUt6T087RUFFUSwyREFBQTtDTDJPZjtBSzdPTztFQUlZLDRCQUFBO0NMNE9uQjtBS2hQTztFQVNRLDBCQUFBO0NMME9mO0FLblBPO0VBV1ksMEJBQUE7Q0wyT25COztBTXhQRDtFQUlnQixjQUFBO0VBQ0EsbUJBQUE7RUFDQSxZQUFBO0VBQ0EsT0FBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7Q053UGY7QU1sUUQ7RUFjZ0IsV0FBQTtDTnVQZjtBTXJRRDtFQWtCZ0IsWUFBQTtDTnNQZjtBTWxQTztFQUNJLGVBQUE7Q05vUFg7O0FPMVFEOztFQUVRLGdCQUFBO0NQNlFQO0FPL1FEOztFQU9nQixhQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFUDRRZCx5RkFBeUY7RUFDekYscUNBQXFDO0VBQ3JDLHFDQUFxQztFQUNyQyx1REFBdUQ7RUFDdkQsd0RBQXdEO0VBQ3hEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCQztDQUNGO0FPclREOztFQ0FRLFVBQUE7RUFDQSxXQUFBO0VBQ0Esd0JBQUE7Q1J5VFA7QU8zVEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VDT1EsZUFBQTtDUnNWUDtBTzdWRDs7Ozs7Ozs7Ozs7Ozs7RUNXUSxnQkFBQTtFQUNBLG1CQUFBO0NSa1dQO0FPOVdEOzs7O0VDZ0JRLGtCQUFBO0VBQ0EsbUJBQUE7Q1JvV1A7QU9yWEQ7O0VDcUJRLG1CQUFBO0NSb1dQO0FPelhEOzs7Ozs7OztFQ3lCUSx1QkFBQTtFQUNBLGlCQUFBO0NSMFdQO0FPcFlEOzs7Ozs7Ozs7O0VDOEJRLG1CQUFBO0NSa1hQO0FPaFpEOzs7O0VDa0NRLG9CQUFBO0NSb1hQO0FPdFpEOzs7Ozs7OztFQ3NDUSx1QkFBQTtDUjBYUDtBT2hhRDs7RUMwQ1Esa0JBQUE7Q1IwWFA7QU9wYUQ7O0VDOENRLG1CQUFBO0NSMFhQO0FPeGFEOztFQ2tEUSxvQkFBQTtDUjBYUDtBTzVhRDs7RUNzRFEsc0JBQUE7Q1IwWFA7QU9oYkQ7Ozs7RUMwRFEsb0JBQUE7RUFDQSxtQkFBQTtDUjRYUDtBT3ZiRDs7RUNnRVEsY0FBQTtDUjJYUDtBTzNiRDs7RUNvRVEsbUJBQUE7RUFDQSxvQkFBQTtDUjJYUDtBT2hjRDs7RUN5RVEsbUJBQUE7RUFDQSxvQkFBQTtFQUNBLGVBQUE7RUFDQSw4QkFBQTtFQUNBLG9CQUFBO0NSMlhQO0FPeGNEOztFQ2lGUSw2QkFBQTtDUjJYUDtBTzVjRDs7RUNxRlEsNkJBQUE7Q1IyWFA7QU9oZEQ7Ozs7Ozs7Ozs7RUN5RlEsc0JBQUE7Q1JtWVA7QU81ZEQ7O0VDOEZRLGVBQUE7Q1JrWVA7QU9oZUQ7O0VDa0dRLGVBQUE7Q1JrWVA7QU9wZUQ7Ozs7RUNzR1EsMkJBQUE7Q1JvWVA7QU8xZUQ7Ozs7Ozs7O0VDMkdRLGFBQUE7Q1J5WVA7QU9wZkQ7O0VDK0dRLGNBQUE7Q1J5WVA7QU94ZkQ7O0VDbUhRLG1CQUFBO0VBQ0EsYUFBQTtDUnlZUDtBTzdmRDs7OztFQ3dIUSxrQ0FBQTtDUjJZUDtBT25nQkQ7Ozs7RUM0SFEsMkJBQUE7Q1I2WVA7QU96Z0JEOzs7Ozs7RUNnSVEsOEJBQUE7Q1JpWlA7QU9qaEJEOztFQ29JUSx1QkFBQTtDUmlaUDtBT3JoQkQ7O0VDd0lRLG9CQUFBO0NSaVpQO0FPemhCRDs7RUM0SVEscUJBQUE7Q1JpWlA7QU83aEJEOztFQ2dKUSxjQUFBO0VBQ0EsaUJBQUE7Q1JpWlA7QU9saUJEOztFQ3FKUSxvQkFBQTtDUmlaUDtBT3RpQkQ7O0VDeUpRLGlCQUFBO0NSaVpQO0FPMWlCRDs7RUM2SlEsb0JBQUE7Q1JpWlA7QU85aUJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VDaUtRLGVBQUE7Q1JxYVA7QU90a0JEOztFQ3FLUSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtDUnFhUDtBTzdrQkQ7O0VDNEtRLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0NScWFQO0FPcGxCRDs7RUNtTFEsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7Q1JxYVA7QU8zbEJEOztFQzBMUSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtDUnFhUDtBT2xtQkQ7O0VDaU1RLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0NScWFQO0FPem1CRDs7RUN3TVEsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7Q1JxYVA7QU9obkJEOzs7Ozs7Ozs7Ozs7RUMrTVEsZUFBQTtDUithUDtBTzluQkQ7O0VDbU5RLG1CQUFBO0NSK2FQO0FPbG9CRDs7Ozs7Ozs7RUN1TlEsZ0JBQUE7RUFDQSxtQkFBQTtDUnFiUDtBTzdvQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VDK05ZLGNBQUE7RUFDQSxpQkFBQTtDUmdkWDtBT2hyQkQ7O0VDb09RLGtCQUFBO0NSZ2RQO0FPcHJCRDs7Ozs7O0VDd09RLG1CQUFBO0NSb2RQO0FPNXJCRDs7RUM0T1EseUJBQUE7Q1JvZFA7QU9oc0JEOzs7O0VDZ1BRLHNCQUFBO0NSc2RQO0FPdHNCRDs7Ozs7Ozs7Ozs7O0VDc1BZLHdCQUFBO0NSOGRYO0FPcHRCRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VDa1FnQix3QkFBQTtDUndmZjtBTzF2QkQ7O0VDc1FRLGVBQUE7Q1J3ZlA7QU85dkJEOztFQzBRUSx1QkFBQTtDUndmUDtBT2x3QkQ7Ozs7RUM4UVEsNEJBQUE7Q1IwZlA7QU94d0JEOzs7O0VDa1JRLHNCQUFBO0NSNGZQO0FPOXdCRDs7OztFQ3NSUSw0QkFBQTtDUjhmUDtBT3B4QkQ7Ozs7RUMwUlEseUJBQUE7Q1JnZ0JQO0FPMXhCRDs7OztFQzhSUSw0QkFBQTtDUmtnQlA7QU9oeUJEOzs7O0VDa1NRLG1CQUFBO0NSb2dCUDtBT3R5QkQ7Ozs7Ozs7O0VDc1NRLG9CQUFBO0NSMGdCUDtBT2h6QkQ7Ozs7Ozs7Ozs7Ozs7Ozs7RUMyU1kscUJBQUE7Q1J1aEJYO0FPbDBCRDs7RUMrU1EsdUJBQUE7RUFDQSxvQkFBQTtFQUNBLDBCQUFBO0VBQ0EscUJBQUE7Q1J1aEJQO0FPejBCRDs7OztFQ3NUUSxhQUFBO0NSeWhCUDtBTy8wQkQ7O0VDMFRRLGtCQUFBO0NSeWhCUDtBT24xQkQ7Ozs7Ozs7O0VDOFRRLHVCQUFBO0NSK2hCUDtBTzcxQkQ7Ozs7OztFQ2tVUSx3QkFBQTtDUm1pQlA7QU9yMkJEOzs7Ozs7RUNzVVEsbUJBQUE7Q1J1aUJQO0FPNzJCRDs7Ozs7Ozs7RUMwVVEsc0JBQUE7Q1I2aUJQO0FPdjNCRDs7Ozs7Ozs7Ozs7Ozs7RUN3V1EscUJBQUE7Q1IraEJQO0FPdjRCRDs7RUM0V1Esc0JBQUE7Q1IraEJQO0FPMzRCRDs7Ozs7Ozs7Ozs7Ozs7RUNpWFEsdUJBQUE7Q1IwaUJQO0FPMzVCRDs7OztFQ3FYUSxxQkFBQTtDUjRpQlA7QU9qNkJEOztFQ3lYUSxZQUFBO0VBQ0Esb0JBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0NSNGlCUDtBT3g2QkQ7O0VDZ1lRLGlCQUFBO0VBQ0Esa0JBQUE7RUFDQSw4QkFBQTtFQUNBLCtCQUFBO0NSNGlCUDtBTy82QkQ7O0VDdVlRLGtCQUFBO0VBQ0EsbUJBQUE7Q1I0aUJQO0FPcDdCRDs7RUFlb0IseUJBQUE7Q1B5NkJuQjtBT3g3QkQ7O0VBbUJvQiw0QkFBQTtDUHk2Qm5CO0FPcDZCTzs7OztFQUVRLGVBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxhQUFBO0NQdzZCZjtBT3I4QkQ7O0VBbUNRLGVBQUE7RUFDQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxhQUFBO0NQczZCUDs7QVM3OEJEO0VBRVEsMEJBQUE7RUFDQSx1QkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxzQkFBQTtDVCs4QlA7QVNyOUJEO0VBU1ksc0JBQUE7RUFDQSxZQUFBO0VBQ0EsOENBQUE7Q1QrOEJYO0FTMTlCRDtFQWVZLGdCQUFBO0NUODhCWDtBU3o4QkQ7RUFFUSxpQkFBQTtFQUNBLFNBQUE7RUFDQSxtQkFBQTtFQUNBLGFBQUE7RUFDQSxpQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxpQkFBQTtFQUNBLGFBQUE7Q1QwOEJQO0FTcDlCRDtFQWFZLDBCQUFBO0VBQ0EsYUFBQTtFQUNBLDBCQUFBO0NUMDhCWDtBU3o5QkQ7RUFtQm9CLGVBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0NUeThCbkI7QVN2OEJtQjtFQUNJLHNCQUFBO0VBQ0EsWUFBQTtFQUNBLGtCQUFBO0VBQ0EsOENBQUE7RUFDQSxtQkFBQTtFQUNBLGlCQUFBO0NUeThCdkI7QVNyOEJlO0VBRVEsaUJBQUE7Q1RzOEJ2QjtBU3g4QmU7RUFNUSxjQUFBO0NUcThCdkI7QVM1K0JEO0VBNENvQixnQkFBQTtDVG04Qm5CO0FTLytCRDtFQWdEb0IsMEJBQUE7RUFDQSx1QkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7Q1RrOEJuQjtBU3IvQkQ7RUFzRHdCLHNCQUFBO0VBQ0EsWUFBQTtFQUNBLDhDQUFBO0NUazhCdkI7QVMxL0JEO0VBNER3QixnQkFBQTtDVGk4QnZCO0FTNy9CRDtFQWlFb0IsZ0JBQUE7Q1QrN0JuQjs7QVVwaENEO0VBRVEsY0FBQTtFQUNBLG1CQUFBO0VBQ0EsVUFBQTtFQUdBLGlEQUFBO0VBQ0EsMEJBQUE7RUFDQSxlQUFBO0VBQ0EsMEJBQUE7RUFDQSxpQkFBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLG9CQUFBO0VBQ0Esb0JBQUE7RUFDQSxpQkFBQTtDVnNoQ1A7QVVwaENPO0VBQ0ksYUFBQTtDVnNoQ1g7QVUzaUNEO0VBeUJZLHFCQUFBO0VBQUEsY0FBQTtFQUNBLGlCQUFBO0NWcWhDWDtBVS9pQ0Q7RUE2QmdCLGlCQUFBO0VBQ0EsaURBQUE7RUFDQSxrQkFBQTtDVnFoQ2Y7QVVwakNEO0VBb0NZLGlCQUFBO0NWbWhDWDtBVXZqQ0Q7RUF3Q1ksaUJBQUE7RUFDQSxrQkFBQTtFQUNBLGVBQUE7Q1ZraENYO0FVNWpDRDtFQThDWSwwQkFBQTtFQUNBLGdCQUFBO0NWaWhDWDtBVWhrQ0Q7O0VBb0RnQixZQUFBO0NWZ2hDZjtBVXBrQ0Q7RUF3RGdCLGVBQUE7RUFDQSxpQkFBQTtDVitnQ2YiLCJmaWxlIjoiTGF5b3V0RWRpdG9yLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5sYXlvdXQtZWRpdG9yLXRvb2xiYXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAxMHB4O1xufVxuLmxheW91dC1lZGl0b3ItdG9vbGJhciAubGF5b3V0LWVkaXRvci10b29sYmFyLWdyb3VwIHtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5sYXlvdXQtZWRpdG9yLXRvb2xiYXIgLmxheW91dC1lZGl0b3ItdG9vbGJhci1ncm91cCA+IGxpICsgbGkge1xuICBtYXJnaW4tbGVmdDogMTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yIHtcbiAgZGlzcGxheTogZmxleDtcbiAgbWFyZ2luLXRvcDogMWVtO1xuICBmb250LXNpemU6IDE0cHg7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtY2FudmFzLXdyYXBwZXIge1xuICBmbGV4OiAxIDE7XG4gIGhlaWdodDogZml0LWNvbnRlbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNGU1ZTY7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtY2FudmFzLXdyYXBwZXIgPiAubGF5b3V0LXRvb2xiYXItY29udGFpbmVyIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgbWFyZ2luOiAxMnB4IDEycHggMDtcbiAgbWluLWhlaWdodDogNzFweDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC1jYW52YXMtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJhci1jb250YWluZXIgPiAubWNlLXBhbmVsIHtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC1jYW52YXMtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gLmxheW91dC1wbGFjZWhvbGRlciB7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCAjY2NjO1xuICBwYWRkaW5nOiAwLjJlbSAwLjRlbTtcbiAgYmFja2dyb3VuZDogI2U4ZThlODtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtc25pcHBldCB7XG4gIGJhY2tncm91bmQ6ICNlOGU4ZTg7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyAuaGVscC1yb3c6YmVmb3JlLFxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93OmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyAuaGVscC1yb3cgPiAuaGVscC1jb2x1bW4tZnVsbCxcbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyA+IC5oZWxwLWNvbHVtbi1oYWxmIHtcbiAgbWFyZ2luOiAwLjVlbSAwO1xufVxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93ID4gLmhlbHAtY29sdW1uLWhhbGYge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDUwJTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyA+IC5oZWxwLWNvbHVtbi1oYWxmOm50aC1jaGlsZCgybikge1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICBjbGVhcjogbGVmdDtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyArIC5oZWxwLXJvdyB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIGNvZGUge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjU7XG4gIHBhZGRpbmc6IDJweCA0cHg7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyBwIHtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjZlbTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIHRhYmxlID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkIHtcbiAgcGFkZGluZy1yaWdodDogMTBweDtcbn1cblxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHBhZGRpbmc6IDA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29sdW1uKSB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW46IDA7XG4gIHotaW5kZXg6IDIwO1xuICBoZWlnaHQ6IDI1cHg7XG4gIHBhZGRpbmc6IDAgNnB4O1xuICBsaXN0LXN0eWxlOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBsaW5lLWhlaWdodDogMjVweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtZWxlbWVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtaXRlbSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiAyNXB4O1xuICBwYWRkaW5nOiAxcHggNnB4IDA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWxhYmVsIHtcbiAgZm9udC1zaXplOiAxM3B4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24ge1xuICBkaXNwbGF5OiBub25lO1xuICB3aWR0aDogMjhweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwtbWFpbiB7XG4gIHRvcDogLTI3cHg7XG4gIGxlZnQ6IC0ycHg7XG59XG4ubGF5b3V0LWVkaXRvciBsaS5sYXlvdXQtZWxlbWVudCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUsXG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkIHtcbiAgYm9yZGVyLXdpZHRoOiAycHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlcixcbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XG4gIG1hcmdpbjogLTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWFjdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogcmdiYSgxMDQsIDEwNCwgMTA0LCAwLjEpO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtYWN0aXZlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsLW1haW4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgei1pbmRleDogMzA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTA0LCAxMDQsIDEwNCwgMC4xKTtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQge1xuICBib3JkZXItY29sb3I6ICM2NDg3MjE7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2NDg3MjE7XG4gIGNvbG9yOiAjZmVmZWZlO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyYjAyYjtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWFjdGlvbi5kaXNhYmxlZCB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgY29sb3I6IHJnYmEoMjU0LCAyNTQsIDI1NCwgMC40KTtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWFjdGlvbi5kaXNhYmxlZDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2NDg3MjE7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24uYWN0aXZlIHtcbiAgY29sb3I6ICNkZWZmNDI7XG4gIGJhY2tncm91bmQtY29sb3I6ICM3MzliMjY7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24uYWN0aXZlOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyYjAyYjtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LXNlbGVjdGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDEzNSwgMzMsIDAuMDgpO1xufVxuLmxheW91dC1lZGl0b3IgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0IHtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDEycHggNnB4IHJnYmEoMTAwLCAxMzUsIDMzLCAwLjUpO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDtcbiAgbWluLWhlaWdodDogNzhweDtcbiAgYm9yZGVyOiAycHggZGFzaGVkICM2NDg3MjEgIWltcG9ydGFudDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDEzNSwgMzMsIDAuMTYpO1xufVxuLmxheW91dC1lZGl0b3IgLm1lZGlhLXRodW1ibmFpbCBpbWcge1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRhaW5lci1jaGlsZHJlbi1wbGFjZWhvbGRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbjogMTFweDtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYm9yZGVyOiAxcHggZGFzaGVkIHJnYmEoMTI0LCAxMjQsIDEyNCwgMC40KTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBwYWRkaW5nOiAxMnB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIG9wYWNpdHk6IDAuNjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250YWluZXIgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4ge1xuICBwYWRkaW5nOiAxMnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250YWluZXIgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29udGFpbmVyKSArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpIHtcbiAgbWFyZ2luLXRvcDogMTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLnVpLXNvcnRhYmxlLWhlbHBlcjpmaXJzdC1jaGlsZCArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIubGF5b3V0LWNvbnRhaW5lci1lbXB0eSA+IC5sYXlvdXQtY29udGFpbmVyLWNoaWxkcmVuLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIubGF5b3V0LWNvbnRhaW5lci1lbXB0eSA+IC5sYXlvdXQtY2hpbGRyZW4ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1jb250YWluZXIubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXI6IDFweCBkYXNoZWQgcmdiYSgxMjQsIDEyNCwgMTI0LCAwLjYpO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcbiAgbWFyZ2luOiAtMXB4O1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1jb250YWluZXIgKyAubGF5b3V0LWNvbnRhaW5lcjpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXItdG9wOiAwO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1jb250YWluZXIgKyAubGF5b3V0LWNvbnRhaW5lcjpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY2FudmFzICNkdW1teSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcm93LmxheW91dC1lbGVtZW50LWZvY3VzZWQ6bm90KC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0KSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXItdG9wOiAxcHggZGFzaGVkIHJnYmEoMTI0LCAxMjQsIDEyNCwgMC42KSAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1yb3cubGF5b3V0LWVsZW1lbnQtZm9jdXNlZDpub3QoLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcbiAgbWFyZ2luLXRvcDogLTFweCAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1yb3cubGF5b3V0LWVsZW1lbnQtZm9jdXNlZDpub3QoLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50ICsgLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XG4gIGJvcmRlci1sZWZ0OiAwICFpbXBvcnRhbnQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXJvdy5sYXlvdXQtZWxlbWVudC1mb2N1c2VkOm5vdCgubGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldCkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWVsZW1lbnQgKyAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xuICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbHVtbiA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMzA7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTAwJTtcbiAgY3Vyc29yOiBjb2wtcmVzaXplO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb2x1bW4gPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXItbGVmdCB7XG4gIGxlZnQ6IC02cHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbHVtbiA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhci1yaWdodCB7XG4gIHJpZ2h0OiAtNnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb2x1bW4ubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwge1xuICBtaW4taGVpZ2h0OiAxZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB7XG4gIHBhZGRpbmc6IDJweDtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAvKiB0aGlzIGNvbG9yIGlzIGp1c3QgYSBzdWdnZXN0aW9uIGFuZCBjYW4gYmUgY2hhbmdlZCBiYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBmZWVkYmFjayAqL1xuICAvKiB0aGlzIGFsc28gaGFzIGJpZGkgaW1wbGljYXRpb25zICovXG4gIC8qIHRoaXMgYWxzbyBoYXMgYmlkaSBpbXBsaWNhdGlvbnMgKi9cbiAgLyogTFRSLXNwZWNpZmljOiB1c2UgJ21hcmdpbi1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xuICAvKiBMVFItc3BlY2lmaWM6IHVzZSAncGFkZGluZy1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xuICAvKnRhYmxlW3J1bGVzPW5vbmUgaV0sIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSwgdGFibGVbcnVsZXM9cm93cyBpXSxcbnRhYmxlW3J1bGVzPWNvbHMgaV0sIHRhYmxlW3J1bGVzPWFsbCBpXSwgdGFibGVbZnJhbWU9dm9pZCBpXSxcbnRhYmxlW2ZyYW1lPWFib3ZlIGldLCB0YWJsZVtmcmFtZT1iZWxvdyBpXSwgdGFibGVbZnJhbWU9aHNpZGVzIGldLFxudGFibGVbZnJhbWU9bGhzIGldLCB0YWJsZVtmcmFtZT1yaHMgaV0sIHRhYmxlW2ZyYW1lPXZzaWRlcyBpXSxcbnRhYmxlW2ZyYW1lPWJveCBpXSwgdGFibGVbZnJhbWU9Ym9yZGVyIGldLFxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1ub25lIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0aGVhZCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRoZWFkID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGJvZHkgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9cm93cyBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1hbGwgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRmb290ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1jb2xzIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdGZvb3QgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9YWxsIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1hbGwgaV0gPiB0Zm9vdCA+IHRyID4gdGgge1xuICAgIGJvcmRlci1jb2xvcjogYmxhY2s7XG59Ki9cbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgKixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgKiB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsb2NrcXVvdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsb2NrcXVvdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNlbnRlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY2VudGVyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXYsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpdixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZmlndXJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ2NhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ2NhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZvb3Rlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZm9vdGVyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmb3JtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmb3JtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoZWFkZXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhlYWRlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaHIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsZWdlbmQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxlZ2VuZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwbGFpbnRleHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcHJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHhtcCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ3VyZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwbGFpbnRleHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcHJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHhtcCB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ3VyZSB7XG4gIG1hcmdpbi1sZWZ0OiA0MHB4O1xuICBtYXJnaW4tcmlnaHQ6IDQwcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3Mge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxpc3RpbmcsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxpc3RpbmcsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHBsYWludGV4dCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwcmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgeG1wLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICB3aGl0ZS1zcGFjZTogcHJlO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjaXRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjaXRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZm4sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRmbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZW0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGVtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB2YXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHZhciB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3Ryb25nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBrYmQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGtiZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2FtcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2FtcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHR0IHtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYmlnLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBiaWcge1xuICBmb250LXNpemU6IGxhcmdlcjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc21hbGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNtYWxsIHtcbiAgZm9udC1zaXplOiBzbWFsbGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdWIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1YiB7XG4gIHZlcnRpY2FsLWFsaWduOiBzdWI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1cCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3VwIHtcbiAgdmVydGljYWwtYWxpZ246IHN1cGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdWIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1Yixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdXAge1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBmb250LXNpemU6IHNtYWxsZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ1YnksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ1Ynkge1xuICBkaXNwbGF5OiBydWJ5O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCByYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmIge1xuICBkaXNwbGF5OiBydWJ5LWJhc2U7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydCB7XG4gIGRpc3BsYXk6IHJ1YnktdGV4dDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZm9udC1zaXplOiA1MCU7XG4gIGZvbnQtdmFyaWFudC1lYXN0LWFzaWFuOiBydWJ5O1xuICB0ZXh0LWVtcGhhc2lzOiBub25lO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCByYmMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiYyB7XG4gIGRpc3BsYXk6IHJ1YnktYmFzZS1jb250YWluZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0Yyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnRjIHtcbiAgZGlzcGxheTogcnVieS10ZXh0LWNvbnRhaW5lcjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnVieSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnVieSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiYyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmJjLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydGMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0YyB7XG4gIHVuaWNvZGUtYmlkaTogaXNvbGF0ZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmxpbmssXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDpsaW5rIHtcbiAgY29sb3I6ICMwMDAwRUU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDp2aXNpdGVkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6dmlzaXRlZCB7XG4gIGNvbG9yOiAjNTUxQThCO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6bGluayxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmxpbmssXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDp2aXNpdGVkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6dmlzaXRlZCB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhOmxpbmtbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYTpsaW5rW3JlbH49aGVscF0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGE6dmlzaXRlZFtyZWx+PWhlbHBdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhOnZpc2l0ZWRbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYXJlYTpsaW5rW3JlbH49aGVscF0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFyZWE6bGlua1tyZWx+PWhlbHBdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhcmVhOnZpc2l0ZWRbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYXJlYTp2aXNpdGVkW3JlbH49aGVscF0ge1xuICBjdXJzb3I6IGhlbHA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDpmb2N1cyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmZvY3VzIHtcbiAgb3V0bGluZTogYXV0bztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbWFyayxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbWFyayB7XG4gIGJhY2tncm91bmQ6IHllbGxvdztcbiAgY29sb3I6IGJsYWNrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhYmJyW3RpdGxlXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYWJiclt0aXRsZV0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFjcm9ueW1bdGl0bGVdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhY3JvbnltW3RpdGxlXSB7XG4gIHRleHQtZGVjb3JhdGlvbjogZG90dGVkIHVuZGVybGluZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5zLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHUge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN0cmlrZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3RyaWtlIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsaW5rLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibGluayB7XG4gIHRleHQtZGVjb3JhdGlvbjogYmxpbms7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHE6OmJlZm9yZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcTo6YmVmb3JlIHtcbiAgY29udGVudDogb3Blbi1xdW90ZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcTo6YWZ0ZXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHE6OmFmdGVyIHtcbiAgY29udGVudDogY2xvc2UtcXVvdGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJyOjpiZWZvcmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJyOjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxBJztcbiAgd2hpdGUtc3BhY2U6IHByZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbm9icixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbm9iciB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHdicixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgd2JyIHtcbiAgY29udGVudDogJ1xcMjAwQic7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG5vYnIgd2JyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBub2JyIHdiciB7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFydGljbGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFydGljbGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFzaWRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhc2lkZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDEsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgxLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgzLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaGdyb3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoZ3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG5hdixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbmF2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzZWN0aW9uLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzZWN0aW9uIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgxLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMSB7XG4gIG1hcmdpbi10b3A6IDAuNjdlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC42N2VtO1xuICBmb250LXNpemU6IDIuMDBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMiB7XG4gIG1hcmdpbi10b3A6IDAuODNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC44M2VtO1xuICBmb250LXNpemU6IDEuNTBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgzLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMyB7XG4gIG1hcmdpbi10b3A6IDEuMDBlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS4wMGVtO1xuICBmb250LXNpemU6IDEuMTdlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNCB7XG4gIG1hcmdpbi10b3A6IDEuMzNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS4zM2VtO1xuICBmb250LXNpemU6IDEuMDBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg1LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNSB7XG4gIG1hcmdpbi10b3A6IDEuNjdlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS42N2VtO1xuICBmb250LXNpemU6IDAuODNlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNiB7XG4gIG1hcmdpbi10b3A6IDIuMzNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMi4zM2VtO1xuICBmb250LXNpemU6IDAuNjdlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGR0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsaSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGkge1xuICBkaXNwbGF5OiBsaXN0LWl0ZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHtcbiAgbWFyZ2luLXRvcDogMWVtO1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGQge1xuICBtYXJnaW4tbGVmdDogNDBweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHtcbiAgcGFkZGluZy1sZWZ0OiA0MHB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wge1xuICBsaXN0LXN0eWxlLXR5cGU6IGRlY2ltYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwge1xuICBsaXN0LXN0eWxlLXR5cGU6IGRpc2M7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHVsIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwgdWwge1xuICBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlIHtcbiAgZGlzcGxheTogdGFibGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNhcHRpb24ge1xuICBkaXNwbGF5OiB0YWJsZS1jYXB0aW9uO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sZ3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbGdyb3VwW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbGdyb3VwW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW4tZ3JvdXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW47XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aGVhZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWRbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWRbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keVtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keVtoaWRkZW5dIHtcbiAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGZvb3QsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1mb290ZXItZ3JvdXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHJbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHJbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IHRhYmxlLXJvdztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cFtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cFtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0ge1xuICB2aXNpYmlsaXR5OiBjb2xsYXBzZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXNwYWNpbmc6IDJweDtcbiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbiAgdGV4dC1pbmRlbnQ6IGluaXRpYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoIHtcbiAgcGFkZGluZzogMXB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUgPiB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUgPiB0ciB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgge1xuICB2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCB7XG4gIGJvcmRlci1jb2xvcjogZ3JheTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyIHtcbiAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNlbGVjdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2VsZWN0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9wdGlvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb3B0Z3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9wdGdyb3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBidXR0b24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGV4dGFyZWEsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRleHRhcmVhLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBrZXlnZW4sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGtleWdlbiB7XG4gIHRleHQtaW5kZW50OiBpbml0aWFsO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZXh0YXJlYSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGV4dGFyZWEge1xuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dFt0eXBlPVwicmVzZXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNlbGVjdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2VsZWN0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBidXR0b24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYnV0dG9uIHtcbiAgcGFkZGluZzogMC4zZW0gMC41ZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBociB7XG4gIGNvbG9yOiBncmF5O1xuICBib3JkZXItc3R5bGU6IGluc2V0O1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgbWFyZ2luOiAwLjVlbSBhdXRvO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWVsZHNldCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZmllbGRzZXQge1xuICBtYXJnaW4tbGVmdDogMnB4O1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgYm9yZGVyOiBncm9vdmUgMnB4IFRocmVlREZhY2U7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGVnZW5kLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsZWdlbmQge1xuICBwYWRkaW5nLWxlZnQ6IDJweDtcbiAgcGFkZGluZy1yaWdodDogMnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA+ICo6Zmlyc3QtY2hpbGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gKjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAqOmxhc3QtY2hpbGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gKjpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50LmxheW91dC1jb250ZW50LWltYWdlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gaW1nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sLmxheW91dC1jb250ZW50LWltYWdlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gaW1nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50LmxheW91dC1jb250ZW50LXZlY3Rvci1pbWFnZSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb250ZW50LW1hcmt1cCA+IGltZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbC5sYXlvdXQtY29udGVudC12ZWN0b3ItaW1hZ2UgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiBpbWcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmxheW91dC1lZGl0b3IgLmltZy1yZXNwb25zaXZlLFxuLmxheW91dC1lZGl0b3IgLmltZy1yZXNwb25zaXZlIGltZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbmJvZHkgLmxheW91dC10b29sYm94LWl0ZW0ge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNWU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBwYWRkaW5nOiA5cHggMTJweDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG59XG5ib2R5IC5sYXlvdXQtdG9vbGJveC1pdGVtIGkge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxNnB4O1xuICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAxNHB4LzEgRm9udEF3ZXNvbWU7XG59XG5ib2R5IC5sYXlvdXQtdG9vbGJveC1pdGVtICsgLmxheW91dC10b29sYm94LWl0ZW0ge1xuICBtYXJnaW4tdG9wOiA0cHg7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyIHtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgdG9wOiAxdmg7XG4gIHBhZGRpbmctbGVmdDogMTJweDtcbiAgd2lkdGg6IDIyMHB4O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XG4gIG1pbi1oZWlnaHQ6IDQwMHB4O1xuICBtYXgtaGVpZ2h0OiA5OHZoO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U0ZTVlNjtcbiAgcGFkZGluZzogNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmNGY1O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAgLmxheW91dC10b29sYm94LWdyb3VwLWhlYWRpbmcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCAubGF5b3V0LXRvb2xib3gtZ3JvdXAtaGVhZGluZzpiZWZvcmUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxMHB4O1xuICBtYXJnaW4tcmlnaHQ6IDRweDtcbiAgZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbnRlbnQ6IFwiXFxmMGQ3XCI7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cC5jb2xsYXBzZWQgLmxheW91dC10b29sYm94LWdyb3VwLWhlYWRpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYwZGFcIjtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwLmNvbGxhcHNlZCAubGF5b3V0LXRvb2xib3gtaXRlbXMge1xuICBkaXNwbGF5OiBub25lO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAgLmxheW91dC10b29sYm94LXNlY3Rpb24gKyAubGF5b3V0LXRvb2xib3gtc2VjdGlvbiB7XG4gIG1hcmdpbi10b3A6IDRweDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIC5sYXlvdXQtdG9vbGJveC1pdGVtIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U0ZTVlNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgcGFkZGluZzogOXB4IDEycHg7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIC5sYXlvdXQtdG9vbGJveC1pdGVtIGkge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxNnB4O1xuICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAxNHB4LzEgRm9udEF3ZXNvbWU7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCAubGF5b3V0LXRvb2xib3gtaXRlbSArIC5sYXlvdXQtdG9vbGJveC1pdGVtIHtcbiAgbWFyZ2luLXRvcDogNHB4O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAgKyAubGF5b3V0LXRvb2xib3gtZ3JvdXAge1xuICBtYXJnaW4tdG9wOiA2cHg7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAge1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIG1hcmdpbjogMDtcbiAgLW1vei1ib3gtc2hhZG93OiAzcHggM3B4IDExcHggMCByZ2JhKDUwLCA1MCwgNTAsIDAuNSk7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogM3B4IDNweCAxMXB4IDAgcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xuICBib3gtc2hhZG93OiAzcHggM3B4IDExcHggMCByZ2JhKDUwLCA1MCwgNTAsIDAuNSk7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNGU1ZTY7XG4gIHBhZGRpbmc6IDJweCAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xuICBsaXN0LXN0eWxlOiBub25lO1xuICB6LWluZGV4OiAyMDtcbiAgY29sb3I6ICM3YzdjN2M7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgbWluLXdpZHRoOiAzMDBweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAud2lkZSB7XG4gIHdpZHRoOiA2MDBweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1mbGV4IHtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZzogMnB4IDVweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1mbGV4IC5sYXlvdXQtcG9wdXAtY29sdW1uICsgLmxheW91dC1wb3B1cC1jb2x1bW4ge1xuICBtYXJnaW4tbGVmdDogNHB4O1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHJnYmEoMTI4LCAxMjgsIDEyOCwgMC4xNSk7XG4gIHBhZGRpbmctbGVmdDogNHB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCAubGF5b3V0LXBvcHVwLWl0ZW0ge1xuICBwYWRkaW5nOiA0cHggNnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCAubGF5b3V0LXBvcHVwLWxhYmVsIHtcbiAgZm9udC1zaXplOiAwLjllbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjN2M3YzdjO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCAubGF5b3V0LXBvcHVwLWFjdGlvbjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1pbnB1dCBpbnB1dFt0eXBlPSd0ZXh0J10sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtaW5wdXQgdGV4dGFyZWEge1xuICB3aWR0aDogMTAwJTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1pbnB1dCA+IGxhYmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogMC45ZW07XG59XG4iLCJAaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yLXRvb2xiYXIge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHRvcDogMTBweDtcclxuXHJcbiAgICAubGF5b3V0LWVkaXRvci10b29sYmFyLWdyb3VwIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG5cclxuICAgICAgICA+IGxpICsgbGkge1xyXG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMTJweDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBtYXJnaW4tdG9wOiAxZW07XHJcbiAgICBmb250LXNpemU6IEBmb250LXNpemU7XHJcblxyXG4gICAgPiAubGF5b3V0LWNhbnZhcy13cmFwcGVyIHtcclxuICAgICAgICBmbGV4OiAxIDE7XHJcbiAgICAgICAgaGVpZ2h0OiBmaXQtY29udGVudDtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAZ3JheS1iZztcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBAZ3JheS1ib3JkZXI7XHJcblxyXG4gICAgICAgID4gLmxheW91dC10b29sYmFyLWNvbnRhaW5lciB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgICAgICAgIG1hcmdpbjogQGNvbnRhaW5lci1wYWRkaW5nIEBjb250YWluZXItcGFkZGluZyAwO1xyXG4gICAgICAgICAgICBtaW4taGVpZ2h0OiA3MXB4O1xyXG5cclxuICAgICAgICAgICAgPiAubWNlLXBhbmVsIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAubGF5b3V0LXBsYWNlaG9sZGVyIHtcclxuICAgICAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkICNjY2M7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDAuMmVtIDAuNGVtO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZThlOGU4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAubGF5b3V0LXNuaXBwZXQge1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNlOGU4ZTg7XHJcbiAgICB9XHJcbn1cclxuXHJcbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcblxyXG4gICAgLmhlbHAtcm93IHtcclxuICAgICAgICAmOmJlZm9yZSwgJjphZnRlciB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IFwiIFwiOyAvLyAxXHJcbiAgICAgICAgICAgIGRpc3BsYXk6IHRhYmxlOyAvLyAyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmOmFmdGVyIHtcclxuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA+IC5oZWxwLWNvbHVtbi1mdWxsLCA+IC5oZWxwLWNvbHVtbi1oYWxmIHtcclxuICAgICAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPiAuaGVscC1jb2x1bW4taGFsZiB7XHJcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgICAgICAgICB3aWR0aDogNTAlO1xyXG5cclxuICAgICAgICAgICAgJjpudGgtY2hpbGQoMm4pIHtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7XHJcbiAgICAgICAgICAgICAgICBjbGVhcjogbGVmdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgKyAuaGVscC1yb3cge1xyXG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAxZW07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvZGUge1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmNGY1O1xyXG4gICAgICAgIHBhZGRpbmc6IDJweCA0cHg7XHJcbiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcclxuICAgIH1cclxuXHJcbiAgICBwIHtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcclxuICAgICAgICBsaW5lLWhlaWdodDogMS42ZW07XHJcbiAgICB9XHJcblxyXG4gICAgdGFibGUgPiB0Ym9keSA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7XHJcbiAgICB9XHJcbn1cclxuIiwiQGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICAubGF5b3V0LWVsZW1lbnQge1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xyXG4gICAgICAgIHBhZGRpbmc6IDA7XHJcblxyXG4gICAgICAgIC8vIFdlIGRvbid0IGZ1Y2sgd2l0aCB0aGUgbGVmdCBtYXJnaW4gb2YgY29sdW1ucywgYmVjYXVzZSBCb290c3RyYXAgdXNlcyB0aGVzZSB0byByZW5kZXIgY29sdW1uIG9mZnNldHMuXHJcbiAgICAgICAgJjpub3QoLmxheW91dC1jb2x1bW4pIHtcclxuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgPiAubGF5b3V0LXBhbmVsIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7IC8vIFNob3duIG9ubHkgaW4gYWN0aXZlIG9yIGZvY3VzZWQgc3RhdGVzLlxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgICAgICAgICAgei1pbmRleDogMjA7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDI1cHg7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDZweDtcclxuICAgICAgICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI1cHg7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1wYW5lbC1pdGVtIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAyNXB4O1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFweCA2cHggMDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtcGFuZWwtbGFiZWwge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZSAtIDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LXBhbmVsLWFjdGlvbiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTsgLy8gU2hvd24gb25seSBpbiBmb2N1c2VkIHN0YXRlLlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyOHB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1wYW5lbC1tYWluIHtcclxuICAgICAgICAgICAgICAgIHRvcDogLTI3cHg7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiAtMnB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFdoZW4gZHJhZ2dpbmcgZnJvbSB0b29sYm94LCBlbGVtZW50cyB3aWxsIGJlIGxpIHJhdGhlciB0aGFuIGRpdi5cclxuICAgIGxpLmxheW91dC1lbGVtZW50IHtcclxuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xyXG4gICAgfVxyXG5cclxuICAgICY6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSB7XHJcblxyXG4gICAgICAgIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUsIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkIHtcclxuICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAycHg7XHJcbiAgICAgICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogLTJweDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1lbGVtZW50LWFjdGl2ZSB7XHJcbiAgICAgICAgICAgIEBhY3RpdmUtaGlnaGxpZ2h0OiBmYWRlKCM2ODY4NjgsIDEwJSk7XHJcblxyXG4gICAgICAgICAgICBib3JkZXItY29sb3I6IEBhY3RpdmUtaGlnaGxpZ2h0O1xyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwtbWFpbiB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jazsgLy8gVG8gcmV2ZWFsLlxyXG4gICAgICAgICAgICAgICAgei1pbmRleDogMzA7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAYWN0aXZlLWhpZ2hsaWdodDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1lbGVtZW50LWZvY3VzZWQge1xyXG4gICAgICAgICAgICBAZm9jdXNlZC1oaWdobGlnaHQ6ICM2NDg3MjE7XHJcbiAgICAgICAgICAgIEBmb2N1c2VkLXRleHQ6ICNmZWZlZmU7XHJcblxyXG4gICAgICAgICAgICBib3JkZXItY29sb3I6IEBmb2N1c2VkLWhpZ2hsaWdodDtcclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOyAvLyBUbyByZXZlYWwuXHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAZm9jdXNlZC1oaWdobGlnaHQ7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogQGZvY3VzZWQtdGV4dDtcclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8vIFRvIHJldmVhbC5cclxuICAgICAgICAgICAgICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbihAZm9jdXNlZC1oaWdobGlnaHQsIDEwJSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAmLmRpc2FibGVkIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZmFkZShAZm9jdXNlZC10ZXh0LCA0MCUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAZm9jdXNlZC1oaWdobGlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICYuYWN0aXZlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGxpZ2h0ZW4oc2F0dXJhdGUoc3BpbihAZm9jdXNlZC1oaWdobGlnaHQsIC0xMCksIDEwMCUpLCAzMCUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKEBmb2N1c2VkLWhpZ2hsaWdodCwgNSUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKEBmb2N1c2VkLWhpZ2hsaWdodCwgMTAlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1lbGVtZW50LXNlbGVjdGVkIHtcclxuICAgICAgICAgICAgQHNlbGVjdGVkLWhpZ2hsaWdodDogIzY0ODcyMTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZmFkZShAc2VsZWN0ZWQtaGlnaGxpZ2h0LCA4JSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC51aS1zb3J0YWJsZS1wbGFjZWhvbGRlciB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgIH1cclxuXHJcbiAgICAubGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldCB7XHJcbiAgICAgICAgQGRyb3B0YXJnZXQtaGlnaGxpZ2h0OiAjNjQ4NzIxO1xyXG4gICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAxMnB4IDZweCBmYWRlKEBkcm9wdGFyZ2V0LWhpZ2hsaWdodCwgNTAlKTtcclxuXHJcbiAgICAgICAgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7IC8vIFRvIHJldmVhbC5cclxuICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICBtaW4taGVpZ2h0OiBAZWxlbWVudC1taW4taGVpZ2h0IC0gMnB4O1xyXG4gICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgQGRyb3B0YXJnZXQtaGlnaGxpZ2h0ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGZhZGUoQGRyb3B0YXJnZXQtaGlnaGxpZ2h0LCAxNiUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBIENTUyBmaXggZm9yIG1lZGlhIGl0ZW0gZWxlbWVudHMuXHJcbiAgICAubWVkaWEtdGh1bWJuYWlsIHtcclxuICAgICAgICBpbWcge1xyXG4gICAgICAgICAgICBtYXgtd2lkdGg6MTAwJTtcclxuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwJTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiQGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICAubGF5b3V0LWNvbnRhaW5lciB7XHJcblxyXG4gICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWNvbnRhaW5lci1jaGlsZHJlbi1wbGFjZWhvbGRlciB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogQGNvbnRhaW5lci1wYWRkaW5nIC0gMXB4O1xyXG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogQGVsZW1lbnQtbWluLWhlaWdodDtcclxuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBmYWRlKEBncmF5LXRleHQsIDQwJSk7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBAY29udGFpbmVyLXBhZGRpbmc7XHJcbiAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZSAtIDE7XHJcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XHJcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjY7XHJcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1jaGlsZHJlbiB7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBAY29udGFpbmVyLXBhZGRpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQWxsIGFkamFjZW50IG5vbi1jb250YWluZXIgY2hpbGRyZW4gbmVlZCBzb21lIHNwYWNlIGJldHdlZW4uLi5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWNvbnRhaW5lcikgKyAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogQGNvbnRlbnQtc3BhY2luZztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyAuLi4gZXhjZXB0IHdoZW4galF1ZXJ5IFVJIHNvcnRhYmxlIGhlbHBlciBpcyB0aGUgZmlyc3QgZWxlbWVudCAoYmVjYXVzZSB0aGF0IG9uZSBpcyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYW5kIFwiZmxvYXRpbmdcIikuXHJcbiAgICAgICAgICAgICAgICA+IC51aS1zb3J0YWJsZS1oZWxwZXI6Zmlyc3QtY2hpbGQgKyAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgJi5sYXlvdXQtY29udGFpbmVyLWVtcHR5IHtcclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1jb250YWluZXItY2hpbGRyZW4tcGxhY2Vob2xkZXIge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7IC8vIFRvIHJldmVhbC5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtY2hpbGRyZW4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgICAgICB0b3A6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIHtcclxuICAgICAgICAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuIHtcclxuICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBmYWRlKEBncmF5LXRleHQsIDYwJSk7XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAtMXB4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtY29udGFpbmVyICsgLmxheW91dC1jb250YWluZXI6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGJvcmRlci10b3A6IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJAaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtY2FudmFzIHtcclxuICAgICAgICAjZHVtbXkgeyAvLyBPbmx5IGFkZGVkIGJlY2F1c2UgV0UgZG9lc24ndCBjb21waWxlIGlmIHRoZXJlIGFyZSBubyBydWxlcy5cclxuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJAaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtcm93IHtcclxuICAgICAgICAmLmxheW91dC1lbGVtZW50LWZvY3VzZWQ6bm90KC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0KSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiB7XHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wOiAxcHggZGFzaGVkIGZhZGUoQGdyYXktdGV4dCwgNjAlKSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTFweCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudCArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDAgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJAaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtY29sdW1uIHtcclxuICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgPiAubGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAzMDtcclxuICAgICAgICAgICAgICAgIHRvcDogMDtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAxNnB4O1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yOiBjb2wtcmVzaXplO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXItbGVmdCB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiAtNnB4O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXItcmlnaHQge1xyXG4gICAgICAgICAgICAgICAgcmlnaHQ6IC02cHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJAaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuQGltcG9ydCBcIlJlc2V0Lmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtY29udGVudCwgLmxheW91dC1odG1sIHtcclxuICAgICAgICBtaW4taGVpZ2h0OiAxZW07XHJcblxyXG4gICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHtcclxuXHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAycHg7XHJcbiAgICAgICAgICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47XHJcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRvIEhUTUw1IFczQyBzdGFuZGFyZCBkZWZhdWx0IHN0eWxpbmcgd2l0aGluIGNvbnRlbnQuXHJcbiAgICAgICAgICAgICAgICAucmVzZXQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICA+ICo6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsgLy8gSW1wb3J0YW50IGJlY2F1c2Ugc2l0ZS5jc3Mgb2YgdGhlIGFkbWluIHRoZW1lIHN0eWxlcyBoZWFkaW5nIG1hcmdpbnMgd2l0aCBhIHZlcnkgaGlnaCBzcGVjaWZpY2l0eS5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA+ICo6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLmxheW91dC1jb250ZW50LWltYWdlLCAmLmxheW91dC1jb250ZW50LXZlY3Rvci1pbWFnZSB7XHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gaW1nIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLmltZy1yZXNwb25zaXZlLCAuaW1nLXJlc3BvbnNpdmUgaW1nIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgfVxyXG59XHJcbiIsIu+7vy5yZXNldCgpIHtcclxuXHJcbiAgICAqIHtcclxuICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcclxuICAgIH1cclxuXHJcbiAgICBhZGRyZXNzLCBibG9ja3F1b3RlLCBjZW50ZXIsIGRpdiwgZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGZvcm0sXHJcbiAgICBoZWFkZXIsIGhyLCBsZWdlbmQsIGxpc3RpbmcsIHAsIHBsYWludGV4dCwgcHJlLCB4bXAge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgfVxyXG5cclxuICAgIGJsb2NrcXVvdGUsIGZpZ3VyZSwgbGlzdGluZywgcCwgcGxhaW50ZXh0LCBwcmUsIHhtcCB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMWVtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTtcclxuICAgIH1cclxuXHJcbiAgICBibG9ja3F1b3RlLCBmaWd1cmUge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiA0MHB4O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogNDBweDtcclxuICAgIH1cclxuXHJcbiAgICBhZGRyZXNzIHtcclxuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGluZywgcGxhaW50ZXh0LCBwcmUsIHhtcCB7XHJcbiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogcHJlO1xyXG4gICAgfVxyXG5cclxuICAgIGNpdGUsIGRmbiwgZW0sIGksIHZhciB7XHJcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG4gICAgfVxyXG5cclxuICAgIGIsIHN0cm9uZyB7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcclxuICAgIH1cclxuXHJcbiAgICBjb2RlLCBrYmQsIHNhbXAsIHR0IHtcclxuICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xyXG4gICAgfVxyXG5cclxuICAgIGJpZyB7XHJcbiAgICAgICAgZm9udC1zaXplOiBsYXJnZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc21hbGwge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogc21hbGxlcjtcclxuICAgIH1cclxuXHJcbiAgICBzdWIge1xyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBzdWI7XHJcbiAgICB9XHJcblxyXG4gICAgc3VwIHtcclxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogc3VwZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc3ViLCBzdXAge1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XHJcbiAgICAgICAgZm9udC1zaXplOiBzbWFsbGVyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBydWJ5IHtcclxuICAgICAgICBkaXNwbGF5OiBydWJ5O1xyXG4gICAgfVxyXG5cclxuICAgIHJiIHtcclxuICAgICAgICBkaXNwbGF5OiBydWJ5LWJhc2U7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgIH1cclxuXHJcbiAgICBydCB7XHJcbiAgICAgICAgZGlzcGxheTogcnVieS10ZXh0O1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgICAgZm9udC1zaXplOiA1MCU7XHJcbiAgICAgICAgZm9udC12YXJpYW50LWVhc3QtYXNpYW46IHJ1Ynk7XHJcbiAgICAgICAgdGV4dC1lbXBoYXNpczogbm9uZTtcclxuICAgIH1cclxuXHJcbiAgICByYmMge1xyXG4gICAgICAgIGRpc3BsYXk6IHJ1YnktYmFzZS1jb250YWluZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcnRjIHtcclxuICAgICAgICBkaXNwbGF5OiBydWJ5LXRleHQtY29udGFpbmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHJ1YnksIHJiLCBydCwgcmJjLCBydGMge1xyXG4gICAgICAgIHVuaWNvZGUtYmlkaTogaXNvbGF0ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgOmxpbmsge1xyXG4gICAgICAgIGNvbG9yOiAjMDAwMEVFO1xyXG4gICAgfVxyXG5cclxuICAgIDp2aXNpdGVkIHtcclxuICAgICAgICBjb2xvcjogIzU1MUE4QjtcclxuICAgIH1cclxuXHJcbiAgICA6bGluaywgOnZpc2l0ZWQge1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gICAgfVxyXG5cclxuICAgIGE6bGlua1tyZWx+PWhlbHBdLCBhOnZpc2l0ZWRbcmVsfj1oZWxwXSxcclxuICAgIGFyZWE6bGlua1tyZWx+PWhlbHBdLCBhcmVhOnZpc2l0ZWRbcmVsfj1oZWxwXSB7XHJcbiAgICAgICAgY3Vyc29yOiBoZWxwO1xyXG4gICAgfVxyXG5cclxuICAgIDpmb2N1cyB7XHJcbiAgICAgICAgb3V0bGluZTogYXV0bztcclxuICAgIH1cclxuXHJcbiAgICBtYXJrIHtcclxuICAgICAgICBiYWNrZ3JvdW5kOiB5ZWxsb3c7XHJcbiAgICAgICAgY29sb3I6IGJsYWNrO1xyXG4gICAgfVxyXG4gICAgLyogdGhpcyBjb2xvciBpcyBqdXN0IGEgc3VnZ2VzdGlvbiBhbmQgY2FuIGJlIGNoYW5nZWQgYmFzZWQgb24gaW1wbGVtZW50YXRpb24gZmVlZGJhY2sgKi9cclxuICAgIGFiYnJbdGl0bGVdLCBhY3JvbnltW3RpdGxlXSB7XHJcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBkb3R0ZWQgdW5kZXJsaW5lO1xyXG4gICAgfVxyXG5cclxuICAgIGlucywgdSB7XHJcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsLCBzLCBzdHJpa2Uge1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1xyXG4gICAgfVxyXG5cclxuICAgIGJsaW5rIHtcclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IGJsaW5rO1xyXG4gICAgfVxyXG5cclxuICAgIHE6OmJlZm9yZSB7XHJcbiAgICAgICAgY29udGVudDogb3Blbi1xdW90ZTtcclxuICAgIH1cclxuXHJcbiAgICBxOjphZnRlciB7XHJcbiAgICAgICAgY29udGVudDogY2xvc2UtcXVvdGU7XHJcbiAgICB9XHJcblxyXG4gICAgYnI6OmJlZm9yZSB7XHJcbiAgICAgICAgY29udGVudDogJ1xcQSc7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTtcclxuICAgIH1cclxuICAgIC8qIHRoaXMgYWxzbyBoYXMgYmlkaSBpbXBsaWNhdGlvbnMgKi9cclxuICAgIG5vYnIge1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICB9XHJcblxyXG4gICAgd2JyIHtcclxuICAgICAgICBjb250ZW50OiAnXFwyMDBCJztcclxuICAgIH1cclxuICAgIC8qIHRoaXMgYWxzbyBoYXMgYmlkaSBpbXBsaWNhdGlvbnMgKi9cclxuICAgIG5vYnIgd2JyIHtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xyXG4gICAgfVxyXG5cclxuICAgIGFydGljbGUsIGFzaWRlLCBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBoZ3JvdXAsIG5hdiwgc2VjdGlvbiB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICB9XHJcblxyXG4gICAgaDEge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDAuNjdlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjY3ZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAyLjAwZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgaDIge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDAuODNlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjgzZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAxLjUwZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgaDMge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDEuMDBlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjAwZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAxLjE3ZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgaDQge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDEuMzNlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjMzZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAxLjAwZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgaDUge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDEuNjdlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjY3ZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAwLjgzZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgaDYge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDIuMzNlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAyLjMzZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAwLjY3ZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgZGlyLCBkZCwgZGwsIGR0LCBvbCwgdWwge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgfVxyXG5cclxuICAgIGxpIHtcclxuICAgICAgICBkaXNwbGF5OiBsaXN0LWl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgZGlyLCBkbCwgb2wsIHVsIHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAxZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMWVtO1xyXG4gICAgfVxyXG5cclxuICAgICAgICBkaXIgZGlyLCBkaXIgZGwsIGRpciBvbCwgZGlyIHVsLFxyXG4gICAgICAgIGRsIGRpciwgZGwgZGwsIGRsIG9sLCBkbCB1bCxcclxuICAgICAgICBvbCBkaXIsIG9sIGRsLCBvbCBvbCwgb2wgdWwsXHJcbiAgICAgICAgdWwgZGlyLCB1bCBkbCwgdWwgb2wsIHVsIHVsIHtcclxuICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcclxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgZGQge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiA0MHB4O1xyXG4gICAgfVxyXG4gICAgLyogTFRSLXNwZWNpZmljOiB1c2UgJ21hcmdpbi1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xyXG4gICAgZGlyLCBvbCwgdWwge1xyXG4gICAgICAgIHBhZGRpbmctbGVmdDogNDBweDtcclxuICAgIH1cclxuICAgIC8qIExUUi1zcGVjaWZpYzogdXNlICdwYWRkaW5nLXJpZ2h0JyBmb3IgcnRsIGVsZW1lbnRzICovXHJcbiAgICBvbCB7XHJcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsO1xyXG4gICAgfVxyXG5cclxuICAgIGRpciwgdWwge1xyXG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcclxuICAgIH1cclxuXHJcbiAgICAgICAgZGlyIGRpciwgZGlyIHVsLFxyXG4gICAgICAgIG9sIGRpciwgb2wgdWwsXHJcbiAgICAgICAgdWwgZGlyLCB1bCB1bCB7XHJcbiAgICAgICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogY2lyY2xlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGRpciBkaXIgZGlyLCBkaXIgZGlyIHVsLFxyXG4gICAgICAgICAgICBkaXIgb2wgZGlyLCBkaXIgb2wgdWwsXHJcbiAgICAgICAgICAgIGRpciB1bCBkaXIsIGRpciB1bCB1bCxcclxuICAgICAgICAgICAgb2wgZGlyIGRpciwgb2wgZGlyIHVsLFxyXG4gICAgICAgICAgICBvbCBvbCBkaXIsIG9sIG9sIHVsLFxyXG4gICAgICAgICAgICBvbCB1bCBkaXIsIG9sIHVsIHVsLFxyXG4gICAgICAgICAgICB1bCBkaXIgZGlyLCB1bCBkaXIgdWwsXHJcbiAgICAgICAgICAgIHVsIG9sIGRpciwgdWwgb2wgdWwsXHJcbiAgICAgICAgICAgIHVsIHVsIGRpciwgdWwgdWwgdWwge1xyXG4gICAgICAgICAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBzcXVhcmU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICB0YWJsZSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgY2FwdGlvbiB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtY2FwdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjb2xncm91cCwgY29sZ3JvdXBbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtY29sdW1uLWdyb3VwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbCwgY29sW2hpZGRlbl0ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWNvbHVtbjtcclxuICAgIH1cclxuXHJcbiAgICB0aGVhZCwgdGhlYWRbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwO1xyXG4gICAgfVxyXG5cclxuICAgIHRib2R5LCB0Ym9keVtoaWRkZW5dIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgdGZvb3QsIHRmb290W2hpZGRlbl0ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWZvb3Rlci1ncm91cDtcclxuICAgIH1cclxuXHJcbiAgICB0ciwgdHJbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtcm93O1xyXG4gICAgfVxyXG5cclxuICAgIHRkLCB0aCwgdGRbaGlkZGVuXSwgdGhbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcclxuICAgIH1cclxuXHJcbiAgICAgICAgY29sZ3JvdXBbaGlkZGVuXSwgY29sW2hpZGRlbl0sIHRoZWFkW2hpZGRlbl0sIHRib2R5W2hpZGRlbl0sXHJcbiAgICAgICAgdGZvb3RbaGlkZGVuXSwgdHJbaGlkZGVuXSwgdGRbaGlkZGVuXSwgdGhbaGlkZGVuXSB7XHJcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGNvbGxhcHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB0YWJsZSB7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICBib3JkZXItc3BhY2luZzogMnB4O1xyXG4gICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XHJcbiAgICAgICAgdGV4dC1pbmRlbnQ6IGluaXRpYWw7XHJcbiAgICB9XHJcblxyXG4gICAgdGQsIHRoIHtcclxuICAgICAgICBwYWRkaW5nOiAxcHg7XHJcbiAgICB9XHJcblxyXG4gICAgdGgge1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoZWFkLCB0Ym9keSwgdGZvb3QsIHRhYmxlID4gdHIge1xyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICB9XHJcblxyXG4gICAgdHIsIHRkLCB0aCB7XHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IGluaGVyaXQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGFibGUsIHRkLCB0aCB7XHJcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBncmF5O1xyXG4gICAgfVxyXG5cclxuICAgIHRoZWFkLCB0Ym9keSwgdGZvb3QsIHRyIHtcclxuICAgICAgICBib3JkZXItY29sb3I6IGluaGVyaXQ7XHJcbiAgICB9XHJcbiAgICAvKnRhYmxlW3J1bGVzPW5vbmUgaV0sIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSwgdGFibGVbcnVsZXM9cm93cyBpXSxcclxudGFibGVbcnVsZXM9Y29scyBpXSwgdGFibGVbcnVsZXM9YWxsIGldLCB0YWJsZVtmcmFtZT12b2lkIGldLFxyXG50YWJsZVtmcmFtZT1hYm92ZSBpXSwgdGFibGVbZnJhbWU9YmVsb3cgaV0sIHRhYmxlW2ZyYW1lPWhzaWRlcyBpXSxcclxudGFibGVbZnJhbWU9bGhzIGldLCB0YWJsZVtmcmFtZT1yaHMgaV0sIHRhYmxlW2ZyYW1lPXZzaWRlcyBpXSxcclxudGFibGVbZnJhbWU9Ym94IGldLCB0YWJsZVtmcmFtZT1ib3JkZXIgaV0sXHJcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1jb2xzIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0aGVhZCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0aGVhZCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGhlYWQgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1jb2xzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdGhlYWQgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1hbGwgaV0gPiB0aGVhZCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRoZWFkID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGJvZHkgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Ym9keSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Ym9keSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdGJvZHkgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1ub25lIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdGZvb3QgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRmb290ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRmb290ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9cm93cyBpXSA+IHRmb290ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRmb290ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRmb290ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9YWxsIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1hbGwgaV0gPiB0Zm9vdCA+IHRyID4gdGgge1xyXG4gICAgYm9yZGVyLWNvbG9yOiBibGFjaztcclxufSovXHJcbiAgICBpbnB1dCwgc2VsZWN0LCBvcHRpb24sIG9wdGdyb3VwLCBidXR0b24sIHRleHRhcmVhLCBrZXlnZW4ge1xyXG4gICAgICAgIHRleHQtaW5kZW50OiBpbml0aWFsO1xyXG4gICAgfVxyXG5cclxuICAgIHRleHRhcmVhIHtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XHJcbiAgICB9XHJcblxyXG4gICAgaW5wdXRbdHlwZT1cInJhZGlvXCJdLCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sIGlucHV0W3R5cGU9XCJyZXNldFwiXSwgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSxcclxuICAgIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sIHNlbGVjdCwgYnV0dG9uIHtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgfVxyXG5cclxuICAgIGlucHV0W3R5cGU9XCJidXR0b25cIl0sIGJ1dHRvbiB7XHJcbiAgICAgICAgcGFkZGluZzogMC4zZW0gMC41ZW07XHJcbiAgICB9XHJcblxyXG4gICAgaHIge1xyXG4gICAgICAgIGNvbG9yOiBncmF5O1xyXG4gICAgICAgIGJvcmRlci1zdHlsZTogaW5zZXQ7XHJcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XHJcbiAgICAgICAgbWFyZ2luOiAwLjVlbSBhdXRvO1xyXG4gICAgfVxyXG5cclxuICAgIGZpZWxkc2V0IHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMnB4O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMnB4O1xyXG4gICAgICAgIGJvcmRlcjogZ3Jvb3ZlIDJweCBUaHJlZURGYWNlO1xyXG4gICAgICAgIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcclxuICAgIH1cclxuXHJcbiAgICBsZWdlbmQge1xyXG4gICAgICAgIHBhZGRpbmctbGVmdDogMnB4O1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDJweDtcclxuICAgIH1cclxufVxyXG4iLCJAaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbmJvZHkge1xyXG4gICAgLmxheW91dC10b29sYm94LWl0ZW0ge1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBncmF5LWJvcmRlcjtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgICAgIHBhZGRpbmc6IChAY29udGFpbmVyLXBhZGRpbmcgLSAzKSBAY29udGFpbmVyLXBhZGRpbmc7XHJcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xyXG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcclxuXHJcbiAgICAgICAgaSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgICAgd2lkdGg6IDE2cHg7XHJcbiAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICsgLmxheW91dC10b29sYm94LWl0ZW0ge1xyXG4gICAgICAgICAgICBtYXJnaW4tdG9wOiBAY29udGFpbmVyLXBhZGRpbmcgLyAzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciB7XHJcbiAgICAgICAgcG9zaXRpb246IHN0aWNreTtcclxuICAgICAgICB0b3A6IDF2aDtcclxuICAgICAgICBwYWRkaW5nLWxlZnQ6IEBjb250YWluZXItcGFkZGluZztcclxuICAgICAgICB3aWR0aDogMjIwcHg7XHJcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcclxuICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XHJcbiAgICAgICAgbWluLWhlaWdodDogNDAwcHg7XHJcbiAgICAgICAgbWF4LWhlaWdodDogOTh2aDtcclxuICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcblxyXG4gICAgICAgID4gLmxheW91dC10b29sYm94IHtcclxuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgQGdyYXktYm9yZGVyO1xyXG4gICAgICAgICAgICBwYWRkaW5nOiBAY29udGFpbmVyLXBhZGRpbmcgLyAyO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAZ3JheS1iZztcclxuXHJcbiAgICAgICAgICAgIC5sYXlvdXQtdG9vbGJveC1ncm91cCB7XHJcbiAgICAgICAgICAgICAgICAubGF5b3V0LXRvb2xib3gtZ3JvdXAtaGVhZGluZyB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogQGNvbnRhaW5lci1wYWRkaW5nIC8gMztcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTBweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiBAY29udGFpbmVyLXBhZGRpbmcgLyAzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAxNHB4LzEgRm9udEF3ZXNvbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwZDdcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJi5jb2xsYXBzZWQge1xyXG4gICAgICAgICAgICAgICAgICAgIC5sYXlvdXQtdG9vbGJveC1ncm91cC1oZWFkaW5nOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMGRhXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAubGF5b3V0LXRvb2xib3gtaXRlbXMge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAubGF5b3V0LXRvb2xib3gtc2VjdGlvbiArIC5sYXlvdXQtdG9vbGJveC1zZWN0aW9uIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiBAY29udGFpbmVyLXBhZGRpbmcgLyAzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC5sYXlvdXQtdG9vbGJveC1pdGVtIHtcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBAZ3JheS1ib3JkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAoQGNvbnRhaW5lci1wYWRkaW5nIC0gMykgQGNvbnRhaW5lci1wYWRkaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDE2cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICsgLmxheW91dC10b29sYm94LWl0ZW0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiBAY29udGFpbmVyLXBhZGRpbmcgLyAzO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICArIC5sYXlvdXQtdG9vbGJveC1ncm91cCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogQGNvbnRhaW5lci1wYWRkaW5nIC8gMjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJAaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtcG9wdXAge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IC8vIFNob3duIG9ubHkgaW4gYWN0aXZlIG9yIGZvY3VzZWQgc3RhdGVzLlxyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgLW1vei1ib3gtc2hhZG93OiAzcHggM3B4IDExcHggMCByZ2JhKDUwLCA1MCwgNTAsIDAuNSk7XHJcbiAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAzcHggM3B4IDExcHggMCByZ2JhKDUwLCA1MCwgNTAsIDAuNSk7XHJcbiAgICAgICAgYm94LXNoYWRvdzogM3B4IDNweCAxMXB4IDAgcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBncmF5LWJvcmRlcjtcclxuICAgICAgICBwYWRkaW5nOiAycHggMDtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xyXG4gICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XHJcbiAgICAgICAgei1pbmRleDogMjA7XHJcbiAgICAgICAgY29sb3I6IEBncmF5LXRleHQ7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xyXG4gICAgICAgIG1pbi13aWR0aDogMzAwcHg7XHJcblxyXG4gICAgICAgICYud2lkZSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiA2MDBweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtcG9wdXAtZmxleCB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDJweCA1cHg7XHJcblxyXG4gICAgICAgICAgICAubGF5b3V0LXBvcHVwLWNvbHVtbiArIC5sYXlvdXQtcG9wdXAtY29sdW1uIHtcclxuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGZhZGUoZ3JheSwgMTUlKTtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNHB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LXBvcHVwLWl0ZW0ge1xyXG4gICAgICAgICAgICBwYWRkaW5nOiA0cHggNnB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1wb3B1cC1sYWJlbCB7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45ZW07XHJcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgICAgICBjb2xvcjogQGdyYXktdGV4dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtcG9wdXAtYWN0aW9uOmhvdmVyIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGdyYXktYmc7XHJcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtcG9wdXAtaW5wdXQge1xyXG4gICAgICAgICAgICBpbnB1dFt0eXBlPSd0ZXh0J10sIHRleHRhcmVhIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IGxhYmVsIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjllbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */ diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css index 69322a29f1f..4421475aeca 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css @@ -1 +1 @@ -.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup cite,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dfn,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup em,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup i,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup var,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup cite,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dfn,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup em,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup i,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup var{font-style:italic}.layout-editor-toolbar{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;position:relative;top:10px}.layout-editor-toolbar .layout-editor-toolbar-group{display:-ms-flexbox;display:flex}.layout-editor-toolbar .layout-editor-toolbar-group>li+li{margin-left:12px}.layout-editor{display:-ms-flexbox;display:flex;margin-top:1em;font-size:14px;-ms-flex-align:stretch;align-items:stretch}.layout-editor>.layout-canvas-wrapper{-ms-flex-positive:1;flex-grow:1;background-color:#f3f4f5;border:1px solid #e4e5e6}.layout-editor>.layout-canvas-wrapper>.layout-toolbar-container{display:none;margin:12px 12px 0;min-height:71px}.layout-editor>.layout-canvas-wrapper>.layout-toolbar-container>.mce-panel{width:100%!important}.layout-editor>.layout-canvas-wrapper .layout-content>.layout-element-wrapper .layout-content-markup>.layout-placeholder{border:1px dashed #ccc;padding:.2em .4em;background:#e8e8e8}.layout-editor .layout-snippet{background:#e8e8e8}.layout-editor-help-dialog{display:none}.layout-editor-help-dialog .help-row:after,.layout-editor-help-dialog .help-row:before{content:" ";display:table}.layout-editor-help-dialog .help-row:after{clear:both}.layout-editor-help-dialog .help-row>.help-column-full,.layout-editor-help-dialog .help-row>.help-column-half{margin:.5em 0}.layout-editor-help-dialog .help-row>.help-column-half{box-sizing:border-box;float:left;width:50%}.layout-editor-help-dialog .help-row>.help-column-half:nth-child(2n){padding-right:10px;clear:left}.layout-editor-help-dialog .help-row+.help-row{margin-top:1em}.layout-editor-help-dialog code{border-radius:4px;background-color:#f3f4f5;padding:2px 4px;font-family:monospace}.layout-editor-help-dialog p{margin-bottom:.5em;line-height:1.6em}.layout-editor-help-dialog table>tbody>tr>td:first-child{padding-right:10px}.layout-editor .layout-element{position:relative;margin-top:0;margin-right:0;margin-bottom:0;padding:0}.layout-editor .layout-element:not(.layout-column){margin-left:0}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel{display:none;position:absolute;margin:0;z-index:20;height:25px;padding:0 6px;list-style:none;white-space:nowrap;line-height:25px;vertical-align:middle}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-item{display:inline-block;height:25px;padding:1px 6px 0}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-label{font-size:13px}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-action{display:none;width:28px;cursor:pointer;text-align:center}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel-main{top:-27px;left:-2px}.layout-editor li.layout-element{list-style:none}.layout-editor:not(.layout-editor-dragging) .layout-element-active,.layout-editor:not(.layout-editor-dragging) .layout-element-focused{border-width:2px;border-style:solid}.layout-editor:not(.layout-editor-dragging) .layout-element-active>.layout-element-wrapper,.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper{margin:-2px}.layout-editor:not(.layout-editor-dragging) .layout-element-active{border-color:rgba(104,104,104,.1)}.layout-editor:not(.layout-editor-dragging) .layout-element-active>.layout-element-wrapper>.layout-panel-main{display:block;z-index:30;background-color:rgba(104,104,104,.1)}.layout-editor:not(.layout-editor-dragging) .layout-element-focused{border-color:#648721}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel{display:block;background-color:#648721;color:#fefefe}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action{display:inline-block}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action:hover{background-color:#82b02b}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.disabled{cursor:default;color:rgba(254,254,254,.4)}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.disabled:hover{background-color:#648721}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.active{color:#deff42;background-color:#739b26}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.active:hover{background-color:#82b02b}.layout-editor:not(.layout-editor-dragging) .layout-element-selected{background-color:rgba(100,135,33,.08)}.layout-editor .ui-sortable-placeholder{display:none}.layout-editor .layout-element-droptarget{box-shadow:inset 0 0 12px 6px rgba(100,135,33,.5)}.layout-editor .layout-element-droptarget .ui-sortable-placeholder{display:block;visibility:visible!important;min-height:78px;border:2px dashed #648721!important;background-color:rgba(100,135,33,.16)}.layout-editor .media-thumbnail img{max-width:100%;max-height:100%}.layout-editor .layout-container>.layout-element-wrapper>.layout-container-children-placeholder{display:none;-ms-flex-direction:column;flex-direction:column;margin:11px;min-height:80px;border:1px dashed rgba(124,124,124,.4);border-radius:4px;padding:12px;-ms-flex-pack:center;justify-content:center;font-size:13px;font-style:italic;opacity:.6;text-align:center}.layout-editor .layout-container>.layout-element-wrapper>.layout-children{padding:12px}.layout-editor .layout-container>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-container)+.layout-element:not(.layout-container){margin-top:12px}.layout-editor .layout-container>.layout-element-wrapper>.layout-children>.ui-sortable-helper:first-child+.layout-element:not(.layout-container){margin-top:0}.layout-editor .layout-container>.layout-element-wrapper.layout-container-empty>.layout-container-children-placeholder{display:-ms-flexbox;display:flex}.layout-editor .layout-container>.layout-element-wrapper.layout-container-empty>.layout-children{position:absolute;top:0;right:0;bottom:0;left:0}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active){border:1px dashed rgba(124,124,124,.6)}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin:-1px}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-container+.layout-container:not(.layout-element-active){border-top:0}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-container+.layout-container:not(.layout-element-active)>.layout-element-wrapper{margin-top:0}.layout-editor .layout-canvas #dummy{display:none}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active){border-top:1px dashed rgba(124,124,124,.6)!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin-top:-1px!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element+.layout-element:not(.layout-element-active){border-left:0!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element+.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin-left:0!important}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar{display:none;position:absolute;z-index:30;top:0;width:16px;height:100%;cursor:col-resize}.layout-editor .layout-column.layout-element-focused>.layout-element-wrapper>.layout-column-resize-bar,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup center,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup div,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figcaption,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup footer,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup form,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup header,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup center,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup div,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figcaption,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup footer,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup form,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup header,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{display:block}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar-left{left:-6px}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar-right{right:-6px}.layout-editor .layout-content,.layout-editor .layout-html{min-height:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup{padding:2px;overflow-x:hidden;line-height:normal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup *,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup *{margin:0;padding:0;box-sizing:content-box}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{margin-top:1em;margin-bottom:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure{margin-left:40px;margin-right:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{font-family:monospace;white-space:pre}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup b,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup strong,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup b,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup strong{font-weight:bolder}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup code,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup kbd,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup samp,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup code,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup kbd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup samp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tt{font-family:monospace}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup big,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup big{font-size:larger}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup small,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup small{font-size:smaller}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sub{vertical-align:sub}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sup{vertical-align:super}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sup{line-height:normal;font-size:smaller}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ruby,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ruby{display:ruby}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rb{display:ruby-base;white-space:nowrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rt{display:ruby-text;white-space:nowrap;font-size:50%;font-variant-east-asian:ruby;text-emphasis:none}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rbc{display:ruby-base-container}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rtc{display:ruby-text-container}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup article,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup aside,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dt,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nav,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup section,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup article,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup aside,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nav,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup section,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{display:block}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ruby,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ruby{unicode-bidi:isolate}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :link{color:#00E}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :visited{color:#551A8B}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :visited{text-decoration:underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup a:link[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup a:visited[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup area:link[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup area:visited[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup a:link[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup a:visited[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup area:link[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup area:visited[rel~=help]{cursor:help}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :focus,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :focus{outline:auto}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup mark,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup mark{background:#ff0;color:#000}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup abbr[title],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup acronym[title],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup abbr[title],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup acronym[title]{text-decoration:dotted underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ins,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup u,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ins,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup u{text-decoration:underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup del,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup s,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup strike,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup del,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup s,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup strike{text-decoration:line-through}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blink,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blink{text-decoration:blink}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup q::before,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup q::before{content:open-quote}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup q::after,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup q::after{content:close-quote}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup br::before,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup br::before{content:'\A';white-space:pre}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nobr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nobr{white-space:nowrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup wbr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup wbr{content:'\200B'}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nobr wbr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nobr wbr{white-space:normal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h1{margin-top:.67em;margin-bottom:.67em;font-size:2em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h2{margin-top:.83em;margin-bottom:.83em;font-size:1.5em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h3{margin-top:1em;margin-bottom:1em;font-size:1.17em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h4{margin-top:1.33em;margin-bottom:1.33em;font-size:1em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h5{margin-top:1.67em;margin-bottom:1.67em;font-size:.83em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h6{margin-top:2.33em;margin-bottom:2.33em;font-size:.67em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup li,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup li{display:list-item}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{margin-top:1em;margin-bottom:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul{margin-top:0;margin-bottom:0}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dd{margin-left:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{padding-left:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol{list-style-type:decimal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{list-style-type:disc}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul{list-style-type:circle}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul ul{list-style-type:square}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table{display:table;box-sizing:border-box;border-spacing:2px;border-collapse:separate;text-indent:initial}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup caption,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup caption{display:table-caption}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup[hidden]{display:table-column-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col[hidden]{display:table-column}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead[hidden]{display:table-header-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody[hidden]{display:table-row-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot[hidden]{display:table-footer-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr[hidden]{display:table-row}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th[hidden]{display:table-cell}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr[hidden]{visibility:collapse}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{padding:1px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table>tr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table>tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead{vertical-align:middle}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr{vertical-align:inherit}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{border-color:gray}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr{border-color:inherit}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup keygen,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup optgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup option,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup textarea,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup keygen,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup optgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup option,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup textarea{text-indent:initial}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup textarea,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup textarea{white-space:pre-wrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=radio],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=checkbox],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=reset],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=submit],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=radio],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=checkbox],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=reset],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=submit],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup select{box-sizing:border-box}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=button]{padding:.3em .5em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hr{color:gray;border-style:inset;border-width:1px;margin:.5em auto}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup fieldset,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup fieldset{margin-left:2px;margin-right:2px;border:2px groove ThreeDFace;padding:.35em .625em .75em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup legend{padding-left:2px;padding-right:2px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup>:first-child,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup>:first-child{margin-top:0!important}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup>:last-child,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup>:last-child{margin-bottom:0!important}.layout-editor .img-responsive,.layout-editor .img-responsive img,.layout-editor .layout-content.layout-content-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-content.layout-content-vector-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-html.layout-content-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-html.layout-content-vector-image>.layout-element-wrapper>.layout-content-markup>img{display:block;width:100%;max-width:100%;height:auto}body .layout-toolbox-item{border:1px solid #e4e5e6;background-color:#fff;padding:9px 12px;cursor:default;list-style-type:none}body .layout-toolbox-item i{display:inline-block;width:16px;font:normal normal normal 14px/1 FontAwesome}body .layout-toolbox-item+.layout-toolbox-item{margin-top:4px}.layout-editor>.layout-toolbox-wrapper{margin-left:12px;width:218px;-ms-flex-negative:0;flex-shrink:0;max-height:calc(20vh);overflow-x:clip;overflow-y:auto;position:sticky;top:0}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar{width:2px}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px #000;border-radius:1px}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3)}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox{border:1px solid #e4e5e6;width:220px;min-height:400px;padding:6px;background-color:#f3f4f5}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox.sticky-top{position:fixed;top:0;max-height:100%;overflow-y:auto}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox.sticky-bottom{position:absolute;bottom:0}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group{margin-top:12px}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item+.layout-toolbox-item,.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-section+.layout-toolbox-section{margin-top:4px}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading{display:block;margin-bottom:4px;text-decoration:none}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading:before{display:inline-block;width:10px;margin-right:4px;font:normal normal normal 14px/1 FontAwesome;text-align:center;content:"\f0d7"}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-group-heading:before{content:"\f0da"}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-items{display:none}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item{border:1px solid #e4e5e6;background-color:#fff;padding:9px 12px;cursor:default}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item i{display:inline-block;width:16px;font:normal normal normal 14px/1 FontAwesome}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group+.layout-toolbox-group{margin-top:6px}.layout-editor .layout-popup{display:none;position:absolute;margin:0;box-shadow:3px 3px 11px 0 rgba(50,50,50,.5);border:1px solid #e4e5e6;padding:2px 0;background-color:#f7f7f7;list-style:none;z-index:20;color:#7c7c7c;text-align:left;cursor:default;white-space:nowrap;line-height:normal;min-width:300px}.layout-editor .layout-popup.wide{width:600px}.layout-editor .layout-popup .layout-popup-flex{display:-ms-flexbox;display:flex;padding:2px 5px}.layout-editor .layout-popup .layout-popup-flex .layout-popup-column+.layout-popup-column{margin-left:4px;border-left:1px solid rgba(128,128,128,.15);padding-left:4px}.layout-editor .layout-popup .layout-popup-item{padding:4px 6px}.layout-editor .layout-popup .layout-popup-label{font-size:.9em;font-weight:700;color:#7c7c7c}.layout-editor .layout-popup .layout-popup-action:hover{background-color:#f3f4f5;cursor:pointer}.layout-editor .layout-popup .layout-popup-input input[type=text],.layout-editor .layout-popup .layout-popup-input textarea{width:100%}.layout-editor .layout-popup .layout-popup-input>label{display:block;font-size:.9em} \ No newline at end of file +.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup cite,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dfn,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup em,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup i,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup var,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup cite,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dfn,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup em,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup i,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup var{font-style:italic}.layout-editor-toolbar{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;position:relative;top:10px}.layout-editor-toolbar .layout-editor-toolbar-group{display:-ms-flexbox;display:flex}.layout-editor-toolbar .layout-editor-toolbar-group>li+li{margin-left:12px}.layout-editor{display:-ms-flexbox;display:flex;margin-top:1em;font-size:14px}.layout-editor>.layout-canvas-wrapper{-ms-flex:1 1;flex:1 1;height:fit-content;background-color:#f3f4f5;border:1px solid #e4e5e6}.layout-editor>.layout-canvas-wrapper>.layout-toolbar-container{display:none;margin:12px 12px 0;min-height:71px}.layout-editor>.layout-canvas-wrapper>.layout-toolbar-container>.mce-panel{width:100%!important}.layout-editor>.layout-canvas-wrapper .layout-content>.layout-element-wrapper .layout-content-markup>.layout-placeholder{border:1px dashed #ccc;padding:.2em .4em;background:#e8e8e8}.layout-editor .layout-snippet{background:#e8e8e8}.layout-editor-help-dialog{display:none}.layout-editor-help-dialog .help-row:after,.layout-editor-help-dialog .help-row:before{content:" ";display:table}.layout-editor-help-dialog .help-row:after{clear:both}.layout-editor-help-dialog .help-row>.help-column-full,.layout-editor-help-dialog .help-row>.help-column-half{margin:.5em 0}.layout-editor-help-dialog .help-row>.help-column-half{box-sizing:border-box;float:left;width:50%}.layout-editor-help-dialog .help-row>.help-column-half:nth-child(2n){padding-right:10px;clear:left}.layout-editor-help-dialog .help-row+.help-row{margin-top:1em}.layout-editor-help-dialog code{border-radius:4px;background-color:#f3f4f5;padding:2px 4px;font-family:monospace}.layout-editor-help-dialog p{margin-bottom:.5em;line-height:1.6em}.layout-editor-help-dialog table>tbody>tr>td:first-child{padding-right:10px}.layout-editor .layout-element{position:relative;margin-top:0;margin-right:0;margin-bottom:0;padding:0}.layout-editor .layout-element:not(.layout-column){margin-left:0}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel{display:none;position:absolute;margin:0;z-index:20;height:25px;padding:0 6px;list-style:none;white-space:nowrap;line-height:25px;vertical-align:middle}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-item{display:inline-block;height:25px;padding:1px 6px 0}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-label{font-size:13px}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-action{display:none;width:28px;cursor:pointer;text-align:center}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel-main{top:-27px;left:-2px}.layout-editor li.layout-element{list-style:none}.layout-editor:not(.layout-editor-dragging) .layout-element-active,.layout-editor:not(.layout-editor-dragging) .layout-element-focused{border-width:2px;border-style:solid}.layout-editor:not(.layout-editor-dragging) .layout-element-active>.layout-element-wrapper,.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper{margin:-2px}.layout-editor:not(.layout-editor-dragging) .layout-element-active{border-color:rgba(104,104,104,.1)}.layout-editor:not(.layout-editor-dragging) .layout-element-active>.layout-element-wrapper>.layout-panel-main{display:block;z-index:30;background-color:rgba(104,104,104,.1)}.layout-editor:not(.layout-editor-dragging) .layout-element-focused{border-color:#648721}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel{display:block;background-color:#648721;color:#fefefe}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action{display:inline-block}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action:hover{background-color:#82b02b}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.disabled{cursor:default;color:rgba(254,254,254,.4)}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.disabled:hover{background-color:#648721}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.active{color:#deff42;background-color:#739b26}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.active:hover{background-color:#82b02b}.layout-editor:not(.layout-editor-dragging) .layout-element-selected{background-color:rgba(100,135,33,.08)}.layout-editor .ui-sortable-placeholder{display:none}.layout-editor .layout-element-droptarget{box-shadow:inset 0 0 12px 6px rgba(100,135,33,.5)}.layout-editor .layout-element-droptarget .ui-sortable-placeholder{display:block;visibility:visible!important;min-height:78px;border:2px dashed #648721!important;background-color:rgba(100,135,33,.16)}.layout-editor .media-thumbnail img{max-width:100%;max-height:100%}.layout-editor .layout-container>.layout-element-wrapper>.layout-container-children-placeholder{display:none;-ms-flex-direction:column;flex-direction:column;margin:11px;min-height:80px;border:1px dashed rgba(124,124,124,.4);border-radius:4px;padding:12px;-ms-flex-pack:center;justify-content:center;font-size:13px;font-style:italic;opacity:.6;text-align:center}.layout-editor .layout-container>.layout-element-wrapper>.layout-children{padding:12px}.layout-editor .layout-container>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-container)+.layout-element:not(.layout-container){margin-top:12px}.layout-editor .layout-container>.layout-element-wrapper>.layout-children>.ui-sortable-helper:first-child+.layout-element:not(.layout-container){margin-top:0}.layout-editor .layout-container>.layout-element-wrapper.layout-container-empty>.layout-container-children-placeholder{display:-ms-flexbox;display:flex}.layout-editor .layout-container>.layout-element-wrapper.layout-container-empty>.layout-children{position:absolute;top:0;right:0;bottom:0;left:0}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active){border:1px dashed rgba(124,124,124,.6)}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin:-1px}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-container+.layout-container:not(.layout-element-active){border-top:0}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-container+.layout-container:not(.layout-element-active)>.layout-element-wrapper{margin-top:0}.layout-editor .layout-canvas #dummy{display:none}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active){border-top:1px dashed rgba(124,124,124,.6)!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin-top:-1px!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element+.layout-element:not(.layout-element-active){border-left:0!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element+.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin-left:0!important}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar{display:none;position:absolute;z-index:30;top:0;width:16px;height:100%;cursor:col-resize}.layout-editor .layout-column.layout-element-focused>.layout-element-wrapper>.layout-column-resize-bar,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup center,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup div,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figcaption,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup footer,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup form,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup header,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup center,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup div,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figcaption,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup footer,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup form,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup header,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{display:block}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar-left{left:-6px}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar-right{right:-6px}.layout-editor .layout-content,.layout-editor .layout-html{min-height:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup{padding:2px;overflow-x:hidden;line-height:normal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup *,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup *{margin:0;padding:0;box-sizing:content-box}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{margin-top:1em;margin-bottom:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure{margin-left:40px;margin-right:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{font-family:monospace;white-space:pre}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup b,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup strong,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup b,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup strong{font-weight:bolder}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup code,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup kbd,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup samp,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup code,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup kbd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup samp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tt{font-family:monospace}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup big,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup big{font-size:larger}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup small,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup small{font-size:smaller}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sub{vertical-align:sub}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sup{vertical-align:super}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sup{line-height:normal;font-size:smaller}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ruby,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ruby{display:ruby}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rb{display:ruby-base;white-space:nowrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rt{display:ruby-text;white-space:nowrap;font-size:50%;font-variant-east-asian:ruby;text-emphasis:none}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rbc{display:ruby-base-container}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rtc{display:ruby-text-container}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup article,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup aside,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dt,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nav,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup section,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup article,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup aside,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nav,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup section,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{display:block}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ruby,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ruby{unicode-bidi:isolate}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :link{color:#00E}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :visited{color:#551A8B}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :visited{text-decoration:underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup a:link[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup a:visited[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup area:link[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup area:visited[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup a:link[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup a:visited[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup area:link[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup area:visited[rel~=help]{cursor:help}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :focus,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :focus{outline:auto}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup mark,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup mark{background:#ff0;color:#000}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup abbr[title],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup acronym[title],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup abbr[title],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup acronym[title]{text-decoration:dotted underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ins,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup u,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ins,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup u{text-decoration:underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup del,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup s,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup strike,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup del,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup s,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup strike{text-decoration:line-through}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blink,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blink{text-decoration:blink}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup q::before,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup q::before{content:open-quote}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup q::after,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup q::after{content:close-quote}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup br::before,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup br::before{content:'\A';white-space:pre}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nobr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nobr{white-space:nowrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup wbr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup wbr{content:'\200B'}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nobr wbr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nobr wbr{white-space:normal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h1{margin-top:.67em;margin-bottom:.67em;font-size:2em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h2{margin-top:.83em;margin-bottom:.83em;font-size:1.5em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h3{margin-top:1em;margin-bottom:1em;font-size:1.17em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h4{margin-top:1.33em;margin-bottom:1.33em;font-size:1em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h5{margin-top:1.67em;margin-bottom:1.67em;font-size:.83em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h6{margin-top:2.33em;margin-bottom:2.33em;font-size:.67em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup li,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup li{display:list-item}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{margin-top:1em;margin-bottom:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul{margin-top:0;margin-bottom:0}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dd{margin-left:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{padding-left:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol{list-style-type:decimal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{list-style-type:disc}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul{list-style-type:circle}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul ul{list-style-type:square}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table{display:table;box-sizing:border-box;border-spacing:2px;border-collapse:separate;text-indent:initial}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup caption,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup caption{display:table-caption}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup[hidden]{display:table-column-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col[hidden]{display:table-column}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead[hidden]{display:table-header-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody[hidden]{display:table-row-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot[hidden]{display:table-footer-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr[hidden]{display:table-row}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th[hidden]{display:table-cell}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr[hidden]{visibility:collapse}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{padding:1px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table>tr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table>tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead{vertical-align:middle}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr{vertical-align:inherit}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{border-color:gray}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr{border-color:inherit}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup keygen,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup optgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup option,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup textarea,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup keygen,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup optgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup option,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup textarea{text-indent:initial}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup textarea,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup textarea{white-space:pre-wrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=radio],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=checkbox],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=reset],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=submit],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=radio],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=checkbox],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=reset],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=submit],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup select{box-sizing:border-box}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=button]{padding:.3em .5em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hr{color:gray;border-style:inset;border-width:1px;margin:.5em auto}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup fieldset,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup fieldset{margin-left:2px;margin-right:2px;border:2px groove ThreeDFace;padding:.35em .625em .75em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup legend{padding-left:2px;padding-right:2px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup>:first-child,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup>:first-child{margin-top:0!important}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item+.layout-toolbox-item,.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-section+.layout-toolbox-section,body .layout-toolbox-item+.layout-toolbox-item{margin-top:4px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup>:last-child,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup>:last-child{margin-bottom:0!important}.layout-editor .img-responsive,.layout-editor .img-responsive img,.layout-editor .layout-content.layout-content-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-content.layout-content-vector-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-html.layout-content-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-html.layout-content-vector-image>.layout-element-wrapper>.layout-content-markup>img{display:block;width:100%;max-width:100%;height:auto}body .layout-toolbox-item{border:1px solid #e4e5e6;background-color:#fff;padding:9px 12px;cursor:default;list-style-type:none}body .layout-toolbox-item i{display:inline-block;width:16px;font:normal normal normal 14px/1 FontAwesome}.layout-editor>.layout-toolbox-wrapper{position:sticky;top:1vh;padding-left:12px;width:220px;overflow-y:auto;scrollbar-width:thin;min-height:400px;max-height:98vh;height:100%}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox{border:1px solid #e4e5e6;padding:6px;background-color:#f3f4f5}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading{display:block;margin-bottom:4px;text-decoration:none}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading:before{display:inline-block;width:10px;margin-right:4px;font:normal normal normal 14px/1 FontAwesome;text-align:center;content:"\f0d7"}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-group-heading:before{content:"\f0da"}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-items{display:none}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item{border:1px solid #e4e5e6;background-color:#fff;padding:9px 12px;cursor:default}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item i{display:inline-block;width:16px;font:normal normal normal 14px/1 FontAwesome}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group+.layout-toolbox-group{margin-top:6px}.layout-editor .layout-popup{display:none;position:absolute;margin:0;box-shadow:3px 3px 11px 0 rgba(50,50,50,.5);border:1px solid #e4e5e6;padding:2px 0;background-color:#f7f7f7;list-style:none;z-index:20;color:#7c7c7c;text-align:left;cursor:default;white-space:nowrap;line-height:normal;min-width:300px}.layout-editor .layout-popup.wide{width:600px}.layout-editor .layout-popup .layout-popup-flex{display:-ms-flexbox;display:flex;padding:2px 5px}.layout-editor .layout-popup .layout-popup-flex .layout-popup-column+.layout-popup-column{margin-left:4px;border-left:1px solid rgba(128,128,128,.15);padding-left:4px}.layout-editor .layout-popup .layout-popup-item{padding:4px 6px}.layout-editor .layout-popup .layout-popup-label{font-size:.9em;font-weight:700;color:#7c7c7c}.layout-editor .layout-popup .layout-popup-action:hover{background-color:#f3f4f5;cursor:pointer}.layout-editor .layout-popup .layout-popup-input input[type=text],.layout-editor .layout-popup .layout-popup-input textarea{width:100%}.layout-editor .layout-popup .layout-popup-input>label{display:block;font-size:.9em} \ No newline at end of file From 391c032bf308a31eb9178d60b9d5160ac1e94ce1 Mon Sep 17 00:00:00 2001 From: Benedek Farkas Date: Sun, 10 Mar 2024 19:15:08 +0100 Subject: [PATCH 33/56] Gulpfile: Updating TS compilation options to fix TS6131 error "Cannot compile modules using option 'outFile' unless the '--module' flag is 'amd' or 'system'" Also recompiling client-side assets, but the changes are not the result of the compiler option change, they were just outdated --- src/Gulpfile.js | 2 +- .../Orchard.Layouts/Scripts/LayoutEditor.js | 6 +- .../Scripts/LayoutEditor.min.js | 2 +- .../Modules/Orchard.Layouts/Scripts/Models.js | 2 +- .../Orchard.Layouts/Styles/LayoutEditor.css | 2259 +- .../Styles/LayoutEditor.min.css | 2 +- .../Scripts/Calendars/jquery.calendars.min.js | 100 +- .../Orchard.Resources/Scripts/bootstrap.js | 10666 ++--- .../Scripts/bootstrap.min.js | 10 +- .../Orchard.Resources/Scripts/jquery-ui.js | 32313 +++++++--------- .../Scripts/jquery-ui.min.js | 21 +- .../Orchard.Resources/Scripts/jquery.js | 18321 ++++----- .../Orchard.Resources/Scripts/jquery.min.js | 5 +- .../Orchard.Resources/Styles/bootstrap.css | 9151 ++--- .../Styles/bootstrap.min.css | 8 +- .../Orchard.Resources/Styles/jquery-ui.css | 1329 +- .../Styles/jquery-ui.min.css | 8 +- 17 files changed, 31048 insertions(+), 43157 deletions(-) diff --git a/src/Gulpfile.js b/src/Gulpfile.js index 8ea0b094c91..77b4df2615b 100644 --- a/src/Gulpfile.js +++ b/src/Gulpfile.js @@ -222,7 +222,7 @@ function buildJsPipeline(assetGroup, doConcat, doRebuild) { // Source maps are useless if neither concatenating nor transpiling. if ((!doConcat || assetGroup.inputPaths.length < 2) && !assetGroup.inputPaths.some(function (inputPath) { return path.extname(inputPath).toLowerCase() === ".ts"; })) generateSourceMaps = false; - var typeScriptOptions = { allowJs: true, noImplicitAny: true, noEmitOnError: true }; + var typeScriptOptions = { allowJs: true, noImplicitAny: true, noEmitOnError: true, module: 'amd' }; if (assetGroup.typeScriptOptions) typeScriptOptions = Object.assign(typeScriptOptions, assetGroup.typeScriptOptions); // Merge override options from asset group if any. if (doConcat) diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js index c231067736e..b4c026f5aeb 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js @@ -825,8 +825,8 @@ angular connectWith: _(parentClasses).map(function (e) { return "#" + editorId + " " + e + ":not(.layout-container-sealed) > .layout-element-wrapper > .layout-children"; }).join(", "), placeholder: placeholderClasses, "ui-floating": floating, - helper: "clone", - appendTo: "body", + helper: "clone", + appendTo: "body", create: function (e, ui) { e.target.isToolbox = true; // Will indicate to connected sortables that dropped items were sent from toolbox. }, @@ -910,4 +910,4 @@ angular } ]); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9yY2hhcmQuV2ViL01vZHVsZXMvT3JjaGFyZC5MYXlvdXRzL0Fzc2V0cy9KYXZhU2NyaXB0L0xheW91dEVkaXRvci9Nb2R1bGUuanMiLCJPcmNoYXJkLldlYi9Nb2R1bGVzL09yY2hhcmQuTGF5b3V0cy9Bc3NldHMvSmF2YVNjcmlwdC9MYXlvdXRFZGl0b3IvU2VydmljZXMvQ2xpcGJvYXJkLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTGF5b3V0RWRpdG9yL1NlcnZpY2VzL1Njb3BlQ29uZmlndXJhdG9yLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTGF5b3V0RWRpdG9yL0RpcmVjdGl2ZXMvRWRpdG9yLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTGF5b3V0RWRpdG9yL0RpcmVjdGl2ZXMvQ2FudmFzLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTGF5b3V0RWRpdG9yL0RpcmVjdGl2ZXMvQ2hpbGQuanMiLCJPcmNoYXJkLldlYi9Nb2R1bGVzL09yY2hhcmQuTGF5b3V0cy9Bc3NldHMvSmF2YVNjcmlwdC9MYXlvdXRFZGl0b3IvRGlyZWN0aXZlcy9Db2x1bW4uanMiLCJPcmNoYXJkLldlYi9Nb2R1bGVzL09yY2hhcmQuTGF5b3V0cy9Bc3NldHMvSmF2YVNjcmlwdC9MYXlvdXRFZGl0b3IvRGlyZWN0aXZlcy9Db250ZW50LmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTGF5b3V0RWRpdG9yL0RpcmVjdGl2ZXMvR3JpZC5qcyIsIk9yY2hhcmQuV2ViL01vZHVsZXMvT3JjaGFyZC5MYXlvdXRzL0Fzc2V0cy9KYXZhU2NyaXB0L0xheW91dEVkaXRvci9EaXJlY3RpdmVzL1Jvdy5qcyIsIk9yY2hhcmQuV2ViL01vZHVsZXMvT3JjaGFyZC5MYXlvdXRzL0Fzc2V0cy9KYXZhU2NyaXB0L0xheW91dEVkaXRvci9EaXJlY3RpdmVzL1BvcHVwLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTGF5b3V0RWRpdG9yL0RpcmVjdGl2ZXMvVG9vbGJveC5qcyIsIk9yY2hhcmQuV2ViL01vZHVsZXMvT3JjaGFyZC5MYXlvdXRzL0Fzc2V0cy9KYXZhU2NyaXB0L0xheW91dEVkaXRvci9EaXJlY3RpdmVzL1Rvb2xib3hHcm91cC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0FDQTVFLElBQUksWUFBWSxDQUFDO0FBQ2pCLENBQUMsVUFBUyxZQUFZO0lBRWxCLElBQUksU0FBUyxHQUFHO1FBQ1osSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXpCLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBUyxXQUFXLEVBQUUsSUFBSTtZQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUN4QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsV0FBVztZQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ1gsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzVCLENBQUMsQ0FBQTtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUc7WUFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM1QixDQUFDLENBQUE7SUFDTCxDQUFDLENBQUE7SUFFRCxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7SUFFekMsT0FBTztTQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUM7U0FDdEIsT0FBTyxDQUFDLFdBQVcsRUFBRTtRQUNsQjtZQUNJLE1BQU0sQ0FBQztnQkFDSCxPQUFPLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPO2dCQUN2QyxPQUFPLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPO2dCQUN2QyxPQUFPLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPO2dCQUN2QyxVQUFVLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFVO2dCQUM3QyxVQUFVLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFVO2FBQ2hELENBQUM7UUFDTixDQUFDO0tBQ0osQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUM3Q3hDLE9BQU87S0FDRixNQUFNLENBQUMsY0FBYyxDQUFDO0tBQ3RCLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFVBQVUsRUFBRSxXQUFXO0lBQ2xELFVBQVUsUUFBUSxFQUFFLFNBQVM7UUFDekIsTUFBTSxDQUFDO1lBRUgsbUJBQW1CLEVBQUUsVUFBVSxNQUFNLEVBQUUsUUFBUTtnQkFFM0MsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO29CQUM1QyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2dCQUVILFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO29CQUNqQyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3BCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztvQkFDdkIsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztvQkFFN0IsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7d0JBQzFCLE1BQU0sQ0FBQztvQkFFWCxvRkFBb0Y7b0JBQ3BGLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDMUIsSUFBSSxjQUFjLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7d0JBQ25ELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDOzRCQUNuQixpRkFBaUY7NEJBQ2pGLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dDQUNaLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29DQUNsQixLQUFLLEVBQUU7d0NBQ0gsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzt3Q0FDL0IsS0FBSyxDQUFDO29DQUNWLEtBQUssRUFBRTt3Q0FDSCxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dDQUM5QixLQUFLLENBQUM7b0NBQ1YsS0FBSyxFQUFFO3dDQUNILGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7d0NBQ2hDLEtBQUssQ0FBQztnQ0FDVixDQUFDOzRCQUNMLENBQUM7d0JBQ0wsQ0FBQztvQkFDTCxDQUFDO29CQUVELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsTUFBTSxDQUFDLFFBQU0sQ0FBQSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUN2QixPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUNuQixDQUFDO29CQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNwRixRQUFRLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2pFLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ25CLENBQUM7b0JBRUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO3dCQUN0QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQzFELFFBQVEsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs0QkFDM0QsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDbkIsQ0FBQztvQkFDTCxDQUFDO29CQUVELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDekQsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dDQUM1QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDOzRCQUN2QyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUNuQixDQUFDO3dCQUVELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQzs0QkFDM0IsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDOzRCQUNqQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBQ2hCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7b0NBQ1QsT0FBTyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQ0FDeEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztvQ0FDWCxPQUFPLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dDQUMzQyxPQUFPLEdBQUcsSUFBSSxDQUFDOzRCQUNuQixDQUFDOzRCQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBQ3ZCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7b0NBQ1QsT0FBTyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQ0FDMUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztvQ0FDWCxPQUFPLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dDQUN6QyxPQUFPLEdBQUcsSUFBSSxDQUFDOzRCQUNuQixDQUFDO3dCQUNMLENBQUM7b0JBQ0wsQ0FBQztvQkFFRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ25CLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUM1QixPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDOzRCQUM5QixPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUNuQixDQUFDO3dCQUVELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7NEJBQy9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQ0FDMUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQ0FDM0MsT0FBTyxHQUFHLElBQUksQ0FBQzs0QkFDbkIsQ0FBQzs0QkFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUMvRCxPQUFPLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dDQUMzQyxPQUFPLEdBQUcsSUFBSSxDQUFDOzRCQUNuQixDQUFDOzRCQUNELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUM5RCxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7Z0NBQ2pCLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0NBQ2xCLE9BQU8sR0FBRyxJQUFJLENBQUM7NEJBQ25CLENBQUM7NEJBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBQzlELE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQ0FDbkIsT0FBTyxHQUFHLElBQUksQ0FBQzs0QkFDbkIsQ0FBQzt3QkFDTCxDQUFDO3dCQUNELElBQUksQ0FBQyxDQUFDOzRCQUNGLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQ0FDMUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQ0FDM0MsT0FBTyxHQUFHLElBQUksQ0FBQzs0QkFDbkIsQ0FBQzs0QkFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUMvRCxPQUFPLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dDQUMzQyxPQUFPLEdBQUcsSUFBSSxDQUFDOzRCQUNuQixDQUFDOzRCQUNELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUM5RCxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7Z0NBQ2pCLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0NBQ2xCLE9BQU8sR0FBRyxJQUFJLENBQUM7NEJBQ25CLENBQUM7NEJBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBQzlELE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQ0FDbkIsT0FBTyxHQUFHLElBQUksQ0FBQzs0QkFDbkIsQ0FBQzt3QkFDTCxDQUFDO29CQUNMLENBQUM7b0JBRUQsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzt3QkFDVixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLENBQUM7b0JBRUQsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUVwQixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxnRkFBZ0Y7b0JBRWpHLDJIQUEySDtvQkFDM0gsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzt3QkFDYixNQUFNLENBQUMsVUFBVSxDQUFDOzRCQUNkLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0NBQ1YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7NEJBQ2pELENBQUMsQ0FBQyxDQUFDO3dCQUNQLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDWixDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUVILE1BQU0sQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDO29CQUMxQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxDQUFDO2dCQUVILE1BQU0sQ0FBQyxRQUFNLENBQUEsR0FBRyxVQUFVLE9BQU87b0JBQzdCLE9BQU8sQ0FBQyxRQUFNLENBQUEsRUFBRSxDQUFDO29CQUNqQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQzt3QkFDWixJQUFJLEVBQUUscUJBQXFCO3FCQUM5QixDQUFDLENBQUM7Z0JBQ1AsQ0FBQyxDQUFBO2dCQUVELEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDM0IsTUFBTSxDQUFDLElBQUksR0FBRzt3QkFDVixNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSTs0QkFDeEQsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQ0FDVixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO29DQUNaLE1BQU0sQ0FBQztnQ0FFWCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQ0FDeEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQ0FFaEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO29DQUN6QixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNsRCxDQUFDLENBQUMsQ0FBQzt3QkFDUCxDQUFDLENBQUMsQ0FBQztvQkFDUCxDQUFDLENBQUM7Z0JBQ04sQ0FBQztZQUNMLENBQUM7WUFFRCxxQkFBcUIsRUFBRSxVQUFVLE1BQU0sRUFBRSxRQUFRO2dCQUM3QyxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUU3QixvR0FBb0c7Z0JBQ3BHLE1BQU0sQ0FBQywwQkFBMEIsR0FBRztvQkFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNyRixDQUFDLENBQUM7Z0JBRUYsTUFBTSxDQUFDLGVBQWUsR0FBRztvQkFDckIsTUFBTSxFQUFFLE1BQU07b0JBQ2QsS0FBSyxFQUFFLEdBQUc7b0JBQ1YsUUFBUSxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUU7b0JBQy9CLFFBQVEsRUFBRSxDQUFDO29CQUNYLDJJQUEySTtvQkFDM0ksS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7d0JBQ2xCLE1BQU0sQ0FBQyxNQUFNLENBQUM7NEJBQ1YsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3dCQUNyQyxDQUFDLENBQUMsQ0FBQzt3QkFDSCxzRUFBc0U7d0JBQ3RFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQzVDLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDeEMsQ0FBQztvQkFDRCxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRTt3QkFDakIsTUFBTSxDQUFDLE1BQU0sQ0FBQzs0QkFDVixPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7NEJBQ2xDLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ25DLENBQUMsQ0FBQyxDQUFDO29CQUNQLENBQUM7b0JBQ0QsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7d0JBQ2pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7NEJBQzFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztnQ0FDbkMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0NBQ2hELEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDOzRCQUMxQyxDQUFDOzRCQUNELFFBQVEsQ0FBQztnQ0FDTCxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7b0NBQ3hCLGlHQUFpRztvQ0FDakcsSUFBSSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO29DQUMxRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLElBQUksa0JBQWtCLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQzt3Q0FDekQsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQ0FDL0MsQ0FBQztnQ0FDRCxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUNuQyxDQUFDLENBQUMsQ0FBQzs0QkFDSCxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQztnQ0FDdEMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO29DQUN4QixJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7b0NBQzVDLElBQUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUN6RSxjQUFjLENBQUMsS0FBSyxHQUFHLG1CQUFtQixDQUFDO29DQUMzQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztvQ0FDMUIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO29DQUM1Qyw0R0FBNEc7b0NBQzVHLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUVBQW1FLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7d0NBQ3ZILE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7b0NBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUM7b0NBQ0osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRTt3Q0FDcEIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO29DQUM5QyxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO29DQUMxRCxFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3Q0FDaEIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7d0NBQ2pDLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztvQ0FDeEMsQ0FBQztvQ0FDRCxJQUFJLENBQUMsQ0FBQzt3Q0FDRixFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzt3Q0FDekIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29DQUN6QyxDQUFDO2dDQUNMLENBQUM7Z0NBQ0QsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDbEMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUNaLENBQUM7b0JBQ0wsQ0FBQztvQkFDRCxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRTt3QkFDcEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzs0QkFDMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQ0FDVixJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0NBQzdDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO29DQUNwQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQzt3Q0FDdEIsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO29DQUM5Qix3RkFBd0Y7b0NBQ3hGLHlGQUF5RjtvQ0FDekYsdUVBQXVFO29DQUN2RSwrSEFBK0g7b0NBQy9ILGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29DQUMxQyxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29DQUVuQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0NBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUk7NENBQ3pELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0RBQ2YsZUFBZSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnREFDekMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dEQUVqRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQztvREFDMUIsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDOzRDQUNuRCxDQUFDOzRDQUNELFFBQVEsQ0FBQztnREFDTCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztvREFDZCxlQUFlLENBQUMsUUFBTSxDQUFBLEVBQUUsQ0FBQztnREFDN0IsSUFBSTtvREFDQSxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7Z0RBQ25DLDZCQUE2QjtnREFDN0IsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQzs0Q0FFbkMsQ0FBQyxDQUFDLENBQUM7NENBQ0gsTUFBTSxDQUFDO3dDQUNYLENBQUMsQ0FBQyxDQUFDO29DQUNQLENBQUM7Z0NBQ0wsQ0FBQztnQ0FDRCxRQUFRLENBQUM7b0NBQ0wsNkJBQTZCO29DQUM3QixPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO29DQUMvQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO3dDQUNsQixlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7b0NBRW5DLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQzt3Q0FDMUMsTUFBTSxDQUFDO29DQUNYLENBQUMsQ0FBQyxDQUFDO2dDQUNQLENBQUMsQ0FBQyxDQUFDOzRCQUNQLENBQUMsQ0FBQyxDQUFDO3dCQUNQLENBQUM7b0JBQ0wsQ0FBQztpQkFDSixDQUFDO2dCQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUcsVUFBVSxLQUFLLEVBQUUsQ0FBQztvQkFDN0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQzt3QkFDekIsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUN6QixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQztnQkFFRixNQUFNLENBQUMsVUFBVSxHQUFHLFVBQVUsS0FBSztvQkFDL0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUVoQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQzt3QkFDaEMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDOzRCQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7b0JBQy9DLENBQUM7b0JBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO29CQUVsRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQzt3QkFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBRXZDLDZFQUE2RTtvQkFDN0UsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNuQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQzs0QkFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO29CQUN2QyxDQUFDO29CQUNELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDakQsQ0FBQztvQkFDRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQzt3QkFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFFNUQsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7b0JBQ3pDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO29CQUMxQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7d0JBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztvQkFDM0MsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7b0JBQzdDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7d0JBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztvQkFFNUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDbEIsQ0FBQyxDQUFDO1lBQ04sQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FDelZQLE9BQU87S0FDRixNQUFNLENBQUMsY0FBYyxDQUFDO0tBQ3RCLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLGFBQWE7SUFDeEMsVUFBVSxXQUFXO1FBQ2pCLE1BQU0sQ0FBQztZQUNILFFBQVEsRUFBRSxHQUFHO1lBQ2IsS0FBSyxFQUFFLEVBQUU7WUFDVCxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVztnQkFDaEUsVUFBVSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUztvQkFDbkQsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7d0JBQ2YsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN4QyxJQUFJO3dCQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsc0VBQXNFLENBQUMsQ0FBQztvQkFFNUYsTUFBTSxDQUFDLEtBQUssR0FBRyxVQUFVLE1BQU0sRUFBRSxDQUFDO3dCQUM5QixFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDOzRCQUMxQixNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQzFCLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDeEIsQ0FBQyxDQUFDO29CQUVGLE1BQU0sQ0FBQyxVQUFVLEdBQUcsVUFBVSxNQUFNO3dCQUNoQyxJQUFJLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxDQUFDO3dCQUVyRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7NEJBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQzt3QkFDekMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDOzRCQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7d0JBQzFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQzs0QkFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO3dCQUMzQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7NEJBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQzt3QkFDN0MsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQzs0QkFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO3dCQUU1QyxNQUFNLENBQUMsTUFBTSxDQUFDO29CQUNsQixDQUFDLENBQUM7b0JBRUYsc0xBQXNMO29CQUN0TCwySEFBMkg7b0JBQzNILGdHQUFnRztvQkFDaEcsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztvQkFFNUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztvQkFFckQsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSTt3QkFDNUQsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQzt3QkFDNUIsSUFBSSxVQUFVLEdBQUc7NEJBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTs0QkFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTs0QkFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUzs0QkFDaEMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUzs0QkFDaEMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVzs0QkFDcEMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTt5QkFDakMsQ0FBQzt3QkFFRixrSUFBa0k7d0JBQ2xJLHVKQUF1Sjt3QkFDdkosK0pBQStKO3dCQUMvSixpSEFBaUg7d0JBQ2pILDhMQUE4TDt3QkFDOUwsa0JBQWtCLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7d0JBQ3JHLElBQUksUUFBUSxHQUFHLG9CQUFvQixHQUFHLGlDQUFpQyxDQUFDO3dCQUN4RSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ3RDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDMUMsQ0FBQyxDQUFDLENBQUM7b0JBRUgsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsVUFBVSxPQUFPO3dCQUN4QyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDO3dCQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDckMsQ0FBQyxDQUFDO29CQUVGLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFVBQVUsV0FBVzt3QkFDM0MsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQzt3QkFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3hDLENBQUMsQ0FBQztvQkFFRixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLFVBQVUsQ0FBQzt3QkFDeEMsb0ZBQW9GO3dCQUNwRixtRkFBbUY7d0JBQ25GLHFGQUFxRjt3QkFDckYscURBQXFEO3dCQUNyRCxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUN6QixDQUFDLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzs0QkFDckYsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7NEJBQ25GLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdkIsQ0FBQzt3QkFDRCxJQUFJLENBQUMsQ0FBQzs0QkFDRixJQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQzs0QkFDbkQsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0NBQ25CLE1BQU0sQ0FBQyxNQUFNLENBQUM7b0NBQ1YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0NBQ2IsS0FBSyxNQUFNOzRDQUNQLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQzs0Q0FDbkQsS0FBSyxDQUFDO3dDQUNWLEtBQUssS0FBSzs0Q0FDTixjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7NENBQ2xELEtBQUssQ0FBQzt3Q0FDVixLQUFLLE9BQU87NENBQ1IsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDOzRDQUNwRCxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztnREFDWixJQUFJLEVBQUUscUJBQXFCOzZDQUM5QixDQUFDLENBQUM7NENBQ0gsS0FBSyxDQUFDO29DQUNkLENBQUM7Z0NBQ0wsQ0FBQyxDQUFDLENBQUM7Z0NBRUgsMkhBQTJIO2dDQUMzSCxNQUFNLENBQUMsVUFBVSxDQUFDO29DQUNkLE1BQU0sQ0FBQyxNQUFNLENBQUM7d0NBQ1YsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDOzRDQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQ0FDckQsQ0FBQyxDQUFDLENBQUM7Z0NBQ1AsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dDQUVSLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQzs0QkFDdkIsQ0FBQzt3QkFDTCxDQUFDO3dCQUVELHlGQUF5Rjt3QkFDekYsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUN4QixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO2FBQ0o7WUFDRCxXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFDOUMsT0FBTyxFQUFFLElBQUk7WUFDYixJQUFJLEVBQUUsVUFBVSxLQUFLLEVBQUUsT0FBTztnQkFDMUIsd0RBQXdEO2dCQUN4RCxPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztvQkFDdkQsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixDQUFDLENBQUMsQ0FBQztnQkFDSCw4REFBOEQ7Z0JBQzlELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO29CQUN2QixLQUFLLENBQUMsTUFBTSxDQUFDO3dCQUNULEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzt3QkFDbkMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO29CQUN4QyxDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQzVJUCxPQUFPO0tBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQztLQUN0QixTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxhQUFhO0lBQzdELFVBQVUsaUJBQWlCLEVBQUUsV0FBVztRQUNwQyxNQUFNLENBQUM7WUFDSCxRQUFRLEVBQUUsR0FBRztZQUNiLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDdkIsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRO2dCQUN2QyxVQUFVLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTTtvQkFDOUIsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUN4RCxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQzFELE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUN6QyxDQUFDO2FBQ0o7WUFDRCxXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFDOUMsT0FBTyxFQUFFLElBQUk7U0FDaEIsQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUNsQlAsT0FBTztLQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUM7S0FDdEIsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUMsVUFBVTtJQUNwQyxVQUFVLFFBQVE7UUFDZCxNQUFNLENBQUM7WUFDSCxRQUFRLEVBQUUsR0FBRztZQUNiLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDdkIsSUFBSSxFQUFFLFVBQVUsS0FBSyxFQUFFLE9BQU87Z0JBQzFCLElBQUksUUFBUSxHQUFHLGNBQWMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyx1QkFBdUIsQ0FBQztnQkFDM0YsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQ2RQLE9BQU87S0FDRixNQUFNLENBQUMsY0FBYyxDQUFDO0tBQ3RCLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxhQUFhO0lBQ3pFLFVBQVUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLFdBQVc7UUFDOUMsTUFBTSxDQUFDO1lBQ0gsUUFBUSxFQUFFLEdBQUc7WUFDYixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ3ZCLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxVQUFVO2dCQUM3QixVQUFVLE1BQU0sRUFBRSxRQUFRO29CQUN0QixpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQ3hELGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDMUQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ3pDLENBQUM7YUFDSjtZQUNELFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztZQUM5QyxPQUFPLEVBQUUsSUFBSTtZQUNiLElBQUksRUFBRSxVQUFVLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSztnQkFDakMsT0FBTyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDaEQsSUFBSSxFQUFFLEdBQUc7b0JBQ1QsTUFBTSxFQUFFLE9BQU87b0JBQ2YsTUFBTSxFQUFFLElBQUk7b0JBQ1osS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7d0JBQ2xCLEtBQUssQ0FBQyxNQUFNLENBQUM7NEJBQ1QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzt3QkFDM0MsQ0FBQyxDQUFDLENBQUM7b0JBQ1AsQ0FBQztvQkFDRCxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRTt3QkFDakIsSUFBSSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNyQyxJQUFJLFVBQVUsR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7d0JBQzdELElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzt3QkFDakMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3hELElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7NEJBQ3pELEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ3RFLEtBQUssQ0FBQyxNQUFNLENBQUM7b0NBQ1QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7Z0NBQzlDLENBQUMsQ0FBQyxDQUFDOzRCQUNQLENBQUM7NEJBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxVQUFVLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUM1RSxLQUFLLENBQUMsTUFBTSxDQUFDO29DQUNULEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dDQUNoRCxDQUFDLENBQUMsQ0FBQzs0QkFDUCxDQUFDO3dCQUNMLENBQUM7d0JBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUM5RCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQzs0QkFDakYsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLFVBQVUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ3RFLEtBQUssQ0FBQyxNQUFNLENBQUM7b0NBQ1QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7Z0NBQy9DLENBQUMsQ0FBQyxDQUFDOzRCQUNQLENBQUM7NEJBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDOUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztvQ0FDVCxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQ0FDakQsQ0FBQyxDQUFDLENBQUM7NEJBQ1AsQ0FBQzt3QkFDTCxDQUFDO29CQUVMLENBQUM7b0JBQ0QsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7d0JBQ2pCLEtBQUssQ0FBQyxNQUFNLENBQUM7NEJBQ1gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQzt3QkFDMUMsQ0FBQyxDQUFDLENBQUM7b0JBQ1AsQ0FBQztpQkFDSixDQUFDLENBQUM7WUFDUCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUNuRVAsT0FBTztLQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUM7S0FDdEIsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTSxFQUFFLG1CQUFtQixFQUFFLGFBQWE7SUFDdEUsVUFBVSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsV0FBVztRQUMxQyxNQUFNLENBQUM7WUFDSCxRQUFRLEVBQUUsR0FBRztZQUNiLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDdkIsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVU7Z0JBQzdCLFVBQVUsTUFBTSxFQUFFLFFBQVE7b0JBQ3RCLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFFeEQsMklBQTJJO29CQUMzSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxVQUFVLElBQUk7d0JBQ25DLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzt3QkFDM0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkQsQ0FBQyxDQUFDO29CQUVGLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hELENBQUM7YUFDSjtZQUNELFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztZQUMvQyxPQUFPLEVBQUUsSUFBSTtTQUNoQixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQ3hCUCxPQUFPO0tBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQztLQUN0QixTQUFTLENBQUMsZUFBZSxFQUFFLENBQUMsVUFBVSxFQUFFLG1CQUFtQixFQUFFLGFBQWE7SUFDdkUsVUFBVSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsV0FBVztRQUM5QyxNQUFNLENBQUM7WUFDSCxRQUFRLEVBQUUsR0FBRztZQUNiLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDdkIsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVU7Z0JBQzdCLFVBQVUsTUFBTSxFQUFFLFFBQVE7b0JBQ3RCLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDeEQsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUMxRCxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDekMsQ0FBQzthQUNKO1lBQ0QsV0FBVyxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBQzVDLE9BQU8sRUFBRSxJQUFJO1NBQ2hCLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FDbEJQLE9BQU87S0FDRixNQUFNLENBQUMsY0FBYyxDQUFDO0tBQ3RCLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsYUFBYTtJQUN0RSxVQUFVLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxXQUFXO1FBQzlDLE1BQU0sQ0FBQztZQUNILFFBQVEsRUFBRSxHQUFHO1lBQ2IsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUN2QixVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVTtnQkFDN0IsVUFBVSxNQUFNLEVBQUUsUUFBUTtvQkFDdEIsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUN4RCxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQzFELE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUNyQyxNQUFNLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDakQsQ0FBQzthQUNKO1lBQ0QsV0FBVyxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzNDLE9BQU8sRUFBRSxJQUFJO1NBQ2hCLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FDbkJQLE9BQU87S0FDRixNQUFNLENBQUMsY0FBYyxDQUFDO0tBQ3RCLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRTtJQUN6QjtRQUNJLE1BQU0sQ0FBQztZQUNILFFBQVEsRUFBRSxHQUFHO1lBQ2IsSUFBSSxFQUFFLFVBQVUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLO2dCQUNqQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQztnQkFDckQsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNyRCxPQUFPLENBQUMsS0FBSyxDQUFDO29CQUNWLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDZixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDdkIsS0FBSyxDQUFDLFFBQVEsQ0FBQzs0QkFDWCxFQUFFLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixJQUFJLFVBQVU7NEJBQ3hDLEVBQUUsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLElBQUksaUJBQWlCOzRCQUMvQyxFQUFFLEVBQUUsT0FBTzt5QkFDZCxDQUFDLENBQUM7d0JBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDeEMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDSCxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztvQkFDbkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixDQUFDLENBQUMsQ0FBQztnQkFDSCxhQUFhLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztvQkFDM0IsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztnQkFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztvQkFDckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7d0JBQ3hELEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDakIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixDQUFDLENBQUMsQ0FBQztnQkFDSCxLQUFLLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLFVBQVUsQ0FBQztvQkFDbEMsbUdBQW1HO29CQUNuRyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FDdkNQLE9BQU87S0FDRixNQUFNLENBQUMsY0FBYyxDQUFDO0tBQ3RCLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFVBQVUsRUFBRSxhQUFhO0lBQ3JELFVBQVUsUUFBUSxFQUFFLFdBQVc7UUFDM0IsTUFBTSxDQUFDO1lBQ0gsUUFBUSxFQUFFLEdBQUc7WUFDYixVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVTtnQkFDN0IsVUFBVSxNQUFNLEVBQUUsUUFBUTtvQkFFdEIsTUFBTSxDQUFDLGFBQWEsR0FBRzt3QkFFbkIsTUFBTSxDQUFDLFlBQVksR0FBRzs0QkFDbEIsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0NBQ25CLFdBQVcsRUFBRSxRQUFRO2dDQUNyQixZQUFZLEVBQUUsTUFBTTtnQ0FDcEIsa0JBQWtCLEVBQUUsYUFBYTtnQ0FDakMsUUFBUSxFQUFFLEVBQUU7NkJBQ2YsQ0FBQzt5QkFDTCxDQUFDO3dCQUVGLE1BQU0sQ0FBQyxXQUFXLEdBQUc7NEJBQ2pCLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dDQUNsQixXQUFXLEVBQUUsUUFBUTtnQ0FDckIsWUFBWSxFQUFFLGdCQUFnQjtnQ0FDOUIsa0JBQWtCLEVBQUUsb0JBQW9CO2dDQUN4QyxRQUFRLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzZCQUN6QyxDQUFDOzRCQUNGLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dDQUNsQixXQUFXLEVBQUUsUUFBUTtnQ0FDckIsWUFBWSxFQUFFLGlCQUFpQjtnQ0FDL0Isa0JBQWtCLEVBQUUscUJBQXFCO2dDQUN6QyxRQUFRLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzZCQUN6QyxDQUFDOzRCQUNGLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dDQUNsQixXQUFXLEVBQUUsUUFBUTtnQ0FDckIsWUFBWSxFQUFFLGlCQUFpQjtnQ0FDL0Isa0JBQWtCLEVBQUUscUJBQXFCO2dDQUN6QyxRQUFRLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzZCQUN6QyxDQUFDOzRCQUNGLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dDQUNsQixXQUFXLEVBQUUsUUFBUTtnQ0FDckIsWUFBWSxFQUFFLGlCQUFpQjtnQ0FDL0Isa0JBQWtCLEVBQUUscUJBQXFCO2dDQUN6QyxRQUFRLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzZCQUN6QyxDQUFDOzRCQUNGLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dDQUNsQixXQUFXLEVBQUUsUUFBUTtnQ0FDckIsWUFBWSxFQUFFLGlCQUFpQjtnQ0FDL0Isa0JBQWtCLEVBQUUscUJBQXFCO2dDQUN6QyxRQUFRLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzZCQUN6QyxDQUFDOzRCQUNGLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dDQUNsQixXQUFXLEVBQUUsUUFBUTtnQ0FDckIsWUFBWSxFQUFFLGtCQUFrQjtnQ0FDaEMsa0JBQWtCLEVBQUUsc0JBQXNCO2dDQUMxQyxRQUFRLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDOzZCQUMxQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0NBQ3RCLFdBQVcsRUFBRSxRQUFRO2dDQUNyQixZQUFZLEVBQUUsYUFBYTtnQ0FDM0Isa0JBQWtCLEVBQUUsWUFBWTtnQ0FDaEMsUUFBUSxFQUFFLEVBQUU7NkJBQ2YsQ0FBQzt5QkFDTCxDQUFDO3dCQUVGLE1BQU0sQ0FBQyxjQUFjLEdBQUc7NEJBQ3BCLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dDQUNyQixXQUFXLEVBQUUsUUFBUTtnQ0FDckIsWUFBWSxFQUFFLFFBQVE7Z0NBQ3RCLGtCQUFrQixFQUFFLGVBQWU7Z0NBQ25DLEtBQUssRUFBRSxDQUFDO2dDQUNSLE1BQU0sRUFBRSxDQUFDO2dDQUNULFFBQVEsRUFBRSxFQUFFOzZCQUNmLENBQUM7eUJBQ0wsQ0FBQzt3QkFFRixNQUFNLENBQUMsY0FBYyxHQUFHOzRCQUNwQixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztnQ0FDckIsV0FBVyxFQUFFLFFBQVE7Z0NBQ3JCLFlBQVksRUFBRSxRQUFRO2dDQUN0QixrQkFBa0IsRUFBRSxlQUFlO2dDQUNuQyxRQUFRLEVBQUUsRUFBRTs2QkFDZixDQUFDO3lCQUNMLENBQUM7d0JBRUYsTUFBTSxDQUFDLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxRQUFROzRCQUN4RixNQUFNLENBQUM7Z0NBQ0gsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dDQUNuQixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxXQUFXO29DQUN4RCxJQUFJLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO29DQUM1QixJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7b0NBQ2hGLElBQUksSUFBSSxHQUFHO3dDQUNQLFdBQVcsRUFBRSxLQUFLO3dDQUNsQixXQUFXLEVBQUUsV0FBVyxDQUFDLEVBQUU7d0NBQzNCLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxLQUFLO3dDQUNuQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsU0FBUzt3Q0FDdkMsSUFBSSxFQUFFLElBQUk7d0NBQ1YsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO3dDQUNoQyxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7cUNBQ3pCLENBQUM7b0NBQ0YsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO29DQUM1QixPQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDO29DQUNuRCxPQUFPLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7b0NBQ3pDLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO29DQUNyRCxNQUFNLENBQUMsT0FBTyxDQUFDO2dDQUNuQixDQUFDLENBQUM7NkJBQ0wsQ0FBQzt3QkFDTixDQUFDLENBQUMsQ0FBQztvQkFFUCxDQUFDLENBQUM7b0JBRUYsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUV2QixNQUFNLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxJQUFJO3dCQUN0QyxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUM3RCxJQUFJLGFBQWEsQ0FBQzt3QkFDbEIsSUFBSSxrQkFBa0IsQ0FBQzt3QkFDdkIsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO3dCQUVyQixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUNYLEtBQUssTUFBTTtnQ0FDUCxhQUFhLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO2dDQUM5RSxrQkFBa0IsR0FBRyxxRUFBcUUsQ0FBQztnQ0FDM0YsS0FBSyxDQUFDOzRCQUNWLEtBQUssS0FBSztnQ0FDTixhQUFhLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQ0FDakMsa0JBQWtCLEdBQUcsd0VBQXdFLENBQUM7Z0NBQzlGLEtBQUssQ0FBQzs0QkFDVixLQUFLLFFBQVE7Z0NBQ1QsYUFBYSxHQUFHLENBQUMsbUNBQW1DLENBQUMsQ0FBQztnQ0FDdEQsa0JBQWtCLEdBQUcsdUVBQXVFLENBQUM7Z0NBQzdGLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxvR0FBb0c7Z0NBQ3JILEtBQUssQ0FBQzs0QkFDVixLQUFLLFNBQVM7Z0NBQ1YsYUFBYSxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztnQ0FDOUUsa0JBQWtCLEdBQUcsdURBQXVELENBQUM7Z0NBQzdFLEtBQUssQ0FBQzs0QkFDVixLQUFLLFFBQVE7Z0NBQ1QsYUFBYSxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztnQ0FDOUUsa0JBQWtCLEdBQUcscUVBQXFFLENBQUM7Z0NBQzNGLEtBQUssQ0FBQzt3QkFDZCxDQUFDO3dCQUVELE1BQU0sQ0FBQzs0QkFDSCxNQUFNLEVBQUUsTUFBTTs0QkFDZCxXQUFXLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLFFBQVEsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLDZFQUE2RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzs0QkFDL0ssV0FBVyxFQUFFLGtCQUFrQjs0QkFDL0IsYUFBYSxFQUFFLFFBQVE7NEJBQ3ZCLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFO2dDQUNuQixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxrRkFBa0Y7NEJBQ2pILENBQUM7NEJBQ0QsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7Z0NBQ2xCLE1BQU0sQ0FBQyxNQUFNLENBQUM7b0NBQ1YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dDQUNyQyxDQUFDLENBQUMsQ0FBQzs0QkFDUCxDQUFDOzRCQUNELElBQUksRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFO2dDQUNqQixNQUFNLENBQUMsTUFBTSxDQUFDO29DQUNWLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztvQ0FDbEMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dDQUMzQixDQUFDLENBQUMsQ0FBQzs0QkFDUCxDQUFDOzRCQUNELElBQUksRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFO2dDQUNqQixNQUFNLENBQUMsTUFBTSxDQUFDO29DQUNWLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQ0FDakQsQ0FBQyxDQUFDLENBQUM7NEJBQ1AsQ0FBQzt5QkFDSixDQUFBO29CQUNMLENBQUMsQ0FBQztvQkFFRixJQUFJLDJCQUEyQixHQUFHLDBDQUEwQyxDQUFDO29CQUM3RSxNQUFNLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLE1BQU0sQ0FBQztvQkFFNUUsTUFBTSxDQUFDLHVCQUF1QixHQUFHLFVBQVUsQ0FBQzt3QkFDeEMsTUFBTSxDQUFDLGlCQUFpQixHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO3dCQUNyRCxDQUFDLENBQUMsTUFBTSxDQUFDLDJCQUEyQixFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsdUNBQXVDO3dCQUMxSCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ25CLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDeEIsQ0FBQyxDQUFDO2dCQUNOLENBQUM7YUFDSjtZQUNELFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztZQUMvQyxPQUFPLEVBQUUsSUFBSTtZQUNiLElBQUksRUFBRSxVQUFVLEtBQUssRUFBRSxPQUFPO2dCQUMxQixJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQzlDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQztvQkFDckMsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUNyRCxpR0FBaUc7b0JBQ2pHLHVEQUF1RDtvQkFDdkQsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNwRSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ3RDLEVBQUUsQ0FBQyxDQUFDLGNBQWMsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDM0YsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQzt3QkFDbEMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDdEMsQ0FBQztvQkFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsY0FBYyxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQzt3QkFDL0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztvQkFDekMsQ0FBQztvQkFDRCxJQUFJLENBQUMsQ0FBQzt3QkFDRixPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO3dCQUNsQyxPQUFPLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUN6QyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FDOU1QLE9BQU87S0FDRixNQUFNLENBQUMsY0FBYyxDQUFDO0tBQ3RCLFNBQVMsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLFVBQVUsRUFBRSxhQUFhO0lBQzFELFVBQVUsUUFBUSxFQUFFLFdBQVc7UUFDM0IsTUFBTSxDQUFDO1lBQ0gsUUFBUSxFQUFFLEdBQUc7WUFDYixLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQ3hCLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxVQUFVO2dCQUM3QixVQUFVLE1BQU0sRUFBRSxRQUFRO29CQUN0QixJQUFJLHFCQUFxQixHQUFHLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztvQkFDN0YsTUFBTSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssTUFBTSxDQUFDO29CQUNoRSxNQUFNLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDO3dCQUNsQyxNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQzt3QkFDekMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyx1Q0FBdUM7d0JBQzlHLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDbkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUN4QixDQUFDLENBQUM7Z0JBQ04sQ0FBQzthQUNKO1lBQ0QsV0FBVyxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO1lBQ3BELE9BQU8sRUFBRSxJQUFJO1NBQ2hCLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDIiwiZmlsZSI6IkxheW91dEVkaXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImFuZ3VsYXIubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIsIFtcIm5nU2FuaXRpemVcIiwgXCJuZ1Jlc291cmNlXCIsIFwidWkuc29ydGFibGVcIl0pOyIsInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbihMYXlvdXRFZGl0b3IpIHtcclxuXHJcbiAgICB2YXIgQ2xpcGJvYXJkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLl9jbGlwYm9hcmREYXRhID0ge307XHJcbiAgICAgICAgdGhpcy5faXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3dhc0ludm9rZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXREYXRhID0gZnVuY3Rpb24oY29udGVudFR5cGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgc2VsZi5fY2xpcGJvYXJkRGF0YVtjb250ZW50VHlwZV0gPSBkYXRhO1xyXG4gICAgICAgICAgICBzZWxmLl93YXNJbnZva2VkID0gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YSA9IGZ1bmN0aW9uIChjb250ZW50VHlwZSkge1xyXG4gICAgICAgICAgICBzZWxmLl93YXNJbnZva2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NsaXBib2FyZERhdGFbY29udGVudFR5cGVdO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHNlbGYuX2lzRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBzZWxmLl93YXNJbnZva2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNlbGYuX2NsaXBib2FyZERhdGEgPSB7fTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2lzRGlzYWJsZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2FzSW52b2tlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3dhc0ludm9rZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIExheW91dEVkaXRvci5DbGlwYm9hcmQgPSBuZXcgQ2xpcGJvYXJkKCk7XHJcblxyXG4gICAgYW5ndWxhclxyXG4gICAgICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgICAgICAuZmFjdG9yeShcImNsaXBib2FyZFwiLCBbXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXREYXRhOiBMYXlvdXRFZGl0b3IuQ2xpcGJvYXJkLnNldERhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0RGF0YTogTGF5b3V0RWRpdG9yLkNsaXBib2FyZC5nZXREYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGU6IExheW91dEVkaXRvci5DbGlwYm9hcmQuZGlzYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBMYXlvdXRFZGl0b3IuQ2xpcGJvYXJkLmlzRGlzYWJsZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgd2FzSW52b2tlZDogTGF5b3V0RWRpdG9yLkNsaXBib2FyZC53YXNJbnZva2VkXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXSk7XHJcbn0pKExheW91dEVkaXRvciB8fCAoTGF5b3V0RWRpdG9yID0ge30pKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZmFjdG9yeShcInNjb3BlQ29uZmlndXJhdG9yXCIsIFtcIiR0aW1lb3V0XCIsIFwiY2xpcGJvYXJkXCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKCR0aW1lb3V0LCBjbGlwYm9hcmQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmVGb3JFbGVtZW50OiBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgJGVsZW1lbnQuZmluZChcIi5sYXlvdXQtcGFuZWxcIikuY2xpY2soZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJGVsZW1lbnQucGFyZW50KCkua2V5ZG93bihmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzZXRGb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9ICRzY29wZS5lbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5lZGl0b3IuaXNEcmFnZ2luZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5hdGl2ZSBjbGlwYm9hcmQgc3VwcG9ydCBleGlzdHMsIHRoZSBwc2V1ZG8tY2xpcGJvYXJkIHdpbGwgaGF2ZSBiZWVuIGRpc2FibGVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsaXBib2FyZC5pc0Rpc2FibGVkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb2N1c2VkRWxlbWVudCA9IGVsZW1lbnQuZWRpdG9yLmZvY3VzZWRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhZm9jdXNlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQc2V1ZG8gY2xpcGJvYXJkIGhhbmRsaW5nIGZvciBicm93c2VycyBub3QgYWxsb3dpbmcgcmVhbCBjbGlwYm9hcmQgb3BlcmF0aW9ucy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jdHJsS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZS53aGljaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY3OiAvLyBDXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2VkRWxlbWVudC5jb3B5KGNsaXBib2FyZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4ODogLy8gWFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZEVsZW1lbnQuY3V0KGNsaXBib2FyZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4NjogLy8gVlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZEVsZW1lbnQucGFzdGUoY2xpcGJvYXJkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSA0NikgeyAvLyBEZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5kZWxldGUoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiAoZS53aGljaCA9PSAzMiB8fCBlLndoaWNoID09IDI3KSkgeyAvLyBTcGFjZSBvciBFc2NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlbGVtZW50LmZpbmQoXCIubGF5b3V0LXBhbmVsLWFjdGlvbi1wcm9wZXJ0aWVzXCIpLmZpcnN0KCkuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFlbGVtZW50Lmhhc0VkaXRvcikgeyAvLyBUaGlzIGVsZW1lbnQgaGFzIGFuIGVkaXRvciBkaWFsb2cuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSAxMykgeyAvLyBFbnRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlbGVtZW50LmZpbmQoXCIubGF5b3V0LXBhbmVsLWFjdGlvbi1lZGl0XCIpLmZpcnN0KCkuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhZWxlbWVudC5jaGlsZHJlbikgeyAvLyBUaGlzIGlzIGEgY29udGFpbmVyLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgZS5hbHRLZXkgJiYgZS53aGljaCA9PSA0MCkgeyAvLyBBbHQrRG93blxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRyZW5bMF0uc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSBcIkNvbHVtblwiKSB7IC8vIFRoaXMgaXMgYSBjb2x1bW4uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbm5lY3RBZGphY2VudCA9ICFlLmN0cmxLZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUud2hpY2ggPT0gMzcpIHsgLy8gTGVmdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5hbHRLZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmV4cGFuZExlZnQoY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNvbnRyYWN0UmlnaHQoY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLndoaWNoID09IDM5KSB7IC8vIFJpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmFsdEtleSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29udHJhY3RMZWZ0KGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnNoaWZ0S2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5leHBhbmRSaWdodChjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWVsZW1lbnQucGFyZW50KSB7IC8vIFRoaXMgaXMgYSBjaGlsZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmFsdEtleSAmJiBlLndoaWNoID09IDM4KSB7IC8vIEFsdCtVcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucGFyZW50LnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnBhcmVudC50eXBlID09IFwiUm93XCIpIHsgLy8gUGFyZW50IGlzIGEgaG9yaXpvbnRhbCBjb250YWluZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMzcpIHsgLy8gTGVmdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudC5tb3ZlRm9jdXNQcmV2Q2hpbGQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDM5KSB7IC8vIFJpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Lm1vdmVGb2N1c05leHRDaGlsZChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSAzNykgeyAvLyBDdHJsK0xlZnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tb3ZlVXAoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRGb2N1cyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMzkpIHsgLy8gQ3RybCtSaWdodFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1vdmVEb3duKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAvLyBQYXJlbnQgaXMgYSB2ZXJ0aWNhbCBjb250YWluZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMzgpIHsgLy8gVXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnQubW92ZUZvY3VzUHJldkNoaWxkKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSA0MCkgeyAvLyBEb3duXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Lm1vdmVGb2N1c05leHRDaGlsZChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSAzOCkgeyAvLyBDdHJsK1VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubW92ZVVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Rm9jdXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDQwKSB7IC8vIEN0cmwrRG93blxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1vdmVEb3duKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoKTsgLy8gRXZlbnQgaXMgbm90IHRyaWdnZXJlZCBieSBBbmd1bGFyIGRpcmVjdGl2ZSBidXQgcmF3IGV2ZW50IGhhbmRsZXIgb24gZWxlbWVudC5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhBQ0s6IFdvcmthcm91bmQgYmVjYXVzZSBvZiBob3cgQW5ndWxhciB0cmVhdHMgdGhlIERPTSB3aGVuIGVsZW1lbnRzIGFyZSBzaGlmdGVkIGFyb3VuZCAtIGlucHV0IGZvY3VzIGlzIHNvbWV0aW1lcyBsb3N0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzZXRGb2N1cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVkaXRvci5mb2N1c2VkRWxlbWVudC5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuc2V0SXNGb2N1c2VkRXZlbnRIYW5kbGVycy5wdXNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJGVsZW1lbnQucGFyZW50KCkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmRlbGV0ZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZGVsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQuZXZlbnQudHJpZ2dlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImxheW91dGVkaXRvcjplZGl0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkc2NvcGUuZWxlbWVudC5oYXNFZGl0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVkaXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJHJvb3QuZWRpdEVsZW1lbnQoJHNjb3BlLmVsZW1lbnQpLmRvbmUoZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuZGF0YSA9IGFyZ3MuZWxlbWVudC5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5hcHBseUVsZW1lbnRFZGl0b3JNb2RlbChhcmdzLmVsZW1lbnRFZGl0b3JNb2RlbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISEkc2NvcGUuZWxlbWVudC5zZXRIdG1sKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuc2V0SHRtbChhcmdzLmVsZW1lbnQuaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZUZvckNvbnRhaW5lcjogZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9ICRzY29wZS5lbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyRzY29wZS5pc1JlY2VpdmluZyA9IGZhbHNlOyAvLyBUcnVlIHdoZW4gY29udGFpbmVyIGlzIHJlY2VpdmluZyBhbiBleHRlcm5hbCBlbGVtZW50IHZpYSBkcmFnL2Ryb3AuXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmdldFNob3dDaGlsZHJlblBsYWNlaG9sZGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHNjb3BlLmVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwICYmICEkc2NvcGUuZWxlbWVudC5nZXRJc0Ryb3BUYXJnZXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUuc29ydGFibGVPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IFwibW92ZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheTogMTUwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZWxlbWVudC5nZXRJc1NlYWxlZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogNSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9oYW5kbGU6IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIDwgMiA/IFwiLmltYWdpbmFyeS1jbGFzc1wiIDogZmFsc2UsIC8vIEZvciBzb21lIHJlYXNvbiBkb2Vzbid0IGdldCByZS1ldmFsdWF0ZWQgYWZ0ZXIgYWRkaW5nIG1vcmUgY2hpbGRyZW4uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNEcm9wVGFyZ2V0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWRpdG9yLmlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHRoZSBkcm9wIHRhcmdldCBwbGFjZWhvbGRlciBhcyBoaWdoIGFzIHRoZSBpdGVtIGJlaW5nIGRyYWdnZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5wbGFjZWhvbGRlci5oZWlnaHQodWkuaXRlbS5oZWlnaHQoKSAtIDQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIuY3NzKFwibWluLWhlaWdodFwiLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVkaXRvci5pc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRJc0Ryb3BUYXJnZXQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXI6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhdWkuc2VuZGVyICYmICEhdWkuc2VuZGVyWzBdLmlzVG9vbGJveCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXVpLnNlbmRlclswXS5kcm9wVGFyZ2V0VGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZW91dC5jYW5jZWwodWkuc2VuZGVyWzBdLmRyb3BUYXJnZXRUaW1lb3V0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkuc2VuZGVyWzBdLmRyb3BUYXJnZXRUaW1lb3V0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09IFwiUm93XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBhIHByZXZpb3VzIGRyb3AgdGFyZ2V0IGFuZCBpdCB3YXMgYSByb3csIHJvbGwgYmFjayBhbnkgcGVuZGluZyBjb2x1bW4gYWRkcyB0byBpdC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0Ryb3BUYXJnZXQgPSBlbGVtZW50LmVkaXRvci5kcm9wVGFyZ2V0RWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXByZXZpb3VzRHJvcFRhcmdldCAmJiBwcmV2aW91c0Ryb3BUYXJnZXQudHlwZSA9PSBcIlJvd1wiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzRHJvcFRhcmdldC5yb2xsYmFja0FkZENvbHVtbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNEcm9wVGFyZ2V0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5zZW5kZXJbMF0uZHJvcFRhcmdldFRpbWVvdXQgPSAkdGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT0gXCJSb3dcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY2VpdmVkQ29sdW1uID0gdWkuaXRlbS5zb3J0YWJsZS5tb2RlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNlaXZlZENvbHVtbldpZHRoID0gTWF0aC5mbG9vcigxMiAvIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCArIDEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkQ29sdW1uLndpZHRoID0gcmVjZWl2ZWRDb2x1bW5XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkQ29sdW1uLm9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmJlZ2luQWRkQ29sdW1uKHJlY2VpdmVkQ29sdW1uV2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSB0aGUgZHJvcCB0YXJnZXQgcGxhY2Vob2xkZXIgdGhlIGNvcnJlY3Qgd2lkdGggYW5kIGFzIGhpZ2ggYXMgdGhlIGhpZ2hlc3QgZXhpc3RpbmcgY29sdW1uIGluIHRoZSByb3cuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4SGVpZ2h0ID0gXy5tYXgoXygkZWxlbWVudC5maW5kKFwiPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1jb2x1bW46bm90KC51aS1zb3J0YWJsZS1wbGFjZWhvbGRlcilcIikpLm1hcChmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKGUpLmhlaWdodCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8PSAxMjsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnBsYWNlaG9sZGVyLnJlbW92ZUNsYXNzKFwiY29sLXhzLVwiICsgaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5wbGFjZWhvbGRlci5hZGRDbGFzcyhcImNvbC14cy1cIiArIHJlY2VpdmVkQ29sdW1uLndpZHRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXhIZWlnaHQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIuaGVpZ2h0KG1heEhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIuY3NzKFwibWluLWhlaWdodFwiLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnBsYWNlaG9sZGVyLmhlaWdodCgwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5wbGFjZWhvbGRlci5jc3MoXCJtaW4taGVpZ2h0XCIsIFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNEcm9wVGFyZ2V0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDE1MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmU6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhdWkuc2VuZGVyICYmICEhdWkuc2VuZGVyWzBdLmlzVG9vbGJveCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVjZWl2ZWRFbGVtZW50ID0gdWkuaXRlbS5zb3J0YWJsZS5tb2RlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcmVjZWl2ZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09IFwiUm93XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb21taXRBZGRDb2x1bW4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBpZGVhbGx5IGNhbGwgTGF5b3V0RWRpdG9yLkNvbnRhaW5lci5hZGRDaGlsZCgpIGluc3RlYWQsIGJ1dCBzaW5jZSB0aGlzIGhhbmRsZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIHJ1biAqYmVmb3JlKiB0aGUgdWktc29ydGFibGUgZGlyZWN0aXZlJ3MgaGFuZGxlciwgaWYgd2UgdHJ5IHRvIGFkZCB0aGUgY2hpbGQgdG8gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSB0aGF0IGhhbmRsZXIgd2lsbCBnZXQgYW4gZXhjZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIGRvIHRoZSBzYW1lLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBvZiB0aGlzLCB3ZSBuZWVkIHRvIGludm9rZSBcInNldFBhcmVudFwiIHNvIHRoYXQgc3BlY2lmaWMgY29udGFpbmVyIHR5cGVzIGNhbiBwZXJmb3JtIGVsZW1lbnQgc3BlZmljaWMgaW5pdGlhbGl6YXRpb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZEVsZW1lbnQuc2V0RWRpdG9yKGVsZW1lbnQuZWRpdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5zZXRQYXJlbnQoZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcmVjZWl2ZWRFbGVtZW50Lmhhc0VkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kcm9vdC5lZGl0RWxlbWVudChyZWNlaXZlZEVsZW1lbnQpLmRvbmUoZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzLmNhbmNlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRFbGVtZW50LmRhdGEgPSBhcmdzLmVsZW1lbnQuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5hcHBseUVsZW1lbnRFZGl0b3JNb2RlbChhcmdzLmVsZW1lbnRFZGl0b3JNb2RlbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcmVjZWl2ZWRFbGVtZW50LnNldEh0bWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRFbGVtZW50LnNldEh0bWwoYXJncy5lbGVtZW50Lmh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWFyZ3MuY2FuY2VsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5kZWxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZEVsZW1lbnQuc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyRzY29wZS5pc1JlY2VpdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRJc0Ryb3BUYXJnZXQoZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyRzY29wZS5pc1JlY2VpdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRJc0Ryb3BUYXJnZXQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcmVjZWl2ZWRFbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5zZXRJc0ZvY3VzZWQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJHJvb3QuYWRkRWxlbWVudChyZWNlaXZlZEVsZW1lbnQpLmRvbmUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5jbGljayA9IGZ1bmN0aW9uIChjaGlsZCwgZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLmVkaXRvci5pc0RyYWdnaW5nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmdldENsYXNzZXMgPSBmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtcImxheW91dC1lbGVtZW50XCJdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhY2hpbGQuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWNvbnRhaW5lclwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5nZXRJc1NlYWxlZCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWNvbnRhaW5lci1zZWFsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LVwiICsgY2hpbGQudHlwZS50b0xvd2VyQ2FzZSgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWNoaWxkLmRyb3BUYXJnZXRDbGFzcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkLmRyb3BUYXJnZXRDbGFzcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoZXNlIHRvIGVpdGhlciB0aGUgQ29sdW1uIGRpcmVjdGl2ZSBvciB0aGUgQ29sdW1uIG1vZGVsIGNsYXNzLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PSBcIlJvd1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcInJvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGQuY2FuQWRkQ29sdW1uKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtcm93LWZ1bGxcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT0gXCJDb2x1bW5cIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJjb2wteHMtXCIgKyBjaGlsZC53aWR0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImNvbC14cy1vZmZzZXQtXCIgKyBjaGlsZC5vZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC50eXBlID09IFwiQ29udGVudFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtY29udGVudC1cIiArIGNoaWxkLmNvbnRlbnRUeXBlQ2xhc3MpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldElzQWN0aXZlKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LWFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldElzRm9jdXNlZCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC1mb2N1c2VkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0SXNTZWxlY3RlZCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC1zZWxlY3RlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldElzRHJvcFRhcmdldCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuaXNUZW1wbGF0ZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LXRlbXBsYXRlZFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0RWRpdG9yXCIsIFtcImVudmlyb25tZW50XCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKGVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXHJcbiAgICAgICAgICAgICAgICBzY29wZToge30sXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLCBcIiRhdHRyc1wiLCBcIiRjb21waWxlXCIsIFwiY2xpcGJvYXJkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQsICRhdHRycywgJGNvbXBpbGUsIGNsaXBib2FyZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISEkYXR0cnMubW9kZWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudCA9IGV2YWwoJGF0dHJzLm1vZGVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlICdtb2RlbCcgYXR0cmlidXRlIG11c3QgZXZhbHVhdGUgdG8gYSBMYXlvdXRFZGl0b3IuRWRpdG9yIG9iamVjdC5cIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuY2xpY2sgPSBmdW5jdGlvbiAoY2FudmFzLCBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbnZhcy5lZGl0b3IuaXNEcmFnZ2luZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMuc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmdldENsYXNzZXMgPSBmdW5jdGlvbiAoY2FudmFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gW1wibGF5b3V0LWVsZW1lbnRcIiwgXCJsYXlvdXQtY29udGFpbmVyXCIsIFwibGF5b3V0LWNhbnZhc1wiXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FudmFzLmdldElzQWN0aXZlKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC1hY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FudmFzLmdldElzRm9jdXNlZCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtZm9jdXNlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW52YXMuZ2V0SXNTZWxlY3RlZCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtc2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FudmFzLmdldElzRHJvcFRhcmdldCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW52YXMuaXNUZW1wbGF0ZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC10ZW1wbGF0ZWRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuIHVuZm9ydHVuYXRlIHNpZGUtZWZmZWN0IG9mIHRoZSBuZXh0IGhhY2sgb24gbGluZSA1NCBpcyB0aGF0IHRoZSBjcmVhdGVkIGVsZW1lbnRzIGFyZW4ndCBhZGRlZCB0byB0aGUgRE9NIHlldCwgc28gd2UgY2FuJ3QgdXNlIGl0IHRvIGdldCB0byB0aGUgcGFyZW50IFwiLmxheW91dC1kZXNpZ2VyXCIgZWxlbWVudC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV29yayBhcm91bmQ6IGFjY2VzcyB0aGF0IGVsZW1lbnQgZGlyZWN0bHkgKHdoaWNoIGVmZWN0aXZlbHkgdHVybnMgbXVsdGlwbGUgbGF5b3V0IGVkaXRvcnMgb24gYSBzaW5nbGUgcGFnZSBpbXBvc3NpYmxlKS4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIC8vdmFyIGxheW91dERlc2lnbmVySG9zdCA9ICRlbGVtZW50LmNsb3Nlc3QoXCIubGF5b3V0LWRlc2lnbmVyXCIpLmRhdGEoXCJsYXlvdXQtZGVzaWduZXItaG9zdFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxheW91dERlc2lnbmVySG9zdCA9ICQoXCIubGF5b3V0LWRlc2lnbmVyXCIpLmRhdGEoXCJsYXlvdXQtZGVzaWduZXItaG9zdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kcm9vdC5sYXlvdXREZXNpZ25lckhvc3QgPSBsYXlvdXREZXNpZ25lckhvc3Q7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXREZXNpZ25lckhvc3QuZWxlbWVudC5vbihcInJlcGxhY2VjYW52YXNcIiwgZnVuY3Rpb24gKGUsIGFyZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlZGl0b3IgPSAkc2NvcGUuZWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW52YXNEYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGFyZ3MuY2FudmFzLmRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbElkOiBhcmdzLmNhbnZhcy5odG1sSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbENsYXNzOiBhcmdzLmNhbnZhcy5odG1sQ2xhc3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbFN0eWxlOiBhcmdzLmNhbnZhcy5odG1sU3R5bGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUZW1wbGF0ZWQ6IGFyZ3MuY2FudmFzLmlzVGVtcGxhdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBhcmdzLmNhbnZhcy5jaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIQUNLOiBJbnN0ZWFkIG9mIHNpbXBseSB1cGRhdGluZyB0aGUgJHNjb3BlLmVsZW1lbnQgd2l0aCBhIG5ldyBpbnN0YW5jZSwgd2UgbmVlZCB0byByZXBsYWNlIHRoZSBlbnRpcmUgb3JjLWxheW91dC1lZGl0b3IgbWFya3VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBvcmRlciBmb3IgYW5ndWxhciB0byByZWJpbmQgc3RhcnRpbmcgd2l0aCB0aGUgQ2FudmFzIGVsZW1lbnQuIE90aGVyd2lzZSwgZm9yIHNvbWUgcmVhc29uLCBpdCB3aWxsIHJlYmluZCBzdGFydGluZyB3aXRoIHRoZSBmaXJzdCBjaGlsZCBvZiBDYW52YXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBZb3UgY2FuIHNlZSB0aGlzIGhhcHBlbmluZyB3aGVuIHNldHRpbmcgYSBicmVha3BvaW50IGluIFNjb3BlQ29uZmlndXJhdG9yIHdoZXJlIGNvbnRhaW5lcnMgYXJlIGluaXRpYWxpemVkIHdpdGggZHJhZyAmIGRyb3A6IG9uIHBhZ2UgbG9hZCwgdGhlIGZpcnN0IGVsZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGEgQ2FudmFzIChnb29kKSwgYnV0IGFmdGVyIGhhdmluZyBzZWxlY3RlZCBhbm90aGVyIHRlbXBsYXRlLCB0aGUgZmlyc3QgZWxlbWVudCBpcyAodHlwaWNhbGx5KSBhIEdyaWQgKGJhZCkuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW1wbHkgcmVjb21waWxpbmcgdGhlIG9yYy1sYXlvdXQtZWRpdG9yIGRpcmVjdGl2ZSB3aWxsIGNhdXNlIHRoZSBlbnRpcmUgdGhpbmcgdG8gYmUgZ2VuZXJhdGVkLCB3aGljaCB3b3JrcyBqdXN0IGZpbmUgYXMgd2VsbCAoZXZlbiB0aG91Z2ggbm90IGlzIG5pY2UgYXMgc2ltcGx5IGxldmVyYWdpbmcgbW9kZWwgYmluZGluZykuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXREZXNpZ25lckhvc3QuZWRpdG9yID0gd2luZG93LmxheW91dEVkaXRvciA9IG5ldyBMYXlvdXRFZGl0b3IuRWRpdG9yKGVkaXRvci5jb25maWcsIGNhbnZhc0RhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXBsYXRlID0gXCI8b3JjLWxheW91dC1lZGl0b3JcIiArIFwiIG1vZGVsPSd3aW5kb3cubGF5b3V0RWRpdG9yJyAvPlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSAkY29tcGlsZSh0ZW1wbGF0ZSkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIubGF5b3V0LWVkaXRvci1ob2xkZXJcIikuaHRtbChodG1sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJHJvb3QuZWRpdEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhvc3QgPSAkc2NvcGUuJHJvb3QubGF5b3V0RGVzaWduZXJIb3N0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhvc3QuZWRpdEVsZW1lbnQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJHJvb3QuYWRkRWxlbWVudCA9IGZ1bmN0aW9uIChjb250ZW50VHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhvc3QgPSAkc2NvcGUuJHJvb3QubGF5b3V0RGVzaWduZXJIb3N0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhvc3QuYWRkRWxlbWVudChjb250ZW50VHlwZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vbihcImN1dCBjb3B5IHBhc3RlXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHNldWRvIGNsaXBib2FyZCB3YXMgYWxyZWFkeSBpbnZva2VkICh3aGljaCBoYXBwZW5zIG9uIHRoZSBmaXJzdCBjbGlwYm9hcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wZXJhdGlvbiBhZnRlciBwYWdlIGxvYWQgZXZlbiBpZiBuYXRpdmUgY2xpcGJvYXJkIHN1cHBvcnQgZXhpc3RzKSB0aGVuIHNpdCB0aGlzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmUgb3BlcmF0aW9uIG91dCwgYnV0IG1ha2Ugc3VyZSB3aGF0ZXZlciBpcyBvbiB0aGUgcHNldWRvIGNsaXBib2FyZCBnZXRzIG1pZ3JhdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgbmF0aXZlIGNsaXBib2FyZCBmb3Igc3Vic2VxdWVudCBvcGVyYXRpb25zLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsaXBib2FyZC53YXNJbnZva2VkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKFwidGV4dC9wbGFpblwiLCBjbGlwYm9hcmQuZ2V0RGF0YShcInRleHQvcGxhaW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLnNldERhdGEoXCJ0ZXh0L2pzb25cIiwgY2xpcGJvYXJkLmdldERhdGEoXCJ0ZXh0L2pzb25cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb2N1c2VkRWxlbWVudCA9ICRzY29wZS5lbGVtZW50LmZvY3VzZWRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWZvY3VzZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY29weVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2VkRWxlbWVudC5jb3B5KGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImN1dFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2VkRWxlbWVudC5jdXQoZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicGFzdGVcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZEVsZW1lbnQucGFzdGUoZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmV2ZW50LnRyaWdnZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJsYXlvdXRlZGl0b3I6ZWRpdGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhBQ0s6IFdvcmthcm91bmQgYmVjYXVzZSBvZiBob3cgQW5ndWxhciB0cmVhdHMgdGhlIERPTSB3aGVuIGVsZW1lbnRzIGFyZSBzaGlmdGVkIGFyb3VuZCAtIGlucHV0IGZvY3VzIGlzIHNvbWV0aW1lcyBsb3N0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISEkc2NvcGUuZWxlbWVudC5mb2N1c2VkRWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuZm9jdXNlZEVsZW1lbnQuc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmF0aXZlIGNsaXBib2FyZCBzdXBwb3J0IG9idmlvdXNseSBleGlzdHMsIHNvIGRpc2FibGUgdGhlIHBldWRvIGNsaXBib2FyZCBmcm9tIG5vdyBvbi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBib2FyZC5kaXNhYmxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogZW52aXJvbm1lbnQudGVtcGxhdGVVcmwoXCJFZGl0b3JcIiksXHJcbiAgICAgICAgICAgICAgICByZXBsYWNlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbGluazogZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTm8gY2xpY2tzIHNob3VsZCBwcm9wYWdhdGUgZnJvbSB0aGUgVGlueU1DRSB0b29sYmFycy5cclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZpbmQoXCIubGF5b3V0LXRvb2xiYXItY29udGFpbmVyXCIpLmNsaWNrKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVW5mb2N1cyBhbmQgdW5zZWxlY3QgZXZlcnl0aGluZyBvbiBjbGljayBvdXRzaWRlIG9mIGNhbnZhcy5cclxuICAgICAgICAgICAgICAgICAgICAkKHdpbmRvdykuY2xpY2soZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuYWN0aXZlRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmZvY3VzZWRFbGVtZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dENhbnZhc1wiLCBbXCJzY29wZUNvbmZpZ3VyYXRvclwiLCBcImVudmlyb25tZW50XCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKHNjb3BlQ29uZmlndXJhdG9yLCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgZWxlbWVudDogXCI9XCIgfSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsIFwiJGF0dHJzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQsICRhdHRycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNvbmZpZ3VyYXRvci5jb25maWd1cmVGb3JFbGVtZW50KCRzY29wZSwgJGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNvbmZpZ3VyYXRvci5jb25maWd1cmVGb3JDb250YWluZXIoJHNjb3BlLCAkZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5zb3J0YWJsZU9wdGlvbnNbXCJheGlzXCJdID0gXCJ5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBlbnZpcm9ubWVudC50ZW1wbGF0ZVVybChcIkNhbnZhc1wiKSxcclxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0Q2hpbGRcIiwgW1wiJGNvbXBpbGVcIixcclxuICAgICAgICBmdW5jdGlvbiAoJGNvbXBpbGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHJlc3RyaWN0OiBcIkVcIixcclxuICAgICAgICAgICAgICAgIHNjb3BlOiB7IGVsZW1lbnQ6IFwiPVwiIH0sXHJcbiAgICAgICAgICAgICAgICBsaW5rOiBmdW5jdGlvbiAoc2NvcGUsIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSBcIjxvcmMtbGF5b3V0LVwiICsgc2NvcGUuZWxlbWVudC50eXBlLnRvTG93ZXJDYXNlKCkgKyBcIiBlbGVtZW50PSdlbGVtZW50JyAvPlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gJGNvbXBpbGUodGVtcGxhdGUpKHNjb3BlKTtcclxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLnJlcGxhY2VXaXRoKGh0bWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRDb2x1bW5cIiwgW1wiJGNvbXBpbGVcIiwgXCJzY29wZUNvbmZpZ3VyYXRvclwiLCBcImVudmlyb25tZW50XCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKCRjb21waWxlLCBzY29wZUNvbmZpZ3VyYXRvciwgZW52aXJvbm1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHJlc3RyaWN0OiBcIkVcIixcclxuICAgICAgICAgICAgICAgIHNjb3BlOiB7IGVsZW1lbnQ6IFwiPVwiIH0sXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckVsZW1lbnQoJHNjb3BlLCAkZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckNvbnRhaW5lcigkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNvcnRhYmxlT3B0aW9uc1tcImF4aXNcIl0gPSBcInlcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiQ29sdW1uXCIpLFxyXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uIChzY29wZSwgZWxlbWVudCwgYXR0cnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZpbmQoXCIubGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyXCIpLmRyYWdnYWJsZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF4aXM6IFwieFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXI6IFwiY2xvbmVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJ0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmVsZW1lbnQuZWRpdG9yLmlzUmVzaXppbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyYWc6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbkVsZW1lbnQgPSBlbGVtZW50LnBhcmVudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtblNpemUgPSBjb2x1bW5FbGVtZW50LndpZHRoKCkgLyBzY29wZS5lbGVtZW50LndpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbm5lY3RBZGphY2VudCA9ICFlLmN0cmxLZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChlLnRhcmdldCkuaGFzQ2xhc3MoXCJsYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXItbGVmdFwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IHVpLm9mZnNldC5sZWZ0IC0gY29sdW1uRWxlbWVudC5vZmZzZXQoKS5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSA8IC1jb2x1bW5TaXplICYmIHNjb3BlLmVsZW1lbnQuY2FuRXhwYW5kTGVmdChjb25uZWN0QWRqYWNlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmV4cGFuZExlZnQoY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlbHRhID4gY29sdW1uU2l6ZSAmJiBzY29wZS5lbGVtZW50LmNhbkNvbnRyYWN0TGVmdChjb25uZWN0QWRqYWNlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmNvbnRyYWN0TGVmdChjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgkKGUudGFyZ2V0KS5oYXNDbGFzcyhcImxheW91dC1jb2x1bW4tcmVzaXplLWJhci1yaWdodFwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IHVpLm9mZnNldC5sZWZ0IC0gY29sdW1uRWxlbWVudC53aWR0aCgpIC0gY29sdW1uRWxlbWVudC5vZmZzZXQoKS5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSA+IGNvbHVtblNpemUgJiYgc2NvcGUuZWxlbWVudC5jYW5FeHBhbmRSaWdodChjb25uZWN0QWRqYWNlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmV4cGFuZFJpZ2h0KGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWx0YSA8IC1jb2x1bW5TaXplICYmIHNjb3BlLmVsZW1lbnQuY2FuQ29udHJhY3RSaWdodChjb25uZWN0QWRqYWNlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmNvbnRyYWN0UmlnaHQoY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmVkaXRvci5pc1Jlc2l6aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRDb250ZW50XCIsIFtcIiRzY2VcIiwgXCJzY29wZUNvbmZpZ3VyYXRvclwiLCBcImVudmlyb25tZW50XCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKCRzY2UsIHNjb3BlQ29uZmlndXJhdG9yLCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgZWxlbWVudDogXCI9XCIgfSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yRWxlbWVudCgkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJ3cml0ZSB0aGUgc2V0SHRtbCBmdW5jdGlvbiBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlICRzY2Ugc2VydmljZSB0byB0cnVzdCB0aGUgaHRtbCAoYW5kIG5vdCBoYXZlIHRoZSBodG1sIGJpbmRpbmcgc3RyaXAgY2VydGFpbiB0YWdzKS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuc2V0SHRtbCA9IGZ1bmN0aW9uIChodG1sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5odG1sID0gaHRtbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50Lmh0bWxVbnNhZmUgPSAkc2NlLnRydXN0QXNIdG1sKGh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuc2V0SHRtbCgkc2NvcGUuZWxlbWVudC5odG1sKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiQ29udGVudFwiKSxcclxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0R3JpZFwiLCBbXCIkY29tcGlsZVwiLCBcInNjb3BlQ29uZmlndXJhdG9yXCIsIFwiZW52aXJvbm1lbnRcIixcclxuICAgICAgICBmdW5jdGlvbiAoJGNvbXBpbGUsIHNjb3BlQ29uZmlndXJhdG9yLCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgZWxlbWVudDogXCI9XCIgfSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yRWxlbWVudCgkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yQ29udGFpbmVyKCRzY29wZSwgJGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuc29ydGFibGVPcHRpb25zW1wiYXhpc1wiXSA9IFwieVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogZW52aXJvbm1lbnQudGVtcGxhdGVVcmwoXCJHcmlkXCIpLFxyXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRSb3dcIiwgW1wiJGNvbXBpbGVcIiwgXCJzY29wZUNvbmZpZ3VyYXRvclwiLCBcImVudmlyb25tZW50XCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKCRjb21waWxlLCBzY29wZUNvbmZpZ3VyYXRvciwgZW52aXJvbm1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHJlc3RyaWN0OiBcIkVcIixcclxuICAgICAgICAgICAgICAgIHNjb3BlOiB7IGVsZW1lbnQ6IFwiPVwiIH0sXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckVsZW1lbnQoJHNjb3BlLCAkZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckNvbnRhaW5lcigkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNvcnRhYmxlT3B0aW9uc1tcImF4aXNcIl0gPSBcInhcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNvcnRhYmxlT3B0aW9uc1tcInVpLWZsb2F0aW5nXCJdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiUm93XCIpLFxyXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRQb3B1cFwiLCBbXHJcbiAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiQVwiLFxyXG4gICAgICAgICAgICAgICAgbGluazogZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50LCBhdHRycykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3B1cCA9ICQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyaWdnZXIgPSBwb3B1cC5jbG9zZXN0KFwiLmxheW91dC1wb3B1cC10cmlnZ2VyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gcG9wdXAuY2xvc2VzdChcIi5sYXlvdXQtZWxlbWVudFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLmNsaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXAudG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3B1cC5pcyhcIjp2aXNpYmxlXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1cC5wb3NpdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXk6IGF0dHJzLm9yY0xheW91dFBvcHVwTXkgfHwgXCJsZWZ0IHRvcFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0OiBhdHRycy5vcmNMYXlvdXRQb3B1cEF0IHx8IFwibGVmdCBib3R0b20rNHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Y6IHRyaWdnZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXAuZmluZChcImlucHV0XCIpLmZpcnN0KCkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHBvcHVwLmNsaWNrKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5jbGljayhmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3B1cC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wdXAua2V5ZG93bihmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSAyNykgLy8gRXNjXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1cC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wdXAub24oXCJjdXQgY29weSBwYXN0ZVwiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBbGxvdyBjbGlwYm9hcmQgb3BlcmF0aW9ucyBpbiBwb3B1cCB3aXRob3V0IGludm9raW5nIGNsaXBib2FyZCBldmVudCBoYW5kbGVycyBvbiBwYXJlbnQgZWxlbWVudC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0VG9vbGJveFwiLCBbXCIkY29tcGlsZVwiLCBcImVudmlyb25tZW50XCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKCRjb21waWxlLCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIixcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnJlc2V0RWxlbWVudHMgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmdyaWRFbGVtZW50cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuR3JpZC5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjAwYVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiR3JpZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiRW1wdHkgZ3JpZC5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnJvd0VsZW1lbnRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5Sb3cuZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIlJvdyAoMSBjb2x1bW4pXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJSb3cgd2l0aCAxIGNvbHVtbi5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IExheW91dEVkaXRvci5Db2x1bW4udGltZXMoMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuUm93LmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMGM5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKDIgY29sdW1ucylcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIlJvdyB3aXRoIDIgY29sdW1ucy5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IExheW91dEVkaXRvci5Db2x1bW4udGltZXMoMilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuUm93LmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMGM5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKDMgY29sdW1ucylcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIlJvdyB3aXRoIDMgY29sdW1ucy5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IExheW91dEVkaXRvci5Db2x1bW4udGltZXMoMylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuUm93LmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMGM5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKDQgY29sdW1ucylcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIlJvdyB3aXRoIDQgY29sdW1ucy5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IExheW91dEVkaXRvci5Db2x1bW4udGltZXMoNClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuUm93LmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMGM5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKDYgY29sdW1ucylcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIlJvdyB3aXRoIDYgY29sdW1ucy5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IExheW91dEVkaXRvci5Db2x1bW4udGltZXMoNilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuUm93LmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMGM5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKDEyIGNvbHVtbnMpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJSb3cgd2l0aCAxMiBjb2x1bW5zLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcygxMilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjBjOVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiUm93IChlbXB0eSlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIkVtcHR5IHJvdy5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmNvbHVtbkVsZW1lbnRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5Db2x1bW4uZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwZGJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIkNvbHVtblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiRW1wdHkgY29sdW1uLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuY2FudmFzRWxlbWVudHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLkNhbnZhcy5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjA0NFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiQ2FudmFzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJFbXB0eSBjYW52YXMuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5jb250ZW50RWxlbWVudENhdGVnb3JpZXMgPSBfKCRzY29wZS5lbGVtZW50LmNvbmZpZy5jYXRlZ29yaWVzKS5tYXAoZnVuY3Rpb24gKGNhdGVnb3J5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY2F0ZWdvcnkubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHM6IF8oY2F0ZWdvcnkuY29udGVudFR5cGVzKS5tYXAoZnVuY3Rpb24gKGNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGNvbnRlbnRUeXBlLnR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmFjdG9yeSA9IExheW91dEVkaXRvci5mYWN0b3JpZXNbdHlwZV0gfHwgTGF5b3V0RWRpdG9yLmZhY3Rvcmllc1tcIkNvbnRlbnRcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RlbXBsYXRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGU6IGNvbnRlbnRUeXBlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlTGFiZWw6IGNvbnRlbnRUeXBlLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlQ2xhc3M6IGNvbnRlbnRUeXBlLnR5cGVDbGFzcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0VkaXRvcjogY29udGVudFR5cGUuaGFzRWRpdG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IGNvbnRlbnRUeXBlLmh0bWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGZhY3RvcnkoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnRvb2xib3hJY29uID0gY29udGVudFR5cGUuaWNvbiB8fCBcIlxcdWYxYzlcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudG9vbGJveExhYmVsID0gY29udGVudFR5cGUubGFiZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnRvb2xib3hEZXNjcmlwdGlvbiA9IGNvbnRlbnRUeXBlLmRlc2NyaXB0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5yZXNldEVsZW1lbnRzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZ2V0U29ydGFibGVPcHRpb25zID0gZnVuY3Rpb24gKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlZGl0b3JJZCA9ICRlbGVtZW50LmNsb3Nlc3QoXCIubGF5b3V0LWVkaXRvclwiKS5hdHRyKFwiaWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50Q2xhc3NlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbGFjZWhvbGRlckNsYXNzZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxvYXRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiR3JpZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDbGFzc2VzID0gW1wiLmxheW91dC1jYW52YXNcIiwgXCIubGF5b3V0LWNvbHVtblwiLCBcIi5sYXlvdXQtY29tbW9uLWhvbGRlclwiXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJDbGFzc2VzID0gXCJsYXlvdXQtZWxlbWVudCBsYXlvdXQtY29udGFpbmVyIGxheW91dC1ncmlkIHVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJSb3dcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3NlcyA9IFtcIi5sYXlvdXQtZ3JpZFwiXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJDbGFzc2VzID0gXCJsYXlvdXQtZWxlbWVudCBsYXlvdXQtY29udGFpbmVyIGxheW91dC1yb3cgcm93IHVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJDb2x1bW5cIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3NlcyA9IFtcIi5sYXlvdXQtcm93Om5vdCgubGF5b3V0LXJvdy1mdWxsKVwiXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJDbGFzc2VzID0gXCJsYXlvdXQtZWxlbWVudCBsYXlvdXQtY29udGFpbmVyIGxheW91dC1jb2x1bW4gdWktc29ydGFibGUtcGxhY2Vob2xkZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRpbmcgPSB0cnVlOyAvLyBUbyBlbnN1cmUgYSBzbW9vdGggaG9yaXpvbnRhbC1saXN0IHJlb3JkZXJpbmcuIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyLXVpL3VpLXNvcnRhYmxlI2Zsb2F0aW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJDb250ZW50XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENsYXNzZXMgPSBbXCIubGF5b3V0LWNhbnZhc1wiLCBcIi5sYXlvdXQtY29sdW1uXCIsIFwiLmxheW91dC1jb21tb24taG9sZGVyXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckNsYXNzZXMgPSBcImxheW91dC1lbGVtZW50IGxheW91dC1jb250ZW50IHVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJDYW52YXNcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3NlcyA9IFtcIi5sYXlvdXQtY2FudmFzXCIsIFwiLmxheW91dC1jb2x1bW5cIiwgXCIubGF5b3V0LWNvbW1vbi1ob2xkZXJcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyQ2xhc3NlcyA9IFwibGF5b3V0LWVsZW1lbnQgbGF5b3V0LWNvbnRhaW5lciBsYXlvdXQtZ3JpZCB1aS1zb3J0YWJsZS1wbGFjZWhvbGRlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJtb3ZlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdFdpdGg6IF8ocGFyZW50Q2xhc3NlcykubWFwKGZ1bmN0aW9uIChlKSB7IHJldHVybiBcIiNcIiArIGVkaXRvcklkICsgXCIgXCIgKyBlICsgXCI6bm90KC5sYXlvdXQtY29udGFpbmVyLXNlYWxlZCkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW5cIjsgfSkuam9pbihcIiwgXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlckNsYXNzZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ1aS1mbG9hdGluZ1wiOiBmbG9hdGluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC5pc1Rvb2xib3ggPSB0cnVlOyAvLyBXaWxsIGluZGljYXRlIHRvIGNvbm5lY3RlZCBzb3J0YWJsZXMgdGhhdCBkcm9wcGVkIGl0ZW1zIHdlcmUgc2VudCBmcm9tIHRvb2xib3guXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnJlc2V0RWxlbWVudHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyOiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5jYW52YXMuc2V0SXNEcm9wVGFyZ2V0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXlvdXRJc0NvbGxhcHNlZENvb2tpZU5hbWUgPSBcImxheW91dFRvb2xib3hDYXRlZ29yeV9MYXlvdXRfSXNDb2xsYXBzZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxheW91dElzQ29sbGFwc2VkID0gJC5jb29raWUobGF5b3V0SXNDb2xsYXBzZWRDb29raWVOYW1lKSA9PT0gXCJ0cnVlXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUudG9nZ2xlTGF5b3V0SXNDb2xsYXBzZWQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxheW91dElzQ29sbGFwc2VkID0gISRzY29wZS5sYXlvdXRJc0NvbGxhcHNlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuY29va2llKGxheW91dElzQ29sbGFwc2VkQ29va2llTmFtZSwgJHNjb3BlLmxheW91dElzQ29sbGFwc2VkLCB7IGV4cGlyZXM6IDM2NSB9KTsgLy8gUmVtZW1iZXIgY29sbGFwc2VkIHN0YXRlIGZvciBhIHllYXIuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogZW52aXJvbm1lbnQudGVtcGxhdGVVcmwoXCJUb29sYm94XCIpLFxyXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uIChzY29wZSwgZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0b29sYm94ID0gZWxlbWVudC5maW5kKFwiLmxheW91dC10b29sYm94XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICQod2luZG93KS5vbihcInJlc2l6ZSBzY3JvbGxcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGVsZW1lbnQucGFyZW50KCkuZmluZChcIi5sYXlvdXQtY2FudmFzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2FudmFzIGlzIHRhbGxlciB0aGFuIHRoZSB0b29sYm94LCBtYWtlIHRoZSB0b29sYm94IHN0aWNreS1wb3NpdGlvbmVkIHdpdGhpbiB0aGUgZWRpdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGhlbHAgdGhlIHVzZXIgYXZvaWQgZXhjZXNzaXZlIHZlcnRpY2FsIHNjcm9sbGluZy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhc0lzVGFsbGVyID0gISFjYW52YXMgJiYgY2FudmFzLmhlaWdodCgpID4gdG9vbGJveC5oZWlnaHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpbmRvd1BvcyA9ICQod2luZG93KS5zY3JvbGxUb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhc0lzVGFsbGVyICYmIHdpbmRvd1BvcyA+IGVsZW1lbnQub2Zmc2V0KCkudG9wICsgZWxlbWVudC5oZWlnaHQoKSAtIHRvb2xib3guaGVpZ2h0KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3guYWRkQ2xhc3MoXCJzdGlja3ktYm90dG9tXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveC5yZW1vdmVDbGFzcyhcInN0aWNreS10b3BcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FudmFzSXNUYWxsZXIgJiYgd2luZG93UG9zID4gZWxlbWVudC5vZmZzZXQoKS50b3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3guYWRkQ2xhc3MoXCJzdGlja3ktdG9wXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveC5yZW1vdmVDbGFzcyhcInN0aWNreS1ib3R0b21cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94LnJlbW92ZUNsYXNzKFwic3RpY2t5LXRvcFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3gucmVtb3ZlQ2xhc3MoXCJzdGlja3ktYm90dG9tXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dFRvb2xib3hHcm91cFwiLCBbXCIkY29tcGlsZVwiLCBcImVudmlyb25tZW50XCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKCRjb21waWxlLCBlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHsgY2F0ZWdvcnk6IFwiPVwiIH0sXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0NvbGxhcHNlZENvb2tpZU5hbWUgPSBcImxheW91dFRvb2xib3hDYXRlZ29yeV9cIiArICRzY29wZS5jYXRlZ29yeS5uYW1lICsgXCJfSXNDb2xsYXBzZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmlzQ29sbGFwc2VkID0gJC5jb29raWUoaXNDb2xsYXBzZWRDb29raWVOYW1lKSA9PT0gXCJ0cnVlXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS50b2dnbGVJc0NvbGxhcHNlZCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuaXNDb2xsYXBzZWQgPSAhJHNjb3BlLmlzQ29sbGFwc2VkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5jb29raWUoaXNDb2xsYXBzZWRDb29raWVOYW1lLCAkc2NvcGUuaXNDb2xsYXBzZWQsIHsgZXhwaXJlczogMzY1IH0pOyAvLyBSZW1lbWJlciBjb2xsYXBzZWQgc3RhdGUgZm9yIGEgeWVhci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBlbnZpcm9ubWVudC50ZW1wbGF0ZVVybChcIlRvb2xib3hHcm91cFwiKSxcclxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiXX0= +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9yY2hhcmQuV2ViL01vZHVsZXMvT3JjaGFyZC5MYXlvdXRzL0Fzc2V0cy9KYXZhU2NyaXB0L0xheW91dEVkaXRvci9Nb2R1bGUuanMiLCJPcmNoYXJkLldlYi9Nb2R1bGVzL09yY2hhcmQuTGF5b3V0cy9Bc3NldHMvSmF2YVNjcmlwdC9MYXlvdXRFZGl0b3IvU2VydmljZXMvQ2xpcGJvYXJkLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTGF5b3V0RWRpdG9yL1NlcnZpY2VzL1Njb3BlQ29uZmlndXJhdG9yLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTGF5b3V0RWRpdG9yL0RpcmVjdGl2ZXMvRWRpdG9yLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTGF5b3V0RWRpdG9yL0RpcmVjdGl2ZXMvQ2FudmFzLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTGF5b3V0RWRpdG9yL0RpcmVjdGl2ZXMvQ2hpbGQuanMiLCJPcmNoYXJkLldlYi9Nb2R1bGVzL09yY2hhcmQuTGF5b3V0cy9Bc3NldHMvSmF2YVNjcmlwdC9MYXlvdXRFZGl0b3IvRGlyZWN0aXZlcy9Db2x1bW4uanMiLCJPcmNoYXJkLldlYi9Nb2R1bGVzL09yY2hhcmQuTGF5b3V0cy9Bc3NldHMvSmF2YVNjcmlwdC9MYXlvdXRFZGl0b3IvRGlyZWN0aXZlcy9Db250ZW50LmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTGF5b3V0RWRpdG9yL0RpcmVjdGl2ZXMvR3JpZC5qcyIsIk9yY2hhcmQuV2ViL01vZHVsZXMvT3JjaGFyZC5MYXlvdXRzL0Fzc2V0cy9KYXZhU2NyaXB0L0xheW91dEVkaXRvci9EaXJlY3RpdmVzL1Jvdy5qcyIsIk9yY2hhcmQuV2ViL01vZHVsZXMvT3JjaGFyZC5MYXlvdXRzL0Fzc2V0cy9KYXZhU2NyaXB0L0xheW91dEVkaXRvci9EaXJlY3RpdmVzL1BvcHVwLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTGF5b3V0RWRpdG9yL0RpcmVjdGl2ZXMvVG9vbGJveC5qcyIsIk9yY2hhcmQuV2ViL01vZHVsZXMvT3JjaGFyZC5MYXlvdXRzL0Fzc2V0cy9KYXZhU2NyaXB0L0xheW91dEVkaXRvci9EaXJlY3RpdmVzL1Rvb2xib3hHcm91cC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0FDQTVFLElBQUksWUFBWSxDQUFDO0FBQ2pCLENBQUMsVUFBUyxZQUFZO0lBRWxCLElBQUksU0FBUyxHQUFHO1FBQ1osSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXpCLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBUyxXQUFXLEVBQUUsSUFBSTtZQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUN4QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsV0FBVztZQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ1gsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzVCLENBQUMsQ0FBQTtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUc7WUFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM1QixDQUFDLENBQUE7SUFDTCxDQUFDLENBQUE7SUFFRCxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7SUFFekMsT0FBTztTQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUM7U0FDdEIsT0FBTyxDQUFDLFdBQVcsRUFBRTtRQUNsQjtZQUNJLE1BQU0sQ0FBQztnQkFDSCxPQUFPLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPO2dCQUN2QyxPQUFPLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPO2dCQUN2QyxPQUFPLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPO2dCQUN2QyxVQUFVLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFVO2dCQUM3QyxVQUFVLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFVO2FBQ2hELENBQUM7UUFDTixDQUFDO0tBQ0osQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUM3Q3hDLE9BQU87S0FDRixNQUFNLENBQUMsY0FBYyxDQUFDO0tBQ3RCLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFVBQVUsRUFBRSxXQUFXO0lBQ2xELFVBQVUsUUFBUSxFQUFFLFNBQVM7UUFDekIsTUFBTSxDQUFDO1lBRUgsbUJBQW1CLEVBQUUsVUFBVSxNQUFNLEVBQUUsUUFBUTtnQkFFM0MsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO29CQUM1QyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2dCQUVILFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO29CQUNqQyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3BCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztvQkFDdkIsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztvQkFFN0IsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7d0JBQzFCLE1BQU0sQ0FBQztvQkFFWCxvRkFBb0Y7b0JBQ3BGLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDMUIsSUFBSSxjQUFjLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7d0JBQ25ELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDOzRCQUNuQixpRkFBaUY7NEJBQ2pGLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dDQUNaLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29DQUNsQixLQUFLLEVBQUU7d0NBQ0gsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzt3Q0FDL0IsS0FBSyxDQUFDO29DQUNWLEtBQUssRUFBRTt3Q0FDSCxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dDQUM5QixLQUFLLENBQUM7b0NBQ1YsS0FBSyxFQUFFO3dDQUNILGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7d0NBQ2hDLEtBQUssQ0FBQztnQ0FDVixDQUFDOzRCQUNMLENBQUM7d0JBQ0wsQ0FBQztvQkFDTCxDQUFDO29CQUVELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsTUFBTSxDQUFDLFFBQU0sQ0FBQSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUN2QixPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUNuQixDQUFDO29CQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNwRixRQUFRLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2pFLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ25CLENBQUM7b0JBRUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO3dCQUN0QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQzFELFFBQVEsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs0QkFDM0QsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDbkIsQ0FBQztvQkFDTCxDQUFDO29CQUVELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDekQsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dDQUM1QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDOzRCQUN2QyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUNuQixDQUFDO3dCQUVELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQzs0QkFDM0IsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDOzRCQUNqQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBQ2hCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7b0NBQ1QsT0FBTyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQ0FDeEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztvQ0FDWCxPQUFPLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dDQUMzQyxPQUFPLEdBQUcsSUFBSSxDQUFDOzRCQUNuQixDQUFDOzRCQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBQ3ZCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7b0NBQ1QsT0FBTyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQ0FDMUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztvQ0FDWCxPQUFPLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dDQUN6QyxPQUFPLEdBQUcsSUFBSSxDQUFDOzRCQUNuQixDQUFDO3dCQUNMLENBQUM7b0JBQ0wsQ0FBQztvQkFFRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ25CLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUM1QixPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDOzRCQUM5QixPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUNuQixDQUFDO3dCQUVELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7NEJBQy9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQ0FDMUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQ0FDM0MsT0FBTyxHQUFHLElBQUksQ0FBQzs0QkFDbkIsQ0FBQzs0QkFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUMvRCxPQUFPLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dDQUMzQyxPQUFPLEdBQUcsSUFBSSxDQUFDOzRCQUNuQixDQUFDOzRCQUNELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUM5RCxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7Z0NBQ2pCLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0NBQ2xCLE9BQU8sR0FBRyxJQUFJLENBQUM7NEJBQ25CLENBQUM7NEJBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBQzlELE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQ0FDbkIsT0FBTyxHQUFHLElBQUksQ0FBQzs0QkFDbkIsQ0FBQzt3QkFDTCxDQUFDO3dCQUNELElBQUksQ0FBQyxDQUFDOzRCQUNGLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQ0FDMUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQ0FDM0MsT0FBTyxHQUFHLElBQUksQ0FBQzs0QkFDbkIsQ0FBQzs0QkFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUMvRCxPQUFPLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dDQUMzQyxPQUFPLEdBQUcsSUFBSSxDQUFDOzRCQUNuQixDQUFDOzRCQUNELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dDQUM5RCxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7Z0NBQ2pCLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0NBQ2xCLE9BQU8sR0FBRyxJQUFJLENBQUM7NEJBQ25CLENBQUM7NEJBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBQzlELE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQ0FDbkIsT0FBTyxHQUFHLElBQUksQ0FBQzs0QkFDbkIsQ0FBQzt3QkFDTCxDQUFDO29CQUNMLENBQUM7b0JBRUQsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzt3QkFDVixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLENBQUM7b0JBRUQsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUVwQixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxnRkFBZ0Y7b0JBRWpHLDJIQUEySDtvQkFDM0gsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzt3QkFDYixNQUFNLENBQUMsVUFBVSxDQUFDOzRCQUNkLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0NBQ1YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7NEJBQ2pELENBQUMsQ0FBQyxDQUFDO3dCQUNQLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDWixDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUVILE1BQU0sQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDO29CQUMxQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxDQUFDO2dCQUVILE1BQU0sQ0FBQyxRQUFNLENBQUEsR0FBRyxVQUFVLE9BQU87b0JBQzdCLE9BQU8sQ0FBQyxRQUFNLENBQUEsRUFBRSxDQUFDO29CQUNqQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQzt3QkFDWixJQUFJLEVBQUUscUJBQXFCO3FCQUM5QixDQUFDLENBQUM7Z0JBQ1AsQ0FBQyxDQUFBO2dCQUVELEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDM0IsTUFBTSxDQUFDLElBQUksR0FBRzt3QkFDVixNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSTs0QkFDeEQsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQ0FDVixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO29DQUNaLE1BQU0sQ0FBQztnQ0FFWCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQ0FDeEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQ0FFaEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO29DQUN6QixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNsRCxDQUFDLENBQUMsQ0FBQzt3QkFDUCxDQUFDLENBQUMsQ0FBQztvQkFDUCxDQUFDLENBQUM7Z0JBQ04sQ0FBQztZQUNMLENBQUM7WUFFRCxxQkFBcUIsRUFBRSxVQUFVLE1BQU0sRUFBRSxRQUFRO2dCQUM3QyxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUU3QixvR0FBb0c7Z0JBQ3BHLE1BQU0sQ0FBQywwQkFBMEIsR0FBRztvQkFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNyRixDQUFDLENBQUM7Z0JBRUYsTUFBTSxDQUFDLGVBQWUsR0FBRztvQkFDckIsTUFBTSxFQUFFLE1BQU07b0JBQ2QsS0FBSyxFQUFFLEdBQUc7b0JBQ1YsUUFBUSxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUU7b0JBQy9CLFFBQVEsRUFBRSxDQUFDO29CQUNYLDJJQUEySTtvQkFDM0ksS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7d0JBQ2xCLE1BQU0sQ0FBQyxNQUFNLENBQUM7NEJBQ1YsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3dCQUNyQyxDQUFDLENBQUMsQ0FBQzt3QkFDSCxzRUFBc0U7d0JBQ3RFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQzVDLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDeEMsQ0FBQztvQkFDRCxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRTt3QkFDakIsTUFBTSxDQUFDLE1BQU0sQ0FBQzs0QkFDVixPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7NEJBQ2xDLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ25DLENBQUMsQ0FBQyxDQUFDO29CQUNQLENBQUM7b0JBQ0QsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7d0JBQ2pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7NEJBQzFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztnQ0FDbkMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0NBQ2hELEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDOzRCQUMxQyxDQUFDOzRCQUNELFFBQVEsQ0FBQztnQ0FDTCxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7b0NBQ3hCLGlHQUFpRztvQ0FDakcsSUFBSSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO29DQUMxRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLElBQUksa0JBQWtCLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQzt3Q0FDekQsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQ0FDL0MsQ0FBQztnQ0FDRCxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUNuQyxDQUFDLENBQUMsQ0FBQzs0QkFDSCxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQztnQ0FDdEMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO29DQUN4QixJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7b0NBQzVDLElBQUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUN6RSxjQUFjLENBQUMsS0FBSyxHQUFHLG1CQUFtQixDQUFDO29DQUMzQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztvQ0FDMUIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO29DQUM1Qyw0R0FBNEc7b0NBQzVHLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUVBQW1FLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7d0NBQ3ZILE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7b0NBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUM7b0NBQ0osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRTt3Q0FDcEIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO29DQUM5QyxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO29DQUMxRCxFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3Q0FDaEIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7d0NBQ2pDLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztvQ0FDeEMsQ0FBQztvQ0FDRCxJQUFJLENBQUMsQ0FBQzt3Q0FDRixFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzt3Q0FDekIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29DQUN6QyxDQUFDO2dDQUNMLENBQUM7Z0NBQ0QsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDbEMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUNaLENBQUM7b0JBQ0wsQ0FBQztvQkFDRCxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRTt3QkFDcEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzs0QkFDMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQ0FDVixJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0NBQzdDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO29DQUNwQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQzt3Q0FDdEIsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO29DQUM5Qix3RkFBd0Y7b0NBQ3hGLHlGQUF5RjtvQ0FDekYsdUVBQXVFO29DQUN2RSwrSEFBK0g7b0NBQy9ILGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29DQUMxQyxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29DQUVuQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0NBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUk7NENBQ3pELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0RBQ2YsZUFBZSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnREFDekMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dEQUVqRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQztvREFDMUIsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDOzRDQUNuRCxDQUFDOzRDQUNELFFBQVEsQ0FBQztnREFDTCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztvREFDZCxlQUFlLENBQUMsUUFBTSxDQUFBLEVBQUUsQ0FBQztnREFDN0IsSUFBSTtvREFDQSxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7Z0RBQ25DLDZCQUE2QjtnREFDN0IsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQzs0Q0FFbkMsQ0FBQyxDQUFDLENBQUM7NENBQ0gsTUFBTSxDQUFDO3dDQUNYLENBQUMsQ0FBQyxDQUFDO29DQUNQLENBQUM7Z0NBQ0wsQ0FBQztnQ0FDRCxRQUFRLENBQUM7b0NBQ0wsNkJBQTZCO29DQUM3QixPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO29DQUMvQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO3dDQUNsQixlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7b0NBRW5DLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQzt3Q0FDMUMsTUFBTSxDQUFDO29DQUNYLENBQUMsQ0FBQyxDQUFDO2dDQUNQLENBQUMsQ0FBQyxDQUFDOzRCQUNQLENBQUMsQ0FBQyxDQUFDO3dCQUNQLENBQUM7b0JBQ0wsQ0FBQztpQkFDSixDQUFDO2dCQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUcsVUFBVSxLQUFLLEVBQUUsQ0FBQztvQkFDN0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQzt3QkFDekIsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUN6QixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQztnQkFFRixNQUFNLENBQUMsVUFBVSxHQUFHLFVBQVUsS0FBSztvQkFDL0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUVoQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQzt3QkFDaEMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDOzRCQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7b0JBQy9DLENBQUM7b0JBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO29CQUVsRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQzt3QkFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBRXZDLDZFQUE2RTtvQkFDN0UsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNuQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQzs0QkFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO29CQUN2QyxDQUFDO29CQUNELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDakQsQ0FBQztvQkFDRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQzt3QkFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFFNUQsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7b0JBQ3pDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO29CQUMxQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7d0JBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztvQkFDM0MsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7b0JBQzdDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7d0JBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztvQkFFNUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDbEIsQ0FBQyxDQUFDO1lBQ04sQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FDelZQLE9BQU87S0FDRixNQUFNLENBQUMsY0FBYyxDQUFDO0tBQ3RCLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLGFBQWE7SUFDeEMsVUFBVSxXQUFXO1FBQ2pCLE1BQU0sQ0FBQztZQUNILFFBQVEsRUFBRSxHQUFHO1lBQ2IsS0FBSyxFQUFFLEVBQUU7WUFDVCxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVztnQkFDaEUsVUFBVSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUztvQkFDbkQsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7d0JBQ2YsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN4QyxJQUFJO3dCQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsc0VBQXNFLENBQUMsQ0FBQztvQkFFNUYsTUFBTSxDQUFDLEtBQUssR0FBRyxVQUFVLE1BQU0sRUFBRSxDQUFDO3dCQUM5QixFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDOzRCQUMxQixNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQzFCLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDeEIsQ0FBQyxDQUFDO29CQUVGLE1BQU0sQ0FBQyxVQUFVLEdBQUcsVUFBVSxNQUFNO3dCQUNoQyxJQUFJLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxDQUFDO3dCQUVyRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7NEJBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQzt3QkFDekMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDOzRCQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7d0JBQzFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQzs0QkFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO3dCQUMzQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7NEJBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQzt3QkFDN0MsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQzs0QkFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO3dCQUU1QyxNQUFNLENBQUMsTUFBTSxDQUFDO29CQUNsQixDQUFDLENBQUM7b0JBRUYsc0xBQXNMO29CQUN0TCwySEFBMkg7b0JBQzNILGdHQUFnRztvQkFDaEcsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztvQkFFNUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztvQkFFckQsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSTt3QkFDNUQsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQzt3QkFDNUIsSUFBSSxVQUFVLEdBQUc7NEJBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTs0QkFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTs0QkFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUzs0QkFDaEMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUzs0QkFDaEMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVzs0QkFDcEMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTt5QkFDakMsQ0FBQzt3QkFFRixrSUFBa0k7d0JBQ2xJLHVKQUF1Sjt3QkFDdkosK0pBQStKO3dCQUMvSixpSEFBaUg7d0JBQ2pILDhMQUE4TDt3QkFDOUwsa0JBQWtCLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7d0JBQ3JHLElBQUksUUFBUSxHQUFHLG9CQUFvQixHQUFHLGlDQUFpQyxDQUFDO3dCQUN4RSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ3RDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDMUMsQ0FBQyxDQUFDLENBQUM7b0JBRUgsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsVUFBVSxPQUFPO3dCQUN4QyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDO3dCQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDckMsQ0FBQyxDQUFDO29CQUVGLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFVBQVUsV0FBVzt3QkFDM0MsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQzt3QkFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3hDLENBQUMsQ0FBQztvQkFFRixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLFVBQVUsQ0FBQzt3QkFDeEMsb0ZBQW9GO3dCQUNwRixtRkFBbUY7d0JBQ25GLHFGQUFxRjt3QkFDckYscURBQXFEO3dCQUNyRCxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUN6QixDQUFDLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzs0QkFDckYsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7NEJBQ25GLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdkIsQ0FBQzt3QkFDRCxJQUFJLENBQUMsQ0FBQzs0QkFDRixJQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQzs0QkFDbkQsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0NBQ25CLE1BQU0sQ0FBQyxNQUFNLENBQUM7b0NBQ1YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0NBQ2IsS0FBSyxNQUFNOzRDQUNQLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQzs0Q0FDbkQsS0FBSyxDQUFDO3dDQUNWLEtBQUssS0FBSzs0Q0FDTixjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7NENBQ2xELEtBQUssQ0FBQzt3Q0FDVixLQUFLLE9BQU87NENBQ1IsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDOzRDQUNwRCxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztnREFDWixJQUFJLEVBQUUscUJBQXFCOzZDQUM5QixDQUFDLENBQUM7NENBQ0gsS0FBSyxDQUFDO29DQUNkLENBQUM7Z0NBQ0wsQ0FBQyxDQUFDLENBQUM7Z0NBRUgsMkhBQTJIO2dDQUMzSCxNQUFNLENBQUMsVUFBVSxDQUFDO29DQUNkLE1BQU0sQ0FBQyxNQUFNLENBQUM7d0NBQ1YsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDOzRDQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQ0FDckQsQ0FBQyxDQUFDLENBQUM7Z0NBQ1AsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dDQUVSLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQzs0QkFDdkIsQ0FBQzt3QkFDTCxDQUFDO3dCQUVELHlGQUF5Rjt3QkFDekYsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUN4QixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO2FBQ0o7WUFDRCxXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFDOUMsT0FBTyxFQUFFLElBQUk7WUFDYixJQUFJLEVBQUUsVUFBVSxLQUFLLEVBQUUsT0FBTztnQkFDMUIsd0RBQXdEO2dCQUN4RCxPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztvQkFDdkQsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixDQUFDLENBQUMsQ0FBQztnQkFDSCw4REFBOEQ7Z0JBQzlELENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO29CQUN2QixLQUFLLENBQUMsTUFBTSxDQUFDO3dCQUNULEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzt3QkFDbkMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO29CQUN4QyxDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQzVJUCxPQUFPO0tBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQztLQUN0QixTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxhQUFhO0lBQzdELFVBQVUsaUJBQWlCLEVBQUUsV0FBVztRQUNwQyxNQUFNLENBQUM7WUFDSCxRQUFRLEVBQUUsR0FBRztZQUNiLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDdkIsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRO2dCQUN2QyxVQUFVLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTTtvQkFDOUIsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUN4RCxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQzFELE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUN6QyxDQUFDO2FBQ0o7WUFDRCxXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFDOUMsT0FBTyxFQUFFLElBQUk7U0FDaEIsQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUNsQlAsT0FBTztLQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUM7S0FDdEIsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUMsVUFBVTtJQUNwQyxVQUFVLFFBQVE7UUFDZCxNQUFNLENBQUM7WUFDSCxRQUFRLEVBQUUsR0FBRztZQUNiLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDdkIsSUFBSSxFQUFFLFVBQVUsS0FBSyxFQUFFLE9BQU87Z0JBQzFCLElBQUksUUFBUSxHQUFHLGNBQWMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyx1QkFBdUIsQ0FBQztnQkFDM0YsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQ2RQLE9BQU87S0FDRixNQUFNLENBQUMsY0FBYyxDQUFDO0tBQ3RCLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxhQUFhO0lBQ3pFLFVBQVUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLFdBQVc7UUFDOUMsTUFBTSxDQUFDO1lBQ0gsUUFBUSxFQUFFLEdBQUc7WUFDYixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ3ZCLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxVQUFVO2dCQUM3QixVQUFVLE1BQU0sRUFBRSxRQUFRO29CQUN0QixpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQ3hELGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDMUQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ3pDLENBQUM7YUFDSjtZQUNELFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztZQUM5QyxPQUFPLEVBQUUsSUFBSTtZQUNiLElBQUksRUFBRSxVQUFVLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSztnQkFDakMsT0FBTyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDaEQsSUFBSSxFQUFFLEdBQUc7b0JBQ1QsTUFBTSxFQUFFLE9BQU87b0JBQ2YsTUFBTSxFQUFFLElBQUk7b0JBQ1osS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7d0JBQ2xCLEtBQUssQ0FBQyxNQUFNLENBQUM7NEJBQ1QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzt3QkFDM0MsQ0FBQyxDQUFDLENBQUM7b0JBQ1AsQ0FBQztvQkFDRCxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRTt3QkFDakIsSUFBSSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNyQyxJQUFJLFVBQVUsR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7d0JBQzdELElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzt3QkFDakMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3hELElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7NEJBQ3pELEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ3RFLEtBQUssQ0FBQyxNQUFNLENBQUM7b0NBQ1QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7Z0NBQzlDLENBQUMsQ0FBQyxDQUFDOzRCQUNQLENBQUM7NEJBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxVQUFVLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUM1RSxLQUFLLENBQUMsTUFBTSxDQUFDO29DQUNULEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dDQUNoRCxDQUFDLENBQUMsQ0FBQzs0QkFDUCxDQUFDO3dCQUNMLENBQUM7d0JBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUM5RCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQzs0QkFDakYsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLFVBQVUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ3RFLEtBQUssQ0FBQyxNQUFNLENBQUM7b0NBQ1QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7Z0NBQy9DLENBQUMsQ0FBQyxDQUFDOzRCQUNQLENBQUM7NEJBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDOUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztvQ0FDVCxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQ0FDakQsQ0FBQyxDQUFDLENBQUM7NEJBQ1AsQ0FBQzt3QkFDTCxDQUFDO29CQUVMLENBQUM7b0JBQ0QsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7d0JBQ2pCLEtBQUssQ0FBQyxNQUFNLENBQUM7NEJBQ1gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQzt3QkFDMUMsQ0FBQyxDQUFDLENBQUM7b0JBQ1AsQ0FBQztpQkFDSixDQUFDLENBQUM7WUFDUCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUNuRVAsT0FBTztLQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUM7S0FDdEIsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTSxFQUFFLG1CQUFtQixFQUFFLGFBQWE7SUFDdEUsVUFBVSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsV0FBVztRQUMxQyxNQUFNLENBQUM7WUFDSCxRQUFRLEVBQUUsR0FBRztZQUNiLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDdkIsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVU7Z0JBQzdCLFVBQVUsTUFBTSxFQUFFLFFBQVE7b0JBQ3RCLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFFeEQsMklBQTJJO29CQUMzSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxVQUFVLElBQUk7d0JBQ25DLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzt3QkFDM0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkQsQ0FBQyxDQUFDO29CQUVGLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hELENBQUM7YUFDSjtZQUNELFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztZQUMvQyxPQUFPLEVBQUUsSUFBSTtTQUNoQixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQ3hCUCxPQUFPO0tBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQztLQUN0QixTQUFTLENBQUMsZUFBZSxFQUFFLENBQUMsVUFBVSxFQUFFLG1CQUFtQixFQUFFLGFBQWE7SUFDdkUsVUFBVSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsV0FBVztRQUM5QyxNQUFNLENBQUM7WUFDSCxRQUFRLEVBQUUsR0FBRztZQUNiLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDdkIsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVU7Z0JBQzdCLFVBQVUsTUFBTSxFQUFFLFFBQVE7b0JBQ3RCLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDeEQsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUMxRCxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDekMsQ0FBQzthQUNKO1lBQ0QsV0FBVyxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBQzVDLE9BQU8sRUFBRSxJQUFJO1NBQ2hCLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FDbEJQLE9BQU87S0FDRixNQUFNLENBQUMsY0FBYyxDQUFDO0tBQ3RCLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsYUFBYTtJQUN0RSxVQUFVLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxXQUFXO1FBQzlDLE1BQU0sQ0FBQztZQUNILFFBQVEsRUFBRSxHQUFHO1lBQ2IsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUN2QixVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVTtnQkFDN0IsVUFBVSxNQUFNLEVBQUUsUUFBUTtvQkFDdEIsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUN4RCxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQzFELE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUNyQyxNQUFNLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDakQsQ0FBQzthQUNKO1lBQ0QsV0FBVyxFQUFFLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzNDLE9BQU8sRUFBRSxJQUFJO1NBQ2hCLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FDbkJQLE9BQU87S0FDRixNQUFNLENBQUMsY0FBYyxDQUFDO0tBQ3RCLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRTtJQUN6QjtRQUNJLE1BQU0sQ0FBQztZQUNILFFBQVEsRUFBRSxHQUFHO1lBQ2IsSUFBSSxFQUFFLFVBQVUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLO2dCQUNqQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQztnQkFDckQsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNyRCxPQUFPLENBQUMsS0FBSyxDQUFDO29CQUNWLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDZixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDdkIsS0FBSyxDQUFDLFFBQVEsQ0FBQzs0QkFDWCxFQUFFLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixJQUFJLFVBQVU7NEJBQ3hDLEVBQUUsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLElBQUksaUJBQWlCOzRCQUMvQyxFQUFFLEVBQUUsT0FBTzt5QkFDZCxDQUFDLENBQUM7d0JBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDeEMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDSCxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztvQkFDbkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixDQUFDLENBQUMsQ0FBQztnQkFDSCxhQUFhLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztvQkFDM0IsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztnQkFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztvQkFDckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7d0JBQ3hELEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDakIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixDQUFDLENBQUMsQ0FBQztnQkFDSCxLQUFLLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLFVBQVUsQ0FBQztvQkFDbEMsbUdBQW1HO29CQUNuRyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FDdkNQLE9BQU87S0FDRixNQUFNLENBQUMsY0FBYyxDQUFDO0tBQ3RCLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFVBQVUsRUFBRSxhQUFhO0lBQ3JELFVBQVUsUUFBUSxFQUFFLFdBQVc7UUFDM0IsTUFBTSxDQUFDO1lBQ0gsUUFBUSxFQUFFLEdBQUc7WUFDYixVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVTtnQkFDN0IsVUFBVSxNQUFNLEVBQUUsUUFBUTtvQkFFdEIsTUFBTSxDQUFDLGFBQWEsR0FBRzt3QkFFbkIsTUFBTSxDQUFDLFlBQVksR0FBRzs0QkFDbEIsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0NBQ25CLFdBQVcsRUFBRSxRQUFRO2dDQUNyQixZQUFZLEVBQUUsTUFBTTtnQ0FDcEIsa0JBQWtCLEVBQUUsYUFBYTtnQ0FDakMsUUFBUSxFQUFFLEVBQUU7NkJBQ2YsQ0FBQzt5QkFDTCxDQUFDO3dCQUVGLE1BQU0sQ0FBQyxXQUFXLEdBQUc7NEJBQ2pCLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dDQUNsQixXQUFXLEVBQUUsUUFBUTtnQ0FDckIsWUFBWSxFQUFFLGdCQUFnQjtnQ0FDOUIsa0JBQWtCLEVBQUUsb0JBQW9CO2dDQUN4QyxRQUFRLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzZCQUN6QyxDQUFDOzRCQUNGLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dDQUNsQixXQUFXLEVBQUUsUUFBUTtnQ0FDckIsWUFBWSxFQUFFLGlCQUFpQjtnQ0FDL0Isa0JBQWtCLEVBQUUscUJBQXFCO2dDQUN6QyxRQUFRLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzZCQUN6QyxDQUFDOzRCQUNGLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dDQUNsQixXQUFXLEVBQUUsUUFBUTtnQ0FDckIsWUFBWSxFQUFFLGlCQUFpQjtnQ0FDL0Isa0JBQWtCLEVBQUUscUJBQXFCO2dDQUN6QyxRQUFRLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzZCQUN6QyxDQUFDOzRCQUNGLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dDQUNsQixXQUFXLEVBQUUsUUFBUTtnQ0FDckIsWUFBWSxFQUFFLGlCQUFpQjtnQ0FDL0Isa0JBQWtCLEVBQUUscUJBQXFCO2dDQUN6QyxRQUFRLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzZCQUN6QyxDQUFDOzRCQUNGLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dDQUNsQixXQUFXLEVBQUUsUUFBUTtnQ0FDckIsWUFBWSxFQUFFLGlCQUFpQjtnQ0FDL0Isa0JBQWtCLEVBQUUscUJBQXFCO2dDQUN6QyxRQUFRLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzZCQUN6QyxDQUFDOzRCQUNGLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dDQUNsQixXQUFXLEVBQUUsUUFBUTtnQ0FDckIsWUFBWSxFQUFFLGtCQUFrQjtnQ0FDaEMsa0JBQWtCLEVBQUUsc0JBQXNCO2dDQUMxQyxRQUFRLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDOzZCQUMxQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0NBQ3RCLFdBQVcsRUFBRSxRQUFRO2dDQUNyQixZQUFZLEVBQUUsYUFBYTtnQ0FDM0Isa0JBQWtCLEVBQUUsWUFBWTtnQ0FDaEMsUUFBUSxFQUFFLEVBQUU7NkJBQ2YsQ0FBQzt5QkFDTCxDQUFDO3dCQUVGLE1BQU0sQ0FBQyxjQUFjLEdBQUc7NEJBQ3BCLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dDQUNyQixXQUFXLEVBQUUsUUFBUTtnQ0FDckIsWUFBWSxFQUFFLFFBQVE7Z0NBQ3RCLGtCQUFrQixFQUFFLGVBQWU7Z0NBQ25DLEtBQUssRUFBRSxDQUFDO2dDQUNSLE1BQU0sRUFBRSxDQUFDO2dDQUNULFFBQVEsRUFBRSxFQUFFOzZCQUNmLENBQUM7eUJBQ0wsQ0FBQzt3QkFFRixNQUFNLENBQUMsY0FBYyxHQUFHOzRCQUNwQixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztnQ0FDckIsV0FBVyxFQUFFLFFBQVE7Z0NBQ3JCLFlBQVksRUFBRSxRQUFRO2dDQUN0QixrQkFBa0IsRUFBRSxlQUFlO2dDQUNuQyxRQUFRLEVBQUUsRUFBRTs2QkFDZixDQUFDO3lCQUNMLENBQUM7d0JBRUYsTUFBTSxDQUFDLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxRQUFROzRCQUN4RixNQUFNLENBQUM7Z0NBQ0gsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dDQUNuQixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxXQUFXO29DQUN4RCxJQUFJLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO29DQUM1QixJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7b0NBQ2hGLElBQUksSUFBSSxHQUFHO3dDQUNQLFdBQVcsRUFBRSxLQUFLO3dDQUNsQixXQUFXLEVBQUUsV0FBVyxDQUFDLEVBQUU7d0NBQzNCLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxLQUFLO3dDQUNuQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsU0FBUzt3Q0FDdkMsSUFBSSxFQUFFLElBQUk7d0NBQ1YsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO3dDQUNoQyxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7cUNBQ3pCLENBQUM7b0NBQ0YsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO29DQUM1QixPQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDO29DQUNuRCxPQUFPLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7b0NBQ3pDLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO29DQUNyRCxNQUFNLENBQUMsT0FBTyxDQUFDO2dDQUNuQixDQUFDLENBQUM7NkJBQ0wsQ0FBQzt3QkFDTixDQUFDLENBQUMsQ0FBQztvQkFFUCxDQUFDLENBQUM7b0JBRUYsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUV2QixNQUFNLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxJQUFJO3dCQUN0QyxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUM3RCxJQUFJLGFBQWEsQ0FBQzt3QkFDbEIsSUFBSSxrQkFBa0IsQ0FBQzt3QkFDdkIsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO3dCQUVyQixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUNYLEtBQUssTUFBTTtnQ0FDUCxhQUFhLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO2dDQUM5RSxrQkFBa0IsR0FBRyxxRUFBcUUsQ0FBQztnQ0FDM0YsS0FBSyxDQUFDOzRCQUNWLEtBQUssS0FBSztnQ0FDTixhQUFhLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQ0FDakMsa0JBQWtCLEdBQUcsd0VBQXdFLENBQUM7Z0NBQzlGLEtBQUssQ0FBQzs0QkFDVixLQUFLLFFBQVE7Z0NBQ1QsYUFBYSxHQUFHLENBQUMsbUNBQW1DLENBQUMsQ0FBQztnQ0FDdEQsa0JBQWtCLEdBQUcsdUVBQXVFLENBQUM7Z0NBQzdGLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxvR0FBb0c7Z0NBQ3JILEtBQUssQ0FBQzs0QkFDVixLQUFLLFNBQVM7Z0NBQ1YsYUFBYSxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztnQ0FDOUUsa0JBQWtCLEdBQUcsdURBQXVELENBQUM7Z0NBQzdFLEtBQUssQ0FBQzs0QkFDVixLQUFLLFFBQVE7Z0NBQ1QsYUFBYSxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztnQ0FDOUUsa0JBQWtCLEdBQUcscUVBQXFFLENBQUM7Z0NBQzNGLEtBQUssQ0FBQzt3QkFDZCxDQUFDO3dCQUVELE1BQU0sQ0FBQzs0QkFDSCxNQUFNLEVBQUUsTUFBTTs0QkFDZCxXQUFXLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLFFBQVEsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLDZFQUE2RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzs0QkFDL0ssV0FBVyxFQUFFLGtCQUFrQjs0QkFDL0IsYUFBYSxFQUFFLFFBQVE7NEJBQ3ZCLE1BQU0sRUFBRSxPQUFPOzRCQUNmLFFBQVEsRUFBRSxNQUFNOzRCQUNoQixNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRTtnQ0FDbkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsa0ZBQWtGOzRCQUNqSCxDQUFDOzRCQUNELEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFO2dDQUNsQixNQUFNLENBQUMsTUFBTSxDQUFDO29DQUNWLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQ0FDckMsQ0FBQyxDQUFDLENBQUM7NEJBQ1AsQ0FBQzs0QkFDRCxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRTtnQ0FDakIsTUFBTSxDQUFDLE1BQU0sQ0FBQztvQ0FDVixNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0NBQ2xDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQ0FDM0IsQ0FBQyxDQUFDLENBQUM7NEJBQ1AsQ0FBQzs0QkFDRCxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRTtnQ0FDakIsTUFBTSxDQUFDLE1BQU0sQ0FBQztvQ0FDVixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7Z0NBQ2pELENBQUMsQ0FBQyxDQUFDOzRCQUNQLENBQUM7eUJBQ0osQ0FBQTtvQkFDTCxDQUFDLENBQUM7b0JBRUYsSUFBSSwyQkFBMkIsR0FBRywwQ0FBMEMsQ0FBQztvQkFDN0UsTUFBTSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsMkJBQTJCLENBQUMsS0FBSyxNQUFNLENBQUM7b0JBRTVFLE1BQU0sQ0FBQyx1QkFBdUIsR0FBRyxVQUFVLENBQUM7d0JBQ3hDLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQzt3QkFDckQsQ0FBQyxDQUFDLE1BQU0sQ0FBQywyQkFBMkIsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLHVDQUF1Qzt3QkFDMUgsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUNuQixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3hCLENBQUMsQ0FBQztnQkFDTixDQUFDO2FBQ0o7WUFDRCxXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7WUFDL0MsT0FBTyxFQUFFLElBQUk7WUFDYixJQUFJLEVBQUUsVUFBVSxLQUFLLEVBQUUsT0FBTztnQkFDMUIsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM5QyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUM7b0JBQ3JDLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFDckQsaUdBQWlHO29CQUNqRyx1REFBdUQ7b0JBQ3ZELElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDcEUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUN0QyxFQUFFLENBQUMsQ0FBQyxjQUFjLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzNGLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7d0JBQ2xDLE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ3RDLENBQUM7b0JBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGNBQWMsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQzFELE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQy9CLE9BQU8sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQ3pDLENBQUM7b0JBQ0QsSUFBSSxDQUFDLENBQUM7d0JBQ0YsT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQzt3QkFDbEMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztvQkFDekMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQ2hOUCxPQUFPO0tBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQztLQUN0QixTQUFTLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxVQUFVLEVBQUUsYUFBYTtJQUMxRCxVQUFVLFFBQVEsRUFBRSxXQUFXO1FBQzNCLE1BQU0sQ0FBQztZQUNILFFBQVEsRUFBRSxHQUFHO1lBQ2IsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUN4QixVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVTtnQkFDN0IsVUFBVSxNQUFNLEVBQUUsUUFBUTtvQkFDdEIsSUFBSSxxQkFBcUIsR0FBRyx3QkFBd0IsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxjQUFjLENBQUM7b0JBQzdGLE1BQU0sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLE1BQU0sQ0FBQztvQkFDaEUsTUFBTSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQzt3QkFDbEMsTUFBTSxDQUFDLFdBQVcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7d0JBQ3pDLENBQUMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsdUNBQXVDO3dCQUM5RyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ25CLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDeEIsQ0FBQyxDQUFDO2dCQUNOLENBQUM7YUFDSjtZQUNELFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQztZQUNwRCxPQUFPLEVBQUUsSUFBSTtTQUNoQixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQyIsImZpbGUiOiJMYXlvdXRFZGl0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJhbmd1bGFyLm1vZHVsZShcIkxheW91dEVkaXRvclwiLCBbXCJuZ1Nhbml0aXplXCIsIFwibmdSZXNvdXJjZVwiLCBcInVpLnNvcnRhYmxlXCJdKTsiLCJ2YXIgTGF5b3V0RWRpdG9yO1xyXG4oZnVuY3Rpb24oTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgdmFyIENsaXBib2FyZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5fY2xpcGJvYXJkRGF0YSA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2lzRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl93YXNJbnZva2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0RGF0YSA9IGZ1bmN0aW9uKGNvbnRlbnRUeXBlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIHNlbGYuX2NsaXBib2FyZERhdGFbY29udGVudFR5cGVdID0gZGF0YTtcclxuICAgICAgICAgICAgc2VsZi5fd2FzSW52b2tlZCA9IHRydWU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmdldERhdGEgPSBmdW5jdGlvbiAoY29udGVudFR5cGUpIHtcclxuICAgICAgICAgICAgc2VsZi5fd2FzSW52b2tlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLl9jbGlwYm9hcmREYXRhW2NvbnRlbnRUeXBlXTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBzZWxmLl9pc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2VsZi5fd2FzSW52b2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZWxmLl9jbGlwYm9hcmREYXRhID0ge307XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLl9pc0Rpc2FibGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLndhc0ludm9rZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLl93YXNJbnZva2VkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuQ2xpcGJvYXJkID0gbmV3IENsaXBib2FyZCgpO1xyXG5cclxuICAgIGFuZ3VsYXJcclxuICAgICAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAgICAgLmZhY3RvcnkoXCJjbGlwYm9hcmRcIiwgW1xyXG4gICAgICAgICAgICBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0RGF0YTogTGF5b3V0RWRpdG9yLkNsaXBib2FyZC5zZXREYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIGdldERhdGE6IExheW91dEVkaXRvci5DbGlwYm9hcmQuZ2V0RGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlOiBMYXlvdXRFZGl0b3IuQ2xpcGJvYXJkLmRpc2FibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogTGF5b3V0RWRpdG9yLkNsaXBib2FyZC5pc0Rpc2FibGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhc0ludm9rZWQ6IExheW91dEVkaXRvci5DbGlwYm9hcmQud2FzSW52b2tlZFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF0pO1xyXG59KShMYXlvdXRFZGl0b3IgfHwgKExheW91dEVkaXRvciA9IHt9KSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmZhY3RvcnkoXCJzY29wZUNvbmZpZ3VyYXRvclwiLCBbXCIkdGltZW91dFwiLCBcImNsaXBib2FyZFwiLFxyXG4gICAgICAgIGZ1bmN0aW9uICgkdGltZW91dCwgY2xpcGJvYXJkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJlRm9yRWxlbWVudDogZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICRlbGVtZW50LmZpbmQoXCIubGF5b3V0LXBhbmVsXCIpLmNsaWNrKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRlbGVtZW50LnBhcmVudCgpLmtleWRvd24oZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc2V0Rm9jdXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSAkc2NvcGUuZWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZWRpdG9yLmlzRHJhZ2dpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBuYXRpdmUgY2xpcGJvYXJkIHN1cHBvcnQgZXhpc3RzLCB0aGUgcHNldWRvLWNsaXBib2FyZCB3aWxsIGhhdmUgYmVlbiBkaXNhYmxlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjbGlwYm9hcmQuaXNEaXNhYmxlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9jdXNlZEVsZW1lbnQgPSBlbGVtZW50LmVkaXRvci5mb2N1c2VkRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWZvY3VzZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHNldWRvIGNsaXBib2FyZCBoYW5kbGluZyBmb3IgYnJvd3NlcnMgbm90IGFsbG93aW5nIHJlYWwgY2xpcGJvYXJkIG9wZXJhdGlvbnMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY3RybEtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGUud2hpY2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2NzogLy8gQ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZEVsZW1lbnQuY29weShjbGlwYm9hcmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODg6IC8vIFhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWRFbGVtZW50LmN1dChjbGlwYm9hcmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODY6IC8vIFZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWRFbGVtZW50LnBhc3RlKGNsaXBib2FyZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gNDYpIHsgLy8gRGVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZGVsZXRlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgKGUud2hpY2ggPT0gMzIgfHwgZS53aGljaCA9PSAyNykpIHsgLy8gU3BhY2Ugb3IgRXNjXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWxlbWVudC5maW5kKFwiLmxheW91dC1wYW5lbC1hY3Rpb24tcHJvcGVydGllc1wiKS5maXJzdCgpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhZWxlbWVudC5oYXNFZGl0b3IpIHsgLy8gVGhpcyBlbGVtZW50IGhhcyBhbiBlZGl0b3IgZGlhbG9nLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMTMpIHsgLy8gRW50ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWxlbWVudC5maW5kKFwiLmxheW91dC1wYW5lbC1hY3Rpb24tZWRpdFwiKS5maXJzdCgpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWVsZW1lbnQuY2hpbGRyZW4pIHsgLy8gVGhpcyBpcyBhIGNvbnRhaW5lci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmIGUuYWx0S2V5ICYmIGUud2hpY2ggPT0gNDApIHsgLy8gQWx0K0Rvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNoaWxkcmVuWzBdLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT0gXCJDb2x1bW5cIikgeyAvLyBUaGlzIGlzIGEgY29sdW1uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb25uZWN0QWRqYWNlbnQgPSAhZS5jdHJsS2V5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLndoaWNoID09IDM3KSB7IC8vIExlZnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuYWx0S2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5leHBhbmRMZWZ0KGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnNoaWZ0S2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb250cmFjdFJpZ2h0KGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS53aGljaCA9PSAzOSkgeyAvLyBSaWdodFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5hbHRLZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNvbnRyYWN0TGVmdChjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5zaGlmdEtleSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZXhwYW5kUmlnaHQoY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFlbGVtZW50LnBhcmVudCkgeyAvLyBUaGlzIGlzIGEgY2hpbGQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5hbHRLZXkgJiYgZS53aGljaCA9PSAzOCkgeyAvLyBBbHQrVXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudC5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXJlbnQudHlwZSA9PSBcIlJvd1wiKSB7IC8vIFBhcmVudCBpcyBhIGhvcml6b250YWwgY29udGFpbmVyLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDM3KSB7IC8vIExlZnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnQubW92ZUZvY3VzUHJldkNoaWxkKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSAzOSkgeyAvLyBSaWdodFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudC5tb3ZlRm9jdXNOZXh0Q2hpbGQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMzcpIHsgLy8gQ3RybCtMZWZ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubW92ZVVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Rm9jdXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDM5KSB7IC8vIEN0cmwrUmlnaHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tb3ZlRG93bigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgLy8gUGFyZW50IGlzIGEgdmVydGljYWwgY29udGFpbmVyLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5jdHJsS2V5ICYmICFlLnNoaWZ0S2V5ICYmICFlLmFsdEtleSAmJiBlLndoaWNoID09IDM4KSB7IC8vIFVwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Lm1vdmVGb2N1c1ByZXZDaGlsZChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gNDApIHsgLy8gRG93blxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudC5tb3ZlRm9jdXNOZXh0Q2hpbGQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMzgpIHsgLy8gQ3RybCtVcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1vdmVVcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldEZvY3VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuY3RybEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5hbHRLZXkgJiYgZS53aGljaCA9PSA0MCkgeyAvLyBDdHJsK0Rvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tb3ZlRG93bigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KCk7IC8vIEV2ZW50IGlzIG5vdCB0cmlnZ2VyZWQgYnkgQW5ndWxhciBkaXJlY3RpdmUgYnV0IHJhdyBldmVudCBoYW5kbGVyIG9uIGVsZW1lbnQuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBIQUNLOiBXb3JrYXJvdW5kIGJlY2F1c2Ugb2YgaG93IEFuZ3VsYXIgdHJlYXRzIHRoZSBET00gd2hlbiBlbGVtZW50cyBhcmUgc2hpZnRlZCBhcm91bmQgLSBpbnB1dCBmb2N1cyBpcyBzb21ldGltZXMgbG9zdC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc2V0Rm9jdXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lZGl0b3IuZm9jdXNlZEVsZW1lbnQuc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50LnNldElzRm9jdXNlZEV2ZW50SGFuZGxlcnMucHVzaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRlbGVtZW50LnBhcmVudCgpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5kZWxldGUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmRlbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmV2ZW50LnRyaWdnZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJsYXlvdXRlZGl0b3I6ZWRpdGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoJHNjb3BlLmVsZW1lbnQuaGFzRWRpdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lZGl0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRyb290LmVkaXRFbGVtZW50KCRzY29wZS5lbGVtZW50KS5kb25lKGZ1bmN0aW9uIChhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmNhbmNlbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50LmRhdGEgPSBhcmdzLmVsZW1lbnQuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuYXBwbHlFbGVtZW50RWRpdG9yTW9kZWwoYXJncy5lbGVtZW50RWRpdG9yTW9kZWwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhJHNjb3BlLmVsZW1lbnQuc2V0SHRtbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50LnNldEh0bWwoYXJncy5lbGVtZW50Lmh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmVGb3JDb250YWluZXI6IGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSAkc2NvcGUuZWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8kc2NvcGUuaXNSZWNlaXZpbmcgPSBmYWxzZTsgLy8gVHJ1ZSB3aGVuIGNvbnRhaW5lciBpcyByZWNlaXZpbmcgYW4gZXh0ZXJuYWwgZWxlbWVudCB2aWEgZHJhZy9kcm9wLlxyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5nZXRTaG93Q2hpbGRyZW5QbGFjZWhvbGRlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRzY29wZS5lbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiAhJHNjb3BlLmVsZW1lbnQuZ2V0SXNEcm9wVGFyZ2V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNvcnRhYmxlT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBcIm1vdmVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IDE1MCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGVsZW1lbnQuZ2V0SXNTZWFsZWQoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IDUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaGFuZGxlOiBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA8IDIgPyBcIi5pbWFnaW5hcnktY2xhc3NcIiA6IGZhbHNlLCAvLyBGb3Igc29tZSByZWFzb24gZG9lc24ndCBnZXQgcmUtZXZhbHVhdGVkIGFmdGVyIGFkZGluZyBtb3JlIGNoaWxkcmVuLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldElzRHJvcFRhcmdldCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVkaXRvci5pc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSB0aGUgZHJvcCB0YXJnZXQgcGxhY2Vob2xkZXIgYXMgaGlnaCBhcyB0aGUgaXRlbSBiZWluZyBkcmFnZ2VkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIuaGVpZ2h0KHVpLml0ZW0uaGVpZ2h0KCkgLSA0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnBsYWNlaG9sZGVyLmNzcyhcIm1pbi1oZWlnaHRcIiwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3A6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lZGl0b3IuaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNEcm9wVGFyZ2V0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyOiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXVpLnNlbmRlciAmJiAhIXVpLnNlbmRlclswXS5pc1Rvb2xib3gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISF1aS5zZW5kZXJbMF0uZHJvcFRhcmdldFRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpbWVvdXQuY2FuY2VsKHVpLnNlbmRlclswXS5kcm9wVGFyZ2V0VGltZW91dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnNlbmRlclswXS5kcm9wVGFyZ2V0VGltZW91dCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSBcIlJvd1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSB3YXMgYSBwcmV2aW91cyBkcm9wIHRhcmdldCBhbmQgaXQgd2FzIGEgcm93LCByb2xsIGJhY2sgYW55IHBlbmRpbmcgY29sdW1uIGFkZHMgdG8gaXQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNEcm9wVGFyZ2V0ID0gZWxlbWVudC5lZGl0b3IuZHJvcFRhcmdldEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFwcmV2aW91c0Ryb3BUYXJnZXQgJiYgcHJldmlvdXNEcm9wVGFyZ2V0LnR5cGUgPT0gXCJSb3dcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0Ryb3BUYXJnZXQucm9sbGJhY2tBZGRDb2x1bW4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldElzRHJvcFRhcmdldChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkuc2VuZGVyWzBdLmRyb3BUYXJnZXRUaW1lb3V0ID0gJHRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09IFwiUm93XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNlaXZlZENvbHVtbiA9IHVpLml0ZW0uc29ydGFibGUubW9kZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVjZWl2ZWRDb2x1bW5XaWR0aCA9IE1hdGguZmxvb3IoMTIgLyAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggKyAxKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZENvbHVtbi53aWR0aCA9IHJlY2VpdmVkQ29sdW1uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZENvbHVtbi5vZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5iZWdpbkFkZENvbHVtbihyZWNlaXZlZENvbHVtbldpZHRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2UgdGhlIGRyb3AgdGFyZ2V0IHBsYWNlaG9sZGVyIHRoZSBjb3JyZWN0IHdpZHRoIGFuZCBhcyBoaWdoIGFzIHRoZSBoaWdoZXN0IGV4aXN0aW5nIGNvbHVtbiBpbiB0aGUgcm93LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heEhlaWdodCA9IF8ubWF4KF8oJGVsZW1lbnQuZmluZChcIj4gLmxheW91dC1jaGlsZHJlbiA+IC5sYXlvdXQtY29sdW1uOm5vdCgudWktc29ydGFibGUtcGxhY2Vob2xkZXIpXCIpKS5tYXAoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChlKS5oZWlnaHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gMTI7IGkrKylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5wbGFjZWhvbGRlci5yZW1vdmVDbGFzcyhcImNvbC14cy1cIiArIGkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIuYWRkQ2xhc3MoXCJjb2wteHMtXCIgKyByZWNlaXZlZENvbHVtbi53aWR0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4SGVpZ2h0ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnBsYWNlaG9sZGVyLmhlaWdodChtYXhIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpLnBsYWNlaG9sZGVyLmNzcyhcIm1pbi1oZWlnaHRcIiwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aS5wbGFjZWhvbGRlci5oZWlnaHQoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWkucGxhY2Vob2xkZXIuY3NzKFwibWluLWhlaWdodFwiLCBcIlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldElzRHJvcFRhcmdldCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxNTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlOiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXVpLnNlbmRlciAmJiAhIXVpLnNlbmRlclswXS5pc1Rvb2xib3gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY2VpdmVkRWxlbWVudCA9IHVpLml0ZW0uc29ydGFibGUubW9kZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXJlY2VpdmVkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSBcIlJvd1wiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29tbWl0QWRkQ29sdW1uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGQgaWRlYWxseSBjYWxsIExheW91dEVkaXRvci5Db250YWluZXIuYWRkQ2hpbGQoKSBpbnN0ZWFkLCBidXQgc2luY2UgdGhpcyBoYW5kbGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBydW4gKmJlZm9yZSogdGhlIHVpLXNvcnRhYmxlIGRpcmVjdGl2ZSdzIGhhbmRsZXIsIGlmIHdlIHRyeSB0byBhZGQgdGhlIGNoaWxkIHRvIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJyYXkgdGhhdCBoYW5kbGVyIHdpbGwgZ2V0IGFuIGV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBkbyB0aGUgc2FtZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb2YgdGhpcywgd2UgbmVlZCB0byBpbnZva2UgXCJzZXRQYXJlbnRcIiBzbyB0aGF0IHNwZWNpZmljIGNvbnRhaW5lciB0eXBlcyBjYW4gcGVyZm9ybSBlbGVtZW50IHNwZWZpY2ljIGluaXRpYWxpemF0aW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRFbGVtZW50LnNldEVkaXRvcihlbGVtZW50LmVkaXRvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZEVsZW1lbnQuc2V0UGFyZW50KGVsZW1lbnQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXJlY2VpdmVkRWxlbWVudC5oYXNFZGl0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJHJvb3QuZWRpdEVsZW1lbnQocmVjZWl2ZWRFbGVtZW50KS5kb25lKGZ1bmN0aW9uIChhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJncy5jYW5jZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5kYXRhID0gYXJncy5lbGVtZW50LmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZEVsZW1lbnQuYXBwbHlFbGVtZW50RWRpdG9yTW9kZWwoYXJncy5lbGVtZW50RWRpdG9yTW9kZWwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXJlY2VpdmVkRWxlbWVudC5zZXRIdG1sKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkRWxlbWVudC5zZXRIdG1sKGFyZ3MuZWxlbWVudC5odG1sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFhcmdzLmNhbmNlbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZEVsZW1lbnQuZGVsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRFbGVtZW50LnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kc2NvcGUuaXNSZWNlaXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNEcm9wVGFyZ2V0KGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kc2NvcGUuaXNSZWNlaXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNEcm9wVGFyZ2V0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXJlY2VpdmVkRWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZEVsZW1lbnQuc2V0SXNGb2N1c2VkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRyb290LmFkZEVsZW1lbnQocmVjZWl2ZWRFbGVtZW50KS5kb25lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUuY2xpY2sgPSBmdW5jdGlvbiAoY2hpbGQsIGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZC5lZGl0b3IuaXNEcmFnZ2luZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5nZXRDbGFzc2VzID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXCJsYXlvdXQtZWxlbWVudFwiXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWNoaWxkLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1jb250YWluZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0SXNTZWFsZWQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1jb250YWluZXItc2VhbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1cIiArIGNoaWxkLnR5cGUudG9Mb3dlckNhc2UoKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFjaGlsZC5kcm9wVGFyZ2V0Q2xhc3MpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjaGlsZC5kcm9wVGFyZ2V0Q2xhc3MpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byBlaXRoZXIgdGhlIENvbHVtbiBkaXJlY3RpdmUgb3IgdGhlIENvbHVtbiBtb2RlbCBjbGFzcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT0gXCJSb3dcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJyb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLmNhbkFkZENvbHVtbigpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LXJvdy1mdWxsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC50eXBlID09IFwiQ29sdW1uXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwiY29sLXhzLVwiICsgY2hpbGQud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJjb2wteHMtb2Zmc2V0LVwiICsgY2hpbGQub2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PSBcIkNvbnRlbnRcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWNvbnRlbnQtXCIgKyBjaGlsZC5jb250ZW50VHlwZUNsYXNzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5nZXRJc0FjdGl2ZSgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC1hY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5nZXRJc0ZvY3VzZWQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtZm9jdXNlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldElzU2VsZWN0ZWQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtc2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5nZXRJc0Ryb3BUYXJnZXQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmlzVGVtcGxhdGVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXCJsYXlvdXQtZWxlbWVudC10ZW1wbGF0ZWRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dEVkaXRvclwiLCBbXCJlbnZpcm9ubWVudFwiLFxyXG4gICAgICAgIGZ1bmN0aW9uIChlbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdHJpY3Q6IFwiRVwiLFxyXG4gICAgICAgICAgICAgICAgc2NvcGU6IHt9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIiwgXCIkYXR0cnNcIiwgXCIkY29tcGlsZVwiLCBcImNsaXBib2FyZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50LCAkYXR0cnMsICRjb21waWxlLCBjbGlwYm9hcmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhJGF0dHJzLm1vZGVsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQgPSBldmFsKCRhdHRycy5tb2RlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSAnbW9kZWwnIGF0dHJpYnV0ZSBtdXN0IGV2YWx1YXRlIHRvIGEgTGF5b3V0RWRpdG9yLkVkaXRvciBvYmplY3QuXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmNsaWNrID0gZnVuY3Rpb24gKGNhbnZhcywgZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW52YXMuZWRpdG9yLmlzRHJhZ2dpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5nZXRDbGFzc2VzID0gZnVuY3Rpb24gKGNhbnZhcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtcImxheW91dC1lbGVtZW50XCIsIFwibGF5b3V0LWNvbnRhaW5lclwiLCBcImxheW91dC1jYW52YXNcIl07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhcy5nZXRJc0FjdGl2ZSgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhcy5nZXRJc0ZvY3VzZWQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LWZvY3VzZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FudmFzLmdldElzU2VsZWN0ZWQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LXNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhcy5nZXRJc0Ryb3BUYXJnZXQoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcImxheW91dC1lbGVtZW50LWRyb3B0YXJnZXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FudmFzLmlzVGVtcGxhdGVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFwibGF5b3V0LWVsZW1lbnQtdGVtcGxhdGVkXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBbiB1bmZvcnR1bmF0ZSBzaWRlLWVmZmVjdCBvZiB0aGUgbmV4dCBoYWNrIG9uIGxpbmUgNTQgaXMgdGhhdCB0aGUgY3JlYXRlZCBlbGVtZW50cyBhcmVuJ3QgYWRkZWQgdG8gdGhlIERPTSB5ZXQsIHNvIHdlIGNhbid0IHVzZSBpdCB0byBnZXQgdG8gdGhlIHBhcmVudCBcIi5sYXlvdXQtZGVzaWdlclwiIGVsZW1lbnQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdvcmsgYXJvdW5kOiBhY2Nlc3MgdGhhdCBlbGVtZW50IGRpcmVjdGx5ICh3aGljaCBlZmVjdGl2ZWx5IHR1cm5zIG11bHRpcGxlIGxheW91dCBlZGl0b3JzIG9uIGEgc2luZ2xlIHBhZ2UgaW1wb3NzaWJsZSkuIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAvL3ZhciBsYXlvdXREZXNpZ25lckhvc3QgPSAkZWxlbWVudC5jbG9zZXN0KFwiLmxheW91dC1kZXNpZ25lclwiKS5kYXRhKFwibGF5b3V0LWRlc2lnbmVyLWhvc3RcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXlvdXREZXNpZ25lckhvc3QgPSAkKFwiLmxheW91dC1kZXNpZ25lclwiKS5kYXRhKFwibGF5b3V0LWRlc2lnbmVyLWhvc3RcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJHJvb3QubGF5b3V0RGVzaWduZXJIb3N0ID0gbGF5b3V0RGVzaWduZXJIb3N0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0RGVzaWduZXJIb3N0LmVsZW1lbnQub24oXCJyZXBsYWNlY2FudmFzXCIsIGZ1bmN0aW9uIChlLCBhcmdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWRpdG9yID0gJHNjb3BlLmVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzRGF0YSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBhcmdzLmNhbnZhcy5kYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxJZDogYXJncy5jYW52YXMuaHRtbElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxDbGFzczogYXJncy5jYW52YXMuaHRtbENsYXNzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxTdHlsZTogYXJncy5jYW52YXMuaHRtbFN0eWxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGVtcGxhdGVkOiBhcmdzLmNhbnZhcy5pc1RlbXBsYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogYXJncy5jYW52YXMuY2hpbGRyZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFDSzogSW5zdGVhZCBvZiBzaW1wbHkgdXBkYXRpbmcgdGhlICRzY29wZS5lbGVtZW50IHdpdGggYSBuZXcgaW5zdGFuY2UsIHdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgZW50aXJlIG9yYy1sYXlvdXQtZWRpdG9yIG1hcmt1cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gb3JkZXIgZm9yIGFuZ3VsYXIgdG8gcmViaW5kIHN0YXJ0aW5nIHdpdGggdGhlIENhbnZhcyBlbGVtZW50LiBPdGhlcndpc2UsIGZvciBzb21lIHJlYXNvbiwgaXQgd2lsbCByZWJpbmQgc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QgY2hpbGQgb2YgQ2FudmFzLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWW91IGNhbiBzZWUgdGhpcyBoYXBwZW5pbmcgd2hlbiBzZXR0aW5nIGEgYnJlYWtwb2ludCBpbiBTY29wZUNvbmZpZ3VyYXRvciB3aGVyZSBjb250YWluZXJzIGFyZSBpbml0aWFsaXplZCB3aXRoIGRyYWcgJiBkcm9wOiBvbiBwYWdlIGxvYWQsIHRoZSBmaXJzdCBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBhIENhbnZhcyAoZ29vZCksIGJ1dCBhZnRlciBoYXZpbmcgc2VsZWN0ZWQgYW5vdGhlciB0ZW1wbGF0ZSwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgKHR5cGljYWxseSkgYSBHcmlkIChiYWQpLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2ltcGx5IHJlY29tcGlsaW5nIHRoZSBvcmMtbGF5b3V0LWVkaXRvciBkaXJlY3RpdmUgd2lsbCBjYXVzZSB0aGUgZW50aXJlIHRoaW5nIHRvIGJlIGdlbmVyYXRlZCwgd2hpY2ggd29ya3MganVzdCBmaW5lIGFzIHdlbGwgKGV2ZW4gdGhvdWdoIG5vdCBpcyBuaWNlIGFzIHNpbXBseSBsZXZlcmFnaW5nIG1vZGVsIGJpbmRpbmcpLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0RGVzaWduZXJIb3N0LmVkaXRvciA9IHdpbmRvdy5sYXlvdXRFZGl0b3IgPSBuZXcgTGF5b3V0RWRpdG9yLkVkaXRvcihlZGl0b3IuY29uZmlnLCBjYW52YXNEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IFwiPG9yYy1sYXlvdXQtZWRpdG9yXCIgKyBcIiBtb2RlbD0nd2luZG93LmxheW91dEVkaXRvcicgLz5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gJGNvbXBpbGUodGVtcGxhdGUpKCRzY29wZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiLmxheW91dC1lZGl0b3ItaG9sZGVyXCIpLmh0bWwoaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRyb290LmVkaXRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBob3N0ID0gJHNjb3BlLiRyb290LmxheW91dERlc2lnbmVySG9zdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBob3N0LmVkaXRFbGVtZW50KGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRyb290LmFkZEVsZW1lbnQgPSBmdW5jdGlvbiAoY29udGVudFR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBob3N0ID0gJHNjb3BlLiRyb290LmxheW91dERlc2lnbmVySG9zdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBob3N0LmFkZEVsZW1lbnQoY29udGVudFR5cGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkub24oXCJjdXQgY29weSBwYXN0ZVwiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBzZXVkbyBjbGlwYm9hcmQgd2FzIGFscmVhZHkgaW52b2tlZCAod2hpY2ggaGFwcGVucyBvbiB0aGUgZmlyc3QgY2xpcGJvYXJkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcGVyYXRpb24gYWZ0ZXIgcGFnZSBsb2FkIGV2ZW4gaWYgbmF0aXZlIGNsaXBib2FyZCBzdXBwb3J0IGV4aXN0cykgdGhlbiBzaXQgdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25lIG9wZXJhdGlvbiBvdXQsIGJ1dCBtYWtlIHN1cmUgd2hhdGV2ZXIgaXMgb24gdGhlIHBzZXVkbyBjbGlwYm9hcmQgZ2V0cyBtaWdyYXRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIG5hdGl2ZSBjbGlwYm9hcmQgZm9yIHN1YnNlcXVlbnQgb3BlcmF0aW9ucy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGlwYm9hcmQud2FzSW52b2tlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuc2V0RGF0YShcInRleHQvcGxhaW5cIiwgY2xpcGJvYXJkLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKFwidGV4dC9qc29uXCIsIGNsaXBib2FyZC5nZXREYXRhKFwidGV4dC9qc29uXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9jdXNlZEVsZW1lbnQgPSAkc2NvcGUuZWxlbWVudC5mb2N1c2VkRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFmb2N1c2VkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZS50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNvcHlcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZEVsZW1lbnQuY29weShlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjdXRcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZEVsZW1lbnQuY3V0KGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInBhc3RlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWRFbGVtZW50LnBhc3RlKGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5ldmVudC50cmlnZ2VyKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibGF5b3V0ZWRpdG9yOmVkaXRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIQUNLOiBXb3JrYXJvdW5kIGJlY2F1c2Ugb2YgaG93IEFuZ3VsYXIgdHJlYXRzIHRoZSBET00gd2hlbiBlbGVtZW50cyBhcmUgc2hpZnRlZCBhcm91bmQgLSBpbnB1dCBmb2N1cyBpcyBzb21ldGltZXMgbG9zdC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhJHNjb3BlLmVsZW1lbnQuZm9jdXNlZEVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50LmZvY3VzZWRFbGVtZW50LnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5hdGl2ZSBjbGlwYm9hcmQgc3VwcG9ydCBvYnZpb3VzbHkgZXhpc3RzLCBzbyBkaXNhYmxlIHRoZSBwZXVkbyBjbGlwYm9hcmQgZnJvbSBub3cgb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwYm9hcmQuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiRWRpdG9yXCIpLFxyXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uIChzY29wZSwgZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE5vIGNsaWNrcyBzaG91bGQgcHJvcGFnYXRlIGZyb20gdGhlIFRpbnlNQ0UgdG9vbGJhcnMuXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5maW5kKFwiLmxheW91dC10b29sYmFyLWNvbnRhaW5lclwiKS5jbGljayhmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVuZm9jdXMgYW5kIHVuc2VsZWN0IGV2ZXJ5dGhpbmcgb24gY2xpY2sgb3V0c2lkZSBvZiBjYW52YXMuXHJcbiAgICAgICAgICAgICAgICAgICAgJCh3aW5kb3cpLmNsaWNrKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmFjdGl2ZUVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZWxlbWVudC5mb2N1c2VkRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyIsImFuZ3VsYXJcclxuICAgIC5tb2R1bGUoXCJMYXlvdXRFZGl0b3JcIilcclxuICAgIC5kaXJlY3RpdmUoXCJvcmNMYXlvdXRDYW52YXNcIiwgW1wic2NvcGVDb25maWd1cmF0b3JcIiwgXCJlbnZpcm9ubWVudFwiLFxyXG4gICAgICAgIGZ1bmN0aW9uIChzY29wZUNvbmZpZ3VyYXRvciwgZW52aXJvbm1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHJlc3RyaWN0OiBcIkVcIixcclxuICAgICAgICAgICAgICAgIHNjb3BlOiB7IGVsZW1lbnQ6IFwiPVwiIH0sXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLCBcIiRhdHRyc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50LCAkYXR0cnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yRWxlbWVudCgkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVDb25maWd1cmF0b3IuY29uZmlndXJlRm9yQ29udGFpbmVyKCRzY29wZSwgJGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuc29ydGFibGVPcHRpb25zW1wiYXhpc1wiXSA9IFwieVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVVybDogZW52aXJvbm1lbnQudGVtcGxhdGVVcmwoXCJDYW52YXNcIiksXHJcbiAgICAgICAgICAgICAgICByZXBsYWNlOiB0cnVlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dENoaWxkXCIsIFtcIiRjb21waWxlXCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKCRjb21waWxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXHJcbiAgICAgICAgICAgICAgICBzY29wZTogeyBlbGVtZW50OiBcIj1cIiB9LFxyXG4gICAgICAgICAgICAgICAgbGluazogZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXBsYXRlID0gXCI8b3JjLWxheW91dC1cIiArIHNjb3BlLmVsZW1lbnQudHlwZS50b0xvd2VyQ2FzZSgpICsgXCIgZWxlbWVudD0nZWxlbWVudCcgLz5cIjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9ICRjb21waWxlKHRlbXBsYXRlKShzY29wZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgJChlbGVtZW50KS5yZXBsYWNlV2l0aChodG1sKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0Q29sdW1uXCIsIFtcIiRjb21waWxlXCIsIFwic2NvcGVDb25maWd1cmF0b3JcIiwgXCJlbnZpcm9ubWVudFwiLFxyXG4gICAgICAgIGZ1bmN0aW9uICgkY29tcGlsZSwgc2NvcGVDb25maWd1cmF0b3IsIGVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXHJcbiAgICAgICAgICAgICAgICBzY29wZTogeyBlbGVtZW50OiBcIj1cIiB9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIixcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNvbmZpZ3VyYXRvci5jb25maWd1cmVGb3JFbGVtZW50KCRzY29wZSwgJGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNvbmZpZ3VyYXRvci5jb25maWd1cmVGb3JDb250YWluZXIoJHNjb3BlLCAkZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5zb3J0YWJsZU9wdGlvbnNbXCJheGlzXCJdID0gXCJ5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBlbnZpcm9ubWVudC50ZW1wbGF0ZVVybChcIkNvbHVtblwiKSxcclxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBsaW5rOiBmdW5jdGlvbiAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5maW5kKFwiLmxheW91dC1jb2x1bW4tcmVzaXplLWJhclwiKS5kcmFnZ2FibGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBheGlzOiBcInhcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyOiBcImNsb25lXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldmVydDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5lbGVtZW50LmVkaXRvci5pc1Jlc2l6aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkcmFnOiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5FbGVtZW50ID0gZWxlbWVudC5wYXJlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5TaXplID0gY29sdW1uRWxlbWVudC53aWR0aCgpIC8gc2NvcGUuZWxlbWVudC53aWR0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb25uZWN0QWRqYWNlbnQgPSAhZS5jdHJsS2V5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQoZS50YXJnZXQpLmhhc0NsYXNzKFwibGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyLWxlZnRcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSB1aS5vZmZzZXQubGVmdCAtIGNvbHVtbkVsZW1lbnQub2Zmc2V0KCkubGVmdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsdGEgPCAtY29sdW1uU2l6ZSAmJiBzY29wZS5lbGVtZW50LmNhbkV4cGFuZExlZnQoY29ubmVjdEFkamFjZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZWxlbWVudC5leHBhbmRMZWZ0KGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWx0YSA+IGNvbHVtblNpemUgJiYgc2NvcGUuZWxlbWVudC5jYW5Db250cmFjdExlZnQoY29ubmVjdEFkamFjZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZWxlbWVudC5jb250cmFjdExlZnQoY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoJChlLnRhcmdldCkuaGFzQ2xhc3MoXCJsYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXItcmlnaHRcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSB1aS5vZmZzZXQubGVmdCAtIGNvbHVtbkVsZW1lbnQud2lkdGgoKSAtIGNvbHVtbkVsZW1lbnQub2Zmc2V0KCkubGVmdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsdGEgPiBjb2x1bW5TaXplICYmIHNjb3BlLmVsZW1lbnQuY2FuRXhwYW5kUmlnaHQoY29ubmVjdEFkamFjZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZWxlbWVudC5leHBhbmRSaWdodChjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGEgPCAtY29sdW1uU2l6ZSAmJiBzY29wZS5lbGVtZW50LmNhbkNvbnRyYWN0UmlnaHQoY29ubmVjdEFkamFjZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZWxlbWVudC5jb250cmFjdFJpZ2h0KGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3A6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZWxlbWVudC5lZGl0b3IuaXNSZXNpemluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0Q29udGVudFwiLCBbXCIkc2NlXCIsIFwic2NvcGVDb25maWd1cmF0b3JcIiwgXCJlbnZpcm9ubWVudFwiLFxyXG4gICAgICAgIGZ1bmN0aW9uICgkc2NlLCBzY29wZUNvbmZpZ3VyYXRvciwgZW52aXJvbm1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHJlc3RyaWN0OiBcIkVcIixcclxuICAgICAgICAgICAgICAgIHNjb3BlOiB7IGVsZW1lbnQ6IFwiPVwiIH0sXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckVsZW1lbnQoJHNjb3BlLCAkZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBPdmVyd3JpdGUgdGhlIHNldEh0bWwgZnVuY3Rpb24gc28gdGhhdCB3ZSBjYW4gdXNlIHRoZSAkc2NlIHNlcnZpY2UgdG8gdHJ1c3QgdGhlIGh0bWwgKGFuZCBub3QgaGF2ZSB0aGUgaHRtbCBiaW5kaW5nIHN0cmlwIGNlcnRhaW4gdGFncykuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50LnNldEh0bWwgPSBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmVsZW1lbnQuaHRtbCA9IGh0bWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5odG1sVW5zYWZlID0gJHNjZS50cnVzdEFzSHRtbChodG1sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50LnNldEh0bWwoJHNjb3BlLmVsZW1lbnQuaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBlbnZpcm9ubWVudC50ZW1wbGF0ZVVybChcIkNvbnRlbnRcIiksXHJcbiAgICAgICAgICAgICAgICByZXBsYWNlOiB0cnVlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dEdyaWRcIiwgW1wiJGNvbXBpbGVcIiwgXCJzY29wZUNvbmZpZ3VyYXRvclwiLCBcImVudmlyb25tZW50XCIsXHJcbiAgICAgICAgZnVuY3Rpb24gKCRjb21waWxlLCBzY29wZUNvbmZpZ3VyYXRvciwgZW52aXJvbm1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHJlc3RyaWN0OiBcIkVcIixcclxuICAgICAgICAgICAgICAgIHNjb3BlOiB7IGVsZW1lbnQ6IFwiPVwiIH0sXHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBbXCIkc2NvcGVcIiwgXCIkZWxlbWVudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkc2NvcGUsICRlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckVsZW1lbnQoJHNjb3BlLCAkZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ29uZmlndXJhdG9yLmNvbmZpZ3VyZUZvckNvbnRhaW5lcigkc2NvcGUsICRlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNvcnRhYmxlT3B0aW9uc1tcImF4aXNcIl0gPSBcInlcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiR3JpZFwiKSxcclxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0Um93XCIsIFtcIiRjb21waWxlXCIsIFwic2NvcGVDb25maWd1cmF0b3JcIiwgXCJlbnZpcm9ubWVudFwiLFxyXG4gICAgICAgIGZ1bmN0aW9uICgkY29tcGlsZSwgc2NvcGVDb25maWd1cmF0b3IsIGVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXHJcbiAgICAgICAgICAgICAgICBzY29wZTogeyBlbGVtZW50OiBcIj1cIiB9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIixcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHNjb3BlLCAkZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNvbmZpZ3VyYXRvci5jb25maWd1cmVGb3JFbGVtZW50KCRzY29wZSwgJGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZUNvbmZpZ3VyYXRvci5jb25maWd1cmVGb3JDb250YWluZXIoJHNjb3BlLCAkZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5zb3J0YWJsZU9wdGlvbnNbXCJheGlzXCJdID0gXCJ4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5zb3J0YWJsZU9wdGlvbnNbXCJ1aS1mbG9hdGluZ1wiXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBlbnZpcm9ubWVudC50ZW1wbGF0ZVVybChcIlJvd1wiKSxcclxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0UG9wdXBcIiwgW1xyXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHJlc3RyaWN0OiBcIkFcIixcclxuICAgICAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uIChzY29wZSwgZWxlbWVudCwgYXR0cnMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9wdXAgPSAkKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0cmlnZ2VyID0gcG9wdXAuY2xvc2VzdChcIi5sYXlvdXQtcG9wdXAtdHJpZ2dlclwiKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50RWxlbWVudCA9IHBvcHVwLmNsb3Nlc3QoXCIubGF5b3V0LWVsZW1lbnRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5jbGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLnRvZ2dsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9wdXAuaXMoXCI6dmlzaWJsZVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXAucG9zaXRpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15OiBhdHRycy5vcmNMYXlvdXRQb3B1cE15IHx8IFwibGVmdCB0b3BcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdDogYXR0cnMub3JjTGF5b3V0UG9wdXBBdCB8fCBcImxlZnQgYm90dG9tKzRweFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mOiB0cmlnZ2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLmZpbmQoXCJpbnB1dFwiKS5maXJzdCgpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBwb3B1cC5jbGljayhmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuY2xpY2soZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXAuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHBvcHVwLmtleWRvd24oZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkgJiYgIWUuYWx0S2V5ICYmIGUud2hpY2ggPT0gMjcpIC8vIEVzY1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXAuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHBvcHVwLm9uKFwiY3V0IGNvcHkgcGFzdGVcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgY2xpcGJvYXJkIG9wZXJhdGlvbnMgaW4gcG9wdXAgd2l0aG91dCBpbnZva2luZyBjbGlwYm9hcmQgZXZlbnQgaGFuZGxlcnMgb24gcGFyZW50IGVsZW1lbnQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgXSk7IiwiYW5ndWxhclxyXG4gICAgLm1vZHVsZShcIkxheW91dEVkaXRvclwiKVxyXG4gICAgLmRpcmVjdGl2ZShcIm9yY0xheW91dFRvb2xib3hcIiwgW1wiJGNvbXBpbGVcIiwgXCJlbnZpcm9ubWVudFwiLFxyXG4gICAgICAgIGZ1bmN0aW9uICgkY29tcGlsZSwgZW52aXJvbm1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHJlc3RyaWN0OiBcIkVcIixcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5yZXNldEVsZW1lbnRzID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5ncmlkRWxlbWVudHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLkdyaWQuZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwMGFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIkdyaWRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIkVtcHR5IGdyaWQuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5yb3dFbGVtZW50cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuUm93LmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMGM5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJSb3cgKDEgY29sdW1uKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiUm93IHdpdGggMSBjb2x1bW4uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBMYXlvdXRFZGl0b3IuQ29sdW1uLnRpbWVzKDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjBjOVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiUm93ICgyIGNvbHVtbnMpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJSb3cgd2l0aCAyIGNvbHVtbnMuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBMYXlvdXRFZGl0b3IuQ29sdW1uLnRpbWVzKDIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjBjOVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiUm93ICgzIGNvbHVtbnMpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJSb3cgd2l0aCAzIGNvbHVtbnMuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBMYXlvdXRFZGl0b3IuQ29sdW1uLnRpbWVzKDMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjBjOVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiUm93ICg0IGNvbHVtbnMpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJSb3cgd2l0aCA0IGNvbHVtbnMuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBMYXlvdXRFZGl0b3IuQ29sdW1uLnRpbWVzKDQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjBjOVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiUm93ICg2IGNvbHVtbnMpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJSb3cgd2l0aCA2IGNvbHVtbnMuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBMYXlvdXRFZGl0b3IuQ29sdW1uLnRpbWVzKDYpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveEljb246IFwiXFx1ZjBjOVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94TGFiZWw6IFwiUm93ICgxMiBjb2x1bW5zKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiUm93IHdpdGggMTIgY29sdW1ucy5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IExheW91dEVkaXRvci5Db2x1bW4udGltZXMoMTIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIExheW91dEVkaXRvci5Sb3cuZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwYzlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIlJvdyAoZW1wdHkpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hEZXNjcmlwdGlvbjogXCJFbXB0eSByb3cuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5jb2x1bW5FbGVtZW50cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRFZGl0b3IuQ29sdW1uLmZyb20oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94SWNvbjogXCJcXHVmMGRiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hMYWJlbDogXCJDb2x1bW5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveERlc2NyaXB0aW9uOiBcIkVtcHR5IGNvbHVtbi5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmNhbnZhc0VsZW1lbnRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dEVkaXRvci5DYW52YXMuZnJvbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3hJY29uOiBcIlxcdWYwNDRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveExhYmVsOiBcIkNhbnZhc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94RGVzY3JpcHRpb246IFwiRW1wdHkgY2FudmFzLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuY29udGVudEVsZW1lbnRDYXRlZ29yaWVzID0gXygkc2NvcGUuZWxlbWVudC5jb25maWcuY2F0ZWdvcmllcykubWFwKGZ1bmN0aW9uIChjYXRlZ29yeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGNhdGVnb3J5Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBfKGNhdGVnb3J5LmNvbnRlbnRUeXBlcykubWFwKGZ1bmN0aW9uIChjb250ZW50VHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBjb250ZW50VHlwZS50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZhY3RvcnkgPSBMYXlvdXRFZGl0b3IuZmFjdG9yaWVzW3R5cGVdIHx8IExheW91dEVkaXRvci5mYWN0b3JpZXNbXCJDb250ZW50XCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUZW1wbGF0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBjb250ZW50VHlwZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZUxhYmVsOiBjb250ZW50VHlwZS5sYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZUNsYXNzOiBjb250ZW50VHlwZS50eXBlQ2xhc3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNFZGl0b3I6IGNvbnRlbnRUeXBlLmhhc0VkaXRvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sOiBjb250ZW50VHlwZS5odG1sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBmYWN0b3J5KGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50b29sYm94SWNvbiA9IGNvbnRlbnRUeXBlLmljb24gfHwgXCJcXHVmMWM5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnRvb2xib3hMYWJlbCA9IGNvbnRlbnRUeXBlLmxhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50b29sYm94RGVzY3JpcHRpb24gPSBjb250ZW50VHlwZS5kZXNjcmlwdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUucmVzZXRFbGVtZW50cygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmdldFNvcnRhYmxlT3B0aW9ucyA9IGZ1bmN0aW9uICh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWRpdG9ySWQgPSAkZWxlbWVudC5jbG9zZXN0KFwiLmxheW91dC1lZGl0b3JcIikuYXR0cihcImlkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudENsYXNzZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGxhY2Vob2xkZXJDbGFzc2VzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZsb2F0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkdyaWRcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3NlcyA9IFtcIi5sYXlvdXQtY2FudmFzXCIsIFwiLmxheW91dC1jb2x1bW5cIiwgXCIubGF5b3V0LWNvbW1vbi1ob2xkZXJcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyQ2xhc3NlcyA9IFwibGF5b3V0LWVsZW1lbnQgbGF5b3V0LWNvbnRhaW5lciBsYXlvdXQtZ3JpZCB1aS1zb3J0YWJsZS1wbGFjZWhvbGRlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiUm93XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENsYXNzZXMgPSBbXCIubGF5b3V0LWdyaWRcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyQ2xhc3NlcyA9IFwibGF5b3V0LWVsZW1lbnQgbGF5b3V0LWNvbnRhaW5lciBsYXlvdXQtcm93IHJvdyB1aS1zb3J0YWJsZS1wbGFjZWhvbGRlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiQ29sdW1uXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENsYXNzZXMgPSBbXCIubGF5b3V0LXJvdzpub3QoLmxheW91dC1yb3ctZnVsbClcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyQ2xhc3NlcyA9IFwibGF5b3V0LWVsZW1lbnQgbGF5b3V0LWNvbnRhaW5lciBsYXlvdXQtY29sdW1uIHVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0aW5nID0gdHJ1ZTsgLy8gVG8gZW5zdXJlIGEgc21vb3RoIGhvcml6b250YWwtbGlzdCByZW9yZGVyaW5nLiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci11aS91aS1zb3J0YWJsZSNmbG9hdGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiQ29udGVudFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDbGFzc2VzID0gW1wiLmxheW91dC1jYW52YXNcIiwgXCIubGF5b3V0LWNvbHVtblwiLCBcIi5sYXlvdXQtY29tbW9uLWhvbGRlclwiXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJDbGFzc2VzID0gXCJsYXlvdXQtZWxlbWVudCBsYXlvdXQtY29udGVudCB1aS1zb3J0YWJsZS1wbGFjZWhvbGRlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiQ2FudmFzXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENsYXNzZXMgPSBbXCIubGF5b3V0LWNhbnZhc1wiLCBcIi5sYXlvdXQtY29sdW1uXCIsIFwiLmxheW91dC1jb21tb24taG9sZGVyXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckNsYXNzZXMgPSBcImxheW91dC1lbGVtZW50IGxheW91dC1jb250YWluZXIgbGF5b3V0LWdyaWQgdWktc29ydGFibGUtcGxhY2Vob2xkZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IFwibW92ZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RXaXRoOiBfKHBhcmVudENsYXNzZXMpLm1hcChmdW5jdGlvbiAoZSkgeyByZXR1cm4gXCIjXCIgKyBlZGl0b3JJZCArIFwiIFwiICsgZSArIFwiOm5vdCgubGF5b3V0LWNvbnRhaW5lci1zZWFsZWQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuXCI7IH0pLmpvaW4oXCIsIFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXJDbGFzc2VzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidWktZmxvYXRpbmdcIjogZmxvYXRpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyOiBcImNsb25lXCIsIC8vIFdlIGNsb25lIHRoZSBlbGVtZW50IGFuZCB3ZSBhcHBlbmQgaXQgdG8gdGhlIGJvZHkgYmVjYXVzZSB0aGUgY29udGFpbmVyIG92ZXJmbG93IGlzIHNldCB0byBhdXRvIChzZWU6IEFzc2V0c1xcTGVzc1xcTGF5b3V0RWRpdG9yXFxUb29sYm94Lmxlc3MpIGFuZCBvdGhlcndpc2UgaXQgY291bGQgbm90IGJlIG1vdmVkIHdpdGggZHJhZyZkcm9wXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG86IFwiYm9keVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZTogZnVuY3Rpb24gKGUsIHVpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LmlzVG9vbGJveCA9IHRydWU7IC8vIFdpbGwgaW5kaWNhdGUgdG8gY29ubmVjdGVkIHNvcnRhYmxlcyB0aGF0IGRyb3BwZWQgaXRlbXMgd2VyZSBzZW50IGZyb20gdG9vbGJveC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5pc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wOiBmdW5jdGlvbiAoZSwgdWkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLiRhcHBseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZWxlbWVudC5pc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUucmVzZXRFbGVtZW50cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXI6IGZ1bmN0aW9uIChlLCB1aSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuJGFwcGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5lbGVtZW50LmNhbnZhcy5zZXRJc0Ryb3BUYXJnZXQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxheW91dElzQ29sbGFwc2VkQ29va2llTmFtZSA9IFwibGF5b3V0VG9vbGJveENhdGVnb3J5X0xheW91dF9Jc0NvbGxhcHNlZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUubGF5b3V0SXNDb2xsYXBzZWQgPSAkLmNvb2tpZShsYXlvdXRJc0NvbGxhcHNlZENvb2tpZU5hbWUpID09PSBcInRydWVcIjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS50b2dnbGVMYXlvdXRJc0NvbGxhcHNlZCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUubGF5b3V0SXNDb2xsYXBzZWQgPSAhJHNjb3BlLmxheW91dElzQ29sbGFwc2VkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5jb29raWUobGF5b3V0SXNDb2xsYXBzZWRDb29raWVOYW1lLCAkc2NvcGUubGF5b3V0SXNDb2xsYXBzZWQsIHsgZXhwaXJlczogMzY1IH0pOyAvLyBSZW1lbWJlciBjb2xsYXBzZWQgc3RhdGUgZm9yIGEgeWVhci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlVXJsOiBlbnZpcm9ubWVudC50ZW1wbGF0ZVVybChcIlRvb2xib3hcIiksXHJcbiAgICAgICAgICAgICAgICByZXBsYWNlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbGluazogZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRvb2xib3ggPSBlbGVtZW50LmZpbmQoXCIubGF5b3V0LXRvb2xib3hcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgJCh3aW5kb3cpLm9uKFwicmVzaXplIHNjcm9sbFwiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzID0gZWxlbWVudC5wYXJlbnQoKS5maW5kKFwiLmxheW91dC1jYW52YXNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjYW52YXMgaXMgdGFsbGVyIHRoYW4gdGhlIHRvb2xib3gsIG1ha2UgdGhlIHRvb2xib3ggc3RpY2t5LXBvc2l0aW9uZWQgd2l0aGluIHRoZSBlZGl0b3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gaGVscCB0aGUgdXNlciBhdm9pZCBleGNlc3NpdmUgdmVydGljYWwgc2Nyb2xsaW5nLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzSXNUYWxsZXIgPSAhIWNhbnZhcyAmJiBjYW52YXMuaGVpZ2h0KCkgPiB0b29sYm94LmhlaWdodCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2luZG93UG9zID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FudmFzSXNUYWxsZXIgJiYgd2luZG93UG9zID4gZWxlbWVudC5vZmZzZXQoKS50b3AgKyBlbGVtZW50LmhlaWdodCgpIC0gdG9vbGJveC5oZWlnaHQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveC5hZGRDbGFzcyhcInN0aWNreS1ib3R0b21cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94LnJlbW92ZUNsYXNzKFwic3RpY2t5LXRvcFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjYW52YXNJc1RhbGxlciAmJiB3aW5kb3dQb3MgPiBlbGVtZW50Lm9mZnNldCgpLnRvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveC5hZGRDbGFzcyhcInN0aWNreS10b3BcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sYm94LnJlbW92ZUNsYXNzKFwic3RpY2t5LWJvdHRvbVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xib3gucmVtb3ZlQ2xhc3MoXCJzdGlja3ktdG9wXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGJveC5yZW1vdmVDbGFzcyhcInN0aWNreS1ib3R0b21cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICBdKTsiLCJhbmd1bGFyXHJcbiAgICAubW9kdWxlKFwiTGF5b3V0RWRpdG9yXCIpXHJcbiAgICAuZGlyZWN0aXZlKFwib3JjTGF5b3V0VG9vbGJveEdyb3VwXCIsIFtcIiRjb21waWxlXCIsIFwiZW52aXJvbm1lbnRcIixcclxuICAgICAgICBmdW5jdGlvbiAoJGNvbXBpbGUsIGVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByZXN0cmljdDogXCJFXCIsXHJcbiAgICAgICAgICAgICAgICBzY29wZTogeyBjYXRlZ29yeTogXCI9XCIgfSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRlbGVtZW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCRzY29wZSwgJGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzQ29sbGFwc2VkQ29va2llTmFtZSA9IFwibGF5b3V0VG9vbGJveENhdGVnb3J5X1wiICsgJHNjb3BlLmNhdGVnb3J5Lm5hbWUgKyBcIl9Jc0NvbGxhcHNlZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuaXNDb2xsYXBzZWQgPSAkLmNvb2tpZShpc0NvbGxhcHNlZENvb2tpZU5hbWUpID09PSBcInRydWVcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnRvZ2dsZUlzQ29sbGFwc2VkID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5pc0NvbGxhcHNlZCA9ICEkc2NvcGUuaXNDb2xsYXBzZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmNvb2tpZShpc0NvbGxhcHNlZENvb2tpZU5hbWUsICRzY29wZS5pc0NvbGxhcHNlZCwgeyBleHBpcmVzOiAzNjUgfSk7IC8vIFJlbWVtYmVyIGNvbGxhcHNlZCBzdGF0ZSBmb3IgYSB5ZWFyLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVVcmw6IGVudmlyb25tZW50LnRlbXBsYXRlVXJsKFwiVG9vbGJveEdyb3VwXCIpLFxyXG4gICAgICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIF0pOyJdfQ== diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js index 80fbb24da7c..b1e2f2d7a34 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js @@ -1 +1 @@ -angular.module("LayoutEditor",["ngSanitize","ngResource","ui.sortable"]);var LayoutEditor;!function(e){var t=function(){var e=this;this._clipboardData={},this._isDisabled=!1,this._wasInvoked=!1,this.setData=function(t,o){e._clipboardData[t]=o,e._wasInvoked=!0},this.getData=function(t){return e._wasInvoked=!0,e._clipboardData[t]},this.disable=function(){e._isDisabled=!0,e._wasInvoked=!1,e._clipboardData={}},this.isDisabled=function(){return e._isDisabled},this.wasInvoked=function(){return e._wasInvoked}};e.Clipboard=new t,angular.module("LayoutEditor").factory("clipboard",[function(){return{setData:e.Clipboard.setData,getData:e.Clipboard.getData,disable:e.Clipboard.disable,isDisabled:e.Clipboard.isDisabled,wasInvoked:e.Clipboard.wasInvoked}}])}(LayoutEditor||(LayoutEditor={})),angular.module("LayoutEditor").factory("scopeConfigurator",["$timeout","clipboard",function(e,t){return{configureForElement:function(e,o){o.find(".layout-panel").click(function(e){e.stopPropagation()}),o.parent().keydown(function(n){var l=!1,a=!1,r=e.element;if(!r.editor.isDragging){if(!t.isDisabled()){var i=r.editor.focusedElement;if(i&&n.ctrlKey)switch(n.which){case 67:i.copy(t);break;case 88:i.cut(t);break;case 86:i.paste(t)}}if(n.ctrlKey||n.shiftKey||n.altKey||46!=n.which?n.ctrlKey||n.shiftKey||n.altKey||32!=n.which&&27!=n.which||(o.find(".layout-panel-action-properties").first().click(),l=!0):(e.delete(r),l=!0),r.hasEditor&&(n.ctrlKey||n.shiftKey||n.altKey||13!=n.which||(o.find(".layout-panel-action-edit").first().click(),l=!0)),r.children&&(n.ctrlKey||n.shiftKey||!n.altKey||40!=n.which||(r.children.length>0&&r.children[0].setIsFocused(),l=!0),"Column"==r.type)){var c=!n.ctrlKey;37==n.which?(n.altKey&&r.expandLeft(c),n.shiftKey&&r.contractRight(c),l=!0):39==n.which&&(n.altKey&&r.contractLeft(c),n.shiftKey&&r.expandRight(c),l=!0)}r.parent&&(n.altKey&&38==n.which&&(r.parent.setIsFocused(),l=!0),"Row"==r.parent.type?n.ctrlKey||n.shiftKey||n.altKey||37!=n.which?n.ctrlKey||n.shiftKey||n.altKey||39!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||37!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||39!=n.which||(r.moveDown(),l=!0):(r.moveUp(),a=!0,l=!0):(r.parent.moveFocusNextChild(r),l=!0):(r.parent.moveFocusPrevChild(r),l=!0):n.ctrlKey||n.shiftKey||n.altKey||38!=n.which?n.ctrlKey||n.shiftKey||n.altKey||40!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||38!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||40!=n.which||(r.moveDown(),l=!0):(r.moveUp(),a=!0,l=!0):(r.parent.moveFocusNextChild(r),l=!0):(r.parent.moveFocusPrevChild(r),l=!0)),l&&n.preventDefault(),n.stopPropagation(),e.$apply(),a&&window.setTimeout(function(){e.$apply(function(){r.editor.focusedElement.setIsFocused()})},100)}}),e.element.setIsFocusedEventHandlers.push(function(){o.parent().focus()}),e.delete=function(e){e.delete(),$.event.trigger({type:"layouteditor:edited"})},e.element.hasEditor&&(e.edit=function(){e.$root.editElement(e.element).done(function(t){e.$apply(function(){t.cancel||(e.element.data=t.element.data,e.element.applyElementEditorModel(t.elementEditorModel),e.element.setHtml&&e.element.setHtml(t.element.html))})})})},configureForContainer:function(t,o){var n=t.element;t.getShowChildrenPlaceholder=function(){return 0===t.element.children.length&&!t.element.getIsDropTarget()},t.sortableOptions={cursor:"move",delay:150,disabled:n.getIsSealed(),distance:5,start:function(e,o){t.$apply(function(){n.setIsDropTarget(!0),n.editor.isDragging=!0}),o.placeholder.height(o.item.height()-4),o.placeholder.css("min-height",0)},stop:function(e,o){t.$apply(function(){n.editor.isDragging=!1,n.setIsDropTarget(!1)})},over:function(t,l){l.sender&&l.sender[0].isToolbox&&(l.sender[0].dropTargetTimeout&&(e.cancel(l.sender[0].dropTargetTimeout),l.sender[0].dropTargetTimeout=null),e(function(){if("Row"==n.type){var e=n.editor.dropTargetElement;e&&"Row"==e.type&&e.rollbackAddColumn()}n.setIsDropTarget(!1)}),l.sender[0].dropTargetTimeout=e(function(){if("Row"==n.type){var e=l.item.sortable.model,t=Math.floor(12/(n.children.length+1));e.width=t,e.offset=0,n.beginAddColumn(t);var a=_.max(_(o.find("> .layout-children > .layout-column:not(.ui-sortable-placeholder)")).map(function(e){return $(e).height()}));for(i=1;i<=12;i++)l.placeholder.removeClass("col-xs-"+i);l.placeholder.addClass("col-xs-"+e.width),a>0?(l.placeholder.height(a),l.placeholder.css("min-height",0)):(l.placeholder.height(0),l.placeholder.css("min-height",""))}n.setIsDropTarget(!0)},150))},receive:function(o,l){l.sender&&l.sender[0].isToolbox&&t.$apply(function(){var o=l.item.sortable.model;o&&("Row"==n.type&&n.commitAddColumn(),o.setEditor(n.editor),o.setParent(n),o.hasEditor&&t.$root.editElement(o).done(function(t){t.cancel||(o.data=t.element.data,o.applyElementEditorModel(t.elementEditorModel),o.setHtml&&o.setHtml(t.element.html)),e(function(){t.cancel?o.delete():o.setIsFocused(),n.setIsDropTarget(!1)})})),e(function(){n.setIsDropTarget(!1),o&&o.setIsFocused(),t.$root.addElement(o).done(function(){})})})}},t.click=function(e,t){e.editor.isDragging||e.setIsFocused(),t.stopPropagation()},t.getClasses=function(e){var t=["layout-element"];return e.children&&(t.push("layout-container"),e.getIsSealed()&&t.push("layout-container-sealed")),t.push("layout-"+e.type.toLowerCase()),e.dropTargetClass&&t.push(e.dropTargetClass),"Row"==e.type&&(t.push("row"),e.canAddColumn()||t.push("layout-row-full")),"Column"==e.type&&(t.push("col-xs-"+e.width),t.push("col-xs-offset-"+e.offset)),"Content"==e.type&&t.push("layout-content-"+e.contentTypeClass),e.getIsActive()&&t.push("layout-element-active"),e.getIsFocused()&&t.push("layout-element-focused"),e.getIsSelected()&&t.push("layout-element-selected"),e.getIsDropTarget()&&t.push("layout-element-droptarget"),e.isTemplated&&t.push("layout-element-templated"),t}}}}]),angular.module("LayoutEditor").directive("orcLayoutEditor",["environment",function(environment){return{restrict:"E",scope:{},controller:["$scope","$element","$attrs","$compile","clipboard",function($scope,$element,$attrs,$compile,clipboard){if(!$attrs.model)throw new Error("The 'model' attribute must evaluate to a LayoutEditor.Editor object.");$scope.element=eval($attrs.model),$scope.click=function(e,t){e.editor.isDragging||e.setIsFocused(),t.stopPropagation()},$scope.getClasses=function(e){var t=["layout-element","layout-container","layout-canvas"];return e.getIsActive()&&t.push("layout-element-active"),e.getIsFocused()&&t.push("layout-element-focused"),e.getIsSelected()&&t.push("layout-element-selected"),e.getIsDropTarget()&&t.push("layout-element-droptarget"),e.isTemplated&&t.push("layout-element-templated"),t};var layoutDesignerHost=$(".layout-designer").data("layout-designer-host");$scope.$root.layoutDesignerHost=layoutDesignerHost,layoutDesignerHost.element.on("replacecanvas",function(e,t){var o=$scope.element,n={data:t.canvas.data,htmlId:t.canvas.htmlId,htmlClass:t.canvas.htmlClass,htmlStyle:t.canvas.htmlStyle,isTemplated:t.canvas.isTemplated,children:t.canvas.children};layoutDesignerHost.editor=window.layoutEditor=new LayoutEditor.Editor(o.config,n);var l="",a=$compile(l)($scope);$(".layout-editor-holder").html(a)}),$scope.$root.editElement=function(e){var t=$scope.$root.layoutDesignerHost;return t.editElement(e)},$scope.$root.addElement=function(e){var t=$scope.$root.layoutDesignerHost;return t.addElement(e)},$(document).on("cut copy paste",function(e){if(clipboard.wasInvoked())e.originalEvent.clipboardData.setData("text/plain",clipboard.getData("text/plain")),e.originalEvent.clipboardData.setData("text/json",clipboard.getData("text/json")),e.preventDefault();else{var t=$scope.element.focusedElement;t&&($scope.$apply(function(){switch(e.type){case"copy":t.copy(e.originalEvent.clipboardData);break;case"cut":t.cut(e.originalEvent.clipboardData);break;case"paste":t.paste(e.originalEvent.clipboardData),$.event.trigger({type:"layouteditor:edited"})}}),window.setTimeout(function(){$scope.$apply(function(){$scope.element.focusedElement&&$scope.element.focusedElement.setIsFocused()})},100),e.preventDefault())}clipboard.disable()})}],templateUrl:environment.templateUrl("Editor"),replace:!0,link:function(e,t){t.find(".layout-toolbar-container").click(function(e){e.stopPropagation()}),$(window).click(function(t){e.$apply(function(){e.element.activeElement=null,e.element.focusedElement=null})})}}}]),angular.module("LayoutEditor").directive("orcLayoutCanvas",["scopeConfigurator","environment",function(e,t){return{restrict:"E",scope:{element:"="},controller:["$scope","$element","$attrs",function(t,o,n){e.configureForElement(t,o),e.configureForContainer(t,o),t.sortableOptions.axis="y"}],templateUrl:t.templateUrl("Canvas"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutChild",["$compile",function(e){return{restrict:"E",scope:{element:"="},link:function(t,o){var n="",l=e(n)(t);$(o).replaceWith(l)}}}]),angular.module("LayoutEditor").directive("orcLayoutColumn",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="y"}],templateUrl:o.templateUrl("Column"),replace:!0,link:function(e,t,o){t.find(".layout-column-resize-bar").draggable({axis:"x",helper:"clone",revert:!0,start:function(t,o){e.$apply(function(){e.element.editor.isResizing=!0})},drag:function(o,n){var l=t.parent(),a=l.width()/e.element.width,r=!o.ctrlKey;if($(o.target).hasClass("layout-column-resize-bar-left")){var i=n.offset.left-l.offset().left;i<-a&&e.element.canExpandLeft(r)?e.$apply(function(){e.element.expandLeft(r)}):i>a&&e.element.canContractLeft(r)&&e.$apply(function(){e.element.contractLeft(r)})}else if($(o.target).hasClass("layout-column-resize-bar-right")){var i=n.offset.left-l.width()-l.offset().left;i>a&&e.element.canExpandRight(r)?e.$apply(function(){e.element.expandRight(r)}):i<-a&&e.element.canContractRight(r)&&e.$apply(function(){e.element.contractRight(r)})}},stop:function(t,o){e.$apply(function(){e.element.editor.isResizing=!1})}})}}}]),angular.module("LayoutEditor").directive("orcLayoutContent",["$sce","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(o,n){t.configureForElement(o,n),o.element.setHtml=function(t){o.element.html=t,o.element.htmlUnsafe=e.trustAsHtml(t)},o.element.setHtml(o.element.html)}],templateUrl:o.templateUrl("Content"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutGrid",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="y"}],templateUrl:o.templateUrl("Grid"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutRow",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="x",e.sortableOptions["ui-floating"]=!0}],templateUrl:o.templateUrl("Row"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutPopup",[function(){return{restrict:"A",link:function(e,t,o){var n=$(t),l=n.closest(".layout-popup-trigger"),a=n.closest(".layout-element");l.click(function(){n.toggle(),n.is(":visible")&&(n.position({my:o.orcLayoutPopupMy||"left top",at:o.orcLayoutPopupAt||"left bottom+4px",of:l}),n.find("input").first().focus())}),n.click(function(e){e.stopPropagation()}),a.click(function(e){n.hide()}),n.keydown(function(e){e.ctrlKey||e.shiftKey||e.altKey||27!=e.which||n.hide(),e.stopPropagation()}),n.on("cut copy paste",function(e){e.stopPropagation()})}}}]),angular.module("LayoutEditor").directive("orcLayoutToolbox",["$compile","environment",function(e,t){return{restrict:"E",controller:["$scope","$element",function(e,t){e.resetElements=function(){e.gridElements=[LayoutEditor.Grid.from({toolboxIcon:"",toolboxLabel:"Grid",toolboxDescription:"Empty grid.",children:[]})],e.rowElements=[LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (1 column)",toolboxDescription:"Row with 1 column.",children:LayoutEditor.Column.times(1)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (2 columns)",toolboxDescription:"Row with 2 columns.",children:LayoutEditor.Column.times(2)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (3 columns)",toolboxDescription:"Row with 3 columns.",children:LayoutEditor.Column.times(3)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (4 columns)",toolboxDescription:"Row with 4 columns.",children:LayoutEditor.Column.times(4)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (6 columns)",toolboxDescription:"Row with 6 columns.",children:LayoutEditor.Column.times(6)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (12 columns)",toolboxDescription:"Row with 12 columns.",children:LayoutEditor.Column.times(12)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (empty)",toolboxDescription:"Empty row.",children:[]})],e.columnElements=[LayoutEditor.Column.from({toolboxIcon:"",toolboxLabel:"Column",toolboxDescription:"Empty column.",width:1,offset:0,children:[]})],e.canvasElements=[LayoutEditor.Canvas.from({toolboxIcon:"",toolboxLabel:"Canvas",toolboxDescription:"Empty canvas.",children:[]})],e.contentElementCategories=_(e.element.config.categories).map(function(e){return{name:e.name,elements:_(e.contentTypes).map(function(e){var t=e.type,o=LayoutEditor.factories[t]||LayoutEditor.factories.Content,n={isTemplated:!1,contentType:e.id,contentTypeLabel:e.label,contentTypeClass:e.typeClass,data:null,hasEditor:e.hasEditor,html:e.html},l=o(n);return l.toolboxIcon=e.icon||"",l.toolboxLabel=e.label,l.toolboxDescription=e.description,l})}})},e.resetElements(),e.getSortableOptions=function(o){var n,l,a=t.closest(".layout-editor").attr("id"),r=!1;switch(o){case"Grid":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-container layout-grid ui-sortable-placeholder";break;case"Row":n=[".layout-grid"],l="layout-element layout-container layout-row row ui-sortable-placeholder";break;case"Column":n=[".layout-row:not(.layout-row-full)"],l="layout-element layout-container layout-column ui-sortable-placeholder",r=!0;break;case"Content":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-content ui-sortable-placeholder";break;case"Canvas":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-container layout-grid ui-sortable-placeholder"}return{cursor:"move",connectWith:_(n).map(function(e){return"#"+a+" "+e+":not(.layout-container-sealed) > .layout-element-wrapper > .layout-children"}).join(", "),placeholder:l,"ui-floating":r,create:function(e,t){e.target.isToolbox=!0},start:function(t,o){e.$apply(function(){e.element.isDragging=!0})},stop:function(t,o){e.$apply(function(){e.element.isDragging=!1,e.resetElements()})},over:function(t,o){e.$apply(function(){e.element.canvas.setIsDropTarget(!1)})}}};var o="layoutToolboxCategory_Layout_IsCollapsed";e.layoutIsCollapsed="true"===$.cookie(o),e.toggleLayoutIsCollapsed=function(t){e.layoutIsCollapsed=!e.layoutIsCollapsed,$.cookie(o,e.layoutIsCollapsed,{expires:365}),t.preventDefault(),t.stopPropagation()}}],templateUrl:t.templateUrl("Toolbox"),replace:!0,link:function(e,t){var o=t.find(".layout-toolbox");$(window).on("resize scroll",function(e){var n=t.parent().find(".layout-canvas"),l=!!n&&n.height()>o.height(),a=$(window).scrollTop();l&&a>t.offset().top+t.height()-o.height()?(o.addClass("sticky-bottom"),o.removeClass("sticky-top")):l&&a>t.offset().top?(o.addClass("sticky-top"),o.removeClass("sticky-bottom")):(o.removeClass("sticky-top"),o.removeClass("sticky-bottom"))})}}}]),angular.module("LayoutEditor").directive("orcLayoutToolboxGroup",["$compile","environment",function(e,t){return{restrict:"E",scope:{category:"="},controller:["$scope","$element",function(e,t){var o="layoutToolboxCategory_"+e.category.name+"_IsCollapsed";e.isCollapsed="true"===$.cookie(o),e.toggleIsCollapsed=function(t){e.isCollapsed=!e.isCollapsed,$.cookie(o,e.isCollapsed,{expires:365}),t.preventDefault(),t.stopPropagation()}}],templateUrl:t.templateUrl("ToolboxGroup"),replace:!0}}]); +angular.module("LayoutEditor",["ngSanitize","ngResource","ui.sortable"]);var LayoutEditor;!function(e){var t=function(){var e=this;this._clipboardData={},this._isDisabled=!1,this._wasInvoked=!1,this.setData=function(t,o){e._clipboardData[t]=o,e._wasInvoked=!0},this.getData=function(t){return e._wasInvoked=!0,e._clipboardData[t]},this.disable=function(){e._isDisabled=!0,e._wasInvoked=!1,e._clipboardData={}},this.isDisabled=function(){return e._isDisabled},this.wasInvoked=function(){return e._wasInvoked}};e.Clipboard=new t,angular.module("LayoutEditor").factory("clipboard",[function(){return{setData:e.Clipboard.setData,getData:e.Clipboard.getData,disable:e.Clipboard.disable,isDisabled:e.Clipboard.isDisabled,wasInvoked:e.Clipboard.wasInvoked}}])}(LayoutEditor||(LayoutEditor={})),angular.module("LayoutEditor").factory("scopeConfigurator",["$timeout","clipboard",function(e,t){return{configureForElement:function(e,o){o.find(".layout-panel").click(function(e){e.stopPropagation()}),o.parent().keydown(function(n){var l=!1,a=!1,r=e.element;if(!r.editor.isDragging){if(!t.isDisabled()){var i=r.editor.focusedElement;if(i&&n.ctrlKey)switch(n.which){case 67:i.copy(t);break;case 88:i.cut(t);break;case 86:i.paste(t)}}if(n.ctrlKey||n.shiftKey||n.altKey||46!=n.which?n.ctrlKey||n.shiftKey||n.altKey||32!=n.which&&27!=n.which||(o.find(".layout-panel-action-properties").first().click(),l=!0):(e.delete(r),l=!0),r.hasEditor&&(n.ctrlKey||n.shiftKey||n.altKey||13!=n.which||(o.find(".layout-panel-action-edit").first().click(),l=!0)),r.children&&(n.ctrlKey||n.shiftKey||!n.altKey||40!=n.which||(r.children.length>0&&r.children[0].setIsFocused(),l=!0),"Column"==r.type)){var c=!n.ctrlKey;37==n.which?(n.altKey&&r.expandLeft(c),n.shiftKey&&r.contractRight(c),l=!0):39==n.which&&(n.altKey&&r.contractLeft(c),n.shiftKey&&r.expandRight(c),l=!0)}r.parent&&(n.altKey&&38==n.which&&(r.parent.setIsFocused(),l=!0),"Row"==r.parent.type?n.ctrlKey||n.shiftKey||n.altKey||37!=n.which?n.ctrlKey||n.shiftKey||n.altKey||39!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||37!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||39!=n.which||(r.moveDown(),l=!0):(r.moveUp(),a=!0,l=!0):(r.parent.moveFocusNextChild(r),l=!0):(r.parent.moveFocusPrevChild(r),l=!0):n.ctrlKey||n.shiftKey||n.altKey||38!=n.which?n.ctrlKey||n.shiftKey||n.altKey||40!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||38!=n.which?!n.ctrlKey||n.shiftKey||n.altKey||40!=n.which||(r.moveDown(),l=!0):(r.moveUp(),a=!0,l=!0):(r.parent.moveFocusNextChild(r),l=!0):(r.parent.moveFocusPrevChild(r),l=!0)),l&&n.preventDefault(),n.stopPropagation(),e.$apply(),a&&window.setTimeout(function(){e.$apply(function(){r.editor.focusedElement.setIsFocused()})},100)}}),e.element.setIsFocusedEventHandlers.push(function(){o.parent().focus()}),e.delete=function(e){e.delete(),$.event.trigger({type:"layouteditor:edited"})},e.element.hasEditor&&(e.edit=function(){e.$root.editElement(e.element).done(function(t){e.$apply(function(){t.cancel||(e.element.data=t.element.data,e.element.applyElementEditorModel(t.elementEditorModel),e.element.setHtml&&e.element.setHtml(t.element.html))})})})},configureForContainer:function(t,o){var n=t.element;t.getShowChildrenPlaceholder=function(){return 0===t.element.children.length&&!t.element.getIsDropTarget()},t.sortableOptions={cursor:"move",delay:150,disabled:n.getIsSealed(),distance:5,start:function(e,o){t.$apply(function(){n.setIsDropTarget(!0),n.editor.isDragging=!0}),o.placeholder.height(o.item.height()-4),o.placeholder.css("min-height",0)},stop:function(e,o){t.$apply(function(){n.editor.isDragging=!1,n.setIsDropTarget(!1)})},over:function(t,l){l.sender&&l.sender[0].isToolbox&&(l.sender[0].dropTargetTimeout&&(e.cancel(l.sender[0].dropTargetTimeout),l.sender[0].dropTargetTimeout=null),e(function(){if("Row"==n.type){var e=n.editor.dropTargetElement;e&&"Row"==e.type&&e.rollbackAddColumn()}n.setIsDropTarget(!1)}),l.sender[0].dropTargetTimeout=e(function(){if("Row"==n.type){var e=l.item.sortable.model,t=Math.floor(12/(n.children.length+1));e.width=t,e.offset=0,n.beginAddColumn(t);var a=_.max(_(o.find("> .layout-children > .layout-column:not(.ui-sortable-placeholder)")).map(function(e){return $(e).height()}));for(i=1;i<=12;i++)l.placeholder.removeClass("col-xs-"+i);l.placeholder.addClass("col-xs-"+e.width),a>0?(l.placeholder.height(a),l.placeholder.css("min-height",0)):(l.placeholder.height(0),l.placeholder.css("min-height",""))}n.setIsDropTarget(!0)},150))},receive:function(o,l){l.sender&&l.sender[0].isToolbox&&t.$apply(function(){var o=l.item.sortable.model;o&&("Row"==n.type&&n.commitAddColumn(),o.setEditor(n.editor),o.setParent(n),o.hasEditor&&t.$root.editElement(o).done(function(t){t.cancel||(o.data=t.element.data,o.applyElementEditorModel(t.elementEditorModel),o.setHtml&&o.setHtml(t.element.html)),e(function(){t.cancel?o.delete():o.setIsFocused(),n.setIsDropTarget(!1)})})),e(function(){n.setIsDropTarget(!1),o&&o.setIsFocused(),t.$root.addElement(o).done(function(){})})})}},t.click=function(e,t){e.editor.isDragging||e.setIsFocused(),t.stopPropagation()},t.getClasses=function(e){var t=["layout-element"];return e.children&&(t.push("layout-container"),e.getIsSealed()&&t.push("layout-container-sealed")),t.push("layout-"+e.type.toLowerCase()),e.dropTargetClass&&t.push(e.dropTargetClass),"Row"==e.type&&(t.push("row"),e.canAddColumn()||t.push("layout-row-full")),"Column"==e.type&&(t.push("col-xs-"+e.width),t.push("col-xs-offset-"+e.offset)),"Content"==e.type&&t.push("layout-content-"+e.contentTypeClass),e.getIsActive()&&t.push("layout-element-active"),e.getIsFocused()&&t.push("layout-element-focused"),e.getIsSelected()&&t.push("layout-element-selected"),e.getIsDropTarget()&&t.push("layout-element-droptarget"),e.isTemplated&&t.push("layout-element-templated"),t}}}}]),angular.module("LayoutEditor").directive("orcLayoutEditor",["environment",function(environment){return{restrict:"E",scope:{},controller:["$scope","$element","$attrs","$compile","clipboard",function($scope,$element,$attrs,$compile,clipboard){if(!$attrs.model)throw new Error("The 'model' attribute must evaluate to a LayoutEditor.Editor object.");$scope.element=eval($attrs.model),$scope.click=function(e,t){e.editor.isDragging||e.setIsFocused(),t.stopPropagation()},$scope.getClasses=function(e){var t=["layout-element","layout-container","layout-canvas"];return e.getIsActive()&&t.push("layout-element-active"),e.getIsFocused()&&t.push("layout-element-focused"),e.getIsSelected()&&t.push("layout-element-selected"),e.getIsDropTarget()&&t.push("layout-element-droptarget"),e.isTemplated&&t.push("layout-element-templated"),t};var layoutDesignerHost=$(".layout-designer").data("layout-designer-host");$scope.$root.layoutDesignerHost=layoutDesignerHost,layoutDesignerHost.element.on("replacecanvas",function(e,t){var o=$scope.element,n={data:t.canvas.data,htmlId:t.canvas.htmlId,htmlClass:t.canvas.htmlClass,htmlStyle:t.canvas.htmlStyle,isTemplated:t.canvas.isTemplated,children:t.canvas.children};layoutDesignerHost.editor=window.layoutEditor=new LayoutEditor.Editor(o.config,n);var l="",a=$compile(l)($scope);$(".layout-editor-holder").html(a)}),$scope.$root.editElement=function(e){var t=$scope.$root.layoutDesignerHost;return t.editElement(e)},$scope.$root.addElement=function(e){var t=$scope.$root.layoutDesignerHost;return t.addElement(e)},$(document).on("cut copy paste",function(e){if(clipboard.wasInvoked())e.originalEvent.clipboardData.setData("text/plain",clipboard.getData("text/plain")),e.originalEvent.clipboardData.setData("text/json",clipboard.getData("text/json")),e.preventDefault();else{var t=$scope.element.focusedElement;t&&($scope.$apply(function(){switch(e.type){case"copy":t.copy(e.originalEvent.clipboardData);break;case"cut":t.cut(e.originalEvent.clipboardData);break;case"paste":t.paste(e.originalEvent.clipboardData),$.event.trigger({type:"layouteditor:edited"})}}),window.setTimeout(function(){$scope.$apply(function(){$scope.element.focusedElement&&$scope.element.focusedElement.setIsFocused()})},100),e.preventDefault())}clipboard.disable()})}],templateUrl:environment.templateUrl("Editor"),replace:!0,link:function(e,t){t.find(".layout-toolbar-container").click(function(e){e.stopPropagation()}),$(window).click(function(t){e.$apply(function(){e.element.activeElement=null,e.element.focusedElement=null})})}}}]),angular.module("LayoutEditor").directive("orcLayoutCanvas",["scopeConfigurator","environment",function(e,t){return{restrict:"E",scope:{element:"="},controller:["$scope","$element","$attrs",function(t,o,n){e.configureForElement(t,o),e.configureForContainer(t,o),t.sortableOptions.axis="y"}],templateUrl:t.templateUrl("Canvas"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutChild",["$compile",function(e){return{restrict:"E",scope:{element:"="},link:function(t,o){var n="",l=e(n)(t);$(o).replaceWith(l)}}}]),angular.module("LayoutEditor").directive("orcLayoutColumn",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="y"}],templateUrl:o.templateUrl("Column"),replace:!0,link:function(e,t,o){t.find(".layout-column-resize-bar").draggable({axis:"x",helper:"clone",revert:!0,start:function(t,o){e.$apply(function(){e.element.editor.isResizing=!0})},drag:function(o,n){var l=t.parent(),a=l.width()/e.element.width,r=!o.ctrlKey;if($(o.target).hasClass("layout-column-resize-bar-left")){var i=n.offset.left-l.offset().left;i<-a&&e.element.canExpandLeft(r)?e.$apply(function(){e.element.expandLeft(r)}):i>a&&e.element.canContractLeft(r)&&e.$apply(function(){e.element.contractLeft(r)})}else if($(o.target).hasClass("layout-column-resize-bar-right")){var i=n.offset.left-l.width()-l.offset().left;i>a&&e.element.canExpandRight(r)?e.$apply(function(){e.element.expandRight(r)}):i<-a&&e.element.canContractRight(r)&&e.$apply(function(){e.element.contractRight(r)})}},stop:function(t,o){e.$apply(function(){e.element.editor.isResizing=!1})}})}}}]),angular.module("LayoutEditor").directive("orcLayoutContent",["$sce","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(o,n){t.configureForElement(o,n),o.element.setHtml=function(t){o.element.html=t,o.element.htmlUnsafe=e.trustAsHtml(t)},o.element.setHtml(o.element.html)}],templateUrl:o.templateUrl("Content"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutGrid",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="y"}],templateUrl:o.templateUrl("Grid"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutRow",["$compile","scopeConfigurator","environment",function(e,t,o){return{restrict:"E",scope:{element:"="},controller:["$scope","$element",function(e,o){t.configureForElement(e,o),t.configureForContainer(e,o),e.sortableOptions.axis="x",e.sortableOptions["ui-floating"]=!0}],templateUrl:o.templateUrl("Row"),replace:!0}}]),angular.module("LayoutEditor").directive("orcLayoutPopup",[function(){return{restrict:"A",link:function(e,t,o){var n=$(t),l=n.closest(".layout-popup-trigger"),a=n.closest(".layout-element");l.click(function(){n.toggle(),n.is(":visible")&&(n.position({my:o.orcLayoutPopupMy||"left top",at:o.orcLayoutPopupAt||"left bottom+4px",of:l}),n.find("input").first().focus())}),n.click(function(e){e.stopPropagation()}),a.click(function(e){n.hide()}),n.keydown(function(e){e.ctrlKey||e.shiftKey||e.altKey||27!=e.which||n.hide(),e.stopPropagation()}),n.on("cut copy paste",function(e){e.stopPropagation()})}}}]),angular.module("LayoutEditor").directive("orcLayoutToolbox",["$compile","environment",function(e,t){return{restrict:"E",controller:["$scope","$element",function(e,t){e.resetElements=function(){e.gridElements=[LayoutEditor.Grid.from({toolboxIcon:"",toolboxLabel:"Grid",toolboxDescription:"Empty grid.",children:[]})],e.rowElements=[LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (1 column)",toolboxDescription:"Row with 1 column.",children:LayoutEditor.Column.times(1)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (2 columns)",toolboxDescription:"Row with 2 columns.",children:LayoutEditor.Column.times(2)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (3 columns)",toolboxDescription:"Row with 3 columns.",children:LayoutEditor.Column.times(3)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (4 columns)",toolboxDescription:"Row with 4 columns.",children:LayoutEditor.Column.times(4)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (6 columns)",toolboxDescription:"Row with 6 columns.",children:LayoutEditor.Column.times(6)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (12 columns)",toolboxDescription:"Row with 12 columns.",children:LayoutEditor.Column.times(12)}),LayoutEditor.Row.from({toolboxIcon:"",toolboxLabel:"Row (empty)",toolboxDescription:"Empty row.",children:[]})],e.columnElements=[LayoutEditor.Column.from({toolboxIcon:"",toolboxLabel:"Column",toolboxDescription:"Empty column.",width:1,offset:0,children:[]})],e.canvasElements=[LayoutEditor.Canvas.from({toolboxIcon:"",toolboxLabel:"Canvas",toolboxDescription:"Empty canvas.",children:[]})],e.contentElementCategories=_(e.element.config.categories).map(function(e){return{name:e.name,elements:_(e.contentTypes).map(function(e){var t=e.type,o=LayoutEditor.factories[t]||LayoutEditor.factories.Content,n={isTemplated:!1,contentType:e.id,contentTypeLabel:e.label,contentTypeClass:e.typeClass,data:null,hasEditor:e.hasEditor,html:e.html},l=o(n);return l.toolboxIcon=e.icon||"",l.toolboxLabel=e.label,l.toolboxDescription=e.description,l})}})},e.resetElements(),e.getSortableOptions=function(o){var n,l,a=t.closest(".layout-editor").attr("id"),r=!1;switch(o){case"Grid":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-container layout-grid ui-sortable-placeholder";break;case"Row":n=[".layout-grid"],l="layout-element layout-container layout-row row ui-sortable-placeholder";break;case"Column":n=[".layout-row:not(.layout-row-full)"],l="layout-element layout-container layout-column ui-sortable-placeholder",r=!0;break;case"Content":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-content ui-sortable-placeholder";break;case"Canvas":n=[".layout-canvas",".layout-column",".layout-common-holder"],l="layout-element layout-container layout-grid ui-sortable-placeholder"}return{cursor:"move",connectWith:_(n).map(function(e){return"#"+a+" "+e+":not(.layout-container-sealed) > .layout-element-wrapper > .layout-children"}).join(", "),placeholder:l,"ui-floating":r,helper:"clone",appendTo:"body",create:function(e,t){e.target.isToolbox=!0},start:function(t,o){e.$apply(function(){e.element.isDragging=!0})},stop:function(t,o){e.$apply(function(){e.element.isDragging=!1,e.resetElements()})},over:function(t,o){e.$apply(function(){e.element.canvas.setIsDropTarget(!1)})}}};var o="layoutToolboxCategory_Layout_IsCollapsed";e.layoutIsCollapsed="true"===$.cookie(o),e.toggleLayoutIsCollapsed=function(t){e.layoutIsCollapsed=!e.layoutIsCollapsed,$.cookie(o,e.layoutIsCollapsed,{expires:365}),t.preventDefault(),t.stopPropagation()}}],templateUrl:t.templateUrl("Toolbox"),replace:!0,link:function(e,t){var o=t.find(".layout-toolbox");$(window).on("resize scroll",function(e){var n=t.parent().find(".layout-canvas"),l=!!n&&n.height()>o.height(),a=$(window).scrollTop();l&&a>t.offset().top+t.height()-o.height()?(o.addClass("sticky-bottom"),o.removeClass("sticky-top")):l&&a>t.offset().top?(o.addClass("sticky-top"),o.removeClass("sticky-bottom")):(o.removeClass("sticky-top"),o.removeClass("sticky-bottom"))})}}}]),angular.module("LayoutEditor").directive("orcLayoutToolboxGroup",["$compile","environment",function(e,t){return{restrict:"E",scope:{category:"="},controller:["$scope","$element",function(e,t){var o="layoutToolboxCategory_"+e.category.name+"_IsCollapsed";e.isCollapsed="true"===$.cookie(o),e.toggleIsCollapsed=function(t){e.isCollapsed=!e.isCollapsed,$.cookie(o,e.isCollapsed,{expires:365}),t.preventDefault(),t.stopPropagation()}}],templateUrl:t.templateUrl("ToolboxGroup"),replace:!0}}]); diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/Models.js b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/Models.js index eb37f43b6cf..fef5ef5035c 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/Models.js +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Scripts/Models.js @@ -842,4 +842,4 @@ var LayoutEditor; }; })(LayoutEditor || (LayoutEditor = {})); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9yY2hhcmQuV2ViL01vZHVsZXMvT3JjaGFyZC5MYXlvdXRzL0Fzc2V0cy9KYXZhU2NyaXB0L01vZGVscy9IZWxwZXJzLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTW9kZWxzL0VkaXRvci5qcyIsIk9yY2hhcmQuV2ViL01vZHVsZXMvT3JjaGFyZC5MYXlvdXRzL0Fzc2V0cy9KYXZhU2NyaXB0L01vZGVscy9SZWN5Y2xlQmluLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTW9kZWxzL0VsZW1lbnQuanMiLCJPcmNoYXJkLldlYi9Nb2R1bGVzL09yY2hhcmQuTGF5b3V0cy9Bc3NldHMvSmF2YVNjcmlwdC9Nb2RlbHMvQ29udGFpbmVyLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTW9kZWxzL0NhbnZhcy5qcyIsIk9yY2hhcmQuV2ViL01vZHVsZXMvT3JjaGFyZC5MYXlvdXRzL0Fzc2V0cy9KYXZhU2NyaXB0L01vZGVscy9HcmlkLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTW9kZWxzL1Jvdy5qcyIsIk9yY2hhcmQuV2ViL01vZHVsZXMvT3JjaGFyZC5MYXlvdXRzL0Fzc2V0cy9KYXZhU2NyaXB0L01vZGVscy9Db2x1bW4uanMiLCJPcmNoYXJkLldlYi9Nb2R1bGVzL09yY2hhcmQuTGF5b3V0cy9Bc3NldHMvSmF2YVNjcmlwdC9Nb2RlbHMvQ29udGVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUksWUFBWSxDQUFDO0FBQ2pCLENBQUMsVUFBVSxZQUFZO0lBRW5CLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFVBQVUsSUFBSSxFQUFFLEVBQUU7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQyxDQUFDO0lBRUYsWUFBWSxDQUFDLFlBQVksR0FBRyxVQUFTLE1BQU07UUFDdkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBUyxLQUFLO1lBQy9CLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO0lBRUYsSUFBSSxlQUFlLEdBQUcsWUFBWSxDQUFDLGVBQWUsR0FBRyxVQUFTLElBQUksRUFBRSxPQUFPO1FBQ3ZFLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDdEUsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUM5QixDQUFDLENBQUM7SUFFRixlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLGVBQWUsQ0FBQyxNQUFNLEVBQUUsVUFBUyxLQUFLLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkYsZUFBZSxDQUFDLEtBQUssRUFBRSxVQUFTLEtBQUssSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRixlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLGVBQWUsQ0FBQyxTQUFTLEVBQUUsVUFBUyxLQUFLLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekYsWUFBWSxDQUFDLFdBQVcsR0FBRyxVQUFVLEtBQUs7UUFDdEMsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFakQsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFFOUUsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBRUYsWUFBWSxDQUFDLFFBQVEsR0FBRyxVQUFVLGVBQWUsRUFBRSxLQUFLO1FBQ3BELENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQy9DLENBQUMsQ0FBQztJQUVGLFlBQVksQ0FBQyxRQUFRLEdBQUcsVUFBVSxlQUFlO1FBQzdDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDO0lBQzlDLENBQUMsQ0FBQztBQUVOLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FDMUN4QyxJQUFJLFlBQVksQ0FBQztBQUNqQixDQUFDLFVBQVUsWUFBWTtJQUVuQixZQUFZLENBQUMsTUFBTSxHQUFHLFVBQVUsTUFBTSxFQUFFLFVBQVU7UUFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVoRCxJQUFJLENBQUMsb0JBQW9CLEdBQUc7WUFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRztnQkFDbkIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQ2xCLFFBQVEsRUFBRSxFQUFFO2lCQUNmLENBQUM7YUFDTCxDQUFDO1FBQ04sQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNYLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzFELE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQztRQUM3QyxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUM7QUFFTixDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQy9CeEMsSUFBSSxZQUFZLENBQUM7QUFDakIsQ0FBQyxVQUFVLFlBQVk7SUFFbkIsWUFBWSxDQUFDLFVBQVUsR0FBRztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVuQixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVMsT0FBTztZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ1osSUFBSSxNQUFNLEdBQUc7Z0JBQ1QsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLFFBQVEsRUFBRSxFQUFFO2FBQ2YsQ0FBQztZQUVGLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7QUFFTixDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQzFCeEMsSUFBSSxZQUFZLENBQUM7QUFDakIsQ0FBQyxVQUFVLFlBQVk7SUFFbkIsWUFBWSxDQUFDLE9BQU8sR0FBRyxVQUFVLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUk7UUFDeEYsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFFckQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWpCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxFQUFFLENBQUM7UUFFcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLE1BQU07WUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUs7b0JBQ2pDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzVCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBUyxhQUFhO1lBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO1lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRS9CLElBQUksZUFBZSxHQUFHLGFBQWEsQ0FBQztZQUNwQyxPQUFPLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsZUFBZSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDdkQsZUFBZSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDN0MsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxLQUFLO1lBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLO29CQUNqQyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsY0FBMkIsQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDZixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RFLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxLQUFLO1lBQzlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDYixNQUFNLENBQUM7WUFDWCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztnQkFDakQsTUFBTSxDQUFDO1lBRVgsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUNyQyxJQUFJO2dCQUNBLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDaEQsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNoQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEtBQUssSUFBSSxDQUFDO1FBQy9DLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDaEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNoQixNQUFNLENBQUM7WUFDUixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDdEMsTUFBTSxDQUFDO1lBQ1IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQ2pELE1BQU0sQ0FBQztZQUVYLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUNsQyxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSTtnQkFDakQsSUFBSSxDQUFDO29CQUNELElBQUksRUFBRSxDQUFDO2dCQUNYLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFFWixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQztZQUVoQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFTLEtBQUs7b0JBQ3RDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUVELE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNuQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLENBQUM7UUFDbEQsQ0FBQyxDQUFBO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLEtBQUs7WUFDbEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNiLE1BQU0sQ0FBQztZQUNYLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUN6QyxJQUFJO2dCQUNBLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzdDLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDYixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDakMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFNLENBQUEsR0FBRztZQUNWLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNsQixNQUFNLENBQUM7WUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDVixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNuQixNQUFNLENBQUM7Z0JBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzthQUM1QixDQUFDO1FBQ04sQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNuQixNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNaLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLGFBQWE7WUFDL0IsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQy9CLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLGFBQWE7WUFDOUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFFBQU0sQ0FBQSxFQUFFLENBQUM7WUFDbEIsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxhQUFhO1lBQ2hDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUNyQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztZQUN2QyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFFYixHQUFHLENBQUMsQ0FBQyxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixHQUFHLElBQUksUUFBUSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ25ELENBQUM7WUFFRCxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ2YsQ0FBQyxDQUFBO0lBQ0wsQ0FBQyxDQUFDO0FBRU4sQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUN0TnhDLElBQUksWUFBWSxDQUFDO0FBQ2pCLENBQUMsVUFBVSxZQUFZO0lBRW5CLFlBQVksQ0FBQyxTQUFTLEdBQUcsVUFBVSxpQkFBaUIsRUFBRSxRQUFRO1FBRTFELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxDQUFDO1FBRWxDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUVoQixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsT0FBTyxJQUFrQixDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsT0FBTyxFQUFFLGFBQWEsSUFBa0IsQ0FBQyxDQUFDO1FBRTdFLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxRQUFRO1lBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSztnQkFDakMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFM0IsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNmLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEtBQUs7Z0JBQ3ZDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDO1FBRUYsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuQixNQUFNLENBQUM7WUFDWCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEtBQUs7WUFDM0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDN0csSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxLQUFLO1lBQzlCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDckMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkIsb0dBQW9HO29CQUNwRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7d0JBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO3dCQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUM1QyxJQUFJO3dCQUNBLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDNUIsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxLQUFLO1lBQ3JDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDekIsTUFBTSxDQUFDO1lBQ1gsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDVixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNoRCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxLQUFLO1lBQ3JDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDekIsTUFBTSxDQUFDO1lBQ1gsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEQsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLEtBQUssRUFBRSxVQUFVO1lBQzFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDMUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdCLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsS0FBSztZQUM5QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQztZQUNYLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDckMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQ1osSUFBSSxFQUFFLHFCQUFxQjthQUM5QixDQUFDLENBQUM7UUFDUCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsS0FBSztZQUNoQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxDQUFDO1lBQ1gsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNyQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDWixJQUFJLEVBQUUscUJBQXFCO2FBQzlCLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxLQUFLO1lBQ2pDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLEtBQUs7WUFDbkMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGdCQUFnQixHQUFHO1lBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEtBQUs7Z0JBQ3ZDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxLQUFLO2dCQUNoRCxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDOUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFBO1FBRUQsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLGFBQWE7WUFDaEMsSUFBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5QyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDVCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1QixJQUFJLEtBQUssR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsS0FBSztZQUM3QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckIsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pCLENBQUM7WUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQTtRQUVELElBQUksQ0FBQywwQkFBMEIsR0FBRztZQUM5QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUFDO1lBQ2hELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUViLEdBQUcsQ0FBQyxDQUFDLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLEdBQUcsSUFBSSxRQUFRLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDbkQsQ0FBQztZQUVELE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDZixDQUFDLENBQUE7SUFDTCxDQUFDLENBQUM7QUFFTixDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQ2pLeEMsSUFBSSxZQUFZLENBQUM7QUFDakIsQ0FBQyxVQUFVLFlBQVk7SUFFbkIsWUFBWSxDQUFDLE1BQU0sR0FBRyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVE7UUFDM0YsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pHLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFM0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFFMUIsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNaLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNwQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0lBRUYsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsVUFBVSxLQUFLO1FBQ3RDLElBQUksTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FDaEMsS0FBSyxDQUFDLElBQUksRUFDVixLQUFLLENBQUMsTUFBTSxFQUNaLEtBQUssQ0FBQyxTQUFTLEVBQ2YsS0FBSyxDQUFDLFNBQVMsRUFDZixLQUFLLENBQUMsV0FBVyxFQUNqQixLQUFLLENBQUMsSUFBSSxFQUNWLFlBQVksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFL0MsTUFBTSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUN6QyxNQUFNLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1FBRXJELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0FBRU4sQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUNqQ3hDLElBQUksWUFBWSxDQUFDO0FBQ2pCLENBQUMsVUFBVSxZQUFZO0lBRW5CLFlBQVksQ0FBQyxJQUFJLEdBQUcsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxRQUFRO1FBQ3pGLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvRixZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ1osSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7SUFFRixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLEtBQUs7UUFDcEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUM5QixLQUFLLENBQUMsSUFBSSxFQUNWLEtBQUssQ0FBQyxNQUFNLEVBQ1osS0FBSyxDQUFDLFNBQVMsRUFDZixLQUFLLENBQUMsU0FBUyxFQUNmLEtBQUssQ0FBQyxXQUFXLEVBQ2pCLEtBQUssQ0FBQyxJQUFJLEVBQ1YsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMvQyxNQUFNLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDdkMsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQixDQUFDLENBQUM7QUFFTixDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQzdCeEMsSUFBSSxZQUFZLENBQUM7QUFDakIsQ0FBQyxVQUFVLFlBQVk7SUFFbkIsWUFBWSxDQUFDLEdBQUcsR0FBRyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVE7UUFDeEYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlGLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXhELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUVqQjtZQUNJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxLQUFLO2dCQUNqRCxNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUM3QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDVixDQUFDO1FBRUQsa0ZBQWtGO1FBQ2xGLGtGQUFrRjtRQUNsRixrRkFBa0Y7UUFDbEYsMkVBQTJFO1FBQzNFLDBCQUEwQixLQUFLO1lBQzNCLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQztZQUVoQixJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQztZQUUvQixFQUFFLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixJQUFJLFdBQVcsR0FBRyxFQUFFLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztnQkFDL0Msa0JBQWtCLElBQUksV0FBVyxDQUFDO2dCQUNsQyxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7b0JBQ3ZCLGtCQUFrQixHQUFHLENBQUMsQ0FBQztZQUMvQixDQUFDO1lBRUQsdURBQXVEO1lBQ3ZELE9BQU8sa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLGtCQUFrQixHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNuRSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMvQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3BCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDaEIsa0JBQWtCLEVBQUUsQ0FBQztvQkFDekIsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztZQUVELGtCQUFrQixNQUFNO2dCQUNwQixFQUFFLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7b0JBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztvQkFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2pCLENBQUM7WUFFRCxrRkFBa0Y7WUFDbEYsT0FBTyxrQkFBa0IsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDN0Isb0RBQW9EO2dCQUNwRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNqQyxLQUFLLENBQUM7Z0JBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksa0JBQWtCLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ3BFLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3ZELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ25CLElBQUksS0FBSyxHQUFHLGtCQUFrQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQzt3QkFDOUQsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7d0JBQ3RCLGtCQUFrQixJQUFJLEtBQUssQ0FBQztvQkFDaEMsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztZQUVELE1BQU0sQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUVELElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUU1QixJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDckMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLGNBQWM7WUFDMUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztnQkFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFBO1lBQ25FLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsTUFBTTtnQkFDbEMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDaEIsQ0FBQztZQUNELENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsTUFBTTtnQkFDbEMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxHQUFHO1lBQ25CLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO2dCQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUE7WUFDM0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxNQUFNO2dCQUNsQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7WUFDSCxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzVCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUNyQixFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztnQkFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFBO1lBQzNELENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsTUFBTTtnQkFDbEMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM1QixDQUFDLENBQUM7UUFFRixJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLE1BQU07WUFDL0IsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN6QixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLE1BQU0sRUFBRSxlQUFlO1lBQzNELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ1gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFVBQVUsTUFBTSxFQUFFLGVBQWU7WUFDeEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNLENBQUM7WUFFWCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDYixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ25CLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDZixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDbkMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQzFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQzs0QkFDMUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUN2QixJQUFJOzRCQUNBLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDNUIsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxVQUFVLE1BQU0sRUFBRSxlQUFlO1lBQ3pELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNiLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQzt3QkFDMUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUNoQyxJQUFJO3dCQUNBLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDckMsQ0FBQztnQkFDRCxNQUFNLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsQ0FBQztZQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsTUFBTSxFQUFFLGVBQWU7WUFDdEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNLENBQUM7WUFFWCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDYixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQzt3QkFDMUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUN2QixJQUFJO3dCQUNBLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUIsQ0FBQztnQkFDRCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLE1BQU0sRUFBRSxlQUFlO1lBQ3hELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNiLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNqQixFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDWixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDMUMsRUFBRSxDQUFDLENBQUMsZUFBZSxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO3dCQUN0QyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7Z0JBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLE1BQU0sRUFBRSxlQUFlO1lBQ3JELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFDbkQsTUFBTSxDQUFDO1lBRVgsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ1osSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQzt3QkFDdEMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUN2QixJQUFJO3dCQUNBLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztnQkFDRCxJQUFJO29CQUNBLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMscUJBQXFCLEdBQUcsVUFBVSxNQUFNLEVBQUUsZUFBZTtZQUMxRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO2dCQUNYLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM1QixNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLE1BQU0sRUFBRSxlQUFlO1lBQ3ZELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFDckQsTUFBTSxDQUFDO1lBRVgsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ1osSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQzt3QkFDdEMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUN2QixJQUFJO3dCQUNBLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztnQkFDRCxJQUFJO29CQUNBLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO2dCQUMxQixNQUFNLENBQUM7WUFFWCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsTUFBTTtnQkFDbEMsTUFBTSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7Z0JBQ3pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3JDLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ1QsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDO1FBRUYsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsS0FBSztZQUM3QixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUN2QixlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtnQkFDckMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQTtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDcEMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztJQUVGLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLFVBQVUsS0FBSztRQUNuQyxJQUFJLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQzdCLEtBQUssQ0FBQyxJQUFJLEVBQ1YsS0FBSyxDQUFDLE1BQU0sRUFDWixLQUFLLENBQUMsU0FBUyxFQUNmLEtBQUssQ0FBQyxTQUFTLEVBQ2YsS0FBSyxDQUFDLFdBQVcsRUFDakIsS0FBSyxDQUFDLElBQUksRUFDVixZQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUN2QyxNQUFNLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDekMsTUFBTSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztBQUVOLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FDN1J4QyxJQUFJLFlBQVksQ0FBQztBQUNqQixDQUFDLFVBQVUsWUFBWTtJQUNuQixZQUFZLENBQUMsTUFBTSxHQUFHLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUTtRQUN2SCxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBRS9CLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNmLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQzVELGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUN6QixVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUN4QixXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM5QixDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2hCLEVBQUUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7Z0JBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUNyRCxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNoQixpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsR0FBRztZQUNsQixFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7WUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFDMUIsVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNmLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDaEIsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUNqQixNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1QsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sQ0FBQztZQUVYLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoRCxJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDckMsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsTUFBTSxFQUFFLElBQUk7Z0JBQ1osU0FBUyxFQUFFLElBQUk7Z0JBQ2YsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLE1BQU0sRUFBRSxDQUFDO2dCQUNULFFBQVEsRUFBRSxFQUFFO2FBQ2YsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQztZQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLGVBQWU7WUFDN0MsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLGVBQWU7WUFDMUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQztZQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxlQUFlO1lBQzNDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ2pCLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxlQUFlO1lBQ3hDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLGVBQWU7WUFDMUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLGVBQWU7WUFDdkMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLENBQUM7WUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsZUFBZTtZQUM1QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUNqQixNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsZUFBZTtZQUN6QyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQztZQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDcEMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM1QixNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDdEMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztJQUVGLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsS0FBSztRQUN0QyxJQUFJLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQ2hDLEtBQUssQ0FBQyxJQUFJLEVBQ1YsS0FBSyxDQUFDLE1BQU0sRUFDWixLQUFLLENBQUMsU0FBUyxFQUNmLEtBQUssQ0FBQyxTQUFTLEVBQ2YsS0FBSyxDQUFDLFdBQVcsRUFDakIsS0FBSyxDQUFDLEtBQUssRUFDWCxLQUFLLENBQUMsTUFBTSxFQUNaLEtBQUssQ0FBQyxXQUFXLEVBQ2pCLEtBQUssQ0FBQyxJQUFJLEVBQ1YsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMvQyxNQUFNLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDdkMsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQixDQUFDLENBQUM7SUFFRixZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxVQUFVLEtBQUs7UUFDdkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQztZQUM3QixNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQzVCLElBQUksRUFBRSxJQUFJO2dCQUNWLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFdBQVcsRUFBRSxLQUFLO2dCQUNsQixLQUFLLEVBQUUsRUFBRSxHQUFHLEtBQUs7Z0JBQ2pCLE1BQU0sRUFBRSxDQUFDO2dCQUNULFdBQVcsRUFBRSxJQUFJO2dCQUNqQixRQUFRLEVBQUUsRUFBRTthQUNmLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUM1SnhDLElBQUksWUFBWSxDQUFDO0FBQ2pCLENBQUMsVUFBVSxZQUFZO0lBRW5CLFlBQVksQ0FBQyxPQUFPLEdBQUcsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUk7UUFDcEosWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWxHLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFFM0IsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNoQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqRSxDQUFDLENBQUM7UUFFRiw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLElBQUk7WUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDM0IsQ0FBQyxDQUFBO1FBRUQsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ1osSUFBSSxNQUFNLEdBQUcsWUFBWSxFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUNoRCxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ2hELE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkIsQ0FBQyxDQUFDO0lBRUYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsVUFBVSxLQUFLO1FBQ3ZDLElBQUksTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FDakMsS0FBSyxDQUFDLElBQUksRUFDVixLQUFLLENBQUMsTUFBTSxFQUNaLEtBQUssQ0FBQyxTQUFTLEVBQ2YsS0FBSyxDQUFDLFNBQVMsRUFDZixLQUFLLENBQUMsV0FBVyxFQUNqQixLQUFLLENBQUMsV0FBVyxFQUNqQixLQUFLLENBQUMsZ0JBQWdCLEVBQ3RCLEtBQUssQ0FBQyxnQkFBZ0IsRUFDdEIsS0FBSyxDQUFDLElBQUksRUFDVixLQUFLLENBQUMsU0FBUyxFQUNmLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQixNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztBQUVOLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDIiwiZmlsZSI6Ik1vZGVscy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgQXJyYXkucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcclxuICAgICAgICB0aGlzLnNwbGljZSh0bywgMCwgdGhpcy5zcGxpY2UoZnJvbSwgMSlbMF0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuY2hpbGRyZW5Gcm9tID0gZnVuY3Rpb24odmFsdWVzKSB7XHJcbiAgICAgICAgcmV0dXJuIF8odmFsdWVzKS5tYXAoZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIExheW91dEVkaXRvci5lbGVtZW50RnJvbSh2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciByZWdpc3RlckZhY3RvcnkgPSBMYXlvdXRFZGl0b3IucmVnaXN0ZXJGYWN0b3J5ID0gZnVuY3Rpb24odHlwZSwgZmFjdG9yeSkge1xyXG4gICAgICAgIHZhciBmYWN0b3JpZXMgPSBMYXlvdXRFZGl0b3IuZmFjdG9yaWVzID0gTGF5b3V0RWRpdG9yLmZhY3RvcmllcyB8fCB7fTtcclxuICAgICAgICBmYWN0b3JpZXNbdHlwZV0gPSBmYWN0b3J5O1xyXG4gICAgfTtcclxuXHJcbiAgICByZWdpc3RlckZhY3RvcnkoXCJDYW52YXNcIiwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBMYXlvdXRFZGl0b3IuQ2FudmFzLmZyb20odmFsdWUpOyB9KTtcclxuICAgIHJlZ2lzdGVyRmFjdG9yeShcIkdyaWRcIiwgZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIExheW91dEVkaXRvci5HcmlkLmZyb20odmFsdWUpOyB9KTtcclxuICAgIHJlZ2lzdGVyRmFjdG9yeShcIlJvd1wiLCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHZhbHVlKTsgfSk7XHJcbiAgICByZWdpc3RlckZhY3RvcnkoXCJDb2x1bW5cIiwgZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIExheW91dEVkaXRvci5Db2x1bW4uZnJvbSh2YWx1ZSk7IH0pO1xyXG4gICAgcmVnaXN0ZXJGYWN0b3J5KFwiQ29udGVudFwiLCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gTGF5b3V0RWRpdG9yLkNvbnRlbnQuZnJvbSh2YWx1ZSk7IH0pO1xyXG5cclxuICAgIExheW91dEVkaXRvci5lbGVtZW50RnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciBmYWN0b3J5ID0gTGF5b3V0RWRpdG9yLmZhY3Rvcmllc1t2YWx1ZS50eXBlXTtcclxuXHJcbiAgICAgICAgaWYgKCFmYWN0b3J5KVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBlbGVtZW50IHdpdGggdHlwZSBcXFwiXCIgKyB2YWx1ZS50eXBlICsgXCJcXFwiIHdhcyBmb3VuZC5cIik7XHJcblxyXG4gICAgICAgIHZhciBlbGVtZW50ID0gZmFjdG9yeSh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9O1xyXG5cclxuICAgIExheW91dEVkaXRvci5zZXRNb2RlbCA9IGZ1bmN0aW9uIChlbGVtZW50U2VsZWN0b3IsIG1vZGVsKSB7XHJcbiAgICAgICAgJChlbGVtZW50U2VsZWN0b3IpLnNjb3BlKCkuZWxlbWVudCA9IG1vZGVsO1xyXG4gICAgfTtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoZWxlbWVudFNlbGVjdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuICQoZWxlbWVudFNlbGVjdG9yKS5zY29wZSgpLmVsZW1lbnQ7XHJcbiAgICB9O1xyXG5cclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyIsInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkVkaXRvciA9IGZ1bmN0aW9uIChjb25maWcsIGNhbnZhc0RhdGEpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcclxuICAgICAgICB0aGlzLmNhbnZhcyA9IExheW91dEVkaXRvci5DYW52YXMuZnJvbShjYW52YXNEYXRhKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxTdGF0ZSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY2FudmFzLnRvT2JqZWN0KCkpO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kcm9wVGFyZ2V0RWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc1Jlc2l6aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZWN5Y2xlQmluID0gbmV3IExheW91dEVkaXRvci5SZWN5Y2xlQmluKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXRUb29sYm94RWxlbWVudHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9vbGJveEVsZW1lbnRzID0gW1xyXG4gICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNhbnZhcy50b09iamVjdCgpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbFN0YXRlICE9IGN1cnJlbnRTdGF0ZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnJlc2V0VG9vbGJveEVsZW1lbnRzKCk7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2V0RWRpdG9yKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcbn0pKExheW91dEVkaXRvciB8fCAoTGF5b3V0RWRpdG9yID0ge30pKTtcclxuIiwidmFyIExheW91dEVkaXRvcjtcclxuKGZ1bmN0aW9uIChMYXlvdXRFZGl0b3IpIHtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuUmVjeWNsZUJpbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnRzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuYWRkID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy50b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwiUmVjeWNsZUJpblwiLFxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBkdG8gPSBlbGVtZW50LnRvT2JqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuY2hpbGRyZW4ucHVzaChkdG8pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpO1xyXG4iLCJ2YXIgTGF5b3V0RWRpdG9yO1xyXG4oZnVuY3Rpb24gKExheW91dEVkaXRvcikge1xyXG5cclxuICAgIExheW91dEVkaXRvci5FbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUsIGRhdGEsIGh0bWxJZCwgaHRtbENsYXNzLCBodG1sU3R5bGUsIGlzVGVtcGxhdGVkLCBydWxlKSB7XHJcbiAgICAgICAgaWYgKCF0eXBlKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgJ3R5cGUnIGlzIHJlcXVpcmVkLlwiKTtcclxuXHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLmh0bWxJZCA9IGh0bWxJZDtcclxuICAgICAgICB0aGlzLmh0bWxDbGFzcyA9IGh0bWxDbGFzcztcclxuICAgICAgICB0aGlzLmh0bWxTdHlsZSA9IGh0bWxTdHlsZTtcclxuICAgICAgICB0aGlzLmlzVGVtcGxhdGVkID0gaXNUZW1wbGF0ZWQ7XHJcbiAgICAgICAgdGhpcy5ydWxlID0gcnVsZTtcclxuXHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVN0eWxlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuZWRpdG9yID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzZWRFdmVudEhhbmRsZXJzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuc2V0RWRpdG9yID0gZnVuY3Rpb24gKGVkaXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5jaGlsZHJlbiAmJiBfLmlzQXJyYXkodGhpcy5jaGlsZHJlbikpIHtcclxuICAgICAgICAgICAgICAgIF8odGhpcy5jaGlsZHJlbikuZWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZC5zZXRFZGl0b3IoZWRpdG9yKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQYXJlbnQgPSBmdW5jdGlvbihwYXJlbnRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQub25DaGlsZEFkZGVkKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRBbmNlc3RvciA9IHBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHdoaWxlICghIWN1cnJlbnRBbmNlc3Rvcikge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEFuY2VzdG9yLm9uRGVzY2VuZGFudEFkZGVkKHRoaXMsIHBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEFuY2VzdG9yID0gY3VycmVudEFuY2VzdG9yLnBhcmVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SXNUZW1wbGF0ZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1RlbXBsYXRlZCA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoISF0aGlzLmNoaWxkcmVuICYmIF8uaXNBcnJheSh0aGlzLmNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICAgICAgXyh0aGlzLmNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnNldElzVGVtcGxhdGVkKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5hcHBseUVsZW1lbnRFZGl0b3JNb2RlbCA9IGZ1bmN0aW9uKCkgeyAvKiBWaXJ0dWFsICovIH07XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0SXNBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lZGl0b3IpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5hY3RpdmVFbGVtZW50ID09PSB0aGlzICYmICF0aGlzLmdldElzRm9jdXNlZCgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SXNBY3RpdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmVkaXRvcilcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yLmlzRHJhZ2dpbmcgfHwgdGhpcy5lZGl0b3IuaXNSZXNpemluZylcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmFjdGl2ZUVsZW1lbnQgPSB0aGlzO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5hY3RpdmVFbGVtZW50ID0gdGhpcy5wYXJlbnQ7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRJc0ZvY3VzZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lZGl0b3IpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5mb2N1c2VkRWxlbWVudCA9PT0gdGhpcztcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNldElzRm9jdXNlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmVkaXRvcilcclxuICAgICAgICAgICAgXHRyZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGlsZHJlbiAmJiB0aGlzLmlzVGVtcGxhdGVkKVxyXG4gICAgICAgICAgICBcdHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yLmlzRHJhZ2dpbmcgfHwgdGhpcy5lZGl0b3IuaXNSZXNpemluZylcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmZvY3VzZWRFbGVtZW50ID0gdGhpcztcclxuICAgICAgICAgICAgXyh0aGlzLnNldElzRm9jdXNlZEV2ZW50SGFuZGxlcnMpLmVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlLlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmdldElzU2VsZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdldElzRm9jdXNlZCgpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoISF0aGlzLmNoaWxkcmVuICYmIF8uaXNBcnJheSh0aGlzLmNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8odGhpcy5jaGlsZHJlbikuYW55KGZ1bmN0aW9uKGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLmdldElzU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRJc0Ryb3BUYXJnZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lZGl0b3IpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5kcm9wVGFyZ2V0RWxlbWVudCA9PT0gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SXNEcm9wVGFyZ2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lZGl0b3IpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmRyb3BUYXJnZXRFbGVtZW50ID0gdGhpcztcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuZHJvcFRhcmdldEVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuRGVsZXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1RlbXBsYXRlZCB8fCAhdGhpcy5wYXJlbnQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZGVsZXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuRGVsZXRlKCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmRlbGV0ZUNoaWxkKHRoaXMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuTW92ZVVwID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1RlbXBsYXRlZCB8fCAhdGhpcy5wYXJlbnQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jYW5Nb3ZlQ2hpbGRVcCh0aGlzKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm1vdmVVcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbk1vdmVVcCgpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5tb3ZlQ2hpbGRVcCh0aGlzKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNhbk1vdmVEb3duID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1RlbXBsYXRlZCB8fCAhdGhpcy5wYXJlbnQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jYW5Nb3ZlQ2hpbGREb3duKHRoaXMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMubW92ZURvd24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5Nb3ZlRG93bigpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5tb3ZlQ2hpbGREb3duKHRoaXMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZWxlbWVudFRvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxyXG4gICAgICAgICAgICAgICAgaHRtbElkOiB0aGlzLmh0bWxJZCxcclxuICAgICAgICAgICAgICAgIGh0bWxDbGFzczogdGhpcy5odG1sQ2xhc3MsXHJcbiAgICAgICAgICAgICAgICBodG1sU3R5bGU6IHRoaXMuaHRtbFN0eWxlLFxyXG4gICAgICAgICAgICAgICAgaXNUZW1wbGF0ZWQ6IHRoaXMuaXNUZW1wbGF0ZWQsXHJcbiAgICAgICAgICAgICAgICBydWxlOiB0aGlzLnJ1bGUsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogdGhpcy5jb250ZW50VHlwZSxcclxuICAgICAgICAgICAgICAgIGhhc0VkaXRvcjogdGhpcy5oYXNFZGl0b3JcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmdldEVkaXRvck9iamVjdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge307XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy50b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuZWxlbWVudFRvT2JqZWN0KCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jb3B5ID0gZnVuY3Rpb24gKGNsaXBib2FyZERhdGEpIHtcclxuICAgICAgICAgICAgdmFyIHRleHQgPSB0aGlzLmdldElubmVyVGV4dCgpO1xyXG4gICAgICAgICAgICBjbGlwYm9hcmREYXRhLnNldERhdGEoXCJ0ZXh0L3BsYWluXCIsIHRleHQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLnRvT2JqZWN0KCk7XHJcbiAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgXCJcXHRcIik7XHJcbiAgICAgICAgICAgIGNsaXBib2FyZERhdGEuc2V0RGF0YShcInRleHQvanNvblwiLCBqc29uKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmN1dCA9IGZ1bmN0aW9uIChjbGlwYm9hcmREYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbkRlbGV0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvcHkoY2xpcGJvYXJkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXN0ZSA9IGZ1bmN0aW9uIChjbGlwYm9hcmREYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMucGFyZW50KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQucGFzdGUoY2xpcGJvYXJkRGF0YSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZVN0eWxlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHN0eWxlcyA9IHRoaXMudGVtcGxhdGVTdHlsZXMgfHwge307XHJcbiAgICAgICAgICAgIHZhciBjc3MgPSBcIlwiO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gc3R5bGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjc3MgKz0gcHJvcGVydHkgKyBcIjpcIiArIHN0eWxlc1twcm9wZXJ0eV0gKyBcIjtcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNzcztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyIsInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkNvbnRhaW5lciA9IGZ1bmN0aW9uIChhbGxvd2VkQ2hpbGRUeXBlcywgY2hpbGRyZW4pIHtcclxuXHJcbiAgICAgICAgdGhpcy5hbGxvd2VkQ2hpbGRUeXBlcyA9IGFsbG93ZWRDaGlsZFR5cGVzO1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgICAgICB0aGlzLmlzQ29udGFpbmVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lclRlbXBsYXRlU3R5bGVzID0ge307XHJcblxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5vbkNoaWxkQWRkZWQgPSBmdW5jdGlvbiAoZWxlbWVudCkgeyAvKiBWaXJ0dWFsICovIH07XHJcbiAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRBZGRlZCA9IGZ1bmN0aW9uIChlbGVtZW50LCBwYXJlbnRFbGVtZW50KSB7IC8qIFZpcnR1YWwgKi8gfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xyXG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICAgICAgICAgIF8odGhpcy5jaGlsZHJlbikuZWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkLnNldFBhcmVudChzZWxmKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRDaGlsZHJlbihjaGlsZHJlbik7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0SXNTZWFsZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfKHRoaXMuY2hpbGRyZW4pLmFueShmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZC5pc1RlbXBsYXRlZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIF9iYXNlU2V0SXNGb2N1c2VkID0gdGhpcy5zZXRJc0ZvY3VzZWQ7XHJcbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdldElzU2VhbGVkKCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIF9iYXNlU2V0SXNGb2N1c2VkLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIV8odGhpcy5jaGlsZHJlbikuY29udGFpbnMoY2hpbGQpICYmIChfKHRoaXMuYWxsb3dlZENoaWxkVHlwZXMpLmNvbnRhaW5zKGNoaWxkLnR5cGUpIHx8IGNoaWxkLmlzQ29udGFpbmFibGUpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgY2hpbGQuc2V0RWRpdG9yKHRoaXMuZWRpdG9yKTtcclxuICAgICAgICAgICAgY2hpbGQuc2V0SXNUZW1wbGF0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBjaGlsZC5zZXRQYXJlbnQodGhpcyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5kZWxldGVDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY2hpbGQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IucmVjeWNsZUJpbi5hZGQoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldElzQWN0aXZlKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuYWN0aXZlRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0SXNGb2N1c2VkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZGVsZXRlZCBjaGlsZCB3YXMgZm9jdXNlZCwgdHJ5IHRvIHNldCBuZXcgZm9jdXMgdG8gdGhlIG1vc3QgYXBwcm9wcmlhdGUgc2libGluZyBvciBwYXJlbnQuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gaW5kZXgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baW5kZXhdLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluZGV4ID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpbmRleCAtIDFdLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMubW92ZUZvY3VzUHJldkNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA8IDIpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjaGlsZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2luZGV4IC0gMV0uc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5tb3ZlRm9jdXNOZXh0Q2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoIDwgMilcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNoaWxkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpbmRleCArIDFdLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuaW5zZXJ0Q2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQsIGFmdGVyQ2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCFfKHRoaXMuY2hpbGRyZW4pLmNvbnRhaW5zKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gTWF0aC5tYXgoXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGFmdGVyQ2hpbGQpLCAwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4ICsgMSwgMCwgY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGQuc2V0RWRpdG9yKHRoaXMuZWRpdG9yKTtcclxuICAgICAgICAgICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm1vdmVDaGlsZFVwID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5Nb3ZlQ2hpbGRVcChjaGlsZCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjaGlsZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ubW92ZShpbmRleCwgaW5kZXggLSAxKTtcclxuICAgICAgICAgICAgJC5ldmVudC50cmlnZ2VyKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImxheW91dGVkaXRvcjplZGl0ZWRcIlxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5tb3ZlQ2hpbGREb3duID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5Nb3ZlQ2hpbGREb3duKGNoaWxkKSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNoaWxkKTtcclxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5tb3ZlKGluZGV4LCBpbmRleCArIDEpO1xyXG4gICAgICAgICAgICAkLmV2ZW50LnRyaWdnZXIoe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwibGF5b3V0ZWRpdG9yOmVkaXRlZFwiXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNhbk1vdmVDaGlsZFVwID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjaGlsZCk7XHJcbiAgICAgICAgICAgIHJldHVybiBpbmRleCA+IDA7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5Nb3ZlQ2hpbGREb3duID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjaGlsZCk7XHJcbiAgICAgICAgICAgIHJldHVybiBpbmRleCA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNoaWxkcmVuVG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfKHRoaXMuY2hpbGRyZW4pLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZC50b09iamVjdCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmdldElubmVyVGV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF8odGhpcy5jaGlsZHJlbikucmVkdWNlKGZ1bmN0aW9uIChtZW1vLCBjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lbW8gKyBcIlxcblwiICsgY2hpbGQuZ2V0SW5uZXJUZXh0KCk7XHJcbiAgICAgICAgICAgIH0sIFwiXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wYXN0ZSA9IGZ1bmN0aW9uIChjbGlwYm9hcmREYXRhKSB7XHJcbiAgICAgICAgICAgIHZhciBqc29uID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwidGV4dC9qc29uXCIpO1xyXG4gICAgICAgICAgICBpZiAoISFqc29uKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoanNvbik7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBMYXlvdXRFZGl0b3IuZWxlbWVudEZyb20oZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhc3RlQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXN0ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmIChfKHRoaXMuYWxsb3dlZENoaWxkVHlwZXMpLmNvbnRhaW5zKGNoaWxkLnR5cGUpIHx8IGNoaWxkLmlzQ29udGFpbmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGQuc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoISF0aGlzLnBhcmVudClcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnBhc3RlQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRDb250YWluZXJUZW1wbGF0ZVN0eWxlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHN0eWxlcyA9IHRoaXMuY29udGFpbmVyVGVtcGxhdGVTdHlsZXMgfHwge307XHJcbiAgICAgICAgICAgIHZhciBjc3MgPSBcIlwiO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gc3R5bGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjc3MgKz0gcHJvcGVydHkgKyBcIjpcIiArIHN0eWxlc1twcm9wZXJ0eV0gKyBcIjtcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNzcztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyIsInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkNhbnZhcyA9IGZ1bmN0aW9uIChkYXRhLCBodG1sSWQsIGh0bWxDbGFzcywgaHRtbFN0eWxlLCBpc1RlbXBsYXRlZCwgcnVsZSwgY2hpbGRyZW4pIHtcclxuICAgICAgICBMYXlvdXRFZGl0b3IuRWxlbWVudC5jYWxsKHRoaXMsIFwiQ2FudmFzXCIsIGRhdGEsIGh0bWxJZCwgaHRtbENsYXNzLCBodG1sU3R5bGUsIGlzVGVtcGxhdGVkLCBydWxlKTtcclxuICAgICAgICBMYXlvdXRFZGl0b3IuQ29udGFpbmVyLmNhbGwodGhpcywgW1wiQ2FudmFzXCIsIFwiR3JpZFwiLCBcIkNvbnRlbnRcIl0sIGNoaWxkcmVuKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0NvbnRhaW5hYmxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy50b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuZWxlbWVudFRvT2JqZWN0KCk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW5Ub09iamVjdCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIExheW91dEVkaXRvci5DYW52YXMuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgTGF5b3V0RWRpdG9yLkNhbnZhcyhcclxuICAgICAgICAgICAgdmFsdWUuZGF0YSxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbElkLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sQ2xhc3MsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWxTdHlsZSxcclxuICAgICAgICAgICAgdmFsdWUuaXNUZW1wbGF0ZWQsXHJcbiAgICAgICAgICAgIHZhbHVlLnJ1bGUsXHJcbiAgICAgICAgICAgIExheW91dEVkaXRvci5jaGlsZHJlbkZyb20odmFsdWUuY2hpbGRyZW4pKTtcclxuXHJcbiAgICAgICAgcmVzdWx0LnRvb2xib3hJY29uID0gdmFsdWUudG9vbGJveEljb247XHJcbiAgICAgICAgcmVzdWx0LnRvb2xib3hMYWJlbCA9IHZhbHVlLnRvb2xib3hMYWJlbDtcclxuICAgICAgICByZXN1bHQudG9vbGJveERlc2NyaXB0aW9uID0gdmFsdWUudG9vbGJveERlc2NyaXB0aW9uO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbn0pKExheW91dEVkaXRvciB8fCAoTGF5b3V0RWRpdG9yID0ge30pKTtcclxuIiwidmFyIExheW91dEVkaXRvcjtcclxuKGZ1bmN0aW9uIChMYXlvdXRFZGl0b3IpIHtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuR3JpZCA9IGZ1bmN0aW9uIChkYXRhLCBodG1sSWQsIGh0bWxDbGFzcywgaHRtbFN0eWxlLCBpc1RlbXBsYXRlZCwgcnVsZSwgY2hpbGRyZW4pIHtcclxuICAgICAgICBMYXlvdXRFZGl0b3IuRWxlbWVudC5jYWxsKHRoaXMsIFwiR3JpZFwiLCBkYXRhLCBodG1sSWQsIGh0bWxDbGFzcywgaHRtbFN0eWxlLCBpc1RlbXBsYXRlZCwgcnVsZSk7XHJcbiAgICAgICAgTGF5b3V0RWRpdG9yLkNvbnRhaW5lci5jYWxsKHRoaXMsIFtcIlJvd1wiXSwgY2hpbGRyZW4pO1xyXG5cclxuICAgICAgICB0aGlzLnRvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5lbGVtZW50VG9PYmplY3QoKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNoaWxkcmVuID0gdGhpcy5jaGlsZHJlblRvT2JqZWN0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkdyaWQuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgTGF5b3V0RWRpdG9yLkdyaWQoXHJcbiAgICAgICAgICAgIHZhbHVlLmRhdGEsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWxJZCxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbENsYXNzLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sU3R5bGUsXHJcbiAgICAgICAgICAgIHZhbHVlLmlzVGVtcGxhdGVkLFxyXG4gICAgICAgICAgICB2YWx1ZS5ydWxlLFxyXG4gICAgICAgICAgICBMYXlvdXRFZGl0b3IuY2hpbGRyZW5Gcm9tKHZhbHVlLmNoaWxkcmVuKSk7XHJcbiAgICAgICAgcmVzdWx0LnRvb2xib3hJY29uID0gdmFsdWUudG9vbGJveEljb247XHJcbiAgICAgICAgcmVzdWx0LnRvb2xib3hMYWJlbCA9IHZhbHVlLnRvb2xib3hMYWJlbDtcclxuICAgICAgICByZXN1bHQudG9vbGJveERlc2NyaXB0aW9uID0gdmFsdWUudG9vbGJveERlc2NyaXB0aW9uO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG5cclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyIsInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLlJvdyA9IGZ1bmN0aW9uIChkYXRhLCBodG1sSWQsIGh0bWxDbGFzcywgaHRtbFN0eWxlLCBpc1RlbXBsYXRlZCwgcnVsZSwgY2hpbGRyZW4pIHtcclxuICAgICAgICBMYXlvdXRFZGl0b3IuRWxlbWVudC5jYWxsKHRoaXMsIFwiUm93XCIsIGRhdGEsIGh0bWxJZCwgaHRtbENsYXNzLCBodG1sU3R5bGUsIGlzVGVtcGxhdGVkLCBydWxlKTtcclxuICAgICAgICBMYXlvdXRFZGl0b3IuQ29udGFpbmVyLmNhbGwodGhpcywgW1wiQ29sdW1uXCJdLCBjaGlsZHJlbik7XHJcblxyXG4gICAgICAgIHZhciBfc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIF9nZXRUb3RhbENvbHVtbnNXaWR0aCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF8oX3NlbGYuY2hpbGRyZW4pLnJlZHVjZShmdW5jdGlvbiAobWVtbywgY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtZW1vICsgY2hpbGQub2Zmc2V0ICsgY2hpbGQud2lkdGg7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSW1wbGVtZW50cyBhIHNpbXBsZSBhbGdvcml0aG0gdG8gZGlzdHJpYnV0ZSBzcGFjZSAoZWl0aGVyIHBvc2l0aXZlIG9yIG5lZ2F0aXZlKVxyXG4gICAgICAgIC8vIGJldHdlZW4gdGhlIGNoaWxkIGNvbHVtbnMgb2YgdGhlIHJvdy4gTmVnYXRpdmUgc3BhY2UgaXMgZGlzdHJpYnV0ZWQgd2hlbiBtYWtpbmdcclxuICAgICAgICAvLyByb29tIGZvciBhIG5ldyBjb2x1bW4gKGUuYy4gY2xpcGJvYXJkIHBhc3RlIG9yIGRyb3BwaW5nIGZyb20gdGhlIHRvb2xib3gpIHdoaWxlXHJcbiAgICAgICAgLy8gcG9zaXRpdmUgc3BhY2UgaXMgZGlzdHJpYnV0ZWQgd2hlbiBmaWxsaW5nIHRoZSBncmFwIG9mIGEgcmVtb3ZlZCBjb2x1bW4uXHJcbiAgICAgICAgZnVuY3Rpb24gX2Rpc3RyaWJ1dGVTcGFjZShzcGFjZSkge1xyXG4gICAgICAgICAgICBpZiAoc3BhY2UgPT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciB1bmRpc3RyaWJ1dGVkU3BhY2UgPSBzcGFjZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh1bmRpc3RyaWJ1dGVkU3BhY2UgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFjYW50U3BhY2UgPSAxMiAtIF9nZXRUb3RhbENvbHVtbnNXaWR0aCgpO1xyXG4gICAgICAgICAgICAgICAgdW5kaXN0cmlidXRlZFNwYWNlICs9IHZhY2FudFNwYWNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuZGlzdHJpYnV0ZWRTcGFjZSA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgdW5kaXN0cmlidXRlZFNwYWNlID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gSWYgc3BhY2UgaXMgbmVnYXRpdmUsIHRyeSB0byBkZWNyZWFzZSBvZmZzZXRzIGZpcnN0LlxyXG4gICAgICAgICAgICB3aGlsZSAodW5kaXN0cmlidXRlZFNwYWNlIDwgMCAmJiBfKF9zZWxmLmNoaWxkcmVuKS5hbnkoZnVuY3Rpb24gKGNvbHVtbikgeyByZXR1cm4gY29sdW1uLm9mZnNldCA+IDA7IH0pKSB7IC8vIFdoaWxlIHRoZXJlIGlzIHN0aWxsIG9mZnNldCBsZWZ0IHRvIHJlbW92ZS5cclxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBfc2VsZi5jaGlsZHJlbi5sZW5ndGggJiYgdW5kaXN0cmlidXRlZFNwYWNlIDwgMDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbiA9IF9zZWxmLmNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ub2Zmc2V0ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4ub2Zmc2V0LS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGlzdHJpYnV0ZWRTcGFjZSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gaGFzV2lkdGgoY29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodW5kaXN0cmlidXRlZFNwYWNlID4gMClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLndpZHRoIDwgMTI7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh1bmRpc3RyaWJ1dGVkU3BhY2UgPCAwKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4ud2lkdGggPiAxO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBUcnkgdG8gZGlzdHJpYnV0ZSByZW1haW5pbmcgc3BhY2UgKGNvdWxkIGJlIG5lZ2F0aXZlIG9yIHBvc2l0aXZlKSB1c2luZyB3aWR0aHMuXHJcbiAgICAgICAgICAgIHdoaWxlICh1bmRpc3RyaWJ1dGVkU3BhY2UgIT0gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gQW55IG1vcmUgY29sdW1uIHdpZHRoIGF2YWlsYWJsZSBmb3IgZGlzdHJpYnV0aW9uP1xyXG4gICAgICAgICAgICAgICAgaWYgKCFfKF9zZWxmLmNoaWxkcmVuKS5hbnkoaGFzV2lkdGgpKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IF9zZWxmLmNoaWxkcmVuLmxlbmd0aCAmJiB1bmRpc3RyaWJ1dGVkU3BhY2UgIT0gMDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbiA9IF9zZWxmLmNoaWxkcmVuW2kgJSBfc2VsZi5jaGlsZHJlbi5sZW5ndGhdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNXaWR0aChjb2x1bW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IHVuZGlzdHJpYnV0ZWRTcGFjZSAvIE1hdGguYWJzKHVuZGlzdHJpYnV0ZWRTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi53aWR0aCArPSBkZWx0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kaXN0cmlidXRlZFNwYWNlIC09IGRlbHRhO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1bmRpc3RyaWJ1dGVkU3BhY2UgPT0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfaXNBZGRpbmdDb2x1bW4gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5BZGRDb2x1bW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA8IDEyO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuYmVnaW5BZGRDb2x1bW4gPSBmdW5jdGlvbiAobmV3Q29sdW1uV2lkdGgpIHtcclxuICAgICAgICAgICAgaWYgKCEhX2lzQWRkaW5nQ29sdW1uKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29sdW1uIGFkZCBvcGVyYXRpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcy5cIilcclxuICAgICAgICAgICAgXyh0aGlzLmNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5iZWdpbkNoYW5nZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKF9kaXN0cmlidXRlU3BhY2UoLW5ld0NvbHVtbldpZHRoKSkge1xyXG4gICAgICAgICAgICAgICAgX2lzQWRkaW5nQ29sdW1uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF8odGhpcy5jaGlsZHJlbikuZWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4ucm9sbGJhY2tDaGFuZ2UoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNvbW1pdEFkZENvbHVtbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCFfaXNBZGRpbmdDb2x1bW4pXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb2x1bW4gYWRkIG9wZXJhdGlvbiBpbiBwcm9ncmVzcy5cIilcclxuICAgICAgICAgICAgXyh0aGlzLmNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5jb21taXRDaGFuZ2UoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIF9pc0FkZGluZ0NvbHVtbiA9IGZhbHNlO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMucm9sbGJhY2tBZGRDb2x1bW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghX2lzQWRkaW5nQ29sdW1uKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29sdW1uIGFkZCBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MuXCIpXHJcbiAgICAgICAgICAgIF8odGhpcy5jaGlsZHJlbikuZWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4ucm9sbGJhY2tDaGFuZ2UoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIF9pc0FkZGluZ0NvbHVtbiA9IGZhbHNlO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciBfYmFzZURlbGV0ZUNoaWxkID0gdGhpcy5kZWxldGVDaGlsZDtcclxuICAgICAgICB0aGlzLmRlbGV0ZUNoaWxkID0gZnVuY3Rpb24gKGNvbHVtbikgeyBcclxuICAgICAgICAgICAgdmFyIHdpZHRoID0gY29sdW1uLndpZHRoO1xyXG4gICAgICAgICAgICBfYmFzZURlbGV0ZUNoaWxkLmNhbGwodGhpcywgY29sdW1uKTtcclxuICAgICAgICAgICAgX2Rpc3RyaWJ1dGVTcGFjZSh3aWR0aCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5Db250cmFjdENvbHVtblJpZ2h0ID0gZnVuY3Rpb24gKGNvbHVtbiwgY29ubmVjdEFkamFjZW50KSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjb2x1bW4pO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4ud2lkdGggPiAxO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jb250cmFjdENvbHVtblJpZ2h0ID0gZnVuY3Rpb24gKGNvbHVtbiwgY29ubmVjdEFkamFjZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5Db250cmFjdENvbHVtblJpZ2h0KGNvbHVtbiwgY29ubmVjdEFkamFjZW50KSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjb2x1bW4pO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi53aWR0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4ud2lkdGgtLTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiBpbmRleCArIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRDb2x1bW4gPSB0aGlzLmNoaWxkcmVuW2luZGV4ICsgMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0QWRqYWNlbnQgJiYgbmV4dENvbHVtbi5vZmZzZXQgPT0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRDb2x1bW4ud2lkdGgrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENvbHVtbi5vZmZzZXQrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNhbkV4cGFuZENvbHVtblJpZ2h0ID0gZnVuY3Rpb24gKGNvbHVtbiwgY29ubmVjdEFkamFjZW50KSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjb2x1bW4pO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi53aWR0aCA+PSAxMilcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiBpbmRleCArIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dENvbHVtbiA9IHRoaXMuY2hpbGRyZW5baW5kZXggKyAxXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdEFkamFjZW50ICYmIG5leHRDb2x1bW4ub2Zmc2V0ID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0Q29sdW1uLndpZHRoID4gMTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0Q29sdW1uLm9mZnNldCA+IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX2dldFRvdGFsQ29sdW1uc1dpZHRoKCkgPCAxMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5leHBhbmRDb2x1bW5SaWdodCA9IGZ1bmN0aW9uIChjb2x1bW4sIGNvbm5lY3RBZGphY2VudCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuRXhwYW5kQ29sdW1uUmlnaHQoY29sdW1uLCBjb25uZWN0QWRqYWNlbnQpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNvbHVtbik7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiBpbmRleCArIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dENvbHVtbiA9IHRoaXMuY2hpbGRyZW5baW5kZXggKyAxXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdEFkamFjZW50ICYmIG5leHRDb2x1bW4ub2Zmc2V0ID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRDb2x1bW4ud2lkdGgtLTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRDb2x1bW4ub2Zmc2V0LS07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4ud2lkdGgrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuRXhwYW5kQ29sdW1uTGVmdCA9IGZ1bmN0aW9uIChjb2x1bW4sIGNvbm5lY3RBZGphY2VudCkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY29sdW1uKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ud2lkdGggPj0gMTIpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmV2Q29sdW1uID0gdGhpcy5jaGlsZHJlbltpbmRleCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0QWRqYWNlbnQgJiYgY29sdW1uLm9mZnNldCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldkNvbHVtbi53aWR0aCA+IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLm9mZnNldCA+IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZXhwYW5kQ29sdW1uTGVmdCA9IGZ1bmN0aW9uIChjb2x1bW4sIGNvbm5lY3RBZGphY2VudCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuRXhwYW5kQ29sdW1uTGVmdChjb2x1bW4sIGNvbm5lY3RBZGphY2VudCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY29sdW1uKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcHJldkNvbHVtbiA9IHRoaXMuY2hpbGRyZW5baW5kZXggLSAxXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdEFkamFjZW50ICYmIGNvbHVtbi5vZmZzZXQgPT0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldkNvbHVtbi53aWR0aC0tO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLm9mZnNldC0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5vZmZzZXQtLTtcclxuICAgICAgICAgICAgICAgIGNvbHVtbi53aWR0aCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5Db250cmFjdENvbHVtbkxlZnQgPSBmdW5jdGlvbiAoY29sdW1uLCBjb25uZWN0QWRqYWNlbnQpIHtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNvbHVtbik7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi53aWR0aCA+IDE7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRyYWN0Q29sdW1uTGVmdCA9IGZ1bmN0aW9uIChjb2x1bW4sIGNvbm5lY3RBZGphY2VudCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuQ29udHJhY3RDb2x1bW5MZWZ0KGNvbHVtbiwgY29ubmVjdEFkamFjZW50KSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjb2x1bW4pO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmV2Q29sdW1uID0gdGhpcy5jaGlsZHJlbltpbmRleCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0QWRqYWNlbnQgJiYgY29sdW1uLm9mZnNldCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2Q29sdW1uLndpZHRoKys7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4ub2Zmc2V0Kys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLm9mZnNldCsrO1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLndpZHRoLS07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmV2ZW5Db2x1bW5zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHZhciBldmVuV2lkdGggPSBNYXRoLmZsb29yKDEyIC8gdGhpcy5jaGlsZHJlbi5sZW5ndGgpO1xyXG4gICAgICAgICAgICBfKHRoaXMuY2hpbGRyZW4pLmVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLndpZHRoID0gZXZlbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLm9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHJlc3QgPSAxMiAlIHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAocmVzdCA+IDApXHJcbiAgICAgICAgICAgICAgICBfZGlzdHJpYnV0ZVNwYWNlKHJlc3QpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciBfYmFzZVBhc3RlQ2hpbGQgPSB0aGlzLnBhc3RlQ2hpbGQ7XHJcbiAgICAgICAgdGhpcy5wYXN0ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC50eXBlID09IFwiQ29sdW1uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJlZ2luQWRkQ29sdW1uKGNoaWxkLndpZHRoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbWl0QWRkQ29sdW1uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2Jhc2VQYXN0ZUNoaWxkLmNhbGwodGhpcywgY2hpbGQpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoISF0aGlzLnBhcmVudClcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnBhc3RlQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuZWxlbWVudFRvT2JqZWN0KCk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW5Ub09iamVjdCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIExheW91dEVkaXRvci5Sb3cuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgTGF5b3V0RWRpdG9yLlJvdyhcclxuICAgICAgICAgICAgdmFsdWUuZGF0YSxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbElkLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sQ2xhc3MsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWxTdHlsZSxcclxuICAgICAgICAgICAgdmFsdWUuaXNUZW1wbGF0ZWQsXHJcbiAgICAgICAgICAgIHZhbHVlLnJ1bGUsXHJcbiAgICAgICAgICAgIExheW91dEVkaXRvci5jaGlsZHJlbkZyb20odmFsdWUuY2hpbGRyZW4pKTtcclxuICAgICAgICByZXN1bHQudG9vbGJveEljb24gPSB2YWx1ZS50b29sYm94SWNvbjtcclxuICAgICAgICByZXN1bHQudG9vbGJveExhYmVsID0gdmFsdWUudG9vbGJveExhYmVsO1xyXG4gICAgICAgIHJlc3VsdC50b29sYm94RGVzY3JpcHRpb24gPSB2YWx1ZS50b29sYm94RGVzY3JpcHRpb247XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcblxyXG59KShMYXlvdXRFZGl0b3IgfHwgKExheW91dEVkaXRvciA9IHt9KSk7IiwidmFyIExheW91dEVkaXRvcjtcclxuKGZ1bmN0aW9uIChMYXlvdXRFZGl0b3IpIHtcclxuICAgIExheW91dEVkaXRvci5Db2x1bW4gPSBmdW5jdGlvbiAoZGF0YSwgaHRtbElkLCBodG1sQ2xhc3MsIGh0bWxTdHlsZSwgaXNUZW1wbGF0ZWQsIHdpZHRoLCBvZmZzZXQsIGNvbGxhcHNpYmxlLCBydWxlLCBjaGlsZHJlbikge1xyXG4gICAgICAgIExheW91dEVkaXRvci5FbGVtZW50LmNhbGwodGhpcywgXCJDb2x1bW5cIiwgZGF0YSwgaHRtbElkLCBodG1sQ2xhc3MsIGh0bWxTdHlsZSwgaXNUZW1wbGF0ZWQsIHJ1bGUpO1xyXG4gICAgICAgIExheW91dEVkaXRvci5Db250YWluZXIuY2FsbCh0aGlzLCBbXCJHcmlkXCIsIFwiQ29udGVudFwiXSwgY2hpbGRyZW4pO1xyXG5cclxuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XHJcbiAgICAgICAgdGhpcy5jb2xsYXBzaWJsZSA9IGNvbGxhcHNpYmxlO1xyXG5cclxuICAgICAgICB2YXIgX2hhc1BlbmRpbmdDaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICB2YXIgX29yaWdXaWR0aCA9IDA7XHJcbiAgICAgICAgdmFyIF9vcmlnT2Zmc2V0ID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5iZWdpbkNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCEhX2hhc1BlbmRpbmdDaGFuZ2UpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2x1bW4gYWxyZWFkeSBoYXMgYSBwZW5kaW5nIGNoYW5nZS5cIik7XHJcbiAgICAgICAgICAgIF9oYXNQZW5kaW5nQ2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICAgICAgX29yaWdXaWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgICAgIF9vcmlnT2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jb21taXRDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghX2hhc1BlbmRpbmdDaGFuZ2UpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2x1bW4gaGFzIG5vIHBlbmRpbmcgY2hhbmdlLlwiKTtcclxuICAgICAgICAgICAgX29yaWdXaWR0aCA9IDA7XHJcbiAgICAgICAgICAgIF9vcmlnT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgX2hhc1BlbmRpbmdDaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnJvbGxiYWNrQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIV9oYXNQZW5kaW5nQ2hhbmdlKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29sdW1uIGhhcyBubyBwZW5kaW5nIGNoYW5nZS5cIik7XHJcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSBfb3JpZ1dpZHRoO1xyXG4gICAgICAgICAgICB0aGlzLm9mZnNldCA9IF9vcmlnT2Zmc2V0O1xyXG4gICAgICAgICAgICBfb3JpZ1dpZHRoID0gMDtcclxuICAgICAgICAgICAgX29yaWdPZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICBfaGFzUGVuZGluZ0NoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuU3BsaXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGVtcGxhdGVkKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53aWR0aCA+IDE7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zcGxpdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhblNwbGl0KCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICB2YXIgbmV3Q29sdW1uV2lkdGggPSBNYXRoLmZsb29yKHRoaXMud2lkdGggLyAyKTtcclxuICAgICAgICAgICAgdmFyIG5ld0NvbHVtbiA9IExheW91dEVkaXRvci5Db2x1bW4uZnJvbSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgaHRtbElkOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgaHRtbENsYXNzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgaHRtbFN0eWxlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IG5ld0NvbHVtbldpZHRoLFxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMud2lkdGggLSBuZXdDb2x1bW5XaWR0aDtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQuaW5zZXJ0Q2hpbGQobmV3Q29sdW1uLCB0aGlzKTtcclxuICAgICAgICAgICAgbmV3Q29sdW1uLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuQ29udHJhY3RSaWdodCA9IGZ1bmN0aW9uIChjb25uZWN0QWRqYWNlbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNUZW1wbGF0ZWQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jYW5Db250cmFjdENvbHVtblJpZ2h0KHRoaXMsIGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jb250cmFjdFJpZ2h0ID0gZnVuY3Rpb24gKGNvbm5lY3RBZGphY2VudCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuQ29udHJhY3RSaWdodChjb25uZWN0QWRqYWNlbnQpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5jb250cmFjdENvbHVtblJpZ2h0KHRoaXMsIGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5FeHBhbmRSaWdodCA9IGZ1bmN0aW9uIChjb25uZWN0QWRqYWNlbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNUZW1wbGF0ZWQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jYW5FeHBhbmRDb2x1bW5SaWdodCh0aGlzLCBjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZXhwYW5kUmlnaHQgPSBmdW5jdGlvbiAoY29ubmVjdEFkamFjZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5FeHBhbmRSaWdodChjb25uZWN0QWRqYWNlbnQpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5leHBhbmRDb2x1bW5SaWdodCh0aGlzLCBjb25uZWN0QWRqYWNlbnQpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuRXhwYW5kTGVmdCA9IGZ1bmN0aW9uIChjb25uZWN0QWRqYWNlbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNUZW1wbGF0ZWQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jYW5FeHBhbmRDb2x1bW5MZWZ0KHRoaXMsIGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5leHBhbmRMZWZ0ID0gZnVuY3Rpb24gKGNvbm5lY3RBZGphY2VudCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuRXhwYW5kTGVmdChjb25uZWN0QWRqYWNlbnQpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5leHBhbmRDb2x1bW5MZWZ0KHRoaXMsIGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5Db250cmFjdExlZnQgPSBmdW5jdGlvbiAoY29ubmVjdEFkamFjZW50KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGVtcGxhdGVkKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuY2FuQ29udHJhY3RDb2x1bW5MZWZ0KHRoaXMsIGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jb250cmFjdExlZnQgPSBmdW5jdGlvbiAoY29ubmVjdEFkamFjZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5Db250cmFjdExlZnQoY29ubmVjdEFkamFjZW50KSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQuY29udHJhY3RDb2x1bW5MZWZ0KHRoaXMsIGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy50b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuZWxlbWVudFRvT2JqZWN0KCk7XHJcbiAgICAgICAgICAgIHJlc3VsdC53aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgICAgIHJlc3VsdC5vZmZzZXQgPSB0aGlzLm9mZnNldDtcclxuICAgICAgICAgICAgcmVzdWx0LmNvbGxhcHNpYmxlID0gdGhpcy5jb2xsYXBzaWJsZTtcclxuICAgICAgICAgICAgcmVzdWx0LmNoaWxkcmVuID0gdGhpcy5jaGlsZHJlblRvT2JqZWN0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkNvbHVtbi5mcm9tID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBMYXlvdXRFZGl0b3IuQ29sdW1uKFxyXG4gICAgICAgICAgICB2YWx1ZS5kYXRhLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sSWQsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWxDbGFzcyxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbFN0eWxlLFxyXG4gICAgICAgICAgICB2YWx1ZS5pc1RlbXBsYXRlZCxcclxuICAgICAgICAgICAgdmFsdWUud2lkdGgsXHJcbiAgICAgICAgICAgIHZhbHVlLm9mZnNldCxcclxuICAgICAgICAgICAgdmFsdWUuY29sbGFwc2libGUsXHJcbiAgICAgICAgICAgIHZhbHVlLnJ1bGUsXHJcbiAgICAgICAgICAgIExheW91dEVkaXRvci5jaGlsZHJlbkZyb20odmFsdWUuY2hpbGRyZW4pKTtcclxuICAgICAgICByZXN1bHQudG9vbGJveEljb24gPSB2YWx1ZS50b29sYm94SWNvbjtcclxuICAgICAgICByZXN1bHQudG9vbGJveExhYmVsID0gdmFsdWUudG9vbGJveExhYmVsO1xyXG4gICAgICAgIHJlc3VsdC50b29sYm94RGVzY3JpcHRpb24gPSB2YWx1ZS50b29sYm94RGVzY3JpcHRpb247XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkNvbHVtbi50aW1lcyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBfLnRpbWVzKHZhbHVlLCBmdW5jdGlvbiAobikge1xyXG4gICAgICAgICAgICByZXR1cm4gTGF5b3V0RWRpdG9yLkNvbHVtbi5mcm9tKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBodG1sSWQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBodG1sQ2xhc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBpc1RlbXBsYXRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogMTIgLyB2YWx1ZSxcclxuICAgICAgICAgICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICAgICAgICAgIGNvbGxhcHNpYmxlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyIsInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkNvbnRlbnQgPSBmdW5jdGlvbiAoZGF0YSwgaHRtbElkLCBodG1sQ2xhc3MsIGh0bWxTdHlsZSwgaXNUZW1wbGF0ZWQsIGNvbnRlbnRUeXBlLCBjb250ZW50VHlwZUxhYmVsLCBjb250ZW50VHlwZUNsYXNzLCBodG1sLCBoYXNFZGl0b3IsIHJ1bGUpIHtcclxuICAgICAgICBMYXlvdXRFZGl0b3IuRWxlbWVudC5jYWxsKHRoaXMsIFwiQ29udGVudFwiLCBkYXRhLCBodG1sSWQsIGh0bWxDbGFzcywgaHRtbFN0eWxlLCBpc1RlbXBsYXRlZCwgcnVsZSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRUeXBlTGFiZWwgPSBjb250ZW50VHlwZUxhYmVsO1xyXG4gICAgICAgIHRoaXMuY29udGVudFR5cGVDbGFzcyA9IGNvbnRlbnRUeXBlQ2xhc3M7XHJcbiAgICAgICAgdGhpcy5odG1sID0gaHRtbDtcclxuICAgICAgICB0aGlzLmhhc0VkaXRvciA9IGhhc0VkaXRvcjtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRJbm5lclRleHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAkKCQucGFyc2VIVE1MKFwiPGRpdj5cIiArIHRoaXMuaHRtbCArIFwiPC9kaXY+XCIpKS50ZXh0KCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBDb250ZW50IGRpcmVjdGl2ZS5cclxuICAgICAgICB0aGlzLnNldEh0bWwgPSBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgICAgICAgICB0aGlzLmh0bWwgPSBodG1sO1xyXG4gICAgICAgICAgICB0aGlzLmh0bWxVbnNhZmUgPSBodG1sO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGJhc2VUb09iamVjdCA9IHRoaXMudG9PYmplY3Q7XHJcbiAgICAgICAgdGhpcy50b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJhc2VUb09iamVjdCgpO1xyXG4gICAgICAgICAgICByZXN1bHQuY29udGVudFR5cGVMYWJlbCA9IHRoaXMuY29udGVudFR5cGVMYWJlbDtcclxuICAgICAgICAgICAgcmVzdWx0LmNvbnRlbnRUeXBlQ2xhc3MgPSB0aGlzLmNvbnRlbnRUeXBlQ2xhc3M7XHJcbiAgICAgICAgICAgIHJlc3VsdC5odG1sID0gdGhpcy5odG1sO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SHRtbChodG1sKTtcclxuICAgIH07XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkNvbnRlbnQuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgTGF5b3V0RWRpdG9yLkNvbnRlbnQoXHJcbiAgICAgICAgICAgIHZhbHVlLmRhdGEsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWxJZCxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbENsYXNzLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sU3R5bGUsXHJcbiAgICAgICAgICAgIHZhbHVlLmlzVGVtcGxhdGVkLFxyXG4gICAgICAgICAgICB2YWx1ZS5jb250ZW50VHlwZSxcclxuICAgICAgICAgICAgdmFsdWUuY29udGVudFR5cGVMYWJlbCxcclxuICAgICAgICAgICAgdmFsdWUuY29udGVudFR5cGVDbGFzcyxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbCxcclxuICAgICAgICAgICAgdmFsdWUuaGFzRWRpdG9yLFxyXG4gICAgICAgICAgICB2YWx1ZS5ydWxlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcblxyXG59KShMYXlvdXRFZGl0b3IgfHwgKExheW91dEVkaXRvciA9IHt9KSk7Il19 +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9yY2hhcmQuV2ViL01vZHVsZXMvT3JjaGFyZC5MYXlvdXRzL0Fzc2V0cy9KYXZhU2NyaXB0L01vZGVscy9IZWxwZXJzLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTW9kZWxzL0VkaXRvci5qcyIsIk9yY2hhcmQuV2ViL01vZHVsZXMvT3JjaGFyZC5MYXlvdXRzL0Fzc2V0cy9KYXZhU2NyaXB0L01vZGVscy9SZWN5Y2xlQmluLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTW9kZWxzL0VsZW1lbnQuanMiLCJPcmNoYXJkLldlYi9Nb2R1bGVzL09yY2hhcmQuTGF5b3V0cy9Bc3NldHMvSmF2YVNjcmlwdC9Nb2RlbHMvQ29udGFpbmVyLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTW9kZWxzL0NhbnZhcy5qcyIsIk9yY2hhcmQuV2ViL01vZHVsZXMvT3JjaGFyZC5MYXlvdXRzL0Fzc2V0cy9KYXZhU2NyaXB0L01vZGVscy9HcmlkLmpzIiwiT3JjaGFyZC5XZWIvTW9kdWxlcy9PcmNoYXJkLkxheW91dHMvQXNzZXRzL0phdmFTY3JpcHQvTW9kZWxzL1Jvdy5qcyIsIk9yY2hhcmQuV2ViL01vZHVsZXMvT3JjaGFyZC5MYXlvdXRzL0Fzc2V0cy9KYXZhU2NyaXB0L01vZGVscy9Db2x1bW4uanMiLCJPcmNoYXJkLldlYi9Nb2R1bGVzL09yY2hhcmQuTGF5b3V0cy9Bc3NldHMvSmF2YVNjcmlwdC9Nb2RlbHMvQ29udGVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUksWUFBWSxDQUFDO0FBQ2pCLENBQUMsVUFBVSxZQUFZO0lBRW5CLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFVBQVUsSUFBSSxFQUFFLEVBQUU7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQyxDQUFDO0lBRUYsWUFBWSxDQUFDLFlBQVksR0FBRyxVQUFTLE1BQU07UUFDdkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBUyxLQUFLO1lBQy9CLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO0lBRUYsSUFBSSxlQUFlLEdBQUcsWUFBWSxDQUFDLGVBQWUsR0FBRyxVQUFTLElBQUksRUFBRSxPQUFPO1FBQ3ZFLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDdEUsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUM5QixDQUFDLENBQUM7SUFFRixlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLGVBQWUsQ0FBQyxNQUFNLEVBQUUsVUFBUyxLQUFLLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkYsZUFBZSxDQUFDLEtBQUssRUFBRSxVQUFTLEtBQUssSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRixlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLGVBQWUsQ0FBQyxTQUFTLEVBQUUsVUFBUyxLQUFLLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekYsWUFBWSxDQUFDLFdBQVcsR0FBRyxVQUFVLEtBQUs7UUFDdEMsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFakQsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFFOUUsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBRUYsWUFBWSxDQUFDLFFBQVEsR0FBRyxVQUFVLGVBQWUsRUFBRSxLQUFLO1FBQ3BELENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQy9DLENBQUMsQ0FBQztJQUVGLFlBQVksQ0FBQyxRQUFRLEdBQUcsVUFBVSxlQUFlO1FBQzdDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDO0lBQzlDLENBQUMsQ0FBQztBQUVOLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FDMUN4QyxJQUFJLFlBQVksQ0FBQztBQUNqQixDQUFDLFVBQVUsWUFBWTtJQUVuQixZQUFZLENBQUMsTUFBTSxHQUFHLFVBQVUsTUFBTSxFQUFFLFVBQVU7UUFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVoRCxJQUFJLENBQUMsb0JBQW9CLEdBQUc7WUFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRztnQkFDbkIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQ2xCLFFBQVEsRUFBRSxFQUFFO2lCQUNmLENBQUM7YUFDTCxDQUFDO1FBQ04sQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNYLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzFELE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQztRQUM3QyxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUM7QUFFTixDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQy9CeEMsSUFBSSxZQUFZLENBQUM7QUFDakIsQ0FBQyxVQUFVLFlBQVk7SUFFbkIsWUFBWSxDQUFDLFVBQVUsR0FBRztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVuQixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVMsT0FBTztZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ1osSUFBSSxNQUFNLEdBQUc7Z0JBQ1QsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLFFBQVEsRUFBRSxFQUFFO2FBQ2YsQ0FBQztZQUVGLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7QUFFTixDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQzFCeEMsSUFBSSxZQUFZLENBQUM7QUFDakIsQ0FBQyxVQUFVLFlBQVk7SUFFbkIsWUFBWSxDQUFDLE9BQU8sR0FBRyxVQUFVLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUk7UUFDeEYsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFFckQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWpCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxFQUFFLENBQUM7UUFFcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLE1BQU07WUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUs7b0JBQ2pDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzVCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBUyxhQUFhO1lBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO1lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRS9CLElBQUksZUFBZSxHQUFHLGFBQWEsQ0FBQztZQUNwQyxPQUFPLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsZUFBZSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDdkQsZUFBZSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDN0MsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxLQUFLO1lBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLO29CQUNqQyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsY0FBMkIsQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDZixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RFLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxLQUFLO1lBQzlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDYixNQUFNLENBQUM7WUFDWCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztnQkFDakQsTUFBTSxDQUFDO1lBRVgsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUNyQyxJQUFJO2dCQUNBLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDaEQsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNoQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEtBQUssSUFBSSxDQUFDO1FBQy9DLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDaEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNoQixNQUFNLENBQUM7WUFDUixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDdEMsTUFBTSxDQUFDO1lBQ1IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQ2pELE1BQU0sQ0FBQztZQUVYLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUNsQyxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSTtnQkFDakQsSUFBSSxDQUFDO29CQUNELElBQUksRUFBRSxDQUFDO2dCQUNYLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFFWixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQztZQUVoQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFTLEtBQUs7b0JBQ3RDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUVELE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNuQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLENBQUM7UUFDbEQsQ0FBQyxDQUFBO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLEtBQUs7WUFDbEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNiLE1BQU0sQ0FBQztZQUNYLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUN6QyxJQUFJO2dCQUNBLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzdDLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDYixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDakMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFNLENBQUEsR0FBRztZQUNWLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNsQixNQUFNLENBQUM7WUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDVixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNuQixNQUFNLENBQUM7Z0JBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzthQUM1QixDQUFDO1FBQ04sQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNuQixNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNaLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLGFBQWE7WUFDL0IsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQy9CLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLGFBQWE7WUFDOUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFFBQU0sQ0FBQSxFQUFFLENBQUM7WUFDbEIsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxhQUFhO1lBQ2hDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUNyQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztZQUN2QyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFFYixHQUFHLENBQUMsQ0FBQyxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixHQUFHLElBQUksUUFBUSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ25ELENBQUM7WUFFRCxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ2YsQ0FBQyxDQUFBO0lBQ0wsQ0FBQyxDQUFDO0FBRU4sQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUN0TnhDLElBQUksWUFBWSxDQUFDO0FBQ2pCLENBQUMsVUFBVSxZQUFZO0lBRW5CLFlBQVksQ0FBQyxTQUFTLEdBQUcsVUFBVSxpQkFBaUIsRUFBRSxRQUFRO1FBRTFELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxDQUFDO1FBRWxDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUVoQixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsT0FBTyxJQUFrQixDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsT0FBTyxFQUFFLGFBQWEsSUFBa0IsQ0FBQyxDQUFDO1FBRTdFLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxRQUFRO1lBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSztnQkFDakMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFM0IsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNmLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEtBQUs7Z0JBQ3ZDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDO1FBRUYsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuQixNQUFNLENBQUM7WUFDWCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEtBQUs7WUFDM0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDN0csSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxLQUFLO1lBQzlCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDckMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkIsb0dBQW9HO29CQUNwRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7d0JBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO3dCQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUM1QyxJQUFJO3dCQUNBLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDNUIsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxLQUFLO1lBQ3JDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDekIsTUFBTSxDQUFDO1lBQ1gsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDVixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNoRCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxLQUFLO1lBQ3JDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDekIsTUFBTSxDQUFDO1lBQ1gsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEQsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLEtBQUssRUFBRSxVQUFVO1lBQzFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDMUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdCLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsS0FBSztZQUM5QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQztZQUNYLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDckMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQ1osSUFBSSxFQUFFLHFCQUFxQjthQUM5QixDQUFDLENBQUM7UUFDUCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsS0FBSztZQUNoQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxDQUFDO1lBQ1gsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNyQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDWixJQUFJLEVBQUUscUJBQXFCO2FBQzlCLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxLQUFLO1lBQ2pDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLEtBQUs7WUFDbkMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGdCQUFnQixHQUFHO1lBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEtBQUs7Z0JBQ3ZDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxLQUFLO2dCQUNoRCxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDOUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFBO1FBRUQsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLGFBQWE7WUFDaEMsSUFBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5QyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDVCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1QixJQUFJLEtBQUssR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsS0FBSztZQUM3QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckIsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pCLENBQUM7WUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQTtRQUVELElBQUksQ0FBQywwQkFBMEIsR0FBRztZQUM5QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUFDO1lBQ2hELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUViLEdBQUcsQ0FBQyxDQUFDLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLEdBQUcsSUFBSSxRQUFRLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDbkQsQ0FBQztZQUVELE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDZixDQUFDLENBQUE7SUFDTCxDQUFDLENBQUM7QUFFTixDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQ2pLeEMsSUFBSSxZQUFZLENBQUM7QUFDakIsQ0FBQyxVQUFVLFlBQVk7SUFFbkIsWUFBWSxDQUFDLE1BQU0sR0FBRyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVE7UUFDM0YsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pHLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFM0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFFMUIsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNaLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNwQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0lBRUYsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsVUFBVSxLQUFLO1FBQ3RDLElBQUksTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FDaEMsS0FBSyxDQUFDLElBQUksRUFDVixLQUFLLENBQUMsTUFBTSxFQUNaLEtBQUssQ0FBQyxTQUFTLEVBQ2YsS0FBSyxDQUFDLFNBQVMsRUFDZixLQUFLLENBQUMsV0FBVyxFQUNqQixLQUFLLENBQUMsSUFBSSxFQUNWLFlBQVksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFL0MsTUFBTSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUN6QyxNQUFNLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1FBRXJELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0FBRU4sQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUNqQ3hDLElBQUksWUFBWSxDQUFDO0FBQ2pCLENBQUMsVUFBVSxZQUFZO0lBRW5CLFlBQVksQ0FBQyxJQUFJLEdBQUcsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxRQUFRO1FBQ3pGLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvRixZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ1osSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7SUFFRixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLEtBQUs7UUFDcEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUM5QixLQUFLLENBQUMsSUFBSSxFQUNWLEtBQUssQ0FBQyxNQUFNLEVBQ1osS0FBSyxDQUFDLFNBQVMsRUFDZixLQUFLLENBQUMsU0FBUyxFQUNmLEtBQUssQ0FBQyxXQUFXLEVBQ2pCLEtBQUssQ0FBQyxJQUFJLEVBQ1YsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMvQyxNQUFNLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDdkMsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQixDQUFDLENBQUM7QUFFTixDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQzdCeEMsSUFBSSxZQUFZLENBQUM7QUFDakIsQ0FBQyxVQUFVLFlBQVk7SUFFbkIsWUFBWSxDQUFDLEdBQUcsR0FBRyxVQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVE7UUFDeEYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlGLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXhELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUVqQjtZQUNJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxLQUFLO2dCQUNqRCxNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUM3QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDVixDQUFDO1FBRUQsa0ZBQWtGO1FBQ2xGLGtGQUFrRjtRQUNsRixrRkFBa0Y7UUFDbEYsMkVBQTJFO1FBQzNFLDBCQUEwQixLQUFLO1lBQzNCLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQztZQUVoQixJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQztZQUUvQixFQUFFLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixJQUFJLFdBQVcsR0FBRyxFQUFFLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztnQkFDL0Msa0JBQWtCLElBQUksV0FBVyxDQUFDO2dCQUNsQyxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7b0JBQ3ZCLGtCQUFrQixHQUFHLENBQUMsQ0FBQztZQUMvQixDQUFDO1lBRUQsdURBQXVEO1lBQ3ZELE9BQU8sa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLGtCQUFrQixHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNuRSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMvQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3BCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDaEIsa0JBQWtCLEVBQUUsQ0FBQztvQkFDekIsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztZQUVELGtCQUFrQixNQUFNO2dCQUNwQixFQUFFLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7b0JBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztvQkFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2pCLENBQUM7WUFFRCxrRkFBa0Y7WUFDbEYsT0FBTyxrQkFBa0IsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDN0Isb0RBQW9EO2dCQUNwRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNqQyxLQUFLLENBQUM7Z0JBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksa0JBQWtCLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ3BFLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3ZELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ25CLElBQUksS0FBSyxHQUFHLGtCQUFrQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQzt3QkFDOUQsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7d0JBQ3RCLGtCQUFrQixJQUFJLEtBQUssQ0FBQztvQkFDaEMsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztZQUVELE1BQU0sQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUVELElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUU1QixJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDckMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLGNBQWM7WUFDMUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztnQkFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFBO1lBQ25FLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsTUFBTTtnQkFDbEMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDaEIsQ0FBQztZQUNELENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsTUFBTTtnQkFDbEMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxHQUFHO1lBQ25CLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO2dCQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUE7WUFDM0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxNQUFNO2dCQUNsQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7WUFDSCxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzVCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUNyQixFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztnQkFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFBO1lBQzNELENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsTUFBTTtnQkFDbEMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM1QixDQUFDLENBQUM7UUFFRixJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLE1BQU07WUFDL0IsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN6QixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLE1BQU0sRUFBRSxlQUFlO1lBQzNELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ1gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFVBQVUsTUFBTSxFQUFFLGVBQWU7WUFDeEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNLENBQUM7WUFFWCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDYixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ25CLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDZixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDbkMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQzFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQzs0QkFDMUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUN2QixJQUFJOzRCQUNBLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDNUIsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxVQUFVLE1BQU0sRUFBRSxlQUFlO1lBQ3pELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNiLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQzt3QkFDMUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUNoQyxJQUFJO3dCQUNBLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDckMsQ0FBQztnQkFDRCxNQUFNLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsQ0FBQztZQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsTUFBTSxFQUFFLGVBQWU7WUFDdEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNLENBQUM7WUFFWCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDYixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQzt3QkFDMUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUN2QixJQUFJO3dCQUNBLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUIsQ0FBQztnQkFDRCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLE1BQU0sRUFBRSxlQUFlO1lBQ3hELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNiLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNqQixFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDWixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDMUMsRUFBRSxDQUFDLENBQUMsZUFBZSxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO3dCQUN0QyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7Z0JBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLE1BQU0sRUFBRSxlQUFlO1lBQ3JELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFDbkQsTUFBTSxDQUFDO1lBRVgsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ1osSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQzt3QkFDdEMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUN2QixJQUFJO3dCQUNBLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztnQkFDRCxJQUFJO29CQUNBLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMscUJBQXFCLEdBQUcsVUFBVSxNQUFNLEVBQUUsZUFBZTtZQUMxRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO2dCQUNYLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM1QixNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLE1BQU0sRUFBRSxlQUFlO1lBQ3ZELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFDckQsTUFBTSxDQUFDO1lBRVgsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ1osSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQzt3QkFDdEMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUN2QixJQUFJO3dCQUNBLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztnQkFDRCxJQUFJO29CQUNBLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO2dCQUMxQixNQUFNLENBQUM7WUFFWCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsTUFBTTtnQkFDbEMsTUFBTSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7Z0JBQ3pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3JDLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ1QsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDO1FBRUYsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsS0FBSztZQUM3QixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUN2QixlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtnQkFDckMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQTtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDcEMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztJQUVGLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLFVBQVUsS0FBSztRQUNuQyxJQUFJLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQzdCLEtBQUssQ0FBQyxJQUFJLEVBQ1YsS0FBSyxDQUFDLE1BQU0sRUFDWixLQUFLLENBQUMsU0FBUyxFQUNmLEtBQUssQ0FBQyxTQUFTLEVBQ2YsS0FBSyxDQUFDLFdBQVcsRUFDakIsS0FBSyxDQUFDLElBQUksRUFDVixZQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUN2QyxNQUFNLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDekMsTUFBTSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztBQUVOLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FDN1J4QyxJQUFJLFlBQVksQ0FBQztBQUNqQixDQUFDLFVBQVUsWUFBWTtJQUNuQixZQUFZLENBQUMsTUFBTSxHQUFHLFVBQVUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUTtRQUN2SCxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBRS9CLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNmLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQzVELGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUN6QixVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUN4QixXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM5QixDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2hCLEVBQUUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7Z0JBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUNyRCxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNoQixpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsR0FBRztZQUNsQixFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7WUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFDMUIsVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNmLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDaEIsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUNqQixNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1QsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sQ0FBQztZQUVYLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoRCxJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDckMsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsTUFBTSxFQUFFLElBQUk7Z0JBQ1osU0FBUyxFQUFFLElBQUk7Z0JBQ2YsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLE1BQU0sRUFBRSxDQUFDO2dCQUNULFFBQVEsRUFBRSxFQUFFO2FBQ2YsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQztZQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLGVBQWU7WUFDN0MsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLGVBQWU7WUFDMUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQztZQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxlQUFlO1lBQzNDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ2pCLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxlQUFlO1lBQ3hDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLGVBQWU7WUFDMUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLGVBQWU7WUFDdkMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLENBQUM7WUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsZUFBZTtZQUM1QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUNqQixNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsZUFBZTtZQUN6QyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQztZQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDcEMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM1QixNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDdEMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztJQUVGLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsS0FBSztRQUN0QyxJQUFJLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQ2hDLEtBQUssQ0FBQyxJQUFJLEVBQ1YsS0FBSyxDQUFDLE1BQU0sRUFDWixLQUFLLENBQUMsU0FBUyxFQUNmLEtBQUssQ0FBQyxTQUFTLEVBQ2YsS0FBSyxDQUFDLFdBQVcsRUFDakIsS0FBSyxDQUFDLEtBQUssRUFDWCxLQUFLLENBQUMsTUFBTSxFQUNaLEtBQUssQ0FBQyxXQUFXLEVBQ2pCLEtBQUssQ0FBQyxJQUFJLEVBQ1YsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMvQyxNQUFNLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDdkMsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsQixDQUFDLENBQUM7SUFFRixZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxVQUFVLEtBQUs7UUFDdkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQztZQUM3QixNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQzVCLElBQUksRUFBRSxJQUFJO2dCQUNWLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFdBQVcsRUFBRSxLQUFLO2dCQUNsQixLQUFLLEVBQUUsRUFBRSxHQUFHLEtBQUs7Z0JBQ2pCLE1BQU0sRUFBRSxDQUFDO2dCQUNULFdBQVcsRUFBRSxJQUFJO2dCQUNqQixRQUFRLEVBQUUsRUFBRTthQUNmLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUM1SnhDLElBQUksWUFBWSxDQUFDO0FBQ2pCLENBQUMsVUFBVSxZQUFZO0lBRW5CLFlBQVksQ0FBQyxPQUFPLEdBQUcsVUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUk7UUFDcEosWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWxHLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFFM0IsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNoQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqRSxDQUFDLENBQUM7UUFFRiw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLElBQUk7WUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDM0IsQ0FBQyxDQUFBO1FBRUQsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ1osSUFBSSxNQUFNLEdBQUcsWUFBWSxFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUNoRCxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ2hELE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkIsQ0FBQyxDQUFDO0lBRUYsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsVUFBVSxLQUFLO1FBQ3ZDLElBQUksTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FDakMsS0FBSyxDQUFDLElBQUksRUFDVixLQUFLLENBQUMsTUFBTSxFQUNaLEtBQUssQ0FBQyxTQUFTLEVBQ2YsS0FBSyxDQUFDLFNBQVMsRUFDZixLQUFLLENBQUMsV0FBVyxFQUNqQixLQUFLLENBQUMsV0FBVyxFQUNqQixLQUFLLENBQUMsZ0JBQWdCLEVBQ3RCLEtBQUssQ0FBQyxnQkFBZ0IsRUFDdEIsS0FBSyxDQUFDLElBQUksRUFDVixLQUFLLENBQUMsU0FBUyxFQUNmLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQixNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztBQUVOLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDIiwiZmlsZSI6Ik1vZGVscy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgQXJyYXkucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcclxuICAgICAgICB0aGlzLnNwbGljZSh0bywgMCwgdGhpcy5zcGxpY2UoZnJvbSwgMSlbMF0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuY2hpbGRyZW5Gcm9tID0gZnVuY3Rpb24odmFsdWVzKSB7XHJcbiAgICAgICAgcmV0dXJuIF8odmFsdWVzKS5tYXAoZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIExheW91dEVkaXRvci5lbGVtZW50RnJvbSh2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciByZWdpc3RlckZhY3RvcnkgPSBMYXlvdXRFZGl0b3IucmVnaXN0ZXJGYWN0b3J5ID0gZnVuY3Rpb24odHlwZSwgZmFjdG9yeSkge1xyXG4gICAgICAgIHZhciBmYWN0b3JpZXMgPSBMYXlvdXRFZGl0b3IuZmFjdG9yaWVzID0gTGF5b3V0RWRpdG9yLmZhY3RvcmllcyB8fCB7fTtcclxuICAgICAgICBmYWN0b3JpZXNbdHlwZV0gPSBmYWN0b3J5O1xyXG4gICAgfTtcclxuXHJcbiAgICByZWdpc3RlckZhY3RvcnkoXCJDYW52YXNcIiwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBMYXlvdXRFZGl0b3IuQ2FudmFzLmZyb20odmFsdWUpOyB9KTtcclxuICAgIHJlZ2lzdGVyRmFjdG9yeShcIkdyaWRcIiwgZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIExheW91dEVkaXRvci5HcmlkLmZyb20odmFsdWUpOyB9KTtcclxuICAgIHJlZ2lzdGVyRmFjdG9yeShcIlJvd1wiLCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHZhbHVlKTsgfSk7XHJcbiAgICByZWdpc3RlckZhY3RvcnkoXCJDb2x1bW5cIiwgZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIExheW91dEVkaXRvci5Db2x1bW4uZnJvbSh2YWx1ZSk7IH0pO1xyXG4gICAgcmVnaXN0ZXJGYWN0b3J5KFwiQ29udGVudFwiLCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gTGF5b3V0RWRpdG9yLkNvbnRlbnQuZnJvbSh2YWx1ZSk7IH0pO1xyXG5cclxuICAgIExheW91dEVkaXRvci5lbGVtZW50RnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciBmYWN0b3J5ID0gTGF5b3V0RWRpdG9yLmZhY3Rvcmllc1t2YWx1ZS50eXBlXTtcclxuXHJcbiAgICAgICAgaWYgKCFmYWN0b3J5KVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBlbGVtZW50IHdpdGggdHlwZSBcXFwiXCIgKyB2YWx1ZS50eXBlICsgXCJcXFwiIHdhcyBmb3VuZC5cIik7XHJcblxyXG4gICAgICAgIHZhciBlbGVtZW50ID0gZmFjdG9yeSh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9O1xyXG5cclxuICAgIExheW91dEVkaXRvci5zZXRNb2RlbCA9IGZ1bmN0aW9uIChlbGVtZW50U2VsZWN0b3IsIG1vZGVsKSB7XHJcbiAgICAgICAgJChlbGVtZW50U2VsZWN0b3IpLnNjb3BlKCkuZWxlbWVudCA9IG1vZGVsO1xyXG4gICAgfTtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuZ2V0TW9kZWwgPSBmdW5jdGlvbiAoZWxlbWVudFNlbGVjdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuICQoZWxlbWVudFNlbGVjdG9yKS5zY29wZSgpLmVsZW1lbnQ7XHJcbiAgICB9O1xyXG5cclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyIsInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkVkaXRvciA9IGZ1bmN0aW9uIChjb25maWcsIGNhbnZhc0RhdGEpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcclxuICAgICAgICB0aGlzLmNhbnZhcyA9IExheW91dEVkaXRvci5DYW52YXMuZnJvbShjYW52YXNEYXRhKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxTdGF0ZSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY2FudmFzLnRvT2JqZWN0KCkpO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kcm9wVGFyZ2V0RWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc1Jlc2l6aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZWN5Y2xlQmluID0gbmV3IExheW91dEVkaXRvci5SZWN5Y2xlQmluKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXRUb29sYm94RWxlbWVudHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9vbGJveEVsZW1lbnRzID0gW1xyXG4gICAgICAgICAgICAgICAgTGF5b3V0RWRpdG9yLlJvdy5mcm9tKHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNhbnZhcy50b09iamVjdCgpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbFN0YXRlICE9IGN1cnJlbnRTdGF0ZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnJlc2V0VG9vbGJveEVsZW1lbnRzKCk7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2V0RWRpdG9yKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcbn0pKExheW91dEVkaXRvciB8fCAoTGF5b3V0RWRpdG9yID0ge30pKTtcclxuIiwidmFyIExheW91dEVkaXRvcjtcclxuKGZ1bmN0aW9uIChMYXlvdXRFZGl0b3IpIHtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuUmVjeWNsZUJpbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnRzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuYWRkID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy50b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwiUmVjeWNsZUJpblwiLFxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBkdG8gPSBlbGVtZW50LnRvT2JqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuY2hpbGRyZW4ucHVzaChkdG8pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpO1xyXG4iLCJ2YXIgTGF5b3V0RWRpdG9yO1xyXG4oZnVuY3Rpb24gKExheW91dEVkaXRvcikge1xyXG5cclxuICAgIExheW91dEVkaXRvci5FbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUsIGRhdGEsIGh0bWxJZCwgaHRtbENsYXNzLCBodG1sU3R5bGUsIGlzVGVtcGxhdGVkLCBydWxlKSB7XHJcbiAgICAgICAgaWYgKCF0eXBlKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgJ3R5cGUnIGlzIHJlcXVpcmVkLlwiKTtcclxuXHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLmh0bWxJZCA9IGh0bWxJZDtcclxuICAgICAgICB0aGlzLmh0bWxDbGFzcyA9IGh0bWxDbGFzcztcclxuICAgICAgICB0aGlzLmh0bWxTdHlsZSA9IGh0bWxTdHlsZTtcclxuICAgICAgICB0aGlzLmlzVGVtcGxhdGVkID0gaXNUZW1wbGF0ZWQ7XHJcbiAgICAgICAgdGhpcy5ydWxlID0gcnVsZTtcclxuXHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVN0eWxlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuZWRpdG9yID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzZWRFdmVudEhhbmRsZXJzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuc2V0RWRpdG9yID0gZnVuY3Rpb24gKGVkaXRvcikge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5jaGlsZHJlbiAmJiBfLmlzQXJyYXkodGhpcy5jaGlsZHJlbikpIHtcclxuICAgICAgICAgICAgICAgIF8odGhpcy5jaGlsZHJlbikuZWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZC5zZXRFZGl0b3IoZWRpdG9yKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQYXJlbnQgPSBmdW5jdGlvbihwYXJlbnRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQub25DaGlsZEFkZGVkKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRBbmNlc3RvciA9IHBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHdoaWxlICghIWN1cnJlbnRBbmNlc3Rvcikge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEFuY2VzdG9yLm9uRGVzY2VuZGFudEFkZGVkKHRoaXMsIHBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEFuY2VzdG9yID0gY3VycmVudEFuY2VzdG9yLnBhcmVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SXNUZW1wbGF0ZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1RlbXBsYXRlZCA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoISF0aGlzLmNoaWxkcmVuICYmIF8uaXNBcnJheSh0aGlzLmNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICAgICAgXyh0aGlzLmNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnNldElzVGVtcGxhdGVkKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5hcHBseUVsZW1lbnRFZGl0b3JNb2RlbCA9IGZ1bmN0aW9uKCkgeyAvKiBWaXJ0dWFsICovIH07XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0SXNBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lZGl0b3IpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5hY3RpdmVFbGVtZW50ID09PSB0aGlzICYmICF0aGlzLmdldElzRm9jdXNlZCgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SXNBY3RpdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmVkaXRvcilcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yLmlzRHJhZ2dpbmcgfHwgdGhpcy5lZGl0b3IuaXNSZXNpemluZylcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmFjdGl2ZUVsZW1lbnQgPSB0aGlzO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5hY3RpdmVFbGVtZW50ID0gdGhpcy5wYXJlbnQ7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRJc0ZvY3VzZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lZGl0b3IpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5mb2N1c2VkRWxlbWVudCA9PT0gdGhpcztcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNldElzRm9jdXNlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmVkaXRvcilcclxuICAgICAgICAgICAgXHRyZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGlsZHJlbiAmJiB0aGlzLmlzVGVtcGxhdGVkKVxyXG4gICAgICAgICAgICBcdHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yLmlzRHJhZ2dpbmcgfHwgdGhpcy5lZGl0b3IuaXNSZXNpemluZylcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmZvY3VzZWRFbGVtZW50ID0gdGhpcztcclxuICAgICAgICAgICAgXyh0aGlzLnNldElzRm9jdXNlZEV2ZW50SGFuZGxlcnMpLmVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlLlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmdldElzU2VsZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdldElzRm9jdXNlZCgpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoISF0aGlzLmNoaWxkcmVuICYmIF8uaXNBcnJheSh0aGlzLmNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8odGhpcy5jaGlsZHJlbikuYW55KGZ1bmN0aW9uKGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLmdldElzU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRJc0Ryb3BUYXJnZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lZGl0b3IpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvci5kcm9wVGFyZ2V0RWxlbWVudCA9PT0gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SXNEcm9wVGFyZ2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lZGl0b3IpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmRyb3BUYXJnZXRFbGVtZW50ID0gdGhpcztcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuZHJvcFRhcmdldEVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuRGVsZXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1RlbXBsYXRlZCB8fCAhdGhpcy5wYXJlbnQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZGVsZXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuRGVsZXRlKCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmRlbGV0ZUNoaWxkKHRoaXMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuTW92ZVVwID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1RlbXBsYXRlZCB8fCAhdGhpcy5wYXJlbnQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jYW5Nb3ZlQ2hpbGRVcCh0aGlzKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm1vdmVVcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbk1vdmVVcCgpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5tb3ZlQ2hpbGRVcCh0aGlzKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNhbk1vdmVEb3duID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1RlbXBsYXRlZCB8fCAhdGhpcy5wYXJlbnQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jYW5Nb3ZlQ2hpbGREb3duKHRoaXMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMubW92ZURvd24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5Nb3ZlRG93bigpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5tb3ZlQ2hpbGREb3duKHRoaXMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZWxlbWVudFRvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxyXG4gICAgICAgICAgICAgICAgaHRtbElkOiB0aGlzLmh0bWxJZCxcclxuICAgICAgICAgICAgICAgIGh0bWxDbGFzczogdGhpcy5odG1sQ2xhc3MsXHJcbiAgICAgICAgICAgICAgICBodG1sU3R5bGU6IHRoaXMuaHRtbFN0eWxlLFxyXG4gICAgICAgICAgICAgICAgaXNUZW1wbGF0ZWQ6IHRoaXMuaXNUZW1wbGF0ZWQsXHJcbiAgICAgICAgICAgICAgICBydWxlOiB0aGlzLnJ1bGUsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogdGhpcy5jb250ZW50VHlwZSxcclxuICAgICAgICAgICAgICAgIGhhc0VkaXRvcjogdGhpcy5oYXNFZGl0b3JcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmdldEVkaXRvck9iamVjdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge307XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy50b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuZWxlbWVudFRvT2JqZWN0KCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jb3B5ID0gZnVuY3Rpb24gKGNsaXBib2FyZERhdGEpIHtcclxuICAgICAgICAgICAgdmFyIHRleHQgPSB0aGlzLmdldElubmVyVGV4dCgpO1xyXG4gICAgICAgICAgICBjbGlwYm9hcmREYXRhLnNldERhdGEoXCJ0ZXh0L3BsYWluXCIsIHRleHQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLnRvT2JqZWN0KCk7XHJcbiAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgXCJcXHRcIik7XHJcbiAgICAgICAgICAgIGNsaXBib2FyZERhdGEuc2V0RGF0YShcInRleHQvanNvblwiLCBqc29uKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmN1dCA9IGZ1bmN0aW9uIChjbGlwYm9hcmREYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbkRlbGV0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvcHkoY2xpcGJvYXJkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXN0ZSA9IGZ1bmN0aW9uIChjbGlwYm9hcmREYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMucGFyZW50KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQucGFzdGUoY2xpcGJvYXJkRGF0YSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZVN0eWxlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHN0eWxlcyA9IHRoaXMudGVtcGxhdGVTdHlsZXMgfHwge307XHJcbiAgICAgICAgICAgIHZhciBjc3MgPSBcIlwiO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gc3R5bGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjc3MgKz0gcHJvcGVydHkgKyBcIjpcIiArIHN0eWxlc1twcm9wZXJ0eV0gKyBcIjtcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNzcztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpOyIsInZhciBMYXlvdXRFZGl0b3I7XHJcbihmdW5jdGlvbiAoTGF5b3V0RWRpdG9yKSB7XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkNvbnRhaW5lciA9IGZ1bmN0aW9uIChhbGxvd2VkQ2hpbGRUeXBlcywgY2hpbGRyZW4pIHtcclxuXHJcbiAgICAgICAgdGhpcy5hbGxvd2VkQ2hpbGRUeXBlcyA9IGFsbG93ZWRDaGlsZFR5cGVzO1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgICAgICB0aGlzLmlzQ29udGFpbmVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lclRlbXBsYXRlU3R5bGVzID0ge307XHJcblxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5vbkNoaWxkQWRkZWQgPSBmdW5jdGlvbiAoZWxlbWVudCkgeyAvKiBWaXJ0dWFsICovIH07XHJcbiAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRBZGRlZCA9IGZ1bmN0aW9uIChlbGVtZW50LCBwYXJlbnRFbGVtZW50KSB7IC8qIFZpcnR1YWwgKi8gfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRDaGlsZHJlbiA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xyXG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICAgICAgICAgIF8odGhpcy5jaGlsZHJlbikuZWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkLnNldFBhcmVudChzZWxmKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRDaGlsZHJlbihjaGlsZHJlbik7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0SXNTZWFsZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfKHRoaXMuY2hpbGRyZW4pLmFueShmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZC5pc1RlbXBsYXRlZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIF9iYXNlU2V0SXNGb2N1c2VkID0gdGhpcy5zZXRJc0ZvY3VzZWQ7XHJcbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdldElzU2VhbGVkKCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIF9iYXNlU2V0SXNGb2N1c2VkLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIV8odGhpcy5jaGlsZHJlbikuY29udGFpbnMoY2hpbGQpICYmIChfKHRoaXMuYWxsb3dlZENoaWxkVHlwZXMpLmNvbnRhaW5zKGNoaWxkLnR5cGUpIHx8IGNoaWxkLmlzQ29udGFpbmFibGUpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgY2hpbGQuc2V0RWRpdG9yKHRoaXMuZWRpdG9yKTtcclxuICAgICAgICAgICAgY2hpbGQuc2V0SXNUZW1wbGF0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBjaGlsZC5zZXRQYXJlbnQodGhpcyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5kZWxldGVDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY2hpbGQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IucmVjeWNsZUJpbi5hZGQoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmdldElzQWN0aXZlKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuYWN0aXZlRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0SXNGb2N1c2VkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZGVsZXRlZCBjaGlsZCB3YXMgZm9jdXNlZCwgdHJ5IHRvIHNldCBuZXcgZm9jdXMgdG8gdGhlIG1vc3QgYXBwcm9wcmlhdGUgc2libGluZyBvciBwYXJlbnQuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gaW5kZXgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baW5kZXhdLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluZGV4ID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpbmRleCAtIDFdLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMubW92ZUZvY3VzUHJldkNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA8IDIpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjaGlsZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2luZGV4IC0gMV0uc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5tb3ZlRm9jdXNOZXh0Q2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoIDwgMilcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNoaWxkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpbmRleCArIDFdLnNldElzRm9jdXNlZCgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuaW5zZXJ0Q2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQsIGFmdGVyQ2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKCFfKHRoaXMuY2hpbGRyZW4pLmNvbnRhaW5zKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gTWF0aC5tYXgoXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGFmdGVyQ2hpbGQpLCAwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4ICsgMSwgMCwgY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgY2hpbGQuc2V0RWRpdG9yKHRoaXMuZWRpdG9yKTtcclxuICAgICAgICAgICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm1vdmVDaGlsZFVwID0gZnVuY3Rpb24gKGNoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5Nb3ZlQ2hpbGRVcChjaGlsZCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjaGlsZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ubW92ZShpbmRleCwgaW5kZXggLSAxKTtcclxuICAgICAgICAgICAgJC5ldmVudC50cmlnZ2VyKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwibGF5b3V0ZWRpdG9yOmVkaXRlZFwiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMubW92ZUNoaWxkRG93biA9IGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuTW92ZUNoaWxkRG93bihjaGlsZCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjaGlsZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ubW92ZShpbmRleCwgaW5kZXggKyAxKTtcclxuICAgICAgICAgICAgJC5ldmVudC50cmlnZ2VyKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwibGF5b3V0ZWRpdG9yOmVkaXRlZFwiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuTW92ZUNoaWxkVXAgPSBmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNoaWxkKTtcclxuICAgICAgICAgICAgcmV0dXJuIGluZGV4ID4gMDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNhbk1vdmVDaGlsZERvd24gPSBmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNoaWxkKTtcclxuICAgICAgICAgICAgcmV0dXJuIGluZGV4IDwgdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2hpbGRyZW5Ub09iamVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF8odGhpcy5jaGlsZHJlbikubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLnRvT2JqZWN0KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0SW5uZXJUZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXyh0aGlzLmNoaWxkcmVuKS5yZWR1Y2UoZnVuY3Rpb24gKG1lbW8sIGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWVtbyArIFwiXFxuXCIgKyBjaGlsZC5nZXRJbm5lclRleHQoKTtcclxuICAgICAgICAgICAgfSwgXCJcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBhc3RlID0gZnVuY3Rpb24gKGNsaXBib2FyZERhdGEpIHtcclxuICAgICAgICAgICAgdmFyIGpzb24gPSBjbGlwYm9hcmREYXRhLmdldERhdGEoXCJ0ZXh0L2pzb25cIik7XHJcbiAgICAgICAgICAgIGlmICghIWpzb24pIHtcclxuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShqc29uKTtcclxuICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IExheW91dEVkaXRvci5lbGVtZW50RnJvbShkYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFzdGVDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnBhc3RlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKF8odGhpcy5hbGxvd2VkQ2hpbGRUeXBlcykuY29udGFpbnMoY2hpbGQudHlwZSkgfHwgY2hpbGQuaXNDb250YWluYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5zZXRJc0ZvY3VzZWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghIXRoaXMucGFyZW50KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQucGFzdGVDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdldENvbnRhaW5lclRlbXBsYXRlU3R5bGVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc3R5bGVzID0gdGhpcy5jb250YWluZXJUZW1wbGF0ZVN0eWxlcyB8fCB7fTtcclxuICAgICAgICAgICAgdmFyIGNzcyA9IFwiXCI7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBzdHlsZXMpIHtcclxuICAgICAgICAgICAgICAgIGNzcyArPSBwcm9wZXJ0eSArIFwiOlwiICsgc3R5bGVzW3Byb3BlcnR5XSArIFwiO1wiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gY3NzO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG59KShMYXlvdXRFZGl0b3IgfHwgKExheW91dEVkaXRvciA9IHt9KSk7IiwidmFyIExheW91dEVkaXRvcjtcclxuKGZ1bmN0aW9uIChMYXlvdXRFZGl0b3IpIHtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuQ2FudmFzID0gZnVuY3Rpb24gKGRhdGEsIGh0bWxJZCwgaHRtbENsYXNzLCBodG1sU3R5bGUsIGlzVGVtcGxhdGVkLCBydWxlLCBjaGlsZHJlbikge1xyXG4gICAgICAgIExheW91dEVkaXRvci5FbGVtZW50LmNhbGwodGhpcywgXCJDYW52YXNcIiwgZGF0YSwgaHRtbElkLCBodG1sQ2xhc3MsIGh0bWxTdHlsZSwgaXNUZW1wbGF0ZWQsIHJ1bGUpO1xyXG4gICAgICAgIExheW91dEVkaXRvci5Db250YWluZXIuY2FsbCh0aGlzLCBbXCJDYW52YXNcIiwgXCJHcmlkXCIsIFwiQ29udGVudFwiXSwgY2hpbGRyZW4pO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ29udGFpbmFibGUgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnRvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5lbGVtZW50VG9PYmplY3QoKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNoaWxkcmVuID0gdGhpcy5jaGlsZHJlblRvT2JqZWN0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLkNhbnZhcy5mcm9tID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBMYXlvdXRFZGl0b3IuQ2FudmFzKFxyXG4gICAgICAgICAgICB2YWx1ZS5kYXRhLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sSWQsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWxDbGFzcyxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbFN0eWxlLFxyXG4gICAgICAgICAgICB2YWx1ZS5pc1RlbXBsYXRlZCxcclxuICAgICAgICAgICAgdmFsdWUucnVsZSxcclxuICAgICAgICAgICAgTGF5b3V0RWRpdG9yLmNoaWxkcmVuRnJvbSh2YWx1ZS5jaGlsZHJlbikpO1xyXG5cclxuICAgICAgICByZXN1bHQudG9vbGJveEljb24gPSB2YWx1ZS50b29sYm94SWNvbjtcclxuICAgICAgICByZXN1bHQudG9vbGJveExhYmVsID0gdmFsdWUudG9vbGJveExhYmVsO1xyXG4gICAgICAgIHJlc3VsdC50b29sYm94RGVzY3JpcHRpb24gPSB2YWx1ZS50b29sYm94RGVzY3JpcHRpb247XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG5cclxufSkoTGF5b3V0RWRpdG9yIHx8IChMYXlvdXRFZGl0b3IgPSB7fSkpO1xyXG4iLCJ2YXIgTGF5b3V0RWRpdG9yO1xyXG4oZnVuY3Rpb24gKExheW91dEVkaXRvcikge1xyXG5cclxuICAgIExheW91dEVkaXRvci5HcmlkID0gZnVuY3Rpb24gKGRhdGEsIGh0bWxJZCwgaHRtbENsYXNzLCBodG1sU3R5bGUsIGlzVGVtcGxhdGVkLCBydWxlLCBjaGlsZHJlbikge1xyXG4gICAgICAgIExheW91dEVkaXRvci5FbGVtZW50LmNhbGwodGhpcywgXCJHcmlkXCIsIGRhdGEsIGh0bWxJZCwgaHRtbENsYXNzLCBodG1sU3R5bGUsIGlzVGVtcGxhdGVkLCBydWxlKTtcclxuICAgICAgICBMYXlvdXRFZGl0b3IuQ29udGFpbmVyLmNhbGwodGhpcywgW1wiUm93XCJdLCBjaGlsZHJlbik7XHJcblxyXG4gICAgICAgIHRoaXMudG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmVsZW1lbnRUb09iamVjdCgpO1xyXG4gICAgICAgICAgICByZXN1bHQuY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuVG9PYmplY3QoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuR3JpZC5mcm9tID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBMYXlvdXRFZGl0b3IuR3JpZChcclxuICAgICAgICAgICAgdmFsdWUuZGF0YSxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbElkLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sQ2xhc3MsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWxTdHlsZSxcclxuICAgICAgICAgICAgdmFsdWUuaXNUZW1wbGF0ZWQsXHJcbiAgICAgICAgICAgIHZhbHVlLnJ1bGUsXHJcbiAgICAgICAgICAgIExheW91dEVkaXRvci5jaGlsZHJlbkZyb20odmFsdWUuY2hpbGRyZW4pKTtcclxuICAgICAgICByZXN1bHQudG9vbGJveEljb24gPSB2YWx1ZS50b29sYm94SWNvbjtcclxuICAgICAgICByZXN1bHQudG9vbGJveExhYmVsID0gdmFsdWUudG9vbGJveExhYmVsO1xyXG4gICAgICAgIHJlc3VsdC50b29sYm94RGVzY3JpcHRpb24gPSB2YWx1ZS50b29sYm94RGVzY3JpcHRpb247XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcblxyXG59KShMYXlvdXRFZGl0b3IgfHwgKExheW91dEVkaXRvciA9IHt9KSk7IiwidmFyIExheW91dEVkaXRvcjtcclxuKGZ1bmN0aW9uIChMYXlvdXRFZGl0b3IpIHtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuUm93ID0gZnVuY3Rpb24gKGRhdGEsIGh0bWxJZCwgaHRtbENsYXNzLCBodG1sU3R5bGUsIGlzVGVtcGxhdGVkLCBydWxlLCBjaGlsZHJlbikge1xyXG4gICAgICAgIExheW91dEVkaXRvci5FbGVtZW50LmNhbGwodGhpcywgXCJSb3dcIiwgZGF0YSwgaHRtbElkLCBodG1sQ2xhc3MsIGh0bWxTdHlsZSwgaXNUZW1wbGF0ZWQsIHJ1bGUpO1xyXG4gICAgICAgIExheW91dEVkaXRvci5Db250YWluZXIuY2FsbCh0aGlzLCBbXCJDb2x1bW5cIl0sIGNoaWxkcmVuKTtcclxuXHJcbiAgICAgICAgdmFyIF9zZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX2dldFRvdGFsQ29sdW1uc1dpZHRoKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXyhfc2VsZi5jaGlsZHJlbikucmVkdWNlKGZ1bmN0aW9uIChtZW1vLCBjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lbW8gKyBjaGlsZC5vZmZzZXQgKyBjaGlsZC53aWR0aDtcclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJbXBsZW1lbnRzIGEgc2ltcGxlIGFsZ29yaXRobSB0byBkaXN0cmlidXRlIHNwYWNlIChlaXRoZXIgcG9zaXRpdmUgb3IgbmVnYXRpdmUpXHJcbiAgICAgICAgLy8gYmV0d2VlbiB0aGUgY2hpbGQgY29sdW1ucyBvZiB0aGUgcm93LiBOZWdhdGl2ZSBzcGFjZSBpcyBkaXN0cmlidXRlZCB3aGVuIG1ha2luZ1xyXG4gICAgICAgIC8vIHJvb20gZm9yIGEgbmV3IGNvbHVtbiAoZS5jLiBjbGlwYm9hcmQgcGFzdGUgb3IgZHJvcHBpbmcgZnJvbSB0aGUgdG9vbGJveCkgd2hpbGVcclxuICAgICAgICAvLyBwb3NpdGl2ZSBzcGFjZSBpcyBkaXN0cmlidXRlZCB3aGVuIGZpbGxpbmcgdGhlIGdyYXAgb2YgYSByZW1vdmVkIGNvbHVtbi5cclxuICAgICAgICBmdW5jdGlvbiBfZGlzdHJpYnV0ZVNwYWNlKHNwYWNlKSB7XHJcbiAgICAgICAgICAgIGlmIChzcGFjZSA9PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHVuZGlzdHJpYnV0ZWRTcGFjZSA9IHNwYWNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHVuZGlzdHJpYnV0ZWRTcGFjZSA8IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWNhbnRTcGFjZSA9IDEyIC0gX2dldFRvdGFsQ29sdW1uc1dpZHRoKCk7XHJcbiAgICAgICAgICAgICAgICB1bmRpc3RyaWJ1dGVkU3BhY2UgKz0gdmFjYW50U3BhY2U7XHJcbiAgICAgICAgICAgICAgICBpZiAodW5kaXN0cmlidXRlZFNwYWNlID4gMClcclxuICAgICAgICAgICAgICAgICAgICB1bmRpc3RyaWJ1dGVkU3BhY2UgPSAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBzcGFjZSBpcyBuZWdhdGl2ZSwgdHJ5IHRvIGRlY3JlYXNlIG9mZnNldHMgZmlyc3QuXHJcbiAgICAgICAgICAgIHdoaWxlICh1bmRpc3RyaWJ1dGVkU3BhY2UgPCAwICYmIF8oX3NlbGYuY2hpbGRyZW4pLmFueShmdW5jdGlvbiAoY29sdW1uKSB7IHJldHVybiBjb2x1bW4ub2Zmc2V0ID4gMDsgfSkpIHsgLy8gV2hpbGUgdGhlcmUgaXMgc3RpbGwgb2Zmc2V0IGxlZnQgdG8gcmVtb3ZlLlxyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IF9zZWxmLmNoaWxkcmVuLmxlbmd0aCAmJiB1bmRpc3RyaWJ1dGVkU3BhY2UgPCAwOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gX3NlbGYuY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5vZmZzZXQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5vZmZzZXQtLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kaXN0cmlidXRlZFNwYWNlKys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBoYXNXaWR0aChjb2x1bW4pIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmRpc3RyaWJ1dGVkU3BhY2UgPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4ud2lkdGggPCAxMjtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVuZGlzdHJpYnV0ZWRTcGFjZSA8IDApXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi53aWR0aCA+IDE7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFRyeSB0byBkaXN0cmlidXRlIHJlbWFpbmluZyBzcGFjZSAoY291bGQgYmUgbmVnYXRpdmUgb3IgcG9zaXRpdmUpIHVzaW5nIHdpZHRocy5cclxuICAgICAgICAgICAgd2hpbGUgKHVuZGlzdHJpYnV0ZWRTcGFjZSAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBBbnkgbW9yZSBjb2x1bW4gd2lkdGggYXZhaWxhYmxlIGZvciBkaXN0cmlidXRpb24/XHJcbiAgICAgICAgICAgICAgICBpZiAoIV8oX3NlbGYuY2hpbGRyZW4pLmFueShoYXNXaWR0aCkpXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgX3NlbGYuY2hpbGRyZW4ubGVuZ3RoICYmIHVuZGlzdHJpYnV0ZWRTcGFjZSAhPSAwOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gX3NlbGYuY2hpbGRyZW5baSAlIF9zZWxmLmNoaWxkcmVuLmxlbmd0aF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1dpZHRoKGNvbHVtbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhID0gdW5kaXN0cmlidXRlZFNwYWNlIC8gTWF0aC5hYnModW5kaXN0cmlidXRlZFNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLndpZHRoICs9IGRlbHRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRpc3RyaWJ1dGVkU3BhY2UgLT0gZGVsdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVuZGlzdHJpYnV0ZWRTcGFjZSA9PSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIF9pc0FkZGluZ0NvbHVtbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmNhbkFkZENvbHVtbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoIDwgMTI7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5iZWdpbkFkZENvbHVtbiA9IGZ1bmN0aW9uIChuZXdDb2x1bW5XaWR0aCkge1xyXG4gICAgICAgICAgICBpZiAoISFfaXNBZGRpbmdDb2x1bW4pXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2x1bW4gYWRkIG9wZXJhdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzLlwiKVxyXG4gICAgICAgICAgICBfKHRoaXMuY2hpbGRyZW4pLmVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLmJlZ2luQ2hhbmdlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoX2Rpc3RyaWJ1dGVTcGFjZSgtbmV3Q29sdW1uV2lkdGgpKSB7XHJcbiAgICAgICAgICAgICAgICBfaXNBZGRpbmdDb2x1bW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXyh0aGlzLmNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5yb2xsYmFja0NoYW5nZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY29tbWl0QWRkQ29sdW1uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIV9pc0FkZGluZ0NvbHVtbilcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbHVtbiBhZGQgb3BlcmF0aW9uIGluIHByb2dyZXNzLlwiKVxyXG4gICAgICAgICAgICBfKHRoaXMuY2hpbGRyZW4pLmVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLmNvbW1pdENoYW5nZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgX2lzQWRkaW5nQ29sdW1uID0gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5yb2xsYmFja0FkZENvbHVtbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCFfaXNBZGRpbmdDb2x1bW4pXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb2x1bW4gYWRkIG9wZXJhdGlvbiBpbiBwcm9ncmVzcy5cIilcclxuICAgICAgICAgICAgXyh0aGlzLmNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5yb2xsYmFja0NoYW5nZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgX2lzQWRkaW5nQ29sdW1uID0gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIF9iYXNlRGVsZXRlQ2hpbGQgPSB0aGlzLmRlbGV0ZUNoaWxkO1xyXG4gICAgICAgIHRoaXMuZGVsZXRlQ2hpbGQgPSBmdW5jdGlvbiAoY29sdW1uKSB7IFxyXG4gICAgICAgICAgICB2YXIgd2lkdGggPSBjb2x1bW4ud2lkdGg7XHJcbiAgICAgICAgICAgIF9iYXNlRGVsZXRlQ2hpbGQuY2FsbCh0aGlzLCBjb2x1bW4pO1xyXG4gICAgICAgICAgICBfZGlzdHJpYnV0ZVNwYWNlKHdpZHRoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNhbkNvbnRyYWN0Q29sdW1uUmlnaHQgPSBmdW5jdGlvbiAoY29sdW1uLCBjb25uZWN0QWRqYWNlbnQpIHtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNvbHVtbik7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi53aWR0aCA+IDE7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRyYWN0Q29sdW1uUmlnaHQgPSBmdW5jdGlvbiAoY29sdW1uLCBjb25uZWN0QWRqYWNlbnQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbkNvbnRyYWN0Q29sdW1uUmlnaHQoY29sdW1uLCBjb25uZWN0QWRqYWNlbnQpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNvbHVtbik7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLndpZHRoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi53aWR0aC0tO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IGluZGV4ICsgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dENvbHVtbiA9IHRoaXMuY2hpbGRyZW5baW5kZXggKyAxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3RBZGphY2VudCAmJiBuZXh0Q29sdW1uLm9mZnNldCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENvbHVtbi53aWR0aCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Q29sdW1uLm9mZnNldCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FuRXhwYW5kQ29sdW1uUmlnaHQgPSBmdW5jdGlvbiAoY29sdW1uLCBjb25uZWN0QWRqYWNlbnQpIHtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNvbHVtbik7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLndpZHRoID49IDEyKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IGluZGV4ICsgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0Q29sdW1uID0gdGhpcy5jaGlsZHJlbltpbmRleCArIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0QWRqYWNlbnQgJiYgbmV4dENvbHVtbi5vZmZzZXQgPT0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRDb2x1bW4ud2lkdGggPiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRDb2x1bW4ub2Zmc2V0ID4gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0VG90YWxDb2x1bW5zV2lkdGgoKSA8IDEyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmV4cGFuZENvbHVtblJpZ2h0ID0gZnVuY3Rpb24gKGNvbHVtbiwgY29ubmVjdEFkamFjZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5FeHBhbmRDb2x1bW5SaWdodChjb2x1bW4sIGNvbm5lY3RBZGphY2VudCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY29sdW1uKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IGluZGV4ICsgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0Q29sdW1uID0gdGhpcy5jaGlsZHJlbltpbmRleCArIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0QWRqYWNlbnQgJiYgbmV4dENvbHVtbi5vZmZzZXQgPT0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENvbHVtbi53aWR0aC0tO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENvbHVtbi5vZmZzZXQtLTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbHVtbi53aWR0aCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5FeHBhbmRDb2x1bW5MZWZ0ID0gZnVuY3Rpb24gKGNvbHVtbiwgY29ubmVjdEFkamFjZW50KSB7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjb2x1bW4pO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi53aWR0aCA+PSAxMilcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZDb2x1bW4gPSB0aGlzLmNoaWxkcmVuW2luZGV4IC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3RBZGphY2VudCAmJiBjb2x1bW4ub2Zmc2V0ID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2Q29sdW1uLndpZHRoID4gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4ub2Zmc2V0ID4gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5leHBhbmRDb2x1bW5MZWZ0ID0gZnVuY3Rpb24gKGNvbHVtbiwgY29ubmVjdEFkamFjZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5FeHBhbmRDb2x1bW5MZWZ0KGNvbHVtbiwgY29ubmVjdEFkamFjZW50KSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IF8odGhpcy5jaGlsZHJlbikuaW5kZXhPZihjb2x1bW4pO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmV2Q29sdW1uID0gdGhpcy5jaGlsZHJlbltpbmRleCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0QWRqYWNlbnQgJiYgY29sdW1uLm9mZnNldCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2Q29sdW1uLndpZHRoLS07XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4ub2Zmc2V0LS07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLm9mZnNldC0tO1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLndpZHRoKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNhbkNvbnRyYWN0Q29sdW1uTGVmdCA9IGZ1bmN0aW9uIChjb2x1bW4sIGNvbm5lY3RBZGphY2VudCkge1xyXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBfKHRoaXMuY2hpbGRyZW4pLmluZGV4T2YoY29sdW1uKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLndpZHRoID4gMTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY29udHJhY3RDb2x1bW5MZWZ0ID0gZnVuY3Rpb24gKGNvbHVtbiwgY29ubmVjdEFkamFjZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5Db250cmFjdENvbHVtbkxlZnQoY29sdW1uLCBjb25uZWN0QWRqYWNlbnQpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gXyh0aGlzLmNoaWxkcmVuKS5pbmRleE9mKGNvbHVtbik7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZDb2x1bW4gPSB0aGlzLmNoaWxkcmVuW2luZGV4IC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3RBZGphY2VudCAmJiBjb2x1bW4ub2Zmc2V0ID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZDb2x1bW4ud2lkdGgrKztcclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5vZmZzZXQrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4ub2Zmc2V0Kys7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4ud2lkdGgtLTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbkNvbHVtbnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdmFyIGV2ZW5XaWR0aCA9IE1hdGguZmxvb3IoMTIgLyB0aGlzLmNoaWxkcmVuLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIF8odGhpcy5jaGlsZHJlbikuZWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4ud2lkdGggPSBldmVuV2lkdGg7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4ub2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVzdCA9IDEyICUgdGhpcy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICAgIGlmIChyZXN0ID4gMClcclxuICAgICAgICAgICAgICAgIF9kaXN0cmlidXRlU3BhY2UocmVzdCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIF9iYXNlUGFzdGVDaGlsZCA9IHRoaXMucGFzdGVDaGlsZDtcclxuICAgICAgICB0aGlzLnBhc3RlQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpIHtcclxuICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT0gXCJDb2x1bW5cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmVnaW5BZGRDb2x1bW4oY2hpbGQud2lkdGgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21taXRBZGRDb2x1bW4oKTtcclxuICAgICAgICAgICAgICAgICAgICBfYmFzZVBhc3RlQ2hpbGQuY2FsbCh0aGlzLCBjaGlsZClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghIXRoaXMucGFyZW50KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQucGFzdGVDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5lbGVtZW50VG9PYmplY3QoKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNoaWxkcmVuID0gdGhpcy5jaGlsZHJlblRvT2JqZWN0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgTGF5b3V0RWRpdG9yLlJvdy5mcm9tID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBMYXlvdXRFZGl0b3IuUm93KFxyXG4gICAgICAgICAgICB2YWx1ZS5kYXRhLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sSWQsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWxDbGFzcyxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbFN0eWxlLFxyXG4gICAgICAgICAgICB2YWx1ZS5pc1RlbXBsYXRlZCxcclxuICAgICAgICAgICAgdmFsdWUucnVsZSxcclxuICAgICAgICAgICAgTGF5b3V0RWRpdG9yLmNoaWxkcmVuRnJvbSh2YWx1ZS5jaGlsZHJlbikpO1xyXG4gICAgICAgIHJlc3VsdC50b29sYm94SWNvbiA9IHZhbHVlLnRvb2xib3hJY29uO1xyXG4gICAgICAgIHJlc3VsdC50b29sYm94TGFiZWwgPSB2YWx1ZS50b29sYm94TGFiZWw7XHJcbiAgICAgICAgcmVzdWx0LnRvb2xib3hEZXNjcmlwdGlvbiA9IHZhbHVlLnRvb2xib3hEZXNjcmlwdGlvbjtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbn0pKExheW91dEVkaXRvciB8fCAoTGF5b3V0RWRpdG9yID0ge30pKTsiLCJ2YXIgTGF5b3V0RWRpdG9yO1xyXG4oZnVuY3Rpb24gKExheW91dEVkaXRvcikge1xyXG4gICAgTGF5b3V0RWRpdG9yLkNvbHVtbiA9IGZ1bmN0aW9uIChkYXRhLCBodG1sSWQsIGh0bWxDbGFzcywgaHRtbFN0eWxlLCBpc1RlbXBsYXRlZCwgd2lkdGgsIG9mZnNldCwgY29sbGFwc2libGUsIHJ1bGUsIGNoaWxkcmVuKSB7XHJcbiAgICAgICAgTGF5b3V0RWRpdG9yLkVsZW1lbnQuY2FsbCh0aGlzLCBcIkNvbHVtblwiLCBkYXRhLCBodG1sSWQsIGh0bWxDbGFzcywgaHRtbFN0eWxlLCBpc1RlbXBsYXRlZCwgcnVsZSk7XHJcbiAgICAgICAgTGF5b3V0RWRpdG9yLkNvbnRhaW5lci5jYWxsKHRoaXMsIFtcIkdyaWRcIiwgXCJDb250ZW50XCJdLCBjaGlsZHJlbik7XHJcblxyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcclxuICAgICAgICB0aGlzLmNvbGxhcHNpYmxlID0gY29sbGFwc2libGU7XHJcblxyXG4gICAgICAgIHZhciBfaGFzUGVuZGluZ0NoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBfb3JpZ1dpZHRoID0gMDtcclxuICAgICAgICB2YXIgX29yaWdPZmZzZXQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLmJlZ2luQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoISFfaGFzUGVuZGluZ0NoYW5nZSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbHVtbiBhbHJlYWR5IGhhcyBhIHBlbmRpbmcgY2hhbmdlLlwiKTtcclxuICAgICAgICAgICAgX2hhc1BlbmRpbmdDaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgICAgICBfb3JpZ1dpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICAgICAgX29yaWdPZmZzZXQgPSB0aGlzLm9mZnNldDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNvbW1pdENoYW5nZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCFfaGFzUGVuZGluZ0NoYW5nZSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbHVtbiBoYXMgbm8gcGVuZGluZyBjaGFuZ2UuXCIpO1xyXG4gICAgICAgICAgICBfb3JpZ1dpZHRoID0gMDtcclxuICAgICAgICAgICAgX29yaWdPZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICBfaGFzUGVuZGluZ0NoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMucm9sbGJhY2tDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghX2hhc1BlbmRpbmdDaGFuZ2UpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2x1bW4gaGFzIG5vIHBlbmRpbmcgY2hhbmdlLlwiKTtcclxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IF9vcmlnV2lkdGg7XHJcbiAgICAgICAgICAgIHRoaXMub2Zmc2V0ID0gX29yaWdPZmZzZXQ7XHJcbiAgICAgICAgICAgIF9vcmlnV2lkdGggPSAwO1xyXG4gICAgICAgICAgICBfb3JpZ09mZnNldCA9IDA7XHJcbiAgICAgICAgICAgIF9oYXNQZW5kaW5nQ2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5TcGxpdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNUZW1wbGF0ZWQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndpZHRoID4gMTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNwbGl0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FuU3BsaXQoKSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHZhciBuZXdDb2x1bW5XaWR0aCA9IE1hdGguZmxvb3IodGhpcy53aWR0aCAvIDIpO1xyXG4gICAgICAgICAgICB2YXIgbmV3Q29sdW1uID0gTGF5b3V0RWRpdG9yLkNvbHVtbi5mcm9tKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBodG1sSWQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBodG1sQ2xhc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBodG1sU3R5bGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogbmV3Q29sdW1uV2lkdGgsXHJcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLndpZHRoID0gdGhpcy53aWR0aCAtIG5ld0NvbHVtbldpZHRoO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5pbnNlcnRDaGlsZChuZXdDb2x1bW4sIHRoaXMpO1xyXG4gICAgICAgICAgICBuZXdDb2x1bW4uc2V0SXNGb2N1c2VkKCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5Db250cmFjdFJpZ2h0ID0gZnVuY3Rpb24gKGNvbm5lY3RBZGphY2VudCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1RlbXBsYXRlZClcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmNhbkNvbnRyYWN0Q29sdW1uUmlnaHQodGhpcywgY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRyYWN0UmlnaHQgPSBmdW5jdGlvbiAoY29ubmVjdEFkamFjZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5Db250cmFjdFJpZ2h0KGNvbm5lY3RBZGphY2VudCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmNvbnRyYWN0Q29sdW1uUmlnaHQodGhpcywgY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNhbkV4cGFuZFJpZ2h0ID0gZnVuY3Rpb24gKGNvbm5lY3RBZGphY2VudCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1RlbXBsYXRlZClcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmNhbkV4cGFuZENvbHVtblJpZ2h0KHRoaXMsIGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5leHBhbmRSaWdodCA9IGZ1bmN0aW9uIChjb25uZWN0QWRqYWNlbnQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbkV4cGFuZFJpZ2h0KGNvbm5lY3RBZGphY2VudCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmV4cGFuZENvbHVtblJpZ2h0KHRoaXMsIGNvbm5lY3RBZGphY2VudCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5FeHBhbmRMZWZ0ID0gZnVuY3Rpb24gKGNvbm5lY3RBZGphY2VudCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1RlbXBsYXRlZClcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmNhbkV4cGFuZENvbHVtbkxlZnQodGhpcywgY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmV4cGFuZExlZnQgPSBmdW5jdGlvbiAoY29ubmVjdEFkamFjZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5FeHBhbmRMZWZ0KGNvbm5lY3RBZGphY2VudCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmV4cGFuZENvbHVtbkxlZnQodGhpcywgY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNhbkNvbnRyYWN0TGVmdCA9IGZ1bmN0aW9uIChjb25uZWN0QWRqYWNlbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNUZW1wbGF0ZWQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jYW5Db250cmFjdENvbHVtbkxlZnQodGhpcywgY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRyYWN0TGVmdCA9IGZ1bmN0aW9uIChjb25uZWN0QWRqYWNlbnQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhbkNvbnRyYWN0TGVmdChjb25uZWN0QWRqYWNlbnQpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5jb250cmFjdENvbHVtbkxlZnQodGhpcywgY29ubmVjdEFkamFjZW50KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnRvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5lbGVtZW50VG9PYmplY3QoKTtcclxuICAgICAgICAgICAgcmVzdWx0LndpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICAgICAgcmVzdWx0Lm9mZnNldCA9IHRoaXMub2Zmc2V0O1xyXG4gICAgICAgICAgICByZXN1bHQuY29sbGFwc2libGUgPSB0aGlzLmNvbGxhcHNpYmxlO1xyXG4gICAgICAgICAgICByZXN1bHQuY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuVG9PYmplY3QoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuQ29sdW1uLmZyb20gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExheW91dEVkaXRvci5Db2x1bW4oXHJcbiAgICAgICAgICAgIHZhbHVlLmRhdGEsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWxJZCxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbENsYXNzLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sU3R5bGUsXHJcbiAgICAgICAgICAgIHZhbHVlLmlzVGVtcGxhdGVkLFxyXG4gICAgICAgICAgICB2YWx1ZS53aWR0aCxcclxuICAgICAgICAgICAgdmFsdWUub2Zmc2V0LFxyXG4gICAgICAgICAgICB2YWx1ZS5jb2xsYXBzaWJsZSxcclxuICAgICAgICAgICAgdmFsdWUucnVsZSxcclxuICAgICAgICAgICAgTGF5b3V0RWRpdG9yLmNoaWxkcmVuRnJvbSh2YWx1ZS5jaGlsZHJlbikpO1xyXG4gICAgICAgIHJlc3VsdC50b29sYm94SWNvbiA9IHZhbHVlLnRvb2xib3hJY29uO1xyXG4gICAgICAgIHJlc3VsdC50b29sYm94TGFiZWwgPSB2YWx1ZS50b29sYm94TGFiZWw7XHJcbiAgICAgICAgcmVzdWx0LnRvb2xib3hEZXNjcmlwdGlvbiA9IHZhbHVlLnRvb2xib3hEZXNjcmlwdGlvbjtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuQ29sdW1uLnRpbWVzID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIF8udGltZXModmFsdWUsIGZ1bmN0aW9uIChuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBMYXlvdXRFZGl0b3IuQ29sdW1uLmZyb20oe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogbnVsbCxcclxuICAgICAgICAgICAgICAgIGh0bWxJZDogbnVsbCxcclxuICAgICAgICAgICAgICAgIGh0bWxDbGFzczogbnVsbCxcclxuICAgICAgICAgICAgICAgIGlzVGVtcGxhdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAxMiAvIHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICAgICAgICAgICAgY29sbGFwc2libGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG59KShMYXlvdXRFZGl0b3IgfHwgKExheW91dEVkaXRvciA9IHt9KSk7IiwidmFyIExheW91dEVkaXRvcjtcclxuKGZ1bmN0aW9uIChMYXlvdXRFZGl0b3IpIHtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuQ29udGVudCA9IGZ1bmN0aW9uIChkYXRhLCBodG1sSWQsIGh0bWxDbGFzcywgaHRtbFN0eWxlLCBpc1RlbXBsYXRlZCwgY29udGVudFR5cGUsIGNvbnRlbnRUeXBlTGFiZWwsIGNvbnRlbnRUeXBlQ2xhc3MsIGh0bWwsIGhhc0VkaXRvciwgcnVsZSkge1xyXG4gICAgICAgIExheW91dEVkaXRvci5FbGVtZW50LmNhbGwodGhpcywgXCJDb250ZW50XCIsIGRhdGEsIGh0bWxJZCwgaHRtbENsYXNzLCBodG1sU3R5bGUsIGlzVGVtcGxhdGVkLCBydWxlKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlO1xyXG4gICAgICAgIHRoaXMuY29udGVudFR5cGVMYWJlbCA9IGNvbnRlbnRUeXBlTGFiZWw7XHJcbiAgICAgICAgdGhpcy5jb250ZW50VHlwZUNsYXNzID0gY29udGVudFR5cGVDbGFzcztcclxuICAgICAgICB0aGlzLmh0bWwgPSBodG1sO1xyXG4gICAgICAgIHRoaXMuaGFzRWRpdG9yID0gaGFzRWRpdG9yO1xyXG5cclxuICAgICAgICB0aGlzLmdldElubmVyVGV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICQoJC5wYXJzZUhUTUwoXCI8ZGl2PlwiICsgdGhpcy5odG1sICsgXCI8L2Rpdj5cIikpLnRleHQoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIENvbnRlbnQgZGlyZWN0aXZlLlxyXG4gICAgICAgIHRoaXMuc2V0SHRtbCA9IGZ1bmN0aW9uIChodG1sKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaHRtbCA9IGh0bWw7XHJcbiAgICAgICAgICAgIHRoaXMuaHRtbFVuc2FmZSA9IGh0bWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYmFzZVRvT2JqZWN0ID0gdGhpcy50b09iamVjdDtcclxuICAgICAgICB0aGlzLnRvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYmFzZVRvT2JqZWN0KCk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jb250ZW50VHlwZUxhYmVsID0gdGhpcy5jb250ZW50VHlwZUxhYmVsO1xyXG4gICAgICAgICAgICByZXN1bHQuY29udGVudFR5cGVDbGFzcyA9IHRoaXMuY29udGVudFR5cGVDbGFzcztcclxuICAgICAgICAgICAgcmVzdWx0Lmh0bWwgPSB0aGlzLmh0bWw7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRIdG1sKGh0bWwpO1xyXG4gICAgfTtcclxuXHJcbiAgICBMYXlvdXRFZGl0b3IuQ29udGVudC5mcm9tID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBMYXlvdXRFZGl0b3IuQ29udGVudChcclxuICAgICAgICAgICAgdmFsdWUuZGF0YSxcclxuICAgICAgICAgICAgdmFsdWUuaHRtbElkLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sQ2xhc3MsXHJcbiAgICAgICAgICAgIHZhbHVlLmh0bWxTdHlsZSxcclxuICAgICAgICAgICAgdmFsdWUuaXNUZW1wbGF0ZWQsXHJcbiAgICAgICAgICAgIHZhbHVlLmNvbnRlbnRUeXBlLFxyXG4gICAgICAgICAgICB2YWx1ZS5jb250ZW50VHlwZUxhYmVsLFxyXG4gICAgICAgICAgICB2YWx1ZS5jb250ZW50VHlwZUNsYXNzLFxyXG4gICAgICAgICAgICB2YWx1ZS5odG1sLFxyXG4gICAgICAgICAgICB2YWx1ZS5oYXNFZGl0b3IsXHJcbiAgICAgICAgICAgIHZhbHVlLnJ1bGUpO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbn0pKExheW91dEVkaXRvciB8fCAoTGF5b3V0RWRpdG9yID0ge30pKTsiXX0= diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css index b850094cb52..9612a736efa 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css @@ -3,386 +3,301 @@ ** Any changes made directly to this file will be overwritten next time its asset group is processed by Gulp. */ -body .layout-toolbox-item { - border: 1px solid #e4e5e6; - background-color: #fff; - padding: 9px 12px; - cursor: default; - list-style-type: none; -} - - body .layout-toolbox-item i { - display: inline-block; - width: 16px; - font: normal normal normal 14px/1 FontAwesome; - } - - body .layout-toolbox-item + .layout-toolbox-item { - margin-top: 4px; - } - .layout-editor-toolbar { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - position: relative; - top: 10px; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: justify; + justify-content: space-between; + position: relative; + top: 10px; +} +.layout-editor-toolbar .layout-editor-toolbar-group { + display: -ms-flexbox; + display: flex; +} +.layout-editor-toolbar .layout-editor-toolbar-group > li + li { + margin-left: 12px; } - - .layout-editor-toolbar .layout-editor-toolbar-group { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - } - - .layout-editor-toolbar .layout-editor-toolbar-group > li + li { - margin-left: 12px; - } - .layout-editor { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - margin-top: 1em; - font-size: 14px; - -webkit-align-items: stretch; - -ms-flex-align: stretch; - align-items: stretch; + display: -ms-flexbox; + display: flex; + margin-top: 1em; + font-size: 14px; + -ms-flex-align: stretch; + align-items: stretch; +} +.layout-editor > .layout-canvas-wrapper { + -ms-flex-positive: 1; + flex-grow: 1; + background-color: #f3f4f5; + border: 1px solid #e4e5e6; +} +.layout-editor > .layout-canvas-wrapper > .layout-toolbar-container { + display: none; + margin: 12px 12px 0; + min-height: 71px; +} +.layout-editor > .layout-canvas-wrapper > .layout-toolbar-container > .mce-panel { + width: 100% !important; +} +.layout-editor > .layout-canvas-wrapper .layout-content > .layout-element-wrapper .layout-content-markup > .layout-placeholder { + border: 1px dashed #ccc; + padding: 0.2em 0.4em; + background: #e8e8e8; +} +.layout-editor .layout-snippet { + background: #e8e8e8; } - - .layout-editor > .layout-canvas-wrapper { - -webkit-flex-grow: 1; - -ms-flex-positive: 1; - flex-grow: 1; - background-color: #f3f4f5; - border: 1px solid #e4e5e6; - } - - .layout-editor > .layout-canvas-wrapper > .layout-toolbar-container { - display: none; - margin: 12px 12px 0; - min-height: 71px; - } - - .layout-editor > .layout-canvas-wrapper > .layout-toolbar-container > .mce-panel { - width: 100% !important; - } - - .layout-editor > .layout-canvas-wrapper .layout-content > .layout-element-wrapper .layout-content-markup > .layout-placeholder { - border: 1px dashed #ccc; - padding: 0.2em 0.4em; - background: #e8e8e8; - } - - .layout-editor .layout-snippet { - background: #e8e8e8; - } - .layout-editor-help-dialog { - display: none; + display: none; +} +.layout-editor-help-dialog .help-row:before, +.layout-editor-help-dialog .help-row:after { + content: " "; + display: table; +} +.layout-editor-help-dialog .help-row:after { + clear: both; +} +.layout-editor-help-dialog .help-row > .help-column-full, +.layout-editor-help-dialog .help-row > .help-column-half { + margin: 0.5em 0; +} +.layout-editor-help-dialog .help-row > .help-column-half { + box-sizing: border-box; + float: left; + width: 50%; +} +.layout-editor-help-dialog .help-row > .help-column-half:nth-child(2n) { + padding-right: 10px; + clear: left; +} +.layout-editor-help-dialog .help-row + .help-row { + margin-top: 1em; +} +.layout-editor-help-dialog code { + border-radius: 4px; + background-color: #f3f4f5; + padding: 2px 4px; + font-family: monospace; +} +.layout-editor-help-dialog p { + margin-bottom: 0.5em; + line-height: 1.6em; +} +.layout-editor-help-dialog table > tbody > tr > td:first-child { + padding-right: 10px; } - - .layout-editor-help-dialog .help-row:before, - .layout-editor-help-dialog .help-row:after { - content: " "; - display: table; - } - - .layout-editor-help-dialog .help-row:after { - clear: both; - } - - .layout-editor-help-dialog .help-row > .help-column-full, - .layout-editor-help-dialog .help-row > .help-column-half { - margin: 0.5em 0; - } - - .layout-editor-help-dialog .help-row > .help-column-half { - box-sizing: border-box; - float: left; - width: 50%; - } - - .layout-editor-help-dialog .help-row > .help-column-half:nth-child(2n) { - padding-right: 10px; - clear: left; - } - - .layout-editor-help-dialog .help-row + .help-row { - margin-top: 1em; - } - - .layout-editor-help-dialog code { - border-radius: 4px; - background-color: #f3f4f5; - padding: 2px 4px; - font-family: monospace; - } - - .layout-editor-help-dialog p { - margin-bottom: 0.5em; - line-height: 1.6em; - } - - .layout-editor-help-dialog table > tbody > tr > td:first-child { - padding-right: 10px; - } .layout-editor .layout-element { - position: relative; - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - padding: 0; + position: relative; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + padding: 0; +} +.layout-editor .layout-element:not(.layout-column) { + margin-left: 0; +} +.layout-editor .layout-element > .layout-element-wrapper > .layout-panel { + display: none; + position: absolute; + margin: 0; + z-index: 20; + height: 25px; + padding: 0 6px; + list-style: none; + white-space: nowrap; + line-height: 25px; + vertical-align: middle; +} +.layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-item { + display: inline-block; + height: 25px; + padding: 1px 6px 0; +} +.layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-label { + font-size: 13px; +} +.layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-action { + display: none; + width: 28px; + cursor: pointer; + text-align: center; +} +.layout-editor .layout-element > .layout-element-wrapper > .layout-panel-main { + top: -27px; + left: -2px; } - - .layout-editor .layout-element:not(.layout-column) { - margin-left: 0; - } - - .layout-editor .layout-element > .layout-element-wrapper > .layout-panel { - display: none; - position: absolute; - margin: 0; - z-index: 20; - height: 25px; - padding: 0 6px; - list-style: none; - white-space: nowrap; - line-height: 25px; - vertical-align: middle; - } - - .layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-item { - display: inline-block; - height: 25px; - padding: 1px 6px 0; - } - - .layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-label { - font-size: 13px; - } - - .layout-editor .layout-element > .layout-element-wrapper > .layout-panel > .layout-panel-action { - display: none; - width: 28px; - cursor: pointer; - text-align: center; - } - - .layout-editor .layout-element > .layout-element-wrapper > .layout-panel-main { - top: -27px; - left: -2px; - } - .layout-editor li.layout-element { - list-style: none; + list-style: none; } - .layout-editor:not(.layout-editor-dragging) .layout-element-active, .layout-editor:not(.layout-editor-dragging) .layout-element-focused { - border-width: 2px; - border-style: solid; + border-width: 2px; + border-style: solid; +} +.layout-editor:not(.layout-editor-dragging) .layout-element-active > .layout-element-wrapper, +.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper { + margin: -2px; } - - .layout-editor:not(.layout-editor-dragging) .layout-element-active > .layout-element-wrapper, - .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper { - margin: -2px; - } - .layout-editor:not(.layout-editor-dragging) .layout-element-active { - border-color: rgba(104, 104, 104, 0.1); + border-color: rgba(104, 104, 104, 0.1); +} +.layout-editor:not(.layout-editor-dragging) .layout-element-active > .layout-element-wrapper > .layout-panel-main { + display: block; + z-index: 30; + background-color: rgba(104, 104, 104, 0.1); } - - .layout-editor:not(.layout-editor-dragging) .layout-element-active > .layout-element-wrapper > .layout-panel-main { - display: block; - z-index: 30; - background-color: rgba(104, 104, 104, 0.1); - } - .layout-editor:not(.layout-editor-dragging) .layout-element-focused { - border-color: #648721; + border-color: #648721; +} +.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel { + display: block; + background-color: #648721; + color: #fefefe; +} +.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action { + display: inline-block; +} +.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action:hover { + background-color: #82b02b; +} +.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.disabled { + cursor: default; + color: rgba(254, 254, 254, 0.4); +} +.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.disabled:hover { + background-color: #648721; +} +.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.active { + color: #deff42; + background-color: #739b26; +} +.layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.active:hover { + background-color: #82b02b; } - - .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel { - display: block; - background-color: #648721; - color: #fefefe; - } - - .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action { - display: inline-block; - } - - .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action:hover { - background-color: #82b02b; - } - - .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.disabled { - cursor: default; - color: rgba(254, 254, 254, 0.4); - } - - .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.disabled:hover { - background-color: #648721; - } - - .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.active { - color: #deff42; - background-color: #739b26; - } - - .layout-editor:not(.layout-editor-dragging) .layout-element-focused > .layout-element-wrapper > .layout-panel > .layout-panel-action.active:hover { - background-color: #82b02b; - } - .layout-editor:not(.layout-editor-dragging) .layout-element-selected { - background-color: rgba(100, 135, 33, 0.08); + background-color: rgba(100, 135, 33, 0.08); } - .layout-editor .ui-sortable-placeholder { - display: none; + display: none; } - .layout-editor .layout-element-droptarget { - box-shadow: inset 0 0 12px 6px rgba(100, 135, 33, 0.5); + box-shadow: inset 0 0 12px 6px rgba(100, 135, 33, 0.5); +} +.layout-editor .layout-element-droptarget .ui-sortable-placeholder { + display: block; + visibility: visible !important; + min-height: 78px; + border: 2px dashed #648721 !important; + background-color: rgba(100, 135, 33, 0.16); } - - .layout-editor .layout-element-droptarget .ui-sortable-placeholder { - display: block; - visibility: visible !important; - min-height: 78px; - border: 2px dashed #648721 !important; - background-color: rgba(100, 135, 33, 0.16); - } - .layout-editor .media-thumbnail img { - max-width: 100%; - max-height: 100%; + max-width: 100%; + max-height: 100%; } .layout-editor .layout-container > .layout-element-wrapper > .layout-container-children-placeholder { - display: none; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - margin: 11px; - min-height: 80px; - border: 1px dashed rgba(124, 124, 124, 0.4); - border-radius: 4px; - padding: 12px; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - font-size: 13px; - font-style: italic; - opacity: 0.6; - text-align: center; + display: none; + -ms-flex-direction: column; + flex-direction: column; + margin: 11px; + min-height: 80px; + border: 1px dashed rgba(124, 124, 124, 0.4); + border-radius: 4px; + padding: 12px; + -ms-flex-pack: center; + justify-content: center; + font-size: 13px; + font-style: italic; + opacity: 0.6; + text-align: center; } - .layout-editor .layout-container > .layout-element-wrapper > .layout-children { - padding: 12px; + padding: 12px; +} +.layout-editor .layout-container > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-container) + .layout-element:not(.layout-container) { + margin-top: 12px; +} +.layout-editor .layout-container > .layout-element-wrapper > .layout-children > .ui-sortable-helper:first-child + .layout-element:not(.layout-container) { + margin-top: 0; } - - .layout-editor .layout-container > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-container) + .layout-element:not(.layout-container) { - margin-top: 12px; - } - - .layout-editor .layout-container > .layout-element-wrapper > .layout-children > .ui-sortable-helper:first-child + .layout-element:not(.layout-container) { - margin-top: 0; - } - .layout-editor .layout-container > .layout-element-wrapper.layout-container-empty > .layout-container-children-placeholder { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; + display: -ms-flexbox; + display: flex; } - .layout-editor .layout-container > .layout-element-wrapper.layout-container-empty > .layout-children { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; } - .layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) { - border: 1px dashed rgba(124, 124, 124, 0.6); + border: 1px dashed rgba(124, 124, 124, 0.6); +} +.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) > .layout-element-wrapper { + margin: -1px; } - - .layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) > .layout-element-wrapper { - margin: -1px; - } - .layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-container + .layout-container:not(.layout-element-active) { - border-top: 0; + border-top: 0; +} +.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-container + .layout-container:not(.layout-element-active) > .layout-element-wrapper { + margin-top: 0; } - - .layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused > .layout-element-wrapper > .layout-children > .layout-container + .layout-container:not(.layout-element-active) > .layout-element-wrapper { - margin-top: 0; - } .layout-editor .layout-canvas #dummy { - display: none; + display: none; } .layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) { - border-top: 1px dashed rgba(124, 124, 124, 0.6) !important; + border-top: 1px dashed rgba(124, 124, 124, 0.6) !important; +} +.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) > .layout-element-wrapper { + margin-top: -1px !important; } - - .layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element:not(.layout-element-active) > .layout-element-wrapper { - margin-top: -1px !important; - } - .layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element + .layout-element:not(.layout-element-active) { - border-left: 0 !important; + border-left: 0 !important; +} +.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element + .layout-element:not(.layout-element-active) > .layout-element-wrapper { + margin-left: 0 !important; } - - .layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget) > .layout-element-wrapper > .layout-children > .layout-element + .layout-element:not(.layout-element-active) > .layout-element-wrapper { - margin-left: 0 !important; - } .layout-editor .layout-column > .layout-element-wrapper > .layout-column-resize-bar { - display: none; - position: absolute; - z-index: 30; - top: 0; - width: 16px; - height: 100%; - cursor: col-resize; + display: none; + position: absolute; + z-index: 30; + top: 0; + width: 16px; + height: 100%; + cursor: col-resize; } - .layout-editor .layout-column > .layout-element-wrapper > .layout-column-resize-bar-left { - left: -6px; + left: -6px; } - .layout-editor .layout-column > .layout-element-wrapper > .layout-column-resize-bar-right { - right: -6px; + right: -6px; } - .layout-editor .layout-column.layout-element-focused > .layout-element-wrapper > .layout-column-resize-bar { - display: block; + display: block; } .layout-editor .layout-content, .layout-editor .layout-html { - min-height: 1em; + min-height: 1em; } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup { - padding: 2px; - overflow-x: hidden; - line-height: normal; - /* this color is just a suggestion and can be changed based on implementation feedback */ - /* this also has bidi implications */ - /* this also has bidi implications */ - /* LTR-specific: use 'margin-right' for rtl elements */ - /* LTR-specific: use 'padding-right' for rtl elements */ - /*table[rules=none i], table[rules=groups i], table[rules=rows i], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup { + padding: 2px; + overflow-x: hidden; + line-height: normal; + /* this color is just a suggestion and can be changed based on implementation feedback */ + /* this also has bidi implications */ + /* this also has bidi implications */ + /* LTR-specific: use 'margin-right' for rtl elements */ + /* LTR-specific: use 'padding-right' for rtl elements */ + /*table[rules=none i], table[rules=groups i], table[rules=rows i], table[rules=cols i], table[rules=all i], table[frame=void i], table[frame=above i], table[frame=below i], table[frame=hsides i], table[frame=lhs i], table[frame=rhs i], table[frame=vsides i], @@ -409,911 +324,819 @@ table[rules=cols i] > tfoot > tr > td, table[rules=cols i] > tfoot > tr > th, table[rules=all i] > tfoot > tr > td, table[rules=all i] > tfoot > tr > th { border-color: black; }*/ - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup *, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup * { - margin: 0; - padding: 0; - box-sizing: content-box; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup address, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup address, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup center, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup center, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup div, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup div, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figcaption, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figcaption, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup footer, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup footer, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup form, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup form, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup header, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup header, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hr, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup legend, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup legend, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup p, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup p, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { - display: block; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup p, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup p, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { - margin-top: 1em; - margin-bottom: 1em; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure { - margin-left: 40px; - margin-right: 40px; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup address, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup address { - font-style: italic; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { - font-family: monospace; - white-space: pre; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup cite, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup cite, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dfn, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dfn, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup em, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup em, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup i, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup i, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup var, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup var { - font-style: italic; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup b, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup b, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup strong, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup strong { - font-weight: bolder; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup code, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup code, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup kbd, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup kbd, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup samp, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup samp, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tt, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tt { - font-family: monospace; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup big, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup big { - font-size: larger; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup small, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup small { - font-size: smaller; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sub, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sub { - vertical-align: sub; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sup, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sup { - vertical-align: super; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sub, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sub, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sup, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sup { - line-height: normal; - font-size: smaller; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ruby, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ruby { - display: ruby; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rb, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rb { - display: ruby-base; - white-space: nowrap; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rt, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rt { - display: ruby-text; - white-space: nowrap; - font-size: 50%; - font-variant-east-asian: ruby; - -webkit-text-emphasis: none; - text-emphasis: none; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rbc, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rbc { - display: ruby-base-container; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rtc, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rtc { - display: ruby-text-container; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ruby, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ruby, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rb, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rb, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rt, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rt, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rbc, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rbc, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rtc, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rtc { - unicode-bidi: isolate; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :link, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :link { - color: #0000EE; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :visited, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :visited { - color: #551A8B; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :link, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :link, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :visited, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :visited { - text-decoration: underline; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup a:link[rel~=help], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup a:link[rel~=help], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup a:visited[rel~=help], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup a:visited[rel~=help], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup area:link[rel~=help], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup area:link[rel~=help], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup area:visited[rel~=help], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup area:visited[rel~=help] { - cursor: help; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :focus, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :focus { - outline: auto; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup mark, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup mark { - background: yellow; - color: black; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup abbr[title], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup abbr[title], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup acronym[title], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup acronym[title] { - text-decoration: dotted underline; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ins, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ins, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup u, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup u { - text-decoration: underline; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup del, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup del, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup s, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup s, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup strike, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup strike { - text-decoration: line-through; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blink, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blink { - text-decoration: blink; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup q::before, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup q::before { - content: open-quote; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup q::after, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup q::after { - content: close-quote; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup br::before, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup br::before { - content: '\A'; - white-space: pre; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nobr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nobr { - white-space: nowrap; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup wbr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup wbr { - content: '\200B'; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nobr wbr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nobr wbr { - white-space: normal; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup article, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup article, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup aside, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup aside, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h1, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h1, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h2, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h2, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h3, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h3, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h4, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h4, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h5, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h5, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h6, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h6, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hgroup, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hgroup, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nav, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nav, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup section, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup section { - display: block; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h1, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h1 { - margin-top: 0.67em; - margin-bottom: 0.67em; - font-size: 2.00em; - font-weight: bold; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h2, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h2 { - margin-top: 0.83em; - margin-bottom: 0.83em; - font-size: 1.50em; - font-weight: bold; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h3, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h3 { - margin-top: 1.00em; - margin-bottom: 1.00em; - font-size: 1.17em; - font-weight: bold; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h4, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h4 { - margin-top: 1.33em; - margin-bottom: 1.33em; - font-size: 1.00em; - font-weight: bold; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h5, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h5 { - margin-top: 1.67em; - margin-bottom: 1.67em; - font-size: 0.83em; - font-weight: bold; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h6, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h6 { - margin-top: 2.33em; - margin-bottom: 2.33em; - font-size: 0.67em; - font-weight: bold; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dd, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dd, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dt, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dt, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { - display: block; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup li, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup li { - display: list-item; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { - margin-top: 1em; - margin-bottom: 1em; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dl, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dl, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl dl, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl dl, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl ol, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl ol, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dl, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dl, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dl, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dl, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul { - margin-top: 0; - margin-bottom: 0; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dd, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dd { - margin-left: 40px; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { - padding-left: 40px; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol { - list-style-type: decimal; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { - list-style-type: disc; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul { - list-style-type: circle; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol ul, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul dir, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul dir, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul ul, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul ul { - list-style-type: square; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table { - display: table; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup caption, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup caption { - display: table-caption; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup[hidden] { - display: table-column-group; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col[hidden] { - display: table-column; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead[hidden] { - display: table-header-group; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody[hidden] { - display: table-row-group; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot[hidden] { - display: table-footer-group; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr[hidden] { - display: table-row; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td[hidden], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th[hidden] { - display: table-cell; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup[hidden], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col[hidden], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead[hidden], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody[hidden], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot[hidden], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr[hidden], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td[hidden], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th[hidden], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th[hidden] { - visibility: collapse; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table { - box-sizing: border-box; - border-spacing: 2px; - border-collapse: separate; - text-indent: initial; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { - padding: 1px; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { - font-weight: bold; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table > tr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table > tr { - vertical-align: middle; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { - vertical-align: inherit; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { - border-color: gray; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr { - border-color: inherit; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup select, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup select, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup option, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup option, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup optgroup, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup optgroup, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup textarea, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup textarea, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup keygen, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup keygen { - text-indent: initial; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup textarea, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup textarea { - white-space: pre-wrap; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="radio"], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="radio"], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="checkbox"], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="checkbox"], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="reset"], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="reset"], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="button"], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="button"], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="submit"], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="submit"], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup select, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup select, - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button { - box-sizing: border-box; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="button"], - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="button"], - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button { - padding: 0.3em 0.5em; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hr, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hr { - color: gray; - border-style: inset; - border-width: 1px; - margin: 0.5em auto; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup fieldset, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup fieldset { - margin-left: 2px; - margin-right: 2px; - border: groove 2px ThreeDFace; - padding: 0.35em 0.625em 0.75em; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup legend, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup legend { - padding-left: 2px; - padding-right: 2px; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup > *:first-child, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup > *:first-child { - margin-top: 0 !important; - } - - .layout-editor .layout-content > .layout-element-wrapper .layout-content-markup > *:last-child, - .layout-editor .layout-html > .layout-element-wrapper .layout-content-markup > *:last-child { - margin-bottom: 0 !important; - } - - .layout-editor .layout-content.layout-content-image > .layout-element-wrapper > .layout-content-markup > img, - .layout-editor .layout-html.layout-content-image > .layout-element-wrapper > .layout-content-markup > img, - .layout-editor .layout-content.layout-content-vector-image > .layout-element-wrapper > .layout-content-markup > img, - .layout-editor .layout-html.layout-content-vector-image > .layout-element-wrapper > .layout-content-markup > img { - display: block; - width: 100%; - max-width: 100%; - height: auto; - } - +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup *, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup * { + margin: 0; + padding: 0; + box-sizing: content-box; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup address, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup address, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup center, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup center, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup div, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup div, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figcaption, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figcaption, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup footer, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup footer, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup form, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup form, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup header, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup header, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hr, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup legend, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup legend, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup p, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup p, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { + display: block; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup p, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup p, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { + margin-top: 1em; + margin-bottom: 1em; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blockquote, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blockquote, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup figure, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup figure { + margin-left: 40px; + margin-right: 40px; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup address, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup address { + font-style: italic; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup listing, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup listing, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup plaintext, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup plaintext, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup pre, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup pre, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup xmp, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup xmp { + font-family: monospace; + white-space: pre; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup cite, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup cite, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dfn, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dfn, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup em, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup em, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup i, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup i, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup var, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup var { + font-style: italic; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup b, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup b, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup strong, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup strong { + font-weight: bolder; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup code, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup code, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup kbd, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup kbd, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup samp, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup samp, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tt, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tt { + font-family: monospace; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup big, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup big { + font-size: larger; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup small, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup small { + font-size: smaller; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sub, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sub { + vertical-align: sub; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sup, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sup { + vertical-align: super; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sub, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sub, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup sup, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup sup { + line-height: normal; + font-size: smaller; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ruby, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ruby { + display: ruby; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rb, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rb { + display: ruby-base; + white-space: nowrap; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rt, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rt { + display: ruby-text; + white-space: nowrap; + font-size: 50%; + font-variant-east-asian: ruby; + text-emphasis: none; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rbc, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rbc { + display: ruby-base-container; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rtc, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rtc { + display: ruby-text-container; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ruby, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ruby, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rb, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rb, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rt, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rt, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rbc, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rbc, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup rtc, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup rtc { + unicode-bidi: isolate; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :link, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :link { + color: #0000EE; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :visited, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :visited { + color: #551A8B; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :link, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :link, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :visited, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :visited { + text-decoration: underline; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup a:link[rel~=help], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup a:link[rel~=help], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup a:visited[rel~=help], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup a:visited[rel~=help], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup area:link[rel~=help], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup area:link[rel~=help], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup area:visited[rel~=help], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup area:visited[rel~=help] { + cursor: help; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup :focus, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup :focus { + outline: auto; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup mark, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup mark { + background: yellow; + color: black; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup abbr[title], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup abbr[title], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup acronym[title], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup acronym[title] { + text-decoration: dotted underline; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ins, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ins, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup u, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup u { + text-decoration: underline; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup del, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup del, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup s, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup s, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup strike, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup strike { + text-decoration: line-through; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup blink, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup blink { + text-decoration: blink; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup q::before, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup q::before { + content: open-quote; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup q::after, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup q::after { + content: close-quote; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup br::before, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup br::before { + content: '\A'; + white-space: pre; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nobr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nobr { + white-space: nowrap; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup wbr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup wbr { + content: '\200B'; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nobr wbr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nobr wbr { + white-space: normal; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup article, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup article, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup aside, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup aside, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h1, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h1, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h2, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h2, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h3, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h3, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h4, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h4, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h5, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h5, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h6, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h6, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hgroup, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hgroup, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup nav, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup nav, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup section, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup section { + display: block; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h1, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h1 { + margin-top: 0.67em; + margin-bottom: 0.67em; + font-size: 2.00em; + font-weight: bold; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h2, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h2 { + margin-top: 0.83em; + margin-bottom: 0.83em; + font-size: 1.50em; + font-weight: bold; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h3, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h3 { + margin-top: 1.00em; + margin-bottom: 1.00em; + font-size: 1.17em; + font-weight: bold; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h4, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h4 { + margin-top: 1.33em; + margin-bottom: 1.33em; + font-size: 1.00em; + font-weight: bold; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h5, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h5 { + margin-top: 1.67em; + margin-bottom: 1.67em; + font-size: 0.83em; + font-weight: bold; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup h6, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup h6 { + margin-top: 2.33em; + margin-bottom: 2.33em; + font-size: 0.67em; + font-weight: bold; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dd, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dd, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dt, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dt, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { + display: block; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup li, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup li { + display: list-item; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { + margin-top: 1em; + margin-bottom: 1em; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dl, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dl, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl dl, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl dl, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl ol, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl ol, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dl ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dl ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dl, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dl, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dl, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dl, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul { + margin-top: 0; + margin-bottom: 0; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dd, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dd { + margin-left: 40px; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { + padding-left: 40px; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol { + list-style-type: decimal; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul { + list-style-type: disc; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul { + list-style-type: circle; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir dir ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir dir ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ol ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ol ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup dir ul ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup dir ul ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol dir ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol dir ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ol ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ol ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ol ul ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ol ul ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul dir ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul dir ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ol ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ol ul, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul dir, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul dir, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup ul ul ul, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup ul ul ul { + list-style-type: square; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table { + display: table; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup caption, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup caption { + display: table-caption; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup[hidden] { + display: table-column-group; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col[hidden] { + display: table-column; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead[hidden] { + display: table-header-group; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody[hidden] { + display: table-row-group; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot[hidden] { + display: table-footer-group; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr[hidden] { + display: table-row; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td[hidden], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th[hidden] { + display: table-cell; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup colgroup[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup colgroup[hidden], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup col[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup col[hidden], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead[hidden], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody[hidden], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot[hidden], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr[hidden], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td[hidden], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th[hidden], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th[hidden] { + visibility: collapse; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table { + box-sizing: border-box; + border-spacing: 2px; + border-collapse: separate; + text-indent: initial; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { + padding: 1px; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { + font-weight: bold; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table > tr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table > tr { + vertical-align: middle; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { + vertical-align: inherit; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup table, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup table, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup td, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup td, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup th, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup th { + border-color: gray; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup thead, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup thead, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tbody, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tbody, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tfoot, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tfoot, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup tr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup tr { + border-color: inherit; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup select, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup select, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup option, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup option, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup optgroup, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup optgroup, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup textarea, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup textarea, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup keygen, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup keygen { + text-indent: initial; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup textarea, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup textarea { + white-space: pre-wrap; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="radio"], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="radio"], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="checkbox"], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="checkbox"], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="reset"], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="reset"], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="button"], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="button"], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="submit"], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="submit"], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup select, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup select, +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button { + box-sizing: border-box; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup input[type="button"], +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup input[type="button"], +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup button, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup button { + padding: 0.3em 0.5em; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup hr, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup hr { + color: gray; + border-style: inset; + border-width: 1px; + margin: 0.5em auto; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup fieldset, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup fieldset { + margin-left: 2px; + margin-right: 2px; + border: groove 2px ThreeDFace; + padding: 0.35em 0.625em 0.75em; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup legend, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup legend { + padding-left: 2px; + padding-right: 2px; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup > *:first-child, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup > *:first-child { + margin-top: 0 !important; +} +.layout-editor .layout-content > .layout-element-wrapper .layout-content-markup > *:last-child, +.layout-editor .layout-html > .layout-element-wrapper .layout-content-markup > *:last-child { + margin-bottom: 0 !important; +} +.layout-editor .layout-content.layout-content-image > .layout-element-wrapper > .layout-content-markup > img, +.layout-editor .layout-html.layout-content-image > .layout-element-wrapper > .layout-content-markup > img, +.layout-editor .layout-content.layout-content-vector-image > .layout-element-wrapper > .layout-content-markup > img, +.layout-editor .layout-html.layout-content-vector-image > .layout-element-wrapper > .layout-content-markup > img { + display: block; + width: 100%; + max-width: 100%; + height: auto; +} .layout-editor .img-responsive, .layout-editor .img-responsive img { - display: block; - width: 100%; - max-width: 100%; - height: auto; + display: block; + width: 100%; + max-width: 100%; + height: auto; } +body .layout-toolbox-item { + border: 1px solid #e4e5e6; + background-color: #fff; + padding: 9px 12px; + cursor: default; + list-style-type: none; +} +body .layout-toolbox-item i { + display: inline-block; + width: 16px; + font: normal normal normal 14px/1 FontAwesome; +} +body .layout-toolbox-item + .layout-toolbox-item { + margin-top: 4px; +} .layout-editor > .layout-toolbox-wrapper { - margin-left: 12px; - width: 218px; - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; - max-height: calc(100vh - 80px); - overflow-x: clip; - overflow-y: auto; - position: -webkit-sticky; - position: sticky; - top: 0; + margin-left: 12px; + width: 218px; + -ms-flex-negative: 0; + flex-shrink: 0; + /* forcing the toolbox height to be smaller than the viewport height + so it is always visible and scrollable*/ + max-height: calc(20vh); + overflow-x: clip; + overflow-y: auto; + /* forcing the toolbox to stay sticked at the the top of its container */ + position: sticky; + top: 0; +} +.layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar { + width: 2px; +} +.layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px #000000; + border-radius: 1px; +} +.layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, 0.3); +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox { + border: 1px solid #e4e5e6; + width: 220px; + min-height: 400px; + padding: 6px; + background-color: #f3f4f5; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox.sticky-top { + position: fixed; + top: 0; + max-height: 100%; + overflow-y: auto; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox.sticky-bottom { + position: absolute; + bottom: 0; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group { + margin-top: 12px; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading { + display: block; + margin-bottom: 4px; + text-decoration: none; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading:before { + display: inline-block; + width: 10px; + margin-right: 4px; + font: normal normal normal 14px/1 FontAwesome; + text-align: center; + content: "\f0d7"; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-group-heading:before { + content: "\f0da"; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-items { + display: none; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-section + .layout-toolbox-section { + margin-top: 4px; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item { + border: 1px solid #e4e5e6; + background-color: #fff; + padding: 9px 12px; + cursor: default; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item i { + display: inline-block; + width: 16px; + font: normal normal normal 14px/1 FontAwesome; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item + .layout-toolbox-item { + margin-top: 4px; +} +.layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group + .layout-toolbox-group { + margin-top: 6px; } - - .layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar { - width: 2px; - } - - .layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar-track { - -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); - border-radius: 1px; - } - - .layout-editor > .layout-toolbox-wrapper::-webkit-scrollbar-thumb { - background-color: rgba(0,0,0,0.3); - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox { - border: 1px solid #e4e5e6; - width: 220px; - min-height: 400px; - padding: 6px; - background-color: #f3f4f5; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox.sticky-top { - position: fixed; - top: 0; - max-height: 100%; - overflow-y: auto; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox.sticky-bottom { - position: absolute; - bottom: 0; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group { - margin-top: 12px; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading { - display: block; - margin-bottom: 4px; - text-decoration: none; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading:before { - display: inline-block; - width: 10px; - margin-right: 4px; - font: normal normal normal 14px/1 FontAwesome; - text-align: center; - content: "\f0d7"; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-group-heading:before { - content: "\f0da"; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-items { - display: none; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-section + .layout-toolbox-section { - margin-top: 4px; - } - - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item { - border: 1px solid #e4e5e6; - background-color: #fff; - padding: 9px 12px; - cursor: default; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item i { - display: inline-block; - width: 16px; - font: normal normal normal 14px/1 FontAwesome; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group .layout-toolbox-item + .layout-toolbox-item { - margin-top: 4px; - } - - .layout-editor > .layout-toolbox-wrapper > .layout-toolbox .layout-toolbox-group + .layout-toolbox-group { - margin-top: 6px; - } .layout-editor .layout-popup { - display: none; - position: absolute; - margin: 0; - box-shadow: 3px 3px 11px 0 rgba(50, 50, 50, 0.5); - border: 1px solid #e4e5e6; - padding: 2px 0; - background-color: #f7f7f7; - list-style: none; - z-index: 20; - color: #7c7c7c; - text-align: left; - cursor: default; - white-space: nowrap; - line-height: normal; - min-width: 300px; + display: none; + position: absolute; + margin: 0; + box-shadow: 3px 3px 11px 0 rgba(50, 50, 50, 0.5); + border: 1px solid #e4e5e6; + padding: 2px 0; + background-color: #f7f7f7; + list-style: none; + z-index: 20; + color: #7c7c7c; + text-align: left; + cursor: default; + white-space: nowrap; + line-height: normal; + min-width: 300px; +} +.layout-editor .layout-popup.wide { + width: 600px; +} +.layout-editor .layout-popup .layout-popup-flex { + display: -ms-flexbox; + display: flex; + padding: 2px 5px; +} +.layout-editor .layout-popup .layout-popup-flex .layout-popup-column + .layout-popup-column { + margin-left: 4px; + border-left: 1px solid rgba(128, 128, 128, 0.15); + padding-left: 4px; +} +.layout-editor .layout-popup .layout-popup-item { + padding: 4px 6px; +} +.layout-editor .layout-popup .layout-popup-label { + font-size: 0.9em; + font-weight: bold; + color: #7c7c7c; +} +.layout-editor .layout-popup .layout-popup-action:hover { + background-color: #f3f4f5; + cursor: pointer; +} +.layout-editor .layout-popup .layout-popup-input input[type='text'], +.layout-editor .layout-popup .layout-popup-input textarea { + width: 100%; +} +.layout-editor .layout-popup .layout-popup-input > label { + display: block; + font-size: 0.9em; } - .layout-editor .layout-popup.wide { - width: 600px; - } - - .layout-editor .layout-popup .layout-popup-flex { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - padding: 2px 5px; - } - - .layout-editor .layout-popup .layout-popup-flex .layout-popup-column + .layout-popup-column { - margin-left: 4px; - border-left: 1px solid rgba(128, 128, 128, 0.15); - padding-left: 4px; - } - - .layout-editor .layout-popup .layout-popup-item { - padding: 4px 6px; - } - - .layout-editor .layout-popup .layout-popup-label { - font-size: 0.9em; - font-weight: bold; - color: #7c7c7c; - } - - .layout-editor .layout-popup .layout-popup-action:hover { - background-color: #f3f4f5; - cursor: pointer; - } - - .layout-editor .layout-popup .layout-popup-input input[type='text'], - .layout-editor .layout-popup .layout-popup-input textarea { - width: 100%; - } - - .layout-editor .layout-popup .layout-popup-input > label { - display: block; - font-size: 0.9em; - } - -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkVkaXRvci5sZXNzIiwiTGF5b3V0RWRpdG9yLmNzcyIsIkVsZW1lbnQubGVzcyIsIkNvbnRhaW5lci5sZXNzIiwiQ2FudmFzLmxlc3MiLCJSb3cubGVzcyIsIkNvbHVtbi5sZXNzIiwiQ29udGVudC5sZXNzIiwiUmVzZXQubGVzcyIsIlRvb2xib3gubGVzcyIsIlBvcHVwLmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQTtFQUNJLHFCQUFBO0VBQUEsY0FBQTtFQUNBLHVCQUFBO01BQUEsK0JBQUE7RUFDQSxtQkFBQTtFQUNBLFVBQUE7Q0NESDtBREhEO0VBT1EscUJBQUE7RUFBQSxjQUFBO0NDRFA7QURORDtFQVVZLGtCQUFBO0NDRFg7QURNRDtFQUNJLHFCQUFBO0VBQUEsY0FBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSx3QkFBQTtNQUFBLHFCQUFBO0NDSkg7QURBRDtFQU9RLHFCQUFBO01BQUEsYUFBQTtFQUNBLDBCQUFBO0VBQ0EsMEJBQUE7Q0NKUDtBRExEO0VBWVksY0FBQTtFQUNBLG9CQUFBO0VBQ0EsaUJBQUE7Q0NKWDtBRFZEO0VBaUJnQix1QkFBQTtDQ0pmO0FEYkQ7RUFzQlksd0JBQUE7RUFDQSxxQkFBQTtFQUNBLG9CQUFBO0NDTlg7QURsQkQ7RUE2QlEsb0JBQUE7Q0NSUDtBRFlEO0VBQ0ksY0FBQTtDQ1ZIO0FEYU87O0VBQ0ksYUFBQTtFQUNBLGVBQUE7Q0NWWDtBRGFPO0VBQ0ksWUFBQTtDQ1hYO0FEQ0Q7O0VBY1ksZ0JBQUE7Q0NYWDtBREhEO0VBa0JZLHVCQUFBO0VBQ0EsWUFBQTtFQUNBLFdBQUE7Q0NaWDtBRGNXO0VBQ0ksb0JBQUE7RUFDQSxZQUFBO0NDWmY7QURaRDtFQTZCWSxnQkFBQTtDQ2RYO0FEZkQ7RUFrQ1EsbUJBQUE7RUFDQSwwQkFBQTtFQUNBLGlCQUFBO0VBQ0EsdUJBQUE7Q0NoQlA7QURyQkQ7RUF5Q1EscUJBQUE7RUFDQSxtQkFBQTtDQ2pCUDtBRHpCRDtFQThDUSxvQkFBQTtDQ2xCUDs7QUM1RUQ7RUFFUSxtQkFBQTtFQUNBLGNBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0VBQ0EsV0FBQTtDRDhFUDtBQzNFTztFQUNJLGVBQUE7Q0Q2RVg7QUN2RkQ7RUFlZ0IsY0FBQTtFQUNBLG1CQUFBO0VBQ0EsVUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsZUFBQTtFQUNBLGlCQUFBO0VBQ0Esb0JBQUE7RUFDQSxrQkFBQTtFQUNBLHVCQUFBO0NEMkVmO0FDbkdEO0VBMkJvQixzQkFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtDRDJFbkI7QUN4R0Q7RUFpQ29CLGdCQUFBO0NEMEVuQjtBQzNHRDtFQXFDb0IsY0FBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0NEeUVuQjtBQ2pIRDtFQTZDZ0IsV0FBQTtFQUNBLFdBQUE7Q0R1RWY7QUNySEQ7RUFxRFEsaUJBQUE7Q0RtRVA7QUNoRUc7O0VBR1Esa0JBQUE7RUFDQSxvQkFBQTtDRGlFWDtBQ3JFRzs7RUFPWSxhQUFBO0NEa0VmO0FDekVHO0VBY1EsdUNBQUE7Q0Q4RFg7QUM1RUc7RUFpQlksZUFBQTtFQUNBLFlBQUE7RUFDQSwyQ0FBQTtDRDhEZjtBQ2pGRztFQTJCUSxzQkFBQTtDRHlEWDtBQ3BGRztFQThCWSxlQUFBO0VBQ0EsMEJBQUE7RUFDQSxlQUFBO0NEeURmO0FDekZHO0VBbUNnQixzQkFBQTtDRHlEbkI7QUN4RG1CO0VBQ0ksMEJBQUE7Q0QwRHZCO0FDdkRtQjtFQUNJLGdCQUFBO0VBQ0EsZ0NBQUE7Q0R5RHZCO0FDdkR1QjtFQUNJLDBCQUFBO0NEeUQzQjtBQ3JEbUI7RUFDSSxlQUFBO0VBQ0EsMEJBQUE7Q0R1RHZCO0FDckR1QjtFQUNJLDBCQUFBO0NEdUQzQjtBQzdHRztFQStEUSwyQ0FBQTtDRGlEWDtBQ3hLRDtFQTRIUSxjQUFBO0NEK0NQO0FDM0tEO0VBaUlRLHVEQUFBO0NENkNQO0FDOUtEO0VBb0lZLGVBQUE7RUFDQSwrQkFBQTtFQUNBLGlCQUFBO0VBQ0Esc0NBQUE7RUFDQSwyQ0FBQTtDRDZDWDtBQ3JMRDtFQStJWSxnQkFBQTtFQUNBLGlCQUFBO0NEeUNYOztBRXpMRDtFQU1nQixjQUFBO0VBQ0EsMkJBQUE7TUFBQSx1QkFBQTtFQUNBLGFBQUE7RUFDQSxpQkFBQTtFQUNBLDRDQUFBO0VBQ0EsbUJBQUE7RUFDQSxjQUFBO0VBQ0Esc0JBQUE7TUFBQSx3QkFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7Q0Z1TGY7QUV4TUQ7RUFxQmdCLGNBQUE7Q0ZzTGY7QUUzTUQ7RUF5Qm9CLGlCQUFBO0NGcUxuQjtBRTlNRDtFQThCb0IsY0FBQTtDRm1MbkI7QUUvS1c7RUFFUSxxQkFBQTtFQUFBLGNBQUE7Q0ZnTG5CO0FFbExXO0VBTVEsbUJBQUE7RUFDQSxPQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7RUFDQSxRQUFBO0NGK0tuQjtBRXpLRztFQUdZLDRDQUFBO0NGeUtmO0FFNUtHO0VBTWdCLGFBQUE7Q0Z5S25CO0FFL0tHO0VBV1ksY0FBQTtDRnVLZjtBRWxMRztFQWNnQixjQUFBO0NGdUtuQjs7QUd2T0Q7RUFHWSxjQUFBO0NId09YOztBSXpPTztFQUVRLDJEQUFBO0NKMk9mO0FJN09PO0VBSVksNEJBQUE7Q0o0T25CO0FJaFBPO0VBU1EsMEJBQUE7Q0owT2Y7QUluUE87RUFXWSwwQkFBQTtDSjJPbkI7O0FLeFBEO0VBSWdCLGNBQUE7RUFDQSxtQkFBQTtFQUNBLFlBQUE7RUFDQSxPQUFBO0VBQ0EsWUFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtDTHdQZjtBS2xRRDtFQWNnQixXQUFBO0NMdVBmO0FLclFEO0VBa0JnQixZQUFBO0NMc1BmO0FLbFBPO0VBQ0ksZUFBQTtDTG9QWDs7QU0xUUQ7O0VBRVEsZ0JBQUE7Q042UVA7QU0vUUQ7O0VBT2dCLGFBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VONFFkLHlGQUF5RjtFQUN6RixxQ0FBcUM7RUFDckMscUNBQXFDO0VBQ3JDLHVEQUF1RDtFQUN2RCx3REFBd0Q7RUFDeEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJDO0NBQ0Y7QU1yVEQ7O0VDQVEsVUFBQTtFQUNBLFdBQUE7RUFDQSx3QkFBQTtDUHlUUDtBTTNURDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUNPUSxlQUFBO0NQc1ZQO0FNN1ZEOzs7Ozs7Ozs7Ozs7OztFQ1dRLGdCQUFBO0VBQ0EsbUJBQUE7Q1BrV1A7QU05V0Q7Ozs7RUNnQlEsa0JBQUE7RUFDQSxtQkFBQTtDUG9XUDtBTXJYRDs7RUNxQlEsbUJBQUE7Q1BvV1A7QU16WEQ7Ozs7Ozs7O0VDeUJRLHVCQUFBO0VBQ0EsaUJBQUE7Q1AwV1A7QU1wWUQ7Ozs7Ozs7Ozs7RUM4QlEsbUJBQUE7Q1BrWFA7QU1oWkQ7Ozs7RUNrQ1Esb0JBQUE7Q1BvWFA7QU10WkQ7Ozs7Ozs7O0VDc0NRLHVCQUFBO0NQMFhQO0FNaGFEOztFQzBDUSxrQkFBQTtDUDBYUDtBTXBhRDs7RUM4Q1EsbUJBQUE7Q1AwWFA7QU14YUQ7O0VDa0RRLG9CQUFBO0NQMFhQO0FNNWFEOztFQ3NEUSxzQkFBQTtDUDBYUDtBTWhiRDs7OztFQzBEUSxvQkFBQTtFQUNBLG1CQUFBO0NQNFhQO0FNdmJEOztFQ2dFUSxjQUFBO0NQMlhQO0FNM2JEOztFQ29FUSxtQkFBQTtFQUNBLG9CQUFBO0NQMlhQO0FNaGNEOztFQ3lFUSxtQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZUFBQTtFQUNBLDhCQUFBO0VBQ0EsNEJBQUE7VUFBQSxvQkFBQTtDUDJYUDtBTXhjRDs7RUNpRlEsNkJBQUE7Q1AyWFA7QU01Y0Q7O0VDcUZRLDZCQUFBO0NQMlhQO0FNaGREOzs7Ozs7Ozs7O0VDeUZRLHNCQUFBO0NQbVlQO0FNNWREOztFQzhGUSxlQUFBO0NQa1lQO0FNaGVEOztFQ2tHUSxlQUFBO0NQa1lQO0FNcGVEOzs7O0VDc0dRLDJCQUFBO0NQb1lQO0FNMWVEOzs7Ozs7OztFQzJHUSxhQUFBO0NQeVlQO0FNcGZEOztFQytHUSxjQUFBO0NQeVlQO0FNeGZEOztFQ21IUSxtQkFBQTtFQUNBLGFBQUE7Q1B5WVA7QU03ZkQ7Ozs7RUN3SFEsa0NBQUE7Q1AyWVA7QU1uZ0JEOzs7O0VDNEhRLDJCQUFBO0NQNllQO0FNemdCRDs7Ozs7O0VDZ0lRLDhCQUFBO0NQaVpQO0FNamhCRDs7RUNvSVEsdUJBQUE7Q1BpWlA7QU1yaEJEOztFQ3dJUSxvQkFBQTtDUGlaUDtBTXpoQkQ7O0VDNElRLHFCQUFBO0NQaVpQO0FNN2hCRDs7RUNnSlEsY0FBQTtFQUNBLGlCQUFBO0NQaVpQO0FNbGlCRDs7RUNxSlEsb0JBQUE7Q1BpWlA7QU10aUJEOztFQ3lKUSxpQkFBQTtDUGlaUDtBTTFpQkQ7O0VDNkpRLG9CQUFBO0NQaVpQO0FNOWlCRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQ2lLUSxlQUFBO0NQcWFQO0FNdGtCRDs7RUNxS1EsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7Q1BxYVA7QU03a0JEOztFQzRLUSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtDUHFhUDtBTXBsQkQ7O0VDbUxRLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0NQcWFQO0FNM2xCRDs7RUMwTFEsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7Q1BxYVA7QU1sbUJEOztFQ2lNUSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtDUHFhUDtBTXptQkQ7O0VDd01RLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0NQcWFQO0FNaG5CRDs7Ozs7Ozs7Ozs7O0VDK01RLGVBQUE7Q1ArYVA7QU05bkJEOztFQ21OUSxtQkFBQTtDUCthUDtBTWxvQkQ7Ozs7Ozs7O0VDdU5RLGdCQUFBO0VBQ0EsbUJBQUE7Q1BxYlA7QU03b0JEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQytOWSxjQUFBO0VBQ0EsaUJBQUE7Q1BnZFg7QU1ockJEOztFQ29PUSxrQkFBQTtDUGdkUDtBTXByQkQ7Ozs7OztFQ3dPUSxtQkFBQTtDUG9kUDtBTTVyQkQ7O0VDNE9RLHlCQUFBO0NQb2RQO0FNaHNCRDs7OztFQ2dQUSxzQkFBQTtDUHNkUDtBTXRzQkQ7Ozs7Ozs7Ozs7OztFQ3NQWSx3QkFBQTtDUDhkWDtBTXB0QkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQ2tRZ0Isd0JBQUE7Q1B3ZmY7QU0xdkJEOztFQ3NRUSxlQUFBO0NQd2ZQO0FNOXZCRDs7RUMwUVEsdUJBQUE7Q1B3ZlA7QU1sd0JEOzs7O0VDOFFRLDRCQUFBO0NQMGZQO0FNeHdCRDs7OztFQ2tSUSxzQkFBQTtDUDRmUDtBTTl3QkQ7Ozs7RUNzUlEsNEJBQUE7Q1A4ZlA7QU1weEJEOzs7O0VDMFJRLHlCQUFBO0NQZ2dCUDtBTTF4QkQ7Ozs7RUM4UlEsNEJBQUE7Q1BrZ0JQO0FNaHlCRDs7OztFQ2tTUSxtQkFBQTtDUG9nQlA7QU10eUJEOzs7Ozs7OztFQ3NTUSxvQkFBQTtDUDBnQlA7QU1oekJEOzs7Ozs7Ozs7Ozs7Ozs7O0VDMlNZLHFCQUFBO0NQdWhCWDtBTWwwQkQ7O0VDK1NRLHVCQUFBO0VBQ0Esb0JBQUE7RUFDQSwwQkFBQTtFQUNBLHFCQUFBO0NQdWhCUDtBTXowQkQ7Ozs7RUNzVFEsYUFBQTtDUHloQlA7QU0vMEJEOztFQzBUUSxrQkFBQTtDUHloQlA7QU1uMUJEOzs7Ozs7OztFQzhUUSx1QkFBQTtDUCtoQlA7QU03MUJEOzs7Ozs7RUNrVVEsd0JBQUE7Q1BtaUJQO0FNcjJCRDs7Ozs7O0VDc1VRLG1CQUFBO0NQdWlCUDtBTTcyQkQ7Ozs7Ozs7O0VDMFVRLHNCQUFBO0NQNmlCUDtBTXYzQkQ7Ozs7Ozs7Ozs7Ozs7O0VDd1dRLHFCQUFBO0NQK2hCUDtBTXY0QkQ7O0VDNFdRLHNCQUFBO0NQK2hCUDtBTTM0QkQ7Ozs7Ozs7Ozs7Ozs7O0VDaVhRLHVCQUFBO0NQMGlCUDtBTTM1QkQ7Ozs7RUNxWFEscUJBQUE7Q1A0aUJQO0FNajZCRDs7RUN5WFEsWUFBQTtFQUNBLG9CQUFBO0VBQ0Esa0JBQUE7RUFDQSxtQkFBQTtDUDRpQlA7QU14NkJEOztFQ2dZUSxpQkFBQTtFQUNBLGtCQUFBO0VBQ0EsOEJBQUE7RUFDQSwrQkFBQTtDUDRpQlA7QU0vNkJEOztFQ3VZUSxrQkFBQTtFQUNBLG1CQUFBO0NQNGlCUDtBTXA3QkQ7O0VBZW9CLHlCQUFBO0NOeTZCbkI7QU14N0JEOztFQW1Cb0IsNEJBQUE7Q055NkJuQjtBTXA2Qk87Ozs7RUFFUSxlQUFBO0VBQ0EsWUFBQTtFQUNBLGdCQUFBO0VBQ0EsYUFBQTtDTnc2QmY7QU1yOEJEOztFQW1DUSxlQUFBO0VBQ0EsWUFBQTtFQUNBLGdCQUFBO0VBQ0EsYUFBQTtDTnM2QlA7O0FRNzhCRDtFQUVRLG1CQUFBO0VBQ0Esa0JBQUE7RUFDQSxhQUFBO0VBQ0EscUJBQUE7TUFBQSxlQUFBO0NSKzhCUDtBUXA5QkQ7RUFRWSwwQkFBQTtFQUNBLGFBQUE7RUFDQSxrQkFBQTtFQUNBLGFBQUE7RUFDQSwwQkFBQTtDUis4Qlg7QVE3OEJXO0VBQ0ksZ0JBQUE7RUFDQSxPQUFBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtDUis4QmY7QVE1OEJXO0VBQ0ksbUJBQUE7RUFDQSxVQUFBO0NSODhCZjtBUXIrQkQ7RUEyQmdCLGlCQUFBO0NSNjhCZjtBUXgrQkQ7RUE4Qm9CLGVBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0NSNjhCbkI7QVEzOEJtQjtFQUNJLHNCQUFBO0VBQ0EsWUFBQTtFQUNBLGtCQUFBO0VBQ0EsOENBQUE7RUFDQSxtQkFBQTtFQUNBLGlCQUFBO0NSNjhCdkI7QVF6OEJlO0VBRVEsaUJBQUE7Q1IwOEJ2QjtBUTU4QmU7RUFNUSxjQUFBO0NSeThCdkI7QVEzL0JEO0VBdURvQixnQkFBQTtDUnU4Qm5CO0FROS9CRDtFQTJEb0IsMEJBQUE7RUFDQSx1QkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7Q1JzOEJuQjtBUXBnQ0Q7RUFpRXdCLHNCQUFBO0VBQ0EsWUFBQTtFQUNBLDhDQUFBO0NSczhCdkI7QVF6Z0NEO0VBdUV3QixnQkFBQTtDUnE4QnZCO0FRNWdDRDtFQTRFb0IsZ0JBQUE7Q1JtOEJuQjs7QVMvZ0NEO0VBRVEsY0FBQTtFQUNBLG1CQUFBO0VBQ0EsVUFBQTtFQUdBLGlEQUFBO0VBQ0EsMEJBQUE7RUFDQSxlQUFBO0VBQ0EsMEJBQUE7RUFDQSxpQkFBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLG9CQUFBO0VBQ0Esb0JBQUE7RUFDQSxpQkFBQTtDVGloQ1A7QVMvZ0NPO0VBQ0ksYUFBQTtDVGloQ1g7QVN0aUNEO0VBeUJZLHFCQUFBO0VBQUEsY0FBQTtFQUNBLGlCQUFBO0NUZ2hDWDtBUzFpQ0Q7RUE2QmdCLGlCQUFBO0VBQ0EsaURBQUE7RUFDQSxrQkFBQTtDVGdoQ2Y7QVMvaUNEO0VBb0NZLGlCQUFBO0NUOGdDWDtBU2xqQ0Q7RUF3Q1ksaUJBQUE7RUFDQSxrQkFBQTtFQUNBLGVBQUE7Q1Q2Z0NYO0FTdmpDRDtFQThDWSwwQkFBQTtFQUNBLGdCQUFBO0NUNGdDWDtBUzNqQ0Q7O0VBb0RnQixZQUFBO0NUMmdDZjtBUy9qQ0Q7RUF3RGdCLGVBQUE7RUFDQSxpQkFBQTtDVDBnQ2YiLCJmaWxlIjoiTGF5b3V0RWRpdG9yLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIu+7v0BpbXBvcnQgXCJWYXJpYWJsZXMubGVzc1wiO1xyXG5cclxuLmxheW91dC1lZGl0b3ItdG9vbGJhciB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgdG9wOiAxMHB4O1xyXG5cclxuICAgIC5sYXlvdXQtZWRpdG9yLXRvb2xiYXItZ3JvdXAge1xyXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcblxyXG4gICAgICAgID4gbGkgKyBsaSB7XHJcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMnB4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIG1hcmdpbi10b3A6IDFlbTtcclxuICAgIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZTtcclxuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xyXG5cclxuICAgID4gLmxheW91dC1jYW52YXMtd3JhcHBlciB7XHJcbiAgICAgICAgZmxleC1ncm93OiAxO1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBncmF5LWJnO1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBncmF5LWJvcmRlcjtcclxuXHJcbiAgICAgICAgPiAubGF5b3V0LXRvb2xiYXItY29udGFpbmVyIHtcclxuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICAgICAgbWFyZ2luOiBAY29udGFpbmVyLXBhZGRpbmcgQGNvbnRhaW5lci1wYWRkaW5nIDA7XHJcbiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDcxcHg7XHJcblxyXG4gICAgICAgICAgICA+IC5tY2UtcGFuZWwge1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA+IC5sYXlvdXQtcGxhY2Vob2xkZXIge1xyXG4gICAgICAgICAgICBib3JkZXI6IDFweCBkYXNoZWQgI2NjYztcclxuICAgICAgICAgICAgcGFkZGluZzogMC4yZW0gMC40ZW07XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNlOGU4ZTg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5sYXlvdXQtc25pcHBldCB7XHJcbiAgICAgICAgYmFja2dyb3VuZDogI2U4ZThlODtcclxuICAgIH1cclxufVxyXG5cclxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuXHJcbiAgICAuaGVscC1yb3cge1xyXG4gICAgICAgICY6YmVmb3JlLCAmOmFmdGVyIHtcclxuICAgICAgICAgICAgY29udGVudDogXCIgXCI7IC8vIDFcclxuICAgICAgICAgICAgZGlzcGxheTogdGFibGU7IC8vIDJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICY6YWZ0ZXIge1xyXG4gICAgICAgICAgICBjbGVhcjogYm90aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgID4gLmhlbHAtY29sdW1uLWZ1bGwsID4gLmhlbHAtY29sdW1uLWhhbGYge1xyXG4gICAgICAgICAgICBtYXJnaW46IDAuNWVtIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA+IC5oZWxwLWNvbHVtbi1oYWxmIHtcclxuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICAgICAgICAgIHdpZHRoOiA1MCU7XHJcblxyXG4gICAgICAgICAgICAmOm50aC1jaGlsZCgybikge1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMTBweDtcclxuICAgICAgICAgICAgICAgIGNsZWFyOiBsZWZ0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICArIC5oZWxwLXJvdyB7XHJcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDFlbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29kZSB7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjU7XHJcbiAgICAgICAgcGFkZGluZzogMnB4IDRweDtcclxuICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xyXG4gICAgfVxyXG5cclxuICAgIHAge1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTtcclxuICAgIH1cclxuXHJcbiAgICB0YWJsZSA+IHRib2R5ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCB7XHJcbiAgICAgICAgcGFkZGluZy1yaWdodDogMTBweDtcclxuICAgIH1cclxufVxyXG4iLCIubGF5b3V0LWVkaXRvci10b29sYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMTBweDtcbn1cbi5sYXlvdXQtZWRpdG9yLXRvb2xiYXIgLmxheW91dC1lZGl0b3ItdG9vbGJhci1ncm91cCB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4ubGF5b3V0LWVkaXRvci10b29sYmFyIC5sYXlvdXQtZWRpdG9yLXRvb2xiYXItZ3JvdXAgPiBsaSArIGxpIHtcbiAgbWFyZ2luLWxlZnQ6IDEycHg7XG59XG4ubGF5b3V0LWVkaXRvciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1hcmdpbi10b3A6IDFlbTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC1jYW52YXMtd3JhcHBlciB7XG4gIGZsZXgtZ3JvdzogMTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjRmNTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U0ZTVlNjtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC1jYW52YXMtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJhci1jb250YWluZXIge1xuICBkaXNwbGF5OiBub25lO1xuICBtYXJnaW46IDEycHggMTJweCAwO1xuICBtaW4taGVpZ2h0OiA3MXB4O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LWNhbnZhcy13cmFwcGVyID4gLmxheW91dC10b29sYmFyLWNvbnRhaW5lciA+IC5tY2UtcGFuZWwge1xuICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LWNhbnZhcy13cmFwcGVyIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAubGF5b3V0LXBsYWNlaG9sZGVyIHtcbiAgYm9yZGVyOiAxcHggZGFzaGVkICNjY2M7XG4gIHBhZGRpbmc6IDAuMmVtIDAuNGVtO1xuICBiYWNrZ3JvdW5kOiAjZThlOGU4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1zbmlwcGV0IHtcbiAgYmFja2dyb3VuZDogI2U4ZThlODtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdzpiZWZvcmUsXG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyAuaGVscC1yb3c6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgZGlzcGxheTogdGFibGU7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyAuaGVscC1yb3c6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyA+IC5oZWxwLWNvbHVtbi1mdWxsLFxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93ID4gLmhlbHAtY29sdW1uLWhhbGYge1xuICBtYXJnaW46IDAuNWVtIDA7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyAuaGVscC1yb3cgPiAuaGVscC1jb2x1bW4taGFsZiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogNTAlO1xufVxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93ID4gLmhlbHAtY29sdW1uLWhhbGY6bnRoLWNoaWxkKDJuKSB7XG4gIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG4gIGNsZWFyOiBsZWZ0O1xufVxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93ICsgLmhlbHAtcm93IHtcbiAgbWFyZ2luLXRvcDogMWVtO1xufVxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgY29kZSB7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjRmNTtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIHAge1xuICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNmVtO1xufVxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgdGFibGUgPiB0Ym9keSA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQge1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1yaWdodDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZzogMDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb2x1bW4pIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwge1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIG1hcmdpbjogMDtcbiAgei1pbmRleDogMjA7XG4gIGhlaWdodDogMjVweDtcbiAgcGFkZGluZzogMCA2cHg7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGxpbmUtaGVpZ2h0OiAyNXB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1pdGVtIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBoZWlnaHQ6IDI1cHg7XG4gIHBhZGRpbmc6IDFweCA2cHggMDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtZWxlbWVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtbGFiZWwge1xuICBmb250LXNpemU6IDEzcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWFjdGlvbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHdpZHRoOiAyOHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtZWxlbWVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbC1tYWluIHtcbiAgdG9wOiAtMjdweDtcbiAgbGVmdDogLTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yIGxpLmxheW91dC1lbGVtZW50IHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWFjdGl2ZSxcbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQge1xuICBib3JkZXItd2lkdGg6IDJweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWFjdGl2ZSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyLFxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcbiAgbWFyZ2luOiAtMnB4O1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtYWN0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDEwNCwgMTA0LCAxMDQsIDAuMSk7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwtbWFpbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB6LWluZGV4OiAzMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDQsIDEwNCwgMTA0LCAwLjEpO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCB7XG4gIGJvcmRlci1jb2xvcjogIzY0ODcyMTtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0ODcyMTtcbiAgY29sb3I6ICNmZWZlZmU7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODJiMDJiO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uLmRpc2FibGVkIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBjb2xvcjogcmdiYSgyNTQsIDI1NCwgMjU0LCAwLjQpO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uLmRpc2FibGVkOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0ODcyMTtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWFjdGlvbi5hY3RpdmUge1xuICBjb2xvcjogI2RlZmY0MjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzczOWIyNjtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWFjdGlvbi5hY3RpdmU6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjODJiMDJiO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtc2VsZWN0ZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEwMCwgMTM1LCAzMywgMC4wOCk7XG59XG4ubGF5b3V0LWVkaXRvciAudWktc29ydGFibGUtcGxhY2Vob2xkZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQge1xuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMTJweCA2cHggcmdiYSgxMDAsIDEzNSwgMzMsIDAuNSk7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldCAudWktc29ydGFibGUtcGxhY2Vob2xkZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgdmlzaWJpbGl0eTogdmlzaWJsZSAhaW1wb3J0YW50O1xuICBtaW4taGVpZ2h0OiA3OHB4O1xuICBib3JkZXI6IDJweCBkYXNoZWQgIzY0ODcyMSAhaW1wb3J0YW50O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEwMCwgMTM1LCAzMywgMC4xNik7XG59XG4ubGF5b3V0LWVkaXRvciAubWVkaWEtdGh1bWJuYWlsIGltZyB7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWF4LWhlaWdodDogMTAwJTtcbn1cblxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250YWluZXIgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29udGFpbmVyLWNoaWxkcmVuLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWFyZ2luOiAxMXB4O1xuICBtaW4taGVpZ2h0OiA4MHB4O1xuICBib3JkZXI6IDFweCBkYXNoZWQgcmdiYSgxMjQsIDEyNCwgMTI0LCAwLjQpO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHBhZGRpbmc6IDEycHg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgb3BhY2l0eTogMC42O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRhaW5lciA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiB7XG4gIHBhZGRpbmc6IDEycHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRhaW5lciA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpICsgLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWNvbnRhaW5lcikge1xuICBtYXJnaW4tdG9wOiAxMnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250YWluZXIgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAudWktc29ydGFibGUtaGVscGVyOmZpcnN0LWNoaWxkICsgLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWNvbnRhaW5lcikge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250YWluZXIgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlci5sYXlvdXQtY29udGFpbmVyLWVtcHR5ID4gLmxheW91dC1jb250YWluZXItY2hpbGRyZW4tcGxhY2Vob2xkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250YWluZXIgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlci5sYXlvdXQtY29udGFpbmVyLWVtcHR5ID4gLmxheW91dC1jaGlsZHJlbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCByZ2JhKDEyNCwgMTI0LCAxMjQsIDAuNik7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtY29udGFpbmVyLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xuICBtYXJnaW46IC0xcHg7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtY29udGFpbmVyLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWNvbnRhaW5lciArIC5sYXlvdXQtY29udGFpbmVyOm5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XG4gIGJvcmRlci10b3A6IDA7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtY29udGFpbmVyLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWNvbnRhaW5lciArIC5sYXlvdXQtY29udGFpbmVyOm5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cblxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jYW52YXMgI2R1bW15IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmxheW91dC1lZGl0b3IgLmxheW91dC1yb3cubGF5b3V0LWVsZW1lbnQtZm9jdXNlZDpub3QoLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XG4gIGJvcmRlci10b3A6IDFweCBkYXNoZWQgcmdiYSgxMjQsIDEyNCwgMTI0LCAwLjYpICFpbXBvcnRhbnQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXJvdy5sYXlvdXQtZWxlbWVudC1mb2N1c2VkOm5vdCgubGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldCkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xuICBtYXJnaW4tdG9wOiAtMXB4ICFpbXBvcnRhbnQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXJvdy5sYXlvdXQtZWxlbWVudC1mb2N1c2VkOm5vdCgubGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldCkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWVsZW1lbnQgKyAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpIHtcbiAgYm9yZGVyLWxlZnQ6IDAgIWltcG9ydGFudDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcm93LmxheW91dC1lbGVtZW50LWZvY3VzZWQ6bm90KC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0KSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiA+IC5sYXlvdXQtZWxlbWVudCArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XG4gIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29sdW1uID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAzMDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMTZweDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBjdXJzb3I6IGNvbC1yZXNpemU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbHVtbiA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhci1sZWZ0IHtcbiAgbGVmdDogLTZweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29sdW1uID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyLXJpZ2h0IHtcbiAgcmlnaHQ6IC02cHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbHVtbi5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCB7XG4gIG1pbi1oZWlnaHQ6IDFlbTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHtcbiAgcGFkZGluZzogMnB4O1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIC8qIHRoaXMgY29sb3IgaXMganVzdCBhIHN1Z2dlc3Rpb24gYW5kIGNhbiBiZSBjaGFuZ2VkIGJhc2VkIG9uIGltcGxlbWVudGF0aW9uIGZlZWRiYWNrICovXG4gIC8qIHRoaXMgYWxzbyBoYXMgYmlkaSBpbXBsaWNhdGlvbnMgKi9cbiAgLyogdGhpcyBhbHNvIGhhcyBiaWRpIGltcGxpY2F0aW9ucyAqL1xuICAvKiBMVFItc3BlY2lmaWM6IHVzZSAnbWFyZ2luLXJpZ2h0JyBmb3IgcnRsIGVsZW1lbnRzICovXG4gIC8qIExUUi1zcGVjaWZpYzogdXNlICdwYWRkaW5nLXJpZ2h0JyBmb3IgcnRsIGVsZW1lbnRzICovXG4gIC8qdGFibGVbcnVsZXM9bm9uZSBpXSwgdGFibGVbcnVsZXM9Z3JvdXBzIGldLCB0YWJsZVtydWxlcz1yb3dzIGldLFxudGFibGVbcnVsZXM9Y29scyBpXSwgdGFibGVbcnVsZXM9YWxsIGldLCB0YWJsZVtmcmFtZT12b2lkIGldLFxudGFibGVbZnJhbWU9YWJvdmUgaV0sIHRhYmxlW2ZyYW1lPWJlbG93IGldLCB0YWJsZVtmcmFtZT1oc2lkZXMgaV0sXG50YWJsZVtmcmFtZT1saHMgaV0sIHRhYmxlW2ZyYW1lPXJocyBpXSwgdGFibGVbZnJhbWU9dnNpZGVzIGldLFxudGFibGVbZnJhbWU9Ym94IGldLCB0YWJsZVtmcmFtZT1ib3JkZXIgaV0sXG50YWJsZVtydWxlcz1ub25lIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9YWxsIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0aGVhZCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0aGVhZCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0aGVhZCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRoZWFkID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0aGVhZCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0aGVhZCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1jb2xzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9YWxsIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1hbGwgaV0gPiB0aGVhZCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1ub25lIGldID4gdGJvZHkgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdGJvZHkgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGJvZHkgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Ym9keSA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1yb3dzIGldID4gdGJvZHkgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdGJvZHkgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdGJvZHkgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRmb290ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRmb290ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRmb290ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGZvb3QgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRmb290ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9cm93cyBpXSA+IHRmb290ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1hbGwgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRmb290ID4gdHIgPiB0aCB7XG4gICAgYm9yZGVyLWNvbG9yOiBibGFjaztcbn0qL1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCAqLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCAqIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYWRkcmVzcyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYWRkcmVzcyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYmxvY2txdW90ZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYmxvY2txdW90ZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY2VudGVyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjZW50ZXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpdixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGl2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ3VyZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZmlnY2FwdGlvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZmlnY2FwdGlvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZm9vdGVyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmb290ZXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZvcm0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZvcm0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhlYWRlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaGVhZGVyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBocixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaHIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxlZ2VuZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGVnZW5kLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsaXN0aW5nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsaXN0aW5nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwbGFpbnRleHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHBsYWludGV4dCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcHJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwcmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHhtcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgeG1wIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsb2NrcXVvdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsb2NrcXVvdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ3VyZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZmlndXJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsaXN0aW5nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsaXN0aW5nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwbGFpbnRleHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHBsYWludGV4dCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcHJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwcmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHhtcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgeG1wIHtcbiAgbWFyZ2luLXRvcDogMWVtO1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsb2NrcXVvdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsb2NrcXVvdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ3VyZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZmlndXJlIHtcbiAgbWFyZ2luLWxlZnQ6IDQwcHg7XG4gIG1hcmdpbi1yaWdodDogNDBweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYWRkcmVzcyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYWRkcmVzcyB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwbGFpbnRleHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcHJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHhtcCB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gIHdoaXRlLXNwYWNlOiBwcmU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNpdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNpdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRmbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGZuLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBlbSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZW0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHZhcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdmFyIHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBiLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBiLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdHJvbmcsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvZGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvZGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGtiZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAga2JkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzYW1wLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzYW1wLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0dCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHQge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBiaWcsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJpZyB7XG4gIGZvbnQtc2l6ZTogbGFyZ2VyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzbWFsbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc21hbGwge1xuICBmb250LXNpemU6IHNtYWxsZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1Yixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3ViIHtcbiAgdmVydGljYWwtYWxpZ246IHN1Yjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdXAge1xuICB2ZXJ0aWNhbC1hbGlnbjogc3VwZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1Yixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3ViLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1cCB7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc2l6ZTogc21hbGxlcjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnVieSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnVieSB7XG4gIGRpc3BsYXk6IHJ1Ynk7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCByYiB7XG4gIGRpc3BsYXk6IHJ1YnktYmFzZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0IHtcbiAgZGlzcGxheTogcnVieS10ZXh0O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBmb250LXNpemU6IDUwJTtcbiAgZm9udC12YXJpYW50LWVhc3QtYXNpYW46IHJ1Ynk7XG4gIHRleHQtZW1waGFzaXM6IG5vbmU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiYyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmJjIHtcbiAgZGlzcGxheTogcnVieS1iYXNlLWNvbnRhaW5lcjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnRjLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydGMge1xuICBkaXNwbGF5OiBydWJ5LXRleHQtY29udGFpbmVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydWJ5LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydWJ5LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCByYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmJjLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCByYmMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0Yyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnRjIHtcbiAgdW5pY29kZS1iaWRpOiBpc29sYXRlO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6bGluayxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmxpbmsge1xuICBjb2xvcjogIzAwMDBFRTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOnZpc2l0ZWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDp2aXNpdGVkIHtcbiAgY29sb3I6ICM1NTFBOEI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDpsaW5rLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6bGluayxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOnZpc2l0ZWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDp2aXNpdGVkIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGE6bGlua1tyZWx+PWhlbHBdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhOmxpbmtbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYTp2aXNpdGVkW3JlbH49aGVscF0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGE6dmlzaXRlZFtyZWx+PWhlbHBdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhcmVhOmxpbmtbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYXJlYTpsaW5rW3JlbH49aGVscF0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFyZWE6dmlzaXRlZFtyZWx+PWhlbHBdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhcmVhOnZpc2l0ZWRbcmVsfj1oZWxwXSB7XG4gIGN1cnNvcjogaGVscDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmZvY3VzLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6Zm9jdXMge1xuICBvdXRsaW5lOiBhdXRvO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBtYXJrLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBtYXJrIHtcbiAgYmFja2dyb3VuZDogeWVsbG93O1xuICBjb2xvcjogYmxhY2s7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFiYnJbdGl0bGVdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhYmJyW3RpdGxlXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYWNyb255bVt0aXRsZV0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFjcm9ueW1bdGl0bGVdIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBkb3R0ZWQgdW5kZXJsaW5lO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdSB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRlbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3RyaWtlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdHJpa2Uge1xuICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYmxpbmssXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsaW5rIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBibGluaztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcTo6YmVmb3JlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBxOjpiZWZvcmUge1xuICBjb250ZW50OiBvcGVuLXF1b3RlO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBxOjphZnRlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcTo6YWZ0ZXIge1xuICBjb250ZW50OiBjbG9zZS1xdW90ZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYnI6OmJlZm9yZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYnI6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXEEnO1xuICB3aGl0ZS1zcGFjZTogcHJlO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBub2JyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBub2JyIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgd2JyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB3YnIge1xuICBjb250ZW50OiAnXFwyMDBCJztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbm9iciB3YnIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG5vYnIgd2JyIHtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYXJ0aWNsZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYXJ0aWNsZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYXNpZGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFzaWRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDEsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgzLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg1LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDYsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoZ3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhncm91cCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbmF2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBuYXYsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNlY3Rpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNlY3Rpb24ge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDEsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgxIHtcbiAgbWFyZ2luLXRvcDogMC42N2VtO1xuICBtYXJnaW4tYm90dG9tOiAwLjY3ZW07XG4gIGZvbnQtc2l6ZTogMi4wMGVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgyIHtcbiAgbWFyZ2luLXRvcDogMC44M2VtO1xuICBtYXJnaW4tYm90dG9tOiAwLjgzZW07XG4gIGZvbnQtc2l6ZTogMS41MGVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgzIHtcbiAgbWFyZ2luLXRvcDogMS4wMGVtO1xuICBtYXJnaW4tYm90dG9tOiAxLjAwZW07XG4gIGZvbnQtc2l6ZTogMS4xN2VtO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg0IHtcbiAgbWFyZ2luLXRvcDogMS4zM2VtO1xuICBtYXJnaW4tYm90dG9tOiAxLjMzZW07XG4gIGZvbnQtc2l6ZTogMS4wMGVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg1IHtcbiAgbWFyZ2luLXRvcDogMS42N2VtO1xuICBtYXJnaW4tYm90dG9tOiAxLjY3ZW07XG4gIGZvbnQtc2l6ZTogMC44M2VtO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDYsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg2IHtcbiAgbWFyZ2luLXRvcDogMi4zM2VtO1xuICBtYXJnaW4tYm90dG9tOiAyLjMzZW07XG4gIGZvbnQtc2l6ZTogMC42N2VtO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxpLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsaSB7XG4gIGRpc3BsYXk6IGxpc3QtaXRlbTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwge1xuICBtYXJnaW4tdG9wOiAxZW07XG4gIG1hcmdpbi1ib3R0b206IDFlbTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB1bCB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZCB7XG4gIG1hcmdpbi1sZWZ0OiA0MHB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwge1xuICBwYWRkaW5nLWxlZnQ6IDQwcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB7XG4gIGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB7XG4gIGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwge1xuICBsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgdWwgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgdWwgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHVsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB1bCB1bCB7XG4gIGxpc3Qtc3R5bGUtdHlwZTogc3F1YXJlO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0YWJsZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUge1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY2FwdGlvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY2FwdGlvbiB7XG4gIGRpc3BsYXk6IHRhYmxlLWNhcHRpb247XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbGdyb3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sZ3JvdXBbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sZ3JvdXBbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IHRhYmxlLWNvbHVtbi1ncm91cDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbFtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IHRhYmxlLWNvbHVtbjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aGVhZFtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aGVhZFtoaWRkZW5dIHtcbiAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5W2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGZvb3RbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGZvb3RbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IHRhYmxlLWZvb3Rlci1ncm91cDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0cltoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0cltoaWRkZW5dIHtcbiAgZGlzcGxheTogdGFibGUtcm93O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGRbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGRbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbGdyb3VwW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbGdyb3VwW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbFtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWRbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWRbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHlbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHlbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGZvb3RbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGZvb3RbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHJbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHJbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGRbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGRbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhbaGlkZGVuXSB7XG4gIHZpc2liaWxpdHk6IGNvbGxhcHNlO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0YWJsZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItc3BhY2luZzogMnB4O1xuICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlO1xuICB0ZXh0LWluZGVudDogaW5pdGlhbDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgge1xuICBwYWRkaW5nOiAxcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aGVhZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGZvb3QsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0YWJsZSA+IHRyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0YWJsZSA+IHRyIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCB7XG4gIHZlcnRpY2FsLWFsaWduOiBpbmhlcml0O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0YWJsZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoIHtcbiAgYm9yZGVyLWNvbG9yOiBncmF5O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aGVhZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGZvb3QsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHIge1xuICBib3JkZXItY29sb3I6IGluaGVyaXQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2VsZWN0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzZWxlY3QsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9wdGlvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb3B0aW9uLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvcHRncm91cCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb3B0Z3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYnV0dG9uLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZXh0YXJlYSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGV4dGFyZWEsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGtleWdlbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAga2V5Z2VuIHtcbiAgdGV4dC1pbmRlbnQ6IGluaXRpYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRleHRhcmVhLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZXh0YXJlYSB7XG4gIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dFt0eXBlPVwicmVzZXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJyZXNldFwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2VsZWN0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzZWxlY3QsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYnV0dG9uIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYnV0dG9uLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBidXR0b24ge1xuICBwYWRkaW5nOiAwLjNlbSAwLjVlbTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaHIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhyIHtcbiAgY29sb3I6IGdyYXk7XG4gIGJvcmRlci1zdHlsZTogaW5zZXQ7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBtYXJnaW46IDAuNWVtIGF1dG87XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZWxkc2V0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWVsZHNldCB7XG4gIG1hcmdpbi1sZWZ0OiAycHg7XG4gIG1hcmdpbi1yaWdodDogMnB4O1xuICBib3JkZXI6IGdyb292ZSAycHggVGhyZWVERmFjZTtcbiAgcGFkZGluZzogMC4zNWVtIDAuNjI1ZW0gMC43NWVtO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsZWdlbmQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxlZ2VuZCB7XG4gIHBhZGRpbmctbGVmdDogMnB4O1xuICBwYWRkaW5nLXJpZ2h0OiAycHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gKjpmaXJzdC1jaGlsZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAqOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA+ICo6bGFzdC1jaGlsZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAqOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQubGF5b3V0LWNvbnRlbnQtaW1hZ2UgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiBpbWcsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwubGF5b3V0LWNvbnRlbnQtaW1hZ2UgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiBpbWcsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQubGF5b3V0LWNvbnRlbnQtdmVjdG9yLWltYWdlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gaW1nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sLmxheW91dC1jb250ZW50LXZlY3Rvci1pbWFnZSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb250ZW50LW1hcmt1cCA+IGltZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG4ubGF5b3V0LWVkaXRvciAuaW1nLXJlc3BvbnNpdmUsXG4ubGF5b3V0LWVkaXRvciAuaW1nLXJlc3BvbnNpdmUgaW1nIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWxlZnQ6IDEycHg7XG4gIHdpZHRoOiAyMjBweDtcbiAgZmxleC1zaHJpbms6IDA7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U0ZTVlNjtcbiAgd2lkdGg6IDIyMHB4O1xuICBtaW4taGVpZ2h0OiA0MDBweDtcbiAgcGFkZGluZzogNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmNGY1O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveC5zdGlja3ktdG9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94LnN0aWNreS1ib3R0b20ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIHtcbiAgbWFyZ2luLXRvcDogMTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIC5sYXlvdXQtdG9vbGJveC1ncm91cC1oZWFkaW5nIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAgLmxheW91dC10b29sYm94LWdyb3VwLWhlYWRpbmc6YmVmb3JlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMTBweDtcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XG4gIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb250ZW50OiBcIlxcZjBkN1wiO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAuY29sbGFwc2VkIC5sYXlvdXQtdG9vbGJveC1ncm91cC1oZWFkaW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGRhXCI7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cC5jb2xsYXBzZWQgLmxheW91dC10b29sYm94LWl0ZW1zIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIC5sYXlvdXQtdG9vbGJveC1zZWN0aW9uICsgLmxheW91dC10b29sYm94LXNlY3Rpb24ge1xuICBtYXJnaW4tdG9wOiA0cHg7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCAubGF5b3V0LXRvb2xib3gtaXRlbSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNGU1ZTY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIHBhZGRpbmc6IDlweCAxMnB4O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCAubGF5b3V0LXRvb2xib3gtaXRlbSBpIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMTZweDtcbiAgZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAgLmxheW91dC10b29sYm94LWl0ZW0gKyAubGF5b3V0LXRvb2xib3gtaXRlbSB7XG4gIG1hcmdpbi10b3A6IDRweDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwICsgLmxheW91dC10b29sYm94LWdyb3VwIHtcbiAgbWFyZ2luLXRvcDogNnB4O1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW46IDA7XG4gIC1tb3otYm94LXNoYWRvdzogM3B4IDNweCAxMXB4IDAgcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDNweCAzcHggMTFweCAwIHJnYmEoNTAsIDUwLCA1MCwgMC41KTtcbiAgYm94LXNoYWRvdzogM3B4IDNweCAxMXB4IDAgcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNWU2O1xuICBwYWRkaW5nOiAycHggMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNztcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgei1pbmRleDogMjA7XG4gIGNvbG9yOiAjN2M3YzdjO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIG1pbi13aWR0aDogMzAwcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwLndpZGUge1xuICB3aWR0aDogNjAwcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtZmxleCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDJweCA1cHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtZmxleCAubGF5b3V0LXBvcHVwLWNvbHVtbiArIC5sYXlvdXQtcG9wdXAtY29sdW1uIHtcbiAgbWFyZ2luLWxlZnQ6IDRweDtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2JhKDEyOCwgMTI4LCAxMjgsIDAuMTUpO1xuICBwYWRkaW5nLWxlZnQ6IDRweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1pdGVtIHtcbiAgcGFkZGluZzogNHB4IDZweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1sYWJlbCB7XG4gIGZvbnQtc2l6ZTogMC45ZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzdjN2M3Yztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1hY3Rpb246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmNGY1O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtaW5wdXQgaW5wdXRbdHlwZT0ndGV4dCddLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCAubGF5b3V0LXBvcHVwLWlucHV0IHRleHRhcmVhIHtcbiAgd2lkdGg6IDEwMCU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtaW5wdXQgPiBsYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDAuOWVtO1xufVxuIiwi77u/QGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICAubGF5b3V0LWVsZW1lbnQge1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xyXG4gICAgICAgIHBhZGRpbmc6IDA7XHJcblxyXG4gICAgICAgIC8vIFdlIGRvbid0IGZ1Y2sgd2l0aCB0aGUgbGVmdCBtYXJnaW4gb2YgY29sdW1ucywgYmVjYXVzZSBCb290c3RyYXAgdXNlcyB0aGVzZSB0byByZW5kZXIgY29sdW1uIG9mZnNldHMuXHJcbiAgICAgICAgJjpub3QoLmxheW91dC1jb2x1bW4pIHtcclxuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgPiAubGF5b3V0LXBhbmVsIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7IC8vIFNob3duIG9ubHkgaW4gYWN0aXZlIG9yIGZvY3VzZWQgc3RhdGVzLlxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgICAgICAgICAgei1pbmRleDogMjA7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDI1cHg7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDZweDtcclxuICAgICAgICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI1cHg7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1wYW5lbC1pdGVtIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAyNXB4O1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFweCA2cHggMDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtcGFuZWwtbGFiZWwge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZSAtIDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LXBhbmVsLWFjdGlvbiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTsgLy8gU2hvd24gb25seSBpbiBmb2N1c2VkIHN0YXRlLlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyOHB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1wYW5lbC1tYWluIHtcclxuICAgICAgICAgICAgICAgIHRvcDogLTI3cHg7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiAtMnB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFdoZW4gZHJhZ2dpbmcgZnJvbSB0b29sYm94LCBlbGVtZW50cyB3aWxsIGJlIGxpIHJhdGhlciB0aGFuIGRpdi5cclxuICAgIGxpLmxheW91dC1lbGVtZW50IHtcclxuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xyXG4gICAgfVxyXG5cclxuICAgICY6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSB7XHJcblxyXG4gICAgICAgIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUsIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkIHtcclxuICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAycHg7XHJcbiAgICAgICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogLTJweDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1lbGVtZW50LWFjdGl2ZSB7XHJcbiAgICAgICAgICAgIEBhY3RpdmUtaGlnaGxpZ2h0OiBmYWRlKCM2ODY4NjgsIDEwJSk7XHJcblxyXG4gICAgICAgICAgICBib3JkZXItY29sb3I6IEBhY3RpdmUtaGlnaGxpZ2h0O1xyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwtbWFpbiB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jazsgLy8gVG8gcmV2ZWFsLlxyXG4gICAgICAgICAgICAgICAgei1pbmRleDogMzA7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAYWN0aXZlLWhpZ2hsaWdodDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1lbGVtZW50LWZvY3VzZWQge1xyXG4gICAgICAgICAgICBAZm9jdXNlZC1oaWdobGlnaHQ6ICM2NDg3MjE7XHJcbiAgICAgICAgICAgIEBmb2N1c2VkLXRleHQ6ICNmZWZlZmU7XHJcblxyXG4gICAgICAgICAgICBib3JkZXItY29sb3I6IEBmb2N1c2VkLWhpZ2hsaWdodDtcclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOyAvLyBUbyByZXZlYWwuXHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAZm9jdXNlZC1oaWdobGlnaHQ7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogQGZvY3VzZWQtdGV4dDtcclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8vIFRvIHJldmVhbC5cclxuICAgICAgICAgICAgICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbihAZm9jdXNlZC1oaWdobGlnaHQsIDEwJSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAmLmRpc2FibGVkIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZmFkZShAZm9jdXNlZC10ZXh0LCA0MCUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAZm9jdXNlZC1oaWdobGlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICYuYWN0aXZlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGxpZ2h0ZW4oc2F0dXJhdGUoc3BpbihAZm9jdXNlZC1oaWdobGlnaHQsIC0xMCksIDEwMCUpLCAzMCUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKEBmb2N1c2VkLWhpZ2hsaWdodCwgNSUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKEBmb2N1c2VkLWhpZ2hsaWdodCwgMTAlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1lbGVtZW50LXNlbGVjdGVkIHtcclxuICAgICAgICAgICAgQHNlbGVjdGVkLWhpZ2hsaWdodDogIzY0ODcyMTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZmFkZShAc2VsZWN0ZWQtaGlnaGxpZ2h0LCA4JSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC51aS1zb3J0YWJsZS1wbGFjZWhvbGRlciB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgIH1cclxuXHJcbiAgICAubGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldCB7XHJcbiAgICAgICAgQGRyb3B0YXJnZXQtaGlnaGxpZ2h0OiAjNjQ4NzIxO1xyXG4gICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAxMnB4IDZweCBmYWRlKEBkcm9wdGFyZ2V0LWhpZ2hsaWdodCwgNTAlKTtcclxuXHJcbiAgICAgICAgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7IC8vIFRvIHJldmVhbC5cclxuICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICBtaW4taGVpZ2h0OiBAZWxlbWVudC1taW4taGVpZ2h0IC0gMnB4O1xyXG4gICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgQGRyb3B0YXJnZXQtaGlnaGxpZ2h0ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGZhZGUoQGRyb3B0YXJnZXQtaGlnaGxpZ2h0LCAxNiUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBIENTUyBmaXggZm9yIG1lZGlhIGl0ZW0gZWxlbWVudHMuXHJcbiAgICAubWVkaWEtdGh1bWJuYWlsIHtcclxuICAgICAgICBpbWcge1xyXG4gICAgICAgICAgICBtYXgtd2lkdGg6MTAwJTtcclxuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwJTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwi77u/QGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICAubGF5b3V0LWNvbnRhaW5lciB7XHJcblxyXG4gICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWNvbnRhaW5lci1jaGlsZHJlbi1wbGFjZWhvbGRlciB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogQGNvbnRhaW5lci1wYWRkaW5nIC0gMXB4O1xyXG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogQGVsZW1lbnQtbWluLWhlaWdodDtcclxuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBmYWRlKEBncmF5LXRleHQsIDQwJSk7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBAY29udGFpbmVyLXBhZGRpbmc7XHJcbiAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZSAtIDE7XHJcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XHJcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjY7XHJcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1jaGlsZHJlbiB7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBAY29udGFpbmVyLXBhZGRpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQWxsIGFkamFjZW50IG5vbi1jb250YWluZXIgY2hpbGRyZW4gbmVlZCBzb21lIHNwYWNlIGJldHdlZW4uLi5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWNvbnRhaW5lcikgKyAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogQGNvbnRlbnQtc3BhY2luZztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyAuLi4gZXhjZXB0IHdoZW4galF1ZXJ5IFVJIHNvcnRhYmxlIGhlbHBlciBpcyB0aGUgZmlyc3QgZWxlbWVudCAoYmVjYXVzZSB0aGF0IG9uZSBpcyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYW5kIFwiZmxvYXRpbmdcIikuXHJcbiAgICAgICAgICAgICAgICA+IC51aS1zb3J0YWJsZS1oZWxwZXI6Zmlyc3QtY2hpbGQgKyAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgJi5sYXlvdXQtY29udGFpbmVyLWVtcHR5IHtcclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1jb250YWluZXItY2hpbGRyZW4tcGxhY2Vob2xkZXIge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7IC8vIFRvIHJldmVhbC5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtY2hpbGRyZW4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgICAgICB0b3A6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIHtcclxuICAgICAgICAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuIHtcclxuICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBmYWRlKEBncmF5LXRleHQsIDYwJSk7XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAtMXB4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtY29udGFpbmVyICsgLmxheW91dC1jb250YWluZXI6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGJvcmRlci10b3A6IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCLvu79AaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtY2FudmFzIHtcclxuICAgICAgICAjZHVtbXkgeyAvLyBPbmx5IGFkZGVkIGJlY2F1c2UgV0UgZG9lc24ndCBjb21waWxlIGlmIHRoZXJlIGFyZSBubyBydWxlcy5cclxuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCLvu79AaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtcm93IHtcclxuICAgICAgICAmLmxheW91dC1lbGVtZW50LWZvY3VzZWQ6bm90KC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0KSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiB7XHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wOiAxcHggZGFzaGVkIGZhZGUoQGdyYXktdGV4dCwgNjAlKSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTFweCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudCArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDAgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCLvu79AaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtY29sdW1uIHtcclxuICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgPiAubGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAzMDtcclxuICAgICAgICAgICAgICAgIHRvcDogMDtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAxNnB4O1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yOiBjb2wtcmVzaXplO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXItbGVmdCB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiAtNnB4O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXItcmlnaHQge1xyXG4gICAgICAgICAgICAgICAgcmlnaHQ6IC02cHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCLvu79AaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuQGltcG9ydCBcIlJlc2V0Lmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtY29udGVudCwgLmxheW91dC1odG1sIHtcclxuICAgICAgICBtaW4taGVpZ2h0OiAxZW07XHJcblxyXG4gICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHtcclxuXHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAycHg7XHJcbiAgICAgICAgICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47XHJcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRvIEhUTUw1IFczQyBzdGFuZGFyZCBkZWZhdWx0IHN0eWxpbmcgd2l0aGluIGNvbnRlbnQuXHJcbiAgICAgICAgICAgICAgICAucmVzZXQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICA+ICo6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsgLy8gSW1wb3J0YW50IGJlY2F1c2Ugc2l0ZS5jc3Mgb2YgdGhlIGFkbWluIHRoZW1lIHN0eWxlcyBoZWFkaW5nIG1hcmdpbnMgd2l0aCBhIHZlcnkgaGlnaCBzcGVjaWZpY2l0eS5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA+ICo6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLmxheW91dC1jb250ZW50LWltYWdlLCAmLmxheW91dC1jb250ZW50LXZlY3Rvci1pbWFnZSB7XHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gaW1nIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLmltZy1yZXNwb25zaXZlLCAuaW1nLXJlc3BvbnNpdmUgaW1nIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgfVxyXG59XHJcbiIsIu+7vy5yZXNldCgpIHtcclxuXHJcbiAgICAqIHtcclxuICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcclxuICAgIH1cclxuXHJcbiAgICBhZGRyZXNzLCBibG9ja3F1b3RlLCBjZW50ZXIsIGRpdiwgZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGZvcm0sXHJcbiAgICBoZWFkZXIsIGhyLCBsZWdlbmQsIGxpc3RpbmcsIHAsIHBsYWludGV4dCwgcHJlLCB4bXAge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgfVxyXG5cclxuICAgIGJsb2NrcXVvdGUsIGZpZ3VyZSwgbGlzdGluZywgcCwgcGxhaW50ZXh0LCBwcmUsIHhtcCB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMWVtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTtcclxuICAgIH1cclxuXHJcbiAgICBibG9ja3F1b3RlLCBmaWd1cmUge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiA0MHB4O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogNDBweDtcclxuICAgIH1cclxuXHJcbiAgICBhZGRyZXNzIHtcclxuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGluZywgcGxhaW50ZXh0LCBwcmUsIHhtcCB7XHJcbiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogcHJlO1xyXG4gICAgfVxyXG5cclxuICAgIGNpdGUsIGRmbiwgZW0sIGksIHZhciB7XHJcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG4gICAgfVxyXG5cclxuICAgIGIsIHN0cm9uZyB7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcclxuICAgIH1cclxuXHJcbiAgICBjb2RlLCBrYmQsIHNhbXAsIHR0IHtcclxuICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xyXG4gICAgfVxyXG5cclxuICAgIGJpZyB7XHJcbiAgICAgICAgZm9udC1zaXplOiBsYXJnZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc21hbGwge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogc21hbGxlcjtcclxuICAgIH1cclxuXHJcbiAgICBzdWIge1xyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBzdWI7XHJcbiAgICB9XHJcblxyXG4gICAgc3VwIHtcclxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogc3VwZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc3ViLCBzdXAge1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XHJcbiAgICAgICAgZm9udC1zaXplOiBzbWFsbGVyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBydWJ5IHtcclxuICAgICAgICBkaXNwbGF5OiBydWJ5O1xyXG4gICAgfVxyXG5cclxuICAgIHJiIHtcclxuICAgICAgICBkaXNwbGF5OiBydWJ5LWJhc2U7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgIH1cclxuXHJcbiAgICBydCB7XHJcbiAgICAgICAgZGlzcGxheTogcnVieS10ZXh0O1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgICAgZm9udC1zaXplOiA1MCU7XHJcbiAgICAgICAgZm9udC12YXJpYW50LWVhc3QtYXNpYW46IHJ1Ynk7XHJcbiAgICAgICAgdGV4dC1lbXBoYXNpczogbm9uZTtcclxuICAgIH1cclxuXHJcbiAgICByYmMge1xyXG4gICAgICAgIGRpc3BsYXk6IHJ1YnktYmFzZS1jb250YWluZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcnRjIHtcclxuICAgICAgICBkaXNwbGF5OiBydWJ5LXRleHQtY29udGFpbmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHJ1YnksIHJiLCBydCwgcmJjLCBydGMge1xyXG4gICAgICAgIHVuaWNvZGUtYmlkaTogaXNvbGF0ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgOmxpbmsge1xyXG4gICAgICAgIGNvbG9yOiAjMDAwMEVFO1xyXG4gICAgfVxyXG5cclxuICAgIDp2aXNpdGVkIHtcclxuICAgICAgICBjb2xvcjogIzU1MUE4QjtcclxuICAgIH1cclxuXHJcbiAgICA6bGluaywgOnZpc2l0ZWQge1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gICAgfVxyXG5cclxuICAgIGE6bGlua1tyZWx+PWhlbHBdLCBhOnZpc2l0ZWRbcmVsfj1oZWxwXSxcclxuICAgIGFyZWE6bGlua1tyZWx+PWhlbHBdLCBhcmVhOnZpc2l0ZWRbcmVsfj1oZWxwXSB7XHJcbiAgICAgICAgY3Vyc29yOiBoZWxwO1xyXG4gICAgfVxyXG5cclxuICAgIDpmb2N1cyB7XHJcbiAgICAgICAgb3V0bGluZTogYXV0bztcclxuICAgIH1cclxuXHJcbiAgICBtYXJrIHtcclxuICAgICAgICBiYWNrZ3JvdW5kOiB5ZWxsb3c7XHJcbiAgICAgICAgY29sb3I6IGJsYWNrO1xyXG4gICAgfVxyXG4gICAgLyogdGhpcyBjb2xvciBpcyBqdXN0IGEgc3VnZ2VzdGlvbiBhbmQgY2FuIGJlIGNoYW5nZWQgYmFzZWQgb24gaW1wbGVtZW50YXRpb24gZmVlZGJhY2sgKi9cclxuICAgIGFiYnJbdGl0bGVdLCBhY3JvbnltW3RpdGxlXSB7XHJcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBkb3R0ZWQgdW5kZXJsaW5lO1xyXG4gICAgfVxyXG5cclxuICAgIGlucywgdSB7XHJcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsLCBzLCBzdHJpa2Uge1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1xyXG4gICAgfVxyXG5cclxuICAgIGJsaW5rIHtcclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IGJsaW5rO1xyXG4gICAgfVxyXG5cclxuICAgIHE6OmJlZm9yZSB7XHJcbiAgICAgICAgY29udGVudDogb3Blbi1xdW90ZTtcclxuICAgIH1cclxuXHJcbiAgICBxOjphZnRlciB7XHJcbiAgICAgICAgY29udGVudDogY2xvc2UtcXVvdGU7XHJcbiAgICB9XHJcblxyXG4gICAgYnI6OmJlZm9yZSB7XHJcbiAgICAgICAgY29udGVudDogJ1xcQSc7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTtcclxuICAgIH1cclxuICAgIC8qIHRoaXMgYWxzbyBoYXMgYmlkaSBpbXBsaWNhdGlvbnMgKi9cclxuICAgIG5vYnIge1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICB9XHJcblxyXG4gICAgd2JyIHtcclxuICAgICAgICBjb250ZW50OiAnXFwyMDBCJztcclxuICAgIH1cclxuICAgIC8qIHRoaXMgYWxzbyBoYXMgYmlkaSBpbXBsaWNhdGlvbnMgKi9cclxuICAgIG5vYnIgd2JyIHtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xyXG4gICAgfVxyXG5cclxuICAgIGFydGljbGUsIGFzaWRlLCBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBoZ3JvdXAsIG5hdiwgc2VjdGlvbiB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICB9XHJcblxyXG4gICAgaDEge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDAuNjdlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjY3ZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAyLjAwZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgaDIge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDAuODNlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjgzZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAxLjUwZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgaDMge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDEuMDBlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjAwZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAxLjE3ZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgaDQge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDEuMzNlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjMzZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAxLjAwZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgaDUge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDEuNjdlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjY3ZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAwLjgzZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgaDYge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDIuMzNlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAyLjMzZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAwLjY3ZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgZGlyLCBkZCwgZGwsIGR0LCBvbCwgdWwge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgfVxyXG5cclxuICAgIGxpIHtcclxuICAgICAgICBkaXNwbGF5OiBsaXN0LWl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgZGlyLCBkbCwgb2wsIHVsIHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAxZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMWVtO1xyXG4gICAgfVxyXG5cclxuICAgICAgICBkaXIgZGlyLCBkaXIgZGwsIGRpciBvbCwgZGlyIHVsLFxyXG4gICAgICAgIGRsIGRpciwgZGwgZGwsIGRsIG9sLCBkbCB1bCxcclxuICAgICAgICBvbCBkaXIsIG9sIGRsLCBvbCBvbCwgb2wgdWwsXHJcbiAgICAgICAgdWwgZGlyLCB1bCBkbCwgdWwgb2wsIHVsIHVsIHtcclxuICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcclxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgZGQge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiA0MHB4O1xyXG4gICAgfVxyXG4gICAgLyogTFRSLXNwZWNpZmljOiB1c2UgJ21hcmdpbi1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xyXG4gICAgZGlyLCBvbCwgdWwge1xyXG4gICAgICAgIHBhZGRpbmctbGVmdDogNDBweDtcclxuICAgIH1cclxuICAgIC8qIExUUi1zcGVjaWZpYzogdXNlICdwYWRkaW5nLXJpZ2h0JyBmb3IgcnRsIGVsZW1lbnRzICovXHJcbiAgICBvbCB7XHJcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsO1xyXG4gICAgfVxyXG5cclxuICAgIGRpciwgdWwge1xyXG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcclxuICAgIH1cclxuXHJcbiAgICAgICAgZGlyIGRpciwgZGlyIHVsLFxyXG4gICAgICAgIG9sIGRpciwgb2wgdWwsXHJcbiAgICAgICAgdWwgZGlyLCB1bCB1bCB7XHJcbiAgICAgICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogY2lyY2xlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGRpciBkaXIgZGlyLCBkaXIgZGlyIHVsLFxyXG4gICAgICAgICAgICBkaXIgb2wgZGlyLCBkaXIgb2wgdWwsXHJcbiAgICAgICAgICAgIGRpciB1bCBkaXIsIGRpciB1bCB1bCxcclxuICAgICAgICAgICAgb2wgZGlyIGRpciwgb2wgZGlyIHVsLFxyXG4gICAgICAgICAgICBvbCBvbCBkaXIsIG9sIG9sIHVsLFxyXG4gICAgICAgICAgICBvbCB1bCBkaXIsIG9sIHVsIHVsLFxyXG4gICAgICAgICAgICB1bCBkaXIgZGlyLCB1bCBkaXIgdWwsXHJcbiAgICAgICAgICAgIHVsIG9sIGRpciwgdWwgb2wgdWwsXHJcbiAgICAgICAgICAgIHVsIHVsIGRpciwgdWwgdWwgdWwge1xyXG4gICAgICAgICAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBzcXVhcmU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICB0YWJsZSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgY2FwdGlvbiB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtY2FwdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjb2xncm91cCwgY29sZ3JvdXBbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtY29sdW1uLWdyb3VwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbCwgY29sW2hpZGRlbl0ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWNvbHVtbjtcclxuICAgIH1cclxuXHJcbiAgICB0aGVhZCwgdGhlYWRbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwO1xyXG4gICAgfVxyXG5cclxuICAgIHRib2R5LCB0Ym9keVtoaWRkZW5dIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgdGZvb3QsIHRmb290W2hpZGRlbl0ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWZvb3Rlci1ncm91cDtcclxuICAgIH1cclxuXHJcbiAgICB0ciwgdHJbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtcm93O1xyXG4gICAgfVxyXG5cclxuICAgIHRkLCB0aCwgdGRbaGlkZGVuXSwgdGhbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcclxuICAgIH1cclxuXHJcbiAgICAgICAgY29sZ3JvdXBbaGlkZGVuXSwgY29sW2hpZGRlbl0sIHRoZWFkW2hpZGRlbl0sIHRib2R5W2hpZGRlbl0sXHJcbiAgICAgICAgdGZvb3RbaGlkZGVuXSwgdHJbaGlkZGVuXSwgdGRbaGlkZGVuXSwgdGhbaGlkZGVuXSB7XHJcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGNvbGxhcHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB0YWJsZSB7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICBib3JkZXItc3BhY2luZzogMnB4O1xyXG4gICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XHJcbiAgICAgICAgdGV4dC1pbmRlbnQ6IGluaXRpYWw7XHJcbiAgICB9XHJcblxyXG4gICAgdGQsIHRoIHtcclxuICAgICAgICBwYWRkaW5nOiAxcHg7XHJcbiAgICB9XHJcblxyXG4gICAgdGgge1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoZWFkLCB0Ym9keSwgdGZvb3QsIHRhYmxlID4gdHIge1xyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICB9XHJcblxyXG4gICAgdHIsIHRkLCB0aCB7XHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IGluaGVyaXQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGFibGUsIHRkLCB0aCB7XHJcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBncmF5O1xyXG4gICAgfVxyXG5cclxuICAgIHRoZWFkLCB0Ym9keSwgdGZvb3QsIHRyIHtcclxuICAgICAgICBib3JkZXItY29sb3I6IGluaGVyaXQ7XHJcbiAgICB9XHJcbiAgICAvKnRhYmxlW3J1bGVzPW5vbmUgaV0sIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSwgdGFibGVbcnVsZXM9cm93cyBpXSxcclxudGFibGVbcnVsZXM9Y29scyBpXSwgdGFibGVbcnVsZXM9YWxsIGldLCB0YWJsZVtmcmFtZT12b2lkIGldLFxyXG50YWJsZVtmcmFtZT1hYm92ZSBpXSwgdGFibGVbZnJhbWU9YmVsb3cgaV0sIHRhYmxlW2ZyYW1lPWhzaWRlcyBpXSxcclxudGFibGVbZnJhbWU9bGhzIGldLCB0YWJsZVtmcmFtZT1yaHMgaV0sIHRhYmxlW2ZyYW1lPXZzaWRlcyBpXSxcclxudGFibGVbZnJhbWU9Ym94IGldLCB0YWJsZVtmcmFtZT1ib3JkZXIgaV0sXHJcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1jb2xzIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0aGVhZCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0aGVhZCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGhlYWQgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1jb2xzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdGhlYWQgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1hbGwgaV0gPiB0aGVhZCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRoZWFkID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGJvZHkgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Ym9keSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Ym9keSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdGJvZHkgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1ub25lIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdGZvb3QgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRmb290ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRmb290ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9cm93cyBpXSA+IHRmb290ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRmb290ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRmb290ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9YWxsIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1hbGwgaV0gPiB0Zm9vdCA+IHRyID4gdGgge1xyXG4gICAgYm9yZGVyLWNvbG9yOiBibGFjaztcclxufSovXHJcbiAgICBpbnB1dCwgc2VsZWN0LCBvcHRpb24sIG9wdGdyb3VwLCBidXR0b24sIHRleHRhcmVhLCBrZXlnZW4ge1xyXG4gICAgICAgIHRleHQtaW5kZW50OiBpbml0aWFsO1xyXG4gICAgfVxyXG5cclxuICAgIHRleHRhcmVhIHtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XHJcbiAgICB9XHJcblxyXG4gICAgaW5wdXRbdHlwZT1cInJhZGlvXCJdLCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sIGlucHV0W3R5cGU9XCJyZXNldFwiXSwgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSxcclxuICAgIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sIHNlbGVjdCwgYnV0dG9uIHtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgfVxyXG5cclxuICAgIGlucHV0W3R5cGU9XCJidXR0b25cIl0sIGJ1dHRvbiB7XHJcbiAgICAgICAgcGFkZGluZzogMC4zZW0gMC41ZW07XHJcbiAgICB9XHJcblxyXG4gICAgaHIge1xyXG4gICAgICAgIGNvbG9yOiBncmF5O1xyXG4gICAgICAgIGJvcmRlci1zdHlsZTogaW5zZXQ7XHJcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XHJcbiAgICAgICAgbWFyZ2luOiAwLjVlbSBhdXRvO1xyXG4gICAgfVxyXG5cclxuICAgIGZpZWxkc2V0IHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMnB4O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMnB4O1xyXG4gICAgICAgIGJvcmRlcjogZ3Jvb3ZlIDJweCBUaHJlZURGYWNlO1xyXG4gICAgICAgIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcclxuICAgIH1cclxuXHJcbiAgICBsZWdlbmQge1xyXG4gICAgICAgIHBhZGRpbmctbGVmdDogMnB4O1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDJweDtcclxuICAgIH1cclxufVxyXG4iLCLvu79AaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgID4gLmxheW91dC10b29sYm94LXdyYXBwZXIge1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICBtYXJnaW4tbGVmdDogQGNvbnRhaW5lci1wYWRkaW5nO1xyXG4gICAgICAgIHdpZHRoOiAyMjBweDtcclxuICAgICAgICBmbGV4LXNocmluazogMDtcclxuXHJcbiAgICAgICAgPiAubGF5b3V0LXRvb2xib3gge1xyXG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBAZ3JheS1ib3JkZXI7XHJcbiAgICAgICAgICAgIHdpZHRoOiAyMjBweDtcclxuICAgICAgICAgICAgbWluLWhlaWdodDogNDAwcHg7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IEBjb250YWluZXItcGFkZGluZyAvIDI7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBncmF5LWJnO1xyXG5cclxuICAgICAgICAgICAgJi5zdGlja3ktdG9wIHtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgICAgICAgICAgIHRvcDogMDtcclxuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAmLnN0aWNreS1ib3R0b20ge1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgICAgYm90dG9tOiAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAubGF5b3V0LXRvb2xib3gtZ3JvdXAge1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogQGNvbnRhaW5lci1wYWRkaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgIC5sYXlvdXQtdG9vbGJveC1ncm91cC1oZWFkaW5nIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiBAY29udGFpbmVyLXBhZGRpbmcgLyAzO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTBweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiBAY29udGFpbmVyLXBhZGRpbmcgLyAzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAxNHB4LzEgRm9udEF3ZXNvbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwZDdcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgJi5jb2xsYXBzZWQge1xyXG4gICAgICAgICAgICAgICAgICAgIC5sYXlvdXQtdG9vbGJveC1ncm91cC1oZWFkaW5nOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMGRhXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAubGF5b3V0LXRvb2xib3gtaXRlbXMge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAubGF5b3V0LXRvb2xib3gtc2VjdGlvbiArIC5sYXlvdXQtdG9vbGJveC1zZWN0aW9uIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiBAY29udGFpbmVyLXBhZGRpbmcgLyAzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC5sYXlvdXQtdG9vbGJveC1pdGVtIHtcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBAZ3JheS1ib3JkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAoQGNvbnRhaW5lci1wYWRkaW5nIC0gMykgQGNvbnRhaW5lci1wYWRkaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDE2cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICsgLmxheW91dC10b29sYm94LWl0ZW0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiBAY29udGFpbmVyLXBhZGRpbmcgLyAzO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICArIC5sYXlvdXQtdG9vbGJveC1ncm91cCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogQGNvbnRhaW5lci1wYWRkaW5nIC8gMjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCLvu79AaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtcG9wdXAge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IC8vIFNob3duIG9ubHkgaW4gYWN0aXZlIG9yIGZvY3VzZWQgc3RhdGVzLlxyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgLW1vei1ib3gtc2hhZG93OiAzcHggM3B4IDExcHggMCByZ2JhKDUwLCA1MCwgNTAsIDAuNSk7XHJcbiAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAzcHggM3B4IDExcHggMCByZ2JhKDUwLCA1MCwgNTAsIDAuNSk7XHJcbiAgICAgICAgYm94LXNoYWRvdzogM3B4IDNweCAxMXB4IDAgcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBncmF5LWJvcmRlcjtcclxuICAgICAgICBwYWRkaW5nOiAycHggMDtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xyXG4gICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XHJcbiAgICAgICAgei1pbmRleDogMjA7XHJcbiAgICAgICAgY29sb3I6IEBncmF5LXRleHQ7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xyXG4gICAgICAgIG1pbi13aWR0aDogMzAwcHg7XHJcblxyXG4gICAgICAgICYud2lkZSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiA2MDBweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtcG9wdXAtZmxleCB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDJweCA1cHg7XHJcblxyXG4gICAgICAgICAgICAubGF5b3V0LXBvcHVwLWNvbHVtbiArIC5sYXlvdXQtcG9wdXAtY29sdW1uIHtcclxuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGZhZGUoZ3JheSwgMTUlKTtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNHB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LXBvcHVwLWl0ZW0ge1xyXG4gICAgICAgICAgICBwYWRkaW5nOiA0cHggNnB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1wb3B1cC1sYWJlbCB7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45ZW07XHJcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgICAgICBjb2xvcjogQGdyYXktdGV4dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtcG9wdXAtYWN0aW9uOmhvdmVyIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGdyYXktYmc7XHJcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtcG9wdXAtaW5wdXQge1xyXG4gICAgICAgICAgICBpbnB1dFt0eXBlPSd0ZXh0J10sIHRleHRhcmVhIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IGxhYmVsIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjllbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0= */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkVkaXRvci5sZXNzIiwiTGF5b3V0RWRpdG9yLmNzcyIsIkVsZW1lbnQubGVzcyIsIkNvbnRhaW5lci5sZXNzIiwiQ2FudmFzLmxlc3MiLCJSb3cubGVzcyIsIkNvbHVtbi5sZXNzIiwiQ29udGVudC5sZXNzIiwiUmVzZXQubGVzcyIsIlRvb2xib3gubGVzcyIsIlBvcHVwLmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQTtFQUNJLHFCQUFBO0VBQUEsY0FBQTtFQUNBLHVCQUFBO01BQUEsK0JBQUE7RUFDQSxtQkFBQTtFQUNBLFVBQUE7Q0NESDtBREhEO0VBT1EscUJBQUE7RUFBQSxjQUFBO0NDRFA7QURORDtFQVVZLGtCQUFBO0NDRFg7QURNRDtFQUNJLHFCQUFBO0VBQUEsY0FBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSx3QkFBQTtNQUFBLHFCQUFBO0NDSkg7QURBRDtFQU9RLHFCQUFBO01BQUEsYUFBQTtFQUNBLDBCQUFBO0VBQ0EsMEJBQUE7Q0NKUDtBRExEO0VBWVksY0FBQTtFQUNBLG9CQUFBO0VBQ0EsaUJBQUE7Q0NKWDtBRFZEO0VBaUJnQix1QkFBQTtDQ0pmO0FEYkQ7RUFzQlksd0JBQUE7RUFDQSxxQkFBQTtFQUNBLG9CQUFBO0NDTlg7QURsQkQ7RUE2QlEsb0JBQUE7Q0NSUDtBRFlEO0VBQ0ksY0FBQTtDQ1ZIO0FEYU87O0VBQ0ksYUFBQTtFQUNBLGVBQUE7Q0NWWDtBRGFPO0VBQ0ksWUFBQTtDQ1hYO0FEQ0Q7O0VBY1ksZ0JBQUE7Q0NYWDtBREhEO0VBa0JZLHVCQUFBO0VBQ0EsWUFBQTtFQUNBLFdBQUE7Q0NaWDtBRGNXO0VBQ0ksb0JBQUE7RUFDQSxZQUFBO0NDWmY7QURaRDtFQTZCWSxnQkFBQTtDQ2RYO0FEZkQ7RUFrQ1EsbUJBQUE7RUFDQSwwQkFBQTtFQUNBLGlCQUFBO0VBQ0EsdUJBQUE7Q0NoQlA7QURyQkQ7RUF5Q1EscUJBQUE7RUFDQSxtQkFBQTtDQ2pCUDtBRHpCRDtFQThDUSxvQkFBQTtDQ2xCUDs7QUM1RUQ7RUFFUSxtQkFBQTtFQUNBLGNBQUE7RUFDQSxnQkFBQTtFQUNBLGlCQUFBO0VBQ0EsV0FBQTtDRDhFUDtBQzNFTztFQUNJLGVBQUE7Q0Q2RVg7QUN2RkQ7RUFlZ0IsY0FBQTtFQUNBLG1CQUFBO0VBQ0EsVUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsZUFBQTtFQUNBLGlCQUFBO0VBQ0Esb0JBQUE7RUFDQSxrQkFBQTtFQUNBLHVCQUFBO0NEMkVmO0FDbkdEO0VBMkJvQixzQkFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtDRDJFbkI7QUN4R0Q7RUFpQ29CLGdCQUFBO0NEMEVuQjtBQzNHRDtFQXFDb0IsY0FBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0NEeUVuQjtBQ2pIRDtFQTZDZ0IsV0FBQTtFQUNBLFdBQUE7Q0R1RWY7QUNySEQ7RUFxRFEsaUJBQUE7Q0RtRVA7QUNoRUc7O0VBR1Esa0JBQUE7RUFDQSxvQkFBQTtDRGlFWDtBQ3JFRzs7RUFPWSxhQUFBO0NEa0VmO0FDekVHO0VBY1EsdUNBQUE7Q0Q4RFg7QUM1RUc7RUFpQlksZUFBQTtFQUNBLFlBQUE7RUFDQSwyQ0FBQTtDRDhEZjtBQ2pGRztFQTJCUSxzQkFBQTtDRHlEWDtBQ3BGRztFQThCWSxlQUFBO0VBQ0EsMEJBQUE7RUFDQSxlQUFBO0NEeURmO0FDekZHO0VBbUNnQixzQkFBQTtDRHlEbkI7QUN4RG1CO0VBQ0ksMEJBQUE7Q0QwRHZCO0FDdkRtQjtFQUNJLGdCQUFBO0VBQ0EsZ0NBQUE7Q0R5RHZCO0FDdkR1QjtFQUNJLDBCQUFBO0NEeUQzQjtBQ3JEbUI7RUFDSSxlQUFBO0VBQ0EsMEJBQUE7Q0R1RHZCO0FDckR1QjtFQUNJLDBCQUFBO0NEdUQzQjtBQzdHRztFQStEUSwyQ0FBQTtDRGlEWDtBQ3hLRDtFQTRIUSxjQUFBO0NEK0NQO0FDM0tEO0VBaUlRLHVEQUFBO0NENkNQO0FDOUtEO0VBb0lZLGVBQUE7RUFDQSwrQkFBQTtFQUNBLGlCQUFBO0VBQ0Esc0NBQUE7RUFDQSwyQ0FBQTtDRDZDWDtBQ3JMRDtFQStJWSxnQkFBQTtFQUNBLGlCQUFBO0NEeUNYOztBRXpMRDtFQU1nQixjQUFBO0VBQ0EsMkJBQUE7TUFBQSx1QkFBQTtFQUNBLGFBQUE7RUFDQSxpQkFBQTtFQUNBLDRDQUFBO0VBQ0EsbUJBQUE7RUFDQSxjQUFBO0VBQ0Esc0JBQUE7TUFBQSx3QkFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7Q0Z1TGY7QUV4TUQ7RUFxQmdCLGNBQUE7Q0ZzTGY7QUUzTUQ7RUF5Qm9CLGlCQUFBO0NGcUxuQjtBRTlNRDtFQThCb0IsY0FBQTtDRm1MbkI7QUUvS1c7RUFFUSxxQkFBQTtFQUFBLGNBQUE7Q0ZnTG5CO0FFbExXO0VBTVEsbUJBQUE7RUFDQSxPQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7RUFDQSxRQUFBO0NGK0tuQjtBRXpLRztFQUdZLDRDQUFBO0NGeUtmO0FFNUtHO0VBTWdCLGFBQUE7Q0Z5S25CO0FFL0tHO0VBV1ksY0FBQTtDRnVLZjtBRWxMRztFQWNnQixjQUFBO0NGdUtuQjs7QUd2T0Q7RUFHWSxjQUFBO0NId09YOztBSXpPTztFQUVRLDJEQUFBO0NKMk9mO0FJN09PO0VBSVksNEJBQUE7Q0o0T25CO0FJaFBPO0VBU1EsMEJBQUE7Q0owT2Y7QUluUE87RUFXWSwwQkFBQTtDSjJPbkI7O0FLeFBEO0VBSWdCLGNBQUE7RUFDQSxtQkFBQTtFQUNBLFlBQUE7RUFDQSxPQUFBO0VBQ0EsWUFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtDTHdQZjtBS2xRRDtFQWNnQixXQUFBO0NMdVBmO0FLclFEO0VBa0JnQixZQUFBO0NMc1BmO0FLbFBPO0VBQ0ksZUFBQTtDTG9QWDs7QU0xUUQ7O0VBRVEsZ0JBQUE7Q042UVA7QU0vUUQ7O0VBT2dCLGFBQUE7RUFDQSxtQkFBQTtFQUNBLG9CQUFBO0VONFFkLHlGQUF5RjtFQUN6RixxQ0FBcUM7RUFDckMscUNBQXFDO0VBQ3JDLHVEQUF1RDtFQUN2RCx3REFBd0Q7RUFDeEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJDO0NBQ0Y7QU1yVEQ7O0VDQVEsVUFBQTtFQUNBLFdBQUE7RUFDQSx3QkFBQTtDUHlUUDtBTTNURDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUNPUSxlQUFBO0NQc1ZQO0FNN1ZEOzs7Ozs7Ozs7Ozs7OztFQ1dRLGdCQUFBO0VBQ0EsbUJBQUE7Q1BrV1A7QU05V0Q7Ozs7RUNnQlEsa0JBQUE7RUFDQSxtQkFBQTtDUG9XUDtBTXJYRDs7RUNxQlEsbUJBQUE7Q1BvV1A7QU16WEQ7Ozs7Ozs7O0VDeUJRLHVCQUFBO0VBQ0EsaUJBQUE7Q1AwV1A7QU1wWUQ7Ozs7Ozs7Ozs7RUM4QlEsbUJBQUE7Q1BrWFA7QU1oWkQ7Ozs7RUNrQ1Esb0JBQUE7Q1BvWFA7QU10WkQ7Ozs7Ozs7O0VDc0NRLHVCQUFBO0NQMFhQO0FNaGFEOztFQzBDUSxrQkFBQTtDUDBYUDtBTXBhRDs7RUM4Q1EsbUJBQUE7Q1AwWFA7QU14YUQ7O0VDa0RRLG9CQUFBO0NQMFhQO0FNNWFEOztFQ3NEUSxzQkFBQTtDUDBYUDtBTWhiRDs7OztFQzBEUSxvQkFBQTtFQUNBLG1CQUFBO0NQNFhQO0FNdmJEOztFQ2dFUSxjQUFBO0NQMlhQO0FNM2JEOztFQ29FUSxtQkFBQTtFQUNBLG9CQUFBO0NQMlhQO0FNaGNEOztFQ3lFUSxtQkFBQTtFQUNBLG9CQUFBO0VBQ0EsZUFBQTtFQUNBLDhCQUFBO0VBQ0Esb0JBQUE7Q1AyWFA7QU14Y0Q7O0VDaUZRLDZCQUFBO0NQMlhQO0FNNWNEOztFQ3FGUSw2QkFBQTtDUDJYUDtBTWhkRDs7Ozs7Ozs7OztFQ3lGUSxzQkFBQTtDUG1ZUDtBTTVkRDs7RUM4RlEsZUFBQTtDUGtZUDtBTWhlRDs7RUNrR1EsZUFBQTtDUGtZUDtBTXBlRDs7OztFQ3NHUSwyQkFBQTtDUG9ZUDtBTTFlRDs7Ozs7Ozs7RUMyR1EsYUFBQTtDUHlZUDtBTXBmRDs7RUMrR1EsY0FBQTtDUHlZUDtBTXhmRDs7RUNtSFEsbUJBQUE7RUFDQSxhQUFBO0NQeVlQO0FNN2ZEOzs7O0VDd0hRLGtDQUFBO0NQMllQO0FNbmdCRDs7OztFQzRIUSwyQkFBQTtDUDZZUDtBTXpnQkQ7Ozs7OztFQ2dJUSw4QkFBQTtDUGlaUDtBTWpoQkQ7O0VDb0lRLHVCQUFBO0NQaVpQO0FNcmhCRDs7RUN3SVEsb0JBQUE7Q1BpWlA7QU16aEJEOztFQzRJUSxxQkFBQTtDUGlaUDtBTTdoQkQ7O0VDZ0pRLGNBQUE7RUFDQSxpQkFBQTtDUGlaUDtBTWxpQkQ7O0VDcUpRLG9CQUFBO0NQaVpQO0FNdGlCRDs7RUN5SlEsaUJBQUE7Q1BpWlA7QU0xaUJEOztFQzZKUSxvQkFBQTtDUGlaUDtBTTlpQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUNpS1EsZUFBQTtDUHFhUDtBTXRrQkQ7O0VDcUtRLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0NQcWFQO0FNN2tCRDs7RUM0S1EsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7Q1BxYVA7QU1wbEJEOztFQ21MUSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtDUHFhUDtBTTNsQkQ7O0VDMExRLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0NQcWFQO0FNbG1CRDs7RUNpTVEsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7Q1BxYVA7QU16bUJEOztFQ3dNUSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSxrQkFBQTtDUHFhUDtBTWhuQkQ7Ozs7Ozs7Ozs7OztFQytNUSxlQUFBO0NQK2FQO0FNOW5CRDs7RUNtTlEsbUJBQUE7Q1ArYVA7QU1sb0JEOzs7Ozs7OztFQ3VOUSxnQkFBQTtFQUNBLG1CQUFBO0NQcWJQO0FNN29CRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUMrTlksY0FBQTtFQUNBLGlCQUFBO0NQZ2RYO0FNaHJCRDs7RUNvT1Esa0JBQUE7Q1BnZFA7QU1wckJEOzs7Ozs7RUN3T1EsbUJBQUE7Q1BvZFA7QU01ckJEOztFQzRPUSx5QkFBQTtDUG9kUDtBTWhzQkQ7Ozs7RUNnUFEsc0JBQUE7Q1BzZFA7QU10c0JEOzs7Ozs7Ozs7Ozs7RUNzUFksd0JBQUE7Q1A4ZFg7QU1wdEJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUNrUWdCLHdCQUFBO0NQd2ZmO0FNMXZCRDs7RUNzUVEsZUFBQTtDUHdmUDtBTTl2QkQ7O0VDMFFRLHVCQUFBO0NQd2ZQO0FNbHdCRDs7OztFQzhRUSw0QkFBQTtDUDBmUDtBTXh3QkQ7Ozs7RUNrUlEsc0JBQUE7Q1A0ZlA7QU05d0JEOzs7O0VDc1JRLDRCQUFBO0NQOGZQO0FNcHhCRDs7OztFQzBSUSx5QkFBQTtDUGdnQlA7QU0xeEJEOzs7O0VDOFJRLDRCQUFBO0NQa2dCUDtBTWh5QkQ7Ozs7RUNrU1EsbUJBQUE7Q1BvZ0JQO0FNdHlCRDs7Ozs7Ozs7RUNzU1Esb0JBQUE7Q1AwZ0JQO0FNaHpCRDs7Ozs7Ozs7Ozs7Ozs7OztFQzJTWSxxQkFBQTtDUHVoQlg7QU1sMEJEOztFQytTUSx1QkFBQTtFQUNBLG9CQUFBO0VBQ0EsMEJBQUE7RUFDQSxxQkFBQTtDUHVoQlA7QU16MEJEOzs7O0VDc1RRLGFBQUE7Q1B5aEJQO0FNLzBCRDs7RUMwVFEsa0JBQUE7Q1B5aEJQO0FNbjFCRDs7Ozs7Ozs7RUM4VFEsdUJBQUE7Q1AraEJQO0FNNzFCRDs7Ozs7O0VDa1VRLHdCQUFBO0NQbWlCUDtBTXIyQkQ7Ozs7OztFQ3NVUSxtQkFBQTtDUHVpQlA7QU03MkJEOzs7Ozs7OztFQzBVUSxzQkFBQTtDUDZpQlA7QU12M0JEOzs7Ozs7Ozs7Ozs7OztFQ3dXUSxxQkFBQTtDUCtoQlA7QU12NEJEOztFQzRXUSxzQkFBQTtDUCtoQlA7QU0zNEJEOzs7Ozs7Ozs7Ozs7OztFQ2lYUSx1QkFBQTtDUDBpQlA7QU0zNUJEOzs7O0VDcVhRLHFCQUFBO0NQNGlCUDtBTWo2QkQ7O0VDeVhRLFlBQUE7RUFDQSxvQkFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7Q1A0aUJQO0FNeDZCRDs7RUNnWVEsaUJBQUE7RUFDQSxrQkFBQTtFQUNBLDhCQUFBO0VBQ0EsK0JBQUE7Q1A0aUJQO0FNLzZCRDs7RUN1WVEsa0JBQUE7RUFDQSxtQkFBQTtDUDRpQlA7QU1wN0JEOztFQWVvQix5QkFBQTtDTnk2Qm5CO0FNeDdCRDs7RUFtQm9CLDRCQUFBO0NOeTZCbkI7QU1wNkJPOzs7O0VBRVEsZUFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLGFBQUE7Q053NkJmO0FNcjhCRDs7RUFtQ1EsZUFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLGFBQUE7Q05zNkJQOztBUTc4QkQ7RUFFUSwwQkFBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLHNCQUFBO0NSKzhCUDtBUXI5QkQ7RUFTWSxzQkFBQTtFQUNBLFlBQUE7RUFDQSw4Q0FBQTtDUis4Qlg7QVExOUJEO0VBZVksZ0JBQUE7Q1I4OEJYO0FRejhCRDtFQUVRLGtCQUFBO0VBQ0EsYUFBQTtFQUVBLHFCQUFBO0VBQ0EsZUFBQTtFUjA4Qk47b0RBQ2tEO0VReDhCNUMsdUJBQUE7RUFDQSxpQkFBQTtFQUNBLGlCQUFBO0VSMDhCTix5RUFBeUU7RVF2OEJuRSxpQkFBQTtFQUNBLE9BQUE7Q1IwOEJQO0FReDhCTztFQUNJLFdBQUE7Q1IwOEJYO0FRdjhCTztFQUNJLDBDQUFBO0VBQ0EsbUJBQUE7Q1J5OEJYO0FRdDhCTztFQUNJLHFDQUFBO0NSdzhCWDtBUW4rQkQ7RUErQlksMEJBQUE7RUFDQSxhQUFBO0VBQ0Esa0JBQUE7RUFDQSxhQUFBO0VBQ0EsMEJBQUE7Q1J1OEJYO0FRcjhCVztFQUNJLGdCQUFBO0VBQ0EsT0FBQTtFQUNBLGlCQUFBO0VBQ0EsaUJBQUE7Q1J1OEJmO0FRcDhCVztFQUNJLG1CQUFBO0VBQ0EsVUFBQTtDUnM4QmY7QVFwL0JEO0VBa0RnQixpQkFBQTtDUnE4QmY7QVF2L0JEO0VBcURvQixlQUFBO0VBQ0EsbUJBQUE7RUFDQSxzQkFBQTtDUnE4Qm5CO0FRbjhCbUI7RUFDSSxzQkFBQTtFQUNBLFlBQUE7RUFDQSxrQkFBQTtFQUNBLDhDQUFBO0VBQ0EsbUJBQUE7RUFDQSxpQkFBQTtDUnE4QnZCO0FRajhCZTtFQUVRLGlCQUFBO0NSazhCdkI7QVFwOEJlO0VBTVEsY0FBQTtDUmk4QnZCO0FRMWdDRDtFQThFb0IsZ0JBQUE7Q1IrN0JuQjtBUTdnQ0Q7RUFrRm9CLDBCQUFBO0VBQ0EsdUJBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0NSODdCbkI7QVFuaENEO0VBd0Z3QixzQkFBQTtFQUNBLFlBQUE7RUFDQSw4Q0FBQTtDUjg3QnZCO0FReGhDRDtFQThGd0IsZ0JBQUE7Q1I2N0J2QjtBUTNoQ0Q7RUFtR29CLGdCQUFBO0NSMjdCbkI7O0FTbGpDRDtFQUVRLGNBQUE7RUFDQSxtQkFBQTtFQUNBLFVBQUE7RUFHQSxpREFBQTtFQUNBLDBCQUFBO0VBQ0EsZUFBQTtFQUNBLDBCQUFBO0VBQ0EsaUJBQUE7RUFDQSxZQUFBO0VBQ0EsZUFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxvQkFBQTtFQUNBLG9CQUFBO0VBQ0EsaUJBQUE7Q1RvakNQO0FTbGpDTztFQUNJLGFBQUE7Q1RvakNYO0FTemtDRDtFQXlCWSxxQkFBQTtFQUFBLGNBQUE7RUFDQSxpQkFBQTtDVG1qQ1g7QVM3a0NEO0VBNkJnQixpQkFBQTtFQUNBLGlEQUFBO0VBQ0Esa0JBQUE7Q1RtakNmO0FTbGxDRDtFQW9DWSxpQkFBQTtDVGlqQ1g7QVNybENEO0VBd0NZLGlCQUFBO0VBQ0Esa0JBQUE7RUFDQSxlQUFBO0NUZ2pDWDtBUzFsQ0Q7RUE4Q1ksMEJBQUE7RUFDQSxnQkFBQTtDVCtpQ1g7QVM5bENEOztFQW9EZ0IsWUFBQTtDVDhpQ2Y7QVNsbUNEO0VBd0RnQixlQUFBO0VBQ0EsaUJBQUE7Q1Q2aUNmIiwiZmlsZSI6IkxheW91dEVkaXRvci5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyLvu79AaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yLXRvb2xiYXIge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHRvcDogMTBweDtcclxuXHJcbiAgICAubGF5b3V0LWVkaXRvci10b29sYmFyLWdyb3VwIHtcclxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG5cclxuICAgICAgICA+IGxpICsgbGkge1xyXG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMTJweDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBtYXJnaW4tdG9wOiAxZW07XHJcbiAgICBmb250LXNpemU6IEBmb250LXNpemU7XHJcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcclxuXHJcbiAgICA+IC5sYXlvdXQtY2FudmFzLXdyYXBwZXIge1xyXG4gICAgICAgIGZsZXgtZ3JvdzogMTtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAZ3JheS1iZztcclxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBAZ3JheS1ib3JkZXI7XHJcblxyXG4gICAgICAgID4gLmxheW91dC10b29sYmFyLWNvbnRhaW5lciB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgICAgICAgIG1hcmdpbjogQGNvbnRhaW5lci1wYWRkaW5nIEBjb250YWluZXItcGFkZGluZyAwO1xyXG4gICAgICAgICAgICBtaW4taGVpZ2h0OiA3MXB4O1xyXG5cclxuICAgICAgICAgICAgPiAubWNlLXBhbmVsIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAubGF5b3V0LXBsYWNlaG9sZGVyIHtcclxuICAgICAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkICNjY2M7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDAuMmVtIDAuNGVtO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZThlOGU4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAubGF5b3V0LXNuaXBwZXQge1xyXG4gICAgICAgIGJhY2tncm91bmQ6ICNlOGU4ZTg7XHJcbiAgICB9XHJcbn1cclxuXHJcbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcblxyXG4gICAgLmhlbHAtcm93IHtcclxuICAgICAgICAmOmJlZm9yZSwgJjphZnRlciB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IFwiIFwiOyAvLyAxXHJcbiAgICAgICAgICAgIGRpc3BsYXk6IHRhYmxlOyAvLyAyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmOmFmdGVyIHtcclxuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA+IC5oZWxwLWNvbHVtbi1mdWxsLCA+IC5oZWxwLWNvbHVtbi1oYWxmIHtcclxuICAgICAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPiAuaGVscC1jb2x1bW4taGFsZiB7XHJcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgICAgICAgICB3aWR0aDogNTAlO1xyXG5cclxuICAgICAgICAgICAgJjpudGgtY2hpbGQoMm4pIHtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7XHJcbiAgICAgICAgICAgICAgICBjbGVhcjogbGVmdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgKyAuaGVscC1yb3cge1xyXG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAxZW07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvZGUge1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmNGY1O1xyXG4gICAgICAgIHBhZGRpbmc6IDJweCA0cHg7XHJcbiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcclxuICAgIH1cclxuXHJcbiAgICBwIHtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcclxuICAgICAgICBsaW5lLWhlaWdodDogMS42ZW07XHJcbiAgICB9XHJcblxyXG4gICAgdGFibGUgPiB0Ym9keSA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7XHJcbiAgICB9XHJcbn1cclxuIiwiLmxheW91dC1lZGl0b3ItdG9vbGJhciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDEwcHg7XG59XG4ubGF5b3V0LWVkaXRvci10b29sYmFyIC5sYXlvdXQtZWRpdG9yLXRvb2xiYXItZ3JvdXAge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmxheW91dC1lZGl0b3ItdG9vbGJhciAubGF5b3V0LWVkaXRvci10b29sYmFyLWdyb3VwID4gbGkgKyBsaSB7XG4gIG1hcmdpbi1sZWZ0OiAxMnB4O1xufVxuLmxheW91dC1lZGl0b3Ige1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW4tdG9wOiAxZW07XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtY2FudmFzLXdyYXBwZXIge1xuICBmbGV4LWdyb3c6IDE7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNGU1ZTY7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtY2FudmFzLXdyYXBwZXIgPiAubGF5b3V0LXRvb2xiYXItY29udGFpbmVyIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgbWFyZ2luOiAxMnB4IDEycHggMDtcbiAgbWluLWhlaWdodDogNzFweDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC1jYW52YXMtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJhci1jb250YWluZXIgPiAubWNlLXBhbmVsIHtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC1jYW52YXMtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gLmxheW91dC1wbGFjZWhvbGRlciB7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCAjY2NjO1xuICBwYWRkaW5nOiAwLjJlbSAwLjRlbTtcbiAgYmFja2dyb3VuZDogI2U4ZThlODtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtc25pcHBldCB7XG4gIGJhY2tncm91bmQ6ICNlOGU4ZTg7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyAuaGVscC1yb3c6YmVmb3JlLFxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93OmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyAuaGVscC1yb3cgPiAuaGVscC1jb2x1bW4tZnVsbCxcbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyA+IC5oZWxwLWNvbHVtbi1oYWxmIHtcbiAgbWFyZ2luOiAwLjVlbSAwO1xufVxuLmxheW91dC1lZGl0b3ItaGVscC1kaWFsb2cgLmhlbHAtcm93ID4gLmhlbHAtY29sdW1uLWhhbGYge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDUwJTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyA+IC5oZWxwLWNvbHVtbi1oYWxmOm50aC1jaGlsZCgybikge1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICBjbGVhcjogbGVmdDtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIC5oZWxwLXJvdyArIC5oZWxwLXJvdyB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIGNvZGUge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjU7XG4gIHBhZGRpbmc6IDJweCA0cHg7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG59XG4ubGF5b3V0LWVkaXRvci1oZWxwLWRpYWxvZyBwIHtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjZlbTtcbn1cbi5sYXlvdXQtZWRpdG9yLWhlbHAtZGlhbG9nIHRhYmxlID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkIHtcbiAgcGFkZGluZy1yaWdodDogMTBweDtcbn1cblxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHBhZGRpbmc6IDA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29sdW1uKSB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW46IDA7XG4gIHotaW5kZXg6IDIwO1xuICBoZWlnaHQ6IDI1cHg7XG4gIHBhZGRpbmc6IDAgNnB4O1xuICBsaXN0LXN0eWxlOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBsaW5lLWhlaWdodDogMjVweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtZWxlbWVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtaXRlbSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiAyNXB4O1xuICBwYWRkaW5nOiAxcHggNnB4IDA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWxhYmVsIHtcbiAgZm9udC1zaXplOiAxM3B4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24ge1xuICBkaXNwbGF5OiBub25lO1xuICB3aWR0aDogMjhweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWVsZW1lbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwtbWFpbiB7XG4gIHRvcDogLTI3cHg7XG4gIGxlZnQ6IC0ycHg7XG59XG4ubGF5b3V0LWVkaXRvciBsaS5sYXlvdXQtZWxlbWVudCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUsXG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkIHtcbiAgYm9yZGVyLXdpZHRoOiAycHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlcixcbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XG4gIG1hcmdpbjogLTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWFjdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogcmdiYSgxMDQsIDEwNCwgMTA0LCAwLjEpO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtYWN0aXZlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsLW1haW4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgei1pbmRleDogMzA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTA0LCAxMDQsIDEwNCwgMC4xKTtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQge1xuICBib3JkZXItY29sb3I6ICM2NDg3MjE7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2NDg3MjE7XG4gIGNvbG9yOiAjZmVmZWZlO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1wYW5lbCA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyYjAyYjtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWFjdGlvbi5kaXNhYmxlZCB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgY29sb3I6IHJnYmEoMjU0LCAyNTQsIDI1NCwgMC40KTtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LWZvY3VzZWQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwgPiAubGF5b3V0LXBhbmVsLWFjdGlvbi5kaXNhYmxlZDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2NDg3MjE7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24uYWN0aXZlIHtcbiAgY29sb3I6ICNkZWZmNDI7XG4gIGJhY2tncm91bmQtY29sb3I6ICM3MzliMjY7XG59XG4ubGF5b3V0LWVkaXRvcjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsID4gLmxheW91dC1wYW5lbC1hY3Rpb24uYWN0aXZlOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzgyYjAyYjtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1lbGVtZW50LXNlbGVjdGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDEzNSwgMzMsIDAuMDgpO1xufVxuLmxheW91dC1lZGl0b3IgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0IHtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDEycHggNnB4IHJnYmEoMTAwLCAxMzUsIDMzLCAwLjUpO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDtcbiAgbWluLWhlaWdodDogNzhweDtcbiAgYm9yZGVyOiAycHggZGFzaGVkICM2NDg3MjEgIWltcG9ydGFudDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDEzNSwgMzMsIDAuMTYpO1xufVxuLmxheW91dC1lZGl0b3IgLm1lZGlhLXRodW1ibmFpbCBpbWcge1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRhaW5lci1jaGlsZHJlbi1wbGFjZWhvbGRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbjogMTFweDtcbiAgbWluLWhlaWdodDogODBweDtcbiAgYm9yZGVyOiAxcHggZGFzaGVkIHJnYmEoMTI0LCAxMjQsIDEyNCwgMC40KTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBwYWRkaW5nOiAxMnB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIG9wYWNpdHk6IDAuNjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250YWluZXIgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4ge1xuICBwYWRkaW5nOiAxMnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250YWluZXIgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29udGFpbmVyKSArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpIHtcbiAgbWFyZ2luLXRvcDogMTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLnVpLXNvcnRhYmxlLWhlbHBlcjpmaXJzdC1jaGlsZCArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1jb250YWluZXIpIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIubGF5b3V0LWNvbnRhaW5lci1lbXB0eSA+IC5sYXlvdXQtY29udGFpbmVyLWNoaWxkcmVuLXBsYWNlaG9sZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGFpbmVyID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIubGF5b3V0LWNvbnRhaW5lci1lbXB0eSA+IC5sYXlvdXQtY2hpbGRyZW4ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cbi5sYXlvdXQtZWRpdG9yOm5vdCgubGF5b3V0LWVkaXRvci1kcmFnZ2luZykgLmxheW91dC1jb250YWluZXIubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXI6IDFweCBkYXNoZWQgcmdiYSgxMjQsIDEyNCwgMTI0LCAwLjYpO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcbiAgbWFyZ2luOiAtMXB4O1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1jb250YWluZXIgKyAubGF5b3V0LWNvbnRhaW5lcjpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXItdG9wOiAwO1xufVxuLmxheW91dC1lZGl0b3I6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1jb250YWluZXIgKyAubGF5b3V0LWNvbnRhaW5lcjpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY2FudmFzICNkdW1teSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcm93LmxheW91dC1lbGVtZW50LWZvY3VzZWQ6bm90KC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0KSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiA+IC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xuICBib3JkZXItdG9wOiAxcHggZGFzaGVkIHJnYmEoMTI0LCAxMjQsIDEyNCwgMC42KSAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1yb3cubGF5b3V0LWVsZW1lbnQtZm9jdXNlZDpub3QoLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcbiAgbWFyZ2luLXRvcDogLTFweCAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1yb3cubGF5b3V0LWVsZW1lbnQtZm9jdXNlZDpub3QoLmxheW91dC1lbGVtZW50LWRyb3B0YXJnZXQpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuID4gLmxheW91dC1lbGVtZW50ICsgLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XG4gIGJvcmRlci1sZWZ0OiAwICFpbXBvcnRhbnQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXJvdy5sYXlvdXQtZWxlbWVudC1mb2N1c2VkOm5vdCgubGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldCkgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY2hpbGRyZW4gPiAubGF5b3V0LWVsZW1lbnQgKyAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xuICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbHVtbiA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMzA7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTAwJTtcbiAgY3Vyc29yOiBjb2wtcmVzaXplO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb2x1bW4gPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXItbGVmdCB7XG4gIGxlZnQ6IC02cHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbHVtbiA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhci1yaWdodCB7XG4gIHJpZ2h0OiAtNnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb2x1bW4ubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwge1xuICBtaW4taGVpZ2h0OiAxZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB7XG4gIHBhZGRpbmc6IDJweDtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAvKiB0aGlzIGNvbG9yIGlzIGp1c3QgYSBzdWdnZXN0aW9uIGFuZCBjYW4gYmUgY2hhbmdlZCBiYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBmZWVkYmFjayAqL1xuICAvKiB0aGlzIGFsc28gaGFzIGJpZGkgaW1wbGljYXRpb25zICovXG4gIC8qIHRoaXMgYWxzbyBoYXMgYmlkaSBpbXBsaWNhdGlvbnMgKi9cbiAgLyogTFRSLXNwZWNpZmljOiB1c2UgJ21hcmdpbi1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xuICAvKiBMVFItc3BlY2lmaWM6IHVzZSAncGFkZGluZy1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xuICAvKnRhYmxlW3J1bGVzPW5vbmUgaV0sIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSwgdGFibGVbcnVsZXM9cm93cyBpXSxcbnRhYmxlW3J1bGVzPWNvbHMgaV0sIHRhYmxlW3J1bGVzPWFsbCBpXSwgdGFibGVbZnJhbWU9dm9pZCBpXSxcbnRhYmxlW2ZyYW1lPWFib3ZlIGldLCB0YWJsZVtmcmFtZT1iZWxvdyBpXSwgdGFibGVbZnJhbWU9aHNpZGVzIGldLFxudGFibGVbZnJhbWU9bGhzIGldLCB0YWJsZVtmcmFtZT1yaHMgaV0sIHRhYmxlW2ZyYW1lPXZzaWRlcyBpXSxcbnRhYmxlW2ZyYW1lPWJveCBpXSwgdGFibGVbZnJhbWU9Ym9yZGVyIGldLFxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1ub25lIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0aGVhZCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRoZWFkID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdGhlYWQgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGJvZHkgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9cm93cyBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1hbGwgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRib2R5ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRmb290ID4gdHIgPiB0aCxcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Zm9vdCA+IHRyID4gdGgsXG50YWJsZVtydWxlcz1jb2xzIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdGZvb3QgPiB0ciA+IHRoLFxudGFibGVbcnVsZXM9YWxsIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1hbGwgaV0gPiB0Zm9vdCA+IHRyID4gdGgge1xuICAgIGJvcmRlci1jb2xvcjogYmxhY2s7XG59Ki9cbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgKixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgKiB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsb2NrcXVvdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsb2NrcXVvdGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNlbnRlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY2VudGVyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXYsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpdixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZmlndXJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ2NhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ2NhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZvb3Rlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZm9vdGVyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmb3JtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmb3JtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoZWFkZXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhlYWRlcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaHIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsZWdlbmQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxlZ2VuZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwbGFpbnRleHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcHJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHhtcCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ3VyZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGlzdGluZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwbGFpbnRleHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcHJlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHhtcCB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibG9ja3F1b3RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWd1cmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGZpZ3VyZSB7XG4gIG1hcmdpbi1sZWZ0OiA0MHB4O1xuICBtYXJnaW4tcmlnaHQ6IDQwcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3MsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFkZHJlc3Mge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxpc3RpbmcsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGxpc3RpbmcsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHBsYWludGV4dCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcGxhaW50ZXh0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBwcmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHByZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgeG1wLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB4bXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICB3aGl0ZS1zcGFjZTogcHJlO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjaXRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjaXRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZm4sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRmbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZW0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGVtLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB2YXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHZhciB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3Ryb25nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2RlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBrYmQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGtiZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2FtcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2FtcCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHR0IHtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYmlnLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBiaWcge1xuICBmb250LXNpemU6IGxhcmdlcjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc21hbGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNtYWxsIHtcbiAgZm9udC1zaXplOiBzbWFsbGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdWIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1YiB7XG4gIHZlcnRpY2FsLWFsaWduOiBzdWI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1cCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3VwIHtcbiAgdmVydGljYWwtYWxpZ246IHN1cGVyO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdWIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN1Yixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzdXAge1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBmb250LXNpemU6IHNtYWxsZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ1YnksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ1Ynkge1xuICBkaXNwbGF5OiBydWJ5O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCByYixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmIge1xuICBkaXNwbGF5OiBydWJ5LWJhc2U7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydCB7XG4gIGRpc3BsYXk6IHJ1YnktdGV4dDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZm9udC1zaXplOiA1MCU7XG4gIGZvbnQtdmFyaWFudC1lYXN0LWFzaWFuOiBydWJ5O1xuICB0ZXh0LWVtcGhhc2lzOiBub25lO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCByYmMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiYyB7XG4gIGRpc3BsYXk6IHJ1YnktYmFzZS1jb250YWluZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0Yyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnRjIHtcbiAgZGlzcGxheTogcnVieS10ZXh0LWNvbnRhaW5lcjtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnVieSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnVieSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcnQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJiYyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcmJjLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBydGMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHJ0YyB7XG4gIHVuaWNvZGUtYmlkaTogaXNvbGF0ZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmxpbmssXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDpsaW5rIHtcbiAgY29sb3I6ICMwMDAwRUU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDp2aXNpdGVkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6dmlzaXRlZCB7XG4gIGNvbG9yOiAjNTUxQThCO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6bGluayxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmxpbmssXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDp2aXNpdGVkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA6dmlzaXRlZCB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhOmxpbmtbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYTpsaW5rW3JlbH49aGVscF0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGE6dmlzaXRlZFtyZWx+PWhlbHBdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhOnZpc2l0ZWRbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYXJlYTpsaW5rW3JlbH49aGVscF0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFyZWE6bGlua1tyZWx+PWhlbHBdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhcmVhOnZpc2l0ZWRbcmVsfj1oZWxwXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYXJlYTp2aXNpdGVkW3JlbH49aGVscF0ge1xuICBjdXJzb3I6IGhlbHA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIDpmb2N1cyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgOmZvY3VzIHtcbiAgb3V0bGluZTogYXV0bztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbWFyayxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbWFyayB7XG4gIGJhY2tncm91bmQ6IHllbGxvdztcbiAgY29sb3I6IGJsYWNrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhYmJyW3RpdGxlXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYWJiclt0aXRsZV0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFjcm9ueW1bdGl0bGVdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhY3JvbnltW3RpdGxlXSB7XG4gIHRleHQtZGVjb3JhdGlvbjogZG90dGVkIHVuZGVybGluZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5zLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHUge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHMsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHN0cmlrZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc3RyaWtlIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJsaW5rLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBibGluayB7XG4gIHRleHQtZGVjb3JhdGlvbjogYmxpbms7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHE6OmJlZm9yZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcTo6YmVmb3JlIHtcbiAgY29udGVudDogb3Blbi1xdW90ZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgcTo6YWZ0ZXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHE6OmFmdGVyIHtcbiAgY29udGVudDogY2xvc2UtcXVvdGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJyOjpiZWZvcmUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJyOjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxBJztcbiAgd2hpdGUtc3BhY2U6IHByZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbm9icixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbm9iciB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHdicixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgd2JyIHtcbiAgY29udGVudDogJ1xcMjAwQic7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG5vYnIgd2JyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBub2JyIHdiciB7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFydGljbGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFydGljbGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGFzaWRlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBhc2lkZSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDEsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgxLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgzLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaDUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaGdyb3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoZ3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG5hdixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbmF2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzZWN0aW9uLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBzZWN0aW9uIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgxLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMSB7XG4gIG1hcmdpbi10b3A6IDAuNjdlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC42N2VtO1xuICBmb250LXNpemU6IDIuMDBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMiB7XG4gIG1hcmdpbi10b3A6IDAuODNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC44M2VtO1xuICBmb250LXNpemU6IDEuNTBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGgzLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoMyB7XG4gIG1hcmdpbi10b3A6IDEuMDBlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS4wMGVtO1xuICBmb250LXNpemU6IDEuMTdlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNCB7XG4gIG1hcmdpbi10b3A6IDEuMzNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS4zM2VtO1xuICBmb250LXNpemU6IDEuMDBlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg1LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNSB7XG4gIG1hcmdpbi10b3A6IDEuNjdlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS42N2VtO1xuICBmb250LXNpemU6IDAuODNlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGg2LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBoNiB7XG4gIG1hcmdpbi10b3A6IDIuMzNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMi4zM2VtO1xuICBmb250LXNpemU6IDAuNjdlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZHQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGR0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsaSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGkge1xuICBkaXNwbGF5OiBsaXN0LWl0ZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHtcbiAgbWFyZ2luLXRvcDogMWVtO1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkbCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGwgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgZGwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIGRsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGQge1xuICBtYXJnaW4tbGVmdDogNDBweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHtcbiAgcGFkZGluZy1sZWZ0OiA0MHB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wge1xuICBsaXN0LXN0eWxlLXR5cGU6IGRlY2ltYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwge1xuICBsaXN0LXN0eWxlLXR5cGU6IGRpc2M7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHVsIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBkaXIgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGRpciB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZGlyIHVsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIGRpciB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIG9sIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb2wgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCBkaXIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9sIHVsIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvbCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgZGlyIHVsLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBkaXIgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIG9sIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCBvbCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgb2wgdWwsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHVsIHVsIGRpcixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwgZGlyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB1bCB1bCB1bCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdWwgdWwgdWwge1xuICBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlIHtcbiAgZGlzcGxheTogdGFibGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNhcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNhcHRpb24ge1xuICBkaXNwbGF5OiB0YWJsZS1jYXB0aW9uO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sZ3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbGdyb3VwW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbGdyb3VwW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW4tZ3JvdXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGNvbCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW47XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aGVhZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWRbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWRbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keVtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keVtoaWRkZW5dIHtcbiAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGZvb3QsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1mb290ZXItZ3JvdXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHJbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHJbaGlkZGVuXSB7XG4gIGRpc3BsYXk6IHRhYmxlLXJvdztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cFtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xncm91cFtoaWRkZW5dLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBjb2xbaGlkZGVuXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgY29sW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRib2R5W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290W2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoW2hpZGRlbl0ge1xuICB2aXNpYmlsaXR5OiBjb2xsYXBzZTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXNwYWNpbmc6IDJweDtcbiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbiAgdGV4dC1pbmRlbnQ6IGluaXRpYWw7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoIHtcbiAgcGFkZGluZzogMXB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUgPiB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUgPiB0ciB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0cixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGgge1xuICB2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGFibGUsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRhYmxlLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0aCB7XG4gIGJvcmRlci1jb2xvcjogZ3JheTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGhlYWQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRoZWFkLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Ym9keSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGJvZHksXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRmb290LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0Zm9vdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdHIsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRyIHtcbiAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNlbGVjdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2VsZWN0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBvcHRpb24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9wdGlvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgb3B0Z3JvdXAsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIG9wdGdyb3VwLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBidXR0b24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGV4dGFyZWEsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHRleHRhcmVhLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBrZXlnZW4sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGtleWdlbiB7XG4gIHRleHQtaW5kZW50OiBpbml0aWFsO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCB0ZXh0YXJlYSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgdGV4dGFyZWEge1xuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBpbnB1dFt0eXBlPVwicmVzZXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHNlbGVjdCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgc2VsZWN0LFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBidXR0b24sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGJ1dHRvbixcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgYnV0dG9uIHtcbiAgcGFkZGluZzogMC4zZW0gMC41ZW07XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWNvbnRlbnQgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwIGhyLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBociB7XG4gIGNvbG9yOiBncmF5O1xuICBib3JkZXItc3R5bGU6IGluc2V0O1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgbWFyZ2luOiAwLjVlbSBhdXRvO1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBmaWVsZHNldCxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgZmllbGRzZXQge1xuICBtYXJnaW4tbGVmdDogMnB4O1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgYm9yZGVyOiBncm9vdmUgMnB4IFRocmVlREZhY2U7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgbGVnZW5kLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCBsZWdlbmQge1xuICBwYWRkaW5nLWxlZnQ6IDJweDtcbiAgcGFkZGluZy1yaWdodDogMnB4O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50ID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgLmxheW91dC1jb250ZW50LW1hcmt1cCA+ICo6Zmlyc3QtY2hpbGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gKjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtY29udGVudCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiAqOmxhc3QtY2hpbGQsXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LWh0bWwgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gKjpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xufVxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50LmxheW91dC1jb250ZW50LWltYWdlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gaW1nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1odG1sLmxheW91dC1jb250ZW50LWltYWdlID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gaW1nLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1jb250ZW50LmxheW91dC1jb250ZW50LXZlY3Rvci1pbWFnZSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb250ZW50LW1hcmt1cCA+IGltZyxcbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtaHRtbC5sYXlvdXQtY29udGVudC12ZWN0b3ItaW1hZ2UgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtY29udGVudC1tYXJrdXAgPiBpbWcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmxheW91dC1lZGl0b3IgLmltZy1yZXNwb25zaXZlLFxuLmxheW91dC1lZGl0b3IgLmltZy1yZXNwb25zaXZlIGltZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbmJvZHkgLmxheW91dC10b29sYm94LWl0ZW0ge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNWU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBwYWRkaW5nOiA5cHggMTJweDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG59XG5ib2R5IC5sYXlvdXQtdG9vbGJveC1pdGVtIGkge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxNnB4O1xuICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAxNHB4LzEgRm9udEF3ZXNvbWU7XG59XG5ib2R5IC5sYXlvdXQtdG9vbGJveC1pdGVtICsgLmxheW91dC10b29sYm94LWl0ZW0ge1xuICBtYXJnaW4tdG9wOiA0cHg7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyIHtcbiAgbWFyZ2luLWxlZnQ6IDEycHg7XG4gIHdpZHRoOiAyMThweDtcbiAgLXdlYmtpdC1mbGV4LXNocmluazogMDtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICAvKiBmb3JjaW5nIHRoZSB0b29sYm94IGhlaWdodCB0byBiZSBzbWFsbGVyIHRoYW4gdGhlIHZpZXdwb3J0IGhlaWdodFxuICAgICAgICAgICAgc28gaXQgaXMgYWx3YXlzIHZpc2libGUgYW5kIHNjcm9sbGFibGUqL1xuICBtYXgtaGVpZ2h0OiBjYWxjKDIwdmgpO1xuICBvdmVyZmxvdy14OiBjbGlwO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICAvKiBmb3JjaW5nIHRoZSB0b29sYm94IHRvIHN0YXkgc3RpY2tlZCBhdCB0aGUgdGhlIHRvcCBvZiBpdHMgY29udGFpbmVyICovXG4gIHBvc2l0aW9uOiAtd2Via2l0LXN0aWNreTtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgdG9wOiAwO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogMnB4O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMCA2cHggIzAwMDAwMDtcbiAgYm9yZGVyLXJhZGl1czogMXB4O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U0ZTVlNjtcbiAgd2lkdGg6IDIyMHB4O1xuICBtaW4taGVpZ2h0OiA0MDBweDtcbiAgcGFkZGluZzogNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmNGY1O1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveC5zdGlja3ktdG9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94LnN0aWNreS1ib3R0b20ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIHtcbiAgbWFyZ2luLXRvcDogMTJweDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIC5sYXlvdXQtdG9vbGJveC1ncm91cC1oZWFkaW5nIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAgLmxheW91dC10b29sYm94LWdyb3VwLWhlYWRpbmc6YmVmb3JlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMTBweDtcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XG4gIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb250ZW50OiBcIlxcZjBkN1wiO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAuY29sbGFwc2VkIC5sYXlvdXQtdG9vbGJveC1ncm91cC1oZWFkaW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMGRhXCI7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cC5jb2xsYXBzZWQgLmxheW91dC10b29sYm94LWl0ZW1zIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwIC5sYXlvdXQtdG9vbGJveC1zZWN0aW9uICsgLmxheW91dC10b29sYm94LXNlY3Rpb24ge1xuICBtYXJnaW4tdG9wOiA0cHg7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCAubGF5b3V0LXRvb2xib3gtaXRlbSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNGU1ZTY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIHBhZGRpbmc6IDlweCAxMnB4O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4ubGF5b3V0LWVkaXRvciA+IC5sYXlvdXQtdG9vbGJveC13cmFwcGVyID4gLmxheW91dC10b29sYm94IC5sYXlvdXQtdG9vbGJveC1ncm91cCAubGF5b3V0LXRvb2xib3gtaXRlbSBpIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMTZweDtcbiAgZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xufVxuLmxheW91dC1lZGl0b3IgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciA+IC5sYXlvdXQtdG9vbGJveCAubGF5b3V0LXRvb2xib3gtZ3JvdXAgLmxheW91dC10b29sYm94LWl0ZW0gKyAubGF5b3V0LXRvb2xib3gtaXRlbSB7XG4gIG1hcmdpbi10b3A6IDRweDtcbn1cbi5sYXlvdXQtZWRpdG9yID4gLmxheW91dC10b29sYm94LXdyYXBwZXIgPiAubGF5b3V0LXRvb2xib3ggLmxheW91dC10b29sYm94LWdyb3VwICsgLmxheW91dC10b29sYm94LWdyb3VwIHtcbiAgbWFyZ2luLXRvcDogNnB4O1xufVxuXG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW46IDA7XG4gIC1tb3otYm94LXNoYWRvdzogM3B4IDNweCAxMXB4IDAgcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDNweCAzcHggMTFweCAwIHJnYmEoNTAsIDUwLCA1MCwgMC41KTtcbiAgYm94LXNoYWRvdzogM3B4IDNweCAxMXB4IDAgcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTRlNWU2O1xuICBwYWRkaW5nOiAycHggMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNztcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgei1pbmRleDogMjA7XG4gIGNvbG9yOiAjN2M3YzdjO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIG1pbi13aWR0aDogMzAwcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwLndpZGUge1xuICB3aWR0aDogNjAwcHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtZmxleCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDJweCA1cHg7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtZmxleCAubGF5b3V0LXBvcHVwLWNvbHVtbiArIC5sYXlvdXQtcG9wdXAtY29sdW1uIHtcbiAgbWFyZ2luLWxlZnQ6IDRweDtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2JhKDEyOCwgMTI4LCAxMjgsIDAuMTUpO1xuICBwYWRkaW5nLWxlZnQ6IDRweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1pdGVtIHtcbiAgcGFkZGluZzogNHB4IDZweDtcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1sYWJlbCB7XG4gIGZvbnQtc2l6ZTogMC45ZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzdjN2M3Yztcbn1cbi5sYXlvdXQtZWRpdG9yIC5sYXlvdXQtcG9wdXAgLmxheW91dC1wb3B1cC1hY3Rpb246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmNGY1O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtaW5wdXQgaW5wdXRbdHlwZT0ndGV4dCddLFxuLmxheW91dC1lZGl0b3IgLmxheW91dC1wb3B1cCAubGF5b3V0LXBvcHVwLWlucHV0IHRleHRhcmVhIHtcbiAgd2lkdGg6IDEwMCU7XG59XG4ubGF5b3V0LWVkaXRvciAubGF5b3V0LXBvcHVwIC5sYXlvdXQtcG9wdXAtaW5wdXQgPiBsYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDAuOWVtO1xufVxuIiwi77u/QGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICAubGF5b3V0LWVsZW1lbnQge1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICBtYXJnaW4tdG9wOiAwO1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xyXG4gICAgICAgIHBhZGRpbmc6IDA7XHJcblxyXG4gICAgICAgIC8vIFdlIGRvbid0IGZ1Y2sgd2l0aCB0aGUgbGVmdCBtYXJnaW4gb2YgY29sdW1ucywgYmVjYXVzZSBCb290c3RyYXAgdXNlcyB0aGVzZSB0byByZW5kZXIgY29sdW1uIG9mZnNldHMuXHJcbiAgICAgICAgJjpub3QoLmxheW91dC1jb2x1bW4pIHtcclxuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgPiAubGF5b3V0LXBhbmVsIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7IC8vIFNob3duIG9ubHkgaW4gYWN0aXZlIG9yIGZvY3VzZWQgc3RhdGVzLlxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgICAgICAgICAgei1pbmRleDogMjA7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDI1cHg7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDZweDtcclxuICAgICAgICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI1cHg7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1wYW5lbC1pdGVtIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAyNXB4O1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDFweCA2cHggMDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtcGFuZWwtbGFiZWwge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZSAtIDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LXBhbmVsLWFjdGlvbiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTsgLy8gU2hvd24gb25seSBpbiBmb2N1c2VkIHN0YXRlLlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyOHB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1wYW5lbC1tYWluIHtcclxuICAgICAgICAgICAgICAgIHRvcDogLTI3cHg7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiAtMnB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFdoZW4gZHJhZ2dpbmcgZnJvbSB0b29sYm94LCBlbGVtZW50cyB3aWxsIGJlIGxpIHJhdGhlciB0aGFuIGRpdi5cclxuICAgIGxpLmxheW91dC1lbGVtZW50IHtcclxuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xyXG4gICAgfVxyXG5cclxuICAgICY6bm90KC5sYXlvdXQtZWRpdG9yLWRyYWdnaW5nKSB7XHJcblxyXG4gICAgICAgIC5sYXlvdXQtZWxlbWVudC1hY3RpdmUsIC5sYXlvdXQtZWxlbWVudC1mb2N1c2VkIHtcclxuICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAycHg7XHJcbiAgICAgICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogLTJweDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1lbGVtZW50LWFjdGl2ZSB7XHJcbiAgICAgICAgICAgIEBhY3RpdmUtaGlnaGxpZ2h0OiBmYWRlKCM2ODY4NjgsIDEwJSk7XHJcblxyXG4gICAgICAgICAgICBib3JkZXItY29sb3I6IEBhY3RpdmUtaGlnaGxpZ2h0O1xyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciA+IC5sYXlvdXQtcGFuZWwtbWFpbiB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jazsgLy8gVG8gcmV2ZWFsLlxyXG4gICAgICAgICAgICAgICAgei1pbmRleDogMzA7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAYWN0aXZlLWhpZ2hsaWdodDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1lbGVtZW50LWZvY3VzZWQge1xyXG4gICAgICAgICAgICBAZm9jdXNlZC1oaWdobGlnaHQ6ICM2NDg3MjE7XHJcbiAgICAgICAgICAgIEBmb2N1c2VkLXRleHQ6ICNmZWZlZmU7XHJcblxyXG4gICAgICAgICAgICBib3JkZXItY29sb3I6IEBmb2N1c2VkLWhpZ2hsaWdodDtcclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LXBhbmVsIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOyAvLyBUbyByZXZlYWwuXHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAZm9jdXNlZC1oaWdobGlnaHQ7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogQGZvY3VzZWQtdGV4dDtcclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtcGFuZWwtYWN0aW9uIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8vIFRvIHJldmVhbC5cclxuICAgICAgICAgICAgICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbihAZm9jdXNlZC1oaWdobGlnaHQsIDEwJSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAmLmRpc2FibGVkIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZmFkZShAZm9jdXNlZC10ZXh0LCA0MCUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAZm9jdXNlZC1oaWdobGlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICYuYWN0aXZlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGxpZ2h0ZW4oc2F0dXJhdGUoc3BpbihAZm9jdXNlZC1oaWdobGlnaHQsIC0xMCksIDEwMCUpLCAzMCUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKEBmb2N1c2VkLWhpZ2hsaWdodCwgNSUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKEBmb2N1c2VkLWhpZ2hsaWdodCwgMTAlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1lbGVtZW50LXNlbGVjdGVkIHtcclxuICAgICAgICAgICAgQHNlbGVjdGVkLWhpZ2hsaWdodDogIzY0ODcyMTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZmFkZShAc2VsZWN0ZWQtaGlnaGxpZ2h0LCA4JSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC51aS1zb3J0YWJsZS1wbGFjZWhvbGRlciB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgIH1cclxuXHJcbiAgICAubGF5b3V0LWVsZW1lbnQtZHJvcHRhcmdldCB7XHJcbiAgICAgICAgQGRyb3B0YXJnZXQtaGlnaGxpZ2h0OiAjNjQ4NzIxO1xyXG4gICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAxMnB4IDZweCBmYWRlKEBkcm9wdGFyZ2V0LWhpZ2hsaWdodCwgNTAlKTtcclxuXHJcbiAgICAgICAgLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHtcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7IC8vIFRvIHJldmVhbC5cclxuICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICBtaW4taGVpZ2h0OiBAZWxlbWVudC1taW4taGVpZ2h0IC0gMnB4O1xyXG4gICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgQGRyb3B0YXJnZXQtaGlnaGxpZ2h0ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGZhZGUoQGRyb3B0YXJnZXQtaGlnaGxpZ2h0LCAxNiUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBIENTUyBmaXggZm9yIG1lZGlhIGl0ZW0gZWxlbWVudHMuXHJcbiAgICAubWVkaWEtdGh1bWJuYWlsIHtcclxuICAgICAgICBpbWcge1xyXG4gICAgICAgICAgICBtYXgtd2lkdGg6MTAwJTtcclxuICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwJTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwi77u/QGltcG9ydCBcIlZhcmlhYmxlcy5sZXNzXCI7XHJcblxyXG4ubGF5b3V0LWVkaXRvciB7XHJcbiAgICAubGF5b3V0LWNvbnRhaW5lciB7XHJcblxyXG4gICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG5cclxuICAgICAgICAgICAgPiAubGF5b3V0LWNvbnRhaW5lci1jaGlsZHJlbi1wbGFjZWhvbGRlciB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogQGNvbnRhaW5lci1wYWRkaW5nIC0gMXB4O1xyXG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogQGVsZW1lbnQtbWluLWhlaWdodDtcclxuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBmYWRlKEBncmF5LXRleHQsIDQwJSk7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBAY29udGFpbmVyLXBhZGRpbmc7XHJcbiAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogQGZvbnQtc2l6ZSAtIDE7XHJcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XHJcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjY7XHJcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgID4gLmxheW91dC1jaGlsZHJlbiB7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBAY29udGFpbmVyLXBhZGRpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQWxsIGFkamFjZW50IG5vbi1jb250YWluZXIgY2hpbGRyZW4gbmVlZCBzb21lIHNwYWNlIGJldHdlZW4uLi5cclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWNvbnRhaW5lcikgKyAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogQGNvbnRlbnQtc3BhY2luZztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyAuLi4gZXhjZXB0IHdoZW4galF1ZXJ5IFVJIHNvcnRhYmxlIGhlbHBlciBpcyB0aGUgZmlyc3QgZWxlbWVudCAoYmVjYXVzZSB0aGF0IG9uZSBpcyBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYW5kIFwiZmxvYXRpbmdcIikuXHJcbiAgICAgICAgICAgICAgICA+IC51aS1zb3J0YWJsZS1oZWxwZXI6Zmlyc3QtY2hpbGQgKyAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgJi5sYXlvdXQtY29udGFpbmVyLWVtcHR5IHtcclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1jb250YWluZXItY2hpbGRyZW4tcGxhY2Vob2xkZXIge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7IC8vIFRvIHJldmVhbC5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA+IC5sYXlvdXQtY2hpbGRyZW4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgICAgICB0b3A6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJjpub3QoLmxheW91dC1lZGl0b3ItZHJhZ2dpbmcpIHtcclxuICAgICAgICAubGF5b3V0LWNvbnRhaW5lci5sYXlvdXQtZWxlbWVudC1mb2N1c2VkID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNoaWxkcmVuIHtcclxuICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQ6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBmYWRlKEBncmF5LXRleHQsIDYwJSk7XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAtMXB4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtY29udGFpbmVyICsgLmxheW91dC1jb250YWluZXI6bm90KC5sYXlvdXQtZWxlbWVudC1hY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGJvcmRlci10b3A6IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCLvu79AaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtY2FudmFzIHtcclxuICAgICAgICAjZHVtbXkgeyAvLyBPbmx5IGFkZGVkIGJlY2F1c2UgV0UgZG9lc24ndCBjb21waWxlIGlmIHRoZXJlIGFyZSBubyBydWxlcy5cclxuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCLvu79AaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtcm93IHtcclxuICAgICAgICAmLmxheW91dC1lbGVtZW50LWZvY3VzZWQ6bm90KC5sYXlvdXQtZWxlbWVudC1kcm9wdGFyZ2V0KSA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jaGlsZHJlbiB7XHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50Om5vdCgubGF5b3V0LWVsZW1lbnQtYWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wOiAxcHggZGFzaGVkIGZhZGUoQGdyYXktdGV4dCwgNjAlKSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgPiAubGF5b3V0LWVsZW1lbnQtd3JhcHBlciB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTFweCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtZWxlbWVudCArIC5sYXlvdXQtZWxlbWVudDpub3QoLmxheW91dC1lbGVtZW50LWFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDAgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCLvu79AaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtY29sdW1uIHtcclxuICAgICAgICA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyIHtcclxuICAgICAgICAgICAgPiAubGF5b3V0LWNvbHVtbi1yZXNpemUtYmFyIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAzMDtcclxuICAgICAgICAgICAgICAgIHRvcDogMDtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAxNnB4O1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yOiBjb2wtcmVzaXplO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXItbGVmdCB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiAtNnB4O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IC5sYXlvdXQtY29sdW1uLXJlc2l6ZS1iYXItcmlnaHQge1xyXG4gICAgICAgICAgICAgICAgcmlnaHQ6IC02cHg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICYubGF5b3V0LWVsZW1lbnQtZm9jdXNlZCA+IC5sYXlvdXQtZWxlbWVudC13cmFwcGVyID4gLmxheW91dC1jb2x1bW4tcmVzaXplLWJhciB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCLvu79AaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuQGltcG9ydCBcIlJlc2V0Lmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtY29udGVudCwgLmxheW91dC1odG1sIHtcclxuICAgICAgICBtaW4taGVpZ2h0OiAxZW07XHJcblxyXG4gICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIge1xyXG4gICAgICAgICAgICAubGF5b3V0LWNvbnRlbnQtbWFya3VwIHtcclxuXHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAycHg7XHJcbiAgICAgICAgICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47XHJcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRvIEhUTUw1IFczQyBzdGFuZGFyZCBkZWZhdWx0IHN0eWxpbmcgd2l0aGluIGNvbnRlbnQuXHJcbiAgICAgICAgICAgICAgICAucmVzZXQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICA+ICo6Zmlyc3QtY2hpbGQge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsgLy8gSW1wb3J0YW50IGJlY2F1c2Ugc2l0ZS5jc3Mgb2YgdGhlIGFkbWluIHRoZW1lIHN0eWxlcyBoZWFkaW5nIG1hcmdpbnMgd2l0aCBhIHZlcnkgaGlnaCBzcGVjaWZpY2l0eS5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA+ICo6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmLmxheW91dC1jb250ZW50LWltYWdlLCAmLmxheW91dC1jb250ZW50LXZlY3Rvci1pbWFnZSB7XHJcbiAgICAgICAgICAgID4gLmxheW91dC1lbGVtZW50LXdyYXBwZXIgPiAubGF5b3V0LWNvbnRlbnQtbWFya3VwID4gaW1nIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLmltZy1yZXNwb25zaXZlLCAuaW1nLXJlc3BvbnNpdmUgaW1nIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgfVxyXG59XHJcbiIsIu+7vy5yZXNldCgpIHtcclxuXHJcbiAgICAqIHtcclxuICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcclxuICAgIH1cclxuXHJcbiAgICBhZGRyZXNzLCBibG9ja3F1b3RlLCBjZW50ZXIsIGRpdiwgZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGZvcm0sXHJcbiAgICBoZWFkZXIsIGhyLCBsZWdlbmQsIGxpc3RpbmcsIHAsIHBsYWludGV4dCwgcHJlLCB4bXAge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgfVxyXG5cclxuICAgIGJsb2NrcXVvdGUsIGZpZ3VyZSwgbGlzdGluZywgcCwgcGxhaW50ZXh0LCBwcmUsIHhtcCB7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMWVtO1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTtcclxuICAgIH1cclxuXHJcbiAgICBibG9ja3F1b3RlLCBmaWd1cmUge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiA0MHB4O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogNDBweDtcclxuICAgIH1cclxuXHJcbiAgICBhZGRyZXNzIHtcclxuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XHJcbiAgICB9XHJcblxyXG4gICAgbGlzdGluZywgcGxhaW50ZXh0LCBwcmUsIHhtcCB7XHJcbiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogcHJlO1xyXG4gICAgfVxyXG5cclxuICAgIGNpdGUsIGRmbiwgZW0sIGksIHZhciB7XHJcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xyXG4gICAgfVxyXG5cclxuICAgIGIsIHN0cm9uZyB7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcclxuICAgIH1cclxuXHJcbiAgICBjb2RlLCBrYmQsIHNhbXAsIHR0IHtcclxuICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xyXG4gICAgfVxyXG5cclxuICAgIGJpZyB7XHJcbiAgICAgICAgZm9udC1zaXplOiBsYXJnZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc21hbGwge1xyXG4gICAgICAgIGZvbnQtc2l6ZTogc21hbGxlcjtcclxuICAgIH1cclxuXHJcbiAgICBzdWIge1xyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBzdWI7XHJcbiAgICB9XHJcblxyXG4gICAgc3VwIHtcclxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogc3VwZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc3ViLCBzdXAge1xyXG4gICAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XHJcbiAgICAgICAgZm9udC1zaXplOiBzbWFsbGVyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBydWJ5IHtcclxuICAgICAgICBkaXNwbGF5OiBydWJ5O1xyXG4gICAgfVxyXG5cclxuICAgIHJiIHtcclxuICAgICAgICBkaXNwbGF5OiBydWJ5LWJhc2U7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgIH1cclxuXHJcbiAgICBydCB7XHJcbiAgICAgICAgZGlzcGxheTogcnVieS10ZXh0O1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgICAgZm9udC1zaXplOiA1MCU7XHJcbiAgICAgICAgZm9udC12YXJpYW50LWVhc3QtYXNpYW46IHJ1Ynk7XHJcbiAgICAgICAgdGV4dC1lbXBoYXNpczogbm9uZTtcclxuICAgIH1cclxuXHJcbiAgICByYmMge1xyXG4gICAgICAgIGRpc3BsYXk6IHJ1YnktYmFzZS1jb250YWluZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcnRjIHtcclxuICAgICAgICBkaXNwbGF5OiBydWJ5LXRleHQtY29udGFpbmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHJ1YnksIHJiLCBydCwgcmJjLCBydGMge1xyXG4gICAgICAgIHVuaWNvZGUtYmlkaTogaXNvbGF0ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgOmxpbmsge1xyXG4gICAgICAgIGNvbG9yOiAjMDAwMEVFO1xyXG4gICAgfVxyXG5cclxuICAgIDp2aXNpdGVkIHtcclxuICAgICAgICBjb2xvcjogIzU1MUE4QjtcclxuICAgIH1cclxuXHJcbiAgICA6bGluaywgOnZpc2l0ZWQge1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gICAgfVxyXG5cclxuICAgIGE6bGlua1tyZWx+PWhlbHBdLCBhOnZpc2l0ZWRbcmVsfj1oZWxwXSxcclxuICAgIGFyZWE6bGlua1tyZWx+PWhlbHBdLCBhcmVhOnZpc2l0ZWRbcmVsfj1oZWxwXSB7XHJcbiAgICAgICAgY3Vyc29yOiBoZWxwO1xyXG4gICAgfVxyXG5cclxuICAgIDpmb2N1cyB7XHJcbiAgICAgICAgb3V0bGluZTogYXV0bztcclxuICAgIH1cclxuXHJcbiAgICBtYXJrIHtcclxuICAgICAgICBiYWNrZ3JvdW5kOiB5ZWxsb3c7XHJcbiAgICAgICAgY29sb3I6IGJsYWNrO1xyXG4gICAgfVxyXG4gICAgLyogdGhpcyBjb2xvciBpcyBqdXN0IGEgc3VnZ2VzdGlvbiBhbmQgY2FuIGJlIGNoYW5nZWQgYmFzZWQgb24gaW1wbGVtZW50YXRpb24gZmVlZGJhY2sgKi9cclxuICAgIGFiYnJbdGl0bGVdLCBhY3JvbnltW3RpdGxlXSB7XHJcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBkb3R0ZWQgdW5kZXJsaW5lO1xyXG4gICAgfVxyXG5cclxuICAgIGlucywgdSB7XHJcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsLCBzLCBzdHJpa2Uge1xyXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1xyXG4gICAgfVxyXG5cclxuICAgIGJsaW5rIHtcclxuICAgICAgICB0ZXh0LWRlY29yYXRpb246IGJsaW5rO1xyXG4gICAgfVxyXG5cclxuICAgIHE6OmJlZm9yZSB7XHJcbiAgICAgICAgY29udGVudDogb3Blbi1xdW90ZTtcclxuICAgIH1cclxuXHJcbiAgICBxOjphZnRlciB7XHJcbiAgICAgICAgY29udGVudDogY2xvc2UtcXVvdGU7XHJcbiAgICB9XHJcblxyXG4gICAgYnI6OmJlZm9yZSB7XHJcbiAgICAgICAgY29udGVudDogJ1xcQSc7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTtcclxuICAgIH1cclxuICAgIC8qIHRoaXMgYWxzbyBoYXMgYmlkaSBpbXBsaWNhdGlvbnMgKi9cclxuICAgIG5vYnIge1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICB9XHJcblxyXG4gICAgd2JyIHtcclxuICAgICAgICBjb250ZW50OiAnXFwyMDBCJztcclxuICAgIH1cclxuICAgIC8qIHRoaXMgYWxzbyBoYXMgYmlkaSBpbXBsaWNhdGlvbnMgKi9cclxuICAgIG5vYnIgd2JyIHtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xyXG4gICAgfVxyXG5cclxuICAgIGFydGljbGUsIGFzaWRlLCBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBoZ3JvdXAsIG5hdiwgc2VjdGlvbiB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICB9XHJcblxyXG4gICAgaDEge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDAuNjdlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjY3ZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAyLjAwZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgaDIge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDAuODNlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjgzZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAxLjUwZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgaDMge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDEuMDBlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjAwZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAxLjE3ZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgaDQge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDEuMzNlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjMzZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAxLjAwZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgaDUge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDEuNjdlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjY3ZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAwLjgzZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgaDYge1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDIuMzNlbTtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAyLjMzZW07XHJcbiAgICAgICAgZm9udC1zaXplOiAwLjY3ZW07XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgZGlyLCBkZCwgZGwsIGR0LCBvbCwgdWwge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgfVxyXG5cclxuICAgIGxpIHtcclxuICAgICAgICBkaXNwbGF5OiBsaXN0LWl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgZGlyLCBkbCwgb2wsIHVsIHtcclxuICAgICAgICBtYXJnaW4tdG9wOiAxZW07XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMWVtO1xyXG4gICAgfVxyXG5cclxuICAgICAgICBkaXIgZGlyLCBkaXIgZGwsIGRpciBvbCwgZGlyIHVsLFxyXG4gICAgICAgIGRsIGRpciwgZGwgZGwsIGRsIG9sLCBkbCB1bCxcclxuICAgICAgICBvbCBkaXIsIG9sIGRsLCBvbCBvbCwgb2wgdWwsXHJcbiAgICAgICAgdWwgZGlyLCB1bCBkbCwgdWwgb2wsIHVsIHVsIHtcclxuICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcclxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgZGQge1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiA0MHB4O1xyXG4gICAgfVxyXG4gICAgLyogTFRSLXNwZWNpZmljOiB1c2UgJ21hcmdpbi1yaWdodCcgZm9yIHJ0bCBlbGVtZW50cyAqL1xyXG4gICAgZGlyLCBvbCwgdWwge1xyXG4gICAgICAgIHBhZGRpbmctbGVmdDogNDBweDtcclxuICAgIH1cclxuICAgIC8qIExUUi1zcGVjaWZpYzogdXNlICdwYWRkaW5nLXJpZ2h0JyBmb3IgcnRsIGVsZW1lbnRzICovXHJcbiAgICBvbCB7XHJcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsO1xyXG4gICAgfVxyXG5cclxuICAgIGRpciwgdWwge1xyXG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcclxuICAgIH1cclxuXHJcbiAgICAgICAgZGlyIGRpciwgZGlyIHVsLFxyXG4gICAgICAgIG9sIGRpciwgb2wgdWwsXHJcbiAgICAgICAgdWwgZGlyLCB1bCB1bCB7XHJcbiAgICAgICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogY2lyY2xlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGRpciBkaXIgZGlyLCBkaXIgZGlyIHVsLFxyXG4gICAgICAgICAgICBkaXIgb2wgZGlyLCBkaXIgb2wgdWwsXHJcbiAgICAgICAgICAgIGRpciB1bCBkaXIsIGRpciB1bCB1bCxcclxuICAgICAgICAgICAgb2wgZGlyIGRpciwgb2wgZGlyIHVsLFxyXG4gICAgICAgICAgICBvbCBvbCBkaXIsIG9sIG9sIHVsLFxyXG4gICAgICAgICAgICBvbCB1bCBkaXIsIG9sIHVsIHVsLFxyXG4gICAgICAgICAgICB1bCBkaXIgZGlyLCB1bCBkaXIgdWwsXHJcbiAgICAgICAgICAgIHVsIG9sIGRpciwgdWwgb2wgdWwsXHJcbiAgICAgICAgICAgIHVsIHVsIGRpciwgdWwgdWwgdWwge1xyXG4gICAgICAgICAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBzcXVhcmU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICB0YWJsZSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgY2FwdGlvbiB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtY2FwdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjb2xncm91cCwgY29sZ3JvdXBbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtY29sdW1uLWdyb3VwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbCwgY29sW2hpZGRlbl0ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWNvbHVtbjtcclxuICAgIH1cclxuXHJcbiAgICB0aGVhZCwgdGhlYWRbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwO1xyXG4gICAgfVxyXG5cclxuICAgIHRib2R5LCB0Ym9keVtoaWRkZW5dIHtcclxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgdGZvb3QsIHRmb290W2hpZGRlbl0ge1xyXG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWZvb3Rlci1ncm91cDtcclxuICAgIH1cclxuXHJcbiAgICB0ciwgdHJbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtcm93O1xyXG4gICAgfVxyXG5cclxuICAgIHRkLCB0aCwgdGRbaGlkZGVuXSwgdGhbaGlkZGVuXSB7XHJcbiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcclxuICAgIH1cclxuXHJcbiAgICAgICAgY29sZ3JvdXBbaGlkZGVuXSwgY29sW2hpZGRlbl0sIHRoZWFkW2hpZGRlbl0sIHRib2R5W2hpZGRlbl0sXHJcbiAgICAgICAgdGZvb3RbaGlkZGVuXSwgdHJbaGlkZGVuXSwgdGRbaGlkZGVuXSwgdGhbaGlkZGVuXSB7XHJcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGNvbGxhcHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB0YWJsZSB7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICBib3JkZXItc3BhY2luZzogMnB4O1xyXG4gICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XHJcbiAgICAgICAgdGV4dC1pbmRlbnQ6IGluaXRpYWw7XHJcbiAgICB9XHJcblxyXG4gICAgdGQsIHRoIHtcclxuICAgICAgICBwYWRkaW5nOiAxcHg7XHJcbiAgICB9XHJcblxyXG4gICAgdGgge1xyXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoZWFkLCB0Ym9keSwgdGZvb3QsIHRhYmxlID4gdHIge1xyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XHJcbiAgICB9XHJcblxyXG4gICAgdHIsIHRkLCB0aCB7XHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IGluaGVyaXQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGFibGUsIHRkLCB0aCB7XHJcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBncmF5O1xyXG4gICAgfVxyXG5cclxuICAgIHRoZWFkLCB0Ym9keSwgdGZvb3QsIHRyIHtcclxuICAgICAgICBib3JkZXItY29sb3I6IGluaGVyaXQ7XHJcbiAgICB9XHJcbiAgICAvKnRhYmxlW3J1bGVzPW5vbmUgaV0sIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSwgdGFibGVbcnVsZXM9cm93cyBpXSxcclxudGFibGVbcnVsZXM9Y29scyBpXSwgdGFibGVbcnVsZXM9YWxsIGldLCB0YWJsZVtmcmFtZT12b2lkIGldLFxyXG50YWJsZVtmcmFtZT1hYm92ZSBpXSwgdGFibGVbZnJhbWU9YmVsb3cgaV0sIHRhYmxlW2ZyYW1lPWhzaWRlcyBpXSxcclxudGFibGVbZnJhbWU9bGhzIGldLCB0YWJsZVtmcmFtZT1yaHMgaV0sIHRhYmxlW2ZyYW1lPXZzaWRlcyBpXSxcclxudGFibGVbZnJhbWU9Ym94IGldLCB0YWJsZVtmcmFtZT1ib3JkZXIgaV0sXHJcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1jb2xzIGldID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0aGVhZCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPW5vbmUgaV0gPiB0aGVhZCA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRoZWFkID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGhlYWQgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1yb3dzIGldID4gdGhlYWQgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1jb2xzIGldID4gdGhlYWQgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1jb2xzIGldID4gdGhlYWQgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1hbGwgaV0gPiB0aGVhZCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWFsbCBpXSA+IHRoZWFkID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9bm9uZSBpXSA+IHRib2R5ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Z3JvdXBzIGldID4gdGJvZHkgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Ym9keSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPXJvd3MgaV0gPiB0Ym9keSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWNvbHMgaV0gPiB0Ym9keSA+IHRyID4gdGgsXHJcbnRhYmxlW3J1bGVzPWFsbCBpXSA+IHRib2R5ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9YWxsIGldID4gdGJvZHkgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1ub25lIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1ub25lIGldID4gdGZvb3QgPiB0ciA+IHRoLFxyXG50YWJsZVtydWxlcz1ncm91cHMgaV0gPiB0Zm9vdCA+IHRyID4gdGQsIHRhYmxlW3J1bGVzPWdyb3VwcyBpXSA+IHRmb290ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9cm93cyBpXSA+IHRmb290ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9cm93cyBpXSA+IHRmb290ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9Y29scyBpXSA+IHRmb290ID4gdHIgPiB0ZCwgdGFibGVbcnVsZXM9Y29scyBpXSA+IHRmb290ID4gdHIgPiB0aCxcclxudGFibGVbcnVsZXM9YWxsIGldID4gdGZvb3QgPiB0ciA+IHRkLCB0YWJsZVtydWxlcz1hbGwgaV0gPiB0Zm9vdCA+IHRyID4gdGgge1xyXG4gICAgYm9yZGVyLWNvbG9yOiBibGFjaztcclxufSovXHJcbiAgICBpbnB1dCwgc2VsZWN0LCBvcHRpb24sIG9wdGdyb3VwLCBidXR0b24sIHRleHRhcmVhLCBrZXlnZW4ge1xyXG4gICAgICAgIHRleHQtaW5kZW50OiBpbml0aWFsO1xyXG4gICAgfVxyXG5cclxuICAgIHRleHRhcmVhIHtcclxuICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XHJcbiAgICB9XHJcblxyXG4gICAgaW5wdXRbdHlwZT1cInJhZGlvXCJdLCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sIGlucHV0W3R5cGU9XCJyZXNldFwiXSwgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSxcclxuICAgIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sIHNlbGVjdCwgYnV0dG9uIHtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgfVxyXG5cclxuICAgIGlucHV0W3R5cGU9XCJidXR0b25cIl0sIGJ1dHRvbiB7XHJcbiAgICAgICAgcGFkZGluZzogMC4zZW0gMC41ZW07XHJcbiAgICB9XHJcblxyXG4gICAgaHIge1xyXG4gICAgICAgIGNvbG9yOiBncmF5O1xyXG4gICAgICAgIGJvcmRlci1zdHlsZTogaW5zZXQ7XHJcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XHJcbiAgICAgICAgbWFyZ2luOiAwLjVlbSBhdXRvO1xyXG4gICAgfVxyXG5cclxuICAgIGZpZWxkc2V0IHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogMnB4O1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMnB4O1xyXG4gICAgICAgIGJvcmRlcjogZ3Jvb3ZlIDJweCBUaHJlZURGYWNlO1xyXG4gICAgICAgIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcclxuICAgIH1cclxuXHJcbiAgICBsZWdlbmQge1xyXG4gICAgICAgIHBhZGRpbmctbGVmdDogMnB4O1xyXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDJweDtcclxuICAgIH1cclxufVxyXG4iLCLvu79AaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbmJvZHkge1xyXG4gICAgLmxheW91dC10b29sYm94LWl0ZW0ge1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBncmF5LWJvcmRlcjtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG4gICAgICAgIHBhZGRpbmc6IChAY29udGFpbmVyLXBhZGRpbmcgLSAzKSBAY29udGFpbmVyLXBhZGRpbmc7XHJcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xyXG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcclxuXHJcbiAgICAgICAgaSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgICAgd2lkdGg6IDE2cHg7XHJcbiAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICsgLmxheW91dC10b29sYm94LWl0ZW0ge1xyXG4gICAgICAgICAgICBtYXJnaW4tdG9wOiBAY29udGFpbmVyLXBhZGRpbmcgLyAzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLmxheW91dC1lZGl0b3Ige1xyXG4gICAgPiAubGF5b3V0LXRvb2xib3gtd3JhcHBlciB7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IEBjb250YWluZXItcGFkZGluZztcclxuICAgICAgICB3aWR0aDogMjE4cHg7XHJcbiAgICAgICAgLXdlYmtpdC1mbGV4LXNocmluazogMDtcclxuICAgICAgICAtbXMtZmxleC1uZWdhdGl2ZTogMDtcclxuICAgICAgICBmbGV4LXNocmluazogMDtcclxuICAgICAgICAvKiBmb3JjaW5nIHRoZSB0b29sYm94IGhlaWdodCB0byBiZSBzbWFsbGVyIHRoYW4gdGhlIHZpZXdwb3J0IGhlaWdodFxyXG4gICAgICAgICAgICBzbyBpdCBpcyBhbHdheXMgdmlzaWJsZSBhbmQgc2Nyb2xsYWJsZSovXHJcbiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDgwcHgpO1xyXG4gICAgICAgIG92ZXJmbG93LXg6IGNsaXA7XHJcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcclxuICAgICAgICAvKiBmb3JjaW5nIHRoZSB0b29sYm94IHRvIHN0YXkgc3RpY2tlZCBhdCB0aGUgdGhlIHRvcCBvZiBpdHMgY29udGFpbmVyICovXHJcbiAgICAgICAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5O1xyXG4gICAgICAgIHBvc2l0aW9uOiBzdGlja3k7XHJcbiAgICAgICAgdG9wOiAwO1xyXG5cclxuICAgICAgICAmOjotd2Via2l0LXNjcm9sbGJhciB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAycHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XHJcbiAgICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDZweCByZ2IoMCwgMCwgMCwgLjMpO1xyXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwwLDAsMC4zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgID4gLmxheW91dC10b29sYm94IHtcclxuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgQGdyYXktYm9yZGVyO1xyXG4gICAgICAgICAgICB3aWR0aDogMjIwcHg7XHJcbiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDQwMHB4O1xyXG4gICAgICAgICAgICBwYWRkaW5nOiBAY29udGFpbmVyLXBhZGRpbmcgLyAyO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAZ3JheS1iZztcclxuXHJcbiAgICAgICAgICAgICYuc3RpY2t5LXRvcCB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICAgICAgICAgICAgICB0b3A6IDA7XHJcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgJi5zdGlja3ktYm90dG9tIHtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLmxheW91dC10b29sYm94LWdyb3VwIHtcclxuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IEBjb250YWluZXItcGFkZGluZztcclxuXHJcbiAgICAgICAgICAgICAgICAubGF5b3V0LXRvb2xib3gtZ3JvdXAtaGVhZGluZyB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogQGNvbnRhaW5lci1wYWRkaW5nIC8gMztcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTBweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiBAY29udGFpbmVyLXBhZGRpbmcgLyAzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAxNHB4LzEgRm9udEF3ZXNvbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwZDdcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJi5jb2xsYXBzZWQge1xyXG4gICAgICAgICAgICAgICAgICAgIC5sYXlvdXQtdG9vbGJveC1ncm91cC1oZWFkaW5nOmJlZm9yZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMGRhXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAubGF5b3V0LXRvb2xib3gtaXRlbXMge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAubGF5b3V0LXRvb2xib3gtc2VjdGlvbiArIC5sYXlvdXQtdG9vbGJveC1zZWN0aW9uIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiBAY29udGFpbmVyLXBhZGRpbmcgLyAzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC5sYXlvdXQtdG9vbGJveC1pdGVtIHtcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBAZ3JheS1ib3JkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAoQGNvbnRhaW5lci1wYWRkaW5nIC0gMykgQGNvbnRhaW5lci1wYWRkaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDE2cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICsgLmxheW91dC10b29sYm94LWl0ZW0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiBAY29udGFpbmVyLXBhZGRpbmcgLyAzO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICArIC5sYXlvdXQtdG9vbGJveC1ncm91cCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogQGNvbnRhaW5lci1wYWRkaW5nIC8gMjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCLvu79AaW1wb3J0IFwiVmFyaWFibGVzLmxlc3NcIjtcclxuXHJcbi5sYXlvdXQtZWRpdG9yIHtcclxuICAgIC5sYXlvdXQtcG9wdXAge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IC8vIFNob3duIG9ubHkgaW4gYWN0aXZlIG9yIGZvY3VzZWQgc3RhdGVzLlxyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgLW1vei1ib3gtc2hhZG93OiAzcHggM3B4IDExcHggMCByZ2JhKDUwLCA1MCwgNTAsIDAuNSk7XHJcbiAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAzcHggM3B4IDExcHggMCByZ2JhKDUwLCA1MCwgNTAsIDAuNSk7XHJcbiAgICAgICAgYm94LXNoYWRvdzogM3B4IDNweCAxMXB4IDAgcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xyXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIEBncmF5LWJvcmRlcjtcclxuICAgICAgICBwYWRkaW5nOiAycHggMDtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xyXG4gICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XHJcbiAgICAgICAgei1pbmRleDogMjA7XHJcbiAgICAgICAgY29sb3I6IEBncmF5LXRleHQ7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XHJcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xyXG4gICAgICAgIG1pbi13aWR0aDogMzAwcHg7XHJcblxyXG4gICAgICAgICYud2lkZSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiA2MDBweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtcG9wdXAtZmxleCB7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDJweCA1cHg7XHJcblxyXG4gICAgICAgICAgICAubGF5b3V0LXBvcHVwLWNvbHVtbiArIC5sYXlvdXQtcG9wdXAtY29sdW1uIHtcclxuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7XHJcbiAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGZhZGUoZ3JheSwgMTUlKTtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNHB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubGF5b3V0LXBvcHVwLWl0ZW0ge1xyXG4gICAgICAgICAgICBwYWRkaW5nOiA0cHggNnB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmxheW91dC1wb3B1cC1sYWJlbCB7XHJcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45ZW07XHJcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgICAgICAgICBjb2xvcjogQGdyYXktdGV4dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtcG9wdXAtYWN0aW9uOmhvdmVyIHtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGdyYXktYmc7XHJcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5sYXlvdXQtcG9wdXAtaW5wdXQge1xyXG4gICAgICAgICAgICBpbnB1dFt0eXBlPSd0ZXh0J10sIHRleHRhcmVhIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA+IGxhYmVsIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjllbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0= */ diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css index 56beaf64572..fc5b2122f1f 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css @@ -1 +1 @@ -body .layout-toolbox-item{border:1px solid #e4e5e6;background-color:#fff;padding:9px 12px;cursor:default;list-style-type:none}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item i,body .layout-toolbox-item i{display:inline-block;width:16px;font:14px/1 FontAwesome}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item+.layout-toolbox-item,.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-section+.layout-toolbox-section,body .layout-toolbox-item+.layout-toolbox-item{margin-top:4px}.layout-editor-toolbar{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;position:relative;top:10px}.layout-editor .layout-container>.layout-element-wrapper.layout-container-empty>.layout-container-children-placeholder,.layout-editor-toolbar .layout-editor-toolbar-group{display:-webkit-flex;display:-ms-flexbox;display:flex}.layout-editor-toolbar .layout-editor-toolbar-group>li+li{margin-left:12px}.layout-editor{display:-webkit-flex;display:-ms-flexbox;display:flex;margin-top:1em;font-size:14px;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.layout-editor>.layout-canvas-wrapper{-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;background-color:#f3f4f5;border:1px solid #e4e5e6}.layout-editor>.layout-canvas-wrapper>.layout-toolbar-container{display:none;margin:12px 12px 0;min-height:71px}.layout-editor>.layout-canvas-wrapper>.layout-toolbar-container>.mce-panel{width:100%!important}.layout-editor>.layout-canvas-wrapper .layout-content>.layout-element-wrapper .layout-content-markup>.layout-placeholder{border:1px dashed #ccc;padding:.2em .4em;background:#e8e8e8}.layout-editor .layout-snippet{background:#e8e8e8}.layout-editor .layout-canvas #dummy,.layout-editor .ui-sortable-placeholder,.layout-editor-help-dialog,.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-items{display:none}.layout-editor-help-dialog .help-row:after,.layout-editor-help-dialog .help-row:before{content:" ";display:table}.layout-editor-help-dialog .help-row:after{clear:both}.layout-editor-help-dialog .help-row>.help-column-full,.layout-editor-help-dialog .help-row>.help-column-half{margin:.5em 0}.layout-editor-help-dialog .help-row>.help-column-half{box-sizing:border-box;float:left;width:50%}.layout-editor-help-dialog .help-row>.help-column-half:nth-child(2n){padding-right:10px;clear:left}.layout-editor-help-dialog .help-row+.help-row{margin-top:1em}.layout-editor-help-dialog code{border-radius:4px;background-color:#f3f4f5;padding:2px 4px;font-family:monospace}.layout-editor-help-dialog p{margin-bottom:.5em;line-height:1.6em}.layout-editor-help-dialog table>tbody>tr>td:first-child{padding-right:10px}.layout-editor .layout-element{position:relative;margin-top:0;margin-right:0;margin-bottom:0;padding:0}.layout-editor .layout-element:not(.layout-column){margin-left:0}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel{display:none;position:absolute;margin:0;z-index:20;height:25px;padding:0 6px;list-style:none;white-space:nowrap;line-height:25px;vertical-align:middle}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-item{display:inline-block;height:25px;padding:1px 6px 0}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-label{font-size:13px}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-action{display:none;width:28px;cursor:pointer;text-align:center}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel-main{top:-27px;left:-2px}.layout-editor li.layout-element{list-style:none}.layout-editor:not(.layout-editor-dragging) .layout-element-active,.layout-editor:not(.layout-editor-dragging) .layout-element-focused{border-width:2px;border-style:solid}.layout-editor:not(.layout-editor-dragging) .layout-element-active>.layout-element-wrapper,.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper{margin:-2px}.layout-editor:not(.layout-editor-dragging) .layout-element-active{border-color:rgba(104,104,104,.1)}.layout-editor:not(.layout-editor-dragging) .layout-element-active>.layout-element-wrapper>.layout-panel-main{display:block;z-index:30;background-color:rgba(104,104,104,.1)}.layout-editor:not(.layout-editor-dragging) .layout-element-focused{border-color:#648721}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel{display:block;background-color:#648721;color:#fefefe}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action{display:inline-block}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.active:hover,.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action:hover{background-color:#82b02b}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.disabled{cursor:default;color:rgba(254,254,254,.4)}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.disabled:hover{background-color:#648721}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.active{color:#deff42;background-color:#739b26}.layout-editor:not(.layout-editor-dragging) .layout-element-selected{background-color:rgba(100,135,33,.08)}.layout-editor .layout-element-droptarget{box-shadow:inset 0 0 12px 6px rgba(100,135,33,.5)}.layout-editor .layout-element-droptarget .ui-sortable-placeholder{display:block;visibility:visible!important;min-height:78px;border:2px dashed #648721!important;background-color:rgba(100,135,33,.16)}.layout-editor .media-thumbnail img{max-width:100%;max-height:100%}.layout-editor .layout-container>.layout-element-wrapper>.layout-container-children-placeholder{display:none;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin:11px;min-height:80px;border:1px dashed rgba(124,124,124,.4);border-radius:4px;padding:12px;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;font-size:13px;font-style:italic;opacity:.6;text-align:center}.layout-editor .layout-container>.layout-element-wrapper>.layout-children{padding:12px}.layout-editor .layout-container>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-container)+.layout-element:not(.layout-container),.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group{margin-top:12px}.layout-editor .layout-container>.layout-element-wrapper>.layout-children>.ui-sortable-helper:first-child+.layout-element:not(.layout-container),.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-container+.layout-container:not(.layout-element-active)>.layout-element-wrapper{margin-top:0}.layout-editor .layout-container>.layout-element-wrapper.layout-container-empty>.layout-children{position:absolute;top:0;right:0;bottom:0;left:0}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active){border:1px dashed rgba(124,124,124,.6)}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin:-1px}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-container+.layout-container:not(.layout-element-active){border-top:0}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active){border-top:1px dashed rgba(124,124,124,.6)!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin-top:-1px!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element+.layout-element:not(.layout-element-active){border-left:0!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element+.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin-left:0!important}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar{display:none;position:absolute;z-index:30;top:0;width:16px;height:100%;cursor:col-resize}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar-left{left:-6px}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar-right{right:-6px}.layout-editor .layout-column.layout-element-focused>.layout-element-wrapper>.layout-column-resize-bar,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup article,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup aside,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup center,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup div,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dt,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figcaption,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup footer,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup form,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup header,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nav,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup section,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup article,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup aside,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup center,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup div,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figcaption,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup footer,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup form,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup header,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nav,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup section,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{display:block}.layout-editor .layout-content,.layout-editor .layout-html{min-height:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup{padding:2px;overflow-x:hidden;line-height:normal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup *,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup *{margin:0;padding:0;box-sizing:content-box}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{margin-top:1em;margin-bottom:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure{margin-left:40px;margin-right:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup cite,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dfn,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup em,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup i,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup var,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup cite,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dfn,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup em,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup i,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup var{font-style:italic}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{font-family:monospace;white-space:pre}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup b,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup strong,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup b,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup strong{font-weight:bolder}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup code,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup kbd,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup samp,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup code,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup kbd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup samp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tt{font-family:monospace}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup big,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup big{font-size:larger}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup small,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup small{font-size:smaller}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sub{vertical-align:sub}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sup{vertical-align:super}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sup{line-height:normal;font-size:smaller}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ruby,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ruby{display:ruby}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rb{display:ruby-base;white-space:nowrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rt{display:ruby-text;white-space:nowrap;font-size:50%;font-variant-east-asian:ruby;-webkit-text-emphasis:none;text-emphasis:none}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rbc{display:ruby-base-container}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rtc{display:ruby-text-container}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ruby,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ruby{unicode-bidi:isolate}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :link{color:#00e}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :visited{color:#551a8b}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ins,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup u,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ins,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup u{text-decoration:underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup a:link[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup a:visited[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup area:link[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup area:visited[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup a:link[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup a:visited[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup area:link[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup area:visited[rel~=help]{cursor:help}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :focus,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :focus{outline:auto}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup mark,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup mark{background:#ff0;color:#000}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup abbr[title],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup acronym[title],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup abbr[title],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup acronym[title]{text-decoration:dotted underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup del,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup s,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup strike,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup del,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup s,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup strike{text-decoration:line-through}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blink,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blink{text-decoration:blink}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup q::before,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup q::before{content:open-quote}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup q::after,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup q::after{content:close-quote}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup br::before,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup br::before{content:'\A';white-space:pre}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nobr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nobr{white-space:nowrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup wbr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup wbr{content:'\200B'}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nobr wbr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nobr wbr{white-space:normal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h1{margin-top:.67em;margin-bottom:.67em;font-size:2em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h2{margin-top:.83em;margin-bottom:.83em;font-size:1.5em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h3{margin-top:1em;margin-bottom:1em;font-size:1.17em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h4{margin-top:1.33em;margin-bottom:1.33em;font-size:1em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h5{margin-top:1.67em;margin-bottom:1.67em;font-size:.83em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h6{margin-top:2.33em;margin-bottom:2.33em;font-size:.67em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup li,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup li{display:list-item}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul{margin-top:0;margin-bottom:0}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dd{margin-left:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{padding-left:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol{list-style-type:decimal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{list-style-type:disc}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul{list-style-type:circle}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul ul{list-style-type:square}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table{display:table;box-sizing:border-box;border-spacing:2px;border-collapse:separate;text-indent:initial}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup caption,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup caption{display:table-caption}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup[hidden]{display:table-column-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col[hidden]{display:table-column}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead[hidden]{display:table-header-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody[hidden]{display:table-row-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot[hidden]{display:table-footer-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr[hidden]{display:table-row}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th[hidden]{display:table-cell}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr[hidden]{visibility:collapse}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{padding:1px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table>tr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table>tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead{vertical-align:middle}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr{vertical-align:inherit}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{border-color:gray}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr{border-color:inherit}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup keygen,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup optgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup option,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup textarea,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup keygen,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup optgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup option,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup textarea{text-indent:initial}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup textarea,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup textarea{white-space:pre-wrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=checkbox],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=radio],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=reset],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=submit],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=checkbox],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=radio],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=reset],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=submit],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup select{box-sizing:border-box}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=button]{padding:.3em .5em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hr{color:gray;border-style:inset;border-width:1px;margin:.5em auto}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup fieldset,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup fieldset{margin-left:2px;margin-right:2px;border:2px groove ThreeDFace;padding:.35em .625em .75em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup legend{padding-left:2px;padding-right:2px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup>:first-child,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup>:first-child{margin-top:0!important}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup>:last-child,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup>:last-child{margin-bottom:0!important}.layout-editor .img-responsive,.layout-editor .img-responsive img,.layout-editor .layout-content.layout-content-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-content.layout-content-vector-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-html.layout-content-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-html.layout-content-vector-image>.layout-element-wrapper>.layout-content-markup>img{display:block;width:100%;max-width:100%;height:auto}.layout-editor>.layout-toolbox-wrapper{margin-left:12px;width:218px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;max-height:calc(100vh - 80px);overflow-x:clip;overflow-y:auto;position:-webkit-sticky;position:sticky;top:0}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar{width:2px}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);border-radius:1px}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3)}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox{border:1px solid #e4e5e6;width:220px;min-height:400px;padding:6px;background-color:#f3f4f5}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox.sticky-top{position:fixed;top:0;max-height:100%;overflow-y:auto}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox.sticky-bottom{position:absolute;bottom:0}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading{display:block;margin-bottom:4px;text-decoration:none}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading:before{display:inline-block;width:10px;margin-right:4px;font:14px/1 FontAwesome;text-align:center;content:"\f0d7"}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-group-heading:before{content:"\f0da"}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item{border:1px solid #e4e5e6;background-color:#fff;padding:9px 12px;cursor:default}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group+.layout-toolbox-group{margin-top:6px}.layout-editor .layout-popup{display:none;position:absolute;margin:0;box-shadow:3px 3px 11px 0 rgba(50,50,50,.5);border:1px solid #e4e5e6;padding:2px 0;background-color:#f7f7f7;list-style:none;z-index:20;color:#7c7c7c;text-align:left;cursor:default;white-space:nowrap;line-height:normal;min-width:300px}.layout-editor .layout-popup.wide{width:600px}.layout-editor .layout-popup .layout-popup-flex{display:-webkit-flex;display:-ms-flexbox;display:flex;padding:2px 5px}.layout-editor .layout-popup .layout-popup-flex .layout-popup-column+.layout-popup-column{margin-left:4px;border-left:1px solid rgba(128,128,128,.15);padding-left:4px}.layout-editor .layout-popup .layout-popup-item{padding:4px 6px}.layout-editor .layout-popup .layout-popup-label{font-size:.9em;font-weight:700;color:#7c7c7c}.layout-editor .layout-popup .layout-popup-action:hover{background-color:#f3f4f5;cursor:pointer}.layout-editor .layout-popup .layout-popup-input input[type=text],.layout-editor .layout-popup .layout-popup-input textarea{width:100%}.layout-editor .layout-popup .layout-popup-input>label{display:block;font-size:.9em} \ No newline at end of file +.layout-editor-toolbar{-ms-flex-pack:justify;justify-content:space-between;position:relative;top:10px}.layout-editor-toolbar,.layout-editor-toolbar .layout-editor-toolbar-group{display:-ms-flexbox;display:flex}.layout-editor-toolbar .layout-editor-toolbar-group>li+li{margin-left:12px}.layout-editor{display:-ms-flexbox;display:flex;margin-top:1em;font-size:14px;-ms-flex-align:stretch;align-items:stretch}.layout-editor>.layout-canvas-wrapper{-ms-flex-positive:1;flex-grow:1;background-color:#f3f4f5;border:1px solid #e4e5e6}.layout-editor>.layout-canvas-wrapper>.layout-toolbar-container{display:none;margin:12px 12px 0;min-height:71px}.layout-editor>.layout-canvas-wrapper>.layout-toolbar-container>.mce-panel{width:100%!important}.layout-editor>.layout-canvas-wrapper .layout-content>.layout-element-wrapper .layout-content-markup>.layout-placeholder{border:1px dashed #ccc;padding:.2em .4em;background:#e8e8e8}.layout-editor .layout-snippet{background:#e8e8e8}.layout-editor-help-dialog{display:none}.layout-editor-help-dialog .help-row:after,.layout-editor-help-dialog .help-row:before{content:" ";display:table}.layout-editor-help-dialog .help-row:after{clear:both}.layout-editor-help-dialog .help-row>.help-column-full,.layout-editor-help-dialog .help-row>.help-column-half{margin:.5em 0}.layout-editor-help-dialog .help-row>.help-column-half{box-sizing:border-box;float:left;width:50%}.layout-editor-help-dialog .help-row>.help-column-half:nth-child(2n){padding-right:10px;clear:left}.layout-editor-help-dialog .help-row+.help-row{margin-top:1em}.layout-editor-help-dialog code{border-radius:4px;background-color:#f3f4f5;padding:2px 4px;font-family:monospace}.layout-editor-help-dialog p{margin-bottom:.5em;line-height:1.6em}.layout-editor-help-dialog table>tbody>tr>td:first-child{padding-right:10px}.layout-editor .layout-element{position:relative;margin-top:0;margin-right:0;margin-bottom:0;padding:0}.layout-editor .layout-element:not(.layout-column){margin-left:0}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel{display:none;position:absolute;margin:0;z-index:20;height:25px;padding:0 6px;list-style:none;white-space:nowrap;line-height:25px;vertical-align:middle}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-item{display:inline-block;height:25px;padding:1px 6px 0}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-label{font-size:13px}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel>.layout-panel-action{display:none;width:28px;cursor:pointer;text-align:center}.layout-editor .layout-element>.layout-element-wrapper>.layout-panel-main{top:-27px;left:-2px}.layout-editor li.layout-element{list-style:none}.layout-editor:not(.layout-editor-dragging) .layout-element-active,.layout-editor:not(.layout-editor-dragging) .layout-element-focused{border-width:2px;border-style:solid}.layout-editor:not(.layout-editor-dragging) .layout-element-active>.layout-element-wrapper,.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper{margin:-2px}.layout-editor:not(.layout-editor-dragging) .layout-element-active{border-color:hsla(0,0%,41%,.1)}.layout-editor:not(.layout-editor-dragging) .layout-element-active>.layout-element-wrapper>.layout-panel-main{display:block;z-index:30;background-color:hsla(0,0%,41%,.1)}.layout-editor:not(.layout-editor-dragging) .layout-element-focused{border-color:#648721}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel{display:block;background-color:#648721;color:#fefefe}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action{display:inline-block}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action:hover{background-color:#82b02b}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.disabled{cursor:default;color:hsla(0,0%,100%,.4)}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.disabled:hover{background-color:#648721}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.active{color:#deff42;background-color:#739b26}.layout-editor:not(.layout-editor-dragging) .layout-element-focused>.layout-element-wrapper>.layout-panel>.layout-panel-action.active:hover{background-color:#82b02b}.layout-editor:not(.layout-editor-dragging) .layout-element-selected{background-color:rgba(100,135,33,.08)}.layout-editor .ui-sortable-placeholder{display:none}.layout-editor .layout-element-droptarget{box-shadow:inset 0 0 12px 6px rgba(100,135,33,.5)}.layout-editor .layout-element-droptarget .ui-sortable-placeholder{display:block;visibility:visible!important;min-height:78px;border:2px dashed #648721!important;background-color:rgba(100,135,33,.16)}.layout-editor .media-thumbnail img{max-width:100%;max-height:100%}.layout-editor .layout-container>.layout-element-wrapper>.layout-container-children-placeholder{display:none;-ms-flex-direction:column;flex-direction:column;margin:11px;min-height:80px;border:1px dashed hsla(0,0%,49%,.4);border-radius:4px;padding:12px;-ms-flex-pack:center;justify-content:center;font-size:13px;font-style:italic;opacity:.6;text-align:center}.layout-editor .layout-container>.layout-element-wrapper>.layout-children{padding:12px}.layout-editor .layout-container>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-container)+.layout-element:not(.layout-container){margin-top:12px}.layout-editor .layout-container>.layout-element-wrapper>.layout-children>.ui-sortable-helper:first-child+.layout-element:not(.layout-container){margin-top:0}.layout-editor .layout-container>.layout-element-wrapper.layout-container-empty>.layout-container-children-placeholder{display:-ms-flexbox;display:flex}.layout-editor .layout-container>.layout-element-wrapper.layout-container-empty>.layout-children{position:absolute;top:0;right:0;bottom:0;left:0}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active){border:1px dashed hsla(0,0%,49%,.6)}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin:-1px}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-container+.layout-container:not(.layout-element-active){border-top:0}.layout-editor:not(.layout-editor-dragging) .layout-container.layout-element-focused>.layout-element-wrapper>.layout-children>.layout-container+.layout-container:not(.layout-element-active)>.layout-element-wrapper{margin-top:0}.layout-editor .layout-canvas #dummy{display:none}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active){border-top:1px dashed hsla(0,0%,49%,.6)!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin-top:-1px!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element+.layout-element:not(.layout-element-active){border-left:0!important}.layout-editor .layout-row.layout-element-focused:not(.layout-element-droptarget)>.layout-element-wrapper>.layout-children>.layout-element+.layout-element:not(.layout-element-active)>.layout-element-wrapper{margin-left:0!important}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar{display:none;position:absolute;z-index:30;top:0;width:16px;height:100%;cursor:col-resize}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar-left{left:-6px}.layout-editor .layout-column>.layout-element-wrapper>.layout-column-resize-bar-right{right:-6px}.layout-editor .layout-column.layout-element-focused>.layout-element-wrapper>.layout-column-resize-bar{display:block}.layout-editor .layout-content,.layout-editor .layout-html{min-height:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup{padding:2px;overflow-x:hidden;line-height:normal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup *,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup *{margin:0;padding:0;box-sizing:content-box}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup center,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup div,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figcaption,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup footer,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup form,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup header,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup center,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup div,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figcaption,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup footer,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup form,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup header,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{display:block}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup p,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{margin-top:1em;margin-bottom:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup figure,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blockquote,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup figure{margin-left:40px;margin-right:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup address,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup address{font-style:italic}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup xmp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup listing,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup plaintext,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup pre,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup xmp{font-family:monospace;white-space:pre}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup cite,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dfn,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup em,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup i,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup var,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup cite,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dfn,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup em,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup i,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup var{font-style:italic}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup b,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup strong,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup b,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup strong{font-weight:bolder}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup code,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup kbd,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup samp,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup code,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup kbd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup samp,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tt{font-family:monospace}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup big,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup big{font-size:larger}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup small,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup small{font-size:smaller}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sub{vertical-align:sub}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sup{vertical-align:super}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup sup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sub,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup sup{line-height:normal;font-size:smaller}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ruby,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ruby{display:ruby}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rb{display:ruby-base;white-space:nowrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rt{display:ruby-text;white-space:nowrap;font-size:50%;font-variant-east-asian:ruby;text-emphasis:none}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rbc{display:ruby-base-container}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rtc{display:ruby-text-container}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ruby,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rb,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rbc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup rtc,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ruby{unicode-bidi:isolate}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :link{color:#00e}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :visited{color:#551a8b}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :visited,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :link,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :visited{text-decoration:underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup a:link[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup a:visited[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup area:link[rel~=help],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup area:visited[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup a:link[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup a:visited[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup area:link[rel~=help],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup area:visited[rel~=help]{cursor:help}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup :focus,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup :focus{outline:auto}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup mark,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup mark{background:#ff0;color:#000}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup abbr[title],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup acronym[title],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup abbr[title],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup acronym[title]{text-decoration:dotted underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ins,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup u,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ins,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup u{text-decoration:underline}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup del,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup s,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup strike,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup del,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup s,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup strike{text-decoration:line-through}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup blink,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup blink{text-decoration:blink}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup q:before,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup q:before{content:open-quote}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup q:after,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup q:after{content:close-quote}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup br:before,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup br:before{content:"\A";white-space:pre}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nobr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nobr{white-space:nowrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup wbr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup wbr{content:"\200B"}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nobr wbr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nobr wbr{white-space:normal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup article,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup aside,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup nav,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup section,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup article,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup aside,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup nav,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup section{display:block}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h1,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h1{margin-top:.67em;margin-bottom:.67em;font-size:2em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h2,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h2{margin-top:.83em;margin-bottom:.83em;font-size:1.5em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h3,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h3{margin-top:1em;margin-bottom:1em;font-size:1.17em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h4,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h4{margin-top:1.33em;margin-bottom:1.33em;font-size:1em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h5,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h5{margin-top:1.67em;margin-bottom:1.67em;font-size:.83em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup h6,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup h6{margin-top:2.33em;margin-bottom:2.33em;font-size:.67em;font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dt,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dt,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{display:block}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup li,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup li{display:list-item}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{margin-top:1em;margin-bottom:1em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dl ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dl,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dl ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dl,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul{margin-top:0;margin-bottom:0}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dd,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dd{margin-left:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{padding-left:40px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol{list-style-type:decimal}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul{list-style-type:disc}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul{list-style-type:circle}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup dir ul ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ol ul ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul dir ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ol ul,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul dir,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup ul ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup dir ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ol ul ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul dir ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ol ul,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul dir,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup ul ul ul{list-style-type:square}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table{display:table}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup caption,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup caption{display:table-caption}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup[hidden]{display:table-column-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col[hidden]{display:table-column}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead[hidden]{display:table-header-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody[hidden]{display:table-row-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot[hidden]{display:table-footer-group}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr[hidden]{display:table-row}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th[hidden]{display:table-cell}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup col[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup colgroup[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead[hidden],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr[hidden]{visibility:collapse}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table{box-sizing:border-box;border-spacing:2px;border-collapse:separate;text-indent:0}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{padding:1px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{font-weight:700}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table>tr,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table>tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead{vertical-align:middle}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr{vertical-align:inherit}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup th,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup table,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup td,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup th{border-color:gray}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup tr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tbody,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tfoot,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup thead,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup tr{border-color:inherit}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup keygen,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup optgroup,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup option,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup textarea,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup keygen,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup optgroup,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup option,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup textarea{text-indent:0}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup textarea,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup textarea{white-space:pre-wrap}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=checkbox],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=radio],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=reset],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=submit],.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup select,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=checkbox],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=radio],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=reset],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=submit],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup select{box-sizing:border-box}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup input[type=button],.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup button,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup input[type=button]{padding:.3em .5em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup hr,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup hr{color:gray;border-style:inset;border-width:1px;margin:.5em auto}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup fieldset,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup fieldset{margin-left:2px;margin-right:2px;border:2px groove ThreeDFace;padding:.35em .625em .75em}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup legend,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup legend{padding-left:2px;padding-right:2px}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup>:first-child,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup>:first-child{margin-top:0!important}.layout-editor .layout-content>.layout-element-wrapper .layout-content-markup>:last-child,.layout-editor .layout-html>.layout-element-wrapper .layout-content-markup>:last-child{margin-bottom:0!important}.layout-editor .img-responsive,.layout-editor .img-responsive img,.layout-editor .layout-content.layout-content-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-content.layout-content-vector-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-html.layout-content-image>.layout-element-wrapper>.layout-content-markup>img,.layout-editor .layout-html.layout-content-vector-image>.layout-element-wrapper>.layout-content-markup>img{display:block;width:100%;max-width:100%;height:auto}body .layout-toolbox-item{border:1px solid #e4e5e6;background-color:#fff;padding:9px 12px;cursor:default;list-style-type:none}body .layout-toolbox-item i{display:inline-block;width:16px;font:normal normal normal 14px/1 FontAwesome}body .layout-toolbox-item+.layout-toolbox-item{margin-top:4px}.layout-editor>.layout-toolbox-wrapper{margin-left:12px;width:218px;-ms-flex-negative:0;flex-shrink:0;max-height:20vh;overflow-x:clip;overflow-y:auto;position:sticky;top:0}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar{width:2px}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px #000;border-radius:1px}.layout-editor>.layout-toolbox-wrapper::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3)}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox{border:1px solid #e4e5e6;width:220px;min-height:400px;padding:6px;background-color:#f3f4f5}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox.sticky-top{position:fixed;top:0;max-height:100%;overflow-y:auto}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox.sticky-bottom{position:absolute;bottom:0}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group{margin-top:12px}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading{display:block;margin-bottom:4px;text-decoration:none}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-group-heading:before{display:inline-block;width:10px;margin-right:4px;font:normal normal normal 14px/1 FontAwesome;text-align:center;content:"\f0d7"}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-group-heading:before{content:"\f0da"}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group.collapsed .layout-toolbox-items{display:none}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-section+.layout-toolbox-section{margin-top:4px}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item{border:1px solid #e4e5e6;background-color:#fff;padding:9px 12px;cursor:default}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item i{display:inline-block;width:16px;font:normal normal normal 14px/1 FontAwesome}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group .layout-toolbox-item+.layout-toolbox-item{margin-top:4px}.layout-editor>.layout-toolbox-wrapper>.layout-toolbox .layout-toolbox-group+.layout-toolbox-group{margin-top:6px}.layout-editor .layout-popup{display:none;position:absolute;margin:0;box-shadow:3px 3px 11px 0 rgba(50,50,50,.5);border:1px solid #e4e5e6;padding:2px 0;background-color:#f7f7f7;list-style:none;z-index:20;color:#7c7c7c;text-align:left;cursor:default;white-space:nowrap;line-height:normal;min-width:300px}.layout-editor .layout-popup.wide{width:600px}.layout-editor .layout-popup .layout-popup-flex{display:-ms-flexbox;display:flex;padding:2px 5px}.layout-editor .layout-popup .layout-popup-flex .layout-popup-column+.layout-popup-column{margin-left:4px;border-left:1px solid hsla(0,0%,50%,.15);padding-left:4px}.layout-editor .layout-popup .layout-popup-item{padding:4px 6px}.layout-editor .layout-popup .layout-popup-label{font-size:.9em;font-weight:700;color:#7c7c7c}.layout-editor .layout-popup .layout-popup-action:hover{background-color:#f3f4f5;cursor:pointer}.layout-editor .layout-popup .layout-popup-input input[type=text],.layout-editor .layout-popup .layout-popup-input textarea{width:100%}.layout-editor .layout-popup .layout-popup-input>label{display:block;font-size:.9em} diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.min.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.min.js index fb70736720d..bd2dd67418f 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.min.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.min.js @@ -1,99 +1 @@ -/* -** NOTE: This file is generated by Gulp and should not be edited directly! -** Any changes made directly to this file will be overwritten next time its asset group is processed by Gulp. -*/ - -/* http://keith-wood.name/calendars.html - Calendars for jQuery v2.0.1. - Written by Keith Wood (kbwood{at}iinet.com.au) August 2009. - Available under the MIT (http://keith-wood.name/licence.html) license. - Please attribute the author if you use it. */ -(function ($) { function Calendars() { this.regionalOptions = []; this.regionalOptions[''] = { invalidCalendar: 'Calendar {0} not found', invalidDate: 'Invalid {0} date', invalidMonth: 'Invalid {0} month', invalidYear: 'Invalid {0} year', differentCalendars: 'Cannot mix {0} and {1} dates' }; this.local = this.regionalOptions['']; this.calendars = {}; this._localCals = {}; } $.extend(Calendars.prototype, { instance: function (a, b) { a = (a || 'gregorian').toLowerCase(); b = b || ''; var c = this._localCals[a + '-' + b]; if (!c && this.calendars[a]) { - c = new this.calendars[a](b); - this._localCals[a + '-' + b] = c; - } if (!c) { - throw (this.local.invalidCalendar || this.regionalOptions[''].invalidCalendar).replace(/\{0\}/, a); - } return c; }, newDate: function (a, b, c, d, e) { d = (a != null && a.year ? a.calendar() : (typeof d === 'string' ? this.instance(d, e) : d)) || this.instance(); return d.newDate(a, b, c); } }); function CDate(a, b, c, d) { this._calendar = a; this._year = b; this._month = c; this._day = d; if (this._calendar._validateLevel === 0 && !this._calendar.isValid(this._year, this._month, this._day)) { - throw ($.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate).replace(/\{0\}/, this._calendar.local.name); -} } function pad(a, b) { a = '' + a; return '000000'.substring(0, b - a.length) + a; } $.extend(CDate.prototype, { newDate: function (a, b, c) { return this._calendar.newDate((a == null ? this : a), b, c); }, year: function (a) { return (arguments.length === 0 ? this._year : this.set(a, 'y')); }, month: function (a) { return (arguments.length === 0 ? this._month : this.set(a, 'm')); }, day: function (a) { return (arguments.length === 0 ? this._day : this.set(a, 'd')); }, date: function (a, b, c) { if (!this._calendar.isValid(a, b, c)) { - throw ($.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate).replace(/\{0\}/, this._calendar.local.name); - } this._year = a; this._month = b; this._day = c; return this; }, leapYear: function () { return this._calendar.leapYear(this); }, epoch: function () { return this._calendar.epoch(this); }, formatYear: function () { return this._calendar.formatYear(this); }, monthOfYear: function () { return this._calendar.monthOfYear(this); }, weekOfYear: function () { return this._calendar.weekOfYear(this); }, daysInYear: function () { return this._calendar.daysInYear(this); }, dayOfYear: function () { return this._calendar.dayOfYear(this); }, daysInMonth: function () { return this._calendar.daysInMonth(this); }, dayOfWeek: function () { return this._calendar.dayOfWeek(this); }, weekDay: function () { return this._calendar.weekDay(this); }, extraInfo: function () { return this._calendar.extraInfo(this); }, add: function (a, b) { return this._calendar.add(this, a, b); }, set: function (a, b) { return this._calendar.set(this, a, b); }, compareTo: function (a) { if (this._calendar.name !== a._calendar.name) { - throw ($.calendars.local.differentCalendars || $.calendars.regionalOptions[''].differentCalendars).replace(/\{0\}/, this._calendar.local.name).replace(/\{1\}/, a._calendar.local.name); - } var c = (this._year !== a._year ? this._year - a._year : this._month !== a._month ? this.monthOfYear() - a.monthOfYear() : this._day - a._day); return (c === 0 ? 0 : (c < 0 ? -1 : +1)); }, calendar: function () { return this._calendar; }, toJD: function () { return this._calendar.toJD(this); }, fromJD: function (a) { return this._calendar.fromJD(a); }, toJSDate: function () { return this._calendar.toJSDate(this); }, fromJSDate: function (a) { return this._calendar.fromJSDate(a); }, toString: function () { return (this.year() < 0 ? '-' : '') + pad(Math.abs(this.year()), 4) + '-' + pad(this.month(), 2) + '-' + pad(this.day(), 2); } }); function BaseCalendar() { this.shortYearCutoff = '+10'; } $.extend(BaseCalendar.prototype, { _validateLevel: 0, newDate: function (a, b, c) { if (a == null) { - return this.today(); - } if (a.year) { - this._validate(a, b, c, $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate); - c = a.day(); - b = a.month(); - a = a.year(); - } return new CDate(this, a, b, c); }, today: function () { return this.fromJSDate(new Date()); }, epoch: function (a) { var b = this._validate(a, this.minMonth, this.minDay, $.calendars.local.invalidYear || $.calendars.regionalOptions[''].invalidYear); return (b.year() < 0 ? this.local.epochs[0] : this.local.epochs[1]); }, formatYear: function (a) { var b = this._validate(a, this.minMonth, this.minDay, $.calendars.local.invalidYear || $.calendars.regionalOptions[''].invalidYear); return (b.year() < 0 ? '-' : '') + pad(Math.abs(b.year()), 4); }, monthsInYear: function (a) { this._validate(a, this.minMonth, this.minDay, $.calendars.local.invalidYear || $.calendars.regionalOptions[''].invalidYear); return 12; }, monthOfYear: function (a, b) { var c = this._validate(a, b, this.minDay, $.calendars.local.invalidMonth || $.calendars.regionalOptions[''].invalidMonth); return (c.month() + this.monthsInYear(c) - this.firstMonth) % this.monthsInYear(c) + this.minMonth; }, fromMonthOfYear: function (a, b) { var m = (b + this.firstMonth - 2 * this.minMonth) % this.monthsInYear(a) + this.minMonth; this._validate(a, m, this.minDay, $.calendars.local.invalidMonth || $.calendars.regionalOptions[''].invalidMonth); return m; }, daysInYear: function (a) { var b = this._validate(a, this.minMonth, this.minDay, $.calendars.local.invalidYear || $.calendars.regionalOptions[''].invalidYear); return (this.leapYear(b) ? 366 : 365); }, dayOfYear: function (a, b, c) { var d = this._validate(a, b, c, $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate); return d.toJD() - this.newDate(d.year(), this.fromMonthOfYear(d.year(), this.minMonth), this.minDay).toJD() + 1; }, daysInWeek: function () { return 7; }, dayOfWeek: function (a, b, c) { var d = this._validate(a, b, c, $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate); return (Math.floor(this.toJD(d)) + 2) % this.daysInWeek(); }, extraInfo: function (a, b, c) { this._validate(a, b, c, $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate); return {}; }, add: function (a, b, c) { this._validate(a, this.minMonth, this.minDay, $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate); return this._correctAdd(a, this._add(a, b, c), b, c); }, _add: function (c, f, g) { this._validateLevel++; if (g === 'd' || g === 'w') { - var h = c.toJD() + f * (g === 'w' ? this.daysInWeek() : 1); - var d = c.calendar().fromJD(h); - this._validateLevel--; - return [d.year(), d.month(), d.day()]; - } try { - var y = c.year() + (g === 'y' ? f : 0); - var m = c.monthOfYear() + (g === 'm' ? f : 0); - var d = c.day(); - var i = function (a) { while (m < a.minMonth) { - y--; - m += a.monthsInYear(y); - } var b = a.monthsInYear(y); while (m > b - 1 + a.minMonth) { - y++; - m -= b; - b = a.monthsInYear(y); - } }; - if (g === 'y') { - if (c.month() !== this.fromMonthOfYear(y, m)) { - m = this.newDate(y, c.month(), this.minDay).monthOfYear(); - } - m = Math.min(m, this.monthsInYear(y)); - d = Math.min(d, this.daysInMonth(y, this.fromMonthOfYear(y, m))); - } - else if (g === 'm') { - i(this); - d = Math.min(d, this.daysInMonth(y, this.fromMonthOfYear(y, m))); - } - var j = [y, this.fromMonthOfYear(y, m), d]; - this._validateLevel--; - return j; - } - catch (e) { - this._validateLevel--; - throw e; - } }, _correctAdd: function (a, b, c, d) { if (!this.hasYearZero && (d === 'y' || d === 'm')) { - if (b[0] === 0 || (a.year() > 0) !== (b[0] > 0)) { - var e = { y: [1, 1, 'y'], m: [1, this.monthsInYear(-1), 'm'], w: [this.daysInWeek(), this.daysInYear(-1), 'd'], d: [1, this.daysInYear(-1), 'd'] }[d]; - var f = (c < 0 ? -1 : +1); - b = this._add(a, c * e[0] + f * e[1], e[2]); - } - } return a.date(b[0], b[1], b[2]); }, set: function (a, b, c) { this._validate(a, this.minMonth, this.minDay, $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate); var y = (c === 'y' ? b : a.year()); var m = (c === 'm' ? b : a.month()); var d = (c === 'd' ? b : a.day()); if (c === 'y' || c === 'm') { - d = Math.min(d, this.daysInMonth(y, m)); - } return a.date(y, m, d); }, isValid: function (a, b, c) { this._validateLevel++; var d = (this.hasYearZero || a !== 0); if (d) { - var e = this.newDate(a, b, this.minDay); - d = (b >= this.minMonth && b - this.minMonth < this.monthsInYear(e)) && (c >= this.minDay && c - this.minDay < this.daysInMonth(e)); - } this._validateLevel--; return d; }, toJSDate: function (a, b, c) { var d = this._validate(a, b, c, $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate); return $.calendars.instance().fromJD(this.toJD(d)).toJSDate(); }, fromJSDate: function (a) { return this.fromJD($.calendars.instance().fromJSDate(a).toJD()); }, _validate: function (a, b, c, d) { if (a.year) { - if (this._validateLevel === 0 && this.name !== a.calendar().name) { - throw ($.calendars.local.differentCalendars || $.calendars.regionalOptions[''].differentCalendars).replace(/\{0\}/, this.local.name).replace(/\{1\}/, a.calendar().local.name); - } - return a; - } try { - this._validateLevel++; - if (this._validateLevel === 1 && !this.isValid(a, b, c)) { - throw d.replace(/\{0\}/, this.local.name); - } - var f = this.newDate(a, b, c); - this._validateLevel--; - return f; - } - catch (e) { - this._validateLevel--; - throw e; - } } }); function GregorianCalendar(a) { this.local = this.regionalOptions[a] || this.regionalOptions['']; } GregorianCalendar.prototype = new BaseCalendar; $.extend(GregorianCalendar.prototype, { name: 'Gregorian', jdEpoch: 1721425.5, daysPerMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], hasYearZero: false, minMonth: 1, firstMonth: 1, minDay: 1, regionalOptions: { '': { name: 'Gregorian', epochs: ['BCE', 'CE'], monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], dateFormat: 'mm/dd/yyyy', firstDay: 0, isRTL: false } }, leapYear: function (a) { var b = this._validate(a, this.minMonth, this.minDay, $.calendars.local.invalidYear || $.calendars.regionalOptions[''].invalidYear); var a = b.year() + (b.year() < 0 ? 1 : 0); return a % 4 === 0 && (a % 100 !== 0 || a % 400 === 0); }, weekOfYear: function (a, b, c) { var d = this.newDate(a, b, c); d.add(4 - (d.dayOfWeek() || 7), 'd'); return Math.floor((d.dayOfYear() - 1) / 7) + 1; }, daysInMonth: function (a, b) { var c = this._validate(a, b, this.minDay, $.calendars.local.invalidMonth || $.calendars.regionalOptions[''].invalidMonth); return this.daysPerMonth[c.month() - 1] + (c.month() === 2 && this.leapYear(c.year()) ? 1 : 0); }, weekDay: function (a, b, c) { return (this.dayOfWeek(a, b, c) || 7) < 6; }, toJD: function (c, d, e) { var f = this._validate(c, d, e, $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate); c = f.year(); d = f.month(); e = f.day(); if (c < 0) { - c++; - } if (d < 3) { - d += 12; - c--; - } var a = Math.floor(c / 100); var b = 2 - a + Math.floor(a / 4); return Math.floor(365.25 * (c + 4716)) + Math.floor(30.6001 * (d + 1)) + e + b - 1524.5; }, fromJD: function (f) { var z = Math.floor(f + 0.5); var a = Math.floor((z - 1867216.25) / 36524.25); a = z + 1 + a - Math.floor(a / 4); var b = a + 1524; var c = Math.floor((b - 122.1) / 365.25); var d = Math.floor(365.25 * c); var e = Math.floor((b - d) / 30.6001); var g = b - d - Math.floor(e * 30.6001); var h = e - (e > 13.5 ? 13 : 1); var i = c - (h > 2.5 ? 4716 : 4715); if (i <= 0) { - i--; - } return this.newDate(i, h, g); }, toJSDate: function (a, b, c) { var d = this._validate(a, b, c, $.calendars.local.invalidDate || $.calendars.regionalOptions[''].invalidDate); var e = new Date(d.year(), d.month() - 1, d.day()); e.setHours(0); e.setMinutes(0); e.setSeconds(0); e.setMilliseconds(0); e.setHours(e.getHours() > 12 ? e.getHours() + 2 : 0); return e; }, fromJSDate: function (a) { return this.newDate(a.getFullYear(), a.getMonth() + 1, a.getDate()); } }); $.calendars = new Calendars(); $.calendars.cdate = CDate; $.calendars.baseCalendar = BaseCalendar; $.calendars.calendars.gregorian = GregorianCalendar; })(jQuery); +!function(a){function t(){this.regionalOptions=[],this.regionalOptions[""]={invalidCalendar:"Calendar {0} not found",invalidDate:"Invalid {0} date",invalidMonth:"Invalid {0} month",invalidYear:"Invalid {0} year",differentCalendars:"Cannot mix {0} and {1} dates"},this.local=this.regionalOptions[""],this.calendars={},this._localCals={}}function n(t,n,e,i){if(this._calendar=t,this._year=n,this._month=e,this._day=i,0===this._calendar._validateLevel&&!this._calendar.isValid(this._year,this._month,this._day))throw(a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name)}function e(a,t){return a=""+a,"000000".substring(0,t-a.length)+a}function i(){this.shortYearCutoff="+10"}function r(a){this.local=this.regionalOptions[a]||this.regionalOptions[""]}a.extend(t.prototype,{instance:function(a,t){a=(a||"gregorian").toLowerCase(),t=t||"";var n=this._localCals[a+"-"+t];if(!n&&this.calendars[a]&&(n=new this.calendars[a](t),this._localCals[a+"-"+t]=n),!n)throw(this.local.invalidCalendar||this.regionalOptions[""].invalidCalendar).replace(/\{0\}/,a);return n},newDate:function(a,t,n,e,i){return e=(null!=a&&a.year?a.calendar():"string"==typeof e?this.instance(e,i):e)||this.instance(),e.newDate(a,t,n)}}),a.extend(n.prototype,{newDate:function(a,t,n){return this._calendar.newDate(null==a?this:a,t,n)},year:function(a){return 0===arguments.length?this._year:this.set(a,"y")},month:function(a){return 0===arguments.length?this._month:this.set(a,"m")},day:function(a){return 0===arguments.length?this._day:this.set(a,"d")},date:function(t,n,e){if(!this._calendar.isValid(t,n,e))throw(a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name);return this._year=t,this._month=n,this._day=e,this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(a,t){return this._calendar.add(this,a,t)},set:function(a,t){return this._calendar.set(this,a,t)},compareTo:function(t){if(this._calendar.name!==t._calendar.name)throw(a.calendars.local.differentCalendars||a.calendars.regionalOptions[""].differentCalendars).replace(/\{0\}/,this._calendar.local.name).replace(/\{1\}/,t._calendar.local.name);var n=this._year!==t._year?this._year-t._year:this._month!==t._month?this.monthOfYear()-t.monthOfYear():this._day-t._day;return 0===n?0:n<0?-1:1},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(a){return this._calendar.fromJD(a)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(a){return this._calendar.fromJSDate(a)},toString:function(){return(this.year()<0?"-":"")+e(Math.abs(this.year()),4)+"-"+e(this.month(),2)+"-"+e(this.day(),2)}}),a.extend(i.prototype,{_validateLevel:0,newDate:function(t,e,i){return null==t?this.today():(t.year&&(this._validate(t,e,i,a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate),i=t.day(),e=t.month(),t=t.year()),new n(this,t,e,i))},today:function(){return this.fromJSDate(new Date)},epoch:function(t){var n=this._validate(t,this.minMonth,this.minDay,a.calendars.local.invalidYear||a.calendars.regionalOptions[""].invalidYear);return n.year()<0?this.local.epochs[0]:this.local.epochs[1]},formatYear:function(t){var n=this._validate(t,this.minMonth,this.minDay,a.calendars.local.invalidYear||a.calendars.regionalOptions[""].invalidYear);return(n.year()<0?"-":"")+e(Math.abs(n.year()),4)},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,a.calendars.local.invalidYear||a.calendars.regionalOptions[""].invalidYear),12},monthOfYear:function(t,n){var e=this._validate(t,n,this.minDay,a.calendars.local.invalidMonth||a.calendars.regionalOptions[""].invalidMonth);return(e.month()+this.monthsInYear(e)-this.firstMonth)%this.monthsInYear(e)+this.minMonth},fromMonthOfYear:function(t,n){var e=(n+this.firstMonth-2*this.minMonth)%this.monthsInYear(t)+this.minMonth;return this._validate(t,e,this.minDay,a.calendars.local.invalidMonth||a.calendars.regionalOptions[""].invalidMonth),e},daysInYear:function(t){var n=this._validate(t,this.minMonth,this.minDay,a.calendars.local.invalidYear||a.calendars.regionalOptions[""].invalidYear);return this.leapYear(n)?366:365},dayOfYear:function(t,n,e){var i=this._validate(t,n,e,a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate);return i.toJD()-this.newDate(i.year(),this.fromMonthOfYear(i.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(t,n,e){var i=this._validate(t,n,e,a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate);return(Math.floor(this.toJD(i))+2)%this.daysInWeek()},extraInfo:function(t,n,e){return this._validate(t,n,e,a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate),{}},add:function(t,n,e){return this._validate(t,this.minMonth,this.minDay,a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate),this._correctAdd(t,this._add(t,n,e),n,e)},_add:function(a,t,n){if(this._validateLevel++,"d"===n||"w"===n){var e=a.toJD()+t*("w"===n?this.daysInWeek():1),i=a.calendar().fromJD(e);return this._validateLevel--,[i.year(),i.month(),i.day()]}try{var r=a.year()+("y"===n?t:0),s=a.monthOfYear()+("m"===n?t:0),i=a.day(),o=function(a){for(;st-1+a.minMonth;)r++,s-=t,t=a.monthsInYear(r)};"y"===n?(a.month()!==this.fromMonthOfYear(r,s)&&(s=this.newDate(r,a.month(),this.minDay).monthOfYear()),s=Math.min(s,this.monthsInYear(r)),i=Math.min(i,this.daysInMonth(r,this.fromMonthOfYear(r,s)))):"m"===n&&(o(this),i=Math.min(i,this.daysInMonth(r,this.fromMonthOfYear(r,s))));var l=[r,this.fromMonthOfYear(r,s),i];return this._validateLevel--,l}catch(a){throw this._validateLevel--,a}},_correctAdd:function(a,t,n,e){if(!(this.hasYearZero||"y"!==e&&"m"!==e||0!==t[0]&&a.year()>0==t[0]>0)){var i={y:[1,1,"y"],m:[1,this.monthsInYear(-1),"m"],w:[this.daysInWeek(),this.daysInYear(-1),"d"],d:[1,this.daysInYear(-1),"d"]}[e],r=n<0?-1:1;t=this._add(a,n*i[0]+r*i[1],i[2])}return a.date(t[0],t[1],t[2])},set:function(t,n,e){this._validate(t,this.minMonth,this.minDay,a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate);var i="y"===e?n:t.year(),r="m"===e?n:t.month(),s="d"===e?n:t.day();return"y"!==e&&"m"!==e||(s=Math.min(s,this.daysInMonth(i,r))),t.date(i,r,s)},isValid:function(a,t,n){this._validateLevel++;var e=this.hasYearZero||0!==a;if(e){var i=this.newDate(a,t,this.minDay);e=t>=this.minMonth&&t-this.minMonth=this.minDay&&n-this.minDay13.5?13:1),h=i-(l>2.5?4716:4715);return h<=0&&h--,this.newDate(h,l,o)},toJSDate:function(t,n,e){var i=this._validate(t,n,e,a.calendars.local.invalidDate||a.calendars.regionalOptions[""].invalidDate),r=new Date(i.year(),i.month()-1,i.day());return r.setHours(0),r.setMinutes(0),r.setSeconds(0),r.setMilliseconds(0),r.setHours(r.getHours()>12?r.getHours()+2:0),r},fromJSDate:function(a){return this.newDate(a.getFullYear(),a.getMonth()+1,a.getDate())}}),a.calendars=new t,a.calendars.cdate=n,a.calendars.baseCalendar=i,a.calendars.calendars.gregorian=r}(jQuery); diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/bootstrap.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/bootstrap.js index f4f23ead2c6..e574571f88a 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/bootstrap.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/bootstrap.js @@ -1,7013 +1,3871 @@ -/*! - * Bootstrap v4.3.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) : - typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) : - (global = global || self, factory(global.bootstrap = {}, global.jQuery)); -}(this, function (exports, $) { 'use strict'; - - $ = $ && $.hasOwnProperty('default') ? $['default'] : $; - - function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; - } - - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; +/* +** NOTE: This file is generated by Gulp and should not be edited directly! +** Any changes made directly to this file will be overwritten next time its asset group is processed by Gulp. +*/ + +var __assign = (this && this.__assign) || Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; +}; +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +}; +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.3.1): util.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ +define("util", ["require", "exports", "jquery"], function (require, exports, jquery_1) { + "use strict"; + /** + * ------------------------------------------------------------------------ + * Private TransitionEnd Helpers + * ------------------------------------------------------------------------ + */ + var TRANSITION_END = 'transitionend'; + var MAX_UID = 1000000; + var MILLISECONDS_MULTIPLIER = 1000; + // Shoutout AngusCroll (https://goo.gl/pxwQGp) + function toType(obj) { + return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); + } + function getSpecialTransitionEndEvent() { + return { + bindType: TRANSITION_END, + delegateType: TRANSITION_END, + handle: function (event) { + if (jquery_1["default"](event.target).is(this)) { + return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params + } + return undefined; // eslint-disable-line no-undefined + } + }; } - - return obj; - } - - function _objectSpread(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - var ownKeys = Object.keys(source); - - if (typeof Object.getOwnPropertySymbols === 'function') { - ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { - return Object.getOwnPropertyDescriptor(source, sym).enumerable; - })); - } - - ownKeys.forEach(function (key) { - _defineProperty(target, key, source[key]); - }); + function transitionEndEmulator(duration) { + var _this = this; + var called = false; + jquery_1["default"](this).one(Util.TRANSITION_END, function () { + called = true; + }); + setTimeout(function () { + if (!called) { + Util.triggerTransitionEnd(_this); + } + }, duration); + return this; } - - return target; - } - - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - subClass.__proto__ = superClass; - } - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.3.1): util.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - /** - * ------------------------------------------------------------------------ - * Private TransitionEnd Helpers - * ------------------------------------------------------------------------ - */ - - var TRANSITION_END = 'transitionend'; - var MAX_UID = 1000000; - var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) - - function toType(obj) { - return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); - } - - function getSpecialTransitionEndEvent() { - return { - bindType: TRANSITION_END, - delegateType: TRANSITION_END, - handle: function handle(event) { - if ($(event.target).is(this)) { - return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params - } - - return undefined; // eslint-disable-line no-undefined - } - }; - } - - function transitionEndEmulator(duration) { - var _this = this; - - var called = false; - $(this).one(Util.TRANSITION_END, function () { - called = true; - }); - setTimeout(function () { - if (!called) { - Util.triggerTransitionEnd(_this); - } - }, duration); - return this; - } - - function setTransitionEndSupport() { - $.fn.emulateTransitionEnd = transitionEndEmulator; - $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); - } - /** - * -------------------------------------------------------------------------- - * Public Util Api - * -------------------------------------------------------------------------- - */ - - - var Util = { - TRANSITION_END: 'bsTransitionEnd', - getUID: function getUID(prefix) { - do { - // eslint-disable-next-line no-bitwise - prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here - } while (document.getElementById(prefix)); - - return prefix; - }, - getSelectorFromElement: function getSelectorFromElement(element) { - var selector = element.getAttribute('data-target'); - - if (!selector || selector === '#') { - var hrefAttr = element.getAttribute('href'); - selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; - } - - try { - return document.querySelector(selector) ? selector : null; - } catch (err) { - return null; - } - }, - getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { - if (!element) { - return 0; - } // Get transition-duration of the element - - - var transitionDuration = $(element).css('transition-duration'); - var transitionDelay = $(element).css('transition-delay'); - var floatTransitionDuration = parseFloat(transitionDuration); - var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found - - if (!floatTransitionDuration && !floatTransitionDelay) { - return 0; - } // If multiple durations are defined, take the first - - - transitionDuration = transitionDuration.split(',')[0]; - transitionDelay = transitionDelay.split(',')[0]; - return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; - }, - reflow: function reflow(element) { - return element.offsetHeight; - }, - triggerTransitionEnd: function triggerTransitionEnd(element) { - $(element).trigger(TRANSITION_END); - }, - // TODO: Remove in v5 - supportsTransitionEnd: function supportsTransitionEnd() { - return Boolean(TRANSITION_END); - }, - isElement: function isElement(obj) { - return (obj[0] || obj).nodeType; - }, - typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { - for (var property in configTypes) { - if (Object.prototype.hasOwnProperty.call(configTypes, property)) { - var expectedTypes = configTypes[property]; - var value = config[property]; - var valueType = value && Util.isElement(value) ? 'element' : toType(value); - - if (!new RegExp(expectedTypes).test(valueType)) { - throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); - } - } - } - }, - findShadowRoot: function findShadowRoot(element) { - if (!document.documentElement.attachShadow) { - return null; - } // Can find the shadow root otherwise it'll return the document - - - if (typeof element.getRootNode === 'function') { - var root = element.getRootNode(); - return root instanceof ShadowRoot ? root : null; - } - - if (element instanceof ShadowRoot) { - return element; - } // when we don't find a shadow root - - - if (!element.parentNode) { - return null; - } - - return Util.findShadowRoot(element.parentNode); + function setTransitionEndSupport() { + jquery_1["default"].fn.emulateTransitionEnd = transitionEndEmulator; + jquery_1["default"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); } - }; - setTransitionEndSupport(); - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME = 'alert'; - var VERSION = '4.3.1'; - var DATA_KEY = 'bs.alert'; - var EVENT_KEY = "." + DATA_KEY; - var DATA_API_KEY = '.data-api'; - var JQUERY_NO_CONFLICT = $.fn[NAME]; - var Selector = { - DISMISS: '[data-dismiss="alert"]' - }; - var Event = { - CLOSE: "close" + EVENT_KEY, - CLOSED: "closed" + EVENT_KEY, - CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY - }; - var ClassName = { - ALERT: 'alert', - FADE: 'fade', - SHOW: 'show' + /** + * -------------------------------------------------------------------------- + * Public Util Api + * -------------------------------------------------------------------------- + */ + var Util = { + TRANSITION_END: 'bsTransitionEnd', + getUID: function (prefix) { + do { + // eslint-disable-next-line no-bitwise + prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here + } while (document.getElementById(prefix)); + return prefix; + }, + getSelectorFromElement: function (element) { + var selector = element.getAttribute('data-target'); + if (!selector || selector === '#') { + var hrefAttr = element.getAttribute('href'); + selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; + } + try { + return document.querySelector(selector) ? selector : null; + } + catch (err) { + return null; + } + }, + getTransitionDurationFromElement: function (element) { + if (!element) { + return 0; + } + // Get transition-duration of the element + var transitionDuration = jquery_1["default"](element).css('transition-duration'); + var transitionDelay = jquery_1["default"](element).css('transition-delay'); + var floatTransitionDuration = parseFloat(transitionDuration); + var floatTransitionDelay = parseFloat(transitionDelay); + // Return 0 if element or transition duration is not found + if (!floatTransitionDuration && !floatTransitionDelay) { + return 0; + } + // If multiple durations are defined, take the first + transitionDuration = transitionDuration.split(',')[0]; + transitionDelay = transitionDelay.split(',')[0]; + return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; + }, + reflow: function (element) { + return element.offsetHeight; + }, + triggerTransitionEnd: function (element) { + jquery_1["default"](element).trigger(TRANSITION_END); + }, + // TODO: Remove in v5 + supportsTransitionEnd: function () { + return Boolean(TRANSITION_END); + }, + isElement: function (obj) { + return (obj[0] || obj).nodeType; + }, + typeCheckConfig: function (componentName, config, configTypes) { + for (var property in configTypes) { + if (Object.prototype.hasOwnProperty.call(configTypes, property)) { + var expectedTypes = configTypes[property]; + var value = config[property]; + var valueType = value && Util.isElement(value) + ? 'element' : toType(value); + if (!new RegExp(expectedTypes).test(valueType)) { + throw new Error(componentName.toUpperCase() + ": " + + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + + ("but expected type \"" + expectedTypes + "\".")); + } + } + } + }, + findShadowRoot: function (element) { + if (!document.documentElement.attachShadow) { + return null; + } + // Can find the shadow root otherwise it'll return the document + if (typeof element.getRootNode === 'function') { + var root = element.getRootNode(); + return root instanceof ShadowRoot ? root : null; + } + if (element instanceof ShadowRoot) { + return element; + } + // when we don't find a shadow root + if (!element.parentNode) { + return null; + } + return Util.findShadowRoot(element.parentNode); + } + }; + setTransitionEndSupport(); + exports.__esModule = true; + exports["default"] = Util; +}); +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.3.1): alert.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ +define("alert", ["require", "exports", "jquery", "util"], function (require, exports, jquery_2, util_1) { + "use strict"; /** * ------------------------------------------------------------------------ - * Class Definition + * Constants * ------------------------------------------------------------------------ */ - - }; - - var Alert = - /*#__PURE__*/ - function () { - function Alert(element) { - this._element = element; - } // Getters - - - var _proto = Alert.prototype; - - // Public - _proto.close = function close(element) { - var rootElement = this._element; - - if (element) { - rootElement = this._getRootElement(element); - } - - var customEvent = this._triggerCloseEvent(rootElement); - - if (customEvent.isDefaultPrevented()) { - return; - } - - this._removeElement(rootElement); - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY); - this._element = null; - } // Private - ; - - _proto._getRootElement = function _getRootElement(element) { - var selector = Util.getSelectorFromElement(element); - var parent = false; - - if (selector) { - parent = document.querySelector(selector); - } - - if (!parent) { - parent = $(element).closest("." + ClassName.ALERT)[0]; - } - - return parent; - }; - - _proto._triggerCloseEvent = function _triggerCloseEvent(element) { - var closeEvent = $.Event(Event.CLOSE); - $(element).trigger(closeEvent); - return closeEvent; - }; - - _proto._removeElement = function _removeElement(element) { - var _this = this; - - $(element).removeClass(ClassName.SHOW); - - if (!$(element).hasClass(ClassName.FADE)) { - this._destroyElement(element); - - return; - } - - var transitionDuration = Util.getTransitionDurationFromElement(element); - $(element).one(Util.TRANSITION_END, function (event) { - return _this._destroyElement(element, event); - }).emulateTransitionEnd(transitionDuration); - }; - - _proto._destroyElement = function _destroyElement(element) { - $(element).detach().trigger(Event.CLOSED).remove(); - } // Static - ; - - Alert._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var $element = $(this); - var data = $element.data(DATA_KEY); - - if (!data) { - data = new Alert(this); - $element.data(DATA_KEY, data); - } - - if (config === 'close') { - data[config](this); - } - }); - }; - - Alert._handleDismiss = function _handleDismiss(alertInstance) { - return function (event) { - if (event) { - event.preventDefault(); - } - - alertInstance.close(this); - }; + var NAME = 'alert'; + var VERSION = '4.3.1'; + var DATA_KEY = 'bs.alert'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = jquery_2["default"].fn[NAME]; + var Selector = { + DISMISS: '[data-dismiss="alert"]' + }; + var Event = { + CLOSE: "close" + EVENT_KEY, + CLOSED: "closed" + EVENT_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY + }; + var ClassName = { + ALERT: 'alert', + FADE: 'fade', + SHOW: 'show' }; - - _createClass(Alert, null, [{ - key: "VERSION", - get: function get() { - return VERSION; - } - }]); - - return Alert; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME] = Alert._jQueryInterface; - $.fn[NAME].Constructor = Alert; - - $.fn[NAME].noConflict = function () { - $.fn[NAME] = JQUERY_NO_CONFLICT; - return Alert._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$1 = 'button'; - var VERSION$1 = '4.3.1'; - var DATA_KEY$1 = 'bs.button'; - var EVENT_KEY$1 = "." + DATA_KEY$1; - var DATA_API_KEY$1 = '.data-api'; - var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1]; - var ClassName$1 = { - ACTIVE: 'active', - BUTTON: 'btn', - FOCUS: 'focus' - }; - var Selector$1 = { - DATA_TOGGLE_CARROT: '[data-toggle^="button"]', - DATA_TOGGLE: '[data-toggle="buttons"]', - INPUT: 'input:not([type="hidden"])', - ACTIVE: '.active', - BUTTON: '.btn' - }; - var Event$1 = { - CLICK_DATA_API: "click" + EVENT_KEY$1 + DATA_API_KEY$1, - FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1) /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ - - }; - - var Button = - /*#__PURE__*/ - function () { - function Button(element) { - this._element = element; - } // Getters - - - var _proto = Button.prototype; - - // Public - _proto.toggle = function toggle() { - var triggerChangeEvent = true; - var addAriaPressed = true; - var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0]; - - if (rootElement) { - var input = this._element.querySelector(Selector$1.INPUT); - - if (input) { - if (input.type === 'radio') { - if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) { - triggerChangeEvent = false; - } else { - var activeElement = rootElement.querySelector(Selector$1.ACTIVE); - - if (activeElement) { - $(activeElement).removeClass(ClassName$1.ACTIVE); - } + var Alert = (function () { + function Alert(element) { + this._element = element; + } + Object.defineProperty(Alert, "VERSION", { + // Getters + get: function () { + return VERSION; + }, + enumerable: true, + configurable: true + }); + // Public + Alert.prototype.close = function (element) { + var rootElement = this._element; + if (element) { + rootElement = this._getRootElement(element); } - } - - if (triggerChangeEvent) { - if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) { - return; + var customEvent = this._triggerCloseEvent(rootElement); + if (customEvent.isDefaultPrevented()) { + return; } - - input.checked = !this._element.classList.contains(ClassName$1.ACTIVE); - $(input).trigger('change'); - } - - input.focus(); - addAriaPressed = false; - } - } - - if (addAriaPressed) { - this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE)); - } - - if (triggerChangeEvent) { - $(this._element).toggleClass(ClassName$1.ACTIVE); - } - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$1); - this._element = null; - } // Static - ; - - Button._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$1); - - if (!data) { - data = new Button(this); - $(this).data(DATA_KEY$1, data); - } - - if (config === 'toggle') { - data[config](); - } - }); + this._removeElement(rootElement); + }; + Alert.prototype.dispose = function () { + jquery_2["default"].removeData(this._element, DATA_KEY); + this._element = null; + }; + // Private + Alert.prototype._getRootElement = function (element) { + var selector = util_1["default"].getSelectorFromElement(element); + var parent = false; + if (selector) { + parent = document.querySelector(selector); + } + if (!parent) { + parent = jquery_2["default"](element).closest("." + ClassName.ALERT)[0]; + } + return parent; + }; + Alert.prototype._triggerCloseEvent = function (element) { + var closeEvent = jquery_2["default"].Event(Event.CLOSE); + jquery_2["default"](element).trigger(closeEvent); + return closeEvent; + }; + Alert.prototype._removeElement = function (element) { + var _this = this; + jquery_2["default"](element).removeClass(ClassName.SHOW); + if (!jquery_2["default"](element).hasClass(ClassName.FADE)) { + this._destroyElement(element); + return; + } + var transitionDuration = util_1["default"].getTransitionDurationFromElement(element); + jquery_2["default"](element) + .one(util_1["default"].TRANSITION_END, function (event) { return _this._destroyElement(element, event); }) + .emulateTransitionEnd(transitionDuration); + }; + Alert.prototype._destroyElement = function (element) { + jquery_2["default"](element) + .detach() + .trigger(Event.CLOSED) + .remove(); + }; + // Static + Alert._jQueryInterface = function (config) { + return this.each(function () { + var $element = jquery_2["default"](this); + var data = $element.data(DATA_KEY); + if (!data) { + data = new Alert(this); + $element.data(DATA_KEY, data); + } + if (config === 'close') { + data[config](this); + } + }); + }; + Alert._handleDismiss = function (alertInstance) { + return function (event) { + if (event) { + event.preventDefault(); + } + alertInstance.close(this); + }; + }; + return Alert; + }()); + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + jquery_2["default"](document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + jquery_2["default"].fn[NAME] = Alert._jQueryInterface; + jquery_2["default"].fn[NAME].Constructor = Alert; + jquery_2["default"].fn[NAME].noConflict = function () { + jquery_2["default"].fn[NAME] = JQUERY_NO_CONFLICT; + return Alert._jQueryInterface; + }; + exports.__esModule = true; + exports["default"] = Alert; +}); +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.3.1): button.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ +define("button", ["require", "exports", "jquery"], function (require, exports, jquery_3) { + "use strict"; + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + var NAME = 'button'; + var VERSION = '4.3.1'; + var DATA_KEY = 'bs.button'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = jquery_3["default"].fn[NAME]; + var ClassName = { + ACTIVE: 'active', + BUTTON: 'btn', + FOCUS: 'focus' + }; + var Selector = { + DATA_TOGGLE_CARROT: '[data-toggle^="button"]', + DATA_TOGGLE: '[data-toggle="buttons"]', + INPUT: 'input:not([type="hidden"])', + ACTIVE: '.active', + BUTTON: '.btn' + }; + var Event = { + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, + FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY + DATA_API_KEY + " " + + ("blur" + EVENT_KEY + DATA_API_KEY) }; - - _createClass(Button, null, [{ - key: "VERSION", - get: function get() { - return VERSION$1; - } - }]); - - return Button; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) { - event.preventDefault(); - var button = event.target; - - if (!$(button).hasClass(ClassName$1.BUTTON)) { - button = $(button).closest(Selector$1.BUTTON); - } - - Button._jQueryInterface.call($(button), 'toggle'); - }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) { - var button = $(event.target).closest(Selector$1.BUTTON)[0]; - $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type)); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$1] = Button._jQueryInterface; - $.fn[NAME$1].Constructor = Button; - - $.fn[NAME$1].noConflict = function () { - $.fn[NAME$1] = JQUERY_NO_CONFLICT$1; - return Button._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$2 = 'carousel'; - var VERSION$2 = '4.3.1'; - var DATA_KEY$2 = 'bs.carousel'; - var EVENT_KEY$2 = "." + DATA_KEY$2; - var DATA_API_KEY$2 = '.data-api'; - var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2]; - var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key - - var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key - - var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch - - var SWIPE_THRESHOLD = 40; - var Default = { - interval: 5000, - keyboard: true, - slide: false, - pause: 'hover', - wrap: true, - touch: true - }; - var DefaultType = { - interval: '(number|boolean)', - keyboard: 'boolean', - slide: '(boolean|string)', - pause: '(string|boolean)', - wrap: 'boolean', - touch: 'boolean' - }; - var Direction = { - NEXT: 'next', - PREV: 'prev', - LEFT: 'left', - RIGHT: 'right' - }; - var Event$2 = { - SLIDE: "slide" + EVENT_KEY$2, - SLID: "slid" + EVENT_KEY$2, - KEYDOWN: "keydown" + EVENT_KEY$2, - MOUSEENTER: "mouseenter" + EVENT_KEY$2, - MOUSELEAVE: "mouseleave" + EVENT_KEY$2, - TOUCHSTART: "touchstart" + EVENT_KEY$2, - TOUCHMOVE: "touchmove" + EVENT_KEY$2, - TOUCHEND: "touchend" + EVENT_KEY$2, - POINTERDOWN: "pointerdown" + EVENT_KEY$2, - POINTERUP: "pointerup" + EVENT_KEY$2, - DRAG_START: "dragstart" + EVENT_KEY$2, - LOAD_DATA_API: "load" + EVENT_KEY$2 + DATA_API_KEY$2, - CLICK_DATA_API: "click" + EVENT_KEY$2 + DATA_API_KEY$2 - }; - var ClassName$2 = { - CAROUSEL: 'carousel', - ACTIVE: 'active', - SLIDE: 'slide', - RIGHT: 'carousel-item-right', - LEFT: 'carousel-item-left', - NEXT: 'carousel-item-next', - PREV: 'carousel-item-prev', - ITEM: 'carousel-item', - POINTER_EVENT: 'pointer-event' - }; - var Selector$2 = { - ACTIVE: '.active', - ACTIVE_ITEM: '.active.carousel-item', - ITEM: '.carousel-item', - ITEM_IMG: '.carousel-item img', - NEXT_PREV: '.carousel-item-next, .carousel-item-prev', - INDICATORS: '.carousel-indicators', - DATA_SLIDE: '[data-slide], [data-slide-to]', - DATA_RIDE: '[data-ride="carousel"]' - }; - var PointerType = { - TOUCH: 'touch', - PEN: 'pen' /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ - - }; - - var Carousel = - /*#__PURE__*/ - function () { - function Carousel(element, config) { - this._items = null; - this._interval = null; - this._activeElement = null; - this._isPaused = false; - this._isSliding = false; - this.touchTimeout = null; - this.touchStartX = 0; - this.touchDeltaX = 0; - this._config = this._getConfig(config); - this._element = element; - this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS); - this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; - this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent); - - this._addEventListeners(); - } // Getters - - - var _proto = Carousel.prototype; - - // Public - _proto.next = function next() { - if (!this._isSliding) { - this._slide(Direction.NEXT); - } - }; - - _proto.nextWhenVisible = function nextWhenVisible() { - // Don't call next when the page isn't visible - // or the carousel or its parent isn't visible - if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') { - this.next(); - } - }; - - _proto.prev = function prev() { - if (!this._isSliding) { - this._slide(Direction.PREV); - } - }; - - _proto.pause = function pause(event) { - if (!event) { - this._isPaused = true; - } - - if (this._element.querySelector(Selector$2.NEXT_PREV)) { - Util.triggerTransitionEnd(this._element); - this.cycle(true); - } - - clearInterval(this._interval); - this._interval = null; - }; - - _proto.cycle = function cycle(event) { - if (!event) { - this._isPaused = false; - } - - if (this._interval) { - clearInterval(this._interval); - this._interval = null; - } - - if (this._config.interval && !this._isPaused) { - this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); - } - }; - - _proto.to = function to(index) { - var _this = this; - - this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); - - var activeIndex = this._getItemIndex(this._activeElement); - - if (index > this._items.length - 1 || index < 0) { - return; - } - - if (this._isSliding) { - $(this._element).one(Event$2.SLID, function () { - return _this.to(index); - }); - return; - } - - if (activeIndex === index) { - this.pause(); - this.cycle(); - return; - } - - var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; - - this._slide(direction, this._items[index]); - }; - - _proto.dispose = function dispose() { - $(this._element).off(EVENT_KEY$2); - $.removeData(this._element, DATA_KEY$2); - this._items = null; - this._config = null; - this._element = null; - this._interval = null; - this._isPaused = null; - this._isSliding = null; - this._activeElement = null; - this._indicatorsElement = null; - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default, config); - Util.typeCheckConfig(NAME$2, config, DefaultType); - return config; - }; - - _proto._handleSwipe = function _handleSwipe() { - var absDeltax = Math.abs(this.touchDeltaX); - - if (absDeltax <= SWIPE_THRESHOLD) { - return; - } - - var direction = absDeltax / this.touchDeltaX; // swipe left - - if (direction > 0) { - this.prev(); - } // swipe right - - - if (direction < 0) { - this.next(); - } - }; - - _proto._addEventListeners = function _addEventListeners() { - var _this2 = this; - - if (this._config.keyboard) { - $(this._element).on(Event$2.KEYDOWN, function (event) { - return _this2._keydown(event); - }); - } - - if (this._config.pause === 'hover') { - $(this._element).on(Event$2.MOUSEENTER, function (event) { - return _this2.pause(event); - }).on(Event$2.MOUSELEAVE, function (event) { - return _this2.cycle(event); + var Button = (function () { + function Button(element) { + this._element = element; + } + Object.defineProperty(Button, "VERSION", { + // Getters + get: function () { + return VERSION; + }, + enumerable: true, + configurable: true }); - } - - if (this._config.touch) { - this._addTouchEventListeners(); - } + // Public + Button.prototype.toggle = function () { + var triggerChangeEvent = true; + var addAriaPressed = true; + var rootElement = jquery_3["default"](this._element).closest(Selector.DATA_TOGGLE)[0]; + if (rootElement) { + var input = this._element.querySelector(Selector.INPUT); + if (input) { + if (input.type === 'radio') { + if (input.checked && + this._element.classList.contains(ClassName.ACTIVE)) { + triggerChangeEvent = false; + } + else { + var activeElement = rootElement.querySelector(Selector.ACTIVE); + if (activeElement) { + jquery_3["default"](activeElement).removeClass(ClassName.ACTIVE); + } + } + } + if (triggerChangeEvent) { + if (input.hasAttribute('disabled') || + rootElement.hasAttribute('disabled') || + input.classList.contains('disabled') || + rootElement.classList.contains('disabled')) { + return; + } + input.checked = !this._element.classList.contains(ClassName.ACTIVE); + jquery_3["default"](input).trigger('change'); + } + input.focus(); + addAriaPressed = false; + } + } + if (addAriaPressed) { + this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName.ACTIVE)); + } + if (triggerChangeEvent) { + jquery_3["default"](this._element).toggleClass(ClassName.ACTIVE); + } + }; + Button.prototype.dispose = function () { + jquery_3["default"].removeData(this._element, DATA_KEY); + this._element = null; + }; + // Static + Button._jQueryInterface = function (config) { + return this.each(function () { + var data = jquery_3["default"](this).data(DATA_KEY); + if (!data) { + data = new Button(this); + jquery_3["default"](this).data(DATA_KEY, data); + } + if (config === 'toggle') { + data[config](); + } + }); + }; + return Button; + }()); + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + jquery_3["default"](document) + .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { + event.preventDefault(); + var button = event.target; + if (!jquery_3["default"](button).hasClass(ClassName.BUTTON)) { + button = jquery_3["default"](button).closest(Selector.BUTTON); + } + Button._jQueryInterface.call(jquery_3["default"](button), 'toggle'); + }) + .on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { + var button = jquery_3["default"](event.target).closest(Selector.BUTTON)[0]; + jquery_3["default"](button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)); + }); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + jquery_3["default"].fn[NAME] = Button._jQueryInterface; + jquery_3["default"].fn[NAME].Constructor = Button; + jquery_3["default"].fn[NAME].noConflict = function () { + jquery_3["default"].fn[NAME] = JQUERY_NO_CONFLICT; + return Button._jQueryInterface; + }; + exports.__esModule = true; + exports["default"] = Button; +}); +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.3.1): carousel.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ +define("carousel", ["require", "exports", "jquery", "util"], function (require, exports, jquery_4, util_2) { + "use strict"; + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + var NAME = 'carousel'; + var VERSION = '4.3.1'; + var DATA_KEY = 'bs.carousel'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = jquery_4["default"].fn[NAME]; + var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key + var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key + var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch + var SWIPE_THRESHOLD = 40; + var Default = { + interval: 5000, + keyboard: true, + slide: false, + pause: 'hover', + wrap: true, + touch: true + }; + var DefaultType = { + interval: '(number|boolean)', + keyboard: 'boolean', + slide: '(boolean|string)', + pause: '(string|boolean)', + wrap: 'boolean', + touch: 'boolean' + }; + var Direction = { + NEXT: 'next', + PREV: 'prev', + LEFT: 'left', + RIGHT: 'right' + }; + var Event = { + SLIDE: "slide" + EVENT_KEY, + SLID: "slid" + EVENT_KEY, + KEYDOWN: "keydown" + EVENT_KEY, + MOUSEENTER: "mouseenter" + EVENT_KEY, + MOUSELEAVE: "mouseleave" + EVENT_KEY, + TOUCHSTART: "touchstart" + EVENT_KEY, + TOUCHMOVE: "touchmove" + EVENT_KEY, + TOUCHEND: "touchend" + EVENT_KEY, + POINTERDOWN: "pointerdown" + EVENT_KEY, + POINTERUP: "pointerup" + EVENT_KEY, + DRAG_START: "dragstart" + EVENT_KEY, + LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY + }; + var ClassName = { + CAROUSEL: 'carousel', + ACTIVE: 'active', + SLIDE: 'slide', + RIGHT: 'carousel-item-right', + LEFT: 'carousel-item-left', + NEXT: 'carousel-item-next', + PREV: 'carousel-item-prev', + ITEM: 'carousel-item', + POINTER_EVENT: 'pointer-event' + }; + var Selector = { + ACTIVE: '.active', + ACTIVE_ITEM: '.active.carousel-item', + ITEM: '.carousel-item', + ITEM_IMG: '.carousel-item img', + NEXT_PREV: '.carousel-item-next, .carousel-item-prev', + INDICATORS: '.carousel-indicators', + DATA_SLIDE: '[data-slide], [data-slide-to]', + DATA_RIDE: '[data-ride="carousel"]' + }; + var PointerType = { + TOUCH: 'touch', + PEN: 'pen' }; - - _proto._addTouchEventListeners = function _addTouchEventListeners() { - var _this3 = this; - - if (!this._touchSupported) { - return; - } - - var start = function start(event) { - if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { - _this3.touchStartX = event.originalEvent.clientX; - } else if (!_this3._pointerEvent) { - _this3.touchStartX = event.originalEvent.touches[0].clientX; - } - }; - - var move = function move(event) { - // ensure swiping with one touch and not pinching - if (event.originalEvent.touches && event.originalEvent.touches.length > 1) { - _this3.touchDeltaX = 0; - } else { - _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX; - } - }; - - var end = function end(event) { - if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { - _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX; - } - - _this3._handleSwipe(); - - if (_this3._config.pause === 'hover') { - // If it's a touch-enabled device, mouseenter/leave are fired as - // part of the mouse compatibility events on first tap - the carousel - // would stop cycling until user tapped out of it; - // here, we listen for touchend, explicitly pause the carousel - // (as if it's the second time we tap on it, mouseenter compat event - // is NOT fired) and after a timeout (to allow for mouse compatibility - // events to fire) we explicitly restart cycling - _this3.pause(); - - if (_this3.touchTimeout) { - clearTimeout(_this3.touchTimeout); - } - - _this3.touchTimeout = setTimeout(function (event) { - return _this3.cycle(event); - }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval); - } - }; - - $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) { - return e.preventDefault(); - }); - - if (this._pointerEvent) { - $(this._element).on(Event$2.POINTERDOWN, function (event) { - return start(event); - }); - $(this._element).on(Event$2.POINTERUP, function (event) { - return end(event); - }); - - this._element.classList.add(ClassName$2.POINTER_EVENT); - } else { - $(this._element).on(Event$2.TOUCHSTART, function (event) { - return start(event); + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + var Carousel = (function () { + function Carousel(element, config) { + this._items = null; + this._interval = null; + this._activeElement = null; + this._isPaused = false; + this._isSliding = false; + this.touchTimeout = null; + this.touchStartX = 0; + this.touchDeltaX = 0; + this._config = this._getConfig(config); + this._element = element; + this._indicatorsElement = this._element.querySelector(Selector.INDICATORS); + this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; + this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent); + this._addEventListeners(); + } + Object.defineProperty(Carousel, "VERSION", { + // Getters + get: function () { + return VERSION; + }, + enumerable: true, + configurable: true }); - $(this._element).on(Event$2.TOUCHMOVE, function (event) { - return move(event); + Object.defineProperty(Carousel, "Default", { + get: function () { + return Default; + }, + enumerable: true, + configurable: true }); - $(this._element).on(Event$2.TOUCHEND, function (event) { - return end(event); - }); - } - }; - - _proto._keydown = function _keydown(event) { - if (/input|textarea/i.test(event.target.tagName)) { - return; - } - - switch (event.which) { - case ARROW_LEFT_KEYCODE: - event.preventDefault(); - this.prev(); - break; - - case ARROW_RIGHT_KEYCODE: - event.preventDefault(); - this.next(); - break; - - default: - } - }; - - _proto._getItemIndex = function _getItemIndex(element) { - this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : []; - return this._items.indexOf(element); - }; - - _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { - var isNextDirection = direction === Direction.NEXT; - var isPrevDirection = direction === Direction.PREV; - - var activeIndex = this._getItemIndex(activeElement); - - var lastItemIndex = this._items.length - 1; - var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; - - if (isGoingToWrap && !this._config.wrap) { - return activeElement; - } - - var delta = direction === Direction.PREV ? -1 : 1; - var itemIndex = (activeIndex + delta) % this._items.length; - return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; - }; - - _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { - var targetIndex = this._getItemIndex(relatedTarget); - - var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM)); - - var slideEvent = $.Event(Event$2.SLIDE, { - relatedTarget: relatedTarget, - direction: eventDirectionName, - from: fromIndex, - to: targetIndex - }); - $(this._element).trigger(slideEvent); - return slideEvent; - }; - - _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { - if (this._indicatorsElement) { - var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE)); - $(indicators).removeClass(ClassName$2.ACTIVE); - - var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; - - if (nextIndicator) { - $(nextIndicator).addClass(ClassName$2.ACTIVE); - } - } - }; - - _proto._slide = function _slide(direction, element) { - var _this4 = this; - - var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); - - var activeElementIndex = this._getItemIndex(activeElement); - - var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); - - var nextElementIndex = this._getItemIndex(nextElement); - - var isCycling = Boolean(this._interval); - var directionalClassName; - var orderClassName; - var eventDirectionName; - - if (direction === Direction.NEXT) { - directionalClassName = ClassName$2.LEFT; - orderClassName = ClassName$2.NEXT; - eventDirectionName = Direction.LEFT; - } else { - directionalClassName = ClassName$2.RIGHT; - orderClassName = ClassName$2.PREV; - eventDirectionName = Direction.RIGHT; - } - - if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) { - this._isSliding = false; - return; - } - - var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); - - if (slideEvent.isDefaultPrevented()) { - return; - } - - if (!activeElement || !nextElement) { - // Some weirdness is happening, so we bail - return; - } - - this._isSliding = true; - - if (isCycling) { - this.pause(); - } - - this._setActiveIndicatorElement(nextElement); - - var slidEvent = $.Event(Event$2.SLID, { - relatedTarget: nextElement, - direction: eventDirectionName, - from: activeElementIndex, - to: nextElementIndex - }); - - if ($(this._element).hasClass(ClassName$2.SLIDE)) { - $(nextElement).addClass(orderClassName); - Util.reflow(nextElement); - $(activeElement).addClass(directionalClassName); - $(nextElement).addClass(directionalClassName); - var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10); - - if (nextElementInterval) { - this._config.defaultInterval = this._config.defaultInterval || this._config.interval; - this._config.interval = nextElementInterval; - } else { - this._config.interval = this._config.defaultInterval || this._config.interval; - } - - var transitionDuration = Util.getTransitionDurationFromElement(activeElement); - $(activeElement).one(Util.TRANSITION_END, function () { - $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName$2.ACTIVE); - $(activeElement).removeClass(ClassName$2.ACTIVE + " " + orderClassName + " " + directionalClassName); - _this4._isSliding = false; - setTimeout(function () { - return $(_this4._element).trigger(slidEvent); - }, 0); - }).emulateTransitionEnd(transitionDuration); - } else { - $(activeElement).removeClass(ClassName$2.ACTIVE); - $(nextElement).addClass(ClassName$2.ACTIVE); - this._isSliding = false; - $(this._element).trigger(slidEvent); - } - - if (isCycling) { - this.cycle(); - } - } // Static - ; - - Carousel._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$2); - - var _config = _objectSpread({}, Default, $(this).data()); - - if (typeof config === 'object') { - _config = _objectSpread({}, _config, config); - } - - var action = typeof config === 'string' ? config : _config.slide; - - if (!data) { - data = new Carousel(this, _config); - $(this).data(DATA_KEY$2, data); - } - - if (typeof config === 'number') { - data.to(config); - } else if (typeof action === 'string') { - if (typeof data[action] === 'undefined') { - throw new TypeError("No method named \"" + action + "\""); - } - - data[action](); - } else if (_config.interval && _config.ride) { - data.pause(); - data.cycle(); - } - }); - }; - - Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { - var selector = Util.getSelectorFromElement(this); - - if (!selector) { - return; - } - - var target = $(selector)[0]; - - if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) { - return; - } - - var config = _objectSpread({}, $(target).data(), $(this).data()); - - var slideIndex = this.getAttribute('data-slide-to'); - - if (slideIndex) { - config.interval = false; - } - - Carousel._jQueryInterface.call($(target), config); - - if (slideIndex) { - $(target).data(DATA_KEY$2).to(slideIndex); - } - - event.preventDefault(); - }; - - _createClass(Carousel, null, [{ - key: "VERSION", - get: function get() { - return VERSION$2; - } - }, { - key: "Default", - get: function get() { - return Default; - } - }]); - - return Carousel; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler); - $(window).on(Event$2.LOAD_DATA_API, function () { - var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE)); - - for (var i = 0, len = carousels.length; i < len; i++) { - var $carousel = $(carousels[i]); - - Carousel._jQueryInterface.call($carousel, $carousel.data()); - } - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$2] = Carousel._jQueryInterface; - $.fn[NAME$2].Constructor = Carousel; - - $.fn[NAME$2].noConflict = function () { - $.fn[NAME$2] = JQUERY_NO_CONFLICT$2; - return Carousel._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$3 = 'collapse'; - var VERSION$3 = '4.3.1'; - var DATA_KEY$3 = 'bs.collapse'; - var EVENT_KEY$3 = "." + DATA_KEY$3; - var DATA_API_KEY$3 = '.data-api'; - var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3]; - var Default$1 = { - toggle: true, - parent: '' - }; - var DefaultType$1 = { - toggle: 'boolean', - parent: '(string|element)' - }; - var Event$3 = { - SHOW: "show" + EVENT_KEY$3, - SHOWN: "shown" + EVENT_KEY$3, - HIDE: "hide" + EVENT_KEY$3, - HIDDEN: "hidden" + EVENT_KEY$3, - CLICK_DATA_API: "click" + EVENT_KEY$3 + DATA_API_KEY$3 - }; - var ClassName$3 = { - SHOW: 'show', - COLLAPSE: 'collapse', - COLLAPSING: 'collapsing', - COLLAPSED: 'collapsed' - }; - var Dimension = { - WIDTH: 'width', - HEIGHT: 'height' - }; - var Selector$3 = { - ACTIVES: '.show, .collapsing', - DATA_TOGGLE: '[data-toggle="collapse"]' - /** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - - }; - - var Collapse = - /*#__PURE__*/ - function () { - function Collapse(element, config) { - this._isTransitioning = false; - this._element = element; - this._config = this._getConfig(config); - this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); - var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE)); - - for (var i = 0, len = toggleList.length; i < len; i++) { - var elem = toggleList[i]; - var selector = Util.getSelectorFromElement(elem); - var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { - return foundElem === element; - }); - - if (selector !== null && filterElement.length > 0) { - this._selector = selector; - - this._triggerArray.push(elem); - } - } - - this._parent = this._config.parent ? this._getParent() : null; - - if (!this._config.parent) { - this._addAriaAndCollapsedClass(this._element, this._triggerArray); - } - - if (this._config.toggle) { - this.toggle(); - } - } // Getters - - - var _proto = Collapse.prototype; - - // Public - _proto.toggle = function toggle() { - if ($(this._element).hasClass(ClassName$3.SHOW)) { - this.hide(); - } else { - this.show(); - } - }; - - _proto.show = function show() { - var _this = this; - - if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) { - return; - } - - var actives; - var activesData; - - if (this._parent) { - actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) { - if (typeof _this._config.parent === 'string') { - return elem.getAttribute('data-parent') === _this._config.parent; - } - - return elem.classList.contains(ClassName$3.COLLAPSE); - }); - - if (actives.length === 0) { - actives = null; - } - } - - if (actives) { - activesData = $(actives).not(this._selector).data(DATA_KEY$3); - - if (activesData && activesData._isTransitioning) { - return; - } - } - - var startEvent = $.Event(Event$3.SHOW); - $(this._element).trigger(startEvent); - - if (startEvent.isDefaultPrevented()) { - return; - } - - if (actives) { - Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide'); - - if (!activesData) { - $(actives).data(DATA_KEY$3, null); - } - } - - var dimension = this._getDimension(); - - $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING); - this._element.style[dimension] = 0; - - if (this._triggerArray.length) { - $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true); - } - - this.setTransitioning(true); - - var complete = function complete() { - $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW); - _this._element.style[dimension] = ''; - - _this.setTransitioning(false); - - $(_this._element).trigger(Event$3.SHOWN); - }; - - var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); - var scrollSize = "scroll" + capitalizedDimension; - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - this._element.style[dimension] = this._element[scrollSize] + "px"; - }; - - _proto.hide = function hide() { - var _this2 = this; - - if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) { - return; - } - - var startEvent = $.Event(Event$3.HIDE); - $(this._element).trigger(startEvent); - - if (startEvent.isDefaultPrevented()) { - return; - } - - var dimension = this._getDimension(); - - this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; - Util.reflow(this._element); - $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW); - var triggerArrayLength = this._triggerArray.length; - - if (triggerArrayLength > 0) { - for (var i = 0; i < triggerArrayLength; i++) { - var trigger = this._triggerArray[i]; - var selector = Util.getSelectorFromElement(trigger); - - if (selector !== null) { - var $elem = $([].slice.call(document.querySelectorAll(selector))); - - if (!$elem.hasClass(ClassName$3.SHOW)) { - $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false); + // Public + Carousel.prototype.next = function () { + if (!this._isSliding) { + this._slide(Direction.NEXT); } - } - } - } - - this.setTransitioning(true); - - var complete = function complete() { - _this2.setTransitioning(false); - - $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN); - }; - - this._element.style[dimension] = ''; - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - }; - - _proto.setTransitioning = function setTransitioning(isTransitioning) { - this._isTransitioning = isTransitioning; - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$3); - this._config = null; - this._parent = null; - this._element = null; - this._triggerArray = null; - this._isTransitioning = null; - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default$1, config); - config.toggle = Boolean(config.toggle); // Coerce string values - - Util.typeCheckConfig(NAME$3, config, DefaultType$1); - return config; - }; - - _proto._getDimension = function _getDimension() { - var hasWidth = $(this._element).hasClass(Dimension.WIDTH); - return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; - }; - - _proto._getParent = function _getParent() { - var _this3 = this; - - var parent; - - if (Util.isElement(this._config.parent)) { - parent = this._config.parent; // It's a jQuery object - - if (typeof this._config.parent.jquery !== 'undefined') { - parent = this._config.parent[0]; - } - } else { - parent = document.querySelector(this._config.parent); - } - - var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; - var children = [].slice.call(parent.querySelectorAll(selector)); - $(children).each(function (i, element) { - _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); - }); - return parent; - }; - - _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { - var isOpen = $(element).hasClass(ClassName$3.SHOW); - - if (triggerArray.length) { - $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); - } - } // Static - ; - - Collapse._getTargetFromElement = function _getTargetFromElement(element) { - var selector = Util.getSelectorFromElement(element); - return selector ? document.querySelector(selector) : null; - }; - - Collapse._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var $this = $(this); - var data = $this.data(DATA_KEY$3); - - var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {}); - - if (!data && _config.toggle && /show|hide/.test(config)) { - _config.toggle = false; - } - - if (!data) { - data = new Collapse(this, _config); - $this.data(DATA_KEY$3, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - _createClass(Collapse, null, [{ - key: "VERSION", - get: function get() { - return VERSION$3; - } - }, { - key: "Default", - get: function get() { - return Default$1; - } - }]); - - return Collapse; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) { - // preventDefault only for elements (which change the URL) not inside the collapsible element - if (event.currentTarget.tagName === 'A') { - event.preventDefault(); - } - - var $trigger = $(this); - var selector = Util.getSelectorFromElement(this); - var selectors = [].slice.call(document.querySelectorAll(selector)); - $(selectors).each(function () { - var $target = $(this); - var data = $target.data(DATA_KEY$3); - var config = data ? 'toggle' : $trigger.data(); - - Collapse._jQueryInterface.call($target, config); - }); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$3] = Collapse._jQueryInterface; - $.fn[NAME$3].Constructor = Collapse; - - $.fn[NAME$3].noConflict = function () { - $.fn[NAME$3] = JQUERY_NO_CONFLICT$3; - return Collapse._jQueryInterface; - }; - - /**! - * @fileOverview Kickass library to create and place poppers near their reference elements. - * @version 1.14.7 - * @license - * Copyright (c) 2016 Federico Zivolo and contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; - - var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; - var timeoutDuration = 0; - for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { - if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) { - timeoutDuration = 1; - break; - } - } - - function microtaskDebounce(fn) { - var called = false; - return function () { - if (called) { - return; - } - called = true; - window.Promise.resolve().then(function () { - called = false; - fn(); - }); - }; - } - - function taskDebounce(fn) { - var scheduled = false; - return function () { - if (!scheduled) { - scheduled = true; - setTimeout(function () { - scheduled = false; - fn(); - }, timeoutDuration); - } - }; - } - - var supportsMicroTasks = isBrowser && window.Promise; - - /** - * Create a debounced version of a method, that's asynchronously deferred - * but called in the minimum time possible. - * - * @method - * @memberof Popper.Utils - * @argument {Function} fn - * @returns {Function} - */ - var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce; - - /** - * Check if the given variable is a function - * @method - * @memberof Popper.Utils - * @argument {Any} functionToCheck - variable to check - * @returns {Boolean} answer to: is a function? - */ - function isFunction(functionToCheck) { - var getType = {}; - return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; - } - - /** - * Get CSS computed property of the given element - * @method - * @memberof Popper.Utils - * @argument {Eement} element - * @argument {String} property - */ - function getStyleComputedProperty(element, property) { - if (element.nodeType !== 1) { - return []; - } - // NOTE: 1 DOM access here - var window = element.ownerDocument.defaultView; - var css = window.getComputedStyle(element, null); - return property ? css[property] : css; - } - - /** - * Returns the parentNode or the host of the element - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} parent - */ - function getParentNode(element) { - if (element.nodeName === 'HTML') { - return element; - } - return element.parentNode || element.host; - } - - /** - * Returns the scrolling parent of the given element - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} scroll parent - */ - function getScrollParent(element) { - // Return body, `getScroll` will take care to get the correct `scrollTop` from it - if (!element) { - return document.body; - } - - switch (element.nodeName) { - case 'HTML': - case 'BODY': - return element.ownerDocument.body; - case '#document': - return element.body; - } - - // Firefox want us to check `-x` and `-y` variations as well - - var _getStyleComputedProp = getStyleComputedProperty(element), - overflow = _getStyleComputedProp.overflow, - overflowX = _getStyleComputedProp.overflowX, - overflowY = _getStyleComputedProp.overflowY; - - if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) { - return element; - } - - return getScrollParent(getParentNode(element)); - } - - var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); - var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); - - /** - * Determines if the browser is Internet Explorer - * @method - * @memberof Popper.Utils - * @param {Number} version to check - * @returns {Boolean} isIE - */ - function isIE(version) { - if (version === 11) { - return isIE11; - } - if (version === 10) { - return isIE10; - } - return isIE11 || isIE10; - } - - /** - * Returns the offset parent of the given element - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} offset parent - */ - function getOffsetParent(element) { - if (!element) { - return document.documentElement; - } - - var noOffsetParent = isIE(10) ? document.body : null; - - // NOTE: 1 DOM access here - var offsetParent = element.offsetParent || null; - // Skip hidden elements which don't have an offsetParent - while (offsetParent === noOffsetParent && element.nextElementSibling) { - offsetParent = (element = element.nextElementSibling).offsetParent; - } - - var nodeName = offsetParent && offsetParent.nodeName; - - if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { - return element ? element.ownerDocument.documentElement : document.documentElement; - } - - // .offsetParent will return the closest TH, TD or TABLE in case - // no offsetParent is present, I hate this job... - if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') { - return getOffsetParent(offsetParent); - } - - return offsetParent; - } - - function isOffsetContainer(element) { - var nodeName = element.nodeName; - - if (nodeName === 'BODY') { - return false; - } - return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element; - } - - /** - * Finds the root node (document, shadowDOM root) of the given element - * @method - * @memberof Popper.Utils - * @argument {Element} node - * @returns {Element} root node - */ - function getRoot(node) { - if (node.parentNode !== null) { - return getRoot(node.parentNode); - } - - return node; - } - - /** - * Finds the offset parent common to the two provided nodes - * @method - * @memberof Popper.Utils - * @argument {Element} element1 - * @argument {Element} element2 - * @returns {Element} common offset parent - */ - function findCommonOffsetParent(element1, element2) { - // This check is needed to avoid errors in case one of the elements isn't defined for any reason - if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) { - return document.documentElement; - } - - // Here we make sure to give as "start" the element that comes first in the DOM - var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING; - var start = order ? element1 : element2; - var end = order ? element2 : element1; - - // Get common ancestor container - var range = document.createRange(); - range.setStart(start, 0); - range.setEnd(end, 0); - var commonAncestorContainer = range.commonAncestorContainer; - - // Both nodes are inside #document - - if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) { - if (isOffsetContainer(commonAncestorContainer)) { - return commonAncestorContainer; - } - - return getOffsetParent(commonAncestorContainer); - } - - // one of the nodes is inside shadowDOM, find which one - var element1root = getRoot(element1); - if (element1root.host) { - return findCommonOffsetParent(element1root.host, element2); - } else { - return findCommonOffsetParent(element1, getRoot(element2).host); - } - } - - /** - * Gets the scroll value of the given element in the given side (top and left) - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @argument {String} side `top` or `left` - * @returns {number} amount of scrolled pixels - */ - function getScroll(element) { - var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top'; - - var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft'; - var nodeName = element.nodeName; - - if (nodeName === 'BODY' || nodeName === 'HTML') { - var html = element.ownerDocument.documentElement; - var scrollingElement = element.ownerDocument.scrollingElement || html; - return scrollingElement[upperSide]; - } - - return element[upperSide]; - } - - /* - * Sum or subtract the element scroll values (left and top) from a given rect object - * @method - * @memberof Popper.Utils - * @param {Object} rect - Rect object you want to change - * @param {HTMLElement} element - The element from the function reads the scroll values - * @param {Boolean} subtract - set to true if you want to subtract the scroll values - * @return {Object} rect - The modifier rect object - */ - function includeScroll(rect, element) { - var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - var scrollTop = getScroll(element, 'top'); - var scrollLeft = getScroll(element, 'left'); - var modifier = subtract ? -1 : 1; - rect.top += scrollTop * modifier; - rect.bottom += scrollTop * modifier; - rect.left += scrollLeft * modifier; - rect.right += scrollLeft * modifier; - return rect; - } - - /* - * Helper to detect borders of a given element - * @method - * @memberof Popper.Utils - * @param {CSSStyleDeclaration} styles - * Result of `getStyleComputedProperty` on the given element - * @param {String} axis - `x` or `y` - * @return {number} borders - The borders size of the given axis - */ - - function getBordersSize(styles, axis) { - var sideA = axis === 'x' ? 'Left' : 'Top'; - var sideB = sideA === 'Left' ? 'Right' : 'Bottom'; - - return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10); - } - - function getSize(axis, body, html, computedStyle) { - return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0); - } - - function getWindowSizes(document) { - var body = document.body; - var html = document.documentElement; - var computedStyle = isIE(10) && getComputedStyle(html); - - return { - height: getSize('Height', body, html, computedStyle), - width: getSize('Width', body, html, computedStyle) - }; - } - - var classCallCheck = function (instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - }; - - var createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; - }(); - - - - - - var defineProperty = function (obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - }; - - var _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - /** - * Given element offsets, generate an output similar to getBoundingClientRect - * @method - * @memberof Popper.Utils - * @argument {Object} offsets - * @returns {Object} ClientRect like output - */ - function getClientRect(offsets) { - return _extends({}, offsets, { - right: offsets.left + offsets.width, - bottom: offsets.top + offsets.height - }); - } - - /** - * Get bounding client rect of given element - * @method - * @memberof Popper.Utils - * @param {HTMLElement} element - * @return {Object} client rect - */ - function getBoundingClientRect(element) { - var rect = {}; - - // IE10 10 FIX: Please, don't ask, the element isn't - // considered in DOM in some circumstances... - // This isn't reproducible in IE10 compatibility mode of IE11 - try { - if (isIE(10)) { - rect = element.getBoundingClientRect(); - var scrollTop = getScroll(element, 'top'); - var scrollLeft = getScroll(element, 'left'); - rect.top += scrollTop; - rect.left += scrollLeft; - rect.bottom += scrollTop; - rect.right += scrollLeft; - } else { - rect = element.getBoundingClientRect(); - } - } catch (e) {} - - var result = { - left: rect.left, - top: rect.top, - width: rect.right - rect.left, - height: rect.bottom - rect.top - }; - - // subtract scrollbar size from sizes - var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {}; - var width = sizes.width || element.clientWidth || result.right - result.left; - var height = sizes.height || element.clientHeight || result.bottom - result.top; - - var horizScrollbar = element.offsetWidth - width; - var vertScrollbar = element.offsetHeight - height; - - // if an hypothetical scrollbar is detected, we must be sure it's not a `border` - // we make this check conditional for performance reasons - if (horizScrollbar || vertScrollbar) { - var styles = getStyleComputedProperty(element); - horizScrollbar -= getBordersSize(styles, 'x'); - vertScrollbar -= getBordersSize(styles, 'y'); - - result.width -= horizScrollbar; - result.height -= vertScrollbar; - } - - return getClientRect(result); - } - - function getOffsetRectRelativeToArbitraryNode(children, parent) { - var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - var isIE10 = isIE(10); - var isHTML = parent.nodeName === 'HTML'; - var childrenRect = getBoundingClientRect(children); - var parentRect = getBoundingClientRect(parent); - var scrollParent = getScrollParent(children); - - var styles = getStyleComputedProperty(parent); - var borderTopWidth = parseFloat(styles.borderTopWidth, 10); - var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10); - - // In cases where the parent is fixed, we must ignore negative scroll in offset calc - if (fixedPosition && isHTML) { - parentRect.top = Math.max(parentRect.top, 0); - parentRect.left = Math.max(parentRect.left, 0); - } - var offsets = getClientRect({ - top: childrenRect.top - parentRect.top - borderTopWidth, - left: childrenRect.left - parentRect.left - borderLeftWidth, - width: childrenRect.width, - height: childrenRect.height - }); - offsets.marginTop = 0; - offsets.marginLeft = 0; - - // Subtract margins of documentElement in case it's being used as parent - // we do this only on HTML because it's the only element that behaves - // differently when margins are applied to it. The margins are included in - // the box of the documentElement, in the other cases not. - if (!isIE10 && isHTML) { - var marginTop = parseFloat(styles.marginTop, 10); - var marginLeft = parseFloat(styles.marginLeft, 10); - - offsets.top -= borderTopWidth - marginTop; - offsets.bottom -= borderTopWidth - marginTop; - offsets.left -= borderLeftWidth - marginLeft; - offsets.right -= borderLeftWidth - marginLeft; - - // Attach marginTop and marginLeft because in some circumstances we may need them - offsets.marginTop = marginTop; - offsets.marginLeft = marginLeft; - } - - if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') { - offsets = includeScroll(offsets, parent); - } - - return offsets; - } - - function getViewportOffsetRectRelativeToArtbitraryNode(element) { - var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var html = element.ownerDocument.documentElement; - var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html); - var width = Math.max(html.clientWidth, window.innerWidth || 0); - var height = Math.max(html.clientHeight, window.innerHeight || 0); - - var scrollTop = !excludeScroll ? getScroll(html) : 0; - var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0; - - var offset = { - top: scrollTop - relativeOffset.top + relativeOffset.marginTop, - left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft, - width: width, - height: height - }; - - return getClientRect(offset); - } - - /** - * Check if the given element is fixed or is inside a fixed parent - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @argument {Element} customContainer - * @returns {Boolean} answer to "isFixed?" - */ - function isFixed(element) { - var nodeName = element.nodeName; - if (nodeName === 'BODY' || nodeName === 'HTML') { - return false; - } - if (getStyleComputedProperty(element, 'position') === 'fixed') { - return true; - } - var parentNode = getParentNode(element); - if (!parentNode) { - return false; - } - return isFixed(parentNode); - } - - /** - * Finds the first parent of an element that has a transformed property defined - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} first transformed parent or documentElement - */ - - function getFixedPositionOffsetParent(element) { - // This check is needed to avoid errors in case one of the elements isn't defined for any reason - if (!element || !element.parentElement || isIE()) { - return document.documentElement; - } - var el = element.parentElement; - while (el && getStyleComputedProperty(el, 'transform') === 'none') { - el = el.parentElement; - } - return el || document.documentElement; - } - - /** - * Computed the boundaries limits and return them - * @method - * @memberof Popper.Utils - * @param {HTMLElement} popper - * @param {HTMLElement} reference - * @param {number} padding - * @param {HTMLElement} boundariesElement - Element used to define the boundaries - * @param {Boolean} fixedPosition - Is in fixed position mode - * @returns {Object} Coordinates of the boundaries - */ - function getBoundaries(popper, reference, padding, boundariesElement) { - var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; - - // NOTE: 1 DOM access here - - var boundaries = { top: 0, left: 0 }; - var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference); - - // Handle viewport case - if (boundariesElement === 'viewport') { - boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition); - } else { - // Handle other cases based on DOM element used as boundaries - var boundariesNode = void 0; - if (boundariesElement === 'scrollParent') { - boundariesNode = getScrollParent(getParentNode(reference)); - if (boundariesNode.nodeName === 'BODY') { - boundariesNode = popper.ownerDocument.documentElement; - } - } else if (boundariesElement === 'window') { - boundariesNode = popper.ownerDocument.documentElement; - } else { - boundariesNode = boundariesElement; - } - - var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); - - // In case of HTML, we need a different computation - if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) { - var _getWindowSizes = getWindowSizes(popper.ownerDocument), - height = _getWindowSizes.height, - width = _getWindowSizes.width; - - boundaries.top += offsets.top - offsets.marginTop; - boundaries.bottom = height + offsets.top; - boundaries.left += offsets.left - offsets.marginLeft; - boundaries.right = width + offsets.left; - } else { - // for all the other DOM elements, this one is good - boundaries = offsets; - } - } - - // Add paddings - padding = padding || 0; - var isPaddingNumber = typeof padding === 'number'; - boundaries.left += isPaddingNumber ? padding : padding.left || 0; - boundaries.top += isPaddingNumber ? padding : padding.top || 0; - boundaries.right -= isPaddingNumber ? padding : padding.right || 0; - boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; - - return boundaries; - } - - function getArea(_ref) { - var width = _ref.width, - height = _ref.height; - - return width * height; - } - - /** - * Utility used to transform the `auto` placement to the placement with more - * available space. - * @method - * @memberof Popper.Utils - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) { - var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; - - if (placement.indexOf('auto') === -1) { - return placement; - } - - var boundaries = getBoundaries(popper, reference, padding, boundariesElement); - - var rects = { - top: { - width: boundaries.width, - height: refRect.top - boundaries.top - }, - right: { - width: boundaries.right - refRect.right, - height: boundaries.height - }, - bottom: { - width: boundaries.width, - height: boundaries.bottom - refRect.bottom - }, - left: { - width: refRect.left - boundaries.left, - height: boundaries.height - } - }; - - var sortedAreas = Object.keys(rects).map(function (key) { - return _extends({ - key: key - }, rects[key], { - area: getArea(rects[key]) - }); - }).sort(function (a, b) { - return b.area - a.area; - }); - - var filteredAreas = sortedAreas.filter(function (_ref2) { - var width = _ref2.width, - height = _ref2.height; - return width >= popper.clientWidth && height >= popper.clientHeight; - }); - - var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key; - - var variation = placement.split('-')[1]; - - return computedPlacement + (variation ? '-' + variation : ''); - } - - /** - * Get offsets to the reference element - * @method - * @memberof Popper.Utils - * @param {Object} state - * @param {Element} popper - the popper element - * @param {Element} reference - the reference element (the popper will be relative to this) - * @param {Element} fixedPosition - is in fixed position mode - * @returns {Object} An object containing the offsets which will be applied to the popper - */ - function getReferenceOffsets(state, popper, reference) { - var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - - var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference); - return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition); - } - - /** - * Get the outer sizes of the given element (offset size + margins) - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Object} object containing width and height properties - */ - function getOuterSizes(element) { - var window = element.ownerDocument.defaultView; - var styles = window.getComputedStyle(element); - var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0); - var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0); - var result = { - width: element.offsetWidth + y, - height: element.offsetHeight + x - }; - return result; - } - - /** - * Get the opposite placement of the given one - * @method - * @memberof Popper.Utils - * @argument {String} placement - * @returns {String} flipped placement - */ - function getOppositePlacement(placement) { - var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; - return placement.replace(/left|right|bottom|top/g, function (matched) { - return hash[matched]; - }); - } - - /** - * Get offsets to the popper - * @method - * @memberof Popper.Utils - * @param {Object} position - CSS position the Popper will get applied - * @param {HTMLElement} popper - the popper element - * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this) - * @param {String} placement - one of the valid placement options - * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper - */ - function getPopperOffsets(popper, referenceOffsets, placement) { - placement = placement.split('-')[0]; - - // Get popper node sizes - var popperRect = getOuterSizes(popper); - - // Add position, width and height to our offsets object - var popperOffsets = { - width: popperRect.width, - height: popperRect.height - }; - - // depending by the popper placement we have to compute its offsets slightly differently - var isHoriz = ['right', 'left'].indexOf(placement) !== -1; - var mainSide = isHoriz ? 'top' : 'left'; - var secondarySide = isHoriz ? 'left' : 'top'; - var measurement = isHoriz ? 'height' : 'width'; - var secondaryMeasurement = !isHoriz ? 'height' : 'width'; - - popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2; - if (placement === secondarySide) { - popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement]; - } else { - popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)]; - } - - return popperOffsets; - } - - /** - * Mimics the `find` method of Array - * @method - * @memberof Popper.Utils - * @argument {Array} arr - * @argument prop - * @argument value - * @returns index or -1 - */ - function find(arr, check) { - // use native find if supported - if (Array.prototype.find) { - return arr.find(check); - } - - // use `filter` to obtain the same behavior of `find` - return arr.filter(check)[0]; - } - - /** - * Return the index of the matching object - * @method - * @memberof Popper.Utils - * @argument {Array} arr - * @argument prop - * @argument value - * @returns index or -1 - */ - function findIndex(arr, prop, value) { - // use native findIndex if supported - if (Array.prototype.findIndex) { - return arr.findIndex(function (cur) { - return cur[prop] === value; - }); - } - - // use `find` + `indexOf` if `findIndex` isn't supported - var match = find(arr, function (obj) { - return obj[prop] === value; - }); - return arr.indexOf(match); - } - - /** - * Loop trough the list of modifiers and run them in order, - * each of them will then edit the data object. - * @method - * @memberof Popper.Utils - * @param {dataObject} data - * @param {Array} modifiers - * @param {String} ends - Optional modifier name used as stopper - * @returns {dataObject} - */ - function runModifiers(modifiers, data, ends) { - var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends)); - - modifiersToRun.forEach(function (modifier) { - if (modifier['function']) { - // eslint-disable-line dot-notation - console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); - } - var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation - if (modifier.enabled && isFunction(fn)) { - // Add properties to offsets to make them a complete clientRect object - // we do this before each modifier to make sure the previous one doesn't - // mess with these values - data.offsets.popper = getClientRect(data.offsets.popper); - data.offsets.reference = getClientRect(data.offsets.reference); - - data = fn(data, modifier); - } - }); - - return data; - } - - /** - * Updates the position of the popper, computing the new offsets and applying - * the new style.
    - * Prefer `scheduleUpdate` over `update` because of performance reasons. - * @method - * @memberof Popper - */ - function update() { - // if popper is destroyed, don't perform any further update - if (this.state.isDestroyed) { - return; - } - - var data = { - instance: this, - styles: {}, - arrowStyles: {}, - attributes: {}, - flipped: false, - offsets: {} - }; - - // compute reference element offsets - data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); - - // compute auto placement, store placement inside the data object, - // modifiers will be able to edit `placement` if needed - // and refer to originalPlacement to know the original value - data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); - - // store the computed placement inside `originalPlacement` - data.originalPlacement = data.placement; - - data.positionFixed = this.options.positionFixed; - - // compute the popper offsets - data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); - - data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; - - // run the modifiers - data = runModifiers(this.modifiers, data); - - // the first `update` will call `onCreate` callback - // the other ones will call `onUpdate` callback - if (!this.state.isCreated) { - this.state.isCreated = true; - this.options.onCreate(data); - } else { - this.options.onUpdate(data); - } - } - - /** - * Helper used to know if the given modifier is enabled. - * @method - * @memberof Popper.Utils - * @returns {Boolean} - */ - function isModifierEnabled(modifiers, modifierName) { - return modifiers.some(function (_ref) { - var name = _ref.name, - enabled = _ref.enabled; - return enabled && name === modifierName; - }); - } - - /** - * Get the prefixed supported property name - * @method - * @memberof Popper.Utils - * @argument {String} property (camelCase) - * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix) - */ - function getSupportedPropertyName(property) { - var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O']; - var upperProp = property.charAt(0).toUpperCase() + property.slice(1); - - for (var i = 0; i < prefixes.length; i++) { - var prefix = prefixes[i]; - var toCheck = prefix ? '' + prefix + upperProp : property; - if (typeof document.body.style[toCheck] !== 'undefined') { - return toCheck; - } - } - return null; - } - - /** - * Destroys the popper. - * @method - * @memberof Popper - */ - function destroy() { - this.state.isDestroyed = true; - - // touch DOM only if `applyStyle` modifier is enabled - if (isModifierEnabled(this.modifiers, 'applyStyle')) { - this.popper.removeAttribute('x-placement'); - this.popper.style.position = ''; - this.popper.style.top = ''; - this.popper.style.left = ''; - this.popper.style.right = ''; - this.popper.style.bottom = ''; - this.popper.style.willChange = ''; - this.popper.style[getSupportedPropertyName('transform')] = ''; - } - - this.disableEventListeners(); - - // remove the popper if user explicity asked for the deletion on destroy - // do not use `remove` because IE11 doesn't support it - if (this.options.removeOnDestroy) { - this.popper.parentNode.removeChild(this.popper); - } - return this; - } - - /** - * Get the window associated with the element - * @argument {Element} element - * @returns {Window} - */ - function getWindow(element) { - var ownerDocument = element.ownerDocument; - return ownerDocument ? ownerDocument.defaultView : window; - } - - function attachToScrollParents(scrollParent, event, callback, scrollParents) { - var isBody = scrollParent.nodeName === 'BODY'; - var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent; - target.addEventListener(event, callback, { passive: true }); - - if (!isBody) { - attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents); - } - scrollParents.push(target); - } - - /** - * Setup needed event listeners used to update the popper position - * @method - * @memberof Popper.Utils - * @private - */ - function setupEventListeners(reference, options, state, updateBound) { - // Resize event listener on window - state.updateBound = updateBound; - getWindow(reference).addEventListener('resize', state.updateBound, { passive: true }); - - // Scroll event listener on scroll parents - var scrollElement = getScrollParent(reference); - attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents); - state.scrollElement = scrollElement; - state.eventsEnabled = true; - - return state; - } - - /** - * It will add resize/scroll events and start recalculating - * position of the popper element when they are triggered. - * @method - * @memberof Popper - */ - function enableEventListeners() { - if (!this.state.eventsEnabled) { - this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate); - } - } - - /** - * Remove event listeners used to update the popper position - * @method - * @memberof Popper.Utils - * @private - */ - function removeEventListeners(reference, state) { - // Remove resize event listener on window - getWindow(reference).removeEventListener('resize', state.updateBound); - - // Remove scroll event listener on scroll parents - state.scrollParents.forEach(function (target) { - target.removeEventListener('scroll', state.updateBound); - }); - - // Reset state - state.updateBound = null; - state.scrollParents = []; - state.scrollElement = null; - state.eventsEnabled = false; - return state; - } - - /** - * It will remove resize/scroll events and won't recalculate popper position - * when they are triggered. It also won't trigger `onUpdate` callback anymore, - * unless you call `update` method manually. - * @method - * @memberof Popper - */ - function disableEventListeners() { - if (this.state.eventsEnabled) { - cancelAnimationFrame(this.scheduleUpdate); - this.state = removeEventListeners(this.reference, this.state); - } - } - - /** - * Tells if a given input is a number - * @method - * @memberof Popper.Utils - * @param {*} input to check - * @return {Boolean} - */ - function isNumeric(n) { - return n !== '' && !isNaN(parseFloat(n)) && isFinite(n); - } - - /** - * Set the style to the given popper - * @method - * @memberof Popper.Utils - * @argument {Element} element - Element to apply the style to - * @argument {Object} styles - * Object with a list of properties and values which will be applied to the element - */ - function setStyles(element, styles) { - Object.keys(styles).forEach(function (prop) { - var unit = ''; - // add unit if the value is numeric and is one of the following - if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) { - unit = 'px'; - } - element.style[prop] = styles[prop] + unit; - }); - } - - /** - * Set the attributes to the given popper - * @method - * @memberof Popper.Utils - * @argument {Element} element - Element to apply the attributes to - * @argument {Object} styles - * Object with a list of properties and values which will be applied to the element - */ - function setAttributes(element, attributes) { - Object.keys(attributes).forEach(function (prop) { - var value = attributes[prop]; - if (value !== false) { - element.setAttribute(prop, attributes[prop]); - } else { - element.removeAttribute(prop); - } - }); - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} data.styles - List of style properties - values to apply to popper element - * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The same data object - */ - function applyStyle(data) { - // any property present in `data.styles` will be applied to the popper, - // in this way we can make the 3rd party modifiers add custom styles to it - // Be aware, modifiers could override the properties defined in the previous - // lines of this modifier! - setStyles(data.instance.popper, data.styles); - - // any property present in `data.attributes` will be applied to the popper, - // they will be set as HTML attributes of the element - setAttributes(data.instance.popper, data.attributes); - - // if arrowElement is defined and arrowStyles has some properties - if (data.arrowElement && Object.keys(data.arrowStyles).length) { - setStyles(data.arrowElement, data.arrowStyles); - } - - return data; - } - - /** - * Set the x-placement attribute before everything else because it could be used - * to add margins to the popper margins needs to be calculated to get the - * correct popper offsets. - * @method - * @memberof Popper.modifiers - * @param {HTMLElement} reference - The reference element used to position the popper - * @param {HTMLElement} popper - The HTML element used as popper - * @param {Object} options - Popper.js options - */ - function applyStyleOnLoad(reference, popper, options, modifierOptions, state) { - // compute reference element offsets - var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); - - // compute auto placement, store placement inside the data object, - // modifiers will be able to edit `placement` if needed - // and refer to originalPlacement to know the original value - var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding); - - popper.setAttribute('x-placement', placement); - - // Apply `position` to popper before anything else because - // without the position applied we can't guarantee correct computations - setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' }); - - return options; - } - - /** - * @function - * @memberof Popper.Utils - * @argument {Object} data - The data object generated by `update` method - * @argument {Boolean} shouldRound - If the offsets should be rounded at all - * @returns {Object} The popper's position offsets rounded - * - * The tale of pixel-perfect positioning. It's still not 100% perfect, but as - * good as it can be within reason. - * Discussion here: https://github.com/FezVrasta/popper.js/pull/715 - * - * Low DPI screens cause a popper to be blurry if not using full pixels (Safari - * as well on High DPI screens). - * - * Firefox prefers no rounding for positioning and does not have blurriness on - * high DPI screens. - * - * Only horizontal placement and left/right values need to be considered. - */ - function getRoundedOffsets(data, shouldRound) { - var _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - var round = Math.round, - floor = Math.floor; - - var noRound = function noRound(v) { - return v; - }; - - var referenceWidth = round(reference.width); - var popperWidth = round(popper.width); - - var isVertical = ['left', 'right'].indexOf(data.placement) !== -1; - var isVariation = data.placement.indexOf('-') !== -1; - var sameWidthParity = referenceWidth % 2 === popperWidth % 2; - var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1; - - var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor; - var verticalToInteger = !shouldRound ? noRound : round; - - return { - left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left), - top: verticalToInteger(popper.top), - bottom: verticalToInteger(popper.bottom), - right: horizontalToInteger(popper.right) - }; - } - - var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent); - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function computeStyle(data, options) { - var x = options.x, - y = options.y; - var popper = data.offsets.popper; - - // Remove this legacy support in Popper.js v2 - - var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) { - return modifier.name === 'applyStyle'; - }).gpuAcceleration; - if (legacyGpuAccelerationOption !== undefined) { - console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'); - } - var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration; - - var offsetParent = getOffsetParent(data.instance.popper); - var offsetParentRect = getBoundingClientRect(offsetParent); - - // Styles - var styles = { - position: popper.position - }; - - var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox); - - var sideA = x === 'bottom' ? 'top' : 'bottom'; - var sideB = y === 'right' ? 'left' : 'right'; - - // if gpuAcceleration is set to `true` and transform is supported, - // we use `translate3d` to apply the position to the popper we - // automatically use the supported prefixed version if needed - var prefixedProperty = getSupportedPropertyName('transform'); - - // now, let's make a step back and look at this code closely (wtf?) - // If the content of the popper grows once it's been positioned, it - // may happen that the popper gets misplaced because of the new content - // overflowing its reference element - // To avoid this problem, we provide two options (x and y), which allow - // the consumer to define the offset origin. - // If we position a popper on top of a reference element, we can set - // `x` to `top` to make the popper grow towards its top instead of - // its bottom. - var left = void 0, - top = void 0; - if (sideA === 'bottom') { - // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar) - // and not the bottom of the html element - if (offsetParent.nodeName === 'HTML') { - top = -offsetParent.clientHeight + offsets.bottom; - } else { - top = -offsetParentRect.height + offsets.bottom; - } - } else { - top = offsets.top; - } - if (sideB === 'right') { - if (offsetParent.nodeName === 'HTML') { - left = -offsetParent.clientWidth + offsets.right; - } else { - left = -offsetParentRect.width + offsets.right; - } - } else { - left = offsets.left; - } - if (gpuAcceleration && prefixedProperty) { - styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)'; - styles[sideA] = 0; - styles[sideB] = 0; - styles.willChange = 'transform'; - } else { - // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties - var invertTop = sideA === 'bottom' ? -1 : 1; - var invertLeft = sideB === 'right' ? -1 : 1; - styles[sideA] = top * invertTop; - styles[sideB] = left * invertLeft; - styles.willChange = sideA + ', ' + sideB; - } - - // Attributes - var attributes = { - 'x-placement': data.placement - }; - - // Update `data` attributes, styles and arrowStyles - data.attributes = _extends({}, attributes, data.attributes); - data.styles = _extends({}, styles, data.styles); - data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles); - - return data; - } - - /** - * Helper used to know if the given modifier depends from another one.
    - * It checks if the needed modifier is listed and enabled. - * @method - * @memberof Popper.Utils - * @param {Array} modifiers - list of modifiers - * @param {String} requestingName - name of requesting modifier - * @param {String} requestedName - name of requested modifier - * @returns {Boolean} - */ - function isModifierRequired(modifiers, requestingName, requestedName) { - var requesting = find(modifiers, function (_ref) { - var name = _ref.name; - return name === requestingName; - }); - - var isRequired = !!requesting && modifiers.some(function (modifier) { - return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order; - }); - - if (!isRequired) { - var _requesting = '`' + requestingName + '`'; - var requested = '`' + requestedName + '`'; - console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!'); - } - return isRequired; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function arrow(data, options) { - var _data$offsets$arrow; - - // arrow depends on keepTogether in order to work - if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) { - return data; - } - - var arrowElement = options.element; - - // if arrowElement is a string, suppose it's a CSS selector - if (typeof arrowElement === 'string') { - arrowElement = data.instance.popper.querySelector(arrowElement); - - // if arrowElement is not found, don't run the modifier - if (!arrowElement) { - return data; - } - } else { - // if the arrowElement isn't a query selector we must check that the - // provided DOM node is child of its popper node - if (!data.instance.popper.contains(arrowElement)) { - console.warn('WARNING: `arrow.element` must be child of its popper element!'); - return data; - } - } - - var placement = data.placement.split('-')[0]; - var _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - - var isVertical = ['left', 'right'].indexOf(placement) !== -1; - - var len = isVertical ? 'height' : 'width'; - var sideCapitalized = isVertical ? 'Top' : 'Left'; - var side = sideCapitalized.toLowerCase(); - var altSide = isVertical ? 'left' : 'top'; - var opSide = isVertical ? 'bottom' : 'right'; - var arrowElementSize = getOuterSizes(arrowElement)[len]; - - // - // extends keepTogether behavior making sure the popper and its - // reference have enough pixels in conjunction - // - - // top/left side - if (reference[opSide] - arrowElementSize < popper[side]) { - data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize); - } - // bottom/right side - if (reference[side] + arrowElementSize > popper[opSide]) { - data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide]; - } - data.offsets.popper = getClientRect(data.offsets.popper); - - // compute center of the popper - var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; - - // Compute the sideValue using the updated popper offsets - // take popper margin in account because we don't have this info available - var css = getStyleComputedProperty(data.instance.popper); - var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10); - var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10); - var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; - - // prevent arrowElement from being placed not contiguously to its popper - sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0); - - data.arrowElement = arrowElement; - data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow); - - return data; - } - - /** - * Get the opposite placement variation of the given one - * @method - * @memberof Popper.Utils - * @argument {String} placement variation - * @returns {String} flipped placement variation - */ - function getOppositeVariation(variation) { - if (variation === 'end') { - return 'start'; - } else if (variation === 'start') { - return 'end'; - } - return variation; - } - - /** - * List of accepted placements to use as values of the `placement` option.
    - * Valid placements are: - * - `auto` - * - `top` - * - `right` - * - `bottom` - * - `left` - * - * Each placement can have a variation from this list: - * - `-start` - * - `-end` - * - * Variations are interpreted easily if you think of them as the left to right - * written languages. Horizontally (`top` and `bottom`), `start` is left and `end` - * is right.
    - * Vertically (`left` and `right`), `start` is top and `end` is bottom. - * - * Some valid examples are: - * - `top-end` (on top of reference, right aligned) - * - `right-start` (on right of reference, top aligned) - * - `bottom` (on bottom, centered) - * - `auto-end` (on the side with more space available, alignment depends by placement) - * - * @static - * @type {Array} - * @enum {String} - * @readonly - * @method placements - * @memberof Popper - */ - var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']; - - // Get rid of `auto` `auto-start` and `auto-end` - var validPlacements = placements.slice(3); - - /** - * Given an initial placement, returns all the subsequent placements - * clockwise (or counter-clockwise). - * - * @method - * @memberof Popper.Utils - * @argument {String} placement - A valid placement (it accepts variations) - * @argument {Boolean} counter - Set to true to walk the placements counterclockwise - * @returns {Array} placements including their variations - */ - function clockwise(placement) { - var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var index = validPlacements.indexOf(placement); - var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index)); - return counter ? arr.reverse() : arr; - } - - var BEHAVIORS = { - FLIP: 'flip', - CLOCKWISE: 'clockwise', - COUNTERCLOCKWISE: 'counterclockwise' - }; - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function flip(data, options) { - // if `inner` modifier is enabled, we can't use the `flip` modifier - if (isModifierEnabled(data.instance.modifiers, 'inner')) { - return data; - } - - if (data.flipped && data.placement === data.originalPlacement) { - // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides - return data; - } - - var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed); - - var placement = data.placement.split('-')[0]; - var placementOpposite = getOppositePlacement(placement); - var variation = data.placement.split('-')[1] || ''; - - var flipOrder = []; - - switch (options.behavior) { - case BEHAVIORS.FLIP: - flipOrder = [placement, placementOpposite]; - break; - case BEHAVIORS.CLOCKWISE: - flipOrder = clockwise(placement); - break; - case BEHAVIORS.COUNTERCLOCKWISE: - flipOrder = clockwise(placement, true); - break; - default: - flipOrder = options.behavior; - } - - flipOrder.forEach(function (step, index) { - if (placement !== step || flipOrder.length === index + 1) { - return data; - } - - placement = data.placement.split('-')[0]; - placementOpposite = getOppositePlacement(placement); - - var popperOffsets = data.offsets.popper; - var refOffsets = data.offsets.reference; - - // using floor because the reference offsets may contain decimals we are not going to consider here - var floor = Math.floor; - var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom); - - var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left); - var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right); - var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top); - var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom); - - var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; - - // flip the variation if required - var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; - var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom); - - if (overlapsRef || overflowsBoundaries || flippedVariation) { - // this boolean to detect any flip loop - data.flipped = true; - - if (overlapsRef || overflowsBoundaries) { - placement = flipOrder[index + 1]; - } - - if (flippedVariation) { - variation = getOppositeVariation(variation); - } - - data.placement = placement + (variation ? '-' + variation : ''); - - // this object contains `position`, we want to preserve it along with - // any additional property we may add in the future - data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement)); - - data = runModifiers(data.instance.modifiers, data, 'flip'); - } - }); - return data; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function keepTogether(data) { - var _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - - var placement = data.placement.split('-')[0]; - var floor = Math.floor; - var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; - var side = isVertical ? 'right' : 'bottom'; - var opSide = isVertical ? 'left' : 'top'; - var measurement = isVertical ? 'width' : 'height'; - - if (popper[side] < floor(reference[opSide])) { - data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement]; - } - if (popper[opSide] > floor(reference[side])) { - data.offsets.popper[opSide] = floor(reference[side]); - } - - return data; - } - - /** - * Converts a string containing value + unit into a px value number - * @function - * @memberof {modifiers~offset} - * @private - * @argument {String} str - Value + unit string - * @argument {String} measurement - `height` or `width` - * @argument {Object} popperOffsets - * @argument {Object} referenceOffsets - * @returns {Number|String} - * Value in pixels, or original string if no values were extracted - */ - function toValue(str, measurement, popperOffsets, referenceOffsets) { - // separate value from unit - var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/); - var value = +split[1]; - var unit = split[2]; - - // If it's not a number it's an operator, I guess - if (!value) { - return str; - } - - if (unit.indexOf('%') === 0) { - var element = void 0; - switch (unit) { - case '%p': - element = popperOffsets; - break; - case '%': - case '%r': - default: - element = referenceOffsets; - } - - var rect = getClientRect(element); - return rect[measurement] / 100 * value; - } else if (unit === 'vh' || unit === 'vw') { - // if is a vh or vw, we calculate the size based on the viewport - var size = void 0; - if (unit === 'vh') { - size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); - } else { - size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); - } - return size / 100 * value; - } else { - // if is an explicit pixel unit, we get rid of the unit and keep the value - // if is an implicit unit, it's px, and we return just the value - return value; - } - } - - /** - * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. - * @function - * @memberof {modifiers~offset} - * @private - * @argument {String} offset - * @argument {Object} popperOffsets - * @argument {Object} referenceOffsets - * @argument {String} basePlacement - * @returns {Array} a two cells array with x and y offsets in numbers - */ - function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) { - var offsets = [0, 0]; - - // Use height if placement is left or right and index is 0 otherwise use width - // in this way the first offset will use an axis and the second one - // will use the other one - var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; - - // Split the offset string to obtain a list of values and operands - // The regex addresses values with the plus or minus sign in front (+10, -20, etc) - var fragments = offset.split(/(\+|\-)/).map(function (frag) { - return frag.trim(); - }); - - // Detect if the offset string contains a pair of values or a single one - // they could be separated by comma or space - var divider = fragments.indexOf(find(fragments, function (frag) { - return frag.search(/,|\s/) !== -1; - })); - - if (fragments[divider] && fragments[divider].indexOf(',') === -1) { - console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.'); - } - - // If divider is found, we divide the list of values and operands to divide - // them by ofset X and Y. - var splitRegex = /\s*,\s*|\s+/; - var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments]; - - // Convert the values with units to absolute pixels to allow our computations - ops = ops.map(function (op, index) { - // Most of the units rely on the orientation of the popper - var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width'; - var mergeWithPrevious = false; - return op - // This aggregates any `+` or `-` sign that aren't considered operators - // e.g.: 10 + +5 => [10, +, +5] - .reduce(function (a, b) { - if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) { - a[a.length - 1] = b; - mergeWithPrevious = true; - return a; - } else if (mergeWithPrevious) { - a[a.length - 1] += b; - mergeWithPrevious = false; - return a; - } else { - return a.concat(b); - } - }, []) - // Here we convert the string values into number values (in px) - .map(function (str) { - return toValue(str, measurement, popperOffsets, referenceOffsets); - }); - }); - - // Loop trough the offsets arrays and execute the operations - ops.forEach(function (op, index) { - op.forEach(function (frag, index2) { - if (isNumeric(frag)) { - offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1); + }; + Carousel.prototype.nextWhenVisible = function () { + // Don't call next when the page isn't visible + // or the carousel or its parent isn't visible + if (!document.hidden && + (jquery_4["default"](this._element).is(':visible') && jquery_4["default"](this._element).css('visibility') !== 'hidden')) { + this.next(); + } + }; + Carousel.prototype.prev = function () { + if (!this._isSliding) { + this._slide(Direction.PREV); + } + }; + Carousel.prototype.pause = function (event) { + if (!event) { + this._isPaused = true; + } + if (this._element.querySelector(Selector.NEXT_PREV)) { + util_2["default"].triggerTransitionEnd(this._element); + this.cycle(true); + } + clearInterval(this._interval); + this._interval = null; + }; + Carousel.prototype.cycle = function (event) { + if (!event) { + this._isPaused = false; + } + if (this._interval) { + clearInterval(this._interval); + this._interval = null; + } + if (this._config.interval && !this._isPaused) { + this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); + } + }; + Carousel.prototype.to = function (index) { + var _this = this; + this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM); + var activeIndex = this._getItemIndex(this._activeElement); + if (index > this._items.length - 1 || index < 0) { + return; + } + if (this._isSliding) { + jquery_4["default"](this._element).one(Event.SLID, function () { return _this.to(index); }); + return; + } + if (activeIndex === index) { + this.pause(); + this.cycle(); + return; + } + var direction = index > activeIndex + ? Direction.NEXT + : Direction.PREV; + this._slide(direction, this._items[index]); + }; + Carousel.prototype.dispose = function () { + jquery_4["default"](this._element).off(EVENT_KEY); + jquery_4["default"].removeData(this._element, DATA_KEY); + this._items = null; + this._config = null; + this._element = null; + this._interval = null; + this._isPaused = null; + this._isSliding = null; + this._activeElement = null; + this._indicatorsElement = null; + }; + // Private + Carousel.prototype._getConfig = function (config) { + config = __assign({}, Default, config); + util_2["default"].typeCheckConfig(NAME, config, DefaultType); + return config; + }; + Carousel.prototype._handleSwipe = function () { + var absDeltax = Math.abs(this.touchDeltaX); + if (absDeltax <= SWIPE_THRESHOLD) { + return; + } + var direction = absDeltax / this.touchDeltaX; + // swipe left + if (direction > 0) { + this.prev(); + } + // swipe right + if (direction < 0) { + this.next(); + } + }; + Carousel.prototype._addEventListeners = function () { + var _this = this; + if (this._config.keyboard) { + jquery_4["default"](this._element) + .on(Event.KEYDOWN, function (event) { return _this._keydown(event); }); + } + if (this._config.pause === 'hover') { + jquery_4["default"](this._element) + .on(Event.MOUSEENTER, function (event) { return _this.pause(event); }) + .on(Event.MOUSELEAVE, function (event) { return _this.cycle(event); }); + } + if (this._config.touch) { + this._addTouchEventListeners(); + } + }; + Carousel.prototype._addTouchEventListeners = function () { + var _this = this; + if (!this._touchSupported) { + return; + } + var start = function (event) { + if (_this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { + _this.touchStartX = event.originalEvent.clientX; + } + else if (!_this._pointerEvent) { + _this.touchStartX = event.originalEvent.touches[0].clientX; + } + }; + var move = function (event) { + // ensure swiping with one touch and not pinching + if (event.originalEvent.touches && event.originalEvent.touches.length > 1) { + _this.touchDeltaX = 0; + } + else { + _this.touchDeltaX = event.originalEvent.touches[0].clientX - _this.touchStartX; + } + }; + var end = function (event) { + if (_this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { + _this.touchDeltaX = event.originalEvent.clientX - _this.touchStartX; + } + _this._handleSwipe(); + if (_this._config.pause === 'hover') { + // If it's a touch-enabled device, mouseenter/leave are fired as + // part of the mouse compatibility events on first tap - the carousel + // would stop cycling until user tapped out of it; + // here, we listen for touchend, explicitly pause the carousel + // (as if it's the second time we tap on it, mouseenter compat event + // is NOT fired) and after a timeout (to allow for mouse compatibility + // events to fire) we explicitly restart cycling + _this.pause(); + if (_this.touchTimeout) { + clearTimeout(_this.touchTimeout); + } + _this.touchTimeout = setTimeout(function (event) { return _this.cycle(event); }, TOUCHEVENT_COMPAT_WAIT + _this._config.interval); + } + }; + jquery_4["default"](this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, function (e) { return e.preventDefault(); }); + if (this._pointerEvent) { + jquery_4["default"](this._element).on(Event.POINTERDOWN, function (event) { return start(event); }); + jquery_4["default"](this._element).on(Event.POINTERUP, function (event) { return end(event); }); + this._element.classList.add(ClassName.POINTER_EVENT); + } + else { + jquery_4["default"](this._element).on(Event.TOUCHSTART, function (event) { return start(event); }); + jquery_4["default"](this._element).on(Event.TOUCHMOVE, function (event) { return move(event); }); + jquery_4["default"](this._element).on(Event.TOUCHEND, function (event) { return end(event); }); + } + }; + Carousel.prototype._keydown = function (event) { + if (/input|textarea/i.test(event.target.tagName)) { + return; + } + switch (event.which) { + case ARROW_LEFT_KEYCODE: + event.preventDefault(); + this.prev(); + break; + case ARROW_RIGHT_KEYCODE: + event.preventDefault(); + this.next(); + break; + default: + } + }; + Carousel.prototype._getItemIndex = function (element) { + this._items = element && element.parentNode + ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM)) + : []; + return this._items.indexOf(element); + }; + Carousel.prototype._getItemByDirection = function (direction, activeElement) { + var isNextDirection = direction === Direction.NEXT; + var isPrevDirection = direction === Direction.PREV; + var activeIndex = this._getItemIndex(activeElement); + var lastItemIndex = this._items.length - 1; + var isGoingToWrap = isPrevDirection && activeIndex === 0 || + isNextDirection && activeIndex === lastItemIndex; + if (isGoingToWrap && !this._config.wrap) { + return activeElement; + } + var delta = direction === Direction.PREV ? -1 : 1; + var itemIndex = (activeIndex + delta) % this._items.length; + return itemIndex === -1 + ? this._items[this._items.length - 1] : this._items[itemIndex]; + }; + Carousel.prototype._triggerSlideEvent = function (relatedTarget, eventDirectionName) { + var targetIndex = this._getItemIndex(relatedTarget); + var fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM)); + var slideEvent = jquery_4["default"].Event(Event.SLIDE, { + relatedTarget: relatedTarget, + direction: eventDirectionName, + from: fromIndex, + to: targetIndex + }); + jquery_4["default"](this._element).trigger(slideEvent); + return slideEvent; + }; + Carousel.prototype._setActiveIndicatorElement = function (element) { + if (this._indicatorsElement) { + var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE)); + jquery_4["default"](indicators) + .removeClass(ClassName.ACTIVE); + var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; + if (nextIndicator) { + jquery_4["default"](nextIndicator).addClass(ClassName.ACTIVE); + } + } + }; + Carousel.prototype._slide = function (direction, element) { + var _this = this; + var activeElement = this._element.querySelector(Selector.ACTIVE_ITEM); + var activeElementIndex = this._getItemIndex(activeElement); + var nextElement = element || activeElement && + this._getItemByDirection(direction, activeElement); + var nextElementIndex = this._getItemIndex(nextElement); + var isCycling = Boolean(this._interval); + var directionalClassName; + var orderClassName; + var eventDirectionName; + if (direction === Direction.NEXT) { + directionalClassName = ClassName.LEFT; + orderClassName = ClassName.NEXT; + eventDirectionName = Direction.LEFT; + } + else { + directionalClassName = ClassName.RIGHT; + orderClassName = ClassName.PREV; + eventDirectionName = Direction.RIGHT; + } + if (nextElement && jquery_4["default"](nextElement).hasClass(ClassName.ACTIVE)) { + this._isSliding = false; + return; + } + var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); + if (slideEvent.isDefaultPrevented()) { + return; + } + if (!activeElement || !nextElement) { + // Some weirdness is happening, so we bail + return; + } + this._isSliding = true; + if (isCycling) { + this.pause(); + } + this._setActiveIndicatorElement(nextElement); + var slidEvent = jquery_4["default"].Event(Event.SLID, { + relatedTarget: nextElement, + direction: eventDirectionName, + from: activeElementIndex, + to: nextElementIndex + }); + if (jquery_4["default"](this._element).hasClass(ClassName.SLIDE)) { + jquery_4["default"](nextElement).addClass(orderClassName); + util_2["default"].reflow(nextElement); + jquery_4["default"](activeElement).addClass(directionalClassName); + jquery_4["default"](nextElement).addClass(directionalClassName); + var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10); + if (nextElementInterval) { + this._config.defaultInterval = this._config.defaultInterval || this._config.interval; + this._config.interval = nextElementInterval; + } + else { + this._config.interval = this._config.defaultInterval || this._config.interval; + } + var transitionDuration = util_2["default"].getTransitionDurationFromElement(activeElement); + jquery_4["default"](activeElement) + .one(util_2["default"].TRANSITION_END, function () { + jquery_4["default"](nextElement) + .removeClass(directionalClassName + " " + orderClassName) + .addClass(ClassName.ACTIVE); + jquery_4["default"](activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName); + _this._isSliding = false; + setTimeout(function () { return jquery_4["default"](_this._element).trigger(slidEvent); }, 0); + }) + .emulateTransitionEnd(transitionDuration); + } + else { + jquery_4["default"](activeElement).removeClass(ClassName.ACTIVE); + jquery_4["default"](nextElement).addClass(ClassName.ACTIVE); + this._isSliding = false; + jquery_4["default"](this._element).trigger(slidEvent); + } + if (isCycling) { + this.cycle(); + } + }; + // Static + Carousel._jQueryInterface = function (config) { + return this.each(function () { + var data = jquery_4["default"](this).data(DATA_KEY); + var _config = __assign({}, Default, jquery_4["default"](this).data()); + if (typeof config === 'object') { + _config = __assign({}, _config, config); + } + var action = typeof config === 'string' ? config : _config.slide; + if (!data) { + data = new Carousel(this, _config); + jquery_4["default"](this).data(DATA_KEY, data); + } + if (typeof config === 'number') { + data.to(config); + } + else if (typeof action === 'string') { + if (typeof data[action] === 'undefined') { + throw new TypeError("No method named \"" + action + "\""); + } + data[action](); + } + else if (_config.interval && _config.ride) { + data.pause(); + data.cycle(); + } + }); + }; + Carousel._dataApiClickHandler = function (event) { + var selector = util_2["default"].getSelectorFromElement(this); + if (!selector) { + return; + } + var target = jquery_4["default"](selector)[0]; + if (!target || !jquery_4["default"](target).hasClass(ClassName.CAROUSEL)) { + return; + } + var config = __assign({}, jquery_4["default"](target).data(), jquery_4["default"](this).data()); + var slideIndex = this.getAttribute('data-slide-to'); + if (slideIndex) { + config.interval = false; + } + Carousel._jQueryInterface.call(jquery_4["default"](target), config); + if (slideIndex) { + jquery_4["default"](target).data(DATA_KEY).to(slideIndex); + } + event.preventDefault(); + }; + return Carousel; + }()); + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + jquery_4["default"](document) + .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler); + jquery_4["default"](window).on(Event.LOAD_DATA_API, function () { + var carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE)); + for (var i = 0, len = carousels.length; i < len; i++) { + var $carousel = jquery_4["default"](carousels[i]); + Carousel._jQueryInterface.call($carousel, $carousel.data()); } - }); }); - return offsets; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @argument {Number|String} options.offset=0 - * The offset value as described in the modifier description - * @returns {Object} The data object, properly modified - */ - function offset(data, _ref) { - var offset = _ref.offset; - var placement = data.placement, - _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - - var basePlacement = placement.split('-')[0]; - - var offsets = void 0; - if (isNumeric(+offset)) { - offsets = [+offset, 0]; - } else { - offsets = parseOffset(offset, popper, reference, basePlacement); - } - - if (basePlacement === 'left') { - popper.top += offsets[0]; - popper.left -= offsets[1]; - } else if (basePlacement === 'right') { - popper.top += offsets[0]; - popper.left += offsets[1]; - } else if (basePlacement === 'top') { - popper.left += offsets[0]; - popper.top -= offsets[1]; - } else if (basePlacement === 'bottom') { - popper.left += offsets[0]; - popper.top += offsets[1]; - } - - data.popper = popper; - return data; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function preventOverflow(data, options) { - var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); - - // If offsetParent is the reference element, we really want to - // go one step up and use the next offsetParent as reference to - // avoid to make this modifier completely useless and look like broken - if (data.instance.reference === boundariesElement) { - boundariesElement = getOffsetParent(boundariesElement); - } - - // NOTE: DOM access here - // resets the popper's position so that the document size can be calculated excluding - // the size of the popper element itself - var transformProp = getSupportedPropertyName('transform'); - var popperStyles = data.instance.popper.style; // assignment to help minification - var top = popperStyles.top, - left = popperStyles.left, - transform = popperStyles[transformProp]; - - popperStyles.top = ''; - popperStyles.left = ''; - popperStyles[transformProp] = ''; - - var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); - - // NOTE: DOM access here - // restores the original style properties after the offsets have been computed - popperStyles.top = top; - popperStyles.left = left; - popperStyles[transformProp] = transform; - - options.boundaries = boundaries; - - var order = options.priority; - var popper = data.offsets.popper; - - var check = { - primary: function primary(placement) { - var value = popper[placement]; - if (popper[placement] < boundaries[placement] && !options.escapeWithReference) { - value = Math.max(popper[placement], boundaries[placement]); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + jquery_4["default"].fn[NAME] = Carousel._jQueryInterface; + jquery_4["default"].fn[NAME].Constructor = Carousel; + jquery_4["default"].fn[NAME].noConflict = function () { + jquery_4["default"].fn[NAME] = JQUERY_NO_CONFLICT; + return Carousel._jQueryInterface; + }; + exports.__esModule = true; + exports["default"] = Carousel; +}); +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.3.1): collapse.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ +define("collapse", ["require", "exports", "jquery", "util"], function (require, exports, jquery_5, util_3) { + "use strict"; + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + var NAME = 'collapse'; + var VERSION = '4.3.1'; + var DATA_KEY = 'bs.collapse'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = jquery_5["default"].fn[NAME]; + var Default = { + toggle: true, + parent: '' + }; + var DefaultType = { + toggle: 'boolean', + parent: '(string|element)' + }; + var Event = { + SHOW: "show" + EVENT_KEY, + SHOWN: "shown" + EVENT_KEY, + HIDE: "hide" + EVENT_KEY, + HIDDEN: "hidden" + EVENT_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY + }; + var ClassName = { + SHOW: 'show', + COLLAPSE: 'collapse', + COLLAPSING: 'collapsing', + COLLAPSED: 'collapsed' + }; + var Dimension = { + WIDTH: 'width', + HEIGHT: 'height' + }; + var Selector = { + ACTIVES: '.show, .collapsing', + DATA_TOGGLE: '[data-toggle="collapse"]' + }; + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + var Collapse = (function () { + function Collapse(element, config) { + this._isTransitioning = false; + this._element = element; + this._config = this._getConfig(config); + this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); + var toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)); + for (var i = 0, len = toggleList.length; i < len; i++) { + var elem = toggleList[i]; + var selector = util_3["default"].getSelectorFromElement(elem); + var filterElement = [].slice.call(document.querySelectorAll(selector)) + .filter(function (foundElem) { return foundElem === element; }); + if (selector !== null && filterElement.length > 0) { + this._selector = selector; + this._triggerArray.push(elem); + } + } + this._parent = this._config.parent ? this._getParent() : null; + if (!this._config.parent) { + this._addAriaAndCollapsedClass(this._element, this._triggerArray); + } + if (this._config.toggle) { + this.toggle(); + } } - return defineProperty({}, placement, value); - }, - secondary: function secondary(placement) { - var mainSide = placement === 'right' ? 'left' : 'top'; - var value = popper[mainSide]; - if (popper[placement] > boundaries[placement] && !options.escapeWithReference) { - value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height)); + Object.defineProperty(Collapse, "VERSION", { + // Getters + get: function () { + return VERSION; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Collapse, "Default", { + get: function () { + return Default; + }, + enumerable: true, + configurable: true + }); + // Public + Collapse.prototype.toggle = function () { + if (jquery_5["default"](this._element).hasClass(ClassName.SHOW)) { + this.hide(); + } + else { + this.show(); + } + }; + Collapse.prototype.show = function () { + var _this = this; + if (this._isTransitioning || + jquery_5["default"](this._element).hasClass(ClassName.SHOW)) { + return; + } + var actives; + var activesData; + if (this._parent) { + actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)) + .filter(function (elem) { + if (typeof _this._config.parent === 'string') { + return elem.getAttribute('data-parent') === _this._config.parent; + } + return elem.classList.contains(ClassName.COLLAPSE); + }); + if (actives.length === 0) { + actives = null; + } + } + if (actives) { + activesData = jquery_5["default"](actives).not(this._selector).data(DATA_KEY); + if (activesData && activesData._isTransitioning) { + return; + } + } + var startEvent = jquery_5["default"].Event(Event.SHOW); + jquery_5["default"](this._element).trigger(startEvent); + if (startEvent.isDefaultPrevented()) { + return; + } + if (actives) { + Collapse._jQueryInterface.call(jquery_5["default"](actives).not(this._selector), 'hide'); + if (!activesData) { + jquery_5["default"](actives).data(DATA_KEY, null); + } + } + var dimension = this._getDimension(); + jquery_5["default"](this._element) + .removeClass(ClassName.COLLAPSE) + .addClass(ClassName.COLLAPSING); + this._element.style[dimension] = 0; + if (this._triggerArray.length) { + jquery_5["default"](this._triggerArray) + .removeClass(ClassName.COLLAPSED) + .attr('aria-expanded', true); + } + this.setTransitioning(true); + var complete = function () { + jquery_5["default"](_this._element) + .removeClass(ClassName.COLLAPSING) + .addClass(ClassName.COLLAPSE) + .addClass(ClassName.SHOW); + _this._element.style[dimension] = ''; + _this.setTransitioning(false); + jquery_5["default"](_this._element).trigger(Event.SHOWN); + }; + var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); + var scrollSize = "scroll" + capitalizedDimension; + var transitionDuration = util_3["default"].getTransitionDurationFromElement(this._element); + jquery_5["default"](this._element) + .one(util_3["default"].TRANSITION_END, complete) + .emulateTransitionEnd(transitionDuration); + this._element.style[dimension] = this._element[scrollSize] + "px"; + }; + Collapse.prototype.hide = function () { + var _this = this; + if (this._isTransitioning || + !jquery_5["default"](this._element).hasClass(ClassName.SHOW)) { + return; + } + var startEvent = jquery_5["default"].Event(Event.HIDE); + jquery_5["default"](this._element).trigger(startEvent); + if (startEvent.isDefaultPrevented()) { + return; + } + var dimension = this._getDimension(); + this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; + util_3["default"].reflow(this._element); + jquery_5["default"](this._element) + .addClass(ClassName.COLLAPSING) + .removeClass(ClassName.COLLAPSE) + .removeClass(ClassName.SHOW); + var triggerArrayLength = this._triggerArray.length; + if (triggerArrayLength > 0) { + for (var i = 0; i < triggerArrayLength; i++) { + var trigger = this._triggerArray[i]; + var selector = util_3["default"].getSelectorFromElement(trigger); + if (selector !== null) { + var $elem = jquery_5["default"]([].slice.call(document.querySelectorAll(selector))); + if (!$elem.hasClass(ClassName.SHOW)) { + jquery_5["default"](trigger).addClass(ClassName.COLLAPSED) + .attr('aria-expanded', false); + } + } + } + } + this.setTransitioning(true); + var complete = function () { + _this.setTransitioning(false); + jquery_5["default"](_this._element) + .removeClass(ClassName.COLLAPSING) + .addClass(ClassName.COLLAPSE) + .trigger(Event.HIDDEN); + }; + this._element.style[dimension] = ''; + var transitionDuration = util_3["default"].getTransitionDurationFromElement(this._element); + jquery_5["default"](this._element) + .one(util_3["default"].TRANSITION_END, complete) + .emulateTransitionEnd(transitionDuration); + }; + Collapse.prototype.setTransitioning = function (isTransitioning) { + this._isTransitioning = isTransitioning; + }; + Collapse.prototype.dispose = function () { + jquery_5["default"].removeData(this._element, DATA_KEY); + this._config = null; + this._parent = null; + this._element = null; + this._triggerArray = null; + this._isTransitioning = null; + }; + // Private + Collapse.prototype._getConfig = function (config) { + config = __assign({}, Default, config); + config.toggle = Boolean(config.toggle); // Coerce string values + util_3["default"].typeCheckConfig(NAME, config, DefaultType); + return config; + }; + Collapse.prototype._getDimension = function () { + var hasWidth = jquery_5["default"](this._element).hasClass(Dimension.WIDTH); + return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; + }; + Collapse.prototype._getParent = function () { + var _this = this; + var parent; + if (util_3["default"].isElement(this._config.parent)) { + parent = this._config.parent; + // It's a jQuery object + if (typeof this._config.parent.jquery !== 'undefined') { + parent = this._config.parent[0]; + } + } + else { + parent = document.querySelector(this._config.parent); + } + var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; + var children = [].slice.call(parent.querySelectorAll(selector)); + jquery_5["default"](children).each(function (i, element) { + _this._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); + }); + return parent; + }; + Collapse.prototype._addAriaAndCollapsedClass = function (element, triggerArray) { + var isOpen = jquery_5["default"](element).hasClass(ClassName.SHOW); + if (triggerArray.length) { + jquery_5["default"](triggerArray) + .toggleClass(ClassName.COLLAPSED, !isOpen) + .attr('aria-expanded', isOpen); + } + }; + // Static + Collapse._getTargetFromElement = function (element) { + var selector = util_3["default"].getSelectorFromElement(element); + return selector ? document.querySelector(selector) : null; + }; + Collapse._jQueryInterface = function (config) { + return this.each(function () { + var $this = jquery_5["default"](this); + var data = $this.data(DATA_KEY); + var _config = __assign({}, Default, $this.data(), typeof config === 'object' && config ? config : {}); + if (!data && _config.toggle && /show|hide/.test(config)) { + _config.toggle = false; + } + if (!data) { + data = new Collapse(this, _config); + $this.data(DATA_KEY, data); + } + if (typeof config === 'string') { + if (typeof data[config] === 'undefined') { + throw new TypeError("No method named \"" + config + "\""); + } + data[config](); + } + }); + }; + return Collapse; + }()); + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + jquery_5["default"](document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + // preventDefault only for
    elements (which change the URL) not inside the collapsible element + if (event.currentTarget.tagName === 'A') { + event.preventDefault(); } - return defineProperty({}, mainSide, value); - } - }; - - order.forEach(function (placement) { - var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary'; - popper = _extends({}, popper, check[side](placement)); + var $trigger = jquery_5["default"](this); + var selector = util_3["default"].getSelectorFromElement(this); + var selectors = [].slice.call(document.querySelectorAll(selector)); + jquery_5["default"](selectors).each(function () { + var $target = jquery_5["default"](this); + var data = $target.data(DATA_KEY); + var config = data ? 'toggle' : $trigger.data(); + Collapse._jQueryInterface.call($target, config); + }); }); - - data.offsets.popper = popper; - - return data; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function shift(data) { - var placement = data.placement; - var basePlacement = placement.split('-')[0]; - var shiftvariation = placement.split('-')[1]; - - // if shift shiftvariation is specified, run the modifier - if (shiftvariation) { - var _data$offsets = data.offsets, - reference = _data$offsets.reference, - popper = _data$offsets.popper; - - var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1; - var side = isVertical ? 'left' : 'top'; - var measurement = isVertical ? 'width' : 'height'; - - var shiftOffsets = { - start: defineProperty({}, side, reference[side]), - end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement]) - }; - - data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]); - } - - return data; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function hide(data) { - if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) { - return data; - } - - var refRect = data.offsets.reference; - var bound = find(data.instance.modifiers, function (modifier) { - return modifier.name === 'preventOverflow'; - }).boundaries; - - if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) { - // Avoid unnecessary DOM access if visibility hasn't changed - if (data.hide === true) { - return data; - } - - data.hide = true; - data.attributes['x-out-of-boundaries'] = ''; - } else { - // Avoid unnecessary DOM access if visibility hasn't changed - if (data.hide === false) { - return data; - } - - data.hide = false; - data.attributes['x-out-of-boundaries'] = false; - } - - return data; - } - - /** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The data object, properly modified - */ - function inner(data) { - var placement = data.placement; - var basePlacement = placement.split('-')[0]; - var _data$offsets = data.offsets, - popper = _data$offsets.popper, - reference = _data$offsets.reference; - - var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1; - - var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1; - - popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0); - - data.placement = getOppositePlacement(placement); - data.offsets.popper = getClientRect(popper); - - return data; - } - - /** - * Modifier function, each modifier can have a function of this type assigned - * to its `fn` property.
    - * These functions will be called on each update, this means that you must - * make sure they are performant enough to avoid performance bottlenecks. - * - * @function ModifierFn - * @argument {dataObject} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {dataObject} The data object, properly modified - */ - - /** - * Modifiers are plugins used to alter the behavior of your poppers.
    - * Popper.js uses a set of 9 modifiers to provide all the basic functionalities - * needed by the library. - * - * Usually you don't want to override the `order`, `fn` and `onLoad` props. - * All the other properties are configurations that could be tweaked. - * @namespace modifiers - */ - var modifiers = { /** - * Modifier used to shift the popper on the start or end of its reference - * element.
    - * It will read the variation of the `placement` property.
    - * It can be one either `-end` or `-start`. - * @memberof modifiers - * @inner + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ */ - shift: { - /** @prop {number} order=100 - Index used to define the order of execution */ - order: 100, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: shift - }, - + jquery_5["default"].fn[NAME] = Collapse._jQueryInterface; + jquery_5["default"].fn[NAME].Constructor = Collapse; + jquery_5["default"].fn[NAME].noConflict = function () { + jquery_5["default"].fn[NAME] = JQUERY_NO_CONFLICT; + return Collapse._jQueryInterface; + }; + exports.__esModule = true; + exports["default"] = Collapse; +}); +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.3.1): dropdown.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ +define("dropdown", ["require", "exports", "jquery", "popper.js", "util"], function (require, exports, jquery_6, popper_js_1, util_4) { + "use strict"; /** - * The `offset` modifier can shift your popper on both its axis. - * - * It accepts the following units: - * - `px` or unit-less, interpreted as pixels - * - `%` or `%r`, percentage relative to the length of the reference element - * - `%p`, percentage relative to the length of the popper element - * - `vw`, CSS viewport width unit - * - `vh`, CSS viewport height unit - * - * For length is intended the main axis relative to the placement of the popper.
    - * This means that if the placement is `top` or `bottom`, the length will be the - * `width`. In case of `left` or `right`, it will be the `height`. - * - * You can provide a single value (as `Number` or `String`), or a pair of values - * as `String` divided by a comma or one (or more) white spaces.
    - * The latter is a deprecated method because it leads to confusion and will be - * removed in v2.
    - * Additionally, it accepts additions and subtractions between different units. - * Note that multiplications and divisions aren't supported. - * - * Valid examples are: - * ``` - * 10 - * '10%' - * '10, 10' - * '10%, 10' - * '10 + 10%' - * '10 - 5vh + 3%' - * '-10px + 5vh, 5px - 6%' - * ``` - * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap - * > with their reference element, unfortunately, you will have to disable the `flip` modifier. - * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373). - * - * @memberof modifiers - * @inner + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ */ - offset: { - /** @prop {number} order=200 - Index used to define the order of execution */ - order: 200, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: offset, - /** @prop {Number|String} offset=0 - * The offset value as described in the modifier description - */ - offset: 0 - }, - + var NAME = 'dropdown'; + var VERSION = '4.3.1'; + var DATA_KEY = 'bs.dropdown'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = jquery_6["default"].fn[NAME]; + var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key + var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key + var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key + var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key + var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key + var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) + var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); + var Event = { + HIDE: "hide" + EVENT_KEY, + HIDDEN: "hidden" + EVENT_KEY, + SHOW: "show" + EVENT_KEY, + SHOWN: "shown" + EVENT_KEY, + CLICK: "click" + EVENT_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, + KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY, + KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY + }; + var ClassName = { + DISABLED: 'disabled', + SHOW: 'show', + DROPUP: 'dropup', + DROPRIGHT: 'dropright', + DROPLEFT: 'dropleft', + MENURIGHT: 'dropdown-menu-right', + MENULEFT: 'dropdown-menu-left', + POSITION_STATIC: 'position-static' + }; + var Selector = { + DATA_TOGGLE: '[data-toggle="dropdown"]', + FORM_CHILD: '.dropdown form', + MENU: '.dropdown-menu', + NAVBAR_NAV: '.navbar-nav', + VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' + }; + var AttachmentMap = { + TOP: 'top-start', + TOPEND: 'top-end', + BOTTOM: 'bottom-start', + BOTTOMEND: 'bottom-end', + RIGHT: 'right-start', + RIGHTEND: 'right-end', + LEFT: 'left-start', + LEFTEND: 'left-end' + }; + var Default = { + offset: 0, + flip: true, + boundary: 'scrollParent', + reference: 'toggle', + display: 'dynamic' + }; + var DefaultType = { + offset: '(number|string|function)', + flip: 'boolean', + boundary: '(string|element)', + reference: '(string|element)', + display: 'string' + }; /** - * Modifier used to prevent the popper from being positioned outside the boundary. - * - * A scenario exists where the reference itself is not within the boundaries.
    - * We can say it has "escaped the boundaries" — or just "escaped".
    - * In this case we need to decide whether the popper should either: - * - * - detach from the reference and remain "trapped" in the boundaries, or - * - if it should ignore the boundary and "escape with its reference" - * - * When `escapeWithReference` is set to`true` and reference is completely - * outside its boundaries, the popper will overflow (or completely leave) - * the boundaries in order to remain attached to the edge of the reference. - * - * @memberof modifiers - * @inner + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ */ - preventOverflow: { - /** @prop {number} order=300 - Index used to define the order of execution */ - order: 300, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: preventOverflow, - /** - * @prop {Array} [priority=['left','right','top','bottom']] - * Popper will try to prevent overflow following these priorities by default, - * then, it could overflow on the left and on top of the `boundariesElement` - */ - priority: ['left', 'right', 'top', 'bottom'], - /** - * @prop {number} padding=5 - * Amount of pixel used to define a minimum distance between the boundaries - * and the popper. This makes sure the popper always has a little padding - * between the edges of its container - */ - padding: 5, - /** - * @prop {String|HTMLElement} boundariesElement='scrollParent' - * Boundaries used by the modifier. Can be `scrollParent`, `window`, - * `viewport` or any DOM element. - */ - boundariesElement: 'scrollParent' - }, - + var Dropdown = (function () { + function Dropdown(element, config) { + this._element = element; + this._popper = null; + this._config = this._getConfig(config); + this._menu = this._getMenuElement(); + this._inNavbar = this._detectNavbar(); + this._addEventListeners(); + } + Object.defineProperty(Dropdown, "VERSION", { + // Getters + get: function () { + return VERSION; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Dropdown, "Default", { + get: function () { + return Default; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Dropdown, "DefaultType", { + get: function () { + return DefaultType; + }, + enumerable: true, + configurable: true + }); + // Public + Dropdown.prototype.toggle = function () { + if (this._element.disabled || jquery_6["default"](this._element).hasClass(ClassName.DISABLED)) { + return; + } + var parent = Dropdown._getParentFromElement(this._element); + var isActive = jquery_6["default"](this._menu).hasClass(ClassName.SHOW); + Dropdown._clearMenus(); + if (isActive) { + return; + } + var relatedTarget = { + relatedTarget: this._element + }; + var showEvent = jquery_6["default"].Event(Event.SHOW, relatedTarget); + jquery_6["default"](parent).trigger(showEvent); + if (showEvent.isDefaultPrevented()) { + return; + } + // Disable totally Popper.js for Dropdown in Navbar + if (!this._inNavbar) { + /** + * Check for Popper dependency + * Popper - https://popper.js.org + */ + if (typeof popper_js_1["default"] === 'undefined') { + throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)'); + } + var referenceElement = this._element; + if (this._config.reference === 'parent') { + referenceElement = parent; + } + else if (util_4["default"].isElement(this._config.reference)) { + referenceElement = this._config.reference; + // Check if it's jQuery element + if (typeof this._config.reference.jquery !== 'undefined') { + referenceElement = this._config.reference[0]; + } + } + // If boundary is not `scrollParent`, then set position to `static` + // to allow the menu to "escape" the scroll parent's boundaries + // https://github.com/twbs/bootstrap/issues/24251 + if (this._config.boundary !== 'scrollParent') { + jquery_6["default"](parent).addClass(ClassName.POSITION_STATIC); + } + this._popper = new popper_js_1["default"](referenceElement, this._menu, this._getPopperConfig()); + } + // If this is a touch-enabled device we add extra + // empty mouseover listeners to the body's immediate children; + // only needed because of broken event delegation on iOS + // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html + if ('ontouchstart' in document.documentElement && + jquery_6["default"](parent).closest(Selector.NAVBAR_NAV).length === 0) { + jquery_6["default"](document.body).children().on('mouseover', null, jquery_6["default"].noop); + } + this._element.focus(); + this._element.setAttribute('aria-expanded', true); + jquery_6["default"](this._menu).toggleClass(ClassName.SHOW); + jquery_6["default"](parent) + .toggleClass(ClassName.SHOW) + .trigger(jquery_6["default"].Event(Event.SHOWN, relatedTarget)); + }; + Dropdown.prototype.show = function () { + if (this._element.disabled || jquery_6["default"](this._element).hasClass(ClassName.DISABLED) || jquery_6["default"](this._menu).hasClass(ClassName.SHOW)) { + return; + } + var relatedTarget = { + relatedTarget: this._element + }; + var showEvent = jquery_6["default"].Event(Event.SHOW, relatedTarget); + var parent = Dropdown._getParentFromElement(this._element); + jquery_6["default"](parent).trigger(showEvent); + if (showEvent.isDefaultPrevented()) { + return; + } + jquery_6["default"](this._menu).toggleClass(ClassName.SHOW); + jquery_6["default"](parent) + .toggleClass(ClassName.SHOW) + .trigger(jquery_6["default"].Event(Event.SHOWN, relatedTarget)); + }; + Dropdown.prototype.hide = function () { + if (this._element.disabled || jquery_6["default"](this._element).hasClass(ClassName.DISABLED) || !jquery_6["default"](this._menu).hasClass(ClassName.SHOW)) { + return; + } + var relatedTarget = { + relatedTarget: this._element + }; + var hideEvent = jquery_6["default"].Event(Event.HIDE, relatedTarget); + var parent = Dropdown._getParentFromElement(this._element); + jquery_6["default"](parent).trigger(hideEvent); + if (hideEvent.isDefaultPrevented()) { + return; + } + jquery_6["default"](this._menu).toggleClass(ClassName.SHOW); + jquery_6["default"](parent) + .toggleClass(ClassName.SHOW) + .trigger(jquery_6["default"].Event(Event.HIDDEN, relatedTarget)); + }; + Dropdown.prototype.dispose = function () { + jquery_6["default"].removeData(this._element, DATA_KEY); + jquery_6["default"](this._element).off(EVENT_KEY); + this._element = null; + this._menu = null; + if (this._popper !== null) { + this._popper.destroy(); + this._popper = null; + } + }; + Dropdown.prototype.update = function () { + this._inNavbar = this._detectNavbar(); + if (this._popper !== null) { + this._popper.scheduleUpdate(); + } + }; + // Private + Dropdown.prototype._addEventListeners = function () { + var _this = this; + jquery_6["default"](this._element).on(Event.CLICK, function (event) { + event.preventDefault(); + event.stopPropagation(); + _this.toggle(); + }); + }; + Dropdown.prototype._getConfig = function (config) { + config = __assign({}, this.constructor.Default, jquery_6["default"](this._element).data(), config); + util_4["default"].typeCheckConfig(NAME, config, this.constructor.DefaultType); + return config; + }; + Dropdown.prototype._getMenuElement = function () { + if (!this._menu) { + var parent_1 = Dropdown._getParentFromElement(this._element); + if (parent_1) { + this._menu = parent_1.querySelector(Selector.MENU); + } + } + return this._menu; + }; + Dropdown.prototype._getPlacement = function () { + var $parentDropdown = jquery_6["default"](this._element.parentNode); + var placement = AttachmentMap.BOTTOM; + // Handle dropup + if ($parentDropdown.hasClass(ClassName.DROPUP)) { + placement = AttachmentMap.TOP; + if (jquery_6["default"](this._menu).hasClass(ClassName.MENURIGHT)) { + placement = AttachmentMap.TOPEND; + } + } + else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) { + placement = AttachmentMap.RIGHT; + } + else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) { + placement = AttachmentMap.LEFT; + } + else if (jquery_6["default"](this._menu).hasClass(ClassName.MENURIGHT)) { + placement = AttachmentMap.BOTTOMEND; + } + return placement; + }; + Dropdown.prototype._detectNavbar = function () { + return jquery_6["default"](this._element).closest('.navbar').length > 0; + }; + Dropdown.prototype._getOffset = function () { + var _this = this; + var offset = {}; + if (typeof this._config.offset === 'function') { + offset.fn = function (data) { + data.offsets = __assign({}, data.offsets, _this._config.offset(data.offsets, _this._element) || {}); + return data; + }; + } + else { + offset.offset = this._config.offset; + } + return offset; + }; + Dropdown.prototype._getPopperConfig = function () { + var popperConfig = { + placement: this._getPlacement(), + modifiers: { + offset: this._getOffset(), + flip: { + enabled: this._config.flip + }, + preventOverflow: { + boundariesElement: this._config.boundary + } + } + }; + // Disable Popper.js if we have a static display + if (this._config.display === 'static') { + popperConfig.modifiers.applyStyle = { + enabled: false + }; + } + return popperConfig; + }; + // Static + Dropdown._jQueryInterface = function (config) { + return this.each(function () { + var data = jquery_6["default"](this).data(DATA_KEY); + var _config = typeof config === 'object' ? config : null; + if (!data) { + data = new Dropdown(this, _config); + jquery_6["default"](this).data(DATA_KEY, data); + } + if (typeof config === 'string') { + if (typeof data[config] === 'undefined') { + throw new TypeError("No method named \"" + config + "\""); + } + data[config](); + } + }); + }; + Dropdown._clearMenus = function (event) { + if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || + event.type === 'keyup' && event.which !== TAB_KEYCODE)) { + return; + } + var toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)); + for (var i = 0, len = toggles.length; i < len; i++) { + var parent_2 = Dropdown._getParentFromElement(toggles[i]); + var context = jquery_6["default"](toggles[i]).data(DATA_KEY); + var relatedTarget = { + relatedTarget: toggles[i] + }; + if (event && event.type === 'click') { + relatedTarget.clickEvent = event; + } + if (!context) { + continue; + } + var dropdownMenu = context._menu; + if (!jquery_6["default"](parent_2).hasClass(ClassName.SHOW)) { + continue; + } + if (event && (event.type === 'click' && + /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && + jquery_6["default"].contains(parent_2, event.target)) { + continue; + } + var hideEvent = jquery_6["default"].Event(Event.HIDE, relatedTarget); + jquery_6["default"](parent_2).trigger(hideEvent); + if (hideEvent.isDefaultPrevented()) { + continue; + } + // If this is a touch-enabled device we remove the extra + // empty mouseover listeners we added for iOS support + if ('ontouchstart' in document.documentElement) { + jquery_6["default"](document.body).children().off('mouseover', null, jquery_6["default"].noop); + } + toggles[i].setAttribute('aria-expanded', 'false'); + jquery_6["default"](dropdownMenu).removeClass(ClassName.SHOW); + jquery_6["default"](parent_2) + .removeClass(ClassName.SHOW) + .trigger(jquery_6["default"].Event(Event.HIDDEN, relatedTarget)); + } + }; + Dropdown._getParentFromElement = function (element) { + var parent; + var selector = util_4["default"].getSelectorFromElement(element); + if (selector) { + parent = document.querySelector(selector); + } + return parent || element.parentNode; + }; + // eslint-disable-next-line complexity + Dropdown._dataApiKeydownHandler = function (event) { + // If not input/textarea: + // - And not a key in REGEXP_KEYDOWN => not a dropdown command + // If input/textarea: + // - If space key => not a dropdown command + // - If key is other than escape + // - If key is not up or down => not a dropdown command + // - If trigger inside the menu => not a dropdown command + if (/input|textarea/i.test(event.target.tagName) + ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && + (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || + jquery_6["default"](event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { + return; + } + event.preventDefault(); + event.stopPropagation(); + if (this.disabled || jquery_6["default"](this).hasClass(ClassName.DISABLED)) { + return; + } + var parent = Dropdown._getParentFromElement(this); + var isActive = jquery_6["default"](parent).hasClass(ClassName.SHOW); + if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { + if (event.which === ESCAPE_KEYCODE) { + var toggle = parent.querySelector(Selector.DATA_TOGGLE); + jquery_6["default"](toggle).trigger('focus'); + } + jquery_6["default"](this).trigger('click'); + return; + } + var items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS)); + if (items.length === 0) { + return; + } + var index = items.indexOf(event.target); + if (event.which === ARROW_UP_KEYCODE && index > 0) { + index--; + } + if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { + index++; + } + if (index < 0) { + index = 0; + } + items[index].focus(); + }; + return Dropdown; + }()); /** - * Modifier used to make sure the reference and its popper stay near each other - * without leaving any gap between the two. Especially useful when the arrow is - * enabled and you want to ensure that it points to its reference element. - * It cares only about the first axis. You can still have poppers with margin - * between the popper and its reference element. - * @memberof modifiers - * @inner + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ */ - keepTogether: { - /** @prop {number} order=400 - Index used to define the order of execution */ - order: 400, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: keepTogether - }, - + jquery_6["default"](document) + .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler) + .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler) + .on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, Dropdown._clearMenus) + .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + event.preventDefault(); + event.stopPropagation(); + Dropdown._jQueryInterface.call(jquery_6["default"](this), 'toggle'); + }) + .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { + e.stopPropagation(); + }); /** - * This modifier is used to move the `arrowElement` of the popper to make - * sure it is positioned between the reference element and its popper element. - * It will read the outer size of the `arrowElement` node to detect how many - * pixels of conjunction are needed. - * - * It has no effect if no `arrowElement` is provided. - * @memberof modifiers - * @inner + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ */ - arrow: { - /** @prop {number} order=500 - Index used to define the order of execution */ - order: 500, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: arrow, - /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */ - element: '[x-arrow]' - }, - + jquery_6["default"].fn[NAME] = Dropdown._jQueryInterface; + jquery_6["default"].fn[NAME].Constructor = Dropdown; + jquery_6["default"].fn[NAME].noConflict = function () { + jquery_6["default"].fn[NAME] = JQUERY_NO_CONFLICT; + return Dropdown._jQueryInterface; + }; + exports.__esModule = true; + exports["default"] = Dropdown; +}); +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.3.1): modal.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ +define("modal", ["require", "exports", "jquery", "util"], function (require, exports, jquery_7, util_5) { + "use strict"; /** - * Modifier used to flip the popper's placement when it starts to overlap its - * reference element. - * - * Requires the `preventOverflow` modifier before it in order to work. - * - * **NOTE:** this modifier will interrupt the current update cycle and will - * restart it if it detects the need to flip the placement. - * @memberof modifiers - * @inner + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ */ - flip: { - /** @prop {number} order=600 - Index used to define the order of execution */ - order: 600, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: flip, - /** - * @prop {String|Array} behavior='flip' - * The behavior used to change the popper's placement. It can be one of - * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid - * placements (with optional variations) - */ - behavior: 'flip', - /** - * @prop {number} padding=5 - * The popper will flip if it hits the edges of the `boundariesElement` - */ - padding: 5, - /** - * @prop {String|HTMLElement} boundariesElement='viewport' - * The element which will define the boundaries of the popper position. - * The popper will never be placed outside of the defined boundaries - * (except if `keepTogether` is enabled) - */ - boundariesElement: 'viewport' - }, - + var NAME = 'modal'; + var VERSION = '4.3.1'; + var DATA_KEY = 'bs.modal'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = jquery_7["default"].fn[NAME]; + var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key + var Default = { + backdrop: true, + keyboard: true, + focus: true, + show: true + }; + var DefaultType = { + backdrop: '(boolean|string)', + keyboard: 'boolean', + focus: 'boolean', + show: 'boolean' + }; + var Event = { + HIDE: "hide" + EVENT_KEY, + HIDDEN: "hidden" + EVENT_KEY, + SHOW: "show" + EVENT_KEY, + SHOWN: "shown" + EVENT_KEY, + FOCUSIN: "focusin" + EVENT_KEY, + RESIZE: "resize" + EVENT_KEY, + CLICK_DISMISS: "click.dismiss" + EVENT_KEY, + KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY, + MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY, + MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY + }; + var ClassName = { + SCROLLABLE: 'modal-dialog-scrollable', + SCROLLBAR_MEASURER: 'modal-scrollbar-measure', + BACKDROP: 'modal-backdrop', + OPEN: 'modal-open', + FADE: 'fade', + SHOW: 'show' + }; + var Selector = { + DIALOG: '.modal-dialog', + MODAL_BODY: '.modal-body', + DATA_TOGGLE: '[data-toggle="modal"]', + DATA_DISMISS: '[data-dismiss="modal"]', + FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', + STICKY_CONTENT: '.sticky-top' + }; + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + var Modal = (function () { + function Modal(element, config) { + this._config = this._getConfig(config); + this._element = element; + this._dialog = element.querySelector(Selector.DIALOG); + this._backdrop = null; + this._isShown = false; + this._isBodyOverflowing = false; + this._ignoreBackdropClick = false; + this._isTransitioning = false; + this._scrollbarWidth = 0; + } + Object.defineProperty(Modal, "VERSION", { + // Getters + get: function () { + return VERSION; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Modal, "Default", { + get: function () { + return Default; + }, + enumerable: true, + configurable: true + }); + // Public + Modal.prototype.toggle = function (relatedTarget) { + return this._isShown ? this.hide() : this.show(relatedTarget); + }; + Modal.prototype.show = function (relatedTarget) { + var _this = this; + if (this._isShown || this._isTransitioning) { + return; + } + if (jquery_7["default"](this._element).hasClass(ClassName.FADE)) { + this._isTransitioning = true; + } + var showEvent = jquery_7["default"].Event(Event.SHOW, { + relatedTarget: relatedTarget + }); + jquery_7["default"](this._element).trigger(showEvent); + if (this._isShown || showEvent.isDefaultPrevented()) { + return; + } + this._isShown = true; + this._checkScrollbar(); + this._setScrollbar(); + this._adjustDialog(); + this._setEscapeEvent(); + this._setResizeEvent(); + jquery_7["default"](this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) { return _this.hide(event); }); + jquery_7["default"](this._dialog).on(Event.MOUSEDOWN_DISMISS, function () { + jquery_7["default"](_this._element).one(Event.MOUSEUP_DISMISS, function (event) { + if (jquery_7["default"](event.target).is(_this._element)) { + _this._ignoreBackdropClick = true; + } + }); + }); + this._showBackdrop(function () { return _this._showElement(relatedTarget); }); + }; + Modal.prototype.hide = function (event) { + var _this = this; + if (event) { + event.preventDefault(); + } + if (!this._isShown || this._isTransitioning) { + return; + } + var hideEvent = jquery_7["default"].Event(Event.HIDE); + jquery_7["default"](this._element).trigger(hideEvent); + if (!this._isShown || hideEvent.isDefaultPrevented()) { + return; + } + this._isShown = false; + var transition = jquery_7["default"](this._element).hasClass(ClassName.FADE); + if (transition) { + this._isTransitioning = true; + } + this._setEscapeEvent(); + this._setResizeEvent(); + jquery_7["default"](document).off(Event.FOCUSIN); + jquery_7["default"](this._element).removeClass(ClassName.SHOW); + jquery_7["default"](this._element).off(Event.CLICK_DISMISS); + jquery_7["default"](this._dialog).off(Event.MOUSEDOWN_DISMISS); + if (transition) { + var transitionDuration = util_5["default"].getTransitionDurationFromElement(this._element); + jquery_7["default"](this._element) + .one(util_5["default"].TRANSITION_END, function (event) { return _this._hideModal(event); }) + .emulateTransitionEnd(transitionDuration); + } + else { + this._hideModal(); + } + }; + Modal.prototype.dispose = function () { + [window, this._element, this._dialog] + .forEach(function (htmlElement) { return jquery_7["default"](htmlElement).off(EVENT_KEY); }); + /** + * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API` + * Do not move `document` in `htmlElements` array + * It will remove `Event.CLICK_DATA_API` event that should remain + */ + jquery_7["default"](document).off(Event.FOCUSIN); + jquery_7["default"].removeData(this._element, DATA_KEY); + this._config = null; + this._element = null; + this._dialog = null; + this._backdrop = null; + this._isShown = null; + this._isBodyOverflowing = null; + this._ignoreBackdropClick = null; + this._isTransitioning = null; + this._scrollbarWidth = null; + }; + Modal.prototype.handleUpdate = function () { + this._adjustDialog(); + }; + // Private + Modal.prototype._getConfig = function (config) { + config = __assign({}, Default, config); + util_5["default"].typeCheckConfig(NAME, config, DefaultType); + return config; + }; + Modal.prototype._showElement = function (relatedTarget) { + var _this = this; + var transition = jquery_7["default"](this._element).hasClass(ClassName.FADE); + if (!this._element.parentNode || + this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { + // Don't move modal's DOM position + document.body.appendChild(this._element); + } + this._element.style.display = 'block'; + this._element.removeAttribute('aria-hidden'); + this._element.setAttribute('aria-modal', true); + if (jquery_7["default"](this._dialog).hasClass(ClassName.SCROLLABLE)) { + this._dialog.querySelector(Selector.MODAL_BODY).scrollTop = 0; + } + else { + this._element.scrollTop = 0; + } + if (transition) { + util_5["default"].reflow(this._element); + } + jquery_7["default"](this._element).addClass(ClassName.SHOW); + if (this._config.focus) { + this._enforceFocus(); + } + var shownEvent = jquery_7["default"].Event(Event.SHOWN, { + relatedTarget: relatedTarget + }); + var transitionComplete = function () { + if (_this._config.focus) { + _this._element.focus(); + } + _this._isTransitioning = false; + jquery_7["default"](_this._element).trigger(shownEvent); + }; + if (transition) { + var transitionDuration = util_5["default"].getTransitionDurationFromElement(this._dialog); + jquery_7["default"](this._dialog) + .one(util_5["default"].TRANSITION_END, transitionComplete) + .emulateTransitionEnd(transitionDuration); + } + else { + transitionComplete(); + } + }; + Modal.prototype._enforceFocus = function () { + var _this = this; + jquery_7["default"](document) + .off(Event.FOCUSIN) // Guard against infinite focus loop + .on(Event.FOCUSIN, function (event) { + if (document !== event.target && + _this._element !== event.target && + jquery_7["default"](_this._element).has(event.target).length === 0) { + _this._element.focus(); + } + }); + }; + Modal.prototype._setEscapeEvent = function () { + var _this = this; + if (this._isShown && this._config.keyboard) { + jquery_7["default"](this._element).on(Event.KEYDOWN_DISMISS, function (event) { + if (event.which === ESCAPE_KEYCODE) { + event.preventDefault(); + _this.hide(); + } + }); + } + else if (!this._isShown) { + jquery_7["default"](this._element).off(Event.KEYDOWN_DISMISS); + } + }; + Modal.prototype._setResizeEvent = function () { + var _this = this; + if (this._isShown) { + jquery_7["default"](window).on(Event.RESIZE, function (event) { return _this.handleUpdate(event); }); + } + else { + jquery_7["default"](window).off(Event.RESIZE); + } + }; + Modal.prototype._hideModal = function () { + var _this = this; + this._element.style.display = 'none'; + this._element.setAttribute('aria-hidden', true); + this._element.removeAttribute('aria-modal'); + this._isTransitioning = false; + this._showBackdrop(function () { + jquery_7["default"](document.body).removeClass(ClassName.OPEN); + _this._resetAdjustments(); + _this._resetScrollbar(); + jquery_7["default"](_this._element).trigger(Event.HIDDEN); + }); + }; + Modal.prototype._removeBackdrop = function () { + if (this._backdrop) { + jquery_7["default"](this._backdrop).remove(); + this._backdrop = null; + } + }; + Modal.prototype._showBackdrop = function (callback) { + var _this = this; + var animate = jquery_7["default"](this._element).hasClass(ClassName.FADE) + ? ClassName.FADE : ''; + if (this._isShown && this._config.backdrop) { + this._backdrop = document.createElement('div'); + this._backdrop.className = ClassName.BACKDROP; + if (animate) { + this._backdrop.classList.add(animate); + } + jquery_7["default"](this._backdrop).appendTo(document.body); + jquery_7["default"](this._element).on(Event.CLICK_DISMISS, function (event) { + if (_this._ignoreBackdropClick) { + _this._ignoreBackdropClick = false; + return; + } + if (event.target !== event.currentTarget) { + return; + } + if (_this._config.backdrop === 'static') { + _this._element.focus(); + } + else { + _this.hide(); + } + }); + if (animate) { + util_5["default"].reflow(this._backdrop); + } + jquery_7["default"](this._backdrop).addClass(ClassName.SHOW); + if (!callback) { + return; + } + if (!animate) { + callback(); + return; + } + var backdropTransitionDuration = util_5["default"].getTransitionDurationFromElement(this._backdrop); + jquery_7["default"](this._backdrop) + .one(util_5["default"].TRANSITION_END, callback) + .emulateTransitionEnd(backdropTransitionDuration); + } + else if (!this._isShown && this._backdrop) { + jquery_7["default"](this._backdrop).removeClass(ClassName.SHOW); + var callbackRemove = function () { + _this._removeBackdrop(); + if (callback) { + callback(); + } + }; + if (jquery_7["default"](this._element).hasClass(ClassName.FADE)) { + var backdropTransitionDuration = util_5["default"].getTransitionDurationFromElement(this._backdrop); + jquery_7["default"](this._backdrop) + .one(util_5["default"].TRANSITION_END, callbackRemove) + .emulateTransitionEnd(backdropTransitionDuration); + } + else { + callbackRemove(); + } + } + else if (callback) { + callback(); + } + }; + // ---------------------------------------------------------------------- + // the following methods are used to handle overflowing modals + // todo (fat): these should probably be refactored out of modal.js + // ---------------------------------------------------------------------- + Modal.prototype._adjustDialog = function () { + var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; + if (!this._isBodyOverflowing && isModalOverflowing) { + this._element.style.paddingLeft = this._scrollbarWidth + "px"; + } + if (this._isBodyOverflowing && !isModalOverflowing) { + this._element.style.paddingRight = this._scrollbarWidth + "px"; + } + }; + Modal.prototype._resetAdjustments = function () { + this._element.style.paddingLeft = ''; + this._element.style.paddingRight = ''; + }; + Modal.prototype._checkScrollbar = function () { + var rect = document.body.getBoundingClientRect(); + this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; + this._scrollbarWidth = this._getScrollbarWidth(); + }; + Modal.prototype._setScrollbar = function () { + var _this = this; + if (this._isBodyOverflowing) { + // Note: DOMNode.style.paddingRight returns the actual value or '' if not set + // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set + var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)); + var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); + // Adjust fixed content padding + jquery_7["default"](fixedContent).each(function (index, element) { + var actualPadding = element.style.paddingRight; + var calculatedPadding = jquery_7["default"](element).css('padding-right'); + jquery_7["default"](element) + .data('padding-right', actualPadding) + .css('padding-right', parseFloat(calculatedPadding) + _this._scrollbarWidth + "px"); + }); + // Adjust sticky content margin + jquery_7["default"](stickyContent).each(function (index, element) { + var actualMargin = element.style.marginRight; + var calculatedMargin = jquery_7["default"](element).css('margin-right'); + jquery_7["default"](element) + .data('margin-right', actualMargin) + .css('margin-right', parseFloat(calculatedMargin) - _this._scrollbarWidth + "px"); + }); + // Adjust body padding + var actualPadding = document.body.style.paddingRight; + var calculatedPadding = jquery_7["default"](document.body).css('padding-right'); + jquery_7["default"](document.body) + .data('padding-right', actualPadding) + .css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); + } + jquery_7["default"](document.body).addClass(ClassName.OPEN); + }; + Modal.prototype._resetScrollbar = function () { + // Restore fixed content padding + var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)); + jquery_7["default"](fixedContent).each(function (index, element) { + var padding = jquery_7["default"](element).data('padding-right'); + jquery_7["default"](element).removeData('padding-right'); + element.style.paddingRight = padding ? padding : ''; + }); + // Restore sticky content + var elements = [].slice.call(document.querySelectorAll("" + Selector.STICKY_CONTENT)); + jquery_7["default"](elements).each(function (index, element) { + var margin = jquery_7["default"](element).data('margin-right'); + if (typeof margin !== 'undefined') { + jquery_7["default"](element).css('margin-right', margin).removeData('margin-right'); + } + }); + // Restore body padding + var padding = jquery_7["default"](document.body).data('padding-right'); + jquery_7["default"](document.body).removeData('padding-right'); + document.body.style.paddingRight = padding ? padding : ''; + }; + Modal.prototype._getScrollbarWidth = function () { + var scrollDiv = document.createElement('div'); + scrollDiv.className = ClassName.SCROLLBAR_MEASURER; + document.body.appendChild(scrollDiv); + var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + }; + // Static + Modal._jQueryInterface = function (config, relatedTarget) { + return this.each(function () { + var data = jquery_7["default"](this).data(DATA_KEY); + var _config = __assign({}, Default, jquery_7["default"](this).data(), typeof config === 'object' && config ? config : {}); + if (!data) { + data = new Modal(this, _config); + jquery_7["default"](this).data(DATA_KEY, data); + } + if (typeof config === 'string') { + if (typeof data[config] === 'undefined') { + throw new TypeError("No method named \"" + config + "\""); + } + data[config](relatedTarget); + } + else if (_config.show) { + data.show(relatedTarget); + } + }); + }; + return Modal; + }()); /** - * Modifier used to make the popper flow toward the inner of the reference element. - * By default, when this modifier is disabled, the popper will be placed outside - * the reference element. - * @memberof modifiers - * @inner + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ */ - inner: { - /** @prop {number} order=700 - Index used to define the order of execution */ - order: 700, - /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */ - enabled: false, - /** @prop {ModifierFn} */ - fn: inner - }, - + jquery_7["default"](document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + var _this = this; + var target; + var selector = util_5["default"].getSelectorFromElement(this); + if (selector) { + target = document.querySelector(selector); + } + var config = jquery_7["default"](target).data(DATA_KEY) + ? 'toggle' : __assign({}, jquery_7["default"](target).data(), jquery_7["default"](this).data()); + if (this.tagName === 'A' || this.tagName === 'AREA') { + event.preventDefault(); + } + var $target = jquery_7["default"](target).one(Event.SHOW, function (showEvent) { + if (showEvent.isDefaultPrevented()) { + // Only register focus restorer if modal will actually get shown + return; + } + $target.one(Event.HIDDEN, function () { + if (jquery_7["default"](_this).is(':visible')) { + _this.focus(); + } + }); + }); + Modal._jQueryInterface.call(jquery_7["default"](target), config, this); + }); /** - * Modifier used to hide the popper when its reference element is outside of the - * popper boundaries. It will set a `x-out-of-boundaries` attribute which can - * be used to hide with a CSS selector the popper when its reference is - * out of boundaries. - * - * Requires the `preventOverflow` modifier before it in order to work. - * @memberof modifiers - * @inner + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ */ - hide: { - /** @prop {number} order=800 - Index used to define the order of execution */ - order: 800, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: hide - }, - + jquery_7["default"].fn[NAME] = Modal._jQueryInterface; + jquery_7["default"].fn[NAME].Constructor = Modal; + jquery_7["default"].fn[NAME].noConflict = function () { + jquery_7["default"].fn[NAME] = JQUERY_NO_CONFLICT; + return Modal._jQueryInterface; + }; + exports.__esModule = true; + exports["default"] = Modal; +}); +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.3.1): tools/sanitizer.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ +define("tools/sanitizer", ["require", "exports"], function (require, exports) { + "use strict"; + var uriAttrs = [ + 'background', + 'cite', + 'href', + 'itemtype', + 'longdesc', + 'poster', + 'src', + 'xlink:href' + ]; + var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; + exports.DefaultWhitelist = { + // Global attributes allowed on any supplied element below. + '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], + a: ['target', 'href', 'title', 'rel'], + area: [], + b: [], + br: [], + col: [], + code: [], + div: [], + em: [], + hr: [], + h1: [], + h2: [], + h3: [], + h4: [], + h5: [], + h6: [], + i: [], + img: ['src', 'alt', 'title', 'width', 'height'], + li: [], + ol: [], + p: [], + pre: [], + s: [], + small: [], + span: [], + sub: [], + sup: [], + strong: [], + u: [], + ul: [] + }; /** - * Computes the style that will be applied to the popper element to gets - * properly positioned. - * - * Note that this modifier will not touch the DOM, it just prepares the styles - * so that `applyStyle` modifier can apply it. This separation is useful - * in case you need to replace `applyStyle` with a custom implementation. - * - * This modifier has `850` as `order` value to maintain backward compatibility - * with previous versions of Popper.js. Expect the modifiers ordering method - * to change in future major versions of the library. + * A pattern that recognizes a commonly useful subset of URLs that are safe. * - * @memberof modifiers - * @inner + * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts */ - computeStyle: { - /** @prop {number} order=850 - Index used to define the order of execution */ - order: 850, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: computeStyle, - /** - * @prop {Boolean} gpuAcceleration=true - * If true, it uses the CSS 3D transformation to position the popper. - * Otherwise, it will use the `top` and `left` properties - */ - gpuAcceleration: true, - /** - * @prop {string} [x='bottom'] - * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. - * Change this if your popper should grow in a direction different from `bottom` - */ - x: 'bottom', - /** - * @prop {string} [x='left'] - * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. - * Change this if your popper should grow in a direction different from `right` - */ - y: 'right' - }, - + var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi; /** - * Applies the computed styles to the popper element. - * - * All the DOM manipulations are limited to this modifier. This is useful in case - * you want to integrate Popper.js inside a framework or view library and you - * want to delegate all the DOM manipulations to it. - * - * Note that if you disable this modifier, you must make sure the popper element - * has its position set to `absolute` before Popper.js can do its work! + * A pattern that matches safe data URLs. Only matches image, video and audio types. * - * Just disable this modifier and define your own to achieve the desired effect. - * - * @memberof modifiers - * @inner - */ - applyStyle: { - /** @prop {number} order=900 - Index used to define the order of execution */ - order: 900, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: applyStyle, - /** @prop {Function} */ - onLoad: applyStyleOnLoad, - /** - * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier - * @prop {Boolean} gpuAcceleration=true - * If true, it uses the CSS 3D transformation to position the popper. - * Otherwise, it will use the `top` and `left` properties - */ - gpuAcceleration: undefined - } - }; - - /** - * The `dataObject` is an object containing all the information used by Popper.js. - * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks. - * @name dataObject - * @property {Object} data.instance The Popper.js instance - * @property {String} data.placement Placement applied to popper - * @property {String} data.originalPlacement Placement originally defined on init - * @property {Boolean} data.flipped True if popper has been flipped by flip modifier - * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper - * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier - * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`) - * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`) - * @property {Object} data.boundaries Offsets of the popper boundaries - * @property {Object} data.offsets The measurements of popper, reference and arrow elements - * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values - * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values - * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0 - */ - - /** - * Default options provided to Popper.js constructor.
    - * These can be overridden using the `options` argument of Popper.js.
    - * To override an option, simply pass an object with the same - * structure of the `options` object, as the 3rd argument. For example: - * ``` - * new Popper(ref, pop, { - * modifiers: { - * preventOverflow: { enabled: false } - * } - * }) - * ``` - * @type {Object} - * @static - * @memberof Popper - */ - var Defaults = { - /** - * Popper's placement. - * @prop {Popper.placements} placement='bottom' - */ - placement: 'bottom', - - /** - * Set this to true if you want popper to position it self in 'fixed' mode - * @prop {Boolean} positionFixed=false - */ - positionFixed: false, - - /** - * Whether events (resize, scroll) are initially enabled. - * @prop {Boolean} eventsEnabled=true - */ - eventsEnabled: true, - - /** - * Set to true if you want to automatically remove the popper when - * you call the `destroy` method. - * @prop {Boolean} removeOnDestroy=false - */ - removeOnDestroy: false, - - /** - * Callback called when the popper is created.
    - * By default, it is set to no-op.
    - * Access Popper.js instance with `data.instance`. - * @prop {onCreate} - */ - onCreate: function onCreate() {}, - - /** - * Callback called when the popper is updated. This callback is not called - * on the initialization/creation of the popper, but only on subsequent - * updates.
    - * By default, it is set to no-op.
    - * Access Popper.js instance with `data.instance`. - * @prop {onUpdate} - */ - onUpdate: function onUpdate() {}, - - /** - * List of modifiers used to modify the offsets before they are applied to the popper. - * They provide most of the functionalities of Popper.js. - * @prop {modifiers} + * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts */ - modifiers: modifiers - }; - - /** - * @callback onCreate - * @param {dataObject} data - */ - - /** - * @callback onUpdate - * @param {dataObject} data - */ - - // Utils - // Methods - var Popper = function () { + var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i; + function allowedAttribute(attr, allowedAttributeList) { + var attrName = attr.nodeName.toLowerCase(); + if (allowedAttributeList.indexOf(attrName) !== -1) { + if (uriAttrs.indexOf(attrName) !== -1) { + return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN)); + } + return true; + } + var regExp = allowedAttributeList.filter(function (attrRegex) { return attrRegex instanceof RegExp; }); + // Check if a regular expression validates the attribute. + for (var i = 0, l = regExp.length; i < l; i++) { + if (attrName.match(regExp[i])) { + return true; + } + } + return false; + } + function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { + if (unsafeHtml.length === 0) { + return unsafeHtml; + } + if (sanitizeFn && typeof sanitizeFn === 'function') { + return sanitizeFn(unsafeHtml); + } + var domParser = new window.DOMParser(); + var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); + var whitelistKeys = Object.keys(whiteList); + var elements = [].slice.call(createdDocument.body.querySelectorAll('*')); + var _loop_1 = function (i, len) { + var el = elements[i]; + var elName = el.nodeName.toLowerCase(); + if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { + el.parentNode.removeChild(el); + return "continue"; + } + var attributeList = [].slice.call(el.attributes); + var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []); + attributeList.forEach(function (attr) { + if (!allowedAttribute(attr, whitelistedAttributes)) { + el.removeAttribute(attr.nodeName); + } + }); + }; + for (var i = 0, len = elements.length; i < len; i++) { + _loop_1(i, len); + } + return createdDocument.body.innerHTML; + } + exports.sanitizeHtml = sanitizeHtml; +}); +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.3.1): tooltip.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ +define("tooltip", ["require", "exports", "tools/sanitizer", "jquery", "popper.js", "util"], function (require, exports, sanitizer_1, jquery_8, popper_js_2, util_6) { + "use strict"; /** - * Creates a new Popper.js instance. - * @class Popper - * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper - * @param {HTMLElement} popper - The HTML element used as the popper - * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) - * @return {Object} instance - The generated Popper.js instance + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ */ - function Popper(reference, popper) { - var _this = this; - - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - classCallCheck(this, Popper); - - this.scheduleUpdate = function () { - return requestAnimationFrame(_this.update); - }; - - // make update() debounced, so that it only runs at most once-per-tick - this.update = debounce(this.update.bind(this)); - - // with {} we create a new object with the options inside it - this.options = _extends({}, Popper.Defaults, options); - - // init state - this.state = { - isDestroyed: false, - isCreated: false, - scrollParents: [] - }; - - // get reference and popper elements (allow jQuery wrappers) - this.reference = reference && reference.jquery ? reference[0] : reference; - this.popper = popper && popper.jquery ? popper[0] : popper; - - // Deep merge modifiers options - this.options.modifiers = {}; - Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) { - _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {}); - }); - - // Refactoring modifiers' list (Object => Array) - this.modifiers = Object.keys(this.options.modifiers).map(function (name) { - return _extends({ - name: name - }, _this.options.modifiers[name]); - }) - // sort the modifiers by order - .sort(function (a, b) { - return a.order - b.order; - }); - - // modifiers have the ability to execute arbitrary code when Popper.js get inited - // such code is executed in the same order of its modifier - // they could add new properties to their options configuration - // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`! - this.modifiers.forEach(function (modifierOptions) { - if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) { - modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state); - } - }); - - // fire the first update to position the popper in the right place - this.update(); - - var eventsEnabled = this.options.eventsEnabled; - if (eventsEnabled) { - // setup event listeners, they will take care of update the position in specific situations - this.enableEventListeners(); - } - - this.state.eventsEnabled = eventsEnabled; - } - - // We can't use class properties because they don't get listed in the - // class prototype and break stuff like Sinon stubs - - - createClass(Popper, [{ - key: 'update', - value: function update$$1() { - return update.call(this); - } - }, { - key: 'destroy', - value: function destroy$$1() { - return destroy.call(this); - } - }, { - key: 'enableEventListeners', - value: function enableEventListeners$$1() { - return enableEventListeners.call(this); - } - }, { - key: 'disableEventListeners', - value: function disableEventListeners$$1() { - return disableEventListeners.call(this); - } - - /** - * Schedules an update. It will run on the next UI update available. - * @method scheduleUpdate - * @memberof Popper - */ - - - /** - * Collection of utilities useful when writing custom modifiers. - * Starting from version 1.7, this method is available only if you - * include `popper-utils.js` before `popper.js`. - * - * **DEPRECATION**: This way to access PopperUtils is deprecated - * and will be removed in v2! Use the PopperUtils module directly instead. - * Due to the high instability of the methods contained in Utils, we can't - * guarantee them to follow semver. Use them at your own risk! - * @static - * @private - * @type {Object} - * @deprecated since version 1.8 - * @member Utils - * @memberof Popper - */ - - }]); - return Popper; - }(); - - /** - * The `referenceObject` is an object that provides an interface compatible with Popper.js - * and lets you use it as replacement of a real DOM node.
    - * You can use this method to position a popper relatively to a set of coordinates - * in case you don't have a DOM node to use as reference. - * - * ``` - * new Popper(referenceObject, popperNode); - * ``` - * - * NB: This feature isn't supported in Internet Explorer 10. - * @name referenceObject - * @property {Function} data.getBoundingClientRect - * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method. - * @property {number} data.clientWidth - * An ES6 getter that will return the width of the virtual reference element. - * @property {number} data.clientHeight - * An ES6 getter that will return the height of the virtual reference element. - */ - - - Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils; - Popper.placements = placements; - Popper.Defaults = Defaults; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$4 = 'dropdown'; - var VERSION$4 = '4.3.1'; - var DATA_KEY$4 = 'bs.dropdown'; - var EVENT_KEY$4 = "." + DATA_KEY$4; - var DATA_API_KEY$4 = '.data-api'; - var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4]; - var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key - - var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key - - var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key - - var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key - - var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key - - var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) - - var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); - var Event$4 = { - HIDE: "hide" + EVENT_KEY$4, - HIDDEN: "hidden" + EVENT_KEY$4, - SHOW: "show" + EVENT_KEY$4, - SHOWN: "shown" + EVENT_KEY$4, - CLICK: "click" + EVENT_KEY$4, - CLICK_DATA_API: "click" + EVENT_KEY$4 + DATA_API_KEY$4, - KEYDOWN_DATA_API: "keydown" + EVENT_KEY$4 + DATA_API_KEY$4, - KEYUP_DATA_API: "keyup" + EVENT_KEY$4 + DATA_API_KEY$4 - }; - var ClassName$4 = { - DISABLED: 'disabled', - SHOW: 'show', - DROPUP: 'dropup', - DROPRIGHT: 'dropright', - DROPLEFT: 'dropleft', - MENURIGHT: 'dropdown-menu-right', - MENULEFT: 'dropdown-menu-left', - POSITION_STATIC: 'position-static' - }; - var Selector$4 = { - DATA_TOGGLE: '[data-toggle="dropdown"]', - FORM_CHILD: '.dropdown form', - MENU: '.dropdown-menu', - NAVBAR_NAV: '.navbar-nav', - VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' - }; - var AttachmentMap = { - TOP: 'top-start', - TOPEND: 'top-end', - BOTTOM: 'bottom-start', - BOTTOMEND: 'bottom-end', - RIGHT: 'right-start', - RIGHTEND: 'right-end', - LEFT: 'left-start', - LEFTEND: 'left-end' - }; - var Default$2 = { - offset: 0, - flip: true, - boundary: 'scrollParent', - reference: 'toggle', - display: 'dynamic' - }; - var DefaultType$2 = { - offset: '(number|string|function)', - flip: 'boolean', - boundary: '(string|element)', - reference: '(string|element)', - display: 'string' + var NAME = 'tooltip'; + var VERSION = '4.3.1'; + var DATA_KEY = 'bs.tooltip'; + var EVENT_KEY = "." + DATA_KEY; + var JQUERY_NO_CONFLICT = jquery_8["default"].fn[NAME]; + var CLASS_PREFIX = 'bs-tooltip'; + var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); + var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']; + var DefaultType = { + animation: 'boolean', + template: 'string', + title: '(string|element|function)', + trigger: 'string', + delay: '(number|object)', + html: 'boolean', + selector: '(string|boolean)', + placement: '(string|function)', + offset: '(number|string|function)', + container: '(string|element|boolean)', + fallbackPlacement: '(string|array)', + boundary: '(string|element)', + sanitize: 'boolean', + sanitizeFn: '(null|function)', + whiteList: 'object' + }; + var AttachmentMap = { + AUTO: 'auto', + TOP: 'top', + RIGHT: 'right', + BOTTOM: 'bottom', + LEFT: 'left' + }; + var Default = { + animation: true, + template: '', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + selector: false, + placement: 'top', + offset: 0, + container: false, + fallbackPlacement: 'flip', + boundary: 'scrollParent', + sanitize: true, + sanitizeFn: null, + whiteList: sanitizer_1.DefaultWhitelist + }; + var HoverState = { + SHOW: 'show', + OUT: 'out' + }; + var Event = { + HIDE: "hide" + EVENT_KEY, + HIDDEN: "hidden" + EVENT_KEY, + SHOW: "show" + EVENT_KEY, + SHOWN: "shown" + EVENT_KEY, + INSERTED: "inserted" + EVENT_KEY, + CLICK: "click" + EVENT_KEY, + FOCUSIN: "focusin" + EVENT_KEY, + FOCUSOUT: "focusout" + EVENT_KEY, + MOUSEENTER: "mouseenter" + EVENT_KEY, + MOUSELEAVE: "mouseleave" + EVENT_KEY + }; + var ClassName = { + FADE: 'fade', + SHOW: 'show' + }; + var Selector = { + TOOLTIP: '.tooltip', + TOOLTIP_INNER: '.tooltip-inner', + ARROW: '.arrow' + }; + var Trigger = { + HOVER: 'hover', + FOCUS: 'focus', + CLICK: 'click', + MANUAL: 'manual' + }; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ - - }; - - var Dropdown = - /*#__PURE__*/ - function () { - function Dropdown(element, config) { - this._element = element; - this._popper = null; - this._config = this._getConfig(config); - this._menu = this._getMenuElement(); - this._inNavbar = this._detectNavbar(); - - this._addEventListeners(); - } // Getters - - - var _proto = Dropdown.prototype; - - // Public - _proto.toggle = function toggle() { - if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) { - return; - } - - var parent = Dropdown._getParentFromElement(this._element); - - var isActive = $(this._menu).hasClass(ClassName$4.SHOW); - - Dropdown._clearMenus(); - - if (isActive) { - return; - } - - var relatedTarget = { - relatedTarget: this._element - }; - var showEvent = $.Event(Event$4.SHOW, relatedTarget); - $(parent).trigger(showEvent); - - if (showEvent.isDefaultPrevented()) { - return; - } // Disable totally Popper.js for Dropdown in Navbar - - - if (!this._inNavbar) { - /** - * Check for Popper dependency - * Popper - https://popper.js.org - */ - if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)'); - } - - var referenceElement = this._element; - - if (this._config.reference === 'parent') { - referenceElement = parent; - } else if (Util.isElement(this._config.reference)) { - referenceElement = this._config.reference; // Check if it's jQuery element - - if (typeof this._config.reference.jquery !== 'undefined') { - referenceElement = this._config.reference[0]; - } - } // If boundary is not `scrollParent`, then set position to `static` - // to allow the menu to "escape" the scroll parent's boundaries - // https://github.com/twbs/bootstrap/issues/24251 - - - if (this._config.boundary !== 'scrollParent') { - $(parent).addClass(ClassName$4.POSITION_STATIC); - } - - this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); - } // If this is a touch-enabled device we add extra - // empty mouseover listeners to the body's immediate children; - // only needed because of broken event delegation on iOS - // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - - - if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) { - $(document.body).children().on('mouseover', null, $.noop); - } - - this._element.focus(); - - this._element.setAttribute('aria-expanded', true); - - $(this._menu).toggleClass(ClassName$4.SHOW); - $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget)); - }; - - _proto.show = function show() { - if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) { - return; - } - - var relatedTarget = { - relatedTarget: this._element - }; - var showEvent = $.Event(Event$4.SHOW, relatedTarget); - - var parent = Dropdown._getParentFromElement(this._element); - - $(parent).trigger(showEvent); - - if (showEvent.isDefaultPrevented()) { - return; - } - - $(this._menu).toggleClass(ClassName$4.SHOW); - $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget)); - }; - - _proto.hide = function hide() { - if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) { - return; - } - - var relatedTarget = { - relatedTarget: this._element - }; - var hideEvent = $.Event(Event$4.HIDE, relatedTarget); - - var parent = Dropdown._getParentFromElement(this._element); - - $(parent).trigger(hideEvent); - - if (hideEvent.isDefaultPrevented()) { - return; - } - - $(this._menu).toggleClass(ClassName$4.SHOW); - $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); - }; - - _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY$4); - $(this._element).off(EVENT_KEY$4); - this._element = null; - this._menu = null; - - if (this._popper !== null) { - this._popper.destroy(); - - this._popper = null; - } - }; - - _proto.update = function update() { - this._inNavbar = this._detectNavbar(); - - if (this._popper !== null) { - this._popper.scheduleUpdate(); - } - } // Private - ; - - _proto._addEventListeners = function _addEventListeners() { - var _this = this; - - $(this._element).on(Event$4.CLICK, function (event) { - event.preventDefault(); - event.stopPropagation(); - - _this.toggle(); - }); - }; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config); - Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType); - return config; - }; - - _proto._getMenuElement = function _getMenuElement() { - if (!this._menu) { - var parent = Dropdown._getParentFromElement(this._element); - - if (parent) { - this._menu = parent.querySelector(Selector$4.MENU); - } - } - - return this._menu; - }; - - _proto._getPlacement = function _getPlacement() { - var $parentDropdown = $(this._element.parentNode); - var placement = AttachmentMap.BOTTOM; // Handle dropup - - if ($parentDropdown.hasClass(ClassName$4.DROPUP)) { - placement = AttachmentMap.TOP; - - if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { - placement = AttachmentMap.TOPEND; - } - } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) { - placement = AttachmentMap.RIGHT; - } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) { - placement = AttachmentMap.LEFT; - } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { - placement = AttachmentMap.BOTTOMEND; - } - - return placement; - }; - - _proto._detectNavbar = function _detectNavbar() { - return $(this._element).closest('.navbar').length > 0; - }; - - _proto._getOffset = function _getOffset() { - var _this2 = this; - - var offset = {}; - - if (typeof this._config.offset === 'function') { - offset.fn = function (data) { - data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {}); - return data; - }; - } else { - offset.offset = this._config.offset; - } - - return offset; - }; - - _proto._getPopperConfig = function _getPopperConfig() { - var popperConfig = { - placement: this._getPlacement(), - modifiers: { - offset: this._getOffset(), - flip: { - enabled: this._config.flip - }, - preventOverflow: { - boundariesElement: this._config.boundary - } - } // Disable Popper.js if we have a static display - - }; - - if (this._config.display === 'static') { - popperConfig.modifiers.applyStyle = { - enabled: false + var Tooltip = (function () { + function Tooltip(element, config) { + /** + * Check for Popper dependency + * Popper - https://popper.js.org + */ + if (typeof popper_js_2["default"] === 'undefined') { + throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)'); + } + // private + this._isEnabled = true; + this._timeout = 0; + this._hoverState = ''; + this._activeTrigger = {}; + this._popper = null; + // Protected + this.element = element; + this.config = this._getConfig(config); + this.tip = null; + this._setListeners(); + } + Object.defineProperty(Tooltip, "VERSION", { + // Getters + get: function () { + return VERSION; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Tooltip, "Default", { + get: function () { + return Default; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Tooltip, "NAME", { + get: function () { + return NAME; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Tooltip, "DATA_KEY", { + get: function () { + return DATA_KEY; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Tooltip, "Event", { + get: function () { + return Event; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Tooltip, "EVENT_KEY", { + get: function () { + return EVENT_KEY; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Tooltip, "DefaultType", { + get: function () { + return DefaultType; + }, + enumerable: true, + configurable: true + }); + // Public + Tooltip.prototype.enable = function () { + this._isEnabled = true; + }; + Tooltip.prototype.disable = function () { + this._isEnabled = false; + }; + Tooltip.prototype.toggleEnabled = function () { + this._isEnabled = !this._isEnabled; + }; + Tooltip.prototype.toggle = function (event) { + if (!this._isEnabled) { + return; + } + if (event) { + var dataKey = this.constructor.DATA_KEY; + var context = jquery_8["default"](event.currentTarget).data(dataKey); + if (!context) { + context = new this.constructor(event.currentTarget, this._getDelegateConfig()); + jquery_8["default"](event.currentTarget).data(dataKey, context); + } + context._activeTrigger.click = !context._activeTrigger.click; + if (context._isWithActiveTrigger()) { + context._enter(null, context); + } + else { + context._leave(null, context); + } + } + else { + if (jquery_8["default"](this.getTipElement()).hasClass(ClassName.SHOW)) { + this._leave(null, this); + return; + } + this._enter(null, this); + } + }; + Tooltip.prototype.dispose = function () { + clearTimeout(this._timeout); + jquery_8["default"].removeData(this.element, this.constructor.DATA_KEY); + jquery_8["default"](this.element).off(this.constructor.EVENT_KEY); + jquery_8["default"](this.element).closest('.modal').off('hide.bs.modal'); + if (this.tip) { + jquery_8["default"](this.tip).remove(); + } + this._isEnabled = null; + this._timeout = null; + this._hoverState = null; + this._activeTrigger = null; + if (this._popper !== null) { + this._popper.destroy(); + } + this._popper = null; + this.element = null; + this.config = null; + this.tip = null; + }; + Tooltip.prototype.show = function () { + var _this = this; + if (jquery_8["default"](this.element).css('display') === 'none') { + throw new Error('Please use show on visible elements'); + } + var showEvent = jquery_8["default"].Event(this.constructor.Event.SHOW); + if (this.isWithContent() && this._isEnabled) { + jquery_8["default"](this.element).trigger(showEvent); + var shadowRoot = util_6["default"].findShadowRoot(this.element); + var isInTheDom = jquery_8["default"].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); + if (showEvent.isDefaultPrevented() || !isInTheDom) { + return; + } + var tip = this.getTipElement(); + var tipId = util_6["default"].getUID(this.constructor.NAME); + tip.setAttribute('id', tipId); + this.element.setAttribute('aria-describedby', tipId); + this.setContent(); + if (this.config.animation) { + jquery_8["default"](tip).addClass(ClassName.FADE); + } + var placement = typeof this.config.placement === 'function' + ? this.config.placement.call(this, tip, this.element) + : this.config.placement; + var attachment = this._getAttachment(placement); + this.addAttachmentClass(attachment); + var container = this._getContainer(); + jquery_8["default"](tip).data(this.constructor.DATA_KEY, this); + if (!jquery_8["default"].contains(this.element.ownerDocument.documentElement, this.tip)) { + jquery_8["default"](tip).appendTo(container); + } + jquery_8["default"](this.element).trigger(this.constructor.Event.INSERTED); + this._popper = new popper_js_2["default"](this.element, tip, { + placement: attachment, + modifiers: { + offset: this._getOffset(), + flip: { + behavior: this.config.fallbackPlacement + }, + arrow: { + element: Selector.ARROW + }, + preventOverflow: { + boundariesElement: this.config.boundary + } + }, + onCreate: function (data) { + if (data.originalPlacement !== data.placement) { + _this._handlePopperPlacementChange(data); + } + }, + onUpdate: function (data) { return _this._handlePopperPlacementChange(data); } + }); + jquery_8["default"](tip).addClass(ClassName.SHOW); + // If this is a touch-enabled device we add extra + // empty mouseover listeners to the body's immediate children; + // only needed because of broken event delegation on iOS + // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html + if ('ontouchstart' in document.documentElement) { + jquery_8["default"](document.body).children().on('mouseover', null, jquery_8["default"].noop); + } + var complete = function () { + if (_this.config.animation) { + _this._fixTransition(); + } + var prevHoverState = _this._hoverState; + _this._hoverState = null; + jquery_8["default"](_this.element).trigger(_this.constructor.Event.SHOWN); + if (prevHoverState === HoverState.OUT) { + _this._leave(null, _this); + } + }; + if (jquery_8["default"](this.tip).hasClass(ClassName.FADE)) { + var transitionDuration = util_6["default"].getTransitionDurationFromElement(this.tip); + jquery_8["default"](this.tip) + .one(util_6["default"].TRANSITION_END, complete) + .emulateTransitionEnd(transitionDuration); + } + else { + complete(); + } + } + }; + Tooltip.prototype.hide = function (callback) { + var _this = this; + var tip = this.getTipElement(); + var hideEvent = jquery_8["default"].Event(this.constructor.Event.HIDE); + var complete = function () { + if (_this._hoverState !== HoverState.SHOW && tip.parentNode) { + tip.parentNode.removeChild(tip); + } + _this._cleanTipClass(); + _this.element.removeAttribute('aria-describedby'); + jquery_8["default"](_this.element).trigger(_this.constructor.Event.HIDDEN); + if (_this._popper !== null) { + _this._popper.destroy(); + } + if (callback) { + callback(); + } + }; + jquery_8["default"](this.element).trigger(hideEvent); + if (hideEvent.isDefaultPrevented()) { + return; + } + jquery_8["default"](tip).removeClass(ClassName.SHOW); + // If this is a touch-enabled device we remove the extra + // empty mouseover listeners we added for iOS support + if ('ontouchstart' in document.documentElement) { + jquery_8["default"](document.body).children().off('mouseover', null, jquery_8["default"].noop); + } + this._activeTrigger[Trigger.CLICK] = false; + this._activeTrigger[Trigger.FOCUS] = false; + this._activeTrigger[Trigger.HOVER] = false; + if (jquery_8["default"](this.tip).hasClass(ClassName.FADE)) { + var transitionDuration = util_6["default"].getTransitionDurationFromElement(tip); + jquery_8["default"](tip) + .one(util_6["default"].TRANSITION_END, complete) + .emulateTransitionEnd(transitionDuration); + } + else { + complete(); + } + this._hoverState = ''; + }; + Tooltip.prototype.update = function () { + if (this._popper !== null) { + this._popper.scheduleUpdate(); + } + }; + // Protected + Tooltip.prototype.isWithContent = function () { + return Boolean(this.getTitle()); + }; + Tooltip.prototype.addAttachmentClass = function (attachment) { + jquery_8["default"](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); + }; + Tooltip.prototype.getTipElement = function () { + this.tip = this.tip || jquery_8["default"](this.config.template)[0]; + return this.tip; + }; + Tooltip.prototype.setContent = function () { + var tip = this.getTipElement(); + this.setElementContent(jquery_8["default"](tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle()); + jquery_8["default"](tip).removeClass(ClassName.FADE + " " + ClassName.SHOW); + }; + Tooltip.prototype.setElementContent = function ($element, content) { + if (typeof content === 'object' && (content.nodeType || content.jquery)) { + // Content is a DOM node or a jQuery + if (this.config.html) { + if (!jquery_8["default"](content).parent().is($element)) { + $element.empty().append(content); + } + } + else { + $element.text(jquery_8["default"](content).text()); + } + return; + } + if (this.config.html) { + if (this.config.sanitize) { + content = sanitizer_1.sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn); + } + $element.html(content); + } + else { + $element.text(content); + } + }; + Tooltip.prototype.getTitle = function () { + var title = this.element.getAttribute('data-original-title'); + if (!title) { + title = typeof this.config.title === 'function' + ? this.config.title.call(this.element) + : this.config.title; + } + return title; + }; + // Private + Tooltip.prototype._getOffset = function () { + var _this = this; + var offset = {}; + if (typeof this.config.offset === 'function') { + offset.fn = function (data) { + data.offsets = __assign({}, data.offsets, _this.config.offset(data.offsets, _this.element) || {}); + return data; + }; + } + else { + offset.offset = this.config.offset; + } + return offset; + }; + Tooltip.prototype._getContainer = function () { + if (this.config.container === false) { + return document.body; + } + if (util_6["default"].isElement(this.config.container)) { + return jquery_8["default"](this.config.container); + } + return jquery_8["default"](document).find(this.config.container); + }; + Tooltip.prototype._getAttachment = function (placement) { + return AttachmentMap[placement.toUpperCase()]; + }; + Tooltip.prototype._setListeners = function () { + var _this = this; + var triggers = this.config.trigger.split(' '); + triggers.forEach(function (trigger) { + if (trigger === 'click') { + jquery_8["default"](_this.element).on(_this.constructor.Event.CLICK, _this.config.selector, function (event) { return _this.toggle(event); }); + } + else if (trigger !== Trigger.MANUAL) { + var eventIn = trigger === Trigger.HOVER + ? _this.constructor.Event.MOUSEENTER + : _this.constructor.Event.FOCUSIN; + var eventOut = trigger === Trigger.HOVER + ? _this.constructor.Event.MOUSELEAVE + : _this.constructor.Event.FOCUSOUT; + jquery_8["default"](_this.element) + .on(eventIn, _this.config.selector, function (event) { return _this._enter(event); }) + .on(eventOut, _this.config.selector, function (event) { return _this._leave(event); }); + } + }); + jquery_8["default"](this.element).closest('.modal').on('hide.bs.modal', function () { + if (_this.element) { + _this.hide(); + } + }); + if (this.config.selector) { + this.config = __assign({}, this.config, { trigger: 'manual', selector: '' }); + } + else { + this._fixTitle(); + } + }; + Tooltip.prototype._fixTitle = function () { + var titleType = typeof this.element.getAttribute('data-original-title'); + if (this.element.getAttribute('title') || titleType !== 'string') { + this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); + this.element.setAttribute('title', ''); + } + }; + Tooltip.prototype._enter = function (event, context) { + var dataKey = this.constructor.DATA_KEY; + context = context || jquery_8["default"](event.currentTarget).data(dataKey); + if (!context) { + context = new this.constructor(event.currentTarget, this._getDelegateConfig()); + jquery_8["default"](event.currentTarget).data(dataKey, context); + } + if (event) { + context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; + } + if (jquery_8["default"](context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) { + context._hoverState = HoverState.SHOW; + return; + } + clearTimeout(context._timeout); + context._hoverState = HoverState.SHOW; + if (!context.config.delay || !context.config.delay.show) { + context.show(); + return; + } + context._timeout = setTimeout(function () { + if (context._hoverState === HoverState.SHOW) { + context.show(); + } + }, context.config.delay.show); + }; + Tooltip.prototype._leave = function (event, context) { + var dataKey = this.constructor.DATA_KEY; + context = context || jquery_8["default"](event.currentTarget).data(dataKey); + if (!context) { + context = new this.constructor(event.currentTarget, this._getDelegateConfig()); + jquery_8["default"](event.currentTarget).data(dataKey, context); + } + if (event) { + context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; + } + if (context._isWithActiveTrigger()) { + return; + } + clearTimeout(context._timeout); + context._hoverState = HoverState.OUT; + if (!context.config.delay || !context.config.delay.hide) { + context.hide(); + return; + } + context._timeout = setTimeout(function () { + if (context._hoverState === HoverState.OUT) { + context.hide(); + } + }, context.config.delay.hide); }; - } - - return popperConfig; - } // Static - ; - - Dropdown._jQueryInterface = function _jQueryInterface(config) { - return this.each(function () { - var data = $(this).data(DATA_KEY$4); - - var _config = typeof config === 'object' ? config : null; - - if (!data) { - data = new Dropdown(this, _config); - $(this).data(DATA_KEY$4, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](); - } - }); - }; - - Dropdown._clearMenus = function _clearMenus(event) { - if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { - return; - } - - var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE)); - - for (var i = 0, len = toggles.length; i < len; i++) { - var parent = Dropdown._getParentFromElement(toggles[i]); - - var context = $(toggles[i]).data(DATA_KEY$4); - var relatedTarget = { - relatedTarget: toggles[i] + Tooltip.prototype._isWithActiveTrigger = function () { + for (var trigger in this._activeTrigger) { + if (this._activeTrigger[trigger]) { + return true; + } + } + return false; }; - - if (event && event.type === 'click') { - relatedTarget.clickEvent = event; - } - - if (!context) { - continue; - } - - var dropdownMenu = context._menu; - - if (!$(parent).hasClass(ClassName$4.SHOW)) { - continue; - } - - if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) { - continue; - } - - var hideEvent = $.Event(Event$4.HIDE, relatedTarget); - $(parent).trigger(hideEvent); - - if (hideEvent.isDefaultPrevented()) { - continue; - } // If this is a touch-enabled device we remove the extra - // empty mouseover listeners we added for iOS support - - - if ('ontouchstart' in document.documentElement) { - $(document.body).children().off('mouseover', null, $.noop); - } - - toggles[i].setAttribute('aria-expanded', 'false'); - $(dropdownMenu).removeClass(ClassName$4.SHOW); - $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); - } - }; - - Dropdown._getParentFromElement = function _getParentFromElement(element) { - var parent; - var selector = Util.getSelectorFromElement(element); - - if (selector) { - parent = document.querySelector(selector); - } - - return parent || element.parentNode; - } // eslint-disable-next-line complexity - ; - - Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { - // If not input/textarea: - // - And not a key in REGEXP_KEYDOWN => not a dropdown command - // If input/textarea: - // - If space key => not a dropdown command - // - If key is other than escape - // - If key is not up or down => not a dropdown command - // - If trigger inside the menu => not a dropdown command - if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { - return; - } - - event.preventDefault(); - event.stopPropagation(); - - if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) { - return; - } - - var parent = Dropdown._getParentFromElement(this); - - var isActive = $(parent).hasClass(ClassName$4.SHOW); - - if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { - if (event.which === ESCAPE_KEYCODE) { - var toggle = parent.querySelector(Selector$4.DATA_TOGGLE); - $(toggle).trigger('focus'); - } - - $(this).trigger('click'); - return; - } - - var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS)); - - if (items.length === 0) { - return; - } - - var index = items.indexOf(event.target); - - if (event.which === ARROW_UP_KEYCODE && index > 0) { - // Up - index--; - } - - if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { - // Down - index++; - } - - if (index < 0) { - index = 0; - } - - items[index].focus(); + Tooltip.prototype._getConfig = function (config) { + var dataAttributes = jquery_8["default"](this.element).data(); + Object.keys(dataAttributes) + .forEach(function (dataAttr) { + if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) { + delete dataAttributes[dataAttr]; + } + }); + config = __assign({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {}); + if (typeof config.delay === 'number') { + config.delay = { + show: config.delay, + hide: config.delay + }; + } + if (typeof config.title === 'number') { + config.title = config.title.toString(); + } + if (typeof config.content === 'number') { + config.content = config.content.toString(); + } + util_6["default"].typeCheckConfig(NAME, config, this.constructor.DefaultType); + if (config.sanitize) { + config.template = sanitizer_1.sanitizeHtml(config.template, config.whiteList, config.sanitizeFn); + } + return config; + }; + Tooltip.prototype._getDelegateConfig = function () { + var config = {}; + if (this.config) { + for (var key in this.config) { + if (this.constructor.Default[key] !== this.config[key]) { + config[key] = this.config[key]; + } + } + } + return config; + }; + Tooltip.prototype._cleanTipClass = function () { + var $tip = jquery_8["default"](this.getTipElement()); + var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); + if (tabClass !== null && tabClass.length) { + $tip.removeClass(tabClass.join('')); + } + }; + Tooltip.prototype._handlePopperPlacementChange = function (popperData) { + var popperInstance = popperData.instance; + this.tip = popperInstance.popper; + this._cleanTipClass(); + this.addAttachmentClass(this._getAttachment(popperData.placement)); + }; + Tooltip.prototype._fixTransition = function () { + var tip = this.getTipElement(); + var initConfigAnimation = this.config.animation; + if (tip.getAttribute('x-placement') !== null) { + return; + } + jquery_8["default"](tip).removeClass(ClassName.FADE); + this.config.animation = false; + this.hide(); + this.show(); + this.config.animation = initConfigAnimation; + }; + // Static + Tooltip._jQueryInterface = function (config) { + return this.each(function () { + var data = jquery_8["default"](this).data(DATA_KEY); + var _config = typeof config === 'object' && config; + if (!data && /dispose|hide/.test(config)) { + return; + } + if (!data) { + data = new Tooltip(this, _config); + jquery_8["default"](this).data(DATA_KEY, data); + } + if (typeof config === 'string') { + if (typeof data[config] === 'undefined') { + throw new TypeError("No method named \"" + config + "\""); + } + data[config](); + } + }); + }; + return Tooltip; + }()); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + jquery_8["default"].fn[NAME] = Tooltip._jQueryInterface; + jquery_8["default"].fn[NAME].Constructor = Tooltip; + jquery_8["default"].fn[NAME].noConflict = function () { + jquery_8["default"].fn[NAME] = JQUERY_NO_CONFLICT; + return Tooltip._jQueryInterface; + }; + exports.__esModule = true; + exports["default"] = Tooltip; +}); +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.3.1): popover.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ +define("popover", ["require", "exports", "jquery", "tooltip"], function (require, exports, jquery_9, tooltip_1) { + "use strict"; + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + var NAME = 'popover'; + var VERSION = '4.3.1'; + var DATA_KEY = 'bs.popover'; + var EVENT_KEY = "." + DATA_KEY; + var JQUERY_NO_CONFLICT = jquery_9["default"].fn[NAME]; + var CLASS_PREFIX = 'bs-popover'; + var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); + var Default = __assign({}, tooltip_1["default"].Default, { placement: 'right', trigger: 'click', content: '', template: '' }); + var DefaultType = __assign({}, tooltip_1["default"].DefaultType, { content: '(string|element|function)' }); + var ClassName = { + FADE: 'fade', + SHOW: 'show' + }; + var Selector = { + TITLE: '.popover-header', + CONTENT: '.popover-body' + }; + var Event = { + HIDE: "hide" + EVENT_KEY, + HIDDEN: "hidden" + EVENT_KEY, + SHOW: "show" + EVENT_KEY, + SHOWN: "shown" + EVENT_KEY, + INSERTED: "inserted" + EVENT_KEY, + CLICK: "click" + EVENT_KEY, + FOCUSIN: "focusin" + EVENT_KEY, + FOCUSOUT: "focusout" + EVENT_KEY, + MOUSEENTER: "mouseenter" + EVENT_KEY, + MOUSELEAVE: "mouseleave" + EVENT_KEY }; - - _createClass(Dropdown, null, [{ - key: "VERSION", - get: function get() { - return VERSION$4; - } - }, { - key: "Default", - get: function get() { - return Default$2; - } - }, { - key: "DefaultType", - get: function get() { - return DefaultType$2; - } - }]); - - return Dropdown; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + " " + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) { - event.preventDefault(); - event.stopPropagation(); - - Dropdown._jQueryInterface.call($(this), 'toggle'); - }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) { - e.stopPropagation(); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$4] = Dropdown._jQueryInterface; - $.fn[NAME$4].Constructor = Dropdown; - - $.fn[NAME$4].noConflict = function () { - $.fn[NAME$4] = JQUERY_NO_CONFLICT$4; - return Dropdown._jQueryInterface; - }; - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$5 = 'modal'; - var VERSION$5 = '4.3.1'; - var DATA_KEY$5 = 'bs.modal'; - var EVENT_KEY$5 = "." + DATA_KEY$5; - var DATA_API_KEY$5 = '.data-api'; - var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5]; - var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key - - var Default$3 = { - backdrop: true, - keyboard: true, - focus: true, - show: true - }; - var DefaultType$3 = { - backdrop: '(boolean|string)', - keyboard: 'boolean', - focus: 'boolean', - show: 'boolean' - }; - var Event$5 = { - HIDE: "hide" + EVENT_KEY$5, - HIDDEN: "hidden" + EVENT_KEY$5, - SHOW: "show" + EVENT_KEY$5, - SHOWN: "shown" + EVENT_KEY$5, - FOCUSIN: "focusin" + EVENT_KEY$5, - RESIZE: "resize" + EVENT_KEY$5, - CLICK_DISMISS: "click.dismiss" + EVENT_KEY$5, - KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY$5, - MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY$5, - MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY$5, - CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5 - }; - var ClassName$5 = { - SCROLLABLE: 'modal-dialog-scrollable', - SCROLLBAR_MEASURER: 'modal-scrollbar-measure', - BACKDROP: 'modal-backdrop', - OPEN: 'modal-open', - FADE: 'fade', - SHOW: 'show' - }; - var Selector$5 = { - DIALOG: '.modal-dialog', - MODAL_BODY: '.modal-body', - DATA_TOGGLE: '[data-toggle="modal"]', - DATA_DISMISS: '[data-dismiss="modal"]', - FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', - STICKY_CONTENT: '.sticky-top' /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ - - }; - - var Modal = - /*#__PURE__*/ - function () { - function Modal(element, config) { - this._config = this._getConfig(config); - this._element = element; - this._dialog = element.querySelector(Selector$5.DIALOG); - this._backdrop = null; - this._isShown = false; - this._isBodyOverflowing = false; - this._ignoreBackdropClick = false; - this._isTransitioning = false; - this._scrollbarWidth = 0; - } // Getters - - - var _proto = Modal.prototype; - - // Public - _proto.toggle = function toggle(relatedTarget) { - return this._isShown ? this.hide() : this.show(relatedTarget); - }; - - _proto.show = function show(relatedTarget) { - var _this = this; - - if (this._isShown || this._isTransitioning) { - return; - } - - if ($(this._element).hasClass(ClassName$5.FADE)) { - this._isTransitioning = true; - } - - var showEvent = $.Event(Event$5.SHOW, { - relatedTarget: relatedTarget - }); - $(this._element).trigger(showEvent); - - if (this._isShown || showEvent.isDefaultPrevented()) { - return; - } - - this._isShown = true; - - this._checkScrollbar(); - - this._setScrollbar(); - - this._adjustDialog(); - - this._setEscapeEvent(); - - this._setResizeEvent(); - - $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) { - return _this.hide(event); - }); - $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () { - $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) { - if ($(event.target).is(_this._element)) { - _this._ignoreBackdropClick = true; - } + var Popover = (function (_super) { + __extends(Popover, _super); + function Popover() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(Popover, "VERSION", { + // Getters + get: function () { + return VERSION; + }, + enumerable: true, + configurable: true }); - }); - - this._showBackdrop(function () { - return _this._showElement(relatedTarget); - }); - }; - - _proto.hide = function hide(event) { - var _this2 = this; - - if (event) { - event.preventDefault(); - } - - if (!this._isShown || this._isTransitioning) { - return; - } - - var hideEvent = $.Event(Event$5.HIDE); - $(this._element).trigger(hideEvent); - - if (!this._isShown || hideEvent.isDefaultPrevented()) { - return; - } - - this._isShown = false; - var transition = $(this._element).hasClass(ClassName$5.FADE); - - if (transition) { - this._isTransitioning = true; - } - - this._setEscapeEvent(); - - this._setResizeEvent(); - - $(document).off(Event$5.FOCUSIN); - $(this._element).removeClass(ClassName$5.SHOW); - $(this._element).off(Event$5.CLICK_DISMISS); - $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS); - - if (transition) { - var transitionDuration = Util.getTransitionDurationFromElement(this._element); - $(this._element).one(Util.TRANSITION_END, function (event) { - return _this2._hideModal(event); - }).emulateTransitionEnd(transitionDuration); - } else { - this._hideModal(); - } - }; - - _proto.dispose = function dispose() { - [window, this._element, this._dialog].forEach(function (htmlElement) { - return $(htmlElement).off(EVENT_KEY$5); - }); - /** - * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API` - * Do not move `document` in `htmlElements` array - * It will remove `Event.CLICK_DATA_API` event that should remain - */ - - $(document).off(Event$5.FOCUSIN); - $.removeData(this._element, DATA_KEY$5); - this._config = null; - this._element = null; - this._dialog = null; - this._backdrop = null; - this._isShown = null; - this._isBodyOverflowing = null; - this._ignoreBackdropClick = null; - this._isTransitioning = null; - this._scrollbarWidth = null; - }; - - _proto.handleUpdate = function handleUpdate() { - this._adjustDialog(); - } // Private - ; - - _proto._getConfig = function _getConfig(config) { - config = _objectSpread({}, Default$3, config); - Util.typeCheckConfig(NAME$5, config, DefaultType$3); - return config; - }; - - _proto._showElement = function _showElement(relatedTarget) { - var _this3 = this; - - var transition = $(this._element).hasClass(ClassName$5.FADE); - - if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { - // Don't move modal's DOM position - document.body.appendChild(this._element); - } - - this._element.style.display = 'block'; - - this._element.removeAttribute('aria-hidden'); - - this._element.setAttribute('aria-modal', true); - - if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) { - this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0; - } else { - this._element.scrollTop = 0; - } - - if (transition) { - Util.reflow(this._element); - } - - $(this._element).addClass(ClassName$5.SHOW); - - if (this._config.focus) { - this._enforceFocus(); - } - - var shownEvent = $.Event(Event$5.SHOWN, { - relatedTarget: relatedTarget - }); - - var transitionComplete = function transitionComplete() { - if (_this3._config.focus) { - _this3._element.focus(); - } - - _this3._isTransitioning = false; - $(_this3._element).trigger(shownEvent); - }; - - if (transition) { - var transitionDuration = Util.getTransitionDurationFromElement(this._dialog); - $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); - } else { - transitionComplete(); - } - }; - - _proto._enforceFocus = function _enforceFocus() { - var _this4 = this; - - $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop - .on(Event$5.FOCUSIN, function (event) { - if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) { - _this4._element.focus(); - } - }); - }; - - _proto._setEscapeEvent = function _setEscapeEvent() { - var _this5 = this; - - if (this._isShown && this._config.keyboard) { - $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) { - if (event.which === ESCAPE_KEYCODE$1) { - event.preventDefault(); - - _this5.hide(); - } + Object.defineProperty(Popover, "Default", { + get: function () { + return Default; + }, + enumerable: true, + configurable: true }); - } else if (!this._isShown) { - $(this._element).off(Event$5.KEYDOWN_DISMISS); - } - }; - - _proto._setResizeEvent = function _setResizeEvent() { - var _this6 = this; - - if (this._isShown) { - $(window).on(Event$5.RESIZE, function (event) { - return _this6.handleUpdate(event); + Object.defineProperty(Popover, "NAME", { + get: function () { + return NAME; + }, + enumerable: true, + configurable: true }); - } else { - $(window).off(Event$5.RESIZE); - } - }; - - _proto._hideModal = function _hideModal() { - var _this7 = this; - - this._element.style.display = 'none'; - - this._element.setAttribute('aria-hidden', true); - - this._element.removeAttribute('aria-modal'); - - this._isTransitioning = false; - - this._showBackdrop(function () { - $(document.body).removeClass(ClassName$5.OPEN); - - _this7._resetAdjustments(); - - _this7._resetScrollbar(); - - $(_this7._element).trigger(Event$5.HIDDEN); - }); - }; - - _proto._removeBackdrop = function _removeBackdrop() { - if (this._backdrop) { - $(this._backdrop).remove(); - this._backdrop = null; - } - }; - - _proto._showBackdrop = function _showBackdrop(callback) { - var _this8 = this; - - var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : ''; - - if (this._isShown && this._config.backdrop) { - this._backdrop = document.createElement('div'); - this._backdrop.className = ClassName$5.BACKDROP; - - if (animate) { - this._backdrop.classList.add(animate); - } - - $(this._backdrop).appendTo(document.body); - $(this._element).on(Event$5.CLICK_DISMISS, function (event) { - if (_this8._ignoreBackdropClick) { - _this8._ignoreBackdropClick = false; - return; - } - - if (event.target !== event.currentTarget) { - return; - } - - if (_this8._config.backdrop === 'static') { - _this8._element.focus(); - } else { - _this8.hide(); - } + Object.defineProperty(Popover, "DATA_KEY", { + get: function () { + return DATA_KEY; + }, + enumerable: true, + configurable: true }); - - if (animate) { - Util.reflow(this._backdrop); - } - - $(this._backdrop).addClass(ClassName$5.SHOW); - - if (!callback) { - return; - } - - if (!animate) { - callback(); - return; - } - - var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); - $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); - } else if (!this._isShown && this._backdrop) { - $(this._backdrop).removeClass(ClassName$5.SHOW); - - var callbackRemove = function callbackRemove() { - _this8._removeBackdrop(); - - if (callback) { - callback(); - } + Object.defineProperty(Popover, "Event", { + get: function () { + return Event; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Popover, "EVENT_KEY", { + get: function () { + return EVENT_KEY; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Popover, "DefaultType", { + get: function () { + return DefaultType; + }, + enumerable: true, + configurable: true + }); + // Overrides + Popover.prototype.isWithContent = function () { + return this.getTitle() || this._getContent(); }; - - if ($(this._element).hasClass(ClassName$5.FADE)) { - var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); - - $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); - } else { - callbackRemove(); - } - } else if (callback) { - callback(); - } - } // ---------------------------------------------------------------------- - // the following methods are used to handle overflowing modals - // todo (fat): these should probably be refactored out of modal.js - // ---------------------------------------------------------------------- - ; - - _proto._adjustDialog = function _adjustDialog() { - var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; - - if (!this._isBodyOverflowing && isModalOverflowing) { - this._element.style.paddingLeft = this._scrollbarWidth + "px"; - } - - if (this._isBodyOverflowing && !isModalOverflowing) { - this._element.style.paddingRight = this._scrollbarWidth + "px"; - } - }; - - _proto._resetAdjustments = function _resetAdjustments() { - this._element.style.paddingLeft = ''; - this._element.style.paddingRight = ''; - }; - - _proto._checkScrollbar = function _checkScrollbar() { - var rect = document.body.getBoundingClientRect(); - this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; - this._scrollbarWidth = this._getScrollbarWidth(); - }; - - _proto._setScrollbar = function _setScrollbar() { - var _this9 = this; - - if (this._isBodyOverflowing) { - // Note: DOMNode.style.paddingRight returns the actual value or '' if not set - // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set - var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); - var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding - - $(fixedContent).each(function (index, element) { - var actualPadding = element.style.paddingRight; - var calculatedPadding = $(element).css('padding-right'); - $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px"); - }); // Adjust sticky content margin - - $(stickyContent).each(function (index, element) { - var actualMargin = element.style.marginRight; - var calculatedMargin = $(element).css('margin-right'); - $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px"); - }); // Adjust body padding - - var actualPadding = document.body.style.paddingRight; - var calculatedPadding = $(document.body).css('padding-right'); - $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); - } - - $(document.body).addClass(ClassName$5.OPEN); - }; - - _proto._resetScrollbar = function _resetScrollbar() { - // Restore fixed content padding - var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); - $(fixedContent).each(function (index, element) { - var padding = $(element).data('padding-right'); - $(element).removeData('padding-right'); - element.style.paddingRight = padding ? padding : ''; - }); // Restore sticky content - - var elements = [].slice.call(document.querySelectorAll("" + Selector$5.STICKY_CONTENT)); - $(elements).each(function (index, element) { - var margin = $(element).data('margin-right'); - - if (typeof margin !== 'undefined') { - $(element).css('margin-right', margin).removeData('margin-right'); - } - }); // Restore body padding - - var padding = $(document.body).data('padding-right'); - $(document.body).removeData('padding-right'); - document.body.style.paddingRight = padding ? padding : ''; - }; - - _proto._getScrollbarWidth = function _getScrollbarWidth() { - // thx d.walsh - var scrollDiv = document.createElement('div'); - scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER; - document.body.appendChild(scrollDiv); - var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; - document.body.removeChild(scrollDiv); - return scrollbarWidth; - } // Static - ; - - Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { - return this.each(function () { - var data = $(this).data(DATA_KEY$5); - - var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {}); - - if (!data) { - data = new Modal(this, _config); - $(this).data(DATA_KEY$5, data); - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); - } - - data[config](relatedTarget); - } else if (_config.show) { - data.show(relatedTarget); - } - }); - }; - - _createClass(Modal, null, [{ - key: "VERSION", - get: function get() { - return VERSION$5; - } - }, { - key: "Default", - get: function get() { - return Default$3; - } - }]); - - return Modal; - }(); - /** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - - - $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) { - var _this10 = this; - - var target; - var selector = Util.getSelectorFromElement(this); - - if (selector) { - target = document.querySelector(selector); - } - - var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data()); - - if (this.tagName === 'A' || this.tagName === 'AREA') { - event.preventDefault(); - } - - var $target = $(target).one(Event$5.SHOW, function (showEvent) { - if (showEvent.isDefaultPrevented()) { - // Only register focus restorer if modal will actually get shown - return; - } - - $target.one(Event$5.HIDDEN, function () { - if ($(_this10).is(':visible')) { - _this10.focus(); - } - }); - }); - - Modal._jQueryInterface.call($(target), config, this); - }); - /** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - - $.fn[NAME$5] = Modal._jQueryInterface; - $.fn[NAME$5].Constructor = Modal; - - $.fn[NAME$5].noConflict = function () { - $.fn[NAME$5] = JQUERY_NO_CONFLICT$5; - return Modal._jQueryInterface; - }; - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v4.3.1): tools/sanitizer.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']; - var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; - var DefaultWhitelist = { - // Global attributes allowed on any supplied element below. - '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], - a: ['target', 'href', 'title', 'rel'], - area: [], - b: [], - br: [], - col: [], - code: [], - div: [], - em: [], - hr: [], - h1: [], - h2: [], - h3: [], - h4: [], - h5: [], - h6: [], - i: [], - img: ['src', 'alt', 'title', 'width', 'height'], - li: [], - ol: [], - p: [], - pre: [], - s: [], - small: [], - span: [], - sub: [], - sup: [], - strong: [], - u: [], - ul: [] + Popover.prototype.addAttachmentClass = function (attachment) { + jquery_9["default"](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); + }; + Popover.prototype.getTipElement = function () { + this.tip = this.tip || jquery_9["default"](this.config.template)[0]; + return this.tip; + }; + Popover.prototype.setContent = function () { + var $tip = jquery_9["default"](this.getTipElement()); + // We use append for html objects to maintain js events + this.setElementContent($tip.find(Selector.TITLE), this.getTitle()); + var content = this._getContent(); + if (typeof content === 'function') { + content = content.call(this.element); + } + this.setElementContent($tip.find(Selector.CONTENT), content); + $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW); + }; + // Private + Popover.prototype._getContent = function () { + return this.element.getAttribute('data-content') || + this.config.content; + }; + Popover.prototype._cleanTipClass = function () { + var $tip = jquery_9["default"](this.getTipElement()); + var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); + if (tabClass !== null && tabClass.length > 0) { + $tip.removeClass(tabClass.join('')); + } + }; + // Static + Popover._jQueryInterface = function (config) { + return this.each(function () { + var data = jquery_9["default"](this).data(DATA_KEY); + var _config = typeof config === 'object' ? config : null; + if (!data && /dispose|hide/.test(config)) { + return; + } + if (!data) { + data = new Popover(this, _config); + jquery_9["default"](this).data(DATA_KEY, data); + } + if (typeof config === 'string') { + if (typeof data[config] === 'undefined') { + throw new TypeError("No method named \"" + config + "\""); + } + data[config](); + } + }); + }; + return Popover; + }(tooltip_1["default"])); /** - * A pattern that recognizes a commonly useful subset of URLs that are safe. - * - * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + jquery_9["default"].fn[NAME] = Popover._jQueryInterface; + jquery_9["default"].fn[NAME].Constructor = Popover; + jquery_9["default"].fn[NAME].noConflict = function () { + jquery_9["default"].fn[NAME] = JQUERY_NO_CONFLICT; + return Popover._jQueryInterface; + }; + exports.__esModule = true; + exports["default"] = Popover; +}); +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.3.1): scrollspy.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ +define("scrollspy", ["require", "exports", "jquery", "util"], function (require, exports, jquery_10, util_7) { + "use strict"; + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ */ - - }; - var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi; - /** - * A pattern that matches safe data URLs. Only matches image, video and audio types. - * - * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts - */ - - var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i; - - function allowedAttribute(attr, allowedAttributeList) { - var attrName = attr.nodeName.toLowerCase(); - - if (allowedAttributeList.indexOf(attrName) !== -1) { - if (uriAttrs.indexOf(attrName) !== -1) { - return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN)); - } - - return true; - } - - var regExp = allowedAttributeList.filter(function (attrRegex) { - return attrRegex instanceof RegExp; - }); // Check if a regular expression validates the attribute. - - for (var i = 0, l = regExp.length; i < l; i++) { - if (attrName.match(regExp[i])) { - return true; - } - } - - return false; - } - - function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { - if (unsafeHtml.length === 0) { - return unsafeHtml; - } - - if (sanitizeFn && typeof sanitizeFn === 'function') { - return sanitizeFn(unsafeHtml); - } - - var domParser = new window.DOMParser(); - var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); - var whitelistKeys = Object.keys(whiteList); - var elements = [].slice.call(createdDocument.body.querySelectorAll('*')); - - var _loop = function _loop(i, len) { - var el = elements[i]; - var elName = el.nodeName.toLowerCase(); - - if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { - el.parentNode.removeChild(el); - return "continue"; - } - - var attributeList = [].slice.call(el.attributes); - var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []); - attributeList.forEach(function (attr) { - if (!allowedAttribute(attr, whitelistedAttributes)) { - el.removeAttribute(attr.nodeName); - } - }); + var NAME = 'scrollspy'; + var VERSION = '4.3.1'; + var DATA_KEY = 'bs.scrollspy'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = jquery_10["default"].fn[NAME]; + var Default = { + offset: 10, + method: 'auto', + target: '' + }; + var DefaultType = { + offset: 'number', + method: 'string', + target: '(string|element)' + }; + var Event = { + ACTIVATE: "activate" + EVENT_KEY, + SCROLL: "scroll" + EVENT_KEY, + LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY + }; + var ClassName = { + DROPDOWN_ITEM: 'dropdown-item', + DROPDOWN_MENU: 'dropdown-menu', + ACTIVE: 'active' + }; + var Selector = { + DATA_SPY: '[data-spy="scroll"]', + ACTIVE: '.active', + NAV_LIST_GROUP: '.nav, .list-group', + NAV_LINKS: '.nav-link', + NAV_ITEMS: '.nav-item', + LIST_ITEMS: '.list-group-item', + DROPDOWN: '.dropdown', + DROPDOWN_ITEMS: '.dropdown-item', + DROPDOWN_TOGGLE: '.dropdown-toggle' + }; + var OffsetMethod = { + OFFSET: 'offset', + POSITION: 'position' }; - - for (var i = 0, len = elements.length; i < len; i++) { - var _ret = _loop(i, len); - - if (_ret === "continue") continue; - } - - return createdDocument.body.innerHTML; - } - - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var NAME$6 = 'tooltip'; - var VERSION$6 = '4.3.1'; - var DATA_KEY$6 = 'bs.tooltip'; - var EVENT_KEY$6 = "." + DATA_KEY$6; - var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6]; - var CLASS_PREFIX = 'bs-tooltip'; - var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); - var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']; - var DefaultType$4 = { - animation: 'boolean', - template: 'string', - title: '(string|element|function)', - trigger: 'string', - delay: '(number|object)', - html: 'boolean', - selector: '(string|boolean)', - placement: '(string|function)', - offset: '(number|string|function)', - container: '(string|element|boolean)', - fallbackPlacement: '(string|array)', - boundary: '(string|element)', - sanitize: 'boolean', - sanitizeFn: '(null|function)', - whiteList: 'object' - }; - var AttachmentMap$1 = { - AUTO: 'auto', - TOP: 'top', - RIGHT: 'right', - BOTTOM: 'bottom', - LEFT: 'left' - }; - var Default$4 = { - animation: true, - template: '', - trigger: 'hover focus', - title: '', - delay: 0, - html: false, - selector: false, - placement: 'top', - offset: 0, - container: false, - fallbackPlacement: 'flip', - boundary: 'scrollParent', - sanitize: true, - sanitizeFn: null, - whiteList: DefaultWhitelist - }; - var HoverState = { - SHOW: 'show', - OUT: 'out' - }; - var Event$6 = { - HIDE: "hide" + EVENT_KEY$6, - HIDDEN: "hidden" + EVENT_KEY$6, - SHOW: "show" + EVENT_KEY$6, - SHOWN: "shown" + EVENT_KEY$6, - INSERTED: "inserted" + EVENT_KEY$6, - CLICK: "click" + EVENT_KEY$6, - FOCUSIN: "focusin" + EVENT_KEY$6, - FOCUSOUT: "focusout" + EVENT_KEY$6, - MOUSEENTER: "mouseenter" + EVENT_KEY$6, - MOUSELEAVE: "mouseleave" + EVENT_KEY$6 - }; - var ClassName$6 = { - FADE: 'fade', - SHOW: 'show' - }; - var Selector$6 = { - TOOLTIP: '.tooltip', - TOOLTIP_INNER: '.tooltip-inner', - ARROW: '.arrow' - }; - var Trigger = { - HOVER: 'hover', - FOCUS: 'focus', - CLICK: 'click', - MANUAL: 'manual' /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ - - }; - - var Tooltip = - /*#__PURE__*/ - function () { - function Tooltip(element, config) { - /** - * Check for Popper dependency - * Popper - https://popper.js.org - */ - if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)'); - } // private - - - this._isEnabled = true; - this._timeout = 0; - this._hoverState = ''; - this._activeTrigger = {}; - this._popper = null; // Protected - - this.element = element; - this.config = this._getConfig(config); - this.tip = null; - - this._setListeners(); - } // Getters - - - var _proto = Tooltip.prototype; - - // Public - _proto.enable = function enable() { - this._isEnabled = true; - }; - - _proto.disable = function disable() { - this._isEnabled = false; - }; - - _proto.toggleEnabled = function toggleEnabled() { - this._isEnabled = !this._isEnabled; - }; - - _proto.toggle = function toggle(event) { - if (!this._isEnabled) { - return; - } - - if (event) { - var dataKey = this.constructor.DATA_KEY; - var context = $(event.currentTarget).data(dataKey); - - if (!context) { - context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $(event.currentTarget).data(dataKey, context); - } - - context._activeTrigger.click = !context._activeTrigger.click; - - if (context._isWithActiveTrigger()) { - context._enter(null, context); - } else { - context._leave(null, context); - } - } else { - if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) { - this._leave(null, this); - - return; - } - - this._enter(null, this); - } - }; - - _proto.dispose = function dispose() { - clearTimeout(this._timeout); - $.removeData(this.element, this.constructor.DATA_KEY); - $(this.element).off(this.constructor.EVENT_KEY); - $(this.element).closest('.modal').off('hide.bs.modal'); - - if (this.tip) { - $(this.tip).remove(); - } - - this._isEnabled = null; - this._timeout = null; - this._hoverState = null; - this._activeTrigger = null; - - if (this._popper !== null) { - this._popper.destroy(); - } - - this._popper = null; - this.element = null; - this.config = null; - this.tip = null; - }; - - _proto.show = function show() { - var _this = this; - - if ($(this.element).css('display') === 'none') { - throw new Error('Please use show on visible elements'); - } - - var showEvent = $.Event(this.constructor.Event.SHOW); - - if (this.isWithContent() && this._isEnabled) { - $(this.element).trigger(showEvent); - var shadowRoot = Util.findShadowRoot(this.element); - var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); - - if (showEvent.isDefaultPrevented() || !isInTheDom) { - return; - } - - var tip = this.getTipElement(); - var tipId = Util.getUID(this.constructor.NAME); - tip.setAttribute('id', tipId); - this.element.setAttribute('aria-describedby', tipId); - this.setContent(); - - if (this.config.animation) { - $(tip).addClass(ClassName$6.FADE); - } - - var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; - - var attachment = this._getAttachment(placement); - - this.addAttachmentClass(attachment); - - var container = this._getContainer(); - - $(tip).data(this.constructor.DATA_KEY, this); - - if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) { - $(tip).appendTo(container); - } - - $(this.element).trigger(this.constructor.Event.INSERTED); - this._popper = new Popper(this.element, tip, { - placement: attachment, - modifiers: { - offset: this._getOffset(), - flip: { - behavior: this.config.fallbackPlacement + var ScrollSpy = (function () { + function ScrollSpy(element, config) { + var _this = this; + this._element = element; + this._scrollElement = element.tagName === 'BODY' ? window : element; + this._config = this._getConfig(config); + this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + + (this._config.target + " " + Selector.LIST_ITEMS + ",") + + (this._config.target + " " + Selector.DROPDOWN_ITEMS); + this._offsets = []; + this._targets = []; + this._activeTarget = null; + this._scrollHeight = 0; + jquery_10["default"](this._scrollElement).on(Event.SCROLL, function (event) { return _this._process(event); }); + this.refresh(); + this._process(); + } + Object.defineProperty(ScrollSpy, "VERSION", { + // Getters + get: function () { + return VERSION; }, - arrow: { - element: Selector$6.ARROW + enumerable: true, + configurable: true + }); + Object.defineProperty(ScrollSpy, "Default", { + get: function () { + return Default; }, - preventOverflow: { - boundariesElement: this.config.boundary - } - }, - onCreate: function onCreate(data) { - if (data.originalPlacement !== data.placement) { - _this._handlePopperPlacementChange(data); - } - }, - onUpdate: function onUpdate(data) { - return _this._handlePopperPlacementChange(data); - } + enumerable: true, + configurable: true }); - $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra - // empty mouseover listeners to the body's immediate children; - // only needed because of broken event delegation on iOS - // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - - if ('ontouchstart' in document.documentElement) { - $(document.body).children().on('mouseover', null, $.noop); - } - - var complete = function complete() { - if (_this.config.animation) { - _this._fixTransition(); - } - - var prevHoverState = _this._hoverState; - _this._hoverState = null; - $(_this.element).trigger(_this.constructor.Event.SHOWN); - - if (prevHoverState === HoverState.OUT) { - _this._leave(null, _this); - } + // Public + ScrollSpy.prototype.refresh = function () { + var _this = this; + var autoMethod = this._scrollElement === this._scrollElement.window + ? OffsetMethod.OFFSET : OffsetMethod.POSITION; + var offsetMethod = this._config.method === 'auto' + ? autoMethod : this._config.method; + var offsetBase = offsetMethod === OffsetMethod.POSITION + ? this._getScrollTop() : 0; + this._offsets = []; + this._targets = []; + this._scrollHeight = this._getScrollHeight(); + var targets = [].slice.call(document.querySelectorAll(this._selector)); + targets + .map(function (element) { + var target; + var targetSelector = util_7["default"].getSelectorFromElement(element); + if (targetSelector) { + target = document.querySelector(targetSelector); + } + if (target) { + var targetBCR = target.getBoundingClientRect(); + if (targetBCR.width || targetBCR.height) { + // TODO (fat): remove sketch reliance on jQuery position/offset + return [ + jquery_10["default"](target)[offsetMethod]().top + offsetBase, + targetSelector + ]; + } + } + return null; + }) + .filter(function (item) { return item; }) + .sort(function (a, b) { return a[0] - b[0]; }) + .forEach(function (item) { + _this._offsets.push(item[0]); + _this._targets.push(item[1]); + }); }; - - if ($(this.tip).hasClass(ClassName$6.FADE)) { - var transitionDuration = Util.getTransitionDurationFromElement(this.tip); - $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - } else { - complete(); - } - } - }; - - _proto.hide = function hide(callback) { - var _this2 = this; - - var tip = this.getTipElement(); - var hideEvent = $.Event(this.constructor.Event.HIDE); - - var complete = function complete() { - if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) { - tip.parentNode.removeChild(tip); - } - - _this2._cleanTipClass(); - - _this2.element.removeAttribute('aria-describedby'); - - $(_this2.element).trigger(_this2.constructor.Event.HIDDEN); - - if (_this2._popper !== null) { - _this2._popper.destroy(); - } - - if (callback) { - callback(); - } - }; - - $(this.element).trigger(hideEvent); - - if (hideEvent.isDefaultPrevented()) { - return; - } - - $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra - // empty mouseover listeners we added for iOS support - - if ('ontouchstart' in document.documentElement) { - $(document.body).children().off('mouseover', null, $.noop); - } - - this._activeTrigger[Trigger.CLICK] = false; - this._activeTrigger[Trigger.FOCUS] = false; - this._activeTrigger[Trigger.HOVER] = false; - - if ($(this.tip).hasClass(ClassName$6.FADE)) { - var transitionDuration = Util.getTransitionDurationFromElement(tip); - $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); - } else { - complete(); - } - - this._hoverState = ''; - }; - - _proto.update = function update() { - if (this._popper !== null) { - this._popper.scheduleUpdate(); - } - } // Protected - ; - - _proto.isWithContent = function isWithContent() { - return Boolean(this.getTitle()); - }; - - _proto.addAttachmentClass = function addAttachmentClass(attachment) { - $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); - }; - - _proto.getTipElement = function getTipElement() { - this.tip = this.tip || $(this.config.template)[0]; - return this.tip; - }; - - _proto.setContent = function setContent() { - var tip = this.getTipElement(); - this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle()); - $(tip).removeClass(ClassName$6.FADE + " " + ClassName$6.SHOW); - }; - - _proto.setElementContent = function setElementContent($element, content) { - if (typeof content === 'object' && (content.nodeType || content.jquery)) { - // Content is a DOM node or a jQuery - if (this.config.html) { - if (!$(content).parent().is($element)) { - $element.empty().append(content); - } - } else { - $element.text($(content).text()); - } - - return; - } - - if (this.config.html) { - if (this.config.sanitize) { - content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn); + ScrollSpy.prototype.dispose = function () { + jquery_10["default"].removeData(this._element, DATA_KEY); + jquery_10["default"](this._scrollElement).off(EVENT_KEY); + this._element = null; + this._scrollElement = null; + this._config = null; + this._selector = null; + this._offsets = null; + this._targets = null; + this._activeTarget = null; + this._scrollHeight = null; + }; + // Private + ScrollSpy.prototype._getConfig = function (config) { + config = __assign({}, Default, typeof config === 'object' && config ? config : {}); + if (typeof config.target !== 'string') { + var id = jquery_10["default"](config.target).attr('id'); + if (!id) { + id = util_7["default"].getUID(NAME); + jquery_10["default"](config.target).attr('id', id); + } + config.target = "#" + id; + } + util_7["default"].typeCheckConfig(NAME, config, DefaultType); + return config; + }; + ScrollSpy.prototype._getScrollTop = function () { + return this._scrollElement === window + ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; + }; + ScrollSpy.prototype._getScrollHeight = function () { + return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); + }; + ScrollSpy.prototype._getOffsetHeight = function () { + return this._scrollElement === window + ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; + }; + ScrollSpy.prototype._process = function () { + var scrollTop = this._getScrollTop() + this._config.offset; + var scrollHeight = this._getScrollHeight(); + var maxScroll = this._config.offset + + scrollHeight - + this._getOffsetHeight(); + if (this._scrollHeight !== scrollHeight) { + this.refresh(); + } + if (scrollTop >= maxScroll) { + var target = this._targets[this._targets.length - 1]; + if (this._activeTarget !== target) { + this._activate(target); + } + return; + } + if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { + this._activeTarget = null; + this._clear(); + return; + } + var offsetLength = this._offsets.length; + for (var i = offsetLength; i--;) { + var isActiveTarget = this._activeTarget !== this._targets[i] && + scrollTop >= this._offsets[i] && + (typeof this._offsets[i + 1] === 'undefined' || + scrollTop < this._offsets[i + 1]); + if (isActiveTarget) { + this._activate(this._targets[i]); + } + } + }; + ScrollSpy.prototype._activate = function (target) { + this._activeTarget = target; + this._clear(); + var queries = this._selector + .split(',') + .map(function (selector) { return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]"; }); + var $link = jquery_10["default"]([].slice.call(document.querySelectorAll(queries.join(',')))); + if ($link.hasClass(ClassName.DROPDOWN_ITEM)) { + $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); + $link.addClass(ClassName.ACTIVE); + } + else { + // Set triggered link as active + $link.addClass(ClassName.ACTIVE); + // Set triggered links parents as active + // With both
      and
  • ',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:vn},Ln="show",xn="out",Pn={HIDE:"hide"+Tn,HIDDEN:"hidden"+Tn,SHOW:"show"+Tn,SHOWN:"shown"+Tn,INSERTED:"inserted"+Tn,CLICK:"click"+Tn,FOCUSIN:"focusin"+Tn,FOCUSOUT:"focusout"+Tn,MOUSEENTER:"mouseenter"+Tn,MOUSELEAVE:"mouseleave"+Tn},Hn="fade",jn="show",Rn=".tooltip-inner",Fn=".arrow",Mn="hover",Wn="focus",Un="click",Bn="manual",qn=function(){function i(t,e){if("undefined"==typeof be)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=p(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(p(this.getTipElement()).hasClass(jn))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),p.removeData(this.element,this.constructor.DATA_KEY),p(this.element).off(this.constructor.EVENT_KEY),p(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&p(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===p(this.element).css("display"))throw new Error("Please use show on visible elements");var t=p.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){p(this.element).trigger(t);var n=m.findShadowRoot(this.element),i=p.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=m.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&p(o).addClass(Hn);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();p(o).data(this.constructor.DATA_KEY,this),p.contains(this.element.ownerDocument.documentElement,this.tip)||p(o).appendTo(l),p(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new be(this.element,o,{placement:a,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:Fn},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),p(o).addClass(jn),"ontouchstart"in document.documentElement&&p(document.body).children().on("mouseover",null,p.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,p(e.element).trigger(e.constructor.Event.SHOWN),t===xn&&e._leave(null,e)};if(p(this.tip).hasClass(Hn)){var h=m.getTransitionDurationFromElement(this.tip);p(this.tip).one(m.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=p.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==Ln&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),p(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(p(this.element).trigger(i),!i.isDefaultPrevented()){if(p(n).removeClass(jn),"ontouchstart"in document.documentElement&&p(document.body).children().off("mouseover",null,p.noop),this._activeTrigger[Un]=!1,this._activeTrigger[Wn]=!1,this._activeTrigger[Mn]=!1,p(this.tip).hasClass(Hn)){var r=m.getTransitionDurationFromElement(n);p(n).one(m.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){p(this.getTipElement()).addClass(Dn+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(p(t.querySelectorAll(Rn)),this.getTitle()),p(t).removeClass(Hn+" "+jn)},t.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=bn(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?p(e).parent().is(t)||t.empty().append(e):t.text(p(e).text())},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},t._getContainer=function(){return!1===this.config.container?document.body:m.isElement(this.config.container)?p(this.config.container):p(document).find(this.config.container)},t._getAttachment=function(t){return Nn[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)p(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Bn){var e=t===Mn?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===Mn?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;p(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),p(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||p(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Wn:Mn]=!0),p(e.getTipElement()).hasClass(jn)||e._hoverState===Ln?e._hoverState=Ln:(clearTimeout(e._timeout),e._hoverState=Ln,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===Ln&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||p(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),p(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Wn:Mn]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=xn,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===xn&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){var e=p(this.element).data();return Object.keys(e).forEach(function(t){-1!==An.indexOf(t)&&delete e[t]}),"number"==typeof(t=l({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),m.typeCheckConfig(wn,t,this.constructor.DefaultType),t.sanitize&&(t.template=bn(t.template,t.whiteList,t.sanitizeFn)),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=p(this.getTipElement()),e=t.attr("class").match(In);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(p(t).removeClass(Hn),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=p(this).data(Cn),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),p(this).data(Cn,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.3.1"}},{key:"Default",get:function(){return kn}},{key:"NAME",get:function(){return wn}},{key:"DATA_KEY",get:function(){return Cn}},{key:"Event",get:function(){return Pn}},{key:"EVENT_KEY",get:function(){return Tn}},{key:"DefaultType",get:function(){return On}}]),i}();p.fn[wn]=qn._jQueryInterface,p.fn[wn].Constructor=qn,p.fn[wn].noConflict=function(){return p.fn[wn]=Sn,qn._jQueryInterface};var Kn="popover",Qn="bs.popover",Vn="."+Qn,Yn=p.fn[Kn],zn="bs-popover",Xn=new RegExp("(^|\\s)"+zn+"\\S+","g"),Gn=l({},qn.Default,{placement:"right",trigger:"click",content:"",template:''}),$n=l({},qn.DefaultType,{content:"(string|element|function)"}),Jn="fade",Zn="show",ti=".popover-header",ei=".popover-body",ni={HIDE:"hide"+Vn,HIDDEN:"hidden"+Vn,SHOW:"show"+Vn,SHOWN:"shown"+Vn,INSERTED:"inserted"+Vn,CLICK:"click"+Vn,FOCUSIN:"focusin"+Vn,FOCUSOUT:"focusout"+Vn,MOUSEENTER:"mouseenter"+Vn,MOUSELEAVE:"mouseleave"+Vn},ii=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){p(this.getTipElement()).addClass(zn+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||p(this.config.template)[0],this.tip},o.setContent=function(){var t=p(this.getTipElement());this.setElementContent(t.find(ti),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(ei),e),t.removeClass(Jn+" "+Zn)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=p(this.getTipElement()),e=t.attr("class").match(Xn);null!==e&&0=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}return Object.defineProperty(e,"VERSION",{get:function(){return r},enumerable:!0,configurable:!0}),Object.defineProperty(e,"Default",{get:function(){return _},enumerable:!0,configurable:!0}),e.prototype.next=function(){this._isSliding||this._slide(g.NEXT)},e.prototype.nextWhenVisible=function(){!document.hidden&&n.default(this._element).is(":visible")&&"hidden"!==n.default(this._element).css("visibility")&&this.next()},e.prototype.prev=function(){this._isSliding||this._slide(g.PREV)},e.prototype.pause=function(e){e||(this._isPaused=!0),this._element.querySelector(v.NEXT_PREV)&&(i.default.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},e.prototype.cycle=function(e){e||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},e.prototype.to=function(e){var t=this;this._activeElement=this._element.querySelector(v.ACTIVE_ITEM);var i=this._getItemIndex(this._activeElement);if(!(e>this._items.length-1||e<0)){if(this._isSliding)return void n.default(this._element).one(m.SLID,function(){return t.to(e)});if(i===e)return this.pause(),void this.cycle();var o=e>i?g.NEXT:g.PREV;this._slide(o,this._items[e])}},e.prototype.dispose=function(){n.default(this._element).off(l),n.default.removeData(this._element,a),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e.prototype._getConfig=function(e){return e=__assign({},_,e),i.default.typeCheckConfig(o,e,p),e},e.prototype._handleSwipe=function(){var e=Math.abs(this.touchDeltaX);if(!(e<=h)){var t=e/this.touchDeltaX;t>0&&this.prev(),t<0&&this.next()}},e.prototype._addEventListeners=function(){var e=this;this._config.keyboard&&n.default(this._element).on(m.KEYDOWN,function(t){return e._keydown(t)}),"hover"===this._config.pause&&n.default(this._element).on(m.MOUSEENTER,function(t){return e.pause(t)}).on(m.MOUSELEAVE,function(t){return e.cycle(t)}),this._config.touch&&this._addTouchEventListeners()},e.prototype._addTouchEventListeners=function(){var e=this;if(this._touchSupported){var t=function(t){e._pointerEvent&&T[t.originalEvent.pointerType.toUpperCase()]?e.touchStartX=t.originalEvent.clientX:e._pointerEvent||(e.touchStartX=t.originalEvent.touches[0].clientX)},i=function(t){t.originalEvent.touches&&t.originalEvent.touches.length>1?e.touchDeltaX=0:e.touchDeltaX=t.originalEvent.touches[0].clientX-e.touchStartX},o=function(t){e._pointerEvent&&T[t.originalEvent.pointerType.toUpperCase()]&&(e.touchDeltaX=t.originalEvent.clientX-e.touchStartX),e._handleSwipe(),"hover"===e._config.pause&&(e.pause(),e.touchTimeout&&clearTimeout(e.touchTimeout),e.touchTimeout=setTimeout(function(t){return e.cycle(t)},c+e._config.interval))};n.default(this._element.querySelectorAll(v.ITEM_IMG)).on(m.DRAG_START,function(e){return e.preventDefault()}),this._pointerEvent?(n.default(this._element).on(m.POINTERDOWN,function(e){return t(e)}),n.default(this._element).on(m.POINTERUP,function(e){return o(e)}),this._element.classList.add(E.POINTER_EVENT)):(n.default(this._element).on(m.TOUCHSTART,function(e){return t(e)}),n.default(this._element).on(m.TOUCHMOVE,function(e){return i(e)}),n.default(this._element).on(m.TOUCHEND,function(e){return o(e)}))}},e.prototype._keydown=function(e){if(!/input|textarea/i.test(e.target.tagName))switch(e.which){case f:e.preventDefault(),this.prev();break;case d:e.preventDefault(),this.next()}},e.prototype._getItemIndex=function(e){return this._items=e&&e.parentNode?[].slice.call(e.parentNode.querySelectorAll(v.ITEM)):[],this._items.indexOf(e)},e.prototype._getItemByDirection=function(e,t){var n=e===g.NEXT,i=e===g.PREV,o=this._getItemIndex(t),r=this._items.length-1,a=i&&0===o||n&&o===r;if(a&&!this._config.wrap)return t;var l=e===g.PREV?-1:1,s=(o+l)%this._items.length;return s===-1?this._items[this._items.length-1]:this._items[s]},e.prototype._triggerSlideEvent=function(e,t){var i=this._getItemIndex(e),o=this._getItemIndex(this._element.querySelector(v.ACTIVE_ITEM)),r=n.default.Event(m.SLIDE,{relatedTarget:e,direction:t,from:o,to:i});return n.default(this._element).trigger(r),r},e.prototype._setActiveIndicatorElement=function(e){if(this._indicatorsElement){var t=[].slice.call(this._indicatorsElement.querySelectorAll(v.ACTIVE));n.default(t).removeClass(E.ACTIVE);var i=this._indicatorsElement.children[this._getItemIndex(e)];i&&n.default(i).addClass(E.ACTIVE)}},e.prototype._slide=function(e,t){var o,r,a,l=this,s=this._element.querySelector(v.ACTIVE_ITEM),u=this._getItemIndex(s),f=t||s&&this._getItemByDirection(e,s),d=this._getItemIndex(f),c=Boolean(this._interval);if(e===g.NEXT?(o=E.LEFT,r=E.NEXT,a=g.LEFT):(o=E.RIGHT,r=E.PREV,a=g.RIGHT),f&&n.default(f).hasClass(E.ACTIVE))return void(this._isSliding=!1);var h=this._triggerSlideEvent(f,a);if(!h.isDefaultPrevented()&&s&&f){this._isSliding=!0,c&&this.pause(),this._setActiveIndicatorElement(f);var _=n.default.Event(m.SLID,{relatedTarget:f,direction:a,from:u,to:d});if(n.default(this._element).hasClass(E.SLIDE)){n.default(f).addClass(r),i.default.reflow(f),n.default(s).addClass(o),n.default(f).addClass(o);var p=parseInt(f.getAttribute("data-interval"),10);p?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=p):this._config.interval=this._config.defaultInterval||this._config.interval;var T=i.default.getTransitionDurationFromElement(s);n.default(s).one(i.default.TRANSITION_END,function(){n.default(f).removeClass(o+" "+r).addClass(E.ACTIVE),n.default(s).removeClass(E.ACTIVE+" "+r+" "+o),l._isSliding=!1,setTimeout(function(){return n.default(l._element).trigger(_)},0)}).emulateTransitionEnd(T)}else n.default(s).removeClass(E.ACTIVE),n.default(f).addClass(E.ACTIVE),this._isSliding=!1,n.default(this._element).trigger(_);c&&this.cycle()}},e._jQueryInterface=function(t){return this.each(function(){var i=n.default(this).data(a),o=__assign({},_,n.default(this).data());"object"==typeof t&&(o=__assign({},o,t));var r="string"==typeof t?t:o.slide;if(i||(i=new e(this,o),n.default(this).data(a,i)),"number"==typeof t)i.to(t);else if("string"==typeof r){if("undefined"==typeof i[r])throw new TypeError('No method named "'+r+'"');i[r]()}else o.interval&&o.ride&&(i.pause(),i.cycle())})},e._dataApiClickHandler=function(t){var o=i.default.getSelectorFromElement(this);if(o){var r=n.default(o)[0];if(r&&n.default(r).hasClass(E.CAROUSEL)){var l=__assign({},n.default(r).data(),n.default(this).data()),s=this.getAttribute("data-slide-to");s&&(l.interval=!1),e._jQueryInterface.call(n.default(r),l),s&&n.default(r).data(a).to(s),t.preventDefault()}}},e}();n.default(document).on(m.CLICK_DATA_API,v.DATA_SLIDE,y._dataApiClickHandler),n.default(window).on(m.LOAD_DATA_API,function(){for(var e=[].slice.call(document.querySelectorAll(v.DATA_RIDE)),t=0,i=e.length;t0&&(this._selector=l,this._triggerArray.push(a))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}return Object.defineProperty(e,"VERSION",{get:function(){return r},enumerable:!0,configurable:!0}),Object.defineProperty(e,"Default",{get:function(){return f},enumerable:!0,configurable:!0}),e.prototype.toggle=function(){n.default(this._element).hasClass(h.SHOW)?this.hide():this.show()},e.prototype.show=function(){var t=this;if(!this._isTransitioning&&!n.default(this._element).hasClass(h.SHOW)){var o,r;if(this._parent&&(o=[].slice.call(this._parent.querySelectorAll(p.ACTIVES)).filter(function(e){return"string"==typeof t._config.parent?e.getAttribute("data-parent")===t._config.parent:e.classList.contains(h.COLLAPSE)}),0===o.length&&(o=null)),!(o&&(r=n.default(o).not(this._selector).data(a),r&&r._isTransitioning))){var l=n.default.Event(c.SHOW);if(n.default(this._element).trigger(l),!l.isDefaultPrevented()){o&&(e._jQueryInterface.call(n.default(o).not(this._selector),"hide"),r||n.default(o).data(a,null));var s=this._getDimension();n.default(this._element).removeClass(h.COLLAPSE).addClass(h.COLLAPSING),this._element.style[s]=0,this._triggerArray.length&&n.default(this._triggerArray).removeClass(h.COLLAPSED).attr("aria-expanded",!0),this.setTransitioning(!0);var u=function(){n.default(t._element).removeClass(h.COLLAPSING).addClass(h.COLLAPSE).addClass(h.SHOW),t._element.style[s]="",t.setTransitioning(!1),n.default(t._element).trigger(c.SHOWN)},f=s[0].toUpperCase()+s.slice(1),d="scroll"+f,_=i.default.getTransitionDurationFromElement(this._element);n.default(this._element).one(i.default.TRANSITION_END,u).emulateTransitionEnd(_),this._element.style[s]=this._element[d]+"px"}}}},e.prototype.hide=function(){var e=this;if(!this._isTransitioning&&n.default(this._element).hasClass(h.SHOW)){var t=n.default.Event(c.HIDE);if(n.default(this._element).trigger(t),!t.isDefaultPrevented()){var o=this._getDimension();this._element.style[o]=this._element.getBoundingClientRect()[o]+"px",i.default.reflow(this._element),n.default(this._element).addClass(h.COLLAPSING).removeClass(h.COLLAPSE).removeClass(h.SHOW);var r=this._triggerArray.length;if(r>0)for(var a=0;a0},e.prototype._getOffset=function(){var e=this,t={};return"function"==typeof this._config.offset?t.fn=function(t){return t.offsets=__assign({},t.offsets,e._config.offset(t.offsets,e._element)||{}),t}:t.offset=this._config.offset,t},e.prototype._getPopperConfig=function(){var e={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(e.modifiers.applyStyle={enabled:!1}),e},e._jQueryInterface=function(t){return this.each(function(){var i=n.default(this).data(l),o="object"==typeof t?t:null;if(i||(i=new e(this,o),n.default(this).data(l,i)),"string"==typeof t){if("undefined"==typeof i[t])throw new TypeError('No method named "'+t+'"');i[t]()}})},e._clearMenus=function(t){if(!t||t.which!==g&&("keyup"!==t.type||t.which===h))for(var i=[].slice.call(document.querySelectorAll(T.DATA_TOGGLE)),o=0,r=i.length;o0&&l--,t.which===p&&ldocument.documentElement.clientHeight;!this._isBodyOverflowing&&e&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!e&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e.prototype._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e.prototype._checkScrollbar=function(){var e=document.body.getBoundingClientRect();this._isBodyOverflowing=e.left+e.right
    ',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:n.DefaultWhitelist},m={SHOW:"show",OUT:"out"},E={HIDE:"hide"+u,HIDDEN:"hidden"+u,SHOW:"show"+u,SHOWN:"shown"+u,INSERTED:"inserted"+u,CLICK:"click"+u,FOCUSIN:"focusin"+u,FOCUSOUT:"focusout"+u,MOUSEENTER:"mouseenter"+u,MOUSELEAVE:"mouseleave"+u},v={FADE:"fade",SHOW:"show"},T={TOOLTIP:".tooltip",TOOLTIP_INNER:".tooltip-inner",ARROW:".arrow"},y={HOVER:"hover",FOCUS:"focus",CLICK:"click",MANUAL:"manual"},S=function(){function e(e,t){if("undefined"==typeof o.default)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=e,this.config=this._getConfig(t),this.tip=null,this._setListeners()}return Object.defineProperty(e,"VERSION",{get:function(){return l},enumerable:!0,configurable:!0}),Object.defineProperty(e,"Default",{get:function(){return g},enumerable:!0,configurable:!0}),Object.defineProperty(e,"NAME",{get:function(){return a},enumerable:!0,configurable:!0}),Object.defineProperty(e,"DATA_KEY",{get:function(){return s},enumerable:!0,configurable:!0}),Object.defineProperty(e,"Event",{get:function(){return E},enumerable:!0,configurable:!0}),Object.defineProperty(e,"EVENT_KEY",{get:function(){return u},enumerable:!0,configurable:!0}),Object.defineProperty(e,"DefaultType",{get:function(){return _},enumerable:!0,configurable:!0}),e.prototype.enable=function(){this._isEnabled=!0},e.prototype.disable=function(){this._isEnabled=!1},e.prototype.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.prototype.toggle=function(e){if(this._isEnabled)if(e){var t=this.constructor.DATA_KEY,n=i.default(e.currentTarget).data(t);n||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),i.default(e.currentTarget).data(t,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(i.default(this.getTipElement()).hasClass(v.SHOW))return void this._leave(null,this);this._enter(null,this)}},e.prototype.dispose=function(){clearTimeout(this._timeout),i.default.removeData(this.element,this.constructor.DATA_KEY),i.default(this.element).off(this.constructor.EVENT_KEY),i.default(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&i.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,null!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.prototype.show=function(){var e=this;if("none"===i.default(this.element).css("display"))throw new Error("Please use show on visible elements");var t=i.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){i.default(this.element).trigger(t);var n=r.default.findShadowRoot(this.element),a=i.default.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!a)return;var l=this.getTipElement(),s=r.default.getUID(this.constructor.NAME);l.setAttribute("id",s),this.element.setAttribute("aria-describedby",s),this.setContent(),this.config.animation&&i.default(l).addClass(v.FADE);var u="function"==typeof this.config.placement?this.config.placement.call(this,l,this.element):this.config.placement,f=this._getAttachment(u);this.addAttachmentClass(f);var d=this._getContainer();i.default(l).data(this.constructor.DATA_KEY,this),i.default.contains(this.element.ownerDocument.documentElement,this.tip)||i.default(l).appendTo(d),i.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new o.default(this.element,l,{placement:f,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:T.ARROW},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),i.default(l).addClass(v.SHOW),"ontouchstart"in document.documentElement&&i.default(document.body).children().on("mouseover",null,i.default.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,i.default(e.element).trigger(e.constructor.Event.SHOWN),t===m.OUT&&e._leave(null,e)};if(i.default(this.tip).hasClass(v.FADE)){var h=r.default.getTransitionDurationFromElement(this.tip);i.default(this.tip).one(r.default.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},e.prototype.hide=function(e){var t=this,n=this.getTipElement(),o=i.default.Event(this.constructor.Event.HIDE),a=function(){t._hoverState!==m.SHOW&&n.parentNode&&n.parentNode.removeChild(n),t._cleanTipClass(),t.element.removeAttribute("aria-describedby"),i.default(t.element).trigger(t.constructor.Event.HIDDEN),null!==t._popper&&t._popper.destroy(),e&&e()};if(i.default(this.element).trigger(o),!o.isDefaultPrevented()){if(i.default(n).removeClass(v.SHOW),"ontouchstart"in document.documentElement&&i.default(document.body).children().off("mouseover",null,i.default.noop),this._activeTrigger[y.CLICK]=!1,this._activeTrigger[y.FOCUS]=!1,this._activeTrigger[y.HOVER]=!1,i.default(this.tip).hasClass(v.FADE)){var l=r.default.getTransitionDurationFromElement(n);i.default(n).one(r.default.TRANSITION_END,a).emulateTransitionEnd(l)}else a();this._hoverState=""}},e.prototype.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.prototype.isWithContent=function(){return Boolean(this.getTitle())},e.prototype.addAttachmentClass=function(e){i.default(this.getTipElement()).addClass(d+"-"+e)},e.prototype.getTipElement=function(){return this.tip=this.tip||i.default(this.config.template)[0],this.tip},e.prototype.setContent=function(){var e=this.getTipElement();this.setElementContent(i.default(e.querySelectorAll(T.TOOLTIP_INNER)),this.getTitle()),i.default(e).removeClass(v.FADE+" "+v.SHOW)},e.prototype.setElementContent=function(e,t){return"object"==typeof t&&(t.nodeType||t.jquery)?void(this.config.html?i.default(t).parent().is(e)||e.empty().append(t):e.text(i.default(t).text())):void(this.config.html?(this.config.sanitize&&(t=n.sanitizeHtml(t,this.config.whiteList,this.config.sanitizeFn)),e.html(t)):e.text(t))},e.prototype.getTitle=function(){var e=this.element.getAttribute("data-original-title");return e||(e="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),e},e.prototype._getOffset=function(){var e=this,t={};return"function"==typeof this.config.offset?t.fn=function(t){return t.offsets=__assign({},t.offsets,e.config.offset(t.offsets,e.element)||{}),t}:t.offset=this.config.offset,t},e.prototype._getContainer=function(){return this.config.container===!1?document.body:r.default.isElement(this.config.container)?i.default(this.config.container):i.default(document).find(this.config.container)},e.prototype._getAttachment=function(e){return p[e.toUpperCase()]},e.prototype._setListeners=function(){var e=this,t=this.config.trigger.split(" ");t.forEach(function(t){if("click"===t)i.default(e.element).on(e.constructor.Event.CLICK,e.config.selector,function(t){return e.toggle(t)});else if(t!==y.MANUAL){var n=t===y.HOVER?e.constructor.Event.MOUSEENTER:e.constructor.Event.FOCUSIN,o=t===y.HOVER?e.constructor.Event.MOUSELEAVE:e.constructor.Event.FOCUSOUT;i.default(e.element).on(n,e.config.selector,function(t){return e._enter(t)}).on(o,e.config.selector,function(t){return e._leave(t)})}}),i.default(this.element).closest(".modal").on("hide.bs.modal",function(){e.element&&e.hide()}),this.config.selector?this.config=__assign({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e.prototype._fixTitle=function(){var e=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==e)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e.prototype._enter=function(e,t){var n=this.constructor.DATA_KEY;return t=t||i.default(e.currentTarget).data(n),t||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),i.default(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusin"===e.type?y.FOCUS:y.HOVER]=!0),i.default(t.getTipElement()).hasClass(v.SHOW)||t._hoverState===m.SHOW?void(t._hoverState=m.SHOW):(clearTimeout(t._timeout),t._hoverState=m.SHOW,t.config.delay&&t.config.delay.show?void(t._timeout=setTimeout(function(){t._hoverState===m.SHOW&&t.show()},t.config.delay.show)):void t.show())},e.prototype._leave=function(e,t){var n=this.constructor.DATA_KEY;if(t=t||i.default(e.currentTarget).data(n),t||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),i.default(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusout"===e.type?y.FOCUS:y.HOVER]=!1),!t._isWithActiveTrigger())return clearTimeout(t._timeout),t._hoverState=m.OUT,t.config.delay&&t.config.delay.hide?void(t._timeout=setTimeout(function(){t._hoverState===m.OUT&&t.hide()},t.config.delay.hide)):void t.hide()},e.prototype._isWithActiveTrigger=function(){for(var e in this._activeTrigger)if(this._activeTrigger[e])return!0;return!1},e.prototype._getConfig=function(e){var t=i.default(this.element).data();return Object.keys(t).forEach(function(e){h.indexOf(e)!==-1&&delete t[e]}),e=__assign({},this.constructor.Default,t,"object"==typeof e&&e?e:{}),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),r.default.typeCheckConfig(a,e,this.constructor.DefaultType),e.sanitize&&(e.template=n.sanitizeHtml(e.template,e.whiteList,e.sanitizeFn)),e},e.prototype._getDelegateConfig=function(){var e={};if(this.config)for(var t in this.config)this.constructor.Default[t]!==this.config[t]&&(e[t]=this.config[t]);return e},e.prototype._cleanTipClass=function(){var e=i.default(this.getTipElement()),t=e.attr("class").match(c);null!==t&&t.length&&e.removeClass(t.join(""))},e.prototype._handlePopperPlacementChange=function(e){var t=e.instance;this.tip=t.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(e.placement))},e.prototype._fixTransition=function(){var e=this.getTipElement(),t=this.config.animation;null===e.getAttribute("x-placement")&&(i.default(e).removeClass(v.FADE),this.config.animation=!1,this.hide(),this.show(),this.config.animation=t)},e._jQueryInterface=function(t){return this.each(function(){var n=i.default(this).data(s),o="object"==typeof t&&t;if((n||!/dispose|hide/.test(t))&&(n||(n=new e(this,o),i.default(this).data(s,n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new TypeError('No method named "'+t+'"');n[t]()}})},e}();i.default.fn[a]=S._jQueryInterface,i.default.fn[a].Constructor=S,i.default.fn[a].noConflict=function(){return i.default.fn[a]=f,S._jQueryInterface},t.__esModule=!0,t.default=S}),define("popover",["require","exports","jquery","tooltip"],function(e,t,n,i){"use strict";var o="popover",r="4.3.1",a="bs.popover",l="."+a,s=n.default.fn[o],u="bs-popover",f=new RegExp("(^|\\s)"+u+"\\S+","g"),d=__assign({},i.default.Default,{placement:"right",trigger:"click",content:"",template:''}),c=__assign({},i.default.DefaultType,{content:"(string|element|function)"}),h={FADE:"fade",SHOW:"show"},_={TITLE:".popover-header",CONTENT:".popover-body"},p={HIDE:"hide"+l,HIDDEN:"hidden"+l,SHOW:"show"+l,SHOWN:"shown"+l,INSERTED:"inserted"+l,CLICK:"click"+l,FOCUSIN:"focusin"+l,FOCUSOUT:"focusout"+l,MOUSEENTER:"mouseenter"+l,MOUSELEAVE:"mouseleave"+l},g=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return __extends(t,e),Object.defineProperty(t,"VERSION",{get:function(){return r},enumerable:!0,configurable:!0}),Object.defineProperty(t,"Default",{get:function(){return d},enumerable:!0,configurable:!0}),Object.defineProperty(t,"NAME",{get:function(){return o},enumerable:!0,configurable:!0}),Object.defineProperty(t,"DATA_KEY",{get:function(){return a},enumerable:!0,configurable:!0}),Object.defineProperty(t,"Event",{get:function(){return p},enumerable:!0,configurable:!0}),Object.defineProperty(t,"EVENT_KEY",{get:function(){return l},enumerable:!0,configurable:!0}),Object.defineProperty(t,"DefaultType",{get:function(){return c},enumerable:!0,configurable:!0}),t.prototype.isWithContent=function(){return this.getTitle()||this._getContent()},t.prototype.addAttachmentClass=function(e){n.default(this.getTipElement()).addClass(u+"-"+e)},t.prototype.getTipElement=function(){return this.tip=this.tip||n.default(this.config.template)[0],this.tip},t.prototype.setContent=function(){var e=n.default(this.getTipElement());this.setElementContent(e.find(_.TITLE),this.getTitle());var t=this._getContent();"function"==typeof t&&(t=t.call(this.element)),this.setElementContent(e.find(_.CONTENT),t),e.removeClass(h.FADE+" "+h.SHOW)},t.prototype._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},t.prototype._cleanTipClass=function(){var e=n.default(this.getTipElement()),t=e.attr("class").match(f);null!==t&&t.length>0&&e.removeClass(t.join(""))},t._jQueryInterface=function(e){return this.each(function(){var i=n.default(this).data(a),o="object"==typeof e?e:null;if((i||!/dispose|hide/.test(e))&&(i||(i=new t(this,o),n.default(this).data(a,i)),"string"==typeof e)){if("undefined"==typeof i[e])throw new TypeError('No method named "'+e+'"');i[e]()}})},t}(i.default);n.default.fn[o]=g._jQueryInterface,n.default.fn[o].Constructor=g,n.default.fn[o].noConflict=function(){return n.default.fn[o]=s,g._jQueryInterface},t.__esModule=!0,t.default=g}),define("scrollspy",["require","exports","jquery","util"],function(e,t,n,i){"use strict";var o="scrollspy",r="4.3.1",a="bs.scrollspy",l="."+a,s=".data-api",u=n.default.fn[o],f={offset:10,method:"auto",target:""},d={offset:"number",method:"string",target:"(string|element)"},c={ACTIVATE:"activate"+l,SCROLL:"scroll"+l,LOAD_DATA_API:"load"+l+s},h={DROPDOWN_ITEM:"dropdown-item",DROPDOWN_MENU:"dropdown-menu",ACTIVE:"active"},_={DATA_SPY:'[data-spy="scroll"]',ACTIVE:".active",NAV_LIST_GROUP:".nav, .list-group",NAV_LINKS:".nav-link",NAV_ITEMS:".nav-item",LIST_ITEMS:".list-group-item",DROPDOWN:".dropdown",DROPDOWN_ITEMS:".dropdown-item",DROPDOWN_TOGGLE:".dropdown-toggle"},p={OFFSET:"offset",POSITION:"position"},g=function(){function e(e,t){var i=this;this._element=e,this._scrollElement="BODY"===e.tagName?window:e,this._config=this._getConfig(t),this._selector=this._config.target+" "+_.NAV_LINKS+","+(this._config.target+" "+_.LIST_ITEMS+",")+(this._config.target+" "+_.DROPDOWN_ITEMS),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,n.default(this._scrollElement).on(c.SCROLL,function(e){return i._process(e)}),this.refresh(),this._process()}return Object.defineProperty(e,"VERSION",{get:function(){return r},enumerable:!0,configurable:!0}),Object.defineProperty(e,"Default",{get:function(){return f},enumerable:!0,configurable:!0}),e.prototype.refresh=function(){var e=this,t=this._scrollElement===this._scrollElement.window?p.OFFSET:p.POSITION,o="auto"===this._config.method?t:this._config.method,r=o===p.POSITION?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight();var a=[].slice.call(document.querySelectorAll(this._selector));a.map(function(e){var t,a=i.default.getSelectorFromElement(e);if(a&&(t=document.querySelector(a)),t){var l=t.getBoundingClientRect();if(l.width||l.height)return[n.default(t)[o]().top+r,a]}return null}).filter(function(e){return e}).sort(function(e,t){return e[0]-t[0]}).forEach(function(t){e._offsets.push(t[0]),e._targets.push(t[1])})},e.prototype.dispose=function(){n.default.removeData(this._element,a),n.default(this._scrollElement).off(l),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e.prototype._getConfig=function(e){if(e=__assign({},f,"object"==typeof e&&e?e:{}),"string"!=typeof e.target){var t=n.default(e.target).attr("id");t||(t=i.default.getUID(o),n.default(e.target).attr("id",t)),e.target="#"+t}return i.default.typeCheckConfig(o,e,d),e},e.prototype._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e.prototype._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e.prototype._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e.prototype._process=function(){var e=this._getScrollTop()+this._config.offset,t=this._getScrollHeight(),n=this._config.offset+t-this._getOffsetHeight();if(this._scrollHeight!==t&&this.refresh(),e>=n){var i=this._targets[this._targets.length-1];return void(this._activeTarget!==i&&this._activate(i))}if(this._activeTarget&&e0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length,r=o;r--;){var a=this._activeTarget!==this._targets[r]&&e>=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||e li > .active",DATA_TOGGLE:'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',DROPDOWN_TOGGLE:".dropdown-toggle",DROPDOWN_ACTIVE_CHILD:"> .dropdown-menu .active"},h=function(){function e(e){this._element=e}return Object.defineProperty(e,"VERSION",{get:function(){return r},enumerable:!0,configurable:!0}),e.prototype.show=function(){var e=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&n.default(this._element).hasClass(d.ACTIVE)||n.default(this._element).hasClass(d.DISABLED))){var t,o,r=n.default(this._element).closest(c.NAV_LIST_GROUP)[0],a=i.default.getSelectorFromElement(this._element);if(r){var l="UL"===r.nodeName||"OL"===r.nodeName?c.ACTIVE_UL:c.ACTIVE;o=n.default.makeArray(n.default(r).find(l)),o=o[o.length-1]}var s=n.default.Event(f.HIDE,{relatedTarget:this._element}),u=n.default.Event(f.SHOW,{relatedTarget:o});if(o&&n.default(o).trigger(s),n.default(this._element).trigger(u),!u.isDefaultPrevented()&&!s.isDefaultPrevented()){a&&(t=document.querySelector(a)),this._activate(this._element,r);var h=function(){var t=n.default.Event(f.HIDDEN,{relatedTarget:e._element}),i=n.default.Event(f.SHOWN,{relatedTarget:o});n.default(o).trigger(t),n.default(e._element).trigger(i)};t?this._activate(t,t.parentNode,h):h()}}},e.prototype.dispose=function(){n.default.removeData(this._element,a),this._element=null},e.prototype._activate=function(e,t,o){var r=this,a=!t||"UL"!==t.nodeName&&"OL"!==t.nodeName?n.default(t).children(c.ACTIVE):n.default(t).find(c.ACTIVE_UL),l=a[0],s=o&&l&&n.default(l).hasClass(d.FADE),u=function(){return r._transitionComplete(e,l,o)};if(l&&s){var f=i.default.getTransitionDurationFromElement(l);n.default(l).removeClass(d.SHOW).one(i.default.TRANSITION_END,u).emulateTransitionEnd(f)}else u()},e.prototype._transitionComplete=function(e,t,o){if(t){n.default(t).removeClass(d.ACTIVE);var r=n.default(t.parentNode).find(c.DROPDOWN_ACTIVE_CHILD)[0];r&&n.default(r).removeClass(d.ACTIVE),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!1)}if(n.default(e).addClass(d.ACTIVE),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!0),i.default.reflow(e),e.classList.contains(d.FADE)&&e.classList.add(d.SHOW),e.parentNode&&n.default(e.parentNode).hasClass(d.DROPDOWN_MENU)){var a=n.default(e).closest(c.DROPDOWN)[0];if(a){var l=[].slice.call(a.querySelectorAll(c.DROPDOWN_TOGGLE));n.default(l).addClass(d.ACTIVE)}e.setAttribute("aria-expanded",!0)}o&&o()},e._jQueryInterface=function(t){return this.each(function(){var i=n.default(this),o=i.data(a);if(o||(o=new e(this),i.data(a,o)),"string"==typeof t){if("undefined"==typeof o[t])throw new TypeError('No method named "'+t+'"');o[t]()}})},e}();n.default(document).on(f.CLICK_DATA_API,c.DATA_TOGGLE,function(e){e.preventDefault(),h._jQueryInterface.call(n.default(this),"show")}),n.default.fn[o]=h._jQueryInterface,n.default.fn[o].Constructor=h,n.default.fn[o].noConflict=function(){return n.default.fn[o]=u,h._jQueryInterface},t.__esModule=!0,t.default=h}),define("toast",["require","exports","jquery","util"],function(e,t,n,i){"use strict";var o="toast",r="4.3.1",a="bs.toast",l="."+a,s=n.default.fn[o],u={ +CLICK_DISMISS:"click.dismiss"+l,HIDE:"hide"+l,HIDDEN:"hidden"+l,SHOW:"show"+l,SHOWN:"shown"+l},f={FADE:"fade",HIDE:"hide",SHOW:"show",SHOWING:"showing"},d={animation:"boolean",autohide:"boolean",delay:"number"},c={animation:!0,autohide:!0,delay:500},h={DATA_DISMISS:'[data-dismiss="toast"]'},_=function(){function e(e,t){this._element=e,this._config=this._getConfig(t),this._timeout=null,this._setListeners()}return Object.defineProperty(e,"VERSION",{get:function(){return r},enumerable:!0,configurable:!0}),Object.defineProperty(e,"DefaultType",{get:function(){return d},enumerable:!0,configurable:!0}),Object.defineProperty(e,"Default",{get:function(){return c},enumerable:!0,configurable:!0}),e.prototype.show=function(){var e=this;n.default(this._element).trigger(u.SHOW),this._config.animation&&this._element.classList.add(f.FADE);var t=function(){e._element.classList.remove(f.SHOWING),e._element.classList.add(f.SHOW),n.default(e._element).trigger(u.SHOWN),e._config.autohide&&e.hide()};if(this._element.classList.remove(f.HIDE),this._element.classList.add(f.SHOWING),this._config.animation){var o=i.default.getTransitionDurationFromElement(this._element);n.default(this._element).one(i.default.TRANSITION_END,t).emulateTransitionEnd(o)}else t()},e.prototype.hide=function(e){var t=this;this._element.classList.contains(f.SHOW)&&(n.default(this._element).trigger(u.HIDE),e?this._close():this._timeout=setTimeout(function(){t._close()},this._config.delay))},e.prototype.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(f.SHOW)&&this._element.classList.remove(f.SHOW),n.default(this._element).off(u.CLICK_DISMISS),n.default.removeData(this._element,a),this._element=null,this._config=null},e.prototype._getConfig=function(e){return e=__assign({},c,n.default(this._element).data(),"object"==typeof e&&e?e:{}),i.default.typeCheckConfig(o,e,this.constructor.DefaultType),e},e.prototype._setListeners=function(){var e=this;n.default(this._element).on(u.CLICK_DISMISS,h.DATA_DISMISS,function(){return e.hide(!0)})},e.prototype._close=function(){var e=this,t=function(){e._element.classList.add(f.HIDE),n.default(e._element).trigger(u.HIDDEN)};if(this._element.classList.remove(f.SHOW),this._config.animation){var o=i.default.getTransitionDurationFromElement(this._element);n.default(this._element).one(i.default.TRANSITION_END,t).emulateTransitionEnd(o)}else t()},e._jQueryInterface=function(t){return this.each(function(){var i=n.default(this),o=i.data(a),r="object"==typeof t&&t;if(o||(o=new e(this,r),i.data(a,o)),"string"==typeof t){if("undefined"==typeof o[t])throw new TypeError('No method named "'+t+'"');o[t](this)}})},e}();n.default.fn[o]=_._jQueryInterface,n.default.fn[o].Constructor=_,n.default.fn[o].noConflict=function(){return n.default.fn[o]=s,_._jQueryInterface},t.__esModule=!0,t.default=_}),define("index",["require","exports","jquery","alert","button","carousel","collapse","dropdown","modal","popover","scrollspy","tab","toast","tooltip","util"],function(e,t,n,i,o,r,a,l,s,u,f,d,c,h,_){"use strict";t.Alert=i.default,t.Button=o.default,t.Carousel=r.default,t.Collapse=a.default,t.Dropdown=l.default,t.Modal=s.default,t.Popover=u.default,t.Scrollspy=f.default,t.Tab=d.default,t.Toast=c.default,t.Tooltip=h.default,t.Util=_.default,function(){if("undefined"==typeof n.default)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var e=n.default.fn.jquery.split(" ")[0].split("."),t=1,i=2,o=9,r=1,a=4;if(e[0]=a)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}()}); diff --git a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery-ui.js b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery-ui.js index 3495d4c5024..0a07c5cffc8 100644 --- a/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery-ui.js +++ b/src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery-ui.js @@ -1,18706 +1,13611 @@ -/*! jQuery UI - v1.12.1 - 2019-04-23 +/* +** NOTE: This file is generated by Gulp and should not be edited directly! +** Any changes made directly to this file will be overwritten next time its asset group is processed by Gulp. +*/ + +/*! jQuery UI - v1.11.4 - 2016-02-09 * http://jqueryui.com -* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/draggable.js, widgets/droppable.js, widgets/resizable.js, widgets/selectable.js, widgets/sortable.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/selectmenu.js, widgets/slider.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js +* Includes: core.js, widget.js, mouse.js, position.js, draggable.js, droppable.js, resizable.js, selectable.js, sortable.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, menu.js, progressbar.js, selectmenu.js, slider.js, spinner.js, tabs.js, tooltip.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js * Copyright jQuery Foundation and other contributors; Licensed MIT */ - -(function( factory ) { - if ( typeof define === "function" && define.amd ) { - - // AMD. Register as an anonymous module. - define([ "jquery" ], factory ); - } else { - - // Browser globals - factory( jQuery ); - } -}(function( $ ) { - -$.ui = $.ui || {}; - -var version = $.ui.version = "1.12.1"; - - -/*! - * jQuery UI Widget 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -//>>label: Widget -//>>group: Core -//>>description: Provides a factory for creating stateful widgets with a common API. -//>>docs: http://api.jqueryui.com/jQuery.widget/ -//>>demos: http://jqueryui.com/widget/ - - - -var widgetUuid = 0; -var widgetSlice = Array.prototype.slice; - -$.cleanData = ( function( orig ) { - return function( elems ) { - var events, elem, i; - for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) { - try { - - // Only trigger remove when necessary to save time - events = $._data( elem, "events" ); - if ( events && events.remove ) { - $( elem ).triggerHandler( "remove" ); - } - - // Http://bugs.jquery.com/ticket/8235 - } catch ( e ) {} - } - orig( elems ); - }; -} )( $.cleanData ); - -$.widget = function( name, base, prototype ) { - var existingConstructor, constructor, basePrototype; - - // ProxiedPrototype allows the provided prototype to remain unmodified - // so that it can be used as a mixin for multiple widgets (#8876) - var proxiedPrototype = {}; - - var namespace = name.split( "." )[ 0 ]; - name = name.split( "." )[ 1 ]; - var fullName = namespace + "-" + name; - - if ( !prototype ) { - prototype = base; - base = $.Widget; - } - - if ( $.isArray( prototype ) ) { - prototype = $.extend.apply( null, [ {} ].concat( prototype ) ); - } - - // Create selector for plugin - $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { - return !!$.data( elem, fullName ); - }; - - $[ namespace ] = $[ namespace ] || {}; - existingConstructor = $[ namespace ][ name ]; - constructor = $[ namespace ][ name ] = function( options, element ) { - - // Allow instantiation without "new" keyword - if ( !this._createWidget ) { - return new constructor( options, element ); - } - - // Allow instantiation without initializing for simple inheritance - // must use "new" keyword (the code above always passes args) - if ( arguments.length ) { - this._createWidget( options, element ); - } - }; - - // Extend with the existing constructor to carry over any static properties - $.extend( constructor, existingConstructor, { - version: prototype.version, - - // Copy the object used to create the prototype in case we need to - // redefine the widget later - _proto: $.extend( {}, prototype ), - - // Track widgets that inherit from this widget in case this widget is - // redefined after a widget inherits from it - _childConstructors: [] - } ); - - basePrototype = new base(); - - // We need to make the options hash a property directly on the new instance - // otherwise we'll modify the options hash on the prototype that we're - // inheriting from - basePrototype.options = $.widget.extend( {}, basePrototype.options ); - $.each( prototype, function( prop, value ) { - if ( !$.isFunction( value ) ) { - proxiedPrototype[ prop ] = value; - return; - } - proxiedPrototype[ prop ] = ( function() { - function _super() { - return base.prototype[ prop ].apply( this, arguments ); - } - - function _superApply( args ) { - return base.prototype[ prop ].apply( this, args ); - } - - return function() { - var __super = this._super; - var __superApply = this._superApply; - var returnValue; - - this._super = _super; - this._superApply = _superApply; - - returnValue = value.apply( this, arguments ); - - this._super = __super; - this._superApply = __superApply; - - return returnValue; - }; - } )(); - } ); - constructor.prototype = $.widget.extend( basePrototype, { - - // TODO: remove support for widgetEventPrefix - // always use the name + a colon as the prefix, e.g., draggable:start - // don't prefix for widgets that aren't DOM-based - widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name - }, proxiedPrototype, { - constructor: constructor, - namespace: namespace, - widgetName: name, - widgetFullName: fullName - } ); - - // If this widget is being redefined then we need to find all widgets that - // are inheriting from it and redefine all of them so that they inherit from - // the new version of this widget. We're essentially trying to replace one - // level in the prototype chain. - if ( existingConstructor ) { - $.each( existingConstructor._childConstructors, function( i, child ) { - var childPrototype = child.prototype; - - // Redefine the child widget using the same prototype that was - // originally used, but inherit from the new version of the base - $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, - child._proto ); - } ); - - // Remove the list of existing child constructors from the old constructor - // so the old child constructors can be garbage collected - delete existingConstructor._childConstructors; - } else { - base._childConstructors.push( constructor ); - } - - $.widget.bridge( name, constructor ); - - return constructor; -}; - -$.widget.extend = function( target ) { - var input = widgetSlice.call( arguments, 1 ); - var inputIndex = 0; - var inputLength = input.length; - var key; - var value; - - for ( ; inputIndex < inputLength; inputIndex++ ) { - for ( key in input[ inputIndex ] ) { - value = input[ inputIndex ][ key ]; - if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { - - // Clone objects - if ( $.isPlainObject( value ) ) { - target[ key ] = $.isPlainObject( target[ key ] ) ? - $.widget.extend( {}, target[ key ], value ) : - - // Don't extend strings, arrays, etc. with objects - $.widget.extend( {}, value ); - - // Copy everything else by reference - } else { - target[ key ] = value; - } - } - } - } - return target; -}; - -$.widget.bridge = function( name, object ) { - var fullName = object.prototype.widgetFullName || name; - $.fn[ name ] = function( options ) { - var isMethodCall = typeof options === "string"; - var args = widgetSlice.call( arguments, 1 ); - var returnValue = this; - - if ( isMethodCall ) { - - // If this is an empty collection, we need to have the instance method - // return undefined instead of the jQuery instance - if ( !this.length && options === "instance" ) { - returnValue = undefined; - } else { - this.each( function() { - var methodValue; - var instance = $.data( this, fullName ); - - if ( options === "instance" ) { - returnValue = instance; - return false; - } - - if ( !instance ) { - return $.error( "cannot call methods on " + name + - " prior to initialization; " + - "attempted to call method '" + options + "'" ); - } - - if ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === "_" ) { - return $.error( "no such method '" + options + "' for " + name + - " widget instance" ); - } - - methodValue = instance[ options ].apply( instance, args ); - - if ( methodValue !== instance && methodValue !== undefined ) { - returnValue = methodValue && methodValue.jquery ? - returnValue.pushStack( methodValue.get() ) : - methodValue; - return false; - } - } ); - } - } else { - - // Allow multiple hashes to be passed on init - if ( args.length ) { - options = $.widget.extend.apply( null, [ options ].concat( args ) ); - } - - this.each( function() { - var instance = $.data( this, fullName ); - if ( instance ) { - instance.option( options || {} ); - if ( instance._init ) { - instance._init(); - } - } else { - $.data( this, fullName, new object( options, this ) ); - } - } ); - } - - return returnValue; - }; -}; - -$.Widget = function( /* options, element */ ) {}; -$.Widget._childConstructors = []; - -$.Widget.prototype = { - widgetName: "widget", - widgetEventPrefix: "", - defaultElement: "
    ", - - options: { - classes: {}, - disabled: false, - - // Callbacks - create: null - }, - - _createWidget: function( options, element ) { - element = $( element || this.defaultElement || this )[ 0 ]; - this.element = $( element ); - this.uuid = widgetUuid++; - this.eventNamespace = "." + this.widgetName + this.uuid; - - this.bindings = $(); - this.hoverable = $(); - this.focusable = $(); - this.classesElementLookup = {}; - - if ( element !== this ) { - $.data( element, this.widgetFullName, this ); - this._on( true, this.element, { - remove: function( event ) { - if ( event.target === element ) { - this.destroy(); - } - } - } ); - this.document = $( element.style ? - - // Element within the document - element.ownerDocument : - - // Element is window or document - element.document || element ); - this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow ); - } - - this.options = $.widget.extend( {}, - this.options, - this._getCreateOptions(), - options ); - - this._create(); - - if ( this.options.disabled ) { - this._setOptionDisabled( this.options.disabled ); - } - - this._trigger( "create", null, this._getCreateEventData() ); - this._init(); - }, - - _getCreateOptions: function() { - return {}; - }, - - _getCreateEventData: $.noop, - - _create: $.noop, - - _init: $.noop, - - destroy: function() { - var that = this; - - this._destroy(); - $.each( this.classesElementLookup, function( key, value ) { - that._removeClass( value, key ); - } ); - - // We can probably remove the unbind calls in 2.0 - // all event bindings should go through this._on() - this.element - .off( this.eventNamespace ) - .removeData( this.widgetFullName ); - this.widget() - .off( this.eventNamespace ) - .removeAttr( "aria-disabled" ); - - // Clean up events and states - this.bindings.off( this.eventNamespace ); - }, - - _destroy: $.noop, - - widget: function() { - return this.element; - }, - - option: function( key, value ) { - var options = key; - var parts; - var curOption; - var i; - - if ( arguments.length === 0 ) { - - // Don't return a reference to the internal hash - return $.widget.extend( {}, this.options ); - } - - if ( typeof key === "string" ) { - - // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } - options = {}; - parts = key.split( "." ); - key = parts.shift(); - if ( parts.length ) { - curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); - for ( i = 0; i < parts.length - 1; i++ ) { - curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; - curOption = curOption[ parts[ i ] ]; - } - key = parts.pop(); - if ( arguments.length === 1 ) { - return curOption[ key ] === undefined ? null : curOption[ key ]; - } - curOption[ key ] = value; - } else { - if ( arguments.length === 1 ) { - return this.options[ key ] === undefined ? null : this.options[ key ]; - } - options[ key ] = value; - } - } - - this._setOptions( options ); - - return this; - }, - - _setOptions: function( options ) { - var key; - - for ( key in options ) { - this._setOption( key, options[ key ] ); - } - - return this; - }, - - _setOption: function( key, value ) { - if ( key === "classes" ) { - this._setOptionClasses( value ); - } - - this.options[ key ] = value; - - if ( key === "disabled" ) { - this._setOptionDisabled( value ); - } - - return this; - }, - - _setOptionClasses: function( value ) { - var classKey, elements, currentElements; - - for ( classKey in value ) { - currentElements = this.classesElementLookup[ classKey ]; - if ( value[ classKey ] === this.options.classes[ classKey ] || - !currentElements || - !currentElements.length ) { - continue; - } - - // We are doing this to create a new jQuery object because the _removeClass() call - // on the next line is going to destroy the reference to the current elements being - // tracked. We need to save a copy of this collection so that we can add the new classes - // below. - elements = $( currentElements.get() ); - this._removeClass( currentElements, classKey ); - - // We don't use _addClass() here, because that uses this.options.classes - // for generating the string of classes. We want to use the value passed in from - // _setOption(), this is the new value of the classes option which was passed to - // _setOption(). We pass this value directly to _classes(). - elements.addClass( this._classes( { - element: elements, - keys: classKey, - classes: value, - add: true - } ) ); - } - }, - - _setOptionDisabled: function( value ) { - this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value ); - - // If the widget is becoming disabled, then nothing is interactive - if ( value ) { - this._removeClass( this.hoverable, null, "ui-state-hover" ); - this._removeClass( this.focusable, null, "ui-state-focus" ); - } - }, - - enable: function() { - return this._setOptions( { disabled: false } ); - }, - - disable: function() { - return this._setOptions( { disabled: true } ); - }, - - _classes: function( options ) { - var full = []; - var that = this; - - options = $.extend( { - element: this.element, - classes: this.options.classes || {} - }, options ); - - function processClassString( classes, checkOption ) { - var current, i; - for ( i = 0; i < classes.length; i++ ) { - current = that.classesElementLookup[ classes[ i ] ] || $(); - if ( options.add ) { - current = $( $.unique( current.get().concat( options.element.get() ) ) ); - } else { - current = $( current.not( options.element ).get() ); - } - that.classesElementLookup[ classes[ i ] ] = current; - full.push( classes[ i ] ); - if ( checkOption && options.classes[ classes[ i ] ] ) { - full.push( options.classes[ classes[ i ] ] ); - } - } - } - - this._on( options.element, { - "remove": "_untrackClassesElement" - } ); - - if ( options.keys ) { - processClassString( options.keys.match( /\S+/g ) || [], true ); - } - if ( options.extra ) { - processClassString( options.extra.match( /\S+/g ) || [] ); - } - - return full.join( " " ); - }, - - _untrackClassesElement: function( event ) { - var that = this; - $.each( that.classesElementLookup, function( key, value ) { - if ( $.inArray( event.target, value ) !== -1 ) { - that.classesElementLookup[ key ] = $( value.not( event.target ).get() ); - } - } ); - }, - - _removeClass: function( element, keys, extra ) { - return this._toggleClass( element, keys, extra, false ); - }, - - _addClass: function( element, keys, extra ) { - return this._toggleClass( element, keys, extra, true ); - }, - - _toggleClass: function( element, keys, extra, add ) { - add = ( typeof add === "boolean" ) ? add : extra; - var shift = ( typeof element === "string" || element === null ), - options = { - extra: shift ? keys : extra, - keys: shift ? element : keys, - element: shift ? this.element : element, - add: add - }; - options.element.toggleClass( this._classes( options ), add ); - return this; - }, - - _on: function( suppressDisabledCheck, element, handlers ) { - var delegateElement; - var instance = this; - - // No suppressDisabledCheck flag, shuffle arguments - if ( typeof suppressDisabledCheck !== "boolean" ) { - handlers = element; - element = suppressDisabledCheck; - suppressDisabledCheck = false; - } - - // No element argument, shuffle and use this.element - if ( !handlers ) { - handlers = element; - element = this.element; - delegateElement = this.widget(); - } else { - element = delegateElement = $( element ); - this.bindings = this.bindings.add( element ); - } - - $.each( handlers, function( event, handler ) { - function handlerProxy() { - - // Allow widgets to customize the disabled handling - // - disabled as an array instead of boolean - // - disabled class as method for disabling individual parts - if ( !suppressDisabledCheck && - ( instance.options.disabled === true || - $( this ).hasClass( "ui-state-disabled" ) ) ) { - return; - } - return ( typeof handler === "string" ? instance[ handler ] : handler ) - .apply( instance, arguments ); - } - - // Copy the guid so direct unbinding works - if ( typeof handler !== "string" ) { - handlerProxy.guid = handler.guid = - handler.guid || handlerProxy.guid || $.guid++; - } - - var match = event.match( /^([\w:-]*)\s*(.*)$/ ); - var eventName = match[ 1 ] + instance.eventNamespace; - var selector = match[ 2 ]; - - if ( selector ) { - delegateElement.on( eventName, selector, handlerProxy ); - } else { - element.on( eventName, handlerProxy ); - } - } ); - }, - - _off: function( element, eventName ) { - eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) + - this.eventNamespace; - element.off( eventName ).off( eventName ); - - // Clear the stack to avoid memory leaks (#10056) - this.bindings = $( this.bindings.not( element ).get() ); - this.focusable = $( this.focusable.not( element ).get() ); - this.hoverable = $( this.hoverable.not( element ).get() ); - }, - - _delay: function( handler, delay ) { - function handlerProxy() { - return ( typeof handler === "string" ? instance[ handler ] : handler ) - .apply( instance, arguments ); - } - var instance = this; - return setTimeout( handlerProxy, delay || 0 ); - }, - - _hoverable: function( element ) { - this.hoverable = this.hoverable.add( element ); - this._on( element, { - mouseenter: function( event ) { - this._addClass( $( event.currentTarget ), null, "ui-state-hover" ); - }, - mouseleave: function( event ) { - this._removeClass( $( event.currentTarget ), null, "ui-state-hover" ); - } - } ); - }, - - _focusable: function( element ) { - this.focusable = this.focusable.add( element ); - this._on( element, { - focusin: function( event ) { - this._addClass( $( event.currentTarget ), null, "ui-state-focus" ); - }, - focusout: function( event ) { - this._removeClass( $( event.currentTarget ), null, "ui-state-focus" ); - } - } ); - }, - - _trigger: function( type, event, data ) { - var prop, orig; - var callback = this.options[ type ]; - - data = data || {}; - event = $.Event( event ); - event.type = ( type === this.widgetEventPrefix ? - type : - this.widgetEventPrefix + type ).toLowerCase(); - - // The original event may come from any element - // so we need to reset the target on the new event - event.target = this.element[ 0 ]; - - // Copy original event properties over to the new event - orig = event.originalEvent; - if ( orig ) { - for ( prop in orig ) { - if ( !( prop in event ) ) { - event[ prop ] = orig[ prop ]; - } - } - } - - this.element.trigger( event, data ); - return !( $.isFunction( callback ) && - callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false || - event.isDefaultPrevented() ); - } -}; - -$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { - $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { - if ( typeof options === "string" ) { - options = { effect: options }; - } - - var hasOptions; - var effectName = !options ? - method : - options === true || typeof options === "number" ? - defaultEffect : - options.effect || defaultEffect; - - options = options || {}; - if ( typeof options === "number" ) { - options = { duration: options }; - } - - hasOptions = !$.isEmptyObject( options ); - options.complete = callback; - - if ( options.delay ) { - element.delay( options.delay ); - } - - if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { - element[ method ]( options ); - } else if ( effectName !== method && element[ effectName ] ) { - element[ effectName ]( options.duration, options.easing, callback ); - } else { - element.queue( function( next ) { - $( this )[ method ](); - if ( callback ) { - callback.call( element[ 0 ] ); - } - next(); - } ); - } - }; -} ); - -var widget = $.widget; - - -/*! - * jQuery UI Position 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/position/ - */ - -//>>label: Position -//>>group: Core -//>>description: Positions elements relative to other elements. -//>>docs: http://api.jqueryui.com/position/ -//>>demos: http://jqueryui.com/position/ - - -( function() { -var cachedScrollbarWidth, - max = Math.max, - abs = Math.abs, - rhorizontal = /left|center|right/, - rvertical = /top|center|bottom/, - roffset = /[\+\-]\d+(\.[\d]+)?%?/, - rposition = /^\w+/, - rpercent = /%$/, - _position = $.fn.position; - -function getOffsets( offsets, width, height ) { - return [ - parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ), - parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 ) - ]; -} - -function parseCss( element, property ) { - return parseInt( $.css( element, property ), 10 ) || 0; -} - -function getDimensions( elem ) { - var raw = elem[ 0 ]; - if ( raw.nodeType === 9 ) { - return { - width: elem.width(), - height: elem.height(), - offset: { top: 0, left: 0 } - }; - } - if ( $.isWindow( raw ) ) { - return { - width: elem.width(), - height: elem.height(), - offset: { top: elem.scrollTop(), left: elem.scrollLeft() } - }; - } - if ( raw.preventDefault ) { - return { - width: 0, - height: 0, - offset: { top: raw.pageY, left: raw.pageX } - }; - } - return { - width: elem.outerWidth(), - height: elem.outerHeight(), - offset: elem.offset() - }; -} - -$.position = { - scrollbarWidth: function() { - if ( cachedScrollbarWidth !== undefined ) { - return cachedScrollbarWidth; - } - var w1, w2, - div = $( "
    " + - "
    " ), - innerDiv = div.children()[ 0 ]; - - $( "body" ).append( div ); - w1 = innerDiv.offsetWidth; - div.css( "overflow", "scroll" ); - - w2 = innerDiv.offsetWidth; - - if ( w1 === w2 ) { - w2 = div[ 0 ].clientWidth; - } - - div.remove(); - - return ( cachedScrollbarWidth = w1 - w2 ); - }, - getScrollInfo: function( within ) { - var overflowX = within.isWindow || within.isDocument ? "" : - within.element.css( "overflow-x" ), - overflowY = within.isWindow || within.isDocument ? "" : - within.element.css( "overflow-y" ), - hasOverflowX = overflowX === "scroll" || - ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ), - hasOverflowY = overflowY === "scroll" || - ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight ); - return { - width: hasOverflowY ? $.position.scrollbarWidth() : 0, - height: hasOverflowX ? $.position.scrollbarWidth() : 0 - }; - }, - getWithinInfo: function( element ) { - var withinElement = $( element || window ), - isWindow = $.isWindow( withinElement[ 0 ] ), - isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9, - hasOffset = !isWindow && !isDocument; - return { - element: withinElement, - isWindow: isWindow, - isDocument: isDocument, - offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 }, - scrollLeft: withinElement.scrollLeft(), - scrollTop: withinElement.scrollTop(), - width: withinElement.outerWidth(), - height: withinElement.outerHeight() - }; - } -}; - -$.fn.position = function( options ) { - if ( !options || !options.of ) { - return _position.apply( this, arguments ); - } - - // Make a copy, we don't want to modify arguments - options = $.extend( {}, options ); - - var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, - target = $( options.of ), - within = $.position.getWithinInfo( options.within ), - scrollInfo = $.position.getScrollInfo( within ), - collision = ( options.collision || "flip" ).split( " " ), - offsets = {}; - - dimensions = getDimensions( target ); - if ( target[ 0 ].preventDefault ) { - - // Force left top to allow flipping - options.at = "left top"; - } - targetWidth = dimensions.width; - targetHeight = dimensions.height; - targetOffset = dimensions.offset; - - // Clone to reuse original targetOffset later - basePosition = $.extend( {}, targetOffset ); - - // Force my and at to have valid horizontal and vertical positions - // if a value is missing or invalid, it will be converted to center - $.each( [ "my", "at" ], function() { - var pos = ( options[ this ] || "" ).split( " " ), - horizontalOffset, - verticalOffset; - - if ( pos.length === 1 ) { - pos = rhorizontal.test( pos[ 0 ] ) ? - pos.concat( [ "center" ] ) : - rvertical.test( pos[ 0 ] ) ? - [ "center" ].concat( pos ) : - [ "center", "center" ]; - } - pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center"; - pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center"; - - // Calculate offsets - horizontalOffset = roffset.exec( pos[ 0 ] ); - verticalOffset = roffset.exec( pos[ 1 ] ); - offsets[ this ] = [ - horizontalOffset ? horizontalOffset[ 0 ] : 0, - verticalOffset ? verticalOffset[ 0 ] : 0 - ]; - - // Reduce to just the positions without the offsets - options[ this ] = [ - rposition.exec( pos[ 0 ] )[ 0 ], - rposition.exec( pos[ 1 ] )[ 0 ] - ]; - } ); - - // Normalize collision option - if ( collision.length === 1 ) { - collision[ 1 ] = collision[ 0 ]; - } - - if ( options.at[ 0 ] === "right" ) { - basePosition.left += targetWidth; - } else if ( options.at[ 0 ] === "center" ) { - basePosition.left += targetWidth / 2; - } - - if ( options.at[ 1 ] === "bottom" ) { - basePosition.top += targetHeight; - } else if ( options.at[ 1 ] === "center" ) { - basePosition.top += targetHeight / 2; - } - - atOffset = getOffsets( offsets.at, targetWidth, targetHeight ); - basePosition.left += atOffset[ 0 ]; - basePosition.top += atOffset[ 1 ]; - - return this.each( function() { - var collisionPosition, using, - elem = $( this ), - elemWidth = elem.outerWidth(), - elemHeight = elem.outerHeight(), - marginLeft = parseCss( this, "marginLeft" ), - marginTop = parseCss( this, "marginTop" ), - collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + - scrollInfo.width, - collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + - scrollInfo.height, - position = $.extend( {}, basePosition ), - myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() ); - - if ( options.my[ 0 ] === "right" ) { - position.left -= elemWidth; - } else if ( options.my[ 0 ] === "center" ) { - position.left -= elemWidth / 2; - } - - if ( options.my[ 1 ] === "bottom" ) { - position.top -= elemHeight; - } else if ( options.my[ 1 ] === "center" ) { - position.top -= elemHeight / 2; - } - - position.left += myOffset[ 0 ]; - position.top += myOffset[ 1 ]; - - collisionPosition = { - marginLeft: marginLeft, - marginTop: marginTop - }; - - $.each( [ "left", "top" ], function( i, dir ) { - if ( $.ui.position[ collision[ i ] ] ) { - $.ui.position[ collision[ i ] ][ dir ]( position, { - targetWidth: targetWidth, - targetHeight: targetHeight, - elemWidth: elemWidth, - elemHeight: elemHeight, - collisionPosition: collisionPosition, - collisionWidth: collisionWidth, - collisionHeight: collisionHeight, - offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], - my: options.my, - at: options.at, - within: within, - elem: elem - } ); - } - } ); - - if ( options.using ) { - - // Adds feedback as second argument to using callback, if present - using = function( props ) { - var left = targetOffset.left - position.left, - right = left + targetWidth - elemWidth, - top = targetOffset.top - position.top, - bottom = top + targetHeight - elemHeight, - feedback = { - target: { - element: target, - left: targetOffset.left, - top: targetOffset.top, - width: targetWidth, - height: targetHeight - }, - element: { - element: elem, - left: position.left, - top: position.top, - width: elemWidth, - height: elemHeight - }, - horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", - vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" - }; - if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) { - feedback.horizontal = "center"; - } - if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) { - feedback.vertical = "middle"; - } - if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) { - feedback.important = "horizontal"; - } else { - feedback.important = "vertical"; - } - options.using.call( this, props, feedback ); - }; - } - - elem.offset( $.extend( position, { using: using } ) ); - } ); -}; - -$.ui.position = { - fit: { - left: function( position, data ) { - var within = data.within, - withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, - outerWidth = within.width, - collisionPosLeft = position.left - data.collisionPosition.marginLeft, - overLeft = withinOffset - collisionPosLeft, - overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, - newOverRight; - - // Element is wider than within - if ( data.collisionWidth > outerWidth ) { - - // Element is initially over the left side of within - if ( overLeft > 0 && overRight <= 0 ) { - newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - - withinOffset; - position.left += overLeft - newOverRight; - - // Element is initially over right side of within - } else if ( overRight > 0 && overLeft <= 0 ) { - position.left = withinOffset; - - // Element is initially over both left and right sides of within - } else { - if ( overLeft > overRight ) { - position.left = withinOffset + outerWidth - data.collisionWidth; - } else { - position.left = withinOffset; - } - } - - // Too far left -> align with left edge - } else if ( overLeft > 0 ) { - position.left += overLeft; - - // Too far right -> align with right edge - } else if ( overRight > 0 ) { - position.left -= overRight; - - // Adjust based on position and margin - } else { - position.left = max( position.left - collisionPosLeft, position.left ); - } - }, - top: function( position, data ) { - var within = data.within, - withinOffset = within.isWindow ? within.scrollTop : within.offset.top, - outerHeight = data.within.height, - collisionPosTop = position.top - data.collisionPosition.marginTop, - overTop = withinOffset - collisionPosTop, - overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, - newOverBottom; - - // Element is taller than within - if ( data.collisionHeight > outerHeight ) { - - // Element is initially over the top of within - if ( overTop > 0 && overBottom <= 0 ) { - newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - - withinOffset; - position.top += overTop - newOverBottom; - - // Element is initially over bottom of within - } else if ( overBottom > 0 && overTop <= 0 ) { - position.top = withinOffset; - - // Element is initially over both top and bottom of within - } else { - if ( overTop > overBottom ) { - position.top = withinOffset + outerHeight - data.collisionHeight; - } else { - position.top = withinOffset; - } - } - - // Too far up -> align with top - } else if ( overTop > 0 ) { - position.top += overTop; - - // Too far down -> align with bottom edge - } else if ( overBottom > 0 ) { - position.top -= overBottom; - - // Adjust based on position and margin - } else { - position.top = max( position.top - collisionPosTop, position.top ); - } - } - }, - flip: { - left: function( position, data ) { - var within = data.within, - withinOffset = within.offset.left + within.scrollLeft, - outerWidth = within.width, - offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, - collisionPosLeft = position.left - data.collisionPosition.marginLeft, - overLeft = collisionPosLeft - offsetLeft, - overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, - myOffset = data.my[ 0 ] === "left" ? - -data.elemWidth : - data.my[ 0 ] === "right" ? - data.elemWidth : - 0, - atOffset = data.at[ 0 ] === "left" ? - data.targetWidth : - data.at[ 0 ] === "right" ? - -data.targetWidth : - 0, - offset = -2 * data.offset[ 0 ], - newOverRight, - newOverLeft; - - if ( overLeft < 0 ) { - newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - - outerWidth - withinOffset; - if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { - position.left += myOffset + atOffset + offset; - } - } else if ( overRight > 0 ) { - newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + - atOffset + offset - offsetLeft; - if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { - position.left += myOffset + atOffset + offset; - } - } - }, - top: function( position, data ) { - var within = data.within, - withinOffset = within.offset.top + within.scrollTop, - outerHeight = within.height, - offsetTop = within.isWindow ? within.scrollTop : within.offset.top, - collisionPosTop = position.top - data.collisionPosition.marginTop, - overTop = collisionPosTop - offsetTop, - overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, - top = data.my[ 1 ] === "top", - myOffset = top ? - -data.elemHeight : - data.my[ 1 ] === "bottom" ? - data.elemHeight : - 0, - atOffset = data.at[ 1 ] === "top" ? - data.targetHeight : - data.at[ 1 ] === "bottom" ? - -data.targetHeight : - 0, - offset = -2 * data.offset[ 1 ], - newOverTop, - newOverBottom; - if ( overTop < 0 ) { - newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - - outerHeight - withinOffset; - if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) { - position.top += myOffset + atOffset + offset; - } - } else if ( overBottom > 0 ) { - newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + - offset - offsetTop; - if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) { - position.top += myOffset + atOffset + offset; - } - } - } - }, - flipfit: { - left: function() { - $.ui.position.flip.left.apply( this, arguments ); - $.ui.position.fit.left.apply( this, arguments ); - }, - top: function() { - $.ui.position.flip.top.apply( this, arguments ); - $.ui.position.fit.top.apply( this, arguments ); - } - } -}; - -} )(); - -var position = $.ui.position; - - -/*! - * jQuery UI :data 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -//>>label: :data Selector -//>>group: Core -//>>description: Selects elements which have data stored under the specified key. -//>>docs: http://api.jqueryui.com/data-selector/ - - -var data = $.extend( $.expr[ ":" ], { - data: $.expr.createPseudo ? - $.expr.createPseudo( function( dataName ) { - return function( elem ) { - return !!$.data( elem, dataName ); - }; - } ) : - - // Support: jQuery <1.8 - function( elem, i, match ) { - return !!$.data( elem, match[ 3 ] ); - } -} ); - -/*! - * jQuery UI Disable Selection 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -//>>label: disableSelection -//>>group: Core -//>>description: Disable selection of text content within the set of matched elements. -//>>docs: http://api.jqueryui.com/disableSelection/ - -// This file is deprecated - - -var disableSelection = $.fn.extend( { - disableSelection: ( function() { - var eventType = "onselectstart" in document.createElement( "div" ) ? - "selectstart" : - "mousedown"; - - return function() { - return this.on( eventType + ".ui-disableSelection", function( event ) { - event.preventDefault(); - } ); - }; - } )(), - - enableSelection: function() { - return this.off( ".ui-disableSelection" ); - } -} ); - - -/*! - * jQuery UI Focusable 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -//>>label: :focusable Selector -//>>group: Core -//>>description: Selects elements which can be focused. -//>>docs: http://api.jqueryui.com/focusable-selector/ - - - -// Selectors -$.ui.focusable = function( element, hasTabindex ) { - var map, mapName, img, focusableIfVisible, fieldset, - nodeName = element.nodeName.toLowerCase(); - - if ( "area" === nodeName ) { - map = element.parentNode; - mapName = map.name; - if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { - return false; - } - img = $( "img[usemap='#" + mapName + "']" ); - return img.length > 0 && img.is( ":visible" ); - } - - if ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) { - focusableIfVisible = !element.disabled; - - if ( focusableIfVisible ) { - - // Form controls within a disabled fieldset are disabled. - // However, controls within the fieldset's legend do not get disabled. - // Since controls generally aren't placed inside legends, we skip - // this portion of the check. - fieldset = $( element ).closest( "fieldset" )[ 0 ]; - if ( fieldset ) { - focusableIfVisible = !fieldset.disabled; - } - } - } else if ( "a" === nodeName ) { - focusableIfVisible = element.href || hasTabindex; - } else { - focusableIfVisible = hasTabindex; - } - - return focusableIfVisible && $( element ).is( ":visible" ) && visible( $( element ) ); -}; - -// Support: IE 8 only -// IE 8 doesn't resolve inherit to visible/hidden for computed values -function visible( element ) { - var visibility = element.css( "visibility" ); - while ( visibility === "inherit" ) { - element = element.parent(); - visibility = element.css( "visibility" ); - } - return visibility !== "hidden"; -} - -$.extend( $.expr[ ":" ], { - focusable: function( element ) { - return $.ui.focusable( element, $.attr( element, "tabindex" ) != null ); - } -} ); - -var focusable = $.ui.focusable; - - - - -// Support: IE8 Only -// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop -// with a string, so we need to find the proper form. -var form = $.fn.form = function() { - return typeof this[ 0 ].form === "string" ? this.closest( "form" ) : $( this[ 0 ].form ); -}; - - -/*! - * jQuery UI Form Reset Mixin 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -//>>label: Form Reset Mixin -//>>group: Core -//>>description: Refresh input widgets when their form is reset -//>>docs: http://api.jqueryui.com/form-reset-mixin/ - - - -var formResetMixin = $.ui.formResetMixin = { - _formResetHandler: function() { - var form = $( this ); - - // Wait for the form reset to actually happen before refreshing - setTimeout( function() { - var instances = form.data( "ui-form-reset-instances" ); - $.each( instances, function() { - this.refresh(); - } ); - } ); - }, - - _bindFormResetHandler: function() { - this.form = this.element.form(); - if ( !this.form.length ) { - return; - } - - var instances = this.form.data( "ui-form-reset-instances" ) || []; - if ( !instances.length ) { - - // We don't use _on() here because we use a single event handler per form - this.form.on( "reset.ui-form-reset", this._formResetHandler ); - } - instances.push( this ); - this.form.data( "ui-form-reset-instances", instances ); - }, - - _unbindFormResetHandler: function() { - if ( !this.form.length ) { - return; - } - - var instances = this.form.data( "ui-form-reset-instances" ); - instances.splice( $.inArray( this, instances ), 1 ); - if ( instances.length ) { - this.form.data( "ui-form-reset-instances", instances ); - } else { - this.form - .removeData( "ui-form-reset-instances" ) - .off( "reset.ui-form-reset" ); - } - } -}; - - -/*! - * jQuery UI Support for jQuery core 1.7.x 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - */ - -//>>label: jQuery 1.7 Support -//>>group: Core -//>>description: Support version 1.7.x of jQuery core - - - -// Support: jQuery 1.7 only -// Not a great way to check versions, but since we only support 1.7+ and only -// need to detect <1.8, this is a simple check that should suffice. Checking -// for "1.7." would be a bit safer, but the version string is 1.7, not 1.7.0 -// and we'll never reach 1.70.0 (if we do, we certainly won't be supporting -// 1.7 anymore). See #11197 for why we're not using feature detection. -if ( $.fn.jquery.substring( 0, 3 ) === "1.7" ) { - - // Setters for .innerWidth(), .innerHeight(), .outerWidth(), .outerHeight() - // Unlike jQuery Core 1.8+, these only support numeric values to set the - // dimensions in pixels - $.each( [ "Width", "Height" ], function( i, name ) { - var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], - type = name.toLowerCase(), - orig = { - innerWidth: $.fn.innerWidth, - innerHeight: $.fn.innerHeight, - outerWidth: $.fn.outerWidth, - outerHeight: $.fn.outerHeight - }; - - function reduce( elem, size, border, margin ) { - $.each( side, function() { - size -= parseFloat( $.css( elem, "padding" + this ) ) || 0; - if ( border ) { - size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0; - } - if ( margin ) { - size -= parseFloat( $.css( elem, "margin" + this ) ) || 0; - } - } ); - return size; - } - - $.fn[ "inner" + name ] = function( size ) { - if ( size === undefined ) { - return orig[ "inner" + name ].call( this ); - } - - return this.each( function() { - $( this ).css( type, reduce( this, size ) + "px" ); - } ); - }; - - $.fn[ "outer" + name ] = function( size, margin ) { - if ( typeof size !== "number" ) { - return orig[ "outer" + name ].call( this, size ); - } - - return this.each( function() { - $( this ).css( type, reduce( this, size, true, margin ) + "px" ); - } ); - }; - } ); - - $.fn.addBack = function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - }; -} - -; -/*! - * jQuery UI Keycode 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -//>>label: Keycode -//>>group: Core -//>>description: Provide keycodes as keynames -//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/ - - -var keycode = $.ui.keyCode = { - BACKSPACE: 8, - COMMA: 188, - DELETE: 46, - DOWN: 40, - END: 35, - ENTER: 13, - ESCAPE: 27, - HOME: 36, - LEFT: 37, - PAGE_DOWN: 34, - PAGE_UP: 33, - PERIOD: 190, - RIGHT: 39, - SPACE: 32, - TAB: 9, - UP: 38 -}; - - - - -// Internal use only -var escapeSelector = $.ui.escapeSelector = ( function() { - var selectorEscape = /([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g; - return function( selector ) { - return selector.replace( selectorEscape, "\\$1" ); - }; -} )(); - - -/*! - * jQuery UI Labels 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -//>>label: labels -//>>group: Core -//>>description: Find all the labels associated with a given input -//>>docs: http://api.jqueryui.com/labels/ - - - -var labels = $.fn.labels = function() { - var ancestor, selector, id, labels, ancestors; - - // Check control.labels first - if ( this[ 0 ].labels && this[ 0 ].labels.length ) { - return this.pushStack( this[ 0 ].labels ); - } - - // Support: IE <= 11, FF <= 37, Android <= 2.3 only - // Above browsers do not support control.labels. Everything below is to support them - // as well as document fragments. control.labels does not work on document fragments - labels = this.eq( 0 ).parents( "label" ); - - // Look for the label based on the id - id = this.attr( "id" ); - if ( id ) { - - // We don't search against the document in case the element - // is disconnected from the DOM - ancestor = this.eq( 0 ).parents().last(); - - // Get a full set of top level ancestors - ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() ); - - // Create a selector for the label based on the id - selector = "label[for='" + $.ui.escapeSelector( id ) + "']"; - - labels = labels.add( ancestors.find( selector ).addBack( selector ) ); - - } - - // Return whatever we have found for labels - return this.pushStack( labels ); -}; - - -/*! - * jQuery UI Scroll Parent 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -//>>label: scrollParent -//>>group: Core -//>>description: Get the closest ancestor element that is scrollable. -//>>docs: http://api.jqueryui.com/scrollParent/ - - - -var scrollParent = $.fn.scrollParent = function( includeHidden ) { - var position = this.css( "position" ), - excludeStaticParent = position === "absolute", - overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/, - scrollParent = this.parents().filter( function() { - var parent = $( this ); - if ( excludeStaticParent && parent.css( "position" ) === "static" ) { - return false; - } - return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + - parent.css( "overflow-x" ) ); - } ).eq( 0 ); - - return position === "fixed" || !scrollParent.length ? - $( this[ 0 ].ownerDocument || document ) : - scrollParent; -}; - - -/*! - * jQuery UI Tabbable 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -//>>label: :tabbable Selector -//>>group: Core -//>>description: Selects elements which can be tabbed to. -//>>docs: http://api.jqueryui.com/tabbable-selector/ - - - -var tabbable = $.extend( $.expr[ ":" ], { - tabbable: function( element ) { - var tabIndex = $.attr( element, "tabindex" ), - hasTabindex = tabIndex != null; - return ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex ); - } -} ); - - -/*! - * jQuery UI Unique ID 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -//>>label: uniqueId -//>>group: Core -//>>description: Functions to generate and remove uniqueId's -//>>docs: http://api.jqueryui.com/uniqueId/ - - - -var uniqueId = $.fn.extend( { - uniqueId: ( function() { - var uuid = 0; - - return function() { - return this.each( function() { - if ( !this.id ) { - this.id = "ui-id-" + ( ++uuid ); - } - } ); - }; - } )(), - - removeUniqueId: function() { - return this.each( function() { - if ( /^ui-id-\d+$/.test( this.id ) ) { - $( this ).removeAttr( "id" ); - } - } ); - } -} ); - - - - -// This file is deprecated -var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); - -/*! - * jQuery UI Mouse 1.12.1 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - */ - -//>>label: Mouse -//>>group: Widgets -//>>description: Abstracts mouse-based interactions to assist in creating certain widgets. -//>>docs: http://api.jqueryui.com/mouse/ - - - -var mouseHandled = false; -$( document ).on( "mouseup", function() { - mouseHandled = false; -} ); - -var widgetsMouse = $.widget( "ui.mouse", { - version: "1.12.1", - options: { - cancel: "input, textarea, button, select, option", - distance: 1, - delay: 0 - }, - _mouseInit: function() { - var that = this; - - this.element - .on( "mousedown." + this.widgetName, function( event ) { - return that._mouseDown( event ); - } ) - .on( "click." + this.widgetName, function( event ) { - if ( true === $.data( event.target, that.widgetName + ".preventClickEvent" ) ) { - $.removeData( event.target, that.widgetName + ".preventClickEvent" ); - event.stopImmediatePropagation(); - return false; - } - } ); - - this.started = false; - }, - - // TODO: make sure destroying one instance of mouse doesn't mess with - // other instances of mouse - _mouseDestroy: function() { - this.element.off( "." + this.widgetName ); - if ( this._mouseMoveDelegate ) { - this.document - .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) - .off( "mouseup." + this.widgetName, this._mouseUpDelegate ); - } - }, - - _mouseDown: function( event ) { - - // don't let more than one widget handle mouseStart - if ( mouseHandled ) { - return; - } - - this._mouseMoved = false; - - // We may have missed mouseup (out of window) - ( this._mouseStarted && this._mouseUp( event ) ); - - this._mouseDownEvent = event; - - var that = this, - btnIsLeft = ( event.which === 1 ), - - // event.target.nodeName works around a bug in IE 8 with - // disabled inputs (#7620) - elIsCancel = ( typeof this.options.cancel === "string" && event.target.nodeName ? - $( event.target ).closest( this.options.cancel ).length : false ); - if ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) { - return true; - } - - this.mouseDelayMet = !this.options.delay; - if ( !this.mouseDelayMet ) { - this._mouseDelayTimer = setTimeout( function() { - that.mouseDelayMet = true; - }, this.options.delay ); - } - - if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) { - this._mouseStarted = ( this._mouseStart( event ) !== false ); - if ( !this._mouseStarted ) { - event.preventDefault(); - return true; - } - } - - // Click event may never have fired (Gecko & Opera) - if ( true === $.data( event.target, this.widgetName + ".preventClickEvent" ) ) { - $.removeData( event.target, this.widgetName + ".preventClickEvent" ); - } - - // These delegates are required to keep context - this._mouseMoveDelegate = function( event ) { - return that._mouseMove( event ); - }; - this._mouseUpDelegate = function( event ) { - return that._mouseUp( event ); - }; - - this.document - .on( "mousemove." + this.widgetName, this._mouseMoveDelegate ) - .on( "mouseup." + this.widgetName, this._mouseUpDelegate ); - - event.preventDefault(); - - mouseHandled = true; - return true; - }, - - _mouseMove: function( event ) { - - // Only check for mouseups outside the document if you've moved inside the document - // at least once. This prevents the firing of mouseup in the case of IE<9, which will - // fire a mousemove event if content is placed under the cursor. See #7778 - // Support: IE <9 - if ( this._mouseMoved ) { - - // IE mouseup check - mouseup happened when mouse was out of window - if ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && - !event.button ) { - return this._mouseUp( event ); - - // Iframe mouseup check - mouseup occurred in another document - } else if ( !event.which ) { - - // Support: Safari <=8 - 9 - // Safari sets which to 0 if you press any of the following keys - // during a drag (#14461) - if ( event.originalEvent.altKey || event.originalEvent.ctrlKey || - event.originalEvent.metaKey || event.originalEvent.shiftKey ) { - this.ignoreMissingWhich = true; - } else if ( !this.ignoreMissingWhich ) { - return this._mouseUp( event ); - } - } - } - - if ( event.which || event.button ) { - this._mouseMoved = true; - } - - if ( this._mouseStarted ) { - this._mouseDrag( event ); - return event.preventDefault(); - } - - if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) { - this._mouseStarted = - ( this._mouseStart( this._mouseDownEvent, event ) !== false ); - ( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) ); - } - - return !this._mouseStarted; - }, - - _mouseUp: function( event ) { - this.document - .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) - .off( "mouseup." + this.widgetName, this._mouseUpDelegate ); - - if ( this._mouseStarted ) { - this._mouseStarted = false; - - if ( event.target === this._mouseDownEvent.target ) { - $.data( event.target, this.widgetName + ".preventClickEvent", true ); - } - - this._mouseStop( event ); - } - - if ( this._mouseDelayTimer ) { - clearTimeout( this._mouseDelayTimer ); - delete this._mouseDelayTimer; - } - - this.ignoreMissingWhich = false; - mouseHandled = false; - event.preventDefault(); - }, - - _mouseDistanceMet: function( event ) { - return ( Math.max( - Math.abs( this._mouseDownEvent.pageX - event.pageX ), - Math.abs( this._mouseDownEvent.pageY - event.pageY ) - ) >= this.options.distance - ); - }, - - _mouseDelayMet: function( /* event */ ) { - return this.mouseDelayMet; - }, - - // These are placeholder methods, to be overriden by extending plugin - _mouseStart: function( /* event */ ) {}, - _mouseDrag: function( /* event */ ) {}, - _mouseStop: function( /* event */ ) {}, - _mouseCapture: function( /* event */ ) { return true; } -} ); - - - - -// $.ui.plugin is deprecated. Use $.widget() extensions instead. -var plugin = $.ui.plugin = { - add: function( module, option, set ) { - var i, - proto = $.ui[ module ].prototype; - for ( i in set ) { - proto.plugins[ i ] = proto.plugins[ i ] || []; - proto.plugins[ i ].push( [ option, set[ i ] ] ); - } - }, - call: function( instance, name, args, allowDisconnected ) { - var i, - set = instance.plugins[ name ]; - - if ( !set ) { - return; - } - - if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || - instance.element[ 0 ].parentNode.nodeType === 11 ) ) { - return; - } - - for ( i = 0; i < set.length; i++ ) { - if ( instance.options[ set[ i ][ 0 ] ] ) { - set[ i ][ 1 ].apply( instance.element, args ); - } - } - } -}; - - - -var safeActiveElement = $.ui.safeActiveElement = function( document ) { - var activeElement; - - // Support: IE 9 only - // IE9 throws an "Unspecified error" accessing document.activeElement from an